From c12a50b64b8ac88257cbf2cacb62ef9d8e6d42f4 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Mon, 30 Oct 2017 15:38:29 +0100 Subject: [PATCH] Integrate LEF/DEF 5.8 into the tree (Apache 2.0 licensing) * New: As, starting from version 5.8, LEF/DEF parser/drivers are availables under Apache 2.0 license, integrate them inside the project. Rewrite the Makefiles into CMakeLists.txt, build only the C++ version. Create an entry for the LEF/DEF doc in the documentation. --- bootstrap/build.conf | 1 + bootstrap/cmake_modules/FindLEFDEF.cmake | 159 +- crlcore/src/ccore/lefdef/DefDriver.cpp | 10 +- crlcore/src/ccore/lefdef/DefExport.cpp | 6 +- crlcore/src/ccore/lefdef/DefImport.cpp | 6 +- crlcore/src/ccore/lefdef/DefParser.cpp | 6 +- crlcore/src/ccore/lefdef/LefExport.cpp | 8 +- crlcore/src/ccore/lefdef/LefParser.cpp | 16 +- lefdef/CMakeLists.txt | 25 + lefdef/doc/CMakeLists.txt | 14 + lefdef/doc/defapi/appA_DEFexamples.html | 14778 ++++++++++++++++ lefdef/doc/defapi/ch1Intro.html | 404 + lefdef/doc/defapi/ch2DEFsetup.html | 484 + lefdef/doc/defapi/ch3DEFcallback.html | 2860 +++ lefdef/doc/defapi/ch4DEFclasses.html | 841 + lefdef/doc/defapi/ch5DEFwritercallback.html | 737 + lefdef/doc/defapi/ch6DEFwriter.html | 5572 ++++++ lefdef/doc/defapi/ch7DEFcompressed.html | 320 + lefdef/doc/defapi/ch8lefdiff.html | 381 + lefdef/doc/defapi/defapi.pdf | 9477 ++++++++++ lefdef/doc/defapi/defapiTOC.html | 557 + lefdef/doc/defapi/images/Diamond.gif | Bin 0 -> 92 bytes lefdef/doc/defapi/images/Diamond1.gif | Bin 0 -> 178 bytes lefdef/doc/defapi/images/Diamond12.gif | Bin 0 -> 285 bytes lefdef/doc/defapi/images/Thumbs.db | Bin 0 -> 161792 bytes lefdef/doc/defapi/images/aleph.gif | Bin 0 -> 155 bytes lefdef/doc/defapi/images/alpha.gif | Bin 0 -> 147 bytes lefdef/doc/defapi/images/ampersnd.gif | Bin 0 -> 209 bytes lefdef/doc/defapi/images/angle.gif | Bin 0 -> 74 bytes lefdef/doc/defapi/images/anglleft.gif | Bin 0 -> 118 bytes lefdef/doc/defapi/images/anglrite.gif | Bin 0 -> 120 bytes lefdef/doc/defapi/images/approx.gif | Bin 0 -> 125 bytes lefdef/doc/defapi/images/arrwboth.gif | Bin 0 -> 154 bytes lefdef/doc/defapi/images/arrwdbbo.gif | Bin 0 -> 145 bytes lefdef/doc/defapi/images/arrwdbdn.gif | Bin 0 -> 138 bytes lefdef/doc/defapi/images/arrwdblt.gif | Bin 0 -> 126 bytes lefdef/doc/defapi/images/arrwdbrt.gif | Bin 0 -> 124 bytes lefdef/doc/defapi/images/arrwdbup.gif | Bin 0 -> 137 bytes lefdef/doc/defapi/images/arrwdown.gif | Bin 0 -> 131 bytes lefdef/doc/defapi/images/arrwleft.gif | Bin 0 -> 131 bytes lefdef/doc/defapi/images/arrwrite.gif | Bin 0 -> 131 bytes lefdef/doc/defapi/images/arrwup.gif | Bin 0 -> 135 bytes lefdef/doc/defapi/images/arrwvert.gif | Bin 0 -> 85 bytes lefdef/doc/defapi/images/b_bullet.gif | Bin 0 -> 818 bytes lefdef/doc/defapi/images/beta.gif | Bin 0 -> 151 bytes lefdef/doc/defapi/images/blank.gif | Bin 0 -> 68 bytes lefdef/doc/defapi/images/bracltbt.gif | Bin 0 -> 119 bytes lefdef/doc/defapi/images/bracltmd.gif | Bin 0 -> 122 bytes lefdef/doc/defapi/images/braclttp.gif | Bin 0 -> 116 bytes lefdef/doc/defapi/images/bracrtbt.gif | Bin 0 -> 121 bytes lefdef/doc/defapi/images/bracrtmd.gif | Bin 0 -> 125 bytes lefdef/doc/defapi/images/bracrttp.gif | Bin 0 -> 122 bytes lefdef/doc/defapi/images/brakltbt.gif | Bin 0 -> 90 bytes lefdef/doc/defapi/images/braklttp.gif | Bin 0 -> 88 bytes lefdef/doc/defapi/images/brakmidl.gif | Bin 0 -> 84 bytes lefdef/doc/defapi/images/brakrtbt.gif | Bin 0 -> 122 bytes lefdef/doc/defapi/images/brakrttp.gif | Bin 0 -> 92 bytes lefdef/doc/defapi/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes .../doc/defapi/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes lefdef/doc/defapi/images/bullet.gif | Bin 0 -> 120 bytes lefdef/doc/defapi/images/capalpha.gif | Bin 0 -> 138 bytes lefdef/doc/defapi/images/capbeta.gif | Bin 0 -> 141 bytes lefdef/doc/defapi/images/capchi.gif | Bin 0 -> 144 bytes lefdef/doc/defapi/images/capdelta.gif | Bin 0 -> 141 bytes lefdef/doc/defapi/images/capepsil.gif | Bin 0 -> 130 bytes lefdef/doc/defapi/images/capeta.gif | Bin 0 -> 139 bytes lefdef/doc/defapi/images/capgamma.gif | Bin 0 -> 118 bytes lefdef/doc/defapi/images/capiota.gif | Bin 0 -> 111 bytes lefdef/doc/defapi/images/capkappa.gif | Bin 0 -> 143 bytes lefdef/doc/defapi/images/caplambd.gif | Bin 0 -> 139 bytes lefdef/doc/defapi/images/capmu.gif | Bin 0 -> 159 bytes lefdef/doc/defapi/images/capnu.gif | Bin 0 -> 156 bytes lefdef/doc/defapi/images/capomega.gif | Bin 0 -> 152 bytes lefdef/doc/defapi/images/capomicr.gif | Bin 0 -> 145 bytes lefdef/doc/defapi/images/capphi.gif | Bin 0 -> 161 bytes lefdef/doc/defapi/images/cappi.gif | Bin 0 -> 132 bytes lefdef/doc/defapi/images/cappsi.gif | Bin 0 -> 138 bytes lefdef/doc/defapi/images/caprho.gif | Bin 0 -> 133 bytes lefdef/doc/defapi/images/capsigma.gif | Bin 0 -> 131 bytes lefdef/doc/defapi/images/captau.gif | Bin 0 -> 124 bytes lefdef/doc/defapi/images/captheta.gif | Bin 0 -> 153 bytes lefdef/doc/defapi/images/capupsil.gif | Bin 0 -> 140 bytes lefdef/doc/defapi/images/capxi.gif | Bin 0 -> 138 bytes lefdef/doc/defapi/images/capzeta.gif | Bin 0 -> 138 bytes lefdef/doc/defapi/images/carretrn.gif | Bin 0 -> 119 bytes lefdef/doc/defapi/images/caution.gif | Bin 0 -> 286 bytes lefdef/doc/defapi/images/ch1Intro.04.1.1.png | Bin 0 -> 20516 bytes lefdef/doc/defapi/images/chi.gif | Bin 0 -> 145 bytes lefdef/doc/defapi/images/circmult.gif | Bin 0 -> 81 bytes lefdef/doc/defapi/images/circplus.gif | Bin 0 -> 80 bytes lefdef/doc/defapi/images/club.gif | Bin 0 -> 134 bytes lefdef/doc/defapi/images/congrunt.gif | Bin 0 -> 115 bytes lefdef/doc/defapi/images/delta.gif | Bin 0 -> 141 bytes lefdef/doc/defapi/images/draft.gif | Bin 0 -> 279 bytes lefdef/doc/defapi/images/element.gif | Bin 0 -> 121 bytes lefdef/doc/defapi/images/emptyset.gif | Bin 0 -> 81 bytes lefdef/doc/defapi/images/epsilon.gif | Bin 0 -> 123 bytes lefdef/doc/defapi/images/epsilon1.gif | Bin 0 -> 74 bytes lefdef/doc/defapi/images/equivlnt.gif | Bin 0 -> 115 bytes lefdef/doc/defapi/images/eta.gif | Bin 0 -> 132 bytes lefdef/doc/defapi/images/existntl.gif | Bin 0 -> 117 bytes lefdef/doc/defapi/images/gamma.gif | Bin 0 -> 132 bytes lefdef/doc/defapi/images/gradient.gif | Bin 0 -> 136 bytes lefdef/doc/defapi/images/gtequal.gif | Bin 0 -> 126 bytes lefdef/doc/defapi/images/header_doc.gif | Bin 0 -> 2954 bytes lefdef/doc/defapi/images/heart.gif | Bin 0 -> 133 bytes lefdef/doc/defapi/images/ifraktur.gif | Bin 0 -> 146 bytes lefdef/doc/defapi/images/important.gif | Bin 0 -> 267 bytes lefdef/doc/defapi/images/infinity.gif | Bin 0 -> 139 bytes lefdef/doc/defapi/images/integbot.gif | Bin 0 -> 134 bytes lefdef/doc/defapi/images/integral.gif | Bin 0 -> 123 bytes lefdef/doc/defapi/images/integtop.gif | Bin 0 -> 131 bytes lefdef/doc/defapi/images/intrsect.gif | Bin 0 -> 126 bytes lefdef/doc/defapi/images/iota.gif | Bin 0 -> 112 bytes lefdef/doc/defapi/images/kappa.gif | Bin 0 -> 124 bytes lefdef/doc/defapi/images/lambda.gif | Bin 0 -> 137 bytes lefdef/doc/defapi/images/logic_or.gif | Bin 0 -> 67 bytes lefdef/doc/defapi/images/logicand.gif | Bin 0 -> 93 bytes lefdef/doc/defapi/images/lozenge.gif | Bin 0 -> 129 bytes lefdef/doc/defapi/images/lt_equal.gif | Bin 0 -> 124 bytes lefdef/doc/defapi/images/nav2_index.gif | Bin 0 -> 1050 bytes lefdef/doc/defapi/images/nav2_index_b.gif | Bin 0 -> 854 bytes lefdef/doc/defapi/images/nav2_next_b.gif | Bin 0 -> 861 bytes lefdef/doc/defapi/images/nav2_previous.gif | Bin 0 -> 1202 bytes lefdef/doc/defapi/images/nav2_previous_b.gif | Bin 0 -> 871 bytes lefdef/doc/defapi/images/nav2_print.gif | Bin 0 -> 1341 bytes lefdef/doc/defapi/images/nav2_toc.gif | Bin 0 -> 1154 bytes lefdef/doc/defapi/images/nav2_toc_b.gif | Bin 0 -> 866 bytes lefdef/doc/defapi/images/nav_next.gif | Bin 0 -> 1092 bytes lefdef/doc/defapi/images/nav_next_b.gif | Bin 0 -> 863 bytes lefdef/doc/defapi/images/notelemn.gif | Bin 0 -> 141 bytes lefdef/doc/defapi/images/notequal.gif | Bin 0 -> 121 bytes lefdef/doc/defapi/images/notsbset.gif | Bin 0 -> 129 bytes lefdef/doc/defapi/images/nu.gif | Bin 0 -> 124 bytes lefdef/doc/defapi/images/omega.gif | Bin 0 -> 140 bytes lefdef/doc/defapi/images/omega1.gif | Bin 0 -> 144 bytes lefdef/doc/defapi/images/omicron.gif | Bin 0 -> 132 bytes lefdef/doc/defapi/images/pareltbt.gif | Bin 0 -> 126 bytes lefdef/doc/defapi/images/parelttp.gif | Bin 0 -> 126 bytes lefdef/doc/defapi/images/parertbt.gif | Bin 0 -> 127 bytes lefdef/doc/defapi/images/parerttp.gif | Bin 0 -> 124 bytes lefdef/doc/defapi/images/partldif.gif | Bin 0 -> 137 bytes lefdef/doc/defapi/images/perpend.gif | Bin 0 -> 111 bytes lefdef/doc/defapi/images/phi.gif | Bin 0 -> 142 bytes lefdef/doc/defapi/images/phi1.gif | Bin 0 -> 143 bytes lefdef/doc/defapi/images/pi.gif | Bin 0 -> 134 bytes lefdef/doc/defapi/images/product.gif | Bin 0 -> 80 bytes lefdef/doc/defapi/images/proportn.gif | Bin 0 -> 132 bytes lefdef/doc/defapi/images/prsprset.gif | Bin 0 -> 67 bytes lefdef/doc/defapi/images/prsubset.gif | Bin 0 -> 117 bytes lefdef/doc/defapi/images/psi.gif | Bin 0 -> 146 bytes lefdef/doc/defapi/images/radical.gif | Bin 0 -> 78 bytes lefdef/doc/defapi/images/refsbset.gif | Bin 0 -> 118 bytes lefdef/doc/defapi/images/refspset.gif | Bin 0 -> 124 bytes lefdef/doc/defapi/images/rfraktur.gif | Bin 0 -> 153 bytes lefdef/doc/defapi/images/rho.gif | Bin 0 -> 134 bytes lefdef/doc/defapi/images/second.gif | Bin 0 -> 115 bytes lefdef/doc/defapi/images/sigma.gif | Bin 0 -> 132 bytes lefdef/doc/defapi/images/sigma1.gif | Bin 0 -> 135 bytes lefdef/doc/defapi/images/spade.gif | Bin 0 -> 122 bytes lefdef/doc/defapi/images/suchthat.gif | Bin 0 -> 119 bytes lefdef/doc/defapi/images/sumation.gif | Bin 0 -> 77 bytes lefdef/doc/defapi/images/tau.gif | Bin 0 -> 119 bytes lefdef/doc/defapi/images/therefor.gif | Bin 0 -> 111 bytes lefdef/doc/defapi/images/theta.gif | Bin 0 -> 144 bytes lefdef/doc/defapi/images/theta1.gif | Bin 0 -> 148 bytes lefdef/doc/defapi/images/tip.gif | Bin 0 -> 241 bytes lefdef/doc/defapi/images/tm.gif | Bin 0 -> 145 bytes lefdef/doc/defapi/images/union.gif | Bin 0 -> 129 bytes lefdef/doc/defapi/images/univrsal.gif | Bin 0 -> 135 bytes lefdef/doc/defapi/images/upsilon.gif | Bin 0 -> 133 bytes lefdef/doc/defapi/images/upsilon1.gif | Bin 0 -> 131 bytes lefdef/doc/defapi/images/video.gif | Bin 0 -> 906 bytes lefdef/doc/defapi/images/weierstr.gif | Bin 0 -> 153 bytes lefdef/doc/defapi/images/xi.gif | Bin 0 -> 144 bytes lefdef/doc/defapi/images/zeta.gif | Bin 0 -> 142 bytes lefdef/doc/defapi/preface.html | 202 + lefdef/doc/defapi/titlecopy.html | 226 + lefdef/doc/defapiWN/ChangedFeatures.html | 869 + lefdef/doc/defapiWN/NewFeatures.html | 628 + lefdef/doc/defapiWN/defapiWN.pdf | Bin 0 -> 111804 bytes lefdef/doc/defapiWN/defapiWNTOC.html | 180 + lefdef/doc/defapiWN/images/Diamond.gif | Bin 0 -> 92 bytes lefdef/doc/defapiWN/images/Diamond1.gif | Bin 0 -> 178 bytes lefdef/doc/defapiWN/images/Diamond12.gif | Bin 0 -> 285 bytes lefdef/doc/defapiWN/images/Thumbs.db | Bin 0 -> 161792 bytes lefdef/doc/defapiWN/images/aleph.gif | Bin 0 -> 155 bytes lefdef/doc/defapiWN/images/alpha.gif | Bin 0 -> 147 bytes lefdef/doc/defapiWN/images/ampersnd.gif | Bin 0 -> 209 bytes lefdef/doc/defapiWN/images/angle.gif | Bin 0 -> 74 bytes lefdef/doc/defapiWN/images/anglleft.gif | Bin 0 -> 118 bytes lefdef/doc/defapiWN/images/anglrite.gif | Bin 0 -> 120 bytes lefdef/doc/defapiWN/images/approx.gif | Bin 0 -> 125 bytes lefdef/doc/defapiWN/images/arrwboth.gif | Bin 0 -> 154 bytes lefdef/doc/defapiWN/images/arrwdbbo.gif | Bin 0 -> 145 bytes lefdef/doc/defapiWN/images/arrwdbdn.gif | Bin 0 -> 138 bytes lefdef/doc/defapiWN/images/arrwdblt.gif | Bin 0 -> 126 bytes lefdef/doc/defapiWN/images/arrwdbrt.gif | Bin 0 -> 124 bytes lefdef/doc/defapiWN/images/arrwdbup.gif | Bin 0 -> 137 bytes lefdef/doc/defapiWN/images/arrwdown.gif | Bin 0 -> 131 bytes lefdef/doc/defapiWN/images/arrwleft.gif | Bin 0 -> 131 bytes lefdef/doc/defapiWN/images/arrwrite.gif | Bin 0 -> 131 bytes lefdef/doc/defapiWN/images/arrwup.gif | Bin 0 -> 135 bytes lefdef/doc/defapiWN/images/arrwvert.gif | Bin 0 -> 85 bytes lefdef/doc/defapiWN/images/b_bullet.gif | Bin 0 -> 818 bytes lefdef/doc/defapiWN/images/beta.gif | Bin 0 -> 151 bytes lefdef/doc/defapiWN/images/blank.gif | Bin 0 -> 68 bytes lefdef/doc/defapiWN/images/bracltbt.gif | Bin 0 -> 119 bytes lefdef/doc/defapiWN/images/bracltmd.gif | Bin 0 -> 122 bytes lefdef/doc/defapiWN/images/braclttp.gif | Bin 0 -> 116 bytes lefdef/doc/defapiWN/images/bracrtbt.gif | Bin 0 -> 121 bytes lefdef/doc/defapiWN/images/bracrtmd.gif | Bin 0 -> 125 bytes lefdef/doc/defapiWN/images/bracrttp.gif | Bin 0 -> 122 bytes lefdef/doc/defapiWN/images/brakltbt.gif | Bin 0 -> 90 bytes lefdef/doc/defapiWN/images/braklttp.gif | Bin 0 -> 88 bytes lefdef/doc/defapiWN/images/brakmidl.gif | Bin 0 -> 84 bytes lefdef/doc/defapiWN/images/brakrtbt.gif | Bin 0 -> 122 bytes lefdef/doc/defapiWN/images/brakrttp.gif | Bin 0 -> 92 bytes lefdef/doc/defapiWN/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes .../defapiWN/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes lefdef/doc/defapiWN/images/bullet.gif | Bin 0 -> 120 bytes lefdef/doc/defapiWN/images/capalpha.gif | Bin 0 -> 138 bytes lefdef/doc/defapiWN/images/capbeta.gif | Bin 0 -> 141 bytes lefdef/doc/defapiWN/images/capchi.gif | Bin 0 -> 144 bytes lefdef/doc/defapiWN/images/capdelta.gif | Bin 0 -> 141 bytes lefdef/doc/defapiWN/images/capepsil.gif | Bin 0 -> 130 bytes lefdef/doc/defapiWN/images/capeta.gif | Bin 0 -> 139 bytes lefdef/doc/defapiWN/images/capgamma.gif | Bin 0 -> 118 bytes lefdef/doc/defapiWN/images/capiota.gif | Bin 0 -> 111 bytes lefdef/doc/defapiWN/images/capkappa.gif | Bin 0 -> 143 bytes lefdef/doc/defapiWN/images/caplambd.gif | Bin 0 -> 139 bytes lefdef/doc/defapiWN/images/capmu.gif | Bin 0 -> 159 bytes lefdef/doc/defapiWN/images/capnu.gif | Bin 0 -> 156 bytes lefdef/doc/defapiWN/images/capomega.gif | Bin 0 -> 152 bytes lefdef/doc/defapiWN/images/capomicr.gif | Bin 0 -> 145 bytes lefdef/doc/defapiWN/images/capphi.gif | Bin 0 -> 161 bytes lefdef/doc/defapiWN/images/cappi.gif | Bin 0 -> 132 bytes lefdef/doc/defapiWN/images/cappsi.gif | Bin 0 -> 138 bytes lefdef/doc/defapiWN/images/caprho.gif | Bin 0 -> 133 bytes lefdef/doc/defapiWN/images/capsigma.gif | Bin 0 -> 131 bytes lefdef/doc/defapiWN/images/captau.gif | Bin 0 -> 124 bytes lefdef/doc/defapiWN/images/captheta.gif | Bin 0 -> 153 bytes lefdef/doc/defapiWN/images/capupsil.gif | Bin 0 -> 140 bytes lefdef/doc/defapiWN/images/capxi.gif | Bin 0 -> 138 bytes lefdef/doc/defapiWN/images/capzeta.gif | Bin 0 -> 138 bytes lefdef/doc/defapiWN/images/carretrn.gif | Bin 0 -> 119 bytes lefdef/doc/defapiWN/images/caution.gif | Bin 0 -> 286 bytes lefdef/doc/defapiWN/images/chi.gif | Bin 0 -> 145 bytes lefdef/doc/defapiWN/images/circmult.gif | Bin 0 -> 81 bytes lefdef/doc/defapiWN/images/circplus.gif | Bin 0 -> 80 bytes lefdef/doc/defapiWN/images/club.gif | Bin 0 -> 134 bytes lefdef/doc/defapiWN/images/congrunt.gif | Bin 0 -> 115 bytes lefdef/doc/defapiWN/images/delta.gif | Bin 0 -> 141 bytes lefdef/doc/defapiWN/images/draft.gif | Bin 0 -> 279 bytes lefdef/doc/defapiWN/images/element.gif | Bin 0 -> 121 bytes lefdef/doc/defapiWN/images/emptyset.gif | Bin 0 -> 81 bytes lefdef/doc/defapiWN/images/epsilon.gif | Bin 0 -> 123 bytes lefdef/doc/defapiWN/images/epsilon1.gif | Bin 0 -> 74 bytes lefdef/doc/defapiWN/images/equivlnt.gif | Bin 0 -> 115 bytes lefdef/doc/defapiWN/images/eta.gif | Bin 0 -> 132 bytes lefdef/doc/defapiWN/images/existntl.gif | Bin 0 -> 117 bytes lefdef/doc/defapiWN/images/gamma.gif | Bin 0 -> 132 bytes lefdef/doc/defapiWN/images/gradient.gif | Bin 0 -> 136 bytes lefdef/doc/defapiWN/images/gtequal.gif | Bin 0 -> 126 bytes lefdef/doc/defapiWN/images/header_doc.gif | Bin 0 -> 2954 bytes lefdef/doc/defapiWN/images/heart.gif | Bin 0 -> 133 bytes lefdef/doc/defapiWN/images/ifraktur.gif | Bin 0 -> 146 bytes lefdef/doc/defapiWN/images/important.gif | Bin 0 -> 267 bytes lefdef/doc/defapiWN/images/infinity.gif | Bin 0 -> 139 bytes lefdef/doc/defapiWN/images/integbot.gif | Bin 0 -> 134 bytes lefdef/doc/defapiWN/images/integral.gif | Bin 0 -> 123 bytes lefdef/doc/defapiWN/images/integtop.gif | Bin 0 -> 131 bytes lefdef/doc/defapiWN/images/intrsect.gif | Bin 0 -> 126 bytes lefdef/doc/defapiWN/images/iota.gif | Bin 0 -> 112 bytes lefdef/doc/defapiWN/images/kappa.gif | Bin 0 -> 124 bytes lefdef/doc/defapiWN/images/lambda.gif | Bin 0 -> 137 bytes lefdef/doc/defapiWN/images/logic_or.gif | Bin 0 -> 67 bytes lefdef/doc/defapiWN/images/logicand.gif | Bin 0 -> 93 bytes lefdef/doc/defapiWN/images/lozenge.gif | Bin 0 -> 129 bytes lefdef/doc/defapiWN/images/lt_equal.gif | Bin 0 -> 124 bytes lefdef/doc/defapiWN/images/nav2_index.gif | Bin 0 -> 1050 bytes lefdef/doc/defapiWN/images/nav2_index_b.gif | Bin 0 -> 854 bytes lefdef/doc/defapiWN/images/nav2_next_b.gif | Bin 0 -> 861 bytes lefdef/doc/defapiWN/images/nav2_previous.gif | Bin 0 -> 1202 bytes .../doc/defapiWN/images/nav2_previous_b.gif | Bin 0 -> 871 bytes lefdef/doc/defapiWN/images/nav2_print.gif | Bin 0 -> 1341 bytes lefdef/doc/defapiWN/images/nav2_toc.gif | Bin 0 -> 1154 bytes lefdef/doc/defapiWN/images/nav2_toc_b.gif | Bin 0 -> 866 bytes lefdef/doc/defapiWN/images/nav_next.gif | Bin 0 -> 1092 bytes lefdef/doc/defapiWN/images/nav_next_b.gif | Bin 0 -> 863 bytes lefdef/doc/defapiWN/images/notelemn.gif | Bin 0 -> 141 bytes lefdef/doc/defapiWN/images/notequal.gif | Bin 0 -> 121 bytes lefdef/doc/defapiWN/images/notsbset.gif | Bin 0 -> 129 bytes lefdef/doc/defapiWN/images/nu.gif | Bin 0 -> 124 bytes lefdef/doc/defapiWN/images/omega.gif | Bin 0 -> 140 bytes lefdef/doc/defapiWN/images/omega1.gif | Bin 0 -> 144 bytes lefdef/doc/defapiWN/images/omicron.gif | Bin 0 -> 132 bytes lefdef/doc/defapiWN/images/pareltbt.gif | Bin 0 -> 126 bytes lefdef/doc/defapiWN/images/parelttp.gif | Bin 0 -> 126 bytes lefdef/doc/defapiWN/images/parertbt.gif | Bin 0 -> 127 bytes lefdef/doc/defapiWN/images/parerttp.gif | Bin 0 -> 124 bytes lefdef/doc/defapiWN/images/partldif.gif | Bin 0 -> 137 bytes lefdef/doc/defapiWN/images/perpend.gif | Bin 0 -> 111 bytes lefdef/doc/defapiWN/images/phi.gif | Bin 0 -> 142 bytes lefdef/doc/defapiWN/images/phi1.gif | Bin 0 -> 143 bytes lefdef/doc/defapiWN/images/pi.gif | Bin 0 -> 134 bytes lefdef/doc/defapiWN/images/product.gif | Bin 0 -> 80 bytes lefdef/doc/defapiWN/images/proportn.gif | Bin 0 -> 132 bytes lefdef/doc/defapiWN/images/prsprset.gif | Bin 0 -> 67 bytes lefdef/doc/defapiWN/images/prsubset.gif | Bin 0 -> 117 bytes lefdef/doc/defapiWN/images/psi.gif | Bin 0 -> 146 bytes lefdef/doc/defapiWN/images/radical.gif | Bin 0 -> 78 bytes lefdef/doc/defapiWN/images/refsbset.gif | Bin 0 -> 118 bytes lefdef/doc/defapiWN/images/refspset.gif | Bin 0 -> 124 bytes lefdef/doc/defapiWN/images/rfraktur.gif | Bin 0 -> 153 bytes lefdef/doc/defapiWN/images/rho.gif | Bin 0 -> 134 bytes lefdef/doc/defapiWN/images/second.gif | Bin 0 -> 115 bytes lefdef/doc/defapiWN/images/sigma.gif | Bin 0 -> 132 bytes lefdef/doc/defapiWN/images/sigma1.gif | Bin 0 -> 135 bytes lefdef/doc/defapiWN/images/spade.gif | Bin 0 -> 122 bytes lefdef/doc/defapiWN/images/suchthat.gif | Bin 0 -> 119 bytes lefdef/doc/defapiWN/images/sumation.gif | Bin 0 -> 77 bytes lefdef/doc/defapiWN/images/tau.gif | Bin 0 -> 119 bytes lefdef/doc/defapiWN/images/therefor.gif | Bin 0 -> 111 bytes lefdef/doc/defapiWN/images/theta.gif | Bin 0 -> 144 bytes lefdef/doc/defapiWN/images/theta1.gif | Bin 0 -> 148 bytes lefdef/doc/defapiWN/images/tip.gif | Bin 0 -> 241 bytes lefdef/doc/defapiWN/images/tm.gif | Bin 0 -> 145 bytes lefdef/doc/defapiWN/images/union.gif | Bin 0 -> 129 bytes lefdef/doc/defapiWN/images/univrsal.gif | Bin 0 -> 135 bytes lefdef/doc/defapiWN/images/upsilon.gif | Bin 0 -> 133 bytes lefdef/doc/defapiWN/images/upsilon1.gif | Bin 0 -> 131 bytes lefdef/doc/defapiWN/images/video.gif | Bin 0 -> 906 bytes lefdef/doc/defapiWN/images/weierstr.gif | Bin 0 -> 153 bytes lefdef/doc/defapiWN/images/xi.gif | Bin 0 -> 144 bytes lefdef/doc/defapiWN/images/zeta.gif | Bin 0 -> 142 bytes lefdef/doc/defapiWN/preface.html | 263 + lefdef/doc/defapiWN/titlecopy.html | 220 + lefdef/doc/lefapi/appA_LEFexamples.html | 12546 +++++++++++++ lefdef/doc/lefapi/ch1Intro.html | 404 + lefdef/doc/lefapi/ch2LEFsetup.html | 571 + lefdef/doc/lefapi/ch3LEFcallback.html | 1870 ++ lefdef/doc/lefapi/ch4LEFclasses.html | 1677 ++ lefdef/doc/lefapi/ch5LEFwritercallback.html | 555 + lefdef/doc/lefapi/ch6LEFwriter.html | 4693 +++++ lefdef/doc/lefapi/ch7LEFcompressed.html | 352 + lefdef/doc/lefapi/ch8lefdiff.html | 311 + lefdef/doc/lefapi/images/Diamond.gif | Bin 0 -> 92 bytes lefdef/doc/lefapi/images/Diamond1.gif | Bin 0 -> 178 bytes lefdef/doc/lefapi/images/Diamond12.gif | Bin 0 -> 285 bytes lefdef/doc/lefapi/images/Thumbs.db | Bin 0 -> 161792 bytes lefdef/doc/lefapi/images/aleph.gif | Bin 0 -> 155 bytes lefdef/doc/lefapi/images/alpha.gif | Bin 0 -> 147 bytes lefdef/doc/lefapi/images/ampersnd.gif | Bin 0 -> 209 bytes lefdef/doc/lefapi/images/angle.gif | Bin 0 -> 74 bytes lefdef/doc/lefapi/images/anglleft.gif | Bin 0 -> 118 bytes lefdef/doc/lefapi/images/anglrite.gif | Bin 0 -> 120 bytes lefdef/doc/lefapi/images/approx.gif | Bin 0 -> 125 bytes lefdef/doc/lefapi/images/arrwboth.gif | Bin 0 -> 154 bytes lefdef/doc/lefapi/images/arrwdbbo.gif | Bin 0 -> 145 bytes lefdef/doc/lefapi/images/arrwdbdn.gif | Bin 0 -> 138 bytes lefdef/doc/lefapi/images/arrwdblt.gif | Bin 0 -> 126 bytes lefdef/doc/lefapi/images/arrwdbrt.gif | Bin 0 -> 124 bytes lefdef/doc/lefapi/images/arrwdbup.gif | Bin 0 -> 137 bytes lefdef/doc/lefapi/images/arrwdown.gif | Bin 0 -> 131 bytes lefdef/doc/lefapi/images/arrwleft.gif | Bin 0 -> 131 bytes lefdef/doc/lefapi/images/arrwrite.gif | Bin 0 -> 131 bytes lefdef/doc/lefapi/images/arrwup.gif | Bin 0 -> 135 bytes lefdef/doc/lefapi/images/arrwvert.gif | Bin 0 -> 85 bytes lefdef/doc/lefapi/images/b_bullet.gif | Bin 0 -> 818 bytes lefdef/doc/lefapi/images/beta.gif | Bin 0 -> 151 bytes lefdef/doc/lefapi/images/blank.gif | Bin 0 -> 68 bytes lefdef/doc/lefapi/images/bracltbt.gif | Bin 0 -> 119 bytes lefdef/doc/lefapi/images/bracltmd.gif | Bin 0 -> 122 bytes lefdef/doc/lefapi/images/braclttp.gif | Bin 0 -> 116 bytes lefdef/doc/lefapi/images/bracrtbt.gif | Bin 0 -> 121 bytes lefdef/doc/lefapi/images/bracrtmd.gif | Bin 0 -> 125 bytes lefdef/doc/lefapi/images/bracrttp.gif | Bin 0 -> 122 bytes lefdef/doc/lefapi/images/brakltbt.gif | Bin 0 -> 90 bytes lefdef/doc/lefapi/images/braklttp.gif | Bin 0 -> 88 bytes lefdef/doc/lefapi/images/brakmidl.gif | Bin 0 -> 84 bytes lefdef/doc/lefapi/images/brakrtbt.gif | Bin 0 -> 122 bytes lefdef/doc/lefapi/images/brakrttp.gif | Bin 0 -> 92 bytes lefdef/doc/lefapi/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes .../doc/lefapi/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes lefdef/doc/lefapi/images/bullet.gif | Bin 0 -> 120 bytes lefdef/doc/lefapi/images/capalpha.gif | Bin 0 -> 138 bytes lefdef/doc/lefapi/images/capbeta.gif | Bin 0 -> 141 bytes lefdef/doc/lefapi/images/capchi.gif | Bin 0 -> 144 bytes lefdef/doc/lefapi/images/capdelta.gif | Bin 0 -> 141 bytes lefdef/doc/lefapi/images/capepsil.gif | Bin 0 -> 130 bytes lefdef/doc/lefapi/images/capeta.gif | Bin 0 -> 139 bytes lefdef/doc/lefapi/images/capgamma.gif | Bin 0 -> 118 bytes lefdef/doc/lefapi/images/capiota.gif | Bin 0 -> 111 bytes lefdef/doc/lefapi/images/capkappa.gif | Bin 0 -> 143 bytes lefdef/doc/lefapi/images/caplambd.gif | Bin 0 -> 139 bytes lefdef/doc/lefapi/images/capmu.gif | Bin 0 -> 159 bytes lefdef/doc/lefapi/images/capnu.gif | Bin 0 -> 156 bytes lefdef/doc/lefapi/images/capomega.gif | Bin 0 -> 152 bytes lefdef/doc/lefapi/images/capomicr.gif | Bin 0 -> 145 bytes lefdef/doc/lefapi/images/capphi.gif | Bin 0 -> 161 bytes lefdef/doc/lefapi/images/cappi.gif | Bin 0 -> 132 bytes lefdef/doc/lefapi/images/cappsi.gif | Bin 0 -> 138 bytes lefdef/doc/lefapi/images/caprho.gif | Bin 0 -> 133 bytes lefdef/doc/lefapi/images/capsigma.gif | Bin 0 -> 131 bytes lefdef/doc/lefapi/images/captau.gif | Bin 0 -> 124 bytes lefdef/doc/lefapi/images/captheta.gif | Bin 0 -> 153 bytes lefdef/doc/lefapi/images/capupsil.gif | Bin 0 -> 140 bytes lefdef/doc/lefapi/images/capxi.gif | Bin 0 -> 138 bytes lefdef/doc/lefapi/images/capzeta.gif | Bin 0 -> 138 bytes lefdef/doc/lefapi/images/carretrn.gif | Bin 0 -> 119 bytes lefdef/doc/lefapi/images/caution.gif | Bin 0 -> 286 bytes lefdef/doc/lefapi/images/ch1Intro.04.1.1.png | Bin 0 -> 20516 bytes lefdef/doc/lefapi/images/chi.gif | Bin 0 -> 145 bytes lefdef/doc/lefapi/images/circmult.gif | Bin 0 -> 81 bytes lefdef/doc/lefapi/images/circplus.gif | Bin 0 -> 80 bytes lefdef/doc/lefapi/images/club.gif | Bin 0 -> 134 bytes lefdef/doc/lefapi/images/congrunt.gif | Bin 0 -> 115 bytes lefdef/doc/lefapi/images/delta.gif | Bin 0 -> 141 bytes lefdef/doc/lefapi/images/draft.gif | Bin 0 -> 279 bytes lefdef/doc/lefapi/images/element.gif | Bin 0 -> 121 bytes lefdef/doc/lefapi/images/emptyset.gif | Bin 0 -> 81 bytes lefdef/doc/lefapi/images/epsilon.gif | Bin 0 -> 123 bytes lefdef/doc/lefapi/images/epsilon1.gif | Bin 0 -> 74 bytes lefdef/doc/lefapi/images/equivlnt.gif | Bin 0 -> 115 bytes lefdef/doc/lefapi/images/eta.gif | Bin 0 -> 132 bytes lefdef/doc/lefapi/images/existntl.gif | Bin 0 -> 117 bytes lefdef/doc/lefapi/images/gamma.gif | Bin 0 -> 132 bytes lefdef/doc/lefapi/images/gradient.gif | Bin 0 -> 136 bytes lefdef/doc/lefapi/images/gtequal.gif | Bin 0 -> 126 bytes lefdef/doc/lefapi/images/header_doc.gif | Bin 0 -> 2954 bytes lefdef/doc/lefapi/images/heart.gif | Bin 0 -> 133 bytes lefdef/doc/lefapi/images/ifraktur.gif | Bin 0 -> 146 bytes lefdef/doc/lefapi/images/important.gif | Bin 0 -> 267 bytes lefdef/doc/lefapi/images/infinity.gif | Bin 0 -> 139 bytes lefdef/doc/lefapi/images/integbot.gif | Bin 0 -> 134 bytes lefdef/doc/lefapi/images/integral.gif | Bin 0 -> 123 bytes lefdef/doc/lefapi/images/integtop.gif | Bin 0 -> 131 bytes lefdef/doc/lefapi/images/intrsect.gif | Bin 0 -> 126 bytes lefdef/doc/lefapi/images/iota.gif | Bin 0 -> 112 bytes lefdef/doc/lefapi/images/kappa.gif | Bin 0 -> 124 bytes lefdef/doc/lefapi/images/lambda.gif | Bin 0 -> 137 bytes lefdef/doc/lefapi/images/logic_or.gif | Bin 0 -> 67 bytes lefdef/doc/lefapi/images/logicand.gif | Bin 0 -> 93 bytes lefdef/doc/lefapi/images/lozenge.gif | Bin 0 -> 129 bytes lefdef/doc/lefapi/images/lt_equal.gif | Bin 0 -> 124 bytes lefdef/doc/lefapi/images/nav2_index.gif | Bin 0 -> 1050 bytes lefdef/doc/lefapi/images/nav2_index_b.gif | Bin 0 -> 854 bytes lefdef/doc/lefapi/images/nav2_next_b.gif | Bin 0 -> 861 bytes lefdef/doc/lefapi/images/nav2_previous.gif | Bin 0 -> 1202 bytes lefdef/doc/lefapi/images/nav2_previous_b.gif | Bin 0 -> 871 bytes lefdef/doc/lefapi/images/nav2_print.gif | Bin 0 -> 1341 bytes lefdef/doc/lefapi/images/nav2_toc.gif | Bin 0 -> 1154 bytes lefdef/doc/lefapi/images/nav2_toc_b.gif | Bin 0 -> 866 bytes lefdef/doc/lefapi/images/nav_next.gif | Bin 0 -> 1092 bytes lefdef/doc/lefapi/images/nav_next_b.gif | Bin 0 -> 863 bytes lefdef/doc/lefapi/images/notelemn.gif | Bin 0 -> 141 bytes lefdef/doc/lefapi/images/notequal.gif | Bin 0 -> 121 bytes lefdef/doc/lefapi/images/notsbset.gif | Bin 0 -> 129 bytes lefdef/doc/lefapi/images/nu.gif | Bin 0 -> 124 bytes lefdef/doc/lefapi/images/omega.gif | Bin 0 -> 140 bytes lefdef/doc/lefapi/images/omega1.gif | Bin 0 -> 144 bytes lefdef/doc/lefapi/images/omicron.gif | Bin 0 -> 132 bytes lefdef/doc/lefapi/images/pareltbt.gif | Bin 0 -> 126 bytes lefdef/doc/lefapi/images/parelttp.gif | Bin 0 -> 126 bytes lefdef/doc/lefapi/images/parertbt.gif | Bin 0 -> 127 bytes lefdef/doc/lefapi/images/parerttp.gif | Bin 0 -> 124 bytes lefdef/doc/lefapi/images/partldif.gif | Bin 0 -> 137 bytes lefdef/doc/lefapi/images/perpend.gif | Bin 0 -> 111 bytes lefdef/doc/lefapi/images/phi.gif | Bin 0 -> 142 bytes lefdef/doc/lefapi/images/phi1.gif | Bin 0 -> 143 bytes lefdef/doc/lefapi/images/pi.gif | Bin 0 -> 134 bytes lefdef/doc/lefapi/images/product.gif | Bin 0 -> 80 bytes lefdef/doc/lefapi/images/proportn.gif | Bin 0 -> 132 bytes lefdef/doc/lefapi/images/prsprset.gif | Bin 0 -> 67 bytes lefdef/doc/lefapi/images/prsubset.gif | Bin 0 -> 117 bytes lefdef/doc/lefapi/images/psi.gif | Bin 0 -> 146 bytes lefdef/doc/lefapi/images/radical.gif | Bin 0 -> 78 bytes lefdef/doc/lefapi/images/refsbset.gif | Bin 0 -> 118 bytes lefdef/doc/lefapi/images/refspset.gif | Bin 0 -> 124 bytes lefdef/doc/lefapi/images/rfraktur.gif | Bin 0 -> 153 bytes lefdef/doc/lefapi/images/rho.gif | Bin 0 -> 134 bytes lefdef/doc/lefapi/images/second.gif | Bin 0 -> 115 bytes lefdef/doc/lefapi/images/sigma.gif | Bin 0 -> 132 bytes lefdef/doc/lefapi/images/sigma1.gif | Bin 0 -> 135 bytes lefdef/doc/lefapi/images/spade.gif | Bin 0 -> 122 bytes lefdef/doc/lefapi/images/suchthat.gif | Bin 0 -> 119 bytes lefdef/doc/lefapi/images/sumation.gif | Bin 0 -> 77 bytes lefdef/doc/lefapi/images/tau.gif | Bin 0 -> 119 bytes lefdef/doc/lefapi/images/therefor.gif | Bin 0 -> 111 bytes lefdef/doc/lefapi/images/theta.gif | Bin 0 -> 144 bytes lefdef/doc/lefapi/images/theta1.gif | Bin 0 -> 148 bytes lefdef/doc/lefapi/images/tip.gif | Bin 0 -> 241 bytes lefdef/doc/lefapi/images/tm.gif | Bin 0 -> 145 bytes lefdef/doc/lefapi/images/union.gif | Bin 0 -> 129 bytes lefdef/doc/lefapi/images/univrsal.gif | Bin 0 -> 135 bytes lefdef/doc/lefapi/images/upsilon.gif | Bin 0 -> 133 bytes lefdef/doc/lefapi/images/upsilon1.gif | Bin 0 -> 131 bytes lefdef/doc/lefapi/images/video.gif | Bin 0 -> 906 bytes lefdef/doc/lefapi/images/weierstr.gif | Bin 0 -> 153 bytes lefdef/doc/lefapi/images/xi.gif | Bin 0 -> 144 bytes lefdef/doc/lefapi/images/zeta.gif | Bin 0 -> 142 bytes lefdef/doc/lefapi/lefapi.pdf | 8657 +++++++++ lefdef/doc/lefapi/lefapiTOC.html | 609 + lefdef/doc/lefapi/preface.html | 202 + lefdef/doc/lefapi/titlecopy.html | 220 + lefdef/doc/lefapiWN/ChangedFeatures.html | 488 + lefdef/doc/lefapiWN/NewFeatures.html | 481 + lefdef/doc/lefapiWN/images/Diamond.gif | Bin 0 -> 92 bytes lefdef/doc/lefapiWN/images/Diamond1.gif | Bin 0 -> 178 bytes lefdef/doc/lefapiWN/images/Diamond12.gif | Bin 0 -> 285 bytes lefdef/doc/lefapiWN/images/Thumbs.db | Bin 0 -> 161792 bytes lefdef/doc/lefapiWN/images/aleph.gif | Bin 0 -> 155 bytes lefdef/doc/lefapiWN/images/alpha.gif | Bin 0 -> 147 bytes lefdef/doc/lefapiWN/images/ampersnd.gif | Bin 0 -> 209 bytes lefdef/doc/lefapiWN/images/angle.gif | Bin 0 -> 74 bytes lefdef/doc/lefapiWN/images/anglleft.gif | Bin 0 -> 118 bytes lefdef/doc/lefapiWN/images/anglrite.gif | Bin 0 -> 120 bytes lefdef/doc/lefapiWN/images/approx.gif | Bin 0 -> 125 bytes lefdef/doc/lefapiWN/images/arrwboth.gif | Bin 0 -> 154 bytes lefdef/doc/lefapiWN/images/arrwdbbo.gif | Bin 0 -> 145 bytes lefdef/doc/lefapiWN/images/arrwdbdn.gif | Bin 0 -> 138 bytes lefdef/doc/lefapiWN/images/arrwdblt.gif | Bin 0 -> 126 bytes lefdef/doc/lefapiWN/images/arrwdbrt.gif | Bin 0 -> 124 bytes lefdef/doc/lefapiWN/images/arrwdbup.gif | Bin 0 -> 137 bytes lefdef/doc/lefapiWN/images/arrwdown.gif | Bin 0 -> 131 bytes lefdef/doc/lefapiWN/images/arrwleft.gif | Bin 0 -> 131 bytes lefdef/doc/lefapiWN/images/arrwrite.gif | Bin 0 -> 131 bytes lefdef/doc/lefapiWN/images/arrwup.gif | Bin 0 -> 135 bytes lefdef/doc/lefapiWN/images/arrwvert.gif | Bin 0 -> 85 bytes lefdef/doc/lefapiWN/images/b_bullet.gif | Bin 0 -> 818 bytes lefdef/doc/lefapiWN/images/beta.gif | Bin 0 -> 151 bytes lefdef/doc/lefapiWN/images/blank.gif | Bin 0 -> 68 bytes lefdef/doc/lefapiWN/images/bracltbt.gif | Bin 0 -> 119 bytes lefdef/doc/lefapiWN/images/bracltmd.gif | Bin 0 -> 122 bytes lefdef/doc/lefapiWN/images/braclttp.gif | Bin 0 -> 116 bytes lefdef/doc/lefapiWN/images/bracrtbt.gif | Bin 0 -> 121 bytes lefdef/doc/lefapiWN/images/bracrtmd.gif | Bin 0 -> 125 bytes lefdef/doc/lefapiWN/images/bracrttp.gif | Bin 0 -> 122 bytes lefdef/doc/lefapiWN/images/brakltbt.gif | Bin 0 -> 90 bytes lefdef/doc/lefapiWN/images/braklttp.gif | Bin 0 -> 88 bytes lefdef/doc/lefapiWN/images/brakmidl.gif | Bin 0 -> 84 bytes lefdef/doc/lefapiWN/images/brakrtbt.gif | Bin 0 -> 122 bytes lefdef/doc/lefapiWN/images/brakrttp.gif | Bin 0 -> 92 bytes lefdef/doc/lefapiWN/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes .../lefapiWN/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes lefdef/doc/lefapiWN/images/bullet.gif | Bin 0 -> 120 bytes lefdef/doc/lefapiWN/images/capalpha.gif | Bin 0 -> 138 bytes lefdef/doc/lefapiWN/images/capbeta.gif | Bin 0 -> 141 bytes lefdef/doc/lefapiWN/images/capchi.gif | Bin 0 -> 144 bytes lefdef/doc/lefapiWN/images/capdelta.gif | Bin 0 -> 141 bytes lefdef/doc/lefapiWN/images/capepsil.gif | Bin 0 -> 130 bytes lefdef/doc/lefapiWN/images/capeta.gif | Bin 0 -> 139 bytes lefdef/doc/lefapiWN/images/capgamma.gif | Bin 0 -> 118 bytes lefdef/doc/lefapiWN/images/capiota.gif | Bin 0 -> 111 bytes lefdef/doc/lefapiWN/images/capkappa.gif | Bin 0 -> 143 bytes lefdef/doc/lefapiWN/images/caplambd.gif | Bin 0 -> 139 bytes lefdef/doc/lefapiWN/images/capmu.gif | Bin 0 -> 159 bytes lefdef/doc/lefapiWN/images/capnu.gif | Bin 0 -> 156 bytes lefdef/doc/lefapiWN/images/capomega.gif | Bin 0 -> 152 bytes lefdef/doc/lefapiWN/images/capomicr.gif | Bin 0 -> 145 bytes lefdef/doc/lefapiWN/images/capphi.gif | Bin 0 -> 161 bytes lefdef/doc/lefapiWN/images/cappi.gif | Bin 0 -> 132 bytes lefdef/doc/lefapiWN/images/cappsi.gif | Bin 0 -> 138 bytes lefdef/doc/lefapiWN/images/caprho.gif | Bin 0 -> 133 bytes lefdef/doc/lefapiWN/images/capsigma.gif | Bin 0 -> 131 bytes lefdef/doc/lefapiWN/images/captau.gif | Bin 0 -> 124 bytes lefdef/doc/lefapiWN/images/captheta.gif | Bin 0 -> 153 bytes lefdef/doc/lefapiWN/images/capupsil.gif | Bin 0 -> 140 bytes lefdef/doc/lefapiWN/images/capxi.gif | Bin 0 -> 138 bytes lefdef/doc/lefapiWN/images/capzeta.gif | Bin 0 -> 138 bytes lefdef/doc/lefapiWN/images/carretrn.gif | Bin 0 -> 119 bytes lefdef/doc/lefapiWN/images/caution.gif | Bin 0 -> 286 bytes lefdef/doc/lefapiWN/images/chi.gif | Bin 0 -> 145 bytes lefdef/doc/lefapiWN/images/circmult.gif | Bin 0 -> 81 bytes lefdef/doc/lefapiWN/images/circplus.gif | Bin 0 -> 80 bytes lefdef/doc/lefapiWN/images/club.gif | Bin 0 -> 134 bytes lefdef/doc/lefapiWN/images/congrunt.gif | Bin 0 -> 115 bytes lefdef/doc/lefapiWN/images/delta.gif | Bin 0 -> 141 bytes lefdef/doc/lefapiWN/images/draft.gif | Bin 0 -> 279 bytes lefdef/doc/lefapiWN/images/element.gif | Bin 0 -> 121 bytes lefdef/doc/lefapiWN/images/emptyset.gif | Bin 0 -> 81 bytes lefdef/doc/lefapiWN/images/epsilon.gif | Bin 0 -> 123 bytes lefdef/doc/lefapiWN/images/epsilon1.gif | Bin 0 -> 74 bytes lefdef/doc/lefapiWN/images/equivlnt.gif | Bin 0 -> 115 bytes lefdef/doc/lefapiWN/images/eta.gif | Bin 0 -> 132 bytes lefdef/doc/lefapiWN/images/existntl.gif | Bin 0 -> 117 bytes lefdef/doc/lefapiWN/images/gamma.gif | Bin 0 -> 132 bytes lefdef/doc/lefapiWN/images/gradient.gif | Bin 0 -> 136 bytes lefdef/doc/lefapiWN/images/gtequal.gif | Bin 0 -> 126 bytes lefdef/doc/lefapiWN/images/header_doc.gif | Bin 0 -> 2954 bytes lefdef/doc/lefapiWN/images/heart.gif | Bin 0 -> 133 bytes lefdef/doc/lefapiWN/images/ifraktur.gif | Bin 0 -> 146 bytes lefdef/doc/lefapiWN/images/important.gif | Bin 0 -> 267 bytes lefdef/doc/lefapiWN/images/infinity.gif | Bin 0 -> 139 bytes lefdef/doc/lefapiWN/images/integbot.gif | Bin 0 -> 134 bytes lefdef/doc/lefapiWN/images/integral.gif | Bin 0 -> 123 bytes lefdef/doc/lefapiWN/images/integtop.gif | Bin 0 -> 131 bytes lefdef/doc/lefapiWN/images/intrsect.gif | Bin 0 -> 126 bytes lefdef/doc/lefapiWN/images/iota.gif | Bin 0 -> 112 bytes lefdef/doc/lefapiWN/images/kappa.gif | Bin 0 -> 124 bytes lefdef/doc/lefapiWN/images/lambda.gif | Bin 0 -> 137 bytes lefdef/doc/lefapiWN/images/logic_or.gif | Bin 0 -> 67 bytes lefdef/doc/lefapiWN/images/logicand.gif | Bin 0 -> 93 bytes lefdef/doc/lefapiWN/images/lozenge.gif | Bin 0 -> 129 bytes lefdef/doc/lefapiWN/images/lt_equal.gif | Bin 0 -> 124 bytes lefdef/doc/lefapiWN/images/nav2_index.gif | Bin 0 -> 1050 bytes lefdef/doc/lefapiWN/images/nav2_index_b.gif | Bin 0 -> 854 bytes lefdef/doc/lefapiWN/images/nav2_next_b.gif | Bin 0 -> 861 bytes lefdef/doc/lefapiWN/images/nav2_previous.gif | Bin 0 -> 1202 bytes .../doc/lefapiWN/images/nav2_previous_b.gif | Bin 0 -> 871 bytes lefdef/doc/lefapiWN/images/nav2_print.gif | Bin 0 -> 1341 bytes lefdef/doc/lefapiWN/images/nav2_toc.gif | Bin 0 -> 1154 bytes lefdef/doc/lefapiWN/images/nav2_toc_b.gif | Bin 0 -> 866 bytes lefdef/doc/lefapiWN/images/nav_next.gif | Bin 0 -> 1092 bytes lefdef/doc/lefapiWN/images/nav_next_b.gif | Bin 0 -> 863 bytes lefdef/doc/lefapiWN/images/notelemn.gif | Bin 0 -> 141 bytes lefdef/doc/lefapiWN/images/notequal.gif | Bin 0 -> 121 bytes lefdef/doc/lefapiWN/images/notsbset.gif | Bin 0 -> 129 bytes lefdef/doc/lefapiWN/images/nu.gif | Bin 0 -> 124 bytes lefdef/doc/lefapiWN/images/omega.gif | Bin 0 -> 140 bytes lefdef/doc/lefapiWN/images/omega1.gif | Bin 0 -> 144 bytes lefdef/doc/lefapiWN/images/omicron.gif | Bin 0 -> 132 bytes lefdef/doc/lefapiWN/images/pareltbt.gif | Bin 0 -> 126 bytes lefdef/doc/lefapiWN/images/parelttp.gif | Bin 0 -> 126 bytes lefdef/doc/lefapiWN/images/parertbt.gif | Bin 0 -> 127 bytes lefdef/doc/lefapiWN/images/parerttp.gif | Bin 0 -> 124 bytes lefdef/doc/lefapiWN/images/partldif.gif | Bin 0 -> 137 bytes lefdef/doc/lefapiWN/images/perpend.gif | Bin 0 -> 111 bytes lefdef/doc/lefapiWN/images/phi.gif | Bin 0 -> 142 bytes lefdef/doc/lefapiWN/images/phi1.gif | Bin 0 -> 143 bytes lefdef/doc/lefapiWN/images/pi.gif | Bin 0 -> 134 bytes lefdef/doc/lefapiWN/images/product.gif | Bin 0 -> 80 bytes lefdef/doc/lefapiWN/images/proportn.gif | Bin 0 -> 132 bytes lefdef/doc/lefapiWN/images/prsprset.gif | Bin 0 -> 67 bytes lefdef/doc/lefapiWN/images/prsubset.gif | Bin 0 -> 117 bytes lefdef/doc/lefapiWN/images/psi.gif | Bin 0 -> 146 bytes lefdef/doc/lefapiWN/images/radical.gif | Bin 0 -> 78 bytes lefdef/doc/lefapiWN/images/refsbset.gif | Bin 0 -> 118 bytes lefdef/doc/lefapiWN/images/refspset.gif | Bin 0 -> 124 bytes lefdef/doc/lefapiWN/images/rfraktur.gif | Bin 0 -> 153 bytes lefdef/doc/lefapiWN/images/rho.gif | Bin 0 -> 134 bytes lefdef/doc/lefapiWN/images/second.gif | Bin 0 -> 115 bytes lefdef/doc/lefapiWN/images/sigma.gif | Bin 0 -> 132 bytes lefdef/doc/lefapiWN/images/sigma1.gif | Bin 0 -> 135 bytes lefdef/doc/lefapiWN/images/spade.gif | Bin 0 -> 122 bytes lefdef/doc/lefapiWN/images/suchthat.gif | Bin 0 -> 119 bytes lefdef/doc/lefapiWN/images/sumation.gif | Bin 0 -> 77 bytes lefdef/doc/lefapiWN/images/tau.gif | Bin 0 -> 119 bytes lefdef/doc/lefapiWN/images/therefor.gif | Bin 0 -> 111 bytes lefdef/doc/lefapiWN/images/theta.gif | Bin 0 -> 144 bytes lefdef/doc/lefapiWN/images/theta1.gif | Bin 0 -> 148 bytes lefdef/doc/lefapiWN/images/tip.gif | Bin 0 -> 241 bytes lefdef/doc/lefapiWN/images/tm.gif | Bin 0 -> 145 bytes lefdef/doc/lefapiWN/images/union.gif | Bin 0 -> 129 bytes lefdef/doc/lefapiWN/images/univrsal.gif | Bin 0 -> 135 bytes lefdef/doc/lefapiWN/images/upsilon.gif | Bin 0 -> 133 bytes lefdef/doc/lefapiWN/images/upsilon1.gif | Bin 0 -> 131 bytes lefdef/doc/lefapiWN/images/video.gif | Bin 0 -> 906 bytes lefdef/doc/lefapiWN/images/weierstr.gif | Bin 0 -> 153 bytes lefdef/doc/lefapiWN/images/xi.gif | Bin 0 -> 144 bytes lefdef/doc/lefapiWN/images/zeta.gif | Bin 0 -> 142 bytes lefdef/doc/lefapiWN/lefapiWN.pdf | Bin 0 -> 98432 bytes lefdef/doc/lefapiWN/lefapiWNTOC.html | 182 + lefdef/doc/lefapiWN/preface.html | 263 + lefdef/doc/lefapiWN/titlecopy.html | 220 + lefdef/doc/lefdefWN/NewFeatures.html | 1062 ++ lefdef/doc/lefdefWN/Preface.html | 249 + lefdef/doc/lefdefWN/images/Diamond.gif | Bin 0 -> 92 bytes lefdef/doc/lefdefWN/images/Diamond1.gif | Bin 0 -> 178 bytes lefdef/doc/lefdefWN/images/Diamond12.gif | Bin 0 -> 285 bytes lefdef/doc/lefdefWN/images/Thumbs.db | Bin 0 -> 161792 bytes lefdef/doc/lefdefWN/images/aleph.gif | Bin 0 -> 155 bytes lefdef/doc/lefdefWN/images/alpha.gif | Bin 0 -> 147 bytes lefdef/doc/lefdefWN/images/ampersnd.gif | Bin 0 -> 209 bytes lefdef/doc/lefdefWN/images/angle.gif | Bin 0 -> 74 bytes lefdef/doc/lefdefWN/images/anglleft.gif | Bin 0 -> 118 bytes lefdef/doc/lefdefWN/images/anglrite.gif | Bin 0 -> 120 bytes lefdef/doc/lefdefWN/images/approx.gif | Bin 0 -> 125 bytes lefdef/doc/lefdefWN/images/arrwboth.gif | Bin 0 -> 154 bytes lefdef/doc/lefdefWN/images/arrwdbbo.gif | Bin 0 -> 145 bytes lefdef/doc/lefdefWN/images/arrwdbdn.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefWN/images/arrwdblt.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefWN/images/arrwdbrt.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefWN/images/arrwdbup.gif | Bin 0 -> 137 bytes lefdef/doc/lefdefWN/images/arrwdown.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefWN/images/arrwleft.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefWN/images/arrwrite.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefWN/images/arrwup.gif | Bin 0 -> 135 bytes lefdef/doc/lefdefWN/images/arrwvert.gif | Bin 0 -> 85 bytes lefdef/doc/lefdefWN/images/b_bullet.gif | Bin 0 -> 818 bytes lefdef/doc/lefdefWN/images/beta.gif | Bin 0 -> 151 bytes lefdef/doc/lefdefWN/images/blank.gif | Bin 0 -> 68 bytes lefdef/doc/lefdefWN/images/bracltbt.gif | Bin 0 -> 119 bytes lefdef/doc/lefdefWN/images/bracltmd.gif | Bin 0 -> 122 bytes lefdef/doc/lefdefWN/images/braclttp.gif | Bin 0 -> 116 bytes lefdef/doc/lefdefWN/images/bracrtbt.gif | Bin 0 -> 121 bytes lefdef/doc/lefdefWN/images/bracrtmd.gif | Bin 0 -> 125 bytes lefdef/doc/lefdefWN/images/bracrttp.gif | Bin 0 -> 122 bytes lefdef/doc/lefdefWN/images/brakltbt.gif | Bin 0 -> 90 bytes lefdef/doc/lefdefWN/images/braklttp.gif | Bin 0 -> 88 bytes lefdef/doc/lefdefWN/images/brakmidl.gif | Bin 0 -> 84 bytes lefdef/doc/lefdefWN/images/brakrtbt.gif | Bin 0 -> 122 bytes lefdef/doc/lefdefWN/images/brakrttp.gif | Bin 0 -> 92 bytes lefdef/doc/lefdefWN/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes .../lefdefWN/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes lefdef/doc/lefdefWN/images/bullet.gif | Bin 0 -> 120 bytes lefdef/doc/lefdefWN/images/capalpha.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefWN/images/capbeta.gif | Bin 0 -> 141 bytes lefdef/doc/lefdefWN/images/capchi.gif | Bin 0 -> 144 bytes lefdef/doc/lefdefWN/images/capdelta.gif | Bin 0 -> 141 bytes lefdef/doc/lefdefWN/images/capepsil.gif | Bin 0 -> 130 bytes lefdef/doc/lefdefWN/images/capeta.gif | Bin 0 -> 139 bytes lefdef/doc/lefdefWN/images/capgamma.gif | Bin 0 -> 118 bytes lefdef/doc/lefdefWN/images/capiota.gif | Bin 0 -> 111 bytes lefdef/doc/lefdefWN/images/capkappa.gif | Bin 0 -> 143 bytes lefdef/doc/lefdefWN/images/caplambd.gif | Bin 0 -> 139 bytes lefdef/doc/lefdefWN/images/capmu.gif | Bin 0 -> 159 bytes lefdef/doc/lefdefWN/images/capnu.gif | Bin 0 -> 156 bytes lefdef/doc/lefdefWN/images/capomega.gif | Bin 0 -> 152 bytes lefdef/doc/lefdefWN/images/capomicr.gif | Bin 0 -> 145 bytes lefdef/doc/lefdefWN/images/capphi.gif | Bin 0 -> 161 bytes lefdef/doc/lefdefWN/images/cappi.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefWN/images/cappsi.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefWN/images/caprho.gif | Bin 0 -> 133 bytes lefdef/doc/lefdefWN/images/capsigma.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefWN/images/captau.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefWN/images/captheta.gif | Bin 0 -> 153 bytes lefdef/doc/lefdefWN/images/capupsil.gif | Bin 0 -> 140 bytes lefdef/doc/lefdefWN/images/capxi.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefWN/images/capzeta.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefWN/images/carretrn.gif | Bin 0 -> 119 bytes lefdef/doc/lefdefWN/images/caution.gif | Bin 0 -> 286 bytes lefdef/doc/lefdefWN/images/chi.gif | Bin 0 -> 145 bytes lefdef/doc/lefdefWN/images/circmult.gif | Bin 0 -> 81 bytes lefdef/doc/lefdefWN/images/circplus.gif | Bin 0 -> 80 bytes lefdef/doc/lefdefWN/images/club.gif | Bin 0 -> 134 bytes lefdef/doc/lefdefWN/images/congrunt.gif | Bin 0 -> 115 bytes lefdef/doc/lefdefWN/images/delta.gif | Bin 0 -> 141 bytes lefdef/doc/lefdefWN/images/draft.gif | Bin 0 -> 279 bytes lefdef/doc/lefdefWN/images/element.gif | Bin 0 -> 121 bytes lefdef/doc/lefdefWN/images/emptyset.gif | Bin 0 -> 81 bytes lefdef/doc/lefdefWN/images/epsilon.gif | Bin 0 -> 123 bytes lefdef/doc/lefdefWN/images/epsilon1.gif | Bin 0 -> 74 bytes lefdef/doc/lefdefWN/images/equivlnt.gif | Bin 0 -> 115 bytes lefdef/doc/lefdefWN/images/eta.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefWN/images/existntl.gif | Bin 0 -> 117 bytes lefdef/doc/lefdefWN/images/gamma.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefWN/images/gradient.gif | Bin 0 -> 136 bytes lefdef/doc/lefdefWN/images/gtequal.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefWN/images/header_doc.gif | Bin 0 -> 2954 bytes lefdef/doc/lefdefWN/images/heart.gif | Bin 0 -> 133 bytes lefdef/doc/lefdefWN/images/ifraktur.gif | Bin 0 -> 146 bytes lefdef/doc/lefdefWN/images/important.gif | Bin 0 -> 267 bytes lefdef/doc/lefdefWN/images/infinity.gif | Bin 0 -> 139 bytes lefdef/doc/lefdefWN/images/integbot.gif | Bin 0 -> 134 bytes lefdef/doc/lefdefWN/images/integral.gif | Bin 0 -> 123 bytes lefdef/doc/lefdefWN/images/integtop.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefWN/images/intrsect.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefWN/images/iota.gif | Bin 0 -> 112 bytes lefdef/doc/lefdefWN/images/kappa.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefWN/images/lambda.gif | Bin 0 -> 137 bytes lefdef/doc/lefdefWN/images/logic_or.gif | Bin 0 -> 67 bytes lefdef/doc/lefdefWN/images/logicand.gif | Bin 0 -> 93 bytes lefdef/doc/lefdefWN/images/lozenge.gif | Bin 0 -> 129 bytes lefdef/doc/lefdefWN/images/lt_equal.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefWN/images/nav2_index.gif | Bin 0 -> 1050 bytes lefdef/doc/lefdefWN/images/nav2_index_b.gif | Bin 0 -> 854 bytes lefdef/doc/lefdefWN/images/nav2_next_b.gif | Bin 0 -> 861 bytes lefdef/doc/lefdefWN/images/nav2_previous.gif | Bin 0 -> 1202 bytes .../doc/lefdefWN/images/nav2_previous_b.gif | Bin 0 -> 871 bytes lefdef/doc/lefdefWN/images/nav2_print.gif | Bin 0 -> 1341 bytes lefdef/doc/lefdefWN/images/nav2_toc.gif | Bin 0 -> 1154 bytes lefdef/doc/lefdefWN/images/nav2_toc_b.gif | Bin 0 -> 866 bytes lefdef/doc/lefdefWN/images/nav_next.gif | Bin 0 -> 1092 bytes lefdef/doc/lefdefWN/images/nav_next_b.gif | Bin 0 -> 863 bytes lefdef/doc/lefdefWN/images/notelemn.gif | Bin 0 -> 141 bytes lefdef/doc/lefdefWN/images/notequal.gif | Bin 0 -> 121 bytes lefdef/doc/lefdefWN/images/notsbset.gif | Bin 0 -> 129 bytes lefdef/doc/lefdefWN/images/nu.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefWN/images/omega.gif | Bin 0 -> 140 bytes lefdef/doc/lefdefWN/images/omega1.gif | Bin 0 -> 144 bytes lefdef/doc/lefdefWN/images/omicron.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefWN/images/pareltbt.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefWN/images/parelttp.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefWN/images/parertbt.gif | Bin 0 -> 127 bytes lefdef/doc/lefdefWN/images/parerttp.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefWN/images/partldif.gif | Bin 0 -> 137 bytes lefdef/doc/lefdefWN/images/perpend.gif | Bin 0 -> 111 bytes lefdef/doc/lefdefWN/images/phi.gif | Bin 0 -> 142 bytes lefdef/doc/lefdefWN/images/phi1.gif | Bin 0 -> 143 bytes lefdef/doc/lefdefWN/images/pi.gif | Bin 0 -> 134 bytes lefdef/doc/lefdefWN/images/product.gif | Bin 0 -> 80 bytes lefdef/doc/lefdefWN/images/proportn.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefWN/images/prsprset.gif | Bin 0 -> 67 bytes lefdef/doc/lefdefWN/images/prsubset.gif | Bin 0 -> 117 bytes lefdef/doc/lefdefWN/images/psi.gif | Bin 0 -> 146 bytes lefdef/doc/lefdefWN/images/radical.gif | Bin 0 -> 78 bytes lefdef/doc/lefdefWN/images/refsbset.gif | Bin 0 -> 118 bytes lefdef/doc/lefdefWN/images/refspset.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefWN/images/rfraktur.gif | Bin 0 -> 153 bytes lefdef/doc/lefdefWN/images/rho.gif | Bin 0 -> 134 bytes lefdef/doc/lefdefWN/images/second.gif | Bin 0 -> 115 bytes lefdef/doc/lefdefWN/images/sigma.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefWN/images/sigma1.gif | Bin 0 -> 135 bytes lefdef/doc/lefdefWN/images/spade.gif | Bin 0 -> 122 bytes lefdef/doc/lefdefWN/images/suchthat.gif | Bin 0 -> 119 bytes lefdef/doc/lefdefWN/images/sumation.gif | Bin 0 -> 77 bytes lefdef/doc/lefdefWN/images/tau.gif | Bin 0 -> 119 bytes lefdef/doc/lefdefWN/images/therefor.gif | Bin 0 -> 111 bytes lefdef/doc/lefdefWN/images/theta.gif | Bin 0 -> 144 bytes lefdef/doc/lefdefWN/images/theta1.gif | Bin 0 -> 148 bytes lefdef/doc/lefdefWN/images/tip.gif | Bin 0 -> 241 bytes lefdef/doc/lefdefWN/images/tm.gif | Bin 0 -> 145 bytes lefdef/doc/lefdefWN/images/union.gif | Bin 0 -> 129 bytes lefdef/doc/lefdefWN/images/univrsal.gif | Bin 0 -> 135 bytes lefdef/doc/lefdefWN/images/upsilon.gif | Bin 0 -> 133 bytes lefdef/doc/lefdefWN/images/upsilon1.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefWN/images/video.gif | Bin 0 -> 906 bytes lefdef/doc/lefdefWN/images/weierstr.gif | Bin 0 -> 153 bytes lefdef/doc/lefdefWN/images/xi.gif | Bin 0 -> 144 bytes lefdef/doc/lefdefWN/images/zeta.gif | Bin 0 -> 142 bytes lefdef/doc/lefdefWN/lefdefWN.pdf | Bin 0 -> 112727 bytes lefdef/doc/lefdefWN/lefdefWNTOC.html | 180 + lefdef/doc/lefdefWN/titlecopy.html | 220 + lefdef/doc/lefdefref/DEFINEandALIAS.html | 501 + lefdef/doc/lefdefref/DEFSyntax.html | 8576 +++++++++ lefdef/doc/lefdefref/Examples.html | 288 + lefdef/doc/lefdefref/LEFSyntax.html | 9441 ++++++++++ .../lefdefref/OptimizingLEFTechnology.html | 1140 ++ lefdef/doc/lefdefref/PAE.html | 3002 ++++ lefdef/doc/lefdefref/WorkingwithLEF.html | 570 + .../lefdefref/images/DEFSyntax.07.1.01.png | Bin 0 -> 14996 bytes .../lefdefref/images/DEFSyntax.07.1.02.png | Bin 0 -> 19807 bytes .../lefdefref/images/DEFSyntax.07.1.03.png | Bin 0 -> 301 bytes .../lefdefref/images/DEFSyntax.07.1.04.png | Bin 0 -> 234 bytes .../lefdefref/images/DEFSyntax.07.1.05.png | Bin 0 -> 325 bytes .../lefdefref/images/DEFSyntax.07.1.06.png | Bin 0 -> 336 bytes .../lefdefref/images/DEFSyntax.07.1.07.png | Bin 0 -> 303 bytes .../lefdefref/images/DEFSyntax.07.1.08.png | Bin 0 -> 278 bytes .../lefdefref/images/DEFSyntax.07.1.09.png | Bin 0 -> 320 bytes .../lefdefref/images/DEFSyntax.07.1.10.png | Bin 0 -> 339 bytes .../lefdefref/images/DEFSyntax.07.1.11.png | Bin 0 -> 8110 bytes .../lefdefref/images/DEFSyntax.07.1.12.png | Bin 0 -> 7704 bytes .../lefdefref/images/DEFSyntax.07.1.13.png | Bin 0 -> 19536 bytes .../lefdefref/images/DEFSyntax.07.1.14.png | Bin 0 -> 18947 bytes .../lefdefref/images/DEFSyntax.07.1.15.png | Bin 0 -> 8106 bytes .../lefdefref/images/DEFSyntax.07.1.16.png | Bin 0 -> 9246 bytes .../lefdefref/images/DEFSyntax.07.1.17.png | Bin 0 -> 9716 bytes .../lefdefref/images/DEFSyntax.07.1.18.png | Bin 0 -> 8812 bytes .../lefdefref/images/DEFSyntax.07.1.19.png | Bin 0 -> 301 bytes .../lefdefref/images/DEFSyntax.07.1.20.png | Bin 0 -> 234 bytes .../lefdefref/images/DEFSyntax.07.1.21.png | Bin 0 -> 325 bytes .../lefdefref/images/DEFSyntax.07.1.22.png | Bin 0 -> 336 bytes .../lefdefref/images/DEFSyntax.07.1.23.png | Bin 0 -> 303 bytes .../lefdefref/images/DEFSyntax.07.1.24.png | Bin 0 -> 278 bytes .../lefdefref/images/DEFSyntax.07.1.25.png | Bin 0 -> 320 bytes .../lefdefref/images/DEFSyntax.07.1.26.png | Bin 0 -> 339 bytes .../lefdefref/images/DEFSyntax.07.1.27.png | Bin 0 -> 19528 bytes .../lefdefref/images/DEFSyntax.07.1.28.png | Bin 0 -> 23209 bytes .../lefdefref/images/DEFSyntax.07.1.29.png | Bin 0 -> 301 bytes .../lefdefref/images/DEFSyntax.07.1.30.png | Bin 0 -> 234 bytes .../lefdefref/images/DEFSyntax.07.1.31.png | Bin 0 -> 325 bytes .../lefdefref/images/DEFSyntax.07.1.32.png | Bin 0 -> 336 bytes .../lefdefref/images/DEFSyntax.07.1.33.png | Bin 0 -> 303 bytes .../lefdefref/images/DEFSyntax.07.1.34.png | Bin 0 -> 278 bytes .../lefdefref/images/DEFSyntax.07.1.35.png | Bin 0 -> 320 bytes .../lefdefref/images/DEFSyntax.07.1.36.png | Bin 0 -> 339 bytes .../lefdefref/images/DEFSyntax.07.1.37.png | Bin 0 -> 9943 bytes .../lefdefref/images/DEFSyntax.07.1.38.png | Bin 0 -> 19762 bytes .../lefdefref/images/DEFSyntax.07.1.39.png | Bin 0 -> 6269 bytes .../lefdefref/images/DEFSyntax.07.1.40.png | Bin 0 -> 14064 bytes .../lefdefref/images/DEFSyntax.07.1.41.png | Bin 0 -> 8626 bytes .../lefdefref/images/DEFSyntax.07.1.42.png | Bin 0 -> 62470 bytes .../lefdefref/images/DEFSyntax.07.1.43.png | Bin 0 -> 18808 bytes .../lefdefref/images/DEFSyntax.07.1.44.png | Bin 0 -> 18533 bytes .../lefdefref/images/DEFSyntax.07.1.45.png | Bin 0 -> 1637 bytes .../lefdefref/images/DEFSyntax.07.1.46.png | Bin 0 -> 1501 bytes .../lefdefref/images/DEFSyntax.07.1.47.png | Bin 0 -> 2017 bytes .../lefdefref/images/DEFSyntax.07.1.48.png | Bin 0 -> 15196 bytes .../lefdefref/images/DEFSyntax.07.1.49.png | Bin 0 -> 16133 bytes .../lefdefref/images/DEFSyntax.07.1.50.png | Bin 0 -> 17057 bytes .../lefdefref/images/DEFSyntax.07.1.51.png | Bin 0 -> 17350 bytes .../lefdefref/images/DEFSyntax.07.1.52.png | Bin 0 -> 22182 bytes .../lefdefref/images/DEFSyntax.07.1.53.png | Bin 0 -> 6047 bytes .../lefdefref/images/DEFSyntax.07.1.54.png | Bin 0 -> 9247 bytes .../lefdefref/images/DEFSyntax.07.1.55.png | Bin 0 -> 30319 bytes .../lefdefref/images/DEFSyntax.07.1.56.png | Bin 0 -> 29108 bytes .../lefdefref/images/DEFSyntax.07.1.57.png | Bin 0 -> 34255 bytes .../lefdefref/images/DEFSyntax.07.1.58.png | Bin 0 -> 5597 bytes .../lefdefref/images/DEFSyntax.07.1.59.png | Bin 0 -> 6816 bytes lefdef/doc/lefdefref/images/Diamond.gif | Bin 0 -> 92 bytes lefdef/doc/lefdefref/images/Diamond1.gif | Bin 0 -> 178 bytes lefdef/doc/lefdefref/images/Diamond12.gif | Bin 0 -> 285 bytes .../lefdefref/images/LEFSyntax.04.1.01.png | Bin 0 -> 22038 bytes .../lefdefref/images/LEFSyntax.04.1.02.png | Bin 0 -> 17814 bytes .../lefdefref/images/LEFSyntax.04.1.03.png | Bin 0 -> 8250 bytes .../lefdefref/images/LEFSyntax.04.1.04.png | Bin 0 -> 32588 bytes .../lefdefref/images/LEFSyntax.04.1.05.png | Bin 0 -> 48535 bytes .../lefdefref/images/LEFSyntax.04.1.06.png | Bin 0 -> 7442 bytes .../lefdefref/images/LEFSyntax.04.1.07.png | Bin 0 -> 13083 bytes .../lefdefref/images/LEFSyntax.04.1.08.png | Bin 0 -> 16830 bytes .../lefdefref/images/LEFSyntax.04.1.09.png | Bin 0 -> 23185 bytes .../lefdefref/images/LEFSyntax.04.1.10.png | Bin 0 -> 31401 bytes .../lefdefref/images/LEFSyntax.04.1.11.png | Bin 0 -> 45704 bytes .../lefdefref/images/LEFSyntax.04.1.12.png | Bin 0 -> 19788 bytes .../lefdefref/images/LEFSyntax.04.1.13.png | Bin 0 -> 5944 bytes .../lefdefref/images/LEFSyntax.04.1.14.png | Bin 0 -> 13244 bytes .../lefdefref/images/LEFSyntax.04.1.15.png | Bin 0 -> 35391 bytes .../lefdefref/images/LEFSyntax.04.1.16.png | Bin 0 -> 14207 bytes .../lefdefref/images/LEFSyntax.04.1.17.png | Bin 0 -> 14513 bytes .../lefdefref/images/LEFSyntax.04.1.18.png | Bin 0 -> 11045 bytes .../lefdefref/images/LEFSyntax.04.1.19.png | Bin 0 -> 12083 bytes .../lefdefref/images/LEFSyntax.04.1.20.png | Bin 0 -> 10056 bytes .../lefdefref/images/LEFSyntax.04.1.21.png | Bin 0 -> 11224 bytes .../lefdefref/images/LEFSyntax.04.1.22.png | Bin 0 -> 12490 bytes .../lefdefref/images/LEFSyntax.04.1.23.png | Bin 0 -> 14443 bytes .../lefdefref/images/LEFSyntax.04.1.24.png | Bin 0 -> 15778 bytes .../lefdefref/images/LEFSyntax.04.1.25.png | Bin 0 -> 5391 bytes .../lefdefref/images/LEFSyntax.04.1.26.png | Bin 0 -> 10945 bytes .../lefdefref/images/LEFSyntax.04.1.27.png | Bin 0 -> 5958 bytes .../lefdefref/images/LEFSyntax.04.1.28.png | Bin 0 -> 16079 bytes .../lefdefref/images/LEFSyntax.04.1.29.png | Bin 0 -> 24980 bytes .../lefdefref/images/LEFSyntax.04.1.30.png | Bin 0 -> 5615 bytes .../lefdefref/images/LEFSyntax.04.1.31.png | Bin 0 -> 9475 bytes .../lefdefref/images/LEFSyntax.04.1.32.png | Bin 0 -> 12352 bytes .../lefdefref/images/LEFSyntax.04.1.33.png | Bin 0 -> 40201 bytes .../lefdefref/images/LEFSyntax.04.1.34.png | Bin 0 -> 7769 bytes .../lefdefref/images/LEFSyntax.04.1.35.png | Bin 0 -> 10440 bytes .../lefdefref/images/LEFSyntax.04.1.36.png | Bin 0 -> 7818 bytes .../lefdefref/images/LEFSyntax.04.1.37.png | Bin 0 -> 18965 bytes .../lefdefref/images/LEFSyntax.04.1.38.png | Bin 0 -> 16287 bytes .../lefdefref/images/LEFSyntax.04.1.39.png | Bin 0 -> 27104 bytes .../lefdefref/images/LEFSyntax.04.1.40.png | Bin 0 -> 8944 bytes .../lefdefref/images/LEFSyntax.04.1.41.png | Bin 0 -> 33814 bytes .../lefdefref/images/LEFSyntax.04.1.42.png | Bin 0 -> 26492 bytes .../lefdefref/images/LEFSyntax.04.1.43.png | Bin 0 -> 16551 bytes .../lefdefref/images/LEFSyntax.04.1.44.png | Bin 0 -> 864 bytes .../lefdefref/images/LEFSyntax.04.1.45.png | Bin 0 -> 4121 bytes .../lefdefref/images/LEFSyntax.04.1.46.png | Bin 0 -> 14990 bytes .../lefdefref/images/LEFSyntax.04.1.47.png | Bin 0 -> 23887 bytes .../lefdefref/images/LEFSyntax.04.1.48.png | Bin 0 -> 14586 bytes .../lefdefref/images/LEFSyntax.04.1.49.png | Bin 0 -> 13697 bytes .../lefdefref/images/LEFSyntax.04.1.50.png | Bin 0 -> 19544 bytes .../lefdefref/images/LEFSyntax.04.1.51.png | Bin 0 -> 5848 bytes .../lefdefref/images/LEFSyntax.04.1.52.png | Bin 0 -> 16076 bytes .../lefdefref/images/LEFSyntax.04.1.53.png | Bin 0 -> 8892 bytes .../lefdefref/images/LEFSyntax.04.1.54.png | Bin 0 -> 3411 bytes .../lefdefref/images/LEFSyntax.04.1.55.png | Bin 0 -> 11243 bytes .../lefdefref/images/LEFSyntax.04.1.56.png | Bin 0 -> 22182 bytes .../lefdefref/images/LEFSyntax.04.1.57.png | Bin 0 -> 6033 bytes .../lefdefref/images/LEFSyntax.04.1.58.png | Bin 0 -> 9574 bytes .../lefdefref/images/LEFSyntax.04.1.59.png | Bin 0 -> 36970 bytes .../lefdefref/images/LEFSyntax.04.1.60.png | Bin 0 -> 27343 bytes .../lefdefref/images/LEFSyntax.04.1.61.png | Bin 0 -> 34864 bytes .../lefdefref/images/LEFSyntax.04.1.62.png | Bin 0 -> 11706 bytes .../images/OptimizingLEFTechnology.09.1.1.png | Bin 0 -> 7208 bytes .../images/OptimizingLEFTechnology.09.1.2.png | Bin 0 -> 11067 bytes .../images/OptimizingLEFTechnology.09.1.3.png | Bin 0 -> 5903 bytes .../images/OptimizingLEFTechnology.09.1.4.png | Bin 0 -> 6689 bytes .../images/OptimizingLEFTechnology.09.1.5.png | Bin 0 -> 13289 bytes .../images/OptimizingLEFTechnology.09.1.6.png | Bin 0 -> 21317 bytes lefdef/doc/lefdefref/images/PAE.10.1.01.png | Bin 0 -> 2881 bytes lefdef/doc/lefdefref/images/PAE.10.1.02.png | Bin 0 -> 5403 bytes lefdef/doc/lefdefref/images/PAE.10.1.03.png | Bin 0 -> 10016 bytes lefdef/doc/lefdefref/images/PAE.10.1.04.png | Bin 0 -> 4136 bytes lefdef/doc/lefdefref/images/PAE.10.1.05.png | Bin 0 -> 4934 bytes lefdef/doc/lefdefref/images/PAE.10.1.06.png | Bin 0 -> 3877 bytes lefdef/doc/lefdefref/images/PAE.10.1.07.png | Bin 0 -> 7778 bytes lefdef/doc/lefdefref/images/PAE.10.1.08.png | Bin 0 -> 2688 bytes lefdef/doc/lefdefref/images/PAE.10.1.09.png | Bin 0 -> 2526 bytes lefdef/doc/lefdefref/images/PAE.10.1.10.png | Bin 0 -> 2456 bytes lefdef/doc/lefdefref/images/PAE.10.1.11.png | Bin 0 -> 10104 bytes lefdef/doc/lefdefref/images/PAE.10.1.12.png | Bin 0 -> 3225 bytes lefdef/doc/lefdefref/images/PAE.10.1.13.png | Bin 0 -> 10623 bytes lefdef/doc/lefdefref/images/PAE.10.1.14.png | Bin 0 -> 3329 bytes lefdef/doc/lefdefref/images/PAE.10.1.15.png | Bin 0 -> 11382 bytes lefdef/doc/lefdefref/images/PAE.10.1.16.png | Bin 0 -> 3509 bytes lefdef/doc/lefdefref/images/PAE.10.1.17.png | Bin 0 -> 10368 bytes lefdef/doc/lefdefref/images/PAE.10.1.18.png | Bin 0 -> 3792 bytes lefdef/doc/lefdefref/images/PAE.10.1.19.png | Bin 0 -> 9570 bytes lefdef/doc/lefdefref/images/PAE.10.1.20.png | Bin 0 -> 9732 bytes lefdef/doc/lefdefref/images/PAE.10.1.21.png | Bin 0 -> 7237 bytes lefdef/doc/lefdefref/images/PAE.10.1.22.png | Bin 0 -> 7239 bytes lefdef/doc/lefdefref/images/PAE.10.1.23.png | Bin 0 -> 7984 bytes lefdef/doc/lefdefref/images/PAE.10.1.24.png | Bin 0 -> 8006 bytes lefdef/doc/lefdefref/images/PAE.10.1.25.png | Bin 0 -> 7994 bytes lefdef/doc/lefdefref/images/PAE.10.1.26.png | Bin 0 -> 5047 bytes lefdef/doc/lefdefref/images/PAE.10.1.27.png | Bin 0 -> 5413 bytes lefdef/doc/lefdefref/images/PAE.10.1.28.png | Bin 0 -> 2957 bytes lefdef/doc/lefdefref/images/PAE.10.1.29.png | Bin 0 -> 7865 bytes lefdef/doc/lefdefref/images/PAE.10.1.30.png | Bin 0 -> 4049 bytes lefdef/doc/lefdefref/images/PAE.10.1.31.png | Bin 0 -> 9628 bytes lefdef/doc/lefdefref/images/PAE.10.1.32.png | Bin 0 -> 5844 bytes lefdef/doc/lefdefref/images/PAE.10.1.33.png | Bin 0 -> 3371 bytes lefdef/doc/lefdefref/images/PAE.10.1.34.png | Bin 0 -> 3500 bytes lefdef/doc/lefdefref/images/PAE.10.1.35.png | Bin 0 -> 8912 bytes lefdef/doc/lefdefref/images/PAE.10.1.36.png | Bin 0 -> 12504 bytes lefdef/doc/lefdefref/images/PAE.10.1.37.png | Bin 0 -> 6293 bytes lefdef/doc/lefdefref/images/PAE.10.1.38.png | Bin 0 -> 12257 bytes lefdef/doc/lefdefref/images/PAE.10.1.39.png | Bin 0 -> 56696 bytes lefdef/doc/lefdefref/images/PAE.10.1.40.png | Bin 0 -> 23303 bytes lefdef/doc/lefdefref/images/PAE.10.1.41.png | Bin 0 -> 12299 bytes lefdef/doc/lefdefref/images/Thumbs.db | Bin 0 -> 161792 bytes lefdef/doc/lefdefref/images/aleph.gif | Bin 0 -> 155 bytes lefdef/doc/lefdefref/images/alpha.gif | Bin 0 -> 147 bytes lefdef/doc/lefdefref/images/ampersnd.gif | Bin 0 -> 209 bytes lefdef/doc/lefdefref/images/angle.gif | Bin 0 -> 74 bytes lefdef/doc/lefdefref/images/anglleft.gif | Bin 0 -> 118 bytes lefdef/doc/lefdefref/images/anglrite.gif | Bin 0 -> 120 bytes lefdef/doc/lefdefref/images/approx.gif | Bin 0 -> 125 bytes lefdef/doc/lefdefref/images/arrwboth.gif | Bin 0 -> 154 bytes lefdef/doc/lefdefref/images/arrwdbbo.gif | Bin 0 -> 145 bytes lefdef/doc/lefdefref/images/arrwdbdn.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefref/images/arrwdblt.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefref/images/arrwdbrt.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefref/images/arrwdbup.gif | Bin 0 -> 137 bytes lefdef/doc/lefdefref/images/arrwdown.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefref/images/arrwleft.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefref/images/arrwrite.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefref/images/arrwup.gif | Bin 0 -> 135 bytes lefdef/doc/lefdefref/images/arrwvert.gif | Bin 0 -> 85 bytes lefdef/doc/lefdefref/images/b_bullet.gif | Bin 0 -> 818 bytes lefdef/doc/lefdefref/images/beta.gif | Bin 0 -> 151 bytes lefdef/doc/lefdefref/images/blank.gif | Bin 0 -> 68 bytes lefdef/doc/lefdefref/images/bracltbt.gif | Bin 0 -> 119 bytes lefdef/doc/lefdefref/images/bracltmd.gif | Bin 0 -> 122 bytes lefdef/doc/lefdefref/images/braclttp.gif | Bin 0 -> 116 bytes lefdef/doc/lefdefref/images/bracrtbt.gif | Bin 0 -> 121 bytes lefdef/doc/lefdefref/images/bracrtmd.gif | Bin 0 -> 125 bytes lefdef/doc/lefdefref/images/bracrttp.gif | Bin 0 -> 122 bytes lefdef/doc/lefdefref/images/brakltbt.gif | Bin 0 -> 90 bytes lefdef/doc/lefdefref/images/braklttp.gif | Bin 0 -> 88 bytes lefdef/doc/lefdefref/images/brakmidl.gif | Bin 0 -> 84 bytes lefdef/doc/lefdefref/images/brakrtbt.gif | Bin 0 -> 122 bytes lefdef/doc/lefdefref/images/brakrttp.gif | Bin 0 -> 92 bytes lefdef/doc/lefdefref/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes .../lefdefref/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes lefdef/doc/lefdefref/images/bullet.gif | Bin 0 -> 120 bytes lefdef/doc/lefdefref/images/capalpha.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefref/images/capbeta.gif | Bin 0 -> 141 bytes lefdef/doc/lefdefref/images/capchi.gif | Bin 0 -> 144 bytes lefdef/doc/lefdefref/images/capdelta.gif | Bin 0 -> 141 bytes lefdef/doc/lefdefref/images/capepsil.gif | Bin 0 -> 130 bytes lefdef/doc/lefdefref/images/capeta.gif | Bin 0 -> 139 bytes lefdef/doc/lefdefref/images/capgamma.gif | Bin 0 -> 118 bytes lefdef/doc/lefdefref/images/capiota.gif | Bin 0 -> 111 bytes lefdef/doc/lefdefref/images/capkappa.gif | Bin 0 -> 143 bytes lefdef/doc/lefdefref/images/caplambd.gif | Bin 0 -> 139 bytes lefdef/doc/lefdefref/images/capmu.gif | Bin 0 -> 159 bytes lefdef/doc/lefdefref/images/capnu.gif | Bin 0 -> 156 bytes lefdef/doc/lefdefref/images/capomega.gif | Bin 0 -> 152 bytes lefdef/doc/lefdefref/images/capomicr.gif | Bin 0 -> 145 bytes lefdef/doc/lefdefref/images/capphi.gif | Bin 0 -> 161 bytes lefdef/doc/lefdefref/images/cappi.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefref/images/cappsi.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefref/images/caprho.gif | Bin 0 -> 133 bytes lefdef/doc/lefdefref/images/capsigma.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefref/images/captau.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefref/images/captheta.gif | Bin 0 -> 153 bytes lefdef/doc/lefdefref/images/capupsil.gif | Bin 0 -> 140 bytes lefdef/doc/lefdefref/images/capxi.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefref/images/capzeta.gif | Bin 0 -> 138 bytes lefdef/doc/lefdefref/images/carretrn.gif | Bin 0 -> 119 bytes lefdef/doc/lefdefref/images/caution.gif | Bin 0 -> 286 bytes lefdef/doc/lefdefref/images/chi.gif | Bin 0 -> 145 bytes lefdef/doc/lefdefref/images/circmult.gif | Bin 0 -> 81 bytes lefdef/doc/lefdefref/images/circplus.gif | Bin 0 -> 80 bytes lefdef/doc/lefdefref/images/club.gif | Bin 0 -> 134 bytes lefdef/doc/lefdefref/images/congrunt.gif | Bin 0 -> 115 bytes lefdef/doc/lefdefref/images/delta.gif | Bin 0 -> 141 bytes lefdef/doc/lefdefref/images/draft.gif | Bin 0 -> 279 bytes lefdef/doc/lefdefref/images/element.gif | Bin 0 -> 121 bytes lefdef/doc/lefdefref/images/emptyset.gif | Bin 0 -> 81 bytes lefdef/doc/lefdefref/images/epsilon.gif | Bin 0 -> 123 bytes lefdef/doc/lefdefref/images/epsilon1.gif | Bin 0 -> 74 bytes lefdef/doc/lefdefref/images/equivlnt.gif | Bin 0 -> 115 bytes lefdef/doc/lefdefref/images/eta.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefref/images/existntl.gif | Bin 0 -> 117 bytes lefdef/doc/lefdefref/images/gamma.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefref/images/gradient.gif | Bin 0 -> 136 bytes lefdef/doc/lefdefref/images/gtequal.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefref/images/header_doc.gif | Bin 0 -> 2954 bytes lefdef/doc/lefdefref/images/heart.gif | Bin 0 -> 133 bytes lefdef/doc/lefdefref/images/ifraktur.gif | Bin 0 -> 146 bytes lefdef/doc/lefdefref/images/important.gif | Bin 0 -> 267 bytes lefdef/doc/lefdefref/images/infinity.gif | Bin 0 -> 139 bytes lefdef/doc/lefdefref/images/integbot.gif | Bin 0 -> 134 bytes lefdef/doc/lefdefref/images/integral.gif | Bin 0 -> 123 bytes lefdef/doc/lefdefref/images/integtop.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefref/images/intrsect.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefref/images/iota.gif | Bin 0 -> 112 bytes lefdef/doc/lefdefref/images/kappa.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefref/images/lambda.gif | Bin 0 -> 137 bytes lefdef/doc/lefdefref/images/logic_or.gif | Bin 0 -> 67 bytes lefdef/doc/lefdefref/images/logicand.gif | Bin 0 -> 93 bytes lefdef/doc/lefdefref/images/lozenge.gif | Bin 0 -> 129 bytes lefdef/doc/lefdefref/images/lt_equal.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefref/images/nav2_index.gif | Bin 0 -> 1050 bytes lefdef/doc/lefdefref/images/nav2_index_b.gif | Bin 0 -> 854 bytes lefdef/doc/lefdefref/images/nav2_next_b.gif | Bin 0 -> 861 bytes lefdef/doc/lefdefref/images/nav2_previous.gif | Bin 0 -> 1202 bytes .../doc/lefdefref/images/nav2_previous_b.gif | Bin 0 -> 871 bytes lefdef/doc/lefdefref/images/nav2_print.gif | Bin 0 -> 1341 bytes lefdef/doc/lefdefref/images/nav2_toc.gif | Bin 0 -> 1154 bytes lefdef/doc/lefdefref/images/nav2_toc_b.gif | Bin 0 -> 866 bytes lefdef/doc/lefdefref/images/nav_next.gif | Bin 0 -> 1092 bytes lefdef/doc/lefdefref/images/nav_next_b.gif | Bin 0 -> 863 bytes lefdef/doc/lefdefref/images/notelemn.gif | Bin 0 -> 141 bytes lefdef/doc/lefdefref/images/notequal.gif | Bin 0 -> 121 bytes lefdef/doc/lefdefref/images/notsbset.gif | Bin 0 -> 129 bytes lefdef/doc/lefdefref/images/nu.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefref/images/omega.gif | Bin 0 -> 140 bytes lefdef/doc/lefdefref/images/omega1.gif | Bin 0 -> 144 bytes lefdef/doc/lefdefref/images/omicron.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefref/images/pareltbt.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefref/images/parelttp.gif | Bin 0 -> 126 bytes lefdef/doc/lefdefref/images/parertbt.gif | Bin 0 -> 127 bytes lefdef/doc/lefdefref/images/parerttp.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefref/images/partldif.gif | Bin 0 -> 137 bytes lefdef/doc/lefdefref/images/perpend.gif | Bin 0 -> 111 bytes lefdef/doc/lefdefref/images/phi.gif | Bin 0 -> 142 bytes lefdef/doc/lefdefref/images/phi1.gif | Bin 0 -> 143 bytes lefdef/doc/lefdefref/images/pi.gif | Bin 0 -> 134 bytes lefdef/doc/lefdefref/images/product.gif | Bin 0 -> 80 bytes lefdef/doc/lefdefref/images/proportn.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefref/images/prsprset.gif | Bin 0 -> 67 bytes lefdef/doc/lefdefref/images/prsubset.gif | Bin 0 -> 117 bytes lefdef/doc/lefdefref/images/psi.gif | Bin 0 -> 146 bytes lefdef/doc/lefdefref/images/radical.gif | Bin 0 -> 78 bytes lefdef/doc/lefdefref/images/refsbset.gif | Bin 0 -> 118 bytes lefdef/doc/lefdefref/images/refspset.gif | Bin 0 -> 124 bytes lefdef/doc/lefdefref/images/rfraktur.gif | Bin 0 -> 153 bytes lefdef/doc/lefdefref/images/rho.gif | Bin 0 -> 134 bytes lefdef/doc/lefdefref/images/second.gif | Bin 0 -> 115 bytes lefdef/doc/lefdefref/images/sigma.gif | Bin 0 -> 132 bytes lefdef/doc/lefdefref/images/sigma1.gif | Bin 0 -> 135 bytes lefdef/doc/lefdefref/images/spade.gif | Bin 0 -> 122 bytes lefdef/doc/lefdefref/images/suchthat.gif | Bin 0 -> 119 bytes lefdef/doc/lefdefref/images/sumation.gif | Bin 0 -> 77 bytes lefdef/doc/lefdefref/images/tau.gif | Bin 0 -> 119 bytes lefdef/doc/lefdefref/images/therefor.gif | Bin 0 -> 111 bytes lefdef/doc/lefdefref/images/theta.gif | Bin 0 -> 144 bytes lefdef/doc/lefdefref/images/theta1.gif | Bin 0 -> 148 bytes lefdef/doc/lefdefref/images/tip.gif | Bin 0 -> 241 bytes lefdef/doc/lefdefref/images/tm.gif | Bin 0 -> 145 bytes lefdef/doc/lefdefref/images/union.gif | Bin 0 -> 129 bytes lefdef/doc/lefdefref/images/univrsal.gif | Bin 0 -> 135 bytes lefdef/doc/lefdefref/images/upsilon.gif | Bin 0 -> 133 bytes lefdef/doc/lefdefref/images/upsilon1.gif | Bin 0 -> 131 bytes lefdef/doc/lefdefref/images/video.gif | Bin 0 -> 906 bytes lefdef/doc/lefdefref/images/weierstr.gif | Bin 0 -> 153 bytes lefdef/doc/lefdefref/images/xi.gif | Bin 0 -> 144 bytes lefdef/doc/lefdefref/images/zeta.gif | Bin 0 -> 142 bytes lefdef/doc/lefdefref/lefdefref.pdf | Bin 0 -> 2602995 bytes lefdef/doc/lefdefref/lefdefrefIX.html | 561 + lefdef/doc/lefdefref/lefdefrefTOC.html | 287 + lefdef/doc/lefdefref/preface.html | 249 + lefdef/doc/lefdefref/titlecopy.html | 220 + lefdef/doc/support/header_doc.gif | Bin 0 -> 2954 bytes lefdef/doc/support/ix_ref.gif | Bin 0 -> 95 bytes lefdef/doc/support/nav2_black.gif | Bin 0 -> 74 bytes lefdef/doc/support/nav2_exit.gif | Bin 0 -> 996 bytes lefdef/doc/support/nav2_feedback.gif | Bin 0 -> 1174 bytes lefdef/doc/support/nav2_help.gif | Bin 0 -> 1023 bytes lefdef/doc/support/nav2_index.gif | Bin 0 -> 1050 bytes lefdef/doc/support/nav2_index_b.gif | Bin 0 -> 854 bytes lefdef/doc/support/nav2_library.gif | Bin 0 -> 1085 bytes lefdef/doc/support/nav2_next_b.gif | Bin 0 -> 861 bytes lefdef/doc/support/nav2_previous.gif | Bin 0 -> 1202 bytes lefdef/doc/support/nav2_previous_b.gif | Bin 0 -> 871 bytes lefdef/doc/support/nav2_print.gif | Bin 0 -> 1341 bytes lefdef/doc/support/nav2_toc.gif | Bin 0 -> 1154 bytes lefdef/doc/support/nav2_toc_b.gif | Bin 0 -> 866 bytes lefdef/doc/support/nav_next.gif | Bin 0 -> 1092 bytes lefdef/doc/support/nav_next_b.gif | Bin 0 -> 863 bytes lefdef/src/CMakeLists.txt | 4 + lefdef/src/def/CMakeLists.txt | 7 + lefdef/src/def/LICENSE.TXT | 13 + lefdef/src/def/Makefile | 57 + lefdef/src/def/TEST/Makefile | 18 + lefdef/src/def/TEST/complete.5.8.def | 1007 ++ lefdef/src/def/TEST/complete.5.8.def.au | 808 + lefdef/src/def/bin/lefdefdiff | 526 + lefdef/src/def/cdef/Makefile | 70 + lefdef/src/def/cdef/defMsgTable.h | 154 + lefdef/src/def/cdef/defiAlias.h | 40 + lefdef/src/def/cdef/defiAssertion.h | 82 + lefdef/src/def/cdef/defiBlockage.h | 71 + lefdef/src/def/cdef/defiComponent.h | 116 + lefdef/src/def/cdef/defiDebug.h | 53 + lefdef/src/def/cdef/defiDefs.h | 28 + lefdef/src/def/cdef/defiFPC.h | 63 + lefdef/src/def/cdef/defiFill.h | 67 + lefdef/src/def/cdef/defiGroup.h | 65 + lefdef/src/def/cdef/defiIOTiming.h | 69 + lefdef/src/def/cdef/defiKRDefs.h | 28 + lefdef/src/def/cdef/defiMisc.h | 46 + lefdef/src/def/cdef/defiNet.h | 247 + lefdef/src/def/cdef/defiNonDefault.h | 79 + lefdef/src/def/cdef/defiPartition.h | 84 + lefdef/src/def/cdef/defiPath.h | 98 + lefdef/src/def/cdef/defiPinCap.h | 194 + lefdef/src/def/cdef/defiPinProp.h | 54 + lefdef/src/def/cdef/defiProp.h | 59 + lefdef/src/def/cdef/defiPropType.h | 45 + lefdef/src/def/cdef/defiRegion.h | 63 + lefdef/src/def/cdef/defiRowTrack.h | 81 + lefdef/src/def/cdef/defiScanchain.h | 93 + lefdef/src/def/cdef/defiSite.h | 74 + lefdef/src/def/cdef/defiSlot.h | 54 + lefdef/src/def/cdef/defiTimingDisable.h | 60 + lefdef/src/def/cdef/defiTypedefs.h | 115 + lefdef/src/def/cdef/defiUser.h | 89 + lefdef/src/def/cdef/defiVia.h | 69 + lefdef/src/def/cdef/defrReader.h | 668 + lefdef/src/def/cdef/defwWriter.h | 1455 ++ lefdef/src/def/cdef/defwWriterCalls.h | 207 + lefdef/src/def/cdef/xdefiAssertion.cpp | 127 + lefdef/src/def/cdef/xdefiBlockage.cpp | 149 + lefdef/src/def/cdef/xdefiComponent.cpp | 247 + lefdef/src/def/cdef/xdefiDebug.cpp | 59 + lefdef/src/def/cdef/xdefiFPC.cpp | 91 + lefdef/src/def/cdef/xdefiFill.cpp | 123 + lefdef/src/def/cdef/xdefiGroup.cpp | 115 + lefdef/src/def/cdef/xdefiIOTiming.cpp | 139 + lefdef/src/def/cdef/xdefiMisc.cpp | 57 + lefdef/src/def/cdef/xdefiNet.cpp | 539 + lefdef/src/def/cdef/xdefiNonDefault.cpp | 159 + lefdef/src/def/cdef/xdefiPartition.cpp | 183 + lefdef/src/def/cdef/xdefiPath.cpp | 135 + lefdef/src/def/cdef/xdefiPinCap.cpp | 551 + lefdef/src/def/cdef/xdefiPinProp.cpp | 83 + lefdef/src/def/cdef/xdefiProp.cpp | 87 + lefdef/src/def/cdef/xdefiPropType.cpp | 43 + lefdef/src/def/cdef/xdefiRegion.cpp | 103 + lefdef/src/def/cdef/xdefiRowTrack.cpp | 175 + lefdef/src/def/cdef/xdefiScanchain.cpp | 135 + lefdef/src/def/cdef/xdefiSite.cpp | 105 + lefdef/src/def/cdef/xdefiSlot.cpp | 81 + lefdef/src/def/cdef/xdefiTimingDisable.cpp | 91 + lefdef/src/def/cdef/xdefiVia.cpp | 133 + lefdef/src/def/cdef/xdefrReader.cpp | 1119 ++ lefdef/src/def/cdef/xdefwWriter.cpp | 1115 ++ lefdef/src/def/cdef/xdefwWriterCalls.cpp | 203 + lefdef/src/def/cdefzlib/Makefile | 13 + lefdef/src/def/cdefzlib/cdefzlib.c | 69 + lefdef/src/def/cdefzlib/defzlib.h | 51 + lefdef/src/def/def/CMakeLists.txt | 186 + lefdef/src/def/def/Makefile | 90 + lefdef/src/def/def/def.msg | 163 + lefdef/src/def/def/def.tab.h | 337 + lefdef/src/def/def/def.y | 5189 ++++++ lefdef/src/def/def/def_keywords.cpp | 1363 ++ lefdef/src/def/def/def_objs.defs | 44 + lefdef/src/def/def/defiAlias.cpp | 114 + lefdef/src/def/def/defiAlias.hpp | 63 + lefdef/src/def/def/defiAssertion.cpp | 425 + lefdef/src/def/def/defiAssertion.hpp | 138 + lefdef/src/def/def/defiBlockage.cpp | 459 + lefdef/src/def/def/defiBlockage.hpp | 132 + lefdef/src/def/def/defiComponent.cpp | 988 ++ lefdef/src/def/def/defiComponent.hpp | 249 + lefdef/src/def/def/defiDebug.cpp | 96 + lefdef/src/def/def/defiDebug.hpp | 56 + lefdef/src/def/def/defiDefs.hpp | 182 + lefdef/src/def/def/defiFPC.cpp | 269 + lefdef/src/def/def/defiFPC.hpp | 107 + lefdef/src/def/def/defiFill.cpp | 428 + lefdef/src/def/def/defiFill.hpp | 120 + lefdef/src/def/def/defiGroup.cpp | 447 + lefdef/src/def/def/defiGroup.hpp | 122 + lefdef/src/def/def/defiIOTiming.cpp | 424 + lefdef/src/def/def/defiIOTiming.hpp | 128 + lefdef/src/def/def/defiKRDefs.hpp | 37 + lefdef/src/def/def/defiMisc.cpp | 201 + lefdef/src/def/def/defiMisc.hpp | 96 + lefdef/src/def/def/defiNet.cpp | 3022 ++++ lefdef/src/def/def/defiNet.hpp | 569 + lefdef/src/def/def/defiNonDefault.cpp | 707 + lefdef/src/def/def/defiNonDefault.hpp | 141 + lefdef/src/def/def/defiPartition.cpp | 551 + lefdef/src/def/def/defiPartition.hpp | 163 + lefdef/src/def/def/defiPath.cpp | 563 + lefdef/src/def/def/defiPath.hpp | 170 + lefdef/src/def/def/defiPinCap.cpp | 2152 +++ lefdef/src/def/def/defiPinCap.hpp | 430 + lefdef/src/def/def/defiPinProp.cpp | 314 + lefdef/src/def/def/defiPinProp.hpp | 91 + lefdef/src/def/def/defiProp.cpp | 223 + lefdef/src/def/def/defiProp.hpp | 99 + lefdef/src/def/def/defiPropType.cpp | 131 + lefdef/src/def/def/defiPropType.hpp | 66 + lefdef/src/def/def/defiRegion.cpp | 409 + lefdef/src/def/def/defiRegion.hpp | 107 + lefdef/src/def/def/defiRowTrack.cpp | 626 + lefdef/src/def/def/defiRowTrack.hpp | 184 + lefdef/src/def/def/defiScanchain.cpp | 590 + lefdef/src/def/def/defiScanchain.hpp | 186 + lefdef/src/def/def/defiSite.cpp | 281 + lefdef/src/def/def/defiSite.hpp | 123 + lefdef/src/def/def/defiSlot.cpp | 276 + lefdef/src/def/def/defiSlot.hpp | 92 + lefdef/src/def/def/defiTimingDisable.cpp | 320 + lefdef/src/def/def/defiTimingDisable.hpp | 101 + lefdef/src/def/def/defiUser.hpp | 87 + lefdef/src/def/def/defiUtil.cpp | 121 + lefdef/src/def/def/defiUtil.hpp | 52 + lefdef/src/def/def/defiVia.cpp | 608 + lefdef/src/def/def/defiVia.hpp | 149 + lefdef/src/def/def/defrCallBacks.hpp | 159 + lefdef/src/def/def/defrCallbacks.cpp | 351 + lefdef/src/def/def/defrData.cpp | 506 + lefdef/src/def/def/defrData.hpp | 307 + lefdef/src/def/def/defrReader.cpp | 2538 +++ lefdef/src/def/def/defrReader.hpp | 723 + lefdef/src/def/def/defrSettings.cpp | 343 + lefdef/src/def/def/defrSettings.hpp | 142 + lefdef/src/def/def/defwWriter.cpp | 6918 ++++++++ lefdef/src/def/def/defwWriter.hpp | 1752 ++ lefdef/src/def/def/defwWriterCalls.cpp | 613 + lefdef/src/def/def/defwWriterCalls.hpp | 220 + lefdef/src/def/def/lex.h | 46 + lefdef/src/def/defdiff/CMakeLists.txt | 13 + lefdef/src/def/defdiff/Makefile | 16 + lefdef/src/def/defdiff/diffDefRW.cpp | 2253 +++ lefdef/src/def/defdiff/diffDefRW.hpp | 39 + lefdef/src/def/defdiff/differDef.cpp | 99 + lefdef/src/def/defrw/CMakeLists.txt | 12 + lefdef/src/def/defrw/Makefile | 14 + lefdef/src/def/defrw/defrw.cpp | 3395 ++++ lefdef/src/def/defwrite/CMakeLists.txt | 12 + lefdef/src/def/defwrite/Makefile | 24 + lefdef/src/def/defwrite/defwrite.cpp | 2294 +++ lefdef/src/def/defwrite/defwriteCbs.cpp | 1424 ++ lefdef/src/def/defzlib/CMakeLists.txt | 17 + lefdef/src/def/defzlib/Makefile | 11 + lefdef/src/def/defzlib/defzlib.cpp | 98 + lefdef/src/def/defzlib/defzlib.hpp | 91 + lefdef/src/def/doc/defapi.pdf | 9654 ++++++++++ lefdef/src/def/doc/defapiWN.pdf | Bin 0 -> 135946 bytes lefdef/src/def/template.mk | 94 + lefdef/src/lef/CMakeLists.txt | 7 + lefdef/src/lef/LICENSE.TXT | 13 + lefdef/src/lef/Makefile | 57 + lefdef/src/lef/TEST/Makefile | 18 + lefdef/src/lef/TEST/complete.5.8.lef | 1962 ++ lefdef/src/lef/TEST/complete.5.8.lef.au | 1574 ++ lefdef/src/lef/bin/lefdefdiff | 526 + lefdef/src/lef/clef/Makefile | 49 + lefdef/src/lef/clef/lefMsgTable.h | 408 + lefdef/src/lef/clef/lefiArray.h | 73 + lefdef/src/lef/clef/lefiCrossTalk.h | 53 + lefdef/src/lef/clef/lefiDebug.h | 51 + lefdef/src/lef/clef/lefiEncryptExt.c | 17 + lefdef/src/lef/clef/lefiEncryptInt.h | 45 + lefdef/src/lef/clef/lefiLayer.h | 437 + lefdef/src/lef/clef/lefiMacro.h | 282 + lefdef/src/lef/clef/lefiMisc.h | 174 + lefdef/src/lef/clef/lefiNonDefault.h | 94 + lefdef/src/lef/clef/lefiProp.h | 60 + lefdef/src/lef/clef/lefiPropType.h | 45 + lefdef/src/lef/clef/lefiTBInt.c | 38 + lefdef/src/lef/clef/lefiTypedefs.h | 183 + lefdef/src/lef/clef/lefiUnits.h | 62 + lefdef/src/lef/clef/lefiUser.h | 64 + lefdef/src/lef/clef/lefiUtil.h | 53 + lefdef/src/lef/clef/lefiVia.h | 124 + lefdef/src/lef/clef/lefiViaRule.h | 101 + lefdef/src/lef/clef/lefrReader.h | 509 + lefdef/src/lef/clef/lefwWriter.h | 2128 +++ lefdef/src/lef/clef/lefwWriterCalls.h | 200 + lefdef/src/lef/clef/xlefiArray.cpp | 143 + lefdef/src/lef/clef/xlefiCrossTalk.cpp | 67 + lefdef/src/lef/clef/xlefiDebug.cpp | 55 + lefdef/src/lef/clef/xlefiEncryptInt.cpp | 43 + lefdef/src/lef/clef/xlefiLayer.cpp | 1215 ++ lefdef/src/lef/clef/xlefiMacro.cpp | 829 + lefdef/src/lef/clef/xlefiMisc.cpp | 343 + lefdef/src/lef/clef/xlefiNonDefault.cpp | 183 + lefdef/src/lef/clef/xlefiProp.cpp | 87 + lefdef/src/lef/clef/xlefiPropType.cpp | 43 + lefdef/src/lef/clef/xlefiUnits.cpp | 111 + lefdef/src/lef/clef/xlefiUtil.cpp | 59 + lefdef/src/lef/clef/xlefiVia.cpp | 285 + lefdef/src/lef/clef/xlefiViaRule.cpp | 199 + lefdef/src/lef/clef/xlefrReader.cpp | 751 + lefdef/src/lef/clef/xlefwWriter.cpp | 1303 ++ lefdef/src/lef/clef/xlefwWriterCalls.cpp | 191 + lefdef/src/lef/clefzlib/Makefile | 13 + lefdef/src/lef/clefzlib/clefzlib.c | 69 + lefdef/src/lef/clefzlib/lefzlib.h | 51 + lefdef/src/lef/doc/lefapi.pdf | 8601 +++++++++ lefdef/src/lef/doc/lefapiWN.pdf | Bin 0 -> 113772 bytes lefdef/src/lef/lef/CMakeLists.txt | 116 + lefdef/src/lef/lef/Makefile | 71 + lefdef/src/lef/lef/crypt.cpp | 116 + lefdef/src/lef/lef/crypt.hpp | 53 + lefdef/src/lef/lef/lef.msg | 404 + lefdef/src/lef/lef/lef.tab.h | 514 + lefdef/src/lef/lef/lef.y | 7158 ++++++++ lefdef/src/lef/lef/lef_keywords.cpp | 2109 +++ lefdef/src/lef/lef/lefiArray.cpp | 675 + lefdef/src/lef/lef/lefiArray.hpp | 147 + lefdef/src/lef/lef/lefiCrossTalk.cpp | 994 ++ lefdef/src/lef/lef/lefiCrossTalk.hpp | 273 + lefdef/src/lef/lef/lefiDebug.cpp | 400 + lefdef/src/lef/lef/lefiDebug.hpp | 52 + lefdef/src/lef/lef/lefiDefs.hpp | 184 + lefdef/src/lef/lef/lefiEncryptInt.cpp | 48 + lefdef/src/lef/lef/lefiEncryptInt.hpp | 47 + lefdef/src/lef/lef/lefiKRDefs.hpp | 37 + lefdef/src/lef/lef/lefiLayer.cpp | 6812 +++++++ lefdef/src/lef/lef/lefiLayer.hpp | 1064 ++ lefdef/src/lef/lef/lefiMacro.cpp | 4789 +++++ lefdef/src/lef/lef/lefiMacro.hpp | 939 + lefdef/src/lef/lef/lefiMisc.cpp | 1867 ++ lefdef/src/lef/lef/lefiMisc.hpp | 493 + lefdef/src/lef/lef/lefiNonDefault.cpp | 1120 ++ lefdef/src/lef/lef/lefiNonDefault.hpp | 178 + lefdef/src/lef/lef/lefiProp.cpp | 259 + lefdef/src/lef/lef/lefiProp.hpp | 96 + lefdef/src/lef/lef/lefiPropType.cpp | 142 + lefdef/src/lef/lef/lefiPropType.hpp | 65 + lefdef/src/lef/lef/lefiTBExt.cpp | 158 + lefdef/src/lef/lef/lefiUnits.cpp | 283 + lefdef/src/lef/lef/lefiUnits.hpp | 102 + lefdef/src/lef/lef/lefiUser.hpp | 63 + lefdef/src/lef/lef/lefiUtil.hpp | 61 + lefdef/src/lef/lef/lefiVia.cpp | 1460 ++ lefdef/src/lef/lef/lefiVia.hpp | 259 + lefdef/src/lef/lef/lefiViaRule.cpp | 846 + lefdef/src/lef/lef/lefiViaRule.hpp | 197 + lefdef/src/lef/lef/lefrCallBacks.hpp | 112 + lefdef/src/lef/lef/lefrCallbacks.cpp | 109 + lefdef/src/lef/lef/lefrData.cpp | 361 + lefdef/src/lef/lef/lefrData.hpp | 307 + lefdef/src/lef/lef/lefrReader.cpp | 1910 ++ lefdef/src/lef/lef/lefrReader.hpp | 586 + lefdef/src/lef/lef/lefrSettings.cpp | 652 + lefdef/src/lef/lef/lefrSettings.hpp | 154 + lefdef/src/lef/lef/lefwWriter.cpp | 9839 ++++++++++ lefdef/src/lef/lef/lefwWriter.hpp | 2374 +++ lefdef/src/lef/lef/lefwWriterCalls.cpp | 664 + lefdef/src/lef/lef/lefwWriterCalls.hpp | 210 + lefdef/src/lef/lef/lex.h | 69 + lefdef/src/lef/lefdiff/CMakeLists.txt | 13 + lefdef/src/lef/lefdiff/Makefile | 16 + lefdef/src/lef/lefdiff/diffLefRW.cpp | 2101 +++ lefdef/src/lef/lefdiff/diffLefRW.hpp | 38 + lefdef/src/lef/lefdiff/differLef.cpp | 98 + lefdef/src/lef/lefrw/CMakeLists.txt | 12 + lefdef/src/lef/lefrw/Makefile | 10 + lefdef/src/lef/lefrw/lefrw.cpp | 2656 +++ lefdef/src/lef/lefwrite/CMakeLists.txt | 12 + lefdef/src/lef/lefwrite/Makefile | 21 + lefdef/src/lef/lefwrite/lefwrite.cpp | 2116 +++ lefdef/src/lef/lefwrite/lefwriteCbs.cpp | 997 ++ lefdef/src/lef/lefzlib/CMakeLists.txt | 17 + lefdef/src/lef/lefzlib/Makefile | 13 + lefdef/src/lef/lefzlib/lefzlib.cpp | 73 + lefdef/src/lef/lefzlib/lefzlib.hpp | 55 + lefdef/src/lef/template.mk | 94 + lefdef/src/lefdefReadme.txt | 80 + 1464 files changed, 258553 insertions(+), 107 deletions(-) create mode 100644 lefdef/CMakeLists.txt create mode 100644 lefdef/doc/CMakeLists.txt create mode 100644 lefdef/doc/defapi/appA_DEFexamples.html create mode 100644 lefdef/doc/defapi/ch1Intro.html create mode 100644 lefdef/doc/defapi/ch2DEFsetup.html create mode 100644 lefdef/doc/defapi/ch3DEFcallback.html create mode 100644 lefdef/doc/defapi/ch4DEFclasses.html create mode 100644 lefdef/doc/defapi/ch5DEFwritercallback.html create mode 100644 lefdef/doc/defapi/ch6DEFwriter.html create mode 100644 lefdef/doc/defapi/ch7DEFcompressed.html create mode 100644 lefdef/doc/defapi/ch8lefdiff.html create mode 100644 lefdef/doc/defapi/defapi.pdf create mode 100644 lefdef/doc/defapi/defapiTOC.html create mode 100644 lefdef/doc/defapi/images/Diamond.gif create mode 100644 lefdef/doc/defapi/images/Diamond1.gif create mode 100644 lefdef/doc/defapi/images/Diamond12.gif create mode 100644 lefdef/doc/defapi/images/Thumbs.db create mode 100644 lefdef/doc/defapi/images/aleph.gif create mode 100644 lefdef/doc/defapi/images/alpha.gif create mode 100644 lefdef/doc/defapi/images/ampersnd.gif create mode 100644 lefdef/doc/defapi/images/angle.gif create mode 100644 lefdef/doc/defapi/images/anglleft.gif create mode 100644 lefdef/doc/defapi/images/anglrite.gif create mode 100644 lefdef/doc/defapi/images/approx.gif create mode 100644 lefdef/doc/defapi/images/arrwboth.gif create mode 100644 lefdef/doc/defapi/images/arrwdbbo.gif create mode 100644 lefdef/doc/defapi/images/arrwdbdn.gif create mode 100644 lefdef/doc/defapi/images/arrwdblt.gif create mode 100644 lefdef/doc/defapi/images/arrwdbrt.gif create mode 100644 lefdef/doc/defapi/images/arrwdbup.gif create mode 100644 lefdef/doc/defapi/images/arrwdown.gif create mode 100644 lefdef/doc/defapi/images/arrwleft.gif create mode 100644 lefdef/doc/defapi/images/arrwrite.gif create mode 100644 lefdef/doc/defapi/images/arrwup.gif create mode 100644 lefdef/doc/defapi/images/arrwvert.gif create mode 100644 lefdef/doc/defapi/images/b_bullet.gif create mode 100644 lefdef/doc/defapi/images/beta.gif create mode 100644 lefdef/doc/defapi/images/blank.gif create mode 100644 lefdef/doc/defapi/images/bracltbt.gif create mode 100644 lefdef/doc/defapi/images/bracltmd.gif create mode 100644 lefdef/doc/defapi/images/braclttp.gif create mode 100644 lefdef/doc/defapi/images/bracrtbt.gif create mode 100644 lefdef/doc/defapi/images/bracrtmd.gif create mode 100644 lefdef/doc/defapi/images/bracrttp.gif create mode 100644 lefdef/doc/defapi/images/brakltbt.gif create mode 100644 lefdef/doc/defapi/images/braklttp.gif create mode 100644 lefdef/doc/defapi/images/brakmidl.gif create mode 100644 lefdef/doc/defapi/images/brakrtbt.gif create mode 100644 lefdef/doc/defapi/images/brakrttp.gif create mode 100644 lefdef/doc/defapi/images/bs_bullet_sub.gif create mode 100644 lefdef/doc/defapi/images/bss_bullet_sub_sub.gif create mode 100644 lefdef/doc/defapi/images/bullet.gif create mode 100644 lefdef/doc/defapi/images/capalpha.gif create mode 100644 lefdef/doc/defapi/images/capbeta.gif create mode 100644 lefdef/doc/defapi/images/capchi.gif create mode 100644 lefdef/doc/defapi/images/capdelta.gif create mode 100644 lefdef/doc/defapi/images/capepsil.gif create mode 100644 lefdef/doc/defapi/images/capeta.gif create mode 100644 lefdef/doc/defapi/images/capgamma.gif create mode 100644 lefdef/doc/defapi/images/capiota.gif create mode 100644 lefdef/doc/defapi/images/capkappa.gif create mode 100644 lefdef/doc/defapi/images/caplambd.gif create mode 100644 lefdef/doc/defapi/images/capmu.gif create mode 100644 lefdef/doc/defapi/images/capnu.gif create mode 100644 lefdef/doc/defapi/images/capomega.gif create mode 100644 lefdef/doc/defapi/images/capomicr.gif create mode 100644 lefdef/doc/defapi/images/capphi.gif create mode 100644 lefdef/doc/defapi/images/cappi.gif create mode 100644 lefdef/doc/defapi/images/cappsi.gif create mode 100644 lefdef/doc/defapi/images/caprho.gif create mode 100644 lefdef/doc/defapi/images/capsigma.gif create mode 100644 lefdef/doc/defapi/images/captau.gif create mode 100644 lefdef/doc/defapi/images/captheta.gif create mode 100644 lefdef/doc/defapi/images/capupsil.gif create mode 100644 lefdef/doc/defapi/images/capxi.gif create mode 100644 lefdef/doc/defapi/images/capzeta.gif create mode 100644 lefdef/doc/defapi/images/carretrn.gif create mode 100644 lefdef/doc/defapi/images/caution.gif create mode 100644 lefdef/doc/defapi/images/ch1Intro.04.1.1.png create mode 100644 lefdef/doc/defapi/images/chi.gif create mode 100644 lefdef/doc/defapi/images/circmult.gif create mode 100644 lefdef/doc/defapi/images/circplus.gif create mode 100644 lefdef/doc/defapi/images/club.gif create mode 100644 lefdef/doc/defapi/images/congrunt.gif create mode 100644 lefdef/doc/defapi/images/delta.gif create mode 100644 lefdef/doc/defapi/images/draft.gif create mode 100644 lefdef/doc/defapi/images/element.gif create mode 100644 lefdef/doc/defapi/images/emptyset.gif create mode 100644 lefdef/doc/defapi/images/epsilon.gif create mode 100644 lefdef/doc/defapi/images/epsilon1.gif create mode 100644 lefdef/doc/defapi/images/equivlnt.gif create mode 100644 lefdef/doc/defapi/images/eta.gif create mode 100644 lefdef/doc/defapi/images/existntl.gif create mode 100644 lefdef/doc/defapi/images/gamma.gif create mode 100644 lefdef/doc/defapi/images/gradient.gif create mode 100644 lefdef/doc/defapi/images/gtequal.gif create mode 100644 lefdef/doc/defapi/images/header_doc.gif create mode 100644 lefdef/doc/defapi/images/heart.gif create mode 100644 lefdef/doc/defapi/images/ifraktur.gif create mode 100644 lefdef/doc/defapi/images/important.gif create mode 100644 lefdef/doc/defapi/images/infinity.gif create mode 100644 lefdef/doc/defapi/images/integbot.gif create mode 100644 lefdef/doc/defapi/images/integral.gif create mode 100644 lefdef/doc/defapi/images/integtop.gif create mode 100644 lefdef/doc/defapi/images/intrsect.gif create mode 100644 lefdef/doc/defapi/images/iota.gif create mode 100644 lefdef/doc/defapi/images/kappa.gif create mode 100644 lefdef/doc/defapi/images/lambda.gif create mode 100644 lefdef/doc/defapi/images/logic_or.gif create mode 100644 lefdef/doc/defapi/images/logicand.gif create mode 100644 lefdef/doc/defapi/images/lozenge.gif create mode 100644 lefdef/doc/defapi/images/lt_equal.gif create mode 100644 lefdef/doc/defapi/images/nav2_index.gif create mode 100644 lefdef/doc/defapi/images/nav2_index_b.gif create mode 100644 lefdef/doc/defapi/images/nav2_next_b.gif create mode 100644 lefdef/doc/defapi/images/nav2_previous.gif create mode 100644 lefdef/doc/defapi/images/nav2_previous_b.gif create mode 100644 lefdef/doc/defapi/images/nav2_print.gif create mode 100644 lefdef/doc/defapi/images/nav2_toc.gif create mode 100644 lefdef/doc/defapi/images/nav2_toc_b.gif create mode 100644 lefdef/doc/defapi/images/nav_next.gif create mode 100644 lefdef/doc/defapi/images/nav_next_b.gif create mode 100644 lefdef/doc/defapi/images/notelemn.gif create mode 100644 lefdef/doc/defapi/images/notequal.gif create mode 100644 lefdef/doc/defapi/images/notsbset.gif create mode 100644 lefdef/doc/defapi/images/nu.gif create mode 100644 lefdef/doc/defapi/images/omega.gif create mode 100644 lefdef/doc/defapi/images/omega1.gif create mode 100644 lefdef/doc/defapi/images/omicron.gif create mode 100644 lefdef/doc/defapi/images/pareltbt.gif create mode 100644 lefdef/doc/defapi/images/parelttp.gif create mode 100644 lefdef/doc/defapi/images/parertbt.gif create mode 100644 lefdef/doc/defapi/images/parerttp.gif create mode 100644 lefdef/doc/defapi/images/partldif.gif create mode 100644 lefdef/doc/defapi/images/perpend.gif create mode 100644 lefdef/doc/defapi/images/phi.gif create mode 100644 lefdef/doc/defapi/images/phi1.gif create mode 100644 lefdef/doc/defapi/images/pi.gif create mode 100644 lefdef/doc/defapi/images/product.gif create mode 100644 lefdef/doc/defapi/images/proportn.gif create mode 100644 lefdef/doc/defapi/images/prsprset.gif create mode 100644 lefdef/doc/defapi/images/prsubset.gif create mode 100644 lefdef/doc/defapi/images/psi.gif create mode 100644 lefdef/doc/defapi/images/radical.gif create mode 100644 lefdef/doc/defapi/images/refsbset.gif create mode 100644 lefdef/doc/defapi/images/refspset.gif create mode 100644 lefdef/doc/defapi/images/rfraktur.gif create mode 100644 lefdef/doc/defapi/images/rho.gif create mode 100644 lefdef/doc/defapi/images/second.gif create mode 100644 lefdef/doc/defapi/images/sigma.gif create mode 100644 lefdef/doc/defapi/images/sigma1.gif create mode 100644 lefdef/doc/defapi/images/spade.gif create mode 100644 lefdef/doc/defapi/images/suchthat.gif create mode 100644 lefdef/doc/defapi/images/sumation.gif create mode 100644 lefdef/doc/defapi/images/tau.gif create mode 100644 lefdef/doc/defapi/images/therefor.gif create mode 100644 lefdef/doc/defapi/images/theta.gif create mode 100644 lefdef/doc/defapi/images/theta1.gif create mode 100644 lefdef/doc/defapi/images/tip.gif create mode 100644 lefdef/doc/defapi/images/tm.gif create mode 100644 lefdef/doc/defapi/images/union.gif create mode 100644 lefdef/doc/defapi/images/univrsal.gif create mode 100644 lefdef/doc/defapi/images/upsilon.gif create mode 100644 lefdef/doc/defapi/images/upsilon1.gif create mode 100644 lefdef/doc/defapi/images/video.gif create mode 100644 lefdef/doc/defapi/images/weierstr.gif create mode 100644 lefdef/doc/defapi/images/xi.gif create mode 100644 lefdef/doc/defapi/images/zeta.gif create mode 100644 lefdef/doc/defapi/preface.html create mode 100644 lefdef/doc/defapi/titlecopy.html create mode 100644 lefdef/doc/defapiWN/ChangedFeatures.html create mode 100644 lefdef/doc/defapiWN/NewFeatures.html create mode 100644 lefdef/doc/defapiWN/defapiWN.pdf create mode 100644 lefdef/doc/defapiWN/defapiWNTOC.html create mode 100644 lefdef/doc/defapiWN/images/Diamond.gif create mode 100644 lefdef/doc/defapiWN/images/Diamond1.gif create mode 100644 lefdef/doc/defapiWN/images/Diamond12.gif create mode 100644 lefdef/doc/defapiWN/images/Thumbs.db create mode 100644 lefdef/doc/defapiWN/images/aleph.gif create mode 100644 lefdef/doc/defapiWN/images/alpha.gif create mode 100644 lefdef/doc/defapiWN/images/ampersnd.gif create mode 100644 lefdef/doc/defapiWN/images/angle.gif create mode 100644 lefdef/doc/defapiWN/images/anglleft.gif create mode 100644 lefdef/doc/defapiWN/images/anglrite.gif create mode 100644 lefdef/doc/defapiWN/images/approx.gif create mode 100644 lefdef/doc/defapiWN/images/arrwboth.gif create mode 100644 lefdef/doc/defapiWN/images/arrwdbbo.gif create mode 100644 lefdef/doc/defapiWN/images/arrwdbdn.gif create mode 100644 lefdef/doc/defapiWN/images/arrwdblt.gif create mode 100644 lefdef/doc/defapiWN/images/arrwdbrt.gif create mode 100644 lefdef/doc/defapiWN/images/arrwdbup.gif create mode 100644 lefdef/doc/defapiWN/images/arrwdown.gif create mode 100644 lefdef/doc/defapiWN/images/arrwleft.gif create mode 100644 lefdef/doc/defapiWN/images/arrwrite.gif create mode 100644 lefdef/doc/defapiWN/images/arrwup.gif create mode 100644 lefdef/doc/defapiWN/images/arrwvert.gif create mode 100644 lefdef/doc/defapiWN/images/b_bullet.gif create mode 100644 lefdef/doc/defapiWN/images/beta.gif create mode 100644 lefdef/doc/defapiWN/images/blank.gif create mode 100644 lefdef/doc/defapiWN/images/bracltbt.gif create mode 100644 lefdef/doc/defapiWN/images/bracltmd.gif create mode 100644 lefdef/doc/defapiWN/images/braclttp.gif create mode 100644 lefdef/doc/defapiWN/images/bracrtbt.gif create mode 100644 lefdef/doc/defapiWN/images/bracrtmd.gif create mode 100644 lefdef/doc/defapiWN/images/bracrttp.gif create mode 100644 lefdef/doc/defapiWN/images/brakltbt.gif create mode 100644 lefdef/doc/defapiWN/images/braklttp.gif create mode 100644 lefdef/doc/defapiWN/images/brakmidl.gif create mode 100644 lefdef/doc/defapiWN/images/brakrtbt.gif create mode 100644 lefdef/doc/defapiWN/images/brakrttp.gif create mode 100644 lefdef/doc/defapiWN/images/bs_bullet_sub.gif create mode 100644 lefdef/doc/defapiWN/images/bss_bullet_sub_sub.gif create mode 100644 lefdef/doc/defapiWN/images/bullet.gif create mode 100644 lefdef/doc/defapiWN/images/capalpha.gif create mode 100644 lefdef/doc/defapiWN/images/capbeta.gif create mode 100644 lefdef/doc/defapiWN/images/capchi.gif create mode 100644 lefdef/doc/defapiWN/images/capdelta.gif create mode 100644 lefdef/doc/defapiWN/images/capepsil.gif create mode 100644 lefdef/doc/defapiWN/images/capeta.gif create mode 100644 lefdef/doc/defapiWN/images/capgamma.gif create mode 100644 lefdef/doc/defapiWN/images/capiota.gif create mode 100644 lefdef/doc/defapiWN/images/capkappa.gif create mode 100644 lefdef/doc/defapiWN/images/caplambd.gif create mode 100644 lefdef/doc/defapiWN/images/capmu.gif create mode 100644 lefdef/doc/defapiWN/images/capnu.gif create mode 100644 lefdef/doc/defapiWN/images/capomega.gif create mode 100644 lefdef/doc/defapiWN/images/capomicr.gif create mode 100644 lefdef/doc/defapiWN/images/capphi.gif create mode 100644 lefdef/doc/defapiWN/images/cappi.gif create mode 100644 lefdef/doc/defapiWN/images/cappsi.gif create mode 100644 lefdef/doc/defapiWN/images/caprho.gif create mode 100644 lefdef/doc/defapiWN/images/capsigma.gif create mode 100644 lefdef/doc/defapiWN/images/captau.gif create mode 100644 lefdef/doc/defapiWN/images/captheta.gif create mode 100644 lefdef/doc/defapiWN/images/capupsil.gif create mode 100644 lefdef/doc/defapiWN/images/capxi.gif create mode 100644 lefdef/doc/defapiWN/images/capzeta.gif create mode 100644 lefdef/doc/defapiWN/images/carretrn.gif create mode 100644 lefdef/doc/defapiWN/images/caution.gif create mode 100644 lefdef/doc/defapiWN/images/chi.gif create mode 100644 lefdef/doc/defapiWN/images/circmult.gif create mode 100644 lefdef/doc/defapiWN/images/circplus.gif create mode 100644 lefdef/doc/defapiWN/images/club.gif create mode 100644 lefdef/doc/defapiWN/images/congrunt.gif create mode 100644 lefdef/doc/defapiWN/images/delta.gif create mode 100644 lefdef/doc/defapiWN/images/draft.gif create mode 100644 lefdef/doc/defapiWN/images/element.gif create mode 100644 lefdef/doc/defapiWN/images/emptyset.gif create mode 100644 lefdef/doc/defapiWN/images/epsilon.gif create mode 100644 lefdef/doc/defapiWN/images/epsilon1.gif create mode 100644 lefdef/doc/defapiWN/images/equivlnt.gif create mode 100644 lefdef/doc/defapiWN/images/eta.gif create mode 100644 lefdef/doc/defapiWN/images/existntl.gif create mode 100644 lefdef/doc/defapiWN/images/gamma.gif create mode 100644 lefdef/doc/defapiWN/images/gradient.gif create mode 100644 lefdef/doc/defapiWN/images/gtequal.gif create mode 100644 lefdef/doc/defapiWN/images/header_doc.gif create mode 100644 lefdef/doc/defapiWN/images/heart.gif create mode 100644 lefdef/doc/defapiWN/images/ifraktur.gif create mode 100644 lefdef/doc/defapiWN/images/important.gif create mode 100644 lefdef/doc/defapiWN/images/infinity.gif create mode 100644 lefdef/doc/defapiWN/images/integbot.gif create mode 100644 lefdef/doc/defapiWN/images/integral.gif create mode 100644 lefdef/doc/defapiWN/images/integtop.gif create mode 100644 lefdef/doc/defapiWN/images/intrsect.gif create mode 100644 lefdef/doc/defapiWN/images/iota.gif create mode 100644 lefdef/doc/defapiWN/images/kappa.gif create mode 100644 lefdef/doc/defapiWN/images/lambda.gif create mode 100644 lefdef/doc/defapiWN/images/logic_or.gif create mode 100644 lefdef/doc/defapiWN/images/logicand.gif create mode 100644 lefdef/doc/defapiWN/images/lozenge.gif create mode 100644 lefdef/doc/defapiWN/images/lt_equal.gif create mode 100644 lefdef/doc/defapiWN/images/nav2_index.gif create mode 100644 lefdef/doc/defapiWN/images/nav2_index_b.gif create mode 100644 lefdef/doc/defapiWN/images/nav2_next_b.gif create mode 100644 lefdef/doc/defapiWN/images/nav2_previous.gif create mode 100644 lefdef/doc/defapiWN/images/nav2_previous_b.gif create mode 100644 lefdef/doc/defapiWN/images/nav2_print.gif create mode 100644 lefdef/doc/defapiWN/images/nav2_toc.gif create mode 100644 lefdef/doc/defapiWN/images/nav2_toc_b.gif create mode 100644 lefdef/doc/defapiWN/images/nav_next.gif create mode 100644 lefdef/doc/defapiWN/images/nav_next_b.gif create mode 100644 lefdef/doc/defapiWN/images/notelemn.gif create mode 100644 lefdef/doc/defapiWN/images/notequal.gif create mode 100644 lefdef/doc/defapiWN/images/notsbset.gif create mode 100644 lefdef/doc/defapiWN/images/nu.gif create mode 100644 lefdef/doc/defapiWN/images/omega.gif create mode 100644 lefdef/doc/defapiWN/images/omega1.gif create mode 100644 lefdef/doc/defapiWN/images/omicron.gif create mode 100644 lefdef/doc/defapiWN/images/pareltbt.gif create mode 100644 lefdef/doc/defapiWN/images/parelttp.gif create mode 100644 lefdef/doc/defapiWN/images/parertbt.gif create mode 100644 lefdef/doc/defapiWN/images/parerttp.gif create mode 100644 lefdef/doc/defapiWN/images/partldif.gif create mode 100644 lefdef/doc/defapiWN/images/perpend.gif create mode 100644 lefdef/doc/defapiWN/images/phi.gif create mode 100644 lefdef/doc/defapiWN/images/phi1.gif create mode 100644 lefdef/doc/defapiWN/images/pi.gif create mode 100644 lefdef/doc/defapiWN/images/product.gif create mode 100644 lefdef/doc/defapiWN/images/proportn.gif create mode 100644 lefdef/doc/defapiWN/images/prsprset.gif create mode 100644 lefdef/doc/defapiWN/images/prsubset.gif create mode 100644 lefdef/doc/defapiWN/images/psi.gif create mode 100644 lefdef/doc/defapiWN/images/radical.gif create mode 100644 lefdef/doc/defapiWN/images/refsbset.gif create mode 100644 lefdef/doc/defapiWN/images/refspset.gif create mode 100644 lefdef/doc/defapiWN/images/rfraktur.gif create mode 100644 lefdef/doc/defapiWN/images/rho.gif create mode 100644 lefdef/doc/defapiWN/images/second.gif create mode 100644 lefdef/doc/defapiWN/images/sigma.gif create mode 100644 lefdef/doc/defapiWN/images/sigma1.gif create mode 100644 lefdef/doc/defapiWN/images/spade.gif create mode 100644 lefdef/doc/defapiWN/images/suchthat.gif create mode 100644 lefdef/doc/defapiWN/images/sumation.gif create mode 100644 lefdef/doc/defapiWN/images/tau.gif create mode 100644 lefdef/doc/defapiWN/images/therefor.gif create mode 100644 lefdef/doc/defapiWN/images/theta.gif create mode 100644 lefdef/doc/defapiWN/images/theta1.gif create mode 100644 lefdef/doc/defapiWN/images/tip.gif create mode 100644 lefdef/doc/defapiWN/images/tm.gif create mode 100644 lefdef/doc/defapiWN/images/union.gif create mode 100644 lefdef/doc/defapiWN/images/univrsal.gif create mode 100644 lefdef/doc/defapiWN/images/upsilon.gif create mode 100644 lefdef/doc/defapiWN/images/upsilon1.gif create mode 100644 lefdef/doc/defapiWN/images/video.gif create mode 100644 lefdef/doc/defapiWN/images/weierstr.gif create mode 100644 lefdef/doc/defapiWN/images/xi.gif create mode 100644 lefdef/doc/defapiWN/images/zeta.gif create mode 100644 lefdef/doc/defapiWN/preface.html create mode 100644 lefdef/doc/defapiWN/titlecopy.html create mode 100644 lefdef/doc/lefapi/appA_LEFexamples.html create mode 100644 lefdef/doc/lefapi/ch1Intro.html create mode 100644 lefdef/doc/lefapi/ch2LEFsetup.html create mode 100644 lefdef/doc/lefapi/ch3LEFcallback.html create mode 100644 lefdef/doc/lefapi/ch4LEFclasses.html create mode 100644 lefdef/doc/lefapi/ch5LEFwritercallback.html create mode 100644 lefdef/doc/lefapi/ch6LEFwriter.html create mode 100644 lefdef/doc/lefapi/ch7LEFcompressed.html create mode 100644 lefdef/doc/lefapi/ch8lefdiff.html create mode 100644 lefdef/doc/lefapi/images/Diamond.gif create mode 100644 lefdef/doc/lefapi/images/Diamond1.gif create mode 100644 lefdef/doc/lefapi/images/Diamond12.gif create mode 100644 lefdef/doc/lefapi/images/Thumbs.db create mode 100644 lefdef/doc/lefapi/images/aleph.gif create mode 100644 lefdef/doc/lefapi/images/alpha.gif create mode 100644 lefdef/doc/lefapi/images/ampersnd.gif create mode 100644 lefdef/doc/lefapi/images/angle.gif create mode 100644 lefdef/doc/lefapi/images/anglleft.gif create mode 100644 lefdef/doc/lefapi/images/anglrite.gif create mode 100644 lefdef/doc/lefapi/images/approx.gif create mode 100644 lefdef/doc/lefapi/images/arrwboth.gif create mode 100644 lefdef/doc/lefapi/images/arrwdbbo.gif create mode 100644 lefdef/doc/lefapi/images/arrwdbdn.gif create mode 100644 lefdef/doc/lefapi/images/arrwdblt.gif create mode 100644 lefdef/doc/lefapi/images/arrwdbrt.gif create mode 100644 lefdef/doc/lefapi/images/arrwdbup.gif create mode 100644 lefdef/doc/lefapi/images/arrwdown.gif create mode 100644 lefdef/doc/lefapi/images/arrwleft.gif create mode 100644 lefdef/doc/lefapi/images/arrwrite.gif create mode 100644 lefdef/doc/lefapi/images/arrwup.gif create mode 100644 lefdef/doc/lefapi/images/arrwvert.gif create mode 100644 lefdef/doc/lefapi/images/b_bullet.gif create mode 100644 lefdef/doc/lefapi/images/beta.gif create mode 100644 lefdef/doc/lefapi/images/blank.gif create mode 100644 lefdef/doc/lefapi/images/bracltbt.gif create mode 100644 lefdef/doc/lefapi/images/bracltmd.gif create mode 100644 lefdef/doc/lefapi/images/braclttp.gif create mode 100644 lefdef/doc/lefapi/images/bracrtbt.gif create mode 100644 lefdef/doc/lefapi/images/bracrtmd.gif create mode 100644 lefdef/doc/lefapi/images/bracrttp.gif create mode 100644 lefdef/doc/lefapi/images/brakltbt.gif create mode 100644 lefdef/doc/lefapi/images/braklttp.gif create mode 100644 lefdef/doc/lefapi/images/brakmidl.gif create mode 100644 lefdef/doc/lefapi/images/brakrtbt.gif create mode 100644 lefdef/doc/lefapi/images/brakrttp.gif create mode 100644 lefdef/doc/lefapi/images/bs_bullet_sub.gif create mode 100644 lefdef/doc/lefapi/images/bss_bullet_sub_sub.gif create mode 100644 lefdef/doc/lefapi/images/bullet.gif create mode 100644 lefdef/doc/lefapi/images/capalpha.gif create mode 100644 lefdef/doc/lefapi/images/capbeta.gif create mode 100644 lefdef/doc/lefapi/images/capchi.gif create mode 100644 lefdef/doc/lefapi/images/capdelta.gif create mode 100644 lefdef/doc/lefapi/images/capepsil.gif create mode 100644 lefdef/doc/lefapi/images/capeta.gif create mode 100644 lefdef/doc/lefapi/images/capgamma.gif create mode 100644 lefdef/doc/lefapi/images/capiota.gif create mode 100644 lefdef/doc/lefapi/images/capkappa.gif create mode 100644 lefdef/doc/lefapi/images/caplambd.gif create mode 100644 lefdef/doc/lefapi/images/capmu.gif create mode 100644 lefdef/doc/lefapi/images/capnu.gif create mode 100644 lefdef/doc/lefapi/images/capomega.gif create mode 100644 lefdef/doc/lefapi/images/capomicr.gif create mode 100644 lefdef/doc/lefapi/images/capphi.gif create mode 100644 lefdef/doc/lefapi/images/cappi.gif create mode 100644 lefdef/doc/lefapi/images/cappsi.gif create mode 100644 lefdef/doc/lefapi/images/caprho.gif create mode 100644 lefdef/doc/lefapi/images/capsigma.gif create mode 100644 lefdef/doc/lefapi/images/captau.gif create mode 100644 lefdef/doc/lefapi/images/captheta.gif create mode 100644 lefdef/doc/lefapi/images/capupsil.gif create mode 100644 lefdef/doc/lefapi/images/capxi.gif create mode 100644 lefdef/doc/lefapi/images/capzeta.gif create mode 100644 lefdef/doc/lefapi/images/carretrn.gif create mode 100644 lefdef/doc/lefapi/images/caution.gif create mode 100644 lefdef/doc/lefapi/images/ch1Intro.04.1.1.png create mode 100644 lefdef/doc/lefapi/images/chi.gif create mode 100644 lefdef/doc/lefapi/images/circmult.gif create mode 100644 lefdef/doc/lefapi/images/circplus.gif create mode 100644 lefdef/doc/lefapi/images/club.gif create mode 100644 lefdef/doc/lefapi/images/congrunt.gif create mode 100644 lefdef/doc/lefapi/images/delta.gif create mode 100644 lefdef/doc/lefapi/images/draft.gif create mode 100644 lefdef/doc/lefapi/images/element.gif create mode 100644 lefdef/doc/lefapi/images/emptyset.gif create mode 100644 lefdef/doc/lefapi/images/epsilon.gif create mode 100644 lefdef/doc/lefapi/images/epsilon1.gif create mode 100644 lefdef/doc/lefapi/images/equivlnt.gif create mode 100644 lefdef/doc/lefapi/images/eta.gif create mode 100644 lefdef/doc/lefapi/images/existntl.gif create mode 100644 lefdef/doc/lefapi/images/gamma.gif create mode 100644 lefdef/doc/lefapi/images/gradient.gif create mode 100644 lefdef/doc/lefapi/images/gtequal.gif create mode 100644 lefdef/doc/lefapi/images/header_doc.gif create mode 100644 lefdef/doc/lefapi/images/heart.gif create mode 100644 lefdef/doc/lefapi/images/ifraktur.gif create mode 100644 lefdef/doc/lefapi/images/important.gif create mode 100644 lefdef/doc/lefapi/images/infinity.gif create mode 100644 lefdef/doc/lefapi/images/integbot.gif create mode 100644 lefdef/doc/lefapi/images/integral.gif create mode 100644 lefdef/doc/lefapi/images/integtop.gif create mode 100644 lefdef/doc/lefapi/images/intrsect.gif create mode 100644 lefdef/doc/lefapi/images/iota.gif create mode 100644 lefdef/doc/lefapi/images/kappa.gif create mode 100644 lefdef/doc/lefapi/images/lambda.gif create mode 100644 lefdef/doc/lefapi/images/logic_or.gif create mode 100644 lefdef/doc/lefapi/images/logicand.gif create mode 100644 lefdef/doc/lefapi/images/lozenge.gif create mode 100644 lefdef/doc/lefapi/images/lt_equal.gif create mode 100644 lefdef/doc/lefapi/images/nav2_index.gif create mode 100644 lefdef/doc/lefapi/images/nav2_index_b.gif create mode 100644 lefdef/doc/lefapi/images/nav2_next_b.gif create mode 100644 lefdef/doc/lefapi/images/nav2_previous.gif create mode 100644 lefdef/doc/lefapi/images/nav2_previous_b.gif create mode 100644 lefdef/doc/lefapi/images/nav2_print.gif create mode 100644 lefdef/doc/lefapi/images/nav2_toc.gif create mode 100644 lefdef/doc/lefapi/images/nav2_toc_b.gif create mode 100644 lefdef/doc/lefapi/images/nav_next.gif create mode 100644 lefdef/doc/lefapi/images/nav_next_b.gif create mode 100644 lefdef/doc/lefapi/images/notelemn.gif create mode 100644 lefdef/doc/lefapi/images/notequal.gif create mode 100644 lefdef/doc/lefapi/images/notsbset.gif create mode 100644 lefdef/doc/lefapi/images/nu.gif create mode 100644 lefdef/doc/lefapi/images/omega.gif create mode 100644 lefdef/doc/lefapi/images/omega1.gif create mode 100644 lefdef/doc/lefapi/images/omicron.gif create mode 100644 lefdef/doc/lefapi/images/pareltbt.gif create mode 100644 lefdef/doc/lefapi/images/parelttp.gif create mode 100644 lefdef/doc/lefapi/images/parertbt.gif create mode 100644 lefdef/doc/lefapi/images/parerttp.gif create mode 100644 lefdef/doc/lefapi/images/partldif.gif create mode 100644 lefdef/doc/lefapi/images/perpend.gif create mode 100644 lefdef/doc/lefapi/images/phi.gif create mode 100644 lefdef/doc/lefapi/images/phi1.gif create mode 100644 lefdef/doc/lefapi/images/pi.gif create mode 100644 lefdef/doc/lefapi/images/product.gif create mode 100644 lefdef/doc/lefapi/images/proportn.gif create mode 100644 lefdef/doc/lefapi/images/prsprset.gif create mode 100644 lefdef/doc/lefapi/images/prsubset.gif create mode 100644 lefdef/doc/lefapi/images/psi.gif create mode 100644 lefdef/doc/lefapi/images/radical.gif create mode 100644 lefdef/doc/lefapi/images/refsbset.gif create mode 100644 lefdef/doc/lefapi/images/refspset.gif create mode 100644 lefdef/doc/lefapi/images/rfraktur.gif create mode 100644 lefdef/doc/lefapi/images/rho.gif create mode 100644 lefdef/doc/lefapi/images/second.gif create mode 100644 lefdef/doc/lefapi/images/sigma.gif create mode 100644 lefdef/doc/lefapi/images/sigma1.gif create mode 100644 lefdef/doc/lefapi/images/spade.gif create mode 100644 lefdef/doc/lefapi/images/suchthat.gif create mode 100644 lefdef/doc/lefapi/images/sumation.gif create mode 100644 lefdef/doc/lefapi/images/tau.gif create mode 100644 lefdef/doc/lefapi/images/therefor.gif create mode 100644 lefdef/doc/lefapi/images/theta.gif create mode 100644 lefdef/doc/lefapi/images/theta1.gif create mode 100644 lefdef/doc/lefapi/images/tip.gif create mode 100644 lefdef/doc/lefapi/images/tm.gif create mode 100644 lefdef/doc/lefapi/images/union.gif create mode 100644 lefdef/doc/lefapi/images/univrsal.gif create mode 100644 lefdef/doc/lefapi/images/upsilon.gif create mode 100644 lefdef/doc/lefapi/images/upsilon1.gif create mode 100644 lefdef/doc/lefapi/images/video.gif create mode 100644 lefdef/doc/lefapi/images/weierstr.gif create mode 100644 lefdef/doc/lefapi/images/xi.gif create mode 100644 lefdef/doc/lefapi/images/zeta.gif create mode 100644 lefdef/doc/lefapi/lefapi.pdf create mode 100644 lefdef/doc/lefapi/lefapiTOC.html create mode 100644 lefdef/doc/lefapi/preface.html create mode 100644 lefdef/doc/lefapi/titlecopy.html create mode 100644 lefdef/doc/lefapiWN/ChangedFeatures.html create mode 100644 lefdef/doc/lefapiWN/NewFeatures.html create mode 100644 lefdef/doc/lefapiWN/images/Diamond.gif create mode 100644 lefdef/doc/lefapiWN/images/Diamond1.gif create mode 100644 lefdef/doc/lefapiWN/images/Diamond12.gif create mode 100644 lefdef/doc/lefapiWN/images/Thumbs.db create mode 100644 lefdef/doc/lefapiWN/images/aleph.gif create mode 100644 lefdef/doc/lefapiWN/images/alpha.gif create mode 100644 lefdef/doc/lefapiWN/images/ampersnd.gif create mode 100644 lefdef/doc/lefapiWN/images/angle.gif create mode 100644 lefdef/doc/lefapiWN/images/anglleft.gif create mode 100644 lefdef/doc/lefapiWN/images/anglrite.gif create mode 100644 lefdef/doc/lefapiWN/images/approx.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwboth.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwdbbo.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwdbdn.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwdblt.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwdbrt.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwdbup.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwdown.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwleft.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwrite.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwup.gif create mode 100644 lefdef/doc/lefapiWN/images/arrwvert.gif create mode 100644 lefdef/doc/lefapiWN/images/b_bullet.gif create mode 100644 lefdef/doc/lefapiWN/images/beta.gif create mode 100644 lefdef/doc/lefapiWN/images/blank.gif create mode 100644 lefdef/doc/lefapiWN/images/bracltbt.gif create mode 100644 lefdef/doc/lefapiWN/images/bracltmd.gif create mode 100644 lefdef/doc/lefapiWN/images/braclttp.gif create mode 100644 lefdef/doc/lefapiWN/images/bracrtbt.gif create mode 100644 lefdef/doc/lefapiWN/images/bracrtmd.gif create mode 100644 lefdef/doc/lefapiWN/images/bracrttp.gif create mode 100644 lefdef/doc/lefapiWN/images/brakltbt.gif create mode 100644 lefdef/doc/lefapiWN/images/braklttp.gif create mode 100644 lefdef/doc/lefapiWN/images/brakmidl.gif create mode 100644 lefdef/doc/lefapiWN/images/brakrtbt.gif create mode 100644 lefdef/doc/lefapiWN/images/brakrttp.gif create mode 100644 lefdef/doc/lefapiWN/images/bs_bullet_sub.gif create mode 100644 lefdef/doc/lefapiWN/images/bss_bullet_sub_sub.gif create mode 100644 lefdef/doc/lefapiWN/images/bullet.gif create mode 100644 lefdef/doc/lefapiWN/images/capalpha.gif create mode 100644 lefdef/doc/lefapiWN/images/capbeta.gif create mode 100644 lefdef/doc/lefapiWN/images/capchi.gif create mode 100644 lefdef/doc/lefapiWN/images/capdelta.gif create mode 100644 lefdef/doc/lefapiWN/images/capepsil.gif create mode 100644 lefdef/doc/lefapiWN/images/capeta.gif create mode 100644 lefdef/doc/lefapiWN/images/capgamma.gif create mode 100644 lefdef/doc/lefapiWN/images/capiota.gif create mode 100644 lefdef/doc/lefapiWN/images/capkappa.gif create mode 100644 lefdef/doc/lefapiWN/images/caplambd.gif create mode 100644 lefdef/doc/lefapiWN/images/capmu.gif create mode 100644 lefdef/doc/lefapiWN/images/capnu.gif create mode 100644 lefdef/doc/lefapiWN/images/capomega.gif create mode 100644 lefdef/doc/lefapiWN/images/capomicr.gif create mode 100644 lefdef/doc/lefapiWN/images/capphi.gif create mode 100644 lefdef/doc/lefapiWN/images/cappi.gif create mode 100644 lefdef/doc/lefapiWN/images/cappsi.gif create mode 100644 lefdef/doc/lefapiWN/images/caprho.gif create mode 100644 lefdef/doc/lefapiWN/images/capsigma.gif create mode 100644 lefdef/doc/lefapiWN/images/captau.gif create mode 100644 lefdef/doc/lefapiWN/images/captheta.gif create mode 100644 lefdef/doc/lefapiWN/images/capupsil.gif create mode 100644 lefdef/doc/lefapiWN/images/capxi.gif create mode 100644 lefdef/doc/lefapiWN/images/capzeta.gif create mode 100644 lefdef/doc/lefapiWN/images/carretrn.gif create mode 100644 lefdef/doc/lefapiWN/images/caution.gif create mode 100644 lefdef/doc/lefapiWN/images/chi.gif create mode 100644 lefdef/doc/lefapiWN/images/circmult.gif create mode 100644 lefdef/doc/lefapiWN/images/circplus.gif create mode 100644 lefdef/doc/lefapiWN/images/club.gif create mode 100644 lefdef/doc/lefapiWN/images/congrunt.gif create mode 100644 lefdef/doc/lefapiWN/images/delta.gif create mode 100644 lefdef/doc/lefapiWN/images/draft.gif create mode 100644 lefdef/doc/lefapiWN/images/element.gif create mode 100644 lefdef/doc/lefapiWN/images/emptyset.gif create mode 100644 lefdef/doc/lefapiWN/images/epsilon.gif create mode 100644 lefdef/doc/lefapiWN/images/epsilon1.gif create mode 100644 lefdef/doc/lefapiWN/images/equivlnt.gif create mode 100644 lefdef/doc/lefapiWN/images/eta.gif create mode 100644 lefdef/doc/lefapiWN/images/existntl.gif create mode 100644 lefdef/doc/lefapiWN/images/gamma.gif create mode 100644 lefdef/doc/lefapiWN/images/gradient.gif create mode 100644 lefdef/doc/lefapiWN/images/gtequal.gif create mode 100644 lefdef/doc/lefapiWN/images/header_doc.gif create mode 100644 lefdef/doc/lefapiWN/images/heart.gif create mode 100644 lefdef/doc/lefapiWN/images/ifraktur.gif create mode 100644 lefdef/doc/lefapiWN/images/important.gif create mode 100644 lefdef/doc/lefapiWN/images/infinity.gif create mode 100644 lefdef/doc/lefapiWN/images/integbot.gif create mode 100644 lefdef/doc/lefapiWN/images/integral.gif create mode 100644 lefdef/doc/lefapiWN/images/integtop.gif create mode 100644 lefdef/doc/lefapiWN/images/intrsect.gif create mode 100644 lefdef/doc/lefapiWN/images/iota.gif create mode 100644 lefdef/doc/lefapiWN/images/kappa.gif create mode 100644 lefdef/doc/lefapiWN/images/lambda.gif create mode 100644 lefdef/doc/lefapiWN/images/logic_or.gif create mode 100644 lefdef/doc/lefapiWN/images/logicand.gif create mode 100644 lefdef/doc/lefapiWN/images/lozenge.gif create mode 100644 lefdef/doc/lefapiWN/images/lt_equal.gif create mode 100644 lefdef/doc/lefapiWN/images/nav2_index.gif create mode 100644 lefdef/doc/lefapiWN/images/nav2_index_b.gif create mode 100644 lefdef/doc/lefapiWN/images/nav2_next_b.gif create mode 100644 lefdef/doc/lefapiWN/images/nav2_previous.gif create mode 100644 lefdef/doc/lefapiWN/images/nav2_previous_b.gif create mode 100644 lefdef/doc/lefapiWN/images/nav2_print.gif create mode 100644 lefdef/doc/lefapiWN/images/nav2_toc.gif create mode 100644 lefdef/doc/lefapiWN/images/nav2_toc_b.gif create mode 100644 lefdef/doc/lefapiWN/images/nav_next.gif create mode 100644 lefdef/doc/lefapiWN/images/nav_next_b.gif create mode 100644 lefdef/doc/lefapiWN/images/notelemn.gif create mode 100644 lefdef/doc/lefapiWN/images/notequal.gif create mode 100644 lefdef/doc/lefapiWN/images/notsbset.gif create mode 100644 lefdef/doc/lefapiWN/images/nu.gif create mode 100644 lefdef/doc/lefapiWN/images/omega.gif create mode 100644 lefdef/doc/lefapiWN/images/omega1.gif create mode 100644 lefdef/doc/lefapiWN/images/omicron.gif create mode 100644 lefdef/doc/lefapiWN/images/pareltbt.gif create mode 100644 lefdef/doc/lefapiWN/images/parelttp.gif create mode 100644 lefdef/doc/lefapiWN/images/parertbt.gif create mode 100644 lefdef/doc/lefapiWN/images/parerttp.gif create mode 100644 lefdef/doc/lefapiWN/images/partldif.gif create mode 100644 lefdef/doc/lefapiWN/images/perpend.gif create mode 100644 lefdef/doc/lefapiWN/images/phi.gif create mode 100644 lefdef/doc/lefapiWN/images/phi1.gif create mode 100644 lefdef/doc/lefapiWN/images/pi.gif create mode 100644 lefdef/doc/lefapiWN/images/product.gif create mode 100644 lefdef/doc/lefapiWN/images/proportn.gif create mode 100644 lefdef/doc/lefapiWN/images/prsprset.gif create mode 100644 lefdef/doc/lefapiWN/images/prsubset.gif create mode 100644 lefdef/doc/lefapiWN/images/psi.gif create mode 100644 lefdef/doc/lefapiWN/images/radical.gif create mode 100644 lefdef/doc/lefapiWN/images/refsbset.gif create mode 100644 lefdef/doc/lefapiWN/images/refspset.gif create mode 100644 lefdef/doc/lefapiWN/images/rfraktur.gif create mode 100644 lefdef/doc/lefapiWN/images/rho.gif create mode 100644 lefdef/doc/lefapiWN/images/second.gif create mode 100644 lefdef/doc/lefapiWN/images/sigma.gif create mode 100644 lefdef/doc/lefapiWN/images/sigma1.gif create mode 100644 lefdef/doc/lefapiWN/images/spade.gif create mode 100644 lefdef/doc/lefapiWN/images/suchthat.gif create mode 100644 lefdef/doc/lefapiWN/images/sumation.gif create mode 100644 lefdef/doc/lefapiWN/images/tau.gif create mode 100644 lefdef/doc/lefapiWN/images/therefor.gif create mode 100644 lefdef/doc/lefapiWN/images/theta.gif create mode 100644 lefdef/doc/lefapiWN/images/theta1.gif create mode 100644 lefdef/doc/lefapiWN/images/tip.gif create mode 100644 lefdef/doc/lefapiWN/images/tm.gif create mode 100644 lefdef/doc/lefapiWN/images/union.gif create mode 100644 lefdef/doc/lefapiWN/images/univrsal.gif create mode 100644 lefdef/doc/lefapiWN/images/upsilon.gif create mode 100644 lefdef/doc/lefapiWN/images/upsilon1.gif create mode 100644 lefdef/doc/lefapiWN/images/video.gif create mode 100644 lefdef/doc/lefapiWN/images/weierstr.gif create mode 100644 lefdef/doc/lefapiWN/images/xi.gif create mode 100644 lefdef/doc/lefapiWN/images/zeta.gif create mode 100644 lefdef/doc/lefapiWN/lefapiWN.pdf create mode 100644 lefdef/doc/lefapiWN/lefapiWNTOC.html create mode 100644 lefdef/doc/lefapiWN/preface.html create mode 100644 lefdef/doc/lefapiWN/titlecopy.html create mode 100644 lefdef/doc/lefdefWN/NewFeatures.html create mode 100644 lefdef/doc/lefdefWN/Preface.html create mode 100644 lefdef/doc/lefdefWN/images/Diamond.gif create mode 100644 lefdef/doc/lefdefWN/images/Diamond1.gif create mode 100644 lefdef/doc/lefdefWN/images/Diamond12.gif create mode 100644 lefdef/doc/lefdefWN/images/Thumbs.db create mode 100644 lefdef/doc/lefdefWN/images/aleph.gif create mode 100644 lefdef/doc/lefdefWN/images/alpha.gif create mode 100644 lefdef/doc/lefdefWN/images/ampersnd.gif create mode 100644 lefdef/doc/lefdefWN/images/angle.gif create mode 100644 lefdef/doc/lefdefWN/images/anglleft.gif create mode 100644 lefdef/doc/lefdefWN/images/anglrite.gif create mode 100644 lefdef/doc/lefdefWN/images/approx.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwboth.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwdbbo.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwdbdn.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwdblt.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwdbrt.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwdbup.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwdown.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwleft.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwrite.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwup.gif create mode 100644 lefdef/doc/lefdefWN/images/arrwvert.gif create mode 100644 lefdef/doc/lefdefWN/images/b_bullet.gif create mode 100644 lefdef/doc/lefdefWN/images/beta.gif create mode 100644 lefdef/doc/lefdefWN/images/blank.gif create mode 100644 lefdef/doc/lefdefWN/images/bracltbt.gif create mode 100644 lefdef/doc/lefdefWN/images/bracltmd.gif create mode 100644 lefdef/doc/lefdefWN/images/braclttp.gif create mode 100644 lefdef/doc/lefdefWN/images/bracrtbt.gif create mode 100644 lefdef/doc/lefdefWN/images/bracrtmd.gif create mode 100644 lefdef/doc/lefdefWN/images/bracrttp.gif create mode 100644 lefdef/doc/lefdefWN/images/brakltbt.gif create mode 100644 lefdef/doc/lefdefWN/images/braklttp.gif create mode 100644 lefdef/doc/lefdefWN/images/brakmidl.gif create mode 100644 lefdef/doc/lefdefWN/images/brakrtbt.gif create mode 100644 lefdef/doc/lefdefWN/images/brakrttp.gif create mode 100644 lefdef/doc/lefdefWN/images/bs_bullet_sub.gif create mode 100644 lefdef/doc/lefdefWN/images/bss_bullet_sub_sub.gif create mode 100644 lefdef/doc/lefdefWN/images/bullet.gif create mode 100644 lefdef/doc/lefdefWN/images/capalpha.gif create mode 100644 lefdef/doc/lefdefWN/images/capbeta.gif create mode 100644 lefdef/doc/lefdefWN/images/capchi.gif create mode 100644 lefdef/doc/lefdefWN/images/capdelta.gif create mode 100644 lefdef/doc/lefdefWN/images/capepsil.gif create mode 100644 lefdef/doc/lefdefWN/images/capeta.gif create mode 100644 lefdef/doc/lefdefWN/images/capgamma.gif create mode 100644 lefdef/doc/lefdefWN/images/capiota.gif create mode 100644 lefdef/doc/lefdefWN/images/capkappa.gif create mode 100644 lefdef/doc/lefdefWN/images/caplambd.gif create mode 100644 lefdef/doc/lefdefWN/images/capmu.gif create mode 100644 lefdef/doc/lefdefWN/images/capnu.gif create mode 100644 lefdef/doc/lefdefWN/images/capomega.gif create mode 100644 lefdef/doc/lefdefWN/images/capomicr.gif create mode 100644 lefdef/doc/lefdefWN/images/capphi.gif create mode 100644 lefdef/doc/lefdefWN/images/cappi.gif create mode 100644 lefdef/doc/lefdefWN/images/cappsi.gif create mode 100644 lefdef/doc/lefdefWN/images/caprho.gif create mode 100644 lefdef/doc/lefdefWN/images/capsigma.gif create mode 100644 lefdef/doc/lefdefWN/images/captau.gif create mode 100644 lefdef/doc/lefdefWN/images/captheta.gif create mode 100644 lefdef/doc/lefdefWN/images/capupsil.gif create mode 100644 lefdef/doc/lefdefWN/images/capxi.gif create mode 100644 lefdef/doc/lefdefWN/images/capzeta.gif create mode 100644 lefdef/doc/lefdefWN/images/carretrn.gif create mode 100644 lefdef/doc/lefdefWN/images/caution.gif create mode 100644 lefdef/doc/lefdefWN/images/chi.gif create mode 100644 lefdef/doc/lefdefWN/images/circmult.gif create mode 100644 lefdef/doc/lefdefWN/images/circplus.gif create mode 100644 lefdef/doc/lefdefWN/images/club.gif create mode 100644 lefdef/doc/lefdefWN/images/congrunt.gif create mode 100644 lefdef/doc/lefdefWN/images/delta.gif create mode 100644 lefdef/doc/lefdefWN/images/draft.gif create mode 100644 lefdef/doc/lefdefWN/images/element.gif create mode 100644 lefdef/doc/lefdefWN/images/emptyset.gif create mode 100644 lefdef/doc/lefdefWN/images/epsilon.gif create mode 100644 lefdef/doc/lefdefWN/images/epsilon1.gif create mode 100644 lefdef/doc/lefdefWN/images/equivlnt.gif create mode 100644 lefdef/doc/lefdefWN/images/eta.gif create mode 100644 lefdef/doc/lefdefWN/images/existntl.gif create mode 100644 lefdef/doc/lefdefWN/images/gamma.gif create mode 100644 lefdef/doc/lefdefWN/images/gradient.gif create mode 100644 lefdef/doc/lefdefWN/images/gtequal.gif create mode 100644 lefdef/doc/lefdefWN/images/header_doc.gif create mode 100644 lefdef/doc/lefdefWN/images/heart.gif create mode 100644 lefdef/doc/lefdefWN/images/ifraktur.gif create mode 100644 lefdef/doc/lefdefWN/images/important.gif create mode 100644 lefdef/doc/lefdefWN/images/infinity.gif create mode 100644 lefdef/doc/lefdefWN/images/integbot.gif create mode 100644 lefdef/doc/lefdefWN/images/integral.gif create mode 100644 lefdef/doc/lefdefWN/images/integtop.gif create mode 100644 lefdef/doc/lefdefWN/images/intrsect.gif create mode 100644 lefdef/doc/lefdefWN/images/iota.gif create mode 100644 lefdef/doc/lefdefWN/images/kappa.gif create mode 100644 lefdef/doc/lefdefWN/images/lambda.gif create mode 100644 lefdef/doc/lefdefWN/images/logic_or.gif create mode 100644 lefdef/doc/lefdefWN/images/logicand.gif create mode 100644 lefdef/doc/lefdefWN/images/lozenge.gif create mode 100644 lefdef/doc/lefdefWN/images/lt_equal.gif create mode 100644 lefdef/doc/lefdefWN/images/nav2_index.gif create mode 100644 lefdef/doc/lefdefWN/images/nav2_index_b.gif create mode 100644 lefdef/doc/lefdefWN/images/nav2_next_b.gif create mode 100644 lefdef/doc/lefdefWN/images/nav2_previous.gif create mode 100644 lefdef/doc/lefdefWN/images/nav2_previous_b.gif create mode 100644 lefdef/doc/lefdefWN/images/nav2_print.gif create mode 100644 lefdef/doc/lefdefWN/images/nav2_toc.gif create mode 100644 lefdef/doc/lefdefWN/images/nav2_toc_b.gif create mode 100644 lefdef/doc/lefdefWN/images/nav_next.gif create mode 100644 lefdef/doc/lefdefWN/images/nav_next_b.gif create mode 100644 lefdef/doc/lefdefWN/images/notelemn.gif create mode 100644 lefdef/doc/lefdefWN/images/notequal.gif create mode 100644 lefdef/doc/lefdefWN/images/notsbset.gif create mode 100644 lefdef/doc/lefdefWN/images/nu.gif create mode 100644 lefdef/doc/lefdefWN/images/omega.gif create mode 100644 lefdef/doc/lefdefWN/images/omega1.gif create mode 100644 lefdef/doc/lefdefWN/images/omicron.gif create mode 100644 lefdef/doc/lefdefWN/images/pareltbt.gif create mode 100644 lefdef/doc/lefdefWN/images/parelttp.gif create mode 100644 lefdef/doc/lefdefWN/images/parertbt.gif create mode 100644 lefdef/doc/lefdefWN/images/parerttp.gif create mode 100644 lefdef/doc/lefdefWN/images/partldif.gif create mode 100644 lefdef/doc/lefdefWN/images/perpend.gif create mode 100644 lefdef/doc/lefdefWN/images/phi.gif create mode 100644 lefdef/doc/lefdefWN/images/phi1.gif create mode 100644 lefdef/doc/lefdefWN/images/pi.gif create mode 100644 lefdef/doc/lefdefWN/images/product.gif create mode 100644 lefdef/doc/lefdefWN/images/proportn.gif create mode 100644 lefdef/doc/lefdefWN/images/prsprset.gif create mode 100644 lefdef/doc/lefdefWN/images/prsubset.gif create mode 100644 lefdef/doc/lefdefWN/images/psi.gif create mode 100644 lefdef/doc/lefdefWN/images/radical.gif create mode 100644 lefdef/doc/lefdefWN/images/refsbset.gif create mode 100644 lefdef/doc/lefdefWN/images/refspset.gif create mode 100644 lefdef/doc/lefdefWN/images/rfraktur.gif create mode 100644 lefdef/doc/lefdefWN/images/rho.gif create mode 100644 lefdef/doc/lefdefWN/images/second.gif create mode 100644 lefdef/doc/lefdefWN/images/sigma.gif create mode 100644 lefdef/doc/lefdefWN/images/sigma1.gif create mode 100644 lefdef/doc/lefdefWN/images/spade.gif create mode 100644 lefdef/doc/lefdefWN/images/suchthat.gif create mode 100644 lefdef/doc/lefdefWN/images/sumation.gif create mode 100644 lefdef/doc/lefdefWN/images/tau.gif create mode 100644 lefdef/doc/lefdefWN/images/therefor.gif create mode 100644 lefdef/doc/lefdefWN/images/theta.gif create mode 100644 lefdef/doc/lefdefWN/images/theta1.gif create mode 100644 lefdef/doc/lefdefWN/images/tip.gif create mode 100644 lefdef/doc/lefdefWN/images/tm.gif create mode 100644 lefdef/doc/lefdefWN/images/union.gif create mode 100644 lefdef/doc/lefdefWN/images/univrsal.gif create mode 100644 lefdef/doc/lefdefWN/images/upsilon.gif create mode 100644 lefdef/doc/lefdefWN/images/upsilon1.gif create mode 100644 lefdef/doc/lefdefWN/images/video.gif create mode 100644 lefdef/doc/lefdefWN/images/weierstr.gif create mode 100644 lefdef/doc/lefdefWN/images/xi.gif create mode 100644 lefdef/doc/lefdefWN/images/zeta.gif create mode 100644 lefdef/doc/lefdefWN/lefdefWN.pdf create mode 100644 lefdef/doc/lefdefWN/lefdefWNTOC.html create mode 100644 lefdef/doc/lefdefWN/titlecopy.html create mode 100644 lefdef/doc/lefdefref/DEFINEandALIAS.html create mode 100644 lefdef/doc/lefdefref/DEFSyntax.html create mode 100644 lefdef/doc/lefdefref/Examples.html create mode 100644 lefdef/doc/lefdefref/LEFSyntax.html create mode 100644 lefdef/doc/lefdefref/OptimizingLEFTechnology.html create mode 100644 lefdef/doc/lefdefref/PAE.html create mode 100644 lefdef/doc/lefdefref/WorkingwithLEF.html create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.01.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.02.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.03.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.04.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.05.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.06.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.07.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.08.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.09.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.10.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.11.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.12.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.13.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.14.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.15.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.16.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.17.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.18.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.19.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.20.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.21.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.22.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.23.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.24.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.25.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.26.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.27.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.28.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.29.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.30.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.31.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.32.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.33.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.34.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.35.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.36.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.37.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.38.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.39.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.40.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.41.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.42.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.43.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.44.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.45.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.46.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.47.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.48.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.49.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.50.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.51.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.52.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.53.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.54.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.55.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.56.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.57.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.58.png create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.59.png create mode 100644 lefdef/doc/lefdefref/images/Diamond.gif create mode 100644 lefdef/doc/lefdefref/images/Diamond1.gif create mode 100644 lefdef/doc/lefdefref/images/Diamond12.gif create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.01.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.02.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.03.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.04.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.05.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.06.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.07.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.08.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.09.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.10.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.11.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.12.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.13.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.14.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.15.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.16.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.17.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.18.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.19.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.20.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.21.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.22.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.23.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.24.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.25.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.26.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.27.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.28.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.29.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.30.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.31.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.32.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.33.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.34.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.35.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.36.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.37.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.38.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.39.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.40.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.41.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.42.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.43.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.44.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.45.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.46.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.47.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.48.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.49.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.50.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.51.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.52.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.53.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.54.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.55.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.56.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.57.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.58.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.59.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.60.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.61.png create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.62.png create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.1.png create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.2.png create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.3.png create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.4.png create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.5.png create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.6.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.01.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.02.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.03.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.04.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.05.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.06.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.07.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.08.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.09.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.10.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.11.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.12.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.13.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.14.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.15.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.16.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.17.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.18.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.19.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.20.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.21.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.22.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.23.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.24.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.25.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.26.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.27.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.28.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.29.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.30.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.31.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.32.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.33.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.34.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.35.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.36.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.37.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.38.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.39.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.40.png create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.41.png create mode 100644 lefdef/doc/lefdefref/images/Thumbs.db create mode 100644 lefdef/doc/lefdefref/images/aleph.gif create mode 100644 lefdef/doc/lefdefref/images/alpha.gif create mode 100644 lefdef/doc/lefdefref/images/ampersnd.gif create mode 100644 lefdef/doc/lefdefref/images/angle.gif create mode 100644 lefdef/doc/lefdefref/images/anglleft.gif create mode 100644 lefdef/doc/lefdefref/images/anglrite.gif create mode 100644 lefdef/doc/lefdefref/images/approx.gif create mode 100644 lefdef/doc/lefdefref/images/arrwboth.gif create mode 100644 lefdef/doc/lefdefref/images/arrwdbbo.gif create mode 100644 lefdef/doc/lefdefref/images/arrwdbdn.gif create mode 100644 lefdef/doc/lefdefref/images/arrwdblt.gif create mode 100644 lefdef/doc/lefdefref/images/arrwdbrt.gif create mode 100644 lefdef/doc/lefdefref/images/arrwdbup.gif create mode 100644 lefdef/doc/lefdefref/images/arrwdown.gif create mode 100644 lefdef/doc/lefdefref/images/arrwleft.gif create mode 100644 lefdef/doc/lefdefref/images/arrwrite.gif create mode 100644 lefdef/doc/lefdefref/images/arrwup.gif create mode 100644 lefdef/doc/lefdefref/images/arrwvert.gif create mode 100644 lefdef/doc/lefdefref/images/b_bullet.gif create mode 100644 lefdef/doc/lefdefref/images/beta.gif create mode 100644 lefdef/doc/lefdefref/images/blank.gif create mode 100644 lefdef/doc/lefdefref/images/bracltbt.gif create mode 100644 lefdef/doc/lefdefref/images/bracltmd.gif create mode 100644 lefdef/doc/lefdefref/images/braclttp.gif create mode 100644 lefdef/doc/lefdefref/images/bracrtbt.gif create mode 100644 lefdef/doc/lefdefref/images/bracrtmd.gif create mode 100644 lefdef/doc/lefdefref/images/bracrttp.gif create mode 100644 lefdef/doc/lefdefref/images/brakltbt.gif create mode 100644 lefdef/doc/lefdefref/images/braklttp.gif create mode 100644 lefdef/doc/lefdefref/images/brakmidl.gif create mode 100644 lefdef/doc/lefdefref/images/brakrtbt.gif create mode 100644 lefdef/doc/lefdefref/images/brakrttp.gif create mode 100644 lefdef/doc/lefdefref/images/bs_bullet_sub.gif create mode 100644 lefdef/doc/lefdefref/images/bss_bullet_sub_sub.gif create mode 100644 lefdef/doc/lefdefref/images/bullet.gif create mode 100644 lefdef/doc/lefdefref/images/capalpha.gif create mode 100644 lefdef/doc/lefdefref/images/capbeta.gif create mode 100644 lefdef/doc/lefdefref/images/capchi.gif create mode 100644 lefdef/doc/lefdefref/images/capdelta.gif create mode 100644 lefdef/doc/lefdefref/images/capepsil.gif create mode 100644 lefdef/doc/lefdefref/images/capeta.gif create mode 100644 lefdef/doc/lefdefref/images/capgamma.gif create mode 100644 lefdef/doc/lefdefref/images/capiota.gif create mode 100644 lefdef/doc/lefdefref/images/capkappa.gif create mode 100644 lefdef/doc/lefdefref/images/caplambd.gif create mode 100644 lefdef/doc/lefdefref/images/capmu.gif create mode 100644 lefdef/doc/lefdefref/images/capnu.gif create mode 100644 lefdef/doc/lefdefref/images/capomega.gif create mode 100644 lefdef/doc/lefdefref/images/capomicr.gif create mode 100644 lefdef/doc/lefdefref/images/capphi.gif create mode 100644 lefdef/doc/lefdefref/images/cappi.gif create mode 100644 lefdef/doc/lefdefref/images/cappsi.gif create mode 100644 lefdef/doc/lefdefref/images/caprho.gif create mode 100644 lefdef/doc/lefdefref/images/capsigma.gif create mode 100644 lefdef/doc/lefdefref/images/captau.gif create mode 100644 lefdef/doc/lefdefref/images/captheta.gif create mode 100644 lefdef/doc/lefdefref/images/capupsil.gif create mode 100644 lefdef/doc/lefdefref/images/capxi.gif create mode 100644 lefdef/doc/lefdefref/images/capzeta.gif create mode 100644 lefdef/doc/lefdefref/images/carretrn.gif create mode 100644 lefdef/doc/lefdefref/images/caution.gif create mode 100644 lefdef/doc/lefdefref/images/chi.gif create mode 100644 lefdef/doc/lefdefref/images/circmult.gif create mode 100644 lefdef/doc/lefdefref/images/circplus.gif create mode 100644 lefdef/doc/lefdefref/images/club.gif create mode 100644 lefdef/doc/lefdefref/images/congrunt.gif create mode 100644 lefdef/doc/lefdefref/images/delta.gif create mode 100644 lefdef/doc/lefdefref/images/draft.gif create mode 100644 lefdef/doc/lefdefref/images/element.gif create mode 100644 lefdef/doc/lefdefref/images/emptyset.gif create mode 100644 lefdef/doc/lefdefref/images/epsilon.gif create mode 100644 lefdef/doc/lefdefref/images/epsilon1.gif create mode 100644 lefdef/doc/lefdefref/images/equivlnt.gif create mode 100644 lefdef/doc/lefdefref/images/eta.gif create mode 100644 lefdef/doc/lefdefref/images/existntl.gif create mode 100644 lefdef/doc/lefdefref/images/gamma.gif create mode 100644 lefdef/doc/lefdefref/images/gradient.gif create mode 100644 lefdef/doc/lefdefref/images/gtequal.gif create mode 100644 lefdef/doc/lefdefref/images/header_doc.gif create mode 100644 lefdef/doc/lefdefref/images/heart.gif create mode 100644 lefdef/doc/lefdefref/images/ifraktur.gif create mode 100644 lefdef/doc/lefdefref/images/important.gif create mode 100644 lefdef/doc/lefdefref/images/infinity.gif create mode 100644 lefdef/doc/lefdefref/images/integbot.gif create mode 100644 lefdef/doc/lefdefref/images/integral.gif create mode 100644 lefdef/doc/lefdefref/images/integtop.gif create mode 100644 lefdef/doc/lefdefref/images/intrsect.gif create mode 100644 lefdef/doc/lefdefref/images/iota.gif create mode 100644 lefdef/doc/lefdefref/images/kappa.gif create mode 100644 lefdef/doc/lefdefref/images/lambda.gif create mode 100644 lefdef/doc/lefdefref/images/logic_or.gif create mode 100644 lefdef/doc/lefdefref/images/logicand.gif create mode 100644 lefdef/doc/lefdefref/images/lozenge.gif create mode 100644 lefdef/doc/lefdefref/images/lt_equal.gif create mode 100644 lefdef/doc/lefdefref/images/nav2_index.gif create mode 100644 lefdef/doc/lefdefref/images/nav2_index_b.gif create mode 100644 lefdef/doc/lefdefref/images/nav2_next_b.gif create mode 100644 lefdef/doc/lefdefref/images/nav2_previous.gif create mode 100644 lefdef/doc/lefdefref/images/nav2_previous_b.gif create mode 100644 lefdef/doc/lefdefref/images/nav2_print.gif create mode 100644 lefdef/doc/lefdefref/images/nav2_toc.gif create mode 100644 lefdef/doc/lefdefref/images/nav2_toc_b.gif create mode 100644 lefdef/doc/lefdefref/images/nav_next.gif create mode 100644 lefdef/doc/lefdefref/images/nav_next_b.gif create mode 100644 lefdef/doc/lefdefref/images/notelemn.gif create mode 100644 lefdef/doc/lefdefref/images/notequal.gif create mode 100644 lefdef/doc/lefdefref/images/notsbset.gif create mode 100644 lefdef/doc/lefdefref/images/nu.gif create mode 100644 lefdef/doc/lefdefref/images/omega.gif create mode 100644 lefdef/doc/lefdefref/images/omega1.gif create mode 100644 lefdef/doc/lefdefref/images/omicron.gif create mode 100644 lefdef/doc/lefdefref/images/pareltbt.gif create mode 100644 lefdef/doc/lefdefref/images/parelttp.gif create mode 100644 lefdef/doc/lefdefref/images/parertbt.gif create mode 100644 lefdef/doc/lefdefref/images/parerttp.gif create mode 100644 lefdef/doc/lefdefref/images/partldif.gif create mode 100644 lefdef/doc/lefdefref/images/perpend.gif create mode 100644 lefdef/doc/lefdefref/images/phi.gif create mode 100644 lefdef/doc/lefdefref/images/phi1.gif create mode 100644 lefdef/doc/lefdefref/images/pi.gif create mode 100644 lefdef/doc/lefdefref/images/product.gif create mode 100644 lefdef/doc/lefdefref/images/proportn.gif create mode 100644 lefdef/doc/lefdefref/images/prsprset.gif create mode 100644 lefdef/doc/lefdefref/images/prsubset.gif create mode 100644 lefdef/doc/lefdefref/images/psi.gif create mode 100644 lefdef/doc/lefdefref/images/radical.gif create mode 100644 lefdef/doc/lefdefref/images/refsbset.gif create mode 100644 lefdef/doc/lefdefref/images/refspset.gif create mode 100644 lefdef/doc/lefdefref/images/rfraktur.gif create mode 100644 lefdef/doc/lefdefref/images/rho.gif create mode 100644 lefdef/doc/lefdefref/images/second.gif create mode 100644 lefdef/doc/lefdefref/images/sigma.gif create mode 100644 lefdef/doc/lefdefref/images/sigma1.gif create mode 100644 lefdef/doc/lefdefref/images/spade.gif create mode 100644 lefdef/doc/lefdefref/images/suchthat.gif create mode 100644 lefdef/doc/lefdefref/images/sumation.gif create mode 100644 lefdef/doc/lefdefref/images/tau.gif create mode 100644 lefdef/doc/lefdefref/images/therefor.gif create mode 100644 lefdef/doc/lefdefref/images/theta.gif create mode 100644 lefdef/doc/lefdefref/images/theta1.gif create mode 100644 lefdef/doc/lefdefref/images/tip.gif create mode 100644 lefdef/doc/lefdefref/images/tm.gif create mode 100644 lefdef/doc/lefdefref/images/union.gif create mode 100644 lefdef/doc/lefdefref/images/univrsal.gif create mode 100644 lefdef/doc/lefdefref/images/upsilon.gif create mode 100644 lefdef/doc/lefdefref/images/upsilon1.gif create mode 100644 lefdef/doc/lefdefref/images/video.gif create mode 100644 lefdef/doc/lefdefref/images/weierstr.gif create mode 100644 lefdef/doc/lefdefref/images/xi.gif create mode 100644 lefdef/doc/lefdefref/images/zeta.gif create mode 100644 lefdef/doc/lefdefref/lefdefref.pdf create mode 100644 lefdef/doc/lefdefref/lefdefrefIX.html create mode 100644 lefdef/doc/lefdefref/lefdefrefTOC.html create mode 100644 lefdef/doc/lefdefref/preface.html create mode 100644 lefdef/doc/lefdefref/titlecopy.html create mode 100755 lefdef/doc/support/header_doc.gif create mode 100755 lefdef/doc/support/ix_ref.gif create mode 100755 lefdef/doc/support/nav2_black.gif create mode 100755 lefdef/doc/support/nav2_exit.gif create mode 100755 lefdef/doc/support/nav2_feedback.gif create mode 100755 lefdef/doc/support/nav2_help.gif create mode 100755 lefdef/doc/support/nav2_index.gif create mode 100755 lefdef/doc/support/nav2_index_b.gif create mode 100755 lefdef/doc/support/nav2_library.gif create mode 100755 lefdef/doc/support/nav2_next_b.gif create mode 100755 lefdef/doc/support/nav2_previous.gif create mode 100755 lefdef/doc/support/nav2_previous_b.gif create mode 100755 lefdef/doc/support/nav2_print.gif create mode 100755 lefdef/doc/support/nav2_toc.gif create mode 100755 lefdef/doc/support/nav2_toc_b.gif create mode 100755 lefdef/doc/support/nav_next.gif create mode 100755 lefdef/doc/support/nav_next_b.gif create mode 100644 lefdef/src/CMakeLists.txt create mode 100644 lefdef/src/def/CMakeLists.txt create mode 100644 lefdef/src/def/LICENSE.TXT create mode 100644 lefdef/src/def/Makefile create mode 100644 lefdef/src/def/TEST/Makefile create mode 100644 lefdef/src/def/TEST/complete.5.8.def create mode 100644 lefdef/src/def/TEST/complete.5.8.def.au create mode 100644 lefdef/src/def/bin/lefdefdiff create mode 100644 lefdef/src/def/cdef/Makefile create mode 100644 lefdef/src/def/cdef/defMsgTable.h create mode 100644 lefdef/src/def/cdef/defiAlias.h create mode 100644 lefdef/src/def/cdef/defiAssertion.h create mode 100644 lefdef/src/def/cdef/defiBlockage.h create mode 100644 lefdef/src/def/cdef/defiComponent.h create mode 100644 lefdef/src/def/cdef/defiDebug.h create mode 100644 lefdef/src/def/cdef/defiDefs.h create mode 100644 lefdef/src/def/cdef/defiFPC.h create mode 100644 lefdef/src/def/cdef/defiFill.h create mode 100644 lefdef/src/def/cdef/defiGroup.h create mode 100644 lefdef/src/def/cdef/defiIOTiming.h create mode 100644 lefdef/src/def/cdef/defiKRDefs.h create mode 100644 lefdef/src/def/cdef/defiMisc.h create mode 100644 lefdef/src/def/cdef/defiNet.h create mode 100644 lefdef/src/def/cdef/defiNonDefault.h create mode 100644 lefdef/src/def/cdef/defiPartition.h create mode 100644 lefdef/src/def/cdef/defiPath.h create mode 100644 lefdef/src/def/cdef/defiPinCap.h create mode 100644 lefdef/src/def/cdef/defiPinProp.h create mode 100644 lefdef/src/def/cdef/defiProp.h create mode 100644 lefdef/src/def/cdef/defiPropType.h create mode 100644 lefdef/src/def/cdef/defiRegion.h create mode 100644 lefdef/src/def/cdef/defiRowTrack.h create mode 100644 lefdef/src/def/cdef/defiScanchain.h create mode 100644 lefdef/src/def/cdef/defiSite.h create mode 100644 lefdef/src/def/cdef/defiSlot.h create mode 100644 lefdef/src/def/cdef/defiTimingDisable.h create mode 100644 lefdef/src/def/cdef/defiTypedefs.h create mode 100644 lefdef/src/def/cdef/defiUser.h create mode 100644 lefdef/src/def/cdef/defiVia.h create mode 100644 lefdef/src/def/cdef/defrReader.h create mode 100644 lefdef/src/def/cdef/defwWriter.h create mode 100644 lefdef/src/def/cdef/defwWriterCalls.h create mode 100644 lefdef/src/def/cdef/xdefiAssertion.cpp create mode 100644 lefdef/src/def/cdef/xdefiBlockage.cpp create mode 100644 lefdef/src/def/cdef/xdefiComponent.cpp create mode 100644 lefdef/src/def/cdef/xdefiDebug.cpp create mode 100644 lefdef/src/def/cdef/xdefiFPC.cpp create mode 100644 lefdef/src/def/cdef/xdefiFill.cpp create mode 100644 lefdef/src/def/cdef/xdefiGroup.cpp create mode 100644 lefdef/src/def/cdef/xdefiIOTiming.cpp create mode 100644 lefdef/src/def/cdef/xdefiMisc.cpp create mode 100644 lefdef/src/def/cdef/xdefiNet.cpp create mode 100644 lefdef/src/def/cdef/xdefiNonDefault.cpp create mode 100644 lefdef/src/def/cdef/xdefiPartition.cpp create mode 100644 lefdef/src/def/cdef/xdefiPath.cpp create mode 100644 lefdef/src/def/cdef/xdefiPinCap.cpp create mode 100644 lefdef/src/def/cdef/xdefiPinProp.cpp create mode 100644 lefdef/src/def/cdef/xdefiProp.cpp create mode 100644 lefdef/src/def/cdef/xdefiPropType.cpp create mode 100644 lefdef/src/def/cdef/xdefiRegion.cpp create mode 100644 lefdef/src/def/cdef/xdefiRowTrack.cpp create mode 100644 lefdef/src/def/cdef/xdefiScanchain.cpp create mode 100644 lefdef/src/def/cdef/xdefiSite.cpp create mode 100644 lefdef/src/def/cdef/xdefiSlot.cpp create mode 100644 lefdef/src/def/cdef/xdefiTimingDisable.cpp create mode 100644 lefdef/src/def/cdef/xdefiVia.cpp create mode 100644 lefdef/src/def/cdef/xdefrReader.cpp create mode 100644 lefdef/src/def/cdef/xdefwWriter.cpp create mode 100644 lefdef/src/def/cdef/xdefwWriterCalls.cpp create mode 100644 lefdef/src/def/cdefzlib/Makefile create mode 100644 lefdef/src/def/cdefzlib/cdefzlib.c create mode 100644 lefdef/src/def/cdefzlib/defzlib.h create mode 100644 lefdef/src/def/def/CMakeLists.txt create mode 100644 lefdef/src/def/def/Makefile create mode 100644 lefdef/src/def/def/def.msg create mode 100644 lefdef/src/def/def/def.tab.h create mode 100644 lefdef/src/def/def/def.y create mode 100644 lefdef/src/def/def/def_keywords.cpp create mode 100755 lefdef/src/def/def/def_objs.defs create mode 100644 lefdef/src/def/def/defiAlias.cpp create mode 100644 lefdef/src/def/def/defiAlias.hpp create mode 100644 lefdef/src/def/def/defiAssertion.cpp create mode 100644 lefdef/src/def/def/defiAssertion.hpp create mode 100644 lefdef/src/def/def/defiBlockage.cpp create mode 100644 lefdef/src/def/def/defiBlockage.hpp create mode 100644 lefdef/src/def/def/defiComponent.cpp create mode 100644 lefdef/src/def/def/defiComponent.hpp create mode 100644 lefdef/src/def/def/defiDebug.cpp create mode 100644 lefdef/src/def/def/defiDebug.hpp create mode 100644 lefdef/src/def/def/defiDefs.hpp create mode 100644 lefdef/src/def/def/defiFPC.cpp create mode 100644 lefdef/src/def/def/defiFPC.hpp create mode 100644 lefdef/src/def/def/defiFill.cpp create mode 100644 lefdef/src/def/def/defiFill.hpp create mode 100644 lefdef/src/def/def/defiGroup.cpp create mode 100644 lefdef/src/def/def/defiGroup.hpp create mode 100644 lefdef/src/def/def/defiIOTiming.cpp create mode 100644 lefdef/src/def/def/defiIOTiming.hpp create mode 100644 lefdef/src/def/def/defiKRDefs.hpp create mode 100644 lefdef/src/def/def/defiMisc.cpp create mode 100644 lefdef/src/def/def/defiMisc.hpp create mode 100644 lefdef/src/def/def/defiNet.cpp create mode 100644 lefdef/src/def/def/defiNet.hpp create mode 100644 lefdef/src/def/def/defiNonDefault.cpp create mode 100644 lefdef/src/def/def/defiNonDefault.hpp create mode 100644 lefdef/src/def/def/defiPartition.cpp create mode 100644 lefdef/src/def/def/defiPartition.hpp create mode 100644 lefdef/src/def/def/defiPath.cpp create mode 100644 lefdef/src/def/def/defiPath.hpp create mode 100644 lefdef/src/def/def/defiPinCap.cpp create mode 100644 lefdef/src/def/def/defiPinCap.hpp create mode 100644 lefdef/src/def/def/defiPinProp.cpp create mode 100644 lefdef/src/def/def/defiPinProp.hpp create mode 100644 lefdef/src/def/def/defiProp.cpp create mode 100644 lefdef/src/def/def/defiProp.hpp create mode 100644 lefdef/src/def/def/defiPropType.cpp create mode 100644 lefdef/src/def/def/defiPropType.hpp create mode 100644 lefdef/src/def/def/defiRegion.cpp create mode 100644 lefdef/src/def/def/defiRegion.hpp create mode 100644 lefdef/src/def/def/defiRowTrack.cpp create mode 100644 lefdef/src/def/def/defiRowTrack.hpp create mode 100644 lefdef/src/def/def/defiScanchain.cpp create mode 100644 lefdef/src/def/def/defiScanchain.hpp create mode 100644 lefdef/src/def/def/defiSite.cpp create mode 100644 lefdef/src/def/def/defiSite.hpp create mode 100644 lefdef/src/def/def/defiSlot.cpp create mode 100644 lefdef/src/def/def/defiSlot.hpp create mode 100644 lefdef/src/def/def/defiTimingDisable.cpp create mode 100644 lefdef/src/def/def/defiTimingDisable.hpp create mode 100644 lefdef/src/def/def/defiUser.hpp create mode 100644 lefdef/src/def/def/defiUtil.cpp create mode 100644 lefdef/src/def/def/defiUtil.hpp create mode 100644 lefdef/src/def/def/defiVia.cpp create mode 100644 lefdef/src/def/def/defiVia.hpp create mode 100644 lefdef/src/def/def/defrCallBacks.hpp create mode 100644 lefdef/src/def/def/defrCallbacks.cpp create mode 100644 lefdef/src/def/def/defrData.cpp create mode 100644 lefdef/src/def/def/defrData.hpp create mode 100644 lefdef/src/def/def/defrReader.cpp create mode 100644 lefdef/src/def/def/defrReader.hpp create mode 100644 lefdef/src/def/def/defrSettings.cpp create mode 100644 lefdef/src/def/def/defrSettings.hpp create mode 100644 lefdef/src/def/def/defwWriter.cpp create mode 100644 lefdef/src/def/def/defwWriter.hpp create mode 100644 lefdef/src/def/def/defwWriterCalls.cpp create mode 100644 lefdef/src/def/def/defwWriterCalls.hpp create mode 100644 lefdef/src/def/def/lex.h create mode 100644 lefdef/src/def/defdiff/CMakeLists.txt create mode 100644 lefdef/src/def/defdiff/Makefile create mode 100644 lefdef/src/def/defdiff/diffDefRW.cpp create mode 100644 lefdef/src/def/defdiff/diffDefRW.hpp create mode 100644 lefdef/src/def/defdiff/differDef.cpp create mode 100644 lefdef/src/def/defrw/CMakeLists.txt create mode 100644 lefdef/src/def/defrw/Makefile create mode 100644 lefdef/src/def/defrw/defrw.cpp create mode 100644 lefdef/src/def/defwrite/CMakeLists.txt create mode 100644 lefdef/src/def/defwrite/Makefile create mode 100644 lefdef/src/def/defwrite/defwrite.cpp create mode 100644 lefdef/src/def/defwrite/defwriteCbs.cpp create mode 100644 lefdef/src/def/defzlib/CMakeLists.txt create mode 100644 lefdef/src/def/defzlib/Makefile create mode 100644 lefdef/src/def/defzlib/defzlib.cpp create mode 100644 lefdef/src/def/defzlib/defzlib.hpp create mode 100644 lefdef/src/def/doc/defapi.pdf create mode 100644 lefdef/src/def/doc/defapiWN.pdf create mode 100644 lefdef/src/def/template.mk create mode 100644 lefdef/src/lef/CMakeLists.txt create mode 100644 lefdef/src/lef/LICENSE.TXT create mode 100644 lefdef/src/lef/Makefile create mode 100644 lefdef/src/lef/TEST/Makefile create mode 100644 lefdef/src/lef/TEST/complete.5.8.lef create mode 100644 lefdef/src/lef/TEST/complete.5.8.lef.au create mode 100644 lefdef/src/lef/bin/lefdefdiff create mode 100644 lefdef/src/lef/clef/Makefile create mode 100644 lefdef/src/lef/clef/lefMsgTable.h create mode 100644 lefdef/src/lef/clef/lefiArray.h create mode 100644 lefdef/src/lef/clef/lefiCrossTalk.h create mode 100644 lefdef/src/lef/clef/lefiDebug.h create mode 100755 lefdef/src/lef/clef/lefiEncryptExt.c create mode 100644 lefdef/src/lef/clef/lefiEncryptInt.h create mode 100644 lefdef/src/lef/clef/lefiLayer.h create mode 100644 lefdef/src/lef/clef/lefiMacro.h create mode 100644 lefdef/src/lef/clef/lefiMisc.h create mode 100644 lefdef/src/lef/clef/lefiNonDefault.h create mode 100644 lefdef/src/lef/clef/lefiProp.h create mode 100644 lefdef/src/lef/clef/lefiPropType.h create mode 100755 lefdef/src/lef/clef/lefiTBInt.c create mode 100644 lefdef/src/lef/clef/lefiTypedefs.h create mode 100644 lefdef/src/lef/clef/lefiUnits.h create mode 100644 lefdef/src/lef/clef/lefiUser.h create mode 100644 lefdef/src/lef/clef/lefiUtil.h create mode 100644 lefdef/src/lef/clef/lefiVia.h create mode 100644 lefdef/src/lef/clef/lefiViaRule.h create mode 100644 lefdef/src/lef/clef/lefrReader.h create mode 100644 lefdef/src/lef/clef/lefwWriter.h create mode 100644 lefdef/src/lef/clef/lefwWriterCalls.h create mode 100644 lefdef/src/lef/clef/xlefiArray.cpp create mode 100644 lefdef/src/lef/clef/xlefiCrossTalk.cpp create mode 100644 lefdef/src/lef/clef/xlefiDebug.cpp create mode 100644 lefdef/src/lef/clef/xlefiEncryptInt.cpp create mode 100644 lefdef/src/lef/clef/xlefiLayer.cpp create mode 100644 lefdef/src/lef/clef/xlefiMacro.cpp create mode 100644 lefdef/src/lef/clef/xlefiMisc.cpp create mode 100644 lefdef/src/lef/clef/xlefiNonDefault.cpp create mode 100644 lefdef/src/lef/clef/xlefiProp.cpp create mode 100644 lefdef/src/lef/clef/xlefiPropType.cpp create mode 100644 lefdef/src/lef/clef/xlefiUnits.cpp create mode 100644 lefdef/src/lef/clef/xlefiUtil.cpp create mode 100644 lefdef/src/lef/clef/xlefiVia.cpp create mode 100644 lefdef/src/lef/clef/xlefiViaRule.cpp create mode 100644 lefdef/src/lef/clef/xlefrReader.cpp create mode 100644 lefdef/src/lef/clef/xlefwWriter.cpp create mode 100644 lefdef/src/lef/clef/xlefwWriterCalls.cpp create mode 100644 lefdef/src/lef/clefzlib/Makefile create mode 100644 lefdef/src/lef/clefzlib/clefzlib.c create mode 100644 lefdef/src/lef/clefzlib/lefzlib.h create mode 100644 lefdef/src/lef/doc/lefapi.pdf create mode 100644 lefdef/src/lef/doc/lefapiWN.pdf create mode 100644 lefdef/src/lef/lef/CMakeLists.txt create mode 100644 lefdef/src/lef/lef/Makefile create mode 100644 lefdef/src/lef/lef/crypt.cpp create mode 100644 lefdef/src/lef/lef/crypt.hpp create mode 100644 lefdef/src/lef/lef/lef.msg create mode 100644 lefdef/src/lef/lef/lef.tab.h create mode 100644 lefdef/src/lef/lef/lef.y create mode 100644 lefdef/src/lef/lef/lef_keywords.cpp create mode 100644 lefdef/src/lef/lef/lefiArray.cpp create mode 100644 lefdef/src/lef/lef/lefiArray.hpp create mode 100644 lefdef/src/lef/lef/lefiCrossTalk.cpp create mode 100644 lefdef/src/lef/lef/lefiCrossTalk.hpp create mode 100644 lefdef/src/lef/lef/lefiDebug.cpp create mode 100644 lefdef/src/lef/lef/lefiDebug.hpp create mode 100644 lefdef/src/lef/lef/lefiDefs.hpp create mode 100644 lefdef/src/lef/lef/lefiEncryptInt.cpp create mode 100644 lefdef/src/lef/lef/lefiEncryptInt.hpp create mode 100644 lefdef/src/lef/lef/lefiKRDefs.hpp create mode 100644 lefdef/src/lef/lef/lefiLayer.cpp create mode 100644 lefdef/src/lef/lef/lefiLayer.hpp create mode 100644 lefdef/src/lef/lef/lefiMacro.cpp create mode 100644 lefdef/src/lef/lef/lefiMacro.hpp create mode 100644 lefdef/src/lef/lef/lefiMisc.cpp create mode 100644 lefdef/src/lef/lef/lefiMisc.hpp create mode 100644 lefdef/src/lef/lef/lefiNonDefault.cpp create mode 100644 lefdef/src/lef/lef/lefiNonDefault.hpp create mode 100644 lefdef/src/lef/lef/lefiProp.cpp create mode 100644 lefdef/src/lef/lef/lefiProp.hpp create mode 100644 lefdef/src/lef/lef/lefiPropType.cpp create mode 100644 lefdef/src/lef/lef/lefiPropType.hpp create mode 100644 lefdef/src/lef/lef/lefiTBExt.cpp create mode 100644 lefdef/src/lef/lef/lefiUnits.cpp create mode 100644 lefdef/src/lef/lef/lefiUnits.hpp create mode 100644 lefdef/src/lef/lef/lefiUser.hpp create mode 100644 lefdef/src/lef/lef/lefiUtil.hpp create mode 100644 lefdef/src/lef/lef/lefiVia.cpp create mode 100644 lefdef/src/lef/lef/lefiVia.hpp create mode 100644 lefdef/src/lef/lef/lefiViaRule.cpp create mode 100644 lefdef/src/lef/lef/lefiViaRule.hpp create mode 100644 lefdef/src/lef/lef/lefrCallBacks.hpp create mode 100644 lefdef/src/lef/lef/lefrCallbacks.cpp create mode 100644 lefdef/src/lef/lef/lefrData.cpp create mode 100644 lefdef/src/lef/lef/lefrData.hpp create mode 100644 lefdef/src/lef/lef/lefrReader.cpp create mode 100644 lefdef/src/lef/lef/lefrReader.hpp create mode 100644 lefdef/src/lef/lef/lefrSettings.cpp create mode 100644 lefdef/src/lef/lef/lefrSettings.hpp create mode 100644 lefdef/src/lef/lef/lefwWriter.cpp create mode 100644 lefdef/src/lef/lef/lefwWriter.hpp create mode 100644 lefdef/src/lef/lef/lefwWriterCalls.cpp create mode 100644 lefdef/src/lef/lef/lefwWriterCalls.hpp create mode 100644 lefdef/src/lef/lef/lex.h create mode 100644 lefdef/src/lef/lefdiff/CMakeLists.txt create mode 100644 lefdef/src/lef/lefdiff/Makefile create mode 100644 lefdef/src/lef/lefdiff/diffLefRW.cpp create mode 100644 lefdef/src/lef/lefdiff/diffLefRW.hpp create mode 100644 lefdef/src/lef/lefdiff/differLef.cpp create mode 100644 lefdef/src/lef/lefrw/CMakeLists.txt create mode 100644 lefdef/src/lef/lefrw/Makefile create mode 100644 lefdef/src/lef/lefrw/lefrw.cpp create mode 100644 lefdef/src/lef/lefwrite/CMakeLists.txt create mode 100644 lefdef/src/lef/lefwrite/Makefile create mode 100644 lefdef/src/lef/lefwrite/lefwrite.cpp create mode 100644 lefdef/src/lef/lefwrite/lefwriteCbs.cpp create mode 100644 lefdef/src/lef/lefzlib/CMakeLists.txt create mode 100644 lefdef/src/lef/lefzlib/Makefile create mode 100644 lefdef/src/lef/lefzlib/lefzlib.cpp create mode 100644 lefdef/src/lef/lefzlib/lefzlib.hpp create mode 100644 lefdef/src/lef/template.mk create mode 100644 lefdef/src/lefdefReadme.txt diff --git a/bootstrap/build.conf b/bootstrap/build.conf index fbd80aea..41a8e19d 100644 --- a/bootstrap/build.conf +++ b/bootstrap/build.conf @@ -13,6 +13,7 @@ projects = [ } , { 'name' : "coriolis" , 'tools' : [ "bootstrap" + , "lefdef" , "vlsisapd" , "hurricane" , "crlcore" diff --git a/bootstrap/cmake_modules/FindLEFDEF.cmake b/bootstrap/cmake_modules/FindLEFDEF.cmake index cbc00c89..79b58e2f 100644 --- a/bootstrap/cmake_modules/FindLEFDEF.cmake +++ b/bootstrap/cmake_modules/FindLEFDEF.cmake @@ -7,124 +7,121 @@ # # The DEF C API library: LEFDEF_CDEF_LIBRARY # LEFDEF_CDEF_LIBRARY_RELEASE -# LEFDEF_CDEF_LIBRARY_DEBUG # # The DEF C API library (zlib) : LEFDEF_ZCDEF_LIBRARY # LEFDEF_ZCDEF_LIBRARY_RELEASE -# LEFDEF_ZCDEF_LIBRARY_DEBUG # # The DEF C++ API library: LEFDEF_DEF_LIBRARY # LEFDEF_DEF_LIBRARY_RELEASE -# LEFDEF_DEF_LIBRARY_DEBUG # # The DEF C++ API library (zlib) : LEFDEF_ZDEF_LIBRARY # LEFDEF_ZDEF_LIBRARY_RELEASE -# LEFDEF_ZDEF_LIBRARY_DEBUG # # The LEF C API library: LEFDEF_CLEF_LIBRARY # LEFDEF_CLEF_LIBRARY_RELEASE -# LEFDEF_CLEF_LIBRARY_DEBUG # # The LEF C API library (zlib) : LEFDEF_ZCLEF_LIBRARY # LEFDEF_ZCLEF_LIBRARY_RELEASE -# LEFDEF_ZCLEF_LIBRARY_DEBUG # # The LEF C++ API library: LEFDEF_LEF_LIBRARY # LEFDEF_LEF_LIBRARY_RELEASE -# LEFDEF_LEF_LIBRARY_DEBUG # # The LEF C++ API library (zlib) : LEFDEF_ZLEF_LIBRARY # LEFDEF_ZLEF_LIBRARY_RELEASE -# LEFDEF_ZLEF_LIBRARY_DEBUG + +# Try to find a reasonable CORIOLIS_TOP value. + if( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") ) + set ( CORIOLIS_USER_TOP "$ENV{CORIOLIS_USER_TOP}" ) + else( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") ) + if( NOT("$ENV{CORIOLIS_TOP}" STREQUAL "") ) + set ( CORIOLIS_TOP "$ENV{CORIOLIS_TOP}" ) + endif( NOT("$ENV{CORIOLIS_TOP}" STREQUAL "") ) + endif( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") ) -macro( _find_lefdef_lib varname libname ) - find_library( LEFDEF_${varname}_LIBRARY_RELEASE NAMES ${libname} PATHS ${LEFDEF_LIBRARY_DIR} ) - find_library( LEFDEF_${varname}_LIBRARY_DEBUG NAMES ${libname}_Debug PATHS ${LEFDEF_LIBRARY_DIR} ) - - if( LEFDEF_${varname}_LIBRARY_RELEASE AND NOT LEFDEF_${varname}_LIBRARY_DEBUG ) - set( LEFDEF_${varname}_LIBRARY_DEBUG ${LEFDEF_${varname}_LIBRARY_RELEASE} CACHE STRING "Path to a library" FORCE ) - endif() - - if( LEFDEF_${varname}_LIBRARY_DEBUG AND NOT LEFDEF_${varname}_LIBRARY_RELEASE ) - set( LEFDEF_${varname}_LIBRARY_RELEASE LEFDEF_${varname}_LIBRARY_DEBUG CACHE STRING "Path to a library" FORCE ) - endif() - - if( LEFDEF_${varname}_LIBRARY_RELEASE ) - list( APPEND LEFDEF_LIBRARIES "optimized" ${LEFDEF_${varname}_LIBRARY_RELEASE} - "debug" ${LEFDEF_${varname}_LIBRARY_DEBUG} ) - set( LEFDEF_${varname}_LIBRARY_FOUND 1 ) - mark_as_advanced( LEFDEF_${varname}_LIBRARY_RELEASE - LEFDEF_${varname}_LIBRARY_DEBUG ) - else() - set ( LEFDEF_FOUND "NO" ) - endif() -endmacro() + macro( _find_lefdef_lib varname libname ) + find_library( LEFDEF_${varname}_LIBRARY_RELEASE NAMES ${libname} PATHS ${LEFDEF_LIBRARY_DIR} ) + + if( LEFDEF_${varname}_LIBRARY_RELEASE ) + set( LEFDEF_${varname}_LIBRARY_DEBUG ${LEFDEF_${varname}_LIBRARY_RELEASE} CACHE STRING "Path to a library" FORCE ) + endif() + + if( LEFDEF_${varname}_LIBRARY_RELEASE ) + list( APPEND LEFDEF_LIBRARIES "optimized" ${LEFDEF_${varname}_LIBRARY_RELEASE} + "debug" ${LEFDEF_${varname}_LIBRARY_DEBUG} ) + set( LEFDEF_${varname}_LIBRARY_FOUND 1 ) + mark_as_advanced( LEFDEF_${varname}_LIBRARY_RELEASE + LEFDEF_${varname}_LIBRARY_DEBUG ) + else() + set ( LEFDEF_FOUND "NO" ) + endif() + endmacro() -set( LEFDEF_INCLUDE_DIR_DESCRIPTION "directory containing the LEF/DEF include files. E.g /opt/lefdef-5.6/include" ) -set( LEFDEF_LIBRARY_DIR_DESCRIPTION "directory containing the LEF/DEF library files. E.g /opt/lefdef-5.6/lib" ) -set( LEFDEF_DIR_MESSAGE "Set the LEFDEF_INCLUDE_DIR cmake cache entry to the ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" ) + set( LEFDEF_INCLUDE_DIR_DESCRIPTION "directory containing the LEF/DEF include files. E.g /opt/lefdef-5.6/include" ) + set( LEFDEF_LIBRARY_DIR_DESCRIPTION "directory containing the LEF/DEF library files. E.g /opt/lefdef-5.6/lib" ) + set( LEFDEF_DIR_MESSAGE "Set the LEFDEF_INCLUDE_DIR cmake cache entry to the ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" ) # Don't even bother under Win32 -if ( UNIX ) - set ( LEFDEF_FOUND "YES" ) - set ( LEFDEF_SEARCH_PATH "$ENV{LEFDEF_TOP}" + if( UNIX ) + set( LEFDEF_FOUND "YES" ) + set( LEFDEF_SEARCH_PATH "$ENV{CORIOLIS_TOP}" + "$ENV{LEFDEF_TOP}" "/usr" - "/opt/lefdef-5.6" + "/opt/lefdef-5.8" "/opt/lefdef-5.7" + "/opt/lefdef-5.6" "/opt/lefdef" "$ENV{HOME}/oa/lefdef/5.7-s038" "/soc/oa" ) - message("-- Components of LEFDEF_DIR_SEARCH:") - foreach(PATH ${LEFDEF_DIR_SEARCH}) - message("-- ${PATH}") - endforeach(PATH) - - set ( LEFDEF_LIBRARIES "" ) - set ( LEFDEF_LIBRARY_SEARCH_PATH "" ) - - find_path ( LEFDEF_INCLUDE_DIR NAMES "defiDefs.h" + message( "-- Components of LEFDEF_DIR_SEARCH:" ) + foreach( PATH ${LEFDEF_DIR_SEARCH} ) + message( "-- ${PATH}" ) + endforeach() + + set( LEFDEF_LIBRARIES "" ) + set( LEFDEF_LIBRARY_SEARCH_PATH "" ) + + find_path( LEFDEF_INCLUDE_DIR NAMES "defiDefs.h" PATHS ${LEFDEF_SEARCH_PATH} PATH_SUFFIXES "include" "include/lefdef" DOC "The ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" ) - message( STATUS "LEFDEF_INCLUDE_DIR: ${LEFDEF_INCLUDE_DIR}" ) - - find_path ( LEFDEF_LIBRARY_DIR NAMES "libdef.a" "libdef_Debug.a" + message( STATUS "LEFDEF_INCLUDE_DIR: ${LEFDEF_INCLUDE_DIR}" ) + + find_path( LEFDEF_LIBRARY_DIR NAMES "libdef.a" PATHS ${LEFDEF_SEARCH_PATH} PATH_SUFFIXES "lib${LIB_SUFFIX}" DOC "The ${LEFDEF_LIBRARY_DIR_DESCRIPTION}" ) - message( STATUS "LEFDEF_LIBRARY_DIR: ${LEFDEF_LIBRARY_DIR}" ) - - if ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR ) - _find_lefdef_lib ( "CDEF" "cdef" ) - _find_lefdef_lib ( "ZCDEF" "cdefzlib" ) - _find_lefdef_lib ( "DEF" "def" ) - _find_lefdef_lib ( "ZDEF" "defzlib" ) - _find_lefdef_lib ( "CLEF" "clef" ) - _find_lefdef_lib ( "ZCLEF" "clefzlib" ) - _find_lefdef_lib ( "LEF" "lef" ) - _find_lefdef_lib ( "ZLEF" "lefzlib" ) - else ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR ) - set ( LEFDEF_FOUND "NO" ) - endif ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR ) - - if ( LEFDEF_FOUND ) - message ( STATUS "Found LEF/DEF" ) - add_definitions ( -DHAVE_LEFDEF ) - if ( NOT LEFDEF_FIND_QUIETLY ) - message ( STATUS "Found LEF/DEF" ) - endif ( NOT LEFDEF_FIND_QUIETLY ) - else ( LEFDEF_FOUND ) - set ( LEFDEF_LIBRARIES "" ) - set ( LEFDEF_INCLUDE_DIR "" ) - set ( LEFDEF_LIBRARY_DIR "" ) - if ( LEFDEF_FIND_REQUIRED ) - message ( STATUS "LEF/DEF libraries and/or includes NOT found!" ) - endif ( LEFDEF_FIND_REQUIRED ) - endif ( LEFDEF_FOUND ) - - mark_as_advanced ( LEFDEF_INCLUDE_DIR LEFDEF_LIBRARY_DIR LEFDEF_LIBRARIES ) -endif ( UNIX ) + message( STATUS "LEFDEF_LIBRARY_DIR: ${LEFDEF_LIBRARY_DIR}" ) + + if( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR ) + _find_lefdef_lib( "CDEF" "cdef" ) + _find_lefdef_lib( "ZCDEF" "cdefzlib" ) + _find_lefdef_lib( "DEF" "def" ) + _find_lefdef_lib( "ZDEF" "defzlib" ) + _find_lefdef_lib( "CLEF" "clef" ) + _find_lefdef_lib( "ZCLEF" "clefzlib" ) + _find_lefdef_lib( "LEF" "lef" ) + _find_lefdef_lib( "ZLEF" "lefzlib" ) + else() + set( LEFDEF_FOUND "NO" ) + endif() + + if( LEFDEF_FOUND ) + add_definitions( -DHAVE_LEFDEF ) + if( NOT LEFDEF_FIND_QUIETLY ) + message( STATUS "Found LEF/DEF" ) + endif() + else( LEFDEF_FOUND ) + set( LEFDEF_LIBRARIES "" ) + set( LEFDEF_INCLUDE_DIR "" ) + set( LEFDEF_LIBRARY_DIR "" ) + if( LEFDEF_FIND_REQUIRED ) + message( STATUS "LEF/DEF libraries and/or includes NOT found!" ) + endif() + endif( LEFDEF_FOUND ) + + mark_as_advanced( LEFDEF_INCLUDE_DIR LEFDEF_LIBRARY_DIR LEFDEF_LIBRARIES ) + endif( UNIX ) diff --git a/crlcore/src/ccore/lefdef/DefDriver.cpp b/crlcore/src/ccore/lefdef/DefDriver.cpp index 73eec44a..9d2dc54a 100644 --- a/crlcore/src/ccore/lefdef/DefDriver.cpp +++ b/crlcore/src/ccore/lefdef/DefDriver.cpp @@ -92,7 +92,7 @@ namespace CRL { // x-----------------------------------------------------------------x -# if HAVE_LEFDEF && defined(LEF_ENABLED) +#if defined(HAVE_LEFDEF) && defined(LEF_ENABLED) #define CHECK_STATUS(status) \ if (status) { \ defwPrintError(status); \ @@ -162,14 +162,14 @@ bool LessNet::operator () ( Net* net1, Net* net2 ) { return false; } -# endif // HAVE_LEFDEF +#endif // HAVE_LEFDEF void defDriver ( const string cellPath, Cell *cell, unsigned int &saveState ) { -# if HAVE_LEFDEF && defined(LEF_ENABLED) +#if defined(HAVE_LEFDEF) && defined(LEF_ENABLED) CDataBase* dataBase = GetCDataBase(); if ( dataBase == NULL ) throw CError ( NullDataBase, "CDrivDEF()" ); @@ -663,9 +663,9 @@ void defDriver ( const string cellPath, Cell *cell, unsigned int &saveState ) CHECK_STATUS(status); ccell.Close (); -# else // HAVE_LEFDEF +#else // HAVE_LEFDEF cerr << "\nDummy LEF driver call for \"" << cellPath << "\"." << endl; -# endif // HAVE_LEFDEF +#endif // HAVE_LEFDEF } diff --git a/crlcore/src/ccore/lefdef/DefExport.cpp b/crlcore/src/ccore/lefdef/DefExport.cpp index b865c3b8..d9b8ec18 100644 --- a/crlcore/src/ccore/lefdef/DefExport.cpp +++ b/crlcore/src/ccore/lefdef/DefExport.cpp @@ -15,7 +15,7 @@ #include -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) # include "lefwWriter.hpp" # include "defwWriter.hpp" # include "defwWriterCalls.hpp" @@ -42,7 +42,7 @@ #include "crlcore/DefExport.h" -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) namespace { @@ -747,7 +747,7 @@ namespace CRL { void DefExport::drive ( Cell* cell, unsigned int flags ) { -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) DefDriver::drive ( cell, flags ); if ( flags & WithLEF ) LefExport::drive ( cell, LefExport::WithTechnology|LefExport::WithSpacers ); diff --git a/crlcore/src/ccore/lefdef/DefImport.cpp b/crlcore/src/ccore/lefdef/DefImport.cpp index a93a2299..ac3c5ee6 100644 --- a/crlcore/src/ccore/lefdef/DefImport.cpp +++ b/crlcore/src/ccore/lefdef/DefImport.cpp @@ -17,7 +17,7 @@ #include #include #include -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) # include "lefrReader.hpp" # include "defrReader.hpp" #endif @@ -39,7 +39,7 @@ #include "crlcore/DefImport.h" -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) namespace { @@ -591,7 +591,7 @@ namespace CRL { UpdateSession::open (); Cell* cell = NULL; -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) cell = DefParser::parse ( design+".def", flags ); #else cerr << "[ERROR] CRL::DefImport::load(): \n" diff --git a/crlcore/src/ccore/lefdef/DefParser.cpp b/crlcore/src/ccore/lefdef/DefParser.cpp index b8aaa631..1cff4e12 100644 --- a/crlcore/src/ccore/lefdef/DefParser.cpp +++ b/crlcore/src/ccore/lefdef/DefParser.cpp @@ -37,7 +37,7 @@ #include "crlcore/LefDefExtension.h" #include "LefDef.h" -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) # include "defrReader.hpp" #endif @@ -82,7 +82,7 @@ namespace { unsigned int __lefConvertFactor = 1; -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) // --------------------------------------------------------------- // Module Global Functions. @@ -639,7 +639,7 @@ namespace CRL { cmess2 << " " << tab << "+ " << cellPath << endl; -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) DataBase* db = DataBase::getDB (); if ( !db ) throw Error ( NullDataBase, "defParser()" ); diff --git a/crlcore/src/ccore/lefdef/LefExport.cpp b/crlcore/src/ccore/lefdef/LefExport.cpp index 259d1a3d..e278097f 100644 --- a/crlcore/src/ccore/lefdef/LefExport.cpp +++ b/crlcore/src/ccore/lefdef/LefExport.cpp @@ -15,7 +15,7 @@ #include -#ifdef HAVE_LEFDEF +#if defined(HAVE_LEFDEF) #include "lefwWriter.hpp" #include "lefwWriterCalls.hpp" #endif @@ -41,7 +41,7 @@ #include "crlcore/LefExport.h" -#ifdef HAVE_LEFDEF +#if defined(HAVE_LEFDEF) namespace { @@ -717,7 +717,7 @@ namespace CRL { void LefExport::drive ( Cell* cell, unsigned int flags ) { -#if HAVE_LEFDEF +#if defined(HAVE_LEFDEF) string libraryName = "symbolic"; set cells; @@ -751,7 +751,7 @@ namespace CRL { void LefExport::drive ( Library* library, unsigned int flags ) { -#ifdef HAVE_LEFDEF +#if defined(HAVE_LEFDEF) string libraryName = "symbolic"; set cells; diff --git a/crlcore/src/ccore/lefdef/LefParser.cpp b/crlcore/src/ccore/lefdef/LefParser.cpp index f356703e..31dbae49 100644 --- a/crlcore/src/ccore/lefdef/LefParser.cpp +++ b/crlcore/src/ccore/lefdef/LefParser.cpp @@ -26,7 +26,7 @@ #include "hurricane/Cell.h" #include "crlcore/AllianceFramework.h" #include "LefDef.h" -#if HAVE_LEFDEF && defined(LEF_ENABLED) +#if defined(HAVE_LEFDEF) && defined(LEF_ENABLED) # include "lefrReader.hpp" #endif @@ -102,7 +102,7 @@ namespace CRL { // x-----------------------------------------------------------------x -# if HAVE_LEFDEF && defined(LEF_ENABLED) +# if defined(HAVE_LEFDEF) && defined(LEF_ENABLED) // ------------------------------------------------------------------- // Function : "badOpenTechno()". @@ -609,7 +609,7 @@ void lefParser ( const string libPath, Library* library, Catalog& catalog ) { static int callNumber = 0; -# if HAVE_LEFDEF && defined(LEF_ENABLED) +#if defined(HAVE_LEFDEF) && defined(LEF_ENABLED) if ( !library ) throw Error ( "lefParser() : Library argument is NULL." ); @@ -633,9 +633,9 @@ void lefParser ( const string libPath, Library* library, Catalog& catalog ) clibrary.open ( "r" ); lefrRead ( clibrary.getFile(), getString(&clibrary).c_str(), (void*)userData ); clibrary.close (); -# else // HAVE_LEFDEF +#else // HAVE_LEFDEF cerr << Warning("Dummy LEF parser call for %s.",libPath.c_str()) << endl; -# endif // HAVE_LEFDEF +#endif // HAVE_LEFDEF callNumber++; } @@ -647,7 +647,7 @@ void CParsLEFTechno ( string fileTechno ) { static int callNumber = 0; -# if HAVE_LEFDEF && defined(LEF_ENABLED) +# if defined(HAVE_LEFDEF) && defined(LEF_ENABLED) string nameTechno = fileTechno; nameTechno.erase ( 0, nameTechno.find_last_of ("/")+1 ); @@ -682,9 +682,9 @@ void CParsLEFTechno ( string fileTechno ) throw ( Error("CParsLEFTechno() : Can't open file %s", fileTechno.c_str()) ); lefrRead(inLefFile, fileTechno.c_str(), (void*)(long)userData); -# else // HAVE_LEFDEF +#else // HAVE_LEFDEF cerr << Warning("Dummy LEF technology parser call for \"%s\".",fileTechno.c_str()) << endl; -# endif // HAVE_LEFDEF +#endif // HAVE_LEFDEF callNumber++; } diff --git a/lefdef/CMakeLists.txt b/lefdef/CMakeLists.txt new file mode 100644 index 00000000..295a68e9 --- /dev/null +++ b/lefdef/CMakeLists.txt @@ -0,0 +1,25 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + set(CMAKE_LEGACY_CYGWIN_WIN32 0) + project(LEFDEF) + + cmake_minimum_required(VERSION 2.8.9) + + list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/") + find_package(Bootstrap REQUIRED) + setup_project_paths(CORIOLIS) + list(INSERT CMAKE_MODULE_PATH 0 "${CRLCORE_SOURCE_DIR}/cmake_modules/") + print_cmake_module_path() + + set_cmake_policies() + set_lib_link_mode() + setup_sysconfdir("${CMAKE_INSTALL_PREFIX}") + + find_package(BISON REQUIRED) + find_package(FLEX REQUIRED) + + add_subdirectory(src) + + if(BUILD_DOC) + add_subdirectory(doc) + endif() diff --git a/lefdef/doc/CMakeLists.txt b/lefdef/doc/CMakeLists.txt new file mode 100644 index 00000000..afef31ef --- /dev/null +++ b/lefdef/doc/CMakeLists.txt @@ -0,0 +1,14 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + set ( htmlInstallDir share/doc/coriolis2/en/html ) + set ( latexInstallDir share/doc/coriolis2/en/pdf ) + set ( pdfInstallDir share/doc/coriolis2/en/pdf ) + + install ( DIRECTORY support + lefapi + defapi + lefdefref DESTINATION ${htmlInstallDir}/lefdef ) + install ( FILES lefapi/lefapi.pdf + defapi/defapi.pdf + lefdefref/lefdefref.pdf DESTINATION ${pdfInstallDir}/lefdef ) + diff --git a/lefdef/doc/defapi/appA_DEFexamples.html b/lefdef/doc/defapi/appA_DEFexamples.html new file mode 100644 index 00000000..fe3991f3 --- /dev/null +++ b/lefdef/doc/defapi/appA_DEFexamples.html @@ -0,0 +1,14778 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

A 

+

DEF Reader and Writer Examples

+

This appendix contains examples of the Cadence® Design Exchange Format (DEF) reader and writer.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF Reader Example
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF Writer Example
+
+

DEF Reader Example

+

+ #include <stdlib.h> +

+

+ #include <stdio.h> +

+

+ #include <string.h> +

+

+ #include <time.h> +

+

+ #ifndef WIN32 +

+

+ # include <unistd.h> +

+

+ #endif /* not WIN32 */ +

+

+ #include "defrReader.hpp" +

+

+ #include "defiAlias.hpp" +

+

+   +

+

+ char defaultName[64]; +

+

+ char defaultOut[64]; +

+

+   +

+

+ // Global variables +

+

+ FILE* fout; +

+

+ int userData; +

+

+ int numObjs; +

+

+ int isSumSet; // to keep track if within SUM +

+

+ int isProp = 0; // for PROPERTYDEFINITIONS +

+

+ int begOperand; // to keep track for constraint, to print - as the 1st char +

+

+ static double curVer = 0; +

+

+ static int setSNetWireCbk = 0; +

+

+   +

+

+ // TX_DIR:TRANSLATION ON +

+

+   +

+

+ void myLogFunction(const char* errMsg){ +

+

+ fprintf(fout, "ERROR: found error: %s\n", errMsg); +

+

+ } +

+

+   +

+

+ void myWarningLogFunction(const char* errMsg){ +

+

+ fprintf(fout, "WARNING: found error: %s\n", errMsg); +

+

+ } +

+

+   +

+

+ void dataError() { +

+

+ fprintf(fout, "ERROR: returned user data is not correct!\n"); +

+

+ } +

+

+   +

+

+ void checkType(defrCallbackType_e c) { +

+

+ if (c >= 0 && c <= defrDesignEndCbkType) { +

+

+ // OK +

+

+ } else { +

+

+ fprintf(fout, "ERROR: callback type is out of bounds!\n"); +

+

+ } +

+

+ } +

+

+   +

+

+   +

+

+ int done(defrCallbackType_e c, void* dummy, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "END DESIGN\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int endfunc(defrCallbackType_e c, void* dummy, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ char* orientStr(int orient) { +

+

+ switch (orient) { +

+

+ case 0: return ((char*)"N"); +

+

+ case 1: return ((char*)"W"); +

+

+ case 2: return ((char*)"S"); +

+

+ case 3: return ((char*)"E"); +

+

+ case 4: return ((char*)"FN"); +

+

+ case 5: return ((char*)"FW"); +

+

+ case 6: return ((char*)"FS"); +

+

+ case 7: return ((char*)"FE"); +

+

+ }; +

+

+ return ((char*)"BOGUS"); +

+

+ } +

+

+   +

+

+   +

+

+ int compf(defrCallbackType_e c, defiComponent* co, defiUserData ud) { +

+

+ int i; +

+

+   +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "- %s %s ", co->defiComponent::id(), +

+

+ co->defiComponent::name()); +

+

+ if (co->defiComponent::hasNets()) { +

+

+ for (i = 0; i < co->defiComponent::numNets(); i++) +

+

+ fprintf(fout, "%s ", co->defiComponent::net(i)); +

+

+ } +

+

+ if (co->defiComponent::isFixed()) +

+

+ fprintf(fout, "+ FIXED %d %d %s ", +

+

+ co->defiComponent::placementX(), +

+

+ co->defiComponent::placementY(), +

+

+ //orientStr(co->defiComponent::placementOrient())); +

+

+ co->defiComponent::placementOrientStr()); +

+

+ if (co->defiComponent::isCover()) +

+

+ fprintf(fout, "+ COVER %d %d %s ", +

+

+ co->defiComponent::placementX(), +

+

+ co->defiComponent::placementY(), +

+

+ orientStr(co->defiComponent::placementOrient())); +

+

+ if (co->defiComponent::isPlaced()) +

+

+ fprintf(fout,"+ PLACED %d %d %s ", +

+

+ co->defiComponent::placementX(), +

+

+ co->defiComponent::placementY(), +

+

+ orientStr(co->defiComponent::placementOrient())); +

+

+ if (co->defiComponent::isUnplaced()) { +

+

+ fprintf(fout,"+ UNPLACED "); +

+

+ if ((co->defiComponent::placementX() != -1) || +

+

+ (co->defiComponent::placementY() != -1)) +

+

+ fprintf(fout,"%d %d %s ", +

+

+ co->defiComponent::placementX(), +

+

+ co->defiComponent::placementY(), +

+

+ orientStr(co->defiComponent::placementOrient())); +

+

+ } +

+

+ if (co->defiComponent::hasSource()) +

+

+ fprintf(fout, "+ SOURCE %s ", co->defiComponent::source()); +

+

+ if (co->defiComponent::hasGenerate()) { +

+

+ fprintf(fout, "+ GENERATE %s ", co->defiComponent::generateName()); +

+

+ if (co->defiComponent::macroName() && +

+

+ *(co->defiComponent::macroName())) +

+

+ fprintf(fout, "%s ", co->defiComponent::macroName()); +

+

+ } +

+

+ if (co->defiComponent::hasWeight()) +

+

+ fprintf(fout, "+ WEIGHT %d ", co->defiComponent::weight()); +

+

+ if (co->defiComponent::hasEEQ()) +

+

+ fprintf(fout, "+ EEQMASTER %s ", co->defiComponent::EEQ()); +

+

+ if (co->defiComponent::hasRegionName()) +

+

+ fprintf(fout, "+ REGION %s ", co->defiComponent::regionName()); +

+

+ if (co->defiComponent::hasRegionBounds()) { +

+

+ int *xl, *yl, *xh, *yh; +

+

+ int size; +

+

+ co->defiComponent::regionBounds(&size, &xl, &yl, &xh, &yh); +

+

+ for (i = 0; i < size; i++) { +

+

+ fprintf(fout, "+ REGION %d %d %d %d \n", +

+

+ xl[i], yl[i], xh[i], yh[i]); +

+

+ } +

+

+ } +

+

+ if (co->defiComponent::hasHalo()) { +

+

+ int left, bottom, right, top; +

+

+ (void) co->defiComponent::haloEdges(&left, &bottom, &right, &top); +

+

+ fprintf(fout, "+ HALO "); +

+

+ if (co->defiComponent::hasHaloSoft()) +

+

+ fprintf(fout, "SOFT "); +

+

+ fprintf(fout, "%d %d %d %d\n", left, bottom, right, top); +

+

+ } +

+

+ if (co->defiComponent::hasRouteHalo()) { +

+

+ fprintf(fout, "+ ROUTEHALO %d %s %s\n", co->defiComponent::haloDist(), +

+

+ co->defiComponent::minLayer(), co->defiComponent::maxLayer()); +

+

+ } +

+

+ if (co->defiComponent::hasForeignName()) { +

+

+ fprintf(fout, "+ FOREIGN %s %d %d %s %d ", +

+

+ co->defiComponent::foreignName(), co->defiComponent::foreignX(), +

+

+ co->defiComponent::foreignY(), co->defiComponent::foreignOri(), +

+

+ co->defiComponent::foreignOrient()); +

+

+ } +

+

+ if (co->defiComponent::numProps()) { +

+

+ for (i = 0; i < co->defiComponent::numProps(); i++) { +

+

+ fprintf(fout, "+ PROPERTY %s %s ", co->defiComponent::propName(i), +

+

+ co->defiComponent::propValue(i)); +

+

+ switch (co->defiComponent::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END COMPONENTS\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int netpath(defrCallbackType_e c, defiNet* ppath, defiUserData ud) { +

+

+ fprintf(fout, "\n"); +

+

+   +

+

+ fprintf (fout, "Callback of partial path for net\n"); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int netNamef(defrCallbackType_e c, const char* netName, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "- %s ", netName); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int subnetNamef(defrCallbackType_e c, const char* subnetName, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (curVer >= 5.6) +

+

+ fprintf(fout, " + SUBNET CBK %s ", subnetName); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int nondefRulef(defrCallbackType_e c, const char* ruleName, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (curVer >= 5.6) +

+

+ fprintf(fout, " + NONDEFAULTRULE CBK %s ", ruleName); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int netf(defrCallbackType_e c, defiNet* net, defiUserData ud) { +

+

+ // For net and special net. +

+

+ int i, j, k, x, y, z, count, newLayer; +

+

+ defiPath* p; +

+

+ defiSubnet *s; +

+

+ int path; +

+

+ defiVpin *vpin; +

+

+ // defiShield *noShield; +

+

+ defiWire *wire; +

+

+   +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (c != defrNetCbkType) +

+

+ fprintf(fout, "BOGUS NET TYPE "); +

+

+ if (net->defiNet::pinIsMustJoin(0)) +

+

+ fprintf(fout, "- MUSTJOIN "); +

+

+ +

+

+ // compName & pinName +

+

+ for (i = 0; i < net->defiNet::numConnections(); i++) { +

+

+ // set the limit of only 5 items per line +

+

+ count++; +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ fprintf(fout, "( %s %s ) ", net->defiNet::instance(i), +

+

+ net->defiNet::pin(i)); +

+

+ if (net->defiNet::pinIsSynthesized(i)) +

+

+ fprintf(fout, "+ SYNTHESIZED "); +

+

+ } +

+

+   +

+

+ if (net->hasNonDefaultRule()) +

+

+ fprintf(fout, "+ NONDEFAULTRULE %s\n", net->nonDefaultRule()); +

+

+   +

+

+ for (i = 0; i < net->defiNet::numVpins(); i++) { +

+

+ vpin = net->defiNet::vpin(i); +

+

+ fprintf(fout, " + %s", vpin->name()); +

+

+ if (vpin->layer()) +

+

+ fprintf(fout, " %s", vpin->layer()); +

+

+ fprintf(fout, " %d %d %d %d", vpin->xl(), vpin->yl(), vpin->xh(), +

+

+ vpin->yh()); +

+

+ if (vpin->status() != ' ') { +

+

+ fprintf(fout, " %c", vpin->status()); +

+

+ fprintf(fout, " %d %d", vpin->xLoc(), vpin->yLoc()); +

+

+ if (vpin->orient() != -1) +

+

+ fprintf(fout, " %s", orientStr(vpin->orient())); +

+

+ } +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+   +

+

+ // regularWiring +

+

+ if (net->defiNet::numWires()) { +

+

+ for (i = 0; i < net->defiNet::numWires(); i++) { +

+

+ newLayer = 0; +

+

+ wire = net->defiNet::wire(i); +

+

+ fprintf(fout, "\n + %s ", wire->wireType()); +

+

+ count = 0; +

+

+ for (j = 0; j < wire->defiWire::numPaths(); j++) { +

+

+ p = wire->defiWire::path(j); +

+

+ p->initTraverse(); +

+

+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) { +

+

+ count++; +

+

+ // Don't want the line to be too long +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ switch (path) { +

+

+ case DEFIPATH_LAYER: +

+

+ if (newLayer == 0) { +

+

+ fprintf(fout, "%s ", p->defiPath::getLayer()); +

+

+ newLayer = 1; +

+

+ } else +

+

+ fprintf(fout, "NEW %s ", p->defiPath::getLayer()); +

+

+ break; +

+

+ case DEFIPATH_VIA: +

+

+ fprintf(fout, "%s ", p->defiPath::getVia()); +

+

+ break; +

+

+ case DEFIPATH_VIAROTATION: +

+

+ fprintf(fout, "%s ", +

+

+ orientStr(p->defiPath::getViaRotation())); +

+

+ break; +

+

+ case DEFIPATH_WIDTH: +

+

+ fprintf(fout, "%d ", p->defiPath::getWidth()); +

+

+ break; +

+

+ case DEFIPATH_POINT: +

+

+ p->defiPath::getPoint(&x, &y); +

+

+ fprintf(fout, "( %d %d ) ", x, y); +

+

+ break; +

+

+ case DEFIPATH_FLUSHPOINT: +

+

+ p->defiPath::getFlushPoint(&x, &y, &z); +

+

+ fprintf(fout, "( %d %d %d ) ", x, y, z); +

+

+ break; +

+

+ case DEFIPATH_TAPER: +

+

+ fprintf(fout, "TAPER "); +

+

+ break; +

+

+ case DEFIPATH_TAPERRULE: +

+

+ fprintf(fout, "TAPERRULE %s ",p->defiPath::getTaperRule()); +

+

+ break; +

+

+ case DEFIPATH_STYLE: +

+

+ fprintf(fout, "STYLE %d ",p->defiPath::getStyle()); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ } +

+

+   +

+

+ // SHIELDNET +

+

+ if (net->defiNet::numShieldNets()) { +

+

+ for (i = 0; i < net->defiNet::numShieldNets(); i++) +

+

+ fprintf(fout, "\n + SHIELDNET %s", net->defiNet::shieldNet(i)); +

+

+ } +

+

+   +

+

+ if (net->defiNet::hasSubnets()) { +

+

+ for (i = 0; i < net->defiNet::numSubnets(); i++) { +

+

+ s = net->defiNet::subnet(i); +

+

+ fprintf(fout, "\n"); +

+

+ +

+

+ if (s->defiSubnet::numConnections()) { +

+

+ if (s->defiSubnet::pinIsMustJoin(0)) +

+

+ fprintf(fout, "- MUSTJOIN "); +

+

+ else +

+

+ fprintf(fout, " + SUBNET %s ", s->defiSubnet::name()); +

+

+ for (j = 0; j < s->defiSubnet::numConnections(); j++) +

+

+ fprintf(fout, " ( %s %s )\n", s->defiSubnet::instance(j), +

+

+ s->defiSubnet::pin(j)); +

+

+   +

+

+ // regularWiring +

+

+ if (s->defiSubnet::numWires()) { +

+

+ for (k = 0; k < s->defiSubnet::numWires(); k++) { +

+

+ newLayer = 0; +

+

+ wire = s->defiSubnet::wire(k); +

+

+ fprintf(fout, " %s ", wire->wireType()); +

+

+ count = 0; +

+

+ for (j = 0; j < wire->defiWire::numPaths(); j++) { +

+

+ p = wire->defiWire::path(j); +

+

+ p->initTraverse(); +

+

+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) { +

+

+ count++; +

+

+ // Don't want the line to be too long +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ switch (path) { +

+

+ case DEFIPATH_LAYER: +

+

+ if (newLayer == 0) { +

+

+ fprintf(fout, "%s ", p->defiPath::getLayer()); +

+

+ newLayer = 1; +

+

+ } else +

+

+ fprintf(fout, "NEW %s ", +

+

+ p->defiPath::getLayer()); +

+

+ break; +

+

+ case DEFIPATH_VIA: +

+

+ fprintf(fout, "%s ", p->defiPath::getVia()); +

+

+ break; +

+

+ case DEFIPATH_VIAROTATION: +

+

+ fprintf(fout, "%s ", +

+

+ p->defiPath::getViaRotationStr()); +

+

+ break; +

+

+ case DEFIPATH_WIDTH: +

+

+ fprintf(fout, "%d ", p->defiPath::getWidth()); +

+

+ break; +

+

+ case DEFIPATH_POINT: +

+

+ p->defiPath::getPoint(&x, &y); +

+

+ fprintf(fout, "( %d %d ) ", x, y); +

+

+ break; +

+

+ case DEFIPATH_FLUSHPOINT: +

+

+ p->defiPath::getFlushPoint(&x, &y, &z); +

+

+ fprintf(fout, "( %d %d %d ) ", x, y, z); +

+

+ break; +

+

+ case DEFIPATH_TAPER: +

+

+ fprintf(fout, "TAPER "); +

+

+ break; +

+

+ case DEFIPATH_TAPERRULE: +

+

+ fprintf(fout, "TAPERRULE %s ", +

+

+ p->defiPath::getTaperRule()); +

+

+ break; +

+

+ case DEFIPATH_STYLE: +

+

+ fprintf(fout, "STYLE %d ", +

+

+ p->defiPath::getStyle()); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ if (net->defiNet::numProps()) { +

+

+ for (i = 0; i < net->defiNet::numProps(); i++) { +

+

+ fprintf(fout, " + PROPERTY %s ", net->defiNet::propName(i)); +

+

+ switch (net->defiNet::propType(i)) { +

+

+ case 'R': fprintf(fout, "%g REAL ", net->defiNet::propNumber(i)); +

+

+ break; +

+

+ case 'I': fprintf(fout, "%g INTEGER ", net->defiNet::propNumber(i)); +

+

+ break; +

+

+ case 'S': fprintf(fout, "%s STRING ", net->defiNet::propValue(i)); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "%s QUOTESTRING ", net->defiNet::propValue(i)); +

+

+ break; +

+

+ case 'N': fprintf(fout, "%g NUMBER ", net->defiNet::propNumber(i)); +

+

+ break; +

+

+ } +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (net->defiNet::hasWeight()) +

+

+ fprintf(fout, "+ WEIGHT %d ", net->defiNet::weight()); +

+

+ if (net->defiNet::hasCap()) +

+

+ fprintf(fout, "+ ESTCAP %g ", net->defiNet::cap()); +

+

+ if (net->defiNet::hasSource()) +

+

+ fprintf(fout, "+ SOURCE %s ", net->defiNet::source()); +

+

+ if (net->defiNet::hasFixedbump()) +

+

+ fprintf(fout, "+ FIXEDBUMP "); +

+

+ if (net->defiNet::hasFrequency()) +

+

+ fprintf(fout, "+ FREQUENCY %g ", net->defiNet::frequency()); +

+

+ if (net->defiNet::hasPattern()) +

+

+ fprintf(fout, "+ PATTERN %s ", net->defiNet::pattern()); +

+

+ if (net->defiNet::hasOriginal()) +

+

+ fprintf(fout, "+ ORIGINAL %s ", net->defiNet::original()); +

+

+ if (net->defiNet::hasUse()) +

+

+ fprintf(fout, "+ USE %s ", net->defiNet::use()); +

+

+   +

+

+ fprintf (fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END NETS\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int snetpath(defrCallbackType_e c, defiNet* ppath, defiUserData ud) { +

+

+ int i, j, x, y, z, count, newLayer; +

+

+ char* layerName; +

+

+ double dist, left, right; +

+

+ defiPath* p; +

+

+ defiSubnet *s; +

+

+ int path; +

+

+ defiShield* shield; +

+

+ defiWire* wire; +

+

+ int numX, numY, stepX, stepY; +

+

+   +

+

+ if (c != defrSNetPartialPathCbkType) +

+

+ return 1; +

+

+ if ((long)ud != userData) dataError(); +

+

+   +

+

+ fprintf (fout, "SPECIALNET partial data\n"); +

+

+   +

+

+ fprintf(fout, "- %s ", ppath->defiNet::name()); +

+

+   +

+

+ count = 0; +

+

+ // compName & pinName +

+

+ for (i = 0; i < ppath->defiNet::numConnections(); i++) { +

+

+ // set the limit of only 5 items print out in one line +

+

+ count++; +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ fprintf (fout, "( %s %s ) ", ppath->defiNet::instance(i), +

+

+ ppath->defiNet::pin(i)); +

+

+ if (ppath->defiNet::pinIsSynthesized(i)) +

+

+ fprintf(fout, "+ SYNTHESIZED "); +

+

+ } +

+

+   +

+

+ // specialWiring +

+

+ // POLYGON +

+

+ if (ppath->defiNet::numPolygons()) { +

+

+ struct defiPoints points; +

+

+ for (i = 0; i < ppath->defiNet::numPolygons(); i++) { +

+

+ fprintf(fout, "\n + POLYGON %s ", ppath->polygonName(i)); +

+

+ points = ppath->getPolygon(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ } +

+

+ } +

+

+ // RECT +

+

+ if (ppath->defiNet::numRectangles()) { +

+

+ for (i = 0; i < ppath->defiNet::numRectangles(); i++) { +

+

+ fprintf(fout, "\n + RECT %s %d %d %d %d", ppath->defiNet::rectName(i), +

+

+ ppath->defiNet::xl(i), ppath->defiNet::yl(i), +

+

+ ppath->defiNet::xh(i), ppath->defiNet::yh(i)); +

+

+ } +

+

+ } +

+

+   +

+

+ // COVER, FIXED, ROUTED or SHIELD +

+

+ if (ppath->defiNet::numWires()) { +

+

+ newLayer = 0; +

+

+ for (i = 0; i < ppath->defiNet::numWires(); i++) { +

+

+ newLayer = 0; +

+

+ wire = ppath->defiNet::wire(i); +

+

+ fprintf(fout, "\n + %s ", wire->wireType()); +

+

+ if (strcmp (wire->wireType(), "SHIELD") == 0) +

+

+ fprintf(fout, "%s ", wire->wireShieldNetName()); +

+

+ for (j = 0; j < wire->defiWire::numPaths(); j++) { +

+

+ p = wire->defiWire::path(j); +

+

+ p->initTraverse(); +

+

+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) { +

+

+ count++; +

+

+ // Don't want the line to be too long +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ switch (path) { +

+

+ case DEFIPATH_LAYER: +

+

+ if (newLayer == 0) { +

+

+ fprintf(fout, "%s ", p->defiPath::getLayer()); +

+

+ newLayer = 1; +

+

+ } else +

+

+ fprintf(fout, "NEW %s ", p->defiPath::getLayer()); +

+

+ break; +

+

+ case DEFIPATH_VIA: +

+

+ fprintf(fout, "%s ", p->defiPath::getVia()); +

+

+ break; +

+

+ case DEFIPATH_VIAROTATION: +

+

+ fprintf(fout, "%s ", +

+

+ orientStr(p->defiPath::getViaRotation())); +

+

+ break; +

+

+ case DEFIPATH_VIADATA: +

+

+ p->defiPath::getViaData(&numX, &numY, &stepX, &stepY); +

+

+ fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY, +

+

+ stepX, stepY); +

+

+ break; +

+

+ case DEFIPATH_WIDTH: +

+

+ fprintf(fout, "%d ", p->defiPath::getWidth()); +

+

+ break; +

+

+ case DEFIPATH_POINT: +

+

+ p->defiPath::getPoint(&x, &y); +

+

+ fprintf(fout, "( %d %d ) ", x, y); +

+

+ break; +

+

+ case DEFIPATH_FLUSHPOINT: +

+

+ p->defiPath::getFlushPoint(&x, &y, &z); +

+

+ fprintf(fout, "( %d %d %d ) ", x, y, z); +

+

+ break; +

+

+ case DEFIPATH_TAPER: +

+

+ fprintf(fout, "TAPER "); +

+

+ break; +

+

+ case DEFIPATH_SHAPE: +

+

+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape()); +

+

+ break; +

+

+ case DEFIPATH_STYLE: +

+

+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle()); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ } +

+

+   +

+

+ if (ppath->defiNet::hasSubnets()) { +

+

+ for (i = 0; i < ppath->defiNet::numSubnets(); i++) { +

+

+ s = ppath->defiNet::subnet(i); +

+

+ if (s->defiSubnet::numConnections()) { +

+

+ if (s->defiSubnet::pinIsMustJoin(0)) +

+

+ fprintf(fout, "- MUSTJOIN "); +

+

+ else +

+

+ fprintf(fout, "- %s ", s->defiSubnet::name()); +

+

+ for (j = 0; j < s->defiSubnet::numConnections(); j++) { +

+

+ fprintf(fout, " ( %s %s )\n", s->defiSubnet::instance(j), +

+

+ s->defiSubnet::pin(j)); +

+

+ } +

+

+ } +

+

+   +

+

+ // regularWiring +

+

+ if (s->defiSubnet::numWires()) { +

+

+ for (i = 0; i < s->defiSubnet::numWires(); i++) { +

+

+ wire = s->defiSubnet::wire(i); +

+

+ fprintf(fout, " + %s ", wire->wireType()); +

+

+ for (j = 0; j < wire->defiWire::numPaths(); j++) { +

+

+ p = wire->defiWire::path(j); +

+

+ p->defiPath::print(fout); +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ if (ppath->defiNet::numProps()) { +

+

+ for (i = 0; i < ppath->defiNet::numProps(); i++) { +

+

+ if (ppath->defiNet::propIsString(i)) +

+

+ fprintf(fout, " + PROPERTY %s %s ", ppath->defiNet::propName(i), +

+

+ ppath->defiNet::propValue(i)); +

+

+ if (ppath->defiNet::propIsNumber(i)) +

+

+ fprintf(fout, " + PROPERTY %s %g ", ppath->defiNet::propName(i), +

+

+ ppath->defiNet::propNumber(i)); +

+

+ switch (ppath->defiNet::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ // SHIELD +

+

+ count = 0; +

+

+ // testing the SHIELD for 5.3, obsolete in 5.4 +

+

+ if (ppath->defiNet::numShields()) { +

+

+ for (i = 0; i < ppath->defiNet::numShields(); i++) { +

+

+ shield = ppath->defiNet::shield(i); +

+

+ fprintf(fout, "\n + SHIELD %s ", shield->defiShield::shieldName()); +

+

+ newLayer = 0; +

+

+ for (j = 0; j < shield->defiShield::numPaths(); j++) { +

+

+ p = shield->defiShield::path(j); +

+

+ p->initTraverse(); +

+

+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) { +

+

+ count++; +

+

+ // Don't want the line to be too long +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ switch (path) { +

+

+ case DEFIPATH_LAYER: +

+

+ if (newLayer == 0) { +

+

+ fprintf(fout, "%s ", p->defiPath::getLayer()); +

+

+ newLayer = 1; +

+

+ } else +

+

+ fprintf(fout, "NEW %s ", p->defiPath::getLayer()); +

+

+ break; +

+

+ case DEFIPATH_VIA: +

+

+ fprintf(fout, "%s ", p->defiPath::getVia()); +

+

+ break; +

+

+ case DEFIPATH_VIAROTATION: +

+

+ if (newLayer) +

+

+ fprintf(fout, "%s ", +

+

+ orientStr(p->defiPath::getViaRotation())); +

+

+ else +

+

+ fprintf(fout, "Str %s ", +

+

+ p->defiPath::getViaRotationStr()); +

+

+ break; +

+

+ case DEFIPATH_WIDTH: +

+

+ fprintf(fout, "%d ", p->defiPath::getWidth()); +

+

+ break; +

+

+ case DEFIPATH_POINT: +

+

+ p->defiPath::getPoint(&x, &y); +

+

+ fprintf(fout, "( %d %d ) ", x, y); +

+

+ break; +

+

+ case DEFIPATH_FLUSHPOINT: +

+

+ p->defiPath::getFlushPoint(&x, &y, &z); +

+

+ fprintf(fout, "( %d %d %d ) ", x, y, z); +

+

+ break; +

+

+ case DEFIPATH_TAPER: +

+

+ fprintf(fout, "TAPER "); +

+

+ break; +

+

+ case DEFIPATH_SHAPE: +

+

+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape()); +

+

+ break; +

+

+ case DEFIPATH_STYLE: +

+

+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle()); +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ // layerName width +

+

+ if (ppath->defiNet::hasWidthRules()) { +

+

+ for (i = 0; i < ppath->defiNet::numWidthRules(); i++) { +

+

+ ppath->defiNet::widthRule(i, &layerName, &dist); +

+

+ fprintf (fout, "\n + WIDTH %s %g ", layerName, dist); +

+

+ } +

+

+ } +

+

+   +

+

+ // layerName spacing +

+

+ if (ppath->defiNet::hasSpacingRules()) { +

+

+ for (i = 0; i < ppath->defiNet::numSpacingRules(); i++) { +

+

+ ppath->defiNet::spacingRule(i, &layerName, &dist, &left, &right); +

+

+ if (left == right) +

+

+ fprintf (fout, "\n + SPACING %s %g ", layerName, dist); +

+

+ else +

+

+ fprintf (fout, "\n + SPACING %s %g RANGE %g %g ", +

+

+ layerName, dist, left, right); +

+

+ } +

+

+ } +

+

+   +

+

+ if (ppath->defiNet::hasFixedbump()) +

+

+ fprintf(fout, "\n + FIXEDBUMP "); +

+

+ if (ppath->defiNet::hasFrequency()) +

+

+ fprintf(fout, "\n + FREQUENCY %g ", ppath->defiNet::frequency()); +

+

+ if (ppath->defiNet::hasVoltage()) +

+

+ fprintf(fout, "\n + VOLTAGE %g ", ppath->defiNet::voltage()); +

+

+ if (ppath->defiNet::hasWeight()) +

+

+ fprintf(fout, "\n + WEIGHT %d ", ppath->defiNet::weight()); +

+

+ if (ppath->defiNet::hasCap()) +

+

+ fprintf(fout, "\n + ESTCAP %g ", ppath->defiNet::cap()); +

+

+ if (ppath->defiNet::hasSource()) +

+

+ fprintf(fout, "\n + SOURCE %s ", ppath->defiNet::source()); +

+

+ if (ppath->defiNet::hasPattern()) +

+

+ fprintf(fout, "\n + PATTERN %s ", ppath->defiNet::pattern()); +

+

+ if (ppath->defiNet::hasOriginal()) +

+

+ fprintf(fout, "\n + ORIGINAL %s ", ppath->defiNet::original()); +

+

+ if (ppath->defiNet::hasUse()) +

+

+ fprintf(fout, "\n + USE %s ", ppath->defiNet::use()); +

+

+   +

+

+ fprintf(fout, "\n"); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int snetwire(defrCallbackType_e c, defiNet* ppath, defiUserData ud) { +

+

+ int i, j, x, y, z, count = 0, newLayer; +

+

+ defiPath* p; +

+

+ int path; +

+

+ defiWire* wire; +

+

+ defiShield* shield; +

+

+ int numX, numY, stepX, stepY; +

+

+   +

+

+ if (c != defrSNetWireCbkType) +

+

+ return 1; +

+

+ if ((long)ud != userData) dataError(); +

+

+   +

+

+ fprintf (fout, "SPECIALNET wire data\n"); +

+

+   +

+

+ fprintf(fout, "- %s ", ppath->defiNet::name()); +

+

+   +

+

+ // specialWiring +

+

+ if (ppath->defiNet::numWires()) { +

+

+ newLayer = 0; +

+

+ for (i = 0; i < ppath->defiNet::numWires(); i++) { +

+

+ newLayer = 0; +

+

+ wire = ppath->defiNet::wire(i); +

+

+ fprintf(fout, "\n + %s ", wire->wireType()); +

+

+ if (strcmp (wire->wireType(), "SHIELD") == 0) +

+

+ fprintf(fout, "%s ", wire->wireShieldNetName()); +

+

+ for (j = 0; j < wire->defiWire::numPaths(); j++) { +

+

+ p = wire->defiWire::path(j); +

+

+ p->initTraverse(); +

+

+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) { +

+

+ count++; +

+

+ // Don't want the line to be too long +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ switch (path) { +

+

+ case DEFIPATH_LAYER: +

+

+ if (newLayer == 0) { +

+

+ fprintf(fout, "%s ", p->defiPath::getLayer()); +

+

+ newLayer = 1; +

+

+ } else +

+

+ fprintf(fout, "NEW %s ", p->defiPath::getLayer()); +

+

+ break; +

+

+ case DEFIPATH_VIA: +

+

+ fprintf(fout, "%s ", p->defiPath::getVia()); +

+

+ break; +

+

+ case DEFIPATH_VIAROTATION: +

+

+ fprintf(fout, "%s ", +

+

+ orientStr(p->defiPath::getViaRotation())); +

+

+ break; +

+

+ case DEFIPATH_VIADATA: +

+

+ p->defiPath::getViaData(&numX, &numY, &stepX, &stepY); +

+

+ fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY, +

+

+ stepX, stepY); +

+

+ break; +

+

+ case DEFIPATH_WIDTH: +

+

+ fprintf(fout, "%d ", p->defiPath::getWidth()); +

+

+ break; +

+

+ case DEFIPATH_POINT: +

+

+ p->defiPath::getPoint(&x, &y); +

+

+ fprintf(fout, "( %d %d ) ", x, y); +

+

+ break; +

+

+ case DEFIPATH_FLUSHPOINT: +

+

+ p->defiPath::getFlushPoint(&x, &y, &z); +

+

+ fprintf(fout, "( %d %d %d ) ", x, y, z); +

+

+ break; +

+

+ case DEFIPATH_TAPER: +

+

+ fprintf(fout, "TAPER "); +

+

+ break; +

+

+ case DEFIPATH_SHAPE: +

+

+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape()); +

+

+ break; +

+

+ case DEFIPATH_STYLE: +

+

+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle()); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ } else if (ppath->defiNet::numShields()) { +

+

+ for (i = 0; i < ppath->defiNet::numShields(); i++) { +

+

+ shield = ppath->defiNet::shield(i); +

+

+ fprintf(fout, "\n + SHIELD %s ", shield->defiShield::shieldName()); +

+

+ newLayer = 0; +

+

+ for (j = 0; j < shield->defiShield::numPaths(); j++) { +

+

+ p = shield->defiShield::path(j); +

+

+ p->initTraverse(); +

+

+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) { +

+

+ count++; +

+

+ // Don't want the line to be too long +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ switch (path) { +

+

+ case DEFIPATH_LAYER: +

+

+ if (newLayer == 0) { +

+

+ fprintf(fout, "%s ", p->defiPath::getLayer()); +

+

+ newLayer = 1; +

+

+ } else +

+

+ fprintf(fout, "NEW %s ", p->defiPath::getLayer()); +

+

+ break; +

+

+ case DEFIPATH_VIA: +

+

+ fprintf(fout, "%s ", p->defiPath::getVia()); +

+

+ break; +

+

+ case DEFIPATH_VIAROTATION: +

+

+ fprintf(fout, "%s ", +

+

+ orientStr(p->defiPath::getViaRotation())); +

+

+ break; +

+

+ case DEFIPATH_WIDTH: +

+

+ fprintf(fout, "%d ", p->defiPath::getWidth()); +

+

+ break; +

+

+ case DEFIPATH_POINT: +

+

+ p->defiPath::getPoint(&x, &y); +

+

+ fprintf(fout, "( %d %d ) ", x, y); +

+

+ break; +

+

+ case DEFIPATH_FLUSHPOINT: +

+

+ p->defiPath::getFlushPoint(&x, &y, &z); +

+

+ fprintf(fout, "( %d %d %d ) ", x, y, z); +

+

+ break; +

+

+ case DEFIPATH_TAPER: +

+

+ fprintf(fout, "TAPER "); +

+

+ break; +

+

+ case DEFIPATH_SHAPE: +

+

+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape()); +

+

+ break; +

+

+ case DEFIPATH_STYLE: +

+

+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle()); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ fprintf(fout, "\n"); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int snetf(defrCallbackType_e c, defiNet* net, defiUserData ud) { +

+

+ // For net and special net. +

+

+ int i, j, x, y, z, count, newLayer; +

+

+ char* layerName; +

+

+ double dist, left, right; +

+

+ defiPath* p; +

+

+ defiSubnet *s; +

+

+ int path; +

+

+ defiShield* shield; +

+

+ defiWire* wire; +

+

+ int numX, numY, stepX, stepY; +

+

+   +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (c != defrSNetCbkType) +

+

+ fprintf(fout, "BOGUS NET TYPE "); +

+

+   +

+

+ count = 0; +

+

+ // compName & pinName +

+

+ for (i = 0; i < net->defiNet::numConnections(); i++) { +

+

+ // set the limit of only 5 items print out in one line +

+

+ count++; +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ fprintf (fout, "( %s %s ) ", net->defiNet::instance(i), +

+

+ net->defiNet::pin(i)); +

+

+ if (net->defiNet::pinIsSynthesized(i)) +

+

+ fprintf(fout, "+ SYNTHESIZED "); +

+

+ } +

+

+   +

+

+ // specialWiring +

+

+ if (net->defiNet::numWires()) { +

+

+ newLayer = 0; +

+

+ for (i = 0; i < net->defiNet::numWires(); i++) { +

+

+ newLayer = 0; +

+

+ wire = net->defiNet::wire(i); +

+

+ fprintf(fout, "\n + %s ", wire->wireType()); +

+

+ if (strcmp (wire->wireType(), "SHIELD") == 0) +

+

+ fprintf(fout, "%s ", wire->wireShieldNetName()); +

+

+ for (j = 0; j < wire->defiWire::numPaths(); j++) { +

+

+ p = wire->defiWire::path(j); +

+

+ p->initTraverse(); +

+

+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) { +

+

+ count++; +

+

+ // Don't want the line to be too long +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ switch (path) { +

+

+ case DEFIPATH_LAYER: +

+

+ if (newLayer == 0) { +

+

+ fprintf(fout, "%s ", p->defiPath::getLayer()); +

+

+ newLayer = 1; +

+

+ } else +

+

+ fprintf(fout, "NEW %s ", p->defiPath::getLayer()); +

+

+ break; +

+

+ case DEFIPATH_VIA: +

+

+ fprintf(fout, "%s ", p->defiPath::getVia()); +

+

+ break; +

+

+ case DEFIPATH_VIAROTATION: +

+

+ fprintf(fout, "%s ", +

+

+ orientStr(p->defiPath::getViaRotation())); +

+

+ break; +

+

+ case DEFIPATH_VIADATA: +

+

+ p->defiPath::getViaData(&numX, &numY, &stepX, &stepY); +

+

+ fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY, +

+

+ stepX, stepY); +

+

+ break; +

+

+ case DEFIPATH_WIDTH: +

+

+ fprintf(fout, "%d ", p->defiPath::getWidth()); +

+

+ break; +

+

+ case DEFIPATH_POINT: +

+

+ p->defiPath::getPoint(&x, &y); +

+

+ fprintf(fout, "( %d %d ) ", x, y); +

+

+ break; +

+

+ case DEFIPATH_FLUSHPOINT: +

+

+ p->defiPath::getFlushPoint(&x, &y, &z); +

+

+ fprintf(fout, "( %d %d %d ) ", x, y, z); +

+

+ break; +

+

+ case DEFIPATH_TAPER: +

+

+ fprintf(fout, "TAPER "); +

+

+ break; +

+

+ case DEFIPATH_SHAPE: +

+

+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape()); +

+

+ break; +

+

+ case DEFIPATH_STYLE: +

+

+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle()); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ } +

+

+ // POLYGON +

+

+ if (net->defiNet::numPolygons()) { +

+

+ struct defiPoints points; +

+

+ for (i = 0; i < net->defiNet::numPolygons(); i++) { +

+

+ fprintf(fout, "\n + POLYGON %s ", net->polygonName(i)); +

+

+ points = net->getPolygon(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ } +

+

+ } +

+

+ // RECT +

+

+ if (net->defiNet::numRectangles()) { +

+

+ for (i = 0; i < net->defiNet::numRectangles(); i++) { +

+

+ fprintf(fout, "\n + RECT %s %d %d %d %d", net->defiNet::rectName(i), +

+

+ net->defiNet::xl(i), net->defiNet::yl(i), net->defiNet::xh(i), +

+

+ net->defiNet::yh(i)); +

+

+ } +

+

+ } +

+

+   +

+

+ if (net->defiNet::hasSubnets()) { +

+

+ for (i = 0; i < net->defiNet::numSubnets(); i++) { +

+

+ s = net->defiNet::subnet(i); +

+

+ if (s->defiSubnet::numConnections()) { +

+

+ if (s->defiSubnet::pinIsMustJoin(0)) +

+

+ fprintf(fout, "- MUSTJOIN "); +

+

+ else +

+

+ fprintf(fout, "- %s ", s->defiSubnet::name()); +

+

+ for (j = 0; j < s->defiSubnet::numConnections(); j++) { +

+

+ fprintf(fout, " ( %s %s )\n", s->defiSubnet::instance(j), +

+

+ s->defiSubnet::pin(j)); +

+

+ } +

+

+ } +

+

+ +

+

+ // regularWiring +

+

+ if (s->defiSubnet::numWires()) { +

+

+ for (i = 0; i < s->defiSubnet::numWires(); i++) { +

+

+ wire = s->defiSubnet::wire(i); +

+

+ fprintf(fout, " + %s ", wire->wireType()); +

+

+ for (j = 0; j < wire->defiWire::numPaths(); j++) { +

+

+ p = wire->defiWire::path(j); +

+

+ p->defiPath::print(fout); +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ if (net->defiNet::numProps()) { +

+

+ for (i = 0; i < net->defiNet::numProps(); i++) { +

+

+ if (net->defiNet::propIsString(i)) +

+

+ fprintf(fout, " + PROPERTY %s %s ", net->defiNet::propName(i), +

+

+ net->defiNet::propValue(i)); +

+

+ if (net->defiNet::propIsNumber(i)) +

+

+ fprintf(fout, " + PROPERTY %s %g ", net->defiNet::propName(i), +

+

+ net->defiNet::propNumber(i)); +

+

+ switch (net->defiNet::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ // SHIELD +

+

+ count = 0; +

+

+ // testing the SHIELD for 5.3, obsolete in 5.4 +

+

+ if (net->defiNet::numShields()) { +

+

+ for (i = 0; i < net->defiNet::numShields(); i++) { +

+

+ shield = net->defiNet::shield(i); +

+

+ fprintf(fout, "\n + SHIELD %s ", shield->defiShield::shieldName()); +

+

+ newLayer = 0; +

+

+ for (j = 0; j < shield->defiShield::numPaths(); j++) { +

+

+ p = shield->defiShield::path(j); +

+

+ p->initTraverse(); +

+

+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) { +

+

+ count++; +

+

+ // Don't want the line to be too long +

+

+ if (count >= 5) { +

+

+ fprintf(fout, "\n"); +

+

+ count = 0; +

+

+ } +

+

+ switch (path) { +

+

+ case DEFIPATH_LAYER: +

+

+ if (newLayer == 0) { +

+

+ fprintf(fout, "%s ", p->defiPath::getLayer()); +

+

+ newLayer = 1; +

+

+ } else +

+

+ fprintf(fout, "NEW %s ", p->defiPath::getLayer()); +

+

+ break; +

+

+ case DEFIPATH_VIA: +

+

+ fprintf(fout, "%s ", p->defiPath::getVia()); +

+

+ break; +

+

+ case DEFIPATH_VIAROTATION: +

+

+ fprintf(fout, "%s ", +

+

+ orientStr(p->defiPath::getViaRotation())); +

+

+ break; +

+

+ case DEFIPATH_WIDTH: +

+

+ fprintf(fout, "%d ", p->defiPath::getWidth()); +

+

+ break; +

+

+ case DEFIPATH_POINT: +

+

+ p->defiPath::getPoint(&x, &y); +

+

+ fprintf(fout, "( %d %d ) ", x, y); +

+

+ break; +

+

+ case DEFIPATH_FLUSHPOINT: +

+

+ p->defiPath::getFlushPoint(&x, &y, &z); +

+

+ fprintf(fout, "( %d %d %d ) ", x, y, z); +

+

+ break; +

+

+ case DEFIPATH_TAPER: +

+

+ fprintf(fout, "TAPER "); +

+

+ break; +

+

+ case DEFIPATH_SHAPE: +

+

+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape()); +

+

+ break; +

+

+ case DEFIPATH_STYLE: +

+

+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle()); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ // layerName width +

+

+ if (net->defiNet::hasWidthRules()) { +

+

+ for (i = 0; i < net->defiNet::numWidthRules(); i++) { +

+

+ net->defiNet::widthRule(i, &layerName, &dist); +

+

+ fprintf (fout, "\n + WIDTH %s %g ", layerName, dist); +

+

+ } +

+

+ } +

+

+   +

+

+ // layerName spacing +

+

+ if (net->defiNet::hasSpacingRules()) { +

+

+ for (i = 0; i < net->defiNet::numSpacingRules(); i++) { +

+

+ net->defiNet::spacingRule(i, &layerName, &dist, &left, &right); +

+

+ if (left == right) +

+

+ fprintf (fout, "\n + SPACING %s %g ", layerName, dist); +

+

+ else +

+

+ fprintf (fout, "\n + SPACING %s %g RANGE %g %g ", +

+

+ layerName, dist, left, right); +

+

+ } +

+

+ } +

+

+   +

+

+ if (net->defiNet::hasFixedbump()) +

+

+ fprintf(fout, "\n + FIXEDBUMP "); +

+

+ if (net->defiNet::hasFrequency()) +

+

+ fprintf(fout, "\n + FREQUENCY %g ", net->defiNet::frequency()); +

+

+ if (net->defiNet::hasVoltage()) +

+

+ fprintf(fout, "\n + VOLTAGE %g ", net->defiNet::voltage()); +

+

+ if (net->defiNet::hasWeight()) +

+

+ fprintf(fout, "\n + WEIGHT %d ", net->defiNet::weight()); +

+

+ if (net->defiNet::hasCap()) +

+

+ fprintf(fout, "\n + ESTCAP %g ", net->defiNet::cap()); +

+

+ if (net->defiNet::hasSource()) +

+

+ fprintf(fout, "\n + SOURCE %s ", net->defiNet::source()); +

+

+ if (net->defiNet::hasPattern()) +

+

+ fprintf(fout, "\n + PATTERN %s ", net->defiNet::pattern()); +

+

+ if (net->defiNet::hasOriginal()) +

+

+ fprintf(fout, "\n + ORIGINAL %s ", net->defiNet::original()); +

+

+ if (net->defiNet::hasUse()) +

+

+ fprintf(fout, "\n + USE %s ", net->defiNet::use()); +

+

+   +

+

+ fprintf (fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END SPECIALNETS\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int ndr(defrCallbackType_e c, defiNonDefault* nd, defiUserData ud) { +

+

+ // For nondefaultrule +

+

+ int i; +

+

+   +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (c != defrNonDefaultCbkType) +

+

+ fprintf(fout, "BOGUS NONDEFAULTRULE TYPE "); +

+

+ fprintf(fout, "- %s\n", nd->defiNonDefault::name()); +

+

+ if (nd->defiNonDefault::hasHardspacing()) +

+

+ fprintf(fout, " + HARDSPACING\n"); +

+

+ for (i = 0; i < nd->defiNonDefault::numLayers(); i++) { +

+

+ fprintf(fout, " + LAYER %s", nd->defiNonDefault::layerName(i)); +

+

+ fprintf(fout, " WIDTH %d", nd->defiNonDefault::layerWidthVal(i)); +

+

+ if (nd->defiNonDefault::hasLayerDiagWidth(i)) +

+

+ fprintf(fout, " DIAGWIDTH %d", +

+

+ nd->defiNonDefault::layerDiagWidthVal(i)); +

+

+ if (nd->defiNonDefault::hasLayerSpacing(i)) +

+

+ fprintf(fout, " SPACING %d", nd->defiNonDefault::layerSpacingVal(i)); +

+

+ if (nd->defiNonDefault::hasLayerWireExt(i)) +

+

+ fprintf(fout, " WIREEXT %d", nd->defiNonDefault::layerWireExtVal(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ for (i = 0; i < nd->defiNonDefault::numVias(); i++) +

+

+ fprintf(fout, " + VIA %s\n", nd->defiNonDefault::viaName(i)); +

+

+ for (i = 0; i < nd->defiNonDefault::numViaRules(); i++) +

+

+ fprintf(fout, " + VIARULE %s\n", nd->defiNonDefault::viaRuleName(i)); +

+

+ for (i = 0; i < nd->defiNonDefault::numMinCuts(); i++) +

+

+ fprintf(fout, " + MINCUTS %s %d\n", nd->defiNonDefault::cutLayerName(i), +

+

+ nd->defiNonDefault::numCuts(i)); +

+

+ for (i = 0; i < nd->defiNonDefault::numProps(); i++) { +

+

+ fprintf(fout, " + PROPERTY %s %s ", nd->defiNonDefault::propName(i), +

+

+ nd->defiNonDefault::propValue(i)); +

+

+ switch (nd->defiNonDefault::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL\n"); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER\n"); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING\n"); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING\n"); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER\n"); +

+

+ break; +

+

+ } +

+

+ } +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END NONDEFAULTRULES\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int tname(defrCallbackType_e c, const char* string, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "TECHNOLOGY %s ;\n", string); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int dname(defrCallbackType_e c, const char* string, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "DESIGN %s ;\n", string); +

+

+   +

+

+ // Test changing the user data. +

+

+ userData = 89; +

+

+ defrSetUserData((void*)userData); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ char* address(const char* in) { +

+

+ return ((char*)in); +

+

+ } +

+

+   +

+

+ int cs(defrCallbackType_e c, int num, defiUserData ud) { +

+

+ char* name; +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ if ((long)ud != userData) dataError(); +

+

+   +

+

+ switch (c) { +

+

+ case defrComponentStartCbkType : name = address("COMPONENTS"); break; +

+

+ case defrNetStartCbkType : name = address("NETS"); break; +

+

+ case defrStartPinsCbkType : name = address("PINS"); break; +

+

+ case defrViaStartCbkType : name = address("VIAS"); break; +

+

+ case defrRegionStartCbkType : name = address("REGIONS"); break; +

+

+ case defrSNetStartCbkType : name = address("SPECIALNETS"); break; +

+

+ case defrGroupsStartCbkType : name = address("GROUPS"); break; +

+

+ case defrScanchainsStartCbkType : name = address("SCANCHAINS"); break; +

+

+ case defrIOTimingsStartCbkType : name = address("IOTIMINGS"); break; +

+

+ case defrFPCStartCbkType : name = address("FLOORPLANCONSTRAINTS"); break; +

+

+ case defrTimingDisablesStartCbkType : name = address("TIMING DISABLES"); break; +

+

+ case defrPartitionsStartCbkType : name = address("PARTITIONS"); break; +

+

+ case defrPinPropStartCbkType : name = address("PINPROPERTIES"); break; +

+

+ case defrBlockageStartCbkType : name = address("BLOCKAGES"); break; +

+

+ case defrSlotStartCbkType : name = address("SLOTS"); break; +

+

+ case defrFillStartCbkType : name = address("FILLS"); break; +

+

+ case defrNonDefaultStartCbkType : name = address("NONDEFAULTRULES"); break; +

+

+ case defrStylesStartCbkType : name = address("STYLES"); break; +

+

+ default : name = address("BOGUS"); return 1; +

+

+ } +

+

+ fprintf(fout, "\n%s %d ;\n", name, num); +

+

+ numObjs = num; +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int constraintst(defrCallbackType_e c, int num, defiUserData ud) { +

+

+ // Handles both constraints and assertions +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (c == defrConstraintsStartCbkType) +

+

+ fprintf(fout, "\nCONSTRAINTS %d ;\n\n", num); +

+

+ else +

+

+ fprintf(fout, "\nASSERTIONS %d ;\n\n", num); +

+

+ numObjs = num; +

+

+ return 0; +

+

+ } +

+

+   +

+

+ void operand(defrCallbackType_e c, defiAssertion* a, int ind) { +

+

+ int i, first = 1; +

+

+ char* netName; +

+

+ char* fromInst, * fromPin, * toInst, * toPin; +

+

+   +

+

+ if (a->defiAssertion::isSum()) { +

+

+ // Sum in operand, recursively call operand +

+

+ fprintf(fout, "- SUM ( "); +

+

+ a->defiAssertion::unsetSum(); +

+

+ isSumSet = 1; +

+

+ begOperand = 0; +

+

+ operand (c, a, ind); +

+

+ fprintf(fout, ") "); +

+

+ } else { +

+

+ // operand +

+

+ if (ind >= a->defiAssertion::numItems()) { +

+

+ fprintf(fout, "ERROR: when writing out SUM in Constraints.\n"); +

+

+ return; +

+

+ } +

+

+ if (begOperand) { +

+

+ fprintf(fout, "- "); +

+

+ begOperand = 0; +

+

+ } +

+

+ for (i = ind; i < a->defiAssertion::numItems(); i++) { +

+

+ if (a->defiAssertion::isNet(i)) { +

+

+ a->defiAssertion::net(i, &netName); +

+

+ if (!first) +

+

+ fprintf(fout, ", "); // print , as separator +

+

+ fprintf(fout, "NET %s ", netName); +

+

+ } else if (a->defiAssertion::isPath(i)) { +

+

+ a->defiAssertion::path(i, &fromInst, &fromPin, &toInst, +

+

+ &toPin); +

+

+ if (!first) +

+

+ fprintf(fout, ", "); +

+

+ fprintf(fout, "PATH %s %s %s %s ", fromInst, fromPin, toInst, +

+

+ toPin); +

+

+ } else if (isSumSet) { +

+

+ // SUM within SUM, reset the flag +

+

+ a->defiAssertion::setSum(); +

+

+ operand(c, a, i); +

+

+ } +

+

+ first = 0; +

+

+ } +

+

+ +

+

+ } +

+

+ } +

+

+   +

+

+ int constraint(defrCallbackType_e c, defiAssertion* a, defiUserData ud) { +

+

+ // Handles both constraints and assertions +

+

+   +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (a->defiAssertion::isWiredlogic()) +

+

+ // Wirelogic +

+

+ fprintf(fout, "- WIREDLOGIC %s + MAXDIST %g ;\n", +

+

+ a->defiAssertion::netName(), a->defiAssertion::fallMax()); +

+

+ else { +

+

+ // Call the operand function +

+

+ isSumSet = 0; // reset the global variable +

+

+ begOperand = 1; +

+

+ operand (c, a, 0); +

+

+ // Get the Rise and Fall +

+

+ if (a->defiAssertion::hasRiseMax()) +

+

+ fprintf(fout, "+ RISEMAX %g ", a->defiAssertion::riseMax()); +

+

+ if (a->defiAssertion::hasFallMax()) +

+

+ fprintf(fout, "+ FALLMAX %g ", a->defiAssertion::fallMax()); +

+

+ if (a->defiAssertion::hasRiseMin()) +

+

+ fprintf(fout, "+ RISEMIN %g ", a->defiAssertion::riseMin()); +

+

+ if (a->defiAssertion::hasFallMin()) +

+

+ fprintf(fout, "+ FALLMIN %g ", a->defiAssertion::fallMin()); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ --numObjs; +

+

+ if (numObjs <= 0) { +

+

+ if (c == defrConstraintCbkType) +

+

+ fprintf(fout, "END CONSTRAINTS\n"); +

+

+ else +

+

+ fprintf(fout, "END ASSERTIONS\n"); +

+

+ } +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int propstart(defrCallbackType_e c, void* dummy, defiUserData ud) { +

+

+ checkType(c); +

+

+ fprintf(fout, "\nPROPERTYDEFINITIONS\n"); +

+

+ isProp = 1; +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int prop(defrCallbackType_e c, defiProp* p, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (strcmp(p->defiProp::propType(), "design") == 0) +

+

+ fprintf(fout, "DESIGN %s ", p->defiProp::propName()); +

+

+ else if (strcmp(p->defiProp::propType(), "net") == 0) +

+

+ fprintf(fout, "NET %s ", p->defiProp::propName()); +

+

+ else if (strcmp(p->defiProp::propType(), "component") == 0) +

+

+ fprintf(fout, "COMPONENT %s ", p->defiProp::propName()); +

+

+ else if (strcmp(p->defiProp::propType(), "specialnet") == 0) +

+

+ fprintf(fout, "SPECIALNET %s ", p->defiProp::propName()); +

+

+ else if (strcmp(p->defiProp::propType(), "group") == 0) +

+

+ fprintf(fout, "GROUP %s ", p->defiProp::propName()); +

+

+ else if (strcmp(p->defiProp::propType(), "row") == 0) +

+

+ fprintf(fout, "ROW %s ", p->defiProp::propName()); +

+

+ else if (strcmp(p->defiProp::propType(), "componentpin") == 0) +

+

+ fprintf(fout, "COMPONENTPIN %s ", p->defiProp::propName()); +

+

+ else if (strcmp(p->defiProp::propType(), "region") == 0) +

+

+ fprintf(fout, "REGION %s ", p->defiProp::propName()); +

+

+ else if (strcmp(p->defiProp::propType(), "nondefaultrule") == 0) +

+

+ fprintf(fout, "NONDEFAULTRULE %s ", p->defiProp::propName()); +

+

+ if (p->defiProp::dataType() == 'I') +

+

+ fprintf(fout, "INTEGER "); +

+

+ if (p->defiProp::dataType() == 'R') +

+

+ fprintf(fout, "REAL "); +

+

+ if (p->defiProp::dataType() == 'S') +

+

+ fprintf(fout, "STRING "); +

+

+ if (p->defiProp::dataType() == 'Q') +

+

+ fprintf(fout, "STRING "); +

+

+ if (p->defiProp::hasRange()) { +

+

+ fprintf(fout, "RANGE %g %g ", p->defiProp::left(), +

+

+ p->defiProp::right()); +

+

+ } +

+

+ if (p->defiProp::hasNumber()) +

+

+ fprintf(fout, "%g ", p->defiProp::number()); +

+

+ if (p->defiProp::hasString()) +

+

+ fprintf(fout, "\"%s\" ", p->defiProp::string()); +

+

+ fprintf(fout, ";\n"); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int propend(defrCallbackType_e c, void* dummy, defiUserData ud) { +

+

+ checkType(c); +

+

+ if (isProp) { +

+

+ fprintf(fout, "END PROPERTYDEFINITIONS\n\n"); +

+

+ isProp = 0; +

+

+ } +

+

+   +

+

+ defrSetCaseSensitivity(1); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int hist(defrCallbackType_e c, const char* h, defiUserData ud) { +

+

+ checkType(c); +

+

+ defrSetCaseSensitivity(0); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "HISTORY %s ;\n", h); +

+

+ defrSetCaseSensitivity(1); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int an(defrCallbackType_e c, const char* h, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "ARRAY %s ;\n", h); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int fn(defrCallbackType_e c, const char* h, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "FLOORPLAN %s ;\n", h); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int bbn(defrCallbackType_e c, const char* h, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "BUSBITCHARS \"%s\" ;\n", h); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int vers(defrCallbackType_e c, double d, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "VERSION %g ;\n", d); +

+

+ curVer = d; +

+

+   +

+

+ defrAddAlias ("alias1", "aliasValue1", 1); +

+

+ defrAddAlias ("alias2", "aliasValue2", 0); +

+

+ defiAlias_itr *aliasStore; +

+

+ aliasStore = (defiAlias_itr*)malloc(sizeof(defiAlias_itr*)); +

+

+ aliasStore->Init(); +

+

+ while (aliasStore->defiAlias_itr::Next()) { +

+

+ fprintf(fout, "ALIAS %s %s %d ;\n", aliasStore->defiAlias_itr::Key(), +

+

+ aliasStore->defiAlias_itr::Data(), +

+

+ aliasStore->defiAlias_itr::Marked()); +

+

+ } +

+

+ free(aliasStore); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int versStr(defrCallbackType_e c, const char* versionName, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "VERSION %s ;\n", versionName); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int units(defrCallbackType_e c, double d, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "UNITS DISTANCE MICRONS %g ;\n", d); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int casesens(defrCallbackType_e c, int d, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ if (d == 1) +

+

+ fprintf(fout, "NAMESCASESENSITIVE ON ;\n", d); +

+

+ else +

+

+ fprintf(fout, "NAMESCASESENSITIVE OFF ;\n", d); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int cls(defrCallbackType_e c, void* cl, defiUserData ud) { +

+

+ defiSite* site; // Site and Canplace and CannotOccupy +

+

+ defiBox* box; // DieArea and +

+

+ defiPinCap* pc; +

+

+ defiPin* pin; +

+

+ int i, j; +

+

+ defiRow* row; +

+

+ defiTrack* track; +

+

+ defiGcellGrid* gcg; +

+

+ defiVia* via; +

+

+ defiRegion* re; +

+

+ defiGroup* group; +

+

+ defiScanchain* sc; +

+

+ defiIOTiming* iot; +

+

+ defiFPC* fpc; +

+

+ defiTimingDisable* td; +

+

+ defiPartition* part; +

+

+ defiPinProp* pprop; +

+

+ defiBlockage* block; +

+

+ defiSlot* slots; +

+

+ defiFill* fills; +

+

+ defiStyles* styles; +

+

+ int xl, yl, xh, yh; +

+

+ char *name, *a1, *b1; +

+

+ char **inst, **inPin, **outPin; +

+

+ int *bits; +

+

+ int size; +

+

+ int corner, typ; +

+

+ const char *itemT; +

+

+ char dir; +

+

+ defiPinAntennaModel* aModel; +

+

+ struct defiPoints points; +

+

+   +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ switch (c) { +

+

+   +

+

+ case defrSiteCbkType : +

+

+ site = (defiSite*)cl; +

+

+ fprintf(fout, "SITE %s %g %g %s ", site->defiSite::name(), +

+

+ site->defiSite::x_orig(), site->defiSite::y_orig(), +

+

+ orientStr(site->defiSite::orient())); +

+

+ fprintf(fout, "DO %g BY %g STEP %g %g ;\n", +

+

+ site->defiSite::x_num(), site->defiSite::y_num(), +

+

+ site->defiSite::x_step(), site->defiSite::y_step()); +

+

+ break; +

+

+ case defrCanplaceCbkType : +

+

+ site = (defiSite*)cl; +

+

+ fprintf(fout, "CANPLACE %s %g %g %s ", site->defiSite::name(), +

+

+ site->defiSite::x_orig(), site->defiSite::y_orig(), +

+

+ orientStr(site->defiSite::orient())); +

+

+ fprintf(fout, "DO %g BY %g STEP %g %g ;\n", +

+

+ site->defiSite::x_num(), site->defiSite::y_num(), +

+

+ site->defiSite::x_step(), site->defiSite::y_step()); +

+

+ break; +

+

+ case defrCannotOccupyCbkType : +

+

+ site = (defiSite*)cl; +

+

+ fprintf(fout, "CANNOTOCCUPY %s %g %g %s ", +

+

+ site->defiSite::name(), site->defiSite::x_orig(), +

+

+ site->defiSite::y_orig(), orientStr(site->defiSite::orient())); +

+

+ fprintf(fout, "DO %g BY %g STEP %g %g ;\n", +

+

+ site->defiSite::x_num(), site->defiSite::y_num(), +

+

+ site->defiSite::x_step(), site->defiSite::y_step()); +

+

+ break; +

+

+ case defrDieAreaCbkType : +

+

+ box = (defiBox*)cl; +

+

+ fprintf(fout, "DIEAREA %d %d %d %d ;\n", +

+

+ box->defiBox::xl(), box->defiBox::yl(), box->defiBox::xh(), +

+

+ box->defiBox::yh()); +

+

+ fprintf(fout, "DIEAREA "); +

+

+ points = box->defiBox::getPoint(); +

+

+ for (i = 0; i < points.numPoints; i++) +

+

+ fprintf(fout, "%d %d ", points.x[i], points.y[i]); +

+

+ fprintf(fout, ";\n"); +

+

+ break; +

+

+ case defrPinCapCbkType : +

+

+ pc = (defiPinCap*)cl; +

+

+ fprintf(fout, "MINPINS %d WIRECAP %g ;\n", +

+

+ pc->defiPinCap::pin(), pc->defiPinCap::cap()); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END DEFAULTCAP\n"); +

+

+ break; +

+

+ case defrPinCbkType : +

+

+ pin = (defiPin*)cl; +

+

+ fprintf(fout, "- %s + NET %s ", pin->defiPin::pinName(), +

+

+ pin->defiPin::netName()); +

+

+ if (pin->defiPin::hasDirection()) +

+

+ fprintf(fout, "+ DIRECTION %s ", pin->defiPin::direction()); +

+

+ if (pin->defiPin::hasUse()) +

+

+ fprintf(fout, "+ USE %s ", pin->defiPin::use()); +

+

+ if (pin->defiPin::hasNetExpr()) +

+

+ fprintf(fout, "+ NETEXPR \"%s\" ", pin->defiPin::netExpr()); +

+

+ if (pin->defiPin::hasSupplySensitivity()) +

+

+ fprintf(fout, "+ SUPPLYSENSITIVITY %s ", +

+

+ pin->defiPin::supplySensitivity()); +

+

+ if (pin->defiPin::hasGroundSensitivity()) +

+

+ fprintf(fout, "+ GROUNDSENSITIVITY %s ", +

+

+ pin->defiPin::groundSensitivity()); +

+

+ if (pin->defiPin::hasLayer()) { +

+

+ struct defiPoints points; +

+

+ for (i = 0; i < pin->defiPin::numLayer(); i++) { +

+

+ fprintf(fout, "\n + LAYER %s ", pin->defiPin::layer(i)); +

+

+ if (pin->defiPin::hasLayerSpacing(i)) +

+

+ fprintf(fout, "SPACING %d ", +

+

+ pin->defiPin::layerSpacing(i)); +

+

+ if (pin->defiPin::hasLayerDesignRuleWidth(i)) +

+

+ fprintf(fout, "DESIGNRULEWIDTH %d ", +

+

+ pin->defiPin::layerDesignRuleWidth(i)); +

+

+ pin->defiPin::bounds(i, &xl, &yl, &xh, &yh); +

+

+ fprintf(fout, "%d %d %d %d ", xl, yl, xh, yh); +

+

+ } +

+

+ for (i = 0; i < pin->defiPin::numPolygons(); i++) { +

+

+ fprintf(fout, "\n + POLYGON %s ", +

+

+ pin->defiPin::polygonName(i)); +

+

+ if (pin->defiPin::hasPolygonSpacing(i)) +

+

+ fprintf(fout, "SPACING %d ", +

+

+ pin->defiPin::polygonSpacing(i)); +

+

+ if (pin->defiPin::hasPolygonDesignRuleWidth(i)) +

+

+ fprintf(fout, "DESIGNRULEWIDTH %d ", +

+

+ pin->defiPin::polygonDesignRuleWidth(i)); +

+

+ points = pin->defiPin::getPolygon(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ } +

+

+ for (i = 0; i < pin->defiPin::numVias(); i++) { +

+

+ fprintf(fout, "\n + VIA %s %d %d ", pin->defiPin::viaName(i), +

+

+ pin->defiPin::viaPtX(i), pin->defiPin::viaPtY(i)); +

+

+ } +

+

+ } +

+

+ if (pin->defiPin::hasPort()) { +

+

+ struct defiPoints points; +

+

+ defiPinPort* port; +

+

+ for (j = 0; j < pin->defiPin::numPorts(); j++) { +

+

+ port = pin->defiPin::pinPort(j); +

+

+ fprintf(fout, "\n + PORT"); +

+

+ for (i = 0; i < port->defiPinPort::numLayer(); i++) { +

+

+ fprintf(fout, "\n + LAYER %s ", +

+

+ port->defiPinPort::layer(i)); +

+

+ if (port->defiPinPort::hasLayerSpacing(i)) +

+

+ fprintf(fout, "SPACING %d ", +

+

+ port->defiPinPort::layerSpacing(i)); +

+

+ if (port->defiPinPort::hasLayerDesignRuleWidth(i)) +

+

+ fprintf(fout, "DESIGNRULEWIDTH %d ", +

+

+ port->defiPinPort::layerDesignRuleWidth(i)); +

+

+ port->defiPinPort::bounds(i, &xl, &yl, &xh, &yh); +

+

+ fprintf(fout, "%d %d %d %d ", xl, yl, xh, yh); +

+

+ } +

+

+ for (i = 0; i < port->defiPinPort::numPolygons(); i++) { +

+

+ fprintf(fout, "\n + POLYGON %s ", +

+

+ port->defiPinPort::polygonName(i)); +

+

+ if (port->defiPinPort::hasPolygonSpacing(i)) +

+

+ fprintf(fout, "SPACING %d ", +

+

+ port->defiPinPort::polygonSpacing(i)); +

+

+ if (port->defiPinPort::hasPolygonDesignRuleWidth(i)) +

+

+ fprintf(fout, "DESIGNRULEWIDTH %d ", +

+

+ port->defiPinPort::polygonDesignRuleWidth(i)); +

+

+ points = port->defiPinPort::getPolygon(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ } +

+

+ for (i = 0; i < port->defiPinPort::numVias(); i++) { +

+

+ fprintf(fout, "\n + VIA %s %g %g", +

+

+ port->defiPinPort::viaName(i), +

+

+ port->defiPinPort::viaPtX(i), +

+

+ port->defiPinPort::viaPtY(i)); +

+

+ } +

+

+ if (port->defiPinPort::hasPlacement()) { +

+

+ if (port->defiPinPort::isPlaced()) { +

+

+ fprintf(fout, "\n + PLACED "); +

+

+ fprintf(fout, "( %d %d ) %s ", +

+

+ port->defiPinPort::placementX(), +

+

+ port->defiPinPort::placementY(), +

+

+ orientStr(port->defiPinPort::orient())); +

+

+ } +

+

+ if (port->defiPinPort::isCover()) { +

+

+ fprintf(fout, "\n + COVER "); +

+

+ fprintf(fout, "( %d %d ) %s ", +

+

+ port->defiPinPort::placementX(), +

+

+ port->defiPinPort::placementY(), +

+

+ orientStr(port->defiPinPort::orient())); +

+

+ } +

+

+ if (port->defiPinPort::isFixed()) { +

+

+ fprintf(fout, "\n + FIXED "); +

+

+ fprintf(fout, "( %d %d ) %s ", +

+

+ port->defiPinPort::placementX(), +

+

+ port->defiPinPort::placementY(), +

+

+ orientStr(port->defiPinPort::orient())); +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ if (pin->defiPin::hasPlacement()) { +

+

+ if (pin->defiPin::isPlaced()) { +

+

+ fprintf(fout, "+ PLACED "); +

+

+ fprintf(fout, "( %d %d ) %s ", pin->defiPin::placementX(), +

+

+ pin->defiPin::placementY(), +

+

+ orientStr(pin->defiPin::orient())); +

+

+ } +

+

+ if (pin->defiPin::isCover()) { +

+

+ fprintf(fout, "+ COVER "); +

+

+ fprintf(fout, "( %d %d ) %s ", pin->defiPin::placementX(), +

+

+ pin->defiPin::placementY(), +

+

+ orientStr(pin->defiPin::orient())); +

+

+ } +

+

+ if (pin->defiPin::isFixed()) { +

+

+ fprintf(fout, "+ FIXED "); +

+

+ fprintf(fout, "( %d %d ) %s ", pin->defiPin::placementX(), +

+

+ pin->defiPin::placementY(), +

+

+ orientStr(pin->defiPin::orient())); +

+

+ } +

+

+ if (pin->defiPin::isUnplaced()) +

+

+ fprintf(fout, "+ UNPLACED "); +

+

+ } +

+

+ if (pin->defiPin::hasSpecial()) { +

+

+ fprintf(fout, "+ SPECIAL "); +

+

+ } +

+

+ if (pin->hasAPinPartialMetalArea()) { +

+

+ for (i = 0; i < pin->defiPin::numAPinPartialMetalArea(); i++) { +

+

+ fprintf(fout, "ANTENNAPINPARTIALMETALAREA %d", +

+

+ pin->APinPartialMetalArea(i)); +

+

+ if (*(pin->APinPartialMetalAreaLayer(i))) +

+

+ fprintf(fout, " LAYER %s", +

+

+ pin->APinPartialMetalAreaLayer(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+ if (pin->hasAPinPartialMetalSideArea()) { +

+

+ for (i = 0; i < pin->defiPin::numAPinPartialMetalSideArea(); i++) { +

+

+ fprintf(fout, "ANTENNAPINPARTIALMETALSIDEAREA %d", +

+

+ pin->APinPartialMetalSideArea(i)); +

+

+ if (*(pin->APinPartialMetalSideAreaLayer(i))) +

+

+ fprintf(fout, " LAYER %s", +

+

+ pin->APinPartialMetalSideAreaLayer(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+ if (pin->hasAPinDiffArea()) { +

+

+ for (i = 0; i < pin->defiPin::numAPinDiffArea(); i++) { +

+

+ fprintf(fout, "ANTENNAPINDIFFAREA %d", pin->APinDiffArea(i)); +

+

+ if (*(pin->APinDiffAreaLayer(i))) +

+

+ fprintf(fout, " LAYER %s", pin->APinDiffAreaLayer(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+ if (pin->hasAPinPartialCutArea()) { +

+

+ for (i = 0; i < pin->defiPin::numAPinPartialCutArea(); i++) { +

+

+ fprintf(fout, "ANTENNAPINPARTIALCUTAREA %d", +

+

+ pin->APinPartialCutArea(i)); +

+

+ if (*(pin->APinPartialCutAreaLayer(i))) +

+

+ fprintf(fout, " LAYER %s", pin->APinPartialCutAreaLayer(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ for (j = 0; j < pin->numAntennaModel(); j++) { +

+

+ aModel = pin->antennaModel(j); +

+

+ +

+

+ fprintf(fout, "ANTENNAMODEL %s\n", +

+

+ aModel->defiPinAntennaModel::antennaOxide()); +

+

+ +

+

+ if (aModel->hasAPinGateArea()) { +

+

+ for (i = 0; i < aModel->defiPinAntennaModel::numAPinGateArea(); +

+

+ i++) { +

+

+ fprintf(fout, "ANTENNAPINGATEAREA %d", +

+

+ aModel->APinGateArea(i)); +

+

+ if (aModel->hasAPinGateAreaLayer(i)) +

+

+ fprintf(fout, " LAYER %s", aModel->APinGateAreaLayer(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+ if (aModel->hasAPinMaxAreaCar()) { +

+

+ for (i = 0; +

+

+ i < aModel->defiPinAntennaModel::numAPinMaxAreaCar(); i++) { +

+

+ fprintf(fout, "ANTENNAPINMAXAREACAR %d", +

+

+ aModel->APinMaxAreaCar(i)); +

+

+ if (aModel->hasAPinMaxAreaCarLayer(i)) +

+

+ fprintf(fout, +

+

+ " LAYER %s", aModel->APinMaxAreaCarLayer(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+ if (aModel->hasAPinMaxSideAreaCar()) { +

+

+ for (i = 0; +

+

+ i < aModel->defiPinAntennaModel::numAPinMaxSideAreaCar(); +

+

+ i++) { +

+

+ fprintf(fout, "ANTENNAPINMAXSIDEAREACAR %d", +

+

+ aModel->APinMaxSideAreaCar(i)); +

+

+ if (aModel->hasAPinMaxSideAreaCarLayer(i)) +

+

+ fprintf(fout, +

+

+ " LAYER %s", aModel->APinMaxSideAreaCarLayer(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+ if (aModel->hasAPinMaxCutCar()) { +

+

+ for (i = 0; i < aModel->defiPinAntennaModel::numAPinMaxCutCar(); +

+

+ i++) { +

+

+ fprintf(fout, "ANTENNAPINMAXCUTCAR %d", +

+

+ aModel->APinMaxCutCar(i)); +

+

+ if (aModel->hasAPinMaxCutCarLayer(i)) +

+

+ fprintf(fout, " LAYER %s", +

+

+ aModel->APinMaxCutCarLayer(i)); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END PINS\n"); +

+

+ break; +

+

+ case defrDefaultCapCbkType : +

+

+ i = (long)cl; +

+

+ fprintf(fout, "DEFAULTCAP %d\n", i); +

+

+ numObjs = i; +

+

+ break; +

+

+ case defrRowCbkType : +

+

+ row = (defiRow*)cl; +

+

+ fprintf(fout, "ROW %s %s %g %g %s ", row->defiRow::name(), +

+

+ row->defiRow::macro(), row->defiRow::x(), row->defiRow::y(), +

+

+ orientStr(row->defiRow::orient())); +

+

+ if (row->defiRow::hasDo()) { +

+

+ fprintf(fout, "DO %g BY %g ", +

+

+ row->defiRow::xNum(), row->defiRow::yNum()); +

+

+ if (row->defiRow::hasDoStep()) +

+

+ fprintf(fout, "STEP %g %g ;\n", +

+

+ row->defiRow::xStep(), row->defiRow::yStep()); +

+

+ else +

+

+ fprintf(fout, ";\n"); +

+

+ } else +

+

+ fprintf(fout, ";\n"); +

+

+ if (row->defiRow::numProps() > 0) { +

+

+ for (i = 0; i < row->defiRow::numProps(); i++) { +

+

+ fprintf(fout, " + PROPERTY %s %s ", +

+

+ row->defiRow::propName(i), +

+

+ row->defiRow::propValue(i)); +

+

+ switch (row->defiRow::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ break; +

+

+ case defrTrackCbkType : +

+

+ track = (defiTrack*)cl; +

+

+ fprintf(fout, "TRACKS %s %g DO %g STEP %g LAYER ", +

+

+ track->defiTrack::macro(), track->defiTrack::x(), +

+

+ track->defiTrack::xNum(), track->defiTrack::xStep()); +

+

+ for (i = 0; i < track->defiTrack::numLayers(); i++) +

+

+ fprintf(fout, "%s ", track->defiTrack::layer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ break; +

+

+ case defrGcellGridCbkType : +

+

+ gcg = (defiGcellGrid*)cl; +

+

+ fprintf(fout, "GCELLGRID %s %d DO %d STEP %g ;\n", +

+

+ gcg->defiGcellGrid::macro(), gcg->defiGcellGrid::x(), +

+

+ gcg->defiGcellGrid::xNum(), gcg->defiGcellGrid::xStep()); +

+

+ break; +

+

+ case defrViaCbkType : +

+

+ via = (defiVia*)cl; +

+

+ fprintf(fout, "- %s ", via->defiVia::name()); +

+

+ if (via->defiVia::hasPattern()) +

+

+ fprintf(fout, "+ PATTERNNAME %s ", via->defiVia::pattern()); +

+

+ for (i = 0; i < via->defiVia::numLayers(); i++) { +

+

+ via->defiVia::layer(i, &name, &xl, &yl, &xh, &yh); +

+

+ fprintf(fout, "+ RECT %s %d %d %d %d \n", +

+

+ name, xl, yl, xh, yh); +

+

+ } +

+

+ // POLYGON +

+

+ if (via->defiVia::numPolygons()) { +

+

+ struct defiPoints points; +

+

+ for (i = 0; i < via->defiVia::numPolygons(); i++) { +

+

+ fprintf(fout, "\n + POLYGON %s ", via->polygonName(i)); +

+

+ points = via->getPolygon(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ } +

+

+ } +

+

+ fprintf(fout, " ;\n"); +

+

+ if (via->defiVia::hasViaRule()) { +

+

+ char *vrn, *bl, *cl, *tl; +

+

+ int xs, ys, xcs, ycs, xbe, ybe, xte, yte; +

+

+ int cr, cc, xo, yo, xbo, ybo, xto, yto; +

+

+ (void)via->defiVia::viaRule(&vrn, &xs, &ys, &bl, &cl, &tl, &xcs, +

+

+ &ycs, &xbe, &ybe, &xte, &yte); +

+

+ fprintf(fout, "+ VIARULE '%s'\n", vrn); +

+

+ fprintf(fout, " + CUTSIZE %d %d\n", xs, ys); +

+

+ fprintf(fout, " + LAYERS %s %s %s\n", bl, cl, tl); +

+

+ fprintf(fout, " + CUTSPACING %d %d\n", xcs, ycs); +

+

+ fprintf(fout, " + ENCLOSURE %d %d %d %d\n", xbe, ybe, xte, yte); +

+

+ if (via->defiVia::hasRowCol()) { +

+

+ (void)via->defiVia::rowCol(&cr, &cc); +

+

+ fprintf(fout, " + ROWCOL %d %d\n", cr, cc); +

+

+ } +

+

+ if (via->defiVia::hasOrigin()) { +

+

+ (void)via->defiVia::origin(&xo, &yo); +

+

+ fprintf(fout, " + ORIGIN %d %d\n", xo, yo); +

+

+ } +

+

+ if (via->defiVia::hasOffset()) { +

+

+ (void)via->defiVia::offset(&xbo, &ybo, &xto, &yto); +

+

+ fprintf(fout, " + OFFSET %d %d %d %d\n", xbo, ybo, xto, yto); +

+

+ } +

+

+ if (via->defiVia::hasCutPattern()) +

+

+ fprintf(fout, " + PATTERN '%s'\n", via->defiVia::cutPattern()); +

+

+ } +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END VIAS\n"); +

+

+ break; +

+

+ case defrRegionCbkType : +

+

+ re = (defiRegion*)cl; +

+

+ fprintf(fout, "- %s ", re->defiRegion::name()); +

+

+ for (i = 0; i < re->defiRegion::numRectangles(); i++) +

+

+ fprintf(fout, "%d %d %d %d \n", re->defiRegion::xl(i), +

+

+ re->defiRegion::yl(i), re->defiRegion::xh(i), +

+

+ re->defiRegion::yh(i)); +

+

+ if (re->defiRegion::hasType()) +

+

+ fprintf(fout, "+ TYPE %s\n", re->defiRegion::type()); +

+

+ if (re->defiRegion::numProps()) { +

+

+ for (i = 0; i < re->defiRegion::numProps(); i++) { +

+

+ fprintf(fout, "+ PROPERTY %s %s ", re->defiRegion::propName(i), +

+

+ re->defiRegion::propValue(i)); +

+

+ switch (re->defiRegion::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) { +

+

+ fprintf(fout, "END REGIONS\n"); +

+

+ } +

+

+ break; +

+

+ case defrGroupNameCbkType : +

+

+ if ((char*)cl) { +

+

+ fprintf(fout, "- %s", (char*)cl); +

+

+ break; +

+

+ } +

+

+ case defrGroupMemberCbkType : +

+

+ if ((char*)cl) { +

+

+ fprintf(fout, " %s", (char*)cl); +

+

+ break; +

+

+ } +

+

+ case defrGroupCbkType : +

+

+ group = (defiGroup*)cl; +

+

+ if (group->defiGroup::hasMaxX() | group->defiGroup::hasMaxY() +

+

+ | group->defiGroup::hasPerim()) { +

+

+ fprintf(fout, "\n + SOFT "); +

+

+ if (group->defiGroup::hasPerim()) +

+

+ fprintf(fout, "MAXHALFPERIMETER %d ", +

+

+ group->defiGroup::perim()); +

+

+ if (group->defiGroup::hasMaxX()) +

+

+ fprintf(fout, "MAXX %d ", group->defiGroup::maxX()); +

+

+ if (group->defiGroup::hasMaxY()) +

+

+ fprintf(fout, "MAXY %d ", group->defiGroup::maxY()); +

+

+ } +

+

+ if (group->defiGroup::hasRegionName()) +

+

+ fprintf(fout, "\n + REGION %s ", group->defiGroup::regionName()); +

+

+ if (group->defiGroup::hasRegionBox()) { +

+

+ int *gxl, *gyl, *gxh, *gyh; +

+

+ int size; +

+

+ group->defiGroup::regionRects(&size, &gxl, &gyl, &gxh, &gyh); +

+

+ for (i = 0; i < size; i++) +

+

+ fprintf(fout, "REGION %d %d %d %d ", gxl[i], gyl[i], +

+

+ gxh[i], gyh[i]); +

+

+ } +

+

+ if (group->defiGroup::numProps()) { +

+

+ for (i = 0; i < group->defiGroup::numProps(); i++) { +

+

+ fprintf(fout, "\n + PROPERTY %s %s ", +

+

+ group->defiGroup::propName(i), +

+

+ group->defiGroup::propValue(i)); +

+

+ switch (group->defiGroup::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, " ;\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END GROUPS\n"); +

+

+ break; +

+

+ case defrScanchainCbkType : +

+

+ sc = (defiScanchain*)cl; +

+

+ fprintf(fout, "- %s\n", sc->defiScanchain::name()); +

+

+ if (sc->defiScanchain::hasStart()) { +

+

+ sc->defiScanchain::start(&a1, &b1); +

+

+ fprintf(fout, " + START %s %s\n", a1, b1); +

+

+ } +

+

+ if (sc->defiScanchain::hasStop()) { +

+

+ sc->defiScanchain::stop(&a1, &b1); +

+

+ fprintf(fout, " + STOP %s %s\n", a1, b1); +

+

+ } +

+

+ if (sc->defiScanchain::hasCommonInPin() || +

+

+ sc->defiScanchain::hasCommonOutPin()) { +

+

+ fprintf(fout, " + COMMONSCANPINS "); +

+

+ if (sc->defiScanchain::hasCommonInPin()) +

+

+ fprintf(fout, " ( IN %s ) ", sc->defiScanchain::commonInPin()); +

+

+ if (sc->defiScanchain::hasCommonOutPin()) +

+

+ fprintf(fout, " ( OUT %s ) ",sc->defiScanchain::commonOutPin()); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ if (sc->defiScanchain::hasFloating()) { +

+

+ sc->defiScanchain::floating(&size, &inst, &inPin, &outPin, &bits); +

+

+ if (size > 0) +

+

+ fprintf(fout, " + FLOATING\n"); +

+

+ for (i = 0; i < size; i++) { +

+

+ fprintf(fout, " %s ", inst[i]); +

+

+ if (inPin[i]) +

+

+ fprintf(fout, "( IN %s ) ", inPin[i]); +

+

+ if (outPin[i]) +

+

+ fprintf(fout, "( OUT %s ) ", outPin[i]); +

+

+ if (bits[i] != -1) +

+

+ fprintf(fout, "( BITS %d ) ", bits[i]); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (sc->defiScanchain::hasOrdered()) { +

+

+ for (i = 0; i < sc->defiScanchain::numOrderedLists(); i++) { +

+

+ sc->defiScanchain::ordered(i, &size, &inst, &inPin, &outPin, +

+

+ &bits); +

+

+ if (size > 0) +

+

+ fprintf(fout, " + ORDERED\n"); +

+

+ for (j = 0; j < size; j++) { +

+

+ fprintf(fout, " %s ", inst[j]); +

+

+ if (inPin[j]) +

+

+ fprintf(fout, "( IN %s ) ", inPin[j]); +

+

+ if (outPin[j]) +

+

+ fprintf(fout, "( OUT %s ) ", outPin[j]); +

+

+ if (bits[j] != -1) +

+

+ fprintf(fout, "( BITS %d ) ", bits[j]); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ if (sc->defiScanchain::hasPartition()) { +

+

+ fprintf(fout, " + PARTITION %s ", +

+

+ sc->defiScanchain::partitionName()); +

+

+ if (sc->defiScanchain::hasPartitionMaxBits()) +

+

+ fprintf(fout, "MAXBITS %d ", +

+

+ sc->defiScanchain::partitionMaxBits()); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END SCANCHAINS\n"); +

+

+ break; +

+

+ case defrIOTimingCbkType : +

+

+ iot = (defiIOTiming*)cl; +

+

+ fprintf(fout, "- ( %s %s )\n", iot->defiIOTiming::inst(), +

+

+ iot->defiIOTiming::pin()); +

+

+ if (iot->defiIOTiming::hasSlewRise()) +

+

+ fprintf(fout, " + RISE SLEWRATE %g %g\n", +

+

+ iot->defiIOTiming::slewRiseMin(), +

+

+ iot->defiIOTiming::slewRiseMax()); +

+

+ if (iot->defiIOTiming::hasSlewFall()) +

+

+ fprintf(fout, " + FALL SLEWRATE %g %g\n", +

+

+ iot->defiIOTiming::slewFallMin(), +

+

+ iot->defiIOTiming::slewFallMax()); +

+

+ if (iot->defiIOTiming::hasVariableRise()) +

+

+ fprintf(fout, " + RISE VARIABLE %g %g\n", +

+

+ iot->defiIOTiming::variableRiseMin(), +

+

+ iot->defiIOTiming::variableRiseMax()); +

+

+ if (iot->defiIOTiming::hasVariableFall()) +

+

+ fprintf(fout, " + FALL VARIABLE %g %g\n", +

+

+ iot->defiIOTiming::variableFallMin(), +

+

+ iot->defiIOTiming::variableFallMax()); +

+

+ if (iot->defiIOTiming::hasCapacitance()) +

+

+ fprintf(fout, " + CAPACITANCE %g\n", +

+

+ iot->defiIOTiming::capacitance()); +

+

+ if (iot->defiIOTiming::hasDriveCell()) { +

+

+ fprintf(fout, " + DRIVECELL %s ", +

+

+ iot->defiIOTiming::driveCell()); +

+

+ if (iot->defiIOTiming::hasFrom()) +

+

+ fprintf(fout, " FROMPIN %s ", +

+

+ iot->defiIOTiming::from()); +

+

+ if (iot->defiIOTiming::hasTo()) +

+

+ fprintf(fout, " TOPIN %s ", +

+

+ iot->defiIOTiming::to()); +

+

+ if (iot->defiIOTiming::hasParallel()) +

+

+ fprintf(fout, "PARALLEL %g", +

+

+ iot->defiIOTiming::parallel()); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END IOTIMINGS\n"); +

+

+ break; +

+

+ case defrFPCCbkType : +

+

+ fpc = (defiFPC*)cl; +

+

+ fprintf(fout, "- %s ", fpc->defiFPC::name()); +

+

+ if (fpc->defiFPC::isVertical()) +

+

+ fprintf(fout, "VERTICAL "); +

+

+ if (fpc->defiFPC::isHorizontal()) +

+

+ fprintf(fout, "HORIZONTAL "); +

+

+ if (fpc->defiFPC::hasAlign()) +

+

+ fprintf(fout, "ALIGN "); +

+

+ if (fpc->defiFPC::hasMax()) +

+

+ fprintf(fout, "%g ", fpc->defiFPC::alignMax()); +

+

+ if (fpc->defiFPC::hasMin()) +

+

+ fprintf(fout, "%g ", fpc->defiFPC::alignMin()); +

+

+ if (fpc->defiFPC::hasEqual()) +

+

+ fprintf(fout, "%g ", fpc->defiFPC::equal()); +

+

+ for (i = 0; i < fpc->defiFPC::numParts(); i++) { +

+

+ fpc->defiFPC::getPart(i, &corner, &typ, &name); +

+

+ if (corner == 'B') +

+

+ fprintf(fout, "BOTTOMLEFT "); +

+

+ else +

+

+ fprintf(fout, "TOPRIGHT "); +

+

+ if (typ == 'R') +

+

+ fprintf(fout, "ROWS %s ", name); +

+

+ else +

+

+ fprintf(fout, "COMPS %s ", name); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END FLOORPLANCONSTRAINTS\n"); +

+

+ break; +

+

+ case defrTimingDisableCbkType : +

+

+ td = (defiTimingDisable*)cl; +

+

+ if (td->defiTimingDisable::hasFromTo()) +

+

+ fprintf(fout, "- FROMPIN %s %s ", +

+

+ td->defiTimingDisable::fromInst(), +

+

+ td->defiTimingDisable::fromPin(), +

+

+ td->defiTimingDisable::toInst(), +

+

+ td->defiTimingDisable::toPin()); +

+

+ if (td->defiTimingDisable::hasThru()) +

+

+ fprintf(fout, "- THRUPIN %s %s ", +

+

+ td->defiTimingDisable::thruInst(), +

+

+ td->defiTimingDisable::thruPin()); +

+

+ if (td->defiTimingDisable::hasMacroFromTo()) +

+

+ fprintf(fout, "- MACRO %s FROMPIN %s %s ", +

+

+ td->defiTimingDisable::macroName(), +

+

+ td->defiTimingDisable::fromPin(), +

+

+ td->defiTimingDisable::toPin()); +

+

+ if (td->defiTimingDisable::hasMacroThru()) +

+

+ fprintf(fout, "- MACRO %s THRUPIN %s %s ", +

+

+ td->defiTimingDisable::macroName(), +

+

+ td->defiTimingDisable::fromPin()); +

+

+ fprintf(fout, ";\n"); +

+

+ break; +

+

+ case defrPartitionCbkType : +

+

+ part = (defiPartition*)cl; +

+

+ fprintf(fout, "- %s ", part->defiPartition::name()); +

+

+ if (part->defiPartition::isSetupRise() | +

+

+ part->defiPartition::isSetupFall() | +

+

+ part->defiPartition::isHoldRise() | +

+

+ part->defiPartition::isHoldFall()) { +

+

+ // has turnoff +

+

+ fprintf(fout, "TURNOFF "); +

+

+ if (part->defiPartition::isSetupRise()) +

+

+ fprintf(fout, "SETUPRISE "); +

+

+ if (part->defiPartition::isSetupFall()) +

+

+ fprintf(fout, "SETUPFALL "); +

+

+ if (part->defiPartition::isHoldRise()) +

+

+ fprintf(fout, "HOLDRISE "); +

+

+ if (part->defiPartition::isHoldFall()) +

+

+ fprintf(fout, "HOLDFALL "); +

+

+ } +

+

+ itemT = part->defiPartition::itemType(); +

+

+ dir = part->defiPartition::direction(); +

+

+ if (strcmp(itemT, "CLOCK") == 0) { +

+

+ if (dir == 'T') // toclockpin +

+

+ fprintf(fout, "+ TOCLOCKPIN %s %s ", +

+

+ part->defiPartition::instName(), +

+

+ part->defiPartition::pinName()); +

+

+ if (dir == 'F') // fromclockpin +

+

+ fprintf(fout, "+ FROMCLOCKPIN %s %s ", +

+

+ part->defiPartition::instName(), +

+

+ part->defiPartition::pinName()); +

+

+ if (part->defiPartition::hasMin()) +

+

+ fprintf(fout, "MIN %g %g ", +

+

+ part->defiPartition::partitionMin(), +

+

+ part->defiPartition::partitionMax()); +

+

+ if (part->defiPartition::hasMax()) +

+

+ fprintf(fout, "MAX %g %g ", +

+

+ part->defiPartition::partitionMin(), +

+

+ part->defiPartition::partitionMax()); +

+

+ fprintf(fout, "PINS "); +

+

+ for (i = 0; i < part->defiPartition::numPins(); i++) +

+

+ fprintf(fout, "%s ", part->defiPartition::pin(i)); +

+

+ } else if (strcmp(itemT, "IO") == 0) { +

+

+ if (dir == 'T') // toiopin +

+

+ fprintf(fout, "+ TOIOPIN %s %s ", +

+

+ part->defiPartition::instName(), +

+

+ part->defiPartition::pinName()); +

+

+ if (dir == 'F') // fromiopin +

+

+ fprintf(fout, "+ FROMIOPIN %s %s ", +

+

+ part->defiPartition::instName(), +

+

+ part->defiPartition::pinName()); +

+

+ } else if (strcmp(itemT, "COMP") == 0) { +

+

+ if (dir == 'T') // tocomppin +

+

+ fprintf(fout, "+ TOCOMPPIN %s %s ", +

+

+ part->defiPartition::instName(), +

+

+ part->defiPartition::pinName()); +

+

+ if (dir == 'F') // fromcomppin +

+

+ fprintf(fout, "+ FROMCOMPPIN %s %s ", +

+

+ part->defiPartition::instName(), +

+

+ part->defiPartition::pinName()); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END PARTITIONS\n"); +

+

+ break; +

+

+   +

+

+ case defrPinPropCbkType : +

+

+ pprop = (defiPinProp*)cl; +

+

+ if (pprop->defiPinProp::isPin()) +

+

+ fprintf(fout, "- PIN %s ", pprop->defiPinProp::pinName()); +

+

+ else +

+

+ fprintf(fout, "- %s %s ", +

+

+ pprop->defiPinProp::instName(), +

+

+ pprop->defiPinProp::pinName()); +

+

+ fprintf(fout, ";\n"); +

+

+ if (pprop->defiPinProp::numProps() > 0) { +

+

+ for (i = 0; i < pprop->defiPinProp::numProps(); i++) { +

+

+ fprintf(fout, " + PROPERTY %s %s ", +

+

+ pprop->defiPinProp::propName(i), +

+

+ pprop->defiPinProp::propValue(i)); +

+

+ switch (pprop->defiPinProp::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END PINPROPERTIES\n"); +

+

+ break; +

+

+ case defrBlockageCbkType : +

+

+ block = (defiBlockage*)cl; +

+

+ if (block->defiBlockage::hasLayer()) { +

+

+ fprintf(fout, "- LAYER %s\n", block->defiBlockage::layerName()); +

+

+ if (block->defiBlockage::hasComponent()) +

+

+ fprintf(fout, " + COMPONENT %s\n", +

+

+ block->defiBlockage::layerComponentName()); +

+

+ if (block->defiBlockage::hasSlots()) +

+

+ fprintf(fout, " + SLOTS\n"); +

+

+ if (block->defiBlockage::hasFills()) +

+

+ fprintf(fout, " + FILLS\n"); +

+

+ if (block->defiBlockage::hasPushdown()) +

+

+ fprintf(fout, " + PUSHDOWN\n"); +

+

+ if (block->defiBlockage::hasExceptpgnet()) +

+

+ fprintf(fout, " + EXCEPTPGNET\n"); +

+

+ if (block->defiBlockage::hasSpacing()) +

+

+ fprintf(fout, " + SPACING %d\n", +

+

+ block->defiBlockage::minSpacing()); +

+

+ if (block->defiBlockage::hasDesignRuleWidth()) +

+

+ fprintf(fout, " + DESIGNRULEWIDTH %d\n", +

+

+ block->defiBlockage::designRuleWidth()); +

+

+ } +

+

+ else if (block->defiBlockage::hasPlacement()) { +

+

+ fprintf(fout, "- PLACEMENT\n"); +

+

+ if (block->defiBlockage::hasSoft()) +

+

+ fprintf(fout, " + SOFT\n"); +

+

+ if (block->defiBlockage::hasPartial()) +

+

+ fprintf(fout, " + PARTIAL %g\n", +

+

+ block->defiBlockage::placementMaxDensity()); +

+

+ if (block->defiBlockage::hasComponent()) +

+

+ fprintf(fout, " + COMPONENT %s\n", +

+

+ block->defiBlockage::placementComponentName()); +

+

+ if (block->defiBlockage::hasPushdown()) +

+

+ fprintf(fout, " + PUSHDOWN\n"); +

+

+ } +

+

+   +

+

+ for (i = 0; i < block->defiBlockage::numRectangles(); i++) { +

+

+ fprintf(fout, " RECT %d %d %d %d\n", +

+

+ block->defiBlockage::xl(i), block->defiBlockage::yl(i), +

+

+ block->defiBlockage::xh(i), block->defiBlockage::yh(i)); +

+

+ } +

+

+   +

+

+ for (i = 0; i < block->defiBlockage::numPolygons(); i++) { +

+

+ fprintf(fout, " POLYGON "); +

+

+ points = block->getPolygon(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ fprintf(fout, "\n"); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END BLOCKAGES\n"); +

+

+ break; +

+

+ case defrSlotCbkType : +

+

+ slots = (defiSlot*)cl; +

+

+ if (slots->defiSlot::hasLayer()) +

+

+ fprintf(fout, "- LAYER %s\n", slots->defiSlot::layerName()); +

+

+   +

+

+ for (i = 0; i < slots->defiSlot::numRectangles(); i++) { +

+

+ fprintf(fout, " RECT %d %d %d %d\n", +

+

+ slots->defiSlot::xl(i), slots->defiSlot::yl(i), +

+

+ slots->defiSlot::xh(i), slots->defiSlot::yh(i)); +

+

+ } +

+

+ for (i = 0; i < slots->defiSlot::numPolygons(); i++) { +

+

+ fprintf(fout, " POLYGON "); +

+

+ points = slots->getPolygon(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END SLOTS\n"); +

+

+ break; +

+

+ case defrFillCbkType : +

+

+ fills = (defiFill*)cl; +

+

+ if (fills->defiFill::hasLayer()) { +

+

+ fprintf(fout, "- LAYER %s", fills->defiFill::layerName()); +

+

+ if (fills->defiFill::hasLayerOpc()) +

+

+ fprintf(fout, " + OPC"); +

+

+ fprintf(fout, "\n"); +

+

+   +

+

+ for (i = 0; i < fills->defiFill::numRectangles(); i++) { +

+

+ fprintf(fout, " RECT %d %d %d %d\n", +

+

+ fills->defiFill::xl(i), fills->defiFill::yl(i), +

+

+ fills->defiFill::xh(i), fills->defiFill::yh(i)); +

+

+ } +

+

+ for (i = 0; i < fills->defiFill::numPolygons(); i++) { +

+

+ fprintf(fout, " POLYGON "); +

+

+ points = fills->getPolygon(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ --numObjs; +

+

+ if (fills->defiFill::hasVia()) { +

+

+ fprintf(fout, "- VIA %s", fills->defiFill::viaName()); +

+

+ if (fills->defiFill::hasViaOpc()) +

+

+ fprintf(fout, " + OPC"); +

+

+ fprintf(fout, "\n"); +

+

+   +

+

+ for (i = 0; i < fills->defiFill::numViaPts(); i++) { +

+

+ points = fills->getViaPts(i); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, " %d %d", points.x[j], points.y[j]); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END FILLS\n"); +

+

+ break; +

+

+ case defrStylesCbkType : +

+

+ struct defiPoints points; +

+

+ styles = (defiStyles*)cl; +

+

+ fprintf(fout, "- STYLE %d ", styles->defiStyles::style()); +

+

+ points = styles->defiStyles::getPolygon(); +

+

+ for (j = 0; j < points.numPoints; j++) +

+

+ fprintf(fout, "%d %d ", points.x[j], points.y[j]); +

+

+ fprintf(fout, ";\n"); +

+

+ --numObjs; +

+

+ if (numObjs <= 0) +

+

+ fprintf(fout, "END STYLES\n"); +

+

+ break; +

+

+   +

+

+ default: fprintf(fout, "BOGUS callback to cls.\n"); return 1; +

+

+ } +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int dn(defrCallbackType_e c, const char* h, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "DIVIDERCHAR \"%s\" ;\n",h); +

+

+ return 0; +

+

+ } +

+

+   +

+

+   +

+

+ int ext(defrCallbackType_e t, const char* c, defiUserData ud) { +

+

+ char* name; +

+

+   +

+

+ checkType(t); +

+

+ if ((long)ud != userData) dataError(); +

+

+   +

+

+ switch (t) { +

+

+ case defrNetExtCbkType : name = address("net"); break; +

+

+ case defrComponentExtCbkType : name = address("component"); break; +

+

+ case defrPinExtCbkType : name = address("pin"); break; +

+

+ case defrViaExtCbkType : name = address("via"); break; +

+

+ case defrNetConnectionExtCbkType : name = address("net connection"); break; +

+

+ case defrGroupExtCbkType : name = address("group"); break; +

+

+ case defrScanChainExtCbkType : name = address("scanchain"); break; +

+

+ case defrIoTimingsExtCbkType : name = address("io timing"); break; +

+

+ case defrPartitionsExtCbkType : name = address("partition"); break; +

+

+ default: name = address("BOGUS"); return 1; +

+

+ } +

+

+ fprintf(fout, " %s extension %s\n", name, c); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int extension(defrCallbackType_e c, const char* extsn, defiUserData ud) { +

+

+ checkType(c); +

+

+ if ((long)ud != userData) dataError(); +

+

+ fprintf(fout, "BEGINEXT %s\n", extsn); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ void* mallocCB(int size) { +

+

+ return malloc(size); +

+

+ } +

+

+   +

+

+ void* reallocCB(void* name, int size) { +

+

+ return realloc(name, size); +

+

+ } +

+

+   +

+

+ void freeCB(void* name) { +

+

+ free(name); +

+

+ return; +

+

+ } +

+

+   +

+

+ void lineNumberCB(int lineNo) { +

+

+ fprintf(fout, "Parsed %d number of lines!!\n", lineNo); +

+

+ return; +

+

+ } +

+

+   +

+

+ int main(int argc, char** argv) { +

+

+ int num = 1734; +

+

+ char* inFile[6]; +

+

+ char* outFile; +

+

+ FILE* f; +

+

+ int res; +

+

+ int noCalls = 0; +

+

+ int retStr = 0; +

+

+ int numInFile = 0; +

+

+ int fileCt = 0; +

+

+   +

+

+ strcpy(defaultName, "def.in"); +

+

+ strcpy(defaultOut, "list"); +

+

+ inFile[0] = defaultName; +

+

+ outFile = defaultOut; +

+

+ fout = stdout; +

+

+ userData = 0x01020304; +

+

+   +

+

+ argc--; +

+

+ argv++; +

+

+ while (argc--) { +

+

+   +

+

+ if (strcmp(*argv, "-d") == 0) { +

+

+ argv++; +

+

+ argc--; +

+

+ sscanf(*argv, "%d", &num); +

+

+ defiSetDebug(num, 1); +

+

+   +

+

+ } else if (strcmp(*argv, "-nc") == 0) { +

+

+ noCalls = 1; +

+

+   +

+

+ } else if (strcmp(*argv, "-o") == 0) { +

+

+ argv++; +

+

+ argc--; +

+

+ outFile = *argv; +

+

+ if ((fout = fopen(outFile, "w")) == 0) { +

+

+     fprintf(stderr, "ERROR: could not open output file\n"); +

+

+     return 2; +

+

+ } +

+

+   +

+

+ } else if (strcmp(*argv, "-verStr") == 0) { +

+

+ /* New to set the version callback routine to return a string */ +

+

+ /* instead of double. */ +

+

+ retStr = 1; +

+

+   +

+

+ } else if (argv[0][0] != '-') { +

+

+ if (numInFile >= 6) { +

+

+ fprintf(stderr, "ERROR: too many input files, max = 6.\n"); +

+

+ return 2; +

+

+ } +

+

+ inFile[numInFile++] = *argv; +

+

+ } else if (strcmp(*argv, "-h") == 0) { +

+

+ fprintf(stderr, "Usage: defrw [<defFilename>] [-o <outputFilename>]\n"); +

+

+ return 2; +

+

+ } else if (strcmp(*argv, "-setSNetWireCbk") == 0) { +

+

+ setSNetWireCbk = 1; +

+

+ } else { +

+

+ fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv); +

+

+ return 2; +

+

+ } +

+

+   +

+

+ argv++; +

+

+ } +

+

+   +

+

+ if (noCalls == 0) { +

+

+ defrSetUserData((void*)3); +

+

+ defrSetDesignCbk(dname); +

+

+ defrSetTechnologyCbk(tname); +

+

+ defrSetExtensionCbk(extension); +

+

+ defrSetDesignEndCbk(done); +

+

+ defrSetPropDefStartCbk(propstart); +

+

+ defrSetPropCbk(prop); +

+

+ defrSetPropDefEndCbk(propend); +

+

+ defrSetNetCbk(netf); +

+

+ defrSetNetNameCbk(netNamef); +

+

+ defrSetNetNonDefaultRuleCbk(nondefRulef); +

+

+ defrSetNetSubnetNameCbk(subnetNamef); +

+

+ defrSetNetPartialPathCbk(netpath); +

+

+ defrSetSNetCbk(snetf); +

+

+ defrSetSNetPartialPathCbk(snetpath); +

+

+ if (setSNetWireCbk) +

+

+ defrSetSNetWireCbk(snetwire); +

+

+ defrSetComponentCbk(compf); +

+

+ defrSetAddPathToNet(); +

+

+ defrSetHistoryCbk(hist); +

+

+ defrSetConstraintCbk(constraint); +

+

+ defrSetAssertionCbk(constraint); +

+

+ defrSetArrayNameCbk(an); +

+

+ defrSetFloorPlanNameCbk(fn); +

+

+ defrSetDividerCbk(dn); +

+

+ defrSetBusBitCbk(bbn); +

+

+ defrSetNonDefaultCbk(ndr); +

+

+   +

+

+ defrSetAssertionsStartCbk(constraintst); +

+

+ defrSetConstraintsStartCbk(constraintst); +

+

+ defrSetComponentStartCbk(cs); +

+

+ defrSetPinPropStartCbk(cs); +

+

+ defrSetNetStartCbk(cs); +

+

+ defrSetStartPinsCbk(cs); +

+

+ defrSetViaStartCbk(cs); +

+

+ defrSetRegionStartCbk(cs); +

+

+ defrSetSNetStartCbk(cs); +

+

+ defrSetGroupsStartCbk(cs); +

+

+ defrSetScanchainsStartCbk(cs); +

+

+ defrSetIOTimingsStartCbk(cs); +

+

+ defrSetFPCStartCbk(cs); +

+

+ defrSetTimingDisablesStartCbk(cs); +

+

+ defrSetPartitionsStartCbk(cs); +

+

+ defrSetBlockageStartCbk(cs); +

+

+ defrSetSlotStartCbk(cs); +

+

+ defrSetFillStartCbk(cs); +

+

+ defrSetNonDefaultStartCbk(cs); +

+

+ defrSetStylesStartCbk(cs); +

+

+   +

+

+ // All of the extensions point to the same function. +

+

+ defrSetNetExtCbk(ext); +

+

+ defrSetComponentExtCbk(ext); +

+

+ defrSetPinExtCbk(ext); +

+

+ defrSetViaExtCbk(ext); +

+

+ defrSetNetConnectionExtCbk(ext); +

+

+ defrSetGroupExtCbk(ext); +

+

+ defrSetScanChainExtCbk(ext); +

+

+ defrSetIoTimingsExtCbk(ext); +

+

+ defrSetPartitionsExtCbk(ext); +

+

+   +

+

+ defrSetUnitsCbk(units); +

+

+ if (!retStr) +

+

+ defrSetVersionCbk(vers); +

+

+ else +

+

+ defrSetVersionStrCbk(versStr); +

+

+ defrSetCaseSensitiveCbk(casesens); +

+

+   +

+

+ // The following calls are an example of using one function "cls" +

+

+ // to be the callback for many DIFFERENT types of constructs. +

+

+ // We have to cast the function type to meet the requirements +

+

+ // of each different set function. +

+

+ defrSetSiteCbk((defrSiteCbkFnType)cls); +

+

+ defrSetCanplaceCbk((defrSiteCbkFnType)cls); +

+

+ defrSetCannotOccupyCbk((defrSiteCbkFnType)cls); +

+

+ defrSetDieAreaCbk((defrBoxCbkFnType)cls); +

+

+ defrSetPinCapCbk((defrPinCapCbkFnType)cls); +

+

+ defrSetPinCbk((defrPinCbkFnType)cls); +

+

+ defrSetPinPropCbk((defrPinPropCbkFnType)cls); +

+

+ defrSetDefaultCapCbk((defrIntegerCbkFnType)cls); +

+

+ defrSetRowCbk((defrRowCbkFnType)cls); +

+

+ defrSetTrackCbk((defrTrackCbkFnType)cls); +

+

+ defrSetGcellGridCbk((defrGcellGridCbkFnType)cls); +

+

+ defrSetViaCbk((defrViaCbkFnType)cls); +

+

+ defrSetRegionCbk((defrRegionCbkFnType)cls); +

+

+ defrSetGroupNameCbk((defrStringCbkFnType)cls); +

+

+ defrSetGroupMemberCbk((defrStringCbkFnType)cls); +

+

+ defrSetGroupCbk((defrGroupCbkFnType)cls); +

+

+ defrSetScanchainCbk((defrScanchainCbkFnType)cls); +

+

+ defrSetIOTimingCbk((defrIOTimingCbkFnType)cls); +

+

+ defrSetFPCCbk((defrFPCCbkFnType)cls); +

+

+ defrSetTimingDisableCbk((defrTimingDisableCbkFnType)cls); +

+

+ defrSetPartitionCbk((defrPartitionCbkFnType)cls); +

+

+ defrSetBlockageCbk((defrBlockageCbkFnType)cls); +

+

+ defrSetSlotCbk((defrSlotCbkFnType)cls); +

+

+ defrSetFillCbk((defrFillCbkFnType)cls); +

+

+ defrSetStylesCbk((defrStylesCbkFnType)cls); +

+

+   +

+

+ defrSetAssertionsEndCbk(endfunc); +

+

+ defrSetComponentEndCbk(endfunc); +

+

+ defrSetConstraintsEndCbk(endfunc); +

+

+ defrSetNetEndCbk(endfunc); +

+

+ defrSetFPCEndCbk(endfunc); +

+

+ defrSetFPCEndCbk(endfunc); +

+

+ defrSetGroupsEndCbk(endfunc); +

+

+ defrSetIOTimingsEndCbk(endfunc); +

+

+ defrSetNetEndCbk(endfunc); +

+

+ defrSetPartitionsEndCbk(endfunc); +

+

+ defrSetRegionEndCbk(endfunc); +

+

+ defrSetSNetEndCbk(endfunc); +

+

+ defrSetScanchainsEndCbk(endfunc); +

+

+ defrSetPinEndCbk(endfunc); +

+

+ defrSetTimingDisablesEndCbk(endfunc); +

+

+ defrSetViaEndCbk(endfunc); +

+

+ defrSetPinPropEndCbk(endfunc); +

+

+ defrSetBlockageEndCbk(endfunc); +

+

+ defrSetSlotEndCbk(endfunc); +

+

+ defrSetFillEndCbk(endfunc); +

+

+ defrSetNonDefaultEndCbk(endfunc); +

+

+ defrSetStylesEndCbk(endfunc); +

+

+   +

+

+ defrSetMallocFunction(mallocCB); +

+

+ defrSetReallocFunction(reallocCB); +

+

+ defrSetFreeFunction(freeCB); +

+

+   +

+

+ defrSetLineNumberFunction(lineNumberCB); +

+

+ defrSetDeltaNumberLines(50); +

+

+   +

+

+ // Testing to set the number of warnings +

+

+ defrSetAssertionWarnings(3); +

+

+ defrSetBlockageWarnings(3); +

+

+ defrSetCaseSensitiveWarnings(3); +

+

+ defrSetComponentWarnings(3); +

+

+ defrSetConstraintWarnings(0); +

+

+ defrSetDefaultCapWarnings(3); +

+

+ defrSetGcellGridWarnings(3); +

+

+ defrSetIOTimingWarnings(3); +

+

+ defrSetNetWarnings(3); +

+

+ defrSetNonDefaultWarnings(3); +

+

+ defrSetPinExtWarnings(3); +

+

+ defrSetPinWarnings(3); +

+

+ defrSetRegionWarnings(3); +

+

+ defrSetRowWarnings(3); +

+

+ defrSetScanchainWarnings(3); +

+

+ defrSetSNetWarnings(3); +

+

+ defrSetStylesWarnings(3); +

+

+ defrSetTrackWarnings(3); +

+

+ defrSetUnitsWarnings(3); +

+

+ defrSetVersionWarnings(3); +

+

+ defrSetViaWarnings(3); +

+

+ } +

+

+   +

+

+ defrInit(); +

+

+   +

+

+ for (fileCt = 0; fileCt < numInFile; fileCt++) { +

+

+ defrReset(); +

+

+ if ((f = fopen(inFile[fileCt],"r")) == 0) { +

+

+ fprintf(stderr,"Couldn't open input file '%s'\n", inFile[fileCt]); +

+

+ return(2); +

+

+ } +

+

+ // Set case sensitive to 0 to start with, in History & PropertyDefinition +

+

+ // reset it to 1. +

+

+ res = defrRead(f, inFile[fileCt], (void*)userData, 1); +

+

+   +

+

+ if (res) +

+

+ fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]); +

+

+   +

+

+ (void)defrPrintUnusedCallbacks(fout); +

+

+ (void)defrReleaseNResetMemory(); +

+

+   +

+

+ } +

+

+ fclose(fout); +

+

+   +

+

+ return res; +

+

+ } +

+

+   +

+

DEF Writer Example

+

+ #include <stdlib.h> +

+

+ #include <stdio.h> +

+

+ #include <string.h> +

+

+ #ifndef WIN32 +

+

+ # include <unistd.h> +

+

+ #endif /* not WIN32 */ +

+

+ #include "defwWriter.hpp" +

+

+ +

+

+ char defaultOut[128]; +

+

+ +

+

+ // Global variables +

+

+ FILE* fout; +

+

+ +

+

+ #define CHECK_STATUS(status) \ +

+

+ if (status) { \ +

+

+ defwPrintError(status); \ +

+

+ return(status); \ +

+

+ } +

+

+ +

+

+ int main(int argc, char** argv) { +

+

+ char* outfile; +

+

+ int status; // return code, if none 0 means error +

+

+ int lineNumber = 0; +

+

+   +

+

+ const char** layers; +

+

+ const char** foreigns; +

+

+ int *foreignX, *foreignY, *foreignOrient; +

+

+ const char** foreignOrientStr; +

+

+ const char **coorX, **coorY; +

+

+ const char **coorValue; +

+

+ const char **groupExpr; +

+

+ int *xPoints, *yPoints; +

+

+ double *xP, *yP; +

+

+ +

+

+ // assign the default +

+

+ strcpy(defaultOut, "def.in"); +

+

+ outfile = defaultOut; +

+

+ fout = stdout; +

+

+ +

+

+ argc--; +

+

+ argv++; +

+

+ while (argc--) { +

+

+ if (strcmp(*argv, "-o") == 0) { // output filename +

+

+ argv++; +

+

+ argc--; +

+

+ outfile = *argv; +

+

+ if ((fout = fopen(outfile, "w")) == 0) { +

+

+ fprintf(stderr, "ERROR: could not open output file\n"); +

+

+ return 2; +

+

+ } +

+

+ } else if (strncmp(*argv, "-h", 2) == 0) { // compare with -h[elp] +

+

+ fprintf(stderr, "Usage: defwrite [-o <filename>] [-help]\n"); +

+

+ return 1; +

+

+ } else { +

+

+ fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv); +

+

+ return 2; +

+

+ } +

+

+ argv++; +

+

+ } +

+

+   +

+

+ status = defwInitCbk(fout); +

+

+ CHECK_STATUS(status); +

+

+ status = defwVersion (5, 7); +

+

+ CHECK_STATUS(status); +

+

+ status = defwDividerChar(":"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBusBitChars("[]"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwDesignName("muk"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwTechnology("muk"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwArray("core_array"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFloorplan("DEFAULT"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwUnits(100); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // initalize +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // history +

+

+ status = defwHistory("Corrected STEP for ROW_9 and added ROW_10 of SITE CORE1 (def)"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwHistory("Removed NONDEFAULTRULE from the net XX100 (def)"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwHistory("Changed some cell orientations (def)"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // PROPERTYDEFINITIONS +

+

+ status = defwStartPropDef(); +

+

+ CHECK_STATUS(status); +

+

+ defwAddComment("defwPropDef is broken into 3 routines, defwStringPropDef"); +

+

+ defwAddComment("defwIntPropDef, and defwRealPropDef"); +

+

+ status = defwStringPropDef("REGION", "scum", 0, 0, 0 ); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("REGION", "center", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("REGION", "area", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("GROUP", "ggrp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("GROUP", "site", 0, 25, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("GROUP", "maxarea", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("COMPONENT", "cc", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("COMPONENT", "index", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("COMPONENT", "size", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("NET", "alt", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("NET", "lastName", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("NET", "length", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("SPECIALNET", "contype", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("SPECIALNET", "ind", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("SPECIALNET", "maxlength", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("DESIGN", "title", 0, 0, "Buffer"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("DESIGN", "priority", 0, 0, 14); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("DESIGN", "howbig", 0, 0, 15.16); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("ROW", "minlength", 1.0, 100.0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("ROW", "firstName", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("ROW", "idx", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("COMPONENTPIN", "dpIgnoreTerm", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("COMPONENTPIN", "dpBit", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("COMPONENTPIN", "realProperty", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("NET", "IGNOREOPTIMIZATION", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("SPECIALNET", "IGNOREOPTIMIZATION", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("NET", "FREQUENCY", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("SPECIALNET", "FREQUENCY", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringPropDef("NONDEFAULTRULE", "ndprop1", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntPropDef("NONDEFAULTRULE", "ndprop2", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("NONDEFAULTRULE", "ndprop3", 0, 0, 0.009); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealPropDef("NONDEFAULTRULE", "ndprop4", .1, 1.0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndPropDef(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // DIEAREA +

+

+ xPoints = (int*)malloc(sizeof(int)*6); +

+

+ yPoints = (int*)malloc(sizeof(int)*6); +

+

+ xPoints[0] = 2000; +

+

+ yPoints[0] = 2000; +

+

+ xPoints[1] = 3000; +

+

+ yPoints[1] = 3000; +

+

+ xPoints[2] = 4000; +

+

+ yPoints[2] = 4000; +

+

+ xPoints[3] = 5000; +

+

+ yPoints[3] = 5000; +

+

+ xPoints[4] = 6000; +

+

+ yPoints[4] = 6000; +

+

+ xPoints[5] = 7000; +

+

+ yPoints[5] = 7000; +

+

+ status = defwDieAreaList(6, xPoints, yPoints); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xPoints); +

+

+ free((char*)yPoints); +

+

+   +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // ROW +

+

+ status = defwRow("ROW_9", "CORE", -177320, -111250, 6, 911, 1, 360, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealProperty("minlength", 50.5); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("firstName", "Only"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("idx", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRowStr("ROW_10", "CORE1", -19000, -11000, "FN", 1, 100, 0, 600); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRowStr("ROW_11", "CORE1", -19000, -11000, "FN", 1, 100, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRow("ROW_12", "CORE1", -19000, -11000, 3, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRowStr("ROW_13", "CORE1", -19000, -11000, "FN", 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // TRACKS +

+

+ layers = (const char**)malloc(sizeof(char*)*1); +

+

+ layers[0] = strdup("M1"); +

+

+ status = defwTracks("X", 3000, 40, 120, 1, layers); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)layers[0]); +

+

+ layers[0] = strdup("M2"); +

+

+ status = defwTracks("Y", 5000, 10, 20, 1,layers); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)layers[0]); +

+

+ free((char*)layers); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+ +

+

+ // GCELLGRID +

+

+ status = defwGcellGrid("X", 0, 100, 600); +

+

+ CHECK_STATUS(status); +

+

+ status = defwGcellGrid("Y", 10, 120, 400); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // CANPLACE +

+

+ status = defwCanPlaceStr("dp", 45, 64, "N", 35, 1, 39, 1); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwCanPlace("dp", 45, 64, 1, 35, 1, 39, 1); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // CANNOTOCCUPY +

+

+ status = defwCannotOccupyStr("dp", 54, 44, "S", 55, 2, 45, 3); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // VIAS +

+

+ status = defwStartVias(7); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaName("VIA_ARRAY"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaPattern("P1-435-543-IJ1FS"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaRect("M1", -40, -40, 40, 40); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaRect("V1", -40, -40, 40, 40); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaRect("M2", -50, -50, 50, 50); +

+

+ CHECK_STATUS(status); +

+

+ status = defwOneViaEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaName("VIA_ARRAY1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaRect("M1", -40, -40, 40, 40); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaRect("V1", -40, -40, 40, 40); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaRect("M2", -50, -50, 50, 50); +

+

+ CHECK_STATUS(status); +

+

+ status = defwOneViaEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaName("myUnshiftedVia"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaViarule("myViaRule", 20, 20, "metal1", "cut12", "metal2", +

+

+ 5, 5, 0, 4, 0, 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaViaruleRowCol(2, 3); +

+

+ CHECK_STATUS(status); +

+

+ status = defwOneViaEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaName("via2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaViarule("viaRule2", 5, 6, "botLayer2", "cutLayer2", +

+

+ "topLayer2", 6, 6, 1, 4, 1, 4); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaViaruleOrigin(10, -10); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaViaruleOffset(0, 0, 20, -20); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaViarulePattern("2_F0_2_F8_1_78"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwOneViaEnd(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwViaName("via3"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaPattern("P2-435-543-IJ1FS"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaRect("M2", -40, -40, 40, 40); +

+

+ CHECK_STATUS(status); +

+

+ status = defwOneViaEnd(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ xP = (double*)malloc(sizeof(double)*6); +

+

+ yP = (double*)malloc(sizeof(double)*6); +

+

+ xP[0] = -2.1; +

+

+ yP[0] = -1.0; +

+

+ xP[1] = -2; +

+

+ yP[1] = 1; +

+

+ xP[2] = 2.1; +

+

+ yP[2] = 1.0; +

+

+ xP[3] = 2.0; +

+

+ yP[3] = -1.0; +

+

+ status = defwViaName("via4"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaPolygon("M3", 4, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaRect("M4", -40, -40, 40, 40); +

+

+ CHECK_STATUS(status); +

+

+ xP[0] = 100; +

+

+ yP[0] = 100; +

+

+ xP[1] = 200; +

+

+ yP[1] = 200; +

+

+ xP[2] = 300; +

+

+ yP[2] = 300; +

+

+ xP[3] = 400; +

+

+ yP[3] = 400; +

+

+ xP[4] = 500; +

+

+ yP[4] = 500; +

+

+ xP[5] = 600; +

+

+ yP[5] = 600; +

+

+ status = defwViaPolygon("M5", 6, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwOneViaEnd(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ xP[0] = 200; +

+

+ yP[0] = 200; +

+

+ xP[1] = 300; +

+

+ yP[1] = 300; +

+

+ xP[2] = 400; +

+

+ yP[2] = 500; +

+

+ xP[3] = 100; +

+

+ yP[3] = 300; +

+

+ xP[4] = 300; +

+

+ yP[4] = 200; +

+

+ status = defwViaName("via5"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwViaPolygon("M6", 5, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwOneViaEnd(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+ status = defwEndVias(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // REGIONS +

+

+ status = defwStartRegions(2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRegionName("region1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRegionPoints(-500, -500, 300, 100); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRegionPoints(500, 500, 1000, 1000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRegionType("FENCE"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("scum", "on top"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("center", 250); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("area", 730000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRegionName("region2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRegionPoints(4000, 0, 5000, 1000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("scum", "on bottom"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndRegions(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // COMPONENTS +

+

+ foreigns = (const char**)malloc(sizeof(char*)*2); +

+

+ foreignX = (int*)malloc(sizeof(int)*2); +

+

+ foreignY = (int*)malloc(sizeof(int)*2); +

+

+ foreignOrient = (int*)malloc(sizeof(int)*2); +

+

+ foreignOrientStr = (const char**)malloc(sizeof(char*)*2); +

+

+ status = defwStartComponents(11); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponent("Z38A01", "DFF3", 0, NULL, NULL, NULL, NULL, NULL, +

+

+ 0, NULL, NULL, NULL, NULL, "PLACED", 18592, 5400, 6, 0, +

+

+ NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponentHalo(100, 0, 50, 200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponentStr("Z38A03", "DFF3", 0, NULL, NULL, NULL, NULL, NULL, +

+

+ 0, NULL, NULL, NULL, NULL, "PLACED", 16576, 45600, +

+

+ "FS", 0, NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponentHalo(200, 2, 60, 300); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponent("Z38A05", "DFF3", 0, NULL, NULL, NULL, NULL, NULL, +

+

+ 0, NULL, NULL, NULL, NULL, "PLACED", 51520, 9600, 6, 0, +

+

+ NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponent("|i0", "INV_B", 0, NULL, "INV", NULL, NULL, NULL, +

+

+ 0, NULL, NULL, NULL, NULL, NULL, 0, 0, -1, 0, +

+

+ "region1", 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponentHaloSoft(100, 0, 50, 200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponent("|i1", "INV_B", 0, NULL, "INV", NULL, NULL, NULL, +

+

+ 0, NULL, NULL, NULL, NULL, "UNPLACED", 1000, 1000, 0, +

+

+ 0, NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponent("cell1", "CHM6A", 0, NULL, NULL, "generator", NULL, +

+

+ "USER", 0, NULL, NULL, NULL, NULL, "FIXED", 0, 10, 0, +

+

+ 100.4534535, NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponent("cell2", "CHM6A", 0, NULL, NULL, NULL, NULL, +

+

+ "NETLIST", 0, NULL, NULL, NULL, NULL, "COVER", 120, +

+

+ 10, 4, 2, NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ foreigns[0] = strdup("gds2name"); +

+

+ foreignX[0] = -500; +

+

+ foreignY[0] = -500; +

+

+ foreignOrient[0] = 3; +

+

+ status = defwComponent("cell3", "CHM6A", 0, NULL, NULL, NULL, NULL, +

+

+ "TIMING", 1, foreigns, foreignX, foreignY, +

+

+ foreignOrient, "PLACED", 240, +

+

+ 10, 0, 0, "region1", 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponentRouteHalo(100, "metal1", "metal3"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)foreigns[0]); +

+

+ foreigns[0] = strdup("gds3name"); +

+

+ foreignX[0] = -500; +

+

+ foreignY[0] = -500; +

+

+ foreignOrientStr[0] = strdup("FW"); +

+

+ foreigns[1] = strdup("gds4name"); +

+

+ foreignX[1] = -300; +

+

+ foreignY[1] = -300; +

+

+ foreignOrientStr[1] = strdup("FS"); +

+

+ status = defwComponentStr("cell4", "CHM3A", 0, NULL, "CHM6A", NULL, NULL, +

+

+ "DIST", 2, foreigns, foreignX, foreignY, +

+

+ foreignOrientStr, "PLACED", 360, +

+

+ 10, "W", 0, "region2", 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponentHaloSoft(100, 0, 50, 200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("cc", "This is the copy list"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("index", 9); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealProperty("size", 7.8); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponent("scancell1", "CHK3A", 0, NULL, NULL, NULL, NULL, +

+

+ NULL, 0, NULL, NULL, NULL, NULL, "PLACED", 500, +

+

+ 10, 7, 0, NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwComponent("scancell2", "CHK3A", 0, NULL, NULL, NULL, NULL, +

+

+ NULL, 0, NULL, NULL, NULL, NULL, "PLACED", 700, +

+

+ 10, 6, 0, NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndComponents(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)foreigns[0]); +

+

+ free((char*)foreigns[1]); +

+

+ free((char*)foreigns); +

+

+ free((char*)foreignX); +

+

+ free((char*)foreignY); +

+

+ free((char*)foreignOrient); +

+

+ free((char*)foreignOrientStr[0]); +

+

+ free((char*)foreignOrientStr[1]); +

+

+ free((char*)foreignOrientStr); +

+

+   +

+

+ xP = (double*)malloc(sizeof(double)*6); +

+

+ yP = (double*)malloc(sizeof(double)*6); +

+

+ xP[0] = 2.1; +

+

+ yP[0] = 2.1; +

+

+ xP[1] = 3.1; +

+

+ yP[1] = 3.1; +

+

+ xP[2] = 4.1; +

+

+ yP[2] = 4.1; +

+

+ xP[3] = 5.1; +

+

+ yP[3] = 5.1; +

+

+ xP[4] = 6.1; +

+

+ yP[4] = 6.1; +

+

+ xP[5] = 7.1; +

+

+ yP[5] = 7.1; +

+

+   +

+

+ // PINS +

+

+ status = defwStartPins(11); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("scanpin", "net1", 0, "INPUT", NULL, NULL, 0, 0, -1, NULL, +

+

+ 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPolygon("metal1", 0, 1000, 6, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinNetExpr("power1 VDD1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("pin0", "net1", 0, "INPUT", "SCAN", NULL, 0, 0, -1, NULL, +

+

+ 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinStr("pin0.5", "net1", 0, "INPUT", "RESET", "FIXED", 0, 0, "S", +

+

+ NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPolygon("metal2", 0, 0, 4, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinLayer("metal3", 500, 0, -5000, -100, -4950, -90); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("pin1", "net1", 1, NULL, "POWER", NULL, 0, 0, -1, "M1", +

+

+ -5000, -100, -4950, -90); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialMetalArea(4580, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialMetalArea(4580, "M11"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialMetalArea(4580, "M12"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinGateArea(4580, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinDiffArea(4580, "M3"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinDiffArea(4580, "M31"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxAreaCar(5000, "L1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxSideAreaCar(5000, "M4"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialCutArea(4580, "M4"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxCutCar(5000, "L1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("pin2", "net2", 0, "INPUT", "SIGNAL", NULL, 0, 0, -1, "M1", +

+

+ -5000, 0, -4950, 10); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinLayer("M1", 500, 0, -5000, 0, -4950, 10); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPolygon("M2", 0, 0, 4, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPolygon("M3", 0, 0, 3, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinLayer("M4", 0, 500, 0, 100, -400, 100); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinSupplySensitivity("vddpin1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinGroundSensitivity("gndpin1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialMetalArea(5000, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialMetalSideArea(4580, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinGateArea(5000, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialCutArea(5000, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("INBUS[1]", "|INBUS[1]", 0, "INPUT", "SIGNAL", "FIXED", +

+

+ 45, -2160, 0, "M2", 0, 0, 30, 135); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinLayer("M2", 0, 0, 0, 0, 30, 135); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialMetalArea(1, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialMetalSideArea(2, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinDiffArea(4, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinPartialCutArea(5, "V1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaModel("OXIDE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinGateArea(3, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxAreaCar(6, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxSideAreaCar(7, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxCutCar(8, "V1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaModel("OXIDE2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinGateArea(30, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxAreaCar(60, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxSideAreaCar(70, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinAntennaPinMaxCutCar(80, "V1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("INBUS<0>", "|INBUS<0>", 0, "INPUT", "SIGNAL", "PLACED", +

+

+ -45, 2160, 1, "M2", 0, 0, 30, 134); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinLayer("M2", 0, 1000, 0, 0, 30, 134); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("OUTBUS<1>", "|OUTBUS<1>", 0, "OUTPUT", "SIGNAL", "COVER", +

+

+ 2160, 645, 2, "M1", 0, 0, 30, 135); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinLayer("M1", 0, 0, 0, 0, 30, 134); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinNetExpr("gnd1 GND"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("VDD", "VDD", 1, "INOUT", "POWER", NULL, 0, 0, -1, NULL, +

+

+ 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("BUSA[0]", "BUSA[0]", 0, "INPUT", "SIGNAL", "PLACED", +

+

+ 0, 2500, 1, NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinLayer("M1", 0, 0, -25, 0, 25, 50); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinLayer("M2", 0, 0, -10, 0, 10, 75); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinVia("via12", 0, 25); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPin("VDD", "VDD", 1, "INOUT", "POWER", NULL, +

+

+ 0, 0, -1, NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPortLayer("M2", 0, 0, -25, 0, 25, 50); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPortLocation("PLACED", 0, 2500, "S"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPortLayer("M1", 0, 0, -25, 0, 25, 50); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPortLocation("COVER", 0, 2500, "S"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPortLayer("M1", 0, 0, -25, 0, 25, 50); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinPortLocation("FIXED", 0, 2500, "S"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwEndPins(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+   +

+

+ // PINPROPERTIES +

+

+ status = defwStartPinProperties(2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinProperty("cell1", "PB1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("dpBit", "1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealProperty("realProperty", 3.4); +

+

+ CHECK_STATUS(status); +

+

+ status = defwPinProperty("cell2", "vdd"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("dpIgnoreTerm", 2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndPinProperties(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // SPECIALNETS +

+

+ status = defwStartSpecialNets(7); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNet("net1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("cell1", "VDD", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("cell2", "VDD", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("cell3", "VDD", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("cell4", "VDD", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetWidth("M1", 200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetWidth("M2", 300); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetVoltage(3.2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetSpacing("M1", 200, 190, 210); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetSource("TIMING"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetOriginal("VDD"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetUse("POWER"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetWeight(30); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("contype", "star"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("ind", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealProperty("maxlength", 12.13); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNet("VSS"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("cell1", "GND", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("cell2", "GND", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("cell3", "GND", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("cell4", "GND", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetUse("SCAN"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(250); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathShape("IOWIRE"); +

+

+ CHECK_STATUS(status); +

+

+ coorX = (const char**)malloc(sizeof(char*)*3); +

+

+ coorY = (const char**)malloc(sizeof(char*)*3); +

+

+ coorValue = (const char**)malloc(sizeof(char*)*3); +

+

+ coorX[0] = strdup("5"); +

+

+ coorY[0] = strdup("15"); +

+

+ coorValue[0] = NULL; +

+

+ coorX[1] = strdup("125"); +

+

+ coorY[1] = strdup("*"); +

+

+ coorValue[1] = strdup("235"); +

+

+ coorX[2] = strdup("245"); +

+

+ coorY[2] = strdup("*"); +

+

+ coorValue[2] = strdup("255"); +

+

+ status = defwSpecialNetPathPointWithWireExt(3, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorValue[1]); +

+

+ free((char*)coorValue[2]); +

+

+ free((char*)coorValue); +

+

+ status = defwSpecialNetShieldStart("my_net"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldWidth(90); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldShape("STRIPE"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("14100"); +

+

+ coorY[0] = strdup("342440"); +

+

+ coorX[1] = strdup("13920"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetShieldPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldVia("M2_TURN"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("263200"); +

+

+ status = defwSpecialNetShieldPoint(1, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldVia("M1_M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldViaData(10, 20, 1000, 2000); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ coorX[0] = strdup("2400"); +

+

+ coorY[0] = strdup("*"); +

+

+ status = defwSpecialNetShieldPoint(1, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldStart("my_net1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldWidth(90); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ coorX[0] = strdup("14100"); +

+

+ coorY[0] = strdup("342440"); +

+

+ coorX[1] = strdup("13920"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetShieldPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldVia("M2_TURN"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("263200"); +

+

+ status = defwSpecialNetShieldPoint(1, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldVia("M1_M2"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ coorX[0] = strdup("2400"); +

+

+ coorY[0] = strdup("*"); +

+

+ status = defwSpecialNetShieldPoint(1, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetShieldEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPattern("STEINER"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetEstCap(100); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorX[2]); +

+

+ free((char*)coorY[2]); +

+

+ status = defwSpecialNet("VDD"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("*", "VDD", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("metal2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(100); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathShape("RING"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathStyle(1); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("0"); +

+

+ coorY[0] = strdup("0"); +

+

+ coorX[1] = strdup("100"); +

+

+ coorY[1] = strdup("100"); +

+

+ coorX[2] = strdup("200"); +

+

+ coorY[2] = strdup("100"); +

+

+ status = defwSpecialNetPathPoint(3, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorX[2]); +

+

+ free((char*)coorY[2]); +

+

+ status = defwSpecialNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(270); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathShape("PADRING"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("-45"); +

+

+ coorY[0] = strdup("1350"); +

+

+ coorX[1] = strdup("44865"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetPathPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwSpecialNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(270); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("-45"); +

+

+ coorY[0] = strdup("1350"); +

+

+ coorX[1] = strdup("44865"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetPathPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNet("CLOCK"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathShape("BLOCKRING"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ coorX[0] = strdup("-45"); +

+

+ coorY[0] = strdup("1350"); +

+

+ coorX[1] = strdup("44865"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetPathPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwSpecialNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(270); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("-45"); +

+

+ coorY[0] = strdup("1350"); +

+

+ coorX[1] = strdup("44865"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetPathPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwSpecialNet("VCC"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathShape("DRCFILL"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("-45"); +

+

+ coorY[0] = strdup("1350"); +

+

+ coorX[1] = strdup("44865"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetPathPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwSpecialNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(270); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathShape("STRIPE"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("-45"); +

+

+ coorY[0] = strdup("1350"); +

+

+ coorX[1] = strdup("44865"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetPathPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwSpecialNet("n1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("PIN", "n1", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("driver1", "in", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetConnection("bumpa1", "bumppin", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetFixedbump(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathWidth(200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathShape("FILLWIREOPC"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("-45"); +

+

+ coorY[0] = strdup("1350"); +

+

+ coorX[1] = strdup("44865"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwSpecialNetPathPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorX); +

+

+ free((char*)coorY); +

+

+   +

+

+ status = defwSpecialNet("VSS1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetUse("POWER"); +

+

+ CHECK_STATUS(status); +

+

+ xP = (double*)malloc(sizeof(double)*6); +

+

+ yP = (double*)malloc(sizeof(double)*6); +

+

+ xP[0] = 2.1; +

+

+ yP[0] = 2.1; +

+

+ xP[1] = 3.1; +

+

+ yP[1] = 3.1; +

+

+ xP[2] = 4.1; +

+

+ yP[2] = 4.1; +

+

+ xP[3] = 5.1; +

+

+ yP[3] = 5.1; +

+

+ xP[4] = 6.1; +

+

+ yP[4] = 6.1; +

+

+ xP[5] = 7.1; +

+

+ yP[5] = 7.1; +

+

+ status = defwSpecialNetPolygon("metal1", 4, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetPolygon("metal1", 6, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetRect("metal1", 0, 0, 100, 200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetRect("metal2", 1, 1, 100, 200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSpecialNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+ status = defwEndSpecialNets(); +

+

+ CHECK_STATUS(status); +

+

+ +

+

+ // NETS +

+

+ status = defwStartNets(12); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNet("net1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A01", "Q", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A03", "Q", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A05", "Q", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("net2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("cell1", "PB1", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("cell2", "PB1", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("cell3", "PB1", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEstCap(200); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetWeight(2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetVpin("P1", NULL, 0, 0, 0, 0, "PLACED", 54, 64, 3); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("net3"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("cell4", "PA3", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("cell2", "P10", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetXtalk(30); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetOriginal("extra_crispy"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSource("USER"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetUse("SIGNAL"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetFrequency(100); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("alt", 37); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("lastName", "Unknown"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealProperty("length", 10.11); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPattern("BALANCED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetVpinStr("P2", "L1", 45, 54, 3, 46, "FIXED", 23, 12, "FN"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ coorX = (const char**)malloc(sizeof(char*)*5); +

+

+ coorY = (const char**)malloc(sizeof(char*)*5); +

+

+ coorValue = (const char**)malloc(sizeof(char*)*5); +

+

+ status = defwNet("my_net"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("I1", "A", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("BUF", "Z", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetNondefaultRule("RULE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetUse("RESET"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetShieldnet("VSS"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetShieldnet("VDD"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M2", 0, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStyle(2); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("14000"); +

+

+ coorY[0] = strdup("341440"); +

+

+ coorValue[0] = NULL; +

+

+ coorX[1] = strdup("9600"); +

+

+ coorY[1] = strdup("*"); +

+

+ coorValue[1] = NULL; +

+

+ coorX[2] = strdup("*"); +

+

+ coorY[2] = strdup("282400"); +

+

+ coorValue[2] = NULL; +

+

+ status = defwNetPathPoint(3, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("nd1VIA12"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("2400"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = NULL; +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M1", 1, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStyle(4); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("2400"); +

+

+ coorY[0] = strdup("282400"); +

+

+ coorValue[0] = NULL; +

+

+ coorX[1] = strdup("240"); +

+

+ coorY[1] = strdup("*"); +

+

+ coorValue[1] = NULL; +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorX[2]); +

+

+ free((char*)coorY[2]); +

+

+ status = defwNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetNoshieldStart("M2"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("14100"); +

+

+ coorY[0] = strdup("341440"); +

+

+ coorX[1] = strdup("14000"); +

+

+ coorY[1] = strdup("*"); +

+

+ status = defwNetNoshieldPoint(2, coorX, coorY); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetNoshieldEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("|INBUS[1]"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("|i1", "A", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("|INBUS<0>"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("|i0", "A", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("|OUTBUS<1>"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("|i0", "Z", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("MUSTJOIN"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("cell4", "PA1", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A05", "G", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A03", "G", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A01", "G", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetVpin("V_SUB3_XX100", NULL, -333, -333, 333, 333, "PLACED", +

+

+ 189560, 27300, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetVpin("V_SUB2_XX100", NULL, -333, -333, 333, 333, "PLACED", +

+

+ 169400, 64500, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetVpin("V_SUB1_XX100", NULL, -333, -333, 333, 333, "PLACED", +

+

+ 55160, 31500, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetStart("SUB1_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("Z38A05", "G"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("VPIN", "V_SUB1_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M1", 0, "RULE1"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ coorX[0] = strdup("54040"); +

+

+ coorY[0] = strdup("30300"); +

+

+ coorValue[0] = strdup("0"); +

+

+ coorX[1] = strdup("*"); +

+

+ coorY[1] = strdup("30900"); +

+

+ coorValue[1] = NULL; +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwNetPathVia("nd1VIA12"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = strdup("0"); +

+

+ coorX[1] = strdup("56280"); +

+

+ coorY[1] = strdup("*"); +

+

+ coorValue[1] = NULL; +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwNetPathViaWithOrient("nd1VIA23", 6); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("31500"); +

+

+ coorValue[0] = NULL; +

+

+ coorX[1] = strdup("55160"); +

+

+ coorY[1] = strdup("*"); +

+

+ coorValue[1] = NULL; +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetStart("SUB2_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("Z38A03", "G"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("VPIN", "V_SUB2_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M1", 0, NULL); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("168280"); +

+

+ coorY[0] = strdup("63300"); +

+

+ coorValue[0] = strdup("7"); +

+

+ coorX[1] = strdup("*"); +

+

+ coorY[1] = strdup("64500"); +

+

+ coorValue[1] = NULL; +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwNetPathVia("M1_M2"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("169400"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = strdup("8"); +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathViaWithOrientStr("M2_M3", "SE"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ status = defwNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetStart("SUB3_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("Z38A01", "G"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("VPIN", "V_SUB3_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M1", 0, NULL); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("188400"); +

+

+ coorY[0] = strdup("26100"); +

+

+ coorValue[0] = strdup("0"); +

+

+ coorX[1] = strdup("*"); +

+

+ coorY[1] = strdup("27300"); +

+

+ coorValue[1] = strdup("0"); +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorValue[1]); +

+

+ status = defwNetPathVia("M1_M2"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("189560"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = strdup("0"); +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ status = defwNetPathVia("M1_M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetStart("SUB0_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("VPIN", "V_SUB1_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("VPIN", "V_SUB2_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSubnetPin("VPIN", "V_SUB3_XX100"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetNondefaultRule("RULE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M3", 0, NULL); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("269400"); +

+

+ coorY[0] = strdup("64500"); +

+

+ coorValue[0] = strdup("0"); +

+

+ coorX[1] = strdup("*"); +

+

+ coorY[1] = strdup("54900"); +

+

+ coorValue[1] = NULL; +

+

+ coorX[2] = strdup("170520"); +

+

+ coorY[2] = strdup("*"); +

+

+ coorValue[2] = NULL; +

+

+ coorX[3] = strdup("*"); +

+

+ coorY[3] = strdup("37500"); +

+

+ coorValue[3] = NULL; +

+

+ coorX[4] = strdup("*"); +

+

+ coorY[4] = strdup("30300"); +

+

+ coorValue[4] = NULL; +

+

+ status = defwNetPathPoint(5, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorX[2]); +

+

+ free((char*)coorY[2]); +

+

+ free((char*)coorX[3]); +

+

+ free((char*)coorY[3]); +

+

+ free((char*)coorX[4]); +

+

+ free((char*)coorY[4]); +

+

+ status = defwNetPathVia("nd1VIA23"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("171080"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = NULL; +

+

+ coorX[1] = strdup("17440"); +

+

+ coorY[1] = strdup("0"); +

+

+ coorValue[1] = strdup("0"); +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorValue[1]); +

+

+ status = defwNetPathVia("nd1VIA23"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = NULL; +

+

+ coorX[1] = strdup("*"); +

+

+ coorY[1] = strdup("26700"); +

+

+ coorValue[1] = strdup("8"); +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorValue[1]); +

+

+ status = defwNetPathVia("nd1VIA23"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("177800"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = NULL; +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("nd1VIA23"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = strdup("8"); +

+

+ coorX[1] = strdup("*"); +

+

+ coorY[1] = strdup("30300"); +

+

+ coorValue[1] = strdup("8"); +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathVia("nd1VIA23"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorValue[1]); +

+

+ status = defwNetPathVia("nd1VIA23"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("189560"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = strdup("8"); +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ status = defwNetPathVia("nd1VIA12"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("27300"); +

+

+ coorValue[0] = strdup("0"); +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ status = defwNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M3", 1, NULL); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("55160"); +

+

+ coorY[0] = strdup("31500"); +

+

+ coorValue[0] = strdup("8"); +

+

+ coorX[1] = strdup("*"); +

+

+ coorY[1] = strdup("34500"); +

+

+ coorValue[1] = strdup("0"); +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorValue[1]); +

+

+ status = defwNetPathVia("M2_M3"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("149800"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = strdup("8"); +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ status = defwNetPathVia("M2_M3"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("35700"); +

+

+ coorValue[0] = NULL; +

+

+ coorX[1] = strdup("*"); +

+

+ coorY[1] = strdup("37500"); +

+

+ coorValue[1] = NULL; +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ status = defwNetPathVia("M2_M3"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = strdup("8");; +

+

+ coorX[1] = strdup("170520"); +

+

+ coorY[1] = strdup("*"); +

+

+ coorValue[1] = strdup("0"); +

+

+ status = defwNetPathPoint(2, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ free((char*)coorValue[0]); +

+

+ free((char*)coorX[1]); +

+

+ free((char*)coorY[1]); +

+

+ free((char*)coorValue[1]); +

+

+ status = defwNetPathVia("M2_M3"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("SCAN"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("scancell1", "P10", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("scancell2", "PA0", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetSource("TEST"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwNet("testBug"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A05", "G", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A03", "G", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("Z38A01", "G", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStart("ROUTED"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M1", 0, NULL); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("1288210"); +

+

+ coorY[0] = strdup("580930"); +

+

+ coorValue[0] = NULL; +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("GETH1W1W1"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("582820"); +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("GETH2W1W1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M3", 0, NULL); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("1141350"); +

+

+ coorY[0] = strdup("582820"); +

+

+ coorValue[0] = NULL; +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("GETH2W1W1"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("580930"); +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("GETH1W1W1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M1", 0, NULL); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("1278410"); +

+

+ coorY[0] = strdup("275170"); +

+

+ coorValue[0] = NULL; +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathStart("NEW"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathLayer("M1", 0, NULL); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("1141210"); +

+

+ coorY[0] = strdup("271250"); +

+

+ coorValue[0] = NULL; +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("GETH1W1W1"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("*"); +

+

+ coorY[0] = strdup("271460"); +

+

+ coorValue[0] = NULL; +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("GETH2W1W1"); +

+

+ CHECK_STATUS(status); +

+

+ coorX[0] = strdup("1142820"); +

+

+ coorY[0] = strdup("*"); +

+

+ coorValue[0] = NULL; +

+

+ status = defwNetPathPoint(1, coorX, coorY, coorValue); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX[0]); +

+

+ free((char*)coorY[0]); +

+

+ status = defwNetPathVia("GETH3W1W1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetPathEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)coorX); +

+

+ free((char*)coorY); +

+

+ free((char*)coorValue); +

+

+   +

+

+ status = defwNet("n1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("PIN", "n1", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("driver1", "in", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetConnection("bumpa1", "bumppin", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetFixedbump(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNetEndOneNet(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwEndNets(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // SCANCHAIN +

+

+ status = defwStartScanchains(4); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchain("the_chain"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainCommonscanpins("IN", "PA1", "OUT", "PA2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainStart("PIN", "scanpin"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainStop("cell4", "PA2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainOrdered("cell2", "IN", "PA0", NULL, NULL, +

+

+ "cell1", "OUT", "P10", NULL, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloating("scancell1", "IN", "PA0", NULL, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloating("scancell2", "OUT", "P10", NULL, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchain("chain1_clock1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainPartition("clock1", -1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainStart("block1/current_state_reg_0_QZ", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloating("block1/pgm_cgm_en_reg", "IN", "SD", "OUT", "QZ"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloating("block1/start_reset_dd_reg", "IN", "SD", "OUT", "QZ"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainStop("block1/start_reset_d_reg", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchain("chain2_clock2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainPartition("clock2", 1000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainStart("block1/current_state_reg_0_QZ", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloating("block1/port2_phy_addr_reg_0_", "IN", "SD", "OUT", "QZ "); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloating("block1/port2_phy_addr_reg_4_", "IN", "SD", "OUT", "QZ"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloatingBits("block1/port3_intfc", "IN", "SD", "OUT", "QZ", 4); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainOrderedBits("block1/mux1", "IN", "A", "OUT", "X", 0, +

+

+ "block1/ff2", "IN", "SD", "OUT", "Q", -1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchain("chain4_clock3"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainPartition("clock3", -1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainStart("block1/prescaler_IO/lfsr_reg1", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloating("block1/dp1_timers", NULL, NULL, NULL, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainFloatingBits("block1/bus8", NULL, NULL, NULL, NULL, 8); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainOrderedBits("block1/dsl/ffl", "IN", "SD", "OUT", "Q", +

+

+ -1, "block1/dsl/mux1", "IN", "B", "OUT", "Y", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainOrderedBits("block1/dsl/ff2", "IN", "SD", "OUT", "Q", +

+

+ -1, "block1/dsl/mux2", "IN", "B", "OUT", "Y", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwScanchainStop("block1/start_reset_d_reg", NULL); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = defwEndScanchain(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // GROUPS +

+

+ groupExpr = (const char**)malloc(sizeof(char*)*2); +

+

+ status = defwStartGroups(2); +

+

+ CHECK_STATUS(status); +

+

+ groupExpr[0] = strdup("cell2"); +

+

+ groupExpr[1] = strdup("cell3"); +

+

+ status = defwGroup("group1", 2, groupExpr); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)groupExpr[0]); +

+

+ free((char*)groupExpr[1]); +

+

+ status = defwGroupRegion(0, 0, 0, 0, "region1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("ggrp", "xx"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("side", 2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealProperty("maxarea", 5.6); +

+

+ CHECK_STATUS(status); +

+

+ groupExpr[0] = strdup("cell1"); +

+

+ status = defwGroup("group2", 1, groupExpr); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)groupExpr[0]); +

+

+ status = defwGroupRegion(0, 10, 1000, 1010, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("ggrp", "after the fall"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwGroupSoft("MAXHALFPERIMETER", 4000, "MAXX", 10000, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndGroups(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)groupExpr); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // BLOCKAGES +

+

+ xP = (double*)malloc(sizeof(double)*7); +

+

+ yP = (double*)malloc(sizeof(double)*7); +

+

+ xP[0] = 2.1; +

+

+ yP[0] = 2.1; +

+

+ xP[1] = 3.1; +

+

+ yP[1] = 3.1; +

+

+ xP[2] = 4.1; +

+

+ yP[2] = 4.1; +

+

+ xP[3] = 5.1; +

+

+ yP[3] = 5.1; +

+

+ xP[4] = 6.1; +

+

+ yP[4] = 6.1; +

+

+ xP[5] = 7.1; +

+

+ yP[5] = 7.1; +

+

+ xP[6] = 8.1; +

+

+ yP[6] = 8.1; +

+

+   +

+

+ status = defwStartBlockages(12); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageLayer("m1", "comp1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(3456, 4535, 3000, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(4500, 6500, 5500, 6000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePolygon(7, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePolygon(6, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(5000, 6000, 4000, 5000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePlacementComponent("m2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(4000, 6000, 8000, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(8000, 400, 600, 800); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageLayer("m3", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageSpacing(1000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(3000, 4000, 6000, 5000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageLayerSlots("m4"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageDesignRuleWidth(1000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(3000, 4000, 6000, 5000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageLayerFills("m5"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(3000, 4000, 6000, 5000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageLayerPushdown("m6"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(3000, 4000, 6000, 5000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePolygon(7, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePlacementComponent("m7"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(3000, 4000, 6000, 5000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePlacementPushdown(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(3000, 4000, 6000, 5000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePlacement(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(3000, 4000, 6000, 5000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePlacementSoft(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(4000, 6000, 8000, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePlacementPartial (1.1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageRect(4000, 6000, 8000, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageLayerExceptpgnet("metal1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockageSpacing(4); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBlockagePolygon(3, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndBlockages(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+   +

+

+ // SLOTS +

+

+ xP = (double*)malloc(sizeof(double)*7); +

+

+ yP = (double*)malloc(sizeof(double)*7); +

+

+ xP[0] = 2.1; +

+

+ yP[0] = 2.1; +

+

+ xP[1] = 3.1; +

+

+ yP[1] = 3.1; +

+

+ xP[2] = 4.1; +

+

+ yP[2] = 4.1; +

+

+ xP[3] = 5.1; +

+

+ yP[3] = 5.1; +

+

+ xP[4] = 6.1; +

+

+ yP[4] = 6.1; +

+

+ xP[5] = 7.1; +

+

+ yP[5] = 7.1; +

+

+ xP[6] = 8.1; +

+

+ yP[6] = 8.1; +

+

+ status = defwStartSlots(2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotLayer("MET1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotPolygon(7, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotPolygon(3, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(1000, 2000, 1500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(2000, 2000, 2500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(3000, 2000, 3500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotLayer("MET2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(1000, 2000, 1500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotPolygon(6, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndSlots(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+   +

+

+ // FILLS +

+

+ xP = (double*)malloc(sizeof(double)*7); +

+

+ yP = (double*)malloc(sizeof(double)*7); +

+

+ xP[0] = 2.1; +

+

+ yP[0] = 2.1; +

+

+ xP[1] = 3.1; +

+

+ yP[1] = 3.1; +

+

+ xP[2] = 4.1; +

+

+ yP[2] = 4.1; +

+

+ xP[3] = 5.1; +

+

+ yP[3] = 5.1; +

+

+ xP[4] = 6.1; +

+

+ yP[4] = 6.1; +

+

+ xP[5] = 7.1; +

+

+ yP[5] = 7.1; +

+

+ xP[6] = 8.1; +

+

+ yP[6] = 8.1; +

+

+ status = defwStartFills(5); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillLayer("MET1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(1000, 2000, 1500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillPolygon(5, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(2000, 2000, 2500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillPolygon(7, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(3000, 2000, 3500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillLayer("MET2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(1000, 2000, 1500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(1000, 4500, 1500, 6500); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(1000, 7000, 1500, 9000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(1000, 9500, 1500, 11500); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillPolygon(7, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillPolygon(6, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillLayer("metal1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillLayerOPC(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(100, 200, 150, 400); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillRect(300, 200, 350, 400); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillVia("via28"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillViaOPC(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillPoints(1, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillVia("via26"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwFillPoints(3, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndFills(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+   +

+

+ // SLOTS +

+

+ xP = (double*)malloc(sizeof(double)*7); +

+

+ yP = (double*)malloc(sizeof(double)*7); +

+

+ xP[0] = 2.1; +

+

+ yP[0] = 2.1; +

+

+ xP[1] = 3.1; +

+

+ yP[1] = 3.1; +

+

+ xP[2] = 4.1; +

+

+ yP[2] = 4.1; +

+

+ xP[3] = 5.1; +

+

+ yP[3] = 5.1; +

+

+ xP[4] = 6.1; +

+

+ yP[4] = 6.1; +

+

+ xP[5] = 7.1; +

+

+ yP[5] = 7.1; +

+

+ xP[6] = 8.1; +

+

+ yP[6] = 8.1; +

+

+ status = defwStartSlots(2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotLayer("MET1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(1000, 2000, 1500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotPolygon(5, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(2000, 2000, 2500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotPolygon(7, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(3000, 2000, 3500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotLayer("MET2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(1000, 2000, 1500, 4000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(1000, 4500, 1500, 6500); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(1000, 7000, 1500, 9000); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotRect(1000, 9500, 1500, 11500); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotPolygon(7, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwSlotPolygon(6, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndSlots(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+   +

+

+ // NONDEFAULTRULES +

+

+ status = defwStartNonDefaultRules(4); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRule("doubleSpaceRule", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal1", 2, 0, 1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal2", 2, 0, 1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal3", 2, 0, 1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRule("lowerResistance", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal1", 6, 0, 0, 5); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal2", 5, 1, 6, 4); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal3", 5, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleMinCuts("cut12", 2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleMinCuts("cut23", 2); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRule("myRule", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal1", 2, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal2", 2, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal3", 2, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleViaRule("myvia12rule"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleViaRule("myvia23rule"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwRealProperty("minlength", 50.5); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("firstName", "Only"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwIntProperty("idx", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRule("myCustomRule", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal1", 5, 0, 1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal2", 5, 0, 1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleLayer("metal3", 5, 0, 1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleVia("myvia12_custom1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleVia("myvia12_custom2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleVia("myvia23_custom1"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNonDefaultRuleVia("myvia23_custom2"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndNonDefaultRules(); +

+

+ CHECK_STATUS(status); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // STYLES +

+

+ status = defwStartStyles(3); +

+

+ CHECK_STATUS(status); +

+

+ xP = (double*)malloc(sizeof(double)*6); +

+

+ yP = (double*)malloc(sizeof(double)*6); +

+

+ xP[0] = 30; +

+

+ yP[0] = 10; +

+

+ xP[1] = 10; +

+

+ yP[1] = 30; +

+

+ xP[2] = -10; +

+

+ yP[2] = 30; +

+

+ xP[3] = -30; +

+

+ yP[3] = 10; +

+

+ xP[4] = -30; +

+

+ yP[4] = -10; +

+

+ xP[5] = -10; +

+

+ yP[5] = -30; +

+

+ status = defwStyles(1, 6, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStyles(2, 5, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+ xP = (double*)malloc(sizeof(double)*8); +

+

+ yP = (double*)malloc(sizeof(double)*8); +

+

+ xP[0] = 30; +

+

+ yP[0] = 10; +

+

+ xP[1] = 10; +

+

+ yP[1] = 30; +

+

+ xP[2] = -10; +

+

+ yP[2] = 30; +

+

+ xP[3] = -30; +

+

+ yP[3] = 10; +

+

+ xP[4] = -30; +

+

+ yP[4] = -10; +

+

+ xP[5] = -10; +

+

+ yP[5] = -30; +

+

+ xP[6] = 10; +

+

+ yP[6] = -30; +

+

+ xP[7] = 30; +

+

+ yP[7] = -10; +

+

+ status = defwStyles(3, 8, xP, yP); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndStyles(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xP); +

+

+ free((char*)yP); +

+

+ status = defwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // BEGINEXT +

+

+ status = defwStartBeginext("tag"); +

+

+ CHECK_STATUS(status); +

+

+ defwAddIndent(); +

+

+ status = defwBeginextCreator("CADENCE"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBeginextSyntax("OTTER", "furry"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwStringProperty("arrg", "later"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwBeginextSyntax("SEAL", "cousin to WALRUS"); +

+

+ CHECK_STATUS(status); +

+

+ status = defwEndBeginext(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+   +

+

+ status = defwEnd(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ lineNumber = defwCurrentLineNumber(); +

+

+ if (lineNumber == 0) +

+

+ fprintf(stderr, "ERROR: nothing has been read.\n"); +

+

+   +

+

+ fclose(fout); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/ch1Intro.html b/lefdef/doc/defapi/ch1Intro.html new file mode 100644 index 00000000..d7797abf --- /dev/null +++ b/lefdef/doc/defapi/ch1Intro.html @@ -0,0 +1,404 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

1 

+

Introduction

+

This chapter contains the following sections:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Overview
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF Reader Working Modes
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Comparison Utility
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Compressed DEF Files
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Orientation Codes
+
+

Overview

+

This manual describes the application programming interface (API) routines for the following Cadence® Design Exchange Format (DEF) components:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF reader
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF writer
+
+

Cadence Design Systems, Inc. uses these routines internally with many tools that read and write DEF. The API supports DEF version 5.8, but also reads earlier versions of DEF.

+

You can use the API routines documented in this manual with tools that write these older versions, as long as none of the tools in an interdependent flow introduce newer constructs.

+

Note: The writer portion of the API does not always optimize the DEF output.

+

DEF Reader Working Modes

+

The DEF reader can work in two modes - compatibility mode and session-based mode.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Compatibility mode (session-less mode) - This mode is compatible with the old parser behavior. You can call the parser initialization once with defrInit(), adjust parsing settings and initialize the parser callbacks any time. The properties once defined in PROPERTYDEFINITIONS sections will be also defined in all subsequent file reads.
+
+ +
+ + + + + + +
  + +
+ a. +
+
Parser initialization: Call defrInitSession() instead of defrInit() to start a new parsing session and close any old parsing session, if opened.
+
+ +
+ + + + + + +
  + +
+ c. +
+
Data processing: Do one or multiple parsing of DEF files with the defrRead() function.
+
+
+ + + + + + +
  + +
+ d. +
+
Cleaning of the parsing configuration: Call the defrClear() function (optional). The call releases all parsing session data and closes the parsing session. If this is skipped, the data cleaning and the session closing is done by the next defrInitSession() call.
+
+
In the session-based mode, the properties once defined in PROPERTYDEFINITIONS remain active in all the DEF file parsing cycles in the session and the properties definition data is cleaned when the parsing session ends.
+
The session-based mode does not require you to call callbacks and property unsetter functions. All callbacks and properties are set to default by the next defrInitSession() call.
+
The session-based mode allows you to avoid the lasting PROPERTYDEFINITIONS data effect when not required as you can just configure your application to parse one file per session.
+

By default, the DEF parser works in the compatibility mode. To activate the session-based mode, you must use defrInitSession() instead of defrInit().

+

Note: Currently, the compatibility mode can be used in all old applications where the code has not been adjusted. The def2oa translator has already been adjusted to use the session-based parsing mode.

+

Comparison Utility

+

The DEF file comparison utility, lefdefdiff, helps you verify that your usage of the API is consistent and complete. This utility reads two DEF files, generally an initial file and the resulting file from reading in an application, then writes out a DEF file. The comparison utility reads and writes the data so that the UNIX diff utility can be used to compare the files.

+

Because the DEF file comparison utility works incrementally (writing out as it operates), the size of files it can process has no limitation. However, large files can have performance restrictions. In general, the utility is intended only to verify the use of the API; that is, the utility is not a component of a production design flow.

+

Compressed DEF Files

+

The DEF reader can parse compressed DEF files. To do so, you must link the libdef.a and libdefzlib.a libraries.

+

A zlib compression library is also required in order to read compressed DEF files. The zlib source code is free software that can be downloaded from www.gnu.com.

+

For information on compressed file routines, see "DEF Compressed File Routines."

+

Orientation Codes

+

Orientation codes are used throughout the DEF reader routines. The orientation codes are the same for all routines.

+

A number from 0 to 7, corresponding to the compass direction orientations, represents the orientation of a site or component. The following figure shows the combination of mirroring and rotation that is used for each of the eight possible orientations.

+


+ + + + + + + + + + + + + + + + + +
+
+

orient 0 = N

+
+

orient 4 = FN

+
+

orient 1 = W

+
+

orient 5 = FW

+
+

orient 2 = S

+
+

orient 6 = FS

+
+

orient 3 = E

+
+

orient 7 = FE

+
+

Note: The location given is the lower left corner of the resulting site or component after the mirroring and rotation are applied. It is not the location of the origin of the child cell.

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/ch2DEFsetup.html b/lefdef/doc/defapi/ch2DEFsetup.html new file mode 100644 index 00000000..0e70c990 --- /dev/null +++ b/lefdef/doc/defapi/ch2DEFsetup.html @@ -0,0 +1,484 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

2 

+

DEF Reader Setup and Control Routines

+

The Cadence® Design Exchange Format (DEF) reader provides several routines that initialize the reader and set global variables that are used by the reader.

+

The following routines described in this section set options for reading a DEF file.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrInit
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrInitSession
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrClear
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrRead
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrSetUserData
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrGetUserData
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrSetAddPathToNet
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrSetAllowComponentNets
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrGetAllowComponentNets
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrSetCommentChar
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrSetRegisterUnusedCallbacks
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrPrintUnusedCallbacks
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrUnusedCallbackCount
+
+

DEF API Routines

+

The following DEF reader setup and control routines are available in the API.

+

defrInit

+

Initializes internal variables in the DEF reader. You must use this routine before using defrRead. You can use other routines to set callback functions before or after this routine.

+

Syntax

+
+ int defrInit() +
+

defrInitSession

+

Starts a new parsing session and closes any old parsing session, if open. You must use this routine before using defrRead.

+

Syntax

+
+ int defrInitSession (
int startSession = 1) +
+

Arguments

+

+ + startSession +

+
Boolean. If is non-zero, performs the parser initialization in session-based mode; otherwise, the function will initialize parsing in the compatibility mode, working exactly as a defrInit() call.
+

defrClear

+

Releases all parsing session data and closes the parsing session. If the call to defrClear() is skipped, the data cleaning and the session closing is done by the next defrInitSession() call.

+

Syntax

+
+ int defrClear() +
+

defrRead

+

Specifies the DEF file to read. Any callbacks that have been set are called from within this routine. If the file parses with no errors, that is, all callbacks return OK condition codes, this routine returns zero.

+

Syntax

+
+ int defrRead(
FILE* file,
const char* fileName,
defiUserData* data,
int case_sensitive) +
+

Arguments

+

+ + file +

+
Specifies a pointer to an already open file. This allows the parser to work with either a disk file or a piped stream. This argument is required. Any callbacks that have been set will be called from within this routine.
+

+ + fileName +

+
Specifies a UNIX filename using either a complete or a relative path specification.
+

+ + data +

+
Specifies the data type.
+

+ + case_sensitive +

+
Specifies whether the data is case sensitive.
+

defrSetUserData

+

Sets the user-provided data. The DEF reader does not look at this data, but passes an opaque defiUserData pointer back to the application with each callback. You can set or change the user data at any time using the defrSetUserData and defrGetUserData routines. Every callback returns user data as the third argument.

+

Syntax

+
+ void defrSetUserData(
defiUserData* data) +
+

Arguments

+

+ + data +

+
Specifies the user-provided data.
+

defrGetUserData

+

Retrieves the user-provided data. The DEF reader returns an opaque defiUserData pointer, which you set using defrSetUserData. You can set or change the user data at any time with the defrSetUserData and defrGetUserData calls. Every callback returns the user data as the third argument.

+

Syntax

+
+ defiUserData defrGetUserData() +
+

defrSetAddPathToNet

+

Adds path data to the appropriate net data. When the net callback is used, the net class and structure information and the path information are returned. This statement does not require any additional arguments.

+

Syntax

+
+ void defrSetAddPathToNet(void) +
+

defrSetAllowComponentNets

+

Ignores component net information. Component nets are valid DEF syntax but are no longer used. By default, the DEF reader reports component net data as a syntax error. This routine overrides the default so no error is reported. This statement does not require any additional arguments.

+

Syntax

+
+ void defrSetAllowComponentNets(void) +
+

defrGetAllowComponentNets

+

Returns non-zero value if component nets are allowed.

+

Syntax

+
+ int defrGetAllowComponentNets() +
+

defrSetCommentChar

+

Changes the character used to indicate comments in the DEF file.

+

Syntax

+
+ void defrSetCommentChar(char c) +
+

Arguments

+

+ + c +

+
Specifies the comment character. The default is a pound sign (#).
+

defrSetRegisterUnusedCallbacks

+

Keeps track of all the callback routines that are not set. You can use this routine to keep track of DEF constructs that are in the input file but do not trigger a callback. This statement does not require any additional arguments.

+

Syntax

+
+ void defrSetRegisterUnusedCallbacks(void) +
+

defrPrintUnusedCallbacks

+

Prints all callback routines that are not set but have constructs in the DEF file.

+

Syntax

+
+ void defrPrintUnusedCallbacks(FILE* log) +
+

Arguments

+

+ + log +

+
Specifies the file to which the unused callbacks are printed.
+

defrUnusedCallbackCount

+

Returns the number of callback routines that are not set. That is, routines that have constructs in the input file but no callback trigger. This statement does not require any additional arguments.

+

Syntax

+
+ int* defrUnusedCallbackCount(void) +
+

Example

+

The following example shows how to initialize the reader.

+
+ int setupRoutine() {
    FILE* f;
    int res;
    int userData = 0x01020304;
    ... +
+
+
    //     Initialize the reader. This routine has to call first.
    defrInit(); +
+
+
    // Set user data
    defrSetUserData ((void *)3); +
+
+
    // Open the def file for the reader to read
    if ((f = fopen("defInputFileName","r")) == 0) {
        printf("Couldn't open input file '%s'\n",
        "defInputFileName");
        return(2);
    }
    // Invoke the parser
    res = defrRead(f, "defInputFileName", (void*)userData);
    if (res != 0) {
        printf("DEF parser returns an error\n");
        return(2);
    }
    fclose(f);
    return 0;} +
+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/ch3DEFcallback.html b/lefdef/doc/defapi/ch3DEFcallback.html new file mode 100644 index 00000000..22d68196 --- /dev/null +++ b/lefdef/doc/defapi/ch3DEFcallback.html @@ -0,0 +1,2860 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

3 

+

DEF Reader Callback Routines

+

The Cadence® Design Exchange Format (DEF) reader calls all callback routines when it reads in the appropriate part of the DEF file. Some routines, such as the design name callback, are called only once. Other routines, such as the net callback, can be called more than once.

+

This chapter contains the following sections:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Callback Function Format
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Callback Types and Setting Routines
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
User Callback Routines
+
+

Callback Function Format

+

All callback functions use the following format.

+
+ int UserCallbackFunction(
defrCallbackType_e callBackType
DEF_type DEF_data
defiUserData data) +
+

Each user-supplied callback routine is passed three arguments.

+

Callback Type

+

The callBackType argument is a list of objects that contains a unique number assignment for each callback from the parser. This list allows you to use the same callback routine for different types of DEF data.

+

DEF_Data

+

The DEF_data argument provides the data specified by the callback. Data types returned by the callbacks vary for each callback. Examples of the types of arguments passed include const char*, double, int, and defiProp. Two points to note:

+ + +

User Data

+

The data argument is a four-byte data item that is set by the user. Note that the DEF reader contains only user data. The user data is most often set to a pointer to the design data so that it can be passed to the routines. This is more effective than using a global variable.

+

The callback functions can be set or reset at any time. If you want a callback to be available when the DEF file parsing begins, you must set the callback before you call defrRead.

+

Note: You can unset a callback by using the set function with a null argument.

+

Callback Types and Setting Routines

+

You must set a callback before you can use it. When you set a callback, the callback routine used for each type of DEF information is passed in the appropriate setting routine. Each callback routine returns a callback type.

+

The following table lists the DEF reader callback setting routines and the associated callback types. The contents of the setting routines are described in detail in the section "User Callback Routines".

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF
Information
+

+
+

+   +

+

+ Setting Routine +

+
+

+ +

+

+ Callback Types +

+
+

Blockages
Beginning

+
+

void defrSetBlockageStartCbk
(
defrIntegerCbkFnType)

+
+

defrBlockageStartCbkType

+
+

Blockages

+
+

void defrSetBlockageCbk
(
defrBlockageCbkFnType)

+
+

defrBlockageCbkType

+
+

Blockages
End

+
+

void defrSetBlockageEndCbk
(
defrVoidCbkFnType)

+
+

defrBlockageEndCbkType

+
+

Bus Bit Characters

+
+

void defrSetBusBitCbk
(
defrStringCbkFnType)

+
+

defrBusBitCbkType

+
+

Components
Beginning

+
+

void defrSetComponentStartCbk
(
defrIntegerCbkFnType)

+
+

defrComponentStartCbkType

+
+

Components

+
+

void defrSetComponentCbk
(
defrComponentCbkFnType)

+
+

defrComponentCbkType

+
+

Components
End

+
+

void defrSetComponentEndCbk
(
defrVoidCbkFnType

+
+

defrComponentEndCbkType

+
+

Components
Mask Layer

+
+

void defrComponentMaskShiftLayerCbk
(
defrComponentMaskShiftLayerCbkFnType)

+
+

 

+
+

                     defrComponentMaskShiftLayerCbkType

+
+

Constraints
Path

+
+

void defrSetPathCbk
(
defrPathCbkFnType

+
+

defrPathCbkType

+
+

Design
Beginning

+
+

void defrSetDesignCbk
(
defrStringCbkFnType

+
+

defrDesignStartCbkType

+
+

Design
End

+
+

void defrSetDesignEndCbk
(
defrVoidCbkFnType)

+
+

defrDesignEndCbkType

+
+

Die Area

+
+

void defrSetDieAreaCbk
(
defrBoxCbkFnType)

+
+

defrDieAreaCbkType

+
+

Divider
Character

+
+

void defrSetDividerCbk
(
defrStringCbkFnType)

+
+

defrDividerCbkType

+
+

Extensions
Components

+
+

void defrSetComponentExtCbk
(
defrStringCbkFnType)

+
+

defrComponentExtCbkType

+
+

Extensions
Groups

+
+

void defrSetGroupExtCbk
(
defrStringCbkFnType)

+
+

defrGroupExtCbkType

+
+

Extensions
Net

+
+

void defrSetNetExtCbk
(
defrStringCbkFnType)

+
+

defrNetExtCbkType

+
+

Extensions
Net Connection

+
+

void defrSetNetConnectionExtCbk
(
defrStringCbkFnType)

+
+

defrNetConnectionExtCbkType

+
+

Extensions
Pin

+
+

void defrSetPinExtCbk
(
defrStringCbkFnType)

+
+

defrPinExtCbkType

+
+

Extensions
Scan Chains

+
+

void defrSetScanChainExtCbk
(
defrStringCbkFnType)

+
+

defrScanChainExtCbkType

+
+

Extensions
Vias

+
+

void defrSetViaExtCbk
(
defrStringCbkFnType)

+
+

defrViaExtCbkType

+
+

Fills
Beginning

+
+

void defrSetFillStartCbk
(
defrIntegerCbkFnType)

+
+

defrFillStartCbkType

+
+

Fills

+
+

void defrSetFillCbk
(
defrFillCbkFnType)

+
+

defrFillCbkType

+
+

Fills
End

+
+

void defrSetFillEndCbk
(
defrVoidCbkFnType)

+
+

defrFillEndCbkType

+
+

GCell Grid

+
+

void defrSetGcellGridCbk
(
defrGcellGridCbkFnType)

+
+

defrGcellGridCbkType

+
+

Groups
Beginning

+
+

void defrSetGroupsStartCbk
(
defrIntegerCbkFnType)

+
+

defrGroupsStartCbkType

+
+

Groups
Name

+
+

void defrSetGroupNameCbk
(
defrStringCbkFnType)

+
+

defrGroupNameCbkType

+
+

Groups
Member

+
+

void defrSetGroupMemberCbk
(
defrStringCbkFnType)

+
+

defrGroupMemberCbkType

+
+

Groups

+
+

void defrSetGroupCbk
(
defrGroupCbkFnType)

+
+

defrGroupCbkType

+
+

Groups
End

+
+

void defrSetGroupsEndCbk
(
defrVoidCbkFnType)

+
+

defrGroupsEndCbkType

+
+

History

+
+

void defrSetHistoryCbk
(
defrStringCbkFnType)

+
+

defrHistoryCbkType

+
+

Nets
Beginning

+
+

void defrSetNetStartCbk
(
defrIntegerCbkFnType)

+
+

defrNetStartCbkType

+
+

Nets

+
+

void defrSetNetCbk
(
defrNetCbkFnType)

+
+

defrNetCbkType

+
+

Nets
End

+
+

void defrSetNetEndCbk
(
defrVoidCbkFnType)

+
+

defrNetEndCbkType

+
+

Nondefault Rules Beginning

+
+

void defrNonDefaultStartCbk
(defrIntegerCbkFnType)

+
+

defrNonDefaultStartCbkType

+
+

Nondefault Rules

+
+

void defrSetNonDefaultCbk
(defrNonDefaultCbkFnType)

+
+

defrNonDefaultCbkType

+
+

Nondefault Rules End

+
+

void defrNonDefaultEndCbk
(defrVoidCbkFnType)

+
+

defrNonDefaultEndCbkType

+
+

Pins
Beginning

+
+

void defrSetStartPinsCbk
(
defrIntegerCbkFnType)

+
+

defrStartPinsCbkType

+
+

Pins

+
+

void defrSetPinCbk
(
defrPinCbkFnType)

+
+

defrPinCbkType

+
+

Pins
End

+
+

void defrSetPinEndCbk
(
defrVoidCbkFnType)

+
+

defrPinEndCbkType

+
+

Pin Properties
Beginning

+
+

void defrSetPinPropStartCbk
(
defrIntegerCbkFnType)

+
+

defrPinPropStartCbkType

+
+

Pin Properties

+
+

void defrSetPinPropCbk
(
defrPinPropCbkFnType)

+
+

defrPinPropCbkType

+
+

Pin Properties
End

+
+

void defrSetPinPropEndCbk
(
defrVoidCbkFnType)

+
+

defrPinPropEndCbkType

+
+

Property Definitions
Beginning

+
+

void defrSetPropDefStartCbk
(
defrVoidCbkFnType)

+
+

defrPropDefStartCbkType

+
+

Property Definitions

+
+

void defrSetPropCbk
(
defrPropCbkFnType)

+
+

defrPropCbkType

+
+

Property Definitions
End

+
+

void defrSetPropDefEndCbk
(
defrVoidCbkFnType)

+
+

defrPropDefEndCbkType

+
+

Regions
Beginning

+
+

void defrSetRegionStartCbk
(
defrIntegerCbkFnType)

+
+

defrRegionStartCbkType

+
+

Regions

+
+

void defrSetRegionCbk
(
defrRegionCbkFnType)

+
+

defrRegionCbkType

+
+

Regions
End

+
+

void defrSetRegionEndCbk
(
defrVoidCbkFnType)

+
+

defrRegionEndCbkType

+
+

Rows

+
+

void defrSetRowCbk
(
defrRowCbkFnType)

+
+

defrRowCbkType

+
+

Scan Chains
Beginning

+
+

void defrSetScanchainsStartCbk
(
defrIntegerCbkFnType)

+
+

defrScanchainsStartCbkType

+
+

Scan Chains

+
+

void defrSetScanchainCbk
(
defrScanchainCbkFnType)

+
+

defrScanchainCbkType

+
+

Scan Chains
End

+
+

void defrSetScanchainsEndCbk
(
defrVoidCbkFnType)

+
+

defrScanchainsEndCbkType

+
+

Slots
Beginning

+
+

void defrSetSlotStartCbk
(defrIntegerCbkFnType)

+
+

defrSlotStartCbkType

+
+

Slots

+
+

void defrSetSlotCbk
(defrSlotCbkFnType)

+
+

defrSlotCbkType

+
+

Slots
End

+
+

void defrSlotEndCbk
(
defrVoidCbkFnType)

+
+

defrSlotEndCbkType

+
+

Special Nets
Beginning

+
+

void defrSetSNetStartCbk
(
defrIntegerCbkFnType)

+
+

defrSNetStartCbkType

+
+

Special Nets

+
+

void defrSetSNetCbk
(
defrNetCbkFnType)

+
+

defrSNetCbkType

+
+

Special Nets
End

+
+

void defrSetSNetEndCbk
(
defrVoidCbkFnType)

+
+

defrSNetEndCbkType

+
+

Styles Beginning

+
+

void defrSetStylesStartCbk
(
defrIntegerCbkFnType)

+
+

defrStylesStartCbkType

+
+

Styles

+
+

void defrSetStylesCbk
(
defrStylesCbkFnType)

+
+

defrStylesCbkType

+
+

Styles End

+
+

void defrSetStylesEndCbk
(
defrVoidCbkFnType)

+
+

defrStylesEndCbkType

+
+

Technology

+
+

void defrSetTechnologyCbk
(
defrStringCbkFnType)

+
+

defrTechNameCbkType

+
+

Tracks

+
+

void defrSetTrackCbk
(
defrTrackCbkFnType)

+
+

defrTrackCbkType

+
+

Units

+
+

void defrSetUnitsCbk
(
defrDoubleCbkFnType)

+
+

defrUnitsCbkType

+
+

Version

+
+

void defrSetVersionCbk
(
defrDoubleCbkFnType)

+
+

defrVersionCbkType

+
+

Version
String

+
+

void defrSetVersionStrCbk
(
defrStringCbkFnType)

+
+

defrVersionStrCbkType

+
+

Vias
Beginning

+
+

void defrSetViaStartCbk
(
defrIntegerCbkFnType)

+
+

defrViaStartCbkType

+
+

Vias

+
+

void defrSetViaCbk
(
defrViaCbkFnType)

+
+

defrViaCbkType

+
+

Vias
End

+
+

void defrSetViaEndCbk
(
defrVoidCbkFnType)

+
+

defrViaEndCbkType

+
+

Examples

+

The following example shows how to create a setup routine so the reader can parse the DEF file and call the callback routines you defined.

+
+ int setupRoutine() {
FILE* f;
int res;
int userData = 0x01020304;
... +
+
+
//     Initialize the reader. This routine has to call first.
defrInit(); +
+
+
// Set the user callback routines
defrSetDesignCbk(designCB);
defrSetTechnologyCbk(technologyCB);
defrSetDesignEndCbk(designEndCB);
defrSetPropCbk(propertyDefCB);
defrSetPropDefEndCbk(properyDefEndCB);
defrSetNetCbk(netCB);
... +
+
+
defrSetRegisterUnusedCallback();
// Open the def file for the reader to read
if ((f = fopen("defInputFileName","r")) == 0) {
    printf("Couldn't open input file '%s'\n",
    "defInputFileName");
    return(2);
}
// Invoke the parser
res = defrRead(f, "defInputFileName", (void*)userData);
if (res != 0) {
    printf("DEF parser returns an error\n");
    return(2);
}
(void)defrPrintUnusedCallbacks(f);
fclose(f);
return 0;} +
+

User Callback Routines

+

This section describes the following routines:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrBlockageCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrBoxCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrComponentCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrComponentMaskShiftLayerCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrDoubleCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrFillCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrGcellGridCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrGroupCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrIntegerCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrNetCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrNonDefaultCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrPathCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrPinCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrPinPropCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrPropCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrRegionCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrRowCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrScanchainCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrSlotCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrStringCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrStylesCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrTrackCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrViaCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defrVoidCbkFnType
+
+

defrBlockageCbkFnType

+

Retrieves data from the BLOCKAGES statement in the DEF file. Use the arguments defined in the defiBlockage class to retrieve the data. For syntax information about the DEF BLOCKAGES statement, see Blockages in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrBlockageCbkFnType(
defrCallbackType_e typ,
defiBlockage* blockage,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrBlockageCbkType type, which indicates that the blockage callback was called.
+

+ + blockage +

+
Returns a pointer to a defiBlockage structure. For more information, see defiBlockage.
+

+ + data +

+
Returns four bytes of user-defined data. User data is most often set to a pointer to the design data.
+

defrBoxCbkFnType

+

Retrieves data from the DIEAREA statement in the DEF file. Use the arguments defined in the defiBox class to retrieve the data. For syntax information about the DEF DIEAREA statement, see Die Area in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrBoxCbkFnType(
defrCallbackType_e typ,
defiBox* box,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrDieAreaCbkType type, which indicates that the die area callback was called.
+

+ + box +

+
Returns a pointer to a defiBox structure. For more information, see defiBox.
+

+ + data +

+
Returns four bytes of user-defined data. User data is most often set to a pointer to the design data.
+

defrComponentCbkFnType

+

Retrieves data from the COMPONENTS statement in the DEF file. Use the arguments defined in the defiComponent class to retrieve the data. For syntax information about the DEF COMPONENTS statement, see Components in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrComponentCbkFnType(
defrCallbackType_e typ,
defiComponent* comp,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrComponentCbkType, which indicates that the component callback was called.
+

+ + comp +

+
Returns a pointer to a defiComponent structure. For more information, see defiComponent.
+

+ + data +

+
Returns four bytes of user-defined data. User data is most often set to a pointer to the design data.
+

defrComponentMaskShiftLayerCbkFnType

+

Retrieves data from the COMPONENTMASKSHIFT statement of the DEF file. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

For syntax information about the DEF COMPONENTMASKSHIFT statement, see "Component Mask Shift" in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrComponentMaskShiftLayerCbkFnType (
defrCallbackType_e type,
defiComponentMaskShiftLayer* shiftLayers,
defiUserData* data) +
+

Arguments

+

+ + type +

+
Returns the defrComponentMaskShiftLayerCbkFnType. This allows you to verity within your program that this is a correct callback.
+

+ + shiftLayers +

+
Returns a pointer to a defiComponentMaskShiftLayer. For more information, see defiComponentMaskShiftLayer.
+

+ + data +

+
Returns four bytes of user-defined data. User data is most often set to a pointer to the design data.
+

defrDoubleCbkFnType

+

Retrieves data from the UNITS and VERSION statements of the DEF file. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

For syntax information about the DEF UNITS and VERSION statements, see Units and Version in the LEF/DEF Language Reference.

+

Note: DEF version 5.1 and later always has a version number. Earlier versions of DEF will not have a version number.

+

Syntax

+
+ int defrDoubleCbkFnType(
defrCallbackType_e typ,
double* number,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

+ Type Returned +

+
+

Units

+
+

defrUnitsCbkType

+
+

Version

+
+

defrVersionCbkType

+
+

+ + number +

+
Returns data that varies depending on the callback used. The following kinds of data can be returned.
+ + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

+ Returns the Value of +

+
+

Units

+
+

DEFconvertFactor in the UNITS statement

+
+

Version

+
+

versionNumber in the VERSION statement

+
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

Examples

+

The following example shows a callback routine with the type defrVersionCbkType.

+
+ int versionCB (defrCallbackType_e type,
double versionNum,
defiUserData userData) {
// Check if the type is correct
if (type != defrVersionCbkType) {
printf("Type is not defrVersionCbkType, terminate
parsing.\n");
return 1;
} +
+
+      // Write out the version number
    printf("VERSION %g\n", versionNum);
return 0;} +
+

defrFillCbkFnType

+

Retrieves data from the FILLS statement in the DEF file. Use the arguments defined in the defiFill class to retrieve the data. For syntax information about the DEF FILLS statement, see Fills in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrFillCbkFnType(
defrCallbackType_e typ,
defiFill* fill,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrFillCbkFnType, which indicates that the fill callback was called.
+

+ + fill +

+
Returns a pointer to a defifill structure. For more information, see defiFill.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrGcellGridCbkFnType

+

Retrieves data from the GCELLGRID statement in the DEF file. Use the arguments defined in the defiGcellGrid class to retrieve the data. For syntax information about the DEF GCELLGRID statement, see GCell Grid in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrGcellGridCbkFnType(
defrCallbackType_e typ,
defiGcellGrid* grid,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrGcellGridCbkType, which indicates that the gcell grid callback was called.
+

+ + grid +

+
Returns a pointer to a defiGcellGrid structure. For more information, see defiGcellGrid.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrGroupCbkFnType

+

Retrieves data from the GROUPS statement in the DEF file. Use the arguments defined in the defiGroup class to retrieve the data. For syntax information about the DEF GROUPS statement, see Groups in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrGroupCbkFnType(
defrCallbackType_e typ,
defiGroup* group,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrGroupCbkType, which indicates that the group callback was called.
+

+ + group +

+
Returns a pointer to a defiGroup structure. For more information, see defiGroup.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrIntegerCbkFnType

+

Marks the beginning of sections of DEF statements. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

Syntax

+
+ int defrIntegerCbkFnType(
defrCallbackType_e typ,
int number,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

+ Type Returned +

+
+

Blockages

+
+

defrBlockageStartCbkType

+
+

Components

+
+

defrComponentStartCbkType

+
+

Fills

+
+

defrFillStartCbkType

+
+

Groups

+
+

defrGroupsStartCbkType

+
+

Nets

+
+

defrNetStartCbkType

+
+

Nondefault Rules

+
+

defrNonDefaultStartCbkType

+
+

Pin Properties

+
+

defrPinPropStartCbkType

+
+

Pins

+
+

defrStartPinsCbkType

+
+

Regions

+
+

defrRegionStartCbkType

+
+

Scan Chains

+
+

defrScanchainsStartCbkType

+
+

Slots

+
+

defrSlotStartCbkType

+
+

Special Nets

+
+

defrSNetStartCbkType

+
+

Styles

+
+

defrStylesStartCbkType

+
+

Vias

+
+

defrViaStartCbkType

+
+

+ + number +

+
Returns data that varies depending on the callback used. The following kinds of data can be returned.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

+ Returns the Value of +

+
+

Blockages

+
+

numBlockages in the BLOCKAGES statement

+
+

Components

+
+

numComps in the COMPONENTS statement

+
+

Fills

+
+

numFills in the FILLS statement

+
+

Groups

+
+

numGroups in the GROUPS statement

+
+

Nets

+
+

numNets in the NETS statement

+
+

Nondefault rules

+
+

numRules in the NONDEFAULTRULES statement

+
+

Pin Properties

+
+

num in the PINPROPERTIES statement

+
+

Pins

+
+

numPins in the PINS statement

+
+

Regions

+
+

numRegions in the REGIONS statement

+
+

Scan Chains

+
+

numScanChains in the SCANCHAINS statement

+
+

Slots

+
+

numSlots in the SLOTS statement

+
+

Special Nets

+
+

numNets in the SPECIALNETS statement

+
+

Styles

+
+

numStyles in the STYLES statement

+
+

Vias

+
+

numVias in the VIAS statement

+
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrNetCbkFnType

+

Retrieves data from the NETS and SPECIALNETS sections of the DEF file. Use the arguments defined in the defiNet class to retrieve the data.

+

For syntax information about the DEF NETS and SPECIALNETS statements, see Nets and Special Nets in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrNetCbkFnType(
defrCallbackType_e typ,
defiNet* net,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

+ Type Returned +

+
+

Net

+
+

defrNetCbkType

+
+

Special Nets

+
+

defrSNetCbkType

+
+

+ + net +

+
Returns a pointer to a defiNet structure. For more information, see defiNet.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrNonDefaultCbkFnType

+

Retrieves data from the NONDEFAULTRULES statement in the DEF file. Use the arguments defined in the defiNonDefault class to retrieve the data. For syntax information about the DEF NONDEFAULTRULES statement, see "Nondefault Rules," in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrNonDefaultCbkFnType(
defrCallbackType_e typ,
defiNonDefault* rule,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrNonDefaultCbkType type, which indicates that the nondefault rule callback was called.
+

+ + rule +

+
Returns a pointer to a defiNonDefault structure. For more information, see defiNonDefault.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrPathCbkFnType

+

Retrieves data from the regularWiring and specialWiring specifications in the NETS and SPECIALNETS statements of the DEF file. Use the arguments defined in the defiPath class to retrieve the data.

+

For syntax information about the DEF NETS and SPECIALNETS statements, see Nets and Special Nets in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrPathCbkFnType(
defrCallbackType_e typ,
defiPath* path,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrPathCbkType type, which indicates that the path callback was called.
+

+ + path +

+
Returns a pointer to a defiPath structure. For more information, see defiPath.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrPinCbkFnType

+

Retrieves data from the PINS statement in the DEF file. Use the arguments defined in the defiPin class to retrieve the data. For syntax information about the DEF PINS statement, see Pins in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrPinCbkFnType(
defrCallbackType_e typ,
defiPin* pin,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrPinCbkType type, which indicates that the Pin callback was called.
+

+ + pin +

+
Returns a pointer to a defiPin structure. For more information, see defiPin.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrPinPropCbkFnType

+

Retrieves data from the PINPROPERTIES statement in the DEF file. Use the arguments defined in the defiPinProp class to retrieve the data. For syntax information about the DEF PINPROPERTIES statement, see Pin Properties in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrPinPropCbkFnType(
defrCallbackType_e typ,
defiPinProp* pp,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrPinPropCbkType type, which indicates that the pin property callback was called.
+

+ + pp +

+
Returns a pointer to a defiPinProp structure. For more information, see defiPinProp.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrPropCbkFnType

+

Retrieves data from the PROPERTYDEFINITIONS statement in the DEF file. Use the arguments defined in the defiProp class to retrieve the data. For syntax information about the DEF PROPERTYDEFINITIONS statement, see Property Definitions in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrPropCbkFnType(
defrCallbackType_e typ,
defiProp* prop,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrPropCbkType type, which indicates that the property callback was called.
+

+ + prop +

+
Returns a pointer to a defiProp structure. For more information, see defiProp.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrRegionCbkFnType

+

Retrieves data from the REGIONS statement in the DEF file. Use the arguments defined in the defiRegion class to retrieve the data. For syntax information about the DEF REGIONS statement, see Regions in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrRegionCbkFnType(
defrCallbackType_e typ,
defiRegion* reg,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrRegionCbkType type, which indicates that the region callback was called.
+

+ + reg +

+
Returns a pointer to a defiRegion structure. For more information, see defiRegion.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrRowCbkFnType

+

Retrieves data from the ROWS statement in the DEF file. Use the arguments defined in the defiRow class to retrieve the data. For syntax information about the DEF ROWS statement, see Rows in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrRowCbkFnType(
defrCallbackType_e typ,
defiRow* row,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrRowCbkType type, which indicates that the row callback was called.
+

+ + row +

+
Returns a pointer to a defiRow structure. For more information, see defiRow.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrScanchainCbkFnType

+

Retrieves data from the SCANCHAINS statement in the DEF file. Use the arguments defined in the defiScanchain class to retrieve the data. For syntax information about the DEF SCANCHAINS statement, see Scan Chains in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrScanchainCbkFnType(
defrCallbackType_e typ,
defiScanchain* sc,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrScanchainCbkType type, which indicates that the scan chains callback was called.
+

+ + sc +

+
Returns a pointer to a defiScanchain structure. For more information, see defiScanchain.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrSlotCbkFnType

+

Retrieves data from the SLOTS statement in the DEF file. Use the arguments defined in the defiSlot class to retrieve the data. For syntax information about the DEF SLOTS statement, see Slots in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrSlotCbkFnType(
defrCallbackType_e typ,
defiSlot* slot,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the type, defrSlotCbkFnType, which indicates that the slot callback was called.
+

+ + slot +

+
Returns a pointer to a defiSlot structure. For more information, see defiSlot.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data
+

defrStringCbkFnType

+

Retrieves different kinds of LEF data. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

Syntax

+
+ int defrStringCbkFnType(
defrCallbackType_e typ,
const char* string,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

+ Type Returned +

+
+

Bus Bit Characters

+
+

defrBusBitCbkType

+
+

Design

+
+

defrDesignStartCbkType

+
+

Component Extension

+
+

defrComponentExtCbkType

+
+

Divider Character

+
+

defrDividerCbkType

+
+

Group Extension

+
+

defrGroupExtCbkType

+
+

Groups Member

+
+

defrGroupMemberCbkType

+
+

Groups Name

+
+

defrGroupNameCbkType

+
+

History

+
+

defrHistoryCbkType

+
+

Net Connection Extension

+
+

defrNetConnectionExtCbkType

+
+

Net Extension

+
+

defrNetExtCbkType

+
+

Pin Extension

+
+

defrPinExtCbkType

+
+

Scan Chain Extension

+
+

defrScanChainExtCbkType

+
+

Technology

+
+

defrTechNameCbkType

+
+

Version

+
+

defrVersionStrCbkType

+
+

Via Extension

+
+

defrViaExtCbkType

+
+

+ + string +

+
The data returned varies depending on the callback used.The following table shows the kinds of data returned.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

+ Returns a Value of +

+
+

Bus Bit Characters

+
+

delimiterPair in the BUSBITCHARS statement

+
+

Design

+
+

designName in the DESIGN statement

+
+

Component Extension

+
+

tag in the EXTENSIONS statement

+
+

Divider Character

+
+

character in the DIVIDERCHAR statement

+
+

Group Extension

+
+

tag in the EXTENSION statement

+
+

Groups Member

+
+

compNameRegExpr in the GROUPS statement

+
+

Groups Name

+
+

groupName in the GROUPS statement

+
+

History

+
+

anyText in the HISTORY statement

+
+

Net Connection Extension

+
+

tag in the EXTENSION statement

+
+

Net Extension

+
+

tag in the EXTENSION statement

+
+

Pin Extension

+
+

tag in the EXTENSION statement

+
+

Scan Chain Extension

+
+

tag in the EXTENSION statement

+
+

Technology

+
+

technologyName in the TECHNOLOGY statement

+
+

Version

+
+

versionNumber in VERSION statement

+
+

Via Extension

+
+

tag in the EXTENSION statement

+
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrStylesCbkFnType

+

Retrieves data from the STYLES statement in the DEF file. Use the arguments defined in the defiStyles class to retrieve the data. For syntax information about the DEF STYLES statement, see "Styles," in the LEF/DEF Language Reference.

+

Syntax

+
+ defrStylesCbkFnType(
defCallbackType_e typ,
defiStyles* style,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrStylesCbkType, which indicates that the style callback was called.
+

+ + style +

+
Returns a pointer to a defiStyles structure. For more information, see defiStyles.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrTrackCbkFnType

+

Retrieves data from the TRACKS statement in the DEF file. Use the arguments defined in the defiTrack class to retrieve the data. For syntax information about the DEF TRACKS statement, see Tracks in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrTrackCbkFnType(
defrCallbackType_e typ,
defiTrack* track,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrTrackCbkType, which indicates that the track callback was called.
+

+ + sc +

+
Returns a pointer to a defiTrack structure. For more information, see defiTrack.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrViaCbkFnType

+

Retrieves data from the VIAS statement in the DEF file. Use the arguments defined in the defiVia class to retrieve the data. For syntax information about the DEF VIAS statement, see Vias in the LEF/DEF Language Reference.

+

Syntax

+
+ int defrViaCbkFnType(
defrCallbackType_e typ,
defiVia* via,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the defrViaCbkType, which indicates that the via callback was called.
+

+ + via +

+
Returns a pointer to a defiVia structure. For more information, see defiVia.
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

defrVoidCbkFnType

+

Marks the end of DEF data sections. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

Syntax

+
+ int defrVoidCbkFnType(
defrCallbackType_e typ,
void* variable,
defiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

+ Type Returned +

+
+

Blockages, End

+
+

defrBlockageEndCbkType

+
+

Component, End

+
+

defrComponentEndCbkType

+
+

Design, End

+
+

defrDesignEndCbkType

+
+

Fills, End

+
+

defrFillEndCbkType

+
+

Groups, End

+
+

defrGroupsEndCbkType

+
+

Net, End

+
+

defrSNetEndCbkType

+
+

Nondefault Rules, End

+
+

defrNonDefaultEndCbkType

+
+

Pin Properties, End

+
+

defrPinPropEndCbkType

+
+

Pins, End

+
+

defrPinEndCbkType

+
+

Property Definitions, End

+
+

defrPropDefEndCbkType

+
+

Property Definitions, Start

+
+

defrPropDefStartCbkType

+
+

Region, End

+
+

defrRegionEndCbkType

+
+

Scan Chains, End

+
+

defrConstraintsEndCbkType

+
+

Slots, End

+
+

defrSlotEndCbkType

+
+

Special Nets, End

+
+

defrSNetEndCbkType

+
+

Styles, End

+
+

defrStylesEndCbkType

+
+

Via, End

+
+

defrViaEndCbkType

+
+

+ + variable +

+
Returns data that varies depending on the callback used. The following kinds of data can be returned. For all data types, the variable returns NULL.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF Data +

+
+

Blockages, End

+
+

 

+
+

Component, End

+
+

 

+
+

Design, End

+
+

 

+
+

Fills, End

+
+

 

+
+

Groups, End

+
+

 

+
+

Net, End

+
+

 

+
+

Nondefault Rules, End

+
+

 

+
+

Pins, End

+
+

 

+
+

Pin Properties, End

+
+

 

+
+

Property Definitions, End

+
+

 

+
+

Property Definitions Start

+
+

 

+
+

Region, End

+
+

 

+
+

Scan Chains, End

+
+

 

+
+

Slots, End

+
+

 

+
+

Special Nets, End

+
+

 

+
+

Styles, End

+
+

 

+
+

Via, End

+
+

 

+
+

+ + data +

+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

Examples

+

The following example shows a callback routine using the arguments for defrCallbackType_e, char*, and defiUserData.

+
+ int designCB (defrCallbackType_e type,
const char *designName,
defiUserData userData) {
// Incorrect type was passed in, expecting the type defrDesignStartCbk
Type
if (type != defrDesignStartCbkType) {
printf("Type is not defrDesignStartCbkType,
terminate parsing.\n");
        return 1;}
// Expect a non null char* designName
if (!designName || !*designName) {
printf("Design name is null, terminate parsing.\n");
return 1;}
// Write out the design name
printf("design name is %s\n", desginName);
return 0;} +
+

The following example shows a callback routine using the arguments for defrCallbackType_e, int, and defiUserData.

+
+ int viaStartCB (defrCallbackType_e c,
int numVias,
defiUserData ud) {
// Check if the type is correct
if (type != defrViaStartCbkType) {
printf("Type is not defrViaStartCbkType, terminate
parsing.\n");
return 1;}
printf("VIA %d\n", numVias);
return 0;} +
+

The following example shows a callback routine using the arguments for defrCallbackType_e, defiVia, and defiUserData.

+
+ int viaCB (defrCallbackType_e type,
        defiVia *viaInfo,
        defiUserData userData) {
int i, xl, yl, xh, yh;
char *name
// Check if the type is correct
if (type != defrViaCbkType) {
printf("Type is not defrViaCbkType, terminate
parsing.\n");
return 1;}
printf("VIA %s\n", viaInfo->name());
if (viaInfo->hasPattern())
printf(" PATTERNNAME %s\n", viaInfo->pattern());
for (i = 0; i < viaInfo->numLayers(); i++) {
viaInfo->layer(i, &name, &xl, &yl, &xh, &yh);
printf(" RECT %s %d %d %d %d\n", name, xl, yl, xh, yh);}
return 0;} +
+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/ch4DEFclasses.html b/lefdef/doc/defapi/ch4DEFclasses.html new file mode 100644 index 00000000..18ceeb05 --- /dev/null +++ b/lefdef/doc/defapi/ch4DEFclasses.html @@ -0,0 +1,841 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

4 

+

DEF Reader Classes

+

This chapter contains the following sections:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Introduction
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Callback Style Interface
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Retrieving Repeating DEF Data
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Deriving C Syntax from C++ Syntax
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF Reader Class Routines
+
+

Introduction

+

Every statement in the Cadence® Design Exchange Format (DEF) file is associated with a DEF reader class. When the DEF reader uses a callback, it passes a pointer to the appropriate class. You can use the member functions in each class to retrieve data defined in the DEF file.

+

Callback Style Interface

+

This programming interface uses a callback style interface. You register for the constructs that interest you, and the reader calls your callback functions when one of those constructs is read. If you are not interested in a given set of information, you simply do not register the callback; the reader scans the information quickly and proceeds.

+ +

Retrieving Repeating DEF Data

+

Many DEF objects contain repeating objects or specifications. The classes that correspond to these DEF objects contain an index and array of elements that let you retrieve the data iteratively.

+

You can use a for loop from 0 to the number of items specified in the index. In the loop, retrieve the data from the subsequent arrays. For example:

+

 

+
+ for(i=0; i< A->defiVia::numLayers(); i++) {
via -> defiVia::layer(i, &name, &x1, &y1, &xh, &yh);
printf("+ RECT %s %d %d %d %d \n", name x1, y1, xh, yh); +
+

Deriving C Syntax from C++ Syntax

+

The Cadence application programming interface (API) provides both C and C++ interfaces. The C API is generated from the C++ source, so there is no functional difference. The C API has been created in a pseudo object-oriented style. Examining a simple case should enable you to understand the API organization.

+

The following examples show the same objects in C and C++ syntax.

+

C++ Syntax

+
+ class defiVia {
const char* name() const;
const char* pattern() const;
int hasPattern() const;
int numLayers() const;
void layer(int index, char** layer, int* xl, int* yl,
    int* xh, int* yh) const;} +
+

C Syntax

+
+ const char * defiVia)name
( const defiVia * this ); +
+
+ const char * defiVia_hasPattern
( const defiVia * this ); +
+
+ int defiVia_hasPattern
( const defiVia * this ); +
+
+ int defiVia_numLayers
( const defiVia * this ); +
+
+ void defiVia_layer
( const defiVia * this,
    int index,
    char **layer,
    int *x1
    int *y1
    int *xh
    int *yh); +
+

The C routine prototypes for the API functions can be found in the following files:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

defiArray.h

+
+

defiNonDefault.h

+
+

defiViaRule.h

+
+

defiCrossTalk.h

+
+

defrCallBacks.h

+
+

defiProp.h

+
+

defrReader.h

+
+

defiDebug.h

+
+

defiDefs.h

+
+

defwWriter.h

+
+

defiLayer.h

+
+

defiUnits.h

+
+

defiUser.h

+
+

defiMacro.h

+
+

defiUtil.h

+
+

defiMisc.h

+
+

defiVia.h

+
+

 

+
+

DEF Reader Class Routines

+

The following table lists the class routines that apply to the DEF information.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF Information +

+
+

+ DEF Class +

+
+

Blockages

+
+

defiBlockage

+
+

Components

+
+

defiComponent
defiProp
defiComponentMaskShiftLayer

+
+

Fills

+
+

defiFill

+
+

GCell Grid

+
+

defiGcellGrid

+
+

Groups

+
+

defiGroup
defiProp

+
+

Nets

+
+

defiNet
defiPath
defiProp
defiSubnet
defiVpin
defiWire

+
+

Nondefault Rules

+
+

defiNonDefault

+
+

Pins

+
+

defiPin
defiPinAntennaModel
defiProp

+
+

Pin Properties

+
+

defiPinProp

+
+

Regions

+
+

defiRegion
defiProp

+
+

Rows

+
+

defiProp
defiRow
defiSite

+
+

Scan Chains

+
+

defiOrdered
defiScanchain

+
+

Slots

+
+

defiSlot

+
+

Special Nets

+
+

defiNet
defiPath
defiProp
defiShield
defiViaData
defiWire

+
+

Styles

+
+

defiStyles

+
+

Tracks

+
+

defiTrack

+
+

Vias

+
+

defiVia

+
+

Miscellaneous

+
+

defiBox
defiGeometries
defiPoints
defiUser (defined as void; can be any
user-defined pointer)

+
+

defiBlockage

+

Retrieves data from the BLOCKAGES statement in the DEF file. For syntax information about the DEF BLOCKAGES statement, see "Blockages" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiBlockage {
int hasLayer() const;
int hasPlacement() const;
int hasComponent() const;
int hasSlots() const;
int hasFills() const;
int hasPushdown() const;
int hasExceptpgnet() const;
int hasSoft() const;
int hasPartial() const;
int hasSpacing() const;
int hasDesignRuleWidth() const;
int minSpacing() const;
int designRuleWidth() const;
double placementMaxDensity() const;
const char* layerName() const;
const char* layerComponentName() const;
const char* placementComponentName() const;
int numRectangles() const;
int xl(int index) const;
int yl(int index) const;
int xh(int index) const;
int yh(int index) const;
int numPolygons() const;
struct defiPoints getPolygon(int index) const;
int hasMask() const;
int mask() const;} +
+

defiBox

+

Retrieves data from the DIEAREA statement of the DEF file. For syntax information about the DEF DIEAREA statement, see "Die Area" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiBox {
int xl() const;
int yl() const;
int xh() const;
int yh() const;
struct defiPoints getPoint() const;} +
+

defiComponent

+

Retrieves data from the COMPONENTS statement in the DEF file. For syntax information about the DEF COMPONENTS statement, see "Components" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiComponent {
const char* id() const;
const char* name() const;
int placementStatus() const;
int isUnplaced() const;
int isPlaced() const;
int isFixed() const;
int isCover() const;
int placementX() const;
int placementY() const;
int placementOrient() const;            // optional- For information,see
//"Orientation Codes"
const char* placementOrientStr() const;
int hasRegionName() const;
int hasRegionBounds() const;
int hasEEQ() const;
int hasGenerate() const;
int hasSource() const;
int hasWeight() const;
int weight() const;
int hasNets() const;
int numNets() const;
const char* net(int index) const;
const char* regionName() const;
const char* source() const;
const char* EEQ() const;
const char* generateName() const;
const char* macroName() const;
int hasHalo() const;
int hasHaloSoft() const;
int hasRouteHalo() const;
int haloDist() const;
const char* minLayer() const;
const char* maxLayer() const;
void haloEdges(int* left, int* bottom, int* right, int* top);
void regionBounds(int* size, int** xl, int** yl, int** xh, int** yh);
int hasForeignName() const;
const char* foreignName() const;
int foreignX() const;
int foreignY() const;
const char* foreignOri() const;
int hasFori() const;
int foreignOrient() const;
int numProps() const;
char* propName(int index) const;
char* propValue(int index) const;
double propNumber(int index) const;
char propType(int index) const;
int propIsNumber(int index) const;
int propIsString (int index) const;
int maskShiftSize();
int maskShift(int index) const;} +
+

Examples

+

The following example shows a callback routine with the type defrComponentCbkType. Callback routines for the type defrComponentStartCbkType and defrComponentEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.

+
+ int componentCB (defrCallbackType_e type,
defiComponent* compInfo,
defiUserData userData) {
int i;
// Check if the type is correct
if ((type != defrComponentCbkType)) {
printf("Type is not defrComponentCbkType terminate
parsing.\n");
return 1;
}
printf("%s %s ", compInfo->id(), compInfo->name());
if (compInfo->hasNets()) {
for (i = 0; i < compInfo->numNets(); i++)
printf("%s ", compInfo->net(i));
printf("\n");
}
if (compInfo->isFixed())
printf(" FIXED %d %d %d\n", compInfo->placementX(),
compInfo->placementY(),
compInfo->placementOrient());
if (compInfo->isCover())
printf(" COVER %d %d %d\n", compInfo->placementX(),
compInfo->placementY(),
compInfo->placementOrient());
if (compInfo->isPlaced())
printf(fout," PLACED %d %d %d\n", compInfo->placementX(),
compInfo->placementY(),
compInfo->placementOrient());
if (compInfo->hasSource())
printf(" SOURCE %s\n", compInfo->source());
if (compInfo->hasWeight())
printf(" WEIGHT %d\n", compInfo->weight());
if (compInfo->hasEEQ())
printf(" EEQMASTER %s\n", compInfo->EEQ());
if (compInfo->hasRegionName())
printf(" REGION %s\n", compInfo->regionName());
if (compInfo->hasRegionBounds()) {
int *xl, *yl, *xh, *yh;
int size;
compInfo->regionBounds(&size, &xl, &yl, &xh, &yh);
for (i = 0; i < size; i++) {
printf(" REGION %d %d %d %d\n", xl[i], yl[i],
xh[i], yh[i]);
}
}
if (compInfo->hasForeignName()) {
printf(" FOREIGN %s %d %d %s\n", compInfo->foreignName(),
compInfo->foreignX(), compInfo->foreignY(),
compInfo->foreignOri());
    }
    // maskShiftArray[0] will always return the right most digit,since we     // allow the leading 0 and also omit the leading 0's.
    if (compInfo->maskShiftSize()) {
       printf(" MASKSHIFT");

       for (i = compInfo->maskShiftSize() -1; i >=0; i--) {
           printf("%d ", compInfo->maskShift(i);
       }
       printf("\n");
    }
return 0;
}
+
+

defiComponentMaskShiftLayer

+

Retrieves data from the COMPONENTMASKSHIFT statement in the DEF file.

+

For syntax information about the DEF COMPONENTMASKSHIFT statement, see "Component Mask Shift" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiComponentMaskShiftLayer {
public:
     defiComponentMaskShiftLayer();
     ~defiComponentMaskShiftLayer();
void Init();
void Destroy();
void addMaskShiftLayer(const char* layer);
int numMaskShiftLayers() const;
void bumpLayers(int size);
void clear();
const char* maskShiftLayer(int index) const;}; +
+

defiFill

+

Retrieves data from the FILLS statement in the DEF file. For syntax information about the DEF FILLS statement, see "Fills" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiFill {
int hasLayer() const;
const char* layerName() const;
int hasLayerOpc() const;
int numRectangles() const;
int xl(int index) const;
int yl(int index) const;
int xh(int index) const;
int yh(int index) const;
int numPolygons() const;
struct defiPoints getPolygon(int index) const;
int hasVia() const;
const char* viaName() const;
int hasViaOpc() const;
int numViaPts() const;
struct defiPoints getViaPts(int index) const;
void setMask(int colorMask);
int layerMask() const
int viaTopMask() const;
int viaCutMask() const;
int viaBottomMask() const;} +
+

defiGcellGrid

+

Retrieves data from the GCELLGRID statement in the DEF file. For syntax information about the DEF GCELLGRID statement, see "GCell Grid" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiGcellGrid {
const char* macro() const;
int x() const;
int xNum() const;
double xStep() const;} +
+

Examples

+

The following example shows a callback routine with the type defrGcellGridCbkType, and the class defiGcellGrid.

+
+ int gcellCB (defrCallbackType_e type,
defiGcellGrid* gcellInfo,
defiUserData userData) {
int i;
// Check if the type is correct
if (type != defrGcellGridCbkType) {
printf("Type is not defrGcellGridCbkType, terminate
        parsing.\n");
return 1;
}
printf("GCELLGRID %s %d DO %d STEP %g\n", gcellInfo->macro(),
gcellInfo->x(), gcellInfo->xNum(), gcellInfo->xStep());
return 0;
} +
+

defiGeometries

+

Retrieves geometry data from the BLOCKAGES, FILLS, NETS, and SLOTS statements of the DEF file. For syntax information, see "Blockages," "Fills," "Nets," and "Slots" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiGeometries {
int numPoints() const;
void points(int index, int* x, int* y);} +
+

defiGroup

+

Retrieves data from the GROUPS statement in the DEF file. For syntax information about the DEF GROUPS statement, see "Groups" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiGroup {
const char* name() const;
const char* regionName() const;
int hasRegionBox() const;
int hasRegionName() const;
int hasMaxX() const;
int hasMaxY() const;
int hasPerim() const;
void regionRects(int* size, int** xl, int** yl, int** xh, int** yh);
int maxX() const;
int maxY() const;
int perim() const;
int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const; } +
+

Examples

+

The following example shows callback routines for the types defrGroupNameCbkType, defrGroupMemberCbkType, and defrGroupCbkType. Callback routines for the type defrGroupsStartCbkType and defrGroupsEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.

+
+ int groupnameCB (defrCallbackType_e type,
const char* name,
defiUserData userData) {
// Check if the type is correct
if ((type != defrGroupNameCbkType)) {
printf("Type is not defrGroupNameCbkType terminate
parsing.\n");
return 1;
}
printf("Name is %s\n", name());
return 0;
} +
+
+ int groupmemberCB (defrCallbackType_e type,
const char* name,
defiUserData userData) {
// Check if the type is correct
if ((type != defrGroupMemberCbkType)) {
printf("Type is not defrGroupMemberCbkType terminate
parsing.\n");
return 1;
}
printf(" %s\n", name());
return 0;
}
+
+
+ int groupCB (defrCallbackType_e type,
defiGroup grouInfo,
defiUserData userData) {
// Check if the type is correct
if ((type != defrGroupCbkType)) {
printf("Type is not defrGroupCbkType terminate
parsing.\n");
return 1;
}
if (group->hasMaxX() | group->hasMaxY() |
group->hasPerim())
{
printf(" SOFT ");
if (group->hasPerim())
printf("MAXHALFPERIMETER %d ", group->perim());
if (group->hasMaxX())
printf("MAXX %d ", group->maxX());
if (group->hasMaxY())
printf("MAXY %d ", group->maxY());
}
if (group->hasRegionName())
printf("REGION %s ", group->regionName());
if (group->hasRegionBox()) {
int *gxl, *gyl, *gxh, *gyh;
int size;
group->regionRects(&size, &gxl, &gyl, &gxh, &gyh);
for (i = 0; i < size; i++)
printf("REGION %d %d %d %d ", gxl[i], gyl[i], gxh[i],
gyh[i]);
}
printf("\n");
return 0;} +
+

defiNet

+

Retrieves data from the NETS statement in the DEF file. For syntax information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiNet {
const char* name() const;
int weight() const;
int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const;
int numConnections() const;
const char* instance(int index) const;
const char* pin(int index) const;
int pinIsMustJoin(int index) const;
int pinIsSynthesized(int index) const;
int numSubnets() const;
defiSubnet* subnet(int index);
int isFixed() const;
int isRouted() const;
int isCover() const;
int numWires() const;
defiWire* wire(int index);
int numVpins() const;
defiVpin* vpin(int index) const;
int hasProps() const;
int hasWeight() const;
int hasSubnets() const;
int hasSource() const;
int hasFixedbump() const;
int hasFrequency() const;
int hasPattern() const;
int hasOriginal() const;
int hasCap() const;
int hasUse() const;
int hasStyle() const;
int hasNonDefaultRule() const;
int hasVoltage() const;
int hasSpacingRules() const;
int hasWidthRules() const;
int hasXTalk() const;
int numSpacingRules() const;
void spacingRule(int index, char** layer, double* dist,
    double* left, double* right);
int numWidthRules() const;
void widthRule(int index, char** layer, double* dist);
double voltage() const;
int XTalk() const;
const char* source() const;
double frequency() const;
const char* original() const;
const char* pattern() const;
double cap() const;
const char* use() const;
int style() const;
const char* nonDefaultRule() const;
int numPaths() const;
defiPath* path(int index);

int numShields() const;
defiShield* shield(int index);
int numShieldNets() const;
const char* shieldNet(int index) const;
int numNoShields() const;
defiShield* noShield(int index);

int numPolygons() const;
const char* polygonName(int index) const;
struct defiPoints getPolygon(int index) const;
int numRectangles() const;
const char* rectName(int index) const;
int xl(int index) const;
int yl(int index) const;
int xh(int index) const;
int yh(int index) const;
int polyMask(int index) const;
int rectMask(int index) const;
int topMaskNum(int index) const;
int cutMaskNum(int index) const;
int bottomMask(int index) const;}
+
+

Examples

+

The following example shows a callback routine with the type defrSNetCbkType. Callback routines for the type defrSNetStartCbkType and defrSNetEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section. This example only shows how to retrieve part of the data from the defiNet class.

+
+ int snetCB (defrCallbackType_e type,
defiNet* snetInfo,
defiUserData userData) {
int i, x, y, newLayer;
char* layerName;
double dist, left, right;
defiPath* p;
int path;
defiShield* shield;
// Check if the type is correct
if ((type != defrSNetCbkType)) {
printf("Type is not defrSNetCbkType terminate
parsing.\n");
return 1;
}
// compName & pinName
for (i = 0; i < net->numConnections(); i++)
printf ("( %s %s )\n", net->instance(i), net->pin(i));
// specialWiring
if (net->isFixed()) {
printf("FIXED\n");
}
    if (net->numPaths()) {
newLayer = 0;
for (i = 0; i < net->numPaths(); i++) {
p = net->path(i);
p->initTraverse();
while ((path = (int)p->next()) != DEFIPATH_DONE) {
switch (path) {
case DEFIPATH_LAYER:
if (newLayer == 0) {
printf("%s ", p->getLayer());
newLayer = 1;
} else
printf("NEW %s ", p->getLayer());
break; +
+
+                 case DEFIPATH_VIA:
printf("%s ", p->getVia());
break; +
+
+                 case DEFIPATH_WIDTH:
printf("%d ", p->getWidth());
break; +
+
+                 case DEFIPATH_POINT:
p->getPoint(&x, &y);
printf("( %d %d ) ", x, y);
break; +
+
+                 case DEFIPATH_TAPER:
printf("TAPER ");
break; +
+
+                 case DEFIPATH_SHAPE:
printf(" SHAPE %s ", p->getShape());
break;
}
}
printf("\n");
}
}
// SHIELD
// testing the SHIELD for 5.3
    if (net->numShields()) {
for (i = 0; i < net->numShields(); i++) {
shield = net->shield(i);
printf("\n+ SHIELD %s ",
shield->defiShield::shieldName());
newLayer = 0;
for (j = 0; j < shield->defiShield::numPaths(); j++) {
p = shield->defiShield::path(j);
p->initTraverse();
while ((path = (int)p->next()) != DEFIPATH_DONE) {
switch (path) {
case DEFIPATH_LAYER:
if (newLayer == 0) {
printf("%s ", p->getLayer());
newLayer = 1;
} else
printf("NEW %s ", p->getLayer());
break; +
+
+                     case DEFIPATH_VIA:
printf("%s ", p->getVia());
break; +
+
+                     case DEFIPATH_WIDTH:
printf("%d ", p->getWidth());
break; +
+
+                     case DEFIPATH_POINT:
p->getPoint(&x, &y);
printf("( %d %d ) ", x, y);
break; +
+
+                     case DEFIPATH_TAPER:
printf("TAPER ");
break;
                }
}
printf("\n");
}
}
}
    // layerName spacing
    if (net->hasSpacingRules()) {
for (i = 0; i < net->numSpacingRules(); i++) {
net->spacingRule(i, &layerName, &dist, &left, &right);
if (left == right)
printf("SPACING %s %g\n", layerName, dist);
else
printf("SPACING %s %g RANGE %g %g\n",
layerName, dist, left, right);
}
}
return 0;
} +
+

defiNonDefault

+

Retrieves data from the NONDEFAULTRULES statement in the DEF file. For syntax information about the DEF NONDEFAULTRULES statement, see "Nondefault Rules," in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiNonDefault {
const char* name() const;
int hasHardspacing() const;
int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const;
int numLayers() const;
const char* layerName(int index) const;
int hasLayerDiagWidth(int index) const;
int hasLayerSpacing(int index) const;
int hasLayerWireExt(int index) const;
int numVias() const;
const char* viaName(int index) const;
int numViaRules() const;
const char* viaRuleName(int index) const;
int hasMinCuts() const;
void minCuts(const char **cutLayerName, int *numCuts) const;} +
+

defiOrdered

+

Retrieves data from the ORDERED statement in the SCANCHAINS statement of the DEF file. For syntax information about the DEF SCANCHAINS statement, see "Scan Chains" in the
LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiOrdered {
int num() const;
char** inst() const;
char** in() const;
char** out() const;
int* bits() const; } +
+

defiPath

+

Retrieves data from the regularWiring and specialWiring specifications in the NETS and SPECIALNETS sections of the DEF file. For syntax information about the DEF SPECIALNETS and NETS statements, see "Special Nets" and "Nets" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiPath {
void initTraverse();
void initTraverseBackwards();
int next();
int prev();
const char* getLayer(); .
const char* getTaperRule();
const char* getVia();
const char* getShape();
int getStyle();
int getViaRotation();
const char* getViaRotationStr();
void getViaData(int* numX, int* numY, int* stepX, int* stepY);
int getWidth();
void getPoint(int* x, int* y);
void getFlushPoint(int* x, int* y, int* ext);
int getMask();
int getViaTopMask();
int getViaCutMask();
int getViaBottomMask();
int getRectMask();} +
+

Examples

+

For a defiPath example, see the example in the defiNet section.

+

defiPin

+

Retrieves data from the PINS statement in the DEF file. For syntax information about the DEF PINS statement, see "Pins" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiPin {
const char* pinName() const;
const char* netName() const;
int hasDirection() const;
int hasUse() const;
int hasLayer() const;
int hasPlacement() const;
int isUnplaced() const;
int isPlaced() const;
int isCover() const;
int isFixed() const;
int placementX() const;
int placementY() const;
const char* direction() const;
const char* use() const;
int numLayer() const;
const char* layer(int index) const;
void bounds(int index, int* xl, int* yl, int* xh, int* yh) const;
int hasLayerSpacing(int index) const;
int hasLayerDesignRuleWidth(int index) const;
int layerSpacing(int index) const;
int layerDesignRuleWidth(int index) const;
int numPolygons() const;
const char* polygonName(int index) const;
struct defiPoints getPolygon(int index) const;
int hasPolygonSpacing(int index) const;
int hasPolygonDesignRuleWidth(int index) const;
int polygonSpacing(int index) const;
int polygonDesignRuleWidth(int index) const;
int hasNetExpr() const;
int hasSupplySensitivity() const;
int hasGroundSensitivity() const;
const char* netExpr() const;
const char* supplySensitivity() const;
const char* groundSensitivity() const;
int orient() const;                      // optional- For information, see
           //"Orientation Codes"
const char* orientStr() const;
int hasSpecial() const;
int numVias() const;
const char* viaName(int index) const;
int viaPtX (int index) const;
int viaPtY (int index) const;
int hasAPinPartialMetalArea() const;
int numAPinPartialMetalArea() const;
int APinPartialMetalArea(int index) const;
int hasAPinPartialMetalAreaLayer(int index) const;
const char* APinPartialMetalAreaLayer(int index) const;

int hasAPinPartialMetalSideArea() const;
int numAPinPartialMetalSideArea() const;
int APinPartialMetalSideArea(int index) const;
int hasAPin PartialMetalSideAreaLayer(int index) const;
const char* APinPartialMetalSideAreaLayer(int index) const;

int hasAPinDiffArea() const;
int numAPinDiffArea() const;
int APinDiffArea(int index) const;
int hasAPinDiffAreaLayer(int index) const;
const char* APinDiffAreaLayer(int index) const;

int hasAPinPartialCutArea() const;
int numAPinPartialCutArea() const;
int APinPartialCutArea(int index) const;
int hadAPinPartialCutAreaLayer(int index) const;
const char* APinPartialCutAreaLayer(int index) const;

int numAntennaModel() const;
defiPinAntennaModel* antennaModel(int index) const;

int hasPort() const;
int numPorts() const;
defiPinPort* pinPort(int index) const;
int layerMask(int index) const;
int polygonMask(int index) const;
int viaTopMask(int index) const;
int viaCutMask(int index) const;
int viaBottomMask(int index) const;}
+
+

Examples

+

The following example shows a callback routine with the type defrPinCbkType. Callback routines for the type defrStartPinsCbkType and defrPinEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.

+
+ int pinCB (defrCallbackType_e type,
defiPin* pinInfo,
defiUserData userData) {
int i; +
+
+ // Check if the type is correct
if ((type != defrPinCbkType)) {
printf("Type is not defrPinCbkType terminate parsing.\n");
return 1;
}
    printf("%s NET %s\n", pinInfo->pinName(),
pinInfo->netName());
if (pinInfo->hasDirection())
printf(" DIRECTION %s\n", pinInfo->direction());
if (pinInfo->hasUse())
printf(" USE %s\n", pinInfo->use());
if (pinInfo->hasLayer()) {
printf(" LAYER %s ", pinInfo->layer());
pinInfo->bounds(&xl, &yl, &xh, &yh);
printf("%d %d %d %d\n", xl, yl, xh, yh);
}
    if (pinInfo->hasPlacement()) {
if (pinInfo->isPlaced())
printf(" PLACED\n");
if (pinInfo->isCover())
printf(" COVER\n");
if (pinInfo->isFixed())
printf(" FIXED\n");
printf("( %d %d ) %d ", pinInfo->placementX(),
pinInfo->placementY(),
pinInfo->orient());
}
if (pinInfo->hasSpecial())
printf(" SPECIAL\n");
return 0;} +
+

defiPinAntennaModel

+

Retrieves antenna model information in the PINS statement in the DEF file. For syntax information about the DEF PINS statement, see "Pins" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiPinAntennaModel {
char* antennaOxide() const;
int hasAPinGateArea() const;
int numAPinGateArea() const;
int APinGateArea(int index) const;
int hasAPinGateAreaLayer(int index) const;
const char* APinGateAreaLayer(int index) const;
int hasAPinMaxAreaCar() const;
int numAPinMaxAreaCar() const;
int APinMaxAreaCar(int index) const;
int hasAPinMaxAreaCarLayer(int index) const;
const char* APinMaxAreaCarLayer(int index) const;
int hasAPinMaxSideAreaCar() const;
int numAPinMaxSideAreaCar() const;
int APinMaxSideAreaCar(int index) const;
int hasAPinMaxSideAreaCarLayer(int index) const;
const char* APinMaxSideAreaCarLayer(int index) const;
int hasAPinMaxCutCar() const;
int numAPinMaxCutCar() const;
int APinMaxCutCar(int index) const;
int hasAPinMaxCutCarLayer(int index) const;
const char* APinMaxCutCarLayer(int index) const; } +
+

defiPinPort

+

Retrieves data from the PINS PORT statement in the DEF file. For syntax information about the DEF PINS PORT statement, see "Pins" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiPinPort {
int numLayer() const;
const char* layer(int index) const;
int hasLayerSpacing(int index) const;
int hasLayerDesignRuleWidth(int index) const;
int layerSpacing(int index) const;
int layerDesignRuleWidth(int index) const;
int numPolygons() const;
const char* polygonName(int index) const;
struct defiPoints getPolygon(int index) const;
int hasPolygonSpacing(int index) const;
int hasPolygonDesignRuleWidth(int index) const;
int polygonSpacing(int index) const;
int polygonDesignRuleWidth(int index) const;
int numVias() const;
const char* viaName(int index) const;
int viaPtX (int index) const;
int viaPtY (int index) const;
int hasPlacement() const;
int isPlaced() const;
int isCover() const;
int isFixed() const;
int placementX() const;
int placementY() const;
int orient() const;
const char* orientStr() const;
int layerMask(int index) const;
int polygonMask(int index) const;
int viaTopMask(int index) const;
int viaCutMask(int index) const;
int viaBottomMask(int index) const;};} +
+

defiPinProp

+

Retrieves data from the PINPROPERTIES statement in the DEF file. For syntax information about the DEF PINPROPERTIES statement, see "Pin Properties" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiPinProp {
int isPin() const;
const char* instName() const;
const char* pinName() const;
int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index); } +
+

Examples

+

The following example shows a callback routine with the type defrPinPropCbkType. Callback routines for the type defrPinPropStartCbkType and defrPinPropEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.

+
+ int pinpropCB (defrCallbackType_e type,
defiPinProp* pinpropInfo,
defiUserData userData) {
int i;
// Check if the type is correct
if ((type != defrPinCbkType)) {
printf("Type is not defrPinCbkType terminate parsing.\n");
return 1;
}
if (pinpropInfo->isPin())
printf("PIN %s\n", pinpropInfo->pinName());
else
printf("%s %s\n", pinpropInfo->instName(),
pinpropInfo->pinName());
if (pinpropInfo->numProps() > 0) {
for (i = 0; i < pinpropInfo->numProps(); i++) {
printf(" PROPERTY %s %s\n", pinpropInfo->propName(i),
pinpropInfo->propValue(i));
}
}
return 0;} +
+

defiPoints

+

Retrieves a list of points for polygons in the DEF file.

+

C++ Syntax

+
+ struct defiPoints {
int numPoints;
int* x;
int* y;} +
+

defiProp

+

Retrieves data from the PROPERTYDEFINITIONS statement in the DEF file. For syntax information about the DEF PROPERTYDEFINITIONS statement, see "Property Definitions" in the LEF/DEF Language Reference.

+

The string of the property is returned by the C++ function string or the C function defiProp_string. A property can have a number and a range, which are returned by the function hasNumber and hasRange. The actual values are returned by the functions number, left, and right.

+

C++ Syntax

+
+ class defiProp {
const char* string() const;
const char* propType() const;
const char* propName() const;
char dataType() const;           // either I:integer, R:real, S:string,
                                 // Q:quotestring, or N:nameMapString
int hasNumber() const;
int hasRange() const;
int hasString() const;
int hasNameMapString() const;
double number() const;
double left() const;
double right() const;} +
+

Examples

+

The following example shows a callback routine with the type defrPropDefStartCbkType, and void *. This callback routine marks the beginning of the Property Definitions section.

+
+ int propDefStartCB (defrCallbackType_e type,
void* dummy,
defiUserData userData) {
// Check if the type is correct
if (type != defrPropDefStartCbkType) {
printf("Type is not defrPropDefStartCbkType,
terminate parsing.\n");
return 1;
}
printf("PROPERTYDEFINITIONS\n");
return 0;} +
+

The following example shows a callback routine with the type defrPropCbkType, and the class defiProp. This callback routine will be called for each defined property definition.

+
+ int propDefCB (defrCallbackType_e type,
defiProp* propInfo,
defiUserData userData) {
// Check if the type is correct
if (type != defrPropCbkType) {
printf("Type is not defrPropCbkType, terminate
parsing.\n");
return 1;
}
// Check the object type of the property definition
if (strcmp(propInfo->propType(), "design") == 0)
printf("DESIGN %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "net") == 0)
printf("NET %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "component") == 0)
printf("COMPONENT %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "specialnet") == 0)
printf("SPECIALNET %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "group") == 0)
printf("GROUP %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "row") == 0)
printf("ROW %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "componentpin") == 0)
printf("COMPONENTPIN %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "region") == 0)
printf("REGION %s ", propInfo->propName());
if (propInfo->dataType() == 'I')
printf("INTEGER ");
if (propInfo->dataType() == 'R')
printf("REAL ");
if (propInfo->dataType() == 'S')
printf("STRING ");
if (propInfo->dataType() == 'Q')
printf("STRING ");
if (propInfo->hasRange()) {
printf("RANGE %g %g ", propInfo->left(),
propInfo->right());
}
if (propInfo->hasNumber())
printf("%g ", propInfo->number());
if (propInfo->hasString())
printf("'%s' ", propInfo->string());
printf("\n");
+
+
+ return 0;} +
+

The following example shows a callback routine with the type defrPropDefEndCbkType, and void *. This callback routine marks the end of the Property Definitions section.

+
+ int propDefEndCB (defrCallbackType_e type,
void* dummy,
defiUserData userData) {
// Check if the type is correct
if (type != defrPropDefEndCbkType) {
printf("Type is not defrPropDefEndCbkType,
terminate parsing.\n");
return 1;
} +
+

defiRegion

+

Retrieves data from the REGIONS statement in the DEF file. For syntax information about the DEF REGIONS statement, see "Regions" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiRegion {
const char* name() const;
int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const;
int hasType() const;
const char* type() const;
int numRectangles() const;
int xl(int index) const;
int yl(int index) const;
int xh(int index) const;
int yh(int index) const;} +
+

Examples

+

The following example shows a callback routine with the type defrRegionCbkType. Callback routines for the type defrRegionStartCbkType and defrRegionEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.

+
+ int regionCB (defrCallbackType_e type,
defiRegion* regionInfo,
defiUserData userData) {
int i;
char* name;
// Check if the type is correct
if ((type != defrRegionCbkType)) {
printf("Type is not defrRegionCbkType terminate
parsing.\n");
return 1;
}
for (i = 0; i < regionInfo->numRectangles(); i++)
printf("%d %d %d %d \n", regionInfo->xl(i),
regionInfo->yl(i), regionInfo->xh(i),
regionInfo->yh(i));
return 0;} +
+

defiRow

+

Retrieves data from the ROW statement in the DEF file. For syntax information about the DEF ROW statement, see "Rows" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiRow {
const char* name() const;
const char* macro() const;
double x() const;
double y() const;
int orient() const;                   // optional-For information,see
             //"Orientation Codes"
const char* orientStr() const;
int hasDo() const;
double xNum() const;
double yNum() const;
int hasDoStep() const;
double xStep() const;
double yStep() const;
int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const;} +
+

Examples

+

The following example shows a die area routine using a callback routine with the type defrDieAreaCbkType, and the class defiRow.

+
+ int diearea (defrCallbackType_e type,
defiRow* dieareaInfo,
defiUserData userData) {
// Check if the type is correct
if (type != defrDieAreaCbkType) {
printf("Type is not defrDieAreaCbkType, terminate
parsing.\n");
return 1;
}
printf("DIEAREA %d %d %d %d\n", diearea->xl(), diearea->yl(),
diearea->xh(), diearea->yh());
return 0;} +
+

The following example shows a row routine using a callback routine with the type defrRowCbkType, and the class defiRow.

+
+ int rowCB (defrCallbackType_e type,
defiRow* rowInfo,
defiUserData userData) {
int i;
// Check if the type is correct
if (type != defrRowCbkType) {
printf("Type is not defrRowCbkType, terminate
parsing.\n");
return 1;
}
    printf("ROW %s %s %g %g %d ", rowInfo->name(),
rowInfo->macro(), rowInfo->x(), rowInfo->y(),
rowInfo->orient()); +
+
+     printf("DO %g BY %g STEP %g %g\n", rowInfo->xNum(),
rowInfo->yNum(),rowInfo->xStep(), row->yStep());
    if (rowInfo->numProps() > 0) {
for (i = 0; i < rowInfo->numProps(); i++) {
printf(" PROPERTY %s %s\n", rowInfo->propName(i),
rowInfo->propValue(i));
}
}
return 0;} +
+

defiScanchain

+

Retrieves data from the SCANCHAINS statement in the DEF file. For syntax information about the DEF SCANCHAINS statement, see "Scan Chains" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiScanchain {
const char* name() const;
int hasStart() const;
int hasStop() const;
int hasFloating() const;
int hasOrdered() const;
int hasCommonInPin() const;
int hasCommonOutPin() const;
int hasPartition() const;
int hasPartitionMaxBits() const;
void start(char** inst, char** pin) const;
void stop(char** inst, char** pin) const;
int numOrdered() const;
void ordered(int index, int* size, char*** inst, char*** inPin,
    char*** outPin, int** bits) const;
void floating(int* size, char*** inst, char*** inPin,
    char*** outPin, int** bits) const;
const char* commonInPin() const;
const char* commonOutPin() const;
const char* partitionName() const;
int partitionMaxBits(); } +
+

Examples

+

The following example shows a callback routine with the type defrScanchainCbkType. Callback routines for the type defrScanchainsStartCbkType and defrScanchainsEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.

+
+ int scanchainCB (defrCallbackType_e type,
defiScanchain* scanchainInfo,
defiUserData userData) {
// Check if the type is correct
if ((type != defrScanchainCbkType)) {
printf("Type is not defrScanchainCbkType
terminate parsing.\n");
return 1;
}
    printf("%s\n", scanchainInfo->name());
if (scanchainInfo->hasStart()) {
scanchainInfo->start(&a1, &b1);
printf(" START %s %s\n", a1, b1);
}
if (scanchainInfo->hasStop()) {
scanchainInfo->stop(&a1, &b1);
printf(" STOP %s %s\n", a1, b1);
}
if (scanchainInfo->hasCommonInPin() ||
scanchainInfo->hasCommonOutPin()) {
printf(" COMMONSCANPINS ");
if (scanchainInfo->hasCommonInPin())
printf(" ( IN %s ) ", scanchainInfo->commonInPin());
if (scanchainInfo->hasCommonOutPin())
printf(" ( OUT %s ) ",scanchainInfo->commonOutPin());
printf("\n");
}
if (scanchainInfo->hasFloating()) {
scanchainInfo->floating(&size, &inst, &inPin, &outPin);
if (size > 0)
printf(" + FLOATING\n");
for (i = 0; i < size; i++) {
printf(" %s ", inst[i]);
if (inPin[i])
printf("( IN %s ) ", inPin[i]);
if (outPin[i])
printf("( OUT %s ) ", outPin[i]);
printf("\n");
}
printf("\n");
}
if (scanchainInfo->hasOrdered()) {
for (i = 0; i < scanchainInfo->numOrderedLists(); i++) {
scanchainInfo->ordered(i, &size, &inst, &inPin,
&outPin);
if (size > 0)
printf(" + ORDERED\n");
for (i = 0; i < size; i++) {
printf(" %s ", inst[i]);
if (inPin[i])
printf("( IN %s ) ", inPin[i]);
if (outPin[i])
printf("( OUT %s ) ", outPin[i]);
printf("\n");
}
}
printf("\n");
}
return 0;}
+
+

defiShield

+

Retrieves data from the SPECIALNETS statement in the DEF file. For syntax information about the DEF SPECIALNETS statement, see "Special Nets" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiShield {
const char* shieldName() const;
int numPaths() const;
defiPath* path(int index);} +
+

Examples

+

For a defiShield example, see the example in the defiNet section.

+

defiSite

+

Retrieves data from any obsolete SITE sections of the DEF file.

+

C++ Syntax

+
+ class defiSite {
double x_num() const;
double y_num() const;
double x_step() const;
double y_step() const;
double x_orig() const;
double y_orig() const;
int orient() const;               // optional- For information, see
    //"Orientation Codes"
const char* orientStr() const;
const char* name() const;} +
+

Examples

+

The following example shows a callback routine with the type defrCanplaceCbk and defrCannotOccupyCbk.

+
+ int siteCB (defrCallbackType_e type,
defiSite siteInfo,
defiUserData userData) {
// Check if the type is correct
if ((type != defrCanplaceCbk) && (type !=
defrCannotOccupyCbk)) {
printf("Type is not defrCanplaceCbk and not
defrCannotOccupyCbk,\n");
printf("terminate parsing.\n");
return 1;
}
    printf("CANPLACE %s %g %g %s ", siteInfo->name(),
siteInfo->x_orig(), siteInfo->y_orig(),
orientStr(siteInfo->orient()));
printf("DO %d BY %d STEP %g %g ;\n", siteInfo->x_num(),
siteInfo->y_num(),
siteInfo->x_step(), siteInfo->y_step());
return 0;} +
+

defiSlot

+

Retrieves data from the SLOTS statement in the DEF file. For syntax information about the DEF SLOTS statement, see "Slots" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiSlot {
int hasLayer() const;
const char* layerName() const;
int numRectangles() const;
int xl(int index) const;
int yl(int index) const;
int xh(int index) const;
int yh(int index) const;
int numPolygons() const;
struct defiPoints getPolygon(int index) const;} +
+

defiStyles

+

Retrieves data from the STYLES statement in the DEF file. For syntax information about the DEF STYLES statement, see "Styles," in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiStyles {
int style() const;
struct defiPoints getPolygon() const;} +
+

defiSubnet

+

Retrieves data from the SUBNETS statement in the NETS statement in the DEF file. For syntax information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiSubnet {
const char* name() const;
int numConnections();
const char* instance(int index);
const char* pin(int index);
int pinIsSynthesized(int index);
int pinIsMustJoin(int index);
int isFixed() const;
int isRouted() const;
int isCover() const;
int hasNonDefaultRule() const;
int hasShield() const;
int hasShieldNet() const;
int hasNoShieldNet() const;
int numPaths() const;
defiPath* path(int index);
const char* nonDefaultRule() const;
int numWires() const;
defiWire* wire(int index);} +
+

defiTrack

+

Retrieves data from the TRACKS statement in the DEF file. For syntax information about the DEF TRACKS statement, see "Tracks" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiTrack {
const char* macro() const;
double x() const;
double xNum() const;
double xStep() const;
int numLayers() const;
const char* layer(int index) const;
int firstTrackMask() const;
int sameMask() const;} +
+

Examples

+

The following example shows a callback routine with the type defrTrackCbkType, and the class defiTrack.

+
+ int trackCB (defrCallbackType_e type,
defiTrack* trackInfo,
defiUserData userData) {
int i;
// Check if the type is correct
if (type != defrTrackCbkType) {
printf("Type is not defrTrackCbkType, terminate
parsing.\n");
return 1;
}
printf("TRACKS %s %g DO %g STEP %g LAYER ",
trackInfo->macro(),
trackInfo->x(), trackInfo->xNum(), trackInfo->xStep());
for (i = 0; i < trackInfo->numLayers(); i++)
printf("%s ", trackInfo->layer(i));
    printf("\n");
return 0;} +
+

defiVia

+

Retrieves data from the VIAS statement in the DEF file. For syntax information about the DEF VIAS statement, see "Vias" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiVia {
const char* name() const;
const char* pattern() const;
int hasPattern() const;
int numLayers() const;
void layer(int index, char** layer, int* xl, int* yl,
    int* xh, int* yh) const;
int numPolygons() const;
const char* polygonName(int index) const;
struct defiPoints getPolygon(int index) const:
int hasViaRule() const;
void viaRule(char** viaRuleName, int* xSize, int* ySize,
    char** botLayer, char** cutLayer, char** topLayer,
    int* xCutSpacing, int* yCutSpacing, int* xBotEnc, int* yBotEnc,
    int* xTopEnc, int* yTopEnc) const;
int hasRowCol() const;
void rowCol(int* numCutRows, int* numCutCols) const;
int hasOrigin() const;
void origin(int* xOffset, int* yOffset) const;
int hasOffset() const;
void offset(int* xBotOffset, int* yBotOffset, int* xTopOffset
    int* yTopOffset) const;
int hasCutPattern() const;
const char* cutPattern() const;
int rectMask(int index) const;
int polyMask(int index) const; } +
+

Examples

+

The following example shows a callback routine with the type defrViaStartCbkType.

+
+ int viaStartCB (defrCallbackType_e type,
int numVias,
defiUserData userData) {
// Check if the type is correct
if ((type != defrViaStartCbkType)) {
    printf("Type is not defrViaStartCbkType terminate
        parsing.\n");
    return 1;
}
printf("VIAS %d\n", numVias);
return 0;} +
+

The following example shows a callback routine with the type defrViaCbkType.

+
+ int viaCB (defrCallbackType_e type,
defiVia* viaInfo,
defiUserData userData) {
int i, xl, yl, xh, yh;
char* name;
// Check if the type is correct
if ((type != defrViaCbkType)) {
       printf("Type is not defrViaCbkType terminate parsing.\n");
return 1;
}
printf("Via name is %s ", viaInfo->name());
if (viaInfo->hasPattern())
printf(" PATTERNNAME %s\n", viaInfo->pattern());
for (i = 0; i < viaInfo->numLayers(); i++) {
        viaInfo->layer(i, &name, &xl, &yl, &xh, &yh);
printf(" RECT %s %d %d %d %d \n", name, xl, yl, xh, yh);
} +
+
+ return 0;} +
+

The following example shows a callback routine with the type defrViaEndCbkType.

+
+ int viaEndCB (defrCallbackType_e type,
void* ptr,
defiUserData userData) {
// Check if the type is correct
if ((type != defrViaEndCbkType)) {
       printf("Type is not defrViaEndCbkType terminate
parsing.\n");
return 1;
} +
+
+      printf("END VIAS\n");
    return 0;} +
+

defiViaData

+

Retrieves via array data from the SPECIALNETS statement in the DEF file. For syntax information about the DEF SPECIALNETS statement, see "Special Nets" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ struct defiViaData {
int numX;
int numY;
int stepX;
int stepY;} +
+

defiVpin

+

Retrieves data from the VPIN statement in the NETS statement in the DEF file. For syntax information about the DEF NETS statement, see "Nets" and in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiVpin {
int xl() const;
int yl() const;
int xh() const;
int yh() const;
char status() const;
int orient() const;
const char* orientStr() const;
int xLoc() const;
int yLoc() const;
const char* name() const;
const char* layer() const;} +
+

defiWire

+

Retrieves data from the regularWiring or specialWiring section of the NETS or SPECIALNETS statements in the DEF file. For syntax information about the DEF NETS and SPECIALNETS statements, see "Nets" and "Special Nets" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class defiWire {
const char* wireType() const;
const char* wireShieldNetName() const;
int numPaths() const;
defiPath* path(int index);} +
+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/ch5DEFwritercallback.html b/lefdef/doc/defapi/ch5DEFwritercallback.html new file mode 100644 index 00000000..2a43f511 --- /dev/null +++ b/lefdef/doc/defapi/ch5DEFwritercallback.html @@ -0,0 +1,737 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

5 

+

DEF Writer Callback Routines

+

You can use the Cadence® Design Exchange Format (DEF) writer with callback routines, or you can call one writer function at a time.

+

When you use callback routines, the writer creates a DEF file in the sequence shown in the following table. The writer also checks which sections are required for the file. If you do not provide a callback for a required section, the writer uses a default routine. If no default routine is available for a required section, the writer generates an error message.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Section +

+
+

+ Required +

+
+

+ Default Available +

+
+

Version

+
+

yes

+
+

yes

+
+

Bus Bit Characters

+
+

yes

+
+

yes

+
+

Divider

+
+

yes

+
+

yes

+
+

Design

+
+

yes

+
+

no

+
+

Technology

+
+

no

+
+

no

+
+

Units

+
+

no

+
+

no

+
+

History

+
+

no

+
+

no

+
+

Property Definition

+
+

no

+
+

no

+
+

Die Area

+
+

no

+
+

no

+
+

Rows

+
+

no

+
+

no

+
+

Tracks

+
+

no

+
+

no

+
+

Gcell Grid

+
+

no

+
+

no

+
+

Vias

+
+

no

+
+

no

+
+

Regions

+
+

no

+
+

no

+
+

Components

+
+

yes

+
+

no

+
+

Pins

+
+

no

+
+

no

+
+

Pin Properties

+
+

no

+
+

no

+
+

Special Nets

+
+

no

+
+

no

+
+

Nets

+
+

yes

+
+

no

+
+

Scan chains

+
+

no

+
+

no

+
+

Groups

+
+

no

+
+

no

+
+

Extensions

+
+

no

+
+

no

+
+

Design End

+
+

yes

+
+

no

+
+

Callback Function Format

+

All callback functions use the following format.

+
+ int UserCallbackFunctions(
defwCallbackType_e callBackType,
defiUserData data) +
+

Callback Type

+

The callBackType argument is a list of objects that contains a unique number assignment for each callback from the parser. This list allows you to use the same callback routine for different types of DEF data.

+

User Data

+

The data argument is a four-byte data item that you set. The DEF writer contains only user data. The user data is most often set to a pointer to the design data so that it can be passed to the routines.

+

Callback Types and Setting Routines

+

The following table lists the DEF writer callback-setting routines and the associated callback types.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ DEF Information +

+
+

+   +

+

+ Setting Routine +

+
+

+ +

+

+ Callback Types +

+
+

Blockages

+
+

void defwSetBlockageCbk
(defwVoidCbkFnType)

+
+

defwBlockageCbkType

+
+

Bus Bit Characters

+
+

void defwSetBusBitCbk
(
defwVoidCbkFnType)

+
+

defwBusBitCbkType

+
+

Components

+
+

void defwSetComponentCbk
(defwVoidCbkFnType)

+
+

defwComponentCbkType

+
+

Design

+
+

void defwSetDesignCbk
(defwVoidCbkFnType)

+
+

defwDesignCbkType

+
+

Design End

+
+

void defwSetDesignEndCbk
(defwVoidCbkFnType)

+
+

defwDesignEndCbkType

+
+

Die Area

+
+

void defwSetDieAreaCbk
(defwVoidCbkFnType)

+
+

defwDieAreaCbkType

+
+

Divider

+
+

void defwSetDividerCbk
(defwVoidCbkFnType)

+
+

defwDividerCbkType

+
+

Extensions

+
+

void defwSetExtCbk
(defwVoidCbkFnType)

+
+

defwExtCbkType

+
+

Gcell Grid

+
+

void defwSetGcellGridCbk
(defwVoidCbkFnType)

+
+

defwGcellGridCbkType

+
+

Groups

+
+

void defwSetGroupCbk
(defwVoidFnType)

+
+

defwGroupCbkType

+
+

History

+
+

void defwSetHistoryCbk
(defwVoidCbkFnType)

+
+

defwHistoryCbkType

+
+

Nets

+
+

void defwSetNetCbk
(defwVoidCbkFnType)

+
+

defwNetCbkType

+
+

Pins

+
+

void defwSetPinCbk
(defwVoidCbkFnType)

+
+

defwPinCbkType

+
+

Pin Properties

+
+

void defwSetPinPropCbk
(defwVoidCbkFnType)

+
+

defwPinPropCbkType

+
+

Property Definitions

+
+

void defwSetPropDefCbk
(defwVoidCbkFnType)

+
+

defwPropDefCbkType

+
+

Regions

+
+

void defwSetRegionCbk
(defwVoidCbkFnType)

+
+

defwRegionCbkType

+
+

Rows

+
+

void defwSetRowCbk
(defwVoidCbkFnType)

+
+

defwRowCbkType

+
+

Special Nets

+
+

void defwSetSNetCbk
(defwVoidCbkFnType)

+
+

defwSNetCbkType

+
+

Scan Chains

+
+

void defwSetScanchainCbk
(defwVoidCbkFnType)

+
+

defwScanchainCbkType

+
+

Technology

+
+

void defwSetTechnologyCbk
(defwVoidCbkFnType)

+
+

defwTechCbkType

+
+

Tracks

+
+

void defwSetTrackCbk
(defwVoidCbkFnType)

+
+

defwTrackCbkType

+
+

Units

+
+

void defwSetUnitsCbk
(defwVoidCbkFnType)

+
+

defwUnitsCbkType

+
+

Version

+
+

void defwSetVersionCbk
(defwVoidCbkFnType)

+
+

defwVersionCbkType

+
+

Vias

+
+

void defwSetViaCbk
(defwVoidCbkFnType)

+
+

defwViaCbkType

+
+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/ch6DEFwriter.html b/lefdef/doc/defapi/ch6DEFwriter.html new file mode 100644 index 00000000..6065700c --- /dev/null +++ b/lefdef/doc/defapi/ch6DEFwriter.html @@ -0,0 +1,5572 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

6 

+

DEF Writer Routines

+

You can use the Cadence® Design Exchange Format (DEF) writer routines to create a program that outputs a DEF file. The DEF writer routines correspond to the sections of the DEF file. This chapter describes the routines listed below that you need to write a particular DEF section.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Routines +

+
+

+ DEF File Section +

+
+

DEF Writer Setup and Control

+
+

Initialization and global variables

+
+

Blockages

+
+

BLOCKAGES statement

+
+

Bus Bit Characters

+
+

BUSBITCHARS statement

+
+

Components

+
+

COMPONENTS statement

+
+

Design Name

+
+

DESIGN statement

+
+

Die Area

+
+

DIEAREA statement

+
+

Divider Character

+
+

DIVIDERCHAR statement

+
+

Extensions

+
+

EXTENSIONS statement

+
+

Fills

+
+

FILLS statement

+
+

GCell Grid

+
+

GCELLGRID statement

+
+

Groups

+
+

GROUPS statement

+
+

History

+
+

HISTORY statement

+
+

Nets

+
+

NETS statement

+
+
Regular Wiring
+
+

regularWiring statement in a NETS statement

+
+
Subnet
+
+

SUBNET statement in a NETS statement

+
+

Nondefault Rules

+
+

NONDEFAULTRULES statement

+
+

Pins

+
+

PINS statement

+
+

Pin Properties

+
+

PINPROPERTIES statement

+
+

Property Definitions

+
+

PROPERTYDEFINITIONS statement

+
+

Property Statements

+
+

PROPERTY statements

+
+

Regions

+
+

REGIONS statement

+
+

Rows

+
+

ROW statement

+
+

Special Nets

+
+

SPECIALNETS statement

+
+
Special Wiring
+
+

specialWiring statement in a SPECIALNETS statement

+
+
Shielded Routing
+
+

shielded routing statement in a SPECIALNETS statement

+
+

Scan Chains

+
+

SCANCHAINS statement

+
+

Slots

+
+

SLOTS statement

+
+

Styles

+
+

STYLES statement

+
+

Technology

+
+

TECHNOLOGY statement

+
+

Tracks

+
+

TRACKS statement

+
+

Units

+
+

UNITS statement

+
+

Version

+
+

VERSION statement

+
+

Vias

+
+

VIAS statement

+
+

DEF Writer Setup and Control

+

The DEF writer setup and control routines initialize the reader and set global variables that are used by the DEF file. You must begin a DEF file with either the defwInit routine or the defwInitCbk routine. You must end a DEF file with the defwEnd routine. All other routines must be used between these routines. The remaining routines described in this section are provided as utilities.

+

For an example on how to set up the writer, see "Setup Examples".

+

All routines return 0 if successful.

+

defwInit

+

Initializes the DEF writer. Use this routine if you do not want to use the callback mechanism.

+

Syntax

+
+ int defwInit (
FILE* file,
int vers1,
int vers2,
const char* caseSensitive,
const char* dividerChar,
const char* busBitChars,
const char* designName,
const char* technology,
const char* array,
const char* floorplan,
double units) +
+

Arguments

+

+ + file +

+
Specifies the name of the DEF file to create.
+

+ + vers1, vers2 +

+
Specifies which version of LEF/DEF is being used. vers1 specifies the major number. vers2 specifies the minor number.
+

+ + caseSensitive +

+
Note: The NAMECASESENSITIVE statement is obsolete; therefore the writer ignores this argument.
+

+ + dividerChar +

+
Writes the DIVIDERCHAR statement that specifies the character used to express hierarchy when DEF names are mapped to or from other databases. The character must be enclosed in double quotation marks.
+

+ + busBitChars +

+
Writes the BUSBITCHARS statement that specifies the pair of characters used to specify bus bits when DEF names are mapped to or from other databases. The characters must be enclosed in double quotation marks.
+

+ + designName +

+
Writes the DESIGN statement that specifies a name for the design.
+

+ + technology +

+
Writes the TECHNOLOGY statement that specifies a technology name for the design.
+

+ + units +

+
Writes the UNITS statement that specifies how to convert DEF units.
+

defwInitCbk

+

Also initializes the DEF writer. Use this routine if you want to use the callback mechanism. If you use this routine, you must also use the following routines:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwVersion
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwBusBitChars
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwDividerChar
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwDesignName
+
+

If you do not include these routines, default values are used.

+

Syntax

+
+ int defwInit(
FILE* file); +
+

Arguments

+

+ + file +

+
Specifies the name of the DEF file to create.
+

defwEnd

+

Ends the DEF file. This routine is required and must be used last.

+

Syntax

+
+ int defwEnd(void) +
+

defwCurrentLineNumber

+

Returns the line number of the last line written to the DEF file. This routine does not require any arguments.

+

Syntax

+
+ int defwCurrentLineNumber(void) +
+

defwNewLine

+

Writes a blank line. This routine does not require any arguments.

+

Syntax

+
+ int defwNewLine() +
+

defwAddComment

+

Allows you to enter any comment into the DEF file. This statement automatically adds a pound symbol (#) to the beginning of the comment statement.

+

Syntax

+
+ int defwAddComment(
const char* comment) +
+

defwAddIntent

+

Automatically indents a statement by adding three blank spaces to the beginning of the statement. This routine does not require any arguments.

+

Syntax

+
+ int defwAddIndent() +
+

defwPrintError

+

Prints the return status of the defw* routines.

+

Syntax

+
+ void defwPrintError(
int status) +
+

Arguments

+

+ + status +

+
Specifies the nonzero integer returned by the DEF writer routines.
+

Setup Examples

+

The following examples show how to set up the writer. There are two ways to use the DEF writer:

+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
You write callback routines for each section, and the writer calls your callback routines in the sequence based on the LEF/DEF Language Reference. If a section is required but you do not provide a callback routine, the writer will issue a warning. If there is a default routine, the writer will invoke the default routine with a message attached
+
+

This manual includes examples with and without callback routines.

+

The following example uses the writer without callbacks.

+
+ int setupRoutine() {
FILE* f;
int res;
+
+
+ ...
// Open the def file for the writer to write
if ((f = fopen("defOutputFileName","w")) == 0) {
    printf("Couldn't open output file '%s'\n",
        "defOutputFileName");
return(2);
}
+
+
+ // Initialize the writer. This routine has to call first.
// Call this routine instead of defwInitCbk(f)
// if you are not using callback routines.
res = defwInit(f);
...
+
+
+ res = defwEnd();
...
+
+
+ fclose(f);
return 0;
} +
+

The following example uses the writer with callbacks.

+
+ int setupRoutine() {
FILE* f;
int res;
int userData = 0x01020304;
+
+
+ ...
// Open the def file for the writer to write
if ((f = fopen("defOutputFileName","w")) == 0) {
    printf("Couldn't open output file '%s'\n",
        "defOutputFileName");
return(2);
}
+
+
+ // Initialize the writer. This routine has to call first.
// Call this routine instead of defwInit() if you are
// using the writer with callbacks.
res = defwInitCbk(f);
...
+
+
+ res = defwEncrypt(); // Set flag to write in encrypted format
...
+
+
+ // Set the user callback routines
defwSetArrayCbk (arrayCB);
defwSetBusBitCbk (busbitCB);
defwSetCaseSensitiveCbk (casesensitiveCB);
defwSetComponentCbk (componentCB);
defwSetConstraintCbk (constraintCB);
defwSetDefaultCapCbk (defaultCapCB);
defwSetDesignCbk (designCB);
defwSetDesignEndCbk (designendCB);
...
+
+
+ // Invoke the parser
res = defwWrite(f, "defInputFileName", (void*)userData);
if (res != 0) {
    printf("DEF writer returns an error\n");
    return(2);
}
+
+
+ res = defwCloseEncrypt(); // Clean up the encrypted buffer
...
+
+
+ fclose(f);
return 0;
} +
+

The following example shows the callback routine to mark the end of the DEF design. The type is defwDesignEndCbkType.

+
+ #define CHECK_RES(res) \
if (res) { \
defwPrintError(res); \
return(res); \
}
+
+
+ int designendCB (defwCallbackType_e type,
defiUserData userData) {
int res;
+
+
+ // Check if the type is correct
if (type != defwDesignEndCbkType) {
printf("Type is not defwDesignEndCbkType, terminate
    writing.\n");
return 1;
}
res = defwEnd();
CHECK_RES(res);
return 0;
} +
+

Blockages

+

Blockages routines write a DEF BLOCKAGES statement. The BLOCKAGES statement is optional and can be used only once in a DEF file. For syntax information about the DEF BLOCKAGES statement, see "Blockages" in the LEF/DEF Language Reference.

+

A BLOCKAGES statement must start and end with the defwStartBlockages and defwEndBlockages routines. All blockages must be defined between these routines.

+

defwStartBlockages

+

Starts a BLOCKAGES statement.

+

Syntax

+
+ int defwStartBlockages(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of blockages defined in the BLOCKAGES statement.
+

defwEndBlockages

+

Ends the BLOCKAGES statement.

+

Syntax

+
+ int defwEndBlockages() +
+

defwBlockageDesignRuleWidth

+

Writes a DESIGNRULEWIDTH statement for the blockage. Either a SPACING or a DESIGNRULEWIDTH statement can be specified for a routing blockage. The DESIGNRULEWIDTH statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesLayerDesignRuleWidth instead.

+

Syntax

+
+ defwBlockageDesignRuleWidth(
int effectiveWidth) +
+

Arguments

+

+ + effectiveWidth +

+
Specifies that the blockages have a width of effectiveWidth for the purposes of spacing calculations.
+

defwBlockagesLayerDesignRuleWidth

+

Writes a DESIGNRULEWIDTH statement for the blockage. Either a SPACING or a DESIGNRULEWIDTH statement can be specified for a routing blockage. The DESIGNRULEWIDTH statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ defwBlockagesLayerDesignRuleWidth(
int effectiveWidth) +
+

Arguments

+

+ + effectiveWidth +

+
Specifies that the blockages have a width of effectiveWidth for the purposes of spacing calculations.
+

defwBlockageLayer

+

Writes a LAYER statement that defines a routing blockage. When the compName argument is specified, writes a LAYER COMPONENT statement that defines a routing blockage that is associated with a component. Either a LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statement can be specified for each routing blockage in the BLOCKAGES statement. The LAYER and LAYER COMPONENT statements are optional and each can be used only once for each routing blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesLayer and/or defwBlockagesLayerComponent instead.

+

Syntax

+
+ int defwBlockageLayer(
const char* layerName,
const char* compName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the routing blockage.
+

+ + compName +

+
Optional argument that specifies a component with which to associate the blockage. Specify NULL to ignore this argument.
+

defwBlockagesLayer

+

Writes a LAYER statement that defines a routing blockage. Any one of the LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statements can be specified for each routing blockage in the BLOCKAGES statement. The LAYER statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesLayer(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the routing blockage.
+

defwBlockagesLayerComponent

+

Writes a LAYER COMPONENT statement that defines a routing blockage that is associated with a component. Any one of the LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statements can be specified for each routing blockage in the BLOCKAGES statement. The LAYER COMPONENT statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesLayerComponent(
const char* compName) +
+

Arguments

+

+ + compName +

+
Specifies a component with which to associate the blockage.
+

defwBlockageLayerExceptpgnet

+

Writes an EXCEPTPGNET statement for a routing blockage on the given layer, which specifies that the blockage only blocks signal net routing and does not block power or ground net routing. Either a COMPONENT, SLOTS, FILLS, PUSHDOWN, or EXCEPTPGNET statement can be specified for each routing blockage in the BLOCKAGES statement. The EXCEPTPGNET statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesLayerExceptpgnet instead.

+

Syntax

+
+ int defwBlockageLayerExceptpgnet(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the routing blockage.
+

defwBlockagesLayerExceptpgnet

+

Writes an EXCEPTPGNET statement for a routing blockage on the given layer, which specifies that the blockage only blocks signal net routing and does not block power or ground net routing. Any one of the COMPONENT, SLOTS, FILLS, PUSHDOWN, or EXCEPTPGNET statements can be specified for each routing blockage in the BLOCKAGES statement. The EXCEPTPGNET statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesLayerExceptpgnet(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the routing blockage.
+

defwBlockageLayerFills

+

Writes a FILLS statement, which defines a routing blockage on the specified layer where metal fills cannot be placed. Either a LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statement can be specified for each routing blockage in the BLOCKAGES statement. The FILLS statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesLayerFills instead.

+

Syntax

+
+ int defwBlockageLayerFills(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the blockage.
+

defwBlockagesLayerFills

+

Writes a FILLS statement, which defines a routing blockage where metal fills cannot be placed. Any one of the LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statements can be specified for each routing blockage in the BLOCKAGES statement. The FILLS statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesLayerFills() +
+

defwBlockageLayerPushdown

+

Writes a LAYER PUSHDOWN statement, which defines the routing blockage as being pushed down into the block from the top level of the design. Either a LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statement can be specified for each routing blockage in the BLOCKAGES statement. The LAYER PUSHDOWN statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesLayerPushdown instead.

+

Syntax

+
+ int defwBlockageLayerPushdown(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which the blockage lies.
+

defwBlockagesLayerPushdown

+

Writes a LAYER PUSHDOWN statement, which defines the routing blockage as being pushed down into the block from the top level of the design. Any one of the LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statements can be specified for each routing blockage in the BLOCKAGES statement. The LAYER PUSHDOWN statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesLayerPushdown(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which the blockage lies.
+

defwBlockageLayerSlots

+

Writes a SLOTS statement, which defines a routing blockage where slots cannot be placed. Either a LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statement can be specified for each routing blockage in the BLOCKAGES statement. The SLOTS statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockageLayerSlots(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the blockage.
+

defwBlockagePlacement

+

Writes a PLACEMENT statement, which defines a placement blockage. Either a PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statement can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacement instead.

+

Syntax

+
+ defwBlockagePlacement() +
+

defwBlockagesPlacement

+

Writes a PLACEMENT statement, which defines a placement blockage. Any one of the PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statements can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.

+

Syntax

+
+ defwBlockagesPlacement() +
+

defwBlockagePlacementComponent

+

Writes a PLACEMENT COMPONENT statement, which defines a placement blockage associated with a component. Either a PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statement can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT COMPONENT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacementComponent instead.

+

Syntax

+
+ int defwBlockagePlacementComponent(
const char* compName) +
+

Arguments

+

+ + compName +

+
Specifies the component with which to associate the blockage.
+

defwBlockagesPlacementComponent

+

Writes a PLACEMENT COMPONENT statement, which defines a placement blockage associated with a component. Any one of the PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statements can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT COMPONENT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesPlacementComponent(
const char* compName) +
+

Arguments

+

+ + compName +

+
Specifies the component with which to associate the blockage.
+

defwBlockagePlacementPartial

+

Writes a PLACEMENT PARTIAL statement, which specifies that the initial placement should not use more than maxDensity percentage of the blockage area for standard cells. Either a PLACEMENT, PLACEMENT PARTIAL, PLACEMENT COMPONENT, PLACEMENT SOFT, or PLACEMENT PUSHDOWN statement can be specified for each placement blockage. The PLACEMENT PARTIAL statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacementPartial instead.

+

Syntax

+
+ int defwBlockagePlacementPartial(
double maxDensity) +
+

Arguments

+

+ + maxDensity +

+
Specifies the maximum density value. The initial placement will not use more than maxDensity percentage of the blockage area for standard cells.
Value: 0.0-100.0
+

defwBlockagesPlacementPartial

+

Writes a PLACEMENT PARTIAL statement, which specifies that the initial placement should not use more than maxDensity percentage of the blockage area for standard cells. Any one of the PLACEMENT, PLACEMENT PARTIAL, PLACEMENT COMPONENT, PLACEMENT SOFT, or PLACEMENT PUSHDOWN statements can be specified for each placement blockage. The PLACEMENT PARTIAL statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesPlacementPartial(
double maxDensity) +
+

Arguments

+

+ + maxDensity +

+
Specifies the maximum density value. The initial placement will not use more than maxDensity percentage of the blockage area for standard cells.
Value: 0.0-100.0
+

defwBlockagePlacementPushdown

+

Writes a PLACEMENT PUSHDOWN statement, which defines the placement blockage as being pushed down into the block from the top level of the design. Either a PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statement can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT PUSHDOWN statement is optional and can be used only once for each placement blockage in a BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacementPushdown instead.

+

Syntax

+
+ int defwBlockagePlacementPushdown() +
+

defwBlockagesPlacementPushdown

+

Writes a PLACEMENT PUSHDOWN statement, which defines the placement blockage as being pushed down into the block from the top level of the design. Any one of the PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statement can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT PUSHDOWN statement is optional and can be used only once for each placement blockage in a BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesPlacementPushdown() +
+

defwBlockagePlacementSoft

+

Writes a PLACEMENT SOFT statement, which specifies that the initial placement should not use the blockage area, but later timing optimization phases can use the blockage area. Either a PLACEMENT, PLACEMENT PARTIAL, PLACEMENT COMPONENT, PLACEMENT SOFT, or PLACEMENT PUSHDOWN statement can be specified for each placement blockage. The PLACEMENT SOFT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacementSoft instead.

+

Syntax

+
+ int defwBlockagePlacementSoft() +
+

defwBlockagesPlacementSoft

+

Writes a PLACEMENT SOFT statement, which specifies that the initial placement should not use the blockage area, but later timing optimization phases can use the blockage area. Any one of the PLACEMENT, PLACEMENT PARTIAL, PLACEMENT COMPONENT, PLACEMENT SOFT, or PLACEMENT PUSHDOWN statements can be specified for each placement blockage. The PLACEMENT SOFT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesPlacementSoft() +
+

defwBlockagePolygon

+

Writes a POLYGON statement. Either a RECT or a POLYGON statement is required with a LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statement. The POLYGON statement can be used more than once for each routing blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesPolygon instead.

+

Syntax

+
+ defwBlockagePolygon(
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, to the y axis, or at a 45-degree angle.
+

defwBlockagesPolygon

+

Writes a POLYGON statement. Either a RECT or a POLYGON statement is required with a LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statement. The POLYGON statement can be used more than once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesPolygon(
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, to the y axis, or at a 45-degree angle.
+

defwBlockageRect

+

Writes a RECT statement. Either a RECT or a POLYGON statement is required with a LAYER, LAYER COMPONENT, FILLS, SLOTS, or LAYER PUSHDOWN statement. A RECT statement is also required with a PLACEMENT COMPONENT or PLACEMENT PUSHDOWN statement. The RECT statement can be used more than once for each blockage in the BLOCKAGES statement.

+

Note: This function will become obsolete in the next parser release. Use defwBlockagesRect instead.

+

Syntax

+
+ int defwBlockageRect(
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + xl yl xh yh +

+
Specifies the absolute coordinates of the blockage geometry.
+

defwBlockagesRect

+

Writes a RECT statement. Either a RECT or a POLYGON statement is required with a LAYER, LAYER COMPONENT, FILLS, SLOTS, or LAYER PUSHDOWN statement. A RECT statement is also required with a PLACEMENT COMPONENT or PLACEMENT PUSHDOWN statement. The RECT statement can be used more than once for each blockage in the BLOCKAGES statement.

+

Syntax

+
+ int defwBlockagesRect(
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + xl yl xh yh +

+
Specifies the absolute coordinates of the blockage geometry.
+

defwBlockagesLayerMask

+

Writes the blockage layer color mask.

+

Syntax

+
+ int defwBlockagesLayerMask(
int maskColor) +
+

Arguments

+

+ + maskColor +

+
Specifies the mask color.
+

defwBlockageSpacing

+

Writes a SPACING statement for the blockage. Either a SPACING or a DESIGNRULEWIDTH statement can be specified for a routing blockage. The SPACING statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.

+

Syntax

+
+ defwBlockageSpacing(
int minSpacing) +
+

Arguments

+

+ + minSpacing +

+
Specifies the minimum spacing between this blockage and any other routing shape.
+

Bus Bit Characters

+

The Bus Bit Characters routine writes a DEF BUSBITCHARS statement. The BUSBITCHARS statement is required and can be used only once in a DEF file. For syntax information about the DEF BUSBITCHARS statement, see "Bus Bit Characters" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

defwBusBitChars

+

Writes a BUSBITCHARS statement.

+

Syntax

+
+ int defwBusBitChars(
const char* busBitChars) +
+

Arguments

+

+ + busBitChars +

+
Specifies the pair of characters used to specify bus bits when DEF names are mapped to or from other databases. The characters must be enclosed in double quotation marks.
If one of the bus bit characters appears in a DEF name as a regular character, you must use a backslash ( \) before the character to prevent the DEF reader from interpreting the character as a bus bit delimiter.
+

Components

+

Components routines write a DEF COMPONENTS section. The COMPONENTS section is optional and can be used only once in a DEF file. For syntax information about the DEF COMPONENTS section, see "Components" in the LEF/DEF Language Reference.

+

The COMPONENTS section must start and end with the defwStartComponents and defwEndComponents routines. All components must be defined between these routines.

+

If the DEF file contains a REGIONS statement, the COMPONENTS statement must follow it. For more information about the DEF REGIONS routines, see "Regions".

+

For examples of the routines described here, see "Components Example".

+

Note: To write a PROPERTY statement for the component, you must use one of the property routines between the routines described here. For more information, see "Property Statements".

+

All routines return 0 if successful.

+

defwStartComponents

+

Starts the COMPONENTS section.

+

Syntax

+
+ int defwStartComponents(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of components defined in the COMPONENTS section.
+

defwEndComponents

+

Ends the COMPONENTS section.

+

If the count specified in defwStartComponents is not the same as the actual number of defwComponent routines used, this routine returns DEFW_BAD_DATA.

+

Syntax

+
+ int defwEndComponents(void) +
+

defwComponent

+

Writes a set of statements that define one component. This routine is required and can be used more than once in the COMPONENTS statement.

+

If you specify 0 for all optional arguments except weight, they are ignored. For weight, you must specify -1.0.

+

Syntax

+
+ int defwComponent(
const char* name,
const char* master,
const char* eeq,
const char* source,
const char* status,
int statusX,
int statusY,
int statusOrient,
double weight,
const char* region,) +
+

Arguments

+

+ + eeq +

+
Optional argument that specifies that the component being defined should be electrically equivalent to eeq (a previously defined component). Specify NULL to ignore this argument.
+

+ + master +

+
Specifies the name of a model defined in the library.
+

+ + name +

+
Specifies the component name, which is an instance of master.
+

+ + region +

+
Optional argument that specifies the name of a previously defined region in which the component must lie. Specify NULL to ignore this argument.
+

+ + status +

+
Optional argument that specifies the component state. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

COVER

+
+

Specifies that the component has a location and is a part of the cover macro. It cannot be moved by automatic tools or interactive commands.

+
+

     

+
+

FIXED

+
+

Specifies that the component has a location and cannot be moved by automatic tools, but can me moved using interactive commands.

+
+

     

+
+

PLACED

+
+

Specifies that the component has a location, but can be moved using automatic layout tools.

+
+

   

+
+

UNPLACED

+
+

Specifies that the component does not have a location.

+
+

+ + statusOrient +

+
Optional argument that specifies the orientation of the component. Specify -1 to ignore this argument.
Value: 0 to 7. For more information, see "Orientation Codes".
+

+ + statusX statusY +

+
Optional arguments that specify the location of the component. Specify 0 to ignore these arguments.
+

+ + source +

+
Optional argument that specifies the source of the component. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

DIST

+
+

Component is a physical component (that is, it only connects to power or ground nets), such as filler cells, well-taps, and decoupling caps.

+
+

   

+
+

NETLIST

+
+

Component is specified in the original netlist. This is the default value, and is normally not written out in the DEF file.

+
+

   

+
+

TIMING

+
+

Component is a logical rather than physical change to the netlist, and is typically used as a buffer for a clock-tree, or to improve timing on long nets.

+
+

    

+
+

USER

+
+

Component is generated by the user for some user-defined reason.

+
+

+ + weight +

+
Optional argument that specifies the weight of the component, which determines if automatic placement attempts to keep the component near the specified location. weight is only meaningful when the component is placed. All non-zero weights have the same effect during automatic placement. Specify 0 to ignore this argument.
+

defwComponentStr

+

Also writes a set of statements that define one component. This routine is the same as the defwComponent routine, with the exception of the foreignOrients argument, which takes a string instead of an integer.This routine is required and can be used more than once in the COMPONENTS statement.

+

If you specify 0 for all optional arguments except weight, they are ignored. For weight, you must specify -1.0.

+

Syntax

+
+ int defwComponent(
const char* name,
const char* master,
const char* eeq,
const char* source,
const char* status,
int statusX,
int statusY,
const char* statusOrient,
double weight,
const char* region,) +
+

Arguments

+

+ + eeq +

+
Optional argument that specifies that the component being defined should be electrically equivalent to eeq (a previously defined component). Specify NULL to ignore this argument.
+

+ + master +

+
Specifies the name of a model defined in the library.
+

+ + name +

+
Specifies the component name, which is an instance of master.
+

+ + region +

+
Optional argument that specifies the name of a previously defined region in which the component must lie. Specify NULL to ignore this argument.
+

+ + status +

+
Optional argument that specifies the component state. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

COVER

+
+

Specifies that the component has a location and is a part of the cover macro. It cannot be moved by automatic tools or interactive commands.

+
+

     

+
+

FIXED

+
+

Specifies that the component has a location and cannot be moved by automatic tools, but can me moved using interactive commands.

+
+

     

+
+

PLACED

+
+

Specifies that the component has a location, but can be moved using automatic layout tools.

+
+

   

+
+

UNPLACED

+
+

Specifies that the component does not have a location.

+
+

+ + statusOrient +

+
Optional argument that specifies the orientation of the component. Specify NULL to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+

+ + statusX statusY +

+
Optional arguments that specify the location of the component. Specify 0 to ignore these arguments.
+

+ + source +

+
Optional argument that specifies the source of the component. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

DIST

+
+

Component is a physical component (that is, it only connects to power or ground nets), such as filler cells, well-taps, and decoupling caps.

+
+

   

+
+

NETLIST

+
+

Component is specified in the original netlist. This is the default value, and is normally not written out in the DEF file.

+
+

   

+
+

TIMING

+
+

Component is a logical rather than physical change to the netlist, and is typically used as a buffer for a clock-tree, or to improve timing on long nets.

+
+

    

+
+

USER

+
+

Component is generated by the user for some user-defined reason.

+
+

+ + weight +

+
Optional argument that specifies the weight of the component, which determines if automatic placement attempts to keep the component near the specified location. weight is only meaningful when the component is placed. All non-zero weights have the same effect during automatic placement. Specify 0 to ignore this argument.
+

defwComponentHalo

+

Writes a HALO statement for a component. The HALO statement creates a placement blockage around the component. The HALO statement is optional and can be used only once for each component in the COMPONENT statement. If you call this routine, you cannot call defwComponentHaloSoft.

+

Syntax

+
+ defwComponentHalo(
int left,
int bottom,
int right,
int top) +
+

Arguments

+

+ + left bottom right top +

+
Specifies the amount the halo extends from the left, bottom, right, and top edges of the LEF macro.
+

defwComponentHaloSoft

+

Writes a HALO SOFT statement. This routine is similar to defwComponentHalo, except that it also writes the SOFT option. The HALO SOFT statement is optional and can be used only once for each component. If you call this routine, you cannot call defwComponentHalo.

+

Syntax

+
+ int defwComponentHaloSoft(
int left,
int bottom,
int right,
int top) +
+

Arguments

+

+ + left bottom right top +

+
Specifies the amount the halo extends from the left, bottom, right, and top edges of the LEF macro.
+

defwComponentRouteHalo

+

Writes a ROUTEHALO statement. The ROUTEHALO statement is optional and can be used only once for each component.

+

Syntax

+
+ int defwComponentRouteHalo(
int haloDist,
const char* minLayer,
const char* maxLayer) +
+

Arguments

+

+ + haloDist +

+
Specifies the halo distance, as an integer in DEF database units.
+

+ + minLayer +

+
Specifies the minimum layer. The routing halo exists for the routing layers between minLayer and maxLayer. minLayer must be a lower routing layer than maxLayer. minLayer must be a string that matches a LEF routing layer name.
+

+ + maxLayer +

+
Specifies the maximum layer. The routing halo exists for the routing layers between minLayer and maxLayer. maxLayer must be a string that matches a LEF routing layer name.
+

Components Example

+

The following example shows a callback routine with the type defwComponentCbkType. This example only shows the usage of some functions related to component.

+
+ int componentCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char** foreigns;
int *foreignX, *foreignY, *foreignOrient;
+
+
+ // Check if the type is correct
if (type != defwComponentCbkType) {
printf("Type is not defwComponentCbkType, terminate
        writing.\n");
return 1;
}
foreigns = (const char**)malloc(sizeof(char*)*1);
foreignX = (int*)malloc(sizeof(int)*1);
foreignY = (int*)malloc(sizeof(int)*1);
foreignOrient = (int*)malloc(sizeof(int)*1);
res = defwStartComponents(2);
CHECK_RES(res);
res = defwComponent("Z38A01", "DFF3", 0, NULL, NULL, NULL,
                    NULL, NULL, 0, NULL, NULL, NULL, NULL,
                    "PLACED", 18592, 5400, 6, 0, NULL, 0, 0, 0,
                    0);
CHECK_RES(res);
foreigns[0] = strdup("gds2name");
foreignX[0] = -500;
foreignY[0] = -500;
foreignOrient[0] = 3;
res = defwComponent("cell3", "CHM6A", 0, NULL, NULL, NULL,
                    NULL, "TIMING", 1, foreigns, foreignX,
                    foreignY, foreignOrient, "PLACED", 240, 10,
                    0, 0, "region1", 0, 0, 0, 0);
CHECK_RES(res);
res = defwStringProperty("cc", "This is the copy list");
CHECK_RES(res);
res = defwIntProperty("index", 9);
CHECK_RES(res);
res = defwRealProperty("size", 7.8);
CHECK_RES(res);
res = defwEndComponents();
CHECK_RES(res);
free((char*)foreigns[0]);
free((char*)foreigns);
free((char*)foreignX);
free((char*)foreignY);
free((char*)foreignOrient);
return 0;} +
+

Design Name

+

The Design routine writes a DEF DESIGN statement. The DESIGN statement is required and can be used only once in a DEF file. For syntax information about the DESIGN statement, see "Design" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

defwDesignName

+

Writes a DESIGN statement.

+

Syntax

+
+ int defwDesignName(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies a name for the design.
+

Die Area

+

Die Area routines write a DEF DIEAREA statement. The DIEAREA statement is optional and can be used only once in a DEF file. For syntax information about the DEF DIEAREA statement, see "Die Area" in the LEF/DEF Language Reference.

+

If the DEF file contains a PROPERTYDEFINITIONS statement, the DIEAREA statement must follow it. For more information about the DEF PROPERTYDEFINITIONS statement, see "Property Definitions".

+

This routine returns 0 if successful.

+

defwDieArea

+

Writes a DIEAREA statement.

+

Syntax

+
+ int defwDieArea (
int xl,
int yl,
int xh,
int yh ) +
+

Arguments

+

+ + xl, yl, xh, yh +

+
Specifies the points of two corners of the bounding rectangle for the design. Geometric shapes (such as blockages, pins, and special net routing) can be outside of the die area, to allow proper modeling of pushed down routing from top-level designs into sub blocks. However, routing tracks should still be inside the die area.
+

defwDieAreaList

+

Writes a DIEAREA statement that includes more than two points.

+

Syntax

+
+ defwDieAreaList(
int num_points,
int* xl,
int*yh) +
+

Arguments

+

+ + num_points +

+
Specifies the number of points specified.
+

+ + xl yh +

+
Specifies the points of a polygon that forms the die area. Geometric shapes (such as blockages, pins, and special net routing) can be outside of the die area, to allow proper modeling of pushed down routing from top-level designs into sub blocks. However, routing tracks should still be inside the die area.
+

Die Area Example

+

The following example shows a callback routine with the type defwDieAreaCbkType.

+
+ int dieareaCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwDieAreaCbkType) {
printf("Type is not defwDieAreaCbkType, terminate
        writing.\n");
return 1;
}
res = defwDieArea(-190000, -120000, 190000, 70000);
CHECK_RES(res);
return 0;} +
+

Divider Character

+

The Divider Character routine writes a DEF DIVIDERCHAR statement. The DIVIDERCHAR statement is required and can be used only once in a DEF file. For syntax information about the DIVIDERCHAR statement, see "Divider Character" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

defwDividerChar

+

Writes a DIVIDERCHAR statement.

+

Syntax

+
+ int defwDividerChar(
const char* dividerChar) +
+

Arguments

+

+ + dividerChar +

+
Specifies the character used to express hierarchy when DEF names are mapped to or from other databases. The character must be enclosed in double quotation marks.
If the divider character appears in a DEF name as a regular character, you must use a backslash (\) before the character to prevent the DEF reader from interpreting the character as a hierarchy delimiter.
+

Extensions

+

The Extension routines write a series of statements that define the EXTENSIONS statement in the DEF file. The EXTENSIONS statement is optional and can be used only once in a DEF file. For syntax information about the EXTENSIONS statement, see "Extensions" in the LEF/DEF Language Reference.

+

You must use the defwStartBeginext and defwEndBeginext routines to create an EXTENSIONS statement. You must define all extensions between these routines.

+

For examples of the routines described here, see "Extensions Example".

+

All routines return 0 if successful.

+

defwStartBeginext

+

Starts the EXTENSIONS statement.

+

Syntax

+
+ int defwStartBeginext(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the extension name.
+

defwEndBeginext

+

Ends the BEGINEXT statement.

+

Syntax

+
+ int defwEndBeginext() +
+

defwBeginextCreator

+

Writes a CREATOR statement. The CREATOR statement is optional and can be used only once in an EXTENSIONS statement.

+

Syntax

+
+ int defwBeginextCreator(
const char* creatorName) +
+

Arguments

+

+ + creatorName +

+
Specifies a string value that defines the creator value.
+

defwBeginextDate

+

Writes a DATE statement that specifies the current system time and date. The DATE statement is optional and can be used only once in an EXTENSIONS statement.

+

Syntax

+
+ int defwBeginextDate() +
+

defwBeginextRevision

+

Writes a REVISION statement. The REVISION statement is optional and can be used only once in an EXTENSIONS statement.

+

Syntax

+
+ int defwBeginextRevision(
int vers1,
int vers2) +
+

Arguments

+

+ + vers1, vers2 +

+
Specifies the values used for the revision number string.
+

defwBeginextSyntax

+

Adds customized syntax to the DEF file. This routine is optional and can be used more than once in an EXTENSIONS statement.

+

Syntax

+
+ int lefwBeginextSyntax(
const char* title,
const char* string) +
+

Arguments

+

+ + title, string +

+
Specify any values you need.
+

Extensions Example

+

The following example shows a callback routine with the type defwExtCbkType. This example only shows the usage of some functions related to extensions.

+
+ int extensionCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwExtCbkType) {
printf("Type is not defwExtCbkType, terminate
        writing.\n");
return 1;
}
res = defwStartBeginext("tag");
CHECK_RES(res);
res = defwBeginextCreator("CADENCE");
CHECK_RES(res);
res = defwBeginextDate();
CHECK_RES(res);
res = defwBeginextSyntax("OTTER", "furry");
CHECK_RES(res);
res = defwStringProperty("arrg", "later");
CHECK_RES(res);
res = defwBeginextSyntax("SEAL", "cousin to WALRUS");
CHECK_RES(res);
res = defwEndBeginext();
CHECK_RES(res);
return 0;} +
+

Fills

+

Fills routines write a DEF FILLS statement. The FILLS statement is optional and can be used only once in a DEF file. For syntax information about the DEF FILLS statement, see "Fills" in the LEF/DEF Language Reference.

+

The DEF FILLS statement must start and end with the defwStartFills and defwEndFills routines. All fills must be defined between these routines.

+

All routines return 0 if successful.

+

defwStartFills

+

Starts a FILLS statement.

+

Syntax

+
+ int defwStartFills(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of fills defined in the FILLS statement.
+

defwEndFills

+

Ends the FILLS statement.

+

Syntax

+
+ int defwEndFills() +
+

defwFillLayer

+

Writes a LAYER statement. The LAYER statement is required for each fill and can be used more than once in a FILLS statement.

+

Syntax

+
+ int defwFillLayer(
const char* layerName) +
+

Arguments

+

+ + layerName Specifies the layer on which to create the fill. +

+

defwFillLayerOPC

+

Writes an OPC keyword for a FILLS LAYER statement, which specifies that FILL shapes require OPC correction during mask generation. defwFillLayer must be called before this routine. This routine is optional and can be called only once after the defwFillLayer or defwFillVia routine.

+

Syntax

+
+ int defwFillLayerOPC() +
+

defwFillPoints

+

Specifies the points for a FILLS VIA statement. This routine is required after defwFillVia and can be called more than once.

+

Syntax

+
+ int defwFillPoints(
int num_points,
double* xl,
double* yl) +
+

Arguments

+

+ + num_points +

+
Specifies the number of points provided.
+

+ + x1 y1 +

+
Specify the placement locations (x y points) for the via.
+

defwFillPolygon

+

Writes a POLYGON statement. Either a POLYGON or a RECT statement is required with a LAYER statement. The POLYGON statement is required and can be used more than once for each fill in the FILLS statement.

+

Syntax

+
+ defwFillPolygon(
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+

defwFillRect

+

Writes a RECT statement. Either a POLYGON or a RECT statement is required with a LAYER statement. The RECT statement is required and can be used more than once for each fill in the FILLS statement.

+

Syntax

+
+ int defwFillRect(
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + xl, yl, xh, yh +

+
Specifies the coordinates of the fill.
+

defwFillVia

+

Writes a FILLS VIA statement. The FILLS VIA statement is optional and can be used more than once. Call defwFillPoints after this routine.

+

Syntax

+
+ int defwFillVia(
const char* viaName) +
+

Arguments

+

+ + viaName +

+
The name of the via, which must be previously defined in the DEF VIA or LEF VIA section.
+

defwFillViaOPC

+

Writes the OPC keyword for a FILLS VIA statement, which specifies that FILL shapes require OPC correction during mask generation. This routine is optional and can only be called after defwFillVia.

+

Syntax

+
+ int defwFillViaOPC() +
+

GCell Grid

+

The Gcell Grid routine writes a DEF GCELLGRID statement. The GCELLGRID statement is optional and can be used only once in a DEF file. For syntax information about the DEF GCELLGRID statement, see GCell Grid in the LEF/DEF Language Reference.

+

If the DEF file contains a TRACKS statement, the GCELLGRID statement must follow it. For more information about the DEF TRACKS statement, see "Tracks".

+

This routine returns 0 if successful.

+

defwGcellGrid

+

Writes a GCELLGRID statement.

+

Syntax

+
+ int defwGcellGrid(
const char* master,
int doStart,
int doCount,
int doStep) +
+

Arguments

+

+ + doCount +

+
Specifies the number of columns or rows in the grid.
+

+ + doStart +

+
Specifies the starting location of the grid (that is, the first column or row).
+

+ + doStep +

+
Specifies the step spacing between the grid units.
+

+ + master +

+
Specifies the direction of the tracks for the global router grid that overlays the array.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

   

+
+

X

+
+

Specifies a vertical grid.

+
+

   

+
+

Y

+
+

Specifies a horizontal grid.

+
+

Gcell Grid Example

+

The following example shows a callback routine with the type defwGcellGridCbkType.

+
+ int gcellgridCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwGcellGridCbkType) {
printf("Type is not defwGcellGridCbkType, terminate
        writing.\n");
return 1;
}
res = defwGcellGrid("X", 0, 100, 600);
CHECK_RES(res);
return 0;} +
+

Groups

+

The Groups routines write a DEF GROUPS statement. The GROUPS statement is optional and can be used only once in a DEF file. For syntax information about the DEF GROUPS statement, see Groups in the LEF/DEF Language Reference.

+

You must begin and end a DEF GROUPS statement with the defwStartGroups and defwEndGroups routines. You must define all groups between these routines.

+

For examples of the routines described here, see "Groups Example".

+

Note: To write a PROPERTY statement for the component, you must use one of the property routines immediately following the defwGroup* routines that define the group. For more information, see "Property Statements".

+

All routines return 0 if successful.

+

defwStartGroups

+

Starts the GROUPS statement.

+

Syntax

+
+ int defwStartGroups(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of groups defined in the GROUPS statement.
+

defwEndGroups

+

Ends the GROUPS statement.

+

Syntax

+
+ int defwEndGroups() +
+

defwGroup

+

Writes a series of statements that define the specified group. This routine is required and can be used more than once in a GROUPS statement.

+

Syntax

+
+ int defwGroup(
const char* groupName,
int numExpr,
const char** groupExpr) +
+

Arguments

+

+ + groupExpr +

+
Specifies a component name, a list of component names, or a regular expression for a set of components.
+

+ + groupName +

+
Specifies the name for a group of components.
+

+ + numExpr +

+
Specifies the number of components in the group.
+

defwGroupRegion

+

Writes a REGION statement for the group defined. This statement is optional and can be used only once per group name.

+

Syntax

+
+ int defwGroupRegion(
int xl,
int yl,
int xh,
int yh,
const char* regionName) +
+

Arguments

+

+ + regionName +

+
Specifies the name of a previously defined region in which the group must lie.
+

+ + xl xh yl yh +

+
Specifies the coordinates of a rectangular region in which the group must lie. Specify the coordinates or regionName; do not specify both.
+

Groups Example

+

The following example shows a callback routine with the type defwGroupCbkType.

+
+ int dividerCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char **groupExpr;
// Check if the type is correct
if (type != defwGroupCbkType) {
printf("Type is not defwGroupCbkType, terminate
        writing.\n");
return 1;
}
groupExpr = (const char**)malloc(sizeof(char*)*2);
res = defwStartGroups(2);
CHECK_RES(res);
groupExpr[0] = strdup("cell2");
groupExpr[1] = strdup("cell3");
res = defwGroup("group1", 2, groupExpr);
CHECK_RES(res);
free((char*)groupExpr[0]);
free((char*)groupExpr[1]);
res = defwGroupRegion(0, 0, 0, 0, "region1");
CHECK_RES(res);
res = defwStringProperty("ggrp", "xx");
CHECK_RES(res);
res = defwIntProperty("side", 2);
CHECK_RES(res);
res = defwRealProperty("maxarea", 5.6);
CHECK_RES(res);
groupExpr[0] = strdup("cell1");
res = defwGroup("group2", 1, groupExpr);
CHECK_RES(res);
free((char*)groupExpr[0]);
res = defwGroupRegion(0, 10, 1000, 1010, NULL);
CHECK_RES(res);
res = defwGroupSoft("MAXHALFPERIMETER", 4000, "MAXX", 10000,
    NULL, NULL);
CHECK_RES(res);
res = defwEndGroups();
CHECK_RES(res);
free((char*)groupExpr);
// Write a new line
res = defwNewLine();
CHECK_RES(res);
return 0;} +
+

History

+

The History routine writes a DEF HISTORY statement. The HISTORY statement is optional and can be used more than once in a DEF file. For syntax information about the DEF HISTORY statement, see History in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

defwHistory

+

Writes a HISTORY statement.

+

Syntax

+
+ int defwHistory(
const char* string) +
+

Arguments

+

+ + string +

+
Lists a historical record about the design. Each line indicates one historical record. Any text excluding a semicolon (;) can be included. Linefeed and Return do not terminate the statement.
+

History Example

+

The following example shows a callback routine with the type defwHistoryCbkType.

+
+ int historyCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwHistoryCbkType) {
printf("Type is not defwHistoryCbkType, terminate
        writing.\n");
return 1;
}
res = defwHistory("DEF version 5.3");
CHECK_RES(res);
return 0;} +
+

Nets

+

Nets routines write a DEF NETS statement. The NETS statement is optional and can be used only once in a DEF file. For syntax information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.

+

A NETS statement must start and end with the defwStartNets and defwEndNets routines. All nets must be defined between these routines. Each individual net must start and end with either defwNet or defwNetMustjoinConnection, and defwNetEndOneNet.

+

For examples of the routines described here, see "Nets Example".

+

In addition to the routines in this section, you can also include routines that form a regularWiring statement, a SUBNET statement, and a PROPERTY statement. For information about these routines, see "Regular Wiring" , "Subnet" , and "Property Statements".

+

All routines return 0 if successful.

+

defwStartNets

+

Starts a NETS statement. A NET statement must start and end with defwStartNets and defwEndNets.

+

Syntax

+
+ int defwStartNets(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of nets defined in the NETS statement.
+

defwEndNets

+

Ends the NETS statement. A NET statement must start and end with defwStartNets and defwEndNets.

+

Syntax

+
+ int defwEndNets() +
+

defwNet

+

Starts a net description in the NETS statement. Each net description must start with either defwNet or defwNetMustJoinConnection, and end with defwNetEndOneNet.

+

If you specify this routine, you can optionally specify the following routine:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwNetConnection
+
+

Syntax

+
+ int defwNet(
const char* netName) +
+

Arguments

+

+ + netName +

+
Specifies the name of the net.
+

defwNetMustjoinConnection

+

Writes a MUSTJOIN statement in the NETS statement. Each net description must start with either defwNet or defwNetMustJoinConnection, and end with defwNetEndOneNet.

+

Syntax

+
+ int defwNetMustjoinConnection(
const char* compName,
const char* pinName) +
+

Arguments

+

+ + compName, pinName +

+
Identifies the net as a mustjoin by specifying one of its pins, using a component name and pin name.
+

defwNetEndOneNet

+

Ends a net description in the NETS statement. Each net description must start with either defwNet or defwNetMustJoinConnection, and end with defwNetEndOneNet.

+

Syntax

+
+ int defwNetEndOneNet() +
+

defwNetConnection

+

Defines the net specified in defwNet. This routine can be used more than once for each net in a NETS statement.

+

Syntax

+
+ int defwNetConnection(
const char* compName,
const char* pinName,
int synthesized) +
+

Arguments

+

+ + compName +

+
Specifies the name of a regular component pin on the net. If you omit this value, the DEF writer writes the PIN statement.
+

+ + pinName +

+
Specifies the name of an I/O pin on the net.
+

+ + synthesized +

+
Optional argument that marks the pin as part of a synthesized scan chain.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

    

+
+

0

+
+

Argument is ignored.

+
+

   

+
+

1

+
+

Writes a SYNTHESIZED statement.

+
+

defwNetEstCap

+

Writes an ESTCAP statement. The ESTCAP statement is optional and can be used only once for each net in the NETS statement.

+

Syntax

+
+ int defwNetEstCap(
double wireCap) +
+

Arguments

+

+ + wireCap +

+
Specifies the estimated wire capacitance for the net. ESTCAP can be loaded with simulation data to generate net constraints for timing-driven layout.
+

defwNetFixedBump

+

Writes a FIXEDBUMP statement that indicates a bump cannot be assigned to a different pin. The FIXEDBUMP statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetFixedBump() +
+

defwNetFrequency

+

Writes a FREQUENCY statement. The FREQUENCY statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetFrequency(
double frequency) +
+

Arguments

+

+ + frequency +

+
Specifies the frequency of the net, in hertz. The frequency value is used by the router to choose the correct number of via cuts required for a given net, and by validation tools to verify that the AC current density rules are met.
+

defwNetNondefaultRule

+

Writes a NONDEFAULTRULE statement. The NONDEFAULTRULE statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetNondefaultRule(
const char* ruleName) +
+

Arguments

+

+ + ruleName +

+
Specifies that the net and wiring are created according to the specified nondefault rule defined in LEF.
+

defwNetOriginal

+

Writes an ORIGINAL statement. The ORIGINAL statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetOriginal(
const char* netName) +
+

Arguments

+

+ + netName +

+
Specifies the name of the original net partitioned to create multiple nets, including the net being defined.
+

defwNetPattern

+

Writes a PATTERN statement. The PATTERN statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetPattern(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the routing pattern used for the net.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

BALANCED

+
+

Used to minimize skews in timing delays for clock nets.

+
+

    

+
+

STEINER

+
+

Used to minimize net length.

+
+

    

+
+

TRUNK

+
+

Used to minimize delay for global nets.

+
+

    

+
+

WIREDLOGIC

+
+

Used in ECL designs to connect output and mustjoin pins before routing to the remaining pins.

+
+

defwNetSource

+

Writes a SOURCE statement. The SOURCE statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetSource(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the source of the net.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

DIST

+
+

Net is the result of adding physical components (that is, components that only connect to power or ground nets), such as filler cells, well-taps, tie-high and tie-low cells, and decoupling caps.

+
+

    

+
+

NETLIST

+
+

Net is defined in the original netlist. This is the default value, and is not normally written out in the DEF file.

+
+

     

+
+

TEST

+
+

Net is part of a scanchain.

+
+

   

+
+

TIMING

+
+

Net represents a logical rather than physical change to netlist, and is used typically as a buffer for a clock-tree, or to improve timing on long nets.

+
+

   

+
+

USER

+
+

Net is user defined.

+
+

defwNetUse

+

Writes a USE statement. The USE statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetUse(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies how the net is used.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

ANALOG

+
+

Used as a analog signal net.

+
+

    

+
+

CLOCK

+
+

Used as a clock net.

+
+

     

+
+

GROUND

+
+

Used as a ground net.

+
+

    

+
+

POWER

+
+

Used as a power net.

+
+

    

+
+

RESET

+
+

Used as a reset net.

+
+

    

+
+

SCAN

+
+

Used as a scan net.

+
+

    

+
+

SIGNAL

+
+

Used as digital signal net.

+
+

    

+
+

TIEOFF

+
+

Used as a tie-high or tie-low net.

+
+

defwNetVpin

+

Writes a VPIN statement. The VPIN statement is optional and can be used more than once for a net.

+

Syntax

+
+ int defwNetVpin(
const char* vpinName,
const char* layerName,
int layerXl,
int layerYl,
int layerXh,
int layerYh,
const char* status,
int statusX,
int statusY,
int orient) +
+

Arguments

+

+ + layerName +

+
Optional argument that specifies the layer on which the virtual pin lies. Specify NULL to ignore this argument.
+

+ + layerXl layerYl layerXh layerYh +

+
Specifies the physical geometry of the virtual pin.
+

+ + orient +

+
Optional argument that specifies the orientation of the virtual pin. Specify -1 to ignore this argument.
Value: 0 to 7. For more information, see "Orientation Codes".
+

+ + status +

+
Optional argument that specifies the placement status of the virtual pin. Specify NULL to ignore this argument.
Value: specify one of the following:
+ + + + + + + + + + + + + + + + +
+
+

    

+
+

COVER

+
+

Specifies that the pin has a location and is a part of the cover macro. It cannot be moved by automatic tools or interactive commands.

+
+

    

+
+

FIXED

+
+

Specifies that the pin has a location and cannot be moved by automatic tools but can be moved by interactive commands.

+
+

    

+
+

PLACED

+
+

Specifies that the pin has a location, but can be moved during automatic layout.

+
+

+ + statusX statusY +

+
Optional arguments that specify the placement location of the virtual pin. If you specify status, you must specify these arguments. Specify 0 to ignore these arguments.
+

+ + vpinName +

+
Specifies the name of the virtual pin to define.
+

defwNetVpinStr

+

Also writes a VPIN statement. This routine is the same as the defwNetVpin routine, with the exception of the orient argument, which takes a string instead of an integer. The VPIN statement is optional and can be used more than once for a net.

+

Syntax

+
+ int defwNetVpin(
const char* vpinName,
const char* layerName,
int layerXl,
int layerYl,
int layerXh,
int layerYh,
const char* status,
int statusX,
int statusY,
const char* orient) +
+

Arguments

+

+ + layerName +

+
Optional argument that specifies the layer on which the virtual pin lies. Specify NULL to ignore this argument.
+

+ + layerXl layerYl layerXh layerYh +

+
Specifies the physical geometry of the virtual pin.
+

+ + orient +

+
Optional argument that specifies the orientation of the virtual pin. Specify NULL to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+

+ + status +

+
Optional argument that specifies the placement status of the virtual pin. Specify NULL to ignore this argument.
Value: specify one of the following:
+ + + + + + + + + + + + + + + + +
+
+

    

+
+

COVER

+
+

Specifies that the pin has a location and is a part of the cover macro. It cannot be moved by automatic tools or interactive commands.

+
+

    

+
+

FIXED

+
+

Specifies that the pin has a location and cannot be moved by automatic tools but can be moved by interactive commands.

+
+

    

+
+

PLACED

+
+

Specifies that the pin has a location, but can be moved during automatic layout.

+
+

+ + statusX statusY +

+
Optional arguments that specify the placement location of the virtual pin. If you specify status, you must specify these arguments. Specify 0 to ignore these arguments.
+

+ + vpinName +

+
Specifies the name of the virtual pin to define.
+

defwNetWeight

+

Writes a WEIGHT statement. The WEIGHT statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetWeight(
double weight) +
+

Arguments

+

+ + weight +

+
Specifies the weight of the net. Automatic layout tools attempt to shorten the lengths of nets with high weights. A value of 0 indicates that the net length for that net can be ignored. A value of 1 specifies that the net should be treated normally. A larger weight specifies that the tool should try harder to minimize the net length of that net.
For normal use, timing constraints are generally a better method to use for controlling net length than net weights. For the best results, you should typically limit the maximum weight to 10, and not add weights to more than 3 percent of the nets.
+

defwNetXtalk

+

Writes a XTALK statement. The XTALK statement is optional and can be used only once for a net.

+

Syntax

+
+ int defwNetXtalk(
int num) +
+

Arguments

+

+ + num +

+
Specifies the crosstalk class number for the net. If you specify the default value (0), the XTALK statement will not be written to the DEF file.
Value: 0 to 200
+

Nets Example

+

The following example shows a callback routine with the type defwNetCbkType. This example only shows the usage of some functions related to net.

+
+ int netCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char **coorX, **coorY;
const char **coorValue;
// Check if the type is correct
if (type != defwNetCbkType) {
printf("Type is not defwNetCbkType, terminate
        writing.\n");
return 1;
}
res = defwStartNets(3);
CHECK_RES(res);
coorX = (const char**)malloc(sizeof(char*)*5);
coorY = (const char**)malloc(sizeof(char*)*5);
coorValue = (const char**)malloc(sizeof(char*)*5);
res = defwNet("my_net");
CHECK_RES(res);
res = defwNetConnection("I1", "A", 0);
CHECK_RES(res);
res = defwNetConnection("BUF", "Z", 0);
CHECK_RES(res);
res = defwNetNondefaultRule("RULE1");
CHECK_RES(res);
res = defwNetShieldnet("VSS");
CHECK_RES(res);
res = defwNetPathStart("ROUTED");
CHECK_RES(res);
...
= defwNetNoshieldStart("M2");
CHECK_RES(res);
coorX[0] = strdup("14100");
coorY[0] = strdup("341440");
coorX[1] = strdup("14000");
coorY[1] = strdup("*");
res = defwNetNoshieldPoint(2, coorX, coorY);
CHECK_RES(res);
res = defwNetNoshieldEnd();
CHECK_RES(res);
res = defwNetEndOneNet();
CHECK_RES(res);
res = defwNet("MUSTJOIN");
CHECK_RES(res);
res = defwNetConnection("cell4", "PA1", 0);
CHECK_RES(res);
res = defwNetEndOneNet();
CHECK_RES(res);
res = defwNet("XX100");
CHECK_RES(res);
res = defwNetConnection("Z38A05", "G", 0);
CHECK_RES(res);
res = defwNetConnection("Z38A03", "G", 0);
CHECK_RES(res);
res = defwNetConnection("Z38A01", "G", 0);
CHECK_RES(res);
res = defwNetVpin("V_SUB3_XX100", NULL, -333, -333, 333,
333, "PLACED", 189560, 27300, 0);
CHECK_RES(res);
res = defwNetSubnetStart("SUB1_XX100");
CHECK_RES(res);
...
// An example for Regular Wiring can be found in the
// Regular Wiring section.

res = defwNetPathEnd();
CHECK_RES(res);
res = defwNetNoshieldStart("M2");
CHECK_RES(res);
coorX[0] = strdup("14100");
coorY[0] = strdup("341440");
coorX[1] = strdup("14000");
coorY[1] = strdup("*");
res = defwNetNoshieldPoint(2, coorX, coorY);
CHECK_RES(res);
res = defwNetNoshieldEnd();
CHECK_RES(res);
res = defwNetEndOneNet();
CHECK_RES(res);

res = defwNet("MUSTJOIN");
CHECK_RES(res);
res = defwNetConnection("cell4", "PA1", 0);
CHECK_RES(res);
res = defwNetEndOneNet();
CHECK_RES(res);

res = defwNet("XX100");
CHECK_RES(res);
res = defwNetConnection("Z38A05", "G", 0);
CHECK_RES(res);
res = defwNetConnection("Z38A03", "G", 0);
CHECK_RES(res);
res = defwNetConnection("Z38A01", "G", 0);
CHECK_RES(res);
res = defwNetVpin("V_SUB3_XX100", NULL, -333, -333, 333,
333, "PLACED", 189560, 27300, 0);
CHECK_RES(res);
res = defwNetSubnetStart("SUB1_XX100");
CHECK_RES(res);
...
// An example for Subnet can be found in the Subnet section

CHECK_RES(res);
res = defwNetSubnetEnd();
CHECK_RES(res);
res = defwEndNets();
CHECK_RES(res);
return 0;}
+
+

Regular Wiring

+

Routines described in this section form a regularWiring statement that can be used to define regular wiring for a net or subnet. The regularWiring statement is optional and can be used more than once in a NETS statement. For syntax information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.

+

A regularWiring statement must start and end with the defwNetPathStart and defwNetPathEnd routines. All regular wiring must be defined between these routines.

+

For examples of the routines described here, see "Regular Wiring Example".

+

The regular wiring routines can be included between the following pairs of routines:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwNet and defwEndOneNet
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwNetMustjoinConnection and defwEndOneNet
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwNetSubnetStart and defwSubnetEnd
+
+

All routines return 0 if successful.

+

defwNetPathStart

+

Starts a regularWiring statement.

+

Syntax

+
+ int defwNetPathStart(
const char* type) +
+

Arguments

+

+ + type +

+
Specifies the regular wiring type.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

COVER

+
+

Specifies that the wiring cannot be moved by either automatic layout or interactive commands.

+
+

     

+
+

FIXED

+
+

Specifies that the wiring cannot be moved by automatic layout, but can be changed by interactive commands.

+
+

     

+
+

ROUTED

+
+

Specifies that the wiring can be moved by the automatic layout tools.

+
+

   

+
+

NOSHIELD

+
+

Specifies that the last wide segment of the net is not shielded.

+
+

defwNetPathEnd

+

Ends the regularWiring statement.

+

Syntax

+
+ int defwNetPathEnd() +
+

defwNetPathLayer

+

Writes a LAYER statement. The LAYER statement is required and can be used more than once in the regularWiring statement.

+

Syntax

+
+ int defwNetPathLayer(
const char* layerName,
int isTaper,
const char* rulename) +
+

Arguments

+

+ + layerName +

+
Specifies the layer name on which the wire lies.
+

+ + isTaper +

+
Optional argument that writes the keyword TAPER, which specifies that the next contiguous wire segment is created using the default rule.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

     

+
+

0

+
+

Ignores the argument.

+
+

     

+
+

1

+
+

Writes the keyword TAPER. If you specify 1, you must specify NULL for the rulename argument.

+
+

+ + ruleName +

+
Optional argument that specifies that the next contiguous wire segment is created using the specified nondefault rule (ruleName). Specify NULL to ignore this argument. If you specify a rulename, you must specify 0 for the isTaper argument.
+

defwNetPathPoint

+

Defines the center line coordinates of the route on the layer specified with defwNetPathLayer. This routine is required and can be used only once for each layer in the regularWiring statement.

+

Syntax

+
+ int defwNetPathPoint(
int numPts,
const char** pointX,
const char** pointY,
const char** value) +
+

Arguments

+

+ + numPts +

+
Specifies the number of points in the wire path (route)
+

+ + pointX pointY +

+
Specifies the coordinates of the path points.
+

+ + value +

+
Optional argument that specifies the amount by which the wire is extended past the end point of the segment. This value must be greater than or equal to 0 (zero). Specify NULL to ignore this argument.
+

defwNetPathStyle

+

Writes a STYLE statement for the layer specified with defwNetPathLayer. The STYLE statement is optional and can be used only once for each layer in the regularWiring statement.

+

Syntax

+
+ defwNetPathStyle(
int styleNum) +
+

Arguments

+

+ + styleNum +

+
Specifies a previously defined style from the STYLES section in this DEF file. If a style is specified, the wire's shape is defined by the center line coordinates and the style.
+

defwNetPathVia

+

Specifies a via to place at the last point on the layer specified with defwNetPathLayer. This routine is optional and can be used only once for each layer in the regularWiring statement.

+

Syntax

+
+ int defwNetPathVia(
const char* viaName) +
+

Arguments

+

+ + viaName +

+
Specifies the via to place at the last specified path coordinate.
+

defwNetPathViaWithOrient

+

Specifies the orientation of the via specified with defwNetPathVia. This routine is optional and can be used only once for each via in the regularWiring statement.

+

Syntax

+
+ defwNetPathViaWithOrient(
const char* name,
int orient) +
+

Arguments

+

+ + name +

+
Specifies the via.
+

+ + orient +

+
Specifies the orientation.
Value: 0 to 7. For more information, see "Orientation Codes"
+

defwNetPathViaWithOrientStr

+

Also specifies the orientation of the via specified with defwNetPathVia. This routine is the same as the defwNetPathViaWithOrient routine, with the exception of the orient argument, which takes a string instead of an integer. The defwNetPathViaWithOrientStr is optional and can be used only once for each via in the regularWiring statement.

+

Syntax

+
+ defwNetPathViaWithOrient(
const char* name,
int orient) +
+

Arguments

+

+ + name +

+
Specifies the via.
+

+ + orient +

+
Specifies the orientation. Specify NULL to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+

Regular Wiring Example

+

The following example only shows the usage of some functions related to regular wiring in a net. This example is part of the net callback routine.

+
+ int netCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char **coorX, **coorY;
const char **coorValue;
...
res = defwNetPathStart("NEW");
CHECK_RES(res);
res = defwNetPathLayer("M1", 1, NULL);
CHECK_RES(res);
coorX[0] = strdup("2400");
coorY[0] = strdup("282400");
coorValue[0] = NULL;
coorX[1] = strdup("240");
coorY[1] = strdup("*");
coorValue[1] = NULL;
res = defwNetPathPoint(2, coorX, coorY, coorValue);
CHECK_RES(res);
free((char*)coorX[0]);
free((char*)coorY[0]);
free((char*)coorX[1]);
free((char*)coorY[1]);
res = defwNetPathEnd();
CHECK_RES(res);
...
return 0;} +
+

Subnet

+

The Subnet routines write a SUBNET statement which further defines a net. A SUBNET statement is optional and can be used more than once in a NETS statement. For information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.

+

You must begin and end a SUBNET statement with the defwNetSubnetStart and defwSubnetEnd routines. You must define all subnets between these routines.

+

For examples of the routines described here, see "Subnet Example".

+

In addition to the routines described in this section, you can include a NONDEFAULTRULE statement and a regularWiring statement within a SUBNET statement. For more information about these routines, see defwNetNondefaultRule , or "Regular Wiring".

+

All routines return 0 if successful.

+

defwNetSubnetStart

+

Starts a SUBNET statement. This statement is optional and can be used only once in a NETS statement.

+

Syntax

+
+ int defwNetSubnetStart(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the name of the subnet.
+

defwNetSubnetEnd

+

Ends a SUBNET statement.

+

Syntax

+
+ int defwNetSubnetEnd() +
+

defwNetSubnetPin

+

Specifies a component for the SUBNET statement. This routine is optional and can be used more than once in a SUBNET statement.

+

Syntax

+
+ int defwNetSubnetPin(
const char* component,
const char* name) +
+

Arguments

+

+ + component +

+
Specifies either a component name, or the value PIN or VPIN.
+

+ + name +

+
Specifies either a pin name if component is set to PIN, or a virtual pin name if component is set to VPIN.
+

Subnet Example

+

The following example only shows the usage of some functions related to subnet in a net. This example is part of the net callback routine.

+
+ int netCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char **coorX, **coorY;
const char **coorValue;
...
res = defwNetSubnetStart("SUB1_XX100");
CHECK_RES(res);
res = defwNetSubnetPin("Z38A05", "G");
CHECK_RES(res);
res = defwNetSubnetPin("VPIN", "V_SUB1_XX100");
CHECK_RES(res);
res = defwNetPathStart("ROUTED");
CHECK_RES(res);
res = defwNetPathLayer("M1", 0, "RULE1");
CHECK_RES(res);
coorX[0] = strdup("54040");
coorY[0] = strdup("30300");
coorValue[0] = strdup("0");
coorX[1] = strdup("*");
coorY[1] = strdup("30900");
coorValue[1] = NULL;
res = defwNetPathPoint(2, coorX, coorY, coorValue);
CHECK_RES(res);
free((char*)coorX[0]);
free((char*)coorY[0]);
free((char*)coorValue[0]);
free((char*)coorX[1]);
free((char*)coorY[1]);
res = defwNetPathVia("nd1VIA12");
CHECK_RES(res);
...
res = defwNetPathEnd();
CHECK_RES(res);
res = defwNetSubnetEnd();
...
return 0;} +
+

Nondefault Rules

+

Nondefault rule routines write a DEF NONDEFAULTRULES statement. The NONDEFAULTRULES statement is optional and can be used only once in a DEF file. For syntax information about the DEF NONDEFAULTRULES statement, see "Nondefault Rules" in the LEF/DEF Language Reference.

+

The NONDEFAULTRULES statement must start and end with the defwStartNonDefaultRules and defwEndNonDefaultRules routines. All nondefault rules must be defined between these two routines. Each individual nondefault rule must start with defwNonDefaultRule.

+

Note: To write a PROPERTY statement for the nondefault rule, you must use one of the property routines immediately following the defwNonDefaultRule routine. For more information, see "Property Statements".

+

All routines return 0 if successful.

+

defwStartNonDefaultRules

+

Starts a NONDEFAULTRULES statement.

+

Syntax

+
+ defwStartNonDefaultRules(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of rules defined in the NONDEFAULTRULES statement.
+

defwEndNonDefaultRules

+

Ends the NONDEFAULTRULES statement.

+

Syntax

+
+ defwEndNonDefaultRules() +
+

defwNonDefaultRule

+

Starts a nondefault rule definition. This routine is required for each nondefault rule and can be used more than once in the NONDEFAULTRULES statement.

+

Syntax

+
+ defwNonDefaultRule(
const char* ruleName,
int hardSpacing) +
+

Arguments

+

+ + ruleName +

+
Specifies the name for this nondefault rule. This name can be used in the NETS section wherever a nondefault rule name is allowed. The reserved name DEFAULT can be used to indicate the default routing rule used in the NETS section.
+

+ + hardSpacing +

+
Optional argument that specifies that any spacing values that exceed the LEF LAYER ROUTING spacing requirements are "hard" rules instead of "soft" rules. Specify 0 to ignore this argument.
+

defwNonDefaultRuleLayer

+

Writes a LAYER statement for the nondefault rule. The LAYER statement is required and can be used more than once for each nondefault rule in the NONDEFAULTRULES statement.

+

Syntax

+
+ defwNonDefaultRuleLayer(
const char* layerName,
double width,
double diagWidth,
double spacing,
double wireExt) +
+

Arguments

+

+ + layerName +

+
`Specifies the layer for the various width and spacing values. layerName must be a routing layer.
+

+ + width +

+
Specifies the required minimum width allowed for layerName.
+

+ + diagWidth +

+
Optional argument that specifies the diagonal width for layerName, when 45-degree routing is used. Specify 0 to ignore this argument.
+

+ + spacing +

+
Optional argument that specifies the minimum spacing for layerName. The LEF LAYER SPACING or SPACINGTABLE definitions always apply; therefore it is only necessary to add a SPACING value if the desired spacing is larger than the LAYER rules already require. Specify 0 to ignore this argument.
+

+ + wireExt +

+
Optional argument that specifies the distance by which wires are extended at vias on layerName. Specify 0 to ignore this argument.
+

defwNonDefaultRuleMinCuts

+

Writes a MINCUTS statement. The MINCUTS statement is optional and can be used more than once for each nondefault rule in the NONDEFAULTRULES statement.

+

Syntax

+
+ defwNonDefaultRuleMinCuts(
const char* cutLayerName,
int numCuts) +
+

Arguments

+

+ + cutLayerName +

+
Specifies the cut layer.
+

+ + numCuts +

+
Specifies the minimum number of cuts allowed for any via using cutLayerName. All vias (generated or fixed vias) used for this nondefault rule must have at least numCuts cuts in the via.
+

defwNonDefaultRuleVia

+

Writes a VIA statement for the nondefault rule. The VIA statement is optional and can be used more than once for each nondefault rule in the NONDEFAULTRULES statement.

+

Syntax

+
+ defwNonDefaultRuleVia(
const char* viaName) +
+

Arguments

+

+ + viaName +

+
Specifies a previously defined LEF or DEF via to use with this rule.
+

defwNonDefaultRuleViaRule

+

Writes a VIARULE statement. The VIARULE statement is optional and can be used more than once for each nondefault rule in the NONDEFAULTRULES statement.

+

Syntax

+
+ defwNonDefaultRuleViaRule(
const char* viaRuleName) +
+

Arguments

+

+ + viaRuleName +

+
Specifies a previously defined LEF VIARULE GENERATE to use with this routing rule. If no via or via rule is specified for a given routing-cut-routing layer combination, then a VIARULE GENERATE DEFAULT via rule must exist for that combination, and it is implicitly inherited.
+

Pins

+

Pin routines write a DEF PINS statement. The PINS statement is optional and can be used only once in a DEF file. For syntax information about the DEF PINS statement, see "Pins" in the LEF/DEF Language Reference.

+

A PINS statement must start and end with the defwStartPins and defwEndPins routines. All pins must be defined between these routines. Each individual pin must start with a defwPin routine.

+

If the DEF file contains a COMPONENTS statement, the PINS statement must follow it. For more information about DEF COMPONENTS routines, see "Components".

+

For examples of the routines described here, see "Pins Example".

+

Note: To write a PROPERTY statement for the pin, you must use one of the property routines immediately following the defwPin routine. For more information, see "Property Statements".

+

All routines return 0 if successful.

+

defwStartPins

+

Starts a PINS statement.

+

Syntax

+
+ int defwStartPins(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of pins defined in the PINS statement.
+

defwEndPins

+

Ends the PINS statement. If count is not the same as the actual number of defwPin routines used, defwEndPins returns DEFW_BAD_DATA.

+

Syntax

+
+ int defwEndPins(void) +
+

defwPin

+

Starts a pin description in the PINS statement. Each pin description must start with defwPin. This routine is required and can be used more than once in a PINS statement.

+

Syntax

+
+ int defwPin(
const char* pinName,
const char* netName,
int special,
const char* direction,
const char* use,
const char* status,
int statusX,
int statusY,
int orient) +
+

Arguments

+

+ + direction +

+
Optional argument that specifies the pin type. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

FEEDTHRU

+
+

Pin that goes completely across the cell.

+
+

    

+
+

INPUT

+
+

Pin that accepts signals coming into the cell.

+
+

     

+
+

INOUT

+
+

Pin that drives signals out of the cell.

+
+

     

+
+

OUTPUT

+
+

Pin that can accept signals going either in or out of the cell.

+
+

+ + netName +

+
Specifies the corresponding internal net name.
+

+ + orient +

+
Optional argument that specifies the orientation for the pin. Specify -1 to ignore this argument.
Value: 0 to 7. For more information, see "Orientation Codes".
+

+ + pinName +

+
Specifies the name for the external pin.
+

+ + special +

+
Optional argument that identifies the pin as a special pin. Specify 0 to ignore this argument.
Value: Specify one of the following: I
+ + + + + + + + + + + +
+
+

 

+
+

0

+
+

Argument is ignored.

+
+

 

+
+

1

+
+

Writes a SPECIAL statement.

+
+

+ + status +

+
Optional argument that specifies the placement status of the pin. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + +
+
+

    

+
+

COVER

+
+

Specifies that the pin has location and is a part of a cover macro. It cannot be moved by automatic layout tools or by interactive commands.

+
+

    

+
+

FIXED

+
+

Specifies that the pin has a location and cannot be moved by automatic tools, but can be moved by interactive commands.

+
+

     

+
+

PLACED

+
+

Specifies that the pin has a location, but can be moved during automatic layout.

+
+

+ + statusX statusY +

+
Optional arguments that specify the placement location of the pin. If you specify status, you must specify these arguments.Specify 0 to ignore these arguments.
+

+ + use +

+
Optional argument that specifies how the pin is used. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

ANALOG

+
+

Pin is used for analog connectivity.

+
+

    

+
+

CLOCK

+
+

Pin is used for clock net connectivity.

+
+

    

+
+

GROUND

+
+

Pin is used for connectivity to the chip-level ground distribution network.

+
+

    

+
+

POWER

+
+

Pin is used for connectivity to the chip-level power distribution network.

+
+

    

+
+

RESET

+
+

Pin is used as reset pin.

+
+

    

+
+

SCAN

+
+

Pin is used as scan pin.

+
+

    

+
+

SIGNAL

+
+

Pin is used for regular net connectivity.

+
+

     

+
+

TIEOFF

+
+

Pin is used as tie-high or tie-low pin.

+
+

defwPinStr

+

Also starts a pin description in the PINS statement. This routine is the same as the defwPin routine, with the exception of the orient argument, which takes a string instead of an integer. Each pin description must start with defwPin. This routine is required and can be used more than once in a PINS statement.

+

Syntax

+
+ int defwPin(
const char* pinName,
const char* netName,
int special,
const char* direction,
const char* use,
const char* status,
int statusX,
int statusY,
const char* orient) +
+

Arguments

+

+ + direction +

+
Optional argument that specifies the pin type. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

FEEDTHRU

+
+

Pin that goes completely across the cell.

+
+

    

+
+

INPUT

+
+

Pin that accepts signals coming into the cell.

+
+

     

+
+

INOUT

+
+

Pin that drives signals out of the cell.

+
+

     

+
+

OUTPUT

+
+

Pin that can accept signals going either in or out of the cell.

+
+

+ + netName +

+
Specifies the corresponding internal net name.
+

+ + orient +

+
Optional argument that specifies the orientation for the pin. Specify NULL to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+

+ + pinName +

+
Specifies the name for the external pin.
+

+ + special +

+
Optional argument that identifies the pin as a special pin. Specify 0 to ignore this argument.
Value: Specify one of the following: I
+ + + + + + + + + + + +
+
+

 

+
+

0

+
+

Argument is ignored.

+
+

 

+
+

1

+
+

Writes a SPECIAL statement.

+
+

+ + status +

+
Optional argument that specifies the placement status of the pin. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + +
+
+

    

+
+

COVER

+
+

Specifies that the pin has location and is a part of a cover macro. It cannot be moved by automatic layout tools or by interactive commands.

+
+

    

+
+

FIXED

+
+

Specifies that the pin has a location and cannot be moved by automatic tools, but can be moved by interactive commands.

+
+

     

+
+

PLACED

+
+

Specifies that the pin has a location, but can be moved during automatic layout.

+
+

+ + statusX statusY +

+
Optional arguments that specify the placement location of the pin. If you specify status, you must specify these arguments.Specify 0 to ignore these arguments.
+

+ + use +

+
Optional argument that specifies how the pin is used. Specify NULL to ignore this argument.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

ANALOG

+
+

Pin is used for analog connectivity.

+
+

    

+
+

CLOCK

+
+

Pin is used for clock net connectivity.

+
+

    

+
+

GROUND

+
+

Pin is used for connectivity to the chip-level ground distribution network.

+
+

    

+
+

POWER

+
+

Pin is used for connectivity to the chip-level power distribution network.

+
+

    

+
+

RESET

+
+

Pin is used as reset pin.

+
+

    

+
+

SCAN

+
+

Pin is used as scan pin.

+
+

    

+
+

SIGNAL

+
+

Pin is used for regular net connectivity.

+
+

     

+
+

TIEOFF

+
+

Pin is used as tie-high or tie-low pin.

+
+

defwPinAntennaModel

+

Writes an ANTENNAMODEL statement. The ANTENNAMODEL statement is optional and can be used more than once in a pin definition.

+

Syntax

+
+ int defwPinAntennaModel(
const char* oxide) +
+

Arguments

+

+ + oxide +

+
Specifies the oxide model for the pin. Each model can be specified once per layer. If you specify an ANTENNAMODEL statement, that value affects all ANTENNAGATEAREA and ANTENNA*CAR statements for the pin that follow it until you specify another ANTENNAMODEL statement.
Value: OXIDE1, OXIDE2, OXIDE3, or OXIDE4

Note:
OXIDE3 and OXIDE4 are currently not supported. If you specify either of these models, the tool parses and ignores it.
+

defwPinAntennaPinDiffArea

+

Writes an ANTENNAPINDIFFAREA statement. The ANTENNAPINDIFFAREA statement is optional and can be used more than once in a PIN section.

+

Syntax

+
+ int defwPinAntennaPinDiffArea(
int value,
const char* layerName) +
+

Argument

+

+ + value +

+
Specifies the diffusion (diode) area to which the pin is connected on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+

defwPinAntennaPinGateArea

+

Writes an ANTENNAPINGATEAREA statement. The ANTENNAPINGATEAREA statement is optional, and can be used once after each defwPinAntennaModel routine in a PINS section.

+

Syntax

+
+ int defwPinAntennaPinGateArea(
int value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the gate area to which the pin is connected on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+

defwPinAntennaPinMaxAreaCar

+

Writes an ANTENNAPINMAXAREACAR statement. The ANTENNAPINMAXAREACAR statement is optional, and can be used once after each defwPinAntennaModel routine in a PINS section.

+

Syntax

+
+ int defwPinAntennaPinMaxAreaCar(
int value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the maximum cumulative antenna ratio, using the metal area below the current pin layer.
+

+ + layerName +

+
Specifies the pin layer.
+

defwPinAntennaPinMaxCutCar

+

Writes an ANTENNAPINMAXCUTCAR statement. The ANTENNAPINMAXCUTCAR statement is optional, and can be used once after each defwPinAntennaModel routine in a PINS section.

+

Syntax

+
+ int defwPinAntennaPinMaxCutCar(
int value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the maximum cumulative antenna ratio, using the cut area below the current pin layer.
+

+ + layerName +

+
Specifies the pin layer.
+

defwPinAntennaPinMaxSideAreaCar

+

Writes an ANTENNAPINMAXSIDEAREACAR statement. The ANTENNAPINMAXSIDEAREACAR statement is optional, and can be used once after each defwPinAntennaModel routine in a PINS section.

+

Syntax

+
+ int defwPinAntennaPinMaxSideAreaCar(
int value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the maximum cumulative antenna ratio, using the metal side wall area below the current pin layer.
+

+ + layerName +

+
Specifies the pin layer.
+

defwPinAntennaPinPartialCutArea

+

Writes an ANTENNAPINPARTIALCUTAREA statement. The ANTENNAPINPARTIALCUTAREA statement is optional and can be used more than once in a PINS section.

+

Syntax

+
+ int defwPinAntennaPinPartialCutArea(
int value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the partial cut area, which is above the current pin layer and inside (or outside) the macro on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+

defwPinAntennaPinPartialMetalArea

+

Writes an ANTENNAPINPARTIALMETALAREA statement. The ANTENNAPINPARTIALMETALAREA statement is optional and can be used more than once in a PINS section.

+

Syntax

+
+ int defwPinAntennaPinPartialMetalArea(
int value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the partial metal area, which is connected directly to the I/O pin and the inside (or outside) of the macro on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+

defwPinAntennaPinPartialMetalSideArea

+

Writes an ANTENNAPINPARTIALMETALSIDEAREA statement. The ANTENNAPINPARTIALMETALSIDEAREA statement is optional and can be used more than once for each pin in a PINS statement.

+

Syntax

+
+ int defwPinAntennaPinPartialMetalSideArea(
int value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the partial metal side wall area, which is connected directly to the I/O pin and the inside (or outside) of the macro on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+

defwPinGroundSensitivity

+

Writes a GROUNDSENSITIVITY statement for a pin in the PINS statement. The GROUNDSENSITIVITY statement is optional and can be used only once for each pin in the PINS statement.

+

Syntax

+
+ defwPinGroundSensitivity(
const char* pinName) +
+

Arguments

+

+ + pinName +

+
Specifies that if this pin is connected to a tie-low connection (such as 1'b0 in Verilog), it should connect to the same net to which pinName is connected.
+

defwPinLayer

+

Writes a LAYER statement for a pin in the PINS statement. Either a LAYER or a POLYGON statement can be specified for a pin. The LAYER statement is optional and can be used more than once for each pin in the PINS statement.

+

Syntax

+
+ defwPinLayer(
const char* layerName,
int spacing,
int designRuleWidth,
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + layerName +

+
Specifies the routing layer used for the pin.
+

+ + spacing +

+
Optional argument that specifies the minimum spacing allowed between this pin and any other routing shape. If you specify a minimum spacing, you must specify 0 for designRuleWidth. Specify 0 to ignore this argument.
+

+ + designRuleWidth +

+
Optional argument that specifies that this pin has a width of designRuleWidth for the purpose of spacing calculations. If you specify a designRuleWidth value, you must specify 0 for spacing. Specify 0 to ignore this argument.
+

+ + xl yl xh yh +

+
Specifies the physical geometry for the pin on the specified layer.
+

defwPinNetExpr

+

Writes a NETEXPR statement for a pin in the PINS statement. The NETEXPR statement is optional and can be used only once for each pin in the PINS statement.

+

Syntax

+
+ defwPinNetExpr(
const char* pinExpr) +
+

Arguments

+

+ + pinExpr +

+
Specifies a net expression property name (such as power1 or power2). If pinExpr matches a net expression property higher up in the netlist (for example, in Verilog, VHDL, or OpenAccess), then the property is evaluated, and the software identifies a net to which to connect this pin.
+

defwPinPolygon

+

Writes a POLYGON statement for a pin in the PINS statement. Either a LAYER or a POLYGON statement can be specified for a pin. The POLYGON statement is optional and can be used more than once for each pin in the PINS statement.

+

Syntax

+
+ defwPinPolygon(
const char* layerName,
int spacing,
int designRuleWidth,
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to generate a polygon.
+

+ + spacing +

+
Optional argument that specifies the minimum spacing allowed between this pin and any other routing shape. If you specify a minimum spacing, you must specify 0 for designRuleWidth. Specify 0 to ignore this argument.
+

+ + designRuleWidth +

+
Optional argument that specifies that this pin has a width of designRuleWidth for the purpose of spacing calculations. If you specify a designRuleWidth value, you must specify 0 for spacing. Specify 0 to ignore this argument.
+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon for the pin. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+

defwPinPort

+

Writes a PORT statement for a pin in the PINS statement. The PORT statement is optional and can be used more than once in a PINS statement.

+

Syntax

+
+ int defwPinPort() +
+

defwPinPortLayer

+

Writes a LAYER statement for a PINS PORT statement. Either a LAYER, POLYGON, or VIA statement can be specified for a pin port. This routine is optional and is called after defwPinPort.

+

Syntax

+
+ int defwPinPortLayer(
const char* layerName,
int spacing,
int designRuleWidth,
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + layerName +

+
Specifies the layer name.
+

+ + spacing +

+
Optional argument that specifies the minimum spacing allowed between this pin port and any other routing shape. If you specify spacing, you must specify 0 for designRuleWidth. Specify 0 to ignore this argument.
+

+ + designRuleWidth +

+
Optional argument that specifies that this pin port has a width of designRuleWidth for the purpose of spacing calculations. If you specify designRuleWidth, you must specify 0 for spacing. Specify 0 to ignore this argument.
+

+ + xl yl xh yh +

+
Specifies the physical geometry for the pin port on the specified layer.
+

defwPinPortLocation

+

Writes a FIXED, PLACED, or COVER statement for a PINS PORT statement. This routine is optional and is called after defwPinPort.

+

Syntax

+
+ int defwPinPortLocation(
const char* status,
int statusX,
int statusY,
const char* orient) +
+

Arguments

+

+ + status +

+
Specifies the placement status of the pin.
Value: specify one of the following:
+ + + + + + + + + + + + + + + + +
+
+

    

+
+

COVER

+
+

Specifies that the pin has a location and is a part of the cover macro. It cannot be moved by automatic tools or interactive commands.

+
+

    

+
+

FIXED

+
+

Specifies that the pin has a location and cannot be moved by automatic tools but can be moved by interactive commands.

+
+

    

+
+

PLACED

+
+

Specifies that the pin has a location, but can be moved during automatic layout.

+
+

+ + statusX statusY +

+
Specifies the placement location of the pin. If you specify status, you must specify these arguments.
+

+ + orient +

+
Specifies the orientation of the pin.
Value: 0 to 7. For more information, see "Orientation Codes".
+

defwPinPortPolygon

+

Writes a POLYGON statement for a PINS PORT statement. Either a LAYER, POLYGON, or VIA statement can be specified for a pin port. This routine is optional and is called after defwPinPort.

+

Syntax

+
+ int defwPinPortPolygon(
const char* layerName,
int spacing,
int designRuleWidth,
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + layerName +

+
Specifies the layer name.
+

+ + spacing +

+
Optional argument that specifies the minimum spacing allowed between this pin port and any other routing shape. If you specify a minimum spacing, you must specify 0 for designRuleWidth. Specify 0 to ignore this argument.
+

+ + designRuleWidth +

+
Optional argument that specifies that this pin port has a width of designRuleWidth for the purpose of spacing calculations. If you specify designRuleWidth, you must specify 0 for spacing. Specify 0 to ignore this argument.
+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon for the pin port. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+

defwPinPortVia

+

Writes a VIA statement for a PINS PORT statement. Either a LAYER, POLYGON, or VIA statement can be specified for a pin port. This routine is optional and is called after defwPinPort.

+

Syntax

+
+ int defwPinPortVia(
const char* viaName,
int xl,
int yl) +
+

Arguments

+

+ + viaName +

+
Specifies the via name. The via name must have been defined in the associated LEF files or this DEF file before this function is called.
+

+ + x1 y1 +

+
Specifies the point at which the via is to be placed.
+

defwPinSupplySensitivity

+

Writes a SUPPLYSENSITIVITY statement for a pin in the PINS statement. The SUPPLYSENSITIVITY statement is optional and can be used only once for each pin in the PINS statement.

+

Syntax

+
+ defwPinSupplySensitivity(
const char* pinName) +
+

Arguments

+

+ + pinName +

+
Specifies that if this pin is connected to a tie-high connection (such as 1'b1 in Verilog), it should connect to the same net to which pinName is connected.
+

defwPinVia

+

Writes a VIA statement for a pin in the PINS statement. The VIA statement is optional and can be used more than once for a pin.

+

Syntax

+
+ int defwPinVia(
const char* viaName,
int xl,
int yl) +
+

Arguments

+

+ + viaName +

+
Specifies the via name. The via name must have been defined in the associated LEF files or this DEF file before this function is called.
+

+ + x1 y1 +

+
Specifies the point at which the via is to be placed.
+

Pins Example

+

The following example shows a callback routine with the type defwPinCbkType.

+
+ int pinCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwPinCbkType) {
printf("Type is not defwPinCbkType, terminate
         writing.\n");
return 1;
}
+
+
+     res = defwStartPins(1);
CHECK_RES(res);
res = defwPin("scanpin", "SCAN", 0, "INPUT", NULL, NULL, 0,
                0, -1, NULL, 0, 0, 0, 0);
CHECK_RES(res);
res = defwEndPins();
CHECK_RES(res);
return 0;} +
+

Pin Properties

+

The Pin Properties routines write a DEF PINPROPERTIES statement. The PINPROPERTIES statement is optional and can be used only once in a DEF file. For syntax information about the DEF PINPROPERTIES statement, see "Pin Properties" in the LEF/DEF Language Reference.

+

You must begin and end a DEF PINPROPERTIES statement with the defwStartPinProperties and defwEndPinProperties routines. You must define all pin properties between these routines. Each property definition must start with a defwPinProperty routine.

+

If the DEF file contains a PINS statement, the PINPROPERTIES statement must follow it. For more information about the DEF PINS writer routines, see "Pins".

+

For examples of the routines described here, see"Pin Properties Example".

+

Note: To write a PROPERTY statement for a pin, you must use one of the property routines immediately following the defwPinProperty routine, which specifies the pin name. For more information, see "Property Statements".

+

All routines return 0 if successful.

+

defwStartPinProperties

+

Starts a PINPROPERTIES statement.

+

Syntax

+
+ int defwStartPinProperties(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of pin properties defined in the PINPROPERTIES statement.
+

defwEndPinProperties

+

Ends the PINPROPERTIES statement. If count specified in defwStartPinProperties is not the same as the actual number of defwPinProperty routines used, defwEndPinProperties returns DEFW_BAD_DATA. This routine does not require any arguments.

+

Syntax

+
+ int defwEndPinProperties(void) +
+

defwPinProperty

+

Begins a property definition. This routine is required and can be used more than once in a PINPROPERTIES statement.

+

Syntax

+
+ int defwPinProperty(
const char* component,
const char* pinName) +
+

Arguments

+

+ + component +

+
Specifies either the string to use for the component pin name, or the keyword PIN.
+

+ + pinName +

+
Specifies the I/O pin name. Specify this value only when component is set to PIN.
+

Pin Properties Example

+

The following example shows a callback routine with the type defwPinPropCbkType.

+
+ int pinpropCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwPinPropCbkType) {
printf("Type is not defwPinPropCbkType, terminate
        writing.\n");
return 1;
}
res = defwStartPinProperties(2);
CHECK_RES(res);
res = defwPinProperty("cell1", "PB1");
CHECK_RES(res);
res = defwStringProperty("dpBit", "1");
CHECK_RES(res);
res = defwRealProperty("realProperty", 3.4);
CHECK_RES(res);
res = defwPinProperty("cell2", "vdd");
CHECK_RES(res);
res = defwIntProperty("dpIgnoreTerm", 2);
CHECK_RES(res);
res = defwEndPinProperties();
CHECK_RES(res);
return 0;} +
+

Property Definitions

+

The Property Definitions routines write a DEF PROPERTYDEFINITIONS statement. The PROPERTYDEFINITIONS statement is optional and can be used only once in a DEF file. For syntax information about the DEF PROPERTYDEFINITIONS statement, see Property Definitions in the LEF/DEF Language Reference.

+

You must begin and end a DEF PROPERTYDEFINITIONS statement with the defwStartPropDef and defwEndPropDef routines. You must define all properties between these routines.

+

If the DEF file contains a HISTORY statement, the PROPERTYDEFINITIONS statement must follow it. For more information about the DEF HISTORY routine, see "History".

+

For examples of the routines described here, see "Property Definitions Example".

+

All routines return 0 if successful.

+

defwStartPropDef

+

Starts a PROPERTYDEFINITIONS statement. This routine does not require any arguments.

+

Syntax

+
+ int defwStartPropDef(void) +
+

defwEndPropDef

+

Ends the PROPERTYDEFINITIONS statement. This routine does not require any arguments.

+

Syntax

+
+ int defwEndPropDef(void) +
+

defwIntPropDef

+

Writes an integer property definition. This routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.

+

Syntax

+
+ int defwIntPropDef(
const char* objType,
const char* propName,
double leftRange,
double rightRange,
const char* value) +
+

Arguments

+

+ + objType +

+
Specifies the type of object for which you can define properties.
Value: DESIGN, COMPONENT, NET, SPECIALNET, GROUP, ROW, COMPONENTPIN, NONDEFAULTRULE, or REGION
+

+ + propName +

+
Specifies a unique property name for the object type.
+

+ + leftRange rightRange +

+
Optional arguments that limit integer property values to a specified range. That is, the value must be greater than or equal to leftRange and less than or equal to rightRange. Specify 0 to ignore these arguments.
+

+ + value +

+
Optional argument that specifies a numeric value for an object. Specify NULL to ignore this argument.
+

defwRealPropDef

+

Writes a real property definition. This routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.

+

Syntax

+
+ int defwRealPropDef(
const char* objType,
const char* propName,
double leftRange,
double rightRange,
const char* value) +
+

Arguments

+

+ + objType +

+
Specifies the type of object for which you can define properties.
Value: Specify DESIGN, COMPONENT, NET, SPECIALNET, GROUP, ROW, COMPONENTPIN, NONDEFAULTRULE, or REGION
+

+ + propName +

+
Specifies a unique property name for the object type.
+

+ + leftRange rightRange +

+
Optional arguments that limit real number property values to a specified range. That is, the value must be greater than or equal to leftRange and less than or equal to rightRange. Specify 0 to ignore these arguments.
+

+ + value +

+
Optional argument that specifies a numeric value for an object. Specify NULL to ignore this argument.
+

defwStringPropDef

+

Writes a string property definition. This routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.

+

Syntax

+
+ int defwStringPropDef(
const char* objType,
const char* propName,
double leftRange,
double rightRange,
const char* value) +
+

Arguments

+

+ + objType +

+
Specifies the type of object for which you can define properties.
Value: DESIGN, COMPONENT, NET, SPECIALNET, GROUP, ROW, COMPONENTPIN, NONDEFAULTRULE, or REGION
+

+ + propName +

+
Specifies a unique property name for the object type.
+

+ + leftRange rightRange +

+
Optional arguments that limit string property values to a specified range. That is, the value must be greater than or equal to leftRange and less than or equal to rightRange. Specify 0 to ignore these arguments.
+

+ + value +

+
Optional argument that specifies a character value for an object. Specify NULL to ignore this argument.
+

Property Definitions Example

+

The following example shows a callback routine with the type defwPropDefCbkType.

+
+ int pinCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwPropDefCbkType) {
printf("Type is not defwPropDefCbkType, terminate
        writing.\n");
return 1;
}
res = defwStartPropDef();
check_res(res);
defwAddComment("defwPropDef is broken into 3 routines,
    defwStringPropDef");
defwAddComment("defwIntPropDef, and defwRealPropDef");
res = defwStringPropDef("REGION", "scum", 0, 0, NULL);
CHECK_RES(res);
res = defwIntPropDef("REGION", "center", 0, 0, NULL);
CHECK_RES(res);
res = defwRealPropDef("REGION", "area", 0, 0, NULL);
CHECK_RES(res);
res = defwStringPropDef("GROUP", "ggrp", 0, 0, NULL);
CHECK_RES(res);
res = defwEndPropDef();
CHECK_RES(res);
return 0;} +
+

Property Statements

+

The Property Statements routines write PROPERTY statements when used after the defwRow, defwRegion, defwComponent, defwPin, defwPinProperty, defwSpecialNet, defwNet, defwNonDefaultRule, or defwGroup routines.

+

For examples of the routines described here, see "Property Statements Example".

+

defwIntProperty

+

Writes a PROPERTY statement with an integer value. This statement is optional and can be used more than once.

+

Syntax

+
+ int defwIntProperty(
const char* propName,
int propValue) +
+

Arguments

+

+ + propName +

+
Specifies a unique property name for the object.
+

+ + propValue +

+
Specifies an integer value for the object.
+

defwRealProperty

+

Writes a PROPERTY statement with a real number value. This statement is optional and can be used more than once.

+

Syntax

+
+ int defwRealProperty(
const char* propName,
double propValue) +
+

Arguments

+

+ + propName +

+
Specifies a unique property name for the object.
+

+ + propValue +

+
Specifies a real value for the object.
+

defwStringProperty

+

Writes a PROPERTY statement with a string value. This statement is optional and can be used more than once.

+

Syntax

+
+ int defwStringProperty(
const char* propName,
const char* propValue) +
+

+ + propName +

+
Specifies a unique property name for the object.
+

+ + propValue +

+
Specifies a string value for the object.
+

Property Statements Example

+

The following example shows how to create a property inside a Rows callback routine.

+
+ int rowCB (defwCallbackType_e type,
defiUserData userData) {
int res;
...
res = defwRealProperty("minlength", 50.5);
CHECK_RES(res);
res = defwStringProperty("firstName", "Only");
CHECK_RES(res);
res = defwIntProperty("idx", 1);
CHECK_RES(res);
...
return 0;} +
+

Regions

+

The Regions routines write a DEF REGIONS statement. The REGIONS statement is optional and can be used only once in a DEF file. For syntax information about the DEF REGIONS statement, see "Regions" in the LEF/DEF Language Reference.

+

You must begin and end a DEF REGIONS statement with the defwStartRegions and defwEndRegions routines. You must define all regions between these routines. Each region definition must start with a defwRegions routine.

+

If the DEF file contains a VIAS statement, the REGIONS statement must follow it. For more information about the DEF VIAS routines, see "Vias".

+

For examples of the routines described here, see "Regions Example".

+

Note: To write a PROPERTY statement for the region, you must use one of the property routines immediately following the defwRegion routines. For more information, see "Property Statements".

+

All routines return 0 if successful.

+

defwStartRegions

+

Starts a REGIONS statement.

+

Syntax

+
+ int defwStartRegions(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of regions defined in the REGIONS statement.
+

defwEndRegions

+

Ends the REGIONS statement. If count specified in defwStartRegions is not the same as the actual number of defwRegionName routines used, this routine returns DEFW_BAD_DATA. This routine does not require any arguments.

+

Syntax

+
+ int defwEndRegions(void) +
+

defwRegionName

+

Starts a region description. This routine must be called the number of times specified in the defwStartRegions count argument.

+

Syntax

+
+ int defwRegionName(
const char* regionName) +
+

Arguments

+

+ + regionName +

+
Specifies the name of the region.
+

defwRegionPoints

+

Specifies the set of points bounding the region. This routine is required and can be used more than once to define a region.

+

Syntax

+
+ int defwRegionPoints(
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + xl yl xh yh +

+
Specifies the corner points of the region.
+

defwRegionType

+

Writes a TYPE statement. The TYPE statement is optional and can be used only once per region.

+

Syntax

+
+ int defwRegionType(
const char* type) +
+

Arguments

+

+ + type +

+
Specifies the region type.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

    

+
+

FENCE

+
+

All instances assigned to this type of region must be exclusively placed inside the region boundaries. No other instances are allowed inside this region.

+
+

    

+
+

GUIDE

+
+

All instances assigned to this type of region should be placed inside this region, but it is a preference, not a hard constraint. Other constraints, such as wire length and timing can override it.

+
+

Regions Example

+

The following example shows a callback routine with the type defwRegionCbkType.

+
+ int regionCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwRegionCbkType) {
printf("Type is not defwRegionCbkType, terminate
        writing.\n");
return 1;
}
res = defwStartRegions(1);
CHECK_RES(res);
res = defwRegionName("region2");
CHECK_RES(res);
res = defwRegionPoints(4000, 0, 5000, 1000);
CHECK_RES(res);
res = defwStringProperty("scum", "on bottom");
CHECK_RES(res);
res = defwEndRegions();
CHECK_RES(res);
return 0;} +
+

Rows

+

The Row routines write a DEF ROWS statement. The ROWS statement is optional and can be used more than once in a DEF file. For syntax information about the DEF ROWS statement, see "Rows" in the LEF/DEF Language Reference.

+

If the DEF file contains a DIEAREA statement, the ROWS statement must follow it. For more information about the DEF DIEAREA writer routines, see "Die Area".

+

Note: To write a PROPERTY statement for the row, you must use one of the property routines immediately following the defwRow routine. For more information, see "Property Statements".

+

All routines return 0 if successful.

+

defwRow

+

Writes a ROWS statement.

+

Syntax

+
+ int defwRow(
const char* rowName,
const char* rowType,
int origX,
int origY,
int orient,
int do_count,
int do_increment,
int xstep,
int ystep) +
+

Arguments

+

+ + do_count +

+
Optional argument that specifies the number of columns in the array pattern. Specify 0 to ignore this argument.
+

+ + do_increment +

+
Optional argument that specifies the number of rows in the array pattern. Specify 0 to ignore this argument.
+

+ + orient +

+
Specifies the orientation of all sites in the row.
Value: 0 to 7. For more information, see "Orientation Codes"
+

+ + rowName +

+
Specifies the row name for this row.
+

+ + rowType +

+
Specifies the site to use for the row.
+

+ + stepX stepY +

+
Optional arguments that specify the spacing between the columns and rows. Specify 0 to ignore these arguments.
+

+ + x_orig y_orig +

+
Specifies the location in the design of the first site in the row.
+

defwRowStr

+

Also writes a ROWS statement. This routine is the same as the defwRow routine, with the exception of the orient argument, which takes a string instead of an integer.

+

Syntax

+
+ int defwRowStr (
const char* rowName,
const char* rowType,
int x_orig,
int y_orig,
const char* orient,
int do_count,
int do_increment,
int xstep,
int ystep) +
+

Arguments

+

+ + do_count +

+
Optional argument that specifies the number of columns in the array pattern. Specify 0 to ignore this argument.
+

+ + do_increment +

+
Optional argument that specifies the number of rows in the array pattern. Specify 0 to ignore this argument.
+

+ + orient +

+
Specifies the orientation of all sites in the row.
Value: N, W, S, E, FN, FW, FS, or FE
+

+ + rowName +

+
Specifies the row name for this row.
+

+ + rowType +

+
Specifies the site to use for the row.
+

+ + stepX stepY +

+
Optional argument that specifies the spacing between the columns and rows. Specify 0 to ignore these arguments.
+

+ + x_orig y_orig +

+
Specifies the location in the design of the first site in the row.
+

Rows Example

+

The following example shows a callback routine with the type defwRowCbkType.

+
+ int rowCB (defwCallbackType_e type,
defiUserData userData) {
int res;
nt regionCB (defwCallbackType_e type,
defiUserData userData) {
int res;
    // Check if the type is correct
if (type != defwRowCbkType) {
printf("Type is not defwRowCbkType, terminate
         writing.\n");
return 1;
}
res = defwRow("ROW_9", "CORE", -177320, -111250, 5, 911, 1,
                    360, 0);
CHECK_RES(res);
res = defwRealProperty("minlength", 50.5);
CHECK_RES(res);
res = defwStringProperty("firstName", "Only");
CHECK_RES(res);
res = defwIntProperty("idx", 1);
CHECK_RES(res);
res = defwRow("ROW_10", "CORE1", -19000, -11000, 6, 1, 100,
                    0, 600);
CHECK_RES(res);
return 0;} +
+

Scan Chains

+

The Scan Chain routines write a DEF SCANCHAINS statement. The SCANCHAINS statement is optional and can be used only once in a DEF file. For syntax information about the DEF SCANCHAINS statement, see "Scan Chains" in the LEF/DEF Language Reference.

+

You must begin and end a DEF SCANCHAINS statement with the defwStartScanchains and defwEndScanchains routines. You must define all scan chains between these routines. Each scan chain specification must start with a defwScanchains routine.

+

For examples of the routines described here, see "Scan Chain Example".

+

Note: To write a PROPERTY statement for the region, you must use one of the property routines following defwScanchains. For more information, see "Property Statements".

+

All routines return 0 if successful.

+

defwStartScanchains

+

Starts the SCANCHAINS statement.

+

Syntax

+
+ int defwStartScanchains(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of scan chains defined in the SCANCHAINS statement.
+

defwEndScanchains

+

Ends the SCANCHAINS statement. If count specified in the defwStartScanChains routine is not the same as the actual number of defwScanChain routines used, this routine returns DEFW_BAD_DATA.

+

Syntax

+
+ int defwEndScanchains() +
+

defwScanchain

+

Starts a scan chain specification. This routine must be used the number of times specified in the defwStartScanchains count argument.

+

Syntax

+
+ int defwScanchain(
const char* chainName) +
+

Arguments

+

+ + chainName +

+
Specifies the name of the scan chain.
+

defwScanchainCommonscanpins

+

Writes a COMMONSCANPINS statement. The COMMONSCANPINS statement is optional and can be used only once for each scan chain.

+

Syntax

+
+ int defwScanchainCommonscanpins(
const char* inst1,
const char* pin1,
const char* inst2,
const char* pin2) +
+

Arguments

+

+ + inst1 inst2 +

+
Optional arguments that specify the common scan-in and scan-out pins. The inst1 argument can have the value IN or OUT. The inst2 argument can have the remaining IN or OUT value not specified in the inst1 argument. Specify NULL to ignore either of these arguments.
+

+ + pin1 pin2 +

+
Specifies the names of the scan-in and scan-out pins that correspond with the value of inst1 and inst2. Specify NULL to ignore either of these arguments.
+

Note: The inst1/pin1 and inst2/pin2 arguments must be used as pairs. If you specify NULL for either inst1 or inst2, you must also specify NULL for the corresponding pin1 or pin2. Similarly, if you specify IN or OUT for inst1 or inst2, you must specify a pin name for the corresponding pin1 or pin2.

+

defwScanchainFloating

+

Writes a FLOATING statement. The FLOATING statement is optional and can be used more than once for each scan chain.

+

Syntax

+
+ int defwScanchainFloating(
const char* floatingComp,
const char* inst1,
const char* pin1,
const char* inst2,
const char* pin2) +
+

Arguments

+

+ + floatingComp +

+
Specifies the floating component name.
+

+ + inst1 inst2 +

+
Optional arguments that specify the in and out pins for the component. The inst1 argument can have the value IN or OUT. The inst2 argument can have the remaining IN or OUT value not specified in the inst1 argument. Specify NULL to ignore either of these arguments.
+

+ + pin1 pin2 +

+
Specifies the names of the in and out pins that correspond with the value of inst1 and inst2. Specify NULL to ignore either of these arguments.
+

Note: The inst1/pin1 and inst2/pin2 arguments must be used as pairs. If you specify NULL for either inst1 or inst2, you must also specify NULL for the corresponding pin1 or pin2. Similarly, if you specify IN or OUT for inst1 or inst2, you must specify a pin name for the corresponding pin1 or pin2.

+

defwScanchainFloatingBits

+

Writes a FLOATING statement that contains BITS information. The FLOATING statement is optional and can be used more than once for each scan chain.

+

Syntax

+
+ int defwScanchainFloatingBits(
const char* floatingComp,
const char* inst1,
const char* pin1,
const char* inst2,
const char* pin2,
int bits) +
+

Arguments

+

+ + floatingComp +

+
Specifies the floating component name.
+

+ + inst1 inst2 +

+
Optional arguments that specify the in and out pins for the component. The inst1 argument can have the value IN or OUT. The inst2 argument can have the remaining IN or OUT value not specified in the inst1 argument. Specify NULL to ignore either of these arguments.
+

+ + pin1 pin2 +

+
Specifies the names of the in and out pins that correspond with the value of inst1 and inst2. Specify NULL to ignore either of these arguments.

Note: The inst1/pin1 and inst2/pin2 arguments must be used as pairs. If you specify NULL for either inst1 or inst2, you must also specify NULL for the corresponding pin1 or pin2. Similarly, if you specify IN or OUT for inst1 or inst2, you must specify a pin name for the corresponding pin1 or pin2.
+

+ + bits +

+
Optional argument that specifies the sequential bit length of any chain element. Specify -1 to ignore this argument.
+

defwScanchainOrdered

+

Writes an ORDERED statement. The ORDERED statement specifies an ordered list of scan chains. The ORDERED statement is optional and can be used more than once for each scan chain.

+

Syntax

+
+ int defwScanchainOrdered(
const char* name1,
const char* inst1,
const char* pin1,
const char* inst2,
const char* pin2,
const char* name2,
const char* inst3,
const char* pin3,
const char* inst4,
const char* pin4) +
+

Arguments

+

+ + name1 name2 +

+
Specifies the fixed component names. You must specify both name1 and name2 the first time you call this routine within a scanchain. If you call this routine multiple times within a scanchain, you only need to specify name1.
+

+ + inst1 inst2 inst3 inst4 +

+
Optional arguments that specify the scan-in and scan-out pins for the components. The inst1 and inst3 arguments can have the value IN or OUT. The inst2 and inst4 arguments can have the remaining IN or OUT not specified in the inst1 or inst3 arguments. Specify NULL to ignore any of these arguments.
+

+ + pin1 pin2 pin3 pin4 +

+
Specifies the names of the scan-in and scan-out pins that correspond with the inst* values. Specify NULL to ignore any of these arguments.
Note: The inst*/pin* arguments must be used as pairs. If you specify NULL for inst1, you must also specify NULL for the corresponding pin1. Similarly, if you specify IN or OUT for inst1, you must specify a pin name for the corresponding pin1.
+

defwScanchainOrderedBits

+

Writes an ORDERED statement that contains BITS information. The ORDERED statement specifies an ordered list of scan chains. The ORDERED statement is optional and can be used more than once for each scan chain.

+

Syntax

+
+ int defwScanchainOrderedBits(
const char* name1,
const char* inst1,
const char* pin1,
const char* inst2,
const char* pin2,
int bits1,
const char* name2,
const char* inst3,
const char* pin3,
const char* inst4,
const char* pin4,
int bits2) +
+

Arguments

+

+ + name1 name2 +

+
Specifies the fixed component names. You must specify both name1 and name2 the first time you call this routine within a scanchain. If you call this routine multiple times within a scanchain, you only need to specify name1.
+

+ + inst1 inst2 inst3 inst4 +

+
Optional arguments that specify the scan-in and scan-out pins for the components. The inst1 and inst3 arguments can have the value IN or OUT. The inst2 and inst4 arguments can have the remaining IN or OUT not specified in the inst1 or inst3 arguments. Specify NULL to ignore any of these arguments.
+

+ + pin1 pin2 pin3 pin4 +

+
Specifies the names of the scan-in and scan-out pins that correspond with the inst* values. Specify NULL to ignore any of these arguments.
Note: The inst*/pin* arguments must be used as pairs. If you specify NULL for inst1, you must also specify NULL for the corresponding pin1. Similarly, if you specify IN or OUT for inst1, you must specify a pin name for the corresponding pin1.
+

+ + bits* +

+
Optional argument that specifies the sequential bit length of any chain element. Specify -1 to ignore this argument.
+

defwScanchainPartition

+

Writes a PARTITION statement. The PARTITION statement is optional and can be used only once to define a scan chain.

+

Syntax

+
+ int defwScanchainPartition(
const char* name,
int maxBits) +
+

Arguments

+

+ + name +

+
Specifies a partition name. A partition name associates each chain with a partition group, which determines their compatibility for repartitioning by swapping elements between them. Chains with matching PARTITION names constitute a swap-compatible group.
+

+ + maxBits +

+
Optional argument that specifies the maximum bit length that the chain can grow to in the partition. Specify -1 to ignore this argument.
+

defwScanchainStart

+

Writes a START statement. The START statement is required and can be used only once to define a scan chain.

+

Syntax

+
+ int defwScanchainStart(
const char* inst,
const char* pin) +
+

Arguments

+

+ + inst +

+
Specifies the start of the scan chain. You can specify a component name, or the keyword PIN to specify an I/O pin.
+

+ + pin +

+
Specifies the out pin name. If you do not specify the out pin, DEF uses the out pin specified for common scan pins. If the scan chain starts at an I/O pin, you must specify the I/O pin name as the out pin.
+

defwScanchainStop

+

Writes a STOP statement. The STOP statement is required and can be used only once to define a scan chain.

+

Syntax

+
+ int defwScanchainStop(
const char* inst,
const char* pin) +
+

Arguments

+

+ + inst +

+
Specifies the end point of the scan chain. You can specify a component name, or the keyword PIN to specify an I/O pin.
+

+ + pin +

+
Specifies the in pin name. If you do not specify the in pin, DEF uses the in pin specified for common scan pins. If the scan chain starts at an I/O pin, you must specify the I/O pin name as the in pin.
+

Scan Chain Example

+

The following example shows a callback routine with the type defwScanchainCbkType.

+
+ int scanchainCB (defwCallbackType_e type,
defiUserData userData) {
int res;
// Check if the type is correct
if (type != defwScanchainCbkType) {
printf("Type is not defwScanchainCbkType, terminate
        writing.\n");
return 1;
}
+
+
+     res = defwStartScanchains(1);
CHECK_RES(res);
res = defwScanchain("the_chain");
CHECK_RES(res);
res = defwScanchainCommonscanpins("IN", "PA1", "OUT", "PA2")
CHECK_RES(res);
res = defwScanchainStart("PIN", "scanpin");
CHECK_RES(res);
res = defwScanchainStop("cell4", "PA2");
CHECK_RES(res);
res = defwScanchainOrdered("cell2", "IN", "PA0", NULL
                        NULL, "cell1", "OUT", "P10", NULL,
                        NULL);
CHECK_RES(res);
res = defwScanchainFloating("scancell1", "IN", "PA0",
                        NULL, NULL)
CHECK_RES(res);
res = defwEndScanchain();
CHECK_RES(res);
return 0;} +
+

Special Nets

+

Special Nets routines write a DEF SPECIALNETS statement. The SPECIALNETS statement is optional and can be used only once in a DEF file. For syntax information about the DEF SPECIALNETS statement, see "Special Nets" in the LEF/DEF Language Reference.

+

A SPECIALNETS statement must start and end with the defwStartSpecialNets and defwEndSpecialNets routines. All special nets must be defined between these routines. Each individual special net must start and end with the defwSpecialNet and defwSpecialNetEndOneNet routines.

+

For examples of the routines described here, see "Special Nets Example".

+

In addition to the routines in this section, you can also include routines that form a specialWiring statement and a PROPERTY statement. For information about these routines, see "Special Wiring" and "Property Statements".

+

All routines return 0 if successful.

+

defwStartSpecialNets

+

Starts the SPECIALNETS statement.

+

Syntax

+
+ int defwStartSpecialNets(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of special nets defined in the SPECIALNETS statement.
+

defwEndSpecialNets

+

Ends the SPECIALNETS statement. If count specified in defwStartSpecialNets is not the same as the actual number of defwSpecialNet routines used, this routine returns DEFW_BAD_DATA.

+

Syntax

+
+ int defwEndSpecialNets() +
+

defwSpecialNet

+

Starts a special net description. Each special net in the SPECIALNETS statement must start and end with defwSpecialNet and defwSpecialNetEndOneNet.

+

Syntax

+
+ int defwSpecialNet(
const char* netName) +
+

Arguments

+

+ + netName +

+
Specifies the name of the net to define.
+

defwSpecialNetEndOneNet

+

Ends the special net description started with defwSpecialNet. Each special net in the SPECIALNETS statement must start and end with defwSpecialNet and defwSpecialNetEndOneNet.

+

Syntax

+
+ int defwSpecialNetEndOneNet() +
+

defwSpecialNetConnection

+

Specifies the special pin and component information for the special net. This routine is optional and can be used only once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ int defwSpecialNetConnection(
const char* compNameRegExpr,
const char* pinName,
int synthesized) +
+

Arguments

+

+ + compNameRegExpr +

+
Specifies a component name or a regular expression that specifies a set of component names.
+

+ + pinName +

+
Specifies the name of the special pin on the net that corresponds to the component. During evaluation of the regular expression, components that match the expression but do not have a pin named pinName are ignored.
+

+ + synthesized +

+
Optional argument that marks the pin as part of a synthesized scan chain.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

    

+
+

0

+
+

Argument is ignored.

+
+

   

+
+

1

+
+

Writes a SYNTHESIZED statement.

+
+

defwSpecialNetEstCap

+

Writes an ESTCAP statement. The ESTCAP statement is optional and can be used only once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ int defwSpecialNetEstCap(
double wireCap) +
+

Arguments

+

+ + wireCap +

+
Specifies the estimated wire capacitance for the net. ESTCAP can be loaded with simulation data to generate net constraints for timing-driven layout.
+

defwSpecialNetFixedBump

+

Writes a FIXEDBUMP statement that indicates the bump cannot be assigned to a different pin. The FIXEDBUMP statement is optional and can be used only once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ defwSpecialNetFixedBump() +
+

defwSpecialNetOriginal

+

Writes an ORIGINAL statement. The ORIGINAL statement is optional and can be used only once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ int defwSpecialNetOriginal(
const char* netName) +
+

Arguments

+

+ + netName +

+
Specifies the original net partitioned to create multiple nets, including the current net.
+

defwSpecialNetPattern

+

Writes a PATTERN statement. The PATTERN statement is optional and can be used only once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ int defwSpecialNetPattern(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the routing pattern used for the net.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

      

+
+

BALANCED

+
+

Used to minimize skews in timing delays for clock nets.

+
+

       

+
+

STEINER

+
+

Used to minimize net length.

+
+

       

+
+

TRUNK

+
+

Used to minimize delay for global nets.

+
+

       

+
+

WIREDLOGIC

+
+

Used in ECL designs to connect output and mustjoin pins before routing to the remaining pins.

+
+

defwSpecialNetSource

+

Writes a SOURCE statement. The SOURCE statement is optional and can only be used once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ int defwSpecialNetSource(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the source of the net.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

DIST

+
+

Net is the result of adding physical components (that is, components that only connect to power or ground nets), such as filler cells, well-taps, tie-high and tie-low cells, and decoupling caps.

+
+

    

+
+

NETLIST

+
+

Net is defined in the original netlist. This is the default value, and is not normally written out in the DEF file.

+
+

     

+
+

TEST

+
+

Net is part of a scanchain.

+
+

   

+
+

TIMING

+
+

Net represents a logical rather than physical change to netlist, and is used typically as a buffer for a clock-tree, or to improve timing on long nets.

+
+

   

+
+

USER

+
+

Net is user defined.

+
+

defwSpecialNetUse

+

Writes a USE statement. The USE statement is optional and can be used only once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ int defwSpecialNetUse(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies how the net is used.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

ANALOG

+
+

Used as a analog signal net.

+
+

     

+
+

CLOCK

+
+

Used as a clock net.

+
+

    

+
+

GROUND

+
+

Used as a ground net.

+
+

      

+
+

POWER

+
+

Used as a power net.

+
+

    

+
+

RESET

+
+

Used as a reset net.

+
+

     

+
+

SCAN

+
+

Used as a scan net.

+
+

    

+
+

SIGNAL

+
+

Used as digital signal net.

+
+

    

+
+

TIEOFF

+
+

Used as a tie-high or tie-low net.

+
+

defwSpecialNetVoltage

+

Writes a VOLTAGE statement. The VOLTAGE statement is optional and can be used only once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ int defwSpecialNetVoltage(
double volts) +
+

Arguments

+

+ + volts +

+
Specifies the voltage for the net as an integer in units of .001 volts. For Example, 1.5 v is equal to 1500 in DEF.
+

defwSpecialNetWeight

+

Writes a WEIGHT statement. The WEIGHT statement is optional and can be used only once for each special net in the SPECIALNETS statement.

+

Syntax

+
+ int defwSpecialNetWeight(
double weight) +
+

Arguments

+

+ + weight +

+
Specifies the weight of the net. Automatic layout tools attempt to shorten the lengths of nets with high weights. Do not specify a net weight larger than 10, or assign weights to more than 3 percent of the nets in a design.
+

Special Nets Example

+

The following example shows a callback routine with the type defwSNetCbkType. This example only shows the usage of some functions related to special net.

+
+ int snetCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char **coorX, **coorY;
+
+
+ // Check if the type is correct
if (type != defwSNetCbkType) {
printf("Type is not defwSNetCbkType, terminate
    writing.\n");
return 1;
}
    res = defwStartSpecialNets(2);
CHECK_RES(res);
res = defwSpecialNet("net1");
CHECK_RES(res);
res = defwSpecialNetConnection("cell1", "VDD", 0);
CHECK_RES(res);
res = defwSpecialNetWidth("M1", 200);
CHECK_RES(res);
res = defwSpecialNetVoltage(3.2);
CHECK_RES(res);
res = defwSpecialNetSpacing("M1", 200, 190, 210);
CHECK_RES(res);
res = defwSpecialNetSource("TIMING");
CHECK_RES(res);
res = defwSpecialNetOriginal("VDD");
CHECK_RES(res);
res = defwSpecialNetUse("POWER");
CHECK_RES(res);
res = defwSpecialNetWeight(30);
CHECK_RES(res);
res = defwStringProperty("contype", "star");
CHECK_RES(res);
res = defwIntProperty("ind", 1);
CHECK_RES(res);
res = defwRealProperty("maxlength", 12.13);
CHECK_RES(res);
res = defwSpecialNetEndOneNet();
CHECK_RES(res);
res = defwSpecialNet("VSS");
CHECK_RES(res);
res = defwSpecialNetConnection("cell1", "GND", 0);
CHECK_RES(res);
    ...
// An example on Special Wiring can be found under the
// Special Wiring section.
...
// An example on SpecialNet Shield can be found under the
// Shielded Routing section.
    res = defwSpecialNetPattern("STEINER");
CHECK_RES(res);
res = defwSpecialNetEstCap(100);
CHECK_RES(res);
res = defwSpecialNetEndOneNet();
CHECK_RES(res);
res = defwEndSpecialNets();
CHECK_RES(res);
return 0;} +
+

Special Wiring

+

Special wiring routines form a specialWiring statement that can be used to define the wiring for both routed and shielded nets.The specialWiring statement is optional and can be used more than once in a SPECIALNET statement. For syntax information about the DEF SPECIALNETS statement, see "Special Nets" in the LEF/DEF Language Reference.

+

A specialWiring statement can include routines to define either rectangles, polygons, or a path of points to create the routing for the nets. Each path of points must start and end with the defwSpecialNetPathStart and defwSpecialNetPathEnd routines. If defined, a specialWiring statement must be included between the defwSpecialNet and defwEndOneNet routines.

+

For examples of the routines described here, see "Special Wiring Example".

+

All routines return 0 if successful.

+

defwSpecialNetPathStart

+

Starts a specialWiring statement. Each specialWiring statement must start and end with defwSpecialNetPathStart and defwSpecialNetPathEnd.

+

Syntax

+
+ int defwSpecialNetPathStart(
const char* type) +
+

Arguments

+

+ + type +

+
Specifies the special wiring type. If no wiring is specified for a particular net, the net is unrouted.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

      

+
+

COVER

+
+

Specifies that the wiring cannot be moved by either automatic layout or interactive commands.

+
+

     

+
+

FIXED

+
+

Specifies that the wiring cannot be moved by automatic layout, but can be changed by interactive commands.

+
+

      

+
+

ROUTED

+
+

Specifies that the wiring can be moved by automatic layout tools.

+
+

     

+
+

SHIELD

+
+

Specifies that the special net being defined shields a regular net.

+
+

 

+
+

NEW

+
+

Indicates a new wire segment.

+
+

defwSpecialNetPathEnd

+

Ends the specialWiring statement. Each specialWiring statement must start and end with defwSpecialNetPathStart and defwSpecialNetPathEnd.

+

Syntax

+
+ int defwSpecialNetPathEnd() +
+

defwSpecialNetPathLayer

+

Writes a LAYER statement. Either a LAYER, POLYGON, or RECT statement is required for each specialWiring statement.The LAYER statement can be used more than once for each specialWiring statement.

+

Syntax

+
+ int defwSpecialNetPathLayer(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which the wire lies.
+

defwSpecialNetPathPoint

+

Defines the center line coordinates of the route on the layer specified with defwSpecialNetPathLayer. Either this routine or defwSpecialNetPathPointWithWireExt is required with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.

+

Syntax

+
+ int defwSpecialNetPathPoint(
int numPts,
const char** pointX,
const char** pointY) +
+

Arguments

+

+ + numPts +

+
Specifies the number of points in the route.
+

+ + pointX pointY +

+
Specifies the route coordinates.
+

defwSpecialNetPathPointWithWireExt

+

Defines the center line coordinates and wire extension value of the route on the layer specified with defwSpecialNetPathLayer. Either this routine or defwSpecialNetPathPoint is required with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.

+

Syntax

+
+ defwSpecialNetPathPointWithWireExt(
int numPoints,
const char** pointX,
const char** pointY,
const char** value) +
+

Arguments

+

+ + numPoints +

+
Specifies the number of points in the route.
+

+ + pointX pointY +

+
Specifies the route coordinates.
+

+ + value +

+
Optional argument that specifies the amount by which the wire is extended past the endpoint of the segment. Specify NULL to ignore this argument.
+

defwSpecialNetPathShape

+

Writes a SHAPE statement. The SHAPE statement is optional with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.

+

Syntax

+
+ int defwSpecialNetPathShape(
const char* shapeType) +
+

Arguments

+

+ + shapeType +

+
Specifies a wire with special connection requirements because of its shape.
Value: RING, PADRING, BLOCKRING, STRIPE, FOLLOWPIN, IOWIRE, COREWIRE, BLOCKWIRE, FILLWIRE, BLOCKAGEWIRE, or DRCFILL
+

defwSpecialNetPathStyle

+

Writes a STYLE statement. A STYLE statement is optional with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.

+

Syntax

+
+ defwSpecialNetStyle(
int styleNum) +
+

Arguments

+

+ + styleNum +

+
Specifies a previously defined style number from the STYLES section in this DEF file.
+

defwSpecialNetPathVia

+

Specifies a via for the special wiring. This routine is optional with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.

+

Syntax

+
+ int defwSpecialNetPathVia(
const char* viaName) +
+

Arguments

+

+ + viaName +

+
Specifies a via to place at the last point of the route.
+

defwSpecialNetPathViaData

+

Creates an array of power vias of the via specified with defwSpecialNetPathVia. This routine is optional with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.

+

Syntax

+
+ int defwSpecialNetPathViaData(
int numX,
int numY,
int stepX,
int stepY) +
+

Arguments

+

+ + numX numY +

+
Specifies the number of vias to create in the x and y directions.
+

+ + stepX stepY +

+
Specifies the step distance between vias, in the x and y directions
+

defwSpecialNetPathWidth

+

Writes a WIDTH statement. The WIDTH statement is required with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.

+

Syntax

+
+ int defwSpecialNetPathWidth(
int width) +
+

Arguments

+

+ + width +

+
Specifies the width for wires on the layer specified with defwSpecialNetPathLayer.
+

defwSpecialNetShieldNetName

+

Specifies the name of a regular net to be shielded by the special net being defined. This routine is required if SHIELD is specified in the defwSpecialNetPathStart routine and can be used only once for each specialWiring statement.

+

Syntax

+
+ int defwSpecialNetShieldNetName(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the name of the regular net to be shielded.
+

defwSpecialNetPolygon

+

Writes a POLYGON statement. Either a LAYER, POLYGON, or RECT statement is required for each specialWiring statement. The POLYGON statement can be used only once for each specialWiring statement.

+

Syntax

+
+ defwSpecialNetPolygon(
const char* layerName,
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to generate the polygon.
+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon geometry on layerName. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+

defwSpecialNetRect

+

Writes a RECT statement. Either a LAYER, POLYGON, or RECT statement is required for each specialWiring statement. The RECT statement can be used only once for each specialWiring statement.

+

Syntax

+
+ defwSpecialNetRect(
const char* layerName,
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the rectangle.
+

+ + xl yl xh yh +

+
Specifies the coordinates of two points which define the opposite corners of the rectangle.
+

Special Wiring Example

+

The following example only shows the usage of some functions related to special wiring in a special net. This example is part of the special net callback routine.

+
+ int snetCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char **coorX, **coorY;
+
+
+     ...
res = defwSpecialNetPathStart("ROUTED");
CHECK_RES(res);
res = defwSpecialNetPathLayer("M1");
CHECK_RES(res);
res = defwSpecialNetPathWidth(250);
CHECK_RES(res);
res = defwSpecialNetPathShape("IOWIRE");
CHECK_RES(res);
coorX = (const char**)malloc(sizeof(char*)*3);
coorY = (const char**)malloc(sizeof(char*)*3);
coorX[0] = strdup("5");
coorY[0] = strdup("15");
coorX[1] = strdup("125");
coorY[1] = strdup("*");
coorX[2] = strdup("245");
coorY[2] = strdup("*");
res = defwSpecialNetPathPoint(3, coorX, coorY);
CHECK_RES(res);
res = defwSpecialNetPathEnd();
free((char*)coorX[0]);
free((char*)coorY[0]);
free((char*)coorX[1]);
free((char*)coorY[1]);
...
return 0;} +
+

Shielded Routing

+

The shielded routing routines form a shielded routing specification that can be used to define a special net. The shielded routing specification is optional and can be used more than once in a SPECIALNET statement. For syntax information about the DEF SPECIALNETS statement, see Special Nets in the LEF/DEF Language Reference.

+

You must begin and end a shielded routing specification with the defwSpecialNetShieldStart and defwSpecialNetShieldEnd routines. You must define all shielded routing between these routines. The shielded routing routines must be included between the defwSpecialNet and defwEndOneNet routines.

+

For examples of the routines described here, see "Shielded Routing Example".

+

defwSpecialNetShieldStart

+

Starts the shielded routing specification. This routine is optional and can be used only once to define each special net shield.

+

Syntax

+
+ int defwSpecialNetShieldStart(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the net shield name.
+

defwSpecialNetShieldEnd

+

Ends the shielded routing specification.

+

Syntax

+
+ int defwSpecialNetShieldEnd() +
+

defwSpecialNetShieldLayer

+

Writes a LAYER statement. The LAYER statement is required and can be used only once per special net shield.

+

Syntax

+
+ int defwSpecialNetShieldLayer(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the layer on which the wire lies.
+

defwSpecialNetShieldPoint

+

Specifies the points of the wire path in the special net shield. This routine is optional and can be used more than once per special net shield.

+

Syntax

+
+ int defwSpecialNetShieldPoint(
int numPts,
const char** pointx,
const char** pointy) +
+

Arguments

+

+ + numPts +

+
Specifies the number of points in the special net shield.
+

+ + pointx pointy +

+
Specifies the coordinate locations for the path points.
+

defwSpecialNetShieldShape

+

Writes a SHAPE statement. The SHAPE statement is optional and can be used only once per special net shield.

+

Syntax

+
+ int defwSpecialNetShieldShape(
const char* shapeType) +
+

Arguments

+

+ + shapeType +

+
Specifies a wire with special connection requirements because of its shape.
Value: RING, PADRING, BLOCKRING, STRIPE, FOLLOWPIN, IOWIRE, COREWIRE, BLOCKWIRE, FILLWIRE, or BLOCKAGEWIRE
+

defwSpecialNetShieldVia

+

Specifies a via name for the special net shield. This routine is optional and can be used more than once per special net shield.

+

Syntax

+
+ int defwSpecialNetShieldVia(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the via to place at the last specified path coordinate.
+

defwSpecialNetShieldViaData

+

Creates an array of power vias of the via specified with the defwSpecialNetShieldVia routine. This routine is optional and can be used more than once for a special net.

+

Syntax

+
+ int defwSpecialNetShieldViaData(
int numX,
int numY,
int stepX,
int stepY) +
+

Arguments

+

+ + numX numY +

+
Specifies the number of vias to create in the x and y directions.
+

+ + stepX stepY +

+
Specifies the step distance in the x and y directions.
+

defwSpecialNetShieldWidth

+

Writes a WIDTH statement. The WIDTH statement is required and can be used only once per special net shield.

+

Syntax

+
+ int defwSpecialNetShieldWidth(
int width) +
+

Arguments

+

+ + width +

+
Specifies the wire width.
+

Shielded Routing Example

+

The following example only shows the usage of some functions related to shielded routing in a special net. This example is part of the special net callback routine.

+
+ int snetCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char **coorX, **coorY;
...
res = defwSpecialNetShieldStart("my_net");
CHECK_RES(res);
res = defwSpecialNetShieldLayer("M2");
CHECK_RES(res);
res = defwSpecialNetShieldWidth(90);
CHECK_RES(res);
coorX[0] = strdup("14100");
coorY[0] = strdup("342440");
coorX[1] = strdup("13920");
coorY[1] = strdup("*");
res = defwSpecialNetShieldPoint(2, coorX, coorY);
CHECK_RES(res);
res = defwSpecialNetShieldVia("M2_TURN");
CHECK_RES(res);
free((char*)coorX[0]);
free((char*)coorY[0]);
coorX[0] = strdup("*");
coorY[0] = strdup("263200");
res = defwSpecialNetShieldPoint(1, coorX, coorY);
CHECK_RES(res);
res = defwSpecialNetShieldVia("M1_M2");
CHECK_RES(res);
free((char*)coorX[0]);
free((char*)coorY[0]);
coorX[0] = strdup("2400");
coorY[0] = strdup("*");
res = defwSpecialNetShieldPoint(1, coorX, coorY);
CHECK_RES(res);
res = defwSpecialNetShieldEnd();
...
return 0;} +
+

Slots

+

Slots routines write a DEF SLOTS statement. The SLOTS statement is optional and can be used only once in a DEF file. For syntax information about the DEF SLOTS statement, see "Slots" in the LEF/DEF Language Reference.

+

The SLOTS statement must start and end with the defwStartSlots and defwEndSlots routines. All slots must be defined between these routines.

+

All routines return 0 if successful.

+

defwStartSlots

+

Starts a SLOTS statement.

+

Syntax

+
+ int defwStartSlots(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of defwSlotLayer routines in the SLOTS statement.
+

defwEndSlots

+

Ends the SLOTS statement.

+

Syntax

+
+ int defwEndSlots() +
+

defwSlotLayer

+

Writes a LAYER statement. The LAYER statement is required for each slot and can be used more than once in a SLOTS statement.

+

Syntax

+
+ int defwSlotLayer(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the slot.
+

defwSlotPolygon

+

Writes a POLYGON statement. Either a POLYGON or RECT statement is required with a LAYER statement. The POLYGON statement can be used more than once for each slot in the SLOTS statement.

+

Syntax

+
+ defwSlotPolygon(
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+

defwSlotRect

+

Writes a RECT statement. The RECT statement is required and can be used more than once for each slot in the SLOTS statement.

+

Syntax

+
+ int defwSlotRect(
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + xl yl xh yh +

+
Specifies the coordinates of the slot geometry.
+

Styles

+

Styles routines write a DEF STYLES statement. The STYLES statement is optional and can be used only once in a DEF file. For syntax information about the STYLES statement, see "Styles" in the LEF/DEF Language Reference.

+

The STYLES statement must start and end with the defwStartStyles and defwEndStyles routines.

+

All routines return 0 if successful.

+

defwStartStyles

+

Starts the STYLES statement.

+

Syntax

+
+ defwStartStyles(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of styles defined in the STYLES statement.
+

defwEndStyles

+

Ends the STYLES statement.

+

Syntax

+
+ defwEndStyles() +
+

defwStyles

+

Defines a style. This routine is required and can be used more than once in the STYLES statement.

+

Syntax

+
+ defwStyles(
int styleNums,
int num_points,
double* xp,
double* yp) +
+

Arguments

+

+ + styleNums +

+
Defines a style. styleNums is a positive integer that is greater than or equal to 0 (zero), and is used to reference the style later in the DEF file. When defining multiple styles, the first styleNums must be 0 (zero), and any following styleNums should be numbered consecutively so that a table lookup can be used to find them easily.
+

+ + num_points +

+
Specifies the number of points in the style.
+

+ + xp yp +

+
Specifies a sequence of points to generate a polygon geometry. The syntax corresponds to a coordinate pair, such as x y. Specify an asterisk (*) to repeat the same value as the previous x or y value from the last point. The polygon must be convex. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle, and must enclose the point (0 0).
+

Technology

+

The Technology routine writes a DEF TECHNOLOGY statement. The TECHNOLOGY statement is optional and can be used only once in a DEF file. For syntax information about the TECHNOLOGY statement, see "Technology" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

defwTechnology

+

Writes a TECHNOLOGY statement.

+

Syntax

+
+ int defwTechnology(
const char* technology) +
+

Arguments

+

+ + technology +

+
Specifies a technology name for the design in the database.
+

Tracks

+

The Tracks routine writes a DEF TRACKS statement. The TRACKS statement is optional and can be used only once in a DEF file. For syntax information about the DEF TRACKS statement, see Tracks in the LEF/DEF Language Reference.

+

If the DEF file contains a ROWS statement, the TRACKS statement must follow it. For more information about the DEF ROWS writer routine, see "Rows".

+

For examples of the routines described here, see "Tracks Example".

+

This routine returns 0 if successful.

+

defwTracks

+

Writes a TRACKS statement.

+

Syntax

+
+ int defwTracks(
const char* master,
int doStart,
int doCount,
int doStep,
int numLayers,
const char** layers) +
+

Arguments

+

+ + doCount +

+
Specifies the number of tracks to create.
+

+ + doStep +

+
Specifies the step spacing between the tracks.
+

+ + doStart +

+
Specifies the coordinate of the first line.
+

+ + layers +

+
Specifies the routing layers used for the tracks.
+

+ + master +

+
Specifies the direction for the first track defined.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

   

+
+

X

+
+

Indicates vertical lines.

+
+

   

+
+

Y

+
+

Indicates horizontal lines.

+
+

+ + numLayers +

+
Specifies the number of routing layers to use for tracks.
+

Tracks Example

+

The following example shows a callback routine with the type defwTrackCbkType.

+
+ int trackCB (defwCallbackType_e type,
defiUserData userData) {
int res;
const char** layers;
// Check if the type is correct
if (type != defwTrackCbkType) {
printf("Type is not defwTrackCbkType, terminate
        writing.\n");
return 1;
}
+
+
+     layers = (const char**)malloc(sizeof(char*)*1);
layers[0] = strdup("M1");
res = defwTracks("X", 3000, 40, 120, 1, layers);
CHECK_RES(res);
free((char*)layers[0]);
layers[0] = strdup("M2");
res = defwTracks("Y", 5000, 10, 20, 1,layers);
CHECK_RES(res);
free((char*)layers[0]);
free((char*)layers);
res = defwNewLine();
CHECK_RES(res);
return 0;} +
+

Units

+

The Units routine writes a DEF UNITS statement. The UNITS statement is optional and can be used only once in a DEF file. For syntax information about the UNITS statement, see "Units" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

defwUnits

+

Writes a UNITS statement.

+

Syntax

+
+ int defwUnits(
int units) +
+

Arguments

+

+ + units +

+
Specifies the convert factor used to convert DEF distance units into LEF distance units.
+

Version

+

The Version routine writes a DEF VERSION statement. The VERSION statement is required and can be used only once in a DEF file. For syntax information about the DEF VERSION statement, see "Version" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

defwVersion

+

Writes a VERSION statement.

+

Syntax

+
+ int defwVersion(
int vers1,
int vers2) +
+

Arguments

+

+ + version1 +

+
Specifies the major number.
+

+ + version2 +

+
Specifies the minor number.
+

Vias

+

Vias routines write a DEF VIAS statement. The VIAS statement is optional and can be used only once in a DEF file. For syntax information about the DEF VIAS statement, see "Vias" in the LEF/DEF Language Reference.

+

The VIAS statement must start and end with the defwStartVias and defwEndVias routines. All vias must be defined between these routines. Each individual via must start and end with the defwViaName and defwOneViaEnd routines.

+

For examples of the routines described here, see "Vias Example".

+

All routines return 0 if successful.

+

defwStartVias

+

Starts a VIAS statement.

+

Syntax

+
+ int defwStartVias(
int count) +
+

Arguments

+

+ + count +

+
Specifies the number of vias defined in the VIAS statement.
+

defwEndVias

+

Ends the VIAS statement.

+

If the count specified in defwStartVias is not the same as the actual number of defwViaName routines used, this routine returns DEFW_BAD_DATA.

+

Syntax

+
+ int defwEndVias(void) +
+

defwViaName

+

Starts a via description in the VIAS statement. Each via in the VIAS statement must start and end with defwViaName and defwOneViaEnd. This routine must be used the exact number of times specified with count in defwStartVias.

+

Each via can include one of the following routines:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwViaPolygon
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwViaRect
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwViaViarule
+
+

Syntax

+
+ int defwViaName(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies the name of the via. Via names are generated by appending a number after the rule name. Vias are numbered in the order in which they are created.
+

defwOneViaEnd

+

Ends a via description in the VIAS statement. Each via in the VIAS statement must start and end with defwViaName and defwOneViaEnd. This routine must be used the exact number of times specified with count in defwStartVias.

+

Syntax

+
+ int defwOneViaEnd() +
+

defwViaPolygon

+

Writes a POLYGON statement for a via in the VIAS statement. Either a POLYGON, RECT, or VIARULE statement can be specified for a via. The POLYGON statement is optional and can be used more than once for each via in the VIAS statement.

+

Syntax

+
+ int defwViaPolygon(
const char* layerName,
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to generate a polygon.
+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, to the y axis, or at a 45-degree angle.
+

defwViaRect

+

Writes a RECT statement for a via in the VIAS statement. Either a POLYGON, RECT, or VIARULE statement can be specified for a via. The RECT statement is optional and can be used more than once for each via in the VIAS statement.

+

Syntax

+
+ int defwViaRect(
const char* layerName,
int xl,
int yl,
int xh,
int yh) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which the via geometry lies. All geometries for the via, including the cut layers, are output by the DEF writer.
+

+ + xl yl xh yh +

+
Defines the via geometry for the specified layer. The points are specified with respect to the via origin. In most cases, the via origin is the center of the via bounding box.
+

defwViaViarule

+

Writes a VIARULE statement for a via in the VIAS statement. Either a POLYGON, RECT, or VIARULE statement can be specified for a via. The VIARULE statement is optional and can be used only once for each via in the VIAS statement.

+

If you specify this routine, you can optionally specify the following routines:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwViaViaruleRowCol
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwViaViaruleOrigin
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwViaViaruleOffset
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defwViaViarulePattern
+
+

Syntax

+
+ defwViaViarule(
const char* viaRuleName,
double xCutSize,
double yCutSize,
const char* botMetalLayer,
const char* cutLayer,
const char* topMetalLayer,
double xCutSpacing,
double yCutSpacing,
double xBotEnc,
double yBotEnc,
double xTopEnc,
double yTopEnc) +
+

Arguments

+

+ + viaRuleName +

+
Specifies the name of the LEF VIARULE that produced this via. The VIARULE must be a VIARULE GENERATE via rule; it cannot refer to a VIARULE without a GENERATE keyword.
+

+ + xCutSize yCutSize +

+
Specifies the required width (xCutSize) and height (yCutSize) of the cut layer rectangles.
+

+ + botMetalLayer cutLayer topMetalLayer +

+
Specifies the required names of the bottom routing layer, cut layer, and top routing layer. These layer names must be previously defined in layer definitions, and must match the layer names defined in the specified LEF viaRuleName.
+

+ + xCutSpacing yCutSpacing +

+
Specifies the required x and y spacing between cuts. The spacing is measured form one cut edge to the next cut edge.
+

+ + xBotEnc yBotEnc xTopEnc yTopEnc +

+
Specifies the required x and y enclosure values for the bottom and top metal layers. The enclosure measures the distance from the cut array edge to the metal edge that encloses the cut array.
+

defwViaViaruleRowCol

+

Writes a ROWCOL statement in the VIARULE for a via. The ROWCOL statement is optional and can be used only once for each via in the VIAS statement.

+

Syntax

+
+ defwViaViaruleRowCol(
int numCutRows,
int numCutCols) +
+

Arguments

+

+ + numCutRows numCutCols +

+
Specifies the number of cut rows and columns that make up the cut array.
+

defwViaViaruleOrigin

+

Writes an ORIGIN statement in a VIARULE statement for a via. The ORIGIN statement is optional and can be used only once for each via in the VIAS statement.

+

Syntax

+
+ defwViaViaruleOrigin(
int xOffset,
int yOffset) +
+

Arguments

+

+ + xOffset yOffset +

+
Specifies the x and y offset for all of the via shapes. By default, the 0,0 origin of the via is the center of the cut array and the enclosing metal rectangles. After the non-shifted via is computed, all cut and metal rectangles are offset by adding these values.
+

defwViaViaruleOffset

+

Writes an OFFSET statement in a VIARULE statement for a via. The OFFSET statement is optional and can be used only once for each via in the VIAS statement.

+

Syntax

+
+ defwViaViaruleOffset(
int xBotOffset,
int yBotOffset,
int xTopOffset,
int yTopOffset) +
+

Arguments

+

+ + xBotOffset yBotOffset xTopOffset yTopOffset +

+
Specifies the x and y offset for the bottom and top metal layers. These values allow each metal layer to be offset independently.
By default, the
0,0 origin of the via is the center of the cut array and the enclosing metal rectangles. After the non-shifted via is computed, the metal layer rectangles are offset by adding the appropriate values--the x/y BotOffset values to the metal layer below the cut layer, and the x/y TopOffset values to the metal layer above the cut layer.
+

defwViaViarulePattern

+

Writes a PATTERN statement in a VIARULE statement for a via. The PATTERN statement is optional and can be used only once for each via in the VIAS statement.

+

Syntax

+
+ defwViaViarulePattern(
const char* cutPattern) +
+

Arguments

+

+ + cutPattern +

+
Specifies the cut pattern encoded as an ASCII string.
+

Vias Example

+

The following example shows a callback routine with the type defwViaCbkType.

+
+ int viaCB (defwCallbackType_e type,
defiUserData userData) {
int res;
+
+
+ // Check if the type is correct
if (type != defwViaCbkType) {
    printf("Type is not defwViaCbkType, terminate
    writing.\n");
return 1;
}
+
+
+     res = defwStartVias(1);
CHECK_RES(res);
res = defwViaName("VIA_ARRAY");
CHECK_RES(res);
res = defwViaRect("M1", -40, -40, 40, 40);
CHECK_RES(res);
res = defwViaRect("V1", -40, -40, 40, 40);
CHECK_RES(res);
res = defwViaRect("M2", -50, -50, 50, 50);
CHECK_RES(res);
res = defwOneViaEnd();
CHECK_RES(res);
res = defwEndVias();
CHECK_RES(res);
return 0;} +
+
+   +
+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/ch7DEFcompressed.html b/lefdef/doc/defapi/ch7DEFcompressed.html new file mode 100644 index 00000000..0abb6c86 --- /dev/null +++ b/lefdef/doc/defapi/ch7DEFcompressed.html @@ -0,0 +1,320 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

7 

+

DEF Compressed File Routines

+

The Cadence® Design Exchange Format (DEF) reader provides the following routines for opening and closing compressed DEF files. These routines are used instead of the fopen and fclose routines that are used for regular DEF files.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
defGZipOpen
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
defGZipClose
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Example
+
+

defGZipOpen

+

Opens a compressed DEF file. If the file opens with no errors, this routine returns a pointer to the file.

+

Syntax

+
+ defGZFile defGZipOpen(
const char* gzipFile,
const char* mode); +
+

Arguments

+

+ + gzipFile +

+
Specifies the compressed file to open.
+

+ + mode +

+
Specifies how to open the file. Compressed files should be opened as read only; therefore, specify "r".
+

defGZipClose

+

Closes the compressed DEF file. If the file closes with no errors, this routine returns zero.

+

Syntax

+
+ int defGZipClose(
defGZFile filePtr) ; +
+

Arguments

+

+ + filePtr +

+
Specifies a pointer to the compressed file to close.
+

Example

+

The following example uses the defGZipOpen and defGZipClose routines to open and close a compressed file.

+

+ defrInit() ; +

+

+   +

+

+ for (fileCt = 0; fileCt < numInFile; fileCt++) { +

+
+ + defrReset(); +
+
+ + // Open the compressed DEF file for the reader to read +
+
+ + if ((f = defGZipOpen(inFile[fileCt], "r")) == 0) { +
+
+ +    fprintf(stderr, "Couldn't open input file '%s'\n", inFile[fileCt]); +
+
+ +    return(2) ; +
+
+ + } +
+
+ + // Set case sensitive to 0 to start with, in History and PropertyDefinition +
+
+ + // reset it to 1. +
+
+ + res = defrRead((FILE*)f, inFile[fileCt], (void*)userData, 1); +
+
+ +   +
+
+ + if (res) +
+
+ +    fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]); +
+
+ +   +
+
+ + // Close the compressed DEF file. +
+
+ + defGZipClose(f); +
+
+ + (void)defrPrintUnusedCallbacks(fout); +
+

+ } +

+

+ fclose(fout); +

+

+   +

+

+ return 0;} +

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/ch8lefdiff.html b/lefdef/doc/defapi/ch8lefdiff.html new file mode 100644 index 00000000..07f034f9 --- /dev/null +++ b/lefdef/doc/defapi/ch8lefdiff.html @@ -0,0 +1,381 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

8 

+

DEF File Comparison Utility

+

The Cadence® Design Exchange Format (DEF) reader provides the following utility for comparing DEF files.

+

lefdefdiff

+

Compares two LEF or DEF files and reports any differences between them.

+

Because LEF and DEF files can be very large, the lefdefdiff utility writes each construct from a file to an output file in the /tmp directory. The utility writes the constructs using the format:

+
section_head/subsection/subsection/ ... /statement
+

The lefdefdiff utility then sorts the output files and uses the diff program to compare the two files. Always verify the accuracy of the diff results.

+

Note: You must specify the -lef or -def, inFileName1, and inFileName2 arguments in the listed order. All other arguments can be specified in any order after these arguments.

+

Syntax

+
+ lefdefdiff
{-lef | -def}
inFileName1
inFileName2
[-o outFileName]
[-path pathName]
[-quick]
[-d]
[-ignorePinExtra]
[-ignoreRowName]
[-h] +
+

Arguments

+

+ + -d +

+
Uses the gnu diff program to compare the files for a smaller set of differences. Use this argument only for UNIX platforms.
+

+ + -h +

+
Returns the syntax and command usage for the lefdefdiff utility.
+

+ + -ignorePinExtra +

+
Ignores any .extraN statements in the pin name. This argument can only be used when comparing DEF files.
+

+ + -ignoreRowName +

+
Ignores the row name when comparing ROW statements in the DEF files. This argument can only be used when comparing DEF files.
+

+ + inFileName1 +

+
Specifies the first LEF or DEF file.
+

+ + inFileName2 +

+
Specifies the LEF or DEF file to compare with the first file.
+

+ + -lef | -def +

+
Specifies whether you are comparing LEF or DEF files.
+

+ + -o outFileName +

+
Outputs the results of the comparison to the specified file.
Default: Outputs the results to the screen.
+

+ + -path pathName +

+
Temporarily stores the intermediate files created by the lefdefdiff utility in the specified path directory.
Default: Temporarily stores the files in the current directory
+

+ + -quick +

+
Uses the bdiff program to perform a faster comparison.
+

Example

+

The following example shows an output file created by the lefdefdiff utility after comparing two DEF files:

+
+ + #The names of the two DEF files that were compared. +
+
+ + < in.def +
+
+ + > out.def +
+
+ + #Statements listed under Deleted were found in in.def but not in out.def. +
+
+ + Deleted: +
+
+ + < BLOCKAGE LAYER m3 RECT 455 454 344 890 +
+
+ + < BLOCKAGE LAYER m3 SLOTS +
+
+ + < BLOCKAGE LAYER m4 FILLS +
+
+ + < BLOCKAGE LAYER m4 RECT 455 454 344 890 +
+
+ + < BLOCKAGE LAYER m5 PUSHDOWN +
+
+ + < BLOCKAGE LAYER m5 RECT 455 454 344 890 +
+
+ + < BLOCKAGE PLACEMENT +
+
+ + Deleted: +
+
+ + < BLOCKAGE PLACEMENT PUSHDOWN +
+
+ + Deleted: +
+
+ + < BLOCKAGE PLACEMENT RECT 4000 6000 8000 4000 +
+
+ + < BLOCKAGE PLACEMENT RECT 4000 6000 8000 4000 +
+
+ + #Changed always contains two statements: the statement as it appears in in.def and the statement as it appears in out.def. +
+
+ + Changed: +
+
+ + < COMP |i1 UNPLACED +
+
+ + < DESIGN muk +
+
+ + --- +
+
+ + > DESIGN cell +
+
+ + Changed: +
+
+ + < NET net1 USE SCAN +
+
+ + --- +
+
+ + > NET net1 WEIGHT 30 SOURCE TIMING ORIGINAL VDD USE SCAN +
+
+ + Changed: +
+
+ + < NET net3 SOURCE USER PATTERN BALANCED ORIGINAL extra_crispy USE SIGNAL +
+
+ + --- +
+
+ + > NET net3 SOURCE USER PATTERN BALANCED ORIGINAL extra_crispy +
+
+ + #Statements listed under Added were found in out.def but not in in.def. +
+
+ + Added: +
+
+ + > NET SCAN ( PIN scanpin ) +
+
+ + Added: +
+
+ + > NET net1 ( PIN pin1 ) +
+
+ + Added: +
+
+ + > NET net2 ( PIN pin2 ) +
+
+ +   +
+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/defapi.pdf b/lefdef/doc/defapi/defapi.pdf new file mode 100644 index 00000000..0637d42c --- /dev/null +++ b/lefdef/doc/defapi/defapi.pdf @@ -0,0 +1,9477 @@ +%PDF-1.4 %âãÏÓ +5635 0 obj <> endobj +xref +5635 779 +0000000016 00000 n +0000019754 00000 n +0000019954 00000 n +0000019983 00000 n +0000020035 00000 n +0000020073 00000 n +0000020223 00000 n +0000020307 00000 n +0000020388 00000 n +0000020472 00000 n +0000020556 00000 n +0000020640 00000 n +0000020724 00000 n +0000020808 00000 n +0000020892 00000 n +0000020976 00000 n +0000021060 00000 n +0000021144 00000 n +0000021228 00000 n +0000021312 00000 n +0000021396 00000 n +0000021480 00000 n +0000021564 00000 n +0000021648 00000 n +0000021732 00000 n +0000021816 00000 n +0000021900 00000 n +0000021984 00000 n +0000022068 00000 n +0000022152 00000 n +0000022236 00000 n +0000022320 00000 n +0000022404 00000 n +0000022488 00000 n +0000022572 00000 n +0000022656 00000 n +0000022740 00000 n +0000022824 00000 n +0000022908 00000 n +0000022992 00000 n +0000023076 00000 n +0000023160 00000 n +0000023244 00000 n +0000023328 00000 n +0000023412 00000 n +0000023496 00000 n +0000023580 00000 n +0000023664 00000 n +0000023748 00000 n +0000023832 00000 n +0000023916 00000 n +0000024000 00000 n +0000024084 00000 n +0000024168 00000 n +0000024252 00000 n +0000024336 00000 n +0000024420 00000 n +0000024504 00000 n +0000024588 00000 n +0000024672 00000 n +0000024756 00000 n +0000024840 00000 n +0000024924 00000 n +0000025008 00000 n +0000025092 00000 n +0000025176 00000 n +0000025260 00000 n +0000025344 00000 n +0000025428 00000 n +0000025512 00000 n +0000025596 00000 n +0000025680 00000 n +0000025764 00000 n +0000025848 00000 n +0000025932 00000 n +0000026016 00000 n +0000026100 00000 n +0000026184 00000 n +0000026268 00000 n +0000026352 00000 n +0000026436 00000 n +0000026520 00000 n +0000026604 00000 n +0000026688 00000 n +0000026772 00000 n +0000026856 00000 n +0000026940 00000 n +0000027024 00000 n +0000027108 00000 n +0000027192 00000 n +0000027276 00000 n +0000027360 00000 n +0000027444 00000 n +0000027528 00000 n +0000027612 00000 n +0000027696 00000 n +0000027780 00000 n +0000027864 00000 n +0000027948 00000 n +0000028032 00000 n +0000028116 00000 n +0000028200 00000 n +0000028284 00000 n +0000028368 00000 n +0000028452 00000 n +0000028536 00000 n +0000028620 00000 n +0000028704 00000 n +0000028788 00000 n +0000028872 00000 n +0000028956 00000 n +0000029040 00000 n +0000029124 00000 n +0000029208 00000 n +0000029292 00000 n +0000029376 00000 n +0000029460 00000 n +0000029544 00000 n +0000029628 00000 n +0000029712 00000 n +0000029796 00000 n +0000029880 00000 n +0000029964 00000 n +0000030048 00000 n +0000030132 00000 n +0000030216 00000 n +0000030300 00000 n +0000030384 00000 n +0000030468 00000 n +0000030552 00000 n +0000030636 00000 n +0000030720 00000 n +0000030804 00000 n +0000030888 00000 n +0000030972 00000 n +0000031056 00000 n +0000031140 00000 n +0000031224 00000 n +0000031308 00000 n +0000031392 00000 n +0000031476 00000 n +0000031560 00000 n +0000031644 00000 n +0000031728 00000 n +0000031812 00000 n +0000031896 00000 n +0000031980 00000 n +0000032064 00000 n +0000032148 00000 n +0000032232 00000 n +0000032316 00000 n +0000032400 00000 n +0000032484 00000 n +0000032568 00000 n +0000032652 00000 n +0000032736 00000 n +0000032820 00000 n +0000032904 00000 n +0000032988 00000 n +0000033072 00000 n +0000033156 00000 n +0000033240 00000 n +0000033324 00000 n +0000033408 00000 n +0000033492 00000 n +0000033576 00000 n +0000033660 00000 n +0000033744 00000 n +0000033828 00000 n +0000033912 00000 n +0000033996 00000 n +0000034080 00000 n +0000034164 00000 n +0000034248 00000 n +0000034332 00000 n +0000034416 00000 n +0000034500 00000 n +0000034584 00000 n +0000034668 00000 n +0000034752 00000 n +0000034836 00000 n +0000034920 00000 n +0000035004 00000 n +0000035088 00000 n +0000035172 00000 n +0000035256 00000 n +0000035340 00000 n +0000035424 00000 n +0000035508 00000 n +0000035592 00000 n +0000035676 00000 n +0000035760 00000 n +0000035844 00000 n +0000035928 00000 n +0000036012 00000 n +0000036096 00000 n +0000036180 00000 n +0000036264 00000 n +0000036348 00000 n +0000036432 00000 n +0000036516 00000 n +0000036600 00000 n +0000036684 00000 n +0000036768 00000 n +0000036852 00000 n +0000036936 00000 n +0000037020 00000 n +0000037104 00000 n +0000037188 00000 n +0000037272 00000 n +0000037356 00000 n +0000037440 00000 n +0000037524 00000 n +0000037608 00000 n +0000037692 00000 n +0000037776 00000 n +0000037860 00000 n +0000037944 00000 n +0000038028 00000 n +0000038112 00000 n +0000038196 00000 n +0000038280 00000 n +0000038364 00000 n +0000038448 00000 n +0000038532 00000 n +0000038616 00000 n +0000038700 00000 n +0000038784 00000 n +0000038868 00000 n +0000038952 00000 n +0000039036 00000 n +0000039120 00000 n +0000039204 00000 n +0000039288 00000 n +0000039372 00000 n +0000039456 00000 n +0000039540 00000 n +0000039624 00000 n +0000039708 00000 n +0000039792 00000 n +0000039876 00000 n +0000039960 00000 n +0000040044 00000 n +0000040128 00000 n +0000040212 00000 n +0000040296 00000 n +0000040380 00000 n +0000040464 00000 n +0000040548 00000 n +0000040632 00000 n +0000040716 00000 n +0000040800 00000 n +0000040884 00000 n +0000040968 00000 n +0000041052 00000 n +0000041136 00000 n +0000041220 00000 n +0000041304 00000 n +0000041388 00000 n +0000041472 00000 n +0000041556 00000 n +0000041640 00000 n +0000041724 00000 n +0000041808 00000 n +0000041892 00000 n +0000041976 00000 n +0000042060 00000 n +0000042144 00000 n +0000042228 00000 n +0000042312 00000 n +0000042396 00000 n +0000042480 00000 n +0000042564 00000 n +0000042648 00000 n +0000042732 00000 n +0000042816 00000 n +0000042900 00000 n +0000042984 00000 n +0000043068 00000 n +0000043152 00000 n +0000043236 00000 n +0000043320 00000 n +0000043403 00000 n +0000043486 00000 n +0000043569 00000 n +0000043652 00000 n +0000043735 00000 n +0000043818 00000 n +0000043901 00000 n +0000043984 00000 n +0000044067 00000 n +0000044150 00000 n +0000044233 00000 n +0000044316 00000 n +0000044399 00000 n +0000044482 00000 n +0000044565 00000 n +0000044648 00000 n +0000044731 00000 n +0000044814 00000 n +0000044897 00000 n +0000044980 00000 n +0000045063 00000 n +0000045146 00000 n +0000045229 00000 n +0000045312 00000 n +0000045395 00000 n +0000045478 00000 n +0000045561 00000 n +0000045644 00000 n +0000045727 00000 n +0000045810 00000 n +0000045893 00000 n +0000045976 00000 n +0000046059 00000 n +0000046142 00000 n +0000046225 00000 n +0000046308 00000 n +0000046391 00000 n +0000046474 00000 n +0000046557 00000 n +0000046640 00000 n +0000046723 00000 n +0000046806 00000 n +0000046889 00000 n +0000046972 00000 n +0000047055 00000 n +0000047138 00000 n +0000047221 00000 n +0000047304 00000 n +0000047387 00000 n +0000047470 00000 n +0000047553 00000 n +0000047636 00000 n +0000047719 00000 n +0000047802 00000 n +0000047885 00000 n +0000047968 00000 n +0000048051 00000 n +0000048134 00000 n +0000048217 00000 n +0000048300 00000 n +0000048383 00000 n +0000048466 00000 n +0000048549 00000 n +0000048632 00000 n +0000048715 00000 n +0000048798 00000 n +0000048881 00000 n +0000048964 00000 n +0000049047 00000 n +0000049130 00000 n +0000049213 00000 n +0000049296 00000 n +0000049379 00000 n +0000049462 00000 n +0000049545 00000 n +0000049628 00000 n +0000049711 00000 n +0000049794 00000 n +0000049877 00000 n +0000049960 00000 n +0000050043 00000 n +0000050126 00000 n +0000050209 00000 n +0000050292 00000 n +0000050375 00000 n +0000050458 00000 n +0000050541 00000 n +0000050624 00000 n +0000050707 00000 n +0000050790 00000 n +0000050873 00000 n +0000050956 00000 n +0000051039 00000 n +0000051122 00000 n +0000051205 00000 n +0000051288 00000 n +0000051371 00000 n +0000051454 00000 n +0000051537 00000 n +0000051620 00000 n +0000051702 00000 n +0000051784 00000 n +0000051865 00000 n +0000052022 00000 n +0000052074 00000 n +0000052178 00000 n +0000052593 00000 n +0000053114 00000 n +0000053555 00000 n +0000057685 00000 n +0000058410 00000 n +0000060420 00000 n +0000060481 00000 n +0000060574 00000 n +0000060753 00000 n +0000060870 00000 n +0000060987 00000 n +0000061174 00000 n +0000061275 00000 n +0000061370 00000 n +0000061559 00000 n +0000061662 00000 n +0000061757 00000 n +0000061928 00000 n +0000062102 00000 n +0000062229 00000 n +0000062417 00000 n +0000062583 00000 n +0000062733 00000 n +0000062901 00000 n +0000063005 00000 n +0000063174 00000 n +0000063362 00000 n +0000063528 00000 n +0000063691 00000 n +0000063897 00000 n +0000064034 00000 n +0000064190 00000 n +0000064286 00000 n +0000064400 00000 n +0000064546 00000 n +0000064646 00000 n +0000064794 00000 n +0000064922 00000 n +0000065056 00000 n +0000065186 00000 n +0000065328 00000 n +0000065424 00000 n +0000065518 00000 n +0000065658 00000 n +0000065800 00000 n +0000065954 00000 n +0000066084 00000 n +0000066228 00000 n +0000066372 00000 n +0000066504 00000 n +0000066628 00000 n +0000066752 00000 n +0000066862 00000 n +0000066974 00000 n +0000067098 00000 n +0000067220 00000 n +0000067316 00000 n +0000067518 00000 n +0000067600 00000 n +0000067728 00000 n +0000067854 00000 n +0000067984 00000 n +0000068116 00000 n +0000068248 00000 n +0000068376 00000 n +0000068514 00000 n +0000068640 00000 n +0000068772 00000 n +0000068900 00000 n +0000069034 00000 n +0000069160 00000 n +0000069288 00000 n +0000069428 00000 n +0000069554 00000 n +0000069688 00000 n +0000069818 00000 n +0000069956 00000 n +0000070084 00000 n +0000070216 00000 n +0000070382 00000 n +0000070520 00000 n +0000070646 00000 n +0000070752 00000 n +0000070850 00000 n +0000070960 00000 n +0000071064 00000 n +0000071160 00000 n +0000071358 00000 n +0000071458 00000 n +0000071554 00000 n +0000071706 00000 n +0000071848 00000 n +0000071958 00000 n +0000072074 00000 n +0000072182 00000 n +0000072294 00000 n +0000072408 00000 n +0000072522 00000 n +0000072632 00000 n +0000072742 00000 n +0000072856 00000 n +0000072976 00000 n +0000073084 00000 n +0000073198 00000 n +0000073308 00000 n +0000073422 00000 n +0000073538 00000 n +0000073654 00000 n +0000073786 00000 n +0000073894 00000 n +0000074004 00000 n +0000074120 00000 n +0000074242 00000 n +0000074350 00000 n +0000074462 00000 n +0000074584 00000 n +0000074704 00000 n +0000074814 00000 n +0000074962 00000 n +0000075082 00000 n +0000075190 00000 n +0000075296 00000 n +0000075394 00000 n +0000075500 00000 n +0000075604 00000 n +0000075750 00000 n +0000075838 00000 n +0000075980 00000 n +0000076064 00000 n +0000076208 00000 n +0000076308 00000 n +0000076416 00000 n +0000076568 00000 n +0000076662 00000 n +0000076806 00000 n +0000076916 00000 n +0000077016 00000 n +0000077158 00000 n +0000077266 00000 n +0000077370 00000 n +0000077534 00000 n +0000077664 00000 n +0000077792 00000 n +0000077953 00000 n +0000078079 00000 n +0000078203 00000 n +0000078360 00000 n +0000078480 00000 n +0000078600 00000 n +0000078755 00000 n +0000078873 00000 n +0000078989 00000 n +0000079129 00000 n +0000079223 00000 n +0000079327 00000 n +0000079473 00000 n +0000079585 00000 n +0000079695 00000 n +0000079865 00000 n +0000079975 00000 n +0000080109 00000 n +0000080281 00000 n +0000080393 00000 n +0000080529 00000 n +0000080689 00000 n +0000080813 00000 n +0000080937 00000 n +0000081078 00000 n +0000081184 00000 n +0000081288 00000 n +0000081452 00000 n +0000081580 00000 n +0000081710 00000 n +0000081854 00000 n +0000081970 00000 n +0000082078 00000 n +0000082238 00000 n +0000082350 00000 n +0000082474 00000 n +0000082615 00000 n +0000082721 00000 n +0000082825 00000 n +0000082971 00000 n +0000083059 00000 n +0000083203 00000 n +0000083313 00000 n +0000083423 00000 n +0000083575 00000 n +0000083681 00000 n +0000083797 00000 n +0000083939 00000 n +0000084047 00000 n +0000084155 00000 n +0000084307 00000 n +0000084421 00000 n +0000084537 00000 n +0000084703 00000 n +0000084799 00000 n +0000084947 00000 n +0000085049 00000 n +0000085161 00000 n +0000085315 00000 n +0000085409 00000 n +0000085561 00000 n +0000085679 00000 n +0000085803 00000 n +0000085971 00000 n +0000086067 00000 n +0000086218 00000 n +0000086334 00000 n +0000086452 00000 n +0000086590 00000 n +0000086718 00000 n +0000086844 00000 n +0000086978 00000 n +0000087110 00000 n +0000087256 00000 n +0000087400 00000 n +0000087554 00000 n +0000087706 00000 n +0000087858 00000 n +0000088008 00000 n +0000088164 00000 n +0000088318 00000 n +0000088456 00000 n +0000088592 00000 n +0000088730 00000 n +0000088876 00000 n +0000089020 00000 n +0000089160 00000 n +0000089298 00000 n +0000089450 00000 n +0000089600 00000 n +0000089748 00000 n +0000089878 00000 n +0000090006 00000 n +0000090166 00000 n +0000090314 00000 n +0000090440 00000 n +0000090576 00000 n +0000090704 00000 n +0000090830 00000 n +0000090950 00000 n +0000091078 00000 n +0000091202 00000 n +0000091332 00000 n +0000091466 00000 n +0000091592 00000 n +0000091724 00000 n +0000091848 00000 n +0000091964 00000 n +0000092082 00000 n +0000092206 00000 n +0000092328 00000 n +0000092454 00000 n +0000092574 00000 n +0000092692 00000 n +0000092804 00000 n +0000092924 00000 n +0000093042 00000 n +0000093162 00000 n +0000093284 00000 n +0000093400 00000 n +0000093514 00000 n +0000093634 00000 n +0000093756 00000 n +0000093880 00000 n +0000094016 00000 n +0000094142 00000 n +0000094268 00000 n +0000094388 00000 n +0000094516 00000 n +0000094642 00000 n +0000094786 00000 n +0000094894 00000 n +0000095010 00000 n +0000095158 00000 n +0000095300 00000 n +0000095422 00000 n +0000095548 00000 n +0000095674 00000 n +0000095800 00000 n +0000095922 00000 n +0000096048 00000 n +0000096174 00000 n +0000096310 00000 n +0000096454 00000 n +0000096594 00000 n +0000096724 00000 n +0000096862 00000 n +0000096976 00000 n +0000097118 00000 n +0000097240 00000 n +0000097370 00000 n +0000097502 00000 n +0000097628 00000 n +0000097744 00000 n +0000097866 00000 n +0000097988 00000 n +0000098106 00000 n +0000098248 00000 n +0000098416 00000 n +0000098576 00000 n +0000098732 00000 n +0000098888 00000 n +0000099034 00000 n +0000099182 00000 n +0000099326 00000 n +0000099470 00000 n +0000099602 00000 n +0000099716 00000 n +0000099824 00000 n +0000099940 00000 n +0000100064 00000 n +0000100198 00000 n +0000100326 00000 n +0000100450 00000 n +0000100572 00000 n +0000100694 00000 n +0000100824 00000 n +0000100950 00000 n +0000101072 00000 n +0000101198 00000 n +0000101320 00000 n +0000101442 00000 n +0000101556 00000 n +0000101684 00000 n +0000101814 00000 n +0000101952 00000 n +0000102094 00000 n +0000102228 00000 n +0000102372 00000 n +0000102508 00000 n +0000102656 00000 n +0000102776 00000 n +0000102904 00000 n +0000103038 00000 n +0000103174 00000 n +0000103302 00000 n +0000103436 00000 n +0000103572 00000 n +0000103710 00000 n +0000103850 00000 n +0000103984 00000 n +0000104126 00000 n +0000104266 00000 n +0000104388 00000 n +0000104518 00000 n +0000104648 00000 n +0000104784 00000 n +0000104932 00000 n +0000105072 00000 n +0000105216 00000 n +0000105352 00000 n +0000105492 00000 n +0000105632 00000 n +0000105794 00000 n +0000105934 00000 n +0000106074 00000 n +0000106210 00000 n +0000106354 00000 n +0000106502 00000 n +0000106642 00000 n +0000106786 00000 n +0000106930 00000 n +0000107074 00000 n +0000107214 00000 n +0000107338 00000 n +0000107458 00000 n +0000107576 00000 n +0000107696 00000 n +0000107832 00000 n +0000107966 00000 n +0000108100 00000 n +0000108234 00000 n +0000108356 00000 n +0000108472 00000 n +0000108594 00000 n +0000108714 00000 n +0000108830 00000 n +0000108946 00000 n +0000109042 00000 n +0000109150 00000 n +0000109272 00000 n +0000109392 00000 n +0000109514 00000 n +0000109630 00000 n +0000109766 00000 n +0000109874 00000 n +0000109990 00000 n +0000015876 00000 n +trailer +<<4B8F8C127D33F04DB0D7275E53B6FD6E>]/Prev 1179716>> +startxref +0 +%%EOF + +6413 0 obj <>stream +hÞìZ tÕ¾3;›l^°›M– ,ÉfÃ#@6Âò¨Ù@$±¤ÔÈ6!Æ`),Ôêl B ÑÓbªÈCc  G†WšJŠŠÁRÙÅG9= z,ÓÚ;³3ÙÿÞ‰¶Ö>ôæœÍüsïýÿïß;9ƒÒ ts +Cˆ½€ (xðXâî$£)O4Wä ‹ãÊ3uéáˆå*Ušõ–¡ŸÇ[­×iy>2œc—ÇŠ"uŒ´&éÄãÅf ]$‹\.¤C,‹ Yõº1È*1„qá "/Ì.rãKäâ­˜]Zä§äÅ2«Ušñ­/VbË P^¢gEªo’‚—xç¬j¤ b̺Ðâ:°—[:ÍS¸P8Øí6§¶j‰øbÝUöjçB}N2žd»¹åv§?¦þŽjCVÄî]v¸/E¹ÿMÞäU±õá³´7³;2§ +«ë–›¿0¼§{K3¡Ü‘©ñdT§{Û£ß×禔ßæê¶.õ³Zék´ÍÌtݵ¤Õe ¦œ5ÑØ}ÓÑ£®ñö”v#§‘ý³f;†¶zÆI{âruéš6v+ƒX§ ‡w ^ÒÀfìüƒ|A^ZrLrT¯v³ÓwÄuõðJCUÈ{lJhøÚJa·'S¼'ÎR¥=Φù¶ó/ 7b+ÂÏq»Ù—˜:t¤nnw|µÉ“Ã= ‰÷u¢u÷¶'–™Nëþ®ÝÆv0ÂvÏO<öÆðº°kÜ}š,&õø§ä%6š¾0¶q‡Øq¾èQ~:Ÿ¬7GFx´û4yüÓ®L´ÜnsÅö†{´ašTß1W…°Ò5Ú=ètØ{a{Ù +ßã®ç=™Þ‘¥±WBwi.±‘¾‰Â1ë¼ö1ƒÚ”„°ìÏʳ\[øja˜wP]ädí›Ì³åfþ ?Å“T–X9UkäF¡^¡™¿Ï>Á?tXÄÜWÜmüÇü‹(›Oü$¦;Ô͹5Ǥ!­ËçQm¬Œx’»Ê®f–óOºøëbì‡BâÙl&?ˆ2P²ßìÑíÔ&³n¦šç]u#<Ñíá«BòØß2>$ …h´7Æ«ÓqçÙÌ,Ôˆò…8¯¾:Ì«Me™íüvþvOrž©Lwš{Ÿ]Ç ãw s…ÑþØêðjn<S$MóFÑÝ᫸*æ,ÆW¬q®ˆn];w…éEã}(ÃcÉ‹* ÕkôL zÍåG q®¨<íÎÉìFgùE‚ÝWUrš­a~Šö£b4΃Wè>äÚÙô*v¥Z|Ä'!ˆ½Ì<€>F£\ÇÙLÜvp³á¤þcµtÃ×—:MŒ¯Í5EhËO¢ú,ˆ>9¹£È^_‹G´å,ªw§HNðü? á‡ÑSo\ÿÒ¥aÖž(ª¿Æ§ü ÿ+æ‡þ¢—â}…8¯o*D“B¼¦‡â€BìRˆ +Q#ož9tË™®Tgî¬Ù‰ žnwÕÍŽAO´tõ¼9bäÈê&¿½,eF¨Ú7>jhì]}6Q2ùZÛBô‚ŠëJÆ%ln-¾·7chÕ™nš +ÞP0¸(&*_Ö»:[­ØoÔŠÍV+¶[­Ø[P11¦» +ƒ1 p½Ð ¸zïóð\=àªÉUÝë¤Ì9gÇaXÙb,‚®‚S´ÏásúRô“Z9!?—"øDK;÷%Ü&îLî=f%Ù®‰¶gÀDºRõ•è1%f{ƒùóée ð‰–7E, g2%çc(g–=(çJÍŒåRd}vuõYõ.(ÏgD÷ž…‹)bõió}Vr¶wrŽåˆ]âÜE('8ª¡ n¡˜QŠœ§H}v“úŒ¯‚rF’r&@9Oúl£äL%íj©'ýœHùy-dÏî†~Æɶ¦q覆ÄOª8-ÕNüD™ª»Ë ºÖdè$3ÈŽƒl(0†6}Д#–°ÔRvÞÓxqÚ +li°c‹ýùÕÜšì„ÍH³A([‹‹Ìbíkp}'Qƒ©Cɶܸ,ØØ!±¦Ð!{:ÚæŸ"SkMʦã4èý0­Å+j,#6²ÅiËÚ`BnižÜ Ag&UùéÕá[›ŠþD7óËã¯/=0çd&`G%µ&es†å2µïŒ}#ÈÕT$9¼p}ˆ¹0ÃÒ¥Þ­V’ `ê$ý³p¦Í¯æZN¤Íʇ@¡-#zÔféü“V{ø2𘸠;{W.§ü|ø<܆Ó›”Ÿqt. Ñö—IKE+ÎÓþÙ½ÚP`)»zUÌ„Ùd&ü"…Œiº—Žé!»ªR +®©Î)W@¥ˆÇ0lé2µ]µ]Û) q,^§íÚFfËádßè¸FVåbòà1vÅ>‚ AmY_…ªs‹§“l;ÌŸy_“E=æ +ܤªÎ¼LzÕv nR’ÉGÕéwW¡ªkðRõµ@Z¹æ«{ÝKt¯›GöÕIK`Y]-°<2é"(8æ !^#:Ê­ÆÚoWu€wèlÙG6+̵ϫʱüZâ…eKóè`·¹ŽõGh»î ìšC–CìÍä.üv™6­Åw4RªîµÓå°§[u^}ÒMqíñçUKÌəϪ9›îQ¿¦rle0ǧ÷ûèÞr蹜xr7Csä`Iƒ²þªØ‹9MÆ^^(–ÔÆFWØdõIÍ"yd#å¸Ëé¤ÜbÝý.–+(tŒQ)Ù¾|ÉÊ¢ò[)Û7‚b»L™*GN®·|¹Y€Z¤ôëó ANâ(©ìÇ\ÅS#J)?÷icø†>ç:ú ˆ­¿œ¡G%««Zy’ !æªßôµ—¹!*ã19P)›¢›5,‡j%}Á(!•‘Ç¥‚<#鸫-rmÙAÈb“NTÉ;%•nr÷ç¾ì”5QŠšòo ™²}ʪ| ŠO”›J)`Å;ÚËÒæÒd{?;‘ÜnŽ|BsQô–öAGzÕ¯ T¨Èºà?ÊöÉoÝh)u£6ŠTéÛ¿0Xãüodû¹ï{‘ß?Æ8mo|(wãC¹Ê}û‡r…Ö ¨…×qwXÏHŸù EQø8*D‡VáÛCü™Æ(a™Æ;„¿xãáGõ0©â—j> endobj 5637 0 obj [5638 0 R] endobj 5638 0 obj <>>> endobj 5639 0 obj <> endobj 5640 0 obj <> endobj 5641 0 obj <> endobj 5642 0 obj <> endobj 5643 0 obj <> endobj 5644 0 obj <> endobj 5645 0 obj <> endobj 5646 0 obj <> endobj 5647 0 obj <> endobj 5648 0 obj <> endobj 5649 0 obj <> endobj 5650 0 obj <> endobj 5651 0 obj <> endobj 5652 0 obj <> endobj 5653 0 obj <> endobj 5654 0 obj <> endobj 5655 0 obj <> endobj 5656 0 obj <> endobj 5657 0 obj <> endobj 5658 0 obj <> endobj 5659 0 obj <> endobj 5660 0 obj <> endobj 5661 0 obj <> endobj 5662 0 obj <> endobj 5663 0 obj <> endobj 5664 0 obj <> endobj 5665 0 obj <> endobj 5666 0 obj <> endobj 5667 0 obj <> endobj 5668 0 obj <> endobj 5669 0 obj <> endobj 5670 0 obj <> endobj 5671 0 obj <> endobj 5672 0 obj <> endobj 5673 0 obj <> endobj 5674 0 obj <> endobj 5675 0 obj <> endobj 5676 0 obj <> endobj 5677 0 obj <> endobj 5678 0 obj <> endobj 5679 0 obj <> endobj 5680 0 obj <> endobj 5681 0 obj <> endobj 5682 0 obj <> endobj 5683 0 obj <> endobj 5684 0 obj <> endobj 5685 0 obj <> endobj 5686 0 obj <> endobj 5687 0 obj <> endobj 5688 0 obj <> endobj 5689 0 obj <> endobj 5690 0 obj <> endobj 5691 0 obj <> endobj 5692 0 obj <> endobj 5693 0 obj <> endobj 5694 0 obj <> endobj 5695 0 obj <> endobj 5696 0 obj <> endobj 5697 0 obj <> endobj 5698 0 obj <> endobj 5699 0 obj <> endobj 5700 0 obj <> endobj 5701 0 obj <> endobj 5702 0 obj <> endobj 5703 0 obj <> endobj 5704 0 obj <> endobj 5705 0 obj <> endobj 5706 0 obj <> endobj 5707 0 obj <> endobj 5708 0 obj <> endobj 5709 0 obj <> endobj 5710 0 obj <> endobj 5711 0 obj <> endobj 5712 0 obj <> endobj 5713 0 obj <> endobj 5714 0 obj <> endobj 5715 0 obj <> endobj 5716 0 obj <> endobj 5717 0 obj <> endobj 5718 0 obj <> endobj 5719 0 obj <> endobj 5720 0 obj <> endobj 5721 0 obj <> endobj 5722 0 obj <> endobj 5723 0 obj <> endobj 5724 0 obj <> endobj 5725 0 obj <> endobj 5726 0 obj <> endobj 5727 0 obj <> endobj 5728 0 obj <> endobj 5729 0 obj <> endobj 5730 0 obj <> endobj 5731 0 obj <> endobj 5732 0 obj <> endobj 5733 0 obj <> endobj 5734 0 obj <> endobj 5735 0 obj <> endobj 5736 0 obj <> endobj 5737 0 obj <> endobj 5738 0 obj <> endobj 5739 0 obj <> endobj 5740 0 obj <> endobj 5741 0 obj <> endobj 5742 0 obj <> endobj 5743 0 obj <> endobj 5744 0 obj <> endobj 5745 0 obj <> endobj 5746 0 obj <> endobj 5747 0 obj <> endobj 5748 0 obj <> endobj 5749 0 obj <> endobj 5750 0 obj <> endobj 5751 0 obj <> endobj 5752 0 obj <> endobj 5753 0 obj <> endobj 5754 0 obj <> endobj 5755 0 obj <> endobj 5756 0 obj <> endobj 5757 0 obj <> endobj 5758 0 obj <> endobj 5759 0 obj <> endobj 5760 0 obj <> endobj 5761 0 obj <> endobj 5762 0 obj <> endobj 5763 0 obj <> endobj 5764 0 obj <> endobj 5765 0 obj <> endobj 5766 0 obj <> endobj 5767 0 obj <> endobj 5768 0 obj <> endobj 5769 0 obj <> endobj 5770 0 obj <> endobj 5771 0 obj <> endobj 5772 0 obj <> endobj 5773 0 obj <> endobj 5774 0 obj <> endobj 5775 0 obj <> endobj 5776 0 obj <> endobj 5777 0 obj <> endobj 5778 0 obj <> endobj 5779 0 obj <> endobj 5780 0 obj <> endobj 5781 0 obj <> endobj 5782 0 obj <> endobj 5783 0 obj <> endobj 5784 0 obj <> endobj 5785 0 obj <> endobj 5786 0 obj <> endobj 5787 0 obj <> endobj 5788 0 obj <> endobj 5789 0 obj <> endobj 5790 0 obj <> endobj 5791 0 obj <> endobj 5792 0 obj <> endobj 5793 0 obj <> endobj 5794 0 obj <> endobj 5795 0 obj <> endobj 5796 0 obj <> endobj 5797 0 obj <> endobj 5798 0 obj <> endobj 5799 0 obj <> endobj 5800 0 obj <> endobj 5801 0 obj <> endobj 5802 0 obj <> endobj 5803 0 obj <> endobj 5804 0 obj <> endobj 5805 0 obj <> endobj 5806 0 obj <> endobj 5807 0 obj <> endobj 5808 0 obj <> endobj 5809 0 obj <> endobj 5810 0 obj <> endobj 5811 0 obj <> endobj 5812 0 obj <> endobj 5813 0 obj <> endobj 5814 0 obj <> endobj 5815 0 obj <> endobj 5816 0 obj <> endobj 5817 0 obj <> endobj 5818 0 obj <> endobj 5819 0 obj <> endobj 5820 0 obj <> endobj 5821 0 obj <> endobj 5822 0 obj <> endobj 5823 0 obj <> endobj 5824 0 obj <> endobj 5825 0 obj <> endobj 5826 0 obj <> endobj 5827 0 obj <> endobj 5828 0 obj <> endobj 5829 0 obj <> endobj 5830 0 obj <> endobj 5831 0 obj <> endobj 5832 0 obj <> endobj 5833 0 obj <> endobj 5834 0 obj <> endobj 5835 0 obj <> endobj 5836 0 obj <> endobj 5837 0 obj <> endobj 5838 0 obj <> endobj 5839 0 obj <> endobj 5840 0 obj <> endobj 5841 0 obj <> endobj 5842 0 obj <> endobj 5843 0 obj <> endobj 5844 0 obj <> endobj 5845 0 obj <> endobj 5846 0 obj <> endobj 5847 0 obj <> endobj 5848 0 obj <> endobj 5849 0 obj <> endobj 5850 0 obj <> endobj 5851 0 obj <> endobj 5852 0 obj <> endobj 5853 0 obj <> endobj 5854 0 obj <> endobj 5855 0 obj <> endobj 5856 0 obj <> endobj 5857 0 obj <> endobj 5858 0 obj <> endobj 5859 0 obj <> endobj 5860 0 obj <> endobj 5861 0 obj <> endobj 5862 0 obj <> endobj 5863 0 obj <> endobj 5864 0 obj <> endobj 5865 0 obj <> endobj 5866 0 obj <> endobj 5867 0 obj <> endobj 5868 0 obj <> endobj 5869 0 obj <> endobj 5870 0 obj <> endobj 5871 0 obj <> endobj 5872 0 obj <> endobj 5873 0 obj <> endobj 5874 0 obj <> endobj 5875 0 obj <> endobj 5876 0 obj <> endobj 5877 0 obj <> endobj 5878 0 obj <> endobj 5879 0 obj <> endobj 5880 0 obj <> endobj 5881 0 obj <> endobj 5882 0 obj <> endobj 5883 0 obj <> endobj 5884 0 obj <> endobj 5885 0 obj <> endobj 5886 0 obj <> endobj 5887 0 obj <> endobj 5888 0 obj <> endobj 5889 0 obj <> endobj 5890 0 obj <> endobj 5891 0 obj <> endobj 5892 0 obj <> endobj 5893 0 obj <> endobj 5894 0 obj <> endobj 5895 0 obj <> endobj 5896 0 obj <> endobj 5897 0 obj <> endobj 5898 0 obj <> endobj 5899 0 obj <> endobj 5900 0 obj <> endobj 5901 0 obj <> endobj 5902 0 obj <> endobj 5903 0 obj <> endobj 5904 0 obj <> endobj 5905 0 obj <> endobj 5906 0 obj <> endobj 5907 0 obj <> endobj 5908 0 obj <> endobj 5909 0 obj <> endobj 5910 0 obj <> endobj 5911 0 obj <> endobj 5912 0 obj <> endobj 5913 0 obj <> endobj 5914 0 obj <> endobj 5915 0 obj <> endobj 5916 0 obj <> endobj 5917 0 obj <> endobj 5918 0 obj <> endobj 5919 0 obj <> endobj 5920 0 obj <> endobj 5921 0 obj <> endobj 5922 0 obj <> endobj 5923 0 obj <> endobj 5924 0 obj <> endobj 5925 0 obj <> endobj 5926 0 obj <> endobj 5927 0 obj <> endobj 5928 0 obj <> endobj 5929 0 obj <> endobj 5930 0 obj <> endobj 5931 0 obj <> endobj 5932 0 obj <> endobj 5933 0 obj <> endobj 5934 0 obj <> endobj 5935 0 obj <> endobj 5936 0 obj <> endobj 5937 0 obj <> endobj 5938 0 obj <> endobj 5939 0 obj <> endobj 5940 0 obj <> endobj 5941 0 obj <> endobj 5942 0 obj <> endobj 5943 0 obj <> endobj 5944 0 obj <> endobj 5945 0 obj <> endobj 5946 0 obj <> endobj 5947 0 obj <> endobj 5948 0 obj <> endobj 5949 0 obj <> endobj 5950 0 obj <> endobj 5951 0 obj <> endobj 5952 0 obj <> endobj 5953 0 obj <> endobj 5954 0 obj <> endobj 5955 0 obj <> endobj 5956 0 obj <> endobj 5957 0 obj <> endobj 5958 0 obj <> endobj 5959 0 obj <> endobj 5960 0 obj <> endobj 5961 0 obj <> endobj 5962 0 obj <> endobj 5963 0 obj <> endobj 5964 0 obj <> endobj 5965 0 obj <> endobj 5966 0 obj <> endobj 5967 0 obj <> endobj 5968 0 obj <> endobj 5969 0 obj <> endobj 5970 0 obj <> endobj 5971 0 obj <> endobj 5972 0 obj <> endobj 5973 0 obj <> endobj 5974 0 obj <> endobj 5975 0 obj <> endobj 5976 0 obj <> endobj 5977 0 obj <> endobj 5978 0 obj <> endobj 5979 0 obj <> endobj 5980 0 obj <> endobj 5981 0 obj <> endobj 5982 0 obj <> endobj 5983 0 obj <> endobj 5984 0 obj <> endobj 5985 0 obj <> endobj 5986 0 obj <> endobj 5987 0 obj <> endobj 5988 0 obj <> endobj 5989 0 obj <> endobj 5990 0 obj <> endobj 5991 0 obj <> endobj 5992 0 obj <> endobj 5993 0 obj <> endobj 5994 0 obj <> endobj 5995 0 obj <> endobj 5996 0 obj <> endobj 5997 0 obj <> endobj 5998 0 obj <> endobj 5999 0 obj <> endobj 6000 0 obj <> endobj 6001 0 obj <> endobj 6002 0 obj <> endobj 6003 0 obj <> endobj 6004 0 obj <> endobj 6005 0 obj <> endobj 6006 0 obj <> endobj 6007 0 obj <> endobj 6008 0 obj <> endobj 6009 0 obj <> endobj 6010 0 obj <> endobj 6011 0 obj <> endobj 6012 0 obj <> endobj 6013 0 obj <> endobj 6014 0 obj <> endobj 6015 0 obj <> endobj 6016 0 obj <> endobj 6017 0 obj <> endobj 6018 0 obj <> endobj 6019 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/XObject<>>> endobj 6020 0 obj [/Indexed/DeviceRGB 212 6026 0 R] endobj 6021 0 obj <> endobj 6022 0 obj <>stream +hÞTMO„0†ïýs7”N[J{u?Ì=¸6È€²kŒÿÞ)?ÒÓ¼3Ï<¡aùÅ=BsdZ#G ¥ÜX@¡ÂG\Ikv`o ¡…Ÿ¶ÂÌ=ÙOÓãôL@é$ + JȨž +8ógÕ±|Û!¬vGGœ!’†R8Ž¸+œs€ÜÙ¨dÔik¸3" ÃÓµ˜R0JÄäܳ|ƒ€àLê(£!öcÃ>ßMË3.„à+ +þƒ=%«õ +na™/ ¸S‰\%C3î»®íØö§z<ì«ÒgIœ ¹6àW§nª0òvÉÍkÝÃU[Õý1‰–›ˆÜ¥U° ª±ú~™¥>l‰‡j&‡mÝd2¼¼W'xH A¢uš›VÐÿJŽÓ¥úð¢_]‰Q8XÚùù2B¯÷© œOËifíÙ—[›€Ù +endstream endobj 6023 0 obj <> endobj 6024 0 obj <> endobj 6025 0 obj <>stream +hÞ\W XeÞew¾]VdèßÅÙMð† ‚¨¨ˆx ï‚©ÉM@ä.,˜XZ–Ü4/…R((&š71/¹y ­TB²~¯eš¥Ò™õ¬Oÿ™Eëz†ž™ùΙsyß÷;£T¨J¥ÒcrÌ”—&E ˜˜¼¤ yiZb¼DÖ’$ù‰·dPJîjÉËÙGaá“מÌæ¼2-.°º;ìèÑìåvÕMá TVÖÍÊ.ÊMKI]jê—Øß0"x¨Ÿ|n?Ï#›Æ$e%$›få-MÎÈ3MÊLÌÊÍÎÊ_šœ4Ðd³d‰iºì!Ï4=9/9·€îþ)-ÏoZšŸ”œŸ›nÊZdŠNËÌZZ”l3ÁŸ™4(+×”F¶yù yiIiñ¹iÉyÿ‘BI‡Bë pV(º;) +E/­Â_­Â¡ +E¸Bñ‚"‚*¢P+4ŠaŠ,Eƒ¢]ñH骜«\©üÖa²C™Ã-ÕlU‰ÚU¦.RÿÄsEÜîÃrX)ÛÁ~ÑôÔ¤jvi»kKµÚ{ŽžŽùŽût|ä”ëÔÚÍÐÍÜ휳ÚùMç“ο¸ôv™ç’ïÒ®óÒ¥êNuïÙ=®ûEWkŒë2×c®Oz„Ûtö?iÔ#¼Û0ñ ùš Ò ÁYÑÆJ’W§L*ÐÆjNU^m7ýïhÒèð Æ<‰0+÷€ +¾Â$!øÉ`€D=$ZÀО¢ˆ®Á8çèqÎuxÅ¿ a YV[s…o‘?LÔcâ44ŒBOñ!û \¯Ñ‚9z˜ MepÕ vƒ×AÍ/¤óicéN,ãk0Ôº± ÆXˆCµ†R*ƒ>ʳૂÅЇrA_쾌TXט•‹áž +ÎZótdh~º†G¦+µTjå.ð…â.øUÀŠvÔB(„¶ƒ* " 4Š¡a¨Á +|< ªöÂÕ«µã1 +£òÇ…†æ_„(QWS ߇î”ê*0©.HÅŒ´ƒÉ:5löš”qh0˜™® \¥TpRî/˜G a”ôŠp¬|mÇ}CëÎYóBcSÐ} ‘ʨ^ôV°V*Wü’½ßزëçóÚ ÿn? :=ø â*zEãH3¾*Ê9@戡jm/tC;L¨þgþ¤ÁYÿýÜÏoû†ÍMžá¿ò¿ûŒååöd˜ —Þ¿Þ=¸ŒØ›»A¬Ððw|ØÜü|±Ç? +÷ÉàÁêÊnÿÒVùRΠQoÇ‹ü½|F)C(ÁF%|!çâÕŒ WÁò×  +Ãõå&MÅ! ·Ø"9tF ´kìao¦Ÿ†ª±îÅËØzYj  œlz6צ‡«¹£Û”W.팊4}âä%û-«hb轸I 2@r Þƒáè|Þo|zAQŽÑîy¨S +d|¸}L¾“ ä-ÒZi»°ârqMÒ>ížÔ÷2 XZ„+ ãšp"¤CÏ»`‘ïèö K]œS(–TpwÞ©ytÛp¬>+qq3žÌKŠøÊɶ›'²dØ{ÿ5¸*¡¥ ÕY§¶5l ºrÐÉb¢p<,ǽZðaÀ µ^ÒÚcÌë„H +°G­ÒSáôèL-{H-Û%…1K7küäLóÞ´Y±é‹fù‡P‚)Âäæ »©§vÖûRäuì‹®¾è2iç‚ϳDþ!*âÊüSô¾g°!¦ZÀtˈ>«…¹YÑQIÍ­m-Ÿ}W?%N&(±²¡Ûðåkà­ÿ§¿PÚ¤þ›HS¿û|§›•YG© ú ð!;Œý8Îp½5Ã1 7=Mà ÁKÒq¡‚ÝĽF‘1f‚ !ÆÕí +±¤„ôÇ—|ÅN1軿îÀAã¾½ÛNœÒ½ôâF‘—vVYê/-Œñw>¶>Ì`üã'ò¢#âÓ#ŒͤÅjg¼ÔÚT4uú¼¥SI¯+éMðP•5\2 oA?L7àdìî¸Ë¡'’7˜ø;axðN#ú²!EÓæ%â ðJç‘oÀukÈÂJ£=|i1õø +ô…Óä“¢>Ë`å—KÊå ø–/Rè*P§Ïþ¶ SÑ)»£Îˆ}˜.¯ x˜B¿ÀËNTÒoÖÁV÷4AjÞÖ‹ž=©Ó…R©OÒâaöÅ$it)ÀZpî=%ƒOäž\/>¨ª©°TXÊ–Àqô§Â¶H2Cö^‚+z›>#BDÿzé#ÿïÎϲŒäáW*‹7fð­rTRmbõøˆŒùð#¿¼*€{ yâñ.\¦VÖ™•_ƒ/4RpR \ð2øZ*uØuè+‡—eY®)°&˜Ÿ 3¥ÜõˆR,£ýh~–Þ³Ò:ð@+ÓA¯2ð“f’2Ðö$‘¶X×ËK2ºÛÎp% =¤3f‘+“t¯‚§í}è¥{\…í˜ì‘Ê/&¤P&•ôd +d¸OZÃa Ýp¶mâì‘›ºŠ)•RɯDú§:(à-X›p÷.¬=·à®=èç‡kð–¾0ØÑŽ`q8Ÿ‚ì(ÌuyT¦J*SŠ2¾°®«‰•Af}ÁçàÅá7ÑhÄ{9$^Mk»i~ÚŸ9.½,Õ2䪡Šú:ÓN˜¾PG‚ìA}•z}a7 b ZŸÜÌúEï¦!¤š¥W–Õ?Öƒ>½vj½È?þzÛÖvýéTxgˆø§ Í y‹ÑÜø`FrdröH£.¯`ý½`?±ñ_T©:úïBô-s?äÍ8ªÎ@v5ÁJ8ЛȷáØO¹Œ ó+?ןk­9ž•£Ó×ѾÈn”N%k‚RñB|1AÚlc[Çß¼Rtbù ýè°e‘èi¾r T”!.Ý Zë2„zÐø„ë… Û »ÞÈíøìü†@]/ÓØ(CÀß–Á‚âã|ÆM;ô@”Ñu¶¦blÕ´ý¯h#ÏÞõ¼&ë€iF¹2ª­Ž*¸ róJ9Êà-Y£¼¬‘5k0ám}Ì’T¨|ÿIomZ 6‰U«Q[Á¶¡¸yÜ%|,k8,müØ@›ñµÉ¯MЖ°WzsßpIÔÒ.7ÚæòzÄŠpº¹âûUGI=µÄž²ÅÊ«¤á’£Ypß.•ž¸Ýa9‡dá#\nSq0–Ao(¡¼„ƒ(;Ox)‰ +U'YTÒ5à›ŽIÎRG»äaªÖSMcKâ—,4©õ8ª,“Ž«¤ãØC8j;§Ñ?ZCR vk þN‡ž|¡ô¦ä%€'öÜNœç–âðWE0°×U~zÑðÉçk¦fd¯Ê_cD·B.pŤÙÞz¾¾_põnó¡Æ]"_¸6£â¹ZPÖ­/ÞrF=¯ |óKщ“³“«Z,Ÿn>¶I´lÚºiË{Z]h1húüm„äp³Û—C1á«EUBtnÿ€ÀÔKí?nûï/7w† ±Xš'ùåÄŠž¾å« +MÌîÓž'Ó>í} âç¦åK˜Ž|ÃUû4%o½G0[ÈÍ›ùb h,ç·Þ¸!ž[W;s}ªz1Yâ¾áœN²Žêä“ó`Χàòã?•=Û§†#2êL¸±„íÎo 0 £wFcŸóh‚@Ëéš/v+(à‰öxmŽ”Ö;Ûoþ²mè°°Ô1¹÷ψ§P~/ƒ.×,K•Ïؾßà6¾v>¸ˆ²ÚÚòòZc§¦tåÊÒU†é¥•¡éúƒ ®Ž{?’HîäR¿lÇL“$øó›œ3áËï/Â5º~¨A¯+1/}¾ëÔ.‘ô®0(ë2"ž—Y¹YÚ®’ȆýIl^ò€æ yÉ[+Ì°5È“™îzA«ÀGù®µLe}W^ìÂmn´6TrãðEn¿–/ú3ð•í|Ø5éúš¼f{A¾¿8› `‹YY%mU ¶ 0¶p8‚ ÁA0ˆÃQ "p NÂmŒdw èq0†éž‰ò]©^%}"¿¾CeW¬ìY¬±¶Ï¸ˆYoÆ^[U^Nß™jMéGÛJ«  û°âÎÓ§eµ5¡ã·€_%ƒm•à´ñ)Û¤kÆyþéìNN`êVŽ»['ÿ`*ªhÔ +endstream endobj 6026 0 obj <>stream +hÞ€ý¿¿¿ÿÿÿ +++@@@·tvâ–™¦¦¦©©©­­­®®®Æ-3¸¸¸ÉÉÉÏÏÏ···ÈÈȵµµ›››333¬¬¬èèèóóóÆÆÆæææyyywwwïïïòòò<<<ÌÌÌðÊË⻽ş ³ŒŽ¯ˆŠ°‰‹ñññoooåååýýý???þþþðððÔÔÔÀÀÀ½½½ÂÂÂÙÙÙôôô\\\ÅÅÅäääûûûùùùîîîçççSSSÝÝÝúúú¶¶¶ßßßPPP``` pppŸŸŸõõõ{{{000MMM]]]üüünnn€€€WWWööögggøøø¡¡¡ììì•••´´´ÑÑÑ ¥¥¥÷÷÷‹‹‹ÚÚÚ ÍÍÍ>>>444ÊÊÊYYYŠŠŠ£££¨¨¨UUUuuu + + +HHH___TTTÞÞÞbbb¯¯¯III„„„ÓÓÓ}}}’’’ZZZííí°°°ºººËËË===AAA†††ˆˆˆ²²²¾¾¾êêê***---ÐÐБ‘‘ªªª±±±¼¼¼¹¹¹«««ÜÜÜááá   ààà(((ãããqqqØØØ“““‡‡‡éééaaa¢¢¢³³³×××rrrzzzRRRÒÒÒÁÁÁÛÛÛsssÖÖÖ)))âââ[[[|||»»»ÕÕÕÄÄÄdddÎÎÎVVVÇÇÇJJJ§§§~~~¤¤¤...žžžLLLKKKÃÃÃëëë^^^™™™iii888mmmfff"""BBB‰‰‰NNNhhh999,,,666XXXŒŒŒ………;;;:::555777!!! žmf3 +endstream endobj 6027 0 obj <>stream +hÞì™[SUÇ· +¶5ÇP¸ ›ëÅ ]î`@ì…ínˆàÔšI“ Ö¤‰¢Aj +šÃA 2\¸¢ -ò%S+3_ʲ7³÷—?¨ÝsßÎ}ö<>ˆO~Ÿ‡m÷wÎùÏ=÷œßù‹B1›”'¥âîÐ|dÎÈL+Õ}÷sº/óŽ+ƒdÎÌRk`iµì/ðñ,º®–úUµ©O-)È…è‡HZ¸7­V@؆,ÈÌjÝ}ñ˜ÕÙQ…œ…)åèçH‹s®!M#sn~¨ÂbÒË£ -¥˜Í&$|èáG–=Ji™Ö\(ªPDzyÌ‚bÈ\¨øV˜qkI©QYy…4óã•vÇüaFœ® £*«CšÙí!æ3‚AÂf¯g>ólºó̾êå*UR`Q¬PÕúDíëTŠ•5>)f#é¥VÉ«­,bU-ö…ëjUªåuFØæ+R©TE¾ôÌÆjs\ê'˜YPËø#i\ ¬kž3×­¤Z<€ïÞ}× +£L5ÝD¹aº^ˆ§aÖ¯ k-*©rÒ6¨£§üpO*˜!ÅLHЭ«Çe’•§ƒ¼¥QÃØ×7D6Å3Yf#ƒ¬ÈllBÅÌÏšQ\zØxÌ0Üs¸L‚•Â%χCð:¡´¡Ù!ÇLµ|ÁíŽlÌm±2Ì›^|©µ® möÙnÀýµoÙҮΠP²µcùµº3ÄcN9ww/[¸Á릲µˆ»§ë•íõô\¦;Áã|u&ͬ-#YêÝÞìÞ&fÃëlèëUæ/ØC–í5°m©n^kíÞ'gðÜ­Ñ~0ßµû0sLÝã  šø÷ßõúÐp¶÷@y=4™wäŽäL}d¬Bf0̱¬Ñ‘æp<^ÀŒŽŽÅ- ®C °7AÀë#ÒÚØ~CÀ¼œ¼îˆöw?³ÏšbîÎOÆßCX–Ç¿ÿ·4ýMñ¸g‚àî£kÔ®z›,|§“d+÷°º7iuN‚]n`05Tý ÇÉ©zx¾«1äßÌ Pq¨ÌB4€UØgå1ç$Q¢ŠŠ>ž“‘Q¥%;ƹ‡în,A1Xþ ‡3¨Õž5\{¢ÄNŽ9¤™£§B°¯ÑÓy˜pwU}´¤¨<…ugP)fPëȨa.ÞšYf3y(?UYÀ\Äi16y2—ÐóÌ.»M’›ÒÇL“bÖêQþþL…¡½Û¤˜ADœ…@¦eVÒK%$Ú£9µ\ò̬'z ÀDnkÚ-Ŭi6Ý.æ.oÜ™Žù¬ãÏg†Ïëâ!DÀ Ún^`D$c]L6š(ùÈlÌÈËZþ|þœ´]lÉ£½ ¡4{JÛY^ÜÌÓ˜¬ë/.]Å ÊÍzŸè Ï|…¼¼ªçÏ3#dsQ*¼|9F™¿:Ý€ ™A<ÉØ=î`™ ˜àY¤gÖ€ëž*8ÛF¾&mßL`é™édñzÔÖ]ÍK»3ª-!³q yýmo…hœû©Të@êZY]w+Ì8àS|—Õ¯¬Õ3Õ¿¶+§R]AV†¹™ æ?°¡eêp!¼§°k¯ ÊŸ/BöŨsvf¤•kà­§Göò›¿L.Š¸˜:›:ý”m--·=¯q•‹7Î2ïÏäì7¦Øì5 sà:Û ÃN§èø¥ œ›Ž±ÜÙjâ'ºÎÍI&±pƒÑF™í(¥¼ÌÌe<bÿ™µÿ2m ÌÎŒ„Ø¡ÙÇ.ÇÉ_Y7û¶WÈ1ãþ¬=äËÒ®š>fâÕçnÆýv¶*xáïd2Å“Iîƒëþ¼JJ6Þ84]À0ë# ÄzÀvùûB,…–)n²¹ÿ![D²¸; ­ºhŠO–øå˜> endobj 6029 0 obj <> endobj 6030 0 obj <> endobj 6031 0 obj <> endobj 6032 0 obj <> endobj 6033 0 obj <> endobj 6034 0 obj <> endobj 6035 0 obj <> endobj 6036 0 obj <> endobj 6037 0 obj <> endobj 6038 0 obj <> endobj 6039 0 obj <> endobj 6040 0 obj <> endobj 6041 0 obj <> endobj 6042 0 obj <> endobj 6043 0 obj <> endobj 6044 0 obj <> endobj 6045 0 obj <> endobj 6046 0 obj <> endobj 6047 0 obj <> endobj 6048 0 obj <> endobj 6049 0 obj <> endobj 6050 0 obj <> endobj 6051 0 obj <> endobj 6052 0 obj <> endobj 6053 0 obj <> endobj 6054 0 obj <> endobj 6055 0 obj <> endobj 6056 0 obj <> endobj 6057 0 obj <> endobj 6058 0 obj <> endobj 6059 0 obj <> endobj 6060 0 obj <> endobj 6061 0 obj <> endobj 6062 0 obj <> endobj 6063 0 obj <> endobj 6064 0 obj <> endobj 6065 0 obj <> endobj 6066 0 obj <> endobj 6067 0 obj <> endobj 6068 0 obj <> endobj 6069 0 obj <> endobj 6070 0 obj <> endobj 6071 0 obj <> endobj 6072 0 obj <> endobj 6073 0 obj <> endobj 6074 0 obj <> endobj 6075 0 obj <> endobj 6076 0 obj <> endobj 6077 0 obj <> endobj 6078 0 obj <> endobj 6079 0 obj <> endobj 6080 0 obj <> endobj 6081 0 obj <> endobj 6082 0 obj <> endobj 6083 0 obj <> endobj 6084 0 obj <> endobj 6085 0 obj <> endobj 6086 0 obj <> endobj 6087 0 obj <> endobj 6088 0 obj <> endobj 6089 0 obj <> endobj 6090 0 obj <> endobj 6091 0 obj <> endobj 6092 0 obj <> endobj 6093 0 obj <> endobj 6094 0 obj <> endobj 6095 0 obj <> endobj 6096 0 obj <> endobj 6097 0 obj <> endobj 6098 0 obj <> endobj 6099 0 obj <> endobj 6100 0 obj <> endobj 6101 0 obj <> endobj 6102 0 obj <> endobj 6103 0 obj <> endobj 6104 0 obj <> endobj 6105 0 obj <> endobj 6106 0 obj <> endobj 6107 0 obj <> endobj 6108 0 obj <> endobj 6109 0 obj <> endobj 6110 0 obj <> endobj 6111 0 obj <> endobj 6112 0 obj <> endobj 6113 0 obj <> endobj 6114 0 obj <> endobj 6115 0 obj <> endobj 6116 0 obj <> endobj 6117 0 obj <> endobj 6118 0 obj <> endobj 6119 0 obj <> endobj 6120 0 obj <> endobj 6121 0 obj <> endobj 6122 0 obj <> endobj 6123 0 obj <> endobj 6124 0 obj <> endobj 6125 0 obj <> endobj 6126 0 obj <> endobj 6127 0 obj <> endobj 6128 0 obj <> endobj 6129 0 obj <> endobj 6130 0 obj <> endobj 6131 0 obj <> endobj 6132 0 obj <> endobj 6133 0 obj <> endobj 6134 0 obj <> endobj 6135 0 obj <> endobj 6136 0 obj <> endobj 6137 0 obj <> endobj 6138 0 obj <> endobj 6139 0 obj <> endobj 6140 0 obj <> endobj 6141 0 obj <> endobj 6142 0 obj <> endobj 6143 0 obj <> endobj 6144 0 obj <> endobj 6145 0 obj <> endobj 6146 0 obj <> endobj 6147 0 obj <> endobj 6148 0 obj <> endobj 6149 0 obj <> endobj 6150 0 obj <> endobj 6151 0 obj <> endobj 6152 0 obj <> endobj 6153 0 obj <> endobj 6154 0 obj <> endobj 6155 0 obj <> endobj 6156 0 obj <> endobj 6157 0 obj <> endobj 6158 0 obj <> endobj 6159 0 obj <> endobj 6160 0 obj <> endobj 6161 0 obj <> endobj 6162 0 obj <> endobj 6163 0 obj <> endobj 6164 0 obj <> endobj 6165 0 obj <> endobj 6166 0 obj <> endobj 6167 0 obj <> endobj 6168 0 obj <> endobj 6169 0 obj <> endobj 6170 0 obj <> endobj 6171 0 obj <> endobj 6172 0 obj <> endobj 6173 0 obj <> endobj 6174 0 obj <> endobj 6175 0 obj <> endobj 6176 0 obj <> endobj 6177 0 obj <> endobj 6178 0 obj <> endobj 6179 0 obj <> endobj 6180 0 obj <> endobj 6181 0 obj <> endobj 6182 0 obj <> endobj 6183 0 obj <> endobj 6184 0 obj <> endobj 6185 0 obj <> endobj 6186 0 obj <> endobj 6187 0 obj <> endobj 6188 0 obj <> endobj 6189 0 obj <> endobj 6190 0 obj <> endobj 6191 0 obj <> endobj 6192 0 obj <> endobj 6193 0 obj <> endobj 6194 0 obj <> endobj 6195 0 obj <> endobj 6196 0 obj <> endobj 6197 0 obj <> endobj 6198 0 obj <> endobj 6199 0 obj <> endobj 6200 0 obj <> endobj 6201 0 obj <> endobj 6202 0 obj <> endobj 6203 0 obj <> endobj 6204 0 obj <> endobj 6205 0 obj <> endobj 6206 0 obj <> endobj 6207 0 obj <> endobj 6208 0 obj <> endobj 6209 0 obj <> endobj 6210 0 obj <> endobj 6211 0 obj <> endobj 6212 0 obj <> endobj 6213 0 obj <> endobj 6214 0 obj <> endobj 6215 0 obj <> endobj 6216 0 obj <> endobj 6217 0 obj <> endobj 6218 0 obj <> endobj 6219 0 obj <> endobj 6220 0 obj <> endobj 6221 0 obj <> endobj 6222 0 obj <> endobj 6223 0 obj <> endobj 6224 0 obj <> endobj 6225 0 obj <> endobj 6226 0 obj <> endobj 6227 0 obj <> endobj 6228 0 obj <> endobj 6229 0 obj <> endobj 6230 0 obj <> endobj 6231 0 obj <> endobj 6232 0 obj <> endobj 6233 0 obj <> endobj 6234 0 obj <> endobj 6235 0 obj <> endobj 6236 0 obj <> endobj 6237 0 obj <> endobj 6238 0 obj <> endobj 6239 0 obj <> endobj 6240 0 obj <> endobj 6241 0 obj <> endobj 6242 0 obj <> endobj 6243 0 obj <> endobj 6244 0 obj <> endobj 6245 0 obj <> endobj 6246 0 obj <> endobj 6247 0 obj <> endobj 6248 0 obj <> endobj 6249 0 obj <> endobj 6250 0 obj <> endobj 6251 0 obj <> endobj 6252 0 obj <> endobj 6253 0 obj <> endobj 6254 0 obj <> endobj 6255 0 obj <> endobj 6256 0 obj <> endobj 6257 0 obj <> endobj 6258 0 obj <> endobj 6259 0 obj <> endobj 6260 0 obj <> endobj 6261 0 obj <> endobj 6262 0 obj <> endobj 6263 0 obj <> endobj 6264 0 obj <> endobj 6265 0 obj <> endobj 6266 0 obj <> endobj 6267 0 obj <> endobj 6268 0 obj <> endobj 6269 0 obj <> endobj 6270 0 obj <> endobj 6271 0 obj <> endobj 6272 0 obj <> endobj 6273 0 obj <> endobj 6274 0 obj <> endobj 6275 0 obj <> endobj 6276 0 obj <> endobj 6277 0 obj <> endobj 6278 0 obj <> endobj 6279 0 obj <> endobj 6280 0 obj <> endobj 6281 0 obj <> endobj 6282 0 obj <> endobj 6283 0 obj <> endobj 6284 0 obj <> endobj 6285 0 obj <> endobj 6286 0 obj <> endobj 6287 0 obj <> endobj 6288 0 obj <> endobj 6289 0 obj <> endobj 6290 0 obj <> endobj 6291 0 obj <> endobj 6292 0 obj <> endobj 6293 0 obj <> endobj 6294 0 obj <> endobj 6295 0 obj <> endobj 6296 0 obj <> endobj 6297 0 obj <> endobj 6298 0 obj <> endobj 6299 0 obj <> endobj 6300 0 obj <> endobj 6301 0 obj <> endobj 6302 0 obj <> endobj 6303 0 obj <> endobj 6304 0 obj <> endobj 6305 0 obj <> endobj 6306 0 obj <> endobj 6307 0 obj <> endobj 6308 0 obj <> endobj 6309 0 obj <> endobj 6310 0 obj <> endobj 6311 0 obj <> endobj 6312 0 obj <> endobj 6313 0 obj <> endobj 6314 0 obj <> endobj 6315 0 obj <> endobj 6316 0 obj <> endobj 6317 0 obj <> endobj 6318 0 obj <> endobj 6319 0 obj <> endobj 6320 0 obj <> endobj 6321 0 obj <> endobj 6322 0 obj <> endobj 6323 0 obj <> endobj 6324 0 obj <> endobj 6325 0 obj <> endobj 6326 0 obj <> endobj 6327 0 obj <> endobj 6328 0 obj <> endobj 6329 0 obj <> endobj 6330 0 obj <> endobj 6331 0 obj <> endobj 6332 0 obj <> endobj 6333 0 obj <> endobj 6334 0 obj <> endobj 6335 0 obj <> endobj 6336 0 obj <> endobj 6337 0 obj <> endobj 6338 0 obj <> endobj 6339 0 obj <> endobj 6340 0 obj <> endobj 6341 0 obj <> endobj 6342 0 obj <> endobj 6343 0 obj <> endobj 6344 0 obj <> endobj 6345 0 obj <> endobj 6346 0 obj <> endobj 6347 0 obj <> endobj 6348 0 obj <> endobj 6349 0 obj <> endobj 6350 0 obj <> endobj 6351 0 obj <> endobj 6352 0 obj <> endobj 6353 0 obj <> endobj 6354 0 obj <> endobj 6355 0 obj <> endobj 6356 0 obj <> endobj 6357 0 obj <> endobj 6358 0 obj <> endobj 6359 0 obj <> endobj 6360 0 obj <> endobj 6361 0 obj <> endobj 6362 0 obj <> endobj 6363 0 obj <> endobj 6364 0 obj <> endobj 6365 0 obj <> endobj 6366 0 obj <> endobj 6367 0 obj <> endobj 6368 0 obj <> endobj 6369 0 obj <> endobj 6370 0 obj <> endobj 6371 0 obj <> endobj 6372 0 obj <> endobj 6373 0 obj <> endobj 6374 0 obj <> endobj 6375 0 obj <> endobj 6376 0 obj <> endobj 6377 0 obj <> endobj 6378 0 obj <> endobj 6379 0 obj <> endobj 6380 0 obj <> endobj 6381 0 obj <> endobj 6382 0 obj <> endobj 6383 0 obj <> endobj 6384 0 obj <> endobj 6385 0 obj <> endobj 6386 0 obj <> endobj 6387 0 obj <> endobj 6388 0 obj <> endobj 6389 0 obj <> endobj 6390 0 obj <> endobj 6391 0 obj <> endobj 6392 0 obj <> endobj 6393 0 obj <> endobj 6394 0 obj <> endobj 6395 0 obj <> endobj 6396 0 obj <> endobj 6397 0 obj <> endobj 6398 0 obj <> endobj 6399 0 obj <> endobj 6400 0 obj <> endobj 6401 0 obj <> endobj 6402 0 obj <> endobj 6403 0 obj <> endobj 6404 0 obj <> endobj 6405 0 obj <> endobj 6406 0 obj <> endobj 6407 0 obj <> endobj 6408 0 obj <> endobj 6409 0 obj <> endobj 6410 0 obj <> endobj 6411 0 obj <> endobj 6412 0 obj <> endobj 1 0 obj <> endobj 2 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 3 0 obj <>stream +hÞŒZK“ÛF®Ú£EÉ­#6ßÎÉkÇ©ì%.{|röÀ!i‘¶H*¤äÉägì/^š¤d;ÙJÅb¿Ðh4ÐóÃÏïBs˜ŸýëþÙ¯­ ÍýÇgEP¤fOÿÉGfMFA›ûþÙÞèÿûŠÿy|æýÿÿDë"¬ ²¼°´ìþÕ³`¿Bž·£¯˜ç~ðì>ôã ð2ó²¬ùªÆ¼jæî0˜wOóÙ=ô÷þ. ¬7ßQù…þ¸#ôªÀ¼8ÍÔdZ‹^^7û;K=f¢œ¨ÈÀÜ ùƒ ]c,ðÿsÿobOxæÝöqî8wŒG8Ãd2¯Î~ÄtjÓ BØø»ÔCg –›µÿýÐù¹°G»‡:Rcšyw.¥}5H‡ˆ<3~‚æEßè¾U n÷Ìh±§K!F?x$Fœ–ĸn y¢-B–{’¥På)¿ÈçVª@Zw&IdQbÞv_@oât¿‚×ϳyS‚¥ÏÌécù¤DßaÂ`þ=ÎÍf£—/LªaËïyÿî…æ‡×!ÔFO¥å‹‚}ðîý<Râ„ïŒÎ›²Œûrúì'A£ÁçôM\*UUÆ4ˆó|UÆDï4Ï3G8´{"A”Y +D: "&-¿|rV:r9`Hĵ³¬F_è” ]M³Þ®å«%ùBca%â6ZU% ©MO¤ÿ~˜ÐùîøR1„@L.€,á· 1ùQ^~óM5Ê×je‡qÑ[sn¥ÑÍØ‚º±€˜ÅE¡J«~FÚ:÷ªKßHSÈ르èØbcü­]gf<ó0ÅBÛ>ø–œ‰wAg­ ËB¯¥ç±Ã„Öødo-Fù»<É÷i¢ŸÐOº‰n¯«iÞüÔ?àÇL¿ö£”—È‘&žó»L¸4J‹gõæ wÝp౯˜ý¯ŸìéÐ*ÞûŠ<³Å¦(Ÿ'…òÅP¾D•/Q"#“ûÏÈfªq‘3 Ó*Ö¯H)áZ‰Í…ŠfÞ‰¾ÂŒçcNcŽ8CâMÝœä‹ zG’È•N/Õèv¦¼¥®¬Ö“Ø\3ÏfnGÞ%ñ}+> |)#Ÿ-!;±™xdî-Ý!™pU’?Ï÷Òµd³<µÒ bùIвßp,ÙÅYÇ’ý•ˆFÈÂÕ®ir`ñ^ú¦˜9ÉÿczMž7ˆš³gq9Ôü|'gåFò‰~,ÚGK±Å;ŸÍø%è訚<;µ…­eèõv–Ÿ;W¬`¤+õ—n!öNx†¡;æ»ÃÖ9h\¨Â6é—ÜÝÈsÍ*ë­WHY'õ¿r`qÊó´‘öÖê–%DÆÎÕFrªØ«ÅÇE¢¡EtGI»ÿz‚v9T ¶!³qôDŽžâè‰=‘£g8z†KˆÉv¶ ª0Oâ¯øk¡ûk÷{LéÎè«¡²ºwû‰ÎüÃñÅ|e£ÒÄðDfyÁqÁÑ»f^îÛÍØHÝ“øýfëÈ·ðeì‹M¼¼#©`'êüèïØþ:¨ê¹Š§£ì) +kïó]:w#FŸZß1»dQEwŒËFÄ›qh2hþ}„Ô¡khjÌ =ã©qs£ òN½§%žºéݤ~~WmEïIuy…@ nXIR(IªóL‹py¬—íŒIð þ¬„¹ +"ÙçÄÛf>O]unjò›‰p£yãG{ÁyŒ¦¾›IÊÃó̃I¶¢»‰Þ··O +¢¬êGB†Œï"ŽµhöÌd1ÚTú[]ù$¾ZfVà•'ßæËüQ"Ux‡Ë +ÉÔš?ÂTî‚)\¤wp±‰4°®åˆÄâîþôÃkð*hN]pàÏØÏ¡ë è:^A‹“ÔƒúJ+Or¡¹fA±MzUŸØwѾƒ!ŌظžÌ—n<–ŠÄVtV'}r :ÈÄVvÂÒ»õ]‚̬ã•‹!ܱXeè+C:–àýqö-ó˜ŸþP´w:¯Û€ò,:¸zm §kt›+4QÁ"È‹PVÄÔÜ&x’À•’Åõšß­ E[à<—µ9EŽTcUbMzIèÜ…jÆÆ•¢y`°sê®Ò:É't¦q;t‘Fõ\P­›Ž5 JîÕ~gâIz/èÕCÌ­˜<§RŒÇ«—8btñÙd¨‰Óx…‹.t§Ì½~*µâ†q2ˆí³[‰N±+fQ(i ¬d½` góD$dWÂ7Aóžüp/˜TÁÓ£rÑJx •ˈ§+pÑZ<.må³ÿ +Á–Õà5…ƒc¢€FÀ7—32¢gˆD9¤¢¨ŽŒ%DÖ/ìÝ·¡Wl_:xÕlèêYXºþùoÐý›i®H÷bN’S°{ÇO'g‡lÍ1|r¨¿sØ[1C‰^(_”صš!Ô+œV·”Â-¡~Ì.?­§ØÎüWa¾ÏÖ³ ºHÝ¢Ý1´;õ$b$K¬IØLÍL–Ës>ù!â‹Áب©*ZmCWE8$÷#rdœ=Ubï1¬@Ðœ’ŸŸ«—/€9Ø÷o°Ç­ß —‘ {•øBžE>x·bã`à•ØÕ‹_!r™¯LÑ̘slŽOļÍ%G䞉®3ñ-Ò´AhÓäëp-Áœ•Ç»5’uƒÆ6IˆFMw6AÚÅ"@ð<ã";?c‡7 óx·†ß‹‡jì{ c„Ç©êtòrK(v;ƹ™„|ÝD¾Qú]˜oUÀ¡'†CÀ‰xAÙ*`¹=`Xˆ˜:žˆ[ ‘´WLÛcžxÚºoS†-rƦhí ]Óo·Ç½vÎG¬hín#ˆ l€^½å½ï¥#÷ùî"Ž[UV:MDÆ·FÞ#oQœ]ô/\PÜâÝÝw¤¹.AV¯PX± W\€7ò0Š©Œ™¼%×â4 £-Š:jŽs½º¹™ó= E©oáì¡I¼óB@ InË*^Jµ±êa‚z‘V‹\Ê">‹Y@y‘! +m^ð£r)Ë®Àø\˜8·4-­ÒâÁϘ"l&ØO µŠã²Š«×-rZð'ßcîm¡Â)ÏËùCR1³•vÏ9¸ÀàÐ[eΛԎOô„Œ3æKÕ²76sË5¡‡ÆÿK%I]…2Y+”±ú‘õ2ÒèNÆŹ–u„¾ÙÎWßÅ.ní$)ø¸IÇÙ—|óÏÎ÷Jö#äñ3nr|ìP9×GŽ呱_«‡1ôA8½É7)?Ú‡ö¶Bžm2þWì3WšÞÀYv½üÐ{~e|³¶XKãñbn‘b€_¤D:HL)Ö#ÁyÈë )@‰’,2»qÚV3s ˆ/_ZõÕÜk© w¨øFµaw|òrV 0Ì»›ª-±Á¡Y÷\jÃãEIÇ.c6UkåVW›åàg­×n-x“ý àñÌYŦÖÜÌÍ ¥&¥*ØEœ¢j} € + {îÅ8ÐÌi(°‚ꥤN]€Ã¥ƒÃdv6Ã@ÁZ=•ZA/uŒÉ|½(^bs­»‡ŠckIS œŠ¶ye¥ßŠ›•eô4Ö‚Õ ?̧›ýîaXtóÓó×4¥Ùò°*£>ž®nÐ|¥‡:úÏZ˜= +µ-b·Å‚ÔôVœeg…€³L¢þ• ëq=#‘Èk]. wðÞ±¼`àJ2g™-'+ÐYó8qFï)¶Ë8'w–à{j÷+Äeú È.g™±,Ž>-’ •‡O(øâ=gžh²ÄäaÑY¬X»Ç\ €æœàBä¹—Úœ_jåa#r;Çں߂óê"eQ+“¾rŠYU#ÞgëÉ= M¬Ù•$/.]ÆHÖ{Ʊ j­ <0F)<Íù¿Qy #òÏ#2—Î7›B^Q‹k²WUõB–.Hž›‘zÝž-‰\iFêg?Þ.æÂL¸<F‰"•‡íöWyåWž¹aÈy0w©‡·/Ò&õ€tws£>éÖmG™&çüˆÖ ˆ¶å)õhR‘ +ÕE¸#'#![«ËÛúÏíË >™»ÕqöX-Ø#AaÞzZí"¢F` +ŸŠã×â^g:Ž¾´‰Óž«cÙC)ÍêNæœåé›™¹µÙúbA*trïWî¥KLµ”\ß eÊEÍÕ{Ã11yrQV<Ä–P)çëLßOu\qúýéˆ7²3~üÌš¸“hl¸&îK…ÈæªZþ!£º¨§ ]´¨ gú²#[HqgõE]§xÙËÆa™çåÕn™†O·Dª$š†]lbHâj*œ&‘ƒ¾‰Ûr“ú=âµ? °‘óÔ€Ä\ ¯G2TähŒU{RÝÀ¼ä× NZ"¨,y•zT M¹¨bÊ4°Û¿VYêø{§)tÍrÉ,Šiò»—’¶< L?š™7·²yêUh´Ò€\Dƒ”ý¤’7qƒD#LpËè&–ÌÛ*ªeá=v‡™q¢Éž=f7ÁÜ(X«@¦Úœä=7—êÕ.’üâöAžfWîš6 +×—<%ì“JPBA&Æ縣ùqœKi,CŽ,Pé)çùÒoÙ8RÀ•såÁ>M7çrA!Ô ðл3×W"‹7xvŒ“©Ë¾<4ü‰ D¤­xOiœ}+R¡, 0F=%}_ý Ò"Ð土»¡ÆR¹HŽƒ™HijæË‘üæ$ÀœËŸc•]e’ķʹ<>[}|·ªwÏ6)®Ê€«"¾ù]$jøöËR±€|G»“¼ª:#z°)‘+|‹^d„$³èOÙàM¬ïKY±)ÿ½§("µW +¨ñZsúú½ÉÍ· Swä¬Çù‚L¿¢H]½E+!ùyD?姩Ûµ"†åâyXD_û½$WUºBÐ\Е"”"^R«þÉ(6Ï×P³Z|•øëY¡§¹unÔÝ:¿EÆùß¾•o Z¯ù¯šï…Ô`Þ&2`ñ6m­´²d‰d0%ÖÕæÕk?ËyÕ[{³"“æ?¤•ëF¾T/¯Þsó»tzU#²QB5,:ªª«'홧°' 6u›ŸîŸýO€jgË +endstream endobj 4 0 obj <> endobj 5 0 obj <>stream +hÞbd`ab`ddäóõ÷óòtÖ®ÌMÊω¨þaü!ÎòC–Gì·Çï¿®ýjc•É¬áýîÆÿÝ[໿àŒìB ÌŒŒü©ÙÉù•E™é%Å©E™iÎ0ž‚F²¦‚¡¥…©ˆ4“– ÒÒ@Á1%?)U!¸²¸$5·XÁ3/9¿¨ ¿(±$5EOAÁ1'GbžBQ*ÐÌ2 (Ôe@ÀÈØÎÀ¤pd7 û¦ï}|@ôsUÍæÏ¿ß\þ}3ã¾ÍßyN}Ÿ¸à»îfæ Ìí¨­i«ìO™b·ÖÔ÷7¯É¢ß…ß5S¾ f»°|EÃ\‰úƸ´¼&ß>Éß¼r¾{^{¹nÇᙇJ¶U,ˆì/æ˜ÏÖþ]„õOãïÑßÁßõ~ë}B½ï`ÈÓû „@ñßÁr›Å¾Û|—Bý[ö· Âi¸_ÕœŸ¦ÓGÍ`{ÎõŠ Àÿ^¤. +endstream endobj 6 0 obj <> endobj 7 0 obj <>stream +hÞTPËŠÃ0 ¼û+tléÁIn…Xº,äÐM»w×V²†F6ŠsÈß×N³-=h@# 3’ÜÕß5ÙòÄN7 µd7²F¸ag òŒÕaéfÔ½ò £¸™†€}M­ƒ²ò‡Cà V?Å&[ƒ<²A¶ÔÁê’_#ÑŒÞß±G +AUÁVÈÝ^ùƒêd’½¹Ë䊹ÏcgpðJ#+êʬ¨ž€d>gÿŠ[«ÿ‹e3ûÚV"î.lR¥S^ôȳÍ÷Î’¹%|½Ä;Ÿ¼R‰‡…‡h^ +endstream endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <> endobj 21 0 obj <> endobj 22 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 25 0 obj <> endobj 26 0 obj <> endobj 27 0 obj <> endobj 28 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 37 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 38 0 obj <>stream +hÞäZËrã¶Ýë+°oŠ¼A,çz5·*‰ãÑdSY(mëF–‰Îd~#‘¿L7ÀD‘•ûp\)—EI ðôéÓ’“ÛÙ‹·ï9¹ÝÏŒ$–åDå†HFvÅìföÏùìÅN8™ß̸ þàÀs›IA¬dd~?c0KÆ”“d~ oWdþyö‰¾zý†è,'/.¾úŠ\îžg’now‹ûûÕæ–¼Û”Åîfq]$?Ìÿ5{=ŸÁ>pÒø]ð<Ú… »p~ŽÀY*¯×NqM]-.uXüëE"U¦é"OR om’ +! ¾•IÊs&ó,§—»m^>^—$1™¥ß'GŠðýn¿JR“ ºÝàåøÍ2’òLcÉü•¿dW-ÏxXþ÷Dg†ŠDÁ+ã–0s{ì|:N<í3ë_ø4oi²mÀ*+0Óaà¸æËõš\­nïJ0¦¤{rUì‹]’J™qúK"À h±Ì:ìÍuæ‚iÍÁ-Ÿ½åÈ^#tä=iµçkøä7~¹+na€<‘{øŸÁÚ†ž)E2—,Úù[…_Z­óã»@QkÐŒŒÿ%óÏÀ œðú)j'cú¬)Zy‰ðSåf¿—2ÞÂáU|œÜZʵ0•šD¿µºžMF¼KRKåo‰RtV¦äð{PžÓϱ ˜Ú3€:3°5`8¦bp\y™â,œŽ_>®™gN=k äâÀB£ ”¨…³ÙØÆOwU¬%è&øV"àuI^m¯ï£o6axÙDƒ×ÙœpŽJ2íœËûlbàZà\ƒZ›¤AÔÖš‘ZÆAþOaÛ˜ˆ3œ¯ˆ7óQˆ\pqÛcœs~˜6¿¬Þ ¥c™1ÌÁõ¡yýªP6O¸`€Ç—$… ø°½M8~Ü%^w«k²Ø,Éû/›rñ+¹Øn:¤Â º)WÛÍ­À +`*g3>l*a kË;©c;¡ÀZ:n›Y«[„›«›à@³EZµ0w71Î|Ü]öøk)*²F€(Çå*„ÀQ8²¥¼×9ÓE4çG +O!­Úm1™Ü£9™ÃÈáT3§ëõ¿f;/›Èåa¹à™Ñ€?¹l#U`¡ƒ`Y\-¾zKT¤XúË +…ƒoâP¡òC…r@x)xæâ œÃzƒ5oØ~FćŒ??ÚŸXZC³Ó1¡’!¸–lÐ Û†…´IåÒÈvXM\‹e±#‘gŠnxÙa‡<é'P'C±¬øz»,b½Q–ûØ Û€ÝgÁ}ÀVVÄÑAv‚·(TݸùTÀF_—*Â…)/¶÷‹££«=T9ÊÕzU~‰1Ô å$ÓÎA"ƒxÀ¸ÒæX´U+ÚBÐÓ–ÏWAòŽ‚t‚+ìßû}¹ °úÍj „m”ZI‹¢ÁA_@÷‡ÑÆ4*eé*Ýh¶[[¹æÓ§£¤‰4£Í`Ì ÐdBœÖΙ‡¹—GÉ WK¹«°™Vº£yÍë¼’èÀ霮 Y`4„ä¤# ©€¹Ô‘c¼ÖÇ•à±2ôQÛN¢ö3ŽŽî8™‘¹Žs…̈–Î2÷%k”̸þdFÂÿ‘ìzÇÚÿ¾(| ™&$:P¡oËÕ&ö õ1”ÓRøR|°L–rñÖe‡‡ŽæÞÒ çûý@iTð&ù6º“`ˆŽAಱ¤zyù¯3|*,Oü%·T–Š…–b\¡a\*1Jc9‰ÆüÙÒ¸±Ä«#‰6-‹—ÅÍîÝfUVÌÊ9PJ¢6K¨¾Æ¤3ãù×[û[=-“ewÿÍÚ¿%ªú3üÉâ_ˆ¶p™]Í–Ç`¿‡ÀØV.ˆ93hpë&Q’³ Ò7N‹éœ¾Xð5‹Üùd_éñŽW 'ÈXÞNL¹šVpt +˧jdõp9BY¢Œ+ÙŠªD”;TÊËô€òß[9¢Cða_ì^-ÊE„°ö=@ ³«¶-Ãq¡O55Þ]8« ˜sýŒº€5ÞP§èã. =üm/àxÿŒ@5 ¡ú†q¡Ø±d趦Æœžµ}NH«¤«š¾bôËåò2Q¨å‹ò.4]-Ý~S”u–‡C ‚µ!×™#9À 㲕XF:ñ?Ð<Ç–ú$Ø]fu_Œš–Ž]¦ô`Bòéô>|-HEî½nH,Zl×ë-¶­ýŒÅ÷v%! »¡eªnÙh…ô§ †µEÛKiÅÚr{Û*ï8hQ?‰øª±À&;€¾­ÁŸ@<5öù‡á4žêFÄ–Û$ yj õÀ»è.îâ„ c”÷r’…Þf=T{0Î!³¨½|˜ŠœæåFýeÜ\¸9?vó«âvµ/‹Ý‡ :»£ûby±X¯\\csÞÑŸ\[KcƒèYõ6†M+¥Åû$G¢ûQŸj¨!õuÂ@0ºÄÎâ¿JRéo¸@mPÛS&xÍÑL#v‡ãxÚA%ß·“ï»ëÿ§Õ9¼Œîa &ðrÄÅ‹íã&î5 ¸à~ìÃÌ&àè7µüéQ3]Ôº¹'}ýëâþa]DªÈ’_Î`%¬G‡É·qP'VRÒ>«BÊÔœúyÆÉŠ„'û„$) Õ}üÙ€Á¬ƒÈ!‰ØRxïG` zÉ`Ï;zU_;p‚l–øŽ¸ý.ZÍvþjJô®¦uÿjñ³‰ByëÃÁ/žãSW–gÕm—M ±¶nÿ!ÀDø Û +endstream endobj 39 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <> endobj 42 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 71 0 obj <> endobj 72 0 obj <> endobj 73 0 obj <> endobj 74 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 75 0 obj <>stream +hÞäZÛnÛH}×Wô#‰:}¿<ÎØq°‹…akó2X ™V´‘%C–w&Ÿ´¹UÍ;%6©ÌìDÙAYNÓÍîÓ§N*’“ÕìÍ»{NV/3#‰eŽ(gˆddŸÏg?,fon8ádñ8ã‚0ø?¸³T +b%£LÅÓŒÁ,”)/Éb _WdñËì§äúí ÑÔ‘«7Wß}Gn÷)wT&»Õ>{zZoWä/ÛC¾Ì–yúÏÅ_go3X.Cš° +îZ«Å*|X„'p•rÕ½çxO]Þ\êâæ?f©TT'Ÿ‰`µ8’ÿ¿Y§sCE²ÛâvÂb™s*„±dq¶ìËÛ3^Üþ?©¦&©‚OÆ-!ÅÌÍÏÞ¯C?'^ö¿™õ‚/ § ux¬<fz ü÷ü~³!wëÕǦL^È]þ’ïÓ¹””'ÿN„A’?Њ½Zyˆ Cµ!THï=¡Ê1¦ +A­©ÆÞT¨ÎxÉ} ž/èo¸¢Õ „DCˆ?‡Ü7ŽWäg¸e†ÛMdºø./°žB¤†¥Öb&Òosa1Ùc1Fð]ž=ä{r•m6²eÊ=@ó)ÃÞÉÝîõ°Þæ/aBKaj¡<,}RŠ!mµÆIÃ\¶CØbÒ2ùDn^·ËÃ4á&Å?Ov)|;€6yJü–ÚÈ [áðîE5Š; ÷Ç´Ô»ú`šŠŠÙsÃq c;ÅxªY W…Òò+@îD r + ¢ ˜+Þ`^°0G˜+À|‘rÁàÛgàŸIžëÄá`àG¬¢ÂEÀÕÇà]d[”G`­HF1uÔÊŽd 9 „k5rãèwÿº{vv wDÝ&9äÌðB4 ľÎY©ˆ$ «  ©a¬­B ”Àc7L•.`§Zâ¹OTûÖ>k)8Š‹o![•õJÜùÌëƒjme”݉d%·=õ¢à¶¨¦ãªZ/¹ýH&ä:+ t„V œBChí4ž¼V:Ãzµ3£Báí´@õûÿ8‰ÐÿVuy!ÙöÜ燺ÕÉN1PlE}䔤D×–Õ§ÔbX½•«ñ‚y´þŠJR£ÛS’ê+#òö×ìéyPÕš¢5š"¨1M‘8®µ<Ò”ZIxB&0ÙÙoÈúˆÈ¢»¡yËš)é:´“|…Š(À…FÛ5,+ÎḖºT–.ÙZœê£ ö—fT©Kq!ÒÄ\ˆª©üSò?îØì¬&_PëU~õáÓͶ “|î8 ¾ @.<å°*pŽã+ǧŠf5®v¢¯3beÉ8aûí¤Ë[Ÿ$O¤­Sž´}u¹Âºdü +ê¤Bc}ÝC1T +Î8Õ¥Tð“8®Á«RÑ¥ƒi’øñGKÁàãf®P!ô¹W6X´–×ZŸHW ð±ÿ}~^ížžwÛ|{ˆ°R9b_IXØ0®B(WN¹Š‚šfš{ÊÃôK˜ù +êÌX‹šr³—O÷ׇ¿eÈX n jžÂǾ° >Av«e Èu(ï‡b_²Pþ+ã:µo‘ã<ø¹d²¤²ßGý9rx½{ýŠmb:¨”‘Ì]]Hð‚Æ8„±BˆÉïÅdÅŽ ä›õfCüÄ00«‚A@­ÅqfªÂ]<­áçPMðn¦ˆ ‰øÚîÌÕ–åœ?ìº7¾ˆyÅkÑÔþ´ýo¡ýn™o6ïöØ ¨×-äUy®CN‡œA^pãŠÛãŽZ“ÝS»6ùǤw%¦¥÷wûÝës$«Kï +-Pqêz¨ËØɬ® õXO¡£—¢ò -À§#«|‘‰E™ ‹=ç˜À¸„%Œ4 +´ŸÞQTîbVž“¼þžÇ\’4 +âs1–:†ãÒ˜˜ñ´f’ñöÂŒ§Ò}ãÙj–î¶×ùcœuöºizøʆÀWÁÕGlgèH° - s–qdiCåW6 Ê w[Ý’ÒÛTâ#Æìð±¦èƒ‰†žiœ*ÂOƒãN°©ßëö#óM¼c5Úsr'¼ò#­E¿¬l‹´£fÿv½íù.Ê\¢¸xýi=ŽK¼Ë°ÃúR3ÉËX¬.¾·ûÝsDg…7A„ J;Ø$a +ÇŒG“—åÓ«ó»<ëŸÖ¹ÞÊõ½UÏ ”`Ž D š`â&tƤ®‘žž9³§w9>à¬"ö._­wÛ°š+ï—€U…q¾¡X{Ì^©3êWùM ÚWÖ»] +îß&¿DôU(]tøt4…Áu¶Žú¡ †ÏÀ'd°ÓH\V +Óì(… ÷Ël»ü˜­£†#Ce6Î`(ÁhS\ŸÁ…$0;±ç×M`_£`Õ|ZÁz¿Ù"õ*vç]hB;oBøà2V`U5¥}au€æ§ë€æݘ6EÅ&ëíªÅIÙß•†>€ ¦|Oß,Y%Žsp •°îÃÎúy žh¯€ÝöR2•gôîŸ7ùK$αßÚ2NV„.Ã7Ì\£ª§º+ðÓ»+—«}µ¨…kÕèÛ§6¼€Õ›áù¤È êœá87"æ·ôÈó©£.ìÅ ­#$îû‚÷ë,âð¡¨BYr ŠBQrq¥¨7ŒÿÉê.­c­í~;á}jÃ˦v¿À…)J‡ðÈ/ò:€Æq.ìH;ÁLj'øo  M¬}ÓUÁµ_táÃ/ºppÇUßíUí*NþW€ãp‘i +endstream endobj 76 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <> endobj 79 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 86 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 91 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 95 0 obj <> endobj 96 0 obj <> endobj 97 0 obj <> endobj 98 0 obj <> endobj 99 0 obj <> endobj 100 0 obj <> endobj 101 0 obj <> endobj 102 0 obj <> endobj 103 0 obj <> endobj 104 0 obj <> endobj 105 0 obj <> endobj 106 0 obj <> endobj 107 0 obj <> endobj 108 0 obj <> endobj 109 0 obj <> endobj 110 0 obj <> endobj 111 0 obj <> endobj 112 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 113 0 obj <>stream +hÞäZ]sÛ6}ׯÀ#9!øþxL&ÓΦë±5û²ÓÖ¦mmd1#Éíæ'í¿ì½€HB”ÑiZG›ñŒ%$œ{î9¹Ÿ¼zwÍÉýzb$±Ìå ‘Œ¬êÉÝäûÙäÕ[N8™ÝM¸ ~àƒ;K¥ V2Ê™=NôB™ò’Ìnà ãŠÌ~Ÿü»xóÃ[¢©#¯.¾ûŽ\®Jî¨,šûUõø8_Þ“—›zuWÝÔå/³Ÿ&?Ì&0†4aÜ%£q> ¸J¹öÙS|¦Þ>\êøð÷U)ÕÅ'"/§¾Úr*„4øU—Sî˜tÔ—«&6ß>ÝlHi¨-þUZl©ãÿWëy95TͧËÈ”S!Œ%³7aÊ~ûxÆããÿWjj +Q*ø͸%$öÜþ<ö9ò²¿¦×¯ø²° +ÒP‡kÀ¶«ÀÌ€ò™¯ r5¿ØÀbÊbM®êu½*§RR^üV +ØE}K[öA­=d¨6„ +é½'T9ÆTäqØ`¡ØM…ÚiÜRxç#û W´m„›!l?‡Ô7Ž·Üg8c†³-T9ûO\`=…6(u0s¤#íñ!Ðî!üIlC‡¸¯êê¶^‘‹Eµ^×ëä ÚR胛0`êá&Ñ?£Ó +X©ácÚ­ÊÂV-(ÉÿàCa;ú~™ƒÐ„®Üˆâý„!tîíD$Jö~ +QÖy*9UBãö·Zwý©~@ÕV jɼY&x!W A ,¼†%qàâBc»‘–z×áűs$óÔ(ÔËÏGéðö~¶ÿ'€+>¾ˆíN¿¨‹_«›’{ÜäzóiQoL)ô" 3¸p pçVÃ9$¯›­›Ä´Û qI¼€q +ÒíºÀŽÄI°½iŒ\™ˆ­§J÷kûA©ÓÐvð‚tu3*ùÀÝ\ù6¢]ÕÐ>. ÎënrÅoůêuµÁo¨oªM•âÌH4È„Em¤†±TÓ™`Øn˜ÚZŠž÷¬CÚZ;Šüžr®_»ÖFôÜ•YÑõÖ¯—ßÚ$Œ)ç6/9õÕ rýi¹©þKîVÍ#AÿÿN°ÕNS $vÀwœÅB l×sM鈧z&KQœÅ{hûýpš¾¬Åñ ¿=…+R·Ç•á”zÆv±ûû%!€|XŠÄN QËÔb%±][¶KÈi˜–¸—F(²Þê)ë:áÏçã—!ô—¾åqÔâ@袥î6ø!Þš£ +(GMF¸ðØ®µLE@6Bîp³Ð1J â¬_äψxb/â‰Ýž hhÎÈUó*œz4  +„fÔdôÏáZÊC‡ºLˆn 2 +t¼c0<Ó{ì…1‘FF PÒÙª£›º­ïæß/šàtñ¡º¯S9pYw `¦p¥ß•‡$DMevŒ6£¿8üý’¬+Cºr了ØQbÆP¤ï”T”ÌÄÐDj²±¶,ø´Åëõ9äþ •Ð¹ýžJÈ>AÀ/šÇͲ^nz-VNâ’ÃÚÉ à±Â¢RMÐn„|²š®µ·¿^‚Ïœ€/2UˆCß(x§¡mà ¶eœé$Ù$äN8ÝAü¾Z¸~˜ßmþQ¡;¶Å'”[Ô%üZ%œWÆ`îa$•9Û¦¶+ãÚì£wjVqjZ¾°gð‡•¡§çÛùb‘0µ@Q#2ÔäÛXŠ¶ú¸#™[^ŽwFŸ·$Øi”yT"_ßÝÔ‹Å»˜ÉIÈ8¦@Ãâ6¥'Z³Š£Ë Ãª*)÷*»K¡t”;¶g-Ëxc=„¿nc"mÁv`§ ðl üKæÐq}r:Åm+‰&ƒV=S“¹>+Q¶ü (·…™4¾[5O{‰‘Þ¡Ä@Flrè©¡]1vÄn;Ön숋|ŽþJr’ë¡Û`»8ÿ\'Câ¶p$13Bª”ûWUë|SgåÌIEäçfù¦¾‹ÕÓb“ȇ4 +ä##dÄÛc»O©i3ÆeH5LÕÆi÷®ô¾ŒpÛQ ÿç +2íú6!9X tq ÑÄÁ¥>µ$­Æ¥céô‘¬â-fú²Tkõ›‡”Òè¦ÑjPK4K ÅÄʱµcfõ¹Ÿœ´8ï‰IOçËù2¡2— Òäsp0,ÐŽ'àÕb,¼þüµÚç´z ôëå¦^.«÷Ímd;›p2Âs%&¯á:âÁº3¨½ãžpeOÔ “Øõ$/yå¶õNKÂÖ;Si˜//Kv¹÷¬ðÐ-{Âz íÂáûqgç±]8¶•‰cˆj?N¥;g^ÚÉaê˜pYîqùrÕ$vZ@™"Ïû< žcÁΦ8;î0Ũs„-èÇ°hXï‹f¾Ü¤y¢Pz›Ê°© ´ 0+­ˆD íØÆósOa\®`:”ë]~ƒ2¡óPá ð¸õ/mìß þͽ¶qíãÑñª¾ïß’AÀ9AA3œ£4 O­rúm™¥ßÊ5»QÀíqJÉUSrVüž¨÷*œÌJÚúÄ\C;ËÒªÈКÑïf°³÷×ÎeEí2üú¦ZÞ¬f_?à;º²˜×‹´†Í CUæãæ[¯ñy‘á³ðy¾©*ƒp |ÄMËG8«Ábˆ7 ™¼ÚÉQyŒ4g/$€çú¨’,š¤ÆÊ… Ö¤GÞe6Éw¾Y´³5V3@_ ]'x3|ax6½ØÎÁÅì§:É«K£œ 8{YQÏ“O¿.Ó#Þ¥G#hN8AC¼ìd%_ cÏÜ n1ÿ`7®´ +endstream endobj 114 0 obj <> endobj 115 0 obj <> endobj 116 0 obj <> endobj 117 0 obj <> endobj 118 0 obj <> endobj 119 0 obj <> endobj 120 0 obj <> endobj 121 0 obj <> endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <> endobj 127 0 obj <> endobj 128 0 obj <> endobj 129 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 135 0 obj <> endobj 136 0 obj <> endobj 137 0 obj <> endobj 138 0 obj <> endobj 139 0 obj <> endobj 140 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <> endobj 145 0 obj <> endobj 146 0 obj <> endobj 147 0 obj <> endobj 148 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 149 0 obj <>stream +hÞÜZÛr7}çWàq¦R„Ѹã1‘ä­leS.›k?lå–Æ +×¥¢¨uüIû—Û ÌÃáˆVBkKU$EÌéƒÓ}v={õ·wÀ®fV1'<ÓÞ2%ئ˜}šý´˜½z ØâÓ $ø‡OàW’9%¸lq;x.tPlq‰/h¶ø2ûWv~ñšîÙÙ«³~`o69x®²»ëÍòövµ¾f?¯·ÅæÓò²È[ü}v±˜á:hÊÆU€o­B¥U„¸ˆÀðSÚWsÏiNSN®LšüË\in²¯L +Èç_º|.¥²ôÒæsðByî³7›»4|õx¹e¹å.{Ÿ;)Òû›‡U>·\fwkº¸XÁæÀ¥´Ž-Îã-‡rziúÿæ†ÛLæ8ÆÒ•›çÞ¿ûž'~ìϹêwü±e¹§ˆ2 +ÂöøsþxsÃÞ®®ßb0UöÀÞÅ&Ÿ+Å!ûO.qdůØktÀd¹±ŒKB`\{!tb±•ÜÙjéͥÜGâ…D šWƒ¸šýçYoZ{ø;o]¤Û¾*>­9H¤Ýä—9>\æðésµàx!…2í¸‘Œ[!géi¼™5ÎXmwz+=·^"4œýÅÙqÁ¤¸úøâß3” eš(lj«›þòÄ ÌËw–>ú}T +™×=—ih÷k’œóyDüýjIs•ÀZä¦F)ãÖŽ ŽÆ­õê +X ÕEB>4C°>â +ÇBlw –õåTMï +ëó嶷˜i,ðà7¸ùüÜZÒ¸5PÞdðy—ʆ²\vyÏ­.™%ê«ÀÓiù<¼Öèîè9 È…”Ïæ˜Ì1¡6´Ž9Uõ4åý=eD•­Öm Q2Jˆ¢¢`DB4[ÌÉ- 9=ÓO¢%~„èÐ%ú‡Õ¦h± wž°¥9bM4KOˆuÒæà¦"ܹ¿— 1–O£ñMÁZclJpis/`Ù?ÅCœ®·s!ãkëÞÒ¨æý€5&oÈVXß²³åÍÍÇe̽6ûÌÞÞ=nWëâ¡ÚAñzX 0IÕèμuP•PD“rîl=ËÕú㢔¾XÕRóv1…n/ê•ŒÖØIGnÐÈigÊ%ÈRŒZ@(âõãúr»ÂšúuŽâƒ¾ ÇDË*—Ýæÿ[nÛ()ò€•tf/÷C q£Ü¨º[ u?Då´Œ”ØiÛ!!¸n_ZºzàËÄfdYj’LO¨ëPI»µF¨S-¨³¯ù9x_´ÔÛ 'CõvšË1E1†Æƒ mpuĆƒ9ÜÓò&éHk~Ë:ºæ‰ß>2c6¡oÐõv+Aù'ZvžÏ5â¿Düu†eK ´ £Sê„!ðQ ¥–ï§t˜X°8Ó¿[Å¿Œ¢¥"ì¿u7<°åúŠ½+¶[jJ è³öš”'`VÕû÷ˆ4ŽÆɺí$WGÉ)ºñáuŒy6†×žø@òLàjWíæN­}É¿Vî´MîÔè ñ“eîôÜï`îÔ(ï- éç˜VúT)}ÅCš˜¨­¡9û³5¡•îÏXó]Å{˜TÍ`Ùõ %þ‘¥ S—èÞ5™µÃ0€~#ñC^?ÞG†ŸÝ­·›»›6B“øƒ Tüï )%kaK {£¦›~}R ƒ©\¯ìÖ²ûËÏëÕ¶)»•{JWc:0á¸òÕVéÁ¤§ÃdŽê|' ¶”Øì¢zöñs X'ȵK4Ñ#¸¢ÝÁqåä¸aWrZþ3á™üú J¿§ ÕkF´/ÖW-¤MjôaïÇ(ìh\³ãÒ{h“_Ÿ„6Îý<ÅÆiØí%£ùìq³)ÖÛ_0Eýúxû±Ø´ G«âȱn刺иRn§ÂKH‹Éý\¶ýh—âÇ\ŠK÷D°ýZä’Lß®U+ 6™;ÂR{éJÂn¥¥½.;LOå_² cr`»rðãÕÕÙÝí-’µEQ{wÁ×<Ø»s! +°ØíÝõ{¦–‡C%U =•Šª‡ýäþÄ_ÙصÕ0¡ß¬3;Ó™faécÇÎÐ]uWzÛÖ€þ:£ìN²/Ú^‡i9. É*v÷Ùj½½ØÐQ.–´Ù¦%)ÒR_ p„«‘ιÀPô¤ØÿÛ¸Ê\Ç fÉ^\ü±¼½¿A“Öð‰ŠÊB‡(#°ch~T¡®$Ø{fYê Ÿ,(Ô ø6}xŠŒøÊ{©1h¬&¥HntOGl‹Õ?ÝÜU­ŠåuÇ÷J¥c¯‹³²WÏ=KePKú‡\ V˜|`ží$à$åÈsâzRòn»D1A—æ²m•}ÎçøF;Än’†Þ‡vô;*ïB‹Ø—u—°J™àöëI©&†JhuÆ$RêÂÄïšãúH(¶º?-öu ‡>¹•¹A^&èÑCô€o,Óû½["•Š{7ƒ¥¢Ä:§-1]m¨ÊÅ‘Îu 3Ü:ýŽC‘Zz ú§¼C'ë)õ]ÔŸóâau½~ûxS|X]moE¼ŠöÆ:2û펿m¯k9ê89éÈ@Ê“:ï +Ááßt‘³I¹YÒÁ–;¦÷Št°A”~3¹ªÇEÜqsç› Y¤ƒlþósž®‹g¡÷û“.|)ñ%ôtBO'ôl§°úÉI€âcé05ïé'ÝcGŠÝ)V/TŠõŽ™˜nL›Æ&¤@˜n °¤!%!ÏoÕ¡ƒ,çää³Yk‡êûD+i»‡vÙØ÷̱VÌŽ•ì•>% héïïÖd9[ñ€xRîâÉâ~1)jÈúC¦Ç +;ÁôxuR6#?ªÇv´\÷ÛûëuÑ7x*(­¢¶cà\Œ=`(a +¶AŸ[;æ#î0º>r6ª–?jÅqß9:lu“Ìz8áak -Þýÿ%«WF +endstream endobj 150 0 obj <> endobj 151 0 obj <> endobj 152 0 obj <> endobj 153 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <> endobj 156 0 obj <> endobj 157 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 160 0 obj <> endobj 161 0 obj <> endobj 162 0 obj <> endobj 163 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> endobj 166 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <> endobj 177 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 180 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 183 0 obj <> endobj 184 0 obj <> endobj 185 0 obj <> endobj 186 0 obj <> endobj 187 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 188 0 obj <>stream +hÞÜšÛn㶆ïý¼”P˜Ãóá²sÚ´ÁÄèMÑ #q2ÞuâÂv:˜Gê[îµHK¢d‰’“NnH®õ¯ÅÉýìÍ?®9¹ßÏŒ$–9¢œ!’‘Ýjv7{»˜½ùÈ '‹»„ÁüáÎR)ˆ•Œ2A3w¡LyI7ðqE_f?ï?|$š:òîÍ»ï¾#W»’;*‹íýnùð°~¼'ÿz<¬vwË›UùËâß³‹¬—!MXwÉ*d\…‹ð®R®š{ŽsêãäRÇÉ\–RQ]|%‚ñr®á£-çBHsüÈ“Žºâj·Ã·O7Rj‹ŸJ‹#«øÿ»ýºœ*Ší#>NX,#sN…0–,Þ‡GöÇéÓÿQjj +Q*ø͸%$Þ¹ùÛùçÐ߉—}›»¾âËÂ.HCî;î3 |áœßo6äÓúþó6S{òiµ_íʹ””¿—Ü XÝÒÊz Ö€ª ¡Bzï UŽ1í88Xë¦Bµ¦vç£õ®h5иŸãÄ8¸š?8.<9‹O}»ºûòv³½)¹«ýuy¿úœÁç¯ñ¿À°Ø÷îãz³ÙWË÷•&Ñ”jë]€€‡H×0?šýMü$*ôsáٟ0½§:nb¸CåÊ,¸rAÇî°øï ÜÕ'wà ‘/ƒØNÎmXÉ\À­@LÀ½jÊñ†oØ&+Ù}D+#ZÑÚ´lU.y-ˆÖ8ÜúÚÔàR'à|…0Å8Ë”WOûÏ·Û’£~yL™*Ñ…kOÁß4¸›ëCª Ír„ª:z k×?k®ajG…oGÖfï&àp¥L½^ˆ#Œt9ièzêʼn©ê%Щ½êYGÈ:…¬‹/%‡ß-ÒRa€Øi2Ö« ¢†°›Cý|ªmìÌR醳¨9›1R¶ÔºBv'ƒ ÷5‰õšÖD°ªØ]o¶‡–bXÇMÈX-‡-€k õ®G,Ÿ(”]^X]NXÕ©DœWH V‡„ö>jè0º ¡Œý­Ô? Ú¾—4:¯´U2±'D 9@7®G›“mÎ$/*|âøò¼­„ Û‰5j@ ;6önûðÛö±ƒÍ¨à¨x¸Œ¹Y…ã¤1ºj;,èZõ”·zåÈY +Ûh^“RñtQñ„H}½N…EÞð¢à©#”V}7ÈqŸ©,z­÷yŽŽŽÊWmõü< ÚR;QÈ>†æ ]ÅPæA i}Á;„\C8­@hÛ¦xUJ,>–%¦>`5˜“J(-Šõr“R…}:†d–M ŽkàÑ«Û¡Øp1%ûKFbÁ'GbÛ1ÇLiÌ92íÐä28»åyšZšP›%q¹r5æ®ÆÐL’s´T÷Ú¸&æ*ÌÕu̵Î];9WÞ ×C¥ë3<…aÕÍqæíÄÜJTΖÆu¼þ[륽ÌÓÛOÀg}po/Ÿ Õ|$òƒ5ÎÝ{°´=îb¡ç¥8ׯ·wiÌQØŒÁÚPP•Á'% +#“ÐݽµfX/‘iåLÄ +û«_VÐÔTû:Bæ´žQG»,5*Ä‹iSœ`…*½\È,VÁTÀ +Øi¬VLÇj.^Z •«å)Õ˜}Zݤ>.½÷¡n6MLÏ \kÚÛü4ì–/ÆM +'ç¬ýðjHËдÑ_+Ã9_ìMÖòZ êŒ^û3S¤}³µA˜v ñ¿‰é}¥ +êh)äR­Î瘜Ô/@%… N‚®Z<¯Áùãrÿkº†Å6œÃ”cX:PŠ\Íûq†MkŠ8êÕ_Ú©6M‘ÉÕüõoË›õã} +KIÌ æØ‘èãØ·Íž +™3N…ôk]¦6Fy¢²¼ÚJy|·O{òv} ï>/w%”@Åòæ’E±«ûÀxÈ-ððe×eR+y,ŒKPø$#Ь&"‡¹Æ‘ÔâKÓ/ÔÓsd÷ÜVŠ9i¥ˆžNJ´Þ§=GÞ{œøh²Ì£ûà·ÃxmH $àh*€¤lÂêur8£L¾J¢Ž·ˆ +ªÕ° u¯‚ ¶*  +ukõK +È&ª“¶¡zÊêiµ€–½áKœ_ üåYÐ`›Ñ`ÓÑàëÃ2¶ûLqHö aau¬!|öôƒ1Š×ZЋ丳Oˆµžžì*õ +t8w¨Œ#€üðx{bÈjX ø +‰\úå5Ž íGz&tfé4|0ÿåñ¹Ñb!ðkZø ;Á…àk_¹HWÊÓ¶h¥,Ãú`zŒRâ5+ªKbTFQ[P¯»„«P±$y›t2Ø$d •SŸòˆ.-±&é”*÷7« b“P²á&¡ ýÏåf›àf6JÇ—¬2 p\0HÚݘ†ú34Ôõõ Ì™•¯©w=÷Íø=Îõs+_)s•oŽwè Ö̹gáÈ^â+£™2Ká8¯iËÓî‚Õ„lki»¡û[YRN*²ÚŒ>mŸ«¶arß»ƒ(»ïCÞíî ë1y;õtþ¢9‘Tµ;Û×ÄO"„Ùâýj¿¾$ÿY>¬š\”kƒNlG$S†0ε÷áñH~LGퟔŒ^¬µ-õ@k»1ÓÈÿÌ Üž£.×K÷‡õ> ïÎM, h½ûÿ^H[¹öÿ¼ö:Ž +endstream endobj 189 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <> endobj 195 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 203 0 obj <> endobj 204 0 obj <> endobj 205 0 obj <> endobj 206 0 obj <> endobj 207 0 obj <> endobj 208 0 obj <> endobj 209 0 obj <> endobj 210 0 obj <> endobj 211 0 obj <> endobj 212 0 obj <> endobj 213 0 obj <> endobj 214 0 obj <> endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 220 0 obj <> endobj 221 0 obj <> endobj 222 0 obj <> endobj 223 0 obj <> endobj 224 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 227 0 obj <>stream +hÞä[ÛrÛF}çWÌ#P)Œç~yLdY»[IÖ%³ò’Ú–+LQdŠ‚ë“ò—éć ¬-“»¥*]<¸ OŸ9}ºgÌÉÃìÍÍNžfFËQÎÉȶœ}œý0Ÿ½yÇ 'ó3.ƒ/øÁ¥R+e‚Ìg žB™ò’ÌïàÆ™ÿ9û5{{ýŽhêÈÕ›«ï¾#ï·9wTf›‡íâñq¹~ ÿ\Wåöãâ®Ìÿ3ÿ×ìz>ƒyà4¤ ³à.š…¬gáÃ$<«”kß]à;uór©ë—ÿ´È¥¢:{&‚ñ¼Ðð«Í !¤Á_]^pǤ£.{¿ÝÔÃ÷Ÿî*’j³_r‹#eýïÛ§e^*²Í?N˜,#§BKæoÃGöÍë¯_ÿW®©ÉD®à;ã–úÉÝÏÁŸ‡~N¼ì¿óÔ3¾,DAê0¬‰3~å;¿_­Èíòá· +‚)³'r[>•Û¼’òìs.`då=mÙ«•‡d¨6„ +é½'T9ÆTÍb#¨5í8Л +Õo¸Äó5ý W´„%Э?ljq:Z{ÈøÏðcgo—%ù~[.Èõ—Åã«2ŸÿŽó ÷I@ŒxC LÒ06ún-Žw/)b× -¶…ÕœúŒÐ#_ Ψ¨Uì–Ivð˜1Ì1ŠlЖ°ÐO¸±ˆ9Á|=ïÑÛ@ 8„œK&‹!f^ã"W¨,Í£v“¶Q¸åçå}¹%W¿-@Ý ÂÙâ4­eÄÓà¨"(ãˆkƒãÆ8 9 ÞL¼ÁY{äã€å}|#=Ê’áÌ,µ®[´Ÿ“éï7©öÝö0âCÜkY-„§^Ô¸‹Ýó"jß—ÿl@˜wÌV2sÔB5,>7³ñ8n€¶52ŠØr¤6Ìm 4ù:²žÂi×êœL!\£«;t¥ Z Imvèþš]©ÊõÓr³Î L\O1‘áf §ˆ,8ŽH½‘tÈ}é0Þ‚ˆNÀÖ´Gê`!›8°‡¯€½›‹Ý*ˆf¼ =K;`qŒ3ÒøCü-”œ«ʇåºÌÁQ©ìKÕ¢Ž´æ×€¥T‚×5`ÜpC½K ¶¼s‚`óç*Ù¾!7Pý€dG¨_¯ï;°mlíÁõ/¨Ob-q@«Óº 6^:}Î’Ñ¡ÊÔ1Pûˆ^õ¨6ÛXx&hç  íä \+÷\G1`±༦¬ã¤ØÖuj=ÊfÔõ}œëW¤²ègôQÐ=€þvQ•1âFÝ0è&\¶8®¡$ªuc`ïÄija/@-K©…:ˆ±Œo›ß>/CŠŒÐV„ƒsLýA´A^`Ë„»-³ÓÙíõ˜ïÒ2^ ¦§J}#;žðš”9|©õäã<&ž×ÕâKŒ"  J0HÄ äV¸V4*чQu"ÁƉRl¾ ™áðN&„:àä +øŽaý÷c.Àj`máÏ%jâoL:0®¡<íDc,Ú}Qà©21ªWÞ-W«§¦JÁž²#à‘wŠâ…nß=˨ð¨Èd ¢”MÑXÔ~’ÿî.aíOþØ#ê'ÞM¹eo]VÅÀ„âkwÈm»¬ªƒÒ_YÂc®£`Oøh.q\"²Ó܈÷éà4ź”—[­+‘¨ÖݾãFÍqÙ»œŠl=¶Å ^´¨%‡¡WÇ•‘£õ ïD_‰ŒÇÞN ô™â| pG ‘Ö?.r¡AÙŸs‰=+c®6ãmèÚ'Xè­”MQÜN¢¸þߢx½=½¬¡—ý¿ß_Åè£=ÂÖk{k‰ÚíªŒXºZ^äi)¡÷üÝYt9nnh¿Ï•‚o–몧'PbBè¡F—)=Ñ +Çt,ÏvW«&5^…¾`¢ËÑÝÑô"Û¬žzUô +[°%ÈC]ªàJ³ß{u=ÔÝñº³£¸=ãFJÄçýFŠèw¶ÝÛò®êÚÚ*t‡k*’ùÑà¸3¦<êj霴æľBõñYMßI@¼Y."¸ à èÐ9 · ›tÒð#QvÜJŽ9fñ2Èw  ^Q/h|Ÿ„º5CÔeÄò=¬1)vp+Y+†?"0.¡Iiã'j;gÑÐã6Ma[ÏU5yê&2¸Êñ²¬\­È T:·–÷ÑŽ&là@á›â6˜—àV†]X5`qóæ8̸LFËzý‚òó›lè´ÙÐáboî‘­V!Ë,}Dv§IæƒE›ž´(Ç%Ä1mQ´åS, +³—ìQtÊ£´GoDc/!í"‡E°;ÑA@"ÄV—¤:§`X€­iw‹wÞ¿è2Ç‚{ÿ©Ø0åôEj…ëâð‰÷Žõ¹ø‘EPK»ðÍÎÀx—0ˆÙÍvóé¨Ù%€â 8Ò'Û¹  \jAnjŒë¼­ë§î ý + ¯W­÷ÔÛöŒÄ/³øðBâfïÐÙ¨®Í¾ku©¬jb_»°1ÄÒê¢ãBûÈát%¨å'û|r¾™Ö&ìùÀ.^¯ï{G8G£Óí+öåؼ„ƒÁºþ$£å9;˜®¶k5ÂT¨ÁI“qîq\€«i•#½1½ê¹`î†6\ô¤p€ùmù€;DòÌ6»Æ&ݦÂqÁ°)¢ú¿8 Ø"¼·óÓèû?–Oxö»Éž#ûÍAr±DO“š1ç>}B³é ¤?£t¸—Û'¦Ãæ³ôLlDhÍêÄhñEc]ò:1ŽÇxgz°ËÒø?ÚbQp™ÞiÍ‘ØL(´¹Ø‹î6 UÜcéŸ Ê~.«ÈbEc1 &ÅÅmá؉µEŽiËdO(Í·Ýýª5ÓU®€~›K¸æ5åÍØ1{hóÓfUJD}‰çfm8e˜,Fñd€âÉJtZ³œ]p!ªy¢¹(öÜb´jQÿNeªÝ´†q.$õ&Z#»p¸Û9¡¹(.o1ms"hG`³@ivŒWŸ"bálÿàltJyŠÄ0©_É<~“>WtÓç=×âüÓ§§ê÷Ír}µY¯Ë»ªg"¢åÊ'w,„d8ž¨w4¡J;1¡ú3@0ø[€_Àx +endstream endobj 228 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 235 0 obj <> endobj 236 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <> endobj 242 0 obj <> endobj 243 0 obj <> endobj 244 0 obj <> endobj 245 0 obj <> endobj 246 0 obj <> endobj 247 0 obj <> endobj 248 0 obj <> endobj 249 0 obj <> endobj 250 0 obj <> endobj 251 0 obj <> endobj 252 0 obj <> endobj 253 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 257 0 obj <> endobj 258 0 obj <> endobj 259 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <> endobj 262 0 obj <> endobj 263 0 obj <> endobj 264 0 obj <> endobj 265 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 266 0 obj <>stream +hÞä›]sÛ¸†ïõ+pIÎŽ|\v§ÓÎî&{“ÎìôBµE­M§’Ü]ÿ¤ý—{ ’ EÂTÚKÛÉL, >xñ✄“ÕìÕŸ¯8YmgFËQÎÉÈf9û4ûözöê 'œ\šqAüÜY*±’Q&ÈõýŒÁ](S^’ëøÀ¸"×?Ï~*^_¾!š:rñêâ›oÈ»MÉ•ÅÃj³¸¿_W+ò—j·Ü|ZÜ,Ë¿_ÿuvy=ƒ~`7¤ ½à.é…Œ½ð¡žÀUÊÕÏžã3õþáRLJ¿(¥¢ºx"‚ñr®á£-çBHƒ}9çŽIG]ñnó›oov¤4ÔJ‹-Ëøï›íºœ*Š‡ +_'t–‘9§BK®_‡WöûÇ3ÿk©©)D©àoÆ-!ñÎíÏÞ¯c?'^öûÜõ„/ £ u8l? +Ìôø_>óOwwäýzõyƒ)‹-y¿Ü.7å\JÊ‹ÿ”¦A±¼¥µz ÖÀ2TB…ôÞªc*ê8L°Ðê¦Bu÷ÒÝù¨~ía´ÓÏqbœN¦Ê®„7gøÖÅíòÓÏ?,w—ÕíÛj Êëb÷Â÷$#za¡†±Á'à‡öö){]ß4ŠlçV @@IþOàã©qœÂ=êÙŠ#]ý*túÚá0ásߌßã` +í#km0û?ø=pCϵ ½žKNµ×8Ù:Ìë1ØUµ¼Ù­ª„¶y*   r´5¶ãp¼÷´móš-m£,ª29ørûƵ㇠äˆË‚µ˜ÛÑæ¿;„Þnõ·5T%¸̉ˆ[tµÒ•övw±ø’V–·Îæâl¶Í÷¯ußÓ…KtÍÁþ %“¤ÍµZ·ìd3vGh{âeó}G#^™Ãµ¬®j´ k¥Œ· ÛŸj¸oÖ¿”RÃrËØEq[ÂJW|ûxÿ¥6:$.EtE…ËkÚ ¬Ä­“ jÛNж>Om«Œ¶åÿRi`±YþûqYÝ<¥Ð948€—Ë†Ú 7Ô»zW”QåÁOhºñçFÞ¾O}Ü¿ê?¹O^û™/FA×:bp+~°†.5ßBhÄ8ÎzUÎ1ô^W‹»”!Œ xX‚Î8,š.•{óhm´hmOÙ¢uߢEgÞtµú®T88‹Ý£QÁ©/ª”3,t`0€:·Jä ÉPôˆ®ÄlËYASÐ#@;yŠœÁ‹‘³I8Oë®7ž6†Ë²ƒô ZíZù,XÏ{š +žBö0„ûq›b—g0!Xç +R„v ¡Gâ ª—x´"ï°¡«ŽÊýû²ÉKSk¬R&ƒ!š<ïÍquƒùɺºKÔ‘÷嘟ؽ/c^•Æ¾¬“tDs‰5g|²Ãv Ùgb ü²Q¢ Ï3~Ny‡H^¨;šè—èÙ^í6-^åÍäD%hÿøé‡N?æ#«ÛÇ‚ _,CÝ¥]Õ”õ!z`Ôï“i>˜c»ÂXäì×Øc×5°ô“u_ÃÜ·Í1ìxÿ¶[Üý+‘.V®±Œ‘A ª„vC"ßfª%U!&&˜¯rýÈtšŸ‚Yž1 îSæ-¹üeqÿå.Y锂¸m+BäCEH)[go&±]žIÚº\éóÇ+QÆ^ÜôGìóýrõx·ØkL@ s,Ö%hµj*³’(Ì`Ñð +cfÕllŒæp&Ô~',Æé³1ŒŽ1æãi ¦"‹Ýç«Ý†"$) ç;åeŸGfÖÀ!•òø >nº+q0'& Èa ú«Ìÿø´Q#%h6œ"øËê6á-½Â$Ÿ³u°}h—€ü $I²,&ÁZ¨Ó HŒÎ$bD×ñ~·(øwñT +÷¸Í&En-ÚŒ·ahœ¹Ãv nÔ7šžÏXÄ>™:ï+ü$u­t-r•¹€ß ~ø.ÖUê*Ò°à* +w˜2È5¶KŒ›¢¨N ý8/‘ê¼¼Ä䶳ät½ü©S •JÒ@Û™D +ÏÅL$%Ú#UG¡Ò/½MhöocdbZ…Ç›ÏaÊ*5¨ëÆ>âPĬQ¢¦S}÷X‹ ù½P25…Ú ´~NÉ }F•,›ÙuQcžØÔ¤&3¨l™]å¸SØ. .©]bì4‡ÕÏŸæPò,Os4¼§TŠ¸ß¥û0xJóG ÆaƒoÁ¥¸“¬s)¢–|rŠ<ëäļ¤ë )¢¿EÀ‡…VîÖ>B`œ ŸCνÈÕ>Œ:274';Ûº¶ +!˜z¶´º?ƒ‡½Â©‚Çb¶IY•Ûp¢Ô‡­`øÁ‚¶ÂvÌ +këèNû¶¾m…™Rßò|ËÛVdêªýü¥)¥Bf£ñ:žQRÍ¥m²Rrmbºî˜IW¶c¬Ý1—„ÅH;5/™¯$Hó•~y¿=Iе&)ñ@)ÇX$Ò»=ƒŽB–M!Çìè˾Mc%û¬2å·Fqƒ§â¸GÞ9¤ÉÙCv¹ÀÂ9 (‡ã&.fÆžU¤&Ÿ]ÖÉë†üw‹Â]<•ÜÃe‰ÿ9%χʰª§{"ìoáÿèñˆc í$åö3—n®ŠÙlçø÷ëêâq—ÎtÎujIM®êËwjCû‚8é'í ZÿÂU«j¿ 0 í›X +endstream endobj 267 0 obj <> endobj 268 0 obj <> endobj 269 0 obj <> endobj 270 0 obj <> endobj 271 0 obj <> endobj 272 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 275 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> endobj 280 0 obj <> endobj 281 0 obj <> endobj 282 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <> endobj 286 0 obj <> endobj 287 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <> endobj 290 0 obj <> endobj 291 0 obj <> endobj 292 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 295 0 obj <> endobj 296 0 obj <> endobj 297 0 obj <> endobj 298 0 obj <> endobj 299 0 obj <> endobj 300 0 obj <> endobj 301 0 obj <> endobj 302 0 obj <> endobj 303 0 obj <> endobj 304 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 305 0 obj <>stream +hÞÔš[oÛ6Çßý)ø(a°Êûå±k²bÃ:M°—aF¢d\;pœ­ùHû–;‡´$êFÉíÖ$àK(“Ôÿsá¹[¼yÉÈÝÃB b¨%Òj"(Ù—‹ÛÅ÷W‹7?0ÂÈÕí‚qBáÞ˜5…àÄZPN®>-(ôRP鹺†”Irõ÷â·ììü¢ +KÞ½y÷ÝwäbŸ3[ˆlw·_}ú´ÞÞ‘·‡r»º.ó߯~Zœ_-`8 ¡ý,˜f!Â,œŸ„#p•´ÕØKÓ& þa• Ã=NY¾T…ÉL¾äœ:^ÈŒå,£ù’£\vàû]¸ìæñú@r Ÿ~Í-tV†ÿïÖùRÃ…»-Þ–Ÿ4%ðSÎ5 zæoݧAY˜Æ?¹‚x.á'IBÏÍ{çëØûÌËþŸ^_ðe~„.,®=®Õ%~å˜o7òq}÷ÇSdäcùPîó¥ËþÊ9˜CVÞ•Š•t`IºPš\8çH!-¥2¨YóÂèªd^pÙj?ÚÏ3ÐLU#˜Bc‡–mUdƒhøí¾ùÛ¾)oÿþe·=+oq’6[=n7å¯ëU5Y߉|УÆ! Méàpœl‡„‘–‘ÖI¾4‚“‚¤þüЮ*¬—ïAUf£°«‰ ‹«?¶°.êE÷=ñc4{˜%3ÊOeÉ-Þ?ú¦êþ<Ç$B|‹1jP¡$L±BóF íZ[\UÀXOÞ[ v©9]Mq´…¤GõÈæ ­UàÕ*ðiŽžbÂ5ÊCäu¢^“ìb½}À!¨[Kq‹B€ø˜ˆÒ·Æf <Ã-T¢¤,ÏÈ,©I£ßÐa}¢Öf_s­c˜üT¡Íš)WÖÁÔñæ=~K¿>âVLu5¬;¾àò°·%A€ÙÁ/H¤^%‘…Lø¦¶kˆ¬Á´oO7âUè9'µËtׂçÉ™ÂدWUøëJ +al3¥|Ï +Ó ç®p¼£|Æ:äÏ·7˜D°¬‹)œˆvÞõŽYSÔ»^ÚÖØë97>Ã(3Ãc¨–Ñ¿6즇½ëµƒÇAì@ûèt€µr`—ÕŸB N ÚÁúòæë™æ˜T³¯€7› +”Žb»fݼ¢ST1zBýQŽ¡Õ`QOŸˆ_×øS¿ ¿cL})~G{øÓ)JÿE.1{îùxî8î<(¤õ)o-¶sHl┃¥UzBiÕš×´ldÐË +½Îí#Ü(Ÿ¸0|‚>þlöØÐÎ!Ë¡<o32ϧV‹âª}™qÕhŒ«ŽGqµëiL_é—÷÷@hóÛ—ðñ!_Âkµ“‰à+¶2mæ7Ú\¹Øå < {šYR¦»§ù?¶2n¤Ú=üÀ•YgÔ\2LBh*Á«DÚ«™…mË^mâÄäsYüÄm}„œ^}ºß”m.ý!„´™ +B„ô¤åŽ!ŸÃObçê?¯À t +]ßÐáþ‚'ûÝ}ªE<Ôàx¶.ëc Zø³^0/ã'Œ/„ðŽƒS !µžy˜Iª×þP×ÉîCÝù'rª• ÿˆÖŒÃ§|á|BÂIS ÍàñÒþHðù9áó?è­‰Ž?è­OÙDC1´Ñ„³Ž°Ûa!Ñpƒiת¶ƒ|f©æ£”rHYóH–ЇúJ–ªÇ’·³’&gkÄh³VÆÀðt—%í5Uñ·Ìð\ˆ0ê¡tí´}¢/·âRÅ|Ñ•PÇ‹àúã:>Fà…ó>@áâ„ÐØŽ™I¿â|š`ŸßöuýÀIôôZ͈+‘b(–œ•·ëíwØqpcÜÁfT,•fh[„9–¯a'–9ä –¯>¡„W‡/Àðñ˜t¤Vêó§*_;¸©ƒ¨‰—mT_í"^G)É™T-£SúÇ0w„]§ÎÏ6B† SE#ð®ªê£°žͺ>ãø"m*Iþ+À´›zs +endstream endobj 306 0 obj <> endobj 307 0 obj <> endobj 308 0 obj <> endobj 309 0 obj <> endobj 310 0 obj <> endobj 311 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 314 0 obj <> endobj 315 0 obj <> endobj 316 0 obj <> endobj 317 0 obj <> endobj 318 0 obj <> endobj 319 0 obj <> endobj 320 0 obj <> endobj 321 0 obj <> endobj 322 0 obj <> endobj 323 0 obj <> endobj 324 0 obj <> endobj 325 0 obj <> endobj 326 0 obj <> endobj 327 0 obj <> endobj 328 0 obj <> endobj 329 0 obj <> endobj 330 0 obj <> endobj 331 0 obj <> endobj 332 0 obj <> endobj 333 0 obj <> endobj 334 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <> endobj 337 0 obj <> endobj 338 0 obj <> endobj 339 0 obj <> endobj 340 0 obj <> endobj 341 0 obj <> endobj 342 0 obj <> endobj 343 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 344 0 obj <>stream +hÞäZÛnãÈ}×Wô#‰…8ÝÕ÷Çì\‚È®aû2ȃ`Ó^–dÈJ&óIùËT5oMŠlQã¶3’ݼ4O>uªš‚=.>üñF°Ç—…‘ÌrÇ”3Lr¶/‹Ÿo¾&ØíÃBãøƒÂÙB³’ØífÁñ*W^²Û;üÂ…b·ß_³OŸ¿0]8öñÃÇŸ~bWû\¸Bf»Çýj³YoÙŸ¶‡rÿ°º+ó¿Þþyñùvó iHf!\4 Y͇Ix†G)×Ü{I÷´õÍ¥­nþ—U.Þî;.ò¥.lfó%÷P¨Läÿ-…µÚgWøÿ¶ßU‡ÝÿýîÀrƒß~Ë­+LVVß¿¬ó¥Áw[z¬0iÎðTƒ7ýÝ×Ó࢚ƿrW€\áÿ4IV]¹ûü:õ9ó°ÿÎUßña! +ÒŽbÀë(p3`â+ïù‡§'v½~üý€Á”Ù »._Ê}¾”²Ù?rÀå•÷EÃb…5¸–L¡ +@zïY¡çªâsXhaY^€ê ÖKyç«U`„*šA\ Ý2t‚§£%HËÄ'çôÔÙ}ùð —ØÕ~÷ü©|ÈoÿF“ gI„‹9(Œc…á|ôòÂHïn.¯zÛØ¥–¢pYÁNÿ€/œÐ]¨‚h„&=y.NßMŒg¦ì.ÈjÊ'¢`L2ám˜æŸŠ+MË[át›‹ùÞ¯ßër•/U᳧ +æê—‡† +„¶Ar*æ%tm«hÜGÁnÐV ÚºEÛr7˜µa!°ÏBû‡Ã´Œ×"a7…?¢ï.5á]‹¾öúÐ^IÀ¿9à"€«…YâÇö±!{„¿ò˜‚GÚ1¼¦÷n ~¼;r]‹šÍÈ3ø æ>›%A·…‘1æMVä2‰\…ÅdÒ>7\ݹzx|¾ñð1'z_ƒ´qCæ«þ\¾f5© ¢|zøÎöõv}Xï¶/ìó?W›ç§2ƒ¡u!¦— ’Ó±*ÖœèâÀItO.ÌÞfLkH’x6˜¢aéS ô/qvKißRšcKi¼ +¨q(o«C¹)·‡—6§HLhBˆÉ>Éd Äda +ïë6RÙâÁߥN#¬:Î#’JQ§Á´q™dt‚øñ="¨ösŠ¨?®Ñ4ŽômÙÙÊ›ëPÖ(ùÙ јËùŸŸ" +;¤p ,i+0¯É% ¡qÞ$Zú# Pëó ØKJ€T«¼:Öqƒ8Uéß©PÒ¸F¦w +2’ 5 +úÉLˆkåa„±D(‡éhy¤Þ#yP+KvD{ŠÅd@q×Ê÷³`”~É Z˜“쀄vòúd¬ ´îUé8¥¿LÓ•+×å#y‡ºNÁ„§~%‰ˆÓ|å!Õ#á€c´è‘±9€Åž¡£žšá×à|L@Ý“±Ù—ê?z<=h <¸Ppõ•$tKYUäµÙ¡‰AÄW!‰>ضiÓA¶Mc¥ZIÆ”vŠÕÚ-åEI·<’î¡î +óÏÛû>ákåÑ70ÏÓúl«Q{çÍ9öN¨÷ìïdÂßé>˜’¿¬6e¦õµí€ºË!&˜ Ôô§l‡?ÏvHqY¶C&l‡>jzÜW¹¢†Én•)„;µ¿Å¦à&…»¥qeä ÉÐpžd\T»¸JIŒâ~› ÀĘ}Ž}…RÔiw.ô'Q7>´•=._¢†ž?S¥á«ˆJ¨HC·ª o HkÚ:)¡ +q OL·ðT»-òÿÔ¸®k ±~óý.GO?®w¹ Ùø·6”¤{`:H +ë.÷‰aW*¸ Èæ€ì å½3g­Ù„vˆ³k£ðS]ÁÄ)¦*„mºÀMôn¢nÇX`$"‘^¡Š(Ö AtIÖ5ÉU:óZt| 8¿EÇg—‰Sý½~(Ó^;8í¬Ù+íPbÄP rÔPºG¸c:Dnc…®RÀ£Æã¸Dg3fV¢`¨=<^ìõ¸½QYi[Ô= ˜Nkh÷õ[ÐtÚšQÙ&üK¿&—&TÛ64V§s'í H#bÃ2²fíyÛa˜˜ôûÝÞlÈ@¡·ÃšMwÏŸÝÜ­¶ìãï«u\ÆK,à36Tñ)MÁq‰·8RvÕa«çñZËËVŸPsÔ¬Ëw“ÿ» +þˆÝ`ÂÎ ò"T~:ÖEæe4N¨z”_½[äóš š˜£õ+Û >Ñ sjêñ½ÖúI© Eù$zÎÓ¸|Ô›tðigçÃgõhÉœéM+)©3«ó„Ð?ê?£ýÑbÝA äï^K¦DÙ‡GªvŸvJ†2g¾•àåûUaÁS/%È l?î6,hð×ç©Áê h:d¢­aM…:t{â¶WÐØŒØð🳠g÷ñ[ØÚ>>œ$ä—§Ýê°Þ>Fp!¤®ÿ°Ö¤qÐ>vcÎØòi,Òýöd!Žtؤ‡ðçõ!f¢w,DÊàÒ¶ (Ù¯îlÚYÍ{tÆošº$R·ž Ü¯ûûr_ÞGP + t!SpqC〠¾Y¢ÓÕXH<3Ëb÷攓‰¤­÷k¥Z…/«°P‘e¡zJBŠŽ†ÆÑãŠâÛ¢:oO©ÕÁ·¡¥šE˯}T¯rIÙgU½5¡³Cx»'²–ÂSM4“¦ÂÃÿCuJU´½Ö Ùu•b mxS %E½íãG¦£qau/Ztq†Ewî’,¦NìRL%ô›Ãî¹[úB›ÊГf¦ =Ù<Ú¶K¿­w—½‹ë!Ò.ø¥½hM0P&2P1ËÇjþãƹáÝK!Òs4þ8.Ô‰ æá•úð^YmÆ[çc{7ÏåÝzõÄ~)Q‹E@xåÜØd:£‹„ÚÇž² æ5oµ¿äN‹°‰¼¨¦:-(àuB"-çÕ+šB‡úä¾74^¿¹’PrÃÏPrkß¾Ù"\*+ê^·%B° ç‚^ð¤Úà^Ð8z^àõ•Ö%i†kh÷o7z× +endstream endobj 345 0 obj <> endobj 346 0 obj <> endobj 347 0 obj <> endobj 348 0 obj <> endobj 349 0 obj <> endobj 350 0 obj <> endobj 351 0 obj <> endobj 352 0 obj <> endobj 353 0 obj <> endobj 354 0 obj <> endobj 355 0 obj <> endobj 356 0 obj <> endobj 357 0 obj <> endobj 358 0 obj <> endobj 359 0 obj <> endobj 360 0 obj <> endobj 361 0 obj <> endobj 362 0 obj <> endobj 363 0 obj <> endobj 364 0 obj <> endobj 365 0 obj <> endobj 366 0 obj <> endobj 367 0 obj <> endobj 368 0 obj <> endobj 369 0 obj <> endobj 370 0 obj <> endobj 371 0 obj <> endobj 372 0 obj <> endobj 373 0 obj <> endobj 374 0 obj <> endobj 375 0 obj <> endobj 376 0 obj <> endobj 377 0 obj <> endobj 378 0 obj <> endobj 379 0 obj <> endobj 380 0 obj <> endobj 381 0 obj <> endobj 382 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 383 0 obj <>stream +hÞÌZ]oÛ¸}÷¯Ð£„Â,‡ß|ÜmÓ‹]ÜÝ-šÜíÃbŒØu|áØãÞ¶?iÿå!%™rdZNÚ8à8¡>¨Ã93gÅ|ôú_—PÌïGF–»B9SH^lf£O£Ÿ¯F¯ßAÅÕ§ˆ‚ãþg™…•œqQ\ÝŽ8^…qåequ_8¨âêËè¯òíÅ»B3W¼yýæÕ«âý¦Çd¹žo&··‹Õ¼øeµm>M®gÕßW¿Ž.®F8š†4aà’YÈ8 &á ,æ7[\LYÞf÷³M5–’Aù¿J ÊÙ”5Q¬•G&¦MÁ„ôÞL9ÎUŒf#˜5Í8†9ª3^sÏGP¬D*ìxè 0N'$ ƒñÑy|ìéìÓ—Ë; _Å\y]ñs1Yþ>Û6S —^Ÿ'b8ï½Eã»ûS˜é¦æ±Õ€w)ØÑŸ0àÌj½[·Aé‚åÁs¯þ;2¬Yð‡íСëË8ã'ŽÁÓ¥€Èò±ZÊ Ûk©éèëˆîÅjúÇjF0ãj” †¨*@iæÝa˜1“и1Žî×À t£€®–Cî8®Ž¹ú©yƒèHwˆaŽ–:L4‹,r퀛° Ï0lâ8joÖ«Õìz»X¯Ø”Çú +#S#‘\/dº0tñ  f¼„˜g¼yêYi¦ŸÓ&pÚÔœ¾¸ß¾™Ü¥ÌÆ`AfƒÌd¨-¸¤qƒÕ2R»°Y¯/»à“å ^{fy +ˆnÑm0u>¹$9™Å5ÇR_CŠ—B0{Âð¯½|·øZá`ÅŸþüù¶ƒ%  H”L»\0*7hü0í@þb4ž“¿-r}Á8¨Àü±!qEΫ8|¹J¡ÅÒh,Wi8&Paó—ëÏì@Ú’£QéÓ>lr2±)h\]3ý €êiÊ/ÀýJ”)Bÿ¹Ÿ¥¡¨,±œ«P€A (*qœds£me`Š£%-ž/t¥»goºQ. G¸Ylâv2'ÝæÜtÙÚæãHÂ¥ Ií¤¢V™ý¨|‹*våºÂåv2ï¬^7$™ g\L¤GÀ)ÉÀ¼€d OU+;~ŠhjøAÆÄÀYHÌx¬:’lèBé_ I„†)•5ˆ¢x_\|ÜÞ-“´ª¼¡T€š  *x¨Ë|ËO(ø郫Ӡ‹ày¦ôÁS-½%ôÓ¿ˆº‡n`ü¸ %ˆáÕ[ôr5o‚‘Ì/ë‰ÓÖ45úà”Ô=)ÔGhmm꧔¦/½ŠÓui§ÕæÁ#„m»œöØrÄLkq)t+l½Ü˶?ÏÚgmª¿$é/Yno.·²¨0¥™B‘ǃÁ.e‡–G`’ÀqedÚ,È=¹<êaÅ»´ûÊÿÄ 1¬?0O펂pˆãÅjšÂ§tè Eøaôx`€R6Ú_ŠÝ†õ@ØÀŸ±V…iî0 Ýg5íת€¡! bøïI… Æ”ß*ðMÛ¤¨Æ žã³Aii\µæþ“;Øž&ô‡Ä¤=ì9éþÔ!$u’šàÔçûJ“¸¦¿«»"»iÆ šÆ¦ð<»M¨ƒÂTxý,ô¶z?Ë‹í V·ÙÅ×VéÉ œçQu´Ý‚›¦ u-ã:F)#³|¯`œþáö±ÈÙÇ=¦^JlEè)*27“»TÎKÌDdì+s@ ‰ÃeBBãžèÓvpô;§AÚ`ÙÇïG•îo˪†7¬“g5ŽKGY=¼f? §sþ²ïÇ/c=Ýü¹˜¤è)ÙØy9ðÈÏCðPPg =aO0ôÎÞù\kdø%¹ $PÃ!o'Û¼ÂÊkŽ$Ìà‹yÇ%N%/ø­ƒk—>;ã-Šu™ºÐûÝû#TæÇÅt{“¢Š +2PÞåQPÞïéS¸Û“óF?«$’ü©{J—7‹ÙrŠ_~ŸÄÁÛŠÞžH§ðd$ƒ±Lä@TŽÆùÎF]›9MÒÞC¦z·` +ž4“¢ÏãÔ–.ü#;IGÓCªí:I¡™P%Ô5%Ôå·ù:‘ZùÂêè܆e<'Kã…û» {ÉUŸ\ÕÙ“«Ì¹ùǼè³ëT` +íÝyÎ1Á í¿¯¥ß¢9áý†öYƒÊÍÏès£)&!¿‹jÑ +VíÓ¨&ƒÊöT6T¶\Í[Û/A]AP†°Ï(ƒÀH¡ä¡fÞªázÊœ½™—;G_î7ómDÕ¤Œ9v6En–Åz­ü¼]tÜ>ÚVÆ<à!ë'~½CÒI}9V˱úõ9Ltsì™2´|¡OtâÊD“)¯;&_²Ô†)•ïÃp\p,ÿ®oQ’Ô¬‡·b札X‚ìC]1¨‹Èvm?ðœ5–•bxXŸ-E)y sÏ«ÁÔ÷Ñ`ÑÞSÑÞ#F/¬¦èY]CVC +¾7-ƒÕ=R¡_1;oª!ï˜upUWÕÁ5xS†D˜Ùóù@›æ•Ÿ,¿ñºx¬íÒ;1LÕàÐÜËÂóq¤¾¼©{Ø;êiS)·£@竘áÅ +P—`ö¬”Ö÷‡/éöîí(>Öœ3Wš€ÿ 0{<¡ +endstream endobj 384 0 obj <> endobj 385 0 obj <> endobj 386 0 obj <> endobj 387 0 obj <> endobj 388 0 obj <> endobj 389 0 obj <> endobj 390 0 obj <> endobj 391 0 obj <> endobj 392 0 obj <> endobj 393 0 obj <> endobj 394 0 obj <> endobj 395 0 obj <> endobj 396 0 obj <> endobj 397 0 obj <> endobj 398 0 obj <> endobj 399 0 obj <> endobj 400 0 obj <> endobj 401 0 obj <> endobj 402 0 obj <> endobj 403 0 obj <> endobj 404 0 obj <> endobj 405 0 obj <> endobj 406 0 obj <> endobj 407 0 obj <> endobj 408 0 obj <> endobj 409 0 obj <> endobj 410 0 obj <> endobj 411 0 obj <> endobj 412 0 obj <> endobj 413 0 obj <> endobj 414 0 obj <> endobj 415 0 obj <> endobj 416 0 obj <> endobj 417 0 obj <> endobj 418 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 419 0 obj <>stream +hÞäZÛ’Û¸}×Wà‘¬-ÁhÜñ¸ëõ¦’J²ScÅ/[yPÍpÆÊj¤”$Çñ'å/·¤HCAÔfRsIÙ¥Ë4I@§»N7ì~öîÝïgV1'<ÓÞ2%Ø®šÝÍ~XÌÞý Øân’ ü‡oàW’9%¸lñ0ø.tPlqƒh¶ø:û¥øñÃOÌpÏÞ¿{ÿÝwìjW‚çªØÞï–«Í=ûãæPíî–7Uù÷ÅŸf3œMCÙ8 ðÉ,T=‹'^¥ýqì9éšÁ•«ÿ˲T‡ûƤ€rn¸+\9—RÉu%ªœƒs&Wøÿ¶ÛÖ—Ý~¹9°Òâ§O¥óÜUý÷Ý~UÎ-^¸ÝÐÏŠ“ o•Òâ ?ÆŸši¨§ñŸÒàd©ñ•&Éê'w§Þ'^ö¿yê ¾,zAYîÉ¢ñ‚°ƒHü/Çü~½f׫ûÏt¦*öìºÚW»r®‡â_¥Ät(ª[~Œb+¹³˜K–˸T!ƵB×ñ-1ʹÔ=c“w¡Î š˜ ]z`Ö›$) ðJüåó6‹ŸWÕú¶ºe×Û/Jºÿ^>üs]•‹Ð\ãC¢Ç@WŒ[!FG“R¢¹FGpçV;„‚³Ü¿OàÒÖnƒ‰ž¹§‹ä¡L}ó¼þ&Göþ9xYHeã,æH]ÞQêj0íó<=OÔ¨­·‡}zÃZ 0ͤåVŸ†È2[ëÉ_Q|¨Lgbüt°º†/=¯#b>ÔO˜|y +°9ÎÝüŽ;G&¯ •£«æ˜°‡"Ⱦ?E Ómu÷õãa‰I¦%—Å¡vH“`´:àÂâE.>*?â0žìÖ@`ã“#;ˆÐ°‰™žuæt ÇôÅ9dw~€Ì|¶ý»»,§î\èSàþ4©êk.Ò cß °ÿ°¹Eè¹)¯$aêI€“©F“Ýâ +\ÓE?l‹»34¹3yà¹4æM!/³QØG¸ÿŒÊH¹”RÐÊRÒ—]ê04)‡‹‘ÍE¿%»˃ÏùÀøI>þmù ŽþöW¥&"Ø–ø²þv¿Ý$°›€t¼çNgP·ì˜éÆõ g µ0 +„éÐSGôòÐp¸`¹3 @ÿ²n!¤ç«¾5¶± Í¢ +´ð ˆ¥ ðãëêæÐÉ‚‚Ep›% »A­ÒéÝш;Áú5Ów²–ÕÓ%Êåðm]%ÒÅXMc#kÛLÔCfcMCqÖh<9Y¶óTÂeDé]ªe&]¸p ¿A‡¨Ô¢Ö,.êÏA|GWôŠF½R»!!TÈH*/XÐYh7:<&ß;`Æl:{8xÁìèNfT%½ø&\IÊ#}„¨GN+Èn0 =2¢‚ :нf9r|(G:Hº¢ ŠÆ7ŽªÓÓh«X½¬\k:¡¶lTSˆ[%?Y]Bƒº±—ÂÿÎÂó"ÐMA'úVåÇ¢ÔzÔi—›Ï›íz{ÿ­í'(¦ (*¸ÉI©È®;Ì“šs:yƒ™Æ›dž¥ž×ÐƲzTÏÛ¶®AÖE5[# xý­UŒÒˆ%»ÆDêTˆO@¾˜~ÉÄÜ`‹œitJ !Avk€*–ø&EqƒoŠ_éû4†©/†JDsyáàЪ­ÊèÓCY¾)"3:Äw:¤Žs‰%#‚‰~Á—›P•‘W0@SY¢55èMà&ãЂìZ»™˜F毟Ëe·€ª¡ZddH©=Do„b=Š_÷m#6q†Œý*¯9ø ²ëvûå”N´þB:²þ%Ó‘¥£:7þ¶Y¥ýZ +©†óªAIˆWÊÑîH²rªét£Í[ë×j=ì׎.°‘wR'`4« ‰Zd[׳RdW(sÔ‚>˜D-`žˆ\žGÍè“»>mŽªÊ¹d”¹×Èæs¼w…¯¢ØÆ¿o’EWÕ-r¸Íé!É®P·“Fêÿéë®|Šu÷É"»ãeqÞ3ð—JÝü«’˜(š„À¢Dõrë%øSé)b«Ý~Õk!*”ðHLÈàBçÖ[Kve!å&=ØYn\2)/ÂDõ3U«úQß+©œŠO«eÂûJ+¤,ƒT]oɬÐ{ 㨤-+Ï­—MLh÷¼Tßr›š2bý Ý” ¦ùñ5ä7 à6Ò陚ªíyÙâ}‘ĺ´±3£¹ÎQ1dW(}ò;EõÝÙPûŠ;3ætg`l‡•`1„]„H1!¶hNÃ.È®PõQLÒY7nÁõšb6·7Tóùjù×åCrhBIûϺ=p*¶Ñ.Q÷Ÿ1­'í¼µºò¢ûó¦B€) ;|‰¥Ín[€u`9BŽmð»$ŽíE;nÚ¿àRÈ[ær¤cþË1r¯Ê¸É¾îgJãÉ»Þpåó=/´KR¦)7Í¥å¦yÑå¦ËlK˜~áƒ÷÷4%5™uí‰q•çÉŽ…m‹*ŒH¼à +~ž€Ý¤¦í‹àw‚ND/þF¼÷K< Ñk™Hw̼ …?Ã@v‰Š¤Çf„'b—Ocê¿È0v6†±OÂØœçŠm*+¾Ä3Õõ¶¤ã&Å×÷Ûu +¼ˆ¡2Ö('‘—"öW¤ðøÖ-£E>+.&¡è€åsW‡Í†<õì ׎MQõ„ªDT¦ïXš«{:g…ï)3CÈ@nÈHˆ‡° È>Ì ,{¦HL˚ѢÛ^Ëíâ“ wg}ôZ6ÃÙ,“˜nOm¤9™àrC 7ÜÝí«CŠ¼«ÃÒEð' G;8Ó'”u禣n_9ì²·œœàoù›‚ÿªŒ‡:—ñëá@G©%Ù{)@åå€Ï÷C ;ÐŽ´O1šá‚D]å¦ñËq#ç±j¿Œa ä¦]¹¥o;!wƒŠçdUžHêÓš áÿý¨f9b÷›aä + +endstream endobj 420 0 obj <> endobj 421 0 obj <> endobj 422 0 obj <> endobj 423 0 obj <> endobj 424 0 obj <> endobj 425 0 obj <> endobj 426 0 obj <> endobj 427 0 obj <> endobj 428 0 obj <> endobj 429 0 obj <> endobj 430 0 obj <> endobj 431 0 obj <> endobj 432 0 obj <> endobj 433 0 obj <> endobj 434 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 435 0 obj <>stream +hÞìWÛnÛF}×Wì#‰€ëÝÙûcêØA  µôA°(•….©´Í'õ/;³¼,©Ø’\#@[LšË™=sæÌP²õìêí{ÉÖÍÌ*æ„gÚ[¦«ËÙjöÕ|vu+™dóÕLøËôŽ+`N .€Í·3V¸ÐA±ù=Þ©Ùü÷Ù‡ìÍÍ-3ܳë«ëW¯Ø»:—ž«l¿®Ûmµ[³¯w‡²^-îËüçù7³›ù ã 0”QH?ŠBµQ„D`ø–ö½ï‚|ºÎ¹r­óo¹Òèî!óÂp—¹¼¸Îd.3Ò9²wxƒÏê}ûÚòãýåï~Èç6+ÛçuSå…Å÷;:V Z0Ü +`Ñé›xôÐ…!dÆŸ¹A küKA²ÖrºýûÔõÂ×¾ŒÕðk1 ÊrO9]„=bâ }¾ÞlØ]µþå€ÉTYÃîʦ¬óB).³ßrÀrÈÊ%ïYltÀJ²ÜXÆA…×^ݲÙw¶_GšsГõ®x¡-+5ï±°*bzªëe_‚Ž,è¸Èóù¯½àÇŠ•Ê=ÆbŸ0d9A[TL¢/&i£A*äëýö¡.›¦\²ÛjS²»ýÇCµ+›‘/ã8ZÐ $gƒz(‰˜êc‡º/2~æG^—]Ê‹®à:>dg6Ò¦ŒŠ9+Às/ •²3f0å,[–«·?Uß=”»î¨ˆ¹%ÆiæTƒ úGÎ) "¢Q¦º3¶\,Œw§ŽƒB©´æøxƒ°dçÀqÜùT@›‹„ï廧Ùqçà%hÅ´ˆÐj™ …DÖßë;)GË€Ã)j4' Ö´nA<ê[°ØÎP@gÑóŸEÛ%´oþXl6c  v2m¹E¤­c©IH£ÆẺkù ¤>ŸÚ¤†ü<»©àÄ´ÖKÙùâÇòP1„!Ÿ¿9ÑqtŽ³âˆëxŽ‰ˆ¶c%öI5I‰ÄqbDëN3¦ÀÈ4SEý%=^`’:«œH¾?T›êð©oBÑ’Šz ’£Ž«ÿ[ðQ“ßijíL[˜ÄÕo>Ú‰´k¸ïûŽ:•ˆ–ö“`ZÚ+I½$Ê÷@ˆ6›r…³¬V«Dy@§±—ŸÐ°¸l@“Q黀çþÝ<7ƒ²àdý a1‚FÿNWžF9êŠîQ!°í碢mè(8¢õë¤+ÚzªrÙÍwáqUÑÚ•ŽA&Y¹+˲f‹Ý’ýH‚ÔÏ*üBc]n›‘¶hL,Š +8ÀÒÿÌsöpN¢R¼O䡈² EúÛÀ:ê¡ +Á½3I)ÈøaÆí˜r™N †š¤ÄÑÕê¶KÊÇØŒÃ6®k$õq—œòÙ ä† †ÜHìêh4¹XT_¦ÆýW”OFbÅEhGèCH½+/èC¸åàò«}TçôY>@?bšðD!)×'±Z×"Œ{úY±·Ø,žƒ½!’_®ý)0=N 0*||! +endstream endobj 436 0 obj <> endobj 437 0 obj <>/Border[0 0 0]/Rect[63 287.22 242.88 300.72]/Subtype/Link/Type/Annot>> endobj 438 0 obj <>/Border[0 0 0]/Rect[85.68 468.24 378.48 481.74]/Subtype/Link/Type/Annot>> endobj 439 0 obj <>/Border[0 0 0]/Rect[85.68 428.28 376.5 441.78]/Subtype/Link/Type/Annot>> endobj 440 0 obj <>/Border[0 0 0]/Rect[477.18 402.24 549 415.74]/Subtype/Link/Type/Annot>> endobj 441 0 obj <>/Border[0 0 0]/Rect[63 388.26 130.98 402.24]/Subtype/Link/Type/Annot>> endobj 442 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 443 0 obj <>stream +hÞÌXËrÛÈÝó+z‰Î˜0ú×r"Y©¤œ)ÇÊ3Y@$$!!A-ë7æ/²É7æÜÛÝxÒŒgR©JÙ…tß¾÷œsOK‰ûÕÛ?|¯Ä}¿ÊŒÈ“BØ"&]½º[ý~³z{£„›»•Ò"Á?œT‘ÇF‹Ü$q¢Åæ°J0JœØ҈͉²bó´ú!º~w#Ò¸Wo¯¾ùF|è¤*bï»êphÚ{ñÇv¨»»j[Ë¿mþ´z·Y! +Ãd…*fQEÉA”oÙ"̽¦9s?¹ÉÝ䮤±˜îYèDÉuçQ.×Z'¥Žm¤¤ŠR¹Vyž–Ñ\à·îè^Û¶ƒ®þ*ó"΢ÚýÞõ\gxñØÒ²8èDàS­3LzÍK/}‰raüK¦AK‹#)ÜÈÓùìöµóW¾ö¿õÿø5®‚Éâ‚jø*$ÙÿË9¿ÝïÅÇæþa@1MÔ‹u_wrmL¬¢ÏRƒQ½‹ÏPœkFqÆ0Œÿ‰ 'YaùÑÚ!üÓïD åfbøý5®ù ÐûÙ’‰› Ë˸$ª8Š.ùé_æ3YýëfÒöÅ™LþòLsÀ§ÄMœè‹â`'qP%ó3¡rDºšY¿ùûDìI^ðuZd4 ¾&jÓ8\Mí«¹yhzq¨Z©°êTíÅ®î·Ñìlnë^ µƒ†B¸6‘ÒX,n¬+Qµ;AúôØï%^O#•Á©’t㤪T¹ñt\x qlEˆ­pãuw„a}âÔ×;1‘¬jÇÓ<¹‹¨|xkmãB¥¤"*KÇQõ”¬«jW·.Yeœ9ùÃY)%Òc¹ãõèßôÎL¦¡¶/Í͘Èqñtż¸®ûæ¾ï¾lªö¾7R§XôQr —”œ)ƒø‘$ýG)îš}ÝKeñkìúdç˜q–l3.E“J+’IGÊ ŠêH?øAµç‘Ð(TúBšiHíx–ªDž'Ñ?Oû¸­‘ãU0£œ%u f=ƒQ- ÍøEâðH|VÄö†² Dˆc·€…q°0 Xà‹”îßP÷€JPo=HJtÆyøA’ÒçQb1‡fßTxj†qýŽÈcUÎ>×cèe7\ѵFNrmqÚ§®– +Ý …R}]¦&^8tÌ2•2|³ò¬ð¹ùôP ?ÉŒÚb/×`™øãfл'?âK¼%éX é¶Ê7ä ôÐJA(NA¸ŠHE:Ò´XüBiyMyôäav³ô„è­öéEéžw˜‡µ€¬ˆûº4ço:†©Ý·®Þ ã?gXˆ€ãwÊüö—Ž,€Qó]ß8“ð&ÒÄÙË‹‰å} A`=´>¯qQ"ÙÒž¹ +”‡ +žEƒ$7ó“´WÊâÈ•JqñD‹§…ÿåfya{X˜)Ø1ÌÉ”00ÐþÐ’íWá#£M„5¯¢ ŽÀqÞ‰«VÏàA)Æa„G¸çî¥]÷Ò¯á£XàÃUµˆS}Ñ{X^¼ú†ä‘â¿î¤¡)ŽD¤"(&%Ðózs!x†J¦Ô¦F–¦ZÍU84X…ËÀm”Ù·0Ðs›Xâg®èx–þ…F›RyoESŽö…3¹…½Å¢¨ +?€l£ad4Í/V¡÷âÅišóھ܌Œ-½R,º‡¼èc½¯ð÷ú¸=êvè_÷ŽF-š,OÌc=Å_¡öûzèá:|/‹ïgÆ~d ¿ç.È3Dr¥ÕºPZN>iìï‰ï•g–QyË8v±5pŸæ,ùBÃèì# &, q… J­êpìjOü”0W +RO“ n…™ó`¬IâéWÝOƒk¯6Ò÷úµeãDT4ŽŠ†Œ¤›€Ð?s‹vt9®ès·)úçv¨¾8±¹Ÿ+"5‚Â,üž-³1\Ï&lñ!ž*Dù±æòÒ‡Žm¶g€¤‹‚¦°ÉÊ¿öÚ¹@þ”Ÿðkq¯-m­Ü“ÈQUðÍÉÔ3óÿ‘þxòøÐlßsNÄÕ±•–Þù f |ýÏ84­¦éFëä;︵Ú7ý0n©HìÇ-ÕSiåv½$Cu Yò’!û8‡åöClȦý[Iû·ØGœúrºñ&õg;‰h¨¿ Kú3ŒèO8*½Øæ¿Óù$¡K)ï>À€]Oq,gµðÜžÝMy8¶Çþñ|˚Ʀü¹=Šž‰f»fKzð·aa×ÑóZ-z…B² Âî2Ù’‹/oz2™\ m~‰ap~ƒ¨I®P:%aº"Lï÷ϲ¤/h7ñëÇ'Ò›.%$ÉGÎx> endobj 445 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 446 0 obj <>stream +hÞÌVÉŽã6½û+êHb"6Iq‘Ž³  1c$‡ÆÔjÚVÆ– IN£‘Ìå/S%j±=K H”EÕòÞ«ÇV°]Ý|ÿNÁ¶[¹¼ÌÀdR mXmV/Ö«›7 +¬7+¥AâÞTæEªÁ§RH ëÃJb!MžÂºÄ…TÖ«;öêõ°"ƒ—7/Ÿ=ƒÛ–«L¤¬Ù¶ÅáPÕ[ø¡îC»)ÊÀ߯ÄLiÌ” •YH”PÎÂúÕ*¡–bË÷¶ <±Â² OÞ¦¯×+krì ë@è4Ïs&“ÒÄ~œÞMï±Q¡ÍÅ{Ä`H‡—ØçŒB>ôž¾4ÙÔòP—{N}¬í炧»|-Ué™ç‰Ö2×Â0ÅsŽ…ø{ÛU£ +< ³H(*§ê«¦#²Sõ +çΞéV.¥ÿùÏã2×.Gs@—w"G—Ç MµÇ©î9Egâ ÷EÛAe[P„plº®ºçZâóž+úÊ]SaÿÑ‘”öúi‘Åœr ËŽ—–d€Çð>Ìc*b”\äÊ^« ™UwÇÖ»@Ex<åúâW9.±ô,”XPÈeˆ¡Ìgìõi.§ãJç1`ÕŒ¦fðFÆQ“‚&hPj¨¬ÝƒB®ñnh)8aW»6—s…ݽÿvžŒ±‹Æ4PR£9ûoo=é¥nšæH’AÚ&,;T&î‘Ñ‘'Òe¼Œ•ðë.ÔpêЉÇPX„aô *aÒÅdFê‚&;UžŽ•wT©eßQ –ÑÌk–=ñ„ž§q)`_uý`‘²Lý e“ÄÑc“ì6ms€Ç]…GØf³[ÍF=Žê×$¼Ä°Ó`Ò€’75z…"Axq4Œ‡jäÏܨìFyJ„Þß ÔÆuÉ +endstream endobj 447 0 obj <> endobj 448 0 obj <> endobj 449 0 obj <> endobj 450 0 obj <> endobj 451 0 obj <> endobj 452 0 obj <> endobj 453 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 454 0 obj <>stream +hÞÌXMÜÆrœ_ÑGÒ)v“Íßä•(€-EžÄV9pg¸³”9ä„äh½úG¹ø7úUu÷Ü•W  ²»ëuÕ«WÕ+ÅnõüÏ?I±Vi,²(IžŠ8}µº^}¿^=-…ëë•T"Ân2ÏÂX‰,ŽÂH‰õ~a•0JŠX¬7xˆd"Ö·«Kïå«×B‡¹¸x~ñí·â]ïË<Œ½n×—û}ÝîÄ›v¬úërSùÿ\ÿeõj½‚§ŒBæ3±AQ0ˆB`T’;ÛÙ̬ñ83Æ(ý8¹;¡"é:̼Ì”Š +&žô%ý”Y¦ ïð®ïÌ°íq3 +?ÅÓßý,S¯2ïû¡öƒ»–¶Å #©J¥0ú’·^X‘40þík¬ üW)ÌÊÓýÞÏÇîOö¿YõÿxG!NÃœbÙ(Dé=&þ—6_4x_ïnF3öñ¾ªÞâ8”Þ'_!¼jÞcq¦˜Å)2æA2áÄcÜ´*(‹Ò4rlŽ{D¸ÁÒõGZñ_X³´hšDaa’40ùñó7¢Åð ´Žb¶à™¿àƒÅ’*妹¬Šìø® |“¡’ñ׿Îlê"ÿOlê.MÓùRãá¼@®“¾ þ³3«a´y–1z Š=Åñ?ÅþO„â̦òl6~R¾Kï-˜ 33ïS]ù²À›[ÇLš‹7¢R@—C]Å\d˜ÌÐ} X2¡2þâ§lªï«r Wÿì«Ü9®'†Ã~ñ붺m5Ì 'Ò[HlS_9Ó§òô§Nã´ÓqUôÝþP¬…W(ë¦ïæ@³:$Š,L¦\žT˯Šþ4~Ii™´¯†¡Ú +òøëº3ŒðäˆÂ/ÁX¿‡q2£@ÊÐ¥)éL9§¸áPîPU–@ ¥çÀö„f?y³fp`µÜ&¯MÁ·"R]µT¢oô%HT²(ð qÑ™‡{”‚fç‚x•<î™ÇôÝBXp:N: ¦¶ÂmÞ5M¹Y,§Ç¹~hJ[JØÌåkj³õ¼œÅZÏâ<¢ð‰cAÛ—­ø¥ÞÑ€*ÝoÈY$WõUƒ|•‡CSoÊ‘íA»Tþ@ïhm[BkÚjßíhiÊÚŒV¦6½\ͽÕB¼ÞTâƒ÷âݳ2´hªÌŽ®ÊªÂ_ôÝq¬[€‚ž’€AHqíã5)…{Å›² )\É,[(M­˜LõijbØd§EŸ ž¡£#ê’”"NH]Nêö‹ÿÄð MqœLÊ O —[¼¬†z׊W¿¢”´»J¼ö•¦òäãÒSωûÞøÙ'ç^>qÚV¤r„ç·pˉܵU;¢~p~<–P±,¾Jé¦ñK¡6‘fîY§¿lVú«tk¿t£Ò§ú@|Õž¸5TÕ^ NÙ‹@= ®@hbŒŸî†±Ú¾LÂÜ{† „ÊÃcŠ£|(òY$Nâ&•YÐdÉPMüdŽs<¥×–Msgè¨ÔœÜ ê¬û¼­Ç“•t¸C¡ƒ0]×Dœ¼-ÊvëØœ…2;Ïfö—]Ô#EN"¥Çâ¶Ú­®‘<È@1‡Ž::šW´ ä›ÊÇGs¨yÆÐ_¨TßwÎœòW>õ P\FQ6CÇ»DUšàI¯©y­|b¼õ ;·'û ®¨t0‚Atק½^8Oo&@ö “VGþHÓ!®;ŠMÙ"Èë¹à¿mç"¿ˆ—Ôn-³Ôæ¸7õDs=ÑèíÍ/À>ŒVgÐÖÛÚÐv¼qlȳ¾»\üÖùˆbgHÖ5Ô€¦é±ø;Â?ˆŸ#»(ÑtGÜ[(9utØ8‰ÝšîÀà ʺ ß·Õ¡j‘Z£¸&ù…€Ù +E )h~O=z%ÚŠ¸_`¦”s\¸ãFç +´ò¼„}YCÉyAî(¤64Š r#9?vcõXèNŒãÂ9‘u½;%‡ÍŸ„EF¸ILŽà-ƒÀñO9X±FÊk-Ͷi´òP©óﺦ¶£”a_ YñcªÕwàþa¬÷Æ.íخ݋Ñgx”¦D½Ç1üBçtZö ¥øL[žF\l§ÿeÙŠŸïG$TÀ¸c¿èõך©#œ‘·|–ÆÚ™gBsËMN:šå‹3<-5Ú‰bOXDÀuÞwßv&2ß5/— d9Ð#/‚«’ºazm8üƒµ #±ÙÔÓJÛl‚«m¶Ÿ€2ªÞ`HBýÙBaÝ¿¯L_ä1ntîÏC7îíì\é3i¬lHÙl-ÒêÌk*a9Ïf“õBÚM­"fAÐÚö©Œë4™‰’N²wUÝ”dC£…Ei*Ý¡0Š¬"oP0yaZÔ5†Z.*Ãæt ®Ûz¬Ë¦þÌ=šmH 4¡Ð6À$gÉbµ­®û7˜ÿ-æ"r険¦LBC:·Ãȹ½4§ß‰àÿ +endstream endobj 455 0 obj <> endobj 456 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 457 0 obj <>stream +hÞÌYێܸòØ_ÁG ;M‹¤®~óŽ½Áˆw`÷ ìo»ÒßÆðbSc M„ŒŠ”q‚aA32kF ÈŒúì ý~¢‘Œv/þûÒïo|í¿³ëÿñk& *æ)æ °YâìÿÃ3ßTûP>>õLåuìƒîtëo•âÂû›/¡ö<½çÆ€¾o" xc(O‡Þ±`Ó„ÅI<+V™Â€YZðtºï¡*;–×{VÖe_æUù_Dp®ö¡=Ö?ivÊ[°‡yU=ä…1C€MÅëã`³óÜ7J @úò¨é™³î×6'ô/”àX_êŽ5u¡Ù^ÊZ£!̲CDì°¥ÓF~ V¸ÿðóý»»¿çܽ¿ÛÝýüþ#’Ã@*Bp•MŒœ‘‘YÏ:m¥cÏ%$àA³¼êšÁ ÜKHž…+nÚø¥Ö:ýÛY×=;”•†täûÎ!:l=IȤŒg11 >@c•Q†®ûÝ܇YFéåÑx’˜b´å£î:pfûw`ü±Ùk¶…h—y¦¤…<Ç€ˆÌ.…ˆ¿B&0ߤÃ,HyšÚ÷?yúÔ³æ0Ùܼ”ðLNB$Ô™1Œ÷Ãb°Ç¬Ú*Á¡¢œo—‹0©wcÎkÚ=àG–äKÀÅ4·®"eL[€uÎJpçP>ž[?nÍ1ãï€ÂMƒ7ÞÜß10¬ë[¤l`ÒÒGÂ.ú×6}¶!n3…DéŽcÞr>OÜ{j¨=Û?îýP@rß0?¸WÖPP¶ +¡¯Ù-l^àzF;ÓÉØöŠ×"à³÷ÙŸ›¡Ê^Ž¦¿ë²`Zh¸dËò™yuVÄ3wÔ†I·b}QΑۀR½žå#2RÉpÞ@WAfsª} ¾{ÏCj-¶L>‹ªé´e X‡`¬Žö YPi^Síg{¡/ EäÞbpÞ†“nXy`À^5ò±qÜAC†<ëÐxXB#œ„hô2€!ysÿD¼ÀÂG?…OÎæÕª/O@>ENŽƒæ™ˆœ‘ß'¸\d†/ n©˜x¸“«ùwåyùQ›µ¶™Ø„J2"Z©ïVÎ51ïœ$](©v¡ôŠ¯X8G‹÷6ïóI¿foFêÜ +ÃÕÐXœ!á@hüSˆ-ü°¡uHi»È”Š 0vì*ý“¡¯YQV/ըgvÜ‚üL“Õ^`Ô o×ýK蜇ՒÅm¥óš‚0ø–¬õX+VH8šAØl2ç7ÅÃ+‚ÃsÛ«È€¾Ï¢•æc;‰Ç\ Øg¯9áC^}ö9ÅtUF 񪊴 +6èçp8ЃiöCï#yÇ_aVGO{ÄâÀQÝØCÍ&PÉj« Öî<=ô@=Û¨õ! —)%$3¾”§“ÞS/5¶Ï]³û8¯pyF³q1×eóuÃaª ðÝĵ`復5{ Þ¾ø[')‘Ê‘¦ÿÞ¯h½$]Eõ÷w»™}J$0¥?|ËäŒbÑ.úVZQ Ö².â¹| ­|qzW¡´èaHD…ñoU/0x$¯pñýÒwF9nbG˜VsÔ³P.0rD¨ÿQ0W£ÈkD{’j¥æeKÞhà¡î/ra9‰¤Û%YH‰H¶­/hµÒT¶í7@†rÙoh<ó ä‹Óêç' æP³ðk*r¢u]-ëš´}à M›ÌA:HØn»»‚‘Qèû|©›(æ·sÙjvÁŽ{Í™ö†²IãµVåŠ ô”¡(7›Q?ïœÀuQ“^açšÚ¼‹í½ˆ˜»å°©œ4jð÷;É ÿt­Ð„m£`œ!–æ€ìÍ(‰y‹AéQB>}3î’ì9W=’>^ü g(üäš3È’ÿg+œáº¤rÀy!ß°Mãñ÷ÜMr È1V1Nûx“Ó”ü*ïFM5ø‹¯$Ñ´C~ 0R®Äl3 ó ^ ÙÆ'!,ôsdˆ¡è©ˆèš=²A9DŠO©r³g¹õ;B¿‹¼f¿ž»~Pzü²u#k¶’—Ì9ŸNUYÐPQDMJÐ\)ãËpóÁ°1U %a¦+ ¥#\¦Þ Rj*–màÇ‹µ4c' úfàQ{¡òì 3/É]Åãðe=cîU,•Íñ~?”U µ=NÌ|`éTL íxT-Ô=ž™zŽì:q…yL¯õ»AÏGWl¡®;Þe ²¿Á|¦ðÉ>¢· ê-ÞqõìLovx9 + ,©õÞ÷Ýã®ãL)¿uÜ ¾aÒÇHss6Û*àŠ& LD”e_}ßôú5›m§œËÚùäÝžÛV×}uñ3¬Š—y{;¬ŠOaŠÃ[ ÃÛƒfçŽÄF^Yñ9«Ù!¡¤Ÿ+†ò¤È:¬ûV[;öڪЈËl©¤vCiuÁSN½îAsä{,|˜¢ÍàBù@Y¥k™M¾Z¼¢ ÂÞz7/¯»*ïa¦C ò +¯ç.d…+•é<ºK]g" DmV¶(RˆÞ_,E•‘Ó£8\Œ½Æåÿƒ{ö4$¼ã‚ ˆÁ¼[,ÿ¶ì€÷~éM–_¸7ÄÍ$n6l5𲜈7¶¯Ð=Xä™ýÏv‚ /áç2a!Çm—«ô’¶/¡o,ÆÙÉÄ8^J“17ìIW'êHÈO@'‡6¥x3ç.‹Üª€lì…#[o‡rÿ䙎"±£@óGí&W{ég3 Û¬5?ǻРºÀP÷4ÇA*ÝC"cs§íöÁÑuª‰,méb˜õÀû`ÏxS­⺕6¬H“_/u­íefU]ÀwuO t¢Ù:¥©&¥éSCOî 5!0ÍâCÛ™f| dý®E¹{=°aB†¦ìÚ”§ÑÊ´¨¤‰Ï5á•=NDg¼tqˆµüÊÔÒ +1È¶é ¶®µÀ–k ‰ æƒgL’dMÌîº' ÖòBAð@Iu WýòþîÏË›ŸD^³Ú²:€ŒÖ4µ¢Î©)™÷ 2*[_î"ÆFˆhŒ`e mÇŠ~·ÛüK€¨szÉ +endstream endobj 458 0 obj <> endobj 459 0 obj <>/Border[0 0 0]/Rect[373.98 503.28 448.44 516.78]/Subtype/Link/Type/Annot>> endobj 460 0 obj <>/Border[0 0 0]/Rect[322.38 477.24 500.94 490.74]/Subtype/Link/Type/Annot>> endobj 461 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/XObject<>>> endobj 462 0 obj <>stream +hÞÌYÛ’ÛÆ}çWÌ#‹³˜ .•Êƒ,i¥*²$³¬‡8Xä"& ÀfkýÉOä/}z.H‚+U¼R¥ì"¹œAOwŸÓ§{(Áv‹«?ÿ(Ø®[$Š¥QÆâ,a*bm¹Ø.¾_-®®lµ]É"ü‡7‘¥\I–ªˆG’­‹Vx犭Öø‰˜­î^¾ºfšgìÅÕ‹ï¾coÛPd\Í®-‡ªÞ±×u_¶Ûb]†ÿXý'){RÊeÆ–‚‹D³ÕËÅ£˜LGd6ÀSm³¹[÷US‡«.^­‰äiï®Æ¥Êóœñ8£ÇL&4³ˆè¸Œý¦O‚Ò~ßvU¸L°±©)…&A%EÊ$¥¬¹s#Öÿ†dã•œdÖòø~òç¥÷/Üöu¬þo3(¨„g„AäPˆ’ÖÿÎ3Ÿï÷ì}µ»í¦ +:ö¾ìÊ6\*ÅEð¯P¢ô‚rÃ+`¾#o* yT§gïX¯XOÒdR«KÇKžÌºý}¹.õ·%£ÂÝVû’­›Ãǧ ‰Ó«d4 Í…Ô6Ƙ©|óIZkw}µ¯úv +°š8M5÷éXU¯ÛòPÖ½1—óLé1¡®¨ŠýþýÜÛÇâ  +xÝ“p4w=+:ëKÆe>ñD ž88ªž5‘A„E_v?‡ÏLæiÊ+"™S›‰®ú5±©N¼°fk²ƒ0z¶.jö±mÖeçüA¼É$˜ÑŸÄÚº…ãuÃöÕ¡ê Ò0ÎþÒ„"A‚ïC“ç2T‚­Í_ôGÆÞž…D¶&æ,rþ |ʶ+§äæmÊ8ÀpŒ·’0aHÍ6Tr‚‘¡Ø!¤¯Šzíó„GòÈ&*uÇiéjË®÷àJi`Ĺ£œ¥‡Î³]Y[ `tü[÷#ç£ûÚË)Àñü©ˆ+}YoÊ kj¢o†4çz’gíò¬ñ¥1bÒ§Mú´¡ôÞI¼n ˆí€’>>늎òéÑÓ±“Ø×Äþ¢‡_\X*yo¥pFôN¡˜À°Ø”XS£È—‚QGƒI2uC$r¸~: Û”]µ«Ùv¡S€D‰Àw=Õwï̪AFj sARp\¹&À༜ÒM"pMä!—†æ|$+:ñ†tê°[9ùhËbS¶¶<Š¶³R2±¼µ ÏyžM#M}£q@Pså &1vE4G„xa›†uMÓÏØ1›V–D¼;v Æ©àÎþÝõ¨ºú—±ø¯®µ JqDb¼ˆÆAc_ÝlÊ-/Žây6º;ÐÃÏŠzsbz©0óäú‘yÆó+ÞNŽJ¹ÈG†û’F 7 +|=MµÕ–_9”že¤µ„ô µ;¶-üsF (³È™ì¥kxÈø‘‘ùúËà!\â•Ê·Øw Øðé®jK—*³ô¢DUÍš–ÈÓ7†FÎ)W*?¥ yãé5ÃÀnbt‚–›v‚ËPƒÅæ®]{7%E³mË„Ûö®±Ùä—^ÐÆà‰{™ „×~Û0nJð–ÊU÷õ¾A¥l|b”œÐkèÑ®wàøæÀîïïC­!>|W‡( â7u +Ž<ù¹@¥ +•Å Càkós±ÆXœÍÌ1ZKcoêUAìä†*vƒ&ÉeÉ‘á:Ä £Ê ܦ³ø¿Mg‘è,K"ˆi}ô©.˜‘£Es¯j›´<5ðD¸ÑÂâš¡Ü;`ñoB{¢Z¤Xì½±á7òPDäƆäH¨n:)\g0wÓµ!1T`hÈš3±Ÿ¼2S0æ» $ M×Q6hŠ7¡Á>”AiÑM°õô\:›Ã¬Ö*ì6E÷@ùÕ9rÊ’<}Ÿ˜Ä®]ÄõŠ ÍbÉ¢ä‘nñ9@ܶoÈ‘SôÉj³t'Rc}œ«Ô<ãšEâL¦´Î¸J˜Žéÿu"ŽJ·º´Ë¿;ç±MxÌƳmª³§Jõü¿zæ¸ñeLÆd#'¿¼1wBÅ5†x2‰á;ø‘¾KhÇ5ÀÌãÁ+s—Ãô­Ñ0 1{0W€àú}€®ÔèÌáæ»,gKúÍlú»cp==AÙ®_¹‡‹yÂصËlç„‹ŠêæyÖLçi#´zŒ7´ü‰39Ý2'ÿºÌiLguTvF°w‹ßXœ® +endstream endobj 463 0 obj <>stream +hÞb``ø £`Œ@`Ûëü +endstream endobj 464 0 obj <>stream +hÞì–Û +ƒ0Dûÿ]¨ÚD÷’QÕ}QÇÌÎ^Ð쉻 Ñ¿ÀH´Â¯OÕÁëj¥]Ì/Q-Í•Eói5×xº¤Y#e [o=¿g +yÛ Ïðg‡ð„/ùNcg>§ë'„ ù…§¿Éaˆ$fÚŽˆ'!ô‡Ë—ï&:žÙ*ÿ9æ¿;Q|¸¾õÊ«‚/—ò‹¡§ñI#ÏÊßàÕþéVe6F1ÑÛÒ:—ƒþ=•üUÿ'×Ï&——A7Û +endstream endobj 465 0 obj <>stream +hÞì–Q„ D›¹ÿ¡MAmÝí05±?D:¯Ð*ÀgŸ=ËŒväd†[yÓòOã±2_Âx¤eð@Láãywr?êY|0Oã{‚ÇwH>’ïÁa‘i÷G¿ÿjÿ‘ûŸÞ¿ÕÿG6€A `д-À•ë‹ù‹õÏÿÞ÷Ë{Þbÿ{©-Y–LפÛdûBX¢©ž¢¬“nÈòÎGñó^I¾-í7¾=¯_­‘›¬®îÚ9ñ ÿ?ÆÅÀû0 0ù¸Å +endstream endobj 466 0 obj <>stream +hÞì–ÁÄ D_üÿÞnbºYKE.Ρ—f€míà \éJîOŸ …úUíü²€±þI! +@§ðÉóQø—y·§ü ú·ð¥þé-‰íÏòüÙùÝ|‰3ýˆ|'ô"ßý›k€÷4$æØ^.YÿÝ“\î¼ýçi‘g ÌêpþX¿åû5h¯üL|RgŽÁŃ¥;x©Âc¢cüøÖÛƒî=*?ñý¸ƒ¯¼¿håïσ4> ÍÉ +endstream endobj 467 0 obj <>stream +hÞì–Ñ EOîÿ´ÌŽhÝy@ãšl$¥§-…’¯8?Û,xa\â)Ï3l\sDzvOÊC†›zsÕ‡á7*+úüëþÓý¯ï}ÿMƒâð>stream +hÞì–É! CŸòÿÝEtञU‡90rˆˆØØø;p†Iwpÿ,âs€‹ËÇJýÿÉbÀOlñ²†ËŸ#ø†þViá×ø‹ýKÉðìIŒÏÅ ¹2÷‰~„Âá·äÆùÇ4”ÿóÞÁªßSäOü'ßÿ²å(‹C‰ŠC®´ºöó×v~jZ´Ÿò_O1•Œ½vŒ®ä,—ß/oÓZ¿»e_ýxYÜŽ'Œí1°ùÅ숵OÐ+N r[Ñ +endstream endobj 469 0 obj <>stream +hÞì–ဠ„ïÿÐý‘%z5èV‹-Ûì>TRõ·ße’þÔUñGB!Sç±´‡Ú Ä)¨kùYžä'}–r~ ò¼G.ðŽYÁ÷Pêü +;¿dý!ëYÉÿ‡(Å‹R¼(Å‹R¼¨.õOÇOçŸ^ÿÜ_>pÿ`ëßÛÌâ³Ök[ì{'Ã@ÿj—`~ÖÄyëìý·¹x?ÿ±:ïS¶§Êf!‡ù#ίßòt{߸ó7ÓÍ +endstream endobj 470 0 obj <>stream +hÞì–у Eoîÿô2  [(§.>ШĖ{ÐZû©&­Å~ô©.Çò#½›!½ŽÆåzu¶ÐHÿñ¶à¹ë©™Ñ÷‡Uè± þ:¾ô-ÿ5Gí¦§¬Ÿ5«-Û”ÊXD?í è™d@f™d@f€;LJïó¿?¬?XÿpþÁùYòÖ¿µß¼ S¿@f€d} 3€Ìùú@lúݳØû¿í_¶m›µ—Á¼Ï +endstream endobj 471 0 obj <>stream +hÞì”[ƒ@ G¹ÿ¡+U¥ÚÍ‘ªõ7“M쳩ÿM<‹šø¥qÄÉUÿε¿ÜÍÖ?JØ¿H­ƒ=_3ô+jŒp§É HXýnáBêñÕÄ{ÃÏq; +ÛÅI Ác +ÿ"ÊÃ}*ñ.Žýã¯ã›#>…'sAC>áûk}I]ËÁülÿÌ>¹ÿWðëéôOÉGå·‡Ðq‹Üûkâe‰ÏËó‹!È<'`SS·ë!ÀÒ +× +endstream endobj 472 0 obj <> endobj 473 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 474 0 obj <>stream +hÞÌTÛjÜ0}÷WÌ£E°¢»äBÚdSRh ‰éKéƒÙÕ:.^;h–~Rÿ²#ÙÞMzR( kÙ9çÌŒ84Ùù›;Í>3,s œÉ øl›½®²ó+ªmÆ0üáƒ;K¥+eª]Æ…2UJ¨Ö¸`\Aõ5û˜_®®@SçggpwTæCêÝ®í¸îG¶õÚ“OÕ[Ì$§L– +§Üh¨.³™ŠÐ,Âæx* ›ÇõØ=©>g«*ÓªDî†jTȲ,*%FPk–}”G…z¶ê£x™6QÝA{™—€›Ê-B#ng¥ÒNJßÕD*Ôö ã¤ÐÔæ–B°RP• ÂsF +n­.ó\à·0LaQƒ«Ä:jr?}û–‡>z˜bÑ!Œ¶DåLƒñ‰Æw¢A…ÿ‘$LÈÇçÉëÏžöoPÿã°Ti¨‹5`s˜9iû¿Ìùªëà¶mîG,¦Ì÷pë÷>BJÊó/Dàìå~Clý¹y­HÍkp<1¹h¸y6µ’Éãh½FÿâP†QRl®ƒTc‹yµV÷ºa]Ça„¦E~šŠÜ÷ÐîaL{Šü+á"nlàÀ°M¨Áï»±í'F­~sàÈÓTä ìÛÑÃkµáx‰'ñê iŠzßPoñrJÙâ™d¿N·’=œt3a1Þµ!DºÜR—Ç ®î7†qr§ ]ãNéÆ…NÙ=Ô]‹†ë1º8UCMÕÀ A饪> endobj 476 0 obj <> endobj 477 0 obj <> endobj 478 0 obj <> endobj 479 0 obj <> endobj 480 0 obj <> endobj 481 0 obj <> endobj 482 0 obj <> endobj 483 0 obj <> endobj 484 0 obj <> endobj 485 0 obj <> endobj 486 0 obj <> endobj 487 0 obj <> endobj 488 0 obj <> endobj 489 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 490 0 obj <>stream +hÞÌXÍnÛFzÔSì‘Û@ôþ/ytå$H®£´‡¤ZZËlhÊ%é¦éõÒgìÌ.ÿDË–Ô´@a@Kk‡;óÍ|3³#N6³³×o9ÙÔ3#‰e Q‰!’‘ÊÍnfß,gg¯8ády3ã‚0øƒ…'6–‚XÉb&ÈònÆà”˜©T’å +Wdùiö>ºxùŠè8!‹³Å‹ä²¢<‰e´ÝTÙÝ]^nÈ›²qÕM¶rôçå·³—ËØfHã­àÉÈ +¬H½))•tºç¨Ó¶Ê¥ ʿ˨T î3ŒÓ¹Žmdé\–ŠXE‚ò¾åÖê4º„ø®Ú±õê!ÔÀÓÔ&±‰\ø¾ªs:7 ¸-–7šxUJ/<ô´5ƒñ`ÆŸTà ‚*øD#I8yX'ÿ>µ)ößœú?óQ&N0¬3&~¡Îó¢ Wùæ¶`ʨ&W®vKóè7* "·Ž',¶Â³Ø@Ɖ˜½ü@̯ï üüi±½»ß–®lm=† ½¨ÊµÄåi¸p§…ýAÛ©mkÒ±0ÇoLûºŠà“@EŠc.×:æÏÁ„Æceê¶x¥< ðèIù„ÀÈ;€¸¸waE`.´qEb¦i²—¹÷Ç +zæøaö%¬:¤Æaâ$£7&½@^¹M^7Î#„H/d:„ÿ]‰ôÖ^$YQ\g+¼ÂêèãNè¡· ÇC½õŽI÷9ÆHÜdTß:ÅžR¦`ˆúçAºž2ý2\Z%Ü©ç–² °S؉„AîË$VÏ´XSŒ;º¿œøLŸJüуûþ€6ÐỈÓèãbûPŽ+9óA (ž ;8Lj½Çåƒi±w?¾%áÄqs#vo‘-i;ÞøÏ/ß ï~Wà!0R<.zã‹O?ñØ0ñÈh(„8_ ®v‚«ûñ{…ã÷¶E³…O‹µsJ7/ᬖᘦÃð©£,÷oÛXªÑËÓ¹²SŸ +ŠM×…9Ë!üþ—˜¿‹žö +endstream endobj 491 0 obj <> endobj 492 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 493 0 obj <>stream +hÞÌWQoÛ6~÷¯¸G­X‘I ÃÚ´2`@цvŠM§ZmÉä¥Ù?Ú¿ÜIÉ–ã†CK–xÇãwß}wp·xõÓ€»~aج€¼0 2èÜb³x³\¼z/@Àr³2üË(,W¬Êx&a¹[dè…gy©`¹Â›Lä°¼_|JÞ¾{špõêêÅ øÐ1Qp•´w]µÛÕÍ\7ƒë6Õʱߗ?ãN*ìÄ ¥!\ Ë·‹=Ò>+' òí]tÕÚupã†Ãª†-ÿX”Þ6#3²£•Þj Wm3tí>¶‡¡n\OFï– —xxõ.UY–Àó"Ëòƒ‘Üšñ=âÃe>{ðzÊ¿Dx&ðJY ø2/F¤(a#Tʨ~©˜Êœ™`©æ6±,•2+%ÏÉþ§ÂZ]&ðŸumX¶>¬`ï~e¶à&qáy××,5¸°m( âŒ`•ÒØ(c™aüÍ4z,ÇO +‚çãõìëS×ï\ößxý/óYP†”ƒ‰¦æ¬nþ垯·ÈïúîË€ÉTIuÒ»Ž¥Jq‘üÉ$oâÖ܇‚ÔäµÒ“×`}?.}ÅË"T¿¿ÃåÆæÜž2k‘…2s›îº©*®©ªúAæ¹åd± ¶ #× Ks^&õPWÛú/&r Ý1üè¡FÑo;*¼6Õð\´¦¢5U +Y3áùÅ·LfømëÈ _ÂS$$Çm´ +IÉFݱ<½Ò0­¿1¡lÒ`‡7É+³àÐ;ôY÷ÁQÆ }T!“ÚÉ[·a +e°shF2ÕOœR‰"Y´“þ™9º$}3t1eÜ2)•8m7xf }U5>ävø‚ëC Br“Ÿxš”7SÁÓÐBïô±ÝÞV+&Ps“¯°94«¡n›ÞŸ/:’êÄÑ(y# @ÛAµÁ&àÁa "a#,%7ØRÅ¥Ž9B0nš¡ú ˆ–¼4Awéɦ‘«Ê7*ʆçé§ikÇL¨ú9ùÌæ^ ½F‰6&: +ÀL\¿q}Çšò:³ßóˆ©&`q3TT¡åzè¡éj’{ØW'IücŸ[ÃjÛâWjy‚äúÚí:$Obg(ô…ì‰Ð7?%gþ^;ÜøD&#SUo Ý»Æs(Ç´&Ø{¦Š À¯XøyRÁ+Q¹ÔO÷ò‘Q³Êè·eøñD}”<+NªôÙšˆ ‘KþùH%LhQ™tdçwÑ)§F?O§ÈøœŧøÞ›Ñð6ôC…Ý´úGXxJ!U%Ó„}_ãP¥5w‡k†>›`Œí^ŽÈÓ|æm0MUw™®¼,}²r9×’‘È„7m»u2áz˜æ¦mR/Ï%ÉsICIžáõ%ìq²£^SR2ƒV[Ôß#Åî‘$ÎS;Œ~83Úú>t(Õ±T¤-¤Ü‘·émÕ»5ìÚµûèiô1㚶Qý¼ÐÝ׸V …Gû’÷5vLÚjÔ­Òž£"_µÝ`jJ6qSú®â`Õîöìm=ú*Ì©/=ùÒÁ׶ü1(2‘ÝcךöLâõ+Kñ“6q ‡n|óªÕ°}€j*6œòò“óóYO®`Æê㜜ÍdÌëà))ÌIðfÂC~|˜×ÖÕ”Öw”¨šgc²©{Z4eŽÔ*ˆ…»y.옋=x5Äž‹åºªI1G¦åRÏ»¼5Q‡Ü‘—“o…cuv)‹vÈ6T„'‚=r®Z†{Üöôð纜å&ðëJ+éøƒ+ ?Š° û¯õ~ïÖàþø+ªW:á@OñÐ%baí£¡ád C 8ÏîÖ-I4õ¥2y@ŠÄ»k<'ËäÛp>ÈDÿ—bžÏ‰QŒ!s€(Ÿù9øgâŒ.¨û÷O BÏJü1qqˆþG€‘‚  +endstream endobj 494 0 obj <> endobj 495 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 496 0 obj <>stream +hÞÌXÛŽÛF}×WôcÓ¶ÚÝÍû£ã¼»q‚XY$˜ Zꑸ#‘ +Iyâý£ýË=ÕݼŽÆ `X @R£îªêSuN¥Ø~õüíÅöí* Y*3e %kÌêvõÍfõübŠmnWJ3‰?ÜT–ŠP³4”Bj¶9­$¬å!Ûlñ UÄ6÷«þêõ‹Œ½|þòéSö}¨L„¼Þ7ÅéTV{ö®êLs[lMðëæoð:O" c¶VB%1Û¼Z­a‘ülí“Îȶ5ýƒ)v¦aLw9³¢ +6ÿ^åv¯¤m´Kõ»BewíØ˺êšúÈ~¨/]Y™–6½Þ¬-ÒÇODœ0¡Ã<Ï™ˆ2)#„ÅÆ~ x„Žf_=ZÚ/΀]n˾Œ²( +G¥©0uH}[al>3-U°ŽEÊÓ`­µÌµˆ¸ƒµJÓ8çßãÿkj·lwÙv,HðôÏ ÍDÂûÓ–Á:Áº¢X„%¡ªu’z|TîÃÊ…ñß †D¸RÌYï‹Ýÿ䲿Æêÿñ2›…0å`¨ÒdA›¯ôùâˆò.÷‡É y š´¦ Öa(ÿhp—›°¡ ò}ñ¦Úoz?d~(òÌ‘ß>ay’F"©/eLgŽdæ¶!jµNêA»£rAÛ-·Ãž¥Ž¤Îf[Þ–¦eÝÁ0"úmy4¬§·Ãm. +d‚ëjD_ì{Q +U>m‹ãñc± öò;Ø´WRL Ń¡Ø:;–"&Ì"ÜÀ+º±ÆT¬5+ë½¹<Ž—‘‘Zi{¤ãÑìØmSŸØ}ÙÊ +'+[{¢u¨„ÌœÜYZÊÈpÜŠT .‚³w· ǹhZ@{.-Ôµ”GæÀªš™¦©›ÖAñ ¦pÈ#û8=Ë™Ž SÛƒªJ_° ¸!¹B…UÈ9ûîïl[W»²+!?Ûzg¬›Üz-½ÝµND˜N•~–ÓPÏ@`½…Ð*”3n-û¥Y#7Ð5’Ĉî·_¾P½P豕¤c©~ø\uÅï®Pc·:yâd›P¬q‚Z±ÅJùŒhó /«ŽíLpWê¿pÇl!Qऱ’ôþÕŠ¿y÷×O˜s8¡HT4ô¨Ø±ÿ†SR!Øü™Þ‡³öË'F'aã¶c[Äq(š'ÌoõŽR¤MçW‘›£yO·âd–ý¶ëÁíòÇ–Þ¼*ºbé2‘NÓ.wùꊥ+¿üš+‹ð 74BiS3·½-Z‹Û¿Ü­jAÜËOfî,*ì«ØrŒÿ8ûêŠBEé(OÞÑ Œ/!úéþr2U×ÎŽÓc[9qi Ès›ÉH?à©Ô í+ع.i>bµ¢=2F<ŸÝóEø™ÕgH“ukÅO° ‘ÍITŽ‰e²O©EÓ9ë%ÏïìZy±¾ínÌméR/é!s›ï¥ µ“H°aÆü.X“`’ä1ƒ ì=õá*0_ö¬ÏÁ]ÙÞ9«iÓ¹$‹§Z´r=ÏÆ /ˆ2ëCè±u’2o­W&C93éÛ¥íƱ¯jè¶u<>jÃa|Z̪‡Ûté Œ­Ïèû.çŸÊèDè÷¡E¦®×Îy 7`6îMrW¶ª Êæ:ëôÒOˆìX×w ’`rúŒ}$qHù%À¥C!¶4¡A»½.DBæ ]@ õ¹øíbØl¡¦?mU¾í>Íz¤Ö0G÷²<´Ò1„ò;RtB®8ŸžV ^±ˆ§šêHßË£µhŠía:&¤`?£3&ôfÁWN +AáaÈ‹äƒ×ùM¯µ‡¢Ú›!¥ŽAÀ¶°c| +ÍîJ¯){»jÞÛ‡š¶ö?.¸|™Ùõ m^wót@Wõ`Þ[~ûˆåÌrt’;?æªd2æ_g_Óÿ*agrÁ^÷ì£÷7R÷åû GoM£7ÍÄÃÐ>+ýx^|‚3½!Æ2xí·—{~ ü”Ính®b6>­Q_ð«Fm懋IûS]‚Ó8çÙ|lâþÚu^XZ$2‹xoþŸ`““q +endstream endobj 497 0 obj <> endobj 498 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 499 0 obj <>stream +hÞÌW]oÛ6}÷¯à#…Ö¬HJ¢ô˜¦è€ Aãmš=¨ck³%W’›å'í_î\’’?’lŠCK‘ÈË{Ï9¼’l5{õþZ²U?Ë43qÎ’f&;’ý|Ê?ö¹_@å¬[í·¶ú ìÌÿÔ(k§4WåP’ +'ùKQNÿ‰šäŸŽ<Íý*×;»¬okÛ³amÙõÍw„ŒEÊ¿Ö•­…aõ± -ŠÜWâîPL +ye9±{0ŒØ{…½íÞÛáGÄ~ó Åc@Ò, €œŠ63ó©~´À—J(^Ûž™Ó&$¸Ø?ç¤ôþP[à-™]çÍ®ƒÙud ×øùeÃÚ]ùeoY(7õIÒRi0Ãø¤®úÑ¢ŒP~0ø‡çsc‹¼›i#tpÔtäê®­ÉţĀ{/Ùݺ^®Ù}$ üÛîYoGfšá‘O¹¸¯Ÿ€;wŒˆC鈬`¿€k¬ + --Övl¹.›U@ŒÐùÑÜÑèFÐʬèüä}÷~Þ\K‘eg§LCõî™ MÀ¹­ewþ®Žð3¬Ý®ž–ŒÕS"ÉUû1þ±¼W”Mu¶$V<½Ðûgì”æVRÄh·Ò²¤s¾Ùô‘L@@ÁÞ:*+îüEáÝýѨÏþ¦\ÿýˆ¼9Èë^ö æ +Æ"Ïþò }~´i˜KdŽ¦ÏüØÑ„#ü°®»Š•÷$á˦0÷ÓçZ¨Ã¢æÙõ}3”ø)ßB™?Øé†Îö Gw<½& +:‹p;¬Ù öx<”7ü&úG‡J€o–þ”O±‰09^Á«ˆš„«HQ{…F`ëE”#o©[(øv8m²N,Lfòô°ëàUÕ³] B;̇ÖíW¹ƒW휭ðNgZh}L3R¨å`Yz[ûymŠ-K"KS˜£(éY:žK)¸T÷¤ßêå!ȦìûƒætÎÅçö•LYé9À· þ%jYÝÜF`sFà%Ôj9Î&|‹+.åP£§¢•hmÍÀ‚4?4Þ¸ñÄwI©Øåt¨o$«JƱüA&’78©q Ú~(ýÂYOž0J|“k‰ä¬jq86í€h_ö5¢zOGËžœK, '– +–~°Â²ªjʾÜLêqÒÏøÙÑ›€4Ù´:Ð׶Æ!H +d¯®õ¢•op„ëºz†€”‰áäþˆ?àuЌ˹UK}KÁïèÿŒ_¶tU|» 7ÀÛaÿßðƒŸf§ç1Y©DŸh*4/VMÛaw–-¢7´YÄ_G:|¡Õwü{ f¿å€ãêc}K(¹,ظ3úø°¾Se4%çAH¨gNô¤ê#á#óˆdÊ8ô,çŠ~T§“ùÅŃèü¨O?ѳz–žŸ%e‰2µš:ê§Ä ½ÝM|Åcˆº¿q£‚¤ñeò—ÌPþž +endstream endobj 500 0 obj <> endobj 501 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 502 0 obj <>stream +hÞÌW[oÛ6~÷¯ °rƒ‘¢(é±K“¢»!H¼C³Õ¦-¶”Ir»îí_î;$åk+ bÝxxø]Î9Ul5¹xu§ØªŸØ”åIÁLaYš°ÎM–“og“‹kÅ›-'J³ÿð£Š\¦šåi"Íf›I‚(21eÊfs\$Ê°ÙûÉþòêše²`——ß|Ãn:¡ +™òvÕU›MݬØëfpݲš;ñÛì;씆d‘flª¤²›½œL‘ö™û+]PlúÖU ×±;7lŸXÕˆÙï“Ò¯Mh­RãªTùU vÙ6C×®Ùm»êÆõ´èj6±ZæÇ·2³Lê´,K&M‘$&á±ñ/Ôæè%УRÿèì°+=b%ÃKSŒ@Q:*H¥y@êÇJ¤Ø|`:QbšÉœçbªuRji¸Šgbªò<+ù .ð¬kÃg‹í|`Ââê‘Òržw}-¦¶ qàNU­mñQeL#Q!¿E†Zü¥$Yˆ¼ÿ=¹ýÔïg~ößDýæYH­,ˆƒJí‰m¾pÏkÈ»^= 3å=lÒ»NLÓT*þNhx—»…ô©@ùQ¼¹öâµ°÷¹óSYÁüþ +ŸÛÜÈ|o}²΄ünÙ½ròh…2²àï/Û ÀÆOmãšá'7ôÇ–ß +nrI7ÁúöD¤·ð;΃ƒXÞ(¼gMÛLÿ¢½ w]ËpJº¬èåzëX½dóÖo¨`§"ˆé®BÄPðMÈ5H‘Uc•?E&Kþ^(…`ÇbòŸiŒŠêl_²ò$üîC3TR­¹¸Î¢R–6”ºÀ©³ÅÑÒ©©Êy<ßð©,œ°|‡(aQÄcdyÏïÅq>á+3Eà‹ËBl¢ µñ<9•Cã|ÍpùPuÏГ鄢Žôd#‚Y@«›•ëÙðàØœ"å2ãÕ•žm{·`CËêfQ:2iÊ=j×@Òk^ ¾œ¥n6® 7 ¦n°A¸s쥘Rñ¼Ðÿ5[ÖávíH9—§lùM=Yÿ–+ƒ~qÆÕ»¶^°‘²ÃÕ0ïùüÏ«nŽ°æÒdyH( +Ÿm,mfmxM,ûWê#”è=´â½cÞðh¸),°ÚR"ýñÞèZªülç‘qY–¾ µGÉŒTÇ®u÷äæõ²ÉI·žô@³‘Z¸NÇõÈ´'©€â‚@”"¥‡Õv=¸¬LŽ,[Ä,â$Pçì©Ý6 Ö׫†Ýó#QîƉ Ù“üÕÑa¥Ý‡÷ØòísK¥&‘¶=•yêÖ­êŠÿ¹*AÜ +: Ô‰rò¶š XHóÇçŠ`Š(ç“Dk|/ŒBd瞀>ˆÖ¸A`… ˆ?²vI…+зŒoºv¤$9„…B«HK˜Œ°¸| lÚõÉ’9ä"׆•ƒd¿Bs”x»ÅÎ YÀQ.²ÿ#å’Qê”y(áÑc`|ªaNfÀ|·W÷R£üpHçmÓ#Uá”c:ÈUb,ûÅ‘†ì8bÎ ™?Ð×OÛåcíØ[bÈ€7üAn=~v½Z¹èe2Ø¡´²Ô!ruÈ@Î%t<úµÍûeÑìxn+ÓÓÉwW_‹2éÜÛššSC­)ÃØX-bI-dqž¹%êf¨Û¦Z±*|´F†(_T#5FSƒ}®JîBÍ£CÑ×èÓÏèm +¹‹ñXûȈ7]-RêhT_‚s°êïƒý£'ÕóžTY¹3¤”DÝuêÙ½wßïÖ;/+îÕg“Èô`9ñßDY’(Kˆò¡ +·~ØÁXBOÆœä̦ÔW£&£aÈzÞ0¾›:ï&’ÕÙ˜WùªB% ýßñÓšiÍÔ¤€Ç^ ׯ¸úú¤j%1‰îFéld#ÛÔòUü8Ûµ´“fZ*†à8šˆÝ +endstream endobj 503 0 obj <> endobj 504 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 505 0 obj <>stream +hÞÌWÛnÛF}×WL X:Ñz/¼"ÈCëKᢗ Vúbõ‘(™µDª$•8)úù‹þeÏì’ +m#I¢@a@¢–»gfÏœ9»Ö´žœ|w¥iÝNbK‰J)Lc²Ššb²š|;›œ\hÒ4[M´!…?|é4‘ÖPb•T†fÛ‰ŠTafi¶ÀƒÒ!ÍÞN®ÅÙùE2¥Ó“Ó'OèEèTZQ¯›|»-«5]V]ѬòEü:û‘¬$SÑTKG4;›LÈqîɤŒí _ù²hèªèö;Ê«`öÛ$sk/ãUzXeµ[µ¤ÓºêšzC/ë}WVEË‹Îg“(Ì°ùXF1Ic³,#¦J…ž†ØÈ$ÞƒiÂ{ïA³gÝKÐs /s”e„—a:0Åù褧Ê&žªóÀ† 祃i$‘ScTfd(L ELu’D™xŒ5µŸ¶Ü/: +b<ý$©ŒEáÇ›¶ ¦1&ÖÁQ¬˜Vcâ¤'Hg}Jû4þ +" ˜ Ä''Iùã÷ƒŸŸúþ‡ÓþÔÿñ4WË”kpiü oþeÌo6Ðw¹¾éPL+ZôI[4ÁÔZ©Å›À yE±”.H¿obœxcô÷gZã$µýô¿ò¹ƒ.·PÝz¿-ª®í;;ö@ПÚZªˆ—‰M½æ&¾p´XÓkÇÖ1íÝ1-9,ï‘°YÒ®º¹xS—ËyðÅî -Ž®¸Ç×ÚãŸßåÛ݇Q(ŠÏôG¨]ÓMûR:e˜¾¦3ö‡ÀÂuDÍZÈÄfS³ú´xËW"À-F‹»`ŠW­ öf˜ÏÄhK‡^î°UûHî½Ñ8©!ET.ߔﹸÓgã.,Ad0"Ѷ(õûúï6ÓyWƒæ¹#Á2n?ýmf.æýááÑ:Õî¸W|õ8›ˆ‹ËÎiõŒ =;ž8BNí0rÝ¡ÍYÞåôœÔ]Àe”Uá3‡ÌK¥”¼ÆÉI«4dükqrBÜ6Îå.ýþ±º|?Þ¼ï" So 0ƒ–Í›»“‡WeÓÂfF×­|þl¢ Ë»|ö(±1'ä’`'A•uŽrõä2ÜWeÈæKŒñ¿.«†üV[®_^QÑ4uÃ|}‘\Ÿþ`Ê¥3 +endstream endobj 506 0 obj <> endobj 507 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 508 0 obj <>stream +hÞÌSËjÜ0Ýë+îRj°F/ëAVí$)-Bbºiº<òtÊŒ]dOKù þe¯ä™„ +…(ëJº/{Ž„ Y¼½•°‰Õà„ã-h)’Ž¼iÈâJ‚„¦#RÀé× +œ\(höD`.LÐдhi ùA>Ñ‹Ë+¨¹‡åbyv׉IÏ56iµßoû ¼ë§˜ºUÙçæ=VÒs%îu •äÒÖÐ\ +3æ:m±”ϹK꛸ZÇ·q:|ƒUÏš¯$”X‘Ãr”> endobj 510 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 511 0 obj <>stream +hÞÌ“ÍjÜ0€ïzŠ9Jk5’¬Ÿc³IJ …˜^JfWëlÈÚÁö¶ô‘ú–É»)  +¥P ÖXóëof:¶z{ÐMÌð*€ Œ‚1±»lØê¡Ù1Ԡ衃—Fƒ7J* Í)Š"•š +-4_Ù'~u}µ °^­/.àv¤áC7¶‡Ã¾ïà]?§q×n’øܼ§LfÉ$ƒ©¡B‰®†æŠU1çÙI‡»„¾Kí6pŸæã3´½hY,¾*»e/<{,^[Xý<Op7ç}Ÿ¦ìtÝ°ÚFúy'kR›#H”² §¥wg=ñ‘Úþ¢'|™ž)JÂó/dHiÙT®ý •ñ ª­0–à|­PTµôÜ‹Jkµ´\ äATè}ù- t7‹Ùö¸™A8’> +¤ãi¹§½¨}nBA¬2V­?Âx*CáRÆwQS-,½s‘°Dþy¾úüÝù‡fÿ&êlVº`œ ¹/cê^íÍ_æ|óDó½ïfj¦áíÉ”FQ#‘š–—§­,¥Ð蟆×ë2¼Žö»Lï3´Ô" +endstream endobj 512 0 obj <> endobj 513 0 obj <> endobj 514 0 obj <> endobj 515 0 obj <> endobj 516 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 517 0 obj <>stream +hÞÌWÛnÛFú¨¯ØG² ×{áµo‰/E M¥}°‹€–(™±Dª$Uןԗ~cÏì.)Š–Û E"€(G»3g.çÌP²õììë÷’­ÛY¬Y"R¦1Ó‚5Ål5{;Ÿ]I&Ù|5“Š üÃC¦ ׊%Zp¡Ø|;°ÂE˜i6_à‹!›?În¼‹Ë+ñ”Ÿ¿zÅÞ5¾L¹öêu“o·eµfßT]ѬòEáÿ<ÿvv9ŸÁбA!Ó +mQdDÆp*L{ßùLœsXçßå¾áî‰)!ý ≗øR"S<ô”/½Ìd’D™÷_ðMm-÷‹Žù1¾ýè')½ÂþÓ–~ã`]QX´`¸ªT §&ôÌÁÒÂøÝ`Aù!> $³–ÏÉŸ/=?óØcõ|ÌTAÇ<¥WO:ñ_ú|³Ù°ër}ß¡˜ÚkÙuÑhÍ¥÷«¯@¯XòI'Êtq Æ<#:œúHeÄ¢8}7 Â.·§ýù'²ø l–ŒŒÆ¡à™%i`ùñÓ—¬Âñm-´ñà»ù?8,±RýµžUÂý‚ÜeÄ7É#&éùõ‡‘Ï(Kÿ‰Ï(/øŒ²ð´O¤H…&3x8‘8‰á`V_T‘äåºÈ—EÃÎóÍæ._øJ€fìºÞweU´¦"ƒvŒ0„¡3Mê!"g[E&ñóû6—EmB 2nëEO©#\NÑp¶`C±þ “#• ‘œtê'¤ókQÓ™E[®+vùÛâ>¯Ö»ò)Fíã£!Á‚àlñÄ#ïØ-E}ë#a&n LxP¦ùiÕ;‘N„HOËðÁ.Q2ã)Õ O¢ñ}=€T&2—Möx_T¬„6"Ð@+®RR?™ £Á±²Ž fËÊŠuHh¾Û5õ®!Õå‘Wæ]Áv9шþì(ÄÈñY*ž¦ÑÎêÐW¯ŒEê€U¹)|såqö¾Þ¬!¸ÖŒä‰Å54Ë=uˆ ‘Ø׬Ý/îYÞ«K[‘*‡1c'P!²ÈGÏÓ4ʲËmâ=¼fyS˜|KVW‹#3³ˆn0™jê/I³…³ïằஸú[F0ŽÒl›nŒ»*º¡¾ÔŠ‚Ëp\Ö°Eƒ—.òŠÝ ·5ÛÚŠI¼n Ùpµ‹·Cúb!Äq’@¬²eèô&?[ÔU——Ð;¼â¨ ûr)W.„¸ò5ä½Í¦¦Ü…Þ#Zd¡¢-]YWíWŽù‰ÛHn,ñ…v‡HOØûA8!iÒœôXLNƒÎ5×àÓÕ¾2ÀbäPPmX ŠÅ +å]?'Œi‰ýHBƒ±PñØdù0,^D?Ú¼>+€áüɼŽbÃÜ—ÑÐ{òduÞçÕ’½/ºŽ2|$­.eÔP’ª‡Ó(@ä¿ÀŒÒˆ6‚¬ ʱG‹¿+ ˆin|~ +†óÇ]ÙøÐŽ¦ˆ%ðÉPÈŠ‚A¢Å_… +Ãï§ÓÞytì‚î7îÔÚK™Ù‰ŸÏ‘Ñ, µØí³ÒucÝl]ßž†Z÷Öo¼7Çc‚2±r†Z¶o{EŠ²SÊšY8…¤­m¿¾R­hmrL¶c.¶c.C¸ƒ½P} uÔaßCáÐ7Ž}h}ììKÉCŸ…[Ï¦mí‚Þ Hˆ—ÅŠNã–¹0ÚôŸ]Å.]xCÐYÚϤȆlD/ÞæmNºLÏ}¥ ú[Gî0µèÌÇn|t6âJÆ.·¦·=fÛÚAÓ™éÆÅ%Ùºú¸40ºœÅûK*ñ~6Â1dÎÄ_‚ˆ¿¹ÈwÃä†N=öžŽ¡~" ÇèoýX‰:Â.ÚŽFØ—£ }™c¼íÁÍ Ýïv›SjÒš40mKb«é­"`2ÃìÙåm +Ý}S`#iÖûmQufÜFŸðOóÌQÐ|#À vÜ7ÞàBD +#£ö2¨(6ïC‘OeA¦ÎôyP4ÚCmú\~!¡jXŒB»›Åã­kÜ£dcêd£5ªŸàIâ&øÊLÎ6eÛ1¬VkÊ“8šæ“.+m}÷ Ó–Vì¥Ã(7w3³7ôw“йËÙ¾*ÙcSñI@¼½í”EÁÊe¸+áñ³…kX`œè}‰­¾@EXAÝ2êzX5õÖˆVMzi a…¦{Ì,#&èœÄ‰cò)ùl—v­I>[öd·çzϺššÓ˜oi[œn×v€XLIëR¯é´ŽŠ‰¢/ËîáŲ¡¬tO4ˆQZy— éð¶ù§B +endstream endobj 518 0 obj <> endobj 519 0 obj <> endobj 520 0 obj <> endobj 521 0 obj <> endobj 522 0 obj <> endobj 523 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 524 0 obj <>stream +hÞÌYÛŽÛÈò¨¯èG2kµÙ7^ö-¾°a+ ‚u°àH”†‰”ùŽä'ö/÷T_(’Òx‚F‘]ÝuêÔ©*Ž`‡ÕËßìЯRŲ$g:O™JXW­ö«W›ÕËw‚ ¶Ù¯„d ~ð!òŒ+É2•ðD²Íi•À +Ot¡Øf‹‹Dh¶ùºú1zóö3SX8 +†›:(ÐQEæª2wÔÊXi8þÄd"âµáY”Åk)“Br©XDI¼YfŠè.ð]׺ÇvçíÀâWŽ³ÞUîû®¯ãuŠÛ†¶ž&„˜”iFÑ1 +ŒD¸cüX±Æo:$s–/Ÿ‹?Ÿûü7ûßXý?~ÌFA¥<§$> +IºÈ‰ÿrÏßìc}¸LõH¾êâµR\D_b‰ÄŒªÔ÷äͤ%oŠÜ½NkÅ‹Üe¶½Âãi¦yvÉë¢:?¥ÝOoÊ¡Œ7¿$ìEhµÎ8eëÉ%-6÷s+´_Á 0Ò¹Õ ›Ò?yÞÓ3MмpÏ_ÄWià6+»ÃùT5{Dî"ú—x©wUÏlO&]ˆ².1k©·fòÜYë«m½¯«»‹e+O°•FÖÎö"6:zàŒÀ`ÃÓ#¶éªáŒX iÔ\-¶{¯±Lj'nÙx€¥n.öÉ¢‡ž!¸ˆJTÆ”þve-«ˆí)îYÔÚ[¬*·÷‹Õœ½ýGyz,–9CÚe¡æ¹ºå«0ÎtÝ“G CeÊèÁ}Àì>V’œ§}rPÞ憤ÜѱÞÕÃS\Уœý™ú°p/€(ÜißïÙ"u§Òљ٥Q QBtœ÷UL¿GIz1jR6ᔣø˜?"Ó±:Ú3;¸:Çø…\9•îVE_°’mA)4f¹is¹¸ÇáyÍ7@4ÍINO³²•XIŠþ„*þ­û&1¾ußAzKüó1›u‘ºTµú<µ*sCô…ñ¢?j>¨R:üçnm…7ž†…ìOsKk!·ê¡:!,¥5×Wƒ•oBQ8á?;ñ°<ËÑ,ÒÞê±&uæìÈHgÒ.EUšÆØŒ'0Ù§¶¶sm­+¨ìZ- F€ÂhŸ‡Ρ¬¨us|ÂQ±œ<‡^Ø“kHºL^„_3©ïT-ZpÿÔ‚Zí~¨‹è[:¡qV¿£e€VX†W}}hÜÞ)Jþ¢|Ì^öíÛ Vkel¡XÔ 9æ«<5¢lØ]j߸£€Ø„¨Ë+Ð)üþ¬4'CÒzÏ­ó]Ū½Cye¢íP[ÁŸH”ὡÀá çžFš’Ží]ydþù’ÔÀPÅd­Ž}i j"”&´*ØÛ¹Œ ÊÜZ^>t%'š»PÔý¹ÁQ<µ¶“蘖kŠžØPŸ°+¥gV´¬‰–dÉJVê%«\îda¸t©õÅi]Yድ|ŒIì<<É‚¯sÔ£¯÷•+ Äö}}¤èu>21’4(¬+‚^j滛NQ(¶Ö1*£€2ñ‚´ÑR÷þ±d–·K‰¸›ÃÝ»Ê + +4l¸È/=ªŠ¯îbÒNÍ |Gê¢ÀçËÞƒ{ÕóÚ¼V9Ç” ü +a\¢*ÿ$ÉÉ÷lÑÍ@È.> ×Hÿà`½+E@IJâÜX.LÃZŸÐÂV #ñ4L3Ùh“ü#“|ìk=Ü3×)j=i×|ª•¬!âùÚƒ~/«“/M¶.©,¹j@g/Œýè9šb\„þȸΘ¾¤ö•š±OÕ0_³7·«˜Ò³ý‚F'^Û²ÆÑ-ÃÅ™äÁsm†­ñ²"ÒÒSGÆñˆ£Bmv@ƒ^âÆH’ä:t~¡¤yrs \mˆiäE`º™JÞØÞÊK×ó…̦ +â+¸*–Ú;N²>Ï}hÅ49¨ÃìAcµ”Üuc³(<`Ä4:á“Ôò¦ç7œàô3Ê…á(´œ¾§,1é=:]UÐÕµÂG9ôY;ù æB´-%¼ßŽ˜<¦ÖŠ½%/< &ágÞD%úJ8Ò ’—i:bÜêoh* ròɃnJ¯›c:cO:’~š“àÅÄ÷ã±%ÉÑW›·TXì×p5>ÖýÐ{© µ[Ý"‡Ö–±ýX|<°óé9¤ˆmÌV—~6\}ßnkÄg·L_û¨¾*÷ã`bF))fc•E¶¿¡æÇΟ~nõ  >Y~CðgÀI;Û¯l‰R:çú.P’¦¯DÜU躎aÌé+§ƒÿ$ |»Yé\¡Wd2£yQSsÌSÕðæ¢<:Ϩ9”™òq?MpÝ÷hÔ?IFÁ„ôV¡gÒØxbQ„j*æ*êËÁòå©5‘EÊÑà¡ÔE~c/pºß«ùÓOY“ŠÆ°ç-¦–«ẆbL8 äP1•òy%EšÛN¥r¤”œ½Ê¢ç“g^ÆHϹ÷$ar|¿r²ªŽ]@q¥ÅIø‚ƒÕ ìÖ†£Ö‡WÛcH ‰:JZê_#QËõ¸,_k¿ŒÒ‹´7×…òÕ± Šœú«íB´WÔZ5ðgöú"µÎ܉¾´õî¦7ÚMsh~ íL{~Ênx}÷0Y±lê£ÏvýKàPuxö]³!u ¼AÀ¸Ê„VôöðYÖK05Õ–>f¤aô9&SÊvØ°¢–ÛÓæËã†\clΕñ‚³v8Ï»DbòLqx.P›–ÍìõyvîgPC Â쀱™‹oÀ†.“£ÛÀ<Ìu:I`ª|q!ÁDœ˜lOÚ¡5zA¦‹„^þ Ò@÷_Ürï ü-®óÉzav¹1ž÷„¹mðS\Ï +endstream endobj 525 0 obj <> endobj 526 0 obj <> endobj 527 0 obj <> endobj 528 0 obj <> endobj 529 0 obj <> endobj 530 0 obj <> endobj 531 0 obj <> endobj 532 0 obj <> endobj 533 0 obj <> endobj 534 0 obj <> endobj 535 0 obj <> endobj 536 0 obj <> endobj 537 0 obj <> endobj 538 0 obj <> endobj 539 0 obj <> endobj 540 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 541 0 obj <>stream +hÞÌXÛnÜ6}߯à£Ô`Þ)>Æ· EZö"/m[^«¶%C’ø“ú—’’V«¥v» +»òr8ž93EëÅû—­ë…âH“‰D!NP•-nG«Åû3Š(ZÝ,(Cþà‹&s†4'˜0´zXð‚‰0­®àPVßD'§gHâ¿?~÷W1M0Êu•><äÅ}*š¬ºI¯²ø¯Õ¯°÷+1l¤DKŠ©’hu²X‚K"Zßlàû"K¯³ +§÷÷_Ó«˜¬¢;tQ>5y‘ÕÎééj¡Ö +¶¦°T3nŒAX$Ö¥Û¤Û·„­cð?d¬wƒ°óãÐ0EÒ`#¥º”kéoiÌìû1Bã¥Ä:Òñ’1bi¿R­¥‰Îá~«JovýtÕ XÁÓ—X'°¹Ìÿ^Õy¼T`X_·QbcLi‹˜ ôaêÃø'–àÅ>mÈ{Þ|þúžiös¼þÍÜ)p…{¤=¢F)ñÆ5?Üߣ‹|}ÛÀaò¨† ¨³*^rŽiô3ÈË(»Æó[òjæÈ« u;ön’YÁ$ò6‡}¶òÑ}ÙåVºÎj´¡Û ?©´3¢Óâ:^ý ©,}*+¬ªƒØõŸ­ºö´ì°¾/oó›æsúâò2$¼c^îL + Ì£'“ÆneA©EZÐK—DÀõ½ZîcêN<»‡ 1¶ñÔ;‚šRu8"Js{$j.˜7>O㥠QŸ"º€_ɃøÏÓæv ï>zÀ[“ºÈ5—Â\n—œë½ NÇ Ÿdu¾.ÞXXf¿H™¯Ìœø‚ÒVæ©~§ƒ ¶.‰î:\2æ ¦ç +£Þ¹æ*‹÷¾ÑÁ‰¼–B¦})9À£¶!d:TJ|C8QL†.&ËöZpåŸT{¯ÍÝ%ODèC•¥¡œ#³x•gvþlb•ß'@ãÚ敘îà ú¼0ã‰'Õ2ØŒ *…Ǭt.רçZþœÛËp{ª;Û@ƒøú°~íÅÓ-÷Ÿ$*ƒ«Æ Qmçg¦[hF8t~v×Mô¬]¼sam1;ýÞdE—ˆ>\ù†õAÿH‹8HÍÝnGjv¾7{‘ž2•Üòv †tc*Å.o=À¶¹–ûºkëþ†èu('n±UùôXÒÍ=Ôuƈ¾òöGáÂÔlX¡juC":wž†ÎÀt§Eÿ=kÞRµaú!ŠÎE.,ó¯Ó‰Øw› +AêLº ¦Ð¶¶3=ÁONÏ&©b¸¯UŸŠ›œè¨Œí[ɇ´qèS* ´—€Scßò¶ïcÝq´Kn‰ƒG*¨ª«ŽÝ[ßþU¯­wh+/þÄï|9Rö*¨0ĉ­}UݽîUBØ +ßa¡{ÐÝ µ7í~pëE±4“N%ÜPápBC‚É©YÜ©Y\™É!.,BCL‰©YŒ™©YÔˆ`„ÿ +0©—³Ù +endstream endobj 542 0 obj <> endobj 543 0 obj <> endobj 544 0 obj <> endobj 545 0 obj <> endobj 546 0 obj <> endobj 547 0 obj <> endobj 548 0 obj <> endobj 549 0 obj <> endobj 550 0 obj <> endobj 551 0 obj <> endobj 552 0 obj <> endobj 553 0 obj <> endobj 554 0 obj <> endobj 555 0 obj <> endobj 556 0 obj <> endobj 557 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 558 0 obj <>stream +hÞÌXËnã6Ýû+¸”:0÷ÄeljÓ)0EÙ´](¶âQcËäL›Oš¿ì%)K²M)Ê£@ÀVLòÜËÃs"E«ÉÙå E«j¢8ŠHŒD¬'¨Ì&÷“ÏÉälNEÉý„2Dà¾haÎPÄ & %› L„æ(YÀ¡%O~Î/æHâÍÎfŸ>¡«2¤1æÁvU¦›M^¬Ð—b—•÷é" ÿL~KÜYbXK‰¦S%Qr>™$56ë`_gé2+Ñ,]¯ïÒEH5VÁºÞ>íò"«,èE2‘BÃÆ– +aƵÖ‹ØÚ-*†#µ‡½c0Ðj 3ÜÂÖb´¥C#ñžã*jWyä\ýš†\ÀÆŸ#4œJQ8eŒh†EÀC°pJ£Hêà +à·rë¦-Ÿ;*xº £v—¹ßË*§ +&n C°Ý)1Œ1¦"C™qC×nêÜøJ@`¡€Oã$rÈí÷Ñ¿}ß#§ý7¨ÿãiö¸Â±9RŸQG1ñN›?¯×è:_}ÛÁaò ‚¨²2œrŽið=d˜A¶Ä{é×☯‚ØÝ«·fɇvnçòÅ?»¬¨òmNvªVnu€š6öƒß2Ðkò×$ùÉÁ¸_gÛ¢È;ƒcgséâ\aÅ$b˜sBìÔïÛ|iˆ7Ëì¾¼Év`§ÿfwµU‡òÐ"D €óå±+!ÍîæEòü˜™é†. ÉIHo,FŽ2‚\ !cÄÞX¬±0;n¸³ø¡ãXi‰8nÝgû§¾?ì}hR dÌ)$A‰Y‹aeäyHkï*÷Q~H,Ûç fŽÛ@M3,wzO„7Ã*|òѤJKS Övãj?—PWè›Èd6‘7‹´@³oi^TC¤’––~5³®š °Å=&û â%¼+^eÓ?ÏDôŠ×Ä¥×ßCgûé˜Ä¯§»³ÛÛ<­Þ£^XÿQê*¯^¡ôkÕÛ¸:V½.¼çùz]ï®Eþœ­ò¢€M½Èâ¾»"â„Ecãf—–½D²c"M[·ÊÊ&¡TAóHÇzH Ü*¡q’ì”K2Àe×á7ÒyÄ9´R?xx: Þ./õ )\Ç6jsC¤DÚl˜­=Q+pìH±v»I`c$eÛZ7~Q,ß“ Få-¬íáLq’#)Sâ4$Æzeä<!"ÃÍpD(×7]ÚV{æZú ·KèÔ(´ZA¾¬ßxzd6Ž— @º,óåèpì®ðñÈbÒJ°—HŽCÒãL{’bÝËc×üØpŒíêËrûôXÔèìõ6•‘¿ +;s}©nLnc‘6’—ÚXL°´/g¾äÖW}[|ý|ž4ïé&{O¥°øÄCßØBË„°j׿0!A>‡Šm×ÏPdð5ÛÜÁKتÐ!&É\R-;MË TRP¥|]'xèê[µø–ZkW¿ ²ý1ŠX‘™\V·sÚË 3·ATQ¯Èf]‘Yr‡âò•5÷¥¸¬üUw\­¥Lvû“Þþ×[ÊÔPÒ“ÕèzÛ}¥ø%¯v[s Ú>ÖÎÄÁ<Èë‚&ãOÓž20”ÂZg[²è!Y¬Ëf­‹Úó‹yïË¥™Ä]ãò¥¸% +¶¡¹lܤöêfJ©€úW;s{[ß³ZÂk› Ï‘åÍxM«´¿Ím®p%tG( •i“žÝKâc{—«8R1ÇÐa íbØ\A»‹\‚âú«‡°ˆ™ÚAÆí`ç +˜Yľ¹y@h¿Ç×öÞÌ;$e g¤Ò v:ô¯ÉÒŒï +endstream endobj 559 0 obj <> endobj 560 0 obj <> endobj 561 0 obj <> endobj 562 0 obj <> endobj 563 0 obj <> endobj 564 0 obj <> endobj 565 0 obj <> endobj 566 0 obj <> endobj 567 0 obj <> endobj 568 0 obj <> endobj 569 0 obj <> endobj 570 0 obj <> endobj 571 0 obj <> endobj 572 0 obj <> endobj 573 0 obj <> endobj 574 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 575 0 obj <>stream +hÞÌXÛnÛF}×Wì#Ù@ë½/ùØøR¤@Ã&ò’ôA±)UµLŸԿìì…‘K‘Nà 0lÑÚåÎÌ™9gg—¢Íâì·[Š6‡…âH“‰D!NP™/Ö‹÷ÙâìŠ"Š²õ‚2Dà>h¢1gHs‚ CÙã‚À*˜ˆ”£ì(ûgñ9º¸¼B'èüìüÝ;t]Æ4Á<ÚoÊÕãã¶Ø E•—ëÕ]ÿ™ý–¸³Äp*%ZRL•DÙÅb Ká×fµoòÕ}^¢óÕn÷uuÓ«èÝ쟫m‘좗ÙB1¬„¦°T3ž¦)Â"1KÚ mÜvBÇ°~w1¸„È\R‹FŠ`P$5ÆSª½§\;OÿXÅ\@Ü/ˆ/%Ö‘Ž—Œ‘”añ˜Âï’j-Óèà»rï¦Ý?ßU(Vðô)Ö —»ïËÃ6^*˜¸/ ¾6PbcLiƒ˜q#õnêÜø7–°‹ü5N"·rûÙûwìsæ´·Yõ<Íf+œ˜Ÿ¢z”øA›¿îvèf»ù«‚dòè 8äe¼äÓè[Ì€—Q~ëÊ÷Å«™-^Ô­«·%³‚ r[ÃÆkKdb<Ž>æÕ!Îþvõå ½Ï7Û¢ +›‘³+éx«°bðxD[VW!³«}ÛoïÑ}¾.oó +V¾­Veuþõ¡oÀ™þ™™F$6y ³®Šìå)7sMlh 1ˆ +ŽSà­j'Y +® ˜ ,wa‚SÑ—Ø,Å1IûNÛð­ñŽµíF¦€Â˜S*Ð+*ë„»wkÔzØcþaˆË$nF™£ÌP‚Ê4:vŒ‡Ò80›bÉú€H,º€t ~.]n¦Áèeq.}ŒÐg‹ ˆÀ¢ xß`ÔŸ{ÏÃó ^ÁGHÌ€ü>U/ZÂv³UË“4äj ”sí$V¬†Šº?î x9¶,^=ï*Ô ¬Ï¥èæy—Y;û¥ƒ÷)J‚eîkèÎ×Z¿¼:lûâ"__ºm‚Ë’èÈœ±C°ŒqX¤XÀÎ +ô4UëY¬,0mÿÁûýK9ð–Toã +Ç\µ‘O†7ž/¡)šŸ¯~UØt¨ußÛô5 q°}Ç +iUúdBq¥BQK%±œ“ +ƒ€kH“ÆÐÕãˈCoÀn›Ï™QÑ ´™ýœ´Žzéæ¤ÑéYIiÉ”+Ÿ¦ÌöæåjššB·-  £éÖÑiÞÏ1Úß1¯·Å W˜§Pó’pëwcc'°E¶±ÌîxJÇ¥gÐ@pè؇’sºƒè:<ÍÃPçîà#0t¿]pBÑKeÙÞièx»À¥ð¼itÓ-8{Ólž¨œ9í¼NVoY;¨Þ¯˜ñþ3:ÊÇAûÀaší‚ÅÒ8:³RÂÛ¸r +y]îŸÌá@08ñU[ îÔÈüæA¾®{pûÿۨ¤&ÓÌçFƒŠ1*”ˆW•)‘§ŽÊ«„FÐcÌà„.ÓùÅåÕh=˜IÜ]­}(Ö1,¢£}lîHW¶xIM/Í#À£2wÎþvØ‚îMÎS(dÐJÓ²sÝ\> endobj 577 0 obj <> endobj 578 0 obj <> endobj 579 0 obj <> endobj 580 0 obj <> endobj 581 0 obj <> endobj 582 0 obj <> endobj 583 0 obj <> endobj 584 0 obj <> endobj 585 0 obj <> endobj 586 0 obj <> endobj 587 0 obj <> endobj 588 0 obj <> endobj 589 0 obj <> endobj 590 0 obj <> endobj 591 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 592 0 obj <>stream +hÞÌX]oÛ6}÷¯à#µB ¿%>®ù:`C}i÷à:²ëűÛmŸ´¹KR’õAÊJšCØ5©{/Î9¼$C«ÉÅoS†V‡‰(£9’¹F‚¢}1YNÞÏ&7 14[NGþÁË3"8Ê%”£ÙÄBB¥h¶€/”I4{š|ÆW×7H‘]^\¾{‡>î–w«ýüáa½]¡Ûc±_ÎEò×ìwÈ$|&NŒR(e„i…fW“BRYÆæØ·Åü®Ø£Ëùfóu¾H˜!ߣÛÝ÷ãz[\ÐëÙDI ÓDiD¸0Æ "sÐ-Qs’éjÖN As ±È7K¯1ƒ`Pæ +¶T–•¥ŠÌ—úÇ<þŒ8eIªH†³$åœN$ Ã2IY–)ƒ?Âøm¿óÓî¾/Ž(ÑðíS’å°ºÂÿ¾?¬“TÃÄÝÖìVJ-bœëÌBfË0e”ù2þIDà‰„¿¶Hä#Ÿ>;ÿ}ŽœößDýOsoAh’Ûw@Ë·@uG?™ó×ÍÝ®Wߎð2>€Å>I… ÿH8w¤¢~IÞŒ;òjÐnÅÞ“š5 €’Û¦Ž<Ô—üq¿{´I$ŸÑ‰n=â«b¹Þ®ëÝöÌþžÌ~ñ’Pnðz{g¼¸Q^èšh®'BôdN\øÇn}‡îŠå~Zm‚\~½·qš%¸Rñlç~‚‡`ÊÍvöüX؉ :5X4¤•+ð‚<€Ï¸LOð Øâ¿$6”$¹ê[+çnÜfn•Xe¯}-µyŠTðÙêiG|[¬*Ìü²*Sgªø=Œo·`š«Ù¾NY'N§LÓç›çûcÍHëÏ«bÆRÁ_X˜Ä ai F “EKA¨ñ¯?„e»Âa0UÍV´©üÒaš<€KZ¿&ßêé!”˜Û+øB6Snˆ˜`ƒT¼“îqNtp„tËÔ(Âk‹Qbõá»ZÍÆKUæœð¼ÖªvûXT«2µƒÄšEq;'U€ŽWJt¸|Æ·»Ä:~:”mK„`U7d¿tÑÙ=ñ0?#„‹Ì¬ìÀÈØ,:#9À"ó¾ì‘M:5ÒePÕàp×ààéb¾E—ßæë&|ðŽ^θX CßÆzM‰¤Í½p©û^Öµ¾¦&LîXWºZ^ïjÐLX7lký‚ÇZÛ0êQˆ´®%fu¼kuÍ'BðiaÉ©ˆQô£\PhÙ''#&êtÍäoOÕ“õùGýoKy˜¥AGl¬óœ- +&_`‹HÔÏtLsŠ»ÓÍîwqp–¶£©öº²Ž™ž¨ÛÊfÛM WÌ$ˆ\¢¦Ñî´q¯ h:lH°­S¢Ü¬ýêZ@.:¾µ7:–ð×ðšÝÉ>ü¶Ð–ƒ¸Jé¤ ¡CÀfŒäð”‚FiXåŠmore¯DòÕ]Riˆü §æNÀ™=âõl‘NŽjüÕ ž>‹õ|ƒþ,ŽoÒœµH;È„w±Á€e2*ô^ÀÝȹ&*êF¹#¨Ç5$툠á‘ašù !4„qò×o2 ,Ó}–Õ-gv£OyžXÛ¿AŠ½p?w´u†¯‡Á¸`mmÝgnUC'š(µºzemX­ošêQ¿é_]ßDû;Iø[ ÛeA2¼Kì äÃÜ^ò$)³>.0 u´Wºåå«;•)[תàý„;—¦+Þú^À÷h–h`~NR{ƒùxºàÕi{þÓHêØjï¥ýí. ÁcOˆ~ˆÈ¬†Ý 2{à®÷Â) *Á$à퇄;ʇ†Õ±§ì¶yŠ +vÀ`À’¹ +endstream endobj 593 0 obj <> endobj 594 0 obj <> endobj 595 0 obj <> endobj 596 0 obj <> endobj 597 0 obj <> endobj 598 0 obj <> endobj 599 0 obj <> endobj 600 0 obj <> endobj 601 0 obj <> endobj 602 0 obj <> endobj 603 0 obj <> endobj 604 0 obj <> endobj 605 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 606 0 obj <>stream +hÞÌX[oÛ6~÷¯à£Ø ï¢0ìaÍeè° E£å¥Ùƒê(®Gd¥m°_´¹sHJ¾I²‹bÀ`Àº<—ß¹P‚Ì'g?_ 2_O¬")wD;K'u9¹Ÿ¼É'gW‚’ßO„$~p.eJ’TqÆ%É'¤0®3EòÜp¡Iþeò!¹¸¼"†9r~vþú5yWSá˜JVóºx|\Tsò¶jÊú¾˜•ôÏüФ‚&É2cÈT0a É/&SÉu”-·d¿/‹»²&çÅrù±˜Q‘1›<÷«çfQ•k/ô2ŸXÉR ®Yf,aReYF˜v(Ò;éýöƒà:ùÛƒ€ NP~<ïpÉ<AíZÐR‘FKU,ý­ Jƒß/DrA§†¥IJ§RòL2(*C§"MM–¼ƒxW¯Â´»çYC¨…»š:p® ïëõ‚N-L\Uˆ¯w”#`RÚC3²hÁŒ¨ ’jøG#I¼¹î=]OœößHýOó» ,s¸<î·{!ñ:Z.ÉûÅüS›©’5DÀº¬éT)&’ÏTB\&åk™É›JO^ ¡{ÕŠe.¶¿ƒé@Lfõ&®¹ðq̓—_‹Ç§¥gQ ±.n7¤'@’ï±eá ãCð”*É=õ–ÝAy²\®¨€¨O¾`r(©Âû¯þPeIÖŸÚq*áMðÙâ3iVdV—ES’‚¬ËÆÛ%SGx—BÒh‚JU0áù‰Ô!YõŠ4`Pí3Š_.8Ó;ËuëAQdVT䩨ץ_‹ɯœ‚áNì'0Ó2ÁûŸÜ/À£¢º!°§¸~ÓXþêæê@wôU?´†¯ÉKÈ{«grWÞÛ¸ýgW&ìJÆ2rÞàÎhȲÛ©·vwQ5€µIóüóèmrKÉßÝ ­Ç<Ã1ç]À‚«·¿^¾‚}´É~Jþ*J!¤¦H‘ƒ×ÏðH{Q4ù‘ð¯\pɇ·º››0Ƈ>j¡°5>çn€M®›—% «øô8ÁÓ7ySÎUÌ +‚#:–Y ·ítî§~^-î$y]ÒÐõuÙ•×MQ7çp>š~뇱´ÍËÞ_UùËS‰£‘Š±\`XåÆò®Ü@hn\•™Å@´\2ë,j¿¥( ö"3D2¥úŒÛ±¬Õß¡ Ň)%V3îvÃ#â؃ßÕo¾D´v ‰hôÒnÝ&DºÙ= µØAV‚Ĩڮ#—1­avÊÚ2¼‘ÍüæîÙ°«|hDd$Qh;Z–]VwCÅhíÅ–í@Óq®CäÖ àIìCÓÆàH $(˜ ”ÙGC3—mQ½Ž`á("„ÈÏ©Ü÷$ð7ûT­–«ùËnê9 +K^¶ àrÝÔ¹ýÈhŒ¦Èë‹Í St–öF“ÁÍü½x,OƒfÊ„ôÕ0‚Ú,„J +¸HžÌàÂEò€OP¿ÁÚ¨7û°ÕÅìá0ȶk§ôáe…,™13Š—ÄfXCû|YšÉ­ÈÚÑx<œ¼{ÎKû£Z4ãÉf¿øq.VÏ—åÒbHÈh®ÌÚx­U'1…;˜r­½ ðÅi`ÆÔÉz|DZ7‚÷Õ8WF2òM §…UÕSNLeâ"Meò›#mcíiðÅêøQè7 &#“xds* +$ýÉÃŒBh\ èu§^t—B¤Ž‡âXîRf§ÊCÔœXåä> ÁÈC3lÇÍ¢Xg7u”›‹b»{ŠáÑ^JI_·Z)1ÜJ))û‚˜1rcã ”ìPªª„cMŸÑã»t¡ò ÃÄXSÍ‘Ó0+_èû·ý7L$± òÔì#LGFúóþ–鵃LÙožFúÊá.JšXû6mT6ÜFIƒµï±®“Jû ³ßE‰]ôàÌ«T‡^ˆU8<º†“â‰õmuOAJ +e¿= 7ö:ƒ£?ÕàÑ9žÜÂ)8èÜJL-V¤O¡‡Üî;[÷q hÇÎœZ8|%/tŠ_ž¶¾²)bbÚB‡Å=+ñã`ûÍj€Æ!¦ÓŽ©~P`¡èw>Í™lP¨1ÓaïT¡Ù;ÒÎ ÔF Ô TÃn+=h¡ÄŒÕù¾Jú±° + +endstream endobj 607 0 obj <> endobj 608 0 obj <> endobj 609 0 obj <> endobj 610 0 obj <> endobj 611 0 obj <> endobj 612 0 obj <> endobj 613 0 obj <> endobj 614 0 obj <> endobj 615 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 616 0 obj <>stream +hÞÌWÛnÛFú¨¯Ø(°›Xë½ð²là‡Ú²Mj8J_ª>ÐÒRfM“I%u‹þDþ¢Ù™%)Q’#Åh Äå^f朹ìP’ùàäõ;IæÕ Ð$†x& ZÒ’ÁÙxpr)‰$ãd ðƒ‡4!׊„Zp¡Èøa @ +^¤Éx +!=2þ8ø™Ž..‰Ï 9?9ù’\—L®i1/㇇4Ÿ“«¼¶eO-ûeü=hÒ&Å#ß'CÉeà“ñh0‘Âke«žìÏlIÎã,»§LF< ÷ä¦XÖin+'ôb<ð½€ÜW:Š"Â=ƒÄ@ñ0èÖ;ýu ™Ñn ¯ˆ‰EÏt, ©2lMÕacꛘi€?%$ú<¤!*%"Å=ª™¤Ê0ô#z ˜+‹fÛl9­ `ô  ³Í|Y¥lÀÆ"G‚RŒ)„HšµfÙ˜ñóA‚bü£‘¤‘¼~n½~îù…Ûþ©ÿãmÎ :à} Z/ˆ`+'þ¡Îﲌܤ󻜩i)PÙ’ µæ’~` +“ÚïB¿ ÞP¹à w×ií7Éñ(h"ÂA’½uZ»Œ›Â‹3ÿä„@ˆÊÈpC¯ò´Nã,ýÝ’ú΂èxÆ DKNÆwiEÊ&É]\Á4© 2…D%IZV5ï…¬Àôì™MJ ›ë °WÝÀ&=¿ÙúßYÌ Š*—ÞI…ô¿'%Ìösÿ ñp6l•ÎóóÛû LºáÙ„Á|£qübcóØNïò"+æî@¯¨ÈÍœufnj4\䳞˜Æ‰Ï¹.‹…Û½€-ëÇ‘M`zï~ØÒép§`º|l'?wî­­Ýžý=”sÎÆ¿¶„ ãm³vcçiû}´Ï\Ñ…Y ~ÃY}ÆÁY?.lî¼ÞQàýÌ’¤( Jlƒ|ÁáÂgeošKôô)1z®òŲ¾Ä ÉìÛøÁ•G6aäô”xÀÊM*r̾ ƒeš× :/–Ù,ÿT“b!›“Å6Ö}ú¦ú4™ ÕGÇdmQOy«y3fhiëe V*dˆî 0‘蟸V©åˆºÊ? î¾É¥E\b^¯”—¶"§Ä¥WRâµÔ“Î$̆•UÇ@܇"½˜0\1£¸Ž7‚Á‘ "Ñ1_7¬¦ /ÜÆ,¤¸[‘8'¶,‹ûùhLX ømØ » +8Ø€•L³¢² +Ëý…¡S Õ«µˆˆWN庳1Mgcð.WÆoï̇ÍÆC´·ùûª×r(÷/mI7U7³î›P:46`Õ V`W4+;­S¸Õ¡dLKì +¸¢é-x£"ÁohÁà/Ë +&á„l§Ú‚[}Û>UáÑ­ qk ŠUm§_5¤ì˜mÂkRšâp–]ëņВÄs õå23©Ì>.lw9I.H"á-$ÕÝ¥´Ö©¤k1·õJµå T-@#´SFU:<„]™gaïpØýö‚ŸþÈ}ÚÁ·øÛ°EÈCC¤Üß[ƒë;*%ªÄ‘Švp‡Äžf<¢æv =ÀÃn7o{û¼xX¹Íë=>–ƃ¦_zÚÑ=.æ”êë9ìÝèÂ@?3²û'VýÖ7quÿî.MêbôwH1àCèƱï1+C¨›tC^)ß}[ø~‚ìò¡¥Âõƒº¯ µKJˆF&EÃÈ<ƒ’ÕþmçŠå-sÏöå¸ÔÆ»Ä(n›§@ø¸¾©î` xâ\(]ÿBÀ½ÛáZÍöAÅL"øxôöeµÆõm5‡¡ÊP# ƒç í®>N ¯§6Ë^7WN@ÓY´·:rŸÌRKüNØS ®÷Tî bOuòÿ`Z—îP +endstream endobj 617 0 obj <> endobj 618 0 obj <>/Border[0 0 0]/Rect[213.12 208.26 268.2 221.76]/Subtype/Link/Type/Annot>> endobj 619 0 obj <> endobj 620 0 obj <> endobj 621 0 obj <> endobj 622 0 obj <> endobj 623 0 obj <> endobj 624 0 obj <> endobj 625 0 obj <> endobj 626 0 obj <> endobj 627 0 obj <> endobj 628 0 obj <> endobj 629 0 obj <> endobj 630 0 obj <> endobj 631 0 obj <> endobj 632 0 obj <> endobj 633 0 obj <> endobj 634 0 obj <> endobj 635 0 obj <> endobj 636 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 637 0 obj <>stream +hÞÌXÛnÛFú¨¯ØG²‰Ö{ßåcbÇAÛ45l5/IQÐ%«–Eƒ¢›ú“ú—ÙåM´EJh +DÊ;Ú™33gvv8YNNÞ_q²ÜNŒ$–9¢œ!’‘"›,&og““sN8™-&\ðàÎR)ˆ•Œ2Af÷»P¦If7ð¸"³¯“ÏÑÙ»s¢©#§'§¯^‘‹"æŽÊ(_éýýj³$?lʬX¤7YüÛìGÐ$ƒ&A­É”Sn4™M¦°%SÕÞ¢³÷e–γ‚œ¦ëõuzó„šèŽ\æåj“mý¦ïf#¨5ÍPm2IB•Ã-=HÛ/t +ûwÁ3( ý" oü’xo$•«€–r[Y*m°ôç4– +p?Áx<ÕÔF6ž +ÁAU$cŽ_¹µ:‰.àþWäAlþxS’ØÀÛ§Ø:—…ÿÛU<5 ˜oп(C‡ a,z ÍH*3fükØAÄ +>ÑHvnŸ½¯ûžŠý7»þÅ|¤¡cÀª(0ӣĿÔùf½&—«åm Á”Ñ°ÍŠx*%åÑŸ±^Fٜ֙_%¯>y P·eµ \KhbB&ã k:¬fh>CÓ£ïâÙ-GÛjàlç7žªô9šg‹â}‘?>œ^ßof1çšêèé!«Íó¿Tà0¹¢ˆgXC<0²ÕÄÁõVOãZTä ¾:<¤K ‰°Ø¡dUWöbÕ’ba¹?g#ß–¤€+Ù2+j¤‚ÉzH5§NRçËÐ~¤×w5Áÿ+.ÛgH£â¤Pч„û?få>á Ò' ‚¤j¬{‡ ë]uµÏ¡Ùr^é1hÌ6 {ºF¾Ÿ¬óÍY¶@é(}\wÑ>Ë[æ­bøØMØ Ö{*G!›ÈÚIš¸Ã!·ò^¿k!_ÄP±D”–·°¢V;8Aá€Y‰àây&zÊÆS׎5ü¤AØÔ˜«MŸíãÓ ¦.sÓ¸ÞU0ÇQhÒ•º­|Ÿ›ð¢Èø©ýÑÉA† +Îp½§i©C +þ¨ŒmäŸ!ÉeÈÕÐííÏU‰ë»jÆs5©’#¢Y ÷^fËU¾€¨$ ´{ÀzGÉ7€g’£òµ•ïò29v²_h©Œ/žPvBå/ל¾–±\Õl ¥ÒGåj+ïõ‹åÕMº¹¹MwŠë£TÊ'¬´>œû€ +¡|8wuñºÉs° +zBÓ$âc€…<mîŸWë¼èó”à˜³ÐÆ97Mçp½«â!dì¸ÄmäÛ”ªp–^Ö àÛ «ì–pœøÆVP3„&Xoõ %®A)¡=>&q[ù~ º*ŸÖÙv I«}ÖBµ +¨\°ÞStXLÕZ}Dç^ O›{CÀÀÁ…;¶ð™ÆðáÇ*º‹§ºãÕ÷€>£*ãkp½R?ܱ6WJ~T +·òýÚûi•T])LܪÚÏTß õ”Œ–ÞQÐ(•Á|¿±ý[llóÕ| ±•pFúfA Ö^žàd¥¯llÝÅ×ó3ßû-ýÀpÂSßgE9@x»Î}2Úè.…¢ +¼XBéÁg†c"[g§¶z¾à'T¤š WM>éª[óeæKšŒVñTÁÖ’á$ßX´%ó4žê¨LÉ¢ÈïIy‹ß2R©Ò•*`‡ #NØÞ~øåô§7ïß]í„®A²=+áMaè¼·eZf÷Ù¦$« ¨ËÎù«u†ý‚‹hP ^Т³«A%>ѯÛÌÿ8-–¸šÍ„iç2µ”ôã1Dš-V›lŽzQ|*5Îw§Ý¡/Ìs_@@uÇÉFòS£ë 8ï{æTñ~¸Y§Û-)sHGqÁáaУ}àsž–)%ça9.HãÖEÍlV Ù>mÊô/À민~‡£EœLÂivOx¤%ô¢$½ÎË&»€§p²Ƶ¶ÑfÆó@&ºcž®Ù¤û‰ðšl³ŒÔdо2Ãý|Ùxªºº›µ¦lèH2Ž¢,8Ô1¾{(L›ùrT§_0Z£e0•4òõxõûóô·t³|ëÈe%àÐ>ŠlÓsãÝÃêg¼¡AeU50 HM%í0ÜמèÊ0ˆë=•kIe}öT'ü +Ø5Ïb…ƒ™J ‘/Q˜cR¼.àD™átû¬*I§é~†Ãö;þ½É~SAâTI_å¼›tpkT>=ìX ¾×ÖuYòÚSâ 6]½³+&Þäï{ºUÂÚžêÏÑõi +(ñÜÉ^à87É‹–¥†,–gÀ¼-ÁRj ”îZý!sªkÁ—M€¼þG€ši¨t +endstream endobj 638 0 obj <> endobj 639 0 obj <>/Border[0 0 0]/Rect[145.02 405.24 191.64 418.74]/Subtype/Link/Type/Annot>> endobj 640 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[444.3 172.26 545.7 185.76]/Subtype/Link/Type/Annot>> endobj 641 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[478.26 572.28 549 585.78]/Subtype/Link/Type/Annot>> endobj 642 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 558.24 147 572.28]/Subtype/Link/Type/Annot>> endobj 643 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 644 0 obj <>stream +hÞìW]oÛ6}÷¯à#¹Õ¬HŠ”ô˜4ÉСŠÔÛK7 Š£8Z+ä5ùIû—;—¤dÉqºÛ€= ,E÷ëÜ{î‘b›Åëï>(¶éΰ,ÉYš;fÖV‹›ÅéjñúB1ÅV7 ¥Y‚?TžI£Yf™h¶º_$°"“´0lµÆI¢R¶ú¼øÈÏÎ/˜•9{óúÍ·ß²÷­P¹4¼Ù´åý}½Ý°·Û¾joÊu%~Y}O&xÒ²°–-•TβÕÙb “Imë‰í˪¼®Zö¦¼»»*×BÒñOì²Ùõõ¶ê¼ÑóÕ¦sÒ:&µ)Š‚É4'ƒ>E§eæ†ûÈ]ÂÁô>JC•1þ&R Sør 7Ó|¨…ª²ªÉB¨?”¤Hü‰éD‰¥•ÏÄRë¤Ð2åF(ž‹¥Ê2[ð÷8Áµ¶ ]ïÖ=g?‰,GvU¸ÞvµX:<Øl©À>Ó„*¦µË¨dFÃHTãaaA‹¿$ –÷ǃ_:~åcÿŽÕÿðcãdN$…ÄÌÄßôyrwÇ.ëÍm0 ï0]ÕŠ¥1Rñß…Æ`òêZ­›7Ó¾yf÷ c]æ&#½ãOBì'˜`ƒ®Ûìî«mßÅ©uÁúO+K¯ñþéA¬~ÛO¶’Eá';ÕÃ`c¢â´äÁÉ¥X¦2§NÇo¿£†Ï9RÔÇ­¿Ú±þ6\¯X ÂV¦±ö>x3ϯ«›öô®Y*7Õ›«O«§‡jš’±¸izÕ‰SÌzzE ø+öù¶^ß²z{]¯Ë¾B<> BL÷&Ô},Ü–=¯Ø•Ðà6~'P/Þ¬…Np¤¸Ø:2Y¸r[j'‹äš!>ãû,BÆKŸÎ[B#°9FËGšH‹t_£«XŸ0SÞ{ç&âUõ;‚GÏ%{hj"vÖ7øgŽO!c‰GPêÓcN3©'0Xä:öëú–(XìÚ`€ u„D(¸Ì.ÖSκݲû¦­×0z¼ˆÉÀ½ Ke_7ÛW¬«*6Eû$÷¸ 㔂ƒµc6Cƒ2—Kl +‹}²ß ûa²©“ŽuašÆ3Êsi°ÕÒqÃQ¾&RÈý¼#NÎvVþšvÒïe_~Ž ½u H ËÓÈw­ïYþ$NÝÞÜ°hg‰J…¾73¸ÆDÂæáXÆ׌â‘ìG¼æOYÝ”®‡-Š¬Ý·Fx]ùƒÇ-péC;Mz‹FÉ’ÙãBóab«uõfÂuÐH èaóg´ÏvdJÀQj€Ä"‚ˆè´¡VÊø#¸,¿Ø®„Íqòä)êá@ÓÌh6Å–(òhìn—ëên3u% ¶:Q»Å=Žß.Tð¦mîCf#2C)þšâìíùÉåùɬ/R©ŠƒÊ»ý˜Ýˆë1;Þ©®›úŽxš~-m~GÍOv*ÿnÙƽá'Œz"ÇOS äÐÌfL^Ÿ6/%!GÁÃÖwe×Q«´Uä‹Œ*ªiu¢¢-KÚ6X¬GhQOÔø1µü%I,Q˺§m_>zrAärÑž\<yvaå”éXÆÔ ëÔ†/#¸Íô¬^ƒìÐ>(ØI[y‚ ™ZZûi’Q¶Ä\šIçç÷9³©BÑp¤I¥ÂÀ!Á_$“ˆ-U×ò!×4$` ÒÂÍ©â#w~ñšªó®Ünv´/+OÚ. i\m¿T&x^ºù”/u.3¶Qôÿàñ [ +yuO'¤þ-Zb íûû#h­G' Ç!,âP$ÂÏ<A™ X$Éú<8‹äo¼AKÞK_«ƒ ©OÍ =¹Rv$s›Msæ¯|/€ÂL±›øDåZM’Ö·×ýd2þy-;e‡lÂä~¥*/]w?g<Б²/«V +ÍêQÑšÈì¼³|®W©U(Ñ@o c›;sn0B¼XyWå(Oã‡ögRÃŽ§C^Q¬BR’Ñt®©å¤Mé(…æ/KÔyý¯(ÿÈ·DðD›gˆÔ4ÐÓ[!‹¯Ð§ÓM–õÖ™mçŠC§îWÉD¨6áýÇQ£¦©Dx¨hS}‘ÊÓÜÁ©Ì‚@ÈPÅ(†4fJTq‡V.ø39j°EòçÈý¥ÕÿËQBîOgµƒö +endstream endobj 645 0 obj <> endobj 646 0 obj <>/Border[0 0 0]/Rect[220.32 615.24 288.3 628.74]/Subtype/Link/Type/Annot>> endobj 647 0 obj <>/Border[0 0 0]/Rect[479.7 189.24 549 202.74]/Subtype/Link/Type/Annot>> endobj 648 0 obj <>/Border[0 0 0]/Rect[63 175.26 123 189.24]/Subtype/Link/Type/Annot>> endobj 649 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 368.22 231.66 381.72]/Subtype/Link/Type/Annot>> endobj 650 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 651 0 obj <>stream +hÞÌXÙrÜ6}ï¯À#›0øèÈÖLf¼•Õ“'•¢»Ù­ŽÔK‘ìxô3?19çhn-KJy¦’RI‘ î¹Û¹‡-Øzöâ/W‚­›™V̤–eV3•²ºš­fßÏg/.l¾š ÉRüá$¬áJ2£RžJ6ßÎRìÂÓ¬Pl¾ÀE*26ÿ2û½z}ÉrnÙÅ‹‹gÏ؇:–«h¿®Ëív³[³vmU¯ÊEÿ<ÿ,)oIò"ÏY"¸Ð9›¿š%Ø2ÍÂÞr°÷Ǫ\V5»(oo?—‹X\G7ìãþØnvUã6}=ŸiɆkšçšq©Š¢`<³´¥sÒùíÂuŽý‡Z ÜCxÞÅ¥pÑ(föB*L@ªŒGú¶ŒU¿ï˜LEœäÜD&N¤L ɳHÅ"*âD“Ñ\à^½÷Ë–ÇEËb«ccá\åï×Í&N4îw_çhJ“RŠÁ(ŒTxÿ‰sì ã GÉüÎýyòï×ÎO\öÿÙõO¼ÌeAin)iÈBª'-ñ6_ÞÞ²›õu‹dª¨A4U'JqýKôeT-ù©òCñéŠW£uÏ»ZñÂúÆvWX®MÆÍ©¢S{Y­êX¡â.öÛÃ~WíÚ‹Ï71Y½ÜÍãÜââŽjWF‡I3÷´A[g†S'o}O;¾ +b2ó±jápcSÅàC^*‡†-˶d«z¿eíuÅ‚¥:îC&‘§Fä¾ û4¨. …kØLvüfOüfÃXˆ“Œ[R?8¶Gb:ëÈAá¼sw›À€öŒsž™igw48ª?W}#l‚÷uäªo=g_®7‹kôçr³+å²u}Zð<²H7ÒÀsÔЋ“E¶èu«…nu°t,Ö„Á:&–AT~‰ÎD¥‹´æþ¤’Ûi¼÷„ã¡L '¢KwÐG +<Ö"ðÀã%;ì7¤äi.”“胆3ÒËøǧ¹o.wT:¦á£âè@,€ª¢ˆ°©š:ôßÞ=®Ùv_Wn¸8¥îÂÚbëÞpÃų»O¨Üˆ{óðøø~(2¦LŠ1jÇWƒâž! 4 edàÆÞËN}`Ø@ä€i "­ù$¿–óÕüÒô}(¿iÕ|œ[I™E^)XU’EÇš}Ž%I¼4¢‚߯غ3AüTÇp˜æ¸ÏWäÄŒà­Ú‹¸Mƒ¤4-ö"Ø¡k˜W°¸CZZ_]ƒR;MGÊ¢Éïo™~„/«f³Þyc†;WÀ +X[BïR#DÕN Û^ ¿-ÜÈ£›«ëͪťŽÞ”1FÀ„ ´UûGZ9Ç}záA©,I*Ká‘,Ócì´—Sþ9̈Çrv.?'ºèíË«¿_ýõ‡Ëù¸vÒ¾%{@¤:ÓÊ(‘V$L9›ãjŠ”UU§ïŒ×w ³îÕ@…‚¾Æ;é;j©ó·>c% +¬¼MjnÏwÛ½)·¥q㹫k\xñ²ŒìŠú^6ôK{,oY°¨ñ!†Â\2§‚mäç,…-¿Oðw<Þ‰h|Ä‘|'õ¨0Zvkêÿ>ÑjHGƒŸBˆýi}íø x눟~£®èF’ ³ÕÉsKzÛŽe8uºM „O»mL·Wá­Uÿ›2;SÅ!þ¯® Y àÌøz…pB¼Çò¼ Ÿ|Î)]&ŒEÏû.»5ÐÛ7Ìõõ¿Ãþî%ŒEú»ËñÞ²}TÝçÆùš°§–Çá)Â~ªéÑuÅ7ˆzA_;OÐô=OŠD‰wU݉|ö{%þTãK¢y¦rI]&ôÅó4 š§WŸ&õ;oÈRßSå ªÉºOŠ¨† ¹0$.aÝŒ1‚¦ÌI¨1‚M´’ùø-€¢ÿ¯x/¡ +endstream endobj 652 0 obj <> endobj 653 0 obj <>/Border[0 0 0]/Rect[63 365.22 102.66 378.72]/Subtype/Link/Type/Annot>> endobj 654 0 obj <>/Border[0 0 0]/Rect[473.28 379.26 500.58 392.76]/Subtype/Link/Type/Annot>> endobj 655 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 558.24 313.68 571.74]/Subtype/Link/Type/Annot>> endobj 656 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 657 0 obj <>stream +hÞÌXÛnä¸}ï¯à£´;¢ER¢Ä¼mìq0Áìda÷Ì‹7d·º­¸[2$uRþ2§HQ7¯jYb‹UuΩjÁ›‹?Ý +vè6Z±,ÎY’k¦bÖ–›ýæÛÍŵ`‚m÷!YŒ?|ˆ<ãJ²LÅ<–l{ÚÄ°ÂãÄ(¶}ÀM,¶}ÙÜW¯YÊsvyqùãì—69WAsh‹Ó©ªìSÝ—í¾x(ÿnÿŒ”ÛIr“¦,\è”m¯6LÆÉ`[ÎlߔŮlÙeq<Þ¡0\Oì¦9÷U]vÖèÇí&M ¦yª—ÊÃx’“A{D-y¦ý{œcƒù{„†"£ìK} Œ±á0 /“ÜG\ÙàªÊœ«?¡JpðW&cF)Ï‚,Œ¤ŒäI„"ˆÃHdYj‚_pƒgmã–íÎ= 5î¾…YŽÓ•îyÛUa¤±°©)Àö¤1ELJQÈÈ 3¸ çÆ¿Âd˜àJN2gyú\ýûÞçï\ö¿±ú¼ÌfAižSâ! ±^aâ¿Üó§ã‘ÝT‡ÇÉTAteFJqü#”fPî¸/ý¡x3i‹W»ß5êLÏ þÇÎ÷Ÿ€`…ª;œOeÝwjµ3„ú“±kû´cý£{^²Á‹Ômòd¾õ^Þ»rß^6§ç¦†ï?ÝÓícµï?¯e{yÿt]o×¾JÁÓ,2iDVUêålûXu ìÓ„ü¼tì5”1îð×3놬¤¸/íî¬B‰kÿê¼·8™S^ì÷ÊíõRõUmÍ͹eÏms…€Á<(À 'D¤è9s£gAž†÷ä59Κ¶-A1ƒšà‰/‰‘Þ\“NíÆ8vïäZ¤>†ÂŸ‹êÊ&»ìÏ”[,Fnqþ€üzn*’ +_±J0<éìpr‘áê /Ó\$éwÄÙuq3H#.-;5mɪz*9> )iˆ{HŠ¾jê¬+KŸPàH¯%LΠôž¯´o¼R&PÜ­2tÉ$,Õx ýÕŠ,\Ç£JÑe“>§6f»»W%9¨ƒv<‡’bÀ-Ú¼É;ôBÌÓ>Kú®è‹ïf{¬à8]fZRž‘eD½° œïC)pê8èËŽ5{v«Eˆ‘«gÅå,[ÉhÙ +[­ß1ò‡³¯øš½¥ò>5][ä%,¤éñ´°cÄõ®Öf…×?"™ø.å2{Ûø^Gª¡öºêP;7\\<¿*nr—{G킆'”˜AæUÑBŸEpÕœïopı ‰÷E…]Äóª]Z0x2ù`Û9iÏ:Á(H ß È…å'eù‰ÅFoß6'€ö@,ZÎÃèjáë—OÛÛE1¨5GcᬨwÌ­N}¿'å£ß>ÞÜ~úË—…ÙdQ£a*r2ÜõE_Ze¢"÷©I´ù'OD>y䂲¯d‚²Œ^¢2¥íSmD¨dIzOHƒнi‡s 5]÷‚äÄ°iû†éP¶V>^BATRP>€‚ÎÚuJ,:ps¶ßêíkµ…†™ +{â˜êúsqdÃþÏ-š”÷Ž4‰$¶ðr‘-l¬2vgUKâôh:)€è®|.ëõð`‘E8”XFÃ÷ë$1´¾uÝyHäpß¹zŽ™ÎÍøøÚ±"ˆë^ë¾ø§åcP°LÌÂ%Òч%dVÜc³©–µŒFí?-åå òN%Ï#©ßÔ3[tfÞD~$•»`ªèP`mðjƒ.tæk]õ㈓d Èœ©ÀÎuNÄo¨C£fi­œˆb} ,’èçåsýúÝÈ©ýˆò$èp•TyLŒŽçµ÷ÌŽNÈSÎôû^‰XÒ{¥ë>â Ù#_\'Cf8½Žßv$wÁç×”òÏE}8CãÐ&Ûb¡6Œº°²^Ïœ¯Éf©°™,¸œÀ+sã{5,ýÒôå–Ù…ƒb ÍyY“‡Kêy%Íuv¢6Ç‚¤ÈòƒžÐ +)[ÔŒ/Êxøã± &Êš¦‘g´àrºGw‘dBö± „gèì~ñ›¤bÜÜ'ð‘uKºt¤— +3ÊЙQ:'xûFÄÓoÝôð˜ÁŠ‘±bQ¹ûCТâ銡Ü!R¢&ß»ˆq"|#‚ +ºµ¤±«q]2fxºA¡J HÍñ@G­{]¨ƒ}Kš|,ÇYá×À |œhžFï˜~¸Tü²8âKÔT?Ñâ¿R:4WàDÙÆÀuVŽ*h`ZøˆBK³|FS Â'2¤L¦çûÎœÞYO€«]‘1¡ÔjÓ;ªP§{úzÎÑE¥ž½õ ç™ÌÍ{ »E/Ú+hÏ+7rŒYöÆ]AôÅÒðBœ's~ —Ö¼ÿÆ é% >Í(øw®Ùjrýn{!{Ýâ‚cj"‚!ÍÀn8³µœÇà ˜ÙAš¼w•~ÒʧÖE¤“˜óZ»@õ#½Ó!H_Æ Fîç?<‡ JmŸs™ÄþÍ¿Œê +endstream endobj 658 0 obj <> endobj 659 0 obj <>/Border[0 0 0]/Rect[85.68 123.24 106.98 136.74]/Subtype/Link/Type/Annot>> endobj 660 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 661 0 obj <>stream +hÞÌX[oÛ6~÷¯à ¶šI‰¢PìaKâ¡Cש›=,àش£Õ–IîCÐþå¾Cêb9)Ða°°d‘<—ï|ç" ¶ýðJ°m3ÓŠ¥‘a±ÑLE¬¶³Íìûåìl!˜`ËÍLHáaR®$KUÄ#É–ûY)<Š3Å–+ÜD"fËw³_ƒ‹ËK¸açgçß|Ã^Ö¡0\Õ¶Î÷û¢Ü²gekëM¾²áoË¡IyM’gIÂæ‚ °åÅl‘QÜÉ–G²¯l¾¶5;Ïw»Û|ŠŒëà »ªmQÚÆ ½\δ䩆kš'šq©²,c<6$Ò9éüv‹pCþñ"¡ Ê-Âó—Ì¡‘1,Ʀ,ig©J½¥?å¡Šá÷&#Ξi8—2Ê$ƒ8žŠ4M²à%nð¬®ü¶õaÕ²Pãî:L œ³þyÝá\ccU¾Îш“R§„™‘ufD›ñW˜@‚ c|’‘ÌK¯'_?uýÌmÿÔÿñ6¥¹¡D]"}’ÿRçw»»*¶w-‚©‚ÐØ:œ+ÅEð6”ÈËÀ®yÏüŽ¼©täÕHÝ1«õiVc£1Ì?Îh²>"˃ò°¿…ªåcž +že.Oc9¤© ¸Ó2ó_ÙöPÝaaò F¯ó6gí]Þ2˜œáQÎc,c› m 7ùc±ÓÞÛrM¥Loï,[!ÕwÈõ Õ!šÖ§X{ÅGáжÄù a¤ƒ*ÄÇnW…‚râ](ðIZÞåºaÕÆ›¸ÊKÕy§m,IChI·ê5Zàë½¥,.Ø>âó6Ã3/)A&µŸ€X8½Q¯3í²úÕ½]›XmB…Úz¨Ùm(Eð!Œ‚Ö:_à}=_Û jâÚ9ÆÙkb Y%#O`T½‚¤«^Š¢amÙ¾jZˆlÝY$•ŒL—ýIb´YÅrv_Tçé …Ð#Š¸ ‡g:UM^y,lSlKo°ÇDLT\ŽíáÄË÷ùþ~‡ú $Ê£<î'BôUºÒ³CAvયðüˆñýQÃzª¾§ +-§5wýOà†i#&s_€œqgóz{ Y ë[A'tRæä¢y0|룅Ó|7qègcI{V»¼i¨î×Mj½„&š¡ãb©r‚:d‰ïM ¿^yç$Wé‘àNrÍše›¿‡¨ÙÒmwrü¤¡ƒ=®¸ä-‘:¿í™NžD*áRÿƒH“%5ê4ROºö¦=ꤿõ£ P‚ÆZF@º>…aÍ ¦äL(œ ãÚE±ŸÙŽ^Àðº’Ñ^\4Åyï4øW£`ØøÄü8Ëz®÷#ÚóËÅ!ó¼W;«WUIɯ|ú ÑðŸ¢Hµ‹0‰ð _µUͦú1j™SÇ9ë±2€7fù º¯_<[~ºzÉ^ªô$RÂs"扛÷Ì„‘‡ñ3iñ(6‰ÇƽI$¾œ$A߆ú^6XœòøÈæa‚4s’‰“ƒ®é?‘%Ÿ‹ÄHT@"A(ô8ºLXÑE©ÿ™ƒÆb§Î¸ ÐÚ".©¹1OT»~èÀœQè™2)ôãLÿ‡N4—Æ=ï~VTLuç‘•úp&F¿ÈJbLÒîñÉ8£wšÓ…¿´»NÑ +endstream endobj 662 0 obj <> endobj 663 0 obj <>/Border[0 0 0]/Rect[213.12 325.26 269.22 338.76]/Subtype/Link/Type/Annot>> endobj 664 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[460.38 492.24 549 505.74]/Subtype/Link/Type/Annot>> endobj 665 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 478.26 130.32 492.24]/Subtype/Link/Type/Annot>> endobj 666 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 78.24 219.84 91.74]/Subtype/Link/Type/Annot>> endobj 667 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 668 0 obj <>stream +hÞÌXÛnÛF}×Wì#ÙDë½sù˜ú†)8J_’¢ %Jf­‹AQMýIýËžÙ%EJŠRE €IIËÝ™3sÎF²Åèâöƒd‹íÈi– ÏŒwL V—£ùèÇÉèâF2É&ó‘TLà.Òg\+–iÁ…b“ÕH`.L®ÙdŠ! ›|}J®®o˜åž]^\¾zÅÞשô\'›E]¬VÕzÁÞ®›²žÓ2ýuòNÒñ$ÅskÙXré,›\ÆØR˜vo5Øû®,feÍ.‹åò¾˜¦2ç.ydw›]S­ËmØôz2²&GbŽ[ǸÒyž3nóÜEÐ í`׆vh¹:EÎÕºa³2uɼ¾©–ËËûÇ›õäù©üœD̸ÀñÔ½‚˜t…'få¼­ñ1û‘ÿV²V&\9˜¢sßAm#ÔIóüt¢„šdí*V¼¦ßÇRsƒúƒs!#€ +±R? ˆ¤—GÇ~Jæ`d‚ìÚŶÓ2'¼9=dVÎ~ãð[¬¾*šâ8Ïʲ“fEÐÿÀç4âóµ°>T¼ïÜOÉȶ†Ô,v«rÝlCè¨N¦Êaô¾yÈÔ¨NÍ!£­DúÈŠ»tl¸'yÃßfG*çôµÒ¸®Ã·[Ö<Äï÷Цh¹iÑqë¾c©:î00Á¥ï™*é¹.:<üš}y¨¦¬ZϪiÑ”@Ñ°†öȹ׶?àµù¨˜ÏCÉæ8—M»Ñä÷#û’JJ…â + M JH%ËeoZæîáƒÐ莌cvt¤¥=ÉŠê .›!‹Å@CìiSÑ0fÍáµ¥4ÐÚê$Ô°Ç3ëNîF6Û68´Õ * ú%Ó”¦YCCßÕe*IåxªIënR-qݤô·f«M]¢!¶¼;'$ÖCB,ÔŠ[<„~²¡ƒèã +W\Š¦Ú¬_³mY²–ßËN)Íhr¤ Ƶó Ì!ü:Éì‰br‹BÀH˜¼ÓËÐvßA6`Ä0žÛ±6"G“í£vƒ¨ŸŠ:@ed`\Îø>nëz´Äá› º€²Ö|x*§(z@ÁŠíjvŸ*™<§"¡ßÌÙeLð¬Ë£8ûH3†BR‚g¹Fw¶õ:á Vmrƒ’mlÙ„g¡xeèIÕ=é[Ê”ëØ|ƒNlZªUÎñë̦Òm?n«Å:|¨oš‡!Ê…;2sõuíèEœ;·Ór¹¼­«YTÔSž©G]òtdUÄSm+´Ùiß³Žz_'0n:§kºàI·…t³y½YE;Q9IØŸÐðöòúݻۻ·W}E©ƒÚ¿'"ôŒä„ +(“››Ë¨Om‚©V öñ]Ry(v‚¶uœ Bƽ;•T£CÿQ¦mcU3,îC¯¯!,Ü)(ß° M¤öÞïŒg¹=ðd†é²Øn©ÑêXªÊT‘(Qup)S’"Ê2R¢$‚(€‰E·­ÔqÛšmƒQBŽsrd´š,h‘ŽZ¤£±â/+û +&IË•?«gK¯óádêÓqå£ Þ^.vKÉû µj¨@ô´¦è=ƒ¥“çÅPA°­õÄ®`»‰Óª`Ûc1LÃÔ¤tÐÓAÉß]ß\ïŠõba„Ç 8Z*4½\¿0JÃól8¢’C  .£þÂÌQýe˜O/2µ*Ãp8ïiƒl†K¾so‹˜)€ö±¿ÌAqqjpup¸³—\dàHý¾7‡+ÃÈ&^ük››½ÌåöÞ«^ÝÙÂÞ{ùà½Tpµ_ñ³Âž7´Ãv;õ´’çƧÇÃÏùYœ¿ -Ù"•’dJf¨òÞº*kÛJ^1d‰7MoÅIH¬-Û]ù ÍâX¸ÿwGÛÞÖ¾h†ôQÈwëÄ.1m‚£¥[r´²u´28ZÙ;Zrbý·Èƒ¶X…'†u{vd„¤úz0á=Êàý€\°I(Ÿx· JOm^¥p3{½÷8Ò0/è¿Â çÖœ—{‰i:{€ízí_€Dç1ÜZW‹mUíû[€yð³Ù +endstream endobj 669 0 obj <> endobj 670 0 obj <>/Border[0 0 0]/Rect[145.02 545.28 184.32 558.78]/Subtype/Link/Type/Annot>> endobj 671 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[467.58 326.22 549 339.72]/Subtype/Link/Type/Annot>> endobj 672 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 312.24 130.32 326.22]/Subtype/Link/Type/Annot>> endobj 673 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 674 0 obj <>stream +hÞäXÛnÜÈ}Ÿ¯èG26[}a7ÙŽm Ägó" j†3b¬¹€äÄÑ'å/sª›wK^c{CjHVWŸ:uêp$Û¯®Þ}”l߬¬f™ÈYš[¦«ËÕnõçõêêZ2ÉÖ»•TLà™g\+–iÁ…bëÃJ +©Ól½Á‰)[YÝFoÞ^3Ãsöúêõ‹ìCËœëè´¯‹Ã¡:îÙ_ŽmYïŠMÿsýW¬¤ÃJŠ;cX"¹´†­ß¬„i[MbߔŶ¬Ùëâáá®ØÄÒq}f7§K[ËÆ}»^YÅ3‹­Yn,ãJ;çOs +é7é÷í/bëñ§ Ý ýEì|ÀÅy4ÃÅ4ïA LeÖeª³éߊX§Ø÷#SBƉáY”ʼnRÂ)žFi,#'2ËŒ‹>àßÕ§pÛö²iYlqö8˱¹2|_7UœXÜx:¾~£‚SÊf„¥áº4„ iü76ˆ âŸ”$ ‘ÇãâßçŽßyÛ¯õ|›¯‚¶<§ˆ® +Â.Zâ®ùêáÝTûûÅÔQƒhÊ:N´æ2úw¬Ð—Q¹å=ó;òfʓעuÇ®¶Ë®Æ6³³Ž6”¼ Ä£mÑñú_c“JîœoÒTú&t/ñ?ëøöñ\nª]U6lktý¥fw±’Ñc,¢ßžvì‚ä“m¹C·n­ÀÙ´J_ ž¢ýÅ º_Àt}åŸ`UÚ²e‡SÓ"dëŸE«h3Ö@õOæ*ÅsŸê,ÆIùŒŸ·Ñ+xY ÖÉP·@ÇOX1ÕwHš›9þÏ Ð¤Óšà;ѹ¡ö'î&øl/dÿr/Ç£ÿ’t¾_ÊŸái¶TåA÷ʇf‰A’GZŒtEúr_mîјÛjSÐ oï ¨…@åôT̳…ùA#ïcIzˆ±Gªx9³ÍhÞ5Ìû—XZœAH¹w4À‰‚ÍÊ=ÊÝÕn2X÷('å”&dRDçEË/ Ÿkñ8A/„4nÒCd3³ ÅnôúŠû܈IGˆ êêÇeÞ +ùKTvƒTJBC0¦ÒÓ\¡ '¹†ý©K”¤©ùuPÈNý`QÝ`Qa°¨0X‚¨‰wn2µ1CC +sfÐE9C'r_+»«Q}¦ñ*éýd—EpP Ó+ Ë¥\=©åŽÔ2bG&—<è +9ò ´Úÿ¡Y]Â÷óܪ ºM{S™.Ì*½®ï©ŸÐeL$ªÓJ–UrómÏ*1]g†G[3›™þ]98+}nü6ïÊ}u<Ò(A‚£1¤ ˆÝ¢5ÀX_ ûƒ1ibÌuƒn9LÄÖµ£÷#âã#ÐÞÚÐ>Ý´…)µÞþa…ÞÖ‘ôÚ H"²ŸÐ†hWåÒ MÓ×odùô·Œ'¥†â6ÅÁw¸„Âõprñª^ (BT*€œ-]ÚÈ.Çs·CÔl˼=µÈ 0ýðPᵇ’<ô¹„š‡ØäÈÌÜ£RH*@°b¤ÈT:üÌBÖÜF}cvÉp¥Ÿ´KA¿Ç3IúµèžÉÓ±¬?×ÌÃËç Óhl(éÅö$Î~åWŽ—Ã9–NU&vÉ ·OŤ”N?¹æoc™0þ'ÀÙ.¹T +endstream endobj 675 0 obj <> endobj 676 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 677 0 obj <>stream +hÞÌXÛr›H}×WÌãP)ÆÌ…mùRÙMl—Åæek°„dÖ\€6•OÚ¿ÜînBŠ,'»U[) ÂôôåtŸîN6³³›'›z¦% ¼¨Pé‘*­gñììšNâõŒ âÁ?¸ð0`R@zÌ$~™y …y*’$^Âlj¿Î~§—W×Äg!™ŸÍ?| ÷•ÃC&i¹©’——¬ØE“Vëd™:Ä¿€%i- ù>q9ãÚ'ñåÌ•žju‹‘î‡4Y¥™'yþ˜,1MŸÉC¹m²"­Ò«xæ«ÓÌׄ Ea*D…&D-X »uˆñ:@ƒÈH³¡÷ÀDŽˆÀ¢ +;ÐU´®ÊÀºú9q¤‚À¿áqÇõY@Ç‹ST9þ\~DïážU¥[m— q4Ü}q‚¢KíóªÎWƒ`Y À&RBºµnxܺñ·ãƒá(øE'‰Õ<\'ÿýÞõD±ÿFëÿXÌdAjb¼6 žžpâ'mžç9yÈ6O $SÒ(P§•ãJÉ8ýË@Lš®XWúmñ¯î¡5ê@(íöþ{Ö÷s`°„ªÛl_Ò¢©[Öj«êOtŒežÛhóíÕ‰ÿ˜ÍYf+ÑÛïˆí[#i³­̧…?5I(JIó”4‚Tð0Á• +i×Ìáð›Öd•¾¦Å +[ £yJmN°/„~ŸÞZmǶQÙ¶A¶5Hbؼv$:\D‹y^:܇›¯¨ª­z·Õ?4,CÂàdg© )`ßFF‹.G=zn ôÔAõÈÓbûòi~ JÞÚÕ"šbÉË°\%MÒ#Á£ÃãKƒÆ‚µtL¬4Ò- Cs6†µ55à ?-šš~…ÜiŠVž³bU“rm]DÌzxÑÚo_–âÎâ€/vШ`æ=Ìòa¾1%‡ÙvR³åœpÜPz iìh ŠEh …üíŽ,Ó|ÃpP9¦ÍE^4}N6iG¿ã ö ¤«t]á6Ü°h’ª™?>Ç`~§\»-ãv:/_^ËÂ0Óˆí[0z{±S4¥×YžW»ÛBØú²ï2aÒ@o€ˆ¯ÇmˆÞ†>ÕÊàßmÚœˆ¾+ +ÑU¦múoËô`/ i²Íò°ÍOªË}ãCY\¦kÜüs®ÜgÃÊW32¨èè—ìˆ?ƒ°7¿Ë‹#ì<^“F'Jª×ð úÛ&+‹S‹ÅJ¿Ëýî('ÌQŽ.°+ÍŸ’ì ›“ôᶥÙõ|XäåɵŠ²ï ƒ=KÓÅkºÌ’œ#Å(˜÷"°a4ß°êOË”þBû’%Ç öÕò]µÁ´ÎF‡èÉhÐvĵ_³ÇLTqÛ¦Ù÷çÄÑé ÷ÜÇ­z8 t³¡ÞÁ%`A4´{èŽ$ÃAŽÞE´=õ@É>Ï]å^|º›ÿz~sµØ±á35²ôÆŒNJê&iR<â&W„,R“D¸1X‡ƒ–]Ð(^Oœá‘?rœ™"B?²öü7®ÉpŒÊy~÷ùþîöê6^µð.íÏäIhpðToÍÈ7Iþ;]üôi7]Â'C­â`¾ä~¾Â!_ãÑ|84Õ…6U]l¡ÇFwAgRN{ÚPW‡¢Ëb¯hoî~»ß…@2}:>¼ÿ80XåCƒ<½ßÅ>ˆµ(S*ÞΫ矔WóAaìÂU> endobj 679 0 obj <>/Border[0 0 0]/Rect[63 285.24 130.32 298.74]/Subtype/Link/Type/Annot>> endobj 680 0 obj <>/Border[0 0 0]/Rect[490.98 299.22 515.64 312.72]/Subtype/Link/Type/Annot>> endobj 681 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 682 0 obj <>stream +hÞÌXÛnã6}÷WðQê®Þ%>¦Ž³M‘&†í Pt‹B±e¯»ŽHrÛ|Rÿ²CRWÚ ’î(D²Dq.çÌ™‘(ÚŒÎ>Ì)Ú”#ÅQL$…8AE6Z¾_ŒÎ.)¢h±Q†üÁ&1æ Åœ`ÂÐâaD`L„æh±„BZü9ú%¸˜\"‰4>¿{‡¦EH̃ý¦H¶ù]åUV¬Óeþºø,qg‰a-%Š(¦J¢ÅÅ(‚-‰¨÷f½½gYºÊ +4Nw»ûtRUðÍö‡j›g¥Ýt²)†c¡),ÂŒk­‰ÙÒiã¶7!t û÷oBfÌnoBäm^´Í†FpS$MŒ§4®=å±óô§4äâ~BŒÐ0’8â0bŒh†E BÈ0¢q,u0…¸VìݲÕaY¡PÁÙ]'\æ®å6Œ,Üç&¿6PbƘŠMÆŒºvƒPçÆß¡„X(à¿q¹»£÷ó¹ã+—ý7»þ—Y¸Â‰Á€Ô(å•ÄWÚ<ßíÐl»ù\˜<(¡ʬ#Î1 þÔe­pÃüš¼1³äUPº]U+¿ª ‘T´4Îãx°J«4\üÞ)ÅZÛ"ÌÄJÌRCÿ¸¦Ûü1[n×Û¬DëCÑ +t2<…$¨àê~à{´ÊÖP¬+d `ôÑ„c¼g ¨~ÒÖ?o Ⱥ¬ìh[¢2«Ðþ¬`ËÊ> •ÂekžL˜{2ËQµG)zÜo™ÕçÌ1©¯=®1îr‘•ÛMî!7`Xž0â‚×õc‹›ØfY| 'Á6 9H‚á…„Cš¥KÛºØ?tAŸ]ÊÚÁœÖ©#ø7“Å|>W m|h€Ió•·/Ð*îaÙãÕ|:__Y=Ö}GlŒõþe¶¬¶ûÜrÈÄ`ZÁz»ƒU`)d¯¦ÅæðåUÙK1O,²ñ)Gns—ëŒlœaIÏ}+ðöÀoàµÀTK/3Ø¢d_îÒ²4t+Œ)‡1( ÀˆÖüÊÜOM©¤®š#€FÄPplÀÌ–Û¤NÎ%ìØïCøW ò)¯Ò¿ ¦µÑ†æ²i>@…8Â!5¹Dé=tÍ6›+@ÔÞJ +¯_פè'l3ùÕ¤ ”7¬¨Ò*³€‡Tï%|Ú1@hbj’¨ Ä  Â0 l{lD±«3I¡W +XËM¡½OÄc Û)†S¾tçŒÃ +3‚pÄ`h‚"Uvt‚8´NN¦€Üg‰†"7ü©­«&ÜÆü€¦Â¥‡7š'´n×k—žëÉå™Aö:Í7‡t“Aç]†I 8ÿŠ,÷§0*°Ž;e< T/bK HÄ1“^‘Ì-¸k¬•›Ì‰ÉŒ‰Y¸`ë—à1h3Ze¡ +z2ùô˜} +\£Å„Ú¬3bƯ‹ZPa„'Ì4øÅ,þ­¸¦ÝA¿â:i¢’.±Aõô8ðÄXÆIiÁ{‹5È:×0Löìö\Ýz± Ì^Øö9ܼϺ‚æË4GãÏéöåÕ€²æ¡þ3m… q4S²nê.à0ìo*áGÉ||~3þáÜÇV½¾„¡Qؤg`·¯^ š7°öV~š_ß[ú-”åÇâä4þÜò)êÖ~›"}ãØ1º›uNP:ѧ(][©žÚ–rTÑ‚Ú[Ú¢šˆYªóÅÏ~ÃVúz@å1U{ +w·M_#²Ý²o/²wWç_!²½ñÒ©-5oar¨·½Ï[f¸5³O%œ˜ð&|(à%Ѹ|gÞ¯¼PEæë×îÁ«cûy#•p,ê/|æåºù,¨¤}ó3×ëï†Íû%Çwþ`{nÚV +endstream endobj 683 0 obj <> endobj 684 0 obj <>/Border[0 0 0]/Rect[283.62 338.46 385.2 351.96]/Subtype/Link/Type/Annot>> endobj 685 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[445.68 491.46 545.7 504.96]/Subtype/Link/Type/Annot>> endobj 686 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 77.46 229.26 90.96]/Subtype/Link/Type/Annot>> endobj 687 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 688 0 obj <>stream +hÞÌX]oܸ}Ÿ_ÁG±›aDR¤ÄÇ4Ž‹iº°'û²[òXc«k IÓ4¿£ýý—{.I}Ž“]`[ 0 Éyyyï¹çŽd›×¸•ì¡ÛXÍò´`Ya™NY[m›ßï6¯¯%“lwØHÅRüá&‹\hÅrŠT±ÝÓ&…‘fN³Ý©ÌØîóæÇäêÝ53¢`o_¿ýî;ö}Ëe!trzh˧§ºy`lúª=”ûŠÿu÷'¬¤ÃJJ8cØV +i Û]m¶0™fѶšÙ¾©ÊûªeoËãñ®Üsé„M>±›Ó¹¯›ªóFßí6&sؘÆ2¡´sŽ‰¬ ƒ~‹V‰Üß±wæߊŒö±õ10·Ã1|ÌŠ! +äªÌ£«:®þ¹ä:ÃÆ¿0•J¾5"Or¾U*uJdIÆebùVæ¹qÉ÷xÀ»ö†ÝŸ÷=ãO?ð¼Àîªð¾íj¾µxj(À~§)EL)›SÈÈ ÝHepã?ÜÀ‚â®ä$ –§ûê߯Ýå°ÿÕÿãa> ÚŠ‚rÆ,¤vU¿qÍ7Ç#»©{$S'J «Z¾ÕZÈä\¡0“ê^ ÐàÍ•¯Eí~£¬1ÐævVÒÛÑÿ4øþ¬º‡óSÕô]¬Z j¨X‘š–ô_žùîïSeKᜯìL…m†Â6a‘›ª?·TÂ$ Ç¥c%ƒ¡ŠõeÏ°É /KúÒRÙà^s‰kÕ±ûê¹jî‰ZPýcrB¼P˜1%2.´ŸhÀ6Ú@ìÜ!€l‡É®É Ô"­x<ž¸4xøLöÉ¡.˜ßFûa¥´%ÚœVjØ]…ØÇ%Í£1zÛšB¸Y}Ü1ºÿVGvÄŠ¦È–Q”(ö†§PŸO5Q.ëOø':`‚QìA‡¥ÓÊ÷Õ¡þ°Z=*ŒóÙÓÃÂYÜ+ëzJ‹ÏÝÊ—'‚+Âð5GãÈV"2ötjcš +‘;3š6&ÒVÝøÔ€öynÙW2ùÂÓ¤ÇÛÓ0Ûn)£ûH¼@Ž©TdÖ¼²ÔÄþäg°ºC{ä£ëa²)±z*b†0³PafÕ(Íp5VÝV9!}QäË¥©Öu„WW?4Áá“”|Ò|rü5`— pXÌM>c%ì»ýpj®ªCy>ò,驇ÊäíݧëfÇ-!ź” ÖÓy*Ô`yŒŽ´c% %ÐZW\K˜ûÖžƒ}øíéiÚüXV2V]D?@áÃ_>@żùø~wóñý»Û* +Šô‚%¥”‹Ä;Ðx]Ἒ„¼¦d*Ð +][Ö}iúòŸÌÓžÞ£ØÑÒÁ7ôÎÓ +ïÐ*æ@GÓ,–HW3|"3kÉ*5€uå, !ž‚-xem‘ˬ“[Ÿþ0zl‰Î‘O +eQŠôôÓpÙûÕ£ûp›Ìx¨ôýÑþS´¡ ò%•žÒ‰á*rŽ/DRäÆW )6À8ÓžC/ ’lÒVfì#&/f¥ƒlS<Á àN;_wæ{,E8ýþÝjuÒʬÿ1iÏ„écµµM¡@.}Ú3ù @Dp¡½Bñ®( sòüÂû’@/ý~âËÎ2'~éû}Èç$vÿ«:WŽ8£š ÇÂ""šteAG:\û3ì +Ï7÷Æ¿Ý=†÷kv5"Ë×,?’놪¥wPµ‹æ"‡“â tHÝRpÉ+öù±Þ?¢´ïë}Ùš×Ñ¡ù²;¥qk^©4Œ¼Žöd´¡6 ¢zäPtwe&7#7ìh¾ +‚ý3‡ø'{žî}ýª¬~Y‹µ`ÆY>sì°EضÀÖJvË‘íZv;/»å/Ën'S—\äÏ-4¸…gïDáô(8IW曟ôMN*<¶¾ñ­o}η>9WÚñÔ'äZ"È¥.‹þSþÏÿÐx +ÎXî¨íàŠT#¸4ý²ëÀ<Ño!¥*p¤ù…8/ ç’< 0p?üÕŒš×¤G‡’4u#â Ôœ× ô#£Ó§O-Ôβëø_]Šbªò¼Æ“ÓtÄ’ëT‡r­^¬Ó­Ÿ@ögŒ »þ@P¦u_Y`¢‚Û¥qÄžÎùi&²ŒiUIñ?†if8e‡Oñ³ñ£ÎDúâÇŸ_8´u +endstream endobj 689 0 obj <> endobj 690 0 obj <>/Border[0 0 0]/Rect[490.98 519.24 515.64 532.74]/Subtype/Link/Type/Annot>> endobj 691 0 obj <>/Border[0 0 0]/Rect[63 505.26 130.32 518.76]/Subtype/Link/Type/Annot>> endobj 692 0 obj <>/Border[0 0 0]/Rect[85.68 119.22 108.96 132.72]/Subtype/Link/Type/Annot>> endobj 693 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[460.38 286.26 549 299.76]/Subtype/Link/Type/Annot>> endobj 694 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 272.22 130.32 286.26]/Subtype/Link/Type/Annot>> endobj 695 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 696 0 obj <>stream +hÞÜXÛnãÈ}×Wô#™µû¾ðqⱃ &c¬$Þ àH”ÌŒ,½Rþ2§ºy×س›ÝA`@¤¨fWuÕ©S§,Ùnqñ‡[Év§…ÕÌ Ï2o™¬.ÛÅïW‹‹kÉ$[mR1?\¤w\+æ´àB±ÕÃB`.²\³Õ7Bflõuq—¼»ºf†{vyqùÃì¦N¥ç:9îêâá¡:ìØûCSÖÛb]¦[ý–t´¤xn [J.­a«w‹%¶Y»·íý©,6eÍ.‹ýþs±NeÎmò…}:>5Õ¡<…M¯V «¸³8šåÆ2®tžçŒgž¶ ‡ ç?âèûDdh?âä}\òœáÇÌwA O¥k=Õ.zú§"ÕÎýÌ”éÒp—¸t©”ÈÏ’,•ôU:gòä7xVã²ÍÓºa©ÅÝ_Rçq¸2>¯OUº´Xx?Îxq’+ã\›«Ip¤[*àBJ ¦*S-±ðA )S ¢·­ÃÙ/®³Ö’àVõÌr3rº.wOû¢þkEû;n’ +šä°›:k¹ãôMù;aÅaÃbð²ŽõÕȤ÷#“'‚RAܧ’}4ìq[}ÏfŸx)£ÑSÄäºhªãáĪC<{pÃÄ=r®ü°E$óX¯V·“P\ç?ïˆíÞKí¸Óf†®Q•ÝÞ\]¾ûá̺Sþ­ƒ9ݦ›š¢)ÊC +‹NE r[í‘n´ˆ„*+ È£½œñmM„—Šz÷wéʲ‹Q ´é®õÈŸQ”è½›¢¹ŸøŸq7ñßtþ#ãÑÿõ¾8Ú +D”¼œ Ù1©Ðñ•&4I›€ÓšˆKPGùfuKÙ®  _y×/ÕD`ô`mD®SŸS|Ôìô|hŠ"[*Øî1õq ñW\¬Xñ¤OÁ,pèm Ä«ÈÊ~ ®F¥ó ªgn©ÏÀð$o@°%ûX6½¢ÊrAôf”D·c + ae «y4p•þl†Åºå«WÏJD ÛH±ö±€ØO`6QT=ñê¹i‰âw#<¹Û™¶Ýy;ÛhÙHä—÷ëóŸW×”ÚÅa÷TìJta´8¨Vuy˜+Z™ñÜ I ùálÒA–ˆ’B–š+3-¯ä6 pFV¹:”nHŠœØ¶]A… ß'”sjt›¢ë1è.?&Q³p!CÄ• %û®mLPÕx…„õZü÷ž:å€Ö¯sßÊĸ&ÍóãÄEèãüiÉ›g¢º|dwärË"pàþw3»(Ò˙ٻäŠ8!Þ™Ô›6|vnd¡¬yÅ8tŒ×ïÀs<Ï”sgl +ò$ó~L§šaÜÔu/À¤Þ%o18µÔ<õ&òX«úÍ4/Hµ1Ûi­zÁðDt†’Nèè +áœø ÏÄ9‘EP™÷ÁøyëÒ²£þ†^ Mê ûz_­ïQêÑ%yPDI´é)]iÙ½/a­Û9P L_Sé ª$ŽAÏ;UÜÇm ·–¾ Lôîã¼… AT] eß1ì<†yˆ!Ÿ¨ÌbN”­üf8¿ÕBý hÝ”ÂeG¹§“'Œ¸¬Sš(ñ¬F„i‚੦9âš¡C£Ïâ¹.ôà[ÎGòGøYÓ <§ðâ2ëÛŸíÏÇö»E8BŠiHõ5I}Â> endobj 698 0 obj <>/Border[0 0 0]/Rect[241.86 339.24 317.7 352.74]/Subtype/Link/Type/Annot>> endobj 699 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[446.82 492.24 545.7 505.74]/Subtype/Link/Type/Annot>> endobj 700 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[481.98 106.26 549 119.76]/Subtype/Link/Type/Annot>> endobj 701 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 92.22 147 106.26]/Subtype/Link/Type/Annot>> endobj 702 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 703 0 obj <>stream +hÞÔX]ÛF|ׯ˜ÇabŽ9_ÎcÎÞ=8Hîk%/IÐZJËó.%Ôùö'å_¦z8¤HY^;w8 ¥$r¦{ª««‹–l·zù÷·’íºU®™Ë +fŠœéŒµÕj»úÛzõòZ2ÉÖÛ•T,Ã?\dá„VÌéLdŠ­Wv™ñš­7øIÃÖV?ñ×W×ÌŠ‚½zùêë¯ÙM›ÈBh¾ßµåãcÝìØ›¦¯Úm¹©’_Öß"’")á­e©2·lýz•bËÌĽÕlïÛª¼«Zöª|xxWnéEÎß³Ûý±¯›ª ›^­WÖx,6gBiï=¦  Ãs%\>ÞÇÙÌïBF‡›8úŒpx†›¦Q T¥‹©j7¤ú}™hƒƒ?1•É$µÂq—¤Je^ ÃM"y‘¤Ò9ëù >à·v?öÿÙõOüX¨‚ÎEA5Èb²ü¬'þǘß<<°Ûzwߣ˜šwh®j“Tk!ù¿…ÆäÕ©ÉëT oŽÞ}¦­ñ`îòYK‡¾ dÎ(wþö©éËÿ$ëaµV{áó¡èí`s¡ í{uƒ3×MÏîª$çÛö¦n^½{ݬŸÕÏ|€LdˆNäͨ‘^cÁ]µmÑÕXAýžþµbQ%ò˜8EûbDÚHóþé°ÈPBL\|* O¼ û©ÔB{tþ,î,c$P#U$ðÕYX+Œ´S}mž 5žm⣟ "9mŸ‰üCG`µ¯Ë¾<_£œ;;4V•ÐÞ—Ë”ȳÂÌø9À¹T|[„ʧkâß@²5dfw|¬š¾‹»›a1G õ/ì=àÃYµ"²zâ6I(HÜð·?’ƬV×&üÚ±þ~ø}â +ñ8͉¯Ä¢oD EV˜CÈê´JŽZ3b=­Vxþ‚}¸¯7÷¬nîêMÙW”IÙ‡g»(Ú%]ls_1¤À6§U`D}H°´àeNF7ǦÐMÑËÊ_‚x8Ü켌³< M2.Ž¢Ûª?° +:Ñ$P”Ž•ì°¯i³~/Kp1Qh6tÇ<¾ê¼ +¸e¯ë[r Ó1ÁÚ pÎòÁÏì:¡Èùžn·ìqßVÀ|Kš6þ7üqXPöõ¾yÁºªbcBQöŒ!fƺ@’Ñ¥h*ó¨'æ› ‡íñ£ôQþ~ÊßÇü1iåUŽ´Ö%œûó¢i‹5¡hq Ï*v‡v~¶dÙH'öÛCµ©·5(·M4ŒÓ±eï%ùS’q"â~ËŽÿ”ŽßTwŒ"öMJKeÂäs–tÈl¤CXÁê ö@¼ë±å@m˜ mOSlb6i­¬š.3î×ÃÚTy!ÏýÛè •Žêê]3d¼”$-‚¨£6áy/lÆ™’¢ÃœH´°Ň½Ä¨Bä8 ëqGqŒšÄøðDÖJòÙÙ\H vÅŒ‘&¸d>u‘X"J]%Z¢‰0siƒÊa<·íþñ„Æi€ÝÊ^–ª›7ÿ¸¹ýçÍÕíúÍÕÛIœpþTˆ@ j&I2:$D"7LË0†Í<Äè>T<Á¶~]gxàIX[¶QÞÇêAó3ÿmžT‹q—'DùOªÅM»_N´åÅȳ±ã6e×±ÚjÒ‚D°›`‡ñ'$2P’ Îà!c„‘ü-ë‚¡‰*ƒUY˜£uaå;¼Lœ^œ6Eååå÷”?PÔqpD‘Œud&ÁFÏd÷õéµFŒ¼ªÑ/cæÓ"§žÃ³:j܉éôNŧ¢†T£¤é‘{Èi¼E}úîêú%áò]ÙìŽG¸Ñ¨×¡0mÕœ¿ÚI#ü…²”€T{ “Ý{‚5ØÐ/r ªÀ»–¡Ÿñ „ê_ˇRÆçfСòVŸG>œÖ™S†Fkõçs¡Jf_æBóK.ô‹<è| Y­–ÎHË P‚åüØlêü#}]¸ÍȬ'Ôßùê4w›ùg¼¦’1t4–°€ìåA;Þ#{þ4YMeù{(Ú(êôÒ1Óª¹äf:š4ØÒ`¬ú?ˆs_ñN#˜-Îáð¬Á™œöˆÝx€—Ÿ÷¤^þSfòAñì–R¹ •>úRøGˆ½~ÐL¡ûp{ò¥!%˜ùì8kãÞðl +ÖÖÕ†¹âp ÖÕ^°®!ïѾ’\ˆÌ +ÅÈÃa½÷Åe·ÐtŸÌ|t.3L‚’§ºYa?Wû…¿Í9Lñ˜Îï l‚¦ +endstream endobj 704 0 obj <> endobj 705 0 obj <>/Border[0 0 0]/Rect[332.4 545.28 437.52 558.78]/Subtype/Link/Type/Annot>> endobj 706 0 obj <>/Border[0 0 0]/Rect[145.02 131.22 189 144.72]/Subtype/Link/Type/Annot>> endobj 707 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[460.38 298.26 549 311.76]/Subtype/Link/Type/Annot>> endobj 708 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 284.22 130.32 298.26]/Subtype/Link/Type/Annot>> endobj 709 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 710 0 obj <>stream +hÞÜX]oÛ6}÷¯à£´U ?Eéqk’¡ÃÖ®7`è†AµeÇkb²².?iÿrç’”,)iÓu0 "[&/ï×9÷°’mfgß¼–lsœåš9Q0SäL ÖÔ³õìëÅììR2Éë™TLà²p\+æ´àB±ÅíLÀ +¦Ôl±Ä! [¼Ÿ½IÎ/.™å{~öüË/ÙU“Ê‚ëd¿iªÛÛínÃ^ìÚºYWË:ýeñ-NÒá$ÅKkY&¹Ì-[œÏ2˜&ÚVÛóºZÕ {^Ýܼ­–©,yž¼cóý]»ÝÕGoôb1Ëw9B˹ÍWº,KÆMA&}>nÿ#Bç°?ü™¡ÚÿˆÈû¼”>%æè’@žJ=Õ.xú}•jƒ¸ï™2Í,w‰K3¥D©¸IL*“2ͤs¶L®ðïš}X¶º[¶,ÍñéÇÔ®ï›ã6Ír,Üï(¿>PA S*w”1r£ŒnÜø3µ° Rƒ¿ä$ –OÏÉ×=?qÙ¿cõ?¼ÌWAç¼ ˆX‘O ñÏüêæ†Í·›ëÅÔÉ8ÖMšiÍeò{ª€Ë¤^ñ®ócó:å›7tO¨Î§¨ÆÂÜå#D[r^ãɪj«tñÛ ¤’—¥©‘¤‚ÖRÿ»Øo¯õr»ÞÖG¶N5P×°·©’É}*’o÷kvç³U½ZWŒNà슇ÜW‚À_ô »lÄ•ßÁ¶Gv¬[v»?¶0Ùú½€Š¶§¨ng¡ÂÎzÇÚ=«Øa¿%¢/íu*˜©’KO>n|4q¹¨ÛÍ.8rÒQ¤æeòé?QJðVog½)Ü@ä H‘ªdxþöÝån‘Z‡Bß&”8*“u.–ÉóM¬Íë %¶oëTK´:‚Ú¤N¥oŸ¯u³¿=E{viã‚çêAºCí¯æ¯®.æ‹Ÿ@¹/^¾X¼xõòõ¸`¾îUõX¿ŸÛª­oë]˶»p6¶;žçƒ"Ù®HàØžà×Û8nN|gŒ«”vR§®ÐREU³¹£s{ì²Îqð`N\ƒ–Ç–«fÅjxqò¹kI©ulÉåMuëeB2l¸³K#î*hÊA°ß]\žuÉÉ0°•¤“ÖöÚ…÷]µÛÜU›,¼&-þ4õnªh€.Y>h°1ydaQ¦¹:UÐk‰äµo‰QÕJß½¡$BÀÝÚDšQ^-½I@oèü4Oˆh:Š¹üœ„iEPñºA†9œ=…-$©ÞÑâ_{¸ä}Ù.{Øuô0rºbuòÌçܨK(²Á¹—#êàÀá‹É¹hqYÈɱo’´PB8aZñ\æáé˜ *·9<ƒÃ›s`sê@Árî«Š<À||ŸÓñ´rº9zgö+èe ‘)lì +äž:5§àÁˆV]C¹qr4ò‚„%þ¶w¤/ O6Ï >»識i¹qŒ0Ú|ÇQ Ü*¼[=‰ÊnXÄ9ÆZÚ>“É3öþz»¼ˆWÛeE¢¡½®Âˆ÷=8Hî›À¨‡žaˆ_–ñb ®ïSé’ +jûØ„TNïr0Ÿ—¨«Mnnê=ù¸YÌîƒ*¦#cR†>æl4†÷ek‘ux/Gú¤š¤°—ö3F–¤çè0¨t‚êÓpY¦tÇhé*‚w¯…Cøš¨VÎ%ÜC »šåñ¾•Ý9ÙPøv׈@ºîì©ßrßaÆYF?ÏÂŒèCˆÁä‚£Yµdb w À"³‚ÅÀ´V’úêà4Qo “³ãø ëË~¥Ã-W"üÂ~jÙ?"ÕÿSO…Æç dYŠ‘@V<¯7è“8ΟÇ2ÇTSÁ|Ë»˜zy\DA¦‚ S^©§å±¶Ãl»èæßiòÓÀD²^:û¸fEH 0TQ´V +endstream endobj 711 0 obj <> endobj 712 0 obj <>/Border[0 0 0]/Rect[85.68 311.22 115.62 324.72]/Subtype/Link/Type/Annot>> endobj 713 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[472.14 478.26 549 491.76]/Subtype/Link/Type/Annot>> endobj 714 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 464.28 130.32 478.26]/Subtype/Link/Type/Annot>> endobj 715 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[453.18 92.22 549 105.72]/Subtype/Link/Type/Annot>> endobj 716 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 78.24 130.32 92.22]/Subtype/Link/Type/Annot>> endobj 717 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 718 0 obj <>stream +hÞÔX]Û6}÷¯à£´1")’Òc›d»è¢ÅÄm&ÅB±e6ck Éuç'õ_ö\’’%ÍL’bQ EK#ñãðÞsÏ=Š`ûÕ«¾lß­Œb6ÍY–¦RÖV«Ýê›õêÕµ`‚­w+!YŠ¸ˆÜr%™U)O%[V)VáiV(¶Þà&[ŸW·Ñ›·×Lóœ½~õú«¯Ø÷m,r®¢fß–‡C}ܳûªÝ•›*þyýoì¤üN’Z³Dpa4[¿Y%X2ÍÂÚr²öMUn«–½.ïï?”›XÜDÙMsêëcÕ¹Eß®W:+p0õa\ª¢(ÏrZÐÑHnÍðgçØ`ú¡¡È(÷GS¸p /³|ˆA6@UÖCýO« d2q¢¹lœH™’g‘ŽE”Ɖ°VÑ÷¸Á³¶ñö§MÏbƒ»c›ãt•Þvuœ lŽ`wÒ”"&¥±2‚Q©ð0~‹5Vq†_ÉüÊ—ëâÏ—®_8ìÏYõ/<ÌeAžSÒ…Ô,jâÿÜóëû{vSïïz$SEJ «Ú8QŠ‹è—X¢0£jËêòZéÈkP»Ÿ(k 4ÖLJÚÕ#sJØ£wǾü5^ÿ³µŸ]ðÂø: ZA®2Z!Ôêg®=ÛV±‰víMµ¯›ãë¯ëLJê}ä£ÆS þ¦TKo0g[íZ6&Qm¤Áÿ­X +°£VT‘ÁÖ>ØQÿø0) '6ŒJ݈+zŸÅUâŸì; 5Ðÿc±³E¥Éb±ñmÔ¢>M´¿ +ƒÃþIýò>?töMÙ—ËržIkŸì´-i§¾œï$¹IólzÒ÷±ÅsÙÖ¹Ku2Òô6ú­ +ûÓ¡:öÝ +Fš (óX«1Ö…ÓîLÒ Í z˜û¸‰“Œç¤eøíO$iyK…ëÑ=íXçŸ9GÔ< Ñp¸Õ…žÄ˜‘^Ä—9°” »Ì´ËÂìi +†©èŠïêÍ«ÛzSö¡){‡ÃQn²ÊЖ„V¹«Pd„‚mæ}é ƒ›2ÆOçO• `ÓbÙëÄx¦Ûhƒ<ëèþ¾ÚÒ•Ï’„h?É +|.+~܉"@¿©úe«! ¼È’=455iÖ7øcž‰‚çBO¸6f¡öY˜!0 EÄÆR†þȺûRd#è·’ʇ‹Ç +¿ì:V×&¦ß–š¶Bzv±Ì/OÖ8øZöÀpźªbLA3‹SfPÅ”C4dæÀ¸¨ +y)- ž‘oÈr2â&ôpŽL‡s ç>­Ôò¥ƒQ“´>”{Ð_Úlƒ›ú´n¡ŸÊk¥6¤ôÝCµ©w5¼‹œ×©eb)¢Ç8ˆÖÍŽÐ? +бÚ2Ú€³¨¥"™òÌèeµÑRG3XÝ!Ì=’ÒõXÒ +ò¢ô%ér˜IšC3«£çÔ„`T:¡, +.ž é¦ +<ëêýÑ#žKœâ®% uîŽÌ›M¹òæcòà4ôÉ@÷³ïJ±¡xô$zXXÓ™~ªL…n9‹0c=yZÛ¨®ˆ¾Š:4µmPÛ5o¼]Û.G¿4-@–OËë滟ÞÍ( yI +ªE +Žqk“[ÞÕ÷TSgƒ’Y3É­˜ÙÅ$p3Ë6ô6$,9k±‰ÌPH^Èì\b'²Ðœgг‹"O°oîË®#:´>~ÖÇÏñ+\üÐ@¬×ZOYÈ wãO&áÁ&'¹—†Ô²ÎY¯ ]¦‰C ’\’€ÐÅ +?àsbŒá"GðââæÈÃ!"»J˜$ëÊÅ4Qš µl û•g?©ÂÙÑÈY®‰ß +„Ï"Td/‹™h#1V{›°x(³Ôf¼2”vV‚·Ñ·o¯_QT¾-û nÔÅÓ"Cô•R—ŸvThù“€Í ˜’ ptt©ç\ú" *É‚JâÓ‹&´9ÿm(jÆDKS$ôÅšÁ~6{^pô…­Ñò¬Ò9O*\‹õÉû[ÓlaL垸Òù×ωp>3¥íéËLéLï„œšÒ† •ŒÎ£/E{—Þ—:¹CS’8½>!/–UM_0Ë0û¶ a¿ÄZè”EØÌí&#¶P»ÏûÍâ%¿ù¤±ÈeL“AäF»I]þD ƒÝ¤(sÒ~ù†RP_(fvÓŽƒS>ø K·ÙøåΣáÔøBÏY~1Øñ …Î +è—€ÝÄÕÃ?<뀜Ýt g“ÞûœÇÌÇÿø]€法U +endstream endobj 719 0 obj <> endobj 720 0 obj <>/Border[0 0 0]/Rect[220.32 545.28 288.3 558.78]/Subtype/Link/Type/Annot>> endobj 721 0 obj <>/Border[0 0 0]/Rect[85.68 145.26 112.32 158.76]/Subtype/Link/Type/Annot>> endobj 722 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 298.26 225.66 311.76]/Subtype/Link/Type/Annot>> endobj 723 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 724 0 obj <>stream +hÞìW]s£6}÷¯Ð#t× +’@i²éÇl·;±Û—ÝN‡8Ø¡‰qp·ùIý—=W 8»ít¦Ì ú¸:÷Þs‚mf'ß,ÛÔ3­˜‰,‹­f*bU>[Ͼ^ÎN.l¹ž É"üá"¬áJ2£"I¶ÜÎ"¬Â£8Ul¹ÂM$b¶ü4ûœ¿¹` ·ììäìÕ+ö¾ +…å*Ømªl»-Ê û®lòj­òð—å÷ØIù$O“„Í:aËóÙKFq»¶¬}™g×yÅβ»»«lŠ”ëà–]îöMQæµ[ôÍr¦%7GÓ<ÑŒK•¦)ã±¥%Ý!ݹÝKcýáK C”{‰“÷¸¤”áel;(RaÚH•ñ‘þ…*ƹ˜ŒD8O¸ L8—2J%ƒ$ž +c’4x<«v~Øõ~Õ°PãîçÐX.÷Ï«ºçw%áë`RjCˆQiF$|† VaŒÿ$ó+®“ŸO]?sØ¿³êx˜Ë‚ÒÜR¢6 ‘ž´Ä?ÜóôîŽ]››ÉTA¨ó*œ+ÅEð{(Ñ—A~Í»Êo‹×HW¼­{èj=íj ÔF::¡à# +<¸Îš,\þvhRÁÓÔ5i,\“F4–êß´õ¶¸ÏWźÈk¶º~_±«PŠà!Œ‚Owk¶Gðóë|n½f´g?Ñy(|ñíõ º ’¶¯Ü VԬζÝÕ –lÜ\´ŠJ9ÝL+ý̼dÍŽeì~WÑæ&÷œË” G>f¼5qòXäu±)}À“Ž"O­ÇÓݤúÍRn]ÈÒXg]…,V ´eIíŸ`2‰|Þø_þUr”gW·å2Lˆ Üóû wŽò™ÓæsŒ`ª|—yƒâÁf*(òtn¨ˆb\òÿjðºÚmøœ\$íNOì ?ƒbYœ¾;ûöô»w‹QÉ$®dú´ˆ6¡ÚŠau“5ù6/V”nG"ùuqçÏ(“AAˆCZ]o®xÜ´¬ÚìigbóÇJHHWBm…C¶H3¨“R3N¿èÒ¯ZØ\pÄÄh¶ (é7Œ½ƒ âru“åÃícµuÊVwY]SyVÏgÊÚ7Ð…»óInÅrÑ bõCÙdæ5‘ 'Y!UÂ[\qÉšú’]ANûdŒO;—Š+u$Õ_T ˆû ^£¹sFà±3B¯¦eÀlPO² ILjCÍÆûAŸ -\†¦}#èèn¿¶Ü|Œ±Qu°Åi?¾ÓÒ·o.NŽ·Y¹Ùg›<ì€$…Æ¿*/§žFĨ«ä¨4Æü1‡|`Ð\qy@ÓÙ‰`áæG·è§9B7äCRŠgé0¥bmPá¡ÖU_ƒžFîéñÇÀ u…³Ù™ó–ž`­0†ÜÕ-ÿµ¯÷N>Àÿ*µT‰‡6hîG¡B,c§^»nMªæl°ï ô¶o€û«Éæ)22Ù»^M¶VѨ'»­•2ê™­Á&غ:G[Mw¶<–ÆLvƬ ¶,€PN8AE "øŽecÈÙSªæQ©~Ná ßfï8k ¬Ÿì°íCžkGl¶#6ÛêA8¹%—‰ÿÍž(Î:VP¸–îiÝRŸ=¢¾„ÇfJf=ÿjÏUÞ(81áƒÎ5IÝaCS€L¼fŸnŠÕ Z–‚ÕÁu±ÊÈN¸`RrúI¢w¾ ¹É<“ÕÄ'.šÚ³>ZWÊä@û½khQ¢VíW†L Ä·ìS(0 êŒú*ô¶s^}bæ-êÓìxXºB}"CC‰tˆ´Š½§„`0‚p±õÈÇd“¬€ÄÓ¾,Kæ1¡îéüLj¤ÄÞ±BTÈÝò¼(ÉýÚ¹×ìY•;µqNµ}ŠsÐ[7é§{ïï±çô‚€/·4Æw+´Ï2iƧžv ‚À!>é"1l´cñ…ø݃Û¥I!‡ ×Iv-—æÉìþo˜ÿža–d˜u+b¾ôvyq·k:l`Žžõ¿ø¨îêÁzä}|9*È9*çéBá¾­^0¿ZËùâí˱ÓQ¸œ(~Ñï +úVç¬ó½#V£û`hzdžväjzˆ#Ú#˦'ݘGLjŒ€ñ&~Ÿ’òþ4öþ4&1!šž:ÔøàP•,?âP•tÃÝ:Þ£jïQõgxT )õdjX,ƪi¦^·E¯ EjRõëœ+€ì<«EN-°¬ (0ŸŽŸ¡(—ؙ^_´­¶§4õŒmº$ù¤ô_f[q¤¿Ï$´ú +endstream endobj 725 0 obj <> endobj 726 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[460.38 478.26 549 491.76]/Subtype/Link/Type/Annot>> endobj 727 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 464.28 130.32 478.26]/Subtype/Link/Type/Annot>> endobj 728 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 729 0 obj <>stream +hÞÌXËnÛFÝë+fÉiÌÉ<8|,c;.Z´@`+Ý8EAK#™µD$ÕÔŸÔ¿ì¹Ã¡Dʉá¢( )r8÷uι—Vl={ûýbëv––Éœ%yÊŒd›­fçóÙÛ+Å›¯fJ3‰?œTž £Yf¤šÍ·3‰]„L +Ãæ \H•°ùçÙmtùþŠY‘³‹·oÞ° W¹0ÑnÝ”ÛmU¯ÙuçšU¹pü×ù°dzKZÖ²X •Z6¿œÅØR&ao=ÚûÚ•K×°‹r³¹+\"ØõnßUµký¦ïç3›,6eB›¢(˜HrÚЇ˜j‘¥ÃsÄ.``ü©¡Ìÿ¡Søt “|ȹª²àªÉzW.¹IøÓRñØŠ,Êx¬µ,´H"ËU¤y¬²ÌÑ\à^³ë—-÷‹ŽñW¿ð,Gt®¿ß´S,ÜÕ”`©¤Œif”2r£nHÕ»ñ·ØAóGr’õ;Ï'?¿v~å²ÿf×ox™¯‚IEN5¡ +2=áÄ¿´ùn³a×Õú¾C1MÔ‚­kxlŒPÑ\ƒ˜‘[Šú¼™öàMÁÝh…i–Ž(íyçÁ,É÷èæ©îÊ?ùüw¼mû· Q¤=è‚v°©0 í¸º@ÌUݱ¥ãi´jn6»îâî᪞?=ºOQŸ3!ažÐ+‰I—xcéV hWˆÙ´ø7Ç‚L¤Ás0ÅùjÛ§:êž'.*¨IVI¿âŒžÇÊS€ú#»#—á@_á@÷݉]¤HåêÄìmÔ‚‘¢ ‹í e©Ì“úí£3æ]£ujŸE^}l)YÍeÙ•§Æs‘è,{f|Y’õ®üºñ>ôO¼ÏÍ—Šos_ùø€ÚÛè$Û@fÖû­«»vê +G W¦É7‡ä>ÀD”|G1âð¶v»=8ÒGœkîQÞÝ÷·ƒÇaÿŒMƒÍDÑGê˜#l KØM=”BÑáÜøÏØçûjqϪzY-ÊΑeçKW‹%Ÿu'$¿»w¬…M¶˜ö¦Ï\¥¸(9m@ Ò¦æ´ß©ƒÿ·ÑŵÑfã–tÓ*Ä!ÅÏJAæ_ªEè ‹CÁ}-\·§Üc-ràeÉwujÖíðcšuð^ÙQú)'öLí'"?Êb6Xú9k;§M´'@˜hÁ©ÕuÔq¯q”º áXØ7 +ç§cö»Æ¡NÞ·b°ã³£D®¸ÑÂâ%€ÉŒÙh‹3NeWíê3Ö:ÇîMR) MFR@I?ö€Z”¿AOL²RŠk‘Â0„H{P1´lO~ŒÉó1ÇŒÜ},×è÷:+a^[÷%T㥺üÉÂ\póèÕª¼‘Œgû†Ýq­¢'.#ýnÅöh21e¥vKFûH}‡<Ò7µ§Ô£+Èàß`U‹Üv¨TÛaË>·¹Gþzx3Òàês#³o +¡NÓ§‡)Q¶ÕºfÇ” ºg„o(˜¿¢/“"ÍCãRcú‘~tytÓõ犃õº×NdDª2™a'ÊjÚj<Ó‚9ëûZè¨rcuN½|!QÌAÁeµZQsÇBÌ I¾0?½÷f…œèÑ@ì`à*mŽäy D Ál9Ý*©0>Á¾`M’JJz¨ÑP]«Mº k€U.7P9 Ì–ÄQŒ½­ß³-·žÂ¤Ü„/Ot:vG”yOˆl*¬þªð¥ÊE·/7ƒ“ F}/ÉizÄÒ0n![ðÊg3#Ùõ­EјTyé¾—îÑAáñ=jÒþ¤Ùô³é?$¨ÝîÄÓ Hqoz¥í´Á½~dÒ@žyabêšjÛ·=3-v5¸½€÷es:¸dø6ÑÅó©©£ÁÒi=í-†zKö/€“¿4¹ý?”*hz&îýã)*{ݥ촯QØvÚ¹©•aj²¾qÓ´Ô-ž–`¬g€ý"zâÛùˆQv˜FÅDHB-b9˜C—Ý`ˆlô™ö'‡†¹'ìàû´Q’¡šÝ90<Fú"Nè +'¾ Žz@>ÌbæøŸB‹\b8ˆ ÙRK¹ñYþSñöŸÒy>ì¨UØ1 ó|ß²óŠ>ÅÔëh‡$9ú"Wø4ŸBò©í×Slu^Ñh: ¦7J¨V‚)ÂLQëèÿUaX¥þ¶Ð‰ü-À7¿p +endstream endobj 730 0 obj <> endobj 731 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 732 0 obj <>stream +hÞÌXÝn›H¾÷SÌ%¨b:ÿÀe㸩WjÙ4ÚU´Äž8lmˆ·É#í[î™0ÆqZœhW«H@æœóßoLÑjôþbNѪ)ŽB!)Ä *õènt–ŒÞ¤ˆ¢änD"ð7…˜3r‚ CÉfD@ +&"æ(YÀ¡%?F7Þùä#’8Bã÷ãwïÐUéÓs¯X•éf“å+4Ík]Þ¥ íÿ™üš¸ÓÄp,% +(¦J¢ä|€H"ÙlOöL§K]¢qº^ߦ ŸÆXyßЬØÖY®++t’Œáh +K…0ãq#,"#Ò‚´¸í"@Ç àvïü[oÄEÔ:ÁXJÃÆR:K?§>€û 1Bý@âÐ ý€13,<éSû C{WðïÊÂ}¶Ü.jä+xºöÃÀi÷¾¬2?Pða‘ÿZ Ä8Œ13âÆ Bû$0_ÀÕ‰œäî~ðïK÷Ÿý;RÿÇŸÙ(p…#ÒD¨ƒ’x£Îë5še«û‚ɽ +* Ò¥pŽ©÷ÝgP—ž^â6ó›ä ™M^¥ÛUµ:¬j“å§ýŠ6Öc¹WÕ%”¬ŸüÕÕ)ÅqlëT°~™Âd¢œÜk´LëT×[0l^®—Ì5©˜úp)MÀû̧&Ë+´Ô:_š)^ƒ +œ0éœkµI£íÆ[t @BØVà£÷ÎxDz…—õºð)‡FjÞúÌü·çÁM£êÖ¥Y$¸v§5hÔ4$ÚÖWÙoY¾¬Pq×GË 0¹¸µ9¡ˆA/Œ:q¼sõ¹®²Uî\-W ÜÎÌ×ÞRß•îãy–õøö[òô {1 +ÜNнÐJ½q±y(r×hòXë¼ÊŠº¥Æ€ÝvØ=ÔÞd aM<Ͼg¶•ß§0% a{éfC3žÒ©ovÕÜ6g§Ø»(‹íÃ@ܼÛn=³l5ËNs…>ëÍ-à<Áßv£Û6Tu›ªŒî«¾L7údÀfÓPµÊU秬ª Ó¤ÔöÓ‹!íTZmn×ÓIƒ]9z—ºFã"Ïõ¢†¸Œ°èˆa‘n:½3E4ÁØÛaò +˜àfèç•oÆ·±ç×îètBÂí\Âb+á*Ë_—é°q¸ZÚ’@Îúù"ÍM]ê¡ÃCm;;Ü gÍO½pPF È;Å(YFÐ[ˆåQpYÜçźX½œ‘V[¢÷Ó>bNÑ5 ‹¨™k‘ð*¸2@Df‘y?°Õ~­KãŸy]¾6ê×Yúº¨ÃÆCÓ¾Ú+.ûÕf@GÐÏaÂh'RÆö™™‰y…RtíK±‡ÙϽõVÃÔìŸ,™ºéÈÚ&ágÛ +e&ƒ¨WÛ©aæ…!Åàôª&œ²¥c"¦;Œ7rm2³KàBeFõ•/`ʃaö]VöÍR–~ƒ ºIŠ²†¬ì»™o0g_çgÓdüéÃlŽzA 1Û¬ê´Ö˜­æ‹€S ç6Ú=špjÔ$‘ù¨kõzdwVø)²ÇS&óéÅeO.ÇjOì.%wrûx€œ…ôuÔä9Þp/²&éBoÕ°:ñ–ØÉøä÷dr9Ÿ~¹œ÷ÀKˇÊØh`GÑÙäoãEG¢®öÜ°0›Bñ÷ö4¶õ&ϘôŽÜ´î0u ›³ÍÏ2az==ŸÌL6¤™î3ò +¶öߦÂAÄŸŸè0üdŽ¨ž‡¼ƒë- ^L­ÏôjòøPö¬‹í©ãyÍ»ƒÚК¿˜}ùz5}Í›&N¤§G0ï5ÒUKKb ¹g=¶áÜ_BüE\á +Ž1á&#Òá#•ÜœmÓÜKŸw£ªÏÍíÑàZ÷›CŒßâOÓyòeöGÏ0ðǸã Ðâ RB:žµ³†ò„8"1Ž€¤)‚™¬9Æ —»Ÿò8RÇB!!cDÍíOx +‹ìûæ7¾v…K\âØ +‹",`Åü¶õÅ1‰Ú®ìoûG€0‚ùº +endstream endobj 733 0 obj <> endobj 734 0 obj <>/Border[0 0 0]/Rect[145.02 354.42 187.62 367.92]/Subtype/Link/Type/Annot>> endobj 735 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[474.78 135.42 549 148.92]/Subtype/Link/Type/Annot>> endobj 736 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 121.44 130.32 135.42]/Subtype/Link/Type/Annot>> endobj 737 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 738 0 obj <>stream +hÞÜXÛnäÆ}Ÿ¯èG2^RìÙýhkGŽƒµv!M„ë  FœÑdg8ÉñZß‘ü„ÿÒ§ºy×%†ÆBÀ"ûRuªêœjr¶]œ}{ÍÙ¶^¤’e‰aʤL&¬*›Å7«ÅÙgœ­6 .X‚?\¸Éb)X&“8luX$X%N”•lµÆMÂ[}^| Þ./˜Ž ;?;ÿê+ö¡ +¹‰epÜVùá°+·ì»²)ªM¾.®þ†¤ßIÄVkñ˜§š­Þ.",™¨vm1ZûªÈçûým¾¹Óà»:žš]YÔnÑåj¡•…ci¬S i­e±2´ s1q–vïá{Œ Æï !#ÝK¸Þc–á¥2 +d*ÏZSeæMý>¥‚ãL$<ŒtœY ‘X«@‡± é±(êݶô{L:Ž”±5OwGâÎ8~ …LèG¬²©®›Ç}QŸß~º(WaJtðø0cÃI€$”èVë ‘<õK^ ’s¤Ê®%G6 )(SŠ»|q˜mªãaðøìB·;%±NÆÖ׫Þ-¯' cmŸ LZ˜YÝäMq(ʆíJ·HÛmic­ÆS» ÛMÝìö0ܸœp³ój{¢ÕàE›3í²S7"!ãTyÉú-Æ©ŒÙø‰?Ú%tò$è}å®÷y]S²Tf*6‚9Ü€YáR„T¥d“Oç ÿöè,äÜ0Ú@w­ý«Ë&ÿn¡dD¬1/R¸T¤¸pÅ%ovàýü:ס:$D‚·¾$ÿ#ˆ©bÂóHš˜Ëyúw†ŠÖÐ>®oP{ûO &'[ß„6Ãå¿=)M]‚DÕ*ÍâÔ)RÇCÓ®"¥&v õìõ²ôw>¨Ö‡®Ô•Õ£úz·¼8#hÞååö”o på†RS”jQÎ8`³1lÁ´¼#þ%e‘ŒÅŽSûàÚEÎnƒ`c›únP¼Â"ïÉñ¡ëdÖ=„i0PHàÇÀëIœRö„ºŒ·~f_*åÆpHÏÁ×èl%¸»¥§©=èËDWM­¢x¢¥¼O,nº6Ò´äNd`¨Äos¢NÐ8j€À¥{ +vº÷Ï礨c•Í¹­gÃA†(›¦–%ðxRÞÕ#wFoØçûÝúey·[ç$ëÍ}V¢5,rp̧]ÏÛe\Ó¾l=íß?‡<ÅMâ§v/»Ž¦Ç4B#/Øl„«wÈ-ú*¼O’A;O„&M 6Ÿ´ù R”õ3û‚¸¤†¦ç4Ýë¤Wmœ°± Ö°¤  ~!E—t„^Ýë +ÝNUóVKÍäÁ­Vµœ’X¯$¼Uî•„{%ñ$>²»en•AÑ :ô ‡Þ[kž¡n-ÐœÒÁŠK;"ïY×Ä Z^c^=Òç–¯ÀÑ0+³U«|Ä1&ƒ”+E¢_r2¸Dx~,Ëbí”qùsS”5î&*ÁûŽPe#•#DY° ú“¨¯«ž¨Ï‚å?VËËëïÞ_Î: iŸ´=´¬ðËöºê`BCa¥ƒ©c@®:CT]òîâL§@ Ô?–uHCòÞ»ô…¸? <$†¦|Ø}©ÑvÛ”í‘j—ìü>'ŠGëI½¦÷ß?ð(|yQW#ËW!ÇÉ>„àg}_÷Çíã‹>[ãå¶èF^懩4P³ùû|žŸ*VËó¿^¾÷þÛ^=U¼î>¸šÛ‰ûFŒ¼¿A¤cq£‚¿Y™„èÏËY8Â7€?åÈåép‹cö¥ž;ütܽ+Ù¬u”q²+¸Y^=IåÜúÍI`\þjéßìò/¤ôGÇ Ÿüh¿S3;`8>¾|Rã‹–!ÑÚ‚\ëRR»rêL€ÞIûSÁŽ›NÍѾ¦MjÊ}I„®“¤ûO x…iÂt¯ÚϤÝKà7z©’næ¯ iiû +endstream endobj 739 0 obj <> endobj 740 0 obj <>/Border[0 0 0]/Rect[145.02 545.28 179.4 558.78]/Subtype/Link/Type/Annot>> endobj 741 0 obj <>/Border[0 0 0]/Rect[85.68 159.24 108.96 172.74]/Subtype/Link/Type/Annot>> endobj 742 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[467.58 326.22 549 339.72]/Subtype/Link/Type/Annot>> endobj 743 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 312.24 130.32 326.22]/Subtype/Link/Type/Annot>> endobj 744 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 745 0 obj <>stream +hÞÜX[oÛ6}÷¯à£´Ö /)>fi3t H¼¾´Ã Ø²ã9¶I^—Ÿ´¹ó‘”-)—]ŠÃPÔ’M‘ßýœ£H¶šœ}s-Ùª™ͬ(XV¦««Éròõlrv)™d³åD*&ðYX®³Zp¡Øl;8…‹Ìi6›ãFÈŒÍ>O>&oÞ^²œìâìâÕ+ö¾NeÁu²_Õåv»Þ­Ø»][ÕËr^¥?;…%,)îòœM%—&g³7“)ŽY<[õξªÊEU³‹òî§Òq“lØÕþЮwUã};›Å­Ah†ç†q¥sŒgéƒôqûE„Îq~™¡´_DäǼ8Ÿ Ç°˜]ÈSi£§ÚO(S!L§9·‰M§J §x–ä©Äÿ©´6wÉ{Üà·z[æ-K î>¤¶@pUø½nÖéÔàÁýŽòë”0¥Œ¥Œ‘.º!dpã÷4Ç *ÍðIN²pòé:úúÜõ/>öïœú~ÌWA^P D¬‚0£‘øB›çwwìj½ºmQL4˜€¦ªÓ©Ö\&¿¦ +s™T Þu~l^«|óŒîiªÍxªñ ±f0Ñ99/ÈñdQ¶e:û³nHMˆRÐCˆË/Æ žr#ügò8Á6öáõ}5_/×UÖ©jv“*™<¤"iñë~Éjº¨–˜â#ËœýHqRXJð ° ŽÀàA‡îò8o~[7¬©Z¶Ý7-Žlý^ŒÎOµQÝÎB…ÕŽµ{V²ûýš‰¾´·U¨ìT9.=(Ù¡iÂ$rT5ëÕ.8ÒÑA§æ®yöw”j9,h6·'_Dp‘׳Ժ¤p Í&›‹›Íån–É ¤ k6¹aç ž¹µ±žýDii‚«ª% t̺JµD󠇨±ªTúöò™\Öûí)g—y´$x.ú…(NÝ2»:¿øîzКçi“Ïš¶l«mµkÙzçíâ½IÇ󬿵«›rÝÖåú. +ß)~wY¯t¢ˆ†1Uš›,UÖô:»gu9ß ÂA–Ü©•À Á‘ù]Ù4Ô7uÈ­¹!·™Ïí4£Y&WBo_†õ½wL* H/XÙ5©pÁFÍš‡][þ†p0@àJlĉ’ºE)\·¸âR¶kÐCy6ì²9® ¸Dæ½)~¡xqØÃœOµå¹3tu*¶×±ž¯1‰›¥An©T¾©7G†–YN}šgb¸²`èçNlÛÖñ :jë./ÁnLP¨3åÄ%ÇjGÔÒ]É2gF‚âû·—g”£ïËÝêP®*`ë’•Xuµë™…±¦o8úS:¡`SÍÕ)S^!$×¾ŒáéXÇ º‚nHZ8AR+L°òècpBO§&LPcXx¸¯>%„¸@¢H’&o"¤@&a)¥ =üó17ktÀ?4iî>J¨3Û;yí{Ц„VÏnÏç8Ep`¾ùjdØp£D>²û1i¡q?xƒ®E&M.Ûw¼(‚l|Æ<€æë7˜¹±Ï”µ"â±ñ¨“Ž¬‹§à«#×ìóíz~‹!]¬ç%~{[„bZÌl ;%?? {úú9•†ÖÜ5~¹S;Çäæ +Âsñ| cšù‹Yî‰&”4<Œ¤Ioz ÊQæàí°úd'ARt¦ +"'†VÉ!%֟ÕŠÒ¦K©ŠD´°÷Ë5ôN]!·‘7û•è^K:¾õä¡yØH6‡ äpÛû Ì&Š¢i¾*:ÙtžK•×ª€Uy®æ„ÒùÃsÌ„do™ÝXŒ”s¢É=z‰&*¤{à3µäËu@¨ê¨zö™ê‹.ýÿ©Úcç/Ъ +¯í&ëdd1RªÖe§K‰×½.•/ëR Vs=ñ«Ç ñÅÊÔ¨ÇøáÝùPÕ¨nö¼éThÔ—ê2h4IQÜñU;ùsÚçÓ)T¡-ý½Ã‘YøìëÏ—å§Ïèþ¾ü<6ž(žŸ7=‘U`Êã‡úçâóå"w¨‹UÀ‰žÆìðBŽ…©ìÊ£CyÔΆ6¸ +1’^ª3ª(>ÝSâS$̤ÄR¡EçQphPáNtÒÄŸ„§LâóÂÓ’ð´Ï O›?­<Ñ f(– +endstream endobj 746 0 obj <> endobj 747 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[446.82 492.24 545.7 505.74]/Subtype/Link/Type/Annot>> endobj 748 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 749 0 obj <>stream +hÞÌX]oÛ6}÷¯à#¹V¬HŠ”ôØ&Í°†ÔíK; Š-;Zl9ädùIû—;—¤ÙI³ C"€%K¼ßçž{ÅÖ³7?~PlÝÏœayZ°¬p̤¬«g«Ù»ùìÍ…bŠÍW3¥YŠ?\T‘K£YnR™j6ßÎRh‘iV6_à&U›ßÏ>óó÷ÌÊ‚½9{õŠýÚ UHÃwë®Ún›vÍ~j‡º[U‹Zü6ÿ–L°¤ei-K”Tβùù,Ê4‹ºõD÷e]-ëŽU›ÍUµª”Žß°ËÝ~hÚº÷JßÏg6+˜“Ö1©MY–Lf)ô!:-s7¾Gì¦ï‘ÊŒñ/ú!1¥OGÉð2+Æ,«*®š<¸úK%L†À˜N•H¬Ìy.­ÓRËŒ[¡¸‰Ês[ò_qƒgÝ.[îwŸD^ º:<ïúF$w-%ØGšRÆ´v9¥ŒÜ(£© +nü%,4h‘á“œdAóãõäë×®ÿòØ·ÑúóU0NTƒ4V!u'=ñ?m¾ÝlØe³¾PLÃ{´@_w"1F*~'4“×K9B?‚7×¼½ûB[ã Ëݤ¥}ßy0§ä;ÿðÐÕŸbþ¤m.eéBÐ i°NšŒ4Ä^] æ¦زŽ¯ºOMuvusÑÎnë/<¤L¦°NàM©‘Î!°¬WºÔØ7tø÷šE–pÑq4Š)‹1Ó6dš·G*IO¥þÄkzŸ(#M‰ÎŸØx ¸ +~81ke¦ì¡¾Ö¹ p×àlþƒi)7öË{JVw^ Õ©ùBf:ÏO‚†T>àÉZº´È¦|!9Ïß¾òɵŸù[P¶ͬ÷ÛºúcW@8z¤h¸rœ}sHAé#ÍôÈä ÐHEèˆK‘d² jÃç°'†+80­ ®­Ú³á:Ë㸹¬‡=¥Oƒ ZÖèYÅnw [6ìðå8…˜š¹€ä>ßSû™Ô§¹&ÃÅHmýÐÑ `öCf?j¡hêHøƒÇìB`ip|G¯;¶Ýu5²¼"ÞzÇ3¾ ÕÐìÚ׬¯k6:©-ˈiYVftí¢wªæÈqèÎ + «M9Òù_ü/£ÿ˜¦·Õ@Ô9ñi)pîNKf,d|Éò'[¢e_,Y:b-SùÃm½hV @¶ËѾcWB+þ RNÐÛ­ØŸPøm½ddA²Äúä–Neæì¤*#Ráà%XÓ#‰2ÞP9xY,S,ëQ’x€$ë6Àe‚á:6`¢K©Nw´qÿÓ&B¨oÖmðø˜vŒôÄÚø;Ú¯Jx3ÎàJ¼ð},°r@ˆÂg³ DXB õöÑöxÄi&OÉÀHkcˆ&/ÆÕ, Vó›ÞW·KJ9m—>o}½o@e2ÍŸ¿±±’»¶Š–+ÉæЄrjj°[ö×d… z+]ˆAaó5Ï“q¡¡±s`“ €šV›É ±Jþ¢è«­o¼\4Ñ›=±Ð0/v½Nb[ v¤¥BW›ÑÃÛ+µg@çQ3®5ðH©ˆuBb oP´œÉËúÙ¥½}Fú‰ékvr8LaøÈQ1I°š©}þ«‰ÄŒ¦¤~u9ÙØúž·~7±x=Ñœ‘NeöÉZpWuôCWW›útnjåʧ† Ì7e¾»ÝDk"ŠP»o´ LFªyÌžNTKÕú‰ +MuX <ê-¡ÞFÔ[zû,êC§ÏŤ‹¢¡Éa±@ÄÆ °œŠ ¤bùf³£¦±üžô“C}l𨟚‘'-‡¶¤Â MŒ»Û¨‡x’ €¨Sk±ñ¹p)è”’ãÓÅÇü짅ÇÎaû2‘Gßmv â,Åo0Œ{ŠPÇÞ·Ë“õz:öôñâG:HBÏ-€‰ò¹)žŒ>ãG?Ûmow-Ìuì VbÇf±­ÂÊ‚ø£5MÑþû€çXuáŸÇOø7 0ó§³ +endstream endobj 750 0 obj <> endobj 751 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 752 0 obj <>stream +hÞÌWÛnÛ6¾÷Sð’\c†‰’.W;)6tE`k½vÁØ´£E‘ Yn‘Gê[î')Z–›dò†ƒ[ÿã÷ÉÑvrýaÉÑv?Q%,EQªd¨1“Íä}>¹¾åˆ£|3á1øÀO*J$£L üiÂ@ +eQ&Q¾‚Æ#”üç7·(¦)š]ÏÞ½Cw á)•¸Þ6ú驨¶è—ª5ÍF¯ ù3ÿ4I¯IÐ,ŽÑ”S®b”Ï'SÉ¢N¶8‘½0zm4Óey¯W„gTáG´¨mQ™½z“O” ‰×¢BfY†h”Z‘ÎIç·;×)È?=d,t‡àù—Ì¡‘!8ŒÒ‚µ”'¥2ñ–þ¦‰ŒÀïg$'Ó˜&8!S!X&h„cÂí_ž$q†ïàÞ5µ'[V-" +ž>“$çŒßì 2U@XW_ç(³€ ¡‹˜5#ëÌ`Ü›ñÄ A¾­‘ÈKîÏþ¾ö;’ìÇHý“¹(HESÖE©³’ø:.K´(¶-Sâ=TÀÞ4d*%åø P—جiÈü.yá’WAéöU­Î«Úf9‡ŒT´«:fMÇ_tSèûÒü¯¾T9Í2Wª–­«TnyàI‰Ìû¼0í¡±FV„f`÷Z·µºE`u¯4™Fp dÜ’A~[— Pš©Ö¶[@²·­ ÚƒPî46lN±òŠOšÂa¸ ø7&…k_eYnËâ+áðmµ<Õzê7q¥+Øi§í¬+_r§ÒÆgîZÍ·ºefµf¸AàBÁóàí•óàˆ–n†¾'ÂÊ({Ih×Bã®…BÏóÈ°>‚Ÿ~ÿøq=AesUXJL‘%™ +HäæåiïmHf/ž›}±­®ÐMµöb;åü4(²×¿6›ÆóÇìþ1çöL¹8 Ì!Ž·EY:”¾¯¡ñ9ƒÒ^•å¡hFÙ5ËM}Øímnp|õº²—<ô¬#=daXˆÄ‡È´—Ṏ‘ºx¨Æ;\?Õ  &J„͆H[úàÿ—-Z„G› ÒC/=ôþà-LÄÐJP47}(ÇÚ*Roá]QÁÞPï\“K¨À­¿À…¯šÔ烕 ËŠ‹VXf¤<šâ€H.M`› qȆ¸ÓÙ¹ ãöˆEU´E]9÷ã4å,VÈøwÉ90'yÁ æ,[}$¸Ø.ËÜŽO,[Ð}YÁxž±¤a‰ê’`iÂìÁM«3¬\Ø;/\,üû·" Í™vm£‹ªÝ2T(ã° +/˺u6D¾¾,A-ÿXåa« ³}¹3«B—Ú3áâv9²“ÆuiÑ)oŸ]wŠ;ô/QëX/‚¼|Ÿ }YÒù*~¢ +öyœ²âئ™:^uüºæÚ?´zxcrËê'õ‹óì}Y¯ìöÀñ£Þšïûg<«Ÿvueª~ å?YÕÑSx.ÃAó³#ùQ#Ø£„F,~µ]ØKêö> endobj 754 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 755 0 obj <>stream +hÞÌW]oÛ6}÷¯¸í™F ?ô‰bkœ°¢H¼¾4àش£Õ– I^¬ûAû—»—¤lËI±Àµ@$Säṇ÷ž+)XM.¾»Q°ê&©Læç) ­,'of“‹· +Ì–¥A⼨<FCf¤f›‰D!ãÂÀlŽ7RÅ0{˜|dÓ«·ˆ./._½‚÷-W¹0¬YµåfSÕ+ø¾îm»,ç–ÿ<ûw2~'-Š$H •&0›N"„”qÀÖGØ׶\Ø.Ëõú®œsUˆ”}‚ëf×WµíèÕl’Ä–Š$¡MQ âœ]ˆ©Y:<ÇØnpü¥!eŒ{ˆ¡ï…)œàÃ8T ª* TMæ©þXrcà ¥âQ"2–ñHkYh³„+–óHeYR°÷xƒcmã§-vóxŠwx–ctÖ·]Å£'65 ì"•¤˜ÖiF’"ÐÊÓø“'ˆ yŒ‰$xäÃõäç×®ÿpÚƒú?žæNÁ¤"§3ádzRÿrÏo×k¸®V÷=¦a–@g[#ûk,LfbHý¼™vÉ›bíÊ:=-kJd-E|TÒ ‘—Dœ-ʾä³_UªDQ¸*¥Sš5w韅t»ÙÚyµ¬lKn°êw-Üq­Ø#—¬ÇÑf ;ä-ì«u´€Ÿ(bOL°üåÞÌ°AÊÊ­€ªƒÎö°iº!{·+Å$‡#ÐÃÊ\û•¶†¾¶MED?ú{ë0Ò…P§æ3›6^ ÛU«Ú3öš iD‘{=ÝG\éü’ÀìýÈ®>—›íÚ•c0«ƒ¶Ç‡b´ +‡âÜe02CÞ¨¯fäl½n¸JØ™«åF²Ïè'Œ¶±ÐÝûg<Š1oJ˜ï]=Óm¯2QÄGŠëÁ@ +¿WëðI±²]í6¶îÝk‘# üÓBˆ&ñÑD˜4ÍÆ’†Ô²Ë6xø§ÙãÖþblj&E–h¹…ìüœ°…H’pà.Ùü¾lÏF(æ€pbЈUÖ‹1žÇ©¸V”£ÓÓrÈ„*FÄ°EêÝà©jl¢™;ÎÍÐÖæ¨1&$,,OeØ帩ƒã^ èñrîGHÌò~I}hŠ ó¦Æj˜ãl”Î|º¾+7aÅì ç„@pŽ‹ÅÕ"ÝÜrø}è'Øž$²u˜Ø®ç Ío-v%"eÛ²ëp+¸ªÏÁ~ƲïC~à°ŸG1L‹›¾lq¸¿¼û4pq!‘XršTK4>vËÊ‹oŽ€p˜°ˆÖïi»àÀÿ£ý·-Jº¼e/i¹EM1ô'”/î9<‹ƒ>ï,eo1à– +@±Ûúå-í¤ø2«cÑ(wR—5­íwm êõgôtj°ù +DdT¸Dª5Ô;t|ŸÎÈâp”G=ÿYÅ^¦Â—/ðâlA‡4 ý½\^¨Ë ­sÂ!“óƒnvâX‡SģؿæqX±©öÕí’J4øÜûªî8šj†ÕzU/Ñçc»¢;ï×àKg³u 2šõøÖ…ìI\ÅhTçþ÷©;¤d°û$mS¦Ô²ª¾jj”q Ô@FÆO0Ô ¸¢ Šød„r»¶+\àwÃD¦åƒQ±næe —÷%î†QVs„yªÚQõãcÂé~«@øfÝônMìuJŸê4¼aêâ¨å—kxgýJ5f‘ ½ø¦\Óy$Û3¬h_Gªrü¾ébåØb÷ÝÚ[é°<|+ø×e˜–þÍ;¼"¡§¹Áw 0øÕ£è‹Æàx‚_¹Ó8–Ï=ùK€U|*R +endstream endobj 756 0 obj <> endobj 757 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 758 0 obj <>stream +hÞÜVkOãFýž_q‹ò@<Ìømm‰ 슪‹ëÒ›jåu&‰»‰ƒl‡UýAý—½wÆNì, J[¤ªæœcK˜ Žß}0« ¡ˆÀ‹p”j0¼IÇo%HH¦é€À_¼È(䮡+¸p Y¢páÅ.$ÞéAòuðÑ:; >`t<::‚«’Ɉ»ÖjV¦Ëe^ÌࢨU9M3Å~K~ÂH®‰äðØ÷Á–\>$g!…×`;ìk•NT £t±øœfLÆ<°¾Àõj]ç…ª4èy2XZÀý¸ãÆq Ü‹R©ëÖ“X:Güî$v†¸z+ßô%Ö݈'½¨me*Ã&S74™¾O™ëaÝàÉlŸ‡VÈlDZÃ=ËgÒŠ™-ÃЭ+¼Á±re–MÖY ,À»FXœ2ãe•3;À…«‚ú« Ô0Ç Bê¥7iiÒø‹ùˆà0?)I0ÈÛëÎק®ÿpÙË þ‡—éSpшæD°#‰ïŒyºXÀu>›×x˜®U¡*U2Ûu¹´î˜ƒº´Ô„·ÌoÈ:š¼Jw«jßh-æq`˜L7¨à @do«j-¸ ¿èôá×2¯RPfPÏLT•Ï +(R]ª ㌊ƟÛ2Çù¢žŽ­½ÍŽ¥‚¼ÂaدÆãboHX³¼¸Ä‰1{¥¡’àTv] ^ýÙ7Œ­5aµ [ÒjlÅhòO0ß)s‹f-+&}ë+y‘b®°îQVº¼](¨æfŽÙö9…lc2h1:¼ y왓Öå´‚‹M¬Òø¬+§N¥ål½TE]éx„YàG M5ؘ͑ü/Ü€»›C°&jZ6–÷%y¸UŸK~ï4Cð0Ú¦¥7ZC0kšÜGƒÕK„žÎ‹ºÁ;;††Xi1éã9Üï4Âëåšÿ‚=Kë´!ä2î¥À{€}Zâ©ú‘ÃÑ„ñT7”üHiÃÑ*ýP§e=zãNwp¼mdC#O.$=nF±^ââ›<­†[Î5©ã„ÎÖ“1ƒ?Zz»<žo P£¹Ê=|ò©>éÃ"µ![ÑþReõSºÀ ¸dlé?¼Ê3Á‚hg=ú¬KØ„ÞÈA{‚E²2šJšˆE¬;0-ivøÀÅGoZ+x.-‰­œÔø›5(DR¡lTˆ5ásLà1éšÚ„påÞÍÅ)ìOŒ²±ÇÔ`ªu‹Kt 4QP’vˆ]e{Bð8ú(»ófóRÒÖà‘^C\Æî÷À¼r]ç“ú/­p7Ðo•O)|GÜYKéOFlF¸1n û"kkGæÞåéE1]=§ò¦”àlzšxòáô<ÂëîCxÀÿû9^ç8º#œl®Å ‡ôÄ{L4/á ¨zþóh¼‡Lƒr0¾ñ/ÚF×C¿±æ… 91¶O¨{c´6Â3½h¶Ù'ó´ºJkt=zù0›ŸoÀÕi’œ__^âðéûóÝLì¿ÕE7™ àtE±¬9¼F?ƒ~löâ0nG#ü9}PeE»qúèS Ñ&ê‚ö 膨C8 âóî‰vôeþTÿ;%^Ÿ¬‹†÷'Ðþ5>M%¨>©õ‘s{Ê¿ñÝóo/8x5 +endstream endobj 759 0 obj <> endobj 760 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 761 0 obj <>stream +hÞÌSÛjÛ@}߯˜Ç]‚Æ{¿<¶NRGô¥äAµ×ª©/ 9 ù¤üef%9 B!Š@»Ò gÎ93£ e³/· +ÚžyAF°Ñƒ‘Ðe¶fŸk6»T  ^3¥AÒC‡Š†`$J õŽIBAi“zI©,Ôì;?¿¸‡æ³ùÙÜtBE4üÐvÍn·Ù·ðuÌݺYfqW_Q%3VÒ˜œƒJ¡òêsV¤´¶~ƒ½ÈÍ*w0o¶ÛÍR¨„žÿ‚Åáþ¸Ùç~½¨™³‰„ytP›” pè5Š“v¤oãdMqÆ A’þjLìH@AO.ª*LTM©^7ÂXþZ*Q9 <ˆJk™4Zî…âRT*—ø ]è_wÓV÷Ë#O·o"DR—Çÿ]¿•§Äþ<(•Å1­}(–i¢!ÕHãY8BÐÂÒ»„ù÷ùîóOç_¦ýÔÿ8mè‚ñKäÔéßíÄk~Úna±i©™†÷´}îDe *þ 4-&Ï+<þ4¼AÃëiw‡é}`làËm +endstream endobj 762 0 obj <> endobj 763 0 obj <> endobj 764 0 obj <> endobj 765 0 obj <> endobj 766 0 obj <> endobj 767 0 obj <> endobj 768 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 769 0 obj <>stream +hÞÌXÛŽãÆò¨¯èGÒ^rÙÝìnÒ~ræØ@{Vˆ¬ó@K”ÄŒDjEÊãù¤¼äsª/¥Ñì%F€`aSݬ:u;U½œ­goÿòŽ³u?Ó’™¬`y¡™ÌØ¡ž­fžÏÞÞsÆÙ|5ã‚eø‡/L*32K3Áæ»Y)i–—’ÍXd{è(/SS R³T•e9åÖ×å4’_¢ ÿøÊ»©¶Û_«E :zdï†çm퉟ܦ£ ý[Q(eˆ… ¿§Qc'úÇÎ[ÈbÌÏÙõ€êæ"QSÇhsEôò¡Þ×Õ@+ʽÛj¨¦È 1®Mj4KµmûI½P9í_@ÍKøæÅÐböÕGD.Ò⹓+þE¹s:Ÿøfå\•¾u¿q~kbœtöß°wÏ(ŽßÙêÐíõt÷>õ‚Ê(ÑxQ¦èϯ{ÁhÚ?¡K‹@HýÒ ’šö'½ Ê/p;l­V£ýÅUnaÝwã-íÃPØû±hKƒí©¦OFZzÃØU8YÙ' õ"ÊïmÉ£¾¢±ì€k<(•ºv_­wèfàæÈv7è?³~¨†zW·kZ6€înà–Ö-ŠÚ@ÃV™´4›çQø·¥Ò“Wr{æŒr[÷ͺew¿ƒ‘ÛuÍî©Ñ«Šä&JžºZl Äæ‚LEq×䥓©ä`ÓÁ1A "æ@Š¥¬Žé…-ÁÁlY¯PšK—”¥±Ö›Ñø09ñMÒ=£¤ Ž­¢ô#…' ]“û_ë¡Ï JÌÇ8A5»Ðæ®×¥ÈÏä_Žv0AœÖ1§&„*§,«âi¹;T3¶Ò‚ZiH& • +©NnånrŸ§”C©?¢Ô oHÃ-¡æÈ'8‡^mB-tGÄfÝ8-Ô÷ÔË`å½ÝS†Z¸üÙ¸¬û1iõc|A]ù%íȱX_„ñ2‡-ÒºØ3HÓãVµK+<”h0*9ã^0ßvÛ;1%e{cAÚ'¹ü„*bmzA¼Ù½fÝ +ˆº~b0MÖ`„wÌÚ¼|Q´cÞ*'ŽŒJÙ÷+‡TQªCÍÚn°Qs˜²Tè+kèìä0 J bëÆò}µúz ¤M;Ž³ ÝY‰qiLÛáIÓÚЄÚçÁ¡ïq!~ã å©ovûí3[vζwuÉÊÉ8BG„ž’ɦÉÈb„ANüáM™f­ùã·Óp÷ ß–Êsv±œB3ý¦¶ÂÝžÕ\G‘¶£2ýøñ ÒQÈ2‚1”V(ÄE]/GŠôSÏé¢Ä énI’ªùó.J¦Hñ¡¶“¼°3a¸/º?ä´£pòRAê=·ßa—»ÏR•û/›D³ðéäËÓ†s?e5YRb¤©Mç[ì쯠&Y8ÞÞÎø·kÁ±^}…»Ýí®~/‹sJ8XJ ù(' s?½YÙp€{ËÎ7í«—ÁõqgŠÆ¿0÷´—Ú`Ò…çè +ªOøœâÄ +ÇZ +Z;™¼ ƒÆׄ‰[“dŠ%.¼Ðʵ$€^ÏÒ³ûKþb +õè‘üÃ¥•Óùn·ïh£i| 2/·CH¿ŸÎ'ÎB[»ø0‚ù©Ó_lŽ¶ #ê—¶y‚¨iÊkaäÐùdä8Q¥\–+> endobj 771 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 772 0 obj <>stream +hÞÌWmÛDþž_1_@ö]²õ®ßË‹T®-tºF•AÈ—l#ǶÓ& ~ü þ%Ïìz“\z$@BwrÖ›ÙÙ™gfž™HZž|þJÒª%!¥AFQ–PP«GËÑgÓÑ“—’$M—#©(À>d–ŠPQ"P4ÝŒhA”‡4cȈ¦oGßzÏ_¼¤Xdtóäæúšn[_f"ôšU[l6e½¢/ê^·Ëb®ýï¦_â¦ÐÞ ™Ç4‘B&1MŸ&P8Ý*dÝFõ.º¥›ªè:ÝùÓF/¦£8ÊáF"â„„ +ó<'eAY‡%ÒÄ}O…Š| ‡Ð| G0äÆùœðe”9ŸÙ0™†…©uúëÂ#¸y H‹ÔKý‰RA®Dä%¾ô”?‘içÞ-Øk+¶ØÍ{ò¬^ûi&OÛý¶+ýIÁ¦f8 Xã£T’2@lF>˜HkÆï~ Êðd#Éj>}^¼¾ïóoŠý7ZÿÇb& +a"2ŽA0D!H.*àÞù¬ªè®\­{3ô:d|§[†Bzo|…2ôôBSúCò¦Ê$o‚J}·ˆ3[Ä'r’ªóL>–ãïtß–Ú—œƒo¸^ïôV=¯¸üž}ñ°pOÁÚ#5¤ãƨWÇú¨}@åÁŸÀ~£ª¹ÿAÏûŽæMÝe »q‘Ñ-#”gl6F*6Ò3F¸SMKÝVÏËe9‡uÌП¹S࣡½¿©;¸ä š®5Í-wP¿.zÜÞ¶ºÛ6õÂFw¢€zzID±C)6DÔ78Œ°<êGQ“1NDçN¸båªe›Êz¡}Ü&½=Î,¨hÁ• +¯à’j–¤+½ÑuÏÆZhBXŸrO:GÀ¥J÷t°šA2¡È½Àí‘CRâÑ ¥Í%A¬ñdhà:R$¹AÁ‘2ƒí ˜Øë}<›H–ûüQ¾ñCÅÛ•9 ìü*X”‹©àfŽå3«ü_Fà9¯ÙÑ`î€ó`Ö“—±M:P¹:µ1Ë[6-#JM‘=‚Ô±L«¦ÙÒ²m6²%d)£±3˜l,âPéYO0x÷hDˆQÙëMç²Q/¨ùîBõ­ÇÚMÄÛØÛ ôAs#ᇌÜØAŸ?’€Ñeœ‡€¦è¥Qšp@#Ó@ð¸ˆ'Ä’3c¹Å1àÝî¾Ó?îpÈÆÁužnáÑŒ!V­ÏݽàŒB÷ã"ç —v£ñùÙ’¶¯{Ÿe7ÛJ?}Î\ä‰íµ¼Ä@tἈÎ21žyå'>ÜGT~LÏ&Ÿ.ô²|]OŸÖ;lo¾*ºífÞ̇Àõõ̧ŸâÌrÜBnç•7eA“OÁ¼ÞQIÅÇqŘ>Äv]l4V{‰ÇûõÛxY³~£wzMÛ¶¬ûåÌ׿^ÓÝ‹›)}ÐÑ ûÏG°˜ÍêßÆÄ:‰5$öÇ•dÔ  8š˜ê?ïGP®µ® À§uMóV/¹Ò¶sä™Åñ%ó`%Ó!uõnÑ -tÒXFKÀh5kêúCeLŒ¬‰(¢û9PÖV{"‚ø1×e:¸¾‚)]ÉŒƒV‚>Ò­›]µ ]÷¾bάÀPãäp./©×‘¥ƒ--ç¹|ÇMcJo»ž‡ ”±kÚUQ—?™4w¼c}rfiÛ&6·ÍªjlÌßr»¦|-vìÉ bË÷‹G†SBw¦þÅÁ`48Ƭø7OÑÀ»AêªÇÄÊ;#ÓeßGÞa‹,z@Þ¬d€ÏL_4Ð-á7Ž÷óãì<>ƪc˜r]´W†<™ÛÉìt"à ¹mÑ£†ë£(öÏ¥Qá„ÌÅîí…à¥T½Û@êÔTÎ…L`£nÛnÒ” ª +ˆÛ‚ÓÜò÷cšÃ&l_]‘i/cf˜+ÚWXp“ÁúP @êA“²²ëáw +ã¦1ã—¿ ©Ä^™Ù‘ü|àRÔ¿R™D˜Jtd < b'éÊ…væs¨Þ×xgžÅ‘£Ë…+$1ˆÍ5ÂÉñX~Dø=w}PÞ2î&”ÿÒar„â8tvÕ?½?Üþ`Æ#A +endstream endobj 773 0 obj <> endobj 774 0 obj <> endobj 775 0 obj <> endobj 776 0 obj <> endobj 777 0 obj <> endobj 778 0 obj <> endobj 779 0 obj <> endobj 780 0 obj <> endobj 781 0 obj <> endobj 782 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 783 0 obj <>stream +hÞÌWÙŽÛ6}÷WðQœV ‘¢Ú§Ä“ RdŠÁÄI’"PlÙVG– INâOê_ö”¼!™´( +¬ånçî” «É“›×‚¬º‰Q$å–$ÖÅI[L–“g³É“‚2[N„$?\„M™’$UœqIf› ‡Æ“L‘Ù7\$döyò.º~þ‚hfÉôÉô‡È]K…e*jVm¾Ù”õŠ¼¬û¢]æó‚þ>û–T°¤™È4‰F“Ùõ$†J>ê–Êéöªï‹|Q´dZå]WttöÇäùlb$K 1L¤ʲŒ°Ärž—¼—žG™LΈˆƒcPž?Qȼï1±£Ë—H\* >ßæT%ðrO$4Ö,RKÉ3É’ÈP)‹4ÕYt‡¼k›À¶ØÍ{B îÞÒÔ2á}Û•46`ljM+îÂ#¥I]|Œl€ÁE€ñ'ÕÐ i‚’ÍÇëÅã·®“í¿Ñú?fóYP†Y—>d›‹ø—6ŸV¹/WëÉTQ‡‚ÆJ1}¢] æ¡ ò‡âM¥/^ƒF=ö°•±Ì„Jv7`6)”$Çæh¸Àü²îÉ¢ &Z–oËüC½Û¼Ê÷EÛç‡ W†ÜµÄ5øßGdÞÔ] Èy!rEúuÙ‘÷ôg/Ä2^ìSS.ÈBAäCåŒüs?’Qy8‘ñn”õ¢ø ‰ÙÕ$š¯ó–\]yKÇ·Žñê‹8Þ‹sòú‚¼v®áÍa|%¬Ý\ØœŒ0'C|gë‚LIÛìú².ȶmú¦ßo‹Ž,]rÓ¨¡®ýƒ[B2“…Jó*ôXj:èê¡ëéÝK²ÜÕó¾D„È<¯ÉǺ¼¸`Êñ!¹Í®^ ,Ä .©’LÃ^œàRU 7ŸÝ^–UÑý4LèqØà¢u.*m‡=p6¨…üê &÷ÁÝîÛ1SòL¡G›>FͶ°Û¸Ï?RÉñTQÿ‚Te×wÞϹGࢂ>'A=ôoX2@ ±¼'ùv[íIßÞ¡N™=Í„<¤U€0ä¼.ëJü¡o‘Sm¨{•»…Î%ÖúS£`ëNœ´¡+ó§-¶§dY”S©qÙÓ =1êÞ­±Rža*8Ö_›úºðî]Õ3Uf“Œ†¹ßU… ä×Çu’^,Û`xÚ6]7ƒmŽZÌ«§-Ñi†Ùr;Í«I,y”4h¨žås*óCG…Û‹^>Q™[xP×6[ªÜxc^@qÐw@å±´¡Žh’b:=Ú@µñz®‹#+õ Á•ÝÊ .àXzDi0¬N ;ËüŠÏ¿!‡BFØÆ*ê Y'k+3¯õ¶¿@r$À ƒ»FëÄSßÔe£z ;†Èe¸ßtÁÁ4HÚ,ðÞæs>R¤=yÓ—ÕQaPs[vsÏ–ñQò>pÚiÏ·çå[`<À½DKwvñÍf¢vã‹—Æ)ÎVx¾¦îFßÞç'9_WVéó©5”õ³ªñµ¡£‡|…y ® Ç£C{NWœDd,‘©bX]–áðf|¯Œ‹îdŒ"µbú0E’ãi³Ù6uQ#q–XÍBf¯/,iT±˜ß¶4p¢¢µtm»9ñôXâáp:òZw~NÍä»zÑí8 ŠóñúîômÞ=¼^—ËÞ•Ÿ«½ ]Š¤Û.aÜHK„A íãñC錦ßE/ʪr9R*ƒæ^](çÊ)W¾yÓ-¬:è>Œ;çŸί7Ó‡Ÿ×q8*Då•G‚œ‡>»™ƒì©&PÏ`+ “ÁÆã0ðµpÝÓ±{ƒ=±u.ã{GÃÓ¿»0f„3†J1ö{Ù‰=)ÉGJDà_}¥BÜv]B\,¾ÅܦI_48ú ¤áãÇÿ`ÚZ9| +endstream endobj 784 0 obj <> endobj 785 0 obj <> endobj 786 0 obj <> endobj 787 0 obj <> endobj 788 0 obj <> endobj 789 0 obj <> endobj 790 0 obj <> endobj 791 0 obj <> endobj 792 0 obj <> endobj 793 0 obj <> endobj 794 0 obj <> endobj 795 0 obj <> endobj 796 0 obj <> endobj 797 0 obj <> endobj 798 0 obj <> endobj 799 0 obj <> endobj 800 0 obj <> endobj 801 0 obj <> endobj 802 0 obj <> endobj 803 0 obj <> endobj 804 0 obj <> endobj 805 0 obj <> endobj 806 0 obj <> endobj 807 0 obj <> endobj 808 0 obj <> endobj 809 0 obj <> endobj 810 0 obj <> endobj 811 0 obj <> endobj 812 0 obj <> endobj 813 0 obj <> endobj 814 0 obj <> endobj 815 0 obj <> endobj 816 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 817 0 obj <>stream +hÞÌXÛnÛF}×Wì#‰€ôÞ/èSb'A $5l5}HúÀH´ÍV& JnšOê_öì.)‘”M( +T$™\Íœ9sff—ŒÜ.ÎÞ_3r»]hA µDZM%m¹¸Y¼Y.ÎÞ1ÂÈòfÁ8¡øó&œAsÊÉò~Aa%§Ò ²\á e’,¿->'oß•[r~vþê¹lSfs‘4·mq_Õ·äÇzW¶7ŪL[þO"zR9sŠd,gZ‘åÅ"ƒIÚÛæÂÛ¦¯Êb]¶ä|Sl·å6]þ¾x»\(é†Î•&9Î9’KK©ŒižÝßG¤9—£û Âó ÂMº§Á…àÁMiû˜=0f:`ÂÄ ?©ó;ᔥ™ÊMbÒŒsêx.²D¦3F¹ä_p­mâ²õãjGRoŸRcs”ñz»­ÒLcaS{:YÔóù6ž Ãu0(‹0þN,ðTâ݃$ÑòásòïsŸ/\ößXý/ Y:·>´ËÕ“ +ø—>_o6䪺½Û!™"ÙBñÛ²M3!r–ü™r”aR®óÒïÄkx¯F¥öê=郞 )sҦÊæòÇr·….u*Wɺ¼©>B‡øI²ëqiPÕZ +ß„É%¹B©Ù'vkÑ+bÝÒûûŒ_¦’A¢Åînb»\Hê¤q†rÞÛ±DÓmóÐu…~!h$_Ë“6)ïH:F¯¿Öånl–2O„B:Ðt4Ýw“'ì*kD0q âÓƒ¯v‘Tõ˜…nË-‰dŸ@­Œ0Áö ­ÚrYᙳ©ƒV”ƒ­ÿÆ»^÷±©a>èªIñ¸Ù‘«ÇMlæ&gBź?5…A^F±Ðñ¼ºšú6‚˜½IôŠ(º¡Óó@á”GZ/«:H™S•ó(‰#vr‡~Ÿk}’\L¯(‰ÞÔk̯º.>4ër3¦—… ÉØI)*‡…1#^EEÐAT¯ù}’ +iÅÐ$ß'ÍFúœxë¡“@[¨ëŒã£Â ͬ®ˆ_ÒrB³ œ9µÓÀºü_•·U2äí›L¼8q7܆ÂzÞW·TÚ˜ÿ§É“Ò*5dx$£«&…ZmòÍCæZï :f‡ëÓnº¥L  ;ôï&ß&†÷‚BÁ²“–±é2ï­«Ú»€p6H*ìãæhfصöSŽë˜ÐëUQ“ó»"”›ó9ÕÁáÏ-ögåzŠ0¡Ÿiq:©BÛ™ÜK(F§+ïsR°kÔ¾?‘Ó™86M˜}Üa\EYúKüÒw¤pƇ鈲‡rU§­S°§ÃVO‡­à¡O™Ù²ë–R{4ººÊ›¸‚šNbêÔãî¥M L¾ iuk-H¥07ôõgñÜLäÄ ö SBŸ$¥ b¢ƒ8r«â¢ØcÄ(oÐÐ5¸ùæÍ•ïqÄ3—+ÖñÞ®{Z7©7J;]î¾oÊ L)hä#^3ÑúnÉO)“3:†m¢›eÊ8Émfñ*e 6ù#8”vóz²*Å[¿r‚‡º±ñjœÃìãéú.Ò3߸2öÁlè`Ýüžó¡í؇Ž>>TÛU¹ÙuÙ<†ñÇûB|Ó¤\áÐõ×Ä£íK¸Y›69ör‰D‘¡GÑ£®:Èý}ÙÜ—»ÖŸчª”á}šn¦|§³^,Ïã<䀩®‘Aàˆá³‡À†ûrÖ%MU年»ßîBgs%‡)d±Mê#ÎÞ©xÖ÷U-§L˜}ýâÏ;a}÷l@ôp_©úco·¹!_ÂïêrMŠ-ÁÉ\šx~©Ö??©¾–¤¨ýHWÉ÷Z­>óÄÁË3‡Œ_• ë`x ¯GàÎz žÄ²ý’ÆHºç)™¯¦°Éf@ïwkƒg(?ÖØû§Mœ í}±ó›¥ÌøY¯“‹Ô?FÀÂð(¤ÏŽ‚ÚouØkXlG}cˆApKiŸŸîV÷¨¤¿É°×´ú©›ÿ0ÜÕù> +endstream endobj 818 0 obj <> endobj 819 0 obj <>/Border[0 0 0]/Rect[260.4 629.28 323.52 642.78]/Subtype/Link/Type/Annot>> endobj 820 0 obj <>/Border[0 0 0]/Rect[226.02 153.24 280.68 166.74]/Subtype/Link/Type/Annot>> endobj 821 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 822 0 obj <>stream +hÞÌWÛnâF¾÷SÌ¥½[Oæä“z• °Ú6iAíEÓ‹YŒcG¶ÙU}ŠîKô-ûÏŒ ˜@H·ªTEÂÎø?¿¡(u®ÞßS”ÖNÈQDb$âq‚*å,œwSçjDEÓ…C"ðG˜3q‚ CÓ•C@ +&"áh:ƒBš~v~qà +pŒn®nÞ¾EãÊ£1æn™VrµÊŠ}(U-äLy¿N¿MÜj +0MäSLÃMŽ"I'›q-Ûˆž(9WºÉe]«Ú›þæ §NÈp‚#!B„O’a"¬KÆKóÅLô>B47ÁÏ]ã{‚ࣈ;—µ]4jíâ‘õùNz\€—[ÄõüGnäùŒ‘„aá†uϧQ$î^à¬*-Ù|=kÂÛO^ãÐUö¼ª3Ï°,t4M¬ˆca¤ã£ÍHZ3µfüå y~µ‘ÈJÞ?þ=÷|%Ù#õLf²ÀCë6 $z>f®LUý¥+2, ÏëêÁsÀˆÝOÊ}1pÆq k‚ëjØk<4 âvi°‹ÖîŸD²£ïÆÚípt¥Cr+‹t †AK˜¸ëa ?•*Ž— 8‰ëÁÆ +[•m_ø<¤C>8fÁÙ|è%voÒÝËH‚ÁN³ô ´@-ÅÍbl=µRBëÂL¯+ÔuÖ£vÆ»û»(ºÎÌl'zÏ ºFÌ d—²öB÷VnUõà>xhVuó­a›¾éÑŒsØ©:£ènÊÕSY\¦»Ï˦¾@3ÊòüÍx]/çåçâÙp3SOÍSZ¨Ãàü´måâ’ùcY5™Ì/9ù$gJ.P T¥Åd«Ÿ³y³´Ôp~‚ Î+ÄΕû\&Âùžú ‚æåúc®ÐS—å;¹¨¢Îš-pn]P}em™CcðRVoP®‹é¹R­N8ï[xŠ~W5pzÀû"ãÎVìÕÀû)f6€“ˆîüA¡b½†‰š5Ðô¹ªO°ìûŲl Ù:ªfÐÏÕæLì·¯#Û,_'ízÙ³q™oS ¼àWÝT š­<.A@RÕvSM´5|'ëdzõ¸2$‡ßÿhêy A€«a;ðô¨ž9:”›Þ*êÑŽƒµ#RĬ`ÉX°[HÃxÀ¦†ß‹Aðàx…Û¹?ø0¼ž ¯{f sßØ“9ѳ‰ÊE‡ŒÎ=M|ÇÚ^Zt¡qy(@˜ ’ +À­¿^¾½î +endstream endobj 823 0 obj <> endobj 824 0 obj <>/Border[0 0 0]/Rect[267.6 499.26 343.62 512.76]/Subtype/Link/Type/Annot>> endobj 825 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[345 294.6 515.76 308.1]/Subtype/Link/Type/Annot>> endobj 826 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 827 0 obj <>stream +hÞÌVÛnÛF}×Wì#™D«½“DŸjEJ[$¶k©7Ä}`¥•ÌB" ’JdýŠô'ú—Ù%ustA‹…a‰âž9sÎœÌ;½7#NæUÇH±˜¨ØÉHi;³ÎÕ¸ÓrÂÉxÖá‚0øƒ/GT +IF™ ãe‡AÊT"ÉxŒ+2þØy¼ ‰¦1é÷ú/_’Û2ä1•A1/Óå2ËçäÛ¼¶å,Øð×ñwp’ô'iÊMºœr£Éøu§ !YŒíBßÙtjKÒ_¤Ue«pü{g0îh•@†jC¨I’ªbÆ”/È™v*¥Bí­ȃt‹P膆ÄŸXTq[3&Æ£&1ù¢ß¥¡TP指]M£ +»B°DP˜Ã—G‘N‚[¸€{eáaÓÕ¤&¡«Ã(¦&°þ~Yea×°È‘NGC~„0„i$MŒû4þ +5D¡‚OL’øÈÛǾ/„ý7QÿÇ0×ihŒ=`M˜9pÀ¿<óëÅ‚Üeó‡š)ƒ +_Ù2ìJIyð!`ÃÀN©K¤ßˆ7N¼œzÂÄ4‘Ù1ðÖex%œšôíè)¯Ó5Ú«7Ô>LBã J*†Â½ªb< t(™ÚYvU¬ h9øäé£ 2A!34ÕkÈÃá³¼&ëÅ}šà>$“"¯ê¯Ü†ñ‹fõéäêúáäÞ/­‚ŸÀž ª4ÞU]z3˜õmû*2·µ»ÂÍÛí4ëeXÒ$ö$»+ G+0aŒÆtô å8#÷‹%´“êà1ä4ƒ[¿7 ÷:¦yÔtl¯[ZIOÜ­A\€.2Â|ŽP& +¾lЃ´Nɬ,–¤~°¤9©i*gTy%»àƒ3¯‚›w·7׃ëñÈ«`3§˜Óíó6›¸A¤ªÓÚ.¡$’åî@œÚ³láç=œ—½sbÒM9” ±!|”¤rJ„`3Ô~{†kD“` +ø•ÖLÉô·bUûòpQ:‘ñhÿa²#ó6·=‘Cû”þ§„t7v ÇÈ!¯He-ù ít=¯þl_0M¨!šqÅÄû“Gnëå­ ¤’Ô Z+ +³©MùCî}¦ª©­m›J¶xçÖàí`ØC.Þ¦ù|•ÎýƮǻeܺe¥çš¢Qi:(mþü©ÎxCÃ}õ5¾éúu0ƒÐGûté8R )Σ ÿ %çv2ó?¤å ’Mï¿4`Pyº´÷ÇÑã"ÜÄ bÊXU(Ü?DgÕp7‡M;=3«nu3L¶> é¤ø`Ë‹²ÿù"Ô/¡nÊ >÷™Àö z=R<⛧‹.%΃¢\‚ó1åü8ËE‡¹ó\í¶¶ïv×Kšˆ^O…ŸÓÝݧ¹h„óù§+4ÈB|qƒ<ý¼éS nžÃ> (xUf +Þ-|D¸J%ÞMc#ßF„{DSr¨5ñNÂ;¡Ðr·Îg:tªÙ°‹œŽêã­}H‘ö;;‡Ú®O)xxU¬òéI{ô`ðý™xolnK”g`£bUNÎ~²øútôÑ¢hN!|˜k[WG!ùjy +r8,æ<–Oíú>„û綔p:?µ¡: îkÈlÞt¥Mゼ—é¤,v„óëÁߤ‹âL2*fÏZŽû[€aÁ­² +endstream endobj 828 0 obj <> endobj 829 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 830 0 obj <>stream +hÞÌWmoÛF þî_Á %ñåN¯²Xtë°uEâæa¸Øg[‹^Œ“Ü:úƒö/GžÞlGÎ + –±Dóȇy$+`9¸øæVÀ².„|Þ(—ƒVƒÅàÕdpñZ€€Éb àø‹b2×ÐåŒ;0I­0îE.LføÀ…“ƒ_­«ë×ೌ/ÆggðNÛbÄ\+_j™¦q¶„7Y©ôBΔýÛä;ôäVž|&"†‚‰À‡ÉÕ`ˆ&ycÛqɶ1}£ä\i'²(TaOþ\Oà˜sÜ(Š€y#ν*$¥ùeŽ·÷%ò@ +®ùãlYˆLìà—Þ¨ ™p‰°Æå†UÌ?HÛõ0ÊGp¸°‡> ­Ð:æY-èU„¡Yïðe:¯Ôæ›Y v€Owv8b¥*¹.b{ bž›†+Nô8N?#ªapQÁøËöÑ‚c{ø—@Be¹û¿N¸‰—«“éZ|¡´=t]&¬÷¶ƒ·ÐRsf `å×Å:¦x¼¨Ýö«›±(¨*™ð¾!ñº;ÌñB`¼‚g%¬daÖM¾)Õ·2ɧÖÔ†YžååN!rºWí‰OäWqQjONQǼà uVRŸv‚ïå£Ò.ÊŸU—ÛgÕßçñ! 8ɯçKUL Ô)$jQž#±ÕÛ}^–yzæEÇ(F–ë×2_Oí6:¼µ¹2ÑÛZ‘vœg¯òM6oÌñG«ÊÄ)l“æé‘´âÕ®xÕ¸1À;²_çZÅËì­LUG Ê{? gqpå‡ü“#T#¸¨ùsoŽöu~ùœ<ÖžÔq¥M5ðÔhaü~Ñ–ÊÊž’ÛM +É6)y§óuñ:3XרÊKd ÎæjÛO×Þ‰;™lö üIó|sŸ(2¶&/›ôžêµ9„âmèÖz¾ž<®€¡í“—7Å¡“-ŠðÛž¹-5Má#È`ÿTj÷p»ŠåmüÑT×åq•#è?Õ“þÉNAS×Ԉ̴÷© Y×[™®“j´·ÛIÿÎf D3ëÑ7Y)XØ®`‘e&«°’$·…‡ï(^e;Øþ¬-M_aP¬ {è¡´ 3iÀ +´àV-¾[DÌ“SùK’{9³E„-û46Ê8Sð!.WP"’S uÔ~5ã®_™4Öš«…çé:Ï°ÞÇ÷”ÿ½ F3ê@ Òº^µ/…-J¯EY³2–-ΠÃY S8G0;6þÑG»d»ãÀi‡Ä>ôÛRê~üÈmä÷±è˜½É™Í¡:Rû:#“æƒ=Ð?âú:›÷:vYuZÔn]§NHÙÓ8ÁÛWæ†EÅ#°@Úò@’ ’DrÝCNpZ‡ð.–ÇiÌÝ¥¥ç„ :beÏÛÐÅÚë_÷œ#„›íº)¾Y»ÅRâÌ€§¡P³‡ÛËÉþþ€wÖ \DÃÍÅíÛfÔjšº~…­ÆäŒJårfàý^•ÜyµR1ŽÝ`¯eCõC¶ýA3±I=JÉö)zJ×o²E~Þõ¤cÂ-êŠü—6ôŒؤþ|:]ª&vI‹0^)êf/ºÛU¤Z#k}c‡\ãjÊøkÎ|ñÚ®£¨ó5µ[4‡q¬±c—‹©u2©Ýft¶„§ „Z<¢S÷+YªçXYKü/F¶dÓivbÆÆe¯¶VåFg ÚoÍ—Ÿˆœƒ‘Ü ÄS'_€ÿNÎÛ Qú2žÓüؾÌ$p3Vv¶¯cvçp¡x«ÊÂ8{†8\*hÐÁ à—ÃWMeÖÎ7ie]mƒgg8Ùë½úo–‰Ù÷ +endstream endobj 831 0 obj <> endobj 832 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 833 0 obj <>stream +hÞÔWën£VþÏSŒ"%…ÄÃÅ\”n¤¬cgÝv“Ô¦{QœÈl¶6D@Öq«} ¾eg8àKlï:­*u±Äe˜óÍ|s9ŒuI§W}F¹d›à0,דAÆ¥HzíK§tð#I7€á/ºëh¦ŽÉ4f€?•¢hÌòLð‡xÃt ü™t'_¶;ÐÔ\h¶NNà6StW3åt”ÓiœŒ ›<‹‚!WîýŸÐ’),55Ýk‚ªkºÝÿRR’Õ؆IØ%t!Ï 5 òœçŠÿIjûRÓò†­5mÐ Óó<Ð,—1K² ͱë÷ÈT3¬µ÷ŠƒY¾D¢‹0x%yð¥åÖœÉ1Ý©3Aúm ˜ÒœƒÁtEmjŽì(ªa0ÏÐ,ÙVtÙUTÝqšž|‹7(ËR¡> Pl¼{§8®fË\ȳ ²±±:–ëPZ¯ûX®ƒ—/¼Éb<äeԾʼ•~æپ̡uó®ÝCÆ$ÞFåçß õ[Z–âorÒÇ¢¸ýåÅ-‘ÿõPÖ+Ÿ¾Œƒ¼Ÿ>fCóÁ^éïßüÖkµáÅùó¢ÏŠš—ïoý=ÇmÅÅ~Öß·»WoüÒúFËÍ +åãpo·%å²ò¿euß^ôý6Š±ü7¸“\ ígºÇGqŠâä:˜îú^ûª{s½=ô¡<]{‘¯ÓÇ$ÌÅBøs«'è?Mp<§ÓÓ¸AÒãùøl§zÿÁ·¿]÷9ÙÉhíÛ#â‹b +qø¬·Ÿ¨ÁîâûÌÅåk})Ž§1*–ÎÏén—ç_^ô™Â”uÒŒ¹ÑJªwð[áÖ¹éaë\—ß«¼&·RE("‚_bï¹sET{åB±ß­*Ìÿ÷³ÕzÆa—ሱ20,ä:r‹QãN>=%ìiÿÞÇQq‘eÁüŽÝà ¥1N@ÁdÌsfŠÇ,‚¶!E0MóÂxœ´“!‡_ɺÀ&“t†+9Lð?ýõ`Ä&HBÏSH§q!^v¥ñC®Õ84èÛb$Â\¯&ºöš¶Æ>öC•gœ×e‘k]sNdëq  eÒq»ú¹ÿ¦ÛñÊ n1?U!,ç§eã¬Í.‹ Õ¶ÑÐ1Žáüµ˜ª.ªŽàL{},[Nt!Mtô}Ù FsÝŠcê&ÎŽÌÊ“*¨[R/W7Ëf·H‚\U;«,²ÅÈ*Ppþ[€ÇŠ¤Õ +endstream endobj 834 0 obj <> endobj 835 0 obj <>/Border[0 0 0]/Rect[479.7 617.28 549 630.78]/Subtype/Link/Type/Annot>> endobj 836 0 obj <>/Border[0 0 0]/Rect[63 603.24 123 617.28]/Subtype/Link/Type/Annot>> endobj 837 0 obj <>/Border[0 0 0]/Rect[211.62 343.26 240.96 356.76]/Subtype/Link/Type/Annot>> endobj 838 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 839 0 obj <>stream +hÞÌWÍnÛF¾ë)æÈMªõþK²>¥¶Õ¦µÃr©{ ¥•ÌV" ‘vííK´/Ñ·ìÌ.)‰”Ôh$zwþg¾o( óÁÑ·×æÕÀhˆEab@ XÙÁlðÍxp4’ a<HÿðK&1× +b-¸P0^Zá"L5Œ'ø dã_?§g#ˆx'G'¯_ÃåŠÉ„ë œ¯²å2/æð¶¨íj–M,ûiü=zÒÞSÄeÁPri"Ÿ†hR´¶•&ÛÎô•Í¦v'‹¬ªlÅÆ?ÎÆ£xl0Ã#\é4M‡‰¡OÉeé.1Q®ÂÎ%Ö´»Ä<×UH]î)àe˜´)S\2nâÒ±Ïù"c:Ä,ŸA Ɇƒ˜ •©âa`˜ R6”q¥Á%>àÙªôbÓ‡I ÌàÓ'ÜÖŸ¯ªœ +–UÓÕJPy”21Õ‡ÂH›0„ôaüÃ"´ XˆŸ$xË›ïÞ¿‡¾_(öy¬~Áb® Úð„z š.ÓÀÿôùf±€«|~Wc3uPáÀWvņZs<2…( ì”»Ppò›á•^ƒ@ÝÅ°æiâaìžPÜÄ!7 ȘƒðñOí,Ç’ÁI¹¼/ [ÔYõËõ]>«Ï3¦Í9“ƒÅ¸:Þ°ùc¤r²F²ÃŽñ^®lY93¹eZ¢UÌŽR¶LºÄ§YÁlU.¡¾³ÐxŠO‚ùl˜Â%œ¼¿¸|ÿîìÝøâÍõ×ß½‰%6A +§Ûª¦ƒ¢ª:«íÓ†¼R5[²ÍC4ݦ؈—fùxpë[**.㵺jÕUâÕG 5 J†+¨ž‹:{B¿3¦Õú˜‘),euŽ”Ý–5´¾{µÁÕŸ°4.Ü°W›¯ ²þZ4LÆ)N–‘)n“r lª›'—xè×-šCLƒ„ó³ÑÕ÷<+æÙÜ"g„Àg?V¶èo1ò4n*è<Ü;j°ˆ;Á 5W½5çÊû6áâ¼v£à•›Æ¦<5~%Ñ# +qµ¶£y+ Â&´"ÐÜ23aù÷(.™àwÏk\`ñhÃÚv§ÍÈÜ?Ü.òÉ×ÈŽqÙÚq0ÃSïà&¸aÇÎþøÊÿ9Å›ÿŒh£0Üãï±Ì§øâyÝ3í®N)žª^•Ïûn3ò>Ýb3çoRN &wÙê,Ü);†rŽó]<,Qª«[‘˜àyYTußÛí^,ï[I2Rå¿ÙÝ°& *JÖ¯Õ„Œ:ë.®eÇ5žz“y1µO… áãfs¿Nð5#iyÙ!ÜQþ(_,ºl° Umd¨ÏÌæbÃV£·çç׶i-li»]»ÞîÓ²ii™bÜ!ôf® 9%æM»„Œ¸o!KGÈé!7ä¹'þ}vÍþj‹Z06‚^¯Š«.{,Agi¹Ÿ©¥UKž +37 +tˆ¯— ¨”˜Ãq¨Üá*Ä1:445_ÒvŸŠF"BœE©šåKOwY…]óY΃Ðv”ó.[ÚFÏ»ò=›ïï'{ÍnxêÊNj¬öÂVŸ7ñè‡tÅž_&öt÷2k/óI\–‹ç9ÞîMIÞÿträuY¢Zs[;%ÇÈ7uãKú!Ï^Ò¤Ç<ÛjQAšííi 7ÁPàĹE¶ÉÅ/ëjøöÞ;”­S¦íu0YDþ¿ ¢ì­ +endstream endobj 840 0 obj <> endobj 841 0 obj <>/Border[0 0 0]/Rect[260.4 544.26 324.54 557.76]/Subtype/Link/Type/Annot>> endobj 842 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 843 0 obj <>stream +hÞÌWÛnÛF}×WLX&æz—WA 4²-¸pÒÀfûb-Q2k‰4H*¶ä+ÚŸè_öì./¢-A‹…kµ;3;—3gV’V££é¥¤U5 +\ +Ř¼q@® 2-GïâÑÑ©$Iñr$øLJÜu(tÅ›‘€.¼È¥xŽ…Å÷£+v|rJ>Óähòæ },-9æ.+Ve²ÙdùŠÎò:-—É<µ~‰ÀM®¹Éç2òÉ–\>ÅÇ#&EkÛq•mmú"MiI“uRUieÅ¿Nâ‘ïE#à~@Üq£("î…ðL@Ãà=G¤ÜñçH„ʃ«h—†H½q³rL†cnh‚~ŸX®‡0ÉÒ²}²Ð²GD÷°”LX¶ C?b±À^Y±Åv^“`õ³ŽyÀR³_V™e,r•N,¡òã8A¨¤Üˆ7„4nüiù°àXþ+'ÉXî?Ÿ|}éó+Åþ«ÿc1]7àcUÑTAO:à_ÞùýzMÙê¦F1]VñUZZ¶ërÉ>YÚ¥ ®]ôð†Žo€Ní›Ø7­ñ(0HV 4lˆ×7±@C aÜÿTd ªR+`õû¤º±,¯i^¬‹R}ÅöÌz»G¡ZãzJl[¢š‹¤NhYªoRjük +%÷\Ù°tUØtrr~>½8;x€€4µÂS¨ª“:ݤÈQ–ë»{.³5Ü77K‰àw. [#NcåŽ+ö¶ð¯¤ê1¯“Ø[šmÅsîŸøHê Œ•\Û¦ì6DÏP{8dvµr4ƒ²ÖA^“Éóÿa>VœwšÃ¤á)ý> È4Uµ’U(Û%†} aÌѼ7Iùš6ɼ,^ìþuÑý‡¶8ÚìQÞqrQl¯×)=\Öé–Té§ä±Ûùžp›Î× ôû|Ÿ<$›»µy™tµS:;è—²}>4s;:– +@P? $[¯ KU”Ý«7Sj9È9{POÉôTÝ´– x‚Zš'¦­aÁÝé›®¾W°~Ì- ,°[*ѪYžÒ}VßhœÖwϘ Dçöàº×Yvu\ßÆP2¥4dÛ8¡}`‡º  +¥÷ìµçtnšç^’/´?H(Z±°Ÿ_ÃÝèž[¶½ñ¼]ÏUOÞ]xd­ü¢€²'oðJÆõn"ÑAEØ^¨ÄÿH ºŒO>ÒÁJ9r¨®éÊk×ÜáKÉík¾£ö`T°¿»ùa«éî黵Yèòpr±èNLo|i~Zý%À0;^ +endstream endobj 844 0 obj <> endobj 845 0 obj <>/Border[0 0 0]/Rect[258.42 629.28 323.46 642.78]/Subtype/Link/Type/Annot>> endobj 846 0 obj <>/Border[0 0 0]/Rect[326.58 629.28 357.84 642.78]/Subtype/Link/Type/Annot>> endobj 847 0 obj <>/Border[0 0 0]/Rect[360.96 629.28 395.52 642.78]/Subtype/Link/Type/Annot>> endobj 848 0 obj <>/Border[0 0 0]/Rect[421.8 629.28 456.42 642.78]/Subtype/Link/Type/Annot>> endobj 849 0 obj <>/Border[0 0 0]/Rect[218.82 451.26 266.16 464.76]/Subtype/Link/Type/Annot>> endobj 850 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 851 0 obj <>stream +hÞÌXÝnÛF¾×SÌ%éZ“ù!‡$zÕ8¶‘]'1lm±‹¤´DÉÜP¤AÒ­Ý¢O‘}‰}ËýÎ IQŒè.°0@Ž†gÎÿùÎK¶™½º¼•lÓÌŒf‘ˆY¦«³Ùzöz1{u!™d‹õL*&ð‡—Œ#®‹´àB±Åv&À…‹ Ñl±ÄBÈ€-~™}ôÞœ_°ÇììÕÙwß±ëÚ—1×^µ©Óí6/7ìmÙfõ:]fþO‹¿@’v’B.“Í%—&d‹7³9XŠž·ÒÄÛ²¾ÉÒUV³³"mš¬ñÿœ/fFñÈÀÃCøÒI’0ÄBÎ$k¥ýC¹ +ö>ÂD íGØ9x!±¶' ƒ¸7™ô’Q§—ŽœÍïR_°ò™)!ýyÈ#/òçJ‰DñKéaWFQ˜x×X`¯®ÙêqÙ2ß`õ£ÅÜx™Û¯›ÜŸV%yÓúJ{”2ù‡ÔH:5„tjüÛÁAùž¤$sœwïÉÏcï?Hö¿áúLf£  )¢‹‚0“ø“2( +v“oî[S{ ¾Éj®5—ÞϾBzÙŠ[Uù]òFÊ&¯A¡~]Ú'±+c»¹‰íŠXˆl¶ÈVÙ:¿ÌªmÖÖ¹+°¡Fwh@<‚åOLº \RmHÝåâ Î#Õ%O¼<óµtڣʑáô£a'ub@ôìc“­Ò6eëºÚ²ö>cB„ô :¿ÏÇ;¥__}8ûë—ç·{úÂQ8J¹wÊIÇ”‡AG!ìç‹·WWûL”ó^'Ta2æñþ|1e¡w,¤Ã²S––«}6ÀŠh§ hn¯>L8é©ùÄPõ‰×´i›m³²mXµÞyp®¡€¶Ø §‡€EÉ·×yè„g> >ñ*š5Ïe›>±¼\ûàFÛó£è)¼·x㕶yUž²&ËØ—×EµôeÚÏþœ¾mM2ÀïS_ +âñ¯>‰Uó€’J¢o˜ÒŠ‡Àðï2O+Íd: r©Àî,½óà `ì]ø +ϼ(_1Ä& ^ƒT¼ ãN*Ê|Cjñ8襒UØ‹ Ã^ì{ÂîÐËZª°€Dú½“hàQÓK l³:*‘Žª^¢è…õ&Rò|¹-ª¶¸ʺ¯gnÔqæAhœÃ-s°ËKÖúÚ»GT½¡î‚¡†" +’QÑ]_¼¢¬¡ kt-=nàDÜûÈz‹ô¾JËÍ#2¨¶&,ƒ³|<꬜ÎR` U•É]5tÈ6wDsÍÕdf°2msöh +¹µÙ»Wl EÂöw"8ºÇ3*)ÇÅ8Å—4o°}ldèÐÞo®)PÚö,hTè +ø£——-+·¾ñ®+¬›OÞ'Ÿ-«²i¿·ç' ú¹ÊWì¡‘#¡Cy¹ÊžNñj±}ÂÜò„=ò¿ÿ½sÔqxG”¸‰{h¶õñÑází+.S=>L¼=FöÀ$ÝŒgª‡Æ{Ю¸²Ð.PT€v*93²Å7r„bñ.¸—7þv=Á;¤ðòeZvöÙÇ<›Ã7àXbaÌJGŠÆMÿ–pNÎää´Û®E@7í ¥wÕc;BV4´$÷¡U YP¥$™øž‹öºÎAËÍÈKC: +k÷Èìm/kÄXàæa…™;¦2×<ÂpQbscQÿk0PÆ fAPúôQ7CÔ'±s¯S2ØkG.ÌGÃhÓ’§C%öür°æm æ•ÿNÑkT +ÿ—‹žÜûêÝ–6[¢fïÓú„•é6;Xòº:Û »ÞÔØŸ L¸O|¸±´¯«§ƒŒ§tïi°#|—>ýýe’¼@rÕùvJãn,RXu@Wg &Õn²e‡v'¬É¥m‡r€»¢_=ãíûaûÛÀ‘”.N§-o¼ãf¹ïÇmzÀÈ 8>d¦4AÙþfÞëê¡9lþ Ø$è8âÂcÛ„ù/' û1-»ƒ¶m>¸ª(¬¬Çí]VïÚ ¶_”f…-žz%Kl–e½VS{xÛLE=Ùh}ûÌ-zj¹9r†M›Þ¸_IEåL¸Óa—;¼ó§tûPL®06€ã1D“ÛÛgg\ífÜÈ+ŠŠfbíýBÿ¾° O{O˜i#Ï +`Í}O€kv¶L‹â.µã¯ö>3€G›—Öîþ†™Z£Ýœ¶ðm3mèÞÉüõÞ嬶XD‰sv÷™B³E“/_Wæ:æ¸ÀNþ×â®Gƒ€w…ð ÜD÷`Úõ¼cwšP„/ØrHHB£ùä®Ó-(Jœí\|åâ€\Œ\Ìú!ù? …Àà +endstream endobj 852 0 obj <> endobj 853 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 854 0 obj <>stream +hÞÌVoÛ6ýߟâV €ØÖ Iý²0l@ê8m†¥ ­HPƒbÓ¶V[(ekÑíí[äس¯Ù‚Ù€E÷Þß-aÚ9|})aZv"bу /ÀèΤó*ížHN:RÀ7>d/澂Ø\(HQ¸Ò.„ ý­óÞ;œ@È{Ð?ì¿xç†É÷½åÔd‹E^Lá´¨´™d#Í~J¿C$ß!…\&!t%—Qéq§‹!E[ùÛ†¾ÐÙXèϳ²Ô%Ké ÒN$˜FÄøò“$ô„\B‘âqÔìc¦\kûXªƒo71Ѷ ‰M>Ü zMÎDLÆ51?vIŸeÌ0ÍO „dÝÇ^̺J‰Dñ—ÒS¬+ã8L¼s\ Í,ÛønT‹põŽÅ=yÚÙM™³n„ŽË‚Êi‹%¨>JE1ˆh$5 !?Yˆ ð“H‚‹¼zn|ÝõÜÓí¿‰ú?v³·àG¼Gw ê[ÑF<óh>‡‹|:«ð2}¯DÅ—Ú°®ïséýʶ¡§ÇÜRAé×â•o„ºjâp³‰Ñ1Š£{ l»La;l¬'æµYÞÝ–—Ufªþ͇ôÓ­¦.kU"Ä%o[ãBÕY1†ºµk|…=½:àšznPŒ·‚IžàXhKÝ ù¾làŒ†2_äóÌ@µ„j¦A3Lj÷‘áG¶¸k˜0[½%#»Ù ×¥’ÛgÏŠæ»<Û]Éý†%uµ¨KaÛJ(åÜÖïJ^Ø™Ø$/]м°Iâ1(õ¨Ê—_ÃHx¹¹E ºñ@qœmxãD-hÓzïåESÃ"o Èºÿ +†–S?›ÏoО,«Ÿ5TøxéäÏ*‰‘ ¡xL—à^xÚ×hY”ŒfZÍs ðî|ú|Ç ÎD©p•Á­q1dð¹8MfeQ¡?Ó#ôþùÄ…XB^"8¡,Ͻ¹¹F ËßöÌWß@«E´¿¥b¸²“ù­ÁN†Þ³´†-¶ZEjà=ðw³Jo–áÈ/¦|8,ž Ù×[}Œ®îL²Ýµ›Ðý·®È +]1"@ÄJŠú’BÐE`Úìo÷)¼hw‰Å³ñ»í½'õ ´jZÒB/n´¹/%´Ïo!¥VLheû‰©• áx«œÚ³($ô"-m ­%¯´ÔžzXAg® +×PÍÖçéU~jñPÚ_¬œÃ2ÐÏú"Ù ý ”C÷o+ˆ‘©¦w§Ådù€jÚñCb!ÿ'ÕË¿ ”:Ð5<‰FšŒ¦„Þýv–•gÙÇ+.ð;ÅX³_;;lE[yžk“/Ü|¢5ôÏkè›e¸üá$…!ÛûT Í Ö.Y´áÏŽ®Þ}æ“óÁÅéÙ \ÀÁ°)jyaØÛù½8P¹œ&ö¥ph“È2EZÔUßõúŸ¡^ï@½Þ@ÝK#zŠÿYÞÒÿ‚æ—¨ù/û—ø¾< +endstream endobj 855 0 obj <> endobj 856 0 obj <>/Border[0 0 0]/Rect[177.12 472.26 209.76 485.76]/Subtype/Link/Type/Annot>> endobj 857 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 221.58 152.94 233.58]/Subtype/Link/Type/Annot>> endobj 858 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 137.58 140.94 149.58]/Subtype/Link/Type/Annot>> endobj 859 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 101.58 140.94 113.58]/Subtype/Link/Type/Annot>> endobj 860 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 861 0 obj <>stream +hÞÌVÙnÛF}×W\H@ÚÖxŠ Üh;p¸-¤Vhk$±(ƒ¤¹E¾¢ý‰þeÏR­HqŠ¢@eƒÎÜ}9w;ǯ®ËNh(’1qHFRa;£ÎOýÎñ¹"EýQGi’øÃKÅ‘0š"#…ÔÔŸu$¤$†úwXHPÿSçÆ{yvN=Óéñéá!½+| ãÍÇE:›eù˜.òÊ£ôÎúú¯¡ÉÔšzB%=ê*¡Âõ_vº)W²µaÙNô•M‡¶ ÓiZ–¶ôû¿vÎúP‹(„#¡è…$´I’„DKÔ.9/Ý!:xtˆ80q‡ðs…Äùžƒxå2Û¥¢Æ.Õ>¿M}ÀËÒRùÝžˆ¼Èïj--,•gü®Š¢^â½Ã{ż&.î*òC¬ÞûQ,BÏÖûE™ùÝ„óœ£éb%9''{YÊì7»ûô‘ùWö®*i/˜ãˆ^8U/œ*ìãsâ>'+ï¶Åæ ¼Œ¾'yB}Í؆rÊþNþm…—·Ÿ7ÿçåôÛÙ,¦7ð{ŸP˜‰ã–¥n÷3ãäšzA]« òg_øUØ +‹"‡CŸ˜^ #’¸ž n…Úë©H„1cЬFmÅÕä í(»„ h^ƒüfœ0¦&«Qâ0•™°QÆ®¯l…²WÆ€E#¹üy%ÑÃ8éU)ŠùŒª Yjlm +_I.sקr]àÞåYÿú‘Q€èM3›ÆŒH¯º¹¬ÒÊÎ, +*Ë¡ÈO¡Q6µ¾ +Ñ‹‚Î}£xÂùü,jx´QÍU3,ʇ¼J—6òcóৎ¼ž^Z¡$)½/ªµ²Ç^u5æC=)£FþW½r)‰Wå&EË©#*­¥?¨òÏf˜bN d(ˆÅd´1/C—׶lòˆÇ£7ˆz\ « +XA¢kuMäjƒÚ@³ +zÄMˆ\ø9DoÎÎÙó7i>^¤c D°´ˆ‘}< +›o_T De;Ù¢VÙo—-;#ôÖ%ƒWÚ%Èãk˵ËQͼF¹~Q÷¸4Àç5„²”¦|ïø‚BMf¹Wƒ†nÃc»wó¼¬è}7I‹Êª Šäö[ýÉÈöÉrcDì¥È3P¼+æ÷åNš-m÷ ¼t™Ù¡ÃÐ.¿ï}:]4Œ U{‡óÅíÔ2…Óµ˜ÝÚ¢Ñ7žÐæ”õîWFæØÞ­‹A̺.ÊmUK†ú'x®+ óøk<õ€S²p›ŸÎóMÜ +<öwÎÅ­hføJQÙÿ8 YÞ²£`§.fåÛEY½ž·™öÄ¿ÍÄ1±ƒë‰Ö¸Íkê¡Ïø¢¾¹Ñ<î@ÕÓL ‡†›ðÆ; Ò©[ûÑl_­·i©bE] £ÿ:qYyÎ…»dÇvey®šø +Ä@ç/©×®gå)Ó|ä²ûBà¶ö:N¿d…-ŸPÏñ;ÕŠ–21G+ˆêh©$‰÷,L£U ñúµJç„!¯ˆX³ÏÖ÷(‰o±tœÛ¶­R·mÕ푲ÛVÙJîÇí:g4i™°×lÜ5÷!ìú[€¿>¶X +endstream endobj 862 0 obj <> endobj 863 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 265.56 140.94 277.56]/Subtype/Link/Type/Annot>> endobj 864 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 229.56 152.94 241.56]/Subtype/Link/Type/Annot>> endobj 865 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 866 0 obj <>stream +hÞÌV]o¤6}çWø²Á± PŸÚdSµR³QBw+mú@ÀÃÐe`ÊGvæ'õ_öÚž`‡aªªR)x®ï=÷úÛeÆÍÏeÁ䓹GAµ0Æ‘qsOEÑ  øƒ |ì0ä;†¢•AÀ &nè (¡.Š¾ŸÍ»÷÷Èú½¹}÷=Ö °cVY¯Vy™¡ŸÊVÔ‹8ÖïÑÏÉÑ‘D0éûœ%1êïˆ9¾Nú—Ør\Hs‹¡–íaßô-›12ìš®eSß÷Bó`«+ K»¤E‡ÑGË07…¶×MnÙ€U)Ë©ŠEd}ã¾,¤îhªiüeyàY.ü—$‘ö|üŽ~N}/„ý7^ÿÇ0µ ÇܲÛÂG +ø—1¿/ +ô”gË6Ó1èøFÔ–í8˜šoš"ÅŠ +´þ®y}¦š—ƒR"ö´´BrÝÉr‚å>8q"& HhúyÙ¢eÜXÜü$$óÅBIU6íw½.$Rwøs÷ZŠ¶㣫!ªêêDÌ€îóH_»ÕzW‹?;Q&ÛÜcÜ©SΠ>Ôy–—q1»çhýÚÌ%øÜn‹9ÌCUÞ‰EÜíSwƒ} +ÿ±*Ú8›¼Ž8‡¥ËãVý4úSž¶Ë!ö4ð·(.¾œh8ÿtÝ¡UÊn5ObÔboUž¢f ó‡U/ÊY^¦bæk”,ãúê +ñVÔ×(­ºW0â +¥yÓ^ï„‹¥Vž%P¢ +±hõ²Ö¡Voi:ö‰•Ç\fJ¤È͸ƒõ¨1n~K½`ÖÔ÷À•­H(‰jzëm8\æTå{†m’…ù2#j5ƒ€Jr¨iìgh-¢ƒ;:£ÕH|`Ôq_=èào9%;Í^ʦ;£à¦Ýªæ: ù)ëÅ#kÙÌlS*9àd°ý}Ç;ã|ª¹>åCÇÃÞ“fpP—H ã!Üò±2LUÚe¯Ie Â3Ëvq@gRÑË\é%„)5V¤}Ê“”½PSžäë1ÅîÂ=ßÏ@¸Q±”¥÷ÍA»Ð)ñjÚS×ÖX{´Žæ]…Nö‰ŽðPM”Fá‘íòÜÏEöé1—é^©Šmžÿ™ª×zÕC¼Rg’TšÊ§ikýPÕ=WAìe¢U‘ÁZ•ƒŽ9S'‘´q™M—#Ž5 ÷û9`‡‡Ú“ó<¶—Á6Ës0èÛ¿—z„& +endstream endobj 867 0 obj <> endobj 868 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 869 0 obj <>stream +hÞÌWënÛ6þï§8 °Alb†ÔÕZÖ].[†6 ­Û0…jÓ‘Y2$¹IPôö–;‡¤lÙµÛÀÙÄçú-ávpüý„Ûfz‰ø£<µÌß%ƒã ’Ù@º ð‹/9Š¸çBä .\HæR¸ðc’ .„ô!¹üîœ_@ÀGpz|zx×5“#î9ÕmÎçyy —e«êY:QìäGÔäM—qCÉe@r6¢HÑÉv=’­E¿TéTÕpZ¤M£–ü98O¡Ë£ yw½8Žû#!|ã’öR¢£Üõ7"ðô!ú¹B!־ǀ‡þ¨s™ì’‘µË‹ŒÏ/Ræùèå#¸B²aÀ#'bC×±Ë}\J'`CEAì\ã÷êÊM—“Xˆ«W,ñÐQf¿nr6 ‘°* M• x\7Œ2#¶fiÌø‹(Áe>>ÉH0’×ï­÷½?“ì¿‘ú?&ÓQðB>¢nÀ¿Ôù¬(àe~›µLÏi0áU³¡çqé¼e.V¡£¦\›‚™o“7ruò†X¨ëLeÅ<M&Óë5ŒPˆ¿®a.c~^¶ð˜êe^NÕØÁ¤*›ö¤—‡‚jâÌ2,ªé_¤ÍÝx‹ ÷WœÉK_« î·ŸMßV Ü'ò«å|“÷{¶­8&Ëör¼©ˆ£­æZµâxo›ÖícD1aªW@€:çé|Q˜.µjtˆž»Ñä\¢Å•K€R’LÁŒ"=r*†¢¨˜¸¸§þ©˜Gë6䮣åC“!A@Lâ³&©¶w±9«Ë <£¡(Þ¤&c$¾ƒºZ¶y©à>o3hQwû¸P`µ9$%e°d;³ÎgªfõÍ•jOßÜ%ȹáìˆÇ£5—ìHË)B+Ùņ¼Kòy9Ý)W𨓻ᗌ¬‚ÙÏó"Eg*­kˆ£ÝÞ–µˆë:7bÒæ†Æ'&|bÄg–ˆKñ‘ ¾ÊÓä}6@Á +¡-ñûQ’qÏ® ë°6o°.ÙÐç£ãr Q“6¯JÞåÐéºÙ:‰dWhyc0 5f¾Å¬*‹Ç®¨B,ª¡‡G dº qƒ"S«¶6%réöŒíÆA—©¹VàSïöñ¥>`‘bK÷]ÖB5ÓnLÓ6…Y]Íõ[åçáM«§c´dŽù¶Ÿ¯ïRb³ÃP:ü&t{bÒÇúçÛ•Òt󉥻ESbkÄÒÿÆ:¦¶ž1¤¸¿P¯M5™ÁÉ)€£ÌiõÛúòŪö’Á¬:Z7éÔ?ãl<#à–¸k×دßus +¯_ýXÍ©{~Gðx¥ºžÒôRõÎù6ÉÒúÉš¯H‘ð*«Þø˜VË7˜7+Ëò¦=‚BÍðY縋ӼO†_§4l2” ‹­9Ô³q‘¶ÙãMFU1E”²ß'»|=>†ÓLÏØ;Èg불ù®'l¸Ýå¬FfFŒñ«y¾x +«û¦^Çlóvl5z1;‰ÕX’ƶ洊 Áßikó}W” x.oùxLév0f';ɱ$—u ruªßSi|ϤšÓ•‚ _Á"/iµ‘YU“¼ÀS'Ã7˜6íð[²g9?­ÊÒ4 Qcx~xH²àƒÂÆ|ÙÐR"ù¸<82bs¼k¤åD¡B-Çn£•¸CÐï z³ÐAÏÓâ—ÕÜ~*ÄF[s‘?¨)™þé ^\þz~F¦ö¢°ÆÙšÓ3‹Ph9m`[α²ÆªÄ_:ŽQÛ1ö ¶Ý¦g‹.X,B‹Öb¼¶ƒE)¸©X‡É\îÞíM¿Ê0Ø#›¹ïK?MN±ËÛ¤Nߪº¡BÕšöÒßg9ö *5’Om–•í˜¡¨R=´",B<ÃÀ—×Ï’^Ÿýtu¾7VݧÁÝ$’MÞgŸd Ï$mœán§êù³ßÎ_~ÝýÞø[€øëd +endstream endobj 870 0 obj <> endobj 871 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 872 0 obj <>stream +hÞÌVmoÛ6þ®_q °Bš+™õê6¼Ø]#±!šiQ,â„ ¢>~ê@t£ý¦·ÚÁµ8©ŸÔjÐÍ XL_Œ²d6Kç#èÌ ž “>7~~Æ•˜Zɵhè‚I-ê¹µ4!É +Ûf[B_ðdÀ38™&yÎs#šhíHsÃð,×Ëfa‚å„8* ϶|o5Ž‘Z¶so…:09ˆ®eeð!à ¬bĨ_c¾ +ú—Ä`†y 6¡†éZ¾î¦m“жü¤ºg˜Ô÷ÝPïâÚ²…r|î`xøuiøåé\Ù³<5Ls!§‹}lÛó…@‚FXÒ TÑøËpÁ6ü+H‚BÞ¼·þÝõÞÓíßAý»É]`žˆ= å.o«^¹fs:…‹t4.p3™žcÆç<3LÆ,ª1l,C,IS¿L^ß–Éëa¥nŠØU¥Z¡§2Y|`Áz>‚8›"&X)é«ÇðV_•'EëÐ :Äúœßœ%·XŠÇÇ@b¾UR”ˆri=ƒUZ—Y:/†±~ô}Goai~@ûˆ<Öc#6ÞIèè‡ý7Ä€î9óNXù4ç/ZhÍü¼}’½°c±¿FkÆ“?•;µñl l¡fHp×PM½Ÿäð ìt›Ñé—fCfÅu?á—b¥mÑ‘ó%ÚÓä%¤¯3´>Ι=ÆùªÓŠNÿ Öƒ ë+ÁzPŒçm2‹Ð{R¯&?˜‹eHð>£[qu?uΣ†:VXûG%Ãè.0¶Xóõ-¼¹Ý;iª¢Ä: .ø‹ÅˆêàbÝþW’DÍnûâ`IV1I8:°ˆªQ°ƒ¢è"WGFÂ[%noœ,ùáY»Ëûnçèî‘õIÇób¯§ë + «xíR¯ —Þi§}Öº?YÕóç¬ùëêÝ·+)k¥ÒœIEÓöíE@ð 9{M{S±Р•Ö»—7ið Q 5ÖÄÁÁ\o®ìÄÿ`y³>: +endstream endobj 873 0 obj <> endobj 874 0 obj <>/Border[0 0 0]/Rect[336.96 175.26 438.54 188.76]/Subtype/Link/Type/Annot>> endobj 875 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 876 0 obj <>stream +hÞÌWmoÛ6þî_q(ÐBj"†Ô»Öµ€——6CæŽÚ~¨‡AµiG›-’¼5(ú+¶?±¹‡¤,ÙI¤/ê}:Ÿçxw< +š÷žŸ šW½Ð£ˆÇäÇ!yœJÙ›õ~J{'‚¥³žp‰ãGÌs)ò8ã.¥Ë‡ÆýÄ£t‚>¥õÞZGÇ'°˜÷öhXÚ"fžµš—Ùr™s:-jYβ‰´MÆJžY)`" ÈL„¥G=&ùƶë)ÛÚôHfSYÒá"«*YÙéï½ã´º, +A$dAHÌõ’$!æÇœû†’f©_‚(sý—ðƒRðôKðl½hî á¥o(+\"jpy‘áüKf{>X^‘Ë…í,²"Ûq]ž¸ÌÇP¨Ÿ"Š‚ÄbY¹2jÓõ¤&;ÄèµÅ,´¤‘—Un;!W…ò¦öWîqÝ0RþQ0’Æ¿v ®íã[$c¹{^ûù©ç=Õþ«ß±šÞ/d±ÚÞì¯%ÀW®Ù_,h”Ï/jl¦gUøJ–¶ãyLXÚ.²Ð’S¦¡ ò›à\¼!µËáÀdVÂ’ÐD²@9Œ`Äïr˜#!@7ðõÇ›ÁÖÇv|×uYbM²J’ñZÃ~úâ·×§ýŒs¦\¥ÌQkïVƒée™õll=xXу}ºtžA>—õë<{l?ÑÆÓÇ÷2÷®”Ùf†ÓâI8¸oá¹u>¼ºœ7 ¾9=J_|ŠÓŠoòi}ñíHz_Crøòt~Iç( W :¶½ß§G_}&³ÎUc‹à-ümõnƒÉ«ï ÒþðxôM¢A[¢_ÎI¸8ƒc ÀAÓâ*™­êhtÚ×À6ßo]éã8º­߉ûvK­Ô2:Ù ß‚¨ÎØÐT£ƒZdW²dK‰ ­ê2› Øˆí·V>£±UÈÚyv‘UçFo´^`YY™Ó>˜`¸¹ìNÔhg«&szJü åô#b,P¬—ÝÆ:^@go«|ø¤S4ºj3Ò…„}$JKã)äyU+©œ©G©Žƒ»|­™+ezú”Ê\•5á~{y>„¸x:xN¨¿çØ[¤šyƒi +´¤‰(§ )§Ådm\nÐû½·Aî'aÇ÷ìøä`ã—w綥”ƒÖx`ŸeÅ|Í%ZPÍ2@¤á«”ÅõË¢K$fYÞ-Év2Æ1J8„Ýk<½¦¾IYêÊx®#dgo´°·9ÏmrÅg[‡ÆD]i7ó¶Jÿ3»)ü“UQÕ4Aþ_dåc*PXTa'-ß*%¨d„z/²rÚTóNS›mÿO€ +ž^ô +endstream endobj 877 0 obj <> endobj 878 0 obj <>/Border[0 0 0]/Rect[422.52 376.26 498.48 389.76]/Subtype/Link/Type/Annot>> endobj 879 0 obj <>/Border[0 0 0]/Rect[206.28 148.26 281.58 161.76]/Subtype/Link/Type/Annot>> endobj 880 0 obj <>/Border[0 0 0]/Rect[308.28 148.26 340.92 161.76]/Subtype/Link/Type/Annot>> endobj 881 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 882 0 obj <>stream +hÞÌWÛnã6}÷WðQò®^DJBŸRÇiSd³Alì>tû Ø´­Â–INýŠíOô/;CJ–äK’E[ X ÖRÃ9œáÌ9#N½³Æœ,Šž–$d "M$#¹éÍ{ßOzg—œp2™÷¸ þÁB* %£LɺÇÀ eA,Éd +Œdò[ïgïbtIÈðløî¹Í}Qémy²^§Ù‚\e¥ÉçÉÔø¿L~$éå±"N¹VdrÑ€KVû}[×w&™™œ WIQ˜ÂŸüÚMz*ˆ! M•&TÈ8Ž "Æ4Ôõ{ˆ”Š óyö%ºKClƒ ¼ ¢:f<«ƒÉÐý!ñea>Á¸?P4ôB ‹ à‘{‘?àa¨bï`-ß8³ÙvZ_ÃÓ'?Œ¨öŒ[Ï‹Ôh0Üd˜N›,†ùB‡˜ @ÃêœM3h¹ã§YI²íÚ×Þm¾y(¾x_|2ÝdEù]«6ÄXÛ7d +ÖË$ï“Ør“¬Íë&…ålfžº&ýãû>%«mµ–Óg›íýÊ …ÅÚ®ïM^¡ÁX~Í‚MžêCf°| _ƒ1b]ûPO°üÚžq™ç½´Ò Áàbl:›ä_'Ï&ÿÆì¯pO“þ²ˆ¯—IQã\¤Éâs:+—ߺqüL[¾˜ÉÖ¶ÏinFO囶¹t|J“ƒd+¤Ç4iÕß=ßmWæ­ÞѶF€åê^_ ùCš ·åq€ÇM:#kÛ(ΦBÄ:í÷ayº-¯ëk}OÐiq·kk^;ü£RÓZ·%#'Ýö Lpª­Š!g)lxh&3O?æ¾` 4 «fÖåFþQã ’þ4[-ÔŽ6îL ,Å9pXj|ɦ€­ÂŒÏ-‘Í’2!ó|³&åÒ +©â(ΨÊq*Û‘‘÷ñîbt7º@™ß* ÂÙÙAìÎa5Ð#E™”fmìí; »¹Â ©Öªµ]5XãáùÍðÇó«›qNÑ8VÇalrtß næç”yº‚¸A¹=êBˆ†7â„®{/}˜¦"oãßœÏY™<Á©çHòõ2NTxkø…Ÿ¤LaHî7Ûr‡´—HP§Ã<žˆM·âÚ](FØIä{RC¾Ž§IF†Ë$ÍŠ?«¹+€³)A$ .aDB…úBµGjjJ(ˆ!!Ìf2Œ±&­üTóCì\XàŽ8¹qk0Ä™SïÎZ >×£Ë3ÌÅu’-¶É€hÚ,â8r“íÏ›< qx˜(êÀ«6TVI…:Ì”°ÓŸ‡sîØ^^§Ôº²‹ ÄìíÈI.z©úgŠ-q i[‘ÀüçýîFÊ -æ?ê#ÜÒöäÕ‡ü¥5DÏLWÛ¼fµw¤9UŸÜ#¥u8¼ÎQ‚ab†lG7uë ˜Þ½» öÊå 4Å#öosTpÈQX…ª54åf±]%¨k8çÃQSp¨¼lÑ=©†îh“IP7@à: ÉfÝò‡¦oAFQ ²x0Ó4Á¯á­pék˜‡Œ‰ŽæéÔ’Kq”6c*¢Æ…ûüq s3št9EP¿-DUwxHCyðí×fæÛÑðêüú +J¢Ötl¦.†mB€£Ž GÈdµ±MÙ'©Y +»ìJ¦šÏ^;¬¿»5”ëÚÇÑý Ô ŸÖG(étô}{6Ÿƒ€Q¶ôe×BÞAÊ9ƒ6б[ ŽjžÜ׼ŽŒ¼÷>æ¥ +[˜+rcJPŠê;EÀç7ÔW¬’ +yZ)D½ƒ¶¼Ò‰¦ °TSH_†S#É¢\”NcHHW,ö1vÂRWë1I’ 4ö–auÈÞ T0PWÂÚäQ‰•B±RÇÄJÿwî‹V!ÿ-ÀT`Xô +endstream endobj 883 0 obj <> endobj 884 0 obj <>/Border[0 0 0]/Rect[177.12 266.22 208.44 279.72]/Subtype/Link/Type/Annot>> endobj 885 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 886 0 obj <>stream +hÞÌWÙnÛF}×WÌã0±Æ³pEŸêEE +'l&MÐôa*$6)#GFѯh¢Ù{gHm–¬¢EÂ5ä=s÷Í‚L{—ß=2mz±" OI˜ÆDqR›Þ¤w•÷.‚’OzBð#Ò„)IÅ—$_ô8pa<ÌÉGpà"$ù×Þôæv@"–’ëËëׯɰDÊ­¦µ^,ŠrJÞ”ÖÔ=2ÁOù÷ IyIYDú‚‰8"ùM¯,yÇ[*äíXß=65¹žë¦1MÿÒ»Í{±dI †Ä,Š “*Ë2”óЛä¬tD0”Ép~@€rD°sã…ÌÙž †ig2ê%’V/•x›ßê@…`å‘\ýˆ%4 úRòL²Ž‚fA_$I”Ñ!à[]yØx5²$ˆáô!HRSã¿×MôcV%zÓùŠ£{¤Œôª‘µjpáÕø3ˆ€ƒ Bx¢’ÄsÞþ¼žúý›°ÿ†ëÿ梠b–b xÀ¿”ùí|Nî‹éÌB0m áS}¥˜ „*¤fÌœ*ùmò&Ò%o …úB 0NâúÝž¤ËfŠeûðTZ½ÆêºDžMƲØU3"+¼v\bï…(›I1ÔvF ™é¯ÞŒƒ*˜É«êq«bLŠ2ˆiaóZ?šº1ŸéçàïöüÕ Ì•}ùªëq_ñEiIiÖ@±ÇHËÚéñ4ªÊÆ’fº~E¦ÆÞé'S{{ —륩ïWs§8|™ë‡BŸý0ž¶¯;õ`Ÿææ˜iž î+«mQ•,ŽjÓaãúà†óý†ÐmAyôŠ”«ÅÇ øLº·OþØXD/?n_—ŸNØñC1¶³Ó‡@[qkÏ>Éa0_5³ý[ ŸZ}ÌÚžÐæ­n¾œt9ŸWËsë•=¹ª¬­ÔÑޛіÏoíÄŽw]ñÒ®Ì÷d…,‰ÎŸ óMŸ4, ]}èiNÙ@àì»€Ñ _Hc ±3st”}ÕDÈÒä¨nïÀ™ûªÉÅä¦:7 à–ów:w+–¥Þãî„N‚Å]äá? OíÊÜ —L6b¢U NÛæyo,Ä@( +K@HÑ~lýxâ0ƘˆZM&uµ?àÛ3_pì͇¾¾y÷°§¬'ÛAÖ ‚Dvj ˜…tlŽؤÀ@A琉 %p» ðY{vøÑÈQ´‹Rãæ +p›Ê]Ã\“ ]À“ºÞCôÏÕÊn„í[Õ—»[â9³\|»mM´Ñ팺pö;ªù£]$aGc!§°Á¢i’°Ø-XÝX݆Qò”…!‘ oW0Lï<ºIQ§WèõR³Ã,Û$]æ]sw;¸D‹ït9]é©ÁN’,ƒ¨Ã£6åáÊ ùž%ѳ ï§mvܬ“‹õ?˜ùR O¼±g¦>Ø~茡eQ¾Ó 7Ð’°•ŸZ¥±'ЮͅtQ¾ŸÎ4ÒoŠÚ×öæÒöÆV¹ÝïsˆÝôhØ,/`†sø‡sî$®hÞ®\"püj¨s˜kÀT/(U4Ü¡ÖϹ@ ü%ÀEþvŠ +endstream endobj 887 0 obj <> endobj 888 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[351 373.56 521.76 387.06]/Subtype/Link/Type/Annot>> endobj 889 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 890 0 obj <>stream +hÞÌVÝn£V¾ç)æ²ËÉáÔ«4NV­²[+¶¶»jzqjÛT,ÀYû9Ú—è[v†cbƒ±A­*U‘æç›oÎÌ –Ú퇉ËBóxnèƒÃ!—ÚBû~ªÝ>Z`Át¡Y6püÇ̱!p8ã6L×G/Œ»‘Ó¾pË…é7í}ôð áþöþÝ;ç†2GÏ–¹X¯ãt ?¤¥Ìb&_§?b$GEò˜y`ZÌò=˜Ž4]òÚ·íïÊõ³s™Ã}"ŠBÆôwíaªyn„iøÌóÙNEÀÜsW%äÛ,ðëï˜)³ÝÆw$‚xpª˜è Q•|øÑ ëœ ˜€9Jú£0Ó܃Í-ÃôX †iÛ<²™«‡†¥sô‚À‹ô1¾ ,Ï”Ú|;+Áðñí³„Ì×¥’çEl˜>*f)ÑY‘ʼnÛö"ˆ`DÜR0þ2<ô`.þ' <Ÿ­Ÿ—žÕþ¯ÿcµª +ŽÏBª?Tû­ø—1ï’žãåªÄb:z'¾¹a:³ôWÃÆ6ÔåœUPðèo`W‡×ÇN=6±§Z+b‘¯N2½`Ãú:qM̱!0®àÇi ›D¾>“k™–_^ôfYZ”ßCN-1êÐÿÚÖŸÞ Võf¨µù Ìã\ÎÊ8KÊ(¿ª¿-d§[ +žnרö$ö2:QŠd§s‰â]‡ÑkÏá7µMçÅQ}÷%Šo`—Tï7°¯_Èת®.À]‰¢†;ÙˆÎÄÚ;Š1@¿ÙHñ2}Þ&òçxNXV'øÞÌ¡ii£æYL´@qŸQ3"…£‚µ#v•eœ%û%~R™Òý$Ö’à¡ør„¢ÌÕäDÊñ8È,eYÅC)¬¸¡¢ô€°Á Š¯’Ù°<%‡ð”]åÀ­è˜- +ÏB£Q~ óѪUªâÀŒ?Éòa·É/6”Òšl7›d?‘i—ñk\îIåWL>ävË“VáÓ ªüeí¢ŒJ¥õEY6Ð]±£„²œj‰ãìå´9LËö]Ú®··m&Ž0‘˜ð˜åHü"ËׂJÒ÷PHuÇ±Ñ +ÃÓ©‰ötuy»ýïYŽgó6ŸÍÓýbûj@ÿñSN@^V¡î³¹,þ¬Wƒrå3ÜKwqió«»Bφp=”(Ú0Ô†þRÞAªx&®EׂænhUIE¬“2¿4õONßFÎb‘tì¼QqDù¶{Ôœù‹¢gQµÀ¼Æ¢ž4½Ãu©ßË/pÖc(¿¨þõªzG.*÷»qœŽE^bþe)’»œ¶”xiéŽE¬ÈèwÐÄ‹úTŠ–‰4æ¯B~jîÚÝ ]ßôEn*4O}{{0Ÿ“¸±*ÅÊi·“^^Ñ mÈR ך>ªÃ:ˆ”+X g;°ŸäQ¼X4©ùb» ;É<ªv^`.X›Õ ^?Ø„Ðþ=?Õ§;‡ïß ƒCš +endstream endobj 891 0 obj <> endobj 892 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 577.62 206.94 589.62]/Subtype/Link/Type/Annot>> endobj 893 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 894 0 obj <>stream +hÞÌWkoÛ6ýî_qW …”ÆŒ¨·Pl@ê¸C†6 RµÀPk˱Y2$¹M0ôí_î”dË,Ã0`Ia3äå¹÷žûb9ÝÎ~|Ïé¶øVHnè“cQ™ æƒ×ñàì 'Nñ|Àm²ð‹/̱)p,fÙ/P˜åFÅS,,îRüuðɸ¿!…4:½|I×¥ÉCæÅm)–Ë4¿¥Ë¼Nʹ˜&æ¯ñOÐähMã‘GCθïQ|1Òj±mGb+è›DÌ’’F™¨ª¤2ãßãxàÛ,ðáˆÏ<Ÿ˜íDQDÌ -ËÕ.)/Õ!e¶Û;RÀQ‡ð³c!R¾G„C7l]–vñ ±Ë ´Ïï„é¸ðòl‹›CF`mÛŠlæ¡É ìò ð"ã ì•…›­§5™>VÍ d¾‘èý²JÍ¡Á"—l*®,ImûäGš5fX\›ñ§éÁ6]|J#I#o¾wþ<öýD±ÿõ,¦¢àø,”1°š(XþNüKçYF7éí¢F0£BÂWIi‡qã‹i£ +dÆ”)Èü&y[%¯BÝÔ°§++b‘¯3Y.P¯¾dwSà +.XÚü4¯i!*Ó7ίÓüZ”u*²Ñº>/11°=1iZäUýŠ¶²Ò’rÑ\Ï×Ë'\W·ã“æ¤q¸wGئ4Ÿ%÷Gn.Äì ¶·ØI©@z8ØQ 4ÅîB”'ÔG’ÐlIšµÃŠÝÅ»< áå¹xWÌ’lbì™°Ãß,™§0`ç^nDÏC›@³ãÜa‘ldv×ÈdËêÅÚFσŒò&ÞŸŒVRÝZÔcŠ‡­Ê‰Â}Ï@:$«ë¢¬';= ÒK)]M%ÀÆi)sB+D@A+Û¤±Ç߉$å;QÝq†ú7VE†“‡Û"ß»³ÔîΗT:«}5Ø?d—¾ ú‡7^u],û—°½qÿ[38÷F´œSŽ'㬆§'‹Úß‹å*Ó“²¶*W·-çí@k&I¼Hhn:œE†TÜȲÂä.þþ*‡xbÚÈ0ã^3n( T-Z sèb·"AS¡Œå@ptÇÜÌuµ²µ¾,û,¦&Ðï¨,Öuš'ô5­TÃ’úa•Pãµ×zÍ,øª Uã’9T"‡FŸïbˆ÷ÜÅ$ÜÒî·Úí¦c3 i³¯ìÐ+e kt%8ó\ý>iǯÅœÐopÃ+Pg‡`|à³<æêØÝ%eãËû=U‡ÂÚÇT(âŽæl9££ß0¥ä:¢l{7³€ûŠ¬öAhè4W„à2UÉ´N‹œõ4õÛµz„rùÊF Ë+Õ +G¯i¢l U6Ò$ÙÓIvª_)ÌBGèubÒ?²Åá§i¹ª×^æsÙ*O7íh_ö^!¢´®T»•k´¤?ögŸîZ¯¤£ÃÎŒ¨ðìL"ÉôŽÒù¦>¤•iÉ\– ì1WpO¾&ð«®~÷=uû*N³³p׫U +çãY¬ôV”r$S¿‹þ«"'Wš‹:¡•À«<¿e“Iþlb¾:ˆ[&õºÌ‰w§êð›$~ õôFigÅóŠ®Æ1=¯€ ˜g§MXŠáX\‰eÒ¼NÛêÒ`Çã»È“úJ‰!Ù1¼å±“Çãï"Uìû2V_zœD¢‹Ë›ñ(¾üÛWÚmf2°¥®€'Œ{šîïÇ™[WO÷¸yß)Žÿ>iˆÞžÿ2¾V¹½­3Ó8ê%q,G:áÏÅ:ŸáEôâÛÙ)½x÷ ¹Z½ÝåÌŒšØžiÆï A$Æâoã™Nú„\g2g¦É2ÉëÉ6)x…þ%À\|¹ +endstream endobj 895 0 obj <> endobj 896 0 obj <>/Border[0 0 0]/Rect[320.4 448.26 351.72 461.76]/Subtype/Link/Type/Annot>> endobj 897 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 898 0 obj <>stream +hÞÌVënÛ6þï§8(0@j#†"%JB€™c)ÒÕHŒ¢Ã¼šM;l9”.ÁЧØ^bo¹sH]l×v\ æ–LžËw>ž }XôÎßÞù°({JBÄcb’C¡{óÞãÞùÐÆóž/€ã>ü8bR@$9ãÆ«G+Œ‰„ñ_¸Àø÷ÞÏÎÕ`!‹¡ÞóF…ëÇL:ëE‘®VY¾€ë¼ÒÅpùö[¼ ³'ò2;ÝËðúy9K+>qà»ýO\ÚÀ—WgкXR3TÎJçÕ'BpˆNWQ•ô~2z'©­ \ÍPÇÛB7’_¨¡¶&”Ý`ê>-ïô4£,X!kƒ¨»Ñ }y3™àúª +]áÆc‘¿øRO„föH–Ävü˜7ê‰dÊtbª;“´ÎLϳQ–_âXÉóôýz¦—D;XºF”ªÇ—™/¢©\aSÿVWXi¾`rqÔÅTq>´‹_%¤Ö ¬È dùœê1vÖ´[PÃGÍ>ñ‘V¶î,‡ê^CY]~ÂDÚÂÛÊsF×?ÞmAÇÙa… Ø°†¡‘†²J+sø­Ô˜Ra§ä·†õtv½Á ðæ™ý¹Ô®OQ2Úpq8árås^¥4„ódƒðD¤ÔQ -hæP=kb£ 1N²•+ð—å%ýuýXÔ4ÔwèñY²¸/R$“ð’ΠÔþÄL)ÿªo Rp$89‹b>]o˜2ôi¡]îÈÐgÔcñ‘Ämþ˜ÎïÕ ”ÜmœÄù0°e3)‚Ä snÃsŠú&ÍéŠEh¯»ñ&% •!e`è:ÿúâD‡Ûå’ì÷ºŠ<»ïI&vîU·90‡njwtÔOVwïà +R”K¶þìÐ +ʙҕ ö”#üAV%£lܘu€Óû´x ÔQ¬Ê‡§l¦©·Àt—Ô.š9ƒõÀˆ™3Ø`Ûn_¢»·xÊ—…N[=\¯.`߀"ÅüquT±ëQ$r„®ÍLÍÍ4 çŽÎ×ÐnÒgcÆT­¾G×ü†) +Z¶ વ±kà4’Þ§Od§Ÿu´¥<‰¦Cª{‰Ú®¡Òt}z‘ªNÑefOömdu&pµ¡|Ûn4V^¢ëS± eó°O£ì ú!Ú¶pËÜU ì Ý ö¦ÊNzïg°¶DFš³Ø²D°6à¼Äbÿ±ê§¦ÿ4÷i⮑mpâòI´Y½:Hº}sÂÕŽs_šû? 6Jà8 +endstream endobj 899 0 obj <> endobj 900 0 obj <>/Border[0 0 0]/Rect[260.4 629.28 291.72 642.78]/Subtype/Link/Type/Annot>> endobj 901 0 obj <>/Border[0 0 0]/Rect[316.32 117.24 399.06 130.74]/Subtype/Link/Type/Annot>> endobj 902 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 903 0 obj <>stream +hÞÌWÝnÛ6¾÷SðRêfF$%JB¯Öü úc8Bע݅ÓŽ6Û +$¥k0ô)¶—Ø[î;$[vœx d…:ÿçãáGÁ£“ï/[´#­Xe,Î4SkÌh>zQŒN.¬˜„dþð#²”+ÉRñH²b5Š`…Gq®Xq…—HĬømô18;¿` ÏØéÉé7ß°IŠŒ« ^4åjU­ìåº3ͼ¼2áOÅ𤜧„‹¢$ ìGäy_…Üæž3|Œ³>eŠK¤>.•ºœ_—¡Š‘å“‘Ç Oƒ4Kå’ÇAŠ@…c‘¦ILð‚µ¦vb³Û«Ž…oïÂ4ã:0n½i«p¬!X¯©š¶V•GJR}(ŒÜ‡ Æ_a 2Œñ¤ ™³¼ùÝù÷Ðï‘bÿÕÿ±˜í‚Ò<£D¾ ‘ÞÙÿÒçwË%›V‹ëÍTA À·¦ ÇJq|%va`f܆ä{ð¦Ò‚Wc£îïaÅóÌmcûqÆ<ÝF4ö’ˆ\33¯&Õz*Bb ç"‡ón¸a7£ Æ)'d†`ÒCrj:Ò—AeBeHq¼feW²yS¯XwmØäå›K6yk]àWmê«z‹B{›¡’¨B +VƒcÅer°t&]ÚîZó\»iO/@_‚¢ì9GºqoÅ#ðŠNÖÆ:øÝÍ UÚIÑ©qÖïª +]ß®B¼*ïLó)ø²«zÝvÏ­ZñŒìÒÿì +2×eóŒ-`e±=3Xþò€}¾.ÛÞðåMy…s¶WÃòÌ¡vfÚj±žÞ.ÍÕ¬£6Ž©#>–ŸÐú#gX~Ÿ+ߤ^Þ-ðõ˜ +Þ8Ù7åÊPtX>ì¡íw»XÃc˦³þ°Z¯Ÿ®ˆ+¨pP,­¸] +§{¨ø°cÉbqÏ3´¨â‡Weߊ'± YªH÷žíEõƒâŽ÷õ^‚‡Ò¤üt®U;‰Í‘9%x|>°©ÈàË#Vn–”€ çýQRJÕ áæP^;M0$/»>zÚ‡½<('l„™ˆA6ÜÀ¯Ëö×RÛMU¶EWýÜÅÚž6ÖAQßìû£BÔ8½íþ¡Æ‹ºëêÕPi0r¿>ÿêO¥ÃÌJà*¢µ?7«Úª&”Ý…BÜ> endobj 905 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 906 0 obj <>stream +hÞÌWmkãFþî_1=8Ð^âõ®V¯¤wÐs’#…^M¢ʹÅ–õlÉHr“päõ_vfW’ßä¤P +% K³;3Ï<;/ óÞàÓ„yÙóø"'ð@ (’Þ¬÷1ê .%Hˆf=iƒÀ?ü‘Ï• ¾\Ø-{­pá„ +¢ ¾é@ôÐûb_\‚ˆ''0*˜ ¸²òy/—i6‡«¬JŠY\t‚&f&ý˜òMÐ?ÅL9æØB²¾Ë}Ëg}Û¡Í+`ÒrX_ú¾Z#|AY‘›mÓõ¤æáÛ-óîY‰‘eÊúnÌ3¢S“%ˆÛö|"ˆ`„5 ! Œ¿˜‹læà“@‚±¼ùÝû<öû·ý7VÿÇÛô)(t¢>áíUÀ¿ôùÃb×éü¾ÂÃTV‰_&ë+Å¥õ'³± ­dÊ5Lý:y}['¯‡•úBãFÏ÷¶ +xSeôfël¶¨nož²*~¤ò\ºÆLÈCϽ)×ãÊ!S¤ë4V<Ä*¦É,¥Ù¨ÈW€ùl}3rh(™Ö9bÑ:iVAZŽ˜‡ockÌ`’geu¦u¢wd”¾a‚îãâ¤øõ9^&Í^”¿´}•fÛ»K”×»±²°PÆ…` Žl½Äu^îCÛн Šq£ÃAq6M_†ônãźVÔ$t+NóõÝ"¡Ú×zy—µ7Ô@ñ«Þ´³èiÕ€$æº}Ñ2n&_W徫G¿¦sSØö÷uÎà¹îÿ]IJ©Œi¥³Ó¥¼².ãåja~;3ô©mÍ )›¶\÷Ãè>S’‡–n·ÒZ,r&ü~ Y”0“Ùz¤–,-íÊûfë;(-!†I¬ÁJ´ LÝïù[,îâ “!ÖñW(òu•f <¤Õ=Tˆ¤B¾¡ŽÚm¢æB¹Æ¤®<…YQÌðî+ÑNÈRp?Ø@Ð,´§¯|:f†ú-ƶ,›1Œ[”Þe‰Ñø!mê"-±í¡´(·®© -ÏŽKë|÷êdÞ5„ŒÙ! :6Îj6¶ÞDµÃŒVÚàuÅx·Ž«V1^³9³7Øe;íIµ.2íª^|¦ƒßŸƒ3<Å•ž çý8 Ít³cqG-þÑÕgx[¤S-ßœ`ÿC=“ Mìr² )tÅÑš[¶ÖWzjna­/µùf J[d°šƒÝ o #:ŠæÆðı³å2›Â{gÂ÷°O²¶UÂÜtrr4Q|CŒ®]\£8ú¶™1HQ^ó¾¹¥¼ÂË7;ÚÍ]¥ƒcàù•üj/‹V‘âì¹þ‡îoõ«Ÿ +endstream endobj 907 0 obj <> endobj 908 0 obj <>/Border[0 0 0]/Rect[422.4 467.28 534.72 480.78]/Subtype/Link/Type/Annot>> endobj 909 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 910 0 obj <>stream +hÞÌXÛnãF}×WÔcsbµÙ6IÏS2c/$Žc ‚dÐRKâŽD)$•c±_‘üDþ2Uݼ[³“E°@`@¢Èb±êÔ©SE ØÌ.ÿñ(`SÍŒ‚8L@'T¥­g_,f—7,Ö3!!Ä?üIÌ•„X…<”°ØÏBôÂC*X,ñ ïg?°·×7ñÞ\¾ùì3¸/‘pÅ›2Ûïób·EmËu¶´Á?_â“”RÄEÁ\pa"X¼ÍÑeØú–Š|;×6[ÙÞ첪²U°ø×ìz13’Ç1<2À¥JÓ¸NÂPû”\–î"&Ê¥]DÈ@¹‹˜g‡BêrO/ê¤M™âq—Š}Î_gÒ˜å3ÈPóˆÇ,æR†©äš%`Q0q¥ìð\yðf«Ó²†ÀàÑwAœpì?_Vy07hx(M‡UHðHib‡ÂH›0BáÃø=ˆÐƒ 4~Rà=÷ß“Ÿûþ“fÿ¯c3WexB5›*„fÒñ™Ÿïvðo¶5S± + _Ù2˜+Åû%Ø…Ì®¸ ™ß7–Ž¼õe+ž&¾Ýš›Xó¸oâ0tL +}ü+»Î‘B©ªbv$X^ÔÕ¸_{e :F) ‡ —¾OïñÁÖ˜ÞëôAUgµÝ[ijcÝ—ò0Šú~Õ†Ž'(²n(M¤"q†ê»O3"{Ž—ÃøÅ€Ò (&•”¼XSô„ˆþÐlMdXVç¨æÙÓáTw\€"¸‰zÂÿïPtqôX\@e-üŠ§G%8‡È™6¸Q¯Ã‘ÔFS¼õ3¼E®9Å]ýÖJŽ–8Ô@›‡¼@~áVÀ#œ¸ýàìYáX$mŠÑÈ5YóÀ¸™YX*t¬E9åJ @nªÞ’MG!ÝäÎéêªÓ6•n~u}sI•›S¶±(¥ë@I?d5ÕÙÓ5DhßC#Åaœ0Ÿ#U ɇä"îŒÚù‡.°°•kŒ˜tù1ÜzPÙ¨äDzÃ7"|óVéð÷ *í`o[­´õÉs)e…]ÁS CìÞç`Ž'œc­õ©X:ŠMH%ù¨Y’>/ W²¡Örh­Ç¨28”þƒÇ er.±Ýt4­a£:‡ãOgž™ðtðLÑfÍáó!`š[fl3JßÚhWLüÀ ÒŽŒHM¤ÁÅ/dê½Ú¤ìàÇþ WɬXáÝe@à"SP"<º€÷Û|¹…¬´ÐÂ…ÇÛñb[‚Ô•@°^ßæ"ÅÎó¨)ŽËá€vl›Uw' +ojÒ¹ÒHãKC™ŒÜJ\_]?¸<‡ž±M“l"nK@|Ζõ)Û©;ËpìîN¶rÀ´+óBSÙkzöjñе TêÎ%.í ™º–}*ÅKˆ”»¡{§6XË*ôÐgêjÃvv]üÈ^W»¦!{åvtyì(|±¬°Ò­rcÏÛ½° é—“¿¼›(NwòÒ4Ö’^ž íH mýÈvÒèïKSÃWŽmV¾ßÂ?²pWðüëÁŠ›ÍfrõòâùhÛñ|UoìV¢37Þeûs7ºh‰V«€Fl6|ZQv¸ˆb“^^‚Í‘m%Ü^¡)®QvcË x¸*m¶»€Ç« +O»Ô.<‰¦_%G±¡›o¯~>jëÂðæ(ŠwW†ˆo‚†½Æ9A8ë„v>ìC´õ]>x´è5F®_?aó8)ÊY£;âql;†sÀ“Õáô´³Pô!U¦Þ+ê OÙ¸f˜M—Øá*tÂCv˃Ÿ¶¾±®?dûãÎÿ  ë­p<…h_ÔE?×´ê¥Ì½€£–ípçáÏÞÓ?'l€ã+eè%]0÷¨¶­m þme™yéCjºÃº£f Ûíž²e€3!fï ÄÅ//,¼G:Ù«‘ªSÅó.'óc6vmI]‹›Ùc•õ›§wÄøñR8'¼ è²Õ©+o§ý/‡|¯>¶ ŒRVª¸Ö,3Ÿ;Ò_ rwÙ"ÄòüŽÑLŒ}æ(ÍÞU©'»É‹"÷‹TÓW´ŽÃàÅS¶{£…ûfƒP1Ö®ˆl´Øâ~ì†O÷Ný‡˜LN +endstream endobj 911 0 obj <> endobj 912 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 913 0 obj <>stream +hÞÌWmnÛFý¯SL  i½ËOA +$²b¨HdUbZUQÐÔJb"‘IÇ5Š\"·è-;³KJ²ìøCI‹Ú€HÍîμy3óÖ°hœM,Ê–gƒÏ»àt=°9²5o½ +['¯ç-aÇ_|ˆ®Ïl |›3nA¸nqô¸ØÆøÂ…áUë7ã´ÿ\Ö…ÞIïÙ3¦è2ÛÈE´^'éi%‹yKó÷ðGŒdëH. Á„çBxÚê KÞø¶lò­\e4“ôVQYÊÒ ß·úaËuLÃc®̲ƒ æt9wtBžÅ|¯YÇL™åÜXG"ˆ[-b¢•|¸èt›œ ˜ðk`¶¯“~™¶ƒi^ƒÅ…Ùq™oøfDzx`1ÇèšÂðÌŽð}70Fø‚¶"ÓÛf—q¦‡o?›~—y†Ôö¢LÌŽ‡³”èTdqâDz<Ÿ"A ƒ ãoÓE–éà'íyûÜûú¥ç#·ý;^ÿÇÛTlu©¼®÷ö&à+c¾\­`œ,–Ó6JìøRfǶ™0>šŽ¡!gLAÁÖ¯›×·Tóz8©Û!võh,ðt'Ó nö|tâl‡˜ã@` +\ÃOÒ +òÂôŒ,?•óIUïL™œ½í«ÕE¯sù‡„ +mÍ ã:”Ó´œúÏÀîÏÇ,™“uv¹^_ëÓáñ÷càä])ÑZœFU—ȽLMø«™ 3ŽÉm¢žœ—ÞRÆ ™CµÔH!Akirâ¬(d\íÌÕ ÔxwN u軄¡ÄškR.ûä29ŸG¡ +\Bš¡¹ÚqÕøA³rÕ†{©@ÝD*IÖõÇᯨ³ƒáÍáà|8¹3ºÆuòΟº©äÛ;[͵šûBé¦ht³¬ë27mÁCé¡ÀæÊLáà÷+º,¤iaÓ’f +#Zç+ å²Ùav´–A) =Øz0·÷‡z³t<Õº¦pÐ>@‘]VI*á*©–Û©“q›d·]íR͇є¯.?‘¹I½Ë‚î6ü^¶F¢t¦Ñ¡êˆpô•ço»›A4bºâ@û¯ÑXÌuÝü”ò¢„Ý€âÐ×ÀÖ$[“À \b;Æ‘fÃâ;\¨ì‘rk7Œ³¡ÑÓ®Ô¨ ©\ÈVU õÂÄd/±ÉuA8 Ä®+«qeuµ«9Faf¹9ŸYF…7'>®Õà§I•d)»Y•[ŠF·:ÞßØf÷«ÙŽéäëÉ{º5¤CN”åƒtžÝ+eµŒ‘t¡õÛœ{’xmN}I²¶úr°TÕ½ÞB¾U¡ûÄjGŸÐ|ˆDí©:’BŒP.Š‘ìâ=R ‰!´s"†t/UuûàŠê ‡„¾¬ŠxO¼.e燺®Š8cj¶áh&ËdAbHÈ_¼Žo÷ÒyÚŸ Άð}Iæ£6ì8Ç·a´&:Éù-z䪤5‚·r­=ì`K• #¶GöCB…è*ÙG¥|+_*Î(Å> endobj 915 0 obj <>/Border[0 0 0]/Rect[226.02 322.26 277.98 335.76]/Subtype/Link/Type/Annot>> endobj 916 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 917 0 obj <>stream +hÞÌWënÛ6þï§8+P”Jc†"uE±mnÈÐe…ãõO= ŠMÙZl)ä6AѧØ^bo¹sHɲ'í0 ˜Ä4Ås?çã'惣ó+æÕ PŠ¼(% Ôƒtðf<8:sÁ…q:p%üÃ/7 +¹’*Á…„ñj P ^¬`<Å…p=|`'§gàóŽŽ_¾„w¥ãF\±b^&«U–Ïá"¯u™&Síü:þ-)kÉçnìÃÐånàÃød0D•¢Õ-é6ªG:™éŽ—IUéÊÿ>8Éà ¸—*Žcà^$„gC2Qš‡(—ÞÎCÌPæ!ƹÉBlbzQ2ùå†_*´1ÿ”8ÊÃ(ïA +×újŽ‡ÿÉI°š»ïÞÏǾ¿ñØ£õ|ÌTA<¢ˆ¦ +"è À¿´ùz¹„Q6_ÔXLÅ*løJ—ÎP)Ä)dzÆ+ØùMó†Ò4o€ƒÚÍ°o'+æq`;™8¯AˆJ¼n†† ÷ñ“¥è ›°Û²¸½ÈÓbøÃ"©FI>×f{âLø¼Õ“‚æã¤6¡0¸-³¼N'ìÙèõåù)<ŸÃsÜž;‚Á³Cè4/uZOéum†Ç»šÚO'ƒ»%¥Èºòª•2G¿&lTìär½º¦HJ+¿×èÆ}t¼ñ·­ŠœäËžñ'ì]Õ¨Œ‚ÿ{/žW/¬EÜn•T¤a¾×" +âA+;™äÏÚCŶ–'X÷MyJŠ¼^—9ˆW_v1¸C{l)ŸÀmeñÎmñ®šñBCê(TÍ Ž¹l¹,×Ãߟãµ#±ÙØaË’ÕíRCµhO8Cw+H`š\Ô ì@u°oVÒÚ[.¯“©ãÆ8 7Pë:Ë5|ÊêÔèI}«¡‰Äo#áBù[*å¦ÃÙL§å;,ωNOóÙñõÍå©i¶òÀý¨6î0lN<3Tè„׿¨L~X’ÏÀêi½à±×8!Ú|ãÃÇ"›ÁÁŽQÅýxÛã6ç¢ãEVaÊ6Ɉ·’±J#Ðo—ÝT&)šœ1ÉÅ{o[o{w5¥,RsœB0ãáMÊê{8±×sÄÝ}>I#ÌÒ,Ïê¬È+¨ô”|'ü]à¡–ªž>è`ï· ß”å LL¥Ž1^ÜÇM~³å>´PÜvø^ê>”혭qwµº?|dÐjö anÀN’:5®i±Á¼èщ/ôô†Ó‹4Ý´(KÌÌ~ˆ0G¿ûº~Äí­–|h¯cc¬‚¼ ‘†‡Û”,øJÄHÈš%5îj¸M{äs¾%}ÑRq7OM{³/¶ü-wT<Ž, ˜•áX! •¢Úf#=ǦéÞ)¯%›Ø}ž²­2Òµiu–iD º}$M„'3ªVZ+S‰ î=˜‹£Óó‹Ÿ/¯vÜð íŽGÍøz²A$¨ê¤Ö+}›åÆ‘Ó4[¢+‚KœÖ3GÑ¢°C(y zPày®ªû¼NîP‚*reŒC”![9Š%4X\ã wqáC.#ƒBaë¤Üš'té#ë%Arn;ñHè²›í€Éêâ>Ä¡×ð‡­aõgÃÄ‘žRÉ”ôxïÒäóÀ@GKLºK$"ØJúôeøHƒ/ÖV“Yëž×Â$ahC¾¼8ÜyCøÀÞžžQ%Þ"YY'sô)%Òb­ÖyÿŃخà;½fúnWƒAŒ=rï“åºÄíìÁY±¾FÊ€'Œ­†nk(Û_µfŒmÄp{¿-{õ‚Þ^T}Sw†—>-sÕp³Çeö$Y!³þ“Ü×û%ö×v„wÎÁR­À$r·4,|Å®Žöß qnôÒ +endstream endobj 918 0 obj <> endobj 919 0 obj <>/Border[0 0 0]/Rect[169.92 238.26 207.9 251.76]/Subtype/Link/Type/Annot>> endobj 920 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[332.94 107.58 503.76 121.08]/Subtype/Link/Type/Annot>> endobj 921 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 922 0 obj <>stream +hÞÌWÛnÛF}×WL cs½»¼ÃÆ—"EÚ¶š>DEAK”ÄF" ’®mùŠô'ú—={%Ê’ (PßD/wçrfæ̬ Ùàè‡+A³fùó„‚$"ŸS¦ƒ—ÃÁÑ… AÃé@HâøƇHbæKŠ}θ¤árÀ!…ñ õi8Æ ïï³ó +YB§G§ô¶vEÂ|§šÕÙrY”3zU¶y=ÍƹûÛðGhò¦‰4$O0…4<xÉW²¥¯dkÑ—y6Ék:]dM“7îðÁùp)܈X“~š¦Ä‚„óÀ8IG«÷ð”É ÷@(|ýŽv0¤Úù”ð2HV>+ÃDl ócãôO™ëpó$®²Ø‰]OJžJ8‰+ðë‰8Sç-°VWfÛävÜ’áé',rr³^7…ëEØX• +N WøHÅ + eFjÍà˜ñ·B‚tüUF’‘¼þÜúwßçWnûo¤þ·é(øKT ¸¶*à_êü~± Ëb6oLßiñM^»žï3áüéJ”¡“O˜6©o“7–:y#T꺈CSZ)K#“ÉêŬ‹˜£ à7æeK‹‘ãFú±('ùýÈ¥qU6íñFrUgöÀýü©Ãç+¹û¶}²lðˆwà[$Be«f„PêœßgË›…)ÿŽA`•Üd!VEj«c8Ïiêú‚¥Ž.>á,•+ü§˜)w%rîU +Gk f¾ÚázVÊhœic$ø& Öd¥Ÿ¤Ñ·X\gcW¤ˆêª«Û¶(sº+Ú9µ°¤}¸ÉÉz®¼fÜH g’OëË|VTåéõ‡!Nô<œ­: ´#µÇóUˆ ¡Æ‰Âš’Ó¬32]Ù(˜¤† ê'ÌMƒpÙeцáWmV·;­÷5åwÇ;ã,|”•“-ˆ¯nC¾­ð¼œìT‡¸§kp”*àLÆÛ'èbc²¹P,‹E8*Hî¢F*]ÀÒ&[4l‘Ê®@Qü6^p˜? +ï»"Û‘`þÊæB̲½ÅGoïà‘r?:P´Þ„©2Å ¡ EQ*—•[¡eA4˜Šp/pRç@)5ù¸E\XÏÖ>)¡ÊC¹"¥]„Tç  ]/i¤Ý±©ûëÊ¡ßMŠŠfÔÑ#)2_ØmŸ £0 ó\­ÖúñU9­×”µóÐ/ ã³¬ÍÔê­}}ìƒÑjCqÜ_ÏÕ¹ú9•Ù2ïØC +ÚУ#:çcìú@Åt]{EªTgkÀ¹‹†µÖ©2v„o}æ›ÔÕÖW$2rÛkݼ©aøtä<Z¥:ØÒ#"R»1Èa¤ËÚü Ĉn2Ì2åŒF%–ŸÜãÛë¼½­KÝ[ýò“Jš-„Ôú´ªÕ¡‘SÐ âÇTÐwdBˆeE祿]^ª¬œ¡Sè¶ÕTŒÜ}ðmƒðí„ì–'.‡ÂQùìÖÉâÜãºe1réIÖ‡°ê<¬mËÕI¿(lë̃9³­*ASW~üÉÔŸèÈ(ML“ÕO¨@™ø,J»,]·èø£¸¬îú¬±Ù£eá^`Îr˾oê÷2o1¿é L=ĘrU/ thZWKæ[lÉYn’åå›_ûúÙFïëˆÇ÷WSXÓ"3—¹5´|u}˜ ¨V¼ÍèÂxeº9ˆ»Ç¢˜55e›ÝC\¯=bÎ1,]5~8™¢:Ê®ÑI;¥}Ç<‰y"ÙhÍ|óÓ>v†m‡‡àØœ>#BÍ_öJ$"«$‰ö'„i1faªîF«q@Éñ{Ñ"mü½n°õ,+…Hcb`LôWí)HÓn¿…ìõùÅ‘à5Šð6›å˜e-t¹†./·¯jÖŠ7»´Á…õr×S—Pè3>Gê;™£nŸW:`O÷¬÷{m§«÷ÎX]3Éf?áBæ|ÜÝ`l«ÒÃ,)òžg–äAÆgá­}Ël\W;6nX2©n¯1aÜë]Êm‘vÃÞ ½´ª (FÚlhÄ Á¤I PuÓš†‘-¼‹ªV_ÕKÚ‡XF²i±R²$ ÃMpzIø*îÈ5ÓtÖ¿à¿w>¿QL¡®8…+07ÃHSP§Õ$GnÛKO' ƒ àBF,ÒEû…ÛOãhmEÖpªnT¢âjmÆh\¥Eö[ÅVô€'ì¼jk‹§îÑÍgž5X?ûÊ(ÿ|»ÜG¸þdm>h +endstream endobj 923 0 obj <> endobj 924 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 925 0 obj <>stream +hÞÌ–moÛF ÇßûSpHi|¹;=Y(6 µÓ!V©Ö7õ0(ö9öâ'Hò’`èÚ·ÜŸw²l9Úu¶$ˆeŠ<’Gòw§è¶sþÃ;E·e'(‘= +{1’ +Ó™t^eó׊e“ŽÒ$ñ‹ÕKD ) ¤š²EGb!Ã4 l„©BÊî;¼ÁåkŠDúçý/èmá«ž¼Õm‘/³å-]-+SLò‘ñÉ~„§ÀyŠ„J#ê*¡âˆ²A§‹%åvmðÚvék“MAýy^–¦ô³ß:—Y'Ö"‰‘H,¢˜„Ò4%ö¤ ]J6Kû‰ +¶^bX!°/‘g³ ©Í=%¼ {Û”9.•Ôq‰Ëù§ÜBdùHZ*¿‰ÄKü®Ö2Õ"ôz¾òR¿«’$J½·x€¬X9µñfT‘ã齟ôDì'/ʙߡ¸ZònÚ½’¼=ZÇ ï‡‘ÖaHåÂøÓ°‚öCüç É­¼û<øúÜçgªý;«þÕl‚Xô¸²®‚Œàú¼˜Ïézv;­PÌÀ+Ñð¥)ünåýîkL¡gƆ‚ί›7Ѷyc ên†#7Y©Hc×Éü€y,îfXb wvìR¯67sCo6‹¡7ô ­èV˲z¹×ˆ’‡b€/Öd¶¬hš—~ì Vï*³¶v{6Ùéæhï¢xN a`¼$’j‡±Ü,ÆÛbµ.£hEþÁ-F#hOóâ”Ö0y“/ÌÐ.3ƒx96Oò8j÷>ŸojCˆgÏÖ)AÃúÚ,nLQ{ƒÄŸôfeëmKˆûâ×Pf_Wå¡«ˆ?eó®*ìgl>Öø~rP #™pwY„GÜZÞåC¾XϯäÛúíá^©-VkžeSC?P"õ,.•7Ÿ¯|âû=%Æ×èi<ëÊéVÃ”Óxf(/LNÅjSaÇ8r-Eײ9k¶LçÓÚ”ì$§Q>Ÿßä#_¥˜½;,bH…Lh{x¼º¡ûY5¥ +±W(¹”ëYì"à(rç\Ò>æl£”“b03ˆ¶sÇunm™’"éí½eBaë3Ê—cëzÄçcÛ7ð¢©lù›]¯î[N°m¡SôDk…6IøX A’˜kÝPÄõИ‡ÇØ=Úœúnï2È‘Ô¯nsÎQ…Dß´“Ü”ù£ò” ‰5!ͯ–“ÕÙ®oŸêÿ jò*G9ûŒæýã)9>xççÔŸ°;šMv¥›•hvH‹ÂŒªcü`g0à¹ð¬Å7ßÑ®‚g]ÄÆóa´kŒX5z'YípÉ+:Ò1Ê‹«.Qyeè¹ÜíÏ:/¸wÅpÈx8ú/ª¦ÚKRÍ[ûò#×¼QE€ÌAãàêòâúò‚¾óÄöNNÎêÒäÝï™sæîžìÑ ž­Wc;u†Ì´ÆÖʶ)¸(¹Wd}ND6T +ŽPIãØK{ ˜¶—'݆ ˆÄ°a‚XØ0ujØàê«6xµÇ«€óRfM±Õ°aŒlÑÞZäÛck4ZZÌ¥‰Ë¯Á‰[ôàÚ¶y‚Ñ9Æ\Ë÷Q¢š˜ôÂâ­9Œ'4±Ò}ÿÕ!K×<Ú_È’buˆ@úµ8âÎÉ—Íô|uª¸:BüÅDÙu£„cø šìÁäÄÞþ6LpOýK€Ø}G +endstream endobj 926 0 obj <> endobj 927 0 obj <>/Border[0 0 0]/Rect[267.6 453.24 343.62 466.74]/Subtype/Link/Type/Annot>> endobj 928 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 929 0 obj <>stream +hÞÌVénÛFþ¯§@Úæzy“pÀ‘íÖEb ’"ˆúƒ‘V ‰H*¶ä)Ú—è[vfwyH¶£ PÙà1œ™ùæ´aÑ;ýadâì.„</ +ÀåPˆÞ¼÷zÜ;½²Á†ñ¼g;Àñov2×ÐåŒ;0^÷8jaÜ‹]OñÛŒïzŒ‹Ë+ðYýÓþñ1 +ÓŽ˜kä‹"Y¯Ól×Y%Šy2æ/ãŸð$Wä3;öÁ²™ø0¾èY¨’׺—tKÕC‘ÌDýUR–¢4Ç¿ö.Ç=ß‹Ñ€ù0Çã˜qî)‡‡…Aý=eŽ·ó \ùm`ˆ¥ó1àG/ª}&ÃìPæ†Êé·‰ézèæ8Ü6-Ÿ…FhZŽÃc‡yFlÚ7-; ýØàÒŠ\±Í¶Ó +ÌŸÞ™aÄC(zQ¦¦ cžœ,Nø8N@dF¬Íà¶2ãOÓG Žéá•Œ¥¹½ï½>wÿF¶ÿFëÿ˜MFÁ XD1à: +<Ø«€xæùjÃt±¬0˜®QbÆ—¢0-×e¶ñÉt° 1cÒL}¼¡#“7ÀJm‹ØW¥³8P™L¶ã°Øƒ DE^[È‹ÝàÊ…M‘fÕ|b¼Þþ /KùoÆÂä¼\À˼8"¿»Îæ¹õ +¿dÉZLŒ‰y¢0²\F¸Pºr* ‚EýYÞéu2Åb %Þïëwü¤IÆG_Q™©ÈZ‘ÀÄ(Ö"r¥ð;EúK tù‡^IpB0\(|œÝ¸5´4±@Â[÷ç6 \Ïe6p?Ô»•ÕŒKwf:U£¯Lõ´su༸å$ÿ›Ë«SãM’-¶ÉB ZNÀÜH-Za-éw:ÿPȨø”j¾Qˆìñ¢Æm '9ƒ)ƒtµXê;öçù8Ñf8’Y°©ÝAE+Y„K•¬³f@Y²IS§´B]uS‚›y`|~ºk§yVV0Åj_&ÅÔƒ $½Ó8°uÁ2)‘oT%Eu'ß`¹Zå˜ÖÙâÛmû­˜àêçëuž]gƒ4k9‘~ÖYm^‡=±ÛmÕ•£AÙ•kÇJ#7@RªÉf5|o“û×i¥æÒ;xîÄÍþ”§3¦K§”#Lõkkº”d|ß ¹;çîYÚj¡0ì)Ih”>£¤k +¹3î@ äQy\š'•q&îOðFXA™þ&äÉx¬´ƒÈ]Âßn ûó¸fËe˜H+9†„„èŽEOsià|EXè|CM:ï»ðÐÍGeÖ¿hUܽ²›îåï£Ù9ú)Ù6‰Éö磺'¼©3TmrÿúJbQpQ„â·Ÿ×gz¡Àfÿ—á%¿Ù +endstream endobj 930 0 obj <> endobj 931 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 932 0 obj <>stream +hÞÌWÛnÛF}×WL8àÆÖz—Wi 8²¸h,Ãfò#S‰4H:·&Ô¿ìÙ]R”ÓŽ{*9Ü9sæÌ,-iÖÛq)iVö|‡1 wà“#¨HzÓÞó¨·"IR4íI›¾ø‘ƒ€;6Žà¦hÙðÂ…:Mp!¤KÑÇÞëèø„<> áþpw—Î &ܱòY/—i6£Ó¬JŠi®^³`À}+1ö¢LYßÇÂ> endobj 934 0 obj <>/Border[0 0 0]/Rect[308.16 388.26 383.46 401.76]/Subtype/Link/Type/Annot>> endobj 935 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 279.6 140.94 291.6]/Subtype/Link/Type/Annot>> endobj 936 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 937 0 obj <>stream +hÞÌWëNãFþŸ§8Bêj x˜‹¯j»ÒBEEYiÿýáM&‰«ÄA¶Ù²­ö)Ú—è[öœ;±ØE­*5Hؙ˹|çòH˜N¾¿•0¯‘†X$$h¥Ìß'ç$Œf©@à>ds­ Ö‚ £Õ@ .‚TÃh‚/B0úupÇΆçòNONŽàºôdÂ5[ÏËlµÊ‹9\µ)gÙÄxïF? &í4…\¦!ø’Ë(„ÑÙÀG‘¢•­4ɶ¢oL65%œ.³ª2•7úe0  E7"FÀ•NÓx8‡"Åã¨ÝGO¹ +zûá í&:º!µÎ§€›AÒúL†É¸1LÇÎé3OèæGPBz~Èc{¾R"U<`©'™ò|ÇaÊ®ñ×ʵ;6}˜ÔàEøö³'JE1Df¤B:3þòB” ¼ÿ“‘à$oŸ;_Ÿ{¾ðØ#õ|ÌFAG<¡ˆ& +"Ú©€©óÍr 7ù|Qc05«0ã+Sz¾Ö\²žÂ2dfÊ­)˜úMòÆÊ&o„•º-âЕVÊÓÈe2½`ÁF1 + ¶E,° ÐјŸ|†Ö°1«&Y1YdyqQÌÖþëEVáòÛ+ÐLÇlì=ø½“š‚Ê䬑a=b0[—0f9| âkÈá¨&¸Ü[<¬H&.£Ø˼ª+’§Ž6 +F‡}±ôé[‡«¯×­iù1¼ªòß >p=/ªßòâ:/ŽŸ÷jýPãÔüìÄAA¹ðÄØ{ö}î˼¨gcv`—àíÍÙðfx6ŸS±ƒ.#d¨ñËpì+øª‚ƒc ÿïòwŸS»ñ΂tG ½û‚ƒu¸|0fpqE +ÑH«³#çzø¸|÷¿ýi´Õl%áFñ—7xaX¬¬ÏœÿôäÎÓ«]¹]¡Ì BÚÚÜ(M7Êþ©!Å–~5OÇÀöˆû@dɈZOHu˦f–ß.r³œ’à ¥nÉ›î!ý9âÞ«e²Èý©±ÇH‰(7ž–Ød°×P2ž´mhšÕÌÊõ +ê…ÆΦÃHÁ#ºŽèoì²ý„Ý^O/Þ\^ G·=ëÓîÕr™²× ª³Ú¬LQc&Y•Äþ3ÚÔ¾6zIœ3ùyÈ8œ{8°„líῪE=¢À™§•]öÚ ªÆç +ŸøÈêI×zèc» 7—´¬‹ªÉÀì=æÙÆ0çZغ+gžx QÇ•M`ö`8†ÊøãöÞLòl W¦®þlÆ-›@§‚Ç Ä5à‘ +Z.ئ‚N4謤„Âtè!è|üt˜;xÚ`Î`Ý2_Zæc—ÃóÂà2+æÙÜX0|•òXt':ºvxæÆ̈ÍBÌ0Š)öGB!ÃŽŒ;àšâðݾ¯¹ +÷ñSv2c4ƒÞÚ¨÷"Ô§DþdJã­+G‡$¥©Ž M›°-3ÀÑŒ¹F¬ÑÕ%¿Æ»É{.Õ-²ò*{ï*[¢6»N:Íû âÆuV/*wÌží!2·Ij; Ÿ«@ó”&[Õ|ßS:£0 ´¢©q…Bá5Ž­y15Ô¯"¶Û‹ºÝD¦°M 6|ÌV÷K7–oˆ£êLõZº\SM±žcjÁì„à ³_vÚ eòtsy¦ó…<íõÙ6ˆvB3ÔRöèù8TY›©a¤ì˜:€d¶Ô¨´÷ϵÝh§<‰÷Jž¬Ã:í™pµ7ÙªuSífBͧŸèO°€¤Ÿ +]üõ&ymžçJÄßÝÞj‹Fí°AØ°AèØ ´löØ +<‰½ú¬ßW륩ŸÂ&Ýo‡£aÏBÅõ“1“Ío›› +Ö³-ämä8´ñ·p^» +endstream endobj 938 0 obj <> endobj 939 0 obj <>/Border[0 0 0]/Rect[211.62 113.22 246.3 126.72]/Subtype/Link/Type/Annot>> endobj 940 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[309 556.62 479.82 570.12]/Subtype/Link/Type/Annot>> endobj 941 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 942 0 obj <>stream +hÞÌWýnÛ6ÿßOq+Bjm†õ‰`Z'):dKk†z›v´Ø’!ÉkŒ¢OѽÄÞrw¤dKŽ“Ìd™<ÞÇï>)`Þ;~70/{¾„€‡à†>H…êÍzoãÞñ¹ñ¬'àøÅL:Hθñ²Ç‘ ãn$!žà .Ä{¬Ó³sðXÃãáë×pUØ"dÒÊçE²\¦ÙÞg•*fÉDÙ¿Ç?¢$i$yLD ¾ñio€,yÃÛ‘Ä[³¾VÉT0\$e©J;þ£w÷|‡>â3ÏæÈ(Š€¹!ç®1I[©7ÑPæ¸MĤÞD;·(DÚöpÓ “I/ÔzÉÀØüSbK­Ü€Ã…=ðX`öÀqxä0׊laI{ ‚À‹¬+|Áµ"7dÓõ¤ÛÇ·_í d¾¥ÌzQ¦öÀGÂ<#45Vœàq? |H¨Vƒ £Æ߶‡ÛÅ') †óîwïïS¿ßHößpý“i/HŸ…ä^{û{ ð/e¾Y,à:ßUèLi•ð¥*ì”LXÚf¡¥¦L«‚‘_oàèàõ1QŸÉa$ô¿•¿»$£7GG³Ei;ÚdUò@Ùu|î6‹|“ôB¬<ŸI—XÑY·áâ&” 0U³t”V +0˜­O?ÆQŠdNYuŠ´Ó|}»Pðp“­—cklkêIž•Õ‰>¿Úm¾…è᦬Ôê묾…êá&/Òù×y=CÅ $iVRÙ˜äY¥I ž]tl`C¾ªÒ”ŠNk¾Ç"†% …$ž7.“ûž—<Ï絿ÔÖÖ—Ë‚j†Wj ÔuÔBa˜OUùWpš“1ŒvÁ]L`–Û°wÆ’ˆwJlƒF£cJZ%sh1s¶¦N¤hÀ`‚ Ü%Å+BÕUE&®w½³GŸ%KÕþsÝ‚%Š…[¨ÞS@Îòþ. Pÿ‚õý4©XãjýŽ!ú©éù8Bp4A Ã1¼SÏ÷Îv.MKýE¡&UkXèh‰ãßÒg¾û¶žÆuãlüò%ì(HÑÃÚ?r®Òù­êû'V¢=[/âZãŒ4®`/Ü0‚pyŠ»Õ“°AG<®6!Ò³cûäv‡TÁQ‡Ò„ú:Á©+›³=O8»PÕºÈ@´é¨^Q&šÏŽµüŽ+ÝŒüᛟ¯.Þ Ï਄£9±=šÓû‹¾‰ žÁD]®¾qFÃï¹@ܧ†«¦=µo:O¢Ýª²t—Íq³Ngé{Ò=߶òôŽ¦ðö7zŽb\>»ÒvÎá„°î·s…Ô­;üÓµMÈ(mž§oCQjV¡hm<2}{änþ¨iH†B÷ ý†•Fx8Èï­hêY:Z`LnÐt ¯V¦ét +»¨ªkUQƒ¦Öœ*j(’ÆAš•-ô¤8¥"2+ò¥® {U˜3ßy\†G—ñ¨£R»¹¸Íý¢™lK ÔŽS‰B7²Yº@ èæÁŒPÒÑo±iZ"%±9·ÉRl‡ø( Ô£&94Ü6Ëx{ +°ó-mÿ™9$¹Ån¶3m@¶‡ûWFgk›¾‰Ò,¶‡ŽA§o<‹¹xî §LÁò$ÎDæöé Á>Þ]{ñè‡À|mw3íüì¸84#iPSLj¿Á]#°ÆרåvÔ¢K÷–¾¹ú]œ“3.’l¾¦1êZi> endobj 944 0 obj <>/Border[0 0 0]/Rect[218.82 439.26 261.42 452.76]/Subtype/Link/Type/Annot>> endobj 945 0 obj <>/Border[0 0 0]/Rect[320.4 275.22 353.04 288.72]/Subtype/Link/Type/Annot>> endobj 946 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 947 0 obj <>stream +hÞÌWÛnã6}÷WðQÜ]3¼‰”Чn»ÈAâ(š>hÚQ!K…$ïÆ-úÝŸè_v†”|Qì$ض@À¢¨áÜ8çÌDÅèä»AÍÈ(byBtbˆâ¤v£ùèítt2Dé|$$áð‘X¦$±Š3.Ét9â …q*2Á‚ M¦ŸG?Eg糄œžœ¾~M®j*¦¢jQgËe^.È»²uõ<›9úóô=XRÁRÌD“±`ÂÄdz6ƒJÞë– +u{Õ×.»s59-²¦q þ2:ŸŽbB†Å†0©Ò4%L'œë‘Ìšþ;DʤÞû‰À<(ÿݤ!õÁ§>ꤶsLÙô‡Œ* a®‰ä‚Žcf#KÇRòT2¥TDšŽ…µq]Áöê*ˆÝ­f-¡V?P›0¹°_79¬JL§OÇüHi,&ÝH;7¸nüEcÐ ©†_t’ÍÛçàõØó…bÿÖÿ±˜¿eX‚wÀ»[àf€€hóÛ¢ ×ùâ¾…ËTQ߸šŽ•b"úD%À0rwÌ»¥ß¯•¾x õ ƒ ±fÀ[”áJújŽ·7ë²Í^'“8¨IYj pªbÔFUxV÷ZLÈ JîÜ<¿)*(ñ±‰~ùc\ÁJ截3pÄÈË–Üg 5ÑE¶võmtKɬ*›ölú +•â;™Ì}V¿" +^fK× ÃþFÀØãà*˜ÚËÕ$®Ý¬ÍÊEáš¡ ¾ëU8òPÜFp—yyçø„ßÖ/{¸™¶'ÅŽvUëÈ=VÓÖs"¼œ« +4dáZv«òöiýÑ1v_VŠ¥I¨,¿ò, Ì“tpáÜ´ë"õ†ï÷ŠRǶ+J_rSI(kׄd2Ê…” 4<…(³¬Íȼ®–¤½w¤ó³«[Á™­^{‚Ú}ÍE7Ó/ÎoöüR,†>´‘¢÷ÉÖ£»i³Ö-Ï7‡mižŽ0"¬ Á¬jx¯AË aB•ˆ*è 5i<Ì@Ñœ*ö mØhIU”µ9pö±ZµÛ¨Æ2f©ÒöNÊMD¾ý"Ô9€ÌÙxÇÑ›,màÌÅý†4Α?»KØlÞÐÔÂãKÏJš~”¤! 0]HPÍŒïS=;mï_è‡(+±ŠúˆûÖwæC²éX³xî<ï¹X§fãv×/Î''xAùU¶p@§k­ÆFìÊá,!ùÊ……luÕ?†~ ¸Åä``ù +*U˜?ž§RŸó’iÓ®µ…;Ȥ/aͱ瑯$ ¬ïáòòWK×G¾L÷n½ÏŸÑj€|Õ!ßä[D¾}ùj·¦íò¿{y>Ý€ö#è€(Еƒþ¾= ´¼Ëjkï‘1ˆhÏØ6òäYž8 22 ù¨0*éXÊ)Þ§»ðCiÌqŠ0xо,)bbÈ9hrSüó•1îcú1£\º¶ùÒôXPšHká_ „«>N * lÚá¾+¦ Hìõ—æ}|‚;¤ÇÝcêÀƒ˜-`ÞÝÌê4Þ!`䉱@ãCìd÷¸x@,áû¿Ã+’ãˆrò ³x ¾€Y#X¹¾2a.9­Êf®¼MŽs9¼e¯nþÀiÎ ÇOüšï+°?p$`ó]ƒÙºwMþ›»{Bý¦}_í€íÇây3ÁYíõICÞ\#£®Ú'eNQæÓ‘Áw;_Vå™›g«¢½^‡_Ïß \¾Öx +endstream endobj 948 0 obj <> endobj 949 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 625.62 140.94 637.62]/Subtype/Link/Type/Annot>> endobj 950 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 589.62 140.94 601.62]/Subtype/Link/Type/Annot>> endobj 951 0 obj <>/Border[0 0 0]/Rect[218.82 508.26 261.24 521.76]/Subtype/Link/Type/Annot>> endobj 952 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 953 0 obj <>stream +hÞÌWýnÛ6ÿßOq+P€LbF$õ‰¬º| ÝÒ.H´ C= ŠMÙšm9ä5AѧØ^bo¹#)É’jw†kI¥N÷ù»ß9ÌG§_ßq˜—#_Bà„à†>H +5JG_Å£Ó+âtÄ8ø‡7L +¤Ãñzä 渑„xŠw!~?zG..¯Àc!œŸžÃMAyÈ$ÙÌ‹d½Îò9¼Î+U¤ÉTÑŸãoÐ’´–<Æ#Æœq߃øb4F•N£[H­Û¨¾UÉLp¾JÊR•4þut|Áñ™ç2Š"`nè8® ÉDi^b L¸½—˜- ÍKŒ³ÍBdb_ºa²ö‹µ_2°1¿I¨t1Ê'§c$ c!œH0—D”Žyx¹Á<+6Vl¶V@}|ú!ó‰²çE™Ñ±‚›\gÓäÊÑéÂt~´Qí†Ã­R5êâU; Vóî>øï¡û?ûo´þÅL¤ÏB]§®‚ãà_Ú|µZÁm6_TXLIJ|© +:–’qòØ…D͘q‘_ƒ7¼>6ꮇ=ÛY‹|‹dý€ýê¨ÄÝõ°ƒ !8Öý,¯`‘”Ô'w‹L­f2¡0ÝäeuÖA¡£;âbø[U ¿ˆzro7{$ñ| œo×xx“T‹r¯Â™J3|‹2‹&:6lƒ|°¨ß废{‰à®£e|ÕÉ Gð€Ö&Æz–ÏÔã„ži‚»,äRöã6îÀT›OŠ#È7ù…J“íªºÝ®žL‚ëǬP‡ã·TSÁ..™¤WEáçãò"YÇõ{æùäcÍÀ ×K†J Ý›'„•çI懚^Öê'ÖؤÐt&H2¥­“eŸÔwãC+~=: · ­K?‰ÐïVUZ›@u™¢8gBwÌ=&/%Ì’*´Ø¬¡Z(¨-Õ çó¹íI£=lMâÛWçßÞéB¶~Iæá°i¥9o|Ñ”jz¸¬’J­•I˜1§gOšaiu˜ÌZ眮Uã4\a5\QÉÉ™¿€ò)¯’GT”R)퇀¬©$I•!Ã'÷›mµ‹j,<,¡†Aã¤èô(:ƒÓ r€™ ¼Ž;û#÷;YjkÀù0î(•‚ßcÊ…®Žq·DWbº,ÿh )pº‡<Ì€ðÄq'€ùf$5ðÜ@ø\_ó…-üÞ#M­ÛnívC·n6>;Òú|}yuª«säóm2WȘ˜hÑà¦Pùp×à.‹z™²@aÖdÝcœè®^I$ƒÄ”ÃŒ~¢wœ;S_ûñ^ÎÕ vn¶,ßj-¾ aª·0mU$Ó%èâ~°Ó†9˜¸óÔÐÏ:™›=tÒ±1ÛlïW +”6ð ñÔo·ë¿•¹«ÔáαTw<©b?× ¢XiÉMáñãM A–•I×›¤\~n’”‰vCõÅΆì×¥*‰dÖ¡*ÏtÓåc²~XÙ³…NCÑiR'¨++놊É©ÚŠ—Õ +û_ö÷”ãU/Ćë$y¤cœÿÆ”‹V +á ÷%5ã 3ós9nk¯î†i²ZÝ[:öÉ +$–,W8ª…i«êéáî,’»v@T# “ÚóûeŒôBŽ˜v<ð„ÙÈ $ù¬íà1®K®îõÞ®é,ô{Í#˜çyC ¤íŽž3˜¤¨Çyìó}(<÷¢h¢žh&•†”Žù+˜˜ œÛT.c<Ç$üb“w²¿/ßéÌW?µµª_çéædÎ}_|ÛÞ…txº­Ÿ³ú_¡¿ú«¬]ÉxŒÐ8rz +ç ¥»j Yº«zV"ôñ´(Ô´Ú·ËÍ)˜íÅ|ñÅ ØA->u§â¡@¿Ò y×ærm®‚!œN´4þ +Ä߃8mçÿ=$øK(Ÿ³É$ÇãgzqÙ'^¨j[äÀÛ·æåG…Arµ6;áy Ïçpñ^µ®»øòF\¿úéòžÀ¡Tu\­Šººã—HÅ:džÖº#ÿhñ¼{X“°ÍTç¼!Þ^"ÒMÍ´ì pÎ ƒ/;Êðô%2ñŽ†QàøxB›þ—ò7Üú +endstream endobj 954 0 obj <> endobj 955 0 obj <>/Border[0 0 0]/Rect[177.12 556.26 208.44 569.76]/Subtype/Link/Type/Annot>> endobj 956 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 957 0 obj <>stream +hÞÌWëjãFþï§8,FÙx2£»ºPØÜJJ¶wÿ¬KQì±­F–Œ4Nâ.ûíKô-{ÎŒdÙŽJ¡ Øã£3çò«$L{'?ÞI˜Ö½ÐƒHÄàÇ!x*Õ›ôN½“K “žtAà?~É8âž ‘'¸pa0ï ”Â…Ÿx0áAHO½ÏìüâÃÙÉÙÛ·pS92æ+§U:ŸgÅ® +­ªI:RίƒŸP“g5\&ô%—aƒó^EŠV¶ë‘l#úV¥cUÁYžÖµªÁkA/ðt#äAÜõ’$îÇBøÖ¡ÐåQØ>GO¹ëo=G Ï“a2j ó"ëô‡Ôñ|ts®N?à‹œ¾ëŠÄå>KÉB§/£(HØ V•–m¼ipB<}r¢˜‡LYzUgN?DƲ 8 X‚ðqÝ0"€ÈŒ¤1CHkÆßN€\ÇÇO2¬äî{çç¡ïodûo¤þÙL¼ÇÑDA„;ð/u¾Ïs¸Í¦3ÁôX_«Êé{—ìÑq± ™sc +¦~“¼‘k’7ÄJíŠ8°¥•ð$´™L,Ø0B!~WÄ ]ùöÏ ,ª¬Ð“!{ó] oŽAWéÉWŤìÿ§+U Y6t†Î;‹ '0(GÕËy­ ‡ÅbÃzí7lXíij=4^)½¬ +ï¾g׆<žÄ¶™: +ÉØn‚ÐyÀÆj’}ÊR+ÁÛmdx7ˆü¦‰™b¦›xãÐp«4â-=†èc=z‚p§“ÀpŒS,P¦S˜TåôŒ~)hšYƒ¸„¯IÑÙõéêýÝ–Qˆ@—E^cFä¶iTëT«¹*4d*R@ýo’åÊ‘!&‡KÇ“Ô[ú¬¬ zÔ©&‰²éRõªÐé3J›8ž¹ÆÐO7bsüd©Î°Õ¤÷åR¯•m{Õw±1Ù5ò_õÊ´ð¶SšµáÓ1ÔJÁŸ§ú¯¦‹cä  ˆy¹æ°›w¹ £+bîûÈœPB4¡´Ð±/k–oÍòZ¨ý$i€nb¹¾¸³ DhRpt°/mM"Z5ÙTù¨,j Tγ´:‚"«!:`趜G/ù©Æñ]¬Y‘¾ÉÕ³”¨7;Œ»\ÅrŽ\×ÔCê½Le6†N-öDoaÊqq®°gz‘Ì(€zÖràÞƒÔR¥v«@ ÞÆT_Ï0Z£H_žßãn(Ü`°–:+> endobj 959 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 960 0 obj <>stream +hÞÜWëNãFþŸ§8Ey f|·èVbC¶¢ê".šª'qId;\Tõú–=gÆ—$ {éªUUC°}æ̹_ ³Þñ÷×fe/p!xQ®€"íM{o“Þñ; ’iO: ðo2 +¹ë@è +.H–=V¸ðb’1>éAòØûÙ:¾ŸG08ÁeÁdÄ]k5+Ôr™å38Ï«´˜ªqÊ~I~@O®ñäsû`K.’³ž&EcÛqɶ6}•ªIZÀ`¡Ê2-Yò[o˜ô‡‡&p?î¸q÷"!<“’ÎR/b¢Üñ¶±¤àêE̳­B¬s½¨I™â’a—šœß+æz˜å38B2Ûç¡2ÛqDìpÏŠ™¤W†~l]âÊŠ•Q›¬Ç°ŸnXñÀJ¼(3f¨¸Ê©šºV‚Êã8AHõ¡0â: !M2-8Ìÿ$ËÝ}çõµûgªý3VÿÃjº nÀ#꨻ ‚|¥ÏÓÅ®²Ù¼ÂfºV‰_¦³]—Kë9ˆB+p +N~=¼¡£‡7@ vö ²bf’éñ„hÄë0,˜‚0áÃ`žŽY`ÝA6…jžBõ|ŸBVÂx…Ò¢HÇÕÆ< +ÂÆnDå‘5²ªgTBýoÞÀ$7™º®TQ Pz{— ¥1øÝÔ’Sù¶¬ÜY^MGÖ^R;ÍWnݶe ‘¹YEUicOFrÇ B,å3Tæ£Q¾7b'ZÕþP×*Òj]ä OˆVì‚T%ëZL»ºu1£½›óÓkØŸ«>äë%ÆŒâ²q‹mm—ø¬ö'N´Í– +;ÒÅÎúAT®fÙ0O ùÛ3e®ä±¥EZ‹ÅŠI߉mSæ`Û­'bi©åý"…rÞh0ÛCi +ÆJ‡'Ñ‚kF»#`ýä‹Å­3ã¨ÞA±ZWYžÂcVÍ»A©yÝo’áÂõI=aVÝɦ‰›™ã7EÔªb­¹Y}q©6^TòF3°ðaÍÕà-$y(6ùCyú« ´ßŽŒ³=1`./¼Ð@†á¢QužOQºê7­|I÷'„뙪¬Kr¦ŸÛ×{(¬O{ž}xÆÏÓïó“Ne> endobj 962 0 obj <>/Border[0 0 0]/Rect[370.74 629.28 446.04 642.78]/Subtype/Link/Type/Annot>> endobj 963 0 obj <>/Border[0 0 0]/Rect[320.4 427.26 353.04 440.76]/Subtype/Link/Type/Annot>> endobj 964 0 obj <>/Border[0 0 0]/Rect[233.28 127.26 265.98 140.76]/Subtype/Link/Type/Annot>> endobj 965 0 obj <>/Border[0 0 0]/Rect[292.62 127.26 367.92 140.76]/Subtype/Link/Type/Annot>> endobj 966 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 967 0 obj <>stream +hÞ̘moÛ6€¿ûWð#ÙV ß)¡Ÿº¼ ²"hŒ´ÅºšC;l¹”¶ÁÐ_±ý‰ýËII¶äØM_6 d½yÇãÝsÇp´˜ýxÉÑ¢ž‰,K‘J ’ Un2Ÿü0qÄÑt>á1øƒžZ*²’Q&Ðt5a0 e*“h:ƒÆš~˜ü‚ONϦ):>:~ü]T„§Tâõ¢ÊW«¢\ çeãªy>sä×éO IFMšòL£„Sn4šžL˜’us éçS¿tùµ«Ðñ2¯kW“éï“ÓéD« –a¨6ˆ +™e¢*eLÅA­é¾ÃJ©Pƒïàï>ÂB{7dañ‚*íÖì ã¶5LÚ¸èŸs",ó ÆI¢©Å–$B°LP…3ÂqJn­ÎðÜÀ»jÅ®og "M©Á.¾¯ê‚$×¥wgpóþÂXï oFÖšÁx4ão¢aA\½‘(μù=îû} Ø¿3ëÿX,ì‚44õ{ÀÚ]`f”ߨóÙr‰^‹›6Sâ"¾vI¤¤¿'Ò»kLÐoƒ×Š¼2u7‰%ÍÒ˜ÇáÄUÔn²˜` ,Úíæ„ÇWE~’7ù0Q7Hðó( ð%mâñ¥kÀr.`®Â@GæW àǸÔè}‘£¼ªˆ…§< +Ü¡kЉæÕz…š‡ZíºÕ¡ œ`="to8¾¼8=~þìüÅéôÒs¡·ò~0Dø!!ƒ™ÕMÞ¸•+T”Q' ·´Ûã"½ÁܼX:Â5Õ˜¢3o½Æk— +Õwe“Œ¶'"¥™ h³ýtªóT ¢œû­5~ƒÁið ðŠxÊ› ÿ¶¾m‚u^õÈ+œfêÛœÂ{§˜‘Sž Ú9ôçå;7+ò%zášú¯–»Ò2jà[W³fÙ† ›`QÊøH1RÆ°k½um¹ýèLEe—`*[ÁyNES|J€„øì¨÷EüÁMñu·¨n×Îórq›/$Uð·öæÊq=â +R4m¼I£‰mb%Q(‘TŒjVжû*xÂ!Žm·,ó1Ê‹¿TÒ†QRÉU[K®› +Š1ùÌl“ýaD«Ì—¨“J *oW ÿúi™>¼}3z[7Þ¾{}ÿë7O?uÁ¶'ÊBœ¦­í1¿E®Þå êðPJ·½ÄÀo1{xp€¢‡î<<!é‚‚Q#ôÎ^]<1°êó†ä=¿Ä0ô* ]Í®†Lë5tȉŢ­ +_õ9nÅÈt삸èq=t÷ïg{5Þø>ÒWæ+÷¹e~çªmAƒ?}ÊN:Æ ð{»W#DúœwÚ;®³.…¾‘Êf—Ê}~EbTnq»Ì«WE§Ä:RªÔ6:ºÃW—ËëªÍáNÉF~¤£Ž=ÌtŒNžÀ¤YÀáz¾[ •úÂ*° 픉´45ããðW´ucào8[wüÛîdM,*º¯qÿ Ül÷6‹Ð¢ÄÂãË ðÙW$¸ÄrÂC9ÉRN ˆ±/v¥!: }äÌø<ª„_{nhÇŽ|é rŠŸÀ‚!±¶ X{Jpz)dUWÂìþNYí3˜+Øp#ã*ïíÉERtª7åÒXß4TuÿUY»Î¶' ç¶nÏv»ôî,Ô¡R ‰Æ¿¥„uÿ#Às\ý +endstream endobj 968 0 obj <> endobj 969 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 604.62 140.94 616.62]/Subtype/Link/Type/Annot>> endobj 970 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 971 0 obj <>stream +hÞÌTßoÚ0~Ï_q6UŒÅŽÕ§ Ê´I«P‰¶‡²‡ˆÈ¡JÒµhê´ÿrçÚRuÓ¤iÒ„À‡ïîóÝçû,` ßͬšÈ(°<Pj-£·Y4œ-#!ã‘Z¦$XÅ—m#Ž(Œk§ [ Á…†ì.º&ã‹ $,…ÑptvÓšŠ”)²[Õùv[V+x_µ¾^æ O¿dð$ÕŸ”0áˆ&lÅÉØRìúÊç…¯a´É›Æ74û]d‘‘ÌlÄ°Ä“Ê9L§œë¾¥®ËΉ2©OœÈCPû|dÁu½;@§N-‡º„=Ô¥lßóÇœ*]îArAã„Ybi,%w’iâ¨Ào,¬M™¢{õ®+n-PƒÖ'jSfˆï÷릤±ÁÀ]Øì¸â) ü„2Ü¡ .ú2~Ð$ÕøŠ„ùi}ñ÷Wë†ýÔÿ8¬»eXî€n›øË3ßl6pU®Ö-^¦" |ãk+ÅùF%ªø‚u¥àä†×Ênx +õ7Æ@cÍ3ý>‰,X²›fd;ÛWm~Ô5œ$=ŒcÎô‚F€J S:@…\}D1= ‹ P(ü²ü\Öp˜É÷ž?Ʊ”0É<¨jŒ…ô »ªiaA Yçõî0+Ûßø9™S@î7íy‡ ^Ÿ­K¿).}{‰»ùö1õ$¯¬Z¨n·1ÍÛuójL¨½ûÈ3>s†#÷øTZæÂb{öTœ#41†§‚®Énð¸yw|Yþ~NÏÿáˆÿS€Ào4æ +endstream endobj 972 0 obj <> endobj 973 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 974 0 obj <>stream +hÞÌSÛŠ1}ÏWÔcÂÒ5©ÜûQg/(Ëöeñ¡™É´³ÌºGÅOò/­NÏ(.‚ÒJ§Â©sNUz±¸{OÐ"Xˆ:K¬†¡ˆxÅâ–€ oÐüq ÑˆV£6÷B3 +j×ZÈ+Þhr¿ˆ'y}s ,Ë«+¸%´òØÝ~¿=ôðæp*æ[õ!¿åJv®ä‘Z !ùZ4 ©/ØÆNØú¡të2Àr×cU~7YxײŒ€>Û¶- KZ»YP0Ã%ÏJѸ_òlÄ䃭IúƶŠo“.]4OÄÈŸ‰Y?‹~×)ëÐ˯`4©Æó6ªÆP"ƒF’"^õ|΢‹ “¼ŽóÙúÓê*`”ªfÊ|>Œ[Õ0_y> endobj 976 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 977 0 obj <>stream +hÞÌWÛŽÛ6}÷WðQL*†wJÉn’¦@tã&(6}PlÚVã•IŽ»ŸÔ—~cgHJ– ŠŠ,‰—á™3gf¸‚lž¿dÛ/¬"ŽD–(N:¿Ø,ž,ž "Èr³’pøƒ‡(S’8Å—dy·à`…q]*²\Á š,‹Ûìúé3bXA®]=|H^vTLeí¶«îîêfK^4ƒï6ÕÊÓ_—?,ž.€a(Pˆb†BEeQX¥‹ñìÏ4épeâá?VTif²{"¹ ¹WGs) +!™ÌðËã8L §]ÁŠìe×Ʊõa5j™Ë^Ó0ããx××4·°·mз€œ“¬IëÈò:ø_&,\D,PÃl&©†_.!Ñòéyñùµçß\ößXý/ QP–ž¢Àí…ÿå™÷{rSowSe=¹ñ½ïh®Ù'*!'2¿fRv2HÙBÚ|–Q s3<Œ,1•¬å£¤9bçˆ;3tùZü6k‚F­æ¬Œ™šÇ$yó€4°Ü•’qNËá=ÌÀDÂb¥·©ÅÓ pWbÒ fˆÀEaö§Ù™¦,þÉ™¦à_9Ó”úËgERfàà¸Ku†Afi•jª1oº + ¹ªöûwÕ +ªLöžÜ´‡¡n|â1•SCZ'Ãy2¸ +o³`ú*4V‰ö@VUC½'ÃÎÃ1kߤšU²C| +`¨Ð`©,N1ücx:\rÀª vPŽ‚½ö}½mÈÓßW»ªÙzòŒBÍÕYKᤚ³Ù•ðU ä-rñ–’c‡å fê!`P­Ê˜Á;aÇzØk‰µüžt#oBÃ÷w¤íbvå²`ëœp£¥ÈXª½hòL|¡aÒ6~Td!JgvM ¸K¦¤‹¦6‡f5ÔPcÁ±Š õ§Ó.æWžöç’ k&#f$'@ov¾!•Òrl‡Ç™ÓæÂiN»ˆÒ0­Í© ÈѾL +I¾‰Ñ·Uç«Á÷€e¹©÷>¹+˜K!8‰â6«› ¨Þ< ¢H¿k©°Ù‘ʬ!i2‘ƆôÏü•mfC•(ÁS™í÷-rVdGìµCõŽJ_{*B7 S DKÉr—\Á¯àJµï[²ÚùÀ$TOŽ»zµ°«(+)˜ÉêTm“¾ x@Dç!­?êίÉ‹ä¨Þ‰c¼DÌ• ¦ º‘d$ñºŒ‘›P‡2[·¤i‡Ä‘’…9“¨Ñ ̇®>ÑTT¯=Äh&"ðÂs¯:áîý¨a' FÛh:Èô»«$t¡Ö>¶YuØ'¨B©ß¨2šJ2L®B^CÛ›6QøŒ¤u§ÄTî3mŒ¹)S¬ +@b¯ByTõ>JBIHäJd@ÎH…®´_H‘–.™˜Òb;EÚÍ­GõŽqn ¢B +5ÄwTŸ;ß÷Õ6bSúO4ÇÐ$G>ϳ"eØ« +Á¨kÓMTŒl¼6pì1S˜Ñ»,»ö›1¨Üüœ]Ž¸Íƒš$à…|\ U TæZ§‘w0"Òˆ?ïCy<¬j´Z$«¯á¦Y¬ï…Îzø•h»à˜×0œqÎBµÍ­ÌâbX&´,ÝÅàt9u“0„ïÉ©h<9ôäI=«]ÕÁM§ÌªÄ Z ­Y`Q‡Î&Ùxt”Óx·¤"±®JÉï1K' +X ©;7`£%›¦Ç²³Ú5í¾ÝKeiPPM‹6¬*ãû|÷ÿÜÔ$ÄŠÙÐ!iÓô6Þfß×ýÐâµ+ñ}Àm±ì6ó=çW™ºüòiÓšÑp·€M ‚Ž­SزNÖÌaÏ›ÔuíÉchLˆE@ƒû&5‹ßMª™Çྉ9ñº®ðhÅ¿npÕo±_…:¡ÐçÓBw¶ðª½ûwš%QâR©Q¾I“i¸´ãÿ©Z\5-¼î…k.Žsø‡Å†q&5gþ`"á™9 +endstream endobj 978 0 obj <> endobj 979 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 980 0 obj <>stream +hÞÌW]oÛ6}÷¯à£´Î,?D‰zl›´Ø€ Eâní0(6¨µ%W’›å'í_î\’Rd7 †‘L‰—çž{y%Ùíâù›kÉnûE®Y!,Ëlδ`[l/W‹ç¯%“lµ]HÅþp‘¶àZ±B .[íQ¸ÈJÍVkÜ™±Õýâ}rqùšn٫篞=co»TZ®“ö¶«öûº¹e?4ƒë¶ÕÚ¥¿­~ÄJ:¬¤¹2†-%—¹a«‹Å!Ec«Yì_»t) ž%5â°WÕnwS­S•ñ<ù”.1ήÚãP7®÷ \®&+‘dÎMθÒeY2žY +îÓÍ/òñ9xàXlþ4KÚ? I¥§¦dx˜Ù‘‚-M„­M€ýS•êŒ›ä)!Ó¥Ám‘.•´Rq•ÈTâ¿ãŠ’Ë +Ëmò¶kÃØæ¸Xšó"ù%õO\ïú:]oÒ6ĸOW…JåqHXʈEÈ€åÏÔ€)•_BŒ…È׳ŸßºþÃ×þ›¨ÿã×|tÎ-Õ@Ä*ˆüÌ$ÿrÍ»»ªoïS'=»r½ƒ-´æ2ù’*85q>ê?*¸P^Á9ÌüµÏmð¹õjÖ'rž\(Š~òœÂ:ð<›°×Çf=ÔPâë¶ÛWé¹· +/|ø÷ e±Ž±d‰Ä>±mŒÒ³c°¯Ü”ÇåœHQ,Ž wŽmS­à|ø…d½Ûµ©4ø}OûÍ–ø gøŽ:Oö¸âR <â4gÉË<¸šnÈõÖÒ®¸qZƒ¿pÝ ì]Ÿæ‰ë"ŸF +úIPȘü(hƒ¸À¬ÛÞãuLó3V÷»cDÉ’<Ó¥ÅcBÎïP»'»—]h2]î4…Ê3:L41ù>]}\,A°ÊœÃ™Rò¸êw½®î¢ª3Dó˜3@d¨N€Xa³9€)!xÔšæe”›¿#šiûÎ#ÍbÜ>…9Ó›€BV©)x™<¤ +ÿîot¦Ê"î{û°-OÕKVÐLÀAKÔÛÌ1“._Æ +…7õÈ…šÉQÑ˸ÓÊFcWÝíqï ŽºgÛÕýÀÚ-ko>ºõÐC¬ÕÈ•×f©˜"éiÝ6CU7åØÔŸŽ5Çý Ž¼ªïëÛƯá#-•æF~óì”ѵÞ#yðœÀ\µ¾›Û/'ûuíÞêPu´£d†yJóØêù|*2­¬WÒœÓA71‡ûž=Pl›´G6´0uðk_íÝ|m‹µ»pj/[ò«ʘaXˆ2,¦Ív¤M½Å4lz±2 f=±NíÂr]þm*egœ6¿['0FÇÈ'B8ÕÚ£ÌñËÙEj#gÚ8-ȱ[Þ@áxèõ ëÙ»ŸÊCdÄD´²òLgÄtïÎhUâÀ,…yB·¾Wñº½m• +mÕ$¾¶Ù=PÙ¦J ÿøZky 7ožtÀOõÉ#ç}ëÝ0¸fò@1ŠV aò‰l*vhkjéégãÈlÌ­°³ÔìDÛG0¬oIu8™ /Íœ±fÒÄšA »!#ô½ÛÄä5íQ…ËY[ucë)é âa:[$\ª3ÂâIò<ƒ{- uf ô ³\—á~êé +óuñÆMÐh·ßP :ßPJYÚÜÜ7©7UŒ=ý¦ø«ïžV×õÁ­ëjÇ~v┺OãÃüèù)§0Eª2C‰i³Ô’ ÑE·Bó•hàD1‚ˆÖ¾¦B¬ï*OŠfhÞ„¡˜a-7xƒjh9Y(|6­<Ÿ&Évù´ÙÓŽ7…Dó!g³äù¬Éé#cA——ÍX­&_?„½ÕÅ´©-‰Q¦ý›ÔRœÖ7æpí|KAIhKu»gøø|¬;· m† qpcÍè# `¶Õq7øƒNœ¨6S!Ý_ ´AØd‚o ]&h1²,ŽÜ`DÆ76“Øìr«y†Ï¡ øéc0|Fa<Ã6ã‡ãgÖø +²'ü%À9dÁ +endstream endobj 981 0 obj <> endobj 982 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 983 0 obj <>stream +hÞÌXÛn¤F}Ÿ¯¨ÇF+Út7Ðð¸¾f#%²¼hó°›<ÃŒ‰°Ûñ'í_¦ª0sÙ1ñN¤ÈÒ †®SuªNU÷ `5;¹ú,`ÕÌBÚ‹ÀBPÔÙl9;Mf'—$Ë™àá~‰Hs%A+{’õÌCîù±‚dŽžð!yž}eç—ðÎNÎ>|€ëÚW¬ZÕéz—+øT¶Y½Lç™ógò+zRÖ“â2À\„$ç3!=¿Ã–#ì?jÇšû,G8K‹â6;Òç!»w\¼7Õc›—Yc\$³Pr"Í!p©â8îGo›˜‡˜Ž¾Æ1K´@™‡˜…!G±ÉL øÐú„PÔ"è¢Vú·ÔQ>Ø HO8n€—Úq¥ˆ„ä’ Gà§gï+âæëˆG캮ì½Åã¼'äš}qÌ“ÌÞ¯›Üq1^V•”pÃÖ£ JjJ!Åw±xÂÆòÝ 0QÒ¡tyBXä×ï­ô=qÙƒú?^fª BQ ¼® +^¸Õ#?éócQÀM¾ºk±˜Š5p“5v…R\°'Gb£²lÁ{ùw +ÖÒ(8Ä^ÞmóȶyDjµËÙ6¡gÚM¢l7lW‰Ë‡n>d ¤å>gmKí¾ÑŒC·¿ÎrèËN¡këQ“G¼ZY·É]KK¬rð£(*G÷grѦ·ö¿[ ©C‘7m-_¿Bñ@Ør|e—ðlGˆ¶#dÞq1qr›.ð·Æ’ûØÊÞæT2á…6<âgH“Ë´iªyž¶ÙbŒŒÃÉjÕýíI'Ô(Éí˃iq,­ƒ‘kÆ»äuÕÂI ®ä¡Ì%Y›ñˆ¡¡BQ÷sZv9ýT.©Œš2ªY½NÛ¼*q,á°EÏ[å3ˆôÑ£zCÈè1ùkÇa_ÅÁã ψ?H:Ä o Äíœ!d¤:o„qZT&Ÿ>»OWƒQ`4ß)Sw1>UùÙò© +ÙŸÝÞo‡n }c´ò šà’Ë2Á¿9´R`kr`–Ðh!-Ûå!y,‡j÷„ñuúØÀiÞŽ±ºè[î.­±ïc–ÎQ­{on™²g-wY?6è£Üãi>ߟ‡6¡laownyŒ3m¤Å¶¶ñ8Yk`S: †<Œ¶éXh“å>úƒ9Æ”U뇪ÌʶÙð0d¿,«ý9š¦‹QðÁüyBü#êçY“¯Êý,Þ*¸µÝ ³5Þ¡ötšÖm­Íˆ3kå⩽kíÑüèE#O,’è÷Ot{Áynf7C?ÖYzh>*\ž‘õ†ï(5´ Ü©" ­ó§|G c ú»è¶T3>ì0PE°x*Wƒ}l•¨eÚ-ôâï6+³ÒùàÓï¨Ý“B˜Ÿ—§Yg‘¦Ê±?î«ØªñjžÄ$f\Ñ©1ËïÜ6 ­¸ªóã·Þyª4#c}…ç´‡æÀ(9P%c»+¼m*oi­‡ùwJû©Úñ$‡gç÷ + òrôAñŠ;¡¯›ÕïYûÎR å‘Æ"½] v—N»!âú#…h‘¦ê\hd›ÍẮÌo>Í%kñØŽ_ùÏÃûŃ8stñ¼âöé% þÎÃ3¾¾Ž9Rô©ÿhÉ£¨Ô½£1ÿ`K‹± +endstream endobj 984 0 obj <> endobj 985 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 986 0 obj <>stream +hÞÌW[oÛ6~ׯ8$ +1¼H"õ¸9ÍÐ+ +GóÚ=¨ +íhq¤@vä'õ_î”,'q<-u€(óò󬢳ß.¬6Q¦@s‰É@qèl´Œ~-¢³ Še$$püá ŒfJ‚Vœq ÅmÄ…ñ$WPTøÂEÅ}ô‘œ¿½€”˜ÍÞ¼†)Ò®ºòö¶nVð®ÙÚnYV–þ]üŽ’T¤˜LSˆY +Åy#$Ozl¹‡ýWGc¡YBjÄY¹^.+*–‘ã<ÌÛ/Ûº±/àm¥IŽ$3–fÀ¤ÊóXb¸§›I¦³aíÀPØþ:šÉYIùE4ÃÎH¹7M¸˜˜Á"Nm‘öj«4¨ýGIUÂRò’ §øªi,…’I"¨À'ó‰#—hà ùеaîêKµš1MÔ¯Ø0ßmj£¾¤mœÅ=]îL(e¦ .y¯ A—o4EKIêìÅ…ÈãøäïKãÄm?õ'Þæ½ 2fœxïž=I’ï”ùËz ózu½Eg*²¹ÝXL ¥˜ _©ÄL%öŠ ñßG°–>‚3Læ!„ÇôÎpSûq s<<¨Œáxç„$’ådûc¸=ËXrn—uSoë¶ÙÐâLò4$¹føòh¿ÂS:)äk[_Á•]Þ_Ú­ˆ@³Ï7ã™$µÓ|"îÈÏâ拦x¸³Ÿ¨;$ÐjO¤ß7âºA¿¾ÅXFˆ‘£Ey]$ħ ‡OÎe;Šä+ÓG2o)Â¥ä~Óáƒt†Êî^žÒiïqñåf2=êïqŽ*/{ÝÃ@.ïlU—kxo·/¸â°Æ—xà€ù_côjjôèáÓ@U60».룡4Ü|Y`³cAϘ}I°ë1œ´~¾9æ•#õxa±{zRõ+ëñt#êÇYÔåÿª`¸ÿDžH£Šâ±Š2÷½xoŒÞØzc³Iö¯}ý,‚¤ +½Â»fI%öÕè$|t·¥k°ãåNA.[÷%Ð÷é±½—ðƒàƒ|M÷$î¾8 +¸¡ø€‚¦®;B–»/ì‚2£X‚½¼F’åñ¾Â%™KfvKý§‚_üW€O¦'* +endstream endobj 987 0 obj <> endobj 988 0 obj <> endobj 989 0 obj <> endobj 990 0 obj <> endobj 991 0 obj <> endobj 992 0 obj <> endobj 993 0 obj <> endobj 994 0 obj <> endobj 995 0 obj <> endobj 996 0 obj <> endobj 997 0 obj <> endobj 998 0 obj <> endobj 999 0 obj <> endobj 1000 0 obj <> endobj 1001 0 obj <> endobj 1002 0 obj <> endobj 1003 0 obj <> endobj 1004 0 obj <> endobj 1005 0 obj <> endobj 1006 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1007 0 obj <>stream +hÞÌXÛr£Ö}×WìGHJ{öx´%٣đu$9sR“<`Ë$28€2™üÑyÉ7¦{oÀy2Ò§*å*ƒt¯¾¬Õ8Ù Þ\.9Ù”#IÀB¢BC$#E2¸œ¯o.8ádu?à‚0øƒ* $£LÕã€ÊT$Éj 'Œ+²ú0xï'Dӌތ¾þšÌ Ÿ‡Tzù¦ˆÓlC¦Y•÷ñ:ñZ}3˜¬€aHcQð°ƒB:‘¸K…ï!úÔµs©óïb_*ª½D0î5œþPð *<îsøÏÜ÷Úò@! ½y‘»ïîvëŠø†Þ÷¾½’¸ï‹2õ‡žÍ3ŒÍ"gdÖ„ Èjlãj,Œ;,ÿó55žðüg< ÄY~>ö>~êxämÿŒÕñm¶ +ÒÐkÀê*0ÓkÇ/ôy¶Ý’Eºy¨ ˜Ò+É")“ÂJI¹÷›/€^rG{­ÛÊhsÀ(hslf8h!•ŒaMK3ÄηgüÕÏhñW°™4j£‘cêБäÝW$ƒÛƒHP&­·!œÛ+p¡Æb„hk¨Åê+»IÇ©&o²WÿÓñ©£ðÿñ©Cö Ÿ:R/û„ e3Ç‚Zg(0+l¨Ùä Ä¼+RвÈwUš%%¦«Õ‹gÕB—JÕ–P1XcJ„®?~ð¹BUÈwdgdW&¤zHÈ(¾K²Z£"êj†GE(ƒZ:Ô2ØÖìOñì[0CUß}ÓžxbÛsœ”é&#“ß×q¶IÈ… +«¼Ü‡ÐhÐaÆ{ô|Š+ò#†þ£O>-R®õ­ñFŠ…´xl‚Š:A¤ÊɺHâ*!1A h:ˆPÄxÐZhà‰ÞS‘o|Î,nAøCÔ³GHàÛO»ª‹X’ût›ø€Iy”¬ ‡ø ™…',‹ZpªDµ=v‹xER>åÙ‚·Ée ¸-×ë0±\e²®Ò<+I~oËg”œe4ºõÆo"zžW òÈ"OÁõCü„€ï’r {z‹Yã-@W„ˆF0~žãiç@­@Û´¬’;r›lsL%÷>ÀâžËàGžçØ}Y79‹ +ÓµhöÚÿ½ÙèæÒÿÃg%às•®wÛ¸N5¦ ½Õ’¨Nuì©Š +M†`JèÉÀ!hi7äŒ *ˆæ. délZÿ-#í° ¥nf%Îý;—_å:d™T»'CÉGyVù¶‘Vª¡@n ×…-€[ÌF_;´“@M¸7…±òQ÷É{oš¥UoÓ?bhl¶ùm¼% ä +ä>öៃ#=˜øñ­/|½…`mJ¹¢¶©½_朜oó5ÖTy¿Ä›ú™¾0_kÊп¹Ð}åªÃ’Ú0¼ó«ëÑ·g—“åžÒÁPÚëÑð×Q‰”þ1É*K€…µ^ðúU×ä|W’ó÷îUdôñºJpýá°uãaà€‚h¢nÅP?kçùÍò|º½=[ì·Ÿ T*êˆ4l¼ŒòG¸»¬Ç+„!Ch_bFdž!CÝÃ]7¿žMf«~…¢Ó˜–}5sÝȘÅI' Ý +›…ó£Ã0Ê…ÑbãÉrz9Û AÚù×  Z4òÅ ÷ÑsÕÜÏë™2NíV­fy+‚îШÉàP5-.í‹â¦P#׎KœD¸z¥w:(ÔÔøxž ™M0½š{—£ÉÕÕåb:~å¹âíÚlLOÝzHä2:¥2ìðÜ»\\ßÌ—¯£Ruï¿…5-ÇW;Ü¢>v3Îqnds<‘ºpßN—«ëů¤H­ ¹ìÎ’î8ãNeXgN˜<2]´³Io†ÁvvBjíÜ°óÒµH6vI}—º5VÀ¶û¡—mš¼G/ÀÁ ÔÕ‡¨OèfëS‘î[á6þ´õ§95L¿ôjÂ{‘’4«_£Ú¤»ß²º£Úâ|Q.EH…zi9ãËÝm–Tuí1cZºN=a•áº»xË›s€ü7Ä:5%§f¤YG1!Ð+òsÝ5ƒ7ÆäÞ"‡^¼ÛVd±Ûîmâ\â¢ñΞ:Àë\ÊýAà¢è˜ƒ¾ñf×3xÁ9»¹Z-n®z‹{Ø›wŸ [¾0ï:0O³®pœtøÌñ‹9‡fÞͧ³/QóyÔd^äOö5ÊâÏ´é^±"Ü;€×Áñ= •Ýw7ˆj¾¸žO«i¯"Aï¥ûo¡áÑ0Ö$¢ãø;ņ— £¡i.AÓÂÆä.þ%À^LGx +endstream endobj 1008 0 obj <> endobj 1009 0 obj <> endobj 1010 0 obj <> endobj 1011 0 obj <> endobj 1012 0 obj <> endobj 1013 0 obj <> endobj 1014 0 obj <> endobj 1015 0 obj <> endobj 1016 0 obj <> endobj 1017 0 obj <> endobj 1018 0 obj <> endobj 1019 0 obj <> endobj 1020 0 obj <> endobj 1021 0 obj <> endobj 1022 0 obj <> endobj 1023 0 obj <> endobj 1024 0 obj <> endobj 1025 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1026 0 obj <>stream +hÞÌYÝrâؾç)Î¥TÎœ?IG—ÃÌ:™Ø.ÐÌÔÔV.dA.$Öë¼Fòû–Û}~„$ð “8U)WFÐ?_ýuÁÉjôæýœ“U=Š%I˜&JÇD2²/F£?g£7ï8á${qAüÁ× •‚$’Q&H¶1°B™J%Éð‚qE²§Ñ/ÁÛé;QM&o&?ýDîö!×T»Õ>ßnËjE®«¦Ø?ä‹"ü{öð$­§ˆJ2æ”ÇÉÞŽÆ`Ý,ì+y4ýyŽyBEP‚2Ûš²*jckš"•B>1bB…LÓ”P¥S6³XÐ$ö×!e*Tï: ‚€Hs2nñH +)‹Jûä12¹ìedCü[JE£à™ÆÃq/“p,¸æbæ!‡Gfß1•hªƒ»ýξ·<,Æ4 >…æJaßß×e8†xƒ]…àštâ%Dœ `KêbaÜÆò{Ñ8¡‚GÆB¬åãóàß—ž/üØÿÆêÿñÇLdL5Ö€¹*°xÐÿ¥Ï«Í†ÌÊÕºbÊ &³¢. ¤¤<ø5ДA±¤žÿŽÁ‰0 Ž¡oO[ZÛ–ÖÈf‘rG˜#§™ç4èB§íL¿Í‹æðHòjI&»ª1½»6ýv> +z‰^Œ‡Ä{H¬‡l]ôòd›;±Í]·ÎÆ8´ ÞëƒlõAX3ÒnCöNHY•M™oʆ\Ñ"DDðµ/¼Á´k(_Bè"!«Íî>ßÀ\Ñ4ÈCx°Ñò „¶†·îCÁàyž›uÞX~ŒE¢6”¶È…ιC ßäPKbŒ€~„cx4Á"0å¦9*%_B¤Ød&ðâ€ø×Î~h˜:rÝ«²"yk”<•Íšð©¢7WÆÈ•QRÍœ=†¦š –ÅÃÓ5€fÿ8–\Ñ.–¢ÍÐéËBvçA59xBœ’>L}—“û¯=¯€DzLXŠ¨ïÍŒptŠŸƒ®€"A9ƒ†½í¢›ôã›VË"<í~ÜWý;QbËïLAZ&;*¥'ΑKÎ(šÚ†\tº÷t*š§ÙRfTÖ¨åŠjùÏ|/yBâPåH·ÌôË6‡f‚éÝF´t-$q¤žò gª±S/Ú.¹‡xJŒ¢¬¡£M à yï’Ó4QÃ>ñË…pÀ# JÀ*éƒò•K0™×bÚ@«cÈØè4­>ÔŽRÇ­±w¡ä ^<À&'þ÷[È‚|û€ØÖp-žH³s­ÅiECêì'( XH§dÒ(Ya<‚¤ ò//Õ÷"Â;Ø¿p©¢±Ð+öQB¥¸{qØRíÅÚcÈgeyú› ½F¢ÿ-ã×·—=(–ÒøÄXþ·3Ö~à‚p"V=cžÕâÇ|UÎE7Èo!L½ú[ b‹Má»e¬p†Xjpßk3«°-{Û³šry*`¬×§4~yª¤| õa±(êúá°¡ö‹¼•ÇÔSó +f‡6Œ]Ö­¹o¨foPjhÈøˆowkG°ë +×A$•kÒŒµ±Ù ܬ°Ÿ°Ôž€ +— J>Bû7kßû<9£×Ìë54©Wl@à9ä)¬£ œË©v y‚Þ€7òªig³*cGN°‰Æ{AùfsŸ/Т ¾’m±XçUYo©‚˜‚¨AÄHO9‘îNí`a~Ä5H¡æ5Ïämñ`†ý®j1ì?Jš`0‚¯œtg!Š†Vnø,ð¢em§€w³Û»é,û(_ß\g×·7ó~-9•é¹éËDj¹T7ySl‹ª±|%Kž'G¾û.ê$U…©Î½‰^¦®×¡KµmLuA¢BvMNL³Ä'×]–ø05£?c(.?É->º˜Á"‚Õ²ò‚)0Ž)(ÓH§À„KÁ4w0›¾?©Š¢bÈs„Wœ«tL|Œ¹¿‚üÌp ឺÐGšaÜ ]Z\w¤y?îÛÏ}&õv©¤¥‘<4 ¿I¢`þX,@1ÈMÑt¢#ÍÁþâÈcÖ%MgC›ßM'×Wn¦ÙüÚHOx£ýW܉Äçó¹D• Cp<†U5¨V¾2)#Œ·,bì‰aó«Ò“©K2¥u§øµñ‰ê*‚u¬ñ6„sÙI7fѹyÂ鳈[¨"ÿ]-OÆ×DW‚ˆÈ!ºm„Âæùº,6¸YÙ»++ÇD”®¤¦S/†‰ÒÔߤŽÚû²³¦—ZB{ËvŸÁê›HBœé ¤íIb5šS!‡çÓ^Á€¸Šª°~z\°fNÖ°IwšPiA!#hB/{üûM¨´¤öFÔIv“«›ÉÏW× ŒLS]Ê8Êó=èœlv]Qp¼‡`nÃÖwq +± þ^‚9ÿp;(ˆüLºØ» ›çã.ŒQ*†QBüH”p\ìE™}ù0„ÙÛ¿¨>'ÔNa28Â1ã}Š8X¬«Ýf·zîL3©ü€É!U‚l:ùùæöÃíû/¯Ê.x7”H.ƒ%š xb<øŠÿñ ;AeªMepP_š–LÓ^a²ÙÕ䯯Y˜Ý?ÂfÙ!’„3ÒýÌêåpá,Ô ÷#¬¯ÄvøœØ?Áy@s¼7¥À<Ö‡£fpÒÅ÷«.ðQl€OiòÈGI/•OÓÙv®WZ¹†+÷§2ïB/#=¬õ—w€”q?àë«>ô Dƒßýpë2$ˆØ‹“7F÷ûr_à±ï1½Ã{Ls{¤-‡$1ªzlÄÎØÏØög ¸•ÒÚ_r?mø‹¢HÏ]ûC€÷9ì³ +endstream endobj 1027 0 obj <> endobj 1028 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1029 0 obj <>stream +hÞÌXÛrÛ6}×Wà‘L"˜¸ñÒ>ù"§ê$NÆRÓé8} (Hb*‘.IÙñ'õ/» ”(ÑNfâ&ψ´bÏîž=»#ËÁÉë #Ërà x!‘¡O„G +=X Φƒ“KF™.Œþà€ +NáQ“éfàÁ.Ô“‘ Ón<&Éô~pã\Œ.‰¢!9?9ù’¼/\RáäË"ÞlÒlIÆY¥‹Eœh÷Ïé¯`IXKŠ +2d”ùŠL/CØÍ$öNì¶þ½p‡, ÜIaro«4Ó¥Ùk4øœ>xäSåÊEE„ÊÐó¤õ͸k‚Ç”ËÎC.æ!8܆#2Aˆ<”aã;cªv^(‹ðmì +I•ó@¸ÇÜ¡‚ÛÀr2™ËàÓk¿g B:ï‹Ü~7ß&q}8\óDÛï‹2u‡€×É3Œ­ñÖÃpqî/ÄÕX”í ýÀß«fSjâ÷»3yȪø³;ýo+ûvD#ßÞàʧBâð2Ô¼|ã¤YEæÚõÅý8K+òѱ±¢˜EÖzXFçrüfô‚X ¾µ ¨Ï¤jâ©l8³­‰Ñ™ÍùÊ„¬((/„“.ñ’]Å›ž\AŸã’õ Q>˜Ê€IV^òun@=ü 0@ÌLüpTK¾ê³ï£Ÿ“·‹µ‰Bn`ܮ㬋Úw To@d¿ŽÌóíl­»R")gþ±yCS]C/ÈÉG×îØ×°€ªÛžvãœÂ,'¨t–ÛΪ² Gx3½œÕ®‡ózoö,”$††Í —îòú uÔÌ2ú*¯\‰ÙÎOÝãœ#¼£Ö ÆÈtÕ”c;ð°­-Xquúvt~:MFW“ñtüaÔe“GY´¯æ4Ø½Ë +(Œ%†üÈge¾Ö•þ™T¸¼¨Ô0VVºÐ WÀA«Ð&²÷xNªOIé¢ 7.š„ŠNBwib¦¬ ªÀr\ØB§]ÝÖáìäaóz6ökâ¯/ ^P}¼ÜR¤«aPMÑ~^ö _Œ?Œ/F×ç¿œ^w Cç鄺žr»‘®VqµÏMkF…Ø7vt x ú §»Ð‰Œ5V2 +‘vá¤:ŸÝ!Ûn!úmøZ|/üŠUMÅ®R(¬Ç¸HV¸4TеCYÄa)ßÞZƒPG ;qXÍZتѦ|CrhAæqÏ ZJ—¡8Q—·Ç™ˆò.)U]·ÓÖUQ;ºÁ[è6ÒY»ÍOñÍ™ÕGä™&:KÖ9Æ)Ͷ6”k倀ÿ½Í!#(’›ØA9A•c°ªcIš‹³- l8¬Á öDjœ•bŸ„OPõ3ðì·ÉÙxŠœ<ÆÀN¶¥×êó£Dó·qj !`a!%oäš‹ISвli7}Ø©€ŒsÕ”£T¼N¦&@eàð9K«²KB Ä;8Ô|ÎÚ½^ªîѱqNx’(e½CKX¤€°òÛ¡c | 'Ûc#4Œºq}:}ʨa^ÇY]a ÷„q4¿¾:èÒê¸ýˆ'DÑ`j7í´°¦ +²5¶6"ü±ÊüÜU°Ö÷£xEíDÖ°JÙÏß·“LGç¿\½{óîõ»ÊØõŽ'×è Ý$&u;iØbÚþ\·s¶ "êrŽ¥×‰!i~íùW€U +endstream endobj 1030 0 obj <> endobj 1031 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1032 0 obj <>stream +hÞÌWÛnÜ6ú¸_ÁG²É2¼‰’Ú§Äq +iØ›ô!Ë]«ÑJ­.qÝ?ê_v†Ôm·Y;@P 0 i%r.gÎœ¡%Ù-žýt%É®YXMb‘“X¢©Ýb»x±Z<{%‰$«íB*"àn2‰¹V$Ö‚ EVû…+\˜T“Õ„4du·øH_ž¿"OÈÙ³³'OÈ»šÉ„kZíêl¿Ï˹([Wo³µc¿®^ƒ'î M›µnïÊtˆ´!Ö[¶4<¥“ÀyGÚŠ¬«’)À5pC° „A[‚òÓ…%ƒOˆÄ5¼ÏpMÍÓ$€ìŸgAkg c†òÆmï.é³›O‡XÏ«¥·N)À“T}—?/š*Er0”gáG‘ÿ‚ë‹€Áß…Ò¤^;Y¤0ôPT'3 Ìè¥Gê}ãÀLÞ:(.É·äžÉ¤Å{7´#wLZøa1ªÞl° ]ÐyŽ¬³¢¸ÉÖ¸5¦ŸÈÞ­o³2oöœ\lC,Ke1˜£a0­è…Ö;hÕõ–§Ð°˜} +ª 72­Û³:—¦Ó6é,íxàGð‘´càÛÐlƒKQøí–§rN¯q`©$ðÄJ(W~}ˆÍ=câP픧6Œ|ÀŠGž9¾/G®|3$‰gë'°<·>8@é9·`ü Må­S>Ÿ F{ú=è_O Õ£ó]ó¨}›Õ‡B’L]ýuˆ¤W©cW…ñ2ÿœo\q|S&1=È…1­š:)„áš|W¾Íöî( +ý…(–Rø÷@â£.@^]`ó©È·4Þ¦"eÕBû¯‹Î+æÉ1G‘ñ”b|D©ˆéSqzÐ2vn`j(?¾3º¢%^! Í\Št&«¶ËæHý8€†Ö\E}šÀæ«û²Íþ<Àñ߈ ‡Î ›ÊCùú¨…8™¥A9¯i˜Ã(VþD$ðˆ†šóêâÍù÷з–æ…»f?©ô\aµIçE³ÁÓs8¼‚BÐ]‡¦é÷÷sTÌjÓNºGLu eôjœY(3%ðƒT[O‚”'ét°è¡Ä}ùU;AhDÊ‚D!‡Q¤GÑy¹9=†”†ŽIÂ^‚õÓxñÙK 3e5ŸƒÒ&_ÖÊáp;Ü]^» ÉÊ È5™ê®Bž ä"EÖ´œS,Ø96Éù׳M&À¶Ódƒ\¯éç*ß\³Ga–FÌóÞã{ÖÕ5Pé àò¶Û߸ú4ÚÒŸQr<ù¨×¥k;ç0“$žFRêP â%õHqÔ¥ ŸüÇ,ÔþA‘¯&qèg=`íÍøã‚]ÈÛ֕ȵƒJ{SŠsR'Ž™à¹ü›9Ǹ +È +Ö ( qáß´ÇÕ+aV†qâ3´)æGÇ#ñ? ³Glã +endstream endobj 1033 0 obj <> endobj 1034 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1035 0 obj <>stream +hÞÌVÛnã6}÷W Ðrfx‘(éq›d‹-Ú ÈíæŠE;jmi«Ë¦þ¤þegHI¾ä‚A"€¬PäÜΙ3T°žýðYÁºY‰L!J- ›­fß/fg(X¬fJƒÄ?üQi"Œ†ÄH!5,¶3‰V„Œ2‹%¾HÁâaö…]\~„X¤p~vþþ=\7\¥Â°zÝäÛmY­áSÕ¹f•/ÿmñ#z2ÁS, Ì•P6†ÅÅlŽÉÍ2¼™½é_>W‰Ð¬D3pS÷]Y¹ÖÛº\̬‰ÅŒ¬ˆ-m²,¥RF!7Ÿ®ÿˆ }Ä‚Ðã?bÂS92_„ ðc”Ž¹S`*’7qˆð眛HÄlZ*>ñ5ás­R¥1dÅ>eXÏ((IEÊ®›:¬ý²nEÂ~áþ‹ ëM[ò9ÆËêŠj볕T.­mBõ¢X²!©B,óXX¦y„O©€`yÿ{òïs¿¯ÜößXýoó(+RÂ@(H{Òoôùa³›r}ß!˜†µpãZ‡`ŒPì×Ø“Ìb¤ÿÀàD{[lÛ:7ÚÄt³oµ„â—;û¼«ºü/¾øOÇát&2š^ÈBl…‰ÈÆ~ÂÃ_XYuP8nÙêá¼oWu?a“^õÛ;×Ü2\ÿV—Å-` ̈, ±ù72®¬°)ñ™ô¦ ·z¸r\I‘±²z¬"GÙÅi6dç3‹ÆþH2ƒ’D¤$-äpÇ5̛Բ¼ú6dÞ¯ ®ñOÅ€öSÅ÷e MP%(j4\Õ4TD,YãÑSÜŸ}Ù8È«àsy³î·X¼–«ÈqT¯9êªEƒs#ô^3ÿ%|1ÊùKð]9_ä[ö +´¢L"ZS¹Õ°Eq^o·H[/iI[u/YK6GKÓ„ÆöDM5JØC ;®2|«{èjp4[† +&XÁ%y%?¤N÷µÍÉp;`²5t÷h¸¬¨Z‰H·ž8/7Ä>&À#Ývyç#ÈûQFè ~ {rYoó®\æ› Â[D;r9GR}:ÿ&†h¿Ö}U@»ÛÞÕ¸eßÝrB¿s벪J²„™R¤ü`8rë•ßFÕ P§ E ÇD¨èmd2YDW„gÉ4УxñRù¬µ¤¹zÛ—uÕv°Äý÷yó’ØàǾÖÙ˜`´–Îàpdh˜~&b Qâ4¶›?ã5„¨|˜öL6¶»øç‡üHdº¾ oá)îu$:ú”»Ü(l‚žã£; CYÔéȇ=¥î¸FZ°Ÿãä'ºÐõ©»÷ùá«â k­ƒùƹñéXêu¬ýŠ·­–È2X¦uhl/*'"}@¨=u> endobj 1037 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1038 0 obj <>stream +hÞÌWÛŽÛÈò¨¯h  ¹kµØÍf“Œá‡Íx&pàd¶ ðä#Q3Œ%Rá%³³A~‘¿Ì©¾PÔ̬ _$Š—ªS§êT%»[¬~óQ²»~a–Å9Ó¹aI̺j±[üz½X]K&Ùz·ŠÅø‹/™g"Q,Kb+¶>,bX±.¶Þà –š­ŸøÛ«k–Šœ]®.¿ý–ýÐE2 oïºòp¨›;ö®ªnWnªèÏëßÂSâ<¥"aK)¤IÙúíb ƒäf㎒“é?vÑRfBñf؇vê¦ê­­«õ"Õâ1"5L¨¤( +&tÇÚEf”ÈL¸Ž…Òg×Á’Ø‹ˆx⣰, u‚'d2õÑ'©ƒø»2J´Hù#S±Œ–)³h©d.0ËHÚO{>¦@t–‹œÿеîÜvÜ ,2"ãˆì•Êïú:Z/o"׆_J™Œ#,…ÇK‡åŸQ* W‘Æg,3ÆœåÓ÷“Ÿ?÷ýÞö¿±ú|›ÍBbDN9ˆ}bóDÿ¥Ïïö{ö¡¾»Ì„÷ìCÕW@’Éÿ)ˆ’W[êßWp¦lèö+’Æ&339/'ü±ÃþÔ›ÍïÆCÕ ½W¬q†P*è•=Çû¡Æ>Zÿå¤l)Š"¥ZÕ*p”eKã}Üv”r6ýdCËúj`À78Î ‘©çR’ûON-;9ð;‘6`W0 é*Vâÿð€z-xËBî²|ž;Âð­ +H$ºTIh ì ÉØW6_” keI¡H;%² ѬZ$h©rþ+Okæh-Da\§¢Vù^N…û‹óšRgá¾ÿŸøŸ"©‰»vd› +#NÀT.>~Ü[¼ì›DÝ°ÇlXìòA4Pz o’¿ŽUƒ)©Ÿ ÄI×Î%ýª}¾‘ùy6BQɇò3¹¢Ù‚”ÃHùº/Ö·/¥‚úŠ§y*>åŒMARƉÒ[ÊçZðÒõà +¿_9„843„*á…½JÍG„ÅVãæï2nt‚¥áûGâ*§z7|$ÅÓA LÓP~Þ%B§i›¾¾­Izß×Ã#UÚ¡$éüs¤4*ºr¿13JÒü¼úNð-#> endobj 1040 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1041 0 obj <>stream +hÞÌVÛn#7 }÷W° +Œ²±,ÍÍ6‚þ+¦, µQ“ ˜°3W7ˆÞ y,ÆOlJ>VM«+g,ûÕ«TÐØ\¦þ ÇíðïÖ %$S¿bììoFLxB³‹B œ¶Å¢f’ÆdMûE1\QIð…õð3_® +Z£ 4è·vË#qËc]60Í‹û|Êä¯ “„Èýn:ÆY2J=g¯ù*«ŒB¾švå—Ó$˜0ø}Ÿµ#Ž`¸¾Aï¯N pìf'›—²",ÕwS•M™/Êß”×dIÁ•æ=”´S <äÆ’_[‰bmÚ4_ëÖ­\·ö@ÊÊ4¤Æ|uAM\St«ÈÒ¶ç¹n!×{½C¤ÖXeÍ·émg…ì¸<¾sAi¢òfT„Ãß?î­ +´ 8Ší¡)jÊÑ‚ ÂU5ÕÏ+›äíAJéNawù|'6¬´¬@9[5#].sš‡¿§èŸ2p­¡0T4 ”ß x=}ÜðiŽñOy£3¿×:Fpr{¼Øãaßð¢5–*´¼oÍ=ž/ðúˆõ87êNU¥ó¤œ“ín¶íí±Hãz¹ª+Uù`Sú‘æƒnŽû rt^îœ*’£¿:æu©Š¼]4ã|å¼ð…ôWǽL9¯6öü&œõU5ÛspÕÌ"¼­ã7ÕSýèq•kúÝz¤Ã"ÿLD‰ŸÚíqSÑÚ[§˜×S]ÎNìBÛlçƒzìŠDLÊá»úÞ°÷èï_?èç’Ç@ëZO&U×ÜQ°ÙYvay.Ñ÷Öþýð—5Ê +endstream endobj 1042 0 obj <> endobj 1043 0 obj <>/Border[0 0 0]/Rect[213.12 193.26 276.18 206.76]/Subtype/Link/Type/Annot>> endobj 1044 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1045 0 obj <>stream +hÞÌWÛnÛF}×WLÓ²‰Ö\.¯úÈrÚ&EGm¬" å•¬Z¢ ’®cùŠö'ú—=³»¼È¶‚A:€Èp¹s9sæìPÒjtôê¤U=J¥AFQ– +¨Ò£åèåltt"IÒl9’!ø‡‹ÌR¡BJU ‚fÛQ+"ˆrE³nÑìvtæOO(MŽ&OŸÒÛÊ—™PÞnUÛíº\Ñ÷e£«e±Ðþo³àIYO±P4–B&1ÍŽGcd7 {§zÓ¿VþX¦"ôÖ0C§»›f]êÚØšÎFq”#ŸDÄ ‰PåyN"Ê‚ ²™%¡H“v)‹0Ú[" ˆ2‹È¸Ã#7(ä„Å(k“çÈdì²W± ñÇÂW‘ˆ½; +écܦþ8”™ ³ô¥ù5ÏCN$J3‘yo«}vq³hÈODêýâ›mŸWõÚ#^oW2¸&Ý€ñ +Ã$eÀ8–ÜÅHË?~,¸‰ðÈ”ÈZî¯÷þ{èú™¯ý7Vÿǯ™*¨Dd\ƒÀU!HîõÃú|±ÙÐézuÙ ˜Ê«éT×- ”Þ~ˆ¦ôô…hù†Á ú¶oéØ6Z.òÄÒ™oðr’ÂHÔ·t€®@ + •ö¸þ–.ôòv²ÙÕzZ.ª»ëçÞÜNttD“.Jº¹¦æ’ß'mßÑt~³\"h—7àN:yBöûhìV—ŒŒXßËl±Ë¹·„§¡‘PDRpr‘p¼^¥››ª¤à9Û †Ž‚.)ï#/vÊÓkÀˆSÅH˜Þv… -³KMK_¡Ñ’Þf³óeìݲ¢i_Þt³Wl¯7šêK»æ# 4hQ˜¸e Èãž*aÛ°N<6›óbá‡úüŠ*+mÔìh[°èIÈÁ•5cÒ”"RÎà¸#Ÿ¹KM¦º¼ ÝÒl8žrÖ ànè46Ì̆Ô¸^¯JAœ¯-Œ1ö싳ì<µœ­–“ë%æÛMÒàooûì·Á-p‚o«uÙL«jW™ýlýs`ƒe³sôüqæý‡ZÎà–Û°‚ “—47@O +° Ï‹…Áù=ˆ†Ë³O¥Ý9w äÏP£c6ÓtÃ÷¸aLöÓAn'2±=<6È¢ÞÉÑ¿9¹Ô‹+Æ™™ËSL¨À£Å®ªô¢9(öÌ™‹¦À_YÉêI…§–Wû1^sQ–sËOfÆ[Må®q›z=)Ÿf-¯Ë¢Ñ­–#•8Õ¼­ÖèÞ•˜ÏË'­láB%Paå¾<áÑ€´€å—“ZÞ"£º}üŽÈXî¸|ØåPýãÚØΙÕÆŒÛ)Œã=m<ó^nv ;ß]>_Vn{\\ð3Ä~8}µ¶r ;WÌ´úWJ3ñÅ<ñQA<îKŠŒÈ´é¼|óÓäõ‹WÓw{B‚£4ïu8´ðPÝ š[]6½øu>0q†q'=Ÿc¸W7v¡î¹`†ÙžÅ\xxòuª¼»nÖ»²ØP=_à”=×è6Þ/1ŽÇƒ#Ev@naÅñ»+7wøY€Ö¥p¹Þh_â0ðø +Þq¬ñoå%’t˜H;ç†î¨ªïʦøƒKžAbìæ)“nˆëW\ +šŠsÒ@÷+7•Hmöé—Uïl€í3ªµ¦¿ZBE85Ç8Ž˜U·ƒRˆ ù«&EÊäp+`;1õÔ S •áåçCl9F¶¨@µéø¹c®/Ê󮘮$o¦'GŒÅ›¢\Ý *Ìt~* N÷>ŽÀð<'Ÿ…Ç NH!âihÀ C ïÅ>‡E=è’ÏäqÔ–?º6mýàÞø|à7üÜz¹²aÄlÆ6AcXÌ“Éíº¹@çÂ̘ „wpÐpiJìH‡Äpåao{ÆøBSù çzëÖÇmC—öqŸXJù’'aÆõsá0´bJù, §j[‚=\¶ÙPzµ?“±mô¸Ux€ÖÍ­ùÐÚp­Ö{ŽS8v„iu[ÙI ô5w_‰vOÚah€êY+d6CÀMÛ82¦ÉžâhÔƒ¦H8¿‹FÿW€USõw +endstream endobj 1046 0 obj <> endobj 1047 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1048 0 obj <>stream +hÞÌWMsÛ6½ëWàNF>Hèͱ×mšfl¥98=Ð$±‘HHÅñOê¿ì.@P¢,»žd:ÓñŒA‘Äb÷íÛ·KA–£×ׂ,›‘V$å‰3M'[;ZŒÞÌF¯ß +"Èl1’pøƒEd)S’¤Š3.Él3â`…ñØ(2+à‚‹˜ÌîG7t2}K–‘ó×ç¯^‘ÛHdLÑz¹Í7›²Z’˪µÛE^ØèÏÙ/p’ò'%L‘±`B'd6Á Sø+µ7ýiEÊ$-Á ¹ªwmYÙÆÙšÎFZ²TCDš%š0©Œ1„Åç±Í…ëBÄLƃ‡¾ ÜC¸‡Ã8 ‡qbGÇDÒ¯ïáoy¤b–Ð"¹ˆÆ \¦ÑXŠLHpYDÂýw÷ƧËè‡míïÍwEK"ÍRúGäžXÛ”Ñü¥u…غh9Â%¥N/ôÅt¾pá}ù;J˜¦2Šá?)!Þò~=úùÔúÂ×þ«ÿã×\”fæ€wYàú¨~ð̳õš\•ËU ÉT´!W¶±PJ1A¿Fj’Ú9 ôïœJÇ` eûLEË:ÕÕìJ-Eÿ9úN¯ª6ÿÍþ‚݉ßm˜Ñ¾ð-$š©-Àf¨'Ø|C˪%siº¸¿nómûf]_ò¥m>Sãp>Ò—c=MFn‡?Hûƒ$‹¹;ÊÁšxXohQï*¨Úvâѹ¥˜LŒ™ã‹ôsä­ m|´Ù3P)ÅbºÜmlÕ6ñÎ(4t \qöÑÖÑé—`Æ$S,{ êëð¼³E¹(mCÚ•%Õns +V/\à‚³ô€Eò¨–o#‰Ò±ŽPFê"’V)½œ“²rf‡ÀÁP¤öÈø̾y÷ûù¯gÓëA ‹ý›è¼“\Jš6o-‚ÂÈQÅLæAuW€k"%Óº£‚G–{ïÁÅûi5G ç‚~íææø—Ð%ü‚ð©m†-aµÐ Y -Gz'Á´‡t@ÕÄñ{÷ž;:1@06L‹‘{Ý)/¬™DCɧk¦ƒª« ²Gåiä•Ñ{äEgAˆ@\A;É£ ÑG ³à‰_šrY]íÖþǧrÞÂ…¡+òL>”6!"4AŸmס3ìÏ ÉÉq¡šä1'ÓëË‹÷WßM?]Nf?rcöE!Bbzmí3C‘Ì€X5tXA·ûJȸŇ#¢.ûºâò¶eXWÂÀŠÀGú,edZ‚©í£82&O”Õõ‡³óË÷ÿ†}bO­®®I½uýùѨðññ@¤^Yæ¤htÄDñ™yEn-iîp¿a2;ØÕ‹W7ÚxíšÒJBÑÂÄ‚ƒB³uCØ’80j"éÐLz4@söH €)L¦N8Eú£†ÞËÍq eC껶¬«|íCãÃôu,Æ=y5°ì·®ÖA¡yrxZ˜·¤ñÕUa‘‡©ã¡£¡Í‹U | 4}£89êÊì_ˆyZç5 Ír<ß'OäúÊêfÈç¦XöÃA²Þ×­œ#{Þçu¼§âOÀHÍbW˜r_¸sk‹zã÷õÛ{/ÓŽ‘¤¾mêµm{P*É„~óÓ$9=Åçar—oa–‚ imó&P†uXÈÇæQ¡»eÉ3D zëdû]þ`·t%u5 KÍÞ;™zà˪im>?†Ý½ÜwšÓsy¾éH ž:ê9Þeè9Þë¡¿p{õ9L¹ß=°ÙÅÂâÀùÅå+˜ÆáÀk˜P2yé'àãˆK$Äæ0Ç©0Ç‘Sƒ\÷½ç¡sœûz*GýH'ö¸Ç„ÚÓèp¨Ë[ÇÂ[ä’vµ«»ÚÕÝ°¶Ê±®5Žî(û6òÚg»Qpà0nŒ¤Ã>åÏxmˆbpX†¦é\£Dé®SÞíð“2Hïê¼ Ž X¥ê€ó7´¹Ë ³"_»uŽUÛDcé?Bþ`þ#È£ +endstream endobj 1049 0 obj <> endobj 1050 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1051 0 obj <>stream +hÞÌXÛrÛF}çWÌ#˜ã¹3@ÞdIv´Q$•DGµ%ç‡$v)B@vôIû—Û=ƒÁ”ÖönR[®i\zºOwŸÓMNÖ³·n8Y×3%‰f ‰E$#•™­fï³·ï9ád±šqAüƒžh*Ñ’Q&ÈâaÆÀ +eQ*É"‡/ŒGdñevœœ¾'1MÈñÛã$WUÈ*ƒr]eÅnMÎv©VYnÂ߃“¤;)¦’Ì9å*&‹“Ù â1¹û&{Ó·U8皊 3äº|jŠ©­­ÓÅ,ŽRˆGÑX*dš¦„F c‘‹L ª•¿!Sî"ˆ´7!âÔ¢¸%>xôŒÇmô2v.þš…2¢qðLãá<†¯:œ žp>óÛ¿öz„D:¡IpU•îÚò)oH¨¨~ íã®WuÎÁß Ü!¸6\†x ¡4†¾¤­/Œ;_þÆT"Œà/ãšg¹ÿœü÷¥Ï¯|ìϱúü˜Í‚T4Á°6 LMúá¿<óh»%×ÅzÓ@2eP“kSh))>‡š20Kêë¿­`-l+èÛý––4M\WÛoð¸ÒÕ}O3n{š9ÿ—fõåݶÌCÁ ÿJp+ 5Mƒ50ƒ +Å+õyæx¶·ÜEðÜ;iŸ(ֻ맭­F¨jø{[,¸•2æ‚žuйHÍ w¶á|¿9ç,$È5ɼ•ØYèâØå…uñ‡Üœ}¸¸þx~z{v²ø9\ü£?7í³È=÷ti¬›¬1f×U(@¿„fæAEšq''Übcú‚/B8 ÷ -¼–€'OÏlmB-PrZ€©j/Ž„ +¾ÇÍÕÑñÙŇ‘ÿ]\ùDK¤¬,ø{`1E–|uç¼ü:Äš¦ñ fí)ÈÆ<-ÏväÞúßO©Hoye-‰š¼Xf @Kä܈”ŠÈT–ï×Äb–s‰X0ãÌÀ\ø¬ôa‚ OUæ;#õmÎÒi¤EMÊǦ(wÙÖÅEÃôµUŒïd»¥Ç婆xËÝö™à;D6žæ©]¤¡r—¬CmëЖ¡ÉòM‡|e¥ñ$³ªB +^¯KRìúâî`T4US|ïÎ/9úpz3hË×5V«V#ܨ{‹ûd *ȯˆÇåÕÖÿó®Éþ î¥ÖµÔ¹J_€;âHQPsàŒ7·=¡… +bÅ(¹žMub?Áå­AbÚ|òOJ-Cí?™$٫ܹ‚F̃‰s˜@¯V@t*Èïà3ØÅO°=F4¥\Ša‰ŸÂ#>ŒRÕN`=$wÁÌYÈvý„XÖ>g­ƒ0*ˆ¶pd³þY÷ÀµÏ.ÜQθ-vˆ9â=ø‘Ïœrusóèú´†"É[)÷Ø}Ê–’jKIÙRªÉÆêƒBÍr +à˜è žMÊÕÄa|1ò€¶»¼¿âuJÙ¨E½ÃÂS¸å… £ZÞ~|B-…üe ^zG°u´rÅ]P?f9öVžmó§m†^‡ƒ¡­ó/+¬L È"/È«¶òª¬¼&N^¡µ½æôUƒ¾Bgp« (°/ë¦Ô ÷º©¦‚æ¤,¿(ž{šs~ô÷ÓëärÊâ–Xâ=É´¡â¬þM4~»1#òÏ']ÃõæåÃãEö`& $z7;ao*«\ËØŽžËÒ>UˆÄ~+¤@ðu[ûË7ä‹[Hì‚B•5ä&Ù—Y=ù ˜cn³Òån_þzuyqz±˜D ’!Çé~%Vop‘˜pô]0ÈN:Û ÏU*waMµï$²)x^Û¹-Š «ë2/À•%´>t~F0eå`0 #pÑà7£ ?x30̓ÿKè‡ãÌWýþìü|¬“‚¦º×Iq؈šrps~¹xÍï +!²#3˜,«±Õ9¬0r:ÿ ÷êãÍÏ'—·“QS¸VŒ¿»ƒ“_?Ö ì áhØÖe¢¦Ô=ì²£éæÞIɾÌžX€0uô#‹ËVK°‘¥Óúö¯ÐÖ`?θ t4LNѳÁ–u ÅdÞ‹™›GÖ´ð_F//N¿À(•±ó/¾ "ªãƒ>wä‹#² Äf·­ 5P‰âñKDì7š~hnça‰?²”Ž…'±­á¤Æ¹â•¢AÊÛ‡ó¥z‰¦­ÐØ׌g\¡(Ž¸ýh6ÚF.ÊÆLJBˆCßJÙOPqÀÅ«§]Ž³ ðëv €¿¶ß±èp‘æºm0RÞ×åÖ4;Š8ø£±¸À£mlíA³ªê®ÌÖdµWïpŽëùXï­bBÐ$~mócQ?¡T6桺®x;å7‹Ó.‘M{ Ÿ¡(OG¸têÆdËɺ"•ú?®+¯o+‚ÁÎ#03£}ץŤwÛzý)8¼ŸÜÁ>’^ÙdÕ“ÑIC‰toYÙf¸› ÎðaG¨QÆbšèÑô¼± +Ä «O4<àú÷8’—èŒqøqÀÁUúµ»—é`ö'¸])ò»Ò¡UÉ%®6@Ù,û5ItþŒ÷"CWÉajøKîéØ™›˜©);íÓòÓ³¶3óÊXc{8Ç8† +è°î÷À 0í“Ý +endstream endobj 1052 0 obj <> endobj 1053 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1054 0 obj <>stream +hÞÌXÛrœF}߯˜GˆÃxnÌÀ£,ÉŽ“µ¤’Öq¥ä<`„V$» EŸ”¿L÷ ,íêf§âRÕ‚€ééËéÓ8YÎ^¿;ãdYÏ´$†EDEšHFªlv9{³˜½~Ë '‹Ë„Áxd¨ÄHF™ ‹õŒÊT,É"…ÆYÜÎνƒÃ·$¤Ù½ÿê9©|Qé•Ë*Y¯óbIÞMV]&iæÿ¾øv’n§JpÊuH³ â6©;“½éO•pC…—ƒrZÞ4y‘ÕÖÖáb¦5"Ò4Ô„ +Ç1¡*bL¹Øl¸ö&DL…Ý„„àÒÞ„€7éˆmb7UÔÅŽŽñ° ^†ÎÉ/ ½;"÷ƒNq.sŸÛ_{=Ä8”‰häT¥»vq“6Ä×Ôx¿úöNæ®Wuîà¯W˜[-Ãt ¡ æ }‰[_w¾üã‡T{ÂWð˸!ÄYî“wŸøØcõ;~ÌVAja X[¦'íð•{î­Vä4_^5PLéÕä4«3è))÷þòô¤—]Ðþ-‚°Öж}GëiGÃÚèI7+tŸ¡ë^Z®¯’uæ/þèÛ”Ó8yŠ÷*»F”áÊãë&/‹dE’jy³ÎŠ†4WICêë,Í/ó¬& Aãe‘h\0ÊÁ6>XiÈmÞ\‘Û«<½"MI’º.ññˆjÝ>Í6 Ñö_š'M»eä‹/¸·ò¡eR_„ÞŸÉ2ó¹ö¨+[ "j"K8]ÿ`Ût¡ŸYOïˆ =t¡K†Ã}½£óù(9‚ª ø&) ‹„Z˜ÐðKr_Âa äu.ÊÊÞC×ݨžJÜuÈ¢»o×Îm ´£jIãÈÕÖžayô~„­]yúϽ‹ìòöÍ +ˆGϤÈÒ +³¬aÀN¸=OÜ;i7âì–BcZ,Ñ a[²Žª±æíâM:ãQ:]æç{¿žŽ’*ÀèèVØr{¤n Ü=À $°Ue‘‘@Èýr5éMœK@ +G¢\AÄÑÂc8:¼àuJö +wvG±¤¼´ø)×ω†¶ÓÍûqŒ±)ÄvðÆëSaÂÐÁ†‹¼ýã'ÇG‡G‹‘Ð>ÿ,gÞ¾ŸÏÏ&€·{†³ùñâ}×( !0WVc‹œq/Ñ'Ï~:8þt4²¬h4ÆÎ25I“‚|É,-Y´0Ép \D ä® réK@ñá§"YäT•I-µÄÔì”2"r¶€ž`; º¨]dAGòb ¾4õÀ3ÝGþf~¼ÿË޻óIue<¨®žÄNÉ·¦$•xn;ö¼?mǼ&å5®N:nº”ºAщâ¢+ÆM )Æ…˜F­yl%&¯,VØ‹iÅ°#Š!§Å°m-m†e›aù@†æ ¿ÿ£Ùí«‹Q‰{yvëZŠ„¢€”+ÂqNÚ¹sW4ÉߣºÄ®ò ?ñ(Ìl©Zž£ÍÙÏמåôÃî¾ËªÏž“)”K£`d¨`pT–EÝÖ\%Õ]6tw +àνU2Ô»C¢=« F9ijä¨Ý?û£Œ†BX®€>÷öàmA¸qª¡û‚Wô`h¥ +¸î< SÄÆ™óv¬£ÁúC0’Ãd §ÀÄõFlØ­Á#·3­Ú¨²Nnô¨ƒ¾Æa`[¦É£C[* —>3fûÈVndGÝȶÛt;²;†½ï +Û#öÖ×­O…;B‚˜æå]«TÛæZëáX;{ÄŸÁ$“IFŸÝÎ 6\;ä«-j·Š%WÒXþ0m!ã4fmgO•¨á­!¤@T¬V‘^8)ëæŒéÀ9œÝ{ƒÐ#Dn:¢Q Lý¤W»õÆ`˯ÕO6òàZ)i¯Âo 8L‡H—ž@ÂT‘SYf&2t»$éÔÆpÀ9ä*Ê¢Él?÷&³°«,v- á2CC³mv·£x4‡á‡èúˤG¿î#!Ø‚{ãE ò(Õ4 `#ó&w:fƒ«ñ«DÔI’-:f¨S\S!¿#Õ¸E? kàEK†_©kc kÜËêS”Í>Ð#\¶ ùmUNZ¢¼Y_áa‹È\ÇO9Sý+À%n3² +endstream endobj 1055 0 obj <> endobj 1056 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1057 0 obj <>stream +hÞìX]s›F}ׯØÇ¥‰6ûÅ}s%MëØžXi:ãôc$ÓÈ \Û?©ÿ²÷î$%v<Ét2™„»÷㜳 ²œ¼xs&ȲšE¢8)ÓÉbòr>yñZA拉„Ã?8ˆ0`J’@qÆ%™_O8Da\GŠÌ8áB“ùí䜾š½&> Éá‹ÃgÏÈié‰)Z,Ëøú:Ë—äm^§å"NRïÏù¯°’r+ùL‘©`Âødþj2…€¸LâÎÔ&ôÇÒ›Š€IšAò¾¸©³<­l¬Ù|âëê1Ì7„IEa:ä\»ÊŒdiïCÉLêÁ}è6DÙ›Pq×Èv!"pS‡mñ˜™ð›ê•ïR|{J3ŸÞÉ…7õá4ð¦R„BBÎÂö×^7XˆBÒÓ²p×.o’šx†ôwÏÞIÝõ²Ê¼)äK‹›kËåØ/)M€ Ã\¢&.\.ÿx>3Tz~¹q‘7ÇÑ÷øØõ;~ÌNAâ x3nF|xâš«yŸ-¯j¦¢yŸV)P@)&èßžRÒô’µøoH‹`¼Ý¦´bQèXmÏàqhl8Í…å4wù_¦‹Û—«"ñ$<~ö¤{‹èÌ¡xå(v÷ï= t€-€®ô4yˆRz—ØÇÒu Ç®ñª¦Ëܽ]µ`£:˜œ@f0»i—œiÄ=æg%¡"qNšX¾‹¥™’òNTü®4:ûãpv:?}s<›{ó¿6˃7µ32Ç5†è”Òß‚çºL›&†ˆ”=NÌœmõ›îg)ÖuV Í‘Ú‰kŸ`Fï:#š03ÅMS°*SäI +óP–âVçÜ8Z‘‘½`¢ Ö µ'¾ö%œFÔL#úÂ4`Æ| ñœ‹ã™k™æ@sÜ3ÇŸÞ¨\¨fó&œvý¡ÇEŽX+åŽ.Ú@–?Ãø¡ÿ‹›<Á Û ÌÂEš×VX]>Ý뢕æÁ ïU±Jë®=°KŸÞ¹Ý°ìvÞ ¬ãœø‹UW)òÀ§ 5Ú§äC5îõTJúþNåu-o}Ϋ:ŠïÓrv—€_XƒI¨]û¯¢N~ZRdyU§1X¡~›§îYغ¤?”·èÙ}^ÇwfŒ³ûx‚ŽŒ¸²Ÿ<¸šÆ—ÏiпL=C7Ior†Ë.íOÔyD†B„>ˆãçÃ+x?) ] ‹¡WqùSÛ,³á°ì*ô”Î)Ø©¡÷hÿ =Ž¯Óa‹Á]jÏOÞ [¥Á:Fak«Ú%àsM¡1»AÌVôfÝôÐÙV@V‘Íf0#EvÚè¾Ú„ÎéYçToèo¸‰.}bØ:šºè˜ôí…nQØ`8)Sà— 6ãüJ«ÉƪbÔPÖµß+­Q½ÜÀùN/ 1Á ÇàÑ PJ×Ý»··†Þïq™Í0~xÜGy\ãÿ0¹_7¹cõïLîAîÁWîÀЋÅîmRÉÝÛä^×lì¡|ªë}hŒ'š^þ%¿Û #Ûékÿ n÷ill½L~ìh·0Þ‘µ²Nxlpñ`¨4Ëšñ^cÊ7Ö·§ =S‹¯Ìv9‘ÆŽLV¿>¦þmëÑÖw +îQŠ-ñ º)O©pK†·ýVz¨¥*hþ‡Žx×í”Õ¤¶DCi±sFÖpáŒüF¯ün +D8³a3do3«¯ÐGl±3€â¾9é³F³š°¼ºÿ4&BØþ4ªØ×lØÆ;ÂåõwïÃ|p¹ošG;±àÿ`ÄfóÉ¿ áÃÀ® +endstream endobj 1058 0 obj <> endobj 1059 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1060 0 obj <>stream +hÞäXÙrãÆ}çWôc#6{Ð{#o 5q,Kªm'5“ Õ¤S€ +€"ë“ò—¾½`%µÌÈ©²+¥*·ïvÎ=hŠ6³7ï/)ÚÔ3Å‘N F!ž¢ÊÎÖ³·ËÙ›Š(Z®g”¡þàƒM8Cš§$ehy3KÁ +IEÆÑr_R*Ðò~ö¿[œ I :~süÍ7è¢J¨!—›*¿¹Ùô]ÑØj¯lò¯åßa'v’„£9%TI´|7›ƒA·Í*|ã½éŸ«dN5ax fЇò®Ù¶ö¶Ë™bD+ˆH©a<Ë2D„ISbóáú!bÂÄèGHˆ[Àýp—ŽÌ'!Cð£0mìÎ1*cð\È.ˆÄˆ¥4™Køª“9£†2p™&Ô_ÛûT mˆÁUî]Ý­”(¢ñO‰ÿņûU½Mæà/. —[mêÒŘÒ._Η,ú’ÒàËIf‰€kJ5BÁrÿ9ù÷±Ï.ûßXý/óUàŠWƒ4V!U8¼rÏ£Ý}Øn®(&Ç5ú`k àœPüŸ„&±½"mûÇÖÌw°Øî#š“ÌPûo°\iAté”RCü¿²ëû·»r•°úè—„C;æ‰ç6ÐÀ)ô¤õ÷Nó°â!¡îÖš·‚ >ep»ÛA' +\aߌsDh`ç‰W‹­àˆ¾q°¯QŽ¢¬@$R†¤ïøä»ÓÓËdùï~7ÖxN£BaT7ycolÑ|‹î¯·«k‘;jÍ*Ï2älQI4ëËûœ¸ûx×’E3øü%ßXˆm®-ªoíj»ÞÚ+´ŠHáׇ°È&p©`K[ÙÕœ1¢´ôl¨»ÀgÍ"²ol“ïÐRZ£U^eƒ>[t»R½"h±… «½ƒFôñ÷5ƧGÿ\|剑,“]ž‡ñ·(,‰æ€8‡?`$&Ožƒ ú"x´àãó.ÎÏgËÑó’0ý…NìWœ…nûñ—¹<=_¾ÂÈ ®‹/ÿöîü糑1ÀÚ#¹ ˜­TÆ 3åG .«ñ~aɤ›ñâÇ‹‹åÅû³Å6Õ„fÃå,4R×ó®\õmºN8s½ì›¦W¦ÇìD;²9 ¦ÅÉgGÐ0çnfy8˜‡m€Ã¤59áûð}{z~üýÑûÅå¤+Ä°¯|ÎLî1í uQ´t{ó¨H&‰¡ü)úÀbD!©žPÚÖ¨¼m¶e8Í‹«6½ž@D¿e‹ìvdßÕù²Ø=Àee] @9%tšßH‚#MÌ´Ô‹Aáú|- !jÚÈO׃Ì ›Ò*‰‰sh=Å´çlØìƒôŸ•dŸ±ÁF¼S‡¾ ñ_¡¸öõ]±r‰G÷@óUyã³>L;\¨Y¢þ\—;Ûti)lÂ$þµñéɈö+ûÒ˜ct›W0—aÚîl^[7 $& üàýXOsìÞÈ1ÃCí¨uÅ©Oó[8Š% ¢³i\ºyH÷¶¨›ƒ"çÚ?åÐ(Ç _>MþëYhP½î‹¾ÔK¹Ù‹»‚¸·ÐêW6Q¸w|à·ÂŸpIÄ1…“«©ÓÏïàÉU Ž¢¬¹Î«¿´ùQ-[1Ʋ–#ehÂ&ç†Ó? +Ÿå7vœU˜ozD#øS2JÃHkÁâ‹Lßçñ¼®pP)›;ײõØ­Ô7kÔÛ" ”»sñzgFeòL Úõ6íV…®¹Œd[û~sºútà•‚.pÿTN?9Ò±bO4bS¢UeqÞ¤‡¾ <,#ö¥Ç~Û¡!¾Ç¥!—†(ÓeIì Cg›boš:Ó Ò¨—5 C‡Û‰{w¶‹· )vò¸䋾<x)èÍ´/`к½(¤žyiÌ> ÌÔž“q-»¨^Rv αí+=?ø`ìG¼®Êo )oÑúÁŸòI§AÀÜŽz!MÌBÊÜóW¶ÞnŠáaа0†˜ìUý³Œù99Ÿ˜½rÚwH9<ñŸ—ê >íKðGf?ígú¢q?T§ã™öÌÙ?X.¸ž0ÈÍô JD÷¥ìô/ƒ ƒk`=ñää“À‹N†€”&2šìÑ>Ú¹ø +Ncò«IMª©ƒ}L2ÔO”y®YÚélÑþ̇—DW> endobj 1062 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1063 0 obj <>stream +hÞäXmsœ6þ~¿BES$!ýæ8—4­c{|—¦§§{iÎà\Ç?©ÿ²»p€ÏŽí´ÌtÄc2w%w¦ß—žÏ5tfÈYqUorSY[ÓùD… Ä1&d’$„…q„.²H0µÏ!d&ÂÁsÈ&DÚ‡q—Äf!!ð0ŒÛàÑ3®šè¥r.¾M=2Eoˆ¸ç+¸Ôž/xÌøÌ=n?íý uÌbzZîÞâ*«‰1Mñìãî—ÕÆóÁ_Zä˜\n€ù"Ò˜0ô%i| ¸óå/O±ˆ +/„Ï€kBœåÝ÷èß»¾¸ìß±ú /³(ȈňAРD£~øÊ3¶[r¶Y­kSÒŠœ™Ê@ HÉ8ýÓДÔ,X[ÿMka+8‚¾½§¥aa¤£A;ÛVËàpµñæìzJX¸@ýniÛ©°þ2_o*²¼Ê³z…z½ß?š¬¸@+Ü5w··yÒ.O†«bkjC69©×†äÆŠ~®mp uïì¶ï€»\–/ÓánMZc×0è<ø"ï*C¶Q._+5fœpüÂ,¯_l‹ìSº2ÕQzcÊÓ«j½(®óAJðœ¤_X¢¢@U›`±K›Äûn­/™P»#õîÈÙM^§ŸÝžÆÏ„%‘ã¼@ÀÉ€Ÿ0<Îú{N7yMÆ‹èÎåÇpœþ@]µ²€GÞÈ^Âæ¬gIËÖiù]›§ÈD+DŸrÅ}N·)°½ÁBŒèqza†Ù†Ò²:Àôƒ7HÅ •’M ú]ÿœÓ’…tuuaòººÔ'oˆ/LlÀ)pÈ:3ˆ%‰Å9令·µ‡‡aõÌ.M¶YnLe뢃)—ÐCÚ‚á£$XÐëM¶¶K>zWlÏZdn!ælÁŠÇCø—5>·1K–Ä.l{…³$JXw‘«®ÎÛòó°Z(ÚGë00¸ x*%Þ¾žà´ÅÚ./0s …JLØAÒÃPô’Þ棙³vÆÆ8a+’Ž:,«>´®t~›ž ò.Ý ¿~=3÷šØBMOßÍ~|yòþx°=d:éÓ&»«ªÓÚ`U|ß ÉB`‘±TYj[pá,­lX9ÀyS ŽÊá˜V@]¸æk. ¾P¶y‘6ôÀ·–ÅüRPM©À­'мè'²„aï- ûN†mQ6ƒãÂn¯‹K²5Xò=Îr(H°HŠ¥ ØÙº‡Y¦Ú¬rFr LŠÜ 6wèð€ þplY#Ñè÷#•{³Çˆ°Ù㈡«n1´+™Ã“·§'ÇÓãùÀ"`£Õ—\ ûG¾zst4{Õ«Pù³£“ù]6îvcHw´@ÏÞ[îP‹E94ÊY”ŒËÉ!8ýõpz:?}}<“ÁrÛÛÒ +n›p¬œ®Ó*’¥94©¦\%ŠÈ>ʶ=@YïE¬‰ÀÎù:v×€0CË£aÓ¡ë¿FŒ +|x«@_þ|ðz:UƒLÔ=jeG# t‹æRwJç?"¹/¸H@WáVÔ}¡ÜñÏð=IX1D‹K”_é–¤ù¢Åíª²Ä/oêÖ‰½7,ÀµÈ·H™qkDXÂnDJ »üÚ*‘†TµÅT7˜ê{0™Òjœ¯ÇÛò¦Ǹå—ù¥œüzªú’¨· ¾v‚n/¾mù%´%€þÿO$0;1¿­Àphøýä¡BH=lÔa0)Á/¼2Ì®gñ–tb:ó0hº-ºäíb<Šéÿj)v{É=ÍÂÃ/h©´ãhKŠéþ«_Üö\óúey\X8D‡pp\¯M c²`G”׉7ÕìœÉ‹)ër›fðjÛðÇ÷¿Ž÷l)Ý[×t…Qb–ú=,;ÇÂä÷ ýAª1 Zr»[´Ä<û‰ªehäi²E©GO¶¾x By§xÑB=R½øš^ß|¤]î.¶¨•.@ ª‰þ–D±í¥5¥=L¢™‚m¡ùø}ä!<0úmu$5 +¢ùñ&Ò{œlE]§2FBŠ=b `˨=Ò{µå?£l˜ÓùäoájX» +endstream endobj 1064 0 obj <> endobj 1065 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1066 0 obj <>stream +hÞÌX[w›F~ׯØÇ¥‰6{aè›c;iZ_tlÒ<8}ÀÉ´ø®ãŸÔÙÙ d;—&=>°ÄÎÎ|3óÍ·bh9yõö’¡e=Q4D~¨ ¨Ê&‹Éëxòê C Å‹ ãˆÂÜXÁQ (¡Åë +„ú‘@q +”ù(¾Ÿ\á£ã7H’¾:|ñÍ*…DàrY%ëu^,Ñ»¢ÉªE’fÞñ¯°“°;I"Д¦$Š&S0¨·Ií“ؘþPySŽs0ƒ.Ê»&/²ÚØ:Ž'Š“@ADŠH…Q!⇔ú66®ù"&Ü| €è„ùîàˆ ‚/ý°];Ƥ ^Hëáiâ ŸHü€8eÞTÂcàM9 —™ÇÌÕ|é8ü $!žU¥ýl~—6ÈS$À¿{æ›Ì~^Õ¹7qYhlM´TÃŹ +4^Ú—ÈùB™õåO…¹çÕ²!kysý»ïþÌ×þ«ÿã×L„"¡ÎuY jÔ_¹çÁj….òåMɸFYAAþÛãГ8›“¶ü]ÜT°‚¶}¤£áE¨^7›V ´ÿTûŽ/Š&ùäÅÂjiWG$R¶ôƒ¶ ¾¶‹¡Ÿ`ñ΋Í3OáÅýëU™þ•,³“ä!«.WeSÃDZŎPpCW1Õmu+Ó²¨”Â;7Iõr¡ìæÐõœG-ÔÒB}…W ô~а(|–¬[b‘-±„´§YEõ +üѳ1íDD[][(œý 0A|¼¼[gES}‚.ä-ii64€KàŽqÅlä(Ž‘(’:^Ÿ·ÕÂ:ŠS¶\.o³4_äYš› Ah8?xœÂ-óô?¸¿ÉÓ‹P‹â6>c©å$ uc²)QZeI““×Ú”Ä+¨!¸•©Ç"¸ëyLS qñµà…óI*—r*ºz¹ÂóÌ&\Û Á&Ôp„—ÀsÚu`f<[ïk‡Ü?È€¹ 0ßÁ؃ǰÉö¯Q‚†©y?Ó¶Œg'‡Ç§Çgñ ’ø=̺¤ÛÕ ¦]}é°†àô¤MoWw¨ß°¿^ï0waÚLÖ\Í©ƒYa‚ŽsHFµì9¦žŽ£[@ÜÈÄ/Ñ i§ÂtëhºË{ŠhÐ2Cƒ„‡cñáùéìüì ¼#R¶z"][®´öñìýå/GçÎë|~¯í.âw'£Ý{ÉZ¥$ŒœGÊjh‘€ï/_óîä³JÉ ~|yþ&FƒM9 ýM ÔI“® Qšè:Cµ£š9Zxš§©¥­l.¬…+œ%Pü·«MEsfØ£WÒ(/ ·ŒjÚÑß` ¡¼>9?üíàíñånl;:Ñn 1nDbíO…Ô:¬f¶Á+ÖŽôQå[µúdÑo8¡SŸ=GP^£ò¶ÉË"Y¡¤˜·€ÞÕÚS=„åŽí²X=À%Íwà! — +€¶Ára¼ÚD{… ƒ‡¦×vd»/ ʎ섲/ Ý„ròr€ Ñ)0—€NÒÓ0$ÓîuV6Ù¨Jy?1¢„ܼÿ3ŠoæÅ]‘j Ñ}Bè:K˵ÁØÂAé×÷À¡ŒÊëº\eM‡IHâOvðDĘè6©@evZeIÝÍEMbô¾<…yJ¹óôbƒoç¢NR½™m‚.ã¡ëÆ_º(KæcÐÍ*˜ä|³ïg +8áS}® +8ë0¨0ësçòG­žÒ‚Òž>}‹-exè- ¨9ãp õs´„«Éõ öjùeÚ@v¥ŽZ ' ôz(+Ü9f]dÝëäCŸK‰aS€þu"ž:(ì“& (êÅŽþÖz(Ü9Ü¿R6|³É¸WôT„øÒàû[ÅXC;ë‘/ëXÑß'¦"Ô?ctz`@nrmĶXÍ™Äú®°ë]f•Ò³JÙYe•‚$*÷Š; ŒTƒ=u°Ñ¡c÷ÌšrŸ¨Pî–¬OŽ­i¿û¶…D¼µc@¨ø2zÚØxŸ-`!cfP>âi''FbA–ðàRµê "lL½‚¶dÍ7¹ð].üÇdˆØèY2®¯¸zB.DºpºÉõüyÅd¸ýƒÃh^ÕŸ7°0¨ +íTqt=Y ”Ö“KºÉåÃäÒŸÍô)îvÇÃr} \ýè‹(óý¦Øç3󮣱c{NÆvþ)µÅ—½ù·cüQSˆPjX‰®¼¢­ònå3œÔu™æàÒDbs;¤m +úÇìÁ9+ØÈÇgÀÈÔœø'ëãxò¯«+ +endstream endobj 1067 0 obj <> endobj 1068 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1069 0 obj <>stream +hÞÌXÛrÛ6}×Wà‘lB$ú¦ÈNš6±5¶Ò<8} )Hf+‘‘®“Oê_vð.ÉöÄÉLÆ3"ÍËbqÎîÙ#Q´ž¼z{IѺœHŽ"£0–ˆ´Ó“Õäõbòê E-VÊ?8Ð8Âœ¡ˆLZl'¢`*Ž)œ¢ÅýäÊ;9}ƒŽÑìÕìÅ 4ßù4ÆÜ+Ö»d»Íò5z—Wz·JRíÿµøVân%9 +(¦R ÅÉ$€€f™Ôñ.ô§Ð3/ƒ0袸«²\—6Öéb"Bû‘XH„WJ!Æ„„ng’áH6÷a˘…ƒû€ˆ„Û›°ãeQPn†q³y“õî¹p)~H|bá}EŒP?pù£1e3õ)|2w˜„QŒco¾+ܵå]Z!_âÈûÓ·w´»¾+3?€|½"7àÚíƒc22€™\T ¡.—ÿ|%¬Â'¡B.rwý{ìøÄÇ~LÔŸø1Ë—86š"GýðÌ5§› ºÈÖ7ɽ]èRC pŽ©÷¯Ï )=½ÄMý×1[Áú¶ki1nixPF²×ÎA›?1¹{ó—¿œ:ówâH‰v»¶G½—È=R/Cåèzó÷ÓÙé‡Ó³Å ì© Fìc£@Œº›Þ|z±x7}?Ê„uËP^«…4 qor*vÃh‹XŒ«wú¼ì.Ïß ßd8/dR‹Y]e•Tz«ó +¥IŽ®5*ouš­2½D+ŸÃÛ‚éÛÒIzãJ-`p%«däBÞn@RmÄkŸ +°­0©OÿIÖe9ªn4ª…·A…â¸Û$`ñúýùìéÛÓËcX4’lËœYmîí£…Y£È5û¾ÀÇ{õ5;ÿ0??{ ÉUŽrµa +ZX£6(mg²ïd%*n«¬È“ JòeCÛ]i"„Dô7ØLZO µÈ7_á#Õ@0t­‚®;zy–Ê¡!û±Ú)HkYw3ÓÁp×Çpcèõƒø?Jvÿ€Ç˜ÂÞFèðïñïBÕ¦«mËÆ;+*=êÆÆÅÕì²üj +XÝå©áÝg Š×:-¶5ü&ŸN +ôëÖШ¸.‹®Ztrí3á}©,JÐÑîÀ¹^½Mv ¹ ¤”Ú4—ð0Ìt8 åê€1è§=xùR¯î_oŠÔÐUΛ¶ÛÛ"‡“.àDOK™“6ØFYéd¿tà8fuhÖ½üšWÉ—A#)¬¤³6æjD@/pfÜÚ† ÍëW^%·Ô¾ôºÌ»Äár“ûgÏÍDL`¼wBŒ]:i)£ž½Iv¿4˜ÉN˜jÚT¸Š2ï€çñ¶·gælõhò+U¿H?û<ƒ.ŒC¬¬uëjöÊ›‚;å Žë;³“r˜•«\Ç¡1º H +2É hÂJYÊC*HHèð¯%¾´%˜öù¦«ðº¶&â>«nÐýMbQ()Ë"Í ál(+ˆPÏk5ˆ¬˜b<ÜÀÝà {fà!Ë°…‡¶UsÕ–k;GÀ¶šÉ-d É|cƒÇÀá ²]ä=\Û}~xÄ{ü4\û~ëùcãøK”Œú ^}©zx¬ÔSyožDuˆ£c¤?ÎÃÑlèæÉËš"À,3–roðµ/^y¹ÝPt“¡cRgwçÔž¸4’ÅêqÓ–ÇÒÕMÒUFÓÜI˜™F Œ«ã’ OÇ´?ŒùA;(„ø^~ð郿åô˜K Àº+~dœ}·ô¾ÙC Ù_èÑ|Ž¥rÄ9ÓÞú­u&!?j#öôŠx4©Î°²Î‡&›·²1aΛ¶3.ÎôCß\ƒ÷’Æ{É¡÷j»OZSÕ4Ÿ|È8ÃÐüVWuÈŒ>lœŸa—Ùñr°ÐõÍ䵿ÄôôQc hÛÑßPûßÛ©Hk ceÈQGÈQ–U“£ÊÈp÷H›âáõ$±DšŸTà[óXô Ä÷*ü‘á!ƒÎâ=F‡ ì3{ž?c!¤>ÅŸuÎ.Ï~~ƒf釻3öÓš³ÓÅäzÜýÉ +endstream endobj 1070 0 obj <> endobj 1071 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1072 0 obj <>stream +hÞìXÁrÛ6½ë+p$'€ @ææØNš6±5¶’’h ²ÙJ¤G¤jû“ú—Ý@R¤$×Ó´“Ì4ã‘–(`wñÞÛ·âäzôâÍ%'×ÕHED³„ÈD‘ˆ‘µ-F¯¦£¯9ádºqAüÁ…'šF‚èˆQ&Èt5b° +e2Èt7ŒK2½}NN_“˜&äøÅñ³gd²yB£ ¼^g«U^\“·EmÖ‹lfÂ_§?ÃN‘Û)¦sÊUL¦'£1,ˆÛÌÜ]Ô-ýiŽ¹¦"ÈarQnê¼0•]ët:R‚j)+BE”¦)¡2aLºÜlºöCȘ +Ùû +‚DöCH¸-Gj‹øP&Mî}òQì"|Ÿ…‘¤qð@ãá8†[ŽO¸€yÈáU¸÷9æ!uB“`².Ý{óͬ&¡¢:øÚOŒ{]åáâ Êkk³eX.!”Æza,©…qËŸaLì&á•qMˆ[¹»þ=t}âcÿͪßñcö"E<æO©¾rÏ£å’\ä×75fTäÂTE”„8˜9màſtE°Úî2:¢iâHmïàq¥%Õ¥èäÀ\üs³¸{µ,g¡`°×ïY¨© ®» piÂ@9Y›W¦¨'a$l™£hÔy¶ì³¼ÓÜWjܹ$ºsÜ·¶TO-Õñ„«©Hæx@ü²±[2²V9"¿”— +&OߟžMÉäèbúöè]8ým+(F¹?AÖÄà‡TuVÛÜž“»›|vCª[3Ë9„Rßdµ  +™Èvwεÿn}cH^äXrÛÔˆT7åf9w ŒáS[áÓmôq„ðªR”5ÙT†¬ÊµÁm‹&}åH¨HÊ4nO/Xe÷'¦¨òú¡—°¢øTW.Ýnؤ}kÖ36»6¤\ØD®–€=&àNñOÀyû2D½ewò0Y fã  QÕ°ºÅ<[ÏÉÌ,—UÈQ:i(à•œæ°ëº)S‚õé·Þ¥™—žGMz`°Œì ЫDL…Ž[òZÏ«Åq¼Žƒ yƒo·ëû ¨î"ßþ É´õw¡CIv:>?9?ûGUQO)JÐc±p—øåùëþ×E/ ÞšI‹Rˆ¨\÷Wƒc¹útRPþµºM>\þtrþélp˜º‡Ù4d92_™VLæŽ +xá™$¶÷ý|MLÔ)‰¥¤Jrü¦e¤²Œ 9v~J¦ÀÛ¾PŽ°Wô™”I2TIÅâ¾LJŸY—X^‘ò¶ÎË4¸Ý$êÒ’Tò­ú4‚/#/ø qsRËx™¨ ´“µ"ÙMÞ CLÑ„õ•Aøål}[ŸÄ×'qŠ•VÓúµQ4UÃv°yõîüø—£7§—‡`ã]׬ñaðî°©û–ï¿cp‚bTxŒ¶ýÊíuVÖfȱ§µÙòÁó/ᔡè‹M1ò“»Õ™•+\…»Â°žhâÕ÷(÷«ª\šº­IaB÷®³¥Tê¡ {ƒàÚD¶;&ci²ÊÂõ{lüCµ >8ÎxxZÛÉ7f©êlE¶¶N¢‡Fp>i'QN ‡ª6Ù|XqûìØ’ª×òܦ—Ðèî{”OÀóã Ú~pã‘{p7KìÏA0œ›P]Ð[V}†ý%pFû µì gPÄy¹¹ZO2Õö®Ú¼bÂÏÁ +\O½/ØÏñ +=}ßÆŒmûöêÐó^GÒx¯fŸ#˜Ö"ôwÌ¡ê» f1ë®õ‡,§ijOZò=]#i—[f +ìMvŸ¯À_&Á)¿‚⺅½&jµO]E£®`‡qÔÉBÔÄM#‚!:R«„»VÌråïÌÕØïÜ6Êžâ°â=Bײ‡üÕ>±rÙƒ +ìö–ñÖ´.ÌÚ+ëÀKôËr¯ÁjKâ†s(©ô–ÿÿˆŽ›ÌXÅp.xC©æÁK¸—»FœÉ]»Â(ƒy^ûxÜD"®¨J<Í\Ù¶&(‰Æ F.;@Ì &³¥ØG5€2Ò ˆQÿªàñqD$)L XÏIßAqD"Ò§$ŒÅ_3‘4ðNZx`Ì>ûCÊôZŸÃ"®ÙŒæž1'Z0ûù"]CÂ()2@wbšr^ÕNGkÉ)”MÚÜk1‚êd¿Ûø1©ü&¥!l¾Ù Â¿v"S˜TÒnRÑ;¿$àIèÇf–È’6êýŠ€ÜŠÌ,-p_’šÿ^¾Éðò5^š+@€ï³»é®­ÃÛ“ïÃNŸNG 0KÂàÀ +endstream endobj 1073 0 obj <> endobj 1074 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1075 0 obj <>stream +hÞìYÉrÛF½ó+æTŒ1fr“e9qbK*‹NN RˆI@E€‘?Ê_¦gÃJÒrœ¤|H¹ +„I §—ׯߌZÏž~wCкžI†Tœ žHÄb´Ëg«Ù³ùìé ‚š¯f„¢þÁIf)㘢ùvƒó”¡ùnbÂÑüaö.x~ñ œ ó§çß|ƒ®w!I0 ªõ.Ûn‹r^–M¾[e‹<üuþ¬ÄìJ3L¤@óç³ êeöŽu¦Þ…Q˜˜Aoª}S”yml]Ìg‚§ÄB"LYš¦ó$Ž¹LR¬¤ÿBÆ”~‡Œè„0ó#DÜæ#5YHüȼöŒ=ÖÅ×YÈ8ÁGDcFnUQ’ +>“À•Úï©„«'Áõ®²ß-÷‹…«à§Ðü’ÛïwuFàoP•:¹&ÜXç‹R©t´/©ó%&Ö—?C%,Ãá…µÜ}Žþ{ìó‘ý;V¿âÇL˜Ä‰®AìªËQ?|ášg› zS¬ï(& jô&¯shÆ0 ~)4e/±Ç¿C°¢ÁúöDKÃRÉ^;G­ÿ±õý º—a¬÷Û¼lj×±ÒüQ߯šL+ÛìÃ󼬋æc8ÿ­ko‚SxËé´¿‰ìÍ}¾(VE^£æ.G`©Ø† +š`Âe‹–ήöÜR°tÜã.íÔ§’£Ÿ…pÙìóèfÀ!…+šƒù¢,š"Û û p‘=ë²jо†Õ«]nd%F¹•;®Â±hSv,|`œž¯bC÷ùn.dëU+ýmHcˆzŒ‘Õ"$)|¾‡løÀ&é$ü¨×ü(ÛåZ…L ì¡Œ;T7Y¹ÌvK´È7›:$¼Ë‰±Y+[(¢œqM0-"~Ê€‡ ¡pP}¥Hð-ÜóÀ'KØ°à¢ï¥ÁV$"1\mŠ<.N Msèü“úe“åwÁ2_=<Û@Fh ù|` L²¤8 ®}A¯÷õݲÒA¦ÁäQåpæ ZA0¥WŠ\ëšlR½ºÛLRS§FÙ$ÌÔw@¸~uv~ñúâr>ÀÀÜ> ™2ß; ˜NÓtýöæûçW?_ pSž)”¨J\Ý¡Ä ÿ z¸+wÐ6+=" ª:°·øŠ˜+=€¡¬F·¹Õ3.ÆÃÙ§H‰Ô.|ÙΗH'\wÚC ÖT–¥]‹»µdð­vÕÖ<`1-°â¿@âÝT÷h“‡ŒXæð] ×ïcFbNú­£ÖÌ2¯‹u‰ÑE¯ì&µ”@T.&Mº…Œ +žŒêÊ“ž±£v˜¯é,R#pœ_½¾¾º<à‘m +éA„qéN½ýcðLþ«åÏÞÌ_ž½­N»z/L™!Yp¤Ú ­#Ð/îÛÖ¡›«Ãwè𔂘h\¯c‡Î¶{ÑFÏmŽj7—Àå0íp¹Öƒ(ϾkHXmânÜåÂLáOØ&/Ê®eºŒÀ$H¦LôìÕÕùgß]܃­®¶aÊý`3e‡pÕBU/§SÞš·Pgž= +ˆ~ÌàJY5ªî›¢*A Àpôy·É…ùC¬w¨‚%ªÊÍG¸,r[¥Ë¡l9úy·Ì ¥7mÿöé¨Ý1@‰ˆ)µ%2ó%š²¡b‚ÙcõávUg0|#>€å¾¢si³K\VM>B7¥2lÚžÿª™]í˅έÕV·ù¢Új+Ä" ëU¯™]y@ÝÖÕ&oZœ–0ÛEð¡1éH1Wc†×7~Þg;É }7yVå'@åD:Áèm=}D)NÄdÀõ‚÷’CW¥É‹‡r¨sU;?tS¸´eÝäÈôaÎͳzþv«vZ+¸ù‚ðÃô)N¥ÝŠê³U…Í5w +‰r«`îÂÐeÐyÝ9 _;¿ ~ ]&ŽK0F „Ï•`õa vJ~±˜¸Èÿ +ì„SCÔÇ´—˜j¯É@~ÁX¿ ©ßDQk·hN{Qí!h/æO&¨_®/Ög§;:Ðíu×Yhͺ­BÞ›hŸT_Ç´FÄ/鸯åã”ØᙓL0ò¿û*„XÄÒ¡º:¡ÇKЩ$8,½ÚYï D×:¢ÅùP˜îS¦û”ë>uJq#F;=äÙÁs®ä8,ìØ„Á;ÉLH·ÌD´Ñ)-þS½ó(~õ;1I˜ƒÊͨ ¦ÏwÒTu*ã(,ñÎ)7 …3‡j5ŽËm¿ÎDÏé:3WgvTÄi‚#¢ÏpŸQÛöˆë”˜Ó{à/DÁl Ÿ’ݬ‡¯¯?G[}6õ÷wnªUsBPX¸c+)h'QUORèB>cú˜MϱRq“mC  é$£z­J訆^+Ô½3Ь±xæÃãg}A3:ÍÔï~…˜¦8èµõ]µß,Í‘§Ý¡‚B–cáQ/wX©OG[eÁ¬~QCÐë³Ç'þ}—m2ýÏÉ¡€¤ÛD6…ùK‘nîmñGÖÚ;@B<Ò Áþâþ”~m( çïÌ‚@Â*o%›dŽ춋vηÇCŽ2¾';„if#®K˜x4kþ‡BáS“š^þ+“OòKNÖ¾X…rH1ôÝ -𑹘Ïþ`¦çÑ~ +endstream endobj 1076 0 obj <> endobj 1077 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1078 0 obj <>stream +hÞäXÙnÛF}×WÌ#Ù„ÎÆ¥oŽ#§iK°”S´LÉl)Ò%©:îõ/{g†ËíÔi‘ær—3÷ž{†m'/^/ Ú–!ß <Ä\TÄ“Íäåjò⌠‚V› ¡È…?8ÀÇŒ"Ÿ¹Ø¥hµ›¸`»OÒ]$Û› +“Y%ºˆË:€1L¬ßm +=iÅ׸)ÿº‚}ª*؃¶í:Z ;ô|Ïèf§ß•±[‹ÙÉéôíô|e¯~é5j(t¾®|2T·kû˜úfgÍZ¼[~÷jþþ¼g‡c¿±£åMù6À•UTÅ»8«Ð:ÊÐUŒÊÛxl’ømdæž•«¼ ÃT´ @êê/P­oÐm +L£Œ\ÙÔ…wRèAxsm“Ž¿FÛØ&²O0ZÝĨæ¤:‡2 XhéCÈZÎÏúoRÌ D„~¹Ã!)Q~[%y¥(Ê®\¤ ÂqÈ;hÍGûÐʳô~Ö1àÆ(ÐInKN¤r—)»:eÿˆ!reVa(,ƒË@a‰’ U8z8ô†E¡|9›Ÿþpòzº°æ³uÃpw& X¿UÏ*8– Ú,W=:gçyà¦Ôˆ‹µó†ªç¿…’È7ûl-AGw 4ãU¼Îw +q]íëm”¾Æ(FùU™§qÕ‚’Å6Ö§Jbî×ZžÔ£Û¨€N‡þMã¨T5*, £è]yX©2÷Þºñ.÷ëxs÷2Í×r‘ÊE³æË|Sõ‘n®Š˜<ÉÊ*Ž®‡p«gÕ}G¿ó¸¼ÏªèS¯òC]0Jå ðà!†q ü#½©p/­jñ:¶=«‹¸ .CÌ­v @#TÍlêLwCì׶u _¶0ÈŠõ¡bek “pƒaKèôDJ?F$—f’S9ÞT/Ag“Z›ypv\›AeâkgǶÉÿuö%z †\/t3./?W008óÚ®ëK.aTj+µÀ¬…Í]ùyC–®‚\Öë=ügmóìñ@¹ó’>v=õÈ íÈo ÆÕ‚9 泯ççãDÜÉ[2\(4M , +éÉ„?èªÖpt1=鋶-œö‹ˆ…ò³´c¢¿¿o +…AçZ”´†ûB†Öªä·}R@ËÝA¶Ã ¤8¡ ‘ÍN>L/zq±ÇÆHOÍ5ÈjÙ¡Ì¡ã3*À™±wu¡IììÍl¶¬Jø¸ +0ã$ú™ål¾:°Ô[/Ü잣ÃåSqœKûÐ-“Y˜Š÷M~_™ÉíÒÃDŽ°½Ã|ÌÙ¸Õé|P|½Ë µ‰:ó¼ƒ\[ vÖ0;ŒG.™7Ì^Ô›@r0Sc¨¾nn;-L†Rø(¡‡O'ôH°/`¤xÊáxWí½ýÞÖûkÙu±±mwžÞË©ÐÛp%ÿÚ¨ÿà–[?ýÈ EQÂaÁëÑcŒQªÜ_ë-·öcó˶_œ]ù ô‘»Ú‘×η)<Øë躻´²ýîgØõZ·y*÷eCÏÔåÜÇ0:l ·g¾¿Jão Ðf5¼VÀÖR³ðôfàS:`(æútÄÌnª7iOvw?îN÷èx`ºšü%À4ä“ +endstream endobj 1079 0 obj <> endobj 1080 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1081 0 obj <>stream +hÞìXínÛ6ýï§àOjX~ˆµiêvÝÒ$HÜE; ŠÍ8Ze«³ä%y¤½å.II–ä¥M ÛPÀR-ë~ž{îašž¾¼dh^Ž”@1Õ(Ò + ŠVft=z6=}ÁC“ëãˆÂ?¸0ÁQ,(¡M# +V&S¸¡,B“ÛÑ{ü|üI¢ÑñÓã'OÐù*`š\ÌWéb‘-çèÕ²2«ëtj‚Ÿ'?€'á=I"PÈSMžB0hÝLýؘ~» +BŽ30ƒ.Šu•-Mél'#%"R!ÂE’$ˆDšÒÈg¦8‰UóR&<ê=‡ŠØ‚÷2n둸*$FºIÞFÆd½>Ä×i ""ñ=┡„Û89ÓŒCÌ,`ðÉý÷‘M$Š5Ñø|Uøïfëi…EbüSàžÿýªÌ‚âÅÅÒ×¥Km½8W±-˜%©c¡ÌÇòG ‰o|R#ä-o®ƒÿî»>ðgÕðÏ\„"Úö€Ö] j0ôy”çè"›ßTÐLKtaJ# aø÷€ÃPb3# þkÇÜ!XÁÜiø¡ŠUgœÝ¬Å6~êc?‚éàa¾^˜eU¢zd•·äÍÀZ&ˆì›x¹^üò©ÈïË`òëf¼Iiñv¾uƒW7Þøò“™f×™)Quc˜¹‚DÁFB„öåuo5Çë‰CÅ5²þæ0e6.`vI?Ö1"bÙ‹X¶™â»ÜG+›h…÷H]JÈ?¬MxŸv,àû¼—*”b˜©¨™,Nj&Û䚢Òü¶6Ë©ñ‰d¶ÎUæf éÇ€´2¾ð@¤2‘R°Ú,‹7›¶•˜›ba* + „áû IH‚ šÜxK”°¤c(jã« ™Ö™Í!ÊEü¥ð:€²òá„\“XËkÓ†°lœ™+°“Z á4`8ÏMnS³í½ó64‰D7£-ÊOï2×P¿m^½GÝ/k3¬W˜#M]ŠJ+(u$Ù™>Pª1(]Îs0ÙÁK3%‚$ÚŠ»ƒY‘èTÛ¢/œmÑ”™¹¾}–Ó€Sˆêc lß { žËS qûMyD ®EÀ +ƒ%îoÁÞpJªëát5m6÷èö ¶[Ðb¨¶RÃ"–²`ñó³“w/ÏN{Xï”M´ýs/ ²ìÙÉ'hœAéWÖSwN4I¢mGããIÏ 'цeãįL˜ß-³°*ã/‰?nÚ>e%rT¢6†{¸§\¹W`³•™¡[ÈvT( ,öxÙÉÑ»ñE/.ÑæëmqÚµE¤”úoˆÐ™CÇg¯ÏÏNǧýR‚&èf°Áà~žÃ^¼:9¹t%ÑK‡ãôˆÇ—'g“-K½~ù´]LÐܳƼ›ºêô÷Íå÷ÏÏÞ'rSLµÌ 0BÏhÞýWj©£Cö¡ˆ3 iŸWð`Ót‰€ìÖ%€gQ¬ŒµaSmåZ߸ÍUÝÀk…¥þk»É#\ð±B&Þ`íL'„ECbkÒrÌfõï]Yâ‘x>†X×éÜ léH³O° Ôî&<;9;þñèå¸ß`{ŠÄÔ°FŽ§6¥!Þk%ƒ°SÔ›X|y¿¬Ò»~ëAuÛ+¼)h¨&_î&÷=†m‰f&PØӯ͸<÷›ëC#Јm—•ÊÔj÷ç#÷Ro£?Ѧ °Ô}=Þ;%ªÃ*´—û²_DÐá*î`3êLP¨ibÖu K¢X_åæˆv ¤`“1ÑR†TÎÿMBc¾Ç"ŒSù(w÷ûÝùžz­ì­*öê=å{ú¿v|œvdò¿#ã¿vd‰]5yùÒ•#P¶²”X¸qPŒ,_˜iu@!:8~%y¸_µ=Z6m=àJ$r—³ZGìÖˆú‹¶ü³õͶT<$ÊñqúÙ0‰+Ðàô´ßH³VÉâÝJQö +ôy·_'v×ÜnCjhç JlŤý}$¨Mó2y§jÔ> endobj 1083 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1084 0 obj <>stream +hÞìWÝnÛ6¾÷Sð’Bg–?"E]&ŽÛusê ÑVé.T…v´ÚÖ&)mýH{Ë’’-ɉ› X±…IÉós¾ó'†–£ç/¯ZV#%PD5 +µB‚¢ÒŒ£ÓdôüC %‹ãˆÂnLGDp J(GÉzDA +¡a,P’Áe!J>®ñÙô’D£Éóɳgè¢ ˜&Ë2]¯óͽÚÔ¦\¤™ þH~$á‘$hÌS%g£1´0™{ÑoÊ`Ì"ÂqbÐeqWçS9YÓd¤8‰X¤ˆTˆpÇ1"¡¦4ô¶9sÝ"XLxØ[‡Ø Â-‚Á;wÄÎ 1‚ÅP·¶[ŘlŒÒkxž"$o§,KxŒ‚1gšqP™ ®Ü¿—ÖŽ0ÒD㋲ðïnDø÷À­ÿ¾¬ò` úâbc}묥Ö]œ«ÈúËê7ºPæuù'DZWÊ"„¼äý}ð÷¡û#·ý7RÿÇÛ Bm9  T Òá+1OV+t™/ok Sà +]šÊ@AþpÈIlnHþMGÜE°‚´=’Ñ°QEª“Í.Õ"«?µºã«í¦N?ÉŸpZúÓ1‰•Oû`%HEDh%ÀaÈ'8|óMnL ðâÓéªÈ>¤Ksi²úö.#ÐmðR›Mg#·ßÃ(ÃIHsªôNÅŸW=]ÔY›¨Ûð“] 1(i€jEÚ~3¤Ï·ß̦/!½ ü†ûEFÔr<ÞEø5>Ê.Hˆ—wk³©«¦š7*@qâm- ¯‹Þ7ÀQÚ=¼}ÒáppúÐËOn7 +¸ÐÒ2ò6çY[y¹Ï›¿L–/rS¡úÖ ô}U¬îjƒ²¢(or+ šA¤=HÛÞ²]˳Ec“ÖpºX8ïN¡¬ ëm#ÍÃ_›ThiŠµ©m=à°´ b»B*Z‰µ§Ò=¹&¦ˆRMÒz+©¾1>e‚ªÌúu­ˆ“W6‘û»(¡ŒÛ@i½Ò4o׸µmÛJQ#¢!“²C‰¯?—ÓIÒs=ö}^sý£ª¯ÙX$hšƒãJ Ó¥]“¸ w,: +%bù0Eâ¡ÃwIÕ{éóÙÛ—ó×=€°@ØÆP8°åTñ¿ïòÒÜ O`Ø×FStè½ÙÉÛéeRìº÷¥¥/g,bç ýæÓãAA¸žðV <™Ÿ_Ì_O_÷}*{÷é@¤ì2䶼x5›] ȉ#yÜ;â ä\ÍæÉ19lÇqèBDɃÂñ#¤9O¡‹ß®~>›¿éÓ­÷ñ´«Î ‡Á{ÒÇTŽ'æFÔ¯Hýhò%„àÉn'H®ÜætUÇ#®“H•.f'“éù!é;Ã⥛.¾I=8]çñh—rÂŽVQ¨Wþhu/£!‰ºJ©¨Ýƒc$ÃüzŸí§‚¾áÇÊ=£YºAï º«€­uQhð¦Ød-섨qÀ¥D&Ín}7ÑÐM˜]€BÂÝ5“|ãÚM¿2ÛóüëÓÙ|òëÉËéÕÀµ]ÙNçx¨ó E|© +48.û1üøITHm?P¿8‰V?FÑïzå³cÌit02ù½Ž£LkpR;Ž†÷£€»´Gc7Žj\ÍR¿¶…%Sž§Õ‡#Ã)SpR[ÿ¬û%ŠÒ¸3¤Ú©×©;sco.Ã{UÀÜUê°Ý;À¥¿® 3­A“åôëê£àÔG”·Yºm¡ðW–¹klÍÆ +OŠ•½e¿;H¢Uoôl2wšŒþ`àd‰Ö +endstream endobj 1085 0 obj <> endobj 1086 0 obj <>/Border[0 0 0]/Rect[274.8 280.26 382.68 293.76]/Subtype/Link/Type/Annot>> endobj 1087 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1088 0 obj <>stream +hÞÌWKrÛFÝó³âp4Ký­Dq\"/ä, pH!&A £øÉ%rËtÏ @€”dWâT¥TE@à°?¯_¿np²]N8Y4##IÂR¢RC$#µÍG'ÓÑÑ'œLç#.ƒ?¸ð4¡RD2Ê™®F ¬P¦2I¦Ü0®Èôqt_MSrztúêy[Ç<¥2Z/ê|µ*«¹ª6¶žç…ž~ž¤÷¤©$cN¹Ñdz6ƒAtSø;¹3ý¾ŽÇ<¡"*Á ¹Yo7eegë|:Ò*ƒ| Õ†P!³,#T¥Œ)Ÿ™41í÷2jð= ‚€H÷%dÜá‘92_ª´M#ã:d/µñ‡<–ŠêèŒÇc ·I<<åbæ1‡OáŸLD%)M£·õÚ?›m‹ ‰ M¢Ÿb÷õÏ릌Ço´®\—.C¼„0 †±d!Æ},Åšð¦à“ñ„oywÝû÷¹ëûo¬þ¹*HCS¬ U`f¯þ¥Ïãå’Ü”‹û SF ¹±…’òè·X@SFvF[þ'Â1Ø@ß¾ÐÒpÐ$¦×Îã.~æc?†î•TE‹íÊV›&t¬ñ†€¢íW…?ŒVyóñt½\×ñô—]wsšeùªD×Þ­p Gt6y°E9/mC6÷– R8C*$hpÞf!i–úDÜä¢3AMŠä_9üE/‘™?ž,×E,ØúKh‰£{~“ÏɳþqÙ)¶p¿!kçÂý$xL;àÈÙùäêòÍÍ»ëó÷WgÓ×ó©cͭșˌ¦‰cOžaS´Ã§È+rgIØ5s6¸gî^¢½®ûÖZÇð9ÔnÐ,YŽ}¸!—XÙ+Ø)À¿‡© ,Õýœ¿ʶâBy$w • Y?lÊu•/I^ù|Æ"¥Jé''hWŽÛ(`±m†uµü…õ J1×rµyqßKˆ”z"‰oêò%eå¨6ÌUå¿O®<ýþøò|2ÈXSÕË7m©#Ä^Â4(tþX@°+HdêS<ýTmò߇¤ËhfüÇœâ0\¥J!Ö­HÄÐKfè´ Z|ˆ¼ÎSTœ¸ W€³QTB-¼ÓR[1çÇ ¢öJzÁÖ3á9¼”²„à`õ Oóñ ãô(àe–¶Òão…Z¶BM^Vjí•âò)>#Õ\w!õ–°=™.«r¾£mÌ£tê':Öý‚6ÜFH/»yŒ9I¶éÔ¾ó –Â%žpyÕîK£níò`w†'AÓq [;•kÙÜÜç®QõÁ8 ³Ä ©:ißkÃÛèdÛ“rCNïó:/`õ}ß¼0,$ß™3!XÞ‚€rÑ· 3IEÎp¶äѯ¼¦)¸ïI ´ÄlÝk¾w““«ééëã›aûí‚ÃÛÐD¶?cžRµôê;쫹b°©(W +Ëì@ÿjû붬íÌéß“¢æ‚@býU¸Û:Š˜Çs^.[f‹X"{@añ&ד²r#¡} ;½€ë +®pÉQŽI~ó0½ë'F”“87Å#ìW˾TÁ† ¾R%;¨ä·¤±–ü±Ç¸,0îÏv‰‚78‘ÂûRJ8ƒ=)%Ô8Óí>¹£¸Lqï‚Ó²/L¦K6 °v^¸ÈUH¶K•íÎû~}~q„à\çÕb‹íïÇì1ªÇ•NÍžwcC•¬«’­_3ñ­GBêìúÇ;•ÜAé¶WË]SÖv³E ³ +5{ Ë ?˜„lP8j^ÚÊ9i¶Ea›f¾]ÒáD8Ü~“Ÿh}Ö¸©¶m ÜXíf¨õ}â‰[~þ*kíó|5û‹N¯ð=ÙÎ}”tðò™ÁÿòÜç £roìãŸYûœžû°D­«ÖJøœûfoÔ&ðF.²ƒàn‹£Œãàµn$5QÉá" ù·¨ +endstream endobj 1089 0 obj <> endobj 1090 0 obj <>/Border[0 0 0]/Rect[205.62 472.26 281.58 485.76]/Subtype/Link/Type/Annot>> endobj 1091 0 obj <> endobj 1092 0 obj <> endobj 1093 0 obj <> endobj 1094 0 obj <> endobj 1095 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1096 0 obj <>stream +hÞÌXÛŽÛÈ}×Wô#‰µÚì ›dÞvíñÂÁ®mÌ»v›}ÕZ[W‹™‘<3ˆÈðÔ0.UQŒë'>wþÆÇþ7Vÿ³UP†çTƒÄW!1“vø/×ü~»e×›û‡ÅTQË®«¶B(ÅEô{,Ñ“QµâþÁ™´6hÛ¯t44™tó¼÷?q¾æU\G÷Ç]µïZß°ÆþdhWâÛ +ÑݱýaÓ½y(›6^üíÔÞ‚xˆÕò¼¿…Elts¨–›õ¦jY÷P±C¹iX½&+9Ïr—á¹Ç·{O>ÇK¬£ÅŠ¨\‚Zvl«ëjÖZ“O®Vx@¤éÀ ã»÷.– šîãв»MײLJjψwö厕MÅvåáëÖä/*3—Bî­=8P7lÝÔ;V#¤†­Ê®¼+[ð•ÐXƒ³µÎgøÓûî|Íawàªö1«ÌÛÞáC®š¨íØ]Ūýr[SØ›=[ÕÇ»XPûo+ö÷cÝ•ÝÔ±+yêè·xŽ£uÃD>s·$E(%QaUáW}¿fõ¾BYl‰/ca±‰„¹`ˆð)˜u ³žy£2ÏœQÄL)dÈ÷²O7+qçCñ|Ðdg~5Õýq[6ʯßÄ)]¾BÐÔLOT^Œ¢#ÛY½ß](%6K§C¨_*÷`´àÕ]¹ŒE«¿µÛ²}`·»½½Qˆu¬0„¢HéBuýb="P†çf˜ÓWØ3Ç¡©bL[M}®qB Z‹”ž¦*W0æ,%<CyoH:C€»   bŒ’¦êh“EÁÕ(þd@>±>[ª>åÐW~Um7»Kº‡Ô‰trG:9‘Nª41ÎÉ×èM½;VD1#ÎRUšœÞR½0ðž °Æ+öHX—(0|ò òN¥Þ|Êe1È[Ú‡½ùøó§®>,nF¥–Ä.QbK±¶ZR£¹¾v¯úÅŒ{-yq 3­d¯zólÓZã4dž>+›dn_«ôR¹eå~Å–åžÈâh3 ä$Çñx¬ƒMêýö ‡euêÍõf[ÅÂ`qö.VX=ªc:6}³š,f–ò<Û>í»ò ®i‚¥x›4t’Äy‡3NŽ±Ê;”³Gý¸~s©x6 ¬ÿ¨tAµ&f”ÚW¸¨Ø?Nxú'YÁd• Øc5Ó4‹2˜ƒ¾46gaÄžà*sÁSˆjzÌëEŸ·2ÙõÑÎAÊ ‹,<íeïOWï^Sø?•ûûcy_AØÄe‡84`þ‰˜­ù⸠+G£XAc+¡VN‹ø é%kžØ{ÀîˆSšV)ñmÛÑ ÒôSgQYáÿã¦{8±Ñ©K¡PÔ´p.žUµ~¼©î9þ½¼’¾IiÁQ”s•’,Ÿ7µ_=g<±iœä'´­>PMÙ½BZn¬êÎ’ô|®^k)sj8ªÐ»ð VW¸´6 +L­i~†ÜØ=Z)YUt^C·2¸åØ“e#Tdޖβ~臤ÖG hß;ΧZA=åÓIï’y}õãûÆ Ñ“ â¦(àÂ¥"íùê2•Nÿ­¦ý:ét)Rí0÷µÝÖ¤©Òèc'¶é,ÿ%ö9Õ¸ £rNNyY‡ßŸíH"x4´„±HòlKüõ2¢‚ºHÿPÆ dÙ B.9 { +…=µ6LP¬L}•÷”1ÔH +Ï8Ò#7ª{DÑzíŸ cZK=kMNz` ìØ8ܲVhó#zàÒ¨Iæø9>«ÊD:†„²cuħá4§-}A…+PøÊýõÂZDåî°…ñ2™ÒÛ·{vay@XÙ²ªÚe¯\îÐæØ7`ÚâMèX’‘“êjE]LNˆ{¡<ð$¨²ð çÂpJ©«/6ŽP:ÿ¶[I@¿~5ï:çÒ Ö´h_EÿÌ·ø®SÉ¥|Á÷¾”Biî9^ŽŠÝF­ÿj8K>Ô]õ'6jl'‹ÓHóÕ^-Àµ—‘š23†F?ãDÐBrÎRŸ®?~ºº^üeÒù6çlÈ,gä½гیP¶WØæxVˆKÛ.‘yYa÷AgGb¯ŒøŽ67ƒ Þ¡©•ÕYÔ= 6JbÀn'÷âû®²cG…±ã(Æ9&ÀYSíw〡->7^O£JÚŠðbR81)“NxM낾*è×IÛHTA)EÈë9ä3}¸³ù¦2}~ÈvxÁÚ.¸Ðϧ/ŽØIPmaÝ„jî´ÚÁbn|¯è „1ŽÉ³¿ÛŒdïÄÁ°/ñŒƒ&ŽAS®> endobj 1098 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1099 0 obj <>stream +hÞÌWmoœFþ~¿b?.Mn³»° ûѱ*•Gñ©i•TáöÎTXâø'õ_vöî%j^ªV–0óÌÌ3Ï mO~¾fhÛ-dŒRš¡$“(¦¨Õ‹ÍâéjñäC ­6 Æ…?8±,%1GiL åhU-(X!4Q1ZpAY‚V÷‹·øâò$CçOÎ=B¯Úˆe$ÆͶͫª¬·èymt»É ý±ú<ÅÞ“ 1Z2¤@«‹Å Z7…¿Šw¦ß´Ñ’¥„ãÌ ×MoÊZwÎÖåj!ñH"$"2ÉI*‡û2áÉì>dÄ&$v7!â1ÊeA!¸™dCð!úXxˆ/ò(NˆÀˆS-\¦Ñ’³ŒqÀÌ"GîÏl Iš‘ ¿jÿÛº/ Š$Iñ¯‘»£ýïmWFKÀ‹›Ú&×…Km¾8—©M˜Å¢Ê<–¿"A$xKàHYŠ·¼;ïý{êüûw¬þsUˆ%Él h¨•{ýð>ÏnoÑër{c ˜1îÐkÝih8& Š84%Ök2ð?08åŽÁúö - ÊTNÚy9â§ûtoL¼í+]›.t¬ô†€|èWB]#à¢ék­þÜõ5#J ËÔ„=¤ˆ*ë_ßé¢Ü”ºCæF£º¯>@g7k†Q’¨]nÙð¢t/¢¢©îšÚBCk½!X£²vV<1„Lxæ­Ð1:|~õâÕÕËË—«ë`yèŽyœ¨Ó…)›šëCBc¢2ŸSwiŠ™Ù÷«!•€ïþ²^Ÿ72àž‹à¬6BŠP›Aîă­î0Òá+uÆ“Aj¹<êÊvm¹Óð +KS×óG1£'ÉØbä1H°8‚ƒ‰ a¨ äp• ^Ä02à©!X0oS|mòÖœ´˜S‘‘Xíœ168ã*8+;T7ÆÔå•Fyç]fDL:<ÞËÂ\²Ïç…éó[TGÖ î#{ DÞƒ½ŒaÌebÚ%»<Ù@Æf!¤$UÓ|¥C}ÕÚ0QßéõcˆÃ¾œ)åxœuxÔÂô . + ®# i·ˆiÎa$¿yÿôìâýÅÙêìKP]Òð^ëØTP`tó ðõCmòÏ3v+¢¤ŸÄöÂc)íR-b©ëƒpjjI<4\àÂ;ü©)×ðû»(Ätº.!kÁpжÓU™µ-l=;,0ay‰íòÒ¡ºÌX~t&7Ú),2ã“äq×lø&7Aç€ÕÏ %%nVcæß4­n&u.;Ï :%Æ Ëƒ´úc_¶Ðyy½FE^£^m–°&â8—;u¶DUÓjà!¼ÜÔ…>¥ÎÓ¶œ +Æ ån¦ìdŽ¸]ÑÉÖÉA¸`÷´­6Q®#{%hØCÄX·`  Å}‡=öðTòJgØÈQY¥ƒÂlìÈ–à-Êa¸7wVhA:œ+úƒ ŽȵOèÕ¼ ³éÈêþ\è;³'¿aj4’¨Ô{í6‰¹gjâp—› ïVEtÄíÞúÁåPÐr[C]×=³ `+u{m»¦•ü+€¸gÁ¹ç›‚-ý | ¹yˆ˜²¹íQ©$¨°U0s¢˜P‡Ãb‚y=a”ù‡0™K—N}³rñÌ*—ߎk×(5ï°_4í r+?µß ðtÑÔ]ßäíO{Ù‡o$ÎÇÝIøî~‹ë>$p¥ç¹€lÑ,™d?v™W$‹Y<õ:û-î+ç¾3ÚžÚ9_6ÌÙ)Ð6Ã:ûãPhçþãÜ=lª"ÍŽå€ePÙç½k¬÷¾-ìIÿW9èŒuŸ›ÞäûQ8îzÒï¶@ªäǹsÝw¿Í½Âw³„Ö s³A$Q©PSÏßàð÷Ó§aúúž(¯ÕK˜Óp6û”qq*d»uÇÉ<æuÓ¸Õs0±˜<,ð½£W¹µ§sPàô4r˜\ŠȲÖuÚ¶t”¯O³l<¬g>fÿ`@ +endstream endobj 1100 0 obj <> endobj 1101 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[305.04 90.24 473.22 103.74]/Subtype/Link/Type/Annot>> endobj 1102 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1103 0 obj <>stream +hÞÌXÛnÜ6}߯à#ÕD ï’ò–:N‘"g“Hú hé]º¸+mGûýËIÝ-;MÛ ­¼g8gÎÌ.CûÍ£ï^3´o6Z ˆÆHÆ ŠŽfsµùv»yôŒ!†¶WÆ…?ø`qDG‘ „r´-7¬*¶ÜP&Ñöãæ~zþ )£³Gg WÇ€ÅDàzLË2¯öèyÕšãUš™àçí÷àIxOŠ2´BÛ§› Z7™¿£éAÈ"ÂqfÐe}jóÊ4ÎÖùv£9‰4D¤‰Òˆp‘$ "2¦TúØ\¸î!DL¸œ=@ì Â=„€8B‚à¡ŒûØíƘê‚Êïð‡4’(|ƒ8eA¨à6 +BÎbÆaË,`påþûÄÆ!£˜ÄøÕ±ößíNY‹M"ü6pOŒÿþØäAûÅue±uÑR ç:²xÙ½$Ý^(ó{ù3PDƒ7 WÊ"„¼åñsñï]Ÿóµ/cõ+~ÍeAhÛÐ. T/Êá_ú|Rè2ßZH¦À º4 +‚0ü[À¡&±Ù‘žþƒ#lï©hxQGzRÍá°ê÷þŠW‰÷§ÒTmÓ¬ö†€¼/WB]!`c~ ¶¿ŒEÍH’(ËSɇª]Ukí\\·y]¥JÞji‹šk“åWÎ%ÔDC º·ÐAœ›Æ¯ieuy]W`Æ-MH5:.•ÃÒÎ;ú`lSÚ™+h#;ÔêS±ƒ/‘)LÖú^#qž¥Eqã3rè1‘š4«®æ|¯]õ™_O9$HAžR({† Zæ(*’ðž èµÃbuîUçž!üZ:nòå›/f»äDNðn“œ»·mìù¾ªò”7ÎAÈ"©Ç2Npè9Aºýt¨…±&”®ýá2m`.ÜAB¦æ>ºðã£öD2¨JKƒê+”¢²¶¦€€lF£hQä;S Ê+g£È?[ži[²@|$ üKæ$™.œèìfî‡ö¡tSrË\UÀ4~ˆ®y[®œð,æ‰óýñgÉJ+ˆ«iÓ*sÀÌ’Á(Cõ$– ÷¾’ Ab©&T,f™K¹–Ù£ÙCŸ¸¯½Ð¡ó{Kî0…î µÂYÊ=–K>t5»ã}y0٢׈A¾øè â±<ñðZ¾™õ•ÕxWêc>Ëx)ð)%0«ir_jé5V±çY_Æ@A¥>·ŽRP¹ZÈC.J4"l­D½OàR{j¾p6i:Mæ Ý ¨ muÞ› Égw¿y‹^ï~À$ Î"ã÷´?é=m¿±o2Gwøm +ÚPã®Ê²îA6F ?ž+lcoë¬ãú= cÙnÁº²#Æu—¢¨-X1þó,Æ06/†hUÎ w‰‹Âç\/“~qÌíxþd‹îå?Óì“J¡× Š­ {¦’N( ]±¶“Û) fRk"îƒ\m‰L÷0ÍHtg©QàÌíR Ù"n>*ÇÁSÌzOg¼ò~L¬œ’Æ1»V’rPl“9ëéÓ)½À!ß½ç:ðØ?Ät'ÑËá醌Jc®6ˆHn!Í ªdµÐ»yLÐ3Û¦#KÜaŒ†yåØÜ Ç2;žKWùŽQc úýÂsC`8s «¯{†œÕ;ÓüÑkmAí%îÄɨ„s"Úå±Ý£Ö–4±6N¢m¢Ëe{ƒ¢C×éÞ –!ÓÐGÕ©d?ïaÁÙÅÛóË&p̞͟^âðÛÇie»8…]{ñ9鑇Ø仕wÁ¾^‹3ÞÕXQg­´Ú9åa ’ƒ0mû¶’¹N"í F‡ àYJ38KÐC»=oÑxØHÄ¥ÎÒªª[«ÛKgZ{ÓŽÅÖHú€[m|ã´1JOm]Â>3 _]4Ц~YÏû†ýÍÂŽ[måœÆY›÷ö-V%ÄÚÌþOæm ôI£‘ZúÙóŸÎŸþÿ ”+ù»Ö% Ë, ô¦Ý/# ÄÁš¢`†AÇa@ð†JïÊ9RÖÍ©±ç³[É™íýK¦éÕ‹'g_CžÄBå÷yzèy(:‡ŒE>cÑ*”ýOG£Tb™­" 4dÈ3·Ò²>µC'™;pû½óÍËÿÎ5µ5vWÃRËâO4±É/g‡ôv{‚äô?·ü%ÀåžÎ +endstream endobj 1104 0 obj <> endobj 1105 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1106 0 obj <>stream +hÞÌXÛ’ÛÆ}çWÌã ^Œ0ƒ»ßiåRʺ”–v’²ó 0èõæò—9=w«R©Jm—$€žžÓ§OŸ¡d‡Í‹ïï$; ›$di±(KX°¾Úì7Ün^¼–L²í~# ð‡2KE¨X"Pl{܈"‚(ٶě@Flû°ù™¿º}Íb‘±—/^~ó ûÐ{2!ï}q<Öí½iǪßeåýmû'¬š•b2_ +™Älûjã# -Sšwá%ôŸ{Ï—©P¼Fö±;u[ :ÖívG9ö“ˆ8aB…yž3eA™%J¤‰»Ž- -®$Ô±ã \£3\Œ2·yÊLÆv÷alR|[xa$bþÈT =?ÆÛÔó•Ì¤BÎÒ“x Í÷m$J3‘ñ}g¾ÛË‘y‰HùOž¾R™ïû¡ö|äË»–ÀÕÛ /¥’”£\r›K M.ÿòb‘påEx dʘ‰|ù¿úøÜÿßyÛÿ&êÿñmº +a"2ªA`«$«~ø/×ü®iØÇúp?¢˜!ØÇj¨Ða($ÿÕShJ^í„ã¿epª4ƒôí¥¥“uKãÆ$Mžjç€RçÃXŒçá/Þöïx:6OƒÛQl6ÐØž¾lƒ‹$vHèΰ1þjn²­î‡Bw#yéõÐözœ¦¶÷§±îÚ¢aE8«vØx_Œl8Ue½ćÊ@Æ"•fQý|bžoº² ¬Ûë{ËîxêZÄìΆ°dw†8*™oÍ€,RÉ´©†ËÙ®ÉÆŽÕ‡¶ë+Zr° ú¡qkus½J-jWø™O;ôƒäÂæe!ÅcyŽ§•ÓFª’Á¶;÷Ñy~ö^`«®eTjºFvl]g +)#‘åVË)ˆDÍò_ÂwN ѽ÷Ý?ü°È_‰h°4•/ñõüH伟ð EšÏ†Ç”¯E,4Þ×ô_a3‹ÌšÛ?ÐjTš©"?PÛ„7xùY¿‡§’»Z¡e.PÓªÊ&ì 2¨=5mÆ;/MÓQÍ3þ€ÁqŒÇoÙªú1–ÀÞr‘…‹ê*- OS@>5J³gÚëŠHYI=ƒ(7Ól©HÓÙ†×ÃÉ\â†=Ü×å=ÛU#)—R¬# mVïmMØEƒØ€ÅyìŽhä’xi1ŽÕñD‚бÏ Auªu)æÙÄ t“òYb¬­Š^ç:hÆ"æÕLý´$q ÍŽ9iKíóU3/ˆ±T¡È×rriSÆvmóÈŽUÑ‚ûs «v ®N<Õä¸DJVÍJ¡4|;¡çIÛµ>=˜éDƒäæ±Ð‚ÿO"g„úƒL¼ïˆJ†‚'œ¶3°ûÂSt³èr¯-«ÊE¾6uÓx´žNÃ_+Ví÷^hÓcÚÙK¨3¨` +,W3HÇ5 ­¹òœ¡I¢)³*oÓœó‡D† +†Ö#³Ú ñïZcZCùõ5’s’Nwæ{tš¹®ŸmM '÷Îq‡†¾˜Ðú†´‚ÇH"Ò€&ë]µxé˜p7öK˜ÏydFÍp\’ÍõÙwÍ€ú¸#òÖK6Tº›i†k4 ü½t…~hü‚ÑdU“ܵš¦”S.âxƳ RiZÒÍ-‰to=(kžÌ±/ÍbOì)Œb-ªìâxÍÀèèAòYK¹qbIk³„7'ÂÇüÆSœ=À¢Gà³"ø·YwÉ©»”u8 ¼!üoeu".wíWô[f¾¹÷tK¬¦7œBGùŒ{˜ŒÈ÷}­ Å|K¹òY>[`ó1,U–¥J³T–*®E”V¼Ôg˜û‹·I¯zÜXæ®É‹ÏžŠÐ!º·ÉÆ‚\#±¡FD4ÏÕí0VÅŽ8W´ødø¦D–^J!Ù«ÆIDê VÌéýǹî!Õ—KÆ*'?E»c%ûT±ó€ŽÆ¼á›®-Á€²¥ÑÌÀù“0%l¤š”™Nká¥\±s5©ºò>/ß¿ýðþÝí»íÝ¢J3ƒiºêÒ~fÞøE»ØA§~f_ÊžCßìÙ#ƘwçÉ3/³‚ó—_åw]÷©Èù1íerò2°c¬Àhé®m;XàºfùŠÇ0™i¾<1|Í°Ô¹X«uCýOó*ážO T ’Æc콦$Ê4A¦8\‘¥³SìÆ`•VSÅC¹4$“·³êèIj‡³n‡a|d˜»ëÒ#nð´íÅ4Xž¶"ð.„Œt­ù«7wÛ%]D¸ýr¥ë“ºQ[ìtoŠñ8Ô%Šäæ©\Ęfƒ†‹aú…k…‡6KÑ7¬ƒ3AVBº*e––ÚД]ÛV¥ño'm€CN¡Áˆ—žaŒÚÄT4›N±Béøw ƒª8 Yê3š¹­Æáï† gXNL…)=µîà©¢ÊRh_7MÕ³²j½ÁŒt¯ Ü4þXœâ ]÷I#©È®*»ó©!§Rê(€X²Á7åBi¼> +ÝnøOÅu?6™&_Öv˜ì)t“L¡Ôܹî}¬2F³3"ŒÑs¨©m_S$5·(ŠWg«lšd¶ªZ~k31R=È2^è#͹™¶†î‹æ¬#çÓérA9eik;™ðO ¼OöÊWäOŽšG|vìÓÑ–Ü›€& ¶68Åàè@Sò~¦ÿ€NjzÏèçEp@Oôß_¸í›·oÞ}ÿź9¢OÔ­Àqâ€f´n'_®üËÖ{ð%/Hº7ƒÊôtºèé "鳿”xøPQRÝláo4Øk­Œ•úñD«¡ +zl´=®ó¤,}òÉЙ‡ñý9Ç~ì;7OX‰£uZÎ?ûc_¡2ôÔ sÊ®Pžÿ\Üõúƒã©·§ì_É„ddÏkýS4ÜÖ„V¶ÎY­Ñïà÷²ú’-zO¿Ø„_A•ïn?~‘(kå]0åPµ áð;öÉ ;kqÔÜ®ÊÕ°Ò%F¥4ÄRCìÓoM=º£³9&È’4Îå(Sy +ჿƒË*œ‚iG·ÛÍ¿hÚ +endstream endobj 1107 0 obj <> endobj 1108 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1109 0 obj <>stream +hÞÌX[s›F~ׯØÇ%©6ì…ò–:N'¶É8jšŽÝ‚V. ºþIý—=g`ìiÒxÚÑ Ø=—ï|çœìWϾ{ÇɾYiIB?"*ÒDú¤6«ÝêÛÍêÙ+N8ÙìV\~pâQȤ ¡ô™/ȦXù …ù*–d“Â…ÏÙܬ.éËóW$`9{vöô)y[{G?T±ˆ¾­+wo{L[âiÒ÷ž}bÜýºÉ¼5ØK«±µÞú—:D¼Ð–¸³ÅçΖ¿¼€i*<GŸ‡„8ɧóìï}ç¸ìq¤þ—Ù(HÍ"ŒßEÁ׳tø—:_ä9¹Èö‡‚)iC.Lc ¤dœþá ÈIj¶¬§ÇàPXkHÛ2êP²Ù¦Zˆöûh;}w[¶ÉŸÞæwظÝ1‹µK¼@ fR¡Ø ù›/iV¶dk,>Û>¾*ö%}“ŠdŠî ÙL-‚f+úÙ,²òùät gql¹¤Ä0ÂÈn„ÑÚuƒ7×mV•IN’Úé!í!iIsmÒlgU u$;Y‡º~’™Æíi†¤}uµ[¡&Ã@rÚª†­vòÑà¶5;˜™¶¤9TÇ| 7‰ÉMÚºÁJÑ,MòüÖ…d-`  +ƒÑdÖ n0“ݨa>3èF4¥fNsëZ5‹kÀb1DõÔg€¼ãFך¬W4!×@E54Á5Ú\°=³*CùcÖNŠN]yŒ¼³¸ß’IãœÉ1‘œ‘?ýüÃ+!±G +Dg¤v5úží˪6§¬qi'b¨‹X:='Ø$÷Ö¯€ݨ§ì¤­ ÚR}ùiŒîgT?p]ÝúìhdH™†T;’¢BQ@?>!Q8›g¶&”•VFž}¬=œD8iè­Çð—M)°æ +ÜÍ&‡ZóPNù½+Ý ÁÔ—!´Ö+c=”Ýœj±ÒOá8 …Uß²ô@ TI ~AQ/S Ì$Üj=…U,N¦/DC²HãŠ4 ,ðW© ]dkE®|0²þ‚Vûƒu%³˜Bq‹d°@Y_80ç„èR,²)&úshòY©‘ëšãÏç Åá‹\.@ r©Þ¡šèýÏÂ^J +-O³ qäàƒŽrxÒ`}Ÿ›Å)|µ˜Æ÷ehÈx°H§„cóØÑ^ÃÇÁÜ$‹?»øM+ôrñ&q=ŠøõO mwüI€‡®U¿Ç¡\ÓŽ’®a49}>ý¦/z‰ñ¼cü€`„œGÈvøRÑʃCžWYƒ‡#ôÎç3¸`€Œ1ð‚Ï;{óþübYÄä$eú²,î–eÛÝqsx*Ƹ%rírÖC¤ìgY\;û„ÒOÜU¹KšWi‚ä‚2·µÕŽ\'P±•€VÚö¤Öm…/˜ +NƃCMŠ$­+OAÑ +­qyÝ:<6O–[uš”eÕâ„QX‘Ú‰´áBÉ0|x»ø­íâ$9¶Uö¥@¡*oHU“Ó·Ž7¢…ðKVGÓ´ÍzñQ.6Çÿl6šºX€Ì0˜ÅíÕëç/ÿû¸ @ª…°ÝêÏ9xCñ»ïU3ÀAšë™ †Cfqàh#…Se¨æØà 9¿`û—†é|³ú[€ZrÙ› +endstream endobj 1110 0 obj <> endobj 1111 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1112 0 obj <>stream +hÞÌX]oÛF}ׯ˜ÇáÖœpføÙ·nbY¤n+Í.Ü>0%sK‘IÕpÿQÿåž;CR$%91Ú +-rîÜ9÷œû!ɶ‹WßßI¶m¡f‘3?™öX-6‹.¯n$“l¹YHÅ<üáCƑЊEÚžbË݃áù‰fËn<é³åãâž¿¹¾aˆÙëW¯¿ù†½¯ Í«mîvy¹eoË6«7é*s~Yþ ;i»S 4s¥aÀ–o. Ò6+{§¦?ÕŽ+#¡x3ìCuhó2kŒ­ëå"ðœ'AÈ„ÒI’0áÇžçÛ“…JDaÿGÊŸ<"ˆ6qâÄ 0<ôãþðä™ ºÓëÀºøCêh_ü‰)O:n€ÛÈq•Œ¥‚ÏÒ‘¸jû½¢ƒøQ,bþ¾®ìwëêeN("þ“cždöûºÉþòª$pÍq=ÂK©0"ÀÈ—¤óÅ“Ö—?œ@„ØÆÇÕ“cÖòñsöï¥Ï¯|íÿcõoüš‰‚EL1ðº(xáLrÏ}È·-‚©yÃ>dM h-$ÿÍQ%ÏÖ¢çÇàH‡ÐíQÒá\Òx1ˆü™œû¹Î›6mÍuž•­³üïQ«R$I@ìóÕ V=ˆ52‹Ü·yU¦Këía ¬}H[Öì³U¾É³ÿf¬ªÉ.ä,ã`@PúrÚ5%¬Ú˜—WÕn_•øV°;cå‰Y¯‚Î+#±VŒ4£ãIn?¾{79:í؇̼ÌÚÊvu üèbRR±us[Vuóf8ª°{ùv¯å?èý‘;÷ü§jykÀæB$ÿvšµðÂÎM–óé‰|0ùíät"<Â`â¯f ƒ`böÓty ^¸þn¶>~áúë?çþÍ팞/õÿæÓÌ€T9ÔW¸›ˆì¤á›:[U=£®ˆÔÈœ%íÍu÷R'\W†9ÞUBv)¿+¾Pÿ=1‰"䟣NØc<Ð?ÙøÏä®’$sœè<ˆ"Ëå¡7c¥?éVCŸ‘ ›õEµú¢Ì­(Ž:WUX¸¼‹Byï}îö$‰ÂEBµ;¸ZŠ +FŠïŠé Ûሜ\tŽ ²yq ‹mu¨ÑïœO¡òLn‘ÁWæP“>ý!ï þºÇ< +Híþ_GÑ {&ƒú#„ûÖC%S€× ¯€µˆ’³•Ö*³Ó3™Ôt<Û¿ £N6—ªs¼‡õ€m¨ÌƼrp)ŠŠbóG´r1GCû-›± Àp4±³Àâø˜™Zþ¥jzl}ã *;WNá“4=#yf5‰(wެ×Z\±Ç‡|õÀÖYK†B­ä;j²Y¾éâhÍNuÒYLmµƒ Wl_ É7®¦m›íö”*ö«dœl]{“ø =#V>òŒ•YZgC|OÞ8˜QÏ$Û‚tجYŸbÄ,¡ªÝp$U— /FJ‹džUŽbe mUOl—¥%x±92+§àvýN¬Ç~‡3É’)ƒÞZ˜þ¯¬J—Æoo„¸]¦;ì'júˆ?¸ÄëŠø ÌÿHä!§ã4ì!u=Fïx|· «Jĉ:‡v¶›Á úé.cÙfãèÎglg’\D$ññ  +éqîì3jüµžg€Ã0áùD» œ¨ª +S=O´ÐÀvLmÁüxû×Ã9Ñq7¸Œ]WXZVí3؆³¡ú2"4Б8H^é1Ú7µbN7oï–““†`ÙØë~féóîëÁi*Ÿlÿàh¥÷©ÉW¨½¥¾|ò{~<øÏÜ–#T¤í+–·}ê·FÆ…¸ îTÜý báª*ËleÓþ¾²AÄXK‚Â¥¦ñ¯óKù#‚÷ÅO˾›ØRaSœ² âC¹F)h›Ÿ+ÖPªÀÿÁ;2õl‡qÏ7yQd5[eEaó+(<æ“Zn›î*WôÜ¥ßoXŠ×Ùª:ì ÒÃʼ@æqµáÈ<—ï¾Ü'±m†²–—¦š ûÁ™n×te6ÚQÛ5Õ ßæÔG¿"opà|ÞúÆìۅuI½Yn›u†ü¯qôÔtB‡¢e¦¦ô_c9™ ååTGÛŒhüC oNŠ£¾#‚³»´‘Œ›ÆÚ„{“Ùýž?Ò1Ñý ãpÜ€cª8Ð'3…˜îýŒ +ÐÖ/ˆÛòíoo¿6l=ϼ3a£°…ÉÀ “!ƒvg(Xí ÁŽ¸Àijy—­¤£‰¤€„—LjVo3R!Å­ ü•{N ¡>ÛI•Bý´§í…CÎ+Í cΦ%S`\lÃp¨»«èëWȤ´„ÿê¶u†ÐЪ+ÖS(>yü»0Æiš7vûºkÎMò©®çæ7gL—\ñ,y©9úU‰ñZÉÝÓ¼§_@•wמ%Ê<ñN˜²ÍÊŒò´⟭BžlªD’ûã‘Ô(ƒ°4»4©Ö˜wýf\è”<Ùp!qôýkVgiC¥ Gº^.þ'Àˆ•Áî +endstream endobj 1113 0 obj <> endobj 1114 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1115 0 obj <>stream +hÞìWËnÜ6ÝÏWpI!šoRËÔ±›IÄB»pºP4š±ÚÉä&þ¤üe/Iiô˜q»-ÐI–Èû8¼÷Ü3 m§?^1´iZ C-’V#AQ/Ö‹’ÅéC %ëãˆÂܘ5Dpd%”£d· `…P ”dð@™DɧÅ5~q~±èìôìÙ3ô®Ž˜%W›:ÝíŠrƒ^•m^¯Ó,~M~O"xRD %#L+”¼X,Á s“…'1˜þ¥Ž–ÌŽ 0ƒÞWwmQæ·už,4'FCFš(q#"-¥2äæÓõ!cÂåä#âÿÞÃ{b¥ísw1Õ%/TˆðM I¾Gœ²h©àÑDKÎ,ã2‹\Ex/\ÒXbñ»º +ïVwY‹"M þ9ò_òð¾nŠh ñâªtØúl©ƒ‹sm^.–¸‹…²Ë—Hy$áJ™A(Xã²Çêx™?¡‰ug@»S zÖÓçóí½/67-¦À zŸ79t€„á?"=‰óéË¿«`Ã}khÛÃŽ$¶¡©ý,×FÓ—5uaãU¾þtVín«2/Û—é¶BQòÛЬ-¸íÒ¸ý¾%úŽéûvµ®Y”¢®åU°þ• +ÈQ·+¸~ùüõåÄ'2,òT`:ûÜtø6mÚæ;­U—¼e}%7ùÌ9ƒ¶ˆÕ`˜™¯† ÆkçÌ4"«ó´u› af´ÅöÝvx8n·@ƒ~—Û°jÕÀ(ŽÍ+ÉmHøcÄ)0øÄâ*‹X ÷ßÓMŽÒºº+W¨…\¿ž: },îqŒr.TݶEU¦[ï)&‚áRý^¦»½)Ä™¥%ú˜£»&_¡ªÜÞÃ%ëB]rKx¬æÁÌzk î|  Gž§ÙÍ:*JÅ,y€U‰Ÿ]¾ywùöüm2É^ÍŽœÍØuHŸ WktïÎ!ÆÕ¤-ÛÞa&;>)òo£ã+bŸÀ˜À`†Sȇag§,«6˜›¦àБêh¡<нWÕº50QãôüǤëòŽ*–ݪ¥€¦‡€¯îË6ýÜ­ïât˜”î˜AIM`š3¸†•nãu\¤ñ(¾=› +œâæuƒöÅ]sœ^è}URïÆó­ +|‹·yŸ ê—ijåž–ƒs|M˞ຯj[ŸÚpÙhùÌ Àbñ$5p¿ó×ÎÝq?˜ÖÖ<Ŷº€È€ Ù˜)ð‡hR!“9 u/ ‡:¹ÆÏA +hÒÍ땦/å.1¼+bhâèQŽC˜&B´Úgá?»‚ÃÄÆê&j?o§øc ìqìºm’ m$z2èÙÕmžëƒ#­t\ÞúÇ7~ó¦ƒÁŸ©H"õˆ›ôÞ–'FÜæåªAëºÚyÑ€9q9´Ã~.z:Š\Ë bSÀ P8ñL ù |µÐªõ@©Ku-çÝÿè¾;K3P¸Ò%@"¾×N_Ó$”¼–uX¿ÛFE)@ŽÇv/Nd?‰´ë"R(öÎŒJ¹™èêòb>9x|løu89˜ýpc´)vÅ6­ñùØRû*`~‘)”0¥}ʺp|Ï»pN ¶à$Ô–‚k–ߺ²KÛî~j>‰û\´(Ý6úäP¶(]ãçÕ\q w\qìEVТ·'üDz”ÄÓí„wÍðWÍûìPá·f¢ü‚pÂN%×?ž½a¶S9Æ›N„ã5ö* ”ð:a.z:12R½|ÕÇíLð:{í¨)D€,Ä?Q”ü¨ú–˜øéâƒK ôäê}"?Ü(\å ?ŽÐÈü]…üßUÓß%Èw ò­ä> endobj 1117 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1118 0 obj <>stream +hÞÔXÛnãÈ}×WTö©9k¶Ùݼb‘‡Y{6›`‚YÌh“,ì àP”ÌŒD$ÛÈå/sª›¤HYc ö$6 R¼Ôåô©ªÓR´Y\þტM»ˆ %AJa“ ¨)ëÅ·ËÅåwŠ-× ¥)À?*M¤Ñ”˜@š–»E+23CË' +iù°¸×o¾£H¦tuyõõ×ôCã©T±ß4ùnWÕúcÝ•Í:/JïïË?Á“qž"iÈWRÅ-¯> ²›Â™£é¿6ž¯©E3ô~誺l­­7ËEfÈ'–QLR›,ËH†i„.³XË$î#e©ÃÙ} €{xd…Œp3L‡ä92õٛȅøçÜ3¡ŒÄé@y~„ÓÄóµJ•FÌÊSø4îzȉ„I*SñC³w×V‡¢#/–‰ø‹gï”îzÓVžxžfpmºã¥uœ0`KÖÇ(˼HÆB{!>•9ËÇãÉ×Ï¿ð±ßÆêÿðcvL,S^ƒ _… >©‡_èóõvKï«Í]‡Å4¢¥÷e[¢Œ‘JüËÓ(JQ®äÀÿžÁ‰¶ ŽQ·ÏKÚÈ,uUmÏðxœ„29ÖtXV¿X•ë‡«ýî~_—uÇåV~Ÿo÷ÞòŸÇÒ=6 ¶&è +lÌïA°5DZƒÃÖo*C®ß–rê»@äL€é ôG,]ïßý¸|óýë·ïf®IM^Ý%½;j»¼+wˆ]Òò®–thËíëí“‹Ø×™Œ\ƒLFçCçÕ}{Ü×EIkϠˉ½‡†Ê¼¸£bX>9¤ßSÄH}l¸É1ýOu—?’K¾G+“Yì!Ÿ`­#ðÆØaÀQXìoD…ÔW¥‹³¼‰Å­puèµí`·Ôë…}Ñù‹?-ÃÀz´•¹Õ¹wlÇÅuÕò¡›/i$µŠ³±]TâÂZök ˜‰×Qì붣‘ÝåÍ«¡x ˆÖ:{ÂŽ»±¨ßæ|xB=~6„À¹·Þ1BƒŠ›¸Ÿàö³â°<~q·žX)Ü0˸ô…ë¸p#^c~ô˜Í9Ýž„éad³p`óaqºy“Yf‘U4gð0ë™ÂîË¢ZWè Š• Ñ +–r0ÛS(}aŠp(w#±…é´ ‡y¬ûyŒš"«Ü@,T5±‚Xå]þ1oQcuÕµžâq-çyùð…âä’Yn®8 cÞæ ÷K Ã46çRƒ‰jhÅÁSbG[È%ž<`â+ÑxaÚÇÒÄñ³7/ÜÖ«ƒ6±ÒƒH-<ŸÛl‹U[󠈹)Äh +ή‹w[£ØR=rÝĬ êƒÄ¡´2¦iѨºÏ*w©¬Oâkˆx"ìät¶œÅ¬=ÓÐmº°=ò¤Kh=æ15ž?ž3®ÂcÒ6g!çödÍÍ}I˜é°(ýbÓÎczððªFCÏ ] ´ÒˆY¬–ç€ ¤ÿ¬:]ÞVÎÛäyKä wIø¡Í7x`Mí~èúb¬u=EÝbc·ÅNcEÝ~"ð_ÖëƒÒÌäzà"fé]°8Pù–nN9Çõ¼°0ýÃA|q^Áßð¶•ìÖu8ÃÌT?bÏzÍfºœw6Í5Nn=ú÷ð;F¯ôGˆÇÙhÊö›É3GÌxˆ53 æW´Þ7eµ©û–¯Nm½êøÛ…;ÅU|ûéb¼ñ®©Jû°³à÷ b§¤áÑïå%Û»º+‹OT­¼«8/¬iÊ¢{ $¼g·BöÅßýžŽœÄå#-GŒÆlzt蘆¾_-­ç–j^½Žžs—±`Ô• š13˜ƒÀÕªïÿôÐTܓ𬼽­¿ºõF {‚L\7ewhjRß ¿9üW€íÏì +endstream endobj 1119 0 obj <> endobj 1120 0 obj <>/Border[0 0 0]/Rect[63 165.24 108.3 178.74]/Subtype/Link/Type/Annot>> endobj 1121 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1122 0 obj <>stream +hÞÌWÛnÛF}×W ôD:Öz/¼"èƒ+ɉSÛ5l¶MC­dé’TÈW´?Ñ¿ì w©›“T‰Q ¶AÒ³»gî³3f½£g×fu/Pò¼(Å¡Ò½iïÛ¤wt"@@2í ñ%¢) ¡âŒKH=Ž(Œ{±‚$Ã.+jønœ¬,ê²Û”È7î"ÏËìÆ©ó?t9Å ·)®T¸r nܧ­ÐÉÁ´—-Z^4Ò7Ppá_^=àû*×E³‚ô]e, +®<ª°Ÿèé»ë&­ša¹¸+ Ô¢©oùàÈðù‡ßýr5¾¾qàó Epú?#YEÇ\ô¡?:9Qøæ‡päÎÎðcýÜ@Äâãy~ˆ%fµŽÎÌÑÍs[0è_žÇ£þ!É'"?–‡à{‚#ªÁâö¯CC„Èæ ßP™[Ú^–ÙˆÃ×ü Z¨nªÉòMƒäÙ¤–EºÐýÏœ96ð9ÿtLí±Ç„Ù¨öu_F‡çsòZøü<8þ*÷õ“S> endobj 1124 0 obj <>/Border[0 0 0]/Rect[145.02 390.24 199.62 403.74]/Subtype/Link/Type/Annot>> endobj 1125 0 obj <> endobj 1126 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1127 0 obj <>stream +hÞÌWÛnÛF}×WÌ㲉Ö{'ùèFrà¢u [hQ8}`ä•ÌB¢ ’ªíïH¢ÙÙ]R¼Øj´ +äŠÜË™93CëÉÉûkëjb$Ä,• J;YM¾]LNÎ8pX¬&\ÃÞxS) –Œ2‹í„¡ÊT*a±Äã +“2›Ÿ¦ ¼;y÷æ \–O¨$»u™m·y±†ó¢¶å*[Úè—Åw¨IMšJ˜rʆÅl2ENÍ2¬d'ú§2šò˜ +’£¸Úíë¼°•—5_L´JÑCµ*dš¦@U˜ +žAcÓ¾G—©Pƒ÷ˆˆDú—èñÔ£¾TIë¼³ŒëÆ{©ƒ‰?d‘TT“'ŒGSË8š +žp6óˆãU†çÆ9¢â„&ä²Ü…g·ûe ‘¡1ù1òolx^Vy4E{É®pàzw™ÃK;Àœ-ic ãÁ–?"M ‘Â+ã1@ÜÝGÝ_¹í¿‘ú?Þæ£ M\ XfF|ø‡:O7¸Ê×w5S’ +®le‘RRN~‹’’Ø[Úæ“Á±ðl·Ï)-išVûn7±¢qÇiÇô9ûÉ­]=Ìl•¯‹‹lk£Å¯e»âàd¨˜ºsÛÀ‹–OÚÄQ¶‚ âë Ð:ÀÇ:µ³ùõùû‹:IMØ6íÃ,ŒßUÕvk‹š†C·Ó˜j?•ThÝèÀí×OE=†)MM ¹[ G:ÁÂeœGN‡ä†äE ·62¤ÊGR2Ä‘’¹*1ÃíË]QÕ°ÄýwYùMë¹ ±Š ‘¶™£ƒK7¤Èêdk‡0 jX¢z8‘ÑÀÓA4´Lš2ÝuCN±KªÈz†Ö`9”7ÅÄ—5´dqš¦Úy¨ø¨L7 ìë{»ÌW¹µ“+—¦ ÙEx)¡¾³ˆ ƒŽ¶x´4iésRiî²sàAîYná´´Ùñ|T¢ž·½„»g¾—ä¾´ +âå@IxTE.ˆ|Ú†^ƒÎ`ûiŽ Cƒ˜Êä…>ŸŸ^ÍO&*ÊSÝËbÕ˜%ÚšÝËcX RCM1öÇWê-BŽEC^Áî¾ÎwE¶¬¸ Z¦"¡©7ᶽ³¦œ-³>YØWövÅæ /K yðU¾±×XºšèrìZ=ÞŠ6[T“-g‘H|røöVBå˜þ<¢Ø°ZE8vøM..‘â}ë*«½š„jÑÕ·£÷jº +Ù'Œ±O?gè€ûHtÙKòê(*ziS‰Å˜Å/$î!o¡²>·‰ü»“à +¸ÒŽ¸2ØV@cë$¾s¨-佑,M©q{UŸë퀕%„cSßESESrÈ'Õ”Ô¶ø¨4n5ÙòýüìÄáô}V¬÷ÙÚbãñ<Žq$ÁKi‹ñÇUh,ÃìôåØÅK"(½ +ÓÅ™Tž¯ÑqiX<ë,/ž· ÎhÊúñ’¾Ë«—ó«ÅÏ(åüâ|qþáâzX$8•i×­;#̘%o½5CÍÆ _JÀN‰xÆÄm“}Ä0/ÊЩŽeQ# ³¬#„Â`³ÙÎ=@Žu)¥ýK'ØîJÇÏ&xá!È ÛÈ ÉêØ1ì=8ó'zÜ|¿o´˜…õí@ˆ@$l0qƒØŸ¢¸9›’Dº~}”$Ƹ×RµŸ-ƒê ›ÌÃùûÞOU¸™ÔO0³«¼È.‡/‹FNPÉ™¦Ø¦Ž33ÆDW=­=Loö¼Æ Ê{âºÞáq@ƒxïˆÊSH—R%zœ{þ²¸Ã^Ð4?T\ïCnhRDx©F‰€ ‚?K6ˆ÷`H“‡/¸P†!_Aµ_.mU­ö›á¤öÂ\*bœùŒ Wˆ›¥¹ýë@(óï ¤GòÃ$Äx"…áHšPÞŽ¤‡Ãq§é5³iø? óÒtÀc³©ß”˜vÂT,5£q”> endobj 1129 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1130 0 obj <>stream +hÞÌWÛnãF}×WÔæ©™Xmv7¯äÁ±Ëb3Ú݇((©%q‡"’Šlä‹ò—©ê IÉöl‹cÈÙ¬{S-`7»ý惀]7K¤aQ–€ +¡Õ³íì«ÅìökÛ™âÞD–r%!U!%,³¥ð0Ê,Ö¸E‹óìGöðø5Ä<ƒûÛû/¾€Ú@d\±fׇCYï໺×í¶Xëà§ÅßQ“²šb®`.¸HbX<Ìæ(Ô¬íJ¢ÿÝs‘rÉJï›S_Öº3²³Dò4A'À¥Êóx”…ad}3îš—è1—ÑÅK mPæ%:<„#7AÈ_F™÷ ±s^ÅÖÂï‹@EXügluÁó<¦êäÐë±ïußIŽz]nKÝA¿×plJ4š-ôgŒLÌX7Æl¬\Úð_‚†‹?KRïÕºµß£´Usª7„E­^÷E½«¬$Åe[Q¡—;s4l™±&¬526º+w5‡otsн%V’­m]Ì%¶k_CšwÓIíöÅ=\²î´ÞCÑÁ*!zW!P ë@äxÿXìááÊ ËÚ&‹tâ¸r¢£<µÂo ¨7ÐQ‹ +jÝCkÐr· `mE` +F±Ã¢†•ÜÚ•M!3{S.®ƒXf&¥†¢ÕÅ P¦çJbWXç=< ‰Q´"=}EUaD ØÎpl›#"ú¡ÙèŠrƒŠ§!1jâ©¢ÌRF½ J"¬<×ÞOضÍúæ8¯´„õ= +Þ$‘XAØQÏuñR¹w€¥×@wZÙìàì?l?›žœ}4¹ÉŸd>¿NüйÕô­±6b瀒€‘W#«Ÿ~ᥠ¢o7X¿àƒOXjô¸0Ê#Tݾ9UðfÑè¡wЇ¼ëKÄ“± +C·èf’l¾M®Jÿev9Ø>öP¢xžY41+”8y’‘ÞÃl(Jƒ&l£·ç‡Rß¡œ”]‰SPŠ¥r 4¸À‡ÀÐFäßA‘b+ˆ§%jõ>|÷x÷þñîB_ħ9Ò"t}ÑkBÓ ®&eÈàBÊñåcm¾bGôÞú&^›„3[ockS¥’¨kâï0•¸z­žw8JšòÞˆÖ2ÛœEK— ;Xر +†þWÅoöŽ<NDÉ%’Y‚¼ø‚ì\"vF#UÒupµ"ŒL ¦nÓ‘ Sφný ¶Ã¾´¦ç<Ë'Ý;Ä5q°|I|ÞwómŽM¿ÂB¡tdnùo`5ÃEžÕœ«9/F‚£…ôX2eÀ ·åÈmž·U_=vy•‘a2Ë0t®ÀËÀpž:ÔÙ»<Æ]ð ú€y‘–eŒw¢AºsøÖpº n£ ¨YØi56¿îr¬³˜8Ù ›™¥ŠWã3Ì•8ÐDH•è˜0Ÿ0¡e9)‘¿6:vÃ|cQº/ëü¿ÐœDÿ¹CýÛ@1$9 ԅǧâpÄÀ¿Ét"'–-M dçF±ÅžæNE!2'DŒ9•MgŠ$¹þDQÌh£ ¸ÔÑ‚O®  ” ^‡ù ªV…o3WCÎe¿7áéŸúŠr hÔȹ—4¿ú¸ÀO.ýyšMÁ‘šÝðˆŒ`zInÄWCn”¬û¯RHë}aÍO˜Qû³5øæ-Öû·»vöü'¯ŠŸp²ëäבi'Zà¾ku÷ÎÇFC:yé··$ý~¯×¡ÜŽ!$Ó» dx„ié29Î_X‡ßàÎ%3ýíKCKæ¹è¾4Î9ulÑÊí’}¶0:;¨|ÜÃ+ "nïu{(k|¼0œN¥p6œÛ’šwòå²þl¼óÛÜQq¢¸Õý©­A¼ó§Òßؘk• +endstream endobj 1131 0 obj <> endobj 1132 0 obj <>/Border[0 0 0]/Rect[417 120.24 483.66 133.74]/Subtype/Link/Type/Annot>> endobj 1133 0 obj <>/Border[0 0 0]/Rect[247.5 537.24 348.66 550.74]/Subtype/Link/Type/Annot>> endobj 1134 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1135 0 obj <>stream +hÞÌX[oãÆ}ׯ˜G2YÎÎ 9¼ èÃÖÖ6nÓ4°…´Àª(hi$³•(‡¤v×ùÍŸè¿ìùf†7Ù›l‘¨ ˆ/ß|×sÎX²ýâõïî$Û·‹4f™ÈY’§,¬1‹Ýâ·«Åë·’I¶Ú-¤b8È<ã±bY,¸Plu\Xá")b¶ÚàDÈ„­>,Þ×Ë·Lóœ]½¾úòKö]ÊœÇÁiß”ÇcUïÙMÝ™fWnLø×Õï±RìVÒëð+ëòê oëêë%î^ýáo·Ë»uËÏžhL‡'ÎMÍÄW?zìèQ*w(•Ó€ê"ç…R ý€*; Áuõ¾Ú8®ʦÜB(¶„F¸#CéÌìÑwmaW†MÍ…ñ"°FYc”‚Ç™v­M{C΄C/öÁaZJ˜Ö²’Îù‡¢ÔŒ†ôX¡ë›ïo®—·W_¿¹Å+¦¯Äš*WÙ¶+;s4uÇ…â^öë`•{W|ÎJ©{6°F¢¸à9<¼@ó>2ñð4¬ÏªÕýá\5fËÊzË6eÍî ;·ø}ªOøòt¡$OžåŒ*¿¬ª}wÕÁ„’À“³·!hK§ ”µOuW~Ä“;šŸþ2PZáxć²«µå=*äJ¹¥çA©!9ï‚ÂIž¦z’É_N¢+»‘!Y¯Xk ûç¬ñlßýÔã€JÓT P· §ú¡(FN{=NrxÉt"=µSd©k¤³š#q®Æ=Ø%EßÐÊú|³|ûšrÿMYïÏåÞ½©t臬QO2wk|!Œ-„©Ÿkƒ¡û]¹µë.£\Ó6›Ï;M)u—4`È™ +M‹Õ´X{Q.L¼|Ö÷bV¨Yž Uµcíy³1m»;¸{±G©˜àÄæÜž‘˜HOsŸr1]‡¨¶Ä¶ÂŸ©DàŠf¡©W#.v«•òUæ‘­ÿóG£I—ŒP2‹8j¬Å\éyo»åîì$ÎgNO¤Æ²ÄÓÓ@Mï‚ +¨±5àƒYšÖ£dƒ9]mNuÛ± ^Àc_ô©HG°SEßÔÚ¡ô»`K’+€q;×X€Že3OcÆIÃM{sΫ>­V¬’Oü*oÀ1O‚ý™ò×Î=“}¢1xQØ1KT/FÒRtïͦÚUhë¥-’Ž¶,âv'fB̬ >BsÈàlìç$•%—ðK'¹³þPB#Àg³yp˜ûÄ><˜Ú"r]T&ÖƒbòÌL=Úv,§ÆÆ2›"¯˜Ø­ºkNGvB< Û–]y_¶&’p5Æè#<†yp%ÈÇG‘­_b”!&ép¢Ô ·§ó}¨(²ƒC©‚gb$ Ö?œO#cI#H„ò0"¼ %í¸#™žYrÚ\Ðå°­r6ov¶`¾ô.(ÃGE9+›¾H ZeLïˆQÒMëÀ¨‡a%ACcöçCéòMÞ¾ÀD«žÍŒpB­púŠÂX} +eA{½0JðóŒdÓƒç„kGÍÕ£Q‚N&”ðb7Ý—2ˆÜµ‡²}`ë`½^‡P=o£]†.¶]g“ÖAˆŠ¨ÿ}_d)'1]l,Ò dˆ’ K ÞÙÑB4ù4ÒÍ,Ú­¢]¬e HÝj¡Ý­%KbÆ“bÚ¶>w•hsïg¦p3¯ ÌÌÖªcå\ügô.¶–`rí8釯˩[4bûi‘ZNeî™2w°Ó3ië4«rûpDa7%n_îRŽÝŠþÊ€…ÓnäÖ¶$°˜¾”÷ áÊÔ=”„ú;bòîR±‚¡äËyù—ÕòÛ»›?}{7K‚¶hù9¤æU­žOé^Uâ×Ë¥QŒz}}!4²ÿŠ·Êy;Uˆ$§O?åaÓ®( 9A†¾ÖJgÖÍE÷(§¨Â$ÍÇv옽òέòVt‰Ï•w¬ìe²šóx*º¢QÀØ ƒ$gz¼{!›"׿*Ÿ#QÕ÷‚{¥ŸÈ4v‚Heÿ¥”¦$ Ñ½dè¹ÀNò˜îKÑ•N&õR«zµMðÙ“ÃsÑ=‰ä¶ëM$@ëYsz±àþi6èñ_”ÚéaÃÒopPFò¿nÀ¥ +endstream endobj 1136 0 obj <> endobj 1137 0 obj <> endobj 1138 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1139 0 obj <>stream +hÞÌWÛnÛF|×Wìã²)7Ü —ÜÇÄQ‚¨ØB/púÀP+Y…E$U;ßÑþDÿ²³»¼ˆ²ì&M $ZÏeÎÌì'ëÙó7—œ¬›™–$Kr¢rMdBj;[Í^.fÏ_sÂÉb5ã‚$øÃÏ3&ÉdÂAÛY‚(,QF’E‰‹„+²¸›]ÑWó×$e99{~öìy_GÚ%¹¶µÜ“ôÛH8¡4Ö’ß{H¯ÌÁt`E$38 +Rœù 5Hˆæ5Lr8(߈Îï}nà.Mÿ¬KÓœé') üú<ÉH£?º`ý}K9u>I fĤät8)CÉçÄm±¶ÄñË%ˆ%wÕ¹á°Y‰¶s›nøŽˆ0œ@·¶íø{»©¢Áü±äŒËQ}kÉDLyÌLÉfEš}YÚ¦YíoXx°ßA0Á<4ï¯``©6,sÝw-w¯³ñ;‚¡ÞsÐGÕP²ÁyÊœªi;]@&™7“øªÍC™A«ms±L\à‹|cVwª;|Fט`C©!±dbk6&»üTµÅýÄ،ӃßgÜ…_i$ \ꌠô²sizdÞh8öX½9ŠÄmD¯ðD ´¤Ä#×EýM‡îÏ!„éÛKÃ)yE«k ÝÚ)x0Â$Wt¢¢)#G¥p†Ã,Î_0{§ÄtÖ{Z3­&]Œ…Ñ ’­L~èPñô7%= nm¹Yml €D +mÜ{ÍtžA|`î>gôÓ#ó8»¥2Lç=½å½‡CÏY»@6çOqY +qP߃ŽÕ²#ð!Iæõ@Ï/çoÞžƒ¾œœ_<׃PÔÓ¼5®¤¶ŸOV¡AVåäñ]–‚Ž8‡¶h¹ Ô{hêÀƯŠ=Câ8=Ãá#:Ø‹›í®~}nÜ®ÂÇÝ^è!Òº#‘ÿE“ƒ«øEÓâÈIïá$Î.æ/ï.Ž!Žv—%Ó÷ŽÅ‰ýÍ-(_žFi²ã4dƒ³þ¶…Š¿Ï•X±>Z·@.q>Ý|ÂKÙÕsƒk^nËEÖ3ÕÇÆŒ,i‚)õmöÄô8_1õu6ËÁ3ù8m{Ξ¹utWÿ»>ë–'Mؽíê󓶋-¿GÚ.–“¿”Ì°C +endstream endobj 1140 0 obj <> endobj 1141 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1142 0 obj <>stream +hÞäWÝnÛ6¾÷Sð’Z+†ÿ"/Ó&2`máÝ€dªM;l¹ä4Ùí-wHʲdçgi7`À@b,éü~ßwH†–““/Z6-PF ’F#AQí&‹É›|ròŽ!†òÅ„qDánÌdDp” J(GùzBÁ +¡Ò +”Ï`A™Dù×É>;‡1èíÉÛW¯ÐÇ:a†¼YÖÅz]VKtQµ®^3—ü–ÿžDô¤ˆ@)#L+”ŸMR0èÝÌâJìMÿR')ËÇ%˜AÓͶ-+×[çùDI ùh¢4"\Xk‘†R3Óœdz÷R&\ŽžCE|ADx÷õ°¡ +ÁCivÉûȘê²*†øs‘I¾Gœ²$U°Ì’”3Ã8ÄÌW§>™bðÇz›og-J4Éð§$vÿ›¯ý;Vÿï….MŒïíº@õ¾Óçéj…¦åò¦…f +Ü ©kP@Âðm”ØÍÉÿ‚3¬·OP^Ô™Ð9íã§1öS`¯ /·kWµMÇX þøŽ¯^ð¬vE»©ßk—ä¿ïù͈…7±’÷—»Ru€½üâfå¢t *PÓF¢K\i4å€t=”‹.«­CíMц<·€‰tg˜uzænáÕÞt¨ lo%•`ì$ÌÓ„tÉíª$ˆ5±PaµR–m<¹Ö!èlP(pôõ[–‰ÂÔÄ⻈ÇñY7†Û¹uAiÕu!D¿“”h:žñrçËÒYQÑ +„¦º¼i >;ÍÏGµçDî‹ÓÛUÇPé¢u¾¿¡ ¨é›ª¶õ– ™˜Ð#¥Áuí¿nî°ƒÚ2v>#ZzBÕNÍy'•¨¨æh¾}4à¤0ÊÁë8K }I–@9ø=fZ DzñLé`dŸ{Ù Í—¶ÜTÅ*6+*ô9$Â$vŸ7±lÛÆÍѦZÝÃeæPYÁg(ÔÅmIÆÂ>ÿ5?yñáýå(x=¨”ì+¥:Dâ7FS˜ÅÐÄT¾š{TâËûª-îB²:Î2¿ðã @ ó.BšÏW¸„zÌ]¢quåîÚ3ˆà_'ϲD*`‰Üq„Eƒ==<å"AdÚ­nリÿK$ðÖšŒ%ÓóO¾£6H2„¹è‘6"ÂtXZØ“ðoqÒsÉÒqIÿ½%RÓèªà¿ÙvËHêÃ:ØXeË.­Çð qÚC? b4žé;—Oã˜QbŒú> ÀàÏyênK´kÇ7¡,Ô‡S¿³ñðßDWº×jõnÀ«Ø°+|ëêöd°§;WvÐ%ü:ôFŒ6ÙÐQæ‹=òg<K‡å‘ˆ; ÑÎò æ|/ãAÅCLì5ò7þȼgª­ëëxÖû1CYÁHf~7ËDÀ±~ª#a¨&˜óFjV ‹Ø`T%€+‰· \ÖŸá°· O°¥¬ù=ÅóSŸÃia¯gâ¡™ï·QÔ”Ÿú¶í±°ÊðÝŠÆ`‹o»ÅøÄ“™n6Ÿ70ƒ›v³.ÿH`Á‰`“Öóµ›P;*Z”«0F öʼr8«1õÐdÉt´_ÇóÓ#Ó/6b½©Ã^«ŠFÓÎêÿ@SôþAMY5%ÚzLQ®ðlS5-šÁ77EýÓËÏ nÈÞúnWîˆìZ±c}ñP7æA}ù6ÿMëý×eåoË£ÊTv,9pùK€ñœÆ$ +endstream endobj 1143 0 obj <> endobj 1144 0 obj <>/Border[0 0 0]/Rect[63 139.26 92.28 152.76]/Subtype/Link/Type/Annot>> endobj 1145 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1146 0 obj <>stream +hÞÌWÛr㶾×S {6+˜Ï³Ó ¯,7iÝ&c1ÉEÕÉÐ2$³+‘’ª­éä)Ú—È[æû¢¤l›fÓ™Êc‘"ÿðý§’m&W¿_H¶i'qÀ?ea³Àgž¬'ïóÉÕ­d’åë‰TÌÇ.2MD XøÂW,ßM|H~˜,_áÆ—!Ë_&á7ó[‰”Í®fŸ}ƾj<™Š€×›¦ØíÊjþ¨:ݬ‹•öþšÿš«)›J!ãˆå7“)’š•½ Ž¢¿m¼©L„â%Ä°ûzß••n¬y>‰•Hbx‹(fBY–1¦¾Zߌ»æ%<*°Æ¶KöRvO¬ƒ%ÝáY3çLÔ;#¨‘&ø£^¿—ÙÇËO¢‰Öžs?镉Ù(XþT¶ŒvLô±Ð^&ƒµi_,™5Ðûèrp½Ïú^WÛƒ › +w +Èø}[l°`ÍÚzç¼ÀdHÆp¨¾'ºþ¼ÞW«®¬ÍFo‹N?²®fFkj´*ÞiD ð”‹Sl™Øκ¡`#˜6›T8ª²ê˜~õâ^àì=[$gB‚çÅÊÀù Â[ÛM„$¢¾îÓ ¹¡þa?ØÀ†Ä”_£ܘ®¸ÇÍÒcÿ0ròߺ°Âíltû®ŸJ„>ìä_]‘üÙ“^}`åú˜%ž¶žÏÙªn½êFsçÄ>ìÁÊ%7›~ó;vL<&'/ s.=£?të%“}-«j‚Œ¦Ü[†¢Œyþ€˜õ‚PþJ&®Ë¾4eG­&æb¹¬Þ,½wý2‘ÒFwû¦brXb^~Oi:ظh©õeÑM÷^oP:&¢°·+6c%vÓìó9áøÇïîç‹%‡ˆ‹'bÄnÖè‚ÄÖ Ï®oæžÍ5á7…ÁnÉ-‹ƒÉ©âÆ~™çóû7oÙ›õ¾i°/>MËÂL ¢gŒ9`r€–¢i6¤„ +¶€±y(ýQ~T×Oäìôm1¿¾#­«zß–£ç5Õ·×w÷_/>9>óê±×ºä _"Œ¢Töß}6úÜÜ3COÙy7f-¿-·Ûöt,G˜LŽ.H¸ÙÛO’…‡I¥,ÇX"Š~6O0²‡iâÚ#¿ýâînqbÀ¸kLÖp(È¡¢™ÝçÄã( ~¾x7é­Gò\<5 ú™ö%`4ÑÈ¢x@!qü¦®Š-Ê#qÅ´r  +It~Žé§œJ-‚h×v®ÕÕ +]¯r¸­Ë­ö$ @Ání$¬=|5n¶…§³íbÔ·ÈÞâòÀ/p"~‚"@JáºÃ—‚lgÅh:ýOD œÂ~!¨–çŒ@ Ô=“”#v÷D¸d| >á™7aŸÓ»ùíuWT›=±Ž{½&öƒ²à«ÑÕùy–øZz¡08(ŸØï‘>OÇ›•yšq²‡B%ÑYLÇr®ŒÒ}ç™ÊÝS’µ^R!Orÿà E(cLSþkü|òœ.ùÙ¥¹ÃD½ìB “ÙXuØ«v•JúN¡”ÊÔ1£F„µz¼”Ÿy"_ž™‡¶fé¶0ǯµix«Œ°Ê«n47?87xœ8†«U¨÷ݽàL‡„Ñ”‚8Æ(o±àMeŠŽg‡+q²Çm³ÅÝâ<’8Jƒú¦ó`å §Ó'Ä4¸Œ„Žˆ?Þ\8q¼v¿Zé¶]ï·&Qœ? +0|[õ +endstream endobj 1147 0 obj <> endobj 1148 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1149 0 obj <>stream +hÞÌVËnã6Ýë+î’ê@ _¢Èe:IŠ)Òb-É,46í¨°åV’;ãOê_ö’”lˆçÑ¢@a@¢%ò>Ï9"‡erõÃ#‡e—h 3 ŒÉ uÉ"ù¾L®î8p( Àð‡7n +*’Q& \' £P¦¬„r†Æ”“'rs{95ðúêõ«Wð¶M¹¡’l–mµ^×ÍÞ4½kÕÌ¥ïË1“Œ™r*!ã”ëÊ›$À>Í,Žä!ô¯mšñ‚ +RcxØlûºq]ˆu[&¹²Ø¦¹*¤µ¨2Œ©Ø™´Ðã{l™ +5yˆx@dx‰ïñ° øR™±y_χîeKü©J¥¢9Ù`<Íri&¸ákæ)Ç«ŠÏ…oD†ò¶ÝÄgóí¬‡TÓ‚ü’†7.>o»:Í°^²i<¸¡]æñB0_‹ja<ÖòWšSi^/bäÃýäï¥ûWNûo¢þ§…]š¿lئOôð/s^¯VðP/_zÜLI:xpC HI9ù3(JâætäÿÀàBkÔí¹¤%µ&ª:Œpº.-FZ³XöÜ->>ö•W›ÁTý]½ZuSÉÌÁÇPº«Fí +ãÅX² ŠôTi¦pCÀ<”^žHæ—‡JÈÝ›ûûÇ´üíWÆ9S&̆®¯z·vMO!.ÚFõ`ðLR‘¦8¤yÜ5}õ).ʱÔê(|?ÀsƒV¦}>ahñ‰ÔMs—jñŠ@=“HÊ/Sæ}ã& ³c“ª˜Õ#}òHŸ'2ÛlT<éO¹=‚ˆ<§“.'[’K3xu¶'æ¹FG–ˆýrëQ·t¨=EP>8Jð¶PI?ÁŸSksß•â(GÚ3áüÝÍêEí:è_4ÛõtëÍÂÇጪã‚q÷<„s¦>‡º «'›b¨0ûÅ_¤Ç é1Åí\*Gß4ÃfÇöbF¯ŒÛf1Áå|…Ò<üJŠð)#¸¾;ïM¡#ÿÕW}¶¿¬ð¡ûÿ)ù¥Fò«Ëä!yöœŒ¤º ®æ\ƒy`}ˆû* }m—rŽˆvwÙv$ãG0óñk='œŒ?) ãœyE#8ûþúÝíÃE°O6ñØkÊÓ½ô€ç‡µüs9DÔyvJZ¨;4ô?¶u‹êð!,5ö(ɾÿá°H%Š•„Ã'-¸jö4U3‡YÕÀÛÎóàdž³:H;z@z8† gœõ¦uHÞÊGm +¯°iâß™ƒÚ›ûþÅ)ð–b™ßFr½WñXŽ‡, ¾§ùד[ åenGVî\{É×½a7]3œþRµßÁÔV=„=3ùUå-~ç¿çšü\­Ý)<è2?w{üÎÿ-ÀñwžU +endstream endobj 1150 0 obj <> endobj 1151 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1152 0 obj <>stream +hÞÌXÛnÛF}×WÌ#· 7{!wÉG×±nbØBŠ . +F¢d6éR’m}Rÿ²³^e;Nƒ…’âeöÌÌ™3³æ°œ¼ywÅa¹™( š%% +$ƒ:Ÿ,&?O'oN9p˜.&\Ã?<ñDS)@KF™€ézÂÐ +eQ*a:à Æ#˜ÞO>oON!¦ ¿9~õ +.jÂ*ƒjYgëuQ.á¬Üæõ"›åä÷é/¸’t+ÅTBÈ)W1LßNB4h–™¹+Ù™þ­&!×TšËj·-Ê|cmL'JP­Ð#EcTÈ4MF c‘óͺk¢ÇTDƒ‡ó‚´Ñá6© B +ø0Jß 0{çeìþšÑ8؃`œ„1^j +žp9áxŒÜ}iüˆtB“ࢮܽùn¶¢¨>û$w÷ëMABÄT¥‰­õ–™p ¡´‰—Á’z,Œ;,“˜ª@Œkg¹;~>u~ákÿÕÿñk6 RÑÄä€ù,05*‡\óhµ‚Ëby³ÅdÊ`—ù&Ç +’òàŽ¬É ŸÓ†þžÁZX+,Ûg*_TZõª9lñ3‡ý‹WÒ(XîÖy¹Ýø‚UÎòO4åjt@·Õê=_eû¼~Ÿ­s@3ôæê6Ÿ‹"ßÀö&ûÐ÷7Åì¶Ìê<Ûæöá¢X­¨_¯.iš8ìöÊÀg)UÊÀ÷˶Èçùâþmœg„§4 ö„sªúÃÅñPwñˆ [ÚMe;ƒVv#:ÈJð6bg+•€5Â%âI`Ö›þÙ[Žê4îØÒŠ§ölùJ3@‰0x÷÷…Õ³žÃ‚`Òñ’˜5d# ŠFÚfÝò§gççWp~ôéärCQÕáu(¼Óøl¶˜“ò×>9›9c3ŒxϤͺWÀ‚«[˜h"ñ|ceÙóù9ln²[Œ§u$4%·€Ø›µ7_çíŠ:Œ+̪ºÎgÛ¢òù@lRôÜíljgÅÎdÑ(1ʩĶ£u¶ù +˼Īâ¢D{t\´œÈžåŽj=¦!1Ö]ª-åS¼&yGð°Ù—fÙj•Ïñ +S,ðnU›"(šÀˆ„¦‘‹ŒúÖ {í!áØjsScÃ?€Â•oJÞKo3ïS_Ýÿ³’|ŽÀJ‡Ïg^Êx„îSëCU®öx˜å-L6µì‚ÒE²µò}dLû…öXë¡íP&T$Rh¸ÔÇ"UCÜ_ˆ7ÁE6¹”aM#ÁÖ2¹(Ý/ wdÃmnÂP®BgÔÐ,zà°\íËmö0ÀB¥Ü¤a.ì°Á £¾ o,°r 󜨠6¬†ëàš|S0£ˆw‚É=œ$¦ð‚àQPÜ?¦“‘énë^Ã0O<Á‡2km¥6&¡GåËTX—.Ò¨§_ÏŽùÂØ«>1T¢S0:®ð +2÷ ÁÐ4‡2ú4q¼Œ–‰aÄ€"ÖÊ+ó|Ô–­›µ«y¼gŠÇT±Fýý—$&VFÏséÂæê:p“ 5…`fLf†^ôѼíñ#f”¥ªQ“ØQásPîÖà¸`êÍ©£RÛªbˆ[r`‚×.„(vBëþºHÑj÷e•ÿ„8a8ƒ`õq)[ÊVCÉ¡’iñÄr +¹æÚο^nÿôr–B¦0í M`8;zî—ÓwŽ^–ÿ6ì®ÚFGšZ#Ñr'iº‡tüT,Úùâ”8¥2yDðE3ÚV‹¦¼oqÃÍv㎄ˆº˜7Ci‹94ÖgyOš8ìù¸ù¨”|˜Zà{'4+ÜSš`ÁªšÙ.n〠+Íâ±0ò×ôãëàöÞ‘k‚J…SuŒJeö]Öò]‘Qø¦¶r,~Õ?FQau£°IP­7cÀ~Y•Ï-Ç™$M^2“Ž„ QŇ:vñáüÓ»ïqŽ¨xÉ(Há¤À`XåîÓÝ 'lH­çVマ>ÒFÛÔG+ÓÔÇž\žO†Q‹Æ^Ø`¾ÃÍ´>fìðî˜Õ4‰{tz (ÄV&ú*ßÃu8jË1,s%5ª|”DMERzI<›VÈÔA+6?Û‚ÜØŒÃâ BÚ¡P§Î†íT»ÍAŸr]=5µ’u3®ê&8ú‰tän)ÌŠòpBTT¦½Yl´—å> endobj 1154 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1155 0 obj <>stream +hÞÌXÛnÛF}×Wìã²17Ü;ùè:vÂm GH8EÁH+‰…D:[ŸÔ¿ìÌ.I‘’œÆ Z†IŠäÎmÏ™3'óÑË×ï8™oFF›¤D¥†È„¬Ýh6úqqÑoãŸÀ“ ž4“$æŒMƯF1D7“p%÷¦]G1·LÐÌÛj[¥Ûx[—ã‘Väc˜6„ ™ea*M23‚YÓ>‡”™PƒçP,ˆô!ã®™¯BFà¡JÛä12®›ì¥!þœGR1MwD$<Š5\Ú(<åb懣 +÷&¢lÊRz³®Â½évR“È0KßGþ‰ ÷×›"Š!^Z•X\Ÿn‚õÂX,Æ’5±$<Äòg¤™¡"RpL¸%$XÞŸ>>uþÆ×þ«ÿã×ü.HÃR܃¤Ù…Äðá;}ž/—䶘/jØLI7äÖmP@JÆé—H)©›²ÿ ‚­ð6ÀÛ¯P^4Öôèì¹f1þc§ïve?’hü,×ayÆ2Ø€hB&š€Õ@(X}G§nöpUD†.—7Õr7¯Ê4”‹%à› “^hQÖ<¦ïÃT‡‚ÞÑr»ú8@ï«%žv›¦è¶¤ÆênB ôÌ›ŽS&¬å}·bµý´t?@Œ¤±ÔøW,åRvþ÷O—ƒ2p&+žpg‰þ.w»§Ý%þ…QxáÔ®êÔoiÜÁñŽžC–LÑùvåÊz3 :‰h;/¶ô Š …öŽdI–ùÔ”èuÚ6`sï&ŬpR/3Ÿ±`#c2 )øUmëMë$ՌܰM1…¦Î±“²a¬1‡ZÀF÷#Ö{ÈoS¿hC 1ÓáEŠÞ¤ +¥™ò½&ÉF“lÖhÒ>ÙœlÜç­+'.dÀ† +TdîJÈß›óÚ…ÍIÔ™îÕ‚7fA&‚Ù¼+ÅÜU+Wåëœî¢ ˆG/‚¥„ñ¬gHuñ5†\gÈMçå*%2tÁaS‡pb‘2›ú\¹íª…öš$?•Dóˆ§ÝÃÝõë-3fß;Ùnsy$ùc»©A¿ÎüªÝàNµöV Õ¯I7X4ðÈk(±ÒñÔÍ#HÛÒµs$/çK‡†l”–’ei …¿BíV# ­*0# &´«åòÖMê!Úû´R\µ´â­ì‡ØüP’âH‚06&p®u„ÁãíåÅxà ºÞ‰Ü1Hx›ljÀ2—‘Ë*¸F7} §,SÇ^nÞ^xýö—#Åöm+à>îæàà‘e˜[ì³ãïDÐ6›×%@Š hÒçm±vSò¹€¿ëó(3Ðœ>\Þ¶€T€DݱOx[´WŠ1°«9Y…±Êìiq µ§‚ -,í³Í¶-,„–—S2ÉKtÙn`ŪZ;À;ÜÁµÀ;5øÑ|[a¨§´Šà°&.Ÿ,È  IŠ²©ÛYÑ‚è²½£õõÑÀ‘ß/ ½zs}ýnPy¸q£lCt'VÞn,™ÐínpøúÜ qv1sS"¹çãw§„›”ôÌk¶d–ƒ¡<dý=íží©IåÙžÿ•§ÝßyúÚ" ß&YõìaĶ³HÛIÕèûÙÁÿã΋'&“zí)r4›Lªj=-Ð +ˆÐ'X’ùeeŽ­dW!¦},6\ƒ,¦½äű޼/ò§å† ¤ÊÞï´Ý˜¾ì@!Ÿž´·Qqè¤ ñÉû7ç× Å§øoUvØÁ›¾;ðe|íÿ±·.3kNéEu_U™/ÉÉÛ(€\냟x§C|ßñK1بÂUÅpœ86ÌU9|½ÀoÌË>§yöpGoüØ7È5Ý«M£aœ™áõ%&üŠcŒ1ç3Ò~£ûK€Ö@ +endstream endobj 1156 0 obj <> endobj 1157 0 obj <>/Border[0 0 0]/Rect[213.12 290.22 269.04 303.72]/Subtype/Link/Type/Annot>> endobj 1158 0 obj <> endobj 1159 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1160 0 obj <>stream +hÞÌX]sÛ¸}ׯÀ#¸‰ @ò1ëÄ·n7ãhÒ§ EÉl$Ê%©uó;ºbÿåž I9NÚmgvŒ’>vrLš.xm¼‡É ÿ0Ê`i°Œƒ¥’‰TpYÿ#ÿ¾¡8¢8 Wü{ëcÞ²ÀŠ˜Ü'…¿nÊ` ù¡¢ÜºhCJ—R6¦|‘/içK(½/¿FX®‚ÿC3æ-Ÿž³—_{~ç¶ÿÕ?ð6WmEB5»*„vF‡ßyçëÝŽÝ–ÛûÅÔ¼a·ES€Z É8É‹µèáß!8VÁ´}†ÑØhc;b³£ZLþ‡ä;ÿ¥j³«à´ñ§S‘ZOZc…ŽÈƒO8|Ç˪eë"°|óxYîvÊì#÷Ù!.&܆D¤7Ø›ª¦e96ßgõ¬ë¯Ï•JûäŸÜ;þ3±gÍè±ï…¤sô³pÌ i?ÿøžÌÙÜûÐ;ë¯!YZD|{ÜUÛL=ëT/RƒúÁ!8GÜ5 I‘¦†bÔ hzP´Øexu_° +ÙaÃZ¬aç%{¼/s²$¥Ð]ì'9¤Eê‘uÏöd%áÇÿÄO{¨‹ +KÒÈñÙ}A-6ɵO.Ž¸N|ê‡Ke嘒FžT3HjL¹ñi–~åädÚÉów)³N#ؾ¥Ì¨ÆGRHWÏ׎¬Ž©Ú¨¡Itò%øÕEötU—ë¯sU+5âjØ)ª£*)àUî͸Á.ååÚUÏy”ˆÈ˜¯ŠÅS°GMaŠ‘tMË «Ìɯ.ÞÞÜ\Ý^¿™Q,šßçDÆ ö‰_„³‚MJ@Ýê| á×é.˜%Ÿ"ïÑ=Àˆ=6®`R7æ\·†P;ŒªD©ºÔmÊ]'d‚]ZŽäË3H kÒÏÀª›NÜÐ|bpš&XLÁ +Ï=žxdŽúÙ'Ôyh7sjiŸ}%°ßN¬NÇÎ%½sÉ,³/YSzc‚RÀU)d‡# ŒÂºäõ“Ô Ýʦ°7êÒ;bHèeœuíÔûy1…C]¢ô¤w½öåâ&«¶Çl[`Þë²X¸,Õü{“ŒDÁÍ…ŒAo +±ë›ýõfÈ>•²ŒÒ•±h‚lé«0ÇöêöõÅŸßOòpŒ²?@ÎÓ}’þvNLÒé\Üÿ“RÚ ç½ÐJ1%LšF¥M é @3æ»ðm°x¤þ£Q³Ö!?t܉ú$÷Úߺº®±?ÔEyKv­ƒ|Œ9r(¼ú6âQÉè»ÏdÚ¤æ©ñÐ<‰ôw×–´GAÓÑ#’fØ¡¯ÉçøÖÀ7†WehfóøÆ€¢ä¯+Ò^©yFòPòÏôJòá[ù`È] +){æÒ(„¦—zXÿÒ0lðƨÛ=c ÔIf<¡ +¨Ì±MEʳS[|NŸ¹ÒM&ºh¾ä†WDÖfVßD¤òŒBᤦÂ>ÕBÕiɆ5Ç> endobj 1162 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1163 0 obj <>stream +hÞÌWÛnÛF}×WLó´›Xôîòž ‰í¤l5MaMS2k‰2HªŠ[äƒú—=³KR’í-Úµ’ZÎÎåÌå,5ÍG‡oÏ4Í›QäS¬ +’ˆ|Eu1š^OF‡o4išÌFÚÂ?n:‰=ßPì+Oš,G +Z<¤>Mr<(Ðd3:Ç'o(ô::T9a¬8éã¡äÏÅ+Ìzß Ä|½,ª¶ÙÏ#¦•é§û@6fŽ×šé˜@{irœ¨`h*ßæM‘—³²h¨½*¨Z//À«å«ÅšuaØF*ÜƹV\V ­j°Õ!üÜ4TVVÃ\j…G-‘(»†œkÌЇp}°r™<…¶[TOfº#³ý(ãÀˆ–9r±Ê³¶´>h(êŠíaR# ò!ŠÄFÁdS^ÒT´WYKe#@‚u¥ŒÞõÃIOJèšo|VƉ²äí‹õ²ÚâgÄƉL¥dsw!3xç0‹{ÈöC>˜õ,è=‹È;ºÿ†š›,/+›tJß&}©Ø…5§‹¢ÝH Ná|/†ü313rçŒÜº*QÁ6Ì{µ€Þ)†mdË nÕtÇÐùPÙ÷»,ë"oËmf»šNú¬©¾\`-7žÈri”¸nh&}¸3Q»è«‹l´­ùÈı"R[[8™-`º»kÀ`ËéŽÛ„¸1ûpQŠŽ:8°‰[çtV×2ÁÏ~Ũp÷ a7ÕÇІá݃žïæÇ{1çe—źxN•[ZUEÄŒ)/Ft,³°…£5®hœçÔ³G?²0Ù7µì—IµE¬¥,WbýY©°„EÌXtò)[Þ,ŠýdîApnêB¿ËÌĺì3ö„§Ó~o¸Ñ iÐŒâƒèØ5W½·çg”g.aа; ü¡ŒŒ³·X\  t +8®mÂq8¦MÙ^YðÚÛ›‚ö'?J@íT·f±CÚG×lÚG@;Lû:DŠ=!˜ À—ÃøîaΤSs6õãŠeˆëYnmt~|éô@îhøƒšòœ“ŽYM›ÑšŸñFûÝê™<ív‹ng]4/úsuGŸƒþÃCÖtUä×TζX–Xm¤‘5·ìι|Ï?ì$¦1oúê%m1ÆòæûîuÝÔðs6O&ÖjCÕ +Ë-ÝÏ–¡Ññ±•µE¯|gt7iS—L3õ¦ÓêÉT¾èÅT'±5]íº®H"öågNùà% cÑ—ûþÀÝX~r@ê€0 (RjÇ–Û{ôõ CûÝÇÓ“³©€¦{ðì„zñ¹›[}|ôøaìõ_e\Žöªe—êúï5漎…¹ËB‘Ë1®ng„YÇ‹…äo/æeÜ[É×2Ç(µLvç…pç¼ÐÖ¬U”A¼å~×]?=æ\¼Ï +»g„Œ®VŽØ1è0î|ñ 7籆ƒ:Ü$¶_ +0ð€µÈ +endstream endobj 1164 0 obj <> endobj 1165 0 obj <>/Border[0 0 0]/Rect[145.02 610.26 184.32 623.76]/Subtype/Link/Type/Annot>> endobj 1166 0 obj <> endobj 1167 0 obj <> endobj 1168 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1169 0 obj <>stream +hÞÌXÝŽÛD¾ÏSÌ¥ Ítþíáè¶]íj¹ð&“lP¯l‡í>¼oÉ93ãŸÉféV Uu¼‰s~¿ï;gÂÉföòÍ5'›vf$)XITiˆd¤q³õì«ÅìåkN8Y¬g\ÿà…—•‚’Q&Èb?c`…2e%Y,á†qE÷³wÙ«‹×DÓ’|ýòëÏ?'—MÎK*³zÓTûýö°!ß:׬«¥Ë]| ždð¤©$sN¹Ñdñj6ƒèfîähúç&Ÿó‚Šl fÈU}ì¶×z[‹™´0‘¡Ú*¤µ–PU2¦Bn>]ÿ!dL…J>„‚àÒ å°¾–À‡ªìsÇÀ¸ŽÉK"ü¾Ê¥¢:{ ‚ñ|®á¶Èç‚—\@È<çpUÃû¼PEIË첩Ã{«ã²#¹¡EöSî?qáý¦Ýæsˆ7«X[Ÿ-Ãr a +¬Æbc,Œ‡XþÊ55™È\/ –Çד?Ÿz}æcÿÕÿñc¾ ÒÐ{Àb˜9¡Ã¿ôùånG®¶›Ûš)³–\¹Ö¤¤<û=ÀÉÌ­hÿˆàBx ícF—Ñ%¢Ù"3ÇàYü 0· 6«wmJÕQЄsûÀUY+{N,nyÓ ÒDº’ûÀb,&AbG:úÔÚPU6•½¹zûãåu¾øm FRóÎUï\˜Xþ¶«:·w‡Ž $õRPŸKü6ÿˆ#mõÄU¯NRËSWdÛ’ú®ÛÖ‡jGªÃ*x K±<'*×ë'‹€YVrãȱu+RvpY:²=Ä2­·;—s à Á,]˜”@ˆhO‰`ïu.PIê i]þøfÃÝ:]÷¡BAs V‘ísx¯ê¼›’êI©B­|Ѽ› r%Õ ´—tPeßO_¼XhR?¯C•3ob +¸/Z1xïeWxˆeCá_Öõ`Ã/#%”Æ\ EI¤…1.¬Õ}:ãÎ8Ã%µåèžÑR¶s a«v/ +¿˜N­ï.^¿Ä‚|W6Çjã€ÃPnáÕ.;œÎB¿-ô )b¬ 5Ž²$$¥Uy—ý’sÅcõ‘ìs$Û1‡KÛ¼6„÷YPVüC[¼þW[Z|2;yuyÂr2(µ#÷0ëÞÝBÃG§¼-©1ú”ö!ˆ•[ß_wUÓ(¢)©µ“²ªÐOOÐifs >§ÛÈhùâ°:c· E" §t $é [3W¡9à%à·œXÄ"ÊÛ&ç ¤ ‹KjìëîsÎá]ç@«xVíïv åõÚó}„€Ánq&渖xý_¹v‰#£ÞÞ€Òݺƅ\^ä'ù~®œSQ­Œ'1µæiKˆZ«UIœ¬’2à:Σ‹>‡(Ã7½—¤B=íFqKu9q3!ŸÑàðÌ3ÂV¤o¶¯]Ù#© X•½C áÊÒAÞcör凋å: \†Ò‡˜~¨;÷I`+€úÆãé§6àöÍ\daXsÕ¹ÊpZ§\زÇÒ~yõöòâjñKâPÑòÌåEùh€®qµÁy„éᵬ÷wõÁküCä…Ït´W ö¢¼ôì’]² Æ*Ñõ ½kê;ܧb®{è5 OøŸCzgÃ*³ÝïÝj S2…˜ËÒ»ÌÁì^ãðåØÊv;x5ps‡zÂa¨;³’HõHKFòÀý,©ªU-Ù³4C¨Ýmô%Äj¦,íO=ï¡FœÆï‚9ˆ# 󺀙AeQöuãúòÁ¾aõÉÈ£tÀ7Ù`“wPP+‡€¿*Ü^¤À5÷ç6«‘L +‡:5ÞÜ™A®5OYóô ‡Ç®¾ù›Ýï}F;Þ'gü¤Sa`lLžQ„á™g$!Œ¥ê4‡AÈNA0æÁŽO79?.…x¬ˆ°ö͑ Ew ­Ày<œr&ƒ—ŸÙãX‚Çd!?ñ ÛÓš´ÇåÒµíú¸K5,¬]>{‡Çm™T\OŽ'ýœi*aU…qŸÃ@SHOsM#¬JO“ÑÁ—p•ÐÍqäç›Àøˆº¤ÜË$d‡£W©"D¥¼¾sËízëBËÇýk`R PAeÏ,5¢_eÏlba“[ †¤6 %å§#èô,2ècLž1=“Ô “ü^‹’@ò#â¥Z”–"Síä€40Fˆÿ,Ý9Ì]1²åùáÂøžäÈ°î¿ØöCáouÜ» +endstream endobj 1170 0 obj <> endobj 1171 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1172 0 obj <>stream +hÞÌVÛrÛ6}×WàlL7‚Äc;žt¦‰GVÛ§ŒD]:©’TcRþ²»(Š’å¸É´ÓñŒ“À^ÎîÙA£Ë›;AÍÈ(’òŒèÌÅI]Œæ£'£Ë·‚2™„$þà!²”)IRÅ—d²q°Â¸¶ŠL¦°àB“ÉçÑ=½º~K–‘7—o^½"·u$2¦hµ¨óÍfU.È»²-êy>-¢ß'?'å=%L‘X0a2¹Å`ÝLýJõ¦«£X¤LÒ˜!ãj׮ʢq¶®'£D[ÈÇ°Ä&•µ–0q®}fF²Ôtß!e&õà; ‚€(÷2Þãa +–ÀGuÉcd" ٫ćøs)ÍúH$QœÀ2b)2!!f øÕþ}†‰è4c½­+ÿn¶›¶$2,¥¿FîKáß×Í*Š!^Z•®K—#^RšÃXlˆ… Ë—(a†ÊHÃ/)!Þrÿ<ú÷Üó…Ûþ«ÿãm® +Ê° kÀC¸9âÃwú|½^“ñj±l¡˜Š6d\4P@)&è_‘RÒbƺþœJ×Áx{JiÅlæYíV°Ý¤š¥‡m4…ÿ\³bþùhŒ}Xí¶CÚöíè&rF’ÀßD¥ÞRàn‚ÜmHN\&@ xÁÞVsÒ´y[lŠ²m<Ä°ÃJpÚÕ¡ÑÛeÞ&i—i¶Åt5_3²ˆg–Ö˜pÁ«.H_CŒ½Ý>Þ0oÈd¹jHíg ÁeñçnUƒÝ¼œ‘i^úøbi`4&n|¥{ki×h‹~*È®ƒ›ªÆáhUNÁf 0D“?Ф”Y¢âû*Лñ‡_nïüνbæ xÝ KiÜEæO…òǦ8¼e2 Ö{º{,Ûüa“eÖø ˆ (t £œ + Cçúž®J,Bd(¶ `ý‘z‚0Ý£Šã켂ӪlZ2…­Ë¼þ„Ž2ÞÌv)mǧÄóéž. UŒ+!<Þç›N>’N>²TÂF/0…ŠÌ­Ñ‡þ÷!»ˆ}¢Á·„Ž°æÄw¹Û\£Û‡­ âbè:§žrqœëi²™LÔóÉ^£Û¯$û1yÀJm-ò¼cepñ  ‹cÚ0,ÙI1j¼‡kUuѶ¡`ÖºÞ×"vc@{*I?­6Ûª,ô@Oe»Ç „:–­W"Œ†þ0îh"ÉéE ö3âòy“U vêb±[ç5)"¸Çdô!ŠAS·uÑ4+PÖ9ÎÓŒVüàîÀnPQ}Dîa~÷´)†á5‘@ÕeCXã€Õ)¶žz`×Û/˜‡ÑÚ#ŒÁl”„àf¡¡Îu€‰3aqÊösCzK9qaœ¦#OÓD¬K'í²Q}6Èš5K§˜Ü5‹Ke·ù½jºEÛ'‹ÜMì>dœ­hÀIÔ: ïO^²}.çUQÁ¤4Yrg1EƒãbÝóŒ.ÊÌÂ¥MxŠnXa”1ƒ2eò]±L(Âøúæ݇÷Ï(‚霨PÙ^|§kìtìŒ=LÚÃäFOÔó*è»Çœ‘LÓIfïÎTÛ€É×{¹ìT0 ó:+›YU¹~ôZ¹…6pQ*¥ÃžøIw££Šò^â^.l2T_Ñ5_îsêöBQ¡ë¡ì3Å…Üß"ƒ@]8KG*€¨ßàåñ¼—C•,ÿ“|¾ËË·Ý<êUjŽÆ3>®p§’p=Qd¸’ÿ-ÀJö‰^ +endstream endobj 1173 0 obj <> endobj 1174 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1175 0 obj <>stream +hÞÌWÛrÛ6}×WlõD8 €Q“Ƀ#+—6Îdd¦ÍŒåÉ0$±¡H HÅR;ý þeI]œ¤q<éÔ ‹Ýsö,(óÎÙó+ó²¸Ðg!xa.%;³ÎÓ¨söŒ‡hÖáþâûÔÐwe¢e‡¡ʼ Q‚Æ=ˆn;×ÎÅèø4„áÙðÑ#x£©ës/—i>‡—y%Õ,N$¹‰~Æ“\{’O]èqÊ¢‹Nêc;rw®S¤ÇûT8)ºq±®Ò\–Æ×(ê‚öÌ( ~T¸ƒÁ¨2æÙÜLºf3¦Â;XD@´k1áŽa¸è…Mî:0î×É»¾ð2&®G}g ‚qÒóqØ'=ÁC.0dN8¾zv~ óðú! 7ª°sÓuR hßù•˜içU™’Æë¹ÆÖdË4\B}—ŽePǸåoâÓÀÄÃWÆûÖóîýèã—Þ¿ÑìÇxý›Ü€†šV³À‚#9<ðÌó,ƒq:_TH¦ë”0–¥D¸.åÎ'"P“ŽœÒ¦üë +î SÁÊö+ŠFà쩹×ÆÏlìç(^—zÎ|½”yUÖ‚ ¬#¬?ÑÈU÷#GÉyZä¯ã¥$Ñï;us:@,XO´òn‡U·sµ’I:Ke ÕBBŽ ˜A +¥=qNT»Ûx]î’`k +”žnź̶0•3ìS°QAš[ÒЙ/üg»FÓ·¾ni²0qÌ ×šUÄÕê[¯`IB­’Ë +²T®•IQÎx<‚Ô>åØö¡ò[„MfQò”\3X‚]¬]Ñ ØB½YÜg³w´{û£·‹v{. ?Ë.Ž|QczÈoRjšæq…Ÿ Í–,k±cÙÝ«dRÅù|ÅjË–v9†Àrµ4õqbMð¥aIwCj-À³5›Íɽúè£+ˆ7•!†°ƒ°Õ!JÁ®B[=Xš¿ Š€j«]I·­Ã +â1L È‹ +Ê:ØEµ õ™µš{˜GR±‹:l£¿çæ6\Âh/WÙÑõ»¯æFUöf«å!R3â¢sYq'Ë +Â=ü|«¯uIÄÇ-\4¤çál‰<'±eZëb/w·•`r–}ˆÂØ?‚²×<ܦ•%¼Ú®d#µ¦‚Õ×pSÄ ªÿö9n] ?|ŒpÃøê‡ûO䀩öÒ×}ïP!žî”VOo¹vÒ¼‚iJçS:•jø&æÌalƒsì{/(ÃÖ«on¦%.ô a왶õûüE\ál k;Ž'þ4^¢“zF`÷)Y>>\JŠœ˜âO¨š““¹Fb´Áv8›'ÃÛ8ÎÎtÃ…L>B:ÛA­“, sЫÒbÜ{9È÷ åÄ1›~z; +pÚ²p7‰:ù•Âlf§™K¬}œ®à˜ÆSmK£Ãƕ͇׭nUŠõ2G;:™äÝ i±©o¶½c•¬Ö*Þš˜Å¿t9´"vhjáƒ'H3‚k‘Åiur2!Kä¼H&N™þ! L"Yh殜ˆ½ã­;$KŸlṪbU™üʉƒÓw͇/Fš”_ÞGWl&å‹ýø®Ù z.+5]¯ŒÃn"³Lt¿¾‰n“Ûýzè&j$Ì”Nóî)ˆSh+í;2™)‰râh ~­·k\`7÷ÝÁo¾!‡±iÐ&qv +í_×6n®ñøŽ\ŽhÆòžã“þJjV[Û\­²îfó`÷ø­ÊúÖŽu¼%¶$MÇCeœ5ž´»Ëx+£s¼QH±ò{ÖÀXø]wÿVEÜü3óªÇ¯qúí«WåÃœtUÌ*Ìÿ§Ïß½8õìÍhüòrƈ„Çtº|/Ïß½ëÚ(ØióáÁ…ç +endstream endobj 1176 0 obj <> endobj 1177 0 obj <>/Border[0 0 0]/Rect[198.72 477.24 236.4 490.74]/Subtype/Link/Type/Annot>> endobj 1178 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1179 0 obj <>stream +hÞÌ—ÛnÛF@ßõó¸L¢õ^xEЇÄV’¶n8JƒÂ.šZIl$Ò ©ÚFÑê_vf—+‰Rœ¦7 6 Räîì\ÏŒ$,F'/ßJX´£XC"RÓ´€ÆŒæ£çÓÑÉ ¦ó‘T ð/2M¸VhÁ…‚éz$P +a¦aZà!LoG—ìlò"žÂéÉéãÇð¦ dÊ5«M¾^—Õ¾®:ÓÌóÂ?M¿Á“´;)âÆ’Ë8‚éÙhŒé˜ÂÝéè÷M0– W¬D1pQoº²2­•5™Ž¢0C{bÅÀ•Î² x˜ +:ËbÅ“Ø¿G“¹ +ïÑ#äm_¢Å[dÖ àË0õÆ“f2ê­×‘Sñ»<Ð!Ø=(!ƒq„·I0V2• +u–ÄÏÈ=dH˜¤ +">¨‡xæ³Õ +.ÊŲÃ`jÖÂ…i –€Ö\²_…EÉÌŒûüï38Q6ƒc¬Û]IG®Ð2žÅ.éË7NPH¸+iU&( +¬gÃëwççO Pø“‰¾]O÷²PPYœá·ÿN_M‚˜~ûábòöŠ5¦õ¦úø WÀW03óÛI5{ÙÔ››öŠ-üsQóÆà +ƒ{Y±Ì›GWÁ‚„Mînš«ß,?9Aï²÷ "r¨Ì-¬"ŸÑîµ¹=ÇK·Æt¸bÓT žþÖ3ÏÓ5utM ,‘Nyfáb‘—P .Ù«²íjBžÄl¸"sgÚ.Û£-;{0M—¼0­ˆPÁ?¡q…[ÇÕˆ¸Ú¢Wˆµýq}âÈé¹D$ÞF›½úúíôû‹ƒéÏ;ÍB.³~¥ç·­ eAΠíòάMÕq ½ÜÞþd»Úß›üKGAÙB}Ó•u•¯ì‰cle:=l:è–¡,¯fPä\Ø´fëº1Ð-ñI]ʪ÷Ԝʌk½¯K¸ Bæ‚P®L V‡¦›:ÀÚûªËïPÞ<ÀàÐãqÈC†1QX‡lm#‘xÆ«ŠýÛêJ¶A~E‹à¾gÇ*¥Æw`ð_ô¯?TõyµsðhÍQŽy.e)'(%ÒtÂãxl[•Ô.›25D€É~Òo±:îéDEßwÛÜ ²Úc8Ì¢­Y—ì|òℼqžW‹M¾0Ñ9¡3ÂöJÍÕT‡Óæz–D[¨ÛIƒæÒ#‚Ö—Ƀn™.1Ý|m!6J:±¢ÛƒÒÂÒ•G…%qàña’ûÉ:cí¦(LÛÎ7+î6zÈhâ‚u­½£Í‹crm?-l=E°Û"G|8:M|p¤‚œ;¢¥$CKQ…èK¢ö,VÞ¿êˆ kÇ)—xÀXsõÉk mPÆH–ahÕ»Ç5C,]$ÈŒºŒwÐýsè½&xÉŠºj;(p15#ïxÇ7•ùÔŠ\b_²¶Ã5eE—Å‘Ód”ìy ûÐ0ÆûQØÏ÷:A/ÿâQ²Ø×Ú¡NÂf³ƒ=£íP›Å &’gXXhk(£ãdL’¾ÜÐ?ù¥O$Rʱۘ¢nfŽQVœŠmrzYÛ*OüôD5>3m¹¨8LòbI­ÚnÅš‰£ƒ± wJÙ³–è<ÃS) k,BÒ¦ßéÝ‘rÛ)ã¾tûQœ×Ô Å+ð+^¬n™ÂáYH7ð[áÔTÂÄúHúÁ|ë¡0îç©ÎZ¢Sî:ðwÅj3£ŸG9Rt]µs8 ¯ï(¡vÌ_!ñ¯ØÓ«Àw©²"A8ÑO‚⣲£™fnÌì îÒW^ÚǨ#³3G‰¾ äUÁÚ#¬oY½à´<«¡ª±sÑt«è§Î:Ðø¨¬0‚;ߦiôPÇvèe”0Ò¡O`Oá·:<ùbŒæä._߬Ú‚R_nÁ'wCÖœš¹,’lµª)?2vKÁ5BÈ°;Ê%ÉìÐ.ý +J4ɨrŠÜ…?ÚºöSØ¿Dé×yàÜ‘°»I®ì–¶lºûs8Ã).ôŽ¿è®ñïO¯?NqË°âOÒ}òðϳSâ¼¢CêGô\–DwÐsLZ:ø4wÄÌžüÁéüä!®‚û£¹¼ÿC!å;üAt–ÓÓF÷9įÃ15è÷áþÔÏ%0P&õ» +endstream endobj 1180 0 obj <> endobj 1181 0 obj <>/Border[0 0 0]/Rect[501 491.28 533.64 504.78]/Subtype/Link/Type/Annot>> endobj 1182 0 obj <> endobj 1183 0 obj <> endobj 1184 0 obj <> endobj 1185 0 obj <> endobj 1186 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1187 0 obj <>stream +hÞÌXënãÆþ律æÙXã¹CA$^m“6—…­6(ÖEAK”ÌD¢ ‘Z¯Qä)š—è[ö;3ël¯‘¢@³ˆ%‘3ç~¾óÍH¶9»øãµd›úÌh–ˆ”E©aZ°Cq¶>ûjqvñV2Éë3©˜À?|È4áZ±D .[ìΤpeš-–ø"dÄgïƒ7ó·,æ)»¼¸üüsöîÊ”ë`¿9ä»]YmØ7USÖù²ÿ¾ø4i§)æšÍ$—&f‹7g3$5K÷M÷¢<„3™p”îöǦ¬ŠÚÊš/ÎŒâ‰G†Ç†q¥³,c„ +=+Þ–¿¯àDÙ +6hÛ¾£c×gÏŒ+gú‚î5 „D}G t\Þ|üwqk‚Ë»bù3+׬¹+Xóx_°OëPl¹?Še3(KA}òÆïǬ¼ ì¦ßý­ŠõÃ×eÝìxüxyûó/nBöO+`ñ{¿Í!`÷‡²jÖ7Ág «³fÕ›”VŸ3 `&oŠVXÌ#…êwÞ<JàÅ+ùÍMõÙMøE»là¯W|(šã¡b²[b_þ.~êm<z°tèÓ#LPÑã׶¬ªr[/¿žSTÿü«ùõMA'+`V â‹_¥¿b=#Ϋ;èWÎÌrÍêãrYÔõú¸ån£ìNw™¿ °ßWeè4Bí±ë¹”Gú–ÖÛ&«´ì{|ÖÞ({ÝàD§R N˜¦ñê»#Ô$š2öúó稷…ïíOŽTÆæê ñc~ÉÓ)'/ԓ窔ΩcàþT%ã'fžÐ-r#‘|†¦æÎqÏräOž¶ü}Eã„ S,yŸâ×·âôI>Ü•ØÌ.™i®zÁ‰]xýX5ùÇ‘!ã;G”D5jÕU£»q$ÖK×z¡ Žßîž• ©†W‹v±ÓbºZ™iÍŽÝ8{,÷ÇŠîšiýÑ-ÆàÈsz4ùÆýÊ2 +endstream endobj 1188 0 obj <> endobj 1189 0 obj <> endobj 1190 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1191 0 obj <>stream +hÞÌWÛnÛFú¨¯˜Çen¸wnßÒÄ)ÀN«íƒÓV¢dˆT\Rÿ²³»¼-m¥NŠE`’—³gfΙ™e°]<ûå’Á¶Yh&ËAæD‡r±Yü¼\<{Å€Ár³`2ü‡7–*8‘ÑŒÃr·ÈÐ +ͤ°\áCÆ$,oWäåÙ+P4‡Ï^ü¶>®ZH45ä·Ä¿)ÃJRÄKöµ ®w7sñâ\0‡ÅvX2°ü(ªq‰×Œ€`y¼Ïþ{êþÈeßÇêÿx™Ï‚Ð4w9Ⱥ,dz¦‡ÿ¸çó›x_m¯[L¦ ¼/›% eäsÂQ”¤\Óžÿƒ ÷ Ö¨Û/Hj£'rNüYÀþÕ+¨$Û㮬ۦS¬†¼×+ͼÈj¬ÛdùqÔ5£Ö*ÇTÉa‡µ—ŸÊUµ©ÊÚëêãîO´ûÖR­C<ýjÙÔÓšì7P—mërƒÊ_CUûïæ*lj©R*˜ÈwÈÅÙò2ÂÆ©œì£ûrÃ}æ4mÑ–Îq¾ê(¨ÍC ý†QYNuît·[tõªßaÞžÕë „Çeš¥U—†tøÜñuàçÍ}%jÿk]œžxÏcëš2óõYnUó¼/@]1íÃ.1XÍŽ ^š÷TÊ)ëÓD}Õ +ñï„S8škÒBQ¯¡Ä¿Ûª½†ŽƒLC¥¸Ó…ü²-í½ #†y4|ÂM‡Û(ŠB* µÆ÷%³÷ËÉÅ“~ù¨ +‰R¿$”ýÎYÜÕmñ׌ÎV‡ä\B¾a— +lã^ W¤Â0¯ËD“Óò!éâuš»R!weÄ\ï8MXÉ¥û¼ûhÈ\ßy\ô]ò¨%¨Ô ¡5+×»± êS[a'륥qóÕâ¨gçÔ£pV¬®#~|@~cÜÉš"B˜»ÄM0GìÝ"·sÎ 7='K¼¸Úù‘rìßJ͇³geI™I‚va%°?ÄôÄ¢*ïé/²}~lÚ7ûª~±¯ërå‚çTúê> endobj 1193 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1194 0 obj <>stream +hÞäW[o£F~÷¯8Ð fxÜîf«¬´ÙÕÆj’>PýÕÅüzbŒ`²CÇ“„嶮/{mªÑEYÝOŒ@‡^»Ä „`œ8¹sA89ÖÒUˆ…™©… µ`Doìv0”mν "·æöôX÷÷¤qÁ80áªØth“×l·?;ÊÁÄÛ„ñbWó&ó•¿c=µPòÉØ1q$Ûpßû=÷ÁÏi¢VŒkš¸‘62(\StÿÖˉrL1‡1}Ai,d5<æžý,à &™H§!{Q7(wŒOÏuƒY· ¾?ÄD{QÉ?7ƒƒCLC,Àÿའ™• I‘©|‹<÷Ó¥^šQrGPŽ{j½0 :—£(>WOb”¥½N§’Ñü¾îhã¦XªJðŸYAçªÝh˜‚7mSiZ†0‚›¸lH`ó†¨MÏ= +eƒåaõæŨôäË8ÀâˆyÇ4`»*|Þ÷}hÏ[/Ÿ+XO&FÓ3µ´GÕmð˜&Žì\'ì,‘¨ôSvØNš<Ç6øSÕ’d´Þãp…[ýU/¦Ú3fŽ/j˜1ÔúO3Ò-‘žBð”&~¿öˆö7f«³`Ãïv)ß÷1DßmÊÍhzX”€9 —G=Àn÷o›Q].é)äæ›vKíªî½nÉÓ,‘¦~ò€°Æ}s”C-˜™æa‹!ÄðÎ ó%UbÈŽ”ˆ%øI5ð¨ûhÚ´™c`‡‰zôªÃ9Ä ?L¿äG øéòê +ÙËyc—öˆÃl›úlÈüˆœN ûìóôxMëœJ¾‘‚ÔógÆ“=˜.Ï?Úœ’i¶âÈõ›/ä +endstream endobj 1195 0 obj <> endobj 1196 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1197 0 obj <>stream +hÞÌW[s›F~ׯ8Ëd´Ù ,7Ç–Ût&Nj)iS§V2­ª@uÜÔÙ³$À‘ãN¦3ÏÀZ°{nß÷‡Õäùws«f¢$Ä,0Q ìôd9y¹˜<¿äÀa±œp ÿðÆ“˜J±d” Xl& O¡,L%,r\0ÂânrC.f—ÑΟŸ?{owO¨$õj—m6eµ‚WU«wË,×Á¯‹Ð’t–"*aÊ)W,.&S<ИÉÝJþiLyL)ñ¸®÷mYéÆž5[L¢0ÅxP!Ó4&Œ….2%h¬ºç2áà9fÄ$DÚ‡ñ!©ÍB +ø0Lºàg<òÑËȹø: dH#r‚ñ`á2¦‚'\ Ï<àxÜï¡ $Œš·»ÚýVìóEcò>°O´û}×”Áý%ue’kÃe&_B¨Ø$Ìø’z_w¾üDT„xe<p'ï£OÝŸøÚsêÿø5[©hbjÀ|˜ñámž­×p]®n[,¦$ \ëF#¤¤œü$%Ñíðï ‹`…¼=RZ)/ªXèl͌뤹¯Ú[Ý”é"Xüv¤*§)¾†à ùÈ*÷›m[ÖU¶†l·ÚotÕB{›µ°É:ÿnF^¨$r鳌òàmðu Û²‚¬­Ù$ͦÉ„7¨—ÁÁÁ€‡†+4yVA~›•¯/¡szê ‰½1³ðÁÞ÷2L‘5^#²·k$_ÌÉ \‡†r%©L{^³ƒ +ºÃæ[—Ë{¨+m\5¡,M±bRxY¯ë€G¸¸CAˆ Êâ‹îüNx%MW(»ÂZEF L­ŒÁ^ +½¼»Òí¬iϳí°RýZG"2›m’¥¯–0)0[Y5B²Ú&Ñ»¹ƒB*.;žÍçgo%y ;CBy:4mÖjƒ + LËÐNLywò¯l©ƒ­pl ÊêÖdJ•8’öàfì·fUKŸ4ìV]­M5sïðT$4Ѹc% +|7XÒ ÅÝàs:Ëo¡ÒèNe11 >¡¢Oy þj¶˜BGøyÁÏ»€¯÷rìvñŽŒª½–ÆRçô‘dŽ„Ê>»=Þ©”¦Êu?³0 a(CCawƒn¡Ð"=$~$N ‘g¶*fzçâµÞZcðÖŒê&¸J»ˆ"WËäÇT‘r§ÍÍ€{ÊH1ÑC%ù âÀ?t:wDÊ 9ÃáDÒ8}jüéÞ#l¯¢+îaÎ!wèÌ–ôP qï³kkõ ÔNÕtÓ–¬Pxœ9Šsš¤=$Ç~·ðìÔˆÅm–—mfhQ%’HÄ”9!EG`Â#ÃøiŒUcÆL:¬ë¬°î¶·¶nS¡ Fð磤)7ÊnŠrŠ—uføEÖfÐÖ°Ò6²`&,)òºjÚë +Šª·Ew´g*|Û¸L$&†]˜TTÒiq˜Q\Ó$ms0ïT°Î¹xjvî[úUá• '¨¤Þ¤×3¼ò^–Ÿn„\/÷›í°S @(âEÆäÇ q'<œ«‡^ˆGUE—䃢^¾úyvñòÝëa]#~Aù´Ñöå²*ÊqégT> endobj 1199 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1200 0 obj <>stream +hÞÌ–ÝnÛ6Çïýç’ZgF$EJºÌÒ¤è¹Eêní.™v4ØR'Ém½7Ú[î’²e»m:´†’b‰çûÿ#¬&Ï^ Xu£ 3H2*†ÖN–“Ÿæ“‹æˉãÞD–r%!U1%Ì7“­ð8ÉÌK|ˆEó“7ìéõ hžÁÕÅÕ“'ð²DÆkVm±ÙTõ +ž×½m—Ei£ßç?£'å=i®`*¸0æO'S4HnJÿ¤¦k£©H¹dš»fÛWµíœ­ëùÄHžÌÈpm€K•ç9ð$‹ãÄçæÒu/1c.“£—Xú@¹—˜ð¾¹+Bø2ɆÜ)0¡CòJû)"•pÍv cM5>¦ÑTŠLH YD¯Úÿ®)$ÍxÆ^¶ÿm±-{ˆ OÙ¯‘{cýïmWESŒ—55ÕÖeS¹¤4)Õ‹bÉC,±ð±üin˜Œ¼Æ"ð–÷“?wÿÊÏþ«ÿãÏ\”áõ ]ˆÍ‰¾Ñçåz wÕê¡Çf*ÖÁí,*@).ØûH¢&™]ðaüçÒM°AÙ~AÑø¡IÍHÍNj)ÅSììÕ®î‹Ñü\­ýêœçÆ‹È‚6\%d£žpñVÕ=,ldØòÃÌö7­ýskër÷–ù’ñ½ÓðƤ¦§¶h¶÷k Þ“ñž.…ɇºj_×7l‰:`hnd”î»@=$3©ö+cZÅÞFÞô'K@–7>÷à㙥xÂVÛ­û.Xq¡ìä@)ŸK™-‡½£À4Áó\S¦‰<ƒšÌ_äw¶¬–•í °°·Í’L \+B.nQ*ú¶¶ýPÕð@‘_ú¿¸ŸÊ”¹_ò¢å™_>?ò„c”`¶AR¬·ª¶]À}$c|³‹¦øÂùl‘·ˆÝ¾ñ~¦"çľp«ÁŸñþʇ¦é¬3P6mkru$bðm„—Í=f@æ0Ûì«LÅRÀûª€rÛw@QW-ƶ¤áOYCZ(`U½÷6$mS‡ÜõK°fk_¸¢ùi—Ÿf¾뀗uê˜=2&c©k[}…Hî›fݹ¢`˦Jò8ÓŸÜÌè!´Ðys€ÇIg´©Q+Ü!2¶Üa­ŠÞì2RôÓjßcZ_«[<-¸#†Ë‘Ÿ”‹1©ÓG}¥ùÙÉ©òØÛ_Ψzˆª'Ä 5°"±a íU¾+TDòè1qèõ÷ÅIm‰#ý¬ Û)Mp»7ÜMð$ýÜÒ‡Õ +endstream endobj 1201 0 obj <> endobj 1202 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1203 0 obj <>stream +hÞÌWËrÛ6Ýë+°“ +!‚ì[ɸMÌ$‹¤ š†e&é!©¦îõ/{.AR¢§Ît:Íh‚DòÜ×¹—’­fÏ^]H¶jf¡f‘³ ™öYmg׳éìÙKÉ$K¯gR1|É8Z±HûÂW,ÝÌ| ?H4Ksl|°ôËì?Y¼dFÄìøÙñÓ§ì¼öd,4¯Vu¶Ù劖­­¯³Üz¿¥?Ã’v–ŒÐl.… KOfs’™Üíôú}íÍe$/Öն-JÛtX‹tf‚ñ„„L($ Aìû‹,T" +‡ëY¨`r¡„èî""ó‘tYH.ñKOb5îÿ ¢XÄü¼®ÜWÛ¼e^("þÎë®X÷ÝÞþòª¤äváú”/¥ÂˆF¾$½/¾t¾üåråX}1æwß?ú~ämÿ ê|[WŠ˜jà÷UðÃ~ø—6Ök¶,V7-Š©yÖ¶±h­…ä¿{ +MÉí•øß38RƒCôí7Z7†Q¸×ÎóÑßù~„îÕ"à«íÆ–mÓwlè€À?5ôë(¼´íY¶±^úi×ÛR$‰!¶ê^s‡Iìl]ÜÚ¼¸.lÃÚËJ`°êºÛWÔòÔ>Ūóû8v Ô¡ƒŠTä Š2[38Ân3<(ä¨-Ú¢*ík+–×6k-ÛxŠøÖaj1qâ^¤z÷Ömq»¶„Úx2Agþ„¶†O¬(óõöŠ”­óV;À¹‚ʘ=IªR„Å/-Ý}e¯¡\(]—©¡8Z$±«O·C‰ t ¢ +‘[ñ^qðå̶çžVh𬅖SM”ÚŸ4ïÙéò†®Öņ°6,c=”qP,wéñGøùQš.–g“ZBí¥q´õVXÓ"÷Ä&ÁRäkj%¤¨ßoFf¢C3¬hXuKÅ'²òŠåYÉ.-Û6 CU®ï°ä½sVisp©ñ„ë©píáŒxEŠ¬y\•n ±–Ä5ÑG%ÇFÑBíεhÚÅ]Ùf¸Èú$" ÝqC:q@­z¨.£Dñ òBî8àªÿ‘;IBUw8øtZàö¼*›–å¸ÿ&«Ÿ°i#ã4U*Ì8øÀË Qñ–\óã`¯Fü£7¥ð>éÔŽtòwÈŠq¢ò°¢H3%[Ÿ`ÊíDPênRXAZB’¨ 2;Ֆγ–´U—8ª%w4AÁInQp4% +Þ7ºò8§æ=(Ñ'ê½’Ñ^Ǿ£Œ†|Õ@whÊD’?Ÿö- +šC1"ªžÝ.4¢î(’×tÄðËz]ycÿ‚ bpeõœM)ù‘ æ„`}_h.ªmí)š—ÏÉ÷‡ÕF†!p)­½Þ sÒ¾Ø<$5‰¹/oÞ.@²¿¢]ºðÀ=¥Ùo2¢ü#m˜Ä +Z߇#÷t¦c™Op¯Ë@…ðÌœ&ìàG!ã4ˆè‘ÛÿS‚vT2 Vë£xç5qôúèìxq2)nŒó}¯¶Ã,ï÷“ÛÛÆÍ xm)6ÅŸž¤ÁÞzXXó™†ú%i<§>3Ί’µÅÆîëŒ*„7†ôCaWÑ£5Û ï£J¶G¾®ràŸûy#àbš‚yç: "sÈátqz¶X~+ÎÃR>'57–nœYÛrÕÞ<Útùöì—o™¿÷Z÷ûôâƒeLcÌï¼9M[û2W³Õººt£^ãžz´—ïO—‹“×o^ÿ##ºöë^(òâø5\kŠUÙteU–/n8bn·íØýþá íØÃ}à㊥i?U@¾-yi;Æ »ëÝÁ;í00¥O`<¨Q/ +µÝdH"sÀ¡”(>¾ü-À9Á±Ð +endstream endobj 1204 0 obj <> endobj 1205 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1206 0 obj <>stream +hÞÔWËrÛ6Ýë+îlL„øÌεŒ[ÇÉØJºˆ»`(HbC‘’ªëOê_ö^$%Õq<íd¦ÏÐIÜç9—V³—on¬ºY¬ RÓT­ž-g?Îg/_ 0_΄„ÿðŸH®$$*à„ùf „™‚y‹@„0¿Ÿ}bç¯!â)œ½<{ñÞ·žH¹bͪÍ7›²^ÁeÝëv™ÚûuþzRÖSÄø‚‹8‚ùùÌGƒä¦°+5™þ¥õ|‘pÉJ47Í®/kÝ[óY,ycF1bàReY)1¨®ï e…1ŽmÄFSìŠbùM4ä›…6Ý`rûáöâ¨Sé^IF‰ó]Ÿ÷š`ÀaŽõ8ô€zkØuzý«¨‰…k_BíKX‹"`¶Ì—¨Ð øŠËéšÐÅnê>ÿÃ&ã²ÎxÛ“Ø& ®BÒ_Óeiªø ÒÃB{1}Ǭvp‚©x@ÇÊ9¾Z4u×Cï®óö8dVYÊlšÈï’¡Î6ú°%’ÇAºßvvçÙèiƒžzò½É?pmbÿz ÕÀ|µqhÔÿCFFÄXä¼J¢#æ_ÞÎê”ð ŽÉçà‡ï_ÛRP ­îvUo‘Àp˜¡ÁòłƬíÚÃQ-a]Y 5Lt¾Ù4•/X$Ü€U4›-¦Œí†;Ö¯srŒ‰²(cuHÉcþÔL°q·ÙkèG±úv9¦™ ëZãÐÓ7°55UTSAǚ燆­Mk£Ï8Òþ pãÎÊ”/*¡¤ys‡Z€ êî¼èvÅòÎÁØ™Š0Ú"S.ªeYU8]ºª:Ô‰§ð +›4±Q„Uå÷ù¶ód`^@“ÃTq!ë¨t*×—Ú_ã©n‹~X<Å~瓆¶IÌƨÉäÑ„íaŸL-tÑì¶õ¿ ÈÍ¢ü™¾…E;€]_̯¾…ËA¬Å0Û8dâ †3øÊÚ€´±zÌÊUY[Ô‰cº‘!™ºØ+êUUvætA“ï6u»}Dïf\cB…®ý4c91G£Ö^ª¦âf¦ž35GûuÓÀéh8”ö¥ÂÌš®)#IÝÝØ&çûžÒ¤_eßëðC„ +à"¶&ŸèeGŸ3ˆ4Ý3Û4¿øFÄøÍ”ôh›ÓÔ˜àÔØA#YË¡Ãã²XçeÍáî­~Í/ß^^¿ùZn"¬Õ[T/#9TÍ +U‰L`¥d²·Õu³‚ÖKñ{'7_LX¬–$¥6ªFwTÍÙ8ªö8ÂX› Ó¬Wš„ÆAíÄ!Á…1!2;Cô[r… ÏÍdåä,z Î-%ð™T!Ã3/Ë¥§y˜„[5t›æ¢j +OàüÀ¾ø}«5iuP‘4¡Íø=ŒÊˆé”›mëŽ#{üjDM1ßÚM=ªGšWH hÕÔ4H¬Ö kDk<ö…z2ÇqïæmXèvP‘aÞŸœQÈ4‘¥ÁN:ù<½>½zw ÇT> endobj 1208 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[305.04 90.24 473.22 103.74]/Subtype/Link/Type/Annot>> endobj 1209 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1210 0 obj <>stream +hÞÌXÛrÛ6}×WàlB$ûæú’q'‘=¶â$ãô• ‰‰ÔT\GûýË.^%ÅQ“´éxF¤EbÏ^ÏÅèÅË[†åH Ò‘B‚¢B棟&£ 14™GþࢎBA åh²QBh 4™Â eš<ŒîñÙù’$B§/NŸ=C×…Ç""p¾(’õ:Íè2«t1O¦Úûeò3 ‡$‰@>#LI49ù ÐÀLÝèD¿-<Ÿ…„ãÄ ›|[¥™.­¬óÉH1Ø£ˆTˆpÇ1"ADià,Sœ„ªy& žƒGŒC„}·þˆ­bƒ¨1ÞhÆdm½NÅ׉'"ñ#â”y¾„ÛÐó9‹™ÇàSºï#cHF$Â×Eî¾›m§ò ñgŸh÷}Q¦žúâ<3εæRã/ÎUhft‰k](sºüåI¢0÷ø¤,DÈIî®;ÿ~êzäkÿŽÔÿñk6 +B‘ÈÄ€ÖQ j§¾ódµB7ébYA0.Ñ.5”€„ᇢÄzFšü¯38ä6ƒÔí~I G®ªí¼.¹ *2iã2›ÍñLÏƺºÛ¤™7ù­«ÔŽL9Īæ[ª)ÙÆz[®$ ”k‰T½t¢@@:×QsÒß]_Žˆœ[Vˆxíà²J*½ÖYEÐd©w €*è?ðëra¼‹Òå›*µ(!‘ýcQs,ݱï'’M£&‰È°J|&Aä0@]|L Cý~¶VÚùÊTæѵ’»]3ÀnÚ3·ƒ2i–?ZO^ &1bw̃ý­ªÇÅ8’‡ÆLj§åÖ]íôÃB÷'YŸíXÏ{ÍFÈ›© +ŠÂóÀ+DÑ-U {µÔ*X¯–€u°‚–ÍzS)ë†È{|g†$…Wð)ñÖÞñ† ÿ8ü †"u(Ÿkû ÜCL&uUtDD¼çÄp(PÆý(íþÀAÐE3aÃGá&õ4››e¬ùÒd:ŒÚkÃ6'ž£RkôÇ•I)`Ÿf&oRæ4ŸéòÏfJ€bûƒ£À¨e#Ò,t]‚îF åÇиT³Ä xа÷&Yh”?p†t,Ì®CÃp‹q~yysõf|6pNH"&9Üþè€ßÀ†ƒ³é-Š| ›O¦«L'²%lë“u×WoÏo>…8l{.â&÷Œ=øÁ³Ö³ûÕ`Є>£ÂÍùíùäI£ÛÂejÇêÖóêH£{}æöôdü$bÛ‘™ÜA,Íny`?²·—/Ç'¯ž„tM£š¥‹Ô¼.ÉáA!r  VÃÀe_%hâ)&—çWŸwC¯¥tn¨Rí/ÓÅHÛÞ¯ `ýÂ]ü¡®þ`RØÁ[ +endstream endobj 1211 0 obj <> endobj 1212 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1213 0 obj <>stream +hÞÌXÛrÛ6}×Wà‘lLÌ[ê$wRÇc«®3I‰’ØJ¤‡¤âè“ú—ÝÀ«ì$MãNG3¼ˆà^Îîž]“õìéOWœ¬ë™IÄb"cMBFªl¶šý8Ÿ=}Å 'óÕŒ Âà'G4$ +e‚Ìw3R(“IHæ ¸`\’ùÝì÷âå+¢hLNŸž>yB.*ŸÇ4ôÊu•îvy±&gE“U«t‘ù¿ÏM¡Õ¤hHN¹Vdþb€@T³°Wa/ú·ÊxD…—ƒrYÈj#ëå|¦4x¤©Ò„Š0IBe̘´¾wÍCð˜ +9z€à‚Ð<‡;8BBà¡Œ[ßÑ0®œó¡²þ’ú¡¤Ê;Á¸(¸Œü@ð˜ 0™ûŽÊþŸ 2Šiì]T¥ýo¹_4Ä×4ò®}ó$³ÿWuî`¯Wˆ­ñ–!\BèñB[g ãÖ–¿|Eµ'| GÆ#B¬äþ<¹}èü•ËGêÿx™‰B¨iŒ1`. +LOÊá_ê|¾Ý’Ë|½i ˜¡W“ˬΠÂrï£/ &½lIÛôw “Áʶ¯h=­hX¨#=©f´ž¡å^ݤ;öçô5Êi’(L;Éû*•®J¥ÐÖã7·M^é–¤Õz¿ËŠ†4›´!õm¶ÈWÆR(  vTèRÄVDžÕðRFn·ÀF„µ†”N§˜`$ĸôc°H¬²ÆP9{0à6/(¹2zÄÑr®0 +€õ>ŸÿúúõÈcAÃDõÁU­¡m½“¦´‚ƒ8ÉXÔÉDß syùº(« ìÌëJP›’^4%½k_kˆrêÃa»BÏÀÇÐs˜HYØ¿3RÚ‹•}ÀØ{²²¹R)ÛÒç˜Nw¹{oý¬…ÇeIІZÑHYïÓ“ãÆbå Þ“j©Gìc'’êH£“ñv„wZ¥èá- "1ªÒ«æ×Á(å’†¡d˜ì„˜$õÆɵ-i“ã‹À¹In ÝrÕ'DZB’N]–­ÈÁç P­‰<é #+ÀE¡awxê°½ÎzÀ|À'ñ,„F±:ª 62ŠêEag‘èË¢Ëù#Õ‘G§˜@o0Ò™È^÷GÀø<Ýe°‘xÏzØÒI"L(MŽ0¬ÕÞ‰Ž¸]Ôœ¢ §tÑFï–Ù +æ,#ÙyÓÎL!MbK²æ +G +(>­‘g;#­c æîd‹7iõÃ$Ã`ê¢kYʲØ; LØ/€–s`7M¼ƒ˜Idß”;ðpã^¹…ÞS™ÖX™;Å7MÞ + ý'™áf.î:æÁnP™ Xt3c›¼6ðºÝnÙ€½:»yùâ¿ X·a¢UK#TÊË H bÇ™'{Ÿ{ÍèžÏyq§¢•5XÆNƒ+ ̳uŽáØãvXJzP“_Õöí‹×ÏO¿­šnÄ¿ +Ü0žã';Ø‚©1ƒ¼Ð“™x„„´HHDb¹·Ÿ;±—¯ˆC»¸ò`Wš='°VÓ} ú[€‚6%? +endstream endobj 1214 0 obj <> endobj 1215 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1216 0 obj <>stream +hÞÌXÛnÛF}×Wì㲉6{'™·Ô±S©ت è#S2 I4D*†>©ÙÙåÕrl7mQ i‘œË™9s¡ ËÉ«w‚,«‰U$æ щ%Š“m>YL~œM^"Èl1’pøƒ“Hb¦$‰g\’ÙzÂA +ã:Ud6‡ .4™ÝM~£oOˆa 9zuôâù¸DÂ-—Ûl½.6Krº©óí"›çÑﳟA“BM†)2LXCfo'SèÔÌñJu¢¯¶ÑTÄLÒÄórW›¼ò²Žg£SðÇ2c “*MSÂt¹FϬd±mîƒËLêÁ}@Ä¢üMð¸Å#õ(¤nê¤qÞY&Lð^4ñ—,Ršº'’‹hjà2Ž¦R$B‚Í"p´ø;wŽè8a ý¸-ñ·ëݼ&‘e1½ŒüßVE4{i¹qàzw¹ÃKJ;Àœ-i°… ´åÏÈ0Ke¤áÈELJîΣ:?ñ±Gêÿø1eYâbÀC¸ñá;u¾Y­Èy±¼©!˜ŠVä<¯r €RLЯ‘RÒüš5ù28–>ƒ-ðö”†ml{tž¶ös´ý °W1M—»u¾©«ÀX‹‚ ÿdÃWW´{‘®²}¾=ËÖy4û£c·`ij\¾jÙÒ[5ô–1jûp[å&[‘l‹ +I}“Õ¤ºÍçÅ¢È+ø7'+ dö‘Há„UJ 7‚aå(yK€7w7ÅüÆËøZ8]©›pÚÒÛbCV %xÇÈ…W»'Ái±¬ 6o¢g¿¾?ðW2Ý3'nÍñ…Œ’º$îqgÄᡲ'ÿt±Ü”Û /ª†ÚB$¦^GÜDCuÖù|Zá+Á¨QÚôü d ‘YÓd´éÂúùžŒ§‰ÖCnþCnhO!IMÈ/1Ò]„Ú|1H¤Û—H ÝWÅ¿ÌËu^c6·Ò¾MÓžÈé²SR.úÙäs©É$6¤ÊT9âK r[@L%L“ÆŠG ƒŽH¦Ò^šF€:4Jl«†:K2'ֹ祤ÌĸÕZÑb ¥g”P`QÊ’ç(ô4T›µŽD^øú®<”>G¸SÖ9Ñ®C!ê½Êb}ei£í¼»Î°Î;éÖ›foQ,MpuñW°½àlâ¬[OÚt ½$Ýåõ®ã¹ß M{° Ô¢$¿×7k= +ó÷ÉêÌ(®`Œ¹Ö«ãÓw?ÍF ÷àR_=o™Hƒ"ûÜ~’“Þ#¨ã§)!P1Ë–ò›kä·.7Ó:Ï6äKNvU~ eqåjã<; ‡´2£J-Û¯B¡-pk+ÝW ûXF6x ¥TÀ©f#¶Hfä¯+~C¯>\ŸœN™N9lï'kVc„l»É\,±FA)j0èuh›î‘Û «“Âê¤ÚÁî ~ìÖpÝ®¢I;# ;–hö²ÎæÛ2RÆm™¾³’ÓšÀ›²vc÷óbFݯIJ&àµ×Ÿ¢þôÃáš|‰$‡‹}4e‚’lW—kðpì*W•i +÷Î׳̽1¯‹FêÆA˜ó¤Ç¦y¹^B¾ÎH:ŠÕÖƦ7k~:~ûŸÄ©ÍU€éÀtY”ÀÕm ‹¿³‹­I÷míð·È¤ÕÑ(p‘ô&A‰_+IØÂ…ÐNZ´áQÒšú\xTdÀÇ÷oŽÖŒç'ûŒîs#4:ó MEçö‘Љë.•–ºï¾ä« âìñIßÙ-ÝÕíW¬¿ÀüP× +endstream endobj 1217 0 obj <> endobj 1218 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1219 0 obj <>stream +hÞÌX]£È}÷¯¨Çb¶]CUAÙ§Þž™hó±ZÍ8»õD±› †àxœü¢üËœ[U`ãöì¶EŠZ´[÷ž:÷܃%Û.^ÿöƒdÛ~a4K”E©a:d]¹Ø,¾[-^¿“L²Õf! ñ‡™&B+–èP„Š­v‹QDeš­ +œ„2b«Ãâž¿yûŽÅ"ew¯ï¾ù†ýØ2š·Û.ßíªf˾o†²ÛäEüeõ;¬¤ÝJ±Ðl)…41[½Y,–)Ü™>…þ¹ –2ŠWÃÞ·û¡jÊÞÆz»Z%ƒŠŒˆ JgYÆD”†aäj³åÚ‹¨X¨hv€Ð Ú^DÁ™!c¸¥c픘Œ}ñ:vþ1t$b~d*”Á2Æi,•L¥BÊ28÷½¤:¢$)ÿ±kÝwë}1°Àˆ„ÿØ+¥û¾ë«`‰|yÛ¶¶ÚàRÊ$„å’ù\BérùW ÃUáÊ„1ùôyñï×>_xÛÿ&êÿñmv´)íAèw!4íð_®y[×ì}µ}°™š÷ì}Ù—è­…äz’—k1Òß38Q–Ámû MbκٶZBù‡”;ÿpl†üK°úžŽÝәȌk:¡±:¢xý„‡ïyÕ l]†o?”ÃÏ%åÿ‰;¼Dˆ¥‰¹!µÒ›_·û‡ºdnã–‰„’&A¨÷ü€&àˆF@Äé‡ÏL‹,´¹á‘nçŸójárç*öÁo¡TZD|»ß•ÍÐûè>!4›µ‰DÏ.p°…¹E¼ŠI‘e1•©IÆ´—1™$ŽžÊ¢ÚTeφǒìN—ŽµûuSº‘` §hñÍKŽ`·‚¤ñ}€ÃÐîò¡*XŠ”ãÈ I6´mݳ|ÊÝÓ:†‚ÙØ÷œn`ýc vEŠ"•M¤.›íðØS^ŽòK¬–Äñ¥ZËQ~<ñQ@ÏÕðÈQÊ”‡-u©Ò>¾‘Ý2ЙþÏê}I ηXÆ(ûl‡KÃÙˆ8‹OhY%ä¬jÖU‘ð|áe5=)1ÏÂøÔ¿r:Ê˨-Ÿm•"ï +.yçâPŒ"oØC9Á•g¸x4\<íq©¶MÛ¡g]Å1—#ht½äõ<«XÎ+6gì¹6VÞŸQí¬rló¾^ÛÄ ‚Hh_r,té] äÖ¬!b("ÆŸøÈëúdD.*¥Î»-æ1‘9&2ÇŽÌM9Â$óT g;Üù•L‰°¬÷›$“³§MÉæê(Åtdy·F> 4LGµ«þáÈV¹\V˜ÈF]B7™ >‘Äí¿íJ·ç‚FX$ÙeŸ˜üÚÄÞ¹-n:b‚¼Ëk¶ïË@ÒÕBÔp6TÖ!mÓ£”„¨QÉø +&Í|·¡Ùò®dÛ²Á|ÔR´A,Ç&ä”v£ž`¥(¾B“&#–k ÙõURö ²G^C×Ö5åHÐLj€²¯Y7B1=Š€°±Z5 {ƒÃ¤)´`I>‰±w|fŠ…}ÊJ]kÑÑét–.e?`ÞõûšÂÅ ÁM@c’RïîGÞ˜†ê’ôt’z⟠„amqŒÜå_ª¡Kj»$£·;µ¾Š.)]&Jía¨jãÚ0Ëð†å õ—u¾=É’ùzíÐÓG;ô,Ï¡*`W4eš “Ñì©ì +Ì·³1c±×ûÑÖœ¦&æjê§=# ¬SaŒùŽñ^+Ö¥ø‡¼òÿ<·ø³ I9N`i&ÕòiZ“ŸJ$Ú9{6êGˆÎTñãêö¿Ÿ)£²ÃøŠ8ªÄ«ãi£i/Øêq´ ~¼bÈ—,¢Ïˆ.gÇiVa‚> UÛ ñi¿ýà@—­YÛ€emSø†3Ôp¬vÔÂÛµÖ¼Ãd4¾yXÈxn•ifxàYàâ9“^îì4¶ùWœmôç¯;ºwæꔈ&‹6¹:Þìw³Dàb™¾ÔÈ©4õýõ»¹xžÆu'Ž[kÜx˜{¸¢kûžÀ`Œ ,<—NÖªïYƒ–…fH¾{€“› /á•Ë•ï7$Tñ¨yÓ%¾âûÂÈû¾½îG­GoË?24˜s§Qä,ü.PV"LÍK9 ™L=ê_Æ?7X™ÞOá^/:t©cbщ²/n¡ùà8o C…W!RItÍ¡ó® ™ù–±'¤o¿j°&¶µÑ›ª¶#×páŽ| Ś5™Lδí'€i ¯q´âoHÇ—‰ä¿™‹úÀœëŸËŠPõ_À:œ°öÞˆJ¸èýܪ0œ÷Ésé–xß3ÑLº'Å ÃþöK¾{H³V8o8¥l”îÑõk9é(DŒ¬¾ýMCòºn÷:o(‰™ÿÒÜ®ESÙßá^Hñ‹Üµ"èk>‹ú!/è'áŸYç~ roÖAŸ.©IÄק BÝ~jÝ=|^áöYåPÀôä;¦mÑn~ÐÔ€¬[7ÂÇѳw¢qxKï)J²5šªG¾®x«ýzÁ "wª²ïó­}'è½&˜·®Ù`¾öû¦ )Óà ÕÖ¸ƒ;§Ñð5±—´ºš‰½ç=©xCŠ?Ü}!°îr‹:Á…ïË¿:œo®{ú1ƒÙ4ìTêËîM>ä¨ØóOû§°zåŸÁÊîxºoç—àDq v¯€Ïg¯^mÛ}¼Á ¾¥ó?;þ"òoE¤ó§ +endstream endobj 1220 0 obj <> endobj 1221 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1222 0 obj <>stream +hÞÌVmsÚFþίØêÓ‰˜ãNïšL>8§Nk›Ùű2U FHIÔãdúƒú/»w6“¸™ ž‘ŽÝÛgwŸ}Áf­î›‡YÙrLp™–ç€É ­iëuÐêsàL[܆øâžKM\“Qf@°h1D¡ÌòMb<0nApÛº&Gýc°©½nïÅ :÷¨IòY-I6ƒ“¬Å4Š…þ>x‹žÌÚ“MMèpÊ‚£V¥›¸>™Ðz‡»Ô ÂÀ0_VI&J…ÕZ¶åc>µ †éû>PËc̪3s ê:+=¦L kCŒHBL¥ÄŒïùð > ÒòVÉËȸÝdoÚuˆ§‘nZÔ&w`0®wl<ºzÇà70f®s|:µÜ‰X®G=2(òZ6YÆèuÉ¥®4¢–e¢w0^’g’\•.“|†ãJÂd,~ ãu,ÿê6uÐ…OÆ]€ùá½õu×û‰×~ êO|MUÁt¨'kÀš*0gk¾ÓçašÂ0™Í+,¦IJŠRà˜&åäoÝÀ¡$bBWýßt°k¨vpnFÚ®ͧ¾S·³<àø:.‚X#Íp*0Ö„Ÿ8Ït‡”Äó¨€v;Îóâ2J—¥/W½hP‹! ²Pu»˜éÍEü’)TsÕÝ€DBéŒ jQˆ¸Zëe&‡ke6x3$Êè—W0ÓÛ3Qõþüˆâ…¡Ÿ•qÐnLknŠ$«¦!Ñ寄,Gqµ† PÉø \JQU/#W›Å7C¹-Ü03¼IÃ0ÓB½N¸óØݵ +Q-‹ øËU„JùüõWn04ª“UQQaœeHÌP_§xÛWï×¾¤ø·Ãþ($²ŠîX3™í„ ÚT³ÝV.QšæqHÊä“È‘:¥Rš¶½º@zõ|ÐûÚ5Pª­6á¤X"~ ‡…øÜ£H&vÃâîC&*M6ÕöíDîÄëåY†Í›È 3?áÚh‡ø`?ýõű„·'ø³<ÃS´LåX —©@Ëßû\Ûøhžˆt‚L«éÕ.G£} ¢j®£Fž_ý£ÿ¬.PJå >¬ŒWr\ïy)UðÒ‘¤ω~5l×ì=:(«b²¼A0nq3¦í2¸Ú20•eí¶_ó-ì[.6 ÚÚÚŽùJÇÔÌ Pšãv ‰q ‹qýºÚÏT­ÜH»lMÎ3qÖ´ãÓ¿µ¥ërz1 +ÞžŸ øLûÊžüþ ‹4µäòz |Y´Ÿœñ˜«F|ÖOØ“™ygz‡Ì–Ô¼Y_øÏÐ p!g +endstream endobj 1223 0 obj <> endobj 1224 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1225 0 obj <>stream +hÞäVmOÛHþî_1Ê'o‹7ûb¯mU÷!„´×–B”HTÈM6Á§`#Û¹^RÿegýB …R +•ª»DÚÝÌÎ>ó>K«ûjÌaYXJ‚Ïp’A®­…µYÝ—8D ‹ `øÅ>•|É(]X Q(sC Ñ Œ»}²Ní½ÁKðhýnÿùsæ„TÚÙ2/.’t ¯ÓRç‹x¦É‡è J’µ$Jp8åʃhÏrЈ™Õ'¹>ɉÃ}*ìa`”­Ë$ÕE…5ˆ,%¨¯Ð"E=TÈ0 ºcnm[enu‰SáÞ¸D‡Y]¢ÁWî+'„€—nÐÚnã^c¼ôj ßÅDºÔ³?ƒ`œ8}âp*sÂqU5];\? =̳š6_ÏJ Šúö1©ntMÏ‹„8¨¯¥Æ·•µÌ¸Kå]ÂFÆk]¾*[WÆ}€y³oý¼kÿA¶_ƒú³UQŠ&¬‰S[åðH™½Õ +FÉò¼Ä`J»€‘.4V€””Ûÿ5ië9mÓ¿É`_T¬°l7íÕuÒPÕélX½ÊGwSÑ «M`úøéÿ9 Êî¿= ÆS;×Å”¼¸–‚ÌÔÄ^Ë·È À\/>貟¥©ž•I†Ôtjwþ’AÉÎt^áÂZ¤èÙ}²®8~HJ Ç—‰>>#ùhWžM&œ1?8ÚßßG"YJs0«Y*¼2©ø–‹°¸,ÄÐV¼á~¯?ØC(„žB¶{,»¦¹s+ÐOY2^Lq-c¤æ%Ú4>Úå9rTÅ@)%Ñß–¤&ëoh×íB/ýo|q¹Ò°È°Q#”^®Wq'InæÀ,Ná£6ê-²u:‡$…ò\oT@ŒÑÍÆ–*ÒiðN#YPt©º;‡qy>HçS{J~gê>ÜYqžèÕÜäEW}':?‘q³Ìdo>9e½(óùúÁ¸ËMJÜ›æÁû­²zàºw¿˜œò-ì>7<ë\ó⽞"5KRôŒØ1ˆù¤ÞÞ#ý *³cÞÕ~4$&Êaªñ`4| »?Mz£7‡¯‘|ÐùN}|œéÕÊ5MpØãuü6h¿›sÚ>ô´Ezë|ð~ùúÿθv²á‹ëílHþ¯ 7ã³Jx3ÔÚ‰f¢E˜mæÔÚAqÆö?ÛWcà9 +endstream endobj 1226 0 obj <> endobj 1227 0 obj <>/Border[0 0 0]/Rect[85.68 487.26 118.32 500.76]/Subtype/Link/Type/Annot>> endobj 1228 0 obj <> endobj 1229 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1230 0 obj <>stream +hÞÌXÛŽÛ6úè¯à#•ÆŒxô!ÝlzKÒ`×h’¢Ðzé]¶¼änòЯh¢Ù’ºÙÙ4h  ꛤÎá™3‡ËÉÕìÁ·çœ\53#‰Í ¢ +CdNj?[;YÌ<á„“ÅjÆÉá¼ñÂ2)ˆ•9ËYlg9Da¹r’,–ð!çŠ,ng¯èãÓ'D³‚œ<8ùòKò¢ÎxÁ$Ý]Õåv»®®È÷UëëU¹ôÙ/‹ “Œ™4“dÎ7š,ÏæÓ,ã'9„~Ygsn™ kCÎvûv]ù&Ä:]Ì´rPaÚ&¤sŽ0U乊•Á¬é®CÉL¨Éu@‘á"TÜãá +ŽÀEUtÅãʸNÕK—ø¬Ì¤bš¾#"çÙ\ÃG›Í/¸€5óŒÃ«‰¿+,DÙ‚ôE½‹¿]î—-É ³ôç,\ññ÷ºYgsX/ÝUn(7G¼„0õ¸´–œÇµü•if¨È¼æÜ#ï_ïzÿÈÛ>OÔÿñma¤aîAžv!7ýð‰9m6äl}uÝÂfJÚ3ßxh)§¿eš’úKÖñ?1ØŠÀ`};´´Žæ˜3‘ÎøÚ׈¬†–Ρ+ „<-þ;ùî43ôäÇ_ÏNÏ_ÓÚ7¯³‡# +æØÓ½pî%_“K¿º}îÛóýEåÛÓê~}M»÷þ)tÇ$ ĘͿ ÔÂûº"ùÃß“øt2WD™+°Ã5È„ ]´Gõ*äzæ¯ö›²&/×5ÈY¶x3hØ –FŽÂX-"œ`A5Í2J™¤kK/ü%YW‘UŽ™"R*dÖi V¥Ön¯× iü²]ƒ ¬šî2 +ü²Í¼’’¤BU\aÁòBw\UN6ºŽuAYaU:¬JS(q¢Ó†™\lï4Úš$€¤iËÖo}Õ’öºlɲL% ´Ãs®{Î&`.<Ù7Àqt&íw{ 58Zùøüð„µÌžâë&eÛP‡€.åÄfÑ€r”£u‡ ¬KŽ ½‚¬-ÙÕ¤ ìedqퟎ$%–]%úIØìÝ îu¹!eu@ €V!a:¡ÓñF™„òvW{Ü—Šìª¥Gºõ Ñ]]…Muå}Môùéâ|BuÁÔhí¦Ë£ÜáÚy’gPˆºÔ›wU[¾…Ì!-Ï™z©ë6¥S¤°gŸ6ÜÈ=Ç·2°¿¼€–‚š›+ JÓâ¥:ik¯y‡Q€ˆ¶¡¹<ü»n¯Gèö½ÁíaÇF<Ò°{Q¶×ç§Ë1=&V"FÈ5 ?ç¨F-|§è8p10Éö™Ô)†ý³°Uh!eQFY”(‹* PÁKÓƾ„áïiði”è +è··àVõ¾_bpD±^œY`]&‹“”¥>âAuGöHÚsnb€ $½|ûøím6q/·7ª»UØ4ÌÑËËÑŽ±Þ OqÀgðµ¯}†OÒûâBB wK +°áп ¸Ø¿è¡îl_ +À”PcCÑו',GŽâhd¾ ¥õÙ»ˆ!;‡êùADZÁ>ÿHÑ;9êï îîŽgণzt_O‰ ¢|ƒúÂcA&À¬"Q§2q|¼Ã!;åi8çÁð,ŠŽ9Ýô[WËÍþ²›€ÜO¤ÑY(p”óDR$IÐ>Ks<m6»Œkø~‹gÔDâBÍäs˜¥ô¦\×qݺ¾Š½ißg³ñTiMrîwዉ Hvt‡í²ƒ‰ +(ÆÝÝ¢ø¹ƒ&‰mù©ò}ì;«ÐbÌ¥ }tWÀ³}Ó¾Ù­«“]UE;5Ò@07Èg)DæWE¼o:9Ø«=*ÇDîÍVd´0øpdÇ=ñï ]$û.J/¨}¤$RÎŒŽ<þìãéD?ëϯãá&_>Y3ï1¬)3’øååÒ7Íj¿añÁî€%‘ +Õð 6@€˜…ý¹õ¾)9ènæa‹jš†*èAAÛ‡2>q °c®ˆ§G7‘&H #-ôyÛ2zƒc/ñoDÿ¡¯ï}XÒ±5ž`„žݤdBOÝdÜŠóàœ':b5·°½ ÑxŒÇ)׃£ïÔ¢¼¦ñï@*1=Æ/wø¥%Ây +endstream endobj 1231 0 obj <> endobj 1232 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1233 0 obj <>stream +hÞÌWÛrÛ6}×Wì#˜„.@ä-67ÉØjÒNÒF‚ev$2%©ºú¤þeoRâ¸3ig2ž!a’Àîž³gwÅa³xüý‡M»Ð Ë!Ë5H[\/¾[.?çÀay½àþáç†JF2Ê,w †§P–Y Ë.Ï`y»xGÎΟƒ¢9<{üìáCxÝ$<§’Ô›¦ØíÊj/ªÎ5×ÅÊ%¿-DK2ZRTBÊ)× +–g‹ôfVq%§£ß6IÊ ¤Äcà²ÞweåÚpÖùr¡5#ÒTi BZkf9cYŒ-„^bÄTdG/ÿ /1à@°€/³|ˆÝ;ÆU¼TÑߊDfT‘Æ“TáÒ$©à9è2O8^u|®|™ÉiN^7u|¶Þ¯:H45äMÞ¸ø¼iË$EI]ylC´ÌÃ%„6/ï‹í}a<úòw¢¨&"Éðʸˆ'O÷“ïºÿËÏþŸS¿áÏ RÓÜsÀz˜>‘ÃWÚ|ºÝÂe¹¹éLIZ¸t­CHI9ù3¨IâÖtHÿ>ƒ¬Q¶_P4~¨ž©9ýgÑ÷§(^I3²Ùï\Õµ½`u<óO r¥,t‡.Yþ>©šSk•OÔLŒ²–£¬…7C®>ºUy]ºº‡oö[FŽÉ­F\EgÑÀméK€@¿PÞ=,*Á0÷ùN¡w3‹¤ñœ£Ò‚b˜‚|S ´4ÙâU‘}X£ê 'OŽ ”¤L÷þLÕÉ-z¢c¨+õuæÚ3”“:ÁËv[{sr‹U 'X +Ÿ ®ÔHjóÈNXùrÃÕ¡äx“jæöÚ]ß¾tÝëD +Ì¢»9¯ÖÇ1-왞8ð°†ÊJpoD?’×C—!rŠÙ™ñ@RѼ L ²È„ ‰8ö@SÍgˆeñB«ÐvEç|jÑh·Ç!åŒæØ $S3˜(#W‡ª+þŠ[TÜb©Õ±Hû…—gTf=p"X~‡˜w°v‰&ºÚ{ò>¹—a°Šæ¾²†y¡3«îJhƒ –(Rõß%4§Æ¨¯ËhpDº/¡/ŠƒkÞ“Ø›¨/N~J`~l9à «ºj;X᎛¢yÇÝÓ.ì¤xl}$ßv4yYìÜq2bI3ržäQ  +µÃ¬ÎæöGσã1\=¤QÆBÀǶËv¬¥¤†Ú¤´–GíÁ[ŽY¢©5Ê~}äodë*ûLà‚k; šŸT.¸eUž6òìÕ›í:ë(œ÷ÊŸ÷â iÜ·<ÌJïÅn:ÛÇúÙÛ *§ª;/ž6í'…ÝŒ“5|HǺÄú¹%‡œLÜã,Ot%o Øwõ®èÊ`*àüo|}³xÃá굆£xbðA‘àeÕ•h7ÕƒiRze3Í­êÝåÞbÉ$‡drRåÒn5ÁAòüÅ/çgß6~ù€Ÿí§•9r&"'ùtÊA9ÈBövu½ Ød!q~„û Bt^¾ºúáÅùÅýøLMé3èl‹¶‹}p^=‡Í¾Ü–k­Û„öÙ”¡Àù-'©7ö"’‚T.t\ŸÎíMé¶kü™6ãÏ„òü¯´ +endstream endobj 1234 0 obj <> endobj 1235 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1236 0 obj <>stream +hÞÌXÛrÛ6}×WàLL„Ì[;tÒÔ㨹LÒF¢$¶éòÅŸÔ¿ì..”HÙN=L;že‰ÜËÙ=gâd={òãNÖíLK’D)‰SMdDšb¶šý0Ÿ=yÁ 'óÕŒ Á\xš0)H"# 2ßÍ"°Â¢8“d¾€7É|?ûHÏ/^ÅRòüÉóÇÉeð”IZ¯›|·+«5yYuE³ÊEðÛü'ð$­'Å$ 9ãZ‘ùù,ƒèfaßɃéwMò„ Z‚rU÷]Y­±u1Ÿ©8ƒ|4Sš0!³,#,N£(¶™iÁí¿‡”™ˆGß"ˆ4_BÆ™A!#ðeœúä12®\öRÙÎ3Eoˆˆx*x›¡à)38¼jû¹ÆDâ$e)½ljûÙ²_t$Ð,¡oóMa?oÚ2!^ZW®I7B¼„Ð †±d.–ˆÛXþ +ÓT1¼F\'ÿÞuý‡·}«ÿãÛL¤f)Ö rUˆô„ÿÒç³í–\•ëMÅ”´%WE[¤dœ~ ’Kæûßup"Lkàí=”†u¢èñG6ögÀ^ÉbºîwEÕµŽ±Ú‚þž¯(1>H·ùMѼÎwE0ÿýÀnβLa¿ÆÂã4°›;ê¼¹.åª,ZÒm +²"!YnÁ¥0ÌiH–-ðÄ"Q÷ðxßþ@•ý¦\lŒ¹}Ù€M0ðbãTBÈ2ÎG@вç×û7Râ>%áBøåº+ë*ß’¼±B,yGö¨að§}Ÿl¡\m Cgû¶Ñ9 kÿm §4àeÛO‰m¶RW©WƧñ˜ÒÚܳ­ÑKJ÷Ðw)…°ž’iËØúgLÊ1lMš~[ÜC~ˆU:0`ìÜ×4¾\¶ù%KŽkìÉ$Ujœ5Å¢Ž*e ´‹¡83Ój×ÉuˆfÜNîdÊl‰ ­`>ü%©ê +Ë +&åÅêô†ãÛ‚|¢c¬!È,õQ~eÅx¦¦€w"q ø°¡Æ‹™LOùõú×W¯FF  õ㮀¤«I¹®j¯Ûl¾ŽŒ¼\£g°A®’öÄh6ía?Î…A‘¶.àœØP´Xu'6Õ-ؤ·Ñå äÐ ’)GvòÐP¯õ]8…-eâµhä˜éƒ[î$r ‚ÜÓ°¥€SçÆ´í¸$“jHSݯ̰©)7G“"=”Ã>äÇ¢´=“Ѽ3{ lNfÝDÏÍEèßý뢻 $nuy·¹ b¤X]VÝx­M[)7mà‹ž+\eMò‹·dX O‹AYå8+@ªŒ Ân¨C Æž5°ƒ¤Uàp®¦±9¢â¾ì6“R†ÎöÀèƒFYÄ}îõ+œõ#è3¦buÛì±Ø32GB4vkGIiŠ?ûÒØȘæGO&û$›WK²È+ò¹*–øLÊ’t¼˜nª«-*ûÂi:² ^Rä0ö«”ÁD"&øUYy*B·Ëé<Gµï6°‰Óir¦õ Í.ê¹î·yó®l@/G8¥,á4™¨¤í ÜV3F]rX8 %n•-Λ›ªË¿ÚG”/I¦íñß@ +$°évÞåò‚Ö…±h:”÷ÛÙi±dXCÒªß]"bÃú¨<£³áv£ô ÍÁ)æ†üWQ|ÉÑ=¬@Ó„V|ëæä¸ûFbÆ5ê¤m£ÃþýÀ3ƒqƒ7Þ³\ߦ%ããØø ‚ úxmDER&Ÿ')-’~8\CÃÃâaäóS0jìŽ Ø‘'‘[·ïGœ“,ÍŽ"3…éñ(³&>ŒoêdUœü"2Á`&{ŠÛŽGÜý˜b§ >gR7!LNG.&3"SÆ­äÜ9á¦O$-<Œ·—f#²‘NF°=ƤœLñûüLd~"ö'"¼­ÇSNi8^áºyz¼‚q?ðpuâÜ-yÆ_Ýû?sóÅPzºêùMÀŸý†Û¶ñ7Ö/${àÒšL?b6òÄ,¦É]+˜~Тy B8Áêxº]¤æ†QS\Ìg 0ÍŽ×æ +endstream endobj 1237 0 obj <> endobj 1238 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1239 0 obj <>stream +hÞÌWÙnÛF}×WÌ#§©&³Cò1ÍR¤HÝ Vvy$±D•¤ì¸ŸÑ¿è_öÌBq‘m¤( +HZäܹË9çÞd={þý¥ ëf¦IyFâLÅImf«Ùw‹Ùó7‚²XÍ„$¸‰,eJ’TqÆ%YìfVsEKùìy_S‘1UëºØíÊýš¼Ý·¦^KC]ü€”ß)aŠÌ:!‹W³9 Úm–þIõ¦?Õt.R&£fȇêØ–{Ó8[¯3-Yª‘f‰&Lª<Ï ‹3Îc› ×½DÄLÆ£—Hˆý@¹—ø”ŽÜ%!'xg]ìÖ1‘„àUâ=ü± *fItO$tžà1¥s)2!á² W}ú]¤qš±,z_Wþ·›ã²%T³4úHÝ㯛’ÎáoTímn]´Ü¦KJÚ|Y_òà Þ—¿hÂt$iŒ+)!ÞrŸüûØý+?ûo¬þ?sUPše¶Þ”̘κ~?ÒRÛ>–ÅÍ@qÆ¡xÒ‰<ÇÀmYØ}Øâ$s +Uô%×IÈUÑ9GÛS…­¡[’õM¤¶[:D×”!eEH Û[ºfÇ$Ëí!gÒþYkù•¥§xÉ‚¶ŠÉ8ÕÍR†¹£öç´§UÝ%•Ž8ÖˆÊÎ]áHI…“ó ÔvX” g"Ÿ £z,&b”šb"òZM“¨´}_DV³G`A{åÉ=Gv=§oèlŒÚ¹Â1.땺¯vè¢N¸ŸÖm ˜«‰l[8ÝXÙ>Õ¿ŽÖm4µj.ñý¦¨¿™&Õ6©ˆßÚ£gT\NÂÍ^8ëj­¾VÃδ\Ú´í8é„<î„ü!O;w†Sph÷ôù¤Ã›_mŽOìµÐüµ 锄áP€ežáC7¿J©1PÝÔïXF´ê1P9i¢ÓQíoqb$­ +endstream endobj 1240 0 obj <> endobj 1241 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[305.04 408.24 473.22 421.74]/Subtype/Link/Type/Annot>> endobj 1242 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1243 0 obj <>stream +hÞìWÉŽÛF½ë+êHÆÃvïMææx  ±áìƒ#µ$&9 9û;’ŸÈ_¦zá¦ñxœr 8¤ºÖWï•ìW¿¿d°ïVZ€¡9È\ƒ ÐÚÕnõÝzõðëÝŠq ø‡,7Dp0‚Êa}ZQ´B¨,¬7xC™„õÍêMòäé3P$‡Ç?x/Ú”åD$;-O§ªÞÃuoÛ]¹±é/ëÑ“ž1´‚õ“U†›M¸“é×mš1CxR¡xÙ\÷Um;oëéz¥dùh¢4.Š¢"sJeÈLsbôðS&\.ÞcE\A„‰õ(| +À—2’w‘1³*„øS™ +ITò8ei¦ðÖ¤g9ã3K^uxž»D¤ÉIž¼h›ðl{½é!ÕÄ$¯RÿƆçmW¥Æ›4µ+®O—ºzq®+˜‹¥ˆ±Pbù+UD'<•x¥ÌËÓçÙ¿w}~æ×¾ŽÕÿð×|„&¹ë] úl¾Ðç£ã^VûCÍI/mgq„ ,y—rÊÄnÉ€ÿˆ`Ã=‚5Îí푤ÈÃTû;üº6’˜Ö4„½µ»›Ÿmÿ"ñWö‡WUùºêÏÛ*•–ÉuË)žø™• ÂÙ†Ø3ç&¸¸¼²›jWÙúƒ…Æ 6Çt*[÷e_!Ò›·Î1\… +OÄ€•uÇÞU%tÑÐn0Â!$B*ˆÖ³³Òõ9Ž)†äÒõoSHYÅ->ö<ÄN`}¨:hÿÞ6W.æòÜg¼ &÷ŒfF+ñlYoaSÖð«…ëƒnêã¼l,ì\µó¤IñÒ‚-7Ÿ_UûTc^:„È)z€,ô”Wk÷×Dz}]µÈ·giIÓ¢¦ÜKnOXyáDDKÆ‘…¨‚L>1³™œ]~Àn½‡Æ’:0¦»A$(˜ðªá<ÊоPþT'C"¼0ˆ·ÃpŠPrP£ŽwŸà©MSw=lðØ¡l¿9« êçÅPfñMR—HžÉÉ.Á‰¦¹7„•\øT²‚䂉¹ë¤rh÷i ’ú–·Spþê~é§müº¯~ò6]Ôz1< +Q_äãð˜`ûÊ©ÀÙ_»^ugé£"ðAA1 ï£.1ï9Ð,B“ìN©=MÄ Y¦žE+<ÂÛ!pÂDã›øI¯Q¦¢S}'!้ȯóo l‚å›ä•ë¹NŽxUɵ¿Ç®–|»d,„˜žD²„2áyx™ÐE>dÎ)fH„‡êAß,­0¤“™P%³4¨„s¾Ux–âêe7ä†SÓ"ëÔ;§ÃCÜ3œœR\s_° 謅?žÔŠÂác ØÇÍÖvâ!¨r|-EIF¥ûÀ!qddÂ(bŸ ÆH4<,„± +±hÿªÜ[À½d óÛ$ #ZF~ zÖƹ É3ÂÓAˆÎÚeß~BŠ„óiÇLÜ<:vÍ(# =b#ü‚á1k%’ ÊÔç)‚YÈ/‘¢ù¤²œß¥D£Vd‚a‹ÔÙ^Íl zÔ9ŠÈÜz¥?ÿYF¯P„ÏñcÁO,¾$y&©f@x\“b)s¾/ËnýñUó1Ó,øCD6Å„Yò~c¯âþðÝÄ¡£õIÒ$/nsC&rR°ó+* ¡l5_ÀÍ¡BùîËßSî~`QÝG’>ü†Q8SRÌýdSYðS…‚gË­Ë—T!»Ç P ßy{Ö¥,[.òþf¹ùYôKVÌÚ¥b`ÆDÔ,vž{VåJÝ»ÒdÁéTÙ³ØLèt„|ßz~Ùvƒ+n7®cÿï7Ÿ½ß0­‘‘CѾچÃÿ邃*ø·íOÿ  +endstream endobj 1244 0 obj <> endobj 1245 0 obj <>/Border[0 0 0]/Rect[257.76 115.26 290.46 128.76]/Subtype/Link/Type/Annot>> endobj 1246 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1247 0 obj <>stream +hÞÌXënÛ6þï§ ú‹Êb–¤.”VìÇš:»eA»Í‚¦‡¶µÙR ÉKƒaO±½ÄÞrçÔµNÑv°µXŠ<ç;‡çòQ‚¬'O¿™ ²®&‘OIGÄç¤Ô“ÕäùbòôTA«‰„Ã_xˆX1_åsÆ%Yì&¤0$>Y,aÀE@÷“7ôÅ씄,&'OO¾ø‚¼,=3Ÿë2Ýí²|M¾Ëk]®Ò¥öÞ.¾M¾Õ2ŸLQH/&Sˆj–väw¢/Ko*“41ä¢Ø×Y®+#k¶˜D’©,ŠX&ý$I bÎk›1×¼‹™ /Á!¸À7/ÁàÖ‰qBBàe7¶#0:ãýÐ"ü1õü€…ôH.¼iCåM¥ˆ…ÈÂðÙùíTÌbú²,ìÜí~Y/bŠ¾öÌmçË*󦀗9úÖXËÑ]RF +ý…X‡… ‹åo/d•^¿\(B¬äî9úïcÏ\ößHý/3§àG,Æ3àîx4J‡©óëí–\dëM ‡éÓŠ\èJCø>ô7OBNR}Ëšðw¬¤‰àÒ¶ËèhœÑ°0RÑ(›=Gä´(3×Þâ—.GK’Ã.ac¯h“4²Ïïô2[eº"õF“ÓöÑÌæ»bQZo™Ms—4î¢yÖY‘3b¥<«?´úÂîåÎóWgg”’=&C)© ’­ó¢Ô€*«HZ®÷;09ÝŠ•EX…r"p°»^§‚ÝÂoH÷f Ù©ýrXÈ|Æ£°‡’m`2¶/éù5‹:Ц¤ÒãÑÆ0ˆ½nå'îŸöÇŸ¸öïàŸžBëSñŸ^ŽÙf¡ü(󱀸 ü&¬Ó{@VQÅ ¦ä{Áx:s‹šþé³$¶ gF˜s +rŒy³›´ê áB¯÷Û´$—Y‰Ýrö.ÝÝmõi?…C¥\ +7Òà&„+χ¾H ~¶ÛÂ! î¡Š@õ@%Úƒ®®è;o +F)òí©6íZ°ª‰t˜‘jœa¨²i‚˜÷û*]ƒ”©ŠØçKÌë +ê‘•á³0éÉP­ ×ê·i­o1kKçûÌ6~E3ãS€å$µ¦še4H[[˜XËr ɾÀÜGkÑVáL…©»„>­±Å'ËØFê¼jjˆ$Ët»½I—žH MÿJJËGÐk!e®0¸€IXY"<º rq ƒ6ŠÞÀ¡Ô Ý‹h}òœ\Ó[½º?±Š~]<ÜÁ¼þ +ÙÃ>¶Mˆ!0¤ùÉ hÿÀR|€€ì4ŽiÂÑ 3¾öÈïFÂâÈíÍvO©«gÃWË"‡Wؼó8:ZEùÓ1 `ÇW±þuºÝ£]Ï +Åšƒ7°âƆ:ßÀƒÀ¾B[îÏuý2­7ó:-î5}r>»|ríœ|;ƒ·'?ü|1›_SðÞŠCRÏÒh±FêâÉ1Ç{ÌgH‹aEùÓþTTuy»¿©2à0ÍŸ<¶þj¼>–0ðÇw·Ú]õ1⌠.?‚•íÉ pÈË/ j×TJ&Šðó.V>Ãë«#L_ƒhŒ¼£kψ÷4Kmx Þ ¯Ã›®ÞÛ4ˆÉÇ4‰· êêÐÒCÞšå·°õ€ÿ?äŽQFu©ÖèAÿïËœðg¸RÕ´-׳LÃJµíŲ©ùþjßã=IjØX{)Ávd·7µ²"÷XÙ%ö¢Z7½k³’…¢Ïã®ÛÎ_=?Ÿ-8°¯ôW·tÜé‡x†Î‚ÔÜo²åZ–~ w¤.jðØÀµë%"K‰i_1Å=Ÿ©G§¾b‰èQÍ~÷–Òu­-t©â{hº%i~ ''7®™LöŒ–Â1q¨ôÐCw–ôÂò"_ê^ÓìÌæÞYc©ãÖ³Å|Ä­ý{Ûޯ±9EZ"í€,(^á}¥ù?8N–îÐé!5¬¿ëå~Òû€ÍÑr£ôBÆ´^ü0`cÑ!6v~ÿjÐ0nïôcRiMþ„Ü«þÂýp³’¡Â/ HLN8Ö$é>t Î\#å3—«æŽdíÀC@+w¿!ŸAö¨ÀÙìô)Z{–æë=rª íü¨u>þ’á¨AÀ1pK|,ýo,-ÏE +†ú®< Ù+ödç!ÝÚ#k„.~£×;zþŠ¡A” ¢ùÉ“Ñá«7=/9=1‹¢~ö‚Õ•K[],5T(Þ!Ä­2²Ñ¢Š©°8ìef'Þʆb<¬†‚[²(›œh*¸i!±>­±Àá}_›mé!ÀöÛö{’e#ÙÑÐÊà©àlj è?i—FŠÅ23lܪZ’^é25þ`.ºÅ +endstream endobj 1248 0 obj <> endobj 1249 0 obj <> endobj 1250 0 obj <> endobj 1251 0 obj <> endobj 1252 0 obj <> endobj 1253 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1254 0 obj <>stream +hÞÌXÙnÛF}×WÌ#ÙD“Y¹ Õ ¡BæyN¨ÊS.³DÐ4 Ï!e*Ôä9T "íCÈx¨Gn«x¨²”=‰šF¿Äö‰q¿·]/!Þ¨©±¸6]†õ"I±`KîcaÜÅòw¬i‰XÁ•ñ”gùø9ûzîó+_ûo¬þ_³» šá0¿ ,™ñá_ú|¹Û‘ëj{×Ãfʨ#צ3@))þˆ22kðïœ +‹àx |d2ÆŸ +‹Öæé¼3¯ Å-±Ô9òÛÌR˜tA X®M^ +Ùk³ùteú«¦†;”¯$*»þú°3ó‚1$M"ìOL ¦‡Žäá~^¤Átsª"®õsÒ´GyQ°¹i\©§i/8ÍfŽ„¯ÈµÙÆK1$È!:ÊB'‰j÷|;xöÖ¬cNŸw¬´yeŽ¾Q|KƒO Žfš +=18Ùg!ɱJƒ-N¨æ%ÃÍ=öU§L‰²ÊÄæš$‡9΃{š–ÚZŒèPûƒÃ¦„‚ -vD.OÉÂ&<™Ðdæ9"Õ†t‡²4]·9ì¨[F](ZæJdï Mj[—a®ûÅÀo/È®Üôn7ºýT"&mWsuRo¸iêl:3Óﻩ4eß&ãþ'òôT)V êþ{à­œK»]ëµ… V4÷(ÅΪjYØ¥9•R?Rú!¹šÜrè ›4õî.%ÊÒi+€1ƒŸ¶‚‹ÕÍ$GA}¿ˆF4ðD]øÇ0Ýn@©Ä%áåÔ¾|óP÷Åg÷¢(G.Ùñoð¨€#‚Ä°˜Àá¦m‹“h†ŠþcäÆDÊ8°3J"ûCõ¨=bÊ}Æg À<ÓáÖ;ú +ð +è;R ’ö|!Ë$‡„ó‡³íD%m±¦Õ~WÕç«ÍµªÍ¼øóô0)›ý}S£Á0#a”á0ÞØ‘vª ãt Ã7`26s>ߧ‘¾[ø¡‡©mzÈ0;UÈ£ö¹ÑÏgýTÌ3·s[Wà?ÎpÕt_Q;±uæ2šSο}¬TÃa)y ‰0fü#Àbj*¶ +endstream endobj 1255 0 obj <> endobj 1256 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1257 0 obj <>stream +hÞÌWíRÛFý笠ïµ7û¥¯ÉôG$MKR %ÅF12¨1²G’C˜>Qß²gwecèÐ4™)ÌXëÕÞsï=÷k-é²÷ìõ‘¤ËºiŠEB&‰H ªòÞ¤÷rØ{öJ’¤á¤' üã!“˜kE±\(^÷P¸0©¦á ! ozglwï…<¡g;?ü@U ®Ùì²Ê®¯‹ò’Þ”M^M²q|þ MÚk +¹¦ä2 +i¸ÛЪû•¾ƒþ­ +2技¡ÃÙ¢)ʼvX{Ã^¤xÁ£ˆ‡q¥Ó4%n!Œ÷͹ë^Âc®Lç%±´{ ‡Wt¤Ž„”ðÒ$Kß­a2lס·ðmhÃCvKJÈ`b%©`² $>c¿/­&Nxª™ß»XŒ +"³“À½Éý~UÁö²Yi¹uÞ +K—RQlù²¶¤­-Bz[þ +B1| +yä»çÆ×ÇžO<ö}PÿÇÇ\tÄÑFADåðu¾˜Né°¸¼jLÍj:Ìë 5—ìs P“,¿àËôo38V.ƒ#”í?T4Fq´VÍ®Ôbk¿°¶³£Û²É¾Ã? z锧‘/»°aĵ±F=AøŒeCy±ÉÍ»¼9Z|,óæ (GÌSÆ´Û䶚v!0ž•uCcH\eÕ6µ!ò:QìJ¥K†CÏ°•AI°ë¹{”yÙ´RᲟ$1ªÒI +ÁúÖ“„ú42ëú×,ÿCÊÌ’wõ+‰Ä¬ëžÊ‡¦ŽÃÁ*ƒÎØ tNÍ »\\ùºk +Š_-{¥mÂÎ|X:NQÛY%OÓÐúkÔ2Iå²³ú,eGó|\LŠ¼¦¼h®ÐW3–EIy²dÑ—,Ó»mx^•ü—ªØNG³ŠDHQƒ¯`È ›M9uY’’'ëAò‰wðæ݆Éš ñÒxåÆ‚ÓÕIRxjl¢*®ÓöãþMËî@¥vÖ­Sì=sn>Ì­ ï“+#w^”Ž2*&ÔÑŒˆK®RìÎú‡C‹$7ëÑIWsÙ}074OY ðIuÞP3Ûˆù—ü¯R 3}€Œ>èKF!ÌKE6íúÙIàò“ÚNüøéÎ~_H ÓM +¹ +Mšø’u+{5¢¶ù­:¿hkʵ=Úû’]ϧY³^úFEÝÒÇ*NZŸ†¨¡I a›ÙŠØt:³…fؽLå¶ë/p9bNÍÊé-ÕW8ÚS¸rÌæʽ¸SpP–´qÌiQg—˜P=CÌ&‹rÜhˆ"^f˜»Èe¢ÇQê¦Y“_XÒkï;¢Ÿœ†WEíC1P Úh¸y׋[òTÜcÓα¸u óÌçXÌk¦où 7ázb„«ÄH<8´ÖŒ³éôc6dŠÕ'ªüÕÑ’2ÞM“{cN§jsÌ ng]ig]³ó’Fì"ŸÜìxEŸ†·sìçç95·ó¼ÿØð#ÿ‡£ö€â3~7k2ĸõ( ?Âp»•f/Såõóî+Œ1¼²“ cŒ¶·Ç³YuÚÇ»výþ çO2´kì>_Þ6}LNWV†sWâ¾3°Çö£õåîpÔdØ­šÛ::~)ÏOO¥[£`ÔŸöplç—óý£Ô½Ãã~]€ÿ®“"ÜêÓÖëï€nÛ…Å>9_:ýoãÇAÖ\¤ªñš=îí~+àýì÷FüVÂ÷÷ä×(@zØPžž‰ÐR7ÕÅbàÐl›ÈhÞoh¡a¯p9ØÂöÖã§g²£a'W9|ß¹aNúsœÐ»ãýý'Ð~0óU:bªOmº´ì·eö1˜T¶8ó mÑn²žxôýÚQütø[€ÖdÊz +endstream endobj 1258 0 obj <> endobj 1259 0 obj <>/Border[0 0 0]/Rect[434.52 441.24 533.76 454.74]/Subtype/Link/Type/Annot>> endobj 1260 0 obj <> endobj 1261 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1262 0 obj <>stream +hÞÌXÛŽÛƾ×S r5L¢ñœ8ä4è…kËMZ×Yì*nƒÝ  %jW…D•í^ä)’—È[ö›’]AÚ0—&9ÿùÿþï_AîgÏþ|#ÈýqfÉxNtnˆâ¤.g›ÙŸ–³g¯d¹™ I8þâ‡È3¦$Ég\’å~Æ!…qmY®pÃ…&ËÇÙ-}¹xER–“Ï^|ñ¹ª‘3E÷u±ßo«{òMÕ”õ¦X•ÉË¿@“ +šR¦È\0aR²|9›C S³ +wªý÷:™‹ŒIº…r}85Ûªþlê21´¼£wtõPÔŸß%«Ã¡~[ìNå-^ðî’¯%É]¼üèÙÜŠîÐòó~úý¥Ok´¼¡äd]nß”ÍUÑ<¼Ýwô3<®Öâí7Ï…üììØ‹¯xÿâ¯ÿ¼^ÜÜQ|á?`Œ%Ë}\Ï¢ZÃÄσôËânN者@Ï®Ð̶^óO °Fõáý’Ë’ÄJt³»;%ÚÈJ“‡S?Çš–ÀwÚ·È/-Òj7æ³Zÿ‰µžKÜrûJ×Y +6‚tFúÄb>œ¥í¤@:b¸!.С¬µP0¹y e7ãÖ§Ûñ2Ó±§˜î׋WÏ\´_Õý©¸/1J|ËG24ú´.«)+s¹ÈÏRáai. 3ÈÀiPÞ'zÖ>rš ßÔ/y;RÅ4£dŸx¤8¹B;6xáíÏ™DËŒ¤  +Ô¤¢ÑÆwP‰ÛæÁä¸çÂBÖ´ðûI’ß4EÝ ^^0½€¥š)ÛQ©ûæG tî¬Ý{5˜UJ`Óžˆ´åÅU¶ºeËètNî}EEêizœ•‘tƒT¼g¡b•j–§ã*åiTªeÄô€å)24w¼F#g™€ Rè‚p˜µÆmóÚ“Ò²¬\.Ž%ÁàXJ½ñN·D±gShójc†Y«tÔzûãv}*†NX8á¥8ÉæÖ"‡V­ëa ¸}sWn’¡àîàZ:”œ«&åØZåÐàX†dúZ›džŸO4ŸôqÆÇ ç,6gèËŽ ¸¸çÊ'ÈŠ48©Úî;4åÈHš",ÈÚ2ˆ(ºD£q·È%¸„Áå0¢Ç=£Ýz5ÅŒ«ëo¯×ËïG:Q@•í.Åó³6÷yKrìB}›æÓaØôh°ÞÒ>çfÈK´+>CÃÈ3ôKò” Í Ä{<ù +5á#d“3ÿ6½æ¹ †V×rÓ‚f2ÒTiB…,Š‚Ð4g,u¹ÙtíKȘŠtòÁ¤} p„‚ÀË4rÇÀ¸òÉKå"ü©ŒeJUtOãq¢à6‹Ás. dsø›¹çóH³œæÑëmëž-vUObM³èçؾ1îù¶«ãâÚ±µÙ2„K!^KácaÜÅòW¬¨ŽDœÂ_Æ3BÜÌûëÁO]¿ð³ÿfÖÿñgv¤¦9îó»Àô¾qͳõš\׫Û6SF¹6HIyô1ÀÉÈ,èPþ¾‚3a+Xma4|¨3°9ãg.ö3 ¯¤i´ÚmLÓwž°ÚMõ'ºRf‰Uí®éãùï{ZsZ ++5#¯ˆXËD7LU/kÓ‘þÖf·yÄn—8 g4-¶vä@7áéFP d'H»5L²0KP„©;ŸZ¹p +Šœµ²1ÑèêÕHËÙ›Ëùõ›Ë‹›Iáòé HBÛq¤ëËÞ 6Ô0–´ÈÌöV… :GjnfS˜#øî¢Y\µÍ¹Y–»u½ƒ<¦(†›¦´ò›6h£ÃÄŠd39 Ý>ï”â«ÒÎí¾U͇ª.M<|œÀe¯ãÙ~É›û¦/?Mc+h¡Àâ & +-S”° ¿õ(Å::ê]ô.ö›|þTk€ßfcgœÎuóTó‰1!Ú:¼éK$%hAÔw¤$MÛÀì±ÈA²qr[§øvg`m\•Ö½ ¢”P[sÉ-duÛP2¿­;²ufGðÖü±«·ž"EªöEʇ­’Þ€ +ËX#k2<ÚSV·cŒÞØ],ÌrzŒæ(UÌ„‡™”Í‚Teã†'à~)·Fžâû{CvDµi·*†¶MeF¾†¥Èdy@@ùÕÅûlM4 Ù·­„ +ƒÎá¸h¯Z(Ú°ÊÞ ÖZ$¬‰3ì*ÎáûªmºžT0à¶Ü~G¦‚ MÅ°5ÊÁ +Ú§a#®ðRnÌTððQƒ|`Ñ÷6”N(ì<Œ!ª›Þgê—…o˜Íuº,¸Ào>”x© µ›®œQloÑAžNT2$˜di(j™[Ä ˆ<ä@¾ÿI —Ú¾Bv!®yÆ™ö$žúÌÄA£m¡Ö‘7ýíÀ‘"WøZ/`¨§—ÙßK`é¬*… ‹9ögžÛ°œ›úD¦-ï +ïyƲm Ñ —¹ÜÅ|JˆæXvø ¤3Uâ³'vÎÔa‹.ý(¡}»swk¶&†CB†íI +0ó2@#Û£ÍË.†'k·CúÕü!D¦FtËõºEüTt’Âp4 ‹®=žÀ®¯‚É'Ê" òŠ2A ¬3&‚QC  +öœ«ƒúq} {·¨+$»ƒž<Ðâ‚f{%ƒþZXùr®œ¬Ÿ®l£ôWÔÉfÇÕÊC k,Œ L µ_…D +Äcœœù„3¿WpÉrMÊ­Ó4Œžt–ªÖþ@E•:´:‚aHÙ`½dp2ë\0Ä×gi+p72{`0Íõõü©20¢{ çÐ#„• L80ªË³_/®píÉ ãÔZ™Á©4¨ŸèúÕ›ùË«”å´1ŽÆ]Ÿ`œz–®aàãÒNN>ãý鉭´o¤kð"S.°÷ب,Xò`«€ Ÿ»vÙaeB5c' ŒÎ# +Ç`xHœÊÞ)VÖ€›$LUÐòp—#d²†&M3uòw_Tõªq­ +‰¯«là¹à“^ç¤ãNò²ŒyYßÇÛ$8ÆÃhpéo,`%íæOüùÑ) ÷þdùÈÁ:êÞ`“9EF#x\{û"rÐù¡-²v‡]bj½ÎŒª-ÃÆÏš—³®#©É(c*¨°Gc DdGáŒ}.ÐnÚebÓÊö¹˜RÞžj4—xlFS·ž>¸nš=rÎ fë-‡Œ9¡½ôðPVÿåóœüÿ`ÖJ¥° +endstream endobj 1266 0 obj <> endobj 1267 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1268 0 obj <>stream +hÞÌXÁrÛ8½ë+pwFY{òØÎT¶OÊV&5åì‘ ™[奨qôóû—û %’’í8³»µ¥*’¢Dt÷ëׯ”l1zóó­d‹Í(ÑÌ„)‹Ò„éUv4ý4½y+™d“ùH*⃓LЊŠP±ÉjbF™f“).B±ÉãèŽ_\¾e±HÙù›ó~`ª@¦Bóõ¢ÊW«¢\°wem«y>µÁß'ƒ%í-ÅB³±2‰Ùäb4Æ‚dfê¯ôaéOU0–F(^`v³ÞÖEi7n­ËÉ(Ž2Ä“ˆ8aBé,˘ˆÒ0Œ|d‰&iGÈBE½ß¢ÝˆxGæPÈ~ŒÒ6xòLÆMô:ö.¾Ï‰˜ï˜ +e0Žqi‚±’©TðYGãïGHdR‘òÕÚß›m§5 aø¯ûÅúûÕ¦Æð—¯K×…^J%†#_²Æ—Pz_þÄ"á*ˆp ¥a̯|8¾>uþÆ¿ýwVý?þ›Ë‚NDJ9›,„É þ¤Í³å’Ý‹ûÉÔ|ÃnìÆ¢´’ÿ(%·3Ñò¿a°QŽÁ êö™’Æ“tÊÙÕš!ÿCòßîÊ:ÿÊ‚É?ðxìÏD–øj  Z"N„Žh <‚ÂÓw|fç×ë áå…çÛe}³]Ú«|g«Ï-n"„ ÄàJêM×å¦fS$Þ.J^©¬…9ö0ßñeŽºà;‚$á×ùªU•¸U•Ô 4Ûäx÷ø.¤±„Yuà³õöËÒ6!7¦#¡drlú‘L³šN÷}³Z¨8{ª‘ÁßitæŒæ :}:m1'æɘ!ßi¤¿×ü†ì=äSçE¹è†î%¡zÂp*Œ1òÏa]Y:]~­Ÿ¶:›Ÿ¿è)ÊDZSð×ïøš”F!-¶+[Ö›󠳪íKÔð|XK"³#œ³Ôt1)²,¦ #ÕêÜw±F–ÿ¸}°Ób^Ø «ï-ƒ5úß*ÄÉô¥bóÀ•øºùJÿD¹Çø’;÷ÐOŒö1÷fè"õV¨MÂmŽ¾áÖÙnØ#ørÏòrÆ6H!õb¬‰ +â°Ü¢Jú*à&ĬMÉANCúÅ¿Z·dÓÂÙ*0|„•þŲܛkD£†ýß4Ï*Ó„äšý‚S$†»@f$U+œzí^š÷Œ›´tÒØ ÃÁòRu›E™xiìå°²ÿÜ‚3¶*h!)=w¼,VžZ[äQóU›ƒå‰¥;TNÂ}µK8¦ ÙAǾݭѫ²±Êh:ÅëÄåÓ3ˆÈó™rœã¿<Ôź̗,¯|%›¼Ù*‡ 7Ž‡¤uWM³l%/ÜR¯95º Øàp ð +ã×ÐSw]h‡&ôçÁìñÞ–,ŠÇ3»$•demKS|õ8HÓ‡.ܸgi±aÛ Z3óTÙõÛ(NdÜÉ÷9ìù*’§±â¬^³bQ®+ Ä`¬}i`®ä Óú`°Q‚—“ÝšO[ žÏv#QiØź-¢4Výtcc€B1‚¤‡Õ^ \â %Þ'uò½y?„ãžl7®°¿èe)r´IÂÿ®Î~»¼é­«XJë¯0ÖØýÈcø퇳ów×?÷Ö@Óë Ô—=ÎÖÕ€:"Šº¨v´ Y|röÓÕeÏ‚q¼ Ÿà,dr@“–P%Œµè |Êw¸õð°ô9 ±¯:ÕvšÞý•ZÙ¶bÁ΢¦ZX—Ë+íÔn69ͯʵ¼1ŽDd_^ +ú`:]`¿Á"S‘/¯|6£®ÑŠŸUÒË8·ƒz˜4¸nQ7Œ¨²bîµÈnœ¶'=R„] Ú= ô\jŠ‰º°Ô¸óÒ-3˜¢µ>rù˜\ú°­ˆöåßÔ£/±µ£Ö‡-%®²ùlw+ÜS¹š +l:W Q¼£U½Ë„¼BªÍòUR•9¹ ©2'”ênÒè÷?hKz0´ºÒ¦ÎË©e_hV3Ž¿š£aÓ{tªVô´ŒŸ¡YE‰–†˜ˆÅ ¯m9ÅàÖïENÅ2œ`hàé—ÆkÏãTHM©ºlÓ[…ˆOilŠøqæ1ù½*ó}z½”øv<×"Ký„î®0¤+™Š¤ÝTvCõËî®ò}Qžoihï£;ñË ÓSJRµÚ³Ò‹¿lrâ^*¥„@MÙaÃݜɎ@xÿîúüãäö}Ù[Q­À€=µuñ»vÓ·’ˆÌÄÃ6𜭾¢ï{k;-¬9ùÝÆÿ)$ Ã7'lå““7Œc¤*ÕØ+\ÉšŠ«1õæ½Ùæ¨r ;é9å‡ù]HLm=†D±¢ÑÂ^äОl‰üú—ë‹Ë·g¯&7¯.û¤ƒÆ+ûˆt˜{<CÞSÒ ÚžŸÂù›ÞwHzŸ©¾å}GÃÌÏ÷ÿ£/=¦[Ú×Wí»k:½û0¨©Ÿzc½¨ç WÝߌCÂ,92_nWçd±oÄ}¼¿œŒþ-ÀzÝ;/ +endstream endobj 1269 0 obj <> endobj 1270 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1271 0 obj <>stream +hÞÌXÑnÛ6}÷WðQ\gV¤$RzÌš´èeEêvÍTG¶5ØR!ÉMóIûËKR±$»iŠ¢À@¤)Š¼÷òœs/#ÙzöüÕ[ÉÖíLGÌ„)‹SÍ¢5Ål5ûm1{þR2É«™T,Ä™)f¢P„Š-v³«ˆ0Î"¶X¢ʘ-îf‚ó‹—,){ñüųgìMÃe*¢ ^7ùnWVköºêŠf•/ þ÷âwì¹±¹R'lq>›cAÚfézÑaé¿>—F¨ Ä2ìºÞweU´v­‹ÅL+a4<Ò"ÑL¨(Ë2&â4 cç›u×¾„ÇBÅ£—MˆìK8üŽÌ!cx§½ïd˜L¼óQâ,ü#çQ,’àž©Pòy‚®ás%S©`²äOãÆò#6©Hƒ7MíÆn÷ËŽq-LðžÛ7…oÚ’ÏaoPW[ëmHáRJŠÙ’y[Bélù—'BŠÇx†Ò0æV>´“Ÿ_kŸ8íç¬ú?žfO!Ò"¥3ý)„zB‡Üól»e×åzÓá0£ e×E[€Q$dð™+p2(nE`£,‚5hû£1Q=`³¥š!ûCgûÈa‡õ~WT]Ëö³->¶éã(l¦gîä¼ púeE r?)L®×cX>t–:~Ú(š() 1ÔçÁÞT„ç΋Åçz¿-Þ=ct©.ЊXhîìsppvÚ¤šRJLûp%n|– ýwÛ¿}6aÒmH¨c"±¶ZHD˜=T TàÑ°ÎŽ_gî#Pî}€1» ¸¤'ØsÇVËP$ê;ÌöyÓÕN»‡V’õ'úÒˆ0ÂW?Ô(ÖÕ +ë*ß‚Ñ·l™WìcáÑ‚C4GhIû0¥ÎcK›]Ý€ +>®«eáâ¥(^ +ñ*ò¥£‘z 3a4Æݦ\DœDÎ2Æ£GGA»úó +•×Ù»ËÅõ»Ë‹·£fÓS§žÒ“ø ÷GùV”s¨Ú„9n¿·÷U—ñXö–eªg«0êžÁ‹Hyb(»õO +®ƒ /núl Q¶n +©;'ŠÖb‰o6yóËD*y¥²!‰;mÒBTcA~•S³+Æ1„^h= bpÃGîh™p@K…ïM¼öðI ɹòi9©Y.gŸš‚«DdÒϲ޷Û{†°¢È¾e—¨¿ë¦×ñØ òË |&g@ jW/uh»ší©ÓòØVµ»+»{EŠOø$tbÀòú Ò¨p%pxmÔßÐFjÑG•dC}챜J=”HHÏWDÒd§Ä†3É&êcR¥§ByJÔ¸ÌQî|l/9JµÑÃnDzlîX¼&ŠdÍ™£CTN 9ï‰/_ØâµHz2Ìì Sòua&§ž|[œR ÿ^ßUü¸*¡rH‰-?$KîšL|x’0Qs`ügèÓõžšmqZ§Œ ëçSuJ¢LüQJz"¯Ÿt?˜¤µJe¬R™SJu„ $ý>Šã³*&þàÕÅÕÅõÙbºÀ¸ÄUÓjˆ´°-¬zñ³ÿÆX³þ{ºæ¸ò÷öÚ_.,D“£2âP·(·AUÛ«jsjÁè®E'‚µ¬µtB°E'­õeXÙ—òt[¡Û‚¿.m¡ûXÕÛ>ÇMdN}·jô­¡šÚRØEy)­¸Âsm/yÔ»çHê”ènyx²e½ûègçëÔö}õ«›ÐÙfcÇ`ŽWf\†ÿ`ÉÎj +endstream endobj 1272 0 obj <> endobj 1273 0 obj <>/Border[0 0 0]/Rect[502.2 571.26 533.52 584.76]/Subtype/Link/Type/Annot>> endobj 1274 0 obj <> endobj 1275 0 obj <> endobj 1276 0 obj <> endobj 1277 0 obj <> endobj 1278 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1279 0 obj <>stream +hÞÌXÛnãF}×Wô#‰X=ì ›dÞ¼3š`a+YÉ>Ðes!‘†DíïØüÄþåžên^¥qœ],°ŒL‰duuÕ©S§Z°ûÙ»n»?ÌŒbI”2¦"¶/f›Ù_–³wl¹™ É"üÑ&\I–¨ˆG’-w³Vx¤3Å–+\DB³åÓì×àÃâ#‹yÊÞ¿{ÿÝwìzŠ”« ¾ßç»]YݳOUSì7ùªÿ¾ü+VRn¥˜+6\˜˜-?Ìæ0HˬܕêMÿmÎEÂeP »©MYkk±œÅ:Ã~ ãReYƸN£H»ÉÓÞÇ–¹Ô£ûˆDÙ›ØqÌF!c¸©Óvó䙈ýîUì\ü1•æqðÂd$ÂyŒË$œK‘ + ŸE(ð™¸ß mD')Oƒë}í~[W O‚ŸC{§p¿ïe8‡¿A]Qpív#Š—”&¡€‘/™÷%Η…17 5>#‘0æ,÷'_¿õ÷ýo¬þ?f³  O)‘ÏBd&õð_®y¹Ý²›òþ¡A2Up`7Å¡@ (ÅEð5”(Ê XóÿÁ‰´6¨Û¾¤ãiI£2ÍLb‘÷yüüéòæ§Ï‹pù¾J5—n§Ø–ýÝå•ànü°¸ZÜ\.§ï¥ôŠûò§ÏËóË éÀÊ.²_Ëœ ÁÑ–Ö¶`»P(\¹ï‡†¡¢«ç8ß7¡¢ûµ½¿gÍCÞ°Umˆ[,ïh¿dœ¦nÉÝ]YåMYW,¯Ö¬lXy`åîq[®Êfûâ 1—† è,ro—ÕCáèK}ù´õd›ºÌ¤Ä3Fd>-Ö[ÛÁuYF꓉Wâ4ë2陳 ^d{Ï•ìÉú@°œ§z7Z€y<; \ºº­*¹Ê†aj!/}žš¼)vEÕp¶|(Æu˸³¾zëªÛÑd J@ýØ”ôvÂãø¿ê*ßÚ´­òŠÝìx(ÖÖ¹9ššÑ6_I÷ræW‰Ï}]!Áuµ*‚é·)·E(b”"gCIuˆ=;¼TRŠ'½GÂx£²e‡&'‚7Á3Œº« áUÃÎ_)™â/@ßü³ýRÖî[åÒ¶HÏL"h¥üùÜ‹3)7ܘÿ )¦ QËu]Z.Ø¡(Ø? °¿wÍ9Bdq‚¤ ›„œà1ztßg{8Ç(Ò˜Ö‹©òðnliøÿT6(cÀX<¤…u±yº…Ñæ„•ðä'¢õÑ#Ñ.4¶-Á±§¤ÕúÄ>b9AÖ™oaÑ2]ˆŒPiz|@?eq_å#‰)½oÔn±ÞI_ÀX]ãÒ•¶àYvŽ¢ÚŠkžl/ŠŠ¢y(F~%ðk‘¯€áuÙREÚc²½_Ëõ1·N‘OršÑ¹" и¤å“°ÎAIiO…u21â;éº"ø!ZA“ÃÓˆ® ®{g ï®}Z¦ÀbŸ6ÿs¢íVMNÁÎÇ% œ»S8¼ÿòãõ—«ÅÕr\1ÒpÒ´)¥zÒ*.¨‡+A9doὓ’$è›g #¡ŽÛmM" ž1$ ÒZ=€ð)4N=èxÒŒÆ :¤ÞSÚ¤^A„„V‘ØV!©UHaŽóÏ´x ÑúæŠM¨“‹Ïõ-Í+£I†hÏÛkn,ŽNi^™ô‹gÍ€æ]½Kõî±®[ËÖºÃZ7 ½÷MóZçJkÞqêïÞVwÛÚRmàSÙ˜xš¶yIÖóGê©pÊ­Zœ†èԌϧEBF‰Ì€ƒÂ}{†Au ÑV»Ú¡¸;¶r’3¨­ÔÄ;ëâ°"­‡¾”w`.ÈO”-aî"$hNäa#´Ó?Š†‚ƒ¨/­EŠžJ],ˆµÙâÙºßæοe€ P¯ CGÊNén…H»äù¬±×Q¦#(ÃôUoûÌeŠ;ô‹–CSž[™ˆ)*nçÐUÝß³ adIÏ m¶•ð‡ËP*{8-. ÅC'ü ¡‘œÑe7_®7Ë_&¤œÕf²ëº=MYbÒŽwŒ +ê/ì%ÄÔG×j4Q™&*sC”£øt SÂ/A8-V÷õ£Ui>k^ú¤ã99à¹vf1^”»]±.á2T7x.¥‰ÍѨ žè éT¡PßáínÔÁMëCßꈺ9–¨»£m|ìÙŠÛ-+KÅIàçÅQ©i™ñ•EüæÐm=tÄc’v®ó!ÖäB|Ûæ¸;k߶ ‰({µPb؉å`­3u×=ó×c^–ì¹ñ®ÁÙD•´2CùYÍ•£Œ"[ŽÑ”BOÔ)·6]¶ŸBRYðª9¶ ©ÂîܦMÊ…:­±h”‘Þœ¬ŒV¾a‡ãjU›ãvLB¹‘Ñ°Wtº( ›F'^ý¤Ò +j{B€Š¹.± §¨48L†áä]{Ò?ç¹pÛ*E4P[n‚™ÄAÑÙ蟔B²mòdðs(”¢a>ò¬½}| ³Œpe]邶H:×GMÚ R“kÐãBÌÌý ò[àŽå0•J{@щ퇙}Ø-aº­D™ié,vŒùk°ªvªl¦á‘ñP*¿…ãLóA‡å˜¼ûvãm_îiªÐÁý±¯ÑÎq?šØseëK3>ð±bwîTÅTF™ çc±*7%ˆ–(²:îîŠ=8™ì ÷ëlšÀö ›2hgŸvÐ)«SÅœr“üY˜Lð8ĉ'• 0\IžS +endstream endobj 1280 0 obj <> endobj 1281 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1282 0 obj <>stream +hÞÌX[oÛ6~÷¯à#µV¬HŠ”Ô·´I· ]$n»! +U¦ ¶”Ir³ü¤ýËCR¶d;mÓ 0ÐÅ"ÏýûÎa8YLžü|ÉÉ¢hI’(%qª‰ŒHc&óɳéäÉ N8™Î'\þàÆÓ„IA±HéjÅ™$Ó"“éí䊟¼ Š¥äù“ç‘ó&à)“´^4ùjUV rZu¦™ç… þœþ +š¤Ó¤˜$!g\+2=ž„ ÕîInE¿m‚'LÐÄ‹zÝ••i­¬“éD –hðH3¥ 2Ë2Ââ4Šbç›u×~™ˆG! ¸@Úàð&™ BFàcœö¾£a\yç¥rþ–2fŠÞñ Tð˜¡à)`28\“Íï<‰“”¥ô¼©Ýo³uÑ‘@³„¾ ìã~oÚ2Á^ZW[ëm„áB'/´%ó¶DÜÙòo ˜¦"ˆáñ„'y{ßy½ïþ…Ë~ŒÔÿñ2›©YŠ9ˆ|"½‡oÔy´\’‹rqÝA2%mÉ…i @JÆéÇ@&©™±¾ü}'ÂV°Øî#Z²,u ¶O°\'1K¶öÀ‹Ð~:3óÛ“jv^Vm0ýk ×-1 €8&@ =Zm„…-…í-é® q”Cíº¨E[mç§g—#5‚ÅnQè Û ¶NIÛåY™ªcätîÅk·Q³H©>+j«¡¨×U7R!™P[¼×Á=ŠHÙ’ +QÈ)€®øâÞ ió•!yëJ!eZ«{­½¢‚¼èÖùòˆetÀeõx¬žO‡><“é^x0‰‘ùG·ŽÚ„2e€udÒdc‰î‰TØ¢¤gM²nÍìñ8/@Žjè…ú|-À–ìPeÂƸ€uk(]Òʆ²ÝqZ2Ý x ¬ÿöý³£ã÷ÇGÓ£‘â„%CŶî(óþøzð_LB›æÞ©Ä®¼¼«ºüŸ‘÷Ë´#{|€ÒV€ iû_•UGf&Ðtwôc]ÎÞÞŸû±¦ =híÀ†6Jé[*JÆÀ‚'h.²—]Žd€,е$'7e†µ…ë‘’–7] -~µø›c«T€àÈ‚Ô·ä!Oòâz`j㜩xXNY/@z¼‰«ìဈ0L´Ê/bo¹-»ë=€p>œ|&<Ûð#8_)al'šÙ£oìÂ6v:½ð°AFhÌßë²ÁíÒKt`fIíF3#y5#E^‘Æâ¬jÜ ‚ãÒ˜ ÏÀÞÚ=9Ø`Æ©‡Äc¸x0·ŠÞa±Ç­;xʘ‡ðäÔ| ¨bŒï$ïuí•EÜæFD8yú¢® < +Xx7?õžëÞs!D¶á}Ç|WôÇ'Zåx[™Çãp)&¸ÎóT +K€í@ýÀÞ¯±£2h@÷í°au>XÙxU·7¦@­e¾ÄÛŽêÐïú~®Îlȧ!~H«ßûý´®[Tc~¸ž¶C=y·Æ[»£ª|?œ%i&¾1€KTºn`¿BÅ?JEÝ” +0‹íLÙf¹ ôÔ!ýŒz£HS?h­ƒÎ=‚C§d1]¬‘ÀÚqFáÜ$zªÇó«3|VB©Ú2ub–A×Oc±ÏðÂ1ü+ÛÀ`¨Ë§x;‡þx+ç–éåp¶ˆ¾7cëìînLÀñ¨ÇÈ¥q·Û·#8qì±ûÙë—/?Áîñhª¥¤«I¹¨jÛd õ¦÷\÷©C5î|KöWô 2™¦H) +›7 ®,¡eGýxwE5þãËÀ G=ØZ7ÖR»2ôK÷ÿ÷NíúGüÿ"&ƒ] +endstream endobj 1283 0 obj <> endobj 1284 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[305.04 584.28 473.22 597.78]/Subtype/Link/Type/Annot>> endobj 1285 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1286 0 obj <>stream +hÞÌXÛnÛF}×WÌã²±6{áòÒ7×± ib8jš"è#Q + ‰4D*©¿£ý‰þegv—WÉNÚÂ@a@¢Ii.gΙ™•„Íìù÷o$lêY¤! „IZÀ>Ÿ­gß-fϯ$HX¬gRÀ?|“I̵‚X .,v3V¸S ‹%^Ââóì={qy†'pñüâÙ3¸Ù2ášU›}¶Ûå®Ë&߯³eüºø=içÉp sÉed`ñb6Gƒäfé®toúç}0—1W¬@3p[š¢Ìkkër13aŠùDÜDÀ•NÓx˜ºÌ"Åã¨}Ž)sŽž#"ˆ¶1ãÔ¢> “6yŠLŸ½6.ij@‡Ü°{PBsƒ—q0W2‘ +c–Ä×ØÝO(‘0NxÂnö•»·:,"³·}’»ûûºæ/«Jצ+/¥¢˜£XR‹.–¿Ã#¦‚_…Œœåþ}òïCï_ù±§±ú?þ˜­‚ŽxB5¾ +"šèá?ú<ßná¶Ø|l°˜šÕp›×9J@k.Ù§@¡(Y¾â-ÿ=ƒce¡n{IGSIã£8:%gA¡³2o^e»¯ïªrEò/Hþ¨…ñ—OY¶t%y’opß|¼sï¿à™¦}ŒÕ¾ÈËæË!궗¸²°×wMQ•è;Ûo;4¡f Ô£ÈɬDÕ%®ºÖP+xÄÏæZ¹~dÅ‘‘QXZá ”4u‚½5uW”.÷à4>^=È8¢Ïl.'Y©>Špß¡© Ø”ÔDØ>G‡tQÔÎÑ[vYD‚}ÎS ç1tŸÓw—èëm†(b[|5ì`¯±IÅ’};nèš‹h˜óÖ}ÖªLŒòäÑ츭š²‰Ús¡'”xÒ&> [wŠ9F!" ãDV{š¦ñ=!¹DT” ‚w¿uü-ÀŽ¹åü +endstream endobj 1287 0 obj <> endobj 1288 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1289 0 obj <>stream +hÞÌXÛrÛ6}×Wàl#$óæú6n]Ûc+I;N +–ØH¤KRqüIýËî $ÒŠÇÎ¥“ñ E‹öìÙݳK 2½<¾dÖŒ´"1OH˜h¢8©ÍèfôËdôòHA&7#! ‡?øIÌ”$±âŒK2YŽ8œÂx˜*2ÉᆋLîF×ôàðˆD,!û/÷þ™\ÔH˜¢Õ¬Î–Ë¢œ‘“²5õM–›à¯É¯`I9KSd,˜Ð™ŒÆp šÉÝÚý¶Æ"f’p ¹¬VmQšÆžu8iÉb ii¤JÓ”°0á‡×t¤–„”ÀÃ0é|G`"òΫÈ!ü= TÈ"zO$Á8‚Û8K‘ E à»ïSô#Œ–ЋºrßMWyKÍbú&°OŒû¾nŠ` xiU"·Ö[ŽtI©cä ±¤ Ë¿AÄ4•AW.bBÜÉ›ÏÁ¿Ÿû|â²ïsê¼ÌFAi–` ¸׃røJ›{‹¹,fó‚©hC.Mc ”b‚~ $Ô$5SÖ¥¿ÏàXÚ ÖP¶›ŠÖʆ…:Ö½j¶éÌ8]5&˜ü½©OÁÒ4” ÅŽ +•‰Ýt~ÛU™-HVÏVKS¶¤g-inM^ܦ!x¤€„„3øúµ®óØq6¯ûw°ÝÛ¢$ECД‘+{Ô=ñâuN1íOäÎ^Ÿžö|,Ü2®Í¦v9i+RÌʪ6`¶pXÇ2eZ[¿E¼Þ¹ESç(#ÎRè,ñ¾–áÞ{“Akº€kDWö*<ô܇”ô%Q1•>à‰­ë»£¢* ©n,U7˜1­¸,‹ :1é}Õ߉»biâ²ÁÞ¡ö% áìx7¯éÔÜÜ] %Š–WmÝÚË)Ÿ¿—aè«aoÑT¤i3Lañ¶!™ ðÔ49*;Êda³ˆÀ·èÓ Ò!Kw„úâäìjê>wI‡DJ_—€¢5.t wíZ‰³'8‹Â]9F~?ì@tM¶4$kv Mlü‡@ekȤ[G]Î…œÉxØ …¾ôÑ÷p1Ä)}H¸’»¢o€6ôʬëUÒ÷*Hì-Ÿ‚1\sãH÷‰ä]ñš'ñ¨“¸­ä¯êøëù‰´e2îgìZ^»y‘ÖìC RÔ°ÀªÛš{µ6Ç…oþDÌõ~M HéÂ0Q”Mk²)ÂÎJ·K–GÃ’;ÄÆHiˆç1r˜œM"z"Ù&Ptgˆ.gË öW\šv“Ý‚¶."ý¼HY(‡=–"ÝpÁÓ‚rš5ÈÝ¢ÁÍÐ9âmÜ]K’Úé\mþYµ™eS’oïK<˜í¢8f^´¦.ê:Ô,LÂæªÌ Öjæ°+TÁ¢èI…º­ÉƲ]¥n›×®1JFY1í"óê¾l³O=H)H‡›äð¤JFfZŒ«Õ;:•†Ô€44µáxG]£gv¹8΀°.¯ ûH çYýÓƒš‘R¦ë¢qA¸¦·8ÈÑò ]šý܈˜:Ý"Í+Èb¨@¡·Ìoáý  ý†8,mŽo½-·Œ÷Mã4€V‹ û ˜û]ßÎÕ©¥¼vF±`wYõ{¿ÕUƒfÌw·Ó´h'kqš ÍÀ¼ŠhÈó‡q„‰ IåWÆJ®š?žÇ/0ñçÿ’*UmÓØiûÖ@oDosù.°ãìzø‘Ъ4ÎQOèÞÙÞéùqOëÆu4T;ƒýäb3éÂ(§$¼Â(—Д:[T3>•&o‹E{¤)ÌÂ~û¦ö¿òƒÌ,€u`ÆhúÕ +úè´p㉆/ +Ç}H\´ +ðj  +†q|†‰&puqþöðòä©ûbó§üÈv[!OŠZ§qÈÃê-ªbK•rT)K•êS¥:ªâçPuyxu8yFéõ8ƒi¾†·ìÇAÖ ±xµ¿wö¨ÁnúÑ.ƒ Žaϲwr úòX6¨G³¡6³Õ"«V¯àü Å &'‡çGGúv$§±à;SaÆób6'UmïÝ «†×~Ë„ÿMã?Ԥ̚ +endstream endobj 1290 0 obj <> endobj 1291 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1292 0 obj <>stream +hÞÌXÛrÛ6}×Wàl*‚—¼¥‰Üº“:[‰2}àP°ÂŽLjHº©?©Ù]$ÊJœ¤éx†â ‹³»gÏ.-ÈvñüçkA¶Ý"Q$剳„(NZ³¸]ü´^1î~ÛUÑðÒ¦ÆàZw9ÆKÊ$Å€!–ÜcáÂaù;Ò,¡2ŠáÈEJˆ³<ýÎ.Oý>ñµÿÆêÿø5›•° sÀ}x2«‡ïÜóånG®ªíÇ’©hG®Lg ”b‚þI(Jj6là¿gp*-ƒ¨ÛÏ”4¼˜¤ÉA9/GüÜa Õ«XL·÷w¦î;_±‰3ü“C½¢ĸnªÖ”}ÕÔÑú©ºËs|åqyË w£o÷¸¬Ø‘¢uû‘þcÑ“noÊê­®õéIR·2¬1d_դ؛H`É0rmM<_{L2ç¬ñÑgzñîÍ›ºd±{ÉîÙµ5FIßj[7­«n„Έ³;K @R +Täé÷ÔwBwpÔôÞžC駂¾eBè¸þ±üŠÇw æÒÜëÆå3Ç( ª†$R,?èæ|ÙéõåêÕùËpƒ æú‘yLºù’t0 šq¸‚ïµ8è8 +endstream endobj 1293 0 obj <> endobj 1294 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1295 0 obj <>stream +hÞÌXÛnÛF}×WìãnnöBî’ysmÙpëÚ†­\Š ŒLIl$Ò ©þ¤þeg/$EJrc‚kJ$gÎœ™93 +GËÉ›‹{Ž–õDI¤YŒÂX!ÉP•M“_g“7çq4[L¸@ þÁk*Ò’Q&Ðl3a`…²0‘h6‡ ÆC4û6ù„Ϧç(¢1:}sú꺭©Äå²J7›¼X¢Ë¢ÉªE:ÏÈ_³ßÀ“tž"*QÀ)WšM0hÜÌÝ•ìM¨HÀ583è®Ü6y‘ÕÖÖt6Q‚j))D…L’Ñ0f,t±ÙpíMˆ˜Špp1H{îèH, ‚›aÜÆn€ñÈ/#‡ð”ÈFø ÆIÁ¥&à1™gì¾ç&ŽPÇ4Æ·Ué¾{ØÎDÕø=±w2÷}Uç$¼¸, ·6ZfèBi×Á’x,Œ;,ÿˆ*,H'ã!g¹ÿ;úxìïw>öc¬þÄÙ,HEc“æ³ÀÔ¨þ§Ï“õÝåËUÉ”¸FwYAHI9þJô$Îh[þ¾‚µ°¬ mûŽV㎆•V£n6è™AŽë&m¶5™ýÝ÷(§I™² yߥÜwi'.â›Ç&/‹tÒj¹ÝdEƒšUÚ ú1›ç‹<«ác†×3úÀë¬ÉÖšÖÎ…µáà rá^Ï Šî­Å'ä…$ò C@é,²>šëwWWƒX w܆[åÓÖ”(_e•9ó´µ`6xÞvœ Ý·øhVyÝM‘s:wl(nƆ‡ö ¿O¡¹^Ãá­½†¾×¿J¤¤Lír%Z÷Âcn )‹¬%jaj$Æ%c½. ùÀß@‡b bü¶åΈ péÈéõ}·$>ºÀ<Ý va´C7öq{‹´EL™ÕJoãÏA.I…-+1`Ö)­˜í×T½[TÆ—4ŠöØé§H²«»¶ Öå<5F SÖ€0™íúØsWl— ôDxb¸Üz·Ocöð&¢Lû 6”¤q¼Wý;ïµó©Ï Ñp±%pÔM‡ðÕYÏ +êט錄F|¯3ØUÇ)tÅÇ1¦DÀy€èÈ@de[gG4Fìãñáj+ŒÍ'̽ƒÒ˜—–•m¿µ’‚ ÏÃQi]9¿\Z|I 9ÌÖ@$T©aåø&p>:UˆÊì—^Kž•‘@…]VºÒ“É¡ÒóËÃ1)ÑFJt+%ÚJ‰H‰çJÃ`‰Ô0àëôæýôn@T¸ÜÅÒnUÂnU‹›iã“e ÄÐn}ÇF]•X=ÄZ¥ußæiñ€Zºí‹£mSwŠS˜´!l”¸1¤hnƒ–fð†fð8*´Iç°¿… >PØõÌؾlÐ<-Š²AŸýü`ýä`¹8°Í`Õ³¶#êè³q«$ àDé¶)7É­aÇdö†ih ¤,×0+xG°þÏj`3á5.79¨K‚SǼÉ-ˆgñfÄÙöN0¦8pyónZìäøüòãôìäX {Øç8fùhŠÛyÍ|ŠûmlfÜþà˜L,“|—}Kµ£ãµÉ6Üôn yÍ^ºw6rðwÈ™yoìðääöêäô?’"F=p0+cÎ_;è±!  z =Dƒ2$@µ ;lgRŽàÀÏyHXµãÛ-óÜjþ(*Ø¡žÌÌ3Å3_åÁ:3ú¥]ùkœ­ý†í_?0ûEð^xœC¥@õ—[è÷‡¼nÌg_äÄ´$¤yhKÌiu¨‚Qeî•æQóî—ï'êöæÃhdý[ U¶Ü®Ój¿{9cßѼ€`v9½9?6æ°%9ÙÇA7y¬òåÊì æÚ­s +VaË„ÿï„SÎ +endstream endobj 1296 0 obj <> endobj 1297 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1298 0 obj <>stream +hÞÌXÝnœF½ß§˜Ë!ÉN˜f€Þmãuä*q,{›V²{AwY› +ƒl?Rß²gf`ùYÛqUª"Yàû=çûæäzööý'×õLKú "M¤Oªt¶ý¼š½=æ„“ÕvÆññ'…L +JŸù‚¬ng>¬0?ˆ%Y­qáó€¬îg—ôhyL‹È»·ï^¿&g•Ç#&iy]%··YqMNŠ&­¶É:õþXýOÒyRL’9g\+²:šÍaиY»+Ù›þ­òæ÷æ +—¡7<â1sã¹ß…I$#ѳªt¿mvë†xš…ô³gï¤î÷ªÎ¼9â¥eaŠkÓõM½„С)˜‰%ncñ¹‹åoO1 7Ž> q–ûóä¿O_øØcõü˜í‚Ô,2=ðÛ.øz‡ô¹Èsrž]ß4h¦¤59Oë’qúÅ %M7¬Ã‹àPXkðöÒ’Å‘cµ½Âã: XØsÚ÷-ª}?ݤÛû³¬X€µE‘|,7iî­þêyÛOc(1Œ%KÙ805µ°ä5ãä­IRv(g+`e+é÷,NWËÓÓÅÇOGË#טîa;#‚Î(î +_7I“Þ¦EÃÈê&øB ÑÞÕó^x¬ö~±N²š”wMVIŽœ6dÄþlýÍèÛÉîCí†"0®wuº!·e•’毖Å/#„˜i­våtü¦YAr‡#Z”™ €¹ÈÛNϹd¢ªa_Ø‹‡¢I¾ºWÚªÄ,ÖnÖ™ tTÒÎ{¼,l/á¹SOÓh\QG +æf<ùf^áuYÔ Y㥛¤zÕ5Cï;)DÜqH9]Òò+†Í6é¸uÈG+>À ½òF‰0©„…y‹ÉÎô{I²€^ïL ëq8˜¬¢ÛDÌu ±˜8FÈg1€$ h§(”N.îÒu¶Í÷,=ìOM‘|à ڎª‘­!²¦¥‡CeD_Y&ëW)&Ò((—…{»Å[ÝzÚ8Ýa=æ‰ñ‡mäñ§Ô3«ÄS'†­„9Ù’ön¹k!ëœ!ÛítÉ@Çùz°âs$šròåüjgƘ^o +‚Yã4ñpÈw)I¶[ObŸ›¤Bºn0N0)Ç@á‘üýbµ\œ/£8"ÛÎ.a§7µ|e8—ÊЩ—*‡“êÕ»ÅùÈ´fƒÞfX£ÿÉã}ó]ÒÀEdÏsɤìW ß„vããQ½pï¾”d ÙM–£ÁÂǸ‹ãŽôÍ+á­šm0ÄòÙ_:Š}¡]ûIìÞ +ZWæµ!Îx?.éçì×4ÇQѽ† +9ýi¬1lôpkÐqÃö˜·O|úýähÉGH¦†í·½™XRzèÆÿÞˆRVäÄÊ.NaZÜÀ\Y-rŠƒ¥iÍãulÄ¡mÆ”‰Pr7FNËÆ Lqå´¶ ˜ÿ=µ•O•¥ÇÇs$ƒVêÙœ+•¿ÿé(–`§®wUäåp'õî + PÚ@9aî©l W7#3;Ú¤™eM¹5\­{> Uf¿Ûñm,vT×Wô'©¥yS–9¹K*k §É35ª­^Ú캀P¨Áíñ®DÕIä¨u»º90Ëi:|ÔloU¤f…c™ef®âÿ ³¶…t_!8&clŒ¶¬4;ð¶S'°CÍ÷¤âS|˜µ>˜5g'§G'ÇÇãšû,Œ{ª 'ù†  +{Põhy¹¯á«a×\1qk´ yÕès9Zã/Zá”ßc²qWpé+õ$¶é¡b´rp<°úH„'*&š¢ÞÄ×%–®Ñ•äQ?(,…a``ÀòmiÙârŸ«4yJcÚwSÝ‘Àõ¬ü’äfÐôÍdóµÏl"û››FÌ›¦§ÉíDÈâÓ ”ê¥B–Gþˆb­ˆm%ì·¬Iû)+ö!ôe"]7èÀ®ÈÝ´âG&–ûð¥Þ•gFp‚IGîo2ˆY§nìÛŽ{-Óÿ±G¸¹Q.¡è h5-àmô¬ù Š4c‰ÛD8±qæ‹H|X† èÑ> endobj 1300 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1301 0 obj <>stream +hÞäW[oÛ6}÷¯à#¹Æ o¢ÄG/MƒM$Þh÷ÀÊŒ£Á–In’Ÿ´¹¤dKv²v][  XW~÷sÅÑrr|vÍѲ™h‰R–!•i$ªÝäfòã|rüŠ#Žæ7.ƒx–R)P*eÍ×V(SF¢y'Œ+4¿Ÿ¼Ã/O_¡„fèäøäÅ tYžQ‰«em×ë¢\¢×eëê›;òûü'ð$£§„J4å”ëÍ_N¦`лÉã™Ü™þµ&SžR 0ƒ®ªM[”® ¶Nç-hª!#M¨ÆDUƘŠ¹…tÃCȘ +5zñ/ÈðޖÄ"UÖçîãI—¼Lb„ç–HEüˆãdšÀiJ¦‚g\@ÈœpøÏâ}éóPiF3|YWñÞb“·ˆhšâ_Hxââýº)ÈâÅUék²e¾\BèÔ×ËÇbºX±üIª± +þOŠ–wǽË玟ùÚ·±ú~-tAjšù°® LïÁá_úœ­VèªXÞ¶ÐL‰tå’rü‘À$v Ú7Á©¬¶‡ˆ–ÔdÔá ^ש¢éÒŒsŸ‹ñ/ÜÍýeC¤p9+["aš\YÚË¢<³Ýå¬vvŒæoxû*¢ðfzÈDûÏ™Gsƒl‰:3I4Pˆ±-#èm`xv1?½¸˜]¾¾8›ÍOgW§32ÿc£©ÙvEè°5­mÝÚ•-Eó[‡âŠÎpŠú’ÿÌ×piÚ#Qì¹EEœúþIðæ oˆ_x¹ºk‹ª´«#¨ÆåP’m·@U™;do<í9›ßŽ£’ÍÌÓÑÇúæù¾W ·‡Ï©ìÃïè#Ò®ä1ü:’,*JdÇ^›â:¶sUºÙTÅ—p—{Fy–ì“}`RܸܧO£ndé$ɸ¼øú±líÃ(CŽTíO`òͨ “ç‡@ùuïp}X8¢ñ°,qœÝ nÃ0¿ÇÜ”Á{šež÷!¿6ºÔÛäXpŠ—Ä }‡?ÚÕ»£ñ@O»÷6‘åUÙ´(‡nmýC½›Oa<­¬÷óèIAã »vc‡ ©6 ¿'£âŽªLÖô·?—þåÆp3Ž :#ú.Ò®…>u70jLè·Ûö,ÀãŒ]ß¹¼¸)€ZÀå:,ôµº¿-ro¢Ð#2P=ÊLd’Û°ö¦P¥,a–l`j¡J°q:nÒ£ºAK”Ž¨‹ÏÚ>kâ•aãUbòÍàreÛöݪÀKh#‚X\[ÏÆ +·EˆV°‘f%²“ªŠ(Ø3â#¸zÓøïâàÛµAÂâl·«~ '™ˆF@?¸UE¸ÿ0¼ëóM]ïÀ/ ÈÑ`à‡¬¬û`½+` Ÿà­Â¤EøÏW"8ñ “:K+¶;Ø/ɱŽ§OµÃëù'Õ>}þ`ÿoèk +endstream endobj 1302 0 obj <> endobj 1303 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1304 0 obj <>stream +hÞäWÙnã6}÷Wð‘ìÄ 7‘Ò£ëdŠHÄîdúÀÊt¢Â–IžL>iþ²—¤dK¶3ÈtZ´@aÀÚ¨»Ÿs(ŽFç?Ì8z¨GZ"ÃR¤R$C•-GßÏGçï9âh¾qüàÀSC¥@F2Êš¯G ¬P¦2‰æ9œ0®Ðüyt/.ߣ„¦hz>}÷ÝV„§TâÍCe×ë¢|@We㪥Íùmþ#x’ÑSB%sÊu‚æ£1ônòx&÷¦©È˜*pfÐÝfÛ¥«ƒ­Ëù(Qä£i¢2Ë2DUʘŠ™iAîžCÊT¨Ás¨ˆ/ˆ !ã]=²P… ÁC•vÉûÈxÒf/“âµ%RÑ¿ Á8'pjÈXð” ˆ™ÿi¼¯|"ʤ4Å·Õ&Þ[lóM þ™„'.ޯꂌ!^¼)}qCºÌ×Km|Á|,Y ã1–Ï$¡ ¢àŸqƒP´¼?\¾v|ã²ÆêxYè‚Ô4õ=`m˜>ÀÃ7úœ¬Vè®xxl ™×èÎÕ %åø#Jì´›ÿv‚¬·Ç–4K#ªÃ,×FQ³Ç4ãÜçÀbü ·|¾-`ˆ.'eC$L“+K{[”×ö\&xºm¦¶âyÏÞ2@ÞCM‡™è :õx®‘-Qk&‰fK€1¶ã„džÜÌ/on&·W7ד_§?ͧ“;2ÿ£§2ë½Ú5Fèð:ªÛ¸µ+ŠæÅw[·@0¢ïV~¥Ûþ»âÀ*êàl쉼xÖ3»Õ¦Ÿ,¼¶yjŠMiWgPšÊ¡>¿;´­ÝmÊÜ!»ô,èlþ8Œ87ÍNÇûé[é»x½Y¸Õ«ñ·dYXò˜H9%²C¯ÀTñ=¶wuš ì ªâ"ÜV!¥õ.;¼†ê%qèîñG»Úcw6ïq»¾g³Z¾)ëåÄ£­¾ë¡÷#*²#O+ëý¼xŽÐøÆ®ÝÐ!ˆ‡‘ý.ádPÝnU–v e¾Çt ¤ó°õ³\½]iÛDŸ»ŽͲÐq%v]Txµ´9{ry±,€çÚ~*ÖÄõl ü­Q¾í]®lSzsþ°ºˆª°Æú{M"lŒN¿¹ˆn7D1`´3"à€æw,>€|Û –â ÍXß;ÄF ÎDWÂ=_?S{&ªÊÃ?‹”š¬?öýÝkwOEà×­Âö>¬"8\ˆ±"*ƒöaÜ–¸× •©=*W&$LÇ›ûbNõå H&6…0s„g] *_ù.ª×¥G&°N·äò”îèNwÒ¡î<+nR9.¦ñð%’°Åí4H¶´¦´éËôì5!R!R¯(Âìêârrw99’5T#Óù7­ éÑÀ=è§9•¯w?À}d_˜vaØ—wã7¬% +áÁ¦ +ÉŽwìi-|I¯ù%)“oW¬½Òû3ÓíÁzšá'õPz÷›| k4í‡Gç”°é~Üot€Sbæ¥Lž´È[TM(àã·‹Ú¬€Û7ÿceƒ2øŽõ=_÷f¦“7ÕÉÛ)u3o7žüÛê¶ûá=uSAÝT_ÝÖ®±+T¢gpRÞªÂðéa«žž©¨gwÜí@ä=fÑQ_ïö¡¢F(Ÿ‡Š¡þnå:Uô¿.]ðIõ§½¾ú+ +endstream endobj 1305 0 obj <> endobj 1306 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1307 0 obj <>stream +hÞìW[s›F~ׯ8ЄõÞXàQuœŽ;¶£±Iû÷ ,Ó‘À(ŽRÿeÏÙ ¤8u›ÉLgÚÑŒX 8·ý. `5;ùéFÀªALJ¦˜ÝÍ~Lg'oHïfBÇD1%!Rœq éfÆ1 +ã:Qæ¸àBCú8ûà½9{ !‹áôäôÕ+X4¾ˆ™òêU“m6eµ‚óª+š»,/üßÒŸ1“r™B¦ L˜Ò7³RšÜ­Ô>ô¯ˆˆI¯Ä0p]o»²*Zë,É"ƒ`R%ILÇœk×›mמϙԓ“8º@Ù“Øðn‰BxRÇCïT˜ûæUè*¼Ì|¥Yè=äÂB\F~ E,$–,|ß±û?¤>t³Ø[4µûo¹Í;ð ‹¼_|{¦pÿ7méX¯WW4[Û-§qIi"šÕ’ôµpájùÙñ¤¯ñ›‹ÀEÞ~>w|áeß'ê¿ø2» Ê°˜ö€÷»À;1ç|½†ërußáf*¯…ë¢-J1á}ò%rÒ+–l€àHZ¤í1£KbGj»ÂËM¤Y´§4–ÒÜÕ¿,î¥Q5¯:_*«*[”Õ·edŽ‘ÚëJD?V½ö±ªÓm7oŠlJò½œPZ¡~PÞ`—WšM™-ÓI;é-dô±BK3ôã;µÐ»¢½ùUzvu5_œ_-æ×éùüâô}:¿>›ûéï£Z4SÉèþhÈõjm—uŦ¨:é}qkÆéå?Ißàt/"Ïš3‰I +£ið~ v…AÙBýЕu•­qBKÈqL +tØ^¸¯¶m±„MÝÐÝã u•PV«°ïP«Q‹n‡Ö¾0NóB<¸ˆîµ7ÜQXö¦ù¶iˆ+q¤äϾäxpabŽñk†(ÒJ¸×Xf•U[. ¸õêð¡ƒ~ÜúŽ²¨ÂIø,eû¾©’M–75Ò ™F…p”Ò'› ŸÇ¯Æ%ØtöA?ÖÑèd$vë qa1ñÒ½àÊ>!xïvÊѸ]'9è Å² +"é9é@ Ùîñb¿‰®åzQôÌ‚~âºQØ VŽNæöýé@E±÷‰º–®Þ_\HŒÞír¯*] åªrFé[`0þ±Û©H0£{ÑæKV—8«Ó´‘ÕéÁꄵ:MFg¼ËW]¶¶÷Í ÅÔ»vƒÀï¯Y ÒjDE1cgÏù•Hà¢N_Ä~¦ö=- ½Lý•£}ÝÐdˆtšÊÿ›–vY ÿ˦&p¿¾§£É£·R5ðôKŽF/¨)Ÿ´Ž¶¡í±žæ|K¡ñ5(³='FÖ‡£­nÈ€eÙàbÝk(Ést¨¸’Io~¨TÐùÉ;k}Ä'úÝ™#Ä—J1&tÿ¶í|ÂUãx^}M _P三xp¼~.G†‡Î-IH2<é,B^ŒíöDÿÛÝ‹ìßüþ``F,Ó +endstream endobj 1308 0 obj <> endobj 1309 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1310 0 obj <>stream +hÞÌWÝnÛ6¾÷SœKj­þH¤té5iá!qƒØí04»Pm:Ñ`K¤4Ëkì-ö–;$%[’“´ë6`hÉ–IžŸïçˆÃÍääÝ‚ÃM=Q4K JH•™l&?.''o9pXn&\ÃxቦR€–Œ2ËÝ„á.”E©„å +o`ù0ùDNÏÞBLxsòæÕ+¸¬žPIÊ›*ÛíòâfEcªM¶2Á¯ËŸð$éOŠ©„S®bXžNBÜгòwò°õÏUrMÉq¸*0µÛël9‰£óQ4V@…LÓh”0ùÌ” ZuÏ1e*¢Ás¬ˆ-ˆt1ã}=RW…ða”tÉÛÈxÜf/câEȈÆäãAã­BÁ.0fpü›øï•M$Ò MÈeUúïÖ÷«E5ù¸'Æ_Õyb¼¤,lq]ºÌÖK¥mÁl,i ã>–?ƒ˜*"‚ÿ2®ü·ëèãs×oüÙ³ëÿøg® RÑÄö€µ]`jćxæt»…«üæ¶ÁfJRÕ© R@JÊÉ—@ )‰YÓÿ-‚µpVÈÛcJKš&žÕî®tDõÓ.ô~pñ¯Íæá2GiRL‹&ÀEÄEv™—†!Hæ))I“#ú´Û€Fä¸û&Ûºµ‹À²›äk3­L6äþAel0‘FY±Ñ8‚uüòÁ8ö'–û5d´ÛÄ~äò‘íõCî³ Óùòl>Ÿ^Îæ—Ó«ålz~q¶œž/f§gÓ«³i°ü­Œ¦izh'ïDH:V¨›¬1;S4–·üÚ6‚P³Ø ™þ÷âp»tJ#âQ×PÞ5yYd[NJµè-äY Y±†Öî³ûÚ¬aWVš[[M\"¢4+q‡i¡|Êbe`H}.m³+0Ùêîòð6jLJÖk ï+±¤-¨LãQù[qV߯jAZy…ÑxZNY<Möû U)M•Wu{ƒ¸‹£ÒáÎ&êð‰äXÞµ ±°ðïŸUMŽ_gÛ ƒ_´°¾&^(C,[ufÖ.N'n¼êÒŒ˜ Àåû +"_²í= +=1¯‡ Ûß÷öìE¹*‹ºÆs›U?tÅoOB¯"=:i›Ùs­–(2Ïvfx šŒ–m˜]A®ƒAŜҤ#l·ÿ_"2nîm·êaLh]¢õÈv©›!ŽK‘Ø75êðÐzÜâάòMŽrÐ ï¬E•(E[ØÙÞ@Íñ5Á€ÝË)<ËCÀ5ÉNPn3ìäkx¸Íѹ<¡¬ÏEÝQJxTb +³jMë¼Â›í£ëvB‹Ÿ—’¦tAÏNÞ;âXb: +∫øÉi¨»Wæ…Ëíš”à d?\­$= ÛR\´üݸ“wÙª*¡´„E8H;›<‚áŸA¥ +b«ïtؼsš$ñ …Qz° „ÂÊAê…n>U÷Še•‡Õ¥jì±Ý +9«'ºÐBá› ’“á©õGÄ:fƒâ‚Ù`àè¬9ÇR•öaï3š8?©T´/o‹ìf~Sx1EEîR 0¤Í±ûÊXS¥Záé™Eg½Å»Ê7¥´‘Gä¾X/ v¾É¿äÍ>þ§¬TâHÿ >:*Æ?c£ï®Þ˜Ÿ.Îæ‹Ùröq¶üeØaFyÚ_Ù¢­gU;±hëØ<¹5 Û´aˆ±Xþ}Ëx­¾æØHm}D¶ïϹ;œ¥/Ø´§hõ&e#0öé²@UAãuLàˆ˜¾£»ë½Ùâ%9óq¡C¤½ì,ìÅJGãˆíG…º³]÷s†—ÝYD_‡æÜN¦Š CÊ!+®»é|ìÄßg–wöí‹sç™c«Ä±S)ù­VÉSŒIØŽíz•èüRv~ O¦îÄÖÁ£*^PY>B3ÞI¡]6ßxÍj­N÷a™î׶2ëT÷,…/œ†ìb=õHüê¨}2ᶠ8Nä¡ÛVß#J³úX”>ÖcþÇgö<0ù>_Þæk¡ÿ1HªšVÙÉ^ó­{ñƲ_¯!oüñ!¶jĈð0A×·åývÝ…­×Ø +(Œûìg‡ÁÀ‡Çq¾Úúlžê#‚*êç}ð™~í=Ïð½ï/Žb,I +endstream endobj 1311 0 obj <> endobj 1312 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1313 0 obj <>stream +hÞÌXÛŽÛ6}÷Wð‘jb†‘”Óf¤H7‹]£iôAµe[…m–ÜÄŸÔ¿ì IÉ¢/I7½ H`k-rîçÌ‚,FÏ^>²hFFË3’f†(Nvåh>úv2zö½ ‚Læ#! ‡ð%2Ë”$VqÆ%™¬G¤0žæŠL¦ðÀEJ&Gïé‹›ï‰fùîÙwOž»]"2¦h½ØëuµYW›¶ÜÍ‹i™ü2ù4)¯I3EÆ‚ £ÉäÅh QÍÔ?©£è·»d,,“´1ä¾Þ·Õ¦lœ¬›ÉÈHf xd˜6„I•ç9aiÆyê}sà1“iô‚ ”{ ÷áÈ]r/Ó¬ó :8¯´·ðÇ"Q)Óô@$ÉXãMÆRdB‚É"ð™õ¿ ›ÚŒeônWûßfûiKÃ,ý)qoJÿû®©’1ØKë ÆÖyË1\R‹ñB[ò` Þ–?Í •I +Ÿ\XB¼äã÷ɟ׾ÿâ²Gêÿx™Ë‚2,ÃðnNàð7u>_­È}µX¶LEr_6% @)&èï‰LÒrƺòl¥«`°=G´byæAíž`¹±)³Ã²@€Ü;0+çïªÍë"9(=$X‡`C„Þ#O ¼Ô2±öé âÅ9üfˆÞ†$HÑ^ +¤µ%ï- ¯Ÿ¿»¹O&¿µ)¿Æ™jƒxiC¼›¶hËu¹iÉÜǧNàcʶՆÀÿvYz½B0-õ@VO8ÂAˆÞ½º}8Êc䦂½(É[¬12{¤Õª§6éV“úL,†=ÆÝ›×ï^¾¹§LúuÔI«˜O;6µQY‚B¬ §c˜¦Å†üZ’f[N]Xr–GQɺ­Rú­Õ¼*g>º£+»è22ébÛ»‘A»xlN»<¤iz–Ôª!õ¶­êM± +Ö*1´¶wTu{‹Í¬óq߀áëzŒC3“FúNT*øÛ.aw½™–èsæ|Î鲘.ϪêX’A°Ï59.Y:0?í”Kã ãX~~W€ñXh0Œ“:Æ‚Wópشŧ¨  ¯Æ72|œjÙr8E}Ns÷ÄP@ü¡Ü} žælcÃáØ_ÀÂi½i x`å²Ø}Óùn¼.¨ )óŽµÏÊ{º* Ñ2˜¡·ÅºŒ#­Í*Ýs©7‰>õU tÅs“ „÷ÑôÁä¹9ÓÛl‹)ª„ù#Ö½ÚuE£a¹ÕùW)œ•®cÓÅæ¿ö«ò­Ó?kñk‘3›)qÍmÉDüòx+è§UÌSLq!¯¨QÌ +þUZÿ‰–OËÿÄ—ëZ„é‡$BaÔöR•u=¯+ƒç0ý*–ÒÅÜÄNy'ͽ+DƒÆ$ËsÇS©¼ÚC€À‘šÇE;7/œ×À‘êŒÑ1l™'8€¥:Þ-š»§tG–óDÉ#Ë£`äùØ‘1t@¥N¼QG.Bô!ò.;$Žü¥ƒGÚ†qúM`zRì|Á‚¢u­ªšû$›§/$Ú\8zTë$ƒfä-èš«H±ZÕ(mÉF1^ÈÇD`TAiý_%R>4#¤ì0Å&@m¡±@8ÓA£TíƇ.3Ͳؖ¸‰%Š’WsrH$§õ>¸D!ϧŸK^|Ãf¼Ç4õ®=%¡C += úº Ò¥=GÍkp ž@LBlH +ËL~ÖÖx”]fŽÐôHÀBÒPF8‰T˜É£ìêÀq(ð'r'ðæ2R”9*X‡F:›‡@N™ýò«Öƨò<%mMÀ œ\¾»JdŒ…„ë úñçœ97ïç·ó³¨MÇdÀO©¡ñ{ú‚]8|DK\ p>¿ ]ÝÎɉýž2ä…,ðB_øJLT¢«8¡Ã¾ÝÃKsºM b´nàT!hIê9WíÁ9…):SÚýª›Û¥½0 Šn@-0bM"`0†ŠpÈrÄ6ÀVqR…‚#Úù#3e˜^>…ì†O8£¥ÐŠ>V{€;} +N§Ô[•zÜYxØã"€]˜MãVŸÞ‰äCZ½P銩!8ÿ.Eó—x¨‹Üß 2cN/QI„Ëé—ÁÙ¦”Äf®<6íÀ¯í|H†/˜ÑqDÚœžì>Ÿi£:®Dz²a?í“ÊsÛe¢T‡¦”‘EY¯Ëa Ñ‚–€(„Ú@ðÕ|»¾Y}éÀâ¯hà¼ä´4h¥‰ééäF X5#0†(»÷¢»D~“±¢]Ù\¿Ã&g&CÑî43¸Áè.0nËöæÓvGbêp"&6^Æ?rsq{3¹ùùîþòaý8ñ *sáö¡9Æ ÅK÷Ã}áý…£æÙÄà¦Ãã‡Å‰º¯ð/¾99Çûa]1}õâ×Ï8´î[`”ǽ³ÑEE ?¸Ö›Õ¡?´Ûc«ú™èÙ>"C˜‰üÒ‰ýf2úS€2NiÁ +endstream endobj 1314 0 obj <> endobj 1315 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1316 0 obj <>stream +hÞÌXÝŽ›H½÷SÔe1Ó®PUPÀevÒ™É(“´º­ŒFéÑŠØØfeƒx:ýHû–{¾ªÂÜ=I”]iÕ’¡ |ÿç|K¶™½øùN²M;3š%aÊ¢Ô0²¦˜­gÿXÌ^¼–L²Åz& ñ‡ƒL¡Kt(BÅûY+"Œ2ÍKœ„2b‹‡ÙGþêú5‹EÊ~zñÓ?²›&©Ð¼Þ4ù~_Vö¦êŠf/‹àÏůð¤§Xh6—Bš˜-^Íæ0Hn–îLŸMÿÞs™ÅK˜a·õ±+«¢µ¶®³8ʱaBé,˘ˆÒ0Œ\fF‰Äôב²PÑè:*BÑö"2>Õ#³UÈ.FiŸS÷}J‰DI*R~ÓÔî»ÕqÙ±Àˆ„ì•Â}ß´e0G¼¼®¨¸6Ý꥔I¨`Kæc ¥‹åßA, WA„ÏP&Œ9ËçãäßçŽ_yÛÿÆêÿñm¶ Úˆ”zú.„f‚‡ïôùr·c·åfÛ¡™š·ì¶h @@k!ù_(y±ýüû N”`Üþ ¤q£IÌÎk ÅRìüî±êòÏ,Xü ÇîñLdÆ¡NÈDl„ŽÈž ðôG¾*Ö7e`xõ®è®?šû¾\"„gÜô +÷.ëªíØ7oóææiÁ8w@ºRY_ÝØU÷#?xuý™‡Æ?ãCþ ³Ï„t?¿\O–€lî¹ä/AZ…Ý÷EÕµ“€;ÕóÔ‰QEy:?žÓ¤È²˜’Ô‰ÔzÂéÚñ¸;Ër]-ËYUt¬À°1Gbø<4EÛ–ueR˜Èee-Eý y¸³CSh6"%"Þ=²*ßìž·Çå–å-;Ô$BxȘdusyeÁB£îÁÞ¬'é«$÷ñé»yyªhF{aÇiØ¸Ò _zÂOÐq›Ò>ï–Ûqi2[y*MŸµ­P$T2tF¶üî@=¶€vÆñÀÊŠuÛ‚ŒîJÌÞ=_*娄3£„Žãi¥ÉVè㲑IÄóýaW¸^êñ Ùÿ¤ç*Û•ñrWo®Ø‡_^½½ržæÊ3Ù{`çá¼?ÕËå™ÞW²‹{Úè²e>"0±}¾;æ]±ò^бt˜N¿WSåg0¯VÖn[¯;ÌçMÁʦ8›]Ͷ%¦ÉoíRðý +rô>0xè® +,µn‹(1 ‚¡¨E–:4Ú3»a‘‰ñ„"ÏãubÊ°º " ‚¬wJ‹}»Á(ŒÅåQ¬{”«>ûü­¦È¬¦ ÑWœ2vû–©1ªá€¹¹¿yÿöŸß¿›Ì½”\Ÿ\*Ö¶C‡ˆ^Ø:Њ2!ך7¨5ÊÔèØ=àÉK÷oÞÝ|c,¾ÍÉw2õ-ØuÙ&ò‰#HôlBž}½}ùÇõíÄ‘ÜùÞ¸w'½$"†™Ú‡ÒßVFÏQH¢mÂýÊuðäçÒ.óŠ}Â\ƒcéi íz ì…Ò°¯Ð¬Uƒ†t];[\4#jh+ùR"2»¡ŸF<2˜à¤>t%=ÉŽ/|ÐC¶“ƒùŽx)OºßœeH?q¡¶ÈQ†c‹äzö¥Bœ ;–ÛÒSæ¾ t[Ø®«eáÊ’RYR”¥ÈÁÏjŒA¿uRÓ>‚‹¢LXƒè4…ý¹¦<ѯR.Ú@¹˜g•ËM½#Vù/+— $ú6ü6ô¸p÷‰íË+Û1°c˜™hèÿ4/15.Us*k˜™ ßí!_’[¼†}I19¯XÒIœ}ŸÓUaß]ø¦º¥ÃqWüncXutØŽÉD’jùDúP\ÖÕwER÷ÿ´zKƒzÐ^”Þ$'aÓ¿rˆØ“DZÿ2ôí_ÕÇO»â´ÒúéõÉ¿±þùçÝh¥Ð:ϸ3Bª0OÛ7º{|ÞÝ—E±Šé½€ˆÿÛ•qÒ+C—Ñ.Ç°ÛAZËx(׬@ëbb FKþ¨ŠJ‚~°í¶½,Í€DäÉ’#Á!²)*€.€§«;x‹q +hD—ß1 aˆðóU:gqâzNw„ݸêµvv7•ë^wö[w˜ˆ}A±‰øbì˪Ü)Dð1ƒó=óA±|·«{Sq2ÂÞô²5\a3vî?++<³ë$¯ ùc/óÀåC©îÅXm…Cc€Ù°v› +zJšÓKƒíU}ôùy[X *Š§ŒOÓß+QŸýÀs ðqÊÍkÙLÈÑF¼èöc%—‘ç=rÃÌdã@N°À¢Ï.ÖT8ê®8oUåP@’-Æ"$µ6H9“ 5±K‚ @"?ßvdœ7$|Ñ‹gÁîú‡@†8ä³ÁŽT§ÿ-‚ †[ëèw?‰‚L\/fÿ`©Fª1 +endstream endobj 1317 0 obj <> endobj 1318 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1319 0 obj <>stream +hÞÌXíŽÓFýŸ§˜Ÿã²æÃ3öü¤° ­(¬v#ZªÊ$Nâ*q¶¶S6Ô·ì½3þÈ8¡V(qû~žsîd5yúêVU=1Š$<%qjˆâ¤Ê'ËÉϳÉÓ—‚2[N„$þÁ›H¦$Ig\’ÙvÂÁ +ã±Ud6‡ .b2û<¹£/._ÍRòüéó'OÈu‰”)º[UÙv[”+rU6yµÌæyôÛìð¤¼'Í™ +&Œ&³“)D7s¥Óï«h*&ifÈÍnße^;[—³‰‘,1‘aÚ&•µ–°8å<ö¹¹tÝ1“qð#oPîGH¸/‡uE°~ŒÓ.w Lè6y¥}„¿f‘Š™¦"¹ˆ¦.“h*E*$„,"¯©ÿÞbq’²”^W;ÿÝb?oHdXBßEî—Ü_ÕE4…xé®ÄÚºl9–KJ“`½0ÛÆÂ…åïH3CeÃ+ !Þòð>úø¥÷GÞöïXýß溠 K±¼í7#:ü Ïg› ¹)Vëš©hMnò:(Åý+’ÀIš/XÿÁ‰t6@ÛÑfÌh¸Ñ$fÄæÃç:]äu±*oö›ü}±hÖÑì­‚Y«€±p|åUSéÛû¦Ø•Ù†dÕj¿Íˆ4ë¬!õ}>/–EŽ¦„b)°†÷lW=Û¥³QûgšuQ“û¢$ë¬&ùŒ¡g@°ãÇe‡þ–‰»%%@–‘’À©]/Î} §J«\6¢'“h£:ñöî÷Pv¸ÓÒûHBñw5tHÐœì–À0A!¹lŽú6Ï6vgdt¿q> X™E›væ¥ôæ3,X‰HÎÈÕ’"a‘ðû¶jH¾UÌ®“ Ä¦Þ£;gY×Íô‘t€XÅ,¦Y/›} tL}T1Fµ¸ØãMuÓR Æ=–q;Ö¥â#Ò>"Å”õ9QÄËú}‹!@裆.*hâ¨"ÌØîn§Ì´mJ`ôù¸]§¹´¾ŒÜÞGSìi¬÷¡»§C´>¯ó!¸ô¦¤ÙèÍ®Ê=²;‚0o¡Md* ³IÙC2¶ñà¯Üo¿ßmõWI9 ­Ÿ¡ô¶¥`íðv>œ€ËTzu7×dË&@9A‡+@uøB¤jÊÂúOæ*ña{´}ðQ?l‚¾Ã½Çm'A˜Ña'›°Æ<ö©ÊP@X;þŽÍHÿ¹ÏËyî³(ʦnHwªm?vh•—P–gÖä` K}‰ŠkPA *HGmËO”¨Û ¨3è#3¼h å‹D†Q ¦Äæ„4qж;ºuÑìÑ1ÐíXÊÚ7›|ƒ1c?HöP¸Þz1(|NµfT/µÂxë‡ö9œ1dWÞŒÄzºÈW6•V9Ô¡\m@ |d+º=Q1›úÁâ®pS²œ·-¡£Aî@ž–Ÿ¯‹HÓò:Š–ºŽ6áFLªØ¨vRMÛáê20]n-LAŒ`-¬©ì%&U'¤½~{3 0 +wFL§ ¤n nš¹Ibp¹ùÿû‚ELõ©ë«7·_qÝg'Íص‡Qè$a\éïMO÷>ôIz K»~‚—‹nLZ&Â)ÉÝÈ ó¬DDîë|A¶^Ùà›Š’…jX<žûGÈ8Weõ¸0(KÞñqYüs¢"8!ÀyB19PêÈÑí¡l²‡00ˬñ{>^à9 g`ûáâ{Ed(B¸¼ÞUÍGú1ú&”2ÄZ[-bXô wºQ´yE’¼ž®,_¡‡’=éÁÍ#éaÏèõ³—7A;Ô !ý~¤ÄvÈYí êÄ[‚0âÇ[£‡ k?9­v#åtaáö”—PðÔcÊìùì.ÂôºÁMCd0Ù # Õë¯Þ¾írOv¼âÚ'åät4÷’“hÞ]=#Ñ©‚Ê“±0Z’ïèPõ–…ÝŽ½ðÃ*6¸øHÆUlé‡v:»G‚(ꤔ òGl…nÜ逓:X¼i¨ðü'Ô‚dK<¯…˜Âž©ƒÑ×­¯=¹‚š˜Ás· Ò1ñý=gˆÿ8ÎK8Ï©Ñý Ö¿Îyõ‘ú3 nÏî4ÎñÏ/à9,óÐxbU?ÖTÐ&)‡EÕ÷âŽn28ãÓï }“móÄpîO–R‡Þ)h · -GþûÈ]àÁ^C€[sâ÷dt‹»òhÝÕƨS¯°Ÿ&Úþ˜S<¦ S8ªàW\ ‹ßÖa pnI•8“>,V¦?əŔ 9ÍÛºðëšb‰à»Çz9|ÙËqB§¾?Ÿõ’ÏúùÀ\„.g“½ˆ°™ +endstream endobj 1320 0 obj <> endobj 1321 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1322 0 obj <>stream +hÞÌXÛnãF}×Wôc3‰zúÂkÞ&sYx‘Ͷ0Éb’†¢d)ÔzôIû—{ª›¤HJ¶',hI¬[ŸsªŠŠm¯þq¯Ø¶Y„†E2f~2#Y/6‹V‹WïSlµY(Í$þð¦âHÍ"#…Ôlµ_HXÒO [e¸Êg«ÇÅ'þöÝ{ˆ˜½yõæÛoÙmí©X^mët¿/Ê-»)Û¼Þ¤Yîý¶ú'<ç)†-•PaÀVoK$7™»2gÓ?×ÞREBófØ]ul‹2o¬­w«Eà'È'AÈ„6I’0áÇRú.³P‹(ì¿GÊBû“ïQ*ˆ±_"㡉­BÂð¥÷ÉSd*è²7 ñ_©g|ðÓRyË—‘·Ô*V1+Oá5qŸKJÄbóÛºrŸ­Y˼PDü£g¿ÉÝçuSxKÄË«’ŠkÓ•T/­Ãˆ +F±$],R¹Xþë"äÚóñ*UĘ³|~ŸýûÔûþìÿcõoü3{ +&1ìNA†3>|¥Ï×»»+¶-Óð†ÝåM +#ÿ§AJž¯EÿÁ‘¶ÁÛg(†Q8¢³åZDñKûk°×ÀÃö¸Ï˶aeCg Ô=aI |º“ïÒS^ÿ”îsoõÇ™ÞJ$I@€õu_(ÓÓ[…ÎÛý!ÏŠM‘7¬}ÈÙLRð}ò´¤$=ú§f%YV!®ø3ÃÔ²ó4‰Ì 9ñæf¡ç‚[v²ÑE(”îá-ª2ݱ´vå@”iË´ý3 ¦ãcŸd°ØSa?"+Å÷¬‹Š¥»]ÕÛ +´³eÃñ‡pºb=zJ×Ð_ø|Í~ÏÛþ£¼„›¢a‡¢d‡ +`ñ5~Ò²´\»b-5°ÎåV çÑeœ–ž +D-«vÍj+¶[Ö<¤œÄW‚ÝlØÉS ®+/Ç® §Ù±@²•îkã'úù‚úÁ(û‹Ð¾œÙÞ‹È1yoÚ¹ûÀŒ…îìɳg9ñ)ÂÁ¡Ž‡u'êlyÖ'ÞÉ À¡#*USÈàìd7Ŷ¼;îòŸ‹uû0q™ˆh•°-÷vßgaôUQjøùsñKÀ¹`œµCU;hô‡<¡ðÇž¨?«èË’9“H]Á”N¬gIdùA6•/âdžMÇ:ºåáþ"5öH±±j3‡ Aœ1}ñ!ùãSâ¶dKH™É¡aÚ1~ãéü®,ËkKþÑP„bñCÕäeÏý,T$9«Èù$cgs—w)U±!a z +Úkr<ÍA‰±ì+Ò·QôóΘ‡Ž…Jƒ„’8èD-Ê7ŽÑp”ɘøW0Žn“Œ‹}㢉šž¡¼©5̲áPF[ħ”æªÐ8¼~²T$‰Uüš¬L™½LKÝÓüV^21Ó–6˜Ï»IÑ%/À:˜a0-ÉéOÝìÏîþüð5®§8[å£WDum68<`6à§¦È %Û¼Úçmmú$ Qç(Z-¿ÖOºnJ6{-1hU¼õ¨ÜœaÞv60©‘…~Öîq½ˆ­íè"q·íQÊõèÝ# “¢ƒT)‰ÝDf¯hÅjMCY7FóØ:ß<Þè#^Þz¾Â‚P¹}ÈðöÇ*óPDnÅaº\Mf>%äæ¯Ú®W1-W¤¤S´#¾à²‹¾¿ùåÝÛÉQjÀuÊSèÄ) ÝDRo|ýffbmF²Óo™ÆÆ {UÍfà‹ôElo>||w75û¤”±¦MÛÜö$›6/ h^€#¹,ÂíÍO÷ìöÃÝjâ SVò ìF.[‘¸ +g¸´Mݳȵµ˜WC'ÅT‡ßƒ ;@/ÝÐZ<­ŒºÒM{á'<•·UÝNÏr)ºI÷³‚êe)Æî Êš­z㶫ðûSÙ¦Ÿ§at¡[£é‚p(ísí;=/Pþuî…| °¶ˆþ•»}KÐLC›¯¤Uü-îÉÐ [–ᦇ´þfÖ"¬ÈúÜÜzö ] +û4¨r¤·æç*ˆÆøüΞ +©LŽ‘ÛÀ'‚‡™[&áÇ©u}l~™÷’ G¼ñGÄÁêŸDA2öüþûi‡ã4/}Îç¯Ôš$*ÄöSÒ[ûR­õ&0›H—Æ”“ÄÄ£ýnvOuÃÊrl^ž`g¡æh—fN3ìÜ*§LëEK:º;—4òµ®ß8F-ÝmÓ9)š?ûúè…´ô¦^vGÛR"þ½§ñï0îAöíÇ+ÝÅÆ}wî(›}bPY+X5=Tx,ºû¶ßÏÄ‘ÒNZ½(­‰•ƒÙÊz½pv~w-×컎änG…U9R=¨ýæºæl\sF^]%3›GDClö6‡xèÓcTÝNW³}šÕ´L:ÅœÝÙiYV-¶énˆµf®-Ê£)_¹=ÙúOà/XÈi$Çòì-iŽHmµGŠf¾j×Pû*èA¨Ý]Sº#k‹Þ;?ßA" Yµß£T‡UIóáñÏÿñ|— +endstream endobj 1323 0 obj <> endobj 1324 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[305.04 482.28 473.22 495.78]/Subtype/Link/Type/Annot>> endobj 1325 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1326 0 obj <>stream +hÞÌXÝnÛ8¾÷S𒚉Y’")iï2m:È Ó‰ÑN‘Y T[v4°¥À’·ãçØ}‰}Ë=‡¤~(;ÝÅ‹²"‘çÿ|ç£ÙÎ^ýü ȶ™™˜$<%*5$æäPÌ6³Ÿ–³Wod¹™ I8üÁHK’ÄœqI–û)Œ«,&ËÜp¡ÈòË쑾¹yK4KÉëW¯ü‘,‘HYLëí!ßïËjKn«¶8lòUý}ù hŠ&Íb2LM–ofsˆjVî.D<«rS iŸ +ò¼´ØU‹rgFxì=XLvõ*oKh’zãv–¸%aZw(Ÿ"éST1r»!§HdÐ)õ‘4Vû‰x€ò¾æ΃8³4ýšº«‘ª}À`è1‚KÓ†šç2cRë*¢…à]Sü°=b`šH((61vfƒ• ¶×‡Òµ·Ýoè’ã3âs“:ÕarjÄcÊ­,TŸ2$Ht¸dý§“UÌ ¼Énw0 »:›é‡ÐÐ\5Ä ï$AÿΓ˜qs©R}!3™º—”è*ØZžt®»¨SÒÖ¡Áâl¤Ã…5 êlŒé´däm#5¡u—Ùׇ‚”Õ[»{û|Ápsá»"MQÞaì%¼‚é#T­‹îëz]4ÿêP!æ `, WIÀ¬,&Ü€ +Šg,uЂ€È~ηúu^vÒu±ù²(«E¤8˨- f[Û=ØaS(zÚÖU˜Ó»lrØ5÷ñ´–&Æ8-\…D¡!y׺+$Óg©[ܽûôóÝû ªë{«Fôj2ïˆ$Í ýÑÀùp¦&E2.ãD “¹ÆXܾ ‹»ûe ^ÃŒv%gZ¹)¡“ÎÕ¥ÌȱºtpóÝõ§›û« héì«í2m‹b%)h±E ½ú0í=jPXòáöšL&”EâÀ ;¨›‹!«¼"Ÿ ¢e±&}ad ¨²dÌiâä`È3V¤BX†à.ŸÊ†Ë$¥ã™waSw,kß%ÏØ…ùŽäÕ6]»X“o²A˜KeÃ0à‹E×"õ!Äg3hf~l"ê[qîÖ H=IÙà â¯Ð‚ŒeÆÑ[¼Aú $ú®o¥m«GZBt×EdhoÖ¢ÞaƒþN ”––rdÈo`˪®`¢­`ÏS~øá|˜J™õóÔåâ‘îÜé Ž¡ïó}–4Pß$ªÔñ0‡gFõ÷¶[Ó’ØÂ3s¦»yÎW¨Î(¡VÌÄåL+ôz¢³ïS +0Ìžn«{ü9îŠÖ†u‹?O¡!KÒX Ùwª®ˆ‹ ù †ÚÈœo¶¢:îÿ@}ÏõÎÆ¿9 »Iô z±E¦~]?ïŠ õ“´ÃèqÜë7V?ýk7ª<‘/¨3LH®¿KÝéeu.½¿GálO)aD¥Èiö£Îz¤×pÎÅìùØÄ>á`Î¥]•n«ü2úŒƒ s‰ƒAÛ`ÓÒSÖ ˆðŸ©P´0pÏ`öG–Kô0é,óhl†¯7<„záù®Ç?ÏOÁʼc·§j84õbví<Û—U¹ÇÈ +àz€‘tO¼Y0µÇu-§|Ûšãƒõ%Ķ4QXÈh»GEj¡Ç¸¯hkÛ“p8w™É}:¼Ãy £ÿDj;‹ÝÀØ’æ)† «ÎÈà29gˆ„ yi:y'r‹ìƒã‚"áϪ?OøÓóÄPñÀDÔ9ùy‘ËÔÙ"ýG²©‘’"1ùYQÅÓ‰œ—ðìèäž•€oc«˜Ÿðº‡Îð,*Ę?|…Èý£z"f ׶éïꔅè,œ¿T¡'Áz{ûÛÍ›‰õêâ±ï‘6o»ÃyÊ‘›öçV[w •‡ŒÀŸB|sÍ©ê™Î¾†þÆïš¿øI)Ém½‰+p´Þ5î 4TöðíhTÐrzÆóL +åú£…_£¬w'ฒÂA –\Jó.«¶ì–’U½ßƒ; ÖfJYX‚s-D¥idï®_ÿ—Ðêé‡Áo +î/ðkt‡#1úèØõ7"¡\$Fb}t_"-cEÀXâÊ“[Y#êÀdoû4ÿ`õÔúF +endstream endobj 1327 0 obj <> endobj 1328 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1329 0 obj <>stream +hÞÌXÛŽÛ6}÷Wð‘jc†‘’ÓfSl‘&ÆÚMl‹B•e[…Vr-9‰?©Ù’º®·)R(ðE–ærfÎœá +²_<ÿn-ȾYE"“06DqrÊ»Å7›ÅóW‚²Ù-„$þàMÄS’DŠ3.ÉæaÁÁ +ãa¢È&ƒ\„dóqqO_Þ¼"šÅäÛçß~ý5Y3Eëý)}x(ª=¹­Úü´K³<øeó=xRΓfŠ,F“ÍËÅ ¢›Ì}RƒéŸNÁRDLÒÌ»úÜUÞX[7›…ÈÇ0m“*I˜óÐef$‹L÷;¤Ìd8ùA@”ý2îñH, + øK#Úg¯´ ñ‡4P!ÓôB$ÁRÃÇ(XJ 1‹@Àkâ®KL$ŒbÓÕ©v׶ç¬%a}Ø_rwýÔÁâ¥u…àÚt9â%¥‰0Œ%ñ±pábù3ÐÌ€›^¹ˆq–‡÷ÙקÞÿámÿÕÿñm¶ +Ê°kÀ}¸™ñá_ú|Q–ä®ØZ(¦¢ ¹Ë›( ôC ”4ß²®ÿ}GÒv°Þ”6sJÃ&23:G>ÇÐé6oŠ}uw.óŸŠm{6¿t,I46`(ŠŽ°2±ÞÛ¢®Ò’¤§ýù!¯ZÒÒ–4Ç<+vEÞmŠÅ‰ÃÏZé(Å=€øH{(r,*r¬!ùP%ZrH’’©wÄÏ“.MÅ4DèËòóJXú§8>僟—*†qbçSǶ!Yáé¶ d E©ã‚ž äœÏX*ÀŠë&Ç ›cšáÌR.L….÷>uk3v6Ëì\¦bHI3r»#÷izöp^æùs˜Áÿ"{E7Ü\0ÏÀ³Hh}&ôpÚ´Î-öc¨ô|‚'ƒÛ>JëO;Š©d 6ŸDÃLŒ•àÒ.P˜¸|gé2ÓãhQ¤é‰E˜Ì£ôæýzð®Ð^P¿ ¤º{J=Dëòºò _h]Ú;I[@¾>å®;R0gÁ'²†%ˆ¤ì{-LÂÁ_u~øõX——æótŒ;"ÙúÑõ@;hM°ó 0’0_¡ŸôŠ†]‹÷ =MÝ86Å)S‘ Û5€¯ƒ‹úS9©;Üûˆc½)fô´’—rŠ1]ª²9ô…4ÚsqÈ5%MþÇ9¯²Ü%RTmǼ(37îéKµÏ+ÀG(š¶9Xé €TH½®!ïHàS­0rÆìè&—ÂyÝ2²Á‹Þb¾ÝCœŽF •c¶Ÿ‡ !?ð´û ¤'{)-˼ÄÑÕ'’~*l ¯¸0aÈj=LÕOŸóÅ?‡*óŒÔ'S7%¡^nó}€Å¥§p¨öe@‹*àŠïÑÜ$vÒb?á®”pf쾄ŽTß÷0„vW…ÝLªU†´v‹]HÛwE:Ý '’å%ëʈ²ÛaŒ»!V~J_ˆJëGü}wûbƤ1¢NÌ=šºÁ*ÙÎio 2|EL$z²€«Õí›5Y½½ÛLà‰ž7ÐÈ#7”Ñús(fIø8×/ÞßÜ=›8PÝP¢SLFþyºzûúýwoßÌf¥)A·å+7Kl‡Ì(Ékà’‰Q$õ ¤ÎØ‘i ØÃœ¥¶z·2lîÐ-‰“h„]¿{yî!hã­Á8îÁð=¹ƒ)šŽÅzR…~ Ñnv×ý*Smá!ˆ H·%éO! ,‡Í˜ÃîbËW«úÔN 1ã=ÅirËÞ⩵t÷,“zÚšt}©ÚôÓ4‚„%ÆXðh`ËSÒóP†NKa’mÚ‡¼û™º¥–q /8žw^Âíì P¸ÿž¾š©/œÇ¤ô×Õáž~ÀC MߤøöÏÕT£†ÄmXÐXvß©'“lÀ¡,䉙y½"5\È'Ü( É/ðryÚ‹Ó´ŸƒI '# îÅ éG˜«ä=}jÓÄmÍ b>‘Vì„]@ö³»@·YF‘ž+$jØ!Ún™›Ñ5»íᦉ›‘Fí9¤n…ó^q……+±ÖW”0Š=Èy=·â‰*ëÙúèÊbwg€¦©³f–¼¾yEvEÙ+&þ?"º:PüØÂÇë“[¹^ú‡!’nŽØmÌÍÎ"=_߆ŸÂó»s•á&#³íMÚú©5H‹ø|±ýãcZ,»¢J”žØ¶+(õÇC‘õƒìqúã(=ôå.ì–ƒkD™fC"O«¹0°d‡ŸSóõùx,rM/ë<†Ñ*Àühc¿(˜mñaô¥ß³¯É½PjÄ•/“ûW†õ«Õë÷ë›7ëÛÍí»ÛÍûiIø ÞcQš‹?Š¼tãûy–CÍe”÷ÛÀįœ-˜I·=Œ7¤çLt➣ó×—çÜ9çÉÌ9öM'†îôŽŒý¡Ã“Æê¥ñsü­«ò/™=ùCC™§Ï›9.ÛØçK (çivxhšüo‘ç/Gç´ÐøØÍfñ—/ò­ +endstream endobj 1330 0 obj <> endobj 1331 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1332 0 obj <>stream +hÞÌWÛnÛF}×WLß–i´Þ ¯(úØI‘¢ ŒXu좠©•Å†"’òý‹þEÿ²3»$EÊvœô4´ ¹s?sfWÂõìè»3 ×Í,Ô‰ü8- 6³ÕìõbvôV‚„Åj&üÃEÆ× +"-¸P°ØÌjáÂO4,2|Ò‡Åí삼y áøèøë¯á´ödÌ5«®ët³ÉËkxW¶¦^¥™ñ~Y|–´³p sÉeÀâd6G…d&sOz¯úçڛˈ+–£øPíÚ¼4Õõf1 BŒ(äA\é$I€û±¾‹Í†k?bÄ\ù“˜Ú íG xHGb“~ôã>vrL]ð:pþ˜zÚç»%¤7ð1òæJÆR¡ËÒ“ø›¸÷šâð£˜Ç촮ܻå.kÁ yÄÎ=ûŸ÷u“{sô—U%åÖF+(]J…å‹|I:_„t¾üéæÖµ§6ý¬qÙ·ƒ0¦1Ø`õ§õEë} £úž¿{u€ÊxgÔ§4îªÛ´ik÷°rDSyøS£1 Éáiq%y >}÷þìÀê)Ó5ÂÈ0‡™óÑÀ—Fvˆ²QdXËjK­’–Kkk®b Û®2”ìAƒD•–pe`×`ïmªÚPÖP•™ÁTi…»¢~údñ>Mr ì†`šúÏ£[ñ¤ÃºÍ1’¥AÞì!uÉþMŽ½±›>ϱƒKì¥Ë$â!Š“‰ ÖÙIk"„rl•Ý“DH®…TO˜Ñ<’"þ;VòüÀÐxÔÛ·ç—ÌŒh:2nòô#CSâSg†Ô%)’thtÝÓ¿ƒ' ™;‡LÁ:õ”ÀGBínˆp›·.kíýöÁØRœnp}Ûï§óñÕÇnŸÔù73ÿ4aKÿ‘ó1Õ{kÏÇǯñFÖŽSë6ÙÃ÷æWçè˧xÜ?ÜJ uãOx18IÛÇ)°Ï—ün5,^t2h¹“©MóM‘ìÈqÐ|tDš×&ûèΡ]ÚÈåÆ @u ÑEtâÊàÎKf…¾úöéÄ×”ÑÁ1¼´ü%À‡æ×± +endstream endobj 1333 0 obj <> endobj 1334 0 obj <>/Border[0 0 0]/Rect[289.2 422.28 373.02 435.78]/Subtype/Link/Type/Annot>> endobj 1335 0 obj <> endobj 1336 0 obj <> endobj 1337 0 obj <> endobj 1338 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1339 0 obj <>stream +hÞÌXÙrãÆ}çWtÍ =½a‹ËŽ†“L2ž¨$:)W”JA(!AF£…ýùËœÛÝXI%²]©Ê, 4î~ϹݒÝ-ÞþöJ²»f‘h–ŠŒ™,aZ°}¹Ø,~³Z¼}/™d«ÍB*&ð™¥\+–jÁ…b«íB@ +&×lµÆ! [=-þ¼[¾g1ÏØùÛó/¾`ûPf\»»}±ÝVõûP·å~S¬Ëð¯«ßC“všb®Y$¹Lb¶z·ˆ Ô¬Ý7=ˆþó>ŒdÊUPA »ÜÚª.+k¹ZÄ&‡? Æ•Îóœq“ aœg‰âiÒ=‡Ë\™ÉsD„¢íCxÜÇ#·QÈš¬sž,“±÷^ÇÎÄoŠPÏL F1¾¦a¤d&l–¡ÄgîîrĤÏ‚‹ýÎÝ»=¬[&< þÚ'¥»¿oª0‚½Á®¦àZwÅK©$¥€‘-¹·EHg˿˜' + >…Ls’‡ëìçK×W.ûßHý?^f³ žQ„Ï‚Hfýð u~ýðÀ.«»ûÉÔAÃ.˦D hÍeðÏP¡)ƒò–wõï+8U¶‚ôíÐÒ±k´œç‰+gú‚öMR1CK t\Þ|÷'Lö¸¯êvs¼Y=?–¬jX½Ãí–Ý–›§‹ª>¿ù=8cm‰Û{4{Ѻ&OFÚrÔ?ïHîÓ¾Bëb忾®ß\‡_ÚµÑÉŃû²=ìk&ÝêÕ¯öá÷áêï‹Hsq‘ÒÄý›ad”<öeþ²Ö^µÅ¾…É $^²Óíߟk>ÿÝëÎÿð·ËåÕ5IéÖC»[{dÛW](£f]ÔÖ¿7gìÍÕùןpøúáÓÅ·+wûÓ·?vŸâl$È A£x#’Ãû/Ÿ…"`âÈŽŸhé²¾¥ \?KP‹” +ñå÷Ê;ÒÈid/'ŒhÜ*qåýÄJ¢ØwTÙøŠ¢ª<¦÷ü00 GBMêéau_2'ÏI2€{+‰í=M è,{¤Ä¬`D(^ï”›ê¡ %‘gïCL +I° ñ±gÍsÝŸ±rCÕÝF²7ÁW\ +²‡7È•3$ò–LǸIjN›>QÍs3çµqŒØû Û#&èúKˆlÒ¥T!3•.yžlBM?wôóáaG”O¨\XÕzò¡íÅöCIgj^ÒfÖ3Ûݾ<ÁS©å)…_cšêIhwÃÍØ5©_ø!ݼßÃu‹vûÝqC§'¦Ž‚ˆW’ ûxE~Ú Ér9ÉAˆ?–Ž‡³IÐp ;­X·ÔJUš£W_kíl$×Í(?zQýãWXhPSûæp`ü`Ä{2MxÇ}s–:"v[9¥[Vº_ŸÃŒ^l`;×al‡0‚§é‰ /ÑŽ–·e³¦\ÊT7î˽moä)$œ¡d ¹Âä“#œ0<ÍF‘89/¨H„µ)¯ F<Ú¤ÍF“Øáðò³õgPéÅX•ð–&/+51léœ%Ò?}…õ&Æ"5·þåTæ.•ýn"B¯g–‰r;|Òcþ´kË_³IOÑ>î!( + ‰ 3)â‚ù–`ÚʆNŠŽæhßMtšÉÈ¡û£+uf½RÒž¢þ +=sjs.²ƒûÂíÊì9„ÙÒ“7íÿ!°Œ9XRázAêäl+<šSu?NFÙçaäÀ]‘¾„•‰UÛmy[Á/ì¬W0=&'“M@Ç~ǤñEçGÏkµ>E6'T"ƒ3@O÷&ˆæ±\W­F*á<¶á@ ÕÅÖ¿?¢1ä<•§‚Q’ÆüÑ%Ùò‡¶ü‘:þ˜!·ÌhúcŠzò¿õ“tç–Šº9£ÔnÇ)¡€¡¬^ue× ºüûV—9Ï^V¦ÐbªlÔô«^a¾ Vc‰Ó!]ÌAá‹íÑ_úN£³®@ÿ˜öBâJwpä3Q‡ýù]_Ž—:>êu1)Âîlà”fLÖÖë²i6‡‡)ˆ¡]s*b¿%˜`<$Ј¾(»ý)£î¼¨B¼³Éù€ÎKlmºó›éÿ|^"Ñ›y2Šv¿¥ïÎaœ6McN‹I’"gæÒD?us=ÚòŒC|áü[€:²±¯ +endstream endobj 1340 0 obj <> endobj 1341 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1342 0 obj <>stream +hÞÌWQoÛ6~÷¯à#µNŒHJ”ô˜6ékƒÄXÚ¡Pm9ÑK™$/óOÚ¿Üw$-[ŠÓ¤( $ÅwßÝ÷ÝQ²›ÙÉO×’Ýt3£Ye,Î ÓkËÙjöz>;y+™dóÕL*á7™¥B+–êHDŠÍ׳VDçšÍxˆdÌæ³üìü-KDÆÞœ¼yõŠ]¶Ì„æÍM[¬×U}Ã.ê¾lWÅ¢ ~›ÿŒ´Û)š…RH“°ùÙ,„AÚfážôÞô‡6e*¯`†]5›¾ªËÎÚ:ŸÏŒ©ADF$† ¥ó ‘™Ðá;÷<½»cWÕÍmdjÞ±«²+Á­…ä +œäåRìÊßWpªlÐö+ŒÆ‡&5l¶TKÉÿˆ|ç×Ûº/þæ¿cuâVç"7Ž ô@#tL°|Â⼪{¶,ÃW×}Ñö—U¿/Û¾U ÿÄv"‚TÅÑêlfºýŒÛO‰8²;Zt‡îG¾h65Á{¯!Þ;-T’»#ú +œµ£±“±µ Ú›=…Xió›Íº¬ûÎ÷®€oj'OpÅÚ'?z·…—1)ò<¡˜b5èØPÚÁz_.ª`ýmÉêÍú „¬Y±ûŠ,I)’8qA„žÍ^}EÕìÞ‚„1â„)Ð^A—¬ª­Ñ1,0™¥‡&ã}Ž//Þ]^½¿<¿š_œ_"IEš'ûº–» r»Žu}Ñ—“C¬Ež9”í€N”ÆøqÀE.xýp^/my*ò..t eã·ˆQúb8·Kß®)0L:lG¥C,jãùð³IJ¶êiôìb5.Y0*pÛG{¤VP®ñÂûv—úM|¡Ø´ŽbI¨ƒEãFév!HpnT¢ÐŽK¬í0FcO§-x×ߤío¼êXÝôÛ®X—¬Î´8C‚“©C~=%ß‹~Sܱ:úÚ&ÀeWøãjÍ…|”&ŠjÐvNþt¶~:`›®\þ8†0TXc©*ÓÁq=ÞsWœÇqt\¢–SÝþÐþ¶ì7ÔÁ%GU+ÒlÈ®› +—Éó#χϯOÏ>ŸÎOŸåg84.Øüéò°e\ª¥‡šS^\Þ¶üsSµH’•  m·¡–ÄèI…d|.ÚrJ° ¤”zXi;Í‹šŒÎcš=Ÿl2Ó4}Bk4¼©–Ðÿ‘ GÔI'ñ^¤r¶]½4É‘4I4yÞ +×û2@²l:¡ªh@šúŠNi•:µÏ‘GûuySÕ+&Š¾uz^õUS >æÇ4z¤áût’M.‡K$qÉ…ÓÊJ:é-Xû¥´aëIïoñqS/Jâ1gFð =dÔ •ùj ݺ¡\^>Ž(dSÇ×Sµr #O!4_Ô]ÏXp[´?°ñ €Ã‡Rù‘™„&’õ½½ÕˆiLqŒí©ÞóÕyÆ(…¨FŒ9ñ÷;q_ÙÝßÖ—rìÊÙ£ÎG2Wß1Åyì'$ bÑxnJztÚÛÏIe…ŽÓº¶Óç¿€ˆeßPù²MÃDS\ZOšDäzÊûäÄüU³º ?saä±Æ,};°’Nc?²ÆyõM/ +§5E¼íC`{M»œè|&Ryl™€ã'.FƒE¨3(Æ([GÚ‘rxõÆ»Iª=†˜¢¸8yïA P¸ +¤FM>œt` 9\ Ç¥¼ZmaR„c +HÉ‹—»M q¹Û²‡[÷mYO +ÛdÑñùéX%V‡>åÓa™zÞÁ'DÒ•=ÕË„ßšœ´þ` Eë +endstream endobj 1343 0 obj <> endobj 1344 0 obj <>/Border[0 0 0]/Rect[466.32 223.26 549 236.76]/Subtype/Link/Type/Annot>> endobj 1345 0 obj <>/Border[0 0 0]/Rect[63 209.22 118.98 223.26]/Subtype/Link/Type/Annot>> endobj 1346 0 obj <> endobj 1347 0 obj <> endobj 1348 0 obj <> endobj 1349 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1350 0 obj <>stream +hÞÌXÝnãƾ×SL}5l¬1gøE/º¶·ë4Í6Ób-dv%J éx"OѼDÞ2ß™R¤,íººÆRäpæüŸïœCÉV“³?ÝJ¶j&qÀ?ea³Àgµž,'oóÉÙ;É$Ë—©˜?üÈ4bIà _±|3ñAEøa°|Ž_†,œ|Ï/.ß±H¤ìüìü«¯ØuíÉT|»ª‹Í¦¬Vìªju½,æÚû{þ58–S$6•BÆË/&S$6s{ìIÿ­ö¦2Š— Ãn¶mYéÆкÌ'Q˜AŸXD1*ȲŒ‰0õýÐj+‘ÄÝ{¨,T8z‹Aó÷öÈŒ2†—aÚ)O’ÉÈiDVÄ¿^Šˆ?1åKoá6ñ¦J¦RAféI\3»“"a’Š”_×[»¶x˜·Ì‹EÂÿê™7Ú®×MéM!/ßVd\£®OöR*NÈ`$Kædñ¥•å/1W^ˆ«/Æ,åýïÁãK¿ÿæ¶ÿ ÕÿãmÆ A,Ròï¼àÇùðJž\¯ÙM¹ºoáÌ€7ìF7)Bò=…¤äz!ºøwœ(Á1òöyJ"KmV›;l“P$ûœöýÃHº.+Êdå#"·;mS0åm©½€¤Â3g—Ÿ‹ÍnhSü ·÷(BÌ°AÜLÉ.«ü^³¥H‘q“’¯×[O†x~$øОÊpÿÙ#°àÄQ³æ¾ÛáMC¬6¬`óÂÈ A!°ÎédÞ£ ñ[¯ïŠ¹'3û«-œ°Ç²½g-$iŸvš9e¢NAÙnHúDƒ/ôòBïÎï>å8âåÿhï‹$í÷Ï'\Ø׎´‰-¼Ð ˆœ“ & +G¾çeÕ²]éżÚ›·lfØžVþ˜¾?X‰Omd +'Œð ´.(í?lww DÊïQE‹Õ‚=Øûbæ±*ùïÝ9HàÎÕºyÓ!¡±{êggDýü^Ï?±r¹·!‰Þx>góm]ëy;@°‘t8ƒ3nýîlo[,wæ}.œSjWCÊ匟ä†gÃ*:Ö²#Šù)CAI*ZÝ‹D¨”6oëÁ°ÂN1›U'3ïM·Íw;öŒkÝ>Ô“ýóò'rô#Á€tÈjwÛuë„ꮑUÍŒ«Žß#¿¿$#ÿù‡›ËÛµlG88â ü4ãX>™ëõZžœ²“ë·òäÙÙÿúm £¯,26xœ,voË–¼žü.Öô&2NêÁ +x"¤õW²9j#E*ü¸X¼Z ô\_Þä±óêÛ«üê÷·c¤—"Ȇ¼û:jzΚ`³ÑU+)3ªSÔ<Ô‰ƒØÔ«/â$õ\ ·;2V±fEµ@‘¬Ø+p( qº?ºöaÁ¶Õú —90µr–Z–kí¡º&\°w¦‚„êu·×–ÞTÅÂO"£PÒ飺i!t±Òe…iHaÚõgaÓ¥TD¾3.QÄ&“ºFmœ”S'Ü0ƒ È™ÃVQ+÷"%‰ ïµQr93‘cÛ>$C«mÐuµ!Ìbß\¾;#{~ST«‡b¥Ñ˜ÂmÊŒ,¸Ôº:œð¨CK¢A#dµ2ÝЀ‡T)‡Áß WÊ WÑåILCÛ¶ñà;þàáÒ´ˆáäwÑà'ÿÈ>L¿Ç)ê5þG‚á0ˆ¾0$ú±Uʃ¬ß÷•ãÌG4„ñA¦ EØ· +DÁˆ&¢!{ –ܤ÷ˆ æOõÌø]í8B7á1íÀ¸ë•ê¼Ñ"18³PÜ9'&çÄäã–T$jì"BÝ'Úm4±l7ÊÔ¯E¹AtôÓIãºø;Ý>z” \kÈ ˜r±ïXe71÷ÑFN «epèVOeEÅÁà‹Ìz=ÙõýÕmþáæãÈšKFAuœ»Ø"ˆ‰»˜>\üW³WY=«pœæ÷>£!“êñ±’4˜ LÚ÷èo¦5* ¬l©4Ôá%.5Û åÒ,iníî‰Aw"Rº"öȘAýôË ïwA3Ž`Obðn€û_=R«@DÀAj_R4™èß‘hY–×DÈÚ¹ÍF¨Þ—M»%EcâÓžƒ=e$T}_æcŽM,ì$ù³«ýkC+¤/t¿A*j@iŒY*µð/ìÕeä[€F,Àì½GW‡ +¦ É—³ºy¬Þêè?l†‘ímÛJÿ yE¦Q[èfN½5•åú‘{]ÃmÔ#œš°».€¡GF…Ñ:@>LØYÐ7³Ct:,âÃ^Ó~ìÐ=KGˆXJcù2Ï­s0â9ÀãÞ¡nѳî|™\F_ Uę̀‚ÞŸÖ‘ˆ‚q¥é¿À˜ÖëY&œ$¿ +09ôC™ +endstream endobj 1351 0 obj <> endobj 1352 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1353 0 obj <>stream +hÞÌXÛnÛF}×Wìã²)×Üû²o©­.I™…ÓF¢$6éRTRRÿ²³»¤x©;u DJ$çvÎœš¢íäìòš¢í~¢8Ò‘AÂ(Ä#Te“ÍäçdröŠ"Š’Í„2Á¨Ñ„3¤yD"†’»IVH$bŽ’œDT äËä_L_!I :?;ñ-ª€Âq¹­Ò»»¼Ø¢«¢ÎªMºÊ‚ß’_À÷ž$á(¤„*‰’‹I­›•?ãé÷URMÎÁ Z–‡:/²½³5M&Š­ #E¤B„ñ8Ž&Š„ÏÍ¥ë.BÆ„‰ÁE(ˆ½»‹ð±±+BŒà¢0mî60*›ä¹ô¾I.ˆÄˆE4%œê dÔP!Ó€Âg|üj¡ 1xQ•þ·õaU£@ßîJæ¯öyB¼¸,lm]¶‘-cJÛzÙXâ&–ˆúXþ $Q˜>#ªò–»ãèë׎O¼í¿±ú?¾Í¡À1ƒ¨A!R£vx¦Ï—··h™ow5€Éñ-³}À9¡øsÀ 'q¶&-ýk欠m[ +w וV½&n;luì:·u\ùî +Ba}‘ ¢*«€ó\Ç:œ½’¾ ¡Ð ®‘µYs8 +’O]¯åo8å£|ƒö‡Õ*Ûï7‡[âl刓ØøDܙͅK¢m*Ä¿qxƒ×ÙæËuzµÐ¸!b‰q0è‡û‹l3ÔŸa"m̓U˜hCdÊ÷†¹&×{”Ú‰q!¸U¢¶×b9_L—ɯ bW³«äj>»…RÂcÙ+ kû9öuÙ×iÝeEMP²Ë÷-:h]‚þ%÷*ïJ7,,Ê ûýWJ‹€*¨´Ú¬½}@%&MôM¥Cf@Ü% +9a"ëÑ뇢Nÿð4Ç$V^)í ”QŠ˜€šzp˜«â ΋­³@aSZ4>àÏe¾þ Ã8¸ŒbxäíY §ÅÚšØá x `ah`ÕÔ Ù× îQ½ËF˜ +BM"ÙÕãIð…iÚóMT­s +=Ñ/TŸÂÖ=" Óý0ióc±Ä2À6À~³tF©ç‘@0þM8ì¾Ü@X¢1 ÛË‘°[ø>×®ÏÅc4àRöi ›:©fš7»†´»´y ìl kÇ=œy¸~€T6y‘{¸ H)Oà¥í¨ó²a{¤A:;†(ÙÜÊ{ûHz ¬Ñ +¢ø˜¡Cà XÆ"9ìy¥šm)[£»(Qïà™²X5ä9#°·Œv­vly…|PŠ¸Ò£¸tY}7ódlö•¡¬ ¤>„B2ó<ê1à gÖã×ÈçÓÏÏsh,æ6«È®zpûª,ö5ZÁý»´ú¡Uå}Â&j»ªÉNú:Þàò#ìkøSò`÷ÙXE¤©C ÿhó¡PÚÄィÿI÷•õ_ÞÏì!½Å2AU|"èmq*¼.o³†ªM¨3Ôó~k½f›Ú–i±u_Ç!¥å‰€ØFðg‡àò‡õÉjˆÁ·£àu€¶ +;ŠAsÿ‹p|N­ÿÛC6Þ˜’ôØ!M–4Ü}úÂE ¨µñÌîú¶6˜‚t¯õATðÆÀÚ¦?¾¹U¦@ÑAË’8v!Øß‚¶;Ð}¶Ê7yæçd &P¹A`-ƒw˜]Mˆ0|T¨FÐìèëow_vùj‡ì7öIƒNfGÍöMª¿vb™ãÄl€›ºQÝÛ ßY ”ã¦Äw ®¦ø§áœàn ôH1”C«M].nÁëéõÕålPHNd»Ó‘&eüãÈ’T}7çó7‹ùl:KvFŸ6$ϦÉTežl¢ƒ_/¦çW/_ÍAëꧦ¶Ë9¾\Îß.vìzó¨afËùûQfš}Ÿ…c•WCÀ s©Q/øFôhSîù &àË·¯“åÛ×ÓQCzÄgíÿ „Û2À|YGm›Nï j9½„Éjïƒ÷¼¿Ö +endstream endobj 1354 0 obj <> endobj 1355 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1356 0 obj <>stream +hÞÜW[oÛF~ׯ˜Çá6šp.’}ËÆjà…+2Ó¢Hû@Ë#™D©•Ô?iÿåž339´\'½‹B9©s?ßù'ëÉëw·œ¬-IgDešÈ˜4f²šü»˜¼þŽNŠÕ„ ÃnOñÈmrUÖ9–ñÄ{/gâ÷e$Kè#1¦ Óh*xÆØÌ#×Üýž¡#*ÍXFošûíþ¸lI¤YJˆìã~oU4{é®ÆàZwcŒ—:Å€¡-¹·%æΖÿF ÓTD +®1O q’ûûèës÷/|íï‘úüšÍ‚Ô,ÃÄ> ±õßÔùf³!‹jýÐB2%=…9h)§Ÿ"MIÍ=ëêßWp*lkèÛ¾¥õ¸¥áEêQ;+4?FÓé¾ÙíçåÖDÅǾO9Ëó+Oñ¾SUWy©óùvo–Õª2R’c]ýz4…¡áJ0EÛGqbÃèõ¾­vu¹!e³>nMÝÀ£²%›j[µ¤ªQ—,ÍQé0†û¨´f Ð×T¦€P(†Ne„ÐÍ‚ßî þ.Ðœi‘ dò¶ú2=ø”Ý“&JYN­_Üœ2R …Õ!‚°æô•M•: S±õÖÅyêkÀ‹ÖN4X¦ L­e)ZF¶d^Òc„%Ý’;CÖá øMMÙZKå)ê¾£¨Á"(k²kˆùõ¡7ƒLÁ¼É»?ý^Þ哼wÃf99™OIYß“9^Ð:‚åé`†ù:qªŸ) ãg ûÉ8aZÉ€e$áZ¹ô®`àñuï+X1Îì4ÇB¦¯Щj]ïƒI>˜¾J]îŸô PnÛìŒËŸJHõ3Ø!žyžœoׇ¢ØÊ ²v‚]_t5”‚›âøÛG4ÔÓ%±E© (á‚%¹B,Uˆ2 +PmAÆ&4CÍ7õ“XÏß_]¾ lì´ÈÃp£9mº®lÏ}Wuaõ¹òS4µÕá"æ+±#mðÿ̼=!kÉc¦-s9Å<¥éÉÀª®°(ˆÀëÆq>l@Ge?|•ÿ7Þxwª(hä%döÎtªósšyìqöx4ܺfÀ‚¨—ºƒ>0\Œ ÷•P’`¶°L&cD§7‹ë›Ù¢ø híåü²¸¼žß†íÂ@ö¤È¡-[cÓdŠL-“L$!(;Ónë¶ü-0"¡ÅÅR`¨ Á®^„*ÄšñÞDšvckågêxÝ2Ò)ò¼¿ÜÕîKøÃCÙü‹„Ø^ˆ“w‰ëßtw<—~,ñ¶7c|K´–Ãý +ݘB Ò,´Ìþ#fìÔôoH;&¸ÎÏØtîœô~w¼Û˜pf¨ ö j…Y…7œöëØ„L§É 2%ÿ´ Ö˜Yxù…÷õÈX£`¯9kC*aûëÒñ©Dý8N ÂuÂOâ½ü9Áá¾D.¾°—¶ƒ¹ñ¾=Uôwã.°*™¤ +¨T¨ÒýãñdêÉ1)$±d·ê8m8†ÄI¦Õ˜$×âÏÕò> endobj 1358 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1359 0 obj <>stream +hÞÌXÛrÛ6}×Wàl+„H€ì[j«w\Ù#3Ít’>Ð2%1•H•¤âø“ú—Ýxí$N/3Ϙ/{ß³gÉÉvöâÕ 'Ûz¦$Ñ~D‚Hé“*›mf?$³?rÂI²™qA|øƒ4“‚hé3_ä0óA +óƒX’d '>Hr?{KÏ?’EäìÅÙ·ß’ëÊã“´ÜVéá[rQ4YµI×™÷[òh’VSÈ$™sÆUH’óÙ¢šµ=“ƒè7•7çš šƒ²*OM^dµ‘µHfJ0­À#ÅBE˜qD¾Xߌ»æ&xÌDàÜ„€àÒ܇ûpÄ&1›AÔùŽ†ñ°u^†ÖŸSO,¤DøÜ›‡pª½¹à`2÷8üíõýtÄ"z]•öÚÝiÝO1MñÌÌ^¯êÜ›ƒ½´,0¶Æ[Ã%„Ò/´%nmñ¹µåO/dŠ +/€ÿ>ׄXÉÃqòóSÇg>ößHý?f² ‹0~›_MÚáê|¹ß“U¾Ý5LIk²Êê :@JÆéO@OÒìŽuåßV°¦‚´íÐÑjÚÑð ÒÊéfSÎ>N?¤ûSæ%ï‡å,ŽC,º€?Ñ£Üt½:6yY¤{’VÛÓ!+ÒìÒ†ÔÇloò¬&)A¡ èÉ›cù2ÛõŠæÐB]ð=€“Ôƒ`(Ù`,Zâ)oßg놑£ù´h¶¾€ßʪ÷Ÿ—¯//— F6v &â6µMIòmQ¢1­2«sû&P\»qÂw…ÑÔìòº³:;È…×#›#s†iò!öõaÖ ó­wÙæþ¦©Yj…eQϳ ®NÒC­Û¤wØj#oåµø*_1[uƒ^€²ƒ@ø±*¦ +ñ¹æ€ ya4ƒQ—WôÖ4ˆ‚š`$A§+‹Ø¦ +4‹¢áanŸ­IÙ×PqGÖËÛŒœêìŽJ2Ôd·X[spYËI°»bÊŠ,ÚªÒÏ¢x”X9”Àõêêz±J~…Qs±¼H.®–7np&ã¡Ûy> endobj 1361 0 obj <> endobj 1362 0 obj <> endobj 1363 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1364 0 obj <>stream +hÞÌXënÛ6þï§àòKZm†]QìGë¸Y¶. wÃP…"Ó¶[2$yn0ô)¶—Ø[îRKIº`k%ESäw¾sxn '«Áéù5'«bàIâ³€8G$#¹,/gƒÓWœp2[¸ ~áÁŸJA|É(d¶0@¡Ì %™Å0`Ü!³Ãàu6yE\ñéøÙ3r•Û< ÒÊVy´Ý&éŠ\¤¥Ê—Q¬ì_fß$i$¹T’§ÜsÉìl0@›‘l¡Êí÷©°€!Ól_&©*4Öd6pôñ¨ë*d†„:cŽÑÌÔ÷ê÷ 2Nç=X "õKи±G¨­xéµòÈŒ»•öÒ5ˆléP׺#‚q{äÂзG‚\gasødfž¡"ŽÐÀºÊ33·ØÇ%±=ê[?Úú2óy‘Ø#àke)W«ËÐ^Bx> ¹„Æ —¿l—z ÓOÆ}B rûì}}ìùÄe_õ¼LŸ‚ôh€gÀªS`^/þ£Ì› ™&«u ‡)­‚LU¡ ¤¤ÜúÍ”–ZÐÚÿ+ö…ö`ⶠi×ZHCϸ3`±çˆÓ†4ƒ¨˜¡Ÿ¤%Ù%¶g¥ã—dn-Ôò0Ž6››(¾Ýí`^½W¤¼Û©¡1e “a¤œ¡Ì,Å$oA…³¨ŒÈ¾@=žÛäw0ûºÚ’«=¹*ž×./¨Ã€wƒ|zŠÈ㵊oI²$åÚ°!H¹°™Eâ,ÏU\…L‡ì•sKoúêäw€pÜ)˜^ŽoPKuŸ\¥Ð.–˹u2Ó2 ’f0]¡Ô0=$² F¥ªÁ\êˆLã(‡OOæöózYuG‚sUîó”ðf‰~ùÑžýú‘À€¸Éhw]FyY‘Ӫׂ°N¼Fâñí{@˜[øÑ’zWŸ'¬8¼X,ÆÙv«ÒŒa´‡i-Ír“g·*Å#EûIò*qk4¤ ‰×èih‚mWO0ì{ÈÉ¿Hñ ªíC¥ :E}¢M ÛS§g©–z@O'ço.O†ä¤ˆ÷[xÂ<ø»|ûúõ=¸ñ·ôÎïßO'×Û¯#jcÅ DÁt+-VX6aÄБЯ?“È©j¬1·`úHÃ(WJâêÏ$î“žOß¼½By«U¾ûNÒE£`מ‡™ã=ÿXµ-uƒ˜)ÀL*… ¡îª*lÚ—º@HÀ¢B™&ôŽ@8– +·è6DmëÈ"¬‘u?TwðR#Ï ë¡Žˆëè:¸M°A†Ñr]lžH%®* Hz/Öt_^S¬«é›«Étö3f—†ŸCýðx½SwZ[‹­üÃb_¨‰–صa’6X•ðÚÅë÷~Ë@{jvèàÒmê®n!Åvp±Ïkj«(µJ²´ƒæÒðXù0œ{OcS³í.KAפßZèq‚5"kÀ®’´§§x*HÝ,·HÆ+Ê»"4–ÿD  á¸ý#iU¾Þ©8‰6—ªìAË£s¦Ñù©gÑ*}™¥êÑ~SN÷ÕAåŒúA»‰×W©ï !Ë»B8õÅÕÖÏ!¤v=ÿqŽè4WT¥ªŽA›;ÐÖS}#É©~ ›ûÍæ6qTõð• ·®ÐÊløȉ2ß>Ø#h£ín™Î…h`ÔÔ67 ªˆ1h!“εʕ;!ý +l> ¥Èuk)Ü?"¤F”ØM·` †%Œ[Ú¨Bç[ZwŸ¨'ÜõAïVÃw–¾dX% +õ +°ëÄï'KDÐO¿Õ@‡DS!È!)×Тa¨VP àbƒ—èȆ;þOS)GÒÜ·\Ñr ¤#z ÑûoÔLèK[ +ðwû4nŸ´é@†Ú]Båˆ6º¡ŒòªÎSÉM¾l#9¨Ã®r|]·Yw”5ìÍÒXœ°š Üß ƒ/,& +endstream endobj 1365 0 obj <> endobj 1366 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1367 0 obj <>stream +hÞÔ—moÛ6ÇßûSÜKj>SzÙ5é°ëÇh1¤{¡Ø´£Â–·A-óéÂXŸ/KÞÇÂxŒåŸDSƒ>·Ñòá|ò÷©ó _û6V¿ã×Â,HC3?¬ŸfNÚá•>ß®×0-W·N¦$-L]ë°¤¤œüìIât(ÿ¾‚­l°mŸéh|ÑX3êæÐjÖÇÏ|ìäê¾êŠ¯Éì ŽÖqtNs›Á_x ÚP©¼Œý„ƒ¯IYu°p‰!Ë;ìv¬î­kºûÏ$fŒ2tîk—ùf:Ç÷çuÕv0Ç·Eóô`0Ñ%öºù`|M¶˜Cêí*6Mô@ÁM?ˆùäG¯#Å6T2ÏÆî÷q‡°£ÚÞ5¾Ì‚ÞS×õÖ{ýX¬ýi÷Àwf¬ûþœD³MÎCöÒ}í\“·ÈLIYí6®êÚãt`Û‹’¿1tÒŸ…à§G*§y®½T%öLU$lœâ­›—ËÒµPÀ®*ÿÚ9؆éò†8§r´ÃÈCmw÷P¡SX&R ¥êÄ£ +º[õÍ7ïèqè)ª’ö±øc½yϘÓÝS*¸~‰Ð§2*Àit+\¼•§m¬ ôŒÄRˆÕ"IÒ]G-Úxç15Ã,JŠ…&2\ùÅÁXj†fˆ³É¢Ÿ…[ÞM]±ÆåP0Ÿ*ŸâWFŽI<^ª‹ÕÛî „«aE4&Úý­(¿ú9<®DŒKÄ"—Óß//¦³?Ž2­¨ÍÇÉÚ{³½7h»¢s¾(á®ìnÑ_ƒš J8Ã5f—àasƒ™YÅ®ô7ÖûöP½>M­Ü÷”8ÄDá(ÌäcÁ𸼑ÙmÙŽâ)[?ØR-õ©â ` q½íʺ ‹js¬–\ŠsîÝ6 #‚ß8صn›ºqX8¦®p÷Â=Oj›SR¡ûÎ!B¥ ;«'ëæÂÐE½»Y»cŒª‘¡±wïõ€Ò?¿ +¥’©Q³|;šŽ8ôàÔ¾Ž¦Ãž…å1±ŒÐá¡¡UĤ9`RELšÿˆIŽ[[“ù>Ž Ô' ¼êüPˆ¨TTŠçQÉ5ǽL´zKÃ_ËLŽ*íYNf£Y”ƒaŸ¢dÛyÏyQâ€%ø2j="m@$Ô"M„ßô!ÚBhsž +ƈ^Ç1÷"mVD›À­"h³ÖÁáËj`[\õª“”‹ÿ"ëÙï2ÿ`³|EU +endstream endobj 1368 0 obj <> endobj 1369 0 obj <>/Border[0 0 0]/Rect[145.02 199.26 196.98 212.76]/Subtype/Link/Type/Annot>> endobj 1370 0 obj <> endobj 1371 0 obj <> endobj 1372 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1373 0 obj <>stream +hÞÌXínÛÈý¯§ø×pךpfÈ!Aì:ö6ívwa«)Š¸XÐmsW¢´$UÅ(úíKô-{î I‘´$ +4A$†äÜïsî½’ìaöê»Éê™Ñ, S¥†éUùì~öíböêJ2É÷3©Xˆ¿ø’i"´b‰E¨Øb3 !E„‘Õl±ÄE(#¶8ÌÞó7—W,)»xuñõ×ì§*©Ð|ûPe›MQ>°·e“W÷Ù2þ¶ø4i¯)šÍ¥&f‹7³9’š¥¿ÒGÑ©‚¹L„âÄ°ëí¾)ʼv².³8²ðLjØ0¡´µ–‰( ÃÈ{f”HL÷. ž#"íÂã>ÖEÁ2<ŒÒÎy²LÆ­÷:ö&þ) t$bþÄT(ƒyŒË$˜+™J›U ñúûŠ‰’T¤ü§jëï­öˆF$ü]àžäþ~UÁöòmIÁuî†/¥LB#[lkK(½-ÿ ba &Âg(Ƽäã÷ä¿/}âkÿ©ÿǯ¹,h#RÊAØf!4<|¡ÎoÖkv]<<6H¦æ5»ÎëÐZHþ÷@”<_‰®þÛ +N”«`Ü~ÒxÑ$fg‡µ„ìÉv~óT6Ù‡`ñ NÇþ´Öx0ÐIˆÐIÀaà ‡ßó¢lØ* ¿?Ü4PßåUótË}ÐDýT¾!áé Ž,·eÝ°%λŽåoš™ +)Á9úš¤Ý4Y“oò²©Ùå‡l³[O:Û(»Ä÷Öµ#ØZî& ‹Ç6Üè˜Á<¬×Û@ôÔ<óýWóÁœ.V?v/€p·fý ÖlÙ²Êaâ挂ùZsžv´=£-y¤;8W”u±¢ã×N¨âßke(¤È‘}¯îho™­×wÙ2` +þ+«|§pÐr1È3R‰b+Ð…‡¤z±Ä,h–†.¾e·|•ß.¼¢_O;ÜÏÎYó´ËÏ_"æÿàUú‚€âÏ`Ô7YˆÔ$À]ßìNÂâ«ö 4·gª¼~Ýu`pI›!Ù=BPu‡ÏUâÿi<\çÙº£DܽågÖyùÐ<ž£E|¼«¿øý%Þ¼øãÏ×—7·Òž½1Ò0¤]Ü%æ=»/ªº!Ž³Ë5î?}©"Œsr7ü¬X}€|ùYr'±SDÉ0vú}U²ðõ?'nìЫŒlkq3`4~?`õ1í A©ôñHÔ2úgÉVBWÄ5;þa&M¡ ¦ã’&¬èå{ +¼¾üîí?ÜŒ,‰„à(éÔI8Õ½F¦ŒÕ$= +?C‹”z*›5Ûî8™­½Š9ˆ&UÓ‘¼öÃ68Y¹ÐKv—<ùŠmËõ>–9àÒÆå¾!" ^2xS…§úŽjÙþŠH.öH§vc$Ž¦êß›€neŠX"%ßÑ8ÜcÙrèz‚KÚp¶IOqãÇB*í¨«;ism…Š]G“É .ò>îç¬Îsö¯¶¾þMhŠ‹b°Aˆ$e±$VÆ9ÔsƒÅÌê(*TøÔ¾mœB^{"ï‚îF™ÈÚ.VªmEß_^½¢}Ÿ•ûì@àâo±“à£ÊËé +'#a“øY9:TÏ•˜ˆÃÁÉÌÿ5‘¤ ïÙ& ìî)Õ˜Çî Ò—¦£ä#9¦ŠÌñ/{žßäóñ(»‚×ÈÐZ¦y‰>¬yÃÕ*®cÿhŠÔT3,.}´ÂóuV5§ˆÊŠ¸«²¶R2ÉË‘osì!ñpƒ>Š¾,W§£Úm|"‰i±Ý³]@‰z}v¬ÏŽ¤JØS%Ôë¢ÝX@Éœ`ˆ¤Fí U‚/±ÒT-£ÞåÍ!´çB,¼®LÛ!óÝPX÷ƒ@’´ä˜lLaãe¶|l…yL%G8ö±Ÿ²Jö—Ñ<£Ÿ+ö-5y†tÓ¶E»¥ ΦL#ͳÊò]þyÔ0‡ú SEã˜aFí˜Dƒfd¦Ðéû”§bþö¾'5b\†=¦É0½‘½ÃB‘¾B¦ö¾{ûÍhnC{mÊkc;²JÜù˜ÚiKû$!Nš#â<¤$%á¾_möHæ|JÌÖ¡e‹ÿXF÷º`W²ý[Ûl½´ªE軃™òõx¢±Óí†zi{Oäz¾æD_™–ˆ¦.¾w=ê*ƒŸ¿Åó¶st‹¿òÐ °;&†EÔ=^lPQô.63hC«Š¬n{Qÿ¶“¬´PéGDköH²ïŒ]c랊•ÔNXÙÿ(¨R_‰ˆýŽÚ“BÓô6Ê)\Žm † KùD/ó{•u{•ô{æ!( +zÇmI2epÑÿÚææÂU^/ýh¨yq‡è1¯ÜΓðsKÂ'YCýÂÔõyíÚ|l­MO†6¤Ÿ+SÕ®ÇfÐ §ÝòÙ…Ú¿ïD[ë—dG€€ÝËðB—¹î•O°4R)UL/m´g>ËZè³ÿ` +ÈC[ +endstream endobj 1374 0 obj <> endobj 1375 0 obj <> endobj 1376 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1377 0 obj <>stream +hÞÌWÛnÛF}×WìãnSnöN²oIì)ÐÄ°……SŒD),$Ê©¸þŽö'ú—Ù%E.e»m‚E`’ɹž9s(ÉzöôÕ•$ëfæ4IEFLæˆd_ÎV³çóÙÓ—’H2_ͤ"þÁIf)׊¤Zp¡È|;`… “k2_À…†Ìog×ôìü%±<#/ž¾xò„\ì™Ì¸¦»õ¾Øn«zM^×m¹_‹’ý<ÿ<éàÉrMÉ¥³d~6KÀ ºY„+=˜~·g‰L¹¢˜!—»C[ÕeãmÏgNñÔAFŽ[G¸Òyžn2!LÈͧëoBÆ\™è&Ðþ&$|,Gi²>w LÚ.ymC„?LnéQB²ÄÂeÊ%3© dÅ$Eø]c&ÍxF/ö»ðÛò°h s<¥?2§ ¿ï›Š%/ÝÕX[Ÿ­Àr)åR¬Æ’w±bù“YîÀ§£)!Áòpžü÷¡ó?|쿱ú?~ÌwA;žaD×á&ãð•>Ÿm6ä²Zj¡™š6ä²lJ˜­¹¤Ÿ™‚™¤å’÷ðïœ*`cûÈDÃ.uÑ4ká§Y`èôÍ®-¿#lþË0¤š¸Äq@Ó.W•†\çL*ÃÎà@nä¦8©¤ ݸÛ`Éà zKbðxqùöâürþSäÓ— .Í´¼M[´å¶¬[²bZÔÁ¹£{Ò~*!ùuµ«¿%wLæxç‚æÆŽŒöS,º)Þ²†îÀàдäДdWÃßʽÙïn| ð™ö.˜LŒinG Ö b 0íG’î;¶"Õv[.«¢ÅDSže]0×´ÜÜA*ƒîî€,$Ýlàìàâ–)8"bq1æ$ŸPÒe¹º½ôeˆŠjyžßÐGªíZIúX™4ÐBN^2`þ«›Bu·»}IªÚ—L tŠ¢œ·p†SÑúâ7eÙ×HúºcÒIçÇè¿“FŠhž[àï†GÐuxÛ™¬«òv²0T²¸z¥°WW=X†…ÑYBŸRäp|Щ„aIc¯£ þè28>… N×Ã3¨hvšFñÐ +à#7ź„•"8zI LØŒñ{úyW-d£(î¡%Rîúå ;ªí;b §Øvfè¶|d“‚89*î4Þ ~v +‚m^íÓŠ)zƒÂÏ÷¢—ÛNT ¦RshØ×8ãg2(ï%Y›·’s£G8½#í‰I‰¯¡ îÐÊN˜hP-[€HÓ-ˆûù=Ñví `¿€$šŒÉŽ«4溿¥¹P@DK§»z˜Æ’+RâÂÇ—¿ŸRà§ÅcøXä!¢†f.àùOÅþ¯yPæJå'¢c_¢äÛxBûx.c*qÜ*#O%¨ð¿ÎjZ +endstream endobj 1378 0 obj <> endobj 1379 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1380 0 obj <>stream +hÞÌVÛŽÛ6}×WÌ#ÕT\^DJzL³›¢Z,v…ŦŠLÛ*lÉ•äfýIùËIÉ–\ï%(lZ$çrfÎÑpXWßßsXu–°âTƒdК`|—Wï9pÈ—Àðƒ?š* TÈ,Ë€Æ)c±ÏL šèqS¦"ží#"é61ã#™C!ÜŒÓ1yWCöRù*BSE #…Ë$ŒO¹À˜EÈñ›ùç±M$NRš’Û¶ñÏû²‡PÓ„üº㟷]F/ij ®K—Y¼„ЉÌÆ’ ±0îcù*ªÑgŒßŒ'Þòé÷ìïS¿¯<ößXýsUš¦¶l¨Óg|ø—>ßn6pW­Ö=S’îLgRRNþ +’’˜ûèàD¸ÖÈÛg(u¢'tŽŽñ3û[d¯¤1Yí·¦î»±ÚÂþ#_­8*Ö¬ª¦þ¹Øš0ÿãDoN3<€ ‹#¿å‘ߺ#÷;SVËÊtЯ Ôƒ‰”ª¸‰;ÍÒñ¾¨w4¦'i–ú Ý +“T™ :µ¬Ø:#é$Ã…Y~ºC3HŽäº ±žiBYW§”åì”VvÑ@:—M"2ozžNgzö®±Vác³¯V 'iø~ É'ÌF‹ƒüå몃Ö+Ø¥ùs_µîJEì/¹Xâñ&×þªY@Q/ ,jøh`ßáÿmÓï2™•v«¾ÉñMæýï6ui oQ³1+€}!©8Éxr„›Üê¾xô§•?ÑL{uµ +°X-T`_+á2y°¥@§¡&¾ZX(‡ãâ9Hwñ fåù:pç½›¡Y±žÌ9r¤|—“ÇÍ,N%s%Á'ßÚ}L'áÃÄÁ1´×z:|5O믖ÓKž>„sjNÙ3=eöu~…à ¯;õD§þçIP}õDMž»ŸÝþ'Î_âz=SG¬FêÕ‘«)ó——´¤lð Rã´kHœYÊuòÈ^îæ'e_¨šRXÕ53¾¤™ØC¨™y¨œT8Îल3ÏH¦È¬dz%vÑÓ“7ìf»ÔNvjË`gÀÃRj‚°”ü·Û›’Ø©gS!ý{£ë‹ÞØ΢#³âL9"8"ÿŒ™MΞOªGV§›]€'ÁÖçtœNr=,ðöT¥›zsð²»Ãb;æâ;ß6ã\®'"û‚&¿J„_¾¤ÁùagžRàR6u×C‰ç×Eû Ì©lÁÙ™ <›HŸZHhk6¾Þ¦Â‚óÎß ™ßí +endstream endobj 1381 0 obj <> endobj 1382 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1383 0 obj <>stream +hÞÌWÛnÛF}×WLý´l¬õ.ïLЇÔVÒ´hØJú-­dÖiT£Èõ/{f—¤$Û-‚bäz/s93sf©i5:yy¡iՌ―R˜Æ(ªÍh9ú~::y¡IÓt9Ò>)üâ¥ÓD>%’ʧéf¤ Eª0 h:Ç@馷£÷âlò‚"™ÒéÉé“'ô¦öt*Q­ê|³)ʽ*[S/ó¹ñ~›þMÓÉ€ÆZê8¢éÙh ¬fîFÁNô¯µ7Ö‰ôE1t^mÛ¢4•5™Žb_&1<Še“ôƒ,ËH†©R¡óͺká±ôÃE»‡82 BFX ÓÞw6LGóAä,ü9÷‚PFâŽ|¥½q„aâ}j&ûžÆS¹ùˆý“T¦âM]¹¹ÅvÞ’ËD¼óìŠqóuSxcØ+ª’±µÞ*†Ë÷ã„ñb[²Î¥-y‘Œ¡3ÄSé„ÈIÞ½ïýûOïÏÜöÿHýŠ·Ù(±L9ª‹‚Šï•Ãê|¾^Óy±ºjÌ@4tnƒ +©Åžšf!ûôï28ñmÇ(Û©hlŒ“x¯šÇƒýÊÙþÅÈP¬¶S¶MW°±„üóûr•Ê‚hïnŒ7ý}WÕZfYĉú¼Oõ­»Š¾¸1óbY˜†Ú+cW2ÜJѱÔi û”Þ™ú.GÄbg$¶vŒÚI´xzH3T 9† ò»p9‹î¨* UKkÖ’qNEåá±^WžF Š[Ôr*@hO{+{€™¥c;bÒðS‡ 3« û:Y¥8·N74ù˜onÖ÷àÛV¨˃‹ î©§+÷©µ4ⲉv¶†øÿ–y×x~†ñGAV5Wýob¶¡œæ¹õN"H; ‚Œ;¤ÖëË|îé izMµãaº-Ú+‹Ç°&ê‘Ì“ªK¸¾0Ë[çþéåõôAî(©Óa;²KºåNœ‰/ó€y;ÕÜíPö-Êï iåÅÂjùžfVéin­¿Æ<«ýàì=v-9˜[“ý'…ûÁînÅ[âYÞæ<»íÆ3þ´B¦ßvÇ ¿;V›æYOܾ Œ„Ÿœ°ðÓ+3¿¦b¹°Àlã)Aóª®Í¼Ý#þãp;g¶þè›ïh,‹uض¹óZ=t¹Ë™8šZå •¦[z§cÞþ‹†ž·æ¡UêËÓVÔm] 7V8"g³òhæ=ë!êjwÏ‚Ú´Ûº$=l±‹Ÿ8ðÀHùó÷¢Íë¶+& †î5=ØéFæ§ç“‹™€œ=«‘íľÎ7à`Ú•ôàÔ’û¦*˜]ÙfÔ¸:&üEv ñäù/TsÑ"°+Ü2nÐ;Ð;xÑÌ·›£c:ß^VmËÞ|±?“rÑE`£1ÿ¹â .WgƒzöÉQÒÀ†È^Š2_F®u19¼˜¼>ðG*ýǘ^Ù«šàÆZ”M›—stŸ¼iŠUi äzÀ|Ø¢DAØC[è:ïcó½‹k+Ô±Kðî³m‰ï†MK—tŒ›t$>Î×Û¦@'ç³¾£›5®Æ 6­X˜ý®¸KeÝ_ùv>u=à²Ú–‹œoȶ9!4 qÄàI¯+ª °†p‡§’A¶çhì(sÀ¤6”Û¢p@¿CÇeÃ2v‡ï9MÂ$/sãÃÇ6F’DÍ»Öðòí«³¯%œqçüå£hšÛõ‚c8ÄŠ¦2Ìö ì±ûà܇µ›Xfþýð)Ý¢KÏgümò0-3sÞ‡T«£]Væ_÷UrSÜ 8MmgE$Žña‚H¾…¸«¼^ ÍÂÚK0ƒ“$ýbóe/õúûÞþ×YGôÝa͹–[Fƒá>«ád¤f;¿B`œ°Lª4Úëí»;!.+È»µ)W¸Iä%BXØÏFwì±jëZÉ> endobj 1385 0 obj <>/Border[0 0 0]/Rect[85.68 610.26 123.48 623.76]/Subtype/Link/Type/Annot>> endobj 1386 0 obj <> endobj 1387 0 obj <> endobj 1388 0 obj <> endobj 1389 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1390 0 obj <>stream +hÞÌXëŽÛ6þï§àOi3¼SܳÉ"‹¶ ¹½{E4ÍÈç/?ÿì3ò¶IyFeRoš|»-« y]uE³ÎWEúïå¿À’ –4•dÎ)7š,ogsØͬÂ7yÜú›&sKERÂ6dQﺲ*Z¿×Ýr¦•ƒx Õ†P!s„ªŒ1"3‚ZÓ߇©P“ûLˆô7!â!ÎgÁ¸©²>xôŒë½ÔÁÅ/óT*ª“Œ§s _m:<ã|)‡O~7ˆ²Í’·M~{Ø­:’j“¯S§¿7m™ÎÁߤ®0¹>\†ùÂXLúâ¢/Œ_þ›jjÀ¦‚OÆ-!açãõäÏk×\öçìú¼ÌWAša X¬3'xx¦Í›ÇG²(7ï;(¦LZ²(Ú %åÉO©P&Åíû?v°¾ƒ àöÒY€t†Ýl¬˜´³EçYp|Q§Ð´&Ù·S¤97P"vÜ6@Õö •´Ë÷Á­Ðý=i"`É>àØ"ŽINÚÑŒŽf$ÕYH+¼Jo¾¹O—ÿ9z#¨:æž÷ƳÒvyWl‹ª£™šááa¼ü éôÑî ™ìÔ)[R?yCøQ ŒrãÂS]YWù#É«²Ê+ò.:8—÷ߢÃd×d[7éÞÃÃuµ*HY¡×œQ51<ä…EÃ1ãëò±Àʸ„’W)P»Kê>Òª.ÿ9¸Ûùš÷»©žglج¬Ö؈Ÿ5 ÔþPÉ6ÅæÉ1D’¿ƒ²ƒ›Å¥:sêÔÇÔy(ÀÄ áa6Êÿ ‚ÏÍ…Ï êÛSuðº- +ò 6&Kö)OÚ_{ eÀšb‡ÚŒH RF5(ÉQ F¢($謕ÔE]è­ƒ[eåᨊìûH9=ÂÛw¯^bz¾È«Í.ßj +ŸW "€PT§šÉ!F«G¹K¨¼Beš‹Iÿ¨Á7ã}{½*‚}@V5”¼¬Zèàî±@¸Íi…n_ßÝ,în&ERT\ê:áÎjtLJ´4êþ¹9"ÅR&¨¬M·»¶#F$SÐX¸ûøX§þÚT5,G7¬jYa·¦¥Õ§ üÓ°p$Œ¥›!¢ jmÆM9û‚ø¾ï{]Jm¨.†¹É°a š4»42²¶*N€—px[ä¦)rôÓïŸñû+ƒÈºj@ 320ê¶_ã†Ãš°!.üÀ~ŽŠ3‡êfYèJ¨Éƒ”‡ôF¥œC?O"N„K6ê˯ê®ø;9éLgF‘єҽ¦È0 §øé å|¼¸£NûAQ%ǤgŽÖß.Þ¼½[,¿;i{N’è€0g25éSß ’! +~j8\^@óBï’C +y„…;²Mñ‰>ÑvA䶪Gm‚¼ÂÿÀ1OMÔCmG<‚OÄÄÔO~¨±Æ¹€áy¢J€Þ özå-·Ûâ¡„¨Sqr‘à£;Ó}d4§/ãì¡XïõþÎzýõÞ›Aý£¿¨¥@%˜8(¯WT$øh‚RGzèôô ==Ø@'øTЂZ-ñDàyM‹$IÃJ;ÝØX 8\øì*tª;û¾†SSÿ(áÌyP]3£a-z;:,øm—5ÈgÜ+ ­î„f'Òô€ŒyÀ2¯tö¬<~d à ÝWÈS~ g"®›¢Ûõ5¨Òa¤ú$£\ž ›ô5#Zù_“v·Zm»Þ=NÙ%Ì >þž-5¤˜JŒ†ƒÐ–Èáðy}W¨µÛKóŽ?8g¨ íÏ€Zÿ¾Y[œH:%Sî4T"b%úÌîý|9™öŠ?gã<‡[†¯ œ¨/+/°y(R“x˜þ„CÌ;‡žÏoaL3 ü+Xø>oþÖÇk†Á_×Ç¢¯~Ÿà)Hã«/Û┋µ1rr÷n,xyúnø¤…\›¡’Ì™3ËuSnÐè·§í!´;7 s²É짱øÝ_i±@‹Uw†aùØ&42wòy6êWh³ÞUx9±  7¢±aâ|–åÒG»jð‚P½àr„¾ÔTÀÅR¹ç¹ðsÛù„?ýe%>|¤ÅÒ)#‰TdåÑ‹¸÷M“_«d³;Jèà¹ðxÜÆêCå» —ÂPé|m×ã‰(jÜ›§þÝ@,á!¿#íS±*×ÐÀxʇÙk<ÆW­xª”s˜Ôx²}gÃVõãn ‡»² +ƒÚ¿®\0Òà.yÓ¤8­äa’9€îv]1‘LJî½O‡ó˲Ï(ýwzhTŒ…óEW“rS…—e;d‡NÚb“;©ÅhvFP ¼n])Šø45aýÛñá­C_Ìçب©Ãô¸Ç /^ÌèíVœçŽ…1¡0fZ•T(Š’¿g ÞX‰ù¥2T3}õ•g««¥‚9ñ ¿Ü”ü +endstream endobj 1391 0 obj <> endobj 1392 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[303.96 641.28 472.14 654.78]/Subtype/Link/Type/Annot>> endobj 1393 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1394 0 obj <>stream +hÞÌWÛnÛF}×Wìã² 7{áµoi.E ´ l!iá#Ó2[‹4HºŠ¾£ý‰þeÏì.)RRÜ N€IQÔÌ™™3gf[/w®Øº[$†¥2cQ–0#Y[.®ß._(¦Øòj¡4“øÃEe©0š¥F +©Ùr³°"d”¶\áFªˆ-·‹ þìù ‹Œ=}üôë¯Ù«6P™0¼Y·ÅfSÕkö}Ý—íU±*ƒ_—?À“qžbaX¨„Jb¶|¶aܬÜÙ›~Ó¡J…æÌ°³æ®¯ê²³¶ž/‰i‚ˆ'Lh“ç9Q&eäb³áÚ/±ÐÑìK$„^0öK<¦#·IȾŒ²!v¦b¼‰Â‹ÀD"æ;¦¥ +·ij•) È:Pø/Çç*ÒLdüUÛ¸g—w«ž‰HùëÀ~SºçmW!ðò¦¦ÜÚh%¥Kë$¥|–Üc‘Êaù;ˆEŸþK•2æ,ï¯?výÄ×þ«ÿã×lL"2ªôUÉA;<Ðç“›vV­¯{ÓðŽ•]‰0F(þG Ñ“¼¼ý=ƒSmœ m÷v4^LÒä › ½$ä¼i«²îƒåoûU"Ïc¢]¤â!^54éðùm¹ª®ª²cýuÉjWüŽ“±¢¯@àæÊÂÅÓÖÆÄå>_"îÐÜ«jkÍ¡„» ÐÝŠ „=æå#rÐBoŽ$$õ +B7>š þº@%üÿc~gïÑ\©âßÌuÈ™LPí5(õø$ë– +ö"0ÔÍíé–mš¶â«¥¡§¡Aû¶Ôû¸nsÆ‹~ˆÊ#G”¸C.¤G¬+KöçK'v†Wð’ò1…O›Ë²ûk¨º‘Fä(w—LÉŒd"†ôíl_õHf"Íðrì«·ó ´“3x¹-Ö%S¹£€§O¨!K¨~¨©g€£MÛl*6åGx£g´ñ >fÍXrVóIU6Õ +©î¯«î˜®ŠLïò”ËÝmùiìa $–‚ d$ƒØVÈB˜2§<öŽ("±KÔWèËòj{sÐ/¾=ïÛ¹.Ïæ–É•Ÿ[šž¥å‚?¹éìB¥9Û’‚fn]ìXq@‰Xäñ1%Î^¾9ŸÕB‹Sr­ËdQ.©ô‚-2Ù”ù"¤z" êPêƒ0‚t¤Ê¥#õx|,laý‡C2›ü¸Ëàv†=ÿ£ÊûjX]ã<´¢¥c[õ׊ubÌYšLV9‘¢ ÌQ +bþaUÞú¿ÿõؘbräU”Û’Ú10Ãò)oõÁ íÛ^W+-~Tnweü£w~̢ݢiumØ î’*&¾´mð îÑAÂmA~ö–»ýR½iÓW8¦Áå_5€ËVxùºh¿:J³Ö:•Þ­£ýpLfºlÊ9—p`Il2;Yõ#UÎrç]F™—„ò`,wt¹ý0lâfƒ½*óäÈ3 -9…ÊÎœB–ÆקN1PTnæs÷å|~^º½û²¦KBÅéÉl+ƒÃÃ"¿lÞ­ÈgswÊ5„Y%ù±ëT$Ú Íƒ<ÓQ™×+;éò )VäøÕ¤Ð&ÊH5ˆ‰å÷aÂu|"hœÑ“,} Ñ>ÑãÛÀYS'FªJ5Fêä@àm?iÌîˆÛÍŒwr¾Ó8ÔT|þþ£ã(ÈæôZ9Ý*+»§E6]&ýs»O§:Å7ïË–t|X"± ù52Ïgx8+d¥hÛ Å,h ¥|‡PßÓqÛž³ëÏ>¶\’HÉÏØ.ÍÁ\{šžm™X-†ìú=N~ÿ0÷gŒ‚ +endstream endobj 1395 0 obj <> endobj 1396 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1397 0 obj <>stream +hÞÌWÛnã6}÷W°y¢º6Ë®]ô¡uœÞÐÍÂv7-ÖE 8´£®-’\¯Qôƒú—!%Ë’“l‚Eî–B‘Ã33çÌ‚,{çßMY=_‘€‡Ä }¢8ÉuoÑûvÚ;¿Dé¢'$áð" ˜’$PœqI¦ë+Œ»‘"Ó9¼pá’é®÷ž^Œ.‰ÇB2<¾zEÞ掙¢Ù2×ë$]’ÒRç‹x®ß§?ÂNÊîä1E‚ ß#Ó‹Þ â6sû¦Ó×¹3“43dœmË$Õ…±5šö<7|æù„IEanȹk=ó% üú;¸Ì¤ÛúÁ€(ó<>Ä#2Qˆ|tÃÚyD&¼Ê{åYˆ?ÇŽr™G÷Drá ìéÂ/!ÖróìüùØó™Óþ«ÿãi& Êg!æ€WYà~GŸ¹ç7«'Ëû’©hAƺР¥˜ :DIõ«ù_18†Á>趑´ß•4Lô¿#gŸ#tz—Ý$é<×k–ÎôF«‚E‘‡ìs…Q+¯…jtJ¯6e’¥ñŠÄùr‹‹Iy—¤Øèy²H4šŠ… ~Ðz]Ej©°F“Ô¢°uàg} zϤ"<ø{W$µ9€I¾Ûd °&Ð@œçNôUÂPå&.KŒÎ¥)#jOªbäU‚kÊäMþå›3^Šÿòºc@Èä³ Lºƒ¡jZºV;}`bÛðEž¨ñrD:æE‰X÷òl÷&^ëgé£Òç©<Ü&)Ø" Ç”`„ßÜj÷„þ–­OiX5Êé~£Ÿ¬´§0;(QŽP|ÐHÈê¶d4V¢Ý^†-ðŸ’îÁ¨¢¾õ¡:vxE©7¿¶§˜|HŸ~Md÷PTŒcá·VÅ‘ÿM¯ÀšáW•þ §ŠÌ&ž'©­gãáq÷©+£ªÒ¶$·ºÜ9¦jm‹Û<[m×)Tèô®jB4!G¸ð|´‘„xÔ|^#¡UÇáXz\º"t•C¯€sÀÁ_@á=A· f›iîôã ô‹%ٛǓt3Áqk¾ðm•Ím«€Ðb_çì8®õé˜{UW„wº°“ã_‹ÄRÕuú‹whTÖí¼(-±[mƳ\m¯ï,ŠE¡=ã˜7s¢Ì7÷–C¾5?Î0‰!ž(FãõfÕ¹š´NL +Ž÷öÄdÖbTÔé½) Ès¤tµÊ,GvxûÑŽŒàý#ÊKP³)îëÎÀ…Q ™Ç–©`AuIƒ£µZÝÆsÐs"»¤¼7*¡žt)W(ñ˜§»q¶Þ~8)?ps õËZêG|{1ÂŒ x¡Ü*ÌÒ„ù=M@Ž0Ÿî†ß’™ÙmظŒë ´oÏÓ Bin6¯ZX²ì?˜Š0ügà‹¸Œ¡˜¡ó>sÈ_ÆÂôËj ì\­Éuñº¾3IærBm9Å ÍõXÜFÃd! +] Žn‹¬Ðµv8?GëÃ{=ÿ@’E“ØF ‡S¨Ly®ç¥10xÈ‚ÙlVfÔ,ýâkÒ¤†ÑÉS|•[›€.fôljv-HŠé,I›8}Rj $\òãÒ*ï®è@Ùå f.Ùl–žÍëøàÁÉ ˆ\—Û<%âu Ñ|ü ù@R!ž¸èà%€_]ßDg}>^Gg}Ø+”äøÃBHÞ½>‰„èñ@¶ß®ÔTù0” CP=xí `«Î±ˆdøý“÷ÓÍx4™ÍŠ£iaÕñêmžmt^îMºÎ ž+.Ë{ìAy=YÿÂ&%¤si÷À4îaE%H°ÇÙUº‚ñý!3p­üW€Ðþ?i +endstream endobj 1398 0 obj <> endobj 1399 0 obj <>/Border[0 0 0]/Rect[220.32 489.24 296.28 502.74]/Subtype/Link/Type/Annot>> endobj 1400 0 obj <> endobj 1401 0 obj <> endobj 1402 0 obj <> endobj 1403 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1404 0 obj <>stream +hÞÌX[oãÆ~ׯø‰l¬Ù¹ñ2 ú°õj›4É®! ‚upeÊVaS†HÕë‡üŠôOô_ö;3ëåx“ @÷"ÑäðÜÏw¾cÉ®g¯þz!Ùu=K5ËDÎLž2-ؾœmfYÍ^½•L²Õf&ø‹/™g\+–iÁ…b«»™€.ŒÕlµÆ…†­f¢7‹·,á9;{uöÅì|Ëœëhw½/îî¶Õ5û¦jÊý¦X—ñ?Vƒ&í5%\³¹ä2MØêÍl¤fí¯t/ú‡}<—WÑbØrwh¶UY;Y‹Õ,U¯j®/Í•h[³Ý}³ÝUÅ-+ª+FAûX²C]^±]uK&Hͳüˆf!B´qr]2Ú‡t³½-c’8{chÚhãcÏêÇÊסâ‰H¦þSêÃ,iŠO·¡&OèeŒŒ¼Ýá_ÙÌŠÈ,kݧ©œ+ <à·Ç—.r÷VÝSV—%ûePÿ&A@ …ZM0VY–ÈðÔÉj¡¨¯]eÉ<ÖSÌ; "µ*¹çM5ÞTÝ"®±¶;ªà»ÅÛW‹ïŠêúP\—ÍM¬¢_º”Õ”|HÃm–t ®úJäNí\gÜ`Ø#ì2{6a?ÆÒHÊÕÝÅ”´%­nPL×ðÁ©Ì¸ÈŽÕ¢Aê¨üJü}égý^|r>´ìÞtZ${žÕc@•ôø6k¡·{ü&÷ÔÔä¼´€÷(¤{ÂOJà“Ì\£Uµ›+V&¾õô,ÞíšòK6*`üpÚg­®–® b-Š1>"K-Á„]}ÞÆ2< –m2ë^eãtJÿÓ³Zä‹S¯uP\m‹ug>ËDižfÖ$cøÔdžb úÖA6“¼¥©¾…p­è6Ž£å"Â0 Í±ṡå1¦IH‹ÉÁçKGUÜ-² + õÓI F…ÂÓ)öwó tmÃêÃz]ÖõæpËÙ8Ð>6l?î +ä\Ypôœ^†üCÇ79¬ÒŽ1w®B*Ík/l 2®iòŽ`1¨{¬°ŒÒxy'QÔÚx»Õ&ÑìŸO(öp÷k N¤a¸Ó+^Wêu……6«Ä§ùC´ÞªxžFÍ8lä„’¿Ëxœøa–$ŽŽØ>ªu£"Lt}è[¸3Eô”û„83š1ti€KF&Ï0¤èT +$©ô‰¯wË=as½vKžÓˆ S‹zÚç)ãÕx3I:Bšëß]A¢-ž£µú¯–oÊ +endstream endobj 1405 0 obj <> endobj 1406 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1407 0 obj <>stream +hÞÌWÙnÛF}×WÌãLgòQ‘“6â‘Ð<ØEÀP”¥Â" ’jêOê_öÎÂM²[£I€DKäÝÎrGÝÎ.~\qtÛÌŒD–%H%I†êb¶½ZÏ.ÞpÄÑz;ã1øƒ7žX*²’Q&Ðú0c…2•J´Îá‚q…Ö_g×øòõ¤i‚–Ë/Їšð„J\ÝÖÙá°/oÑÛ²-êm–ä×õÏI†LšJ4ç”Ö—³9tiòp%‡ÐŸj2ç– +¼‡0ècul÷eÑøX¯×3­RèÇPm2MSDU˜ +A­é¾‡–©P“ïa"n Ò ÷óHýR_ª¤kÞUÆuì^êP⻌HE5~@‚q2×piÉ\ð„ ¨Y¯ñsæQ6¡ þPWá³Í1o1Ôâ_ˆÿ¦Ÿ×̡͞^\•n¸¾]ææ%„±n`®–4ÖÂx¨åO¢©œ +^·…ÈÃûÉ¿O½?ó¶ÿ&êÿø6‚44q°ˆ3'zøÆœ‹»;ôq»kL‰ô±h +€””ã߉QâbC;þG[ál@·ç’–4M‚ªýÜn¬¢vÐ4ã^Ó,Ô¿)¶__—›ŬŠÊœx*ï¿û²™êxp XY°¹“±ðzƵAí®@dýÐ!€N‡i²¾ +¼Z.®–?-Þ^­Â½1™ 7úàªs aü#¨i³¶8eKÑÛmÌaâs”iÝA¦‡4yu,ÛII…%áÄTÌq_äûí¾Ø }yÞŠí[Ú‰ÜPWmV·0Ör¹ËÜÇi9§2Õ£1`y. +¼r>i§5Á•°i@¬¦ˆö *«Ö—Õd‡e*›Ê²ÝóÎÚ8߆ÀO_²ϼ„š¡]xÒù¥Ä--ÓU-1ŒÂG™ƒ3ƒ*¦[†Û×ko··G˜HÝÉ^›“Ž%U| ,¦OŸ_-.?_.Ö‹Ç{Å4|U8Gsϯ xõP¶Ù"¥45a¹ –6€Š–#¼á5h±E›‚Ü ¶Ì=³nð ‰õ?íZ0jG¦Ã¬‡åºG1'ïˆÀ˧õ§x:W²óBGyð.gZmƒ2Ô@dä‹ì””gí¾*ƒŸqE•`—ÂF‚¬#Öžåb¡#q0µèKáY´èƒVÉXº/*rÇS\Šëžâíþ œè;,”9‘ Q¨ÝÁ¢ÆÅ a85FŸZÁÔòg»@ocT$‰)¿ü70uÖ¾«YËêÛ£7Éz Æö?£!?ƒ¤ +(g©'IÚw}ƒÃ*¥ 0q‡æ¬èîΫ@Íáö]VÿÐ Õ ö*ÒÞÆÃæ…g<Ž¨ðvÆ7…ŽOVN† +ê÷>a´´lÌè˜b§Zà£k¦eÁ¹LDr8\TÆõé‹™LÓÀ%ÅŸ<öâUä`Ø•¥srÇOçê½|¦è="o§ÝNÞÃÖ­øŒeu8€FáìY‰j\º,÷¿ç…NaJCônMÆs»?³'îÄîDj¥©>_Ë÷ïÞ½¿r[ÿÃéÎO¨Ñ9=]ÈÃÒ_ÿÃ:VÏL×K0²x’Æ-ÙêÞy,ˬ܄5í<ÂÁ:Dy<™;Ü:§ªÊ»xÉ ´%Rº¡ãY¾˦þ;M˜È Ÿ¡KG…Êá{ +|_¡…6-?e„0z²^_ú¡‚K«$§•ÿoòß»ßT¸ïÿ›ÚÏiû†øÜðËâ/þ/¼ +endstream endobj 1408 0 obj <> endobj 1409 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1410 0 obj <>stream +hÞìXÛ’ÛÆ}çWÌãÀFsÅ%o²..¥É%ÑɃì„ î"E[e?)™î™Áe@bµ´Š«âÚ* =ÝgNŸîAn7Ï¿ÿ$Èm·IIyFt–ÅI[nö›ï¶›çod»ßI8üÁ—ÈR¦$Ig\’íqÃÁ +ã:Wd»ƒ .4Ù~Ù|¦¯^¿!†eäåó—ß~K~h#‘1E›Û¶8«ú–¼­û²Ý»2úyûgXI¹• S$L$†l_mb0ˆËìÜ•šLÿ­b‘2I+0C>6§¾ªËÎÚz½Ý$’¥ D”0“&Užç„éŒsíb³áÚ!b&uð#‚(û#<‘[r?êlˆÆ¯Œóð/E¤43ôH.¢ØÀeÅRdB‚Ë2ðéï ŒC§ËèmãîÝœv=‰–Ò¿Fö—ÒÝo»*ŠÁ_ÚÔˆ­–#\R&)â…¾äÞ.œ/ÿŽ K`M Ÿ\¤„8ËÓ÷âßµï'>öß±ú;~Ìî‚JX†{Àý.ðd‘¿r͇ùXÝÞõ°™ŠväcÙ•J1AÿIÈIZÞ°þžÁ©´ N mÉhx0I“Y6Ç£ÿÜùþ’W1MoODzî;Ÿ°‰3ü“Cº¢ ©Àm*ЪîzAðSFÛLy.Xuµ] ‰Ž†w?Ü÷USR´~iÒß=éîË]µ€J²kÐ,(7fB´¤|2Ý®¨ãª&E}ã®A5È=ø 82²ƒat"ay66#(.® "Ťãc°ãðk¬@£òUEK3çÞ ¯È]IIûªmîÇÕß(ðÆá4ºj¼«ŠÁ®M8?ß¾_À.Ý#¸úèFâ9Ú´K›°=æÌ懷 £I6Yµ! `ÚÇ<–’½‚¤\A2¤Eš{?/À•;¸r„+wpµå±¨j¬5aP±„¬1–|"½.žŽH[ˆ^öñ .=ƒ×<Yš_ŒQû +B|8†ƒ›]7Žø6–„%ùìm5¼m¤{»ÚWå dÅ!d40H^Éç³F-v‘O>!Cœ3vNÇ÷?¾{¬"™ +€ÈGŒ…øoHu[7mIÊ +¢iI³÷™Å™8ˬAv¥§4¼Ñ•“~DBƒŽ±‘ØkÑLÆ̬u4B P|]Âä ~v#¨¦*;»uq„+ðÿévV¸Ô$\|ìsܪ+bå4о,Y"Ì%pσ]Ó¶ew߀/€Þ¤")+µÄB‹Î˜7OCÍÄ¡®àߘˆ\¯ò dÓ¾MÐÒðÙ*Ð’y)0OŽ-ÃXŠo™!Þ¹ðx+>÷¹éË?‘…×s§­ÏôLoÁ^¨·ó½Ó—‹ÖóÀS*4€‰°pÄä³ h²Q$p÷zAš‰ÇËÀ}“æ̹Ѐ ˆ†2™ŒšT…u¸#Ghyè)Š5ízò÷’œ:Ô¢#÷EÕb¿Ü{»'Pzh z›’E­9ähPj.³pV7„Dd¨ËûHB ÅЦ´—º®Ó§êº6˪†ÌME-™Ššù%u{á{°gÂA› »Ã\ºfAÁ™2æ)…D/ÓxÌb ¡’Bøh}ç8hã¬Eð1ç,¿æúŸ3,ÖP˜” ôÓK=ÇYañr À ÓH`u¬…‡z€ÙRÓ‡(ÏáëÌœpT{½Fè»{`5Ü];Sæª&r?æŒ?öS bhMÊ¡ÚóeJqàátÙ¡­Ðuej½™»Äû'—©EÉêÛ†êD1Rø÷„t즉¦À +ïŒ%ôO©Y†¬Â¦"…¡ ÁÉàëì†ÔÓ×Ñ›M%ÖѺlR®š´±ƒÝbcòÌͦö +[ +ãé(+ŸéM¹ÿò ú¢]”Ò»HRhõßš¢‡pÃ¥`ÒÕœ£Q0ûáÜ¢)„—Z{¬”A¢T=´jÅ"=À¡ ãЛw^lß¾ÿ>ˆSÏø<‘Mh?ð‘®/úÒuϳ©Ó¯“Bµ˜ÖY_b>Cˆ±óM“ +ºM?CÛòsÄ7“|V¬q¤êÝÛÇF<ïË—¢¦ÂÂvÞnêe¤=ï9RX²ŠÝmcÉîvŠ…'±ÍÎ.ù§‡º/þ +äQâNâðOêp)éù!=?*ˆÿ¦Œêir7#ÈOÔÚ jöøŒã¾¼² 3$7ÙÁkwEûÍ"o`”—r§ÅŸéþÅPÔŠ¿ÀúKûïñ¿ž-G"‰ü¼dÃRôaæË,”_âTUãò¨ ËĈ¹Ïœ<û-׿ǓJZ/–‡ì癞@;9Ô¡~ý~ ¡Ëÿmèò)¡ÿ-Ôo.V`Ä +óô8+þWžÇÙw€£Žù/‘——‡XaÖæÈÅ‹¶ÐFº˜>ÏÎéqA(DG¨B¨FX©ð¤-;À],}¼VÇÍ#çlÓX,šÕ å'­eÈS]Íž|öˆ¥zqø¶Cº:Žï{w\ µ…Ñ"z¯W/©+çÅ çjùYyåeŒ(œPþ®N(]&ÿqDùÿxDùz»ù´Ð +endstream endobj 1411 0 obj <> endobj 1412 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1413 0 obj <>stream +hÞìYÛrÛF}çWÌã 1ǘ€É›/qJ[^'e1Ƀ³ŠØ@Æ«OÚ¿Üî¹àN™‘½»©TJU$H=ݧO_ÅÉíêùwלܶ«D’4ΈÊ"cÒ«Ýêåfõü 'œlv+.H ðƳ”IAR³XÍaƒ+#Éf 1Wdóqõ¾þö Ñ,#¯ž¿úúkòCñŒIZß6ùáPV·äª:Í.ßÑ?6ƒ“¤;I3IÖœñD“ÍëÕâ1[w%{Ñ?7Ñš§LÐÄ÷õéXVEke}»YieÀž„é„0!1„©,Ž•³,,MÂï`2jô; ‚€Hû#XÜáa, +†À* Æ£f\{ë¥v*þ=¤bš>óh­á2Ö‚g\€Î"âðê¿hˆJ3–ÑšÚ}wsÚI”°”þÙ_ +÷}Ó–Ñô¥u…àZscÄKˆ$EÀPãu‰¹Óåß‘f £à5æ)!Nrÿ>ùxîýÂÛþ;RÿÀ·Y/È„eèƒØ{!N&ñð™g¾¸»#ïËÛýœ)iKÞm! %ãô·H@PÒâ†þ{§Â28¸íC:™†4ܘ¤É(œ-cTœÞ—6ÿ„µ{P°ÄYãM`—ýÑKe·+îàHV­‘³Š÷1®|Œ‹,sp]ßÛrW-9î R帪wöƒ5’sf¸;Ê +ÐA€ñXV$¯n$: ˜üH¶µ}Ø°DêðœŒýsMS´÷5<ù±<îíy¯¦yÄéÝ©@| +8r¦;›•éƒC|dº„D£{yP9õ A}ÇÂ×@+©lBL¨öˆéºg`€Ä'%ʈõŒü©ç,œìw?¾};-˜ ÍCŠ ä>Ö¤¼­ê¦ ÀÙùª-HÞÜžEul#®˜¡ÌÈ8KŒ£ºB©Å7d¢Š™¢H7È‹!Až3qà5…ËQùù˜ÊRΨÌ'Šh3À[z¼u&Ï:Tt`Ÿså…º‰³q¦ S¯9I‡ N½º§È!â’ž¢µ¢í‘üZS[ܼ%÷yÙ€5PéjG"ÓââDÚ@,g¬Î…@ã={/¡凞xw‘H€8P!Õ5_cXSéX Á8õ§¹¤¤n¦4RJ?î°Yìõ ÍÛƒf<¸ZŸ^ð /p~×Ögä1“Zvtî"),„ðÒØœ¶­CžÃ^l ¦af Ìú϶V1ãRZ¸.Ñ9¶ü“Õ¢;c=¬©¡³ŒVÊ»Üõ‚ ½ƒ¾JчÈx{ý|Gʃ^!ôí=°¾=v&ç`_½iåëþè"¿ÿq3‘™u2EæD +œÌ)ÅbÓiña‰¹”÷3Úã•ð~ZÕÄ£!Å»vÝŒ¨oCŠ ÅHáã éüÔϱP;×"cIªÏN!ª°/À‘B‹ ìÎ.`7„žú}ôf}Dñóh-‹gEZ[€Áî†0gIf2×—Ù+hÍ´4,Åά ¤ô¦Ø}¼ÞæÕpätAU¡yY½¹«sƒn_–‘,ŽØ+Ž¬Qߧ±²“ŒE5éðõ™ÃNYà +œ²ZpÐ8`䨻èt–¿yûý‹ÍÕ»ïFÖ+–šYŠÄ+%<ÕÛc~,°…n­:æØ»Íã4ÅÔË«Íõ#e¥#¼?ª¬6@š#KHz€ø¢_]1² ]fwfŠã“MåÝñÜ8õ––­Kœ8.¦SÂ÷j»çê{T0¿³‹3>mº…A<˜j‹÷[3µ"uµõ!ƒÖà ”Ô|»'-ŠÛîïi‹fÈÚ¦QòpÆ_?€‡þ5Êx艓ñ'e °žÁB9—`ùM%Ôy?¤o„|k¡n°b1p§†gî×ð0ðÒÆnÛçÍW“øNa}Rt®ú@ww08S8ßàWöãáßž}1•q3/m\³uè2°è)J•¹zW"ÑÞ4´ +Ä Ù—<ÿ· ´šY*ÎTŸ¨”SÁ` Frùùþ¦‹ÿ¯ébâûµ¿}é KÚQÞ‡›d"›þ +äNÌ €þMrÿ01K(€}bJ¿h 1‡F<#CcýN×t)ã”Ùù z…\÷ÆÌÆpÙÕnáâ{4…£,”­&òÙ‚„ì}€ +Œ)«4L P’Ød¼uó87ÝŽÓ‘hºy˜4ê ­ +N™S“ûž"s½Y—b»qȣХ ئ€\è9c½ØV…áe´Ø¹5 $]Iýå»çEŸí¥ë3\+ãQôUih²™5Пnÿ† M&a<[ê±Òl<Úz³ÏaèGþ e×’ð–$øEŽ_àždR²!‹'¿«³îÔc`ÝLe2%.i­“¾·Ž3¿™A £¼zʘ׹,5aæŸÃe\á2®¦8@Åt§!ÿɸۇt3óåƒÈbG¯§=ª½K?Ù¸OëlTa$ñæäh:»ª]|X[’n&§íûÌ'7BǾËêÆøLM2ûÿf7+þZÍ^¼š]ðÌŸb7kpèêI6³¼Óânf#…ÿ˜’ô›ñˆ) O^Ú… åÂf!ûŠ¬óS–-:JÍõÔ¥m²4ƒº ôŽžè&¾ÈÆVN,\ZÙvûäÅ¥m/§ÕéΖáÖÖÎüÝÚÖE$Ô ÅœÜÃýrF×°ÞågÄ“_ÉH»g+™ATµK F£Ô'È;)cný;èš +hÛ%hüÅe®Å€Ÿô ¬ƒ/Ûò> endobj 1415 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1416 0 obj <>stream +hÞÌYÛrÛF}çWÌãÀ1ƘÌ ð˜ÄΖ·²qJbvkKÙ˜%¤H@ €ëè“ö/·{.¸‘”eiSN©Š„H §/§»O79¹]½ùË5'·ÝJKb’Œ¤™&2!m¹Ú­¾[¯ÞüÀ 'ëÝŠ ’À¼ñÌ0)ˆ‘ KYV HaIšK²ÞÀEÂS²þ´º¡oßý@ËÈ÷o¾ÿæòsñŒIÚܶÅáPÕ·ä}Ý—í®Ø”Ñ¿Ö…“¤;I1IbθVdývƒ@ +‰^¤Ã Ïüv¿'WÕí]Á”´#WeWBHÉ8ýO$ 'i¹eþÁFXkHÛá1‘÷yJ´Ñ“<Ž=l6ðhM7MÛ–Ý}So1c£õo§Úå©f:›f6÷é}UswÏeÁT®F—(ŸÇÒÝ—ø¾‰­vA)å•J ˜¨á8PçýO3e ÿÜ·è¿P­8?1R™Œ&~øe½š BEæÐDî NƒæÉ„ž¸Pë3¬ê®ŸGG2¡ž¤ögbƒ’Å#’8^[øÄÒ°|¹¨ðr¨ðÂÑÊ÷`f +È>’Cdàßc/]ÑÚ`˜ +¸ uq(És€—–ôw%Y`wfŠøð¾Ù ha˜‡¬¶7[M“\”~|G±¹¨Xª@X,7ôcÕw  ä¹õ(†Ç§Zp¨¾e~¸ï«¦.ö¤ho‡²îÁGEðdåz0—Ì5O+κ´+ÿ}„G+Z}Yßöw¤Ù¹§“é$ì#¢r¨¢Ž8t-hŠ›»WîKÔÖÇsž&±Ð êBÅ,r%æ—óoI(éRÝÖM[‚U7x€9áH–g®6Ú+(ŸJ§˜KP—&Δm¹ût½)ê TçœÞA;Ï)Xô¡…ªÝyk?(Ûr;ç6cñEéÒ èx‚*+Km2$6 l½ð +° +>õ²™T«·ï®Þ½¹&e<ŸÞXšð¾éú¢÷QXC„ݳþ(`WâG‰ÀCÔâ¨uhŠ€;;‰«^[t"ÙWôÍŽtt‡-# “ꤌ&|±0ë"ŽLÌÛ7ó¥b©|¾}i°Ï,í5C¾Õ[‚jtÎ]ò%7ôØu‡L¸§©7Xɤ+YYlî¼Ý¨z,À3æÄh¶oØhq¨$Ù@mAž™I¯ê¾ø}ïJ³c¸x$W›Ckï ”ûžlËHSŸwø6P¿RÇ… çmÞŠi2ºi IHzW´¯Õq&ò¡l:êtCkhášJ>Ø¢ŸT)hê Vòɱ¥Ÿs~UãùØ5/ž?œÚÛ©Ï;ûy>­GC×H²ôÂÑ9Ë$—/?:˜-¾žÙâÿk6ñÚÊ\¿z¡Wä×óŠüŠ`H¿žÙée³]úÿÍù´ÉŠ\‡Áë:mýmA›O©cÝ\ŸdJºÒ\Íû¢‰;L=JÃfÄÖä¾·_­ Õ®ú=Ht¡ lšUlŒ‰ G†§ÌÉÁó‡ÎöO¸àpÕ Q¦ìTo®ü±ª¶ ôP¨óstÕšxÑO­Ê»´]nA±Y¢/ˆ~lXp² ´Ñ9 +F¦iÛy÷Ä)_2žÆáàwO)ºgSìÑ3fBøDã^EShØnõ¢é±¯ÜuI>ùK¸Í3\“. €%ðþ0à´…mÖ¾ ¿Ç9ÝDãñ{GB‡Ëé ¦œÖm³ìÔ£qê}ûê~4Ìé@/10År£FJ0£ÀÜ3¡‰Z¯íì‹;¤#Žý©K@pänÎÂH4ËÌ—cDœi`îâÜÍ4ZM‡šÉtª–Ò\–Ï%1½˜³¦Sè%œ Ÿ' Í éÌ%P‡Í²$ c‘É.ŒfÝt6{p“D/†blQ“3.Õr£'éh áŒÜ9V©Ý@²¯8¶hÊ" dÅ„(‡Àù3' û‚ÕÂÀ”E꘲­S_Š‘ÿoŽ¢åRtzy AÛ/"k¾+ìwd)ÖYdÕÖxÿAìËÉ233§;šÇö>ŽW£&f±P'ËG×>:›LBA¨tB§SÚà;¥ž³–Ë—+;ÂrArzAò$Sb™Ù‰i,ÑóÒäëûi¼p9áQðVÚM¹ X[ zMv9Á­PµÅÓCõÈg§/Ú΃'NdÝŒCî–@©î—QËX–?cKç@OøGWPON¥YØ âçj1cŸ ¾ˆ–ŽJ‡€× ‹°Uœ8ô§_~üq±K//qn¦[œqÔìг]IfêdVŒž10ø\÷YnþÔ¹óçÚǸâS'‹Ã§ +/;Ñ{ 3ù¨_´.è¨%•Þ©n[1²¸ñtß–Îôû4®¢Ïmý’™Ú67îi-¯9M˜'òË~õ$H›,šÉÖq……†Ú   |OŸ‡±vë‘áG€Ï 84½@ÁN¬/xlÅáÿ 0 Ög +endstream endobj 1417 0 obj <> endobj 1418 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1419 0 obj <>stream +hÞìYmoÛÈþ®_±—¹hÃ}á.·ß.g_‘âšl]‹¢×ŒDY,$Ò éËù'õ_vfwù*É‘mi"€ÅPäìÌ3oÏŒ8¹[¼ûã-'wÍBKb┨T“:_lïW‹w?rÂÉj»à‚Äð>xj˜ÄȘł¬‹¤°XYIVk¸ˆ¹"«/‹¿Ó«ëIÂRòû¾ûŽü\Gæ>_ÛGL¼ŽÝ#=ù駙!ª?^¤ÞJ Ù ÂPŒ†˜vÒFK™@LF%5€5`Î''æÉÄ*ªM0ô-X%b€©‚ˆr©CŽ{è²}S1”CÇÉól Öšwæb´#¬ð§&-Ä׺ªë¼¹¯Ê 6–)–êñ‘á*ü‰P±Ý©2´Fn‹C±Ï°ëféþ1²Rï-)‚£9­ÐÅèlKOÙ>bÖzW˜>N”zÞû€wuÄçSU‡têPeJƒúé—ÕL`ŸsQ‡£LE N!ãLÛib}-LdŸr&1Á‘.B$FH„üŠû—¡o­»ðCievÈQ]Þe¿Àñà&ežåùp¶ «”’ÙÔKw…Udžé=8EÇt“o¿Ü®³ra=ÞA%4+ÊO5‚¡éÆÝÈë|ó¾h›iÊ1ˆOÒŽ]-G°uÌ'EÞÓ¬œp>®Tf7W×7×WÛJ;~¼#qBúhkڬͱDÜY x—-ØÓÌB0f©= +Á÷V·äµ+g.¯‹Ò¹¸/˜`¦@²t€OøÈÚ¢*™ï'“ 3æ8N+æÊ) ç¶â[ØY­’u‰Ý*xÀ‡páñ¯ê z”ì îjKð?Yï&lšžÒê…ä/wº'.¼Aù¢!Õ}[¸ó ©â ­£*³=Ø°!¨s×õÜ›ÐJ˜åÉW©ø¡ªsŒ À¡\ç³ÚœgëÝ0i¼ÕU‘Ü>Bœý> 2ˬöì/€[‰ƒˆO@¡|À&4 y¸sÙ·ñ)·ÛæWêé‹;$Î12ù+x‚<¸†§vYýfVM`Òb¨ŠžK`e:N9ŸºìÒ 3—·.¦ SòŒŽéþ’ó‹ÏÇâ|öüþ(Êg”xÙÙ÷8ŠÐrv4TÓ8UgŽ:$¹|ýÑÙâÛ™-^e¶ Ô-V±ÕG§}ÆFç;8±ÇñsžNÍeñ…MU¼ubWo^éùíü ¿aø©og¶:oö8 Ž-{nŠ¯„à¯Ñ”5 ómÚšNò÷uŒJÑ0…Mí‡ö f3‹#‚|ÒꕘZÄ´J¦LÖEý¤·6R<™Ò ¸26´¹Û¾ã#íÜ¿G ˜¸€:Öà¨,Á¨å&AR:0YG  ƒ WŽ#]M€$/ñ«Kþ\µ»9±…Þe“Ìv„Γ,=í†×ú§ÂÌÂß@øqc¨u¶G`4Ý〒q¦)0¿/Óô{¢ÌÉ—p …áݨS¼O†Ã` +ÉKñ$¥ŸÜ5ÒÇïáТ\,G¶‹°N¨ýÒí4î@߶¸ß?sÐ d¾¾ °ËéX>^+~6Ò+LTñ¨Êý#)sˆ¾öhØî‚D³Ô<3F|±I!çè°£\Í„/ÌE” ž%á„ù2ÊöÔ´@^»r ŽH/7!‹?Ýã,‚Ô¹_ ¹ñ¨s†>:n ÂEŒe\&'b=ÊD÷ +ÆŸwµ†T?ï†bÓ8):0:¿…3_°÷9¹Æs•b¶Æ34Ñr.Z2'{8œvºÁ­¦Âáþ­72¼±8©ä°¤»`³2Œ¨‰yÝrE§ƒPÞ •^(;µM’S|”Oxe<³žtËÉêÉ´Coê&Íse)ÔöcáÏàž>r÷Û†sX rV3¬P²Å宺l vùlhÌ(Qx‘eÕåouêt;÷ZÚo9ž—J¦wšœi¯¢ì©4qT{;ëª=f‚ϼ†µÃº=µ¥äöÜRZ¼tSÛï°;w%n²2§§ô7$€l““‰:¸6ŸÕ/0õTß™/ñ’Ùï¢Æ¯‹Ùë‰Mž'@¾îüY×1̳QÛé—ª±Ñ)uL2 éNãu›ìˆº éD§qoCÓOüÄAÃþ¯Û·:6sœ#HóÏÇò›‹bÙœX<…ˆÂõ©°þCà ‹>ÀšÙÁ!_Ý®ÝuÄë(tõÙкðt½DBêI%ýÿ/jÿÿ¨]¯ÿ`.ù›ý +endstream endobj 1420 0 obj <> endobj 1421 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1422 0 obj <>stream +hÞÌXÑ’›6}÷WèQ´AAxL“´“N›ìdÝö!íñ²6\ÀÝî'õ/{®$lÀv’6íLgg¯A÷ÞsÏ=:X²õâé7·’­»…Ñ,2g†éˆµåâ~ñÕrñôkÉ$[Þ/¤bþp’Y*´b©ŽD¤Ør·ˆ°Šˆâ\³å +‘ŒÙòañŽ¿xù5KDÆž?}þå—ì¦ d&4oÖm±ÛUõš½ªû²½/VeðËò[DÒ.R"4 ¥&aË‹ R˜•»Ò§¥jƒP¦Bñ +Ë°·Í¡¯ê²³k½\.Œ©AEF$† ¥óÑ€^*Õ<CO¢§ ½ŠFJyÄ%æ$®ïZÀÞ—ìЕw¬©·ž=¡ÊErfùŽfÒ1¢©W%±­„˶-fI9L¡gÜa¡ôT÷ícÝLd1¹qžŽ.ÈÖA:¦Ó˜ÇN+”|W†{QØ›¢í+ËÃæÎrË~‘;|'W $‘x|S´_̤æU©“„º\°x|WNû ù‰²x4êü Uæ"ÓR£·yO$ +Zåæ,â®øã+Š ¡š…ƒ5eôç`:ƒãáˆ}8Ñíׯ1n~»iý‘ÕJ“ŒÅ’4üŠVª)—‰š©Wþ[/Š4u{èpq×f—„ŒÅ\€³gö«€Ø#ä%ÒgÒÙh Vt]³ª +î²Xm@¿A„õÙ¤³#å|¨ »’[’|Rk3k{l¶¸xâõó‘ŠØ$ó9î÷Þð8¿ö–ÑÛçñÒSÖ' òs b²@s”ºì9Mgçßýjc÷ü‰Bɹº&‹ñ\„G–ãcvÌ«þÐ[i" ŒÃÍ>À'¾-]Ómºšn¸˜NG·HÌ?Ù ÿŠí²¥™¥yý¯,ßV?æ(°¸œé3Í&¶Á«]@8°…ôž»sþ– N)šú=î܇ jm™õ6Çø'œòä&±· ¯Ä?I/ >d­_¨¢Q~>gJ:,˜ú±FøaS?‹×\M.tzΖšx2œ×ý û˜¡fØŽ"}ÅÔäÖÔä$4·}áæU}ÀǨèe„³73ÃÏc'sÍÇä†çv‰é™ZÿÃn®¼¿›;—ñtÒ®8¶Š¡,á¯ã>q,-¼pÕÂ{±d—3²_Ù­øó3¿2¸»ñbȑ܉gþ…Ï]2)×<ʧ; *hõ ΄(Ðÿ»–¤ªÉtýg[’~O?zñzöCx˜fçÞäårñ— ‚äA +endstream endobj 1423 0 obj <> endobj 1424 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1425 0 obj <>stream +hÞÌXÛnÛF}×WÌã2±ÖÜ]./èSb'… ´1bµE‘CQ–j‰tIªŽÐ/ê_vf/¼(²ôÔ(šçrf朡ÜÎο¾pÛÎbI˜B”Æ BhÊÙjör1;-@Àb5BüÅ‘&\IHTÈC ‹Ý,D+<Œ2‹OBÁâaöŽ]¾z š§pq~ñü9\7H¹bõm“ïv›ê®ª®lVyQ?/¾AOÊzÒ\Á\pkX\ÎæhÜöL ¦l‚¹H¸d4oë}·©ÊÖØzµ˜é(Ã|b®càReYÀC;@hìΥ晕IOúƒH +£@Œt¶M- h ÷ eÂÑ=\&–O`v}çéBñ,µŒaÎ4tˆöb"¾|Ž/–åêáÑ)‚„­É¢›®¾Ÿ*ý„€P}ÉIÀK©µe„>%™G`&#ÑßÑÌÝ,Þ\OÆÛw”µ_T¤²C‡µëJâ5‹µÅ©w€%P¨'½¨Lûq MüÀ¦E:þm¿i°/ÉDÆÓlô ×o™ÙªTK NûPÒ$,¡®¶<%Ñ…\b}< }×Z3X܇N*Œ<®¸ôFª.ÿ8Á#ãYlw :¡ºa¨Èõ€4=ðÙ¿ƒeÄÌuÁÚÕÿ=³RÉCaèR†´E]5×(Pà#ë¼yS¡"ÈÌ+«¶‰‘\…p6¦-#¦Ñ¨'Ô #ÄX 5ö: +ø︿§MŒUSïÈi:Iû%ÀÚgï˜ÎÒ¸óU¤}ç{ÓÿºÜN ÂöÔöKl²ûš +‡JK¦»¦$xLó§åØоZ¯™ÐÃ^4p´[OOË1ö2VŽ¶/ÇŽú"ÊiÒê"QÏ]y@¾Pì‚ØT$ŒwjÔ1ÉN0ȸYžÖëþG}¹^'<‰ô§5ûœ`ËOY:Õ§{SMôZ[½Ö¤×à ¥'‰)sk¤'yD°­ý³ÞVªÇ¶újfÙðnÖ ¶‹mPá^¾3ŽèÊG¥´´–V´Õ&¤ØÉ#Š bµØ«÷t¯ðø™A3{àT²µ“ì±{ù–ãÎõ¤béqÃÍPn;XRk1•ë± +»Üc.NçÞ+…‘ë|Œàg¥Xàþ{Ö '‘0\`Öø +(X¯>æ»ûmù„‹(%Ë^‘{Iv#K:‰ •Ù¾éÅT°í¶¶;Ô½ÛãÊŒÁ>”'3Π]ûoІ#©y‘[ Ñ‚:Õ >íöC^Ø&½ƒÆ¾ëÃæ[ŒºÃ}y4Öاô*bÖ¯$Tü‹w |h:z¢ÚSZù¦¨N_K2âý¼„÷ÆóEŽ)ÐõÂ8þÅ}ö˜‚ýÁ ÿ!ýþßù.ÉL—Ó5—x‚âò‡±³xæžÄ(Ü“MÙ~åÿG€,bä½ýós²±.‹;ج 7xµ B†×4eÑùWÊ¿ÞÍHó +endstream endobj 1426 0 obj <> endobj 1427 0 obj <>/Border[0 0 0]/Rect[227.46 254.22 302.82 267.72]/Subtype/Link/Type/Annot>> endobj 1428 0 obj <> endobj 1429 0 obj <> endobj 1430 0 obj <> endobj 1431 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1432 0 obj <>stream +hÞÌXënÛÈý¯§˜úÙµ&/Cû#uänZ71lmźX0ÒÈf+QI­cûíKô-{¾™áE”xÓèkIÙïr¾Û +v?yõû[ÁîëI"Y(©„É€Uz²šün>yu)˜`óÕD„,À?|•r²T<Ù|3 …Q&Ù|/ˆØüqò£÷vvÉb®ØÅ«‹o¾aו/—Þö¾Ê7›¢¼gïÊFW«|¡ý¿ÎÿMÒjŠ¹dSÁE³ùÛÉIÍÂ~“½è**RzÄ°›í¾)J]Y³ù$ yšÀ£„Ç ã¡Ì²ŒñHAd}3ð˜‡ÑÁCB¤y‡;82BÆð0R­ïd˜ˆó2¶þ)÷eÄcð§1¾¦þ4J„09ôþöë"RÅ•w]míÚr¿h˜ŸðÔû³ožh»^Õ…?…½Þ¶$l·Á†IJx‘-™³%Ö–û1O 3Âß@¤ŒYÉýçèç©ÏnûßHý?Þf¢ ®(‹BŒÊá¿Ôùf½f7ÅýCƒ`J¯f7ºÖ¨)¹ð~öCÔ¤§—¼M—Áih28AÙöÛ:Ëx–Øt¦/¨Þ$…¨¯èUg>þ+V°Æ»óš§f¿ù–-õêñv‘—‹,çEyññïs<ºóÙ?™P©¼u"ŒCÛUEÙ¬î¼3ÚÏŠš•[,7‰­8,ïô9C£iämóߢMD!rÙÚöX¨þ{ìåwwåÙÿºÝ6°Þ©®t³¯J&º-æá/þüo“©ä Â‡QÜ ˜“@ñÈ«tÍœÛM^5d)Dcë;O´z˜±ïßÍ°ûâ?ÝÌnïHÖÀN»kdâ·‡8¦Ëú'óóìèØ— +¾Øn°ºÙ–5VvƇ³wïÏÎÙÙ5Ößúöáû¹YxBï×Q ì°Z5ÐvmÕ9ý¤!ñ^--”R;(Yèõ:êøJò?TK¬êJ/ŠT°]¾½ÿþêj ÌtúçÑl§sfœqH‹öày{c§2—Êôèù ÿRW.×UN%_(]XwAþœ6N]ëSåËÍ›•ËÎBÓv^:4žGúš+>SôØ[²àõ/Žo´ÌFYf£hªK‘8VÓÒ K<Ì$õnwzQäkö^75õ‹Ž³ôì2BE2舓’´RR7 +†rXå˜ š˜!4 –3â8ÎR×±EÌ…Ší„1‚ã®?{·×³‹wo®ÞÏæ·–âdÃ#QgKâS7èª]6œÍôHeÊE{—e‚Ó`¯rÚÆùFV1p%­±‘5V¶L(Ê⸚]¾"$®òò~Ÿßkð‡¡6êr|ÏÒ¸ãU&=6;¯Sâ.€{p[°Þ8kÔ<‹Ž‚ùbœUzu”Çßðù½?@Òë†!"6CéªñÿcÑ=΀òöcz܉…‹öa·Õö×'Š[L¾Ù­1·+é°ùƒ\LÇE»˭K]/hz†0§øˆLz/óé¤wî‡t2 ±½IÓx™ —ŠIê!§› ,Ú"Á65n‚ƒKöíŽz¡k¹öêaöÉ8ÖénåÝ=@žVE茇ÊYÓöôn—9-1ôÒãÈnê†n˜`ví¨?‡aÄm¯¸jÔk»|´ƒÖ{‡·\fò5Ûn(€Ô$ÃnÒ÷Žü˜‚Q_ëESÐu8Ò»Û´{´-ÏÙ“/2ôŠíÞp‚|]o!f±Þ/]Ñ!þ™zŽûŽ¹vÚ›‡¼af%”š‰™å”˜å!~5¸*ŽÚɇᠫvï¿Ü˜s å‡ÂrºÔ£ÛéÁXW +âg8‹L³£)CUž1³8=ff×7®g7ó¿”3FS§HªcÚ‡šp[  ‰ÑHi@Ž™ÌAë½ó¶ü¡=j<‡½Ó³Uh³VÅÈHC›±]4ÛAb+0rØBy…/C‡?)vÒŒâ4¡~|R³H@šŸ©¾vË üi@äkäÈ£AåÅ&ò-`a6þBÄÂq8‚lTä?ÒûÆy‹DïQâ­!¸òm›ÝÛÔNœQMRÕiÝR¡î¢ÏƒÖíQ}Ë:-/"_?ï˶ ° M^ÉqÃênt-!þâÒ™ÒGzµÑÀ°7Æ©y±VúÝk¾®þò¸þ‚ƒÂ;¸4{ô6­Þ/º®Wû5wÀüG€À”G +endstream endobj 1433 0 obj <> endobj 1434 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1435 0 obj <>stream +hÞÌWÛnÛF}×Wì#Ù”ë½/ù¨ØJá¢u [hœ"`)JfaQHÕÍ'õ/;³CJ¤d;nÚ…añ²»³s9çìP²Õäì»[ÉVÍÄiæEÊLê˜l[N–“·óÉÙ;É$›/'R1p‘©çZ1¯ŠÍ×V¸0™fón„4lþ8¹‹.fï˜å);?;ó†]oc™rmVÛ|½®ê»¬Ûr»Ì‹2þeþ=ì¤i'Ë5K$—βùÅ$ƒ¸MAwú`úý6N¤ç*ªÀ »ÙìÚª.›`k6ŸX“A<Ž[ǸÒY–1nR! Eæ÷®‡¹2£qÈ&D‡AˆxŸ,d!c0hÒ>xôLÚ.zmÉÅóXn£ÏL 'n}œ(™J>«XÂo÷>Å@ŒOy]o7ôn±+Z;ã0RÒûmSÅ ømjLnW`¾”r†¾d/B’/Æ–;ØÓÀ¯ž1²|¸=>w}å´ÿÆêÿxZ¨‚v<ň® +Âñáî9}x`7Õê¾…bê¨a7eS´æ2ú=V@ʨ\ðÿ‚½ +vÀÛSJkž¥ÄêpÓ7Ü8øVÀCðQ.oÛi—rµ·ŸÊ¢Ê®Ê¶3ø hÒx´lz*+GVÉ¢öh±aí}É:c–Œ‡2KI ìÞ£èözv~9ýáj6¿ç¿öwGKLW +±¦ÍÛr]Ö-g´®KH"Av2–h®ìA|ü`ÃÏu›ÿAk:÷2ž9Ò¼xm +*ç0ÞnÇ‚¬ê–-ÊØE”Áaê>D„. _ÈcÂr1 kh+G[)nDØ,à˾î¢b³«A¢vœ7 "£É'FâQ°£"Yvbžì‘{MA²5ÔeµÃdõEî¼ÑQ\v’Š©F¼_·›ú +¨-¡€ƒªA“ú÷ À§ë T´ˆøýÜ¥gˆtKM=ÃÐvë@p•FSaIsŽ¢í° 3‡êBûõþãÛéÅÇ‹é|:ŠÉsŸÙ¡êŒ™“ÐxPرÀ¾J[µØz>«­Ä³ƒ²‚äQdÏW Á]/ׄý—j6¢¦òºk²huߦ*lÀg4x¶åqR/p¹)ð( •ýÔVÁSè °DRˆ›š³Y^Ü ôª7†˜óöï3Ö÷Ý1ñÙ:ÆÞ}8„֣Š+ Ä«ç’à™9M߉ª‘(¯¬„ÿǪ½ëµ «ÅSh{…²»ŒŒCÇý„~ìMl~ªË“Rƒ4gۄ棆‚Ööëñ¬|€iùB·°wò¹>€JRÀüû|ûÍ‘>Ã’RÙIÓ€¢-ÃUŽ—uyÒr9ðƒ´âë‡î«ü_À/6½H +ûT󀊽Y¢•Œ;ùÔy³ÿ&¢À£vÓ5±Ä¯¤}ý—®my} +endstream endobj 1436 0 obj <> endobj 1437 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1438 0 obj <>stream +hÞÌX]“Û¶}ׯÀ#˜T0™7Ç«´î$W“Lj÷‘(‰­DjHnÖÎ?ʿ̹H‘²Ü8õt¦³³$—¸_çœ{±’íÏþú Ù¾[Ílœ±$3LǬ-»Å×ëųo$“l½[HÅbüà$3+´bVÇ"Vl}ZÄXEÄI®Ùzƒ‹X&lý´xÃïVß°Tdìų_~É^µ‘Ì„æ;-N§ªÞ³—u_¶»bSFÿ\ÿ–´·” +Í–RH“²õÝb‰ÉÌÆ_éËÒ?¶ÑRZ¡x…eØë汯ê²sk­Ö £„5ˆÈˆÔ0¡tžçL$Y'>6®{ˆˆ…Jf‘zA»‡xLGî’38VèX(YçeuÙ³mIëÉXèÜ'rÆ­çnCÌ×`¸@;GKûð˜Ñõ^I蕾Üzæ°'ÿ¸Šèî!Ü Ò“zÿs‘$»äèíègACÔòôRv=×*.تØfQVµ ܯL/U§NùìèÁ$ÿ¯V/^>ÿö~µ~˜™‡† æ/Z‰ ¥쌾<•uÏN‘…’pÙOÒ[ä÷#›gmp¢s›ÝÄWH…!ÂNÓ8­ÄÞ8ÑÐQF +Ç.’ 0Ïr2z˜¡ÿø´LséüÄjJåçðj—t¥ê>w»Q{}jn*ŸIuÆK©—OŸÿÞ˜iþ/†7M‹l#O4á5îÓ1o"$NÓέ}ž Mãî‘F=Ú1gø„cÛˆ’BliæMp*ŽÉúÚ¤ðôÖ;äZÅ÷ô”¹³ÏÛ¼3ðsq·óŸŠJOë»uµ[×^@õsD*‰Ñ +#¦å_Ë`hÞ•ô,Woø¶auÓ³CAKX–`hè/\ö©rÛ+¸võØ('£Ð-´Óp³yµXÑ¢‘î릥ýÃTxH/Q Âäï$ŸØ"‚ú8åùttªPÛïÇvÜzaR=ìëÿí«¥0ýLÜ—Ã.À•ÃÍ(;ÓGš>‚$\ íà`$ +ÈbG}s(ªZ M†`½¡iµ¤pùÒxÃ8¦Ti\cSn%ÿ +×ÉÈç}™mge—Ó‰‹†Š‘”ÓÑâxÄŒ”ââ £’EKØõÁÀm$UFÉ‘€¾(ñ|`¸1‘‘¬ãÅçCÚ1DÍË?Ì݆’aÓ+ò?ÿ Ý?hhçPõNBçh‘00…©ä§ûõßV/ÿ±ºûœá»àß[Gx) +endstream endobj 1439 0 obj <> endobj 1440 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1441 0 obj <>stream +hÞÌXÛnÛ8}÷Wð‘Ú®Yñ"RzL§È¢MƒÄ{Ò}P%ÙÑ– InšOÚ¿Ü’²-9IÓmXKä gÎ9sN–“×oo8Y¶-‰ c¢bMdHšb²˜¼™O^ŸsÂÉ|1á‚„ð<6L +bdÈBAæëI»°P%’Ì3¸ ¹"óûÉ-=›“ˆÅäôõé«Wäª xÌ$­—Mº^—Õ’\T]Ñ,Ò¬þœÿ‘¤‹1I¦œq‘ùÙd +b˜ÌÝÉýÖ¿7Á”&h ÛëzÛ•UÑÚ½fóI¤8f‘&LÈ$ISq*w2-˜Ñýs82jð*‚‘ö!œxWÄV!!ðPÅýá13ùÓËÈ¥ø> ¤b} "äÁ4‚[L¹€œEÀíÕ~âA”‰YL¯šÚ}—o³Žšú[`Ÿîû¦-ƒ)äKë +‹kb½„Ð †¹$>—»\þ"¦!š‚kÈ !nçýçèק>_øÚ³ëÿø5Û©YŒ=}B=âÃwÆ[ Ë^Ô`oKÒŠxˆÜ^Š)à¿-e¸Oav3?=¹•,Jü‹V THh_õ¶K»b]T#ó»bÇ0~¸:þ¦XzKc‘²%õ¦+ë*]¹ Ób]šÆ/M«œdP†OÙ¶ENêjõ—Ì'<1S"²Âhv ì×Ëâ" l$DAeR¤Ùi]ÏHU@VéŽjÀ9Óò¸Ø7W³Ó‹“w—³ùÍ  +šéGêºz–Û­ò`Ãf ˆ2•Lì…Ý„{¨ºô‹[ãKX¢Þâ €*xJ;s0  }KK¨v^šÃó#uÌd!€52DÑ>,×ÛO+¨ƒ¦{È ®“¾E‘ëî-½¹¥eSà"~ÓH‡â tôc08ö€‘°<óœèœÀ`”LÑå«Öú>)vÑÂÝŒ¥÷ÏûX’X|( »ã 5Æú,J ¢ h»r ÍÊ ì‡{â䠷Ưž³ t“fe—".-Ø`žj¸! ŒcK™—ñXyè§*‚Ê3cU§¹M·»³½› +È’‚†_[®˜¹ ÝpY¥HJ’§]Jºš,‹ +DÔÀ(„¥HVWm×ØSp€ú€ð¢ßÚÏø°×ºBÄXˆ Q¢¹™æ;w“>FVvˆÃ¥"«40¼éCÀ\¹í˜/ÛÓÒ¬à¬Z{ì;æ‡.‹¡0Ÿ—_Žæ Ħù›í¦l3ôYh‚CÚiuOi­õ@«•×êQ‹%Œ½±(º6Ÿ_ü1;{óëûa§az ŠÊûp&9RÑî.EÑÊË ¾q= ¨ÝP¸0ñy:X +‡^sºÞ nªº³ åÇ#aXڶ岈4ü9 ‹Ó|Ý w^.8}-LySVžSðÀ§¡—åûòØit¨w@áC®s@œ-_s@;ìiú” º¥vØ‘ Þ¹K›ŸÈÐ{ÀôâØUÖ +u—)~¬‹cC¤åK ‡žþC}½L!—Ç ‘´ª…€¢©˨«\ïÛ£cä˜"„Ô&…• +­wW"ÝÉšM…u&˜rCW]¹YùQŽs0[¢—öþñÚÿðsçŽ( 7[msü÷‰ÝüxFRñTÙ¶±ƒ Ýþ8üG€¶÷8ï +endstream endobj 1442 0 obj <> endobj 1443 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1444 0 obj <>stream +hÞäW]oÛ6}÷¯à#µÂŒHŠ”Ô·Ôq‹lY8jûîA•iG­-–¼,ýGû—»—Ôw’®Ã0lÀ`@–-ñ~œ{îá%'ÛÙÉ›kN¶ÕLKú "M¤Of¶™½Jf'¯9á$Ù̸ >|à‹G!“‚„Òg¾ É~æƒæ±$I7>Hr?»¡gË×D±ˆ,N/^«ƒÇ#&i¹=¤û}^lÉyQ›Ã&ÍŒ÷Kò#x’Γb’Ì9ãZ‘äl6ƒè&sw²7ýáàÍyÈÍÁ Y•Ç:/Lem-“™,Ô‘fJ&dÇ„‘ï.7›®}3Œ ø‚´!áŽØ‚xDmîWMòR¹N=0Eˆð¹7WpzsÁ#. dáq{µÿsÌ##Ñ«Céþ[³šxš…ô½gŸ÷ÿ¡Ê½9ÄK˱µÙú—:D¼0–¸‰Åç.–ß=Å4x àêóg¹ÿžü|îû;_ûg¬þ‡_³UšEX¿©‚¯'íð7}žîvd•ook(¦¤Y™Ê@HÉ8ýÕГԬYKÿ†Á¡° Öж;Z²8rMmïàu,ì[Ú(ƒ6þµÙÜ_ß™,Ow—¦¾B—š¦À]`g -XŒÛ¸ 4„ hyÞ bûYkílÛ^ŽX€½\‘”4¦”3%Y‡«ßÅC¯N“d¹ºô’Ͻπ5ïY­è¼„RÕimö¦¨InÍÄ D]ü×ÝÈÎM8uCòŠ”wu^鎤ŚdiA>r¬Ìš”Åî.YÇœÇ SÊJ_×ÉÜm< rFA(ó˜4»%•«) ø)Hý(!Ι–3º¾Z.ÎO/.—Éõ(+Íôàù‚7ÄέjX„e³aK&zÁîŠ:ýÍ­i‹Y¬â ÐCï¤ÝKСu}CsÀomR×sP2aÕÏG9>ƒUYYT5É`Ùmzø¡ED·%BÄm‹*×¢7´kº7cøÓ~ ࣽQê#†+a›¨axkù6= ´Þ¹j è¶h·9ˆÆº(RcXÎâØ’"àj\œg„áÙäÐ9H‚ƒÝ ·ä.­Ñ÷Y(T/KÜEV£x°N Ø‹8uœ¢¡žÑ  Ú~±Ç -º3Úq¢âá@+Þ#¢šîàªèÑÞÃrúr,P@­¦½Ôàg[É¥†}bH¹±ñlPy°à²Û•WpsI„@™íKÒÆú¼Ì‰Øg:hèæ€Rã®ËãÁ>Ôo:£ŒJ/`ÖèKÏÛA`¨lÏéZ¬žèÏ·ïV‹åˆrÔš²›†Ä´5¬ { )ÿ>T¬¦дãÈÉ#Q³,­ «y#wòÂg¯W¿ÌE:Ç92PÓ‘¯&ÿ'È“R n.‚ÈËÌü›Øó_@ƒÀgJtÚg3§¯N/N/˳ÀãŽñ–ÉÂ1ù†¾jà +)©K²Ï]µ‹|ŸE! QEðaõøvMì~û^eIÐ,‚#†³´uKÖf礞À5*‰vœ²”ê‡éNÔ¦mØîÊ júiWy§j6†mnóC¡š2/Yž_.WßÅdÞwbâÐ@p%Дtã~âWŒ‰6(ëØ;SlëÛiŒð FO™¬Þ]þô­'q3‰ñ«Ј»õãü×[hKpâ´vp\òíqÉ6ºBy‡ÓÙîÊO®Á-ÒêÒp„óÎ0 HàÃùjyvñöÍùâ[Y´§J!¢A@¡åâ®òmQ‘&x5œøÂna#N9ô\aàÌ›ïݱvºhÇ:»v"nmö¢9,î=Ž9‘ ŠVõ碸ËÁý'c·;Àã`ÍÁ z˜‚ œö{>R7;ÀܾÚ;í² ü`ö)” §ð†[©¤ÝâÖPµ} +endstream endobj 1445 0 obj <> endobj 1446 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1447 0 obj <>stream +hÞÌXÛrÛ6}×Wì#ؘðš7×v2n'+éC܆‚$6©!©ºþ¤þew•›§Îd `¹^ þáH®$$*à„ån „™‚e‹@„°¼_|`—WÏ!â)\<½xòÞ´žH¹bͦÍw»²ÞÀuÝëvÚû}ù jRVSÄø‚‹8‚ååÂG¤¦°+5‰þ­õ|‘pÉJo›C_Öº3²®–‹(ÌП˜G1p©²,¦AZÏbÉ“xx.sÎÞcD( ʼDÇxd& +àË0œ'ËDä¼W‘5ñUî©Gìd ñ@Ö 9¦XîHŽäƒQÑàvæ¼&íïn¯N–dDZÉÒ° +ƒ®Ï{Mpà°Ä¸ØÍNò²x„†ôHþèÃP.£|(;hö}iœHxN5&†MPÚÕÔyy½‚"¯á£†C§WÖûŒ§bÚ˜ÓqcEi.L‚S“`Ji :/¶V‚¯æ±H>±!~ÖÙ`¡¬ bN"“$ŸÿöÍÕÅõùË›«åí,D1BŽ)ˆOS`w9Ðù"ä +µøŠË©‹&Gêê>ÿkfWƳØ67Z Ä$ÂT9”J£ù¼‡•öbvÔ;f)SåP3 +¨;^⎢©» +ܲÍÛŸ`Nˆ)³!)‘…Àä¬X¶ÓsÐJix9vçͼžM)$|ìŽàõ("KÉc"ú*oLL¶b`13’;Õ36K~P2±cXTŠ%øòúv9‹†?N±ë`ˆßßØH ­îUoª„1÷À”æòÕŠFÆýÖñ3a]Y`Ùª4›¦^Œ\è†Å¢ÙíÑeÌ6ܱ~›“bt”AÑ È¥Jž2ÑTeãn³×ðÙêÛmcÚhC2h¬kó[ßÀÞÄTQLuhÏÑþšv`%œi'Õj4ÞJÚx‚üE6—4;ØCÝwÝy)ï\Œœ)£,å¬Z—U…“r¡«ª³Fy +¯€¶IcYXU~Ÿï;Oæ9 8òK•Ž°ûRû[P ýÒÅSŒØw:iþ<ó°Ùh5‰<™ö£#쓨•.šÃ¾¢üd™ ±šÏ‘é[¸‘µÒéËïárh;bh™ØŒñ<±8¼±§ l¨›²¶¨<§åF‚¤ë(¶ Teg$Štx·®ÛíóV2t3ºô£T Ë©BpÊ iíá¥:h +nfâ™1s”_7= ˜Ž†ö} ,…ç"#º&$ewg“œWì{r“îʾ×5à¡Šà,¶"¿‘-òŽŽfˆ4cÝ#Ó´¼úNŽÆ.d³ís€€{*ÁˆÖrè°÷Û¼¬9ŸñŸ!Š|9›ÏÒIåùÍùË×s4f|ÖÜ£ùÔùŽ²jr™ãÜl +7µ% >WmäŒnºH z/^¾¾øõ+jgíÉuæI­É¹éŸ¬RwýG€&uFH +endstream endobj 1448 0 obj <> endobj 1449 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1450 0 obj <>stream +hÞäWMoÛF½ëWÌq‰”î.¹K][v]¤¶a3ñÁé‘V2 ™tEÊN~RÿegvI‰”£ÔA[ @!@¤DjÞ|¼÷8°œ¼=»°l&Z‰RˆS *‚µ,&?æ“·§䋉á "5\I0*â‘„üaaÅ™‚|†'‘ˆ!žÜ±“é)$<…ã·ÇoÞÀÕ:)W¬^®‹‡‡²ZÂyÕÚõ¢˜Ùà×ügDR)á +BÁ…N ?™„`fþLíBß®ƒP.Y‰aàºÞ´eekšO´äFcEš'¸TY–Ó(Š}m®\w+æ2]ĆРÊ]Ä‚·íÈ\2À‹qÚ×N‰‰¤+^%>Ã_Š@ÅîŠõ߯›21_VWÔ[WmDí’Rêå’u¹DÂçòGph1¾GÂøÈ»ãÞÇCÇWÞöïDýß榠4OiQ7…HïÉáob­Vp].ï[¦b \ÛÆ¢”â‚=5Éìœ÷ôïl¤c°FÙ¾T´âYêEíÎðöD*®S¢M¯jÇ¡~p%ÌíâùæÑÎÊbuaÛ:aÈX‰ÄZµE ["™‰Û{¢ÞÙI'Óu„]œºµÖÆ);å1)»ºP‰¥°Ï¾ËÑ65öáò]~t6 òßv˜1ïîsαE1 +4mÑÚ[µò{»‡b8iúûaÔÆìÃ@Ù@ýØ–uU¬ ¨æ0+*ødaÓØ9ÔÕê ¾Íº`ŸÍi€ ‡ô©§˜úôsñ𸲠o\$Áx"™y ÉŒcœ½]BôTØß7¨›¶‘Di—‹ÏyÆx7¨ÃŽ) >Z㎫~x_õÊ[Ú4=ÅùÙøa”±ÁðÞ†]¦ýn1´ÇCæ˜%/E~;=?û)ñIô­¶ –Ü×·÷Æ¡`qç’¯ÄH²dßE:M@^8#…!Ã2˜°ï;à›ø›–Ò8ÙŸùv3ýŸ8¨@V*é ôWzk‰ÿ„…>“wb4:lù½ãe”é—&ºã½Ä]Ù§ ŠxçŸÎØÙõåû‹“Qw3®“þcï‰ä\°$‹0lMnƒ?6H/1çºxX¸Ù6}·ø°«ËÛéõ·àßèc‚ûú3no ÊžV÷ï€e×Ó›i~qôH8à ¯q/l=Ô#_CRV]|«À½`¼†Ôø8?ËîüìâèÝ··6Å#Ày¹,[TiS.+/ÖïÎϧ—§§¯ªTˆ}&µ¥ ïQ-P¯ÝùÊ 9eÏ»Éâêý§Ù•Æ +endstream endobj 1451 0 obj <> endobj 1452 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1453 0 obj <>stream +hÞÌWÛnÛF}×WLýD&ÖšË;ô!‘6-r­8-¢"`è•Ä†" rUÅ(úAýËžÙ%uKS ÔÄÕ^ÎÌœ93KIZŒÎ¾»’´èFq@‰—R˜ÆxÔªÑ|ôd::{*IÒt>’>yøÇC¦‰|JOx>MW#( ³€¦ž iº½uÎ/žR$RšœM>¤W­+S8Í¢ÍW«²^гZ«vžÊýeú,ÖR$K!㈦ç£1ÙLaGÁúMëŽe"|§ ]6k]Öª3XÓQfˆ'QL²,#¦žÚÈb_$ñ°Ž…¬ƒ&$0‹ˆxËGfXÈ‹a:Ϟɨ>ˆ¬‹Ïs7EäÜ‘ïIwa˜¸c_¦Ò‡Ï¾+ͧ™90IEê¼j;w³.4¹±Hœk׬(;ßv¥;†¿NS3¹&\ùòý8aÂØ—¬÷Å“Ö—?ÝHÄ°âÓ“ ‘EÞ=¾~îù…ÛþÔÿñ6“… )çÀë³àÅGõð•6W]–‹¥F2§£KÕ)”@éüæú(JG݈Aÿ½‚ß(8FÝþCIccœÄ{å<ÞúïYߣz:‹õJÕºë+6¶@П?Ô+7>çl”ñuú뮲¥È²ˆµúÛÒ–GR½ºUE9/UGz©hƒØ3HŒFÍÜL׶eÀ#/Œv„oÛƒiAÝ€ëm ¢PDºYåº,¨BqrÞ¹¾Çµ´Ö¤›¦ê(×Z­nô4îѽ=*x+uˆ¹O­jãR¥ê…^vì¡9=öá¹NhÇ\ö|¡ÉF29ä‹G~b ¯šVý— (ýÄÉàÀGï¹8ôjCšC·ª- êºàWYƒÃÅN 4TM ²ÔŽ¡v¢5æÚÙ–I‰õÙ(:¯èÃ^|ÌW·•:¤o¿£ a s~¨ OîÎÍY¸™cn éTUÃÉœ _¨Êõ3Œ?ºL¢c ±Pû,*‰¾‘S‘[aOA;²¹Ø^U½Ï WfÏjíkÕÊ4é»[E}#ˆ†HßC&üšo®ùäý‡)öÄZ"óImŸjAÓeÙ™<ÑZeS:d±¯vå\Ì•n£oêêÎRaec›€m-ë._(Ny׬ú8ð6‘ŸW²3_×….›ºC/­r­nL'èÓ ÕˆQ"±}[à§Ö Dö2Á Ç®¥”_W»±¢žÐÌ°6É ý  ó·ê%üÔ^5ƒZøÒ÷ø-äœ/û‡½æ „ò5î‡ó\ç´Æl?ž¹ô»˜>èÁv¨Uݣõ¢a§:MÅ2oéÁƒ¢iÚŸN1À,¶ûǽ?¸‰8M[ÎÎy²TÅ*ç;Ñ” êzðÛVús1áÌÌÁ &†¾ù–Åij‡áܶf>s°r25†:Ó/í9K¯Õá)á/¡HâpÜ¡‡÷={SoÚb_ˆÙ¬>™¹[VX f‹Ó*½nk’8åXÙë;ðT`vŽÉïû­Iù[œí¨Fç­æþß !î3Ç Ž{ã4O¾¿ÀþÉï./®fŒ¶çáÛ!“Ì|oÄ +à3çÓª<ùäÈ¿4ŒY+S°P¨ª’'§trùósŒ¼û3ö†¥s£—°óœøÞ=‚_s$•F[˜9ðïøŠµšԞߧ$3óø"ï1ˆ+bû ¦¦Ïž?{ñÝ=æúeËB] n*À_#»÷‡ýº3휼zùæâòß(ãôò¾žh³À¯4¼3`V߱⛚Ûk¾CAs}­ü4¶6Ø·³²¾¾ür\üøK€Šá +endstream endobj 1454 0 obj <> endobj 1455 0 obj <>/Border[0 0 0]/Rect[227.46 259.26 302.82 272.76]/Subtype/Link/Type/Annot>> endobj 1456 0 obj <> endobj 1457 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1458 0 obj <>stream +hÞÌXÛŽ¹}×W~bgG²ÙW,öÁËoÇ ëO´%JÓÔÔ­Œý¯H~bÿrO‘ì댱ŽãâÕ-6Y¬:¬SuZŠíf×?.ÛÕ³D³Tf,ʦ%;›ÙvöÇÕìú¥bŠ­¶32‰?\T– +²TK!C¶:Ì$¬åš­Ö¸‘*b«‡Ù{þbñ’Å"c7×7ß}ÇÞž• Í»sq8”ÕŽ½ªsÞkümõvÒn§Xh6WB%1[½˜Ía¶Y»;Ý›~wæ*!/a†Ý/MY™ÚÚZ¬fI(Ò%"N˜užçLD™”‘‹Í†k"bF£‡„&hûwpä„œáa”µ±“c*öÁëØyø—"Бˆù'JÌcܦÁûv6oŽ­*³nÊc… Öf¿WÀçÙówòË7Ó‚ÒjŠHâÈ$B«ÌæþÉâëk¤^1ó±8œö†¡lXß0ZìÙ»òL…x]TìƒaÛã…|Ý°KµAEmîÍØ-ġ֮­FœhÏyà-ó.ÊÿÖ;€Ç–÷¥ÙoZ1 ÓA»Æl|K 1jñO£øž0žžÖ4o‹½…Žm¹Z¼z³¸íãs€}NÓhsSœî¸’òÛåß·åÊ¢ÚŒª¿Ò$¥Ìå\1ùý¿|óoeFædFF-V£ƒæ¶Í¶½ß©ÛÖ&‰H)ÖIˆ^¬9²{+qè;ukç¡$A¢É¢Åj\:g¯*Ø–*lÌõ`ôqšvÀV0CäwGIÖmð²ÈÑÚíõ®tÚ%åäùHý$"‹²“>QçnâëpÝ9˜ªŠ¦ãYA%-~ë¥/š#%Â"=¶Kñ0I4•b‰7jßÖ¶“€ÌœäÅ™}86÷7ìT€«uKÇÊ4u "Ì\ÂW÷fŠZ] \ 1ú8h˜Œ[I@ý&zqçmø½²fÇUœ=9ê´y´Ð01F@õbÔƒz8ž Ê‚ZÈ«`ŽO”2÷umXIÐtºléÚ°RÎcÙÅË—o7¯ž¿~³Xò:y> ¯SÜñ4:Á^è)elŠS©?UMñ‘••MävØ&²v‰¬yA`°âÎÎf‰ì±¯s åIÇ Oý^Ž‡Ð9®Z…šÙe½ßW¨Ö†ý»å$ŠVý²IÂñ(aa¢Dš±*Â>±ÆZmÓó^Ër “Ã!÷ÛäµÊ†ö-+©óÕ'်ñ _/^^"¯‹jw)vÌc‹‚©¦/2Èõ<gË}¯NIpòAVÙ¤âÏÇžˆ<Š;:ЄI±`SäúQýèT(ïÓŸÒ½¬ÖûËÆôeΗò\Œã¸—³þÍ UÔÀì Ð× °ØËê”_±Óqÿiw¬ºïÇs›íó¼×ñ“ïu“ø©@é8na§¬ëÌúlà¯=#òÑú¥E6ŒPuFRç!a‚“§¢Ê‘Rpd4(BîŽJ qÁŽ…º¾g'7Á}wþØ0]ªŽhœJï¹wúd¨p¼ßE››D:êol•1øÿ[\àf4!T8È:ò<áfÂC%’dxÈ.{ÆÚå~‰Ý›qgÔ"ÍŸê/ÒõntKüfx_ §{9¶?Þú`Òˆ{âÓâÜש6á(Sè^m}KÚ\õ2ñEu,L‡¹CÔLz7zNLuŽ"zŠ mª ºÁ!PÔ“.” öäÐ +<=6¸o:Cc|ÁöÉ:ž?fâ’ÒÖ¡G ÏuL?²ô1÷†±“s#»éä\Û +ª' ϹSÂs·ŠJQ—}Êë Û?rj9dÜ·`…âV¬×ÄŒŽ˜–!è7éSÝ©å%ÖlL½vzCóò E%1­äWAH/º¶þ·¯±ü3¦bM5_SÝü|ɧP¾k^T±I˜_HÐ UÐý´Ñeea?+r”ˆ"™¦@¿3î–Õ—õÚÔõö²—_hð +endstream endobj 1459 0 obj <> endobj 1460 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1461 0 obj <>stream +hÞäX[ÛD}ϯ˜ÇqÛL=Ïؼ•n +‹ ­vC‹Ôòà:Nb”ØUâö'ñ/9sq;Û²P!PUgÛßõ|çÌ,'«ÉÓon9Yí'Z§D¥šÈ˜ìÊÉròõ|òô'œÌ—.HŒøà©aR#c 2ßNbXa±Ê$™XÄ\‘ùqòŽ^Í^„¥äùÓç“×»ˆ§LÒfµË·Ûª^‘ëº-w˼(£ŸçßÁ“ôž&É”3®2¿šLaк)üJö¦ßî¢)7LÐ +fÈMsh«ºÜ;[³ù$QòÑ,Ñ„ ™ea*cå3Ó‚ÝÝGÊL¨Á}TÄDº›ÈøTÌU!#¸©Ò.yOBö2ñ!þGR±„Þóhš`i¢©à)ˆYDÜ]ÝïÚ&¢LÊRúz×ø߇¢%‘f†¾‰ÜÒÿ¾ÛWÑñÒ¦¶Åuéƶ^Bhc fcÉB,1÷±ü%LÛÂ5æ†o¹ÿ}ýÔçûg¬þ‹s]š¥¶qèB¬Góð…>Ÿm6ä¦Z­[4SÒ=¹)÷%F@JÆ鯑ÀPÒrÁ:üá¬1·—#-Y–ú©v+<®b¦Ÿi;È!öñ/ÊåñöcYTùæeÙ¾¶.3š»€e»¾ms;vÄÛá@÷Ôa=(ìխŸgÕM¶ÐÞ‰7# S´ÝXWX‘`PyƒÒo(s âÞ‡÷¶òÜ`(xfŒfšûw§ç=ò“BɾÍÛr[Ö-#³¼X“hþ ÞÕþ]4IïXŸŸùµÝ;Á_Ê”JzLð._F³÷H¶QŠVÀ œî[{ÃVB£È-Éë)ñß%3à­Ì‘¤9e’öÑ«¶‹<ñQ'ÉYÚŽ¬Æ Í}ÛAü€†ÉÎÞT¡`Bù‚ÙÀF®„8w%ú¸.ýÍêÅЛ@bgo»ÞR<ÜN¡<ê0•LôaÜ£·wu›ÿ6(c™ö¬m€`K§\!}¨Ð€Eiz_Iðsûžú)g1€lù6¶p…W‹¦F» +<´Îw:¬ž0#„È:$pïh{§;é;ÕNÇ©òÇ.Ÿ÷Ñ õÁ(%Âm7JÁò3è¬Ä̬Tûa4P +Ñ)+ (hïÆ  ,C¢âÉ1·"Ì©-Ò²*÷¤]—$àŸÝࡉ*%ñ™wöm\9×#,u±[£Œ\/IÝœÌ(oFY3Õ^œŒ¡:³’v‘…‰òq-È2’ViK!)Ý‘œ| Ô’‚¡P‡”VÅaãL¦L÷“í´pÍw¤.Û'.A,l¶N~IÚOŸ}AŸqСÞ9¡m"´“Z÷Ì<"±x¸ÉáÆ·ï (OkºÁ5Ø5”ßpúÕÇ€ÃA-O›¯°C"¾Aw¤©KÒ,]KKÙá²Ù4O°8‚oOv>­+­ÃàÄòóÒziÀä¸)ÿ´"ðT1lW&h&^õOaüÎ˜Ø %Àv\Ò"šâzRa¿ÔþÖç5áK£ÇÝ©ÂhÄMò²0èÈöR|fÁ Ê`ðíB ®<ïŸÿ§ÚðwÄ#)©l?&ˆÊ -Q;Ž;![€î ‚V«I»6Óç¯ÞÌnÆpà=°î=“mÞúyÀëØ @dÆ|Úñ¨ñGi)Ng¤Ù‘Êù<œó—¢­œ÷Œ† Ÿ?ò†¹h¶[ h_” µrêk†0Í)J_Þ×?Í®þ åí6oR¦g5U®¦š^Sùb*Kà +Âò„„ç3€h­së¹Xçõ +þ†æú£â½}¡¯¾E澺Áí÷ôãœxn^ý8ÿ“¶t›q¸¯-ÇÊÀq8;Û$¹Î½kˆkGhF× mûP_ŽšÄ¡"SgmT=:@Z!’³V×mÓl\MÔ_­Éí·×³ï?_“îO\g—¯P•n÷e7)Jû§°iUwˆ‹G'…Ž¦cãEj]•¨lŽâê°ñ»6$îûIŸÈËÙÛe¶Vïèu½¨ +œu[—v'’Ò£Ý÷!›r奶;Êþ!Àu¯\ô +endstream endobj 1462 0 obj <> endobj 1463 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1464 0 obj <>stream +hÞÌWÙnÛF}×WÌ#Ù”ãYÈ!ù˜ÆNÐ"MGhb$}`$Êb!‘)I×Ñ'õ/{fáªÊu’( 4—»œ{î¹WœÜ..^¼áä¶Y(Ib–0QD2Rç‹íâ‡Õââ9'œ¬¶ .ÃN<‰©$–Œ2AV‡ƒÊÂT’ÕŒ‡du¿xï]^='Mȳ‹gOžeíó„J¯º­³Ã¡(oÉe›×Ûlû¿®~‚'i=ET’€S®"²º\0¨Ý¬í•L¿­ý€ÇTxÌëê®-ʼ1¶®V %h¬‘¢‘"TÈ4M ÆB››I×´›0†^h?ÃÇt·RÊz3À:»!q¦"kJg‹ò¡÷òéÍÕµ¿úmð(í;A_ +í!îjÑ´Y›ò²¥äªhw¹›„vÅ|ŒêDÊûžØÇÎ + ÓQ±yeùúå͋ׯ&fBÊÓ¨7ÅepjV«zj˜Ó(= ïúêÙjbVP92«õÀ™åsHÑ€"¿ßu¾![_$ U•â^Mòl½³è(«Ð]8pK”·…h”b?¾Úå3¨!‰éV´Ë„qÙq"ë¬$sr×äý9gÀ`ôe-ë¨p¨êœ´;|U•ë¹KW>ãÔ/ž+F  ¿éhDéÙ§†À‡ô‘÷$P:ŒF¡ˆ81˺Z»N 쇤"šrÉz|s,Ûìó„)EHfVé ô\¤€ƒé9W©5r/×&÷•7éîLwôQß®?xVÛ(Cçê)Ãôػħëªl€5^Úeõw3ˆ0•…H;ÞE¶ÿÞ{{(†òŽZ¶”÷*;äS`žÅr`« ÒûàOÁ˜(IÄY'#“§Ø3$Hw{§‘l¦aTŠqÙ¬‹=²­M<ãjAÛÐ;H:]ÿô{wSÞ ¶- RЂü¤žëG_0œr3äkÐÊ“Ò8—¿[„3v¿+@6mè]Hö0ës½CP—ÄyáÁI­ž‡!ÌóÊ[厡ÜK?d†ì€%Òtx@µ±BõXóɆá]æ[½{™Ø×¹^ë}‰ëªª7E™i¯¶¦ŽÓ,I’ëBýe.×huX2L—£-)°Ä¡&Ã{ˆÚÝLFg{¶> endobj 1466 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1467 0 obj <>stream +hÞÌWÙnÛF}×WÌ#™„ÎBùèÆN¤©a«M‚¤ŒDI,$Ñ©Øþ¤þeÏá.;M[- ˜Ô6w= [Ïž{-غšÅŠ™0a:‰™ +Ù!Ÿ­fßÌgÏ_ +&Ø|5’…øÃE$†+ÉŒ +y(Ù|7 q +uªØ|›Ph6¿½÷Î/^²ˆ'ìÅóOŸ²Ëƒ/®¼r}Èv»b¿fßïëü°Ê¹ÿëüDR.RÄ qÄæç³R˜…»SýÑo~ —^cØUy¬‹}^Ù³.æ³H§¨'æQ̸Tiš2®“0Ô®²Xr·Ÿ£d.õèst„¢ì‡¨¸ëGj»2|¨“¶xÊLDMõ*r)þ˜ùJóÈ»g2~áÖø‰ÈYúÂþ·ï'Tˆ6 O¼ËCéÞ[5ócn¼_|ûIîÞ?T… _¯ÜSsm¹!õKÊØPÃ(—´É%.—?üˆÇˆ¦ñ?†1wr¼|ìú…_û:§þ¿f§ bžÐ Âf +a<ÁÿŒy¶Ý²«b½©1LåUì*¯r@@).¼O¾(½|ÉÛýo6ØH»Á1p{ +iÅÓÄ¡ÚÞáë±ÑÜô˜nºü—ùêöú&_Ùöu^_RHãeØ]\êÍ¥¯C¬ÖWbM‹}ý¦¨7oŠC~qWÞS EÔÜáB¶ ·òÎóšÕ›œ-râ +¶ÅlQ–‡eáÏÃA<Õ}¿KsŸÕøU¶_²[Dg¹¯„wç‡^﫨A¯"¤-¼í1w“£òuÔ¤ÚLDC7åÊfqÇä GЋ-ð-Ðó{_†ÔzŸ^ÜÄ.$‘¥1Ó±XÒ+¥;¶¢f®Š|éG¾õ¦¹m:¹Žï¦É/Oe:”¬Þ¼Êî±hOßpÅþ¾å*añ8»@dô·Þ•­’ú\¢{J“D -á÷ÔüX—%¦’@:ˆ¯›øÒ"Ãc5ÿýˆq-mX6p!ÜÏþòWgï.®FaÔ DÒ†H\ˆªÆZì°FÏìj,2úeÖöEtJí¯öìcÎŽ²*÷Û{›“Å›œŽ¶•>Ù.Ì~‘³•¯ 3@þXž-6'cUá ¼ø\mXõ4š¶0è8~P +öèí–+1}pô²‘)Œ µJJ¨]÷çð&Ù†-¨·ÄQâ²WfÓç|}¿¯³»ÑÜRžÆN0éh4jŽ íÍô¯ø±w²D ¼Ý²È‡–h9-.I^H|>#¶i&n»¥CÚ":rT j8î.¡žΦK]ç=[œÙEóžÙ‘£pcÄ0â ûE¹¯j¶ <³Ã“'툛D 4!R'‰Ü”Ÿ`‚ËÛq #™Ó,xV½,ÞýWY|Ê(<Èxš€Œ£!ê½¾›±x@FtܺѠ“Þ÷Þ<§âÚ[i¡«q:pM²Á0¹W[‚ÝÚ¼jÌ_|¨Y‹~õ[yW\7dî ç|¡–+«S!×é”f’²ÆàƆ$àv2㋈§§@ñ4éŠl9˜2ï!hÏy;‚ âI:Zé1PxÜéžewÄ»Qõ$è®zyÊ”¡~ z+?@ºŠ%}p$‰©s+Ù¾ {:­ jToÔ—û)£­ùËAuOütSÃd[–Üb ç¬fNí¼À0ÑÀ4rÝV—íÊ#~ô‘„?þpãìvS€ßÓFd<¨Ü´•7gXkÙƒ;!÷p‡C 9”%´æ&«j¨ñš+1ÞR>¾m§Å{RÙ^>Ò‰Î˸àÞÚR;sóºˬ3-S}ýó«W)ÒS/Ò™Õ%+ÖûåY7Ñö˜±{j=¥‰ySi»Þ„=î<ç> endobj 1469 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1470 0 obj <>stream +hÞäXÛnÛF}×Wìã²)7{ã’ì›ãK V• Yˆ8}`è•ÄB"]’rêOê_vv—EÊÅEEŠ!¹ggf眙1CËÑû× -«‘(¤’‘B‚¢R£óÑû †š/FŒ# +ÿà‡E!…‚ÊÑ|3¢€B¨Œš§pC™Dóo£[|v~¡Ó÷§ïÞ¡«Òc¸X–Éf“åK4Îk].’T{¿Í†„Û) ùŒ0 ùÙÈ@³MêîD}Sz> ÇÀ Y±­³\Wë|>Rœ„ +Ÿb+×£šÓ¦I„lHÂå>I<¨K O,/¾´ œŸ=NM“ (ƒXô‡AcÕÆ!p™u` Þa=5eoúgÎT¼¯I_¼>Ç÷™(™l™èœn»Ñv!è¨6Äx6Ýn^íBú§rÛkCîKíqÓC?Ø:+¶d&D1Ë­ }tOHiCgHa»=Ê=F¡•ØzpÙ|…ieQT¯ô0‹LVÏüúùªäj›±}§#M÷ \¯€êf^ZdkÛÒD]Kó¼¶ +H¾N[ù^wó„À†N`CØOYò‚º +õs WRÆú!K ÝaPôpÝ©¡–éaø íÅùÒ5»¦IcCvYð6sÒ͇ {v•"‚îs’íV5óÛ+ꨈŠÞ*ŽŠ#ŽáÿMi›ÄCUDo‘Å—U‘ˆÆ©ž.»Ó ‹½OlZÁO‹ã-†i£ªQ +ËVIùÃ@•B˜Ìy| ”fŒÇÉ4±:©û&¡yWâX¡dÝ ¥ÚÊ#Ç5×öí¦Éæõam÷Gq0¬æÖº_'•‰« hŠ5|‹ ™× ë¾0¡†aË<1Ôl‡­v~ý[€ðB +endstream endobj 1471 0 obj <> endobj 1472 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1473 0 obj <>stream +hÞÌWÛnÛF}×WÌã‰6{'ù˜ÚN›"- [ˆc$}`¤•ÅÂ&]’ŽâOê_vö"R”d׉ۢ@ñ:—33çìr¸š¼úñœÃU;1R–Ê H,'?Ì&¯Þpà0[N¸†?üãYJ¥€T2ÊÌn& ­P¦r ³9ž0®`¶ž|$Ç'o@Ó Ž^½x§MÂ3*I}Õ77euo«Î6Ëbn“ßf?£'eªs=tAº‰B¦Þ…Ùªl½Ç©D@„öl—î‡-BØM`6Àê[÷™¦J „ï.Ò•uU\‡lŠq>Hz+>dóîõåÉÙ(zAó|;õžÓ#“@ÛanlÕ½Ä:-`ŽÅúlá®E$ëêëTÍ-,‰Kê Øb¾‚Ø1$Á©dÑ{,Þ!¯l_t—'^ÒeÕ#a‚53 áË žÛPÓ‹²AeE h³†íÔ{¢ÑKœ«)jÁTR1ĘŽÎï«®ø:ªON1/+îEF¥”Xß9"_bF ›r ñ6ÎÞ'ˆˆ28' Ìi¢ç¾!¨bÞ©GBª"ÕÝ͇Qd‚–©­äÉK_2¾í¢ô|]þG¾>bOØ[TMòaÜ…®Fù!Ædé?ãñòo<~JF­3âK•d;FZ”T‘«;×wm4CÁe€ØŒ sq°¤ÛþÇÉPÓO‡Þ©’Üô6fàK‰¾½7BÇòÐâ‘[[϶hâ3®ÏꥳƒÔª¶ó|ä¦Éñ8t5̽ +¸áíܨ1r6¬ì ]|õTt‹²±sG„mÂQÇã3Ì-\÷@Š €CåGø¬ÔXÎÂ%ì•{°¸Þ£Ô¨Jc´œ Ì£õ¹ç4Ñs.Ã~¶—Á”X[ ô)¿ôÀÆ$€ñ°øKÔg³¡oPþ‹rÑ­Ñ}Ésç!¶2߬“ƒi¿ŠÏܾul½3-¹Þ‰‹·Ç³Ÿ‰Ä]!÷Hz†°Œ +Œ›qX÷}<(Œ»~œN7ö;Ä}qPŽqfß)Ç›I‹Kƒ]5"‰é-•ìÅɃš›³„ll..‡Z<¦Õ—á *÷#þ=ªü80t,ÍŽÚ–秋²PnÛëÊõ4YvS·WÏådí ¡”¬ž!%<78‚!øgéÉÚÏúh½ë[t‡ã²Øs\D–³ZI¦ +9§céØD¸µ¢ÀÖ[ãØ´¡÷ÜBÚìÕت:Pݵß$(rŸ Ñ(·/Phiw…?ngd.ýä%þ»âwZ£¤%M·ûÏ·; ë@Ü|ý%À;oô +endstream endobj 1474 0 obj <> endobj 1475 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1476 0 obj <>stream +hÞÌW]›F}÷¯˜GHâÉ|<¦É&M•nV»V£È©*ÖÛT¶€›õOê¿ìÀ€q6RT©ZÉ‹1Üsï9÷EÛÙËwwm«™âH“‰H!NPif›ÙO‹ÙË·Q´ØÌ(Cþà4æ iN0ah±Ÿ°‚‰ˆ9Z¬à‚P_gËàÍÕ[$q„^¿|ýü9º)CaÛ2ÙïÓ|‹Þçµ)7ÉÊ„¿/~OÜ{’˜£9ÅTI´x3›ƒAëfå¯øÉô§2œSY‚t[ê47•³uµ˜)†µ‚Œ– +aÆã8FXD„Ÿ›K×ýc&? öî~„„;8bBŒàGµ¹ÛÀ¨l’çÒGøkrepDŒÐp.áR‡sF#Ê dRøäþ>µyá(¸) o}XÕ(TX¿…îãï—UÎ!Þ È-¶.[bábLi‹—%nb!ÔÇòO(±Ÿ> Õy˧ÿ£¯—þçcÿÕÿñc® +\áÈÖ€4U jD‡ôù*ËÐmºÝÕPLTèÖTÀ9¦Áß!NfÛöo:X3×Á +h{ÎhŽãÈ“Ú]ÁãJ ¬O”¶|€ˆ?X›Í×»³J“ìÚÔw»Ôdk¸¸Nö&\üy¢ïI(¬A¡±5²÷ì¥cgÓÙÛ¤¦BõΠL¡bƒˆu{È’ÒÚ…Ø"îAmÀ£ê  ÜÔ¨.нA•‹È¬‘}+ÂBö^Š}îCF€ÇpŽEà\V>!gÆAaË`rIy‚{c• °­Yc´Ø¥•s85ä V¸ZžÒå>ÚÒk‚wJó×!-!Útƒ<|ÒÃc"ûD§ +ÜýüþêÛØËXŽÑiwM¾ªåu8Ð%(Í]îê6~#PÆÒT½o’zwW'e=¬5Ç:î^j^†–AžÀÜöfXu†‰D¯‚Á—p€Á€Í’’ŽÊÙW0Õ9°i{°øUÃP`0±¶ØM©‚üL/p»®ì"ë¦uÂ5±•jÇø©¾í(¦Ì³Î‹É„T Ë=¡‡‚)èÙ¦xž\ÄójÄŽÔ_ØžÅq…nÄCØ@‚m‘·› °•´€ÒvðöÝrÙÕ¦= ¢“²W3ߌ7?|~÷ñz€­ÀlJè¸íÑU +`–ÖS¿™#‹sG^}¾ºªÐɉó¼ÚÁr iŽAâ¥qGmB»€…oƒ¨(‡–)Öì<Â۫׋]†ù@&¥oÞIÞØi*¡švßòØÏ`¡Çk©ÓæÀk”s§:wºKCÄŽ*ß–§I}RZ5"Þ«ÔâL¹µ]ÃÉ”>=ñSÎÐEyÙ°ð¨i…¶ºi§ho6 |‡PhW¨§„Ú¿×ét_Ñ·å™W¹ɳ'7ÈkÇï";“¿´«^'É”ü€$gN’v‹SÛ£u…õ^Ÿ]\C­9H‰•èÏ7UF}(H¬ÎGÁaÿ‡uùPd.€ê̯җüš 5Ž£uq¸ÏÌ3È}”·Àå¼ó¯<³…9Ñì‚;…)#ò‡Ü/»{zâÁ© +ØesßcW;öx;öÐÔÜëZßg”%PéëËÓʉ5j9}Ð2œÚÑBà@h$8~Ý9ï0‰ÛªhsL§0þ¶&‡†ÓÀ] ’³ùà›Hl; d»?Á›T<½lÙW«'§yÔG'‡ùaoܦcMLqÖa'~*ªÒ5œô©=_Ÿ…Møž->èóÞëwÂ=X ·Ì®“šTq¦üR¦ ª`º+Ÿ.Ô6M]¸íÖb=<«ô¶È»­uK<.k5=¬n±m¶€jkŠ½©íAÑ®#öè‡I¸¦P½Õ«òt×ÊîLFÚ*¹§›ñä¶}‰Å`ÛŸXÍ–A[P³ÞJûÐÎ݃» ¦0y’ÒÝJ²Ìd>d€‹Ärò̱  ¿mO=¢ä1…þ #öûÑw¯L¢É“ö&ÜŽ‘Ô€³óµÙ†ð††Òd¶NÂWìv;Ô¶ÿ`žÜ€T +endstream endobj 1477 0 obj <> endobj 1478 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1479 0 obj <>stream +hÞÌWërÓFþï§Øá—Ðf/ºN§? 1”HÆ1 LÜa„³¶UlÉ•ä&iŸ¨oÙow%[r0C)eJf¬eµ{îßùŽ8™ŽŸ]p2¯¡$‹‰‡D2RªÁlðd<8~Ê 'ãÙ€ Âð‡#*‰$£LñjÀ …2?‘d<Å‚qŸŒoWÎéð) hLNŽO>$ç¥Ëc*b^¦«U–ÏÉó¼Vå,*÷—ñÐ$­¦€JâqÊÀŒOj5S»’;Ñ—¥ëñˆ +'ƒ2*6u–«ÊÈŽŸÀŸ!¡B&IB¨3æ[ÏBA£°}—©ð{ïi^Âãm<…„ॷÎkËxÐx/kâËÔ•> œ;"w½ËÈõ¹€ÍÂåø•v_hGü(¦±s^vïz3­‰ÒÈùÙ5o”Ý/«Ìõ`¯Sä:¸Æ]¦ã%Dé€i[’ÆÆ­-¹ ¡ÆÇ/ã!Vòî¹÷ßCÏÏ<ößHý3Y!uX“îáá_ê|¼\’Q6_ÔH¦t*2R•¤¤ÜùÝ¥£®i[ÿMGÂTpÜÞ‡´¤IlQmV8F>v˜fÌT5Óö;×jvs±VÓ,]¾RõHéúÿºÃí®ChA~„– %yM €EÚXðÆÔ×à­HJšXQ0dž‘íÔ†'ãž>A}{ÈÛ[kˆÚhWuZ«•ÊkJ†Y½@ØWX­ûŠ^<~;íiJ’`›WÓŒœGó(ÈŽ1‘9r~öâí³³W=Q>åQ\¶V'¦±AjQösÚ–”·½p0 ²#[c¿‘Í÷#B² +åðÛ&+Õ5™¹"F èHÜ)‰J§ 'O„4¦G}×t"+´²q™Ùn9º³wB?^¨½¨£ØxÜq)ú<—Œv¿mlÁ=—¦iNÞ+²©àR‘/ïð3UÚ¹M¯pñÓõíøih5x]5 +:Œ£©,ÜÙ´sžõŒCùúÁ~ êИï ½ÖÀγ÷_BC¯¢®ØÒw§#`LÂ8×u­Cƒ÷k²Þ~Žh¸Ep Ô>uÙß»}¿„þ‰êE/¨±Ø¦ƒýà™¦l{R/Ó¢(¯³<Õ„]Ì´0=ÉÆi€¼‰=©o\ NAÖE¦ËÇ& £:„Ú rTû}Úb #E‘b½.* +0 H³’“«R[a kÈ +CC²GV;¶¼rî¥Þ&ýð,$¸7lšív¾0|ÕÆ&]Ë dx›®ÖKux ‰ßx·êǚ¨™ræJ]‘ «ÈY.AÉ7òA­F¹RëzØ0-×U‹íYDÓipŠÑl!h•í7ŠŽÞ¦JçJ‡²*V0`“Oë ¨X’IGF¼•Ñ˜½DA\À¬!JrÓŒ±“™˜åíìåaÖÀ<ºc[ÖIQ+!WfpÀ9¼e¯ØY§z机qŸXáG'„f lj¤#“Ârù>º<ÁPð”öËQÇ/Ü–Å!†m·m»1_·è*×D\Ÿj.Aws©TÕwýw |}ŽƒðÉÑ‘ò›GX`W¯ßÚó^cÆ3î;{îéQRú)»¡X›ð=é(œ§Ø­uZb*y0:{=ž>˜¸{Fžü0Ĺ“ŸÞ†€µºwâÓò_hÒü—üë˾̮ëÅÄûê¢/éZÁìçg—ÏGÃ/1ĉò 4LÚÙNvG`úÐY¡þŠéÄ©²?T1Ãýʼ9’­(|-þ-Àð†7 +endstream endobj 1480 0 obj <> endobj 1481 0 obj <>/Border[0 0 0]/Rect[145.02 367.26 212.34 380.76]/Subtype/Link/Type/Annot>> endobj 1482 0 obj <> endobj 1483 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1484 0 obj <>stream +hÞÌXënÜÆþ¿O1ð/RñŽ9ÞôG*ËmR'¬EbAÔîìj -)ÜÚЧh^¢oÙïÌ ¹$wíh T†HŠœ9×ï|çŒÛÎ^ýéF°m3KK£Œé,a*bµ™mf\Ì^½L°Åf&$‹ð7‘¥\I–ªˆG’-ö³Rx¤sÅ+¹ BÎðQgïd˜ˆ½ó*v~_„Jó8øÄd$ÂyŒÇ4œK‘ “e(pUî½"?tšñ,¸®+÷n}Xµ,LxüÚ/ƽ¯›]8‡½AURl­·…KÊ$¥x‘-¹·%Ζ…1O S㉔1'ùxŸüù¹û3—ýo¤þ/³YP Ï(‘ÏB”LÊá?ÔùÍã#{·Û>´H¦ +öÎ4 ÁßC‰š Ìšwð÷N¥Ep‚²=Vtìê,çyâàL¨Þ$…}¬èU"o>~VU&A}ËþÀ–Áª*›–­Šúâbâý¾x|¬VË Ùýjª Ð'ûåB-ïX¨x^…¾¿‹~ܦ­×‡§eð"~a·ºm‹‹‰“Å"~×’éê÷wb¼ZÆxýâsËo'Ë/¾dÉû;9Z,õïÈ–Ï]ƒÇ’ëÖfóáæɬvÅ㦽.ð¶}¸®ve» ÔKZ¿§ÞWõí‰ÒË?_áËå_þúîêf@êÉŠ/kº*×ËÓ¨njƒ¯_º[;’g.½}þRJݳ¥Ž–Ú•œópñ7Bä:Ì{ÔÕ¦…ŒC]²èëøÔµºÌµºÌÒ¼–<·Toûî;QNeÜ<ìÌãÚ¬}ÿÙ’¶¾“{& #A²ãhéÊkñ`XÓ «07 ÛPgAâ‚¢—ÔCö¸ãÆ +æÍ×^+ÚCOCšT:‹ef-ž*Y %qìövíÖZ)mß XCÙìVE»«J·Sw];ÍÜƨ' PÞP8¦†¡ì®c + ­›%»7ìÐÀ¾¶²Ûç˜3äïMà‹@!Ã0+MËud¥pRúàÄ}p|ÛöÑ çÔ»×!.}œFCÊ4P½=Bœ‰Û5¬z“£W·ê ¶O%Œ/Êõ(ûªvŽÌe†Y%žF£Ëq{7Ì’UåÊ°]yˆ'~àã$._7×W—ß~óö‡«Å(q1ÏóᎤS§sßš¶hÍÞ”ˆù› ÓUÔ¬ùT¶ÅGXaMO¢¡¤¼“¤R'É]Ðnáž; ç‹dqt°‰¥pìijrÖµ›‘o;ß,pfç:òShz’'éòÔ»ü’5Æ0Ï äÙêÁ:¦ Y%9ÕFb§føOcY׌ !Ah¾*†,‘ôøtJ)íÔj‚gß°ß^½yE1z[”ÛC±5˜ltcÌ’4Išr:y Íót ÞU –D¡CÌ©¾}ênC¡F•êÀöaŠ‡Cˆ F„{³%Ó¿'t…=ù $“I˜ÿktÅ>ìÚ‡Aô&TŽ(sçIcº76BMY¬òg´!R«c,d3°Rã½cg+Ùqƒâ±wœm‚„*M¨ÒUÞ™ÐÆ #vÍ¥ãõ]¹z> endobj 1486 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1487 0 obj <>stream +hÞÌV]o£F}çWÜÇ¡[&ó <¦›lÕj[E‰ÕªÚôÚc›Ê†p³þIý—½36ØÞMªÕJU$C€¹gÎ9w8¬¢«ï8¬ÚÈHHY*3 46ZFßÍ¢«w8Ì–Àð/w$¦¨!¬ú +†V$ͳпÆt.¨Éœ¶Ñ!—ï†,ìòÙ§*6?ÛîÁ§¸­ÓrÇàh£{p¦vê&¸6Tªµ h\¬Œj­&Ý +Ïâ kmèy^te]ÑPCßU"$’Š£¦Ç>öUW| KtX’ÓÜ‹r7®tô8©z„/á)«66äøxñHãVÆ Â¾&„¾„íû" Yº9G C'ãHÖfjûÀ•ÌG€sÕ.¹ DñÞŸ!Ðû[(6ô Hšå#àù±÷׿ÝÞOöYxZ²³Q#‡QmWtÖ±žÂ ÷xš*¥\Ž2Éÿ’*ëS‰L¦‚²E½þµ+$SQ-BVDϤãúPl?tæEXص¸¬®6{ü™[xÂùè$"£&÷Ó5Ò2M‹6lTq¢b£ì%Ò)+Ø—‘S"ƒpƾšœH$Cö¶y$Áq)Cº¸ÙÇÜ0¾qÔUÛÁ?[Í70õ)<,‘­ÊVNT²µÓE÷`¸1þcæ- %1Vç„°È̱Cô‘_ášé+M“ëa¬ÝG_rÍ ž;ÜÙbï4'p÷Ü? !€‘Ó4;£C¿ö¼.çkèÉ swŽ¡/úSÇ•£ùqÉîb™ŠÔXaîvý3~ ˜3àzBZ)Í%žjŒ×B½: ú4;ªUÊ^vøyÑ­¡¬‚‡ì?LŸ°Vº3âé À9wpª çP'àúÉY:†rvÊì5ˆLIO4˜ƒ0õÚ$¼­q º5.tìØmèã)ã„äB'Sůÿ"ÝrÜiùzÙÞÕøßJ¶~mÈhñ)æsž(u·½sZ=Hé`øùáó Õo]8<'KžËqªQÁS«8÷ŠLhyVÁSíò;²âåãY\§çU m§Šµ*ö/U| Ï„ÿ +0WN:m +endstream endobj 1488 0 obj <> endobj 1489 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1490 0 obj <>stream +hÞÌWÛrÛ6}×Wì#ØTq!HöÍñ%UãÚYã<$}`$ÈbG"U’ŠãOê_vð*ÙŽí´3Ï°H,öröœ%ƒÛÑÛ÷× nË‘úÈHð¡Ð£åèÝlôöŒƒÙrÄ8øø‡7…Tp…O}³ÍÈG+Ô—±€Ù>“0»}"'§gÐŽß¿yW…Ç"*H~[$›MšÝÂ$«t±LæÚûcöž$ÜI0f”©f'£14ÇÌÝJt¦?Þ˜…”“ÍÀ4ßUi¦Kkët6Rœ† +#R4P@¹ˆã¨Œ|_ºØl¸ö!FL¹<Ä„˜„}ˆ·éˆmbÀ‡2jb7Ž± ^ÎÃßOH{à>óÆ.CoÌYÄ8ºÌ=†Wá~L2ŒhD®ŠÜý¶ØÍ+ð ÉgŸh÷{Q¦Þý%yfrk£õMº8W¡É—ñ%®}ñ™óåo/  +Ï”xõYà,w÷½»?óµÿÆêÿø5[¡hdjà×UðÕ^;üà™Gë5LÓÛU…Ť„©.5v€”‘¯Çž$zAø×¹E°Â¶}¢£ñEª^7[ÿ}çû6¯ ’Üî6:«Êºa•3„øãM»0ûH¶Û\ዳ?»Æf4ŽƒUÉÛÎnÚ½ÀƒÈõVÏÓeªK¨VÐÆlí| Û<Í*c »'ÆóŒ5j¬—f¸Ùt #Ê­v˹g8…¤É2]AY¿‘êõ­è0¨1“xÒ^dMI}[Rb½ú朻*Ôº‡9<ì…:Ïób‘fI¥aÛ@ y/P¿aW^Sà<©Ò<+aé ¤:’{x)¬­mR­œS¥‡Q„mhMá#W{»Âò2¦J™ò·E±•' ½¼³ž&ë ]]¯L¾®W funJ·82Nó†¸9*‹õÚ’vlIÛK¼cü‰c4¨½ œMtÕñû?׿]νÉö¸ PV˜RƒY +3LÍðˆ²àõG¨ý# -!ßšª È’ls{BßíN1›ë&|Ñ°+õòl}—9–!o7ŽyLÙÊV Ä»ò@f*Q(å ÀM©ö**(ïl…½¨ï³*ùæ®ÓÓX9½3 #yˆ!k”pëÈ'‚0ƒ…öy(ø3bå3q IM›­òxž#‚+Ì“"«¤ø †-ˆÚÎyÜjà ãÅÖµfÍmv¿Õâ¢*†¢_UòÙsa=Ä{84`m쿈ëlÐ%tǺò=¾k„«=Hà.-4^°wMEkò€š‰·›²c +3=7¨CŠÿk‡FŒÛ-…´zÔ`®DÈÍÄœáÕ´*Á:ï±ÀESY“ 6ØY؆ӼŠ¬ñ]c]BF~uX{5( +  Fyä’éäâý ‹œŠ8袰›ÞÛ¨^’¬{äêèäÀ”¤ìû¦Œ@Þ_80PÙ(žcçz6ì³ +UÏ6Òa‡œ]žŸ_~¼š\ìy$^Úäòãdúz—œ‘ãËééI£ï˜ã´ä€ÕK÷½—§ûlr~þ´[¼™<¤ØÑ`^ mvÝÓñ®ãJëåÑû^à++ǯ%%Êú ¨Þ¤Éã’ʃؘ³Ó™cÔß}ùš&%3p"`õ@P6:±#í@"ƒZÉÑ­z f¢¦îÓ ++qÜGeИ5Á¨`Oå6y¡qC¢fûâÖ\h3]­ps«Šå¡‡ƒôÿ ¼¹[“—ç +ÜMjîß•·Ì0*Ù쩧ÊäsUa{9¼¼RØN –žR4¿iÅ#­Ac•ÛžŠhóaÔÕ¥S±í:Á'•ÝµN0cåÖíb87Y´Œ¹snÔífg)Ò~ý#ÀÂÎå +endstream endobj 1491 0 obj <> endobj 1492 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1493 0 obj <>stream +hÞÌWÛnÛF}×WÌã©6{!—ËÇ4NÚhØBœÀé#­$¶©’TlRÿ²³R$-§ Ü…Šæe.gæœrØÌžÿpÅaÓÌ”„”iˆµÉ 6³õìûÅìùkëÀð¸N©JF™€Å~ÆÐ +eq&a±ÄÆcXÜÎnÈÅ«×P /Ÿ¿|ö ÞÖ×T’jSçû}QnàMÙšz/Môëâ'ô$½§„J˜sÊU‹‹Ù Z7K&O¦¯ëhÎS*Hfà²:¶EigëÕb–Äæ£h¢€ +™eÐX3ûÌ” ©êîcÊTÄ£ûˆˆDº›˜qGæPÈoƺKÞFÆ“½L|ˆ?ç‘ŒiBîA0ÍyãAÇȵð|¼Ý{çº0+¸-Ú­»ìcLº©Ðþµ/&7NLÒ4ë_ZΈ³9—Õ™S¬t,Xö$óiÖ^"Ž”%4x„Ŷh Ü<­­O‰£%Þ3¦]„EUæ;ÄiKë“cƒéí«Ú§†)>x©ãN1Û-¾U•KkÛ+)©<”+4]š–% 21eYsIÅIŒÓSK\Ý—m~7B6£™òiO°l)éæ¾,\?Ý¢lae"EΡŽ—]W}$žW”a/Y…cVr±ÐömïTy§‚Æ̹uÌK<óHyÜ¿ņ1+ø«`‚4ºèCý_þ#_7¤i͇yÊ\Ú*eç<*¥ÓÆㇿñø1òÖø)ˆqoÈt/Áò $½¤1Ù÷¦l›`?DƒƒMt‹FóhU²·@UÒ'3)T`µÅ%I,<1?5¹˜\=iœ” O¸rTkG> endobj 1495 0 obj <>/Border[0 0 0]/Rect[63 129.24 97.62 142.74]/Subtype/Link/Type/Annot>> endobj 1496 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1497 0 obj <>stream +hÞÌWérÛ6þ¯§ØÉ/б`\¼&Ó^Nš±˜k¢Œ‡– ™­DzH¨®¦Ó§h_¢oÙ@ê´7i2µÇ$ `¯o¿¦½£o¦M/’³TdPëÞ¤÷4ëqàMz\Ã_|ñ$¦R@,e²y¡ÊT*!á€qÙmï99=ƒ&p|tüø1¼¨žPIªiÏçE9…ïJ£ëI>ÒÁûì{´$½¥JèsÊ£²“^Z3#?’kÕ¯ë Ïc*Hjà¢Z˜¢ÔÓušõ"Aã#Šh2MS *aLùØ\¸n#¦Bm-" vƒt‹ð +ŽÔ.ª¤‹Ý:ÆÃ6xzŸåT4$KŒý‡qÐ<á]ǧ\ÍóXÅ MÈ‹ºòsãÅÈ@ј¼ +ÜŠöóuS}ô—T¥ÅÖEË,\BD±ÅËú’¶¾0î}ù+i„6>¼æõ{çßûÞÜöy´þ·¹,Ȉ&6¬Í‹vÊám~=›ÁE1½6˜LI¸ÐÆ +’ròK °&‰ÓŽþ-ƒcáaÙ®+:ôu–Ò4òt¶ÜŨD­+šaU`Ì»_”š2ˆˆ6ÇOaHÆzr{œÏfWùèçl‰ó7úRƒYÞèCehÕ2“ÙR9±øÜëÞ¨¡x‰Aœä&‡ζãa¿9ÙA+„¶[¡Z7O¶×F•uª10ºÎk88UUýæ8kÇoŸtE"¨b)ºâ)¥AöS[=[>¢kî+ëáíàFŠ|ö\›Á5Îz6˜¼6Còh¾¼,µy4 v\:þöwÿpyq:Ô¶·ãCÎó¥®ÑÂ3ñ9´¿.ÆæzHRöºRÜQ¿yÇÞ£ÆÔãÅ :ÊÇiÆÝ'ðvG@*ÓJÝ/ñæß6!Sœÿdb[àwâü¿çE…lq-“:}†D¼*r—äËìåÅóÉô¤Ö¶"‡dH,ý†s±~àÖ·wm½'ÇwãyO~E$]¶îH×3À¿`øåÇUÚÅ_(fkìÁ%öIüÿ"蟖cÄc-µs.¯ìNý ,êØ“ßÛ¦±kOßž&öCÆSFÓÄv?sß5ºO1Ì*ÓXÕ«VsÝÔZ©hGJuð¶ròP·&ÜÚþ]´ý'ä`[ÒÖ§öË9MTè¶ú’’ÁùÙ`Ë ¹nx×éJg”`6s£çº4²k ^®5€Í¯x¸úþfSÂÒõP4PÝ+ˆ]À¦ˆì\òU™Ï /Ç0ÊK¸ò.õ¥ 2 wûö¤µ&à¢Ñc¨ÊÙ#Ÿõ·I1ÓgØÖR8 ¤T>j(W4¾Ó#{1°z›eiò_Qß$@Gbî+ì‡0Aý"s|ã+7è;äW˜@0ˆå )gÿYÆ¡Ñkxéቻ0¸Øè®þX—±ûsu‡AkI$¯‘9{]'·foÛeŽVÒȘuÈ{Ÿi³bÚ‰A¥q·»½^ŸžYtÎórºÈ§›Í‰m1c¼†à£Öåî¥ S”&{À¹Bî F$æ`ƒ6²GéM>€Ê{— 2σïL‹Ø:W‘ÕɆônq£¬í¦c¬gãØ­ñï¶0׸-š¤4‰W~b˜ît³=áþ “¸²èÈ"”O‡Õ¿6Vr¸«OÇ}…1åé&C‰'˜ÂËx´W]^-élÝÙp[ÔÝ)wªYÀ¤LZÀ°ªÑ_{ØÇo°=í.XÈWÚÜxÈ)Ë +|8Ž56­(´ÒÑùo»óøS +endstream endobj 1498 0 obj <> endobj 1499 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1500 0 obj <>stream +hÞÌW]oëD}ϯ˜Ç5WÙ»~¼Ü¶Tàª@¨åÁ×Ù¤F¶CéOâ_2³kÇqÚTå¢+¡H±ÛóqfΙ‰„õìì› ëvf4Xá u´€ÆÏV³¯³³K «™T ðƒé,× +¬\(Xlf­p‘æ%ž™ÂâqvËÎ/.!ã>œ}x÷>6‰t\³íº)6›ª^÷uç›UQúä×ÅwèIGO×0—\š ç³9$7e<ӣ韛d.-W¬B3p½ÝuUíÛ`ëb1ËÒó1<3À•Îóxê„HcfFqk†û˜2Wéä>"B€èp3Þã‘rÀ›©’§ÈdÖg¯³â÷E¢Sž±'PB&ó Om2WÒI…1«Dâ·Ž¿;J$µŽ;ö±ÙÆß–»²ƒÄpË~JÂoÚ*™c¼l[¸!]Ax)e,F±ä},BÆXþN2nÐgŠßBZ€hy<]ž:¾ñ±/cõüX¨‚6ÜQ D_aŽøð}¾x€ëj}ßa15káÚ·) 5—ìÏD!)™_ò¡ÿû¶*t°AÞ-<2ïkX OG'&:Q<¹ú?‹Iܲr»«Q²XwŒŠÊòXØ]2-ðaÒ<ïÛt„GŠF¼×;Bf(c Š¢â²—Ä Î!’n‚¹äyžQV©§xÑüÝ—Õªò-t÷êÝæN›í +&øJÁ­=¨_::4yU'Á7pÅ’é=WÆR¿5Z!kÒÓ¬ ¹£fŽÝx\år—ʾfu9ˆUè—Dâì)‘’†¿Ä yE©î4BEs};Å}$ +UØ–íJ(SÏ*ÏžwÕÕû_.®O‚~TÌÐaq\S~Úè§}¨ÀÈç~úMfôU‹è]Õø%¬*:å…d4.°¿_”÷Ð"¶PÔK(‹>yصø>…@ƒÌÙ°zÚ}¨ãæÙ¯u›mã±k ÚÆŽ½9~öŽ—¥‡ŠFÀþÆ1Ò9ÇÁô…Fî•hü3fÄFÔ¯Œ‚A¼NM’øºí ÄÇï‹æ+˜ +1U_åÏÆÂCAC4??E +w[;‘ºWçƒÔ“›ÿ_Lˆø7ƒþ¿„Ô1.Œ)ÄóÚ ˜®+®_&£ÔW£§D ÚͺÀÑQÃã}UÆN•Üºì)“qÜC·…²ñXð`’z7T¼îÙ` +endstream endobj 1501 0 obj <> endobj 1502 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1503 0 obj <>stream +hÞÌWÙnÛF}×WÌã°&³ù˜&NÐ"m [h8EÁH#‰Eº$ÕXŸÔ¿ì®¢8 DšË]Ϲ璡Ýâé«k†võB dhŒd¬‘ ¨²‹íâ‡ÕâéK†ZmŒ# +p`±!‚##(¡­ +V•‰@«5œP&ÑêÃ⿸x‰‰Ñó§Ï¿ÿ]V‹‰Àå®J‡¬Ø¡‹ÆVÛtm£ßW?'<)"Ð’¦Z½X,Á s³gb0ý[-™!g`]•Ç&+lím]¬š£!#M”F„‹$I‘1¥2äæÓõ7!cÂåä&Ä= üMH¸/Gâ‹ ¸)ã.wSmòB…N#!‰Â'Ä)‹– +NM´ä,fBæƒ_®'.ibã˪ ×6Çuƒ"M þ5òwl¸^ÕY´„xqY¸Úúl©+çÚ¸z¹X’6ÊB,ÿDŠhð)á—2ƒP°<Ïþ}èøÈÇþ«ÿãÇ|„&±ëm»@õ¾Òç³@γŒ5ÑÉ<®×ÏÞ^\MáÈ +®.%%ÜøÑmzǦu̸ŸÜxTíÕÞ¢`­÷š°/i©ê|1+È:-Ð{‹Ž5¤z(+‹Ÿ) VN|ù×[îá²X[´èUÄp…lºÞ£:/¡Äj\äÓ>‚Ú°!$6„ýúÍêú¬›É¤¸£êΔÏ[U-Xj ƒ_®¦ÅÆק¢I殮MH¢ƒt¹ ¢Ò”ODÇCÕžáÚñ»ÌOÀåwÝpsô2CîAË3(np¡{RïÄÃ_ÈÝàâxøŒoËÜNõ´pTmTOš ~Jž ¬#·cy|ŸÛï È®ºÃDìÐù×Þ?¾Ë'u¾QÃp§ ãT}•»ÓÃîB¯ßE“N†£›Ôíd ­¼ÁϪ0\wG×ýú,è?ïÐâ°«8T*=Fó¨ƒÜ$ïñw{Bàæõ­]gÛ F®8˜y6"âsº¹â©n°mÑm€ ª³ ¬`Ì->dë’A1 ÓãˆÕ@“yŸf éMÝFMªÞ¦êôÄgÊjˆ–ä&igÄlŠj†ÖÞg’¹B7%ÚÙò7 w@¾PyX`U2ž«¬5 []0›ö¥ØÙò`Ð3fê˜õ°›zÁ%,’}|­!Û²›Dyˆ`Æh|Œà§nB8KÒ«aäv£¬[“aòݦB8…)–ç6w‰õãË­‡}¥_²»\îPz—A7¨ïÿÖirÍYä¸&ýg@ ´KµÜØ]iЋÒb—[gÈô@yx-R¹Hð×0°ÊæÊ®›)ÚǼ,žmìK6Ž„¶X÷ú'ãù¾±šé@Å<ʇHf%÷YñûV‚^ìÓbÓ™ ;ÍÈL'ÁÂ\8{Yl±gÏäj:Qn0(¨ûÜ)]iãOËh<¨²¢x¤Žö´_?ðálýxõü¸xrÀ£ÎãD>$n,HÅÊwø«äó>ùb=yâ•KÀöµ9Äí‘žNßÌÓÝþ›åô)OSc¦’^õXe§Æ÷‰±é´¸SIªZ}C§ÝíQÓL–™š‘ÑËÂL˜×eYm²ÐížùáOgd#yv¯yÖõ¢´Œƒ(q¥î«ñ_V—¼ +endstream endobj 1504 0 obj <> endobj 1505 0 obj <>/Border[0 0 0]/Rect[63 610.26 103.62 623.76]/Subtype/Link/Type/Annot>> endobj 1506 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1507 0 obj <>stream +hÞÌWÛnÛF}×Wìã©Ö{_îcšÈE l¡Eáô–V2 ‰JIª®¿£ý‰þeg/¼Ivb·(P&Q;—3çÌŒÚÎ.¾¹ahÛÌ´@†æHæ Šj7Û̾^Î..bh¹™1Ž(üƒË A åh¹ŸQ°B¨´-Wð@™DˇÙ-~¿¸DŠäèÝÅ»7oЇ:c9ø°­‹ý¾¬¶èÛªuõ¦X¹ìçåwàIDOŠ4g„i…–ïgs0èݬâ“LÿXgsfÇ%˜Aׇc[V® ¶Ë™’òÑDiD¸°Ö""sJeÌLsbt÷R&\NÞ"^BÆ=6 `¼”y—¼Œ©”½P1Äï‹LH¢ð#â”es&›s–31óŒÁUÆÏ©ODšœäøC}ˆŸ­«ešüCÞ¸øyÝ”ÙâŇʃÒ¥/εñ€ùXlŠ…²Ë_™"|J¸RfŠ–‡ûÉŸ»¿ðkÿÕÿñ×B„&¹¯MU úDÿÒçÛÝ]—ÛûŠ)pƒ®]ã@B†Ë8ˆ»5éøŸlx`°ÝžK:’Î=›µác:Ó@gêÇ7íãÎ5([þ2ˆthþ¬ä‰lû^¥1ó˜x2P'‰¢¯\ñ‚rQ¼˜S Pu"¤ŠHÒQ ËŸ®7“8ÑñkÁoÏû€8FM[´n殺 å½K$Ð9øë=XF†QQÄÊÑ×ú†Åó`÷ð©-U±CEµF«¢ +gæºXñ3ž“Ä端™ |h¾fä(6È Ÿ,±:n€þÁ'èuÈT<¸îPÊ4î¹ûÇPÀÅ/kÔo Ét=è¤U"©Õ³Uäß-^Žì}¸Bäc·#ˆðÇlZÜq1„¡ãÞf¢å·°— Þöè!꫙¡£CÒôó±´Óm ¨ò’ì|ŽQáüäVå¦t±ÒÕq[ûaãí0\ã,Rt±vb€(ˆfÛ¯;­‰¿„ º'ˆü,AžP‡ß>ZvÊÐÓ^Õ7”ϬJP®q ÄdP`°Ðœ'(ÿѦ2m\Ï«z:Dð +êÃÏø¥vÎüEÌ_w¼BFB=*Ólj€$Iè `21ÖÓ~$Ò4°+ùEIa’ÁNa,û…ÔïpµûõXÆyÆ4a㶘`vû[·”íåSË ‹kU…SÝööÄTêu­§ )'ælƒŒkÀ´à° ý-Àꊢ\ +endstream endobj 1508 0 obj <> endobj 1509 0 obj <>/Border[0 0 0]/Rect[220.32 238.26 288.84 251.76]/Subtype/Link/Type/Annot>> endobj 1510 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1511 0 obj <>stream +hÞÌXÛŽã¸}÷WðQšsDR¥ÇÍ\6 f/˜1²ºƒ@mÓneeÉ‘äv~#ù‰üeN‘”-ÉîÉ`‚,µ$ÖåTÕ©"Û-^}÷Q°]·HÓQÆâ,e*b­Yl¿[-^½L°Õv!$‹ð‡‹È4W’iñH²Õ~A +â\±Õ7‘ˆÙêÓâ.xóöKxÆ^¿zýÍ7ì§6WA³k‹ý¾¬wìuoÚm±6á_V„&å4%\±¥à"MØêÍb ¤fíîÔEôÏm¸šË „ö¡9öem:+ëíj‘J®Sx”ò$e\ª<ϳ(ŠoÖ]ûsO^ú@Ù—pø GnAÈ^ÆÙà;&ï¼Jœ…ß¡Šyœ˜ŒD¸Lp«Ã¥™0Y†¿±{.ÈXg< ~j÷ls\÷,L¹þÚ7Æ=o»2\ÂÞ © [ëmDpI™j‹lɽ-‘p¶ü;Lx +1~#¡s’/×Ù¿Ï]¿ð³ÿÔÿãÏlTÊ3ŠA䣥³røJßVûPî{Sû`:ƒ +PŠ‹à×P¢&³áCúû ÖÒfpŠ²ýLEãÃT§£j¶¥¦Éþˆl>žê¾xbáêoXž¸å9ÏSW tC"’”«˜D`5 + +«ï‚Ù~ú؇ipªLw?@Å#h¥¤¨ŠÞ,‚²î½ôÔI—<Ž¬| fâÀ¼ ºþT!ÿóÑ.ûÎSG2PG–êägDðÒŠ^f\j-~“Úú¸ÿ+é;4T}AÝÏô‚GPØÏêÍ¡x¬°4LJʼ.ÌKòÄ<J H­ÁÓa½à*Òòu)2J¾JÝéyu‘ýà>tÜʤDG”—º ¾õ+äçî¸7ÀnfèKlOmÄyC‘F”a«I ¦ä¹õ-–WÍ!M†æ`¶Ô XÁ¬P -òmÎt§×@Uæ1*ê ™sì̆„µf*éÚL ˜ZS¯ t!«¬ eÍzç@ÆÅ =È×^>VRÞ–„9ûùÑÔlC±¡æ?1TÛ]°5ƒcˆŸª/•×Ý…"Æ£—Öç"&'#]ضeÛÍêYðLMüe±M½;‰¸{¢o{ë äÁ ø“m´¨)$1Ú¾4ëOոǟ@ØhÂg.†¢¹'ÉoÍų½¹7·{lŽÕ†Ì¬ ~2|IÝÿ`ZDÜgJΣÌÁ¨ç¹IÈuSwf}´)ms­:±®qù\°¾x%åjJzɪ¦ùåxðÑEKc3/µŽœ†C"56æ=3EWV§0Ï‘ÿ|ŠÔɇÁfÊ#Àˆ«ÁÓÄÑ·™C$SÜè&wmî`Öå¶uP®AÐbÍ–äˆù¼ú´Ód+c(–ofV#ly{dó5¿ÙvšÒ<¦É™­½£€ãÊÏ ÃÌüE‚Pl±_üœÄL K}È®©1À±<(BüôÆò_uÚa8Ý™Æ% +dì ‰Êœ¨½éAqR'ähd:`+‚Ñë¦mMwhêMwá¶lRøûD…A–4í¦¬ÁVìP”mg Žî¸~dżíÀîD%gË( +SœçøËaìž,¸Ôï¶XùîÀ™CýŠ€1=Ín(<(Q9"è~L‡Š³H2BÎùbfä%TâLòÚïAîCÇí´—ŸÅÞ0²B‚áD_ AsáV¼Ëõ-RˆœÌCkBEÿkˆŸ²9vW#E$Çf?+÷ q¿M ¨»ÍÈ;Ž¯8Ýg“uØ„E>Øíà ¥gb]ݶÍÞ:[!.•¹M9—«ŠæŠY‘ûë»ÏmÛ 2j™o`ÉPFøwhüD–\§œ†a±‡-,Ÿwé¡LµöÅf6;)5FMÚ´×v(Zû¨¨*cgòè‰O¥m–Ú7K¤ÚÓЮsq«]ë¡]»… + Ëìq²Ü˜]k<4Ø‚Š[ÓÖÙ0Pì\«GÅ…„Žm‡3¤@4UÓS >Œ·úÔ,ÒAoñ¢éE1fÆøfJD7k"˜îW¸ÌüóèÙR~ºåÓñ6sãmFã­Š"_ßûAÞ«0P͘ŸàêšÜNƒGš9ã nªfwbÓSŽÉÌ,õLhìá•™ )ƒVA¬ ñ³~ôb[wðÁ>¡º²·ÄNã×”P@7“6j@«·¯ÿÃïüîϳ1ƒšæuÞÈ!oÐñÀµ4ÕÊè¬Ps¡’¯R(Î +ó¹ÂaLx*’ÿr`„üfÍ¡/›³3ååxðhêÊv>Åu6Ì¢'<]Óôîts¬íëì]¨(ËÊéÖB‹‡¤'bßÐÊzKõ„Ö&4ÞKô ̽Kºd+Î Ÿ¡¤Öç‹E_:Ö¢8ÌÉ«¨¡9¢Âÿé2 [!«þ5œ#H<ÇvBÆ¡“f<‘Œ'9¦  +—L–h"ÆǶ²Q6§“ó¨`˜–œÍ±³ù<¦Ç¹>Ïóîû·ï^QÞƒdŽÅΰn»¢©´Û¬Ìª+¶]lN¶®—*å:OFä͘­‘4Cqµ¦?ÚYª)xÝ,>Ä°_ÈKÓQØùL¶4§¬M×mՌВ=Ù;†ÐH{ñô¬Æ¹¬Â[4ÀC§Cë‡í„îÂû*1Æky ÞУ}êØC×là˜)0.¹Æü™Mol_ìIqa• ËÜjÀJ&£}Ÿ;úüáT–sŸñN§¨ÃlL˜@ìœû~»:¤r{¡ž­ñýcѾ˜Í=šK)ó«££ÞЉdÓ…äÓõtu|„š¹>`AýýG€ÔH„ß +endstream endobj 1512 0 obj <> endobj 1513 0 obj <>/Border[0 0 0]/Rect[145.02 528.24 179.28 541.74]/Subtype/Link/Type/Annot>> endobj 1514 0 obj <> endobj 1515 0 obj <> endobj 1516 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1517 0 obj <>stream +hÞÌXÍrÛF¾ó)æ8³1ǘÌÑk[©$N­KbmÎ hHaM*Œ¬çȾľåvÏ @ÊŽS®ÝÚRÃéî¯ûûºG‚ìV/¿¿d×­¬".ˉÎ-QiÃj»úëfõòJA6Û•$ƒ?¸‰Üq%‰SÏ$ÙVìÂ3íÙ”ð M6«ôÍÛ+bxN^¿|ýÝwä}ËDÎmvmq8TõŽüP÷¡Ýe`ÿØü–T²d¸"kÁ…5dófµ† ÑL™žÔië_Z¶ŽKZÁ6äº9öUº¸×ÛÍÊhñXn,áRyï ×y–陕ÜÙñ=„Ì¥^¼D_BÄ>¢à ¼ÔùdûÝÛ«—ˆÖ»¢Þ‹] Ô 0¸´¡>Ÿ%€ >¿€’§ +ƒº¨\n)D#h°ò‡í”"¬%R6PUÄ[¤L$ÄÏ ]ÿí—eÆáY]LÖRffœxÍ.L@wñ³ßæ_[Ë øwXÕˆ~ÏPüÌÁó‘Á¥ë“Î +¨r¸ì÷ <<’ +$á + 0¼jÉ¡i‡®¥æÙgGqÏ\2^Õ“„cÒ&B}$|*úg¸±T7è3 …ú"ÚjÂÔ‡)2I)ºGÈA`Ydà l –F†ü>RA)‡e­=Ph|ü,”P°tbœõkÀSÓljcÓjÜäÄ}bÊEë^N½ƒþ ÃÆm†W_ážÓÈæ™{gy¢ ¥äI&aJN„v™›Y¯?7;j(T‡Çìz¨Ž>}bk(–â𰇮Õ$V!ÞI•3îÜ,OÓAb,ø ´ð26>h³Õ-Èý}h¥ƒTI–™’uHÛ¦â %ÜFoŸÁ<‰ÑÖÎ5kŠk-lÉJ 4ñƒNzlÌo?ŸNE2lMçšÃñYÛ»µœÙž©Ç˜ÕiMJYÌëç÷Ë¡ûŸÇb&YËÏr«Õ[Ï­<‰!†=M#ÕiöhCLŒ5´fpéÎè™s9d V.Æ5y–Z#©¶¤;–eèºíqÏÓÇ™L%1‡@ãÐ<øm—¸} waû¸I§&,Ô•˜-3vµç'2å&ÄÄx˜KÆ£f>Ž\ˈÁcþü<4NR^L\‹ ×5ÎAŠËçÜÉÐ N(ŸÂcµÇc*>``€—Š± Í´Œ¬êTÌRÀª-Êݯ4c8Ž)8ÚdxÂ}ƒSVSCC(aí}Ñþ…,‡¥ôcÓ6Id?ÐŽMÐGÞÚ È„q3Ì€ÂX„ØEÌó3ã“ÃÑߦziæí…á»æ¦G›EÛ/­ÂaÜZuiÕrïŒÿV£¯qf¤Çúj4E.à–/m*áÕ·Ù¬‡wݧ”ØniÚÀqÌ™KÓ9—. ¦¦ÏËë²¾riÔ…#ûX_Ox¶´û£úú•-•dN{™IP¤üa6&üÉ#oÔ±XXÏŸwÅQgòó/6Fùæl“ØlÔ _ +›Mß²  8¦(Ê—n­k'×þ¤X0P,èÝtÊJcéÒ9 ôéÀ%Øú¯Ì—sfêØ;8–õp²ˆÃ9Œšš†túŽ!ŠlQ‘þ[júÇÅf㥣 +endstream endobj 1518 0 obj <> endobj 1519 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1520 0 obj <>stream +hÞÌWmoÛ6þî_që'2QÔ‹Õ¢Ö$ݺµC‘x]‹¸(TYŽµØV ÉMÓa?hÿrÏ‘’lç¥Ý0lX‹4y:Þs÷Ü­é|pðÝ©¦ózŠ½£ˆŒGU>˜ žŽÏ4iÏÚ'ÿô(VƧØxÊói¼xТ¼ 14Î0ñt@ã«Á™8:~F¡ÑáÁáÇôª’z¤Œ(Ï«t¹,Vçô|ÕäÕ,ÍrùnüN2î¤Pj¥£ÆGƒ!ò1™›™ê_*9Ô±òE5tR®›b•×V×ñxù*Ž€(RaDÊ7I’ +Fž8l®Ýbå;›p » À½;ë„„°Œ:ìl˜[ð&t¾L¥ T(®É÷´†˜Ærèë‘öa²/5ž[7Œ#ˆGj$^U¥[›®³†d¤bñZÚÜ­Wu!‡°W”+ö­Eë±»|?ŠÙ_lKÒÚâigË2TÎ ðôtLä4oÆ_ïÿ¢Ø¿£õ,f£`"5âxm¼èF:üÃ3¿],è¤8Ÿ7¦5äuŽ 0FiñQúÈI‘OUGÿ–Á±o!m7ÝÌhFqtW6{lº˜–§MZ5rüë&KµJ’‰è{óTœ^æY1+òššyNYYVÓb•ZEÚSoöÞJœ“r*gVxVTuC ¤´Ô ºPm‘h"´¦!ž-íƒdcð"½Î«úëöö«MÚ]{+[RÎi‘J?D ®¥N0䪦uOi& +(íš}«Aã¥4sâµÔÆ[œAwX¦5ŠÚ×èÎáˆâ¦E•gMZ1c†$°“€ïAŠÞõAµ6ÕVŽQÃñ=Œ _ hšÏš©¢UС²ªwÊ7ãkq‰×)ÊW$x†bmç¨l±0í¶£LÒrdØ[ÚN6h¯©\mxÃ@#NY”LžH\¡ÜF±|Dt# H¦„†}‚M Vëå‹/ñÈ¿e–Öw°j> ?Á<Ë'Ë}ðc›û¦bÛÞéŒFN_³Û‘Ú’¿€uMÉÄc˜¶™ºå6JÆF‰Ë“ŽÇŽt]7*¹¬·3nch¡Qĉß`§sŒeÌ®¤ÿz +Ôtü)]^.n4î‚b•[·¸ÞØiµq<&$" ]¤|¿â„Ë¥Ÿ`þI2„=‰êy'!‡VkJ)K¡Ál±¤w§×&Åbñ¡ÏÆ6«sº*š¹KØë˼cEØ!QÜȭʶ泫q•f‡.Æxa‡‰ +G½p6€×ínØí&‘»6ð„]{|r.÷-yÎ@N›kìå‹Ã§4±'¦Öô‹1Öqè{gì¾ë7Š“ž;¿ÇW‘#î0îÂnÂIú3ºÄQÚ¤¼ºnçI¿Yã½ö-œÞ¾Uåõãݽ¬\a¥ ›§ÕÞ¹âú¸»zø*ð€«7àà€:œçÙ³‡ V"=}W¥­«Ë¼ɉ°/}ó„6žÇ²sþmû[Ô—€Ì&âÁØžXÓªÄrC7£·ÏÒ(°KîFy§ +…Íçbe›õUUpñ‡œšLV&²÷J[ɶŽ­òf]­H÷"vówfÁ° º´ J4îÈ!™œ7é "G;/C'=‘K„¿Ì&¢.>ç%`esæG…=Ýt  ²Ð|潃òº©¦ëK8æ¥Æò6š³.ê dËÛ5„ß<°Ž2Ȥ} +ðÑ>?ö¹8Ð~KÑá÷ÇýߟŸNÔÞ’˜U9[6ŒÇ‚q.€¡‰â÷ñÿ·Hhh|>˜}ýÀ¸OüË~ʯ^ Vá­VlSb}ÜòCÜ=Bwgã²óf§(…Ê¿Õ:‡[¥ýùjZd`M¹ÜÚ>€|§Œ16’S[@fa¯aöõ%ìû§oÛaöõÏUÌ·_²¦ëþ-cæ%ÿ¬Ã­HŸ]Á/WͶ ‰è/¹ +0ÕÜ~ +endstream endobj 1521 0 obj <> endobj 1522 0 obj <>/Border[0 0 0]/Rect[145.02 202.26 192.66 215.76]/Subtype/Link/Type/Annot>> endobj 1523 0 obj <>/Border[0 0 0]/Rect[63 549.24 98.28 562.74]/Subtype/Link/Type/Annot>> endobj 1524 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1525 0 obj <>stream +hÞÔWÝrÛD¾÷SœKíoö_Òôª¤ Jé$n¸HFµeWL"I¦ô‚§(/Á[rÎîÊ–”¤-í0@2#ÉZéüß·’°™}u.aÓÎœ†Td`2Z@SÎÖ³/³£S ë™T ðO2K¹VjÁ…‚ÅÍL .L®a±Ä ! ,ÞÌ.“Ç'§`yÇGÇÀó†ÉŒëd»iŠ››ªÞÀ“º+›u±,Ù‹oГž,×0—\: ‹Ç³9$7Ëp¥¦hØ\¦\%š³í®«ê²õ¶N3krÌÇqë€+ç9p“ aBfNñÔõë˜2Wf´Ž¡‚h¿ˆïë‘û*䀋&듧ȤÙkBü®`Úp›¼%$›[¼LÙ\ÉL*ŒY1‰GîJĤÏ’çÍ6Ü[í–0ÇÓä‚ù•2ÜoÚŠÍ1Þd[Sq}º‚꥔K©`Kc2Äò'³Ü¡OƒG!S€`ùpžü¼ïü‘ý3VÿÃù.hÇ3êˆ]n‚‡ÏôùèúΪͫ›©“ÎʶDhÍeò+Sʤ\ñ~þã§ÊO°CÜ mÐrž»0Îtðu)1H D¦ bøøwüõ sÉñ·?œ_%MÙ^±‡ý*nÚÁäóMÙá³»¦ñð÷ñžL²@&áÈIÁs¥Ö“uÕµlñó„ïØlôŽŒü iò)ÖÅ«¼ h/Àb …¥B¶h¡bT,‡Ô<Ó¡{bŸvòâÙ“Åù(øŒwœöÄDÁø"µ]Ñ•7eÝq  Æ.R.3û7]˜>7š§± ¨Zؾîªm]\CQ¯`YÔÁãÇ(i£ýDªhêe »¶\Á¶¾~‹‡e Uk³®®K&-7 ‡S†\o’­7÷¬ħûôcÞ@û¶îŠßÐÖši$Z|X?£7xÆSAaCñÛÝ­Ba/Œ98‘ï+–âynõD¬<Êõ´%:ÂwçZòÜLË#Õ`Úß½`sƒ4KCôG*š<+æ -Wp'ö’È:ŒhžÑ²µz/‘1¦VÙçìÓ0£ž“¦ýÓQížžœQOžõfWlJ„þšŸ¢(PeËzª¡Ò<¦ƒÆ}î +¡£®2½§f„Ÿêò.tÏ&5ÃC;éVÆsyË™5‰»»Ff_5´»å²lÛõå~òÈþÊ ¯ãÎQY÷Ø.Wåú͈Ãؼg Ù vHÙo'²žÆ ¢gûI¸:Ãq~¨åd{®¹²cZ NÎ=–Â+wò6%%íÈBAg_&òêDŽ5¹J‚JqšsÚ/ÚÀ<žùƒ}×ÊyGXã2Ù¡Üz$í´6ÊæƒÚ$WlÜÀaùµÉ‡¼-?­!>Ùì¨>½ýW–ˆRÕ‡2i²'LËHÛëo?fÒEº;].«u… &ô-·5S©Å“Õ‹)Imˆ.ÚªŒ–—ݶ ó@;7s5›èÀ“i· ¦n¶Ð4í¹¼é3ì<·®*b[Ì#ƇôpÀȨXDÃmáéäM¬€´ÈÎï‘VåL„ÈÍy‘á.˜´«”HÍžè[†Oˆ–'d2ì  +„Ø’Òƒê^°ŒŠ†Ä¤i¯ŠÆF +L¤u¿#kÝVà‹“³ó'ß?µ™ù.>QékA„‡èÁ/õ >z†ÙĉpSþ²«ì}Áí-éí?Žzïåú#$8훌ßOJÜ/u—‰j‹z;§/©ÓÝŽT~ÃèVÑyÓ·Ãlå^ÔCµÚwnXS‹Æ•}¨²2N{ë–#•„Â¥ãO?JQ…'jþÎÏ~ùYÛ µ4–”9Ž§øM›rg‚XË;ÄZæŠôK‹ÜÀò/êõœaJ­÷¢a"v@…ÿ?Ù–Ø_ë;îK¯Ü ÅAzF†6aòÛð {ûN’éßhýÃt0ÞIOÕ'ð/w_ôß +endstream endobj 1526 0 obj <> endobj 1527 0 obj <>/Border[0 0 0]/Rect[502.2 417.24 533.52 430.74]/Subtype/Link/Type/Annot>> endobj 1528 0 obj <> endobj 1529 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1530 0 obj <>stream +hÞÌXÛnÛ8}÷WÌ#…ÖŒHŠ¤ôØm“E{)#ûîƒbÓ‰ŠX,9i¾cûû—;CR²¤\Ú X`QÔ–,j.gfÎÌDÀåìèçS—ÍÌ(°iYn@¥°s³õì§ÅìèD€€Åz&$¤ø¿Dn¹’`UÊS ‹Í,E)<Í +‹%^¤"ƒÅÝ윽;>Ísx{ôöÕ+ø°KDÎÛ^îÊͦª/á}ݺݺ\ºä¯Å/¨IMš+˜ .Œ†Å»Ù’še¸RÑî’¹°\² +ÅÀÇí¾­j×xYÇ‹™‘ÜôÈpm€KUð,OÓ,øæÝõÑc.³ÑC„(ÿîá(<àÃ,ï|'ÄŽÎ+,ü­LTÆ5»™Šd®ñÒ&s)r!Ñd™üÌÂïšüÈlÎsöa· ¿­öËÃ-;Kü~ß5U2G{Ù¶&l½·)Á%¥±„ÙRD[Rlù'ÑÜ Î ?Sa‚äÃ÷äö©ïï<ößHýóQP†çƒ4F!5“røAo®¯ácuyÕb0kà£kV€R\°ÛDbM2·â]úÇ ¶Òg°Á²}¦¢ñ ±fP;Ô,ÙŸ’íìô¾nË/Éâ3¾­ÃÛ/L(º Úp•‘|ë _>gUÝÂÊ%†­ïÎæî¶þÄZŒê4’¦ò3Â'éÃ$0È/ß™qüMQ6Íkhœƒ¿)¿vl®S ¶@'qüâÆ'|Çê‡ôÖØ4–":)”=zQafXƂ㊢Žx€¯èHŸŠYWÚæ-YaúÉ,Jþõøäˆ`úµ¬/÷å¥Ã>…q‘7N0¢¿sõtâ/ò:ê$÷=s6$!Ÿž}± “Rò7J¤·^>l, b¢Œ5-ÄJQöP)2ò¾B}ØR~ù:qøÿ®j¯|ÊŒÓh‡y0 Ò•[ߢ¨öuYn‹Zo*óšÆŽã ¨§õ}\¯HÆù·f/ p«œKó ¬{ÎÊ‹àxG” ÆOa¨hB¹%ŚÄ'ìpPi=7”˜’‘x‰WÐH”¶ÂËöÎÏ<ÎÕaã`¨ Û—Ë«@9ælôÀgõªº­VûÒâChÈ C! qÊ0bœBòãäd­>dÿÁWÛÛÇÆ‚®­ÂÁþ½Ü¸ Þ¡Ðiy<¤½ð(÷Ú¡hŒæ39Ò÷Ú®± Ô>VÑwTOÊ*ÔUǹôòI¢hPØÒ °î¾ Ë +Vnn®±Sn×R‚MÜN=å=GøîºrÍ’,eJuq¿r;Úÿ넺~àÁŽ•4d«’´Q*š9Ÿd@…b•øäÚLH™÷ãñ掤 {‹Xõ,Çf©¢Í1jþkÖ añ3²,×ù³Öbï„âR©÷Š­ÍŠ)!ªë\T‘1òD¾X ZÑî©AÒÒP'ý +Óç]þ輑Ž2n”Êf´qb!®¡Ù/—®iÖûkã¹X¶GïýÎcÒ¤Hðô²ßÂÛPÇ‹~ÙÏÒ#ú ©£ ÖLúÈpÆ“ØtŠ<Èœ›ž¸O;âFBh  í ¦C¾5/¼dG2€1íF@à%6§=bL<ß¿táüÀÕÓ;WßO~xëZn÷~bh`’êv‘—/B¾§ycÚo/}RÏѾQïi¿@æ"9È:Y1àáïM,´µ®AUõÃ>€£¦Ð/_†»š(¦éÉä_¶`x< +endstream endobj 1531 0 obj <> endobj 1532 0 obj <> endobj 1533 0 obj <> endobj 1534 0 obj <> endobj 1535 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1536 0 obj <>stream +hÞìX[oÛ6öè_ÁGj›XÞDQ{K›tè€mEb´éP¨²ìh°åÀ’“æ'í_î’ºÙq“n°‡bƒ#[ä¹ñœïûXAV³?_ ²jfF‘”[¢­!Š“]9[Î^Îg/^ "È|9’pøþ›2%Iª8ã’Ì73V×™"ó¸Ðd~?»¦ç¯IÂ,yõâÕ?·»HX¦èvµË7›ª^‘7u[î–yQFÌOÊ{J˜"±`Â$d~>‹Á º)ü“L¿ßE±H™¤˜!—Û}[Õeãl]Ìg‰Î ÃC˜TY–¦-çÚgf$KM÷RfROÞCE° ʽ„Œûzd® +—ÚvÉcd" ٫ćøk)Íú@$QœÀcÅRX!!f øÔþwƒ‰èÔ2Kßî¶þ·Å¾hIdXJßEîMéß5UC¼t[cq]ºë%¥I±`KbáÂÇòW”0>5|r‘â-¾žúûÌeÿÕÿñ2w +Ê0‹gÀÃ)ps0ÿÒçÙzM.«ÕM ‡©hC.˦„PŠ zIJZ.X×ÿ¡ƒSé:ØÀÜ´b™õSíž`¹I5K»¶æ6]”Ëû‹zñ®Ê›hþç0¦ à>àÆnJ]æÒ+…í ioJâ $Þ€†–õÅâ¸Ü{{÷æìjâF2ÝWTº%¤ió¶Ü”uËœA˜#I,™H{ÀH»R·åÍräÞt†“Îp2ø/¶ûº ˜ ãñ¡úÑ‚`nË¢ZVå‚Tõ4?˜Öd¼S^°¦Wm¾kªš²4m7Z†_Óð‚’‘‚¶˜>&ß”$÷…΋vŸã¯ëWF‚Ó}Äéæ“[º‹$%Û% ¸âEÆÄ!ò&Ó !ÞßÀÍ$dÀÐIȲ‹Y†˜wÛ=b—¤-€ž¥Uí¿• Ù7¥^D1|þ±ûïUƒ»ÐýwhÞ6–—p&´v[šƒ$D´8Qu ÷_žÀ„$ÈÏMzpQ]C)Z²(#Cûû@ï¶ÕâC²:=© ·ÌØ`Ûíù#˜ÔŸÓ„X'«­ô=aXce`{¸ ¿¶ ÉÉ]•c¨hØGK¬º½I8ñ¦@j–HÕm[QÁh¸ù›ôþŠùwBGà"/n\pú‚“ô^žràç =ÉCOd I±iÓâÏ¢V0~y½ðN±Cà`q€ Ê‚A™z¼(aõ}ÕÞL¡uÄWÝø” +i«wiŽêö¯Kp x0ö0$ÌæÞ#ó›aJ¡:)ˆ“}Ä\y>…sÈXªF.1@„Ñ_¸+#%èg'À,D*V"Õ.”t¦„‘;¦.ã€Ã€fmµHðxTæùkÒWMgOÀ¾>jòÒŽÐ^0¥&öEŒ·£ªPæXLJ‡\Èc&9Ed}·9NU±Þ/J²…ú#šƒѳZ8ªèa«Ž_¢VÈè6‚õzdfô 9£¨ÊÉ6?…îIOšæŠœVèëøÝ ‰]3¬êÙ!Vþ6Jˆœíúaµ­; ã6I,–Åc 3.¥AÇœ +MYÑÇõ¥Âº¡Á»p.ËÂuƒB¥ý ðÖsÃèV”h|LNŠ¯¤ÂA‘Û|”&S¨•:}¢Æ*±ýë95Ö—þGTÆ2À6¯ËQ¡U‚ê•XŽ q:I(¼ÜLG±güQ¢x’ÚNù,vÜõ•ú ŸÃ§2Ëš‹ÓŒ`óõ꜡2Á{Ç‹Û9¬-¶5`U‹oòÝ÷ZšnH¥”Y¯½î»¦5¨*C{fí¡Õp;&3 + >Vꕈ<›‘œ¼¦gp9VLÓÕ¹¦™†ÂG Ä*Äq@0¾™I-ÇxkL ó‹^ân„ |¾«œ7hŒlxƒ"Ú3gJêö‚ Ø•dUÖpȱHrA>E’Ãóƒ·§˜âÁÒÑí-PâKîä(¬²°çó%Þà{öŽeÂ|Œ¢»ô»ÝkŸ +B˜ñfAúøýxÓÅ7âªì ¬»¿©kQ\‡¬Pn:»Å®Ä|Ù“M¨Û÷è!¯?λ“V u3ØÒáT´ ëîV<óÂ+…Fú’ðB’qÕ³¤× ´ü'*¬××Ͻëõ¨¢{I3ÑbÐ^Çz9¦ðž| ÈÄÑ¿%}SdßÙ³ãß S8ßZ +endstream endobj 1537 0 obj <> endobj 1538 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1539 0 obj <>stream +hÞÜXÛnÛF}×Wìã2)7{á^ø˜&J"M [uQØEÁH+‰…Dº"[ŸÔ¿ìì.I‘º8Ò¢Ea@’%rvÎÌ™3Gbh1zñöŠ¡E5RijPbmìh>ú~2zñ†!†&óãˆÂ<1£‰àH J(G“õˆBB“T É^P– Éýè¿¿A’ôêÅ«çÏÑÅ&b†\.6Ùz ô®¨ífžMmôëä8I„“$(f„)‰&¯G1tÇLÃ+±ýó&Š™&ç]–Û:/låc'#ʼnV€H©á"MSDCi°y¸þC@Lx2ø +â.þCÜ•#õEH|˜˜»KŒÉ¼!óH$Dââ”E±„—:Š93ŒCÊ#TÒ(Úø‡f´.ÑÂÀ7§S0P RwÙdˆÁÓ 4Û!Ñ a¬ƒÜÕ£hŠ–å ˆó Ò )§–oê€Êy›*ªòuæìñQÚÐ]- û¬‰×§Áptˆê&@hÔ`…‚¨¼Ë¹][:‡ÍËPeÿØZ'LjÕï†öÝ4 h§¶a&wMƒÛ˵­A>@/R4ìvNkZáÝkªÏ¯ d»@v¶€,בÛùxÁˆ™sC´é£ŽÍŽ¸ËÜDà H¹ZÙ•ƒæÚûb’ öçÑ÷±ì!÷ 50öÍ­;Ô³ óØ¿Á`²JÈxfÀ‡/<H^,V0.²Ç—óΑÃ^ì;GÖѧgœ]Úiýˆ_Ñ¿Âü-Žñ„e:¿/ì"°C¹]=4‹Ç‹ج¿vQw^-êÓ¶Ò =JЇ'y óî²'|Á<žt˜½ö$‹ ß“ÿOóDIÄ ÝöªNØË# éû Í% ^¨o#[䮻ꔅ ¢¯T?ƒö—‡µÇË^öE›  “CœeðøÓÍ&u”ø¯ÉÜX{M§,·ø_ò™a~wÎbîýÙÓ¼æ)¯ÇøÑQãÉè/›­¤A +endstream endobj 1540 0 obj <> endobj 1541 0 obj <> endobj 1542 0 obj <> endobj 1543 0 obj <> endobj 1544 0 obj <> endobj 1545 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1546 0 obj <>stream +hÞÌXÛnÛFú¨¯ØÇemöÆ]²o‰ã)r1l5Eáô–)™E[ý£þegvIñb©±ã´ ˆ²HÍÌ93sfV‚,'O_ ²\OŒ"–GDG†(Nªt²˜<ŸMž¾DÙb"$áð."²LIbg\’ÙjÂÁ +ã:Vd6‡7\h2»™œÓÇ/IÈ"rôô觟ÈIˆˆ)Z.«dµÊŠ%y]ÔiµHæiðÇì𤼧)2L˜Ì^L¦`ÝÌý;Õ™þ­ +¦Â2I30CNËMéÚÙ:žMBÃBC˜Tq¦#εGf$³¦½™ÔƒûÀ¢ÜM@¼ã#v,Änꨑ‰°A¯BâÛ$Pš…tK$Á4„·6˜J 1Ë@À«öŸGDÛˆEô¤*ýg—›yMÃ,ý¸;©ÿ¼ZgÁâ¥eä:¸ù’ÒX$ c‰›X¸ð±ü„Ì€O ¯\XB¼åî:úóÐõžý7V¿ãÇ\”aæ€7YàfÔôù,ÏÉi¶¼ª!™Š®ÉiºN¡”b‚~ +$4%M/Y[ÿM[é*Ø@ßv-úF‹Yl|9ãh_cÁˆîZšCWŽáÓ¬€zœý _7þë’iî 8¸¡‡K·¹¨ñ!˜âN:<'Þ }â,M³$‹—c7½¸·—Û«ÿÃËö>^>©;B ô”…•—.góœ>TLÓåf•õºÑ¾&èdÙ*Jªw‘'Û´z—¬RïHµáÄqˆ°´Äǹ7vγE–®I}•’DHÐm 9臠Õ¸¹ÊæW¤vŽA‹"0‡J‹à¤¯Y°ñ)KÈ2-Wi Õ&Qp·Á^I^¡A›Xvš6ˆ™6=ƒ»¡Ð(7VñΚÀ¢Í@ +-…€Y¦e/• \?!Y1Ï7—80œý©”L…aoDð‘Úá7ç›ÁKÓÁ†PI•×ðÄE ‘N7*7•)A¨(¦gÚp>ÈQ+üÜ ?½ÍÉ6'·W¤­žýéš6ßpsMš†îé‡X ¾c +˜ ï!õ<…ÀÓçKEÚLÝϤmm· m®›ê¸t•Áým bTŽ^ª@cB¤g_¸.¡WÖ s¿ïBìÂ7:2Ûy¸Éê+ü &ué›Q†,¶ãñnÛ¢ëEð¥¯K³eV0XȪ\×dž¬}Ý)ú¤‰´÷ ¨eÜî«AoÍ‘Ì“´ZMK¯¢_®.r8ÓIJ?ø`œÓ× #ÈË5Ý4ú¸…ø€¦ÊZa@Ê%nV•ÇKyíµÌ0ïk\O»'èè즎҈i}0[ç´_y^Âd„770‰cŠÚ׶þ¹¡ÐîÛñ€†(ncÜ1úËlïùN +Îû*‰Ó„}ƒ;@žžºÀ,½9*óv±uV4³˜hŒ‡¯]o;’GxèS´v¨S>X‰®“%¯dÄñd¦ãÏVêˆýÃn´n„p%À}ïHýÅ®Eµp˜È< ZÄ1Þï»ÝÉW;`{-òÏAÝaÿ^¨wÏwÕw¸@à1_,ÖiÝÇ +©‹¤ §'V ÷GÞvë„Ý×Þ®ŒÌƒÊº{~·CÑ +—fáò|hü qÖ¸jN%Þïg[F¡«qÐ#ÿ­ÆC¼ßpOÄp§qñE cŠÉVÅòÙ¶¨“ÛᨻK–Œ˜j°û3Q‹=0´]}>¶‡d†Ø;‹ÓyYàV_%Õd¸qÃqCÊxt0;§ŸðGšœnð’§ï¼®Ò¡à[†¿ª8âþ[38^–›‹<ž amæn·èðhSãå,ûkä9|iäHJÙ/u¼ýšŽ¿Œ|XŒÁyý6u—$ãr±uVãõBGâP<(íÈ£š»2¨ß¸*€£ò8Ñ*þ +1ÔŽ”뇒â÷Ï'‡øèâýÒÚ¼Næx…¡~¸9P3”Ð" ;„yt(Ûï'ÇÊóÒ…r\̇!ÀAÚðC? EÌZ+Õ°ßÀ¯Ã;ƒ-ò[à½_Þü|†Faæý#ÀÓU“° +endstream endobj 1547 0 obj <> endobj 1548 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1549 0 obj <>stream +hÞÌXÛrÛF}çWÌã bŽ13¸Ö>9Š’Ê–s)‰±â}€É‘„ hq±Äý£ýËœž€Dk­¸¶jË."1}=}º’Ý®^ÿp-Ùm»J4KÃŒEYÂtȳºY}»Y½þ^2É67+©Xˆ¸È,Z±T‡"TlsX…"Â(×l³ÅM(#¶yXýο»üžÅ"c¯/¾ù†ýÚ2š×·Mq8”Õ-û±êLsSlMðÍß¡I;M±Ðl-…Lb¶ùnµ†@R³uwú$ú}¬e*/!†]Õ}WV¦µ².7«D‰4G‰ˆ&”Îóœ‰( ÃÈùfݵ?Âc¡¢Ù= ípx Gnƒ3üeƒïd˜Œ½ó:vþT:1?2Ê`ã6 ÖJfRÁdH|FîûœüˆÒLdüצvßíúmÇ‚D¤ü]`1îû¦-ƒ5ìåuE±µÞ†.¥’”âE¶äÞ–P:[þÄ"Ο¡Ls’O×ÅŸŸ»~ácÿ©ÿÇÙ,èDd”ƒÐg!Låð•:ßì÷쪼½ëLÍ[veZƒ +ÐZHþ)P¨Invb€¿Gpª,‚”í3“4™T³-µ”ìíoP¼nûƒ©º–ùŠMœ$P õJD`k*‹«~o~.&ØüóTßRäxÔXàu¸úæ×÷f[Þ”¦eÝa$°úÆÞ¿Eá;i±—¦Åt+)­æï~|sõÛÛË™òHH(?=>$I%öt»ojÔŸÙá/:œŠ8œžY°/[_ÛÀ¾™m‘È´;þ7«ÔI¾bᙄ‚”÷AÈÛŽ}4.ôkpK4aIAÔ5ª(æfÀŠxbÆóðÅY•ú³ü‡ËŸ/¯Þl–粉årŒLâmG`ñt”öÁŸ{Ëd’ÿ•ÛÖX䧺ü'#UUw@ïM`¡nÀœ’7¬«Y1ÀÐÛšˆ(æ)}½J:(<”Ýš ++–IãøIVŸŽ êAýÒ–zµÒâõwþ‡9"Jš?àSòš:§¸¡ k(.æ·öE4+;‹þxÑw×å¿ÍÌèøä«Ã€÷É‹I<ÄßÕîq&Ä»³Ö"s…+ãY²lî³3•Û˜õeƒBz(wÝûÀgZÑ ³1ï~|pÑ|<§>^äK ùRö̇€ÕŽÝâÈ¥ªx¢)>é9ž×3)Æpè¥Ò#j<m=º|<™[pZlºUø&d{¤Ï©ÙvEu»ÇÌ"©?IŠíyþ±î~2]±[ѦyÎD}Yž}¼9¼x*æ¥péêû¥Afä<š¢ÆF5ò°ÑiòlÀü$MJ‘¦ñ‰!bÚJ¤PâœO +BÓÕÖØiðÖæGÒ¨"ÌPA”áò*ÐøtÉB‘É2 3ÏB§lç.Û9e;'a).¯øÉ-Œ™þÏœî„ÇJ„(Í¡¢‡ÊR~æE{i÷H;´õHrÔ#[t +Û¥{û¥k÷Íà`-Û$ Ï|ÉN…AbY³¬ûvd;sƒ‰zÇÊŠ´*ÔiE§ aܵxĉÇPOã7ŒÃR9ùeUve]ê4¿²‚µ +ô>`ì¡è¶w6‰>&( +7(LW±;ú©êl„}8&ØÖƒl禈Yµ¡A©lR’øÜ“ +©GLZ2âb^'kLe‘<;Y†»/¶É¬ò ô‹ xBÕSICåÑê5Ÿ²†ª‹ž©:’IÆ\Æø=Ú¼I«øê0ž&ܘŠøЦ7¡0XPà>{Ò­þ¤GY˜¢¦h{ª{ôzE«b@Ø(Œ)?ô««ÚÆj6…¶Zm±šÝ­¡)¡óSÆó|Â!§!.õc†¡ÂRü±cÃñ@Ò¦µäåŒzÉ<§ÓÖõmÝ]VÛåȽ¨ûž—ñ2bÜÔ÷_mÈTÆÈè Íé?§KùŸø1•¥õHhýd·]Á÷v_ Ø'¢ˆ>ö=¤Z€D4'Þš‘úî$íóáÓf“øŽ1õÚ–§éÄ‘HB$¡#˜7SJŠÓ%¥©©s=Žó»²E›ßvÓ@¯œ™ùb^‚˜æ¾ç`öl"Éœ[þËÍ`}poNr¡£“œ4÷M‘sOÓNã¬3íà P¬µ3vœÐ7…aʱVPc{ ©ù •!ÇU,ÏÜNiïè J˜‰$rk¥ J~xWø߀S¯jŠqÊ.ê=›¿šm§* I ĬýBí: eïÝŠÑ« öÉ^ Çáo\¯\­^ýòþâ—·3t;l‡óÅ”T)Ÿe†lv†¶à¡­Ì•aYÔ} 7(=l?€ºJùÚ.O œ;íš‹íGæOÖ’³&çJN'OýÃTuO]@¢zÇZjïçÚòzÒð·EEãGߢìë +ÓDmk€ê–œ±]Úhø´!ž$%TÆçöçë™C ‚3Å>nô£?Â’CoEñXjT|.[×Ǫ+ç»&ŒÄ½¤&ð­y°S@ä¶9‡ò á' Ä? ¯Š…‰^Ú…ôûa‰pϨN…y2²±ËšT¸Ö ï»+ºÔí±S‰[ _¹õ3¹Y}^{©÷ÏèuåC0 ÷¬œÑ¶'åì‚þ×Þ1‘]ˆÅaš§DD/Ú_œ˜ rk1BÉϾ©òõ²xUÕ>š†–âͦ¦ÍôÖžê#E:±lòN{[ïûCÕ:º>`À§ñž³þžM™8³4ìH¬=¨.7«?œÓ’; +endstream endobj 1550 0 obj <> endobj 1551 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1552 0 obj <>stream +hÞìXËnÛFÝë+fI"Öx^œ!—Nb)Ú&°ÕtátAK”ÌB"‰J¬Oê_öÞyP$e%q’"EQ$ e‰sßçÌr²¿ºád±iI K‰J5‘ŒlŠÑ|ô|2:¿â„“É|Äaðn<5T +b$£LÉjÄÀ +e*“d2…Œ+2ù8º^^^‘„¦äÅù‹gÏÈÛMÌS*£z±ÉW«²Z×USlæù´ˆÿ˜üž¤ó”PIÆœrÉËÑ ¢›©û$¦ßÄcn¨ˆJ0C®ë]SVÅÖÚºœŒ•A>š&šP!³,#T¥Œ)—™Ôèð;¤L…êýÁ‚Hû#dÜÖ#³UÈü¨ÒÜžºácÿŒÕñc¶ RÓ{À|˜àá}^,—äº\Ü7ÐLmÉu±-RR}ˆ€2*f4Ì¿Ÿ`#ìkÀí1¤%ÍR‡jû ×FQsÀ4cvªÆÍŠùÇweÿ7»eñfS.ÊŠÄ“?È=pšRHmYxt¸RX즈Ü-É+â qf5€&Ö¢?=Äðæúõ«×¿öœJšdݧ aùaÙ6yS¬Šª!nîöž cÒ¯e'ï^_\ÿöóeÏ‹¢¼ç…Öq3Ç^dQÃe?”9%“ûb%çbýÖ,…<ÊrksĹ0@¡È¤æ˜HEj×Õ리«| M˜‘)tâ®ÀÅ)5âÈÛ¸;Ê»m1#uµÜÃeZ¸œ æl g›hJuÖ1ÀÀ2ë¸È§÷XlJƒµé·¥çžË^onz…T†Âtû³A]¨[åG,€ù¡õcIÅa›1?7ûªÉúae4ÓŽþñŒxh‘v ÄŠ*\}ëa먔÷%(| _3Ü@^Ž¢šæüè’bÖ“Í)q¥»ÞÌç@ýѶhŽð¢µlkà‰ÎÜhš™$û*‡û/qhq½{åíA“ž¥\‘o£ (k±Ãîl8|D°£‰ Zia+€Át›±¨.„£~jT·Ãa©Ì&ÕÚð3„S€R<éÏë›åGþf]LËy „…óú`]w#ÀE‰ë’<82ðx=·V>”ÖBF5Î0ZQž-s²½Ï× mx\OÉó=)‹-óç $x´[6gGCŽáúˆßØëÓ6M;@UÁ»L=Ök$k˜‘È2~zîœ%Œ–ðLâ$Æ¢te›¨ù‚é®!ùA€°É­5ˆ¸K<¯’ÌñÕÞ–×ÕtYoQF®ŠlSL›¼Z`b\µ]‡¥:ì9K, %EA†€"sŒUu5ÞÞ—ð÷¬“pO†R4 <悼¦õj½ƒ•g¶³6'ˆqe‰2ã¦?–Î`e'è%î‚›ÂÏŠ]ǨL¡5·©AOîb}ßÇp!ùl†…€L¶Ð˜X$í\,w´`85~2NïýŠ1ªSÏf,k祥4EËÃF"²ìææ»/á{ø—FúƒÂ÷WW7—“ÿ¼øò,ÿ?PH€Žü¬°Hù:àyÝà¶|jw†„àyB¤4Æ|øA~&õú‡äû¿ŸWA¶&p,Ÿ®ƒLANÂà<¢„4UÙ“”Ð)3Ÿ4¢V°;O·Ò 9íf‚2ãU*Š³ ”ÉN‹³V{a‘©G˜LÁtX}æB3wuÓÔ+§8êµ×Ë<– ÙÇšÁ·2pˆ6VZ˜Èò»Û„ñÏáŒÒ Fùf¢ÄRž“.ªÄn)]Ç™sœc»«450uH´¬fź€KÕ,÷q†Ñà "Þ¾ +ÚV ï!J|?”Ç®»e,áÖœÙwF¤±·{N*n`Ðë.K‹äSRÓôv/ã#Л؈¡Ø*H×ÕG·C4˜õÚšÆöÄõ裸ôâ:ÓSA¿éP´ƒxƒÆBçOËÉV$º˜¡/ÃýÐJ\?˨$ÑJÛvÐsʵ]aÛ´}û£CjÑËšû Ô%*G"xQûda”ÍaFBª‚yõ~˜$_¯7õÚ6)*aKõQdé`ë…Ê)ÑñØ¢ó|?`9{F=0‚:ÌÏ€¢Ú7Ä©êlõj®ó¬¬gåð8éÕTr[S(Ö”Û¢ÞˆQ QÀh{– Ç£BU¾Ê8_ŸÚ5Jc£t´‰•Û™…T;pÇ€ÎöXÕ%ÿ8%BòG'$ä +¹ã!'Gb'’wqâke¸€:½³ô”F~¹ýºÅΣkâDtSá½ãß X¯´ +endstream endobj 1553 0 obj <> endobj 1554 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1555 0 obj <>stream +hÞÌVÛnÛF}×WLý´L¢õÞxCÐGVZ·MjHŒ‹Â*‚ µ’ØÈ”ARqŒ¢Ô¿ìì.)‰r\´MÔ†IšÜ™3sfÎìrXN¿™rXÖƒHBÌPI’Ae‹Á‹lpú’‡l1àþâ'1•bÉ(Ý z¡L¥²WÝ ®Éùø%„4ÑéèéS¸¬žPI6ËJßÜå.ÊÆT ›à—ì;D’)¤†œò(„ì|0D‡&÷Orïú§*ò˜ +R ˜l¶MQšÚùgƒHÐ8ÂŒ"F@…LÓ¨JS>7—®ûˆS¡z‘»@º˜ðŽŽÔ‘~TI—» Œ‡mò2ô¾ÒT4$÷ †!>ÆÁPð„ Y¯¡Ïm*NhB.«7ßæ ÉUà¾ÿ¾ª‹`ˆñ’Mi¹uÙ2K—Qlù²±¤m,ŒûXþB!¦Â+ã1€÷¼¿ýûØýo.û2^ÿÇË\dD[ÖVEGrøL̳õ&ÅrÕ`1%©abjƒ +’rò!¨Ibæ´kÿ¶ƒcá:8BÙ>T´¤iâEížpy+wmÍ|Øs³¸»*E´¿¶ÙHµ]›Ë@ +lÉöMƒ*,¡/åýаÎUŒSÂzw‚éôâQœ˜+åtç%ô^0º0ô¼2kå#—gY6ž¼²_÷xŠ +¿nxX9¨ݘS6P”ÄY¶X<¹ÇÀÕWg“7?ŒÜó4<x0– ¶$ Ù¸TBÚ%]g8}’ +ƒùPh +ÙÊô£ +©ˆÿMæq7ăÌk‡0ÄÙ¤¸³ñÃtDâÌ6·M±)õt9‡\—ðÎXÛ„Æâ0Ù™í}[›9lÊõ=^r㩈‘ +¼T¾¶ ÒOTŠ¥Øè|e±ujŽ9‰úð\î‰ÁšM{¬*»‚µã0ïdê­Za î Ø CIEØçÔãLïËF쇕Ò4ò›ƒ}ÀvQKÒí–Qe­wbŠ¬˜´Óvº™uC„2‹Õ³ûË9šä›²n G›•®žtÒˆ<*nB¤]†¡'m¶¸IæR»[cçDDʾª0G-°o.2 z4ôÄ +7#Zñz2®ÉîéÏrkY¬‚Ã}ItÛ¸=¸-ckÚ¤{¥â4Ř¹âa¿µÚ±5½5y±(pFض@Op«}znþ•ÁnsŽ‡“Ã.å;­¶]jÊ|3Ç>Õ8pJ8›Ž..°!ì  î²v°–KÚ%õøÔTŠÑHµ•fi¤¼ø°Ð5Œ?ê›Ûµég|ȯBÔ=¿|7ÛÜN†E ‘$✬כ€+üÿÎ¥L °ïÈG;Š9qXP¯ºÁ'±ƒ5מô ?%a?0®Ñû;ßCåVpW4+G|skŽf4†ÏúÔ·º½{Ÿáò^æx Lþµ’dŠ=)©ÀaöÁ)iôfm¤]Øß›·>Ðg ü.µ7tP¼Áõ\7˜uàžgüæRÐÑ·c\7úþíd> endobj 1557 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1558 0 obj <>stream +hÞÌSÛŠÔ@}ÏWÔc7Kjú~aŸtvÖÂ2ôÁf31²“$£øàù—V§3.‚&ÐÝéêœ:§ºŽ„¦X<»•Ð …ÓàEh}]슧U±¸– ¡ÚR —&> endobj 1560 0 obj <> endobj 1561 0 obj <> endobj 1562 0 obj <> endobj 1563 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1564 0 obj <>stream +hÞÌWËnÛFºÔWÌr˜˜ãy“DV©c)P4M„¨Ý…*$©’rç7ÚŸè¦ßØ{g†/?Ò4m€)‰Ãû<÷ÜCA6³Ó—oÙ´3«HÆs¢sK'›­g_Îg§‚2_Ï„$þà"òŒ)I2Å—d¾Ÿq°Â¸.™/ášÌof—ôÅù1,'g§gOŸ’×M"r¦h½iû}YmÈ«êèšõbé’ç_ÍÎç3ˆÃPÖG!òQ*DQø +§tÞùNѧ‰Î• ο^$J3Co‰ä"I |Ì’TŠ\H&©Lü7áw•¤"ÓYÎrúº©Ão«ëå‘$–eô»Äßqá÷¦-“Ô³u…¹ùÈ9IÁš´™¿ðù1.B,¿'†Yð©á?!Áòp½óõ±ë'ûo¬þù.(Ërì]àöÿ¡Ïç»ySn¶Gh¦¢-yãZ×$©RLÐw‰„™ nÅî@9“ÊÆæÞDÌÌp1²ÀQ²–wæ;ǸµóŸÑâ/`³$hÔjΊ0©i’ïŸ +Žg…d\yo)|öwàFŒÅJÙ=Öw v`†<äï~;òiŠüs|šœ?âÓúaŸP"©}eà‚Áñ,ò ƒÉêƘ +‹ƒsVïk[·"åΑ7õõ±¬\‹uë‰c /ô­u4‰ÔÁ;›ÒSo9[¬\Ä& +ú„Wìb4ÐAä½¾IàÉEj(J~×Æói„¦Gä ×–›Šœ¿_nÕÆ‘‹D"SÔ ülAÃ4ÝÃ.‹#¹Ât¯(D×Ô‹Œ”})gÙ»C' 4aX Mªåʵä)®³ú*ènÏÜx£9“bls<²wË uA‡¨R%Y¦‘…'ÅKZ\…O-ªYîê?/‡Æa×м6H’,äLæÞš„ESŒâ‘™¯ùpˆbÑ8‚MÈÇ®Ñ~YµG¨©×>÷  ‘³L†‡F ]cÀ©p†ú‡SU°j„ZÓækO1ʼn@·ŽáÓ5&閭™)îUÓô ¤CŠÇ-€óô)yÄqØ;ãgóŽób£|o$öFBo·¹Þ-šiµe¨viôô"‹«Ç3>àÂ-T¿ðû:}ñÈ”åÙè¼Í«ºrë—?”‡obu×üI#m`Öƒ¬ãÊÑD™bdpts%°’‹ ,j™)À²4ê¯2²ϧgÔŸ÷ÉqFg]_cJ`•ƒHB©ôxV–ãýÁî¿•˜ÎþFVápGR:¿Øvãl4ê8m™ýX2° +á~4×Ïé4þv©4:ÆßiK…é{3þfÀÁYW¡úD.c½½–B% +,VÑÞCd¯²b CÙs™ +öŠ@±rbNy…¬è4 1Ql8œÔÞÔMyÜ’ª&®iêÆXNO"[‹h7®½bfŽÛ²íÆ +|¼Æ€Â¢J I òP—(š#ËÂ=#–õ”u&e´é-Ïùå.I5|s–¢lÚ²ŠÉžÎ~ÞÞVÇÅû ­ÝC‚ž©®÷žÅb·.K±>£á¿¢A´1 å3G=›bYW“%<²]4O:R²Á'™”EGñ&h¼Kºù¢œ–‡ Ù¹øP ÔÀ:³Åˆâé‰çpxÐ +ú1r?ŠüsâØ×ÀêŽ #“ë~/ô*yÊ)­ôÊq±ï:x/Q +6ãæzïªc; +Ú'#ðu,¸Ù|€²”»éÊ~yiaºm)¦ê„¾=¸e¹.£ZÓôšŽNfËð˜ ? ÇÚ‹Ë0™Â (å#µÑ·`¶¯WE*ï-HùeˆtëeŒ¥7óõ.ü΢X줩…>ÿð¾0$Ò’v[_ïVä§ €Nì(ÿl<Ã^çÀs‹Ö«4`¾Ýí³ ¤eBß °xÝ´n]ãüÒÎiÝD:Áý,)i}ž·dŠ.q÷Ô˯Íowª8$¶VוÇXp ó<@0òÉrL¿†úük©ûÿf +íɽ‚/ê~qŽAv‚§àŽU6_¨ÉëÀ%úâ[JÍð©õ{Âu_  p÷¦ôFEyLŸÒ¹}B¤j+P5t¸úC8éüWà¯ýë០î¯ùj +endstream endobj 1565 0 obj <> endobj 1566 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1567 0 obj <>stream +hÞÌVÑnÛ6}÷W\@51CR%¡ËCçÄ]† o‹ú ÚTªÍ– ‰n ý‰¶?±¿Ü½¤dGI;l l…"ï=÷Üs.-ávròâZÂm7Ñ!$"…(Õ +hͤœ|³˜œÌ%HX”©@à~É4á¡‚$\(Xl&£pe!,–ø d‹·“vv>‡˜§0;™ÁeÈ”‡¬¹m‹Í¦ªoᢶ¦-‹¥ ^.¾ÃL¡Ï¤xªc˜J.ñkq6™bHSl÷”Rp{Öl¶­é:³‚yµ6pÕìlU›.Xü:9_Lâ(Ê45pfY!“q_ûú(‚0â1»%d0ñ1 ¦J¦RqÅT ñ3öëQ0•I”¤_¯áªº}m±™!ëàÊt¦ ¦aÈ%{(´%3+î  þ{'Ê)X£sÿÂÔ¸Q'úž¡×Â/œá®ïj[¼#kÌc:ã™öf ŠkF£Ÿðð «j +hV¾ø¥ÚÎÖMgræéâ3“p9é 7¯ îšW¸ýÜí³!8tÎÀmì¹½a%z¡û/éÛ¶ý™!ºO#®¡Ëxæ ù, yãëïs<ÇÑòˆÝî6¦¶ÝZO £j?YIŽKÓ6É³Ì ¶HíçZ4R»ÞšeUV¦ƒ¶MElöµeCÁpt„8_ö +“Ã\$æF"êC².Àœ…‚,‰ú@j\å8nxƆBž¥ž ÷„dÄJq­ûŽJ¹—à ;Wl¶kœ'{0¿GlFXñÀæP«ê¡.°ª21ÑG‘Öë&4¨ÞÒý`¼b4{Lñe3°ëbcÜgqå9Å:-UÛ·¦µAsí÷~ƒ¢^ÁHå8«±aGq.³Cg¤ôñÚþR¢4eŸ`ŠÅ)ùè¢F†Òž$×5TÃòpÙQC‰¦ˆñ<üå±rG±ÁÅŠ:0¿øþüi”˜h;”O¼çìMSÑܶnÏ +[ƒH+ѵ´uºAýƒö|¼Úë„në^+bÂî:NáòúÓ¸7Ô|ñ ÷À ä~ªõ±Rquîšß{S<”?‰7õa9ç$z/[¼~ª‘Õ¬X¯_áj±ü­ÃS8T†ƒÓG.û¢FJh6Ž0¦ÚÓD„‰gï‡ß +0›_ñ. +endstream endobj 1568 0 obj <> endobj 1569 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1570 0 obj <>stream +hÞÌX]ÛÆ}ׯ˜GNbÎοò–ØÞ¢E8ŽÚ¢p#QZ&¹!)¯iP_ú{îÌP"©ub´(PØàPäðÞ;çž{îÌ*¶_Ýüî;Åöý*5,“9³yÊŒd]µÚ­¾Z¯nnSl½[)Í$þaPy&Œf™‘Bj¶>®$¬i ÃÖÜHeÙúqõ.zõú–%"g/o^~þ9{Óq• µû®<ëfÏ~ß U·+7¿[ÿaõz½B†I]*ŸDa|… ¢`˜eóÑwL>“àÜ$Þù×%7V$ÑÓRñ8ÁmÆc­r¥…Ž4W¸&þ9•Ù,yô¦ký³íi30žŠ,ú3wo*ÿ¼ëk§ø¶mhm.rÉbXÓiÆÖ¯Üú‹‹T>–òD¤ðiq•*cÌ[¾Œ‹Ÿ?qÚÿÆêÿñ4—“Šœr Cdº ãéóËý­÷÷’i¢ž½­úªã±1BEï¹FMDÕV,¨œiGåesUQ 9‘C¢ *¥4•#¥%Å.)î(çëÉâÏ°Y32šZ) +_©±/’¿|ÆLÏ +-¤qÞbÜ»7xbIµ?KK†7À® ¢S"aŠ&¹·ßN|&EþŸøLrùŸIaŸ÷ ˆ´uÈ` àdtF ²Æ¤ÊÌCs[*ö²=>”]Ý£,ÿ4Ô‡zx"ØκqQ/rmm°HÊ!GåÐN9¢õ=¬•Ûª.ÁD!|šhT—ÄB ‚ìsô/š9QH Lò¥KóãÀLGÈWU_ïöúÃæ¾lö»åš„¢å¸€ZÈ—Ž1”ûžVû=Nˆ®ó¤W™(Ô™ózôAD> hŠôê=Ç¥ÞV=°À×9‰˜“ÁÃ!Ìyä¤$Í'á|^ðkè*À‚è)'ynMæ¼:í=o\F ­•A6)W;äªçÊ¢¢-Ì„â½´CTp8º;'ôÀ>õUíQ?T»-þ×»ÝÇsmÓEB¬¡ç !òÈ•"àÙcÛ]Bee³à#Ö*@Odå¡% òüŠè#®,ñ‰¹à  YTuĨžýPÁ)JU5”Š£—ŒØ[‡•&Ël0ýªÚ”§¾raRd—8}„`Ê… jüzäÛ¦làž½'–)44äÏÑ Å=qü`‡²ÛWĽ@æðܱ%¤( =Xdæƒ/Ÿ_MH"ŠbÜyY:pô̶GOPpÀ’ªrsÏ6mÓô8Ãcד=s¡–Tãþ¥çìîºöÈJÄc‹¼@%×ÝA: á enyÍbíõ¥= §ÁaÌêƃá–°@ÚÇò›ÈÁÍp|˜!pÎËLpTÈ*XÒU›ÁñHÓ–…Áé#=š”á)äS®D–MW/Hîbž ˜Š=;õT’çä iæõüs´;/ `¶ÄrâK’(™$*)^b½‘Ñ#iX0Y*T`²õ²õXeÝ6»‡‚-`ÌŠ)ŒÑ¬9 –oéôC06³“ +ûiv~ÃÊs6ÌÜí Ž˜bÎ +%Lq¶ðxER$‹8†r¨ŽU3,Ê&ŸÅá|C¬öBqa¾{¿^’S/9÷©zÞÈ/êtiXO<µÚ醎õBË`gZ9^E¡[ýu¿J]WÐUˆó +Ê®Z)úÜž+‰¨:NZ\r\Ž(xæûÐÈsZ2µàùµr ÷^'*×ð ZÃEFÐÀŒo`†´äËðœãÙ£þ’kjqO=‰-ÍÅéÁ…»#PíKWŠ\&Ï*)ÊÍ¡ÍÊÍæ„s AIn’hóÄÚÝóªœMÙò ‚¦˜ìÎ9΂h„§ÃÐÓ Öf®{3mHŠlVÙF^4"ú¦ª/ØÂia—â„»T†SÚ_¥;MØ‘;‰§mJ?°þ¡ÚÔ„åBÕ¤ÕÄ zÿÊ’ÇýW:®D΢…uEGÛ%ãíµáËAõ³è›¹½xE«nh«úMy¬ÔÌš–Åè¥å…«œ™ar=—ãŸ^Ÿrì ‚+-ÿDÚÓ‚ü/7wçmåØUB/<ÔýPm$6¤ÜRsîœÔâeËžçFÈÏÇ=¼!݇í‰Ï| ³pR:e¦rK—‹ äzò°r7à +ßØ"—E»ÍÔï6í5£±ƒ u2WêwOÍP~˜)VAÇ"À ¥m!LØžjÚ» ´<õe莧‚ú=ý¡@Ò_.^aÒ/DXöwÌbÄ°°y]Föhâ·ì™rk¦ÀñC9ÜÏ}[¡UZ\ù~ % ÿsŽ“ÙGWŽ­1Ù<·ïâŸOõæ'äöΧÙÄíÿ?h +Р4ªÞÔÍëCWÞSgo߶ÑÝÄÎý]ø«À¿UŠ‡  +endstream endobj 1571 0 obj <> endobj 1572 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1573 0 obj <>stream +hÞÌXÛŽÛ6}÷WðQj!F$EJÊ[šÝ)Ú$Ø8m¢ŠMÛjmÉ•äîèõ/;ËnöfSŠ]H²$“3sΙ‹Ù.ž}ûž‘m»P‚¤qF’L“F/6‹o–‹g¯ad¹Y0NbøƒËR*8IELcN–‡E «Ð8ÉY®à"f YÞ/~ nn_I3òòÙ˯¿&ïšeTõ¶)‡²Ú’×U§›M±Òá¯Ëï`'aw4M$‰eJ’åÍ"Â%qi¼ˆÅ°ö«r¯ÃHäe§Ã±hˆeAÙÖ•¹ÿ¡+÷ew6Ëß.2ÉÁEE¥"”‹<Ï M²8N¬³ŠÓTùçÊ“ÉsÆH˜‡„>D¹ LNàa’ùx£¥ ˆÖèŠP$TgÂcÂeFœeŒSðÁQÚû +ZË6c®ü€ž²«¢²´ý¨H½&÷;] ìçù£ì¼§­ýÈgì,°;0bõ¤~ŒÎNꧻúþ ºöL>L,ŸÁ„ñÒ F±à£d¬È¡SÆ'<û½KÈhtiêB6Îg\¶ß½ýifpšË+@pßH]õæÖY +íŒÿ&÷ÀõM Ö4äpDÔGx:ä2š²9r}'ÌjÁ%ôh|†Ø¥è“è¤ ƒà&‹ºh)8$9E<ÉGQ++ì%möd‰JúÜk}xÔ«rS:À7eÓB`‘”fù5ÅÌý=˜\7½åNA3ÃsšeŸe7: sŸ„ù»gÖ@Ä€z<õ|Ô¼Œªã}ÙíFþ{‡Ô¥ô$eñe)ñ4FõAR&‘ó¿ðÉ¥¨Á)PØÓHÕÄ >´sUÛô´er.Ãc3íÍ‚cH–ò§—¥tÁ.›—Yj2IĬçH,XÚyP§ÉÙÄí²[ꇢàí©;ž:—xt{ÚÃ5tøprˆ +1.†.o9E™ñ ;S‘]<×ÒÐÄûk—ë\ÆrÔ&ÞhÓvHè©"‡ã>L`ùÙ¯N“É7‡µ”]Á—lûCŽ#érg¦ $ùm†û}m[¢{,:äXtp´ÂÀ–vþ ”ÇØu¹pW‰y5P)»]m² -̃¨M}EQ'ˆšORù¤²GcÏHÊš+@Ž‰“38/fí]/f!f9s}ZwšªZÅô9ñ¿Oü#À¢HÙú +endstream endobj 1574 0 obj <> endobj 1575 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1576 0 obj <>stream +hÞÌVín£FýÏS\) +O†ÏhU‰`âuë`Ë]Uݪ¢öØ¡µÁÜ4R_¨oÙ{%«ÈI·•ªH0sfî¹w÷ŒcÂR»¤&,ÍàqlßÁ¡–ÚB»Î´ËLÈšiÇ?|™¾Ç„žàŒ[­5Ž,ŒÛ€l†nÚ=h?êýøæCt½{“Ú0}&ôjYçëuQ.aX¶²^ä3iü”}‡™D—I0Ïv g2Óu ëk=¢$jpqä¾)VÒè9:D½Ö›¼6z¦¯MU*ü®-VEû¨èãLs-æ¹xH—9.0KAÌö9·»ã*Ô"ŠÀ,ûÉ"jD„ZD  +J—pÑö÷r¨šÂéj¾Í a3G‹›X =£g™¾i1K· ŸÎ7=Ûó™¯OêªÃæÛY †Ë<ý£¡Vd‡×Maô°^½*InuZNúY–ë‘€TK°«…”¤Zþ2æbNŸÜô:æãûÙô¥÷+·ý7¬ÿãmê+—ùô øî+p÷™C¾2g¸ZÁ´XÞ·ø1…ÞÀT6- 3õß mªË9Û·ÿ®ƒ=Ku°‹N>šÜ鬰ÀíÚ™¾®‡$öÑä]Gà]ùÙ½„27\}-¨Ðâ¼}¨€Ü‰è Ú ˜·ð k ³j½A8¯÷U©6uH–>Ò½‡¢dsI~Ù7ˆ~ Õ¶esDå)|‘¶y+×—m«¢iå¶å\ÖÐ't% PyâHŽp—b¿l[(«§P!Lä‚éû]<.]Á÷p=Gß#b…?ÄSX ˜ÆQ6¢Ž¶cƒ°mð~6.³ôÌ.n†£Ñù]ÿ¬&wé‡þÑOÉÙ½oÌ1…Q|'Ù›T=Du¥!:>-íM ª`Dm´¸ôðéAÓ%oùÀÝYù"ºÏË%5ïòÕCþØPð¬*Û¼(ru_£š–:öŠ–É/Q¿ +¹Š*p°Ùȼîfå®i‰àhÞÙfgÅÙžä 6E…hÇFÝ~ÚêOý×à m£ñí„êø³0á.QõO×ûq:àzëíoû½×ëÙ¯{ ÷ÌäjuŒ~!eg@n•-¦LcH£0¨O÷~Š‡ƒýÿ’Žï¦¢1dÃÛa2€ñt8&á>ROõ¿¤}E1¢£)x +“0C4‹§ \‡£0AYvY¨—F ÿhëüçY]4›G•aTj8{”¯Èôº+2¤F?¿ OîÂÓRÝœO.H=¤à«gµ§¸$ý¬Ãd˜@3ËË †6ûbèþ îB1 ÇÆ«‚¬“ ë„?x 0ã“—ù +endstream endobj 1577 0 obj <> endobj 1578 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1579 0 obj <>stream +hÞÌSM‹Ü0 ½ûWèh³Dc[þʱÝ)-–mÚKéa˜Í¤™IIÒ–ýIý—•™]ºP(”B XŽdžžž$X½zg ›D ˆ:KHÃØŠ½xÙˆÕÆ€f/ŒÍ“"’…Hµ…æ(4£ v5A³ã‹6šï⣼¾Ù€ÇëÕúê +nGe’ºq{<ö§^ŸævÜow­úÔ¼áL´d"ŒÎCeÐ͵¨2d†ÎMOØ›þЪÊKXÙ¿lGU™$ûi8ÿû¹?ôóC¿i„w5—Ð@Ku]º¤µ[Š c¸ÄY´î—8‹”5¢d%ª‹05pÐ¥‹…´? B~!ýv«È¡—`µa†|ª²&‹VZeøô‹?q%ÑÅ„IÞŽÃâ»ÿº›AŒòƒ*‘vñS¯*æ+‡SÖ»”«³€Ö†˜Ì\ê3—,eæòCy œÓñ©MXŸì³ßßÙ?|öoPÿãg¥ 0åèstx¶"™óÅáw}÷yæf’œà®ZÞ"4ò›²¼§²½ÇËüŸ'8Ú2ÁW¹ŒðO§‡Î +endstream endobj 1580 0 obj <> endobj 1581 0 obj <> endobj 1582 0 obj <> endobj 1583 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1584 0 obj <>stream +hÞÌVÛnã6úè¯l_¤lE“Ôi ¤I¼pÑMÒDÝ ÈîƒlÓ67¶äJô&ý¤¾ô;CI¶ãµ‹E‹SÑ gÏÌZÀ¬×s'`V÷"bž@Dàs¨ToÚû!ëõdÓžÀñƒ‹HbæKˆ}θ„lÙã…ñ õ!ãdO½çâr!Kà¼þú5ÜT®H˜ï”³*_.u1ƒaaT5ÍÇÊýýØ»Ìzˆƒ`ø‘E!’~ƒ"µ R@¯ ér{”3l“ûa“ümîú ßAráz!>Æ®'E"$“Žt~‡ÍûÔõDÄ Kœ›ªlÞMÖcnÄbçk-ªy_ÕÚõ"Ü[t6‹œƒ‡ÑdCvaÏŸ¶X¸h°üá†,Âœ~s4‘·ëÞ¿ÇÖ/tûo¢þÝlüˆ%TÞVG{íø/sž-p«gsƒÅônU­*×ó}&œO®Ä™pÔ„íµr,m+G86ŸM¶953.¡ôi”¢ˆw-Í ;'ÜΙ›}¤ˆ¿aL 4 +8K›Iõš!¹?ÝãT2îÛl>[ Z,‘”ݶn´xkAîR:ÁBäd­?ïä ÓäŸä ~$g˜‡s"E2°ÌàBàxÜê ÃÉêŠÊí˜[‰¹UùDU¸¯4J +\>çËÕBÕÄÜF:¶FÙƒ  JâÁ÷•+›ëòÕJý ã²0¹.jP.j^ì<»»IåÌ\Á9b(Z%KYSYZ}‰CéPBZ­ÜöO‚·Eåû‚EÉ2ìØ UëYçÏób¦`àúÂ)]á`ãÉØYºÃÀ{¢á½‹Z",‹í§$LÂÊ’ÕÈN"›CaOH$±æ†ÒiÚ·?ˆ[µ¥ +5'Á¢Ç{‡øêÇIÜ9[‚%í '™ì×­-VÛåv]BD, +€…išî^Ç I°¹Ž¾ÝÖßÛ‹N² ë‘^cO!EŸ¤æUåJ8àíÄÛ˜’Ê,xÊ„Ùpô 4ȾE@¼Ä­Há½²ÊgŠê›b¯ù2lkÒÝÃI&±‡ÄæÝ(ÿa¸?ñ'Ræš`Ãáƒóµ.Æ‹µ9ßÖf²Ð#6ÿ~{ó…DÞÅG]v~ÙÉçæ +·½T{Öi1QhÂýðÊ—;Ôh] wÓÖu¡1ùËÍ4ÈSt>ªVišpÒ?œýÕDM«†<6_­^÷Òg ×['$¥kl Á©­`‚Þjš¯æ*_ª‡(øpz€»=×ëµyṴ߇7‹=Gù>å•ÎG$uû!©'"Û ƒáO—'0-×æ”ZÏÑVÖ5å¬.r“ŸnI–‚Ž¹¼}¬÷ š¶Ü­—wÊœ‚ýCH¦„GŠ¤V`ª|üz +OÚÌuäýËÛ1ðÇÖ +¾~ÚƘ–9ßÜ^ß\Þf¿b¯†ÙðúêîåæµÁìz¥*”°Óc(*76¾Fù6ßϪ¢äÀ*·¨ û۵ɓ}R®‘\¯«w8GõE¬•¹»Ræ^Wê|ôHÇØx£6ü%Àð†§˜ +endstream endobj 1585 0 obj <> endobj 1586 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1587 0 obj <>stream +hÞÌUoÛ6ý_Ÿâ`…”Æ4©ßò–YìÞZ§p´e@5ŠD9Zm) ¤vÁдo¹;ÑNb×ÁÚ Ãu<Þ½{÷Ž°0†ç—á;ðÜЇƒ’Fa|Ã3âÂ6püáC„slθ ñÊà…q7r ÎpÁ… ñã9žœÇB8ž¾x¯•%Bæ˜õB¥«UY-`ZµRi&­_âï1“£3ÙÌq` ˜ð=ˆÇÆ#Rž¬_Ù!ÅîCÏešKi•Ã•²â_ˆq<ÂéyÚ½g‰9`ò[ºº]ʆ¼&±á¹Öê3Ïf;QsCÎ]]µo³Àßì#Ìv·ö‘-"Ëé7‘{®¢ž¡pÓ 7Ähá­™q<ÍÌ«Ôr\æ™w`sa <\ÖÀ¡°™mÚ–À_Û¹5„,4_«ZÛò.kÁòY`þdõ;RÛUSZÄkÖßÓʉJÛöƒ5-"ZcáBcùÃò˜9]üç"Бž;¯O=?Óí߉ú?vë»àø,¤lÄÉýYù‡9O–K˜—‹››é˜ ÎF#•5p&Ì÷–kÊœõPPÿkv¯`gúaÜ==„‹|-gZ ³`÷aÜ9N–À5üáâŸßZ¾9žÎGñüdvùò$ž^Ìàb¶Q¡Ã8&Âòߘïë2‡zß½¬g]•µe]%fVWM ÚoRuR©WÍ"±~бG¼Q¬¼¸UèYVm‘˜EݵGp0™Ï/æ#(Ð^wx-`„Zà«&Iªƒ#h_ÇüºþÌ0?ÒÅ°Á(6H_àc´W©ªðâÚö5î¿ úêd>›ÎÎGh‡bl²ËÏ€½uŽ‡Ó6PÀÄL,Ø Q•è¹‡JEœµªdJ +r eä^cѵR2kŸÒ/‡×·Zfïâ»[™˜¹,Ôiº\^§dïo%dO¢. Ðô[Ü„oQ«ÏŸCßEãŽlÊE5©òÓkb öÝ€áؽøá±õ#È%Z¹ë\Ü’~ö Ž@hàï ÅDD:P캀kjj³Ke"~>a ¿ øØ¡ ³B^éÛDi–¨TÈŽ€H=„¼[­îŽ4åص15­ËŸd2Ã&l(Ç1|„ò1ω¹¬+a—óã^ —6¬^÷*Û:½O[³1Œ'—Ós´Ïvh¡#J¶Q]ÿEE²ÂsyùËÚµœ¶Y¢¡ãÎÒ_—¼WúΡëN•²j/[ŒL<èWt1͇’ö³D­½?ÐÂÆIà£!ÂC䔕°&ÖÁl·wO‰§N]ÝŸÂÑŸ (Ø•ä +endstream endobj 1588 0 obj <> endobj 1589 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1590 0 obj <>stream +hÞÔVÛnÛF}çWLàZÖzy'åº@¢K"µ›NRDEÁ’K™­D +K*Møƒú—]R²%™®]£E# äjfÎ\ÎÌP2`¦½º0`Vj®óÁö]°®¥ÚËP;`@˜j† ßx3|Z&x£Ì„p¡1ôB™XÆx`† áÚ}8ƒC} º]˜bøÔÒ‹™ˆ‹,ŸÁë¼â"bN~ÀHVɤ–=ƒ®áPë¡G'V'Ó—¾•ës%\@”'ðNð7-  !L‚¤¥©,3Œ£OÑb9祴…škRÏÅj]ê¸@M+ ¶Ï˜]×­¨PJdƒšö–É’–R"ªEP¨´ý5/2gÃiˆ±œš˜#bÙÔÑ?ƒÉ Òsðè‘žiø†IMÝ$^ÝZŽjó=ŸúúDµ,YÅ—zú[¢4¼–‹2#=ÌW/rÉ»b•I&MÓõVŒ É…u.‡ºÓÆ+3<€ÚóÍ}çkÛýfÿŽ×ÿ±™ê‚åR_ö`=›ÌÝY•'Æ|1ŸÃy6»ª°™–^âj”\žeQCÿHLÜW'T¥‚ãßL°gª vq¥o¶Ý©w0 [³< ±ë¡ûfÛn–ÀšôÕ‹¸z•Ì>:¬V"‡©>Õã«â`J:)9¾KGÒ0܃[mðÑì¡ì6Ôøô>˜Ó +{wÌm…]ÜóZa[µ!êúX>«#-70…yyöêr+“ѯ%ùÅ >PÖCÕ­z–Wèk±L§zÂS1ˆæó_£ø÷ðó’£üñ! "‹e‘ó¼:@1‚jé%Ö0ª" %S_î짌ƒÙ¦Ûe8g6¾â1jUL¬§m(²ëE»©>/òÙ”¬xv«&© ài$D!™]ÞÓ¥$ SÁRÓbUB§ÏKüÈŠ:‡XTïûÛ¥¢¸ê÷³Dú:¼£‡õa…bä¨ßÏ£—¸½,²T"±Ì`Uåý«¨<åUY#2wƒ¦…@|'ÀŽ!ƒïêîzëç«Š×ÞвےÖ*ÛÔ(F›VP¼öÎ+Ìa«>åéúÖœþ]±Y9Î>ñ¤)öîZ—Û ëÂå¯ß†ðCÅ a:þšá·¯_×»þ`_×OJ +endstream endobj 1591 0 obj <> endobj 1592 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1593 0 obj <>stream +hÞÌWksÚFý®_që3†µÞ»éŒcËNbPêfB>¨°€2 y$9vòƒú/{ïJƒ…Mìv¦˜‘ÖwwÏ={îCBƒ±txÑÓ`œI¶Žê‚éÚ`¨ri$½¤Ãs 4F’¦ƒŠxÓ\‡:8†ÊT‚™¤" +SMÏ€`€U3!ø&}’Ïüs°˜ §‡§ð.U4—r2NÃÙ,ŠÇpç<…®|~EOFáIg†mi¶Á™ÔFDò3#Ý%lÝåá§ÆC¸I•à‹ä1·¨´‰Vêbe„>ÀŸ‡³Û)Ïh•H–éáYmfÙÀtÃó<`¦«ªfqj[gŽ]Í£L7×æQ-Ë“¨ÆR+O(äNšn% ‘Ö¬RÃ*”y*†É,yºª)m ‡ŽÒÖ5WÓ™.늆W»°ëJ[sLÇe®ü.M +Ûðnƒb3GþM3¼°§Y¤´‘¯œÄ$¼U%)uÝvJY4¯ä¢j—¿‹ÙèÆÄ«ª9òê¾ñï¶ûŽËþÔÿñ2Ãf.Å JNÕÞ¨•ú<™N¡'9Ó3¬Œ§JÛ0˜&Ut,X™™ ‚ù_f°£‹ ¶±¦WånEè1Ï.Ò™¸ØvÄ\•»ŠUGPKúâ£Øå /’ö/C>ŠN“Ùm‚ö˜ÇùÑÑí«}†Ã}¹¯ÀO8ñJQeLѾÒWVùj‘>gpG·i磾ڇ°ß öZbwÐ|H¦ü”ŒÐ\Zg„æüw"õ/à|Ü 'I#ÜÙ£ é†^‰ö{zuÄbÂE;iu\Á ÐïÔØ–¾""5˜G: ³^r—x_^Š¾Is]hØ;âÙùÐ=õ ±+"4ßS![ šÇëàOòºà1OüdíÈííþµß= ÖÙ¡ù¾“£±€'Áùu8+½×:‰Fx¢] ÌÂAšTû¡ÑØçæ:ÚKk[cŠöuõaö¹áÔM~(En( W—•äÖù¶~VŠøþû"å©÷oOzß½Ÿ¤ÙZr”ÀÏ"Õåã(‰WÊïÈ­KÜ.®:×ÖTZ‚£uKÎîÈïur³²¶p¦¾¼#4çÓ4t™OZdn.&Ç[—gÑŸ¼~¶žQºF§AÛ…“¹mÛºÅѤ.•œIŠGŽà¨ÇÁÏÈíH¢ƒj°µ07"v +F‰aõ¥‡ =›úýøé‡ Ì§Ÿ¢Ïâ 1‚ùDÜt{äß_R¤—á4y´WRt¦|„‡ü#Éód&›R¶ Onë)õå¯I4DÌ{~q¢ÊÇ :õ‡cN¡›Š2B°F…ß tj±8D[£÷ .Ñ~ò¦{ÏhÉ¥½dôXǪo¨½Îy°ÝéæL jÂe’ˆÔ¨¦þ^h°ø…M¸‹Nù“A®o,I‚ïGû‘E{ ê_5(¬gQ–?ýî²ÚO-©J üE÷&\ð´ØëëO5 çËeµêàëé? ºi¥, +endstream endobj 1594 0 obj <> endobj 1595 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1596 0 obj <>stream +hÞÌVmo›HþίEª +uØìòNÜ;©µIäê‚]LzWÕ§±Á¦µ1|½è”tÿòfã·8IÕ^¤Ã‘½yvxfæÙ™SéìrÈ`ZJ–6uÀp,Ð)±”HoCé삃0‘˜?øÛèØ:%Tƒp!Qd!ÔpuǸ Ì€ð«ôIîz`:gV …¢ËËi-i6…^VÅEcå÷ðzÒkOÑuPa– aWR‘‘û‹•æpnAÄÑ$. Ê&ðk¡„Ÿ%—P¼…ò›¸¥&,SôÞ_Ñ"ŸÇ%·òBÉÒˆma¶1- šîº.áԨóRˆMTƒhÆÞ&ŠÅ t±‰bl¤r…@.à¦á4ºð˜™¹F7ka®"E7ˆ)ß‚F™¢š¸´UcÓˆ&k +Ão«ÆuEe¶a;Ä‘ŲÆ&«qŠElùƒ"vâ/ÊTQ1^y™qÝ…ª”+©i–½V…¹ëX(«cùG1‰…> ü¦Ì¨™·¿ÿ>ôûfÏÃú?6§ [ÄágÐÔ&µZå}¾™Ï!H§³ +S—Kl2.U× “ÿT4ìW9ž +–ÿº‚mMT°…-½ív³îA—¸V]Î|Æ–$ƶÛ)v¦@×áã•&Š%ÃH/ÕŸ'q’v–‹|™ÅYuŽøù,*/–EœN3?ZÄ#y¤Œø{[¢&—¤»¦âyá"É‹4«’‘œ,WÕ)œ´àñ~àõ.}xQ‹‰øÃÂ…Êpr*ÃWûD͵ á&ºódÂ<´S8HñËß„Í÷{úXßöǵZ›õ‹ô!Cz­w»a÷ßña¸¡}üô²Õ§O^îÛaHè Rø hRx±!~HǹÞСi«õ '¿Êq¬„AÐxAøQÉþA9stU]ú”š[EÞ‹š“|ˆæ¯j¢9ïQ•_Ój<Û¨yŒ+¼Ín¨ÉžG•1¼ ^ž?¤ƒ¦¼7¿À /\; ýdzâºA¸ˆ£/í§ÝöŽ»íù¡wé!ÀÉcR|¯Ûáq·Ã0èù—ÜüY¼¾?îõýu?ô†ˆ ïÏãÚ?îÚ¿¾zëÿuÂwGwî™ /×ýÐÚ£Qv?(Uågµèß|.¶š³Þ…×8)°jÎ’<¿ËñNÿjÐ÷=?ñ]ÄÕŠ™áüipÊR²H3øÎ…ïXÍû¡x€}’ш _åQ5É8@ŠN4ŸßDã/á-?‘øƧÀ'‹W¯ Ï#n>«¡k|Ôv£*‚ÕDtáO5ž‘˜ÅÛ¤vs@sP¦±ûö°¹¡ ‹K±L Š*æÀãæÓ—ÃY\}‹4»Ñíh„/ÿ +0QwÕö +endstream endobj 1597 0 obj <> endobj 1598 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1599 0 obj <>stream +hÞÜ–ýNãFÀÿ÷SL‘ZyC²ìúۇ+áTÕUeœMð‘ØÑÚ9Žžîú–Y'@"¨¨hÕªBŠ×³óùÛ™5ÆÖÖ‡s ãÚ +\E^€+@+kdí$ÖÖ¾ ÉÈ’üÇŒBî:º‚ ’©%Ð ^ìB’ãBH’[ëg{¯¿>`wkwsN5“wíj¬³é´(ÇpP6J²\±_’CŒä¶‘îºÐ“\>${V=RœÜ¬œˆ|×g** Y9„š%Ÿ¬˜ 4dDšŽÑ,0ô¿dÓÙDÕ¤ÕO,ß‹±Ö€ûpÇ㸠áµUƒå>âàŽ·²´–k6‘Æ=«ØŠ7½h †’–þ‚Œë·dŽ3æzÜ·ïÀ’õ|\†¬çÈH:ܱ&ñ7håëÉÐ #Ù§ºjeÃyÞ xh_2³£Z¹® ÖÃ|íª$ð« ”Ž„ ,2^ä"d›ËïÌçÆôðWÈ õüð\{}îùBµÆëXÍœ‚ðˆÎ`Ùœ"X›•WÆ|?™ÀY1¾nð0]»ÆÙ¨•f=×åÒþÌX[ ¹IûÑÁ¡c:8À™~w¿˜ÇAÛδ@å D'Þø œ +,A´ée¥bÝ ²©¥öPôn6™\eùM‚ò»™úUAÞ…¼*ëòëLwPŒFÆ¢ hP\`Ò{(Íš æÔÁׇö Ù‘Bc•£ÖM‚NS;OÙ¶QK:f·AjãvjOªrœ²ù¾{ sr~iƒÁW}­+ÚkÖ£êh,«Uó¦ =ø¾†î£|׬´jædU‚¸— Âc£+ p¹Ž\^M]K­&ë…Ûp(ÏM«àˆî ÝÕcv(mñý«ì +Ê]äs}‰×î»·x )[U¢¦µG³UÄ(Ý$ùùÅΠŸÀîÎ-sªůÂþõ²"§Èíl>ù+Ô5ª?êW”þ˜Nø=}q”œ]õ[öT6À²æ¿¾¹(Ö/ BŽrCàTÓ¡qÃ7^ÔÞ[[°Ú•&Kó¯A=Sy‘M $' _!_ÒWtÁŠ.|êÂM¾táÅ]*ÿ7ê€y‰I”êö(»ÃK5°W0Pª(;ÍšëÀ쩽s3ªÐ©·Ÿ>Cû§l/gE‰ÛÏø\ÙÇJ\ί 5B§¬ÚÕSn>Z‘›[|n/ÉÝŸÏŸ4é:à×uëÒ:'¶hG €ç¼{Õ†}IÓîœ|¸8'ntM$?ö6ž‰‚Ð{ï­ôæ <¨Q<¯›Ãª(S[¤ìE!{plB&‡'ƒ•hm¿õ;¾=jss>ijšÎhvàÀø´Z~ƒÿ`U|Õ +endstream endobj 1600 0 obj <> endobj 1601 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1602 0 obj <>stream +hÞÌVmOãFþî_1‡„În.ËúÝ‚t…\KE)ßÚº¬d9ëÈv€´ºÔÙ™]'$$¡9U•¤Ø™—gfž™Ùņ‘qôý £Ú\y^€Ë¡Ff|Gl°!Î ÛŽø°£¹„.gÜxbpDaÜë¹ð…ÛÄÆoæEÿø,‚ó£óNn*ËŽ˜k–£*Lr9‚KÙˆ*KÂú=þ#¹:’Ã\º6³â £‹ˆg Þœˆ°ô­H‡¢‚TáseÅ÷FqtáäD–Ž²Ì1ôŸÒÉ´5Yõc#pX`µó`ŽÛëõ€yçž®[Q¡”Ès¼5%’E®R"KªzŠ  Ò‹¼Pζßãúš˜ŸRËõ˜oÎÁá¶Õõñ5´ºŽÙsLDzñ;ÐrßêÚ¡F,2oªRˆ³AVÀBó“¥4BË«:·º˜¯YJâ]±Ê‰IÇ Â–»×æÂmË_–ÏŒéá7·Cüü|ñs×sO³ÿõl¦ºà,¢,f“/Vå_Æ|_p›Æ 6Ó5k\ZTV×u™m>Xî«)†L¥‚ãßNpè¨ p¥Ÿ·Ý×;Øc½@3½ q"ˆ÷¼í·Kàmú•&c&f§ÀO ‡oAŠ¦{6ÊókÑËÙä¼”R š¼”µ2O,´ít þ|žWŸø¹P¸ Š4Ž  4cE>É(3—²˜ƒ¸ã“¦¸èE.Q¬”ø›U„A9“M§s²E•gh=œ‚¿ÌeÝŠÙ´Êe“%fVΚwp$¨XÄJŒl1ø²E¶Á„Úø‰¼[²J”¢üø8—u“Ê@îëÝŽDè³á9Í¥rÚž¿¢eÕ‡¨ÞËún.±uþ‡¶{Ö!ùÝ/×ñý»Ë_û°Êz|¡gÀeDz•¦\Æi}]Ê ‘¥³¢¹¡¸4Fm +;æg#¸þùåx¼ÿxß~¼ê#ÏI"‰`š Œ$WÂP š×%U‹íE }à’^/æÿ8úè€k î=,ºw²Çtàå5ÖGŽX]:iyÛÙ{mX¤sQiKسËz^—¡VöÊõp¨rZÜTïÃ%ÒSA0¨[æJÐþBùÙÓX ^Ù‚Öq¼Wñ¸YÍLµ Þ æ”Rz o¿âˆP\ –<ª:N¾eŠ«rð’ŒV´û8Z©¬¬r!›ö †7§8|;·x##E=Ö@w vøå+à:—íÙìuö%rŸãVv4+ÒêsŽ£­û´vŒ,4\Iô!ÿ¶+¥õÅåÞÜlšÑuqB´­^j/•âñŠvb×ÅðˆXëKb CòK¿í~’JÑ¡K{EîÝ3úŽQ<ŸŠ×ÆåÕ»Kx‰y¯9¹GNér |J˜ÈP¬Ü¤4-ãöÈ»…üLMç¨0h fš6¸®÷‹Dñ_˜¿lfw +endstream endobj 1603 0 obj <> endobj 1604 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1605 0 obj <>stream +hÞÌVsÚFý_Ÿbë§R ç;ý–=d†\“qm+ödJ§£ÀJ±ÄHG°“Éê·ìî JìÄ6 C§¤coo÷½·{ÆÆá/—Æ¥á;ðÜЇC!‘ñslž aÇ>D0džÀáŒÛߣ0îFÄpáB¼0~3[íðX¯_@·°DÈ3ÉÍMš¡“)YŒ’´~_c&§Êd3Ǻ`Â÷ nuŒHyzd‡[‡îÉd( H²!\VüÞˆÇ%œ‘§­=SÌíÛäf6•%yµcÃs#äê3Ïf;QsCÎÝŠµo³À_Í£ÌvïÍ£Z$–£'Q´Š´Bम„!ÐÂ[*ãx•2¿&–ã2ϼ› «îá0°ê¶…ÍlÓ¶ÞýÊŽ¸AÈB³[ä•m8(°|˜W–ž‘•½(S«ŽxÍ<#ᵬœ¤´m?XÊ"¢%.*,Yó1§‹w.€*òúùàëcÏ Ývõ즫àø,¤¬š“ûöÊ–9›Ó)ôÒñDa1³Ä½Qʪ;æËÆ kÊ!ÓP°ÿ—غƒ}ÜÓëíîU›0b‘_µ3 ÐÙ0ˆ»ÞîwRàKøú²üj0«¿L³TÅEòA¥Dsßì[Çë~ôˆë«u‹I:•€¾æ,Qh€^™fªoaÈ¡¥]´eòVQо?4ƒN·Ÿþщ‹ó6Z?élñO_%ÁkÏ3uppü„Ëá!´òìG‹$C³5‘0M3 *‡wtÏÉ{šgã'¢¤#d£³ÁËÙ½gÑ5šHyÔ7Ñ>Êçª{ý~¶·ðñ…U"­Ê÷3<1Y.R5˜@UÒÿ9Àƒ¤”UÐL58k¾m÷ŽžÁº‡Ä•‹³äOéFøú¬dBóJ©¥Lû%ìÕÈý^·Œ¥Âø”§¨:æx³÷ Ø`ÕgÓ’V}7ƒóö5ìS"ò€µ¡F³1‹w…LþDóñ¿+àU§¹Aùt›¦‡úlá ý¯Òä?Ý»ˆ›qçâ|ð›Uni΋TfêRaE–µBû—¤{¹JTJ'EVñߥ×V|ú܇î:ª A×'Áî°w/:çñصÌt.®!vsú0_ÜÖÈýÅÝF0¿¡Aß”ßxá êq[ƒ»]’>9{syºó“鼜}"¢@úøù¸µûÔ$ÄR…|Ü¥q³»Ñ/Æ7 륰·st½7gí-ÒrrׇÌýsvœŠ“™,zó©Üõ1y¿]Á?‚ 0GV +endstream endobj 1606 0 obj <> endobj 1607 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1608 0 obj <>stream +hÞÌVánâFþ律F:É.°ìÚÆ6ä@zDI.:|=UuU9°0È6ÇEQ¨oÙÙ]c05kU©NËìø›™o¾Y›ÁDkþ4`0I5Ç—z`{X®µ÷¾Ö¼dÀÀkÌŠøÅ<—X&¸%Ô®QD!Ôn[àqA™ þZûUïö.¡E<¸h^Ôjp—Ì#–¾˜$á|ÅèÇOÆá¿ùWÉR‘LbYÐ`„9-ð»ZEœ¡\™žÀ–Пx8â „ñ¾$†?ÕÚ„â-TÜ$ŽîÂì¡Ó™ðl¡õiÆ=0ã|+á– ¬{$Ô}ÂÃG4«{ü«\ÿ8´W½Qm•5í±(e“í¾ûp±Š3x´ØބijHý’K¬Ò"{‘WÙlÂ>ô{×ÝÛž_ÉD4†@G§˜gŠÇ[žu:ñj>xˆÐÌg#4¤ŠKxÞKoŒ‹"™Dð$Ú÷°$h£ÄB×Z «É¬ GnÔ`°©^¥guæRÞ© „Vü…YmPÁ;NÁC˜V÷Ê\®¿BL/&bu¯àT·sž+iHªœšS K;ÿ‡Ò¢bèð´PÚ)Æ°„")IUh•³.*¸XÄ1fÑ">$Šb"öAd³:e÷Ó›Uš]-¢8Ði`ÈüŽÌ\©&1òpÖ€›ÏÿêcÿK4,Ÿ¥üû€¥Ê>¿WÔ˜ ½DD'çBÉ»çKüXêaªô0…×¾„t +á”Eg!ŠïÌ:ÐEºø9aÇë +wJÑ¢8ÍBÑ„!ÓÀ¨ ±¹D¢m[”¥èÙ´t²–Îœ] <>YÍÂäK¤ñÉÉÓø€h*Äà'5Wÿ¨ˆGû#Îâ>ñhÞ<‡Ç#sX\1__‡Oø*ˆæÝøÚ{è˜Ãßû 60?)ûÛN ™Èy†\–E/bá?-ù 9ª«x’¼ v¡_´+ çAE1ÈèŒlŒxò–¤‹8Ï'ŵDäµxÄì@"ÞÁ0쑧a ¤ñ6ŠHæ'áWž¤’†Ó÷­¢5ĺ‰Éà¡g¡^'p+£ˆù·,WÝo ‹½ËþÝ;ÿÃïÝ·½B5øNô—MÅ  +endstream endobj 1609 0 obj <> endobj 1610 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1611 0 obj <>stream +hÞÌVmoâFþî_1Š”ÔÛ„e×ïN”“èA*š ²Itª«Ê øJld›ærUPÿegmsÜ‹pBi ²—gwgæyff ‡‰Öüñ†Ã$Ó\æå9`2H¥6Ö~Zó‚1Ö¸ ?øàžKM\“Qf€xÐZ¡ÌòMC0nxÔ~ÑÛ °©¯›¯¡ŸîQSO&iøðÅèƹLÇáP’_ÅOèÉ,=Ô4¡Á)wlm­•Ÿa12Ìg2S«:B³-¹:Ôv€¦ïû@-1«díÔu–ó(5¬µyTK‰e“¨ÆG­üB!pÒò–¨ ¹])cÚ¥2?‡Ä´¨­?Á8iØ8tIÃà7¨¡„ãÝ)q4¸k¹õô~š”Øh1Ì8ÔÕïH1#K<Í"ÒÀxõ$V²2%¥a8n% ÷«X/cù›ØÔAŸÞwJË«çÆϯ=·\öïXý/+²`:ÔS9X's6zå…>[³ ¢É4Çdšz†½‘É”4L“rýb`ÃêrD‹P°þ« +v¢‚ìéU»ÛeúÔwÊrV\ì¸hÄZµ;î@ +¬ +¿¸ˆS >¹†Éá8?>>[Õ£­ø·¿¹¯ÙTp;‰¿Ëá1ŒsȧfQ,œ'ðVBž$0KâIaW|ÿMsÑXÁŽá ­Wç`þÜfgçiçã@'‹ü‚ >ÎœÕ0Rz?¶Õ¦¿`›UÙc¤N!Ðça>Ýž×á0“€‡i·ß—¿õZo:ƒÓ|Ja=–½ð Úós…³šÚVךĈ£Ê‡œÀ¼ñj$ÇQ?Tèôôt"óÂ] $ gõ=­â^3…E^ä,“;áwÕ¹‡‚c}kËK‰ƒp©Ï†8ªäëêó6•áïgϬ »n«fýlöÕ!âIW¤Ãü. +Ÿ•ò—R\‹¢{}µ#vÏK÷Rb•j”däa%1¢7yºî»mq¹]F_Éú}4ÂSmï´ú×Ý+Q“ÖzôR5y?A¢~ôþŽžj3øì­£«‰Ã‘úâ!‹‚¡Ý§ý +sÑ»½¹ì_#¼.f‹lº¦Ò‰Z}ôa§b­é¥Î^Âtø°_áD«_ûõºÉI ®Ì »ýÇ>¸E¸×Ù…Ám¯/yû}á8á\¦ƒÅLþ'o¿ñf©þËþG€kÖ(l +endstream endobj 1612 0 obj <> endobj 1613 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1614 0 obj <>stream +hÞÌVko£Fýί¸Šêõd†7v[)qHêjãx1Ù4ªû؃ÃÖ¯n6ªöõ_öàNp¨¶+Kf|ærï™s˜ÁD:½0˜$’©EmÐm4 +1—BéÜ—N/0ðC‰©@ñƒ7f[DSÁÒ(¡*ø3‰¢BuG„ ÊtðŸ¤_å ÷ bCç´Óh@?V˜M4y1‰ƒÙ,šO ;Oy#®üæÿŒ‘´<’J4 šŒ0ÓÿBj¢Gg”­T[øÎ\{<ó‚ùîbÅÿ$9„â#T<$,ÕÌ2Âà~fË)O„•ëK¦J,OkâjŽãÑmJõüÜ™Ù&ªAT½´‰b -ÛD16R9™@à¦n¯uœ™Q£¹0×¢éÄŸA¥Li¸´”¦Êl¦UV†ßfŽ;J“Yºe[îÇ‹¯F)(&±äJ¶Ãs&,ÿ¢‚-5«`[zÛíFÞƒq̼œÅM èÛn§ØxZÐÏ.Å,å«€ÃeÍÓp(‡‹UúŽˆû÷ï]€ã1½ÛV«!Ô¹¨éu}-›?ŽyõÒÇVkÂÓAú<åCy¨ •væÝÿ®¦Ó‡˜¿×zæË›FoXڮܫØx Þ`¹Î?ÔX#”©l-rÂPFÓ9Os{÷O²_* ÷½›¾ëù÷pœ`Ád1ÞR^b€^0ãÙi¢ê¼'OQ:zDÂÛ ¦…ÿy‰¢#¿’Qp8ñNZ9W„wèOÀsÏÞ‹¢Fó²¬"¢½ÕìÇÃC,KWV‘·êVêö|÷Êõ„y!Ý'‘?”îÛpTpJ`à{ÝÞ•0I)Ft±üLWü+áÛW3ÙfFáÛñÅ-#)–'ðIä*Ö‚¯èˆ2_±#Œno|·àŽÄ:Ïêg/ÍHá—üߘ™5eíU¦ºw{}îz‡dýo3ý¥V‡ó#Ü؉'Ãz$å?JÓéðpz ’;.2„¯¼|:Uͦ¬¶KDpçv¯~oŸüÍSÒáVë‰GÇ¥3W²é"Е¯2Àòéœ!ÞÌ×k FÁòß„,V"ʈ×f0¸¹õ:ˆ»;Ã´Ä Y¬6þꑸŒ>‹6?¬fËÚ<.»¿¸ˆŸß^÷±Hꆊ9¬ø|ô\?”ç~¸Gîuî÷u#Yøc¾ëµ½þËôFt· +endstream endobj 1615 0 obj <> endobj 1616 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1617 0 obj <>stream +hÞÌVmoÛF þî_Áè ÅöåNïNš™í²$ˆÕuE5 Š}¶•Ê’q’šfÃ~ÐþåÈ“ü:§0 XøÎ$/20k¼ ˜-ÏŸàØ”lM[?„­“·„Ó–°€ã/"ð™mosÆ--Ž^wz6„c¼pá@øØúd †oÁeôOúí6Ü*SÌ6ò™Š‹$›ÁeVJ5ÇÒü5ü#Ùu$‹Ù6tž á ÕEg¬oV@¾µë;O¤‚8›Àe†­ãø„Ó#²´´e‚1`ø5^,SYÕ0l¹Nkõ˜ë³ì^¯Ì 8wêª=‹ùÞJp0ËÙÑ#Z–­•ˆÆ«žF¨¨t‚0”´pdl·Fæ§Ø´æO`qav]¼úf×°˜eX¦ÀO¿–s³+|ÇX`ܪ¼–Mªq ¦Ç|ãgSkd-WEbv1_#Ïx +'(-ËóXD¯É…‹:—¿L—yÓÁO.|€ÚóæÜûúÜùB³ÿÆëÿØLwÁöX@=X‘“{{³ò/c^¤)Ü%³y‰Í´g£ÊìÚ6ÆÓÂ5ä„éTÿ ƒ}K3ØÙތ»[aõ¼šÎtAcÏG'ÎfÜ9N–À›ô!™Bd˜ž‘ɲûf"§Éµ,OOçqq—(Æ)Ì"#2#sÃJ—Pè×Ó%Z©$+§‘1Í«²G¸3.Âpˆò»kxUÀQ¶¼“ÓÓÓe\n\Ÿißáñ·ºQ ŠgI§[5¯žIäæîòÝ%ʯ/®þ‘ ŠÉs®’-Ÿ/Kå}Ae¼8‹÷£!¼Byarc ôW‘Fn‡G”mÆ…%V0O—ºvô +k·gQ”m½ØéK·›‘ÛÅÍýCq¸¤Jëàõ9ðýˆ…Ü®bx=‚lŽ¶7”,)žÊ€¯åœxfüI»Óõ‰krµã5?ŠL7 1 Eõã4½ÇŸC”?-åoÆhÐ:†%Œ¶µ¡qEŸD&üqŠƒÐü$xèÀ×ûhœœÀ-òÅ’˜ßÃ2É趓M®@ƒ’h?Àkœ–:±UÕ¢Ÿg™—INÉ HÚíõøìnŒ] ˹„4Y$%äSçYú.àÿi‹ô²òW•HÈ32ÎäwzÔÚí³*ÝW­‡7çà>“O½fw·SQ)ëþàßÊ¿½¶·I +endstream endobj 1618 0 obj <> endobj 1619 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1620 0 obj <>stream +hÞÌWmoâFþî_1É>²~Á6¹&Ò5 Uš p/½§Ê‚mÙÎ%´ºÔÙ™]óz†^¯ªÔ$2öìÎ3ó<3³&&LµÆÛ Ó\smð¸Žï‚Í!ÚDû!Ð×&˜L4ÓŽ¿øaú³-ðlθÁBãˆÂ¸Ó²!á 7žµz»s MæÃUãªVƒ^f˜>³õdš…‹EO¡"›„#a| ~ÄH¶Šd1Û†ºÉL· A[«#"ÅÉ;Ë'l ÝáXdÆcxÈŒàQk1Ž.œœh§%wF:/á"‹œvu͵˜ç"[—5]`–Ýjµ€9>çŽâ-¥‹¨³œE‹6ØrÅXKÕ’µ¥ ål6Kaì¦æ§Ð°ÖÔ—`qÓ¨7ñÖ3ê–雳tË0ñê);.›žãùÌ×{Y¢lã§Q†Ë<ý!W„²gydÔ1_=‰Iw©*'%-ËõJUÌV™ 7U.MæbL¯ÜôòæsïñÐçWnûoPÿÇÛdl—ùTƒUorwoTþeÌ7ó9ô£é¬ÀbÚzŽ£‘‹Ì¨Û63õO†…óª‹1“©`û—ìY²ƒ]éÍ´7Õ ¶XËUíL7¸ÙõÄÙL;Ç©@ +¼L_þ®¼%OqÀ_o:°IŒÛÛ;?ËÅàÕ¶m’fQ\L`¨O’§â N†:œæ{šÃЀ“3HÓ°˜Õ/Çb¡ýNççQœa<C=g°°ú©pN£Xú מå²å%]ÐŽ^Ý|°Œ‹™È£ßŸ„8»¤µfU#ûàý]pÓtí´‘ç&:z|¦c +e³ÇÚ”²5@J¤b…󇧕òâ¾}ÿöþn;!É…öèÄO rHæËiçCˆÀ{T(t‘ѹC~½ùä&$#ÞíI7IÐœa´HvDð})=Úw«¨h–qk­V}«76­1Œ¤’=Å•zdÕ h®_¦ +ü.\ˆ#%N—‹UsLE±‘CúUyMâ÷¨ø=?„!r&i&.›Ê¦Øgs:&;^‰ôf/?âå"Ÿ—ø¼Û'e§l5M{ ~«à+€v‹NÑ_’Z`B™TUUŠ½ƒ&¡Ð¼B;VW¨,,.Ô ¨ª(Kù‡æñî!@1ÑzžaÌu¥ÿé!ð2Wnë5’£ä³œäìäl¿Ô~5+Ž€+íwþ\wé´Ï ÿs€'ˆªÍà¦Û¹mW GŠÿ@]v°îTHñ|.ñ{ÔúPÿ–¶xPAÐþ7ñ‘xjÇ3bmfv[xZ98¶PÙm´P+r¯_Ò5@ó2J•j0)j^d£EŠ7ʤwéŠ!TUN$o¸@J__dGgÂ^ZƒY$Ð<#[Õð‡óûâ”z&™‰£z¨S8,Ð<+GõñHa¨×Me#1Tïà{ ¡eBŽõË(ŽŠ ?‰,'2Þ¡íϳh.0{|ÿ"4•¨ÎÐHUlL{†ùÒKQ6ïw€ÿt{o‚›ßÚ4+w5üæó—÷“)9 +endstream endobj 1621 0 obj <> endobj 1622 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1623 0 obj <>stream +hÞÌVOãFýߟb„j—d³»þ â¤Ü%”T¢ÄDMUù'q›Ø‘½)pÕ} û–7»vŽqà JUÞevvæ½7³›0˜iÍ_ f¹æ˜àR,Ï“BiSím 5O0¦ã@ñæ¹Ääàš”PÁR£…PË7!ã„2 ‚íw½Ý9›xð®ùîàz™Áú÷{cE·ÝDý»©*˜ñd 6ÍIGgå•9[‹ôãÙ\`1M=dz‘G™Ñ0MÂô ŽV&DAÁþ/;Ø媃<Ó÷ÇÝ.¡O|§hg9AgÇÅ Öýq§x*-á«ÇpÊ À8]'âààè¾mɹý”o³ í4ùIÀM˜ Y€˜G°ˆ“D +ä;•Þ‹4™©pÁÏOE‰§0ÒUZxs,íöÈ€ŸÙ Ÿé*‹1éhŸ¦kQ‡½Ñ(ÙG/l,K3}Î÷Ó3kùM,ÆsD½ +Åí/â‡yxõu{hn§žµ†þá P7ÚHm£›³ð/Äãc äÙ¨„æP¥JµöêÒ}Õx3‰¦q)Î"ñežl„t^–±|@Va×'ˆ¹Üµ5ƒóÎÔdIä Ù… +Me²(üÍG?VÀËn«BùT—JLõ—°¥ßè‡ÿèþEÐ +ºç¯_­p¥9Íâ()K…öo9÷SŠXÞIAÇ´[A•Ê)°ònyP v(°Hûìzy]‡}†8ä"Z]£µœ+qxBßöÔ&ðv5´O ªÃ èô¤ ±m0.\«ÉðÇ +¡ Ö¡:¼-%¾ê¶ƒÓ-»kò£qOÄ\v‡ºkw‡½wÑ=¶kŽ^Šw¶Æm]ºïßmÛ#½¬6^ò¸‚zÜÖán—¤OÎÞN_Áüd±Îç’¾$¢@úø÷ñÕÔdH!Jêðq—B­^¥Ïä' «­°·KtƒSÌq¸ù"øE€‚ôŠ +endstream endobj 1624 0 obj <> endobj 1625 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1626 0 obj <>stream +hÞÌUoâFýߟb)’]âe׿M¯'¥ ×Kt¹¢Ãí©*U僅˜Û²MsQu¨ß²³»6‚MªªRáevöͼ73 ƒ…ÖÿaÌ`Qjž > À <°)\›kßGZÿ Ñ\cP|ãƒ>±-ðmJ¨ÑZ£ˆB¨ÚMqA™уö«~=|. àªÕëÁ¨0X@l=[ñz¤ ¸I+^Ìã)7~‹n1’­"YĶÁd„y.Dך‰ˆ"ÎT®¬@`Kè<žñât #Zj!¡x„ŠCÂÓ’ž Æ€á—x¯x)¼†‘æYÄ÷­G\ˆe‡aÄ (uo)…ÜD5ˆåìm¢XÂÁ–›(ÆVªP +n:A£‹È™¹µ0¶«„¹‹ Û!®þe†éâÒ7L‹Ì"–n ¿}e· “ùŽ@™²Í6Ó + øúφÜáÊ^”‰ab¾z– +Ý¥ªT(iYž_«ÂÂ:ÊT..ñ0¦ƒß”ù +y÷<øÙö|¡Ûƒú?v“U°=ˆ4½I½ƒQù—1/W+ø,î+,¦­—8%/ Ó¶ Óÿ0,œWψLÛ¿î`ß’ìáHï¦ÝU3’ÐSí,èìùâì¦âT Z§/_†W/¶¯y^$)š«ùDŸg›êÎz0~{9Ây)ÜÏ. 7_Ïø<ÅÕý`°àÂ{|ç|¢OŒ‰ñí®‹]¡ÚuG´O?£Y‰¾9î:KxÜŒÐ|½ý}ýòn8è<ÓAF†óY™êqµG¦3ÈK8|mÛ;¾qÜ*Ù<¡2™¤g¸Ñ–ä4Û¤|t»Ý„Ä+Uý’K¬”M(¶T]©dò%Qâ¼çÕ`p—c4o>¥¼*•:ðgK­çzˆ“È W ðоƒL7ë±Â<Hz½-î>£¡sf €‘Žë ٔꈊ…aõU–¦|Z%YºÏæy•žaˆ& ò$½)ï6eu›%éD§££öʇv¬  w?£ÛoÞc5[{¯JþOqÏKÑÛÛœÑ\S×':{ž‰º-UÝ–X7¡ñ~B<4ïé‡Î­¥ëHc‰dñƒIaC‹¤›iâ%iYÅ¢hSÌ}91.N¥¤Žæ'(¹(Ò²ú±¡ûÚô÷Þ„Ô›ý>Þ‹Í*.>&ÈkÑuïµ·!žå'P•äÉ(‰qyV„ËSs¤ë”ÐÜ ‰Öi:RÆ a?èÕ='Λ¯T2Ñc~ò"=h8´¿ªADfBAÍkqG¿¸×rl`ÐÜ ‰ D¶A×uýô?ÍÉWÑí:ØrË·7Vs'^Éøÿ·ºþ½Ð +endstream endobj 1627 0 obj <> endobj 1628 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1629 0 obj <>stream +hÞÌVmoâFþî_1TÅ.°Y¿Û\)wørT9Â着T• 85¶e›ã¢ê~Pÿegwy ÈÐk/'Õ‰°™}ž™ggë0S.n†:ÌJÅ1Á¥Xž&…‚)Såe¨\¼ÖA‡pªèPüÛî¹Ä4À5)¡„ …" +¡–oB8ƪ[®”_ÕNðlâÁ«‹Wô M÷ˆ©f³"Z,âtÝ´bÅ43í·ð'd2%“ALZ:ÑÂŽÒBDÎ3O†Ç±ô€EV@”NàçB ŸPÜBù&îiÏ9 ø-ò„•Ü+Ûò1W‡ØÃô}ˆåQjɬƒ¸Îfå †µ·Žjq±L±ˆjlµò…B>à¢åm„áAëöZӖʼ4Ó"¶úÕµ–®Ö2tO7ˆ¡šŽŸ®´[ZKw-×#žÚ/2i›,ÇhqÕšXaÒ^”±ÖÂxÕ,å Y)—Ò0w-‹î¯c¡ºŒå/Í&rZøIu@"ïî_Ý¿ÐíÛ þÝÄ)˜ñølŠ“:½ò•œ×Iƒx6¯ð0MµÄÞ(Y¡µL“èêGÍÀ†UÙ„ˆP°þ×좂ìé]»Û² }â;²œù:;.‚X»v§Ø˜]‡ñFªæ¨yUóÖÕ„Mã«Úít¹è£¹Èòr¤Ž´‘îêÒæ:tÄ~€iÆý%†K / †A¢¡}pƒ† è×hlQÃÖ`\™MTû!¡½ÝΡ[«çò¸j÷ó°rtª¦#uš-«&œ ;Ž³Á]?„¿À÷%ÿçæ¦FU8Ì?—É÷¢DÍc<›k €æ|ˆ’%G@;öÅH··\ܳâÒ}ût7±¢=>žo¹Š«ñ|/g¾a‹>ælï‘Ák• Îçm™;šŸ¤?®oáìÿÞu_°è^‘§‰ºõDÝ^ÜÎu +ã_Ó ëé†á Û»yÞÌÞÕS½{‚íÏLÙ«§ì½ûRjùÕTŸk­‡]2¥g¢3· Âû3á_Ä#=“Pœ·ë¡wqCÜö¦Üvj§â8[ŠÔÄD| îä­ÍÊŠ¿IUsC²™¢ø3Єì¾ÌV1ˆñ}Í;ÖzŠrbhó¸æ1K&ûc{+Ä—Oë¡„áòpNÍëR¸"`M?Ë5Ñ͵'Us$b¡±Q†O馤àÓF¦+ƒ“èhM&rr9)[ÝFøJyx Û02.ʃåEAd~PÉ! +ƒæ>¦YJYNüŒá˜D@©€„Aó‰K…ŒÇk=o]Åi\…Eô‘%'~Ü{5†)àPE`¤•C8­FZ.¹yИûÄ+s]ß]¾“wû×á›ß;w¸Ð NÍ\YÙU£q¢?±Ä;Yz^Á*Jy­‹*Oâ”A•Á=ÿ̸w’¥³ã ¢Â\]r»}:¬ýŸ@´ïúû‡‰¤Áƒß|×ú[€¢…(ò +endstream endobj 1630 0 obj <> endobj 1631 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1632 0 obj <>stream +hÞÌVOÛ<þ?Ÿâ„4jlç7Ó&õetbPµhZ^½ÊZ§Í»ÒVIë&>оåÎN¡+:UZš&îù|~žçî’rZ{oz†…å;°ÜЇA®¬ÔúGZ{‡8ÈÔâ~ðÆÀ:‡Q&@^X £PæFÈ>wA^YíƒÖ!x4„×{¯wv “RÇžóäâ"› ¡=)Už&}Eþ•oq'§ÚIPǧÜ÷@X Œ¨÷雑ulº«’Ê!™ à<'ò+¢ —0½H{ +ã™áÐúš\ÌƪÐ^-iù‚>²õ©çNE@Ý1·âm¤0“¨î/“(–vpÌ$Šq+UdŠ'ÝðF™{ a¯æ]B—zöã¤áá0 ÁC.¨°áx *»G#fFUö¼ÈHñÚÓ‰Öݨʴ’BøÁB-°0^aùA<êãž.^ªÈËûŸ÷Ýkºm&ê_ìf²àø4Ô9¸©Mæßi•?ܳ9C7ŽJL¦cØ…ÊIÃq(·¿ýj«5P°üSÁ>¶ô²Û½ª#ùU9ë:ûq—Ýΰ+[À7ñ¸^Öž§¹¬ð)®²²?‚Øž%å(&zâ»Y&Ÿ¯ðè'…ìûv§‰fyôßqóC«»ÿÐsd)î1Qh¿:Næø0xùXLÞìöHghγI™Æv:½,waëY[» íW•fÄ¿¿?T¥¯½c;&1yQ+þ/À€?¾èÔ¸Pëb?iâG»¦p?Z ºø?å*ùüâI9;k7ÏX:Ó Ñü›æ°¶/1ŸeÉfávOeS¶OOž^hXÓ5²„dÑü{ÕÊðÒ<Í35){%&oµJÝi™hM³é¤¬ŽduKm „¢+m íOår§.Ñ|KÑŽËøyû@­W¢ƒ{Jô<àÎ@Ɖ îœ¶Oäã¨+au¦nÁu¦È#¶·¿îj÷íyYWm@þx⃵J9³cÎ7”¦Ãã÷½£õYŽ/‹‘¡ŽæŠýö¿ßþ”>ž:"Ñ¥ éï· ) ›:o¿`ÍJļ\½# ¿®0k|?õFÉLm°ý{òÃñÚèõÚE܃¾œG}ÏÔõÍÿ·Ÿ Ô¸ú +endstream endobj 1633 0 obj <> endobj 1634 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1635 0 obj <>stream +hÞÌVínâVý吝”•]Âå^{۬ĂÃRí +ΦUé.Ä+¾j›ÍFÕ>Pß²3×&àlHAÝJ%¶çÎœ9sfÆAÀLkt†f™æZàqlß‹C*µ©ö&Ò—DSM˜Àñ/Â÷˜e‚gqÆMˆGÆíÀ‚hŒ7\ØÝi¿êíðæC«ÑªÕ ŸÂg–¾š¥ñb‘,gÐ]æ2Æciüýˆ™¬"“É, ê‚ ×¨­Õ‘òŒÕ鶂Èx"Sˆ—¸Iè£0Ž!œ‚ÈÓTž æ€ðs¼XÏeF^a¤9v€µºÌq™VÀlŸs»¨Ú5™çnÏQfÚ•sT‹Ä²Ô!ªñ U  +m+ ‘N©Œåʼ ËfŽ~&FÝÁ[Ϩ›Â&3uÓøívר Ïö|æëýtUØ&›q†Ë<ýƒ¡NdaO³Ä¨#_}µ$ᕬœ¤4M×+eAÉ…‹‚Ë_†Ã\Ìiã7@¼»>z2Fü©@0sArºBŸ¸þ=$ðHhß-7‹› Í%:×j_#eÃc:w šK.˜í^ÎËâÐ.ñq’d9‚> 6]§É2§B§«M~/F£¥:¨ÁM·½…³ Îfðâ¼"Ú9<Â|VyqHúlñõ|ªøC2«Èo"ÿ°dáêp§5 [SQ[>û- ûbÛ²Ê)^Ðú2¥:ÔU;ùÂÅ”žO:ªB«$;5‘:8ì7[Ý^Gõí3ƒëª“•6âÁA"ržÉo•xÐìuBš%5NQ>Š%šwó†Ì•~) |U¾£6ÿ™‘º¤}þ,'¿oëbžžJ*šÆŠêÞߪ™ º?‡í7×ïûh¬*ú©SùÇF.Ç÷{©wƒülÆAøÓuØkýR.©ÂGó^Ši ŽÖÿXfмšçñLžÆ‹â®ÞEÍ¢Ý[Võ×ôšÚª»ú±œèÅ+ÕFœD‰ÂÂnçmg“=FBÛ¾F÷`eÓ¢_ŸF%ăaÔjö«âìSo1åAoÄÕ&ŸØ( +»º´BZÔ§©d{°Ç²é“*9þ^žF‡âšQzU>ûs³®?7W*é,YÆóÓHQà Ûéöšï*¬*ÿEVÐh>Eªk4gû]ÃßL 0Q;J! +endstream endobj 1636 0 obj <> endobj 1637 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1638 0 obj <>stream +hÞÌVoâFýߟb©ª7Àfmã$%Ò5pw©Ò4ºøšžÎÕÉœƒÖæHZõõ[vf×€pW©ªTG²ÍÌìÌÛ7oÖq`l¼¹u`\X¡ˆ à PÒY?ÄÖÉkˆG–ã‚À?|8QÈ=BOpáB<³fá¢Ýñ à‹pÚ¯¬v¯ÿ|ÁÅÉE£7Š9÷ìùX¥³Y–á2/¥¥É~‹ÄJž©ärσ–ÃÀ‡¸gµ0#Õè77¢Ü:õ;™¥‚4ÂbñƒÕá—ZD‘®ŽÌ°ôÓÙb* ŠêÇVàò0ÀÝÜ€»^§ÓÞŽ„h›}k*´Ùàn{ljdQ€§HƆªŽ&¨èlGk^³ãWÄx¾!槔ymîÛOà +‡µ|| YËu"Çå®í2ïáÆî„í0â‘}£æÆ6\J`í_˜öHcWEÆZˆ×žçÄ»fU“®„+N§Â"ƒå/æók¶ñ.œÀdÞ>k?_zþðÿ&ëÿ8LwÁ xD=XkSµQù—5_M§ð.OJl¦g8…T¬åyܱ¿0çÕ–C®¡ ü+‡®Vp€#½vßÌ`‡w#gzÁà Ä$íí´ œ +Ü‚¨àã5Z°ÀVY^Ž{4_–M8J’ ïÑqÛ‡o 8jÂb‘–“ÖùPŽ24_ËòôtYÈÄNXÂÎÖ’õ¸@TÈ¥-…Ö­Ããc¥d¹$9ˆ³­ò}bºG0–ý'?šqôpÔÖÇ„ÞÇGC‘cY®2…€¡ºH§Óûtð9FûÓB~’0hAGÜǸ4ãnŒé=RÞKËÆ0aðÇ3„“ê`TWÖ„‡&<6á©Iæß›0˜/1¤ ¢ ¹\]¥O„Iíìµ"ïkcŽÅŽ³V€èÞ·ø7I‹i³ûü·“LN‡ÇPèç¡ +ùrök“îôŠR.ð7=>ì6ÔÙp0‚ÄÆÐ6|Ó¥’ê)%L÷ŸÑ#Û ÛK hÙÛÔol¶³‹¬JœØÓy>NØrHé—UgÈÁ`ˆo}¥æŠ4÷5ÅÁFr·7ý‹ËWW×hïÇš5i÷èµµ?Ú·ú×âÏÓ™4˜Y-ÏÉ /Y:Ejð“¹_QÕ¦õÌËÙšiaÆ«Rd•ž:GÒ"‰á'²»ž›­{„î¹Âä™öBß›ñE{­Ž)¢wqÆžbF2ùz&BSÛÝwN˜¹Ìj4mïõÓ‡Š|ZÞ:§{5ÎÉsÎ7É4©E©³¾˜¥èЫ«¥$Š·—ý«Þ‘V·Ti¶ž ž£C{š§CÜíµ–ÅËøFº1¦1ؘU¦‡Â0FýÐÁ#Í-Œ;Ð:*0›A£s휞R#°ÔKHhaë<˳2Vé© +©ð@øj’M%¢Oô,`Q½ÙIØÂÔ¦“ ñS¦Ç²/2þ×wyó*~û©‡ŽŸ¯û‡6ƒ—>I³!8c½yþ] «”†¡„r"ašåÊ9ÜÓ}NÑtšÈ¢ÅbÎíó.Ùý¯ ÛÚ÷|Öð;ý·ø`Ê, +endstream endobj 1639 0 obj <> endobj 1640 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1641 0 obj <>stream +hÞÌVOãFýߟbtR]’e׿ ¢RîŽT¢dˆšªrc'ñ]bGö¦«îõ[ÞìÚê JUÙÍììÎ{ofÖ0˜iï‡ f…æZàQlß‹BkSí-×N0àS™@ñæ{Ä2Á³(¡&ð¥FñBíÀ>Á e6ðí7½Ó=‡øðîàÝþ>ôsƒùÄÒ³Y.—I:ƒ^*â|Nbãwþ F²ÊH&±,h1Â\xGká‰2ÎDÍL_ž­ŽÄaç¦\åÿ¨„â*7IOSy&º·árµˆ éÕåšcÈÕ%Ž Ä´‚ bû”Ú%k×$ž{·ŽrÓ~°ŽjI±,µˆj|Ó*P +€‹¶'ŒÍœJË)•ù54,›8úLÊŒ–ƒSÏh™Ìg&1uÓ`øé•vßh1Ïö|âëý<+mÑz"Àp‰§_j%.íy‘-Ä«g©^ÉJ¥”¦éz•,,¨°PVbùÇpˆ‹1mü¤Ì(O¾}}n¬é¶›SÿÇn* –K|™ƒ»â¤î£^yeÌöbƒd6˜LK/°7Š87Z–E˜þ—abÃêqD¬ÿª‚=SU°‹=}ßîNÙ„ ܲœå]±ïÛbW ZÁWáV“ò™dëTÀ±4Ó£ûbt$ùÎS›¾('þÓSkÅM"&së«PÌÑ>6àïÜ1zXÄ€÷D¯æ6?ýã¬=ê_Ü£ždŠQR´Ç7gáoãc ÿîÛ3Eó*OR1ëÓl-šð¦QÀ›¦t_µ~ŽâiÒG +‡‡³Xàù2N>F:cã¨^€ЀÕØõâE!wmÍà¼{ y„$òˆZ…BS›ÅŸy~BóÑ%ð²×®‘¾©„.1=Ö_–"|§ÿeþ ¼Í{ç¯_/q•9Ë“8C ©R…öï92Š$CkZÒß±6¯“9ÍÔ &iO‚]/¯›°‡Ã‡BÄ«k´VÓQ-OèÛ¹€FoGÐ@{dP†¼Û—6üŲÁp¸p­&£K„‚Ø„úð¶”øª×á§[VWôLk\%‘˜ËêPwíî°÷/zç|»âègxGaiÜ6¥ûÞfÛ +ëU¶ñ’ÇÔ㶠›]’>9û0<}ó“ź˜Kú’ˆRéãßçWKÐu …¨ThÂç] +ÁÛýZïä' «­ˆ|‡è†§c;tû 6¿øÒÎÃU¼ë÷Ïζç 7W5ñ ±Y<à€ÿ^~` Z +endstream endobj 1642 0 obj <> endobj 1643 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1644 0 obj <>stream +hÞÌVoâFýߟb©ª]Že׿4‘èÁ5T)AÄJT•ªòÁ›ÙÎq§*¨ß²³»B$Í)RÉvÞÌμy;³†ÁÄhürÅ`R¾ Á }p(äÜ?ÇFãñØ`6Püà âØ8”Pâ¹A1 +¡nä@<ÄÊ\ˆ—Æf«ý<ÂûÆûZ z¹ÅBâ˜Ù$Oæs‘N “–<'CnýÿŠ™É&ŽuF˜ïAÜ2êQæª7;”±Uè>OF<‡$ÁMnÅ·FD(.¡r‘ô´•§ÀÐþ’Ì3^H¯vlø6 |¬Ö'žÄv¢(↔ººn%…2¢Äv·Œ(–tp”ÅXK)"@£®t‘œ™W ãxZ˜ßËq‰g~›2«îák`Õm2›Ø¦m1¼¬: Ü $¡ÙË3î†%X> ÌkKY¸ÆóBXuäkf©Ô]©J¥’¶í•*,ª¸P¦¹ücyÄÇœ.Þ) täÍóÑ¿ûž/t{›¨ÿc7µ ŽOB¹«Þ¤þ£QùÆœÍÙ úb2-q3³ÀÑ(xnÕ‡0ó³e㼚|Dlÿªƒ[u°#½™vOÏ`D"_·³|Ag?À îfÚ)N–@+úê²üêe}}Ìyò á“M/z²öÖ®5÷Ê)þñ‰m·a7:^ä"-ÇsœÝ•ïàh0HÐ0°Nvº³»´„S kó*%ž•ó=ð:Äæb‘”ÓúÙˆE—#^§wó«©à³Q1ÀL þÞN6ÎÐ/ǵB¥?ƒxi+Œd,9ƒ¨Õž†ÓÜ åŠ7„Ö‘´ óí©{‡JÊPƒ«óNû¢ßpôN§@x¤ËÕättDg£n2çºâYR¾¼H¾âñûPß-™åV‹r‹¢`dÄ1ÉvBá–YhYn÷Ë‚×jt„W‘¤T˜q_;àÚú™HEçÉgžXÝæXNÅŒc ØÓ*”v`-tnI à_d§TÝñÝ)à÷«ÓkÆçµ.ÑÐm¨ª.­ÕNö{4ÐÊÒJX&i)árÊa&Reå=“Þ³,ì¢Ú[OÄ٩ĽôTk¯; ñÍÈí—ìaIrãקÃN×{Øo+–¢NAk?°¤á Ùa‚#¬…Gµ¿hþÞîæ¹’%•¿jg¤ý¼2käìoM›.‰?ì‘ /exé}`¦ž\[Ä€=¿Hg-÷nûFˆËñGTy)õy8ùO{vÝi>¿cº)~¢¹$,ñ çk‘¼-ÝþeÜŒ;—Ýo ý¢Íªà,<-¯JÜ„Õö þ Ú~V&¥ÈÒêóf¥ßtZñùëŠíÙ«1’Ç·¤|øØx=ëÞe§¯~)ý+ÀíõÝ +endstream endobj 1645 0 obj <> endobj 1646 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1647 0 obj <>stream +hÞÌVmoâFþî_1=é"›À²ëw'j¥4Kª\Š‚¯×è¨NŽ½€ïŒAk»9rêê¿ììÚ@H!=¥TÞõì3oÏάa0Ѻo† &…æZàQlß‹‚àÚXû1Ôº} ±ÆL øÁù±Lð,J¨ áL£h…P;° ŒqB™ áöA?ëõÁ!>œvOa æKŸOD4›¥ù.ò’‹qsã·ð'ôdÕžLbYÐa„¹„gZ-J?±š™¾´­L_ó(á¢<÷Â?i¡¨B¥’Dš +™¢è}‰f‹ŒÕ 5Ç0W—8.Ó +‚ˆíSj×Y»&ñÜÕ:ÒAL{kÙ’dYjÙXs(†ÀEÛ_#ƒfNÃŒåÔ̼ Ë&Ž¾“2£ãàÔ3:&ó™ILÝ4ÞýZNólÏ'¾>óZ–Tq †K<ýC­ðZ.ŠÔè`¼ú<—Ä+Z©¤Ò4]¯¡…M,”Õ±üi8ÄEŸ6Þ)ójË›ñÑã¾ña/cõ S»`¹Ä—{°*Nê>ê•éó$Ëà:LKÜLK/°7 +.ŒŽe¦ÿn˜Ø°:Oˆ +ë¿©`ÏTìbOoÚÝ©›0 [—³œ ØõЈ½iwŠ])Ð&|un3Y]‹Î £8DåôèhÂËÁ<ÍË‘~ð¥-áË‘q¼©SGòr¶ßÞx!PÅã‘>žWe^txÈïÈ€W¸Ò6¨h|m8lí·w+xôùIX𴹜 8<ÿØ¿|7<ü|qý£ùé÷³ª˜*P\Óp°Äßý·„ûTúø•‘„¶J¿ ÷/Ä@x2è]='X¥‰1¿L\Ãs4ÿ¬¸AéÂëB‘Àzã6»†Òá4ZðüRч7—ÏŽ^ê6°'úr™ýgÑÿ±gi§|-l ø®Ô»Þ"”™lÕö2?TËË%>Ê—Œàe…(‘ýûéA幤o™_ý%PGÖ„"G\ºA®Äi”e·Qü9\.8Ê?rˆÛ I¼âe r^ªÓJ +ÞáÁz•T 6Û×gW· }„Ï…ÔTPŠÓ(ƒÚ)y˜‹ æÁ¤mø´ê`ß·!žW9úÏùÝe´äb‹ˆx DµåL®¢ß%óêA¯AIZ ¹Œë¤„|mlã1M\õ# /v-«[™´Šã'’Y ‰ÚÓ”gI +5îB¼O—Îïp|ÊC^Í~mËûJ¦(ùŸåp³®Œu ÔŒñj§Gz¼ïõ“Ža¤«#:›ç“‘Q%ðÝ÷P5›_Ÿ´ ÎzBÌ…l¬ãÕËõ/3WŒá +endstream endobj 1648 0 obj <> endobj 1649 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1650 0 obj <>stream +hÞÌV{oâFÿŸO1ÔÖ.ÁYÛøAÒDÊî’*ÍEÁí)-Uå3 l +kËÞ—Vù@ý–Ù…‚!'U• +Òz™÷üæa\7Þõ]WЇˆÅÐŽCð”¼1j¼Io]p!5\~ñáÆ‘ã{ùÌa$³C+kw|H2¼0· ɼñ«Õí½…À‰áìà¬Ù„ëÒvcÇ·òq™ÎfBŽáB*^ŽÒŒÛ¿%? 'ßxò߇–ë¸aI·ÑB‹ä'Ó7/&ÛÚô O‡¼„TáCi'wŽÃP…‘IzZR è}NgÅ”W$ÕK¡çD!f:AŽçw:pÚ1cm“·†B3 Çk¯1,ð5Áx‚ª£ê2ÛñŠÙ ÀøæÇÔöÛN`=€Ç\»à5²[ž»žãYžíâ:²Ý¨ÅNl]—¹¡ ï3vèDÖ϶æpC/+a·0^+—„»F•’žF TÜÎ"æšXþ¶'DŸm<™ËÏÏ?·=¿P쿱ú?ÓUðC'¦,{“…/Få_úˆ ,;´2›YðÕ1 ù¨ì_quöñä¡àÈØÏ ]­: kT”BªÑÀå÷jöÞ¼÷SépÕK ¹½îì 죥 ßa®ç.mdù½DYÇÀŽj½@†ù¬¸Jg¾BHºiáä;-3ÊKŠd` m|’«Ö æ‚tÙÊûÙY.%Ï”Èe¥Å1,ÍæÀ†¿VÍ-CÏW &¦b&ä#"çrúàvšU s‡É÷ +„„\’°ä5æ(UÕlÕ°t 4NŽ!Ø=^‚= C>ứ`¬>¡».ðXC[x€g|Mpá ÙÞþ´ˆ+ÕîðPÈJ¥2ãX€½¿%ýÙPÅjj­ú 40+:Z2¾¨ú+S‰?ùpaà !k½{•œ÷ú¿ôº°Šj<Ò«fÙ¨+]H<éôƒ@‹ãÚn]ÓzÌØz¨ƒd^QÓÕÔ—†€Ï/Ó|åÕ‹º{|³Á‘þ‹qqDInom*ÄvoFbŽ¶»Q1¢kÄëÕ6;TjF“ú›‡Ô['t&HÆc©7¦á¬T™Í +¼Udhí…*ºèŸ_ô.»{zSÁ1&´µ6¢CúË°úA™N‡*-š]ñtQîLQî°(sêN²DˆQ5tY®S…䉩 Üí( ~ +´f¢Ñ6h +ÈL‘ª ºÚ>éP´N„*)ÓO¼¬ørÃmŸOÄ”cô‹L£S³A¥Ø…ñaO0~²ôY-_øîâú49ÿ½‹Œ÷W½]É,7PýÞ[Šàtusù­‚yjÞfçâ.U9|¤“6,LóÅÔÕ[YÛ¢D^‰l­!hõ=u쎅º––Aí’}ÜÁ«æBe00í»;Þ,­¸ÁÉT‚ËÓÛÞÍá+¡.±Y[2zL^…g‰í¾õÉ1cCôÕfs…öÉO¹:7ø×åÅ}ûX +endstream endobj 1651 0 obj <> endobj 1652 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1653 0 obj <>stream +hÞÌVënêFþï§E"ò6°Ù]ßµç@ª4A°M‚JU¹`À-ØÈ6=áHçú–]›ÒD¹PRªrÛefgæ›ofls˜§ßö9LsõÀc>ؾ ƒ,2&Æiœ^pà 'Àð ÷=j ð,F™¹0z¡Ì,#Ü0nƒüdüh¶ÚàP>ž~<9nF¸O-3fáb'Sè$E”MÂQD~’ßa$«Œ$¨eAƒSî: [F=ª8#½¾ò­]÷¢pe&c¸ËˆüÕ(C¦ŒÔI¡OÆÚáb9ruª- Ç0W—:.PaAÔö³Ë¬]A=w£G:¨°é‘-E–¥•ÈÆ_\š¡PiûbhîTÌXNÉÌ÷!±lê˜kŒ“†ƒ[4÷¹ Â„ã¯_ÊipÏö|ê›Ý,-eãÕ¨âRϼ%Z•ò,Iñši¢ˆ×´2E¥®Wу + ã%–?ˆC] cã/ã@éy»>ùûÒºã±ÃxýÓU°\ê«lš“¹Ofå1›ó9ôâé¬ÀbZfŽ³‘GiXåæïDàÀšÑ˜j(ØÿU{Bw°‹3½w§€nÙÎjƒ‡]ØÛqg8˜«àëq«Í£W‚âèÓU¸ÆAüøù¶-ECëó/Íse®mäWoDš x™ÅI1š“tUÔáèº}5åŽê°l|3Ž&q7,fggÓ¥…†54‡dHÎßòK…¿¡øõ££0¯P.Š›òòçÛNóìmç]aÚ¢¯åØŠ„-òâ6ÿнÙ”›ë÷€ß­r•8Íâ()úV¤ªÊÿžt/-Â"NQš”ù˜VSîR: Å+Ô + ¬Ò±»ZÜ×á—.y-ïQZm;åð Á­¨áÃj(fB_¶»J†¤áâ^oõT ±»ÃÛ“â»NK^îÙ^ãfã.3Õ(?$öîMçZî×Ý/RØuuüx½o ͪÚC¢ ‡:¬™ôÅÕýËwd~1_å3•¾JD3€éã÷ó»)¨©>PDT,Ôáó!‰Ín»·_çjSD~@týKŒ±ºÐƯÞ5û³púÔ—ƒ«ýsPÆUO¼C±žÿ»9|yI÷¼âyéäÉÌp˜½r!¥«¤ÀÇ*v¾y¸ûS€ üÇ +endstream endobj 1654 0 obj <> endobj 1655 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1656 0 obj <>stream +hÞÌVmoâFþî_1Št’]Âfmƒm’»“Ú$wJÔ$ˆ¸=UÇ} `#0È6MPu?¨ÿ²ÏìˆÉK«Ju"¯ýÌÎÛ33klGŸomç†ç’/j¹’²ÈˆŸBãè“M6…±a;$ñ‡Å|á:ä»RH‡Â™!aEÈVÇ¥pˆi·(¼7¾šg矨-:=:m4¨›Yv \s>γY’Žé"-¢, #ë[x O®öä×¥¦-l¯Má™Ñ„Eö3TONÀ¶•é^4E Ò}ɬpbt„„Šd%Þé¨ |ÐùÃ`¶˜F9ï: Ͼ‡l=ÑöH8n§Ó!Ñ +¤lé¼J6„ÓÚ‚,Þà*!Ȩ¨ê(‚:a+XóÂ1Ûí’·­‰¹XnK´Í9Ò¶šm<úVÓ±ÛŽéX6îÆ]«iû-?ÙÍæ-‡YžðÍ_-%‰4žå‰ÕD¼æyaÊ+¯úlmeÁEšìOý{ Za’¿øxë©©¾ŠôeÑx9d_d9~S/B%z¡ ãÝC0þ¤.0ôºP]÷p ƒeH€×–X°w¤jjyÈø>‰eã±~óã½&\-^è¹']ü}i„#cz8=À³î ¸«i8üÚù[€J]ý +endstream endobj 1657 0 obj <> endobj 1658 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1659 0 obj <>stream +hÞÌVmoÛ6þ®_q0TœmšÔ»œn@Û¸™‡ÔMmµÅ0÷ƒbS¶<¿A’—Ã~Ðþe¤äØ®¤h +T ,êH>ÏÝû“8LöåÃ47<|€x`3È„‘/#£ýš‡(1¸ ÿðÆŸÚø6£Ì‚hi0D¡Ì mˆÆ8`ÜèÖøӼ辗ðªýªÑ€ëŒð€ÚæzšÅËeºšBoUˆ,‰Ç‚|Š~G&[3YÔ¶¡Å)÷\ˆ.Œ"Jž±YÄVÐODñj3Í2ÜÂä&¹ÒR+Sä€î?ñr³¹\Õ × 1VºPËè0æè¨=‹ú^5rPË9˜Gµ¤X¶šD5vZ…J¡pÒ *a¤ÓÜ-•±]­Ì›˜ØuÍ;°'-‡>iY<àµL‹pü ´Ý!-î;~@ó:[kÛd;.€xÔ7?5#´=ËSÒBÍõJ +¯deRJËòüR–¾0®}ùŸ¸ÔCN÷4òýýèñÔý‘˾ê¼L‚íÑ@žA•œÌ;ª•oä|±XÀ Î ++Qš&ZÔ&œ);6ëÁÛëî ú~Êå¿47 3áj£ÃîÇK¡hš'¤¼Êí*!*„͇x±•›žyþÕö·Ë‘=A Óï螟8q*ƒóÛ´Ï¢•ÙQbDw›J«)×8Î<<ëè¨Ñ¼ø ûâ +ΪŸÝu“‰ø¯“G²#êÕõúQ÷²;\a|5Ý°žn zý˧ì]=Õ»÷o£®âCûSöë)ûïß¼ÔZ~3U}{<®Ñhuv˜¥j‘í6 qÛo½îÕEm¯·*4Õ÷=Á…Lô¼ß†ÅLÀP¡T]_lMXßäë…(¤ø…ƒfŠµê죜lÑÃY*Ñ“Ã&½“á±½q*©0<Ðsµᾨd=£ê¸öŒjCM4*MdOnj4O4ºvM££u1ÑýJF[˲·Wñ~Åεd®™£ y%â!!Ê‚fùš.ßZó=Qð{ã³ešâš +endstream endobj 1660 0 obj <> endobj 1661 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1662 0 obj <>stream +hÞÌVoâFýߟbŠÔÔ[`³ëß&J$z†*M¸‰ªºª|°€ïˆlçwºtß²³k¹ÜA(R ØËÛÙÙ7of8Œµã_ûƹæ˜à2,Ï“A&´‘öK ŸsàŒ4nÃ>¸çRÓ×d”Üi ½Pfù&0nA0×þÒ[ís°©oŽßT«ÐÍ÷¨©§ã,º»‹“1t’Bd£h ÈßÁo¸“YîdPÓ„:§Ü±!hiuô(÷¨‘áIßÊuODC‘A” á6#Á;ͧ —0¹HZÊ2Æ= ýÝͦ"—Ví@s ê:­Cm¨aú¾Ôò³Ê¸•jÕ †õÕ$Š% L5‰bƒ˜æb_îWí[@þˆËžñGTÙ•ÿÛLDïOþSÎn:Í—3V%Âßh. K|Íù&ŽK·w4ƒÎõÕ+h%œf±HŠ~IX¥ñ'ÑöÒ"*â4‘M~ Ðo;­àb¿ ‡rue—”··ýYw¯;WÁˬKie¯$×Meß×jÒüh±‹¬ß >ÔãÇ7v˜ +ÎÔÓ}.”¦óË?úûG}>½Ï'*tUO2ú£~>¾6||«Ÿ^Y +2ü|<A³»ËÏÀwȪ•P9¯þºß‹WÔÚ­º?‰fb·ÿãþ`2È +endstream endobj 1663 0 obj <> endobj 1664 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1665 0 obj <>stream +hÞÌVmoÛF þî_AH!Íöåô.%ë×QmæÙJ¼bÕ:ÙÚü6In ûAû—#ïä8N£4Æ:``y¼‡’§0m_ ˜ ×û`û.XrÑH¯£Æñ¹DiÃ0ã> ßc– žÅ7!Z48¢0nD\pÆècãgí,<‡ùÐ=î6›ÐÏuÃg–¶šæñb‘-§Ð[–"Oã‰Ð‰¾ÇH–Šd2Ë‚¶Á ×è¬ÑFDŠ3‘+Ó'l =q"rˆ— Œr=ú­0ŽG8"OSzfÂOñb=y…QñÌÕeŽ Ì´‚ fûœÛ*k×dž»ÝG9˜iïí£Z$–%7Q;­©P¸iû[aˆ´áTÊXŽRæm¬[6s´[0¹¡·\zzÛ4|Ãd¦fê~ûÊîêmó=ŸùZ?_)[²™” »ÌÓnt¹#”=/2½|µÕ’„—²r’Ò4]¯’Å*.ÜP\þÖæbL¿¹á(äÝóÁϺç3ÝþÔÿ±›¬‚å2Ÿj°mNî>˜•³3ŸÃ ›ÎJ,¦¥8…Èõ¶e1Cû ›8°šH˜¤‚ý_u°gÊvq¦wãî¨! Xàªv¦:»‚Ø»qç8˜¯èËîV üLâBŽi¯ßAstùë0z÷&<Ùõ¤Cœ=zV~Òuž-K4§c-]mʼh‚£„Ü_´`Ýþ.iÖËÙÉÉT÷°¼‹±6ÖÇú© }Sã}.âߟpû«fëQû±rÁ»FýKÌÙb¥®r>>†9žŠoE~/|Ì’rö¨:Y +c ]—¢Té^‰òäd£,As9lðjS)ßûÌÒzäx>ƒWÀO!ƒoAá } µÜ,FpÐ,¡ÐµÙü¯R`Ÿ +QG³<‘Zðr¾M«Eî/“¬(ëÊ¡ÊL)VE—r£ £ÞYt GM‹}_®<À|Rs£NôbOðMt˜ìÃuŒf:÷„*ƒ š+°C¤§Ð\qÙŸµ”ød)=ròÆ{¢®2kò…W¯ Wžµóñ vd§òQí†ýN·wu!«‡ö©Î5YýR÷ÖóB|­ÀƒÎÕEH]$é‹·‚b‰æ]§!s©_žæìÙ÷Åf:Ï>Q’÷›ÅZuRÍ ™®©¡(ëû“BŸãFï§ðìõõÛ>÷õ¬œÓ¬ÿ±ËÉí½À»~2Þ üñ:¼ê¾«FS¢£ù.@š‹-4š?»ŒkYݬh>Ëx*ãtƒ?¼‰:ªÌ[F ¥XXÍw°Ï#3ÛjÄe„aïâ2¢÷ÔŽJJ“§îK‘Ý>I7¦h‡Ñéeu;ý}Ev4&ñúÃÝQùäÀÊ ©2׃nHùbµ¹=Ýþ‡òt= ; +endstream endobj 1666 0 obj <> endobj 1667 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1668 0 obj <>stream +hÞÌWmoâFþί˜F:i} ›µ ¶!w•¸à$T” p’žÎUå`›ø Z›k¢ª?¨ÿ²3kóz$åUj"3³ûÌ3ϼ@tWN/‡:Œ³Še‚-¨9˜dT‰+¼Êé…:xqE7@à/¾éŽÍMlSpa€7­Dá¢Ö0ÁáƒÐkàý^ùÄÚîÔ¹ç§çÇÇЗšîp“ÍÆ2˜N“t 4dŒ"íWï'Œd‘ nšPÕ¹nÕÁkWªˆHqFêÉp[A¢ Œ$iwRó>W\àA—褡N&ÜÇ`:ŸDr½ŠepÛÂl-^·€f£Ñ^s„¨y+)”ÕàFmˉbÑS9QŒ•T %PÐYs–ºg½^ +cÖ a~4³Æëì ¡kÕ:>ÚZÕÐÝà34_•]·k¶ÃÖ—³Â.F9h·Ù­¦Ú¸±U¦j5]à…éõýçlR åƒwïAìfAÍÊ(äfn¯ C´÷ÝóN«Ûs½áfüò®Œr ++S+» îcÒBG–¸Lqy.¿êÌO AJ…‘>CYäy0™Ü£/ÞÓ<ú$‚Ñ (½fi;ŠƒÅ$KÓ°0cAd;ÈXˆ¯Á{E9=… ôÏ$¤³4,päbmé“ÒÂfÉv!–£‡h„^EÌg£çÔ_Šì³É,ûÚ"„ÞâdYP ñÉ•r&©ð{K4Ò£{¤È:ñsôÜ)Û‡ëË*ô®{øQܺézƒ›® ÞǾKfØ-áºÕVUl[*öI¡yÙº+FÍ&™ƒiôÒXï¿…ÃtÈ0›#üš±o¢ö&4Qh¿j ÚÃ~ë¼Ó»ÜÓŒ1Z!lò3Hà,y }“ +NC7xÂEl±LÕ’ããU½4ÞŠJ·…öîu¢é^çŠæUŒ è)™¨Á¾‘j?ü]§í]QoÂmhÂEóú. ó‡[ZfÏÀ'1ÜßS ´«Å¦4h'ÁXa­àš´;­K´„‰ížKPþlRPûxC¢2>-Æ"Wä2\6V¢Öû™PK¡» +vUÿ¦ *5øøµ\ï¹ùwr½ë hŽÝ_¼æª" õ1–ëþ°ÍÉÂcj—ÿ«!»M‚¬ØŒË;lÀn;ôÕbµ†žIòkóµTðë™è£ ÿñwØâ÷²¿> endobj 1670 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1671 0 obj <>stream +hÞÜVíNãVý律®´ZÈåúÛ†¥›xi*pØÄ¡ªÖUeì›ÄKâDþ`‹ª>Pß²3v -Ý¥RÕDŠof®gÎ9wfl¦ÒáÙH…i!Y:ØÜñ@ç i"½ ¤Ã÷*¨L$UŽ_¼¨ŽÍt l3®A°8FaÜpub\pÕ€à³ôQîyïÁdt»ûûp™+ªÃty9Í£Å"ͦÐÏJ‘O¢X(?ßc&½É¤1]‡ŽÊTË„ 'u0"å‰ë•æPì:ôPD‰È!Êø!W‚O’Ë8ÞÂé&Ú©Õ;SÌÞ/Ñb5íòÉ4\äj1Ó¦é®ë3Άµ¥1Ûjý(ÓŒ~T‹ÄÒk'ª±ÑÊ­r†Ó +C Us­Œn6Ê\DŠn0S¾«JÇÄ¥­t4ÕQ5¦Éš¢â¯ÓØñ¢Ú†í0G¾Ì—-©â‹Ùò•R{DcÏ‹Té ^y™‘𵬜¤Ô4Ë^Ë¢ºk,\m°ü®˜ÌÂœþrÕh"ß_ý}êúÌmÿNÔÿð¶út‹9tmqrëQ¯|eÎÓù†étVâaêr½Qˆ\éè:Så[EÆ•EÂj(Xÿë +¶µº‚-ìéûv7›&t™k5åL ÜlÙĸowŽ]ø>~&+Å’ó4+'¡\õÑ~:Ÿ{ðºÃìÕdIçÛDLОúˬ'&Q5/ŽnÓhXÍÑ*üh!B9 •P9¾/c“dëÕé&˹˸N€C +oÛ¨)Ú·£fÕâ"ͺšË"”1"¤ûû¡RÇ öþý¡÷»ã`„èáurOí”m;U\•h=îD¾apð0ÙzÑâm" yƒ·[Ò-úëÛÿkœ«¢Þ¾á ¿>õåíƒKoüXÓ.àiÒ+K–¼úrÂ`uÍ+±‹2@ñ™ê¤ŒgÊ!¸[µ³¬!ÄQ!àÍðÍ’Þ0F{MzèžÓÉþ)ùzú\ç"º9~2zwô¾xgÞðŒv'þöñ?ìŽÿa<¼í$èøª<þî<þøâÝ—èT;~£§{ó§]Ò­NF­¿\*ÄL'XPèÁN!¼Å–zÆTðüøíør:>h²v`ÎEI‰ó ;µµsš™r 'šÎ8ÎÞõëJ=N?ʘ ÊŒ*›Ú k=ïFóùußP£ýgñÄˬ(!žEùerzÔcý½¨ŒH°*ÙtÃã ÏDŒ;nš¾‰oÅ åù2›†J•À7'P­C“CW^ž/ózÀ<˜Sx´¤ì–l×ýÎœÎÐ^Ï”ãf’%!1é’ÿ¡t=oÔ?óQ3ꀲm BA! ÇhÃ3›ÒÛv9‚øÖéÙNj“J›D8Ç}€$EçH”­P_¾]¦ÉÒDOk]ÃÂW?6¤ Ï +endstream endobj 1672 0 obj <> endobj 1673 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1674 0 obj <>stream +hÞÌVko«Fýί˜FºäÆ^æÑê~p𣴠›¤ª®«ŠÀÚჸ·QÕÔÙÙÛ±§HU¥Ê’ÙÙ3gÏÌì®+áz2W`U †¦ln ÉPRa)Ü„ÂõXÂ¥ ¨ ãŠeMS“‰¬B¸dD!²nkÆø"+:„_…Ïâp4†>±À¹v>~„ ”‹hb±*£õ:ÍWàæ5-—QL¥_Â0’ÖDR‰¦AO!ŠÑ‡p(ô‘ʼnù›j1l=£QBKˆò~*¥ð‹`§ÈlóT¹gŠ1`ô{´Þd´b^£P0Tb¸Zƒô ªfÛ6Ý’e½Y7—‚¢DÕQ,æ ñAc/•Í²uk§ ã¬ô[a´~#Ìm$i:é‹Ï ÊŠÔëã«)õTÅRT¢Šª¤à¿ÕØm©§˜ºiK Ê¢±%Û¸É ¦x/ñÚØË*•zÈW,r¦;WUfJªªa¶ª(vËEV.I}b`LÿeÅhÏ“ÏsÏŽnÿ êÿØgA3ˆÅr°«MÙ8i•se0KW5&S+lŠ–ROÓˆ"þ&©Ø¯"M§‚åßV°©ò +6°¥ÝÞozÐ&¶Ñ”3{Ag{FÓÝ.cWàä–>"Ô[ÉËäï…×g 2¯Xÿd݇f¬|¬ô]—ê»Î6¨ø1*/!J’’VÕBŒ‹¼Âbïí@š/$þùÇ[QN¹,ÄE3o!±‰ ³ðò„FdÔà%ŸÏbš×Wˆ²º,(Ë¢ø)|ÞÐ_)Ê.ÆWÀ|òíú +Ð#½cŠâ0ª#Ø&Hò5AƱA·KÈ£5Ý+Å(£†ü_ðf£é—ʼneE¾ZHÛ¾ù[ Ïb³ |•eQ¢Ç³«¯iÍØ?G>Ç2ª(z_z±Þ9Íëy•µƒæÎ ¾åk€Oj!ßÇã`AšW ãõ Ú×ëxŸFÞ£ÝtÁ›ÑUZä{H4¿!y‚/f£‰ëwb9?Öñeσ‘ã¦ÞK9Yµ…ž”ÅvSu#<™ùwA'¾q”c/`ž80š7ÊŠuqC|î <çûA›2†ò>¾ë‡)»dTݪÝÝ[×›´ÔyÜwÐÇÓ¡&ÆhŸúþ,˜"wLc8Cþá­jèÓ*zÀ‹ ›ô"à>ó>lÖC—¥yp3uÉD€°i%Ù1Á`ºá®,ÿ9Ø‹xsÙìôBsøFý ™ƒ»^0óƒ†uÄ¿ÉŠø)ZÑ6Ànã< ÀðY€›©ïü8˜ì•að^™fE׶šúö§qšeÝÇîtÚÑ+ò!]FÛ¬î–@Ï÷ðú<¸›†³»)ÛW»m«Ï¬ ;móðçó¥‡`l»A¶gfßø“»f2;ÇñWöóq:?³[¨å¦LqN^/â²ØÖWp±Xä*ø+ü¸¸â1®Ø9}r¢ÅgÛ— +àÇÑà«ëÌñ¥/Q 0ùtvñ +endstream endobj 1675 0 obj <> endobj 1676 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1677 0 obj <>stream +hÞÌVmoâFþî_1wR+;Íú;4'¥„kSé’|í‡sU9öB|v´^’FU~PÿegÖ†@0º“ªJ%¶ç}žyf sã䧩 óÚ\ð¼0—ƒÆÌø16NÞÛ`C<3l8þáÅÌu`àrƈ—Ç(Œ{‘ q†7Üö ~4>™ã÷à³F'£ãc¸‘–2׬æ2].‹r—¥r–fÂú=þ3¹M&‡¹.ômf>ÄF#RžLß9!ÅÖ¡'"Í…„´Ìá7iÅŸˆqtáäD–Ž¶,0ŒÿL—÷ Q“Õ86|/Â^æÀ7Š"`^ȹ×t8l¬õs¼=¢E`¹Z‰hl°Š4B Ò ×ÀPѶß"ãú 2RËõ˜o>Ãm«ïãíÀê;vh;Ì1ËÆ﨑s«o¼AÈBóFV,_e +¬€ Ì_-­\Ö…ÕÇzͪ$à5¬œ tœ`ÐÂbGm-ÜnjùÛòY€9=üæö ‰ür}õxèúfÿMÔÿ±™ž‚°f°&'^íÊ¿Ìy¾XÀ¤˜ß)¦kÖ¸µVßu™m>X.¬)r¦KAþ· 8šÁîô˺ûÍF, +:Ó ¸®÷²î·[àMùE© «¬À,k%S|ªUbæb&Gébq‹ò4û?Ý‹?d= ërµDqШøˆÅ^¤*…UžXØ’ù× u}‚ê‚‚“ø™B•9®2ÜVês6 )³ªõYÖM¨ÐAâ#í›Ý‰ t‰™%Öp[[Ì 1Q˜‹ªœ'Ö*‡7g°jË"…9Þ¥¬dbðÎ,nÂÙ辫 ¨™ªTªÑm“ÝÚö=Csv/Ñt–˜³j¥zð6IÊÑõyÆ“óË«x +ßå0D)þ¿í‘â·UF‹ZÐùöÕÀçÓ)*Æ“øòúêUÜ;q)fºFùíçÎèaG)…Z¡R–À7rNÄ0Ÿ©¡Ë8¬=“5g>™U‘Ñå^HœÙUˆ'(ßP…èqÞLÅUyiߢ$®t…ôh]ô`VÈZaÙöp— ©Dý”B]¥KÑ­œÉjy‰SìAs£YFOªZËUuShÃu›n·‰‘ößmõQ•§§…fB\:ØF;B¤=ZbSP5põ€ +Ù +Ïû±x‚ ‘ÓÊf;¾_}˜~ü€r¬9±;ïÖe¿èuZ ÕÖÝåTÔ¨œŠ}È[ý­˜_7M ï²h{ÄÂpúzÖywª=f[{<ãRè’[€w ®m²®Fht˜ÞÁ «áR‰eÝL ìÊA—×…ŽQ>™\ONáñN”ð( E¿†hVŠæB£Þœ(U5£õì†.´„²ìÔ>êíeþíÞg Ê×ñõávU3«$A.÷ +øGùköàF‹9Z.½Ù½m“o»{WßNÅÖæí»Ó§Ó»Ô¾=ø¾9;hfSÈ}uý°õÙ®qјkféÝG:*p/j¨Å}*SUÉõKý[då +endstream endobj 1678 0 obj <> endobj 1679 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1680 0 obj <>stream +hÞÌVkOÛHýî_q‹Ô•]œaÆvü b%–šPDÜe¥zµ’±ã®c#ÛéC?¨ÿ²wÆv€¬y´h¥”ŒÏÌ}{‰¶s4eTškƒG}p|l +¥Ðbí·PÛ9dÀ Œ5fÅ_üb¾Gl <›jA¸Ô(z!Ô lg¸ Ìð“ö^aH|8Ø9ØÞ†³Ò`>±õ")ùr™æ LòZ”1Ÿ ã¯ðwŒd7‘,bÛ0`„¹CGÚ=Ê83µ²|é[¹>|.Jàù.J#ü „¢ •Fò¤¥N¦ÆŸùò*•<55×"ž‹Õºdè±ì €8>¥NS·¢Bm"Ärîl"Yò€­6‘Œ5U"(ÜtüŽ™3¶ÄØƘnØê_À¢Ì qé‹ùÌ"–n ?ƒÇmæ9žO|ý¬,l¾šÕ`¸ÄÓÿ0ÔŽhð²J櫹ä]±J%“–åz-+,hs¡¬Éå›1$.Ætð“2 ñ|ó½ñxß÷ý7^ÿÇÇTl—ø²ÝlRwC*ÏŒ¹Ÿepž&‹›iëJ£¥1°mÂô†…zÕÅœ¨TpüÛ ö,5Á.JúFíÃFƒ Üfœå»:qnÔNQXmÓW?†Û.â«2Íë8ÒãbU#nÂÖé8„—l™‹ú”/‘ñnÆt(imº»‘UÒ"~K»8ݯ°Â:-òÝÝ´:ãõ"ÒO##2à«r¾êKLyhÍn<\)ûÔ„_â²XNÏ«º}:Ks\ÕE‡>àûöÏ]íÑVû€µ*ðEœ–UDYÓ+¹@†MIëÖÃþ{Zr¶¾‘=Yÿ!ŒŽ Š†Y¹ HÁë—ÅJ›ûó¹ÝÓ´š®–ˆOEýHïvv`úî>¥õBù—O&În%j¨âŒ#œüh÷Ñ3ˆô‡é+®D‰WM¤ÏLaLƒê>Pâ=¸j0ìí3¼†ì0¼°š§ëvI¥ìtõ„¢± Eù¶žRä{» ³¢×’ãS¤cÑåϲK>CüŸðË•ø[V²ÉÆ+à ø±‘¬³æ°š¯³©SlÉ<„Äàí +—E½ÀÐM\™@]©ë™wb­:'*oÖy™-Ä:/$¸#u3˜ùÖг"O"c5‡{°R™Ö\½N`Ž«qYå¿úÙYßžî‚ðEZŠyV$éLZö*‹•§Ô¡ží;Cu àbrŽøxtüöhr õµ 'ûŽ&ÓPÃË^GQ¾eþèÀ¶ïO™§)OàÆFE1öÑþ¹)æRz2Ä×þåœ(9µ¯J[å3é¹ÇBɵ«FºU)Â7ªL²â’gð‘ËR~™‰/—"yÛ†ÛÖ'.›F€&Ð~éaô£6ðyŠ¯˜¶€CIHOòëKå}ˆïî.x%í× Þ§æžoKü|2cŸeƒ·Lè½³JåѾ=%9YÐO%w¸|üHr±òýŒäsxßýs“ÓG™k®—g0w'9ü—è»1³$’ +endstream endobj 1681 0 obj <> endobj 1682 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1683 0 obj <>stream +hÞÌVënâVþ律FŠä“„“ã ¾R‰‰X%€ÀÛUµ^­Û°ÞÛ²Ín£ªÔ·ìÌ1$ÄK¥²Íª æúÍ734X*—7s –¥b` LÇC@+ ågO¹¼Ö@o¡h:|ãCslnè`‚ ¼µ"0 +¦k€âAh&x_”·ê`x mî@ÿ²~Ó‚i7ÔlYëu’.a”Vq±˜½ó^a&£Î¤sÀ–Æ5« Þ@iaDÊÊ“îPlzQ\@Fð¦`ÞGÅå]9‘¥.-ÌÃß‚u¾ŠK²zJÛt±V‹·-àºáº.pÓ¬«¶tn[;=ÒÁuó™Ù"² ©D6¹r%C. ÒtvÄh­½eÆh×ÌÜÌ0y[}]h¬ÕÆ£ÍZºæh:×UiøéÖrµ4Û´î¨Ó"«eÑ&¬€YÜVaR×ò¢LX ñªYJÄKZQ©ë–½¥Es·X„Vcù“µ¹…iLüš PG~z6¾þÝóš}Ÿ¨ÿc3ÙÃâõ`7œÂjìÊ¿ÌÙ[­`–,?TØLC-q7ʸ`-Ãàšú™é¸°jq ç;Á¶.'ØÂ~Z÷v½„.w­zœé€Æ–A̧u¸X‚Ø—/fÉÃ"/’´Zøê"ÛTprNòëÞííÝh §K8¹€ õS£x‘ôJDZ%YÚé,‚Õê.Aiê«>óÙÕÓ·‰°Á~¢f’+ßOO|†šÚÍ;SÐøÚx<’c«•nP½žÜ,mH‘,ÀW)íFêàÇ.ŸÁïû6Û¬Ò4„n¢xQô³´¬Š€äiÕ¿ÿä=ä1BøÚí+C”ПŒçÞ¬7{󺂫þñªŒá¸¸½ù|8óF½¶ÁJWÄJ‘‚x4ÔYUZ!ûxQáÅ´»Ue×ßRÁè˜åe•¯JB°ƒ÷Aø åÄÅû øœ%ÑD›õÅÄ\ò›>ª6‘ìÙ–ìf¯ÃqˆÚšX5lC•SÛöŠÇZ§³É+Gůø+1‘ Û^Në  Úã¬\à>lóEÎ>ÀãXzNd‡K!x·çgÓ¹Ïú&vvSí««,]úlÁ]Ølã’‚A„§aQd-ÜAoœïpàsZØf§ƒòu^Ÿ!ïQ\&Ëô¤ŽÚ•ûs`\›£:ÎG74®pZÒ­°ŸÅJ2Öñþu°HAs#q6ARËgdJÕÉ1ÇCN‰&Ô&Âζ³/ˆ0Ìè‚ʳ4NÃÙŸÜM'Ääpì5É” ;/Mf™Óø†I°Jãã°Î§Ãþå½[Éî3°ûÉ^ìR’°ÉÂy3›¼¦€†s·/± Ö9 +àlòæ¿Χ£çûN?ŸÓïÑõ‚<–ø×¢ÿý%ÀyúHJ +endstream endobj 1684 0 obj <> endobj 1685 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1686 0 obj <>stream +hÞÌVmoâFþί˜"EgçÂf×6~!J¥48ˆ*uRã´ªÎUå³â;0È6i£ª?¨ÿ²3k|®IQÚ“ +/³³ÏÌ<ó²˜uNG³ªc›àp,דC);ÓÎ7QçôJ€€hÚp|ãC¸3 pLθѢÅqË3!JqÁ…ѯwÚп‚>sáòôòí[¸-uá2S[ÎÊd±È‹Œ‹Z–Ó$•úÏÑ·hÉl,Ì4¡'˜°û ;=D$;©Z.a+èP&™,!)2ø±Ô£q<ÂéiJ3Gàÿ–,VsY‘–ulƒ96Fk³¾ Ì0=Ïf¹œ[MÜŠ +µ‰l0ÃÚÙD²HÁT›HÆ'ª‡0ŸÝטLS«°5*Yê=ÓdB{Ð ìWMfL¹‚å¿©`ÇPlcK?u{¿éAyvSδ@eÛAë©Û9v†À7î«—nkÓU™õ4Ö¦Ëu}ÝÐoPÀQÝXõ¾Îä4ÇR^ P©Â¤˜µ–ÐÖï‡ÐvŒ¨nàhFŸ’' ƒÁ\NkU¥ƒ›×~›”ÔÛÛ=‚ÇPùºÏþ!†`½xO1”ÍñBPn“3;PâàLÁßuã%Û“ºÌ©gÛŽãîQÇTwûãbPÕÔìy‹¶ãá¥-¨³8.º[3Åd\¢*¥¬×Wÿ|êpmšbÅxSãÍÜþ«Pcï†^ÊèX®d‘źY^&óùû$ý=ò é <,óì²õbñ¨H¥xîp:±a}*«ý©—ÞËõ?6C-}†ñ¼"n¬M? ÌðæÖ£Ÿð?Ô8Gã›`‚TQf·ÛEjÌÀyKÖVùµÌ¶~xb"ëˤ’YTy?äõc¬‰­¹îgù@¦áž2_Õû9ÀPÝSÒeQÕÈhRÃý ôßdá…Xùó—A¬Í—XÄú:ƒ¯Îa½ñBé7¿,—ª[ÏÚ û/BZßÚ +endstream endobj 1687 0 obj <> endobj 1688 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1689 0 obj <>stream +hÞÜ–ÿnÛ6Çÿ×SÜ Ó˜!©ß(:ÀqœÖC׶ša¨†B‘([›-”œ5ö@{Ë);^\Ð}<~ïø!ïlsçôÕLÀ¼uBàrÐÊ)³Ä9½ )!ã_" +™+!t9ã’•ÃQ…q/v!ÉqÀ…ɯÎ{r>¾ŸE0:=WšŠˆ¹¤™ëlµªê9LêNé2Ëý)ù#¹}$É\‚‰À‡äÜ ¢‰“Û‘ŒŒ¶•žª¬P²º€4M~vbÆq 7‹Œ§´žÆ€ñÇlu»T­ñ'ŽïŸ׀ù0éÆq Ì‹8÷ú]’…Ávq0é=šGZ–k'‘Æ«ØŠ'½h Æ$-ü ×ïÉ|ŸQ×c>¹Éø8 é@ŠHH&‰¤Ÿqo÷è@„^±ˆ\馷ë¼°\S;£z»n+:À|ISð+7(¥  orá¢Ïåê³czøä"è•wッ÷þ—n_Gõ »ÙSp™3Ø^NìÕÊÆ.—0­æ‹Ó%-ÖF«4¸.äŽJ,X¢ +fSÁû¿¹Á¡´78ÀšÞ•»ßaÌâ ¿Îf€ÎAˆ"Þ®Ü9VnoÒ‡òVW4 uW¦¤lÖÝ ½žÌ’Ëéð í-å^¤i}t‹”¾ØÝMß°8·…*5úÎT7ÊZ5Su[uÕ]ÕݧD }»,9¶ÞZuk´êøƒ›œÈï¦ÎQK KjÛl¾ïIUwØ3Œ1ñFÙry“å¿$÷·êƒBž$?¼©ÛòE¦aq‚y¡¹¬Þ!Óó¬Ë`]¤~;¸…|¡rt¶r)É÷R®JH‰ ½lêyJ×|óÖ]»E(p4ÖºÑéþ† N§CÜš¼÷é~9¦òÿ‚éâÍååôêÍð-Ú ­ÿÕÍ yˆ• y€šÕ“duönv6IF¯‡hŸÎ Mžµøø +Ìî Ý€fàhE³¾Y*(ÌÝBX¦<9^×ãélrùÖv¹ù_º\±·³ ®ñÿÈK(: Ë86àÇpXÃe•µ˜êQfÑ޹Ζke,âég2ò3cá{™ÖfµqúPuŽ­ÿ¬kŒ¨zäkf̱˜I…û²‡YõKÑŽ«SºÂ³mò”´Õ'Õ ¹Íå€.{)<’|;©«nwø ö§Í6§L +endstream endobj 1690 0 obj <> endobj 1691 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1692 0 obj <>stream +hÞÌVmoÛ6þ®_q+@tmšÔ»d€k;…·Å "%ûP "ÑŽVY2(91ôí_î(Éã¥ÀŠ¥@lC¢ŽÇçî><‹ÃR~8,+Í1ÁeXž&)´…ö>Ô†§8„ Àð‹7î¹Ô4À5e„+! +e–oB˜à€q ÂÏÚG}2=›z0Žß¾… I¸GM½\ÊxµÊŠ%ÌŠZÈEœòGø F2ÛH5Mpʉ6@D'iF†§°èK§BB\¤ð»$៚O.aj‘ò4Ï cÀô!^­sQ)¯i¨9u¬Ö¡¶Ô0}ßjyŒYmÝ Í$²A ëÉ$’¥ÌfÉøJ•ßäNZÞŽ•3·;bL»%æ,&¦Em} ãd`ãÐ%ƒ{Ü †nŽW¿µÛdÀ]Ëõ¨§_Ȳµ¥›¤âPW¿&ÍŒhí²ÊÈóÕËBñÞ°Ê“†á¸+Üïra¼ÍåobScZxeÜh‘ïߺÿG·ƒúŠÝš]0ê©=Øi“9GåÆå9\fË»7ÓÔ+<•d`š”ë÷ÄÀ󪋔6© ü;»F£`ôãi·Û3èSßiå¬èì¸b=žv†§K`]úðù.ˉ£ ˆô8Ïâ*¨K)?§b‘ЮL7Y-ß½›‹‡:Ò#øëQ¡¶bdÒ ág+Ö2+êE¤/ÊM݇7£ßf£ËÕ*P¿Ž£¨xÓ‡&Ú÷vÑЊ[¯ß {» + ö?]Úhþ¢ y×ñË Åò“H[ŽwhˆñTƒêRôÝçsÏ[yHQoT°¯v¦vEÿ¢pXl2ØTv ±Ù±:ò +÷ +Z"ªŒtÌOŽã<¿“OáVQ/n$}HÊ¢ª!¹‹eOÕx/°Á”Å<^‰>¨¢®ïB*^`“~sC“;‘ #b¯E¤'Ed ”LSg^ˈlRøé6U‹«&¤8šJYJEÙ“Õ ” úì+åzzÌÎçp„öŠ0}'”½ô#‚s/Eå¦À…Y]¹V·D¦åæ6¶´¡ùªzu´]Íga“Y€öp4Oál6¾<Ÿp´l(D;²˜¾œ•f…ª8äíÛ•çë!n·:UÂ:9ŽRzÚ žé]óÑÙ4£}Lƒé<˜…³ë) De¢ý)­ˆ#òJ쵂ï‚==ýAÛ¥úû3*¿Q:W;u_fiݾ«9tûàkZ*¼ ‡ ž¬z¹ÇÅ:Ç·ÄîAé¶(ëó$Ù¬·ûµuPïˇÜ–-Ð$#© âfù3þY1Ž×=X'Ç»?È[m½ñ +endstream endobj 1693 0 obj <> endobj 1694 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1695 0 obj <>stream +hÞÌUoÛ6ý_Ÿâ €¤ÚŒ¨ßJÑMìPÔˆ…Ã< ŠLËldI è&Þ>Ѿ厔ϳ,Nx ïñÝÝ#¦PYç7s +UoÅ$^ +aCà`Öʺ̭ók +ò•E}ððƒ†¦ |Hx>äËCâ…Yy‰†?Z?Û“é5D$…«ó«×¯a&š’Àn+Ql6¼©à¶‘L¬Š’9¿ä?`¤`ˆä“ €1%4Ž ŸXcdTqJ=óSÅ­©ïX±dŠf ? +'ÿdeÄÃ-žÚ¤¾FrŒÓ§bÓÕ¬W¨inEa†µÆ$ŠøA–e@ÂÔó¡êØ'I|ð£ÄOü¨–+ÐNTãY«L+”:Ãô ŒJšF{e‚hPæ}á!‰ìøuÆNgìÓ”úÄ·}‡â˜ ë±3¦I˜¤$µg¢Ö–ÛR‚“ÄþèhÖEÏ1æk·^Ëê))}?Nö²ÐlŸ‹G‡\þp"cÌG&óÑ~ñïKö+aÿ ëÿ¦O!ˆIªÎàp9½ø‹^ù—1ßÕ5Üñj-ñ0»ÇÞè™pÆA@¨ýÙñ±am¶$:¼ÿûœøúÇØÓÇv†&ÌH×YM'HÛÝîÀ¼}ú°d+îÄöŒ7.t¼ys¼|‘*v¢A¼Q÷Öæ#ø4r÷¯›ïÚGDûhòå¢(\ʘü7%«ëÁ—.TeeB|ä… ŸyaŒÌ*Þb悹E»íW“^M¹.Té}iÜ~ȹzò\à­4®gW.¬:ãæaë„÷Å}ÍP¥ 4+„äR×ÐáÔá ¾ XGס1!.ë¶|(* r¯fÆRëVb•8öÆ:x]c!8Ýs¹ÃW÷k{‚Ø_§z;ü{Z£]Ÿ Pap›bÃFà‡{jƸ¼éåH[¬[Mp¹ÝÊÙájž†E". AÏc&GÙŠ†‰ÈÝ©–eÛôè–:pñûg“s\rñÂ1½Ã/Ʀ)Þ·K†j¢Åeœž {)¶* ©÷ÍZ̪‡N\~n¿€xØÞûö+׬DçC¾ëØÂ.Î ]º‚…¸…]·Mµp¶Køî-lñE™²P–8› +ÑŠ…} 9$öÈ¥Jl :ünN¥è™­Ä5ºº×YÁ…1#Ð/šôˆ…·H­ªV]Oy*οêJ²ZØ+<üœÍoUGMáU¯*ýÛÃÙiÕ‘±ñ÷Ú‹ uËœ‘™ûð£rÒ;ÕÓ6l~úµ¼RÚ(n¥Ç ÷N»µÄÿÈŽHÖȹþkÏ„^EÞHŤ>_©ÃäƒZÇú/Rã<ŸÎAÔò›Å¢9û–¢›íæ¹fu¼§5クþ-ܽdÝߪÜ{A"à7ÝŸ –'©ì +endstream endobj 1696 0 obj <> endobj 1697 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1698 0 obj <>stream +hÞìWínÚHý笠BŠd<™ñ·I··bÕ +îVU©VŽ1Ä-Ø–ílá‘ú–{gl ’ìVÚ ì{îÇÜsÏ À`.]¼3˜’¥ƒM0 t +y$ͤ+_ºxÀ?“˜ŸøÁ›èØ:%T)QÌB¨áêà‡xA™þwé³ÜóÞ€Iè^t›Må +sˆ.§óOtû5YÿÃnb +ºE>ƒ6©u°UþaÍÎb×ñü¶Äaêr[£ˆrEÕuÂä¿ ÷«M‰X +Ê¿V°­ [¸¥w»Ý¬ö K\«’3¿@gËÆ$Æn·SÜØ­—/ŠÅ/nò(øv¹ŸÉ›í §0("î4fy7H²îýîÍ7 s[ùç ÜÂðLd ‹ÇxsŽö‰..î?Ëò8)gy–Þ•-ht;hŒÞuºœp6¯hn)TÔ×›ìív‚@°Œ&X¤õó›Ç6ÍuðêÏ4ç"–Ãìå^ ˜7ðtvôŒ’r\æÂýp•ˆòäIÉ3ñç‰tô†ÜŽ\}âïcßUœpóåd’4^Òtr·Üö̇¹ßs +ŸŸ»(£ìB9\z”„{¢¬±-&i9 ûlzD3—$´áW +r0ô‡Ýî‡Ñ§(ÑÌuù|Ž’\+{ íù"þ×÷½ÕŠr_‘h®Eù¿"ÿEö⨃õáÈCŽŽ7éj+Å«tuŽ2DàT%öúh÷:×^Φ»rŽö'iÇÚUßhÆÚHÌ¢"å°>8—UÄí çàÃt·RûH—£AYŠ1rù`ó¨q×> endobj 1700 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1701 0 obj <>stream +hÞÌWkoâFýί¸BJe/0ñ ?H[) ^Ê*%œ¤QÈb¶e›4hÕÔÙ{ÇBÞ YmÈvîŒÏ=÷Ì=G…Ié°ÕWa’–L,ÅÃ6AW á¥qé7¯tøY¼qIÕ@Á¼¨¶Åt ,]aŠÞ¼¤ +S Goˆ7Šj€÷wéZjºŸ¡Îl89<©T ›ÈªÍt)š$þ|„h‡OÆþË7Þ̤ç™4¦ëPS™jÖÁk–jˆHy†âN³ [@÷¸?â øá.Ù›–¦à# +=D3513ÀàÞûóxÆSšåz¥ºá`­&«›À4Ýq`†­(F^µ©1Ë\£L3¶ÆQ-Kƒ¨ÆZ+G(äöJ"­Ö eôz®Ì¾¬¬.-AST¹VÇ[K®iª­jL“4Yų“Çm¹¦Z†e3[ê&Q-†È&³¤ YŒð<ž¤\C¾R’ðBV…¤Ô4Ó*dQ‚‹¢æ\þ•ëÌÄœžÕÈ‘7×G¾t}ç´ïƒú?ž&VA7™Mk°jNÅ|ä•=sÏfÐ &·.¦.¥è”'rM×™*ÝÉVâ#&¨`ÿli¢ƒMôôÆîõÜ„s̼é'›‚»+è +,A)è‹C6‹qÄAXûuÄdž»AØh„<ëøs>ò@>ÚtgÔh>B Æ0Öô<Æ·~Ú >Ì‚(ÌqŒ÷éã8 Âl<ÆÑ"«R¼\f»çžxí³¤P®Òô­$Áct“áèù/> endobj 1703 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1704 0 obj <>stream +hÞÌWmoâFþî_1Š”Ê>`³~·C¯R¸”*Mq“FÇ}pÁ€#°-Û\ƒªûA÷/ofm ^rZ… {yvüÌ3³3ë +CéäâF…a&Y:ØÜñ@çÒ@úÕ“N>¨ ‚7T 8þáMul¦k`ëœq ¼‰Ä‘…qÃÕÁëါxÿHåFó˜Ìó“óJÚ©¢:L—ãaêO&a4„V”éÀïÊ'ïwô¤ž4¦ëPS™j™à5¤2’Ÿžiq êNà÷ƒü¨w©â=H.ãø§‡ÈR–!ú€æ£?IÆAFVMO²4f[­ÅL ˜¦»® Ìp87Š¸E*Ä$fƒiÆÊ$&‹ t1‰ÉX¤Ê r' gžÒ¬šebt³H̾¢Ì”g qU©™8´•š¦:ªÆ4YST¼ºŽ7Õ6l‡9r; ¬?íå XÌ–o1xš…J õÊqDyYå”IM³ì2+ª[jáj¡å«b2 }xåª P0/ïk?·Ý_höß°¾a3± +ºÅZƒymrk­U^éól<†N8帘ºœakdAªÔt©ògEÃ~•ƒ>R°üË +¶5QÁ¶ô²ÛÍ¢]æZE9Ó-IŒe·sì + —òÅG±ÊÁÓO"Õ~郰F§§ŸC¿ÿÕ• ï*U4XE îÑ «t•ú²ŠMÊZcƒ·/ÂÆ{·6µЕWœ"~:ò³vœæ]™œÂ¿›¥O–§Ô~âÙá0Ê3HbºÕ·?Uº"ïNp°Ã|§(òÞ¯Ãá?¯å)šN&¾Œ4£U¥²[8­š#'2!ü„,)”¡G±&õ$ƒ$Å`]y@áOó*u»îð×ïhïã"´BC¼®pBŠý/µq‹(/ýY!†Ä÷G¹ÔHѠ̥F ™—g÷8ÑìÀqGÕ}T°„W5 + Oªu[Q|qŠø:Và%Õ>²Ý$~_%é~…"\¢,½iŸ·®.à¸Oæßæ†8©CÆÏ•(ÜF…è3wa?‰UûñÈÍ›ÖÅUçÏË&âw­†÷&ápXKžG/MFIŠðÓ<üO£~Vl‡UøéqŒ—]G4Btôî A/¾ˆU¸‰š˜g{Y¿´Ûñx6Œ£b³"¦°òúNn_S Ý_\_¨—“Bå•? Sâ"‚óMöt²Q­ç¢ÞÚ-o¬µ“gréÕÞÿžæ„ßoq1 ò² çþ–.Ï‚’Ž¢½È £~¢‹CGñæÿ¡|›î Éœ=~|øTûAt†¿ÿßâ6ô³ùû¾"Î#¯Ü%n[gd;Äñ¿Ø&ð»Ø"ÂVˆFvÿ¢ªÝ½lóGˆ?ëð±ß£Ù$ˆVÏÌøïÅ7ÔtÓV +endstream endobj 1705 0 obj <> endobj 1706 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1707 0 obj <>stream +hÞìVÛnÓ@}÷WŒ*UòÒf»_ƒ„TrAE ¢Ö*E˜+±S£ÄŽ·¡~ÉìÚIšÐ„‚¨DÈÞÌ̞ݙsÆCãèÕ‡áÔp$¸ÌËs@2(b#1^ÆQ—‡ 1¸†|pÏ¥R€+e‚±Á…2Ë—ôqÀ¸Áã£ÙîtÁ¦´ŽZÐ+÷¨4óaÇi6„“¬Œ‹$êÇäSðW’ÕJ‚J N¹cCÐ6ˆ¨Öéë‘ð¶†>£A\@” à}A‚φONaj’Š:2Å5 s'£xª¢:a[>æêPÛ*¤ïû@-1«ÊÚÔuf~,Ö’«¥Š%µ«1¯•¯+ä:-oVµinו‘vU™·‘µÍ¯ ' ‡.iîqA…) Ç;«ìøà®åzÔ3{E^ÙWýˆC]óœhO\Ù‹iJ¸_3ÏTáuY™*¥Ž[—…ûõ^¯öòØÔ1±ðθ P!/ž+?×=· û;¨8L³ ê)fâdÎJ¯> endobj 1709 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1710 0 obj <>stream +hÞÔVmÚFþî_1BŠd‡°·/~½k#¹à«¨8„À—**ý`Áš¸ƒŒ¯mTåå_fvmÃq —kàªÔ–ìevwæ™gžYÃ`a\üt/ºí6Œ +‹ùD˜ëE‘¬VY¾€~^Ê"MfÒú=þ#‰*'B@‡æ:÷ŒzTqfzÄ}å[»Ëd. Hò9üZXñF@(n¡j“ZÉõÊ c@ôw²Ú,åV­ŠbÃåÄs1[—8..‚ bû”ÚUÞš +=‰lnL"YjГHÆŽª@NÚ~ËÂÌœšáTÄÜ$–°‰c¾N™ÕqpèYÎ|Æ 7…ÅðI+;N3Ïö|⛣b]Ùæw³,—xæKÏÈÊ^l3«ƒxÍu®x׬RÅ$ç®W³Â‚ e––C\“[6>)ó*Ïû÷ƒŸÇÞO\ö<^¿ãeº +Â%¾ªA£Mê>h•c†Ë%Œ³Å»‹)Ì-¶ÆVVGÂÌ?-ŽýjÊ9ÑPPþµ‚=®ìbKï»Ý©z0 [ÉY p±ë¡{ßí»S 5|}Yn=Ø]ë"“9šËIYLÍM–w^Ïeš²üòrv5]NÍ©¥î«½`EPï Ž?è5ñË/Le)Ü v%ÛÞæ›%ž1ó*ÌñýêJ7E–—éÔLѾ¾+_A« ·ÃÑ ìF=h5?ÛÖ!$…í—ï’íd#gY²¬ Á?ÇAí)4ÊŽ€&£¨Û§àA !â¡=)J„r#Ëd2y¦un2øè(¢á8,m~·B³pè]…Sp_»ýx”ÃäÑ®«ãh8 Gýá(Ç}epÅá G!¼˜·^=^àúÚ(؈ø3ˆJ“Šƒl/Èc¾4™/+>qâõ‘tÉ{YÔ¿&¿]Îhnj-„o£1¼Ø>1¹Ú¬KrJ5bUäû ®þm ¦Ó¼õè¶gå$›ËJ˜h.mb´Ê¦ίÏI¿5Eëi2 yÇʤz/ûÿ^®OHò»–kOáLÓóŸ½{^µ µþOÑd¯}­Ž¸æ¬ÜŸI|£¢¼Mµêv=]E¸|´ ¢‰ÿÅ!Ö½+Ÿí»ºó­¹>ë©Õ½Oþ¦VðªþiÇT胪×Ò¿´Ÿ‰w; +endstream endobj 1711 0 obj <> endobj 1712 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1713 0 obj <>stream +hÞÔVkoâFýî_q…´’§‰'3?—6’ Þ(«EÄÚ¶ªûÁ +6k&2d7«jPÿåÞÛ`HÈ£¤Ò$lÎŒïãœs8L´“³+“¥æp™–ç€`P¦Z¦ýi'ï8pˆ2›Àðî¹T˜à +F™ Ñ\c…2Ë]ã ãD_´?õ~ølêAï¤wtÃ’p +}1)“ùÂäCr§©v昻d~3K—rWi¶åc¯µ ¦ð}¨å1fU];&ufé ¦µµŽlI²„ZD6Ö\ùŠ!pÑòbdÑÜ®™vÅÌ !¢¶þLƉaã­K “{ܤ¦.ÇOVá&1¸k¹õôa¹¨°ñíõ +ˆC]ý#Q+i…—ËœX¯¾($ñŠV&©4MÇ­iá~] ãU-ÿ›:˜ÆÂOÆ]€*òæºóußõ™Ûþ›¨?ð6¥‚p¨'5hÌÉœY90g0›Á(Ÿ|Z¡˜B_âl,Ó’BP®&&¬žŽ©*ý_;Ø5•ƒœé͸ÛÕúÔw*;ËÜì¸ÄÚŒ;éÀX]¾z§¾i^ÙM™+„³XÏ·«cèÀEðG8‚7ËαÜ~“Æi0Ì‹aR®òdÖ»Et”ir‘|MËXÏc“îÆʶ¤®ÿpÊ*Ê…¸JÇE§y>úéǾ=¼ô­É((C~îeÌ%Äú~Ö…)ü 7ˆË^ŠÛy€çZQ$ƒÅ8Å:âXLŽb?ÝHõVÔ œl…›¶ºaR´žjøm­É½-^$)ˆw‚Ë(¼¼ úáŠ!i:ÞO´KCØ8§YŽªµZExööm]쇻|œÆz¥SÁ *Î3d·Jgœ~J_J“œ%«Tz£Š\³¹¯âJ¢\J„x—0rª‰Zu€+í&°) ¢;ÙºO‘“·ô}d[-…4E3µÃóË3™8 +ƒQÀ›ñ3ÙÀMW-–¤u¶æç±êk¾¯)ßâáö8>§.lTMÄêþèK5;Ç»%#š><÷/£óɉß?ô®ì±ä ¹“U÷’ò_™ò)]*Ã6²ìLÂÏ®k‘º×åt_Å–iËߥ+{ÁècÖ\!¬ê;Èš ï²Ûò`s¾ ¡ö/XûDÜ6V$ ýÿ2òÚk3«ß­×ösíh„·NáÚÑRËÁ®£¯¤R­º¤«Ÿ‘Fùñ×°þÕy?|ûK†^7sè(Å^›îGƒ•du÷Ïtüú]€^M× +endstream endobj 1714 0 obj <> endobj 1715 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1716 0 obj <>stream +hÞÌVmoÚHþî_1ŠTÉÛàÍúÝm% +¤ê)!ÜëUçûàÀBÜ‚ls ªúƒú/ovm p1ÐV'A¶™™™ç™¡ÃT¹x7Ôaš+Ž .óÀò0d\™(oåâJ‚‰¢ÀðƒÝs©i€k2Ê æ +C/”Y¾ Á_˜nAð ü©vºW`SÚíósègD÷¨©¦Ó,šÏãd +ï“‚g“hÄÉ_ÁoÉ,#Ô4AÓ©îØt =Š8#ùfx·t=àјg%cø˜‘à³âS†G˜8$, ic è>FóÅŒçª(ŽA]Ñ:Ôv€¦ïû@-1«Ä-©JdƒÖŽÉ¦T"ª|I¨´¼5/"gÝ®ˆ1í’˜›ˆ˜µÕL'š¯.Ñ ÝÓ j¨&ÑñÎJ¹I4ݵ\zj?KKÙx9*€8ÔU'RÃKy–ÇDÃ|Õ4¼KV™`Ò0·bE÷«\˜^æòØÔQ báé.@éyûÜûY÷<Ñì¿ñú?6“U0ꉬ{“9{£ò‹1[³ âé}Å4ÕG#çÑL“êêßÄÀyUù˜ÊT°ý«v ÙÁŽôvÚír}ê;e;‹4v\tbm§áT V¥//âT/Õ5YdqRLPª“tY4à, “³4·­i *:Ï»ø&Í‚—ÿÖÖkâ „jt“ŽùL{s¡ÖÈWáñ@i󤙡Ýt¥åE¹•k $›vç(Ê/qÕtÒãûü™&îÜ +ß~÷SÖ‰ -×ÉšÞr¾áO0­*ÕÁ ± h] hXðEyþp^[X(/ûdtûUàžÄž¶+ ðñ´2ë4Pрݪ­†…èÅQ”|–óÑ<¸Y¾vº79‚Ãþžï,\øg{‘ „ðFìȪÁðÏÓ? 芠+endstream endobj 1717 0 obj <> endobj 1718 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1719 0 obj <>stream +hÞÌWÛnÛF}çW !ck½¼“rZ@±A,+ÔÖEPõ¡(™µn )_ôƒú—YêbË’ì80Pé™áÙ³gÏ (†ÊI£«Ã0W\îå9`rÈe |ÊÉ'tE7€ã^tÏe¦®É7@ŒŽ(Œ[¾ "Æ®[ n•?Õzð læÁÙÉÙÑt2M÷˜©N‡Y4§“!4'E’ ¢8Ñþ¿áJf¹’ÁL*:ÓD]© "­Ë;Ã#l &Q?É šôáL+>ãø§‡¨Ò•)®Á]4ž’œª¡Ø–{u˜í3Lß÷YçV¹kÇ`®³Ì£Ì°åQ-Ë”ITc¥•/ò“–·†HëöBÓ.•94Ób¶z×µŠ·®V1tO7˜¡ššŽß¼Œ[ZEw-×cžÚɦe¬? Ð檗šÌ$e<ËS­‚|Õé„„—²r’Ò0w!‹î/¸p½äò¯f3G54 ¿¹î”ÈëëÆ¿»®/,{Ôÿq™<ÓaÁÒœÜÙè•Ÿ\³6A˜¯ +•£Ï¤Édû> endobj 1721 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1722 0 obj <>stream +hÞÌWmoÚHþî_1BŠkØø¿Ðô*å‰8å'U¯î×âÈØ‘í¤ S~ÐýË›Ù5áH€\IO:»ëgwgŸyvfäè0•ŽÎ/u˜’m‚£¹Ðrm05È#i"ýêIGg:èàM$Ý ÿ°Ó]‡™8¦Æ4¼™¤¡¦µÚ&x!4½Þwé‹rÚ=‹¹Ð9êÔë0ÌUÝe¦’Mó`6‹Ó)ôÒ2Ê'A©_½ßð$Sœd0Ó„¦ÎtÛïTj¢E:'ä#Ã%ÛÜô( +ÆQA:†O¹êÝJm¦á6ÑJƒ¯Œñ è΃Ù]´ªëI¶Á½µ™e3Ìv» ¬åjZKø괈Ҭ3Zk“(-0ù$Šñ$U› Ôœl¹K]ˆ³nU˜–æ÷@5[ÌR`hºÚ´pè¨MCwuƒŠ©êØj·Ô¦î´—¹Ê0Ï6¾KPmæ(×*Ÿ‰ž±ÚD¾J–’î\U”4 Û©TÑÛM\þR-f+†ÚÂVÓayÕ?{ÜÖÿËeÿÕÿñ2~ ¦Í\ºƒeljö³Tyã™'I£xzSâešJ©QD¹Ú4M¦+ªùªDcÆ©`øWì<‚mLéU¶["Û¬m‹p¦.¶4ÒZe»†Y.h}þQíjqÐü8Ž&ñu¼Gø},¢ÜWâÈi0‹°›'ˆc¿Hèá†F7¾z¼ +Z‹D:Ý`|r—Çi9ñ•Iv_6¯ÕaÔíxpPÀÁX| Æ淋·én0µüpNÏ‘ 1"B+>/ö>n†Ž`8¸ø|>èož'à+/´IïgÃ,YL³´ð_õUøsã¢Ì)÷i÷0‹S„ËîpTÇÛöL²OáÐŽ!†„¯q^qÀ…õú."oŨ/% Û¨Ñ«Zuàð²bû +ÎÄäìñö#„cHœv#üq••R>mÞ±U8}+œ¾%üCeŽqo…bß’Ÿ»äŸ~’Þ ¨‰«5–ž¹ýúô¼À‡ì(¦Öu†m +ë­'lŽ²› Àáè>‰^ 2€ð&Èáð!Opøûš2Ù¡9Ò„yyƒ¿9Â!©™Ä_PCpIeôŠ¡0o@ŠnÈÈ ¨™—/‹2ÛaEÈⱯVRàDïKdr‘6ÈÄ[&âò7ªGaUœJ^œÐ‡×KÈX&Ä$€Ìeç$¢2 +±;Ž7ÕºëÞÉèê¢ ïŠw¢ÀQJçéZ¢dí\y—½?º¢hú>âh¯ºÆ}ì]œ|îŽ.y%Æ/Âg$+…P™ìËrxÒéõω(ÂÄ•­‚l£Ý~çbpy5Î#<¦JU Á‹¸Å +Ý*nwž´žzˆóxÃÔeß;Yòzæ= [*zOe:¯lÈa.¢3 w’Y÷qQ?ÐóÑàSgpñä¶ðVdÜN‹{x>Èãiœ¾Íó¬²!ϳê¥!ÛÓóÁ¨wÞë?ó|Î ÌÏ÷|2)¢òžW6°zˆB(óˆ„yÜWŠ³³Ë®·=ö³*öE½åÅö§KÔ¹/‡A‰ÿ¡ñá¾ìãÊðÄóº£>D„EM|ù®öÊ»¾&ÿ-À¼‡ú +endstream endobj 1723 0 obj <> endobj 1724 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1725 0 obj <>stream +hÞÌVmoÚHþî_1BŠê ñf×ïNÒJiâ"NW’_ªêÜp ÙpmTåÝ¿¼Ùµ ’´jt„Í33ϼîn8 •ÃV—ðPlæ‚éÚ`0Èe ¼ •Ãw8„…ëÀðÜu¨¡ƒc0Êt' +CÊLÏ€°‡/Œ›~SþVÏýw`QÎÏšM¸Ì w©¡N‡y<™¤ÙÚÙ<Éq/!ŸÃ?ГQzÒ©a€Æ)·-Ï …Ÿž|Ó]Á-©ƒ$î'9ÄY>æ$ü¢x”¡ FBS—š)úÿ{<™“Bhù¡b™æjS˪žç5]ÆÌ2k[§Ž½”c9¨n®É±Z¢X†b5îjåÉ +y€BÓ]FÍ­ª2†UVæ}L “Zê èŒÍÂW‡h:w¹NuÕ ¿Y‰ÛDãŽé¸ÔU/ói‰õ½9›:ê‘’¤Äó"%Æ«N3QxYV&J©ë¶S•…{U,Œ—±üK,j«:1ñ›q d^=7~n{>Qí÷°þÕd ›º¢ËádöÆ^ùEŸ§ã1ép4Çfj{£Hr¢åê?DÇ «&}*CÁù¯&ØÑåÛ¸§WÛÝ*7¡G=»gñ‚ʶƒ$æj»3ܘ«Â—‹ØâEÓ²ÅäâúKq¼@K$|¾¡˜ R+]8y ,"Ò"ÜßPk0ËÓl>ˆÔÁt1?xÃïœÃUû´EY#"Çõ¶×y]“õâ"²~2ȃd˜N³³ë¯áÍ,£zŠ<×)ꧥþ>âé·¸\šÀ÷ +h •öfŃðÑQO’é¶f0˜æè=ÅØ1¤p9âkÜ}DYêœ}c8²ÛÉ—Kf,8Vö7ÂQ†‚ î‘”!þ“Ü¥ýÖbÊ™[ëâh7Š 1e#žU²&„Ÿ.}Ø+ªz!7â÷sš¯ˆmõ™qacñØŸ¥=üØÚÚ˜üdcÜ á{„Õ„ìb]Oñr¤ñ:..ý ü„‰oï2:ëÈOŸ4/²¯gNÐ\!Éî/Wñ-÷F¢ªõl!²1éc•­–87àÂÁ«£{<@Ü?ýÆu·*øáµÛ{»Æ{ñNè·üàèÖÐE< ÚÖ øÿPãÿâ]„~÷¥‚èÔÑA¼ûÛšp»]¼Etû´ ê8ŠÄfQC½ÅÆ^|m\å(øñìû<ð[í‹Îî+ýögnúV>]ȃ¨¼ìÅ™°í¾—ÉDjoçûâšäÜ}˜ˆ†‡"ž†k;z{/püçì?óºá +endstream endobj 1726 0 obj <> endobj 1727 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1728 0 obj <>stream +hÞÌVmOÛHþî_1B*µI²ìúÝpw…Ë©ÈX=PÓ&Ù8nó&;¹&½òƒî_ÞìÚ! ĆÂU:ƒìõìÌì3Ï>³ƒH9l\1ˆRÅ6À¡.˜® …„+}å] ž3`ô¦Å?|0×!†ŽA Õ!)³jz]PfBðUù¨žÕÏÁ".œžV*ÐN4æCDI8ÅãšãOúa—kŸ‚?p%#[I'†5F˜mAp¦Ô0£X§+Gº+rËÔ>{þ*ýW€@%gÌ +endstream endobj 1729 0 obj <> endobj 1730 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1731 0 obj <>stream +hÞÌVmoÚHþî_1ŠÔÔ.ñf×ïNÚJ)!§Spî>Äý`À·`G¶é]¯íºy³k!‡’ªÒÄ.ÏîÌ<óìÌÚ fÒñåÁ,—,lê€áX SÈ"i*½ó¥ã  ü©Ä4 øÅ96Ñ5°uJ¨þB¢è…PÃÕÁã„2ü?¥ù¼s&q }Ünµ Ÿ)Ì!ºœÎ²p±ˆ“t“"ʦá8R>ú¿a$½Œ¤]•f™àŸK*zäqÆb¦9Ü·p=ˆÂI”A˜LàLñ?I.¡hB¹ß©‰1Æ€Î_áânå|WÇ—LÃÅ\-bZ@4Ýu] †C©QfmiĶVë(ÑŒ­uT‹‹¥‹ETc­•+r g% 'ÍÌJÝ,•¹ +Ý ¦ü4ÊÕÄ©­¨s˜F4YWþÒw•Ù†íGîgi‰M–ã‹ØòïŠX‰J<ËcEE¾ršpá…¬”K©i–]ÉÂÜŠ e%—“X²¦øK™ PzÞŒþÖ{nû5^ÿÇÛÄ)èqø¬Š“Zzå'cžÍç0ˆg·¦.çØy”)ª®&Q4lX9šA뿪`[laOoÚÝ,›Ð%®U–3ŸàfËF'ƦÝ)v¦@+úâ£XÕdõ‡y/þðò¦wYœÓ@ž¦Ëâ> ~íù¡?èö.á PN7kr…Îë=oÁ£, +?—Æþ«=Øôv°éq6Wï:ƒ ‘&_OŽÿ£~¹f©~HN‚¤ž¶ª&Ë…7ú”׬ÇSäj ¼~4PêÉn‡çøA§w—ïº?l¤ñ_•øðµI4͆ã0߆qÒ}ö¿Þ!ÁÉnGùÞ c´Š++ÄãäU Œç§û‰¦rüEÎù¡?õíÚâœÅÉI.¢@”Ú|„l»moÃ|X„YQÚ÷z9wÛç¥ñaÈŽàpÄø7ÕäŽ3hÁÐ?øð"‡2QÄ€{±Zo?ž—jz÷üL¹í*Q,> endobj 1733 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1734 0 obj <>stream +hÞÌWÛNãH}÷WÔFä’¦}‰/É0ÌnVCˆÀ{‘0&qBgˆƒl³;³#>hþr«ºB€ ´Ò‚7UÝÕ§N* &ÆÞÏgL +ÃsÀ¸Ž€<5ÆÆadì}²À‚hlX6üŇøܱÁw6D3C`.ÜÐhˆ a¹ýmœ›î'hòŽöŽvwa3+àŽ9ŸäÉl&³ ô²2ÍÇÉ0eѯx“£o²¹ã@Ãâ–ׄ¨c40"Ý3T+; Ø*ôišŒÒ’lä,š!xDÐ!Úi«ï€î×dvs´«žÍ}³õxÓn;aw!\·¢B9‘ n»+N$‹68ʉdÜS*‚B@§,x!ÌV³"ÆijbŽ渼i~[X¬Ñĥ϶X6·M‡Yø)´=d Ëwý€æ ŸkÛèvXó¸oþΔ'Õö¼¬xÍyF¼+V1iÛž_±b…ai,?X“{¦Í\ü– #/Ÿþ\÷ÜrÛõ¼MUÁñx@5XhSxZåw\_éœ\•XLÇ,°5Š4g Çá–ù³±_ÍtÄ”¥`ßV +ö°¥—ÝÞÔ=òÐÓr¦nö| â.»]`W` +¢‚¯~˜W-ªŸñM.³rŒæØÏoË:ÔbN~‹à]1ƒzêL˜€¾ÌÎåEÌÚKÕ6‰¥ÎóÑåbóR–ŹDûü´'b¦Gï_‰è°Á»ABO­:ð=šu«h +í:ZœÕ^:v÷¼çn‘µÃ…e[OÓVùÃÆÇQ:–gÃ$¢ý*‘Y«u•'9Ât›1Ó9|ßÌâxžcH û Ú ÉþV.PÑÑÜÊngÕŸeQtK›ÂÈÝ]¼íû‹-#¢y´5_à•uÚ¾SÈÒ:ìȬ(Õc@EÍp©…QßTVXoÞ¹¤XˆzC-5Áˆ>’]lÖRU~4ïÅ° '§îi·CÛ †e¦T´·©¦€•@$m˜nÁðZ$@]†bV\åù”ô c)"d†vjI:´ ûˆÍ‹nX4V¯Oˆ ¦d‹íí`Ìo©voÇ¡Gí×@ªyó +$•Šðȶ£f==nÐ1¢jkDjâl‡ç™bo#´»·Í¤×Ž¤A’—²”óŒÆ…VÀ6Ci9Q)1šÆÔRƒƒÓ¨õNúZÒ)Ò¨ˆ¢£¬u£!¡yžõ“YªÇåzÖ%øp€=Hºë8ùz(õd|Q+éÑËjÇ.^?µmæá!é¤OS#…"á+`Ú/Õö‰ùýµvSzëµÕhÐËárZ¬ñ+ +«-ðaÿ屺z;ÙkÝ~ÎŽúG¿ôúgZæjL>ä2O“/+¾aR éÊ{'‘¤;Ž.¿Dßn”¹µõ¼Äy+’õ)baò>fÃëövÌ5ÔÔ3I¯ê»A¯S`Tzîg“V‹^{U—Ô_Ñþ`7[ +endstream endobj 1735 0 obj <> endobj 1736 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1737 0 obj <>stream +hÞÌVÛnÛ8}×W ›Š!uW²]À•åBE.†,¤«}PdÚUë$'m±ØÚ¿Ü!e'u6NËV$z8:<çp†6‡±vüaÀa\k®óÁö]°TBiïSí¸ÇC:Ò¸ ?øà¾G-<‹QfB:Õ¢Pf¤·!ý¦ý¡w£8Ô‡ð8<:‚~E¸O-}>®òé´œ!ž-E5Ê AþL?âJV³’I- N¹ë@ÚÕ D”ëjdú[A'"Š +òÙ>U$ý¢”á+L¾$3M•Yâ}ϧ‹‰¨eV”jŽ V—:.PÓ +‚¨í3f7ª]“zîzí ¦½1nI³,5‰nÜy(‡ÀIÛ_#IsgåŒå4ÎœçIJ©£ÿ“qb88ôˆarŸ›ÔÔ-Âñ¾Š3bpÏö|êëýjÞĆ7ňK=ýŠ¨ÑÄ«º$òÕç3i¼²•I+MÓõV¶ð`Å…ñ†Ë?Ä¡®nïŒ{ òýóÁ×mÏ_L{ÔÿqšÚË¥¾Üƒuq2÷A¯´\³3™@RŽ?/q3-½ÆÞ¨EE Ë¢\¿%&6¬.†TQÁú_U°gª +v±§ïÛÝiš0 Û”³`²ë!ˆ}ßî »%°}uw5PW9_¿ŨÄp|™–²çONå,Ó3’‘Óûòt¤Ý0å2ýC`¼Áøœ×ƒ‰ø–”µh°Túæ"£EUΖ£LÍo–oeüà’xÁà,ú”tÒH¦Žápœe³ƒ·Û±6„axÍ«!U+F®Åy£q/Pù÷ŸíúØó.õòÉdG—z³³Wp©—cx2Ù‡Kk¨V.]åU™_OÖ†[•ÔU'‰;ïÏödÖ­"&Jn­Ëê!Ü^LÃò’ˆm*ìÕL“¥¿GÓ\+ÓÂ|‘å2ŸáWßѳ°Óï„qÚ¹#ôJâ´±«P”0¬XµÐÖ­Ê[Šæ°‘¬üõbmÝ$¾ŠÂ‹â°† ï¬k¨èÈ~^§Û¡6•mü^¡²^5Ÿ>·W›š0.eIM½äò¼_¼@"$~2ºá2ªdxÚRN:ßYLz¹–ÒJÇr~Wý;«è綣ø•³g‹œ~'ÁÓ'ÂR·“³?BŠÍó•öHÝËöÝúÎ߇7aàà4Ëpâ ØÝL/¯¿ÔOõö*~{ì…StÑt$>/> žTt]‰üëÆ\‘×r]­zý0¼þšþX8Ù&½€wHVîf¿ÉH!‹àtýçö_aD€ +endstream endobj 1738 0 obj <> endobj 1739 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1740 0 obj <>stream +hÞÌVínâFý笠Š´{Oü…mȦá#aE0r¦Y©u80&Þ;;6íf«>Pß²wƶЅ¥R‰„33çž{î½#L˜(gW·&L +ŵÁ3|p|l8Så’*g]L ‰bZ`à>Lß#¶žmÃ:S d!†S·ŽðÅ0 ¿)?«íNjćÖYëä†\3}b«ù„dzYšM —•Œ'ñˆi¿ÐwÉ®"YĶA7‰éÖ€¶Eœ‘|³|Á-©C‡8Ã{®ÑJxćÄNKîL1t>dzÇ)+Ä®U\‹x.fë’š IJëõ:Ç7 §Ê[Z!Ñ b9/Ñ,±Á–‹hƳUuiPpÑñ—¾ÍfmaŒ]«Œ¹‰5Û!5õ ,ÃÔô¾zšn™¾iKµ5¿8>LÏñ|â«CžWØx>*As‰§Þir…U8/RMG½jž ߥ«†pÒ²\oáŠY_h1ÌJËŸZ¸ª¥9øm˜@żz®ý»éùÛþÖÿñ6YÛ%¾¨Á²7 wmT¾3fs:…0<”XL[-p4 +Æ5ݶ‰©þªY8¯*)ÛÑÁž%;ØÅ‘^M{­šÁ:©»U;‹ÜìzH⬦ÝÀ©ÀŒ…|ùÑ\ñ’<ò4+“HMòyy +GºÀ_ptŠK#ý‡1KÒî°Õh œÅ3©‘iç«n­ wÚk¬iÈø÷óˆ7ÒâŽñ2ÅÓŠE’Ð7kgá+U?ºë„´×jöáhþ«“›¢^ç<ý’gå^q¯ƒ°÷S0 {D~ˆ‹æ4d{Dmö{Wƒ}ÞÄŸ÷÷j²^pA׈…úgÆ¥¤Ù¡¥,w•Òù4ß«øÄ°Ý%IÎQJ +`œC +o!AüÅ™„Áû[¨n?tavø|ZÁÍpá-UúcCw­]ÚçQ$®çÍé:¶[pÿ¡Ø68‹-ð›vÇ9é ÚÐíA8ì7­`pK›½½¢-ºî9‹?¾XÅh)®aŸsšŠží´ˆï§¬uðGúôÈ ñÏdåÇ-RÅ„,N"^~i£é¶ÜËq5Zò â˨ q{ty>£y¤"¾ó ¢C7Ä‚÷¢â²èÛd"(F4ßs"K1 m4ëeE).Cp «;õ»¨Ê჈’LÃo¹æ·VŒ>ðy´O±èuøã¡ŠU> Ìç‡ñ¥âZsþ%À_'P; +endstream endobj 1741 0 obj <> endobj 1742 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1743 0 obj <>stream +hÞÔV]oÛ6}ׯ¸PTl*šú–\d@f[Mº$6e{˜ö È’£Å’ IÞlûAû—»¤ä¸Îb;±; s‹>$Ͻ—” +S©óñZ…i%Y:ØÌñ@gPÆR"}ïKOüDR5`ø‡Õ±©®­3Ê4ð3‰! e†«ƒaƒ©ø¿K?Ëý&u ×éè$ªCu¹˜–a–¥ùÎó:.“0ŠÉ/þ'\IoVÒ¨®ƒ¢RÕ2ÁïK +2òu"ÑÒÎ-¨Çq8‰Kó üTÿWÉ¥ §0>‰ÔÄÈ×€Áç0›ÏâŠø’i¸¸W‹šPMw]¨á0f4»¶4j[Ë~´ƒjÆZ?ºÅÍÒE'ºñè•+r; gi ­š­3ºÙ8sÝ ¦üS‰bbÓ&Š¦:ªF5Y'*~·¸FÕ6l‡:ò¨,l²ˆj µå‰è‰¼¬R¢ ^¹È¹ñÂVÆ­Ô4ËnmQÝV S-“Z¸ŒßLµæÕóÉÏMÏûoX¿áa" +ºEƒer2ëI­¸æélãtzWc0u¹ÂÚ¨â’(ºNUù7¢aÁÊñ„ +)˜ÿmÛšÈ` kzUîfS„.u­&y[6’«rgX¸ÖÊbñFš@ ×å»Iœ¤~Š¥Žø´ŸVáí,îvïÂê2ŒÊÂ+.2¿ä€d•¬&7§ÿ„”’y™æuÈI±¨ßsüHËÓÞxo*ðÆÃËÑù‡ñþ½œþ»g¨–!á¥Ò•Ì,De^…YÌD–4{¥ùÁTupKÏS½0þÂåâ‹<+j»ïþÙøæÿáûF»Ö7G‚;ò£nË8¼_ë‹Â*æ}hx9 +Ë:­Ó"ïÝÞûs® ºÏÍq(œ`°x Ä<ÄùÔw‰f/”«p\/øš¨s2„…Žn7oÝÜž1k³…fvZ]Çõb>N+$A< ðçæ°ì`ñÂÙì –³b6i¤`Òâø½I%‚µü±™¦Ó,¨e^$'ðªbñoÆWCÏžO[f®‡€Çî1‘V!àpïªØu!¼D¢\ü›Ñøüzð5¤x·î+Å;½¸8PJ“ ïmÊÙð¢ÿ> endobj 1745 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1746 0 obj <>stream +hÞÔVénÛFþϧ0ÂÂÕ.—§œp} + 6Ñ(ûƒ–H…‰x€¤ÓA¨oÙÙ%YUF$Å®‹Ö´A®ffçøö9¬µÑ7Öµæp™–ç€`PÅZ¢}h£+‚Dã&0üÃ÷\*Lp£Ì„ Óz¡ÌòK\0nAð›ö‹~qy6õà|t>¢"Ü£B/ÖU”ei¾†IÞÄU-còkð#‰6’I…ƒSîØ\hz”q–jezÒ·r}G«¸‚(_ÁO Þk>e¸…ÉMÒÒT–)Æ€ËOQVnâZZ]šcR×Ájj;@Máû>PËcÌjëVP(%¢AMkG‰`I¡”Æ_Pù + Piy=.2gnwÀ»faQ[ÿ &ãÄ°qéÃä7©© ÂñÞÉ1¸k¹õôEU´²ÕݲâPWÿ‘(MÜÊ«:%櫹Ä]¡Ê$’¦é¸*Üïra¼ÍåbSG7‰…wÆ]€Öóöyïç¾ç7šý;^ÿÇfê„C=y=7™s¯Uþa̳Í®Óõ»Sè5¶FWÄ‚rý#1±_õxEU*HÿŽÁ®©ì`Ko»Ýn{Ч¾ÓÒY.ÐØqщµív†]%°.}u§[¨+)«4o’POP^Ü5¯`0Ìàd-ÿ¯¶ì´%{¼ôW‰â¨jŒïVq’.p•6i‘Ç(.û_Ó4õ´®ƒ—Oá1ú$=†ät¿Ï4PíPžPþwgó +¼Ììkˆý¼‹ØÓ”õŸµ-OÖ&åƒÅdvƒÃ»Š +ñMá °SH¥ü5”÷Ó‘xaFù]¶HóZf‚¶Ãá1À·)¡Šwk.%r©:˽Yÿñ¦Ž[^ÔMµÌ$€¡DY€&s,Þ`=ø@Í—#ÔZ¥•´~ ünÁk4‚¦H LæÁ„B0ŸÌ²k8AqM˜þäBÜ›Y”ÅOD¬4ïo¾¡«„’ªÈ‹ÑÕõ|Ú£$Í)ž!DG¨x>Ÿ.z2¶ï'äÂcù¸,²ò±Œ”‰<´¿IR²‡ Ų{Ÿ+)¿.Þ08 CTäû§ƒaàû~~û¾Þ£WGÑ™Àkõ¾}Ðpºœ]Àâì:˜“ùì& e*¨Øí¶Š£§ýW Œ›¼ÿ¬YFu,­¯ +~È—ç·‚Ïe,7| +•%ÚãüC^I¼q?ÊQô2$ËÍ¡ÚÕÆî”äÌRÇã´^´óÿ÷庩!ÇcëÅ}JÊs{úrh$€z'=,ôÝñöOÏ•l! +endstream endobj 1747 0 obj <> endobj 1748 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1749 0 obj <>stream +hÞÌVmoÚHþî_1BŠj7ñfýn“^¥œ'b(¸­ªó}pŒ!nŒmÙæÒ¨ºÔÙYÛÉ%B:#áå™Ýgž™Ý™E‚wz5–`Vpº5A5uP(ä!7å.\îôR Ü)'É@ñƒ/É4ˆ"ƒ¡PBepçEBUK7À•Tpï¹?ù®} 1¡sÚ9>†a.H&Qøt–ûóy”Ì —”a>õƒPøËý=)µ'™( +ˆ‘t Ü.'"#óT#ÙdÜõ(ô'a~2Ϲà~å,Bq e‹ØL¹š¡°¿ùó, 6Ëv9Mµ0Vh:Y±, ˆjRªÖQë21ô¥ÓAduÍŽÙbÉR*#fãß\YU†,@£j.ÃDKZ“E«3sí ŠJ4þd* ¢†CCeÉ”d"óŠ áwƒ«‚(ªa“æiMA ‚N þ“PYÂÏ‹HQ/Ÿ&,ñUZ)K¥,ëF“Éj´P©ÖòCЈÎË‚ŠßT2jæÕ{ãç®÷3§†õ<­ÚE'&Ûƒåá¤úF­¼ÒçyÃ(šÝ–¸™ +_`ma.ˆŠB$þoAÆ‚åà ©¤àùoN°!W'XÇš^•»V¡E,½>Îl€“uIÔU¹S¬ + 6ò«GЛÁòɲ<ÍD„ßOÂi4Œ<ÂY»%EéøÏC÷„“ÕAÕXbºÿ™0‹ÇŸ#\ñyÂYÅè¾Ý šfy””SŸ¦‹òZgž‡†¤µsA4¯}6ÙüÚg²˜³AÁ<Â{¶€âàûv"æ<Í‘,‚߀žAÄðw°F]ñ"¼Ns‘ »¹a=8Ä«ø°íŽC{ä~£‚M?* u²—g•j„7åaªs„Ó Ó¹Ž–›÷:²O~¼¨ÙvîDó÷QÜV›²Ð}È–|ðý)_„ðf„ð›ö/Gdd#~Þ‡ÖSÊVO ßä¡wö<ß½í¾{â®}eë~¼ÝýØE|Ôs®ëýÃvï>">pí±{x Îv “p}q ôÿ³ÓºÛ²¡qÖÃö4°T¢ˆ-fpóµØ×÷š)ð;–'ìŽe]Ã[¶Ó…aÏizOÏ?ÕhÍÛfÃòÎ/â4¸ógaçæŽU6ƒÛ;xØLl±ÏÚ[‡8[úÖ‚x_´Õʺ›\Ĭ‰TÛí[¿èûa^_,ûÛð–í¡þOÐQÁöé¤È$-=-ÝÄì:D7u_Ýß7ô"þˆõvÒy–&ì6LÊškßA|,ñúÞÀ‹£3¸ÛqááZþsj…!쌰V‡ÒV¡¢áåÑŽã´Ä›ñ—F:îÜñÞ2z†ŒË(Ž_'ã²×ï¿ZÆpQÜNØÜ'/ßúáÇñïÝÁg‡‰©z¹û[f%ÂÙ, ŸFüúS€^ªZW +endstream endobj 1750 0 obj <> endobj 1751 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1752 0 obj <>stream +hÞÌVmoâFþî_1BŠd—xãw›$=‰€ÃÑ&`¯iuÜ‹cbld;½ ê~Pÿeg× äàî •êDxýììì3Ï̬­B(œu†*„¹`é`+Žºf•/œ]« ‚?T üÛêØD×ÀÖ¢hà/½ÅhèàOp ¨øŸ…bÛ½“8Ð:kÕëàe’ê]LÃ,X,¢$„nRÐlL¨ôÉÿwÒË4¢ë «DµLðÛ‚ŒÙ>>Òæ›»Ð`J3’)Üe’?DÁ% +[Ä,5náà>‹eLsfåú‚¥ÛÂh-bZ@4½Ñh1E1ʸ¹|Õ š±1‰b1O¢k©\ à¤á<ëÂ8«f%Œn–ÂÜ’nS\¦¨’lâЖdMuTh¢.©ø[á¦$«¶a;Ľ,-±éã¤É"¶ø›Ägh‰gy$ÉÈWL¦;WUaJjšeWª¨Š‹¢–\þ–Lb‰šd௢ڥç—ûÖã®ûwšý7^ÿÇf< ºE–ƒçÚT¬­V9rÏfà +ï L¦.æØ9Í$Y׉*þ)iد"NË¿ª`[ãlaK¿t»Yö`ƒ4¬²œÙ-/Ý®`W`JEŸ_’U ðš-³()f#q–>"^œB Ñ:¸¿·\Ï÷:=×Gx4Jj#éâ¥RM¦Lû­Çh#q§“ùݔήØSÒóóû .ƒI” ŽÄ‘4’¸Gÿ§¢6ôš­n¯'ÓÑñ¤vºÏË󅤮x½"µˆ˜’WEêb§¿o…צy²ð1½‹¦Åýáa¶Ýa·Ó|¸qïî¶ý÷<â#ÃR„É-†;bþòu˜Æ9Ýñ}P /& ^Ф(7¿vR­J€xMï¦ÙroÝžÿºþÉË0q +¬”«¹þõÑ$¼ +¢áøð¢ðš¿Û¼“ðߨýeŒ0¾×Y†nƒ§6Mò¨X­…:<ÔVºX¦¬Ö©?$ØVÿÖë÷0ýpŠöèÚnɽ`ÁxÛùÞc~?eÛ~NŽÈî‡áûvÿ®Ç"Ý—/ϱNUSߞij4Cºü ÊDp cVvé[IX =.tRIˆ^Œ;®¨#^_÷ëÞÿ+‹èÀmaÖ¦ëÿêr +ßÌ_©1Â[LŸ°k"^˜§0Þ…½PÐfUÚœ¾ÉýwlRÚìNldçèäxi¼ +Ódš:çwxj¼þÍ~öžeËWæH‘«€°ü.¤EE…Ç¿{mß¼ŒoÎðËÊáá°Ñƒç<–듲 °*?}œZ?¯ða/¹·šì=×w¼·ÜÔ.ªãx§YÆØûãy¾cžŸ/• \¢tû”ÙÜá5·×†«›~ë×fÇîhœÑàacnäì«°ú²aœ­ñƒ¿ZR8þýG€k½tL +endstream endobj 1753 0 obj <> endobj 1754 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1755 0 obj <>stream +hÞÌVmOãFþî_1Š„ä=ð²~· =é +áÔŠ’¬V§ó}0‰óvN‚ìÐîõ_vf×Ip‚M¸ªR Ší™ÙggžyFÚéÇ;F…æÙà‹œÀ[@žjCíçH;½2Á„h¨™üÛøܶÀ·D3M +NhCÔÇa:ý¥}Ö/;Wàò.N/Ž¡—33඾åÉl6™à—ù2͇I?e_¢_q'[ídqÛÃä¦çBt©ˆHûô哶„¾M“AšC2À9‹¦ZÈ.´ˆ"-9Á= ó”̲´ ¨N¤¹NˆµzÜõ€[v†À@GUíYÜ÷Ö~¤ƒ[NÅlY¶t"®BÉPèt‚51”´é–ÌØ®bæ·„ÙwõXÂd†‹>3,30-né63ñ³´{Ì0}Çx ÷ò…² ûK`÷õß™ô¤Êžf`¾úbNÄKZQiYž_Òb†e.ÂT¹üÍ\îésðS˜>€BÞÞw^ëî†ý7¨ÿã0y +¶Ç:ƒus +ogVþåž² n'£ñÓÖ œ"Í™aÛÜÔÿd¬ž¸Lû¿ì`ß’ìáLoÇÝUCòÐSíLìùâlÇ]àT` ¢L_^Ì£‡"[, ø b}'wø†öw1ëgímGºÄÀåÎÊÉÉåÆ{µí‹åÙÙ8)®“UšÇzÌb&Q¢w;‹ñ>ä“ùrëÃÅãò„ì-®?|êÜÂQÇóÖ‰Lí› =#è´&³Tí°IÔæÙÙKt¸È1Ó )Ú0s(ÐþaÈánŽç‰¢ÚŽ¡Û»h½±#Ÿa½fï+‡œ´ +×TÆͨÜû²- :D¹kjÛo +?(Þª•¨*¹®õ›â÷ +YQxéÿQüñ+øÊßt^ßáá;è8z/9:¾½µ¿ªrÞÈûFÒ‡j‹7HúŽª“} +{ªN¿CPñ_QõJ%ô•&´*ì„ÄŸv…]6lû5Ëûö@ñgä? Eq`^ +endstream endobj 1756 0 obj <> endobj 1757 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1758 0 obj <>stream +hÞÌVánÚHþï§!U²C¼Ùµm W©R¥Ê5¨qs:ÅÑÉ1†˜ƒlÓ :åî-ofmH€˜KUt$ÂËìÌ·³ß|³^åäÓ•€I®Ø&8Ü˵ÁäEÊXùè)'gxcEÀñÂu˜i€crÆ ðf +GÆ­¶ ^ˆ.,ðþTnÔþà ZÌ…ÞI¯Ù„a¦ —™ê|’³YœNà<-¢l„‘vë}Æ•Ìr%ƒ™&è‚ »^_Ñ‘Ö åÈp [B‚Q”AŽà·Ló¦J›q áDž†ôŒq <³Eåä5ðÛ`Ž»µYËf˜ív˜årn•û–TÈIdƒÖÖ$’E¦œD26Tµ%AmÀIË]óB9‹VEŒÙ*‰ù5ÐL‹µÔ\hz ‡Ž¦Â3TSøýlŽå¸ÌU‡Ù¼´–ašÍõZ“3QiÏòXÓ1_užï’UNL†íT¬ˆv• e.k-f«†fá7@‰üüÜùY÷|£Ûƒú?v“U0mæR ÖÚäöN«üäš’¾Æ“û‹iª9¶FešnšL¨ß5ûUFL¦‚ò¯ìRÁ6¶ôs··Êl³¶]Ê™èl;b=w;Ç®À-ð*}ùÑìj0^dqZŒ}u<_Çdot}?møZ÷Y”-"¡¿ü$ç½£³®§ËÙåÝ4ï¾>‹“$×ߢq|£=I:û ¿Ž_õ5_ƒ¿^~=a®Ï?À»¼q k`4Klþ_‚YT"ãD·{'7´Wen—‹°©ØÉí˜bšp9ìm(}ã®vª`2ŽÕß«ÅÎ3L;†_€w!&û)lL;HѼœá&†EN›@ÏfsCt}•ËÏbŽÙå¸Â¸¬BO¢bÚÙ&Á©LìS8­jeH#4ç]˜RJ‡^2…ö’¬¼á?VŸ@‰óœ=ÞLo׋¬n¦h½ý·,÷ ·î¨{ú‘Šn5Ö^ÌÓ~©Z +N‘ÂC m/JöÆàKÎÎ/.®.~—EÁÃÖ\äÍ¡„²«b…oäÞ݃·ZDÐy"/2zÙ‘ädIs2—èÖE,ÊÂW) +W!qEù‘¯…IMÌ­Øûh¿ò~¿ +P%¨þÍ(þìt¤™„öZ62¯AÍçÉj‚æyê×ã¼|©vŠØ|©v™ÌHH*i?–Ò~)õzïr‡zĉªxÓYþ“Ú”µ{³8wB¬N@'[Rtö¶‡ö—Ÿ¾]¡”“ä. ˜C˜ÐQÃÖEÅ2KAì¿ìTêH¼ƒVÙ#F¢/ßdÉ鵪J/ŒÄ["Þ +×7ZùʽQ1!Ñ™$%žõªL¨þˆh{á1„ó4/ ¼²#¸?Æ-ÑÉÃkA?(XŽjéð> +ÑYÂùj¸&ï ÿ0TCᢠ+endstream endobj 1759 0 obj <> endobj 1760 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1761 0 obj <>stream +hÞÌVoÛ6ý_Ÿâ •Æ ©ßjÑ?ÛM=`]¨Ù€j(‰v´Ú”AÉiºahßrGJ²7nœ’|:¾{|¼{6‡™u|zÁaV[ !‹À‹p(aM­“Ä:~ÃC2µ¸ ?xãQH]B—Qæ@²°¢PæÅ.$9>0îAòÙú@Fã7àÓ†ÇÃçÏáLÙ<¢.©f*[,J9ƒ‰l„šf¹°K~ÄJn[É¡® NyàC2²ˆ¨ëäæɉ4¶>Y!d²€_”ünÅ”á¦éLÇd–XÆ·Ùb9µÎ'–ïŸ׀úPÇã¨1æµ»ý{”ƒ:Þ½÷¨–Ë5/QµV±Q(|éE½0š4÷;e\¿Uæ§Ìv=ê“/à0n|| íÃ#îP‡¸6Çkì½0¢9SU+Vyv@Cri›7¢«º´È—TR odeZJÇ ÂNw\o¹ümû4 Žíá•ñ EÞÜ·¾îºï™öß þÓÌ)¸ôôÍÉ‚­Yù—5_Ïçp^ή•ªTŠß^nÚÓ×rŒ Ìt©JL–Í4%ÓjÕÁÁhr9χo1þúÒôàYx™¦òàèºGJ €Í +•¶Ž3Í”ü¥§ëáàá õ.avñ”²q‹ ›”bª†Ù|~•åŸ’/KñQ`J^ɺü:S‡Aa1-ßw{„U{üóÁmé5˜}2[ˆõÎ]ÊPûuŠÈ1ÅTL‘ƾ_gS÷8õç²ÁìüL±]¼³Úl^KòN4ãÛfxe Ö»W…u’)4èV…+%²O÷Žæ.Ø°Z,+)d‰áõ>$†5jÞ'÷ÀÿöY)%º,å~D/ËìQ°›2Û %VRŠ¼)+ä¨Ûm¼Åð=u×™®äENUµZn8ëð‹¯9Ïô`â€y&‡×Y¯ê·ÏªÆä\'ïwV“*)õŸz첂ÆdïÙ™jJ­t Þ׸Æ6Ñgwàz¸·ÀTôjÞ|-¨n€“ŸOß_˜åڅЂøz9®6þÓ!=`sÏj´ F’5òmsèp¦š™m›‘'ÚÝÚdt;aJÝ÷¼î> +mrÏ3þ…ky¤•è|Oƒ> endobj 1763 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1764 0 obj <>stream +hÞÌTÛnÛ8}×WL t!:CŠº¢ÈÃÖNŠ,ÚlÐÛ‡(ªD9ZÈr Éi‹E?¨ÙÊ®#¯ ,PX°Ä9Ãá™Ã3’°°ÎÞÜJXtV  xQJ@«­ÒzXg—$$¥%]øÇŒB®\•àÂ…di ¬Â…+Hr|Òƒä“ugÏ/.ÁçÌÎf''pÓ2qe¯m¶\VÍ®š^·e–kvŸü'©á$—+Žä2ð!™[V¤sróæFTÛ”~¯³B·5|hYò·s[m¢L×dVx\|Ζµî(ë"±—‡vp?îª8Ž{‘Þз‘€¨w½ˆbQ‚2 ŠñCªØ‚^´Õ…8K#ŒòaÞeLyÜ·¿€+$s|| ™ãÊHºÜµ“ø¿‰ÇÌ‘¡F<²oÚÕ+Öy,à¡ý3ˆâmW1ùÚ«†t7ª +RÒuƒp£ŠŒ7\„¸|c>l—yø/d0TÞ=÷–Çžÿ1í×Tý§™[Pè¶ÞÁÞ¨ü䙿×5¼¯=^¦²;N·ÌQŠKû‰¹8¯¶.¸¡‚öß88tƒéÝ´ûà Æ<;Ó &!ñ¶®D_˜ùúJ3….S\`¡Íèy„ßÙO«ª€’v«õìujÖSh²¥Nü³ó§OzÌI(17¤öõÊ$%Sƒµº_S±æGÔðS‡8Ô¸­jôõzùQ·Ä¤jz¨1‚ñëÕq2m…M_¦v¹Z÷§0¹ÉÚNð²À84¦¬JS«{ñ"MŒONÍš +ÿ<bºÌ ÿvÖ.òSȲv:Åû·qýt´Ú@¬—p2TÞˆAtŠi—U­ï‚ûÃ0¶Nø¼¼z{aÀrÞØêîP¸YͲºî‹8¼«¿íÛc(6qexK(›õ;ô¹+)­ëÛÓ¿¤v¡Ël]÷×h2¼T\aœWÍd{cû:þ{ëŸÆuÕõtã{7Mzb%÷ÈçÙi£4Ò•nÖ´´«;Ê!ß‘×ΑC±Ú×4æ=ÏúŒÚþ,¤p…ÞáþÉ9˜í8‡{$#!|r2:âÓCEÓ£!%§åŽóÜk£òØ6Ɉ‰¤Öò1µ§TUrŠ Í4ƒs$yÔ«`¾gÆÏ{vH¾%?Fº.ÏšrwàËgã¿¡gö®f³Õ®nu?×׋”¬u +2e¼:ÒÛWÚ¥ëNc—{-"`ºlòÉ~øµý.À60š +endstream endobj 1765 0 obj <> endobj 1766 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1767 0 obj <>stream +hÞÌVmoâFþî_1Tņx³ëw玓Ú@N©Ôë‰øz ¼&îù­ ITåõ_vvM€á¨ªJ%væeç™ÇÏŒÃ`ª¼a0­5ÏŸàØ×RíçH;¿bÀ J5fż°À'¶¾M µ *4Š§ê„6D¼¡ÌèAéýÁ¸$€ËóËn> ƒÄÖ«©ˆ‹"+§p]6\¤ñ„·Ñ/XÉn+YĶÁd„y.D}ÍÄe‰º³y¶:zÈã„ ˆË¾ +#úC Å*“d¤¥"3¬ƒÇ¸˜å¼–QƒHs{õˆë±ì0 8¥NÛµgß{ñ#Är^ù‘-I–­œÈÆŠ«P1:à… š¹Kfl·eæ×Ø°âêO`Qf˜.Þú†i±€YÄÒmƒá·ÕÚ©a2ßñèŸEÕÚ’ù¤Ã#¾þ»¡<¼µ‹:3LÄ«W¥$^ÑJ%•–åùKZX¸ÄBY‹å/Ã%Vsð›2 =y}Ýúó­ë‘aÿÍ©ÿã0õlò¼ˆ“z[³ò/kþ”ç0̦÷ >L[¯q6j. Ó¶ Ó†…«ó„((¨ÿ¥‚}K)ØÙ^»ÛaHB¯•³¼Á`ÏÇCœõ¸Sœ +l.á«áéeuçy =`ï^ôgŠ%°ñ6îYÆñ¼æ¥0ÖëFLŠÙXïÄbŠŽÅœ˜ÕÉØ€^(^þ\ËØ•´õ7Ëa΢Ûm+E-ÏÄ4÷yªys•å!Ê’‹}! +ØXO1ÃÒjÆË1æ¡G¥"ÄD¸Ñ"Å­° 4‰¬lRÙ%î*‰Ã!Ú¥®óœOã—IQÈÿ„dçrʪYƒx§?Ö§HšOÎÚçu$-.¹mv7x,äÓX-ÞMÅë[I«!Rdn¾ o÷„ËÆÅ o¾à›¬7±\È‹*K:Šn{§uFŸ×Ù´D¦Çz"E°oÖÑŸÜ—U^MŸT†œ'™t cðØðRî7•Àåfk ß5(“W%ˬŠà;ùo±Á +endstream endobj 1768 0 obj <> endobj 1769 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1770 0 obj <>stream +hÞÌVMoÛ8½ëWð(ma†õ‰ž;îvͶКh‰v´•)ƒ”Ûæ'í¿ìP”ì$ˆ‹Ö,iøÞÌðqf,Š¶ÞÕûE[í% ¥$CQ– FÞÆ».¼«9E†ˆÀ.4K1 QÊ&!*v/˜D9CE 7„F¨øî}ög7sã M¯¦oÞ … +h†™ßnßíj¹Ed'Ô†—"øRü‘˜bÆЄbšÄ¨˜yðhâ”ý]˜ß½ë¥à•PˆË +}RAñ·—cbHöÈb ›|·o„6¨›ÂKBœ&°ÛÇ Â!Ëóá(#$²ûî¥èA FOA,`ý"ˆq”*ïÊ,FÙ¨‹É™Æƒ0,¶ÂüÉáØ@!¡Á$†Û4˜„4£!}Pø ­–i¥Îü…j­­:” +œúƒ~EX»Òu0|ýVÝ{U‰Q2 “tP…æC.„Ú\þ bœ@´~ M²žO×gç®Âþ¯ÿcX +,Á™9ƒ±6Iò¬UþeÌwMƒ–õö¾ƒÃd¾†ÖÐBÆ0õ¿!ô«/*ܧå?Tpöœ@KŸº=¶=˜ã<±ålnœ¤à$:u;®€-!}øT"HüZ‰ +u?›UÇU7]ó¿›6†»àí©0c#ÄìE@´¬‘Püv.Ь,ì`²rpnE׃¥è6nØ-߉z vx|ÑJH‡šnys3Ð[Y‰ÍòмF_Ör f ê£åê”­y³àÝýÌCÖ{xtðV£ú1VO#€ùH{1D½€¥~ªU¯Dðeª×eÆ#Ì×`×ßáÙ‘Ô´Ýí[)¤ÝBÙ‚}·wíâ]U™ì‹bÝùàïµîZõÐû½‡{SÀ®<¤î¯ÇDÀ~´¸²ÑТ]ÝÊSú—°”âÇÂäÒÚ¼i[µh¸|\Sé`Ìêo5ü©öÞ+ðú ¯k»ãõÚ<õ„msæêÑ`˜ÀzaÒý ‹®<Š«/š%§ãéý€¹;ëÇUevš ½Uj×Tª¥LOÆŸ“`Z[$,œïEƒ„z@»+àcÍ/w½[û„»3ïÕ³ÄÝ©¼Wía¯Á{Éeyôìü]œµyµÔ—ŸÖ|1½\!ë}Vk¾†·É•)¦ÇÔó%a†ç µìâ\7mù•oÅm^·bMû ç1¯›æ Þ~ +0ñÐ3( +endstream endobj 1771 0 obj <> endobj 1772 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1773 0 obj <>stream +hÞÌVÛnÛF}çWLóD6КË;ѧD’ ˆcXlòPõ¦–2j©.)Ùþ¤þegvE]⃢@m@$çrvÎ\v—ÃÒ:»˜qX¶VäCì&$ø.(a•ÖÇÌ:;çÀ!+-î‹ÿøàIÌ|bße®ÙÊr…¹AêCVà‹ËÈî­ßíÉôB–Àølüþ=\+‡'Ì·›¥ÊW«J.áRvB•y!œ?²_q%߬ä1߇g< +!›X#D¤u +ýæ%„­¡oD¾ +r¹€¯ÊÉþ´R梋KNdéiË +×€éC¾Z×¢%«if…AŠ\#FÀ_z4ûoPÿÇfº +~ĪAßœnôݬüË5?Ô5ÜTË»‹éÛ-ÎF+”3ò}Æí­ãáÀÚbÁt(Øÿ»Ž=ÝÁÎôaÜC3„)K#ÓÎô‚ÆQŒ ÁaÜ]œ +¤àîÂÇ¿…p"»T3Ñ]5r"Ê|Sw³.WŠÇ·ßævÑÎ_MR&OœgÝ#NªvÔ^(?qô™Ë=~ð<;C €¦„îN€xè„l«Ų…uSɺF«Ú|Eë@¹‘EW5’½Í•è¦&ÄíÃÈ~~b8nVëF +¹3Gñ[וý¥Ê‡^QR +Ímú€â!^ªÙ¬ Ð_¶ž¹ßå}ìx^6YEû};<3XûŠ8Ÿ’è»à¹‚ý&«®ÕT6ô6wPñRÓU%5ÃÜþIQÛ)´= ˆ¦ËFhS»k#5òåøù„¨QÑŠ·Qp±žÖ%zí—;+oÅŒ:º«¶¢w+PØ¢ðÍÁÈ°í˦®›{:r‹¼®[çJàɉ³¢F ÅN6ØÅûw4~uûî… š5pºn…0¿͋oĹl¬rù“ËóóéÍô*ê­Çµhi½ËÛ)<ÉZvÊÜ`~p—oa#׎Ð':Ä!¥h¡õ¸‹ýµ©”Xá¶Ïaâª"/î`Q•¥Ph­q>Ýžëz¼FèÒÏm]ÉŠf‹$ç2Ã@ææèÕÊu=„QTO!öÝú<ŠlºÏE±Y?öƒÔÇs‚djöJ<“J|P"?0B…úØ< &„{×8_e{Ù`Bäq€À/sR /DëSá„úúµ\˜“ê@ÝN—Bí¡ô¶øzH7Íýüú>™Â¹9rψ ¸(D]_¨jуPo—êX¬Hü9G¡à×0¹Ë~§Ü7Ç^6¸9ô±t…ö)Ü+q“:Bùëy! Obu«‹©ë»›šS¨ÖPGÄ.¨FFôLjð¦õŒ–ñ +endstream endobj 1774 0 obj <> endobj 1775 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1776 0 obj <>stream +hÞÌWÛŽÚH}÷WÔ£ˆ¦/¾jŸ2\¢D›Y4XÙ‡e 4Œ3ÆFm³É|ÒþåV·1†a°V‘2#asªêTõqUÉ0X[ýSëÒò47ôAPPÒZYw±Õ3`¯,Æâ?^XÁ!”PñÆ¢ÈB¨ ˆxC™ ñwë/{8ƒGBôïßÃD9,$Â.Ö*ÙlÒ| ŸòJªU²ÎßñgÌ$êLœ=F˜ïA<´zȨó,Ì5·¡~ÉR*Hò%ü©œø›Š!TiOnñ| \DQÄ )uës)ŒÕ Ü=1¢XÚA#Šq*2E€F7ltÑ53o/Œðja¾$Žp‰g?§Ìéyx8=ÎBÆ ·…Ãð“׸pz,pƒ„öD5¶Ü-*p|Ø_c‘5®ÊÔéa½v‘kݪT+ɹìUaѾÊêZþu<âc6?) jæãõìëk×Ý~ë/ìfž‚ðI¨ŸAÓ›Ô?•ÿ™óC–ÁCº~¬ða +»ÄÑ(¥rzBfÿãpœW[.‰)ÛßÁ7ìãH§Ý«g0"‘_·³¾Ag?@÷8í§@÷åãßR:¾½RSYMI¾xLÒ|0šÙ3{‰‰–<Îãç­†gÎ"+gÎoÇfõ´8äŸþˆS½5ÎÚÐB %ò!Þ¢Œß½`O’•ÂohhÅ_®Ó Ó2™gr0GøÀtbêÂ9IT•Viq¦W¾¬×®»¬X<%ky*S ½Y¦iVT-¦ rÛ¡Æi–µeNÑ`Û§Õ3îëØ Ý#Ån¾Ð=J­e9Ê—Íc“ùrµË·tß Øl‹\æ• BøEø…C 0_¥°ã+“áùÓ-q÷rŸgïŒøUìáŸêÿQ»my Aü­#4ƒYv¬ëÁ#rå±^{kŒétžéYiˆ¿Ðl»n¥MÒ¼“'K§i÷VôÕЯiÒMì4ÇWí!Æäz#G³xš ½ÂÞ Ò›§“Öz×t +¸/ò¡\%»¬êôpêôzß\Û@_’ µ£·îW£ÄÆ@ƒ»[¾ì¶ãÍ<)yFpI%å1©Y£Rž¤|µâßÓ\Þï6s© †#;À·U>”Y•Ôšárf{ôõ +ú}ôX–•þ‘PPÊ +ªG ºá +øž¨\ï—æ¥æ?Zjl +endstream endobj 1777 0 obj <> endobj 1778 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1779 0 obj <>stream +hÞÌVÛnÛ8}×W ìFjb†Ô]èö¡u.ÍÍŽš>D}PmÊáV¦ ŠNûAû—;¤ä8vn l HÊpfÎá™J ¦ÎÁɃiëÄ$4…0!  ¸S9rçà˜ƒ¼r˜xciB’€êC>s(f!4ÌÈÇø@Yù­såCDR ÷öà\y,%ÛLU9› 9…S©¹ªÊ1÷¾æ¿#RÐ!ù$`À‹#Èf48cûä§&·M=âå„+(å¾(/ÿÓÉÅj‚Œ§o=bÀÑr6¯yk¼Žr' +3ÜkL¢ˆdY$L) »]Ç>Iâå:ÊAüpmÕ2bvÕ¸×*³ +e€‹aºÆfQ¯LuÊ|*½ $‘{>eÞ ÂÇÄø,e>ñÝÀcxõ;{è X&)IÝsÕt¶Éb¬Á‹Iâ^zv…wvÕ +o€|ÝFá­¬ÔHéûqÒ˲ž e—¿½ˆÄˆ╲ Ë¼ºoüûÜ}K·ÿ&ëÿØÍV!ˆIjj°lNoÌÊ¿Ä|_×0ÓkÅ Üg£åÊaîçãÀº|B,ìÿ¾ƒßvpŒ3½÷¨ÂŒdq×Îæã“„«q§8¸ÚÓÇ¿ ÷b·R\¿o]‹F~)•ÍÓ¶pƒÂ{»jÉÈHpø(ôCÝŒ¿—SÞENÑü02ó(`X¶ü‚ËVhqƒQh¶¯E5³y#¹ÔO3|2B¶Z•¢A³¡/„òª\ÔÈp¾òÊɘ×õ‰“­yþ‘ sšn-Øï7ýZæ³Fö;Øšþ¹G?¤Gû+îÛQñé}7m‘wÔÜn—÷b\Êñu)äÖr_lʇ Ï;ë;|élM;WåøûƒähÁû³ºÝÚû’ãËa%¡q~‘Ë¥(Ÿ–ýþ2¯Qâ€P<:ú!žðJað)²*6‰T‹X‰š5¼úúg´ÿr1;•ÇhXš÷мWxðóåÃsáD…ËPD«š9—…+,• ´_÷wÔNá!Ê;$„7\ù¹žÇœ¯n5W8õUᶿ7ÔþΰYÔhŸÈ] &59_hËÜÀîþÒî…ÜÙ‡±2³cµŠë…B‚þºÌ½Ð÷¾&;ÖÆxæA»<ôL +ÝàQ—V—JíÐ×ûÆ,$|­nÔüŠ`HÖÔHßá\ ,6Ä:BUAh“‘ue¶Ø¢¨¦Þæ %î6j÷xµ”Å¿iÄäMá-LW‡¥.÷=xØöa«š.‹†ð8VO×Ýꛑ¡e?;1[øVNŒf»‹–lÔÔïa=6› }ôÁžÙé¹ü,-Ÿ R]ÃYÅѨš…~þ½¶‘eÄkŽ¥;3mkˆ}â3,ͪñÕü…PôD +endstream endobj 1780 0 obj <> endobj 1781 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1782 0 obj <>stream +hÞÌTÛnÛF}çW ’R±V{áMP[ µåÔmš17°‚‚&—2 j),)_ôƒú—]’–åÊN¢@)@\îÌœ™9;g,É›3ËÆ D4?APÐÒ)œïgrÌ€AR8ŒÅ¾XÁ!”PÉÊ¡ˆB¨?d¸ Ì‡äƹpæÇ'‡¯^Á©öXL„[/uºZ•j 'ª•ºH3é}N~ÄL¢Ëĉ0f„…$GÎMžÌ®xl°-ô™æRCªr8×^ò»3%C¨ 2žÜz–˜æ·éj]ÉÆxÍ'ä$ +±Û!.¦Ó)?¦Ôïú¶TX#²A¸¿cD²Œƒ°F$㞪©%h +hôãS3 zbDÐósê Ÿîpʼq€ËÈs3N¸+<†ÿ¼Û¼1‹ü(&±{ªën/ßd-x!‰ÜžµÈn_7¥7ÆzÝZÞ-«Ô0Éyõ¬°i_ e]-z 1›ÿ”Eòöýèó©÷?tûoPÿÇnöDHbsÃlÒð‘TþeÎ×UÊåU‹‡)Ü¥ÑHí… Ì½ö8êÕ•9±¥àø÷q;Á!Jz«ö Óà”LÃnœÍÃAü­Ú)ª[ VceÙY LoG¦%(²ªöB·‘ ·¨7í› #)eœ ~Z¶ôÓ +WÍl;¶=5‰\›a{ÅÝm›Ú‚0èo"{W j£Û«â\?¼:¤§: |AP܈¶Ûå…û²TYe*Í%|Ó´yU^’«ïl½Éh½¬Ÿ3k¼Ù •K´p~òNð<éR¡ãMðF•¿,U^蓨ºí `4ÙŸÿE.‹›Žrµ^¿¼:®Á0„_÷\¸ÙUª!Ç`Y¤›ª}¿i/?Ͼ8™À;—iש.ÓKs÷aæÀB{LÇ'oç#0s2ëAèƒû;îKìÀr"áð‡ùáO¿%¯“_ÎnÓ¦vœš…‹Å¶}¤°€…k,ÆØ¿Àö1ÔÁ£|º–oNñ´Ú¹Öµî4¸=tóŠJêGm"ÛV‹û„³=©Nú ¤çøÄ:`•"D‰Àæ#ÕËìÌùŒF¿¯Mo1V4é-ÊJÎvhQmWRW¦-Om«Ê¬ÎåaOÕJ¢RV¦³T5 !{¡ªRÉw›Õ%Šî[ »º8ÊjeXl‡Ú«ôNê=úßç[ÔZ–KÕìkdÔ=€aù ··_ïu)U»ú¾ñÄmÕžµúi²ºÖ&.p»ÖŸ¾êý1­6òY¯¥®7ëùíZïmòö´Æeƒ9ïºÕl¸Þÿ`û€Y +endstream endobj 1783 0 obj <> endobj 1784 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1785 0 obj <>stream +hÞÌUín£FýÏS\YZ-$a2Ã7IS)±½mZµ%ìöGˆV,lº¬â¢} }ËÞ $Nܤ]µ©T,¸÷Ì™s¿smÿ‡ óZólðyNàÍAI-ÓN"mÿQ¦ 8þð&ŸÙø6gÜ‚h©qdaÜ mˆR|àÂh­]ê“épYãýñî.œ)CÌÖ«¹J–˼œÃiÙH•%©4®¢Ÿp'»ßÉb¶ ¦`Âs!šh&2Ò>i÷dÄÝQŸËd&$å ~SFô»2ŽK8-"¤Õ!sܦŸ“åª5¡¦‘æ:!Æê1×fÙasÎ>jÏb¾wçÇt0ËyäÇlQ²ìΉٸÏUØe(t:Á]bH´p‡ÌØnŸ™_Ãv˜«ß€Å…aºøè¦%a1K· ÿVo÷ SøŽ°@?SUo›µi†Ç|ý½ÑydoWun˜¨W¯JJ|—VN©´,ÏÒ"ÂA ½–¯†Ë<ÜÍÁ.|€žysßz}îþ°ÿ†õ ëª`{, Ü5'÷¶få_îy\pžÏ ÓÖkœZ*ôm&ôkÃÂÕåŒuR°ÿ‡ö­®ƒ=œé͸»ý†,ôúv¦{>’8›qç8äìj?ž^HØù|¶;7g‡›þs)Þ S CÅ)Œv6´|\^×ù¼„f!a&³¤-šŽÁ„©•"fuëƒ÷mÛìÁ_Úór‡Tm“‘EÁfÉ#L† Ä  n0†ó/Ä&jNBLóZ¯Ñº»ûȺ^äZ%Ä:-3ÍØ€Û‡¼rd×C1.W±¾Cl›Y¡ã‚£#à´º\¡Ð:Ú2Œ®L–r‹(¦NÒ–ž‡¾t+‚{%®ÏZ§ãiPž¡ÞX§"0«V²Œuô ‹Qü…ßK§5·Oá•­T^6ÅgºÚ#ûhz~þöüÒª-fPV P.p—.ú!ô8¦ª£ýð9j%›V•`= ø²eýBVYÔ²ËQõ@GW¬Éb´ÖãÀºª¤Õr•( ë¼YÕ\\ÊbuõäÆÛÃèõ2—Ôªk….¸4+øŽšc(ò÷WhZg£ùO Ï>-Ÿ ïöUMÑÞ×á´(ä<)(ÊeR¢yE^J¨VM^•ðúUý­T‘½¾oþFݦ$wâúY°CÆô¯>`ðL±Çc Ï”þ`Hh†Ûºóõi™7㟺ÞD{s§ãáYDëÆ?NÇèÿùÃEt½» ¨“¦­·do³¿—øÅ/l¬»]Ÿú[øÆ:ɯsLùx‘(J¢>:½ïI[Ÿ`6¶îy/¯^†x"é¬þ»²›úѲýô2Ä‘LeUTó›&>V*AÎQZ)‰ö ½ßSãwñꧭ +endstream endobj 1786 0 obj <> endobj 1787 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1788 0 obj <>stream +hÞÌVÛnÛF}çW ôD6Òz/¼¢èƒ+ÓŽRG$ªIQ+.e¶"i,©Øéå/3KR–âÆ€’Ê@!»šsöÌ µ ÖÆÙÕœÁº2\õÁö]”4RãçÈ8»dÀ J Æâæ{Dpð%”C”£j¢N(³!º7~7/ÂKpˆóá«W0Uó‰0˵Šó<+Ö0*j©Òx%­?¢7ˆ$Z$N„€#Ìu º0Q㬚÷uì&ôLƉT ¼SVô—Š[¨Þ¤=yã™!„q~·‘•ö +#ÃåÄsñ´.q\ \AÄö)µÛs7R4‹¨áö‹(–vÍ"Šñ(UÐ.ÚþNÍ™90Âi…y[Â&Žù8eÖÀÁ©g 8ó'ÜÃ'´3Ïö|â›SU¶¶d»ªÁr‰gþj5+²µ«*³È×, ­{£*ÕJrîz*,è¸PÖrùd9ÄE4Ÿ”ymäýøäçsã‘n/õìÖdA¸Ä×9ØÕ&uŸ´ÊÄ<ßl`–­okL¦0+lJ*k aæ‹c¿š2! ,ÿ®‚=ÞT°‹-½ïv§íÁ€n[Îz‚ή‡Aì}·Sì +<íèÃðu8´\ó—›yt-æK³ªãz[-­÷eèèc_4îzÝ·ü‰Lï/7e©î6q±4{hÇö>_\G½Ýöè‡c@:¯§±EVWK“Qúmá³ ”q¶#}vúc¸x“ý#:ØXÞ_g…\šß‡}}‹îYU—êãQÀ¯[_ÔsX¢])¹ªeó(œBZ*˜MÞ¡ù&hÞŸq’àšnE+”)ÌGQÃÉ,d°Ç£;¼¥‰KKçê¹_²ö´gíyù‰'ã®"f‹ëPLU™C}+¡5¼¹ÕÖ«“”Í€Zú¸X#“ªÌ%¬$¶[©2M°À]YYT§Å>]ÕLÑ}6™†³è7”p4E£Éx~TÍëXÕø§sw¡š~+™ÎKGB¯ó$–y.‹Õ6XwºL!«àOUþ- ÈŠº¡S©Êm +TýŽŠj:oÝÒI{G‚à C Ðnê7¥®ÍxsØ ù™`ÿÖAe2š1ÉX›áÊØëC¯Zmó^_3¦ýæ ')M¼e·4Ñ~¸’úÖ„34w'AÔštº©!c%cu‹õ-jžó+Ê^Í&‹©]¯ÕÝéOùT×G¸ +ÍÜy1Uóø¡Õõ v^JÔáäít2ÇQS@+ýÖîÃKÊú`V$ò᫘xù,ÀL@&Y +endstream endobj 1789 0 obj <> endobj 1790 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1791 0 obj <>stream +hÞÌ–moâFÇßûSŒüÊÛ;6ûàGú"'uÛßÚ¦ª\¼W`ÐÚi’~£~ËÎÚ&Ú“N×8ª@x™ïoæ?;ksXYgWs«Êò%,7ôA2ÐÊZZ©uvÉCº´¸†¼ð0 R@ eÒÅpÊÜHBºÀã.¤÷ÖÏÎ(¾†0<¾ySMxH¥³]él³)Ê$e­ô2[(òKú-’dKTJpÊ}Ò‘5À gÑŒDhÖn–ž©,W²2‡š¤¿[ex 37OÑxÈ€ø!ÛìÖª2^qjyn„¹úÔó +EP7dÌm³ö üý<ÊA…{4j±d3‰jöô¡Ý½¶ #ùív6tö\Ä=´;îÀX> ¿‰‡Äw¾ûužž§ïç7NUgõ]uCÞ¶¡gÒ5îfÝï*ørµ¼Çf^ãþÞÔÍ7Ž=œ\O'ãxœÚoÁ®Š?•ö·ÀÚï~Ùô«Ïw^§L<:äƒv{7°l]Û{š_†5¯5y ͆¸Ç­³ªg›òû‡¦{¢*Wõm“#Ú_Ž÷/9Χñ09ÿ¾/¶h/ëDzû­ä1¶(sû)ÓÞÄ=fn²‡µáIé^eÅóäjl¸uQ¯¶’}q·\*m÷¢ó»ÓÅVõãs4wûQú@½ÝÞÿV¬ž—{øÞÐv6ùØT¶(÷ d°œ*c´Ïúvèe¡Û³ÂhßouÄ"xù³ð”õtÔO“¦ªù.AóªÜj•*½9djê@súù4 ´ç»‹¢¶{>•O¹Ú”·õQ;êŸEØV“Y<™¦hO®“ŸÎÓd2~-ýÐä +í]4ÏC1*¼Â3òrÿð>|õ'‡!£½ƒßñþ`ÿSyq +endstream endobj 1792 0 obj <> endobj 1793 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1794 0 obj <>stream +hÞÌV]sÚF}ׯ¸ÃÓ®Ë~H+i2y @Ú¤Žñ`¹~ˆ2 ,X><’\‡þ£þËÜ]A!D¦uât:ö åîѹgî½BÀÜëþ|%`^zZAÈ#ð# ŠCa¼™÷Sâu_ Ì È$´à2¤)"!™$Š +ü”u<¦úaÄ"rY¬ëØô~RÕ,$¿Q·cêxQæ´ƒzÉze}w®r뤔:ܺ"â­.j-Ñ€iÌæã'!@ͼ¿}}ìú/a?†õ sOAiÙg°«M®Zå;sö çóÛ +¦"%¶Fi +ÚQŠ ò•Ø¯ÄL™“‚å¿­àPº +ÖØÒûnêŒY¬ër¶ ëIü}·sì +<ßʇ²Ê*ªÉ} ¯`jfWU-Ž%{7À°™¥¤u1ºÀ¶í]Ÿ'ãëóa«qh­¦wˆ­6ðú£)¥œ¼Ü—o`í¸4ý_†}Düúñ*é%×W)±yïË”Öðä¬Q §ÄÊÀøWJP†¹WrDúm©qH-¶¹íÉšrc¼vAís3ëÿs >~c¢ ‚¡ ++áY WÓCÿŸÆ‰% Rìj Û[So†½ñ°×X%Ÿ.×¹=Re¤$_Ug)]f‹Åz‚츓ÿiÖ3·‘Ò3}¤gó]wïs¿ç@b·?Bÿà€AX€:ÁÐ 8`àŸ`h0( N04| Ð'š „'šÇu8ÈM¯0Ùy^V®tÛ%A‚¶#ÃÅ“Ës‹šÆ8ΔLn³+fËü¸Í—¸]¹ïjùø æá<_™”Üð”yÌÝ4FøGîM#ßWãdý€3d<ºùÛ¹Ó£?Û)‚?TB%qnt0,„®ÑâXØâƉÒÏ>XMaÔ„¿)f5¯nQKÀY€¯Mž!ÓþUfŸ\QÙ\³¼(«‹liìôÙ·ÇbÓzÚ¹ðEüY€5µÌj +endstream endobj 1795 0 obj <> endobj 1796 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1797 0 obj <>stream +hÞÌVÛrÚH}×Wtñ¤qÌ0]k+¬ŒY'¾P lâ +)—J»\#9Ž÷ö/Ó3_ˆØÄ®J¤qw«Ïé3Ý#8LNÄaZ9„EàEHZ9çÏÔéìsàN.€áÞxR) ”Œ2éÜa˜…2/–æ¸`܃ôÒùèîõöÁ§$äÕ+hÂ#*ÝåTgóùl1…ƒE­ô$Ëù”¾A$Ù *%´9åéžÓÆŒ'·+™Ü6õPe…Ò- +x¯IúS†0ó‰6r†ÐûšÍÏKU™¨^êø^ŒµÔ€ +Ç1P/bÌkª ƒµå Â»ãGµŒXÒ:Qk­b«P èô¢µ0†4÷WÊH¿Qæ(#Ò£¾{‚qÒöq’¶àT¸’p{µvFÚ<ôˆFî@/‘×@ºëQ]W3ÒF¾îra„·²2#¥A¸’…Ç+.Œ7\þ'> \A<¼24™oîÿ>tdØËdýÃì.È€FfÖÍÉ‚YùEÌnYÂp6ý\ãfJ·ÂÙ¨”&m))w¿몂Z*Øÿ«…íàgúfÜýfcM;›!&ñnÆáT` lEª:«Ià^Tð +5¹ÄáÆ~=Wº¾BóØmÍŠ¯­]àcòÇM_úF‡=û|òW/ÁÀ·g£´›¾]“ð¢Z‡§;÷¢ ——£ZcöáÉ{´Ÿq†­ädØã¸hó˜143³ä¨:úö ‹]´7üŒmÀ<¾™g£Òð8ãíßñ@ 4¯yÈÙ| •RC>J…m´À–’”qÁ×=Õé@ŠñÃnòvtoÓ•Ù•Âm8Ý|¹¨jÈ?gzggLæèÈÊr™#Ìì?µœ`€qÉzøµëLÙ'LVÕº¸8ÇâxkLÐñC©RåÿVý¡e«—V¿\˜Ë.”†Ì•ÒÕV[3ÑJÙ!¼.¡´ÉëcËO)ã´)÷epü6U`r4¿|Eþ¤aÕåál¡ð±§Ò3ç2þ²XÅc×õ1>éö‡{?‚ìçª,ûzV hhÿ`û¿9 +žëPÚ€8m5;bË{&Œ-•[Ïë­q5áÝãÁa7éÝ;°›ÈI¶”ø Ošæ-Sœcžúyx¢˜íÒ·C$ã[ïŸí(>„oÑ~Ü\4ïæÞEâÛïA¥ŽOÒ“$y78]¿Ú¿ 0~–ͧ +endstream endobj 1798 0 obj <> endobj 1799 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1800 0 obj <>stream +hÞìVÛŽÓ0}ÏWŒòdCãú’8‰¥Û…Vm(B¡Ðº¥¨MWIºK?‰¿dì¤{H +Bˆ6vìãéÌøOR ¯ûx$`QyZAÌ ŠCi¼¹÷(óºÇdsOHàøÅ›Hb¦$ÄŠ3.![{½0¦ +²)¸!»ôÞ’£Á1D,~·ÿ>œ•T$L‘Í¢Ì×ëe±€“¢6å<Ÿú.{Š‘TI2¥ Lè²#/@6ÎÔdb};×C“ÏL y1ƒ×%Í>y)ãønd-¥³\b |Î×ç+SY«AæiÉb»Õ,ÒÀ¤JÓX˜p6ûvT¸EdƒÉðÖ"’e ”[D2®¨JA)àb˜ìy±9‹¨%FE 1§9U!‹È$4ˆpÓ@ŠDH&‰¢ÂõÇe‡qÂrVnl¶Ö@5‹É˜ºÓàeµ¤æK6…åݱÊ-“Rê¸eE¤m.\4¹|¡ÓDÒ{.b€ÆóõýÎô{÷4û=^ÿb3§‚Ò,±ìÏ&×wJåcöV+.kS‘ +K£2% ”b‚\P‰õJÌŒ¹Tðø·'8–îk,éëjšLYª›ãlh¬ct^W;ǪÀ-ð6}¨ê¼¦šl+x33¿ìçE±©_N§Ûs„w£ºœvîw +;bóÙyÔ‰ÞÔ„>¸>µ‘eéÈyï?ôÑüÙûQÖË^&ĆÛV7ÌãBŠ½}· c´?é¾éîn²£:/ëñ2¯&X‡šìÝf÷~$xku×'º{‘¯ îz|‚xï}o8ì½ñåû,¯ñÁVLâþ™BQ¨‚“§âxt°(C3­q§ÂFé@ò¶kÚ„"~ÐHã?éT¶‘"ÞvM;T¤—…Á`ƒb6!LþGJüWûW{½CüUQ}\Îk3Cü`ŠãUnW¦yŠ¬w–/œ"O’»†0økSç+ ?ÝÖBú7P;¹Ü©Üþ Œx¼¬À®ÞÄáÍe³šyãUò÷Êz±D<—¿GÌ‹FJé;Ò5Š÷ÁòS?Ïw¦”­˜v‚hùS2úõæüÊ‹v—-ãåÄ*+Pß}®ø_ã«戴 +endstream endobj 1801 0 obj <> endobj 1802 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1803 0 obj <>stream +hÞÌUÛnÚ@}÷WŒxò&ñfo^ÛªòÐh“* +nú"äÂB]q©lHBÿ¨Ùñ-Ú4u¥ +X/sæ~f€ÃØ:|Ûå0N--Ác>(_ƒdkd½ ­Ã6áÈâ¾ðÁ}Jžd” §C/”©@B8À ã +Â[ëÊ>nµÁ¥>4›ûûÐI÷©´çã$šNãÙNf “Œ¢!×á)F’E$A¥‡S®]-=fqùMø™ïÜõ…‰†&h6„O ¿ZehÂ2£LSäš1Æ€Ö]4ý61i¦Õ +-WX«¦®*d@•Ï˜*ªÖ‚zºÂ±T¨8v+k–ÌAìÆ}¯‚¼C ¨üª1YÒÜ-;#Ý¢3g‘Šºö +ãÄqñêGpŸ *lIx~ærAî)ϧ¾ÝIæ…l¸,€hêÙ—$GL!OÒ˜8˜¯=ŸeÏÛʲV +¡½²-<(sa¼Èåq©Æ0 +OÆ=€Âóú¹õu×ó™jÿÆ묖³ 5õ3ªádzkWþ2æëÉ.âñ—’)íw#5 q¤¤Ü¾!Ö6Cš§‚ó_N°'ò Ö¸Óëuw‹% h ‹qÎ.¨¬=t¢ÖëÎp+°V¦Íw­&Ñöû~7|~ìöìt-–i¼Z¡›•}œ«g(ª/S8‚¡Ý^ƾ“åÄœ£8‰Çñ¬gsv€f¬òî='R©õë£Qj=ýã[da†A ÖHG üÂZ¢ßf}<ü>ï£ÜóµÔu>3­5öì?.I‘”!ý»IùM &g¥ÈÆ.:_Ü©NÕ”7:ÂQÒu\%“SÞî6êbþ íƙȢ ÙŠ•Gñ©‹ù:¹¸ëÀªCÏΗŸ'f¯G¦Ñd2 aü3UXìé]̬^è§Ìú®sÅPé+tå°ÕÆ)Û¶ã÷vÛV·MD <©‚ž$ï­Ø¶•Ü•ßïF]Õ6{ùd5ž—~&qüÔf}€é¡1Ô:ߪÞùÞ Ÿ3¶‹ûmhƒzñØj´Á¾|lõ±Ÿ ¾¾ŽD +endstream endobj 1804 0 obj <> endobj 1805 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1806 0 obj <>stream +hÞÌUÛnÚ@}÷WŒxÚMaÙ‹½¶õ!%$M«$Üô!D•†¸ +¦² ŸÔ¿ììÚ”–KÒ¦©!í®÷œ¹ì™!`ê´¦…£ø<7Р8ä‰3qÞENûH€€hâ ¸‰ÀgJ‚¯8㢙ÃÑ ãn¨ á ¢{ç’vÀctÚ7o —S0EæÓ<žÍÒl +'Y™ä“x”ЫèFRU$É”‚–`B{:-ôhâŒìIÆ·uÝOâq’CœásN£¯NÈ8špcd˜Ò2SŒ݇xöí&) «9Z2_ãk5ó40©Â0朻ջ­D5˜tQ,CPD1~JZB@Ð –º˜œ…W £¼J˜Ó˜*—yd’ ÚòðèÓ–LE…]í=nÂwý€¤—Ï«»ñí¨ª™O.¨E’ê>/RÚÂ|É<3º[U¹QRJíתˆ°Î…‹*—ïÔcšHêâÊ…Py^íkŸ»ö?¤ý¯¯˜f« 4 L –½ÉõÚ¨üc̃›è§Óë‹©H£Q$9m)Ź£ç•$cfSÁö¯;Ø—¶ƒ5ŽôjÚ½jCêªÍÉÚG'îjÚ9N>×éÃCïRQM®à-¸œï¯zÏ3o=´œÅN´·4wkÈ[ƒ»!´òjHoZí‚Š2.º-'“û‹4îÍoÓy6$xß8õMÐMôÞD7Cº¿ZwÞw;ÈúøeDŸCbÜÝH{,Æy–`˜n6’!E`ÿ/\¢ŒŠq!ÅRG|6¯ß&Ñzƒ³RMÔÚTm„VrGñ+hK…–%›Vjw,ww†îŽwm©ëY> endobj 1808 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1809 0 obj <>stream +hÞÌVÛ’£6}ç+ºx^[ÖT*g“Ìz\c6W§Rc/).`²™üQþ2-áëÌ$™d=©ÅˆVëtëœn•9¬­áçsëÆR|€( êÌZYŸÅÖpÂC¼²¸†?|ñÀ§R€/eâÂbˆB™JˆS0îBüÞúŒ£ x4€ÑpôêÌj‡T’j]'E‘—kø¢l³z•¤™ócü%F’]$A¥„§\y­"ê8©‰@cèÛ,Yf5$復ø+¤ —0½H{ +ã™c ˆ~KŠí&k´W[žâ^õP!Ã0ꌹݮ• ¾ÚÏ#T¸góÈ–&KšIdãÀUh +'Ý`OŒNš{;f¤×1ó&q¤K=r‚qgàáÐw‚\PA¤ÃÍÓØ]gÀ}×h@fuÕÙ–wi Ž¢>ùÚ13Yg¯›Ü`¾¤*5ñ†V¦©Bù;Zx¸Ë…ñ.—?*"ŸŒûòñýàó¯ÞÏt{ÔØͨ  ´ûâdêA¯|`Ì«Ínóõ»Å”¤ÁÞh²ÚHI9ùÕØ°$[R“ +Öÿ®‚}a*XaOÛÝëš0¤¡êÊYÐYùâÛaWàØ.}hÚ¤u¹kàSXf«÷·Ù:¯Êø~›-ÚíI4EöÂùäX•žfalV^G#ôúê§y|¿/ˆ†»köîqïÉó¶ÆsÛb›¡¹nïÄnÒ»Âîƒ-ÐV[í@þ[(<«L ¢!‰fúôÂHÂc/!©³ññœÅë"!:M¦I±Ó¤6ß¾ ø¬ÊKmnÄÅ´û€·gœ1´_f#ÿ üÏU«Ý«â2;‹Êe·¹ÆÐöï0±Ò%e\ð}©‡ ýoÞÌn¦Ñ4ž?Ù«ªÖ;Ë×¥NbAR ÞBú.©{=“B‘l6UŠÁòß³j…zÊÌôăXß,¨wÐZí0pâo—÷aËoê{æ 'ηñ< ”ÿÀ +Ú÷Äœ³¢ `O̘K*©ÛQUl«ÍÅæü"õÓ¡"$V)Ú¿—ÁãºTÇ“‰´M‹ yúöúºgO´?O#€9ùwƒ³K÷XßaÃbسë«Q4ÆÈ<ðÐ +ìQW÷¨ÒÉ> endobj 1811 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1812 0 obj <>stream +hÞÌV[oÛ6~ׯ ô$¶Ë®öàÚNã.qƒXIÔE!Ø´ëÁ–IY7 ¨ÿr‡¤dÅéÇî2Ì–%òðð\¾s>Ê -¬£·c†¥ÒyQ€E…´æÖ›Ä::fˆ¡dn1Ž(|áÁ¢ŽBA å(Y[¬êÅ%SPæ¡ä«õÑ鎑O"Ô;ê½~Î Ì""œ|Q¤ëõ2[ aVÉbžN%þ”¼OÂxâDä2Â%}Ë‹ÊÏTx¤lkÓ2É¥Ù }(pò» +[¨Ú¤4¹Ö\‚4ø3]ß®d©´‰pm@ü.â8FÄ‹(õLÞ +½hîm-XJAèEcU¬Š,zQƒ‹Š™ù50Â7Àœ¥XxÄwþBœ2ìú0 ±ËYÄ8áŽÀLßµÜÇ. ½0"‘s^äF6»›V$t®°^‘F^”KìB¼Nž)Ü5ªT!ÉyÖ¨°¸Ž…2Ëwì“Àá؃;e!BÆrû|0}ìùLµ—±ú?VÓU‰T šÞ¤Áªü¤Ïîj….–‹/S8%P£”v… Ìùsà«#gD‡í_wpÈu@é–í¾á`LâÀ´³€r‚¯e;V@ +´•UZáÀ¹+ѯh&ç_{ùú6ÏdVMäß–Ôî {8ºúü´ƒF— >=5B[ÍÕd#ÕÓ¶ƒ}…X_{B:íz°õ¡ î`êllµwX¹?¥úrAÊÔHûI^í0¯ò(äb™gÌnL¨ Ä n¹o¦w2èÁÂoŸÇI7¹OÐ]9Á[Z¢v’‚x•ó9ȨñäÃœÒf~ÒYS"vh‰vB÷œÊØ—£óÓnoÐOLg !0jr?ÈM[¢—Àk*W+Xïä,èÄ´™½™,T)«¼°÷BLy¸.šJ4FU†[øÙÇÃëHûF“í—A™x¾€Ëo¹¡´_8þ4põ]a°b£Ar:'[ ÕF¶ASY¼¿Òð2¾^ä ·’¯ƒÀšç…­å"+?ÒO€XY³»[€j1yɳt-íG7]›M®Oé#7;5ÞK(ŽQûVR¼L%“áÙpôV•§£#UøèÞ¯'×›Hožixb³É¤ ‘ë#§¦÷öìsÙíKá¾ø_æÎE®Ä•> endobj 1814 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1815 0 obj <>stream +hÞÌVmo›Hþίù›Æ›}tꇜã^z͵VM¯­BTqxíp¹ÆýG÷/;»àÆIdÉq©Ø†ež™gvŸsX8GL9,GIX^¨@2¨µ3w~£W8Äs‡ `øÁ *’Q& ^: Y(ó" q†Æ=ˆ¿:çîÉøø4„ÑÑèÅ ˜Ô„‡TºÕ¢N—˼\Àë²Õõ<Í4¹ˆÿÄL²Ë$¨”0ä”+âgˆŒ&OfG"4Ü–ú½Ngº†´œÁÇšÄÿ:eÂLñÖ3Ç0¾I—W…nŒ×8v|/µ*ê+ BFQÔ óºU+AµÆQ*¼;8ªeÄ’D5~hY…"@РטIs¿WFú2¥DzÔwW 'C‡ +rA…+ ·gkWdÈ/ièNꪳͮ³ˆ¢û7±ˆîìu““!Î×­J#¼••)…PA/ ú¹0ÞÍåâSå +âá™ñ c¾½Þ»ÝvÝÑíyXa7» RÑÐìÁº8™º×+?™ó¸(à}¾¸lq3¥Û`o4º&C))wÿ#ÖÕ3j§‚õßWp l+ìéÛv÷»&Œh¤ºr6tV’x·íΰ+p ¬Ÿ¾=ˆêwŽfvƒƒC0×Z/òª4[CÿMÈo·ëN,ñèt°^ƈ^× ¼„™žUË«ªÔe{š¢¹¨¦Õ¼M\κd>þ„™»G³_²i[ãó ÛóJ£¹nW‰;È2\î ¾ÌÀ¯q¿ÔUW+(ò¦> endobj 1817 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1818 0 obj <>stream +hÞÌVm›Fþίñ ³ÞX@U?¸6—^sç ƒK*£ +ÙØ¥²±\Ï÷“ò/3»À]ì$J«Ú½Ú»~vvž™gf¬Œáë„Áª6¤Ÿà…*7–ÆÏ©1¼`À ]ŒÅ/.,ð‰àà J(‡tcPôB¨ +H縡̅ôÁ¸³&Ñx$€ñpüêÄ•Í"¬íªÊ6›¢\ÁeÙäÕ2›çö‡ôWd-'B€Ã“¤ÃAŠg®w$MV5qQÖ3‹!Îföãø—hŒð›ß“t”Þ&3KÝ¿¯¬Ž¢¿™eÖó¬Üˆ—æÌ2o®·—ÓøáNo¯®ú'!ŠO‡uÐç ëØmºÕ—(›Z@O|¼]?®¶˜âæ&o²u:æ€ì ÷ñkr*ÖiÞDû]Õ²î¶yÅàÝdÂÌÖdW”Ô( ’vp2MÍÏJò¤î‹W%iª6Õ%Äû¢©Öi€y%‘Þ\\þ†h4im”Yb~7~ü¨> endobj 1820 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1821 0 obj <>stream +hÞÌVÛnÛF}çW øD6âzo¼¡èƒ"É®ZÉ ":)aR* ™2Hʱ€üPþ²³»”åÆ- dQI wgGsvÎÎ’ÁÖº¸Z1Ø6V ¤È(A¡.¬õ:µ..0H7ã@ñ‹7…Dp%”CzgQŒB¨Œ¤·8 LBúÑzïLg—à“&“W¯ ©]áì·uvwWV[˜WmQo²ÛÂýþ‚H q"xŒ°À‡tjyQáÜêTlúM‘åE Y•Ã»ÚMÿ´bBñ/TýIyríY"̳»û]Ñ(¯Yjù2Æ\â@¸ˆãˆŒ(•&뀓08­#„Ë¿­#[Š,¡‘'®bÍP ¸(£1jÓÌaf™¹Bß9§Ìõ|†®ÇYÄ8áŽp™¾j{äz,”aD"'©÷Æ–n[p:o]½R{Ý”®‡ûuö•"^ÓJ•œaG ‹»½PföòÙõIàpW╲ÀD>ß¿˜þÛý݆‰ú?vÓ§ ©38' ¾ÐÊwbŽw;xSnÿhñ0…Ó 6š¢v=!s\Ž‚uŠœè­`ýwr]Ájú,w߈0&q`ÊY Ð91ˆ<Ë¢*0Úmš6kÝÀ94ðäÅæcRVcÔwUe šËj™=®Ê¼×E6ÉêµãSŠv:{)íµûã¹X}EÎTü<› ×¯¿¯Òqz³Z; +åÐœÜÓ¾ :Éê¶Ìv“C«Ð׎ô£—Ð]¬~1YD;å©hg½­û¾¬¸=B;ØUÑâÌü:¹I;ój~u=^àÂõÍb¡–•<¦2gèõ t-uƒî㙽®<ûxc´¯Ù±@~ì¥ff¾ÂR@UUÇÈ¥NÿÀÉ~wÜî‘C´ÛËŽ9üÉ<¢9KYÅú˜_¿¾Y½W-æJÂþdæzbâ©ežû¥¶^ΛM¿Þ"¥ ‹34FiÏŠ01á!ñ3N‡f$Þ#ÚW„ ²6O’ÿV|@Ði¹Ùt/  +íEñ듳ߞ“—´¿á§hã +endstream endobj 1822 0 obj <> endobj 1823 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1824 0 obj <>stream +hÞÌVmoÚHþî_1ò§Ý+Þ싽¶ÕÞIhÊ!(˜ô¤¬àpœ'2¤M¥þ¡þËÎì:¥M[5§ƒêÙ»³Ã<3ÏÀÍ«ú°ÜTݦ*çÌt <ÚÊQyG ½²™3K8:Dû¾ ¦«Eõ .í 8!î ®w»qHvJâÁN‘JAï] +ò^ ».årpXšzôsô ;h‡Ÿ"é±C©£†ãç³é3´ËßBŒÿÞïݦ-m8žÌ +:›ÇÝQè­“Q·7èãæ3pÎvѾ¢8é€Vh¦Ö(?­›>†pÑjâ]U4*ßUÈUH"oqþ0ì¦hV gh¦<‡Þàw|>g­#ÚôŽO'?&Q+"Ï¢Ù±éÇé«š’}¸ÅiѤ«i‡ Ž«Íàîñhh—õBÁá¸î°?§ý¾oD»"ÇǾhž¿¢&Àx6µeR"Õš~Ô–4w¸d w˜:ʨûš"ŸQ®~wæ;Ñüp4q.IZM ¢éòõEùà›,÷+¨H'Ÿ„K!ù—pø—ë£é™=ã +endstream endobj 1825 0 obj <> endobj 1826 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1827 0 obj <>stream +hÞìVmoÛ6þ®_qð'2i¾H”„b[ÙÜ¥‰`+É€y[v48v@)Mü“ö/{¤äºu´é\lfâéxzò¹;Z^ïç±€Eåi!À4(¦ðæÞiæõÎÈæžÀñ‹ƒˆB¦$„Š3.!»ó8¢0îÇ +²)\ø=z¿“Ar‹ ßë¿z©¡"bŠ¬&¿»+W ®êÂÌóiAÿÈÞ “j˜$S +º‚ @6ðºˆhy¦Î’‘ÅvУ"ŸòÕ n ÍþòbÆñn²‘ÒE–ÈÉS~w¿,*•d^àǸWÍ Lª8Žùç~³k-Y¨·ó(“þ'ó¨–K¹ITãƒV±S(œô£­0vÑ"h•QA£ÌÛœ*Ÿd’ Ú Ð iWŠHH&‰¢¯~ãç´+B?ŒXDR³n|³‡i T³\S7S4~S•´‹ë%ë•ÞÉÊ­”Rê°•EÄíZ¸hÖò7 ˜&’úxå"hwãÞísã7†ýÔÿp˜Ë‚Ò,²9Ø'×{½ò9O–K•‹Û“©H…½Q†v•b‚¼£–3æ–‚õßVp(]kìé]»MÆ,ÖM9[ƒuˆ þ®Ý9vn·Ë‡ªÎkªÉC?Á¬˜?¦åê<ßfB:oÑ/;ÇÀݯ+šQptCLèë]¥V™Cìÿ’ô1ä×?ÇÙIv5žKñPmó£çx¯ËYß•9úEK,ƒ½ç¾¡¯DEk‰cè /.¯2´;èN/o’ÚWççÇÃËXk´ŸV»Öö‰ÖeŠþì;]›zB¥‚E³ùE·KñGù•Ž6·”°7?(ëzj[—k›Šôü¤Ÿ ¶9F?G£3î’ñÇ©&þ%Õú—×®@h–õѾ.ÚÙð·]¥}¯hxÈ)ÆñÄm¹}æd5Còj§Þ OÅ}ü¹)¬pˆG¦·¹9šÐ§ô9èÏc7és¸½¤;¼HG—i2ʆÉø‹˜ûû×¹©­¼ø.£É}aê²ÀÝʃ¥Í¬-èÆí£3-–K[.ôT¦ºÇµÁWWÇbë±Þ Ëìþ´¬-Ë8ðÅvÙîÝ–Áì<$R ýþ˸ðoÿ½À¡çW +endstream endobj 1828 0 obj <> endobj 1829 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1830 0 obj <>stream +hÞÌVÛnÓ@}÷WŒò´†f³_…x(I€-QcÚ‚eo]#ljÖ[h?‰¿dÖN¸8ŠäÝÌΞ3svfm…3z¶àP4N !dxQ’VÎ¥ó$qFO9pH..€á…T +%£L@²r¢PæÅ’ 'Œ{|rÞ’Éô)ø4‚ñhüð!̵Ë#*ɺÐéjUÖÌj£ôeš)÷]ò™dÇ$¨”0ä”>$gˆˆ–'kg"²Ø-ô™Js¥!­s¸ÐnòÁ‰)Ã-Ìn²ž¢õ,‘¦7éjS©ÆzM'4 0Û€úP!ã8êEŒy]Þ­í"ªA…÷Ý"Šed»ˆb|•*nŠ½h§‹™û[a¤ß s’ºÒ£>¹Á¸;ôqºCÁ#.¨ Òåøô:;.óÐ #‘¹^w¶ü:3à4$çn»¢:»nJwˆñ’umuoUeVI!‚p« +·±0ÞÅòÙõi@„ëá“ñ CÞwþþjüM·Ã þÇní)È€Fö vµÉ‚;­òœÇUgeqeð0%i°5¥Ý¡””“®À~%*§m(XþÛ +E[Á¶ô¾Ûý®c]9Û :!‚xûngؘۆIëC®.?ÍËëu£´¹Eó’ 2UUbpƒy>XºöÕé[5&-ÊøùtŒî/ß/’ãäÍbI,ìu³sOü” ï‘ï¹òͬ¨×Z%J¯RÜÙÿw,Ó:ß%…fmJÕ,ÉŸ!cº’2.ø.ßÑè?ŸŽgǯN§É⧪ÜdaRm••)š«Se0’°—$;T ¹$hÔÊðAÏÈvóº®UfÊu½­ n+íç“ ÎØ=0Š{g”÷Îè”ñÍen®ìÄžŸ`‡d°ç%{g8·ªU&-Ô’H*zF·½½I3üÖùF£#à1Úqœ€p}­3ÌfÌNf§ÏúnÞ×öî+‹²N+ä°…Õ3Á476þùë‹éÙà¥ì‹»'ñÆóÝ¿nmï­ks»Q¶ûÐ]Û‹´®^te# ï?§«-:šm«ô¦Rua®,‡ \ZÒ-~F|`C# +endstream endobj 1831 0 obj <> endobj 1832 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1833 0 obj <>stream +hÞÌVÛnÛF}çW ô´«Dë½ðŠ¢®Ä¤NÛ°èÌ  È•Ä‚" ’j.”¿ì,)Ç•m¥nj…îjæì93³3¢Ì­½·SóÆrxÜÛwAq¨µ5³~‰¬½7D3KHàøÁEøS<Å—--Ž,ŒÛ‚(Å 6D­k2 ߀Ã|ï_½‚“š +Ÿ)RÍëd¹ÌË9”­®gIªé‡è*©^I2¥`$˜pˆ&ÖNÚí¤o¸;êSdº†¤ÌࢦÑVÀ8áæAÊ™£„Ÿ’åM¡ƒ +#˱ÌÕeŽ Lª €Ù>çvŸµ+™çÞú±LÚ~¬–)–êœXoµ +º +€NÛ¿-Œ Z8ëÊ(§¯Ìû„*›9ä3H.èÈÁ­GGRøB2Iø´{»¤#áÙžÏ|rRW½-[¥-P—yäœvÝÛë&§#Œ—T¥)|WVnJ)¥ë­Ë"‚u,\ô±|¥sQÆÆ'@Ï|·Þûºm}"l7¬ÿcXw Êe¾¹ƒÛæäî½YùšûE§ù|Ñâe*Òàl4º¦#¥˜ R‰KtƺP°ÿ×ìÉ®ƒ]œé»qwú! Xàöíl6v=$±ïÆãT` +|>Œ ÇÔ%¿ý>ö£³iLš6iWMLºkCǤ=éàÆ‹ðU?C¦g§7:Í“âH·!šËì¸Ô¸Éíùhø•5j;yLÐ>8ŸNÏLlWe©Ó6¯Ê˜ R]bðh{4ÁxE¹¡È_@Q½xŽöNsÚ;¾‡d½g¨¶¤wÍ? WÓÖÙê+æ ¶D'¶»èzðÑÙááãšb“K2t<.¼ ~Ww+Ñ®¶zy-7Áöw£ÿ" +ù +çAÿØÃ'U^¶¹–Z‡Ÿú×zÝ)]öË•YÌÏ\Ýéîf–Â2ûÁWé¬ÖÚt1ùÖÕ]ìØO^ý ˆ<þ`õ2H +endstream endobj 1834 0 obj <> endobj 1835 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1836 0 obj <>stream +hÞÔVÛNÛ@}÷WŒòäMɲ7¯mU} !´´!bn"(²âMâ*7ÙN)ŸÔ¿ìx + ÚTT–ìõÌÙ3»gfÖæ0p¶?´9 rGKðY*Ð dÆé;ï#g{‡¨ïp /|ðÀ§R€/e¢±Ã…2Jˆz8`\Atí\º»­=ðhÍíæ›7p”PéNY<§“ìO +“õãž!WÑ'Œ$«H‚J N¹ö ÚuÈXÆéÙ‘JnK}lâÄdO8ËHôÕ )Ã)¬œT"…E¦ZßãñldòÕŠ-¨¯q·šz¨aUcªÚ·•Â:Q *Ô’Å*Ò:QŒ_R…V Щ‚[]Ê5so!Œô*ab"õÜŒ“†‡CŸ4¸ Â•„ã]UvIÜW~@÷(›V¶dÞ+€h껧ÄzLeÏò”4p½îtRênUe¥’Bh¡ +ka¼ZËâQí +¢ðθP1ß=W^×=ŸÛ ë+†Ù,HMƒ2·µÉôJ«üaÌÑŽÓÁ°ÀdJ7ÇÖÈMFRRî~#ûÕ5 µKÁò_T°/lklé»n÷ª i¨«r.Ö>’¨»ngظ¶X>ô3cˆv;xõ†qVïÞtš_ò«y{W‰^¹óÝGf\ܛ՞ƣ¹¹dW¥çéxþL¼x~™qÈyï 1ýëöÌôÒxthŠ6š‡©%í"ΊŽ[ßt'¦¨u:–8š[M´}è¤ÝqKÒyþüH_â“a¤Q[™ü×Bœ¥I1ì¸!ÛT€ö0žÜC;:Þ?j½X­2_ˆ:ÇòÁXy‘%ó²rÅC{í÷ð‹¸TB)´³Ú:z¾L/Cñ(ý2¼^{¾>GÓt‚Õ$¶,éùÚíèbS 9Mc[RÝèäøðeuµîä`O;.פ·þļ +-mžØËÀÿuxwƒm1vããp¶…,vSØ)ö…±×t¡«=<Ãפ¾þ?¤¼5I:îÆNØ¥ï¿/þ9ü`p{! +endstream endobj 1837 0 obj <> endobj 1838 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1839 0 obj <>stream +hÞÔVÛNÛ@}÷WŒò´›’eo^Ûªú@Chi sAÈŠ7‰«à Û)å“ú—ÛI#h©Ò•%ïdöøÌì™;ÆÎö»¾€qî÷Aû‡Ì:#çmèlï Ž!ã…‹ð=¦$xŠ3.!¼r8²0®á .4„7Î9ÙíìË|ho·_½‚nF…Ï™³èê*IÇ°Ÿ6ECK/ÂIÕ‘$S +Z‚ ãB¸ë´±Œ3¬,é—ÜuÏF±Í Jc8ÉhøÅ ÇGxùP‰”2ÁÐù]]Om^¢:¡ãêÏj˜k€I0ís®ëSÉ<³ÜG9˜ÔwöQ­R,Um¢?µ +*…ÀMí/…)“îBåÖÊDTiæ’[\Ж‹¦G[RøB2Ix×µáiÏg>éf³ÚχPô® {Ö «ª  óË,›“›{³ò1w¦Sè%ãIÅT$ÇÙÈmF[J1A¾R‰Kl̪T°ÿìɪƒ ÎôjÜÝz˜ºKÁÆC½wŽSGà‹ô¡ý¾Ó¦†|¼ì‡;áQ@ò"*æù€¾^µ¡[{·‚—»Ÿçðb;ºé_ÛaMmÑG÷$±ÓøStk³iÈÆ’%l®kZ#ÄI“ øFF™µˆà5œDYs@‡³YvzÎ/Öž­ <=ë2þ,Ý,“Bò"‹çר©Ð‚sô7~?»WZj~Þxˆ^Ü¥Wü#ý]x³ñ÷¥ëÎ’´¹U‘žn¡¿²ÎžªWŽ“¨jÆËð¨wØx! ó@y›kÖUUÕ‰o^ñÜ—›¾žM~©9o”k¡ù?ˆßIãydò.º£ÿŸ¥¨B?ììvzýªï ;/Ú +o¼' OãÏ©E{Cu±'ñÃþC€œé= +endstream endobj 1840 0 obj <> endobj 1841 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1842 0 obj <>stream +hÞÌUÛNÛ@}÷WŒòä¼ìÅWU} $PÚB#bn"¨²œMâ*±#Û)å“ú—µC“¦@]JÔÊ’w½söÌìÙ™1‡‘±{Øã0* W‚Ç|°}$ƒ\CãMhìpà .€áƒ÷=*x’Q& œ Y(³ aŒÆmok³Ý9‡ú°¿»¿½ ÝœpŸJ3åÑtš¤#8JK•£X‘›ðz’µ'A¥‹Sî:¶ µŸ¸š _sWÔ§*¨¢t9 ?e¸…éM)*d‚> ó5šÎ&ªÐ¨Nh¸‚z.žÖ¥Ž TÈ €Ú>cv}îJŠÊˆjPaÿdD±4@VFã‡TA%Ph´ý{]tÌÜY#Z˜ãˆH›:æƉåàÔ#–à>T˜’p|ÛõºC,îÙžO}³›gõÚ`—@\ê™ç¤²¨z=/ba¼f–jÝ+U™VR×[¨ÂƒE,Œ×±|#uMAl|3îÔÌËqíó±±!l3¬ÿ1¬ºéR_ßÁ}n2w­TþÒçÞd§Éh\âeJ³ÀÒ(TN,))7¿õjª­BÁô_d°'ª v±¤—ÕîÔ5ÐÀ­ÓYOìzHb/«aUàØ"|æJ×ìã£|«Oâ,Ë/¯ùMŸ¼Zf¢£OÞ~bÇÕÊŽpëIjÑ xõ+°(£ó^Ã@ o{3'ÑäD•}×[çívkmËþÛÎ>šÞê…{áY¯ojŽyјXoÎÒTÅe’¥}³µÕÚÊ®ï{ao]\ŽÊq¯ŒrWq¨/"Ñð0é€uy®‚ÅÓÌ¢óoîfIŠé.w*ÞKtÑax–äµÖ´í°¦Œ7eü§­q­§œt.6ÜPŽ7ÜL„·áfÒÝk?¿Ÿ> endobj 1844 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1845 0 obj <>stream +hÞÜUÛNÛ@}÷WŒò´Këe/öÚVÕRnQb +ˆ ÊŠ7—*7Ù¦”Oê_vÖN IiA”H¥²äÌœ=3{vÆÐw6÷Úú¹£</Ô 8dÆé9Û±³¹+@@Üs„Ž." ˜’(θ„xìpdaÜ‹Ä]4¸ð ¾q.ÉNc|B}³þæ 43*B¦È´Ÿ%ãñpÒ‡ýIa²^Ò5ô*þˆ™T•I2¥ÀLhâÇEF›§[Z2´Ü%uË$©É ™¤p–Ñø‹1Ž[¸Ýd‘²D14¾%ãÙÈäՈߋð¬šù˜TQóBνêÔZ²@/â(“ÞRÕ²b©2ˆjÜi• +E€A/\c‹þ\åWÊ%TyÌ'· ¹ ®f@])B!™$Š +|{•_SW^²4³iåK¯»PÍò‰–Sù³|H]¬—L'VøRVn¥”RsYD4¯…‹ª–ïÔgšHêᛋ b¾_W~þn}"l=¬ÿ0¬¼¥Yhï`Ñœ\¯ÌÊ_æÜ 5ì +¼LErœÜdÔUŠ ò•JXbRV–‚ý?ïà@–¬q¦ïÇݯ†0b‘®ÚÙÖ’x÷ãÎq*ð|^>t§ÓŒjrqɯà=äE–^Ï:¤&”ÏkèïÐw÷íèÛãïü¼íüR,mó°0ýµÅ¾xc9Ë2|c—I¸ëQ©éÝ´g¦;LFǦh¢;)ÍépRtˆ|[Ržã‚~´.VˆêuŒ|nÇ[ñi»C,óu¾‚êeÆØCâÓ$ÙF‡–¬¨Å“€OZ™žÈø ðQIÚE’¡$µãÆYíY*<šá0¹5f8’kJp6L‹ÞjÀŸÅ׌Ë=ìz>Ö‹‡[ñÏ ¿JýªûüÑtIÚ!/LÝ@÷$=™´_œ¼C¬úõÓúÁšzr1V­“Ó¸±óÚ'‹ó5©4Hf°mo¢µ¼÷À ý?ßâu|hðý‡+ŒG +endstream endobj 1846 0 obj <> endobj 1847 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1848 0 obj <>stream +hÞÔUÛnÚ@}÷WŒxÚMËf/¾ªêC +N›6ÎÅQeáåR@¶išOê_vÖ&ÐÐF ´H‰,y‡™³gfÏÎkÿcGÀ ·\÷Áö]P2mõ­‘µ(@@Ô·„Ž.Â÷˜’à)θ„èÖâȸ(ˆzhpaCtg]“fxó¡±ßxóZ>Sd:È’ÛÛÑdG“Bgý¤§éMô3©*“dJA]0á:5­:2š<½Ò’¾á.©Û:IuÉ$…ËŒF߬€qÜÂÍ&ƒ”%r„9 ü‘ÜÎÆ:7¨0²\É<Oë2Ç&UÀlŸs»:w)ED5˜´Q,PeÅXJ”€AÛÐÅÔ,œ…0Ê©„9I¨²™CîArAëš­Ká É$QTàÛ^ú…g{>óI+›V¾tÞ+€ºÌ#´ŒèÊŸå#ZÇzÉtbt/UåFI)]o¡ŠµpQÕò“:Ì%’Úø樘WëÚϧÖ-a»a}Á°ò”Ë|s½ÉݵQùÇœã1´Gƒa—©HŽ£‘ëŒÖ•b‚|§ç•è”•¥`û/:Ø“e»8Ò«iwª XàVíl »’Ø«iç8x¾(zÓiF]ru-nà=äE–Îg1©Ù˜ÁA-¦ïVýè˜ó7ß×]Û··Ü핸¼H +ÄÍsD¥º×™éÞ(Ÿê¢…¦£Iù¶¤¼Âýhu׈ŸÂF¾|íDÑy'&†yž¯¡ú™ÖˆŠñé “l/¦%ë5¿Ù +ØÝhôÚ’ñàFI:E’¡$µÓð²ö,6f8Nîu†NäŽ\ŽÒbˆ·êñgñ/»’?ꮺí`½ø¸»Êá5s!OPohøuò—ÕçÓ…“4&ÿ™:D÷$=›h´ŸIþºç3&¦C.MÍÃà·ÏΣ°ùÚgŸó©4LfÐl7Žk¯õ ƒÿè¿Ò}þ +endstream endobj 1849 0 obj <> endobj 1850 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1851 0 obj <>stream +hÞÔVkOÛ0ýž_q•O6PãGžšöAØ؃U4 ESÖ¸m&šVNºÇOÚ¿ÜuRÆè@tŒN›"ÕÎõñ9¾Ç÷¶0r¶Ÿ÷Œ*'Pò¼(ÅÁhgè¨,$ïh³¢Û¸© +ÚÁó’iiolåÖJ)ƒpa‹ˆgá¢=Ë7ê³€Hêá'!@Ë|=.½Þ5®[ë? knA,²wpUœ¹.Dß&¾×l¨ê¬Æ ó +á¹~îÍô È.uÝÅpV»Ó¢¬ûDn5ܧ8`ggWŒéFC´û"ÙÅ•Wï{éNzÜëË<¯–PC£5¢úø Æ™ÙèÓ†õœ_¬<[xŠ¬Èø ð^KzufÐ÷09qä½ +¯³¯Ú Â¹&“"¯Çx«!_oœÍ4&ÐKºÉÃ’XÔ²-ŽŸk¹ãùȇ ·Ï–ÀBùܵ·~õÍ6ñ°}Œ»·ÃïîªUmyÜfºW.)ó>ydêÃeþ¶Ô8 ùÿý%Ð'¶BJñØi7OËRêbZbuuÝ-@!+·|Ír¹)>i#Ü-Œƒ[”AòÃ|2ËPl†öe¶Ù} _tn½–~ŽÞ§ÉÞo–þø.À½´Å +endstream endobj 1852 0 obj <> endobj 1853 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1854 0 obj <>stream +hÞÌUkoÓ0ýž_qÕOö ž‰“ñat «Ö°‡– …Æ} ¶™’”mü#þ%×IÆXK¥²‡„"Åî=çžkû¦FÎöÛ¾€Qáh>À 4(¹q†Î›ÈÙÞ :BÇøLIðg\B4s8ª0î† +¢N¸p!ºrÎÉnw<@g»óâôr*¦H6Ê“Ùl2Áþ¼4ù0z½ÇJª®$™RÐLh¢]§Š¶Î šÉÀjWÒG&IMÉ<…“œFßœqLá6É2eÅœ` è^'³Ë©),«9Z2_ãn5ó40©Â0朻õ¾++*Ý`Ò½¢Y– *ÍømUX‚npë‹]³ðc”Wó1¡Êe¹Ém{8õi[Š@H&‰¢ßni[ø®°€ôò¬Ž¥‹A T3ŸÓ +1uƒq’oÅ´rn#âÙ¦D{¼*nH<ÝLî&VŒã7¤iâõ®ÆÄ^»ã~_<Ûà3† Û›½Ã“îÑÃZòº¯‘1I³ÅשÁ Ï’é4 ò“ o±˜né¥ô›Ç¥_÷Î9’lJ&–”×B˜%H­f­ƒ0K6»šµÂ,Õ@ÞjÖ:³ÜÒ«Yë ÌòÈ_ÍZð¿í—,l¤e +endstream endobj 1855 0 obj <> endobj 1856 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1857 0 obj <>stream +hÞÌVmoÓ0þž_qê'{¬®_'âÃÖe¼‰QÖÀ$(BQêvEm:%Û~ÿ’³“Ò16`/P£Ø=ŸŸçòÜS¯÷|(`ZyZAÈ#ð# ŠCi¼‰·›z½}Ò‰'$püá ¢) ¡âŒKHGÆýXAšã„ Ò3ïÙKö!`ô{ý'O`PR1E–Ó2[,fÅ^µ)'Ynèçô2©†I2¥ +˜Ð¤{^-Oîf2²ØúÐdcSBVŒá¨¤éW/f·p»ÉzJç9CHγÅÉÜTÖ+I½ÀñY5 40©â8æGœûÍSkÉB½ZG9˜ôYGµ¬XÊ-¢?µŠB1ࢭ„±A‹ UF2o2ª| \Ðn€Óv¥ˆ„d’(*ð4vN»"ôÈEdP.Ûø4¯j’Ô­˜Æ^V3ÚÅxɲ°Â;Y¹•RJ¶²ˆ¸…‹&–ï4`šHêã‹ A^WþÞ4þ£ÛfPÿc7—¥Yds°*N®¯ôÊ=9wæs8œMkL¦"öFeJÚUŠ òJlXbÆÌ…‚õßVp(]kìéu»MÆ,ÖM9Û :ëAüu»sì +|Þ†UÕT“Ó +žÁØLΆ'&ŸeóSмœ_L—ňt¦Î梳 þ6ÆNÎÛp1ѧëZ ¬6{³ÿ"é£Óë/Ãt'}?KrZ­ÜÓ­;1ëk˜[¨û¢Ùäõe6î.´ Ž£ä|³”)…»6G™ ¹¿- ÎGäNà“ÒôÂÝ$?ÎÊ­=üÕå·t] 1)Æ«(­*uu‡èlá[¢õïõÀB%éðÒÔYY8>vù z;q;…©EgDqáa ûË¢Àr™Ùΰ]ñQE;ÜÖiç-ÖM3©Gc +6Á”´eæ[W>nŠq> endobj 1859 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1860 0 obj <>stream +hÞÌVÛnÛF}çW ô´«Xë½ðŠ Š,§nUE°(ÇEYµ’ÙP¤KRuÔ?Ê_f–¤«ViºaBIž™=;3¤€­uþz)`[Y®û`û.(¥¶6Ö«Ð:¿ ÜXBÇž„ï1%ÁSœq áÎâȸ(¼à†ðÑú‰\L/Áa>LÎ'/^À¢¤ÂgŠÛ2ÞíÒ| Wy­ËMœhúsøFRm$É”‚‘`Âu ¼°FÈhâ$Í•ô wC}­ãµ.!Î×ð¶¤á/VÀ8ÞÂÍMÆS6ž)Æ€éûx÷éÊxMCË•Ìsqµ.s\`RAÌö9·Ûu7R4FTƒIû/FË8¨Æˆbü!UÐmÿI“³p:a”Ó +óCL•ÍrÉ9xéÑ‘¾LEG³ðlÏg>Y”E‹­÷I Ôe¹¡E·xY¥t„ù’"7º7ªr£¤”®×©"‚..Ú\>P‡¹DR\x-óñ|ò÷sçèöß°þÝš]P.óÍ<Õ&wOZå+cŽ³ ®Óí}›©H…­Qé’Ž”b‚üF%ö+ÑkÖ¤‚åßU°'› +v±¥Ýî´=°ÀmËÙ\ ³ë!‰}ìvŽ]Kà]úPÕqM]²¯àXëÍã\×7i‘ÁB >8ƒùj6;~ü" ƒÅl<™^ Ù±ÏÀÅ¢*¢/Åë±.š “o§´· Çáju_=¹‡ÃÏ¥2Í×or=××9ñÿ+&¡G‘º$þ†W™ëZ "Š†žSŸy®“:E¸0r&:ËlÔk°+’tYZ±ã¬ÆQ^/ì˺Äw„&ÂdqUÏã6¹Êß!žy?2áÛDÖ-§•ié|[ßc,Á™}íÅ"®ñ{ËLÅWãÙxnæ__ìfæ¢r-û¢éÜ™À£í´ÖLWüç"~yuÛ ^©šI,¤Áæ½eòÉÈ…¯˜¹IQ”è~‹ôIŠ¼ª!¹Ëá0¢» YV$È‘þ®‹ :SD‡ÎŸÆÊé<îü÷ŒÝJ:¢›8ÛëS2ľOÉZËÐù²ŽXˆ»Ã>^ÌŽöµ9§cþÊÔÈ`l&üóBàÛÄGPS, +endstream endobj 1861 0 obj <> endobj 1862 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1863 0 obj <>stream +hÞÔUÛNÛ@}÷WŒòä¥dٛ׶ª>@bZZJQâ¤P‚*+Ù„TÁF¶SÊ'õ/;k‡"RBS¤V–¼›Ù³gfÎÌ8&ÎÎë.‡Iáh > @$ƒÜ8cg/vvö9pˆÇÀðÁ…>•|É(_: Y(S¡„xˆÆÄ×ΙێöÁ£´vZ/^ÀqNx@¥›MòäòršNà -M>N††œÇoÑ“¬= *%49åÚƒ¸í4‘ÑúV;Xc’‘É!IGð1'ñ'¤ ¯0{É"E…œ¢ˆ¾%—W3SXT;ž +1WM= TÈ0 ª€1Ug­õõí9ÊA…ºwŽjY±duˆjüÔ*¬ +Up+Œ š{ e¤W+ó>!RQϽÁ8iz¸õISð€ *\I8¾½Ú.H“ûÊhàçYm͇%M}·OªSÛóbJš¯›¥VøJVf¥Bû Yx¸ˆ…ñ:–ïÄ£Ý(|3îÔÌwëÒÏUëš°çaý‡aU¤¦­Áms2½4+ésw6ƒÎtrQb1¥[àl&'M))w¿ëš­BÁþ_t°/ªÖ8ÓwãîÕCÒP×íl7Ö>’¨»qg8˜[„E™”D»ó^ÁÈŒ¯LÙÊÒÔ Ë)š³tà6özûmh|—wíéY9ÚMëMÔBü»ÏÝx7îu®å·ðxk•³£,Å]2Gó¬ìÌgvz‡o,Ý}²‡^QqF]´GñÆh»S3¥Í%ò÷»Ýg£n·7F}œ”Ý2ÉÔ½8Ú,ûarcÏ‘ý½°-³ G½ÃC¼ Ìàf†f¬«xRèÃ,³ +œœ±s$.Ê|4¿Âx¹Â G{ãaøé\*®ÚÙ +|?™ÍM}Ç*ðpüe¨k }U÷Ñ[:æ;kQ.áD ûmÎâA×+ŠyœMÓºåvEsR/§¸ØOP–W¤O*ô87¶ø /’|k@*X”µ€§¿W$ÑŸ&׶N:âýƒ].›lLÔüѶ`ÐìiµáÿAmV1òuùùA¢?åÆ¿è oé +endstream endobj 1864 0 obj <> endobj 1865 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1866 0 obj <>stream +hÞÌU]OÛ0}ϯ¸ê“ Ôø+_šö¥llÐ!ˆ¢)jÝÒ©¤(IÇö‡ö/wí”U”–u“P¥Ø½>9÷úøGÀÀÛ~×0(¼@AÈ#ÐQŠCn¼¾·›xÛû$}OHàøÃAD!SBÅ—ÜxY×±‚¤‹.4$wÞ%ÙkîƒÏ"hl767á8§"bŠŒyzs3Ìp•&ï§]C¯’˜IU™$S +ꂉÀ‡dÏ«#£ÍÓu3YnG}bÒžÉ!Ízð9§ÉW/f_áö%‹”9ÄÐüžÞÜŽLaQÍÄ $ ÜmÀü˜TqÓçºÚ·“Â-¢LêG‹(–(·ˆbü–*vÅ€‹:zÐÅÖ,ü©0ʯ„9J©ÒÌ'÷ ¹ u§!­K É$QTàÓ¯âŠÖE¨ÃˆEä8W±Þ¤[ XHΨ[1U¹*æÙ8÷wÙ¸"ìÿ°¾b˜;°ÈžÁCoò`Î*ÿ˜sg4‚“áàºÄÃT¤@k&§u¥˜ ߨD¿Óc®lÿi‡Òup€–ž¹Ý¯<³8¨ÚÙN„H¢gnçè +ÜŸ–÷Í ÈÇ/íd'9mwHQ¦å¤èÐ7³6ôí¶÷Ü®"|RÀ[è™þ]Ë”Çiy}˜Þ çR;µ-[Ð:=<|`I6VÉ5E-IÑ.ïG6¢×¢íŽÇ9¢Î/ùeÞ›Üb¹Rs^ÃøbôÅ<:B<Æym1þ,MLõŽÝÿâÄ|H† ‹ó?o<›W,Ì»DÏãñ0ÃpÙ!rËÑœWÃÇ™#]Kë~nl;tð×½Nóu P˜•€«­–+2ŠU媌O€K„nf½yÚak›¡5.®‡fÔÃp»LóÒzNÖ^ÒB n»¼¶š)”Z?cŠùŽh¹géÿÐóÏkbûúIS[Úÿ ¿;Ú—âE²O™i™Ê”ˆ‡¿ Å{Z1Ž_„å÷4Jùã µ{ÚÆ8J\[vů½Æ8ËL·ÚÛ#³Ù†öSPÛÁ"á'ô—ŠËî +endstream endobj 1867 0 obj <> endobj 1868 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1869 0 obj <>stream +hÞÔVÛnÚ@}÷WŒxò6x³wÛjZ‰[Ó¤ AÁ¤QJQ0” +LdCÓJý¡þegm()jª^ JAZ/gfçÌœæ0röÛF™c$ø, ÒØ:ÕÈÙÁC4t¸†_|ðÀ§R€/e¢©Ã0 +e*”õqø‚èÖyãÖ/@Ójûµ½=h¥„Tº³QÚ›NÇÉŽ’yœ{ý˜¼Ž‘IL‚J §ÜhˆêŽ‡-O?߉ÀÆÎCŸÇ½AœB/Àë”Dœ2<Âì!ë)rÏ1r@ãSoz3‰3ëÕˆ­B¬ÕPm€ +†!P0¦Šª ¾YÙQ*ÔvTËŠ%s#ªñ]«0W(4ª`%ŒMšë¥2RÊœöˆTT»ŸA0N<[Ÿx‚\PáJÂqÕ®ˆÇ}å4p[é¬À‹þˆ¡¾{ArK\ài6&æëÎ+|.+³R +aü¥,<\æÂx‘ËW¢©qQ¸2î‘×ÏŸ÷=Óm7Q±[~ ÒÐÀÞÁª9™Ù˜•ä¬L&p>½ŸãeJ7ÃÙÈâ”xRRî~$Ö4OûÙÁ¾È;ØàL¯Ç]CÒÐíl7èl| ¢ÖãÎp*°¶L²yoNŒ»Èà âám3žwÝÒ—£fµÓFü€=/uÉÓuKj+A=?Z{Ù¨¡Ë«ëvT‰:í®kc-²•{ôä>‚Ú,Iâþ|Œð,±lcV*C©‚ Û8ý×dp–ÄÍa,ýáÂb¥’2.øªÔ{T:ëDÕâíþp2]=:™~­Òi§Ÿ!~ÔܽFýx2QV¥V…[ïÂÜÿ§©./9c¥<ïku%ƒ +ÓV¬Ã¢¥Ð°~Ê$Œ‰ï‚éâfl .®í¼wªòº¸¨24;''eð–Râ&_W ¢¶O*µF½T¾Kù¿ÀrsçÃamX¾«±-ûF bg%[‚²¹¥wYßU Zs„í%H¾Ý +Ú‹w ®î¥vàï”±]Ž–ŠÍA_Æ׉o 5éò +endstream endobj 1870 0 obj <> endobj 1871 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1872 0 obj <>stream +hÞìUÛnÚ@}÷WŒxòÒ°Ù‹½¶Uõ!Ò¦% CˆB¹`À˜È6MóIýËÎÚPZR’6j*KÞõÌÙ¹œ=#sûoÛÆ©¡$8ÌËU $¡12}cÿˆdp \¸ëP)À‘Œ2þÌ`…2Ë“àpøþ­qiÖêG`SªûÕW¯ ™îRiÎÇI0›EñŽã,LFÁ $Wþ{Ì$‹L‚J N¹²Á¯Œ¨ó òpuì·­;ž'ê †å· uõ¬´ÉÔƨüa΃éZÑx’áeJ3ÅÑHÄT¤¤ÜüLΫi^ +Ê©`Gä +V8Òëi·‹ô¨§ +9ë ‚•ƒA¬õ´3œ +l-ˇê»z•(óÃuÛ?ð;í¾™fA¶HûäõZ†¶n»–õá‹ÞÀ0Ýž†Y{ñ1³f„æ¸o–ºÍãÓÒ”º×íÎ!¿îõÐÎ+­"úå]ò.Q÷¤kÙ¤ š3L×:ëøõÚ_ÞîB4'ý„c+ »iuuþ´,£$Ôáúø &ARî“Á|žô.ÙÕNÀ‹]½K¾kÄ_€ÚŒ@]r‘fÉpqƒíÛ³ÚK÷Ã/6à’Iö¼LáÆ‘ຟ¡å­Uð*¼ßW‘9í4»¢9âBnb/Ó+– \ÐŽ»<è‹VÇŠ|íyn5m¡±}S_L<äÝã.ž6O[´ZÞQ¤åçQ§­„ûà¨ðGTñ_ÿDçhŽ²ÉY…±þ·:²„ö=Pcÿ×߸†ì¨ +endstream endobj 1873 0 obj <> endobj 1874 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1875 0 obj <>stream +hÞäUmOAþ~¿b§]*ë¾Üíݥ鴶j‰*†\á@swÔú“ú/;{¢(†Zlš4$ì2ûÌ3;ÏÎ †Öîa]À0±´—{`{‡8²Ö~`í ,!ãá¹LIpg\B0¶8²0nû +‚n¸°!¸±ÎI¥zó ¼[~ój1Sd:ŒÃñx4ÂÑ$âAØ‹èEð#©<’dJAI0¡*V Mœ^¶“žáΨϢ°ÅNúð9¦Á7Ëg]¸q2H™!Gª?ÂñõU”T5°ÛÇ\5s40©|ßf{œÛyÖZ2W/ÎQ&í稖Ke‡¨ÆV~¦xh{ aÌ¥…3WF9¹2'!U6sÈ-H.hÉÁ­KKRxB2IøíävMKµ]y¤Os[ÖKjæ’&ÍN¢Ü'#ZÂû’éÄŸÉÊ”Rjw.‹ðçwá"¿ËOê0M$µñ›  g^®+?×­Â^‡õ†e¯ 4óÌ,Š“ë•^ùØ{WWp6^¦ø˜Š$ØIÓ’RLïTbÃ’¨Ï²«`ýÏ+Ø•Ykìée»;yúÌ×y9› ‚µ‹$ö²Ý9v¦ÀçׇÞtSMZçüÞA’ÆýÙu‡Š…}»,DÇ$^¹ïÐ^qPÂáíw~Añ>¼^Í¢Üå´q|ü¤u.0:ŽÐÏ0¶WàÅg#‹'#'i˜"d–àa?ÜœFi-L/kÓÑÍi‡ÈŒ¦•/m\ÐŽ»Œt%^ù}µŒ§»õ`/hÔ;Ä°Ï’Ô Ž"DuðÓ» ãb‡fPš€íMFÍ ×ÈRô;ļ$ï'8볯“(­©‘x»¬ucc|ÂB½±/»­–༰ݵš'á‹òö¸*ì@áðµB4kG§&@³;OíÛÌȼo= ã¼ì gŸAµ²UöãðÖT_Œì'Sá;Y?¾(Äš¡%´'=´óµ#ã!^+µá̺sq×Ã[¤ÕÁ¥í &ç7¿â?ž7mÞ5Ga6ï°^»'ò7›ÿ® 0ŽEëí +endstream endobj 1876 0 obj <> endobj 1877 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1878 0 obj <>stream +hÞÌVYoÓ@~÷¯ùÉ[šíöÚâ¡´áìÕnHiPd'5j´v8~ÿ’ÙuzJC Yònf¾ãÛ™q8Ìœ­ç ‡Yå( !‹ÀH:w¦ÎÓÔÙzÆC:u¸†.< +©JF™€ôÂah…2?–ŽqøégçÔÛí>ƒ€F°³µóèô4á•Þ|¦³‹‹¢œÁ˲Îõ4çä]ú +=ÉÆ“ RB‡S®HwZ4~Æv'"cÛš>ʳI®!+'ðF“ôƒS†G˜9dÂ" ôÝ/ÙÅÇó¼2¨nê(AC…Ù*( BÆq Ôó›¼-V‰lPáßR"Y ­ɸ¢*¶Å€J?ºäÅÄ̃%12hˆÙψôià}Á8é¸ IGðˆ *ýêåjCÁò_Vp(l+léënšŒi¬šr6«ø×Ýΰ+0¶ Æó¹&Êœ²wðªZO‡žËUì3”3wH_d`ؽyð¤upãê@ºq×ÏÎy ¡¼ ¯ê¬Fñ¢Bà$Ÿ~>Èë^VŸõæE‰âzèñMkrÐ,'¸ wÖAËØ΋îj_’t;=N†ž±¾¨VsÙ/²7(.ê³C]äeÔcÞ£}é¢|ܤë>ÈáTç9¢†øŒÏ2½1$6#dg%àɪÀKÎf¥”»ådèýˆ~0Éâ}™×]sshx½V#Î4V„›?•£Á€3æ®×G¯@q‰ÞÊh›qïüùßrÑï½<0ú£e:(_gFæ~“:ÓM¹G‡Çiww­Ö÷²¯¦m—®Ø&ïí=ÈÅ]c)ŠZcé6¾=„B +2e~1”~œò•fÝI 'ð/×½Qð{£¸w4ŠµÆ?©îŠ€¯ÿøê³?vVb­ö…»Þ*u«Êñãÿ]€S§ +endstream endobj 1879 0 obj <> endobj 1880 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1881 0 obj <>stream +hÞÌV]oÚ0}ϯ¸â)îŠëÄI4í¡ºu† 0ªR¡ e‚P%a]Òþå®(ƒ•Žu¬š°{}|Îõ±ï¥ÆÆÉÛ‡qb( sÁrHqhŒŒ3ß89çÀÁ\ÃÜu¨àHF™f0d¡Ìò$øœ0ng\™åÊ9ØÔ…ÒIéÕ+hÄ„»TšóqÌf“h QÆ£`’kÿ=*É\IP)¡È)W6øe£ˆŒZgÍ„«¹3êf ÂhŸbâ1<Êp Ó›4RdÈ j@å[0»†‰FU|ö<<«¢¶*¤çy@-—1+?µÔQ«u´ƒ +kcÝÒfÉlÝxðÊËò-weŒNšÛKg¤;S ˆ´¨mÞƒ`œmœ:¤(¸Ë¦$¿í<î’"w,Ç¥®Ùˆçyl¸¤@uÌÉVÂ<'RÄ|Íy¤ÏleÚJ!”³´…{Ë\ÏsùNlªLA,üfÜÈ™×ãÖŸ»Æ=aÿ†õ?†e· uõ¬'S[µò—š§Ó)4'ã›/Sš ÖFƤ(%åæW"°`ÍpH³Tðý/_°#²¬°¦×ånçEèQOåÏYO¬$±Öåΰ*ðl™> æó˜(óòŠ]ÃHÒx¸¸í™…£B¼^?D[¼üó†N0]„[›ÆöùG> endobj 1883 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1884 0 obj <>stream +hÞÜUÛnÓ@}÷WŒò´›’íÞ¼¶…x(i +…RE­Z%²' Ê¥² +ŸÄ_2»Nˆš6Åâ²ä]ÏŸ™=># {û/ÎŒsÏ(x:4 8d©7òžÇÞþ‘ñÈ8^¸ˆ0`JB 8ãâ™Ç‘…q)ˆ¸áBC|ëuÉaë|Bs¿¹·팊)²gÉl6™áx^¤Ù(¤´¿ÂJª¬$™RÐLâC¯Œ¶ÎÀídh¹õYš Ó ’ùÞf4~ïEŒã+ܾd‘Ò!'XZ“ÙÍ4Í-ª{F²Àài ó 0©¢(¦CÎuyn'…K¢Lê;IË”K¢_¥Šœ@`R‡k]lÏÂ_ £üR˜7 UšùäH.hÃÇm@R„B2Ix÷ËxD"ÐAÈBÒÎel¸@ H‡ºLZƳ|BØ/YÌ­îNUn•”Ò+UD´ê…‹²—ÏÔg†HªñÎEP2oÖ­Ç]kEدaý‹aî+(ÃBû ÖÞäfkT~°æÁt +g“ñuS‘G#O3ÚPŠ òJœW’™kí¿rp ƒ ŽôfÚýr#™ÒÎvƒ` ‰ÞL;Ç©À#ðUû0X,2jH'™.Ó®îÃ38½89yºñ oÏ|è°y‘ˆ]戦£ÛÓ´h'Åu{1™c¸èÿ‰ã»,—+\0Ž;ÇÞ£%k\wdÍ—­&f_¿;â‹ó±ìË| 5ÊÒQ=¼×IVïQW Ëû•€WUåùyßfªu ªvPxÙ•UeUFU•QUeÔUïw˜§3IzãµùPtŽ¤ª}—OV6¶Æ@þ¼È†Ë›©‰@ðã¼ö0þj _ß[ÛãÎxl—[¥µæö`»*ß…óG+oa ýælÊv6þ¬­E½?íÄ¥õßïÎzE[âÏ?ââ‡ÜþwîÄ_ï 8à­ +endstream endobj 1885 0 obj <> endobj 1886 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1887 0 obj <>stream +hÞÔUÛNÛ@}÷WŒò´êe/öz­ª4„JQ&%"¨²'¤ÊÙNi?©ÙY;!%%$-A-²ä]Ϝ˙™µ€¾³ûîL@?s´‚€ðŒÅ!Mœžó6rvˆzŽÀñÁE˜€) âŒKˆFG+Œ{¡‚¨ƒ.<ˆnK²_?Ÿ¨íÖvv ‘Ra˜"“~FƒqÇy’öâNB¯¢#ô¤JO’)®`Bûí;.Z´~:ÅNk»0}šÄÝ$…xÜ…O)¾8!ãx„ÛC) ä}@ý[<º&™EÕ#Ç÷BÌU3_“* C`žáÜ+³Ö’z®G:˜ôîé‘-K–*”ÈÆWaÁP¨ôÌœ´ðgÌ(¿dæcL•Ç|ò$ÔõqPW +#$“DQo]Ê9uEà†ÒH'¥¬;íä@5 H“š¤”§Ù€º/™Œ-ñ­ÜR)¥f´ˆp e,?¨Ï4‘ÔÃ7@iy±.}®Z7„=ÕÿVTAifl æÍÉõÒ¬<ÑçÞp§ƒþuŽÅT$ÃÙÈ’”ºJ1A¾R‰K’.+BÁþŸup ‹Ö8Ó‹q÷Ë! Y¨Ëv¶ëx‹qç8˜Ÿ…½4I¨&m|:×qZmÓÎd’^\Š«6}½èDßf¾ÿȉÖ/'¢ê#Àf<œ&¶šûø,s”N3xݤw{’ä8¿nâ6AyeÜÍÃ=©*Kçjïë5Ôø|íEçgmb M³%”õ¨‹K~…ö³<íNoÚ¤"‚Àp”óÊÃøÖ¾ºW¦U`OÎ7I¬1ŒQœ·‰xU˜¹(—.(ŸsõWÙ®*+߬H­ßÿ¤:ÕíUåkl´«Ü‹ ÝßÇ)®8_mvÞòë¢XÛ'rë}ò¼UÝ~>v§ðî”õ×Ûš^è­fB_o÷V{Z羄îO{k³Ê +yGþ +0 õx +endstream endobj 1888 0 obj <> endobj 1889 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1890 0 obj <>stream +hÞìUÛNÛ@}÷WŒò´Ȳ{m«ê ¡7@17„¬Ä ©rAk§”Oê_vv4%jZmUUU$ïfæì\Ξ± ½×ÃÜÓ +BiPLæ ¼W‰·³/@@2ð„Ž?\D2%!Tœq ÉÄã…q?VôpÃ…ÉwIöZû°š;Í­-h*"¦ÈlhÒÉd4ÂÛi‘™AÚËèUò3©2“dJAC0¡Hö¼F´yzn'#Û…>ÎÒ~f öáÌÐäƒ3ŽG¸=d‘Ò!G˜ZŸÒÉí8Ë-ª•xZ²Pc·š˜Tqó#Îý²oG…s"LúœH–(çD2¾R;‚b@§-y±5‹`AŒ +JbSª|{\ÐF€Û6¤ˆ„d’(*ð©K;ºE臋HÛÌJ[Þ+€j’SêTµm@VNž”bƒp‚@èb]?JÕO´~~)*ªø!NùªÏW±üU¼©Qµñ˜ +Dõ9:¥]boéP^£Ú¥È…GV¼¢ÊëÏ”÷ÿ×ã¹Öª=„_ø)ÿ"Àfô +endstream endobj 1891 0 obj <> endobj 1892 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1893 0 obj <>stream +hÞÜUÛNÛ@}÷WŒòä dÙ‹½¶Uõ! ¡7H#b(ˆ d9›*ØÈvJûIýËÎÚ¹@š´‚TU–¼›ã3³gÏl8Œ¬½·=£ÜR<æƒã+ 2m ­7¡µwÀC8´¸†Ü÷¨àIF™€ðÆbÈB™Hcœ0î@xg]Øûíp©­½ÖÎt3Â}*ít”E77ãdï“BgÃ(Öä2ü€™d•IP)¡Á)W.„ûVMž¸œ ßp—ÔÇ:è ¢dŸ3~±Êðf>2HQ"ǘÚߢ›Û‰Î ªZ®à^uP!ƒ êøŒ9Õ®• žšÇQ*œqTˈ%Ë ª±Ð*( +ƒŽ?ÆÍÝ™2Ò­”9Šˆt¨kÁ8i¸8õHCpŸ *lI8¾Uµ.Hƒ{ŽçSßîfiµ6˜ÆE=û””]­gù˜4°^;MŒð¥¬ÌH)„òf²ð`V ãU-?ˆK¦qð͸P1/Ç•Ÿ›Æ-a/ÃúÃÊSŠúæ æædj¥Wþ2gs2ãñèºÀÔvŽ½‘ëŒ4¤¤ÜþJ6¬­´,ý?s°'J+ìée»»U4P•ÍÁÊCgÙî »·ÀfåCœ¦Qöi4™ê v ¯¡srxøjéA×ìyÿ>öì‚\^dƒémß®Õk}R}ÖïãÎWpÒsÃõ ðªþ°„$/¢!Óƒ=¼ëè¢×ÝtœàrÑ·ÅnIsV ç8à:ÎJÒ•|­wíF?^õÂfxÒëÛ†}š¯ †™Öˆêã_GY½OʨÑVÀómFÍ-nåtõm#ô‘¸:’µ'mqÖl˳ÞwÏg ¬?óÄúü=Ä=æ +\g[z®þg³-°ë¼ùo~&òÒFý]|M/hì ÔídPR?'ò}JtGW.y+Þ»’2¼Þg÷îz´k¯Õì X[?¹ôVš$:.ÆÆÈ &Êã(‰õdÂk»Pëò²Mv?—R›Ò‰2]ó¹ÓõÒik̃ëa»>ÒEø7üS€KÕá +endstream endobj 1894 0 obj <> endobj 1895 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1896 0 obj <>stream +hÞäUÛNÛ@}÷WŒü´Kɲ{m«ê„m¹‰˜[ ª¬dRl§”Oê_vvšrS#.Reiw3;sÎì™EÀÈ[Zï +UžVñ‚XƒâPoè­¤ÞÒšéÐ8~¸‰8bJB¤8ãÒ # +ãA¢ íã‹Ò+vÖ d1´—ÚïÞÁnIEÌ)Fevq1ÎGð1¯M9Ìú†ž¦ŸI5L’)-Á„!]õZˆhyúî$c‹í ÷L60%dùKš~óÆ1„Û ë)ç9 ó#»¸<7•õꤞ–,ÒøZÍB Lª$I€1çAón'…»D5˜ n]¢XÖA¹Kã·T‰(¼ â]lÎ"œ +£ÂF˜­Œª€…ä$´â1¢-)b!™$Š +\ucW´%¢ ŠYLvË¢± &ý¨f9 îÆ4ö²ÓæKŠÜêîTåVI)u4UE$Ó\¸hrùIC¦‰¤®\D òl¿óó±}N·×A}Ãn® +J³ØÖà¦7¹¾3*Ïä\>?‡½ñè¬Æb*RáhT¦¤-¥˜ ß©Äy%fÀ\*ØþÓŽ¤ë`#=›ö°™Á„%ºig{@g!H0›vŽSOàÓô¡ª³šj2©à ÌðjÛÔ|°“›mƒæºGzôý¬!C+Àª lotÚèñùk7]N÷»=b‘&ÕîŠq!ÅÿD=âצªW&hùO$JƒoynúõÍEŽ\_T¼ÌCüu\xâÅ-Œ—eRÿŒI¼ÓnVŸuë¬lºÀßÛÙO;«þ¸g¡of׶ÇJDß²Oà‹°½¿¹ù$Š~QØLNø)’Tu9˜\"®q,Ñ.¸ÿpÀñ€0æ‰BûcþÙùÄ416×yž¹[ŒóFD±è`Žší7[Æ¢t Ozö°4VBœRÒ?ËÊ…u˜à\ŽÇ÷yÄÁ8ë´ûëtCâç¿dæ.tõ¼WžÿF{ùtíÿ>äÛÃW›põJ.a6äÏm¡76áøÿK€ýiûG +endstream endobj 1897 0 obj <> endobj 1898 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1899 0 obj <>stream +hÞìU]OÛ0}ϯ¸ê“ ÔøÚŽ“hÚ+¶ªh  Š¦¨MK§Ò¢$ã'í_î:)ëVc|HC›"Åîõ¹_Çç¦Co}»0Ì=«!!˜Ð‚–¥ÞÀ{{ë[ñÀC’Z0 „Vh)¤‚ø“EHiˆ{´‘h ¾òNÙfs |Bc½±º +­Œc(4›³äâb4ÂûI‘fƒ¤—ò³øeÒU&%´†: +´>Ä›^"º<½r§B» }&ý4ƒdÒ‡NÆãÏ^$$¹HçäªDŽ(4¿&—ã4w¨fìù&¢^­ð-¥£(aB)MÕµU"°7çD‡Pæ—sbË‘¥ËCbãWQÉPthÂb\ÑèÏ™Ñ~ÅÌ^µ>»%‘×}Ú¼®0D%Óém+»áu LŠµ²ieëÏzp+vÄË“´²gùˆ×©^68âKZ¥£R)ÌiÁh^‹Äª–oÜ–)nè-1¨"/Ö¥Ÿw­„½LÔ¿VÞ‚¶"twp#Ni—få‰97Æc8 Ï ºLÍrš<Íx]kì W4°,틲Òÿ\Á*li¦ãîWC‰ÈVrvÛ€‚˜Å¸Kš +jAΡA–¦Ü².=½ó$[éòÞtšŸÊ³.³P¢ï:ß¼Çãä'x¥æERp–Ã[觃«ý´h%ÅùÑ(é2²×¶›ñŽê`kKŽfƒ?µãø°Ýe.Ò,_B¹¬„r¥R‚¼Èú³Ë.«­ÔnÇ,áüPFšì²ö°²[ÓÑ„ÌE—áZó¸ZNh!;펒ñ,}T+¿¿„{äÏýáÛE’UÕö›g ½›\»Î3 +½‡µ5k°¸»ûœÊA„†ì((!øÜ&¡9¾DåãjýgTöÊe€ÕŸÉ•ÿ_/ö±y⇞®ÇØWp=ôÿ]€¤5û +endstream endobj 1900 0 obj <> endobj 1901 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1902 0 obj <>stream +hÞÌUÛnÓ@}÷WŒòä-Íf/öÚ⡤)-—5¦¥"{“5Nd;\>‰¿dv6`µPJ*!KÞõìÙ33gfd3§÷lÌaV9JBÀBðB’A©©ó4vzG8ÄS‡ `øàÂÀJd” ˆCʼHBœâ†qâ/Î;÷pp> ¡ßë?z£’ðJw9+“Å"/fpRÔºœ&©&ïãçèI6ž•ºœråC|èt‘ÑøIíN„†ÛRŸê$Ó%$Eç%‰?9ex…™K),2G0øš,V—º2¨Aì(A…Ù*ê+ BFQÔ óš¼­öÕ ÂûåÅ2iQŒk©"+Pxè…Wº˜˜¹¿Fú0¯"=ê»ß@0Nº>nÒ<ä‚ +WŽoÕØ}Òå„4tGå²±eë´¢hàž{¢{Y夋ñºËÂènUeFI!T°Q…G›XobùN|ª\A<|34ÌÛµõyÛzGØðþÇ0[©hhjpÕ›LµFå}\^Âi>›×XLéV8•.IWJÊÝÏD༺:£6lÿMÂv°Â‘ÞN»ßÌ`D#Õ´³Ù XHâm§áT` +l>LK­‰r'ø¤ó¤Ü›t¹,ß¾cï'äñ¶}“ùáon\üt#Þ³ÀªNj®+x™ž~êz”Ôó³<™¸hï<ÄÇ✟óNëbÿxÐGÀ‹ãø ~3ž¸†i]µPÆ+¢L¨è ªËl½š¸Î=¢]°ÎÍ.ZönÁ%—kÝ`‡o^¾¼Kj£e^ ¹ž¸|ßÒ¼m– \ÐŽ;Kz¯tÿ\¨ßïYyÿúÜB?(2K¿+Nä{]è¡ntߥ´wÓõN¨_ÊŽ%)ã‚_MÔ Ya_[ÝÛ#xo±úË¢Ði›f,ÐÇèdØÙãjØ®*Òv’•ùg]¼À7ÚÌ×Çõb•XWf·2öb—¹å_u†Ôh^M®‡á/h¯Úé¶nBrtQm£ýËnjó÷z0Fxÿ`Ø?>8ÞHÙŽa\'e=N“"£9É ÇÛ‰z )2bñ|sýÁ~^Ïþ70¥ÀËe +endstream endobj 1903 0 obj <> endobj 1904 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1905 0 obj <>stream +hÞÔWÛnÛF}çW ôD6Ñz/¼"èƒ#ÛmÒ4Q":KR2[‰Hºi>©Ù™ÝÕµuà$²ÑÚ0¹:;œ9svfD ˜9'?LÌ:'Tñü8Å¡­œ©ó4uN.H§ŽÀño"Ž˜’)θ„tápô¸Ÿ(H \páCúÑùàž_@ÀbŒ=‚q뉘)w9kóÅ¢nfð¬é«vš•÷Kú#)I2¥`(˜HÏœ!z¤8…^ɘ|k×oª¼¬Zț޵^ú›“0Žpzˆ,¥¶¬1œÿ™/Vóª#«óÔ üs Y“*I`~̹o²%‹Âõ>ÊÁ¤¿·j‘XJo¢­­P¸éÇkaˆ´¬2*0Êüœ{Êgû $Þ0Àeä ¥ˆ…dÒUžÀkhp¼‰Èb»ãvi°ò¦èÁ Yä¾õôNe𶫽!òu— ¯eå$¥”ade‰åÂ…áò—°Ð•žW."ãy{?øxÛýŽf÷ãõ?l¦OA…,¦3X'zåcžÎçð¦ž]÷x˜Êí°7ºªõ†J1áþáIlX·*™¦‚õo+8’º‚Cìém»¦ –„¦œiÆa„Nüm»sì +L[ú0úñ|ä…îOÙ$=M/'Wn×çýMwå=Ù–a@iŸisÚE󛾇²š~œyS\çu3Z"¼X,›‘UÝtWîàÙËÁc >>´zu™Òm|*WÂ&DúÝ]ˆX«[ãOÎÛÃŽM\K„â89F¨å +#Õ|îoS:fW-Â8'«ÒÆ‘‡2CœrüüòòÅ {Ýu +ºÀìbÿgkŸ›SA˜²ûN®ÜÅœ”Ë{üÁ¬è€Ö,·å²›¢´xÒ’X×èV +’ìø,04âz)²b¾,~G® qŽpÛ×}½¤h6ÆclèûéÓ|¿ê0'ÅMÛVMŸ!NOUY[Í2ž½~¯UEô+ô2áûáfîº`,h‰|ðºÊúˆmY­f‹¬À¿Šp¢d{Ê”ÿäl¯h…|wÜuh~YZnhÝö†VWõYYnù“5¿5¹Ípæf8o¸â«ÒáÐ>Ú¼Û¥J> endobj 1907 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1908 0 obj <>stream +hÞÌWÛrã6 }×Wpü$ecš]§Ó‡\œ4mš¤±Òˬw‘ŒheM­ãØœqÂI<µ¸ þàÁÀJAÉ($ž[ ¬PæF’Ä)LwIüÑzkŸψGCr28yó†Üh‡‡TÚåL'óy¾˜‘‹E­ô4I•ó.þdƒ$¨”¤Ï)÷=ŸZ}°ˆ8©™‰mÓ·*É”&É"#?i'þÕŠ(ƒ- 7¡¦0š9`á:™/ U¡Ö0¶|A¢õ©ç*dE„º!cn·¡Â,T¸[‹@*H³dÜS‚"‹nØò‚>soCŒôb¾OéRÏþDãN߃iàô¹ Â–‡Ñ¿—óÀ BÚ7ºldÙ*­‰ãÓÀþÑ1+ª‘ë*wúà¯].wÃ*C&…ðƒ +<ÚøÂxãËŸŽG}[8.ŒŒ„4–»çÎëSÏgª½ŽÕÿ±šÉ‚ôiˆ9hk“ù;­ò1Š‚Üæ³5$SÚ´F¥´Ó—’rûwG@¿Ú*£Æ(ÿMÂT°-Ýu»×ô`D#¿)gœ€²€·ëv]!°û¤ª“ÚñíUE¾&™š~¥É"ýä‹k bèS•çu5¶{ï‹2ýæ+¯yïô.®p<Âáú¤1Î~†v5ì!g§‹˜À7“íÏ–¸…šNA,:¤Ñé6Ô0ôùØùÊ Åää›á (|7ÅGñÝhlc„«jGëÉ°!P›©;IÑÙÛ/ÂMb]çu^"Ú#ù~¡F(NtÝeo©U•&…B&׃bZé‰V3Ìç{y¹_Î +—I ÷FçE¶äTÏçJWùòr3b!t¯¯æËvM¿7êá¶'ä +¤^Ãý:óTeÈ ¨ýb»ð‘¨ý¶ðb<£¯úütÈ4òÃ.>†¤-Â/ØÅ_8`ñú‹/°é¾rÙE +šº†nÀU=É°ñz/)t8X%e\ðödÝõa¸ÈZ7@ Ç̃[Gò3ZõÁ€œƒúíõÝÍèQ{3]âý°®—|Ûi¹¨jŽèŒyR”ÿ¡ÊéZݬˆbù;„%28¶Å‹òõÐÅ·ìØ®j­0O)&¦(žøäÉ=ü±=ò³=»ÞÇaCk ›OÓÆî‹‚™j¥  ‘Àâ½=ˆíó åïôù#úq«fpw3 /ûÍ·§[9ßÓ•Yk8ªáçóÒÜWõ'do¦—دëõ~0àÖM@½*ÏfæßY‡_g 0Œ?f€ +endstream endobj 1909 0 obj <> endobj 1910 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1911 0 obj <>stream +hÞÌVmoâFþî_1â“7–}±×¶ªû@ɽ+_{R8U.,-`´6 é?ºy³kséÁ¡^›Tªö2ÏÌ3³ó–pȽÎõ˜C^zJBÄbb’ÑÞÜ»H½ÎéÜã~ðÅãˆJ‘d” HWCÊ‚DB:Åã¤÷Þ­Ù¿‚ÆÐëô^¼€¡!<¦Ò/r“­V‹u¯×•6ólªÉÇô z’µ'A¥„6§\…^zmd´~¦î$bËí¨G:›iÙz?’þæ%”¡ ³FVS8Íú€þ.[m–º´ZýÔ ƒïªh¨€ +™$ Ð f,¨o­ÔÇtP|…c¶l²¤1_r•¸ %€`ïcƒæa“Ö™¹Éˆ hè?€`œ´CŒÓ"_ë3¨‘ÎÅÚÑ0ŒÉ}™{Ú3Êß½ þUx‡îÆ•ÁEìÊ„bSÙ2å¹Ù`*ZÙÜnN«~§až-—­gqén8.æºBùM÷ëîàjؽ¾é§ýzPìîÛBðC«¾=;G) =KýõÌRb¥Ï[ê¿qþNßk=ñÿÙUpT$e8¬Í¨t:pêƒ{o»×ýñ7Çi7„—6qVl]jŒr…¥,¦H¾øÓŽJ1ßcrDôð4óÝð–¡’OAùóI­xÉc«SZ‰ +Ž­NAh%(<¶:¡UÐ@êØê„VaEÇV§ ´R [A‡Mr<ñ™©.°‚¿g(Î5O[Ƈ.jö\²Û!Æ®~n7Ê´Xmøól‘½‘¶ûw‰ B…«#”á9þûÊê=àaO„ö> 0Æã¡{ +endstream endobj 1912 0 obj <> endobj 1913 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1914 0 obj <>stream +hÞÜ–moÚ0ÇßçSœxeoàú!qM{Ñݳ„ [_ŒiŠÀ¤l!©’°–´o¹³¥«T©Ò`Ú*$Çœ/÷÷ý|—D@漚ÈjO+y~¤Aq¨Œ·ðÎïä\€€dá xQÈ”„PqÆ%$+cÆýXA2à >$×Þg2žCÀ"èŸôŸ?‡QEEÄ)³*]­–EoŠÆT‹tfè—ä-*©VI2¥ '˜Ð$¯‡­ÎÌÍddc»Ðc“ÎMi1‡‹Š&ß¼˜q¼…Û›¬§tžKÔ€áMººÊMm½†‰§% 5f«Y IÇ10?âÜoóv(Ü"Ò`ÒÿmaYåÆ-ªØŠýhÇÅîY[0*hÁ|H©òY@6 ¹ ½§!íI É$QTà¨[{L{"ôÈEdT•­m¾ž5@5 É'êVLk¯ê%íá~IYXîŽ*·$¥Ôá–Šˆ·{á¢ÝËO0M$õqä"h#ï¯÷þ>t}¤Ûq¢þÃnî”f‘=ƒ]mr}¯UþPó4Ïa¼Ì.> endobj 1916 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1917 0 obj <>stream +hÞÔU[oÓ0~ϯ8âÉ«ëKâ$B{€­\Dk€:¡º]!M¦$eÿˆÉq’ÒÑQ@¬ JŽ{¾sý|Ž-`êô L+G+ðyn Aq(3qÄNÿ¡ñÄ8þð#Ÿ) ¾âŒKˆçG/Œ»¡‚8Å .ÄÎ[r4x à°x÷.D%S¤˜–É|>˧ð$¯M9IRCOã§Iµ‘$S +z‚ íA|äôУ“6;Xßë“ŒM I>†7%?8!ãh­‘Õ”æ cÀ`™ÌÏ3SY­Aìxnˆµjæi`R…aÌ 8wÛªµd¾^áH“îw8²eÉR ˆl|ã*l +A7Xc“^ÇŒòZfž'T¹Ì#— ¹ =·>íIÉ$QTàê·rN{Âwý€$*‹V6^¤5PÍ|òš6ˆiåe5£=Ì—¹%¾¡•[*¥Ô~G‹»\¸hsùB=¦‰¤.®\ø­çõwãï¶ïoªÝŽ×X­9¥Y`Ï`Õœ\oÌÊ cÞÏ28™MÏjTuRSMÀØL.dEú1™š(KPœš¹ÉëhQ‹‹|DFôÞº;=ËÆQãåðñàÕŸ½Æ÷ãWñnÕJ=Þûi¬“¢¸… ïƒÛ¬ºYQîáfÃÑÍÂ]-m]ÒN\ÿÅJ†ÅäÖª¹ZG°ªÆ½Íj¢¤¬gI#‚ÊÿVÔwñŽmQ—¦,Ss^ŸOsƒ±ïÌMm噸³Óâ†ç …øJc}»=œ"³uL ¼Ô>,£}¸ŒvaWAP\í¨‡_˜‹ãYnþÐÛ¤46´&éYRîè2ú¥Êš¼ãx?w×c¿CÔ=~x}.#8@»}\,ÞgÍ“ IÁôfŸ1Åd…èž¿‘ÊåÍÌ—Ñ[ŽJ§ÈœdbÃóV­D©ëVÛ ´’ä^·Ú¡•ê ïºÕ6­ÜÒ+_ѯ xçË +endstream endobj 1918 0 obj <> endobj 1919 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1920 0 obj <>stream +hÞÔUmoÓ0þž_qÚ'{¬®_'Ú‡±u0èPµø°L(´nW”6(IÙÊ?â_rNRJ[U ÖJ IŽççî¹ó㻫€±Ó~Ù0.­Àç¸Å!7ÎÈy9íK¢‘#$püÃ|¦$øŠ3.!š:YwCÑ7\¸=8·ä¢s  à¼}þìôr*¦H6Γét2ÃÕ¬4ù(z½ÆHªŽ$™RÐLh¢ §…Œ6ΠÚÉÀrWÔ7&š’Ù>ä4úì„Œ£ ·NÖRV–ŒÇdú%5…µêDŽ–Ì×x[Í< Lª0 ¹çn}ïJŠ +D5˜t×@˨ +D1~JV…€ ,u±9 ¯Fyµ0× U.óÈ$´åáÖ§-)!™$Š +\ýúaá»~ÀÒ˳úl8”@5óÉ{Z!¦>Ï‹ ma¾$›YÝ+U¹URJí7ªˆ°É…‹:—ïÔcšHêâÊ…P3¯¾ÿîúþ¡ÙaXÿa³ê”f}ƒemr½Ñ*OŒy–¦p3ß—ø˜ŠØ…ÉiK)&ÈW*±_‰²*,ÿ¦‚}YU°Æ–^u»W÷`ÈB]—³Ý ±ö‘Ä]u;Ç®À+ð&}Xôn]ªÉœ‚fâùªö<{׋Êæ±wë56þÒ&:^ºï‚ÐK7P°íµ *ʤDh^ 64£‡~™äe?ÍÊ"&x.cºf~þªsŽÇo>ö£³è]?&Ö^lXm‘"_7Y˜<&Gx~݉ÄÑÞˆ{Yºg3<Ž‰‚2œà}®öÎ~ceLÇsÎOpÊÙUxvuqo£î7”\%J­‡R µ^Uòè|™_KLïµÄ:³aÓÊ{¡{kº“™ùK¶QnLuǘ î“ü8¦½ßš¬„À!©ÇÜ Év.ÑöªÛíï¢pŠ8Äd˜Í?¥ɦIšfLoò “–XLýTOsÇaÌ›‰+·‡ñ.½D©m¯]zÉr·½¶ üaû!À†—Ü +endstream endobj 1921 0 obj <> endobj 1922 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1923 0 obj <>stream +hÞÔUÛn1}߯õɦë»w…x(iʵ"jxh*´J¶!(´»¥Í'ñ—Œ½r)‘H$ªH¶3gæŒçx&0ŠN_õŒÊÈ*p<[PŠ<º^¦Ñé…ém$$püà&bÇ”§8ãÒiÄ‘…q(HxàBCz]“óÎCû´}| Ý‚Š˜)2Ùt:žàͬʋÛlÓ›ô-fRu&É”‚–`ÂHÏ£2ú<ƒp’±çÔWy6Ì ÈfCø\Ðô[”0Ž!ÜyO<ǘ:Ùôû$/½W'ŒN°VËŒ&U’$Àt̹®«¶’9»ÄQ&õŽjy±TQßZ%A¡ÔñRiae”©•¹Ì¨ÒÌH.hËàÑÑ–±LE®®¶KÚN»˜Å¤[ÌkÛðnPµÌ‘O4 ym/Ê1má}É|æ…²r/¥”Ö5²ˆ¤¹ õ]~RÃ,¦Ñ¸rájæÕ¾õu×þ—n‡aýÝÂ+(ËbÿËæävkVþ1çÙdWãÑ× +S‘g£Ì ÚRŠ òƒJX’Y¸ +öÓÁN†¶8Ó«q7õ&,±u;û:[‡$z5î§KàÍõá¡{­¨%7ð[O<_õžñµžŸÅ|ÒgËpÝ@v Zì†0Ê4{µ Â(Û@ñã¨]PYeBw%bÃüö¾WeEu1žLÊ>A»éÓ ÷öëNÍï¾ôÒ³ôc¯O|ü]¹åµMêùÞg‹¼è“#´_vRq´7â«|Põ‰àhçüzü*Œ_5žÑ¼·TÝùd1šÏ<%1'¨ø J»çBäf!òà…¸¢6 Q)d³«ä“쪭TÚ¬RYsÐTn­ªä°U%kU ܼù‰´ó:»Ý;ûZOó*›ìñ—1P袹Ý?ÌÆÁÏÆbÆ¿$ÓÈ1 +endstream endobj 1924 0 obj <> endobj 1925 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1926 0 obj <>stream +hÞÌU]oÚ0}ϯ¸ê“ÝãÄI4õ¡£t_핬{(Ó”¡™LIhaÿhÿr×I:4(Z·RiŠäŸ{¯ï ÆNûUOÀ¸p´Ÿà‡Ü8#çeì´OˆGŽÀñÁ—|¦$øŠ3.!ž8YwCñ'\¸ß9×ä¤{ +  Óî@”S0Efã<™LÒéÞLK“’¡Ÿâ·¸“ªw’L)h &´ñ‰ÓBF»Ï šÉÀrWÔ—&š’é>æ4þê„Œc +·I6RV‘)îÝE2ù–™ÂFucGKæk<­fž&U†ÀÜ€s·>w%E¢Lº¿(– Pˆbü’*¬ +A7¸×ÅÖ,¼FåÕÂœ'T¹Ì#K\Ж‡SŸ¶¤„d’(*pôëuE[Âwý€$ÊgõÚp>(jæ“+Z!¦^Ï‹”¶°^2›ZÝ+U¹URJí7ªˆ°©…‹º–ÔcšHêâÈ…P3¯Þk?·½ö<¬ÿqXu J³ÀÞÁ}or½f•'îyœep™ŽoJ¼LE +´FarÚRŠ rK%ú•˜!«JÁöo:Ø—Uk´ôÊí^íÁ…ºng;Á`í#‰»r;GWàxS>t^w;T“wŸ{ñqü¡×'E™”ó¢O_¬ÚгÇ>©Â-ŠáóŽ`hFw§i–]šAÙ'Šã:?Dgà <\ÎïiâýÇlÖD=´ÇUšôÉÞmŠë‰ övÉ{uú×wÆÍÒiYTœâÑ!,£çBï=GÑj§Ew§CËÔ;¡{oîÎÒ©ùG¶QnŒ½j|7I¾ß§‹è!+!Ð Šqô]ã†vz{v÷tË"‚#Ä¡O†³ù—Ì Ù$ɲÙËK¿#bf£{¬O÷ýµR–OK_D×Ö“ŸP9ÉÄóV³D©Í¬mfÉr7³¶A˜¥ÈÛÌÚa–Û@z3k„Y^ù›YÛ ÌÒ lfmƒÖ›¶W&yÙËfÁäNœ`ùÎ’¥Éñ{€ëçÝXüåçÿR~ +09s +endstream endobj 1927 0 obj <> endobj 1928 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1929 0 obj <>stream +hÞÔV]oÚ0}ϯ¸âÉîÀø#qM{è€î‹2éö0¦)C™TIXËOÚ¿ÜuƒvíVµ°!9æú染{- ˜8õ}“ÌÑ +|€hPRãŒç‘S? ;BÇ>Dà3%ÁWœq ÑÌáˆÂ¸*ˆ†8áÂ…èÒù@š­ðXzãÉè¦TL‘Å$g³é|¯æ¹IÇñÐÐÑkdR%“dJAM0¡=ˆšN -Ï°˜ÉÀbÐ=L +ñ|ïS}qBÆñn_²™²Èœ"´®âÙEb2›ÕŠÏ Q«fž&U†ÀÜ€s·T­%óõfí`Ò½¶ŽnY³T±ˆnüð*, +Ý`cŒÝ´ðÖÎ(¯tæ4¦ÊeYä‚Ö<œú´&E $“DQ£_Æ]Z¾ë, ÝtQÆFËaT3Ÿ¼£ÅŠ)ãi6¥5Ü/YÌ­ñ…­ÜZ)¥ö׶ˆp½.ʽ|£ÓDRG.|€yû¼ñ÷®ç=Óƒú§_AiØo°)N®oôÊ#9“zÓÉyŽS‘ {#3)­)ÅùJ%6,1#Vlë]Á¾,*XcOoÛÝ+›0d¡.ËÙN0YûânÛcW ¾Þ>dyœSM–<ƒ‘_ö“EÞ3Ã|@Ç8çU¬u; +ÏŽ.Î1< O·UêYWšZãe«Ëo>õ£ãè¬? ~™mÒ££;9»‹d5YÌ-6ñªpխª{㽇£—ŠäuEò6E¦ÚâHˆº.DDH;^™t@*?mE²²g ÷)¯}S¹Þ–J{¥òwT…‡Uî¨ø°áÿ¤œwÑõ^Ñ[ó‘%Èû±½c.ÛÓ¹y Ú85¦Ð8 Ãó8=ЫîoS¶Fà)«Çã~}ÊÖëÐÁÜ·¼NŸµ£ÞY»Õ¿õ<þÉó> endobj 1931 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1932 0 obj <>stream +hÞÌVÛn›@}ç+Fyb{³X@URÛé5idÓô¡©"d¯*ÀÑ‚“ø“ú—\§©ª¦jL*#XÏ sfÎÎAËaἚpX”Ž’°¼Pd`´3w^ÆÎÁñÜáþðÁÀJd” ˆs‡aʼHB<ÅãÄ7Îgw8:Ÿ†08ìïé!<¤Ò].L’çi±€7E¥Í<™jò%~‹H²ATJèsÊ•ñÐécF‹3­W"´¹ëÔcÌ´¤˜Á'Câ¯ND¾ÂìK6RÔ‘)bÀè6ɯ2]Ú¨Qì(A…Ý*ê+ BFQÔ óš¾k*j'²A…÷“ɲ²v"?¨Šj‚"@§nx±5s¿%Fú 1Ç ‘õÝ5ÆIßÇe@ú‚‡\PáJÂñ4vŸôyà! ÝS³ll³Õ´¢hàž‘Ú£»)SÒÇzÝeay¯Ye–I!Tв£¶Æ›Z¾Ÿ*WïŒMæíóÞßß=¶›¬ÿqX½ RÑÐîÁf6™º'•Ä<Ì2§‹Ë +7Sº%J£Ô†ô¥¤Ü½&õêê­KÁño'8õ+”ôVí~£ÁˆFªg»À``o«v†ªÀX[> ^D¹ï.&ñaüqrî–UR­Êsò|;†¾m{X‡[/†¯Jx3=¿9YC=OVY5¶æLŸ»{ÙòFì$Åà?ÊÝëÛdŒŸ=·ú#Üûd­ bæºJ2Ž8 +í=Â\`={ùÀ +„õ7°Kè׬¼ Ût»#’Ób°ªJž®*nÛE»èKÈbY&×c\t8Ÿ¢“ûe>ŸVv{–&ãÍv^§ ¦±ïu'ä£Âáé(ÃÕ6Ö¼¶(i‘ébQ]ZÁ3ŠŸ4t<Ò¤2xš«±Ðl*‹5OMY$¹•ÄÞ‡íÙúqúÂCcÛÖÍ•În„ïPÚƒUY-óVàhïJãw¿Ê¼;?¬ì E·Õ÷ÅwíËœÿåpâ)ê»Í°m( +endstream endobj 1933 0 obj <> endobj 1934 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1935 0 obj <>stream +hÞÌUÛnÚ@}÷WŒò´›àe/öÚV•‡Hoi…‚›ªŠ£È……¸âRÙ&þQÿ²c‚Ú4DŠìeçÌ9³³g@ÀÈj¾é e–Vàq_ƒâkh½­æ©áÐ8~ð%|) žâŒK'GÆ@AØÇ„wÖ%iwNÁe>´š­£#è¦TøL‘Ù('“d:‚wÓܤøoèUø•T¥$™R` &´ aÛ²‘±Ðé—+éÜ%õ¹‰&…x:€/) ¿[ã˜Â‹¤)Kd‚ÐYÄ“c“¨Nh¹N€gÕÌÕÀ¤ +‚˜ãsîT§Ö’yºŽc;˜tþˆc·Šf©2ˆÝ¸ïUPv( :~ݘ¢há®:£Üª3cªæ’%H.¨íâÒ£¶¾LE>½j_S[xŽç3ŸtÓYµ7˜÷s šyä‚–Sí§YBm¬—̦Eã˶ò¢•RjoÕ¬jᢪåu™&’:ø䨘×ﯻÞÿ{Ö +oAiæwP›“ëYy¢æÉx çÉè&ÇËT$ÃÙÈLJm¥˜ ·TâÀ3`e)èÿ•ƒ=Y:XãL¯ÇÝ­†0`®ì\,¬=$qÖãÎq*ð|U>dyœSMæÃÀ ï>ͦm3Œçãü¼Ø›‹$ŽÈÁdy›ÄB^÷çYŸMäAD_­êi—Œ­·B>\÷“ðs/"…Ä<«ááá£u¥Z늃 ¢ç•“û‘ëLµ"n£(*fÙÏQÌÝY25eÃkSŒ )ê{k6¡‡øðëY§÷àÅn +÷ò8Í{ù²øÖ$"ê¿Ž³èÂ1¢ "ƒÙüÛØFtdz>â“Ÿ1³a‹è¡ÞH_>-}ѽäºÂ#)¾A||3G<Y®#j+G®"öv’Ü™¤ê¤íêÔÎêœÝIÎŽ"0ËÝ]Ÿ»ƒpÛËÒ×¢÷”dn Å^œ^Ó˸{ ¦Æ”ÆHÿ&NÑ9‹î_![Zô¯ÿ4ÿú/È¿øô[€âŠ; +endstream endobj 1936 0 obj <> endobj 1937 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1938 0 obj <>stream +hÞÌVÛnÚ@}÷WŒxÚmò{m«Ê!n›6MQpšJ¡ª\l(˜hmø¤þegm µIS©Š„3çÌΞa0rZ¯zF…£ø<7Р8˜Ì:G±Óz)@@}-ñ0)p4ŠÌЦRLïTâ¼’,eU)hÿ•ƒ}Y9XãHo¦Ý«g0d¡®íl_¬}$q7ÓÎq*p |U>,»W’jò ñÛãÅÆzžÝêqYt¯Ô +Ò\câgëìuHÜ`’»?é6´›åí - ©,}ËMäž$kã›$OE™”šK³áM¯\â·SŸ¨pý€r‚ÄHѧw;¯£Þ~îÅíø¢×'–i^l¡¶é£<]+ô)A94Y†($ ƒ¯‰yÖ§‹îo!;åov–ÝœŽóÌ–õšÐYŠqôíÊY­!p&µ›ÏæÓ/ø£§æïàY£%qÙNZÚ/8BŸ vr‹…ÃCàx€«»ã§]s4 +endstream endobj 1939 0 obj <> endobj 1940 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1941 0 obj <>stream +hÞÌSMÓ0½çWŒöd³ÄõWl‡=Á¶‹@B¬JÊ!¤N[Ô&+'eáÀâ_2NR*VBBBH$RìxÆožŸç Ø$³çolºÄ(°Üv‡à“:yV$³Š:8¾8g™’`g\BqH8¢0®sE….4÷É{2_Ü@Æ\Ï®//á6Pá˜"í&”‡Ã®ÙÀ‹¦÷¡.+O?/±’+I¦¤‚ “A1ORDŒuªa&]Ä —¾\ûe³†wŸ’œqÜÂ㦘)‡Ìրŗòp·÷]ÌZI¦s<«a™&UžçÀ´ã\§6’YsŠ£Lê_â¨VK ATã§Vù PÔî$L$-²I•Ê¼*©Ò,#_ArAÓ §–¦R8!™$Š +üÚqÝÑTXmsä6´ãÚúXõ@ ³ä-"~\ÝŽ¦È—´M~•G)¥4v’Eä.F.ßiÆ ‘Tã— 0"ŸÇ¿¿ÿ0íß þÇiÃ-(Ã\¼ƒSsróÀ+Yóé~ËÝfÛãe*Ò¡7:hªä3•hXâ×l ‚ý?u°•CôôÙîÙhÂœåflç8ÁdcDŸíÎÑx>ÑOM ¹ »¦¯W¤ëÑ›á1\,–Ë׸¾|MÛo£í·e½o; èa¶Z5+zujWÅ82B"l]í[ÌëüŠÔí±?¥†hðý1¢4À¯ÎÝžEuç‘Z•o“ç0D +endstream endobj 1942 0 obj <> endobj 1943 0 obj <> endobj 1944 0 obj <>stream +hÞ¬XyXW¶ï²©*Dl¤Ë¤ÛT*âÁ…EÅ‘®qc3nˆ²$hŒ1""h¢P"¨£1F ¸ïâ苸KDÁ"M'˜Ž­¸1çvN;3· “dÞ7ùÞ?ºU—sO{îïœß9Ũì:¨†q?!rlx°WXâ¢ôÄ´ùñ±Êd¢gH7;ÒÝÑpÙ/Ù¿ a»/®ì 8Á.çÃÝ]bµª SX6:yIVÊü÷楹þ%ÞÓÕÇßoP_å:¤íê¯\ý½]G&$Ç%ºFg¥¦%&¥º†/ŽONY’œ›–˜ÐßÕuä¢E®mR]SSSÒéìo¶¸ÎOuuMK‰MHLŠMYèš<×5bþâä´¬%‰®#C]c' HNqOצ.‹KŸ0?6e~bêïëU*†þ©ìT*û*Ç.*I¥rwRùÚ«†©T#ôªù*U†Jµ[¥Ú§RM¤Þ ‚¼j™ªLUÇta2“™ĖÌV¦±Ûav‡Fµ³:V}KýÚîc»g¬–Í&°%œš{‡ËçŽpµ|¿˜_ÍçÛ«íÇÛ/·¿Þ±cÇ¥Ÿ:trvHr8âð¼“Ü)´Sl§´N;½78Þë<°óg¯i‚5Ùš2M“£“»S¶Ó‰.L—w»ïbvžêœç|Õù…v6]û­ö±à'¬êúf×}6 ýÁÜ«à~•ù’äªÉ0W|Ám¾ÊöäJÁýõv/ÌeøÅ8—Å.xèÉ­Š "™èþï[eöF›8ÿú°ŠøŠŠ:·iÔØæ“xØäÖª­|9õœ%”U":ª*¹ùë&LùXšÁ×oßYU§{Òƒ×à/™þˈ æ–Y Y—Š¨Âþ‘èŽÁ:œp _¢·ô->Aþ:X}îq# ”~_AfõcŒAý«À‚u0!œ{€·Å}>—Pƒþ:\=Õk0Òu®eé°¨†Í5jØ GELI¸¨Ñi¤—Qõö>ù¬•iz©nr©äf¬œ›#ÍäK nƒî¿Z Ù?2Ç!W Gឈ¹>«¬Ëk[Ñ­t·=Ü^*SùéÖµÌûp] §­ËÄp×½^ËÞä4™Re`ÊÍpʬ&ÃàgƒgºyxÌl…`>ÙúìÙI7 –Ì.à‘ qÎJÀ…è‡p!Ì‚Y‡`!xHš²t’S :ê‡/¨Ñ-Žá’‘Ÿ±¹íCÀÏ–cæ5y ¤Â Ýý4ÀÌB¼A¦ˆg +>….ð¦þÅ7ÁÑ&-1Gî?‰~ê>l zØ“e 6-·aOÙßWÖ~ãÕņJÐê ›§5’P„i˜%ÓMÀ5nÐhil‚ðuÍafÁ,<4¨‹Š×é…ç—_®D‡€ˆìöÁ7ÖÊÞܧe÷ãì³_q^¡wA ¼yúéÐr>/ü\Qxþغ¿ÜÇî8>…ž’‘;³aÓspÖ¿úë˜Xßð%¡²ð$ûƒõë³eºª%3èþMjR +AbmO2c÷lÙApƒLÄûYÌÇ;˜NÝ^ Õð42Ä:,„<áœÑ¦â&Û:×æ°ÇöŸÜuNßt;ÆÃwâ(ï¡‘ß}~ûù;:Šº¿ òšþnâ2)7Ÿ½»"Aª=0sü ÷b¥ØpªÚÌþAãûN +ÒsVý½¶ã~jdÊÉûêrj9éÆ¡}°+nLÅIöîÜ„¡V]c_g{ŸWlÛY ‹ Ú +sH3¬oc^²’lD>Eo: G…|÷rš$¼™4+fn~^ЉÒì‹w?:¤‡€;À[™q¿ïaY°ìÛöí¾g:áÅaŒøýؾØaxÚ8Ô$?¼xýäõ§Tb]­8.êÈÍ;¯›_|9~θéÓƒ¨‡j ÜW Ú£Í~&ØýBxÛàCñzõWvËù¹,Ž]65ÀK/XFÇÿnìË…GGð‡5Ep÷pË`Ró^á_†!‹]etm.R‘AŒRzó…kž Dùíô™r[ Â¥VmÓK¡ì÷8æ"»ßB²-ºÛ…ºý÷¼_Â%º¶µ‡¯q¾Äæ)P“£D'Ú +F‘E»öM*a¢‘)¶vU“¥(~‡‰l+‡EÖ8;p¸óuÛÂ݃Dö+£<Üfó¹V¼ÍjRó`£–6hïZà¾%ÂB=du!˜¨Ž$†ùNLî/ãh®ím®pôÿ¾ªÂÉoÿŒí²@ å%7N鞌i@„·9‹M!šŠ~Èðœ:ÕCÆxN³/ÓHêÌñµu0Y'‚ãr/àq¼Q‹ýp)î…n0ä,)„]‡å~.@&)Bc&€ ƒw^=—Û¯ÒP»GÖì£ÉäLSo!®-êz8ÌÁÊjH€A<¸ãs?Â9x£ÁÃ1Üÿ/¨•1Š:*Ï«°ÄÈ-jb3Š¶XMÞ2ÚÞ‚%d¸ÑVú:Žìá4ÔŸ†‹Á80ˆðʈ¯¨LO£í“×qNÓ”Ù0'.4@©Q{º…$6 gÈ›pA„4nøã"¦I±“ßÉyOÑïBð€¨Ö ^-Eç}²™ƒAéèY‹:=®pÃi8:¨ Cù½ò˳ÀIÿäÇã·ÎÈBöÎþìUÒoQRƒLF8›ÁÔYH'júIâ/Ú:ÁÙ>Ô0‘Nh²Xãú(Ø*K·Æe0ÍÔî(kœØ§ÍXŒÎl°ºg0%ÍjQ—Àb0VŽvh'`¨DÊúØöð!)“|Ââö¥³¼)EO-Õ36ŠÀRzÛ€6´^&#à<cQÇá3|ÆÂ3å54Ë­Ž¿.i5‰U›Üó@MVÏÔ˜ÉZ³ÚšïbC‰Ç9¶—l.‡±ä%‹òë83Ê•å6ßÐås0Ëö”}LÒBÁ–뮳 åéÙƒDhŽbjÍDKYë H"U€¤ŽE^QP—ÏÆVÇc맜Ròµµ| ˆÃú¡M<ÞýÀ‰"k˜™Þàm¦“äà©X†eþ˜ŠpÀL…2({©0@j‹³‹ ß@qZ(4”`™Æ}e±wŸ¨…eœÄùÙA:Þ—€mû@#¾)cmÛ!ìËÛ'`mƒÖdZÞn¡Á4ªDøP 6ûÂ1QK +)ž-C§m\RÉš­ë.oä´Ä}Wb/¼:¹ç¡VôE‡#è a£¢Ôêdk¸Óõ«Pí6"+XÆeã™ ¤©A{†!üÜ<Ò,ÔuÄB6Š†œèƒô8jv@;tn]pj¥ ½ç³Âà|0u„®':d… p« éÍ› +œP#-þú|N1b›Î£w︷ö=FË%2µ-•G]vI0í-zKd.c^+!L©•Wƒ©Ulƒ aQÅÁVšÚ^ÐAÉt EÚ§y #±àÄlû¥§š,$DŠ%?Û#ö9ïP!Wu¶ztƒH=ëF‡ö'}rç`U÷œû7ø·[;ª‰+±áxÁ¢=‡cñK _²¨áà|ŸÛìXèÈÁ»p&ái[ tZZàÁ.2’EŽÃ8|‚qð„E–ƒ]6:w”ÆL`ž‘32;É5i¤ù(’#‘äûжwñâm¶Ól¹Âÿg—™)Þ¤eœu-NƒÛù,“G*Õ¤ų¶Êi¼Rþ.huƒMyÚë禾Ê…0Fj(ŸL欿|~“tŠÈL‹®ó|Ék²kB«‰gö›æ±õð‰I8"ì‡D%þ´¸ªEßp8)fJÊÇé¹2öÊb…#葵¢×lÏ­ÈÇÏ+O—„Eñ…ñ÷õ¥EŸnØ*_ãs?Z™û±>kåæ2\àA‡} cQô›ŽÎ9ÜÃq¢@Ér²øâ—nÜ.:ö©LñŽMÅ[ì5Ùµ‘UÄÝaÚÿ1Á~šR…lpsÎ\ÏçQ>õ=Œ9à ½‡‡²¹nJJbŒ}.ûrBöë8žØÁ6Q8ƒü¬^ÑËAn,†·@¨žîŸ¡&ÓT˜]KßÁ|eV¨²El^=¥ßÒãÈa47 F¯&TCoèw:6l–sÙSgGé±ó2PÿøÓÁ—ÀÜ=²E¦¦Æ§“Ùm¦l† +Íþ9Ͼ¸•Ë]Í~•ÿm_=ÊC‘ÃÞè|a̹ËÛ¾«ó©£xጭ#µôæg BwŠñ­Á(œí5« x‰j‡ÕàmÐ6ÃaÓfáñ?1aíôq~z©W‘‰–ƒñ#Á½þÓtI ”nÛ%ß8¾ënÁ_í)IÈbýµ{õ´€ùûå6Ž “k@k`Œ&5l%“ÅßëüÑâí[Š×­Û"øõËW¬_¡4í½¡²ÏèQwl“Md2m:–ÔÀÔ{×ÆQËša¿I¨‡n¾ ZèÙA‘èÇ õ#sùÿæ“ê“ûËwÊò—ñã h—Ô7= ¯áÉ—m t~ÿŠÖ¬‡¨{JÝîkæº +h•ý!<{í2{Ê‚)¾ð}g‚ +JøwÞyX:3XŸMJЕ¥À·hošºÁR*úÚJMœàMþA«±ßÞŠ Î5PrüO¡&.jÅš)RV—[T¸®P.L'dÁÛú ]çÛÛ¤pj»î…ÌÍF¥ «aLaÑŽÃe¸”%¿Žk„é|Í ‚%,°\›=Jn¸IÝ>@ µZ¡GeŠSéö–(¿®Ý)æ]Ú6änúúìõ’ɳ%ü‡ îðÕgªïÞÛ1}´„Í&ø½ÝöFÌ{oúléËì¤KýôýfE&gʹÔåwýxÍô˜„¿ûÍg:“¨XÝ]?ê¨à…m¯2îžé-á=ê»åµ¤g-CÁ}©Y}¶Š¨¯E7|µàzÐb`º¡^jv©ÞM+5-hw£KHÈRt¡•v)¸TÓF92b~EM{X×Ó.ù#±=4Ûãò÷€•†Ø¢DlÍçæî<¹ úE|ßø¨¤te{e{Ô|°s«èþŸ˜ËÇ­&n‰ÇëQ¬´÷ÔyQ†¡fmI(§ÍÀ%±öüµÒþf.õšõ+õá3ã"ç)¦ÜnR\È·g–^µÚ¯C!³1ØÔF¼ÑÄAܽ$œÐ³ïäGŸž[“%=O¡”{/sïòXÝ;S"°Ë‡7Ž¬•s[i㯇®ƒê»ÄÃÈì¡\뻃 -Yòù1ÝõºÍ{@]³`½D£xu-q®ah× Ÿ+!<<|Ñ#xÔwø„Ø>½ió_7|-Ý^ÄgÍË;"ÃO|{~ËÐÞ2A.…ƒI–»R_> endobj 1946 0 obj <> endobj 1947 0 obj <> endobj 1948 0 obj <>stream +hÞ|W TÇÖîaènDpÚAÃè4â.‹e‘°7TÜvTD¢E@tÜâ +Š`Ä …cC 4*¸€ŒC Qó\n'wÎãUƒæ™ÿüçáLMwUݪûÕw¿úPQæf”J¥ê:1pRÀ?Gÿ踘Ea1ΡK- SºÀ§³œü]VÑùkvwfV¢½ …ÇŒd ½ètdBääÀ9£xÌ`–9DCO–{•Ž©¨B +-·Žà5«%9ELˆ?¯-*—ù3\wR^'_Õq×W¦Å'¤$g¤§N¾?@–ØÿC A·ß°L®®;]|™*¤#fMZ2R½¼¡Øt¸Õüò^0šoã/iîÀ†3©_·ËÏÌÎ8Õv¸á¢ +l$xZ®Qç!ÀYFWBOÓP]xüN¨WÊ\ƒŽó0—cŸø‰<ê߇¤§žâO¥!¥Ü_œIÞ$ku˜K›„Ǧð!Ãý%'øO™dü€ÆË$uO_‚_ôÒi‚’ÿFS½‹¦þÖŽŠøÁ?G“¡»°ýø Á L€BÂG``aú°Ï¿°:£/ÇzØ‚©x°dpÐ_´ãѶóEˆ q4ä—©A#ê† /‚ùo˜s +ÜK±‹X‰C™¸Ó‹ ëà‹tö¾ñvÙ¯vyë€Å>¼*4*Ôõ`^o»/^û¨pE\m¥\©ÖÖºDªŒ;’È-H¼êvD#ÛŤ,O‰1ˆ›hîhâÉŒ{wë·LJÝÆÇ•'êŸ} ÌA‡V{œwð\å¿Ý-»Ñ®¦öüý 7>[rаoyæÂô¨ÒŒnÜjã]š3&¦ÙýÕ®ÓÜæÄù„dGcR7¬MÔ'¯Þ±‰Ï + Ù¢ÇÞãúŒEW˜ž|4¯N¾Ÿò¡Ýò¤!8Â@¶ÐgLQÓzþ-}Ú·M J¤`œãÚ~u!ò™Ö3kp]ɦ½0?S8ÚpQDÂ>?f/N+ÙFkÖ’“Dm +Da”ü +£ Š«"Â]@Žë£„ N0%ÑÉ N”“è?”W×øÔ”C?`”¹œº%ªR! P-_!ÓŠD ~c&µÏRÉž´?iLžäi ñ»Ò}Ž¹G"Ô0`Fº ±ÍHwÍÛzÐe(g@ í2®ökõ*#0Šæ~Æ©¸•žJÞ‹ ¸A$¸a$í 7\M\@sp?]³{w#‡ù Ûhîü†³iÙ©G,Ž¦Ý–cøo.Ÿ+¹¸“\ΗÃk?A®ÖáÊ4öÛЀ/=j $‚À• Å Tå½ê¯.3¤3\‚;tÝä:c¶ 40ÿÔ½®¬yùGƒÿ~î#ôó¾ßÜ–›½%ÕË2U¦–=ÕEŽö_ ïåréÍ&^ÊlÍÚºçÝÍñD<Ð5íyi†€õãºã§nLA°îç½Õ—žë[¹(Å "8Iëâµ#’+ktE +DbníÈ~®4yc«Í‘h®93pÌÎeäêX:݇÷CJ +H#w"ÃY ºJÀJp[Œê%®EŽ#ÑŠØýÃ4†«¿¹dtÁX=ZôD ·ýÍ,--äÓ½˜ÞV~4zÖÎÃ~†õÁt•æ5ezœÿèo²†¥ºÇ5wi®ôv2jÔ ÿ[ÏÚ„Y|£øðDŠ€It•;KQGh³\t#s¡üJQ…þÁ¡Ù~<ƺ)¥5v±?ÄÞAË1ãΛa€ƒ,!Ï6á©‘~‹ƒ¬TpŒÄ±‘½ÉeëHÒ+È."Ž‘5,¨ÍÁÊ ­Ú2•W½’ú÷¶Á{ñ);}ÓPì2oûŽPÃçýyiñI®yÏjyÙñ½ùm‹µR;Þî^ ½$bp£„p²|Ž„ÃÅ‚D´ +yZ¶S6™!(%‘«”°WŠiâØüp4$@ˆ8ŒÁX@s2  ýD‘‡V³Žo¹ØžÏ1BDSîßÉ´1-Sx›69¯J †)]ºsõr!“Vò|‰sç-ŒXf(\³ ?T¾|é*ž«/"brüýH}ÂIöDî©ãyú‹‡—¸ðxˆèGfÏäœ)8®¿´_˜ÂcÐâDöïÅ@­W›«àöÚOL¹Åìÿ84Ÿñ g}J¨XŶ¶êj9ü›\ó§!\ýв‘°êýR¶"ËÇÐÃ`n k*^¿®™„Qå3¾gOŸë 2s%†QÙÓ¯mâÓ²Sá«i-Yø+aZ:3ý\õ¼{ï´‡¤ÿ·üÌ 5R·Ô ©zù3\úÿÐ{ ´KB ‘oWïóOMx_øtœ†ÎÊÜHxyíC‘5)ѹú÷ÁÀµ(šð¶€ß:E‚Ã¥\UU­su‚l%b„*ȲÐéRN>ï躙|évº,94gŽÞs윑žÙj¤c3x.Ï)sè®ÛvßÜÍýînÓ +¿mmøT @ ®¹â ÀU¾¬ãªPÿ±p 3ÙžuîÖ|™÷½!¹„žÛ+8i®Þ3,÷_<,‚}"îcÉ=Û.Ø ¢ö•GˆÕÌV kÄT‚Sß›Âï7+ +¾>fàVke v’ÜÊ +¡ÓgOÖ{EÏC!«Iú +ž‰Ú]m–£¶ÝrÀ$݆¨èX¹]­¸Œ' Ãgt +ƒCáݤ¼ºÃh’$XU}ZT¥ÿj¾?5ôOÒU1÷áq÷ñ]Å€9‰@L¦q»ŽØD§1Cà=…‚—ÈoGh¢*…L;´Y0'A0‘‘`ÒÎ!î!buÄgŒBÚ_€9âxzAopÀÞt€òìË ø+>c ¢‰eÊâ~­Ñ¬éï”gb¨ ƒåµ¢Ê£ F±Fy¤@®*Þ§’Á±‡A-Š8ŠdSð/_ÔÑè.@q²í;S™¢¨~V  —û‚^Š§Xh€ß铦îØMl„lV³ú |å ºì}Æ- lÜÙh4%oa Ùþ«»¶Zu,¥ŽrK—ÿ01‹ +endstream endobj 1949 0 obj <> endobj 1950 0 obj <> endobj 1951 0 obj <>stream +hÞŒY \dzÞe™D\pÇAeÍŒW<ñÀ[T"G¼PQAÇP@EQE#Qˆ"h<@PŒ‚x L² +<ñAñHV߶“íÛHÛ$Ûl[Ù®»Ý&;hîß¼ ù_†ùÉð˜í®g¶ZÌk‘Ç5ç"¹ûÙößØ?kÙµåÒ–×ZÙ¶Ü*±Õ¾V¯[k-¶Žk}D¯²8Ê1ТÛE¶ž(•Ü@zÙŽ’hö^_täæ^vøðá´œÜдÐÐÐesy=ÔÁ*-L½X{Q^ÊYn®¢Jè]°Šª°ÿç]“$h%ÞjNÆh¤·oëî·ÈýοZìUöºbåv@–dÕ«hAoV[ñRêDï€pJ¤Wa8Õöƒw´É@ÐÒk |ÐI|Fº#ˆÎª”ßÞÙ«•NÜï #ÚÒúèB˜TøX½iëN=:UJ.² šq·Fq6Ê{ÈKÞµ5—ÎÜâq½|ê¸,Ÿœåë;ƒ\ÓËü¯Šöÿ7PaFsæ¾8nO ÒÆQúh9D‚,=n8gÚjb—+{!“C†^9ie@T  8SaÇ”s8Y¸7ïXîgK²ùƒ¹ÔÁY3öù=ÇÏ9óÀì£Sö„[¸Ï¸¡ƒÏ{Õ]<‘uâÏ./OA[‰H -Ù—·«x×±Ö54{§`.|éœE>Æ !ÒÉ ÒñS{½r6J ó`  +Èž¹’}*£S÷éù°¯\§8¼±àÆöšˆÝQï€ú2ì~®_B{ÎìÀÞìKÀî{Ðñ3ÒËuŒîÜOeÐô ŸÝÇþÄûÑߣ®íÐÞíýÐÎ É å×(í[m‹Í)X)¾tì†ú¢ÐÁþG´/:Ü ôнð³o±óäp¢&Ó)è„M$ˆ¢e-dÊ:ÈTæsè…S|a +NaL•q*x1z´T£q´jØÐh¬4i_)¼îäs“ÞÄh·Ó +h¯S˜S\~HÆܹ!K‚‚Ž,ÉÍ=’‘OìjBìj¯tÊè7M8¼ð§Gþ2¸ðƃl£¤äKÚ×&È6é^C‡Í3Èê.à’SÉŒæáàƒCqh8ú`sÞdÿhŒØ8¢·Ójƒ-°Åjó×o”«d‘oˆE·ˆ»çÑèç´'TSæ8BTºK8‚QG¥Ê†G24ùIì‹+öìc¥´{`6;€°–:’óíE‡ßú×b“Ñs§Îæ?•™~J-*yÒkb¤È| q¯€°K‚HÙ Ø™–šØÇ@);¹ì|SZ±‘}qÍäïõé$_GA<È°ï\f7ŸÈ°õéÇ+.: oÉ}ºqìé+×*N^½Z1ÃýÓq>_òì+ÑòÆe?çOܧ¹{¸ߨ»\rC ‘ +3Uh_•A¦I÷4š»Gƒ74f°»,\OŸAðiçkN¿ž?wìd¦H¯ŸÕCô²3Áïsìk„»ð7>j‚8Æ8lVÕÕêSjïçè,¨àÇ7þAøå¢ +v¾Ÿôßš 3þSÜ´…JÙ8egžŽ¡ +¹ö430Œ,:ŒÀš—¡¬½¥ŒÕÝRl8_e¬Ì˜Ç¢Wã›^q‰Ò^$ó/*.œÂà03¹öÍP¦C¨™\ Xr*ÁQÉA¤<Â`&°£8H§Mêyò['‚%oC”íFˆð1SÍÁ”ARÊÉXüœŽRÉ´*q‘¢d€–2˜V˜Øß ¥Äõá& úË—nÞó>î²[ [ªœI--ÛØ,}l诙ö¦1ÕA;†ý- º¯G-jÐzã A¿BVâ¥è¨Ü(Ca©"aËÙle•RÁ±–%DEÇÇ%%®çs§ïò4¢5véƒþ8à)v€ Uµ¹EeBX2mü‚aFìàBBÁÜ É•Ç¿ÞðCËM©ŠÝ½æÈúo9d%§%å4¤©`!;ž”êÀNâœEȧaÄeh]ÁuuØDÀ3bj@?ú4 @O Ç£Æ hüÐ%íd"ýPâ_ÂþÁš•uŠ;EÇÃ(Ê-Þ7÷%ÇøJŒžNÇak +ˈéC\%ð]qf(þGšö½4Ýwö°_ÂÖÿM†n#Û÷/ù4ñ8Kß躬RÅ^8Â>‚jØÀ‰àˆ-™(_ŸèIF0Z£~¯z.°A_îõq£g.~è¶jézøo—O4’ãî—ØGw+Ó2Ï 0¬Db>P_+C6ÉüZ‰s!@r!úgã¢Æw%¸F±E̱ñ~¿eÝSrj‹0ÒŒ#EÅ‘J0!ŒK%í[M'•Qi»ÅhÈž cgâ÷ 6‰˜Ô©ãØoMëùµ §¦Ñ[1ŒZPysáE# úè»3¸AɆ… 2¸Ãt«lçÎJ8ì0nÅd +’ïKÕ¸e%õ…¾Lõõ‡ O£Mê´ÖÙÎÁT7:ðÁÜ›â…áY­ßKë*ƒ\BN:¢f‹/ÍÁ‹Êú+Ø@ùE +#Ø÷VÖÉð€!»ÈÒÄ|gíñ.ÚÃ] +Ås0qÓJ©£¼™G³•JŠµÙÜQýàBëW¡Ê1ü$C­L˜–*¨JÂÕ"XVdž›ÀõvP8T¼G³ËÍÁDøRB %„ ó”˜÷SÄá+$åKI[Tªt,Õ)&Èá Goè„ÎèÜ;aìñ;38?‚NЃ7Ï°¶Œ$ÆöоŒ‹ìDòhí'’NV|"Áâ‹Á2äÊ4˜(eî/’à +»Á'À3àó´Í:µš£«€E>²ž.¿½ ·ïg®è  =­G^Š;yXZ¶L)” Ú±¹Êž1ÜêèˆUáÆ%K¶l_,°aÛÃm 1®ül}Üa³}ËÎÛwY}™’òå#ômÐøßÖìÌDlW‰M¡éüÅ ÂBC"Óç´ÚìЮbcöþؘý›{`ÌacΡ¯Òsód¥÷Ú;[‚ÆS=K=Õ%n 1½`öïô‹™yƒK°…ØHý襹ó eïb«DæVÊUÓÏ™«€Áy¬ïªYÅ™~½yØ’ðØAØFÀV*ŽãåبÌ(Ñ&¨x«é£yû¶6FcbÓcØ91× ·%4%t¾CD|x|/­£Øý1ÙI[vn7nÞ»~“°´°4¶Àø¨Ó` Ú|Õc‹ÀfhÜ7H»ëP]sâÖ©‹Ÿ/ØÞ<71¬$©»E³ö:ŦÄ$¤o?¶-׊ý2f6ÁzLÄú5+cŒq+¶'­Rƒü·ù±ãèG¡øÄíOªânÅ÷q틃x¢ÂÇ# ®Þ…y£Úš^1-Ã膷ƒ”"ójú3\U¼n'xSàF n'·Ú”¸Ñ;Ñ»xõï„V¬Ì„¥¤˜˜çBöÀn^ 0<{©â´ +o2Øæö§* ½}Úðp³JíÉèWå(±’!Â0Lù à Œ­$ì2„åy ÃÄ4Ž5ÇRq4ŽSb©—j×9¦›3¨Û´:·uÎI»¼ ¼tÊY2­PB/ñ)=¾q–VB¹“‡yi%"~Q?¥o Õ4XÏÀäsõ;ÜÒa1Š$}Ó ’çb¶æ8‘ZAà ’ªØ8 7R“H¿Ôž† +0”j¯¶'Ñ8 6Rl Ácõ½„¢š­x‡<)½êHû}fÉQ–¿Q§\WS‘(VÓèˆ)è)Tµ:ï2 cP&©á½Ça(cA¦.½ñX‚ZI÷X>Q"§`!ƒOͳ)_e8ŠØ«x®Ì¥N’‚D#½Ñì#û3Þ‹Cý=Aºþ®tca­htä†\ûÓóÄN¼öÆ“ú{žzBd+W¹?õ¨ÁõMºŠDjóí¥^‡Í-•ús=ÝXZŽ‘€‘ ß•B¹ÌF+óà—û+:{Œ]¾d"Ÿ:ƒÚw¢bï9ã…Š¥îÂ<&9Àik Ñ™ií¶x@íä»w«Nž<Á³Ñ.ÐNrb|ŸqlñÄÀaS†'øäœ:°÷Gè™qyM\‘иØù­&NÝ1Ð2¼.e£w+—¹úÊœIÒi†-¾“Èx½tËÖ/@ Vàе C=ƒ§ + pˆÆî1”²Ñ܃ëé2¤s×Áwž?»sí寗‡·ãUîþ»e¸X +Ï +Øež2Ž[¿66ο~câ:!cÚìíÓhƒÖ±3~Ö}­©="Ÿ"ò© ƒgEîÃz>®ö‡ `qãzèÀáÔ&Š=±&?!m}ºÕþÄý›2ølùBµe0±åD)¼Vý'*U.K`¾ ôÌjDC×n$ý²Åhõɦݨ:vú(ŸH³Ñƒ¡4@©e0"z³H‘ð ÷úrõ¯/ï¸wéNö¹u1á& }† n¨AC +¨4#ÃID9ÉÀÈpU +‘UÔɤDYJ¤Ý“°MŸš­»´`DÞ(#ZuîE\nÿÔ ¬¯•æ—‰CéŽc—}2bÚÖ}nüj?*úìãÏLFèõãmÁl ¹ûÕ×z|Ù¥G_^=ݯ0FCœINçÖGÂ&\)ô©Ò³…åÆÛ{g¸ ¸d€ +ð°9¿äZ37`2{<›Ä')Ô;?èÀ¦!û"t'æ•žŽTô è,Áf(Ú4Xª,7eÝ/ ƒwâÆg]?üÈ?`ó–@þ ‘ú¢¤hl§Ìg5‚Òýƒù ‹½Õly§½:È„AÏGgðgå(‡óE™dL(ÅAU2IT!q@…x2g‹HMn8‚òÁ_êO£?Ì¡XúJöHÍ0o-š¾‹ÅF{’@4øÛ˜†HKß™Möë² ýÕßmØ:¥HPü|ìáɳæ†,æ >›“h _¸\`ë +IJ»ŽwÜDð“Ü>!›9| çP¦ñÛ} z +¸—äOØÇÉ8’wÈxz—8QÀ< ¤qÌß‹NÝ,¶æ€ê·{x§qÇTΔÂü/›6|ÌÜiÓI(V2ÀÖV”Â_„TåB0Ñú.‰ª¡lC~¬ïÃG¼y =4­.ýºz<6Eíð1íÚ ¿Zžì£ô3©HT~nH>õ[Õx5¯$ “°x'Ò>G«n¼Ï=Äü¿ÓÏ”@žu}5’$U§|Ž ÿ‡ôÁ)¡ž¤Ž­þïœðaBÑ{¨ +  Õ"ÿžÄ˜Uél݇ gëÕœðÀóIa4Q†}%leeC0ÚÈåDÅFB_T=Ë@³ÓyÆÌý«"“…’Í”).0c¦qȨ™Ã†l%hˆO¥ÈeJ)>Êð  ÔÅy&ö»]Y &níu™R“R“wólæ¬d*"!.ŽÐ•ÕÉɱÂ×3÷ˆFw´œßõÐ-¶üK=ô0¡ü‹ñc—{ é—U³†ŸF¨Ó¼”E‰‹9,MX¶vÏ*Ž§&¦|µÕ˜¼)!!I7åÅ–o‚mv=èJ•$°™ŽÉý¶]u8yýÀ™ë#Ý65¤À'’žp’ ÑÈ'¥Œc+Ñø©x“™vµ!?^¯þ&ó{>®˜šÕÁ/v–qHÐW̃¯%üš!ŒLc¾#~“!û4Õewq=ñS§Kâ/—ÊóŽäÙ壒²Ûˆ÷ÈÜȈ>3&‡†}/@£=Ï$öâSÓH|`w,w&Yt”ÒŠªR¹Î#ûã3*žÆ~ðŒz¨v]£õ±2,¯Ê•´ñ¤lÞn:èËUÒ·à0á2·ð0UIƒ%‘@(½©-ºãC*î §©‰t_xĘ•µbE¶À¦­È9²¢ÀxF>zâ¸Ðð_ äN½ÈúÃW„²iþóãÝ×PÇú+íÈç>4›ö[Ãß¾p ¬"ÍÆÆ#/Agßlü+lmÙØЯأœÝƒ=¿ç¯S6аvëÝs܆Os_Ñò­MÙZnªÔ·ø/É3 +endstream endobj 1952 0 obj <> endobj 1953 0 obj <> endobj 1954 0 obj <>stream +hÞtU XTU¿—˽tcnw,ïT$^‹ +ˆ"¢²"P¸<,cg`Lˆ— Ðúj5,C0AKÖVm1¨ô“wݲ$“B`i¦(7úÈöÆ3äžÜíÛ×7ó{ÿóûÿþÏCS®.MÓ®OLX›°Ök2ggê‚õ¹Ù[K ŽÃeHC£9®;.ÈK¡ÆËpɽm÷ÂX©•¾_-µRÞ>©÷ójï•ÿÉ,8>ú=:¼f.RQ.4Ýp2¦ °Ü˜ýÜ–bíc™~ÚEáKc˜sŒpŒ!Ú謽A›\^TlÈ+ÒÆåg ŒºbCÖãZmtn®Ö‰P¤5Š FÙýUmv‘V§-6ê² y:ãóÚ‚ÍÚøìü‚âòBƒ6zV—Ÿ\`Ôf“»E%ú¢ì¬l1ÛPôø›JÑäG¹Q”‚¦fÓ”†¢0”?EQT0E-¢¨PŠZBQa4µ‚¢VºQë]©dž + ¤\(†zœzŠ2R»©#T=“^KÐé6ú"ýƒKK½K‡‹™™Ï„1—\ºæº^eýYû%÷0Î%p'¹¯ù`¾Šïrów{Ú­Ùíîœûj÷CJ¥]D™ðª÷¤ªûnÚB’ÐÚ¨ º¹ìªÄÔÝÒ3¼ùèñ+ƒžßÏç•Å­&Èí£¡®:xGÄy+!çöA.ÙÆdXÉ)±ïù&鑻̈º›{fWº®BÚÄ·ÔÞl/'Fµó’'‰ŽùÞw9eɶ¯”~z¸`+ã8\5µ½ÆI¸<©¹+´þ$-ü +v}pø2 2[è÷ÆÛRT%‚b{ðx½° +á­ø$,ö†°KPدwÈAŽÌÁt^¼¯N5üžœøÔ×'Š±ªM&pÕèk˜6!í8cVC»z! –@&æaN”ñ{ÜX¸q<2‚ãp\ÄcX%ã$NùQµöX ÐB[Æd·ˆöX؃æZìs¡=a±·LéQ§<@8ôO1XC"LXð‘Y`±¿4¥ã”­&›¾”%ÇI6½èïÜK«¶Ø¥ôÙŒžÞD:‹r¸ $”=p©n3¨ $±’à ²˜ŸÒßFƒ5¢íƒ,Ð6}áIüqj† øfœp°Í!ûòãüÿ¤çËø—\¸+˜8¹ ì8¸EZð£2pÒ ÚšáÜ0ìVYÇàþØÏÆ… XWDØÉ ÜV'Öbº1C†™Í\Þ‘½MU/ú‘Šqýkú#nÂÄù¶KoOzB žÑ‰gHø–Õ6ÛörÌ¿ÁŒ÷ŠòU2.qºÉ¦°ÐphŒi´)D¨˜RŒÙPa±épõ$B¥t‹gÀ:é°V‡‹)š¦ôìßÈǦg1Mè~] žH³éæ{ ô<úF¬á Üþ {‡ƒ'‰–Þv3K– 3ëM>Ó+O²šÇA"»Cœ=Þ§«Q7ƒº±‡ø¾½;W¦më[Ó‹üúT¿ý…^² +Âi˜(±ã•Æ+ãšáŽ¼ ©ÆݦJû”³B'^X¾Ã'ÃsÑg ßÝé¾Ð~Fr3k2ÿ¬i9üÊ&ù*_ùâ®ÊÝšò]uÇd¸Äƒ'lÐa1|#ö¨ ¯…ÎØÈ”ˆ¸ü3—?½~øÝW$ ½ÚXïF˜ $\Aó†`m©êOV8=*t ÛÀ[-tõÔðù¯µ§}¥Õ!<Àw9pX–ªR† n•ÐÊ Û¦ôdÑ|µß, ?³bÙË2©K”Òª!Úbe  ¥ˆ}¡=ü;GÏÖ7VUÕKCüþí;öïÐ,In¹¼(fåö+J!™‚ ûà⾫ë±Q8mÌ0çÿ›!Œ‘pÃ9Á]Éÿ/Ÿôž?Ý~\>PS¯¯ÅJhZV=ük)”„öÌzác ìÝIýÄÝ­œM÷X¡ÖÊ €Dðó9½,,#5Ç(UÂk¡Sz+œ%ÝìÆ;_ÜlÙ´JµòäA 7[JW]³Î`Ô"†Ú[¬œ‚~$½w<ÔwZÆѧ®g;bHHÅ™:–•…ŽÿÃ^$ÕN%ó¬§Þï9’’!á­ðßÛÕ{£ÿØÆ ZáG|½O&/ÛòÜÆ é·Ûò.i‚žM((“+‰n„óÓÆ<®µ +ç~2fÑF"'¹Áá„%œå…sN]–›B$ÜO JÛ>€ Ð$ç.2oA“ˆ5Ø›ÔDäxƒ4Qà#qdöÆiTÝ{‚¼*PÀêØØ­XM^ÕVP÷’à &Øð šÓåf†yð¢8]2ÓõòS!Iaö$Ñ +M5Üæãçszÿ£3“òL Çâ6bbÒÐòÛªA«ÐpY¸xõ/ÒéQ®fÏÞý»4q›ô [â×G†òΪôPºµæ”ÝZeú„A”Œfˆ'v€„¦b>æÂæ¾r鎑¾ê/;¹]çùäSÆxüÐÎO;÷IK¹øÚ&¬€L Ìøª¨Ï ˜n“…ÁÐcìš#…‡Þõì¬k¦aCÎ~I¹gyôÑ·H¼9’? †â…«V~Ž¿çãn©{ã@í)éz._¾¥ºS†oùI_ªúÌ +•$dBÚ®F-¡¸“D(*Ç3Oeœ´H0jWðØãÛ̓7ϺÒ.ÕT²BY1¯z =QJ¿ŠÊØ?æèó^è Ö‡ƒd{ {›ƒ§Q 0ýºÂ5Ì(¥m븇üHŸŸ´û±£¡PÎÛLúº +fý¸…ι/™p@ F9¥–¼Šïšà`)]ŠøŽ‰  +ž…ãñ,ˆg1ËA >HVÇX`8’é Æé,¸’û8g(ÝdË+UÕ## ÞËNº2¡ëËAŠý ÒíݱISTþò]²PÉ í‡*k€­k€-Ãò5ˆú¢®@”›?§,;jÓÅ9MàßÄÁñzxèÀ”ûa^j)Ÿs_á>0Ã:~÷0º+þC€1epn +endstream endobj 1955 0 obj <> endobj 1956 0 obj <>stream +hÞTP±ŠÃ0 Ýý{tp(]B ô(d¸»Ò´·»¶’34²Qœ!_;M{tÐ=éñž$÷õgM6€<²Ó h-ÆÁ¬®ØY‚¼cuXºu¯<È(n¦!`_Së ,…<Åáx‚Õa»Î>@þ°A¶ÔÁêœ_~#ÑŒÞß°G +AUÁVÈý—òߪGIöÏ'PÌ}¾;ƒƒWYQ‡PfEõ$ó>{*®­þS,›Åf—U"î.lR¥S^ôȳÍ÷Î’¹%|½Ä;Ÿ¼R‰»ŒÌhf +endstream endobj 1957 0 obj <> endobj 1958 0 obj <>stream +hÞbd`ab`ddñõ÷óöpÒŽJ,HsÉÌKOJ,)‰«üaü!ÎòC–G¬ë·ò¯ÌŸ'XeÒ"x¿Ïàÿ>WàûBÁ)ß +1032²¬Ù‘hnìœ_PY”™žQ¢ ‘¬©`hiaª"ÍÁ¤˜´TpLÉOJU®,.IÍ-VðÌKÎ/*È/J,IMÑSPpÌÉQ›P¬P”ZœZTõ qV¹Kæ0…Ìb…D |z&ÐŒ¢Ô…’¢Ä”ÔÜÄ¢l…ü4 ‰@Á¼Ä’Ìü¼Ä…Ê‚Ô´ÄäTg¨5@a=_#c;“BØ#ìrßWñÑÏÞîÍ?~lf\÷Óùg–ØO¿î=Øùjgþô˜ñû÷ 6€ÕÂn7 +endstream endobj 1959 0 obj <> endobj 1960 0 obj [/Indexed/DeviceRGB 255 463 0 R] endobj 1961 0 obj <> endobj 1962 0 obj <> endobj 1963 0 obj <> endobj 1964 0 obj <> endobj 1965 0 obj <> endobj 1966 0 obj <> endobj 1967 0 obj <> endobj 1968 0 obj <> endobj 1969 0 obj <> endobj 1970 0 obj <> endobj 1971 0 obj <> endobj 1972 0 obj <> endobj 1973 0 obj <> endobj 1974 0 obj <> endobj 1975 0 obj <> endobj 1976 0 obj <> endobj 1977 0 obj <> endobj 1978 0 obj <> endobj 1979 0 obj <> endobj 1980 0 obj <> endobj 1981 0 obj <> endobj 1982 0 obj <> endobj 1983 0 obj <> endobj 1984 0 obj <> endobj 1985 0 obj <> endobj 1986 0 obj <> endobj 1987 0 obj <> endobj 1988 0 obj <> endobj 1989 0 obj <> endobj 1990 0 obj <> endobj 1991 0 obj <> endobj 1992 0 obj <> endobj 1993 0 obj <> endobj 1994 0 obj <> endobj 1995 0 obj <> endobj 1996 0 obj <> endobj 1997 0 obj <> endobj 1998 0 obj <> endobj 1999 0 obj <> endobj 2000 0 obj <> endobj 2001 0 obj <> endobj 2002 0 obj <> endobj 2003 0 obj <> endobj 2004 0 obj <> endobj 2005 0 obj <> endobj 2006 0 obj <> endobj 2007 0 obj <> endobj 2008 0 obj <> endobj 2009 0 obj <> endobj 2010 0 obj <> endobj 2011 0 obj <> endobj 2012 0 obj <> endobj 2013 0 obj <> endobj 2014 0 obj <> endobj 2015 0 obj <> endobj 2016 0 obj <> endobj 2017 0 obj <> endobj 2018 0 obj <> endobj 2019 0 obj <> endobj 2020 0 obj <> endobj 2021 0 obj <> endobj 2022 0 obj <> endobj 2023 0 obj <> endobj 2024 0 obj <> endobj 2025 0 obj <> endobj 2026 0 obj <> endobj 2027 0 obj <> endobj 2028 0 obj <> endobj 2029 0 obj <> endobj 2030 0 obj <> endobj 2031 0 obj <> endobj 2032 0 obj <> endobj 2033 0 obj <> endobj 2034 0 obj <> endobj 2035 0 obj <> endobj 2036 0 obj <> endobj 2037 0 obj <> endobj 2038 0 obj <> endobj 2039 0 obj <> endobj 2040 0 obj <> endobj 2041 0 obj <> endobj 2042 0 obj <> endobj 2043 0 obj <> endobj 2044 0 obj <> endobj 2045 0 obj <> endobj 2046 0 obj <> endobj 2047 0 obj <> endobj 2048 0 obj <> endobj 2049 0 obj <> endobj 2050 0 obj <> endobj 2051 0 obj <> endobj 2052 0 obj <> endobj 2053 0 obj <> endobj 2054 0 obj <> endobj 2055 0 obj <> endobj 2056 0 obj <> endobj 2057 0 obj <> endobj 2058 0 obj <> endobj 2059 0 obj <> endobj 2060 0 obj <> endobj 2061 0 obj <> endobj 2062 0 obj <> endobj 2063 0 obj <> endobj 2064 0 obj <> endobj 2065 0 obj <> endobj 2066 0 obj <> endobj 2067 0 obj <> endobj 2068 0 obj <> endobj 2069 0 obj <> endobj 2070 0 obj <> endobj 2071 0 obj <> endobj 2072 0 obj <> endobj 2073 0 obj <> endobj 2074 0 obj <> endobj 2075 0 obj <> endobj 2076 0 obj <> endobj 2077 0 obj <> endobj 2078 0 obj <> endobj 2079 0 obj <> endobj 2080 0 obj <> endobj 2081 0 obj <> endobj 2082 0 obj <> endobj 2083 0 obj <> endobj 2084 0 obj <> endobj 2085 0 obj <> endobj 2086 0 obj <> endobj 2087 0 obj <> endobj 2088 0 obj <> endobj 2089 0 obj <> endobj 2090 0 obj <> endobj 2091 0 obj <> endobj 2092 0 obj <> endobj 2093 0 obj <> endobj 2094 0 obj <> endobj 2095 0 obj <> endobj 2096 0 obj <> endobj 2097 0 obj <> endobj 2098 0 obj <> endobj 2099 0 obj <> endobj 2100 0 obj <> endobj 2101 0 obj <> endobj 2102 0 obj <> endobj 2103 0 obj <> endobj 2104 0 obj <> endobj 2105 0 obj <> endobj 2106 0 obj <> endobj 2107 0 obj <> endobj 2108 0 obj <> endobj 2109 0 obj <> endobj 2110 0 obj <> endobj 2111 0 obj <> endobj 2112 0 obj <> endobj 2113 0 obj <> endobj 2114 0 obj <> endobj 2115 0 obj <> endobj 2116 0 obj <> endobj 2117 0 obj <> endobj 2118 0 obj <> endobj 2119 0 obj <> endobj 2120 0 obj <> endobj 2121 0 obj <> endobj 2122 0 obj <> endobj 2123 0 obj <> endobj 2124 0 obj <> endobj 2125 0 obj <> endobj 2126 0 obj <> endobj 2127 0 obj <> endobj 2128 0 obj <> endobj 2129 0 obj <> endobj 2130 0 obj <> endobj 2131 0 obj <> endobj 2132 0 obj <> endobj 2133 0 obj <> endobj 2134 0 obj <> endobj 2135 0 obj <> endobj 2136 0 obj <> endobj 2137 0 obj <> endobj 2138 0 obj <> endobj 2139 0 obj <> endobj 2140 0 obj <> endobj 2141 0 obj <> endobj 2142 0 obj <> endobj 2143 0 obj <> endobj 2144 0 obj <> endobj 2145 0 obj <> endobj 2146 0 obj <> endobj 2147 0 obj <> endobj 2148 0 obj <> endobj 2149 0 obj <> endobj 2150 0 obj <> endobj 2151 0 obj <> endobj 2152 0 obj <> endobj 2153 0 obj <> endobj 2154 0 obj <> endobj 2155 0 obj <> endobj 2156 0 obj <> endobj 2157 0 obj <> endobj 2158 0 obj <> endobj 2159 0 obj <> endobj 2160 0 obj <> endobj 2161 0 obj <> endobj 2162 0 obj <> endobj 2163 0 obj <> endobj 2164 0 obj <> endobj 2165 0 obj <> endobj 2166 0 obj <> endobj 2167 0 obj <> endobj 2168 0 obj <> endobj 2169 0 obj <> endobj 2170 0 obj <> endobj 2171 0 obj <> endobj 2172 0 obj <> endobj 2173 0 obj <> endobj 2174 0 obj <> endobj 2175 0 obj <> endobj 2176 0 obj <> endobj 2177 0 obj <> endobj 2178 0 obj <> endobj 2179 0 obj <> endobj 2180 0 obj <> endobj 2181 0 obj <> endobj 2182 0 obj <> endobj 2183 0 obj <> endobj 2184 0 obj <> endobj 2185 0 obj <> endobj 2186 0 obj <> endobj 2187 0 obj <> endobj 2188 0 obj <> endobj 2189 0 obj <> endobj 2190 0 obj <> endobj 2191 0 obj <> endobj 2192 0 obj <> endobj 2193 0 obj <> endobj 2194 0 obj <> endobj 2195 0 obj <> endobj 2196 0 obj <> endobj 2197 0 obj <> endobj 2198 0 obj <> endobj 2199 0 obj <> endobj 2200 0 obj <> endobj 2201 0 obj <> endobj 2202 0 obj <> endobj 2203 0 obj <> endobj 2204 0 obj <> endobj 2205 0 obj <> endobj 2206 0 obj <> endobj 2207 0 obj <> endobj 2208 0 obj <> endobj 2209 0 obj <> endobj 2210 0 obj <> endobj 2211 0 obj <> endobj 2212 0 obj <> endobj 2213 0 obj <> endobj 2214 0 obj <> endobj 2215 0 obj <> endobj 2216 0 obj <> endobj 2217 0 obj <> endobj 2218 0 obj <> endobj 2219 0 obj <> endobj 2220 0 obj <> endobj 2221 0 obj <> endobj 2222 0 obj <> endobj 2223 0 obj <> endobj 2224 0 obj <> endobj 2225 0 obj <> endobj 2226 0 obj <> endobj 2227 0 obj <> endobj 2228 0 obj <> endobj 2229 0 obj <> endobj 2230 0 obj <> endobj 2231 0 obj <> endobj 2232 0 obj <> endobj 2233 0 obj <> endobj 2234 0 obj <> endobj 2235 0 obj <> endobj 2236 0 obj <> endobj 2237 0 obj <> endobj 2238 0 obj <> endobj 2239 0 obj <> endobj 2240 0 obj <> endobj 2241 0 obj <> endobj 2242 0 obj <> endobj 2243 0 obj <> endobj 2244 0 obj <> endobj 2245 0 obj <> endobj 2246 0 obj <> endobj 2247 0 obj <> endobj 2248 0 obj <> endobj 2249 0 obj <> endobj 2250 0 obj <> endobj 2251 0 obj <> endobj 2252 0 obj <> endobj 2253 0 obj <> endobj 2254 0 obj <> endobj 2255 0 obj <> endobj 2256 0 obj <> endobj 2257 0 obj <> endobj 2258 0 obj <> endobj 2259 0 obj <> endobj 2260 0 obj <> endobj 2261 0 obj <> endobj 2262 0 obj <> endobj 2263 0 obj <> endobj 2264 0 obj <> endobj 2265 0 obj <> endobj 2266 0 obj <> endobj 2267 0 obj <> endobj 2268 0 obj <> endobj 2269 0 obj <> endobj 2270 0 obj <> endobj 2271 0 obj <> endobj 2272 0 obj <> endobj 2273 0 obj <> endobj 2274 0 obj <> endobj 2275 0 obj <> endobj 2276 0 obj <> endobj 2277 0 obj <> endobj 2278 0 obj <> endobj 2279 0 obj <> endobj 2280 0 obj <> endobj 2281 0 obj <> endobj 2282 0 obj <> endobj 2283 0 obj <> endobj 2284 0 obj <> endobj 2285 0 obj <> endobj 2286 0 obj <> endobj 2287 0 obj <> endobj 2288 0 obj <> endobj 2289 0 obj <> endobj 2290 0 obj <> endobj 2291 0 obj <> endobj 2292 0 obj <> endobj 2293 0 obj <> endobj 2294 0 obj <> endobj 2295 0 obj <> endobj 2296 0 obj <> endobj 2297 0 obj <> endobj 2298 0 obj <> endobj 2299 0 obj <> endobj 2300 0 obj <> endobj 2301 0 obj <> endobj 2302 0 obj <> endobj 2303 0 obj <> endobj 2304 0 obj <> endobj 2305 0 obj <> endobj 2306 0 obj <> endobj 2307 0 obj <> endobj 2308 0 obj <> endobj 2309 0 obj <> endobj 2310 0 obj <> endobj 2311 0 obj <> endobj 2312 0 obj <> endobj 2313 0 obj <> endobj 2314 0 obj <> endobj 2315 0 obj <> endobj 2316 0 obj <> endobj 2317 0 obj <> endobj 2318 0 obj <> endobj 2319 0 obj <> endobj 2320 0 obj <> endobj 2321 0 obj <> endobj 2322 0 obj <> endobj 2323 0 obj <> endobj 2324 0 obj <> endobj 2325 0 obj <> endobj 2326 0 obj <> endobj 2327 0 obj <> endobj 2328 0 obj <> endobj 2329 0 obj <> endobj 2330 0 obj <> endobj 2331 0 obj <> endobj 2332 0 obj <> endobj 2333 0 obj <> endobj 2334 0 obj <> endobj 2335 0 obj <> endobj 2336 0 obj <> endobj 2337 0 obj <> endobj 2338 0 obj <> endobj 2339 0 obj <> endobj 2340 0 obj <> endobj 2341 0 obj <> endobj 2342 0 obj <> endobj 2343 0 obj <> endobj 2344 0 obj <> endobj 2345 0 obj <> endobj 2346 0 obj <> endobj 2347 0 obj <> endobj 2348 0 obj <> endobj 2349 0 obj <> endobj 2350 0 obj <> endobj 2351 0 obj <> endobj 2352 0 obj <> endobj 2353 0 obj <> endobj 2354 0 obj <> endobj 2355 0 obj <> endobj 2356 0 obj <> endobj 2357 0 obj <> endobj 2358 0 obj <> endobj 2359 0 obj <> endobj 2360 0 obj <> endobj 2361 0 obj <> endobj 2362 0 obj <> endobj 2363 0 obj <> endobj 2364 0 obj <> endobj 2365 0 obj <> endobj 2366 0 obj <> endobj 2367 0 obj <> endobj 2368 0 obj <> endobj 2369 0 obj <> endobj 2370 0 obj <> endobj 2371 0 obj <> endobj 2372 0 obj <> endobj 2373 0 obj <> endobj 2374 0 obj <> endobj 2375 0 obj <> endobj 2376 0 obj <> endobj 2377 0 obj <> endobj 2378 0 obj <> endobj 2379 0 obj <> endobj 2380 0 obj <> endobj 2381 0 obj <> endobj 2382 0 obj <> endobj 2383 0 obj <> endobj 2384 0 obj <> endobj 2385 0 obj <> endobj 2386 0 obj <> endobj 2387 0 obj <> endobj 2388 0 obj <> endobj 2389 0 obj <> endobj 2390 0 obj <> endobj 2391 0 obj <> endobj 2392 0 obj <> endobj 2393 0 obj <> endobj 2394 0 obj <> endobj 2395 0 obj <> endobj 2396 0 obj <> endobj 2397 0 obj <> endobj 2398 0 obj <> endobj 2399 0 obj <> endobj 2400 0 obj <> endobj 2401 0 obj <> endobj 2402 0 obj <> endobj 2403 0 obj <> endobj 2404 0 obj <> endobj 2405 0 obj <> endobj 2406 0 obj <> endobj 2407 0 obj <> endobj 2408 0 obj <> endobj 2409 0 obj <> endobj 2410 0 obj <> endobj 2411 0 obj <> endobj 2412 0 obj <> endobj 2413 0 obj <> endobj 2414 0 obj <> endobj 2415 0 obj <> endobj 2416 0 obj <> endobj 2417 0 obj <> endobj 2418 0 obj <> endobj 2419 0 obj <> endobj 2420 0 obj <> endobj 2421 0 obj <> endobj 2422 0 obj <> endobj 2423 0 obj <> endobj 2424 0 obj <> endobj 2425 0 obj <> endobj 2426 0 obj <> endobj 2427 0 obj <> endobj 2428 0 obj <> endobj 2429 0 obj <> endobj 2430 0 obj <> endobj 2431 0 obj <> endobj 2432 0 obj <> endobj 2433 0 obj <> endobj 2434 0 obj <> endobj 2435 0 obj <> endobj 2436 0 obj <> endobj 2437 0 obj <> endobj 2438 0 obj <> endobj 2439 0 obj <> endobj 2440 0 obj <> endobj 2441 0 obj <> endobj 2442 0 obj <> endobj 2443 0 obj <> endobj 2444 0 obj <> endobj 2445 0 obj <> endobj 2446 0 obj <> endobj 2447 0 obj <> endobj 2448 0 obj <> endobj 2449 0 obj <> endobj 2450 0 obj <> endobj 2451 0 obj <> endobj 2452 0 obj <> endobj 2453 0 obj <> endobj 2454 0 obj <> endobj 2455 0 obj <> endobj 2456 0 obj <> endobj 2457 0 obj <> endobj 2458 0 obj <> endobj 2459 0 obj <> endobj 2460 0 obj <> endobj 2461 0 obj <> endobj 2462 0 obj <> endobj 2463 0 obj <> endobj 2464 0 obj <> endobj 2465 0 obj <> endobj 2466 0 obj <> endobj 2467 0 obj <> endobj 2468 0 obj <> endobj 2469 0 obj <> endobj 2470 0 obj <> endobj 2471 0 obj <> endobj 2472 0 obj <> endobj 2473 0 obj <> endobj 2474 0 obj <> endobj 2475 0 obj <> endobj 2476 0 obj <> endobj 2477 0 obj <> endobj 2478 0 obj <> endobj 2479 0 obj <> endobj 2480 0 obj <> endobj 2481 0 obj <> endobj 2482 0 obj <> endobj 2483 0 obj <> endobj 2484 0 obj <> endobj 2485 0 obj <> endobj 2486 0 obj <> endobj 2487 0 obj <> endobj 2488 0 obj <> endobj 2489 0 obj <> endobj 2490 0 obj <> endobj 2491 0 obj <> endobj 2492 0 obj <> endobj 2493 0 obj <> endobj 2494 0 obj <> endobj 2495 0 obj <> endobj 2496 0 obj <> endobj 2497 0 obj <> endobj 2498 0 obj <> endobj 2499 0 obj <> endobj 2500 0 obj <> endobj 2501 0 obj <> endobj 2502 0 obj <> endobj 2503 0 obj <> endobj 2504 0 obj <> endobj 2505 0 obj <> endobj 2506 0 obj <> endobj 2507 0 obj <> endobj 2508 0 obj <> endobj 2509 0 obj <> endobj 2510 0 obj <> endobj 2511 0 obj <> endobj 2512 0 obj <> endobj 2513 0 obj <> endobj 2514 0 obj <> endobj 2515 0 obj <> endobj 2516 0 obj <> endobj 2517 0 obj <> endobj 2518 0 obj <> endobj 2519 0 obj <> endobj 2520 0 obj <> endobj 2521 0 obj <> endobj 2522 0 obj <> endobj 2523 0 obj <> endobj 2524 0 obj <> endobj 2525 0 obj <> endobj 2526 0 obj <> endobj 2527 0 obj <> endobj 2528 0 obj <> endobj 2529 0 obj <> endobj 2530 0 obj <> endobj 2531 0 obj <> endobj 2532 0 obj <> endobj 2533 0 obj <> endobj 2534 0 obj <> endobj 2535 0 obj <> endobj 2536 0 obj <> endobj 2537 0 obj <> endobj 2538 0 obj <> endobj 2539 0 obj <> endobj 2540 0 obj <> endobj 2541 0 obj <> endobj 2542 0 obj <> endobj 2543 0 obj <> endobj 2544 0 obj <> endobj 2545 0 obj <> endobj 2546 0 obj <> endobj 2547 0 obj <> endobj 2548 0 obj <> endobj 2549 0 obj <> endobj 2550 0 obj <> endobj 2551 0 obj <> endobj 2552 0 obj <> endobj 2553 0 obj <> endobj 2554 0 obj <> endobj 2555 0 obj <> endobj 2556 0 obj <> endobj 2557 0 obj <> endobj 2558 0 obj <> endobj 2559 0 obj <> endobj 2560 0 obj <> endobj 2561 0 obj <> endobj 2562 0 obj <> endobj 2563 0 obj <> endobj 2564 0 obj <> endobj 2565 0 obj <> endobj 2566 0 obj <> endobj 2567 0 obj <> endobj 2568 0 obj <> endobj 2569 0 obj <> endobj 2570 0 obj <> endobj 2571 0 obj <> endobj 2572 0 obj <> endobj 2573 0 obj <> endobj 2574 0 obj <> endobj 2575 0 obj <> endobj 2576 0 obj <> endobj 2577 0 obj <> endobj 2578 0 obj <> endobj 2579 0 obj <> endobj 2580 0 obj <> endobj 2581 0 obj <> endobj 2582 0 obj <> endobj 2583 0 obj <> endobj 2584 0 obj <> endobj 2585 0 obj <> endobj 2586 0 obj <> endobj 2587 0 obj <> endobj 2588 0 obj <> endobj 2589 0 obj <> endobj 2590 0 obj <> endobj 2591 0 obj <> endobj 2592 0 obj <> endobj 2593 0 obj <> endobj 2594 0 obj <> endobj 2595 0 obj <> endobj 2596 0 obj <> endobj 2597 0 obj <> endobj 2598 0 obj <> endobj 2599 0 obj <> endobj 2600 0 obj <> endobj 2601 0 obj <> endobj 2602 0 obj <> endobj 2603 0 obj <> endobj 2604 0 obj <> endobj 2605 0 obj <> endobj 2606 0 obj <> endobj 2607 0 obj <> endobj 2608 0 obj <> endobj 2609 0 obj <> endobj 2610 0 obj <> endobj 2611 0 obj <> endobj 2612 0 obj <> endobj 2613 0 obj <> endobj 2614 0 obj <> endobj 2615 0 obj <> endobj 2616 0 obj <> endobj 2617 0 obj <> endobj 2618 0 obj <> endobj 2619 0 obj <> endobj 2620 0 obj <> endobj 2621 0 obj <> endobj 2622 0 obj <> endobj 2623 0 obj <> endobj 2624 0 obj <> endobj 2625 0 obj <> endobj 2626 0 obj <> endobj 2627 0 obj <> endobj 2628 0 obj <> endobj 2629 0 obj <> endobj 2630 0 obj <> endobj 2631 0 obj <> endobj 2632 0 obj <> endobj 2633 0 obj <> endobj 2634 0 obj <> endobj 2635 0 obj <> endobj 2636 0 obj <> endobj 2637 0 obj <> endobj 2638 0 obj <> endobj 2639 0 obj <> endobj 2640 0 obj <> endobj 2641 0 obj <> endobj 2642 0 obj <> endobj 2643 0 obj <> endobj 2644 0 obj <> endobj 2645 0 obj <> endobj 2646 0 obj <> endobj 2647 0 obj <> endobj 2648 0 obj <> endobj 2649 0 obj <> endobj 2650 0 obj <> endobj 2651 0 obj <> endobj 2652 0 obj <> endobj 2653 0 obj <> endobj 2654 0 obj <> endobj 2655 0 obj <> endobj 2656 0 obj <> endobj 2657 0 obj <> endobj 2658 0 obj <> endobj 2659 0 obj <> endobj 2660 0 obj <> endobj 2661 0 obj <> endobj 2662 0 obj <> endobj 2663 0 obj <> endobj 2664 0 obj <> endobj 2665 0 obj <> endobj 2666 0 obj <> endobj 2667 0 obj <> endobj 2668 0 obj <> endobj 2669 0 obj <> endobj 2670 0 obj <> endobj 2671 0 obj <> endobj 2672 0 obj <> endobj 2673 0 obj <> endobj 2674 0 obj <> endobj 2675 0 obj <> endobj 2676 0 obj <> endobj 2677 0 obj <> endobj 2678 0 obj <> endobj 2679 0 obj <> endobj 2680 0 obj <> endobj 2681 0 obj <> endobj 2682 0 obj <> endobj 2683 0 obj <> endobj 2684 0 obj <> endobj 2685 0 obj <> endobj 2686 0 obj <> endobj 2687 0 obj <> endobj 2688 0 obj <> endobj 2689 0 obj <> endobj 2690 0 obj <> endobj 2691 0 obj <> endobj 2692 0 obj <> endobj 2693 0 obj <> endobj 2694 0 obj <> endobj 2695 0 obj <> endobj 2696 0 obj <> endobj 2697 0 obj <> endobj 2698 0 obj <> endobj 2699 0 obj <> endobj 2700 0 obj <> endobj 2701 0 obj <> endobj 2702 0 obj <> endobj 2703 0 obj <> endobj 2704 0 obj <> endobj 2705 0 obj <> endobj 2706 0 obj <> endobj 2707 0 obj <> endobj 2708 0 obj <> endobj 2709 0 obj <> endobj 2710 0 obj <> endobj 2711 0 obj <> endobj 2712 0 obj <> endobj 2713 0 obj <> endobj 2714 0 obj <> endobj 2715 0 obj <> endobj 2716 0 obj <> endobj 2717 0 obj <> endobj 2718 0 obj <> endobj 2719 0 obj <> endobj 2720 0 obj <> endobj 2721 0 obj <> endobj 2722 0 obj <> endobj 2723 0 obj <> endobj 2724 0 obj <> endobj 2725 0 obj <> endobj 2726 0 obj <> endobj 2727 0 obj <> endobj 2728 0 obj <> endobj 2729 0 obj <> endobj 2730 0 obj <> endobj 2731 0 obj <> endobj 2732 0 obj <> endobj 2733 0 obj <> endobj 2734 0 obj <> endobj 2735 0 obj <> endobj 2736 0 obj <> endobj 2737 0 obj <> endobj 2738 0 obj <> endobj 2739 0 obj <> endobj 2740 0 obj <> endobj 2741 0 obj <> endobj 2742 0 obj <> endobj 2743 0 obj <> endobj 2744 0 obj <> endobj 2745 0 obj <> endobj 2746 0 obj <> endobj 2747 0 obj <> endobj 2748 0 obj <> endobj 2749 0 obj <> endobj 2750 0 obj <> endobj 2751 0 obj <> endobj 2752 0 obj <> endobj 2753 0 obj <> endobj 2754 0 obj <> endobj 2755 0 obj <> endobj 2756 0 obj <> endobj 2757 0 obj <> endobj 2758 0 obj <> endobj 2759 0 obj <> endobj 2760 0 obj <> endobj 2761 0 obj <> endobj 2762 0 obj <> endobj 2763 0 obj <> endobj 2764 0 obj <> endobj 2765 0 obj <> endobj 2766 0 obj <> endobj 2767 0 obj <> endobj 2768 0 obj <> endobj 2769 0 obj <> endobj 2770 0 obj <> endobj 2771 0 obj <> endobj 2772 0 obj <> endobj 2773 0 obj <> endobj 2774 0 obj <> endobj 2775 0 obj <> endobj 2776 0 obj <> endobj 2777 0 obj <> endobj 2778 0 obj <> endobj 2779 0 obj <> endobj 2780 0 obj <> endobj 2781 0 obj <> endobj 2782 0 obj <> endobj 2783 0 obj <> endobj 2784 0 obj <> endobj 2785 0 obj <> endobj 2786 0 obj <> endobj 2787 0 obj <> endobj 2788 0 obj <> endobj 2789 0 obj <> endobj 2790 0 obj <> endobj 2791 0 obj <> endobj 2792 0 obj <> endobj 2793 0 obj <> endobj 2794 0 obj <> endobj 2795 0 obj <> endobj 2796 0 obj <> endobj 2797 0 obj <> endobj 2798 0 obj <> endobj 2799 0 obj <> endobj 2800 0 obj <> endobj 2801 0 obj <> endobj 2802 0 obj <> endobj 2803 0 obj <> endobj 2804 0 obj <> endobj 2805 0 obj <> endobj 2806 0 obj <> endobj 2807 0 obj <> endobj 2808 0 obj <> endobj 2809 0 obj <> endobj 2810 0 obj <> endobj 2811 0 obj <> endobj 2812 0 obj <> endobj 2813 0 obj <> endobj 2814 0 obj <> endobj 2815 0 obj <> endobj 2816 0 obj <> endobj 2817 0 obj <> endobj 2818 0 obj <> endobj 2819 0 obj <> endobj 2820 0 obj <> endobj 2821 0 obj <> endobj 2822 0 obj <> endobj 2823 0 obj <> endobj 2824 0 obj <> endobj 2825 0 obj <> endobj 2826 0 obj <> endobj 2827 0 obj <> endobj 2828 0 obj <> endobj 2829 0 obj <> endobj 2830 0 obj <> endobj 2831 0 obj <> endobj 2832 0 obj <> endobj 2833 0 obj <> endobj 2834 0 obj <> endobj 2835 0 obj <> endobj 2836 0 obj <> endobj 2837 0 obj <> endobj 2838 0 obj <> endobj 2839 0 obj <> endobj 2840 0 obj <> endobj 2841 0 obj <> endobj 2842 0 obj <> endobj 2843 0 obj <> endobj 2844 0 obj <> endobj 2845 0 obj <> endobj 2846 0 obj <> endobj 2847 0 obj <> endobj 2848 0 obj <> endobj 2849 0 obj <> endobj 2850 0 obj <> endobj 2851 0 obj <> endobj 2852 0 obj <> endobj 2853 0 obj <> endobj 2854 0 obj <> endobj 2855 0 obj <> endobj 2856 0 obj <> endobj 2857 0 obj <> endobj 2858 0 obj <> endobj 2859 0 obj <> endobj 2860 0 obj <> endobj 2861 0 obj <> endobj 2862 0 obj <> endobj 2863 0 obj <> endobj 2864 0 obj <> endobj 2865 0 obj <> endobj 2866 0 obj <> endobj 2867 0 obj <> endobj 2868 0 obj <> endobj 2869 0 obj <> endobj 2870 0 obj <> endobj 2871 0 obj <> endobj 2872 0 obj <> endobj 2873 0 obj <> endobj 2874 0 obj <> endobj 2875 0 obj <> endobj 2876 0 obj <> endobj 2877 0 obj <> endobj 2878 0 obj <> endobj 2879 0 obj <> endobj 2880 0 obj <> endobj 2881 0 obj <> endobj 2882 0 obj <> endobj 2883 0 obj <> endobj 2884 0 obj <> endobj 2885 0 obj <> endobj 2886 0 obj <> endobj 2887 0 obj <> endobj 2888 0 obj <> endobj 2889 0 obj <> endobj 2890 0 obj <> endobj 2891 0 obj <> endobj 2892 0 obj <> endobj 2893 0 obj <> endobj 2894 0 obj <> endobj 2895 0 obj <> endobj 2896 0 obj <> endobj 2897 0 obj <> endobj 2898 0 obj <> endobj 2899 0 obj <> endobj 2900 0 obj <> endobj 2901 0 obj <> endobj 2902 0 obj <> endobj 2903 0 obj <> endobj 2904 0 obj <> endobj 2905 0 obj <> endobj 2906 0 obj <> endobj 2907 0 obj <> endobj 2908 0 obj <> endobj 2909 0 obj <> endobj 2910 0 obj <> endobj 2911 0 obj <> endobj 2912 0 obj <> endobj 2913 0 obj <> endobj 2914 0 obj <> endobj 2915 0 obj <> endobj 2916 0 obj <> endobj 2917 0 obj <> endobj 2918 0 obj <> endobj 2919 0 obj <> endobj 2920 0 obj <> endobj 2921 0 obj <> endobj 2922 0 obj <> endobj 2923 0 obj <> endobj 2924 0 obj <> endobj 2925 0 obj <> endobj 2926 0 obj <> endobj 2927 0 obj <> endobj 2928 0 obj <> endobj 2929 0 obj <> endobj 2930 0 obj <> endobj 2931 0 obj <> endobj 2932 0 obj <> endobj 2933 0 obj <> endobj 2934 0 obj <> endobj 2935 0 obj <> endobj 2936 0 obj <> endobj 2937 0 obj <> endobj 2938 0 obj <> endobj 2939 0 obj <> endobj 2940 0 obj <> endobj 2941 0 obj <> endobj 2942 0 obj <> endobj 2943 0 obj <> endobj 2944 0 obj <> endobj 2945 0 obj <> endobj 2946 0 obj <> endobj 2947 0 obj <> endobj 2948 0 obj <> endobj 2949 0 obj <> endobj 2950 0 obj <> endobj 2951 0 obj <> endobj 2952 0 obj <> endobj 2953 0 obj <> endobj 2954 0 obj <> endobj 2955 0 obj <> endobj 2956 0 obj <> endobj 2957 0 obj <> endobj 2958 0 obj <> endobj 2959 0 obj <> endobj 2960 0 obj <> endobj 2961 0 obj <> endobj 2962 0 obj <> endobj 2963 0 obj <> endobj 2964 0 obj <> endobj 2965 0 obj <> endobj 2966 0 obj <> endobj 2967 0 obj <> endobj 2968 0 obj <> endobj 2969 0 obj <> endobj 2970 0 obj <> endobj 2971 0 obj <> endobj 2972 0 obj <> endobj 2973 0 obj <> endobj 2974 0 obj <> endobj 2975 0 obj <> endobj 2976 0 obj <> endobj 2977 0 obj <> endobj 2978 0 obj <> endobj 2979 0 obj <> endobj 2980 0 obj <> endobj 2981 0 obj <> endobj 2982 0 obj <> endobj 2983 0 obj <> endobj 2984 0 obj <> endobj 2985 0 obj <> endobj 2986 0 obj <> endobj 2987 0 obj <> endobj 2988 0 obj <> endobj 2989 0 obj <> endobj 2990 0 obj <> endobj 2991 0 obj <> endobj 2992 0 obj <> endobj 2993 0 obj <> endobj 2994 0 obj <> endobj 2995 0 obj <> endobj 2996 0 obj <> endobj 2997 0 obj <> endobj 2998 0 obj <> endobj 2999 0 obj <> endobj 3000 0 obj <> endobj 3001 0 obj <> endobj 3002 0 obj <> endobj 3003 0 obj <> endobj 3004 0 obj <> endobj 3005 0 obj <> endobj 3006 0 obj <> endobj 3007 0 obj <> endobj 3008 0 obj <> endobj 3009 0 obj <> endobj 3010 0 obj <> endobj 3011 0 obj <> endobj 3012 0 obj <> endobj 3013 0 obj <> endobj 3014 0 obj <> endobj 3015 0 obj <> endobj 3016 0 obj <> endobj 3017 0 obj <> endobj 3018 0 obj <> endobj 3019 0 obj <> endobj 3020 0 obj <> endobj 3021 0 obj <> endobj 3022 0 obj <> endobj 3023 0 obj <> endobj 3024 0 obj <> endobj 3025 0 obj <> endobj 3026 0 obj <> endobj 3027 0 obj <> endobj 3028 0 obj <> endobj 3029 0 obj <> endobj 3030 0 obj <> endobj 3031 0 obj <> endobj 3032 0 obj <> endobj 3033 0 obj <> endobj 3034 0 obj <> endobj 3035 0 obj <> endobj 3036 0 obj <> endobj 3037 0 obj <> endobj 3038 0 obj <> endobj 3039 0 obj <> endobj 3040 0 obj <> endobj 3041 0 obj <> endobj 3042 0 obj <> endobj 3043 0 obj <> endobj 3044 0 obj <> endobj 3045 0 obj <> endobj 3046 0 obj <> endobj 3047 0 obj <> endobj 3048 0 obj <> endobj 3049 0 obj <> endobj 3050 0 obj <> endobj 3051 0 obj <> endobj 3052 0 obj <> endobj 3053 0 obj <> endobj 3054 0 obj <> endobj 3055 0 obj <> endobj 3056 0 obj <> endobj 3057 0 obj <> endobj 3058 0 obj <> endobj 3059 0 obj <> endobj 3060 0 obj <> endobj 3061 0 obj <> endobj 3062 0 obj <> endobj 3063 0 obj <> endobj 3064 0 obj <> endobj 3065 0 obj <> endobj 3066 0 obj <> endobj 3067 0 obj <> endobj 3068 0 obj <> endobj 3069 0 obj <> endobj 3070 0 obj <> endobj 3071 0 obj <> endobj 3072 0 obj <> endobj 3073 0 obj <> endobj 3074 0 obj <> endobj 3075 0 obj <> endobj 3076 0 obj <> endobj 3077 0 obj <> endobj 3078 0 obj <> endobj 3079 0 obj <> endobj 3080 0 obj <> endobj 3081 0 obj <> endobj 3082 0 obj <> endobj 3083 0 obj <> endobj 3084 0 obj <> endobj 3085 0 obj <> endobj 3086 0 obj <> endobj 3087 0 obj <> endobj 3088 0 obj <> endobj 3089 0 obj <> endobj 3090 0 obj <> endobj 3091 0 obj <> endobj 3092 0 obj <> endobj 3093 0 obj <> endobj 3094 0 obj <> endobj 3095 0 obj <> endobj 3096 0 obj <> endobj 3097 0 obj <> endobj 3098 0 obj <> endobj 3099 0 obj <> endobj 3100 0 obj <> endobj 3101 0 obj <> endobj 3102 0 obj <> endobj 3103 0 obj <> endobj 3104 0 obj <> endobj 3105 0 obj <> endobj 3106 0 obj <> endobj 3107 0 obj <> endobj 3108 0 obj <> endobj 3109 0 obj <> endobj 3110 0 obj <> endobj 3111 0 obj <> endobj 3112 0 obj <> endobj 3113 0 obj <> endobj 3114 0 obj <> endobj 3115 0 obj <> endobj 3116 0 obj <> endobj 3117 0 obj <> endobj 3118 0 obj <> endobj 3119 0 obj <> endobj 3120 0 obj <> endobj 3121 0 obj <> endobj 3122 0 obj <> endobj 3123 0 obj <> endobj 3124 0 obj <> endobj 3125 0 obj <> endobj 3126 0 obj <> endobj 3127 0 obj <> endobj 3128 0 obj <> endobj 3129 0 obj <> endobj 3130 0 obj <> endobj 3131 0 obj <> endobj 3132 0 obj <> endobj 3133 0 obj <> endobj 3134 0 obj <> endobj 3135 0 obj <> endobj 3136 0 obj <> endobj 3137 0 obj <> endobj 3138 0 obj <> endobj 3139 0 obj <> endobj 3140 0 obj <> endobj 3141 0 obj <> endobj 3142 0 obj <> endobj 3143 0 obj <> endobj 3144 0 obj <> endobj 3145 0 obj <> endobj 3146 0 obj <> endobj 3147 0 obj <> endobj 3148 0 obj <> endobj 3149 0 obj <> endobj 3150 0 obj <> endobj 3151 0 obj <> endobj 3152 0 obj <> endobj 3153 0 obj <> endobj 3154 0 obj <> endobj 3155 0 obj <> endobj 3156 0 obj <> endobj 3157 0 obj <> endobj 3158 0 obj <> endobj 3159 0 obj <> endobj 3160 0 obj <> endobj 3161 0 obj <> endobj 3162 0 obj <> endobj 3163 0 obj <> endobj 3164 0 obj <> endobj 3165 0 obj <> endobj 3166 0 obj <> endobj 3167 0 obj <> endobj 3168 0 obj <> endobj 3169 0 obj <> endobj 3170 0 obj <> endobj 3171 0 obj <> endobj 3172 0 obj <> endobj 3173 0 obj <> endobj 3174 0 obj <> endobj 3175 0 obj <> endobj 3176 0 obj <> endobj 3177 0 obj <> endobj 3178 0 obj <> endobj 3179 0 obj <> endobj 3180 0 obj <> endobj 3181 0 obj <> endobj 3182 0 obj <> endobj 3183 0 obj <> endobj 3184 0 obj <> endobj 3185 0 obj <> endobj 3186 0 obj <> endobj 3187 0 obj <> endobj 3188 0 obj <> endobj 3189 0 obj <> endobj 3190 0 obj <> endobj 3191 0 obj <> endobj 3192 0 obj <> endobj 3193 0 obj <> endobj 3194 0 obj <> endobj 3195 0 obj <> endobj 3196 0 obj <> endobj 3197 0 obj <> endobj 3198 0 obj <> endobj 3199 0 obj <> endobj 3200 0 obj <> endobj 3201 0 obj <> endobj 3202 0 obj <> endobj 3203 0 obj <> endobj 3204 0 obj <> endobj 3205 0 obj <> endobj 3206 0 obj <> endobj 3207 0 obj <> endobj 3208 0 obj <> endobj 3209 0 obj <> endobj 3210 0 obj <> endobj 3211 0 obj <> endobj 3212 0 obj <> endobj 3213 0 obj <> endobj 3214 0 obj <> endobj 3215 0 obj <> endobj 3216 0 obj <> endobj 3217 0 obj <> endobj 3218 0 obj <> endobj 3219 0 obj <> endobj 3220 0 obj <> endobj 3221 0 obj <> endobj 3222 0 obj <> endobj 3223 0 obj <> endobj 3224 0 obj <> endobj 3225 0 obj <> endobj 3226 0 obj <> endobj 3227 0 obj <> endobj 3228 0 obj <> endobj 3229 0 obj <> endobj 3230 0 obj <> endobj 3231 0 obj <> endobj 3232 0 obj <> endobj 3233 0 obj <> endobj 3234 0 obj <> endobj 3235 0 obj <> endobj 3236 0 obj <> endobj 3237 0 obj <> endobj 3238 0 obj <> endobj 3239 0 obj <> endobj 3240 0 obj <> endobj 3241 0 obj <> endobj 3242 0 obj <> endobj 3243 0 obj <> endobj 3244 0 obj <> endobj 3245 0 obj <> endobj 3246 0 obj <> endobj 3247 0 obj <> endobj 3248 0 obj <> endobj 3249 0 obj <> endobj 3250 0 obj <> endobj 3251 0 obj <> endobj 3252 0 obj <> endobj 3253 0 obj <> endobj 3254 0 obj <> endobj 3255 0 obj <> endobj 3256 0 obj <> endobj 3257 0 obj <> endobj 3258 0 obj <> endobj 3259 0 obj <> endobj 3260 0 obj <> endobj 3261 0 obj <> endobj 3262 0 obj <> endobj 3263 0 obj <> endobj 3264 0 obj <> endobj 3265 0 obj <> endobj 3266 0 obj <> endobj 3267 0 obj <> endobj 3268 0 obj <> endobj 3269 0 obj <> endobj 3270 0 obj <> endobj 3271 0 obj <> endobj 3272 0 obj <> endobj 3273 0 obj <> endobj 3274 0 obj <> endobj 3275 0 obj <> endobj 3276 0 obj <> endobj 3277 0 obj <> endobj 3278 0 obj <> endobj 3279 0 obj <> endobj 3280 0 obj <> endobj 3281 0 obj <> endobj 3282 0 obj <> endobj 3283 0 obj <> endobj 3284 0 obj <> endobj 3285 0 obj <> endobj 3286 0 obj <> endobj 3287 0 obj <> endobj 3288 0 obj <> endobj 3289 0 obj <> endobj 3290 0 obj <> endobj 3291 0 obj <> endobj 3292 0 obj <> endobj 3293 0 obj <> endobj 3294 0 obj <> endobj 3295 0 obj <> endobj 3296 0 obj <> endobj 3297 0 obj <> endobj 3298 0 obj <> endobj 3299 0 obj <> endobj 3300 0 obj <> endobj 3301 0 obj <> endobj 3302 0 obj <> endobj 3303 0 obj <> endobj 3304 0 obj <> endobj 3305 0 obj <> endobj 3306 0 obj <> endobj 3307 0 obj <> endobj 3308 0 obj <> endobj 3309 0 obj <> endobj 3310 0 obj <> endobj 3311 0 obj <> endobj 3312 0 obj <> endobj 3313 0 obj <> endobj 3314 0 obj <> endobj 3315 0 obj <> endobj 3316 0 obj <> endobj 3317 0 obj <> endobj 3318 0 obj <> endobj 3319 0 obj <> endobj 3320 0 obj <> endobj 3321 0 obj <> endobj 3322 0 obj <> endobj 3323 0 obj <> endobj 3324 0 obj <> endobj 3325 0 obj <> endobj 3326 0 obj <> endobj 3327 0 obj <> endobj 3328 0 obj <> endobj 3329 0 obj <> endobj 3330 0 obj <> endobj 3331 0 obj <> endobj 3332 0 obj <> endobj 3333 0 obj <> endobj 3334 0 obj <> endobj 3335 0 obj <> endobj 3336 0 obj <> endobj 3337 0 obj <> endobj 3338 0 obj <> endobj 3339 0 obj <> endobj 3340 0 obj <> endobj 3341 0 obj <> endobj 3342 0 obj <> endobj 3343 0 obj <> endobj 3344 0 obj <> endobj 3345 0 obj <> endobj 3346 0 obj <> endobj 3347 0 obj <> endobj 3348 0 obj <> endobj 3349 0 obj <> endobj 3350 0 obj <> endobj 3351 0 obj <> endobj 3352 0 obj <> endobj 3353 0 obj <> endobj 3354 0 obj <> endobj 3355 0 obj <> endobj 3356 0 obj <> endobj 3357 0 obj <> endobj 3358 0 obj <> endobj 3359 0 obj <> endobj 3360 0 obj <> endobj 3361 0 obj <> endobj 3362 0 obj <> endobj 3363 0 obj <> endobj 3364 0 obj <> endobj 3365 0 obj <> endobj 3366 0 obj <> endobj 3367 0 obj <> endobj 3368 0 obj <> endobj 3369 0 obj <> endobj 3370 0 obj <> endobj 3371 0 obj <> endobj 3372 0 obj <> endobj 3373 0 obj <> endobj 3374 0 obj <> endobj 3375 0 obj <> endobj 3376 0 obj <> endobj 3377 0 obj <> endobj 3378 0 obj <> endobj 3379 0 obj <> endobj 3380 0 obj <> endobj 3381 0 obj <> endobj 3382 0 obj <> endobj 3383 0 obj <> endobj 3384 0 obj <> endobj 3385 0 obj <> endobj 3386 0 obj <> endobj 3387 0 obj <> endobj 3388 0 obj <> endobj 3389 0 obj <> endobj 3390 0 obj <> endobj 3391 0 obj <> endobj 3392 0 obj <> endobj 3393 0 obj <> endobj 3394 0 obj <> endobj 3395 0 obj <> endobj 3396 0 obj <> endobj 3397 0 obj <> endobj 3398 0 obj <> endobj 3399 0 obj <> endobj 3400 0 obj <> endobj 3401 0 obj <> endobj 3402 0 obj <> endobj 3403 0 obj <> endobj 3404 0 obj <> endobj 3405 0 obj <> endobj 3406 0 obj <> endobj 3407 0 obj <> endobj 3408 0 obj <> endobj 3409 0 obj <> endobj 3410 0 obj <> endobj 3411 0 obj <> endobj 3412 0 obj <> endobj 3413 0 obj <> endobj 3414 0 obj <> endobj 3415 0 obj <> endobj 3416 0 obj <> endobj 3417 0 obj <> endobj 3418 0 obj <> endobj 3419 0 obj <> endobj 3420 0 obj <> endobj 3421 0 obj <> endobj 3422 0 obj <> endobj 3423 0 obj <> endobj 3424 0 obj <> endobj 3425 0 obj <> endobj 3426 0 obj <> endobj 3427 0 obj <> endobj 3428 0 obj <> endobj 3429 0 obj <> endobj 3430 0 obj <> endobj 3431 0 obj <> endobj 3432 0 obj <> endobj 3433 0 obj <> endobj 3434 0 obj <> endobj 3435 0 obj <> endobj 3436 0 obj <> endobj 3437 0 obj <> endobj 3438 0 obj <> endobj 3439 0 obj <> endobj 3440 0 obj <> endobj 3441 0 obj <> endobj 3442 0 obj <> endobj 3443 0 obj <> endobj 3444 0 obj <> endobj 3445 0 obj <> endobj 3446 0 obj <> endobj 3447 0 obj <> endobj 3448 0 obj <> endobj 3449 0 obj <> endobj 3450 0 obj <> endobj 3451 0 obj <> endobj 3452 0 obj <> endobj 3453 0 obj <> endobj 3454 0 obj <> endobj 3455 0 obj <> endobj 3456 0 obj <> endobj 3457 0 obj <> endobj 3458 0 obj <> endobj 3459 0 obj <> endobj 3460 0 obj <> endobj 3461 0 obj <> endobj 3462 0 obj <> endobj 3463 0 obj <> endobj 3464 0 obj <> endobj 3465 0 obj <> endobj 3466 0 obj <> endobj 3467 0 obj <> endobj 3468 0 obj <> endobj 3469 0 obj <> endobj 3470 0 obj <> endobj 3471 0 obj <> endobj 3472 0 obj <> endobj 3473 0 obj <> endobj 3474 0 obj <> endobj 3475 0 obj <> endobj 3476 0 obj <> endobj 3477 0 obj <> endobj 3478 0 obj <> endobj 3479 0 obj <> endobj 3480 0 obj <> endobj 3481 0 obj <> endobj 3482 0 obj <> endobj 3483 0 obj <> endobj 3484 0 obj <> endobj 3485 0 obj <> endobj 3486 0 obj <> endobj 3487 0 obj <> endobj 3488 0 obj <> endobj 3489 0 obj <> endobj 3490 0 obj <> endobj 3491 0 obj <> endobj 3492 0 obj <> endobj 3493 0 obj <> endobj 3494 0 obj <> endobj 3495 0 obj <> endobj 3496 0 obj <> endobj 3497 0 obj <> endobj 3498 0 obj <> endobj 3499 0 obj <> endobj 3500 0 obj <> endobj 3501 0 obj <> endobj 3502 0 obj <> endobj 3503 0 obj <> endobj 3504 0 obj <> endobj 3505 0 obj <> endobj 3506 0 obj <> endobj 3507 0 obj <> endobj 3508 0 obj <> endobj 3509 0 obj <> endobj 3510 0 obj <> endobj 3511 0 obj <> endobj 3512 0 obj <> endobj 3513 0 obj <> endobj 3514 0 obj <> endobj 3515 0 obj <> endobj 3516 0 obj <> endobj 3517 0 obj <> endobj 3518 0 obj <> endobj 3519 0 obj <> endobj 3520 0 obj <> endobj 3521 0 obj <> endobj 3522 0 obj <> endobj 3523 0 obj <> endobj 3524 0 obj <> endobj 3525 0 obj <> endobj 3526 0 obj <> endobj 3527 0 obj <> endobj 3528 0 obj <> endobj 3529 0 obj <> endobj 3530 0 obj <> endobj 3531 0 obj <> endobj 3532 0 obj <> endobj 3533 0 obj <> endobj 3534 0 obj <> endobj 3535 0 obj <> endobj 3536 0 obj <> endobj 3537 0 obj <> endobj 3538 0 obj <> endobj 3539 0 obj <> endobj 3540 0 obj <> endobj 3541 0 obj <> endobj 3542 0 obj <> endobj 3543 0 obj <> endobj 3544 0 obj <> endobj 3545 0 obj <> endobj 3546 0 obj <> endobj 3547 0 obj <> endobj 3548 0 obj <> endobj 3549 0 obj <> endobj 3550 0 obj <> endobj 3551 0 obj <> endobj 3552 0 obj <> endobj 3553 0 obj <> endobj 3554 0 obj <> endobj 3555 0 obj <> endobj 3556 0 obj <> endobj 3557 0 obj <> endobj 3558 0 obj <> endobj 3559 0 obj <> endobj 3560 0 obj <> endobj 3561 0 obj <> endobj 3562 0 obj <> endobj 3563 0 obj <> endobj 3564 0 obj <> endobj 3565 0 obj <> endobj 3566 0 obj <> endobj 3567 0 obj <> endobj 3568 0 obj <> endobj 3569 0 obj <> endobj 3570 0 obj <> endobj 3571 0 obj <> endobj 3572 0 obj <> endobj 3573 0 obj <> endobj 3574 0 obj <> endobj 3575 0 obj <> endobj 3576 0 obj <> endobj 3577 0 obj <> endobj 3578 0 obj <> endobj 3579 0 obj <> endobj 3580 0 obj <> endobj 3581 0 obj <> endobj 3582 0 obj <> endobj 3583 0 obj <> endobj 3584 0 obj <> endobj 3585 0 obj <> endobj 3586 0 obj <> endobj 3587 0 obj <> endobj 3588 0 obj <> endobj 3589 0 obj <> endobj 3590 0 obj <> endobj 3591 0 obj <> endobj 3592 0 obj <> endobj 3593 0 obj <> endobj 3594 0 obj <> endobj 3595 0 obj <> endobj 3596 0 obj <> endobj 3597 0 obj <> endobj 3598 0 obj <> endobj 3599 0 obj <> endobj 3600 0 obj <> endobj 3601 0 obj <> endobj 3602 0 obj <> endobj 3603 0 obj <> endobj 3604 0 obj <> endobj 3605 0 obj <> endobj 3606 0 obj <> endobj 3607 0 obj <> endobj 3608 0 obj <> endobj 3609 0 obj <> endobj 3610 0 obj <> endobj 3611 0 obj <> endobj 3612 0 obj <> endobj 3613 0 obj <> endobj 3614 0 obj <> endobj 3615 0 obj <> endobj 3616 0 obj <> endobj 3617 0 obj <> endobj 3618 0 obj <> endobj 3619 0 obj <> endobj 3620 0 obj <> endobj 3621 0 obj <> endobj 3622 0 obj <> endobj 3623 0 obj <> endobj 3624 0 obj <> endobj 3625 0 obj <> endobj 3626 0 obj <> endobj 3627 0 obj <> endobj 3628 0 obj <> endobj 3629 0 obj <> endobj 3630 0 obj <> endobj 3631 0 obj <> endobj 3632 0 obj <> endobj 3633 0 obj <> endobj 3634 0 obj <> endobj 3635 0 obj <> endobj 3636 0 obj <> endobj 3637 0 obj <> endobj 3638 0 obj <> endobj 3639 0 obj <> endobj 3640 0 obj <> endobj 3641 0 obj <> endobj 3642 0 obj <> endobj 3643 0 obj <> endobj 3644 0 obj <> endobj 3645 0 obj <> endobj 3646 0 obj <> endobj 3647 0 obj <> endobj 3648 0 obj <> endobj 3649 0 obj <> endobj 3650 0 obj <> endobj 3651 0 obj <> endobj 3652 0 obj <> endobj 3653 0 obj <> endobj 3654 0 obj <> endobj 3655 0 obj <> endobj 3656 0 obj <> endobj 3657 0 obj <> endobj 3658 0 obj <> endobj 3659 0 obj <> endobj 3660 0 obj <> endobj 3661 0 obj <> endobj 3662 0 obj <> endobj 3663 0 obj <> endobj 3664 0 obj <> endobj 3665 0 obj <> endobj 3666 0 obj <> endobj 3667 0 obj <> endobj 3668 0 obj <> endobj 3669 0 obj <> endobj 3670 0 obj <> endobj 3671 0 obj <> endobj 3672 0 obj <> endobj 3673 0 obj <> endobj 3674 0 obj <> endobj 3675 0 obj <> endobj 3676 0 obj <> endobj 3677 0 obj <> endobj 3678 0 obj <> endobj 3679 0 obj <> endobj 3680 0 obj <> endobj 3681 0 obj <> endobj 3682 0 obj <> endobj 3683 0 obj <> endobj 3684 0 obj <> endobj 3685 0 obj <> endobj 3686 0 obj <> endobj 3687 0 obj <> endobj 3688 0 obj <> endobj 3689 0 obj <> endobj 3690 0 obj <> endobj 3691 0 obj <> endobj 3692 0 obj <> endobj 3693 0 obj <> endobj 3694 0 obj <> endobj 3695 0 obj <> endobj 3696 0 obj <> endobj 3697 0 obj <> endobj 3698 0 obj <> endobj 3699 0 obj <> endobj 3700 0 obj <> endobj 3701 0 obj <> endobj 3702 0 obj <> endobj 3703 0 obj <> endobj 3704 0 obj <> endobj 3705 0 obj <> endobj 3706 0 obj <> endobj 3707 0 obj <> endobj 3708 0 obj <> endobj 3709 0 obj <> endobj 3710 0 obj <> endobj 3711 0 obj <> endobj 3712 0 obj <> endobj 3713 0 obj <> endobj 3714 0 obj <> endobj 3715 0 obj <> endobj 3716 0 obj <> endobj 3717 0 obj <> endobj 3718 0 obj <> endobj 3719 0 obj <> endobj 3720 0 obj <> endobj 3721 0 obj <> endobj 3722 0 obj <> endobj 3723 0 obj <> endobj 3724 0 obj <> endobj 3725 0 obj <> endobj 3726 0 obj <> endobj 3727 0 obj <> endobj 3728 0 obj <> endobj 3729 0 obj <> endobj 3730 0 obj <> endobj 3731 0 obj <> endobj 3732 0 obj <> endobj 3733 0 obj <> endobj 3734 0 obj <> endobj 3735 0 obj <> endobj 3736 0 obj <> endobj 3737 0 obj <> endobj 3738 0 obj <> endobj 3739 0 obj <> endobj 3740 0 obj <> endobj 3741 0 obj <> endobj 3742 0 obj <> endobj 3743 0 obj <> endobj 3744 0 obj <> endobj 3745 0 obj <> endobj 3746 0 obj <> endobj 3747 0 obj <> endobj 3748 0 obj <> endobj 3749 0 obj <> endobj 3750 0 obj <> endobj 3751 0 obj <> endobj 3752 0 obj <> endobj 3753 0 obj <> endobj 3754 0 obj <> endobj 3755 0 obj <> endobj 3756 0 obj <> endobj 3757 0 obj <> endobj 3758 0 obj <> endobj 3759 0 obj <> endobj 3760 0 obj <> endobj 3761 0 obj <> endobj 3762 0 obj <> endobj 3763 0 obj <> endobj 3764 0 obj <> endobj 3765 0 obj <> endobj 3766 0 obj <> endobj 3767 0 obj <> endobj 3768 0 obj <> endobj 3769 0 obj <> endobj 3770 0 obj <> endobj 3771 0 obj <> endobj 3772 0 obj <> endobj 3773 0 obj <> endobj 3774 0 obj <> endobj 3775 0 obj <> endobj 3776 0 obj <> endobj 3777 0 obj <> endobj 3778 0 obj <> endobj 3779 0 obj <> endobj 3780 0 obj <> endobj 3781 0 obj <> endobj 3782 0 obj <> endobj 3783 0 obj <> endobj 3784 0 obj <> endobj 3785 0 obj <> endobj 3786 0 obj <> endobj 3787 0 obj <> endobj 3788 0 obj <> endobj 3789 0 obj <> endobj 3790 0 obj <> endobj 3791 0 obj <> endobj 3792 0 obj <> endobj 3793 0 obj <> endobj 3794 0 obj <> endobj 3795 0 obj <> endobj 3796 0 obj <> endobj 3797 0 obj <> endobj 3798 0 obj <> endobj 3799 0 obj <> endobj 3800 0 obj <> endobj 3801 0 obj <> endobj 3802 0 obj <> endobj 3803 0 obj <> endobj 3804 0 obj <> endobj 3805 0 obj <> endobj 3806 0 obj <> endobj 3807 0 obj <> endobj 3808 0 obj <> endobj 3809 0 obj <> endobj 3810 0 obj <> endobj 3811 0 obj <> endobj 3812 0 obj <> endobj 3813 0 obj <> endobj 3814 0 obj <> endobj 3815 0 obj <> endobj 3816 0 obj <> endobj 3817 0 obj <> endobj 3818 0 obj <> endobj 3819 0 obj <> endobj 3820 0 obj <> endobj 3821 0 obj <> endobj 3822 0 obj <> endobj 3823 0 obj <> endobj 3824 0 obj <> endobj 3825 0 obj <> endobj 3826 0 obj <> endobj 3827 0 obj <> endobj 3828 0 obj <> endobj 3829 0 obj <> endobj 3830 0 obj <> endobj 3831 0 obj <> endobj 3832 0 obj <> endobj 3833 0 obj <> endobj 3834 0 obj <> endobj 3835 0 obj <> endobj 3836 0 obj <> endobj 3837 0 obj <> endobj 3838 0 obj <> endobj 3839 0 obj <> endobj 3840 0 obj <> endobj 3841 0 obj <> endobj 3842 0 obj <> endobj 3843 0 obj <> endobj 3844 0 obj <> endobj 3845 0 obj <> endobj 3846 0 obj <> endobj 3847 0 obj <> endobj 3848 0 obj <> endobj 3849 0 obj <> endobj 3850 0 obj <> endobj 3851 0 obj <> endobj 3852 0 obj <> endobj 3853 0 obj <> endobj 3854 0 obj <> endobj 3855 0 obj <> endobj 3856 0 obj <> endobj 3857 0 obj <> endobj 3858 0 obj <> endobj 3859 0 obj <> endobj 3860 0 obj <> endobj 3861 0 obj <> endobj 3862 0 obj <> endobj 3863 0 obj <> endobj 3864 0 obj <> endobj 3865 0 obj <> endobj 3866 0 obj <> endobj 3867 0 obj <> endobj 3868 0 obj <> endobj 3869 0 obj <> endobj 3870 0 obj <> endobj 3871 0 obj <> endobj 3872 0 obj <> endobj 3873 0 obj <> endobj 3874 0 obj <> endobj 3875 0 obj <> endobj 3876 0 obj <> endobj 3877 0 obj <> endobj 3878 0 obj <> endobj 3879 0 obj <> endobj 3880 0 obj <> endobj 3881 0 obj <> endobj 3882 0 obj <> endobj 3883 0 obj <> endobj 3884 0 obj <> endobj 3885 0 obj <> endobj 3886 0 obj <> endobj 3887 0 obj <> endobj 3888 0 obj <> endobj 3889 0 obj <> endobj 3890 0 obj <> endobj 3891 0 obj <> endobj 3892 0 obj <> endobj 3893 0 obj <> endobj 3894 0 obj <> endobj 3895 0 obj <> endobj 3896 0 obj <> endobj 3897 0 obj <> endobj 3898 0 obj <> endobj 3899 0 obj <> endobj 3900 0 obj <> endobj 3901 0 obj <> endobj 3902 0 obj <> endobj 3903 0 obj <> endobj 3904 0 obj <> endobj 3905 0 obj <> endobj 3906 0 obj <> endobj 3907 0 obj <> endobj 3908 0 obj <> endobj 3909 0 obj <> endobj 3910 0 obj <> endobj 3911 0 obj <> endobj 3912 0 obj <> endobj 3913 0 obj <> endobj 3914 0 obj <> endobj 3915 0 obj <> endobj 3916 0 obj <> endobj 3917 0 obj <> endobj 3918 0 obj <> endobj 3919 0 obj <> endobj 3920 0 obj <> endobj 3921 0 obj <> endobj 3922 0 obj <> endobj 3923 0 obj <> endobj 3924 0 obj <> endobj 3925 0 obj <> endobj 3926 0 obj <> endobj 3927 0 obj <> endobj 3928 0 obj <> endobj 3929 0 obj <> endobj 3930 0 obj <> endobj 3931 0 obj <> endobj 3932 0 obj <> endobj 3933 0 obj <> endobj 3934 0 obj <> endobj 3935 0 obj <> endobj 3936 0 obj <> endobj 3937 0 obj <> endobj 3938 0 obj <> endobj 3939 0 obj <> endobj 3940 0 obj <> endobj 3941 0 obj <> endobj 3942 0 obj <> endobj 3943 0 obj <> endobj 3944 0 obj <> endobj 3945 0 obj <> endobj 3946 0 obj <> endobj 3947 0 obj <> endobj 3948 0 obj <> endobj 3949 0 obj <> endobj 3950 0 obj <> endobj 3951 0 obj <> endobj 3952 0 obj <> endobj 3953 0 obj <> endobj 3954 0 obj <> endobj 3955 0 obj <> endobj 3956 0 obj <> endobj 3957 0 obj <> endobj 3958 0 obj <> endobj 3959 0 obj <> endobj 3960 0 obj <> endobj 3961 0 obj <> endobj 3962 0 obj <> endobj 3963 0 obj <> endobj 3964 0 obj <> endobj 3965 0 obj <> endobj 3966 0 obj <> endobj 3967 0 obj <> endobj 3968 0 obj <> endobj 3969 0 obj <> endobj 3970 0 obj <> endobj 3971 0 obj <> endobj 3972 0 obj <> endobj 3973 0 obj <> endobj 3974 0 obj <> endobj 3975 0 obj <> endobj 3976 0 obj <> endobj 3977 0 obj <> endobj 3978 0 obj <> endobj 3979 0 obj <> endobj 3980 0 obj <> endobj 3981 0 obj <> endobj 3982 0 obj <> endobj 3983 0 obj <> endobj 3984 0 obj <> endobj 3985 0 obj <> endobj 3986 0 obj <> endobj 3987 0 obj <> endobj 3988 0 obj <> endobj 3989 0 obj <> endobj 3990 0 obj <> endobj 3991 0 obj <> endobj 3992 0 obj <> endobj 3993 0 obj <> endobj 3994 0 obj <> endobj 3995 0 obj <> endobj 3996 0 obj <> endobj 3997 0 obj <> endobj 3998 0 obj <> endobj 3999 0 obj <> endobj 4000 0 obj <> endobj 4001 0 obj <> endobj 4002 0 obj <> endobj 4003 0 obj <> endobj 4004 0 obj <> endobj 4005 0 obj <> endobj 4006 0 obj <> endobj 4007 0 obj <> endobj 4008 0 obj <> endobj 4009 0 obj <> endobj 4010 0 obj <> endobj 4011 0 obj <> endobj 4012 0 obj <> endobj 4013 0 obj <> endobj 4014 0 obj <> endobj 4015 0 obj <> endobj 4016 0 obj <> endobj 4017 0 obj <> endobj 4018 0 obj <> endobj 4019 0 obj <> endobj 4020 0 obj <> endobj 4021 0 obj <> endobj 4022 0 obj <> endobj 4023 0 obj <> endobj 4024 0 obj <> endobj 4025 0 obj <> endobj 4026 0 obj <> endobj 4027 0 obj <> endobj 4028 0 obj <> endobj 4029 0 obj <> endobj 4030 0 obj <> endobj 4031 0 obj <> endobj 4032 0 obj <> endobj 4033 0 obj <> endobj 4034 0 obj <> endobj 4035 0 obj <> endobj 4036 0 obj <> endobj 4037 0 obj <> endobj 4038 0 obj <> endobj 4039 0 obj <> endobj 4040 0 obj <> endobj 4041 0 obj <> endobj 4042 0 obj <> endobj 4043 0 obj <> endobj 4044 0 obj <> endobj 4045 0 obj <> endobj 4046 0 obj <> endobj 4047 0 obj <> endobj 4048 0 obj <> endobj 4049 0 obj <> endobj 4050 0 obj <> endobj 4051 0 obj <> endobj 4052 0 obj <> endobj 4053 0 obj <> endobj 4054 0 obj <> endobj 4055 0 obj <> endobj 4056 0 obj <> endobj 4057 0 obj <> endobj 4058 0 obj <> endobj 4059 0 obj <> endobj 4060 0 obj <> endobj 4061 0 obj <> endobj 4062 0 obj <> endobj 4063 0 obj <> endobj 4064 0 obj <> endobj 4065 0 obj <> endobj 4066 0 obj <> endobj 4067 0 obj <> endobj 4068 0 obj <> endobj 4069 0 obj <> endobj 4070 0 obj <> endobj 4071 0 obj <> endobj 4072 0 obj <> endobj 4073 0 obj <> endobj 4074 0 obj <> endobj 4075 0 obj <> endobj 4076 0 obj <> endobj 4077 0 obj <> endobj 4078 0 obj <> endobj 4079 0 obj <> endobj 4080 0 obj <> endobj 4081 0 obj <> endobj 4082 0 obj <> endobj 4083 0 obj <> endobj 4084 0 obj <> endobj 4085 0 obj <> endobj 4086 0 obj <> endobj 4087 0 obj <> endobj 4088 0 obj <> endobj 4089 0 obj <> endobj 4090 0 obj <> endobj 4091 0 obj <> endobj 4092 0 obj <> endobj 4093 0 obj <> endobj 4094 0 obj <> endobj 4095 0 obj <> endobj 4096 0 obj <> endobj 4097 0 obj <> endobj 4098 0 obj <> endobj 4099 0 obj <> endobj 4100 0 obj <> endobj 4101 0 obj <> endobj 4102 0 obj <> endobj 4103 0 obj <> endobj 4104 0 obj <> endobj 4105 0 obj <> endobj 4106 0 obj <> endobj 4107 0 obj <> endobj 4108 0 obj <> endobj 4109 0 obj <> endobj 4110 0 obj <> endobj 4111 0 obj <> endobj 4112 0 obj <> endobj 4113 0 obj <> endobj 4114 0 obj <> endobj 4115 0 obj <> endobj 4116 0 obj <> endobj 4117 0 obj <> endobj 4118 0 obj <> endobj 4119 0 obj <> endobj 4120 0 obj <> endobj 4121 0 obj <> endobj 4122 0 obj <> endobj 4123 0 obj <> endobj 4124 0 obj <> endobj 4125 0 obj <> endobj 4126 0 obj <> endobj 4127 0 obj <> endobj 4128 0 obj <> endobj 4129 0 obj <> endobj 4130 0 obj <> endobj 4131 0 obj <> endobj 4132 0 obj <> endobj 4133 0 obj <> endobj 4134 0 obj <> endobj 4135 0 obj <> endobj 4136 0 obj <> endobj 4137 0 obj <> endobj 4138 0 obj <> endobj 4139 0 obj <> endobj 4140 0 obj <> endobj 4141 0 obj <> endobj 4142 0 obj <> endobj 4143 0 obj <> endobj 4144 0 obj <> endobj 4145 0 obj <> endobj 4146 0 obj <> endobj 4147 0 obj <> endobj 4148 0 obj <> endobj 4149 0 obj <> endobj 4150 0 obj <> endobj 4151 0 obj <> endobj 4152 0 obj <> endobj 4153 0 obj <> endobj 4154 0 obj <> endobj 4155 0 obj <> endobj 4156 0 obj <> endobj 4157 0 obj <> endobj 4158 0 obj <> endobj 4159 0 obj <> endobj 4160 0 obj <> endobj 4161 0 obj <> endobj 4162 0 obj <> endobj 4163 0 obj <> endobj 4164 0 obj <> endobj 4165 0 obj <> endobj 4166 0 obj <> endobj 4167 0 obj <> endobj 4168 0 obj <> endobj 4169 0 obj <> endobj 4170 0 obj <> endobj 4171 0 obj <> endobj 4172 0 obj <> endobj 4173 0 obj <> endobj 4174 0 obj <> endobj 4175 0 obj <> endobj 4176 0 obj <> endobj 4177 0 obj <> endobj 4178 0 obj <> endobj 4179 0 obj <> endobj 4180 0 obj <> endobj 4181 0 obj <> endobj 4182 0 obj <> endobj 4183 0 obj <> endobj 4184 0 obj <> endobj 4185 0 obj <> endobj 4186 0 obj <> endobj 4187 0 obj <> endobj 4188 0 obj <> endobj 4189 0 obj <> endobj 4190 0 obj <> endobj 4191 0 obj <> endobj 4192 0 obj <> endobj 4193 0 obj <> endobj 4194 0 obj <> endobj 4195 0 obj <> endobj 4196 0 obj <> endobj 4197 0 obj <> endobj 4198 0 obj <> endobj 4199 0 obj <> endobj 4200 0 obj <> endobj 4201 0 obj <> endobj 4202 0 obj <> endobj 4203 0 obj <> endobj 4204 0 obj <> endobj 4205 0 obj <> endobj 4206 0 obj <> endobj 4207 0 obj <> endobj 4208 0 obj <> endobj 4209 0 obj <> endobj 4210 0 obj <> endobj 4211 0 obj <> endobj 4212 0 obj <> endobj 4213 0 obj <> endobj 4214 0 obj <> endobj 4215 0 obj <> endobj 4216 0 obj <> endobj 4217 0 obj <> endobj 4218 0 obj <> endobj 4219 0 obj <> endobj 4220 0 obj <> endobj 4221 0 obj <> endobj 4222 0 obj <> endobj 4223 0 obj <> endobj 4224 0 obj <> endobj 4225 0 obj <> endobj 4226 0 obj <> endobj 4227 0 obj <> endobj 4228 0 obj <> endobj 4229 0 obj <> endobj 4230 0 obj <> endobj 4231 0 obj <> endobj 4232 0 obj <> endobj 4233 0 obj <> endobj 4234 0 obj <> endobj 4235 0 obj <> endobj 4236 0 obj <> endobj 4237 0 obj <> endobj 4238 0 obj <> endobj 4239 0 obj <> endobj 4240 0 obj <> endobj 4241 0 obj <> endobj 4242 0 obj <> endobj 4243 0 obj <> endobj 4244 0 obj <> endobj 4245 0 obj <> endobj 4246 0 obj <> endobj 4247 0 obj <> endobj 4248 0 obj <> endobj 4249 0 obj <> endobj 4250 0 obj <> endobj 4251 0 obj <> endobj 4252 0 obj <> endobj 4253 0 obj <> endobj 4254 0 obj <> endobj 4255 0 obj <> endobj 4256 0 obj <> endobj 4257 0 obj <> endobj 4258 0 obj <> endobj 4259 0 obj <> endobj 4260 0 obj <> endobj 4261 0 obj <> endobj 4262 0 obj <> endobj 4263 0 obj <> endobj 4264 0 obj <> endobj 4265 0 obj <> endobj 4266 0 obj <> endobj 4267 0 obj <> endobj 4268 0 obj <> endobj 4269 0 obj <> endobj 4270 0 obj <> endobj 4271 0 obj <> endobj 4272 0 obj <> endobj 4273 0 obj <> endobj 4274 0 obj <> endobj 4275 0 obj <> endobj 4276 0 obj <> endobj 4277 0 obj <> endobj 4278 0 obj <> endobj 4279 0 obj <> endobj 4280 0 obj <> endobj 4281 0 obj <> endobj 4282 0 obj <> endobj 4283 0 obj <> endobj 4284 0 obj <> endobj 4285 0 obj <> endobj 4286 0 obj <> endobj 4287 0 obj <> endobj 4288 0 obj <> endobj 4289 0 obj <> endobj 4290 0 obj <> endobj 4291 0 obj <> endobj 4292 0 obj <> endobj 4293 0 obj <> endobj 4294 0 obj <> endobj 4295 0 obj <> endobj 4296 0 obj <> endobj 4297 0 obj <> endobj 4298 0 obj <> endobj 4299 0 obj <> endobj 4300 0 obj <> endobj 4301 0 obj <> endobj 4302 0 obj <> endobj 4303 0 obj <> endobj 4304 0 obj <> endobj 4305 0 obj <> endobj 4306 0 obj <> endobj 4307 0 obj <> endobj 4308 0 obj <> endobj 4309 0 obj <> endobj 4310 0 obj <> endobj 4311 0 obj <> endobj 4312 0 obj <> endobj 4313 0 obj <> endobj 4314 0 obj <> endobj 4315 0 obj <> endobj 4316 0 obj <> endobj 4317 0 obj <> endobj 4318 0 obj <> endobj 4319 0 obj <> endobj 4320 0 obj <> endobj 4321 0 obj <> endobj 4322 0 obj <> endobj 4323 0 obj <> endobj 4324 0 obj <> endobj 4325 0 obj <> endobj 4326 0 obj <> endobj 4327 0 obj <> endobj 4328 0 obj <> endobj 4329 0 obj <> endobj 4330 0 obj <> endobj 4331 0 obj <> endobj 4332 0 obj <> endobj 4333 0 obj <> endobj 4334 0 obj <> endobj 4335 0 obj <> endobj 4336 0 obj <> endobj 4337 0 obj <> endobj 4338 0 obj <> endobj 4339 0 obj <> endobj 4340 0 obj <> endobj 4341 0 obj <> endobj 4342 0 obj <> endobj 4343 0 obj <> endobj 4344 0 obj <> endobj 4345 0 obj <> endobj 4346 0 obj <> endobj 4347 0 obj <> endobj 4348 0 obj <> endobj 4349 0 obj <> endobj 4350 0 obj <> endobj 4351 0 obj <> endobj 4352 0 obj <> endobj 4353 0 obj <> endobj 4354 0 obj <> endobj 4355 0 obj <> endobj 4356 0 obj <> endobj 4357 0 obj <> endobj 4358 0 obj <> endobj 4359 0 obj <> endobj 4360 0 obj <> endobj 4361 0 obj <> endobj 4362 0 obj <> endobj 4363 0 obj <> endobj 4364 0 obj <> endobj 4365 0 obj <> endobj 4366 0 obj <> endobj 4367 0 obj <> endobj 4368 0 obj <> endobj 4369 0 obj <> endobj 4370 0 obj <> endobj 4371 0 obj <> endobj 4372 0 obj <> endobj 4373 0 obj <> endobj 4374 0 obj <> endobj 4375 0 obj <> endobj 4376 0 obj <> endobj 4377 0 obj <> endobj 4378 0 obj <> endobj 4379 0 obj <> endobj 4380 0 obj <> endobj 4381 0 obj <> endobj 4382 0 obj <> endobj 4383 0 obj <> endobj 4384 0 obj <> endobj 4385 0 obj <> endobj 4386 0 obj <> endobj 4387 0 obj <> endobj 4388 0 obj <> endobj 4389 0 obj <> endobj 4390 0 obj <> endobj 4391 0 obj <> endobj 4392 0 obj <> endobj 4393 0 obj <> endobj 4394 0 obj <> endobj 4395 0 obj <> endobj 4396 0 obj <> endobj 4397 0 obj <> endobj 4398 0 obj <> endobj 4399 0 obj <> endobj 4400 0 obj <> endobj 4401 0 obj <> endobj 4402 0 obj <> endobj 4403 0 obj <> endobj 4404 0 obj <> endobj 4405 0 obj <> endobj 4406 0 obj <> endobj 4407 0 obj <> endobj 4408 0 obj <> endobj 4409 0 obj <> endobj 4410 0 obj <> endobj 4411 0 obj <> endobj 4412 0 obj <> endobj 4413 0 obj <> endobj 4414 0 obj <> endobj 4415 0 obj <> endobj 4416 0 obj <> endobj 4417 0 obj <> endobj 4418 0 obj <> endobj 4419 0 obj <> endobj 4420 0 obj <> endobj 4421 0 obj <> endobj 4422 0 obj <> endobj 4423 0 obj <> endobj 4424 0 obj <> endobj 4425 0 obj <> endobj 4426 0 obj <> endobj 4427 0 obj <> endobj 4428 0 obj <> endobj 4429 0 obj <> endobj 4430 0 obj <> endobj 4431 0 obj <> endobj 4432 0 obj <> endobj 4433 0 obj <> endobj 4434 0 obj <> endobj 4435 0 obj <> endobj 4436 0 obj <> endobj 4437 0 obj <> endobj 4438 0 obj <> endobj 4439 0 obj <> endobj 4440 0 obj <> endobj 4441 0 obj <> endobj 4442 0 obj <> endobj 4443 0 obj <> endobj 4444 0 obj <> endobj 4445 0 obj <> endobj 4446 0 obj <> endobj 4447 0 obj <> endobj 4448 0 obj <> endobj 4449 0 obj <> endobj 4450 0 obj <> endobj 4451 0 obj <> endobj 4452 0 obj <> endobj 4453 0 obj <> endobj 4454 0 obj <> endobj 4455 0 obj <> endobj 4456 0 obj <> endobj 4457 0 obj <> endobj 4458 0 obj <> endobj 4459 0 obj <> endobj 4460 0 obj <> endobj 4461 0 obj <> endobj 4462 0 obj <> endobj 4463 0 obj <> endobj 4464 0 obj <> endobj 4465 0 obj <> endobj 4466 0 obj <> endobj 4467 0 obj <> endobj 4468 0 obj <> endobj 4469 0 obj <> endobj 4470 0 obj <> endobj 4471 0 obj <> endobj 4472 0 obj <> endobj 4473 0 obj <> endobj 4474 0 obj <> endobj 4475 0 obj <> endobj 4476 0 obj <> endobj 4477 0 obj <> endobj 4478 0 obj <> endobj 4479 0 obj <> endobj 4480 0 obj <> endobj 4481 0 obj <> endobj 4482 0 obj <> endobj 4483 0 obj <> endobj 4484 0 obj <> endobj 4485 0 obj <> endobj 4486 0 obj <> endobj 4487 0 obj <> endobj 4488 0 obj <> endobj 4489 0 obj <> endobj 4490 0 obj <> endobj 4491 0 obj <> endobj 4492 0 obj <> endobj 4493 0 obj <> endobj 4494 0 obj <> endobj 4495 0 obj <> endobj 4496 0 obj <> endobj 4497 0 obj <> endobj 4498 0 obj <> endobj 4499 0 obj <> endobj 4500 0 obj <> endobj 4501 0 obj <> endobj 4502 0 obj <> endobj 4503 0 obj <> endobj 4504 0 obj <> endobj 4505 0 obj <> endobj 4506 0 obj <> endobj 4507 0 obj <> endobj 4508 0 obj <> endobj 4509 0 obj <> endobj 4510 0 obj <> endobj 4511 0 obj <> endobj 4512 0 obj <> endobj 4513 0 obj <> endobj 4514 0 obj <> endobj 4515 0 obj <> endobj 4516 0 obj <> endobj 4517 0 obj <> endobj 4518 0 obj <> endobj 4519 0 obj <> endobj 4520 0 obj <> endobj 4521 0 obj <> endobj 4522 0 obj <> endobj 4523 0 obj <> endobj 4524 0 obj <> endobj 4525 0 obj <> endobj 4526 0 obj <> endobj 4527 0 obj <> endobj 4528 0 obj <> endobj 4529 0 obj <> endobj 4530 0 obj <> endobj 4531 0 obj <> endobj 4532 0 obj <> endobj 4533 0 obj <> endobj 4534 0 obj <> endobj 4535 0 obj <> endobj 4536 0 obj <> endobj 4537 0 obj <> endobj 4538 0 obj <> endobj 4539 0 obj <> endobj 4540 0 obj <> endobj 4541 0 obj <> endobj 4542 0 obj <> endobj 4543 0 obj <> endobj 4544 0 obj <> endobj 4545 0 obj <> endobj 4546 0 obj <> endobj 4547 0 obj <> endobj 4548 0 obj <> endobj 4549 0 obj <> endobj 4550 0 obj <> endobj 4551 0 obj <> endobj 4552 0 obj <> endobj 4553 0 obj <> endobj 4554 0 obj <> endobj 4555 0 obj <> endobj 4556 0 obj <> endobj 4557 0 obj <> endobj 4558 0 obj <> endobj 4559 0 obj <> endobj 4560 0 obj <> endobj 4561 0 obj <> endobj 4562 0 obj <> endobj 4563 0 obj <> endobj 4564 0 obj <> endobj 4565 0 obj <> endobj 4566 0 obj <> endobj 4567 0 obj <> endobj 4568 0 obj <> endobj 4569 0 obj <> endobj 4570 0 obj <> endobj 4571 0 obj <> endobj 4572 0 obj <> endobj 4573 0 obj <> endobj 4574 0 obj <> endobj 4575 0 obj <> endobj 4576 0 obj <> endobj 4577 0 obj <> endobj 4578 0 obj <> endobj 4579 0 obj <> endobj 4580 0 obj <> endobj 4581 0 obj <> endobj 4582 0 obj <> endobj 4583 0 obj <> endobj 4584 0 obj <> endobj 4585 0 obj <> endobj 4586 0 obj <> endobj 4587 0 obj <> endobj 4588 0 obj <> endobj 4589 0 obj <> endobj 4590 0 obj <> endobj 4591 0 obj <> endobj 4592 0 obj <> endobj 4593 0 obj <> endobj 4594 0 obj <> endobj 4595 0 obj <> endobj 4596 0 obj <> endobj 4597 0 obj <> endobj 4598 0 obj <> endobj 4599 0 obj <> endobj 4600 0 obj <> endobj 4601 0 obj <> endobj 4602 0 obj <> endobj 4603 0 obj <> endobj 4604 0 obj <> endobj 4605 0 obj <> endobj 4606 0 obj <> endobj 4607 0 obj <> endobj 4608 0 obj <> endobj 4609 0 obj <> endobj 4610 0 obj <> endobj 4611 0 obj <> endobj 4612 0 obj <> endobj 4613 0 obj <> endobj 4614 0 obj <> endobj 4615 0 obj <> endobj 4616 0 obj <> endobj 4617 0 obj <> endobj 4618 0 obj <> endobj 4619 0 obj <> endobj 4620 0 obj <> endobj 4621 0 obj <> endobj 4622 0 obj <> endobj 4623 0 obj <> endobj 4624 0 obj <> endobj 4625 0 obj <> endobj 4626 0 obj <> endobj 4627 0 obj <> endobj 4628 0 obj <> endobj 4629 0 obj <> endobj 4630 0 obj <> endobj 4631 0 obj <> endobj 4632 0 obj <> endobj 4633 0 obj <> endobj 4634 0 obj <> endobj 4635 0 obj <> endobj 4636 0 obj <> endobj 4637 0 obj <> endobj 4638 0 obj <> endobj 4639 0 obj <> endobj 4640 0 obj <> endobj 4641 0 obj <> endobj 4642 0 obj <> endobj 4643 0 obj <> endobj 4644 0 obj <> endobj 4645 0 obj <> endobj 4646 0 obj <> endobj 4647 0 obj <> endobj 4648 0 obj <> endobj 4649 0 obj <> endobj 4650 0 obj <> endobj 4651 0 obj <> endobj 4652 0 obj <> endobj 4653 0 obj <> endobj 4654 0 obj <> endobj 4655 0 obj <> endobj 4656 0 obj <> endobj 4657 0 obj <> endobj 4658 0 obj <> endobj 4659 0 obj <> endobj 4660 0 obj <> endobj 4661 0 obj <> endobj 4662 0 obj <> endobj 4663 0 obj <> endobj 4664 0 obj <> endobj 4665 0 obj <> endobj 4666 0 obj <> endobj 4667 0 obj <> endobj 4668 0 obj <> endobj 4669 0 obj <> endobj 4670 0 obj <> endobj 4671 0 obj <> endobj 4672 0 obj <> endobj 4673 0 obj <> endobj 4674 0 obj <> endobj 4675 0 obj <> endobj 4676 0 obj <> endobj 4677 0 obj <> endobj 4678 0 obj <> endobj 4679 0 obj <> endobj 4680 0 obj <> endobj 4681 0 obj <> endobj 4682 0 obj <> endobj 4683 0 obj <> endobj 4684 0 obj <> endobj 4685 0 obj <> endobj 4686 0 obj <> endobj 4687 0 obj <> endobj 4688 0 obj <> endobj 4689 0 obj <> endobj 4690 0 obj <> endobj 4691 0 obj <> endobj 4692 0 obj <> endobj 4693 0 obj <> endobj 4694 0 obj <> endobj 4695 0 obj <> endobj 4696 0 obj <> endobj 4697 0 obj <> endobj 4698 0 obj <> endobj 4699 0 obj <> endobj 4700 0 obj <> endobj 4701 0 obj <> endobj 4702 0 obj <> endobj 4703 0 obj <> endobj 4704 0 obj <> endobj 4705 0 obj <> endobj 4706 0 obj <> endobj 4707 0 obj <> endobj 4708 0 obj <> endobj 4709 0 obj <> endobj 4710 0 obj <> endobj 4711 0 obj <> endobj 4712 0 obj <> endobj 4713 0 obj <> endobj 4714 0 obj <> endobj 4715 0 obj <> endobj 4716 0 obj <> endobj 4717 0 obj <> endobj 4718 0 obj <> endobj 4719 0 obj <> endobj 4720 0 obj <> endobj 4721 0 obj <> endobj 4722 0 obj <> endobj 4723 0 obj <> endobj 4724 0 obj <> endobj 4725 0 obj <> endobj 4726 0 obj <> endobj 4727 0 obj <> endobj 4728 0 obj <> endobj 4729 0 obj <> endobj 4730 0 obj <> endobj 4731 0 obj <> endobj 4732 0 obj <> endobj 4733 0 obj <> endobj 4734 0 obj <> endobj 4735 0 obj <> endobj 4736 0 obj <> endobj 4737 0 obj <> endobj 4738 0 obj <> endobj 4739 0 obj <> endobj 4740 0 obj <> endobj 4741 0 obj <> endobj 4742 0 obj <> endobj 4743 0 obj <> endobj 4744 0 obj <> endobj 4745 0 obj <> endobj 4746 0 obj <> endobj 4747 0 obj <> endobj 4748 0 obj <> endobj 4749 0 obj <> endobj 4750 0 obj <> endobj 4751 0 obj <> endobj 4752 0 obj <> endobj 4753 0 obj <> endobj 4754 0 obj <> endobj 4755 0 obj <> endobj 4756 0 obj <> endobj 4757 0 obj <> endobj 4758 0 obj <> endobj 4759 0 obj <> endobj 4760 0 obj <> endobj 4761 0 obj <> endobj 4762 0 obj <> endobj 4763 0 obj <> endobj 4764 0 obj <> endobj 4765 0 obj <> endobj 4766 0 obj <> endobj 4767 0 obj <> endobj 4768 0 obj <> endobj 4769 0 obj <> endobj 4770 0 obj <> endobj 4771 0 obj <> endobj 4772 0 obj <> endobj 4773 0 obj <> endobj 4774 0 obj <> endobj 4775 0 obj <> endobj 4776 0 obj <> endobj 4777 0 obj <> endobj 4778 0 obj <> endobj 4779 0 obj <> endobj 4780 0 obj <> endobj 4781 0 obj <> endobj 4782 0 obj <> endobj 4783 0 obj <> endobj 4784 0 obj <> endobj 4785 0 obj <> endobj 4786 0 obj <> endobj 4787 0 obj <> endobj 4788 0 obj <> endobj 4789 0 obj <> endobj 4790 0 obj <> endobj 4791 0 obj <> endobj 4792 0 obj <> endobj 4793 0 obj <> endobj 4794 0 obj <> endobj 4795 0 obj <> endobj 4796 0 obj <> endobj 4797 0 obj <> endobj 4798 0 obj <> endobj 4799 0 obj <> endobj 4800 0 obj <> endobj 4801 0 obj <> endobj 4802 0 obj <> endobj 4803 0 obj <> endobj 4804 0 obj <> endobj 4805 0 obj <> endobj 4806 0 obj <> endobj 4807 0 obj <> endobj 4808 0 obj <> endobj 4809 0 obj <> endobj 4810 0 obj <> endobj 4811 0 obj <> endobj 4812 0 obj <> endobj 4813 0 obj <> endobj 4814 0 obj <> endobj 4815 0 obj <> endobj 4816 0 obj <> endobj 4817 0 obj <> endobj 4818 0 obj <> endobj 4819 0 obj <> endobj 4820 0 obj <> endobj 4821 0 obj <> endobj 4822 0 obj <> endobj 4823 0 obj <> endobj 4824 0 obj <> endobj 4825 0 obj <> endobj 4826 0 obj <> endobj 4827 0 obj <> endobj 4828 0 obj <> endobj 4829 0 obj <> endobj 4830 0 obj <> endobj 4831 0 obj <> endobj 4832 0 obj <> endobj 4833 0 obj <> endobj 4834 0 obj <> endobj 4835 0 obj <> endobj 4836 0 obj <> endobj 4837 0 obj <> endobj 4838 0 obj <> endobj 4839 0 obj <> endobj 4840 0 obj <> endobj 4841 0 obj <> endobj 4842 0 obj <> endobj 4843 0 obj <> endobj 4844 0 obj <> endobj 4845 0 obj <> endobj 4846 0 obj <> endobj 4847 0 obj <> endobj 4848 0 obj <> endobj 4849 0 obj <> endobj 4850 0 obj <> endobj 4851 0 obj <> endobj 4852 0 obj <> endobj 4853 0 obj <> endobj 4854 0 obj <> endobj 4855 0 obj <> endobj 4856 0 obj <> endobj 4857 0 obj <> endobj 4858 0 obj <> endobj 4859 0 obj <> endobj 4860 0 obj <> endobj 4861 0 obj <> endobj 4862 0 obj <> endobj 4863 0 obj <> endobj 4864 0 obj <> endobj 4865 0 obj <> endobj 4866 0 obj <> endobj 4867 0 obj <> endobj 4868 0 obj <> endobj 4869 0 obj <> endobj 4870 0 obj <> endobj 4871 0 obj <> endobj 4872 0 obj <> endobj 4873 0 obj <> endobj 4874 0 obj <> endobj 4875 0 obj <> endobj 4876 0 obj <> endobj 4877 0 obj <> endobj 4878 0 obj <> endobj 4879 0 obj <> endobj 4880 0 obj <> endobj 4881 0 obj <> endobj 4882 0 obj <> endobj 4883 0 obj <> endobj 4884 0 obj <> endobj 4885 0 obj <> endobj 4886 0 obj <> endobj 4887 0 obj <> endobj 4888 0 obj <> endobj 4889 0 obj <> endobj 4890 0 obj <> endobj 4891 0 obj <> endobj 4892 0 obj <> endobj 4893 0 obj <> endobj 4894 0 obj <> endobj 4895 0 obj <> endobj 4896 0 obj <> endobj 4897 0 obj <> endobj 4898 0 obj <> endobj 4899 0 obj <> endobj 4900 0 obj <> endobj 4901 0 obj <> endobj 4902 0 obj <> endobj 4903 0 obj <> endobj 4904 0 obj <> endobj 4905 0 obj <> endobj 4906 0 obj <> endobj 4907 0 obj <> endobj 4908 0 obj <> endobj 4909 0 obj <> endobj 4910 0 obj <> endobj 4911 0 obj <> endobj 4912 0 obj <> endobj 4913 0 obj <> endobj 4914 0 obj <> endobj 4915 0 obj <> endobj 4916 0 obj <> endobj 4917 0 obj <> endobj 4918 0 obj <> endobj 4919 0 obj <> endobj 4920 0 obj <> endobj 4921 0 obj <> endobj 4922 0 obj <> endobj 4923 0 obj <> endobj 4924 0 obj <> endobj 4925 0 obj <> endobj 4926 0 obj <> endobj 4927 0 obj <> endobj 4928 0 obj <> endobj 4929 0 obj <> endobj 4930 0 obj <> endobj 4931 0 obj <> endobj 4932 0 obj <> endobj 4933 0 obj <> endobj 4934 0 obj <> endobj 4935 0 obj <> endobj 4936 0 obj <> endobj 4937 0 obj <> endobj 4938 0 obj <> endobj 4939 0 obj <> endobj 4940 0 obj <> endobj 4941 0 obj <> endobj 4942 0 obj <> endobj 4943 0 obj <> endobj 4944 0 obj <> endobj 4945 0 obj <> endobj 4946 0 obj <> endobj 4947 0 obj <> endobj 4948 0 obj <> endobj 4949 0 obj <> endobj 4950 0 obj <> endobj 4951 0 obj <> endobj 4952 0 obj <> endobj 4953 0 obj <> endobj 4954 0 obj <> endobj 4955 0 obj <> endobj 4956 0 obj <> endobj 4957 0 obj <> endobj 4958 0 obj <> endobj 4959 0 obj <> endobj 4960 0 obj <> endobj 4961 0 obj <> endobj 4962 0 obj <> endobj 4963 0 obj <> endobj 4964 0 obj <> endobj 4965 0 obj <> endobj 4966 0 obj <> endobj 4967 0 obj <> endobj 4968 0 obj <> endobj 4969 0 obj <> endobj 4970 0 obj <> endobj 4971 0 obj <> endobj 4972 0 obj <> endobj 4973 0 obj <> endobj 4974 0 obj <> endobj 4975 0 obj <> endobj 4976 0 obj <> endobj 4977 0 obj <> endobj 4978 0 obj <> endobj 4979 0 obj <> endobj 4980 0 obj <> endobj 4981 0 obj <> endobj 4982 0 obj <> endobj 4983 0 obj <> endobj 4984 0 obj <> endobj 4985 0 obj <> endobj 4986 0 obj <> endobj 4987 0 obj <> endobj 4988 0 obj <> endobj 4989 0 obj <> endobj 4990 0 obj <> endobj 4991 0 obj <> endobj 4992 0 obj <> endobj 4993 0 obj <> endobj 4994 0 obj <> endobj 4995 0 obj <> endobj 4996 0 obj <> endobj 4997 0 obj <> endobj 4998 0 obj <> endobj 4999 0 obj <> endobj 5000 0 obj <> endobj 5001 0 obj <> endobj 5002 0 obj <> endobj 5003 0 obj <> endobj 5004 0 obj <> endobj 5005 0 obj <> endobj 5006 0 obj <> endobj 5007 0 obj <> endobj 5008 0 obj <> endobj 5009 0 obj <> endobj 5010 0 obj <> endobj 5011 0 obj <> endobj 5012 0 obj <> endobj 5013 0 obj <> endobj 5014 0 obj <> endobj 5015 0 obj <> endobj 5016 0 obj <> endobj 5017 0 obj <> endobj 5018 0 obj <> endobj 5019 0 obj <> endobj 5020 0 obj <> endobj 5021 0 obj <> endobj 5022 0 obj <> endobj 5023 0 obj <> endobj 5024 0 obj <> endobj 5025 0 obj <> endobj 5026 0 obj <> endobj 5027 0 obj <> endobj 5028 0 obj <> endobj 5029 0 obj <> endobj 5030 0 obj <> endobj 5031 0 obj <> endobj 5032 0 obj <> endobj 5033 0 obj <> endobj 5034 0 obj <> endobj 5035 0 obj <> endobj 5036 0 obj <> endobj 5037 0 obj <> endobj 5038 0 obj <> endobj 5039 0 obj <> endobj 5040 0 obj <> endobj 5041 0 obj <> endobj 5042 0 obj <> endobj 5043 0 obj <> endobj 5044 0 obj <> endobj 5045 0 obj <> endobj 5046 0 obj <> endobj 5047 0 obj <> endobj 5048 0 obj <> endobj 5049 0 obj <> endobj 5050 0 obj <> endobj 5051 0 obj <> endobj 5052 0 obj <> endobj 5053 0 obj <> endobj 5054 0 obj <> endobj 5055 0 obj <> endobj 5056 0 obj <> endobj 5057 0 obj <> endobj 5058 0 obj <> endobj 5059 0 obj <> endobj 5060 0 obj <> endobj 5061 0 obj <> endobj 5062 0 obj <> endobj 5063 0 obj <> endobj 5064 0 obj <> endobj 5065 0 obj <> endobj 5066 0 obj <> endobj 5067 0 obj <> endobj 5068 0 obj <> endobj 5069 0 obj <> endobj 5070 0 obj <> endobj 5071 0 obj <> endobj 5072 0 obj <> endobj 5073 0 obj <> endobj 5074 0 obj <> endobj 5075 0 obj <> endobj 5076 0 obj <> endobj 5077 0 obj <> endobj 5078 0 obj <> endobj 5079 0 obj <> endobj 5080 0 obj <> endobj 5081 0 obj <> endobj 5082 0 obj <> endobj 5083 0 obj <> endobj 5084 0 obj <> endobj 5085 0 obj <> endobj 5086 0 obj <> endobj 5087 0 obj <> endobj 5088 0 obj <> endobj 5089 0 obj <> endobj 5090 0 obj <> endobj 5091 0 obj <> endobj 5092 0 obj <> endobj 5093 0 obj <> endobj 5094 0 obj <> endobj 5095 0 obj <> endobj 5096 0 obj <> endobj 5097 0 obj <> endobj 5098 0 obj <> endobj 5099 0 obj <> endobj 5100 0 obj <> endobj 5101 0 obj <> endobj 5102 0 obj <> endobj 5103 0 obj <> endobj 5104 0 obj <> endobj 5105 0 obj <> endobj 5106 0 obj <> endobj 5107 0 obj <> endobj 5108 0 obj <> endobj 5109 0 obj <> endobj 5110 0 obj <> endobj 5111 0 obj <> endobj 5112 0 obj <> endobj 5113 0 obj <> endobj 5114 0 obj <> endobj 5115 0 obj <> endobj 5116 0 obj <> endobj 5117 0 obj <> endobj 5118 0 obj <> endobj 5119 0 obj <> endobj 5120 0 obj <> endobj 5121 0 obj <> endobj 5122 0 obj <> endobj 5123 0 obj <> endobj 5124 0 obj <> endobj 5125 0 obj <> endobj 5126 0 obj <> endobj 5127 0 obj <> endobj 5128 0 obj <> endobj 5129 0 obj <> endobj 5130 0 obj <> endobj 5131 0 obj <> endobj 5132 0 obj <> endobj 5133 0 obj <> endobj 5134 0 obj <> endobj 5135 0 obj <> endobj 5136 0 obj <> endobj 5137 0 obj <> endobj 5138 0 obj <> endobj 5139 0 obj <> endobj 5140 0 obj <> endobj 5141 0 obj <> endobj 5142 0 obj <> endobj 5143 0 obj <> endobj 5144 0 obj <> endobj 5145 0 obj <> endobj 5146 0 obj <> endobj 5147 0 obj <> endobj 5148 0 obj <> endobj 5149 0 obj <> endobj 5150 0 obj <> endobj 5151 0 obj <> endobj 5152 0 obj <> endobj 5153 0 obj <> endobj 5154 0 obj <> endobj 5155 0 obj <> endobj 5156 0 obj <> endobj 5157 0 obj <> endobj 5158 0 obj <> endobj 5159 0 obj <> endobj 5160 0 obj <> endobj 5161 0 obj <> endobj 5162 0 obj <> endobj 5163 0 obj <> endobj 5164 0 obj <> endobj 5165 0 obj <> endobj 5166 0 obj <> endobj 5167 0 obj <> endobj 5168 0 obj <> endobj 5169 0 obj <> endobj 5170 0 obj <> endobj 5171 0 obj <> endobj 5172 0 obj <> endobj 5173 0 obj <> endobj 5174 0 obj <> endobj 5175 0 obj <> endobj 5176 0 obj <> endobj 5177 0 obj <> endobj 5178 0 obj <> endobj 5179 0 obj <> endobj 5180 0 obj <> endobj 5181 0 obj <> endobj 5182 0 obj <> endobj 5183 0 obj <> endobj 5184 0 obj <> endobj 5185 0 obj <> endobj 5186 0 obj <> endobj 5187 0 obj <> endobj 5188 0 obj <> endobj 5189 0 obj <> endobj 5190 0 obj <> endobj 5191 0 obj <> endobj 5192 0 obj <> endobj 5193 0 obj <> endobj 5194 0 obj <> endobj 5195 0 obj <> endobj 5196 0 obj <> endobj 5197 0 obj <> endobj 5198 0 obj <> endobj 5199 0 obj <> endobj 5200 0 obj <> endobj 5201 0 obj <> endobj 5202 0 obj <> endobj 5203 0 obj <> endobj 5204 0 obj <> endobj 5205 0 obj <> endobj 5206 0 obj <> endobj 5207 0 obj <> endobj 5208 0 obj <> endobj 5209 0 obj <> endobj 5210 0 obj <> endobj 5211 0 obj <> endobj 5212 0 obj <> endobj 5213 0 obj <> endobj 5214 0 obj <> endobj 5215 0 obj <> endobj 5216 0 obj <> endobj 5217 0 obj <> endobj 5218 0 obj <> endobj 5219 0 obj <> endobj 5220 0 obj <> endobj 5221 0 obj <> endobj 5222 0 obj <> endobj 5223 0 obj <> endobj 5224 0 obj <> endobj 5225 0 obj <> endobj 5226 0 obj <> endobj 5227 0 obj <> endobj 5228 0 obj <> endobj 5229 0 obj <> endobj 5230 0 obj <> endobj 5231 0 obj <> endobj 5232 0 obj <> endobj 5233 0 obj <> endobj 5234 0 obj <> endobj 5235 0 obj <> endobj 5236 0 obj <> endobj 5237 0 obj <> endobj 5238 0 obj <> endobj 5239 0 obj <> endobj 5240 0 obj <> endobj 5241 0 obj <> endobj 5242 0 obj <> endobj 5243 0 obj <> endobj 5244 0 obj <> endobj 5245 0 obj <> endobj 5246 0 obj <> endobj 5247 0 obj <> endobj 5248 0 obj <> endobj 5249 0 obj <> endobj 5250 0 obj <> endobj 5251 0 obj <> endobj 5252 0 obj <> endobj 5253 0 obj <> endobj 5254 0 obj <> endobj 5255 0 obj <> endobj 5256 0 obj <> endobj 5257 0 obj <> endobj 5258 0 obj <> endobj 5259 0 obj <> endobj 5260 0 obj <> endobj 5261 0 obj <> endobj 5262 0 obj <> endobj 5263 0 obj <> endobj 5264 0 obj <> endobj 5265 0 obj <> endobj 5266 0 obj <> endobj 5267 0 obj <> endobj 5268 0 obj <> endobj 5269 0 obj <> endobj 5270 0 obj <> endobj 5271 0 obj <> endobj 5272 0 obj <> endobj 5273 0 obj <> endobj 5274 0 obj <> endobj 5275 0 obj <> endobj 5276 0 obj <> endobj 5277 0 obj <> endobj 5278 0 obj <> endobj 5279 0 obj <> endobj 5280 0 obj <> endobj 5281 0 obj <> endobj 5282 0 obj <> endobj 5283 0 obj <> endobj 5284 0 obj <> endobj 5285 0 obj <> endobj 5286 0 obj <> endobj 5287 0 obj <> endobj 5288 0 obj <> endobj 5289 0 obj <> endobj 5290 0 obj <> endobj 5291 0 obj <> endobj 5292 0 obj <> endobj 5293 0 obj <> endobj 5294 0 obj <> endobj 5295 0 obj <> endobj 5296 0 obj <> endobj 5297 0 obj <> endobj 5298 0 obj <> endobj 5299 0 obj <> endobj 5300 0 obj <> endobj 5301 0 obj <> endobj 5302 0 obj <> endobj 5303 0 obj <> endobj 5304 0 obj <> endobj 5305 0 obj <> endobj 5306 0 obj <> endobj 5307 0 obj <> endobj 5308 0 obj <> endobj 5309 0 obj <> endobj 5310 0 obj <> endobj 5311 0 obj <> endobj 5312 0 obj <> endobj 5313 0 obj <> endobj 5314 0 obj <> endobj 5315 0 obj <> endobj 5316 0 obj <> endobj 5317 0 obj <> endobj 5318 0 obj <> endobj 5319 0 obj <> endobj 5320 0 obj <> endobj 5321 0 obj <> endobj 5322 0 obj <> endobj 5323 0 obj <> endobj 5324 0 obj <> endobj 5325 0 obj <> endobj 5326 0 obj <> endobj 5327 0 obj <> endobj 5328 0 obj <> endobj 5329 0 obj <> endobj 5330 0 obj <> endobj 5331 0 obj <> endobj 5332 0 obj <> endobj 5333 0 obj <> endobj 5334 0 obj <> endobj 5335 0 obj <> endobj 5336 0 obj <> endobj 5337 0 obj <> endobj 5338 0 obj <> endobj 5339 0 obj <> endobj 5340 0 obj <> endobj 5341 0 obj <> endobj 5342 0 obj <> endobj 5343 0 obj <> endobj 5344 0 obj <> endobj 5345 0 obj <> endobj 5346 0 obj <> endobj 5347 0 obj <> endobj 5348 0 obj <> endobj 5349 0 obj <> endobj 5350 0 obj <> endobj 5351 0 obj <> endobj 5352 0 obj <> endobj 5353 0 obj <> endobj 5354 0 obj <> endobj 5355 0 obj <> endobj 5356 0 obj <> endobj 5357 0 obj <> endobj 5358 0 obj <> endobj 5359 0 obj <> endobj 5360 0 obj <> endobj 5361 0 obj <> endobj 5362 0 obj <> endobj 5363 0 obj <> endobj 5364 0 obj <> endobj 5365 0 obj <> endobj 5366 0 obj <> endobj 5367 0 obj <> endobj 5368 0 obj <> endobj 5369 0 obj <> endobj 5370 0 obj <> endobj 5371 0 obj <> endobj 5372 0 obj <> endobj 5373 0 obj <> endobj 5374 0 obj <> endobj 5375 0 obj <> endobj 5376 0 obj <> endobj 5377 0 obj <> endobj 5378 0 obj <> endobj 5379 0 obj <> endobj 5380 0 obj <> endobj 5381 0 obj <> endobj 5382 0 obj <> endobj 5383 0 obj <> endobj 5384 0 obj <> endobj 5385 0 obj <> endobj 5386 0 obj <> endobj 5387 0 obj <> endobj 5388 0 obj <> endobj 5389 0 obj <> endobj 5390 0 obj <> endobj 5391 0 obj <> endobj 5392 0 obj <> endobj 5393 0 obj <> endobj 5394 0 obj <> endobj 5395 0 obj <> endobj 5396 0 obj <> endobj 5397 0 obj <> endobj 5398 0 obj <> endobj 5399 0 obj <> endobj 5400 0 obj <> endobj 5401 0 obj <> endobj 5402 0 obj <> endobj 5403 0 obj <> endobj 5404 0 obj <> endobj 5405 0 obj <> endobj 5406 0 obj <> endobj 5407 0 obj <> endobj 5408 0 obj <> endobj 5409 0 obj <> endobj 5410 0 obj <> endobj 5411 0 obj <> endobj 5412 0 obj <> endobj 5413 0 obj <> endobj 5414 0 obj <> endobj 5415 0 obj <> endobj 5416 0 obj <> endobj 5417 0 obj <> endobj 5418 0 obj <> endobj 5419 0 obj <> endobj 5420 0 obj <> endobj 5421 0 obj <> endobj 5422 0 obj <> endobj 5423 0 obj <> endobj 5424 0 obj <> endobj 5425 0 obj <> endobj 5426 0 obj <> endobj 5427 0 obj <> endobj 5428 0 obj <> endobj 5429 0 obj <> endobj 5430 0 obj <> endobj 5431 0 obj <> endobj 5432 0 obj <> endobj 5433 0 obj <> endobj 5434 0 obj <> endobj 5435 0 obj <> endobj 5436 0 obj <> endobj 5437 0 obj <> endobj 5438 0 obj <> endobj 5439 0 obj <> endobj 5440 0 obj <> endobj 5441 0 obj <> endobj 5442 0 obj <> endobj 5443 0 obj <> endobj 5444 0 obj <> endobj 5445 0 obj <> endobj 5446 0 obj <> endobj 5447 0 obj <> endobj 5448 0 obj <> endobj 5449 0 obj <> endobj 5450 0 obj <> endobj 5451 0 obj <> endobj 5452 0 obj <> endobj 5453 0 obj <> endobj 5454 0 obj <> endobj 5455 0 obj <> endobj 5456 0 obj <> endobj 5457 0 obj <> endobj 5458 0 obj <> endobj 5459 0 obj <> endobj 5460 0 obj <> endobj 5461 0 obj <> endobj 5462 0 obj <> endobj 5463 0 obj <> endobj 5464 0 obj <> endobj 5465 0 obj <> endobj 5466 0 obj <> endobj 5467 0 obj <> endobj 5468 0 obj <> endobj 5469 0 obj <> endobj 5470 0 obj <> endobj 5471 0 obj <> endobj 5472 0 obj <> endobj 5473 0 obj <> endobj 5474 0 obj <> endobj 5475 0 obj <> endobj 5476 0 obj <> endobj 5477 0 obj <> endobj 5478 0 obj <> endobj 5479 0 obj <> endobj 5480 0 obj <> endobj 5481 0 obj <> endobj 5482 0 obj <> endobj 5483 0 obj <> endobj 5484 0 obj <> endobj 5485 0 obj <> endobj 5486 0 obj <> endobj 5487 0 obj <> endobj 5488 0 obj <> endobj 5489 0 obj <> endobj 5490 0 obj <> endobj 5491 0 obj <> endobj 5492 0 obj <> endobj 5493 0 obj <> endobj 5494 0 obj <> endobj 5495 0 obj <> endobj 5496 0 obj <> endobj 5497 0 obj <> endobj 5498 0 obj <> endobj 5499 0 obj <> endobj 5500 0 obj <> endobj 5501 0 obj <> endobj 5502 0 obj <> endobj 5503 0 obj <> endobj 5504 0 obj <> endobj 5505 0 obj <> endobj 5506 0 obj <> endobj 5507 0 obj <> endobj 5508 0 obj <> endobj 5509 0 obj <> endobj 5510 0 obj <> endobj 5511 0 obj <> endobj 5512 0 obj <> endobj 5513 0 obj <> endobj 5514 0 obj <> endobj 5515 0 obj <> endobj 5516 0 obj <> endobj 5517 0 obj <> endobj 5518 0 obj <> endobj 5519 0 obj <> endobj 5520 0 obj <> endobj 5521 0 obj <> endobj 5522 0 obj <> endobj 5523 0 obj <> endobj 5524 0 obj <> endobj 5525 0 obj <> endobj 5526 0 obj <> endobj 5527 0 obj <> endobj 5528 0 obj <> endobj 5529 0 obj <> endobj 5530 0 obj <> endobj 5531 0 obj <> endobj 5532 0 obj <> endobj 5533 0 obj <> endobj 5534 0 obj <> endobj 5535 0 obj <> endobj 5536 0 obj <> endobj 5537 0 obj <> endobj 5538 0 obj <> endobj 5539 0 obj <> endobj 5540 0 obj <> endobj 5541 0 obj <> endobj 5542 0 obj <> endobj 5543 0 obj <> endobj 5544 0 obj <> endobj 5545 0 obj <> endobj 5546 0 obj <> endobj 5547 0 obj <> endobj 5548 0 obj <> endobj 5549 0 obj <> endobj 5550 0 obj <> endobj 5551 0 obj <> endobj 5552 0 obj <> endobj 5553 0 obj <> endobj 5554 0 obj <> endobj 5555 0 obj <> endobj 5556 0 obj <> endobj 5557 0 obj <> endobj 5558 0 obj <> endobj 5559 0 obj <> endobj 5560 0 obj <> endobj 5561 0 obj <> endobj 5562 0 obj <> endobj 5563 0 obj <> endobj 5564 0 obj <> endobj 5565 0 obj <> endobj 5566 0 obj <> endobj 5567 0 obj <> endobj 5568 0 obj <> endobj 5569 0 obj <> endobj 5570 0 obj <> endobj 5571 0 obj <> endobj 5572 0 obj <> endobj 5573 0 obj <> endobj 5574 0 obj <> endobj 5575 0 obj <> endobj 5576 0 obj <> endobj 5577 0 obj <> endobj 5578 0 obj <> endobj 5579 0 obj <> endobj 5580 0 obj <> endobj 5581 0 obj <> endobj 5582 0 obj <> endobj 5583 0 obj <> endobj 5584 0 obj <> endobj 5585 0 obj <> endobj 5586 0 obj <> endobj 5587 0 obj <> endobj 5588 0 obj <> endobj 5589 0 obj <> endobj 5590 0 obj <> endobj 5591 0 obj <> endobj 5592 0 obj <> endobj 5593 0 obj <> endobj 5594 0 obj <> endobj 5595 0 obj <> endobj 5596 0 obj <> endobj 5597 0 obj <> endobj 5598 0 obj <> endobj 5599 0 obj <> endobj 5600 0 obj <> endobj 5601 0 obj <> endobj 5602 0 obj <> endobj 5603 0 obj <> endobj 5604 0 obj <> endobj 5605 0 obj <> endobj 5606 0 obj <> endobj 5607 0 obj <> endobj 5608 0 obj <> endobj 5609 0 obj <> endobj 5610 0 obj <> endobj 5611 0 obj <> endobj 5612 0 obj <> endobj 5613 0 obj <> endobj 5614 0 obj <> endobj 5615 0 obj <> endobj 5616 0 obj <> endobj 5617 0 obj <> endobj 5618 0 obj <> endobj 5619 0 obj <> endobj 5620 0 obj <> endobj 5621 0 obj <> endobj 5622 0 obj <> endobj 5623 0 obj <> endobj 5624 0 obj <> endobj 5625 0 obj <> endobj 5626 0 obj <> endobj 5627 0 obj <> endobj 5628 0 obj <> endobj 5629 0 obj <> endobj 5630 0 obj <> endobj 5631 0 obj <> endobj 5632 0 obj <> endobj 5633 0 obj <>stream + + + + + application/pdf + + + Cadence Design Systems, Inc. + + + + + DEF 5.8 C/C++ Programming Interface + + + + + 2017-04-18T12:28:09Z + FrameMaker 8.0 + 2017-04-18T12:28:09Z + + + Acrobat Distiller 10.1.16 (Windows) + + + uuid:d24c00c7-c202-4f6a-94b8-145346082b18 + uuid:d1ea140a-a9ba-4ed0-a8cc-524c64eb7175 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 5634 0 obj <> endobj xref +0 5635 +0000000000 65535 f +0000110109 00000 n +0000110250 00000 n +0000110361 00000 n +0000114376 00000 n +0000114440 00000 n +0000114873 00000 n +0000115084 00000 n +0000115367 00000 n +0000115713 00000 n +0000115818 00000 n +0000115924 00000 n +0000116029 00000 n +0000116134 00000 n +0000116237 00000 n +0000116343 00000 n +0000116448 00000 n +0000116554 00000 n +0000116660 00000 n +0000116766 00000 n +0000116872 00000 n +0000116975 00000 n +0000117079 00000 n +0000117185 00000 n +0000117291 00000 n +0000117397 00000 n +0000117503 00000 n +0000117609 00000 n +0000117715 00000 n +0000117821 00000 n +0000117927 00000 n +0000118033 00000 n +0000118138 00000 n +0000118244 00000 n +0000118350 00000 n +0000118456 00000 n +0000118562 00000 n +0000118668 00000 n +0000118768 00000 n +0000120963 00000 n +0000121353 00000 n +0000121454 00000 n +0000121559 00000 n +0000121665 00000 n +0000121771 00000 n +0000121877 00000 n +0000121980 00000 n +0000122086 00000 n +0000122192 00000 n +0000122298 00000 n +0000122404 00000 n +0000122510 00000 n +0000122616 00000 n +0000122722 00000 n +0000122828 00000 n +0000122934 00000 n +0000123040 00000 n +0000123146 00000 n +0000123252 00000 n +0000123358 00000 n +0000123464 00000 n +0000123570 00000 n +0000123676 00000 n +0000123782 00000 n +0000123888 00000 n +0000123994 00000 n +0000124097 00000 n +0000124203 00000 n +0000124309 00000 n +0000124415 00000 n +0000124521 00000 n +0000124627 00000 n +0000124733 00000 n +0000124839 00000 n +0000124945 00000 n +0000125045 00000 n +0000127304 00000 n +0000127715 00000 n +0000127816 00000 n +0000127922 00000 n +0000128028 00000 n +0000128133 00000 n +0000128239 00000 n +0000128345 00000 n +0000128451 00000 n +0000128557 00000 n +0000128662 00000 n +0000128767 00000 n +0000128873 00000 n +0000128978 00000 n +0000129084 00000 n +0000129190 00000 n +0000129296 00000 n +0000129402 00000 n +0000129508 00000 n +0000129614 00000 n +0000129720 00000 n +0000129825 00000 n +0000129930 00000 n +0000130036 00000 n +0000130139 00000 n +0000130246 00000 n +0000130353 00000 n +0000130460 00000 n +0000130567 00000 n +0000130673 00000 n +0000130780 00000 n +0000130886 00000 n +0000130993 00000 n +0000131100 00000 n +0000131207 00000 n +0000131314 00000 n +0000131420 00000 n +0000131521 00000 n +0000133791 00000 n +0000134210 00000 n +0000134317 00000 n +0000134424 00000 n +0000134531 00000 n +0000134638 00000 n +0000134745 00000 n +0000134849 00000 n +0000134953 00000 n +0000135060 00000 n +0000135167 00000 n +0000135271 00000 n +0000135378 00000 n +0000135482 00000 n +0000135589 00000 n +0000135696 00000 n +0000135803 00000 n +0000135910 00000 n +0000136017 00000 n +0000136124 00000 n +0000136231 00000 n +0000136338 00000 n +0000136445 00000 n +0000136551 00000 n +0000136657 00000 n +0000136764 00000 n +0000136870 00000 n +0000136977 00000 n +0000137084 00000 n +0000137191 00000 n +0000137297 00000 n +0000137403 00000 n +0000137510 00000 n +0000137616 00000 n +0000137721 00000 n +0000137822 00000 n +0000140158 00000 n +0000140601 00000 n +0000140707 00000 n +0000140813 00000 n +0000140919 00000 n +0000141025 00000 n +0000141131 00000 n +0000141237 00000 n +0000141344 00000 n +0000141451 00000 n +0000141558 00000 n +0000141665 00000 n +0000141772 00000 n +0000141878 00000 n +0000141984 00000 n +0000142090 00000 n +0000142196 00000 n +0000142303 00000 n +0000142410 00000 n +0000142517 00000 n +0000142624 00000 n +0000142731 00000 n +0000142838 00000 n +0000142945 00000 n +0000143052 00000 n +0000143159 00000 n +0000143265 00000 n +0000143372 00000 n +0000143478 00000 n +0000143585 00000 n +0000143692 00000 n +0000143799 00000 n +0000143903 00000 n +0000144010 00000 n +0000144117 00000 n +0000144224 00000 n +0000144331 00000 n +0000144435 00000 n +0000144536 00000 n +0000146879 00000 n +0000147322 00000 n +0000147429 00000 n +0000147536 00000 n +0000147643 00000 n +0000147750 00000 n +0000147857 00000 n +0000147964 00000 n +0000148070 00000 n +0000148177 00000 n +0000148284 00000 n +0000148390 00000 n +0000148497 00000 n +0000148602 00000 n +0000148709 00000 n +0000148816 00000 n +0000148923 00000 n +0000149027 00000 n +0000149134 00000 n +0000149240 00000 n +0000149347 00000 n +0000149454 00000 n +0000149561 00000 n +0000149668 00000 n +0000149775 00000 n +0000149881 00000 n +0000149987 00000 n +0000150094 00000 n +0000150201 00000 n +0000150308 00000 n +0000150415 00000 n +0000150522 00000 n +0000150626 00000 n +0000150732 00000 n +0000150839 00000 n +0000150946 00000 n +0000151053 00000 n +0000151158 00000 n +0000151259 00000 n +0000153696 00000 n +0000154139 00000 n +0000154246 00000 n +0000154353 00000 n +0000154460 00000 n +0000154567 00000 n +0000154674 00000 n +0000154780 00000 n +0000154886 00000 n +0000154992 00000 n +0000155099 00000 n +0000155206 00000 n +0000155313 00000 n +0000155420 00000 n +0000155527 00000 n +0000155634 00000 n +0000155741 00000 n +0000155847 00000 n +0000155954 00000 n +0000156061 00000 n +0000156168 00000 n +0000156275 00000 n +0000156382 00000 n +0000156488 00000 n +0000156595 00000 n +0000156702 00000 n +0000156809 00000 n +0000156916 00000 n +0000157023 00000 n +0000157130 00000 n +0000157236 00000 n +0000157343 00000 n +0000157450 00000 n +0000157557 00000 n +0000157664 00000 n +0000157771 00000 n +0000157878 00000 n +0000157982 00000 n +0000158083 00000 n +0000160546 00000 n +0000160989 00000 n +0000161096 00000 n +0000161203 00000 n +0000161309 00000 n +0000161416 00000 n +0000161523 00000 n +0000161630 00000 n +0000161737 00000 n +0000161841 00000 n +0000161948 00000 n +0000162052 00000 n +0000162159 00000 n +0000162265 00000 n +0000162372 00000 n +0000162479 00000 n +0000162586 00000 n +0000162693 00000 n +0000162800 00000 n +0000162907 00000 n +0000163014 00000 n +0000163121 00000 n +0000163227 00000 n +0000163333 00000 n +0000163440 00000 n +0000163547 00000 n +0000163654 00000 n +0000163761 00000 n +0000163865 00000 n +0000163972 00000 n +0000164079 00000 n +0000164185 00000 n +0000164291 00000 n +0000164398 00000 n +0000164505 00000 n +0000164612 00000 n +0000164718 00000 n +0000164823 00000 n +0000164924 00000 n +0000167363 00000 n +0000167806 00000 n +0000167913 00000 n +0000168020 00000 n +0000168126 00000 n +0000168232 00000 n +0000168338 00000 n +0000168445 00000 n +0000168552 00000 n +0000168659 00000 n +0000168766 00000 n +0000168873 00000 n +0000168979 00000 n +0000169086 00000 n +0000169193 00000 n +0000169300 00000 n +0000169407 00000 n +0000169514 00000 n +0000169620 00000 n +0000169727 00000 n +0000169834 00000 n +0000169940 00000 n +0000170047 00000 n +0000170153 00000 n +0000170260 00000 n +0000170366 00000 n +0000170472 00000 n +0000170579 00000 n +0000170683 00000 n +0000170790 00000 n +0000170897 00000 n +0000171004 00000 n +0000171111 00000 n +0000171218 00000 n +0000171325 00000 n +0000171432 00000 n +0000171539 00000 n +0000171644 00000 n +0000171745 00000 n +0000174131 00000 n +0000174574 00000 n +0000174681 00000 n +0000174788 00000 n +0000174892 00000 n +0000174999 00000 n +0000175106 00000 n +0000175212 00000 n +0000175318 00000 n +0000175425 00000 n +0000175532 00000 n +0000175636 00000 n +0000175742 00000 n +0000175848 00000 n +0000175954 00000 n +0000176061 00000 n +0000176168 00000 n +0000176275 00000 n +0000176382 00000 n +0000176489 00000 n +0000176595 00000 n +0000176702 00000 n +0000176809 00000 n +0000176916 00000 n +0000177023 00000 n +0000177130 00000 n +0000177237 00000 n +0000177341 00000 n +0000177448 00000 n +0000177555 00000 n +0000177662 00000 n +0000177766 00000 n +0000177873 00000 n +0000177979 00000 n +0000178086 00000 n +0000178193 00000 n +0000178299 00000 n +0000178403 00000 n +0000178504 00000 n +0000180872 00000 n +0000181291 00000 n +0000181397 00000 n +0000181503 00000 n +0000181610 00000 n +0000181717 00000 n +0000181824 00000 n +0000181931 00000 n +0000182038 00000 n +0000182144 00000 n +0000182251 00000 n +0000182358 00000 n +0000182465 00000 n +0000182572 00000 n +0000182679 00000 n +0000182784 00000 n +0000182891 00000 n +0000182998 00000 n +0000183103 00000 n +0000183210 00000 n +0000183317 00000 n +0000183424 00000 n +0000183530 00000 n +0000183637 00000 n +0000183744 00000 n +0000183851 00000 n +0000183958 00000 n +0000184065 00000 n +0000184172 00000 n +0000184279 00000 n +0000184386 00000 n +0000184493 00000 n +0000184600 00000 n +0000184707 00000 n +0000184814 00000 n +0000184915 00000 n +0000187242 00000 n +0000187501 00000 n +0000187604 00000 n +0000187711 00000 n +0000187816 00000 n +0000187924 00000 n +0000188032 00000 n +0000188135 00000 n +0000188243 00000 n +0000188350 00000 n +0000188458 00000 n +0000188563 00000 n +0000188671 00000 n +0000188779 00000 n +0000188887 00000 n +0000188988 00000 n +0000190211 00000 n +0000190406 00000 n +0000190554 00000 n +0000190703 00000 n +0000190851 00000 n +0000190998 00000 n +0000191144 00000 n +0000191281 00000 n +0000193469 00000 n +0000193616 00000 n +0000193753 00000 n +0000194950 00000 n +0000195145 00000 n +0000195251 00000 n +0000195357 00000 n +0000195464 00000 n +0000195571 00000 n +0000195678 00000 n +0000195803 00000 n +0000197868 00000 n +0000198015 00000 n +0000198140 00000 n +0000200849 00000 n +0000201020 00000 n +0000201150 00000 n +0000201303 00000 n +0000201566 00000 n +0000204091 00000 n +0000204183 00000 n +0000204538 00000 n +0000204889 00000 n +0000205249 00000 n +0000205590 00000 n +0000205948 00000 n +0000206298 00000 n +0000206648 00000 n +0000206993 00000 n +0000207140 00000 n +0000207253 00000 n +0000208053 00000 n +0000208312 00000 n +0000208419 00000 n +0000208526 00000 n +0000208633 00000 n +0000208740 00000 n +0000208847 00000 n +0000208954 00000 n +0000209061 00000 n +0000209165 00000 n +0000209272 00000 n +0000209379 00000 n +0000209486 00000 n +0000209593 00000 n +0000209700 00000 n +0000209813 00000 n +0000211488 00000 n +0000211635 00000 n +0000211760 00000 n +0000213322 00000 n +0000213469 00000 n +0000213594 00000 n +0000215486 00000 n +0000215633 00000 n +0000215758 00000 n +0000217454 00000 n +0000217601 00000 n +0000217726 00000 n +0000219282 00000 n +0000219429 00000 n +0000219554 00000 n +0000221075 00000 n +0000221222 00000 n +0000221335 00000 n +0000221910 00000 n +0000222057 00000 n +0000222158 00000 n +0000222669 00000 n +0000222848 00000 n +0000222955 00000 n +0000223061 00000 n +0000223167 00000 n +0000223304 00000 n +0000225108 00000 n +0000225295 00000 n +0000225404 00000 n +0000225512 00000 n +0000225619 00000 n +0000225729 00000 n +0000225866 00000 n +0000228426 00000 n +0000228693 00000 n +0000228803 00000 n +0000228913 00000 n +0000229023 00000 n +0000229133 00000 n +0000229243 00000 n +0000229352 00000 n +0000229462 00000 n +0000229572 00000 n +0000229681 00000 n +0000229791 00000 n +0000229900 00000 n +0000230010 00000 n +0000230118 00000 n +0000230228 00000 n +0000230341 00000 n +0000231931 00000 n +0000232198 00000 n +0000232308 00000 n +0000232417 00000 n +0000232527 00000 n +0000232636 00000 n +0000232746 00000 n +0000232856 00000 n +0000232965 00000 n +0000233075 00000 n +0000233184 00000 n +0000233294 00000 n +0000233403 00000 n +0000233513 00000 n +0000233623 00000 n +0000233731 00000 n +0000233844 00000 n +0000235298 00000 n +0000235565 00000 n +0000235674 00000 n +0000235784 00000 n +0000235894 00000 n +0000236004 00000 n +0000236112 00000 n +0000236222 00000 n +0000236332 00000 n +0000236442 00000 n +0000236551 00000 n +0000236661 00000 n +0000236770 00000 n +0000236880 00000 n +0000236990 00000 n +0000237100 00000 n +0000237213 00000 n +0000238711 00000 n +0000238978 00000 n +0000239087 00000 n +0000239196 00000 n +0000239306 00000 n +0000239416 00000 n +0000239525 00000 n +0000239635 00000 n +0000239744 00000 n +0000239854 00000 n +0000239964 00000 n +0000240074 00000 n +0000240184 00000 n +0000240293 00000 n +0000240403 00000 n +0000240513 00000 n +0000240626 00000 n +0000242121 00000 n +0000242364 00000 n +0000242474 00000 n +0000242584 00000 n +0000242693 00000 n +0000242803 00000 n +0000242913 00000 n +0000243022 00000 n +0000243132 00000 n +0000243242 00000 n +0000243351 00000 n +0000243461 00000 n +0000243571 00000 n +0000243684 00000 n +0000245384 00000 n +0000245595 00000 n +0000245702 00000 n +0000245807 00000 n +0000245914 00000 n +0000246021 00000 n +0000246128 00000 n +0000246235 00000 n +0000246341 00000 n +0000246466 00000 n +0000247995 00000 n +0000248294 00000 n +0000248442 00000 n +0000248549 00000 n +0000248656 00000 n +0000248762 00000 n +0000248869 00000 n +0000248976 00000 n +0000249082 00000 n +0000249189 00000 n +0000249296 00000 n +0000249402 00000 n +0000249509 00000 n +0000249616 00000 n +0000249723 00000 n +0000249830 00000 n +0000249937 00000 n +0000250044 00000 n +0000250151 00000 n +0000250258 00000 n +0000250407 00000 n +0000252279 00000 n +0000252466 00000 n +0000252613 00000 n +0000252833 00000 n +0000253047 00000 n +0000253257 00000 n +0000253394 00000 n +0000255181 00000 n +0000255368 00000 n +0000255517 00000 n +0000255671 00000 n +0000255822 00000 n +0000256040 00000 n +0000256177 00000 n +0000258195 00000 n +0000258374 00000 n +0000258517 00000 n +0000258662 00000 n +0000258890 00000 n +0000259027 00000 n +0000261183 00000 n +0000261346 00000 n +0000261490 00000 n +0000261627 00000 n +0000263557 00000 n +0000263744 00000 n +0000263893 00000 n +0000264103 00000 n +0000264312 00000 n +0000264528 00000 n +0000264665 00000 n +0000266539 00000 n +0000266718 00000 n +0000266864 00000 n +0000267079 00000 n +0000267293 00000 n +0000267430 00000 n +0000269343 00000 n +0000269490 00000 n +0000269627 00000 n +0000271089 00000 n +0000271260 00000 n +0000271407 00000 n +0000271551 00000 n +0000271688 00000 n +0000273494 00000 n +0000273673 00000 n +0000273827 00000 n +0000274042 00000 n +0000274255 00000 n +0000274392 00000 n +0000276387 00000 n +0000276582 00000 n +0000276726 00000 n +0000276873 00000 n +0000277016 00000 n +0000277230 00000 n +0000277443 00000 n +0000277580 00000 n +0000279531 00000 n +0000279718 00000 n +0000279870 00000 n +0000280085 00000 n +0000280302 00000 n +0000280514 00000 n +0000280651 00000 n +0000282499 00000 n +0000282686 00000 n +0000282844 00000 n +0000282988 00000 n +0000283202 00000 n +0000283415 00000 n +0000283552 00000 n +0000285395 00000 n +0000285590 00000 n +0000285733 00000 n +0000285949 00000 n +0000286164 00000 n +0000286376 00000 n +0000286586 00000 n +0000286723 00000 n +0000288501 00000 n +0000288680 00000 n +0000288829 00000 n +0000288973 00000 n +0000289191 00000 n +0000289328 00000 n +0000291151 00000 n +0000291322 00000 n +0000291532 00000 n +0000291741 00000 n +0000291866 00000 n +0000293615 00000 n +0000293762 00000 n +0000293899 00000 n +0000295500 00000 n +0000295679 00000 n +0000295825 00000 n +0000296037 00000 n +0000296248 00000 n +0000296385 00000 n +0000298324 00000 n +0000298511 00000 n +0000298656 00000 n +0000298799 00000 n +0000299014 00000 n +0000299228 00000 n +0000299365 00000 n +0000301176 00000 n +0000301339 00000 n +0000301554 00000 n +0000301679 00000 n +0000303384 00000 n +0000303531 00000 n +0000303656 00000 n +0000304961 00000 n +0000305108 00000 n +0000305233 00000 n +0000306687 00000 n +0000306834 00000 n +0000306947 00000 n +0000308261 00000 n +0000308408 00000 n +0000308509 00000 n +0000309000 00000 n +0000309195 00000 n +0000309302 00000 n +0000309408 00000 n +0000309515 00000 n +0000309622 00000 n +0000309729 00000 n +0000309854 00000 n +0000311929 00000 n +0000312076 00000 n +0000312189 00000 n +0000314084 00000 n +0000314303 00000 n +0000314412 00000 n +0000314521 00000 n +0000314631 00000 n +0000314741 00000 n +0000314851 00000 n +0000314961 00000 n +0000315071 00000 n +0000315181 00000 n +0000315294 00000 n +0000316808 00000 n +0000317211 00000 n +0000317321 00000 n +0000317430 00000 n +0000317540 00000 n +0000317650 00000 n +0000317760 00000 n +0000317870 00000 n +0000317980 00000 n +0000318090 00000 n +0000318199 00000 n +0000318309 00000 n +0000318419 00000 n +0000318528 00000 n +0000318638 00000 n +0000318748 00000 n +0000318858 00000 n +0000318968 00000 n +0000319077 00000 n +0000319187 00000 n +0000319297 00000 n +0000319407 00000 n +0000319516 00000 n +0000319626 00000 n +0000319736 00000 n +0000319846 00000 n +0000319956 00000 n +0000320066 00000 n +0000320176 00000 n +0000320286 00000 n +0000320396 00000 n +0000320506 00000 n +0000320616 00000 n +0000320729 00000 n +0000322319 00000 n +0000322490 00000 n +0000322638 00000 n +0000322785 00000 n +0000322910 00000 n +0000324317 00000 n +0000324488 00000 n +0000324637 00000 n +0000324858 00000 n +0000324983 00000 n +0000326338 00000 n +0000326485 00000 n +0000326598 00000 n +0000328085 00000 n +0000328232 00000 n +0000328345 00000 n +0000329617 00000 n +0000329796 00000 n +0000329950 00000 n +0000330101 00000 n +0000330246 00000 n +0000330371 00000 n +0000331780 00000 n +0000331943 00000 n +0000332091 00000 n +0000332216 00000 n +0000333726 00000 n +0000333921 00000 n +0000334070 00000 n +0000334215 00000 n +0000334359 00000 n +0000334503 00000 n +0000334649 00000 n +0000334774 00000 n +0000336588 00000 n +0000336735 00000 n +0000336848 00000 n +0000338064 00000 n +0000338251 00000 n +0000338395 00000 n +0000338598 00000 n +0000338799 00000 n +0000339000 00000 n +0000339125 00000 n +0000340631 00000 n +0000340802 00000 n +0000341003 00000 n +0000341206 00000 n +0000341319 00000 n +0000342420 00000 n +0000342567 00000 n +0000342680 00000 n +0000344312 00000 n +0000344459 00000 n +0000344572 00000 n +0000345741 00000 n +0000345904 00000 n +0000346059 00000 n +0000346184 00000 n +0000347611 00000 n +0000347790 00000 n +0000347940 00000 n +0000348091 00000 n +0000348235 00000 n +0000348360 00000 n +0000349959 00000 n +0000350122 00000 n +0000350266 00000 n +0000350391 00000 n +0000351738 00000 n +0000351901 00000 n +0000352124 00000 n +0000352237 00000 n +0000353439 00000 n +0000353602 00000 n +0000353814 00000 n +0000353927 00000 n +0000355482 00000 n +0000355645 00000 n +0000355788 00000 n +0000355913 00000 n +0000357315 00000 n +0000357486 00000 n +0000357629 00000 n +0000357782 00000 n +0000357907 00000 n +0000359437 00000 n +0000359584 00000 n +0000359697 00000 n +0000361110 00000 n +0000361273 00000 n +0000361431 00000 n +0000361556 00000 n +0000363485 00000 n +0000363632 00000 n +0000363745 00000 n +0000365206 00000 n +0000365369 00000 n +0000365516 00000 n +0000365641 00000 n +0000367281 00000 n +0000367452 00000 n +0000367595 00000 n +0000367821 00000 n +0000367946 00000 n +0000369724 00000 n +0000369871 00000 n +0000369984 00000 n +0000371329 00000 n +0000371492 00000 n +0000371641 00000 n +0000371766 00000 n +0000373276 00000 n +0000373423 00000 n +0000373536 00000 n +0000374985 00000 n +0000375156 00000 n +0000375307 00000 n +0000375506 00000 n +0000375631 00000 n +0000377143 00000 n +0000377314 00000 n +0000377458 00000 n +0000377681 00000 n +0000377806 00000 n +0000379445 00000 n +0000379616 00000 n +0000379762 00000 n +0000379905 00000 n +0000380030 00000 n +0000381464 00000 n +0000381643 00000 n +0000381844 00000 n +0000382045 00000 n +0000382191 00000 n +0000382316 00000 n +0000383983 00000 n +0000384146 00000 n +0000384290 00000 n +0000384415 00000 n +0000386028 00000 n +0000386175 00000 n +0000386288 00000 n +0000387598 00000 n +0000387785 00000 n +0000387936 00000 n +0000388079 00000 n +0000388223 00000 n +0000388374 00000 n +0000388511 00000 n +0000390084 00000 n +0000390247 00000 n +0000390448 00000 n +0000390561 00000 n +0000391241 00000 n +0000391388 00000 n +0000391489 00000 n +0000391970 00000 n +0000392117 00000 n +0000392218 00000 n +0000393900 00000 n +0000394047 00000 n +0000394172 00000 n +0000395752 00000 n +0000395899 00000 n +0000396012 00000 n +0000397358 00000 n +0000397505 00000 n +0000397618 00000 n +0000398643 00000 n +0000398950 00000 n +0000399057 00000 n +0000399164 00000 n +0000399271 00000 n +0000399378 00000 n +0000399485 00000 n +0000399592 00000 n +0000399698 00000 n +0000399805 00000 n +0000399912 00000 n +0000400018 00000 n +0000400124 00000 n +0000400230 00000 n +0000400337 00000 n +0000400445 00000 n +0000400553 00000 n +0000400661 00000 n +0000400769 00000 n +0000400875 00000 n +0000401001 00000 n +0000402977 00000 n +0000403279 00000 n +0000403387 00000 n +0000403494 00000 n +0000403602 00000 n +0000403709 00000 n +0000403817 00000 n +0000403925 00000 n +0000404032 00000 n +0000404140 00000 n +0000404247 00000 n +0000404354 00000 n +0000404461 00000 n +0000404568 00000 n +0000404676 00000 n +0000404782 00000 n +0000404893 00000 n +0000405001 00000 n +0000405127 00000 n +0000407325 00000 n +0000407475 00000 n +0000407601 00000 n +0000409393 00000 n +0000409543 00000 n +0000409681 00000 n +0000411174 00000 n +0000411324 00000 n +0000411450 00000 n +0000412756 00000 n +0000412906 00000 n +0000413056 00000 n +0000415092 00000 n +0000415242 00000 n +0000415356 00000 n +0000416659 00000 n +0000416826 00000 n +0000416976 00000 n +0000417102 00000 n +0000418859 00000 n +0000419009 00000 n +0000419135 00000 n +0000420711 00000 n +0000420861 00000 n +0000420987 00000 n +0000423070 00000 n +0000423220 00000 n +0000423346 00000 n +0000425119 00000 n +0000425269 00000 n +0000425395 00000 n +0000427256 00000 n +0000427406 00000 n +0000427532 00000 n +0000429585 00000 n +0000429735 00000 n +0000429861 00000 n +0000431691 00000 n +0000431841 00000 n +0000431967 00000 n +0000433805 00000 n +0000433955 00000 n +0000434081 00000 n +0000435725 00000 n +0000435875 00000 n +0000436001 00000 n +0000437824 00000 n +0000437974 00000 n +0000438100 00000 n +0000440217 00000 n +0000440367 00000 n +0000440493 00000 n +0000442415 00000 n +0000442565 00000 n +0000442691 00000 n +0000444551 00000 n +0000444701 00000 n +0000444827 00000 n +0000446258 00000 n +0000446425 00000 n +0000446581 00000 n +0000446719 00000 n +0000448403 00000 n +0000448606 00000 n +0000448757 00000 n +0000448869 00000 n +0000448978 00000 n +0000449086 00000 n +0000449198 00000 n +0000449336 00000 n +0000451728 00000 n +0000451878 00000 n +0000452004 00000 n +0000453600 00000 n +0000453767 00000 n +0000453993 00000 n +0000454131 00000 n +0000455926 00000 n +0000456076 00000 n +0000456214 00000 n +0000458579 00000 n +0000458729 00000 n +0000458867 00000 n +0000460577 00000 n +0000460727 00000 n +0000460865 00000 n +0000463015 00000 n +0000463165 00000 n +0000463291 00000 n +0000464815 00000 n +0000464965 00000 n +0000465091 00000 n +0000467001 00000 n +0000467168 00000 n +0000467310 00000 n +0000467436 00000 n +0000468881 00000 n +0000469057 00000 n +0000469205 00000 n +0000469313 00000 n +0000469451 00000 n +0000471037 00000 n +0000471187 00000 n +0000471313 00000 n +0000473222 00000 n +0000473398 00000 n +0000473546 00000 n +0000473702 00000 n +0000473840 00000 n +0000475842 00000 n +0000476009 00000 n +0000476121 00000 n +0000476247 00000 n +0000477782 00000 n +0000477932 00000 n +0000478058 00000 n +0000479493 00000 n +0000479660 00000 n +0000479801 00000 n +0000479939 00000 n +0000481781 00000 n +0000481931 00000 n +0000482057 00000 n +0000483190 00000 n +0000483340 00000 n +0000483466 00000 n +0000485195 00000 n +0000485345 00000 n +0000485471 00000 n +0000487062 00000 n +0000487238 00000 n +0000487388 00000 n +0000487498 00000 n +0000487636 00000 n +0000489463 00000 n +0000489613 00000 n +0000489739 00000 n +0000491424 00000 n +0000491609 00000 n +0000491756 00000 n +0000491868 00000 n +0000491980 00000 n +0000492118 00000 n +0000494088 00000 n +0000494238 00000 n +0000494364 00000 n +0000495766 00000 n +0000495916 00000 n +0000496042 00000 n +0000497574 00000 n +0000497741 00000 n +0000497888 00000 n +0000498026 00000 n +0000499772 00000 n +0000499975 00000 n +0000500117 00000 n +0000500229 00000 n +0000500341 00000 n +0000500448 00000 n +0000500560 00000 n +0000500698 00000 n +0000503035 00000 n +0000503202 00000 n +0000503310 00000 n +0000503448 00000 n +0000504968 00000 n +0000505118 00000 n +0000505256 00000 n +0000506816 00000 n +0000506966 00000 n +0000507104 00000 n +0000508721 00000 n +0000508871 00000 n +0000508997 00000 n +0000510470 00000 n +0000510620 00000 n +0000510758 00000 n +0000512279 00000 n +0000512429 00000 n +0000512567 00000 n +0000514290 00000 n +0000514457 00000 n +0000514683 00000 n +0000514821 00000 n +0000516558 00000 n +0000516708 00000 n +0000516834 00000 n +0000518743 00000 n +0000518893 00000 n +0000519031 00000 n +0000520923 00000 n +0000521073 00000 n +0000521211 00000 n +0000523349 00000 n +0000523499 00000 n +0000523613 00000 n +0000524691 00000 n +0000524841 00000 n +0000524955 00000 n +0000525940 00000 n +0000526116 00000 n +0000526260 00000 n +0000526372 00000 n +0000526522 00000 n +0000528448 00000 n +0000528598 00000 n +0000528736 00000 n +0000530273 00000 n +0000530423 00000 n +0000530549 00000 n +0000532409 00000 n +0000532559 00000 n +0000532697 00000 n +0000534466 00000 n +0000534633 00000 n +0000534860 00000 n +0000534998 00000 n +0000536484 00000 n +0000536651 00000 n +0000536796 00000 n +0000536934 00000 n +0000538842 00000 n +0000539036 00000 n +0000539145 00000 n +0000539253 00000 n +0000539365 00000 n +0000539477 00000 n +0000539615 00000 n +0000541348 00000 n +0000541498 00000 n +0000541624 00000 n +0000543139 00000 n +0000543315 00000 n +0000543471 00000 n +0000543583 00000 n +0000543721 00000 n +0000545712 00000 n +0000545862 00000 n +0000545988 00000 n +0000547796 00000 n +0000547946 00000 n +0000548072 00000 n +0000550046 00000 n +0000550196 00000 n +0000550322 00000 n +0000552036 00000 n +0000552239 00000 n +0000552383 00000 n +0000552492 00000 n +0000552603 00000 n +0000552712 00000 n +0000552820 00000 n +0000552958 00000 n +0000555238 00000 n +0000555388 00000 n +0000555526 00000 n +0000557256 00000 n +0000557423 00000 n +0000557650 00000 n +0000557788 00000 n +0000559574 00000 n +0000559724 00000 n +0000559862 00000 n +0000561610 00000 n +0000561760 00000 n +0000561898 00000 n +0000563386 00000 n +0000563536 00000 n +0000563674 00000 n +0000565376 00000 n +0000565526 00000 n +0000565664 00000 n +0000567508 00000 n +0000567658 00000 n +0000567784 00000 n +0000569216 00000 n +0000569366 00000 n +0000569492 00000 n +0000570936 00000 n +0000571086 00000 n +0000571212 00000 n +0000572714 00000 n +0000572864 00000 n +0000572990 00000 n +0000574690 00000 n +0000574840 00000 n +0000574966 00000 n +0000576924 00000 n +0000577074 00000 n +0000577200 00000 n +0000579106 00000 n +0000579256 00000 n +0000579382 00000 n +0000581234 00000 n +0000581384 00000 n +0000581510 00000 n +0000583486 00000 n +0000583653 00000 n +0000583880 00000 n +0000584018 00000 n +0000586058 00000 n +0000586208 00000 n +0000586334 00000 n +0000588325 00000 n +0000588475 00000 n +0000588601 00000 n +0000590233 00000 n +0000590427 00000 n +0000590580 00000 n +0000590692 00000 n +0000590804 00000 n +0000590916 00000 n +0000591042 00000 n +0000593283 00000 n +0000593433 00000 n +0000593559 00000 n +0000595160 00000 n +0000595363 00000 n +0000595520 00000 n +0000595676 00000 n +0000595788 00000 n +0000595896 00000 n +0000596002 00000 n +0000596128 00000 n +0000598205 00000 n +0000598355 00000 n +0000598493 00000 n +0000600100 00000 n +0000600250 00000 n +0000600388 00000 n +0000602341 00000 n +0000602491 00000 n +0000602629 00000 n +0000604635 00000 n +0000604811 00000 n +0000604920 00000 n +0000605028 00000 n +0000605154 00000 n +0000606850 00000 n +0000607000 00000 n +0000607138 00000 n +0000608410 00000 n +0000608595 00000 n +0000608743 00000 n +0000608854 00000 n +0000608964 00000 n +0000609102 00000 n +0000611285 00000 n +0000611452 00000 n +0000611559 00000 n +0000611685 00000 n +0000613453 00000 n +0000613603 00000 n +0000613729 00000 n +0000614892 00000 n +0000615042 00000 n +0000615180 00000 n +0000616756 00000 n +0000616950 00000 n +0000617094 00000 n +0000617205 00000 n +0000617314 00000 n +0000617422 00000 n +0000617560 00000 n +0000619623 00000 n +0000619790 00000 n +0000620017 00000 n +0000620155 00000 n +0000621918 00000 n +0000622068 00000 n +0000622206 00000 n +0000623946 00000 n +0000624140 00000 n +0000624291 00000 n +0000624403 00000 n +0000624511 00000 n +0000624619 00000 n +0000624757 00000 n +0000626805 00000 n +0000626955 00000 n +0000627081 00000 n +0000628545 00000 n +0000628695 00000 n +0000628833 00000 n +0000630870 00000 n +0000631020 00000 n +0000631158 00000 n +0000633426 00000 n +0000633576 00000 n +0000633702 00000 n +0000635911 00000 n +0000636061 00000 n +0000636199 00000 n +0000638505 00000 n +0000638655 00000 n +0000638781 00000 n +0000640685 00000 n +0000640835 00000 n +0000640961 00000 n +0000642689 00000 n +0000642883 00000 n +0000643035 00000 n +0000643146 00000 n +0000643258 00000 n +0000643370 00000 n +0000643496 00000 n +0000645631 00000 n +0000645781 00000 n +0000645907 00000 n +0000647286 00000 n +0000647436 00000 n +0000647574 00000 n +0000649375 00000 n +0000649525 00000 n +0000649651 00000 n +0000651248 00000 n +0000651398 00000 n +0000651536 00000 n +0000653062 00000 n +0000653212 00000 n +0000653350 00000 n +0000655131 00000 n +0000655281 00000 n +0000655407 00000 n +0000656800 00000 n +0000656950 00000 n +0000657076 00000 n +0000658641 00000 n +0000658817 00000 n +0000658969 00000 n +0000659081 00000 n +0000659219 00000 n +0000661162 00000 n +0000661312 00000 n +0000661450 00000 n +0000663109 00000 n +0000663259 00000 n +0000663385 00000 n +0000664913 00000 n +0000665063 00000 n +0000665189 00000 n +0000666871 00000 n +0000667021 00000 n +0000667159 00000 n +0000668733 00000 n +0000668883 00000 n +0000669009 00000 n +0000670475 00000 n +0000670625 00000 n +0000670751 00000 n +0000672504 00000 n +0000672654 00000 n +0000672780 00000 n +0000674480 00000 n +0000674656 00000 n +0000674808 00000 n +0000674920 00000 n +0000675058 00000 n +0000676959 00000 n +0000677109 00000 n +0000677235 00000 n +0000678517 00000 n +0000678667 00000 n +0000678805 00000 n +0000680303 00000 n +0000680453 00000 n +0000680579 00000 n +0000682096 00000 n +0000682263 00000 n +0000682404 00000 n +0000682530 00000 n +0000683955 00000 n +0000684105 00000 n +0000684231 00000 n +0000685516 00000 n +0000685666 00000 n +0000685792 00000 n +0000687351 00000 n +0000687518 00000 n +0000687661 00000 n +0000687799 00000 n +0000689267 00000 n +0000689434 00000 n +0000689585 00000 n +0000689723 00000 n +0000691991 00000 n +0000692176 00000 n +0000692323 00000 n +0000692435 00000 n +0000692547 00000 n +0000692685 00000 n +0000694598 00000 n +0000694748 00000 n +0000694886 00000 n +0000696429 00000 n +0000696605 00000 n +0000696753 00000 n +0000696894 00000 n +0000697032 00000 n +0000698601 00000 n +0000698777 00000 n +0000698921 00000 n +0000699032 00000 n +0000699170 00000 n +0000700982 00000 n +0000701167 00000 n +0000701275 00000 n +0000701383 00000 n +0000701491 00000 n +0000701629 00000 n +0000703415 00000 n +0000703565 00000 n +0000703691 00000 n +0000705361 00000 n +0000705555 00000 n +0000705660 00000 n +0000705768 00000 n +0000705876 00000 n +0000705984 00000 n +0000706122 00000 n +0000708083 00000 n +0000708233 00000 n +0000708359 00000 n +0000710514 00000 n +0000710664 00000 n +0000710790 00000 n +0000712673 00000 n +0000712823 00000 n +0000712949 00000 n +0000714426 00000 n +0000714576 00000 n +0000714690 00000 n +0000715243 00000 n +0000715428 00000 n +0000715537 00000 n +0000715646 00000 n +0000715755 00000 n +0000715893 00000 n +0000717606 00000 n +0000717756 00000 n +0000717882 00000 n +0000719276 00000 n +0000719426 00000 n +0000719552 00000 n +0000721455 00000 n +0000721605 00000 n +0000721743 00000 n +0000723626 00000 n +0000723776 00000 n +0000723890 00000 n +0000724965 00000 n +0000725115 00000 n +0000725217 00000 n +0000725715 00000 n +0000725891 00000 n +0000726000 00000 n +0000726109 00000 n +0000726235 00000 n +0000727483 00000 n +0000727633 00000 n +0000727747 00000 n +0000728829 00000 n +0000728979 00000 n +0000729093 00000 n +0000730183 00000 n +0000730333 00000 n +0000730447 00000 n +0000731653 00000 n +0000731803 00000 n +0000731917 00000 n +0000733015 00000 n +0000733165 00000 n +0000733279 00000 n +0000734373 00000 n +0000734523 00000 n +0000734637 00000 n +0000735837 00000 n +0000735987 00000 n +0000736101 00000 n +0000737159 00000 n +0000737309 00000 n +0000737423 00000 n +0000738631 00000 n +0000738781 00000 n +0000738895 00000 n +0000739898 00000 n +0000740048 00000 n +0000740162 00000 n +0000741273 00000 n +0000741423 00000 n +0000741537 00000 n +0000742751 00000 n +0000742901 00000 n +0000743015 00000 n +0000744263 00000 n +0000744413 00000 n +0000744527 00000 n +0000745575 00000 n +0000745725 00000 n +0000745839 00000 n +0000746921 00000 n +0000747071 00000 n +0000747185 00000 n +0000748366 00000 n +0000748516 00000 n +0000748630 00000 n +0000749599 00000 n +0000749749 00000 n +0000749863 00000 n +0000750982 00000 n +0000751132 00000 n +0000751246 00000 n +0000752491 00000 n +0000752641 00000 n +0000752755 00000 n +0000753773 00000 n +0000753923 00000 n +0000754037 00000 n +0000755162 00000 n +0000755312 00000 n +0000755426 00000 n +0000756491 00000 n +0000756641 00000 n +0000756755 00000 n +0000758021 00000 n +0000758171 00000 n +0000758285 00000 n +0000759263 00000 n +0000759413 00000 n +0000759527 00000 n +0000760709 00000 n +0000760859 00000 n +0000760973 00000 n +0000762052 00000 n +0000762202 00000 n +0000762316 00000 n +0000763383 00000 n +0000763533 00000 n +0000763647 00000 n +0000764781 00000 n +0000764931 00000 n +0000765045 00000 n +0000766318 00000 n +0000766468 00000 n +0000766582 00000 n +0000767740 00000 n +0000767890 00000 n +0000768004 00000 n +0000769239 00000 n +0000769389 00000 n +0000769503 00000 n +0000770736 00000 n +0000770886 00000 n +0000771000 00000 n +0000772217 00000 n +0000772367 00000 n +0000772481 00000 n +0000773625 00000 n +0000773775 00000 n +0000773889 00000 n +0000775008 00000 n +0000775158 00000 n +0000775272 00000 n +0000776251 00000 n +0000776401 00000 n +0000776515 00000 n +0000777599 00000 n +0000777749 00000 n +0000777863 00000 n +0000778978 00000 n +0000779128 00000 n +0000779242 00000 n +0000780375 00000 n +0000780525 00000 n +0000780639 00000 n +0000781840 00000 n +0000781990 00000 n +0000782104 00000 n +0000783255 00000 n +0000783405 00000 n +0000783519 00000 n +0000784391 00000 n +0000784541 00000 n +0000784655 00000 n +0000785650 00000 n +0000785800 00000 n +0000785914 00000 n +0000786983 00000 n +0000787133 00000 n +0000787247 00000 n +0000788375 00000 n +0000788525 00000 n +0000788639 00000 n +0000789800 00000 n +0000789950 00000 n +0000790064 00000 n +0000791344 00000 n +0000791494 00000 n +0000791608 00000 n +0000792679 00000 n +0000792829 00000 n +0000792943 00000 n +0000794075 00000 n +0000794225 00000 n +0000794339 00000 n +0000795449 00000 n +0000795599 00000 n +0000795713 00000 n +0000796897 00000 n +0000797047 00000 n +0000797161 00000 n +0000798187 00000 n +0000798337 00000 n +0000798451 00000 n +0000799539 00000 n +0000799689 00000 n +0000799803 00000 n +0000800913 00000 n +0000801063 00000 n +0000801177 00000 n +0000802227 00000 n +0000802377 00000 n +0000802491 00000 n +0000803623 00000 n +0000803773 00000 n +0000803887 00000 n +0000805054 00000 n +0000805204 00000 n +0000805318 00000 n +0000806469 00000 n +0000806619 00000 n +0000806733 00000 n +0000807888 00000 n +0000808038 00000 n +0000808152 00000 n +0000809293 00000 n +0000809443 00000 n +0000809557 00000 n +0000810559 00000 n +0000810709 00000 n +0000810823 00000 n +0000811973 00000 n +0000812123 00000 n +0000812237 00000 n +0000813239 00000 n +0000813389 00000 n +0000813503 00000 n +0000814700 00000 n +0000814850 00000 n +0000814964 00000 n +0000815964 00000 n +0000816114 00000 n +0000816228 00000 n +0000817365 00000 n +0000817515 00000 n +0000817629 00000 n +0000818700 00000 n +0000818850 00000 n +0000818964 00000 n +0000820098 00000 n +0000820248 00000 n +0000820362 00000 n +0000821409 00000 n +0000821559 00000 n +0000821673 00000 n +0000822601 00000 n +0000822751 00000 n +0000822865 00000 n +0000823861 00000 n +0000824011 00000 n +0000824125 00000 n +0000825121 00000 n +0000825271 00000 n +0000825385 00000 n +0000826283 00000 n +0000826433 00000 n +0000826547 00000 n +0000827416 00000 n +0000827566 00000 n +0000827680 00000 n +0000828527 00000 n +0000828677 00000 n +0000828791 00000 n +0000829820 00000 n +0000829970 00000 n +0000830084 00000 n +0000831179 00000 n +0000831329 00000 n +0000831443 00000 n +0000832416 00000 n +0000832566 00000 n +0000832680 00000 n +0000833652 00000 n +0000833802 00000 n +0000833916 00000 n +0000834897 00000 n +0000835047 00000 n +0000835161 00000 n +0000836133 00000 n +0000836283 00000 n +0000836397 00000 n +0000837315 00000 n +0000837465 00000 n +0000837579 00000 n +0000838473 00000 n +0000838623 00000 n +0000838737 00000 n +0000839654 00000 n +0000839804 00000 n +0000839918 00000 n +0000840775 00000 n +0000840925 00000 n +0000841039 00000 n +0000841862 00000 n +0000842012 00000 n +0000842126 00000 n +0000842961 00000 n +0000843111 00000 n +0000843225 00000 n +0000844040 00000 n +0000844190 00000 n +0000844304 00000 n +0000845111 00000 n +0000845261 00000 n +0000845375 00000 n +0000846244 00000 n +0000846394 00000 n +0000846508 00000 n +0000847399 00000 n +0000847549 00000 n +0000847663 00000 n +0000848507 00000 n +0000848657 00000 n +0000848771 00000 n +0000849776 00000 n +0000849926 00000 n +0000850040 00000 n +0000850928 00000 n +0000851078 00000 n +0000851192 00000 n +0000852072 00000 n +0000852222 00000 n +0000852336 00000 n +0000853184 00000 n +0000853334 00000 n +0000853448 00000 n +0000854298 00000 n +0000854448 00000 n +0000854562 00000 n +0000855437 00000 n +0000855587 00000 n +0000855701 00000 n +0000856601 00000 n +0000856751 00000 n +0000856865 00000 n +0000857763 00000 n +0000857913 00000 n +0000858027 00000 n +0000858823 00000 n +0000858973 00000 n +0000859087 00000 n +0000859882 00000 n +0000860032 00000 n +0000860146 00000 n +0000860955 00000 n +0000861105 00000 n +0000861219 00000 n +0000862084 00000 n +0000862234 00000 n +0000862348 00000 n +0000863196 00000 n +0000863346 00000 n +0000863460 00000 n +0000864249 00000 n +0000864399 00000 n +0000864513 00000 n +0000865404 00000 n +0000865554 00000 n +0000865668 00000 n +0000866702 00000 n +0000866852 00000 n +0000866966 00000 n +0000868047 00000 n +0000868197 00000 n +0000868311 00000 n +0000869319 00000 n +0000869469 00000 n +0000869583 00000 n +0000870378 00000 n +0000870528 00000 n +0000870642 00000 n +0000871508 00000 n +0000871658 00000 n +0000871772 00000 n +0000872606 00000 n +0000872756 00000 n +0000872870 00000 n +0000873647 00000 n +0000873797 00000 n +0000873911 00000 n +0000874757 00000 n +0000874907 00000 n +0000875021 00000 n +0000875870 00000 n +0000876020 00000 n +0000876134 00000 n +0000876970 00000 n +0000877120 00000 n +0000877234 00000 n +0000878074 00000 n +0000878224 00000 n +0000878338 00000 n +0000879265 00000 n +0000879415 00000 n +0000879529 00000 n +0000880159 00000 n +0000880767 00000 n +0000881320 00000 n +0000886133 00000 n +0000886290 00000 n +0000886740 00000 n +0000887110 00000 n +0000890942 00000 n +0000891516 00000 n +0000892165 00000 n +0000897933 00000 n +0000898411 00000 n +0000898765 00000 n +0000901336 00000 n +0000901508 00000 n +0000901796 00000 n +0000901994 00000 n +0000902361 00000 n +0000902417 00000 n +0000902468 00000 n +0000903001 00000 n +0000904254 00000 n +0000905598 00000 n +0000906942 00000 n +0000908286 00000 n +0000909630 00000 n +0000910974 00000 n +0000912318 00000 n +0000913662 00000 n +0000915006 00000 n +0000916350 00000 n +0000917694 00000 n +0000919038 00000 n +0000920382 00000 n +0000921726 00000 n +0000923070 00000 n +0000924414 00000 n +0000925758 00000 n +0000927102 00000 n +0000928446 00000 n +0000929790 00000 n +0000931134 00000 n +0000932478 00000 n +0000933822 00000 n +0000935166 00000 n +0000936510 00000 n +0000937854 00000 n +0000939198 00000 n +0000940631 00000 n +0000942041 00000 n +0000943451 00000 n +0000944861 00000 n +0000946271 00000 n +0000947681 00000 n +0000949127 00000 n +0000950603 00000 n +0000952079 00000 n +0000953555 00000 n +0000955031 00000 n +0000956507 00000 n +0000957983 00000 n +0000959459 00000 n +0000960935 00000 n +0000962411 00000 n +0000963820 00000 n +0000966964 00000 n +0000969912 00000 n +0000972841 00000 n +0000975775 00000 n +0000978595 00000 n +0000981421 00000 n +0000982429 00000 n +0000983435 00000 n +0000984444 00000 n +0000985449 00000 n +0000986438 00000 n +0000987186 00000 n +0000987239 00000 n +0000987292 00000 n +0000987345 00000 n +0000987398 00000 n +0000987451 00000 n +0000987504 00000 n +0000987557 00000 n +0000987610 00000 n +0000987663 00000 n +0000987716 00000 n +0000987769 00000 n +0000987822 00000 n +0000987875 00000 n +0000987928 00000 n +0000987981 00000 n +0000988034 00000 n +0000988087 00000 n +0000988140 00000 n +0000988193 00000 n +0000988246 00000 n +0000988299 00000 n +0000988352 00000 n +0000988405 00000 n +0000988458 00000 n +0000988511 00000 n +0000988564 00000 n +0000988617 00000 n +0000988670 00000 n +0000988723 00000 n +0000988776 00000 n +0000988829 00000 n +0000988882 00000 n +0000988935 00000 n +0000988988 00000 n +0000989041 00000 n +0000989094 00000 n +0000989147 00000 n +0000989200 00000 n +0000989253 00000 n +0000989306 00000 n +0000989359 00000 n +0000989412 00000 n +0000989465 00000 n +0000989518 00000 n +0000989571 00000 n +0000989624 00000 n +0000989677 00000 n +0000989730 00000 n +0000989783 00000 n +0000989836 00000 n +0000989890 00000 n +0000989944 00000 n +0000989998 00000 n +0000990051 00000 n +0000990105 00000 n +0000990159 00000 n +0000990213 00000 n +0000990267 00000 n +0000990321 00000 n +0000990375 00000 n +0000990429 00000 n +0000990483 00000 n +0000990537 00000 n +0000990591 00000 n +0000990644 00000 n +0000990698 00000 n +0000990752 00000 n +0000990806 00000 n +0000990860 00000 n +0000990914 00000 n +0000990968 00000 n +0000991022 00000 n +0000991076 00000 n +0000991130 00000 n +0000991184 00000 n +0000991237 00000 n +0000991291 00000 n +0000991345 00000 n +0000991399 00000 n +0000991453 00000 n +0000991507 00000 n +0000991561 00000 n +0000991615 00000 n +0000991669 00000 n +0000991723 00000 n +0000991777 00000 n +0000991830 00000 n +0000991884 00000 n +0000991938 00000 n +0000991992 00000 n +0000992046 00000 n +0000992100 00000 n +0000992154 00000 n +0000992208 00000 n +0000992262 00000 n +0000992316 00000 n +0000992369 00000 n +0000992422 00000 n +0000992474 00000 n +0000992527 00000 n +0000992580 00000 n +0000992633 00000 n +0000992686 00000 n +0000992739 00000 n +0000992792 00000 n +0000992845 00000 n +0000992898 00000 n +0000992951 00000 n +0000993004 00000 n +0000993056 00000 n +0000993109 00000 n +0000993162 00000 n +0000993215 00000 n +0000993268 00000 n +0000993321 00000 n +0000993375 00000 n +0000993429 00000 n +0000993483 00000 n +0000993537 00000 n +0000993591 00000 n +0000993645 00000 n +0000993699 00000 n +0000993753 00000 n +0000993807 00000 n +0000993861 00000 n +0000993914 00000 n +0000993968 00000 n +0000994022 00000 n +0000994076 00000 n +0000994130 00000 n +0000994184 00000 n +0000994238 00000 n +0000994292 00000 n +0000994346 00000 n +0000994400 00000 n +0000994454 00000 n +0000994505 00000 n +0000994558 00000 n +0000994612 00000 n +0000994666 00000 n +0000994720 00000 n +0000994774 00000 n +0000994828 00000 n +0000994882 00000 n +0000994936 00000 n +0000994990 00000 n +0000995044 00000 n +0000995098 00000 n +0000995151 00000 n +0000995205 00000 n +0000995259 00000 n +0000995313 00000 n +0000995367 00000 n +0000995421 00000 n +0000995475 00000 n +0000995529 00000 n +0000995583 00000 n +0000995637 00000 n +0000995691 00000 n +0000995744 00000 n +0000995798 00000 n +0000995852 00000 n +0000995906 00000 n +0000995960 00000 n +0000996014 00000 n +0000996068 00000 n +0000996122 00000 n +0000996176 00000 n +0000996230 00000 n +0000996284 00000 n +0000996337 00000 n +0000996391 00000 n +0000996445 00000 n +0000996499 00000 n +0000996553 00000 n +0000996607 00000 n +0000996661 00000 n +0000996715 00000 n +0000996769 00000 n +0000996823 00000 n +0000996877 00000 n +0000996931 00000 n +0000996985 00000 n +0000997039 00000 n +0000997093 00000 n +0000997147 00000 n +0000997201 00000 n +0000997254 00000 n +0000997308 00000 n +0000997362 00000 n +0000997416 00000 n +0000997470 00000 n +0000997524 00000 n +0000997578 00000 n +0000997632 00000 n +0000997686 00000 n +0000997740 00000 n +0000997794 00000 n +0000997847 00000 n +0000997901 00000 n +0000997955 00000 n +0000998009 00000 n +0000998063 00000 n +0000998117 00000 n +0000998171 00000 n +0000998225 00000 n +0000998279 00000 n +0000998333 00000 n +0000998387 00000 n +0000998440 00000 n +0000998494 00000 n +0000998548 00000 n +0000998602 00000 n +0000998656 00000 n +0000998710 00000 n +0000998764 00000 n +0000998818 00000 n +0000998872 00000 n +0000998926 00000 n +0000998980 00000 n +0000999033 00000 n +0000999087 00000 n +0000999141 00000 n +0000999195 00000 n +0000999249 00000 n +0000999303 00000 n +0000999357 00000 n +0000999411 00000 n +0000999465 00000 n +0000999519 00000 n +0000999573 00000 n +0000999626 00000 n +0000999680 00000 n +0000999734 00000 n +0000999788 00000 n +0000999842 00000 n +0000999896 00000 n +0000999950 00000 n +0001000004 00000 n +0001000058 00000 n +0001000112 00000 n +0001000166 00000 n +0001000220 00000 n +0001000274 00000 n +0001000328 00000 n +0001000382 00000 n +0001000436 00000 n +0001000490 00000 n +0001000543 00000 n +0001000597 00000 n +0001000651 00000 n +0001000705 00000 n +0001000759 00000 n +0001000813 00000 n +0001000867 00000 n +0001000921 00000 n +0001000975 00000 n +0001001029 00000 n +0001001083 00000 n +0001001136 00000 n +0001001190 00000 n +0001001244 00000 n +0001001298 00000 n +0001001352 00000 n +0001001406 00000 n +0001001460 00000 n +0001001514 00000 n +0001001568 00000 n +0001001622 00000 n +0001001676 00000 n +0001001729 00000 n +0001001783 00000 n +0001001837 00000 n +0001001891 00000 n +0001001945 00000 n +0001001999 00000 n +0001002053 00000 n +0001002107 00000 n +0001002161 00000 n +0001002215 00000 n +0001002269 00000 n +0001002320 00000 n +0001002373 00000 n +0001002427 00000 n +0001002481 00000 n +0001002535 00000 n +0001002589 00000 n +0001002643 00000 n +0001002697 00000 n +0001002751 00000 n +0001002805 00000 n +0001002859 00000 n +0001002913 00000 n +0001002966 00000 n +0001003020 00000 n +0001003074 00000 n +0001003128 00000 n +0001003182 00000 n +0001003236 00000 n +0001003290 00000 n +0001003344 00000 n +0001003398 00000 n +0001003452 00000 n +0001003506 00000 n +0001003559 00000 n +0001003613 00000 n +0001003667 00000 n +0001003721 00000 n +0001003775 00000 n +0001003829 00000 n +0001003882 00000 n +0001003936 00000 n +0001003990 00000 n +0001004044 00000 n +0001004098 00000 n +0001004152 00000 n +0001004206 00000 n +0001004260 00000 n +0001004314 00000 n +0001004368 00000 n +0001004422 00000 n +0001004475 00000 n +0001004529 00000 n +0001004583 00000 n +0001004637 00000 n +0001004691 00000 n +0001004745 00000 n +0001004799 00000 n +0001004853 00000 n +0001004907 00000 n +0001004961 00000 n +0001005015 00000 n +0001005068 00000 n +0001005122 00000 n +0001005176 00000 n +0001005230 00000 n +0001005284 00000 n +0001005338 00000 n +0001005392 00000 n +0001005446 00000 n +0001005500 00000 n +0001005554 00000 n +0001005608 00000 n +0001005661 00000 n +0001005715 00000 n +0001005769 00000 n +0001005823 00000 n +0001005877 00000 n +0001005931 00000 n +0001005985 00000 n +0001006039 00000 n +0001006093 00000 n +0001006147 00000 n +0001006201 00000 n +0001006254 00000 n +0001006308 00000 n +0001006362 00000 n +0001006416 00000 n +0001006470 00000 n +0001006524 00000 n +0001006578 00000 n +0001006632 00000 n +0001006686 00000 n +0001006740 00000 n +0001006794 00000 n +0001006847 00000 n +0001006901 00000 n +0001006955 00000 n +0001007009 00000 n +0001007063 00000 n +0001007114 00000 n +0001007165 00000 n +0001007216 00000 n +0001007265 00000 n +0001007316 00000 n +0001007367 00000 n +0001007418 00000 n +0001007469 00000 n +0001007520 00000 n +0001007571 00000 n +0001007622 00000 n +0001007673 00000 n +0001007724 00000 n +0001007775 00000 n +0001007826 00000 n +0001007877 00000 n +0001007928 00000 n +0001007979 00000 n +0001008030 00000 n +0001008081 00000 n +0001008132 00000 n +0001008183 00000 n +0001008234 00000 n +0001008285 00000 n +0001008336 00000 n +0001008387 00000 n +0001008438 00000 n +0001008489 00000 n +0001008540 00000 n +0001008591 00000 n +0001008642 00000 n +0001008693 00000 n +0001008744 00000 n +0001008795 00000 n +0001008846 00000 n +0001008897 00000 n +0001008947 00000 n +0001008998 00000 n +0001009049 00000 n +0001009100 00000 n +0001009151 00000 n +0001009202 00000 n +0001009253 00000 n +0001009304 00000 n +0001009355 00000 n +0001009406 00000 n +0001009457 00000 n +0001009508 00000 n +0001009559 00000 n +0001009610 00000 n +0001009661 00000 n +0001009712 00000 n +0001009763 00000 n +0001009814 00000 n +0001009865 00000 n +0001009916 00000 n +0001009970 00000 n +0001010023 00000 n +0001010076 00000 n +0001010129 00000 n +0001010182 00000 n +0001010235 00000 n +0001010288 00000 n +0001010341 00000 n +0001010392 00000 n +0001010444 00000 n +0001010496 00000 n +0001010547 00000 n +0001010598 00000 n +0001010649 00000 n +0001010700 00000 n +0001010751 00000 n +0001010802 00000 n +0001010854 00000 n +0001010905 00000 n +0001010957 00000 n +0001011009 00000 n +0001011061 00000 n +0001011113 00000 n +0001011164 00000 n +0001011216 00000 n +0001011267 00000 n +0001011319 00000 n +0001011370 00000 n +0001011422 00000 n +0001011474 00000 n +0001011526 00000 n +0001011578 00000 n +0001011630 00000 n +0001011682 00000 n +0001011734 00000 n +0001011786 00000 n +0001011837 00000 n +0001011888 00000 n +0001011939 00000 n +0001011990 00000 n +0001012041 00000 n +0001012093 00000 n +0001012145 00000 n +0001012197 00000 n +0001012249 00000 n +0001012301 00000 n +0001012353 00000 n +0001012405 00000 n +0001012457 00000 n +0001012509 00000 n +0001012561 00000 n +0001012613 00000 n +0001012664 00000 n +0001012715 00000 n +0001012766 00000 n +0001012817 00000 n +0001012868 00000 n +0001012919 00000 n +0001012970 00000 n +0001013021 00000 n +0001013072 00000 n +0001013123 00000 n +0001013174 00000 n +0001013225 00000 n +0001013275 00000 n +0001013326 00000 n +0001013377 00000 n +0001013428 00000 n +0001013479 00000 n +0001013530 00000 n +0001013581 00000 n +0001013632 00000 n +0001013683 00000 n +0001013734 00000 n +0001013786 00000 n +0001013837 00000 n +0001013888 00000 n +0001013940 00000 n +0001013991 00000 n +0001014043 00000 n +0001014094 00000 n +0001014145 00000 n +0001014197 00000 n +0001014249 00000 n +0001014300 00000 n +0001014351 00000 n +0001014402 00000 n +0001014453 00000 n +0001014504 00000 n +0001014556 00000 n +0001014607 00000 n +0001014658 00000 n +0001014710 00000 n +0001014761 00000 n +0001014813 00000 n +0001014865 00000 n +0001014916 00000 n +0001014967 00000 n +0001015019 00000 n +0001015071 00000 n +0001015123 00000 n +0001015174 00000 n +0001015225 00000 n +0001015277 00000 n +0001015328 00000 n +0001015379 00000 n +0001015431 00000 n +0001015482 00000 n +0001015533 00000 n +0001015584 00000 n +0001015636 00000 n +0001015687 00000 n +0001015738 00000 n +0001015789 00000 n +0001015841 00000 n +0001015893 00000 n +0001015945 00000 n +0001015997 00000 n +0001016049 00000 n +0001016101 00000 n +0001016153 00000 n +0001016205 00000 n +0001016257 00000 n +0001016309 00000 n +0001016361 00000 n +0001016412 00000 n +0001016464 00000 n +0001016515 00000 n +0001016566 00000 n +0001016617 00000 n +0001016668 00000 n +0001016719 00000 n +0001016770 00000 n +0001016821 00000 n +0001016872 00000 n +0001016924 00000 n +0001016975 00000 n +0001017026 00000 n +0001017077 00000 n +0001017128 00000 n +0001017178 00000 n +0001017229 00000 n +0001017280 00000 n +0001017331 00000 n +0001017381 00000 n +0001017432 00000 n +0001017482 00000 n +0001017532 00000 n +0001017582 00000 n +0001017632 00000 n +0001017682 00000 n +0001017732 00000 n +0001017782 00000 n +0001017832 00000 n +0001017881 00000 n +0001017931 00000 n +0001017981 00000 n +0001018031 00000 n +0001018081 00000 n +0001018131 00000 n +0001018180 00000 n +0001018230 00000 n +0001018280 00000 n +0001018330 00000 n +0001018380 00000 n +0001018430 00000 n +0001018480 00000 n +0001018530 00000 n +0001018580 00000 n +0001018630 00000 n +0001018680 00000 n +0001018730 00000 n +0001018780 00000 n +0001018830 00000 n +0001018880 00000 n +0001018930 00000 n +0001018980 00000 n +0001019030 00000 n +0001019079 00000 n +0001019129 00000 n +0001019179 00000 n +0001019229 00000 n +0001019279 00000 n +0001019329 00000 n +0001019379 00000 n +0001019429 00000 n +0001019478 00000 n +0001019527 00000 n +0001019576 00000 n +0001019628 00000 n +0001019679 00000 n +0001019730 00000 n +0001019781 00000 n +0001019833 00000 n +0001019885 00000 n +0001019936 00000 n +0001019988 00000 n +0001020039 00000 n +0001020090 00000 n +0001020141 00000 n +0001020191 00000 n +0001020242 00000 n +0001020292 00000 n +0001020342 00000 n +0001020392 00000 n +0001020442 00000 n +0001020492 00000 n +0001020542 00000 n +0001020592 00000 n +0001020643 00000 n +0001020694 00000 n +0001020744 00000 n +0001020794 00000 n +0001020844 00000 n +0001020894 00000 n +0001020944 00000 n +0001020994 00000 n +0001021044 00000 n +0001021093 00000 n +0001021143 00000 n +0001021193 00000 n +0001021242 00000 n +0001021292 00000 n +0001021342 00000 n +0001021392 00000 n +0001021442 00000 n +0001021492 00000 n +0001021542 00000 n +0001021592 00000 n +0001021642 00000 n +0001021692 00000 n +0001021742 00000 n +0001021792 00000 n +0001021842 00000 n +0001021892 00000 n +0001021942 00000 n +0001021992 00000 n +0001022042 00000 n +0001022091 00000 n +0001022141 00000 n +0001022191 00000 n +0001022241 00000 n +0001022291 00000 n +0001022341 00000 n +0001022392 00000 n +0001022443 00000 n +0001022494 00000 n +0001022545 00000 n +0001022596 00000 n +0001022647 00000 n +0001022698 00000 n +0001022749 00000 n +0001022800 00000 n +0001022851 00000 n +0001022902 00000 n +0001022952 00000 n +0001023003 00000 n +0001023053 00000 n +0001023104 00000 n +0001023155 00000 n +0001023206 00000 n +0001023257 00000 n +0001023308 00000 n +0001023359 00000 n +0001023412 00000 n +0001023465 00000 n +0001023518 00000 n +0001023571 00000 n +0001023624 00000 n +0001023678 00000 n +0001023728 00000 n +0001023778 00000 n +0001023829 00000 n +0001023880 00000 n +0001023931 00000 n +0001023981 00000 n +0001024031 00000 n +0001024082 00000 n +0001024132 00000 n +0001024183 00000 n +0001024233 00000 n +0001024283 00000 n +0001024334 00000 n +0001024385 00000 n +0001024435 00000 n +0001024486 00000 n +0001024535 00000 n +0001024584 00000 n +0001024634 00000 n +0001024685 00000 n +0001024735 00000 n +0001024785 00000 n +0001024835 00000 n +0001024884 00000 n +0001024934 00000 n +0001024983 00000 n +0001025033 00000 n +0001025083 00000 n +0001025132 00000 n +0001025182 00000 n +0001025232 00000 n +0001025283 00000 n +0001025334 00000 n +0001025384 00000 n +0001025433 00000 n +0001025483 00000 n +0001025533 00000 n +0001025583 00000 n +0001025633 00000 n +0001025682 00000 n +0001025732 00000 n +0001025782 00000 n +0001025832 00000 n +0001025882 00000 n +0001025932 00000 n +0001025982 00000 n +0001026032 00000 n +0001026081 00000 n +0001026131 00000 n +0001026181 00000 n +0001026232 00000 n +0001026282 00000 n +0001026332 00000 n +0001026382 00000 n +0001026433 00000 n +0001026483 00000 n +0001026533 00000 n +0001026583 00000 n +0001026634 00000 n +0001026685 00000 n +0001026736 00000 n +0001026787 00000 n +0001026838 00000 n +0001026889 00000 n +0001026940 00000 n +0001026991 00000 n +0001027042 00000 n +0001027094 00000 n +0001027146 00000 n +0001027197 00000 n +0001027249 00000 n +0001027300 00000 n +0001027351 00000 n +0001027402 00000 n +0001027453 00000 n +0001027504 00000 n +0001027555 00000 n +0001027606 00000 n +0001027657 00000 n +0001027708 00000 n +0001027759 00000 n +0001027810 00000 n +0001027861 00000 n +0001027912 00000 n +0001027963 00000 n +0001028014 00000 n +0001028066 00000 n +0001028117 00000 n +0001028168 00000 n +0001028219 00000 n +0001028270 00000 n +0001028321 00000 n +0001028372 00000 n +0001028423 00000 n +0001028474 00000 n +0001028525 00000 n +0001028576 00000 n +0001028627 00000 n +0001028678 00000 n +0001028729 00000 n +0001028780 00000 n +0001028831 00000 n +0001028882 00000 n +0001028933 00000 n +0001028984 00000 n +0001029035 00000 n +0001029086 00000 n +0001029137 00000 n +0001029188 00000 n +0001029239 00000 n +0001029290 00000 n +0001029341 00000 n +0001029392 00000 n +0001029443 00000 n +0001029494 00000 n +0001029545 00000 n +0001029596 00000 n +0001029650 00000 n +0001029704 00000 n +0001029758 00000 n +0001029811 00000 n +0001029864 00000 n +0001029914 00000 n +0001029964 00000 n +0001030013 00000 n +0001030065 00000 n +0001030116 00000 n +0001030167 00000 n +0001030218 00000 n +0001030269 00000 n +0001030320 00000 n +0001030371 00000 n +0001030422 00000 n +0001030473 00000 n +0001030524 00000 n +0001030575 00000 n +0001030626 00000 n +0001030677 00000 n +0001030728 00000 n +0001030779 00000 n +0001030830 00000 n +0001030881 00000 n +0001030932 00000 n +0001030983 00000 n +0001031034 00000 n +0001031085 00000 n +0001031136 00000 n +0001031187 00000 n +0001031238 00000 n +0001031289 00000 n +0001031340 00000 n +0001031391 00000 n +0001031442 00000 n +0001031493 00000 n +0001031544 00000 n +0001031595 00000 n +0001031646 00000 n +0001031697 00000 n +0001031748 00000 n +0001031799 00000 n +0001031850 00000 n +0001031901 00000 n +0001031952 00000 n +0001032003 00000 n +0001032054 00000 n +0001032105 00000 n +0001032156 00000 n +0001032207 00000 n +0001032258 00000 n +0001032309 00000 n +0001032360 00000 n +0001032411 00000 n +0001032462 00000 n +0001032513 00000 n +0001032564 00000 n +0001032615 00000 n +0001032666 00000 n +0001032717 00000 n +0001032768 00000 n +0001032819 00000 n +0001032870 00000 n +0001032922 00000 n +0001032974 00000 n +0001033026 00000 n +0001033078 00000 n +0001033130 00000 n +0001033181 00000 n +0001033232 00000 n +0001033283 00000 n +0001033334 00000 n +0001033385 00000 n +0001033437 00000 n +0001033489 00000 n +0001033541 00000 n +0001033593 00000 n +0001033645 00000 n +0001033697 00000 n +0001033749 00000 n +0001033801 00000 n +0001033852 00000 n +0001033903 00000 n +0001033955 00000 n +0001034007 00000 n +0001034059 00000 n +0001034110 00000 n +0001034162 00000 n +0001034214 00000 n +0001034266 00000 n +0001034317 00000 n +0001034368 00000 n +0001034419 00000 n +0001034470 00000 n +0001034522 00000 n +0001034573 00000 n +0001034624 00000 n +0001034676 00000 n +0001034727 00000 n +0001034778 00000 n +0001034830 00000 n +0001034882 00000 n +0001034934 00000 n +0001034985 00000 n +0001035036 00000 n +0001035087 00000 n +0001035138 00000 n +0001035189 00000 n +0001035240 00000 n +0001035291 00000 n +0001035342 00000 n +0001035393 00000 n +0001035444 00000 n +0001035495 00000 n +0001035546 00000 n +0001035597 00000 n +0001035648 00000 n +0001035699 00000 n +0001035750 00000 n +0001035802 00000 n +0001035853 00000 n +0001035905 00000 n +0001035956 00000 n +0001036007 00000 n +0001036059 00000 n +0001036110 00000 n +0001036161 00000 n +0001036213 00000 n +0001036264 00000 n +0001036315 00000 n +0001036366 00000 n +0001036417 00000 n +0001036469 00000 n +0001036520 00000 n +0001036571 00000 n +0001036622 00000 n +0001036673 00000 n +0001036724 00000 n +0001036776 00000 n +0001036827 00000 n +0001036878 00000 n +0001036929 00000 n +0001036980 00000 n +0001037032 00000 n +0001037084 00000 n +0001037136 00000 n +0001037188 00000 n +0001037240 00000 n +0001037292 00000 n +0001037344 00000 n +0001037396 00000 n +0001037448 00000 n +0001037500 00000 n +0001037552 00000 n +0001037604 00000 n +0001037656 00000 n +0001037708 00000 n +0001037760 00000 n +0001037812 00000 n +0001037864 00000 n +0001037916 00000 n +0001037968 00000 n +0001038020 00000 n +0001038072 00000 n +0001038123 00000 n +0001038174 00000 n +0001038225 00000 n +0001038277 00000 n +0001038328 00000 n +0001038380 00000 n +0001038431 00000 n +0001038483 00000 n +0001038534 00000 n +0001038586 00000 n +0001038638 00000 n +0001038689 00000 n +0001038741 00000 n +0001038793 00000 n +0001038844 00000 n +0001038895 00000 n +0001038946 00000 n +0001038997 00000 n +0001039049 00000 n +0001039101 00000 n +0001039153 00000 n +0001039205 00000 n +0001039257 00000 n +0001039308 00000 n +0001039359 00000 n +0001039411 00000 n +0001039463 00000 n +0001039515 00000 n +0001039567 00000 n +0001039619 00000 n +0001039670 00000 n +0001039721 00000 n +0001039772 00000 n +0001039823 00000 n +0001039874 00000 n +0001039925 00000 n +0001039976 00000 n +0001040027 00000 n +0001040078 00000 n +0001040129 00000 n +0001040180 00000 n +0001040231 00000 n +0001040282 00000 n +0001040333 00000 n +0001040385 00000 n +0001040437 00000 n +0001040488 00000 n +0001040540 00000 n +0001040592 00000 n +0001040644 00000 n +0001040696 00000 n +0001040748 00000 n +0001040800 00000 n +0001040852 00000 n +0001040904 00000 n +0001040955 00000 n +0001041007 00000 n +0001041059 00000 n +0001041111 00000 n +0001041163 00000 n +0001041215 00000 n +0001041267 00000 n +0001041318 00000 n +0001041370 00000 n +0001041422 00000 n +0001041474 00000 n +0001041526 00000 n +0001041577 00000 n +0001041628 00000 n +0001041679 00000 n +0001041730 00000 n +0001041781 00000 n +0001041832 00000 n +0001041883 00000 n +0001041934 00000 n +0001041985 00000 n +0001042036 00000 n +0001042087 00000 n +0001042138 00000 n +0001042189 00000 n +0001042240 00000 n +0001042291 00000 n +0001042342 00000 n +0001042393 00000 n +0001042444 00000 n +0001042495 00000 n +0001042546 00000 n +0001042597 00000 n +0001042648 00000 n +0001042699 00000 n +0001042750 00000 n +0001042801 00000 n +0001042852 00000 n +0001042904 00000 n +0001042955 00000 n +0001043007 00000 n +0001043058 00000 n +0001043109 00000 n +0001043160 00000 n +0001043211 00000 n +0001043262 00000 n +0001043313 00000 n +0001043364 00000 n +0001043415 00000 n +0001043466 00000 n +0001043516 00000 n +0001043567 00000 n +0001043617 00000 n +0001043667 00000 n +0001043718 00000 n +0001043769 00000 n +0001043820 00000 n +0001043871 00000 n +0001043922 00000 n +0001043973 00000 n +0001044024 00000 n +0001044075 00000 n +0001044126 00000 n +0001044176 00000 n +0001044227 00000 n +0001044278 00000 n +0001044329 00000 n +0001044379 00000 n +0001044430 00000 n +0001044481 00000 n +0001044532 00000 n +0001044581 00000 n +0001044630 00000 n +0001044679 00000 n +0001044730 00000 n +0001044781 00000 n +0001044832 00000 n +0001044883 00000 n +0001044934 00000 n +0001044985 00000 n +0001045036 00000 n +0001045087 00000 n +0001045138 00000 n +0001045189 00000 n +0001045240 00000 n +0001045291 00000 n +0001045342 00000 n +0001045393 00000 n +0001045444 00000 n +0001045495 00000 n +0001045546 00000 n +0001045597 00000 n +0001045648 00000 n +0001045699 00000 n +0001045750 00000 n +0001045801 00000 n +0001045852 00000 n +0001045903 00000 n +0001045954 00000 n +0001046005 00000 n +0001046056 00000 n +0001046107 00000 n +0001046158 00000 n +0001046209 00000 n +0001046260 00000 n +0001046310 00000 n +0001046360 00000 n +0001046411 00000 n +0001046461 00000 n +0001046511 00000 n +0001046561 00000 n +0001046611 00000 n +0001046661 00000 n +0001046712 00000 n +0001046763 00000 n +0001046814 00000 n +0001046865 00000 n +0001046915 00000 n +0001046966 00000 n +0001047017 00000 n +0001047068 00000 n +0001047119 00000 n +0001047170 00000 n +0001047221 00000 n +0001047272 00000 n +0001047323 00000 n +0001047374 00000 n +0001047425 00000 n +0001047476 00000 n +0001047526 00000 n +0001047576 00000 n +0001047627 00000 n +0001047677 00000 n +0001047728 00000 n +0001047779 00000 n +0001047829 00000 n +0001047879 00000 n +0001047930 00000 n +0001047981 00000 n +0001048031 00000 n +0001048082 00000 n +0001048132 00000 n +0001048183 00000 n +0001048234 00000 n +0001048284 00000 n +0001048335 00000 n +0001048386 00000 n +0001048437 00000 n +0001048488 00000 n +0001048538 00000 n +0001048589 00000 n +0001048639 00000 n +0001048690 00000 n +0001048741 00000 n +0001048792 00000 n +0001048843 00000 n +0001048893 00000 n +0001048944 00000 n +0001048995 00000 n +0001049046 00000 n +0001049097 00000 n +0001049148 00000 n +0001049199 00000 n +0001049249 00000 n +0001049298 00000 n +0001049347 00000 n +0001049396 00000 n +0001049447 00000 n +0001049498 00000 n +0001049548 00000 n +0001049598 00000 n +0001049648 00000 n +0001049698 00000 n +0001049748 00000 n +0001049798 00000 n +0001049848 00000 n +0001049898 00000 n +0001049948 00000 n +0001049998 00000 n +0001050048 00000 n +0001050098 00000 n +0001050148 00000 n +0001050198 00000 n +0001050248 00000 n +0001050298 00000 n +0001050348 00000 n +0001050398 00000 n +0001050448 00000 n +0001050498 00000 n +0001050548 00000 n +0001050599 00000 n +0001050650 00000 n +0001050700 00000 n +0001050750 00000 n +0001050800 00000 n +0001050850 00000 n +0001050900 00000 n +0001050951 00000 n +0001051002 00000 n +0001051053 00000 n +0001051104 00000 n +0001051155 00000 n +0001051206 00000 n +0001051257 00000 n +0001051308 00000 n +0001051359 00000 n +0001051410 00000 n +0001051461 00000 n +0001051512 00000 n +0001051563 00000 n +0001051614 00000 n +0001051665 00000 n +0001051716 00000 n +0001051767 00000 n +0001051818 00000 n +0001051869 00000 n +0001051920 00000 n +0001051970 00000 n +0001052020 00000 n +0001052070 00000 n +0001052120 00000 n +0001052170 00000 n +0001052220 00000 n +0001052270 00000 n +0001052320 00000 n +0001052370 00000 n +0001052420 00000 n +0001052470 00000 n +0001052520 00000 n +0001052570 00000 n +0001052620 00000 n +0001052670 00000 n +0001052720 00000 n +0001052771 00000 n +0001052822 00000 n +0001052873 00000 n +0001052923 00000 n +0001052974 00000 n +0001053025 00000 n +0001053076 00000 n +0001053126 00000 n +0001053177 00000 n +0001053228 00000 n +0001053279 00000 n +0001053330 00000 n +0001053381 00000 n +0001053432 00000 n +0001053483 00000 n +0001053534 00000 n +0001053584 00000 n +0001053635 00000 n +0001053686 00000 n +0001053737 00000 n +0001053788 00000 n +0001053839 00000 n +0001053889 00000 n +0001053940 00000 n +0001053991 00000 n +0001054041 00000 n +0001054092 00000 n +0001054142 00000 n +0001054193 00000 n +0001054244 00000 n +0001054294 00000 n +0001054343 00000 n +0001054392 00000 n +0001054441 00000 n +0001054492 00000 n +0001054543 00000 n +0001054594 00000 n +0001054645 00000 n +0001054696 00000 n +0001054746 00000 n +0001054796 00000 n +0001054846 00000 n +0001054896 00000 n +0001054946 00000 n +0001054996 00000 n +0001055046 00000 n +0001055096 00000 n +0001055146 00000 n +0001055196 00000 n +0001055246 00000 n +0001055296 00000 n +0001055346 00000 n +0001055396 00000 n +0001055446 00000 n +0001055496 00000 n +0001055546 00000 n +0001055597 00000 n +0001055647 00000 n +0001055697 00000 n +0001055747 00000 n +0001055797 00000 n +0001055847 00000 n +0001055897 00000 n +0001055947 00000 n +0001055997 00000 n +0001056047 00000 n +0001056097 00000 n +0001056147 00000 n +0001056197 00000 n +0001056247 00000 n +0001056297 00000 n +0001056347 00000 n +0001056397 00000 n +0001056447 00000 n +0001056498 00000 n +0001056548 00000 n +0001056598 00000 n +0001056649 00000 n +0001056698 00000 n +0001056747 00000 n +0001056796 00000 n +0001056846 00000 n +0001056896 00000 n +0001056947 00000 n +0001056997 00000 n +0001057048 00000 n +0001057098 00000 n +0001057148 00000 n +0001057198 00000 n +0001057248 00000 n +0001057298 00000 n +0001057348 00000 n +0001057398 00000 n +0001057448 00000 n +0001057498 00000 n +0001057548 00000 n +0001057598 00000 n +0001057648 00000 n +0001057698 00000 n +0001057748 00000 n +0001057798 00000 n +0001057848 00000 n +0001057898 00000 n +0001057948 00000 n +0001057998 00000 n +0001058048 00000 n +0001058098 00000 n +0001058148 00000 n +0001058198 00000 n +0001058248 00000 n +0001058298 00000 n +0001058348 00000 n +0001058398 00000 n +0001058448 00000 n +0001058498 00000 n +0001058548 00000 n +0001058598 00000 n +0001058648 00000 n +0001058698 00000 n +0001058748 00000 n +0001058798 00000 n +0001058848 00000 n +0001058898 00000 n +0001058949 00000 n +0001058999 00000 n +0001059049 00000 n +0001059099 00000 n +0001059150 00000 n +0001059200 00000 n +0001059250 00000 n +0001059300 00000 n +0001059350 00000 n +0001059400 00000 n +0001059450 00000 n +0001059500 00000 n +0001059550 00000 n +0001059600 00000 n +0001059650 00000 n +0001059700 00000 n +0001059750 00000 n +0001059800 00000 n +0001059850 00000 n +0001059900 00000 n +0001059950 00000 n +0001060000 00000 n +0001060050 00000 n +0001060100 00000 n +0001060150 00000 n +0001060200 00000 n +0001060250 00000 n +0001060300 00000 n +0001060350 00000 n +0001060400 00000 n +0001060450 00000 n +0001060500 00000 n +0001060550 00000 n +0001060600 00000 n +0001060650 00000 n +0001060701 00000 n +0001060751 00000 n +0001060802 00000 n +0001060852 00000 n +0001060903 00000 n +0001060953 00000 n +0001061004 00000 n +0001061055 00000 n +0001061106 00000 n +0001061155 00000 n +0001061204 00000 n +0001061255 00000 n +0001061306 00000 n +0001061356 00000 n +0001061406 00000 n +0001061456 00000 n +0001061506 00000 n +0001061557 00000 n +0001061607 00000 n +0001061657 00000 n +0001061707 00000 n +0001061757 00000 n +0001061807 00000 n +0001061857 00000 n +0001061908 00000 n +0001061959 00000 n +0001062009 00000 n +0001062060 00000 n +0001062109 00000 n +0001062158 00000 n +0001062207 00000 n +0001062258 00000 n +0001062308 00000 n +0001062358 00000 n +0001062408 00000 n +0001062458 00000 n +0001062508 00000 n +0001062558 00000 n +0001062608 00000 n +0001062658 00000 n +0001062708 00000 n +0001062758 00000 n +0001062808 00000 n +0001062858 00000 n +0001062908 00000 n +0001062958 00000 n +0001063008 00000 n +0001063058 00000 n +0001063108 00000 n +0001063158 00000 n +0001063208 00000 n +0001063258 00000 n +0001063308 00000 n +0001063358 00000 n +0001063408 00000 n +0001063458 00000 n +0001063508 00000 n +0001063558 00000 n +0001063608 00000 n +0001063658 00000 n +0001063708 00000 n +0001063758 00000 n +0001063808 00000 n +0001063858 00000 n +0001063908 00000 n +0001063958 00000 n +0001064008 00000 n +0001064058 00000 n +0001064108 00000 n +0001064158 00000 n +0001064208 00000 n +0001064258 00000 n +0001064308 00000 n +0001064358 00000 n +0001064408 00000 n +0001064458 00000 n +0001064508 00000 n +0001064558 00000 n +0001064608 00000 n +0001064658 00000 n +0001064708 00000 n +0001064758 00000 n +0001064808 00000 n +0001064858 00000 n +0001064908 00000 n +0001064958 00000 n +0001065008 00000 n +0001065058 00000 n +0001065108 00000 n +0001065158 00000 n +0001065208 00000 n +0001065258 00000 n +0001065308 00000 n +0001065358 00000 n +0001065408 00000 n +0001065458 00000 n +0001065508 00000 n +0001065558 00000 n +0001065608 00000 n +0001065658 00000 n +0001065708 00000 n +0001065758 00000 n +0001065808 00000 n +0001065858 00000 n +0001065908 00000 n +0001065958 00000 n +0001066008 00000 n +0001066058 00000 n +0001066108 00000 n +0001066158 00000 n +0001066208 00000 n +0001066258 00000 n +0001066308 00000 n +0001066358 00000 n +0001066408 00000 n +0001066458 00000 n +0001066508 00000 n +0001066558 00000 n +0001066608 00000 n +0001066658 00000 n +0001066708 00000 n +0001066758 00000 n +0001066808 00000 n +0001066858 00000 n +0001066908 00000 n +0001066958 00000 n +0001067008 00000 n +0001067058 00000 n +0001067108 00000 n +0001067158 00000 n +0001067208 00000 n +0001067258 00000 n +0001067308 00000 n +0001067358 00000 n +0001067408 00000 n +0001067458 00000 n +0001067508 00000 n +0001067558 00000 n +0001067608 00000 n +0001067658 00000 n +0001067708 00000 n +0001067758 00000 n +0001067808 00000 n +0001067858 00000 n +0001067908 00000 n +0001067958 00000 n +0001068008 00000 n +0001068058 00000 n +0001068108 00000 n +0001068158 00000 n +0001068208 00000 n +0001068258 00000 n +0001068308 00000 n +0001068358 00000 n +0001068408 00000 n +0001068458 00000 n +0001068508 00000 n +0001068558 00000 n +0001068608 00000 n +0001068658 00000 n +0001068708 00000 n +0001068758 00000 n +0001068808 00000 n +0001068858 00000 n +0001068908 00000 n +0001068958 00000 n +0001069008 00000 n +0001069058 00000 n +0001069108 00000 n +0001069158 00000 n +0001069208 00000 n +0001069258 00000 n +0001069308 00000 n +0001069358 00000 n +0001069408 00000 n +0001069458 00000 n +0001069508 00000 n +0001069558 00000 n +0001069608 00000 n +0001069658 00000 n +0001069708 00000 n +0001069758 00000 n +0001069808 00000 n +0001069858 00000 n +0001069908 00000 n +0001069958 00000 n +0001070008 00000 n +0001070058 00000 n +0001070108 00000 n +0001070158 00000 n +0001070208 00000 n +0001070258 00000 n +0001070308 00000 n +0001070358 00000 n +0001070408 00000 n +0001070458 00000 n +0001070508 00000 n +0001070558 00000 n +0001070608 00000 n +0001070658 00000 n +0001070708 00000 n +0001070758 00000 n +0001070808 00000 n +0001070858 00000 n +0001070908 00000 n +0001070958 00000 n +0001071008 00000 n +0001071058 00000 n +0001071108 00000 n +0001071158 00000 n +0001071208 00000 n +0001071258 00000 n +0001071308 00000 n +0001071358 00000 n +0001071408 00000 n +0001071458 00000 n +0001071508 00000 n +0001071558 00000 n +0001071608 00000 n +0001071658 00000 n +0001071708 00000 n +0001071758 00000 n +0001071808 00000 n +0001071858 00000 n +0001071908 00000 n +0001071958 00000 n +0001072008 00000 n +0001072058 00000 n +0001072108 00000 n +0001072158 00000 n +0001072208 00000 n +0001072258 00000 n +0001072308 00000 n +0001072358 00000 n +0001072408 00000 n +0001072458 00000 n +0001072508 00000 n +0001072558 00000 n +0001072608 00000 n +0001072658 00000 n +0001072708 00000 n +0001072758 00000 n +0001072808 00000 n +0001072858 00000 n +0001072908 00000 n +0001072958 00000 n +0001073008 00000 n +0001073058 00000 n +0001073108 00000 n +0001073158 00000 n +0001073208 00000 n +0001073258 00000 n +0001073308 00000 n +0001073358 00000 n +0001073408 00000 n +0001073458 00000 n +0001073508 00000 n +0001073558 00000 n +0001073608 00000 n +0001073658 00000 n +0001073708 00000 n +0001073758 00000 n +0001073808 00000 n +0001073858 00000 n +0001073908 00000 n +0001073958 00000 n +0001074008 00000 n +0001074058 00000 n +0001074108 00000 n +0001074158 00000 n +0001074208 00000 n +0001074258 00000 n +0001074308 00000 n +0001074358 00000 n +0001074408 00000 n +0001074458 00000 n +0001074508 00000 n +0001074558 00000 n +0001074608 00000 n +0001074658 00000 n +0001074708 00000 n +0001074758 00000 n +0001074808 00000 n +0001074858 00000 n +0001074908 00000 n +0001074958 00000 n +0001075008 00000 n +0001075058 00000 n +0001075108 00000 n +0001075158 00000 n +0001075207 00000 n +0001075256 00000 n +0001075305 00000 n +0001075354 00000 n +0001075403 00000 n +0001075452 00000 n +0001075501 00000 n +0001075550 00000 n +0001075599 00000 n +0001075648 00000 n +0001075697 00000 n +0001075746 00000 n +0001075795 00000 n +0001075844 00000 n +0001075893 00000 n +0001075942 00000 n +0001075991 00000 n +0001076040 00000 n +0001076089 00000 n +0001076138 00000 n +0001076187 00000 n +0001076236 00000 n +0001076285 00000 n +0001076334 00000 n +0001076383 00000 n +0001076432 00000 n +0001076481 00000 n +0001076530 00000 n +0001076579 00000 n +0001076628 00000 n +0001076677 00000 n +0001076726 00000 n +0001076775 00000 n +0001076824 00000 n +0001076873 00000 n +0001076922 00000 n +0001076971 00000 n +0001077020 00000 n +0001077069 00000 n +0001077118 00000 n +0001077167 00000 n +0001077216 00000 n +0001077265 00000 n +0001077314 00000 n +0001077363 00000 n +0001077412 00000 n +0001077461 00000 n +0001077510 00000 n +0001077559 00000 n +0001077608 00000 n +0001077657 00000 n +0001077706 00000 n +0001077755 00000 n +0001077804 00000 n +0001077854 00000 n +0001077904 00000 n +0001077954 00000 n +0001078004 00000 n +0001078054 00000 n +0001078104 00000 n +0001078154 00000 n +0001078204 00000 n +0001078254 00000 n +0001078304 00000 n +0001078355 00000 n +0001078406 00000 n +0001078457 00000 n +0001078508 00000 n +0001078559 00000 n +0001078610 00000 n +0001078661 00000 n +0001078712 00000 n +0001078763 00000 n +0001078813 00000 n +0001078863 00000 n +0001078914 00000 n +0001078965 00000 n +0001079015 00000 n +0001079065 00000 n +0001079115 00000 n +0001079166 00000 n +0001079217 00000 n +0001079267 00000 n +0001079317 00000 n +0001079367 00000 n +0001079415 00000 n +0001079463 00000 n +0001079511 00000 n +0001079559 00000 n +0001079607 00000 n +0001079655 00000 n +0001079703 00000 n +0001079751 00000 n +0001079799 00000 n +0001079847 00000 n +0001079895 00000 n +0001079943 00000 n +0001079991 00000 n +0001080039 00000 n +0001080087 00000 n +0001080135 00000 n +0001080183 00000 n +0001080231 00000 n +0001080279 00000 n +0001080327 00000 n +0001080375 00000 n +0001080423 00000 n +0001080471 00000 n +0001080519 00000 n +0001080567 00000 n +0001080615 00000 n +0001080663 00000 n +0001080711 00000 n +0001080760 00000 n +0001080809 00000 n +0001080858 00000 n +0001080907 00000 n +0001080956 00000 n +0001081005 00000 n +0001081054 00000 n +0001081103 00000 n +0001081152 00000 n +0001081201 00000 n +0001081250 00000 n +0001081299 00000 n +0001081348 00000 n +0001081397 00000 n +0001081446 00000 n +0001081497 00000 n +0001081548 00000 n +0001081599 00000 n +0001081650 00000 n +0001081701 00000 n +0001081752 00000 n +0001081803 00000 n +0001081854 00000 n +0001081905 00000 n +0001081956 00000 n +0001082007 00000 n +0001082058 00000 n +0001082109 00000 n +0001082160 00000 n +0001082211 00000 n +0001082262 00000 n +0001082313 00000 n +0001082364 00000 n +0001082415 00000 n +0001082466 00000 n +0001082517 00000 n +0001082568 00000 n +0001082619 00000 n +0001082670 00000 n +0001082721 00000 n +0001082772 00000 n +0001082823 00000 n +0001082874 00000 n +0001082925 00000 n +0001082976 00000 n +0001083027 00000 n +0001083078 00000 n +0001083129 00000 n +0001083180 00000 n +0001083231 00000 n +0001083282 00000 n +0001083333 00000 n +0001083384 00000 n +0001083435 00000 n +0001083486 00000 n +0001083537 00000 n +0001083588 00000 n +0001083639 00000 n +0001083690 00000 n +0001083741 00000 n +0001083792 00000 n +0001083843 00000 n +0001083894 00000 n +0001083945 00000 n +0001083996 00000 n +0001084047 00000 n +0001084098 00000 n +0001084149 00000 n +0001084200 00000 n +0001084251 00000 n +0001084302 00000 n +0001084353 00000 n +0001084404 00000 n +0001084455 00000 n +0001084506 00000 n +0001084557 00000 n +0001084608 00000 n +0001084659 00000 n +0001084710 00000 n +0001084761 00000 n +0001084812 00000 n +0001084863 00000 n +0001084914 00000 n +0001084965 00000 n +0001085016 00000 n +0001085067 00000 n +0001085118 00000 n +0001085169 00000 n +0001085220 00000 n +0001085271 00000 n +0001085322 00000 n +0001085373 00000 n +0001085424 00000 n +0001085475 00000 n +0001085526 00000 n +0001085577 00000 n +0001085628 00000 n +0001085679 00000 n +0001085730 00000 n +0001085781 00000 n +0001085832 00000 n +0001085883 00000 n +0001085934 00000 n +0001085985 00000 n +0001086036 00000 n +0001086087 00000 n +0001086138 00000 n +0001086189 00000 n +0001086240 00000 n +0001086291 00000 n +0001086342 00000 n +0001086393 00000 n +0001086444 00000 n +0001086495 00000 n +0001086546 00000 n +0001086597 00000 n +0001086648 00000 n +0001086699 00000 n +0001086750 00000 n +0001086801 00000 n +0001086852 00000 n +0001086903 00000 n +0001086954 00000 n +0001087005 00000 n +0001087056 00000 n +0001087107 00000 n +0001087158 00000 n +0001087209 00000 n +0001087260 00000 n +0001087311 00000 n +0001087362 00000 n +0001087413 00000 n +0001087464 00000 n +0001087515 00000 n +0001087566 00000 n +0001087617 00000 n +0001087668 00000 n +0001087719 00000 n +0001087770 00000 n +0001087821 00000 n +0001087872 00000 n +0001087923 00000 n +0001087974 00000 n +0001088025 00000 n +0001088076 00000 n +0001088127 00000 n +0001088178 00000 n +0001088229 00000 n +0001088280 00000 n +0001088331 00000 n +0001088382 00000 n +0001088433 00000 n +0001088484 00000 n +0001088535 00000 n +0001088586 00000 n +0001088637 00000 n +0001088688 00000 n +0001088739 00000 n +0001088790 00000 n +0001088841 00000 n +0001088892 00000 n +0001088943 00000 n +0001088994 00000 n +0001089045 00000 n +0001089096 00000 n +0001089147 00000 n +0001089198 00000 n +0001089249 00000 n +0001089300 00000 n +0001089351 00000 n +0001089402 00000 n +0001089453 00000 n +0001089504 00000 n +0001089555 00000 n +0001089606 00000 n +0001089657 00000 n +0001089708 00000 n +0001089759 00000 n +0001089810 00000 n +0001089861 00000 n +0001089912 00000 n +0001089963 00000 n +0001090014 00000 n +0001090065 00000 n +0001090116 00000 n +0001090167 00000 n +0001090218 00000 n +0001090269 00000 n +0001090320 00000 n +0001090371 00000 n +0001090422 00000 n +0001090473 00000 n +0001090524 00000 n +0001090575 00000 n +0001090626 00000 n +0001090677 00000 n +0001090728 00000 n +0001090779 00000 n +0001090830 00000 n +0001090881 00000 n +0001090932 00000 n +0001090983 00000 n +0001091034 00000 n +0001091085 00000 n +0001091136 00000 n +0001091187 00000 n +0001091238 00000 n +0001091289 00000 n +0001091340 00000 n +0001091391 00000 n +0001091442 00000 n +0001091493 00000 n +0001091544 00000 n +0001091595 00000 n +0001091646 00000 n +0001091697 00000 n +0001091748 00000 n +0001091799 00000 n +0001091850 00000 n +0001091901 00000 n +0001091952 00000 n +0001092003 00000 n +0001092054 00000 n +0001092105 00000 n +0001092156 00000 n +0001092207 00000 n +0001092258 00000 n +0001092309 00000 n +0001092360 00000 n +0001092411 00000 n +0001092462 00000 n +0001092513 00000 n +0001092564 00000 n +0001092615 00000 n +0001092666 00000 n +0001092717 00000 n +0001092768 00000 n +0001092819 00000 n +0001092870 00000 n +0001092921 00000 n +0001092972 00000 n +0001093023 00000 n +0001093074 00000 n +0001093125 00000 n +0001093176 00000 n +0001093227 00000 n +0001093278 00000 n +0001093329 00000 n +0001093380 00000 n +0001093431 00000 n +0001093482 00000 n +0001093533 00000 n +0001093584 00000 n +0001093635 00000 n +0001093686 00000 n +0001093737 00000 n +0001093788 00000 n +0001093839 00000 n +0001093890 00000 n +0001093941 00000 n +0001093992 00000 n +0001094043 00000 n +0001094094 00000 n +0001094145 00000 n +0001094196 00000 n +0001094247 00000 n +0001094298 00000 n +0001094349 00000 n +0001094400 00000 n +0001094451 00000 n +0001094502 00000 n +0001094553 00000 n +0001094604 00000 n +0001094655 00000 n +0001094706 00000 n +0001094757 00000 n +0001094808 00000 n +0001094859 00000 n +0001094910 00000 n +0001094961 00000 n +0001095012 00000 n +0001095063 00000 n +0001095114 00000 n +0001095165 00000 n +0001095216 00000 n +0001095267 00000 n +0001095318 00000 n +0001095369 00000 n +0001095420 00000 n +0001095471 00000 n +0001095522 00000 n +0001095573 00000 n +0001095624 00000 n +0001095675 00000 n +0001095726 00000 n +0001095777 00000 n +0001095828 00000 n +0001095879 00000 n +0001095930 00000 n +0001095981 00000 n +0001096032 00000 n +0001096083 00000 n +0001096134 00000 n +0001096185 00000 n +0001096236 00000 n +0001096287 00000 n +0001096338 00000 n +0001096389 00000 n +0001096440 00000 n +0001096491 00000 n +0001096542 00000 n +0001096593 00000 n +0001096644 00000 n +0001096695 00000 n +0001096746 00000 n +0001096797 00000 n +0001096848 00000 n +0001096899 00000 n +0001096950 00000 n +0001097001 00000 n +0001097052 00000 n +0001097103 00000 n +0001097154 00000 n +0001097205 00000 n +0001097256 00000 n +0001097307 00000 n +0001097358 00000 n +0001097409 00000 n +0001097460 00000 n +0001097511 00000 n +0001097562 00000 n +0001097613 00000 n +0001097664 00000 n +0001097715 00000 n +0001097766 00000 n +0001097817 00000 n +0001097868 00000 n +0001097919 00000 n +0001097970 00000 n +0001098021 00000 n +0001098072 00000 n +0001098123 00000 n +0001098174 00000 n +0001098225 00000 n +0001098276 00000 n +0001098327 00000 n +0001098378 00000 n +0001098429 00000 n +0001098480 00000 n +0001098531 00000 n +0001098582 00000 n +0001098633 00000 n +0001098684 00000 n +0001098735 00000 n +0001098786 00000 n +0001098837 00000 n +0001098888 00000 n +0001098939 00000 n +0001098990 00000 n +0001099041 00000 n +0001099092 00000 n +0001099143 00000 n +0001099194 00000 n +0001099245 00000 n +0001099296 00000 n +0001099347 00000 n +0001099398 00000 n +0001099449 00000 n +0001099500 00000 n +0001099551 00000 n +0001099602 00000 n +0001099653 00000 n +0001099704 00000 n +0001099755 00000 n +0001099806 00000 n +0001099857 00000 n +0001099908 00000 n +0001099959 00000 n +0001100010 00000 n +0001100061 00000 n +0001100112 00000 n +0001100163 00000 n +0001100214 00000 n +0001100265 00000 n +0001100316 00000 n +0001100367 00000 n +0001100418 00000 n +0001100469 00000 n +0001100520 00000 n +0001100571 00000 n +0001100622 00000 n +0001100673 00000 n +0001100724 00000 n +0001100775 00000 n +0001100826 00000 n +0001100877 00000 n +0001100928 00000 n +0001100979 00000 n +0001101030 00000 n +0001101081 00000 n +0001101132 00000 n +0001101183 00000 n +0001101234 00000 n +0001101285 00000 n +0001101336 00000 n +0001101387 00000 n +0001101438 00000 n +0001101489 00000 n +0001101540 00000 n +0001101591 00000 n +0001101642 00000 n +0001101693 00000 n +0001101744 00000 n +0001101795 00000 n +0001101846 00000 n +0001101897 00000 n +0001101948 00000 n +0001101999 00000 n +0001102050 00000 n +0001102101 00000 n +0001102152 00000 n +0001102203 00000 n +0001102254 00000 n +0001102305 00000 n +0001102356 00000 n +0001102407 00000 n +0001102458 00000 n +0001102509 00000 n +0001102560 00000 n +0001102611 00000 n +0001102662 00000 n +0001102713 00000 n +0001102764 00000 n +0001102815 00000 n +0001102866 00000 n +0001102917 00000 n +0001102968 00000 n +0001103019 00000 n +0001103070 00000 n +0001103121 00000 n +0001103172 00000 n +0001103223 00000 n +0001103274 00000 n +0001103325 00000 n +0001103376 00000 n +0001103427 00000 n +0001103478 00000 n +0001103529 00000 n +0001103580 00000 n +0001103631 00000 n +0001103682 00000 n +0001103733 00000 n +0001103784 00000 n +0001103835 00000 n +0001103886 00000 n +0001103937 00000 n +0001103988 00000 n +0001104039 00000 n +0001104090 00000 n +0001104141 00000 n +0001104192 00000 n +0001104243 00000 n +0001104294 00000 n +0001104345 00000 n +0001104396 00000 n +0001104447 00000 n +0001104498 00000 n +0001104549 00000 n +0001104600 00000 n +0001104651 00000 n +0001104702 00000 n +0001104753 00000 n +0001104804 00000 n +0001104855 00000 n +0001104906 00000 n +0001104957 00000 n +0001105008 00000 n +0001105059 00000 n +0001105110 00000 n +0001105161 00000 n +0001105212 00000 n +0001105263 00000 n +0001105314 00000 n +0001105365 00000 n +0001105416 00000 n +0001105467 00000 n +0001105518 00000 n +0001105569 00000 n +0001105620 00000 n +0001105671 00000 n +0001105722 00000 n +0001105773 00000 n +0001105824 00000 n +0001105875 00000 n +0001105926 00000 n +0001105977 00000 n +0001106028 00000 n +0001106079 00000 n +0001106130 00000 n +0001106181 00000 n +0001106232 00000 n +0001106283 00000 n +0001106334 00000 n +0001106385 00000 n +0001106436 00000 n +0001106487 00000 n +0001106538 00000 n +0001106589 00000 n +0001106640 00000 n +0001106691 00000 n +0001106742 00000 n +0001106793 00000 n +0001106844 00000 n +0001106895 00000 n +0001106946 00000 n +0001106997 00000 n +0001107048 00000 n +0001107099 00000 n +0001107150 00000 n +0001107201 00000 n +0001107252 00000 n +0001107303 00000 n +0001107354 00000 n +0001107405 00000 n +0001107456 00000 n +0001107507 00000 n +0001107558 00000 n +0001107609 00000 n +0001107660 00000 n +0001107711 00000 n +0001107762 00000 n +0001107813 00000 n +0001107864 00000 n +0001107915 00000 n +0001107966 00000 n +0001108017 00000 n +0001108068 00000 n +0001108119 00000 n +0001108170 00000 n +0001108221 00000 n +0001108272 00000 n +0001108323 00000 n +0001108374 00000 n +0001108425 00000 n +0001108476 00000 n +0001108527 00000 n +0001108578 00000 n +0001108629 00000 n +0001108680 00000 n +0001108731 00000 n +0001108782 00000 n +0001108833 00000 n +0001108884 00000 n +0001108935 00000 n +0001108986 00000 n +0001109037 00000 n +0001109088 00000 n +0001109139 00000 n +0001109190 00000 n +0001109241 00000 n +0001109292 00000 n +0001109343 00000 n +0001109394 00000 n +0001109445 00000 n +0001109496 00000 n +0001109547 00000 n +0001109598 00000 n +0001109649 00000 n +0001109700 00000 n +0001109751 00000 n +0001109802 00000 n +0001109853 00000 n +0001109904 00000 n +0001109955 00000 n +0001110006 00000 n +0001110057 00000 n +0001110108 00000 n +0001110159 00000 n +0001110210 00000 n +0001110261 00000 n +0001110312 00000 n +0001110363 00000 n +0001110414 00000 n +0001110465 00000 n +0001110516 00000 n +0001110567 00000 n +0001110618 00000 n +0001110669 00000 n +0001110720 00000 n +0001110771 00000 n +0001110822 00000 n +0001110873 00000 n +0001110924 00000 n +0001110975 00000 n +0001111026 00000 n +0001111077 00000 n +0001111128 00000 n +0001111179 00000 n +0001111230 00000 n +0001111281 00000 n +0001111332 00000 n +0001111383 00000 n +0001111434 00000 n +0001111485 00000 n +0001111536 00000 n +0001111587 00000 n +0001111638 00000 n +0001111689 00000 n +0001111740 00000 n +0001111791 00000 n +0001111842 00000 n +0001111893 00000 n +0001111944 00000 n +0001111995 00000 n +0001112046 00000 n +0001112097 00000 n +0001112148 00000 n +0001112199 00000 n +0001112250 00000 n +0001112301 00000 n +0001112352 00000 n +0001112403 00000 n +0001112454 00000 n +0001112505 00000 n +0001112556 00000 n +0001112607 00000 n +0001112658 00000 n +0001112709 00000 n +0001112760 00000 n +0001112811 00000 n +0001112862 00000 n +0001112913 00000 n +0001112964 00000 n +0001113015 00000 n +0001113066 00000 n +0001113117 00000 n +0001113168 00000 n +0001113219 00000 n +0001113270 00000 n +0001113321 00000 n +0001113372 00000 n +0001113423 00000 n +0001113474 00000 n +0001113525 00000 n +0001113576 00000 n +0001113627 00000 n +0001113678 00000 n +0001113729 00000 n +0001113780 00000 n +0001113831 00000 n +0001113882 00000 n +0001113933 00000 n +0001113984 00000 n +0001114035 00000 n +0001114086 00000 n +0001114137 00000 n +0001114188 00000 n +0001114239 00000 n +0001114290 00000 n +0001114341 00000 n +0001114392 00000 n +0001114443 00000 n +0001114494 00000 n +0001114545 00000 n +0001114596 00000 n +0001114647 00000 n +0001114698 00000 n +0001114749 00000 n +0001114800 00000 n +0001114851 00000 n +0001114902 00000 n +0001114953 00000 n +0001115004 00000 n +0001115055 00000 n +0001115106 00000 n +0001115157 00000 n +0001115208 00000 n +0001115259 00000 n +0001115310 00000 n +0001115361 00000 n +0001115412 00000 n +0001115463 00000 n +0001115514 00000 n +0001115565 00000 n +0001115616 00000 n +0001115667 00000 n +0001115718 00000 n +0001115769 00000 n +0001115820 00000 n +0001115871 00000 n +0001115922 00000 n +0001115973 00000 n +0001116024 00000 n +0001116075 00000 n +0001116126 00000 n +0001116177 00000 n +0001116228 00000 n +0001116278 00000 n +0001116329 00000 n +0001116380 00000 n +0001116431 00000 n +0001116482 00000 n +0001116533 00000 n +0001116584 00000 n +0001116635 00000 n +0001116686 00000 n +0001116737 00000 n +0001116788 00000 n +0001116839 00000 n +0001116890 00000 n +0001116941 00000 n +0001116992 00000 n +0001117043 00000 n +0001117094 00000 n +0001117145 00000 n +0001117196 00000 n +0001117247 00000 n +0001117298 00000 n +0001117349 00000 n +0001117400 00000 n +0001117451 00000 n +0001117502 00000 n +0001117553 00000 n +0001117604 00000 n +0001117655 00000 n +0001117706 00000 n +0001117757 00000 n +0001117808 00000 n +0001117859 00000 n +0001117910 00000 n +0001117961 00000 n +0001118012 00000 n +0001118063 00000 n +0001118114 00000 n +0001118165 00000 n +0001118216 00000 n +0001118267 00000 n +0001118318 00000 n +0001118369 00000 n +0001118420 00000 n +0001118471 00000 n +0001118522 00000 n +0001118573 00000 n +0001118624 00000 n +0001118675 00000 n +0001118726 00000 n +0001118777 00000 n +0001118828 00000 n +0001118879 00000 n +0001118930 00000 n +0001118981 00000 n +0001119032 00000 n +0001119083 00000 n +0001119134 00000 n +0001119185 00000 n +0001119236 00000 n +0001119287 00000 n +0001119338 00000 n +0001119389 00000 n +0001119440 00000 n +0001119491 00000 n +0001119542 00000 n +0001119593 00000 n +0001119644 00000 n +0001119695 00000 n +0001119746 00000 n +0001119797 00000 n +0001119848 00000 n +0001119899 00000 n +0001119950 00000 n +0001120001 00000 n +0001120052 00000 n +0001120103 00000 n +0001120154 00000 n +0001120205 00000 n +0001120256 00000 n +0001120307 00000 n +0001120358 00000 n +0001120409 00000 n +0001120460 00000 n +0001120511 00000 n +0001120562 00000 n +0001120613 00000 n +0001120664 00000 n +0001120715 00000 n +0001120766 00000 n +0001120817 00000 n +0001120868 00000 n +0001120919 00000 n +0001120970 00000 n +0001121021 00000 n +0001121072 00000 n +0001121123 00000 n +0001121174 00000 n +0001121225 00000 n +0001121276 00000 n +0001121327 00000 n +0001121378 00000 n +0001121429 00000 n +0001121480 00000 n +0001121531 00000 n +0001121582 00000 n +0001121633 00000 n +0001121684 00000 n +0001121735 00000 n +0001121785 00000 n +0001121836 00000 n +0001121887 00000 n +0001121938 00000 n +0001121989 00000 n +0001122040 00000 n +0001122091 00000 n +0001122142 00000 n +0001122193 00000 n +0001122244 00000 n +0001122295 00000 n +0001122346 00000 n +0001122397 00000 n +0001122448 00000 n +0001122499 00000 n +0001122550 00000 n +0001122601 00000 n +0001122652 00000 n +0001122703 00000 n +0001122754 00000 n +0001122805 00000 n +0001122856 00000 n +0001122907 00000 n +0001122958 00000 n +0001123009 00000 n +0001123060 00000 n +0001123111 00000 n +0001123162 00000 n +0001123213 00000 n +0001123264 00000 n +0001123315 00000 n +0001123366 00000 n +0001123417 00000 n +0001123468 00000 n +0001123519 00000 n +0001123570 00000 n +0001123621 00000 n +0001123672 00000 n +0001123723 00000 n +0001123774 00000 n +0001123825 00000 n +0001123876 00000 n +0001123927 00000 n +0001123978 00000 n +0001124029 00000 n +0001124080 00000 n +0001124131 00000 n +0001124182 00000 n +0001124233 00000 n +0001124284 00000 n +0001124335 00000 n +0001124386 00000 n +0001124437 00000 n +0001124488 00000 n +0001124539 00000 n +0001124590 00000 n +0001124641 00000 n +0001124692 00000 n +0001124743 00000 n +0001124794 00000 n +0001124845 00000 n +0001124896 00000 n +0001124947 00000 n +0001124998 00000 n +0001125049 00000 n +0001125100 00000 n +0001125151 00000 n +0001125202 00000 n +0001125253 00000 n +0001125304 00000 n +0001125355 00000 n +0001125406 00000 n +0001125457 00000 n +0001125508 00000 n +0001125559 00000 n +0001125610 00000 n +0001125661 00000 n +0001125712 00000 n +0001125763 00000 n +0001125814 00000 n +0001125865 00000 n +0001125916 00000 n +0001125967 00000 n +0001126018 00000 n +0001126069 00000 n +0001126120 00000 n +0001126171 00000 n +0001126222 00000 n +0001126273 00000 n +0001126324 00000 n +0001126375 00000 n +0001126426 00000 n +0001126477 00000 n +0001126528 00000 n +0001126579 00000 n +0001126630 00000 n +0001126681 00000 n +0001126732 00000 n +0001126783 00000 n +0001126834 00000 n +0001126885 00000 n +0001126936 00000 n +0001126987 00000 n +0001127038 00000 n +0001127089 00000 n +0001127140 00000 n +0001127191 00000 n +0001127242 00000 n +0001127293 00000 n +0001127344 00000 n +0001127395 00000 n +0001127446 00000 n +0001127497 00000 n +0001127548 00000 n +0001127599 00000 n +0001127650 00000 n +0001127701 00000 n +0001127752 00000 n +0001127803 00000 n +0001127854 00000 n +0001127905 00000 n +0001127956 00000 n +0001128007 00000 n +0001128058 00000 n +0001128109 00000 n +0001128160 00000 n +0001128211 00000 n +0001128262 00000 n +0001128313 00000 n +0001128364 00000 n +0001128415 00000 n +0001128466 00000 n +0001128517 00000 n +0001128568 00000 n +0001128619 00000 n +0001128670 00000 n +0001128721 00000 n +0001128772 00000 n +0001128823 00000 n +0001128874 00000 n +0001128925 00000 n +0001128976 00000 n +0001129027 00000 n +0001129078 00000 n +0001129129 00000 n +0001129180 00000 n +0001129231 00000 n +0001129282 00000 n +0001129333 00000 n +0001129384 00000 n +0001129435 00000 n +0001129486 00000 n +0001129537 00000 n +0001129588 00000 n +0001129639 00000 n +0001129690 00000 n +0001129741 00000 n +0001129792 00000 n +0001129843 00000 n +0001129894 00000 n +0001129945 00000 n +0001129996 00000 n +0001130047 00000 n +0001130098 00000 n +0001130149 00000 n +0001130200 00000 n +0001130251 00000 n +0001130302 00000 n +0001130353 00000 n +0001130404 00000 n +0001130455 00000 n +0001130506 00000 n +0001130557 00000 n +0001130608 00000 n +0001130659 00000 n +0001130710 00000 n +0001130761 00000 n +0001130812 00000 n +0001130863 00000 n +0001130914 00000 n +0001130965 00000 n +0001131016 00000 n +0001131067 00000 n +0001131118 00000 n +0001131169 00000 n +0001131220 00000 n +0001131271 00000 n +0001131322 00000 n +0001131373 00000 n +0001131424 00000 n +0001131475 00000 n +0001131526 00000 n +0001131577 00000 n +0001131628 00000 n +0001131679 00000 n +0001131730 00000 n +0001131781 00000 n +0001131832 00000 n +0001131883 00000 n +0001131934 00000 n +0001131985 00000 n +0001132036 00000 n +0001132087 00000 n +0001132138 00000 n +0001132189 00000 n +0001132240 00000 n +0001132291 00000 n +0001132342 00000 n +0001132393 00000 n +0001132444 00000 n +0001132495 00000 n +0001132546 00000 n +0001132597 00000 n +0001132648 00000 n +0001132699 00000 n +0001132750 00000 n +0001132801 00000 n +0001132852 00000 n +0001132903 00000 n +0001132954 00000 n +0001133005 00000 n +0001133056 00000 n +0001133107 00000 n +0001133158 00000 n +0001133209 00000 n +0001133260 00000 n +0001133311 00000 n +0001133362 00000 n +0001133413 00000 n +0001133464 00000 n +0001133515 00000 n +0001133566 00000 n +0001133617 00000 n +0001133668 00000 n +0001133719 00000 n +0001133770 00000 n +0001133821 00000 n +0001133872 00000 n +0001133923 00000 n +0001133974 00000 n +0001134025 00000 n +0001134076 00000 n +0001134127 00000 n +0001134178 00000 n +0001134229 00000 n +0001134280 00000 n +0001134331 00000 n +0001134382 00000 n +0001134433 00000 n +0001134484 00000 n +0001134535 00000 n +0001134586 00000 n +0001134637 00000 n +0001134688 00000 n +0001134739 00000 n +0001134790 00000 n +0001134841 00000 n +0001134892 00000 n +0001134943 00000 n +0001134994 00000 n +0001135045 00000 n +0001135096 00000 n +0001135147 00000 n +0001135198 00000 n +0001135249 00000 n +0001135300 00000 n +0001135351 00000 n +0001135402 00000 n +0001135453 00000 n +0001135504 00000 n +0001135555 00000 n +0001135606 00000 n +0001135657 00000 n +0001135708 00000 n +0001135759 00000 n +0001135810 00000 n +0001135861 00000 n +0001135912 00000 n +0001135963 00000 n +0001136014 00000 n +0001136065 00000 n +0001136116 00000 n +0001136167 00000 n +0001136218 00000 n +0001136269 00000 n +0001136320 00000 n +0001136371 00000 n +0001136422 00000 n +0001136473 00000 n +0001136524 00000 n +0001136575 00000 n +0001136626 00000 n +0001136677 00000 n +0001136728 00000 n +0001136779 00000 n +0001136830 00000 n +0001136881 00000 n +0001136932 00000 n +0001136983 00000 n +0001137034 00000 n +0001137085 00000 n +0001137136 00000 n +0001137187 00000 n +0001137238 00000 n +0001137289 00000 n +0001137340 00000 n +0001137391 00000 n +0001137442 00000 n +0001137493 00000 n +0001137544 00000 n +0001137595 00000 n +0001137646 00000 n +0001137697 00000 n +0001137748 00000 n +0001137799 00000 n +0001137850 00000 n +0001137901 00000 n +0001137952 00000 n +0001138003 00000 n +0001138054 00000 n +0001138105 00000 n +0001138156 00000 n +0001138207 00000 n +0001138258 00000 n +0001138309 00000 n +0001138360 00000 n +0001138411 00000 n +0001138462 00000 n +0001138513 00000 n +0001138564 00000 n +0001138615 00000 n +0001138666 00000 n +0001138717 00000 n +0001138768 00000 n +0001138819 00000 n +0001138870 00000 n +0001138921 00000 n +0001138972 00000 n +0001139023 00000 n +0001139074 00000 n +0001139125 00000 n +0001139176 00000 n +0001139227 00000 n +0001139278 00000 n +0001139329 00000 n +0001139380 00000 n +0001139431 00000 n +0001139482 00000 n +0001139533 00000 n +0001139584 00000 n +0001139635 00000 n +0001139686 00000 n +0001139737 00000 n +0001139788 00000 n +0001139839 00000 n +0001139890 00000 n +0001139941 00000 n +0001139992 00000 n +0001140043 00000 n +0001140094 00000 n +0001140145 00000 n +0001140196 00000 n +0001140247 00000 n +0001140298 00000 n +0001140349 00000 n +0001140400 00000 n +0001140451 00000 n +0001140502 00000 n +0001140553 00000 n +0001140604 00000 n +0001140655 00000 n +0001140706 00000 n +0001140757 00000 n +0001140808 00000 n +0001140859 00000 n +0001140910 00000 n +0001140961 00000 n +0001141012 00000 n +0001141063 00000 n +0001141114 00000 n +0001141165 00000 n +0001141216 00000 n +0001141267 00000 n +0001141318 00000 n +0001141369 00000 n +0001141420 00000 n +0001141471 00000 n +0001141522 00000 n +0001141573 00000 n +0001141624 00000 n +0001141675 00000 n +0001141726 00000 n +0001141777 00000 n +0001141828 00000 n +0001141879 00000 n +0001141930 00000 n +0001141981 00000 n +0001142032 00000 n +0001142083 00000 n +0001142134 00000 n +0001142185 00000 n +0001142236 00000 n +0001142287 00000 n +0001142338 00000 n +0001142389 00000 n +0001142440 00000 n +0001142491 00000 n +0001142542 00000 n +0001142593 00000 n +0001142644 00000 n +0001142695 00000 n +0001142746 00000 n +0001142797 00000 n +0001142848 00000 n +0001142899 00000 n +0001142950 00000 n +0001143001 00000 n +0001143052 00000 n +0001143103 00000 n +0001143154 00000 n +0001143205 00000 n +0001143256 00000 n +0001143307 00000 n +0001143358 00000 n +0001143409 00000 n +0001143460 00000 n +0001143511 00000 n +0001143562 00000 n +0001143613 00000 n +0001143664 00000 n +0001143715 00000 n +0001143766 00000 n +0001143817 00000 n +0001143868 00000 n +0001143919 00000 n +0001143970 00000 n +0001144021 00000 n +0001144072 00000 n +0001144123 00000 n +0001144174 00000 n +0001144225 00000 n +0001144276 00000 n +0001144327 00000 n +0001144378 00000 n +0001144429 00000 n +0001144480 00000 n +0001144531 00000 n +0001144582 00000 n +0001144633 00000 n +0001144684 00000 n +0001144735 00000 n +0001144786 00000 n +0001144836 00000 n +0001144887 00000 n +0001144938 00000 n +0001144989 00000 n +0001145040 00000 n +0001145091 00000 n +0001145142 00000 n +0001145193 00000 n +0001145243 00000 n +0001145294 00000 n +0001145345 00000 n +0001145396 00000 n +0001145447 00000 n +0001145498 00000 n +0001145548 00000 n +0001145599 00000 n +0001145650 00000 n +0001145701 00000 n +0001145752 00000 n +0001145803 00000 n +0001145854 00000 n +0001145905 00000 n +0001145956 00000 n +0001146007 00000 n +0001146058 00000 n +0001146109 00000 n +0001146160 00000 n +0001146211 00000 n +0001146262 00000 n +0001146313 00000 n +0001146364 00000 n +0001146415 00000 n +0001146466 00000 n +0001146517 00000 n +0001146568 00000 n +0001146619 00000 n +0001146670 00000 n +0001146721 00000 n +0001146772 00000 n +0001146823 00000 n +0001146874 00000 n +0001146925 00000 n +0001146976 00000 n +0001147027 00000 n +0001147078 00000 n +0001147129 00000 n +0001147180 00000 n +0001147231 00000 n +0001147282 00000 n +0001147333 00000 n +0001147384 00000 n +0001147435 00000 n +0001147486 00000 n +0001147537 00000 n +0001147588 00000 n +0001147639 00000 n +0001147690 00000 n +0001147741 00000 n +0001147792 00000 n +0001147843 00000 n +0001147894 00000 n +0001147945 00000 n +0001147996 00000 n +0001148047 00000 n +0001148098 00000 n +0001148149 00000 n +0001148200 00000 n +0001148251 00000 n +0001148302 00000 n +0001148353 00000 n +0001148404 00000 n +0001148455 00000 n +0001148506 00000 n +0001148557 00000 n +0001148608 00000 n +0001148659 00000 n +0001148710 00000 n +0001148761 00000 n +0001148812 00000 n +0001148863 00000 n +0001148914 00000 n +0001148965 00000 n +0001149016 00000 n +0001149067 00000 n +0001149118 00000 n +0001149169 00000 n +0001149220 00000 n +0001149271 00000 n +0001149322 00000 n +0001149373 00000 n +0001149424 00000 n +0001149475 00000 n +0001149526 00000 n +0001149577 00000 n +0001149628 00000 n +0001149679 00000 n +0001149730 00000 n +0001149781 00000 n +0001149832 00000 n +0001149883 00000 n +0001149934 00000 n +0001149985 00000 n +0001150035 00000 n +0001150085 00000 n +0001150135 00000 n +0001150185 00000 n +0001150235 00000 n +0001150285 00000 n +0001150335 00000 n +0001150385 00000 n +0001150435 00000 n +0001150485 00000 n +0001150535 00000 n +0001150585 00000 n +0001150635 00000 n +0001150685 00000 n +0001150735 00000 n +0001150785 00000 n +0001150835 00000 n +0001150885 00000 n +0001150935 00000 n +0001150985 00000 n +0001151035 00000 n +0001151086 00000 n +0001151137 00000 n +0001151188 00000 n +0001151239 00000 n +0001151290 00000 n +0001151341 00000 n +0001151392 00000 n +0001151443 00000 n +0001151494 00000 n +0001151545 00000 n +0001151596 00000 n +0001151647 00000 n +0001151698 00000 n +0001151749 00000 n +0001151800 00000 n +0001151851 00000 n +0001151902 00000 n +0001151953 00000 n +0001152004 00000 n +0001152055 00000 n +0001152106 00000 n +0001152157 00000 n +0001152208 00000 n +0001152259 00000 n +0001152310 00000 n +0001152361 00000 n +0001152412 00000 n +0001152463 00000 n +0001152514 00000 n +0001152565 00000 n +0001152616 00000 n +0001152667 00000 n +0001152718 00000 n +0001152769 00000 n +0001152820 00000 n +0001152871 00000 n +0001152922 00000 n +0001152973 00000 n +0001153024 00000 n +0001153075 00000 n +0001153126 00000 n +0001153177 00000 n +0001153228 00000 n +0001153278 00000 n +0001153328 00000 n +0001153378 00000 n +0001153428 00000 n +0001153478 00000 n +0001153528 00000 n +0001153578 00000 n +0001153628 00000 n +0001153678 00000 n +0001153728 00000 n +0001153778 00000 n +0001153828 00000 n +0001153878 00000 n +0001153928 00000 n +0001153978 00000 n +0001154028 00000 n +0001154078 00000 n +0001154128 00000 n +0001154178 00000 n +0001154228 00000 n +0001154278 00000 n +0001154328 00000 n +0001154378 00000 n +0001154428 00000 n +0001154478 00000 n +0001154528 00000 n +0001154578 00000 n +0001154628 00000 n +0001154678 00000 n +0001154728 00000 n +0001154778 00000 n +0001154828 00000 n +0001154878 00000 n +0001154928 00000 n +0001154978 00000 n +0001155028 00000 n +0001155078 00000 n +0001155128 00000 n +0001155178 00000 n +0001155228 00000 n +0001155278 00000 n +0001155328 00000 n +0001155378 00000 n +0001155428 00000 n +0001155478 00000 n +0001155528 00000 n +0001155578 00000 n +0001155628 00000 n +0001155678 00000 n +0001155728 00000 n +0001155778 00000 n +0001155828 00000 n +0001155878 00000 n +0001155928 00000 n +0001155978 00000 n +0001156028 00000 n +0001156078 00000 n +0001156128 00000 n +0001156178 00000 n +0001156228 00000 n +0001156278 00000 n +0001156328 00000 n +0001156378 00000 n +0001156428 00000 n +0001156478 00000 n +0001156528 00000 n +0001156578 00000 n +0001156628 00000 n +0001156678 00000 n +0001156728 00000 n +0001156778 00000 n +0001156828 00000 n +0001156878 00000 n +0001156928 00000 n +0001156978 00000 n +0001157028 00000 n +0001157078 00000 n +0001157128 00000 n +0001157178 00000 n +0001157228 00000 n +0001157278 00000 n +0001157328 00000 n +0001157378 00000 n +0001157428 00000 n +0001157478 00000 n +0001157528 00000 n +0001157578 00000 n +0001157628 00000 n +0001157678 00000 n +0001157728 00000 n +0001157778 00000 n +0001157828 00000 n +0001157878 00000 n +0001157928 00000 n +0001157978 00000 n +0001158028 00000 n +0001158078 00000 n +0001158128 00000 n +0001158178 00000 n +0001158228 00000 n +0001158278 00000 n +0001158328 00000 n +0001158378 00000 n +0001158428 00000 n +0001158478 00000 n +0001158528 00000 n +0001158578 00000 n +0001158628 00000 n +0001158678 00000 n +0001158728 00000 n +0001158778 00000 n +0001158828 00000 n +0001158878 00000 n +0001158929 00000 n +0001158979 00000 n +0001159029 00000 n +0001159079 00000 n +0001159130 00000 n +0001159180 00000 n +0001159230 00000 n +0001159280 00000 n +0001159330 00000 n +0001159380 00000 n +0001159430 00000 n +0001159480 00000 n +0001159530 00000 n +0001159580 00000 n +0001159630 00000 n +0001159680 00000 n +0001159730 00000 n +0001159780 00000 n +0001159830 00000 n +0001159880 00000 n +0001159930 00000 n +0001159980 00000 n +0001160030 00000 n +0001160080 00000 n +0001160130 00000 n +0001160180 00000 n +0001160230 00000 n +0001160280 00000 n +0001160330 00000 n +0001160380 00000 n +0001160430 00000 n +0001160480 00000 n +0001160530 00000 n +0001160580 00000 n +0001160630 00000 n +0001160680 00000 n +0001160730 00000 n +0001160780 00000 n +0001160830 00000 n +0001160880 00000 n +0001160930 00000 n +0001160980 00000 n +0001161030 00000 n +0001161080 00000 n +0001161130 00000 n +0001161180 00000 n +0001161230 00000 n +0001161280 00000 n +0001161330 00000 n +0001161380 00000 n +0001161430 00000 n +0001161480 00000 n +0001161530 00000 n +0001161580 00000 n +0001161630 00000 n +0001161680 00000 n +0001161730 00000 n +0001161780 00000 n +0001161830 00000 n +0001161880 00000 n +0001161930 00000 n +0001161980 00000 n +0001162030 00000 n +0001162080 00000 n +0001162130 00000 n +0001162180 00000 n +0001162230 00000 n +0001162280 00000 n +0001162330 00000 n +0001162380 00000 n +0001162430 00000 n +0001162480 00000 n +0001162530 00000 n +0001162580 00000 n +0001162630 00000 n +0001162680 00000 n +0001162730 00000 n +0001162780 00000 n +0001162830 00000 n +0001162880 00000 n +0001162930 00000 n +0001162980 00000 n +0001163030 00000 n +0001163080 00000 n +0001163130 00000 n +0001163180 00000 n +0001163230 00000 n +0001163280 00000 n +0001163330 00000 n +0001163380 00000 n +0001163430 00000 n +0001163480 00000 n +0001163530 00000 n +0001163580 00000 n +0001163630 00000 n +0001163680 00000 n +0001163730 00000 n +0001163780 00000 n +0001163830 00000 n +0001163880 00000 n +0001163930 00000 n +0001163980 00000 n +0001164030 00000 n +0001164080 00000 n +0001164130 00000 n +0001164180 00000 n +0001164230 00000 n +0001164280 00000 n +0001164330 00000 n +0001164380 00000 n +0001164430 00000 n +0001164480 00000 n +0001164530 00000 n +0001164580 00000 n +0001164630 00000 n +0001164680 00000 n +0001164730 00000 n +0001164780 00000 n +0001164830 00000 n +0001164880 00000 n +0001164930 00000 n +0001164980 00000 n +0001165030 00000 n +0001165080 00000 n +0001165130 00000 n +0001165180 00000 n +0001165230 00000 n +0001165280 00000 n +0001165330 00000 n +0001165380 00000 n +0001165430 00000 n +0001165480 00000 n +0001165530 00000 n +0001165580 00000 n +0001165630 00000 n +0001165680 00000 n +0001165730 00000 n +0001165780 00000 n +0001165830 00000 n +0001165880 00000 n +0001165930 00000 n +0001165980 00000 n +0001166030 00000 n +0001166084 00000 n +0001166138 00000 n +0001166192 00000 n +0001166246 00000 n +0001166297 00000 n +0001166350 00000 n +0001166403 00000 n +0001166456 00000 n +0001166509 00000 n +0001166562 00000 n +0001166615 00000 n +0001166668 00000 n +0001166719 00000 n +0001166770 00000 n +0001166821 00000 n +0001166872 00000 n +0001166923 00000 n +0001166974 00000 n +0001167025 00000 n +0001167076 00000 n +0001167127 00000 n +0001167178 00000 n +0001167229 00000 n +0001167280 00000 n +0001167331 00000 n +0001167379 00000 n +0001167429 00000 n +0001167479 00000 n +0001167529 00000 n +0001167579 00000 n +0001167629 00000 n +0001167679 00000 n +0001167729 00000 n +0001167779 00000 n +0001167829 00000 n +0001167879 00000 n +0001167929 00000 n +0001167979 00000 n +0001168029 00000 n +0001168079 00000 n +0001168129 00000 n +0001168179 00000 n +0001168229 00000 n +0001168279 00000 n +0001168329 00000 n +0001168379 00000 n +0001168429 00000 n +0001168479 00000 n +0001168529 00000 n +0001168579 00000 n +0001168629 00000 n +0001168679 00000 n +0001168729 00000 n +0001168779 00000 n +0001168829 00000 n +0001168879 00000 n +0001168929 00000 n +0001168979 00000 n +0001169029 00000 n +0001169079 00000 n +0001169129 00000 n +0001169179 00000 n +0001169229 00000 n +0001169279 00000 n +0001169319 00000 n +0001169346 00000 n +0001169432 00000 n +0001169588 00000 n +0001169728 00000 n +0001169873 00000 n +0001170018 00000 n +0001170163 00000 n +0001170308 00000 n +0001170453 00000 n +0001170598 00000 n +0001170743 00000 n +0001170888 00000 n +0001171033 00000 n +0001171189 00000 n +0001171339 00000 n +0001171494 00000 n +0001171649 00000 n +0001171804 00000 n +0001171959 00000 n +0001172114 00000 n +0001172269 00000 n +0001172424 00000 n +0001172579 00000 n +0001172734 00000 n +0001172890 00000 n +0001173045 00000 n +0001173200 00000 n +0001173355 00000 n +0001173510 00000 n +0001173665 00000 n +0001173820 00000 n +0001173975 00000 n +0001174130 00000 n +0001174285 00000 n +0001174440 00000 n +0001174577 00000 n +0001174732 00000 n +0001174887 00000 n +0001175042 00000 n +0001175197 00000 n +0001175352 00000 n +0001175507 00000 n +0001175662 00000 n +0001175798 00000 n +0001179482 00000 n +trailer +<<4B8F8C127D33F04DB0D7275E53B6FD6E>]>> +startxref +116 +%%EOF diff --git a/lefdef/doc/defapi/defapiTOC.html b/lefdef/doc/defapi/defapiTOC.html new file mode 100644 index 00000000..96b5d469 --- /dev/null +++ b/lefdef/doc/defapi/defapiTOC.html @@ -0,0 +1,557 @@ + + + + + Table of Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

Contents

+
+

Preface

+

What's New

+

Related Documents

+

Typographic and Syntax Conventions

+

1 +

+

Introduction

+

Overview

+

DEF Reader Working Modes

+

Comparison Utility

+

Compressed DEF Files

+

Orientation Codes

+

2 +

+

DEF Reader Setup and Control Routines

+

DEF API Routines

+
defrInit
+
defrInitSession
+
defrClear
+
defrRead
+
defrSetUserData
+
defrGetUserData
+
defrSetAddPathToNet
+
defrSetAllowComponentNets
+
defrGetAllowComponentNets
+
defrSetCommentChar
+
defrSetRegisterUnusedCallbacks
+
defrPrintUnusedCallbacks
+
defrUnusedCallbackCount
+
Example
+

3 +

+

DEF Reader Callback Routines

+

Callback Function Format

+
Callback Type
+
DEF_Data
+
User Data
+

Callback Types and Setting Routines

+
Examples
+

User Callback Routines

+
defrBlockageCbkFnType
+
defrBoxCbkFnType
+
defrComponentCbkFnType
+
defrComponentMaskShiftLayerCbkFnType
+
defrDoubleCbkFnType
+
defrFillCbkFnType
+
defrGcellGridCbkFnType
+
defrGroupCbkFnType
+
defrIntegerCbkFnType
+
defrNetCbkFnType
+
defrNonDefaultCbkFnType
+
defrPathCbkFnType
+
defrPinCbkFnType
+
defrPinPropCbkFnType
+
defrPropCbkFnType
+
defrRegionCbkFnType
+
defrRowCbkFnType
+
defrScanchainCbkFnType
+
defrSlotCbkFnType
+
defrStringCbkFnType
+
defrStylesCbkFnType
+
defrTrackCbkFnType
+
defrViaCbkFnType
+
defrVoidCbkFnType
+
Examples
+

4 +

+

DEF Reader Classes

+

Introduction

+

Callback Style Interface

+

Retrieving Repeating DEF Data

+

Deriving C Syntax from C++ Syntax

+
C++ Syntax
+
C Syntax
+

DEF Reader Class Routines

+
defiBlockage
+
defiBox
+
defiComponent
+
defiComponentMaskShiftLayer
+
defiFill
+
defiGcellGrid
+
defiGeometries
+
defiGroup
+
defiNet
+
defiNonDefault
+
defiOrdered
+
defiPath
+
defiPin
+
defiPinAntennaModel
+
defiPinPort
+
defiPinProp
+
defiPoints
+
defiProp
+
defiRegion
+
defiRow
+
defiScanchain
+
defiShield
+
defiSite
+
defiSlot
+
defiStyles
+
defiSubnet
+
defiTrack
+
defiVia
+
defiViaData
+
defiVpin
+
defiWire
+

5 +

+

DEF Writer Callback Routines

+

Callback Function Format

+
Callback Type
+
User Data
+

Callback Types and Setting Routines

+

6 +

+

DEF Writer Routines

+

DEF Writer Setup and Control

+
defwInit
+
defwInitCbk
+
defwEnd
+
defwCurrentLineNumber
+
defwNewLine
+
defwAddComment
+
defwAddIntent
+
defwPrintError
+
Setup Examples
+

Blockages

+
defwStartBlockages
+
defwEndBlockages
+
defwBlockageDesignRuleWidth
+
defwBlockagesLayerDesignRuleWidth
+
defwBlockageLayer
+
defwBlockagesLayer
+
defwBlockagesLayerComponent
+
defwBlockageLayerExceptpgnet
+
defwBlockagesLayerExceptpgnet
+
defwBlockageLayerFills
+
defwBlockagesLayerFills
+
defwBlockageLayerPushdown
+
defwBlockagesLayerPushdown
+
defwBlockageLayerSlots
+
defwBlockagePlacement
+
defwBlockagesPlacement
+
defwBlockagePlacementComponent
+
defwBlockagesPlacementComponent
+
defwBlockagePlacementPartial
+
defwBlockagesPlacementPartial
+
defwBlockagePlacementPushdown
+
defwBlockagesPlacementPushdown
+
defwBlockagePlacementSoft
+
defwBlockagesPlacementSoft
+
defwBlockagePolygon
+
defwBlockagesPolygon
+
defwBlockageRect
+
defwBlockagesRect
+
defwBlockagesLayerMask
+
defwBlockageSpacing
+

Bus Bit Characters

+
defwBusBitChars
+

Components

+
defwStartComponents
+
defwEndComponents
+
defwComponent
+
defwComponentStr
+
defwComponentHalo
+
defwComponentHaloSoft
+
defwComponentRouteHalo
+

Design Name

+
defwDesignName
+

Die Area

+
defwDieArea
+
defwDieAreaList
+
Die Area Example
+

Divider Character

+
defwDividerChar
+

Extensions

+
defwStartBeginext
+
defwEndBeginext
+
defwBeginextCreator
+
defwBeginextDate
+
defwBeginextRevision
+
defwBeginextSyntax
+
Extensions Example
+

Fills

+
defwStartFills
+
defwEndFills
+
defwFillLayer
+
defwFillLayerOPC
+
defwFillPoints
+
defwFillPolygon
+
defwFillRect
+
defwFillVia
+
defwFillViaOPC
+

GCell Grid

+
defwGcellGrid
+
Gcell Grid Example
+

Groups

+
defwStartGroups
+
defwEndGroups
+
defwGroup
+
defwGroupRegion
+

History

+
defwHistory
+

Nets

+
defwStartNets
+
defwEndNets
+
defwNet
+
defwNetMustjoinConnection
+
defwNetEndOneNet
+
defwNetConnection
+
defwNetEstCap
+
defwNetFixedBump
+
defwNetFrequency
+
defwNetNondefaultRule
+
defwNetOriginal
+
defwNetPattern
+
defwNetSource
+
defwNetUse
+
defwNetVpin
+
defwNetVpinStr
+
defwNetWeight
+
defwNetXtalk
+
Nets Example
+

Regular Wiring

+
defwNetPathStart
+
defwNetPathEnd
+
defwNetPathLayer
+
defwNetPathPoint
+
defwNetPathStyle
+
defwNetPathVia
+
defwNetPathViaWithOrient
+
defwNetPathViaWithOrientStr
+
Regular Wiring Example
+

Subnet

+
defwNetSubnetStart
+
defwNetSubnetEnd
+
defwNetSubnetPin
+
Subnet Example
+

Nondefault Rules

+
defwStartNonDefaultRules
+
defwEndNonDefaultRules
+
defwNonDefaultRule
+
defwNonDefaultRuleLayer
+
defwNonDefaultRuleMinCuts
+
defwNonDefaultRuleVia
+
defwNonDefaultRuleViaRule
+

Pins

+
defwStartPins
+
defwEndPins
+
defwPin
+
defwPinStr
+
defwPinAntennaModel
+
defwPinAntennaPinDiffArea
+
defwPinAntennaPinGateArea
+
defwPinAntennaPinMaxAreaCar
+
defwPinAntennaPinMaxCutCar
+
defwPinAntennaPinMaxSideAreaCar
+
defwPinAntennaPinPartialCutArea
+
defwPinAntennaPinPartialMetalArea
+
defwPinAntennaPinPartialMetalSideArea
+
defwPinGroundSensitivity
+
defwPinLayer
+
defwPinNetExpr
+
defwPinPolygon
+
defwPinPort
+
defwPinPortLayer
+
defwPinPortLocation
+
defwPinPortPolygon
+
defwPinPortVia
+
defwPinSupplySensitivity
+
defwPinVia
+
Pins Example
+

Pin Properties

+
defwStartPinProperties
+
defwEndPinProperties
+
defwPinProperty
+
Pin Properties Example
+

Property Definitions

+
defwStartPropDef
+
defwEndPropDef
+
defwIntPropDef
+
defwRealPropDef
+
defwStringPropDef
+
Property Definitions Example
+

Property Statements

+
defwIntProperty
+
defwRealProperty
+
defwStringProperty
+
Property Statements Example
+

Regions

+
defwStartRegions
+
defwEndRegions
+
defwRegionName
+
defwRegionPoints
+
defwRegionType
+
Regions Example
+

Rows

+
defwRow
+
defwRowStr
+
Rows Example
+

Scan Chains

+
defwStartScanchains
+
defwEndScanchains
+
defwScanchain
+
defwScanchainCommonscanpins
+
defwScanchainFloating
+
defwScanchainFloatingBits
+
defwScanchainOrdered
+
defwScanchainOrderedBits
+
defwScanchainPartition
+
defwScanchainStart
+
defwScanchainStop
+
Scan Chain Example
+

Special Nets

+
defwStartSpecialNets
+
defwEndSpecialNets
+
defwSpecialNet
+
defwSpecialNetEndOneNet
+
defwSpecialNetConnection
+
defwSpecialNetEstCap
+
defwSpecialNetFixedBump
+
defwSpecialNetOriginal
+
defwSpecialNetPattern
+
defwSpecialNetSource
+
defwSpecialNetUse
+
defwSpecialNetVoltage
+
defwSpecialNetWeight
+
Special Nets Example
+

Special Wiring

+
defwSpecialNetPathStart
+
defwSpecialNetPathEnd
+
defwSpecialNetPathLayer
+
defwSpecialNetPathPoint
+
defwSpecialNetPathPointWithWireExt
+
defwSpecialNetPathShape
+
defwSpecialNetPathStyle
+
defwSpecialNetPathVia
+
defwSpecialNetPathViaData
+
defwSpecialNetPathWidth
+
defwSpecialNetShieldNetName
+
defwSpecialNetPolygon
+
defwSpecialNetRect
+
Special Wiring Example
+

Shielded Routing

+
defwSpecialNetShieldStart
+
defwSpecialNetShieldEnd
+
defwSpecialNetShieldLayer
+
defwSpecialNetShieldPoint
+
defwSpecialNetShieldShape
+
defwSpecialNetShieldVia
+
defwSpecialNetShieldViaData
+
defwSpecialNetShieldWidth
+
Shielded Routing Example
+

Slots

+
defwStartSlots
+
defwEndSlots
+
defwSlotLayer
+
defwSlotPolygon
+
defwSlotRect
+

Styles

+
defwStartStyles
+
defwEndStyles
+
defwStyles
+

Technology

+
defwTechnology
+

Tracks

+
defwTracks
+
Tracks Example
+

Units

+
defwUnits
+

Version

+
defwVersion
+

Vias

+
defwStartVias
+
defwEndVias
+
defwViaName
+
defwOneViaEnd
+
defwViaPolygon
+
defwViaRect
+
defwViaViarule
+
defwViaViaruleRowCol
+
defwViaViaruleOrigin
+
defwViaViaruleOffset
+
defwViaViarulePattern
+
Vias Example
+

7 +

+

DEF Compressed File Routines

+
defGZipOpen
+
defGZipClose
+
Example
+

8 +

+

DEF File Comparison Utility

+
lefdefdiff
+
Example
+

A +

+

DEF Reader and Writer Examples

+

DEF Reader Example

+

DEF Writer Example

+ +
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/images/Diamond.gif b/lefdef/doc/defapi/images/Diamond.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cdafa3387318b1d3581c1b7f4083a66bc79a0b8 GIT binary patch literal 92 zcmZ?wbhEHbC%M@ z7fzizb>P5(b?erxUAuPPym_-`&1!0Ds;{rFsHg}D3Gwvwbai#Lu&^*OF;P@hl$4Z| zkdP1%5a8wI<>268VPOH954MLUgyK&YMg|5&1|5*;AU`p%SsiEyV7Qnga44mbDMM~@ zqsQ`>E^=xzTBVaGWbB`JbUN227P({xH^q_+dr`J4clSsv$Yoe&cwjqcfFpx70FDw; AfB*mh literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/Thumbs.db b/lefdef/doc/defapi/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..89a67ee6add69ee45ebed976dac24899f91c189d GIT binary patch literal 161792 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 Jj+RLT06U&`IGX?f literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/alpha.gif b/lefdef/doc/defapi/images/alpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..49de981bb1c61911e1ffabafac4737af455cf9d9 GIT binary patch literal 147 zcmZ?wbhEHbn`m8 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/ampersnd.gif b/lefdef/doc/defapi/images/ampersnd.gif new file mode 100644 index 0000000000000000000000000000000000000000..faf90fa016da7000e73e3cbac478543fd7a04fc0 GIT binary patch literal 209 zcmV;?051PWNk%w1VG{rk0J8u9|NsBLzrVG$wVa%sl$4Z&goJy0duwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui022TY000DjFvuWKT4U->8wpLrNsE>| z5`%JsgG_2LJjoa^#-u!mD;0zwFrm;i9t}ak@n|+3i;n~$YB&mw+^w`hJPLu6=;sh< zGR%p?ArUk(lLM^@mt!y-riyz*nmI8?4h#(nM_L<&5(5NqAP)OG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtz>% literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/anglrite.gif b/lefdef/doc/defapi/images/anglrite.gif new file mode 100644 index 0000000000000000000000000000000000000000..f30742e70b1b4d043e555f346837eb43242b8f9d GIT binary patch literal 120 zcmZ?wbhEHbOG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtopFJFSLV>e2RHAj0f=h;E@I(!kZ#x+?7io0| P8+7(u)0EN|WUvMR&ip1V literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/arrwboth.gif b/lefdef/doc/defapi/images/arrwboth.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6a26d1a64476e85e5fba2fa1b1cb363dbd0ee23 GIT binary patch literal 154 zcmV;L0A>G2Nk%w1VG;lj0J8u9|NsBLzrVG$wXLnKoSdALl$3jWduwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui01^NX000C>Fvv-(y*TU5J6%SlgqP9? z)!>j6;}DneBvau$N1^Y#@-TzI;W0xbjL75S;V4K5jnjqTU|1Rpi=d&vG@O(~Hv^-T IJ(maoJC>Xc^w@cH8nMbg@t;0dKwxU>gwvs%F5#6 z;{5#l3^1VhlZBCifssK6BmgplfyK_?gy-tDNp}?2iLe(6x~Fq;Y+j>tTICsw*u9V` rmls^vx;CTn;Gqk%CBzOKSX0qm8?^StX-)3lf_Z1!qTaYNFjxZsBCaw- literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/arrwdbdn.gif b/lefdef/doc/defapi/images/arrwdbdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..701bb8bbcae9b0e09d0d069e4a5be1fada76f7a3 GIT binary patch literal 138 zcmZ?wbhEHbpeRE Qt&+(Qzah}SgM+~u0B6G{wg3PC literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/arrwdbrt.gif b/lefdef/doc/defapi/images/arrwdbrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..570fca03a58aaa40e6d7c23c5a55f1af873d96c4 GIT binary patch literal 124 zcmZ?wbhEHb6k_0I*v!E2|NsB}`}fb8GpDDgr@FejxVYHT(o$1XQ&CY-KtO;211SDv zVPs%nWY7W0fXrZE(KI;Wxq7eT1KU1PHx0R@N4esKi$ohU-h`+WtO;7MqCL%~bf2fL Khl?u%gEatK@*+K$->CM zz{sEjk_4H-z+zzF;dx@u=A<>{+vHf=WG$;ytGt>NS)zV>F&l+^ZQwmwsItpfaiT#B O)4pT}gV`<&4Aub310s=}PM@L6ZO-))_T6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471B-#d3D4DgEnc5pZFSegB0)mI&xzCZ j^}g1}I?X1hD*DV_(=B)$-7f^p5ONbfc;t=?1A{dHJBKZp literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/arrwup.gif b/lefdef/doc/defapi/images/arrwup.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a770c30fb4167a6485f2a93ba6b4c9e81c70f97 GIT binary patch literal 135 zcmV;20C@jLNk%w1VGRHh0J8u9|NsBMz`(V&wW+D8o}QkQlaq*uhBtH3_%+R38C4a#P`2XaOddxipHTuSz%HHG~*`%06R#sGAsZ9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/arrwvert.gif b/lefdef/doc/defapi/images/arrwvert.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c5e9daf26bb482bf5659dd5f62ff2ffee66269a GIT binary patch literal 85 zcmZ?wbhEHbdV|w=Bx1^<$W9MG~HuqEK!j!4W4jh4#85pbqqv9M# literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/b_bullet.gif b/lefdef/doc/defapi/images/b_bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..0aeaa180e861d12ee0b131f7d713af607c998c07 GIT binary patch literal 818 zcmYL|PiPZC6o5}Ua=+!dC^foPlP;GK^TMXvm#_;ZwF_4l`nOz4LgyKS zuQ2Or5-`t6gHg4*>KmvxO1au(%9>L7 fsr_z`b6TbUiT>bmj9_ePZS`F_I5IXJ9p=(sJyFbD literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/beta.gif b/lefdef/doc/defapi/images/beta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6172e8978c16768fb7cadde044d91c4bc835802 GIT binary patch literal 151 zcmZ?wbhEHb9$U%nJMz@Fauw#&q(LRO(A*nwRjI1A@2Z#vqF24}sVW&N%ZQ`d+1_o;Y D6S*~0$;rt8zSTPZ<#pHwvy@O4 G25SH=gCi6G literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/bracrtbt.gif b/lefdef/doc/defapi/images/bracrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..345b70213f2f9bc99b528aae2a89c0dc4bb957de GIT binary patch literal 121 zcmZ?wbhEHb=}PO-)T&T3U2;bU;9WrKP2w zo}RL@vbeZ74-XFm1B2pE7DfgJMg|=qn*n471B;fy2~SnWQn9H|-yOW(Iaj&CgNe;O dsHbD1Zkv~Niv|SbyFcM_21^}ynD7gRt literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/bracrttp.gif b/lefdef/doc/defapi/images/bracrttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..76c33b52222f37ee7a778a3c9f8552f5830a248c GIT binary patch literal 122 zcmZ?wbhEHbNtwM|RiZhL2F^0vUQ7(u09Wc9YybcN literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/braklttp.gif b/lefdef/doc/defapi/images/braklttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..67a063fee279ce5795a2e79caa2a4aa567942577 GIT binary patch literal 88 zcmZ?wbhEHbK05M@2>Hq)$ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/brakrtbt.gif b/lefdef/doc/defapi/images/brakrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdb1927189d7b4db1c3160666897f32f0ba2f57b GIT binary patch literal 122 zcmZ?wbhEHbFfd?XU{L(Y!pOkD$e;sc vGl0}GFe^&zT9Yc!w~c4vsYeS6m&XemC6`vJ&*;*=IV*bR-ct%JoD9|gy4oLO literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/bs_bullet_sub.gif b/lefdef/doc/defapi/images/bs_bullet_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e02a6610c0ed14cf5aaef054fdd6bb94f51a8ac GIT binary patch literal 834 zcmX|=L1+_E5Qe{PHf>shG;2u%4YbyaSP!KHtmq*tZLFsJZ3rm!vTQem zU_gWvJb1Bs6!e%t@E{R-D}q}RWF;`_rZB?5?IdUK!?cbqBV}P-z57Xl2ZjoqMwdI(cKfNMeW!Q% zq4M8?$sJEOj4802jZfRTY9V1-vQS8%2@L__PIeQ$%7`g3-|N9`w`Lg1&jst$CNN79 z9;}Dl3C$>}R*?|<8Wphc<%#;KtzlX|TSO5xgo&_Oj^TgInu%po%Hrx2MkF3WprKSD z*$?<=D*is4m93k7yFi&r@{oLH(?UQL$= J{oOj3{{hdW(xU(X literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/bss_bullet_sub_sub.gif b/lefdef/doc/defapi/images/bss_bullet_sub_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9bb133eabc5c242cead02fa2cc319ab69871057 GIT binary patch literal 837 zcmX|=(MwZt6vsc;ZEeaBceOck4`weiMS9r7qL*FLRT3x!O`?ZM7Z#X9Ea>I3-7!Qd zf(?A=CHn*FaRccg?t^a<_-N5XV0!N~%s|LU`}O;6(t&&LIp=qN=X}5CoO|7fkefq~0(Y}qc?c7JiqcXN^{aOeIq*PNhV68?11+_Os_E<9 z=ZErt3upH{zpjr%vFU8>7V71UVaY@hfhIHrh;#(ZB7@45|LS9&45O=AM1 zB*Vko5qCnOkTizP34ZPn<>F!qh(z3=QG)lkTydia&BGzJB!8S?<1=Sxx<% Qz45%iH!(VVb&%`-07Y!l@Bjb+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/bullet.gif b/lefdef/doc/defapi/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..b71c1a475fc702b21c95d5edbdc1aa1d509729bf GIT binary patch literal 120 zcmZ?wbhEHb4+9J+{$ycfU|?j>0SSQ2U|>--IN`Z^uf^l0z7?LzMu$y0Rv3w{*x|!;S!s%* R`Du4f)`fo$#IrD10|3w$Ct&~p literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capalpha.gif b/lefdef/doc/defapi/images/capalpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..f93e524cdd9b7902b98f22fec2fbc71879ff5380 GIT binary patch literal 138 zcmZ?wbhEHbtlf iBjK7S9_sU)YA~@h;Sz3fys?9ohxe??^2Z)Z4AubiT`R2s literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capbeta.gif b/lefdef/doc/defapi/images/capbeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4c37026ab5ebd18ba0a8d1794553e3a808cccd3 GIT binary patch literal 141 zcmZ?wbhEHb@#^7Au1jo~!3BmMJmYcuq;M+r#pdip9y9ehaM? o{R)llK2i|1lGVAn@#^7F&Z8o~!3R&QLbiihbM=bSUwhl4wV%MaP7g sgOAR9nQ*Cbp+!6Q!c^&q5JuUeMFKu?YaJRdD)@TGbY+_ALBS< t9Kj+a(H~=&|Dfi|0-uid#ziMs+4zs8ELfrwBXoqxajBi~0#6nOYXFE-FHQge literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capepsil.gif b/lefdef/doc/defapi/images/capepsil.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b6a387a40e314a6cd651f81a2710054bb57a113 GIT binary patch literal 130 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu;?3{@LbLNc*)uGBIk@mABhBUlzKUDW$QYf e)Ae}T2ivV$eUfVTn;IM~q~@?bPU>V}um%9uyDb|4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capeta.gif b/lefdef/doc/defapi/images/capeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..064c5273534fdba50c309b3b8de0e448583c5e90 GIT binary patch literal 139 zcmZ?wbhEHbtXj8D{Znc=Qc*ct*LGIS; ng6A0BZqz9HaLrao$7Ax1n4<>*6ADbM8V??tC=jb5$Y2csq?<3U literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capgamma.gif b/lefdef/doc/defapi/images/capgamma.gif new file mode 100644 index 0000000000000000000000000000000000000000..6cc19838930ae56e3c6a961b4a4941b4f6a60ccd GIT binary patch literal 118 zcmZ?wbhEHbsXF&jt)P(QRAq< Ie?bOo0L;=Pt^fc4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capiota.gif b/lefdef/doc/defapi/images/capiota.gif new file mode 100644 index 0000000000000000000000000000000000000000..42e74365b648cf7c6ed53a02b6634cbec424fbf0 GIT binary patch literal 111 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^jKK-d)iO_Il$J$wZdFi<>`kqjC9*51d85W0Q&$FS0B#c> Ak^lez literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capkappa.gif b/lefdef/doc/defapi/images/capkappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..263ee4f8874da785aff03241179a652a69f5e1f1 GIT binary patch literal 143 zcmZ?wbhEHbVD%$`Miy+9ct{*51BY*}=wx?XJHNBZD;nJO?mi literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/caplambd.gif b/lefdef/doc/defapi/images/caplambd.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b7af2c91a0c26e39a71126e3ac4de879205cea9 GIT binary patch literal 139 zcmZ?wbhEHbh3D4DgO&)s2-E{nvar=-BQ<}o@ r=7cT^y6N3f~K?Z98elIUh literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capmu.gif b/lefdef/doc/defapi/images/capmu.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0066cf5925e6850511df007c66c32b0eddb8173 GIT binary patch literal 159 zcmZ?wbhEHb%PT^-v`jfHIelh# zt!@$dCau!zm~epO3sdg_PQe=zllMJOP_%UN?{N|BnxiAt^!CC9gBI>H4vm5PVw4!H E0YR8G=l}o! literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capnu.gif b/lefdef/doc/defapi/images/capnu.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d841a31ef2a70380018e4253ec1c8ed0ad25f32 GIT binary patch literal 156 zcmV;N0Av40Nk%w1VGaNe0J8u9|NsBMz`(S$w5X`4oSdAHkdTCggm`#(Y;0^`U|>{K zR7gljFfcGABqR(B3;+NCA^8LW00031EC2ui01f~S000C@Fvv-(Nr_Bxk(S5P2vlQK z&%;nmfi90SwP?^hheT6PAUF=qZqf@7fP$f<7zj0#0cJpva`7sRhcz%jJP?CTV_TsN KNaeI70suQwZ8p^a literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capomega.gif b/lefdef/doc/defapi/images/capomega.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6e11542c02b2ca350e3add8174458872d846540 GIT binary patch literal 152 zcmZ?wbhEHb~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0V;%achbM@Y`IVnL0J)C_O2FRZCF!X)8CG?@p z4 Aod5s; literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capomicr.gif b/lefdef/doc/defapi/images/capomicr.gif new file mode 100644 index 0000000000000000000000000000000000000000..20f4ae6b5b392f23b70a83e0b7ab1684560ba69a GIT binary patch literal 145 zcmZ?wbhEHbIn{K>+|z`)3$ z1Cj@s!N6i?aKdx7h>Eaum!P;&01J~}vxQ>YQLmR_k{uzZLK4}IH2RxNU@#^79)cbo`(%I76-KkGhWnT`s&#>c}7BopZ+5S gHD{ULphH}aJW~&7Yvc&FPdRw-qQ;w!BODCY0Fo{%$p8QV literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capsigma.gif b/lefdef/doc/defapi/images/capsigma.gif new file mode 100644 index 0000000000000000000000000000000000000000..f75c3553b8eec054cc9e17284bc8ec1ee1bc89d6 GIT binary patch literal 131 zcmZ?wbhEHb0SSQ2U|`WSIN`Z^ujncD literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/captheta.gif b/lefdef/doc/defapi/images/captheta.gif new file mode 100644 index 0000000000000000000000000000000000000000..96b4c5022d99b4e1de7f6b8432207cf30601cf70 GIT binary patch literal 153 zcmZ?wbhEHb9pW4wfr4EcoLr8Y9jz*t7nI~VWSml1Xx(bS o`e!Q(8{?$u$*S7zS5neEWsEqPk2i{ zNIX0|FfcGABqSIZ7ytkOA^8LW00031EC2ui01f~S000CzFvv-(y`iLS zhlh=gje&uIii!#Y1B2pE7DfgJMg|=qn*n471BMxJ+HeGQ| q$;Tzh)IavLXtIb+Q*f(SLD4P&j!7*|$Df$Can9aiwkJf1!5RRyLNNRQ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/capzeta.gif b/lefdef/doc/defapi/images/capzeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcba9c83a24c02d071efbf8e72ce88b584f41d58 GIT binary patch literal 138 zcmZ?wbhEHb@#^7IT9Wo~!rXP?}Qa&U} literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/caution.gif b/lefdef/doc/defapi/images/caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8a5e7588a618e53a52e8dc4b72555e7dc0714bc GIT binary patch literal 286 zcmV+(0pb2fNk%v~VRir~0Pp|+|Ns90001li0001X04D$d0{w)KsmtvTqnxzbi?e>A z`wfPo;{{4Nrs`!z?Fz?9N73@FzLk#m7{BugEhb=Xh=jb16J|20b1I)y1W?MUQkht- z_tfZ?x-8pwAx)3ToG5#nMY}=fbNqg&13reab-u?JI3w6sR0zYyqeqC6H|J;g=V%xy z^R|R#V^+rrCbtD#Tx@K)<|fUTO6km)_=70wU3rN6jGZ0(V~5U?zJ8i<#ol9{X9e#g--llxuTi9L k&+ku&wl)Eg3_NkK;D&?G6hcXs(BX=15-VD~=&%3)JGI1(d;kCd literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/ch1Intro.04.1.1.png b/lefdef/doc/defapi/images/ch1Intro.04.1.1.png new file mode 100644 index 0000000000000000000000000000000000000000..46828632354cf351e5e48ae041e9dc786db81de4 GIT binary patch literal 20516 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∈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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/circmult.gif b/lefdef/doc/defapi/images/circmult.gif new file mode 100644 index 0000000000000000000000000000000000000000..49bac178460a729bf930450705a25aec65a44ebb GIT binary patch literal 81 zcmZ?wbhEHboa25SJ5=on)F literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/circplus.gif b/lefdef/doc/defapi/images/circplus.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf9719820db56f560d1e94f957bb08ad5a552437 GIT binary patch literal 80 zcmZ?wbhEHb)5TRPWpn*l7_0#<{3$K~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/congrunt.gif b/lefdef/doc/defapi/images/congrunt.gif new file mode 100644 index 0000000000000000000000000000000000000000..b886bacb112a0250512b5865b60aca58c4efdd85 GIT binary patch literal 115 zcmZ?wbhEHbt079H3XaE2J literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/delta.gif b/lefdef/doc/defapi/images/delta.gif new file mode 100644 index 0000000000000000000000000000000000000000..239069d87bcba07487e82ca0daa0b1a08dfbb616 GIT binary patch literal 141 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK(;gy-t5O0wHpY+IJ7+%Srnyg*?^i_WrCgGWJ} my^4aqj1s`JAu6eRBSOWk{MJ+b~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/draft.gif b/lefdef/doc/defapi/images/draft.gif new file mode 100644 index 0000000000000000000000000000000000000000..9952c7ec4b536327a1a840e49488a07b7a16512f GIT binary patch literal 279 zcmV+y0qFimNk%v~VNU=f0Pp|+|NsC0001li0000_03!eZ0``QDsmtvTqnxzbi?iPR zh7X3~NS5Y_l1k9E7@NTEEXjvW=L`2Od(@R9H_0Y^dW8Hg5zCL9qBsjFuqDEes0I_CKWds+Br%L$75IU5=$!>W3^tCVZh3cFRUbC7TgJFz3FqODb2=REKAH3bWF%Rjz$T%p8fu&+`t^Gvv1wc d&)@8yz<>e)!byQJp+bcP8#;UlF=B%P06R~di+un9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/element.gif b/lefdef/doc/defapi/images/element.gif new file mode 100644 index 0000000000000000000000000000000000000000..150898251de90d00c6327c6e287c2b6c830a286d GIT binary patch literal 121 zcmZ?wbhEHb@#^7Bzzto~!rXn6a;+-|1YC8( UPfhf6I<)e-!tw12YD^5)0A;r(u>b%7 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/emptyset.gif b/lefdef/doc/defapi/images/emptyset.gif new file mode 100644 index 0000000000000000000000000000000000000000..f83eb0be9ad2ed570321abe42dc5ce1644fb7f0e GIT binary patch literal 81 zcmZ?wbhEHb6kyqk-)7Df@lZK2cg2pJ)a{F=th(aH$Y2cswJsXO literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/epsilon.gif b/lefdef/doc/defapi/images/epsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..753b8c7cef695d7bf5ba15a42791f4246cef8744 GIT binary patch literal 123 zcmZ?wbhEHb%_1T9H|KtPIuw1JoBm literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/equivlnt.gif b/lefdef/doc/defapi/images/equivlnt.gif new file mode 100644 index 0000000000000000000000000000000000000000..deb2a0bb4eea15d6e66ce2cb5821e4979305d8d1 GIT binary patch literal 115 zcmZ?wbhEHbRfjb?ic55V2QBtol(?>4kii-NpeGK=GU?NX|AcHjk!Z0c^ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/existntl.gif b/lefdef/doc/defapi/images/existntl.gif new file mode 100644 index 0000000000000000000000000000000000000000..3338a4eb820e95eedb1a12f7e087abe0eadf4d47 GIT binary patch literal 117 zcmZ?wbhEHb<_~`MXrPbY8!rDNU{orItMh0sDL9Q&4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/gtequal.gif b/lefdef/doc/defapi/images/gtequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..adcc0dd377ee1e11f5eba9755fd655c68019e901 GIT binary patch literal 126 zcmZ?wbhEHb0SSQ2U|`WUIN`Z^?+rDTO*Y;}6$cM?ELo`H61HY>>Y^fv XY?+m>z2E;9aZ2=%dDqv-!C(yl-_0vt literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/header_doc.gif b/lefdef/doc/defapi/images/header_doc.gif new file mode 100644 index 0000000000000000000000000000000000000000..3dace6c2c084e6f4ad5c19794e7210b61ef3a510 GIT binary patch literal 2954 zcmbV~`9G9<8^>?Lv5jNOkTpWbdP+BDNF8IBI64&**-E!;Z6ta0lq-w8bYR z2=PE#5IDqdox~Rih9CrjPzb^x2q!8ShF}DOQ3%E$7$+_f7(x&TK_LW#5S)06!Vro; zC<>t%gyKXi216JEVJL)Q5QYOK2!|mYfp8SUF$f0*&<4^#3p9h*I5CGf2n?ezjKMHY zj0F{fzz7N>7>wWq1-L{J7)425|uY00KA!)IbbC14{4|aDc%;8%P5!oJfwi1~oVsisD3&z#kY3 zDhxw09OMe@0t#@6;uwm996{0`0Kf&FgP?(15GBY1V1jNC2Veq*fkQwI!~itt1XzFr z3&4H8r)jw|8-I@%8l$ z4i1irib_sS&dJFsFE4LyZtm{x9vT{&nwnZ&UHxD0&foa|`4HTODum>$Dzn?d1@~y2 z>#EFYj}})x&b6w_eHOPD_IcM;mDib|Xv&nczOLAGZKAKphGv&R4OG4Gf@@v#s5gTa zu<%ZOH*}X`Bqbo+v5?(#{R5_BHtV19XXN}J-n;6ryC1e<@Vh=sUwq?Gn$~oAV~V0V z>YMq8iA~1F8`aW&zVnePiQ2lC+$-odo03V7J?BLyA~mlb%5S*P^Q}ze=89_A?Mc@R z&0($D*2JXMY32jixhg>KWlQtu!Lh!$J)f8UrmhT?GrJEsaJNdPvKsC5@=9`E%NJpv+w_NjcSx-sNcQ#CDhCuKf0?YxV6u(a1| zqxoJR9v_CYTLKS9^gLJnLH2D4lRBj=Y-&M_E+eZ-rAyC-mp1k_F8JSbD=&LenM-98)`k+3faAHZ;gD)p|wg7URr$XkQPGcgy$G{X*g^#?}o{^lI; zi|Rr$CBaojFds6rw9h+6QMaSN{oWy*KdheLM}rg_C8*o))lv&6b6fc&>UheoQ}oaB zDLKsOGZtylN#=Xe$}WY#Mfwd%eVMB6r`G+|HG^j4V7F;E1_p>~nMS4e<`jSj_k-HgqNP zobBdUn~7%eyog63q{4e&kBH}g>TwZ&=OeZF`B$NbN5yk4vXfaQB023OYJAUb+LJbx ze|EI2=ToO4cUab)QldR0tn zs~cxsi7`b!H1=?h&;HaFbJ>pbD&BSZH^Wb5zZvI-ljxa`rHhJ8Q*!xar!71a8IlnX zu8}W#FmAD&cf;}pgUq?4h!dCk)zZpJRXL?zCwK-9OKW=1WCeNmdYU9BjEO#G4UV(a zgOnX@B_10NclQM~tv_6ee{A%hG-M`-EEs}FS+-Wenq{6VDRx^Rnc<^6khe`2FGgz zcwV1cbWH3MHjDY?pGo>iJ-7L=io7#(yXa}%Dydy;N^aJm^K`UohS=Qbl9$?BvXJI?F}Xn#O{hz<*<0c9Os}gqF+fB`da2L+9LM&v z-d&FPqhp<+**+Pr&ON4@qCXfGoY5vzB#V_@U$jQ)GEa96Bwq7VHnQ-De9(HI25tjgimZ z12&vHn^$G2mk@GZdhh-xl3s7l%~FnPKL0SW-grFlf^nQ~1^ZZ;i?-qLvhkl(NteKc ziZF+de2s}omtzbZvPne>9htKnj(+v{Zq}Oz`YQwH?=TH=TA_rF+2)fSyE%BO z?t+`fqE|cDY3Sd}J!=f?6KUYua8OEBRwv2u$il$zeCqHCiB@t{vv!s!TBonzXYF9* z|CaLBljix>#y)Pzd3RlY-IW=a=KJ**p9r2maEsscU8OkROTl8{7YE0UlCRK)1aR#e zFLOIZ_RMGs`sBO}-_Yc^$;m-ML0(>7hK7a`5)vF7 z91KW6@h1x-0|O(24oD1S1_O(|!3odRHkvadv#d@WGPoZ&GpMm9%#mYq0FRie4s(n* nbMqS!R%dpdA6l)kOXyft19Om1uP6OMjf-F^`#KTlt8e?Jeezt7+A R{|_*rz<~q{8l+GF06WF0eIEb- literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/infinity.gif b/lefdef/doc/defapi/images/infinity.gif new file mode 100644 index 0000000000000000000000000000000000000000..766b388fd5bb6c91ec1e3fcf0de45ba8444f7b66 GIT binary patch literal 139 zcmZ?wbhEHb6ky~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0VVqtK?bM;<}*R}nUcQ=VRPUhhZTqtzO;Bt`c mf+rI$xr=5MSlG^Aut-6qfwR-0Q1b;-C+lSAwNWbt8LR>QI4nH? literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/integbot.gif b/lefdef/doc/defapi/images/integbot.gif new file mode 100644 index 0000000000000000000000000000000000000000..3beec4f22b65e3f555aa8ded68bfed95eca1a1dc GIT binary patch literal 134 zcmZ?wbhEHb=}PM@L6tVPRTYT6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471Bto2aSLaOEH(ZvA@)6D!?7_0%Vc`kMU literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/integral.gif b/lefdef/doc/defapi/images/integral.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa748c92f066dda9f052c88ec8431474edc7fb3e GIT binary patch literal 123 zcmZ?wbhEHb eGhV(7-L{ks*L7vt!*q7vdn*2g(Qq0EgEauLUnt)I literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/iota.gif b/lefdef/doc/defapi/images/iota.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2dfc0d6ec0703a9ec2cb80aa0fb91732c712a9a GIT binary patch literal 112 zcmZ?wbhEHbCMz{sEjk^z~)z#?mK!gKZB%ROEbw8B2NCaX53dCqlHRXLH!%aRr>$Y2cs%Q7G+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/kappa.gif b/lefdef/doc/defapi/images/kappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ede7b0fb74bb772fe59de82a908577956b5ac6f GIT binary patch literal 124 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^rojo%)q8JDo0RU^cA@qmN0;nEnGA7`l-I}BO)uDL62toF OKSxZS#}O9>25SInswUZ0Z`H91tFjsx(aPr7 zgiYBn71R&|G$?_EI}C<4q@jgo^M-tlBhIOF=KWzTDiJ5@#JpWl;8Mk@IyJZl6y7=$ zXX*_0kOwf)jX2;R5O4@;hyfaucnS^-hBl<3Wj;B7jT%Qq%m)d77>i0()Q~Ief&!Of zDux`9Gy(t@o+D_uMU=<`nCM0vV1i*d1U19}jZR>J1B0OrY4a=cuW^kU$FMO334a)i zO3nNNgY|ogV55GY!IC^wkh@=R5T$1f((&644146jgI|7tw`N1vh@AO6abxqumBWo|sj-85>fWuQxoE@2;bW_FV_$~P?!UXW{m{eAOg8zV z5EY{IMGd literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/nav2_index_b.gif b/lefdef/doc/defapi/images/nav2_index_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..87fc9ddba320b458e6a8e00e4c731c196938f810 GIT binary patch literal 854 zcmb7@F>BLd5XP_I5Qjj)4kdI@T!KiKBcQkl0d1WEu4Zt#!F+-2LIf2YG95S=b#e%; zYbFt~ftxcq<_lyJr}KAj`vv+g;dtMB?)N0K_4*UawL#Po08cLqR!C>ph6Etp#l03kqn>b*?Fb<(c3}`yR zf`h?mBb~LPdd)R8C)pT5;*YUZky#6D>o1D7(b{KQQbD!cYrQSXVr=QuwwvKXZXRm+ z4XYfqNl5cKuqDF7QyV4SZnxL#_51z7U@#mGN2AerJf2J@)9G|Jo6YC*#bU8sE?2A7 zdcEFkHrwrXx7%IzUVX^d|GD$;#?6lG$^B}r|HR{t%3kN_Y8Z!0ufmt!84{pHiWp*;9R$5<;9GOBfF^C24o6MEcjxE2oj^b@%Y^D{0F>mnv;9a zb3V^=zTI0>Rq<3TLif{Obmu4{O~gcoNC=fuq%(M50JE36mHS6wrn=w9t&#V&~YSm13ogQewxV(pqU&+9)lS0+*~6 zvtpxIEEL`vtqdz;lo2qZRf$%@N{kXr1vSI~4N73)4uhc$X=tHYtRY+Du+~OvvHma? z6|-ieS*%@9;L@-*MjL^9K;f+x)?&249`XPtx)BHb0|E{~4KYB25>LT_!O(^@w8SQ7 zuTkR|X0buSAI73GhK(Rs*aZbHSquwuMA8TVTzHP4;TBOM4`8AjaexVi;Skgi12j5; z1r7{`Hl)R_$iBukY8=7F5G4FzEGi>n7wD|tQaBs6`*fCMp`6_9dYvdOqmz!^wqw{L zJ09%v9W3j>nFMKk4%iaHgC}Pcx!rEB*X#HD1A#y&6bgsK(P%UtkEc?pOeWLa-90cc zkj-ZE`TWGh#Psy^;^N}!>gt`||32jZ|FdoV?hP&~qB7fR{}VyiKUCy;sCu;j%XeIx zcJ9A2x-H$jlpQSTtzXE+=cp^M@4LL`^_g?gNNMw8sFP|lYpME|FU1SNL$9=5+kYW` zX1u2L$`?c5e-eD__=AVCCoc3;X8WJ)o~`TiJn0$phkfbIb35NCxFTDp`W_y6due#2 zuROV<_p|8L^4R(0?cI-zeK<9ndo8i%Irn0-{_4Hb>+heg4*0%JKCaFduV0JTjb<7< zb8W{?ymV^glJ`_)&PR!@%V)iR|M9|}<25avXPO$LO~-C~KDb_&KfnCb#lydicWiv( z=aa#b-#x>Llb2e0D-V`!DW7e>$rB@~2OcZ5CvP=m$7-|wmE^8mSM1)E#PETS=RHGL zzgyXU`kR@{pFiDxWN@xy$D_X-?Pw@Fde}GlX;0|KuUjYEN?NMIG2dY5M(gfGz+2z7 z-nfb8d&cLVxm7k^ob0Q~^&f27;NSe}4DFpNt|;p7ezWwz+GK2|`q!HcLtAdt@4IKY n;)mx8?suQ7x@+B)?pR0{8Y8tw)JLg>bj57Xv-{Q~L8|;0OU5W- literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/nav2_previous_b.gif b/lefdef/doc/defapi/images/nav2_previous_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..b02bc97081d3d64f843aac572eabcfc39cdb022a GIT binary patch literal 871 zcmb7@ziZQB5XP_I5W#?;gOnnQOArU)2vl5zh_+6FuFW9A4Q6!7E>zILA%h%tF#Z}k zgtm^EM8rnVHIrlhflT6be(qcU0pBGY?|aXEp69-~zkP4>*25jSD8J?OsECQUNQk6R zsfwDYi-u^{rKy;Sxmbv0y>%5gaTgEqtkzHolW>WUNR%X1(j;9nBq`8F8ZDZ6oi(S9 zsk&;YW{ssXQ**UY%c9`YP2JT)JqwDrVH&Ox8VMtXtbTzZBlIg&I1z{PWd#w}5j2bgpd2TT~oA=HQg zO($4zFc@v5vsP5Exu)hM8zV^kF_tPaYk|%Bi=x?R?Xy`@K{dJ8dYdSVu}P=4-54(9 z#zQT?!72yMB&7Kq*b?F4sTn2hc6)t&z0>J*yWL)|*YEcSgTZh(9F0bMdwb*Ycruwx zr_2L-7lQu?5$=X;{LA9Z^dz@^z4(yXsnQkgHJ}r}z2TKhXK*?%6rd`+2?J z&*!FPY*?F|UqYhDU*yrDgfK!lA%YM|P*F-KBa{;=2$kxRQNkEuoG?L{RBt&YoDt3m z7lcdIDku?*2u_3`LPCj1N+cta6Df#90c}V_3(a^f)f{ygrJPbhsZ?W8F-94uOi(5j z1ui+GoKr3+mkJ7R1*3vfA*hgGL@SkyN=~Jq5>r79F+hV7Sh&MrXhRxWXqL*5s&P1D zf-$N5VJs@n85fL8Wfv5<6r2gcgoJxQ;VqM#Nx>xSArD}p8*#utAm9+x5Cb$Q@e~{w z3~fk5ORD75HEJBexl}>IAI72*f(waUVHXs*V1WaJp$%!NR-|6z8a0l@#tkrCOk|ennwyRPEDPl7cdFSL-#R zRE$PCYTJfkg=~0G%Qvu;17i}T@i|~i2oIi&Q6wxZEG8xQBv1ugY*)v^j?c-W0@it$qXn$+4 zE^*i{ykFbg4*!)J%ZnYSQ;+I-3#Poe6`S@<+Sc0!w@!CAWVURq3EZ%4A!c!SQQp$P z4;Rfn<=Xb4@!k$g{}IjnjXAk>m&bK7;Z|(FW9)_8hv|D$yLZ~Y%FvsJlKOVb+|`{>B5xfgEqpxhr z^!%SiNfX|8&6}I_`{AoET!?;d&Sa_c|I|-b{A0NiOK=ec3jKEq zZcbdzOgJg-ww3;TEA#yLMz_B#u&@1tshd}?VtK*w(;u56w$`s(wrhAIYn8vjRn^5w^P|-|V_EWoWS9h)7veNg) zw&agS3u|4!yI;F!4GDDf!k4e<6U9-Z!!?EXc9h;opVEDiIf<9%X0( zEGOqqt24F0%Pq^C?veVpt2KYIIcnA66BC!Z?|xC+yVCCD;h)+MX74K-J#smDNkm#f zw5!3n;lX_Fse+P_U&{2)pZW3q{l$%$S@Yqo^=qa-S)`wx)TkMe;;?t literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/nav2_toc.gif b/lefdef/doc/defapi/images/nav2_toc.gif new file mode 100644 index 0000000000000000000000000000000000000000..5474e92e609d9f4b155e6c30e2b1d4a781670170 GIT binary patch literal 1154 zcmb7@>uZ!(5XL8vgf$v3Xau)5;tirJQaIgY7a=T7yu^A5*rt&fXyE-_U>7fZm> zlAx`h0_rpbjhF?MY+5x5-3@r9P0BGV0T{sW#b%W%#-^Lw6o zcXh?8Q246~nnf?^?J-1_h>3(q36(KqEEy&vWYk?+L)MaIvO-qfTQL_r@)-W3u!|I^$ zR;&>=B1RO9XfN++i@ZAq_1wt25+k9JW@hRp$?5Q88N<%j)cc z0++&8#EQZ_pzzizTNSIYhdh9ZZo~oqfPh0#Lk!TM#8Yr!Fti~JEp^GcYt%TxtS(6S z!&p=zEQ(xV7ZkW;6;|Ykq!9qP@Ek$IEuusoz(hCV022(uA*dk+XmkP#92g93NUK|s zdyQ+5nCvOzx=jZ$V{-UCyU@%x#R#sVASzB8hi^byccvDkTOG`_8dwVjOOsCTW z0|P@tLt|rO6B83}d*6M?@BcIZb@n75WzjO%>i!cE-+z?lo4e+hQ&+$D&0M;r|MtV~ z*hpR?UA$o=SWkt=0tY(p_Z}YqeP=qcd~U^e{_w%Vo~78p0Xbc*QYLx-^q#YYJ4@A$h3B?yp{8O@P3E_{Tx_*sV>xzK3`m% zN!5h+jaB)kyj&6Q9qo)QEP1nU|48?NV6=I7cI46Jd;fm9Hm831lG}feTx*;xA76-f zjQ`oX=~?NyNW;vo?%adF4d2)k=*y0*tGoNh=heN9%?01S7%iApJ$fiwUHqWDuDWE# njyp&9ZakYQ2o>i2FrWN;Pi&3d`zZ6lu4O$>7Oc<8q80xGL>~yq literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/nav2_toc_b.gif b/lefdef/doc/defapi/images/nav2_toc_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..727f3ae5ea1605452ef2b2f2bb555f7f293c9328 GIT binary patch literal 866 zcmb7@y^51j5Qb;LA{GHb3kh2&HbE?eA)r_&1axB+u-z0QOkr*yr65Gm!XkwXY+?Lq zEW-YjsYGNqI&~_`+(0U^8lU;r8}Kw?IA`8@-gmw{8a%vn_vt{c$Zt76Dq-GEn;cz$_jmG2gWHOmfr?c5?KA$fZ zi{)~;TCLXW^=7l#Znx*X|32jZ|GEC>!o`;C$gOIv|HOmVec5U4?j64W`m%NT=Kk5? z{M)NbHy$7C9ew!z=Bhsbb$0ae^zF6&>)pZer`4?csnmtm|O z7WxpCfppW-u_9D(a$9u4g32xo7DA8_R21#j`RX6&ybPOj_S(O-_BU(SugMOSfW*;w!};<#OhkbkXRBX5fX(GsUfwb zOe&-(pbcqgp&75$&2h&X!^Vg)>c*n7)>t-Hj8#X0OSXpDuozYcg|}jjun{q$U_`4? zYm|+OQA`Cj!~hLSVBrpfp$%zhp;?_FSL3j?Vy!xV7>kP8vRGDU7ZkV@wjx#(?g53j zR@tgpg+1f}Omrg-_y+_Wf*N9g1|^5@Au~3cH}d zC9AL^M6lh+o!iA2j%7N*6T&-7`=4dwmriR+4JC*?_oIy-XuulbHJ7m9z1!Y zC?O#sB_$;-EzR%u=jG+)=jR85!SeF*+S=NNhK5im)Y{tG-rgRGM558?@bGXf78@TQ z|J(cTL;nAtxj*8k_$ZDRxmNd|$o2iEIN!{5S6lAa`;rzEHhwR6;j!epZ=|A`` zV`}rIldn1|-aH9z%*rU~teiJ^uyo-1g~8LAL(#&x;^x4a?5f0SUtKuwSaNUN&d2Em z{l}l*oieTM>dU_Bwf3)_B1$I5ajIoz~u?ZYb@t~DktERx&%OM5DB+$ zA+%jH6%m_yb0)|91DV9>{M@(x1HMZ*-uIsSJkNde$xqar5aA|aAO zr7CKoE*hd)m!@JS=3*h1_10C~#9chZvsyzXOu{8XB2ki5Nt1NRkfcBxX|!nOb=I6Z zrs}Gpnl+ZnOwH9oEsKInH+5GJ^(-jfhH1D)Xe5lZYMQ2Nh9*;?Mhs{u!Qzg=Xd{gl z%~^)3=D1myW%*+)mAiSEXW4~<%W#XZNZbR(TT8bLOYD&cm~;~d{(-XiB$5^V!tOYjfFN$WPwa;cr1=ZwU>usVe#wMNGc4N4Z z8xOVo2CE!2laS_fU`vFDr)HG2+wD%L)9rS9yjmP83WHOyjXS3OS zK3^;r%jI&lTCLaX&1Q4e`|m^k|DW4`u3c}*mh4q){U`QYk7TR0dvNmM{AKIL-Q$as z*|%5Qcb>jKIQ{tj&5pkKb#eOX$J<-|*Sm*jpO@3_(bwbU*_WU1?mfTU+u4?fe*ryw BfVltw literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/notelemn.gif b/lefdef/doc/defapi/images/notelemn.gif new file mode 100644 index 0000000000000000000000000000000000000000..479a88d3f83b722f8a83b4e0bc96457c1e6739f2 GIT binary patch literal 141 zcmV;80CN9FNk%w1VGRHc0J8u9|NsBBwY9CSt(=^kl$4Z=jEsAGdvkMhT3T94N=i97 zIVmYAAt50U5D*9m2mk;8A^8LW00031EC2ui01W^Q000C!Fvv-3HOf|X^kK{5gcYI) v!I4#hg9eIW72(2+^cz7_A literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/notequal.gif b/lefdef/doc/defapi/images/notequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f3d74408318be926ba759044d1af33e32e6fdbc GIT binary patch literal 121 zcmZ?wbhEHbzY VN-uU_Tv6b;puzfyk2oWPH2|hgCG`LR literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/nu.gif b/lefdef/doc/defapi/images/nu.gif new file mode 100644 index 0000000000000000000000000000000000000000..049486c79cd9d8d526b7d89f8ad0a2fe21bb7e35 GIT binary patch literal 124 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z+!1|!gKXr3vVSRN%4s#lL{j`9?o?P3Sedu>nu?axqCF#_NA(H-y{VV YmQ@a`j4XI~TAUhF6=h9la4=W{0MM!<(EtDd literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/omega1.gif b/lefdef/doc/defapi/images/omega1.gif new file mode 100644 index 0000000000000000000000000000000000000000..0009f0e3029e451f022cd6541d553efba0b73688 GIT binary patch literal 144 zcmZ?wbhEHb@#^7DIy*o~!o;O$k0C%cH1rHo?&Cm`>X7Wv5@fIj0EewD8~^|S literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/pareltbt.gif b/lefdef/doc/defapi/images/pareltbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3c0f75b7d96b7af435ca7d4cadfc0da691f299c GIT binary patch literal 126 zcmZ?wbhEHbR~A2WZ@$fZfghVWe5P?QSOWmu4k>5= literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/parertbt.gif b/lefdef/doc/defapi/images/parertbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..81fcda4e8e32ce249e416556201de738684ea355 GIT binary patch literal 127 zcmZ?wbhEHb_^@YMD_aw+u7lX)y{i^H?d3b37v($Su@ b#`l@%*;5jUi(1&*4osd=$)e@Y!e9*mS3xW2 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/parerttp.gif b/lefdef/doc/defapi/images/parerttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..3479f8d9a92563e0c50a6b87dc38522ce8bd8b60 GIT binary patch literal 124 zcmZ?wbhEHb@#^7EOZ_p3at2<)%K5oV!FJ@d8KUq!y=OBj>Co XDeets^F*sk+xJ}17vXkcV6X-NE=VUT literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/partldif.gif b/lefdef/doc/defapi/images/partldif.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f1928e773c45229ae7b2a67a86d9316c7ab688b GIT binary patch literal 137 zcmZ?wbhEHb@#^7Bhnro~wP%$x2U9WZfKkSj9kQX@pCW%rP%f kU&)qGoWRv-a{1yC n&X<19&MYg=H7)vagsEFZHPAzVPukC+aiUk#HO)>TMh0sDU9l|w literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/pi.gif b/lefdef/doc/defapi/images/pi.gif new file mode 100644 index 0000000000000000000000000000000000000000..71444f3c50f9181ea24f57e885725eb1ee3df4d3 GIT binary patch literal 134 zcmZ?wbhEHbHR46R~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/prsprset.gif b/lefdef/doc/defapi/images/prsprset.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1c8c73bf084fcdbc83b30a5fa6bf1b4702ee6f6 GIT binary patch literal 67 zcmZ?wbhEHbe+4F3%o41uZ?f3h$#Ft9M_0ND&6GZTz9y{)aSrKP2ml$4B&jD&=Qb8~ZRYin9s zT2fL{DJdx!7#Ii$2mk;8A^8LW00031EC2ui01f~S000C(Fvv-(y+NcR$B;!LOi433 zPSzw;;c#f+aue|e@!@=wqu{ATs>1li77WXw0Sq)~6$A=(z+_M(Yg4<`dMptDJI@F< AMgRZ+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/radical.gif b/lefdef/doc/defapi/images/radical.gif new file mode 100644 index 0000000000000000000000000000000000000000..74fc200c7abf8a90bc528bcc3da1837531a657d1 GIT binary patch literal 78 zcmZ?wbhEHbL!; literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/refsbset.gif b/lefdef/doc/defapi/images/refsbset.gif new file mode 100644 index 0000000000000000000000000000000000000000..410f8277cea4d67d77fdce2607d3c27a87dee28f GIT binary patch literal 118 zcmZ?wbhEHb~0+1c62$;n<`UY3@Yii(O75)vF7 z91KW6@h1x-0|O(24oD1S1_O(-!3odRdo8kiru~m|QavWd(Iv^#EwyD8<7`$Axjfe! LW$%6qGFSruC6FQZ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/refspset.gif b/lefdef/doc/defapi/images/refspset.gif new file mode 100644 index 0000000000000000000000000000000000000000..8464b13226ef3b7727e52d91b6c95cf4505125dd GIT binary patch literal 124 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK?>gy(7%=83bvnS=+6uwAZbG%|JPU~_8r@D<{_ xe6eBcl2G<&XGaGU7STh?#IqxrjAp&9oD{^u-FlESR6(DMO{+k_{=6WAH2{BmE35zj literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/rho.gif b/lefdef/doc/defapi/images/rho.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8c565914153cb35a245d77aecf480b1ee47ed94 GIT binary patch literal 134 zcmZ?wbhEHb@#^7Gr}Go~uocb4Z71b_a)W8X5XNm6`ldU`n#r h5$Vk(QtH7g&Dfj#OC%MO~V6!GVRr8UQw$C}scv literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/second.gif b/lefdef/doc/defapi/images/second.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e65da28d0c0efce39715984712f8801348eeeda GIT binary patch literal 115 zcmZ?wbhEHb$;m-ML6(-5hK7cUii#2v z5*!>H3^1VhlZBCifssK6BmgplfyL0^gy-tL#S<2~>-s47-8*71uQ0+b*yps@*3<$M c(T9E|OI0SbJf7qrz{Aa`W)PrfD9B(90F2%y>i_@% literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/sigma1.gif b/lefdef/doc/defapi/images/sigma1.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd4939b672a10f6dccbd67715280cea74990a72c GIT binary patch literal 135 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu$UN}@XR)SE}-4+)KOH>xM^ZgU literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/spade.gif b/lefdef/doc/defapi/images/spade.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc55199c42f6251ea7cde8a4e2964f7687e6ff27 GIT binary patch literal 122 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z@lPs!gKZB5&@+*60S}OZbmWAK>;m^GM$ZG*Beu$i%O;*NS?~UU=0A( C93AEW literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/sumation.gif b/lefdef/doc/defapi/images/sumation.gif new file mode 100644 index 0000000000000000000000000000000000000000..f65c1ddc6f666d05fa0e78b8555ab1797fbfd8e2 GIT binary patch literal 77 zcmZ?wbhEHbCMz{sEjk^z~)z@lPs!gKZ3MK6qAd3ddmm>S4(s*<(&(%RNdULR$SuoyKTpL26M H2ZJ>L%*-X* literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/therefor.gif b/lefdef/doc/defapi/images/therefor.gif new file mode 100644 index 0000000000000000000000000000000000000000..95944f41d016e6bfe322c85717be224b389c76a3 GIT binary patch literal 111 zcmZ?wbhEHb@#^7TbUmo~s?aRki&lcO{v2gjg__N?m#|?)smtvTqnxzbi?iOm z`wuoiNS4WHrXi}f605+A?54DFA9-EgIk4lAd<>vaXoLihCKfP>V-A-AXw^EyN?%Wz zR_A?gJ;v_|JZ@5}macoWcE#Bl+FW%vKkn+cuX_UL=U{iH*OMiNa3~TJ7=;uAxX4Gh zNO>6Jt_J->%*s>ZcR%s hJ>a;WAd3EzgEB1uLDYXG9%EKL9a literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/univrsal.gif b/lefdef/doc/defapi/images/univrsal.gif new file mode 100644 index 0000000000000000000000000000000000000000..effc1a5fba72adb9b56c56f6ca69f9143c43666f GIT binary patch literal 135 zcmZ?wbhEHblCGj?*M&2x#Fav1TasHk$+uk*s%2`5+!_dnNVVz34P_0cY) literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/upsilon.gif b/lefdef/doc/defapi/images/upsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8a2b3389f27abf4a7a8593e1fa193b2e606df46 GIT binary patch literal 133 zcmZ?wbhEHb0~jd&WMO1rU}Vq%@jzxUuoxMf@Lau?m9x_$woi%ktRpX@#^76XG5o~xHWnV~799CFaZ`=Q3wCJ}do2-n3N f(_dR`eWFvj;rsrW4bLQES=ihcU)b!zz+epkQ~WGS literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/video.gif b/lefdef/doc/defapi/images/video.gif new file mode 100644 index 0000000000000000000000000000000000000000..f339ffb6bdd11220d4e530f1798597d12a1bab46 GIT binary patch literal 906 zcmV;519kjINk%w1VHyAz0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui02%-n000PY009UbDDa=bg9r&K1dxy+!iNP95^VSoqCrrnR8`Kp+#Yu g3~EznQ<*nQ{*?KYrO}s4v1-jab12ZBR|5h7JB8)3VgLXD literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapi/images/weierstr.gif b/lefdef/doc/defapi/images/weierstr.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f9689b8080c0d57935d6802003b3e14b7def1e6 GIT binary patch literal 153 zcmZ?wbhEHb@#^7B_5@?L763@Ca + + + + DEF 5.8 C/C++ Programming Interface -- Preface + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

Preface

+

This manual describes the C and C++ programming interface used to read and write Cadence® Design Exchange Format (DEF) files. To use this manual, you should be an experienced C or C++ programmer, and be familiar with DEF file structure.

+

What's New

+

For information on what is new or changed in the DEF programming interface for version 5.8, see What's New in DEF C/C++ Programming Interface.

+

For information on what is new or changed in the LEF programming interface for version 5.8, see What's New in LEF C/C++ Programming Interface.

+

For information on what is new or changed in LEF and DEF for version 5.8, see What's New in LEF/DEF.

+

Related Documents

+

The DEF C/C++ programming interface lets you create programs that read and write DEF files. For more information about the Design Exchange Format (DEF) file syntax, see the
LEF/DEF Language Reference.

+

Typographic and Syntax Conventions

+

This list describes the conventions used in this manual.

+

+ + text +

+
Words in monospace type indicate keywords that you must enter literally. These keywords represent language tokens.
+

+ + variable +

+
Words in italics indicate user-defined information for which you must substitute a name or a value.
+

+ + int +

+
Specifies an integer argument
+

+ + num +

+
Some LEF classes can be defined more than once. A statement that begins with the identifier num represents a specific number of calls to the particular class type.
+

+ + { } +

+
Braces enclose each entire LEF class definition.
+

+ + | +

+
Vertical bars separate possible choices for a single argument. They take precedence over any other character.
+

+ + [ ] +

+
Brackets denote optional arguments. When used with vertical bars, they enclose a list of choices from which you can choose one.
+

4/18/17

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapi/titlecopy.html b/lefdef/doc/defapi/titlecopy.html new file mode 100644 index 00000000..77690683 --- /dev/null +++ b/lefdef/doc/defapi/titlecopy.html @@ -0,0 +1,226 @@ + + + + + DEF 5.8 C/C++ Programming Interface -- DEF 5.8 C/C++ Programming Interface (Open Licensing Program) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

+ + DEF 5.8 C/C++ Programming Interface
(Open Licensing Program)
+

+

Product Version 5.8
May 2017

+

©2017 Cadence Design Systems, Inc. All rights reserved.
Printed in the United States of America.

+

Cadence Design Systems, Inc., 555 River Oaks Parkway, San Jose, CA 95134, USA

+

Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence) contained in this document are attributed to Cadence with the appropriate symbol. For queries regarding Cadence's trademarks, contact the corporate legal department at the address shown above or call 800.862.4522.

+

Open SystemC, Open SystemC Initiative, OSCI, SystemC, and SystemC Initiative are trademarks or registered trademarks of Open SystemC Initiative, Inc. in the United States and other countries and are used with permission.

+

All other trademarks are the property of their respective holders.

+

Restricted Print Permission: This publication is protected by copyright and any unauthorized use of this publication may violate copyright, trademark, and other laws. Except as specified in this permission statement, this publication may not be copied, reproduced, modified, published, uploaded, posted, transmitted, or distributed in any way, without prior written permission from Cadence. This statement grants you permission to print one (1) hard copy of this publication subject to the following conditions:

+ + + + +

Disclaimer: Information in this publication is subject to change without notice and does not represent a commitment on the part of Cadence. The information contained herein is the proprietary and confidential information of Cadence or its licensors, and is supplied subject to, and may be used only by Cadence's customer in accordance with, a written agreement between Cadence and its customer. Except as may be explicitly set forth in such agreement, Cadence does not make, and expressly disclaims, any representations or warranties as to the completeness, accuracy or usefulness of the information contained in this document. Cadence does not warrant that use of such information will not infringe any third party rights, nor does Cadence assume any liability for damages or costs of any kind that may result from use of such information.

+

Restricted Rights: Use, duplication, or disclosure by the Government is subject to restrictions as set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor.

+

 

+

 

+

 

+

 

+

 

+

 

+

 

+

 

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapiWN/ChangedFeatures.html b/lefdef/doc/defapiWN/ChangedFeatures.html new file mode 100644 index 00000000..7454386d --- /dev/null +++ b/lefdef/doc/defapiWN/ChangedFeatures.html @@ -0,0 +1,869 @@ + + + + + What's New in DEF 5.8 C/C++ Programming Interface -- 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in DEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

+
+

2 

+

Changed Features

+

This chapter describes the features that were changed in this release of the DEF application programming interface.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Reader Class Routines
+
+

Reader Class Routines

+

The following syntax was added to the listed reader class routines.

+

defiBlockage

+
+      void setMask(int maskColor);
int hasMask() const;
int mask() const; +
+

Description:

+

 

+ + + + + + + + + + + + + + + + +
+
+

setMask(int maskColor)

+
+

 

+
+

Adds the color mask number to the blockage. The default value is 0.

+
+

hasMask()

+
+

Checks if the blockage is colored.

+
+

mask()

+
+

Returns the color mask number of the blockage.

+
+

For more information, see "defiBlockage" in the DEF C/C++ Programming Interface Open Licensing Program).

+

defiComponent

+
+      void setMaskShift(int color);
int maskShiftSize();
int maskShift(int index) const; +
+

Description:

+

 

+ + + + + + + + + + + + + + + + + + + +
+
+

setMaskShift(int color)

+
+

 

+
+

Sets the layer mask shift information.

+
+

maskShiftSize()

+
+

Returns the number of shifted layer masks.

+
+

maskShift(int index)

+
+

 

+
+

Returns the layer masks by index. maskShift(0) will return the right-most digit.

+
+

For more information, see "defiComponent" in the DEF C/C++ Programming Interface Open Licensing Program).

+

defiFill

+
+      void setMask(int colorMask);
int layerMask() const
int viaTopMask() const;
int viaCutMask() const;
int viaBottomMask() const; +
+

Description:

+
+   +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+

setMask(int colorMask)

+
+

 

+
+

Specifies the mask number information to the layer. The default value is 0.

+
+

layerMask()

+
+

Returns the layer mask information.

+
+

viaTopMask()

+
+

Returns the top mask number of the via.

+
+

viaCutMask()

+
+

Returns cut mask number of the via.

+
+

viaBottomMask()

+
+

Returns bottom mask number of the via.

+
+

For more information, see "defiFill" in the DEF C/C++ Programming Interface Open Licensing Program).

+

defiNet

+
+      void addPolygon(const char* layerName,
     defiGeometries* geom,
     int *needCbk,
     int colorMask,
...); +
+
+      void addRect(const char* layerName,
     defiGeometries* geom,
     int *needCbk,
     int colorMask,
...); +
+
+      void addPts(const char* viaName,
     defiGeometries* geom,
     int *needCbk,
     int colorMask,
...); +
+
+      int polyMask(int index) const;
int rectMask(int index) const;
int topMaskNum(int index) const;
int cutMaskNum(int index) const;
int bottomMask(int index) const; +
+

Description:

+
+   +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

addPolygon(const char* layerName,
defiGeometries* geom,
int *needCbk,
int colorMask

+
+

 

+
+

Specifies color mask information for a polygon. The default value is 0.

+
+

addRect(const char* layerName,
defiGeometries* geom,
int *needCbk,
int colorMask,

+
+

 

+
+

Specifies color mask information for a rectangle. The default value is 0.

+
+

addPts(const char* viaName,
defiGeometries* geom,
int *needCbk,
int colorMask,

+
+

 

+
+

Specifies color mask information for points. The default value is 0.

+
+

polyMask(int index)

+
+

Returns the color mask information of a polygon by index.

+
+

rectMask(int index)

+
+

Returns the color mask information of a rectangle by index.

+
+

topMaskNum(int index)

+
+

 

+
+

Returns the top mask number of the via.

+
+

cutMaskNum(int index)

+
+

 

+
+

Returns the cut mask number of the via.

+
+

bottomMask(int index)

+
+

 

+
+

Returns the bottom mask number of the via.

+
+

For more information, see "defiNet" in the DEF C/C++ Programming Interface Open Licensing Program).

+

defiPath

+
+      void addMask(int colorMask);
void addViaMask(int colorMask);
int getMask();
int getViaTopMask();
int getViaCutMask();
int getViaBottomMask();
int getRectMask(); +
+

Description:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

addMask(int colorMask)

+
+

 

+
+

Specifies the color mask information for a path.

+
+

addViaMask(int colorMask)

+
+

 

+
+

Specifies the color mask information for a via.

+
+

getMask()

+
+

Returns the color mask information of a path.

+
+

getViaTopMask()

+
+

Returns the top mask number of a via.

+
+

getViaCutMask()

+
+

Returns the cut mask number of a via.

+
+

getViaBottomMask()

+
+

Returns the bottom mask number of a via.

+
+

getRectMask()

+
+

Returns the color mask information of a rectangle.

+
+

Additionally, a new enum was added to defiPath. The syntax is as follows:

+
+ enum defiPath_e {
...
DEFIPATH_RECT,
DEFIPATH_VIRTUALPOINT,
DEFIPATH_MASK,
DEFIPATH_VIAMASK +
+

The returned value depends on the input data that is read in.

+

For more information, see "defiPath" in the DEF C/C++ Programming Interface Open Licensing Program).

+

defiPinPort

+
+      void addLayerMask(int mask);
void addPolyMask(int mask);
void addVia(const char*via,
     int viaX,
     int viaY,
     int mask);
int layerMask(int index) const;
int polygonMask(int index) const;
int viaTopMask(int index) const;
int viaCutMask(int index) const;
int viaBottomMask(int index) const;}; +
+

Description:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

addLayerMask(int mask)

+
+

 

+
+

Specifies the color mask for a layer on the pin port.

+
+

addPolyMask(int mask)

+
+

 

+
+

Specifies the color mask for a polygon on the pin port.

+
+

addVia(const char*via,
     int viaX,
     int viaY,
     int mask);

+
+

 

+
+

Specifies the color mask for a via on the pin port.

+
+

layerMask(int index)

+
+

 

+
+

Returns the layer mask number.

+
+

PolygonMask(int index)

+
+

 

+
+

Returns the polygon mask number.

+
+

viaTopMask(int index)

+
+

 

+
+

Returns top mask number of a via by index.

+
+

viaCutMask(int index)

+
+

 

+
+

Returns cut mask number of a via by index.

+
+

viaBottomMask(int index)

+
+

 

+
+

Returns bottom mask number of a via by index.

+
+

defiPin

+
+      void addLayerMask(int mask);
void addPolyMask(int mask);
void addVia(const char*via,
     int viaX,
     int viaY,
     int mask);
void addPortLayerMask(int mask);
void addPortPolyMask(int mask);
int layerMask(int index) const;
int polygonMask(int index) const;
int viaTopMask(int index) const;
int viaCutMask(int index) const;
int viaBottomMask(int index) const; +
+

Description:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

addLayerMask(int mask)

+
+

 

+
+

Specifies the color mask for a layer on the pin.

+
+

addPolyMask(int mask)

+
+

 

+
+

Specifies the color mask for a polygon on the pin.

+
+

addVia(const char*via,
int viaX,
int viaY,
int mask);

+
+

 

+
+

Specifies the color mask for a via on the pin.

+
+

addPortLayerMask(int mask)

+
+

 

+
+

Specifies the layer color mask number on the port.

+
+

addPortPolyMask(int mask)

+
+

 

+
+

Specifies the polygon color mask number on the port.

+
+

layerMask(int index)

+
+

 

+
+

Returns the layer mask number on a pin.

+
+

polygonMask(int index)

+
+

 

+
+

Returns polygon mask number on a pin.

+
+

viaTopMask(int index)

+
+

 

+
+

Returns the top mask number of a via by index.

+
+

viaCutMask(int index)

+
+

 

+
+

Returns cut mask number of a via by index.

+
+

viaBottomMask(int index)

+
+

 

+
+

Returns bottom mask number of a via by index.

+
+

For more information, see "defiPin" in the DEF C/C++ Programming Interface Open Licensing Program).

+

defiTrack

+
+      void addMask(int colorMask,
     int sameMask);
int firstTrackMask() const;
int sameMask() const; +
+

Description:

+

 

+ + + + + + + + + + + + + + + + + + + +
+
+

addMask(int colorMask)
    int sameMask);

+
+

 

+
+

Specifies the mask number on the first routing track. If sameMask is true, all the routing tracks have the same mask number as the first mask.

+
+

int firstTrackMask()

+
+

 

+
+

Returns the color mask information of the first routing track.

+
+

sameMask()

+
+

Indicates whether same mask is defined or not.

+
+

For more information, see "defiTrack" in the DEF C/C++ Programming Interface Open Licensing Program).

+

defiVia

+
+      void addLayer(const char* layer,
     int xl, int yl,
     int xh, int yh,
     int colorMask);
void addPolygon(const char* layer,
     defiGeometries *geom,
     int colorMask);
int rectMask(int index) const;
int polyMask(int index) const; +
+

Description:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + +
+
+

addLayer(const char* layer,
   int
xl, int yl,
   int
xh, int yh,
   int colorMask);

+
+

 

+
+

Specifies color mask information of a rectangle. The default value is 0.

+
+

addPolygon(const char* layer,
   defiGeometries *geom,
   int colorMask)

+
+

 

+
+

Specifies color mask information of a polygon. The default value is 0.

+
+

rectMask(int index)

+
+

Returns color mask for the defined rectangle.

+
+

polyMask(int index)

+
+

Returns color mask for the defined polygon.

+
+

For more information, see "defiVia" in the DEF C/C++ Programming Interface Open Licensing Program).

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapiWN/NewFeatures.html b/lefdef/doc/defapiWN/NewFeatures.html new file mode 100644 index 00000000..040cbd0b --- /dev/null +++ b/lefdef/doc/defapiWN/NewFeatures.html @@ -0,0 +1,628 @@ + + + + + What's New in DEF 5.8 C/C++ Programming Interface -- 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in DEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

+
+

1 

+

New Features

+

This chapter describes the new features that were added in this release of the DEF application programming interface.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
General Reader Changes
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Reader Setup and Control Routines
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Writer Routines - Blockages
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Reader Class Routines
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF Reader Callback Routines
+
+

General Reader Changes

+

The following changes were made in the latest version of the parser:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Elimination of static data: In the latest version, the parser architecture has changed from C style-based to C++ style-based. In the previous version of the parser, most of the parser data were stored in static variables and the data lifecycle was based on initializers and cleaners. The new architecture places data in data singletons and uses C++ constructors and destructors. The switch to the C++ architecture has improved the parser re-enterability, made the data flow more robust, and helped clean multiple memory leaks in the parser code.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Introduction of parsing sesions: In the previous version, data were stored in static variables and, therefore, were retained across all parsing cycles. This meant that if a property was defined once, it continued to be defined in the next DEF file reads. In some applications, this feature was actively used. In others, it disturbed expected application behavior. To address this issue, the latest version of the parser introduces two modes of files processing - compatibility mode and session-based mode.
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Compatibility mode (session-less mode) - This mode is compatible with the old parser behavior. You can call the parser initialization once with defrInit(), adjust parsing settings and initialize the parser callbacks any time. The properties in PROPERTYDEFINITIONS sections will be active in all subsequent file reads.
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Session-based mode - This mode introduces the concept of a parsing session - the parser configuration settings will be active during the session time and will be cleaned on its end. The parsing session also controls PROPERTYDEFINITIONS data. Property definitions remain active throughout the parsing session time and are cleaned at the end of the session. The session-based mode does not require calling callbacks and configuration unset functions - all callbacks and properties will be set to defaults by defrClear() or the next session defrInitSession() call.
+
+
By default, the DEF parser works in the compatibility mode. To activate the session-based mode, you must use defrInitSession() instead of defrInit().
+
Note: Currently, the compatibility mode is used for all old applications for which code has not been adjusted. The def2oa translator has been adjusted to use the session-based parsing mode.
+
For more information, see "DEF Reader Working Modes" in the DEF C/C++ Programming Interface (Open Licensing Program).
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Long DEF Files Support: In this version, the DEF line counter switched to 64-bit integer type, making it possible to process files with more than two billion lines.
+
+

Reader Setup and Control Routines

+

The following reader setup and class routines were added in this release:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defrInitSession +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defrClear +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defrGetAllowComponentNets +
+
+

For more information, see "DEF Reader Setup and Control Routines" in the DEF C/C++ Programming Interface (Open Licensing Program).

+

Writer Routines - Blockages

+

The following writer routies for blockages were added in this release:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesLayer +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesLayerFills +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesLayerPushdown +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesLayerExceptpgnet +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesLayerComponent +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesLayerDesignRuleWidth +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesPlacement +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesPlacementComponent +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesPlacementPushdown +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesPlacementSoft +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesPlacementPartial +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesRect +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesPolygon +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defwBlockagesLayerMask +
+
+

Most of these functions duplicate old style functions with similar names. The old-style functions will be obsoleted in the next parser release.

+

For more information, see "DEF Writer Routines" in the DEF C/C++ Programming Interface (Open Licensing Program).

+

Reader Class Routines

+

The following reader class routines were added in this release:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defiComponentMaskShiftLayer +
+
+

For more information, see "DEF Reader Classes" in the DEF C/C++ Programming Interface (Open Licensing Program).

+

DEF Reader Callback Routines

+

The following reader callback routines were added in this release:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ defrComponentMaskShiftLayerCbkType +
+
+

For more information, see "DEF Reader Callback Routines" in the DEF C/C++ Programming Interface (Open Licensing Program).

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapiWN/defapiWN.pdf b/lefdef/doc/defapiWN/defapiWN.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bd9f6bd7825f196df80d55f9c792e7f3afc1f439 GIT binary patch literal 111804 zcmcG%2Rzo_`#-J{GD6CTM5Sci8@G_XSN7hwmA$emBa&G}b|jmG%HDgckdl$TvS)?g z>%MQ5()<1H^Z0-NdT_t)^Lo9m>pIumD2`?{5#@rfZU~le*GG>5)WEdb22saoGl4pQ(!9k)75IBMp36f)gfeYxAy6>*_jiG^12}*{p|IcU0fE8};12=?g#Jwj5GW`7cl|-2T-?9o3IavK zf7c6uDy{?cV2}g$fWTk}umOR=58w&{(V2Clm<*944WIqk+96)W#EKDL1N~XjwpMOn5BUuN(5zOV~hexGH@c`fXC*9af4(~ z)~1eT3~(e2@Z6kWPLL9C4dv%|aI{AmSdkE#4I1j}>znB7v+C=k^!0hFsv13UJOm(| zc$9b{p*%7qM3+hkUNGBoLoDN2SGH;n;W<&JimkzTkAvP&eks--rdmQ$f1YEHBA)=~ zRu3x(+#Q)fb|z>|N7TW=`krmGELH(_<*h~~A`4#4t_+G6)A=2y*K4V4aPKvFi9#n( zcxut@>~EU1m5UwU<*Frs1}%L9CKo;+@>(>xR!S86pG63~zbQZVMNT{-L7f0@{9&Po zwE{HgNRm#To=uu+xg9b~Rz0Uu>7M9asg^sjgqJUWI5^_gjW~1Np?D1e;oh8EX@oCl zdn&k&1^~p>e9SEGnpsNfwdsF6gfAfP1ozBi@K;q-eB+s?qs{C2Cdk{n!TbzEMPg#& zeLM;L@cg_yh}AEZbJpivLyV{~a!hm#^Hl{zv7TCLJ`2m?Qv~|7@JFwsP zswM`|0bB||M-ph^%I1!iDCV7A9Kp-{z|YS&&=uW#Lj>jE=zt#1px@g63|hRsXM_Nz znEN^)VH;~llr``M9Eo)i!uB?{LN+d1Xz#%ZfiiF*p*kR0l(D(Nfl>tnd*D@|=2!_8 zQ4Tgv_C{#UBlk*d9D(M|01UOzNXjP}Jgt0giYD#p$K5|&Y0p!r5 zQ9y_PPL3PHbDwmWf_>yL>;OYR0PFt+IgEn$lS3E$B!^{(CWjvX{kL=&p8Lt63-*!2 z+7nG~4`ctTJ8p~%*iUX>QvqOt9(Q0+2LXQv%DJ!2yc`!8=mviA zz*rBvpW3f&VGpzbLiQ2k!Vu$xbN)sQ>;3l=+t(C?Z7glhgvbC?oWHl2#C4Ab`=sFI_E$Gg@U@z{uJd<$^K>iJ+X#jZli>LJUyAVD%tCB1Om;(&O_L)EG2T~DM z{Q0hpE%xF43ftGB{xG=S8&JdGi2Z|T<@?ogwO}%lg`EJt24%alSEGGuF_fo{;huYf zU&lyj&a9~TfKuffo?aVIs>%aWn(HQ}dO=-za}&ps`e8;2i9SNo24@nxKPB5IoeE;_ ze=hI$+}DAvFipnocuuaq{t3d|JKg%%1f|^Un-aab8K&!^cdx`Ipt9(bKIVz@gblMH zXqcZ;nF(xubSGsl3zSfO%r=_6xL#8O=G9qgKAMGce8w8dPEM9dqI9u_+F#?kPM_M^ z+ht`5$=z!RL8S0ZlWy3W`_0Wys)P}9t^qYnwnO%9q7Uc{t_T#X3vtl36>M4Jk)BtR zc&)?Ld$aNk&v0%Jd(Yda=lsGh^jysP)D;q2V(z+Dt$-gTK-qIP?x|Y-p^&1*I;P-Y z?MYc1z4k*1t{lE{nhAulL3GouhdFd!l`<~s7~TnhzL28Q^ijxLeKx_e>fsZnE&~e; z*d_$yJl1q)|I>gK1H$hxFmOPj@d*-=5R?*4%{hT^3Ku{NUH+Xnx(pq9!8{AxLqCUo`}-TfI20&DVjSjv z4&S9fQ$Wk`{Sz$-`WpR<<$}J8zTyT#1>f(WKfw$zpagyQ`#S(<;JLkeVKn+X$A9|{ z@YokW#9Cy}>vgd3O)*h-+xP0jYc0pfo+LJi@ehtD{h_a=YLCws`HdHg~YtCnCmEM`q`J&O;VLdv3Rl+T>$8lPA>lq|kW9z;7<&4&`TSQ-51wnqt&!!Iw$8Avcd<_&Hdo3A#uX%a(TO6vH z2Dx0vL7G8-E>0)%sSM1iAcTEN*O0TXQ>C*j_UvjsesvCn41#(Ioc> zrWbDXHqw}*wNolmJoFJooLe84@9f_5=b>>qe#B`G#c47%D zpNb|CanYl0v_%4ExVn9bUfW*77*TYFRf^!gj8MNQp_@XZ^W{n@0fZ)R5yeR;I@mBfdH z$Tm<+23?JTGjkE3`$_{9av}1)Q@OlGIV^@)X=@m~?44H^)a$gsnUTkKpd& ztiGorb1)8{pOFjhOrG-L+h_eVN<2ozdboqCqsEPDYai)(Q8zQIO|Tp#9Y)6D5eoL| zsuGG&e`3aY&rh{x+56>To*8Fe;*ZJ&b28>o^$oIjHJt*k8vYaC&SlxozM3f zSiqV#*rqB~<6>!OPlb2)z3ElnZ7wXm*!jT!QXN5)H%{)^Y8K_1l3jTsM&0+BU(ZTb zq__FrdKhia*?#=11pAoaRdRmg#=NtnjKo~;DO~B=ZD+$p=)Gymo_erE=9jv7Hd3ER zjjJJE^ki6EwP0fToSc3%f2*hmzXLqwo<6Zi-dcU6=W#sbX8Bx8mz$)5MIqOMt8qyQ zjy71cW{7(8%3+bHjysKyZ$?tkM%<@IRja46y%D@X@i5ZwTgKZ7_E?K*Gw36H{uV9e zLyZgy*F%*p4JTu36VIl`+MQSzv|+0~F?H`L$;EGYr>PaM3$oJ2>@JrnzzFT?EXZ{~ z^DdFN%o7KK3b_Z=D6fTSC4u73$B(TY#j}a?wWP+aa9|*Rr?E&_@0D;an^67!|WQ*j)3MH^nOYbiZAHI1z zz#>@r0&Jr>wNqbSy6}8l@<|Lu*Q6Jijf#cfy|z$fjc@(pWxNylvQlKq{$w4`I}IH* zUN(Ic-?`%^G6z!IwIbgc+>%sC^;P~RRJ3UjN%Jlu(XZ+r>{CD4odmGviI~L3NvhB@ zF9=u*@s~&==r_%&h@M^JxNaGfTTQq&7O#l=PNWP^)%~1Z3f^oIUQXt1TUndzwwISa zB&^c~6wMwLRhKzdf^t7S@Rmx7W-~GV$!QJZBM~&p8Qo_h47v}^#dfpP5SO2s+&bsS z-{MLSlZ?oAdfE10mUeFTx!}%M^L=zN9v1i*<-c*^`IjmW{Y(A* zUhUOej(JD}gC@Bek7ji-<_HR@%W^I1N!hIT#?M_lWio%aE3k`oj6;*HZ@x~L-0?+W z>`t1nbVDlD-DJ5G?W2}yFFI@~W%SYyv98%>C6cXusnMlw6DYl0ygMbEYb9MEpng;u z1R7lH!%bby%qYF^Y3W_hU9D%a9VtSfIF3(`SrDMWr&a+w9r$m0@SM_?@M-F1oh=AyLawlgwv<5C4Q}+*==duZa7iF*Ms4wCyXi+8^~*mv z_$kb+Q`X9e5>>}+>`o>7%A7S6h^=XnSMf4tM)fe4Us-42SB(X;DWLH31&_DRNM<$C z2K3EdEq4NoJRs(N7;Nv7eNXe0WMEbWD=$)g+PumD9!f}mJol;L8`sZ_{;7iUjPkD1 zOQ(|X*FVxos?>sN@4sUL7lgL9gz7>Tu9n}j5L5lMyhgd&GU}ry8#iux;`HnB(xY7S zT=ZGF;djb{X;N&gn>njIrCu2-Rl85h_N}~PhF6>{wN+GIUQeA!UP$=Bg0LAVUMs&r z-0=QrBI)L-5B|gtICBfegb$^pOVZ%?*Z0ls2v%pPxOP zl&)x^O~s3qjx*DS8a+X>8F*9e43?*)@P*sB8N)QSF3f}|Wkur`gbEE$+Gy>JWMn=_ zz2fR7l%q>icrvfNl_JKwZEA+|4ZKZLb4Rk|)L4zUHK`c)4-?`$4a ze@;hX2&Pyys`?^qdc@`IeKH1-vV4?YEtA9Or1V{zye^yz^kP@b1f^`UE|J8ZVBcA^ zm0-G}n!kO=k-$YYpC|XiYhHb+!zJn?;_FrpB1g_Nn;3~*vK_{o+-3K<`_90g`LU1{ z70*L5R4DTc@sraVIqH2M7c{cNZBt)#2IvkK7xYte#0%ZiD1gW0*`ae9#3T*9^~`r zS=ou7iYItxV7e_PE9r*NWASEZ&Wb-Cqw)2gpTiC5OBW^kGTr2B+%37P#rbZo7s>4K z_`h$VF9+kAWK!sfz4VT|6wAjsWs$5Y;YX0SC4E}Rl~)8DckG=3ivmOx8q{#KY}w;c zu_<4rbVIbOQ*SV=}y^t6aBC|R4nF5cxuW7 zg}Cp!&FiOb1Xd!U6D^~UDnKDR44mb`*P_dRnpS!DqOa> zu!Ktw8eW;6j$IQP)vIDWQA+Mx%3_$+l7D@MF5YY8%xbbUT>#7$&tJGYlw;|5+x@N~ z(=v841X&|uE0WP=br2WzqikH z)5dBVdEk6`uU~~qy$>T@Z+BbFwq(CBmi@8nY4I`X%XsJKQx(L=ybG;zWsfSGl?rJ1 zXs*|XPoLsc>o} zMJ`u!W^f?slESGsn~!|I*3}sL-qY9dNhtl+M$K8cKoDqqR?jO|?`W(gt72mpFvl{v zdHxIs%{qq<{jp(#ietT@`ryw#+}|e07G$p!el|~O(ri_F!J^1GU$;kE*!h0? z%vVQuAvY_lRXLwo@ViKy&CkpX3uBQ^yH!hTW62Dc?^oE#J9^ssDqU{`P36!j3wD+Z zx!ex@0&`4f^zyyJBRfKGk8dwrD3a_9U7hOZ8DHvo>ts4}VTRrHfq;QeMUOaUXJ2^Y#(9r9tFsI{ z;+}_at}^wR{~?ls4Y2*^JdP6q+dpr^xqaAk8wUrcva)h_cbABWh?SL9KtQ0-(Rm~? zIyE&lBO@axC+FF-XASJIqN1Ya=H|}M&cedNrlzKsFJH#S#sU$7?Ck8Rsi~Efm4=3f ziHQkUSJxXiZY(S;EH5wf^76K|wJo-^j+BguYtwsw7e{n*&p*RNltHI)6LDzq@<*|xw(jlh!-zjyng+fn3y;vC1qn{BQP-V z!-o$fBqZ(a?Wazi0)m}zIJ~8$MMFa)ARr()IXOK&T}4I3$;pY3kWfNGLQhXGK0aPq zS$S}9@a);MhK7c@xw(>(l6UUhdHeS5&6_vF!ooB)H9vp;{QUXzl9H0v)>b|~K0!f2 zKR-WzfB*da{ECW-nVA_D78Z7P_O7n32M-=(W@hH)<&~9{6&Dv%QBh@OWqthk@zbYI zz+(3B@Gvto^XTZPot<4@Utf55_}#mAr>Cb43=Ez;c~VeN@b29^dwY8~H#bFKG5pP& z>gwwL{(c7shu+@a%a<>YjErb$X?b{fl$MtE^z_u#)fpQbcXV{9s;V|NHcClJrKP3a zzkmPMty@o@KIP!xNJvPKk&%&>maeU>ot>T4)zzh>q>PS^Ha9ot=H{lSr?;}QGBGhZ zckY~!kkGw*_vGZ{=;-Lo%*>ETBpVwWCnu-6x;hOFO;AvfudnZwD_3}Uco4t}CKneY zBjaIWoCGTq*dH;C4xW9F4w^eUD4^_xZLDm8Fbxni0zyVVBH-U+-+xM=*o%6=fg}oS z`UHd<@iUfz33X#*fO}zXAifBM0U3b&xcx0n$QT*6^1c^3KQh|0?hdG^aqzEgK4G>f=$R8I@^`LQ+Owpk1uzIl2ns^>l4 zHQzYj%i~j%5`j1l&lpK%&(k|t-||YYF?`c{BKcT61$#J+}?})QCO!rT9-W6WtNqUj=p0QEp zrAPJW5X&~JJZM|2u1ChpXCx=B)^XokS8czvdH?1aSqF(i{!1g;t(PURIwLvcjT>H+ zAg!Y6+0^`({-tTN5uevqweeEVT&W)QaH6`{o{i6bUSnopaBlFTN$srV)U3(`s82ZZ zGvc{bhPCeX&x4ofOc!xJ=DfZI9(wup2-rbpAb#`=!)+4cn9Yr$wJ%+^uQmi+`QXtv z#zMyEWNw}{&K5EOx8-HOelTInt6LRB8WK{^PV!7R@i~`Z)$I8hXfk7{mDv`Gz4}VfDzy%H2Zvw(L@osrT@F^7U@YXKt}<9%+ZdjqzAFo|kZ$ zJDrg8*0J`|2P2fX6C0Z|++2=UWI@J`4pFp`DA=X93Bf&8`b@_mlNYW%2?!wLKb#Q$ z;93ek)0KweyYtp;f{-)nJIC&xgr)Z+Ab8DASv$9Ao;r2!Ln*$iv_l#f-O2gORqYQx zB{R!jZ706e?$IX6WzA+PL=h#@Sgv%crpcx31%p6vZ|a7yV%zYsn_U*MU)%i&!O1$g5aiS7+IR`i zN@jWWwQ`5D1SFR$F#1r8dr{j*8S?;12IJ_AR-PU1+l1=_x<@{vY_oMadoS~kcAAp; zb#RddHxgWpi?QViMe4s$WC*BTn0y zw-izLX|iWQ96FTsBrWZ3kEaM2Iz4>L$}%Uqj4p8a{nndd zmiCK!(0YBkgR{xgi0i{SY2xe4q4#6yDrGnVitwU%Xk&S{A6l`KvKNN( z<=RCY3gqg5E_9B~ai#XnAxIpCdHNG;<fggrPc%)-O1(~Ykl*KHiqA1 z1g~e(x`BGz`IT2Ni_52l+s4qN_2H891U@vgJ7rSzQk;X_aGfgf?D^Xyb#7J8R9jz# z*eHD?FI(pq?=otMP3aJ!Pd_Y709K<`i1C7RLz*@xhh$UwWJch#}n*aZIT#wu{cgX8gc%786|ZLc*8yU zbzDB~*Rn(@DM#WLeZ$A;O9S~9 zr7Fd1{Pnx0J-I09h`7y;Zr)?*I7M*y^1MVb6xmvMr0UVvv#ViixKtLei%OE*m;hF)s1V#+N(myr_>wC`H zj|?$k92*>K97h}!=C1>gFZPo%n$_M|11l2*j9$FPmfnNS0BsS?`Pe|;S z-*{qjK@ni=GXFjS%y0|<=B9uM#yAW(V!)>XAdnM|J#h7_KxneR2!z}(4;;Y-`5_Nv zzdYy+>-{>w=%P_iD?*|KzjZU8TJhQ-BJDm*55pa8lYZtOzqJg<2Nq>l&}N8LV$+Q#<>pY3GLi| z)yY2J`ioA$TtDQ&*87h-*-Mf9#U4LfsS>~q?Lch-DbPqnTj;x=w+Cdxw(EcNY#7)1 z3r;ca9sy)Ue3uQqePO>t#X8#`;-KAy380|gRPYN1(ds?O1lY_0`-wsDUO$3$7+5EI zfQc%=$lw>!2b>^Aek2U}vz`6c#`p8t%e6hgM;YT20ekM}g?ad3HMqfCKY3y0{$a;o zcwsx|1H2S~I$8h12mRmyK5#IQEc?SIzqO%X`25y>zZ(d{2S)+GgguVqFZ|Fi9N-7+ zje!B?!M0iSww8k!z_wW^){p(6UTB|T_6w&2&IpS(2pR}`oUqdWS%bfIBj0O=?ks<; z(E%@n<%2{!y*)m^df#8rw}C}&r(eGbhb#2aRPIjTaG%@c|03%(!p|)~6l&kt`O=%|_)KF%n z`!F(fpuFP!yt7^NDCcVAN#0E({Tf-yKJdUqHHXx=xvt8xM^bwa50}{w+yUonq z$!AyC&kBo4fo@u!%-)(PJOy!O237i|(vRifzswY_oXUybSbi-_)`#a^lJ9w^UKI2| zDvSIUo@NQb%t~Gau*{pSwk+CjA{u_fDkj-9zpaVdbA+w=VQZ4$50@UIWKDlI!T2zAc)bb_r#td!_$HmfDn8^c8$LY6w+T zta3Vv*N!y3khJ8Q?YlM7j~hYncm1YAwn^&TH{>6f&c_?#c`e_9GV2{4msZ(QRAB)2 z+3m(zrqa7jM;qLyRxP+yFLkU@3U0=x3@4Rar5xv_H_~*dqJJ~2AG3bJ#<+_%OeD!M z#PC`UhiT^ZnHCFJK>N$L#;My?Sx>8t%AyhnjMaXi zUM|L2OC!4}+ryf|_338*kgXS+#zHm)QS*+Jh{SngqSuCMIUaA;pA4%|7Z?O+JP7}G z^v^59zbUJ>TDx*R4xvX1QDXmMkhH?2iVe}&>LXFTx zR#LX(imtkzly7>)2J-JT)fInGcaBh)y4v!b@B_zdQ97oao!Mg_dP;-Syh0j!mEODg z<)oFYDZffEnnfOGWbD_FCo4;|V3u3*uH~2Z=&QBB>XtPoj}=B%6wwWDG!wWX4il}@fmq8uc-8DE%PDI20FYl z!WbA8-R2raufr4%eu*4q*T@B@@x%o4amnMWY>jM9=gE^Kvt}s1a%dKEJ&l6Uz6;;_ zKyp{=L7#WW%%`VE66NK5lCF_LZ9%LCGoQV`aF7U!aRw~0*bo%5sZP6@NZchXyDFE2 zN+_I2yL$3-`~-?dAwi@OM-9ZD=<~@jhr_`OkC8?F&XHn$@|H|*b+4EvY1$eSHFkBM zptw+FCE^ZG_0zP&ym6?L+@c{W!4xWnvS&iVIJzpNd!VZ%M4}Fz`jg!T8F*(3KSG{N z!;jBCEAa4VZW-Qsih7-7AlO{|VS$)ea+W5iVNK+O~331uBICfX%3Zz{72oA!_J0qZP4EWoU z^NHk(?UyRW#a4+QDCqmYs3NnoIB7RYIXCc`@tjbudWHRBrq1i0a$fxz&CQje#IKh) z-wHjLe;;=tO@D(WO^Z7#Nx1=9t3m$>)WJJCP^KB?g)E`mg(SvDs=4DB=~~ z`Em$c%DXO>kV4%n5y^D5Tmhta*x~ttoE*7;GM5hW$#w?oD72C zB`=&hXAX*5_qQ7{=X2CcBfjo3Z=08$LVwRlxJ_(vb+qN=Hu=<{x)xWOveo;(BqqL2 zK|XZP=}%JM=g=cq)QSoeC-u~{{Y>*bQy+)!34KIy6(ol?0Qa07Wf=FE!v(I^XGem= zM{=L#l1_?6zYXWNZAdlyEEvO+201+VtkC`F=eSVyt`DE3$j`J9sG>bORj<$> zc>PBE4H$4^Ix;D&ws1&y4+ysy^X7w z#oZBDv|gJpB1o|_=D_A1!Jy3DGq-W}K|u7&7ol-JM8qN9q7!8jqnjeqb=*cg@7&iL zOg=csPF0ZXDoR4tl4KqcqMqC`7Ag;dmnfy#IX_DgKJ%&XS!33M;Um&Q=dhC=>M5g^ z$3yw`8aLl>={DcG!%JVw(%4A&(&6TqnF2jci1ZrRi=QA(ZR_H=cxjWaTGNV3!){5q zQ>x}$TJF~QblXxyP}_D64AM%vj`i5CMOO1MkUz}BrAG9%30-}iMW`;(#I+q9RI}PW+J60 zA;Xok^;FzlZRX5m&%G`56w@wNeQK#TAcP*jLhEUesGpM{uA4&HCEd+Dww3WTHdj?cSO>!So#R(zQnq^AZ9)3+RTkPufOi33Lx7=O@_>oO?ET z;Y4u`>xEAet70&6AFjj1+L9)b*ShTU51&DhoHt$dGAxaAus1z+{JE)fp@7V_)KKp^ z!bqCdk*?{UbHxg-#k)b?@|VdO-`h>xlaGwjCWi8`z9Pcyok+Sw#hh5oP(&68_2Rx9 zu5DR2Z)h~CUaGip-B$N;3LDr=RKNSHyc}d!Q$!?AO=4cs%&`5L2!pHLI8-cuP$Ph7 zs#{ZVt%^E@7(TfxHtzMRDO8-$m?Pds%@^Q2&XM6ICi9&8$)xZdMXcT+jc~OHwJk8JN zo`~raE(DA|x{*s^C2sSf&Rl*iX{IXap~>3eOE(?`^Q|whwzqx!;8C2%aEhn+E9;H7 zOsSfZ&w@7Ox}f7vCPpd(3~&OXsCi46S?LXBiE)`dmEWRL&zkTYepZCHJv!}qC7&jg zK2(z8#);tI$hrYFf6JuIr17)R%mTNTCegstZmC>X6rcN^Dsn}ocZI8yVet5q%7_5 zJ45W?vQF9bniW2EhtDa7G^m!Pd9)=(JXU5V;tRTVLvn%Ys@U@3wXfgatdXR)2-?%N ziAot=i6cYDinZCT@EW&&ToNOlnm{{eTzusL9tt)s*vW&il=jnJdEU(v?wtXXG?ux zdeGyqGBZu4DUg}>{t@-5luuz8SI zk6J3cF+S_vOS_|@bh_-}>9$g39=7?^oQPbH^BU)9WPDwNUAHf`5hbj3=(abFJNV$6 zkLN37arNx`&YC z4Z8zc!=;tOL1*WLh}(jKzGb{`-Z~l~8a++JRG%RlZQcP+@D|HY^-fCh%{cB4#}AKW zc=JY}8p3q-vI=8Se$fR)p?Wn8gseg%X_YD;6xMf5dw;iiYcs)I`VL?>L&BsNk>Jwtp)U}>n@KDNH1 z-{a9yAzHF+t@T0@vKsUIMRa;SagS5q-WG4yckfsWpast1=tVs}@dtzN3wQ7Ba0Bn# z-v(U&y1VUH82sEu2Hx942H(GZ4A@!D4h41*1F=vr@CO3^W&ao^NcrpTF^45A}cdlAxq#vl{|-yeKZR%i{V1rwKjWp%Wi zu9md+B~ve98|%WCExqwhHQx`I(Ks{>y^||o=Q9&HPXY`3*fWH9kF#7S$3>m^(wG{b zD_^Y0!1UPi;h-LaX_M~qWrpOUXg|-JvN=BaCzt8&3J)Jsy;^@!%ZE2#@Kty9Oqky7 z^RI&jhw{V;?+dDURjW1)=x+JUkQ;}U7q^a)2NZWw8JXHHN}Xq&A#2G_Pw+J6H{A`; z%Gx~{h=P6npn7he!%{ItN%zod6J0_3MhAIVF_TAm-Id2>iudl~9KrFuYo_}LYwwHg z3tC&-I67!yV&H&r(AEGBjKF?if{8%b5Bm)h5@oD%O0ekKS12$R7r3A^6-ofCo^#sSz1!pY46?D|AvoC8?nN5J76h`*`MzK-!9`CwP`e^dty z=ndFAi$ntK5D-9b+<(Jp-x|d~GU5czQTwSkI5#H-3J53%aJT_*Si)aIVV~>&XHJ-P z*zZ*Wj%h?g0SWZ)dH!c;^?fe%b?8@H{MoDc~@5dyQA`GXM{j!_*1!2ujg27_?@rSAU2HDHVcq?G~7v)?%Z$8%zI2LKK@9SjEa z8Gom||8NahIAE5Xe{kZ$^hdz?S^&tQK$r1X-4SLr@jsNex0e2c5dzyC!2q`kxFVpV z_&ebJhikx837Z}8gA)w!s{rr-`v9kdLIM2!o$~(1HDGfdesF>Seic9-6z~hc=m7@! z)xYV?F(ak_&>oOm@e3fpfL{e#?OvS#1pbxwFoUH%PXE*5@n5eP?;9@s^PnBV4dvQD zY9G_=x9{g9yZKISI7k1AkZmRJMY*_CnB;&+IIr=SDv1|4VyTLf)~VacJ18m~NiVpl zlJf_i@Fkf#0$gWT+x0mPW4#K79aa7MarJijM%g2@kcrm4f% zeQ81`c00Z)+h`>fF#Gqbj{fpi-K051!V5;Xz*jVGC64|58E(kK0P8rX6NM-+Amq#H9(9k?2_q)#S3jSQ#SNv0&g3p?%>ha>WC&oo-t!Icp zcr*$mbs-MmY~Ipmn$Rf~e>bV%O%XIFqUt@Uw%=T$r z41=@`A|$$Gig@V`>+0ai(phSi4s? za!Z>hCcwi-T*+A`Vsz6vm}(;71ZY7};w__b_r?dGDWY7K_cs(4!AB04-m&1Tp)z5u z(HRk<-QA#O5K~$;ewkp}Ry}yLt)DH@&-Ww_ONyTYzKWNfxl0UgNhfWXXSET*Xa5l0 zQN|1t%Wm0Y87kq&Hb3$Ci*S>kSG zyF+5*L;mQ*4GAjm&W5{E;(lrFBv<9`ZWOH9WfU5HjVx(cp}J_)e=;CDu-IDt>jOg5(2Ml@YuPf@d;dO<^9 zzpNU4t})`Wm2cj>F5+pqMt&3R8lk+4Oh)cG!(v0moZ=mOQR+uhhh`geWTFBU@&y`| zKQgP~DzC7ygg)ewaiUEPDHd~GjSr~5tEpEqNI%12e?i%Q>6+VxhdIx;RhgO*!IAS) zVHQuu_;gQBw(>+|-j}-0ujO~=jvIks?gjkCNCltj_}YQXXL{l-boiiFS3lduPwy&j z%za9QR$sArfWKvYbIn|bvMXOq$lb-OSpeLMx0PKy>EKXgpRUrQc(y+?03^_HMY@@s z8DGjs>`Kstm8blpEER9|9{w+h$KQD1Xs3QFN=#KG`an|PnN1Ua+Uaz`Oi@T`JgxhO z=u%^~K_p)VQ|U!+;c^^e^J}gNRoj^oQEf@Jhn^n^IHHd)I}xJN895{B`vN4?MUY~4 zroh9O+s6?6sxf+qxd$bl+zCBa*0?nfeQj!8!}#Q+&o<8^a9i+I!8y?Z0vMqaGhI7X z%Eor**#%FYN-v(PQPiE0;~J@nvUS(ZR8m0H&X>Qj#33?2@rMi6lZ>U+J%xFlQ<*H3>$4MetMHw&4aCW;9V}O zy@Za7vAC497be-c%p-e$^6Meq&AjFtC3 zoGFaldF9|#o z5DPYg^#3Hpf=#CTw-5_#-@N+&pMk}`LGwQkEMUlAPStBul9jF%AS++UjfyRmNWJnk zqW!ha$&(p^q$5e)a7s%eNtJJsJJOfli-?f%GD{qXHMf;*IIs96Qig}KdY7E47J7ER zh`P$cj3tlkYf2Oy1=&L)K|J_Xx+Ze_rW`S=MD1hk%;`GU1dx*=FsZF`*5mE9mZfiN zL{plK81?jv{c4kq7O4dXB20stjfger*H;XpxH#I+${csT@hSh>Nl26IK$~jTc!}TJ zwO1CD1+G0lbP?WbHs=!R_GeweWX450~8l(aS9`%sn_<}h=# zvOI5s-e+VB9B>I_l!AVZ0AQyMT)<2pGw*@}^J3uKO5j}oznnVkn+_ci#u6(G_TzsM z27;b$0)Zi5sstRt4g6;We>uC@H)HyfFo1G^|GNVO$b-H5pG4vW=GuT_fO#TthAo5( zm}~z{_yB{Ry$R2sL;{SZCWn>?bMZe31Vn6sxgHFV1PBpB5PunFz~J~_1OhaJ6$o?j zKM4c`2hc%1VDbqBL?JLB!16Z%UJT;@KTQciV!)Jl@7!B4AR>#6$p1%bF{aJ#vHfR% z4z!A2CW>w9{bBu_CvrZB-#j`P`B9zjFs>ljW-zaO_F*_Tklsr+=@rR*@19@WedUYI zremOWR3#+M?vv=F<|3Ai5BY&({sPHghgYZZkp1k|J8Ne1z^f*@^4O}AS;&8pA6#JLL%B_T-oj(OHeN|MN zHFL&YX9HEr-kSnhwtwllJ9g_y(1x~rnSAy}u^qoDHPg!t*L(kuxVMa|Gh4QXad!<4 z!QC}La0wDDxLY8&yE_DTcL?r~;O-6~xVyVUz76T_)91b|x##pZ?yo(PjJ==ATF+Xu zYSyf(8pmA>DY=I2E#ZV-3V3&&mzyh0U3wUFeqv}mWGhj79Al9Pi?yL{O`N4J7=;wD z%?QlS^0P~Gr7-bSDE#vBz1=ejv`!?x{icJAu67B~4fh^`NpDQ@2eA!09@a-puE-JY zOo|@~5SeizK8c~;huK=~i}&E|JjSr56Chl!Xw=MI;khW;8{p7IldQJA&Fsx0p$@R~Gj2&XaQd82V%#} zfQnKN5a@Uv$mT-8?QwVO)*FTgw2fl|-oV*mHBCYN5g1Cr6wY>K_YNHF7G$$s=h2gA z70l!-sHd*{RH?#xWThRDLrgM-lx)>FO^CX_by@5QHa&eNBypGTzGp|m zGw&K^9qW912@~IzZ-QRnGSPd~(rA|n#Ej3IQ#gRF5l%;$3nRA5umVrla>ZyswVn}L z$6R%(s43NCax3{HYcAYBKH`AA<=ccz7Nh4r({k9Cm{bWe2luRA`J|7lzQi4+ z9rM5}L*w1e?PYcLrrws_h$Aa!idhhi)gHFRub{OOkMZLzMBB+RgBIRRK`AOY2yYHE zw~;Ci!U(d8F|(uKM^jhOm)D&M-*EF0$b2O0NvHAD5g>_?pj}l_K2C;eqaN`eAIfhT z?sA1uT?q}@4)CN1L}yrTBVg9^=PLyUmJ?*<~wVxq2xF$$W|nxBT*WkKU-)>v00}KCRoS^sR7vzH*zM_ko1wwZ+;w$+ zk!tq=?3~7$V{IFm^C-pwjqHY5nzd_DK6Yz@1ciA8k!~ZL@|~DEdbn7j78vA5{c@p47? zrd;#mOC@}dhG!7koCiRcqylC$h$Q#M+6WmO-cGD2)^8)i0~D6ijH@ZX4> zI(s-(Hy$|1>{O}7_qECs)k$0H>EVLRT-zJ6J}%`3DjOPQu~lLUh0E0s++0ZA_C(>; zQa8wLhQw4-u~ATz_s&pm4s&Rx9~p~p7{XQ!!m@mX3+Tq%--SJwz?odQ#cM(=`Ea)4S zj1CnHeQRRHFQvCamHmLfieox1$udn&yUKcj_5vNYL3Hbul74&37Q(Hp55oPJk>dMU z-b`jX8X1au9)bBi5qad!^+C^GtYzSwPka28!O)_@Uge?DqZ(us10ggMt#`v!=4&w= z0-|@`q`~S2$k?vc*YDGPy30o~M_Z}2KOutF>5-sxW&w9JOe4U&=b zwMIzGJk8!7RnOpymL;2n=2Oo`p91Q2bqR^d{Hh1kmjWRzcn#$l^C)P#kK}E@A>Y;K zIRJ093m@EC(JH>9v11}DCc3nuy(J(IL(Z9o<#)f<3kLsf(JLJ4&C8}qRC_lj^XtZ) zGe_w~9GldA(K1^wtgYm!v=iW0QVOii*Mo8It&oz$<9E)S5fE zm*KauotVec?%II%**UAn^&;l zJ9b-O8GuC0^!ffE0C{d>{fh_kq*3@K!1&i3mS=6lKND5_h{gXZs(2m~^Iy4Pf9G)h zF5dcchYKJX_&qTX2%t^o8IYRxlm<&s+Ny4AT_vMUjfqHeUUJ6Z&xd~7tK0*hn;T7^ z^q7gEms$zsN@kI=$Q`_5!=spp00p1f3#KEssUa znS!DyLco~h4g5(fNoGd%J8&z(Ad;BtLEh6I4W1_K6*uCTj^NjV-#RXauyG-f(pO)# z=dgi80{a=q7iRmW0&lk?b5G52?(I-{3A+@8O3Bb*`KS>On$U0q zm#nZH0$HGWbu7^2F^f`4DYMDMVEfH9C78qbmD} zP^z`{$bU`Uoy&|2318xouwTJ=^QdDw$eZF+FFj@$yN@JfsyQV$PRQyD6;JqgIysZ1 z18oSu`0Ihaqg4X@JN8fCPbyr2yY<9Q={4g|_w8yNAIb(B=a075n@t=hpst3d;j$PY z(7#jJ2KlqUO@NNv!u%G;)i5`9Xkw_$(}dSoCL-^Uv%2caQmXpc8-cNx#eY{X4Po z`=a}QiBF!M#QIDwFmXO-Fah(!elAXZeqnz3KmBJ6BmGYYr_b;CFVFh(yONWW2Ph|;p);N|;SEK|uqzI}R!bwnlf@1-p)lt*EF>l6MPsJYwhH2=d(C3(f zF(}{yO%4uIIGJq_NOhPSoX<4d^HMqCHPN(TAXWKL-|x)~bnWk|di!=clc7W1cLcCR zt#z2R`FVE@Nou3fNvgE#2ElsCVmMT3RfW%uy3MtZM2Zg#>?0InYc@4Q48Ur)(7Jaf zIKunTY3AOUe=d{s@Nj4KI00E?lf;-exRXLPH!pMseLbmRI;DdpAMq^&YxC`nNql8| zm-uD`kSL8g<9YA(1%Xwb=U(e$DN3y$FNNet zl?QV=0Z4J+R(O_`g3OjKQ5E>5_G7Vnz}^KbNv?~={FwKq(6`){b)BtG=T zY;lE9yR$WG=APJnDk+-`$d&^Ah*l*(sgnKIk;!Mp0@JwiE}C*51YgtLfUa0^Hul z5@!r#abk%ISgtbG?TBfeel$a$XlLr;K8leN*N0^`nCT{SF(h`5twK#C5TVWZmcL)D zomQl!sax?>1S^`Rt7sa}wk>*F;b)GM872vRzlty=Nv$sAPryTm52az@MJig(5(+IE zzQ!TBh8K;p1$A^=9E7A;^!X*h0n}?@K8xy05^ro~DS!WXd&X+y%e@%%8+v&0QkYU0 z344+U+ixkHmK?bDUzu#tRRL|LEE3SRJK%4d>by7#B_8owg=zv5JX8nVaM(Ux4!2L zdNKT%R|9vtDSY7oSfI)Krui_5XMAzV{#~fA3$d6NnkxPqDuZ^7@ea_B4;d!Rl-shU zk0?s$8z!OHds67q#^l~V2Ko&{)uJH z3|2gzH)QGiB*aHpGkyz)sNhteW412i-`a#B#9;4Njr7Q+*kYl-%|5^tEeu!c_%Pcd zx^69uv}yqi0R-h~Jo5+e`aIg|m%HK@9vh%%`4vK+Mxs8U>AxWK8G8R22z{o@|B|bI zw&Yji{)DU6Gh!4sx3#wTK~*bRSepQ*jy%m)eCnt2M{G3{(+@GylW+_md*T4-NdW}t zlXC257+Js&!Qb*$|LHycM|>l_2!Qnbku3NdPZ%&n>o*Jj{B{S7MEEk-3YiOwK}ly-k%X0QS7>WQP86bZSL4r&tIQwT@LQk3ClGG zfmZYB@I{eYJJ@dyCNg&vb#@G$mGM%Xj4qI<=J1nc(I9gnnK@N8+~~TU-N&N5DRy9| zLIZwWkrM9jQ7Z&}4b^pPiK>nMI`CAznEe__JN6O%BVQe&=l6YelsZMKXZf(@;8`lRe zq;NMZMOS-*js;WKOxw(8T1#rNOcb|0AO@0N;h zJzTLM`N-Wx4(pZ?K_J}?+P-VeoQ>F-@ivy>U%HVm#%s(tQpd~S=!JvT_gyA|??FPq^%aC&DeKpp!C%NyzDw@Q`=}okAS}JGf!&8 z49@Jzj+j!Y?g*5hx|7@I#?y`TKV^%vTR>{*JVmwY@MoiZb7w&vZv_Dq)>mU|SMp<(>?D5p8i}5lw?iKxTy>+tj{)?krc~s&{7<5luJ_rQd^*R6g&EvVYw&KO18gmru z>YuhP^SU4L;o6Cd4Z7yWDHG`{M!4DRgJIbomUHosv|@r~yg&X*r&Gh(4N-SVMyHx3 z!(O6dtTx*XRUfHNh7znfR)zQci*=+I3H~W)_2hsI(-nPOvImj{PR2~+|^N?t5Ye@*X3=2ZTYD)wX^LQhm zP?pcX#ZwA}jWtW6g`E|yFSx1t!0esNg*{a`7pjQ~?PZ z>@v#I$R5@1H(xZ!lFaus7CQ{OT#^u6gD3FOZ&$^Zz(l2d@P>Wdi0DzW9aXaEa1uK6 z=i)jW9{6CHY~@E0#sY@0$vDl#=?tPkUz+c5oAnKX2h`wJDl9q^^%2+hjUn+VT?*Uz zzU#`vJEi`(D(s~_Hm-y7i5dia46#Z|wRBNEF^H?)0owig=5gFcqORzJwO)lEtZv^%jR}I_)JfC;*bako zinLvgj<_CWgn+VLyMOum;~*M-2%z(tu{L8{MKM88lI)@elASAhr!1U~fgnSLRRigg zX%Pa>$pc}1-vP5MI4!V6OkU7EICS;~^hXJX`jid1b5K^8g0o^p={Nuh3Y*zaZ7EX> zEvU^19$Az_QL9#+mwF=l)$YA7TJ@gsoMh`Qp}Mxl0g9D)8&)m@YBgP16-!zbUD^8z zMC{^LkxoIex<^!JI9ePAj()5XL&Q*X=5$PS-ZGL#+l*w0E1Sn+p#BbMIzgRG621=s z#*G=0u@^jrh(|r=OJh_+WBu(u2HV%)u&~Ws;)0+)It!0`q!_J_ZG*Zxe9@6LUV`s= zL32-$>UOE0s7YZA0o|#Ew{$t?BR_>^r3rTAT9?E|S89RCoXC0BIIBU)Eb zM@JWUA8ixWNi-h!3RKejvzKA->blD$Zhyxn4cn*BI9cudQb1vumgP;C$5_KC1rnMsyzX)|VmA=j2wjEUZiCEM{j@n&rfn&pRvj-t;I zjEKDu>`M~S{8q0s&+xR@DABM)hJA6qgC60t$_!`*2H)69p~Qby1XEv$O05~3@h$bJ z;dG1ne5V>Elkuv{!p1W!dx;zZDQV`AC-nif2j`A-m$POgp^?;vmgQ6P8Tk)~0nu_`^8|#KyaEpcNe|xLqOji`Z^>Vsrc< z2Z=GNZw@H-*ER@Cqeva6H$T!iY;99>fsPjSuzwb>Iv7C6gW*6`mlu)R0r3~rH^Y{g z$h=IY2#-J@6Yot;sdg^38uBL=#kBiYp79}hR^~iH#8+dhW+|QHqlobiTE-r{xq(4DKqk4UZC>`VlyTU%J=r^G_njrLDaNkOoz?B)Ai|~ES$)c-WeqX;)P@`417zK?Iw!G9)MK6OvPE3^c7M2M zh{N1gxq%yOpX;8CPY1-k}4hAWl*=-*Dlc@y82NE9bD%WLPHX3 zYJBLA$k2lL9YUv)8@OCBp))kPIVTs~y7FHyXLMjwb?g^4@EY)6dL~B#s#uN0F^Il= zLKbyou{`b4cNL5nH8j;>^t!K%Z#KR?^-G|^lzvyZ7QkYU$UR~P3on1BPRowh5QTxc zHu?%fnx6Q|>q<@uL4A%7kI`-n%MZMtDT+24k`=7Wm;(9+L@B4DYay52;emq~-e^%N znP;TaanRBDKJJC@H-#|xAjzYFQzJjNnuEOubdlB~t46en@-`6OK&wU$4YzHei08A-f8$%mb{m6f>PcY#ox@Wk#qiU3Iy3N^o zL`41BqM+}4zKh`t5V&4W^!(9kDlbsqbj#|6s*VuHDHV}={;r#^Hnc_exUfmBB5dUd zYZch%$wfN)R|_`bX-i8yXS$6%4crPc*@>vo8>W`U2J~XNkV)PKQ85-G>QIs~wzja*HmkEn^RP8F8*7u^ zY@v^+@}|5c$F>L%0(vmzlk|Wsr|@NBO+-?<+({raD+?g^tZn5-i0vS-CutkMW*Lr6 zmQU&H$jWZ9?j2$V>I&zOtRx-VZQd=gqav_O3@ykT>x)sE)OQ8(J9QMW2fvqDC5J&% zQ{EDrf8k{DlE=>pW`^ zhV?iDxxLCc0U(yGI~~0JqgeL$0-hgKG20JvnC%BS3@CE}gtJcr*PlP0>0rViQ|AG* zL4W+^b5u&m_Jd+(`#~`S22ehIf&Is?u>bfK_8-6UW6C@s`*V(j@JDMs!0^wfFFdo* zKSoynE`(-({>^_Rgnk||`qy%==LPuN5SmFySj5J_*3R-r6#b-c5;r%tl{c`lF}8SW zH2Ft?G+-Io0F@g6+V!cLjO|Id^D`0j^IrUKE&4kN8q*VV4&cmL03R#>run&o1u&5H z=V;*P_u_wR($gXdni}X>|M~K;{ve5;mj_U6#rZQd`}52BpV%U5V9Rf6YT@wPyboyu z+dtz#01sh(Dxw68;{|LTE5}dm+wU~8|Bn_8uozFmK|Lcjz?``fGJAYf{t zX9AE9+DPg+8T`d^0ZNOXBw)|AiGU*9pIffq32Xlws{l-j>0hiC%agwG$7-=KG5ev#27kw5{Wq&7?5Jm8X>0l3+~BE~ z>YrQ^%um|KAKS{z&i0er`a6>AzcKK)!|)g8Jt-ldt`1H>S?ABxyFG)#Kd`lc6qE6L zb2&RxgXj4%TKn#uP9}+6*u_=+7+!lotQCwG8Y(x3$kG z`VU$56Whzg4oKAf*j^@%pQ*8bhWCHSzP~@cPxYL?>@8sM^-u2YljrddStxH|_*eVO z1gJgzadZJQ-G6d_|9hPH?ac$Ubhb6tdFr10CwI$lxX%fYp#O|s_}NeU@7C@qiT>vn z0j6O6x}l7KH1tnh$Io8le`l18g{jl~zjD$ z@0XCMmwxeBudM41^1%@QFfCvs=B%9)JLvxsKB{na%SbEBVkS`|Se+A4WlJmb0_ofO z{yw|M5?o)ev;E_(f27?j2{3UzsT}FRKyf|8qM4AJ{rf0nk4(H+;nTh0CVC{20^$sY-3&~2gYi+&ulAeZm zvqgXKn6osJJLh5LZe=f0niOH21a?v1$DW*}8ck3%%u?j4Qyg_Bv4SM>5vBx6T{%nU zy{|GDRTui(R7KAYy(Ey70h#4?-^iSoy$xo1szs+?UE?g1$d)5~3w>qin99T6;DKuH zVeir2A>oPuSA0jh4+3fDC6Pp294tm;20_eSY(QvZ{5nS$BY4Ax=$AwFnVj2DCr3Nc zA9?HLPP}A~fIOZ$YmH0eJRKJbnf55XPVn204NKL+FMvBUN=MJ8T3jA1j z#B=ERj=rkMt%jT*1NRN`JAQ*S+MPx9V|bS-kdOdteapxL$Kn?6p3QeH&a;3@+mJn7 zx4D}2+3GxKVj>DycSI)`6^l6A^i#K~ym>=25Yk6hXd_V&Y-SGeFX`hTMD(J*xZei6& zhe5be)gvv+pfS2QLaB@pqwRJ)dPN~ zLP(zJAa!YLPPZJ}1~>_v1w)MS-mEvz-<5(&jGJ*0+*>+h%uJv$-T|rPi0}yR2DBkf zf=%2hPrX*yt;m*VrCPF>a_!_Z*F15Q2`raexBO+`-Yke5r-vx{sYGsFw4IHwTnq=EA> zWVTtdV@32%PZOkdvjpQut$->k&0X5795pHu*&3?(L4a_8t42wip=WPLuee+o=p5EJ z*coskYD8(1IKk;XQf}uYK@9cr>{MokIDX1$H4-pc%l8D~O28iCKNpX0Vlk^IEv?IS z(xPclLnLhMCcFx!L`aWU3tyq*dDgtIir zO=tp}MWBPo=~D#((-pJb9P4G6^&5r2wBstImQv-?1b8~6T3+y%8MI07Sp@JE!U_x4(leVU3Q6Q zriWKie$p07z?IOt{xr9H>VD9|&k#F90Wx7g9z%ud>|Ai$-lN=kIzQL=u+QJYzMf5T zIxWx0=)86Wsn(FH4nf%z?pIp2rvIDT4PZf*+NerO9%+CoipWpqzwd#Ko zGe2n)+f%R!kf8!vH~}gO**E}wZGMJPcs?k<*z|wn&_18~Uo7|whZfLg>)#w&r3Ldj zHZ%zPo&4nmF`=+D%obs zfFfj!a&&LDX+9c_Dt`ZdsVP!_VJL;n@3_-Zw3^T?p~P@Wv8oDIoTNaJxggN<^=ENn z&UqNx&oVi)Ltx4)?J=YU80ARXx%J5!V|CvyRtCcEUnEpF<~ZnAk&kGpBMtEAv?#px zl$wSRDcZ7X*}I~SzD!R~eeEKmStsdyXjEmsw_skS6@7FSFj~4R94InOXB%uu_vJFK zRf;QwZR$Ps! zKsJyyG8sb1wulVlw`wU#hck4A$I?aWNZ1dwTS-$!< zumj#hvEvBwX+yb~vo>$F>ZF{T8Z~gCY$C=+id)%GxLJL44+YMb**rM28j>dTlL^+)2BkH`>G{?|c$}CwI$)aNjCty@RTC9*~j0NY|Ga(!e z3cNXqQBH&A&0Nz{>$UzUNtYzns_yTMrE1+=(qR5ch$$~06yl?bhwdN(vicazvL6__ z&_af_TKxhWhYn3s2iV-YF)~lhjQl?Jz{TgXQGRTWrtQdALJ)qaMMz>z>iz~)I}oOR zW}h04?GR(6bmDP0718X}wYLdJ4ayEc&9!nA7FgbCeQbVRORM4kb+d8C&FE6c!||O1 zyG1E`QOCe7zB7-V#k{fON)QdaQko^Ke1AB^RrY6WuQciF%%K)yv(D`GF6e5fl!EE_ z>VX`*t2R(7Ra_&af@Slh;eL_M@!eal$P?e4)X{E~W(T-oXIF|YnRQrJ36 zzg{wxo+V9J#mnzrDG%?z1ow2@XzWgS^_2?F9`GE5%eI>mEtD8B{GXo3tNZJZ?eTKOGN1oE}iRE8B zr5{N?Ky%>Va(2HcV1ILp0KHBBQ>W+`AIQMQ!p<7d!_6FU@_B`RvFnejCH`l7MgXY%TG0Y1H2LY? zqt7e!e~O0B+x_=w$il?1H@ccdu&(bBVe(4Z}}IF^+~B){q2e zVb$=&^b1FWjAX^ekbp7S3M57>C2$CX;%cn96H4i_IyF$wMRcU`4QPtT!`^Lu)@JKnWoaYYvxB&hZ;{-5xWrDAq4P zQN@gNjng&>OeDMTAh|}f+xqBR`Ea{Da#iASHtRtQD5Mx7Z$-=MJcb+<$KuZi*?vS% zecKSm7JuN({C0m_%3M-T&v&(jWEQ4l;SINE*;o8#@X4v{T~H%pPn|wHKLaH+rgr5l zNR*N-E|o`L6c30*TER?VGGXC&sd74vkG>a{3yLzX-6j$`M{k!2r{#?B(z~pqR={2= z>ts?!GW*5f?>LBZofY1bbDhaGi@w)1$hQ*+wA~~Ig~cW}TP7iT7uz)}=k=D&uEif@ zDgwMt7qc|YLX`c6Wj}GX)#ek&fH(I#%+41O`&o!eW%Jn})?{Z$-%dsI4}^XF0>E_^ z^PQWadh7`YDUk1u3({sZve4Wm7l=WiwOZYi#XO zax2N{t2nxM1>lt7&D1U))YlelVHou;NqT*@StmkQ5yO!y#|f|l@uqhY6Ehsr~ z>#*)p#hN8RWM@Dx2u;!26Ht3!lFnC@rW!gjMr}w1OwB$d6Z>XJ=-G-Jhyn##oen!5 z-6PCd8wknD$lksHCs99%Z7@!^6O5+tg!NF1Mpe#g1)B%&>!LJzNBB)ZAxr&WLld~6 zJ!iCZdVMqg;`}lR^ur8>{qckAw*Lv&&HX1-i4=%(?c>?Jv}FvQ25DvH^9jlL_;g=t zHII$4n;=SPJaUu^h~55ZNRKd*vBPrgBYu$4BEbu1?bDHCj@%J3mE0gaYQvE@B1+64 zS$u+P7yUV4irfQWR(}~iSN?p}wtBy1-G?mTbb%P$JF|3fZ9-5L<%XrJ)Ph1GU{o!g zHUvZ1j2DHay9#z~oYnI0w0#7Okh6?C`CZ;6SOvD;$0+#My4pv|;(Dr^y1#%XUW<#g ziX2;27t;raOCsz7xwLWTCPX;{k*~0DptB~pPDs`}9iYPN8D^+;UtlXumyuS;3_@f* z(dn!E*7uMn8^rx8%iKo$RU5?+aHlaT5;S3zXJfbX)|K2G z$F?qe{S;+d=CyS$Y}wEoeKFPmKqq`5BnHd z1x8yaTFPy12re&$21U*R$64V`Kf|ps{t9lY(xNkhn-nkHte#fKya=OzeWQ3P@8AdEHc} zOd0EMZ>6h*ncvV3C=9Q18z@%HhHhrRUmN>cVwe=VMQoPPPJqufg%UnURRD)mCJNIa zhK>o2^Y$dGeBgRvoBVOjdfa`g{3vBKi01m0qWSdDnOaF+aeK~oY&csQmR=WM3 z6z-Ikmd0zRcFnH>TTB~Yv(k#cZ5XyS&s3MDz0Di8u(mS+ZSU=!CZPeTXUXItZr8n& zGOOFMu2lJq)qvibZpCiwP-Aj0J<^j+LWkt1Kt>tejbSO?{RKpfAbhfy=3on%0y-z) zERfi5>{dMQj40SIT%(NvYs;+{Ds7m{kq!1(Q`$E)cY`27R#ga^(C{Ub2>NlDN#+-n z$l=PI<+5Y%ih3Bss)cHUmtAv+FS9+rFle&p2Fkrq#0hS^Qjm@LC|-r+4E{-DSJLw& zUrfIpTClx6&(tyPzVX~OXU3yy@B8#1d21e1{;|WnQsGwf;pgvVDK}p~plfQzhZxM2 ze=D`B2`r9HYC$Ih9hsNBoIjdQ#u`~fBYl(sE2cTk0DXktG{zV(Edxp8m%l&O9Gq`# zES=&&F`b2>wJ9Gpn=Q4RC^sRJy=~^(&TUN#ie<}_dc~TcTUG~xEiYkVrQx>jdS2$HHsILIl0AwY47GLak)NmV3KqTL_#SZ7vjMFaJe^$^#VI`bu`;&Ls zQI}O6-;wya=YwaBx;?MvW+V94L|S^LEzehrfv;4>O`WE9P==7F$k~jVcaZ~~no_*2 z{ou^f`lNZ4dLLS7$r-Sf=Jbm4w~9+04v34>-kGVDj9{hFBSudc0JGddf-?!B$42Qx zGb`q8ev%P@Jwxvx=oKnM7A5xr-<}Hmz-F3b=b<<1rRjh$EFpDD&LYzuo_>G~ATgzZ!rIGdTHeTY=XdckGf%MX!dkOF0!QoRax%o6 zEg??Mk_YHAlXd@sk9zh1Rz0iZqa9keTl?}#1D;8d&wBdtJCbhZugO&>l}A*MgV9I6 z6Ce3U8Vsw|_%D2e?n-NBGauL_dGbIIra^NT2hK(Jz9Cew1x10&~;}EaPI4 z)a|rMgg>_Va}Mtj5S@nyGy~9vduP}m;qmV!Xusg`v*`9mTH-lT@jKNlBg1oe{vYKf z{vSa8p}_sCyab?4{ci~L=lZih1mq_r;a_9%FDx+=K;sCY{ePMz=6o{ypNors7L0$a z{NG2zjOB=jUFtJ3)S!}kTCHo=h z(O?85heq{8a#lQl$B|^b^>9_2{=E`%$$Rp$MUm=5!-7o7A&!<%lUg*-wU&CsI!DN+aL=+ zaJe~&1f@h@JDp&&WkO_!$mgdc+;Uys(o1V{yNF68I-#wiWPq& zmy8=9b)pWOcNS<9HRqd7;(2J%9!jGVHIJcrP^qhZ->s-ZT5Zq5}6YFN*z=GsD%}9(9sWhH? zDMyj6sDDid)_kcF0BD3YK90y;WS&jkm*%yZZmo=yzu{=r_A5<#cAqU_FmCg(=o4E-~ zNiKZQa1QU)cwC5>C_|Q3{XvLBFpAHrauw>DEXj9v@><{q@(w&x1&wsG#ItBuwLJ8- zm(%256rhlqLv^QK*-;QS6>82Hn%vb^E+Chj9ByEWMtu4pc5bVn*5G>b_^l(ga)#v~ zISZ$@-A5jTawFDpSksz2o*LnL=Nu-!b|3N{DE#6()?-Msi>H=0-tkf4DlC`<#4$SD zB+mk&!*naUhrrCPStQ%yLvzr#qGEj2B|$rIJu07YdOIAG>K zu35sTdJ)Ro$8gihEzN`P8iV8N?NiS~Gs|dnw-%iy2@xiOfNGSVaB#jVJHpDcl@d_x zY#VX)JwY`(#D^e~4{0c>;@xg!(-1>(V^f7e4G6A5q|H`|l_Ao37@_ELu#ab64a- z2Jbq9@m_g2wN;B@eRq3gHr2)XI6QLj_<64EW!?Av^ZglS`*${p!P7-kcA9Zr=0onY zHF=sFuzH~>n!X5`WkNYDXI^wu`V-_dIuMr>oe z{FJv7pwSI2#f6N4BI3f8gGdgy_+x;^Pq-aPumxZB>2sAQs2no+_fZ^B5<4>OEc*rd zTybsbkO&;X%6qLhLv;Gyy#dE+JR^xuTWyv^Np(`XZdKO!VleQKWx(D2?Nu6*PIu@x zskVm~utj)`7Ci8Qq`9k|vIIaMFu69g?}ute@pVQAu?#xymX8FF$m#AZiXX${XMlVw z#DX5_u6!~^+-5c&TdX(3=SuDz<%`+PIu;YUC+86biJH_(QPvYxf_bkR_N8Km7GIDq z<{xPs$lJe{)8Elp0A<#>dPNV#{Q*{Z`&~*JD|OLq#--9cpr_l*0=+zz#dW}4kh`$7uMima8p!f0LeFd*&2&Si!8`Uc1Hn53$mw(?XayWnGe0OM73pz5$i zr|%Y}9EiL|_k@@`nIi?aLY$@QqE?BJl+4cB)D#*ZY|T$^eHSop3^bFr^l3QuQ$CEN zn(8((y)&MzXBdL!F6kfZUeB}%ij7WX9H`n0ze2$F!?5K^zy25_O5QaqbVXHg8w}SF z>N0+hY9>wFVIiN&Utb_7=BUbv&ProC2n3=b8NZ@x8NZop+v}?-Icvd(*~Pg}cgBnQ z*5{*1zHT?}geO-zN^OyPgfaYj%OIZR3jl!%NmwB&4jkV zh_>_|Y6jQu)-%iJ)-<(V<8T04eBXo>9WG-Ww4N_+|FgGF51M~YohagIzlnTw2Matr zr>~1;KVvm4dG(U7eUf89V5ACE`5|bd1)dQsEvonuVF2s^g?KL`f9cp6@=^pI69+cT zk@F;0b00Y;%R$BKsQW%HkCX!<1YojDmb+>(nIxX#{VP@5Z|Ui{u!*>ZCnwkw3VO49 z9q+7#>)?uTqn%J98yC1qOAgt;5ZC$VJ29)bP2@YFBF}z0Bdc8$(zCdAay)Yk{Y;Hx zj`&csQnZR8HEET?f=nuPpV5EOG+3y~>O zcKZ<${sPOtQM8PJo^tkQ^fE#s^a=)!wi>^m8v46f z`7dCZmE+%GS!vFE9xya(scc!Tt20Y@7ymV<{e1mUm*r%&p9Wfgux8OhEJhStU)Hu# z_3N>geJr`zqP5RP@@No>Onq3xDT$oSQKn2>_op@b(e`LJG?yqCB*Q2atyoRE78t2nk8^7@y7*7nAKb?%LW! zhu6qjJ8r7MYLJ4UGht2%6YbdcVR*>wUcIq6`;Y}|->u`Zzul8PZHjivcoU}E-=!L>9FKX&txGa z<<9Fkl~g`$-5d&5?~rOE*K#;gor~AO05_n(#tXBUwT4HLrW$ynl0 zghN>gtkG(cI3gxkH>43#{;rqOq&uA(EmM%qcaX}UXlu9y(7o<>dTZ?VHLoGavgk{q z>$}OTMxqOY^xNof-F?22#>Z<`~AUzO^vC(?CB+`3(M_v>5u!Vru* zXxvUCu4!lQOQ9fgno7N<3$CQzqe_>K=axzZjjMWNv*86as1XDuxA&#NdZF=xHG`Ut zhh$&3d(lRmGtK6{nuZ<*&0MLf`H)!cDoAW?l#J_=8n z@bYpoMaysr|8RSzWdf&tfssF zF4^5(T~+)0cI}N*sA~GvoTgxrN3U%9z%|B@OU~r>Dl#iNHYk9c_@bXp|7|p>J`sb> zK|-uRd=FcR(0qL$4~3_!hnEyOBn##@WWb_%$`K41iZsi`h=)KgYG;U>Uq*6auVyHT z&OUVASerwj$e=XhxXm0@&rsli@VOL=Ck=&Mz^?bRuTF&XcZELu146pI_hHQ-{2s&g z=hSHWmAZpnO}tV>Jp9J1jJ8t_C{A3UD{(Xr)lI8}>bq0H_+Nu&cW1qSBr7aHye%$s zXnieha6pvF5-z8pSj zJMb`%HKV*xb!xrL<)ONzc0}bJiC>;cIv*!?O<#6e$r_ z=|s_Ws!eVew7ntG^JyIKLy+pojzs3eXDTFaPje!!m4)US!$~i3rq&2fnCdZta&{a= z6GEvJ``kx&?%ojx1yxUmSVpoM(FG!wuj8noxsZ35YKi z(1Fnf%B>nT?uvz$w^j@S&6a zq4KvNw{68PhUi*HG(Xu{tRpYXvP0PZk;;01RnqIqwB4GewZZ+}|5|E{S23L^f0qp1IiOaAW__1}YM|8J?%zd^G9gVFcreg0>378r`; zcXW2>Z|Ll5nUF$f17fBcFSGrkIS_osl}?sgg4D=1szWZy+9A2i{fW(%*QC{%7i?fb ze>K1`1(;STSn;skAB7v7Uv^-{e?tlrjlk;P^P{8 za3XyeIxDqz9PoF5Q5_!Nk#dW2kuKryEhF)R*{NTS2gxc-=SZ%BhP%>yY*R$j@o?`) z)T`M^sPh>uG;&DfslG1R+fB|i#Yz*|X;U*PMv%q^kAk@ZF zw1lCm$`1umid$i8>%VVpg6Ye@jtR66`mUKS*Kt;`_R6OCA?=c1fV5{D)T=ZEB*%w( zMQw^Q4V(6&nT__fcZR-EQ2;6S6c{7=2uJC@BB605i})S^Hx-aiog(8q#Nz(Qq515C zf@U1xU6<>7bE`uyNi+?<3r?DvtfL$@tWx&9^U3{N=gr*OZoRMzigdBVQf0rk3h%v~ z(d<)`bmC{IZ=J%z(DvQ)WU*i?9SY`J392|}5+ktMN=C=?-Q}DIN>=s4h+G9YNHlgB zHA>Gn1J}=Magt5Q@=vK$6rN7oVq(PKi784`x-W9Fb66f9-AUqdh8z(}s4y$|?!&A= z``Zq)Q@1i~*iz(9vyiVU2ycru_^Ojse}urt{m7MlH#Od%k){*ym^o2!de(Luh7Bmr zFNzP6n7x8OjP*!&I+<-x65>nK$jA)y;w}nPR#Y<9v%Mc$ha0zM$>Y5l25FQRVyU8@ z7AQF+wrbw)y(@nuas8PFHEYhZ<41W^jZE8{Ag&*AzO5Yn_uk@iD~6A^@81;hovv#+ zaF7*_`K*+liPKY^FL*lE((H3C|D$4KYao? z0R|SFka^7-j5Ss_D33;lWVx7wtmdF*3!#dk^MSz1k2}56;NZB{savaev7S>Q$_<$T z*6mOhMpcn5k?-R*TlSy;W0bEo%j&9>I|{jkREFn^8-HlLMPq=$ohCe85nP@TN{4k_ zj9SCw&KDC}=zQPr{Y4cwqU%7$o3K9+Aq)M1uI4oM-GT<`gE!3~GzR>et-?J#i&vk) zN!O+qmVfZyNUb`~RdLe0h#u2oi^@>GBUeVxD2p*#S48M0<)9LAr)NMgIWU^t&5tio zsIx{-Cq%dgFbJg=FYRCv^uchCj2(j?`Ra7Y@4?k9%ZV6X1QO2H)}feYWpL@FoYc5- zf$|Jx`@+z@A`5YHb_5NLNr2l1*^M7I6Lr?z; z5B|4$<4)(n#f>e{lo#m59k_~w;l+*Ze`m$XFS-9e&>R1g zviS4a|L5Tf7>)cd!hJWL2aLYhxO8a9>2GKrJtvMuy3b(ibuqM*|6oYt2r>G6rmXWJcJsGwRd4f z@2Nc$G0L`Hs5aEV2m7=dBq_7@E*#7FHQGK_0C{Xbm#8o}05%&n!<2V}pnPDh1iy9W z!#k$F4Ed$ZNmf(xEG(jS)D?cI8(4qzf-BD-?HCi@z7AezXQUj*P@{!iht*Uw`%UWE zwkiCsVbv2X-%iyJ5JmhYqB5bzih6oJ!N#+Jg?o>cRIBf?a}fLS_BP?xr5#!4vi3?r zCsU5`j|;t}T*noYPonoTN2?;56CVqCJ+@2o%?!QA1^LtpmA-!B2NanxIx6Fi+unF@ zk>GVXNmVX=o1nivGN~UOX%r$gq(dS~1PbygleB{uJb-Sx)@II26E2wC?OseFC&6Vy zTQ^3mv#XB2OEY^YnB;>*+8J!--4Hb7214{07!EA71ONDq=kZFPPe#K*d&nKHjtL4P zRWjCX>m}Bk>Fs5pqL{8*p>p&iTSo_uyJ@WTNDQ?vb_0h<;Up=2QqTK%SxN1hvhYN2 zMSHiqMa+TR^J@VM%d_&)@J9XjxQ+OZ9Krp%Nx6qN$YJ(~T4}E%nCS(7$kh)c?bV93 z4_{{URHUqc(sml0P#&cCn}|siXYL`B4;{SXd#fKe4{EMYn)QZ6N7qca8!a}NiRao| zsEG&pm_vc(>};vKreZ99o^Nrn3x7OaxXMNwr(q&D&$bzM#8~u2cFeyX^&(1iW81jLF!YA$GB=I#VRh&2Dt`T7& z1IO)wa%HPHKmWwyk%b1h9U)hckoLW_@+@j{-J$gsDI~eNlp%rijTtLgvMaaf53i^4 zg9?EC5^SM`D$OTXlg)1!;KrZ%zu+-ypP}-U;ixfYwrN@3Q@H3u_9ve3WxC zc0RmnBB@lKM4&rrqtUtPMMQb9Ei>RPE97Zl zOjmf)eM{w-8s!!fp!B#E@v&CF5stbqz}XIRE*-Y)Hh4#AG#uGw@U5CyF!rHEjm^0* zspjnl;;tlNug_NOX~E5UB2Lwdkqz~2@HLL<+r^G~#7>m>YWIC9#D<0kZCU8bJ63M$*Ug8D?EL2v1m{WCQ*N~x<4sBX3-5BB zO2v;pYnwIT&BsWrer>Qx9vdQM3izPGd!!JXglcRUIv{w&MVNnybalo}(1Ppi?Wco% zF^1K**pU2Y`3+>>vOIn{Q3uo>GG@}YuEOgIig+%vB11@0&6wbGd+Up{$ z`C$?y_Kt|$Rui>yM27Tf^_}=d-8a<J;bF%Rj*jFX6PTFmPvb1@_y7&dbVPGaE)l@Hc zV#2v65;2eT*8Q=s#T<;AtzOH@PJC#6a(E zzbH+=EMxv}M#f+0?7trwe>Vd9pN))44!{MY{{d2cadGwnslNDj2Zjjw?_#PzGW2f~ zivO)D_nVLR|CLtvn|k~2Fjdz7TB|bvQl0(==Tl$p$&zx1Ns=$#9)VKvBjbcze0D(JF5XM@uttPJVb{MdCKO6@^#w{rD0Y)wliD7ob71}aK=5R+Zl}$1PBw5* zX|vN*MdjdNj$N`h^;8!FppUYk=VWhkz3CuyNfHrT6Jjl586^w6T}g)GcX<+h{X=$m4o_ zsPVdK)t+d5HMvOajP7F?7D8O8gAj%oE$FadlCe2{OD9}9bFF4wlZMMD%f;4hED)2$ z^L!fj!m7%0D0dulA##d5Mo4ck)%z)m?XS9AXy$x8xi56*<<3fTxo+b@d)2SO(vtq& zjpvbQ)OOoJ_FF2ec1&f5sxky5n7qE{k zK}p|CLogSt1Rm~x z?ex5$Pe54h6(IvfHM^udtdyA>5u_BnT%i*!RE<=~BDyP^Od&8<;6$5^Wg;lCyas&IGTrscF~wu-b< zCgfZ6f94fwG>qkhkkdIS8rdR}{z~BljX}#G8=F{J`D%_6nMc7sOqPH&T2|a$7u}}h zYHJ*-RBJ*So_&~K>AS6x%Le2a240p{l|ikCvR29#k=is693)M*4ckIm7@tH@wIUKo z7CR+USYfmRP?heh5vXm+1a^s3U9pP;m*1Wkv)apsvJFhhHH>7eg54h8ZC*_qWaafi zPvgGz-%pv&#h&R7DTCz8bKY9*D-&5 zzsz6Ow%xN3V|4h`_Z+(w*O~2nyEx@J$((0CmjibsdotBo?{>kL09EuAagd{Viif-; z?$)7GA7pfGIi~6`LVKE%tG&&%b@YcdLy4G)xVsg|1<^g9H=Y7Smh_ic3QbKPA%&PN zg3Mg_@(8}Sf_h14u~xIGH^VCR2kCXQIFTE(te)g9rbP)i0ej}}fZEr48n`f0l5kov ztp2U#CrIJ!>F@JshzDGHXbH$ORB!YmPD>GZ4(J`X^1`g1Q_R&4Ke%bLlo5NAef10! zFU-J5xhp1iKfq3pBBy0HLOT?w#IVd@K`8Hm@iu%t3{SKhmDCX(Oikd4NZ{Tv5HIs? z-`>tRXcv}QGqX{VaJduzy?ZKtekcx2&3W0VYiqpq8=Dj&2!B)z!<6h=spV?!#mh$$ zq}2_1r+&K+PNGUvLQD+)1aI8NBVN68T*qV~T_-l^0Zlrn6IP_=I{827`?I7u06O*XtpQW8gYZ!g1cVJ*lv>zQqgd^Cip8|%)5Kt z0^-1W8iMAWyCkPt=rE$Y&@`nbzFalD z%?7O)D1z@2ybgj9+O=YwjzLZo9IDi2>HQ6A(K!|O6UvhOhc(@-wxo=zsTIv1O zfD3XON<#3Nb-ZF;Jcqb#Vt@Zva|DKeb{#^`@CTauGDrA1ivK=GVEARV^nWr(0J{Bp zVQ~NL9O0)h|2yqj#a#d2&k&e_&Le(WK>gI7nc4rF!Mx~y%KiU?_WbkN|3~eajq$IM zy_5$drZ`X+x2Z;s=GVV&)W?uk@MjJR3WB}SLvn6z23_hW@7G%8Tzz*V8FAQP8knH= zN`S^0-(_!#B4O}#U2lJD!RtCjeKa1>x)Q}kzd+02x-w6KQFu9E(?1>pi$g=A-_j}qin1%m zZe(f`dU>_kUTkt2qXet4x7l-PSwa z2?YwWZ_i2`7fHHbtR8z?Wkjwu7T4z55;O_=qLk(1;$uPWc?~; z(}L@xjlJHFwbRC9#U$hasq+#fG?@M&+mPYsrnut*zu5h6N}~B3XzVSyGdUF|A}K;? zkWBcWp>l@z1?VI4D7S>Jl83^JjO%&1uS;wuZ=qGXeLBD`3s}uNka^BPm!)Ab`*M5Aa%ST_3e5WWm&k%FQr^{63`!)pu1EQ7_q;Ro z2kMSjC{{A&2^CCj}pK1PI^-BK*KwbBr)p zXMq2vTwHl^f@*~>$%WDRUBCw)BAEaT5GlJ%@J}JQ-%8@G>X1olAc@eRyy(P;*&!;x zF<|Byk%GHEh9J%3k-e6me|MJT!{Krs2EF`_j3)8|S_X7+(Wdk4)q&(aI=wwC|3V7G zalE_n-oxeA-5$)52pOpB#YE)Ntrxb38{?2Ums7J6AB(0o7E36OaTdSJh{+I{<2Y5J z4qxQbSOK>c*4Z_a^Z7<%zQ5A~vL#XRYJ+n}TtovhD?ed>c97y?b8Uoxz0sW`p7RjH zo&p$Fy7DLCW+*i#{W$8$7@w>H@4V}B!+AUD_V>uq%;*#z)8wQ?Hln04OqC)Yw!}b} zBcop>trvKYO!VNtL=KsDDsU4NpjhIv=meH}%_$kh#X7V}06yhf?+Z9YvAY(pPS#)?dv0iD4N z#ENF*aqG6WH_Vi*>jbsCRUIP$z3WdweFy!Q?fo}pT|nQ_Sj5)G2_PWGFCid9C1z~p zV(esYs1FdfF|;)ThF}Azn%nT(IGX?MT*TbL(Mixu-vQ_z3Gk8^=>OQz!Q9Tt)`5^7 zxHR?UQ<2jDBMCh#6F||~zzOJ-3h?5YivH*SpV@!~8#$RdYBKzsn!L<*|9pu6 z3Or{9`ks2Z{&M!Rf7yWE;Qw3OpXvWBl@1shfc59b3LN%dwx8!f-jx+t>dX1h(toZ` zdZ~jASm)1_z^gAQ>HeDMkNoUE<2V1h{`Z=IlK&|su)IHyf0v%&r9R-s47~obf2r-y zbbsz&?)vBTKkpit_C=zX-~QZwuk$}2ztr^G)BPEj?;mr$NcoSyu`<5g|I6P?Zs6JP zc4I%^`5&DLzoQ}0(KIl^0vkY3-%iZf+|=xkGhl-OTAq;u9PNPKr~yu{wg3-f2U~!x zjWNK)+{G9m2+#)@0gM4Q07HNfz!6{$Fa;6<`uO_g~q?05SkofB?YG%GnX%U~Fpc2rSsx2p|P;1p2%)1E>RxZM5Kw zUJid&YGh#bQ>;HvewIQ3c=?=Oo*@kb9Vj|65EBFRKgL_|9dRfsgT!z=>V04T)t zjuMg&A!OrsN(4(|lR#}OATu5EX0}_AKDu{kzaG8EY|6JRmU$j2TA53hpLJ58gWW*I z#b@GS8zAP=7Z(xmFz`xsu0|NA%MF6tHQ)a9)bLOr*B-9tNn2JKgcf1fv1>GX#9M@# zhMAvfWaS{?VzGYzW>R}O#MSlm>Kt#&yfwnC{Z75YM~9aGJf;?!mVVBB7h2q$7D;j= zMo}?Zabp5y3&Fu2TBEurPg@{a(n3H(zyc!e5d%G;hbe(A;bN-c7FyiCC`>yVqd|y_ zR$69MM%)e>#xX>b!`IHCSdwTdrA{j)o{g8DmYM$TVdNtWxZpEtT^g#(5^5_a6~sKb zm)gg60i=gIBKa&a6>l!#Yk_!4CsiOhI>i-Ln=+U3!w4IFx)h~iN6SI% z{4QUCigBt#Sh(4F)G!81Z7Fxkh)?&^$mK>?BjX}*dAM&7LAUKDVAiD$&(yQ!i|F>r zh$Sb%?n8Ch;txC3=5l)N!2{gGuEX;Aq(jd+*{ac6KpiV5tfShY+%emf{d+@e)&(2= zrRe6go#{QMY4fZ}^MYd~|Gi*Dy;GM;A7pVZD_3hpU+fxp2KF@9hni)l1e>e4u8Ktf|9hw(HF#(uZNU!Zak-S*>khbIG@ zUk3KHw$Bx2poH&10AJ1-*4MC1KmNEe9Dyl13fR;;zXa6b$Kd6eagfKU2AifnyWD#% z2?jlJI8aWD*h)~DutZc?@rGQ8_%ZX`1ic6gzsJ$%`L9g1lqsoH4eFLAJwL?0+^!Et zx(JT?W(UUcGMc_sg)UfY3vOKgY`K&$(*|uYUs&g@rCFwUi?s!pGz4iU35_v4*b4>E z+BVm*yoFosl&jDei@oMAFD}vvAPO9Eadu2uf_RJQ&~`YZJKAgzY~%z{e_M&Uy_$O4 zfVnhw2u2&oPPYw44Z+%=4ipk)EB(bV6t`sEg}+QR*>g6$kcrb$=6>lcHnd71**6peDXssp0Mw9Jq)e1mv$|zGd%X^q z@^(vIc(}h_N7u6SRUEcQ!~PgQ@*XHXA>J3`VlXcqP%Mt`Ra=DKC_+|N@T@Q*YwWp# zt!ipDMRLR~E#plP%{QW7Jq#n!c$KX`w>DTmkv<{R)Xnvcl(%KSuhfuxZJX*&Zj|b*C^!Q3F_e` z319kJ$weDLq3+*Bt9NoO*GriMb;7|i@ev+N8_^RS>q9Vm;wkNSXpbW5T2#uN349pz z2=h;|sHzy$AI0VNU9HaFwJA**-PEgylGo*Z2woRH<{mTdM1jl24U$L5Byf2`YW(Jo zwJUyzej@|oVAqNyfQ!iHK0+wg->hsr7HBnr#Y`Vq7D$1+M>b*KNs}3sy@;H=}=xeZ8 zm?IfsD!@?G1+PL8a&$5=B2oifI+6NTnxkl;EBvFkdf*k`ZGkVRP!G4NG+%vycsK?D zwG!R}9gV5h~&cma!xjsiX}#)1d7CQqf@}KbYSThQ1M}=5{C!XR@vA6GBY(}aQ)`T!LHdrkN^QC*(l$Dahyn+JC$xKLB`1ky0M4G_#esoL^9Tq>Ep z8W3bK89d~HnpseiE)(b{@F5=}{>bv|(C>15q&Brtfv0t1@p0eDR+B(=`E9rZHUB7T zQZrRQgBYT32UuNrx4@V9UK!jY-yCDjhWpPQK1CSsgPN^)W&&N+gKAntW{U%i!;3Xg zxafqF3)kP9h$0EFz4u#J5@;CR+~jA7_yM677<_^!>U-^Ol}&`}9XT>j^+rgwsbJ6l z?zTZhNzyHWQ5_7)V25EzHpvELvY@#ibCeyoeMNUu^VgtFX&M4d~KQnUppUnkSAXG;%AjFO;gdre#1{0*LU!qyIsiHoWvv!pcaqurGG2DsOgdFiQDvhA zwqYKs*W-IHdh{4|Y)t)HG1Ttj4jKxPshGXu%CNg`0R3_2E4zT5I#t3w9e`i~adlLH zKGu#-kOf@1OD`51iyb3}KmpI$eIDzUU(VL;sOfR+VAsH7!0fTOYl|R_7zoyd9YstL zYg9Svo%{Mbji#g1y~bO z1KgDYuxs6t;}EZ<#&&T(#ftU68hp#c2fGMh>9=l=|ZbYIQy`YshvaJ{K1N{CIeC|hN z0M`tapfy(iq$60!m|fQtR!AsWqQhq)%2(ptVJ*sh-aMk1lH6}TsdJ85oVuW=nZ3m! zj{@UE5`_~I#U^fn@FzCzCnv^h=@=AyCn`=eLN|*rQ3)pbKnDl8u^N;JK`M8KIH6ZL zb;LM>{kAgAI4$$qT z4ciP94z@A`%0o9(?njQVLWQVnf+ZWX=%2!5<~~V{Yhg7VZAD*|uGF4xzFU1zkqNtU zJjB;rySx=tm8~i2L}^a#qDAJZgJI^J@9;P>=oT$>!i&Kp+He?{DHWNRDx@r6f8%2g z&j7&Cct{Im z$cUk%l{?CQgEOIAt+QG#eO-qWTJ6oQtoaE&(j~fyj;4vM4H@ZU4@bI?P|tq#(YZZD zIT8J0Gj?!DF~l(3APuhw4Yv`Z!A_7jX`I&Ucq-E$lu@p+zt0SB;H;tq*h#R#cn1q` zHI@}t3s1T+P`GI9^dLx()J&WE_wJ?hw%f$anz9gfF$aG#oAgRFu*ioOo2#;vv2 zun;Jl$FyNT2PnktY}R8Ig-j%*rF=rS;b#6jPEJm6eB0FjrGk7tQGOGOx)G zN3U{UszE=<>&%p&st?Q&MWM{%g>8XN!*TuA-RKuLxh-Nj=EF|z>*LXamN<`MpT%hm z!^{&fWF6$uf;9lkguErkbF)fI>xy@8Eb>sFjvXsX6!bX03j@*7Fv#liEJwDjm}-dQ zp0zlUMAZ675j=+Sf#`r4_ea(n1FkJ55Ppq%N$6d`*jvSgEnN%>SOO&$vuL;TZ|nW}0L{sA%q; zrT}UyzrU2q7scEyA29Zc`{@gIO@7sTf$;~s2-Tk#+)lm2IdghUP3oO`?mM>WDl3bbBF=OUJV z49O1`vMZiST%1B(y0Bb_ZaX9EQmdLu^>EyJbQI{`)V&ZgCq(U&T{*o4?apwtW8*@n z$6?70JKy&U#OK~?+30tEeGSKEOP?A84mh82%8>O9U~YH%rjy#g=woHghAor`KB-o- zX2(uz*gv*rTN9~IrmF}}Y=`iMdM2W8FR{L84pMVhKwfh)OqsVtzQ}`OTJ}0U_I%_J z=90zBd3QR!$dUA6>DBek-r3&#{k=&JGHb?qz`ElXs0Na9xeO2V2}Rv@tu?cN)4Dh~yg|9S2kw+!m39K!XAcD1v()iltVzjySz*de3%V; zV^N)#P{d@sG|JIJDf4)=IVE;*rT@JMZo-b%;ha{(u+K7cP_~}$RIp3j2!34a$CpUB zg_yHBtjn@HydXYx#AdS?p;k9-Jo{pOvjFf6b!|7WhTBX{u@i)w)W}87FXnw1nk>Gg zOWIwgfFVxOZpAj@HVZ~&SJ=;zyM#tj$|Je6kh0^G2wIyF1O1K&`=n;4RkNo%7f$?- zIgYx@@e(yyh}EylV78LJ?MRt$_A7Le#W06olH|1RbQMlf#=%ACK&n7kZ4loV??(<(pc+zEZgpBx5`h-?8=6b+V3aJ zn3P5$4ZYIEgCww~XgMO}`ANt#*h<#G@Kn*GJ`$W%bdD7?)gIyviwa1C7%OpiYHZQG zxWX=ojddTDV#_0Yq6NDMX>XY>w`NRytMeeXx)}88$BESJQ3n|2jw5ovkKt$5P%R+u z;}Fd_J17AafwMDoqTk#|lSFYYJ<+fA*akQ7!caIPK2>yT?B7FH7Y?Jf@f<7UnkS9W$qn@LKTbqAZu&?0d95sjzH%mb@UEjMhkS9dGdOwm;+M>9OZao zwwy#O9!dl1eb#4KaWPR1#-Tn$+)(jESf>xS3@XSPEP?7dufX^T&CHr{0ylP*!{1|m zz?SQFgRYM5;fP@2KCZ6CEekf7OIa9<o z@1;}ggYhW@51z*7rLfi-$z{vwqh8@=y$)LVtK$zgn#)eKn|aYybKFn*GmYh8SyV+k zHt;CVntmX!h+K0h{}nRK_=52Lf$01d8J4C}bhkFJwfY+@O!&)Q`tM-yKViYYNRz)I z!3=)|fdERj$~Hh$&B&PWC*SgS-04qTn3bLGca)LwHxD0wkxfXJN<-hyL4_=M4Y$?!ubhalViN2V?`(fv$xz0wFxrIvK1SLv%hX~Z&VI9xR}8yQ7xq8j?H z7FXXeZCS3UI$j-ITh#o^2KVy#{|X(`{RSKZkN*lA>$5Tf^jVqz4wBOSfsiu& zge?C6NC|1^nHUM#fosXw80h|jjxzqyYJW#Z|FQl2GeD{W1WNz*+W*dW{04>oEcZV` zp^S_`ob`7y-A!lhWn0 zGown2^vulli$RHoJ9EJkYn1Gy`eh}Qp~|Ug#fNEBPKG2$0F>VV64c_-2L;dov zQsheIVl`4Vlps(qVeM63HA;hQv3(pe_$ZX=;?9^gUw$;Z6rpyq& z&X%6&p@)_p+>f6J{HJPqHkH6l3z_-!xluD1==}9Ki9x>z=)CRWb?{kHJp~ybT|OG- z^|3P1x}HqCHI1K@jch;i<(|FuadGwCey(z1-e^+hRq?_wc{*Jy2-?Z`;#*$ry?r-4 za<|bH8D`b~ks#zr{ob@Uvi88MmeJQ^=;qNA0*4RS!9^c`di-Sgun+@(?`=8%fGa6X~D|35i_I{_7Xh^pfk(^uKEUv(*2|9>{wArFZ^~|NQUr zRjNR`Ngv2X{l*qK0_h%OAm=0mV85PV4V9 zlq`^WlKLwdrSSJ2?Kj$oo#ppl4Hyab7wtn&&+<>S592T1^)IxK(7$S!zxQr5^uR&+ z{{;c`v(o?A>j9tsKXAZ*>Gq72;FOfUqqijtE{3tdG1P}K6JNt`%0hj+k@H~|J`GaJ zJb2$oi4GcI@W9^jiu>6k>Xi6~T7e(5=3)*-F+d@qZQ`tv`ZP!=NOZD?jXU&RnR?mI zA>+~86|95SX-(Uu<|}s7jMnS9m8X$8>W$;RO6vRB>>vHIdAY*WtQZ=@KfoK=<#+SD z{KL^qR!oS-zZg|NtJD%CWy60JDs8CW)k&2&(mQ7Th9|XCQ+mH~4pB>&cM}%0rboC4 zyO+$6B|Ugkb&yURCMi)u1HM0TI0I)l#(smL^Bu~kz|9uqn7PWPrqV?% zB@;245t^#lcr}NCVfQbvfty_d-EJQk0(!Mf>ePy^+KaGZ24L9(9VBJa8_E05qO(X= zDyuUaa$B0Fti*IozEO;X(NIXp3bPDWIkjJ>qpj(}>Ie>e_ z=j;6Al+WmWtsQlJ>ixts{WInBMzLL-c&#?`x1f{#8`)d=x2k67cdyATnU)v%4?$F)vWCe@J>E5BWeaea;L>jy#6%!o6kXRihhP>eYhAOmxQTA{2()9VFbb zryIa}P-VL(vY_J+VzwkQh`JlzuN2THcr)yc%hVl&j85ZEM12q-P%J`;ewr*&QcxG| zjpf0{wqNvF!M&8AL|J=-IiWbU=g3I5kzJO$D1on){WX|Yo+zUQJq+tQQX&eBJw~Pz zLd#^H&}m`~$Xs@uhgLFtCmlgLe(Re~R*^w@PqlF^3%k#b@Y6g3ur?$3u-aT!`yaUy z-!zi*Vdhi0g%X4$5XJ?G;)zK0PJMVMSE2_|F*mpR0sCDnhx#^@Xp2mLGnj=~@FdRb zyiM_fdha12`154yP?uF+lgif+B$&?YDmh;~)8=uEK59>clxTOTR)xbw+% zK)V7$y;sRfM^5@fty6twN^S4i=+#WpA3zqR?IOvD~qwY5Q^n^W_ z3ChtH$PgUQ%t?_xiaWNG>9)$r`f(FFc9s39WHcBvKDu}Tt zTqvXKrIdlFgm112#0aO$$4b0sCpCS!3@3%>^U5`Ljv?A;5F(yFaK?Bx9J8+>v z0J%AV#F#7>ouJw6^6PS>OMgcluG<%5S3igimN~K6SNHhFUc?P~S;^F_fjji>Jb8@h z#7BgXjD&lJiK}KR2DiD=meq_GH+JB5&o@tx8Gfyo{3FpzFyKZ3A6xZs$6Vk96R2#& za7m#N0YAQ%Ya>-;v~9i7L(Bf5ugp+LzwVneNOZfUcHib2TT-yx`2E7h@A|DA$$i{{ zi#qP(Ox4E_UxgiEvLx?JJiRnpcn$IVDU3;Cuh|I~2Ukh&M;mv(*(&$J2%5Xb(Xy0+ zA)S_;eAY=}2JmnY$@^9L(BlD^?itVhtM|2G#<&ihfY(D%+|?ZRk4?36XBn($ z+MgywTN70j@}}f_>eoL)nm=PV^pmDP(HzcM7NtoY-r4p}dadRXrsMMty6=GJe5yC! z3mj%)`2Mwx7Yrk);W|rMpcPK=Ep)UMB8y!qD*`Lf|d z0{W+O4{a8=qG1vbS1#Y9hS{46GO9{@#5F5iW(KMr2J%&u1k3Tsd=@~561HfK5U31% zhd{npKjztb=kD*?^1v>po3b8!22KHyr~2S0JfGr^)B8FvFjLd3cO)P9)#mE1WX_v8 zQz8afVLt9%!Y#pg0dCTD=8X-Cr*vHT@qS2^5~T!)d&0UXhN4?Ri5?{#5X)dK((Bav z@vm%O`#Rq3{6KLqOp_?pAiTM2cr#@n!llS0 zK1;YzN!RV}#yOS~ey8Av`ZNvm;(4xomc=m`Moo9N1{|_O+>}by&z$J0vTYUVdMP^| zP)}#U?*#7Zfi6rWvf9%ArBdXYjU^#CH!p`B{&n29Sa&t$?GZ>-$wq=mZ;9X| zT8zl9aY+M5Lyy5UW3#F0t||p3il<)?F|`w|0Us%PV}tl$@*Jw zu9iM`1mfrA9FAx1yPH-V9IWrA(@h_G3ge)?^Lwcy!gbMb+R5qnmXN$3R7!Uy8=13Y zy_5u$9=t9#$yW#E4nM8IZJQks~53ny6d5s7>--iyq!O+<5=KZK&w-(;~gj76}o$q&xz6t zZ=zaFdLZkv>_V_mJI}qx(ym$dhI!rg;^%TY$Fc1_S% z6>-d&ZeQ&j>cp|BbbPSaB2nOJ5|jJB`%JD7c22prn?H^~Hs}7Lbl)P9l9Cj6I&sgvtoRC~Q^+~uF9sKATL3Ne< zpp$x~=q~R^R)cVM9EVV5`Sznb#X-gF(Ye!U%9n!cFy|C9%JpRKM{p-=AZS*`?j&RM=DK$n{ z22avSk57Gz1IbrAQCT5KwIR<$f^CK4EKsBPpq~l%ya(|*myKHQP zLHOEp6B3YtRjn88mxDP}3v{JA=pY*raIZ2&`0;9?54y>@I+~XBU7Fa0>J&wnczHUN z3JW;~?Ba|iLv-}yWHm$m**lXIUU-HqZg?L!;<0^<14zb{^0Y#(cRjI_rz7$?O>ldmR)FF}X!=eghM}9lX2oNRmi=x8_C|qf+=JnY@+9bhu4xC)B0- z)R;`YBv^h-aE9fNb0a1<4Zd{B(JQRu6x|FtTschGMR(9kHViH4Gx$M=F_U$S?(#Z6 z==BVI)7@tf?QdS^u0{>{w?>7J8J~lagAJd+Z<*dV&rBz(Uc|ksm=QZznVR_~M{UVZ zjO8V)Mskb%7)D>WuT5Vs)*xoZj}*p#;9;tx(<85bALfuw&ed!2l_Hx#s;fT~i_BHx zSSu^x?W-;GI3?qXwU!U(-@dQf4CTMQFaIE}ttJ?~37u|r{{1ShcIPwab({e~GF!JC z*;x?jOmD?IeBU2=HE$WdF>5sNkMtOvRsk2HD6!BJbg_8Qp7VqbR$%& z+$Q2mUtH;rfiH}K&zoH!X_lH8tavK;_O`^l*H_`>NMH)ZYn`+>s*t&1XoB0`E^)Zv z9k7$$ns$M)h_=gtVu5x2+C&mSy6r8r0d~sLT~?diDs;mqfJ2(xFojiEg`Wkjuut*> zR9sQL;G$xZ5}lmB<3yeg(R<7k6~1SU?ExPijNqgZ5>%hfHtqQJB0KW?rH(_~MsD~< zxrv4>O>(SFj_w{DWGiAdw?R39>}po|0SkO$fyNJlYjCUTQ1^&;xD^^8BRlU_<)hxK zYWtb)*_L54o3;{QgFEeR9vMJqhv25c_R(mJi3e8gNq_p#+s+t?9_ulqC(CK~S%k4f zminVkPVphb91i=6h7SX}^(%D96E}V<#igMj_onm94-HfHJCu61aX?4KHUnsG!kI}2-DH156~tJQl0;dEnnL;Id8^R=}E0QOYb=Qp4r*Fhc0P$!M6K3BwQbU-#n-(W>@J8@eqvp7 zM%T7&Ei%c`Oz4aY+LzwDF;uC~5)zNQ*hLJWA3*u^9l11r&#CexOFZ&_7>Rx-H^@pV69w(>}fH5zhYa627ilZ$!msnaX-(hYGy zV(^V}8c(m6Cg_lm z(XkR1F;Dz|tbQCcXRUok53ucYNw$2;6`9o@E2ot6DsnO^X!k;T!gsd{oN(aGl+Yrs zq&O_hfH9z(4l;-zeyQ}xQjZYPc-;Yj6a-BT79gc-;IyNaGnemVHa@4aTUg~n*JQ-5 z;m-%HCjRV>H#MkLU5!eMb*AY1|Fn1A@l_Si-UbLFC`yqUgJL3bbK5!hoCpC-C=r54 zklsQPAdp592vtR?{-moEQA7n5ET9NVu`8%pQ4vHDl`1MI4+RC@cX!V@_w3HO;isSX z{*zzHy>n-FXJ=+-cec!?E=_-Z#1%K4+zVsziW+jqV&bc}Cj-BUL=KC+}rs_=uH)GqyJZOFRd z&km2Af1|&~p*E){$NhGsZCv2%%|GTeG9c}yL{aaquIv?p& ztNoLj$85j8#(i)zWm6aGhdr{R{L^7`KXg$He5Em$_Eea?Eb*q_1d1F zJMN#`sM22p*ZtM$#kU{)vSdY#hgbeFN;9Y`7bM92A+LdO>E%}f2QXm;NVE7$zBaU^HXFEjsq z=){=xj|YA+p|s1g8~W@!_|epT^DpdCY0;^fPoAFmpGWQ;vhG0P*`srgb&H!ZB<0}r z4Ze+K4}Ux6_g!n|6^;F|!DWSiWDU&xDK&G;GiKB72d4C>I`!QK^NwGZG{4r$uAf{L zH`SQFt=~7J{@VN0;o z8(v;~vhC18JMyx+;Jhcko-sDFUGC(` znO8Qtq)*@Cg?HA--|^jn&z`OO#E;9CcD`p#?!gN$U-IaZ`0*nbCCu-2_XW??`#kme zwEI7ua{cnFr?(oI{$A$ME$<$0czOKef$HsF+ZcZ0wR#_a@_YB+Z!g?_y3&FT$IY9k z=d}1Mb5WNSIsZxetl5~zR)71`|5LWF@cMmis=ar3+UrXjI&$=$%P(jgf2PSr({|3UbX}*} zi-xzZlUnJ9N_`f8cxG(9VYjV*`GK2iKmOI1yQaLf`0dg!&sI4;V^XL6A2#hiJZEFW z%+h5w&P;p!2qFwYSZlIXFHvDXziG*67NjSHTu1&>7ze=W75ZO#9d#b)`yciex6@v z+-G&}TYS%~{Epk|3?KdJ18cY5RcXbs%(|OW27Ft8Qheo3Ge+F^dbe@&&P@AtU!5m? zGuIbS**zdP)T{b~m#n|CcKy;9N?xdWwBILh%)4h$UYGp+D|>x^_+IV79Y=Ss zIb3#X*pLsWZOqttV=(yqWTR8w@Xd#kjXLFb);YA~sood#4Bs&R_`^jrhdx*5_K`2P z`s9udLnoZN+DSuW!yYXPBlxG$X_%f;G zsAYK*y6?T?qF&Yhymt3T^Db?+u6g}+H=nvL_{02U|1DFVzI1)9C6x!%x?^+qf#Xgk zeDusiUtD#p?BMm^Gz-1-Q0=B~?*Ay9G5y)Uy4_jQW5KD!mUE7ePyTIer=BU(E_`Zg z^XgS^&Ak7cviXbO_$6ReZu0S=>a(U+DchJ_HszD$@2y^UX!7If*DdYPWYVj3DnC)b z{-Op)tEPVvIeNv0x##zdpVa-%Gml?6YRl;4yN^xolYHN?xBC40bB&*l7mRv-$)Wf= zQ|i|Fw)(}_r8MrctI{>vfwp%|y5?AVy*5>*uWnN<=aDAIt3;06Qst?Mtt+3tx=qG+ zO|!1aIDDvh&8(~U-P<(zuBNA_?7HrA-`?kbefaTrC#7HZ+!u}7P2ODhvo{`{^m=4X z<1KAkwMaK+^s2P%k7-Tn4?A9G*~9lO>c2Sewe}aJf0~k@ExdoypjsWWt6uWV(dPa0 zN4@<`w+27VeW`PL+=5A+do*eG_UCJd>XjdV^U-%MHWpqwyJMe)A9h&t#P;U%-H|C;b(gDcm(lXQ38-rXL0U}Dm1gVwDG{$8dJe8;zK*4AeN z^CtcB=6iGYW4?0zftue1U#m2PjvFo+r75$A}YV2Rs@;Ih@Q;^GBK8c_QP1jij zO%JN45!iLLA=v6m$0lDMHV30yeEgHR71otsPHTsYXuYvj*dCjPnb<7M$8KUN_6XTM zxDL3`R*t>GV%#0e#x=H~*c}{;8*0OF1+6FUm<`57x9AnLapK+_E?DB$TIq-+aW~Go z8P_9eRAEkTNojUbNp8|$WLC=MH_STXnp`LGT`<+lwci-foNH#9Yrhe<`dS1v$O#_| zza}4}@VI2=vUv9%qkY9p3s_go@WJCOg>%I$%nrpkSIl_gdawSK?)0y}v*nKKZR&+p z92Aib03m0_xwhPGTZ-B)`^2E`|3tCuPcnx6P5iZRB#WeHW6o)jqhW_xNxfid1u(A> zFra*x(lAeLo2G}hBapbNZGOYG8%K7o6neq>s?15|;4sVGa@S?-rP zvGbKZFS}#>mahtqjr+LodcEP#4-LDbZ{p3>5{6~G{8;VF+dbK1WYcOT@pqLMSLxoT z*0Q@Q-}>Q_CK*p(FucZpn#}Dn;_VJ!bi1_GuJ#Y!Q@O#)^v5!?tDk;Z?yldx&H0V5 zd}zn??13YyEWf<*{$&g9`F-`p<=f-?e>88*);q7?`r7r2bGEi?S?Be_>u0sCGv-iv z_1d{hI$X8j(dwNJz2y7tqhRrtwzq!%{v!)tytSa$r#}@QTX^r)ou^*5IroqL2d=Jp z+dY@~2TXdu`uACr&O7^$Nr%H<&${{QUW+%py6u(ArfBIkM*6=$@!rPrq8iov-S_s2DgK$u ztF5~3nvttlANi@~H*1mxj@;kvr5__5&D$rA|EkioS#=vfdF!XUIzO6I7}^`xW6J!M zR}Eft-?BC>-oNv*I}RN_dUE>d9nZe#t5P|5Zn(i!jn}KT>auBF*KULAeDiw0cAc_b>i9ynL9@<(|AMs_e{}C-IeUIP zqAz^*rVH}lxuI9m@LdZwBo+4PKH!(tcMq@HeqNV-S<_Rh{+LiJYleTqq*7fVCXdb>SL;m8Z3X9_&S<;OJW}oR z(fy~Cecz?am0Mmc^*4aOIP8KbqM6_UE?^Shr^M`#q)^w+~qQb;36z z6T5Efcb9ST6H_wxh9+)4@qUL@nGL^OUbDDr!`dGbFNe`S|FigUhqG?O*?KwW76Yqs_No`SYi_w>)s|57!m7Sh#d_N&d!7L#otn zp885F?Ul)=PE7rxa_=JzcBkKRr0T>Cdm8Wl>YHy4J=y4R(Tp$enDo;2ny=p*zVE9; zmyMr)cV3m-yVR?9>A&})NUMtA|GJj#lmU?xX_Z)lg7USN#jd5?!*)pd2ir`P# z?@WoS@>kbEUyRdMh2L1+X3zB#>NZ_i18cea4|aUyva=typD}pF1(!eYPTvNzhrQXs zzwfe~M%6|g{dmLK!h`93r^WsLQiCVbS|qJpbNHH{_Wp23rF!RGo?dXd=d99oO082~ zPHEpjm>;IaLoWQREdKK2KKRQA;9`x zkD&=2LagYJ76<~w4_aEFa45tI;HPmNkj4mkvmB7Y2zd*mAjSl5Y!sve#M^Cyz))gX z`jd*MnhJyu^LTj|TA|&S5p=M}tK4WtSCVW$~$K6e|QK#N5%r3PX=#uH=9; z@D-N04@Dpe(VZPEgE8Tjy&f_c6B73!19}wwJxU0^MAwgkP@^Wgs@2s)1_Z6SEk_TT zkc1}5K4hXnnk4&>i3Vvh_a?aKr$D2UFu}bhb8musP3GPN_nIVojj2Ny4#wq`!Z=P3 zlaqWIE8U6$Y+u$vW6p+m>ICsQVt`-Ar@4NI_Yp?SNqDD+mvVt%zoEpCZBiTyEeZf+ zHOmIUIoc*AKsxL?WSf)#85%&gNm(HDw~%d80%RHnK$cQC2(FY7T1pY1pr2v6x!2H1 z0djM%p|1gCbqGO-js=jLdtfmpETsr6Ey#+ulwyJ4Bty1I36Q~9wN1(fnE*-Lo9MeC z+oS}Rsev!sq&P_TGbU`45+DRz0J*v6J|$$El#PXE+a_g$7!z*p;ZsnSZBiB%lY}rS z%T9m=CUiIV+!=**x9s80bzr$=uZQ6NFm$>s2Ouzkge=@i@){$4IJOYa7lb}yf#CH+ zx?A=Ue;88L-P}j;23%qYr+i&yF<%#oSlwBa6%0bqNQ3Oc!Uv#mfLb7!4M;qxDUeDq3LcWLYN7J42k;?29=O_(Z`lVm^BEGrMtKf z!!?8qiF+6;Koa+C!UC`8Ce)aH;jsi)SsLqnhQz(bEZUH`*ECj^#J#3LX{N-zhM@;u zQ7T?X@utMR#`?A?a}VztG9~VHjPW5;;vQ2lfF$mj0}Gj)d&&JV<~`kC#DuL0(PEYq z2&nFl{~nZ0%EXuylugPs8OYr%!>0MY<*H_L!{0CFn@ zpa?*2r5KoC0_0W-KqyNxDFbslfZR#}2*pb#Ww6OoP%Ov=!86Cg?UI%W+)$)rrg z1OU0YHv^1&$)o^cSZ>(^1Xiu-zVJ^bva|u@mOVh|mDcp%!GgE2!T<{dFAb2}a!hzI zfZW`}NYQQVh=6-BfMET0L?A#+k0CoE5Fnj-3p*mPKrp$G9TC_dMksL)C!7d}?1(^suo##avLgZu#2l_25eN{xH$X1#5j!z|Zbt+b76PG=9TC_dM(DB}5F$Ve z*%5(_1p}}n0viNL*b#vZLL2RfzydMHW=8}T2<98IBLWM=e4QN;2oQ5%?D7))x#a$s zX1&}WTpkAZgmeTCBBl+vVp?vX0wd@)Du7@Jhz_E*0T8o)w^0GaoR-_D5OZR7f#=sa zVS12N8a5Dl1}&pTJIV#Nz*>VR1Bf_n$ViWkn* z0kPsmm#{&YH(>4{aSsa$T1Mqyp?J%v91x1PjLHF_c+0445bTU4rDKD!17gL?+{4a- zmQguatazFG5G!8h9>GG;GAf%8T_R{1l>grxvl*5+VhS{Jk;38(fj8z!w-A_`>VuoX?XfDBV<5nG%IS`kGQ6HYH^ z#S|_eT4Y5P4p3u`#fmFjK!&Nbh%L9_xiDEE8eCyeL>F#X$`z!z(rD=zY!kZr%;+Ri z`YE6)lFexYsv>nXJD@5u0>>V(6$xL@yJZCaC}1lx3e*9#6lntuUXj&o2dIaEX*Jsd zBB(L}v`o_inuxLzF*6bZa)8hT)|Oj42fBRU}xZ3v-QrXz?!9JgnXtC%<3WEkRtq-p_xjSZ%5r@^yz8AaD!a_r1AD)DMTNdzy?TLMm?S5MSM&$|Cb?)cC)W|^>b_wC z->}@Q94HXAquv}}T2c0>0wgOfMQuVF96f@(y%86B$D(py_hEUZ4!$qF)OSnC(5%9| zak)9575zCQ%o>V?1=QoJDhoT>KID!aRqV?u%<-|j+$BZ%zHUXM%8=}pRV~CT$p3+y zglTc|esI;;;g~fICVN|vvyRJSq7Zz@?s}IAi70Y$?Vf?UyxUN17 zZ&viihKHaC+oW-Ym0*o4X?=wQPU_XWPaOQFhB;^9sQi2hpBYmWpZ9(nA0z~wd7>yf zZ$?Gv%o922Vop;LI;-A64~W)rd=@2yz4&3$b|{37?FzzB65*d&go7_sDk?w(z}EB$ z0n=KPfE$!UphMY&fXT!m2ndZv+kkLHrQic%ltKg1u%#P9A*nea zf)9s62bY9G(zHvm%ote*A_S7IU805BJT%8gXQ$Poqi}{|pjV)1uhJzw^IpXZXH0X> zDf^P5MUZkX5=qt8*&No_V%Nf_6i%zf0CJ96_|(H835ZzlTr`rpU7UFfm#;25Rfq_S z*AN3;(zJ}u)^$|N;B$%?#cPOu2)?9i*@s2o774zjY%!6oh&A}Ljrs<<21)ToK#ScJXE^|tqN$Qe(fHFDxi`2_J8O7 z_)II>p8rMyk|%e0w3v*EX`54t%f(heBH4h;@l-$}nSjf+RX`$HfXn|>Kq5JGmyf7` zMAE;j-&a5)tKT)dgRfvKfQ-~NHx(j141xf*u?T_W*;#TX+xVF`0+WP5(z`;y z_LWouzUJ&=Npim$mLUj%q;tlf=#7jasFR>e`j*i#@)LAP*D^Y0%miK5vzr+WS|{kT zjwN)g_YibRzY;SV7McmV)U#!Dh?$@>3`g=3dYDd;#fp0jbSzS+rSl1K40LoMf*xC| z>}(Z5kF8a9SdO5_)+*cSC+IP>iirg~TS3rcXqBO3eVU-h&?-a6UI9Ump;d-Xr-ov; z!9(sqXPc~~bg92ajewzh_yfL65uyryY=<S}yo~Q9O1@j-g^wWB%e(RtJ@N6-mxrqO9!m^-wz@*vD|J{G|5*HBYqJDj z(yfAzeHRtqec>yuuWJBiu9a%beXA&~udDbN=(2M8nzbEMcubqc9*`p)*AU7!4RMx% zvM=}AXa#(!!^79}y(6z0Fh^!b4~cx_jvK9jZ6Dy=1SOEWZj^vYhz2@hH_BniH8%mi zMR}Gv1icn?5_e^3DXdc4~-%p7W zM2CO2hZyj1&U~*WN)T;y3?XqbI{1nmd8{{yy*7uyHQi&&)9f@TX|tqe7Xh;)k69Ss z+3~7?;d}TAUSbS(#Dj2B(N4*F|g$id!;t7Q`4RhB4-LW%qgh2A% z?ta81#Ugw{QL)Cc9!e+_jkB&Bjp{v=!S@7RJwqn&YPO>9C;_)Z*cjnS(RY-Bb#IS_ z3BCpC$rCq18t;fBsGbz83Y=6^coGLxJqdUfUKEPDrB<*L&!h@j-B7Pf6=5t+6M~r9 zMkCl^Y(k(Yn{ntUn=LaC0>*=9t5E~HW<>}pRCd6t5wfyfyLqU>W2!EW1&*@hBH)eiqL7uXQqZm~P7-_8 z0j6-Jfwn@{wyO$8KqClo3OQPXJiB4{H;J5NWy=KY7%3r;9l1=vE|jPQoM{(JjNUPE zkKst1e)c3_n(&w#h{Mqi1)=~~4IT?U;^ed!KC6J;h9GT_RIOA%Lq&1uI%Wl41d^ha z3UK6?FeLSA7d~%+7lEW_7Xb{3Nt{$5saeMNn74~_;7*HO`&_KM(Q#265|4q;u1To; z@WZ}QeAax&h}c~{f-k#n*Nzw%VyB4-K?N%Ih>XR>LWdz)K)P4?6=;~foI&`BrD5WO8HoUBjrm9mihOXtBbpr(ejx+ITokUMSgKHGZsEw`4G1@z3^EV*1QNR(6Gm% zp}6oFvjQ3#i|e4V2*MtnQeF|0RmSc{c5gs7TxF*fb%KdbLsmOP50kq;9Pe(Bll^cDbkSm|$^-pH?9a(8@}&S2vOmhq(z@ z6bWaNA4Coe!xD@Y6z^m}0h^cKZT91*J zAA zHIqZ(+FGuFMDpkV%~3Fs>dC3aH8rcC7O9g*o5D0g2N{tm%BjKC4u($`-$WXz82BF3 zW07Mj20pvgWk-y6+U&d!s1ya5=RLl4p_QO_mA5ePrh2(93I*bl!z?(ieyBQqNF|C0MVZt+rnk zSD;^(xsKpVn~Q{hG1|-06p->O&@aneLGUZ+zaBfAB9CAUe%QTN zQho*c4bVLtk%7=DU+FKH@T%qWqyY}T;vc-qcj>pwsDjeII3NdC3$N(9bs!*CshLS> z(G=)mo@K!L1y2eTmc<4ANjxhon;oDS6vtH1&3d}LE4wD{rg!yMK_9T`F}r5;e9a-c9dWC<6QcFn>Y>SbVpAbQX=s z$Supt$tufANhvKW$;~Rbv|7v7V~TONJ+~}waPH8&!dCIWYlqR@{q5nWM~qugPTeIU{WyH0vIhy z#}<}ljcHL>+Ef%`my?!Tnq87tT!yR?aje{|!AMHbDn6c7DIQgl&uhua zPC}vzo+2U%c|Vez!a>_ICp&paQAt5oSxQ!MaeiKQ7ON$xIA=)9r07r4iWq)2G*MPm z!rSRo&l{YXJ5q+S8W_j*q7^Yp z4wcK~Tu}xXTV;7=`MGlSyzaL7Wim9%6w^*}KC&yciXYP=CwEBJsQj|{l%B(~%C0Mo z>yld@msc2v#0oG0BQ7;5wR!V6B>5Oxl2uTUS2z@$BSFLvyzfvE`*Q7^eTh*)>(a2z zE9cz>KbPiV-;U}FOMTqBeR!B6X-rlz)b5wn4(#MqrpH{Cyd(wo9BJVX;NAP~fpBsl zkn9ikX_=%TMU~Ui`K73&dr?t-N_)s8HzR9AZb_Ws^Sdam-xbn~qMW=TW6x2u3&|q? zKa&;A+gn!n0kR6ovH~z!BzMUzNokv1QZzWLEG{jtv@9<_9}N!pSvDO#E}>^$VNOwb zX<|#(eWDcq*UUrq85!Q}+o~=okXyh>lI=t>>1ipWM&;!s2eOA~**Lz{A}5%g-6EVj zB-|ovu%6Q*J68)2$k_}E7nYV~p=;aa>LwO&`~jmyc2+LRjTm~1 z!I5k@QBw~aLk1%YZ&tuA*F{^QoP_G(P~ppy9A|F#6~_zxzkG-``2VGNQRu&w{4L@B zE3SXV^|vJOw~+s}u7Ab#wv5K^{p2tyTcvc2wE0 zqLPG);*rE8J~u`r#OA08X~}GU>_?~@z*Q4Wjji8Niaha6Ov0o!7KuHDOo%;&>}Ss* z`z0nOb!YKR!ru-?5~J%5V@h&|Tw0B-b(r|${A2kCaA%nP#Qp`4sT;99`xjT}z#?o< zO@SFKGp-CXkoudzOtz&fGPLoP_kUEy&R2a|as^IZ+feMVT9V#$( zoLenVX9vO*ya>BNsK5+nN(u~5vZyeeK~UR0B-kiwvY*9Gf8gA)zM4 zi{S8sS_d)(5}1i?3Lzf#DGyl@<@S5dN^_ zNbz)b3rsFgUFA_@#iD^-~3r*>fSB>pn3$sco2VC)KvQirLr6DJCuPVLGxSk^%W&t!Yr5)5}s zh>asX0kI8acW0OJWLh{<0>cSDRR%csN^Aq~ps>R^a(NnmI!1x9BY`R&o^K?u2yF*0 zaFF)uNJy^I;)xPfmw2#**bA;Rv&*eAe|m)F>Q-O|(Hm}=vc+E+51D%jZG^v`qTnGl zF`?DjI<(YW7N`WC6Kk+#@+rsWdO0+nQLTm^pPFQ*} z1rHBqsW2qoROO7_dX^zWrbYe{Ri@Z=C;bwScCoVoGA$aS$`ps}$ruW+hNDa>Er01s zE)S1XsACEqU?MgYhUiIqv74y&BUnAlO)u9GiLh(H3e05t`ZCP$;~=mCGwC>u(TM0g zY~lqDLTi#fgL_46KUJz1xw45qaIt`lWf~rCQ2QXdKIwxvgv4@z$#t+T1{J3HX&qpY z;_(+F6pA3Vn2rY8jsCKGr)aU5%r>dNF49TQCAd-4@FNuIlA2OjN%z+)#&Wf|ZNG$I!~Tt?)=25&;EQ`zHPFDe5(^+ag#4ibftc^!M7 zN$qcd5ub?Xn8;WL7@1$O2boAa@G_=qYj7`QJO_;U2m@moEssB^Cd-)(glc!6CCAOjS?CrAr@Q5kV2f_-{ z4m?ar;g_06^r-o()mU!(58gfhj+ceT1j$m-)kkiL^XA=Ql7xAo{>-BeV_= z9Yxq(Uqvo>&VlGH!j2rPcr4EWfsuF>@19ZrjJZ6q-H1W`3#Qam&L;Ka5tH^e0}Gxi ze|V6P$OZ0{_%MS%>LTmI;O}^;Fls|=!a?fgZ<;E!2*L=S$6NqUD$#b(H7G>gbnG^0 zoMOPBX}y@t6JGEVE`i};Mhc^2Jf1zHGB8Q}YnXWGTP@G@Q=2sLBrCzAu>oGbq_&Io zCejX*KQ<@p15XZ8JQ}+grpMT0Y9z)nFg+!*!rFre%mWV-ZPH$J8Uiys@C@1q@zfyE z2i7-KnCYkMr+|^ZYGV07)f-@BE@1lkBXE+O0V91HWkJ3ZPNcm~U&Wc>v&vTlp0hs*^4BXdHmY?8eW zz{p$_wURX%z}SgQS$>#$6aBIml?WbCd;WPgS|KC1Rr zJT*#u6JTVnf+YnKcLPRz4t5uaF9D47Rg6ZY4+2K}7G85CGR0+8)vw`EP%<9}jM^^J zj1awHTZ7iY?`FyR#k+l~zlVn)b0om14dFFAb-saBI1*#S?UEQ9FcLd6_pJIv6Ymw$ zI^cO#`$PI2+Fp~4Z_p$e-vA?PH&`)enSy0mVcCrEf*e0Y_Q)trc){8Y(J!_UiR|&b zqz8=J8oD6mMWeQc+}T7{cubtaFv%qCrR!^KdxrFVTw$hdqjNK?3XpYloUWt(o}IW; zdBI*a>E{T~iM?QfoaimgA3l_IiEB|rZ&<3QFn-@qp`~kr*j*rVN5E(w#9}y+AI{rT zSi}R5?&o2(ovZ->M#qmZCQd}AH0Ct120&~B?|TxtX#C8)EElYwk~;AA9cDmi(Fa0oA}ifvoWX57Vh6g%ID=uD*1@t+ zD0jH#lyw^_g_!};=Ofhv->cB>VpXKkj@ybfF z@^GXcw|rVAW#U;6o1ml=cGIgG4yu=wiDOZ4#+O#R_S$y0w7<04 F{{m$~a(4g# literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/defapiWNTOC.html b/lefdef/doc/defapiWN/defapiWNTOC.html new file mode 100644 index 00000000..ab13408e --- /dev/null +++ b/lefdef/doc/defapiWN/defapiWNTOC.html @@ -0,0 +1,180 @@ + + + + + Table of Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in DEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

Contents

+ +
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapiWN/images/Diamond.gif b/lefdef/doc/defapiWN/images/Diamond.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cdafa3387318b1d3581c1b7f4083a66bc79a0b8 GIT binary patch literal 92 zcmZ?wbhEHbC%M@ z7fzizb>P5(b?erxUAuPPym_-`&1!0Ds;{rFsHg}D3Gwvwbai#Lu&^*OF;P@hl$4Z| zkdP1%5a8wI<>268VPOH954MLUgyK&YMg|5&1|5*;AU`p%SsiEyV7Qnga44mbDMM~@ zqsQ`>E^=xzTBVaGWbB`JbUN227P({xH^q_+dr`J4clSsv$Yoe&cwjqcfFpx70FDw; AfB*mh literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/Thumbs.db b/lefdef/doc/defapiWN/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..89a67ee6add69ee45ebed976dac24899f91c189d GIT binary patch literal 161792 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 Jj+RLT06U&`IGX?f literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/alpha.gif b/lefdef/doc/defapiWN/images/alpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..49de981bb1c61911e1ffabafac4737af455cf9d9 GIT binary patch literal 147 zcmZ?wbhEHbn`m8 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/ampersnd.gif b/lefdef/doc/defapiWN/images/ampersnd.gif new file mode 100644 index 0000000000000000000000000000000000000000..faf90fa016da7000e73e3cbac478543fd7a04fc0 GIT binary patch literal 209 zcmV;?051PWNk%w1VG{rk0J8u9|NsBLzrVG$wVa%sl$4Z&goJy0duwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui022TY000DjFvuWKT4U->8wpLrNsE>| z5`%JsgG_2LJjoa^#-u!mD;0zwFrm;i9t}ak@n|+3i;n~$YB&mw+^w`hJPLu6=;sh< zGR%p?ArUk(lLM^@mt!y-riyz*nmI8?4h#(nM_L<&5(5NqAP)OG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtz>% literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/anglrite.gif b/lefdef/doc/defapiWN/images/anglrite.gif new file mode 100644 index 0000000000000000000000000000000000000000..f30742e70b1b4d043e555f346837eb43242b8f9d GIT binary patch literal 120 zcmZ?wbhEHbOG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtopFJFSLV>e2RHAj0f=h;E@I(!kZ#x+?7io0| P8+7(u)0EN|WUvMR&ip1V literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/arrwboth.gif b/lefdef/doc/defapiWN/images/arrwboth.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6a26d1a64476e85e5fba2fa1b1cb363dbd0ee23 GIT binary patch literal 154 zcmV;L0A>G2Nk%w1VG;lj0J8u9|NsBLzrVG$wXLnKoSdALl$3jWduwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui01^NX000C>Fvv-(y*TU5J6%SlgqP9? z)!>j6;}DneBvau$N1^Y#@-TzI;W0xbjL75S;V4K5jnjqTU|1Rpi=d&vG@O(~Hv^-T IJ(maoJC>Xc^w@cH8nMbg@t;0dKwxU>gwvs%F5#6 z;{5#l3^1VhlZBCifssK6BmgplfyK_?gy-tDNp}?2iLe(6x~Fq;Y+j>tTICsw*u9V` rmls^vx;CTn;Gqk%CBzOKSX0qm8?^StX-)3lf_Z1!qTaYNFjxZsBCaw- literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/arrwdbdn.gif b/lefdef/doc/defapiWN/images/arrwdbdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..701bb8bbcae9b0e09d0d069e4a5be1fada76f7a3 GIT binary patch literal 138 zcmZ?wbhEHbpeRE Qt&+(Qzah}SgM+~u0B6G{wg3PC literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/arrwdbrt.gif b/lefdef/doc/defapiWN/images/arrwdbrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..570fca03a58aaa40e6d7c23c5a55f1af873d96c4 GIT binary patch literal 124 zcmZ?wbhEHb6k_0I*v!E2|NsB}`}fb8GpDDgr@FejxVYHT(o$1XQ&CY-KtO;211SDv zVPs%nWY7W0fXrZE(KI;Wxq7eT1KU1PHx0R@N4esKi$ohU-h`+WtO;7MqCL%~bf2fL Khl?u%gEatK@*+K$->CM zz{sEjk_4H-z+zzF;dx@u=A<>{+vHf=WG$;ytGt>NS)zV>F&l+^ZQwmwsItpfaiT#B O)4pT}gV`<&4Aub310s=}PM@L6ZO-))_T6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471B-#d3D4DgEnc5pZFSegB0)mI&xzCZ j^}g1}I?X1hD*DV_(=B)$-7f^p5ONbfc;t=?1A{dHJBKZp literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/arrwup.gif b/lefdef/doc/defapiWN/images/arrwup.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a770c30fb4167a6485f2a93ba6b4c9e81c70f97 GIT binary patch literal 135 zcmV;20C@jLNk%w1VGRHh0J8u9|NsBMz`(V&wW+D8o}QkQlaq*uhBtH3_%+R38C4a#P`2XaOddxipHTuSz%HHG~*`%06R#sGAsZ9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/arrwvert.gif b/lefdef/doc/defapiWN/images/arrwvert.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c5e9daf26bb482bf5659dd5f62ff2ffee66269a GIT binary patch literal 85 zcmZ?wbhEHbdV|w=Bx1^<$W9MG~HuqEK!j!4W4jh4#85pbqqv9M# literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/b_bullet.gif b/lefdef/doc/defapiWN/images/b_bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..0aeaa180e861d12ee0b131f7d713af607c998c07 GIT binary patch literal 818 zcmYL|PiPZC6o5}Ua=+!dC^foPlP;GK^TMXvm#_;ZwF_4l`nOz4LgyKS zuQ2Or5-`t6gHg4*>KmvxO1au(%9>L7 fsr_z`b6TbUiT>bmj9_ePZS`F_I5IXJ9p=(sJyFbD literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/beta.gif b/lefdef/doc/defapiWN/images/beta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6172e8978c16768fb7cadde044d91c4bc835802 GIT binary patch literal 151 zcmZ?wbhEHb9$U%nJMz@Fauw#&q(LRO(A*nwRjI1A@2Z#vqF24}sVW&N%ZQ`d+1_o;Y D6S*~0$;rt8zSTPZ<#pHwvy@O4 G25SH=gCi6G literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/bracrtbt.gif b/lefdef/doc/defapiWN/images/bracrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..345b70213f2f9bc99b528aae2a89c0dc4bb957de GIT binary patch literal 121 zcmZ?wbhEHb=}PO-)T&T3U2;bU;9WrKP2w zo}RL@vbeZ74-XFm1B2pE7DfgJMg|=qn*n471B;fy2~SnWQn9H|-yOW(Iaj&CgNe;O dsHbD1Zkv~Niv|SbyFcM_21^}ynD7gRt literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/bracrttp.gif b/lefdef/doc/defapiWN/images/bracrttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..76c33b52222f37ee7a778a3c9f8552f5830a248c GIT binary patch literal 122 zcmZ?wbhEHbNtwM|RiZhL2F^0vUQ7(u09Wc9YybcN literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/braklttp.gif b/lefdef/doc/defapiWN/images/braklttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..67a063fee279ce5795a2e79caa2a4aa567942577 GIT binary patch literal 88 zcmZ?wbhEHbK05M@2>Hq)$ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/brakrtbt.gif b/lefdef/doc/defapiWN/images/brakrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdb1927189d7b4db1c3160666897f32f0ba2f57b GIT binary patch literal 122 zcmZ?wbhEHbFfd?XU{L(Y!pOkD$e;sc vGl0}GFe^&zT9Yc!w~c4vsYeS6m&XemC6`vJ&*;*=IV*bR-ct%JoD9|gy4oLO literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/bs_bullet_sub.gif b/lefdef/doc/defapiWN/images/bs_bullet_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e02a6610c0ed14cf5aaef054fdd6bb94f51a8ac GIT binary patch literal 834 zcmX|=L1+_E5Qe{PHf>shG;2u%4YbyaSP!KHtmq*tZLFsJZ3rm!vTQem zU_gWvJb1Bs6!e%t@E{R-D}q}RWF;`_rZB?5?IdUK!?cbqBV}P-z57Xl2ZjoqMwdI(cKfNMeW!Q% zq4M8?$sJEOj4802jZfRTY9V1-vQS8%2@L__PIeQ$%7`g3-|N9`w`Lg1&jst$CNN79 z9;}Dl3C$>}R*?|<8Wphc<%#;KtzlX|TSO5xgo&_Oj^TgInu%po%Hrx2MkF3WprKSD z*$?<=D*is4m93k7yFi&r@{oLH(?UQL$= J{oOj3{{hdW(xU(X literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/bss_bullet_sub_sub.gif b/lefdef/doc/defapiWN/images/bss_bullet_sub_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9bb133eabc5c242cead02fa2cc319ab69871057 GIT binary patch literal 837 zcmX|=(MwZt6vsc;ZEeaBceOck4`weiMS9r7qL*FLRT3x!O`?ZM7Z#X9Ea>I3-7!Qd zf(?A=CHn*FaRccg?t^a<_-N5XV0!N~%s|LU`}O;6(t&&LIp=qN=X}5CoO|7fkefq~0(Y}qc?c7JiqcXN^{aOeIq*PNhV68?11+_Os_E<9 z=ZErt3upH{zpjr%vFU8>7V71UVaY@hfhIHrh;#(ZB7@45|LS9&45O=AM1 zB*Vko5qCnOkTizP34ZPn<>F!qh(z3=QG)lkTydia&BGzJB!8S?<1=Sxx<% Qz45%iH!(VVb&%`-07Y!l@Bjb+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/bullet.gif b/lefdef/doc/defapiWN/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..b71c1a475fc702b21c95d5edbdc1aa1d509729bf GIT binary patch literal 120 zcmZ?wbhEHb4+9J+{$ycfU|?j>0SSQ2U|>--IN`Z^uf^l0z7?LzMu$y0Rv3w{*x|!;S!s%* R`Du4f)`fo$#IrD10|3w$Ct&~p literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capalpha.gif b/lefdef/doc/defapiWN/images/capalpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..f93e524cdd9b7902b98f22fec2fbc71879ff5380 GIT binary patch literal 138 zcmZ?wbhEHbtlf iBjK7S9_sU)YA~@h;Sz3fys?9ohxe??^2Z)Z4AubiT`R2s literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capbeta.gif b/lefdef/doc/defapiWN/images/capbeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4c37026ab5ebd18ba0a8d1794553e3a808cccd3 GIT binary patch literal 141 zcmZ?wbhEHb@#^7Au1jo~!3BmMJmYcuq;M+r#pdip9y9ehaM? o{R)llK2i|1lGVAn@#^7F&Z8o~!3R&QLbiihbM=bSUwhl4wV%MaP7g sgOAR9nQ*Cbp+!6Q!c^&q5JuUeMFKu?YaJRdD)@TGbY+_ALBS< t9Kj+a(H~=&|Dfi|0-uid#ziMs+4zs8ELfrwBXoqxajBi~0#6nOYXFE-FHQge literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capepsil.gif b/lefdef/doc/defapiWN/images/capepsil.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b6a387a40e314a6cd651f81a2710054bb57a113 GIT binary patch literal 130 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu;?3{@LbLNc*)uGBIk@mABhBUlzKUDW$QYf e)Ae}T2ivV$eUfVTn;IM~q~@?bPU>V}um%9uyDb|4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capeta.gif b/lefdef/doc/defapiWN/images/capeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..064c5273534fdba50c309b3b8de0e448583c5e90 GIT binary patch literal 139 zcmZ?wbhEHbtXj8D{Znc=Qc*ct*LGIS; ng6A0BZqz9HaLrao$7Ax1n4<>*6ADbM8V??tC=jb5$Y2csq?<3U literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capgamma.gif b/lefdef/doc/defapiWN/images/capgamma.gif new file mode 100644 index 0000000000000000000000000000000000000000..6cc19838930ae56e3c6a961b4a4941b4f6a60ccd GIT binary patch literal 118 zcmZ?wbhEHbsXF&jt)P(QRAq< Ie?bOo0L;=Pt^fc4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capiota.gif b/lefdef/doc/defapiWN/images/capiota.gif new file mode 100644 index 0000000000000000000000000000000000000000..42e74365b648cf7c6ed53a02b6634cbec424fbf0 GIT binary patch literal 111 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^jKK-d)iO_Il$J$wZdFi<>`kqjC9*51d85W0Q&$FS0B#c> Ak^lez literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capkappa.gif b/lefdef/doc/defapiWN/images/capkappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..263ee4f8874da785aff03241179a652a69f5e1f1 GIT binary patch literal 143 zcmZ?wbhEHbVD%$`Miy+9ct{*51BY*}=wx?XJHNBZD;nJO?mi literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/caplambd.gif b/lefdef/doc/defapiWN/images/caplambd.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b7af2c91a0c26e39a71126e3ac4de879205cea9 GIT binary patch literal 139 zcmZ?wbhEHbh3D4DgO&)s2-E{nvar=-BQ<}o@ r=7cT^y6N3f~K?Z98elIUh literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capmu.gif b/lefdef/doc/defapiWN/images/capmu.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0066cf5925e6850511df007c66c32b0eddb8173 GIT binary patch literal 159 zcmZ?wbhEHb%PT^-v`jfHIelh# zt!@$dCau!zm~epO3sdg_PQe=zllMJOP_%UN?{N|BnxiAt^!CC9gBI>H4vm5PVw4!H E0YR8G=l}o! literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capnu.gif b/lefdef/doc/defapiWN/images/capnu.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d841a31ef2a70380018e4253ec1c8ed0ad25f32 GIT binary patch literal 156 zcmV;N0Av40Nk%w1VGaNe0J8u9|NsBMz`(S$w5X`4oSdAHkdTCggm`#(Y;0^`U|>{K zR7gljFfcGABqR(B3;+NCA^8LW00031EC2ui01f~S000C@Fvv-(Nr_Bxk(S5P2vlQK z&%;nmfi90SwP?^hheT6PAUF=qZqf@7fP$f<7zj0#0cJpva`7sRhcz%jJP?CTV_TsN KNaeI70suQwZ8p^a literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capomega.gif b/lefdef/doc/defapiWN/images/capomega.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6e11542c02b2ca350e3add8174458872d846540 GIT binary patch literal 152 zcmZ?wbhEHb~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0V;%achbM@Y`IVnL0J)C_O2FRZCF!X)8CG?@p z4 Aod5s; literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capomicr.gif b/lefdef/doc/defapiWN/images/capomicr.gif new file mode 100644 index 0000000000000000000000000000000000000000..20f4ae6b5b392f23b70a83e0b7ab1684560ba69a GIT binary patch literal 145 zcmZ?wbhEHbIn{K>+|z`)3$ z1Cj@s!N6i?aKdx7h>Eaum!P;&01J~}vxQ>YQLmR_k{uzZLK4}IH2RxNU@#^79)cbo`(%I76-KkGhWnT`s&#>c}7BopZ+5S gHD{ULphH}aJW~&7Yvc&FPdRw-qQ;w!BODCY0Fo{%$p8QV literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capsigma.gif b/lefdef/doc/defapiWN/images/capsigma.gif new file mode 100644 index 0000000000000000000000000000000000000000..f75c3553b8eec054cc9e17284bc8ec1ee1bc89d6 GIT binary patch literal 131 zcmZ?wbhEHb0SSQ2U|`WSIN`Z^ujncD literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/captheta.gif b/lefdef/doc/defapiWN/images/captheta.gif new file mode 100644 index 0000000000000000000000000000000000000000..96b4c5022d99b4e1de7f6b8432207cf30601cf70 GIT binary patch literal 153 zcmZ?wbhEHb9pW4wfr4EcoLr8Y9jz*t7nI~VWSml1Xx(bS o`e!Q(8{?$u$*S7zS5neEWsEqPk2i{ zNIX0|FfcGABqSIZ7ytkOA^8LW00031EC2ui01f~S000CzFvv-(y`iLS zhlh=gje&uIii!#Y1B2pE7DfgJMg|=qn*n471BMxJ+HeGQ| q$;Tzh)IavLXtIb+Q*f(SLD4P&j!7*|$Df$Can9aiwkJf1!5RRyLNNRQ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/capzeta.gif b/lefdef/doc/defapiWN/images/capzeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcba9c83a24c02d071efbf8e72ce88b584f41d58 GIT binary patch literal 138 zcmZ?wbhEHb@#^7IT9Wo~!rXP?}Qa&U} literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/caution.gif b/lefdef/doc/defapiWN/images/caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8a5e7588a618e53a52e8dc4b72555e7dc0714bc GIT binary patch literal 286 zcmV+(0pb2fNk%v~VRir~0Pp|+|Ns90001li0001X04D$d0{w)KsmtvTqnxzbi?e>A z`wfPo;{{4Nrs`!z?Fz?9N73@FzLk#m7{BugEhb=Xh=jb16J|20b1I)y1W?MUQkht- z_tfZ?x-8pwAx)3ToG5#nMY}=fbNqg&13reab-u?JI3w6sR0zYyqeqC6H|J;g=V%xy z^R|R#V^+rrCbtD#Tx@K)<|fUTO6km)_=70wU3rN6jGZ0(V~5U?zJ8i<#ol9{X9e#g--llxuTi9L k&+ku&wl)Eg3_NkK;D&?G6hcXs(BX=15-VD~=&%3)JGI1(d;kCd literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/chi.gif b/lefdef/doc/defapiWN/images/chi.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4555582cd9fb8d55b51b5027afc252e5177d480 GIT binary patch literal 145 zcmZ?wbhEHb(J3^J9fJwoZo6KNOf|o(v2U(3NaFxOFqDmlA_D0At%VJpcdz literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/circmult.gif b/lefdef/doc/defapiWN/images/circmult.gif new file mode 100644 index 0000000000000000000000000000000000000000..49bac178460a729bf930450705a25aec65a44ebb GIT binary patch literal 81 zcmZ?wbhEHboa25SJ5=on)F literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/circplus.gif b/lefdef/doc/defapiWN/images/circplus.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf9719820db56f560d1e94f957bb08ad5a552437 GIT binary patch literal 80 zcmZ?wbhEHb)5TRPWpn*l7_0#<{3$K~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/congrunt.gif b/lefdef/doc/defapiWN/images/congrunt.gif new file mode 100644 index 0000000000000000000000000000000000000000..b886bacb112a0250512b5865b60aca58c4efdd85 GIT binary patch literal 115 zcmZ?wbhEHbt079H3XaE2J literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/delta.gif b/lefdef/doc/defapiWN/images/delta.gif new file mode 100644 index 0000000000000000000000000000000000000000..239069d87bcba07487e82ca0daa0b1a08dfbb616 GIT binary patch literal 141 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK(;gy-t5O0wHpY+IJ7+%Srnyg*?^i_WrCgGWJ} my^4aqj1s`JAu6eRBSOWk{MJ+b~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/draft.gif b/lefdef/doc/defapiWN/images/draft.gif new file mode 100644 index 0000000000000000000000000000000000000000..9952c7ec4b536327a1a840e49488a07b7a16512f GIT binary patch literal 279 zcmV+y0qFimNk%v~VNU=f0Pp|+|NsC0001li0000_03!eZ0``QDsmtvTqnxzbi?iPR zh7X3~NS5Y_l1k9E7@NTEEXjvW=L`2Od(@R9H_0Y^dW8Hg5zCL9qBsjFuqDEes0I_CKWds+Br%L$75IU5=$!>W3^tCVZh3cFRUbC7TgJFz3FqODb2=REKAH3bWF%Rjz$T%p8fu&+`t^Gvv1wc d&)@8yz<>e)!byQJp+bcP8#;UlF=B%P06R~di+un9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/element.gif b/lefdef/doc/defapiWN/images/element.gif new file mode 100644 index 0000000000000000000000000000000000000000..150898251de90d00c6327c6e287c2b6c830a286d GIT binary patch literal 121 zcmZ?wbhEHb@#^7Bzzto~!rXn6a;+-|1YC8( UPfhf6I<)e-!tw12YD^5)0A;r(u>b%7 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/emptyset.gif b/lefdef/doc/defapiWN/images/emptyset.gif new file mode 100644 index 0000000000000000000000000000000000000000..f83eb0be9ad2ed570321abe42dc5ce1644fb7f0e GIT binary patch literal 81 zcmZ?wbhEHb6kyqk-)7Df@lZK2cg2pJ)a{F=th(aH$Y2cswJsXO literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/epsilon.gif b/lefdef/doc/defapiWN/images/epsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..753b8c7cef695d7bf5ba15a42791f4246cef8744 GIT binary patch literal 123 zcmZ?wbhEHb%_1T9H|KtPIuw1JoBm literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/equivlnt.gif b/lefdef/doc/defapiWN/images/equivlnt.gif new file mode 100644 index 0000000000000000000000000000000000000000..deb2a0bb4eea15d6e66ce2cb5821e4979305d8d1 GIT binary patch literal 115 zcmZ?wbhEHbRfjb?ic55V2QBtol(?>4kii-NpeGK=GU?NX|AcHjk!Z0c^ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/existntl.gif b/lefdef/doc/defapiWN/images/existntl.gif new file mode 100644 index 0000000000000000000000000000000000000000..3338a4eb820e95eedb1a12f7e087abe0eadf4d47 GIT binary patch literal 117 zcmZ?wbhEHb<_~`MXrPbY8!rDNU{orItMh0sDL9Q&4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/gtequal.gif b/lefdef/doc/defapiWN/images/gtequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..adcc0dd377ee1e11f5eba9755fd655c68019e901 GIT binary patch literal 126 zcmZ?wbhEHb0SSQ2U|`WUIN`Z^?+rDTO*Y;}6$cM?ELo`H61HY>>Y^fv XY?+m>z2E;9aZ2=%dDqv-!C(yl-_0vt literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/header_doc.gif b/lefdef/doc/defapiWN/images/header_doc.gif new file mode 100644 index 0000000000000000000000000000000000000000..3dace6c2c084e6f4ad5c19794e7210b61ef3a510 GIT binary patch literal 2954 zcmbV~`9G9<8^>?Lv5jNOkTpWbdP+BDNF8IBI64&**-E!;Z6ta0lq-w8bYR z2=PE#5IDqdox~Rih9CrjPzb^x2q!8ShF}DOQ3%E$7$+_f7(x&TK_LW#5S)06!Vro; zC<>t%gyKXi216JEVJL)Q5QYOK2!|mYfp8SUF$f0*&<4^#3p9h*I5CGf2n?ezjKMHY zj0F{fzz7N>7>wWq1-L{J7)425|uY00KA!)IbbC14{4|aDc%;8%P5!oJfwi1~oVsisD3&z#kY3 zDhxw09OMe@0t#@6;uwm996{0`0Kf&FgP?(15GBY1V1jNC2Veq*fkQwI!~itt1XzFr z3&4H8r)jw|8-I@%8l$ z4i1irib_sS&dJFsFE4LyZtm{x9vT{&nwnZ&UHxD0&foa|`4HTODum>$Dzn?d1@~y2 z>#EFYj}})x&b6w_eHOPD_IcM;mDib|Xv&nczOLAGZKAKphGv&R4OG4Gf@@v#s5gTa zu<%ZOH*}X`Bqbo+v5?(#{R5_BHtV19XXN}J-n;6ryC1e<@Vh=sUwq?Gn$~oAV~V0V z>YMq8iA~1F8`aW&zVnePiQ2lC+$-odo03V7J?BLyA~mlb%5S*P^Q}ze=89_A?Mc@R z&0($D*2JXMY32jixhg>KWlQtu!Lh!$J)f8UrmhT?GrJEsaJNdPvKsC5@=9`E%NJpv+w_NjcSx-sNcQ#CDhCuKf0?YxV6u(a1| zqxoJR9v_CYTLKS9^gLJnLH2D4lRBj=Y-&M_E+eZ-rAyC-mp1k_F8JSbD=&LenM-98)`k+3faAHZ;gD)p|wg7URr$XkQPGcgy$G{X*g^#?}o{^lI; zi|Rr$CBaojFds6rw9h+6QMaSN{oWy*KdheLM}rg_C8*o))lv&6b6fc&>UheoQ}oaB zDLKsOGZtylN#=Xe$}WY#Mfwd%eVMB6r`G+|HG^j4V7F;E1_p>~nMS4e<`jSj_k-HgqNP zobBdUn~7%eyog63q{4e&kBH}g>TwZ&=OeZF`B$NbN5yk4vXfaQB023OYJAUb+LJbx ze|EI2=ToO4cUab)QldR0tn zs~cxsi7`b!H1=?h&;HaFbJ>pbD&BSZH^Wb5zZvI-ljxa`rHhJ8Q*!xar!71a8IlnX zu8}W#FmAD&cf;}pgUq?4h!dCk)zZpJRXL?zCwK-9OKW=1WCeNmdYU9BjEO#G4UV(a zgOnX@B_10NclQM~tv_6ee{A%hG-M`-EEs}FS+-Wenq{6VDRx^Rnc<^6khe`2FGgz zcwV1cbWH3MHjDY?pGo>iJ-7L=io7#(yXa}%Dydy;N^aJm^K`UohS=Qbl9$?BvXJI?F}Xn#O{hz<*<0c9Os}gqF+fB`da2L+9LM&v z-d&FPqhp<+**+Pr&ON4@qCXfGoY5vzB#V_@U$jQ)GEa96Bwq7VHnQ-De9(HI25tjgimZ z12&vHn^$G2mk@GZdhh-xl3s7l%~FnPKL0SW-grFlf^nQ~1^ZZ;i?-qLvhkl(NteKc ziZF+de2s}omtzbZvPne>9htKnj(+v{Zq}Oz`YQwH?=TH=TA_rF+2)fSyE%BO z?t+`fqE|cDY3Sd}J!=f?6KUYua8OEBRwv2u$il$zeCqHCiB@t{vv!s!TBonzXYF9* z|CaLBljix>#y)Pzd3RlY-IW=a=KJ**p9r2maEsscU8OkROTl8{7YE0UlCRK)1aR#e zFLOIZ_RMGs`sBO}-_Yc^$;m-ML0(>7hK7a`5)vF7 z91KW6@h1x-0|O(24oD1S1_O(|!3odRHkvadv#d@WGPoZ&GpMm9%#mYq0FRie4s(n* nbMqS!R%dpdA6l)kOXyft19Om1uP6OMjf-F^`#KTlt8e?Jeezt7+A R{|_*rz<~q{8l+GF06WF0eIEb- literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/infinity.gif b/lefdef/doc/defapiWN/images/infinity.gif new file mode 100644 index 0000000000000000000000000000000000000000..766b388fd5bb6c91ec1e3fcf0de45ba8444f7b66 GIT binary patch literal 139 zcmZ?wbhEHb6ky~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0VVqtK?bM;<}*R}nUcQ=VRPUhhZTqtzO;Bt`c mf+rI$xr=5MSlG^Aut-6qfwR-0Q1b;-C+lSAwNWbt8LR>QI4nH? literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/integbot.gif b/lefdef/doc/defapiWN/images/integbot.gif new file mode 100644 index 0000000000000000000000000000000000000000..3beec4f22b65e3f555aa8ded68bfed95eca1a1dc GIT binary patch literal 134 zcmZ?wbhEHb=}PM@L6tVPRTYT6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471Bto2aSLaOEH(ZvA@)6D!?7_0%Vc`kMU literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/integral.gif b/lefdef/doc/defapiWN/images/integral.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa748c92f066dda9f052c88ec8431474edc7fb3e GIT binary patch literal 123 zcmZ?wbhEHb eGhV(7-L{ks*L7vt!*q7vdn*2g(Qq0EgEauLUnt)I literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/iota.gif b/lefdef/doc/defapiWN/images/iota.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2dfc0d6ec0703a9ec2cb80aa0fb91732c712a9a GIT binary patch literal 112 zcmZ?wbhEHbCMz{sEjk^z~)z#?mK!gKZB%ROEbw8B2NCaX53dCqlHRXLH!%aRr>$Y2cs%Q7G+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/kappa.gif b/lefdef/doc/defapiWN/images/kappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ede7b0fb74bb772fe59de82a908577956b5ac6f GIT binary patch literal 124 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^rojo%)q8JDo0RU^cA@qmN0;nEnGA7`l-I}BO)uDL62toF OKSxZS#}O9>25SInswUZ0Z`H91tFjsx(aPr7 zgiYBn71R&|G$?_EI}C<4q@jgo^M-tlBhIOF=KWzTDiJ5@#JpWl;8Mk@IyJZl6y7=$ zXX*_0kOwf)jX2;R5O4@;hyfaucnS^-hBl<3Wj;B7jT%Qq%m)d77>i0()Q~Ief&!Of zDux`9Gy(t@o+D_uMU=<`nCM0vV1i*d1U19}jZR>J1B0OrY4a=cuW^kU$FMO334a)i zO3nNNgY|ogV55GY!IC^wkh@=R5T$1f((&644146jgI|7tw`N1vh@AO6abxqumBWo|sj-85>fWuQxoE@2;bW_FV_$~P?!UXW{m{eAOg8zV z5EY{IMGd literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/nav2_index_b.gif b/lefdef/doc/defapiWN/images/nav2_index_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..87fc9ddba320b458e6a8e00e4c731c196938f810 GIT binary patch literal 854 zcmb7@F>BLd5XP_I5Qjj)4kdI@T!KiKBcQkl0d1WEu4Zt#!F+-2LIf2YG95S=b#e%; zYbFt~ftxcq<_lyJr}KAj`vv+g;dtMB?)N0K_4*UawL#Po08cLqR!C>ph6Etp#l03kqn>b*?Fb<(c3}`yR zf`h?mBb~LPdd)R8C)pT5;*YUZky#6D>o1D7(b{KQQbD!cYrQSXVr=QuwwvKXZXRm+ z4XYfqNl5cKuqDF7QyV4SZnxL#_51z7U@#mGN2AerJf2J@)9G|Jo6YC*#bU8sE?2A7 zdcEFkHrwrXx7%IzUVX^d|GD$;#?6lG$^B}r|HR{t%3kN_Y8Z!0ufmt!84{pHiWp*;9R$5<;9GOBfF^C24o6MEcjxE2oj^b@%Y^D{0F>mnv;9a zb3V^=zTI0>Rq<3TLif{Obmu4{O~gcoNC=fuq%(M50JE36mHS6wrn=w9t&#V&~YSm13ogQewxV(pqU&+9)lS0+*~6 zvtpxIEEL`vtqdz;lo2qZRf$%@N{kXr1vSI~4N73)4uhc$X=tHYtRY+Du+~OvvHma? z6|-ieS*%@9;L@-*MjL^9K;f+x)?&249`XPtx)BHb0|E{~4KYB25>LT_!O(^@w8SQ7 zuTkR|X0buSAI73GhK(Rs*aZbHSquwuMA8TVTzHP4;TBOM4`8AjaexVi;Skgi12j5; z1r7{`Hl)R_$iBukY8=7F5G4FzEGi>n7wD|tQaBs6`*fCMp`6_9dYvdOqmz!^wqw{L zJ09%v9W3j>nFMKk4%iaHgC}Pcx!rEB*X#HD1A#y&6bgsK(P%UtkEc?pOeWLa-90cc zkj-ZE`TWGh#Psy^;^N}!>gt`||32jZ|FdoV?hP&~qB7fR{}VyiKUCy;sCu;j%XeIx zcJ9A2x-H$jlpQSTtzXE+=cp^M@4LL`^_g?gNNMw8sFP|lYpME|FU1SNL$9=5+kYW` zX1u2L$`?c5e-eD__=AVCCoc3;X8WJ)o~`TiJn0$phkfbIb35NCxFTDp`W_y6due#2 zuROV<_p|8L^4R(0?cI-zeK<9ndo8i%Irn0-{_4Hb>+heg4*0%JKCaFduV0JTjb<7< zb8W{?ymV^glJ`_)&PR!@%V)iR|M9|}<25avXPO$LO~-C~KDb_&KfnCb#lydicWiv( z=aa#b-#x>Llb2e0D-V`!DW7e>$rB@~2OcZ5CvP=m$7-|wmE^8mSM1)E#PETS=RHGL zzgyXU`kR@{pFiDxWN@xy$D_X-?Pw@Fde}GlX;0|KuUjYEN?NMIG2dY5M(gfGz+2z7 z-nfb8d&cLVxm7k^ob0Q~^&f27;NSe}4DFpNt|;p7ezWwz+GK2|`q!HcLtAdt@4IKY n;)mx8?suQ7x@+B)?pR0{8Y8tw)JLg>bj57Xv-{Q~L8|;0OU5W- literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/nav2_previous_b.gif b/lefdef/doc/defapiWN/images/nav2_previous_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..b02bc97081d3d64f843aac572eabcfc39cdb022a GIT binary patch literal 871 zcmb7@ziZQB5XP_I5W#?;gOnnQOArU)2vl5zh_+6FuFW9A4Q6!7E>zILA%h%tF#Z}k zgtm^EM8rnVHIrlhflT6be(qcU0pBGY?|aXEp69-~zkP4>*25jSD8J?OsECQUNQk6R zsfwDYi-u^{rKy;Sxmbv0y>%5gaTgEqtkzHolW>WUNR%X1(j;9nBq`8F8ZDZ6oi(S9 zsk&;YW{ssXQ**UY%c9`YP2JT)JqwDrVH&Ox8VMtXtbTzZBlIg&I1z{PWd#w}5j2bgpd2TT~oA=HQg zO($4zFc@v5vsP5Exu)hM8zV^kF_tPaYk|%Bi=x?R?Xy`@K{dJ8dYdSVu}P=4-54(9 z#zQT?!72yMB&7Kq*b?F4sTn2hc6)t&z0>J*yWL)|*YEcSgTZh(9F0bMdwb*Ycruwx zr_2L-7lQu?5$=X;{LA9Z^dz@^z4(yXsnQkgHJ}r}z2TKhXK*?%6rd`+2?J z&*!FPY*?F|UqYhDU*yrDgfK!lA%YM|P*F-KBa{;=2$kxRQNkEuoG?L{RBt&YoDt3m z7lcdIDku?*2u_3`LPCj1N+cta6Df#90c}V_3(a^f)f{ygrJPbhsZ?W8F-94uOi(5j z1ui+GoKr3+mkJ7R1*3vfA*hgGL@SkyN=~Jq5>r79F+hV7Sh&MrXhRxWXqL*5s&P1D zf-$N5VJs@n85fL8Wfv5<6r2gcgoJxQ;VqM#Nx>xSArD}p8*#utAm9+x5Cb$Q@e~{w z3~fk5ORD75HEJBexl}>IAI72*f(waUVHXs*V1WaJp$%!NR-|6z8a0l@#tkrCOk|ennwyRPEDPl7cdFSL-#R zRE$PCYTJfkg=~0G%Qvu;17i}T@i|~i2oIi&Q6wxZEG8xQBv1ugY*)v^j?c-W0@it$qXn$+4 zE^*i{ykFbg4*!)J%ZnYSQ;+I-3#Poe6`S@<+Sc0!w@!CAWVURq3EZ%4A!c!SQQp$P z4;Rfn<=Xb4@!k$g{}IjnjXAk>m&bK7;Z|(FW9)_8hv|D$yLZ~Y%FvsJlKOVb+|`{>B5xfgEqpxhr z^!%SiNfX|8&6}I_`{AoET!?;d&Sa_c|I|-b{A0NiOK=ec3jKEq zZcbdzOgJg-ww3;TEA#yLMz_B#u&@1tshd}?VtK*w(;u56w$`s(wrhAIYn8vjRn^5w^P|-|V_EWoWS9h)7veNg) zw&agS3u|4!yI;F!4GDDf!k4e<6U9-Z!!?EXc9h;opVEDiIf<9%X0( zEGOqqt24F0%Pq^C?veVpt2KYIIcnA66BC!Z?|xC+yVCCD;h)+MX74K-J#smDNkm#f zw5!3n;lX_Fse+P_U&{2)pZW3q{l$%$S@Yqo^=qa-S)`wx)TkMe;;?t literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/nav2_toc.gif b/lefdef/doc/defapiWN/images/nav2_toc.gif new file mode 100644 index 0000000000000000000000000000000000000000..5474e92e609d9f4b155e6c30e2b1d4a781670170 GIT binary patch literal 1154 zcmb7@>uZ!(5XL8vgf$v3Xau)5;tirJQaIgY7a=T7yu^A5*rt&fXyE-_U>7fZm> zlAx`h0_rpbjhF?MY+5x5-3@r9P0BGV0T{sW#b%W%#-^Lw6o zcXh?8Q246~nnf?^?J-1_h>3(q36(KqEEy&vWYk?+L)MaIvO-qfTQL_r@)-W3u!|I^$ zR;&>=B1RO9XfN++i@ZAq_1wt25+k9JW@hRp$?5Q88N<%j)cc z0++&8#EQZ_pzzizTNSIYhdh9ZZo~oqfPh0#Lk!TM#8Yr!Fti~JEp^GcYt%TxtS(6S z!&p=zEQ(xV7ZkW;6;|Ykq!9qP@Ek$IEuusoz(hCV022(uA*dk+XmkP#92g93NUK|s zdyQ+5nCvOzx=jZ$V{-UCyU@%x#R#sVASzB8hi^byccvDkTOG`_8dwVjOOsCTW z0|P@tLt|rO6B83}d*6M?@BcIZb@n75WzjO%>i!cE-+z?lo4e+hQ&+$D&0M;r|MtV~ z*hpR?UA$o=SWkt=0tY(p_Z}YqeP=qcd~U^e{_w%Vo~78p0Xbc*QYLx-^q#YYJ4@A$h3B?yp{8O@P3E_{Tx_*sV>xzK3`m% zN!5h+jaB)kyj&6Q9qo)QEP1nU|48?NV6=I7cI46Jd;fm9Hm831lG}feTx*;xA76-f zjQ`oX=~?NyNW;vo?%adF4d2)k=*y0*tGoNh=heN9%?01S7%iApJ$fiwUHqWDuDWE# njyp&9ZakYQ2o>i2FrWN;Pi&3d`zZ6lu4O$>7Oc<8q80xGL>~yq literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/nav2_toc_b.gif b/lefdef/doc/defapiWN/images/nav2_toc_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..727f3ae5ea1605452ef2b2f2bb555f7f293c9328 GIT binary patch literal 866 zcmb7@y^51j5Qb;LA{GHb3kh2&HbE?eA)r_&1axB+u-z0QOkr*yr65Gm!XkwXY+?Lq zEW-YjsYGNqI&~_`+(0U^8lU;r8}Kw?IA`8@-gmw{8a%vn_vt{c$Zt76Dq-GEn;cz$_jmG2gWHOmfr?c5?KA$fZ zi{)~;TCLXW^=7l#Znx*X|32jZ|GEC>!o`;C$gOIv|HOmVec5U4?j64W`m%NT=Kk5? z{M)NbHy$7C9ew!z=Bhsbb$0ae^zF6&>)pZer`4?csnmtm|O z7WxpCfppW-u_9D(a$9u4g32xo7DA8_R21#j`RX6&ybPOj_S(O-_BU(SugMOSfW*;w!};<#OhkbkXRBX5fX(GsUfwb zOe&-(pbcqgp&75$&2h&X!^Vg)>c*n7)>t-Hj8#X0OSXpDuozYcg|}jjun{q$U_`4? zYm|+OQA`Cj!~hLSVBrpfp$%zhp;?_FSL3j?Vy!xV7>kP8vRGDU7ZkV@wjx#(?g53j zR@tgpg+1f}Omrg-_y+_Wf*N9g1|^5@Au~3cH}d zC9AL^M6lh+o!iA2j%7N*6T&-7`=4dwmriR+4JC*?_oIy-XuulbHJ7m9z1!Y zC?O#sB_$;-EzR%u=jG+)=jR85!SeF*+S=NNhK5im)Y{tG-rgRGM558?@bGXf78@TQ z|J(cTL;nAtxj*8k_$ZDRxmNd|$o2iEIN!{5S6lAa`;rzEHhwR6;j!epZ=|A`` zV`}rIldn1|-aH9z%*rU~teiJ^uyo-1g~8LAL(#&x;^x4a?5f0SUtKuwSaNUN&d2Em z{l}l*oieTM>dU_Bwf3)_B1$I5ajIoz~u?ZYb@t~DktERx&%OM5DB+$ zA+%jH6%m_yb0)|91DV9>{M@(x1HMZ*-uIsSJkNde$xqar5aA|aAO zr7CKoE*hd)m!@JS=3*h1_10C~#9chZvsyzXOu{8XB2ki5Nt1NRkfcBxX|!nOb=I6Z zrs}Gpnl+ZnOwH9oEsKInH+5GJ^(-jfhH1D)Xe5lZYMQ2Nh9*;?Mhs{u!Qzg=Xd{gl z%~^)3=D1myW%*+)mAiSEXW4~<%W#XZNZbR(TT8bLOYD&cm~;~d{(-XiB$5^V!tOYjfFN$WPwa;cr1=ZwU>usVe#wMNGc4N4Z z8xOVo2CE!2laS_fU`vFDr)HG2+wD%L)9rS9yjmP83WHOyjXS3OS zK3^;r%jI&lTCLaX&1Q4e`|m^k|DW4`u3c}*mh4q){U`QYk7TR0dvNmM{AKIL-Q$as z*|%5Qcb>jKIQ{tj&5pkKb#eOX$J<-|*Sm*jpO@3_(bwbU*_WU1?mfTU+u4?fe*ryw BfVltw literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/notelemn.gif b/lefdef/doc/defapiWN/images/notelemn.gif new file mode 100644 index 0000000000000000000000000000000000000000..479a88d3f83b722f8a83b4e0bc96457c1e6739f2 GIT binary patch literal 141 zcmV;80CN9FNk%w1VGRHc0J8u9|NsBBwY9CSt(=^kl$4Z=jEsAGdvkMhT3T94N=i97 zIVmYAAt50U5D*9m2mk;8A^8LW00031EC2ui01W^Q000C!Fvv-3HOf|X^kK{5gcYI) v!I4#hg9eIW72(2+^cz7_A literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/notequal.gif b/lefdef/doc/defapiWN/images/notequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f3d74408318be926ba759044d1af33e32e6fdbc GIT binary patch literal 121 zcmZ?wbhEHbzY VN-uU_Tv6b;puzfyk2oWPH2|hgCG`LR literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/nu.gif b/lefdef/doc/defapiWN/images/nu.gif new file mode 100644 index 0000000000000000000000000000000000000000..049486c79cd9d8d526b7d89f8ad0a2fe21bb7e35 GIT binary patch literal 124 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z+!1|!gKXr3vVSRN%4s#lL{j`9?o?P3Sedu>nu?axqCF#_NA(H-y{VV YmQ@a`j4XI~TAUhF6=h9la4=W{0MM!<(EtDd literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/omega1.gif b/lefdef/doc/defapiWN/images/omega1.gif new file mode 100644 index 0000000000000000000000000000000000000000..0009f0e3029e451f022cd6541d553efba0b73688 GIT binary patch literal 144 zcmZ?wbhEHb@#^7DIy*o~!o;O$k0C%cH1rHo?&Cm`>X7Wv5@fIj0EewD8~^|S literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/pareltbt.gif b/lefdef/doc/defapiWN/images/pareltbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3c0f75b7d96b7af435ca7d4cadfc0da691f299c GIT binary patch literal 126 zcmZ?wbhEHbR~A2WZ@$fZfghVWe5P?QSOWmu4k>5= literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/parertbt.gif b/lefdef/doc/defapiWN/images/parertbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..81fcda4e8e32ce249e416556201de738684ea355 GIT binary patch literal 127 zcmZ?wbhEHb_^@YMD_aw+u7lX)y{i^H?d3b37v($Su@ b#`l@%*;5jUi(1&*4osd=$)e@Y!e9*mS3xW2 literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/parerttp.gif b/lefdef/doc/defapiWN/images/parerttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..3479f8d9a92563e0c50a6b87dc38522ce8bd8b60 GIT binary patch literal 124 zcmZ?wbhEHb@#^7EOZ_p3at2<)%K5oV!FJ@d8KUq!y=OBj>Co XDeets^F*sk+xJ}17vXkcV6X-NE=VUT literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/partldif.gif b/lefdef/doc/defapiWN/images/partldif.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f1928e773c45229ae7b2a67a86d9316c7ab688b GIT binary patch literal 137 zcmZ?wbhEHb@#^7Bhnro~wP%$x2U9WZfKkSj9kQX@pCW%rP%f kU&)qGoWRv-a{1yC n&X<19&MYg=H7)vagsEFZHPAzVPukC+aiUk#HO)>TMh0sDU9l|w literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/pi.gif b/lefdef/doc/defapiWN/images/pi.gif new file mode 100644 index 0000000000000000000000000000000000000000..71444f3c50f9181ea24f57e885725eb1ee3df4d3 GIT binary patch literal 134 zcmZ?wbhEHbHR46R~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/prsprset.gif b/lefdef/doc/defapiWN/images/prsprset.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1c8c73bf084fcdbc83b30a5fa6bf1b4702ee6f6 GIT binary patch literal 67 zcmZ?wbhEHbe+4F3%o41uZ?f3h$#Ft9M_0ND&6GZTz9y{)aSrKP2ml$4B&jD&=Qb8~ZRYin9s zT2fL{DJdx!7#Ii$2mk;8A^8LW00031EC2ui01f~S000C(Fvv-(y+NcR$B;!LOi433 zPSzw;;c#f+aue|e@!@=wqu{ATs>1li77WXw0Sq)~6$A=(z+_M(Yg4<`dMptDJI@F< AMgRZ+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/radical.gif b/lefdef/doc/defapiWN/images/radical.gif new file mode 100644 index 0000000000000000000000000000000000000000..74fc200c7abf8a90bc528bcc3da1837531a657d1 GIT binary patch literal 78 zcmZ?wbhEHbL!; literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/refsbset.gif b/lefdef/doc/defapiWN/images/refsbset.gif new file mode 100644 index 0000000000000000000000000000000000000000..410f8277cea4d67d77fdce2607d3c27a87dee28f GIT binary patch literal 118 zcmZ?wbhEHb~0+1c62$;n<`UY3@Yii(O75)vF7 z91KW6@h1x-0|O(24oD1S1_O(-!3odRdo8kiru~m|QavWd(Iv^#EwyD8<7`$Axjfe! LW$%6qGFSruC6FQZ literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/refspset.gif b/lefdef/doc/defapiWN/images/refspset.gif new file mode 100644 index 0000000000000000000000000000000000000000..8464b13226ef3b7727e52d91b6c95cf4505125dd GIT binary patch literal 124 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK?>gy(7%=83bvnS=+6uwAZbG%|JPU~_8r@D<{_ xe6eBcl2G<&XGaGU7STh?#IqxrjAp&9oD{^u-FlESR6(DMO{+k_{=6WAH2{BmE35zj literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/rho.gif b/lefdef/doc/defapiWN/images/rho.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8c565914153cb35a245d77aecf480b1ee47ed94 GIT binary patch literal 134 zcmZ?wbhEHb@#^7Gr}Go~uocb4Z71b_a)W8X5XNm6`ldU`n#r h5$Vk(QtH7g&Dfj#OC%MO~V6!GVRr8UQw$C}scv literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/second.gif b/lefdef/doc/defapiWN/images/second.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e65da28d0c0efce39715984712f8801348eeeda GIT binary patch literal 115 zcmZ?wbhEHb$;m-ML6(-5hK7cUii#2v z5*!>H3^1VhlZBCifssK6BmgplfyL0^gy-tL#S<2~>-s47-8*71uQ0+b*yps@*3<$M c(T9E|OI0SbJf7qrz{Aa`W)PrfD9B(90F2%y>i_@% literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/sigma1.gif b/lefdef/doc/defapiWN/images/sigma1.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd4939b672a10f6dccbd67715280cea74990a72c GIT binary patch literal 135 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu$UN}@XR)SE}-4+)KOH>xM^ZgU literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/spade.gif b/lefdef/doc/defapiWN/images/spade.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc55199c42f6251ea7cde8a4e2964f7687e6ff27 GIT binary patch literal 122 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z@lPs!gKZB5&@+*60S}OZbmWAK>;m^GM$ZG*Beu$i%O;*NS?~UU=0A( C93AEW literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/sumation.gif b/lefdef/doc/defapiWN/images/sumation.gif new file mode 100644 index 0000000000000000000000000000000000000000..f65c1ddc6f666d05fa0e78b8555ab1797fbfd8e2 GIT binary patch literal 77 zcmZ?wbhEHbCMz{sEjk^z~)z@lPs!gKZ3MK6qAd3ddmm>S4(s*<(&(%RNdULR$SuoyKTpL26M H2ZJ>L%*-X* literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/therefor.gif b/lefdef/doc/defapiWN/images/therefor.gif new file mode 100644 index 0000000000000000000000000000000000000000..95944f41d016e6bfe322c85717be224b389c76a3 GIT binary patch literal 111 zcmZ?wbhEHb@#^7TbUmo~s?aRki&lcO{v2gjg__N?m#|?)smtvTqnxzbi?iOm z`wuoiNS4WHrXi}f605+A?54DFA9-EgIk4lAd<>vaXoLihCKfP>V-A-AXw^EyN?%Wz zR_A?gJ;v_|JZ@5}macoWcE#Bl+FW%vKkn+cuX_UL=U{iH*OMiNa3~TJ7=;uAxX4Gh zNO>6Jt_J->%*s>ZcR%s hJ>a;WAd3EzgEB1uLDYXG9%EKL9a literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/univrsal.gif b/lefdef/doc/defapiWN/images/univrsal.gif new file mode 100644 index 0000000000000000000000000000000000000000..effc1a5fba72adb9b56c56f6ca69f9143c43666f GIT binary patch literal 135 zcmZ?wbhEHblCGj?*M&2x#Fav1TasHk$+uk*s%2`5+!_dnNVVz34P_0cY) literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/upsilon.gif b/lefdef/doc/defapiWN/images/upsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8a2b3389f27abf4a7a8593e1fa193b2e606df46 GIT binary patch literal 133 zcmZ?wbhEHb0~jd&WMO1rU}Vq%@jzxUuoxMf@Lau?m9x_$woi%ktRpX@#^76XG5o~xHWnV~799CFaZ`=Q3wCJ}do2-n3N f(_dR`eWFvj;rsrW4bLQES=ihcU)b!zz+epkQ~WGS literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/video.gif b/lefdef/doc/defapiWN/images/video.gif new file mode 100644 index 0000000000000000000000000000000000000000..f339ffb6bdd11220d4e530f1798597d12a1bab46 GIT binary patch literal 906 zcmV;519kjINk%w1VHyAz0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui02%-n000PY009UbDDa=bg9r&K1dxy+!iNP95^VSoqCrrnR8`Kp+#Yu g3~EznQ<*nQ{*?KYrO}s4v1-jab12ZBR|5h7JB8)3VgLXD literal 0 HcmV?d00001 diff --git a/lefdef/doc/defapiWN/images/weierstr.gif b/lefdef/doc/defapiWN/images/weierstr.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f9689b8080c0d57935d6802003b3e14b7def1e6 GIT binary patch literal 153 zcmZ?wbhEHb@#^7B_5@?L763@Ca + + + + What's New in DEF 5.8 C/C++ Programming Interface -- About This Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in DEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

+
+

About This Manual

+

This document provides information on new and changed features for version 5.8 of the C and C++ application programming interface (API) used to read and write Cadence® Design Exchange Format (DEF) files.

+

How This Document Is Organized

+

This What's New document is organized into the following chapters:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
New Features
+
+
This chapter describes features that were added since version 5.7 of the DEF API. New features are those that introduce new functionality into the DEF API. Any enhancements made to existing statements to support a new feature are also described in this chapter.
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Changed Features
+
+
This chapter discusses features that were changed since version 5.7 of the DEF API. Changed features include such things as changes in default behavior, changes in whether keywords and statements are required, and any other changes that do not reflect new functionality.
+

Related Documents

+

The following documents provide detailed information about LEF and DEF, and the LEF and DEF application programming interfaces.

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF/DEF Language Reference
+
+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
What's New in LEF/DEF
+
+

1/20/17

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/defapiWN/titlecopy.html b/lefdef/doc/defapiWN/titlecopy.html new file mode 100644 index 00000000..f3ad9b8b --- /dev/null +++ b/lefdef/doc/defapiWN/titlecopy.html @@ -0,0 +1,220 @@ + + + + + What's New in DEF 5.8 C/C++ Programming Interface -- What's New in DEF 5.8 C/C++ Programming Interface + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in DEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

+
+

+ + What's New in DEF 5.8 C/C++ Programming Interface +

+

Product Version 5.8
May 2017

+

© 2015 Cadence Design Systems, Inc. All rights reserved.
Printed in the United States of America.

+

Cadence Design Systems, Inc., 555 River Oaks Parkway, San Jose, CA 95134, USA

+

Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence) contained in this document are attributed to Cadence with the appropriate symbol. For queries regarding Cadence's trademarks, contact the corporate legal department at the address shown above or call 800.862.4522.

+

Open SystemC, Open SystemC Initiative, OSCI, SystemC, and SystemC Initiative are trademarks or registered trademarks of Open SystemC Initiative, Inc. in the United States and other countries and are used with permission.

+

All other trademarks are the property of their respective holders.

+

Restricted Print Permission: This publication is protected by copyright and any unauthorized use of this publication may violate copyright, trademark, and other laws. Except as specified in this permission statement, this publication may not be copied, reproduced, modified, published, uploaded, posted, transmitted, or distributed in any way, without prior written permission from Cadence. This statement grants you permission to print one (1) hard copy of this publication subject to the following conditions:

+ + + + +

Disclaimer: Information in this publication is subject to change without notice and does not represent a commitment on the part of Cadence. The information contained herein is the proprietary and confidential information of Cadence or its licensors, and is supplied subject to, and may be used only by Cadence's customer in accordance with, a written agreement between Cadence and its customer. Except as may be explicitly set forth in such agreement, Cadence does not make, and expressly disclaims, any representations or warranties as to the completeness, accuracy or usefulness of the information contained in this document. Cadence does not warrant that use of such information will not infringe any third party rights, nor does Cadence assume any liability for damages or costs of any kind that may result from use of such information.

+

Restricted Rights: Use, duplication, or disclosure by the Government is subject to restrictions as set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor.

+

 

+

 

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/appA_LEFexamples.html b/lefdef/doc/lefapi/appA_LEFexamples.html new file mode 100644 index 00000000..60f0421f --- /dev/null +++ b/lefdef/doc/lefapi/appA_LEFexamples.html @@ -0,0 +1,12546 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

A 

+

LEF Reader and Writer Examples

+

This appendix contains examples of the Cadence® Library Exchange Format (LEF) reader and writer.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF Reader Program
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF Writer Program
+
+

LEF Reader Program

+

+ #ifdef WIN32 +

+

+ #pragma warning (disable : 4786) +

+

+ #endif +

+

+   +

+

+ #include <stdio.h> +

+

+ #include <string.h> +

+

+ #include <iostream.h> +

+

+ #include <malloc.h> +

+

+   +

+

+ #ifndef WIN32 +

+

+ # include <unistd.h> +

+

+ #else +

+

+ # include <windows.h> +

+

+ #endif /* not WIN32 */ +

+

+ #include "lefrReader.hpp" +

+

+ #include "lefwWriter.hpp" +

+

+ #include "lefiDebug.hpp" +

+

+ #include "lefiEncryptInt.hpp" +

+

+ #include "lefiUtil.hpp" +

+

+   +

+

+ char defaultName[128]; +

+

+ char defaultOut[128]; +

+

+ FILE* fout; +

+

+ int printing = 0; // Printing the output. +

+

+ int parse65nm = 0; +

+

+   +

+

+ // TX_DIR:TRANSLATION ON +

+

+ +

+

+ void dataError() { +

+

+ fprintf(fout, "ERROR: returned user data is not correct!\n"); +

+

+ } +

+

+ +

+

+ void checkType(lefrCallbackType_e c) { +

+

+ if (c >= 0 && c <= lefrLibraryEndCbkType) { +

+

+ // OK +

+

+ } else { +

+

+ fprintf(fout, "ERROR: callback type is out of bounds!\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ char* orientStr(int orient) { +

+

+ switch (orient) { +

+

+ case 0: return ((char*)"N"); +

+

+ case 1: return ((char*)"W"); +

+

+ case 2: return ((char*)"S"); +

+

+ case 3: return ((char*)"E"); +

+

+ case 4: return ((char*)"FN"); +

+

+ case 5: return ((char*)"FW"); +

+

+ case 6: return ((char*)"FS"); +

+

+ case 7: return ((char*)"FE"); +

+

+ }; +

+

+ return ((char*)"BOGUS"); +

+

+ } +

+

+   +

+

+ void lefVia(lefiVia* via) { +

+

+ int i, j; +

+

+   +

+

+ lefrSetCaseSensitivity(1); +

+

+ fprintf(fout, "VIA %s ", via->lefiVia::name()); +

+

+ if (via->lefiVia::hasDefault()) +

+

+ fprintf(fout, "DEFAULT"); +

+

+ else if (via->lefiVia::hasGenerated()) +

+

+ fprintf(fout, "GENERATED"); +

+

+ fprintf(fout, "\n"); +

+

+ if (via->lefiVia::hasTopOfStack()) +

+

+ fprintf(fout, " TOPOFSTACKONLY\n"); +

+

+ if (via->lefiVia::hasForeign()) { +

+

+ fprintf(fout, " FOREIGN %s ", via->lefiVia::foreign()); +

+

+ if (via->lefiVia::hasForeignPnt()) { +

+

+ fprintf(fout, "( %g %g ) ", via->lefiVia::foreignX(), +

+

+ via->lefiVia::foreignY()); +

+

+ if (via->lefiVia::hasForeignOrient()) +

+

+ fprintf(fout, "%s ", orientStr(via->lefiVia::foreignOrient())); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ if (via->lefiVia::hasProperties()) { +

+

+ fprintf(fout, " PROPERTY "); +

+

+ for (i = 0; i < via->lefiVia::numProperties(); i++) { +

+

+ fprintf(fout, "%s ", via->lefiVia::propName(i)); +

+

+ if (via->lefiVia::propIsNumber(i)) +

+

+ fprintf(fout, "%g ", via->lefiVia::propNumber(i)); +

+

+ if (via->lefiVia::propIsString(i)) +

+

+ fprintf(fout, "%s ", via->lefiVia::propValue(i)); +

+

+ switch (via->lefiVia::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ if (via->lefiVia::hasResistance()) +

+

+ fprintf(fout, " RESISTANCE %g ;\n", via->lefiVia::resistance()); +

+

+ if (via->lefiVia::numLayers() > 0) { +

+

+ for (i = 0; i < via->lefiVia::numLayers(); i++) { +

+

+ fprintf(fout, " LAYER %s\n", via->lefiVia::layerName(i)); +

+

+ for (j = 0; j < via->lefiVia::numRects(i); j++) +

+

+ fprintf(fout, " RECT ( %f %f ) ( %f %f ) ;\n", +

+

+ via->lefiVia::xl(i, j), via->lefiVia::yl(i, j), +

+

+ via->lefiVia::xh(i, j), via->lefiVia::yh(i, j)); +

+

+ for (j = 0; j < via->lefiVia::numPolygons(i); j++) { +

+

+ struct lefiGeomPolygon poly; +

+

+ poly = via->lefiVia::getPolygon(i, j); +

+

+ fprintf(fout, " POLYGON "); +

+

+ for (int k = 0; k < poly.numPoints; k++) +

+

+ fprintf(fout, " %g %g ", poly.x[k], poly.y[k]); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ } +

+

+ if (via->lefiVia::hasViaRule()) { +

+

+ fprintf(fout, " VIARULE %s ;\n", via->lefiVia::viaRuleName()); +

+

+ fprintf(fout, " CUTSIZE %g %g ;\n", via->lefiVia::xCutSize(), +

+

+ via->lefiVia::yCutSize()); +

+

+ fprintf(fout, " LAYERS %s %s %s ;\n", via->lefiVia::botMetalLayer(), +

+

+ via->lefiVia::cutLayer(), via->lefiVia::topMetalLayer()); +

+

+ fprintf(fout, " CUTSPACING %g %g ;\n", via->lefiVia::xCutSpacing(), +

+

+ via->lefiVia::yCutSpacing()); +

+

+ fprintf(fout, " ENCLOSURE %g %g %g %g ;\n", via->lefiVia::xBotEnc(), +

+

+ via->lefiVia::yBotEnc(), via->lefiVia::xTopEnc(), +

+

+ via->lefiVia::yTopEnc()); +

+

+ if (via->lefiVia::hasRowCol()) +

+

+ fprintf(fout, " ROWCOL %d %d ;\n", via->lefiVia::numCutRows(), +

+

+ via->lefiVia::numCutCols()); +

+

+ if (via->lefiVia::hasOrigin()) +

+

+ fprintf(fout, " ORIGIN %g %g ;\n", via->lefiVia::xOffset(), +

+

+ via->lefiVia::yOffset()); +

+

+ if (via->lefiVia::hasOffset()) +

+

+ fprintf(fout, " OFFSET %g %g %g %g ;\n", via->lefiVia::xBotOffset(), +

+

+ via->lefiVia::yBotOffset(), via->lefiVia::xTopOffset(), +

+

+ via->lefiVia::yTopOffset()); +

+

+ if (via->lefiVia::hasCutPattern()) +

+

+ fprintf(fout, " PATTERN %s ;\n", via->lefiVia::cutPattern()); +

+

+ } +

+

+ fprintf(fout, "END %s\n", via->lefiVia::name()); +

+

+   +

+

+ return; +

+

+ } +

+

+   +

+

+ void lefSpacing(lefiSpacing* spacing) { +

+

+ fprintf(fout, " SAMENET %s %s %g ", spacing->lefiSpacing::name1(), +

+

+ spacing->lefiSpacing::name2(), spacing->lefiSpacing::distance()); +

+

+ if (spacing->lefiSpacing::hasStack()) +

+

+ fprintf(fout, "STACK "); +

+

+ fprintf(fout,";\n"); +

+

+ return; +

+

+ } +

+

+   +

+

+ void lefViaRuleLayer(lefiViaRuleLayer* vLayer) { +

+

+ fprintf(fout, " LAYER %s ;\n", vLayer->lefiViaRuleLayer::name()); +

+

+ if (vLayer->lefiViaRuleLayer::hasDirection()) { +

+

+ if (vLayer->lefiViaRuleLayer::isHorizontal()) +

+

+ fprintf(fout, " DIRECTION HORIZONTAL ;\n"); +

+

+ if (vLayer->lefiViaRuleLayer::isVertical()) +

+

+ fprintf(fout, " DIRECTION VERTICAL ;\n"); +

+

+ } +

+

+ if (vLayer->lefiViaRuleLayer::hasEnclosure()) { +

+

+ fprintf(fout, " ENCLOSURE %g %g ;\n", +

+

+ vLayer->lefiViaRuleLayer::enclosureOverhang1(), +

+

+ vLayer->lefiViaRuleLayer::enclosureOverhang2()); +

+

+ } +

+

+ if (vLayer->lefiViaRuleLayer::hasWidth()) +

+

+ fprintf(fout, " WIDTH %g TO %g ;\n", +

+

+ vLayer->lefiViaRuleLayer::widthMin(), +

+

+ vLayer->lefiViaRuleLayer::widthMax()); +

+

+ if (vLayer->lefiViaRuleLayer::hasResistance()) +

+

+ fprintf(fout, " RESISTANCE %g ;\n", +

+

+ vLayer->lefiViaRuleLayer::resistance()); +

+

+ if (vLayer->lefiViaRuleLayer::hasOverhang()) +

+

+ fprintf(fout, " OVERHANG %g ;\n", +

+

+ vLayer->lefiViaRuleLayer::overhang()); +

+

+ if (vLayer->lefiViaRuleLayer::hasMetalOverhang()) +

+

+ fprintf(fout, " METALOVERHANG %g ;\n", +

+

+ vLayer->lefiViaRuleLayer::metalOverhang()); +

+

+ if (vLayer->lefiViaRuleLayer::hasSpacing()) +

+

+ fprintf(fout, " SPACING %g BY %g ;\n", +

+

+ vLayer->lefiViaRuleLayer::spacingStepX(), +

+

+ vLayer->lefiViaRuleLayer::spacingStepY()); +

+

+ if (vLayer->lefiViaRuleLayer::hasRect()) +

+

+ fprintf(fout, " RECT ( %f %f ) ( %f %f ) ;\n", +

+

+ vLayer->lefiViaRuleLayer::xl(), vLayer->lefiViaRuleLayer::yl(), +

+

+ vLayer->lefiViaRuleLayer::xh(), vLayer->lefiViaRuleLayer::yh()); +

+

+ return; +

+

+ } +

+

+ +

+

+ void prtGeometry(lefiGeometries* geometry) { +

+

+ int numItems = geometry->lefiGeometries::numItems(); +

+

+ int i, j; +

+

+ lefiGeomPath* path; +

+

+ lefiGeomPathIter* pathIter; +

+

+ lefiGeomRect* rect; +

+

+ lefiGeomRectIter* rectIter; +

+

+ lefiGeomPolygon* polygon; +

+

+ lefiGeomPolygonIter* polygonIter; +

+

+ lefiGeomVia* via; +

+

+ lefiGeomViaIter* viaIter; +

+

+ +

+

+ for (i = 0; i < numItems; i++) { +

+

+ switch (geometry->lefiGeometries::itemType(i)) { +

+

+ case lefiGeomClassE: +

+

+ fprintf(fout, "CLASS %s ", +

+

+ geometry->lefiGeometries::getClass(i)); +

+

+ break; +

+

+ case lefiGeomLayerE: +

+

+ fprintf(fout, " LAYER %s ;\n", +

+

+ geometry->lefiGeometries::getLayer(i)); +

+

+ break; +

+

+ case lefiGeomLayerExceptPgNetE: +

+

+ fprintf(fout, " EXCEPTPGNET ;\n"); +

+

+ break; +

+

+ case lefiGeomLayerMinSpacingE: +

+

+ fprintf(fout, " SPACING %g ;\n", +

+

+ geometry->lefiGeometries::getLayerMinSpacing(i)); +

+

+ break; +

+

+ case lefiGeomLayerRuleWidthE: +

+

+ fprintf(fout, " DESIGNRULEWIDTH %g ;\n", +

+

+ geometry->lefiGeometries::getLayerRuleWidth(i)); +

+

+ break; +

+

+ case lefiGeomWidthE: +

+

+ fprintf(fout, " WIDTH %g ;\n", +

+

+ geometry->lefiGeometries::getWidth(i)); +

+

+ break; +

+

+ case lefiGeomPathE: +

+

+ path = geometry->lefiGeometries::getPath(i); +

+

+ fprintf(fout, " PATH "); +

+

+ for (j = 0; j < path->numPoints; j++) { +

+

+ if (j+1 == path->numPoints) // last one on the list +

+

+ fprintf(fout, " ( %g %g ) ;\n", path->x[j], path->y[j]); +

+

+ else +

+

+ fprintf(fout, " ( %g %g )\n", path->x[j], path->y[j]); +

+

+ } +

+

+ break; +

+

+ case lefiGeomPathIterE: +

+

+ pathIter = geometry->lefiGeometries::getPathIter(i); +

+

+ fprintf(fout, " PATH ITERATED "); +

+

+ for (j = 0; j < pathIter->numPoints; j++) +

+

+ fprintf(fout, " ( %g %g )\n", pathIter->x[j], +

+

+ pathIter->y[j]); +

+

+ fprintf(fout, " DO %g BY %g STEP %g %g ;\n", pathIter->xStart, +

+

+ pathIter->yStart, pathIter->xStep, pathIter->yStep); +

+

+ break; +

+

+ case lefiGeomRectE: +

+

+ rect = geometry->lefiGeometries::getRect(i); +

+

+ fprintf(fout, " RECT ( %f %f ) ( %f %f ) ;\n", rect->xl, +

+

+ rect->yl, rect->xh, rect->yh); +

+

+ break; +

+

+ case lefiGeomRectIterE: +

+

+ rectIter = geometry->lefiGeometries::getRectIter(i); +

+

+ fprintf(fout, " RECT ITERATE ( %f %f ) ( %f %f )\n", +

+

+ rectIter->xl, rectIter->yl, rectIter->xh, rectIter->yh); +

+

+ fprintf(fout, " DO %g BY %g STEP %g %g ;\n", +

+

+ rectIter->xStart, rectIter->yStart, rectIter->xStep, +

+

+ rectIter->yStep); +

+

+ break; +

+

+ case lefiGeomPolygonE: +

+

+ polygon = geometry->lefiGeometries::getPolygon(i); +

+

+ fprintf(fout, " POLYGON "); +

+

+ for (j = 0; j < polygon->numPoints; j++) { +

+

+ if (j+1 == polygon->numPoints) // last one on the list +

+

+ fprintf(fout, " ( %g %g ) ;\n", polygon->x[j], +

+

+ polygon->y[j]); +

+

+ else +

+

+ fprintf(fout, " ( %g %g )\n", polygon->x[j], +

+

+ polygon->y[j]); +

+

+ } +

+

+ break; +

+

+ case lefiGeomPolygonIterE: +

+

+ polygonIter = geometry->lefiGeometries::getPolygonIter(i); +

+

+ fprintf(fout, " POLYGON ITERATE"); +

+

+ for (j = 0; j < polygonIter->numPoints; j++) +

+

+ fprintf(fout, " ( %g %g )\n", polygonIter->x[j], +

+

+ polygonIter->y[j]); +

+

+ fprintf(fout, " DO %g BY %g STEP %g %g ;\n", +

+

+ polygonIter->xStart, polygonIter->yStart, +

+

+ polygonIter->xStep, polygonIter->yStep); +

+

+ break; +

+

+ case lefiGeomViaE: +

+

+ via = geometry->lefiGeometries::getVia(i); +

+

+ fprintf(fout, " VIA ( %g %g ) %s ;\n", via->x, via->y, +

+

+ via->name); +

+

+ break; +

+

+ case lefiGeomViaIterE: +

+

+ viaIter = geometry->lefiGeometries::getViaIter(i); +

+

+ fprintf(fout, " VIA ITERATE ( %g %g ) %s\n", viaIter->x, +

+

+ viaIter->y, viaIter->name); +

+

+ fprintf(fout, " DO %g BY %g STEP %g %g ;\n", +

+

+ viaIter->xStart, viaIter->yStart, +

+

+ viaIter->xStep, viaIter->yStep); +

+

+ break; +

+

+ default: +

+

+ fprintf(fout, "BOGUS geometries type.\n"); +

+

+ break; +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ int antennaCB(lefrCallbackType_e c, double value, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ switch (c) { +

+

+ case lefrAntennaInputCbkType: +

+

+ fprintf(fout, "ANTENNAINPUTGATEAREA %g ;\n", value); +

+

+ break; +

+

+ case lefrAntennaInoutCbkType: +

+

+ fprintf(fout, "ANTENNAINOUTDIFFAREA %g ;\n", value); +

+

+ break; +

+

+ case lefrAntennaOutputCbkType: +

+

+ fprintf(fout, "ANTENNAOUTPUTDIFFAREA %g ;\n", value); +

+

+ break; +

+

+ case lefrInputAntennaCbkType: +

+

+ fprintf(fout, "INPUTPINANTENNASIZE %g ;\n", value); +

+

+ break; +

+

+ case lefrOutputAntennaCbkType: +

+

+ fprintf(fout, "OUTPUTPINANTENNASIZE %g ;\n", value); +

+

+ break; +

+

+ case lefrInoutAntennaCbkType: +

+

+ fprintf(fout, "INOUTPINANTENNASIZE %g ;\n", value); +

+

+ break; +

+

+ default: +

+

+ fprintf(fout, "BOGUS antenna type.\n"); +

+

+ break; +

+

+ } +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int arrayBeginCB(lefrCallbackType_e c, const char* name, lefiUserData ud) { +

+

+ int status; +

+

+   +

+

+ checkType(c); +

+

+ status = lefwStartArray(name); +

+

+ if (status != LEFW_OK) +

+

+ return status; +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int arrayCB(lefrCallbackType_e c, lefiArray* a, lefiUserData ud) { +

+

+ int status, i, j, defCaps; +

+

+ lefiSitePattern* pattern; +

+

+ lefiTrackPattern* track; +

+

+ lefiGcellPattern* gcell; +

+

+   +

+

+ checkType(c); +

+

+ if (a->lefiArray::numSitePattern() > 0) { +

+

+ for (i = 0; i < a->lefiArray::numSitePattern(); i++) { +

+

+ pattern = a->lefiArray::sitePattern(i); +

+

+ status = lefwArraySite(pattern->lefiSitePattern::name(), +

+

+ pattern->lefiSitePattern::x(), +

+

+ pattern->lefiSitePattern::y(), +

+

+ pattern->lefiSitePattern::orient(), +

+

+ pattern->lefiSitePattern::xStart(), +

+

+ pattern->lefiSitePattern::yStart(), +

+

+ pattern->lefiSitePattern::xStep(), +

+

+ pattern->lefiSitePattern::yStep()); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ } +

+

+ } +

+

+ if (a->lefiArray::numCanPlace() > 0) { +

+

+ for (i = 0; i < a->lefiArray::numCanPlace(); i++) { +

+

+ pattern = a->lefiArray::canPlace(i); +

+

+ status = lefwArrayCanplace(pattern->lefiSitePattern::name(), +

+

+ pattern->lefiSitePattern::x(), +

+

+ pattern->lefiSitePattern::y(), +

+

+ pattern->lefiSitePattern::orient(), +

+

+ pattern->lefiSitePattern::xStart(), +

+

+ pattern->lefiSitePattern::yStart(), +

+

+ pattern->lefiSitePattern::xStep(), +

+

+ pattern->lefiSitePattern::yStep()); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ } +

+

+ } +

+

+ if (a->lefiArray::numCannotOccupy() > 0) { +

+

+ for (i = 0; i < a->lefiArray::numCannotOccupy(); i++) { +

+

+ pattern = a->lefiArray::cannotOccupy(i); +

+

+ status = lefwArrayCannotoccupy(pattern->lefiSitePattern::name(), +

+

+ pattern->lefiSitePattern::x(), +

+

+ pattern->lefiSitePattern::y(), +

+

+ pattern->lefiSitePattern::orient(), +

+

+ pattern->lefiSitePattern::xStart(), +

+

+ pattern->lefiSitePattern::yStart(), +

+

+ pattern->lefiSitePattern::xStep(), +

+

+ pattern->lefiSitePattern::yStep()); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ } +

+

+ } +

+

+   +

+

+ if (a->lefiArray::numTrack() > 0) { +

+

+ for (i = 0; i < a->lefiArray::numTrack(); i++) { +

+

+ track = a->lefiArray::track(i); +

+

+ fprintf(fout, " TRACKS %s, %g DO %d STEP %g\n", +

+

+ track->lefiTrackPattern::name(), +

+

+ track->lefiTrackPattern::start(), +

+

+ track->lefiTrackPattern::numTracks(), +

+

+ track->lefiTrackPattern::space()); +

+

+ if (track->lefiTrackPattern::numLayers() > 0) { +

+

+ fprintf(fout, " LAYER "); +

+

+ for (j = 0; j < track->lefiTrackPattern::numLayers(); j++) +

+

+ fprintf(fout, "%s ", track->lefiTrackPattern::layerName(j)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ if (a->lefiArray::numGcell() > 0) { +

+

+ for (i = 0; i < a->lefiArray::numGcell(); i++) { +

+

+ gcell = a->lefiArray::gcell(i); +

+

+ fprintf(fout, " GCELLGRID %s, %g DO %d STEP %g\n", +

+

+ gcell->lefiGcellPattern::name(), +

+

+ gcell->lefiGcellPattern::start(), +

+

+ gcell->lefiGcellPattern::numCRs(), +

+

+ gcell->lefiGcellPattern::space()); +

+

+ } +

+

+ } +

+

+   +

+

+ if (a->lefiArray::numFloorPlans() > 0) { +

+

+ for (i = 0; i < a->lefiArray::numFloorPlans(); i++) { +

+

+ status = lefwStartArrayFloorplan(a->lefiArray::floorPlanName(i)); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ for (j = 0; j < a->lefiArray::numSites(i); j++) { +

+

+ pattern = a->lefiArray::site(i, j); +

+

+ status = lefwArrayFloorplan(a->lefiArray::siteType(i, j), +

+

+ pattern->lefiSitePattern::name(), +

+

+ pattern->lefiSitePattern::x(), +

+

+ pattern->lefiSitePattern::y(), +

+

+ pattern->lefiSitePattern::orient(), +

+

+ (int)pattern->lefiSitePattern::xStart(), +

+

+ (int)pattern->lefiSitePattern::yStart(), +

+

+ pattern->lefiSitePattern::xStep(), +

+

+ pattern->lefiSitePattern::yStep()); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ } +

+

+ status = lefwEndArrayFloorplan(a->lefiArray::floorPlanName(i)); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ } +

+

+ } +

+

+   +

+

+ defCaps = a->lefiArray::numDefaultCaps(); +

+

+ if (defCaps > 0) { +

+

+ status = lefwStartArrayDefaultCap(defCaps); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ for (i = 0; i < defCaps; i++) { +

+

+ status = lefwArrayDefaultCap(a->lefiArray::defaultCapMinPins(i), +

+

+ a->lefiArray::defaultCap(i)); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ } +

+

+ status = lefwEndArrayDefaultCap(); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ } +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int arrayEndCB(lefrCallbackType_e c, const char* name, lefiUserData ud) { +

+

+ int status; +

+

+   +

+

+ checkType(c); +

+

+ status = lefwEndArray(name); +

+

+ if (status != LEFW_OK) +

+

+ return status; +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int busBitCharsCB(lefrCallbackType_e c, const char* busBit, lefiUserData ud) +

+

+ { +

+

+ int status; +

+

+   +

+

+ checkType(c); +

+

+ status = lefwBusBitChars(busBit); +

+

+ if (status != LEFW_OK) +

+

+ dataError(); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int caseSensCB(lefrCallbackType_e c, int caseSense, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ if (caseSense == TRUE) +

+

+ fprintf(fout, "NAMESCASESENSITIVE ON ;\n"); +

+

+ else +

+

+ fprintf(fout, "NAMESCASESENSITIVE OFF ;\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int clearanceCB(lefrCallbackType_e c, const char* name, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "CLEARANCEMEASURE %s ;\n", name); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int dividerCB(lefrCallbackType_e c, const char* name, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "DIVIDER %s ;\n", name); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int noWireExtCB(lefrCallbackType_e c, const char* name, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "NOWIREEXTENSION %s ;\n", name); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int edge1CB(lefrCallbackType_e c, double name, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "EDGERATETHRESHOLD1 %g ;\n", name); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int edge2CB(lefrCallbackType_e c, double name, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "EDGERATETHRESHOLD2 %g ;\n", name); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int edgeScaleCB(lefrCallbackType_e c, double name, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "EDGERATESCALEFACTORE %g ;\n", name); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int dielectricCB(lefrCallbackType_e c, double dielectric, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "DIELECTRIC %g ;\n", dielectric); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int irdropBeginCB(lefrCallbackType_e c, void* ptr, lefiUserData ud){ +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "IRDROP\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int irdropCB(lefrCallbackType_e c, lefiIRDrop* irdrop, lefiUserData ud) { +

+

+ int i; +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, " TABLE %s ", irdrop->lefiIRDrop::name()); +

+

+ for (i = 0; i < irdrop->lefiIRDrop::numValues(); i++) +

+

+ fprintf(fout, "%g %g ", irdrop->lefiIRDrop::value1(i), +

+

+ irdrop->lefiIRDrop::value2(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int irdropEndCB(lefrCallbackType_e c, void* ptr, lefiUserData ud){ +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "END IRDROP\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int layerCB(lefrCallbackType_e c, lefiLayer* layer, lefiUserData ud) { +

+

+ int i, j, k; +

+

+ int numPoints, propNum; +

+

+ double *widths, *current; +

+

+ lefiLayerDensity* density; +

+

+ lefiAntennaPWL* pwl; +

+

+ lefiSpacingTable* spTable; +

+

+ lefiInfluence* influence; +

+

+ lefiParallel* parallel; +

+

+ lefiTwoWidths* twoWidths; +

+

+ char pType; +

+

+ int numMinCut, numMinenclosed; +

+

+ lefiAntennaModel* aModel; +

+

+ lefiOrthogonal* ortho; +

+

+   +

+

+ checkType(c); +

+

+ lefrSetCaseSensitivity(0); +

+

+   +

+

+ if (parse65nm) +

+

+ layer->lefiLayer::parse65nmRules(); +

+

+   +

+

+ fprintf(fout, "LAYER %s\n", layer->lefiLayer::name()); +

+

+ if (layer->lefiLayer::hasType()) +

+

+ fprintf(fout, " TYPE %s ;\n", layer->lefiLayer::type()); +

+

+ if (layer->lefiLayer::hasPitch()) +

+

+ fprintf(fout, " PITCH %g ;\n", layer->lefiLayer::pitch()); +

+

+ else if (layer->lefiLayer::hasXYPitch()) +

+

+ fprintf(fout, " PITCH %g %g ;\n", layer->lefiLayer::pitchX(), +

+

+ layer->lefiLayer::pitchY()); +

+

+ if (layer->lefiLayer::hasOffset()) +

+

+ fprintf(fout, " OFFSET %g ;\n", layer->lefiLayer::offset()); +

+

+ else if (layer->lefiLayer::hasXYOffset()) +

+

+ fprintf(fout, " OFFSET %g %g ;\n", layer->lefiLayer::offsetX(), +

+

+ layer->lefiLayer::offsetY()); +

+

+ if (layer->lefiLayer::hasDiagPitch()) +

+

+ fprintf(fout, " DIAGPITCH %g ;\n", layer->lefiLayer::diagPitch()); +

+

+ else if (layer->lefiLayer::hasXYDiagPitch()) +

+

+ fprintf(fout, " DIAGPITCH %g %g ;\n", layer->lefiLayer::diagPitchX(), +

+

+ layer->lefiLayer::diagPitchY()); +

+

+ if (layer->lefiLayer::hasDiagWidth()) +

+

+ fprintf(fout, " DIAGWIDTH %g ;\n", layer->lefiLayer::diagWidth()); +

+

+ if (layer->lefiLayer::hasDiagSpacing()) +

+

+ fprintf(fout, " DIAGSPACING %g ;\n", layer->lefiLayer::diagSpacing()); +

+

+ if (layer->lefiLayer::hasWidth()) +

+

+ fprintf(fout, " WIDTH %g ;\n", layer->lefiLayer::width()); +

+

+ if (layer->lefiLayer::hasArea()) +

+

+ fprintf(fout, " AREA %g ;\n", layer->lefiLayer::area()); +

+

+ if (layer->lefiLayer::hasSlotWireWidth()) +

+

+ fprintf(fout, " SLOTWIREWIDTH %g ;\n", layer->lefiLayer::slotWireWidth()); +

+

+ if (layer->lefiLayer::hasSlotWireLength()) +

+

+ fprintf(fout, " SLOTWIRELENGTH %g ;\n", +

+

+ layer->lefiLayer::slotWireLength()); +

+

+ if (layer->lefiLayer::hasSlotWidth()) +

+

+ fprintf(fout, " SLOTWIDTH %g ;\n", layer->lefiLayer::slotWidth()); +

+

+ if (layer->lefiLayer::hasSlotLength()) +

+

+ fprintf(fout, " SLOTLENGTH %g ;\n", layer->lefiLayer::slotLength()); +

+

+ if (layer->lefiLayer::hasMaxAdjacentSlotSpacing()) +

+

+ fprintf(fout, " MAXADJACENTSLOTSPACING %g ;\n", +

+

+ layer->lefiLayer::maxAdjacentSlotSpacing()); +

+

+ if (layer->lefiLayer::hasMaxCoaxialSlotSpacing()) +

+

+ fprintf(fout, " MAXCOAXIALSLOTSPACING %g ;\n", +

+

+ layer->lefiLayer::maxCoaxialSlotSpacing()); +

+

+ if (layer->lefiLayer::hasMaxEdgeSlotSpacing()) +

+

+ fprintf(fout, " MAXEDGESLOTSPACING %g ;\n", +

+

+ layer->lefiLayer::maxEdgeSlotSpacing()); +

+

+ if (layer->lefiLayer::hasMaxFloatingArea()) // 5.7 +

+

+ fprintf(fout, " MAXFLOATINGAREA %g ;\n", +

+

+ layer->lefiLayer::maxFloatingArea()); +

+

+ if (layer->lefiLayer::hasArraySpacing()) { // 5.7 +

+

+ fprintf(fout, " ARRAYSPACING "); +

+

+ if (layer->lefiLayer::hasLongArray()) +

+

+ fprintf(fout, "LONGARRAY "); +

+

+ if (layer->lefiLayer::hasViaWidth()) +

+

+ fprintf(fout, "WIDTH %g ", layer->lefiLayer::viaWidth()); +

+

+ fprintf(fout, "CUTSPACING %g", layer->lefiLayer::cutSpacing()); +

+

+ for (i = 0; i < layer->lefiLayer::numArrayCuts(); i++) +

+

+ fprintf(fout, "\n\tARRAYCUTS %g SPACING %g", +

+

+ layer->lefiLayer::arrayCuts(i), +

+

+ layer->lefiLayer::arraySpacing(i)); +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ if (layer->lefiLayer::hasSplitWireWidth()) +

+

+ fprintf(fout, " SPLITWIREWIDTH %g ;\n", +

+

+ layer->lefiLayer::splitWireWidth()); +

+

+ if (layer->lefiLayer::hasMinimumDensity()) +

+

+ fprintf(fout, " MINIMUMDENSITY %g ;\n", +

+

+ layer->lefiLayer::minimumDensity()); +

+

+ if (layer->lefiLayer::hasMaximumDensity()) +

+

+ fprintf(fout, " MAXIMUMDENSITY %g ;\n", +

+

+ layer->lefiLayer::maximumDensity()); +

+

+ if (layer->lefiLayer::hasDensityCheckWindow()) +

+

+ fprintf(fout, " DENSITYCHECKWINDOW %g %g ;\n", +

+

+ layer->lefiLayer::densityCheckWindowLength(), +

+

+ layer->lefiLayer::densityCheckWindowWidth()); +

+

+ if (layer->lefiLayer::hasDensityCheckStep()) +

+

+ fprintf(fout, " DENSITYCHECKSTEP %g ;\n", +

+

+ layer->lefiLayer::densityCheckStep()); +

+

+ if (layer->lefiLayer::hasFillActiveSpacing()) +

+

+ fprintf(fout, " FILLACTIVESPACING %g ;\n", +

+

+ layer->lefiLayer::fillActiveSpacing()); +

+

+ // 5.4.1 +

+

+ numMinCut = layer->lefiLayer::numMinimumcut(); +

+

+ if (numMinCut > 0) { +

+

+ for (i = 0; i < numMinCut; i++) { +

+

+ fprintf(fout, " MINIMUMCUT %d WIDTH %g ", +

+

+ layer->lefiLayer::minimumcut(i), +

+

+ layer->lefiLayer::minimumcutWidth(i)); +

+

+ if (layer->lefiLayer::hasMinimumcutWithin(i)) +

+

+ fprintf(fout, "WITHIN %g ", layer->lefiLayer::minimumcutWithin(i)); +

+

+ if (layer->lefiLayer::hasMinimumcutConnection(i)) +

+

+ fprintf(fout, "%s ", layer->lefiLayer::minimumcutConnection(i)); +

+

+ if (layer->lefiLayer::hasMinimumcutNumCuts(i)) +

+

+ fprintf(fout, "LENGTH %g WITHIN %g ", +

+

+ layer->lefiLayer::minimumcutLength(i), +

+

+ layer->lefiLayer::minimumcutDistance(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ // 5.4.1 +

+

+ if (layer->lefiLayer::hasMaxwidth()) { +

+

+ fprintf(fout, " MAXWIDTH %g ;\n", layer->lefiLayer::maxwidth()); +

+

+ } +

+

+ // 5.5 +

+

+ if (layer->lefiLayer::hasMinwidth()) { +

+

+ fprintf(fout, " MINWIDTH %g ;\n", layer->lefiLayer::minwidth()); +

+

+ } +

+

+ // 5.5 +

+

+ numMinenclosed = layer->lefiLayer::numMinenclosedarea(); +

+

+ if (numMinenclosed > 0) { +

+

+ for (i = 0; i < numMinenclosed; i++) { +

+

+ fprintf(fout, " MINENCLOSEDAREA %g ", +

+

+ layer->lefiLayer::minenclosedarea(i)); +

+

+ if (layer->lefiLayer::hasMinenclosedareaWidth(i)) +

+

+ fprintf(fout, "MINENCLOSEDAREAWIDTH %g ", +

+

+ layer->lefiLayer::minenclosedareaWidth(i)); +

+

+ fprintf (fout, ";\n"); +

+

+ } +

+

+ } +

+

+ // 5.4.1 & 5.6 +

+

+ if (layer->lefiLayer::hasMinstep()) { +

+

+ for (i = 0; i < layer->lefiLayer::numMinstep(); i++) { +

+

+ fprintf(fout, " MINSTEP %g ", layer->lefiLayer::minstep(i)); +

+

+ if (layer->lefiLayer::hasMinstepType(i)) +

+

+ fprintf(fout, "%s ", layer->lefiLayer::minstepType(i)); +

+

+ if (layer->lefiLayer::hasMinstepLengthsum(i)) +

+

+ fprintf(fout, "LENGTHSUM %g ", +

+

+ layer->lefiLayer::minstepLengthsum(i)); +

+

+ if (layer->lefiLayer::hasMinstepMaxedges(i)) +

+

+ fprintf(fout, "MAXEDGES %d ", layer->lefiLayer::minstepMaxedges(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ // 5.4.1 +

+

+ if (layer->lefiLayer::hasProtrusion()) { +

+

+ fprintf(fout, " PROTRUSIONWIDTH %g LENGTH %g WIDTH %g ;\n", +

+

+ layer->lefiLayer::protrusionWidth1(), +

+

+ layer->lefiLayer::protrusionLength(), +

+

+ layer->lefiLayer::protrusionWidth2()); +

+

+ } +

+

+ if (layer->lefiLayer::hasSpacingNumber()) { +

+

+ for (i = 0; i < layer->lefiLayer::numSpacing(); i++) { +

+

+ fprintf(fout, " SPACING %g ", layer->lefiLayer::spacing(i)); +

+

+ if (layer->lefiLayer::hasSpacingName(i)) +

+

+ fprintf(fout, "LAYER %s ", layer->lefiLayer::spacingName(i)); +

+

+ if (layer->lefiLayer::hasSpacingLayerStack(i)) +

+

+ fprintf(fout, "STACK "); // 5.7 +

+

+ if (layer->lefiLayer::hasSpacingAdjacent(i)) +

+

+ fprintf(fout, "ADJACENTCUTS %d WITHIN %g ", +

+

+ layer->lefiLayer::spacingAdjacentCuts(i), +

+

+ layer->lefiLayer::spacingAdjacentWithin(i)); +

+

+ if (layer->lefiLayer::hasSpacingAdjacentExcept(i)) // 5.7 +

+

+ fprintf(fout, "EXCEPTSAMEPGNET "); +

+

+ if (layer->lefiLayer::hasSpacingCenterToCenter(i)) +

+

+ fprintf(fout, "CENTERTOCENTER "); +

+

+ if (layer->lefiLayer::hasSpacingSamenet(i)) // 5.7 +

+

+ fprintf(fout, "SAMENET "); +

+

+ if (layer->lefiLayer::hasSpacingSamenetPGonly(i)) // 5.7 +

+

+ fprintf(fout, "PGONLY "); +

+

+ if (layer->lefiLayer::hasSpacingArea(i)) // 5.7 +

+

+ fprintf(fout, "AREA %g ", layer->lefiLayer::spacingArea(i)); +

+

+ if (layer->lefiLayer::hasSpacingRange(i)) { +

+

+ fprintf(fout, "RANGE %g %g ", layer->lefiLayer::spacingRangeMin(i), +

+

+ layer->lefiLayer::spacingRangeMax(i)); +

+

+ if (layer->lefiLayer::hasSpacingRangeUseLengthThreshold(i)) +

+

+ fprintf(fout, "USELENGTHTHRESHOLD "); +

+

+ else if (layer->lefiLayer::hasSpacingRangeInfluence(i)) { +

+

+ fprintf(fout, "INFLUENCE %g ", +

+

+ layer->lefiLayer::spacingRangeInfluence(i)); +

+

+ if (layer->lefiLayer::hasSpacingRangeInfluenceRange(i)) +

+

+ fprintf(fout, "RANGE %g %g ", +

+

+ layer->lefiLayer::spacingRangeInfluenceMin(i), +

+

+ layer->lefiLayer::spacingRangeInfluenceMax(i)); +

+

+ } else if (layer->lefiLayer::hasSpacingRangeRange(i)) +

+

+ fprintf(fout, "RANGE %g %g ", +

+

+ layer->lefiLayer::spacingRangeRangeMin(i), +

+

+ layer->lefiLayer::spacingRangeRangeMax(i)); +

+

+ } else if (layer->lefiLayer::hasSpacingLengthThreshold(i)) { +

+

+ fprintf(fout, "LENGTHTHRESHOLD %g ", +

+

+ layer->lefiLayer::spacingLengthThreshold(i)); +

+

+ if (layer->lefiLayer::hasSpacingLengthThresholdRange(i)) +

+

+ fprintf(fout, "RANGE %g %g", +

+

+ layer->lefiLayer::spacingLengthThresholdRangeMin(i), +

+

+ layer->lefiLayer::spacingLengthThresholdRangeMax(i)); +

+

+ } else if (layer->lefiLayer::hasSpacingNotchLength(i)) {// 5.7 +

+

+ fprintf(fout, "NOTCHLENGTH %g", +

+

+ layer->lefiLayer::spacingNotchLength(i)); +

+

+ } else if (layer->lefiLayer::hasSpacingEndOfNotchWidth(i)) // 5.7 +

+

+ fprintf(fout, "ENDOFNOTCHWIDTH %g NOTCHSPACING %g, NOTCHLENGTH %g", +

+

+ layer->lefiLayer::spacingEndOfNotchWidth(i), +

+

+ layer->lefiLayer::spacingEndOfNotchSpacing(i), +

+

+ layer->lefiLayer::spacingEndOfNotchLength(i)); +

+

+   +

+

+ if (layer->lefiLayer::hasSpacingParallelOverlap(i)) // 5.7 +

+

+ fprintf(fout, "PARALLELOVERLAP "); +

+

+ if (layer->lefiLayer::hasSpacingEndOfLine(i)) { // 5.7 +

+

+ fprintf(fout, "ENDOFLINE %g WITHING %g ", +

+

+ layer->lefiLayer::spacingEolWidth(i), +

+

+ layer->lefiLayer::spacingEolWithin(i)); +

+

+ if (layer->lefiLayer::hasSpacingParellelEdge(i)) { +

+

+ fprintf(fout, "PARALLELEDGE %g WITHING %g ", +

+

+ layer->lefiLayer::spacingParSpace(i), +

+

+ layer->lefiLayer::spacingParWithin(i)); +

+

+ if (layer->lefiLayer::hasSpacingTwoEdges(i)) { +

+

+ fprintf(fout, "TWOEDGES "); +

+

+ } +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ if (layer->lefiLayer::hasSpacingTableOrtho()) { // 5.7 +

+

+ fprintf(fout, "SPACINGTABLE ORTHOGONAL"); +

+

+ ortho = layer->lefiLayer::orthogonal(); +

+

+ for (i = 0; i < ortho->lefiOrthogonal::numOrthogonal(); i++) { +

+

+ fprintf(fout, "\n WITHIN %g SPACING %g", +

+

+ ortho->lefiOrthogonal::cutWithin(i), +

+

+ ortho->lefiOrthogonal::orthoSpacing(i)); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ for (i = 0; i < layer->lefiLayer::numEnclosure(); i++) { +

+

+ fprintf(fout, "ENCLOSURE "); +

+

+ if (layer->lefiLayer::hasEnclosureRule(i)) +

+

+ fprintf(fout, "%s ", layer->lefiLayer::enclosureRule(i)); +

+

+ fprintf(fout, "%g %g ", layer->lefiLayer::enclosureOverhang1(i), +

+

+ layer->lefiLayer::enclosureOverhang2(i)); +

+

+ if (layer->lefiLayer::hasEnclosureWidth(i)) +

+

+ fprintf(fout, "WIDTH %g ", layer->lefiLayer::enclosureMinWidth(i)); +

+

+ if (layer->lefiLayer::hasEnclosureExceptExtraCut(i)) +

+

+ fprintf(fout, "EXCEPTEXTRACUT %g ", +

+

+ layer->lefiLayer::enclosureExceptExtraCut(i)); +

+

+ if (layer->lefiLayer::hasEnclosureMinLength(i)) +

+

+ fprintf(fout, "LENGTH %g ", layer->lefiLayer::enclosureMinLength(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ for (i = 0; i < layer->lefiLayer::numPreferEnclosure(); i++) { +

+

+ fprintf(fout, "PREFERENCLOSURE "); +

+

+ if (layer->lefiLayer::hasPreferEnclosureRule(i)) +

+

+ fprintf(fout, "%s ", layer->lefiLayer::preferEnclosureRule(i)); +

+

+ fprintf(fout, "%g %g ", layer->lefiLayer::preferEnclosureOverhang1(i), +

+

+ layer->lefiLayer::preferEnclosureOverhang2(i)); +

+

+ if (layer->lefiLayer::hasPreferEnclosureWidth(i)) +

+

+ fprintf(fout, "WIDTH %g ",layer->lefiLayer::preferEnclosureMinWidth(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ if (layer->lefiLayer::hasResistancePerCut()) +

+

+ fprintf(fout, " RESISTANCE %g ;\n", +

+

+ layer->lefiLayer::resistancePerCut()); +

+

+ if (layer->lefiLayer::hasCurrentDensityPoint()) +

+

+ fprintf(fout, " CURRENTDEN %g ;\n", +

+

+ layer->lefiLayer::currentDensityPoint()); +

+

+ if (layer->lefiLayer::hasCurrentDensityArray()) { +

+

+ layer->lefiLayer::currentDensityArray(&numPoints, &widths, &current); +

+

+ for (i = 0; i < numPoints; i++) +

+

+ fprintf(fout, " CURRENTDEN ( %g %g ) ;\n", widths[i], current[i]); +

+

+ } +

+

+ if (layer->lefiLayer::hasDirection()) +

+

+ fprintf(fout, " DIRECTION %s ;\n", layer->lefiLayer::direction()); +

+

+ if (layer->lefiLayer::hasResistance()) +

+

+ fprintf(fout, " RESISTANCE RPERSQ %g ;\n", +

+

+ layer->lefiLayer::resistance()); +

+

+ if (layer->lefiLayer::hasCapacitance()) +

+

+ fprintf(fout, " CAPACITANCE CPERSQDIST %g ;\n", +

+

+ layer->lefiLayer::capacitance()); +

+

+ if (layer->lefiLayer::hasEdgeCap()) +

+

+ fprintf(fout, " EDGECAPACITANCE %g ;\n", layer->lefiLayer::edgeCap()); +

+

+ if (layer->lefiLayer::hasHeight()) +

+

+ fprintf(fout, " TYPE %g ;\n", layer->lefiLayer::height()); +

+

+ if (layer->lefiLayer::hasThickness()) +

+

+ fprintf(fout, " THICKNESS %g ;\n", layer->lefiLayer::thickness()); +

+

+ if (layer->lefiLayer::hasWireExtension()) +

+

+ fprintf(fout, " WIREEXTENSION %g ;\n", layer->lefiLayer::wireExtension()); +

+

+ if (layer->lefiLayer::hasShrinkage()) +

+

+ fprintf(fout, " SHRINKAGE %g ;\n", layer->lefiLayer::shrinkage()); +

+

+ if (layer->lefiLayer::hasCapMultiplier()) +

+

+ fprintf(fout, " CAPMULTIPLIER %g ;\n", layer->lefiLayer::capMultiplier()); +

+

+ if (layer->lefiLayer::hasAntennaArea()) +

+

+ fprintf(fout, " ANTENNAAREAFACTOR %g ;\n", +

+

+ layer->lefiLayer::antennaArea()); +

+

+ if (layer->lefiLayer::hasAntennaLength()) +

+

+ fprintf(fout, " ANTENNALENGTHFACTOR %g ;\n", +

+

+ layer->lefiLayer::antennaLength()); +

+

+   +

+

+ // 5.5 AntennaModel +

+

+ for (i = 0; i < layer->lefiLayer::numAntennaModel(); i++) { +

+

+ aModel = layer->lefiLayer::antennaModel(i); +

+

+   +

+

+ fprintf(fout, " ANTENNAMODEL %s ;\n", +

+

+ aModel->lefiAntennaModel::antennaOxide()); +

+

+ +

+

+ if (aModel->lefiAntennaModel::hasAntennaAreaRatio()) +

+

+ fprintf(fout, " ANTENNAAREARATIO %g ;\n", +

+

+ aModel->lefiAntennaModel::antennaAreaRatio()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaDiffAreaRatio()) +

+

+ fprintf(fout, " ANTENNADIFFAREARATIO %g ;\n", +

+

+ aModel->lefiAntennaModel::antennaDiffAreaRatio()); +

+

+ else if (aModel->lefiAntennaModel::hasAntennaDiffAreaRatioPWL()) { +

+

+ pwl = aModel->lefiAntennaModel::antennaDiffAreaRatioPWL(); +

+

+ fprintf(fout, " ANTENNADIFFAREARATIO PWL ( "); +

+

+ for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) +

+

+ fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), +

+

+ pwl->lefiAntennaPWL::PWLratio(j)); +

+

+ fprintf(fout, ") ;\n"); +

+

+ } +

+

+ if (aModel->lefiAntennaModel::hasAntennaCumAreaRatio()) +

+

+ fprintf(fout, " ANTENNACUMAREARATIO %g ;\n", +

+

+ aModel->lefiAntennaModel::antennaCumAreaRatio()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaCumDiffAreaRatio()) +

+

+ fprintf(fout, " ANTENNACUMDIFFAREARATIO %g\n", +

+

+ aModel->lefiAntennaModel::antennaCumDiffAreaRatio()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaCumDiffAreaRatioPWL()) { +

+

+ pwl = aModel->lefiAntennaModel::antennaCumDiffAreaRatioPWL(); +

+

+ fprintf(fout, " ANTENNACUMDIFFAREARATIO PWL ( "); +

+

+ for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) +

+

+ fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), +

+

+ pwl->lefiAntennaPWL::PWLratio(j)); +

+

+ fprintf(fout, ") ;\n"); +

+

+ } +

+

+ if (aModel->lefiAntennaModel::hasAntennaAreaFactor()) { +

+

+ fprintf(fout, " ANTENNAAREAFACTOR %g ", +

+

+ aModel->lefiAntennaModel::antennaAreaFactor()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaAreaFactorDUO()) +

+

+ fprintf(fout, " DIFFUSEONLY "); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ if (aModel->lefiAntennaModel::hasAntennaSideAreaRatio()) +

+

+ fprintf(fout, " ANTENNASIDEAREARATIO %g ;\n", +

+

+ aModel->lefiAntennaModel::antennaSideAreaRatio()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaDiffSideAreaRatio()) +

+

+ fprintf(fout, " ANTENNADIFFSIDEAREARATIO %g\n", +

+

+ aModel->lefiAntennaModel::antennaDiffSideAreaRatio()); +

+

+ else if (aModel->lefiAntennaModel::hasAntennaDiffSideAreaRatioPWL()) { +

+

+ pwl = aModel->lefiAntennaModel::antennaDiffSideAreaRatioPWL(); +

+

+ fprintf(fout, " ANTENNADIFFSIDEAREARATIO PWL ( "); +

+

+ for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) +

+

+ fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), +

+

+ pwl->lefiAntennaPWL::PWLratio(j)); +

+

+ fprintf(fout, ") ;\n"); +

+

+ } +

+

+ if (aModel->lefiAntennaModel::hasAntennaCumSideAreaRatio()) +

+

+ fprintf(fout, " ANTENNACUMSIDEAREARATIO %g ;\n", +

+

+ aModel->lefiAntennaModel::antennaCumSideAreaRatio()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaCumDiffSideAreaRatio()) +

+

+ fprintf(fout, " ANTENNACUMDIFFSIDEAREARATIO %g\n", +

+

+ aModel->lefiAntennaModel::antennaCumDiffSideAreaRatio()); +

+

+ else if (aModel->lefiAntennaModel::hasAntennaCumDiffSideAreaRatioPWL()) { +

+

+ pwl = aModel->lefiAntennaModel::antennaCumDiffSideAreaRatioPWL(); +

+

+ fprintf(fout, " ANTENNACUMDIFFSIDEAREARATIO PWL ( "); +

+

+ for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) +

+

+ fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), +

+

+ pwl->lefiAntennaPWL::PWLratio(j)); +

+

+ fprintf(fout, ") ;\n"); +

+

+ } +

+

+ if (aModel->lefiAntennaModel::hasAntennaSideAreaFactor()) { +

+

+ fprintf(fout, " ANTENNASIDEAREAFACTOR %g ", +

+

+ aModel->lefiAntennaModel::antennaSideAreaFactor()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaSideAreaFactorDUO()) +

+

+ fprintf(fout, " DIFFUSEONLY "); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ if (aModel->lefiAntennaModel::hasAntennaCumRoutingPlusCut()) +

+

+ fprintf(fout, " ANTENNACUMROUTINGPLUSCUT ;\n"); +

+

+ if (aModel->lefiAntennaModel::hasAntennaGatePlusDiff()) +

+

+ fprintf(fout, " ANTENNAGATEPLUSDIFF %g ;\n", +

+

+ aModel->lefiAntennaModel::antennaGatePlusDiff()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaAreaMinusDiff()) +

+

+ fprintf(fout, " ANTENNAAREAMINUSDIFF %g ;\n", +

+

+ aModel->lefiAntennaModel::antennaAreaMinusDiff()); +

+

+ if (aModel->lefiAntennaModel::hasAntennaAreaDiffReducePWL()) { +

+

+ pwl = aModel->lefiAntennaModel::antennaAreaDiffReducePWL(); +

+

+ fprintf(fout, " ANTENNAAREADIFFREDUCEPWL ( "); +

+

+ for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) +

+

+ fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), +

+

+ pwl->lefiAntennaPWL::PWLratio(j)); +

+

+ fprintf(fout, ") ;\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (layer->lefiLayer::numAccurrentDensity()) { +

+

+ for (i = 0; i < layer->lefiLayer::numAccurrentDensity(); i++) { +

+

+ density = layer->lefiLayer::accurrent(i); +

+

+ fprintf(fout, " ACCURRENTDENSITY %s", density->type()); +

+

+ if (density->hasOneEntry()) +

+

+ fprintf(fout, " %g ;\n", density->oneEntry()); +

+

+ else { +

+

+ fprintf(fout, "\n"); +

+

+ if (density->numFrequency()) { +

+

+ fprintf(fout, " FREQUENCY"); +

+

+ for (j = 0; j < density->numFrequency(); j++) +

+

+ fprintf(fout, " %g", density->frequency(j)); +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ if (density->numCutareas()) { +

+

+ fprintf(fout, " CUTAREA"); +

+

+ for (j = 0; j < density->numCutareas(); j++) +

+

+ fprintf(fout, " %g", density->cutArea(j)); +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ if (density->numWidths()) { +

+

+ fprintf(fout, " WIDTH"); +

+

+ for (j = 0; j < density->numWidths(); j++) +

+

+ fprintf(fout, " %g", density->width(j)); +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ if (density->numTableEntries()) { +

+

+ k = 5; +

+

+ fprintf(fout, " TABLEENTRIES"); +

+

+ for (j = 0; j < density->numTableEntries(); j++) +

+

+ if (k > 4) { +

+

+ fprintf(fout, "\n %g", density->tableEntry(j)); +

+

+ k = 1; +

+

+ } else { +

+

+ fprintf(fout, " %g", density->tableEntry(j)); +

+

+ k++; +

+

+ } +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+ if (layer->lefiLayer::numDccurrentDensity()) { +

+

+ for (i = 0; i < layer->lefiLayer::numDccurrentDensity(); i++) { +

+

+ density = layer->lefiLayer::dccurrent(i); +

+

+ fprintf(fout, " DCCURRENTDENSITY %s", density->type()); +

+

+ if (density->hasOneEntry()) +

+

+ fprintf(fout, " %g ;\n", density->oneEntry()); +

+

+ else { +

+

+ fprintf(fout, "\n"); +

+

+ if (density->numCutareas()) { +

+

+ fprintf(fout, " CUTAREA"); +

+

+ for (j = 0; j < density->numCutareas(); j++) +

+

+ fprintf(fout, " %g", density->cutArea(j)); +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ if (density->numWidths()) { +

+

+ fprintf(fout, " WIDTH"); +

+

+ for (j = 0; j < density->numWidths(); j++) +

+

+ fprintf(fout, " %g", density->width(j)); +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ if (density->numTableEntries()) { +

+

+ fprintf(fout, " TABLEENTRIES"); +

+

+ for (j = 0; j < density->numTableEntries(); j++) +

+

+ fprintf(fout, " %g", density->tableEntry(j)); +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ for (i = 0; i < layer->lefiLayer::numSpacingTable(); i++) { +

+

+ spTable = layer->lefiLayer::spacingTable(i); +

+

+ fprintf(fout, " SPACINGTABLE\n"); +

+

+ if (spTable->lefiSpacingTable::isInfluence()) { +

+

+ influence = spTable->lefiSpacingTable::influence(); +

+

+ fprintf(fout, " INFLUENCE"); +

+

+ for (j = 0; j < influence->lefiInfluence::numInfluenceEntry(); j++) { +

+

+ fprintf(fout, "\n WIDTH %g WITHIN %g SPACING %g", +

+

+ influence->lefiInfluence::width(j), +

+

+ influence->lefiInfluence::distance(j), +

+

+ influence->lefiInfluence::spacing(j)); +

+

+ } +

+

+ fprintf(fout, " ;\n"); +

+

+ } else if (spTable->lefiSpacingTable::isParallel()){ +

+

+ parallel = spTable->lefiSpacingTable::parallel(); +

+

+ fprintf(fout, " PARALLELRUNLENGTH"); +

+

+ for (j = 0; j < parallel->lefiParallel::numLength(); j++) { +

+

+ fprintf(fout, " %g", parallel->lefiParallel::length(j)); +

+

+ } +

+

+ for (j = 0; j < parallel->lefiParallel::numWidth(); j++) { +

+

+ fprintf(fout, "\n WIDTH %g", +

+

+ parallel->lefiParallel::width(j)); +

+

+ for (k = 0; k < parallel->lefiParallel::numLength(); k++) { +

+

+ fprintf(fout, " %g", parallel->lefiParallel::widthSpacing(j, k)); +

+

+ } +

+

+ } +

+

+ fprintf(fout, " ;\n"); +

+

+ } else { // 5.7 TWOWIDTHS +

+

+ twoWidths = spTable->lefiSpacingTable::twoWidths(); +

+

+ fprintf(fout, " TWOWIDTHS"); +

+

+ for (j = 0; j < twoWidths->lefiTwoWidths::numWidth(); j++) { +

+

+ fprintf(fout, "\n WIDTH %g ", +

+

+ twoWidths->lefiTwoWidths::width(j)); +

+

+ if (twoWidths->lefiTwoWidths::hasWidthPRL(j)) +

+

+ fprintf(fout, "PRL %g ", twoWidths->lefiTwoWidths::widthPRL(j)); +

+

+ for (k = 0; k < twoWidths->lefiTwoWidths::numWidthSpacing(j); k++) +

+

+ fprintf(fout, "%g ",twoWidths->lefiTwoWidths::widthSpacing(j, k)); +

+

+ } +

+

+ fprintf(fout, " ;\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ propNum = layer->lefiLayer::numProps(); +

+

+ if (propNum > 0) { +

+

+ fprintf(fout, " PROPERTY "); +

+

+ for (i = 0; i < propNum; i++) { +

+

+ // value can either be a string or number +

+

+ fprintf(fout, "%s ", layer->lefiLayer::propName(i)); +

+

+ if (layer->lefiLayer::propIsNumber(i)) +

+

+ fprintf(fout, "%g ", layer->lefiLayer::propNumber(i)); +

+

+ if (layer->lefiLayer::propIsString(i)) +

+

+ fprintf(fout, "%s ", layer->lefiLayer::propValue(i)); +

+

+ pType = layer->lefiLayer::propType(i); +

+

+ switch (pType) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ if (layer->lefiLayer::hasDiagMinEdgeLength()) +

+

+ fprintf(fout, " DIAGMINEDGELENGTH %g ;\n", +

+

+ layer->lefiLayer::diagMinEdgeLength()); +

+

+ if (layer->lefiLayer::numMinSize()) { +

+

+ fprintf(fout, " MINSIZE "); +

+

+ for (i = 0; i < layer->lefiLayer::numMinSize(); i++) { +

+

+ fprintf(fout, "%g %g ", layer->lefiLayer::minSizeWidth(i), +

+

+ layer->lefiLayer::minSizeLength(i)); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+   +

+

+ fprintf(fout, "END %s\n", layer->lefiLayer::name()); +

+

+   +

+

+ // Set it to case sensitive from here on +

+

+ lefrSetCaseSensitivity(1); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int macroBeginCB(lefrCallbackType_e c, const char* macroName, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "MACRO %s\n", macroName); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int macroClassTypeCB(lefrCallbackType_e c, const char* macroClassType, +

+

+ lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "MACRO CLASS %s\n", macroClassType); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int macroCB(lefrCallbackType_e c, lefiMacro* macro, lefiUserData ud) { +

+

+ lefiSitePattern* pattern; +

+

+ int propNum, i, hasPrtSym = 0; +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ if (macro->lefiMacro::hasClass()) +

+

+ fprintf(fout, " CLASS %s ;\n", macro->lefiMacro::macroClass()); +

+

+ if (macro->lefiMacro::hasEEQ()) +

+

+ fprintf(fout, " EEQ %s ;\n", macro->lefiMacro::EEQ()); +

+

+ if (macro->lefiMacro::hasLEQ()) +

+

+ fprintf(fout, " LEQ %s ;\n", macro->lefiMacro::LEQ()); +

+

+ if (macro->lefiMacro::hasSource()) +

+

+ fprintf(fout, " SOURCE %s ;\n", macro->lefiMacro::source()); +

+

+ if (macro->lefiMacro::hasXSymmetry()) { +

+

+ fprintf(fout, " SYMMETRY X "); +

+

+ hasPrtSym = 1; +

+

+ } +

+

+ if (macro->lefiMacro::hasYSymmetry()) { // print X Y & R90 in one line +

+

+ if (!hasPrtSym) { +

+

+ fprintf(fout, " SYMMETRY Y "); +

+

+ hasPrtSym = 1; +

+

+ } +

+

+ else +

+

+ fprintf(fout, "Y "); +

+

+ } +

+

+ if (macro->lefiMacro::has90Symmetry()) { +

+

+ if (!hasPrtSym) { +

+

+ fprintf(fout, " SYMMETRY R90 "); +

+

+ hasPrtSym = 1; +

+

+ } +

+

+ else +

+

+ fprintf(fout, "R90 "); +

+

+ } +

+

+ if (hasPrtSym) { +

+

+ fprintf (fout, ";\n"); +

+

+ hasPrtSym = 0; +

+

+ } +

+

+ if (macro->lefiMacro::hasSiteName()) +

+

+ fprintf(fout, " SITE %s ;\n", macro->lefiMacro::siteName()); +

+

+ if (macro->lefiMacro::hasSitePattern()) { +

+

+ for (i = 0; i < macro->lefiMacro::numSitePattern(); i++ ) { +

+

+ pattern = macro->lefiMacro::sitePattern(i); +

+

+ if (pattern->lefiSitePattern::hasStepPattern()) { +

+

+ fprintf(fout, " SITE %s %g %g %s DO %g BY %g STEP %g %g ;\n", +

+

+ pattern->lefiSitePattern::name(), pattern->lefiSitePattern::x(), +

+

+ pattern->lefiSitePattern::y(), +

+

+ orientStr(pattern->lefiSitePattern::orient()), +

+

+ pattern->lefiSitePattern::xStart(), +

+

+ pattern->lefiSitePattern::yStart(), +

+

+ pattern->lefiSitePattern::xStep(), +

+

+ pattern->lefiSitePattern::yStep()); +

+

+ } else { +

+

+ fprintf(fout, " SITE %s %g %g %s ;\n", +

+

+ pattern->lefiSitePattern::name(), pattern->lefiSitePattern::x(), +

+

+ pattern->lefiSitePattern::y(), +

+

+ orientStr(pattern->lefiSitePattern::orient())); +

+

+ } +

+

+ } +

+

+ } +

+

+ if (macro->lefiMacro::hasSize()) +

+

+ fprintf(fout, " SIZE %g BY %g ;\n", macro->lefiMacro::sizeX(), +

+

+ macro->lefiMacro::sizeY()); +

+

+   +

+

+ if (macro->lefiMacro::hasForeign()) { +

+

+ for (i = 0; i < macro->lefiMacro::numForeigns(); i++) { +

+

+ fprintf(fout, " FOREIGN %s ", macro->lefiMacro::foreignName(i)); +

+

+ if (macro->lefiMacro::hasForeignPoint(i)) { +

+

+ fprintf(fout, "( %g %g ) ", macro->lefiMacro::foreignX(i), +

+

+ macro->lefiMacro::foreignY(i)); +

+

+ if (macro->lefiMacro::hasForeignOrient(i)) +

+

+ fprintf(fout, "%s ", macro->lefiMacro::foreignOrientStr(i)); +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ if (macro->lefiMacro::hasOrigin()) +

+

+ fprintf(fout, " ORIGIN ( %g %g ) ;\n", macro->lefiMacro::originX(), +

+

+ macro->lefiMacro::originY()); +

+

+ if (macro->lefiMacro::hasPower()) +

+

+ fprintf(fout, " POWER %g ;\n", macro->lefiMacro::power()); +

+

+ propNum = macro->lefiMacro::numProperties(); +

+

+ if (propNum > 0) { +

+

+ fprintf(fout, " PROPERTY "); +

+

+ for (i = 0; i < propNum; i++) { +

+

+ // value can either be a string or number +

+

+ if (macro->lefiMacro::propValue(i)) { +

+

+ fprintf(fout, "%s %s ", macro->lefiMacro::propName(i), +

+

+ macro->lefiMacro::propValue(i)); +

+

+ } +

+

+ else +

+

+ fprintf(fout, "%s %g ", macro->lefiMacro::propName(i), +

+

+ macro->lefiMacro::propNum(i)); +

+

+   +

+

+ switch (macro->lefiMacro::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int macroEndCB(lefrCallbackType_e c, const char* macroName, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "END %s\n", macroName); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int manufacturingCB(lefrCallbackType_e c, double num, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "MANUFACTURINGGRID %g ;\n", num); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int maxStackViaCB(lefrCallbackType_e c, lefiMaxStackVia* maxStack, +

+

+ lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "MAXVIASTACK %d ", maxStack->lefiMaxStackVia::maxStackVia()); +

+

+ if (maxStack->lefiMaxStackVia::hasMaxStackViaRange()) +

+

+ fprintf(fout, "RANGE %s %s ", +

+

+ maxStack->lefiMaxStackVia::maxStackViaBottomLayer(), +

+

+ maxStack->lefiMaxStackVia::maxStackViaTopLayer()); +

+

+ fprintf(fout, ";\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int minFeatureCB(lefrCallbackType_e c, lefiMinFeature* min, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "MINFEATURE %g %g ;\n", min->lefiMinFeature::one(), +

+

+ min->lefiMinFeature::two()); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int nonDefaultCB(lefrCallbackType_e c, lefiNonDefault* def, lefiUserData ud) { +

+

+ int i; +

+

+ lefiVia* via; +

+

+ lefiSpacing* spacing; +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "NONDEFAULTRULE %s\n", def->lefiNonDefault::name()); +

+

+ if (def->lefiNonDefault::hasHardspacing()) +

+

+ fprintf(fout, " HARDSPACING ;\n"); +

+

+ for (i = 0; i < def->lefiNonDefault::numLayers(); i++) { +

+

+ fprintf(fout, " LAYER %s\n", def->lefiNonDefault::layerName(i)); +

+

+ if (def->lefiNonDefault::hasLayerWidth(i)) +

+

+ fprintf(fout, " WIDTH %g ;\n", def->lefiNonDefault::layerWidth(i)); +

+

+ if (def->lefiNonDefault::hasLayerSpacing(i)) +

+

+ fprintf(fout, " SPACING %g ;\n", +

+

+ def->lefiNonDefault::layerSpacing(i)); +

+

+ if (def->lefiNonDefault::hasLayerDiagWidth(i)) +

+

+ fprintf(fout, " DIAGWIDTH %g ;\n", +

+

+ def->lefiNonDefault::layerDiagWidth(i)); +

+

+ if (def->lefiNonDefault::hasLayerWireExtension(i)) +

+

+ fprintf(fout, " WIREEXTENSION %g ;\n", +

+

+ def->lefiNonDefault::layerWireExtension(i)); +

+

+ if (def->lefiNonDefault::hasLayerResistance(i)) +

+

+ fprintf(fout, " RESISTANCE RPERSQ %g ;\n", +

+

+ def->lefiNonDefault::layerResistance(i)); +

+

+ if (def->lefiNonDefault::hasLayerCapacitance(i)) +

+

+ fprintf(fout, " CAPACITANCE CPERSQDIST %g ;\n", +

+

+ def->lefiNonDefault::layerCapacitance(i)); +

+

+ if (def->lefiNonDefault::hasLayerEdgeCap(i)) +

+

+ fprintf(fout, " EDGECAPACITANCE %g ;\n", +

+

+ def->lefiNonDefault::layerEdgeCap(i)); +

+

+ fprintf(fout, " END %s\n", def->lefiNonDefault::layerName(i)); +

+

+ } +

+

+   +

+

+ // handle via in nondefaultrule +

+

+ for (i = 0; i < def->lefiNonDefault::numVias(); i++) { +

+

+ via = def->lefiNonDefault::viaRule(i); +

+

+ lefVia(via); +

+

+ } +

+

+   +

+

+ // handle spacing in nondefaultrule +

+

+ for (i = 0; i < def->lefiNonDefault::numSpacingRules(); i++) { +

+

+ spacing = def->lefiNonDefault::spacingRule(i); +

+

+ lefSpacing(spacing); +

+

+ } +

+

+   +

+

+ // handle usevia +

+

+ for (i = 0; i < def->lefiNonDefault::numUseVia(); i++) +

+

+ fprintf(fout, " USEVIA %s ;\n", def->lefiNonDefault::viaName(i)); +

+

+   +

+

+ // handle useviarule +

+

+ for (i = 0; i < def->lefiNonDefault::numUseViaRule(); i++) +

+

+ fprintf(fout, " USEVIARULE %s ;\n", +

+

+ def->lefiNonDefault::viaRuleName(i)); +

+

+   +

+

+ // handle mincuts +

+

+ for (i = 0; i < def->lefiNonDefault::numMinCuts(); i++) { +

+

+ fprintf(fout, " MINCUTS %s %d ;\n", def->lefiNonDefault::cutLayerName(i), +

+

+ def->lefiNonDefault::numCuts(i)); +

+

+ } +

+

+   +

+

+ // handle property in nondefaultrule +

+

+ if (def->lefiNonDefault::numProps() > 0) { +

+

+ fprintf(fout, " PROPERTY "); +

+

+ for (i = 0; i < def->lefiNonDefault::numProps(); i++) { +

+

+ fprintf(fout, "%s ", def->lefiNonDefault::propName(i)); +

+

+ if (def->lefiNonDefault::propIsNumber(i)) +

+

+ fprintf(fout, "%g ", def->lefiNonDefault::propNumber(i)); +

+

+ if (def->lefiNonDefault::propIsString(i)) +

+

+ fprintf(fout, "%s ", def->lefiNonDefault::propValue(i)); +

+

+ switch(def->lefiNonDefault::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ fprintf(fout, "END %s ;\n", def->lefiNonDefault::name()); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int obstructionCB(lefrCallbackType_e c, lefiObstruction* obs, +

+

+ lefiUserData ud) { +

+

+ lefiGeometries* geometry; +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, " OBS\n"); +

+

+ geometry = obs->lefiObstruction::geometries(); +

+

+ prtGeometry(geometry); +

+

+ fprintf(fout, " END\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int pinCB(lefrCallbackType_e c, lefiPin* pin, lefiUserData ud) { +

+

+ int numPorts, i, j; +

+

+ lefiGeometries* geometry; +

+

+ lefiPinAntennaModel* aModel; +

+

+ +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, " PIN %s\n", pin->lefiPin::name()); +

+

+ if (pin->lefiPin::hasForeign()) { +

+

+ for (i = 0; i < pin->lefiPin::numForeigns(); i++) { +

+

+ if (pin->lefiPin::hasForeignOrient(i)) +

+

+ fprintf(fout, " FOREIGN %s STRUCTURE ( %g %g ) %s ;\n", +

+

+ pin->lefiPin::foreignName(i), pin->lefiPin::foreignX(i), +

+

+ pin->lefiPin::foreignY(i), +

+

+ pin->lefiPin::foreignOrientStr(i)); +

+

+ else if (pin->lefiPin::hasForeignPoint(i)) +

+

+ fprintf(fout, " FOREIGN %s STRUCTURE ( %g %g ) ;\n", +

+

+ pin->lefiPin::foreignName(i), pin->lefiPin::foreignX(i), +

+

+ pin->lefiPin::foreignY(i)); +

+

+ else +

+

+ fprintf(fout, " FOREIGN %s ;\n", pin->lefiPin::foreignName(i)); +

+

+ } +

+

+ } +

+

+ if (pin->lefiPin::hasLEQ()) +

+

+ fprintf(fout, " LEQ %s ;\n", pin->lefiPin::LEQ()); +

+

+ if (pin->lefiPin::hasDirection()) +

+

+ fprintf(fout, " DIRECTION %s ;\n", pin->lefiPin::direction()); +

+

+ if (pin->lefiPin::hasUse()) +

+

+ fprintf(fout, " USE %s ;\n", pin->lefiPin::use()); +

+

+ if (pin->lefiPin::hasShape()) +

+

+ fprintf(fout, " SHAPE %s ;\n", pin->lefiPin::shape()); +

+

+ if (pin->lefiPin::hasMustjoin()) +

+

+ fprintf(fout, " MUSTJOIN %s ;\n", pin->lefiPin::mustjoin()); +

+

+ if (pin->lefiPin::hasOutMargin()) +

+

+ fprintf(fout, " OUTPUTNOISEMARGIN %g %g ;\n", +

+

+ pin->lefiPin::outMarginHigh(), pin->lefiPin::outMarginLow()); +

+

+ if (pin->lefiPin::hasOutResistance()) +

+

+ fprintf(fout, " OUTPUTRESISTANCE %g %g ;\n", +

+

+ pin->lefiPin::outResistanceHigh(), +

+

+ pin->lefiPin::outResistanceLow()); +

+

+ if (pin->lefiPin::hasInMargin()) +

+

+ fprintf(fout, " INPUTNOISEMARGIN %g %g ;\n", +

+

+ pin->lefiPin::inMarginHigh(), pin->lefiPin::inMarginLow()); +

+

+ if (pin->lefiPin::hasPower()) +

+

+ fprintf(fout, " POWER %g ;\n", pin->lefiPin::power()); +

+

+ if (pin->lefiPin::hasLeakage()) +

+

+ fprintf(fout, " LEAKAGE %g ;\n", pin->lefiPin::leakage()); +

+

+ if (pin->lefiPin::hasMaxload()) +

+

+ fprintf(fout, " MAXLOAD %g ;\n", pin->lefiPin::maxload()); +

+

+ if (pin->lefiPin::hasCapacitance()) +

+

+ fprintf(fout, " CAPACITANCE %g ;\n", pin->lefiPin::capacitance()); +

+

+ if (pin->lefiPin::hasResistance()) +

+

+ fprintf(fout, " RESISTANCE %g ;\n", pin->lefiPin::resistance()); +

+

+ if (pin->lefiPin::hasPulldownres()) +

+

+ fprintf(fout, " PULLDOWNRES %g ;\n", pin->lefiPin::pulldownres()); +

+

+ if (pin->lefiPin::hasTieoffr()) +

+

+ fprintf(fout, " TIEOFFR %g ;\n", pin->lefiPin::tieoffr()); +

+

+ if (pin->lefiPin::hasVHI()) +

+

+ fprintf(fout, " VHI %g ;\n", pin->lefiPin::VHI()); +

+

+ if (pin->lefiPin::hasVLO()) +

+

+ fprintf(fout, " VLO %g ;\n", pin->lefiPin::VLO()); +

+

+ if (pin->lefiPin::hasRiseVoltage()) +

+

+ fprintf(fout, " RISEVOLTAGETHRESHOLD %g ;\n", +

+

+ pin->lefiPin::riseVoltage()); +

+

+ if (pin->lefiPin::hasFallVoltage()) +

+

+ fprintf(fout, " FALLVOLTAGETHRESHOLD %g ;\n", +

+

+ pin->lefiPin::fallVoltage()); +

+

+ if (pin->lefiPin::hasRiseThresh()) +

+

+ fprintf(fout, " RISETHRESH %g ;\n", pin->lefiPin::riseThresh()); +

+

+ if (pin->lefiPin::hasFallThresh()) +

+

+ fprintf(fout, " FALLTHRESH %g ;\n", pin->lefiPin::fallThresh()); +

+

+ if (pin->lefiPin::hasRiseSatcur()) +

+

+ fprintf(fout, " RISESATCUR %g ;\n", pin->lefiPin::riseSatcur()); +

+

+ if (pin->lefiPin::hasFallSatcur()) +

+

+ fprintf(fout, " FALLSATCUR %g ;\n", pin->lefiPin::fallSatcur()); +

+

+ if (pin->lefiPin::hasRiseSlewLimit()) +

+

+ fprintf(fout, " RISESLEWLIMIT %g ;\n", pin->lefiPin::riseSlewLimit()); +

+

+ if (pin->lefiPin::hasFallSlewLimit()) +

+

+ fprintf(fout, " FALLSLEWLIMIT %g ;\n", pin->lefiPin::fallSlewLimit()); +

+

+ if (pin->lefiPin::hasCurrentSource()) +

+

+ fprintf(fout, " CURRENTSOURCE %s ;\n", pin->lefiPin::currentSource()); +

+

+ if (pin->lefiPin::hasTables()) +

+

+ fprintf(fout, " IV_TABLES %s %s ;\n", pin->lefiPin::tableHighName(), +

+

+ pin->lefiPin::tableLowName()); +

+

+ if (pin->lefiPin::hasTaperRule()) +

+

+ fprintf(fout, " TAPERRULE %s ;\n", pin->lefiPin::taperRule()); +

+

+ if (pin->lefiPin::hasNetExpr()) +

+

+ fprintf(fout, " NETEXPR \"%s\" ;\n", pin->lefiPin::netExpr()); +

+

+ if (pin->lefiPin::hasSupplySensitivity()) +

+

+ fprintf(fout, " SUPPLYSENSITIVITY %s ;\n", +

+

+ pin->lefiPin::supplySensitivity()); +

+

+ if (pin->lefiPin::hasGroundSensitivity()) +

+

+ fprintf(fout, " GROUNDSENSITIVITY %s ;\n", +

+

+ pin->lefiPin::groundSensitivity()); +

+

+ if (pin->lefiPin::hasAntennaSize()) { +

+

+ for (i = 0; i < pin->lefiPin::numAntennaSize(); i++) { +

+

+ fprintf(fout, " ANTENNASIZE %g ", pin->lefiPin::antennaSize(i)); +

+

+ if (pin->lefiPin::antennaSizeLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", pin->lefiPin::antennaSizeLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ if (pin->lefiPin::hasAntennaMetalArea()) { +

+

+ for (i = 0; i < pin->lefiPin::numAntennaMetalArea(); i++) { +

+

+ fprintf(fout, " ANTENNAMETALAREA %g ", +

+

+ pin->lefiPin::antennaMetalArea(i)); +

+

+ if (pin->lefiPin::antennaMetalAreaLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", pin->lefiPin::antennaMetalAreaLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ if (pin->lefiPin::hasAntennaMetalLength()) { +

+

+ for (i = 0; i < pin->lefiPin::numAntennaMetalLength(); i++) { +

+

+ fprintf(fout, " ANTENNAMETALLENGTH %g ", +

+

+ pin->lefiPin::antennaMetalLength(i)); +

+

+ if (pin->lefiPin::antennaMetalLengthLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", pin->lefiPin::antennaMetalLengthLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (pin->lefiPin::hasAntennaPartialMetalArea()) { +

+

+ for (i = 0; i < pin->lefiPin::numAntennaPartialMetalArea(); i++) { +

+

+ fprintf(fout, " ANTENNAPARTIALMETALAREA %g ", +

+

+ pin->lefiPin::antennaPartialMetalArea(i)); +

+

+ if (pin->lefiPin::antennaPartialMetalAreaLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", +

+

+ pin->lefiPin::antennaPartialMetalAreaLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (pin->lefiPin::hasAntennaPartialMetalSideArea()) { +

+

+ for (i = 0; i < pin->lefiPin::numAntennaPartialMetalSideArea(); i++) { +

+

+ fprintf(fout, " ANTENNAPARTIALMETALSIDEAREA %g ", +

+

+ pin->lefiPin::antennaPartialMetalSideArea(i)); +

+

+ if (pin->lefiPin::antennaPartialMetalSideAreaLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", +

+

+ pin->lefiPin::antennaPartialMetalSideAreaLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (pin->lefiPin::hasAntennaPartialCutArea()) { +

+

+ for (i = 0; i < pin->lefiPin::numAntennaPartialCutArea(); i++) { +

+

+ fprintf(fout, " ANTENNAPARTIALCUTAREA %g ", +

+

+ pin->lefiPin::antennaPartialCutArea(i)); +

+

+ if (pin->lefiPin::antennaPartialCutAreaLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", +

+

+ pin->lefiPin::antennaPartialCutAreaLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (pin->lefiPin::hasAntennaDiffArea()) { +

+

+ for (i = 0; i < pin->lefiPin::numAntennaDiffArea(); i++) { +

+

+ fprintf(fout, " ANTENNADIFFAREA %g ", +

+

+ pin->lefiPin::antennaDiffArea(i)); +

+

+ if (pin->lefiPin::antennaDiffAreaLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", pin->lefiPin::antennaDiffAreaLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ for (j = 0; j < pin->lefiPin::numAntennaModel(); j++) { +

+

+ aModel = pin->lefiPin::antennaModel(j); +

+

+ +

+

+ fprintf(fout, " ANTENNAMODEL %s ;\n", +

+

+ aModel->lefiPinAntennaModel::antennaOxide()); +

+

+   +

+

+ if (aModel->lefiPinAntennaModel::hasAntennaGateArea()) { +

+

+ for (i = 0; i < aModel->lefiPinAntennaModel::numAntennaGateArea(); i++) +

+

+ { +

+

+ fprintf(fout, " ANTENNAGATEAREA %g ", +

+

+ aModel->lefiPinAntennaModel::antennaGateArea(i)); +

+

+ if (aModel->lefiPinAntennaModel::antennaGateAreaLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", +

+

+ aModel->lefiPinAntennaModel::antennaGateAreaLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (aModel->lefiPinAntennaModel::hasAntennaMaxAreaCar()) { +

+

+ for (i = 0; i < aModel->lefiPinAntennaModel::numAntennaMaxAreaCar(); +

+

+ i++) { +

+

+ fprintf(fout, " ANTENNAMAXAREACAR %g ", +

+

+ aModel->lefiPinAntennaModel::antennaMaxAreaCar(i)); +

+

+ if (aModel->lefiPinAntennaModel::antennaMaxAreaCarLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", +

+

+ aModel->lefiPinAntennaModel::antennaMaxAreaCarLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (aModel->lefiPinAntennaModel::hasAntennaMaxSideAreaCar()) { +

+

+ for (i = 0; i < aModel->lefiPinAntennaModel::numAntennaMaxSideAreaCar(); +

+

+ i++) { +

+

+ fprintf(fout, " ANTENNAMAXSIDEAREACAR %g ", +

+

+ aModel->lefiPinAntennaModel::antennaMaxSideAreaCar(i)); +

+

+ if (aModel->lefiPinAntennaModel::antennaMaxSideAreaCarLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", +

+

+ aModel->lefiPinAntennaModel::antennaMaxSideAreaCarLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+   +

+

+ if (aModel->lefiPinAntennaModel::hasAntennaMaxCutCar()) { +

+

+ for (i = 0; i < aModel->lefiPinAntennaModel::numAntennaMaxCutCar(); i++) +

+

+ { +

+

+ fprintf(fout, " ANTENNAMAXCUTCAR %g ", +

+

+ aModel->lefiPinAntennaModel::antennaMaxCutCar(i)); +

+

+ if (aModel->lefiPinAntennaModel::antennaMaxCutCarLayer(i)) +

+

+ fprintf(fout, "LAYER %s ", +

+

+ aModel->lefiPinAntennaModel::antennaMaxCutCarLayer(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ } +

+

+ } +

+

+   +

+

+ if (pin->lefiPin::numProperties() > 0) { +

+

+ fprintf(fout, " PROPERTY "); +

+

+ for (i = 0; i < pin->lefiPin::numProperties(); i++) { +

+

+ // value can either be a string or number +

+

+ if (pin->lefiPin::propValue(i)) { +

+

+ fprintf(fout, "%s %s ", pin->lefiPin::propName(i), +

+

+ pin->lefiPin::propValue(i)); +

+

+ } +

+

+ else +

+

+ fprintf(fout, "%s %g ", pin->lefiPin::propName(i), +

+

+ pin->lefiPin::propNum(i)); +

+

+ switch (pin->lefiPin::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ +

+

+ numPorts = pin->lefiPin::numPorts(); +

+

+ for (i = 0; i < numPorts; i++) { +

+

+ fprintf(fout," PORT\n"); +

+

+ geometry = pin->lefiPin::port(i); +

+

+ prtGeometry(geometry); +

+

+ fprintf(fout, " END\n"); +

+

+ } +

+

+ fprintf(fout, " END %s\n", pin->lefiPin::name()); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int densityCB(lefrCallbackType_e c, lefiDensity* density, +

+

+ lefiUserData ud) { +

+

+   +

+

+ struct lefiGeomRect rect; +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, " DENSITY\n"); +

+

+ for (int i = 0; i < density->lefiDensity::numLayer(); i++) { +

+

+ fprintf(fout, " LAYER %s ;\n", density->lefiDensity::layerName(i)); +

+

+ for (int j = 0; j < density->lefiDensity::numRects(i); j++) { +

+

+ rect = density->lefiDensity::getRect(i,j); +

+

+ fprintf(fout, " RECT %g %g %g %g ", rect.xl, rect.yl, rect.xh, +

+

+ rect.yh); +

+

+ fprintf(fout, "%g ;\n", density->lefiDensity::densityValue(i,j)); +

+

+ } +

+

+ } +

+

+ fprintf(fout, " END\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int propDefBeginCB(lefrCallbackType_e c, void* ptr, lefiUserData ud) { +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "PROPERTYDEFINITIONS\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int propDefCB(lefrCallbackType_e c, lefiProp* prop, lefiUserData ud) { +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, " %s %s", prop->lefiProp::propType(), +

+

+ prop->lefiProp::propName()); +

+

+ switch(prop->lefiProp::dataType()) { +

+

+ case 'I': +

+

+ fprintf(fout, " INTEGER"); +

+

+ break; +

+

+ case 'R': +

+

+ fprintf(fout, " REAL"); +

+

+ break; +

+

+ case 'S': +

+

+ fprintf(fout, " STRING"); +

+

+ break; +

+

+ } +

+

+ if (prop->lefiProp::hasNumber()) +

+

+ fprintf(fout, " %g", prop->lefiProp::number()); +

+

+ if (prop->lefiProp::hasRange()) +

+

+ fprintf(fout, " RANGE %g %g", prop->lefiProp::left(), +

+

+ prop->lefiProp::right()); +

+

+ if (prop->lefiProp::hasString()) +

+

+ fprintf(fout, " %s", prop->lefiProp::string()); +

+

+ fprintf(fout, "\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int propDefEndCB(lefrCallbackType_e c, void* ptr, lefiUserData ud) { +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "END PROPERTYDEFINITIONS\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int siteCB(lefrCallbackType_e c, lefiSite* site, lefiUserData ud) { +

+

+ int hasPrtSym = 0; +

+

+ int i; +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "SITE %s\n", site->lefiSite::name()); +

+

+ if (site->lefiSite::hasClass()) +

+

+ fprintf(fout, " CLASS %s ;\n", site->lefiSite::siteClass()); +

+

+ if (site->lefiSite::hasXSymmetry()) { +

+

+ fprintf(fout, " SYMMETRY X "); +

+

+ hasPrtSym = 1; +

+

+ } +

+

+ if (site->lefiSite::hasYSymmetry()) { +

+

+ if (hasPrtSym) +

+

+ fprintf(fout, "Y "); +

+

+ else { +

+

+ fprintf(fout, " SYMMETRY Y "); +

+

+ hasPrtSym = 1; +

+

+ } +

+

+ } +

+

+ if (site->lefiSite::has90Symmetry()) { +

+

+ if (hasPrtSym) +

+

+ fprintf(fout, "R90 "); +

+

+ else { +

+

+ fprintf(fout, " SYMMETRY R90 "); +

+

+ hasPrtSym = 1; +

+

+ } +

+

+ } +

+

+ if (hasPrtSym) +

+

+ fprintf(fout, ";\n"); +

+

+ if (site->lefiSite::hasSize()) +

+

+ fprintf(fout, " SIZE %g BY %g ;\n", site->lefiSite::sizeX(), +

+

+ site->lefiSite::sizeY()); +

+

+   +

+

+ if (site->hasRowPattern()) { +

+

+ fprintf(fout, " ROWPATTERN "); +

+

+ for (i = 0; i < site->lefiSite::numSites(); i++) +

+

+ fprintf(fout, " %s %s ", site->lefiSite::siteName(i), +

+

+ site->lefiSite::siteOrientStr(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+   +

+

+ fprintf(fout, "END %s\n", site->lefiSite::name()); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int spacingBeginCB(lefrCallbackType_e c, void* ptr, lefiUserData ud){ +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "SPACING\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int spacingCB(lefrCallbackType_e c, lefiSpacing* spacing, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ lefSpacing(spacing); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int spacingEndCB(lefrCallbackType_e c, void* ptr, lefiUserData ud){ +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "END SPACING\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int timingCB(lefrCallbackType_e c, lefiTiming* timing, lefiUserData ud) { +

+

+ int i; +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "TIMING\n"); +

+

+ for (i = 0; i < timing->numFromPins(); i++) +

+

+ fprintf(fout, " FROMPIN %s ;\n", timing->fromPin(i)); +

+

+ for (i = 0; i < timing->numToPins(); i++) +

+

+ fprintf(fout, " TOPIN %s ;\n", timing->toPin(i)); +

+

+ fprintf(fout, " RISE SLEW1 %g %g %g %g ;\n", timing->riseSlewOne(), +

+

+ timing->riseSlewTwo(), timing->riseSlewThree(), +

+

+ timing->riseSlewFour()); +

+

+ if (timing->hasRiseSlew2()) +

+

+ fprintf(fout, " RISE SLEW2 %g %g %g ;\n", timing->riseSlewFive(), +

+

+ timing->riseSlewSix(), timing->riseSlewSeven()); +

+

+ if (timing->hasFallSlew()) +

+

+ fprintf(fout, " FALL SLEW1 %g %g %g %g ;\n", timing->fallSlewOne(), +

+

+ timing->fallSlewTwo(), timing->fallSlewThree(), +

+

+ timing->fallSlewFour()); +

+

+ if (timing->hasFallSlew2()) +

+

+ fprintf(fout, " FALL SLEW2 %g %g %g ;\n", timing->fallSlewFive(), +

+

+ timing->fallSlewSix(), timing->riseSlewSeven()); +

+

+ if (timing->hasRiseIntrinsic()) { +

+

+ fprintf(fout, "TIMING RISE INTRINSIC %g %g ;\n", +

+

+ timing->riseIntrinsicOne(), timing->riseIntrinsicTwo()); +

+

+ fprintf(fout, "TIMING RISE VARIABLE %g %g ;\n", +

+

+ timing->riseIntrinsicThree(), timing->riseIntrinsicFour()); +

+

+ } +

+

+ if (timing->hasFallIntrinsic()) { +

+

+ fprintf(fout, "TIMING FALL INTRINSIC %g %g ;\n", +

+

+ timing->fallIntrinsicOne(), timing->fallIntrinsicTwo()); +

+

+ fprintf(fout, "TIMING RISE VARIABLE %g %g ;\n", +

+

+ timing->fallIntrinsicThree(), timing->fallIntrinsicFour()); +

+

+ } +

+

+ if (timing->hasRiseRS()) +

+

+ fprintf(fout, "TIMING RISERS %g %g ;\n", +

+

+ timing->riseRSOne(), timing->riseRSTwo()); +

+

+ if (timing->hasRiseCS()) +

+

+ fprintf(fout, "TIMING RISECS %g %g ;\n", +

+

+ timing->riseCSOne(), timing->riseCSTwo()); +

+

+ if (timing->hasFallRS()) +

+

+ fprintf(fout, "TIMING FALLRS %g %g ;\n", +

+

+ timing->fallRSOne(), timing->fallRSTwo()); +

+

+ if (timing->hasFallCS()) +

+

+ fprintf(fout, "TIMING FALLCS %g %g ;\n", +

+

+ timing->fallCSOne(), timing->fallCSTwo()); +

+

+ if (timing->hasUnateness()) +

+

+ fprintf(fout, "TIMING UNATENESS %s ;\n", timing->unateness()); +

+

+ if (timing->hasRiseAtt1()) +

+

+ fprintf(fout, "TIMING RISESATT1 %g %g ;\n", timing->riseAtt1One(), +

+

+ timing->riseAtt1Two()); +

+

+ if (timing->hasFallAtt1()) +

+

+ fprintf(fout, "TIMING FALLSATT1 %g %g ;\n", timing->fallAtt1One(), +

+

+ timing->fallAtt1Two()); +

+

+ if (timing->hasRiseTo()) +

+

+ fprintf(fout, "TIMING RISET0 %g %g ;\n", timing->riseToOne(), +

+

+ timing->riseToTwo()); +

+

+ if (timing->hasFallTo()) +

+

+ fprintf(fout, "TIMING FALLT0 %g %g ;\n", timing->fallToOne(), +

+

+ timing->fallToTwo()); +

+

+ if (timing->hasSDFonePinTrigger()) +

+

+ fprintf(fout, " %s TABLEDIMENSION %g %g %g ;\n", +

+

+ timing->SDFonePinTriggerType(), timing->SDFtriggerOne(), +

+

+ timing->SDFtriggerTwo(), timing->SDFtriggerThree()); +

+

+ if (timing->hasSDFtwoPinTrigger()) +

+

+ fprintf(fout, " %s %s %s TABLEDIMENSION %g %g %g ;\n", +

+

+ timing->SDFtwoPinTriggerType(), timing->SDFfromTrigger(), +

+

+ timing->SDFtoTrigger(), timing->SDFtriggerOne(), +

+

+ timing->SDFtriggerTwo(), timing->SDFtriggerThree()); +

+

+ fprintf(fout, "END TIMING\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int unitsCB(lefrCallbackType_e c, lefiUnits* unit, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "UNITS\n"); +

+

+ if (unit->lefiUnits::hasDatabase()) +

+

+ fprintf(fout, " DATABASE %s %g ;\n", unit->lefiUnits::databaseName(), +

+

+ unit->lefiUnits::databaseNumber()); +

+

+ if (unit->lefiUnits::hasCapacitance()) +

+

+ fprintf(fout, " CAPACITANCE PICOFARADS %g ;\n", +

+

+ unit->lefiUnits::capacitance()); +

+

+ if (unit->lefiUnits::hasResistance()) +

+

+ fprintf(fout, " RESISTANCE OHMS %g ;\n", unit->lefiUnits::resistance()); +

+

+ if (unit->lefiUnits::hasPower()) +

+

+ fprintf(fout, " POWER MILLIWATTS %g ;\n", unit->lefiUnits::power()); +

+

+ if (unit->lefiUnits::hasCurrent()) +

+

+ fprintf(fout, " CURRENT MILLIAMPS %g ;\n", unit->lefiUnits::current()); +

+

+ if (unit->lefiUnits::hasVoltage()) +

+

+ fprintf(fout, " VOLTAGE VOLTS %g ;\n", unit->lefiUnits::voltage()); +

+

+ if (unit->lefiUnits::hasFrequency()) +

+

+ fprintf(fout, " FREQUENCY MEGAHERTZ %g ;\n", +

+

+ unit->lefiUnits::frequency()); +

+

+ fprintf(fout, "END UNITS\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int useMinSpacingCB(lefrCallbackType_e c, lefiUseMinSpacing* spacing, +

+

+ lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "USEMINSPACING %s ", spacing->lefiUseMinSpacing::name()); +

+

+ if (spacing->lefiUseMinSpacing::value()) +

+

+ fprintf(fout, "ON ;\n"); +

+

+ else +

+

+ fprintf(fout, "OFF ;\n"); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int versionCB(lefrCallbackType_e c, double num, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "VERSION %g ;\n", num); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int versionStrCB(lefrCallbackType_e c, const char* versionName, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "VERSION %s ;\n", versionName); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int viaCB(lefrCallbackType_e c, lefiVia* via, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ lefVia(via); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int viaRuleCB(lefrCallbackType_e c, lefiViaRule* viaRule, lefiUserData ud) { +

+

+ int numLayers, numVias, i; +

+

+ lefiViaRuleLayer* vLayer; +

+

+   +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "VIARULE %s", viaRule->lefiViaRule::name()); +

+

+ if (viaRule->lefiViaRule::hasGenerate()) +

+

+ fprintf(fout, " GENERATE"); +

+

+ if (viaRule->lefiViaRule::hasDefault()) +

+

+ fprintf(fout, " DEFAULT"); +

+

+ fprintf(fout, "\n"); +

+

+   +

+

+ numLayers = viaRule->lefiViaRule::numLayers(); +

+

+ for (i = 0; i < numLayers; i++) { +

+

+ vLayer = viaRule->lefiViaRule::layer(i); +

+

+ lefViaRuleLayer(vLayer); +

+

+ } +

+

+   +

+

+ if (numLayers == 2 && !(viaRule->lefiViaRule::hasGenerate())) { +

+

+ numVias = viaRule->lefiViaRule::numVias(); +

+

+ if (numVias == 0) +

+

+ fprintf(fout, "Should have via names in VIARULE.\n"); +

+

+ else { +

+

+ for (i = 0; i < numVias; i++) +

+

+ fprintf(fout, " VIA %s ;\n", viaRule->lefiViaRule::viaName(i)); +

+

+ } +

+

+ } +

+

+ if (viaRule->lefiViaRule::numProps() > 0) { +

+

+ fprintf(fout, " PROPERTY "); +

+

+ for (i = 0; i < viaRule->lefiViaRule::numProps(); i++) { +

+

+ fprintf(fout, "%s ", viaRule->lefiViaRule::propName(i)); +

+

+ if (viaRule->lefiViaRule::propValue(i)) +

+

+ fprintf(fout, "%s ", viaRule->lefiViaRule::propValue(i)); +

+

+ switch (viaRule->lefiViaRule::propType(i)) { +

+

+ case 'R': fprintf(fout, "REAL "); +

+

+ break; +

+

+ case 'I': fprintf(fout, "INTEGER "); +

+

+ break; +

+

+ case 'S': fprintf(fout, "STRING "); +

+

+ break; +

+

+ case 'Q': fprintf(fout, "QUOTESTRING "); +

+

+ break; +

+

+ case 'N': fprintf(fout, "NUMBER "); +

+

+ break; +

+

+ } +

+

+ } +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

+ fprintf(fout, "END %s\n", viaRule->lefiViaRule::name()); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int extensionCB(lefrCallbackType_e c, const char* extsn, lefiUserData ud) { +

+

+ checkType(c); +

+

+ fprintf(fout, "BEGINEXT %s ;\n", extsn); +

+

+ return 0; +

+

+ } +

+

+   +

+

+ int doneCB(lefrCallbackType_e c, void* ptr, lefiUserData ud) { +

+

+ checkType(c); +

+

+   +

+

+ fprintf(fout, "END LIBRARY\n"); +

+

+ return 0; +

+

+ } +

+

+ +

+

+ void errorCB(const char* msg) { +

+

+ printf ("%s : %s\n", lefrGetUserData(), msg); +

+

+ } +

+

+   +

+

+ void warningCB(const char* msg) { +

+

+ printf ("%s : %s\n", lefrGetUserData(), msg); +

+

+ } +

+

+   +

+

+ void* mallocCB(int size) { +

+

+ return malloc(size); +

+

+ } +

+

+   +

+

+ void* reallocCB(void* name, int size) { +

+

+ return realloc(name, size); +

+

+ } +

+

+   +

+

+ void freeCB(void* name) { +

+

+ free(name); +

+

+ return; +

+

+ } +

+

+   +

+

+ void lineNumberCB(int lineNo) { +

+

+ fprintf(fout, "Parsed %d number of lines!!\n", lineNo); +

+

+ return; +

+

+ } +

+

+   +

+

+ int +

+

+ main(int argc, char** argv) { +

+

+ char* inFile[100]; +

+

+ char* outFile; +

+

+ FILE* f; +

+

+ int res; +

+

+ int noCalls = 0; +

+

+ int num; +

+

+ int status; +

+

+ int retStr = 0; +

+

+ int numInFile = 0; +

+

+ int fileCt = 0; +

+

+ int relax = 0; +

+

+ char* version; +

+

+ int setVer = 0; +

+

+ char* userData; +

+

+ int msgCb = 0; +

+

+   +

+

+ userData = strdup ("(lefrw-5100)"); +

+

+ strcpy(defaultName,"lef.in"); +

+

+ strcpy(defaultOut,"list"); +

+

+ inFile[0] = defaultName; +

+

+ outFile = defaultOut; +

+

+ fout = stdout; +

+

+   +

+

+ argc--; +

+

+ argv++; +

+

+ while (argc--) { +

+

+   +

+

+ if (strcmp(*argv, "-d") == 0) { +

+

+ argv++; +

+

+ argc--; +

+

+ sscanf(*argv, "%d", &num); +

+

+ lefiSetDebug(num, 1); +

+

+   +

+

+ } else if (strcmp(*argv, "-nc") == 0) { +

+

+ noCalls = 1; +

+

+   +

+

+ } else if (strcmp(*argv, "-p") == 0) { +

+

+ printing = 1; +

+

+   +

+

+ } else if (strcmp(*argv, "-m") == 0) { // use the user error/warning CB +

+

+ msgCb = 1; +

+

+   +

+

+ } else if (strcmp(*argv, "-o") == 0) { +

+

+ argv++; +

+

+ argc--; +

+

+ outFile = *argv; +

+

+ if ((fout = fopen(outFile, "w")) == 0) { +

+

+     fprintf(stderr, "ERROR: could not open output file\n"); +

+

+     return 2; +

+

+ } +

+

+   +

+

+ } else if (strcmp(*argv, "-verStr") == 0) { +

+

+ /* New to set the version callback routine to return a string */ +

+

+ /* instead of double. */ +

+

+ retStr = 1; +

+

+   +

+

+ } else if (strcmp(*argv, "-relax") == 0) { +

+

+ relax = 1; +

+

+   +

+

+ } else if (strcmp(*argv, "-65nm") == 0) { +

+

+ parse65nm = 1; +

+

+   +

+

+ } else if (strcmp(*argv, "-ver") == 0) { +

+

+ argv++; +

+

+ argc--; +

+

+ setVer = 1; +

+

+ version = *argv; +

+

+   +

+

+ } else if (argv[0][0] != '-') { +

+

+ if (numInFile >= 100) { +

+

+ fprintf(stderr, "ERROR: too many input files, max = 3.\n"); +

+

+ return 2; +

+

+ } +

+

+ inFile[numInFile++] = *argv; +

+

+   +

+

+ } else { +

+

+ fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv); +

+

+ return 2; +

+

+ } +

+

+   +

+

+ argv++; +

+

+ } +

+

+   +

+

+ if (noCalls == 0) { +

+

+ lefrSetAntennaInputCbk(antennaCB); +

+

+ lefrSetAntennaInoutCbk(antennaCB); +

+

+ lefrSetAntennaOutputCbk(antennaCB); +

+

+ lefrSetArrayBeginCbk(arrayBeginCB); +

+

+ lefrSetArrayCbk(arrayCB); +

+

+ lefrSetArrayEndCbk(arrayEndCB); +

+

+ lefrSetBusBitCharsCbk(busBitCharsCB); +

+

+ lefrSetCaseSensitiveCbk(caseSensCB); +

+

+ lefrSetClearanceMeasureCbk(clearanceCB); +

+

+ lefrSetDensityCbk(densityCB); +

+

+ lefrSetDividerCharCbk(dividerCB); +

+

+ lefrSetNoWireExtensionCbk(noWireExtCB); +

+

+ lefrSetEdgeRateThreshold1Cbk(edge1CB); +

+

+ lefrSetEdgeRateThreshold2Cbk(edge2CB); +

+

+ lefrSetEdgeRateScaleFactorCbk(edgeScaleCB); +

+

+ lefrSetExtensionCbk(extensionCB); +

+

+ lefrSetDielectricCbk(dielectricCB); +

+

+ lefrSetIRDropBeginCbk(irdropBeginCB); +

+

+ lefrSetIRDropCbk(irdropCB); +

+

+ lefrSetIRDropEndCbk(irdropEndCB); +

+

+ lefrSetLayerCbk(layerCB); +

+

+ lefrSetLibraryEndCbk(doneCB); +

+

+ lefrSetMacroBeginCbk(macroBeginCB); +

+

+ lefrSetMacroCbk(macroCB); +

+

+ lefrSetMacroClassTypeCbk(macroClassTypeCB); +

+

+ lefrSetMacroEndCbk(macroEndCB); +

+

+ lefrSetManufacturingCbk(manufacturingCB); +

+

+ lefrSetMaxStackViaCbk(maxStackViaCB); +

+

+ lefrSetMinFeatureCbk(minFeatureCB); +

+

+ lefrSetNonDefaultCbk(nonDefaultCB); +

+

+ lefrSetObstructionCbk(obstructionCB); +

+

+ lefrSetPinCbk(pinCB); +

+

+ lefrSetPropBeginCbk(propDefBeginCB); +

+

+ lefrSetPropCbk(propDefCB); +

+

+ lefrSetPropEndCbk(propDefEndCB); +

+

+ lefrSetSiteCbk(siteCB); +

+

+ lefrSetSpacingBeginCbk(spacingBeginCB); +

+

+ lefrSetSpacingCbk(spacingCB); +

+

+ lefrSetSpacingEndCbk(spacingEndCB); +

+

+ lefrSetTimingCbk(timingCB); +

+

+ lefrSetUnitsCbk(unitsCB); +

+

+ lefrSetUseMinSpacingCbk(useMinSpacingCB); +

+

+ lefrSetUserData((void*)3); +

+

+ if (!retStr) +

+

+ lefrSetVersionCbk(versionCB); +

+

+ else +

+

+ lefrSetVersionStrCbk(versionStrCB); +

+

+ lefrSetViaCbk(viaCB); +

+

+ lefrSetViaRuleCbk(viaRuleCB); +

+

+ lefrSetInputAntennaCbk(antennaCB); +

+

+ lefrSetOutputAntennaCbk(antennaCB); +

+

+ lefrSetInoutAntennaCbk(antennaCB); +

+

+   +

+

+ if (msgCb) { +

+

+ lefrSetLogFunction(errorCB); +

+

+ lefrSetWarningLogFunction(warningCB); +

+

+ } +

+

+   +

+

+ lefrSetMallocFunction(mallocCB); +

+

+ lefrSetReallocFunction(reallocCB); +

+

+ lefrSetFreeFunction(freeCB); +

+

+   +

+

+ lefrSetLineNumberFunction(lineNumberCB); +

+

+ lefrSetDeltaNumberLines(50); +

+

+ +

+

+ lefrSetRegisterUnusedCallbacks(); +

+

+   +

+

+ if (relax) +

+

+ lefrSetRelaxMode(); +

+

+   +

+

+ if (setVer) +

+

+ (void)lefrSetVersionValue(version); +

+

+   +

+

+ lefrSetAntennaInoutWarnings(30); +

+

+ lefrSetAntennaInputWarnings(30); +

+

+ lefrSetAntennaOutputWarnings(30); +

+

+ lefrSetArrayWarnings(30); +

+

+ lefrSetCaseSensitiveWarnings(30); +

+

+ lefrSetCorrectionTableWarnings(30); +

+

+ lefrSetDielectricWarnings(30); +

+

+ lefrSetEdgeRateThreshold1Warnings(30); +

+

+ lefrSetEdgeRateThreshold2Warnings(30); +

+

+ lefrSetEdgeRateScaleFactorWarnings(30); +

+

+ lefrSetInoutAntennaWarnings(30); +

+

+ lefrSetInputAntennaWarnings(30); +

+

+ lefrSetIRDropWarnings(30); +

+

+ lefrSetLayerWarnings(30); +

+

+ lefrSetMacroWarnings(30); +

+

+ lefrSetMaxStackViaWarnings(30); +

+

+ lefrSetMinFeatureWarnings(30); +

+

+ lefrSetNoiseMarginWarnings(30); +

+

+ lefrSetNoiseTableWarnings(30); +

+

+ lefrSetNonDefaultWarnings(30); +

+

+ lefrSetNoWireExtensionWarnings(30); +

+

+ lefrSetOutputAntennaWarnings(30); +

+

+ lefrSetPinWarnings(30); +

+

+ lefrSetSiteWarnings(30); +

+

+ lefrSetSpacingWarnings(30); +

+

+ lefrSetTimingWarnings(30); +

+

+ lefrSetUnitsWarnings(30); +

+

+ lefrSetUseMinSpacingWarnings(30); +

+

+ lefrSetViaRuleWarnings(30); +

+

+ lefrSetViaWarnings(30); +

+

+ } +

+

+   +

+

+ (void) lefrSetShiftCase(); // will shift name to uppercase if caseinsensitive +

+

+ // is set to off or not set +

+

+   +

+

+ lefrInit(); +

+

+   +

+

+ for (fileCt = 0; fileCt < numInFile; fileCt++) { +

+

+ lefrReset(); +

+

+   +

+

+ if ((f = fopen(inFile[fileCt],"r")) == 0) { +

+

+ fprintf(stderr,"Couldn't open input file '%s'\n", inFile[fileCt]); +

+

+ return(2); +

+

+ } +

+

+   +

+

+ (void)lefrEnableReadEncrypted(); +

+

+ +

+

+ status = lefwInit(fout); // initialize the lef writer, need to be called 1st +

+

+ if (status != LEFW_OK) +

+

+ return 1; +

+

+   +

+

+ res = lefrRead(f, inFile[fileCt], (void*)userData); +

+

+   +

+

+ if (res) +

+

+ fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]); +

+

+   +

+

+ (void)lefrPrintUnusedCallbacks(fout); +

+

+ (void)lefrReleaseNResetMemory(); +

+

+   +

+

+ } +

+

+ fclose(fout); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+

LEF Writer Program

+

+ #include <stdlib.h> +

+

+ #include <stdio.h> +

+

+ #include <string.h> +

+

+ #ifndef WIN32 +

+

+ # include <unistd.h> +

+

+ #endif /* not WIN32 */ +

+

+ #include "lefwWriter.hpp" +

+

+   +

+

+ char defaultOut[128]; +

+

+   +

+

+ // Global variables +

+

+ FILE* fout; +

+

+   +

+

+ #define CHECK_STATUS(status) \ +

+

+ if (status) { \ +

+

+ lefwPrintError(status); \ +

+

+ return(status); \ +

+

+ } +

+

+   +

+

+ int main(int argc, char** argv) { +

+

+ char* outfile; +

+

+ int status; // return code, if none 0 means error +

+

+ int lineNum = 0; +

+

+   +

+

+ // assign the default +

+

+ strcpy(defaultOut, "lef.in"); +

+

+ outfile = defaultOut; +

+

+ fout = stdout; +

+

+   +

+

+ double *xpath; +

+

+ double *ypath; +

+

+ double *xl; +

+

+ double *yl; +

+

+ double *wthn, *spng; +

+

+   +

+

+ argc--; +

+

+ argv++; +

+

+ while (argc--) { +

+

+ if (strcmp(*argv, "-o") == 0) { // output filename +

+

+ argv++; +

+

+ argc--; +

+

+ outfile = *argv; +

+

+ if ((fout = fopen(outfile, "w")) == 0) { +

+

+ fprintf(stderr, "ERROR: could not open output file\n"); +

+

+ return 2; +

+

+ } +

+

+ } else if (strncmp(*argv, "-h", 2) == 0) { // compare with -h[elp] +

+

+ fprintf(stderr, "Usage: lefwrite [-o <filename>] [-help]\n"); +

+

+ return 1; +

+

+ } else { +

+

+ fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv); +

+

+ return 2; +

+

+ } +

+

+ argv++; +

+

+ } +

+

+   +

+

+ // initalize +

+

+ status = lefwInit(fout); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwVersion(5, 7); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwBusBitChars("<>"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwDividerChar(":"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwManufacturingGrid(3.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwUseMinSpacing("OBS", "OFF"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwClearanceMeasure("EUCLIDEAN"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // 5.4 ANTENNA +

+

+ status = lefwAntennaInputGateArea(45); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwAntennaInOutDiffArea(65); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwAntennaOutputDiffArea(55); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // UNITS +

+

+ status = lefwStartUnits(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwUnits(100, 10, 10000, 10000, 10000, 1000, 20000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwUnitsFrequency(10); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndUnits(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // PROPERTYDEFINITIONS +

+

+ status = lefwStartPropDef(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringPropDef("LIBRARY", "NAME", 0, 0, "Cadence96"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntPropDef("LIBRARY", "intNum", 0, 0, 20); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealPropDef("LIBRARY", "realNum", 0, 0, 21.22); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringPropDef("PIN", "TYPE", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntPropDef("PIN", "intProp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealPropDef("PIN", "realProp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringPropDef("MACRO", "stringProp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntPropDef("MACRO", "integerProp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealPropDef("MACRO", "WEIGHT", 1.0, 100.0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringPropDef("VIA", "stringProperty", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealPropDef("VIA", "realProp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntPropDef("VIA", "COUNT", 1, 100, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringPropDef("LAYER", "lsp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntPropDef("LAYER", "lip", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealPropDef("LAYER", "lrp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringPropDef("VIARULE", "vrsp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealPropDef("VIARULE", "vrip", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntPropDef("VIARULE", "vrrp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringPropDef("NONDEFAULTRULE", "ndrsp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntPropDef("NONDEFAULTRULE", "ndrip", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealPropDef("NONDEFAULTRULE", "ndrrp", 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndPropDef(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // LAYERS +

+

+ double *current; +

+

+ double *diffs; +

+

+ double *ratios; +

+

+ double *area; +

+

+ double *width; +

+

+   +

+

+ current = (double*)malloc(sizeof(double)*15); +

+

+ diffs = (double*)malloc(sizeof(double)*15); +

+

+ ratios = (double*)malloc(sizeof(double)*15); +

+

+   +

+

+ status = lefwStartLayer("POLYS", "MASTERSLICE"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringProperty("lsp", "top"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntProperty("lip", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealProperty("lrp", 2.3); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("POLYS"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("CUT01", "CUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerDCCurrentDensity("AVERAGE", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 2.0; +

+

+ current[1] = 5.0; +

+

+ current[2] = 10.0; +

+

+ status = lefwLayerDCCutarea(3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.6E-6; +

+

+ current[1] = 0.5E-6; +

+

+ current[2] = 0.4E-6; +

+

+ status = lefwLayerDCTableEntries(3, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("CUT01"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("RX"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("HORIZONTAL", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingPitch(1.8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingDiagPitch(1.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingDiagWidth(1.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingDiagSpacing(0.05); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingDiagMinEdgeLength(0.07); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingArea(34.1); +

+

+ CHECK_STATUS(status); +

+

+ xl = (double*)malloc(sizeof(double)*2); +

+

+ yl = (double*)malloc(sizeof(double)*2); +

+

+ xl[0] = 0.14; +

+

+ yl[0] = 0.30; +

+

+ xl[1] = 0.08; +

+

+ yl[1] = 0.33; +

+

+ status = lefwLayerRoutingMinsize(2, xl, yl); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xl); +

+

+ free((char*)yl); +

+

+ status = lefwLayerRoutingWireExtension(0.75); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingOffset(0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingRange(0.1, 9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingResistance("0.103"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingCapacitance("0.000156"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingHeight(9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingThickness(1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingShrinkage(0.1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingEdgeCap(0.00005); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingCapMultiplier(1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinwidth(0.15); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingAntennaArea(1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumAreaRatio(6.7); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumRoutingPlusCut(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaAreaMinusDiff(100.0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaGatePlusDiff(2.0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumDiffAreaRatio(1000); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ xl = (double*)malloc(sizeof(double)*5); +

+

+ yl = (double*)malloc(sizeof(double)*5); +

+

+ xl[0] = 0.0; +

+

+ yl[0] = 1.0; +

+

+ xl[1] = 0.09999; +

+

+ yl[1] = 1.0; +

+

+ xl[2] = 0.1; +

+

+ yl[2] = 0.2; +

+

+ xl[3] = 1.0; +

+

+ yl[3] = 0.1; +

+

+ xl[4] = 100; +

+

+ yl[4] = 0.1; +

+

+ status = lefwLayerAntennaAreaDiffReducePwl(5, xl, yl); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xl); +

+

+ free((char*)yl); +

+

+ status = lefwLayerAntennaCumDiffAreaRatio(1000); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingAntennaLength(1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerACCurrentDensity("PEAK", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 1E6; +

+

+ current[1] = 100E6; +

+

+ current[2] = 400E6; +

+

+ status = lefwLayerACFrequency(3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.4; +

+

+ current[1] = 0.8; +

+

+ current[2] = 10.0; +

+

+ current[3] = 50.0; +

+

+ status = lefwLayerACCutarea(4, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.4; +

+

+ current[1] = 0.8; +

+

+ current[2] = 10.0; +

+

+ current[3] = 50.0; +

+

+ current[4] = 100.0; +

+

+ status = lefwLayerACWidth(5, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 2.0E-6; +

+

+ current[1] = 1.9E-6; +

+

+ current[2] = 1.8E-6; +

+

+ current[3] = 1.7E-6; +

+

+ current[4] = 1.5E-6; +

+

+ current[5] = 1.4E-6; +

+

+ current[6] = 1.3E-6; +

+

+ current[7] = 1.2E-6; +

+

+ current[8] = 1.1E-6; +

+

+ current[9] = 1.0E-6; +

+

+ current[10] = 0.9E-6; +

+

+ current[11] = 0.8E-6; +

+

+ current[12] = 0.7E-6; +

+

+ current[13] = 0.6E-6; +

+

+ current[14] = 0.4E-6; +

+

+ status = lefwLayerACTableEntries(15, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerACCurrentDensity("AVERAGE", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 1E6; +

+

+ current[1] = 100E6; +

+

+ current[2] = 400E6; +

+

+ status = lefwLayerACFrequency(3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.6E-6; +

+

+ current[1] = 0.5E-6; +

+

+ current[2] = 0.4E-6; +

+

+ status = lefwLayerACTableEntries(3, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerACCurrentDensity("RMS", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 1E6; +

+

+ current[1] = 400E6; +

+

+ current[2] = 800E6; +

+

+ status = lefwLayerACFrequency(3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.4; +

+

+ current[1] = 0.8; +

+

+ current[2] = 10.0; +

+

+ current[3] = 50.0; +

+

+ current[4] = 100.0; +

+

+ status = lefwLayerACWidth(5, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 2.0E-6; +

+

+ current[1] = 1.9E-6; +

+

+ current[2] = 1.8E-6; +

+

+ current[3] = 1.7E-6; +

+

+ current[4] = 1.5E-6; +

+

+ current[5] = 1.4E-6; +

+

+ current[6] = 1.3E-6; +

+

+ current[7] = 1.2E-6; +

+

+ current[8] = 1.1E-6; +

+

+ current[9] = 1.0E-6; +

+

+ current[10] = 0.9E-6; +

+

+ current[11] = 0.8E-6; +

+

+ current[12] = 0.7E-6; +

+

+ current[13] = 0.6E-6; +

+

+ current[14] = 0.4E-6; +

+

+ status = lefwLayerACTableEntries(15, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("RX"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("CUT12", "CUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(0.7); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingLayer("RX", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerResistancePerCut(8.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(0.22); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingAdjacent(3, 0.25, 0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(1.5); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingParallel(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(1.2); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingAdjacent(2, 1.5, 0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaModel("OXIDE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaAreaRatio(5.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaDiffAreaRatio(6.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaAreaFactor(5.4, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumDiffAreaRatio(4.5); +

+

+ CHECK_STATUS(status); +

+

+ diffs[0] = 5.4; +

+

+ ratios[0] = 5.4; +

+

+ diffs[1] = 6.5; +

+

+ ratios[1] = 6.5; +

+

+ diffs[2] = 7.5; +

+

+ ratios[2] = 7.5; +

+

+ status = lefwLayerAntennaCumDiffAreaRatioPwl(3, diffs, ratios); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumAreaRatio(6.7); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaModel("OXIDE2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumAreaRatio(300); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumRoutingPlusCut(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaAreaMinusDiff(100.0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaGatePlusDiff(2.0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaDiffAreaRatio(1000); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumDiffAreaRatio(5000); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ xl = (double*)malloc(sizeof(double)*5); +

+

+ yl = (double*)malloc(sizeof(double)*5); +

+

+ xl[0] = 0.0; +

+

+ yl[0] = 1.0; +

+

+ xl[1] = 0.09999; +

+

+ yl[1] = 1.0; +

+

+ xl[2] = 0.1; +

+

+ yl[2] = 0.2; +

+

+ xl[3] = 1.0; +

+

+ yl[3] = 0.1; +

+

+ xl[4] = 100; +

+

+ yl[4] = 0.1; +

+

+ status = lefwLayerAntennaAreaDiffReducePwl(5, xl, yl); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xl); +

+

+ free((char*)yl); +

+

+ diffs[0] = 1; +

+

+ ratios[0] = 4; +

+

+ diffs[1] = 2; +

+

+ ratios[1] = 5; +

+

+ status = lefwLayerAntennaCumDiffAreaRatioPwl(2, diffs, ratios); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerACCurrentDensity("PEAK", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 1E6; +

+

+ current[1] = 100E6; +

+

+ status = lefwLayerACFrequency(2, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.5E-6; +

+

+ current[1] = 0.4E-6; +

+

+ status = lefwLayerACTableEntries(2, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerACCurrentDensity("AVERAGE", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 1E6; +

+

+ current[1] = 100E6; +

+

+ status = lefwLayerACFrequency(2, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.6E-6; +

+

+ current[1] = 0.5E-6; +

+

+ status = lefwLayerACTableEntries(2, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerACCurrentDensity("RMS", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 100E6; +

+

+ current[1] = 800E6; +

+

+ status = lefwLayerACFrequency(2, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.5E-6; +

+

+ current[1] = 0.4E-6; +

+

+ status = lefwLayerACTableEntries(2, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("CUT12"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("PC"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("DIAG45", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingPitch(1.8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingWireExtension(0.4); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(1.2); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingEndOfLine(1.3, 0.6); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(1.3); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingEndOfLine(1.4, 0.7); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingEOLParallel(1.1, 0.5, 1); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(1.4); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingEndOfLine(1.5, 0.8); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingEOLParallel(1.2, 0.6, 0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingOffsetXYDistance(0.9, 0.7); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingResistance("PWL ( ( 1 0.103 ) )"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingCapacitance("PWL ( ( 1 0.000156 ) ( 10 0.001 ) )"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaAreaRatio(5.4); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaDiffAreaRatio(6.5); +

+

+ CHECK_STATUS(status); +

+

+ diffs[0] = 4.0; +

+

+ ratios[0] = 4.1; +

+

+ diffs[1] = 4.2; +

+

+ ratios[1] = 4.3; +

+

+ status = lefwLayerAntennaDiffAreaRatioPwl(2, diffs, ratios); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumAreaRatio(7.5); +

+

+ CHECK_STATUS(status); +

+

+ diffs[0] = 5.0; +

+

+ ratios[0] = 5.1; +

+

+ diffs[1] = 6.0; +

+

+ ratios[1] = 6.1; +

+

+ status = lefwLayerAntennaCumDiffAreaRatioPwl(2, diffs, ratios); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaAreaFactor(4.5, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaSideAreaRatio(6.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumDiffSideAreaRatio(4.6); +

+

+ CHECK_STATUS(status); +

+

+ diffs[0] = 8.0; +

+

+ ratios[0] = 8.1; +

+

+ diffs[1] = 8.2; +

+

+ ratios[1] = 8.3; +

+

+ diffs[2] = 8.4; +

+

+ ratios[2] = 8.5; +

+

+ diffs[3] = 8.6; +

+

+ ratios[3] = 8.7; +

+

+ status = lefwLayerAntennaCumDiffSideAreaRatioPwl(4, diffs, ratios); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumSideAreaRatio(7.4); +

+

+ CHECK_STATUS(status); +

+

+ diffs[0] = 7.0; +

+

+ ratios[0] = 7.1; +

+

+ diffs[1] = 7.2; +

+

+ ratios[1] = 7.3; +

+

+ status = lefwLayerAntennaDiffSideAreaRatioPwl(2, diffs, ratios); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaSideAreaFactor(9.0, "DIFFUSEONLY"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerDCCurrentDensity("AVERAGE", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 20.0; +

+

+ current[1] = 50.0; +

+

+ current[2] = 100.0; +

+

+ status = lefwLayerDCWidth(3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 1.0E-6; +

+

+ current[1] = 0.7E-6; +

+

+ current[2] = 0.5E-6; +

+

+ status = lefwLayerDCTableEntries(3, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("PC"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("CA", "CUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(0.15); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingCenterToCenter(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure("BELOW", 0.3, 0.01, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure("ABOVE", 0.5, 0.01, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerPreferEnclosure("BELOW", 0.06, 0.01, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerPreferEnclosure("ABOVE", 0.08, 0.02, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure("", 0.02, 0.02, 1.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure(NULL, 0.05, 0.05, 2.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure("BELOW", 0.07, 0.07, 1.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure("ABOVE", 0.09, 0.09, 1.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerResistancePerCut(10.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerDCCurrentDensity("AVERAGE", 0); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 2.0; +

+

+ current[1] = 5.0; +

+

+ current[2] = 10.0; +

+

+ status = lefwLayerDCWidth(3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.6E-6; +

+

+ current[1] = 0.5E-6; +

+

+ current[2] = 0.4E-6; +

+

+ status = lefwLayerDCTableEntries(3, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("CA"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("DIAG135", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingPitch(1.8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingRange(1.1, 100.1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingRangeUseLengthThreshold(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.61); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingRange(1.1, 100.1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingRangeInfluence(2.01, 2.0, 1000.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.62); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingRange(1.1, 100.1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingRangeRange(4.1, 6.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.63); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingLengthThreshold(1.34, 4.5, 6.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingWireExtension(7); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingResistance("0.103"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingCapacitance("0.000156"); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.00; +

+

+ current[1] = 0.50; +

+

+ current[2] = 3.00; +

+

+ current[3] = 5.00; +

+

+ status = lefwLayerRoutingStartSpacingtableParallel(4, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.15; +

+

+ current[2] = 0.15; +

+

+ current[3] = 0.15; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(0.00, 4, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.20; +

+

+ current[2] = 0.20; +

+

+ current[3] = 0.20; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(0.25, 4, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.50; +

+

+ current[2] = 0.50; +

+

+ current[3] = 0.50; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(1.50, 4, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.50; +

+

+ current[2] = 1.00; +

+

+ current[3] = 1.00; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(3.00, 4, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.50; +

+

+ current[2] = 1.00; +

+

+ current[3] = 2.00; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(5.00, 4, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutineEndSpacingtable(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingStartSpacingtableInfluence(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingInfluenceWidth(1.5, 0.5, 0.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingInfluenceWidth(3.0, 1.0, 1.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingInfluenceWidth(5.0, 2.0, 2.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutineEndSpacingtable(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingStartSpacingtableInfluence(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingInfluenceWidth(1.5, 0.5, 0.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingInfluenceWidth(5.0, 2.0, 2.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutineEndSpacingtable(); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.00; +

+

+ current[1] = 0.50; +

+

+ current[2] = 5.00; +

+

+ status = lefwLayerRoutingStartSpacingtableParallel(3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.15; +

+

+ current[2] = 0.15; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(0.00, 3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.20; +

+

+ current[2] = 0.20; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(0.25, 3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.50; +

+

+ current[2] = 1.00; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(3.00, 3, current); +

+

+ CHECK_STATUS(status); +

+

+ current[0] = 0.15; +

+

+ current[1] = 0.50; +

+

+ current[2] = 2.00; +

+

+ status = lefwLayerRoutingSpacingtableParallelWidth(5.00, 3, current); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutineEndSpacingtable(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)current); +

+

+ free((char*)diffs); +

+

+ free((char*)ratios); +

+

+ status = lefwLayerAntennaGatePlusDiff(2.0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaDiffAreaRatio(1000); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerAntennaCumDiffAreaRatio(5000); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("M1"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("V1", "CUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(0.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingLayer("CA", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("V1"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("VERTICAL", 0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingPitch(1.8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingWireExtension(8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingLengthThreshold(100.9, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingLengthThreshold(0.9, 0, 0.1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingLengthThreshold(1.9, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(1.0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingSameNet(1); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(1.1); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingSameNet(0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingResistance("0.0608"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingCapacitance("0.000184"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("M2"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("V2", "CUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("V2"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("M3"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("HORIZONTAL", 0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingPitchXYDistance(1.8, 1.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingDiagPitchXYDistance(1.5, 1.8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingWireExtension(8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingResistance("0.0608"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingCapacitance("0.000184"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("M3"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ area = (double*)malloc(sizeof(double)*3); +

+

+ width = (double*)malloc(sizeof(double)*3); +

+

+   +

+

+ status = lefwStartLayerRouting("M4"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("HORIZONTAL", 0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinimumcut(2, 0.50); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinimumcut(2, 0.70); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinimumcutConnections("FROMBELOW"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinimumcut(4, 1.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinimumcutConnections("FROMABOVE"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinimumcut(2, 1.1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinimumcutLengthWithin(20.0, 5.0); +

+

+ CHECK_STATUS(status); +

+

+ area[0] = 0.40; +

+

+ width[0] = 0; +

+

+ area[1] = 0.40; +

+

+ width[1] = 0.15; +

+

+ area[2] = 0.80; +

+

+ width[2] = 0.50; +

+

+ status = lefwLayerRoutingMinenclosedarea(3, area, width); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMaxwidth(10.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingProtrusion(0.30, 0.60, 1.20); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstep(0.20); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstep(0.05); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstepWithOptions(0.05, NULL, 0.08); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstepWithOptions(0.05, NULL, 0.16); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstepWithOptions(0.05, "INSDECORNER", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstepWithOptions(0.05, "INSIDECORNER", 0.15); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstepWithOptions(0.05, "STEP", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstepWithOptions(0.05, "STEP", 0.08); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstepWithOptions(0.04, "STEP", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingMinstepMaxEdges(1.0, 2); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("M4"); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)area); +

+

+ free((char*)width); +

+

+   +

+

+ status = lefwStartLayer("implant1", "IMPLANT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerWidth(0.50); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(0.50); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("implant1"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("implant2", "IMPLANT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerWidth(0.50); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(0.50); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("implant2"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("V3", "CUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerWidth(0.60); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("V3"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("MT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("VERTICAL", 0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingPitch(1.8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingResistance("0.0608"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingCapacitance("0.000184"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("MT"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("OVERLAP", "OVERLAP"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("OVERLAP"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("MET2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("VERTICAL", 0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMinimumDensity(20.2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMaximumDensity(80.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwDensityCheckWindow(200.0, 200.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwDensityCheckStep(100.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwFillActiveSpacing(3.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("MET2"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("via34", "CUT"); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerWidth(0.25); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(0.1); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingCenterToCenter(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure(0, .05, .01, 0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosureLength(0, .05, 0, 0.7); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure("BELOW", .07, .07, 1.0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosure("ABOVE", .09, .09, 1.0); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerEnclosureWidth(0, .03, .03, 1.0, 0.2); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayer("via34"); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayer("cut23", "CUT"); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacing(0.20); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingSameNet(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingLayer("cut12", 1); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwLayerCutSpacing(0.30); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingCenterToCenter(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingSameNet(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingArea(0.02); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwLayerCutSpacing(0.40); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingArea(0.5); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwLayerCutSpacing(0.10); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerCutSpacingEnd(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ wthn = (double*)malloc(sizeof(double)*3); // 5.7 +

+

+ spng = (double*)malloc(sizeof(double)*3); +

+

+ wthn[0] = 0.15; +

+

+ spng[0] = 0.11; +

+

+ wthn[1] = 0.13; +

+

+ spng[1] = 0.13; +

+

+ wthn[2] = 0.11; +

+

+ spng[2] = 0.15; +

+

+ status = lefwLayerCutSpacingTableOrtho(3, wthn, spng); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ wthn[0] = 3; +

+

+ spng[0] = 1; +

+

+ status = lefwLayerArraySpacing(0, 2.0, 0.2, 1, wthn, spng); +

+

+ CHECK_STATUS(status); +

+

+ wthn[0] = 3; +

+

+ spng[0] = 1; +

+

+ wthn[1] = 4; +

+

+ spng[1] = 1.5; +

+

+ wthn[2] = 5; +

+

+ spng[2] = 2.0; +

+

+ status = lefwLayerArraySpacing(1, 2.0, 0.2, 3, wthn, spng); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)wthn); +

+

+ free((char*)spng); +

+

+ status = lefwEndLayer("cut23"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("cut24"); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("HORIZONTAL", 1); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingPitch(1.2); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.10); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.12); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingNotchLength(0.15); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacing(0.14); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingSpacingEndOfNotchWidth(0.15, 0.16, 0.08); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("cut24"); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartLayerRouting("cut25"); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingPitch(1.2); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRouting("HORIZONTAL", 1); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingWireExtension(7); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ status = lefwLayerRoutingStartSpacingtableTwoWidths(); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ wthn = (double*)malloc(sizeof(double)*4); // 5.7 +

+

+ wthn[0] = 0.15; +

+

+ wthn[1] = 0.20; +

+

+ wthn[2] = 0.50; +

+

+ wthn[3] = 1.00; +

+

+ status = lefwLayerRoutingSpacingtableTwoWidthsWidth(0.0, 0, 4, wthn); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+ wthn[0] = 0.20; +

+

+ wthn[1] = 0.25; +

+

+ wthn[2] = 0.50; +

+

+ wthn[3] = 1.00; +

+

+ status = lefwLayerRoutingSpacingtableTwoWidthsWidth(0.25, 0.1, 4, wthn);// 5.7 +

+

+ CHECK_STATUS(status); +

+

+ wthn[0] = 0.50; +

+

+ wthn[1] = 0.50; +

+

+ wthn[2] = 0.60; +

+

+ wthn[3] = 1.00; +

+

+ status = lefwLayerRoutingSpacingtableTwoWidthsWidth(1.5, 1.5, 4, wthn);// 5.7 +

+

+ CHECK_STATUS(status); +

+

+ wthn[0] = 1.00; +

+

+ wthn[1] = 1.00; +

+

+ wthn[2] = 1.00; +

+

+ wthn[3] = 1.20; +

+

+ status = lefwLayerRoutingSpacingtableTwoWidthsWidth(3.0, 3.0, 4, wthn);// 5.7 +

+

+ CHECK_STATUS(status); +

+

+ free(wthn); +

+

+ status = lefwLayerRoutineEndSpacingtable(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndLayerRouting("cut25"); // 5.7 +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // MAXVIASTACK +

+

+ status = lefwMaxviastack(4, "m1", "m7"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // VIA +

+

+ status = lefwStartVia("RX_PC", "DEFAULT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaResistance(2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("RX"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-0.7, -0.7, 0.7, 0.7); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("CUT12"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-0.25, -0.25, 0.25, 0.25); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("PC"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-0.6, -0.6, 0.6, 0.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringProperty("stringProperty", "DEFAULT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealProperty("realProperty", 32.33); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntProperty("COUNT", 34); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndVia("PC"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartVia("M2_M3_PWR", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaResistance(0.4); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-1.35, -1.35, 1.35, 1.35); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("V2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-1.35, -1.35, -0.45, 1.35); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(0.45, -1.35, 1.35, -0.45); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(0.45, 0.45, 1.35, 1.35); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("M3"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-1.35, -1.35, 1.35, 1.35); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndVia("M2_M3_PWR"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ xl = (double*)malloc(sizeof(double)*6); +

+

+ yl = (double*)malloc(sizeof(double)*6); +

+

+ status = lefwStartVia("IN1X", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("metal2"); +

+

+ CHECK_STATUS(status); +

+

+ xl[0] = -2.1; +

+

+ yl[0] = -1.0; +

+

+ xl[1] = -0.2; +

+

+ yl[1] = 1.0; +

+

+ xl[2] = 2.1; +

+

+ yl[2] = 1.0; +

+

+ xl[3] = 0.2; +

+

+ yl[3] = -1.0; +

+

+ xl[4] = 0.2; +

+

+ yl[4] = -1.0; +

+

+ xl[5] = 0.2; +

+

+ yl[5] = -1.0; +

+

+ status = lefwViaLayerPolygon(6, xl, yl); +

+

+ CHECK_STATUS(status); +

+

+ xl[0] = -1.1; +

+

+ yl[0] = -2.0; +

+

+ xl[1] = -0.1; +

+

+ yl[1] = 2.0; +

+

+ xl[2] = 1.1; +

+

+ yl[2] = 2.0; +

+

+ xl[3] = 0.1; +

+

+ yl[3] = -2.0; +

+

+ status = lefwViaLayerPolygon(4, xl, yl); +

+

+ CHECK_STATUS(status); +

+

+ xl[0] = -3.1; +

+

+ yl[0] = -2.0; +

+

+ xl[1] = -0.3; +

+

+ yl[1] = 2.0; +

+

+ xl[2] = 3.1; +

+

+ yl[2] = 2.0; +

+

+ xl[3] = 0.3; +

+

+ yl[3] = -2.0; +

+

+ status = lefwViaLayerPolygon(4, xl, yl); +

+

+ CHECK_STATUS(status); +

+

+ xl[0] = -4.1; +

+

+ yl[0] = -2.0; +

+

+ xl[1] = -0.4; +

+

+ yl[1] = 2.0; +

+

+ xl[2] = 4.1; +

+

+ yl[2] = 2.0; +

+

+ xl[3] = 0.4; +

+

+ yl[3] = -2.0; +

+

+ status = lefwViaLayerPolygon(4, xl, yl); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("cut23"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-0.4, -0.4, 0.4, 0.4); +

+

+ CHECK_STATUS(status); +

+

+ xl[0] = -2.1; +

+

+ yl[0] = -1.0; +

+

+ xl[1] = -0.2; +

+

+ yl[1] = 1.0; +

+

+ xl[2] = 2.1; +

+

+ yl[2] = 1.0; +

+

+ xl[3] = 0.2; +

+

+ yl[3] = -1.0; +

+

+ status = lefwViaLayerPolygon(4, xl, yl); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndVia("IN1X"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartVia("myBlockVia", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaViarule("DEFAULT", 0.1, 0.1, "metal1", "via12", "metal2", +

+

+ 0.1, 0.1, 0.05, 0.01, 0.01, 0.05); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaViaruleRowCol(1, 2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaViaruleOrigin(1.5, 2.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaViaruleOffset(1.5, 2.5, 3.5, 4.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaViarulePattern("2_1RF1RF1R71R0_3_R1FFFF"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndVia("myBlockVia"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartVia("myVia23", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("metal2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerPolygon(6, xl, yl); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("cut23"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-0.4, -0.4, 0.4, 0.4); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("metal3"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerPolygon(5, xl, yl); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndVia("myVia23"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ free((char*)xl); +

+

+ free((char*)yl); +

+

+   +

+

+ // VIARULE +

+

+ status = lefwStartViaRule("VIALIST12"); +

+

+ CHECK_STATUS(status); +

+

+ lefwAddComment("Break up the old lefwViaRule into 2 routines"); +

+

+ lefwAddComment("lefwViaRuleLayer and lefwViaRuleVia"); +

+

+ status = lefwViaRuleLayer("M1", NULL, 9.0, 9.6, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleLayer("M2", NULL, 3.0, 3.0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleVia("VIACENTER12"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringProperty("vrsp", "new"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntProperty("vrip", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealProperty("vrrp", 4.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndViaRule("VIALIST12"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // VIARULE with GENERATE +

+

+ lefwAddComment("Break up the old lefwViaRuleGenearte into 4 routines"); +

+

+ lefwAddComment("lefwStartViaRuleGen, lefwViaRuleGenLayer,"); +

+

+ lefwAddComment("lefwViaRuleGenLayer3, and lefwEndViaRuleGen"); +

+

+ status = lefwStartViaRuleGen("VIAGEN12"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleGenLayer("M1", NULL, 0.1, 19, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleGenLayer("M2", NULL, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleGenLayer3("V1", -0.8, -0.8, 0.8, 0.8, 5.6, 6.0, 0.2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndViaRuleGen("VIAGEN12"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // VIARULE with GENERATE & ENCLOSURE & DEFAULT     +

+

+ status = lefwStartViaRuleGen("via12"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleGenDefault(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleGenLayerEnclosure("m1", 0.05, 0.005, 1.0, 100.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleGenLayerEnclosure("m2", 0.05, 0.005, 1.0, 100.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaRuleGenLayer3("cut12", -0.07, -0.07, 0.07, 0.07, 0.16, 0.16, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndViaRuleGen("via12"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // NONDEFAULTRULE +

+

+ status = lefwStartNonDefaultRule("RULE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleHardspacing(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleLayer("RX", 10.0, 2.2, 6, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleLayer("PC", 10.0, 2.2, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleLayer("M1", 10.0, 2.2, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartVia("nd1VARX0", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaResistance(0.2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("RX"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-3, -3, 3, 3); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("CUT12"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-1.0, -1.0, 1.0, 1.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("PC"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-3, -3, 3, 3); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndVia("nd1VARX0"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartSpacing(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSpacing("CUT01", "RX", 0.1, "STACK"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndSpacing(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndNonDefaultRule("RULE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartNonDefaultRule("wide1_5x"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleLayer("fw", 4.8, 4.8, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleStartVia("nd1VIARX0", "DEFAULT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaResistance(0.2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("RX"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-3, -3, 3, 3); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("CUT12"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-1.0, -1.0, 1.0, 1.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayer("PC"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwViaLayerRect(-3, -3, 3, 3); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleEndVia("nd1VIARX0"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleUseVia("via12_fixed_analog_via"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleMinCuts("cut12", 2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleUseVia("via23_fixed_analog_via"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleMinCuts("cut23", 2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNonDefaultRuleUseViaRule("viaRule23_fixed_analog_via"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndNonDefaultRule("wide1_5x"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // SPACING +

+

+ status = lefwStartSpacing(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSpacing("CUT01", "CA", 1.5, NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSpacing("CA", "V1", 1.5, "STACK"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSpacing("M1", "M1", 3.5, "STACK"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSpacing("V1", "V2", 1.5, "STACK"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSpacing("M2", "M2", 3.5, "STACK"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSpacing("V2", "V3", 1.5, "STACK"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndSpacing(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // MINFEATURE & DIELECTRIC +

+

+ status = lefwMinFeature(0.1, 0.1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // SITE +

+

+ status = lefwSite("CORE1", "CORE", "X", 67.2, 6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSiteRowPattern("Fsite", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSiteRowPatternStr("Lsite", "N"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSiteRowPatternStr("Lsite", "FS"); +

+

+ CHECK_STATUS(status); +

+

+ lefwEndSite("CORE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSite("CORE", "CORE", "Y", 3.6, 28.8); +

+

+ CHECK_STATUS(status); +

+

+ lefwEndSite("CORE"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSite("MRCORE", "CORE", "Y", 3.6, 28.8); +

+

+ CHECK_STATUS(status); +

+

+ lefwEndSite("MRCORE"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwSite("IOWIRED", "PAD", NULL, 57.6, 432); +

+

+ CHECK_STATUS(status); +

+

+ lefwEndSite("IOWIRED"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // ARRAY +

+

+ status = lefwStartArray("M7E4XXX"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArraySite("CORE", -5021.450, -4998.000, 0, 14346, 595, 0.700, +

+

+ 16.800); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArraySiteStr("CORE", -5021.450, -4998.600, "FS", 14346, 595, +

+

+ 0.700, 16.800); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArraySite("IO", 6148.800, 5800.000, 3, 1, 1, 0.000, 0.000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArraySiteStr("IO", 6148.800, 5240.000, "E", 1, 1, 0.000, 0.000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArraySite("COVER", -7315.0, -7315.000, 1, 1, 1, 0.000, 0.000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArraySiteStr("COVER", 7315.0, 7315.000, "FN", 1, 1, 0.000, 0.000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayCanplace("COVER", -7315.000, -7315.000, 0, 1, 1, 0.000, +

+

+ 0.000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayCanplaceStr("COVER", -7250.000, -7250.000, "N", 5, 1, +

+

+ 40.000, 0.000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayCannotoccupy("CORE", -5021.450, -4989.600, 6, 100, 595, +

+

+ 0.700, 16.800); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayCannotoccupyStr("CORE", -5021.450, -4989.600, "N", 100, 595, +

+

+ 0.700, 16.800); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayTracks("X", -6148.800, 17569, 0.700, "RX"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayTracks("Y", -6148.800, 20497, 0.600, "RX"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartArrayFloorplan("100%"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayFloorplan("CANPLACE", "COVER", -7315.000, -7315.000, 1, 1, +

+

+ 1, 0.000, 0.000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayFloorplanStr("CANPLACE", "COVER", -7250.000, -7250.000, +

+

+ "N", 5, 1, 40.000, 0.000); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayFloorplan("CANPLACE", "CORE", -5021.000, -4998.000, 1, +

+

+ 14346, 595, 0.700, 16.800); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayFloorplanStr("CANPLACE", "CORE", -5021.000, -4998.000, "FS", +

+

+ 100, 595, 0.700, 16.800); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayFloorplan("CANNOTOCCUPY", "CORE", -5021.000, -4998.000, 7, +

+

+ 14346, 595, 0.700, 16.800); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayFloorplanStr("CANNOTOCCUPY", "CORE", -5021.000, -4998.000, +

+

+ "E", 100, 595, 0.700, 16.800); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndArrayFloorplan("100%"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayGcellgrid("X", -6157.200, 1467, 8.400); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwArrayGcellgrid("Y", -6157.200, 1467, 8.400); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndArray("M7E4XXX"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // MACRO +

+

+ status = lefwStartMacro("CHK3A"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("RING", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroOrigin(0.9, 0.9); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSize(10.8, 28.8); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSymmetry("X Y R90"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSite("CORE"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPin("GND"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinDirection("INOUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinMustjoin("PA3"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinTaperRule("RULE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinUse("GROUND"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinShape("ABUTMENT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinSupplySensitivity("vddpin1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinNetExpr("power1 VDD1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaMetalArea(3, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ // MACRO - PIN +

+

+ status = lefwStartMacroPinPort(NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayer("M1", 0.05); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(-0.9, 3, 9.9, 6, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringProperty("TYPE", "special"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntProperty("intProp", 23); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealProperty("realProp", 24.25); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaModel("OXIDE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPin("GND"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPin("VDD"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinDirection("INOUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinUse("POWER"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinShape("ABUTMENT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinNetExpr("power2 VDD2"); +

+

+ CHECK_STATUS(status); +

+

+ // MACRO - PIN - PORT +

+

+ status = lefwStartMacroPinPort(NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayer("M1", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(-0.9, 21, 9.9, 24, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortVia(100, 300, "nd1VIA12", 1, 2, 1, 2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPinPort("BUMP"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayer("M2", 0.06); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ xl = (double*)malloc(sizeof(double)*5); +

+

+ yl = (double*)malloc(sizeof(double)*5); +

+

+ xl[0] = 30.8; +

+

+ yl[0] = 30.5; +

+

+ xl[1] = 42; +

+

+ yl[1] = 53.5; +

+

+ xl[2] = 60.8; +

+

+ yl[2] = 25.5; +

+

+ xl[3] = 47; +

+

+ yl[3] = 15.5; +

+

+ xl[4] = 20.8; +

+

+ yl[4] = 0.5; +

+

+ status = lefwStartMacroPinPort("CORE"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayer("P1", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerPolygon(5, xl, yl, 5, 6, 454.6, 345.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerPolygon(5, xl, yl, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xl); +

+

+ free((char*)yl); +

+

+ status = lefwEndMacroPin("VDD"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPin("PA3"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinDirection("INPUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinNetExpr("gnd1 GND"); +

+

+ CHECK_STATUS(status); +

+

+ // 5.4 +

+

+ status = lefwMacroPinAntennaPartialMetalArea(4, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaPartialMetalArea(5, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaPartialMetalSideArea(5, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaGateArea(1, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaGateArea(2, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaGateArea(3, "M3"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaDiffArea(1, "M1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaMaxAreaCar(1, "L1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaMaxSideAreaCar(1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaPartialCutArea(1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaPartialCutArea(2, "M2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaPartialCutArea(3, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaPartialCutArea(4, "M4"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaMaxCutCar(1, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPinPort("CORE"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayer("M1", 0.02); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(1.35, -0.45, 2.25, 0.45, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(-0.45, -0.45, 0.45, 0.45, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPinPort(NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayer("PC", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(-0.45, 12.15, 0.45, 13.05, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPinPort(NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortDesignRuleWidth("PC", 2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(8.55, 8.55, 9.45, 9.45, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(6.75, 6.75, 7.65, 7.65, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(6.75, 8.75, 7.65, 9.65, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerRect(6.75, 10.35, 7.65, 11.25, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPin("PA3"); +

+

+ CHECK_STATUS(status); +

+

+ // MACRO - OBS +

+

+ status = lefwStartMacroObs(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroObsLayer("M1", 5.6); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroObsLayerWidth(5.4); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroObsLayerRect(6.6, -0.6, 9.6, 0.6, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroObsLayerRect(4.8, 12.9, 9.6, 13.2, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroObsLayerRect(3, 13.8, 7.8, 16.8, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroObsLayerRect(3, -0.6, 6, 0.6, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroObs(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStringProperty("stringProp", "first"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwIntProperty("integerProp", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwRealProperty("WEIGHT", 30.31); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("CHK3A"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // 2nd MACRO +

+

+ status = lefwStartMacro("INV"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroEEQ("CHK1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("CORE", "SPACER"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroForeign("INVS", 0, 0, -1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSize(67.2, 24); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSymmetry("X Y R90"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSite("CORE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroDensity("metal1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroDensityLayerRect(0, 0, 100, 100, 45.5); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroDensityLayerRect(100, 0, 200, 100, 42.2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroDensity(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroDensity("metal2"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroDensityLayerRect(200, 1, 300, 200, 43.3); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroDensity(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPin("Z"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinDirection("OUTPUT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinUse("SIGNAL"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinShape("ABUTMENT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinAntennaModel("OXIDE1"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwStartMacroPinPort(NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayer("M2", 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroPinPortLayerWidth(5.6); +

+

+ CHECK_STATUS(status); +

+

+ xpath = (double*)malloc(sizeof(double)*7); +

+

+ ypath = (double*)malloc(sizeof(double)*7); +

+

+ xpath[0] = 30.8; +

+

+ ypath[0] = 9; +

+

+ xpath[1] = 42; +

+

+ ypath[1] = 9; +

+

+ xpath[2] = 30.8; +

+

+ ypath[2] = 9; +

+

+ xpath[3] = 42; +

+

+ ypath[3] = 9; +

+

+ xpath[4] = 30.8; +

+

+ ypath[4] = 9; +

+

+ xpath[5] = 42; +

+

+ ypath[5] = 9; +

+

+ xpath[6] = 30.8; +

+

+ ypath[6] = 9; +

+

+ status = lefwMacroPinPortLayerPath(7, xpath, ypath, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPinPort(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacroPin("Z"); +

+

+ free((char*)xpath); +

+

+ free((char*)ypath); +

+

+ // MACRO - OBS +

+

+ status = lefwStartMacroObs(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroObsDesignRuleWidth("M1", 2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroObsLayerRect(24.1, 1.5, 43.5, 208.5, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ xpath = (double*)malloc(sizeof(double)*2); +

+

+ ypath = (double*)malloc(sizeof(double)*2); +

+

+ xpath[0] = 8.4; +

+

+ ypath[0] = 3; +

+

+ xpath[1] = 8.4; +

+

+ ypath[1] = 124; +

+

+ status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ xpath[0] = 58.8; +

+

+ ypath[0] = 3; +

+

+ xpath[1] = 58.8; +

+

+ ypath[1] = 123; +

+

+ status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ xpath[0] = 64.4; +

+

+ ypath[0] = 3; +

+

+ xpath[1] = 64.4; +

+

+ ypath[1] = 123; +

+

+ status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xpath); +

+

+ free((char*)ypath); +

+

+ xl = (double*)malloc(sizeof(double)*5); +

+

+ yl = (double*)malloc(sizeof(double)*5); +

+

+ xl[0] = 6.4; +

+

+ xl[1] = 3.4; +

+

+ xl[2] = 5.4; +

+

+ xl[3] = 8.4; +

+

+ xl[4] = 9.4; +

+

+ yl[0] = 9.2; +

+

+ yl[1] = 0.2; +

+

+ yl[2] = 7.2; +

+

+ yl[3] = 8.2; +

+

+ yl[4] = 1.2; +

+

+ status = lefwMacroObsLayerPolygon(5, xl, yl, 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ free((char*)xl); +

+

+ free((char*)yl); +

+

+ status = lefwEndMacroObs(); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("INV"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // 3rd MACRO +

+

+ status = lefwStartMacro("DFF3"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("CORE", "ANTENNACELL"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroForeignStr("DFF3S", 0, 0, "N"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSize(67.2, 210); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSymmetry("X Y R90"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSitePattern("CORE", 34, 54, 7, 30, 3, 1, 1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSitePatternStr("CORE1", 21, 68, "S", 30, 3, 2, 2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("DFF3"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartMacro("DFF4"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("COVER", "BUMP"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroForeignStr("DFF3S", 0, 0, ""); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("DFF4"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartMacro("DFF5"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("COVER", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroForeignStr("DFF3S", 0, 0, ""); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("DFF5"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartMacro("DFF6"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("BLOCK", "BLACKBOX"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroForeignStr("DFF3S", 0, 0, ""); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("DFF6"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartMacro("DFF7"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("PAD", "AREAIO"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroForeignStr("DFF3S", 0, 0, ""); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("DFF7"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartMacro("DFF8"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("BLOCK", "SOFT"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("DFF8"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartMacro("DFF9"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("CORE", "WELLTAP"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("DFF9"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwStartMacro("myTest"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroClass("CORE", NULL); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSize(10.0, 14.0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSymmetry("X"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSitePatternStr("Fsite", 0, 0, "N", 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSitePatternStr("Fsite", 0, 7.0, "FS", 30, 3, 2, 2); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwMacroSitePatternStr("Fsite", 4.0, 0, "N", 0, 0, 0, 0); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndMacro("myTest"); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // ANTENNA, this will generate error for 5.4 since I already have ANTENNA +

+

+ // somewhere +

+

+ status = lefwAntenna("INPUTPINANTENNASIZE", 1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwAntenna("OUTPUTPINANTENNASIZE", -1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwAntenna("INOUTPINANTENNASIZE", -1); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwNewLine(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ // BEGINEXT +

+

+ status = lefwStartBeginext("SIGNATURE"); +

+

+ CHECK_STATUS(status); +

+

+ lefwAddIndent(); +

+

+ status = lefwBeginextCreator("CADENCE"); +

+

+ CHECK_STATUS(status); +

+

+ status = lefwEndBeginext(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ status = lefwEnd(); +

+

+ CHECK_STATUS(status); +

+

+   +

+

+ lineNum = lefwCurrentLineNumber(); +

+

+ if (lineNum == 0) +

+

+ fprintf(stderr, "ERROR: Nothing has been written!!!\n"); +

+

+   +

+

+ fclose(fout); +

+

+   +

+

+ return 0; +

+

+ } +

+

+   +

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/ch1Intro.html b/lefdef/doc/lefapi/ch1Intro.html new file mode 100644 index 00000000..a549b534 --- /dev/null +++ b/lefdef/doc/lefapi/ch1Intro.html @@ -0,0 +1,404 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

1 

+

Introduction

+

This chapter contains the following sections:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Overview
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF Reader Working Modes
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Comparison Utility
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Compressed LEF Files
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Orientation Codes
+
+

Overview

+

This manual describes the application programming interface (API) routines for the following Cadence® Library Exchange Format (LEF) components:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF reader
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF writer
+
+

Cadence Design Systems, Inc. uses these routines internally with many tools that read and write LEF. The API supports LEF version 5.8, but also reads earlier versions of LEF.

+

You can use the API routines documented in this manual with tools that write these older versions, as long as none of the tools in an interdependent flow introduce newer constructs.

+

Note: The writer portion of the API does not always optimize the LEF output.

+

LEF Reader Working Modes

+

The LEF reader can work in two modes - compatibility mode and session-based mode.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Compatibility mode (session-less mode) - This mode is compatible with the old parser behavior. You can call the parser initialization once with lefrInit(), adjust parsing settings and initialize the parser callbacks any time. The properties once defined in PROPERTYDEFINITIONS sections will be also defined in all subsequent file reads.
+
+ +
+ + + + + + +
  + +
+ a. +
+
Parser initialization: Call lefrInitSession() instead of lefrInit() to start a new parsing session and close any old parsing session, if opened.
+
+ +
+ + + + + + +
  + +
+ c. +
+
Data processing: - Do one or multiple parsing of LEF files with the lefrRead() function.
+
+
+ + + + + + +
  + +
+ d. +
+
Cleaning of the parsing configuration: Call the lefrClear() function (optional). The call releases all parsing session data and closes the parsing session. If this is skipped, the data cleaning and the session closing is done by the next lefrInitSession() call.
+
+
In the session-based mode, the properties once defined in PROPERTYDEFINITIONS remain active in all the LEF file parsing cycles in the session and the properties definition data is cleaned when the parsing session ends.
+
The session-based mode does not require you to call callbacks and property unsetter functions. All callbacks and properties are set to default by the next lefrInitSession() call.
+
The session-based mode allows you to avoid the lasting PROPERTYDEFINITIONS data effect when not required as you can just configure your application to parse one file per session.
+

By default, the LEF parser works in the compatibility mode. To activate the session-based mode, you must use lefrInitSession() instead of lefrInit().

+

Note: Currently, the compatibility mode can be used in all old applications where the code has not been adjusted. The lef2oa translator has already been adjusted to use the session-based parsing mode.

+

Comparison Utility

+

The LEF file comparison utility, lefdefdiff, helps you verify that your usage of the API is consistent and complete. This utility reads two LEF files, generally an initial file and the resulting file from reading in an application, then writes out a LEF file. The comparison utility reads and writes the data so that the UNIX diff utility can be used to compare the files.

+

Because the LEF file comparison utility works incrementally (writing out as it operates), the size of files it can process has no limitations. However, large files can have performance restrictions. In general, this utility is intended only to verify the use of the API; that is, the utility is not a component of a production design flow.

+

Compressed LEF Files

+

The LEF reader can parse compressed LEF files. To do so, you must link the liblef.a and liblefzlib.a libraries.

+

A zlib compression library is also required in order to read compressed LEF files. The zlib source code is free software that can be downloaded from www.gnu.com.

+

For information on compressed file routines, see "LEF Compressed File Routines."

+

Orientation Codes

+

Orientation codes are used throughout the LEF reader routines. The orientation codes are the same for all routines.

+

A number from 0 to 7, corresponding to the compass direction orientations, represents the orientation of a site or component. The following figure shows the combination of mirroring and rotation that is used for each of the eight possible orientations.

+

.

+ + + + + + + + + + + + + + + + + +
+
+

orient 0 = N

+
+

orient 4 = FN

+
+

orient 1 = W

+
+

orient 5 = FW

+
+

orient 2 = S

+
+

orient 6 = FS

+
+

orient 3 = E

+
+

orient 7 = FE

+
+

Note: The location given is the lower left corner of the resulting site or component after the mirroring and rotation are applied. It is not the location of the origin of the child cell.

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/ch2LEFsetup.html b/lefdef/doc/lefapi/ch2LEFsetup.html new file mode 100644 index 00000000..40a0d6e8 --- /dev/null +++ b/lefdef/doc/lefapi/ch2LEFsetup.html @@ -0,0 +1,571 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

2 

+

LEF Reader Setup and Control Routines

+

The Cadence® Library Exchange Format (LEF) reader provides several routines to initialize the reader and set global variables that are used by the reader.

+

The following routines set options for reading a LEF file.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrInit
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrInitSession
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrClear
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrGetUserData
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrPrintUnusedCallbacks
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrRead
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrRegisterLef58Type
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrReset
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrSetCommentChar
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrSetRegisterUnusedCallbacks
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrSetShiftCase
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrSetUserData
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrSetVersionValue
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Examples
+
+

Calling the API Routines

+

Follow these steps to use the application programming interface (API) routines.

+
+ + + + + +
+
+ 1. +
+
Call the lefrInit() routine. You must call this routine first.
+
+ + +
+ + + + + +
+
+ 4. +
+
Call the lefrRead() routine to start reading the LEF file.
+
+

As each construct in the LEF file is read, the reader calls the appropriate registered callbacks. These callbacks handle storing the associated data in a format appropriate for the application. The callbacks can call additional setup and control routines for the LEF reader as required.

+

For examples of API routine usage, see Appendix A, "LEF Reader and Writer Examples."

+

LEF API Routines

+

The following LEF reader setup and control routines are available in the API.

+

lefrInit

+

Initializes internal variables in the LEF reader. You must use this routine before using lefrRead. You can use routines to set callback functions before or after this routine.

+

Syntax

+
+ int lefrInit() +
+

lefrInitSession

+

Starts a new parsing session and closes any old parsing session, if open. You must use this routine before using lefrRead.

+

Syntax

+
+ int lefrInitSession(
int startSession = 1) +
+

Arguments

+

+ + startSession +

+
Boolean. If is non-zero, performs the parser initialization in session-based mode; otherwise, the function will initialize the parsing in the compatibility mode, working exactly as lefrInit() call.
+

lefrClear

+

Releases all parsing session data and closes the parsing session. if the call to lefrClear() is skipped, the data cleaning and the session closing is done by the next lefrInitSession() call.

+

Syntax

+
+ int lefrClear() +
+

lefrGetUserData

+

Retrieves the user-provided data. The LEF reader returns an opaque lefiUserData pointer, which you set using lefrSetUserData. You can set or change the user data at any time with the lefrSetUserData and lefrGetUserData calls. Every callback returns the user data as the third argument.

+

Syntax

+
+ lefiUserData lefrGetUserData() +
+

lefrPrintUnusedCallbacks

+

Prints all callback routines that are not set but have constructs in the LEF file.

+

Syntax

+
+ void lefrPrintUnusedCallbacks(FILE* f) +
+

lefrRead

+

Specifies the LEF file to read. If the file parses with no errors (that is, all callbacks return condition codes that indicate success), this routine returns a value of 0.

+

Syntax

+
+ int lefrRead(
FILE* file,
const char* fileName,
lefiUserData* data) +
+

Arguments

+

+ + file +

+
Specifies a pointer to an already open file. This allows the parser to work with either a disk file or a piped stream. This argument is required. Any callbacks that have been set will be called from within this routine.
+

+ + fileName +

+
Specifies a UNIX filename using either a complete or a relative path specification.
+

+ + data +

+
Specifies the data type. For information about the lefiUserData type, see "lefiUserData".
+

lefrRegisterLef58Type

+

Registers new LEF layers LEF58_TYPE - TYPE pairs. As LEF syntax requires that any layer LEF58_TYPE can be used only for certain layer types, you have to set a number of allowed layer LEF58_TYPE - TYPE pairs, calling the function several times (if necessary). For example, to register a new LEF58_TYPE XXX for the CUT and ROUTING type layers, you have to call the API twice:

+
+ lefrRegisterLef58Type(`XXX', `CUT'); +
+
+ lefrRegisterLef58Type(`XXX', `ROUTING'); +
+

Use this feature only for the development of new `experimental' types, which can now be introduced without parser code update. All types mentioned in LEF documentation are already pre-set and do not require to be registered.

+

Syntax

+
+ void lefrRegisterLef58Type(
const char* lef58Type,
const char* layerType); +
+

Arguments

+

+ + lef58Type +

+
Specifies the LEF layer lef58Type.
+

+ + layerType +

+
Specifies the LEF layer type.
+

lefrReset

+

Resets all of the internal variables of the LEF reader to their initial values.

+

Syntax

+
+ int lefrReset(void) +
+

lefrSetCommentChar

+

Changes the character used to indicate comments in the LEF file.

+

Syntax

+
+ void lefrSetCommentChar(char c) +
+

+ + c +

+
Specifies the comment character. The default character is a pound sign (#).
+

lefrSetRegisterUnusedCallbacks

+

Keeps track of all the callback routines that are not set. You can use this routine to keep track of LEF constructs that are in the input file but do not trigger a callback. This statement does not require any additional arguments.

+

Syntax

+
+ void lefrSetRegisterUnusedCallbacks(void) +
+

lefrSetShiftCase

+

Allows the parser to upshift all names if the LEF file is case insensitive.

+

Syntax

+
+ void lefrSetShiftCase(void) +
+

lefrSetUserData

+

Sets the user-provided data. The LEF reader does not look at this data, but passes an opaque lefiUserData pointer back to the application with each callback. You can set or change the user data at any time using the lefrSetUserData and lefrGetUserData routines. Every callback returns the user data as the third argument.

+

Syntax

+
+ void lefrSetUserData(
lefiUserData* data) +
+

Arguments

+

+ + data +

+
Specifies the user-provided data.
+

lefrSetVersionValue

+

Sets a default version number for a LEF file that does not conrtain a VERSION statement.

+

Syntax

+
+ void lefrSetVersionValue(
char* version) +
+

Arguments

+

+ + version +

+
Specifies the version number to assign to the LEF file.
+

Examples

+

The following example shows how to initialize the reader.

+
+ int setupRoutine() {
FILE* f;
int res;
int userData = 0x01020304;
... +
+
+
// Initialize the reader. This routine is called first.
lefrInit(); +
+
+
// Set user data
    lefrSetUserData ((void*)3); +
+
+
// Open the lef file for the reader to read
if ((f = fopen("lefInputFileName","r")) == 0) {
printf("Couldn't open input file '%s'\n",
        "lefInputFileName");
return(2);
} +
+
+
// Invoke the parser
res = lefrRead(f, "lefInputFileName", (void*)userData);
if (res != 0) {
printf("LEF parser returns an error\n");
return(2);
} +
+
+ fclose(f); +
+
+ return 0;} +
+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/ch3LEFcallback.html b/lefdef/doc/lefapi/ch3LEFcallback.html new file mode 100644 index 00000000..e385dfcc --- /dev/null +++ b/lefdef/doc/lefapi/ch3LEFcallback.html @@ -0,0 +1,1870 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

3 

+

LEF Reader Callback Routines

+

The Cadence® Library Exchange Format (LEF) reader calls all callback routines when it reads in the appropriate part of the LEF file. Some routines, such as the version callback, are called only once. Other routines can be called more than once.

+

This chapter contains the following sections:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Callback Function Format
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Callback Types and Setting Routines
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
User Callback Routines
+
+

Callback Function Format

+

All callback functions have the following format:

+
+ int UserCallbackFunction(
lefrCallbackType_e callbackType
data_type* LEF_data
lefiUserData data) +
+

Each user-supplied callback routine is passed three arguments.

+

Callback Type

+

The callBackType argument is a list of objects that contains a unique number assignment for each callback from the parser.This list allows you to use the same callback routine for different types of LEF data. For examples, see Appendix A, "LEF Reader and Writer Examples."

+

LEF_Data

+

The LEF_data argument provides the data specified by the callback. Data types returned by the callbacks vary for each callback. Examples of the types of arguments passed include const char*, double, int, and defiProp. Two points to note:

+ + +

User Data

+

The data argument is a four-byte data item that is set by the user. The LEF reader contains only user data. The user data is most often set to a pointer to the library data so that it can be passed to the routines. This is more effective than using a global variable.

+

The callback functions can be set or reset at any time. If you want a callback to be available when the LEF file parsing begins, you must set the callback before you call lefrRead.

+

Note: You can unset a callback by using the set function with a null argument.

+

Callback Types and Setting Routines

+

You must set a callback before you can use it. When you set a callback, the callback routine used for each type of LEF information is passed in the appropriate setting routine. Each callback routine returns a callback type.

+

The following table lists the LEF reader callback setting routines and the associated callback types. The contents of the setting routines are described in detail in the section "User Callback Routines".

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF Information +

+
+

+ Setting Routine +

+
+

+ Callback Type +

+
+

Bus Bit Characters

+
+

void lefrSetBusBitCharsCbk
(
lefrStringCbkFnType);

+
+

lefrBusBitCharsCbkType

+
+

Clearance Measure

+
+

void lefrSetClearanceMeasureCbk
(
lefrStringCbkFnType);

+
+

lefrClearanceMeasureCbkType

+
+

Density

+
+

void lefrSetDensityCbk
(lefrDensityCbkFnType)

+
+

lefrDensityCbkType

+
+

Divider
Character

+
+

void lefrSetDividerCharCbk
(
lefrStringCbkFnType);

+
+

lefrDividerCharCbkType

+
+

Extensions

+
+

void lefrSetExtensionCbk
(lefrStringCbkFnType)

+
+

lefrExtensionCbkType

+
+

Fixed Mask

+
+

void lefrFixedMaskCbk
(
lefrIntergerCbkFnType)

+
+

lefrFixedMaskCbkType

+
+

Library End
Statement

+
+

void lefrSetLibraryEndCbk
(
lefrVoidCbkFnType);

+
+

lefrLibraryEndCbkType

+
+

Layer

+
+

void lefrSetLayerCbk
(
lefrLayerCbkFnType);

+
+

lefrLayerCbkType

+
+

Macro
Beginning

+
+

void lefrSetMacroBeginCbk
(
lefrStringCbkFnType);

+
+

lefrMacroBeginCbkType

+
+

Macro

+
+

void lefrSetMacroCbk
(
lefrMacroCbkFnType);

+
+

lefrMacroCbkType

+
+

Macro Class Type

+
+

void lefrSetMacroClassTypeCbk
(
lefrStringCbkFnType);

+
+

lefrMacroClassTypeCbkType

+
+

Macro End

+
+

void lefrSetMacroEnd
(lefrStringCbkFnType) ;

+
+

lefrMacroEndCbkType

+
+

Macro Fixed Mask

+
+

void lefrMacroFixedMaskCbk
(
lefrIntergerCbkFnType)

+
+

lefrMacroFixedMaskCbkType

+
+

Macro Foreign

+
+

void lefrSetMacroForeignCbk
(
lefrMacroForeignCbkFnType);

+

void lefrUnsetMacroForeignCbk();

+
+

lefrMacroForeignCbkFnType

+
+

Macro Origin

+
+

void lefrSetMacroOriginCbk
(lefrMacroNumCbkFnType) ;

+
+

lefrMacroOriginCbkType

+
+

Macro Obstruction

+
+

void lefrSetObstructionCbk
(
lefrObstructionCbkFnType);

+
+

lefrObstructionCbkType

+
+

Macro Pin

+
+

void lefrSetPinCbk
(
lefrPinCbkFnType);

+
+

lefrPinCbkType

+
+

Macro Site

+
+

void lefrSetMacroSiteCbk
(
lefrMacroSiteCbkFnType);

+

void lefrUnsetMacroSiteCbk();

+
+

lefrMacroSiteCbkFnType

+
+

Macro Size

+
+

void lefrSetMacroSizeCbk
(lefrMacroNumCbkFnType) ;

+
+

lefrMacroSizeCbkType

+
+

Manufacturing Grid

+
+

void lefrSetManufacturingCbk
(
lefrDoubleCbkFnType);

+
+

lefrManufacturingCbkType

+
+

Maximum Via Stack

+
+

void lefrSetMaxStackViaCbk
(lefrMaxStackViaCbkFnType) ;

+
+

lefrMaxStackViaCbkType

+
+

Nondefault
Rules

+
+

void lefrSetNonDefaultCbk
(
lefrNonDefaultCbkFnType);

+
+

lefrNonDefaultCbkType

+
+

Property Definitions Beginning

+
+

void lefrSetPropBeginCbk
(
lefrVoidCbkFnType);

+
+

lefrPropBeginCbkType

+
+

Property Definitions

+
+

void lefrSetPropCbk
(
lefrPropCbkFnType);

+
+

lefrPropCbkType

+
+

Property Definitions
End

+
+

void lefrSetPropEndCbk
(
lefrVoidCbkFnType);

+
+

lefrPropEndCbkType

+
+

Same-Net Spacing Beginning

+
+

void lefrSetSpacingBeginCbk
(
lefrVoidCbkFnType);

+
+

lefrSpacingBeginCbkType

+
+

Same-Net Spacing

+
+

void lefrSetSpacingCbk
(
lefrSpacingCbkFnType);

+
+

lefrSpacingCbkType

+
+

Same-Net Spacing
End

+
+

void lefrSetSpacingEndCbk
(
lefrVoidCbkFnType);

+
+

lefrSpacingEndCbkType

+
+

Site

+
+

void lefrSetSiteCbk
(
lefrSiteCbkFnType);

+
+

lefrSiteCbkType

+
+

Units

+
+

void lefrSetUnitsCbk
(
lefrUnitsCbkFnType);

+
+

lefrUnitsCbkType

+
+

Use Min
Spacing

+
+

void lefrSetUseMinSpacingCbk
(
lefrUseMinSpacingCbkFnType);

+
+

lefrUseMinSpacingCbkType

+
+

Version

+
+

void lefrSetVersionCbk
(
lefrDoubleCbkFnType);

+
+

lefrVersionCbkType

+
+

Version
String

+
+

void lefrSetVersionStrCbk
(
lefrStringCbkFnType);

+
+

lefrVersionStrCbkType

+
+

Via

+
+

void lefrSetViaCbk
(
lefrViaCbkFnType);

+
+

lefrViaCbkType

+
+

Via Rule

+
+

void lefrSetViaRuleCbk
(
lefrViaRuleCbkFnType);

+
+

lefrViaRuleCbkType

+
+

Unused

+
+

void lefrSetUnusedCallbacks
(
lefrVoidCbkFnType func);

+
+

lefrUnspecifiedCbkType

+
+

Examples

+

The following example shows how to create a setup routine so the reader can parse the LEF file and call the callback routines you defined.

+
+ int setupRoutine() {
FILE* f;
int res;
int userData = 0x01020304;
... +
+
+
// Initialize the reader. This routine is called first.
lefrInit(); +
+
+
// Set the user callback routines
lefrSetArrayBeginCbk(arrayBeginCB);
lefrSetArrayCbk(arrayCB);
lefrSetArrayEndCbk(arrayEndCB);
lefrSetBusBitCharsCbk(busBitCharsCB);
lefrSetCaseSensitiveCbk(caseSensCB);
lefrSetDielectricCbk(dielectricCB);
... +
+
+
// Open the lef file for the reader to read
if ((f = fopen("lefInputFileName","r")) == 0) {
printf("Couldn't open input file '%s'\n",
        "lefInputFileName");
return(2);
} +
+
+ // Invoke the parser
res = lefrRead(f, "lefInputFileName", (void*)userData);
if (res != 0) {
printf("LEF parser returns an error\n");
return(2);
} +
+
+ fclose(f); +
+
+ return 0;}lefrUseMinSpacingCbkFnType +
+

User Callback Routines

+

This section describes the following user callback routines:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrDensityCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrDoubleCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrIntergerCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrLayerCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrMacroCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrMacroForeignCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrMacroNumCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrMacroSiteCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrMaxStackViaCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrNonDefaultCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrObstructionCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrPinCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrPropCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrSiteCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrSpacingCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrStringCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrUnitsCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrUseMinSpacingCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrViaCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrViaRuleCbkFnType
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefrVoidCbkFnType
+
+

lefrDensityCbkFnType

+

Retrieves data from the DENSITY object from within the MACRO object. Use the arguments defined in the lefiDensity class to retrieve the data.

+

For syntax information about the LEF MACRO statement, see "Macro" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrDensityCbkFnType(
lefrCallbackType_e typ
lefiDensity* density
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrDensityCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + lefiDensity +

+
Returns a pointer to a lefiDensity structure. For more information, see "lefiDensity".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrDoubleCbkFnType

+

Retrieves different kinds of LEF data. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

For more information about LEF syntax, see the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrDoubleCbkFnType(
lefrCallbackType_e typ,
double number,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + +
+
+

+ LEF Data +

+
+

+ Type Returned +

+
+

Manufacturing Grid

+
+

lefrManufacturingCbkType

+
+

Version

+
+

lefrVersionCbkType

+
+

+ + number +

+
Returns data that varies depending on the callback used. The following kinds of data can be returned.
+ + + + + + + + + + + + + +
+
+

+ LEF Data +

+
+

+ Returns the Value of +

+
+

Manufacturing Grid

+
+

value in the MANUFACTURINGGRID statement

+
+

Version

+
+

number in the VERSION statement

+
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrIntergerCbkFnType

+

Retrieves LEF data pertaining to fixed masks. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

For more information about the FIXEDMASK statement, see "FIXEDMASK" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrIntergerCbkFnType
leftCallbackType_e type,
int number,
lefiUserData* data) +
+

Arguments

+

+ + type +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + +
+
+

+ LEF Data +

+
+

+ Type Returned +

+
+

FixedMask

+
+

lefrFixedMaskCbkType

+
+

Macro FixedMask

+
+

lefrMacroFixedMaskCbkType

+
+

+ + number +

+
Returns a type that varies depending on the callback used. The following kind of data can be returned.

Fixed mask: Does not allow mask shifting. All the LEF MACRO PIN MASK assignments must be kept fixed and cannot be shifted to a different mask, (1indicates not allowed, and 0 allowed).

Macro FixedMask: Indicates that the specified macro does not allow mask shifting. All the LEF PIN MASK assignments must be kept fixed and cannot be shifted to a different mask. (1 indicates not allowed, and 0 allowed).
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrLayerCbkFnType

+

Retrieves data from the LAYER object of the LEF file. Use the arguments defined in the lefiLayer class to retrieve the data.

+

For syntax information about the LEF LAYER statement, see "Layer (Cut)," "Layer (Masterslice or Overlap)," "Layer (Routing)," or "Layer (Implant)" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrLayerCbkFnType(
lefrCallbackType_e typ,
lefiLayer* layer,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrLayerCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + layer +

+
Returns a pointer to a lefiLayer structure. For more information, see "lefiLayer".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrMacroCbkFnType

+

Retrieves data from the MACRO object in the LEF file. Use the arguments defined in the lefiMacro class to retrieve the data.

+

For syntax information about the LEF MACRO statement, see "Macro" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrMacroCbkFnType(
lefrCallbackType_e typ,
lefiMacro* macro,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrMacroCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + macro +

+
Returns a pointer to a lefiMacro structure. For more information, see "lefiMacro".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrMacroForeignCbkFnType

+

Retrieves data for in-place processing of a MACRO FOREIGN statement. Use the arguments defined in the lefiMacroForeign class to retrieve the data.

+

For syntax information about the LEF MACRO FOREIGN statement, see "Macro" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrMacroForeignCbkFnType(
lefrCallbackType_e typ,
lefiMacroForeign* foreign,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrMacroForeignCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + foreign +

+
Returns a pointer to a lefiMacroForeign structure. For more information, see lefiMacroForeign.
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrMacroNumCbkFnType

+

Retrieves different kinds of Macro LEF data. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

For syntax information about the LEF MACRO statement, see "Macro" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrMacroNumCbkFnType(
lefrCallbackType_e typ,
lefiNum num,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + +
+
+

+ LEF Data +

+
+

+ Type Returned +

+
+

Macro Origin

+
+

lefrMacroOriginCbkType

+
+

Macro Size

+
+

lefrMacroSizeCbkType

+
+

+ + num +

+
Returns data that varies depending on the callback used. The following kinds of data can be returned.
+ + + + + + + + + + + + + +
+
+

+ LEF Data +

+
+

+ Returns the Value of +

+
+

Macro Origin

+
+

value for ORIGIN in the MACRO statement.

+
+

Macro Size

+
+

value for SIZE in the MACRO statement.

+
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrMacroSiteCbkFnType

+

Retrieves data for in-place processing of a MACRO SITE statement. Use the arguments defined in the lefiMacroSite class to retrieve the data.

+

For syntax information about the LEF MACRO FOREIGN statement, see "Macro" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrMacroSiteCbkFnType(
lefrCallbackType_e typ,
lefiMacroSite* site,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrMacroSiteCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + site +

+
Returns a pointer to a lefiMacroSite structure. For more information, see lefiMacroSite.
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrMaxStackViaCbkFnType

+

Retrieves data from the MAXVIASTACK object in the LEF file. Use the arguments defined in the lefiMaxStackVia class to retrieve the data.

+

For syntax information about the LEF NONDEFAULTRULE statement, see "Maximum Via Stack" in the LEF/DEF Language Reference.

+

Syntax

+
+ lefrMaxStackViaCbkFnType(
lefrCallbackType_e typ,
lefiMaxStackVia* maxStack,
lefiUserData data) +
+

Arguments

+

+ + typ +

+
Returns the lefrMaxStackViaCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + maxStack +

+
Returns a pointer to a lefiMaxStackVia structure. For more information, see "lefiMaxStackVia".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrNonDefaultCbkFnType

+

Retrieves data from the NONDEFAULTRULE object in the LEF file. Use the arguments defined in the lefiNonDefault class to retrieve the data.

+

For syntax information about the LEF NONDEFAULTRULE statement, see "Nondefault Rule" in the LEF/DEF Language Reference.

+

Syntax

+
+ lefrNonDefaultCbkFnType(
lefrCallbackType_e typ,
lefiNonDefault* def,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrNonDefaultCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + def +

+
Returns a pointer to a lefiNonDefault structure. For more information, see "lefiNonDefault".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrObstructionCbkFnType

+

Retrieves data from the OBS (macro obstruction) object within the MACRO object in the LEF file. Use the arguments defined in the lefiObstruction class to retrieve the data.

+

For syntax information about the LEF OBS statement, see "Macro Obstruction Statement" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrObstructionCbkFnType(
lefrCallbackType_e typ,
lefiObstruction* obs,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrObstructionCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + obs +

+
Returns a pointer to a lefiObstruction structure. For more information, see "lefiObstruction".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrPinCbkFnType

+

Retrieves data from the PIN object within the MACRO object in the LEF file. Use the arguments defined in the lefiPin class to retrieve the data.

+

For syntax information about the LEF PIN statement, see "Macro Pin Statement" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrPinCbkFnType(
lefrCallbackType_e typ,
lefiPin* pin,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrPinCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + pin +

+
Returns a pointer to a lefiPin structure. For more information, see "lefiPin".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrPropCbkFnType

+

Retrieves data from the PROPERTYDEFINITIONS object in the LEF file. Use the arguments defined in the lefiProp class to retrieve the data.

+

For syntax information about the LEF PROPERTYDEFINITIONS statement, see "Property Definitions" in the LEF/DEF Language Reference.

+

Syntax

+
+ lefrPropCbkFnType(
lefrCallbackType_e typ,
lefiProp* prop,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrPropCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + prop +

+
Returns a pointer to a lefiProp structure. For more information, see "lefiProp".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrSiteCbkFnType

+

Retrieves data from the SITE object in the LEF file. Use the arguments defined in the lefiSite class to retrieve the data.

+

For syntax information about the LEF SITE statement, see "Site" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrSiteCbkFnType(
lefrCallbackType_e typ,
lefiSite* site,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrSiteCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + site +

+
Returns a pointer to a lefiSite structure. For more information, see "lefiSite".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrSpacingCbkFnType

+

Retrieves data from the SPACING object of the LEF file. Use the arguments defined in the lefiSpacing class to retrieve the data.

+

For syntax information about the LEF SPACING statement, see "Samenet Spacing" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrSpacingCbkFnType(
lefrCallbackType_e typ,
lefiSpacing* spacing,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrSpacingCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + spacing +

+
Returns a pointer to a lefiSpacing structure. For more information, see "lefiSpacing".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrStringCbkFnType

+

Retrieves different kinds of LEF data. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

For more information about LEF syntax, see the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrStringCbkFnType(
lefrCallbackType_e typ,
const char* string,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF Data +

+
+

+ Type Returned +

+
+

Bus Bit Characters

+
+

lefrBusBitCharsCbkType

+
+

Clearance Measure

+
+

lefrClearanceMeasureCbkType

+
+

Divider Character

+
+

lefrDividerCharCbkType

+
+

Extensions

+
+

lefrExtensionCbkType

+
+

Macro Beginning

+
+

lefrMacroBeginCbkType

+
+

Macro Class Type

+
+

lefrMacroClassTypeCbkType

+
+

Macro End

+
+

lefrMacroEndCbkType

+
+

Version String

+
+

lefrVersionStrCbkType

+
+

+ + string +

+
Returns data that varies depending on the callback used. The following kinds of data can be returned.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF Data +

+
+

+ Returns the value of +

+
+

Bus Bit Characters

+
+

delimterPair in the BUSBITCHARS statement

+
+

Clearance Measure

+
+

Returns the string set for a CLEARANCEMEASURE statement

+
+

Divider Character

+
+

character in a DIVIDERCHAR statement

+
+

Extensions

+
+

Retruns the string set for an EXTENSION statement

+
+

Macro Beginning

+
+

macroName in a MACRO statement

+
+

Macro Class Type

+
+

Returns the string set for a CLASS statement in a MACRO statement

+
+

Macro End

+
+

END macroName in a MACRO statement

+
+

Version String

+
+

Returns the string set for a VERSION statement

+
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrUnitsCbkFnType

+

Retrieves data from the UNITS object in the LEF file. Use the arguments defined in the lefiUnits class to retrieve the data.

+

For syntax information about the LEF UNITS statement, see "Units" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrUnitsCbkFnType(
lefrCallbackType_e typ,
lefiUnits* units,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrUnitsCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + units +

+
Returns a pointer to a lefiUnits structure. For more information, see "lefiUnits".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrUseMinSpacingCbkFnType

+

Retrieves data from the USEMINSPACING object in the LEF file. Use the arguments defined in the lefiUseMinSpacing class to retrieve data.

+

For information about the LEF USEMINSPACING statement, see "Use Min Spacing" in the
LEF/DEF Language Reference.

+

Syntax

+
+ int lefrUseMinSpacingCbkFnType(
lefrCallbackType_e typ,
lefiUseMinSpacing* spacing,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrUseMinSpacingCbkFnType type. This allows you to verify within your program that this is a correct callback.
+

+ + spacing +

+
Returns a pointer to a lefiUseMinSpacing structure. For more information, see "lefiUseMinSpacing"
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrViaCbkFnType

+

Retrieves data from the VIA object in the LEF file. Use the arguments defined in the lefiVia class to retrieve the data.

+

For syntax information about the LEF VIA statement, see "Via" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrViaCbkFnType(
lefrCallbackType_e typ,
lefiVia* via,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrViaCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + via +

+
Returns a pointer to a lefiVia structure. For more information, see "lefiVia".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrViaRuleCbkFnType

+

Retrieves data from the VIARULE object in the LEF file. Use the arguments defined in the lefiViaRule class to retrieve the data.

+

For syntax information about the LEF VIARULE statement, see "Via Rule" in the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrViaRuleCbkFnType(
lefrCallbackType_e typ,
lefiViaRule* viaRule,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns the lefrViaRuleCbkType type. This allows you to verify within your program that this is a correct callback.
+

+ + viaRule +

+
Returns a pointer to a lefiViaRule structure. For more information, see "lefiViaRule".
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

lefrVoidCbkFnType

+

Marks the beginning and end of LEF objects. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.

+

For more information about LEF syntax, see the LEF/DEF Language Reference.

+

Syntax

+
+ int lefrVoidCbkFnType(
lefrCallbackType_e typ,
void* ptr,
lefiUserData* data) +
+

Arguments

+

+ + typ +

+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF Data +

+
+

+ Type Returned +

+
+

Library End

+
+

lefrLibraryEndCbkType

+
+

Property Begin

+
+

lefrPropBeginCbkType

+
+

Property End

+
+

lefrPropEndCbkType

+
+

Spacing Begin

+
+

lefrSpacingBeginCbkType

+
+

Spacing End

+
+

lefrSpacingEndCbkType

+
+

Unused

+
+

lefrUnspecifiedCbkType

+
+

+ + ptr +

+
Returns nothing. (This is a placeholder value to meet the required three arguments for each routine).
+

+ + data +

+
Returns four bytes of user-defined data. User data is set most often to a pointer to the design data.
+

Examples

+

The following example shows a callback routine using lefrCallbackType_e, char*, and lefiUserData.

+
+ int macroBeginCB (lefrCallbackType_e type,
const char *macroName,
lefiUserData userData) {
+
+
+ // Incorrect type was passed in, expecting the type lefiMacroBeginCbkType +
+
+ if (type != lefiMacroBeginCbkType) {
printf("Type is not lefiMacroBeginCbkType,
     terminate parsing.\n");
return 1;
}
+
+
+ // Expect a non null char* macroName
if (!macroName || !*macroName) {
printf("Macro name is null, terminate parsing.\n");
return 1;
}
+
+
+ // Write out the macro name
printf("Macro name is %s\n", macroName);
return 0;}
+
+

The following callback routine has arguments of lefrCallbackType_e, void*, and lefiUserData.

+
+ int irdropEndCB (lefrCallbackType_e type,
void* ptr,
lefiUserData userData) {
// Check if the type is correct
if (type != lefrIRDropEndCbkType) {
printf("Type is not lefrIRDropEndCbkType, terminate
     parsing.\n");
return 1;
} +
+

 

+
+ printf("IRDROP END\n");
return 0;}
+
+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/ch4LEFclasses.html b/lefdef/doc/lefapi/ch4LEFclasses.html new file mode 100644 index 00000000..b0058f71 --- /dev/null +++ b/lefdef/doc/lefapi/ch4LEFclasses.html @@ -0,0 +1,1677 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

4 

+

LEF Reader Classes

+

This chapter contains the following sections:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Introduction
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Callback Style Interface
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Retrieving Repeating LEF Data
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Deriving C Syntax from C++ Syntax
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF Reader Classes
+
+

Introduction

+

Every statement in the Cadence® Library Exchange Format (LEF) file is associated with a LEF reader class. When the LEF reader uses a callback, it passes a pointer to the appropriate class. You can use the member functions in each class to retrieve data defined in the LEF file.

+

For a list of the LEF Reader Classes that correspond to LEF file syntax, see "LEF Reader Classes".

+

Callback Style Interface

+

This programming interface uses a callback style interface. You register for the constructs that interest you, and the readers call your callback functions when one of those constructs is read. If you are not interested in a given set of information, you simply do not register the callback; the reader scans the information quickly and proceeds.

+ +

Retrieving Repeating LEF Data

+

Many LEF objects contain repeating objects or specifications. The classes that correspond to these LEF objects contain an index and array of elements that let you retrieve the data iteratively.

+

You can use a for loop from 0 to the number of items specified in the index. In the loop, retrieve the data from the subsequent arrays. For example:

+

+ for (i = 0; i < layer->lefiLayer::numMinstep(); i++) { +

+
+ + fprintf(fout, " MINSTEP %g ", layer->lefiLayer::minstep(i)); +
+

+ if (layer->lefiLayer::hasMinstepType(i)) +

+

+ fprintf(fout, "%s ", layer->lefiLayer::minstepType(i)); +

+

+ if (layer->lefiLayer::hasMinstepLengthsum(i)) +

+

+ fprintf(fout, "LENGTHSUM %g ", +

+

+ layer->lefiLayer::minstepLengthsum(i)); +

+

+ fprintf(fout, ";\n"); +

+

+ } +

+

Deriving C Syntax from C++ Syntax

+

The Cadence application programming interface (API) provides both C and C++ interfaces. The C API is generated from the C++ source, so there is no functional difference. The C API has been created in a pseudo object-oriented style. Examining a simple case should enable you to understand the API organization.

+

The following examples show the same statements in C and C++ syntax.

+

C++ Syntax

+
+ class lefiSite {
const char* name() const;
int hasClass() const;
const char* siteClass() const;
double sizeX() const;
double sizeY() const;
int numSites() const;
char* siteName(int index) const;
int siteOrient(int index) const;
char* siteOrientStr(int index) const; +
+
+ }; +
+

C Syntax

+
+ const char * lefiSite_name
( const lefiSite * this ); +
+
+ int lefiSite_hasClass
( const lefiSite * this ); +
+
+ const char * lefiSite_siteClass
( const lefiSite * this ); +
+
+ double lefiSite_sizeX
( const lefiSite * this ); +
+
+ double lefiSite_sizeY
( const lefiSite * this ); +
+
+ int lefiSite_numSites
( const lefiSite * this ); +
+
+ char * lefiSite_siteName
( const lefiSite * this, int index ); +
+
+ int lefiSite_siteOrient
( const lefiSite * this, int index ); +
+
+ char * lefiSite_siteOrientStr
( const lefiSite * this, int index ); +
+

 

+

The C routine prototypes for the API functions can be found in the following files:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

lefiArray.h

+
+

lefiNonDefault.h

+
+

lefiViaRule.h

+
+

lefiCrossTalk.h

+
+

lefrCallBacks.h

+
+

lefiProp.h

+
+

lefrReader.h

+
+

lefiDebug.h

+
+

lefiDefs.h

+
+

lefwWriter.h

+
+

lefiKRDefs.h

+
+

lefiLayer.h

+
+

lefiUnits.h

+
+

lefiUser.h

+
+

lefiMacro.h

+
+

lefiUtil.h

+
+

lefiMisc.h

+
+

lefiVia.h

+
+

LEF Reader Classes

+

The following table lists the classes routines that apply to the LEF information.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF Information +

+
+

+ LEF Class +

+
+

Layer Classes

+
+

lefiAntennaModel
lefiAntennaPWL
lefiInfluence
lefiLayer
lefiLayerDensity
lefiOrthogonal
lefiParallel
lefiSpacingTable
lefiTwoWidths

+
+

Macro Data Classes

+
+

lefiDensity
lefiMacro
lefiMacroForeign
lefiMacroSite
lefiPoints

+
+

Macro Obstruction Class

+
+

lefiObstruction

+
+

Macro Pin Classes

+
+

lefiGeometries
lefiPin
lefiPinAntennaModel

+
+

Maximum Via Stack Class

+
+

lefiMaxStackVia

+
+

Miscellaneous Class

+
+

lefiUserData

+
+

Nondefault Rule Class

+
+

lefiNonDefault

+
+

Property Definition Classes

+
+

lefiProp
lefiPropType

+
+

Same-Net Spacing Class

+
+

lefiSpacing

+
+

Site Classes

+
+

lefiSite
lefiSitePattern

+
+

Units Class

+
+

lefiUnits

+
+

Use Min Spacing Class

+
+

lefiUseMinSpacing

+
+

Via Classes

+
+

lefiVia
lefiViaLayer

+
+

Via Rule Classes

+
+

lefiViaRule
lefiViaRuleLayer

+
+

Layer Classes

+

The LEF LAYER routines include the following classes:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiAntennaModel
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiAntennaPWL
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiInfluence
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiLayer
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiLayerDensity
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiOrthogonal
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiParallel
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiSpacingTable
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiTwoWidths
+
+

lefiAntennaModel

+

Retrieves antenna model information from a LAYER section of the LEF file.

+

For syntax information about the LEF LAYER sections, see "Layer (Cut)," and "Layer (Routing)" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiAntennaModel {
int hasAntennaAreaRatio() const;
int hasAntennaDiffAreaRatio() const;
int hasAntennaDiffAreaRatioPWL() const;
int hasAntennaCumAreaRatio() const;
int hasAntennaCumDiffAreaRatio() const
int hasAntennaCumDiffAreaRatioPWL() const;
int hasAntennaAreaFactor() const;
int hasAntennaAreaFactorDUO() const;
int hasAntennaSideAreaRatio() const;
int hasAntennaDiffSideAreaRatio() const;
int hasAntennaDiffSideAreaRatioPWL() const;
int hasAntennaCumSideAreaRatio() const;
int hasAntennaCumDiffSideAreaRatio() const;
int hasAntennaCumDiffSideAreaRatioPWL() const;
int hasAntennaSideAreaFactor() const;
int hasAntennaSideAreaFactorDUO() const;
int hasAntennaCumRoutingPlusCut() const;
int hasAntennaGatePlusDiff() const;
int hasAntennaAreaMinusDiff() const;
int hasAntennaAreaDiffReducePWL() const;
char* antennaOxide() const;
double antennaAreaRatio() const;
double antennaDiffAreaRatio() const;
lefiAntennaPWL* antennaDiffAreaRatioPWL() const;
double antennaCumAreaRatio() const;
double antennaCumDiffAreaRatio() const;
lefiAntennaPWL* antennaCumDiffAreaRatioPWL() const;
double antennaAreaFactor() const;
double antennaSideAreaRatio() const;
double antennaDiffSideAreaRatio() const;
lefiAntennaPWL* antennaDiffSideAreaRatioPWL() const;
double antennaCumSideAreaRatio() const;
double antennaCumDiffSideAreaRatio() const;
lefiAntennaPWL* antennaCumDiffSideAreaRatioPWL() const;
double antennaSideAreaFactor() const;
double antennaGatePlusDiff() const;
double antennaAreaMinusDiff() const;
lefiAntennaPWL* antennaAreaDiffReducePWL() const; }; +
+

lefiAntennaPWL

+

Retrieves antenna Piece-wise Linear Format (PWL) data from a LAYER section of the LEF file.

+

For syntax information about the LEF LAYER sections, see "Layer (Cut)," and "Layer (Routing)" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiAntennaPWL {
int numPWL() const;
double PWLdiffusion(int index):
double PWLratio(int index); }; +
+

lefiInfluence

+

Retrieves influence rule information from a LAYER (Routing) section of the LEF file.

+

For syntax information about the LEF LAYER (Routing) section, see "Layer (Routing)" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiInfluence {
int numInfluenceEntry() const;
double width(int index) const;
double distance(int index) const;
double spacing(int index) const; }; +
+

lefiLayer

+

Retrieves data from a LAYER section of the LEF file. This callback can be used for all layer types (cut, masterslice, implant, and routing). However, most of these functions apply to routing layers. Comments in the C++ syntax indicate those arguments that apply only to a particular layer type. All other arguments apply to all layer types.

+

For syntax information about the LEF LAYER sections, see "Layer (Cut)," "Layer (Masterslice or Overlap)," and "Layer (Routing)" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiLayer {
int hasType() const;
int hasPitch() const;                    // Routing
int hasXYPitch() const;
int hasOffset() const;                    // Routing
int hasXYOffset() const;
int hasWidth() const;                    // Routing
int hasArea() const;
int hasDiagPitch() const;
int hasXYDiagPitch() const;
int hasDiagWidth() const;
int hasDiagSpacing() const;
int hasSpacingNumber() const;
int hasSpacingName(int index) const;
int hasSpacingLayerStack(int index) const;
int hasSpacingAdjacent(int index) const;
int hasSpacingCenterToCenter(int index) const;
int hasSpacingRange(int index) const;                   // Routing
int hasSpacingRangeUseLengthThreshold(int index) const;
int hasSpacingRangeInfluence(int index) const;
int hasSpacingRangeInfluenceRange(int index) const;
int hasSpacingRangeRange(int index) const;
int hasSpacingLengthThreshold(int index) const;         // Routing
int hasSpacingLengthThresholdRange(int index) const;    // Routing
int hasSpacingParallelOverlap(int index) const;
int hasSpacingArea(int index) const;
int hasSpacingEndOfLine(int index) const;
int hasSpacingParellelEdge(int index) const;
int hasSpacingTwoEdges(int index) const;
int hasSpacingAdjacentExcept(int index) const;
int hasSpacingSamenet(int index) const;
int hasSpacingSamenetPGonly(int index) const;
int hasSpacingNotchLength(int index) const;
int hasSpacingEndOfNotchWidth(int index) const;
int hasDirection() const;                    // Routing
int hasResistance() const;                    // Routing
int hasResistanceArray() const;
int hasCapacitance() const;                    // Routing
int hasCapacitanceArray() const;
int hasHeight() const;                  // Routing
int hasThickness() const;                  // Routing
int hasWireExtension() const;                 // Routing
int hasShrinkage() const;                  // Routing
int hasCapMultiplier() const;                  // Routing
int hasEdgeCap() const;                  // Routing
int hasAntennaLength() const;                  // Routing
int hasAntennaArea() const;                  // Routing
int hasCurrentDensityPoint() const;
int hasCurrentDensityArray() const;
int hasAccurrentDensity() const;
int hasDccurrentDensity() const;

int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const;

int numSpacing() const;                      // Cut and Routing

char* name() const;
const char* type() const;
double pitch() const;                // Routing
double pitchX() const;
double pitchY() const;
double offset() const;                // Routing
double offsetX() const;
double offsetY() cont;
double width() const;
double area() const;
double diagPitch() const;
double diagPitchX() const;
double diagPitchY() const;
double diagWidth() const;
double diagSpacing() const;
double spacing(int index) const;
char* spacingName(int index) const;               // Cut
int spacingAdjacentCuts(int index) const;             // Cut
double spacingAdjacentWithin(int index) const;        // Cut
double spacingArea(int index) const;                  // Cut
double spacingRangeMin(int index) const;
double spacingRangeMax(int index) const;
double spacingRangeInfluence(int index) const;
double spacingRangeInfluenceMin(int index) const;
double spacingRangeInfluenceMax(int index) const;
double spacingRangeRangeMin(int index) const;
double spacingRangeRangeMax(int index) const;
double spacingLengthThreshold(int index) const;
double spacingLengthThresholdRangeMin(int index) const;
double spacingLengthThresholdRangeMax(int index) const;

double spacingEolWidth(int index) const;
double spacingEolWithin(int index) const;
double spacingParSpace(int index) const;
double spacingParWithin(int index) const;

double spacingNotchLength(int index) const;
double spacingEndOfNotchWidth(int index) const;
double spacingEndOfNotchSpacing(int index) const;
double spacingEndOfNotchLength(int index) const;

int numMinimumcut() const;
int minimumcut(int index) const;
double minimumcutWidth(int index) const;
int hasMinimumcutWithin(int index) const;
double minimumcutWithin(int index) const;
int hasMinimumcutConnection(int index) const;      // FROMABOVE | FROMBELOW
const char* minimumcutConnection(int index) const; // FROMABOVE | FROMBELOW
int hasMinimumcutNumCuts(int index) const;
double minimumcutLength(int index) const;
double minimumcutDistance(int index) const;

const char* direction() const;                // Routing
double resistance() const;                // Routing
double capacitance() const;                 // Routing
double height() const;                // Routing
double wireExtension() const;                // Routing
double thickness() const;                // Routing
double shrinkage() const;                // Routing
double capMultiplier() const;                // Routing
double edgeCap() const;                // Routing
double antennaLength() const;                // Routing
double antennaArea() const;                // Routing
double currentDensityPoint() const;
void currentDensityArray(int* numPoints, double** widths,
     double** current) const;
void capacitanceArray(int* numPoints, double** widths,
     double** resValues) const;
void resistanceArray(int* numPoints, double** widths,
     double** capValues) const;                      // Routing

int numAccurrentDensity() const;
lefiLayerDensity* accurrent(int index) const;
int numDccurrentDensity() const;
lefiLayerDensity* dccurrent(int index) const;

int numAntennaModel() const;
lefiAntennaModel* antennaModel(int index) const;

int hasSlotWireWidth() const;
int hasSlotWireLength() const;
int hasSlotWidth() const;
int hasSlotLength() const;
int hasMaxAdjacentSlotSpacing() const;
int hasMaxCoaxialSlotSpacing() const;
int hasMaxEdgeSlotSpacing() const;
int hasSplitWireLength() const;
int hasMinimumDensity() const;
int hasMaximumDensity() const;
int hasDensityCheckWindow() const;
int hasDensityCheckStep() const;
int hasFillActiveSpacing() const;
int hasMaxwidth() const;
int hasMinwidth() const;
int hasMinstep() const;
int hasProtrusion() const;

double slotWireWidth() const;
double slotWireLength() const;
double slotWidth() const;
double slotLength() const;
double maxAdjecentSlotSpacing() const;
double maxCoaxialSlotSpacing() const;
double maxEdgeSlotSpacing() const;
double splitWireLength() const;
double minimumDensity() const
double maximumDensity() const;
double densityCheckWindowLength() const;
double densityCheckWindowWidth() const;
double densityCheckStep() const;
double fillActiveSpacing() const;
double maxwidth() const;
double minwidth() const;
double minstep() const;
double protrusionWidth1() const;
double protrusionLength() const;
double protrusionWidth2() const;

int numMistep() const;
double minstep(int index) const;
int hasMinstepType(int index) const;
char* minstepType(int index) const;
int hasMinstepLengthsum(int index) const;
double minstepLengthsum(int index) const;
int hasMinstepMaxedges(int index) const;
int minstepMaxedges(int index) const;

int numMinenclosedarea() const;
double minenclosedarea(int index) const;
int hasMinenclosedareaWidth(int index) const;
double minenclosedareaWidth(int index) const;

int numSpacingTable();
lefiSpacingTable* spacingTable(int index);

int numEnclosure() const;
int hasEnclosureRule(int index) const;
char* enclosureRule (int index);
double enclosureOverhang1(int index) const;
double enclosureOverhang2(int index) const;
int hasEnclosureWidth(int index) const;
double enclosureMinWidth(int index) const;
int hasEnclosureExceptExtraCut(int index) const;
double enclosureExceptExtraCut(int index) const;
int hasEnclosureMinLength(int index) const;
double enclosureMinLength(int index) const;
int numPreferEnclosure() const;
int hasPreferEnclosureRule(int index) const;
char* preferEnclosureRule(int index) const;
double preferEnclosureOverhang1(int index) const;
double preferEnclosureOverhang2(int index) const;
int hasPreferEnclosureWidth(int index) const;
double preferEnclosureMinWidth(int index) const;
int hasResistancePerCut() const;
double resistancePerCut() const;
int hasMinEdgeLength() const;
double minEdgeLength() const;
int hasDiagMinEdgeLength() const;
double diagMinEdgeLength() const;
int hasMinSize() const;
int numMinSize() const;
double minSizeWidth(int index) const;
double minSizeLength(int index)const ;

int hasMaxFloatingArea() const;
double maxFloatingArea() const;
int hasArraySpacing() const;
int hasLongArray() const;
int hasViaWidth() const;
double viaWidth() const;
double cutSpacing() const;
int numArrayCuts() const;
int arrayCuts(int index) const;
double arraySpacing(int index) const;
int hasSpacingTableOrtho() const;
lefiOrthogonal *orthogonal() const;

int hasMask() const;         // Check the layer has color mask assigned or not.
int mask() const; };        // Return the color mask number of the layer.
+
+

lefiLayerDensity

+

Retrieves data from the LAYERDENSITY statement in a LAYER section of the LEF file.

+

For syntax information about the LEF LAYER sections, see "Layer (Cut)," and "Layer (Routing)" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiLayerDensity {
char* type();
int hasOneEntry();
double oneEntry();
int numFrequency();
double frequency(int index);
int numWidths();
double width(int index);
int numTableEntries();
double tableEntry(int index);
int numCutareas();
double cutArea(int index); }; +
+

lefiOrthogonal

+

Retrieves orthogonal spacing information from a LAYER section of the LEF file.

+

For syntax information about the LEF LAYER sections, see "Layer (Cut) in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiOrthogonal {
int numOrthogonal() const;
double cutWithin(int index) const;
double orthoSpacing(int index) const; }; +
+

lefiParallel

+

Retrieves parallel run length information from a LAYER (Routing) section of the LEF file.

+

For syntax information about the LEF LAYER (Routing) section, see "Layer (Routing)" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiParallel {
int numLength() const;
int numWidth() const;
double length(int iLength) const;
double width(int iWidth) const;
double widthSpacing(int iWidth, int iWidthSpacing) const; }; +
+

lefiSpacingTable

+

Retrieves spacing table information from a LAYER (Routing) section of the LEF file.

+

For syntax information about the LEF LAYER (Routing) section, see "Layer (Routing)" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiSpacingTable {
int isInfluence() const;
lefiInfluence* influence() const;
int isParallel() const;
lefiParallel* parallel() const;
lefiTwoWidths* twoWidths() const; }; +
+

lefiTwoWidths

+

Retrieves two-width spacing information from a LAYER (Routing) section of the LEF file.

+

For syntax information about the LEF LAYER (Routing) section, see "Layer (Routing)" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiTwoWidths {
int numWidth() const;
double width(int iWidth) const;
int hasWidthPRL(int iWidth) const;
double widthPRL(int iWidth) const;
int numWidthSpacing(int iWidth) const;
double widthSpacing(int iWidth, int iWidthSpacing) const; }; +
+

Macro Data Classes

+

The LEF MACRO data routines include the following LEF classes:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiDensity
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiMacro
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiMacroForeign
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiMacroSite
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiPoints
+
+

lefiDensity

+

Retrieves density information from the MACRO section of the LEF file.

+

For syntax information about the MACRO section, see "Macro" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiDensity {
int numLayer() const;
char* layerName(int index) const;
int numRects(int index) const;
struct lefiGeomRect getRect(int index, int rectIndex) const;
double densityValue(int index, int rectIndex) const; }; +
+

lefiMacro

+

Retrieves data from the MACRO section of the LEF file.

+

For syntax information about the MACRO section, see "Macro" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiMacro {
int hasClass() const;
int hasGenerator() const;
int hasGenerate() const;
int hasPower() const;
int hasOrigin() const;
int hasEEQ() const;
int hasLEQ() const;
int hasSource() const;
int hasXSymmetry() const;
int hasYSymmetry() const;
int has90Symmetry() const;
int hasSiteName() const;
int hasSitePattern() const;
int hasSize() const;
int hasForeign() const;
int hasForeignOrigin(int index = 0) const;
int hasForeignOrient(int index = 0) const;
int hasForeignPoint(int index = 0) const;
int hasClockType() const;
int isBuffer() const;
int isInverter() const; +
+
+      int numSitePattern() const;
int numProperties() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNum(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const; +
+
+      const char* name() const;
const char* macroClass() const;
const char* generator() const;
const char* EEQ() const;
const char* LEQ() const;
const char* source() const;
const char* clockType() const;
double originX() const;
double originY() const;
double power() const;
void generate(char** name1, char** name2) const;
lefiSitePattern* sitePattern(int index) const;
const char* siteName() const;
double sizeX() const;
double sizeY() const;
int numForeigns() const;
int foreignOrient(int index = 0) const;   //optional - for information, see
  //Orientation Codes
const char* foreignOrientStr(int index = 0) const;
double foreignX(int index = 0) const;
double foreignY(int index = 0) const;
const char* foreignName(int index = 0) const; }; +
+

lefiMacroForeign

+

Retrieves data for in-place processing of a MACRO FOREIGN statement.

+

C++ Syntax

+
+ class lefiMacroForeign {
public:
lefiMacroForeign(const char *name,
int hasPts,
double x,
double y,
int hasOrient,
int orient);
const char *cellName() const;
int cellHasPts() const;
double px() const;
double py() const;
int cellHasOrient() const;
int cellOrient() const;
protected:
const char *cellName_;
int cellHasPts_;
double px_;
double py_;
int cellHasOrient_;
int cellOrient_;
}; +
+

lefiMacroSite

+

Retrieves data for in-place processing of a MACRO SITE statement.

+

C++ Syntax

+
+ class lefiMacroSite {
public:
lefiMacroSite(const char *name, const lefiSitePattern* pattern);
const char *siteName() const;
const lefiSitePattern *sitePattern() const;
protected:
const char *siteName_;
const lefiSitePattern *sitePattern_;
}; +
+

lefiPoints

+

Returns the X and Y points for the ORIGIN and SIZE statements in the MACRO section.

+

C++ Syntax

+
+ struct lefiPoints {
double x;
double y; }; +
+
+ typedef struct lefiPoints lefiNum; +
+

Macro Examples

+

The following example shows a callback routine with the type lefrMacroBeginCbkType, and the class const char*.

+
+ int macroBeginCB (lefrCallbackType_e type,
const char *macroName,
lefiUserData userData) {
+
+
+  // Incorrect type was passed in, expecting the type
// lefiMacroBeginCbkType
if (type != lefiMacroBeginCbkType) {
printf("Type is not lefiMacroBeginCbkType, terminate
        parsing.\n");
return 1;
}
+
+
+ // Expect a non null char* macroName
if (!macroName || !*macroName) {
printf("Macro name is null, terminate parsing.\n");
return 1;
}
+
+
+ // Write out the macro name
printf("Macro name is %s\n", macroName);
return 0;}
+
+

The following example shows a callback routine with the type lefrMacroCbkType, and the class lefiMacro. This example only shows how to retrieve part of the data from the lefiMacro class.

+
+ int macroCB (lefrCallbackType_e type,
lefiMacro *macroInfo,
lefiUserData userData) {
int propNum, i, hasPrtSym = 0;
lefiSitePattern* pattern;
+
+
+ // Check if the type is correct
if (type != lefrMacroCbkType) {
printf("Type is not lefrMacroCbkType, terminate
        parsing.\n");
return 1;
}
if (macroInfo->hasClass())
printf(" CLASS %s\n", macroInfo->macroClass());
+
+
+ if (macroInfo->hasXSymmetry()) {
printf(" SYMMETRY X ");
hasPrtSym = 1;
}
if (macroInfo->hasYSymmetry()) {  // print X Y & R90 in one line
if (!hasPrtSym) {  // the line has not started yet
printf(" SYMMETRY Y ");
hasPrtSym = 1;
}
else // the line has already started
printf("Y ");
}
if (macroInfo->has90Symmetry()) {
if (!hasPrtSym) { // the line has not started yet
printf(" SYMMETRY R90 ");
hasPrtSym = 1;
}
else // the line has already started
printf("R90 ");
}
if (hasPrtSym) {
printf ("\n");
hasPrtSym = 0;
}
+
+
+ // Check if SITE pattern is defined in the macro
if (macroInfo->hasSitePattern()) {
for (i = 0; i < macroInfo->numSitePattern(); i++ ) {
pattern = macroInfo->sitePattern(i);
printf(" SITE %s %g %g %d DO %g BY %g STEP %g %g\n",
pattern->name(), pattern->x(), pattern->y(),
pattern->orient(), pattern->xStart(),
                pattern->yStart(),
pattern->xStep(), pattern->yStep());
}
}
+
+
+ // Check if PROPERTY is defined in the macro
propNum = macroInfo->numProperties();
if (propNum > 0) {
printf(" PROPERTY ");
for (i = 0; i < propNum; i++) {
// value can either be a string or number
if (macroInfo->propValue(i)) {
printf("%s %s ", macroInfo->propName(i),
macroInfo->propValue(i));
}
else
printf("%s %g ", macroInfo->propName(i),
                   macroInfo->propNum(i));
}
printf("\n");
}
return 0;} +
+

Macro Obstruction Class

+

The LEF Macro Obstruction routines include the following LEF class:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiObstruction
+
+

lefiObstruction

+

Retrieves data from the Macro Obstruction (OBS) statement in the MACRO section of the LEF file. The Macro Obstruction statement defines sets of obstructions (blockages) on the macro.

+

For syntax information about the Macro Obstruction statement, see "Macro Obstruction Statement" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiObstruction {
lefiGeometries* geometries() const;}; +
+

Macro Obstruction Examples

+

The following example shows a callback routine with the type lefrObstructionCbkType, and the class lefiObstruction.

+
+ int macroObsCB (lefrCallbackType_e type,
lefiObstruction* obsInfo,
lefiUserData userData) {
lefiGeometries* geometry;
int numItems;
int i, j;
lefiGeomPath* path;
lefiGeomPathIter* pathIter;
lefiGeomRect* rect;
lefiGeomRectIter* rectIter;
lefiGeomPolygon* polygon;
lefiGeomPolygonIter* polygonIter;
lefiGeomVia* via;
lefiGeomViaIter* viaIter;
// Check if the type is correct
if (type != lefrObstructionCbkType) {
printf("Type is not lefrObstructionCbkType,
             terminate parsing.\n");
return 1;}
+
+
+      printf("OBS\n");
geometry = obs->geometries();
numItems = geometry->numItems();
for (i = 0; i < numItems; i++) {
switch (geometry->itemType(i)) {
case lefiGeomClassE:
printf(" CLASS %s\n", geometry->getClass(i));
break;
case lefiGeomLayerE:
printf(" LAYER %s\n", geometry->getLayer(i));
break;
case lefiGeomWidthE:
printf(" WIDTH %g\n", geometry->getWidth(i))
break;
case lefiGeomPathE:
path = geometry->getPath(i);
printf(" PATH");
for (j = 0; j < path->numPoints; j++)
printf(" ( %g %g )", path->x[j], path->y[j]);
printf("\n");
break;
case lefiGeomPathIterE:
pathIter = geometry->getPathIter(i);
printf(" PATH ITERATED");
for (j = 0; j < pathIter->numPoints; j++)
printf(" ( %g %g )", pathIter->x[j],
                        pathIter ->y[j]);
printf("\n");
printf(" DO %g BY %g STEP %g %g\n",
                    pathIter->xStart, pathIter->yStart,
                    pathIter->xStep, pathIter->yStep);
break;
case lefiGeomRectE:
rect = geometry->getRect(i);
printf(" RECT ( %g %g ) ( %g %g )\n", rect->xl,
rect->yl, rect->xh, rect->yh);
break;
case lefiGeomRectIterE:
rectIter = geometry->getRectIter(i);
printf(" RECT ITERATE ( %g %g ) ( %g %g )\n",
rectIter->xl, rectIter->yl,
rectIter->xh, rectIter->yh);
printf(" DO %g BY %g STEP %g %g\n",
rectIter->xStart, rectIter->yStart,
rectIter->xStep, rectIter->yStep);
break;
case lefiGeomPolygonE:
polygon = geometry->getPolygon(i);
printf(" POLYGON");
for (j = 0; j < polygon->numPoints; j++)
printf(" ( %g %g )", polygon->x[j], polygon-
>y[j]);
printf("\n");
break;
case lefiGeomPolygonIterE:
polygonIter = geometry->getPolygonIter(i);
printf(" POLYGON ITERATE");
for (j = 0; j < polygonIter->numPoints; j++)
printf(" ( %g %g )", polygonIter->x[j],
polygonIter->y[j]);
printf("\n");
printf(" DO %g BY %g STEP %g %g\n",
polygonIter->xStart, polygonIter->yStart,
polygonIter->xStep, polygonIter->yStep);
break;
case lefiGeomViaE:
via = geometry->getVia(i);
printf(" VIA ( %g %g ) %s\n", via->x,
via->y, via->name);
break;
case lefiGeomViaIterE:
viaIter = geometry->getViaIter(i);
printf(" VIA ITERATE ( %g %g ) %s\n",
viaIter->x, viaIter->y, viaIter->name);
printf(" DO %g BY %g STEP %g %g\n",
viaIter->xStart, viaIter->yStart,
viaIter->xStep, viaIter->yStep);
break;
}
}
return 0; }
+
+

Macro Pin Classes

+

The LEF Macro Pin routines include the following LEF classes:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiPin
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiPinAntennaModel
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiGeometries
+
+

lefiPin

+

Retrieves data from the PIN statement in the MACRO section of the LEF file. MACRO PIN statements are included in the LEF file for each macro.

+

For syntax information about the Macro Pin statement, see "Macro Pin Statement" in the
LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiPin {
int hasForeign() const;
int hasForeignOrient(int index = 0) const;
int hasForeignPoint(int index = 0) const;
int hasLEQ() const;
int hasDirection() const;
int hasUse() const;
int hasShape() const;
int hasMustjoin() const;
int hasOutMargin() const;
int hasOutResistance() const;
int hasInMargin() const;
int hasPower() const;
int hasLeakage() const;
int hasMaxload() const;
int hasMaxdelay() const;
int hasCapacitance() const;
int hasResistance() const;
int hasPulldownres() const;
int hasTieoffr() const;
int hasVHI() const;
int hasVLO() const;
int hasRiseVoltage() const;
int hasFallVoltage() const;
int hasRiseThresh() const;
int hasFallThresh() const;
int hasRiseSatcur() const;
int hasFallSatcur() const;
int hasCurrentSource() const;
int hasTables() const;
int hasAntennaSize() const;
int hasAntennaMetalArea() const;
int hasAntennaMetalLength() const;
int hasAntennaPartialMetalArea() const;
int hasAntennaPartialMetalSideArea() const;
int hasAntennaPartialCutArea() const;
int hasAntennaDiffArea() const;
int hasAntennaModel() const;
int hasTaperRule() const;
int hasRiseSlewLimit() const;
int hasFallSlewLimit() const;
int hasNetExpr() const;
int hasSupplySensitivity() const;
int hasGroundSensitivity() const;
const char* name() const;
int numPorts() const;
lefiGeometries* port(int index) const;
int numForeigns() const;
const char* foreignName(int index = 0) const;
const char* taperRule() const;
int foreignOrient(int index = 0) const;  // optional - for information, see
                                 // Orientation Codes
const char* foreignOrientStr(int index = 0) const;
double foreignX(int index = 0) const;
double foreignY(int index = 0) const;
const char* LEQ() const;
const char* direction() const;
const char* use() const;
const char* shape() const;
const char* mustjoin() const;
double outMarginHigh() const;
double outMarginLow() const;
double outResistanceHigh() const;
double outResistanceLow() const;
double inMarginHigh() const;
double inMarginLow() const;
double power() const;
double leakage() const;
double maxload() const;
double maxdelay() const;
double capacitance() const;
double resistance() const;
double pulldownres() const;
double tieoffr() const;
double VHI() const;
double VLO() const;
double riseVoltage() const;
double fallVoltage() const;
double riseThresh() const;
double fallThresh() const;
double riseSatcur() const;
double fallSatcur() const;
double riseSlewLimit() const;
double fallSlewLimit() const;
const char* currentSource() const;
const char* tableHighName() const;
const char* tableLowName() const;

int numAntennaSize() const;
double antennaSize(int index) const;
const char* antennaSizeLayer(int index) const;

int numAntennaMetalArea() const;
double antennaMetalArea(int index) const;
const char* antennaMetalAreaLayer(int index) const;

int numAntennaMetalLength() const;
double antennaMetalLength(int index) const;
const char* antennaMetalLengthLayer(int index) const;

int numAntennaPartialMetalArea() const;
double antennaPartialMetalArea(int index) const;
const char* antennaPartialMetalAreaLayer(int index) const;

int numAntennaPartialMetalSideArea() const;
double antennaPartialMetalSideArea(int index) const;
const char* antennaPartialMetalSideAreaLayer(int index) const;

int numAntennaPartialCutArea() const;
double antennaPartialCutArea(int index) const;
const char* antennaPartialCutAreaLayer(int index) const;

int numAntennaDiffArea() const;
double antennaDiffArea(int index) const;
const char* antennaDiffAreaLayer(int index) const;

const char* netExpr() const;
const char* supplySensitivity() const;
const char* groundSensitivity() const;

int numantennaModel() const;
lefiPinAntennaModel* antennaModel(int index) const;

int numProperties() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNum(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const; };
+
+

lefiPinAntennaModel

+

Retrieves antenna model information from Macro Pin statement of the LEF file.

+

For syntax information about the Macro Pin statement, see "Macro Pin Statement" in the
LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiAntennaModel {
int hasAntennaGateArea() const;
int hasAntennaMaxAreaCar() cons
int hasAntennaMaxSideAreaCar() const;
int hasAntennaMaxCutCar() const;
char* antennaOxide() const;
int numantennaGateArea() const;
double antennaGateArea(int index) const;
const char* antennaGateAreaLayer(int index) const;
int numAntennaMaxAreaCar() const;
double antennaMaxAreaCar(int index) const;
const char* antennaMaxAreaCarLayer(int index) const;
int numAntennaMaxSideAreaCar() conts;
double antennaMaxSideAreaCar(int index) const;
const char* antennaMaxSideAreaCarLayer(int index) const;
int numAntennaMaxCutCar() const;
double antennaMaxCutCar(int index) const;
const char* antennaMaxCutCarLayer(int index) const; }; +
+

lefiGeometries

+

Retrieves data from the Macro Pin statement and from the Macro Obstruction statement in the MACRO section of the LEF file. These statements specify the pin port and obstruction geometries for the macro.

+

For syntax information about LEF geometries, see "Layer Geometries" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiGeometries {
int numItems() const;
enum lefiGeomEnum itemType(int index) const;
struct lefiGeomRect* getRect(int index) const;
struct lefiGeomRectIter* getRectIter(int index) const;
struct lefiGeomPath* getPath(int index) const;
struct lefiGeomPathIter* getPathIter(int index) const;
int hasLayerExceptPgNet(int index) const;
char* getLayer(int index) const;
double getLayerMinSpacing(int index) const;
double getLayerRuleWidth(int index) const;
double getWidth(int index) const;
struct lefiGeomPolygon* getPolygon(int index) const;
struct lefiGeomPolygonIter* getPolygonIter(int index) const;
char* getClass(int index) const;
struct lefiGeomVia* getVia(int index) const;
struct lefiGeomViaIter* getViaIter(int index) const;
int colorMask;
}; +
+

lefiGeomEnum

+

Returns the type of geometry of a macro.

+

C++ Syntax

+
+ enum lefiGeomEnum {
lefiGeomunknown = 0,
lefiGeomLayerE,
lefiGeomLayerMinSpacingE,
lefiGeomLayerRuleWidthE,
lefiGeomWidthE,
lefiGeomPathE,
lefiGeomPathIterE,
lefiGeomRectE,
lefiGeomRectIterE,
lefiGeomPolygonE,
lefiGeomPolygonIterE,
lefiGeomViaE,
lefiGeomViaIterE,
lefiGeomClassE,
lefiGeomEnd }; +
+

lefiGeomRect

+

Returns data from the RECT statement in the MACRO section.

+

C++ Syntax

+
+ struct lefiGeomRect {
double xl;
double yl;
double xh;
double yh;
int colorMask; };           //specify color mask number for the GeomRect
                            //structure. +
+

lefiGeomRectIter

+

Returns data from the RECT ITERATE statement in the MACRO section.

+

C++ Syntax

+
+ struct lefiGeomRectIter {
double xl;
double yl;
double xh;
double yh;
double xStart;
double yStart;
double xStep;
double yStep;
int colorMask;};         //specify color mask number for the GeomRectIter
                         //structure. +
+

Note: For the following step pattern:

+
+ + DO numX BY numY STEP spaceX spaceY +
+

The values are mapped to the structure in the following way:

+

 

+ + + + + + + + + + + + + + + + + + + + + +
+
+

+ Step Pattern Value +

+
+

+ Maps to Structure Value +

+
+

numX

+
+

xStart

+
+

numY

+
+

yStart

+
+

spaceX

+
+

xStep

+
+

spaceY

+
+

yStep

+
+

lefiGeomPath

+

Returns data from the PATH statement in the MACRO section.

+

C++ Syntax

+
+ struct lefiGeomPath {
int numPoints;
double* x;
double* y;
int colorMask; };       //specify color mask number for the GeomPath
                        //structure. +
+

lefiGeomPathIter

+

Returns data from the PATH ITERATE statement in the MACRO section.

+

C++ Syntax

+
+ struct lefiGeomPathIter {
int numPoints;
double* x;
double* y;
double xStart;
double yStart;
double xStep;
double yStep;
int colorMask; };    //specify color mask number for the GeomPathIter
                     //structure. +
+

Note: For the following step pattern:

+
+ + DO numX BY numY STEP spaceX spaceY +
+

The values are mapped to the structure in the following way:

+

 

+ + + + + + + + + + + + + + + + + + + + + +
+
+

+ Step Pattern Value +

+
+

+ Maps to Structure Value +

+
+

numX

+
+

xStart

+
+

numY

+
+

yStart

+
+

spaceX

+
+

xStep

+
+

spaceY

+
+

yStep

+
+

lefiGeomPolygon

+

Returns data from the POLYGON statement in the MACRO section.

+

C++ Syntax

+
+ struct lefiGeomPolygon {
int numPoints;
double* x;
double* y;
int colorMask; };    //specify color mask number for the GeomPolygon
                     //structure. +
+

lefiGeomPolygonIter

+

Returns data from the POLYGON ITERATE statement in the MACRO section.

+

C++ Syntax

+
+ struct lefiGeomPolygonIter {
int numPoints;
double* x;
double* y;
double xStart;
double yStart;
double xStep;
double yStep;
int colorMask; };    //specify color mask number for the GeomPolygonIter
                     //structure. +
+

Note: For the following step pattern:

+
+ + DO numX BY numY STEP spaceX spaceY +
+

The values are mapped to the structure in the following way:

+

 

+ + + + + + + + + + + + + + + + + + + + + +
+
+

+ Step Pattern Value +

+
+

+ Maps to Structure Value +

+
+

numX

+
+

xStart

+
+

numY

+
+

yStart

+
+

spaceX

+
+

xStep

+
+

spaceY

+
+

yStep

+
+

lefiGeomVia

+

Returns data from the VIA statement in the MACRO section.

+

C++ Syntax

+
+ struct lefiGeomVia {
char* name;
double x;
double y;
int topMaskNum;       //define top mask number for the GeomVia structure.
int cutMaskNum;       //define cut mask number for the GeomVia structure.
int bottomMaskNum;};  //define bottom mask number for the GeomVia structure. +
+

lefiGeomViaIter

+

Returns data from the VIA ITERATE statement in the MACRO section.

+

C++ Syntax

+
+ struct lefiGeomViaIter {
char* name;
double x;
double y;
double xStart;
double yStart;
double xStep;
double yStep;
int topMaskNum;       //define top mask number for the GeomViaIter structure.
int cutMaskNum;       //define cut mask number for the GeomViaIter structure.
int bottomMaskNum;};  //define bottom mask number for the GeomViaIter
                       //structure. +
+

Note: For the following step pattern:

+
+ + DO numX BY numY STEP spaceX spaceY +
+

The values are mapped to the structure in the following way:

+

 

+ + + + + + + + + + + + + + + + + + + + + +
+
+

+ Step Pattern Value +

+
+

+ Maps to Structure Value +

+
+

numX

+
+

xStart

+
+

numY

+
+

yStart

+
+

spaceX

+
+

xStep

+
+

spaceY

+
+

yStep

+
+

Macro Pin Examples

+

The following example shows a callback routine with the type lefrPinCbkType, and the class lefiPin. This example only shows how to retrieve part of the data from the lefiPin class.

+
+ int macroPinCB (lefrCallbackType_e type,
lefiPin* pinInfo,
lefiUserData userData) {
lefiGeometries* geometry;
int numPorts;
int numItems;
int i, j;
lefiGeomPath* path;
lefiGeomPathIter* pathIter;
lefiGeomRect* rect;
lefiGeomRectIter* rectIter;
lefiGeomPolygon* polygon;
lefiGeomPolygonIter* polygonIter;
lefiGeomVia* via;
lefiGeomViaIter* viaIter;
+
+
+ // Check if the type is correct
if (type != lefrPinCbkType) {
printf("Type is not lefrPinCbkType, terminate parsing.\n");
return 1;
}
+
+
+ printf("PIN %s\n", pin->name());
if (pin->hasForeign()) {
if (pin->hasForeignOrient())
printf(" FOREIGN %s STRUCTURE ( %g %g ) %d\n",
                pin->foreignName(), pin->foreignX(),
                pin->foreignY(), pin->foreignOrient());
else if (pin->hasForeignPoint())
printf(" FOREIGN %s STRUCTURE ( %g %g )\n",
                pin->foreignName(), pin->foreignX(),
                pin->foreignY());
else
printf(" FOREIGN %s\n", pin->foreignName());
}
+
+
+ if (pin->hasLEQ())
printf(" LEQ %s\n", pin->LEQ());
+
+
+ if (pin->hasAntennaSize()) {
for (i = 0; i < pin->numAntennaSize(); i++) {
printf(" ANTENNASIZE %g ", pin->antennaSize(i));
if (pin->antennaSizeLayer(i))
printf("LAYER %s ", pin->antennaSizeLayer(i));
printf("\n");
}
}
+
+
+ numPorts = pin->numPorts();
for (i = 0; i < numPorts; i++) {
printf(" PORT\n");
geometry = pin->port(i);
// A complete example can be found .
numItems = geometry->numItems();
for (j = 0; j < numItems; j++) {
switch (geometry->itemType(j)) {
case lefiGeomClassE:
printf(" CLASS %s\n", geometry->getClass(j));
break;
case lefiGeomLayerE:
printf(" LAYER %s\n", geometry->getLayer(j));
break;
case lefiGeomWidthE:
printf(" WIDTH %g\n", geometry->getWidth(j));
break;
case lefiGeomPathE:
...
break;
case lefiGeomPathIterE:
...
break;
case lefiGeomRectE:
rect = geometry->getRect(j);
printf(" RECT ( %g %g ) ( %g %g )\n", rect->xl,
rect->yl, rect->xh, rect->yh);
break;
case lefiGeomRectIterE:
...
break;
case lefiGeomPolygonE:
...
break;
case lefiGeomPolygonIterE:
...
break;
case lefiGeomViaE:
...
break;
case lefiGeomViaIterE:
...
break;
}
}
}
return 0; } +
+

Maximum Via Stack Class

+

The LEF MAXSTACKVIA routines include the following LEF class:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiMaxStackVia
+
+

lefiMaxStackVia

+

Retrieves data from the MAXVIASTACK statement in the LEF file.

+

For syntax information about the LEF MAXVIASTACK statement, see "Maximum Via Stack" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiMaxStackVia {
int maxStackVia() const;
int hasMaxStackViaRange() const;
const char* maxStackViaBottomLayer() const;
const char* maxStackViaTopLayer() const; } +
+

Miscellaneous Class

+

Miscellaneous routines include the following LEF class:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiUserData
+
+

lefiUserData

+

The user data can be set or changed at any time with the lefrSetUserData and lefrGetUserData calls. Every callback returns the user data as the third argument.

+

C++ Syntax

+
+ lefiUserData lefrGetUserData() +
+

Nondefault Rule Class

+

The LEF NONDEFAULT RULE routines include the following LEF class:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiNonDefault
+
+

lefiNonDefault

+

Retrieves data from the NONDEFAULTRULE statement in the LEF file.

+

For syntax information about the LEF NONDEFAULTRULE statement, see "Nondefault Rule" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiNonDefault {
const char* name() const;
int hardSpacing() const;
int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propIsString(int index) const; +
+
+      int numLayers() const;
const char* layerName(int index) const;
int hasLayerWidth(int index) const;
double layerWidth(int index) const;
int hasLayerSpacing(int index) const;
double layerSpacing(int index) const;
int hasLayerWireExtension(int index) const;
double layerWireExtension(int index) const;
int hasLayerDiagWidth(int index) const;
double layerDiagWidth(int index) const;
int numVias() const;
lefiVia* viaRule(int index) const; +
+
+      int numSpacingRules() const;
lefiSpacing* spacingRule(int index) const;
int numUseVia() const;
const char* viaName(int index) const;
int numUseViaRule() const;
const char* viaRuleName(int index) const;
int numMinCuts() const;
const char* cutLayerName(int index) const;
int numCuts(int index) const; }; +
+

Nondefault Rule Examples

+

The following example shows a callback routine with the type lefrNonDefaultCbkType, and the class lefiNonDefault. This example only shows how to retrieve part of the data from the lefiNonDefault class. For examples of how to retrieve via and spacing data, see the Via Routines and Same-Net Spacing Routines sections.

+
+ int nonDefaultCB (lefrCallbackType_e type,
lefiNonDefault* nonDefInfo,
lefiUserData userData) {
int i;
lefiVia* via;
lefiSpacing* spacing;
+
+
+  // Check if the type is correct
if (type != lefrNonDefaultCbkType) {
printf("Type is not lefrNonDefaultCbkType, terminate
        parsing.\n");
return 1; }
// Print out nondefaultrule data
printf("NONDEFAULTRULE %s\n", def->name());
for (i = 0; i < def->numLayers(); i++) {
printf(" LAYER %s\n", def->layerName(i));
if (def->hasLayerWidth(i))
printf(" WIDTH %g\n", def->layerWidth(i));
if (def->hasLayerSpacing(i))
printf(" SPACING %g\n", def->layerSpacing(i));}
+
+
+  // handle via in nondefaultrule
for (i = 0; i < def->numVias(); i++) {
via = def->viaRule(i);
// handle spacing in nondefaultrule
for (i = 0; i < def->numSpacingRules(); i++) {
spacing = def->spacingRule(i);}
return 0;} +
+

Property Definition Classes

+

The LEF PROPERTYDEFINITIONS routines include the following classes:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiProp
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiPropType
+
+

lefiProp

+

Retrieves data from the PROPERTYDEFINITIONS statement in the LEF file. The PROPERTYDEFINITIONS statement lists all properties used in the LEF file. You must define properties before you refer to them in other routines in the LEF file.

+

For syntax information about the LEF PROPERTYDEFINITIONS statement, see "Property Definitions" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiProp {
const char* string() const;
const char* propType() const;
const char* propName() const;
char dataType() const;
int hasNumber() const;
int hasRange() const;
int hasString() const;
int hasNameMapString() const;
double number() const;
double left() const;
double right() const;}; +
+

lefiPropType

+

Retrieves the data type from the LEF PROPERTYDEFINITIONs statement in the LEF file, if the property is of type REAL or INTEGER.

+

For syntax information about the LEF PROPERTYDEFINITIONS statement, see "Property Definitions" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiPropType {
const char propType(char* name) const; }; +
+

Property Definition Examples

+

The following example shows a callback routine with the type lefrPropBeginCbkType, and the class void *. This callback routine marks the beginning of the Property Definition section.

+
+ int propDefBeginCB (lefrCallbackType_e type,
void* dummy,
lefiUserData userData) {
+
+
+ // Check if the type is correct
if (type != lefrPropBeginCbkType) {
printf("Type is not lefrPropBeginCbkType, terminate
        parsing.\n");
return 1;
}
+
+
+ printf("PROPERTYDEFINITIONS\n");
return 0;}
+
+

The following example shows a callback routine with the type lefrPropCbkType, and the class lefiProp. This callback routine will be called for each defined property definition.

+
+ int propDefCB (lefrCallbackType_e type,
lefiProp* propInfo,
lefiUserData userData) {
+
+
+ // Check if the type is correct
if (type != lefrPropCbkType) {
printf("Type is not lefrPropCbkType, terminate
        parsing.\n");
return 1;
}
+
+
+ // Check the object type of the property definition
if (strcmp(propInfo->propType(), "library") == 0)
printf("LIBRARY %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "pin") == 0)
printf("PIN %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "macro") == 0)
printf("MACRO %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "via") == 0)
printf("VIA %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "viarule") == 0)
printf("VIARULE %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "layer") == 0)
printf("LAYER %s ", propInfo->propName());
else if (strcmp(propInfo->propType(), "nondefaultrule") == 0
printf("NONDEFAULTRULE %s ", propInfo->propName());
+
+
+ // Check the property type
if (propInfo->dataType() == 'I')
printf("INTEGER ");
if (propInfo->dataType() == 'R')
printf("REAL ");
if (propInfo->dataType() == 'S')
printf("STRING ");
if (propInfo->dataType() == 'Q')
printf("STRING ");
if (propInfo->hasRange()) {
printf("RANGE %g %g ", propInfo->left(), propInfo-
        >right());
}
if (propInfo->hasNumber())
printf("%g ", propInfo->number());
if (propInfo->hasString())
printf("'%s' ", propInfo->string());
printf("\n");
return 0;}
+
+

The following example shows a callback routine with the type lefrPropEndCbkType, and the class void *. This callback routine marks the end of the Property Definition section.

+
+ int propDefEndCB (lefrCallbackType_e type,
void* dummy,
lefiUserData userData) {
+
+
+ // Check if the type is correct
if (type != lefrPropEndCbkType) {
printf("Type is not lefrPropEndCbkType, terminate
        parsing.\n");
return 1;}
printf("END PROPERTYDEFINITIONS\n");
return 0;} +
+

Same-Net Spacing Class

+

The LEF SPACING routines include the following LEF class:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiSpacing
+
+

lefiSpacing

+

Retrieves data from the SPACING statement in the LEF file.

+

C++ Syntax

+
+ class lefiSpacing {
int hasStack() const;
const char* name1() const;
const char* name2() const;
double distance() const;}; +
+

Same-Net Spacing Examples

+

The following example shows a callback routine with the type lefrSpacingCbkType, and the class lefiSpacing. This callback routine is called for each defined spacing between callback routines with the types lefrSpacingBeginCbkType and lefrSpacingEndCbkType.

+
+ int spacingCB (lefrCallbackType_e type,
lefiSpacing* spacingInfo,
lefiUserData userData) {
+
+
+ // Check if the type is correct
if (type != lefrSpacingCbkType) {
printf("Type is not lefrSpacingCbkType, terminate
        parsing.\n");
return 1;
}
+
+
+      printf("SAMENET %s %s %g ", spacingInfo->name1(),
            spacingInfo->name2(), spacingInfo->distance());
if (spacingInfo->hasStack())
printf("STACK ");
printf("\n");
return 0; } +
+

Site Classes

+

The LEF SITE routines include the following LEF class:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiSite
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiSitePattern
+
+

lefiSite

+

Retrieves data from the SITE statement of the LEF file.

+

For syntax information about the LEF SITE statement, see "Site" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiSite {
const char* name() const;
int hasClass() const;
const char* siteClass() const;
double sizeX() const;
double sizeY() const;
int hasSize() const;
int hasXSymmetry() const;
int hasYSymmetry() const;
int has90Symmetry() const;
int hasRowPattern() const;
int numSites() const;
char* siteName(int index) const;
int siteOrient(int index) const;
char* siteOrientStr(int index) const; }; +
+

lefiSitePattern

+

Retrieves site pattern information from the SITE statement of the LEF file.

+

For syntax information about the LEF SITE statement, see "Site" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ lefiSitePattern {
const char* name() const;
int orient() const;
const char* orientStr() const;
double x() const;
double y() const;
int hasStepPattern () const;
double xStart() const;
double yStart() const;
double xStep() const;
double yStep() const; }; +
+

Site Examples

+

The following example shows a callback routine with the type lefrSiteCbkType, and the class lefiSite.

+
+ int siteCB (lefrCallbackType_e type,
lefiSite* siteInfo,
lefiUserData userData) {
int hasPrtSym = 0;
+
+
+ // Check if the type is correct
if (type != lefrSiteCbkType) {
printf("Type is not lefrSiteCbkType, terminate
        parsing.\n");
return 1;
}
+
+
+      printf("SITE %s\n", siteInfo->name());
if (siteInfo->hasClass())
printf(" CLASS %s\n", siteInfo->siteClass());
if (siteInfo->hasXSymmetry()) {
printf(" SYMMETRY X ");
hasPrtSym = 1; // set the flag that the keyword SYMMETRY
         has written
}
if (siteInfo->hasYSymmetry()) {
if (hasPrtSym)
printf("Y ");
else { // keyword SYMMETRY has not been written yet
printf(" SYMMETRY Y ");
hasPrtSym = 1;
}
}
if (siteInfo->has90Symmetry()) {
if (hasPrtSym)
printf("R90 ");
else {
printf(" SYMMETRY R90 ");
hasPrtSym = 1;
}
}
if (hasPrtSym)
printf("\n");
+
+
+      if (siteInfo->hasSize())
printf(" SIZE %g BY %g\n", siteInfo->sizeX(),
        siteInfo->sizeY());
printf("END %s\n", siteInfo->name());
return 0;} +
+

Units Class

+

The LEF UNITS routines include the following LEF class:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiUnits
+
+

lefiUnits

+

Retrieves data from the UNITS statement of the LEF file. This statement defines the units of measure in LEF.

+

For syntax information about the LEF UNITS statement, see "Units" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiUnits {
int hasDatabase();
int hasCapacitance();
int hasResistance();
int hasTime();
int hasPower();
int hasCurrent();
int hasVoltage();
int hasFrequency(); +
+
+      const char* databaseName();
double databaseNumber();
double capacitance();
double resistance();
double time();
double power();
double current();
double voltage();
double frequency();}; +
+

Units Examples

+

The following example shows a callback routine with the type lefrUnitsCbkType, and the class lefiUnits.

+
+ int unitsCB (lefrCallbackType_e type,
lefiUnits* unitInfo,
lefiUserData userData) {
+
+
+ // Check if the type is correct
if (type != lefrUnitsCbkType) {
printf("Type is not lefrUnitsCbkType, terminate
        parsing.\n");
return 1;}
+
+
+ printf("UNITS\n");
if (unitInfo->hasDatabase())
printf(" DATABASE %s %g\n", unitInfo->databaseName(),
unitInfo->databaseNumber());
if (unitInfo->hasCapacitance())
printf(" CAPACITANCE PICOFARADS %g\n",
unitInfo->capacitance());
if (unitInfo->hasResistance())
printf(" RESISTANCE OHMS %g\n", unitInfo->resistance());
if (unitInfo->hasPower())
printf(" POWER MILLIWATTS %g\n", unitInfo->power());
if (unitInfo->hasCurrent())
printf(" CURRENT MILLIAMPS %g\n", unitInfo->current());
if (unitInfo->hasVoltage())
printf(" VOLTAGE VOLTS %g\n", unitInfo->voltage());
if (unitInfo->hasFrequency())
printf(" FREQUENCY MEGAHERTZ %g\n", unitInfo-
        >frequency());
printf("END UNITS\n");
return 0;}; +
+

Use Min Spacing Class

+

The LEF USEMINSPACING routines include the following LEF class:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiUseMinSpacing
+
+

lefiUseMinSpacing

+

Retrieves data from the USEMINSPACING statement of the LEF file.

+

For syntax information about the LEF USEMINSPACING statement, see "Use Min Spacing" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiUseMinSpacing {
const char* name() const;
int value() const;}; +
+

Via Classes

+

The LEF VIA routines include the following LEF classes:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiVia
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiViaLayer
+
+

lefiVia

+

Retrieves data from the VIA section of the LEF file.

+

For syntax information about the LEF VIA section, see "Via" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiVia {
int hasDefault() const ;
int hasGenerated() const;
int hasForeign() const ;             // optional - for information, see
  // Orientation Codes
int hasForeignPnt() const ;
int hasForeignOrient() const ;
int hasProperties() const ;
int hasResistance() const ;
int hasTopOfStack() const ; +
+
+      int numLayers() const;
char* layerName(int layerNum) const;
int numRects(int layerNum) const;
double xl(int layerNum, int rectNum) const;
double yl(int layerNum, int rectNum) const;
double xh(int layerNum, int rectNum) const;
double yh(int layerNum, int rectNum) const;
int numPolygons(int layerNum) const;
struct lefiGeomPolygon getPolygon(int layerNum, int polyNum) const;
char* name() const ;
double resistance() const ; +
+
+      int numProperties() const ;
char* propName(int index) const;
char* propValue(int index) const;
double propNumber(int index) const;
char propType(int index) const:
int propIsNumber(int index) const;
int propIsString(int index) const;
char* foreign() const;
double foreignX() const;
double foreignY() const;
int foreignOrient() const;
char* foreignOrientStr() const;
int hasViaRule() const;
const char* viaRuleName() const;
double xCutSize() const;
double yCutSize() const;
const char* botMetalLayer() const;
const char* cutLayer() const;
const char* topMetalLayer() const;
double xCutSpacing() const;
double yCutSpacing() const;
double xBotEnc() const;
double yBotEnc() const;
double xTopEnc() const;
double yTopEnc() const;
int hasRowCol() const;
int numCutRows() const;
int numCutCols() const;
int hasOrigin() const;
double xOffset() const;
double yOffset() const;
int hasOffset() const;
double xBotOffset() const;
double yBotOffset() const;
double xTopOffset() const;
double yTopOffset() const;
int hasCutPattern() const;
const char* cutPattern() const;
     double xl,
     double yl,
     double xh,
     double yh);
     lefiGeometries* geom);
int rectColorMask(int layerNum,
     int rectNum);
int polyColorMask(int layerNum,
     int rectNum); }; +
+

lefiViaLayer

+

Retrieves data from the LAYER statement within the VIA section of the LEF file. The members of the C++ class and C structures correspond to elements of the LAYER statement in the VIA section.

+

For syntax information about the LEF VIA section, see "Via" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiViaLayer {
int numRects();
char* name();
double xl(int index);
double yl(int index);
double xh(int index);
double yh(int index);
int numPolygons();
struct lefiGeomPolygon* getPolygon(int index) const;
     double xl,
     double yl
     double xh
     double yn);
     lefiGeometries* geom);
int rectColorMask(int index);
int polyColorMask(int index); }; +
+

Via Examples

+

The following example shows a callback routine with the type lefrViaCbkType, and the class lefiVia.

+
+ int viaCB (lefrCallbackType_e type,
lefiVia* viaInfo,
lefiUserData userData) {
+
+
+ int i, j;
// Check if the type is correct
if (type != lefrViaCbkType) {
printf("Type is not lefrViaCbkType, terminate
        parsing.\n");
return 1;}
printf("VIA %s ", viaInfo->lefiVia::name());
if (viaInfo->hasDefault())
printf("DEFAULT\n");
else
printf("\n");
if (viaInfo->hasTopOfStack())
printf(" TOPOFSTACKONLY\n");
if (viaInfo->hasForeign()) {
printf(" FOREIGN %s ", viaInfo->foreign());
if (viaInfo->hasForeignPnt()) {
printf("( %g %g ) ", viaInfo->foreignX(),
                viaInfo->foreignY());
if (viaInfo->hasForeignOrient())
printf("%s ", orientStr(viaInfo->foreignOrient()));
}
printf("\n");
}
if (viaInfo->hasProperties()) {
printf(" PROPERTY ");
for (i = 0; i < viaInfo->numProperties(); i++) {
printf("%s ", viaInfo->propName(i));
if (viaInfo->propIsNumber(i))
printf("%g ", viaInfo->propNumber(i));
if (viaInfo->propIsString(i))
printf("%s ", viaInfo->propValue(i));
}
printf("\n");
}
if (viaInfo->hasResistance())
printf(" RESISTANCE %g\n", viaInfo->resistance());
if (viaInfo->numLayers() > 0) {
for (i = 0; i < viaInfo->numLayers(); i++) {
printf(" LAYER %s\n", viaInfo->layerName(i));
for (j = 0; j < viaInfo->numRects(i); j++)
printf(" RECT ( %g %g ) ( %g %g )\n",
viaInfo->xl(i, j), viaInfo->yl(i, j),
viaInfo->xh(i, j), viaInfo->yh(i, j));
}
}
printf("END %s\n", viaInfo->name());
return 0;}
+
+

Via Rule Classes

+

The LEF VIARULE routines include the following LEF classes:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiViaRule
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefiViaRuleLayer
+
+

lefiViaRule

+

Retrieves data from the VIARULE and VIARULE GENERATE statements of the LEF file.

+

For syntax information about the LEF VIARULE and VIARULE GENERATE statements, see "Via Rule," and "Via Rule Generate" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiViaRule {
int hasGenerate() const;
int hasDefault() const;
char* name() const; +
+
+      int numLayers() const;
lefiViaRuleLayer* layer(int index); +
+
+      int numVias() const;
char* viaName(int index) const; +
+
+      int numProps() const;
const char* propName(int index) const;
const char* propValue(int index) const;
double propNumber(int index) const;
const char propType(int index) const;
int propIsNumber(int index) const;
int propISString(int index) const; }; +
+

lefiViaRuleLayer

+

Retrieves data from the LAYER statement within the VIARULE and VIARULE GENERATE statements of the LEF file.

+

For syntax information about the LEF VIARULE and VIARULE GENERATE statements, see "Via Rule," and "Via Rule Generate" in the LEF/DEF Language Reference.

+

C++ Syntax

+
+ class lefiViaRuleLayer {
int hasDirection() const;
int hasEnclosure() const;
int hasWidth() const;
int hasResistance() const;
int hasOverhang() const;
int hasMetalOverhang() const;
int hasSpacing() const;
int hasRect() const; +
+
+      char* name() const;
int isHorizontal() const;
int isVertical() const;
double enclosureOverhang1() const;
double enclosureOverhang2() const;
double widthMin() const;
double widthMax() const;
double overhang() const;
double metalOverhang() const;
double resistance() const;
double spacingStepX() const;
double spacingStepY() const;
double xl() const;
double yl() const;
double xh() const;
double yh() const; }; +
+

Via Rule Examples

+

The following example shows a callback routine with the type lefrViaRuleCbkType, and the class lefiViaRule. This example also shows how to retrieve data from the lefiViaRuleLayer class.

+
+ int viaRuleCB (lefrCallbackType_e type,
lefiViaRule* viaRuleInfo,
lefiUserData userData) {
int numLayers, numVias, i;
lefiViaRuleLayer* vLayer;
printf("VIARULE %s", viaRuleInfo->name());
if (viaRuleInfo->hasGenerate())
printf(" GENERATE\n");
else
printf("\n");
numLayers = viaRuleInfo->numLayers();
    // If numLayers == 2, it is VIARULE without GENERATE and has
       // via name. If numLayers == 3, it is VIARULE with GENERATE, and
       // the 3rd layer is cut.
for (i = 0; i < numLayers; i++) {
vLayer = viaRuleInfo->layer(i);
printf(" LAYER %s\n", vLayer->name());
if (vLayer->hasDirection()) {
if (vLayer->isHorizontal())
printf(" DIRECTION HORIZONTAL\n");
if (vLayer->isVertical())
printf(" DIRECTION VERTICAL\n");
}
if (vLayer->hasWidth())
printf(" WIDTH %g TO %g\n", vLayer->widthMin(),
vLayer->widthMax());
if (vLayer->hasResistance())
printf(" RESISTANCE %g\n", vLayer->resistance());
if (vLayer->hasOverhang())
printf(" OVERHANG %g\n", vLayer->overhang());
if (vLayer->hasMetalOverhang())
printf(" METALOVERHANG %g\n", vLayer-
            >metalOverhang());
if (vLayer->hasSpacing())
printf(" SPACING %g BY %g\n", vLayer->spacingStepX(),
vLayer->spacingStepY());
if (vLayer->hasRect())
printf(" RECT ( %g %g ) ( %g %g )\n", vLayer->xl(),
vLayer->yl(), vLayer->xh(), vLayer->yh()); }

if (numLayers == 2) { // should have vianames
numVias = viaRuleInfo->numVias();
if (numVias == 0)
printf("Should have via names in VIARULE.\n");
else {
for (i = 0; i < numVias; i++)
printf(" VIA %s\n", viaRuleInfo->viaName(i));
}
}
printf("END %s\n", viaRuleInfo->name());
return 0;}
+
+
+   +
+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/ch5LEFwritercallback.html b/lefdef/doc/lefapi/ch5LEFwritercallback.html new file mode 100644 index 00000000..060149ef --- /dev/null +++ b/lefdef/doc/lefapi/ch5LEFwritercallback.html @@ -0,0 +1,555 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

5 

+

LEF Writer Callback Routines

+

You can use the Cadence® Library Exchange Format (LEF) writer with callback routines, or you can call one writer function at a time.

+

When you use callback routines, the writer creates a LEF file in the sequence shown in the following table. The writer also checks which sections are required for the file. If you do not provide a callback for a required section, the writer uses a default routine. If no default routine is available for a required section, the writer generates an error message.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Section +

+
+

+ Required +

+
+

+ Default Available +

+
+

Version

+
+

no

+
+

no

+
+

Bus Bit Characters

+
+

no

+
+

no

+
+

Divider Character

+
+

no

+
+

no

+
+

Units

+
+

no

+
+

no

+
+

Property Definitions

+
+

no

+
+

no

+
+

Layer

+
+

yes

+
+

no

+
+

Via

+
+

yes

+
+

no

+
+

Via Rule

+
+

yes

+
+

no

+
+

Nondefault Rules

+
+

no

+
+

no

+
+

Spacing

+
+

no

+
+

no

+
+

Site

+
+

yes

+
+

no

+
+

Macro

+
+

yes

+
+

no

+
+

Extensions

+
+

no

+
+

no

+
+

End Library

+
+

yes

+
+

no

+
+

Callback Function Format

+

All callback functions use the following format.

+
+ int UserCallbackFunctions(
lefwCallbackType_e callBackType,
lefiUserData data) +
+

Callback Type

+

The callBackType argument is a list of objects that contains a unique number assignment for each callback from the parser. This list allows you to use the same callback routine for different types of LEF data.

+

User Data

+

The data argument is a four-byte data item that you set. The LEF writer contains only user data. The user data is most often set to a pointer to the design data so that it can be passed to the routines.

+

Callback Types and Setting Routines

+

The following table lists the LEF writer callback-setting routines and the associated callback types.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF
Information
+

+
+

+ Setting Routine +

+
+

+ Callback Types +

+
+

Bus Bit
Characters

+
+

void lefwSetBusBitCharsCbk
(lefwVoidCbkFnType);

+
+

lefwBusBitCharsCbkType

+
+

Clearance Measure

+
+

void lefwSetClearanceMeasureCbk
(lefwVoidCbkFnType);

+
+

lefwClearanceMeasureCbkType

+
+

Divider Character

+
+

void lefwSetDividerCharCbk
(lefwVoidCbkFnType);

+
+

lefwDividerCharCbkType

+
+

Extensions

+
+

void lefwSetExtCbk
(lefwVoidCbkFnType);

+
+

lefwExtCbkType

+
+

End Library

+
+

void lefwSetEndLibCbk
(lefwVoidCbkFnType);

+
+

lefwEndLibCbkType

+
+

Layer

+
+

void lefwSetLayerCbk
(lefwVoidCbkFnType);

+
+

lefwLayerCbkType

+
+

Macro

+
+

void lefwSetMacroCbk
(lefwVoidCbkFnType);

+
+

lefwMacroCbkType

+
+

Manufacturing Grid

+
+

void lefwSetManufacturingGridCbk
(lefwVoidCbkFnType);

+
+

lefwManufacturingGridCbkType

+
+

Nondefault Rule

+
+

void lefwSetNonDefaultCbk
(lefwVoidCbkFnType);

+
+

lefwNonDefaultCbkType

+
+

Property
Definitions

+
+

void lefwSetPropDefCbk
(lefwVoidCbkFnType);

+
+

lefwPropDefCbkType

+
+

Site

+
+

void lefwSetSiteCbk
(lefwVoidCbkFnType);

+
+

lefwSiteCbkType

+
+

Spacing

+
+

void lefwSetSpacingCbk
(lefwVoidCbkFnType);

+
+

lefwSpacingCbkType

+
+

Units

+
+

void lefwSetUnitsCbk
(lefwVoidCbkFnType);

+
+

lefwUnitsCbkType

+
+

Use Min Spacing

+
+

void lefwSetUseMinSpacingCbk
(lefwVoidCbkFnType);

+
+

lefwUseMinSpacingCbkType

+
+

Version

+
+

void lefwSetVersionCbk
(lefwVoidCbkFnType);

+
+

lefwVersionCbkType

+
+

Via

+
+

void lefwSetViaCbk
(lefwVoidCbkFnType);

+
+

lefwViaCbkType

+
+

Via Rule

+
+

void lefwSetViaRuleCbk
(lefwVoidCbkFnType);

+
+

lefwViaRuleCbkType

+
+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/ch6LEFwriter.html b/lefdef/doc/lefapi/ch6LEFwriter.html new file mode 100644 index 00000000..3b5860d8 --- /dev/null +++ b/lefdef/doc/lefapi/ch6LEFwriter.html @@ -0,0 +1,4693 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

6 

+

LEF Writer Routines

+

You can use the Cadence® Library Exchange Format (LEF) writer routines to create a program that outputs a LEF file. The LEF writer routines correspond to the sections in the LEF file. This chapter describes the routines listed below that you need to write a particular LEF section.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Routines +

+
+

+ LEF File Sections +

+
+

LEF Writer Setup and Control

+
+

Initialization and global variables

+
+

Bus Bit Characters

+
+

BUSBITCHARS statement

+
+

Clearance Measure

+
+

CLEARANCEMEASURE statement

+
+

Divider Character

+
+

DIVIDERCHAR statement

+
+

Extensions

+
+

Extensions statement

+
+

Layer (Cut, Masterslice, Overlap, Implant)

+
+

LAYER sections about cut, masterslice, overlap, and implant layers

+
+

Layer (Routing)

+
+

LAYER section about routing layers

+
+

Macro

+
+

MACRO section

+
+
Macro Obstruction
+
+

OBS section within a MACRO section

+
+
Macro Pin
+
+

PIN section within a MACRO section

+
+
Macro Pin Port
+
+

PORT section within a PIN section

+
+

Manufacturing Grid

+
+

MANUFACTURINGGRID statement

+
+

Maximum Via Stack

+
+

MAXVIASTACK statement

+
+

Nondefault Rule

+
+

NONDEFAULTRULE section

+
+

Property

+
+

PROPERTY statement in a VIA, VIARULE, LAYER, MACRO or NONDEFAULTRULE section

+
+

Property Definitions

+
+

PROPERTYDEFINTIONS statement

+
+

Same-Net Spacing

+
+

SPACING statement

+
+

Site

+
+

SITE statement

+
+

Units

+
+

UNITS statement

+
+

Use Min Spacing

+
+

USEMINSPACING statement

+
+

Version

+
+

VERSION statement

+
+

Via

+
+

VIA section

+
+

Via Rule

+
+

VIARULE statement

+
+

Via Rule Generate

+
+

VIARULEGENERATE statement

+
+

LEF Writer Setup and Control

+

The LEF writer setup and control routines initialize the reader and set global variables that are used by the reader. You must begin and end a LEF file with the lefwInit and lefwEnd routines. All other routines must be used between these two routines. The remaining routines described in this section are provided as utilities. For examples of the routines described, see "Setup Examples".

+

All routines return 0 if successful.

+

lefwInit

+

Initializes the LEF writer. This routine must be used first.

+

Syntax

+
+ int lefwInit(
FILE* file) +
+

Arguments

+

+ + file +

+
Specifies the name of the LEF file to create.
+

lefwEnd

+

Ends the LEF file. This routine must be used last. This routine does not require any arguments.

+

Syntax

+
+ int lefwEnd() +
+

lefwCurrentLineNumber

+

Returns the line number of the last line written to the LEF file. This routine does not require any arguments.

+

Syntax

+
+ int lefwCurrentLineNumber() +
+

lefwNewLine

+

Writes a blank line. This routine does not require any arguments.

+

Syntax

+
+ int lefwNewLine() +
+

lefwPrintError

+

Prints the return status of the lefw* routines.

+

Syntax

+
+ void lefwPrintError(
int status) +
+

Arguments

+

+ + status +

+
Specifies the non-zero integer returned by the LEF writer routines.
+

Setup Examples

+

The following examples show how to set up the writer. There are two ways to use the LEF writer:

+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
You write callback routines for each section, and the writer calls your callback routines in the sequence based on the LEF/DEF Language Reference. If a section is required, but you do not provide a callback routine, the writer issues a warning. If there is a default routine, the writer invokes the default routine with a message attached.
+
+

This manual includes examples with and without callback routines.

+

The following example uses the writer without callbacks.

+
+ int setupRoutine() {
FILE* f;
int res;
...
// Open the lef file for the writer to write.
if ((f = fopen("lefOutputFileName","w")) == 0) {
printf("Couldn't open output file '%s'\n",
"lefOutputFileName");
return(2);
}
// Initialize the writer. This routine has to call first. Call this
// routine instead of lefwInitCbk(f) if you are not using the
// callback routines.
res = lefwInit(f);
...
res = lefwEnd();
...
fclose(f);
return 0;
}
+
+

The following example uses the writer with callbacks.

+
+ int setupRoutine() {
FILE* f;
int res;
int userData = 0x01020304;
...
// Open the lef file for the writer to write.
    if ((f = fopen("lefOutputFileName","w")) == 0) {
    printf("Couldn't open output file '%s'\n",
    "lefOutputFileName");
    return(2);
}
// Initialize the writer. This routine has to call first. Call this
// routine instead of lefwInit() if you are using the writer with
// callbacks.
res = lefwInitCbk(f);
// Set the user callback routines
    lefwSetAntennaCbk(antennaCB);
    lefwSetBusBitCharsCbk(busBitCharsCB);
    lefwSetCaseSensitiveCbk(caseSensCB);
    lefwSetCorrectionTableCbk(correctTableCB);
    lefwSetEndLibCbk(endLibCB);
    ...
// Invoke the parser
    res = lefrWrite(f, "lefInputFileName", (void*)userData);
    if (res != 0) {
    printf("LEF writer returns an error\n");
    return(2);
}
    fclose(f);
    return 0;
} +
+

The following example shows how to use the callback routine to mark the end of the LEF file. The type is lefwEndLibCbkType.

+
+ #define CHECK_RES(res) \
if (res) { \
lefwPrintError(res); \
return(res); \
}
int endLibCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwEndLibCbkType) {
printf("Type is not lefwEndLibCbkType, terminate
        writing.\n");
return 1;
}
res = lefwEnd();
CHECK_RES(res);
return 0;
} +
+

Bus Bit Characters

+

The Bus Bit Characters routine writes a LEF BUSBITCHARS statement. The BUSBITCHARS statement is optional and can be used only once in a LEF file. For syntax information about the LEF BUSBITCHARS statement, see "Bus Bit Characters" in the LEF/DEF Language Reference.

+

The BUSBITCHARS statement is part of the LEF file header (which also includes the VERSION, and DIVIDERCHAR statements). If the statements in the header section are not defined, many applications assume default values for them. However, the default values are not formally part of the language definition; therefore you cannot be sure that the same assumptions are used in all applications. You should always explicitly define these values.

+

This routine returns 0 if successful.

+

lefwBusBitChars

+

Writes a BUSBITCHARS statement.

+

Syntax

+
+ int lefwBusBitChars(
const char* busBitChars) +
+

Arguments

+

+ + busBitChars +

+
Specifies the pair of characters used to specify bus bits when LEF names are mapped to or from other databases. The characters must be enclosed in double quotation marks.
+

Bus Bit Characters Example

+

The following example shows a callback routine with the type lefwBusBitCharsCbkType.

+
+ int busBitCharsCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwBusBitCharsCbkType) {
printf("Type is not lefwBusBitCharsCbkType, terminate
        writing.\n");
return 1;
}
res = lefwBusBitChars("<>");
CHECK_RES(res);
return 0;} +
+

Clearance Measure

+

The Clearance Measure routine writes a LEF CLEARANCEMEASURE statement. The CLEARANCEMEASURE statement is optional and can be used only once in a LEF file. For syntax information about the LEF CLEARANCEMEASURE section, see "Clearance Measure" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

lefwClearanceMeasure

+

Writes a CLEARANCEMEASURE statement.

+

Syntax

+
+ int lefwClearanceMeasure(
const char* type) +
+

Arguments

+

+ + type +

+
Specifies the type of clearance spacing that will be applied to obstructions (blockages) and pins in cells.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

    

+
+

MAXXY

+
+

Uses the larger x and y distances for spacing between objects.

+
+

      

+
+

EUCLIDEAN

+
+

Uses euclidean distance for spacing between objects.

+
+

Divider Character

+

The Divider Character routine writes a LEF DIVIDERCHAR statement. The DIVIDERCHAR statement is optional and can be used only once in a LEF file. For syntax information about the LEF DIVIDERCHAR statement, see "Divider Character" in the LEF/DEF Language Reference.

+

The DIVIDERCHAR statement is part of the LEF file header (which also includes the VERSION, and BUSBITCHARS statements). If the statements in the header section are not defined, many applications assume default values for them. However, the default values are not formally part of the language definition; therefore you cannot be sure that the same assumptions are used in all applications. You should always explicitly define these values.

+

This routine returns 0 if successful.

+

lefwDividerChar

+

Writes a DIVIDERCHAR statement.

+

Syntax

+
+ int lefwDividerChar(
const char* dividerChar) +
+

Arguments

+

+ + dividerChar +

+
Specifies the character used to express hierarchy when LEF names are mapped to or from other databases. The character must be enclosed in double quotation marks.

Note:
If the divider character appears in a LEF name as a regular character, you must use a backslash (\) before the character to prevent the LEF reader from interpreting the character as a hierarchy delimiter.
+

Divider Character Examples

+

The following example shows a callback routine with the type lefwDividerCharCbkTyp.

+
+ int dividerCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwDividerCharCbkType) {
printf("Type is not lefwDividerCharCbkType, terminate
        writing.\n");
return 1;
}
res = lefwDividerChar(":");
CHECK_RES(res);
res = lefwNewLine(); // add an empty line
CHECK_RES(res);
return 0;} +
+

Extensions

+

Extensions routines write a LEF BEGINEXT statement. The BEGINEXT statement is optional and can be used more than once in a LEF file.

+

Extensions routines let you add customized syntax to the LEF file that can be ignored by tools that do not use that syntax. You can also use extensions to add new syntax not yet supported by your version of LEF, if you are using version 5.1 or later. For syntax information about the LEF EXTENSIONS section, see "Extensions" in the LEF/DEF Language Reference.

+

You must begin and end a LEF BEGINEXT statement with the lefwStartBeginext and lefwEndBeginext routines. All LEF writer routines that define EXTENSIONS routines must be included between these routines.

+

For examples of the routines described here, see "Extensions Examples".

+

All routines return 0 if successful.

+

lefwStartBeginext

+

Starts the EXTENSIONS statement using the specified tag.

+

Syntax

+
+ int lefwStartBeginext(
const char* tag) +
+

Arguments

+

+ + tag +

+
Identifies the extension block. The tag must be enclosed in double quotation marks.
+

lefwEndBeginext

+

Writes the ENDEXT statement.

+

Syntax

+
+ int lefwEndBeginext() +
+

lefwBeginextCreator

+

Writes a CREATOR statement. The CREATOR statement is optional and can be used only once in an EXTENSIONS statement.

+

Syntax

+
+ int lefwBeginextCreator(
const char* creator) +
+

Arguments

+

+ + creator +

+
Specifies a string value that defines the creator value.
+

lefwBeginextDate

+

Writes a DATE statement that specifies the current system time and date. The DATE statement is optional and can be used only once in an EXTENSIONS statement.

+

Syntax

+
+ int lefwBeginextDate() +
+

lefwBeginextRevision

+

Writes a REVISION statement. The REVISION statement is optional and can be used only once in an EXTENSIONS statement.

+

Syntax

+
+ int lefwBeginextRevision(
int vers1,
int vers2) +
+

Arguments

+

+ + vers1, vers2 +

+
Specify the values used for the revision number string.
+

lefwBeginextSyntax

+

Adds customized syntax to the LEF file. This routine is optional and can be used more than once in an EXTENSIONS statement.

+

Syntax

+
+ int lefwBeginextSyntax(
const char* title,
const char* string) +
+

Arguments

+

+ + title, string +

+
Specify any values you need.
+

Extensions Examples

+

The following example shows a callback routine with the type lefwExtCbkType. This example only shows the usage of some functions related to array.

+
+ int extCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwExtCbkType) {
printf("Type is not lefwExtCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartBeginext("SIGNATURE");
CHECK_RES(res);
res = lefwBeginextCreator("CADENCE");
CHECK_RES(res);
res = lefwBeginextDate();
CHECK_RES(res);
res = lefwEndBeginext();
CHECK_RES(res);
return 0;} +
+

Layer (Cut, Masterslice, Overlap, Implant)

+

The following layer routines write LAYER sections about cut, masterslice, overlap, and implant layers. At least one LAYER section is required in a LEF file, and more than one LAYER section is generally required to describe a layout. For syntax information about the LAYER sections for cut, masterslice, overlap, and implant layers, see "Layer (Cut)", "Layer (Masterslice or Overlap)", and "Layer (Implant)" in the LEF/DEF Language Reference.

+

You must begin and end a LEF LAYER section with the lefwStartLayer and lefwEndLayer routines. You create one LAYER section for each layer you need to define.

+

For examples of the routines described here, see "Layer Examples".

+

In addition to the routines described in this section, you can include a PROPERTY statement in a LAYER section. For more information about these routines, see "Property".

+

All routines return 0 if successful.

+

Defining Masterslice and Overlap Layers

+

To define a masterslice or overlap layer, you only need to use the lefwStartLayer and lefwEndLayer routines. No additional routines are required to define these layers.

+

Defining Cut Layers

+

To define a cut layer, you must use the lefwLayerCutSpacing routine to start the spacing and the lefwLayerCutSpacingEnd routine to end the spacing. These must be used between the lefwStartLayer and lefwEndLayer routines. Any other routines are optional and must be included after the lefwLayerCutSpacing routine.

+

Defining Implant Layers

+

To define an implant layer, you must specify the lefwLayerWidth routine between the lefwStartLayer and lefwEndLayer routines.

+

lefwStartLayer

+

Starts the LAYER section. Each cut, masterslice, overlap, and implant layer must be defined by a separate lefwStartLayer, lefwEndLayer routine pair.

+

Syntax

+
+ int lefwStartLayer(
const char* layerName,
const char* type) +
+

Arguments

+

+ + layerName +

+
Specifies the name of the layer being defined.
+

+ + type +

+
Specifies the type of layer being defined.
Value: CUT, MASTERSLICE, OVERLAP, or IMPLANT
+

lefwEndLayer

+

Ends the LAYER section for the specified layer.

+

Syntax

+
+ int lefwEndLayer(
const char* layerName) +
+

lefwLayerACCurrentDensity

+

Writes an ACCURRENTDENSITY statement for a cut layer. The ACCURENTDENSITY statement is optional, and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerACCurrentDensity(
const char* type,
double value) +
+

Arguments

+

+ + type +

+
Specifies one of the AC current limits, PEAK, AVERAGE, or RMS.
+

+ + value +

+
Specifies a maximum current limit for the layer in milliamps per square micron. If you specify 0, you must call the lefwLayerACFrequency and lefwLayerACTableEntries routines.
+

lefwLayerACCutarea

+

Writes a CUTAREA statement for a cut layer. The CUTAREA statement is optional if you specify a FREQUENCY statement, and can be used only once in an ACCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerACCutarea(
int numCutareas,
double* cutareas) +
+

Arguments

+

+ + numCutareas +

+
Specifies the number of cut area values.
+

+ + cutareas +

+
Specifies the cut area values, in square microns. If you specify only one cut area value, there is no cut area dependency, and the table entries are assumed to apply to all cut areas.
+

lefwLayerACFrequency

+

Writes a FREQUENCY statement for a cut layer. The FREQUENCY statement is required if you specify a value of 0 in the lefwLayerACCurrentDensity routine, and can be used only once in an ACCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerACFrequency(
int numFrequency,
double* frequency) +
+

Arguments

+

+ + numFrequency +

+
Specifies the number of frequency values.
+

+ + frequency +

+
Specifies the frequency values, in megahertz. If you specify only one frequency value, there is no frequency dependency, and the table entries are assumed to apply to all frequencies.
+

lefwLayerACTableEntries

+

Writes a TABLEENTRIES statement for a cut layer. The TABLENTRIES statement is required if you specify a FREQUENCY statement, and can be used only once in an ACCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerACTableEntries(
int numEntries,
double* entries) +
+

Arguments

+

+ + numEntries +

+
Specifies the number of table entry values.
+

+ + entries +

+
Specifies the maximum cut area for each frequency and cut area pair specified in the FREQUENCY and CUTAREA statements, in milliamps per square micron.
+

lefwLayerAntennaAreaFactor

+

Writes an ANTENNAAREAFACTOR statement for a cut layer. The ANTENNAAREAFACTOR statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaAreaFactor(
double value
const char* diffUseOnly) +
+

Arguments

+

+ + value +

+
Specifies the adjust or multiply factor for the antenna metal calculation.
+

+ + diffUseOnly +

+
Optional argument that specifies the current antenna factor should be used only when the corresponding layer is connected to the diffusion. Specify NULL to ignore this argument.
+

lefwLayerAntennaAreaRatio

+

Writes an ANTENNAAREARATIO statement for a cut layer. The ANTENNAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the antenna ratio, using the bottom area of the metal wire that is not connected to the diffusion diode.
+

lefwLayerAntennaCumAreaRatio

+

Writes an ANTENNACUMAREARATIO statement for a cut layer. The ANTENNACUMAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the cumulative antenna ratio, using the bottom area of the metal wire that is not connected to the diffusion diode.
+

lefwLayerAntennaCumDiffAreaRatio

+

Writes an ANTENNACUMDIFFAREARATIO statement for a cut layer. The ANTENNACUMDIFFAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaCumDiffAreaRatioPWL in the same LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumDiffAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the cumulative antenna ratio, using the bottom area of the metal wire that is connected to the diffusion diode.
+

lefwLayerAntennaCumDiffAreaRatioPwl

+

Writes an ANTENNACUMDIFFAREARATIOPWL statement for a cut layer. The ANTENNACUMDIFFAREARATIOPWL statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaCumDiffAreaRatio in the same LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumDiffAreaRatioPwl(
int numPwls,
double diffusions,
double ratios) +
+

Arguments

+

+ + numPwls +

+
Specifies the number of diffusion-ratio pairs.
+

+ + diffusions +

+
Specifies the diffusion values.
+

+ + ratios +

+
Specifies the ratio values.
+

lefwLayerAntennaDiffAreaRatio

+

Writes an ANTENNADIFFAREARATIO statement for a cut layer. The ANTENNADIFFAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaDiffAreaRatioPWL in the same LAYER section.

+

Syntax

+
+ int lefwAntennaDiffAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the antenna ratio, using the bottom area of the wire that is connected to the diffusion diode.
+

lefwLayerAntennaDiffAreaRatioPwl

+

Writes an ANTENNADIFFAREARATIOPWL statement for a cut layer. The ANTENNADIFFAREARATIOPWL statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaDiffAreaRatio in the same LAYER section.

+

Syntax

+
+ int lefwAntennaDiffAreaRatioPWL(
int numPwls,
double diffusions,
double ratios) +
+

Arguments

+

+ + numPwls +

+
Specifies the number of diffusion-ratio pairs.
+

+ + diffusions +

+
Specifies the diffusion values.
+

+ + ratios +

+
Specifies the ratio values.
+

lefwLayerAntennaModel

+

Writes an ANTENNAMODEL statement for a cut layer. The ANTENNAMODEL statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaModel(
const char* oxide) +
+

Arguments

+

+ + oxide +

+
Specifies the oxide model for the layer. Each model can be specified once per layer. If you specify an ANTENNAMODEL statement, that value affects all ANTENNA* statements for the layer that follow it until you specify another ANTENNAMODEL statement.
Value: OXIDE1, OXIDE2, OXIDE3, or OXIDE4

Note: OXIDE1 and OXIDE2 are currently supported. If you specify OXIDE3 or OXIDE4, current tools parse and ignore them.
+

lefwLayerArraySpacing

+

Writes an ARRAYSPACING statement for a cut layer. The ARRAYSPACING statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerArraySpacing(
int longArray,
double viaWidth,
double cutSpacing,
int numArrayCut,
int* arrayCuts,
double* arraySpacings) +
+

Arguments

+

+ + longArray +

+
Optional argument that indicates that the via can use N x M cut arrays, where N = arrayCuts and M can be any value, including one that is larger than N. Specify 0 to ignore this argument.
+

+ + viaWidth +

+
Optional argument that specifies the via width. The array spacing rules only apply when the via metal width is greater than or equal to viaWidth. Specify 0 to ignore this argument.
+

+ + cutSpacing +

+
Specifies the edge-of-cut to edge-of-cut spacing inside one cut array.
+

+ + numArrayCuts +

+
Specifies the number of arrayCuts and arraySpacings pairs provided.
+

+ + arrayCuts +

+
Specifies the size of the cut arrays.
A large via array with a size greater than or equal to
arrayCuts x arrayCuts in both dimensions must use N x N cut arrays (where N = arrayCuts) separated from other cut arrays by a distance greater than or equal to arraySpacing.
If you specify multiple arrayCuts and arraySpacings, the arrayCuts values must be specified in increasing order.
+

+ + arraySpacings +

+
Specifies the spacing between the cut arrays.
+

lefwLayerCutSpacing

+

Starts a SPACING statement for a cut layer. Call lefwLayerCutSpacingEnd to end each spacing.

+

The SPACING statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ int lefwLayerCutSpacing(
double spacing) +
+

Arguments

+

+ + spacing +

+
Specifies the minimum spacing allowed between via cuts, in microns.
+

lefwLayerCutSpacingAdjacent

+

Writes an ADJACENTCUTS statement for a SPACING statement for a cut layer. The ADJACENTCUTS statement is optional. You can specify only one of the following statements per spacing: LAYER, ADJACENTCUTS, AREA, or PARALLELOVERLAP.

+

Syntax

+
+ int lefwLayerCutSpacingAdjacent(
int viaCuts,
double distance,
int stack) +
+

Arguments

+

+ + viaCuts +

+
Optional argument that specifies the number of via cuts--either 2, 3, or 4.
+

+ + distance +

+
Specifies the distance between via cuts, in microns.
+

+ + stack +

+
Optional argument that sets the EXCEPTSAMEPGNET keword for the spacing. If this keyword is set, the ADJACENTCUTS rule does not apply between cuts if they are on the same net, and are on a power and ground net.
+

lefwLayerCutSpacingArea

+

Writes an AREA statement for a SPACING statement for a cut layer. The AREA statement is optional. You can specify only one of the following statements per spacing: LAYER, ADJACENTCUTS, AREA, or PARALLELOVERLAP.

+

Syntax

+
+ int lefwLayerCutSpacingArea(
double cutArea) +
+

Arguments

+

+ + cutArea +

+
Specifies the cut area. Any cut with an area equal to or greater than this number requires additional spacing.
+

lefwLayerCutSpacingCenterToCenter

+

Writes a CENTERTOCENTER statement for a SPACING statement for a cut layer. The CENTERTOCENTER statement is optional.

+

Syntax

+
+ int lefwLayerCutSpacingCenterToCenter() +
+

lefwLayerCutSpacingEnd

+

Ends a SPACING statement for a cut layer.

+

Syntax

+
+ int lefwLayerCutSpacingEnd() +
+

lefwLayerCutSpacingLayer

+

Writes a LAYER statement for a SPACING statement for a cut layer. The LAYER statement is optional. You can specify only one of the following statements per spacing: LAYER, ADJACENTCUTS, AREA, or PARALLELOVERLAP.

+

Syntax

+
+ int lefwLayerCutSpacingLayer(
const char* name2,
int stack) +
+

Arguments

+

+ + name2 +

+
Specifies the second layer name.
+

+ + stack +

+
Optional argument indicating that same-net cuts on two different layers can be stacked if they are exactly aligned; otherwise, the cuts must have cutSpacing between them. Specify 0 to ignore this argument.
+

lefwLayerCutSpacingParallel

+

Writes a PARALLELOVERLAP statement for a SPACING statement for a cut layer. The PARALLELOVERLAP statement is optional. You can specify only one of the following statements per spacing: LAYER, ADJACENTCUTS, AREA, or PARALLELOVERLAP.

+

Syntax

+
+ int lefwLayerCutSpacingParallel() +
+

lefwLayerCutSpacingSamenet

+

Writes a SAMENET statement for a SPACING statement for a cut layer. The SAMENET statement is optional.

+

Syntax

+
+ int lefwLayerCutSpacingSameNet() +
+

lefwLayerCutSpacingTableOrtho

+

Writes a SPACINGTABLE ORTHOGONAL statement for a cut layer. The SPACINGTABLE ORTHOGONAL statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerCutSpacingTableOrtho(
int numSpacing,
double* cutWithins,
double* orthoSpacings) +
+

Arguments

+

+ + numSpacing +

+
Specifies the number of cutWithins and orthoSpacings pairs provided.
+

+ + cutWithins +

+
Specifies the distance between cuts, in microns.
If two cuts have parallel overlap greater than
0 and are less than cutWithin distance from each other, then any other cuts in an orthogonal direction must be equal to or greater than orthoSpacings.
+

+ + orthoSpacings +

+
Specifies the orthogonal spacing, in microns.
+

lefwLayerDCCurrentDensity

+

Writes the DCCURRENTDENSITY statement for a cut layer. The DCCURENTDENSITY statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerDCCurrentDensity(
const char* type,
double value) +
+

Arguments

+

+ + type +

+
Specifies the DC current limit, AVERAGE.
+

+ + value +

+
Specifies a current limit for the layer in milliamps per square microns. If you specify 0, you must call the lefwLayerDCCutarea and lefwLayerDCTableEntries routines.
+

lefwLayerDCCutarea

+

Writes a CUTAREA statement for a cut layer. The CUTAREA statement is required if you specify a value of 0 in the lefwLayerDCCurrentDensity routine, and can be used only once in a DCCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerDCCutarea(
int numCutareas,
double* cutareas) +
+

Arguments

+

+ + numCutareas +

+
Specifies the number of cut area values.
+

+ + cutareas +

+
Specifies the cut area values, in square microns.
+

lefwLayerDCTableEntries

+

Writes a TABLEENTRIES statement for a cut layer. The TABLENTRIES statement is required if you specify a CUTAREA statement, and can be used only once in a DCCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerDCTableEntries(
int numEntries,
double* entries) +
+

Arguments

+

+ + numEntries +

+
Specifies the number of table entry values.
+

+ + entries +

+
Specifies the maximum current density for each specified cut area, in milliamps per square micron.
+

lefwLayerEnclosure

+

Writes an ENCLOSURE statement for a cut layer. The ENCLOSURE statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ lefwLayerEnclosure(
const char* location,
double overhang1,
double overhang2,
double width) +
+

Arguments

+

+ + location +

+
Optional argument that specifies whether the overhang is required on the routing layers above or below the cut layer. Specify "" to ignore this argument.
Value: ABOVE or BELOW
+

+ + overhang1 overhang2 +

+
Specifies that any rectangle from this cut layer requires the routing layers to overhang by overhang1 on two opposite sides, and by overhang2 on the other two opposite sides.
+

+ + width +

+
Optional argument that specifies that the enclosure rule only applies when the width of the routing layer is greater than or equal to width. Specify 0 to ignore this argument.
+

lefwLayerEnclosureLength

+

Writes an ENCLOSURE statement with a LENGTH keyword for a cut layer. This routine lets you specify a minimum length instead of the width. The ENCLOSURE statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ int lefwLayerEnclosureLength(
const char* location,
double overhang1,
double overhang2,
double minLength) +
+

Arguments

+

+ + location +

+
Optional argument that specifies whether the overhang is required on the routing layers above or below the cut layer. If you don't specify this argument, the rule applies to both adjacent routing layers; specify "" to ignore this argument.
Value: ABOVE or BELOW
+

+ + overhang1 overhang2 +

+
Overhange values. Any rectangle from this cut layer requires the routing layers to overhang by overhang1 on two opposite sides, and by overhang2 on the other two opposite sides.
+

+ + minLength +

+
Optional argument that specifies that the total length of the longest opposite-side overhangs must be greater than or equal to minLength to make this enclosure valid. The minLength is measured at the center of the cut. Specify 0 to ignore this argument.
+

lefwLayerEnclosureWidth

+

Writes an ENCLOSURE statement with an EXCEPTEXTRACUT keyword for a cut layer. This routine is similar to lefwLayerEnclosure except that it lets you specify EXCEPTEXTRACUT. The ENCLOSURE statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ int lefwLayerEnclosureWidth(
const char* location,
double overhang1,
double overhang2,
double width,
double cutWithin) +
+

Arguments

+

+ + location +

+
Optional argument that specifies whether the overhang is required on the routing layers above or below the cut layer. If you don't specify this argument, the rule applies to both adjacent routing layers; specify "" to ignore this argument.
Value: ABOVE or BELOW
+

+ + overhang1 overhang2 +

+
Overhange values. Any rectangle from this cut layer requires the routing layers to overhang by overhang1 on two opposite sides, and by overhang2 on the other two opposite sides.
+

+ + width +

+
Optional argument that specifies that the enclosure rule only applies when the width of the routing layer is greater than or equal to width. Specify 0 to ignore this argument. If you do not specify this argument, the enclosure rule applies to all widths (as if width was 0).
+

+ + cutWithin +

+
Optional argument that sets the EXCEPTEXTRACUT cutWithin keyword. Specifies that if there is another via cut less than or equal to cutWithin, then this ENCLOSURE with WIDTH rule is ignored and the ENCLOSURE rules for minimum width wires are applied to the via cuts instead. Specify 0 to ignore this argument.
+

lefwLayerPreferEnclosure

+

Writes a PREFERENCLOSURE statement for a cut layer. The PREFERENCLOSURE statement is optional and can be used more than once in a LAYER section.

+

Note: The PREFERENCLOSURE statement specifies preferred enclosure rules that can improve manufacturing yield, instead of enclosure rules that absolutely must be met (ENCLOSURE statement).

+

Syntax

+
+ lefwLayerPreferEnclosure(
const char* location,
double overhang1,
double overhang2,
double width) +
+

Arguments

+

+ + location +

+
Optional argument that specifies whether the overhang is required on the routing layers above or below the cut layer. Specify "" to ignore this argument.
Value: ABOVE or BELOW
+

+ + overhang1 overhang2 +

+
Specifies that any rectangle from this cut layer requires the routing layers to overhang by overhang1 on two opposite sides, and by overhang2 on the other two opposite sides. The overhang values must be equal to or larger than the overhang values in the ENCLOSURE rule.
+

+ + width +

+
Optional argument that specifies that the enclosure rule only applies when the width of the routing layer is greater than or equal to width. Specify 0 to ignore this argument.
+

lefwLayerResistancePerCut

+

Writes a RESISTANCE statement for the cut layer. The RESISTANCE statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ lefwLayerResistancePerCut(
double resistance) +
+

Arguments

+

+ + resistance +

+
Specifies the resistance per cut on this layer. LEF vias without their own specific resistance value, or DEF vias from a via rule without a resistance per cut value, can use this resistance value.
+

lefwLayerWidth

+

Writes a WIDTH statement for an implant or a cut layer. The WIDTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerWidth(
double minWidth) +
+

Arguments

+

+ + minWidth +

+
Specifies the minimum width for the layer.
+

Layer Examples

+

The following example shows a callback routine with the type lefwLayerCbkType. This example shows how to create a cut, masterslice, or overlap layer. For an example of a routing layer, see the Layer (Routing) section.

+
+ int layerCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
double *current;
// Check if the type is correct
if (type != lefwLayerCbkType) {
printf("Type is not lefwLayerCbkType, terminate
        writing.\n");
return 1;
}
current = (double*)malloc(sizeof(double)*3);
res = lefwStartLayer("CA", "CUT");
CHECK_RES(res);
res = lefwLayerDCCurrentDensity("AVERAGE", 0);
CHECK_RES(res);
current[0] = 2.0;
current[1] = 5.0;
current[2] = 10.0;
res = lefwLayerDCWidth(3, current);
CHECK_RES(res);
current[0] = 0.6E-6;
current[1] = 0.5E-6;
current[2] = 0.4E-6;
res = lefwLayerDCTableEntries(3, current);
CHECK_RES(res);
res = lefwEndLayer("CA");
CHECK_RES(res);
free((char*)current);
res = lefwStartLayer("POLYS", "MASTERSLICE");
CHECK_RES(res);
res = lefwStringProperty("lsp", "top");
CHECK_RES(res);
res = lefwIntProperty("lip", 1);
CHECK_RES(res);
res = lefwRealProperty("lrp", 2.3);
CHECK_RES(res);
res = lefwEndLayer("POLYS");
CHECK_RES(res);
res = lefwStartLayer("OVERLAP", "OVERLAP");
CHECK_RES(res);
res = lefwEndLayer("OVERLAP");
CHECK_RES(res);
return 0;} +
+

Layer (Routing)

+

Routing layer routines write LAYER sections about routing layers. At least one LAYER section is required in a LEF file, and more than one LAYER section is generally required to describe a layout. For syntax information about the LAYER section for routing layers, see "Layer (Routing)" in the LEF/DEF Language Reference.

+

You must begin and end a LEF LAYER section with the lefwStartLayerRouting and lefwEndLayerRouting routines. The remaining routing layer routines defined in this section must be included between these routines. You create one LAYER section for each routing layer you need to define.

+

For examples of the routines described here, see "Routing Layer Examples"

+

In addition to the routines described in this section, you can include a PROPERTY statement within a LAYER section. For more information about these routines, see "Property".

+

All routines return 0 if successful.

+

lefwStartLayerRouting

+

Starts the LAYER section. The LEF writer automatically writes the TYPE ROUTING statement. This routine is required to define a routing layer and can be used more than once. Each routing layer must be defined by a separate lefwStartLayerRouting, lefwEndLayerRouting routine pair.

+

Syntax

+
+ int lefwStartLayerRouting(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the name of the routing layer being defined.
+

lefwEndLayerRouting

+

Ends the LAYER section for the specified routing layer.

+

Syntax

+
+ int lefwEndLayerRouting(
const char* layerName) +
+

lefwDensityCheckStep

+

Writes a DENSITYCHECKSTEP statement. The DENSITYCHECKSTEP statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwDensityCheckStep(
double stepValue) +
+

Arguments

+

+ + stepValue +

+
Specifies the stepping distance for metal density checks, in distance units.
+

lefwDensityCheckWindow

+

Writes a DENSITYCHECKWINDOW statement. The DENSITYCHECKWINDOW statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwDensityCheckWindow(
double windowLength,
double windowWidth) +
+

Arguments

+

+ + windowLength +

+
Specifies the length of the check window, in distance units.
+

+ + windowWidth +

+
Specifies the width of the check window, in distance units.
+

lefwFillActiveSpacing

+

Writes a FILLACTIVESPACING statement. The FILLACTIVESPACING statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwFillActiveSpacing(
double spacing) +
+

Arguments

+

+ + spacing +

+
Specifies the spacing between metal fills and active geometries.
+

lefwLayerACCurrentDensity

+

Writes an ACCURRENTDENSITY statement. The ACCURENTDENSITY statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerACCurrentDensity(
const char* type,
double value) +
+

Arguments

+

+ + type +

+
Specifies the type of AC current limit.
Value: PEAK, AVERAGE, or RMS
+

+ + value +

+
Specifies a maximum current for the layer, in milliamps per micron. If you specify 0, you must specify the lefwLayerACFrequency and lefwLayerACTableEntries routines.
+

lefwLayerACFrequency

+

Writes a FREQUENCY statement. The FREQUENCY statement is required if you specify a value of 0 in the lefwLayerACCurrentDensity routine, and can be used only once in an ACCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerACFrequency(
int numFrequency,
double* frequency) +
+

Arguments

+

+ + numFrequency +

+
Specifies the number of frequency values.
+

+ + frequency +

+
Specifies the frequency values, in megahertz.
+

lefwLayerACTableEntries

+

Writes a TABLEENTRIES statement. The TABLENTRIES statement is required if you specify a FREQUENCY statement, and can be used only once in an ACCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerACTableEntries(
int numEntries,
double* entries) +
+

Arguments

+

+ + numEntries +

+
Specifies the number of table entry values.
+

+ + entries +

+
Specifies the maximum current for each of the frequency and width pairs specified in the FREQUENCY and WIDTH statements, in milliamps per micron.
+

lefwLayerACWidth

+

Writes a WIDTH statement. The WIDTH statement is optional if you specify a FREQUENCY statement, and can be used only once in an ACCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerACWidth(
int numWidths,
double* widths) +
+

Arguments

+

+ + numWidths +

+
Specifies the number of width values.
+

+ + widths +

+
Specifies the wire width values, in microns.
+

lefwLayerAntennaAreaDiffReducePwl

+

Writes an ANTENNAAREADIFFREDUCEPWL statement for a routing or cut layer. The ANTENNAAREADIFFREDUCEPWL statement is optional and can be used once after each lefwLayerAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaAreaDiffReducePwl(
int numPwls,
double* diffAreas,
double* metalDiffFactors) +
+

Arguments

+

+ + numPwls +

+
Specifies the number of diffusion area and metalDiffFactor pairs.
+

+ + diffAreas +

+
Specifies the diffArea values. The values are floating points, specified in microns squared. They should start with 0 and monotonically increase in value to the maximum size diffArea expected.
+

+ + metalDiffFactors +

+
Specifies the metalDiffFactor values. The values are floating points with no units and are normally between 0.0 and 1.0.
+

lefwLayerAntennaAreaFactor

+

Writes an ANTENNAAREAFACTOR statement. The ANTENNAAREAFACTOR statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaAreaFactor(
double value
const char* diffUseOnly) +
+

Arguments

+

+ + value +

+
Specifies the adjust or multiply factor for the antenna metal calculation.
+

+ + diffUseOnly +

+
Optional argument that specifies the current antenna factor should be used only when the corresponding layer is connected to the diffusion. Specify NULL to ignore this argument.
+

lefwLayerAntennaAreaMinusDiff

+

Writes an ANTENNAAREAMINUSDIFF statement for a routing or cut layer. The ANTENNAAREAMINUSDIFF statement is optional and can be used once after each lefwLayerAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaAreaMinusDiff(
double minusDiffFactor) +
+

Arguments

+

+ + minusDiffFactor +

+
Specifies the diffusion area. The antenna ratio metal area will subtract the diffusion area connected to it. minusDiffFactor is a floating point value and defaults to 0.0.
+

lefwLayerAntennaAreaRatio

+

Writes the ANTENNAAREARATIO statement. The ANTENNAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the antenna ratio, using the bottom area of the metal wire that is not connected to the diffusion diode.
+

lefwLayerAntennaCumAreaRatio

+

Writes an ANTENNACUMAREARATIO statement. The ANTENNACUMAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the cumulative antenna ratio, using the bottom area of the metal wire that is not connected to the diffusion diode.
+

lefwLayerAntennaCumDiffAreaRatio

+

Writes an ANTENNACUMDIFFAREARATIO statement. The ANTENNACUMDIFFAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaCumDiffAreaRatioPWL in the same LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumDiffAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the cumulative antenna ratio, using the bottom area of the metal wire that is connected to the diffusion diode.
+

lefwLayerAntennaCumDiffAreaRatioPwl

+

Writes an ANTENNACUMDIFFAREARATIOPWL statement. The ANTENNACUMDIFFAREARATIOPWL statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaCumDiffAreaRatio in the same LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumDiffAreaRatioPwl(
int numPwls,
double diffusions,
double ratios) +
+

Arguments

+

+ + numPwls +

+
Specifies the number of diffusion-ratio pairs.
+

+ + diffusions +

+
Specifies the diffusion values.
+

+ + ratios +

+
Specifies the ratio values.
+

lefwLayerAntennaCumDiffSideAreaRatio

+

Writes an ANTENNACUMDIFFSIDEAREARATIO statement. The ANTENNACUMDIFFSIDEAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaCumDiffSideAreaRatioPWL in the same LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumDiffSideAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the cumulative antenna ratio, using the side wall area of the metal wire that is connected to the diffusion diode.
+

lefwLayerAntennaCumDiffSideAreaRatioPwl

+

Writes an ANTENNACUMDIFFSIDEAREARATIOPWL statement. The ANTENNACUMDIFFSIDEAREARATIOPWL statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaCumDiffSideAreaRatio in the same LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumDiffSideAreaRatioPwl(
int numPwls,
double diffusions,
double ratios) +
+

Arguments

+

+ + numPwls +

+
Specifies the number of diffusion-ratio pairs.
+

+ + diffusions +

+
Specifies the diffusion values.
+

+ + ratios +

+
Specifies the ratio values.
+

lefwLayerAntennaCumSideAreaRatio

+

Writes an ANTENNACUMSIDEAREARATIO statement. The ANTENNACUMSIDEAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwAntennaCumSideAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the cumulative antenna ratio, using the side wall area of the metal wire that is not connected to the diffusion diode.
+

lefwLayerAntennaCumRoutingPlusCut

+

Writes an ANTENNACUMROUTINGPLUSCUT statement for a routing or cut layer. The ANTENNACUMROUTINGPLUSCUT statement is optional and can be used once after each lefwLayerAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaCumRoutingPlusCut() +
+

lefwLayerAntennaDiffAreaRatio

+

Writes an ANTENNADIFFAREARATIO statement. The ANTENNADIFFAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaDiffAreaRatioPWL in the same LAYER section.

+

Syntax

+
+ int lefwAntennaDiffAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the antenna ratio, using the bottom area of the wire that is connected to the diffusion diode.
+

lefwLayerAntennaDiffAreaRatioPwl

+

Writes an ANTENNADIFFAREARATIOPWL statement. The ANTENNADIFFAREARATIOPWL statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaDiffAreaRatio in the same LAYER section.

+

Syntax

+
+ int lefwAntennaDiffAreaRatioPWL(
int numPwls,
double diffusions,
double ratios) +
+

Arguments

+

+ + numPwls +

+
Specifies the number of diffusion-ratio pairs.
+

+ + diffusions +

+
Specifies the diffusion values.
+

+ + ratios +

+
Specifies the ratio values.
+

lefwLayerAntennaDiffSideAreaRatio

+

Writes an ANTENNADIFFSIDEAREARATIO statement. The ANTENNADIFFSIDEAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaDiffSideAreaRatioPwl in the same LAYER section.

+

Syntax

+
+ int lefwLayerAntennaDiffSideAreaRatio(
double value) +
+

Arguments

+

+ + value +

+
Specifies the antenna ratio, using the side wall area of the wire that is connected to the diffusion diode.
+

lefwLayerAntennaDiffSideAreaRatioPwl

+

Writes an ANTENNADIFFSIDEAREARATIOPWL statement. The ANTENNADIFFSIDEAREARATIOPWL statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section. If you specify this routine, you cannot specify lefwLayerAntennaDiffSideAreaRatio in the same LAYER section.

+

Syntax

+
+ int lefwLayerAntennaDiffSideAreaRatioPwl(
int numPwls,
double diffusions,
double ratios) +
+

Arguments

+

+ + numPwls +

+
Specifies the number of diffusion-ratio pairs.
+

+ + diffusions +

+
Specifies the diffusion values.
+

+ + ratios +

+
Specifies the ratio values.
+

lefwLayerAntennaGatePlusDiff

+

Writes an ANTENNAGATEPLUSDIFF statement for a routing or cut layer. The ANTENNAGATEPLUSDIFF statement is optional and can be used once after each lefwLayerAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaGatePlusDiff(
double plusDiffFactor) +
+

Arguments

+

+ + plusDiffFactor +

+
Specifies that the antenna ratio gate area should include the diffusion area multiplied by plusDiffFactor. minusDiffFactor is a floating point value.
+

lefwLayerAntennaModel

+

Writes an ANTENNAMODEL statement. The ANTENNAMODEL statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaModel(
const char* oxide) +
+

Arguments

+

+ + oxide +

+
Specifies the oxide model for the layer. Each model can be specified once per layer. If you specify an ANTENNAMODEL statement, that value affects all ANTENNA* statements for the layer that follow it until you specify another ANTENNAMODEL statement.
Value: OXIDE1, OXIDE2, OXIDE3, or OXIDE4
+

+ + Note: OXIDE1 and OXIDE2 are currently supported. If you specify OXIDE3 or OXIDE4, current tools parse and ignore them. +

+

lefwLayerAntennaSideAreaFactor

+

Writes an ANTENNASIDEAREAFACTOR statement. The ANTENNASIDEAREAFACTOR statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaSideAreaFactor(
double value
const char* diffUseOnly) +
+

Arguments

+

+ + value +

+
Specifies the adjust or multiply factor for the antenna metal calculation.
+

+ + diffUseOnly +

+
Optional argument that specifies that the current antenna factor should only be used when the corresponding layer is connected to the diffusion. Specify NULL to ignore this argument.
+

lefwLayerAntennaSideAreaRatio

+

Writes an ANTENNASIDEAREARATIO statement. The ANTENNASIDEAREARATIO statement is optional and can be used once after each lefwAntennaModel routine in a LAYER section.

+

Syntax

+
+ int lefwLayerAntennaSideAreaFactor(
double value) +
+

Arguments

+

+ + value +

+
Specifies the antenna ratio, using the side wall area of the wire that is not connected to the diffusion diode.
+

lefwLayerDCCurrentDensity

+

Writes the DCCURRENTDENSITY statement. The DCCURENTDENSITY statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerDCCurrentDensity(
const char* type,
double value) +
+

Arguments

+

+ + type +

+
Specifies the DC current limit, AVERAGE.
+

+ + value +

+
Specifies the current limit for the layer, in milliamps per micron. If you specify 0, you must specify the lefwLayerDCWidth and lefwLayerDCTableEntries routines.
+

lefwLayerDCTableEntries

+

Writes a TABLEENTRIES statement. The TABLENTRIES statement is required if you specify a WIDTH statement, and can be used only once in a DCCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerDCTableEntries(
int numEntries,
double* entries) +
+

Arguments

+

+ + numEntries +

+
Specifies the number of table entry values.
+

+ + entries +

+
Specifies the value of current density for each specified width, in milliamps per micron.
+

lefwLayerDCWidth

+

Writes a WIDTH statement. The WIDTH statement is required if you specify a value of 0 in the lefwLayerDCCurrentDensity routine, and can be used only once in a DCCURENTDENSITY statement.

+

Syntax

+
+ int lefwLayerDCWidth(
int numWidths,
double* widths) +
+

Arguments

+

+ + numWidths +

+
Specifies the number of width values.
+

+ + widths +

+
Specifies the wire width values, in microns.
+

lefwLayerRouting

+

Writes the DIRECTION and WIDTH statements for a LAYER section. The DIRECTION and WIDTH statements are required and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRouting(
const char* direction,
double width) +
+

Arguments

+

+ + direction +

+
Specifies the preferred routing direction.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

  

+
+

HORIZONTAL

+
+

Routing parallel to the x axis is preferred.

+
+

   

+
+

VERTICAL

+
+

Routing parallel to the y axis is preferred.

+
+

   

+
+

DIAG45

+
+

Routing along a 45-degree angle is preferred.

+
+

   

+
+

DIAG135

+
+

Routing along a 135-degree angle is preferred.

+
+

+ + width +

+
Specifies the default routing width to use for all regular wiring on the layer.
+

lefwLayerRoutingArea

+

Writes an AREA statement. The AREA statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingArea (
double area) +
+

Arguments

+

+ + area +

+
Specifies the minimum metal area required for polygons on the layer, in distance units squared. All polygons must have an area that is greater than or equal to area, if no MINSIZE rule (lefwLayerRoutingMinsize) is specified. If a MINSIZE rule exists, all polygons must meet either the MINSIZE or the AREA rule.
+

lefwLayerRoutingCapacitance

+

Writes a CAPACITANCE CPERSQDIST statement. The CAPACITANCE CPERSQDIST statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingCapacitance(
const char* capacitance) +
+

Arguments

+

+ + capacitance +

+
Specifies the capacitance for each square unit, in picofarads per square micron.
+

lefwLayerRoutingCapMultiplier

+

Writes the CAPMULTIPLIER statement. The CAPMULTIPLIER statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingCapMultiplier(
double capMultiplier) +
+

Arguments

+

+ + capMultiplier +

+
Specifies the multiplier for interconnect capacitance to account for increases in capacitance caused by nearby wires.
+

lefwLayerRoutingDiagMinEdgeLength

+

Writes a DIAGMINEDGELENGTH statement. The DIAGMINEDGELENGTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ lefwLayerRoutingDiagMinEdgeLength(
double diagLength) +
+

Arguments

+

+ + diagLength +

+
Specifies the minimum length for a diagonal edge. Any 45-degree diagonal edge must have a length that is greater than or equal to diagLength.
+

lefwLayerRoutingDiagPitch

+

Writes a DIAGPITCH statement that contains one pitch value that is used for both the 45-degree angle and 135-degree angle directions. The DIAGPITCH statement is optional and can only be used once in a LAYER section. If you specify this routine, you cannot specify the lefwLayerRoutingDiagPitchXYDistance routine.

+

Syntax

+
+ lefwLayerRoutingDiagPitch(
double distance) +
+

Arguments

+

+ + distance +

+
Specifies the 45-degree routing pitch for the layer.
+

lefwLayerRoutingDiagPitchXYDistance

+

Writes a DIAGPITCH statement that contains separate values for the 45-degree angle and 135-degree angle directions. The DIAGPITCH statement is optional and can only be used once in a LAYER section. If you specify this routine, you cannot specify the lefwLayerRoutingDiagPitch routine.

+

Syntax

+
+ lefwLayerRoutingDiagPitchXYDistance(
double diag45Distance,
double diag135Distance) +
+

Arguments

+

+ + diag45Distance +

+
Specifies the 45-degree angle pitch (the center-to-center space between 45-degree angle routes).
+

+ + diag135Distance +

+
Specifies the 135-degree angle pitch.
+

lefwLayerRoutingDiagSpacing

+

Writes a DIAGSPACING statement. The DIAGSPACING statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ lefwLayerRoutingDiagSpacing(
double diagSpacing) +
+

Arguments

+

+ + diagSpacing +

+
Specifies the minimum spacing allowed for a 45-degree angle shape.
+

lefwLayerRoutingDiagWidth

+

Writes a DIAGWIDTH statement. The DIAGWIDTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ lefwLayerRoutingDiagWidth(
double diagWidth) +
+

Arguments

+

+ + diagWidth +

+
Specifies the minimum width allowed for a 45-degree angle shape.
+

lefwLayerRoutingEdgeCap

+

Writes an EDGECAPACITANCE statement. The EDGECAPACITANCE statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingEdgeCap(
double edgeCap) +
+

Arguments

+

+ + edgeCap +

+
Specifies a floating-point value of peripheral capacitance, in picoFarads per micron.
+

lefwLayerRoutingHeight

+

Writes a HEIGHT statement. The HEIGHT statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingHeight(
double height) +
+

Arguments

+

+ + height +

+
Specifies the distance from the top of the ground plane to the bottom of the interconnect.
+

lefwLayerRoutingMaxwidth

+

Writes a MAXIMUMWIDTH statement. The MAXIMUMWIDTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingMaxwidth(
double width) +
+

Arguments

+

+ + width +

+
Specifies the maximum width a wire on the layer can have.
+

lefwLayerRoutingMinenclosedarea

+

Writes a MINENCLOSEDAREA statement. The MINENCLOSEDAREA statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingMinenclosedarea(
int numMinenclosed,
double* area,
double* width) +
+

Arguments

+

+ + numMinenclosed +

+
Specifies the number of values defined in the routine.
+

+ + area +

+
Specifies the minimum area size of a hole enclosed by metal. You can specify one or more values.
+

+ + width +

+
Optional argument that applies the minimum area size limit only when the hole is created from a wire that has a width that is less than or equal to width. You can specify one or more values.
+

lefwLayerRoutingMinimumcut

+

Writes a MINIMUMCUT statement. The MINIMUMCUT statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingMinimumcut(
double numCuts,
double minWidth) +
+

Arguments

+

+ + numCuts +

+
Specifies the number of cuts a via must have when it is on a wide wire or pin whose width is greater than minWidth.
+

+ + minWidth +

+
Specifies the minimum width of the wire or pin.
+

lefwLayerRoutingMinimumcutConnections

+

Writes a FROMABOVE or FROMBELOW statement. This statement is optional and can be used only once after each lefwLayerRoutingMinimumcut routine.

+

Syntax

+
+ int lefwLayerRoutingMinimumcutConnections(
const char* direction) +
+

Arguments

+

+ + direction +

+
Specifies the MINIMUMCUT statement applies only to connections from above the layer or from below the layer.
Value: FROMABOVE or FROMBELOW
+

lefwLayerRoutingMinimumcutLengthWithin

+

Writes a LENGTH statement. This statement is optional and can be used only once after each lefwLayerRoutingMinimumcut routine.

+

Syntax

+
+ int lefwLayerRoutingMinimumcutLengthWithin(
double length,
double distance) +
+

Arguments

+

+ + distance +

+
Applies the minimum cut rule to thin wires directly connected to wide wires, if the vias on the thin wires are less than distance from the wide wire, and the wide wire has a length that is greater than length.
+

+ + length +

+
Specifies the minimum length of the wide wire.
+

lefwLayerRoutingMinimumcutWithin

+

Writes a MINIMUMCUT statement with a WITHIN keyword. This routine is similar to the lefwLayerRoutingMinimumcut routine, except that it lets you specify a WITHIN value. The MINIMUMCUT statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingMinimumcutWithin(
double numCuts,
double minWidth,
double cutDistance) +
+

Arguments

+

+ + numCuts +

+
Specifies the number of cuts a via must have when it is on a wide wire or pin whose width is greater than minWidth.
+

+ + minWidth +

+
Specifies the minimum width of the wire or pin.
+

+ + cutDistance +

+
Specifies that numCuts via cuts must be less than cutDistance from each other to be counted together to meet the minimum cut rule.
+

lefwLayerRoutingMinsize

+

Writes a MINSIZE statement. The MINSIZE statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ lefwLayerRoutingMinsize(
int numRect,
double* minWidth,
double* minLength) +
+

Arguments

+

+ + numRect +

+
Specifies the number of rectangles defined.
+

+ + minWidth minLength +

+
Specifies the minimum width and length values for a rectangle that must be able to fit somewhere within each polygon on this layer. All polygons must meet this MINSIZE rule, if no AREA rule is specified (lefwLayerRoutingArea). If an AREA rule is specified, all polygons must meet either the MINSIZE or the AREA rule.
+

lefwLayerRoutingMinstep

+

Writes a MINSTEP statement. The MINSTEP statement is optional and can be used more than once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingMinstep(
double distance) +
+

Arguments

+

+ + distance +

+
Specifies the minimum step size, or shortest edge length, for a shape.
+

lefwLayerRoutingMinstepMaxEdges

+

Writes a MINSTEP statement. This routine is similar to lefwLayerRoutingMinstep, except that it lets you specify the MAXEDGES option. The MINSTEP statement is optional and can be called only once after lefwStartLayerRouting.

+

Syntax

+
+ int lefwLayerRoutingMinstepMaxEdges(
double distance,
double maxEdges) +
+

Arguments

+

+ + distance +

+
Specifies the minimum step size, or shortest edge length, for a shape.
+

+ + maxEdges +

+
Specifies the maximum consecutive edges.
+

lefwLayerRoutingMinstepWithOptions

+

Writes a MINSTEP statement that contains rule type and total edge length values. The MINSTEP statement is optional and can be more than once in a LAYER section.

+

Syntax

+
+ lefwLayerRoutingMinstepWithOptions(
double distance,
const char* rule,
double maxLength) +
+

Arguments

+

+ + distance +

+
Specifies the minimum step size, or shortest edge length, for a shape.
+

+ + rule +

+
Indicates to which consecutive edges the MINSTEP rule applies. A DRC violation occurs if one or more consecutive edges of the specified type are less than distance. There can only be one rule of each type per layer.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + +
+
+

  

+
+

INSIDECORNER

+
+

Applies to consecutive edges of an inside corner that are less than distance.

+
+

   

+
+

OUTSIDECORNER

+
+

Applies to consecutive edges of an outside corner that are less than distance.

+
+

   

+
+

STEP

+
+

Applies to consecutive edges of a step that are less than distance.

+
+

+ + maxLength +

+
Specifies the maximum total edge length allowed that OPC can correct without causing new DRC violations. A violation only occurs if the total length of consecutive edges that are less than distance is greater than maxLength.
+

lefwLayerRoutingMinwidth

+

Writes a MINWIDTH statement. The MINWIDTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingMinwidth(
double width) +
+

Arguments

+

+ + width +

+
Specifies the minimum legal object width on the routing layer, in microns.
+

lefwLayerRoutingOffset

+

Writes an OFFSET statement that contains one value for both the x and y offsets. The OFFSET statement is optional and can be used only once in a LAYER section. If you specify this routine, you cannot specify the lefwLayerRoutingOffsetXYDistance routine.

+

Syntax

+
+ int lefwLayerRoutingOffset(
double offset) +
+

Arguments

+

+ + offset +

+
Specifies the offset, from the origin (0,0) for the routing grid for the layer.
+

lefwLayerRoutingOffsetXYDistance

+

Writes an OFFSET statement that contains separate values for the x and y offsets. The OFFSET statement is optional and can be used only once in a LAYER section. If you specify this routine, you cannot specify the lefwLayerRoutingOffset routine.

+

Syntax

+
+ lefwLayerRoutingOffsetXYDistance(
double xDistance,
double yDistance) +
+

Arguments

+

+ + xDistance +

+
Specifies the x offset for vertical routing tracks.
+

+ + yDistance +

+
Specifies the y offset for horizontal routing tracks.
+

lefwLayerRoutingPitch

+

Writes a PITCH statement that contains one pitch value that is used for both the x and y pitch. The PITCH statement is required and can be used only once in a LAYER section. If you specify this routine, you cannot specify the lefwLayerRoutingPitchXYDistance routine.

+

Syntax

+
+ int lefwLayerRoutingPitch(
double pitch) +
+

Arguments

+

+ + pitch +

+
Specifies the routing pitch for the layer.
+

lefwLayerRoutingPitchXYDistance

+

Writes a PITCH statement that contains separate values for the x and y pitch. The PITCH statement is required and can be used only once in a LAYER section. If you specify this routine, you cannot specify the lefwLayerRoutingPitch routine.

+

Syntax

+
+ lefwLayerRoutingPitchXYDistance(
double xDistance,
double yDistance) +
+

Arguments

+

+ + xDistance +

+
Specifies the x pitch (that is , the space between each vertical routing track).
+

+ + yDistance +

+
Specifies the y pitch (that is, the space between each horizontal routing track).
+

lefwLayerRoutingProtrusion

+

Writes a PROTRUSION statement. The PROTRUSION statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingProtrusion(
double width1,
double length,
double width2) +
+

Arguments

+

+ + length +

+
Specifies the maximum length of a protrusion.
+

+ + width1 +

+
Specifies the minimum width of a protrusion.
+

+ + width2 +

+
Specifies the minimum width of the wire to which the protrusion is connected.
+

lefwLayerRoutingResistance

+

Writes a RESISTANCE RPERSQ statement. The RESISTANCE RPERSQ statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingResistance(
const char* resistance) +
+

Arguments

+

+ + resistance +

+
Specifies the resistance for a square of wire, in ohms per square micron.
+

lefwLayerRoutingShrinkage

+

Writes a SHRINKAGE statement. The SHRINKAGE statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingShrinkage(
double shrinkage) +
+

Arguments

+

+ + shrinkage +

+
Specifies the value to account for shrinkage of interconnect wiring because of the etching process. Actual wire widths are determined by subtracting this constant value.
+

lefwLayerRoutingSpacing

+

Writes a SPACING statement. The SPACING statement is optional and can be used more than once in a LAYER section.

+

Note: You must use either this routine or the lefwLayerRoutingStartSpacingtableParallel routine for all LAYER sections.

+

Syntax

+
+ int lefwLayerRoutingSpacing(
double Spacing) +
+

Arguments

+

+ + Spacing +

+
Specifies the minimum spacing allowed between two regular geometries on different nets, also known as the different-net spacing rule.
+

lefwLayerRoutingSpacingEndOfLine

+

Writes an ENDOFLINE statement. The ENDOFLINE statement is optional and can be used only once after a SPACING statement.

+

Syntax

+
+ int lefwLayerRoutingSpacingEndOfLine(
double eolWidth,
double eolWithin) +
+

Arguments

+

+ + eolWidth +

+
Specifies the end-of-line width. An end-of-line with a width less than eolWidth requires spacing greater than or equal to eolSpace beyond the end of the line anywhere within eolWIthin distance.
+

+ + eolWithin +

+
The eolWithin distance. This value must be smaller than the minimum allowed spacing.
+

lefwLayerRoutingSpacingEOLParallel

+

Writes a PARALLELEDGE statement. The PARALLELEDGE statement is optional and can be used only once after a SPACING statement.

+

Syntax

+
+ int lefwLayerRoutingSpacingEOLParallel(
double parSpace,
double parWithin,
int twoEdges) +
+

Arguments

+

+ + parSpace +

+
Specifies the parSpace value. The end-of-line rule applies only if there is a parallel edge less than parSpace away that is also less than parWithin from the end.
+

+ + parWithin +

+
Specifies the parWithin value.
+

+ + twoEdges +

+
Optional argument that writes the TWOEDGES keyword, which specifies that the end-of-line rule applies only if there are two parallel edges that meet the PARALLELEDGE parSpace and parWithin parameters. Specify 0 to ignore this argument.
+

lefwLayerRoutingSpacingEndOfNotchWidth

+

Writes an ENDOFNOTCHWIDTH statement. The ENDOFNOTCHWIDTH statement is optional and can be used only once after a SPACING statement.

+

Syntax

+
+ int lefwLayerRoutingSpacingEndOfNotchWidth(
double eonWidth,
double minNSpacing,
double minNLength) +
+

Arguments

+

+ + eonWidth +

+
Specifies the end-of-notch width.
+

+ + minNSpacing +

+
Specifies the minimum notch spacing.
+

+ + minNLength +

+
Specifies the minimum notch length.
+

lefwLayerRoutingSpacingLengthThreshold

+

Writes a LENGTHTHRESHOLD statement. The LENGTHTHRESHOLD statement is optional and can be used only once after a lefwLayerRoutingSpacing routine. If you specify this routine, you cannot specify the lefwLayerRoutingSpacingRange or lefwLayerRoutingSamenet routines.

+

Syntax

+
+ int lefwLayerRoutingSpacingLengthThreshold(
double lengthValue,
double minWidth,
double maxWidth) +
+

Arguments

+

+ + lengthValue +

+
Specifies the maximum parallel run length or projected length with an adjacent metal object.
+

+ + minWidth, maxWidth +

+
Optional arguments that specify a width range. If you specify a range, the threshold spacing rule applies to all objects with widths that are greater than or equal to minWidth and less than or equal to maxWidth.
+

lefwLayerRoutingSpacingNotchLength

+

Writes a NOTCHLENGTH statement. The NOTCHLENGTH statement is optional and can be used only once after lefwStartLayerRouting.

+

Syntax

+
+ int lefwLayerRoutingSpacingNotchLength(
double minNLength) +
+

Arguments

+

+ + minNLength +

+
Specifies the minimum notch length. Any notch with notch length less than minNLength must have a notch spacing greater than or equal to the minimum spacing. The value you specify must be only slightly larger than the normal minimum spacing (for example, between 1x or 2x minimum spacing).
+

lefwLayerRoutingSpacingRange

+

Writes a RANGE statement. The RANGE statement is optional and can be used only once after a lefwLayerRoutingSpacing routine. If you specify this routine, you cannot specify the lefwLayerRoutingSpacingLengthThreshold or lefwLayerRoutingSameNet routines.

+

Syntax

+
+ int lefwLayerRoutingSpacingRange(
double minWidth,
double maxWidth) +
+

Arguments

+

+ + minWidth, maxWidth +

+
Specifies a width range. If you specify a range, the minimum spacing rule applies to all wires on the layer with widths that are greater than or equal to minWidth and less than or equal to maxWidth.
+

lefwLayerRoutingSpacingRangeInfluence

+

Writes an INFLUENCE statement. The INFLUENCE statement is optional and can be used only once after a lefwLayerRoutingSpacingRange routine. If you specify this routine, you cannot specify the lefwLayerRoutingSpacingRangeUseLengthThreshold or lefwLayerRoutingSpacingRangeRange routines in the same LAYER section.

+

Syntax

+
+ int lefwLayerRoutingSpacingRangeInfluence (
double infValue,
double stubMinWidth,
double stubMaxWidth) +
+

Arguments

+

+ + infValue +

+
Specifies the area of the stub wire which inherits the spacing from a wide wire.
+

+ + stubMinWidth, stubMaxWidth +

+
Optional arguments that specify a wire width range. If you specify a range, the influence spacing rule applies to all stub wires on the layer with widths that are greater than or equal to stubMinWidth and less than or equal to stubMaxWidth.
+

lefwLayerRoutingSpacingRangeRange

+

Writes a second RANGE statement. The second RANGE statement is optional and can be used only once after a lefwLayerRoutingSpacingRange routine. If you specify this routine, you cannot specify the lefwLayerRoutingSpacingRangeInfluence or lefwLayerRoutingSpacingRangeUseLengthThreshold routines in the same LAYER section.

+

Syntax

+
+ int lefwLayerRoutingSpacingRangeRange(
double minWidth,
double maxWidth) +
+

Arguments

+

+ + minWidth, maxWidth +

+
Specify a second width range. If you specify a second range, the minimum spacing rule applies if the widths of both objects are greater than or equal to minWidth and less than or equal to maxWidth (each object in a different range).
+

lefwLayerRoutingSpacingRangeUseLengthThreshold

+

Writes a USELENGTHTHRESHOLD statement. The USELENGTHTHRESHOLD statement is optional and can be used only once after a lefwLayerRoutingSpacingRange routine. If you specify this routine, you cannot specify the lefwLayerRoutingSpacingRangeRange or lefwLayerRoutingSpacingRangeInfluence routines in the same LAYER section.

+

This routine is only valid if one or both of the range values in the lefwLayerRoutingSpacingRange routine are not zero.

+

Syntax

+
+ int lefwLayerRoutingSpacingRangeUseLengthThreshold() +
+

lefwLayerRoutingSpacingSameNet

+

Writes a SAMENET keyword for a SPACING statement. Only one of lefwLayerRoutingSpacingSameNet, lefwLayerRoutingSpacingRange, or lefwLayerRoutingSpacingLengthThreshold can be called once after lefwLayerRoutingSpacing.

+

Syntax

+
+ int lefwLayerRoutingSpacingSameNet(
int PGOnly) +
+

Arguments

+

+ + PGOnly +

+
Optional argument that specifies the PGONLY keyword. If this keyword is specified, the minSpacing value only applies to same-net metal that is a power or ground net.
+

lefwLayerRoutingStartSpacingtableInfluence

+

Writes a SPACINGTABLE INFLUENCE statement. The SPACINGTABLE INFLUENCE statement is optional and can be used only once after a lefwLayerRoutingStartSpacingtableParallel routine.

+

Syntax

+
+ int lefwLayerRoutingStartSpacingtableInfluence() +
+

lefwLayerRoutingStartSpacingInfluenceWidth

+

Writes a SPACINGTABLE INFLUENCE WIDTH statement. The SPACINGTABLE INFLUENCE WIDTH statement is required if you specify the lefwLayerRoutingStartSpacingtableInfluence routine, and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingStartSpacingInfluenceWidth(
double width,
double distance,
double spacing) +
+

Arguments

+

+ + distance +

+
Specifies an array of values that represent the distance between a wide wire and two perpendicular wires.
+

+ + spacing +

+
Specifies an array of values that represent the spacing between the two perpendicular wires.
+

+ + width +

+
Specifies an array of values that represent the width of the wide wire.
+

lefwLayerRoutingStartSpacingtableParallel

+

Writes a SPACINGTABLE PARALLELRUNLENGTH statement. The SPACINGTABLE PARALLELRUNLENGTH statement is optional and can be used only once in a LAYER section.

+

Note: You must use either this routine or the lefwLayerRoutingSpacing routine for all LAYER sections.

+

Syntax

+
+ int lefwLayerRoutingStartSpacingtableParallel(
int numlength,
double* length) +
+

Arguments

+

+ + length +

+
Specifies an array of values that represent the maximum parallel run length between two wires.
+

+ + numLength +

+
Specifies the number of length values specified.
+

lefwLayerRoutingStartSpacingtableParallelWidth

+

Writes a SPACINGTABLE PARALLELRUNLENGTH WIDTH statement. The SPACINGTABLE PARALLELRUNLENGTH WIDTH statement is required if you specify the lefwLayerRoutingStartSpacingtableParallel routine, and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingStartSpacingtableParallelWidth(
double width,
int numSpacing,
double* spacing) +
+

Arguments

+

+ + numSpacing +

+
Specifies the number of spacing values specified.
+

+ + spacing +

+
Specifies an array of values that represent the spacing between the two wires.
+

+ + width +

+
Specifies and array of values that represent the maximum width of the two wires.
+

lefwLayerRoutingStartSpacingtableTwoWidths

+

Writes a SPACINGTABLE TWOWIDTHS statement. The SPACINGTABLE TWOWIDTHS statement is optional and can be used multiple times in a LAYER section after the lefwLayerRouting routine.

+

Syntax

+
+ int lefwLayerRoutingStartSpacingtableTwoWidths() +
+

lefwLayerRoutingStartSpacingtableTwoWidthsWidth

+

Writes a SPACINGTABLE TWOWIDTHS WIDTH statement. This routine is required after a lefwLayerRoutingStartSpacingtableTwoWidths routine.

+

Syntax

+
+ int lefwLayerRoutingSpacingtableTwoWidthsWidth(
double width,
double runLength,
int numSpacing,
double* spacing) +
+

Arguments

+

+ + width +

+
The widths of the two objects.
+

+ + runLength +

+
Optional argument that specifies the parallel run length between the two objects. Specify 0 to ignore this argument.
+

+ + numSpacing +

+
Specifies the number of spacing values provided.
+

+ + spacing +

+
The spacing values that represent the spacing between two objects.
+

lefwLayerRoutingEndSpacingtable

+

Ends a SPACINGTABLE statement. This routine is required if you specify lefwLayerRoutingStartSpacingtableParallel.

+

Syntax

+
+ int lefwLayerRoutineEndSpacingtable() +
+

lefwLayerRoutingThickness

+

Writes a THICKNESS statement. The THICKNESS statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingThickness(
double thickness) +
+

Arguments

+

+ + thickness +

+
Specifies the thickness of the interconnect.
+

lefwLayerRoutingWireExtension

+

Writes a WIREEXTENSION statement. The WIREEXTENSION statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwLayerRoutingWireExtension(
double wireExtension) +
+

Arguments

+

+ + wireExtension +

+
Specifies the distance by which wires are extended at vias. Enter 0 to specify no wire extension. Values other than 0 must be more than half of the default routing width for the layer.
+

lefwMaxAdjacentSlotSpacing

+

Writes a MAXADJACENTSLOTSPACING statement. The MAXADJACENTSLOTSPACING statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwMaxAdjacentSlotSpacing(
double maxSpacing) +
+

Arguments

+

+ + maxSpacing +

+
Specifies the maximum spacing, in distance units, allowed between two adjacent slot sections.
+

lefwMaxCoaxialSlotSpacing

+

Writes a MAXCOAXIALSLOTSPACING statement. The MAXCOAXIALSLOTSPACING statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwMaxCoaxialSlotSpacing(
double maxSpacing) +
+

Arguments

+

+ + maxSpacing +

+
Specifies the maximum spacing, in distance units, allowed between two slots in the same slot section.
+

lefwMaxEdgeSlotSpacing

+

Writes a MAXEDGESLOTSPACING statement. The MAXEDGESLOTSPACING statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwMaxEdgeSlotSpacing(
double maxSpacing) +
+

Arguments

+

+ + maxSpacing +

+
Specifies the maximum spacing, in distance units, allowed between slot edges.
+

lefwMaximumDensity

+

Writes a MAXIMUMDENSITY statement. The MAXIMUMDENSITY statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwMaximumDensity(
double maxDensity) +
+

Arguments

+

+ + maxDensity +

+
Specifies the maximum metal density allowed for the layer, as a percentage of its area.
+

lefwMinimumDensity

+

Writes a MINIMUMDENSITY statement. The MINIMUMDENSITY statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwMinimumDensity(
double minDensity) +
+

Arguments

+

+ + minDensity +

+
Specifies the minimum metal density allowed for the layer, as a percentage of its area.
+

lefwSlotLength

+

Writes a SLOTLENGTH statement. The SLOTLENGTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwSlotLength(
double minSlotLength) +
+

Arguments

+

+ + minSlotLength +

+
Specifies the minimum slot length, in distance units, allowed in the design.
+

lefwSlotWidth

+

Wries a SLOTWIDTH statement. The SLOTWIDTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwSlotWidth(
double minSlotWidth) +
+

Arguments

+

+ + minSlotWidth +

+
Specifies the minimum slot width, in distance units, allowed in the design.
+

lefwSlotWireLength

+

Writes a SLOTWIRELENGTH statement. The SLOTWIRELENGTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwSlotWireLength(
double minWireLength) +
+

Arguments

+

+ + minWireLength +

+
Specifies the minimum wire length, in distance units, allowed for wires that need to be slotted.
+

lefwSlotWireWidth

+

Writes a SLOTWIREWIDTH statement. The SLOTWIREWIDTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwSlotWireWidth(
double minWireWidth) +
+

Arguments

+

+ + minWireWidth +

+
Specifies the minimum wire width, in distance units, allowed for wires that need to be slotted.
+

lefwSplitWireWidth

+

Writes a SPLITWIREWIDTH statement. The SPLITWIREWIDTH statement is optional and can be used only once in a LAYER section.

+

Syntax

+
+ int lefwSplitWireWidth(
double minWireWidth) +
+

Arguments

+

+ + minWireWidth +

+
Specifies the minimum wire width, in distance units, allowed for wires that need to be split.
+

Routing Layer Examples

+

The following example only shows the usage of some functions related to a routing layer. This example is part of the layer callback routine.

+
+ int layerCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
double *current;
...
res = lefwStartLayerRouting("M3");
CHECK_RES(res);
res = lefwLayerRouting("HORIZONTAL", 0.9);
CHECK_RES(res);
res = lefwLayerRoutingPitch(1.8);
CHECK_RES(res);
res = lefwLayerRoutingWireExtension(8);
CHECK_RES(res);
res = lefwLayerRoutingSpacing(0.9, 0, 0);
CHECK_RES(res);
res = lefwLayerRoutingResistance("0.0608");
CHECK_RES(res);
res = lefwLayerRoutingCapacitance("0.000184");
CHECK_RES(res);
res = lefwLayerACCurrentDensity("AVERAGE",0);
CHECK_RES(res);
current[0] = 1E6;
current[1] = 100E6;
current[2] = 400E6;
res = lefwLayerACFrequency(3, current);
CHECK_RES(res);
current[0] = 0.6E-6;
current[1] = 0.5E-6;
current[2] = 0.4E-6;
res = lefwLayerACTableEntries(3, current);
CHECK_RES(res);
res = lefwEndLayerRouting("M3");
CHECK_RES(res);
...
return 0;} +
+

Macro

+

Macro routines write a LEF MACRO section. A MACRO section is optional and can be used more than once in a LEF file. For syntax information about the LEF MACRO section, see "Macro" in the LEF/DEF Language Reference.

+

You must begin and end a LEF MACRO section with the lefwStartMacro and lefwEndMacro routines. The macroName value in the start and end routines identifies the macro being defined. All LEF writer routines that define this macro must be included between the lefwStartMacro and lefwEndMacro routines specifying that macro name.

+

For examples of the routines described here, see "Macro Examples".

+

In addition to the routines described in this section, you can include an OBS, or PIN statement within a MACRO section. For more information about these routines, see "Macro Obstruction" , or "Macro Pin".

+

You can also include a PROPERTY statement within a MACRO section. For more information about these routines, see "Property".

+

All routines return 0 if successful.

+

lefwStartMacro

+

Starts the MACRO section. This routine is required to begin each MACRO section.

+

Syntax

+
+ int lefwStartMacro(
const char* macroName) +
+

Arguments

+

+ + macroName +

+
Specifies the name of the macro being defined.
+

lefwEndMacro

+

Ends the MACRO section for the specified macroName.

+

Syntax

+
+ int lefwEndMacro(
const char* macroName) +
+

lefwMacroClass

+

Writes a CLASS statement. The CLASS statement is optional and can be used only once in a MACRO section.

+

Syntax

+
+ int lefwMacroClass(
const char* value1,
const char* value2) +
+

Arguments

+

+ + value1 +

+
Specifies the macro type.
Value: COVER, RING, BLOCK, PAD, CORE, or ENDCAP
+

+ + value2 +

+
Specifies a subtype for a macro type. If value1 is ENDCAP, you must specify this argument. Otherwise, specify NULL to ignore this argument.
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ If Value1 equals: +

+
+

+ Then Value2 is: +

+
+

COVER

+
+

Optional and can be BUMP.

+
+

BLOCK

+
+

Optional and can be BLACKBOX or SOFT.

+
+

PAD

+
+

Optional and can be INPUT, OUTPUT, INOUT, POWER, SPACER, or AREAIO.

+
+

CORE

+
+

Optional and can be FEEDTHRU, TIEHIGH, TIELOW, SPACER, ANTENNACELL, or WELLTAP.

+
+

ENDCAP

+
+

Required and can be PRE, POST, TOPLEFT, TOPRIGHT, BOTTOMLEFT, or BOTTOMRIGHT.

+
+

lefwMacroEEQ

+

Writes an EEQ statement. The EEQ statement is optional and can be used only once in a MACRO section.

+

Syntax

+
+ int lefwMacroEEQ(
const char* macroName) +
+

Arguments

+

+ + macroName +

+
Specifies that the macro being defined should be electrically equivalent to the previously defined macroName.
+

lefwMacroForeign

+

Writes a FOREIGN statement. The FOREIGN statement is optional and can be used more than once in a MACRO section.

+

Syntax

+
+ int lefwMacroForeign(
const char* cellName,
double xl,
double yl,
int orient) +
+

Arguments

+

+ + cellName +

+
Specifies which foreign (GDSII) system name to use when placing an instance of this macro.
+

+ + xl yl +

+
Optional arguments that specify the macro origin (lower left corner when the macro is in north orientation) offset from the foreign origin. Specify 0 to ignore these arguments.
+

+ + orient +

+
Optional argument that specifies the orientation of the foreign cell when the macro is in north orientation. Specify -1 to ignore this argument.
Value: 0 to 7. For more information, see "Orientation Codes".
+

lefwMacroForeignStr

+

Also writes a FOREIGN statement. This routine is the same as the lefwMacroForeign routine with the exception of the orient argument, which takes a string instead of an integer. The FOREIGN statement is optional and can be used more than once in a MACRO section.

+

Syntax

+
+ int lefwMacroForeignStr(
const char* cellName,
double xl,
double yl,
const char* orient) +
+

Arguments

+

+ + cellName +

+
Specifies which foreign (GDSII) system name to use when placing an instance of this macro.
+

+ + xl yl +

+
Optional arguments that specify the macro origin (lower left corner when the macro is in north orientation) offset from the foreign origin. Specify 0 to ignore these arguments.
+

+ + orient +

+
Optional argument that specifies the orientation of the foreign cell when the macro is in north orientation. Specify "" to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+

lefwMacroOrigin

+

Writes an ORIGIN statement. The ORIGIN statement is optional and can be used only once in a MACRO section.

+

Syntax

+
+ int lefwMacroOrigin(
double xl,
double yl) +
+

Arguments

+

+ + xl, yl +

+
Specifies the origin of the macro. xl, yl is the lower left corner point of the macro. The coordinates for macro sites, ports, and obstructions are specified with respect to the macro origin. The origin itself is specified with respect to the lower left corner of the bounding box of the sites of the macro.
+

lefwMacroSite

+

Writes a SITE statement. The SITE statement is optional and can be used more than once in a MACRO section.

+

Syntax

+
+ int lefwMacroSite(
const char* siteName) +
+

Arguments

+

+ + siteName +

+
Specifies the site associated with the macro.
+

lefwMacroSitePattern

+

Writes a SITE statement that includes a site pattern. The site pattern indicates that the cell is a gate-array cell rather that a row-based standard cell. The SITE statement is optional and can be used more than once in a MACRO section.

+

Syntax

+
+ lefwMacroSitePattern(
const char* name,
double origX,
double orgY,
int orient,
int numX,
int numY,
double spaceX,
double spaceY) +
+

Arguments

+

+ + name +

+
Specifies the site associated with the macor.
+

+ + origX origY +

+
Optional arguments that specify the origin of the site inside the macro. Specify 0 to ignore these arguments.
+

+ + orient +

+
Optional argument that specifies the orientation of the site at that location. Specify -1 to ignore this argument.
Value: 0 to 7. For more information, see "Orientation Codes".
+

+ + numX numY +

+
Optional arguments that specify the number of sites to add in the x and y directions. Specify 0 to ignore these arguments.
+

+ + spaceX spaceY +

+
Optional arguments that specify the spacing between sites in the x and y directions. Specify 0 to ignore these arguments.
+

lefwMacroSitePatternStr

+

Also writes a SITE statement that includes a site pattern. This routine is the same as the lefwMacroSitePattern routine with the exception of the orient argument, which takes a string instead of an integer. The SITE statement is optional and can be used more than once in a MACRO section.

+

Syntax

+
+ lefwMacroSitePatternStr(
const char* name,
double origX,
double orgY,
int orient,
int numX,
int numY,
double spaceX,
double spaceY) +
+

Arguments

+

+ + name +

+
Specifies the site associated with the macor.
+

+ + origX origY +

+
Optional arguments that specify the origin of the site inside the macro. Specify 0 to ignore these arguments.
+

+ + orient +

+
Optional argument that specifies the orientation of the site at that location. Specify "" to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+

+ + numX numY +

+
Optional arguments that specify the number of sites to add in the x and y directions. Specify 0 to ignore these arguments.
+

+ + spaceX spaceY +

+
Optional arguments that specify the spacing between sites in the x and y directions. Specify 0 to ignore these arguments.
+

lefwMacroSize

+

Writes a SIZE statement. The SIZE statement is required and can be used only once in a MACRO section.

+

Syntax

+
+ int lefwMacroSize(
double width,
double height) +
+

Arguments

+

+ + width, height +

+
Specify the minimum bounding rectangle, in microns, for the macro. The bounding rectangle should be a multiple of the placement grid.
+

lefwMacroSymmetry

+

Writes a SYMMETRY statement. The SYMMETRY statement is optional and can be used only once in a MACRO section.

+

Syntax

+
+ int lefwMacroSymmetry(
const char* symmetry) +
+

Arguments

+

+ + symmetry +

+
Specifies the allowable orientations for the macro.
Value: X, Y, or R90
+

lefwStartMacroDensity

+

Starts a DENSITY statement in the MACRO statement.The DENSITY statement is optional and can be used only once in a MACRO statement.

+

Each DENSITY statement must start with this routine and end with the lefwEndMacroDensity routine. Each DENSITY statement also must include at least one lefwMacroDensityLayerRect routine.

+

Syntax

+
+ lefwStartMacroDensity(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the density rectangles.
+

lefwMacroDensityLayerRect

+

Writes a RECT statement in the DENSITY statement. The RECT statement is required and can be used more than once in a DENSITY statement.

+

Syntax

+
+ lefwMacroDensityLayerRect(
double x1,
double y1,
double x2,
double y2,
double densityValue) +
+

Arguments

+

+ + x1 y1 x2 y2 +

+
Specifies the coordinates of a rectangle.
+

+ + densityValue +

+
Specifies the percentage density of the rectangle.
Value: 0 to 100
+

lefwEndMacroDensity

+

Ends the DENSITY statement.

+

Syntax

+
+ lefwEndMacroDensity() +
+

Macro Examples

+

The following example shows a callback routine with the type lefwMacroCbkType. This example shows function calls to create a macro. It does not include function calls to create a macro obstruction. For an example of how to create a macro obstruction, see the Macro Obstruction section. This example only shows the usage of some functions related to Macro.

+
+ int macroCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
double *xpath;
double *ypath;
// Check if the type is correct
if (type != lefwMacroCbkType) {
printf("Type is not lefwMacroCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartMacro("INV");
CHECK_RES(res);
res = lefwMacroClass("CORE", NULL);
CHECK_RES(res);
res = lefwMacroForeign("INVS", 0, 0, -1);
CHECK_RES(res);
res = lefwMacroPower(1.0);
CHECK_RES(res);
res = lefwMacroSize(67.2, 24);
CHECK_RES(res);
res = lefwMacroSymmetry("X Y R90");
CHECK_RES(res);
res = lefwMacroSite("CORE1");
CHECK_RES(res);
return 0;} +
+

Macro Obstruction

+

Macro obstruction routines write an OBS (macro obstruction) section, which further defines a macro. An OBS section is optional and can be used more than once in a MACRO section. For syntax information about the LEF OBS section, see "Macro Obstruction Statement" in the
LEF/DEF Language Reference.

+

You must use the lefwStartMacroObs and lefwEndMacroObs routines to start and end the OBS section. The remaining macro obstruction routines described in this section must be included between these routines.

+

For examples of the routines described here, see "Macro Obstruction Examples".

+

All routines return 0 if successful.

+

lefwStartMacroObs

+

Starts the OBS section in a MACRO section. This routine is required for each OBS section, and can be used more than once in a MACRO section.

+

Syntax

+
+ int lefwStartMacroObs() +
+

lefwEndMacroObs

+

Ends the OBS section.

+

Syntax

+
+ int lefwEndMacroObs() +
+

lefwMacroObsDesignRuleWidth

+

Writes a DESIGNRULEWIDTH statement. Either a LAYER statement, a DESIGNRULEWIDTH statement, or a VIA statement must be defined within an OBS section and can be used more than once.

+

Syntax

+
+ int lefwMacroObsDesignRuleWidth(
const char* layerName
double width) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which the geometry lies.
+

+ + width +

+
Optional argument that specifies the effective design rule width. If specified, the obstruction is treated as a shape of this width for all spacing checks. Specify 0 to ignore this argument.
+

lefwMacroObsLayer

+

Writes a LAYER statement. Either a LAYER statement, a DESIGNRULEWIDTH statement, or a VIA statement must be defined within an OBS section and can be used more than once.

+

Syntax

+
+ int lefwMacroObsLayer(
const char* layerName,
double spacing) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to place the obstruction.
+

+ + spacing +

+
Optional argument that specifies the minimum spacing allowed between this obstruction and any other shape. Specify 0 to ignore this argument.
+

lefwMacroObsLayerPath

+

Writes a PATH statement. Either a PATH, POLYGON, or RECT statement must follow a LAYER statement and can be used more than once.

+

Syntax

+
+ int lefwMacroObsLayerPath(
int num_paths,
double* xl,
double* yl,
int numX,
int numY,
double spaceX,
double spaceY) +
+

Arguments

+

+ + numPaths +

+
Specifies the number of paths to create.
+

+ + x1 y1 +

+
Creates a path between the specified points. The path automatically extends the length by half of the current width on both end points to form a rectangle. (A previous WIDTH statement is required.) The line between each pair of points must be parallel to the x or y axis (45-degree angles are not allowed).
+

+ + numX numY spaceX spaceY +

+
Optional arguments that specify the PATH ITERATE statement. numX and numy specify the number of columns and rows of points that make up the array. spaceX and spaceY specify the spacing, in distance units, between the columns and rows. Specify 0 to ignore these arguments.
+

lefwMacroObsLayerPolygon

+

Writes a POLYGON statement. Either a PATH, POLYGON, or RECT statement must follow a LAYER statement and can be used more than once.

+

Syntax

+
+ int lefwMacroObsLayerPolygon(
int num_polys,
double* xl,
double* yl,
int numX,
int numY,
double spaceX,)
double spaceY) +
+

Arguments

+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + x1 y1 +

+
Specifies a sequence of points to generate a polygon geometry. Every polygon edge must be parallel to the x or y axis, or at a 45-degree angle.
+

+ + numX numY spaceX spaceY +

+
Optional arguments that specify the POLYGON ITERATE statement. numX and numy specify the number of columns and rows of points that make up the array. spaceX and spaceY specify the spacing, in distance units, between the columns and rows. Specify 0 to ignore these arguments.
+

lefwMacroObsLayerRect

+

Writes a RECT statement. Either a PATH, POLYGON, or RECT statement must follow a LAYER statement and can be used more than once.

+

Syntax

+
+ int lefwMacroObsLayerRect(
double xl1,
double yl1,
double xl2,
double yl2,
int numX,
int numY,)    
double spaceX,
double spaceY) +
+

Arguments

+

+ + xl1 yl1 xl2 yl2 +

+
Specifies a rectangle in the current layer, where the points specified are opposite corners of the rectangle.
+

+ + numX numY spaceX spaceY +

+
Optional arguments that specify the RECT ITERATE statement. numX and numy specify the number of columns and rows of points that make up the array. spaceX and spaceY specify the spacing, in distance units, between the columns and rows. Specify 0 to ignore these arguments.
+

lefwMacroObsLayerWidth

+

Writes a WIDTH statement. The WIDTH statement is optional and can be used only once in an LAYER section.

+

Syntax

+
+ int lefwMacroObsLayerWidth(
double width) +
+

Arguments

+

+ + width +

+
Specifies the width that the PATH statements use.
+

lefwMacroObsVia

+

Writes a VIA statement. Either a LAYER statement, a DESIGNRULEWIDTH statement, or a VIA statement must be defined within an OBS section and can be used more than once.

+

Syntax

+
+ int lefwMacroObsVia(
double xl,
double yl,
const char* viaName,
int numX,
int numY,
double spaceX,)
double spaceY) +
+

Arguments

+

+ + x1 y1 +

+
Specify the location to place the via.
+

+ + viaName +

+
Specifies the name of the via to place.
+

+ + numX numY spaceX spaceY +

+
Optional arguments that specify the VIA ITERATE statement. numX and numy specify the number of columns and rows of points that make up the array. spaceX and spaceY specify the spacing, in distance units, between the columns and rows. Specify 0 to ignore these arguments.
+

Macro Obstruction Examples

+

The following example only shows the usage of some functions related to Macro Obstruction. This example is part of the Macro callback routine.

+
+ int macroCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
double *xpath;
double *ypath;
...
res = lefwStartMacroObs();
CHECK_RES(res);
res = lefwMacroObsLayer("M1", 0);
CHECK_RES(res);
res = lefwMacroObsLayerRect(24.1, 1.5, 43.5, 208.5, 0,
    0, 0, 0);
CHECK_RES(res);
xpath = (double*)malloc(sizeof(double)*2);
ypath = (double*)malloc(sizeof(double)*2);
xpath[0] = 8.4;
ypath[0] = 3;
xpath[1] = 8.4;
ypath[1] = 124;
res = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0);
CHECK_RES(res);
free((char*)xpath);
free((char*)ypath);
res = lefwEndMacroObs();
CHECK_RES(res);
...
return 0;} +
+

Macro Pin

+

Macro Pin routines write a PIN section, which further defines a macro. A PIN section is optional in each MACRO section and can be defined more than once in a MACRO section. For syntax information about the LEF PIN section, see "Macro Pin Statement" in the LEF/DEF Language Reference.

+

You must use the lefwStartMacroPin and lefwEndMacroPin routines to start and end the PIN section. The remaining macro pin routines must be included between these routines.

+

For examples of the routines described here, see "Macro Pin Examples".

+

In addition to the routines described in this section, you can include a PORT section within a PIN section. For more information about these routines, see "Macro Pin Port".

+

All routines return 0 if successful.

+

lefwStartMacroPin

+

Starts the PIN section in a MACRO section. This routine is required for each PIN section and can be used more than once in a MACRO section.

+

Syntax

+
+ int lefwStartMacroPin(
const char* pinName) +
+

Arguments

+

+ + pinName +

+
Specifies the name of the library pin.
+

lefwEndMacroPin

+

Ends the PIN section for the specified pin.

+

Syntax

+
+ int lefwEndMacroPin(
const char* pinName) +
+

Arguments

+

+ + pinName +

+
Specifies the name of the library pin.
+

lefwMacroPinAntennaDiffArea

+

Writes an ANTENNADIFFAREA statement. The ANTENNADIFFAREA statement is optional and can be used more than once in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaDiffArea(
double value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the diffusion area, in micron-squared units, to which the pin is connected on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. If you do not specify a layer name, value applies to all layers. Specify NULL to ignore this argument.
+

lefwMacroPinAntennaGateArea

+

Writes an ANTENNAGATEAREA statement. The ANTENNAGATEAREA statement is optional and can be used once after each lefwMacroPinAntennaModel routine in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaGateArea(
double value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the gate area, in micron-squared units, to which the pin is connected on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. If you do not specify a layer name, value applies to all layers. Specify NULL to ignore this argument.
+

lefwMacroPinAntennaMaxAreaCar

+

Writes an ANTENNAMAXAREACAR statement. The ANTENNAMAXAREACAR statement is optional and can be used once after each lefwMacroPinAntennaModel routine in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaMaxAreaCar(
double value,
const char* layerName) +
+

Arguments

+

+ + value +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value on the specified layerName, using the cut area below the current pin layer.
+

+ + layerName +

+
Specifies the layer.
+

lefwMacroPinAntennaMaxCutCar

+

Writes an ANTENNAMAXCUTCAR statement. The ANTENNAMAXCUTCAR statement is optional and can be used once after each lefwMacroPinAntennaModel routine in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaMaxCutCar(
double value,
const char* layerName) +
+

Arguments

+

+ + value +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value on the specified layerName, using the cut area below the current pin layer.
+

+ + layerName +

+
Specifies the layer.
+

lefwMacroPinAntennaMaxSideAreaCar

+

Writes an ANTENNAMAXSIDEAREACAR statement. The ANTENNAMAXSIDEAREACAR statement is optional and can be used once after each lefwMacroPinAntennaModel routine in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaMaxSideAreaCar(
double value,
const char* layerName) +
+

Arguments

+

+ + value +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value on the specified layerName, using the metal side wall area below the current pin layer.
+

+ + layerName +

+
Specifies the layer.
+

lefwMacroPinAntennaModel

+

Writes an ANTENNAMODEL statement. The ANTENNAMODEL statement is optional and can be used more than once in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaModel(
const char* oxide) +
+

Arguments

+

+ + oxide +

+
Specifies the oxide model for the pin. Each model can be specified once per layer. If you specify an ANTENNAMODEL statement, that value affects all ANTENNAGATEAREA and ANTENNA*CAR statements for the pin that follow it until you specify another ANTENNAMODEL statement.
Value: OXIDE1, OXIDE2, OXIDE3, or OXIDE4

Note: OXIDE1 and OXIDE2 are currently supported. If you specify OXIDE3 or OXIDE4, current tools parse and ignore them.
+

lefwMacroPinAntennaPartialCutArea

+

Writes an ANTENNAPARTIALCUTAREA statement. The ANTENNAPARTIALCUTAREA statement is optional and can be used more than once in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaPartialCutArea(
double value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the partial cut area, which is above the current pin layer and inside, or outside, the macro on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. If you specify a layer name, value applies to antennas on that layer only. If you do not specify a layer name, value applies to all layers. Specify NULL to ignore this argument.
+

lefwMacroPinAntennaPartialMetalArea

+

Writes an ANTENNAPARTIALMETALAREA statement. The ANTENNAPARTIALMETALAREA statement is optional and can be used more than once in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaPartialMetalArea(
double value,
const char* layerName) +
+

Argument

+

+ + value +

+
Specifies the partial metal area, which is connected directly to the I/O pin and the inside, or outside, of the macro on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. If you do not specify a layer name, value applies to all layers. Specify NULL to ignore this argument.
+

lefwMacroPinAntennaPartialMetalSideArea

+

Writes an ANTENNAPARTIALMETALSIDEAREA statement. The ANTENNAPARTIALMETALSIDEAREA statement is optional and can be used more than once in a PIN section.

+

Syntax

+
+ int lefwMacroPinAntennaPartialMetalSideArea(
double value,
const char* layerName) +
+

Arguments

+

+ + value +

+
Specifies the partial metal side wall area, which is connected directly to the I/O pin and inside, or outside, of the macro on a layer.
+

+ + layerName +

+
Optional argument that specifies the layer. If you do not specify a layer name, value applies to all layers. Specify NULL to ignore this argument.
+

lefwMacroPinDirection

+

Writes a DIRECTION statement. The DIRECTION statement is optional and can be used only once in a PIN section.

+

Syntax

+
+ int lefwMacroPinDirection(
const char* direction) +
+

Arguments

+

+ + direction +

+
Specifies the pin type.
Value: INPUT, OUTPUT, OUTPUT TRISTATE, INOUT, or FEEDTHRU
+

lefwMacroPinGroundSensitivity

+

Writes a GROUNDSENSITIVITY statement. The GROUNDSENSITIVITY statement is optional and can be used only once in a PIN section.

+

Syntax

+
+ lefwMacroPinGroundSensitivity(
const char* pinName) +
+

Arguments

+

+ + pinName +

+
Specifies that if this pin is connected to a tie-low connection (such as 1'b0 in Verilog), it should connect to the same net to which pinName is connected.
+

lefwMacroPinMustjoin

+

Writes a MUSTJOIN statement. The MUSTJOIN statement is optional and can be used only once in a PIN section.

+

Syntax

+
+ int lefwMacroPinMustjoin(
const char* pinName) +
+

Arguments

+

+ + pinName +

+
Specifies the name of another pin in the cell that must be connected with the pin being defined.
+

lefwMacroPinNetExpr

+

Wries a NETEXPR statement in a PIN section. The NETEXPR statement is optional and can be used only once in a PIN section.

+

Syntax

+
+ lefwMacroPinNetExpr(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies a net expression property name (such as power1 or power2). If name matches a net expression property in the netlist (such as in Verilog, VHDL, or OpenAccess), then the property is evaluated, and the software identifies a net to which to connect this pin.
+

lefwMacroPinShape

+

Writes a SHAPE statement. The SHAPE statement is optional and can be used only once in a PIN section.

+

Syntax

+
+ int lefwMacroPinShape(
const char* name) +
+

Arguments

+

+ + name +

+
Specifies a pin with special connection requirements because of its shape.
Value: ABUTMENT, RING, or FEEDTHRU
+

lefwMacroPinSupplySensitivity

+

Writes a SUPPLYSENSITIVITY statement. The SUPPLYSENSITIVITY statement is optional and can be used only once in a PIN section.

+

Syntax

+
+ lefwMacroPinSupplySensitivity(
const char* pinName) +
+

Arguments

+

+ + pinName +

+
Specifies that if this pin is connected to a tie-high connection (such as 1'b1 in Verilog), it should connect to the same net to which pinName is connected.
+

lefwMacroPinTaperRule

+

Writes a TAPERRULE statement. The TAPERRULE statement is optional and can be used only once in a PIN section.

+

Syntax

+
+ int lefwMacroPinTaperRule(
const char* ruleName) +
+

Arguments

+

+ + ruleName +

+
Specifies the nondefault rule to use when tapering wires to the pin.
+

lefwMacroPinUse

+

Writes a USE statement. The USE statement is optional and can be used only once in a PIN section.

+

Syntax

+
+ int lefwMacroPinUse(
const char* use) +
+

Arguments

+

+ + use +

+
Specifies how the pin is used.
Value: SIGNAL, ANALOG, POWER, GROUND, or CLOCK
+

Macro Pin Examples

+

The following example only shows the usage of some functions related to Macro Pin.This example is part of the Macro callback routine.

+
+ int macroCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
...
res = lefwStartMacroPin("Z");
CHECK_RES(res);
res = lefwMacroPinDirection("OUTPUT");
CHECK_RES(res);
res = lefwMacroPinUse("SIGNAL");
CHECK_RES(res);
res = lefwMacroPinShape("ABUTMENT");
CHECK_RES(res);
res = lefwMacroPinPower(0.1);
CHECK_RES(res);
res = lefwStartMacroPinPort(NULL);
CHECK_RES(res);
res = lefwEndMacroPin("Z");
CHECK_RES(res);
...
return 0;} +
+

Macro Pin Port

+

Macro Pin Port routines write a PORT section, which further defines a macro pin. The PORT section is required for each PIN section and can be used more than once in a PIN section. For syntax information about the LEF PIN section, see "Macro Pin Statemen"t in the LEF/DEF Language Reference.

+

You must use the lefwStartMacroPinPort and lefwEndMacroPinPort routines to start and end the PORT section. The lefwStartMacroPinPort routine must be called after the lefwStartMacroPin routine.The remaining port routines must be included between these routines.

+

For examples of the routines described here, see "Macro Pin Port Examples".

+

All routines return 0 if successful.

+

lefwStartMacroPinPort

+

Starts the PORT section.

+

Syntax

+
+ int lefwStartMacroPinPort(
const char* classType) +
+

Arguments

+

+ + classType +

+
Optional argument that specifies whether or not the port is a core port.
Value: NONE or CORE.
+

lefwEndMacroPinPort

+

Ends the PORT section.

+

Syntax

+
+ int lefwEndMacroPinPort() +
+

lefwMacroPinPortDesignRuleWidth

+

Writes a DESIGNRULEWIDTH statement. Either a LAYER statement, a DESIGNRULEWIDTH statement, or a VIA statement must be defined in a PORT section and can be used more than once.

+

Syntax

+
+ int lefwMacroPinPortDesignRuleWidth(
const char* layerName,
double width) +
+

Argument

+

+ + layerName +

+
Specifies the layer on which to place the geometry.
+

+ + width +

+
Optional argument that specifies the effective design rule width. If specified, the router uses the spacing defined in the layer section that corresponds to width. Specify 0 to ignore this argument.
+

lefwMacroPinPortLayer

+

Writes a LAYER statement in the PORT section. Either a LAYER statement, a DESIGNRULEWIDTH statement, or a VIA statement must be defined in a PORT section and can be used more than once.

+

Syntax

+
+ int lefwMacroPinPortLayer(
const char* layerName,
double spacing) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to place the geometry.
+

+ + spacing +

+
Optional argument that specifies the minimum spacing allowed between this geometry and any other shape. Specify 0 to ignore this argument.
+

lefwMacroPinPortLayerPath

+

Writes a PATH statement. Either a PATH, POLYGON, or RECT statement must follow a LAYER statement.

+

Syntax

+
+ int lefwMacroPinPortLayerPath(
int num_paths,
double* xl,
double* yl,
int numX,
int numY,
double spaceX,
double spaceY) +
+

Arguments

+

+ + numPaths +

+
Specifies the number of paths to create.
+

+ + x1 y1 +

+
Create a path between the specified points. The path automatically extends the length by half of the current width on both end points to form a rectangle. (A previous WIDTH statement is required.) The line between each pair of points must be parallel to the x or y axis (45-degree angles are not allowed).
+

+ + numX numY spaceX spaceY +

+
Optional arguments that specify the PATH ITERATE statement. numX and numy specify the number of columns and rows of points that make up the array. spaceX and spaceY specify the spacing, in distance units, between the columns and rows. Specify 0 to ignore these arguments.
+

lefwMacroPinPortLayerPolygon

+

Writes a POLYGON statement. Either a PATH, POLYGON, or RECT statement must follow a LAYER statement.

+

Syntax

+
+ int lefwMacroPinPortLayerPolygon(
int num_polys,
double* xl,
double* yl,
int numX,
int numY,
double spaceX,
double spaceY) +
+

Arguments

+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + x1 y1 +

+
Specifies a sequence of points to generate a polygon geometry. Each polygon edge must be parallel to the x or y axis, or at a 45-degree angle.
+

+ + numX numY spaceX spaceY +

+
Optional arguments that specify the POLYGON ITERATE statement. numX and numy specify the number of columns and rows of points that make up the array. spaceX and spaceY specify the spacing, in distance units, between the columns and rows. Specify 0 to ignore these arguments.
+

lefwMacroPinPortLayerRect

+

Writes a RECT statement. Either a PATH, POLYGON, or RECT statement must follow a LAYER statement.

+

Syntax

+
+ int lefwMacroPinPortLayerRect(
double xl1,
double yl1,
double xl2,
double yl2,
int numX,
int numY,
double spaceX,
double spaceY) +
+

Arguments

+

+ + xl1 yl1 xl2 yl2 +

+
Specifies a rectangle in the current layer, where the points specified are opposite corners of the rectangle.
+

+ + numX numY spaceX spaceY +

+
Optional arguments that specify the RECT ITERATE statement. numX and numy specify the number of columns and rows of points that make up the array. spaceX and spaceY specify the spacing, in distance units, between the columns and rows. Specify 0 to ignore these arguments.
+

lefwMacroPinPortLayerWidth

+

Writes a WIDTH statement. The WIDTH statement is optional and can be used only once in a PORT section.

+

Syntax

+
+ int lefwMacroPinPortLayerWidth(
double width) +
+

Arguments

+

+ + width +

+
Specifies the width that the PATH statements use.
+

lefwMacroPinPortVia

+

Writes a VIA statement. Either a LAYER statement, a DESIGNRULEWIDTH statement, or a VIA statement must be defined in a PORT section and can be used more than once.

+

Syntax

+
+ int lefwMacroPinPortVia(
double xl,
double yl,
const char* viaName,
int numX,
int numY,
double spaceX,
double spaceY) +
+

Arguments

+

+ + x1 y1 +

+
Specify the location to place the via.
+

+ + viaName +

+
Specifies the name of the via to place.
+

+ + numX numY spaceX spaceY +

+
Optional arguments that specify the VIA ITERATE statement. numX and numy specify the number of columns and rows of points that make up the array. spaceX and spaceY specify the spacing, in distance units, between the columns and rows. Specify 0 to ignore these arguments.
+

Macro Pin Port Examples

+

The following example only shows the usage of some functions related to Macro Pin Port. This example is part of the Macro callback routine.

+
+ int macroCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
double *xpath;
double *ypath;
...
res = lefwStartMacroPin("Z");
CHECK_RES(res);
...
res = lefwStartMacroPinPort(NULL);
CHECK_RES(res);
res = lefwMacroPinPortLayer("M2", 5.6);
CHECK_RES(res);
xpath = (double*)malloc(sizeof(double)*3);
ypath = (double*)malloc(sizeof(double)*3);
xpath[0] = 30.8;
ypath[0] = 9;
xpath[1] = 42;
ypath[1] = 9;
xpath[2] = 30.8;
ypath[2] = 9;
res = lefwMacroPinPortLayerPath(3, xpath, ypath, 0, 0,
    0, 0);
CHECK_RES(res);
res = lefwEndMacroPinPort();
CHECK_RES(res);
...
res = lefwEndMacroPin("Z");
CHECK_RES(res);
free((char*)xpath);
free((char*)ypath);
...
return 0;} +
+

Manufacturing Grid

+

The Manufacturing Grid routine writes a LEF MANUFACTURINGGRID statement. The MANUFACTURINGGRID statement is optional and can be used only once in a LEF file. For syntax information about the MANUFACTURINGGRID statement, see "Manufacturing Grid" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

lefwManufacturingGrid

+

Writes a MANUFACTURINGGRID statement.

+

Syntax

+
+ int lefwManufacturingGrid(
double grid) +
+

Arguments

+

+ + grid +

+
Specifies the value for the manufacturing grid. You must specify a positive number for a value.
+

Maximum Via Stack

+

The Maximum Stack Via routine writes a LEF MAXVIASTACK statement. The MAXVIASTACK statement is optional and can be used only once in a LEF file. For syntax information about the MAXVIASTACK statement, see "Maximum Via Stack" in the LEF/DEF Language Reference.

+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
+ The lefwMaxviastack routine must be used only after all layer routines are used. +
+
+

This routine returns 0 if successful.

+

lefwMaxviastack

+

Writes a MAXVIASTACK statement.

+

Syntax

+
+ int lefwMaxviastack(
int value,
const char* bottomlayer,
const char* topLayer) +
+

Arguments

+

+ + value +

+
Specifies the maximum allowed number of single-stacked vias.
+

+ + bottomLayer +

+
Optional argument that specifies the bottom layer in a range of layers for which the maximum stacked via rule applies. Specify NULL to ignore this argument.
+

+ + topLayer +

+
Optional argument that specifies the top layer in a range of layers for which the maximum stacked via rule applies. Specify NULL to ignore this argument.
+

Nondefault Rule

+

Nondefault Rule routines write a LEF NONDEFAULTRULE statement. The NONDEFAULTRULE statement is optional and can be used only once in a LEF file. For syntax information about the LEF NONDEFAULTRULE statement, see "Nondefault Rule" in the LEF/DEF Language Reference.

+

You must use the lefwStartNondefaultRules and lefwEndNondefaultRules routines to start and end the NONDEFAULTRULE section. The lefwNonDefaultRuleLayer routine must be included between these routines.

+

For examples of the routines described here, see "Nondefault Rules Example".

+

In addition to the routines described in this section, you can include a PROPERTY statement and a VIA statement within a NONDEFAULTRULE section. For more information about these routines, see "Property" , or "Via".

+

All routines return 0 if successful.

+

lefwStartNonDefaultRule

+

Starts the NONDEFAULTRULE statement.

+

Syntax

+
+ int lefwStartNonDefaultRule(
const char* ruleName) +
+

Arguments

+

+ + ruleName +

+
Specifies the name of the nondefault rule to define.
+

lefwEndNonDefaultRule

+

Ends the NONDEFAULTRULE statement for the specified ruleName.

+

Syntax

+
+ int lefwEndNonDefaultRule(
const char* ruleName) +
+

lefwNonDefaultRuleHardspacing

+

Writes a HARDSPACING statement. The HARDSPACING statement specifies that any spacing values that exceed the LEF LAYER spacing requirements are "hard" rules instead of "soft" rules. By default, routers treat extra spacing requirements as soft rules that are high cost to violate, but not real spacing violations. The HARDSPACING statement is optional and can be used only once in a NONDEFAULTRULE statement.

+

Syntax

+
+ lefwNonDefaultRuleHardspacing() +
+

lefwNonDefaultRuleLayer

+

Writes a LAYER statement in the NONDEFAULTRULE statement. The LAYER statement is required and can be used more than once in a NONDEFAULTRULE statement.

+

Syntax

+
+ int lefwNonDefaultRuleLayer(
const char* layerName,
double width,
double minSpacing,
double wireExtension,
double resistance,
double capacitance,
double edgecap) +
+

Arguments

+

+ + layerName +

+
Specifies the layer for the various width and spacing values. This layer must be a routing layer.
+

+ + minSpacing +

+
Optional argument that specifies the recommended minimum spacing for layerName for routes using this NONDEFAULTRULE to other geometries.
+

+ + width +

+
Specifies the required minimum width for layerName.
+

+ + wireExtension +

+
Optional argument that specifies the distance by which wires are extended at vias.The value must be greater than or equal to half of the routing width for the layer, as defined in the nondefault rule. Specify 0 to ignore this argument.
+

+ + resistance +

+
This argument is obsolete. Specify 0 to ignore this argument.
+

+ + capacitance +

+
This argument is obsolete. Specify 0 to ignore this argument.
+

+ + edgecap +

+
This argument is obsolete. Specify 0 to ignore this argument.
+

lefwNonDefaultRuleMinCuts

+

Wries a MINCUTS statement in the NONDEFAULTRULE statement. The MINCUTS statement is optional and can be used more than once in a NONDEFAULTRULE statement.

+

Syntax

+
+ lefwNonDefaultRuleMinCuts(
const char* layerName,
int numCuts) +
+

Arguments

+

+ + layerName +

+
Specifies the cut layer.
+

+ + numCuts +

+
Specifies the minimum number of cuts allowed for any via using layerName.
+

lefwNonDefaultRuleStartVia

+

Starts a VIA statement in the NONDEFAULTRULE statement. The VIA statement is optional and can be used more than once in a NONDEFAULTRULE statement.

+

Each VIA statement must start and end with the lefwNonDefaultRuleStartVia and lefwNonDefaultRuleEndVia routines. The following routines can be included within a VIA statement:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaLayer
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaLayerPolygon
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaLayerRect
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaResistance
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaViarule (and its related routines)
+
+

Syntax

+
+ lefwNonDefaultRuleStartVia(
const char* viaName,
const char* isDefault) +
+

Arguments

+

+ + viaName +

+
Specifies the name for the via.
+

+ + isDefault +

+
Identifies the via as the default via between the specified layers.
+ + + + + + + + + + + +
+
+

   

+
+

NULL

+
+

Ignores the argument.

+
+

    

+
+

DEFAULT

+
+

Identifies the via as the default via.

+
+

lefwNonDefaultRuleEndVia

+

Ends the VIA statement for the specified viaName. Each VIA statement must start and end with the lefwNonDefaultRuleStartVia and lefwNonDefaultRuleEndVia routines.

+

Syntax

+
+ lefwNonDefaultRuleEndVia(
const char* viaName) +
+

lefwNonDefaultRuleUseVia

+

Writes a USEVIA statement in a NONDEFAULTRULE statement. The USEVIA statement is optional and can be used more than once in a NONDEFAULTRULE statement.

+

Syntax

+
+ lefwNonDefaultRuleUseVia(
const char* viaName) +
+

Arguments

+

+ + viaName +

+
Specifies a previously defined via from the LEF VIA statement, or a previously defined NONDEFAULTRULE via to use with this routing rule.
+

lefwNonDefaultRuleUseViaRule

+

Wrties a USEVIARULE statement in the NONDEFAULTRULE statement. The USEVIARULE statement is optional and can be used more than once in a NONDEFAULTRULE statement.

+

Syntax

+
+ lefwNonDefaultRuleUseViaRule(
const char* viaRuleName) +
+

Arguments

+

+ + viaRuleName +

+
Specifies a previously defined VIARULE GENERATE rule to use with this routing rule. You cannot specify a rule from a VIARULE without a GENERATE keyword.
+

Nondefault Rules Example

+

The following example shows a callback routine with the type lefwNonDefaultCbkType. This example does not include information on how to create a via within the nondefault rule. For an example of how to create a via, see the Via section.

+
+ int nonDefaultCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwNonDefaultCbkType) {
printf("Type is not lefwNonDefaultCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartNonDefaultRule("RULE1");
CHECK_RES(res);
res = lefwNonDefaultRuleLayer("RX", 10.0, 2.2, 6);
CHECK_RES(res);
res = lefwNonDefaultRuleLayer("PC", 10.0, 2.2, 0);
CHECK_RES(res);
res = lefwEndNonDefaultRule("RULE1");
CHECK_RES(res);
return 0;} +
+

Property

+

The Property routines write a LEF PROPERTY statement in a VIA, VIARULE, LAYER, MACRO, or NONDEFAULTRULE section. The PROPERTY statement is optional and can be used more than once in these sections.

+

For examples of the routines described here, see "Property Example".

+

All routines return 0 if successful.

+

lefwIntProperty

+

Writes a PROPERTY statement that defines a named property with an integer value. The PROPERTY statement is optional and can be used more than once in a LEF file.

+

Syntax

+
+ int lefwIntProperty(
const char* propName,
int propValue) +
+

Arguments

+

+ + propName +

+
Specifies the name of the property.
+

+ + propValue +

+
Specifies an integer value.
+

lefwRealProperty

+

Writes a PROPERTY statement that defines a named property with a real number value. The PROPERTY statement is optional and can be used more than once in a LEF file.

+

Syntax

+
+ int lefwRealProperty(
const char* propName,
double propValue) +
+

Arguments

+

+ + propName +

+
Specifies the name of the property.
+

+ + propValue +

+
Specifies a real value.
+

lefwStringProperty

+

Writes a PROPERTY statement that defines a named property with a string value. The PROPERTY statement is optional and can be used more than once in a LEF file.

+

Syntax

+
+ int lefwStringProperty(
const char* propName,
const char* propValue) +
+

Arguments

+

+ + propName +

+
Specifies the name of the property.
+

+ + propValue +

+
Specifies a string value.
+

Property Example

+

The following example shows how to create property inside a Macro callback routine. It can be used for Layer, Via, Via Rule, Via within the Nondefault Rule, and Macro.

+
+ int macroCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
...
res = lefwStringProperty("TYPE", "special");
CHECK_RES(res);
res = lefwIntProperty("intProp", 23);
CHECK_RES(res);
res = lefwRealProperty("realProp", 24.25);
CHECK_RES(res);
...
return 0;} +
+

Property Definitions

+

Property Definitions routines write a LEF PROPERTYDEFINTIONS statement. The PROPERTYDEFINTIONS statement is optional and can be used only once in a LEF file. For syntax information about the LEF PROPERTYDEFINTIONS statement, see "Property Definitions" in the LEF/DEF Language Reference.

+

You must use the lefwStartPropDef and lefwEndPropDef routines to start and end the PROPERTYDEFINTIONS statement. The lefwPropDef routine must be included between these routines.

+

For examples of the routines described here, see "Property Definitions Examples".

+

All routines return 0 if successful.

+

lefwStartPropDef

+

Starts the PROPERTYDEFINTIONS statement.

+

Syntax

+
+ int lefwStartPropDef() +
+

lefwEndPropDef

+

Ends the PROPERTYDEFINTIONS statement.

+

Syntax

+
+ int lefwEndPropDef( +
+

lefwIntPropDef

+

Writes an integer property definition in the PROPERTYDEFINITIONS statement. The lefwIntProperty routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.

+

Syntax

+
+ int lefwIntPropDef(
const char* objType,
const char* propName,
double leftRange,
double rightRange,
int propValue) +
+

Arguments

+

+ + leftRange rightRange +

+
Optional arguments that limit integer property values to a specified range. Specify 0 to ignore these arguments.
+

+ + objType +

+
Specifies the object type for which you are defining properties.
Value: LIBRARY, LAYER, VIA, VIARULE, NONDEFAULTRULE, MACRO, or PIN
+

+ + propName +

+
Specifies a unique property name for the object type.
+

+ + propValue +

+
Optional argument that specifies an integer value for an object type. Specify NULL to ignore this argument.
+

lefwRealPropDef

+

Writes a real property definition in the PROPERTYDEFINITIONS statement. The lefwRealPropDef routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.

+

Syntax

+
+ int lefwRealPropDef(
const char* objType,
const char* propName,
double leftRange,
double rightRange,
int propValue) +
+

Arguments

+

+ + leftRange rightRange +

+
Optional arguments that limit real property values to a specified range. Specify 0 to ignore these arguments.
+

+ + objType +

+
Specifies the object type for which you are defining properties.
Value: LIBRARY, LAYER, VIA, VIARULE, NONDEFAULTRULE, MACRO, or PIN
+

+ + propName +

+
Specifies a unique property name for the object type.
+

+ + propValue +

+
Optional argument that specifies a real value for an object type. Specify NULL to ignore this argument.
+

lefwStringPropDef

+

Writes a string property definition in the PROPERTYDEFINITIONS statement. The lefwStringPropDef routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.

+

Syntax

+
+ int lefwStringPropDef(
const char* objType,
const char* propName,
double leftRange,
double rightRange,
int propValue) +
+

Arguments

+

+ + leftRange rightRange +

+
Optional arguments that limit property values to a specified range. Specify 0 to ignore these arguments.
+

+ + objType +

+
Specifies the object type for which you are defining properties.
Value: LIBRARY, LAYER, VIA, VIARULE, NONDEFAULTRULE, MACRO, or PIN
+

+ + propName +

+
Specifies a unique property name for the object type.
+

+ + propValue +

+
Optional argument that specifies a string value for an object type. Specify NULL to ignore this argument.
+

Property Definitions Examples

+

The following example shows a callback routine with the type lefwPropDefCbkType. This example does not show all of the combinations of Property Definitions defined.

+
+ int propDefCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwPropDefCbkType) {
printf("Type is not lefwPropDefCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartPropDef();
CHECK_RES(res);
res = lefwStringPropDef("LIBRARY", "NAME", 0, 0,
    "Cadence96");
CHECK_RES(res);
res = lefwIntPropDef("LIBRARY", "intNum", 0, 0, 20);
CHECK_RES(res);
res = lefwRealPropDef("LIBRARY", "realNum", 0, 0, 21.22);
CHECK_RES(res);
res = lefwEndPropDef();
CHECK_RES(res);
return 0;} +
+

Same-Net Spacing

+

Same-Net Spacing routines write a LEF SPACING statement. The SPACING statement is optional and can be used only once in a LEF file. For syntax information about the LEF SPACING statement, see "Same-Net Spacing" in the LEF/DEF Language Reference.

+

You must use the lefwStartSpacing and lefwEndSpacing routines to start and end the SPACING statement. The lefwSpacing routine must be included between these routines.

+

For examples of the routines described here, see "Same-Net Spacing Examples".

+

All routines return 0 if successful.

+

lefwStartSpacing

+

Writes the SPACING statement.

+

Syntax

+
+ int lefwStartSpacing() +
+

lefwEndSpacing

+

Ends the SPACING statement.

+

Syntax

+
+ int lefwEndSpacing() +
+

lefwSpacing

+

Writes the SAMENET statement. The SAMENET statement is required and can be used more than once.

+

Syntax

+
+ int lefwSpacing(
const char* layerName1,
const char* layerName2,
double minSpace,
const char* stack) +
+

Arguments

+

+ + layerName1, layerName2 +

+
Specify the names of the layers for which the same-net spacing rule applies. You can specify spacing rules for routing layers and cut layers. For a routing layer, the same-net spacing rule is defined by specifying the same layer name twice.
+

+ + minSpace +

+
Specifies the minimum spacing.
+

+ + stack +

+
Optional argument that allows stacked vias at a routing layer. Specify NULL to ignore this argument.
+

Same-Net Spacing Examples

+

The following example shows a callback routine with the type lefwSpacingCbkType.

+
+ int spacingCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwSpacingCbkType) {
printf("Type is not lefwSpacingCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartSpacing();
CHECK_RES(res);
res = lefwSpacing("CUT01", "CA", 1.5, NULL);
CHECK_RES(res);
res = lefwEndSpacing();
CHECK_RES(res);
return 0;} +
+

Site

+

The Site routines write a LEF SITE statement. The SITE statement is optional and can be used more than once in a LEF file. For syntax information about the LEF SITE statement, see "Site" in the LEF/DEF Language Reference.

+

Each SITE statement must be defined with a lefwSite and lefwEndSite routine.

+

All routines return 0 if successful.

+

lefwSite

+

Writes a SITE statement.

+

Syntax

+
+ int lefwSite(
const char* siteName,
const char* classType,
const char* symmetry,
double width,
double height) +
+

Arguments

+

+ + classType +

+
Specifies whether the site is a core site or an I/O pad site.
Value: PAD or CORE.
+

+ + siteName +

+
Specifies the name of the placement site.
+

+ + symmetry +

+
Specifies how the site is symmetrical in normal orientation.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + +
+
+

     

+
+

X

+
+

Defines the site as symmetric about the x axis.

+
+

     

+
+

Y

+
+

Defines the site as symmetric about the y axis.

+
+

     

+
+

R90

+
+

Defines the site as symmetric when rotated 90 degrees.

+
+

+ + width, height +

+
Specify the dimensions of the site in normal (or north) orientation, in microns.
+

lefwEndSite

+

Ends a SITE statement.

+

Syntax

+
+ int lefwEndSite(
const char* siteName) +
+

Arguments

+

+ + siteName +

+
Specifies the name of the placement site.
+

lefwSiteRowPattern

+

Writes a ROWPATTERN statement in the SITE statement. The ROWPATTERN statement is optional and can be used more than once in a SITE statement.

+

Syntax

+
+ lefwSiteRowPattern( const char* siteName,
int orient) +
+

Arguments

+

+ + siteName +

+
Specifies the name of a previously defined site.
+

+ + orient +

+
Specifies the orientation for the previously defined site.
Value: 0 to 7. For more information, see "Orientation Codes".
+

lefwSiteRowPatternStr

+

Also writes a ROWPATTERN statement. This routine is the same as the lefwSiteRowPattern routine, with the exception of the orient argument, which takes a string instead of an integer. The ROWPATTERN statement is optional and can be used more than once in a SITE statement.

+

Syntax

+
+ lefwSiteRowPattern( const char* siteName,
int orient) +
+

Arguments

+

+ + siteName +

+
Specifies the name of a previously defined site.
+

+ + orient +

+
Specifies the orientation for the previously defined site.
Value: N, W, S, E, FN, FW, FS, or FE.
+

Site Examples

+

The following example shows a callback routine with the type lefwSiteCbkType.

+
+ int siteCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwSiteCbkType) {
printf("Type is not lefwSiteCbkType, terminate
        writing.\n");
return 1;
}
res = lefwSite("CORE1", "CORE", "X", 67.2, 6);
CHECK_RES(res);
return 0;} +
+

Units

+

Units routines write a LEF UNITS statement. The UNITS statement is optional and can be used only once in a LEF file. For syntax information about the LEF UNITS statement, see "Units" in the LEF/DEF Language Reference.

+

You must use the lefwStartUnits and lefwEndSpacing routines to start and end the UNITS statement. The lefwUnits routine must be included between these routines.

+

For examples of the routines described here, see "Units Examples".

+

All routines return 0 if successful.

+

lefwStartUnits

+

Starts the UNITS statement.

+

Syntax

+
+ int lefwStartUnits() +
+

lefwEndUnits

+

Ends the UNITS statement.

+

Syntax

+
+ int lefwEndUnits() +
+

lefwUnits

+

Writes a UNITS statement. The UNITS statement is required whenever the lefwStartSpacing routine is specified.

+

Syntax

+
+ int lefwUnits(
double time,
double capacitance,
double resistance,
double power,
double current,
double voltage,
double database) +
+

Arguments

+

+ + time +

+
Optional argument that specifies a TIME NANOSECONDS statement. This interprets one LEF time unit as one nanosecond. Specify 0 to ignore this argument.
+

+ + capacitance +

+
Optional argument that specifies a CAPACITANCE PICOFARADS statement. This interprets one LEF capacitance unit as one picofarad. Specify 0 to ignore this argument.
+

+ + resistance +

+
Optional argument that specifies a RESISTANCE OHMS statement. This interprets one LEF resistance unit as one ohm. Specify 0 to ignore this argument.
+

+ + power +

+
Optional argument that specifies a POWER MILLIWATTS statement. This interprets one LEF power unit as one milliwatt. Specify 0 to ignore this argument.
+

+ + current +

+
Optional argument that specifies a CURRENT MILLIAMPS statement. This interprets one LEF current unit as one milliamp. Specify 0 to ignore this argument.
+

+ + voltage +

+
Optional argument that specifies a VOLTAGE VOLTS statement. This interprets one LEF voltage unit as one volt. Specify 0 to ignore this argument.
+

+ + database +

+
Optional argument that specifies a DATABASE MICRONS statement. This interprets one LEF distance unit as multiplied when converted into database units. Specify 0 to ignore this argument.
+

lefwUnitsFrequency

+

Writes a FREQUENCY statement in the UNITS statement. The FREQUENCY statement is optional and can be used only once in a UNITS statement.

+

Syntax

+
+ int lefwUnitsFrequency(
double frequency) +
+

Arguments

+

+ + frequency +

+
Specifies a FREQUENCY MEGAHERTZ statement. This interprets one LEF frequency unit as one megahertz.
+

Units Examples

+

The following example shows a callback routine with the type lefwUnitsCbkType.

+
+ int unitsCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwUnitsCbkType) {
printf("Type is not lefwUnitsCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartUnits();
CHECK_RES(res);
res = lefwUnits(100, 10, 10000, 10000, 10000, 1000, 0);
CHECK_RES(res);
res = lefwEndUnits();
CHECK_RES(res);
return 0;} +
+

Use Min Spacing

+

The Use Min Spacing routine writes a LEF USEMINSPACING statement, which defines how minimum spacing is calculated for obstruction geometries. The USEMINSPACING statement is optional and can be used more than once in a LEF file.

+

For syntax information about the LEF USEMINSPACING statement, see "Use Min Spacing" in the LEF/DEF Language Reference.

+

This routine returns 0 if successful.

+

lefwUseMinSpacing

+

Writes a USEMINSPACING statement.

+

Syntax

+
+ int lefwUseMinSpacing(
const char* type,
const char* onOff) +
+

Arguments

+

+ + type +

+
Specifies that the minimum spacing applies to obstruction geometries.
Value: OBS
+

+ + onOff +

+
Specifies how to calculate the minimum spacing.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

     

+
+

ON

+
+

Spacing is computed as if the MACRO OBS shapes were min-width wires. Some LEF models abstract many min-width wires as a single large OBS shape; therefore using wide wire spacing would be too conservative.

+
+

     

+
+

OFF

+
+

Spacing is computed to MACRO OBS shapes as if they were actual routing shapes. A wide OBS shape would use wide wire spacing rules, and a thin OBS shapes would use thin wire spacing rules.

+
+

Version

+

The version routine writes a LEF VERSION statement. For syntax information about the LEF VERSION statement, see "Version" in the LEF/DEF Language Reference.

+

The VERSION statement is part of the LEF file header (which also includes the BUSBITCHARS, and DIVIDERCHAR statements). If the statements in the header section are not defined, many applications assume default values for them. However, the default values are not formally part of the language definition; therefore you cannot be sure that the same assumptions are used in all applications. You should always explicitly define these values.

+

This routine returns 0 if successful.

+

lefwVersion

+

Writes a VERSION statement. The VERSION statement can be used only once in a LEF file.

+

Syntax

+
+ int lefwVersion(
int vers1,
int vers2) +
+

Arguments

+

+ + vers1, vers2 +

+
Specify which version of the LEF syntax is being used. vers1 is the major value. vers2 is the minor value.
+

Version Examples

+

The following example shows a callback routine with the type lefwVersionCbkType.

+
+ int versionCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwVersionCbkType) {
printf("Type is not lefwVersionCbkType, terminate
        writing.\n");
return 1;
}
res = lefwVersion(5, 3);
CHECK_RES(res);
return 0;} +
+

Via

+

Via routines write a LEF VIA section. A VIA section is optional and can be used more than once in a LEF file. For syntax information about the LEF VIA section, see "Via" in the LEF/DEF Language Reference.

+

Each VIA section must start and end with the lefwStartVia and lefwEndVia routines. The remaining via routines must be included between these routines.

+

In addition to the routines described in this section, you can include a PROPERTY statement within a VIA section. For more information about these routines, see "Property".

+

For examples of the routines described here, see "Via Examples".

+

All routines return 0 if successful.

+

lefwStartVia

+

Starts a VIA section.

+

Syntax

+
+ int lefwStartVia(
const char* viaName,
const char* isDefault) +
+

Arguments

+

+ + viaName +

+
Specifies the name for the via.
+

+ + isDefault +

+
Optional argument that identifies the via as the default via between the specified layers.
+ + + + + + + + + + + +
+
+

     

+
+

NULL

+
+

Ignores the argument.

+
+

     

+
+

DEFAULT

+
+

Identifies the via as the default via.

+
+

lefwEndVia

+

Ends the VIA section for the specified viaName value.

+

Syntax

+
+ int lefwEndVia(
const char* viaName) +
+

lefwViaLayer

+

Writes a LAYER statement for a via. Either a LAYER or a VIARULE statement is required in a VIA section. A LAYER statement can be used more than once for a via.

+

If you specify this routine, you must also specify one of the following routines:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaLayerPolygon
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaLayerRect
+
+

You can also optionally specify the following routine:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaResistance
+
+

Syntax

+
+ int lefwViaLayer(
const char* layerName) +
+

Arguments

+

+ + layerName +

+
Specifies the layer on which to create the rectangles that make up the via. Normal vias have exactly three layers used: a cut layer and two layers that touch the cut layer (routing or masterslice).
+

lefwViaLayerPolygon

+

Writes a POLYGON statement for a via. Either a POLYGON or RECT statement is required if a LAYER statement is specified in a VIA section, and can be used more than once.

+

Syntax

+
+ lefwViaLayerPolygon(
int num_polys,
double* xl,
double* yl) +
+

Arguments

+

+ + num_polys +

+
Specifies the number of polygon sides.
+

+ + xl yl +

+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle. The polygon is generated by connecting each successive point, then connecting the first and last points.
+

lefwViaLayerRect

+

Writes a RECT statement. Either a POLYGON or RECT statement is required if a LAYER statement is specified in a VIA section, and can be used more than once.

+

Syntax

+
+ int lefwViaLayerRect(
double x1l,
double y1l,
double x2l,
double y2l) +
+

Arguments

+

+ + x1l, y1l, x2l, y2l +

+
Specify the points that make up the via.
+

lefwViaResistance

+

Writes a RESISTANCE statement. The RESISTANCE statement is optional and can be used only once with a LAYER statement in a VIA section.

+

Syntax

+
+ int lefwViaResistance(
double resistance) +
+

Arguments

+

+ + resistance +

+
Specifies the total resistance of the via, in units of ohms, given as the resistance per via. Note that this is not a resistance per via-cut value; it is the total resistance of the via.
+

lefwViaViarule

+

Writes a VIARULE statement for the via. Either a LAYER or a VIARULE statement is required in a VIA section. A VIARULE statement can be used only once in a VIA section.

+

If you specify this routine, you can optionally specify the following routines:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaViaruleOffset
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaViaruleOrigin
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaViarulePattern
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefwViaViaruleRowCol
+
+

Syntax

+
+ lefwViaViarule(
const char* viaRuleName,
double xCutSize,
double yCutSize,
const char* botMetalLayer,
const char* cutLayer,
const char* topMetalLayer,
double xCutSpacing,
double yCutSpacing,
double xBotEnc,
double yBotEnc,
double xTopEnc,
double yTopEnc) +
+

Arguments

+

+ + viaRuleName +

+
Specifies the name of the LEF VIARULE that produced this via. This name must refer to a previouslydefined VIARULE GENERATE rule name. This indicates that the via is the result of automatic via generation, and that the via name is only used locally inside this LEF file.
+

+ + xCutSize yCutSize +

+
Specifies the required width (xSize) and height (ySize) of the cut layer rectangles.
+

+ + botMetalLayer cutLayer topMetalLayer +

+
Specifies the required names of the bottom routing layer, cut layer, and top routing layer. These layers must be previously defined in layer definitions, and must match the layer names defined in the specified LEF viaRuleName.
+

+ + xCutSpacing yCutSpacing +

+
Specifies the required x and y spacing between cuts. The spacing is measured between one cut edge and the next cut edge.
+

+ + xBotEnc yBotEnc xTopEnc yTopEnc +

+
Specifies the required x and y enclosure values for the bottom and top metal layers. The enclosure measures the distance from the cut array edge to the metal edge that encloses the cut array.
+

lefwViaViaruleOffset

+

Writes an OFFSET statement for the via. The OFFSET statement is optional with a VIARULE statement and can be used only once in a VIA section.

+

Syntax

+
+ lefwViaViaruleOffset(
double xBotOffset,
double yBotOffset,
double xTopOffset,
double yTopOffset) +
+

Arguments

+

+ + xBotOffset yBotOffset xTopOffset yTopOffset +

+
Specifies the x and y offset for the bottom and top metal layers. By default, the 0,0 origin of the via is the center of the cut array and the enclosing metal rectangles. These values allow each metal layer to be offset independently.
After the non-shifted via is computed, the metal layer rectangles are offset by adding the appropriate values--the x/y BotOffset values to the metal layer below the cut layer, and the x/ y TopOffset values to the metal layer above the cut layer. These offsets are in addition to any offset caused by the ORIGIN values.
+

lefwViaViaruleOrigin

+

Writes an ORIGIN statement for the via. The ORIGIN statement is optional with a VIARULE statement and can be used only once in a VIA section.

+

Syntax

+
+ lefwViaViaruleOrigin(
double xOffset,
double yOffset) +
+

Arguments

+

+ + xOffset yOffset +

+
Specifies the x and y offset for all of the via shapes. By default, the 0,0 origin of the via is the center of the cut array and the enclosing metal rectangles. After the non-shifted via is computed, all cut and metal rectangles are offset by adding these values.
+

lefwViaViarulePattern

+

Writes a PATTERN statement for the via. The PATTERN statement is optional with a VIARULE statement and can be used only once in a VIA section.

+

Syntax

+
+ lefwViaViarulePattern(
const char* cutPattern) +
+

Arguments

+

+ + cutPattern +

+
Specifies the cut pattern encoded as an ASCII string. This parameter is only required when some of the cuts are missing from the array of cuts, and defaults to "all cuts are present," if not specified.
+

lefwViaViaruleRowCol

+

Writes a ROWCOL statement for the via. The ROWCOL statement is optional with a VIARULE statement and can be used only once in a VIA section.

+

Syntax

+
+ lefwViaViaRuleRowCol(
int numCutRows,
int numCutCols) +
+

Arguments

+

+ + numCutRows numCutCols +

+
Specifies the number of cut rows and columns that make up the via array.
+

Via Examples

+

The following example shows a callback routine with the type lefwViaCbkType.

+
+ int viaCB (lefwCallbackType_e type,
lefiUserData userData) {
int res;
// Check if the type is correct
if (type != lefwViaCbkType) {
printf("Type is not lefwViaCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartVia("RX_PC", "DEFAULT");
CHECK_RES(res);
res = lefwViaResistance(2);
CHECK_RES(res);
res = lefwViaForeign("IN1X", 0, 0, -1);
CHECK_RES(res);
res = lefwViaLayer("RX");
CHECK_RES(res);
res = lefwViaLayerRect(-0.7, -0.7, 0.7, 0.7);
CHECK_RES(res);
res = lefwViaLayer("CUT12");
CHECK_RES(res);
res = lefwViaLayerRect(-0.25, -0.25, 0.25, 0.25);
CHECK_RES(res);
res = lefwRealProperty("realProperty", 32.33);
CHECK_RES(res);
res = lefwIntProperty("COUNT", 34);
CHECK_RES(res);
res = lefwEndVia("RX_PC");
CHECK_RES(res);
return 0;} +
+

Via Rule

+

Via Rule routines write a LEF VIARULE statement. A VIARULE or a VIARULE GENERATE statement is required in a LEF file. You can create more than one VIARULE statement in a LEF file. For syntax information about the LEF VIARULE statement, see "Via Rule" in the
LEF/DEF Language Reference.

+

You must use the lefwStartViaRule and lefwEndViaRule routines to start and end the VIARULE statement. The lefwViaRuleLayer and lefwViaRuleVia routines must be included between these routines.

+

For examples of the routines described here, see "Via Rule Examples".

+

In addition to the routines described in this section, you can include a PROPERTY statement within a VIARULE statement. For more information about these routines, see "Property".

+

All routines return 0 if successful.

+

lefwStartViaRule

+

Starts a VIARULE statement.

+

Syntax

+
+ int lefwStartViaRule(
const char* viaRuleName) +
+

Arguments

+

+ + viaRuleName +

+
Specifies the name to identify the via rule.
+

lefwEndViaRule

+

Ends the VIARULE statement for the specified viaRuleName value.

+

Syntax

+
+ int lefwEndViaRule(
const char* viaRuleName) +
+

lefwViaRuleLayer

+

Writes a LAYER statement. The LAYER statement is required and must be used exactly twice in a VIARULE statement.

+

Syntax

+
+ int lefwViaRuleLayer(
const char* layerName,
const char* direction,
double minWidth,
double maxWidth,
double overhang,
double metalOverhang) +
+

Arguments

+

+ + layerName +

+
Specifies the top or bottom routing layer of the via.
+

+ + direction +

+
Specifies the wire direction. If you specify a width range, the rule applies to wires of the specified direction that fall within the range. Otherwise, the rule applies to all wires on the layer of the specified direction.
Value: HORIZONTAL or VERTICAL
+

+ + minWidth maxWidth +

+
Optional arguments that specify a wire width range within which the wire must fall in order for the rule to apply. That is, the wire width must be greater than or equal to minWidth and less than or equal to maxWidth. Specify 0 to ignore these arguments.
+

+ + overhang +

+
This argument is obsolete. Specify 0 to ignore this argument.
+

+ + metalOverhang +

+
This argument is obsolete. Specify 0 to ignore this argument.
+

lefwViaRuleVia

+

Writes a VIA statement. The VIA statement is required and can be used more than once after both lefwViaRuleLayer routines are used.

+

Syntax

+
+ int lefwViaRuleVia(
const char* viaName) +
+

Arguments

+

+ + viaName +

+
Specifies a previously defined via to test for the current via rule. The first via in the list that can be placed at the location without design rule violations is selected. The vias must all have exactly three layers in them. The three layers must include the same routing layers as listed in the LAYER statements of the VIARULE, and a cut layer that is between the two routing layers.
+

Via Rule Examples

+

The following example shows a callback routine with the type lefwViaRuleCbkType.

+
+ int viaRuleCB(lefwCallbackType_e c, lefiUserData ud) {
int res;
// Check if the type is correct
if (type != lefwViaCbkType) {
printf("Type is not lefwViaCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartViaRule("VIALIST12");
CHECK_RES(res);
lefwAddComment("Break up the old lefwViaRule into 2
    routines");
lefwAddComment("lefwViaRuleLayer and lefwViaRuleVia");
res = lefwViaRuleLayer("M1", "VERTICAL", 9.0, 9.6, 4.5,
    0);
CHECK_RES(res);
res = lefwViaRuleLayer("M2", "HORIZONTAL", 3.0, 3.0, 0,
    0);
CHECK_RES(res);
res = lefwViaRuleVia("VIACENTER12");
CHECK_RES(res);
res = lefwStringProperty("vrsp", "new");
CHECK_RES(res);
res = lefwIntProperty("vrip", 1);
CHECK_RES(res);
res = lefwRealProperty("vrrp", 4.5);
CHECK_RES(res);
res = lefwEndViaRule("VIALIST12");
CHECK_RES(res);
return 0;} +
+

Via Rule Generate

+

The Via Rule Generate routines write a LEF VIARULE GENERATE statement. A VIARULE GENERATE or a VIARULE statement is required in a LEF file. You can create more than one VIARULE GENERATE statement in a LEF file. For syntax information the LEF VIARULE GENERATE statement, see "Via Rule Generate" in the LEF/DEF Language Reference.

+

You must use the lefwStartViaRuleGen and lefwEndViaRuleGen routines to start and end the VIARULE GENERATE statement. All other routines must be included between these routines.

+

Use the Via Rule Generate routines to cover special wiring that is not explicitly defined in the Via Rule routines.

+

All routines return 0 if successful.

+

lefwStartViaRuleGen

+

Starts a VIARULE GENERATE statement.

+

Syntax

+
+ int lefwStartViaRuleGen(
const char* viaRuleName) +
+

Arguments

+

+ + viaRuleName +

+
Specifies the name for the via rule (formula).
+

lefwEndViaRuleGen

+

Ends the VIARULE GENERATE statement for the specified viaRuleName value.

+

Syntax

+
+ int lefwEndViaRuleGen(
const char* viaRuleName) +
+

lefwViaRuleGenDefault

+

Writes a DEFAULT statement for the via.The DEFAULT statement specifies that the via rule can be used to generate vias for the default routing rule, and to supplement any DEFAULT fixed vias that might be predefined in the LEF VIA statement, as the router needs them. The DEFAULT statement is optional and can be used only once for a VIARULE GENERATE statement.

+

Syntax

+
+ lefwViaRuleGenDefault() +
+

lefwViaRuleGenLayer

+

Writes a routing LAYER statement. Either the routing LAYER statement or the ENCLOSURE statement is required and must be used exactly twice in a VIARULE GENERATE statement.

+

Syntax

+
+ int lefwViaRuleGenLayer(
const char* layerName,
const char* direction,
double minWidth,
double maxWidth,
double overhang,
double metalOverhang) +
+

Arguments

+

+ + layerName +

+
Specifies the routing layer for the top or bottom of the via.
+

+ + direction +

+
Specifies the wire direction. If you specify a width range, the rule applies to wires of the specified direction that fall within the range. Otherwise, the rule applies to all wires on the layer of the specified direction.
Value: HORIZONTAL or VERTICAL
+

+ + minWidth maxWidth +

+
Optional arguments that specify a wire width range within which the wire must fall in order for the rule to apply. That is, the wire width must be greater than or equal to minWidth and less than or equal to maxWidth. Specify 0 to ignore these arguments.
+

+ + overhang +

+
This argument is obsolete. Specify 0 to ignore this argument.
+

+ + metalOverhang +

+
This argument is obsolete. Specify 0 to ignore this argument.
+

lefwViaRuleGenLayer3

+

Writes a cut LAYER statement. The cut LAYER statement is required and can be used only once after either both lefwViaRuleGenLayer, or both lefwViaRuleGenLayerEnclosure routines are used.

+

Syntax

+
+ int lefwViaRuleGenLayer3(
const char* layerName,
double xl,
double yl,
double xh,
double yh,
double xSpacing,
double ySpacing,
double resistance) +
+

Arguments

+

+ + layerName +

+
Specifies the cut layer for the generated via.
+

+ + xl yl xh yh +

+
Specifies the location of the lower left contact cut rectangle.
+

+ + xSpacing ySpacing +

+
Defines center-to-center spacing in the x and y dimensions to create an array of contact cuts.The number of cuts of an array in each direction is the most that can fit within the bounds of the intersection formed by the two special wires. Cuts are only generated where they do not violate stacked or adjacent via design rules.
+

+ + resistance +

+
Optional argument that specifies the resistance of the cut layer, given as the resistance per contact cut. Specify 0 to ignore this argument.
+

lefwViaRuleGenLayerEnclosure

+

Writes an ENCLOSURE statement. Either the ENCLOSURE statement or the routing LAYER statement is required and must be used exactly twice in a VIARULE GENERATE statement.

+

Syntax

+
+ int lefwViaRuleGenLayerEnclosure(
const char* layerName,
double overhang1,
double overhang2,
double minWidth,
double maxWidth) +
+

Arguments

+

+ + layerName +

+
Specifies the routing layer for the top or bottom of the via.
+

+ + overhang1 overhang2 +

+
Specifies that the via must be covered by metal on two opposite sides by at least overhang1, and on the other two sides by at least overhang2. The via generation code then chooses the direction of overhang that best maximizes the number of cuts that can fit in the via.
+

+ + minWidth maxWidth +

+
Optional arguments that specify a wire width range within which the wire must fall in order for the rule to apply. That is, the wire width must be greater than or equal to minWidth and less than or equal to maxWidth. Specify 0 to ignore this argument.
+

Via Rule Generate Examples

+

The following example shows a callback routine with the type lefwViaRuleCbkType with Generate.

+
+ int viaRuleCB(lefwCallbackType_e c, lefiUserData ud) {
int res;
// Check if the type is correct
if (type != lefwViaCbkType) {
printf("Type is not lefwViaCbkType, terminate
        writing.\n");
return 1;
}
res = lefwStartViaRuleGen("VIAGEN12");
CHECK_RES(res);
res = lefwViaRuleGenLayer("M1", "VERTICAL", 0.1, 19, 1.4,
    0);
CHECK_RES(res);
res = lefwViaRuleGenLayer("M2", "HORIZONTAL", 0, 0, 1.4,
    0);
CHECK_RES(res);
res = lefwViaRuleGenLayer3("V1", -0.8, -0.8, 0.8, 0.8,
    5.6, 6.0, 0.2);
CHECK_RES(res);
res = lefwEndViaRuleGen("VIAGEN12");
CHECK_RES(res);
return 0;} +
+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/ch7LEFcompressed.html b/lefdef/doc/lefapi/ch7LEFcompressed.html new file mode 100644 index 00000000..6256c57c --- /dev/null +++ b/lefdef/doc/lefapi/ch7LEFcompressed.html @@ -0,0 +1,352 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

7 

+

LEF Compressed File Routines

+

The Cadence® Library Exchange Format (LEF) reader provides the following routines for opening and closing compressed LEF files. These routines are used instead of the fopen and fclose routines that are used for regular LEF files.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefGZipOpen
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
lefGZipClose
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Example
+
+

lefGZipOpen

+

Opens a compressed LEF file. If the file opens with no errors, this routine returns a pointer to the file.

+

Syntax

+
+ lefGZFile lefGZipOpen(
const char* gzipFile,
const char* mode); +
+

Arguments

+

+ + gzipFile +

+
Specifies the compressed file to open.
+

+ + mode +

+
Specifies how to open the file. Compressed files should be opened as read only; therefore, specify "r".
+

lefGZipClose

+

Closes the compressed LEF file. If the file closes with no errors, this routine returns zero.

+

Syntax

+
+ int lefGZipClose(
lefGZFile filePtr) ; +
+

Arguments

+

+ + filePtr +

+
Specifies a pointer to the compressed file to close.
+

Example

+

The following example uses the lefGZipOpen and lefGZipClose routines to open and close a compressed file.

+

+ lefrInit() ; +

+

+   +

+

+ for (fileCt = 0; fileCt < numInFile; fileCt++) { +

+
+ + lefrReset(); +
+
+ +   +
+
+ + // Open the compressed LEF file for the reader to read +
+
+ + if ((f = lefGZipOpen(inFile[fileCt], "r")) == 0) { +
+
+ +    fprintf(stderr, "Couldn't open input file '%s'\n", inFile[fileCt]); +
+
+ +    return(2) ; +
+
+ + } +
+
+ +   +
+
+ + (void)lefrEnableReadEncrypted(); +
+
+ +   +
+
+ + // Initialize the lef writer. Needs to be called first. +
+
+ + status = lefwInit(fout); +
+
+ + if (status != LEFW_OK) +
+
+ +    return 1; +
+
+ +   +
+
+ + res = lefrRead((FILE*)f, inFile[fileCt], (void*)userData); +
+
+ +   +
+
+ + if (res) +
+
+ +    fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]); +
+
+ +   +
+
+ + // Close the compressed LEF file. +
+
+ + lefGZipClose(f); +
+
+ + (void)lefrPrintUnusedCallbacks(fout); +
+
+ +   +
+

+ } +

+

+ fclose(fout); +

+

+   +

+

+ return 0;} +

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/ch8lefdiff.html b/lefdef/doc/lefapi/ch8lefdiff.html new file mode 100644 index 00000000..de6bf81a --- /dev/null +++ b/lefdef/doc/lefapi/ch8lefdiff.html @@ -0,0 +1,311 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

8 

+

LEF File Comparison Utility

+

The Cadence® Library Exchange Format (LEF) reader provides the following utility for comparing LEF files.

+

lefdefdiff

+

Compares two LEF or DEF files and reports any differences between them.

+

Because LEF and DEF files can be very large, the lefdefdiff utility writes each construct from a file to an output file in the /tmp directory. The utility writes the constructs using the format:

+
section_head/subsection/subsection/ ... /statement
+

The lefdefdiff utility then sorts the output files and uses the diff program to compare the two files. Always verify the accuracy of the diff results.

+

Note: You must specify the -lef or -def, inFileName1, and inFileName2 arguments in the listed order. All other arguments can be specified in any order after these arguments.

+

Syntax

+
+ lefdefdiff
{-lef | -def}
inFileName1
inFileName2
[-o outFileName]
[-path pathName]
[-quick]
[-d]
[-ignorePinExtra]
[-ignoreRowName]
[-h] +
+

Arguments

+

+ + -d +

+
Uses the gnu diff program to compare the files for a smaller set of differences. Use this argument only for UNIX platforms.
+

+ + -h +

+
Returns the syntax and command usage for the lefdefdiff utility.
+

+ + -ignorePinExtra +

+
Ignores any .extraN statements in the pin name. This argument can only be used when comparing DEF files.
+

+ + -ignoreRowName +

+
Ignores the row name when comparing ROW statements in the DEF files. This argument can only be used when comparing DEF files.
+

+ + inFileName1 +

+
Specifies the first LEF or DEF file.
+

+ + inFileName2 +

+
Specifies the LEF or DEF file to compare with the first file.
+

+ + -lef | -def +

+
Specifies whether you are comparing LEF or DEF files.
+

+ + -o outFileName +

+
Outputs the results of the comparison to the specified file.
Default: Outputs the results to the screen
+

+ + -path pathName +

+
Temporarily stores the intermediate files created by the lefdefdiff utility in the specified path directory.
Default: Temporarily stores the files in the current directory
+

+ + -quick +

+
Uses the bdiff program to perform a faster comparison.
+

Example

+

The following example shows an output file created by the lefdefdiff utility after comparing two LEF files:

+
+ + #The names of the two LEF files that were compared. +
+
+ + < file1.lef +
+
+ + > file2.lef +
+
+ + #Statements listed under Added were found in file2.lef but not in file1.lef. +
+
+ + Added: +
+
+ + > LAYER M1 SPACING 0.6 +
+
+ + #Statements listed under Deleted were found in file1.lef but not in file2.lef. +
+
+ + Deleted: +
+
+ + < LAYER RX LENGTHTHRESHOLD 0.45 +
+
+ + < LAYER RX LENGTHTHRESHOLD 0.9 +
+
+ + < LAYER RX MINIMUMCUT 2 WIDTH 2.5 +
+
+ + #Changed always contains two statements: the statement as it appears in file1.lef and the statement as it appears in file2.lef. +
+
+ + CHANGED: +
+
+ + < MACRO INV_B EEQ INV SYMMETRY X Y R90 +
+
+ + --- +
+
+ + > MACRO INV_B CLASS CORE EEQ INV SYMMETRY X Y R90 +
+
+ + Added: +
+
+ + > MACRO INV_B ORIGIN ( 0 0 ) +
+
+ + Added: +
+
+ + > OBS PATH ( 58.8 3 ) ( 58.8 123 ) +
+
+ +   +
+

 

+

 

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/images/Diamond.gif b/lefdef/doc/lefapi/images/Diamond.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cdafa3387318b1d3581c1b7f4083a66bc79a0b8 GIT binary patch literal 92 zcmZ?wbhEHbC%M@ z7fzizb>P5(b?erxUAuPPym_-`&1!0Ds;{rFsHg}D3Gwvwbai#Lu&^*OF;P@hl$4Z| zkdP1%5a8wI<>268VPOH954MLUgyK&YMg|5&1|5*;AU`p%SsiEyV7Qnga44mbDMM~@ zqsQ`>E^=xzTBVaGWbB`JbUN227P({xH^q_+dr`J4clSsv$Yoe&cwjqcfFpx70FDw; AfB*mh literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/Thumbs.db b/lefdef/doc/lefapi/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..89a67ee6add69ee45ebed976dac24899f91c189d GIT binary patch literal 161792 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 Jj+RLT06U&`IGX?f literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/alpha.gif b/lefdef/doc/lefapi/images/alpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..49de981bb1c61911e1ffabafac4737af455cf9d9 GIT binary patch literal 147 zcmZ?wbhEHbn`m8 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/ampersnd.gif b/lefdef/doc/lefapi/images/ampersnd.gif new file mode 100644 index 0000000000000000000000000000000000000000..faf90fa016da7000e73e3cbac478543fd7a04fc0 GIT binary patch literal 209 zcmV;?051PWNk%w1VG{rk0J8u9|NsBLzrVG$wVa%sl$4Z&goJy0duwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui022TY000DjFvuWKT4U->8wpLrNsE>| z5`%JsgG_2LJjoa^#-u!mD;0zwFrm;i9t}ak@n|+3i;n~$YB&mw+^w`hJPLu6=;sh< zGR%p?ArUk(lLM^@mt!y-riyz*nmI8?4h#(nM_L<&5(5NqAP)OG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtz>% literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/anglrite.gif b/lefdef/doc/lefapi/images/anglrite.gif new file mode 100644 index 0000000000000000000000000000000000000000..f30742e70b1b4d043e555f346837eb43242b8f9d GIT binary patch literal 120 zcmZ?wbhEHbOG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtopFJFSLV>e2RHAj0f=h;E@I(!kZ#x+?7io0| P8+7(u)0EN|WUvMR&ip1V literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/arrwboth.gif b/lefdef/doc/lefapi/images/arrwboth.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6a26d1a64476e85e5fba2fa1b1cb363dbd0ee23 GIT binary patch literal 154 zcmV;L0A>G2Nk%w1VG;lj0J8u9|NsBLzrVG$wXLnKoSdALl$3jWduwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui01^NX000C>Fvv-(y*TU5J6%SlgqP9? z)!>j6;}DneBvau$N1^Y#@-TzI;W0xbjL75S;V4K5jnjqTU|1Rpi=d&vG@O(~Hv^-T IJ(maoJC>Xc^w@cH8nMbg@t;0dKwxU>gwvs%F5#6 z;{5#l3^1VhlZBCifssK6BmgplfyK_?gy-tDNp}?2iLe(6x~Fq;Y+j>tTICsw*u9V` rmls^vx;CTn;Gqk%CBzOKSX0qm8?^StX-)3lf_Z1!qTaYNFjxZsBCaw- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/arrwdbdn.gif b/lefdef/doc/lefapi/images/arrwdbdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..701bb8bbcae9b0e09d0d069e4a5be1fada76f7a3 GIT binary patch literal 138 zcmZ?wbhEHbpeRE Qt&+(Qzah}SgM+~u0B6G{wg3PC literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/arrwdbrt.gif b/lefdef/doc/lefapi/images/arrwdbrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..570fca03a58aaa40e6d7c23c5a55f1af873d96c4 GIT binary patch literal 124 zcmZ?wbhEHb6k_0I*v!E2|NsB}`}fb8GpDDgr@FejxVYHT(o$1XQ&CY-KtO;211SDv zVPs%nWY7W0fXrZE(KI;Wxq7eT1KU1PHx0R@N4esKi$ohU-h`+WtO;7MqCL%~bf2fL Khl?u%gEatK@*+K$->CM zz{sEjk_4H-z+zzF;dx@u=A<>{+vHf=WG$;ytGt>NS)zV>F&l+^ZQwmwsItpfaiT#B O)4pT}gV`<&4Aub310s=}PM@L6ZO-))_T6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471B-#d3D4DgEnc5pZFSegB0)mI&xzCZ j^}g1}I?X1hD*DV_(=B)$-7f^p5ONbfc;t=?1A{dHJBKZp literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/arrwup.gif b/lefdef/doc/lefapi/images/arrwup.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a770c30fb4167a6485f2a93ba6b4c9e81c70f97 GIT binary patch literal 135 zcmV;20C@jLNk%w1VGRHh0J8u9|NsBMz`(V&wW+D8o}QkQlaq*uhBtH3_%+R38C4a#P`2XaOddxipHTuSz%HHG~*`%06R#sGAsZ9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/arrwvert.gif b/lefdef/doc/lefapi/images/arrwvert.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c5e9daf26bb482bf5659dd5f62ff2ffee66269a GIT binary patch literal 85 zcmZ?wbhEHbdV|w=Bx1^<$W9MG~HuqEK!j!4W4jh4#85pbqqv9M# literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/b_bullet.gif b/lefdef/doc/lefapi/images/b_bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..0aeaa180e861d12ee0b131f7d713af607c998c07 GIT binary patch literal 818 zcmYL|PiPZC6o5}Ua=+!dC^foPlP;GK^TMXvm#_;ZwF_4l`nOz4LgyKS zuQ2Or5-`t6gHg4*>KmvxO1au(%9>L7 fsr_z`b6TbUiT>bmj9_ePZS`F_I5IXJ9p=(sJyFbD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/beta.gif b/lefdef/doc/lefapi/images/beta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6172e8978c16768fb7cadde044d91c4bc835802 GIT binary patch literal 151 zcmZ?wbhEHb9$U%nJMz@Fauw#&q(LRO(A*nwRjI1A@2Z#vqF24}sVW&N%ZQ`d+1_o;Y D6S*~0$;rt8zSTPZ<#pHwvy@O4 G25SH=gCi6G literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/bracrtbt.gif b/lefdef/doc/lefapi/images/bracrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..345b70213f2f9bc99b528aae2a89c0dc4bb957de GIT binary patch literal 121 zcmZ?wbhEHb=}PO-)T&T3U2;bU;9WrKP2w zo}RL@vbeZ74-XFm1B2pE7DfgJMg|=qn*n471B;fy2~SnWQn9H|-yOW(Iaj&CgNe;O dsHbD1Zkv~Niv|SbyFcM_21^}ynD7gRt literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/bracrttp.gif b/lefdef/doc/lefapi/images/bracrttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..76c33b52222f37ee7a778a3c9f8552f5830a248c GIT binary patch literal 122 zcmZ?wbhEHbNtwM|RiZhL2F^0vUQ7(u09Wc9YybcN literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/braklttp.gif b/lefdef/doc/lefapi/images/braklttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..67a063fee279ce5795a2e79caa2a4aa567942577 GIT binary patch literal 88 zcmZ?wbhEHbK05M@2>Hq)$ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/brakrtbt.gif b/lefdef/doc/lefapi/images/brakrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdb1927189d7b4db1c3160666897f32f0ba2f57b GIT binary patch literal 122 zcmZ?wbhEHbFfd?XU{L(Y!pOkD$e;sc vGl0}GFe^&zT9Yc!w~c4vsYeS6m&XemC6`vJ&*;*=IV*bR-ct%JoD9|gy4oLO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/bs_bullet_sub.gif b/lefdef/doc/lefapi/images/bs_bullet_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e02a6610c0ed14cf5aaef054fdd6bb94f51a8ac GIT binary patch literal 834 zcmX|=L1+_E5Qe{PHf>shG;2u%4YbyaSP!KHtmq*tZLFsJZ3rm!vTQem zU_gWvJb1Bs6!e%t@E{R-D}q}RWF;`_rZB?5?IdUK!?cbqBV}P-z57Xl2ZjoqMwdI(cKfNMeW!Q% zq4M8?$sJEOj4802jZfRTY9V1-vQS8%2@L__PIeQ$%7`g3-|N9`w`Lg1&jst$CNN79 z9;}Dl3C$>}R*?|<8Wphc<%#;KtzlX|TSO5xgo&_Oj^TgInu%po%Hrx2MkF3WprKSD z*$?<=D*is4m93k7yFi&r@{oLH(?UQL$= J{oOj3{{hdW(xU(X literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/bss_bullet_sub_sub.gif b/lefdef/doc/lefapi/images/bss_bullet_sub_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9bb133eabc5c242cead02fa2cc319ab69871057 GIT binary patch literal 837 zcmX|=(MwZt6vsc;ZEeaBceOck4`weiMS9r7qL*FLRT3x!O`?ZM7Z#X9Ea>I3-7!Qd zf(?A=CHn*FaRccg?t^a<_-N5XV0!N~%s|LU`}O;6(t&&LIp=qN=X}5CoO|7fkefq~0(Y}qc?c7JiqcXN^{aOeIq*PNhV68?11+_Os_E<9 z=ZErt3upH{zpjr%vFU8>7V71UVaY@hfhIHrh;#(ZB7@45|LS9&45O=AM1 zB*Vko5qCnOkTizP34ZPn<>F!qh(z3=QG)lkTydia&BGzJB!8S?<1=Sxx<% Qz45%iH!(VVb&%`-07Y!l@Bjb+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/bullet.gif b/lefdef/doc/lefapi/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..b71c1a475fc702b21c95d5edbdc1aa1d509729bf GIT binary patch literal 120 zcmZ?wbhEHb4+9J+{$ycfU|?j>0SSQ2U|>--IN`Z^uf^l0z7?LzMu$y0Rv3w{*x|!;S!s%* R`Du4f)`fo$#IrD10|3w$Ct&~p literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capalpha.gif b/lefdef/doc/lefapi/images/capalpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..f93e524cdd9b7902b98f22fec2fbc71879ff5380 GIT binary patch literal 138 zcmZ?wbhEHbtlf iBjK7S9_sU)YA~@h;Sz3fys?9ohxe??^2Z)Z4AubiT`R2s literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capbeta.gif b/lefdef/doc/lefapi/images/capbeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4c37026ab5ebd18ba0a8d1794553e3a808cccd3 GIT binary patch literal 141 zcmZ?wbhEHb@#^7Au1jo~!3BmMJmYcuq;M+r#pdip9y9ehaM? o{R)llK2i|1lGVAn@#^7F&Z8o~!3R&QLbiihbM=bSUwhl4wV%MaP7g sgOAR9nQ*Cbp+!6Q!c^&q5JuUeMFKu?YaJRdD)@TGbY+_ALBS< t9Kj+a(H~=&|Dfi|0-uid#ziMs+4zs8ELfrwBXoqxajBi~0#6nOYXFE-FHQge literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capepsil.gif b/lefdef/doc/lefapi/images/capepsil.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b6a387a40e314a6cd651f81a2710054bb57a113 GIT binary patch literal 130 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu;?3{@LbLNc*)uGBIk@mABhBUlzKUDW$QYf e)Ae}T2ivV$eUfVTn;IM~q~@?bPU>V}um%9uyDb|4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capeta.gif b/lefdef/doc/lefapi/images/capeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..064c5273534fdba50c309b3b8de0e448583c5e90 GIT binary patch literal 139 zcmZ?wbhEHbtXj8D{Znc=Qc*ct*LGIS; ng6A0BZqz9HaLrao$7Ax1n4<>*6ADbM8V??tC=jb5$Y2csq?<3U literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capgamma.gif b/lefdef/doc/lefapi/images/capgamma.gif new file mode 100644 index 0000000000000000000000000000000000000000..6cc19838930ae56e3c6a961b4a4941b4f6a60ccd GIT binary patch literal 118 zcmZ?wbhEHbsXF&jt)P(QRAq< Ie?bOo0L;=Pt^fc4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capiota.gif b/lefdef/doc/lefapi/images/capiota.gif new file mode 100644 index 0000000000000000000000000000000000000000..42e74365b648cf7c6ed53a02b6634cbec424fbf0 GIT binary patch literal 111 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^jKK-d)iO_Il$J$wZdFi<>`kqjC9*51d85W0Q&$FS0B#c> Ak^lez literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capkappa.gif b/lefdef/doc/lefapi/images/capkappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..263ee4f8874da785aff03241179a652a69f5e1f1 GIT binary patch literal 143 zcmZ?wbhEHbVD%$`Miy+9ct{*51BY*}=wx?XJHNBZD;nJO?mi literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/caplambd.gif b/lefdef/doc/lefapi/images/caplambd.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b7af2c91a0c26e39a71126e3ac4de879205cea9 GIT binary patch literal 139 zcmZ?wbhEHbh3D4DgO&)s2-E{nvar=-BQ<}o@ r=7cT^y6N3f~K?Z98elIUh literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capmu.gif b/lefdef/doc/lefapi/images/capmu.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0066cf5925e6850511df007c66c32b0eddb8173 GIT binary patch literal 159 zcmZ?wbhEHb%PT^-v`jfHIelh# zt!@$dCau!zm~epO3sdg_PQe=zllMJOP_%UN?{N|BnxiAt^!CC9gBI>H4vm5PVw4!H E0YR8G=l}o! literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capnu.gif b/lefdef/doc/lefapi/images/capnu.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d841a31ef2a70380018e4253ec1c8ed0ad25f32 GIT binary patch literal 156 zcmV;N0Av40Nk%w1VGaNe0J8u9|NsBMz`(S$w5X`4oSdAHkdTCggm`#(Y;0^`U|>{K zR7gljFfcGABqR(B3;+NCA^8LW00031EC2ui01f~S000C@Fvv-(Nr_Bxk(S5P2vlQK z&%;nmfi90SwP?^hheT6PAUF=qZqf@7fP$f<7zj0#0cJpva`7sRhcz%jJP?CTV_TsN KNaeI70suQwZ8p^a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capomega.gif b/lefdef/doc/lefapi/images/capomega.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6e11542c02b2ca350e3add8174458872d846540 GIT binary patch literal 152 zcmZ?wbhEHb~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0V;%achbM@Y`IVnL0J)C_O2FRZCF!X)8CG?@p z4 Aod5s; literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capomicr.gif b/lefdef/doc/lefapi/images/capomicr.gif new file mode 100644 index 0000000000000000000000000000000000000000..20f4ae6b5b392f23b70a83e0b7ab1684560ba69a GIT binary patch literal 145 zcmZ?wbhEHbIn{K>+|z`)3$ z1Cj@s!N6i?aKdx7h>Eaum!P;&01J~}vxQ>YQLmR_k{uzZLK4}IH2RxNU@#^79)cbo`(%I76-KkGhWnT`s&#>c}7BopZ+5S gHD{ULphH}aJW~&7Yvc&FPdRw-qQ;w!BODCY0Fo{%$p8QV literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capsigma.gif b/lefdef/doc/lefapi/images/capsigma.gif new file mode 100644 index 0000000000000000000000000000000000000000..f75c3553b8eec054cc9e17284bc8ec1ee1bc89d6 GIT binary patch literal 131 zcmZ?wbhEHb0SSQ2U|`WSIN`Z^ujncD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/captheta.gif b/lefdef/doc/lefapi/images/captheta.gif new file mode 100644 index 0000000000000000000000000000000000000000..96b4c5022d99b4e1de7f6b8432207cf30601cf70 GIT binary patch literal 153 zcmZ?wbhEHb9pW4wfr4EcoLr8Y9jz*t7nI~VWSml1Xx(bS o`e!Q(8{?$u$*S7zS5neEWsEqPk2i{ zNIX0|FfcGABqSIZ7ytkOA^8LW00031EC2ui01f~S000CzFvv-(y`iLS zhlh=gje&uIii!#Y1B2pE7DfgJMg|=qn*n471BMxJ+HeGQ| q$;Tzh)IavLXtIb+Q*f(SLD4P&j!7*|$Df$Can9aiwkJf1!5RRyLNNRQ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/capzeta.gif b/lefdef/doc/lefapi/images/capzeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcba9c83a24c02d071efbf8e72ce88b584f41d58 GIT binary patch literal 138 zcmZ?wbhEHb@#^7IT9Wo~!rXP?}Qa&U} literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/caution.gif b/lefdef/doc/lefapi/images/caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8a5e7588a618e53a52e8dc4b72555e7dc0714bc GIT binary patch literal 286 zcmV+(0pb2fNk%v~VRir~0Pp|+|Ns90001li0001X04D$d0{w)KsmtvTqnxzbi?e>A z`wfPo;{{4Nrs`!z?Fz?9N73@FzLk#m7{BugEhb=Xh=jb16J|20b1I)y1W?MUQkht- z_tfZ?x-8pwAx)3ToG5#nMY}=fbNqg&13reab-u?JI3w6sR0zYyqeqC6H|J;g=V%xy z^R|R#V^+rrCbtD#Tx@K)<|fUTO6km)_=70wU3rN6jGZ0(V~5U?zJ8i<#ol9{X9e#g--llxuTi9L k&+ku&wl)Eg3_NkK;D&?G6hcXs(BX=15-VD~=&%3)JGI1(d;kCd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/ch1Intro.04.1.1.png b/lefdef/doc/lefapi/images/ch1Intro.04.1.1.png new file mode 100644 index 0000000000000000000000000000000000000000..46828632354cf351e5e48ae041e9dc786db81de4 GIT binary patch literal 20516 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∈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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/circmult.gif b/lefdef/doc/lefapi/images/circmult.gif new file mode 100644 index 0000000000000000000000000000000000000000..49bac178460a729bf930450705a25aec65a44ebb GIT binary patch literal 81 zcmZ?wbhEHboa25SJ5=on)F literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/circplus.gif b/lefdef/doc/lefapi/images/circplus.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf9719820db56f560d1e94f957bb08ad5a552437 GIT binary patch literal 80 zcmZ?wbhEHb)5TRPWpn*l7_0#<{3$K~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/congrunt.gif b/lefdef/doc/lefapi/images/congrunt.gif new file mode 100644 index 0000000000000000000000000000000000000000..b886bacb112a0250512b5865b60aca58c4efdd85 GIT binary patch literal 115 zcmZ?wbhEHbt079H3XaE2J literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/delta.gif b/lefdef/doc/lefapi/images/delta.gif new file mode 100644 index 0000000000000000000000000000000000000000..239069d87bcba07487e82ca0daa0b1a08dfbb616 GIT binary patch literal 141 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK(;gy-t5O0wHpY+IJ7+%Srnyg*?^i_WrCgGWJ} my^4aqj1s`JAu6eRBSOWk{MJ+b~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/draft.gif b/lefdef/doc/lefapi/images/draft.gif new file mode 100644 index 0000000000000000000000000000000000000000..9952c7ec4b536327a1a840e49488a07b7a16512f GIT binary patch literal 279 zcmV+y0qFimNk%v~VNU=f0Pp|+|NsC0001li0000_03!eZ0``QDsmtvTqnxzbi?iPR zh7X3~NS5Y_l1k9E7@NTEEXjvW=L`2Od(@R9H_0Y^dW8Hg5zCL9qBsjFuqDEes0I_CKWds+Br%L$75IU5=$!>W3^tCVZh3cFRUbC7TgJFz3FqODb2=REKAH3bWF%Rjz$T%p8fu&+`t^Gvv1wc d&)@8yz<>e)!byQJp+bcP8#;UlF=B%P06R~di+un9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/element.gif b/lefdef/doc/lefapi/images/element.gif new file mode 100644 index 0000000000000000000000000000000000000000..150898251de90d00c6327c6e287c2b6c830a286d GIT binary patch literal 121 zcmZ?wbhEHb@#^7Bzzto~!rXn6a;+-|1YC8( UPfhf6I<)e-!tw12YD^5)0A;r(u>b%7 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/emptyset.gif b/lefdef/doc/lefapi/images/emptyset.gif new file mode 100644 index 0000000000000000000000000000000000000000..f83eb0be9ad2ed570321abe42dc5ce1644fb7f0e GIT binary patch literal 81 zcmZ?wbhEHb6kyqk-)7Df@lZK2cg2pJ)a{F=th(aH$Y2cswJsXO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/epsilon.gif b/lefdef/doc/lefapi/images/epsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..753b8c7cef695d7bf5ba15a42791f4246cef8744 GIT binary patch literal 123 zcmZ?wbhEHb%_1T9H|KtPIuw1JoBm literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/equivlnt.gif b/lefdef/doc/lefapi/images/equivlnt.gif new file mode 100644 index 0000000000000000000000000000000000000000..deb2a0bb4eea15d6e66ce2cb5821e4979305d8d1 GIT binary patch literal 115 zcmZ?wbhEHbRfjb?ic55V2QBtol(?>4kii-NpeGK=GU?NX|AcHjk!Z0c^ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/existntl.gif b/lefdef/doc/lefapi/images/existntl.gif new file mode 100644 index 0000000000000000000000000000000000000000..3338a4eb820e95eedb1a12f7e087abe0eadf4d47 GIT binary patch literal 117 zcmZ?wbhEHb<_~`MXrPbY8!rDNU{orItMh0sDL9Q&4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/gtequal.gif b/lefdef/doc/lefapi/images/gtequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..adcc0dd377ee1e11f5eba9755fd655c68019e901 GIT binary patch literal 126 zcmZ?wbhEHb0SSQ2U|`WUIN`Z^?+rDTO*Y;}6$cM?ELo`H61HY>>Y^fv XY?+m>z2E;9aZ2=%dDqv-!C(yl-_0vt literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/header_doc.gif b/lefdef/doc/lefapi/images/header_doc.gif new file mode 100644 index 0000000000000000000000000000000000000000..3dace6c2c084e6f4ad5c19794e7210b61ef3a510 GIT binary patch literal 2954 zcmbV~`9G9<8^>?Lv5jNOkTpWbdP+BDNF8IBI64&**-E!;Z6ta0lq-w8bYR z2=PE#5IDqdox~Rih9CrjPzb^x2q!8ShF}DOQ3%E$7$+_f7(x&TK_LW#5S)06!Vro; zC<>t%gyKXi216JEVJL)Q5QYOK2!|mYfp8SUF$f0*&<4^#3p9h*I5CGf2n?ezjKMHY zj0F{fzz7N>7>wWq1-L{J7)425|uY00KA!)IbbC14{4|aDc%;8%P5!oJfwi1~oVsisD3&z#kY3 zDhxw09OMe@0t#@6;uwm996{0`0Kf&FgP?(15GBY1V1jNC2Veq*fkQwI!~itt1XzFr z3&4H8r)jw|8-I@%8l$ z4i1irib_sS&dJFsFE4LyZtm{x9vT{&nwnZ&UHxD0&foa|`4HTODum>$Dzn?d1@~y2 z>#EFYj}})x&b6w_eHOPD_IcM;mDib|Xv&nczOLAGZKAKphGv&R4OG4Gf@@v#s5gTa zu<%ZOH*}X`Bqbo+v5?(#{R5_BHtV19XXN}J-n;6ryC1e<@Vh=sUwq?Gn$~oAV~V0V z>YMq8iA~1F8`aW&zVnePiQ2lC+$-odo03V7J?BLyA~mlb%5S*P^Q}ze=89_A?Mc@R z&0($D*2JXMY32jixhg>KWlQtu!Lh!$J)f8UrmhT?GrJEsaJNdPvKsC5@=9`E%NJpv+w_NjcSx-sNcQ#CDhCuKf0?YxV6u(a1| zqxoJR9v_CYTLKS9^gLJnLH2D4lRBj=Y-&M_E+eZ-rAyC-mp1k_F8JSbD=&LenM-98)`k+3faAHZ;gD)p|wg7URr$XkQPGcgy$G{X*g^#?}o{^lI; zi|Rr$CBaojFds6rw9h+6QMaSN{oWy*KdheLM}rg_C8*o))lv&6b6fc&>UheoQ}oaB zDLKsOGZtylN#=Xe$}WY#Mfwd%eVMB6r`G+|HG^j4V7F;E1_p>~nMS4e<`jSj_k-HgqNP zobBdUn~7%eyog63q{4e&kBH}g>TwZ&=OeZF`B$NbN5yk4vXfaQB023OYJAUb+LJbx ze|EI2=ToO4cUab)QldR0tn zs~cxsi7`b!H1=?h&;HaFbJ>pbD&BSZH^Wb5zZvI-ljxa`rHhJ8Q*!xar!71a8IlnX zu8}W#FmAD&cf;}pgUq?4h!dCk)zZpJRXL?zCwK-9OKW=1WCeNmdYU9BjEO#G4UV(a zgOnX@B_10NclQM~tv_6ee{A%hG-M`-EEs}FS+-Wenq{6VDRx^Rnc<^6khe`2FGgz zcwV1cbWH3MHjDY?pGo>iJ-7L=io7#(yXa}%Dydy;N^aJm^K`UohS=Qbl9$?BvXJI?F}Xn#O{hz<*<0c9Os}gqF+fB`da2L+9LM&v z-d&FPqhp<+**+Pr&ON4@qCXfGoY5vzB#V_@U$jQ)GEa96Bwq7VHnQ-De9(HI25tjgimZ z12&vHn^$G2mk@GZdhh-xl3s7l%~FnPKL0SW-grFlf^nQ~1^ZZ;i?-qLvhkl(NteKc ziZF+de2s}omtzbZvPne>9htKnj(+v{Zq}Oz`YQwH?=TH=TA_rF+2)fSyE%BO z?t+`fqE|cDY3Sd}J!=f?6KUYua8OEBRwv2u$il$zeCqHCiB@t{vv!s!TBonzXYF9* z|CaLBljix>#y)Pzd3RlY-IW=a=KJ**p9r2maEsscU8OkROTl8{7YE0UlCRK)1aR#e zFLOIZ_RMGs`sBO}-_Yc^$;m-ML0(>7hK7a`5)vF7 z91KW6@h1x-0|O(24oD1S1_O(|!3odRHkvadv#d@WGPoZ&GpMm9%#mYq0FRie4s(n* nbMqS!R%dpdA6l)kOXyft19Om1uP6OMjf-F^`#KTlt8e?Jeezt7+A R{|_*rz<~q{8l+GF06WF0eIEb- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/infinity.gif b/lefdef/doc/lefapi/images/infinity.gif new file mode 100644 index 0000000000000000000000000000000000000000..766b388fd5bb6c91ec1e3fcf0de45ba8444f7b66 GIT binary patch literal 139 zcmZ?wbhEHb6ky~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0VVqtK?bM;<}*R}nUcQ=VRPUhhZTqtzO;Bt`c mf+rI$xr=5MSlG^Aut-6qfwR-0Q1b;-C+lSAwNWbt8LR>QI4nH? literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/integbot.gif b/lefdef/doc/lefapi/images/integbot.gif new file mode 100644 index 0000000000000000000000000000000000000000..3beec4f22b65e3f555aa8ded68bfed95eca1a1dc GIT binary patch literal 134 zcmZ?wbhEHb=}PM@L6tVPRTYT6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471Bto2aSLaOEH(ZvA@)6D!?7_0%Vc`kMU literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/integral.gif b/lefdef/doc/lefapi/images/integral.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa748c92f066dda9f052c88ec8431474edc7fb3e GIT binary patch literal 123 zcmZ?wbhEHb eGhV(7-L{ks*L7vt!*q7vdn*2g(Qq0EgEauLUnt)I literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/iota.gif b/lefdef/doc/lefapi/images/iota.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2dfc0d6ec0703a9ec2cb80aa0fb91732c712a9a GIT binary patch literal 112 zcmZ?wbhEHbCMz{sEjk^z~)z#?mK!gKZB%ROEbw8B2NCaX53dCqlHRXLH!%aRr>$Y2cs%Q7G+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/kappa.gif b/lefdef/doc/lefapi/images/kappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ede7b0fb74bb772fe59de82a908577956b5ac6f GIT binary patch literal 124 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^rojo%)q8JDo0RU^cA@qmN0;nEnGA7`l-I}BO)uDL62toF OKSxZS#}O9>25SInswUZ0Z`H91tFjsx(aPr7 zgiYBn71R&|G$?_EI}C<4q@jgo^M-tlBhIOF=KWzTDiJ5@#JpWl;8Mk@IyJZl6y7=$ zXX*_0kOwf)jX2;R5O4@;hyfaucnS^-hBl<3Wj;B7jT%Qq%m)d77>i0()Q~Ief&!Of zDux`9Gy(t@o+D_uMU=<`nCM0vV1i*d1U19}jZR>J1B0OrY4a=cuW^kU$FMO334a)i zO3nNNgY|ogV55GY!IC^wkh@=R5T$1f((&644146jgI|7tw`N1vh@AO6abxqumBWo|sj-85>fWuQxoE@2;bW_FV_$~P?!UXW{m{eAOg8zV z5EY{IMGd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/nav2_index_b.gif b/lefdef/doc/lefapi/images/nav2_index_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..87fc9ddba320b458e6a8e00e4c731c196938f810 GIT binary patch literal 854 zcmb7@F>BLd5XP_I5Qjj)4kdI@T!KiKBcQkl0d1WEu4Zt#!F+-2LIf2YG95S=b#e%; zYbFt~ftxcq<_lyJr}KAj`vv+g;dtMB?)N0K_4*UawL#Po08cLqR!C>ph6Etp#l03kqn>b*?Fb<(c3}`yR zf`h?mBb~LPdd)R8C)pT5;*YUZky#6D>o1D7(b{KQQbD!cYrQSXVr=QuwwvKXZXRm+ z4XYfqNl5cKuqDF7QyV4SZnxL#_51z7U@#mGN2AerJf2J@)9G|Jo6YC*#bU8sE?2A7 zdcEFkHrwrXx7%IzUVX^d|GD$;#?6lG$^B}r|HR{t%3kN_Y8Z!0ufmt!84{pHiWp*;9R$5<;9GOBfF^C24o6MEcjxE2oj^b@%Y^D{0F>mnv;9a zb3V^=zTI0>Rq<3TLif{Obmu4{O~gcoNC=fuq%(M50JE36mHS6wrn=w9t&#V&~YSm13ogQewxV(pqU&+9)lS0+*~6 zvtpxIEEL`vtqdz;lo2qZRf$%@N{kXr1vSI~4N73)4uhc$X=tHYtRY+Du+~OvvHma? z6|-ieS*%@9;L@-*MjL^9K;f+x)?&249`XPtx)BHb0|E{~4KYB25>LT_!O(^@w8SQ7 zuTkR|X0buSAI73GhK(Rs*aZbHSquwuMA8TVTzHP4;TBOM4`8AjaexVi;Skgi12j5; z1r7{`Hl)R_$iBukY8=7F5G4FzEGi>n7wD|tQaBs6`*fCMp`6_9dYvdOqmz!^wqw{L zJ09%v9W3j>nFMKk4%iaHgC}Pcx!rEB*X#HD1A#y&6bgsK(P%UtkEc?pOeWLa-90cc zkj-ZE`TWGh#Psy^;^N}!>gt`||32jZ|FdoV?hP&~qB7fR{}VyiKUCy;sCu;j%XeIx zcJ9A2x-H$jlpQSTtzXE+=cp^M@4LL`^_g?gNNMw8sFP|lYpME|FU1SNL$9=5+kYW` zX1u2L$`?c5e-eD__=AVCCoc3;X8WJ)o~`TiJn0$phkfbIb35NCxFTDp`W_y6due#2 zuROV<_p|8L^4R(0?cI-zeK<9ndo8i%Irn0-{_4Hb>+heg4*0%JKCaFduV0JTjb<7< zb8W{?ymV^glJ`_)&PR!@%V)iR|M9|}<25avXPO$LO~-C~KDb_&KfnCb#lydicWiv( z=aa#b-#x>Llb2e0D-V`!DW7e>$rB@~2OcZ5CvP=m$7-|wmE^8mSM1)E#PETS=RHGL zzgyXU`kR@{pFiDxWN@xy$D_X-?Pw@Fde}GlX;0|KuUjYEN?NMIG2dY5M(gfGz+2z7 z-nfb8d&cLVxm7k^ob0Q~^&f27;NSe}4DFpNt|;p7ezWwz+GK2|`q!HcLtAdt@4IKY n;)mx8?suQ7x@+B)?pR0{8Y8tw)JLg>bj57Xv-{Q~L8|;0OU5W- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/nav2_previous_b.gif b/lefdef/doc/lefapi/images/nav2_previous_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..b02bc97081d3d64f843aac572eabcfc39cdb022a GIT binary patch literal 871 zcmb7@ziZQB5XP_I5W#?;gOnnQOArU)2vl5zh_+6FuFW9A4Q6!7E>zILA%h%tF#Z}k zgtm^EM8rnVHIrlhflT6be(qcU0pBGY?|aXEp69-~zkP4>*25jSD8J?OsECQUNQk6R zsfwDYi-u^{rKy;Sxmbv0y>%5gaTgEqtkzHolW>WUNR%X1(j;9nBq`8F8ZDZ6oi(S9 zsk&;YW{ssXQ**UY%c9`YP2JT)JqwDrVH&Ox8VMtXtbTzZBlIg&I1z{PWd#w}5j2bgpd2TT~oA=HQg zO($4zFc@v5vsP5Exu)hM8zV^kF_tPaYk|%Bi=x?R?Xy`@K{dJ8dYdSVu}P=4-54(9 z#zQT?!72yMB&7Kq*b?F4sTn2hc6)t&z0>J*yWL)|*YEcSgTZh(9F0bMdwb*Ycruwx zr_2L-7lQu?5$=X;{LA9Z^dz@^z4(yXsnQkgHJ}r}z2TKhXK*?%6rd`+2?J z&*!FPY*?F|UqYhDU*yrDgfK!lA%YM|P*F-KBa{;=2$kxRQNkEuoG?L{RBt&YoDt3m z7lcdIDku?*2u_3`LPCj1N+cta6Df#90c}V_3(a^f)f{ygrJPbhsZ?W8F-94uOi(5j z1ui+GoKr3+mkJ7R1*3vfA*hgGL@SkyN=~Jq5>r79F+hV7Sh&MrXhRxWXqL*5s&P1D zf-$N5VJs@n85fL8Wfv5<6r2gcgoJxQ;VqM#Nx>xSArD}p8*#utAm9+x5Cb$Q@e~{w z3~fk5ORD75HEJBexl}>IAI72*f(waUVHXs*V1WaJp$%!NR-|6z8a0l@#tkrCOk|ennwyRPEDPl7cdFSL-#R zRE$PCYTJfkg=~0G%Qvu;17i}T@i|~i2oIi&Q6wxZEG8xQBv1ugY*)v^j?c-W0@it$qXn$+4 zE^*i{ykFbg4*!)J%ZnYSQ;+I-3#Poe6`S@<+Sc0!w@!CAWVURq3EZ%4A!c!SQQp$P z4;Rfn<=Xb4@!k$g{}IjnjXAk>m&bK7;Z|(FW9)_8hv|D$yLZ~Y%FvsJlKOVb+|`{>B5xfgEqpxhr z^!%SiNfX|8&6}I_`{AoET!?;d&Sa_c|I|-b{A0NiOK=ec3jKEq zZcbdzOgJg-ww3;TEA#yLMz_B#u&@1tshd}?VtK*w(;u56w$`s(wrhAIYn8vjRn^5w^P|-|V_EWoWS9h)7veNg) zw&agS3u|4!yI;F!4GDDf!k4e<6U9-Z!!?EXc9h;opVEDiIf<9%X0( zEGOqqt24F0%Pq^C?veVpt2KYIIcnA66BC!Z?|xC+yVCCD;h)+MX74K-J#smDNkm#f zw5!3n;lX_Fse+P_U&{2)pZW3q{l$%$S@Yqo^=qa-S)`wx)TkMe;;?t literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/nav2_toc.gif b/lefdef/doc/lefapi/images/nav2_toc.gif new file mode 100644 index 0000000000000000000000000000000000000000..5474e92e609d9f4b155e6c30e2b1d4a781670170 GIT binary patch literal 1154 zcmb7@>uZ!(5XL8vgf$v3Xau)5;tirJQaIgY7a=T7yu^A5*rt&fXyE-_U>7fZm> zlAx`h0_rpbjhF?MY+5x5-3@r9P0BGV0T{sW#b%W%#-^Lw6o zcXh?8Q246~nnf?^?J-1_h>3(q36(KqEEy&vWYk?+L)MaIvO-qfTQL_r@)-W3u!|I^$ zR;&>=B1RO9XfN++i@ZAq_1wt25+k9JW@hRp$?5Q88N<%j)cc z0++&8#EQZ_pzzizTNSIYhdh9ZZo~oqfPh0#Lk!TM#8Yr!Fti~JEp^GcYt%TxtS(6S z!&p=zEQ(xV7ZkW;6;|Ykq!9qP@Ek$IEuusoz(hCV022(uA*dk+XmkP#92g93NUK|s zdyQ+5nCvOzx=jZ$V{-UCyU@%x#R#sVASzB8hi^byccvDkTOG`_8dwVjOOsCTW z0|P@tLt|rO6B83}d*6M?@BcIZb@n75WzjO%>i!cE-+z?lo4e+hQ&+$D&0M;r|MtV~ z*hpR?UA$o=SWkt=0tY(p_Z}YqeP=qcd~U^e{_w%Vo~78p0Xbc*QYLx-^q#YYJ4@A$h3B?yp{8O@P3E_{Tx_*sV>xzK3`m% zN!5h+jaB)kyj&6Q9qo)QEP1nU|48?NV6=I7cI46Jd;fm9Hm831lG}feTx*;xA76-f zjQ`oX=~?NyNW;vo?%adF4d2)k=*y0*tGoNh=heN9%?01S7%iApJ$fiwUHqWDuDWE# njyp&9ZakYQ2o>i2FrWN;Pi&3d`zZ6lu4O$>7Oc<8q80xGL>~yq literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/nav2_toc_b.gif b/lefdef/doc/lefapi/images/nav2_toc_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..727f3ae5ea1605452ef2b2f2bb555f7f293c9328 GIT binary patch literal 866 zcmb7@y^51j5Qb;LA{GHb3kh2&HbE?eA)r_&1axB+u-z0QOkr*yr65Gm!XkwXY+?Lq zEW-YjsYGNqI&~_`+(0U^8lU;r8}Kw?IA`8@-gmw{8a%vn_vt{c$Zt76Dq-GEn;cz$_jmG2gWHOmfr?c5?KA$fZ zi{)~;TCLXW^=7l#Znx*X|32jZ|GEC>!o`;C$gOIv|HOmVec5U4?j64W`m%NT=Kk5? z{M)NbHy$7C9ew!z=Bhsbb$0ae^zF6&>)pZer`4?csnmtm|O z7WxpCfppW-u_9D(a$9u4g32xo7DA8_R21#j`RX6&ybPOj_S(O-_BU(SugMOSfW*;w!};<#OhkbkXRBX5fX(GsUfwb zOe&-(pbcqgp&75$&2h&X!^Vg)>c*n7)>t-Hj8#X0OSXpDuozYcg|}jjun{q$U_`4? zYm|+OQA`Cj!~hLSVBrpfp$%zhp;?_FSL3j?Vy!xV7>kP8vRGDU7ZkV@wjx#(?g53j zR@tgpg+1f}Omrg-_y+_Wf*N9g1|^5@Au~3cH}d zC9AL^M6lh+o!iA2j%7N*6T&-7`=4dwmriR+4JC*?_oIy-XuulbHJ7m9z1!Y zC?O#sB_$;-EzR%u=jG+)=jR85!SeF*+S=NNhK5im)Y{tG-rgRGM558?@bGXf78@TQ z|J(cTL;nAtxj*8k_$ZDRxmNd|$o2iEIN!{5S6lAa`;rzEHhwR6;j!epZ=|A`` zV`}rIldn1|-aH9z%*rU~teiJ^uyo-1g~8LAL(#&x;^x4a?5f0SUtKuwSaNUN&d2Em z{l}l*oieTM>dU_Bwf3)_B1$I5ajIoz~u?ZYb@t~DktERx&%OM5DB+$ zA+%jH6%m_yb0)|91DV9>{M@(x1HMZ*-uIsSJkNde$xqar5aA|aAO zr7CKoE*hd)m!@JS=3*h1_10C~#9chZvsyzXOu{8XB2ki5Nt1NRkfcBxX|!nOb=I6Z zrs}Gpnl+ZnOwH9oEsKInH+5GJ^(-jfhH1D)Xe5lZYMQ2Nh9*;?Mhs{u!Qzg=Xd{gl z%~^)3=D1myW%*+)mAiSEXW4~<%W#XZNZbR(TT8bLOYD&cm~;~d{(-XiB$5^V!tOYjfFN$WPwa;cr1=ZwU>usVe#wMNGc4N4Z z8xOVo2CE!2laS_fU`vFDr)HG2+wD%L)9rS9yjmP83WHOyjXS3OS zK3^;r%jI&lTCLaX&1Q4e`|m^k|DW4`u3c}*mh4q){U`QYk7TR0dvNmM{AKIL-Q$as z*|%5Qcb>jKIQ{tj&5pkKb#eOX$J<-|*Sm*jpO@3_(bwbU*_WU1?mfTU+u4?fe*ryw BfVltw literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/notelemn.gif b/lefdef/doc/lefapi/images/notelemn.gif new file mode 100644 index 0000000000000000000000000000000000000000..479a88d3f83b722f8a83b4e0bc96457c1e6739f2 GIT binary patch literal 141 zcmV;80CN9FNk%w1VGRHc0J8u9|NsBBwY9CSt(=^kl$4Z=jEsAGdvkMhT3T94N=i97 zIVmYAAt50U5D*9m2mk;8A^8LW00031EC2ui01W^Q000C!Fvv-3HOf|X^kK{5gcYI) v!I4#hg9eIW72(2+^cz7_A literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/notequal.gif b/lefdef/doc/lefapi/images/notequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f3d74408318be926ba759044d1af33e32e6fdbc GIT binary patch literal 121 zcmZ?wbhEHbzY VN-uU_Tv6b;puzfyk2oWPH2|hgCG`LR literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/nu.gif b/lefdef/doc/lefapi/images/nu.gif new file mode 100644 index 0000000000000000000000000000000000000000..049486c79cd9d8d526b7d89f8ad0a2fe21bb7e35 GIT binary patch literal 124 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z+!1|!gKXr3vVSRN%4s#lL{j`9?o?P3Sedu>nu?axqCF#_NA(H-y{VV YmQ@a`j4XI~TAUhF6=h9la4=W{0MM!<(EtDd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/omega1.gif b/lefdef/doc/lefapi/images/omega1.gif new file mode 100644 index 0000000000000000000000000000000000000000..0009f0e3029e451f022cd6541d553efba0b73688 GIT binary patch literal 144 zcmZ?wbhEHb@#^7DIy*o~!o;O$k0C%cH1rHo?&Cm`>X7Wv5@fIj0EewD8~^|S literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/pareltbt.gif b/lefdef/doc/lefapi/images/pareltbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3c0f75b7d96b7af435ca7d4cadfc0da691f299c GIT binary patch literal 126 zcmZ?wbhEHbR~A2WZ@$fZfghVWe5P?QSOWmu4k>5= literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/parertbt.gif b/lefdef/doc/lefapi/images/parertbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..81fcda4e8e32ce249e416556201de738684ea355 GIT binary patch literal 127 zcmZ?wbhEHb_^@YMD_aw+u7lX)y{i^H?d3b37v($Su@ b#`l@%*;5jUi(1&*4osd=$)e@Y!e9*mS3xW2 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/parerttp.gif b/lefdef/doc/lefapi/images/parerttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..3479f8d9a92563e0c50a6b87dc38522ce8bd8b60 GIT binary patch literal 124 zcmZ?wbhEHb@#^7EOZ_p3at2<)%K5oV!FJ@d8KUq!y=OBj>Co XDeets^F*sk+xJ}17vXkcV6X-NE=VUT literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/partldif.gif b/lefdef/doc/lefapi/images/partldif.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f1928e773c45229ae7b2a67a86d9316c7ab688b GIT binary patch literal 137 zcmZ?wbhEHb@#^7Bhnro~wP%$x2U9WZfKkSj9kQX@pCW%rP%f kU&)qGoWRv-a{1yC n&X<19&MYg=H7)vagsEFZHPAzVPukC+aiUk#HO)>TMh0sDU9l|w literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/pi.gif b/lefdef/doc/lefapi/images/pi.gif new file mode 100644 index 0000000000000000000000000000000000000000..71444f3c50f9181ea24f57e885725eb1ee3df4d3 GIT binary patch literal 134 zcmZ?wbhEHbHR46R~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/prsprset.gif b/lefdef/doc/lefapi/images/prsprset.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1c8c73bf084fcdbc83b30a5fa6bf1b4702ee6f6 GIT binary patch literal 67 zcmZ?wbhEHbe+4F3%o41uZ?f3h$#Ft9M_0ND&6GZTz9y{)aSrKP2ml$4B&jD&=Qb8~ZRYin9s zT2fL{DJdx!7#Ii$2mk;8A^8LW00031EC2ui01f~S000C(Fvv-(y+NcR$B;!LOi433 zPSzw;;c#f+aue|e@!@=wqu{ATs>1li77WXw0Sq)~6$A=(z+_M(Yg4<`dMptDJI@F< AMgRZ+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/radical.gif b/lefdef/doc/lefapi/images/radical.gif new file mode 100644 index 0000000000000000000000000000000000000000..74fc200c7abf8a90bc528bcc3da1837531a657d1 GIT binary patch literal 78 zcmZ?wbhEHbL!; literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/refsbset.gif b/lefdef/doc/lefapi/images/refsbset.gif new file mode 100644 index 0000000000000000000000000000000000000000..410f8277cea4d67d77fdce2607d3c27a87dee28f GIT binary patch literal 118 zcmZ?wbhEHb~0+1c62$;n<`UY3@Yii(O75)vF7 z91KW6@h1x-0|O(24oD1S1_O(-!3odRdo8kiru~m|QavWd(Iv^#EwyD8<7`$Axjfe! LW$%6qGFSruC6FQZ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/refspset.gif b/lefdef/doc/lefapi/images/refspset.gif new file mode 100644 index 0000000000000000000000000000000000000000..8464b13226ef3b7727e52d91b6c95cf4505125dd GIT binary patch literal 124 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK?>gy(7%=83bvnS=+6uwAZbG%|JPU~_8r@D<{_ xe6eBcl2G<&XGaGU7STh?#IqxrjAp&9oD{^u-FlESR6(DMO{+k_{=6WAH2{BmE35zj literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/rho.gif b/lefdef/doc/lefapi/images/rho.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8c565914153cb35a245d77aecf480b1ee47ed94 GIT binary patch literal 134 zcmZ?wbhEHb@#^7Gr}Go~uocb4Z71b_a)W8X5XNm6`ldU`n#r h5$Vk(QtH7g&Dfj#OC%MO~V6!GVRr8UQw$C}scv literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/second.gif b/lefdef/doc/lefapi/images/second.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e65da28d0c0efce39715984712f8801348eeeda GIT binary patch literal 115 zcmZ?wbhEHb$;m-ML6(-5hK7cUii#2v z5*!>H3^1VhlZBCifssK6BmgplfyL0^gy-tL#S<2~>-s47-8*71uQ0+b*yps@*3<$M c(T9E|OI0SbJf7qrz{Aa`W)PrfD9B(90F2%y>i_@% literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/sigma1.gif b/lefdef/doc/lefapi/images/sigma1.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd4939b672a10f6dccbd67715280cea74990a72c GIT binary patch literal 135 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu$UN}@XR)SE}-4+)KOH>xM^ZgU literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/spade.gif b/lefdef/doc/lefapi/images/spade.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc55199c42f6251ea7cde8a4e2964f7687e6ff27 GIT binary patch literal 122 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z@lPs!gKZB5&@+*60S}OZbmWAK>;m^GM$ZG*Beu$i%O;*NS?~UU=0A( C93AEW literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/sumation.gif b/lefdef/doc/lefapi/images/sumation.gif new file mode 100644 index 0000000000000000000000000000000000000000..f65c1ddc6f666d05fa0e78b8555ab1797fbfd8e2 GIT binary patch literal 77 zcmZ?wbhEHbCMz{sEjk^z~)z@lPs!gKZ3MK6qAd3ddmm>S4(s*<(&(%RNdULR$SuoyKTpL26M H2ZJ>L%*-X* literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/therefor.gif b/lefdef/doc/lefapi/images/therefor.gif new file mode 100644 index 0000000000000000000000000000000000000000..95944f41d016e6bfe322c85717be224b389c76a3 GIT binary patch literal 111 zcmZ?wbhEHb@#^7TbUmo~s?aRki&lcO{v2gjg__N?m#|?)smtvTqnxzbi?iOm z`wuoiNS4WHrXi}f605+A?54DFA9-EgIk4lAd<>vaXoLihCKfP>V-A-AXw^EyN?%Wz zR_A?gJ;v_|JZ@5}macoWcE#Bl+FW%vKkn+cuX_UL=U{iH*OMiNa3~TJ7=;uAxX4Gh zNO>6Jt_J->%*s>ZcR%s hJ>a;WAd3EzgEB1uLDYXG9%EKL9a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/univrsal.gif b/lefdef/doc/lefapi/images/univrsal.gif new file mode 100644 index 0000000000000000000000000000000000000000..effc1a5fba72adb9b56c56f6ca69f9143c43666f GIT binary patch literal 135 zcmZ?wbhEHblCGj?*M&2x#Fav1TasHk$+uk*s%2`5+!_dnNVVz34P_0cY) literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/upsilon.gif b/lefdef/doc/lefapi/images/upsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8a2b3389f27abf4a7a8593e1fa193b2e606df46 GIT binary patch literal 133 zcmZ?wbhEHb0~jd&WMO1rU}Vq%@jzxUuoxMf@Lau?m9x_$woi%ktRpX@#^76XG5o~xHWnV~799CFaZ`=Q3wCJ}do2-n3N f(_dR`eWFvj;rsrW4bLQES=ihcU)b!zz+epkQ~WGS literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/video.gif b/lefdef/doc/lefapi/images/video.gif new file mode 100644 index 0000000000000000000000000000000000000000..f339ffb6bdd11220d4e530f1798597d12a1bab46 GIT binary patch literal 906 zcmV;519kjINk%w1VHyAz0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui02%-n000PY009UbDDa=bg9r&K1dxy+!iNP95^VSoqCrrnR8`Kp+#Yu g3~EznQ<*nQ{*?KYrO}s4v1-jab12ZBR|5h7JB8)3VgLXD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapi/images/weierstr.gif b/lefdef/doc/lefapi/images/weierstr.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f9689b8080c0d57935d6802003b3e14b7def1e6 GIT binary patch literal 153 zcmZ?wbhEHb@#^7B_5@?L763@Ca> endobj +xref +4879 819 +0000000016 00000 n +0000020508 00000 n +0000020708 00000 n +0000020737 00000 n +0000020789 00000 n +0000020827 00000 n +0000020977 00000 n +0000021061 00000 n +0000021142 00000 n +0000021226 00000 n +0000021310 00000 n +0000021394 00000 n +0000021478 00000 n +0000021562 00000 n +0000021646 00000 n +0000021730 00000 n +0000021814 00000 n +0000021898 00000 n +0000021982 00000 n +0000022066 00000 n +0000022150 00000 n +0000022234 00000 n +0000022318 00000 n +0000022402 00000 n +0000022486 00000 n +0000022570 00000 n +0000022654 00000 n +0000022738 00000 n +0000022822 00000 n +0000022906 00000 n +0000022990 00000 n +0000023074 00000 n +0000023158 00000 n +0000023242 00000 n +0000023326 00000 n +0000023410 00000 n +0000023494 00000 n +0000023578 00000 n +0000023662 00000 n +0000023746 00000 n +0000023830 00000 n +0000023914 00000 n +0000023998 00000 n +0000024082 00000 n +0000024166 00000 n +0000024250 00000 n +0000024334 00000 n +0000024418 00000 n +0000024502 00000 n +0000024586 00000 n +0000024670 00000 n +0000024754 00000 n +0000024838 00000 n +0000024922 00000 n +0000025006 00000 n +0000025090 00000 n +0000025174 00000 n +0000025258 00000 n +0000025342 00000 n +0000025426 00000 n +0000025510 00000 n +0000025594 00000 n +0000025678 00000 n +0000025762 00000 n +0000025846 00000 n +0000025930 00000 n +0000026014 00000 n +0000026098 00000 n +0000026182 00000 n +0000026266 00000 n +0000026350 00000 n +0000026434 00000 n +0000026518 00000 n +0000026602 00000 n +0000026686 00000 n +0000026770 00000 n +0000026854 00000 n +0000026938 00000 n +0000027022 00000 n +0000027106 00000 n +0000027190 00000 n +0000027274 00000 n +0000027358 00000 n +0000027442 00000 n +0000027526 00000 n +0000027610 00000 n +0000027694 00000 n +0000027778 00000 n +0000027862 00000 n +0000027946 00000 n +0000028030 00000 n +0000028114 00000 n +0000028198 00000 n +0000028282 00000 n +0000028366 00000 n +0000028450 00000 n +0000028534 00000 n +0000028618 00000 n +0000028702 00000 n +0000028786 00000 n +0000028870 00000 n +0000028954 00000 n +0000029038 00000 n +0000029122 00000 n +0000029206 00000 n +0000029290 00000 n +0000029374 00000 n +0000029458 00000 n +0000029542 00000 n +0000029626 00000 n +0000029710 00000 n +0000029794 00000 n +0000029878 00000 n +0000029962 00000 n +0000030046 00000 n +0000030130 00000 n +0000030214 00000 n +0000030298 00000 n +0000030382 00000 n +0000030466 00000 n +0000030550 00000 n +0000030634 00000 n +0000030718 00000 n +0000030802 00000 n +0000030886 00000 n +0000030970 00000 n +0000031054 00000 n +0000031138 00000 n +0000031222 00000 n +0000031306 00000 n +0000031390 00000 n +0000031474 00000 n +0000031558 00000 n +0000031642 00000 n +0000031726 00000 n +0000031810 00000 n +0000031894 00000 n +0000031978 00000 n +0000032062 00000 n +0000032146 00000 n +0000032230 00000 n +0000032314 00000 n +0000032398 00000 n +0000032482 00000 n +0000032566 00000 n +0000032650 00000 n +0000032734 00000 n +0000032818 00000 n +0000032902 00000 n +0000032986 00000 n +0000033070 00000 n +0000033154 00000 n +0000033238 00000 n +0000033322 00000 n +0000033406 00000 n +0000033490 00000 n +0000033574 00000 n +0000033658 00000 n +0000033742 00000 n +0000033826 00000 n +0000033910 00000 n +0000033994 00000 n +0000034078 00000 n +0000034162 00000 n +0000034246 00000 n +0000034330 00000 n +0000034414 00000 n +0000034498 00000 n +0000034582 00000 n +0000034666 00000 n +0000034750 00000 n +0000034834 00000 n +0000034918 00000 n +0000035002 00000 n +0000035086 00000 n +0000035170 00000 n +0000035254 00000 n +0000035338 00000 n +0000035422 00000 n +0000035506 00000 n +0000035590 00000 n +0000035674 00000 n +0000035758 00000 n +0000035842 00000 n +0000035926 00000 n +0000036010 00000 n +0000036094 00000 n +0000036178 00000 n +0000036262 00000 n +0000036346 00000 n +0000036430 00000 n +0000036514 00000 n +0000036598 00000 n +0000036682 00000 n +0000036766 00000 n +0000036850 00000 n +0000036934 00000 n +0000037018 00000 n +0000037102 00000 n +0000037186 00000 n +0000037270 00000 n +0000037354 00000 n +0000037438 00000 n +0000037522 00000 n +0000037606 00000 n +0000037690 00000 n +0000037774 00000 n +0000037858 00000 n +0000037942 00000 n +0000038026 00000 n +0000038110 00000 n +0000038194 00000 n +0000038278 00000 n +0000038362 00000 n +0000038446 00000 n +0000038530 00000 n +0000038614 00000 n +0000038698 00000 n +0000038782 00000 n +0000038866 00000 n +0000038950 00000 n +0000039034 00000 n +0000039118 00000 n +0000039202 00000 n +0000039286 00000 n +0000039370 00000 n +0000039454 00000 n +0000039538 00000 n +0000039622 00000 n +0000039706 00000 n +0000039790 00000 n +0000039874 00000 n +0000039958 00000 n +0000040042 00000 n +0000040126 00000 n +0000040210 00000 n +0000040294 00000 n +0000040378 00000 n +0000040462 00000 n +0000040546 00000 n +0000040630 00000 n +0000040714 00000 n +0000040798 00000 n +0000040882 00000 n +0000040966 00000 n +0000041050 00000 n +0000041134 00000 n +0000041218 00000 n +0000041302 00000 n +0000041386 00000 n +0000041470 00000 n +0000041554 00000 n +0000041638 00000 n +0000041722 00000 n +0000041806 00000 n +0000041890 00000 n +0000041974 00000 n +0000042058 00000 n +0000042142 00000 n +0000042226 00000 n +0000042310 00000 n +0000042394 00000 n +0000042478 00000 n +0000042562 00000 n +0000042646 00000 n +0000042730 00000 n +0000042814 00000 n +0000042898 00000 n +0000042982 00000 n +0000043066 00000 n +0000043150 00000 n +0000043234 00000 n +0000043318 00000 n +0000043402 00000 n +0000043486 00000 n +0000043570 00000 n +0000043654 00000 n +0000043738 00000 n +0000043822 00000 n +0000043906 00000 n +0000043990 00000 n +0000044074 00000 n +0000044158 00000 n +0000044241 00000 n +0000044324 00000 n +0000044407 00000 n +0000044490 00000 n +0000044573 00000 n +0000044656 00000 n +0000044739 00000 n +0000044822 00000 n +0000044905 00000 n +0000044988 00000 n +0000045071 00000 n +0000045154 00000 n +0000045237 00000 n +0000045320 00000 n +0000045403 00000 n +0000045486 00000 n +0000045569 00000 n +0000045652 00000 n +0000045735 00000 n +0000045818 00000 n +0000045901 00000 n +0000045984 00000 n +0000046067 00000 n +0000046150 00000 n +0000046233 00000 n +0000046316 00000 n +0000046399 00000 n +0000046482 00000 n +0000046565 00000 n +0000046648 00000 n +0000046731 00000 n +0000046814 00000 n +0000046897 00000 n +0000046980 00000 n +0000047063 00000 n +0000047146 00000 n +0000047229 00000 n +0000047312 00000 n +0000047395 00000 n +0000047478 00000 n +0000047561 00000 n +0000047644 00000 n +0000047727 00000 n +0000047810 00000 n +0000047893 00000 n +0000047976 00000 n +0000048059 00000 n +0000048142 00000 n +0000048225 00000 n +0000048308 00000 n +0000048391 00000 n +0000048474 00000 n +0000048557 00000 n +0000048640 00000 n +0000048723 00000 n +0000048806 00000 n +0000048889 00000 n +0000048972 00000 n +0000049055 00000 n +0000049138 00000 n +0000049221 00000 n +0000049304 00000 n +0000049387 00000 n +0000049470 00000 n +0000049553 00000 n +0000049636 00000 n +0000049719 00000 n +0000049802 00000 n +0000049885 00000 n +0000049968 00000 n +0000050051 00000 n +0000050134 00000 n +0000050217 00000 n +0000050300 00000 n +0000050383 00000 n +0000050466 00000 n +0000050549 00000 n +0000050632 00000 n +0000050715 00000 n +0000050798 00000 n +0000050881 00000 n +0000050964 00000 n +0000051047 00000 n +0000051130 00000 n +0000051213 00000 n +0000051296 00000 n +0000051379 00000 n +0000051461 00000 n +0000051543 00000 n +0000051624 00000 n +0000051781 00000 n +0000051833 00000 n +0000051937 00000 n +0000052346 00000 n +0000052877 00000 n +0000053337 00000 n +0000057638 00000 n +0000058363 00000 n +0000060373 00000 n +0000060434 00000 n +0000060527 00000 n +0000060706 00000 n +0000060823 00000 n +0000060940 00000 n +0000061127 00000 n +0000061228 00000 n +0000061323 00000 n +0000061512 00000 n +0000061615 00000 n +0000061710 00000 n +0000061881 00000 n +0000062055 00000 n +0000062207 00000 n +0000062395 00000 n +0000062561 00000 n +0000062711 00000 n +0000062880 00000 n +0000062984 00000 n +0000063134 00000 n +0000063322 00000 n +0000063488 00000 n +0000063651 00000 n +0000063857 00000 n +0000063985 00000 n +0000064136 00000 n +0000064292 00000 n +0000064388 00000 n +0000064502 00000 n +0000064648 00000 n +0000064748 00000 n +0000064896 00000 n +0000065024 00000 n +0000065158 00000 n +0000065288 00000 n +0000065430 00000 n +0000065526 00000 n +0000065622 00000 n +0000065754 00000 n +0000065878 00000 n +0000066004 00000 n +0000066158 00000 n +0000066288 00000 n +0000066400 00000 n +0000066536 00000 n +0000066646 00000 n +0000066788 00000 n +0000066912 00000 n +0000067024 00000 n +0000067148 00000 n +0000067268 00000 n +0000067364 00000 n +0000067566 00000 n +0000067648 00000 n +0000067776 00000 n +0000067910 00000 n +0000068036 00000 n +0000068182 00000 n +0000068312 00000 n +0000068444 00000 n +0000068578 00000 n +0000068706 00000 n +0000068834 00000 n +0000068960 00000 n +0000069102 00000 n +0000069242 00000 n +0000069384 00000 n +0000069522 00000 n +0000069658 00000 n +0000069802 00000 n +0000069932 00000 n +0000070062 00000 n +0000070198 00000 n +0000070330 00000 n +0000070436 00000 n +0000070534 00000 n +0000070644 00000 n +0000070746 00000 n +0000070860 00000 n +0000071014 00000 n +0000071108 00000 n +0000071212 00000 n +0000071386 00000 n +0000071486 00000 n +0000071640 00000 n +0000071738 00000 n +0000071846 00000 n +0000072002 00000 n +0000072098 00000 n +0000072204 00000 n +0000072380 00000 n +0000072482 00000 n +0000072612 00000 n +0000072798 00000 n +0000072894 00000 n +0000073030 00000 n +0000073204 00000 n +0000073312 00000 n +0000073440 00000 n +0000073610 00000 n +0000073700 00000 n +0000073878 00000 n +0000073974 00000 n +0000074141 00000 n +0000074235 00000 n +0000074351 00000 n +0000074529 00000 n +0000074639 00000 n +0000074771 00000 n +0000074939 00000 n +0000075041 00000 n +0000075149 00000 n +0000075307 00000 n +0000075419 00000 n +0000075525 00000 n +0000075655 00000 n +0000075853 00000 n +0000075953 00000 n +0000076049 00000 n +0000076201 00000 n +0000076343 00000 n +0000076469 00000 n +0000076587 00000 n +0000076709 00000 n +0000076835 00000 n +0000076947 00000 n +0000077067 00000 n +0000077189 00000 n +0000077303 00000 n +0000077423 00000 n +0000077549 00000 n +0000077661 00000 n +0000077785 00000 n +0000077901 00000 n +0000078033 00000 n +0000078157 00000 n +0000078283 00000 n +0000078401 00000 n +0000078527 00000 n +0000078645 00000 n +0000078763 00000 n +0000078885 00000 n +0000079017 00000 n +0000079135 00000 n +0000079259 00000 n +0000079377 00000 n +0000079503 00000 n +0000079609 00000 n +0000079707 00000 n +0000079825 00000 n +0000079957 00000 n +0000080105 00000 n +0000080217 00000 n +0000080331 00000 n +0000080470 00000 n +0000080574 00000 n +0000080678 00000 n +0000080824 00000 n +0000080926 00000 n +0000081038 00000 n +0000081200 00000 n +0000081300 00000 n +0000081442 00000 n +0000081550 00000 n +0000081658 00000 n +0000081798 00000 n +0000081894 00000 n +0000082000 00000 n +0000082164 00000 n +0000082276 00000 n +0000082406 00000 n +0000082578 00000 n +0000082690 00000 n +0000082828 00000 n +0000082976 00000 n +0000083086 00000 n +0000083198 00000 n +0000083361 00000 n +0000083487 00000 n +0000083615 00000 n +0000083781 00000 n +0000083877 00000 n +0000084045 00000 n +0000084153 00000 n +0000084314 00000 n +0000084436 00000 n +0000084562 00000 n +0000084713 00000 n +0000084827 00000 n +0000084943 00000 n +0000085110 00000 n +0000085224 00000 n +0000085356 00000 n +0000085499 00000 n +0000085607 00000 n +0000085715 00000 n +0000085880 00000 n +0000086002 00000 n +0000086126 00000 n +0000086345 00000 n +0000086503 00000 n +0000086611 00000 n +0000086763 00000 n +0000086877 00000 n +0000086995 00000 n +0000087161 00000 n +0000087271 00000 n +0000087403 00000 n +0000087569 00000 n +0000087675 00000 n +0000087843 00000 n +0000087953 00000 n +0000088085 00000 n +0000088215 00000 n +0000088349 00000 n +0000088475 00000 n +0000088607 00000 n +0000088731 00000 n +0000088853 00000 n +0000088997 00000 n +0000089139 00000 n +0000089279 00000 n +0000089421 00000 n +0000089551 00000 n +0000089691 00000 n +0000089821 00000 n +0000089965 00000 n +0000090117 00000 n +0000090263 00000 n +0000090411 00000 n +0000090553 00000 n +0000090691 00000 n +0000090851 00000 n +0000090991 00000 n +0000091139 00000 n +0000091271 00000 n +0000091407 00000 n +0000091543 00000 n +0000091701 00000 n +0000091853 00000 n +0000092017 00000 n +0000092175 00000 n +0000092325 00000 n +0000092469 00000 n +0000092615 00000 n +0000092755 00000 n +0000092889 00000 n +0000093019 00000 n +0000093163 00000 n +0000093281 00000 n +0000093403 00000 n +0000093543 00000 n +0000093675 00000 n +0000093805 00000 n +0000093933 00000 n +0000094063 00000 n +0000094183 00000 n +0000094305 00000 n +0000094435 00000 n +0000094565 00000 n +0000094703 00000 n +0000094847 00000 n +0000094993 00000 n +0000095145 00000 n +0000095289 00000 n +0000095445 00000 n +0000095633 00000 n +0000095811 00000 n +0000095997 00000 n +0000096173 00000 n +0000096351 00000 n +0000096529 00000 n +0000096683 00000 n +0000096869 00000 n +0000097029 00000 n +0000097197 00000 n +0000097347 00000 n +0000097509 00000 n +0000097679 00000 n +0000097849 00000 n +0000098011 00000 n +0000098169 00000 n +0000098309 00000 n +0000098453 00000 n +0000098599 00000 n +0000098745 00000 n +0000098901 00000 n +0000099037 00000 n +0000099195 00000 n +0000099333 00000 n +0000099475 00000 n +0000099637 00000 n +0000099793 00000 n +0000099933 00000 n +0000100073 00000 n +0000100231 00000 n +0000100401 00000 n +0000100569 00000 n +0000100715 00000 n +0000100871 00000 n +0000101013 00000 n +0000101151 00000 n +0000101291 00000 n +0000101435 00000 n +0000101583 00000 n +0000101747 00000 n +0000101891 00000 n +0000102051 00000 n +0000102203 00000 n +0000102351 00000 n +0000102485 00000 n +0000102611 00000 n +0000102737 00000 n +0000102877 00000 n +0000103021 00000 n +0000103173 00000 n +0000103327 00000 n +0000103463 00000 n +0000103613 00000 n +0000103779 00000 n +0000103939 00000 n +0000104097 00000 n +0000104249 00000 n +0000104409 00000 n +0000104567 00000 n +0000104739 00000 n +0000104905 00000 n +0000105069 00000 n +0000105227 00000 n +0000105377 00000 n +0000105521 00000 n +0000105673 00000 n +0000105819 00000 n +0000105979 00000 n +0000106105 00000 n +0000106245 00000 n +0000106379 00000 n +0000106523 00000 n +0000106659 00000 n +0000106797 00000 n +0000106931 00000 n +0000107063 00000 n +0000107195 00000 n +0000107339 00000 n +0000107475 00000 n +0000107603 00000 n +0000107723 00000 n +0000107863 00000 n +0000107997 00000 n +0000108117 00000 n +0000108241 00000 n +0000108373 00000 n +0000108499 00000 n +0000108617 00000 n +0000108739 00000 n +0000108857 00000 n +0000108981 00000 n +0000109119 00000 n +0000109255 00000 n +0000109397 00000 n +0000109533 00000 n +0000109661 00000 n +0000109809 00000 n +0000109933 00000 n +0000110057 00000 n +0000110193 00000 n +0000110345 00000 n +0000110473 00000 n +0000110605 00000 n +0000110739 00000 n +0000110891 00000 n +0000111027 00000 n +0000111199 00000 n +0000111363 00000 n +0000111523 00000 n +0000111665 00000 n +0000111825 00000 n +0000111975 00000 n +0000112127 00000 n +0000112275 00000 n +0000112423 00000 n +0000112547 00000 n +0000112679 00000 n +0000112825 00000 n +0000112969 00000 n +0000113119 00000 n +0000113263 00000 n +0000113399 00000 n +0000113555 00000 n +0000113687 00000 n +0000113837 00000 n +0000113979 00000 n +0000114121 00000 n +0000114267 00000 n +0000114411 00000 n +0000114551 00000 n +0000114703 00000 n +0000114839 00000 n +0000114969 00000 n +0000115095 00000 n +0000115223 00000 n +0000115347 00000 n +0000115469 00000 n +0000115591 00000 n +0000115707 00000 n +0000115829 00000 n +0000115965 00000 n +0000116095 00000 n +0000116211 00000 n +0000116341 00000 n +0000116453 00000 n +0000116571 00000 n +0000116705 00000 n +0000116841 00000 n +0000116975 00000 n +0000117109 00000 n +0000117231 00000 n +0000117359 00000 n +0000117485 00000 n +0000117617 00000 n +0000117735 00000 n +0000117849 00000 n +0000117971 00000 n +0000118097 00000 n +0000118219 00000 n +0000118369 00000 n +0000118503 00000 n +0000118635 00000 n +0000118771 00000 n +0000118899 00000 n +0000118995 00000 n +0000119103 00000 n +0000119225 00000 n +0000119341 00000 n +0000119477 00000 n +0000119585 00000 n +0000016676 00000 n +trailer +<<553EE954308755478AC48267F899A01D>]/Prev 1130741>> +startxref +0 +%%EOF + +5697 0 obj <>stream +hÞìZ teþg’4¯¦MÒGª-†¶¨ (=òpŠº€‚bÖb›¢°¸G®À:I[ –Uܳò2*h¤U,T :i­rµº‹ELqQ…Veg&3™ûOÊúØs\=‡œ“Îß;ÿ½ß}|÷Î?ç!¤@¨à[¤EˆlB&$}L¬L‹”H³ƒPøˆ”ec3ÌZ¥¯Àº,‘4 + J#¢¸­:•ZA?kÍWê$¢¨!)FˆšªAqìÝ`ˆÊfÍ#/b<%»ŸÕ¢Ñ*ÖÿQˆ¦­H©áî0Hƒt¤àD††ûkÔ(I”EŒ±èg~Uƒx«`‘‰Ü´ÃWšÝ”È]磒‹” •d]¥¸ I·9b/¼@¿úç­ Uó|³Òo¤š4e»rΦ<««þºEí]Ä4Êò3w±®§›ƒýГÆMFÕË抜ëKCU¡<)¨ÑLéª>ô}L}j£]Æ«Ë)õ=Êfï*æ(óˆÑ‰ÒÛœênòcò:f?ZßfïÔ/L|Lu€([¼®`yhŽ§°V_¯Z©ÜBì$ Ôô’©V«éßêW•ñÄÞ³¨”š\Ÿ¾Ë|Xý˜Æ«ØHh‰ÕÙ–0ժƫ֑ïy·0‡™ž¾þÄõ±+V‘Ïy•„eYÒ:~W IlCú©À4OÒ.ÔØï:íÝÄ3Ä|êº|Hv(M÷¹ªˆøÞ·Ž9d-žšJœ¬]ª|šæ}ý‹ú#êïIîÖ¯TRL÷ÅRÇÜ.zP~ßéêͪ1äõÄDfC`R ÿJÓíß•ä4ï"êèfcæÔ¤X©œNf¢ï˜g¬ÅLî^Ók±ƒTÉbú ý‚{º±J©Ð;U/’O{Ç¡'˜BÆꎳª·)ŠÉkÈԚЭȑ¸ÛàVí"'Vf7UæL]EÇ~«8Bnõgh÷cVEÒmŠòn²¢÷nó ¬µb‘²†œà½Hä…n¢®ñôéÖU›È›½VtÔz£g Ë’£Ÿªz4Q_ÑÌ Byü2M-y¨¢7X«Cד†iOÇœ'w…L=§3§0µœÌCŠÑ¨YŸë¶T)h0ñ=ÚÈY‡’ºQ*ÙJ BÓ·0ÆZu¾j 9˜OoD÷„r­–¶ØõJ†\MŒ¥×ÑîÀ !‰H›Æ&ðâ.ôšȱZ4êÃ*+9†Eo`&PË’²uݪ7ÈíÄz=>m4ïÕT¨n"ç£ÑƒE§âê»ÉÃÄ èŸô\&ŸºŠ2ÒjJG”¢/é4’I«×ÔäY¢£ïACQJȈ´… +±GËé±î>lÎc(Ålâ Ô‰fRCÝd +¡Í¯“ˆ¦¬áQÁ/4Uc äαêÕ +/òX³T¾`ªwÚLì­t£?²`÷¨|¤;äÉIÖ«*½Á!ü¢ŠÝÌ.âX «žŸœ õ5»C.*KÏ-êý9Yq*B.krœZ,ã ²‹‚ Ñ“ŸÆ-8­´8ÂÊ-La7Ä[~n¡ðr›mqÒ-iOÄCÎŽS4èL3i*}éÆ°„³Ô´¿nÅÕ%µïeö–€ÅZVõ4°þ Á{ Õ[Î}pð|³Ÿ·¬ö1¥Ç,5'’ú&Iýh{Íñ°?+wL`ª ºígŠY,ïwžhÿ@ª¾2xçm#ò +â¥ù5'ÌGæ7•Ú+F%MŒD¡öÕŸ]\üµ%¢DŒ«¥Ìc9·èàùG›Ý÷±Å=ÝÅv—_sÝ©E-0Š yÉ«až;]úžTýdg.öK†ê ,謘°?\-è·>©³ì#†œgá’pdD͉~b\ÜžŽú×jZ»â¥DñŽŽvìêhÇj€cõ£’ÉKNè˜åB_½¡úYèبäT=ýVt¬¯žx¤¥lv/Žéc†jô‡‹˜cSê"Dâ ·¸ù#–l£…´ <Ä@48’u,\¸µ"ƒ¡W­Y­1fÉÃ|.ŠHËsp±ç + 7ÖI|ø2€†^Ü` ^+3ø4XVßÈ“d%K’…‘NÉK.…dÛÐ.LÜȶ¼D"Û-M‘áÍÍa½±&F5ãD;ä%O ë!èrЧì­\½„ +ê&°Z¹¶œ,õWÊ],¨Dò’•Íàón²:Õû€¬Šõz×ëå°<ööÁ!{]û9nˆiù[‰¼[Êî|f™¹&<{'(åÒÖƒ¯äûä’¥yɃa~ž[ª,º±º±DÖø\ꞃnèÒ±Ôu—çŒÁíÙö^ æ@ˆ–²2¬–ˆAÝŽÒpVµâ‚ƒè¬éUGÒ[)õE`;%/)eõŠ“ê%¤…-^,™ºÅÍ!öµ$jÈtÁ^f÷°–ÏŸ±3¥!“Î˦ßùÓ:ýV¨sJN¶ŽúºMSúåiò‡Çà—Ù´Ùy£hÏY<äóŸâ=9I%/UGáê—7ï¸ +üiu±CzZq‘X$=­ˆG‚¡µí’Ïœú< ÎÎUíg’:›LÎ`;þ8fÇŽîhôcâ!|“=‡±H˯ƒãÂm?q/žÞ×ï—Gúº]é²H[ñçr—.ï³à‘Þ/S߉«Ÿ=Ž'jõ +\}®Î†<§Dòg²âÎÀ‹Û]>¸Dö°;Û€ûüùvü,ñç¼:/Ê|~ +÷yÕÜç–²;ä„Ü*#䇸Ï=©ºdZíÓ2Ð;qŸ?»½[–ç'eê£qŸW¶ã!Ï©/‘©÷‘©ßŽ«»e|öâêg.âηËÚ¡D†þ™ú~¨ÎM›3{À´á憫|Ð×QGš¤¢ÎZºí0Ï{§sèÅ2F±]ðòýQGši+¢Ž4›FÊFSçÞ¢§°#MYý¦Tn¤µÙ.1A߯¬“˜>tõl‘µùÅbY6fâÉÜ3_>÷Ü.sõ%¼Í{jýØÙb^'µLxtŸ[%Ý™×H †j^’uªô¸¬g’ /1DkùdX2¶tî½íŒLëÈø{ÑŽ¸ƒ¹dϪèá9Y>‡Oˆ&íóѤ½9š´µM€´\/×ï½­(êÙ}.KVÊïÇáqµuÁæ(ÑÖ°¸—,·ýp1væç‹E>«ÒÞÚËNž@c^‹wL…;öQ>[®ÇžxOøw‡äd»u¿l¶LØÝàÎ?߬Žjü[[eq}³w~m ¨éSñøýí‘Š7E;ïÌ8åZ3žìyçáïA¦EÎüZ„÷\ŽÏ¾Äyx!/q?F¤ñ_ˆo[Ù‚½VŒ—^4újö€ìÕàý¢ÿ8é¨ü8Æ/gZÓrð.s-8´ ZD +„PˆRQ!æˆ\1FÑ ’„­@Ü ƒÓÄ £Ø !D5€˜ –@ˆ<‘ œ0Š§„BÀZL~‘ lFQ ŒÖâzñ(€0ž}Ä 0Š¹"@¤ÃZŒ‹!ħâj£˜ b!¬…@TCøž ÆÂ(Š„BÀZ Uö…BÀ(Æ „€µè *!ì‹8Q£ b„Ö |ö…BÀ(2„BÀZÄ/„€} (E€ !¬…ô.¬(±Ãÿûü „üô/úš¸«­ho„ì?¬ÐÏ L¦äÙá«)…»üß"~Í6‹¿fól~p± —¢ðÅéŽaÎBN‹`-šÂ*ü¿¼]¿4Ûl›Ãá/“\‚;³äq‡9[ØA¢Íñc*œgYätöV +G¯Œ‰šá°ÈŒq®ËÍGQELË‹³H>‚#± ýk2Ûðl™l½1Ã&tªwUlÑá‚}GQ/$UFF‰8êÈ0hÌléöHPäK®á.ÙÐzp¥ô¶!¼´õºìÝ‚éòK`! +ÍösÑ~T­wàðÒñc?óßØÒô?[ðÓW~ûuå·_W~ûÅýö !õjd˜ébçÉöû8ÿ£–>È€Š1«—¥Òm1¡D£¹OáI¥÷]ùçwöO½.W¸SÑÞ&ïÿþÏp¢Ö@ “YÝ9&XWMo‰8ë™´ÌHlÔ=ôí±YM)1²j•Tð–$«vý’Ÿd%.Ehß~–Ì }ÓÂ| 2ì,GHï@ŠÉs2w “¶ƒûE2û½¡„8dš üùèùà'5 +endstream endobj 4880 0 obj <> endobj 4881 0 obj [4882 0 R] endobj 4882 0 obj <>>> endobj 4883 0 obj <> endobj 4884 0 obj <> endobj 4885 0 obj <
> endobj 4886 0 obj <> endobj 4887 0 obj <> endobj 4888 0 obj <> endobj 4889 0 obj <> endobj 4890 0 obj <> endobj 4891 0 obj <> endobj 4892 0 obj <> endobj 4893 0 obj <> endobj 4894 0 obj <> endobj 4895 0 obj <> endobj 4896 0 obj <> endobj 4897 0 obj <> endobj 4898 0 obj <> endobj 4899 0 obj <> endobj 4900 0 obj <> endobj 4901 0 obj <> endobj 4902 0 obj <> endobj 4903 0 obj <> endobj 4904 0 obj <> endobj 4905 0 obj <> endobj 4906 0 obj <> endobj 4907 0 obj <> endobj 4908 0 obj <> endobj 4909 0 obj <> endobj 4910 0 obj <> endobj 4911 0 obj <> endobj 4912 0 obj <> endobj 4913 0 obj <> endobj 4914 0 obj <> endobj 4915 0 obj <> endobj 4916 0 obj <> endobj 4917 0 obj <> endobj 4918 0 obj <> endobj 4919 0 obj <> endobj 4920 0 obj <> endobj 4921 0 obj <> endobj 4922 0 obj <> endobj 4923 0 obj <> endobj 4924 0 obj <> endobj 4925 0 obj <> endobj 4926 0 obj <> endobj 4927 0 obj <> endobj 4928 0 obj <> endobj 4929 0 obj <> endobj 4930 0 obj <> endobj 4931 0 obj <> endobj 4932 0 obj <> endobj 4933 0 obj <> endobj 4934 0 obj <> endobj 4935 0 obj <> endobj 4936 0 obj <> endobj 4937 0 obj <> endobj 4938 0 obj <> endobj 4939 0 obj <> endobj 4940 0 obj <> endobj 4941 0 obj <> endobj 4942 0 obj <> endobj 4943 0 obj <> endobj 4944 0 obj <> endobj 4945 0 obj <> endobj 4946 0 obj <> endobj 4947 0 obj <> endobj 4948 0 obj <> endobj 4949 0 obj <> endobj 4950 0 obj <> endobj 4951 0 obj <> endobj 4952 0 obj <> endobj 4953 0 obj <> endobj 4954 0 obj <> endobj 4955 0 obj <> endobj 4956 0 obj <> endobj 4957 0 obj <> endobj 4958 0 obj <> endobj 4959 0 obj <> endobj 4960 0 obj <> endobj 4961 0 obj <> endobj 4962 0 obj <> endobj 4963 0 obj <> endobj 4964 0 obj <> endobj 4965 0 obj <> endobj 4966 0 obj <> endobj 4967 0 obj <> endobj 4968 0 obj <> endobj 4969 0 obj <> endobj 4970 0 obj <> endobj 4971 0 obj <> endobj 4972 0 obj <> endobj 4973 0 obj <> endobj 4974 0 obj <> endobj 4975 0 obj <> endobj 4976 0 obj <> endobj 4977 0 obj <> endobj 4978 0 obj <> endobj 4979 0 obj <> endobj 4980 0 obj <> endobj 4981 0 obj <> endobj 4982 0 obj <> endobj 4983 0 obj <> endobj 4984 0 obj <> endobj 4985 0 obj <> endobj 4986 0 obj <> endobj 4987 0 obj <> endobj 4988 0 obj <> endobj 4989 0 obj <> endobj 4990 0 obj <> endobj 4991 0 obj <> endobj 4992 0 obj <> endobj 4993 0 obj <> endobj 4994 0 obj <> endobj 4995 0 obj <> endobj 4996 0 obj <> endobj 4997 0 obj <> endobj 4998 0 obj <> endobj 4999 0 obj <> endobj 5000 0 obj <> endobj 5001 0 obj <> endobj 5002 0 obj <> endobj 5003 0 obj <> endobj 5004 0 obj <> endobj 5005 0 obj <> endobj 5006 0 obj <> endobj 5007 0 obj <> endobj 5008 0 obj <> endobj 5009 0 obj <> endobj 5010 0 obj <> endobj 5011 0 obj <> endobj 5012 0 obj <> endobj 5013 0 obj <> endobj 5014 0 obj <> endobj 5015 0 obj <> endobj 5016 0 obj <> endobj 5017 0 obj <> endobj 5018 0 obj <> endobj 5019 0 obj <> endobj 5020 0 obj <> endobj 5021 0 obj <> endobj 5022 0 obj <> endobj 5023 0 obj <> endobj 5024 0 obj <> endobj 5025 0 obj <> endobj 5026 0 obj <> endobj 5027 0 obj <> endobj 5028 0 obj <> endobj 5029 0 obj <> endobj 5030 0 obj <> endobj 5031 0 obj <> endobj 5032 0 obj <> endobj 5033 0 obj <> endobj 5034 0 obj <> endobj 5035 0 obj <> endobj 5036 0 obj <> endobj 5037 0 obj <> endobj 5038 0 obj <> endobj 5039 0 obj <> endobj 5040 0 obj <> endobj 5041 0 obj <> endobj 5042 0 obj <> endobj 5043 0 obj <> endobj 5044 0 obj <> endobj 5045 0 obj <> endobj 5046 0 obj <> endobj 5047 0 obj <> endobj 5048 0 obj <> endobj 5049 0 obj <> endobj 5050 0 obj <> endobj 5051 0 obj <> endobj 5052 0 obj <> endobj 5053 0 obj <> endobj 5054 0 obj <> endobj 5055 0 obj <> endobj 5056 0 obj <> endobj 5057 0 obj <> endobj 5058 0 obj <> endobj 5059 0 obj <> endobj 5060 0 obj <> endobj 5061 0 obj <> endobj 5062 0 obj <> endobj 5063 0 obj <> endobj 5064 0 obj <> endobj 5065 0 obj <> endobj 5066 0 obj <> endobj 5067 0 obj <> endobj 5068 0 obj <> endobj 5069 0 obj <> endobj 5070 0 obj <> endobj 5071 0 obj <> endobj 5072 0 obj <> endobj 5073 0 obj <> endobj 5074 0 obj <> endobj 5075 0 obj <> endobj 5076 0 obj <> endobj 5077 0 obj <> endobj 5078 0 obj <> endobj 5079 0 obj <> endobj 5080 0 obj <> endobj 5081 0 obj <> endobj 5082 0 obj <> endobj 5083 0 obj <> endobj 5084 0 obj <> endobj 5085 0 obj <> endobj 5086 0 obj <> endobj 5087 0 obj <> endobj 5088 0 obj <> endobj 5089 0 obj <> endobj 5090 0 obj <> endobj 5091 0 obj <> endobj 5092 0 obj <> endobj 5093 0 obj <> endobj 5094 0 obj <> endobj 5095 0 obj <> endobj 5096 0 obj <> endobj 5097 0 obj <> endobj 5098 0 obj <> endobj 5099 0 obj <> endobj 5100 0 obj <> endobj 5101 0 obj <> endobj 5102 0 obj <> endobj 5103 0 obj <> endobj 5104 0 obj <> endobj 5105 0 obj <> endobj 5106 0 obj <> endobj 5107 0 obj <> endobj 5108 0 obj <> endobj 5109 0 obj <> endobj 5110 0 obj <> endobj 5111 0 obj <> endobj 5112 0 obj <> endobj 5113 0 obj <> endobj 5114 0 obj <> endobj 5115 0 obj <> endobj 5116 0 obj <> endobj 5117 0 obj <> endobj 5118 0 obj <> endobj 5119 0 obj <> endobj 5120 0 obj <> endobj 5121 0 obj <> endobj 5122 0 obj <> endobj 5123 0 obj <> endobj 5124 0 obj <> endobj 5125 0 obj <> endobj 5126 0 obj <> endobj 5127 0 obj <> endobj 5128 0 obj <> endobj 5129 0 obj <> endobj 5130 0 obj <> endobj 5131 0 obj <> endobj 5132 0 obj <> endobj 5133 0 obj <> endobj 5134 0 obj <> endobj 5135 0 obj <> endobj 5136 0 obj <> endobj 5137 0 obj <> endobj 5138 0 obj <> endobj 5139 0 obj <> endobj 5140 0 obj <> endobj 5141 0 obj <> endobj 5142 0 obj <> endobj 5143 0 obj <> endobj 5144 0 obj <> endobj 5145 0 obj <> endobj 5146 0 obj <> endobj 5147 0 obj <> endobj 5148 0 obj <> endobj 5149 0 obj <> endobj 5150 0 obj <> endobj 5151 0 obj <> endobj 5152 0 obj <> endobj 5153 0 obj <> endobj 5154 0 obj <> endobj 5155 0 obj <> endobj 5156 0 obj <> endobj 5157 0 obj <> endobj 5158 0 obj <> endobj 5159 0 obj <> endobj 5160 0 obj <> endobj 5161 0 obj <> endobj 5162 0 obj <> endobj 5163 0 obj <> endobj 5164 0 obj <> endobj 5165 0 obj <> endobj 5166 0 obj <> endobj 5167 0 obj <> endobj 5168 0 obj <> endobj 5169 0 obj <> endobj 5170 0 obj <> endobj 5171 0 obj <> endobj 5172 0 obj <> endobj 5173 0 obj <> endobj 5174 0 obj <> endobj 5175 0 obj <> endobj 5176 0 obj <> endobj 5177 0 obj <> endobj 5178 0 obj <> endobj 5179 0 obj <> endobj 5180 0 obj <> endobj 5181 0 obj <> endobj 5182 0 obj <> endobj 5183 0 obj <> endobj 5184 0 obj <> endobj 5185 0 obj <> endobj 5186 0 obj <> endobj 5187 0 obj <> endobj 5188 0 obj <> endobj 5189 0 obj <> endobj 5190 0 obj <> endobj 5191 0 obj <> endobj 5192 0 obj <> endobj 5193 0 obj <> endobj 5194 0 obj <> endobj 5195 0 obj <> endobj 5196 0 obj <> endobj 5197 0 obj <> endobj 5198 0 obj <> endobj 5199 0 obj <> endobj 5200 0 obj <> endobj 5201 0 obj <> endobj 5202 0 obj <> endobj 5203 0 obj <> endobj 5204 0 obj <> endobj 5205 0 obj <> endobj 5206 0 obj <> endobj 5207 0 obj <> endobj 5208 0 obj <> endobj 5209 0 obj <> endobj 5210 0 obj <> endobj 5211 0 obj <> endobj 5212 0 obj <> endobj 5213 0 obj <> endobj 5214 0 obj <> endobj 5215 0 obj <> endobj 5216 0 obj <> endobj 5217 0 obj <> endobj 5218 0 obj <> endobj 5219 0 obj <> endobj 5220 0 obj <> endobj 5221 0 obj <> endobj 5222 0 obj <> endobj 5223 0 obj <> endobj 5224 0 obj <> endobj 5225 0 obj <> endobj 5226 0 obj <> endobj 5227 0 obj <> endobj 5228 0 obj <> endobj 5229 0 obj <> endobj 5230 0 obj <> endobj 5231 0 obj <> endobj 5232 0 obj <> endobj 5233 0 obj <> endobj 5234 0 obj <> endobj 5235 0 obj <> endobj 5236 0 obj <> endobj 5237 0 obj <> endobj 5238 0 obj <> endobj 5239 0 obj <> endobj 5240 0 obj <> endobj 5241 0 obj <> endobj 5242 0 obj <> endobj 5243 0 obj <> endobj 5244 0 obj <> endobj 5245 0 obj <> endobj 5246 0 obj <> endobj 5247 0 obj <> endobj 5248 0 obj <> endobj 5249 0 obj <> endobj 5250 0 obj <> endobj 5251 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/XObject<>>> endobj 5252 0 obj [/Indexed/DeviceRGB 212 5258 0 R] endobj 5253 0 obj <> endobj 5254 0 obj <>stream +hÞTÍNÃ0„ï~Š=&Tq¼¶ãØWúƒŠŠaÁr¨BåÒ"ÄÛ³ŽiùàµfçÛY#4,¿z@hŽLkäh¡T‚ (T¸dÁ•„¡f{öÎZ˜Ú +sîɦ¦§ 虀ÒI.”Q=*$ èù?³êX¾îvOGP8C$ ¥p5pW8ç¹³1’QgI[Ãù#a0ÏbTÁ(•KÏò‚ß3©c ±×æùnžq!h_ÅJ‚ÿdÏÉf¹‚‚[˜çóÙ î†T"—É¡v]×ö ¬ûS=ìwU é‹¿&P†\ð‹HÁHÙ&·ou›¶ªûc°-7´MG/ª*$ŒÕÏB–úLI<œò…<%zý¨N𘂫¤N3bÓú¦ä8>ÚCöø )1Æ )m þYúf—ÊÀù)°=KϾ¢ +endstream endobj 5255 0 obj <> endobj 5256 0 obj <> endobj 5257 0 obj <>stream +hÞdW XTe÷Ÿaæ¾3 ŒÀåBÍà½“à†¢‚; "â(î‚©É2"‹  ”˜Yšhn¡T枉ŸšKΗû’©¤hæZ~šeÒ¹ÓŸþçZ=ýŸË\ž{ï{Î{–ßùóªUZ•Z­ö2zøëQ‡[få[æ¤''GeÏJQ¾È&µì£•ýÝ}qüñÎ9ÿ,›,j •^ þüuo•‹Z]^78;§07=5mŽ¹cr'sH¿¾½º(÷>Î{?åÞ¯»yPJv’Å<®0oŽ%3Ï<"+9;7';7qŽ%¥«ÙI…–ùú‰¥º[ëO7@k#Yà«Þ[5ð_x,àVô…­ìßâî*E)ÊòíK¬ê™ðH§ísteh}¾„Wf(­\ZõV„éäáVøYÀ²k¨‡p¿z(ƒ²Ða8†G ËDô…˜ê ׯWÅŒ™;$<|îEˆ UùrÑchM‘Zf͹H€þŽ"0Û'£ŽM\’:M&+3”€§œnêíàSh! ß—.kzl:¿y”ðøTôé*Q´‹z.î«— ÁO°·ÜúÓYý…ÿ\; #¢ê:úÇb+¾-*>@Öˆ£`oôß}?Ìh€@þ'þ¤ÃiÿõÌOEL¶Œ ~÷‡]Ri)‡mæÂðyç àç‡`~;sWŠe:þážO.!½tÁž‘]ðU|YmÉýÿ5–¿>»Û€EþÑ\F.C¨Á’¾V|ñ…J†‚+cs— #í!Æ ×9¢9ô€mf¹¦sš½–~:ŠÆFz—¨@ó ¹Q€zpsÙd‡¼q‡6(­4]Þ;0eìð‘³vÛIhf°¸ 1å „>‚>è~¶ËÐŒüÂÙ’SóJЦæ+ðòÞBº-T#åeòFaþ•¢ª”]úiae™pi!¾K`Rà UmþÝ$¾©ypØ!"mæ챸Œ{ðaÕo÷M‡ë²“—Kkñ˜ÐyJJüð75Þ=ºíÈ>[Vˆ3÷߀§¼È¹Ö>Jp,aKГƒfƒC1îÔC û„3Î_Ö;mÌk†h2°G©2RàŒèN){J)Û*‡ q³ö×Þöù©†éâ3fŒ—ø§PŒ©ÂKðí”ã›kŸ0>î; gPzŒØ<í«l‘Šª„’àTcÐ)lEÈ„Ñ60ß“0p‘09;6*&¥á|ãÁm_~W7*A©oªÈöÞ ˆ¯‚Åÿ,~º¼Zûw!m¡|w$øŽµª×Ûh : +ð)Û9èÃp…=‰ÃA W?Oâ ”Áëò¡ŒÝÅÆ0ƃ!ÆÓû*U1ÑWÿìª/gÐawíž½Ò®5G¿™s±Ç6‘—7WØ6=5^ž.-⯠íÇøgGæÅF%fDIËä™Zˆd¼|¾¾pôØ)sFKMÛ€¯ü>ñÄ>ÖØ#e«Ðü^Oèˆ&‰íЗc)´AÒÃ% wß,aëQ8fJ_òñTø¼Ù|àxn›^.9Í—gRŽ¯B8I:ÉêÓ Þ=¹D|þ „‹%¼H~ §@™>ýË[˜†nIØ ¶g†¼àaý:¯(ÑÈ¿Ø“Gíó$¹xG[úöx| +e/f§P£Å½‹‰ÒèQ€ ´à½{N«ž')9¹]|Ï|¨¤ÀæS`É[˜G0˜{PQÊ1œa»Yè2¦©ùK*ˆØŸ/ÿ.ñÿiþ2$[" ?SX0Ç„‹KQM±‰7â‡B$2Hä‚ß±3ûvIü¼Šî‰ì‡GZ@p…RYkUA°Œ“‹áŠ€W ÈžDP©ÅmP‹AŠypEaõª|{’õ1“Ë-ŸÈÅÊÐ-ë ÷^|—ƒ/Ú™Ú–@y<1u7¹'q‹}…²$“¡ãWÌÐW>Åa6©2ËÊø9qÐQ~Ä•9Ùi©²1) †2kä K Á]òC‚«Ip¿c5ç´ÜÜLy)…|ÉÄš}€ÞƒeI²½pîá²½]ºà²$¼'B/Lv¨© XN¥‹%„…!;SEC…©œÂ”ê„L,oIb¹@P… ŸCß3ðZŸ»(IØä ‡Ìkim+Ý»³†d”„£VúÿÖÈma’piW”“µ8×Ô²Ó?->?Á:Cø X"ô¿ÌíûjË p3þÓêoê/¯Ús^¼Æ®+¡‚À3ÞY• –Xß—À#¾;ÀvèÆ@³ÂÒiЊkÒ%«då%uÏŒ`̨]'òϾ©Ùsþšñd¼†ãDüSÁÿ´Åéî|2ÎmÉé/ò +¨v>¤ vSÉ¿J騥ÿDtßòwwÃl!´;CÅ)È©$ì +!{:Õˆ|#þ‚Ë\9µü+ã™óUÇÁ¯|`Ærj¾ìÎÒÑ$Mx-šŽ¯…c(hgƒ>Gj,äø»W ÎgñV4úY¯îY**u$ß¡ÂÛJü¼hD‚L*ž&bžLÇ'©)Qþݪ¾D•S§p…¤à,Ø‘Éz&&³ï‰(Ï ç]ÙàŠ1»ßÔGŸ~üöYŒÖc$%Ñ +Ê*í®¸ Q +ºÊ{9ìÅ`±B„ –(ÄØ@½¢&ÈUüG; uFBi£ÌÊWƒ¨/c5(®rŸ)¦)2]XW‡ôÎÈw†é‹ÙÛ?¾¿«,ê©•tx,ˆšI/çßXx¨›ÜF=ÙKCÖÙyÜGv ;ùØç¡Ìãpƒlü ç94 fЊiZ(æ æ/aøX ST ð¾<à Ûâìg8 Ô1ŽÃÒ)ÅËË)ØZÙ¦‘o/8 Lv—39jÝû)ºÏu#…C^¶ÑôéuH]"ÑÈGÐK8ä8’ 3=éUEi½7ÆB¾@~_öÀÛlˆ$"âæ`Ÿ·E0±-ËË¿¸húü«%£3sÎ]"¡w:ÄÄ#߀.7¦]Ø°oÛV‘/X–YöÞª\=t®bo­(Zwʈmn |Ãë±É#s,m_¬=¼Z´­Þ°zÝGzCxèÚÿ„üH«÷ ²¡ˆðxP +Bln§Ð´Ë×nÕüð¿»›#úˆX$OˆøyTªmtüÁseº¸í'óm&=K¢í!6ຆ$NNŸ+3é†ëÎO™)Ûî`¢›7,úµbÐÙÎn¸sG<³¼züŠ4=´e6Å]}L8<’zE$j÷yOI_@𱥪h,rŽ2”šqU1Û>7ñ`ˆ ]B0ÛŸE3„ÚNV}½]*#ƒ‡;íu¸’[ßo¾v÷5½zG¤ + É}|J$;µà{_™ÀÔHq¦2¼ »`YlM1!÷Þ½=H²º–ÁØîP[,š‹‰1˜ ºÁt¿¹|vŠÐG¸¸jGýYSñٽVI4PPÉE?¹NJo+#¡UŽî?é^Åö•VwÇJß)(M2uŽKDiú€Žh J8f6ƒ +ÜàÔïfððÞC’§Mü#Bó&oŠ(Öíx+ÙÖñ¥«£~ ŸïwìÞ»A*+æbt½RS#ÃlܸH¤ºAn觀‹ *VBð‰´”êV“"ð´í:ü]ý^Qya]hŒê›}ý¼ädŠHÚ>Òª>C9ªtŒ/d­®a'Æ¥¼Y(Ã*4+l¬é@ýÉ»e#RD¼ªX¯t9y“õ&ø*Ç1¿ d±ƒ-oÒñÝa‚2C™Q)wZˆ3Ak7üµ,´ÍŽlrNI‘˜‹Úì÷Ó• I|w{õ?$@KCÓÐ@!ؾ¦y €ƒ†àŒ¢ŒH†Ñ8“_i±ôïþÛ"åDòØh²âñoàæ}š\ØòóñçÚϽô»wÊèÙ…âñԴϘ‚SƦ¼ù¦ïШ8-[Õþ³ß—ÄNñ[zsIwªvÿŽ;fG¼ˆKø_{¼*ßðwTÛ'ÇeЀÍøÆ—m:¾á_‘¥p#ø·TÓj¢W”©f< +w0€.¡ŽÇñ ô€º„;0^Ä@ßaÖ`T¡ÊúÓùóë"X©Ö£n€£òaUg£c'iÇyTöM4­nmh)wgù§_¾FÈ€-Z4>·Ò²ÏÊXÖ';&>~YñtHh)úà”ɉ³É‡—ºÝà2x8m¯ ¨7%W®ÕbënÂ~ÃÈàŽÈÙ°;„_<\wt“T†utD´2‡nÀtjûÑM÷çÑ<¯ŽOÑwÆñ‡4¡£öÏëv«’)¾ñ4á6³ÿ®?êµ%Åå"´Õ•.\XºÐÔ;cÒ„,%I?>@#±lóŸªÜŸ}þTÍ"ý©šyæl³÷fêž^ЈhÈ3ó©4Jd&@Ðô¬ 0aØäý%þ!¾7Ï…­o¥ ¦Eìm t‚ v°üÁÃt‚>SÎJ!õ½qÚMW)bWËSÓW($°¨n=QßP@—kï«PUàà—ð*Z=<ÄOYuuiiµÔ¬[úî»KšÆ.-ß"Aýí'=[2ð›Lt§„ú 'fêE‚_³.#gOþÆÇ7D¸IÏOuè5îÙ寶ß*ßDy]B…çoU¯•7jä=Š`'⇿25ºÈþJ+†qŽMʸh¸]B³ÙBT¯±—hìk”Ŭ¯Ã›Ö†ËÞ¾Æ"}•‡N ‚¹@vS~…Ž¸7¯(Ê1¸!ÖYÕò 8 F€Á°ŽÃ~¬v nJ…(\‡#°†ƒþìô|€=9Ä /È@½F®ÓÈŸ+Ûwd¨n±•½°5Þñ%5?ûýxÓ; KKéð«Õ-]_³´Ò†Oë á,…{\ ÚZõzyºFž)÷@çŒt +ÖažæP-On¥Cw¥=©×A—r5åà¶ê9[­«úýéî +nn`nUênø؇ ÿ'À(GôK +endstream endobj 5258 0 obj <>stream +hÞ€ý¿¿¿ÿÿÿ +++@@@·tvâ–™¦¦¦©©©­­­®®®Æ-3¸¸¸ÉÉÉÏÏÏ···ÈÈȵµµ›››333¬¬¬èèèóóóÆÆÆæææyyywwwïïïòòò<<<ÌÌÌðÊË⻽ş ³ŒŽ¯ˆŠ°‰‹ñññoooåååýýý???þþþðððÔÔÔÀÀÀ½½½ÂÂÂÙÙÙôôô\\\ÅÅÅäääûûûùùùîîîçççSSSÝÝÝúúú¶¶¶ßßßPPP``` pppŸŸŸõõõ{{{000MMM]]]üüünnn€€€WWWööögggøøø¡¡¡ììì•••´´´ÑÑÑ ¥¥¥÷÷÷‹‹‹ÚÚÚ ÍÍÍ>>>444ÊÊÊYYYŠŠŠ£££¨¨¨UUUuuu + + +HHH___TTTÞÞÞbbb¯¯¯III„„„ÓÓÓ}}}’’’ZZZííí°°°ºººËËË===AAA†††ˆˆˆ²²²¾¾¾êêê***---ÐÐБ‘‘ªªª±±±¼¼¼¹¹¹«««ÜÜÜááá   ààà(((ãããqqqØØØ“““‡‡‡éééaaa¢¢¢³³³×××rrrzzzRRRÒÒÒÁÁÁÛÛÛsssÖÖÖ)))âââ[[[|||»»»ÕÕÕÄÄÄdddÎÎÎVVVÇÇÇJJJ§§§~~~¤¤¤...žžžLLLKKKÃÃÃëëë^^^™™™iii888mmmfff"""BBB‰‰‰NNNhhh999,,,666XXXŒŒŒ………;;;:::555777!!! žmf3 +endstream endobj 5259 0 obj <>stream +hÞì™[SUÇ· +¶5ÇP¸ ›ëÅ ]î`@ì…ínˆàÔšI“ Ö¤‰¢Aj +šÃA 2\¸¢ -ò%S+3_ʲ7³÷—?¨ÝsßÎ}ö<>ˆO~Ÿ‡m÷wÎùÏ=÷œßù‹B1›”'¥âîÐ|dÎÈL+Õ}÷sº/óŽ+ƒdÎÌRk`iµì/ðñ,º®–úUµ©O-)È…è‡HZ¸7­V@؆,ÈÌjÝ}ñ˜ÕÙQ…œ…)åèçH‹s®!M#sn~¨ÂbÒË£ -¥˜Í&$|èáG–=Ji™Ö\(ªPDzyÌ‚bÈ\¨øV˜qkI©QYy…4óã•vÇüaFœ® £*«CšÙí!æ3‚AÂf¯g>ólºó̾êå*UR`Q¬PÕúDíëTŠ•5>)f#é¥VÉ«­,bU-ö…ëjUªåuFØæ+R©TE¾ôÌÆjs\ê'˜YPËø#i\ ¬kž3×­¤Z<€ïÞ}× +£L5ÝD¹aº^ˆ§aÖ¯ k-*©rÒ6¨£§üpO*˜!ÅLHЭ«Çe’•§ƒ¼¥QÃØ×7D6Å3Yf#ƒ¬ÈllBÅÌÏšQ\zØxÌ0Üs¸L‚•Â%χCð:¡´¡Ù!ÇLµ|ÁíŽlÌm±2Ì›^|©µ® möÙnÀýµoÙҮΠP²µcùµº3ÄcN9ww/[¸Á릲µˆ»§ë•íõô\¦;Áã|u&ͬ-#YêÝÞìÞ&fÃëlèëUæ/ØC–í5°m©n^kíÞ'gðÜ­Ñ~0ßµû0sLÝã  šø÷ßõúÐp¶÷@y=4™wäŽäL}d¬Bf0̱¬Ñ‘æp<^ÀŒŽŽÅ- ®C °7AÀë#ÒÚØ~CÀ¼œ¼îˆöw?³ÏšbîÎOÆßCX–Ç¿ÿ·4ýMñ¸g‚àî£kÔ®z›,|§“d+÷°º7iuN‚]n`05Tý ÇÉ©zx¾«1äßÌ Pq¨ÌB4€UØgå1ç$Q¢ŠŠ>ž“‘Q¥%;ƹ‡în,A1Xþ ‡3¨Õž5\{¢ÄNŽ9¤™£§B°¯ÑÓy˜pwU}´¤¨<…ugP)fPëȨa.ÞšYf3y(?UYÀ\Äi16y2—ÐóÌ.»M’›ÒÇL“bÖêQþþL…¡½Û¤˜ADœ…@¦eVÒK%$Ú£9µ\ò̬'z ÀDnkÚ-Ŭi6Ý.æ.oÜ™Žù¬ãÏg†Ïëâ!DÀ Ún^`D$c]L6š(ùÈlÌÈËZþ|þœ´]lÉ£½ ¡4{JÛY^ÜÌÓ˜¬ë/.]Å ÊÍzŸè Ï|…¼¼ªçÏ3#dsQ*¼|9F™¿:Ý€ ™A<ÉØ=î`™ ˜àY¤gÖ€ëž*8ÛF¾&mßL`é™édñzÔÖ]ÍK»3ª-!³q yýmo…hœû©Të@êZY]w+Ì8àS|—Õ¯¬Õ3Õ¿¶+§R]AV†¹™ æ?°¡eêp!¼§°k¯ ÊŸ/BöŨsvf¤•kà­§Göò›¿L.Š¸˜:›:ý”m--·=¯q•‹7Î2ïÏäì7¦Øì5 sà:Û ÃN§èø¥ œ›Ž±ÜÙjâ'ºÎÍI&±pƒÑF™í(¥¼ÌÌe<bÿ™µÿ2m ÌÎŒ„Ø¡ÙÇ.ÇÉ_Y7û¶WÈ1ãþ¬=äËÒ®š>fâÕçnÆýv¶*xáïd2Å“Iîƒëþ¼JJ6Þ84]À0ë# ÄzÀvùûB,…–)n²¹ÿ![D²¸; ­ºhŠO–øå˜> endobj 5261 0 obj <> endobj 5262 0 obj <> endobj 5263 0 obj <> endobj 5264 0 obj <> endobj 5265 0 obj <> endobj 5266 0 obj <> endobj 5267 0 obj <> endobj 5268 0 obj <> endobj 5269 0 obj <> endobj 5270 0 obj <> endobj 5271 0 obj <> endobj 5272 0 obj <> endobj 5273 0 obj <> endobj 5274 0 obj <> endobj 5275 0 obj <> endobj 5276 0 obj <> endobj 5277 0 obj <> endobj 5278 0 obj <> endobj 5279 0 obj <> endobj 5280 0 obj <> endobj 5281 0 obj <> endobj 5282 0 obj <> endobj 5283 0 obj <> endobj 5284 0 obj <> endobj 5285 0 obj <> endobj 5286 0 obj <> endobj 5287 0 obj <> endobj 5288 0 obj <> endobj 5289 0 obj <> endobj 5290 0 obj <> endobj 5291 0 obj <> endobj 5292 0 obj <> endobj 5293 0 obj <> endobj 5294 0 obj <> endobj 5295 0 obj <> endobj 5296 0 obj <> endobj 5297 0 obj <> endobj 5298 0 obj <> endobj 5299 0 obj <> endobj 5300 0 obj <> endobj 5301 0 obj <> endobj 5302 0 obj <> endobj 5303 0 obj <> endobj 5304 0 obj <> endobj 5305 0 obj <> endobj 5306 0 obj <> endobj 5307 0 obj <> endobj 5308 0 obj <> endobj 5309 0 obj <> endobj 5310 0 obj <> endobj 5311 0 obj <> endobj 5312 0 obj <> endobj 5313 0 obj <> endobj 5314 0 obj <> endobj 5315 0 obj <> endobj 5316 0 obj <> endobj 5317 0 obj <> endobj 5318 0 obj <> endobj 5319 0 obj <> endobj 5320 0 obj <> endobj 5321 0 obj <> endobj 5322 0 obj <> endobj 5323 0 obj <> endobj 5324 0 obj <> endobj 5325 0 obj <> endobj 5326 0 obj <> endobj 5327 0 obj <> endobj 5328 0 obj <> endobj 5329 0 obj <> endobj 5330 0 obj <> endobj 5331 0 obj <> endobj 5332 0 obj <> endobj 5333 0 obj <> endobj 5334 0 obj <> endobj 5335 0 obj <> endobj 5336 0 obj <> endobj 5337 0 obj <> endobj 5338 0 obj <> endobj 5339 0 obj <> endobj 5340 0 obj <> endobj 5341 0 obj <> endobj 5342 0 obj <> endobj 5343 0 obj <> endobj 5344 0 obj <> endobj 5345 0 obj <> endobj 5346 0 obj <> endobj 5347 0 obj <> endobj 5348 0 obj <> endobj 5349 0 obj <> endobj 5350 0 obj <> endobj 5351 0 obj <> endobj 5352 0 obj <> endobj 5353 0 obj <> endobj 5354 0 obj <> endobj 5355 0 obj <> endobj 5356 0 obj <> endobj 5357 0 obj <> endobj 5358 0 obj <> endobj 5359 0 obj <> endobj 5360 0 obj <> endobj 5361 0 obj <> endobj 5362 0 obj <> endobj 5363 0 obj <> endobj 5364 0 obj <> endobj 5365 0 obj <> endobj 5366 0 obj <> endobj 5367 0 obj <> endobj 5368 0 obj <> endobj 5369 0 obj <> endobj 5370 0 obj <> endobj 5371 0 obj <> endobj 5372 0 obj <> endobj 5373 0 obj <> endobj 5374 0 obj <> endobj 5375 0 obj <> endobj 5376 0 obj <> endobj 5377 0 obj <> endobj 5378 0 obj <> endobj 5379 0 obj <> endobj 5380 0 obj <> endobj 5381 0 obj <> endobj 5382 0 obj <> endobj 5383 0 obj <> endobj 5384 0 obj <> endobj 5385 0 obj <> endobj 5386 0 obj <> endobj 5387 0 obj <> endobj 5388 0 obj <> endobj 5389 0 obj <> endobj 5390 0 obj <> endobj 5391 0 obj <> endobj 5392 0 obj <> endobj 5393 0 obj <> endobj 5394 0 obj <> endobj 5395 0 obj <> endobj 5396 0 obj <> endobj 5397 0 obj <> endobj 5398 0 obj <> endobj 5399 0 obj <> endobj 5400 0 obj <> endobj 5401 0 obj <> endobj 5402 0 obj <> endobj 5403 0 obj <> endobj 5404 0 obj <> endobj 5405 0 obj <> endobj 5406 0 obj <> endobj 5407 0 obj <> endobj 5408 0 obj <> endobj 5409 0 obj <> endobj 5410 0 obj <> endobj 5411 0 obj <> endobj 5412 0 obj <> endobj 5413 0 obj <> endobj 5414 0 obj <> endobj 5415 0 obj <> endobj 5416 0 obj <> endobj 5417 0 obj <> endobj 5418 0 obj <> endobj 5419 0 obj <> endobj 5420 0 obj <> endobj 5421 0 obj <> endobj 5422 0 obj <> endobj 5423 0 obj <> endobj 5424 0 obj <> endobj 5425 0 obj <> endobj 5426 0 obj <> endobj 5427 0 obj <> endobj 5428 0 obj <> endobj 5429 0 obj <> endobj 5430 0 obj <> endobj 5431 0 obj <> endobj 5432 0 obj <> endobj 5433 0 obj <> endobj 5434 0 obj <> endobj 5435 0 obj <> endobj 5436 0 obj <> endobj 5437 0 obj <> endobj 5438 0 obj <> endobj 5439 0 obj <> endobj 5440 0 obj <> endobj 5441 0 obj <> endobj 5442 0 obj <> endobj 5443 0 obj <> endobj 5444 0 obj <> endobj 5445 0 obj <> endobj 5446 0 obj <> endobj 5447 0 obj <> endobj 5448 0 obj <> endobj 5449 0 obj <> endobj 5450 0 obj <> endobj 5451 0 obj <> endobj 5452 0 obj <> endobj 5453 0 obj <> endobj 5454 0 obj <> endobj 5455 0 obj <> endobj 5456 0 obj <> endobj 5457 0 obj <> endobj 5458 0 obj <> endobj 5459 0 obj <> endobj 5460 0 obj <> endobj 5461 0 obj <> endobj 5462 0 obj <> endobj 5463 0 obj <> endobj 5464 0 obj <> endobj 5465 0 obj <> endobj 5466 0 obj <> endobj 5467 0 obj <> endobj 5468 0 obj <> endobj 5469 0 obj <> endobj 5470 0 obj <> endobj 5471 0 obj <> endobj 5472 0 obj <> endobj 5473 0 obj <> endobj 5474 0 obj <> endobj 5475 0 obj <> endobj 5476 0 obj <> endobj 5477 0 obj <> endobj 5478 0 obj <> endobj 5479 0 obj <> endobj 5480 0 obj <> endobj 5481 0 obj <> endobj 5482 0 obj <> endobj 5483 0 obj <> endobj 5484 0 obj <> endobj 5485 0 obj <> endobj 5486 0 obj <> endobj 5487 0 obj <> endobj 5488 0 obj <> endobj 5489 0 obj <> endobj 5490 0 obj <> endobj 5491 0 obj <> endobj 5492 0 obj <> endobj 5493 0 obj <> endobj 5494 0 obj <> endobj 5495 0 obj <> endobj 5496 0 obj <> endobj 5497 0 obj <> endobj 5498 0 obj <> endobj 5499 0 obj <> endobj 5500 0 obj <> endobj 5501 0 obj <> endobj 5502 0 obj <> endobj 5503 0 obj <> endobj 5504 0 obj <> endobj 5505 0 obj <> endobj 5506 0 obj <> endobj 5507 0 obj <> endobj 5508 0 obj <> endobj 5509 0 obj <> endobj 5510 0 obj <> endobj 5511 0 obj <> endobj 5512 0 obj <> endobj 5513 0 obj <> endobj 5514 0 obj <> endobj 5515 0 obj <> endobj 5516 0 obj <> endobj 5517 0 obj <> endobj 5518 0 obj <> endobj 5519 0 obj <> endobj 5520 0 obj <> endobj 5521 0 obj <> endobj 5522 0 obj <> endobj 5523 0 obj <> endobj 5524 0 obj <> endobj 5525 0 obj <> endobj 5526 0 obj <> endobj 5527 0 obj <> endobj 5528 0 obj <> endobj 5529 0 obj <> endobj 5530 0 obj <> endobj 5531 0 obj <> endobj 5532 0 obj <> endobj 5533 0 obj <> endobj 5534 0 obj <> endobj 5535 0 obj <> endobj 5536 0 obj <> endobj 5537 0 obj <> endobj 5538 0 obj <> endobj 5539 0 obj <> endobj 5540 0 obj <> endobj 5541 0 obj <> endobj 5542 0 obj <> endobj 5543 0 obj <> endobj 5544 0 obj <> endobj 5545 0 obj <> endobj 5546 0 obj <> endobj 5547 0 obj <> endobj 5548 0 obj <> endobj 5549 0 obj <> endobj 5550 0 obj <> endobj 5551 0 obj <> endobj 5552 0 obj <> endobj 5553 0 obj <> endobj 5554 0 obj <> endobj 5555 0 obj <> endobj 5556 0 obj <> endobj 5557 0 obj <> endobj 5558 0 obj <> endobj 5559 0 obj <> endobj 5560 0 obj <> endobj 5561 0 obj <> endobj 5562 0 obj <> endobj 5563 0 obj <> endobj 5564 0 obj <> endobj 5565 0 obj <> endobj 5566 0 obj <> endobj 5567 0 obj <> endobj 5568 0 obj <> endobj 5569 0 obj <> endobj 5570 0 obj <> endobj 5571 0 obj <> endobj 5572 0 obj <> endobj 5573 0 obj <> endobj 5574 0 obj <> endobj 5575 0 obj <> endobj 5576 0 obj <> endobj 5577 0 obj <> endobj 5578 0 obj <> endobj 5579 0 obj <> endobj 5580 0 obj <> endobj 5581 0 obj <> endobj 5582 0 obj <> endobj 5583 0 obj <> endobj 5584 0 obj <> endobj 5585 0 obj <> endobj 5586 0 obj <> endobj 5587 0 obj <> endobj 5588 0 obj <> endobj 5589 0 obj <> endobj 5590 0 obj <> endobj 5591 0 obj <> endobj 5592 0 obj <> endobj 5593 0 obj <> endobj 5594 0 obj <> endobj 5595 0 obj <> endobj 5596 0 obj <> endobj 5597 0 obj <> endobj 5598 0 obj <> endobj 5599 0 obj <> endobj 5600 0 obj <> endobj 5601 0 obj <> endobj 5602 0 obj <> endobj 5603 0 obj <> endobj 5604 0 obj <> endobj 5605 0 obj <> endobj 5606 0 obj <> endobj 5607 0 obj <> endobj 5608 0 obj <> endobj 5609 0 obj <> endobj 5610 0 obj <> endobj 5611 0 obj <> endobj 5612 0 obj <> endobj 5613 0 obj <> endobj 5614 0 obj <> endobj 5615 0 obj <> endobj 5616 0 obj <> endobj 5617 0 obj <> endobj 5618 0 obj <> endobj 5619 0 obj <> endobj 5620 0 obj <> endobj 5621 0 obj <> endobj 5622 0 obj <> endobj 5623 0 obj <> endobj 5624 0 obj <> endobj 5625 0 obj <> endobj 5626 0 obj <> endobj 5627 0 obj <> endobj 5628 0 obj <> endobj 5629 0 obj <> endobj 5630 0 obj <> endobj 5631 0 obj <> endobj 5632 0 obj <> endobj 5633 0 obj <> endobj 5634 0 obj <> endobj 5635 0 obj <> endobj 5636 0 obj <> endobj 5637 0 obj <> endobj 5638 0 obj <> endobj 5639 0 obj <> endobj 5640 0 obj <> endobj 5641 0 obj <> endobj 5642 0 obj <> endobj 5643 0 obj <> endobj 5644 0 obj <> endobj 5645 0 obj <> endobj 5646 0 obj <> endobj 5647 0 obj <> endobj 5648 0 obj <> endobj 5649 0 obj <> endobj 5650 0 obj <> endobj 5651 0 obj <> endobj 5652 0 obj <> endobj 5653 0 obj <> endobj 5654 0 obj <> endobj 5655 0 obj <> endobj 5656 0 obj <> endobj 5657 0 obj <> endobj 5658 0 obj <> endobj 5659 0 obj <> endobj 5660 0 obj <> endobj 5661 0 obj <> endobj 5662 0 obj <> endobj 5663 0 obj <> endobj 5664 0 obj <> endobj 5665 0 obj <> endobj 5666 0 obj <> endobj 5667 0 obj <> endobj 5668 0 obj <> endobj 5669 0 obj <> endobj 5670 0 obj <> endobj 5671 0 obj <> endobj 5672 0 obj <> endobj 5673 0 obj <> endobj 5674 0 obj <> endobj 5675 0 obj <> endobj 5676 0 obj <> endobj 5677 0 obj <> endobj 5678 0 obj <> endobj 5679 0 obj <> endobj 5680 0 obj <> endobj 5681 0 obj <> endobj 5682 0 obj <> endobj 5683 0 obj <> endobj 5684 0 obj <> endobj 5685 0 obj <> endobj 5686 0 obj <> endobj 5687 0 obj <> endobj 5688 0 obj <> endobj 5689 0 obj <> endobj 5690 0 obj <> endobj 5691 0 obj <> endobj 5692 0 obj <> endobj 5693 0 obj <> endobj 5694 0 obj <> endobj 5695 0 obj <> endobj 5696 0 obj <> endobj 1 0 obj <> endobj 2 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 3 0 obj <>stream +hÞŒZK“ÛF®ÚãüŠ>’[#El¾“׎SÙK\öøäìCÒ#Ú©”'“Ÿ±¿x|è&¥±“-טd?Ðh4Ðúáç÷‘y˜nþuwóÃk"s÷é¦Ü–™ÙÑ?yÉ­É£x'æîx³3ôwWó7Á?»Ï4/Ƽm^”–¦Ý½¾ÙîvqÉã6ô–<øc`ÂMØ0ÝæÁ.Êåi^UòlÚ^žu‹æ×xN݃<ûp³óþišÃd[íqº•ó‹ÎÛâóåá «ŒÔš]{0OfTšxŒ_ÛF^¶áîþM| +ó›hk…_lÁí€÷Â;x;Ò2yÐõsoË mL×ca^û‰íÒþ¡ïÂbQÿÆÒ= †™÷s%ßS¸¡íŸ„ yyluݺ·;f´ÜÑ飃WU±ôõjÙ×-‰OÙÉ Ë,9¡ÊC~‘׬ ùëÖ¤©LJÍ»î+è<" ̯àõËdÞV`é súX=)Ñ÷ЛS»ZèÕKS‚j'ò¼5Þ¿”Íüð&‚þè®â âãÂkÚÇà.,’-lDR¢ýf,ãc5~¡CLY`Ôù‚Þ‰K¥ªZ™m“¢X´2Õ3-ŠÜŽìŽHe–BÅZ3iyòÎ-킶\õè’ Mt$›PÏWÚeJGÓ.×sùh‰G>ÐDd‰¸…èÌŒ•' ŠžÔhi{ëó-CFJ/}l¬ùæ·1y(/¿…¦ä­µªC¿è­™÷òÑMØ‚º²€„ÅE/‘J«~Zºêó±•O!O¬WòEÛfE“wmš™q2BÆb¡eïCK^%8£±aƒ¯Ø–…^KËc‡{’½íÑËïÕIÞOløQ0œt]^gÓ¸ééx-¶`úMgÖ¤l¦f"Ëå1ŸÃñÅ oÐT_û–Ž&Ž±In?äÈ8{ªÅÞX 9%?½P/_s°ï_ak¿mÃMQ–D‚ÎUâ yy¹çÕÊ•ƒWbW/~…<Èyº0E3aÌ¡=<ó¶‘[F:F¼LÄ·HÓn#›¥ÏõhsVn—HÖõÛ$!4ÜØi‹ÁsÆAvaίGãáv ¿=&÷õp<#<Žu§ƒý1úPìV: S;ýùº ˆ|ãì»0ߪ€£@ '€Sñ$‚²UÀrzÀ°15<·è"i/˜öˆqâi=t_§ kxîp±¬¥‰cCÌFðôãÊýèÄÊy¼ô… f…uŒƒ°._ð[˜‹G€Zpí°ª`¢•¹À1­Š"q’8äs$7Ë®“⯮¯çF™Ó“>pƦhíAš:§1Þ®·{íœXÐÚíJ#ؽfÍû¼WŽÜ—Û+ˆ8¬UYê49Ÿy$ºFqÖë_äQœ÷îî=Ö\— «W$¬X†+.ÀèÅPÆLϵ8MCïaE5ǹ£:¹‰ó= E©oaï‘I‚ùG! Ð$·å6•øRm¢z˜¢^¤Õ"—²ˆÏbP^äMH‚B{›<~T.eÚ¥Ÿ ópMÓ²Ñ*-îüÂ)Æb‚ýR«8΋¸öòDAþäs,‚• T8Õì÷‘Š™µ´œƒ Ž‚Eæ¼HãøDKÄ8c:×{öÆfÚsMè¾ ÿRI2W¡L— +e¢~dB½Œ4ºS§qv®¥Cáخǫïb—·v’|X¥ãl>_ÇøÙù^É~„<Ã*ÇÇ +µs}ähPŽKõ0>§Wù&åG»È^WÈóUÆÿº“u¦ZÓ8Ë‡0 +^\f™߬-—ÒxâÍ-V ð‹”H{IƒÉ!%º%8Rj„%„È ìÊi[ÍÌ- ¾¼iÕWs/_îPñíj!à +nø2ä¬@a˜W7õ¾Âí²¦¯ g%¸Œ­_U­•[!\¯¦ƒìµYšµàMö׃ÇI¾ÖÜNm¯•&¥*Ø+E¢j} € + ;Å8ÐÌi(°‚j_R§&ÀáÊÁa +2;€a `­žG^¥ÐKÍ%c²PŠ§ØBëî‘"ÅØZÒÔ§¢mžYë»âf%D=õíÁêˆG'ãéd¿»V']üäaþ’¦´k|¡2ŽàãéèzÍWê¡_I s ÖÂìA¨­»õ—”±žŠ€³à¬p–«@Ôߣ²¡qÝ"®ç$¹­+$áHôF3ƒ7 \If–QÐr²5 #gôb»œsrg °gv·@LQ¦‚ì +–ËâÐéÕ"¹Py¹ÿŒ‚O)!Ùqæ‰O–˜\ 2:+¶ Öæ¡'( ¹ ¸‹28)“\lÄîbcãX»R÷kp^Ÿ¥,0hE`ÔûON1ëZDDœWHîIhbÍ®D yqå2F²ÞYŠ èÔZAõÀ¥ 4çÿFå¶ÈG +d.oW…Ü¢–—d/ªê'„,Ã!=Û[»ÒŒÔæ0YOæÂLä¯ +ãT‘Êýzù‹¼ò™gnòÆÁÌ]àî‹´I= ÝÔªOºvÛq®É9_¢u=¢mõ€Š”z4©HEêb ܱ“‘mÔå­ýçúfP¯ÌÀÝâ8˜-Ø#EaÞZí"¢F` +ïŠã—w¯mGoÚÄiOõ¡êÀ¡”fõ'w—=öòôÍÌÜÚ|¹± :¹û+wÓ%¦ZI®Œ÷NÐ2å¢æ⾊aŠ˜<º(+bM (€TÓe¦f:®¸ýãé€;²Iw–ÄÝWˆl¡ª¡å2ª³zÊÈE‹z¦7;R°…7VoØuŠ—=¯fžiò·v~<©’hBt¹Š!©«©pšDú*^¬ËMêOt‹—þ$ò6`c穉¹Þ d¨ÈÑ«Iu·æß^pÒCeÉ«4ƒiÊESf[»þÙŠ¯ãÐ1Ë!³(Æ1dì^õHöÕ,0uød&^ÜÊâYPãc/‹hR G&y×8H4·œÐ3á3o«¨–…÷ØfƉ&{Bö˜]ÿÐ +æFÁZ26æ$÷¹…T¯6±äßo¼ÛY~á®i¡h¹ÉSÂ!©%db¼[Z˜/ǹ”Æ2äxÀ•–jšÎÇ5 +¸²¯b»Ë²Õ¾\Pˆ4(Üw‡næúJlqÏŽq4Mu¬Z¾ƒÄ"RŽÆV¼§|Ì¡•ŸT( =ŒQwIï?FòõûüÒõ ¦ÊArÌEJc;ä7Gæ\.Æ«ôè(Ó4¹VNùlõòYܪž=ÛD¬¸*®Šùä7±@ªþÛ7K¥ùŽxêLü];¹ü‹|v'yU=#zàGMæZ‘’Ì® ?eƒk4±Ü/ååªü÷¢ˆÔJ\) ÁmÍéù}“1¬ ¦éÈYÓ™~ D‘¹z‹VBZóó€vÊO3 ¶KE %6ÊÅ‹¨ŒŸû½´PUº@Ð\Е"’"ñ)„Uÿd›Nó%Ô¬½¯=)ô4×Îm…º÷Îo‘±Åeñ·wåë‚ÖþUS¼”Ì»T:,•¯|#Y"L…yyý&Ì žõÎ^ÍÈåsƒiå²P«7ÕþÖ{j—¦­Õ€l”P ‹NºêúâJ{â!ìI¶«ºÍOw7ÿ`âiª +endstream endobj 4 0 obj <> endobj 5 0 obj <>stream +hÞbd`ab`ddäóv ððrÖ®ÌMÊω¨þaü!ÎòC–Gì·Çï¿®ýjc•É¬áýîÆÿÝ[໿àŒìB ÌŒŒü©ÙÉù•E™é%Å©E™iÎ0ž‚F²¦‚¡¥…©ˆ4“– ÒÒ@Á1%?)U!¸²¸$5·XÁ3/9¿¨ ¿(±$5EOAÁ1'GbžBQ*ÐÌ2 (Ôe@ÀÈØÎÀ¤pd7 û¦ï}|@ôsUÍæÏ¿ß\þ}3ã¾ÍßyN}Ÿ¸à»îfæ Ìí¨­i«ìO™b·ÖÔ÷7¯É¢ß…ß5S¾ f»°|EÃ\‰úƸ´¼&ß>Éß¼r¾{^{¹nÇᙇJ¶U,ˆì/æ˜ÏÖþ]„õOãïÑßÁßõ~ë}B½ï`ÈÓû „@ñßÁr›Å¾Û|—Bý[ö· Âi¸_ÕœŸ¦ÓGÍ`{ÎõŠ ÀïI¤# +endstream endobj 6 0 obj <> endobj 7 0 obj <>stream +hÞTPËŠÃ0 ¼û+tléÁIn…Xº,äÐM»w×V²†F6ŠsÈß×N³-=h@# 3’ÜÕß5ÙòÄN7 µd7²F¸ag òŒÕaéfÔ½ò £¸™†€}M­ƒ²ò‡Cà V?Å&[ƒ<²A¶ÔÁê’_#ÑŒÞß±G +AUÁVÈÝ^ùƒêd’½¹Ë䊹ÏcgpðJ#+êʬ¨ž€d>gÿŠ[«ÿ‹e3ûÚV"î.lR¥S^ôȳÍ÷Î’¹%|½Ä;Ÿ¼R‰‡…‡h^ +endstream endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <> endobj 21 0 obj <> endobj 22 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 25 0 obj <> endobj 26 0 obj <> endobj 27 0 obj <> endobj 28 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 37 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 38 0 obj <>stream +hÞìZÛrãÆ}çWÌãÀ.`ç~yt¸^׺|Q$îîC*ŒI°)R&¡uôù‹üeº·BPÅ)­*®­%)83<}æôé&8¹Y¼ùî‚“›ÃÂHb™#Ê"Ùç‹ëÅ_V‹7ï8ádu½à‚0øOÜÙÌ;b%˘ «»ƒY2¦à½Õå"Íc’¬~_üþðí;¢3G–o–_MÎö w™£»›ýúî®ØÞ÷Û2ß_¯/óäï«ïß®°܇4aÜEÛÕ6|Ø…'p•rÍâ¸&׸:¼ºZüÇu"U¦é#Œ'©†—6I…_Ê$åŽIÜÏÙ~W _=\–$1™¥‹#yõþþP$©ÉÝmñë„Í2’òLcÉê-®Ê]½SzLµÔœ\ÙÀ.;ØY&ùQ4`’òŽ`A·=ž“jâp\¶™¾†oghˆ²¯XDT‹¶r½ëú^t“_ïßo‹²†×q"™Á¥Aûͼ\â¸d6ë•×<íÌëðÐ °på‘é +Ö¢z棫 \á°0±¡grš¹†…çõöîÆØWaë,¬Qsðù")!kû¤]nr0Ó°6´Õt7Jd-VäCd@ç|âuwidAÝòØÇ=ÂãïòòÃ!ß¿]—ëi»'õÁXúÉÎ\ñœÎ$´/½õ×  eŠîµþ†âƒ€Ÿ¡—æXnËÛ^rúà#Ô0hDþ±¾Ä^§¿¶þC"COªL™©z[ã¸P]‡OHƒ‰ÑÌ.»…}¡²;bî±ëVÑÓF¼…º¢Uˆ“´­ÆŸ +Ü5ã +Ñq'âîy~SÊ|ÿC~­]ÕÁ¶ôñ>yÊTh q“i1e-Ž †¿ë £ºD$³øjôã„`!Æ='Õv›Žºx€#Ó†Ì?Æ2½ÃMCdykðêËpB< +S•ˆðÍ|‰Pó%Bϳf¾¾áíá‡ÊÒeG¨•—»»»|[.oc+Â- }%•mü{‰ãŒK£5£Õž´³«=ßÿUìEn~Z:ÉF=0ë¡p> endobj 40 0 obj <> endobj 41 0 obj <> endobj 42 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 71 0 obj <> endobj 72 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 73 0 obj <>stream +hÞäZÛnG}çWôã ¶û~yÌZVEœ5$Ú/AŒ¥‘–k‰4Hj7þ¤üeªzn=Ãas¸q,†‰T{zN:}ªšœÜÏ^~ÍÉývf$±Ìå ‘ŒlÊÙÝì‹ÙËKN8YÜ͸ ~àw–zG¬d” ²xœ1˜…2ÿ[ÜÌæ”1&Éⳟ³__MyõòÕ‹äí&玺l}¿)—«{òÃjWn2ÿeñÏÙëÅ ‚ë&,ƒ»h²Z†«ð®R®¹9Þ“k¼;¼ººù›"—Šêì3Œçs /m>B|©ò9wLâzÞnÖÕðíÓÍŽä†Úì}nq¤¬þ¿Ù.ó¹¡"[¯ðqÂb™s*„±dqw宾=B‚·ÿ=Çâ½-©&%íßÁÛC'^ö×ÌzÆ—…HCÂÏê0S€«*_äžß=|¼\U"aƒHȾ QN¡€5ã)âŽc!–mËÅd‡gÎU›BUQ]?}ÈK ïh967>÷Q5¥ƒCÑ +µÇaÒzê[ð-•vŒ>Iké4d­;Æîc+ú ‹  °ûr1Ö aÕ,h³N¡ +õ\Ëz 6®ÊŸ ¦.ÅW>õÇ‹=™ +ë³2‡_1Â~ˆ0ìf03mkd\l-Ž+l/&”<ÄIJëÎbŠ$¼)n6ë”pSi¨F +SÏq\·›^VÏ)µ«³Éˆr}.J Ø J ] +“­7åò~•Ðé}ЗðL Œ+ÆöT¡Ò ô›†Jýœ6ËÚLñ®b““ØùÓÓc‚ "„}i¬àbµ×©‹$U+„q’¢r3D!›BH vÏØ2VTä1|PÝŒ¹¨¹ëå®ì[¨>tF‡Ürq“ÂNà¸WÐíó²Û‡´Ú;Ìœ¯ž‚'Ʊûíz×oÔ¾_Ǽ¨T.¤²2¡6=ˆ¦µ©T¾oõÛ¢TL¥ TÏ\1)¹×|©ÈÈiüÓzuQÞåRfÅÓî’ùˆ*Z¶.ÅF0§p©‘A«ÄTtÏME•ÈcÑqñ_¶» |ÛçO9uYè‚G\tCÁµ‡¤6&·’ÌÂßM-ü½xn(õá¬V’o—©XøЫñ*éÍ-ì?p©‹RWGB™‚c”îð9ÊÄ#˜?wvÓî€2wë]wDû=Wi âèä'<¦‰`—{5Òß±àÛÁ&›$ǽ9ºë#g¢<Ý&©©ËÍŽµñ„8ùÊÎÐDkK÷û|¦L 3p÷ÐéArow‡-|ÈhΉ×Î$z#øõã9qjÿ &*8±&=Á¾÷Ù}Žœ¶{œ­èõ§âf¹ºO8Q<± ½>F›#?¦¼Œ+üîͻƉe'4NÜ—(@{íÂÿCŠí´]í:ìi,Ù2‡=?ëpÙÑ̆êÐmhãê64¨”RU=nk§TõòlNr•;¥únµÜm9V4öh˜ +µý!Âr§q\àwXDGØöt­ú²AS ¤*üúHŹQ@ÌP¿š[ÜÇ5‹”xô8 †{[¾Y®1RqaË%©¸T¨¸¸7­D<=‡êkÊ9#ÿ¢µÂéY-œƒƒ¬Ä~54ha£šäϸcߘ9Óü€9ë£{õôP¦V†V_èn$ö/È öbß1Ì÷*“{Ôò\¤V‹D»Ï Rÿ}r¡ðûH*[ÞFðª!¼J…ÜøDêTÒƹÒQ‘1æq±S0Áã +ynW‹q{üL› ¬ý£o>òÃGÚ\CS&|»‡ÚZ6 üC€§B( +endstream endobj 74 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <> endobj 79 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 86 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 91 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 95 0 obj <> endobj 96 0 obj <> endobj 97 0 obj <> endobj 98 0 obj <> endobj 99 0 obj <> endobj 100 0 obj <> endobj 101 0 obj <> endobj 102 0 obj <> endobj 103 0 obj <> endobj 104 0 obj <> endobj 105 0 obj <> endobj 106 0 obj <> endobj 107 0 obj <> endobj 108 0 obj <> endobj 109 0 obj <> endobj 110 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 111 0 obj <>stream +hÞä[ÛnÛÆ}×WÌ#‰B“¹_{œ¤hÑ †-œ>ç±iG­,’Ü6ŸÔ¿<{oCŠQ=9q„Â@${Èríµ×¾Ì„“ÇÙ«ïn9yÜÍŒ$–9¢œ!’‘m9{˜ýk1{õ–N3.ƒøàÎRŒ2AO3³P¦ào‹»Ùœ2Æ$Yü1û%ûñÍ[¢©#W¯®¾ù†\osî¨Ë6Ûâéi¹~$߯÷åö¡¸+óÿ,~˜½YÌàAð9¤ Á]ô²z žÂ¸J¹fq\“k\¾H]-þ®È¥¢:ûDãù\ÃW›Ï…¿ê|Γø<×ÛM5|ÿ|·'¹¡6ûwnq¤¬þ¾Ý-ó¹¡"Û¬ñuÂÃ22çTcÉâ5®Ê]½u°ŽPÃX,e:‡ã†©:—˜·¤‹(ƒ`\Ð {V¿0ÍEÝðÍWó½Æ€Â-¢›óÛ+rûi½/þ$ÛÍÁì©ú=BX»-w@ +wœÊB ×p"aQ#ÂRd§ÕEñÛÎ)Ns‘µø¼#`O‹°‚êvÀ2|¥Ž¶møÇy!y¬t!€Y˜Ébä pjwR•ÄqmY_ç}^j‰5A–u-ª¬„ŸOÈÏÃèÏ|ÃãJ¡³†ºuD¼5G-PÌÍq)àÂã¸Öò„hg'KAõÖ/òß ›& }21ÓPö 0@ÈIÜV—:Ù K5ÅÁ|™èt>‘ðø†Æ}k„snì¿…L_ÃîjØw^TE·ÙT³PPr,(sïÅ!þ²%±$ƒŒ;Š`ÃîAµáBß"ˆ’õ­X_„³AÞ‡^sÔŠP‚âÕŽf!UÁJe‚º»1ÅK Õ™>dA¨|eLÐ/‡B%»T}U>,¿…q½.ÞmîËU$VŒ¡Xù*:˜èqç,§«–ËøV©´*•Eùúç;Œ•“¨P.(ÏqŒMHY”S±@5e~Eªÿí>ØæM«Fý¥ñ6ìïŠÖÌ߯VÏåJeÀÒœY'ÒãʸH?ÎU&á¾ÈÜÆðDnã"ýG˜!@å( @) À?Û(µTʇTGa8Jlò® +Š¨Ô—vj©oõ¥×ú ú(ØãIÏúºB#0à×åz·ÜŠ€äŒ Rò¢q\AÜOËKhàœ#/.J]ÌuiŸ?2ÁOØý]Îö6›u±ŠqçØì·šòìÚà¸â¶Oýô01¥¨‚Ìèt‚ß/=_¤p5©úiÈòëÖYØsÑ|_­ÊméJ>ÁrY±œ±±T²(;“*Yãõ%g‰Èx›¡äß~,î–ëÇ|®@`š_¼ÏÃ窌-‚¶ÝII?ÄYéD¬8zÀ&xF+PqèdÉ@Â.)4öˆâŒúC…¹ÎþÈÑ-6?/ï÷v1ìâàv$e©düÆ%(FBv¬$;N^ˆì¸g ;¶ËÓßwÛ é:RY”¡¦a3©ý O¤,ºyǺQmáA‹¢¹/¬a9)³YF½.2Ò¤°úÌ mÍ%9Œ›^p5ùP[Hˆ:@$­©L +ƒã²âJ²åé¦ +uñŠȃLøàEì\bûÆ%}¨nzâ.Ì?°ãi| +Þaêð}[m@m¶åòqáñ<qP¥ª]ƒ+ÁÅä„ñT Öæ¼̨S—ƒ-KHŠƒ3 “Ý.÷qÎ#¬xžÊTðe0,;–~øÕR|Ñ­”/í‘^Ct†#jE +#@AÒHú»<,"´©º ¡šP†ªl³\ﻤ©¾ §W Ÿ(˜í`±-Z9]¥ô%É”å)™²ÍÎŒr©7OWmʃÆ Q üÉ|Æ$G'Jž-Pü¢ŠìË  +A7Ía?Dý§÷»ú¨‚Éž+¹ +‡qâ=šúÄg0_*0áa\ Í«[µNÚÚ¶í•a^Ésúƒ9mØXuj[9ò&Ï¿’s%VÕŽâ×NÔuµ,TuÏØà¨NE± +[(ì°‹-¸I&¸Lm4'´±µzÇ´Ðòz ð£ý%>î"ªrU»H«XþÈWW•Î¼ÞHö£'ü4ŽsÈÀzš5ÚdšZ;XõÒ¢¯ŽïÆ󆲇íõr†yë ·Áº@ÓT‚$0AâxöóˆØ4û:Í•aÒ:¶Z½éM›µªÕŒ…‰’B(†“HžŸ‘ìmÄYð³®UnF·ámÈç†UÇ’;É<$csÿDÀAf> endobj 113 0 obj <> endobj 114 0 obj <> endobj 115 0 obj <> endobj 116 0 obj <> endobj 117 0 obj <> endobj 118 0 obj <> endobj 119 0 obj <> endobj 120 0 obj <> endobj 121 0 obj <> endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <> endobj 127 0 obj <> endobj 128 0 obj <> endobj 129 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 135 0 obj <> endobj 136 0 obj <> endobj 137 0 obj <> endobj 138 0 obj <> endobj 139 0 obj <> endobj 140 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <> endobj 145 0 obj <> endobj 146 0 obj <> endobj 147 0 obj <> endobj 148 0 obj <> endobj 149 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 150 0 obj <>stream +hÞì[ÛnÛH}×Wô#‰:}¿<î&™Á,ƃ Væ%˜Á¡íØR`Ë»ãOڿܪn^šÙ¢ObalÙM6›§ªNªnsr³xõÓ%'7 #‰eŽ(gˆdä¾Z\/þ¾Z¼ú‘NV× .ƒ/øÁ¥Þ+e‚¬î f¡LÁßVW‹%eŒI²ú÷âcñËÛ‰¦Ž¼~õú‡È»û’;êŠÝÍýúîn³½!?o÷Õýõúª*_ýcñvµ€…à:¤ Ëà.Y†ŒËðažÀUÊ5ÇgrO‡RLJ_¬K©¨.žˆ`¼\jøhË¥ÒàGS.¹c×óî~‡?=^íIi¨-~+-ŽTñï÷›ri¨(v[|°XF–œ +a,Y½Á§rW?!ÁÇÿ§Ä[ñÙ–ÄIIûsðëÔÏ™—ý5³¾àË‚¤¡ágµ˜© ÀU4À³<óo··ñÃûÍÍçýy_=T÷åRJÊ‹•ÂRYTŸhã¾Zyˆ!Cµ!THï=¡Ê1¦¢A­iÆÁ¿©P½ñÚùÁó|ôÃm!ºtœ§“èk‚î +~ƒ—/n«ëÍOÕîî}uµÿb¬\ý×î“€qžzxºalôÜ2ï‚óë×¥Õ~Aèѯ gøÞÁNa¼¥ ;y3,ÚÐÔIJ¹ó”;lfš¸8AN„e/%§ÚkŒs…ä’,ÅI”ß•J€#¬Kß÷Ÿo@´ ¥ˆøam-q܇æ´Ã’U³äÖŸ—ÚŠâÚŽ†g3qî@ƒ{››k&«'ÐG'ÀÛ-µ.Á¼}›Ã¼ÁC9Y#Ï .ð¢MŒÏÁ×%|ÛŽž`¯<¤pt-Ò{7áè0n4¯qºk_¸·vŸ£ÓÓS¼Þësr{9áö k´Õ®„o·O7åRׇ߶)úR Ïx@Aäx†ã¸D=Æ3ÆóÓxÆœâêñcþ®ú;@¿Û]žk A΀HLÆé!(¦ƒ:®F½ öÎå´ aæÃ/ÍXøëìÓ é©J¨3 :F! ®àŽ ²TO}yÙ*…~¢üm³îr¤öpp.¢28ž}Èؼ# Ë™ÁÙö™8»õ\ò'Oðµ´­‡´€-FÁî‹ Ó (ÔäÈÂH× `"YL2µ<•©s:sÁ˜ó„Ðß”8l8§f@ñ¹ë«ûy·Ù’·®ï¾ÜV ØFE’ðýÓþ Ô ÂÀ×…VO ÔB b6Ìâ¥ÐƒiVÒ¯W&xSHþ¹¹+¹ ¾x,áÛ&—ûõUÉÃâÒP0¨w­, ìs yƱ^h!òúvýÐت½gQ°OMe&õÍ|£Ø [¬Wf ¤“~c©ƒtÌæX*Ú‰ÎÕ4î‘ Çˆ%æF°PcWüQ.¡TGB!ƱœÉ¹<¨u× ]‚iêÊH¨Hvbýcøùð +“w(sY*L¢^l®ªÛÛõ¶Ú=>ÚYÑõ¹Db±`¬œâÆZ XjÛÈ+ámjc‚ûcËEMK¨¹>L.Y.¨FfîÞ;‘•êTY©ÎJVºi!ß“”°—!‹7ë}‰Õk.Ê›(€r”ƒÆU‚õ˜’vžâúœo!÷ã +?‰šA~Ým?U×%VHÅúñvOÞ?ÞViQCHW.dh°k„§)XAGW|"—Ô×ƉE×ýfô"™x„¶Ú„’«jÛòº+0Ÿêæ_Ù×€&o°h.Ÿš ŒÝPj$`¬7`,a© ÆJÃ;z@x*¦q¤@½&¡ÂCÅp[Ðã‘bìq†ý˜ïÓÍñ™²@·A¡‡A¡› ·›~UÙdcaê’bDá‚ì@ ¦POšE¨6àR{˜)Dg2d–^rZ™×\…œO^T VsT/žµ^­„<ÁûÝýî ¶²¾"àä›íf¿Ùm{L„4ø0hÃi‡\ãªÝ£¢ÖDÍÕqn%²fÂ^Æpæp°b¶´õs"hÂ.'©XàG^xž¨Øa›'øs 4HâÃœcü)9ÜÇq…ʼnË:²·sYò1fÕ_áÇÏ“¿":À½Èt>¶¸¯JÎÁ'‹§/UÂïÒ«(ƒ\Î ƒ`\B¥–“AjfHœ± +jpŸ&üyüÓ2zb +ˆ$s)Ï…4¯õ)Wt\œ„;V 7ÉÖèïìËâ€ÔÅT-.×wÕò×jO.¿¬¯pƒ½+Τa±ë#óšÒ„ž°4<íúŒèÉæ:ÖTe“3úÁŒSÝ ,»gw'ì é$ùl£Y÷{ŸµU:’—JÁh—çxéq\Âzsè9{R£y$Q|’91 ¬ír—CÀåxJD)L䨳sêªW—`Þ„QFø¡sà×ò{ó‰Êð‰ëüõr³¯Rú`]dêg‰ä,Õ!auí‡WŹP÷™œ´ñúþ”#Ò=®FŸ%û^‚££¥ô„Š9ëÖêœ[xA‘q3àr W©vÏ{ 7Z>ž‰+×Ï)¿}ñ„´¢ó´Ò“Œw8{`ñì-ö¸›µ §Ò=pa5’ŒUTåö@ÓÀ¸…ÃDra¬C gu,?“×Óç=úz1òÑ! HžØ‚1íÎáx Æâ¸ÐžŽu+UJã§øˆ^<ä&Ó©LôÊÐâis_`Ϩ;ËÙ^â°PrF_¿¹6N›ËÃIG“À d¥ôÙ¸6Wàò~n–L"F¨¦ëbŽ£2©GJÿ‡þz1ÕœŒ14BZ,„±“á€Ét)¦p`ÞEôw!¿úæ™ìBúÃ]Èd+!͹ØlGª^<Äà–|Î×Gç¾>N{¸wR³cTåÒ‰Z~+õ½±Ì™‰ðÎàF?ƒ±þº}ȸ¾³î£dx¨Ýn¼(ñÅfÛTÂVâ6œKöžÊ(•ü(À †¹Õ-) ©wwæÅClpnæ¥måzŸÛˆÇc(‰¯ƒ›b‰†ÛÕ™*Mâ0 +¢†T¦KµúR3«Z3h™á´<¦ÿ¶J;nhõÜ“„ÏåçAíÖ;zˆÍ ‘µ!çÑ2Šnˆ ë·9ˆ;Ó?ô}Îßj#%J`­ RïÇÐ_Ö%ÖÅ Rø<Šš"=*ËEøo #p8ÓÜ—8ŽjÈ›¡_/‡}1³§¬Îõ|>gÙ•ÁA‡ÀO‡ê‡³pHø>{LH+çÌŒ¶L¢‚peGAú|k¶öÑ]a[°ã9’6#8<Ƭ\ž¸9ÇqÐ6½ÿ“{·ñú8õ‘œM8œúÕ†²aŸÿ +05%5r +endstream endobj 151 0 obj <> endobj 152 0 obj <> endobj 153 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <> endobj 156 0 obj <> endobj 157 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 160 0 obj <> endobj 161 0 obj <> endobj 162 0 obj <> endobj 163 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> endobj 166 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <> endobj 177 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 180 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 183 0 obj <> endobj 184 0 obj <> endobj 185 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 186 0 obj <>stream +hÞÔZÛŽÛF}×Wô#‰@í®¾÷c</²pc¬Í>,ò ÌÐcm4CâxœOÊ_nUóÖ¢(ŠZ8°,yšdwŸ:uêÒv?{õÀîw3«˜žio™l[Ì>Î^/f¯Þ¶ø8É~ð ¼ãÁ3§’-fŸÂ…Æ¿-ngs.„Plñ<ûOöîú-3ܳ«WW?üÀÞosðÜg÷ÛåÃÃjsÏ~Ú”Åöãò¶È[üsv½˜áBhÊÆe€O–¡ªe„¸ŠÀð*í›ÉiN04;þP¦šüçe®47ÙŸL +Èçº|.¥²õOðBÑzÞo«á»§Û’å–»ì×ÜÑHQý}»[åsËeö¸¡íÄÅ +6.¥ulñ†f_OOÐôåt+ÍíXõPÖ~÷þ{ì{âeÏS/ø²he¹'øEmak€® ðMæüq½®~ܬî?•;vSìŠm>WŠCö%—Ž«¬¸ã }­ä΢Yn,ãR…×^]9ºXDzs©÷kî#ñBE š7ƒèz`Ö›ÄùæíþEµ÷uñqõëjyó”Ï5·Ù:®³ÖËâý +ác7À¸bp@÷PÉT4 ´>ÞÂ@)ÓÙ[µ+ñç? ÙAµWmeäî98b÷2—E Iwêç™! ¬‹w(D‚„(‡€_ÙE%µ†E2k†œp#Ö°‡­õD +´Æ<%}³²†N Ñ×nTŔд¼ñ¾‰—5¶ª¼TaNâ R‹·Ú5á-÷Í7¯I‰‹E¸áÍ®¿.>¯‹M_¬†!(Ùžqƒ~é‡ö’Æ-X=ôa“ˆ±Õh‹lY‡Ó Ò]`+­Úah錽ž¾7¸ÕE9Îò +s˜ëŠ¾ÂÅS¬µ (æG½iHž™à8.9Â$Ü#À¶8} ²V“yíû5¶Ð¥ ÿF…¥ù²¦ìj¹^ÿ¾¼%çñÙùã0»y|*W´p#¼ô`ÁÁ2©0B£ø†øðC+K´ýeLExŸÐÿ·Ãì»n8n—Ê&¤;®öÅÒ +Á™z ²vý'•ýÁÞ>mnËf,oI}Tö˜ã?¬$æ>ä¤ØË2ÅÏŠ€qUÉ +ƃaüdç#àÆ£Bë*¨ŠbP—ÍaoÐ \§Ï€D‹OÜ<'¿ÄØ×ÚŽ©˜žØ4Ö’ömh/r(¥¨ñsŒ·ŸÓPk f˜.ëqí1†Æiül_4l«ƒéic-¸4¦H#!Îwo}t‚=öï>?ÊÖl÷]”•¦f¡Õ}¨Qùædì …U-Ñ:+—©H˜Ñ#àcZ`”§s :Ÿä²GÇ|ÁYÎ>þŠ\ ÿ¹®°cËÍûP”%•|CÊMU!)‹æaÄH“U7R¤Ê£ E›`'¢s0æ›QüüëC¬öª_m_5Þ'Óð†Ã«¶"Õ–ÈÍÊ’ðê«ð:`mB æXÎPÒ›®3ˆÄ|U÷§4ç‰wÅX*4ÅäLçÛe¯ ?©üÔlÜ».´ö´=)dD‘ÙOŸ#ǯ7åöq"‰2º¦Š©0$–xmèR¬šÊc(dl‚êxs…30 4ÙJ´r}…ð‡±zþi³*»\\K@9V®M3† Ô×Rís¹•â)¨.ö¸ñ©yåÛëÍ]­Ð¤¤ZrkG°•ŠÆµ°©ªÞêˆ}ŠH>)ƒ&ù:—ïªêƒ*÷Ãu‡îÕÓv[lÊw(¿<=ü^l;¬•APG°–Âá°ò>­žº WñÊN†YùoEçó“dGN×cvÇÈÖ±õñüK‘£›Ëì™ Kr1åPdu2ôAµ§qåzÆ>lÖÊI阜@ÌKHzZî'½]Géù}yT¶ÚPº«²òz»}L[IÊÄÆž‹5Çq„ñ*W&míu =#å„vžz¹ÆÖ¸&¿Ï˪ø~ØSRX)ã:|ÛBÚNJ¹Úÿ{™ª8³U'/¸UºN£$7º_³52­j™~ý´c¯W%»ú´ÜæsÑåmO[d¶MSQE]µGG@–4®$f¡ØÁöÀîàöþ"áv6Âm“Ψ9ÑŠ~F¼nD»i>£‘²]ªB’nÐÑžëAÇÓ …yF’: 4¡­¶g1[¹ &¶=ÞƒÞ׊¯©a@¼ÞîùH—ÞÄüAǶÛñ‚ªüò6QÁC7íƘï•{9^—ÔZ¬m÷%ëžèÕº@1â…l¹¹-ØÏÅr÷´-ÈHê;#«ÇÊ Ì8p\böÑtöŸØó˜«Ã3×õ™›€­{Qaéj„º‡4Ö@lÓH9 +µ*B†Ý!Êe–'ZjIêëÀ|¿Ü·j'äU âÖö¼Y}YÝÑùŧŠÂ®Ò‚”»J“EÝ–Ø÷ +ƒ¹š¥q:ؾ´ë›`'u„_pº6Ö®ÖÓÕl5îö6Y“àP&¼«ÕÀ–åÁï6Ÿ±éú`/9eóÃúІ5Då:¨u)q¢"F+ +j`Sš‚Õ ÙjÄѾ»ÑûîV|צBè5ûgGµÔ\-‹Ínõ¸©ÞÌHs]ð±(3¸•±Ò ëjär#Çú7UŸlZc^Nû&Œt¡Ô>”Èع&ù._÷ÔŒ@ …ìk™°èõ ’a=–B8M㘞=˜.{83ïÕ®¯Ê—| +-E«&è°êa½¹ë w=È«´·ê‹}6¶Ä^Èãi›±ç•Òò2k»J—œ*Û¯ì*ˆ¥á!¾ÚËr¯!*¶‚€‘cG h +¥NÔÖ‘´aU>³Ù3Ùm÷a²±ûÌßÃnw‰¸¿Y–i®Œ« E‘ñ@ó¸¢(Ç´r¿(#HVØDÔ÷Ž6/ŽÛp”Ûp bø&~YÅÐÙ<½q  è…©ãHM㡱ã% õâ'³;¨ïÿÒJgòÒJBZ×uä;¾*„óß›rù5’\ ª£Çß‹o©àÔ{íÌÛöÅŒV$Üñ#øú^½´·ãœ¥£ûpDí  G +endstream endobj 187 0 obj <> endobj 188 0 obj <> endobj 189 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <> endobj 195 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 203 0 obj <> endobj 204 0 obj <> endobj 205 0 obj <> endobj 206 0 obj <> endobj 207 0 obj <> endobj 208 0 obj <> endobj 209 0 obj <> endobj 210 0 obj <> endobj 211 0 obj <> endobj 212 0 obj <> endobj 213 0 obj <> endobj 214 0 obj <> endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 220 0 obj <> endobj 221 0 obj <> endobj 222 0 obj <> endobj 223 0 obj <> endobj 224 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 225 0 obj <>stream +hÞÔZÛrÛF}çWÌ#P á¹_½”¼•­¸â²Y»Î>p%HfŠ‚¼$µŽ?)¹Ý38!h9f\ª/ `†§»ÏœîFîg/þþŽ‘ûÝL b¨%Òj"(Ù–³»Ùß–³¯ady7cœPøƒfMá,1‚”“åÃŒÂS +*á»åÍl^PJY~š½Ï~¾~ETaÉâÅâ‡È›mÎla³Çûíêáa]Ý“Ÿª}¹½[Ý”ù¿—ÿ˜]/g0œ‡Ð~ÌFÓaÎϸJÚfp“)޽ʅ,Tö™pÊò¹‚·&Ÿs.4¾µùœY*p>o¶Á|ût³'¹.LöÏÜ ¥ ßowë|® ž=Vøsüd)™³‚smÈò +Ge¶!ÁáÿÈñVÛðPÒ¾ö>Ž½N¼ìÏyê_ø2ï¡ ‹ðÓÚT×`28à«Œùr³ oÞ®ï?ìwäm¹+·ù\ˆ‚eÿ˹)DVÞMø*é ‡t¡4)¸pΑBZJecÍ £;ÄwÁeÇ^?Dž ñ¯™,#äÀ!-#Úª(ûš¤ éÇ "]ÿ¾/«Ýú±Ú‘ëßW7å._þ†óô÷ À0BÃl5¥ƒ#1§Ð~ bmž·Pϵä€EAÒ(WÀøÞmÍ3Bâø¼=ùxüWH=Ãψ†Éœ¸Òžƒóç~2s`1ÜÙ,‘BB,Ùš¿€Bhá²Ï9sðRæðoK~ÍOûÉëÕØk·Y}1–sÿÉ/¯†8a8Ôfõ1Ñ?+VÕþ×¼ pºÖÎ’pN ÍÇÝÁÁk`×Úb`ÔîhýÎZo(a f“^0z5„Y +i]4I6¯‘ Y&Rh#Ê èï€2à #ȼ!Ìš¦¯Ê»u…‹A„'YU·5Ž<àh€Gá +¾ôáèô܉q-!¼‡pÀQAÚ!F»V¬Žž‡(…¢ ¡tc@úQuá܃º®8׆½¨Ç5 jUÑ¢ª\?vYWÖ6 °¤×5Hûp‚{B ²0 >"0p­ŒèÀ´?ºKÀ¢Éøô;Ð…>K§¿AïÑèß´<0é^5€<ãiþÀ(ÔÞ}êS¨ êy½úû§qÞsCõ$pŠ Œþu±k,€ KD0,#®Õ(Åšð=Áñk‘˜§ñ²410ê`ª¦ +ã§rð$žSã`2eÀ 1ß"ÙOG˜ Ñz<¤Û vG¿J\6‘ ~o£š·ÎTgÞÝ]VÍ)üh…ÃbÇcìk"ì×Õm@[´5F0PIŒ8< ˜Äð‚¦”…hW°¢¨DÆa› +X[@¡ðý¢-Ðni$NDÝó·go_“dÛ—9×Ùbñ´ÝúÏUN³ýª½ýçØZz*‘&A$ÜÂuê¯u‹Ó.1ª “YùÀBÄÄ{%ÕIé€*LŸ=ܪ@:~UdaUt[øèÅ”«O :–H{›`GÑŽÅ@B0+z†`îH…–—õ"£%5^©;Ã}Œ©/V'rDø¡‡B[zÍ…×Øst :%óâU.½SÊÿ>•ÕM'¸q´á6–’z hàE¼ <3âfúJ©õåWJu´Rò®Ãâ(?Ò~>Êe¶Xæ Š™­þ“û×My]íC颳u+Å„§TŠ)i—]AiÙ'•ù æYF&p‰U—GYOÔ#æ@Ò¨Af$ê +ŠðjõˆäU®P¤¬nöñr)¡P„i +T¨ Á.Oд¶Siº©Ÿ;eK(|¿€ª¿dýÓ#jcÞG\-¼"Àk:ð¾]í×1®Æy~øcƒaƒëŸC»„Ià‡ ¤'`«å%W@Ó_{¬pê15POƒ¸b ÖÈVß âªÚ¥1 ˆÎÚBÖéD¯¢•5­v~ÁgŽ +¾>:FêÕúînX‰½ræxT#à2sÔù¡*ŠR(pOTÞ\© TÏa¦Àìc)±ÔK°”£X¾ù´‰áDÊÆÕˆ"©ãh—ÑnÆ1¨„Ÿ:% jx<È©Ñçû)N–;€âÛPõ¬l:ÀÓª[µ£0`— Òél›”Îq^ ør§KÝtð%"O8‰‰lSìº\8ÝÆ[ݵå'û æ’©ë©{ ¾~¼-;ļolÃ¥Ø,íýdeÞ#Ë&dª+¸¾œ¾4¨‚™ }É{ nûê’4y@ÓšÛmŽtï;2h÷ï>®nÖÕ}Œ®¦¡¥È}W|]v¡Y㣵«6ÓkW#/­ácŒÙ°ÒLŠÌÅÓ~S)0ɱLJÐ&síÔvRZŠ3š´ü;ê–èL]îø¿¼ýmuSVûØ\{æP»‰õ‹¢] ÁÄ™SÐ4Ù…«&ÁÇ»†S‹¦ÏnK½úߦ¥=sh t |-¦øÎŒW;g’äâ(Bï¸=8QOÐ[”x~¥i <{ø2&Êzà锾2í¤C³#9¶·f¨9½·f‡T‚þ•0y÷XamøªgC|]ÝÆPås]øs‰”B;‡–ò¡Ýݨ_âÌT­ X?Tÿ”ãåûD‰u@/µ/Æ• {¼ ©¸äíèuH÷w»#‘dî’[ÇŸ¯b¿ÉÆýj ,€¯›MG×rÉ|s°I`ŒÇ‰àR‘Ô\vâ +¥/®Áå)ÞQÏF÷ÝꡬÊx¹çp%R€¦'ÊU†vâ CÝ=†&5L/[°ŠÄnáù¸ÂšÅð‚ÐôWpÓ/xª ›ûqw€Sš} K¾D³£SXÒm÷À6ºlÂ6ºýË¡}~oúªÙŸÅOU–-ZÜ,´¾IMyºIM¹ï &»ÿrb‡Ú\’Õóù÷j`s–™úD#-êín7XƒáZ5À ócm0µ(SV}OU™:ªÊx÷ Ö‘ Lp .è‚ |MM"&Þ9½C¦t(,ÀEÉÂB¢ã44ÒÛ¢e“E†àê›è5ˆæ‰õíuu³yÜ=mË1áüQ™ì‡áq<°3™,0O æ»<‹×À?xo"™´ðÿ\V÷û±¸?²Í$mÎD“³§<¾ ¿zµqŠ6ϧèÕ­o» Òp¾QȤk8•êeÇ9Í^õmÁŽƒÇÄàéN¿˜púÈõMM²åžÒðßãÇÓú¢˜.,r„lHou1ƒvPÇž£bŽNTÆ¿ ¨®ù±ÿ`Ôtœh +endstream endobj 226 0 obj <> endobj 227 0 obj <> endobj 228 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 235 0 obj <> endobj 236 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <> endobj 242 0 obj <> endobj 243 0 obj <> endobj 244 0 obj <> endobj 245 0 obj <> endobj 246 0 obj <> endobj 247 0 obj <> endobj 248 0 obj <> endobj 249 0 obj <> endobj 250 0 obj <> endobj 251 0 obj <> endobj 252 0 obj <> endobj 253 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 257 0 obj <> endobj 258 0 obj <> endobj 259 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <> endobj 262 0 obj <> endobj 263 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 264 0 obj <>stream +hÞÌšÛnãF†ïõ¼$ˆÓÕç¾td;ØE0las‘ì…V¦=JlyV–2;”·Üªn’")ªEÉdIÓ<~]õס’ÇѧŸî y|i‘fiu"X²*F£§£O×@2}OþáX“;›ÁrÆ“éóˆáUr&ñÿ¦óÑ8gŒ‰dúmôkúóÕu¢r›L>M~ø!¹Ye`s›¾<®fÏÏ‹åcòåºX=ÌæEöïé?GWÓ>=‡Ðþ1À6C„Çpþ)\‚GI[Ýœî ŠîŽ_„ +7ÿ<Ë„ÌUú=á ²±Â¯&s.4}uÙ,ô<7«—0|¿™¯“Lç&ýWfh¤ÿ¿z]dcóôeI¯ã–%cÈ9×&™^Ò]Á–·'$tû¿2:•îm’pѤþìüÜ÷9ð°¿çªø0?Bç–ð³r˜.'d˜€w¹çÅÓSør»xü²~Mn‹×b•…È!ý3ã&iqŸWæ«yn4z‘ΕNr.œsI.-c2²w1?ˆæsÙ,m Ïó× ój]`ë€mUÃù¼ÏyûgáÝŸŠ‡o?Ï2N&ø=ãähËô±Â7X¼®gËyq“) Õd³®ÞÀ_Z Ù¤¦—É5c½Áñåq|û þ! –^ÍÂØH”'ûÿüÝÑáðüt²ú*@W‰ž‹gOÇ“…(O®îÞòÆèù¨<áücŒ¹Ë…!ï–$)—GÁýeq¿þÒd©ÑJ%NX."(íǵ¶4߈’îhj~ZjQœAƒ#°Üqµõ QÁŒ³$Š:¯jàažM¥| b¬‘²AÓOA²ÀY¾­ò yõ¬µù(#Š8 ¯!g†EF?VÉÕÿfÏ_ŸŠ×&jé0Ò 5 +›ä +=Ïö’Ö4®ÑðÃÝJ³­´ƒÞ¥¤®,Q?º²º…tž+Ù0îÚW"Þ×™‡Obg†ó ¥uÎâöç6äˆ:éR®ëÙЗÜúÔÖWÀéê"ã:L6«•ÿ½ÌXº.-¸ÉåÕ&b«Üâqü`ÉÀ– Æž³d²kÀ¼fÚUúðÃ…?cE©ìÕ.\g’FWÅ7ÅrÞŠ¡ˆTOƒ˜ +0Iã +‹Æ±Ý˜áF®õùÕTÆ‚’Þjj¨Éd¨Éd¨Ét0^ü9™f€é¬LgÿÉüçSqµ\c’…z¡ÓE«–N“’Pf+cº+h\öŠ®ÂTlˆèâK©ó#V1Ķ‹˜Ä< ¶%bžNºå¯4ŽSzmC}Šl,KTª®,t’R¬ÞÜá’¬*ÈÚr G +óIÜ Â¬v„™Ûu¸X®‹årv±*f—‹‡‡Ûâ~3/n¾=5g‚ZShÒÎùúxßTpËh\jQŠHYØ”$¶i¸Ic`rÎUÖVˆôÃ5çê -½Ób8¾—Ó z)¬ïÓÙ|ý²jB•ÔÜ…Â+#L…¢q‰a1ZqÙ¡!OöõBçâ„°wJýjvê×7áý¼XfÔ@I7¯d¿M¤H¤Ô^‰ ¦F&šm½"Ñë‡ú˜Þo¶µá:qÖî€éïŒk_Ü+\àšÜÛÙzñÒD +à•@’%Eâíq\bt> endobj 266 0 obj <> endobj 267 0 obj <> endobj 268 0 obj <> endobj 269 0 obj <> endobj 270 0 obj <> endobj 271 0 obj <> endobj 272 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 275 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> endobj 280 0 obj <> endobj 281 0 obj <> endobj 282 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <> endobj 286 0 obj <> endobj 287 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <> endobj 290 0 obj <> endobj 291 0 obj <> endobj 292 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 295 0 obj <> endobj 296 0 obj <> endobj 297 0 obj <> endobj 298 0 obj <> endobj 299 0 obj <> endobj 300 0 obj <> endobj 301 0 obj <> endobj 302 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 303 0 obj <>stream +hÞÜšËn#¹†÷zŠZVa 6ï—夻'™Àn!3ƒA‚]–+‘¥†$§3y£¼eÎ!U%Ö½l«£Aà…dS.RÏn$KV³wüÌ’Õ~¦Eb¨M¤Õ‰ É.Ÿ=Ìþ°˜½û%,Y<ÌO(üÀ ³†8›A åÉâiFá)„JøÛân6'”R‘,¾Î~M¯>þ(b“÷ïÞ÷]r³Ë˜%6Ý®v˧§b³J~ÜòÝÃò.Ïþ¶øóìãb Áuí—Ál´ –áü*\Ÿ’¶œçdg‡7„É?-3!‰HK8eÙ\“šlÎ9uœÈ”e,¥Ùœ£\zoào»møØýóÝ!É4¼ûkf,Ñiþ¾ÛÙ\÷üZ~Ñ4å\äpvfË@4¸ŒÿdŠ¨×`’ðФzmüÚ÷:ñcßæ©¿ãù šXÄO@õq˜ p–9¿_¯Ã›ÛbõxØ'·ù>ßes!Kÿ™qv–ß“ÒŒ•t %M”Nι„HK© æ¬91º;'\ÖÆ"ËsAšIR‚NJ´,ÑVE*œWhøòëüáëÕ2ã +¬ö·ŒKxc–`Ó»ÛíóDøý._–ëöÏÀ3a ¾¬^SÚ93sÇO³û™YåxÉ~®ÂIÈà_€#ʪ°þ²T’‡¥$ûɇ‡Èø,b1òÏsf9ì&SAØs¾Š)”·„—ò +sU« +\UÅõýòËò®8,7'ï†x5˜«L`búé‚ÍÀ°Ö·½„[á`[eGØú™q§ÔI¢Ú$;+2…ˆÎ1c`*Õœ :âx€Êñy-3Õ§8eŒóÓóúP|Y ¼¨t`˜æ Q 4ÛESŠD+vD›j‹fJÆajÁäÌq#E”†{v’Á<'£üP,WŸŠÍÇûU~•oV‡Ç§à(Né }âRà³ò(þšY±šôû‘úYÍ g:ÄM“ÒÅ—–|¼â˜)`æ3ÁPP•ñÝbקjdwSîj̘Â]eR!ÌžãšiÌžjvèi…îgŠ›¤.  •ñ±W*™7’•Qyb ö™V—w|ÌRR¬µ¨ôÈùç_>ûàEaý¸‚àcÁF5îf?opŽ06¢cÉÊœÆnÒaóäŽs˜öÛÍUÓ¦¹¾ñrõÑfY¬‚y0ÈkŸÁ÷Ë\2W4ƒ|Ýs‚éNñœ0ógIu4™ÀÒ–¢Æò§â¾æ/•–Aû!]ê×¾O—”V-íw¦K`¥.è4ð/K@1At¡Mdʽuö3õf‰¹v T4¾È1EbcL‚[åÿ<ÿ”c‰ã„BÕΡ~âI Ž£S, Šˆ(HMÂ)b¨^–˪ֽ6“7¸é'¨¿=ìËfß—-}ZþëkSôLÑs¢í°Â¸‚ê-ˆ¾a™b2J&/ªu>`›²Ó6{a›|s·Þîóûe½î”N£æ!Ô úQp·Ør¶2Ð*%#‰¦3QÞÎ&ƒ Á‡óbÕbbíd‹© Lm`Ê›LÑI^iV¡©¹ƒ½Âj)Ž Í¢|ÚTMù²¾íĪ_urwÇhßÝÑQwG½­Ö¬ÍâDHáU>Â’–°€oÉÍTo©ûk‹o¢rs6•_?<ìó8‘\‡2YVM±NrÔy pÏç<ùr;íc/þò¤èúhñ!sá¿=ðŸñó.ýåCÞ`oO×]Z;'Ôy—`CÏ¢w3´ïYF»ûjõÆ=‹pM§ðÍ=¬}caØ<ŒàŽ£ü™ŒPèjaœCFÐ>›·;hSÍXšßÁ®vC ”hšr_»·yü16*döÌûØþfÇqIår½Ôr¨m~Tĵ‹…w®ð³Ûvð\ÔàóÂLϱ›¦1ùˆXǹrc-t#¦¶ÐÝ%Ûj†ž­­v›ï;¬T2ôŠ '")ÔŽGûnŠMl“X’bÅ ÂhŽÃdžªReÇ[MürEi ´™2½¢(^_Ýd‹³e†£èòø~½Î×1fnÇ9²|äwœCöjT-òwÖªvB­ª.U«ÞªUùŒ÷/[H­šGéx‚íu˜kÈØgÊT® UM,ºÞÚI6b(Ó´ÍL“4< ±1š2VÍ20Eh¡í¾xÜåûÇíúþtË|l¼{OA½÷d’ Hàõ·‰Y¾}á„iH4JË–õÕ—ŸË"Žˆi°-oVÇ+m'DÜ_·åT¡®§[…7‚8ÅS«Çt*/qYÈȳ]:Jôv¹©å;Œ†ûmÆß ì­vÞ d´v»­tîÔE]MÌøa-¿äU¡’iëŽå9,6J7"Þ?nÖÏyíš›õ·Ü˜Ñ6ÅqÿµB¾¯ã®hÚ\×ïµ¾Þ|›[> Z•vö_y–e +endstream endobj 304 0 obj <> endobj 305 0 obj <> endobj 306 0 obj <> endobj 307 0 obj <> endobj 308 0 obj <> endobj 309 0 obj <> endobj 310 0 obj <> endobj 311 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 314 0 obj <> endobj 315 0 obj <> endobj 316 0 obj <> endobj 317 0 obj <> endobj 318 0 obj <> endobj 319 0 obj <> endobj 320 0 obj <> endobj 321 0 obj <> endobj 322 0 obj <> endobj 323 0 obj <> endobj 324 0 obj <> endobj 325 0 obj <> endobj 326 0 obj <> endobj 327 0 obj <> endobj 328 0 obj <> endobj 329 0 obj <> endobj 330 0 obj <> endobj 331 0 obj <> endobj 332 0 obj <> endobj 333 0 obj <> endobj 334 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <> endobj 337 0 obj <> endobj 338 0 obj <> endobj 339 0 obj <> endobj 340 0 obj <> endobj 341 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 342 0 obj <>stream +hÞÜšËrÛȆ÷| +,š"ܧ|xäÔ¤ìÄ1™Ì•#A'¼¸(8¶çò–9§› ‚’'’R*“4D_ÿçÚ€d9yõÇ$Ëû‰‰a6‘V'‚%ûbr;ùÃ|òê $Ìo'À†øÖäÎ&F°œñd¾™0Ì/€Ð¹%üì°LdX€ï2çëuøðaµ¼+ï“Å}±Ï¦Bäþ;ãuVÜä•Œ5ÏFkÒ¹ÒIÎ…s.É¥eLA{Sóƒ(óœËÖàÁPx.˜™Wƒh +!ZH´U‘zÛStÿ,Üûº¸ýòv‘q’à·ŒK|C-ÓÛþÃîs‰68û´¸Æ·‹í²ð/Õ=ø“ d‹ÒÕ4®ë½ ŽþâK©ü€©–`ª'œyÓä¼YDQè i~ê‡ó_':¯VßOYÙ|ЉNÁb£üäStä@Õç’½(u@©JÙ‹òo÷ÅÛb»,ïæwûâþn·¾‰¹jÔ¬Dn“€¾ì3S}\¯‹u¤FåpUL¦ðöP2Cã¨ÕÈ'VJd. PVv’'#¤‡¼l-<®#^ÿ#JAu*ô)d¸Êëé´á +Ÿª+ äÝÐÜ@3èDz™ÍD’“•äÌ9Éh"„.w<²Ýï‰pžÿô%B¹óÜîcpZ{ÅóÛ!{U4®´:Øk+ö²:µœjI¾ï¼â0›³0YCü\d²ªk³Æá +¥ò(•Gœ ú î:LÇP>Ò(¢AÒf8¤ åCºBÏ‹˜§=9X6Vmü²$çòí"´èåk_øŠšïÕöfvc68‡¥RŬ‡òAã”<77rwŠ§guÇÔ“¥<–u>4oœß­®3pøÍ¿²)¾n‹û–Uƒ «I݆Ó41² Mc9lº[ 9Ú”meÊl4ÏŠ©Í…xd讨ö†îË°þ²ÚW_Ëb{¿Úm#žÒ)Ð8ÃOÅh\F4Eu;º)×åI#SÑÈ”×XÕY¬A¨Æ>.6EL«ØÅwOòÝâë7¿.®‹m9[ïʃy7™ 4Λ´’u. }ÐB®-qÞ`Ò—Ç[¡E¤#ähbo‚”} $‚B{EïõnñuµX÷ã– °¡®Çix*?Ÿ4=Eœ_ÄÝôù,Úã²nLÖ]¡áT(Èfµñ)ógJ™7?‘K+¿Å.JF4OŒ0€œ¤qY7·Ûk?£Ï ,"æú LZEKõ¸Ú¹ÚW;ó¦v~·Ú"KÌ-Á´½01ï#seÔ´`‰IËÏ«1g*¥ÖÝ +½7#Û„u*ãÛhC¿ ¿èK‚˜; ¿ñ‹¢nœ)w”²ó¶}“a‡¦ac×åh©¬‡4«<¦]Qî^¥oé||ƒ¬Y«q±†Ÿ(ˆ‹A¼“Õ´;½a ¹ã0máic¸x}¹2ny¨ªÅÿp>¤nJ7®Yp%Âw}NR·’Æ…†¨ 7µG~Y™³ RD÷]§¬bdIôå”Ѿœ’Q9¥Îd ï®Æ¥@‡â u±NÃ6¾Ë%0â´ÜvÇk3\‹4µ³¸Ð_?|?è2-/ñן֫^ÄTfòĹÁ\ K[¥}ww'èùŒ×®“Ø£èCƒ@nØÖ]|L%k*Z*Z*Z›î“«¯‹Í§u·æ'ä[B27ûZL H»‰ +‹Öê`Tp}ʸ\¯'?8Ók° +è„é»Åõ~w­ w˜ï%ðiNNçt lï½uuvtÑ«;ùPNíêkôúu<®­‰ôÞ¬ "×tÀ‹(ª ûGH®ëÆ+OË°\©UŠŽÃPO0â8Çd…ñ°m¥™hC =шú¢rÒðH‡û»ìÓcìSžo³¥µÛ‰ŠÁ«í ¢Íh#¡ÍWYrf¸Hå‹dŽIõ™Æ–€q-õ‚3<3”RÛ£*œíýñëõ¢Õ¡åп`7D^ã’á‘⸌±Qc‡4=ZÒ,×ê9ª:¢zI€ø`Ç hÜpgýìŽwÜoâ/©ßä.fþ—=Ù +¦#« =tº\Åš㟴¾ ñ‰ëu.¾oBÒo9Ýã\äeš—ÏÙ{;vú±8}*4êt¶*ã­`Ê7BV"†“¯¦íUú²;n»Í½Ü¤Ä±¡¤¤WåÄÜ?^cÓEYÒ£»œRð–Ö…‘v’Ïìà8HÜ€ 6¬}›Fn ÒÄ/:n›ûG¡— ++pFãÀ¦Þµ¥ý€˜§+ÂñD£íÞ—ÛuÒºÙê· dÚr Ì?\ˆç3C!•5Șé¸`éÙÐÆìØ\¯¸Á-€Þ|oöm³)JÒ0-[¼ËeéqD`öLÏ÷ù0=©º"§œ‚Ò|¼S0â¥êHí¿ †ù( +endstream endobj 343 0 obj <> endobj 344 0 obj <> endobj 345 0 obj <> endobj 346 0 obj <> endobj 347 0 obj <> endobj 348 0 obj <> endobj 349 0 obj <> endobj 350 0 obj <> endobj 351 0 obj <> endobj 352 0 obj <> endobj 353 0 obj <> endobj 354 0 obj <> endobj 355 0 obj <> endobj 356 0 obj <> endobj 357 0 obj <> endobj 358 0 obj <> endobj 359 0 obj <> endobj 360 0 obj <> endobj 361 0 obj <> endobj 362 0 obj <> endobj 363 0 obj <> endobj 364 0 obj <> endobj 365 0 obj <> endobj 366 0 obj <> endobj 367 0 obj <> endobj 368 0 obj <> endobj 369 0 obj <> endobj 370 0 obj <> endobj 371 0 obj <> endobj 372 0 obj <> endobj 373 0 obj <> endobj 374 0 obj <> endobj 375 0 obj <> endobj 376 0 obj <> endobj 377 0 obj <> endobj 378 0 obj <> endobj 379 0 obj <> endobj 380 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 381 0 obj <>stream +hÞäš[oÛÈÇßõ)øHa!fÎÜç1½A‹uÄîöaÑÕ¦-ÙäMü‘ö[öœ^†9¢œtíEaÀº E<ç.3ÝÍÞ¼¿„ìn7Ó"3ÌfÒêL°l[Îng¹š½ù2È®ngÀ3†øÖÎfF°‚ñìêóŒáY +&ñ»«ëÙ¢`Œ‰ìêËì—ü§ó3UØìÝ›w?ü}ØÎÁ6¿¿Û.?^mnöåövy]Îÿ}õ·ÙùÕ 'BóÚOl4 ¦áü,\†GI[_œ® †®Žo„ ¿XÎ…,Dþ”qó…*Lnæ Ιã…Ìa9Ÿ/Àåòø¿ÛÞ‡Ãn¯÷Ù\㻟çÆ:/Ã÷ÛÝj¾Ðxàý†nËOšeøSÎ5^ôŒ®¶š¡¡iü>W…Êi& 'Íš×ÞDZ׉‡ýoÎúŠó@èÂ~V=¦«2<€ïrÍ·ëuxóqu÷i¿Ë>–»r;_Q@þÛœ´³ò¦¨ÍXI‡¾¤ ¥³‚ ç\VH˘ æ¬yat=Žv^pÙ¯œ-Ï?Ð ‹z}¡õD ™¶*òBï|Š°póëòöËå~‰S•Íp±¼ÞÞŸ•›ÝjÿTÏÖŸE E<%+$Ï +ÍØàõЈi¼½&]¯o€/ ‘"Kÿù ¸ÂºððÚÉWo¾ÌŽŸâêי힢Û?òãXŽœðSYp<(òh‰/)”²D”gsÀÿäO(5 ?=ÍÁÑ—Ûåõ>Æ«ÑHeÅÄ&ðrGãZ[z܈wÑå˾Êã믎—“* aÍY`Ø€Uqå=a;J¹ÊŠ«+P•ÞxêÓéž•žonP±­Î¯çÒ«ñY>X«D£É…¡B¡Ùšà4kÕ]›«|º¹šˆ‰<ÍZXWHõö*SöZBîaîm6;ÿºüü°.w4Š"Þ4ú¼uOØ$FãCiëò&"‡§Ü7ÍðTºjQ?‰´EÒŒuQ+üÄÃ<ˆ:ƒHÑ%ªäÊàT Š\”ìYk-K\ÕÉAýÇv{”V i} ²p½_Ýoj[E×h¥ÆfΠ¶ªÆ5x“= l$`ÞtœrÍ-ž«×Úèhœ§<0_=¾t¾z$ +Ñ¢0î#×(` p¹«év¡cV™ó$ZSÄ®+j÷GÜŸ˜LÛg“õ¸þm|á&Ç9¢ÅÁ¶1ÛuºBŽÞFÄë+ñ5¦­¤Á=Øx6Ô ç €„fXWÈY> endobj 383 0 obj <> endobj 384 0 obj <> endobj 385 0 obj <> endobj 386 0 obj <> endobj 387 0 obj <> endobj 388 0 obj <> endobj 389 0 obj <> endobj 390 0 obj <> endobj 391 0 obj <> endobj 392 0 obj <> endobj 393 0 obj <> endobj 394 0 obj <> endobj 395 0 obj <> endobj 396 0 obj <> endobj 397 0 obj <> endobj 398 0 obj <> endobj 399 0 obj <> endobj 400 0 obj <> endobj 401 0 obj <> endobj 402 0 obj <> endobj 403 0 obj <> endobj 404 0 obj <> endobj 405 0 obj <> endobj 406 0 obj <> endobj 407 0 obj <> endobj 408 0 obj <> endobj 409 0 obj <> endobj 410 0 obj <> endobj 411 0 obj <> endobj 412 0 obj <> endobj 413 0 obj <> endobj 414 0 obj <> endobj 415 0 obj <> endobj 416 0 obj <> endobj 417 0 obj <> endobj 418 0 obj <> endobj 419 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 420 0 obj <>stream +hÞÔ›[sã¶Çßõ)ðHNF\ÜñØînÒt’ŽÇë¶>hlÙQkK;’œ¬?R¾eÏD +¤Hr“È;;±.I臃ÿ¹ö0{÷Ý'`»™‘ÌrÇ”3Lr¶]Îîg¾™½û°›ûÆñ¾€³•wÌJ^qÁnžfïRq…ßÝÜÎæç\²›_fÿ*~øø-Ó•cïß½ÿævµ-ÁU®ØJzÂ$Õ¤}¥Ò{@fäb$-p­ ÒèI ’í1EÆ×w5ÚÕ›Tµ*þ @“©k\§®ÏÔ½!SÇ»Ä1?ÍÚ8Õ§·#¶žð´æmòL,Wšd¥ºLêªbñuÞ_>,w«‡õõsìûXþ]þsu·ÿ)å.I  ü¡6dc©Ý #ïUhÈ[‹rTd‰ã2‡D%Â]Š1e"Üø‘‡…Añb¬„¿£m­¾# aß" Â>öÅÙpüú¥DŒNB—.š3*|ËY ®¨Ý€¡p.§ÖˆÉ*at +LŸgÕQÌÿ?mZælZtlºf툵;°‘µ8°v‘µ#ÖØû¾.Z&­½#)Q–æx: +ÛÑàóNÓOušú7pšG.É(FQ' Ñ9Ø„sר_…XâÍãËÃfRÆuEÂa4…GÃÂOÃv‘L"Æ&Š-m1NYÂeà u^ˆö"Þ/Ñ‘¸ŽÄ5Ç.×ËÛÔ3j£‚ˆ =û¼9{ì«Ç$ä_mÐúw3è®Ôñj™Å‹Žñ*Ÿ—gn'²5‰ËæNî•€_cÉæœ@¹ñˆ¶ñˆÇà‰ÛHóôÕ"EKôQ#*LÇ3a v¡Èh +3=JÖª×ÿ™,c¢kª“,6äs¹+ãu}1 +ÅC³r2£4ßUÛI YeU„)1‡90qLÁ>~Y<}~\îÒ™DDêìLà0ÂL`¢›Èˆì¬_šN~Ò<8Ñ‚3ÃiŠa›ÏÙŽ=C=ÒÔ$×Ï÷¥$†‹rŽÌn÷Ï[º¾¥zØw͇»$W˜~ CŽŽ/gͨ×Ø®€¦S RA¢5š[(o严p†1OìV Q ¯eNP¢ñjdïãE-:²ï†QJÖ%éAñ\Òßûà,ЇÃ,†Ö8 a ½/ÉØîsVÖGa /!ø€ôÛŽ²|4áôY¢W§]câ2M¹ñvjÃþ²z*’“çÿ<1Tdöi¿¸%è‹ÿ¦æLÕ1²g]™a†`p`_Yõ´=*‚¥©šnÏêë3磶ìùËÏ«Åî@Ø “™**º;[ñÀØ®”ÍáµÎëôì€1îLïÄá×ÿm³¾[¢ZS|±x~ܳëçÇejÇ”^ +æÐŒ3ZÊQ»j6KŽ«°]À0VL +áä¦Ó¬ãB9‹Ïä,f¨"ŠÑrÿ€Ü…%/‰ÜSìdܨÓ!¤Àf$µHa_q’—Dظ@Á&ðööâå ÁsåŒvÍóÏôÁ“^Q(!L“<÷û/Kíÿ  =Õ699“ägm—ŸÈàëc÷—Åön÷yq‹qAŠoLq€EóÊÅ”Ü ìíÓµßÏ©A6]°±êåe÷8ŒStß"Ži±Ši±¢´XµÊ–ÒðC²[×h—ÆÒ°“ÓùGd ;ÙÍ&±ûqµ~ÿ¼OS+©d(7bÆé2¼¨Îã°³ÎoÁÄꌶ¬ÎÈPTƒ«¹q3´ DΦ]7„e.Ûæ| >Û%êÉHÝ@»‰Xº$VÑÅzÞºF·ÓáÈ},ªJæ0jl–4ö»h+&¹hÔÖKV …Ìؤ¤§zß-Ûô„U„'Tž¶ tèõ¦ä @; þú v"auÜ'pÙú*ʧǾ˜*‰¢lUíâR6túct!s{Q-Çö B‚£» Ž®œp¹©¤IÆQŸ«Šyή®ôÑ ´µ‹+r9=* 6 íÇÜ·˜^å“5]•)þ¥ûÕvó™Î ¡Ï–Åþ%É"í$26l‡“Hð +%‡rªPOEfôäÐGOHB_*©Á-˜–|¿Þ×T¥M˜’5 +2s 6³ vN¿µøuO¨j:^©ë o²fji7ÝFRdêJ„è0¾^.\-Ø<è–'3fmɧ 4cïÔí3/‡ +?œ&×›ø.7µP÷žBhU@¨ìLŒW%m|¯ÆÀƒGÕaÞ5'ÁúÁ‡“bà{jOiœj΂.;‡ŽÎÚÙzÕ4¿³%Nw¶šÝa:² +O/_K ÛpÒk:ÐÂßKÙP;XÝ–’ûÖú¼‚ª°'¼¾ +ê²â¾7I¿&üÙ­Ö«ýj³Þ%´©÷ @äëÙô¢m[cL¿œŸWÔ~Ã"c‡Eº9ñ'Ú¸¥Ü—ÎC.b<‚¯â×8t&XJ:ó~Ÿ.IÇ$QãAåEÛ1Ì +¼>KkàM+ü ü¾Ì¹®Í’¹SòÒDÍ Â9q߬„$\ÈÊ›ãñÓÄœõ™æì¾NsNJ> endobj 422 0 obj <> endobj 423 0 obj <> endobj 424 0 obj <> endobj 425 0 obj <> endobj 426 0 obj <> endobj 427 0 obj <> endobj 428 0 obj <> endobj 429 0 obj <> endobj 430 0 obj <> endobj 431 0 obj <> endobj 432 0 obj <> endobj 433 0 obj <> endobj 434 0 obj <> endobj 435 0 obj <> endobj 436 0 obj <> endobj 437 0 obj <> endobj 438 0 obj <> endobj 439 0 obj <> endobj 440 0 obj <> endobj 441 0 obj <> endobj 442 0 obj <> endobj 443 0 obj <> endobj 444 0 obj <> endobj 445 0 obj <> endobj 446 0 obj <> endobj 447 0 obj <> endobj 448 0 obj <> endobj 449 0 obj <> endobj 450 0 obj <> endobj 451 0 obj <> endobj 452 0 obj <> endobj 453 0 obj <> endobj 454 0 obj <> endobj 455 0 obj <> endobj 456 0 obj <> endobj 457 0 obj <> endobj 458 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 459 0 obj <>stream +hÞÜ[ÛrÛÈ}çWà¨-Ž§ç>‰×N%µNT’¬—­<°dHË”D:$EŸ”¿L÷  HpZÞ’¸%—@qpœî9}zº ÅýäÝ_® ¸_OŒ,,w…r¦¼XÕ“»ÉŸ¯'ï>BÅõÝDÁñà,ó®°’3.ŠëÇ Ç»0®ð»ëÛÉ”qÎeqý4ùµüåÃÇB3W¼÷þ§ŸŠ‹UŽ¹ry¿š=>Î÷Å_›zu7»­«^ÿmòáz‚¡yH¦.™†ŒÓða¾À³”kNÏKOÇÒƇšUR1Y>‚C5ÕÌ–¶š +Á½`ª„ +JUMÁZíË ü€ß­–ñ´/ßn7EeðÓMe3e¿_­çÕÔà‰Ë½V˜4/ðR! >ôgz:¸í4šÆÿ*ÍtIs°E¼iÑwþ¸{ÈjÒ9"OJrà|ß]rUî³+‘ZxYÞ G(…æì˜L-ñ +ܼÅZxæÅ[ˆ¾ÐO¹9ÀÞ¸¼/Rhô“ pÒÒ¸F92Ĭg„aŽkä4C|7”âp˜ƒ„®æ›z‹F3®ŠFÍÔa‡E˜pXÜ×c Êà®ä}ƒ¥ÆÀˆ”óÒÐ"­F ½{‡îÑíkŒ¾C:û&%‰µÈ.<±Šé“ÉQ'†!GÆÕYrŽEš3€œ=0…iq„W}õEŒ3€þ¯yÊAHE)ræàCú¸üú°Ê ŸPÉ?cB_3Grx!%œ#/Ë=^ÞÑÌ©ˆC„/—j +Q>]Tèꢜm6”•`ÆêÊE"é4HšpÅDNz 4Áqidœv™M{)÷Ô`ªhËœ!ÐX©Ãµ«D2)ÄÙÀÈkõ@G<=*i…6P[ê ù›ÆÆAèåz™@ozü‚óΊ’ïÀ31€ÀüÇUÂ÷Ýë'"¿†QC.©G‘nDo±“¿·nxäb"$ÂR zPÛë6P( e=1Úˆ$ž p`$ W¸œ±»ØÄvàÖ…½Û}ñqtÒgƒWâ},ÿŽ|ýy1߬;e¢hÿ +•‰%¦>3¦†t¦ütÉËåÅwi }ÚÊØ—D1¢"öö$àY$A6”ä¡Œ\–›h‘„:í²[Å”Éy¾¦q¥lÃÛ¦cëàìG#g“yŸ³·g4vOž¤^O5¡>ñ´)›Á˜‡MÛ¶4ÒŸ­JµÊ)Jå,7©}¼wÁ Ç+×抃`ãq\a¨KX¦/²å˜mP£…ˆ8]¾Žî6ú;!€ïÇŠh¢\ÕÿþV/nŸþ^±¨ýloÔ~8.ÑÁsÂOŽ~pžÂÏ~¤ML+ĉ¤ÊIÈ×…Ë l‚ú–¨dºÇõ$ÉIÛyö-ï”6` +¦wwJMŸé>¯ëâÓ|Qô7õB˜O ØÈò„–4. ¤<1@ʨFFrÏyÏ“Ý 8Tø¼®¨ê]ª05,ç‹ý:€T2ð†ÎIAp˜ü੺>! íÅQ²æLÓD×Êkïv‡ Ö7u5uP¢ºsª\ãoQÎñ7/—áûERã’‚ªÝHÁy‡ç"8¬Š½¤ÿ-÷-¨¦ð+÷»œŸ”Ínæ³.² +«C¹]1W~à4,PÛp‘ÔÒû!vìn”xy àGmð#Æë ÕŠDï’òCk” ©lã6™¿+7d¤Äùµ Ôƒ‰¿ÊQ¦q¡ý þéuŒ+lª³å$ö6º5Ah+ 2Ï!MgÉ,½[-ÆÑ»ƒ?Ê{%þ ÿ2«(©*Ÿ+@ ÊWeº7.„ +»/¡ï)¿§q"©ÇGC RÒŽÚhdË›Wö‹AµÔCÜGÄ=!îËÕE¥©gùð|ß“8‚‡ BL)ãïÆwH4 þ‰¶ñãËÚ )Fsb5mÍ]¯ÐßdE®9PÂ_GüeyYßnØ[Ô6"¯m09Ã3³ VZŒoÇDo°o¸ HÉá& ¡ÆW„ù²¦$V•óõ³XUΪ©¤Ø®åœp¶±ùÕ¶]W~irk<èì’¸¹:©¡û·ßýšàÞ8¸ØÙdD¸ñõcúY~£.Mƒ)ÐTfpT¢•/Ñá8z4"{°-sŽª[pq¾[6Jˆ¥Wy…ÿ¸»[×=B‘±EÖ1ÈíB:Oã$fº‹TEGÇÒÔ„RìpúÿVÉ\ûú´/÷±{AØ7ßÌïçi(ºÿÉ2oIDÌž7œbwæfÈz~Â9•‚Èöô÷¦ +=øՔΠ-ô¡g®£ÀQací`÷‹×4Ü$Ý/ƒVQb¼U¼~†2¹ Ÿì„%€û¸Çêuáx£§÷ˇWçBK‹ÍM}øŸ.(vzùƒ{cÇZoSý8ܸù*¸"ÿ`¢ͺ +endstream endobj 460 0 obj <> endobj 461 0 obj <> endobj 462 0 obj <> endobj 463 0 obj <> endobj 464 0 obj <> endobj 465 0 obj <> endobj 466 0 obj <> endobj 467 0 obj <> endobj 468 0 obj <> endobj 469 0 obj <> endobj 470 0 obj <> endobj 471 0 obj <> endobj 472 0 obj <> endobj 473 0 obj <> endobj 474 0 obj <> endobj 475 0 obj <> endobj 476 0 obj <> endobj 477 0 obj <> endobj 478 0 obj <> endobj 479 0 obj <> endobj 480 0 obj <> endobj 481 0 obj <> endobj 482 0 obj <> endobj 483 0 obj <> endobj 484 0 obj <> endobj 485 0 obj <> endobj 486 0 obj <> endobj 487 0 obj <> endobj 488 0 obj <> endobj 489 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 490 0 obj <>stream +hÞäZÛnã¶}÷WðQBa¹yl§™ -Î “¶@}0%u‘8íœv>éüe÷&u¡eI‘‹vš È ò˜”H­½öÚF²ÛÅ›ó’ÝîV1'<ÓÞ2%ضZÜ,¾º\¼y'™d—7 Là^¤w1²\î +W.D® YÊ”Kéœ Å{ü€ßmҴ맫=+-~ú¡tžÛ¢JßowëriqâÆ^+nZ0¼Àâ¢_ÓêÒ×Û hhÿ/ 7íÁ±ôPÖ^{ÿ»Îœö÷<õO‹P–{‚_Ô¶6€ÔÉÉš_ÞÝ¥ëÛ_ö;vQíªm¹TŠËâ%8äYuÍ[à΢7Yn,ã BŒk/„N„Ž®‘æôÁ`íH¼ÜÀJÍ›At…νdÖ›Ì —5ï’‚'ŠÖ+vöûêþñ®Ú•—¿Òþâ +qC'æ +·B ® ¦ñn•Æ»¯¨ÂKg$‚ÃÙØODÆs0&*>G6Ï‘q£ãwãý¸qÇïÌܾ¦0'ÞoÒÍÚµZLܼ”ž^´‹o±T¨`Èïµ4ÍÁ¶`_<ÝU5ÐhGk‘ šiÃÕÎÂsšêÉÐјÍËÉb’mê5k˜W2{S8¤g°B•µ¡fÏOÓ?NÛ¡„HÀºˆ#´»Þ+ÒKßU7¿}دÐÏ4  +ï܈míeÄb0¼øÀ%ã½Ìaë[$h‚ó>7;nÉàHxö5kl¥ààLÇBÕjšÂ’åJÍœñh‰TS¶V¿*l;Úšmkd¿ÅDཟJðR•øk›óW’%ÌHÜ[i)ëjÐnõËtDœQÌÃ:ðði,)\£Œ—ŽÂ&x’âÒ¤VÒ8¼Ôô5Aôå'ð7ø ª³ÔÚ_‰P]Èi#Ù@î`ÐHž‚f¾~B&<иÁL#ÉÄ1(µJ¸‰Ü!îÙ¡%óÌ¡Í@Ô31-E~€Î*²÷žÏß›/Ü&—06$&ëŒhAG&¶¢!³—ÜçÕãJ…D¥ªXá‡}ó0¡0VGÍðÜÀ4ÃqÜ Tgª1Dry2Éà &¹‘Ï’|(»ÐmvAøwm›žIÄ!›™®C‹tG3èˆ.¨N˜'Ïú€ïæ ãž _Ë×hž©;Ó}R1]„qÜÛÔ8Cµ‡:ôPï2óó +‹¾8@ƒfÄkJŽ§qƒIK'0ðú uVÅÌÀèí+GFéÞQüëꆪV[¬žîö9òR“%(nÇ "ÎÕ¹¶ 1Þ¡iæ2Þ î椪¥_]Šçª»¶,ÁÚ + Ô… >J‹GÈ”áÙ”áQ§åž6 +–“bi\'8Çhl<̧±3CÕî<4ž(BæoÂsÅP „b(¶*‡Ñ…¨”Æ”CSѸFߘV„¡ü癩ŽìÃöJ³ÍÕÝÃîi›×ÐÚÆà%­ç& ÅRǵU¹Ó´‚ŒŸÕ +yªüù›9F·=ˆÃk$;«0-£¨µ¢¨µÏòã RM]ojž™ @•Áa­ÝtÎ`ž ]5žNee©/æPT)ó—@*}zC{ô"ÔtÉJ7×uÇ´ðgÊx”€^BÒªüA +c}Ölh¡J‰xBˆÛ±¡éïâl+Ž¦C˜1•³ ¯çLe]' µˆfüÅ„"Ì©'b’¤ýU©é,t®†z9Ød€Ó5TÌî2Œ 0ôÎgôÕ?`æX€}'‰ô<GÝÞÔ@ï6˜Îx£Ü’üR5âŠõîaþ߯ïÖûOYïD–ž.£ ^Q:œ/yØ¢Š•QÁ¦«±¼MÑÑÂþ‰®Ï‰ÝK+{ÝK7м¼Æë››ŽñXÊ‘bwEÃŒÇB§ªC[Èd‹˜}QÔ`3ÈàU“½yèiJX@ÅöY­,f„µ²PŽ|詼X8–BËÄŒß_v#éØÒ¦Sê‚ÉÎaM‘~’Ä\T«ëjËV›kö#‰ A¾Þã7ýô;>Ìp©`L\6Œø† "M½tÜýgÒÔú ¸w½”®iþ€=z÷÷Û‡Û…ZÛÒáo,@tqŸ¿7Ôk ã¢qq‡¥±“GIÆžv&êûIî r÷ÌþT3ùôžY‹?ªhÞ3;Ì‘\g€È8j“GÆ%;H±A—UIÿ9°„r©™þdÔÈP—ŠþÖ#S{ܦ7á4‹(x±§{ +DÕ xôŽ! +endstream endobj 491 0 obj <> endobj 492 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 493 0 obj <>stream +hÞÌSMk1 ½ûWèhF+Ù›tSZÉKéaÙÌNöf7 ýIý—•×»¡ rh¡ø ôFïÙ’5ùtÇ0ìTp)OÁØ«…:ïÔä’¡[(¶@rÄpŠ˜DGHºµ"©‚ä%ÖÍUƒDä {V_õÕôZLp1¹8;ƒ›Ñp¤·Ã8[¯—›>oöý¸˜Í{ó­û¢¦!E‡ œ~“᪌|P‘AP>È 'ÇÂ.Ž‹•üzfœG§€%6M‹QGÓXKÙ¢×lXÓpŒmÖ7âHlÜVØÃã|&ˆwob ûwKÓn7åZÑò«µAH?vNGåiŠŒŸ¦ÅV jQx±o>ÿdß û7UÿcØ¡.`*ÏOÇP86€}mÀ_áü°ZUçv9|ßïà¶ßõ£iœCÖOÆF™³þOcÜú,»° €Öåœ}"òuœƒÅNy™s´þUþ¸2y¹îA`§ä/j¹g +endstream endobj 494 0 obj <> endobj 495 0 obj <>/Border[0 0 0]/Rect[63 287.22 242.88 300.72]/Subtype/Link/Type/Annot>> endobj 496 0 obj <>/Border[0 0 0]/Rect[85.68 468.24 376.5 481.74]/Subtype/Link/Type/Annot>> endobj 497 0 obj <>/Border[0 0 0]/Rect[85.68 428.28 378.48 441.78]/Subtype/Link/Type/Annot>> endobj 498 0 obj <>/Border[0 0 0]/Rect[477.18 402.24 549 415.74]/Subtype/Link/Type/Annot>> endobj 499 0 obj <>/Border[0 0 0]/Rect[63 388.26 130.98 402.24]/Subtype/Link/Type/Annot>> endobj 500 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 501 0 obj <>stream +hÞÌXÛ’Û¸}×Wà‘ÈF0âB>&3v*)'åxUq¥¼yàH˜&ºLHÊòüÆþE^ò9 $¥Ñlœ­¤*eE‰`w£ûœÓ‘ìañæ7ßKöÐ-lÁ\^2]ZVä¬õ‹ûůW‹7ï$“lu¿Šåø‡Y:Q•Ì¹È[í9¬ˆ\ã·Õz±yžluZ|ÎÞ¿}ÇŒ(ÙÍ››ï¾cZ.KQf‡‡¶Þíšýûí¾÷í}½öü/«ß-Þ®„â(lC–³0ŠF¢¨Vé29'ŸÒ‘wÜ.:ÿ}Í -Šì™©\ò¥.s|©T^)¡3É%}•Î™*û€üÖâ²ÍqÝ3nq÷'îJa3o»†/-ö´­tÎðªRNoÉ»,‡0(5Æ?¸&£‹FÙøyñõµÏo\ö¿±ú¼, °¢¤ôçCr;@êX€ÿŠÏ_m·ñæcóðØwì£ï|Ë—E!dö…+œù¸€±SÆœ 8þ;4ŒžØR‡GËñO¿`{ É™ ­_â><ÁZoÏ‘GÖUÄD]Ja˜¤ÛðôsOZýgž”¾ê©p×=Í%¯9ñAoȃžäAV 9%ûÐú@ûÕ_'fOƒ·MiÉ ÞNz•EÆš®›ŽmëãÎï{¶ñݺ%.£ + —¨ÒïXÿè#Bd!òÁXb¨*£±Vï7Œê©=P +бÊ×ø„ÍßžCGæDÍš¨I‹–ÒÈyû4(^ Ì(aÕOa¦ЉâßãE9sÙݨZÍC¼¤6““¾Ó¼N-ŸÔ§®‹Jy&*¥0Ê\öü€ž¡é'Æ‘²Sú‚´‡~§C ¡ÐŠ +­æ…%Œâ™j>ÏŠ˜`j”œ«°(‚ +W©t2Ù×hæÐsk⬓t}5ýt>ªä0Ç.šgBF³¸±7ØÕÖà `%†%7–¯´©*Z8¹yYåkͨÐÕ "W†¶ì£ßÖ=Èz;ŒmÝëÓ_!Ï ¥œ–‰ú«¡DÌ'2W±s“`ârÉæ ‘lë1¼?sIêŠÉc–;t %Ò¼ò9óg6Ýh’†J ï|¦ ãGï‡! LCd]fe–¤!˜'iHÅi"SÅÈ„8rѵe»¦âCQL¿ƒÚ.ŒZ‘õÝáØGýó]ó°Ç 7q`Fñ\4Hõ4èå¯õpLy·ã”Ǻç}_‡ë‘ËèoR?‚¦§,9þE€ÉÞÃ÷±†û>T‡Îظ´aÜX ¨²‚ IsÜ7ÀVi4È—~+n•¦ÃM|c)JU:npK2óøûD¿xzlÖ߇¤°›ÃžkZóÈFUºŸ˜°”œÜMµvv¸Ù6Ýt°¡ߤ3Í®”ŒçN’¿O9×úå8¼…°â¹$ôËi̬˜9DlR9ƒ½I½EäsLfï¿öçô…|Ó¨=óŠÞœV3ˆWç'Y3YþÜÈ™!è"]Ä ‹tëŸZÃx›øÔÒr`PÒ&Ö¦ÂÆR©9Oõ”ç/uÛÔw[ÿJyÕÏ©®}Q]r:ÃSÓ×ÛfÝ G˜³Î¦ùŒ…$0Ú_LxŸ³±Ð€y»Üøûfà~6Ä‘3AäÌ ¡±ðZ¸ùÔ8 +t>Ì g£ †fý{Éð!‚é àÐﺾ鈧žFÄR_Žˆ—ÇÚ}½ó4ÑÔq +ºÏöPe㟙þ%À O +endstream endobj 502 0 obj <> endobj 503 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 504 0 obj <>stream +hÞÌVË®Û6Ýû+fI"MR|HË$MŠ-p‘í"ÈBW—¶ÕØ’!ɽ¸hûAýËΈ”_i‹( X´DÍãœ3‡V°Y,¿{«`3,\^` +¹„>,Ö‹«Åòµ«õBiøÁ‹*¼( ð¹RÃj¿EHƒ÷Võ"RÊV‹wìÇW¯ÁŠ^._>{w=W…(X·é«ý¾i7ð};†~]Õ¿_ý€©ò˜ª*‡L å,¬¾"*K±e {מYaÙšç +/s€W«…5%vá„u t^–%SHib?N ïæçبÐæê9â@0äÓCìó„B9õ^>4ÅÜòT—§ºp‘ûXÛOÏÈÙh©¨JÏ<Ï´–¥†)®XÁ3å½-Ù.ð^ßÅmÇzîpõ3÷…p,ÄûýÐðÌáÆ®%0§N%Á£µó„•Q¤2ˆ*ã/NøP bP8]o~~êú•Ûþ›¨ÿãm¹Á/Ò%”‰ü+9Ÿïvqñ¦ÙlÇÞ„!ô<Ës¡Øo\{ÔYx³ö“z½žÔëpRÏCìn‡7:ï®ø> endobj 506 0 obj <> endobj 507 0 obj <> endobj 508 0 obj <> endobj 509 0 obj <> endobj 510 0 obj <> endobj 511 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 512 0 obj <>stream +hÞÌXÛ’£FØG}E=ÂÚ0T…ßìöÌÆlø2Ëv8fö–h56Y Ëí?ò‹¿Ñ'ëH­¾ÌÆn„£#AUåíäÉÌæl³xñ¯o9Ûô‹L²<Ñ,Õ“ ÛW‹›ÅgËÅ‹Wœq¶¼YpÁüáÆušå2‰Á–ÛE‚Sâ$Å»åjÅI’H¶<.Þ_¼|ÅT¬ÙÕ‹«>boö!×±ºÍ¾ÜnëvÃ^·Cµ¿)WUøŸå¿/— (BzĘ̀ÁõL iÕ(ŒêT{á$“ç$2·Â¿,C™Æ2¸c"áa¤â<ÈÃHˆ¤qðEñtæ²ÿÏ©ãe&2‹5¹?qH2žÚüOd~Ú4öám½¹zö¶ê«}Ióà×PäÀYµŽÏ`œ ã 9s/q2nJ”GY–x8'dABڦ˟èÄ_pfÍèÐ,M(ûèàÈ&Èÿd-–çÀ5¤Ex6_ðÁé’ á·ù´JÜx° „ã±bœ™¯ßÌdªBÿ72•N©Šô²L¸H¤Æ3¸‘rIîH&Nx¡È1ïІ¡t”ªu×Ç1Q‰JSw‚g&ËQÜøwy[÷lu[î@DlÕµCY·=Èëô¦”ÅU4–È,°n+vJ"“.Ä¥iº+< \_õúOœ‚¹#12Þð=’ÂxÊÄŒý?H‹ Fé|¶~¢¾wÁ×@¢$$ZdæÁ¯uòoŽ™´orD¥1Ǫ(Š‰egOi53ÚOò¤sîÊ ØQä’8µxÂÌôClL'“Ô»> +ËÛª\#h?„‚(!ÈØÍ)?‡®€/»uÕÏŒO ²‹+ƒ´^HMßgॣõüží@¹x†í¹Ëå³Ì×Þ…•Õmw%Ù‹ZÔ=´ùn¨›z¸›‹¨hÁŠøôÍk{2¸uê7¢ÐwL_Ô×(°ÔÛÅôè¢_þ†:Ùn*ö*”P  ÌĹ”uÁÖºQÒ3Ÿg'æl~DÃI+dt×Ví€êh²å¡ô’¼ø æœÖÁ¾!Úl$öØ›Òñ¸TQ¨â¯i½q%÷ÓŸ*ÖÑf7j ËÅ™Eâ~ˆç3” 4û¼êëM˾½ë‡jÛ‡<Å$õ1|‚µŠÙÁÒ>#ÀÝ@bs¥¯&”¤ÓhÕÚ²iî,‘[ÔrMG¥gõ±nmn*äæ)ºl躆$ ÒäfV¶ké<æù=LOC£«lG[Õ4y‰¸§ Çd«Ø9„Ddýa·ë¬9(R8E“Ñ\ç?4ëä{´F +s§!ÎŽo³ëPpP +V6}}}z 9å·ò' +çÀrݳÊÔ^t¯AƒÌUàë½!¸1=ënœ ô.%‚Î ÚK +~¯ÅäŽK~Dœi2ílU¶qe8„죷î|ÜO¢Å•?˵:lmMQ¦¦@ϵý…ð»‡Áqíüz¬‰j±öÖcAçêVïNÂ}´|làí Ö5Ô¢áG…½Ähs¸Ã‰„ì*ÄÅúÐA•=k:$î-xƒ\;xÝLîú3¥¯çrìÓ­–u 4Z´¯«]Õ"±vCŒîÁU)JùXúÐþ=Ík+B~œ:ƒiŠèï +Œ'Æ€"ˆOë(¹C䎂+ 5i5·LóU7TŸ°º‘γ1šÍ#”.yRC1Œ$’¹i#"S)˜cÅ…¹ÆDÈr­ƒÙº³}–Ž…P—¤û´EP(Œ/а„’êõ2`7Ô[+—,V'ƒ:müü““÷òÀˆ¥t¸w‡!~¤÷+Œ?Zpi<È[¬EççÓ¡àrOÂ1öXwœ•Š”÷ôTGLj»É!´Úðk3ˆh‚ ŽaFßÙ–„³ÈQ,Z·ŽùàªI4צµ7{™†zt4%ÒíÑ-#¢ë’šfÚjÇÓø‰n¶ XãŸWùf"G˜®a?Óü}Ð[0Q—Íõ?6£7üÞìC¯1Óº½> endobj 514 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 515 0 obj <>stream +hÞÌY]oÛÈú¨_1$Öb8Ãï¼e¤pÑ͉¶h‘ô–F67´è%©ºî?ê¿ì¹sgH‘¢Ýh‹"@LKœ™ûqî¹çŽ¥¸]½úý')n»U‰,ÌEœ§" +E«WûÕ›Õ«÷RH±Ù¯¤!þá‡Ì³ ÈE…A¨Äæ~b— ŒñÙf»ZaFbó¸úìýñÝ{‘¹¸|uùÃâºõeä^sÛ–÷÷ÕáV\zÝîË­öÿºùŽŠø¨,P*kÈ4›·¼eL›‡´¯‡em³;nûª9ø›_Wï6«$.`}$©TT…âœ?Rd©û*ž|ÿÉýÈ| ÿï ãs!ðeœ;WÉ™‘9xˆ2võ§Òâ òž„ +¥¿N‚ÌËüµRa¡‚ØS¾ôB-³,)¼k<೶á×Èá§xú“ŸåAêiþ¼í*âÅæ@A4! +)*J¥……ÌÈ­”2ãŸ~$Ù ÞT ?g¿>÷ó_ûïìúüšI@”9…?´ S›sþ#g¾©k~øXÝÞõø¨;Ýúë( +¤÷7_eÀ™ÞÆ `ߢ7S½)*ÔÁw¬Ù<i–Nê6»zU’ïtߣ.;Qv¢:T}UÖÕ?|™à\í£=ÑßiñP¶°Gl˺¾)·Æ ›ŽŠ#ÆeÎ;¥=i£ ÒW÷šŸ±¡ýÚæü‹ë+݉æ°Õb§÷ÕA“!ÂòCÂü°æÓF‚`Z¸þøóõ»›¿¼}÷þêÃÕæê矈Z‘2ˆŠS#gdbÖ‹NJéÄc…ÜhQÖ]3˜A{IñÉÊíP°›0AÝñ¦Ó¿õ¡ûªÖÈG¹ë|ƒüçKÆFA‘2ÉÐÒ˜Fçh »ßM½˜ä”_CŽ'å¸à“î:¸³¾);˜ßì´X#ÞUgž9m0)C" »1gŠE.(ã[$Ä,çöýÏž~èE³ AŒn^B{Pó Ã"3cXþÇbØcV­# ²f´o—‹™Ü»0ç5íÄáŠ} yš]W™*å-`³îì«Ûcëg ×’rnnÉ4¼ñæúJÀ°®o‰µAÊ•Oœ½í_ÛôÙ®¸.‚$•;VŽy+ƒiâf苆ê³-äÚ%j¢ô ùýꀚ@IØ:4†¾—„°iAÀõ‚wæ“k½o¯P¾_¼/þÔ„ªx>V”þ®f)À¼Ð¸óšyvVî¨IÅXÊ}ƒ(—Än V¯åˆ +BC6œ7–«·ƒö|÷‡ÔZl™|në¦Ó–w +ðüö Yˆ Ò¼¦ÞMö"_H áÝ®ãmœt!ª½ˆ‘ã*b¹ ›94â“^¦0¸·4 ÌÔë,©%œãÞÏñÉѼZ÷ÕØg[²ã=“Qúûì1›Ëiø*¨è–;‰‡«1µ˜W^¨¨Ä+ïµYkÛ‰M¨‚–‘ÉB}o±z<0÷K¢/̪ŒkgJoûr q”†Õ¼·e_žÔøk°áÛÆà»X=t1±¼ÓˆkUQP]H't‡ DùÒ¹ª`Hí aêÔZú;Ã`“ºz¡¨>¢_**c±g¶[GI=â!Â3èÍ»{ž£_lqYëò@Ñ°½À”ÌR›µZ`…“ †Í&S‚‹‚øŒáèÜö,4ÐøE²Ð}lJ=á!¾xÍ=”õ?àBZ…y2c“„Z¡ŽƒŽŽÃÁ¦Ýh`…¦/P«ã§q ©nl¢fÔ@¶Ø+¸·{#Ñ¡‰î¹‰Rµ>Äñ#§ÄlÆ×êáA︙[˜èÎé}Hœ·uy&³i1ëg²nVxTEÆMZ +wTT7LÜOþÚ©Jârâé¿÷ r/ËQýýínb_$”R‹äÞÅa…ZB€‘,ÚEßj+ŽÁRÖe:Õ/±Õ/NòF¤-z Š$1þ­ð…'ê ߯~'œ¸¨ÅaO©O­¾/IÜ¢r0€ÄfJÅ +^rÉqܨ²ž¶5$¦Úh°:u#3Ü­&Ñ´ÀÔ\>× ´:q«Çá@CunbhÂW™·ªõZ\£›gªð40Gôï4¬síá%ey¢'úÀ‚?v‚Í›Lq;”ؼ9C–Qí»^š¬óÛ±jµx¢.zÍ‘÷F%åéRgwõeXËMlÜã;'z•×?‰ã[¿‹ï=t—¼ýió†¿oÜInÈ—jOZ sp†œ›)\ð,X¶”ž„"2ë›!˜¥Ð±î‰GèñÉ?¡‘ˆ>9§¶äD#ḪŠpžÉ7¶i|ìzÝI®€’b•z¶›Šy¸.»Qg þÒ+YrÚ4¿‰"En.±ýUyJ%8½ORZ0è=刮 0-q Ð5{ƒš¹•žòÈQÍN”Öï„üÞ–ñë±ëÁ Ç/[7Æ y)œåÃC]myÐCI§24ÊÆø2܇êUÌjCI˜Éä Hù$ך¹C]ª w3ââõã“5º6F? úb S{ÍòèK 3²»PC§ò@.ܶÐì5èÙñýþ¡äß{Ÿ6«nø· +³³1Qø€¨­·êVò ÏH+´ÑÝøÒ€²1 á¤C”ôA¯—ú¥ gÌ7ΉU”ûœâq$UNΡ!"ø8ò›µ,˜Õp-·Îï—¿*õ­ãrø “r:žÀ’=S­…NÞ2a´GöÕM¯_‹Év€<¯³ÏÞå±mõ¡¯Ÿü‚*èÂáÃÞî„‹ÚUšTC¸÷Õ Ã`Ѧ0o´8v¬UÊÚj×I}OñîÕ‚&ì“‚ìˆ#ZmíØi+b`c.Ä]}ÆÊâü®ä¾x£Á2åŽHS¸¹Sœ '”`¾” Õ”³ ¥ ²;¨°§i…zèê²Ç`H”5Ýï=±®fâÅ»Ëag"‘¢6©ŒAª,üíc.8¸Šœæµåll6.‡ô÷ È/™Pÿ#r¼Ÿ FÌvÞ%‘D[uàÈ_z“ågîi3eþä¶rƒ‚:Ñ1ƒ4äC×h +x3ÛíöŒ@¿‰w>ðåI²”1å®B™Ã§§ûÛŒËÚ…¸Óõƒm)1‡a(âüÇ7|™¹á‹¼ý²RöxשÐñ²_Í:þgj@H$ Ir‹f±÷£CÌ;Ÿ¤Šo®ýWü]e~é|ºÑqDX˜qþ¼©:…Æ×UΡç‘­u¤§æÝÝ R_Èoáí>6ð|-z×YÆë ˱”´Ž[f¿ ~õAÛ‹Ôº~‚}îœ}7+ZO“ UÉ3·zJNth„m³Å¾mîÉf~\.±±V¥ëú°ä„f ÑÄ#‘îTiÚ:÷SÚRÎ9–cL- ÉéS@}-]ÔH–GÉAŠ?…†íakxw¸‹Ã%&ækSz¬k¨´ê—WžvtHuV=guƒ.)s+gW§4ß7<EÅ’„súƈ nV~:©õw›Õ¿{›Œ +endstream endobj 516 0 obj <> endobj 517 0 obj <>/Border[0 0 0]/Rect[373.98 503.28 448.44 516.78]/Subtype/Link/Type/Annot>> endobj 518 0 obj <>/Border[0 0 0]/Rect[322.38 477.24 498.96 490.74]/Subtype/Link/Type/Annot>> endobj 519 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/XObject<>>> endobj 520 0 obj <>stream +hÞÌYÛ’Û¸}×Wà‘ÌŽ0@d¥òàõzo%^Û«ÊÄñi‚²ƒ8ÞpøÌ9cŒÓþ¤ä0ä >(ãNú—Qâ b€ÙóÕvë>|,7÷]Ë>mÑ„s¥¸þJž+nõ={´ìM =})‹ñÄ$£t{Ò8ödÎùo‹e¾o ÖÝŒRw]n ¶¬w9v’Ë lÁF»±ˆy¦µÂÓ½±ÔÛ‡ó\ìB‰×r[vOì±vvtðsËÊjÙ»¢êr7q»}b?ýŒÒí¢(W›ô Ï÷ŽT¤Þw,‡ÁŽÕÀ ËÓ ñÒíOá•=Žµ6—)Ù´²ød´- q<ÊD¼°zm°,óŠ=4õ²h[ƒàÉ1H 7vϪšmË]Ùå$X-ÙÎÎþT‡"§ÇF2l¦èâÛoxiÂJ\Â,`[DÁcbâ à!™vÇMáý%gïóPF€ÓšÕdò”ÖD#ÔôÛ/;ª¼Zpi®2‹–9 Ÿ’ž4MÑv4©*CÀ,‡c&8æÛŠmŠ +q1øšo)eÛcgâ1xé`Û…í;Çœ’øÒÙU17§„ %ÒÓ®¨VÅŠÕØÔÕÌ;%IÁÞÅp3 ÖO–Dx„¸‡VôáG3QÂó ^½û{¬Ì;x +œtë}õØe<Ï3 Ùj€»6Çê +¹@žäŒj¨‘1Kžׇ¡²UÑ–›Š­·59”‚R û²ÚWðÔÉAJr 3AZ`‹™=\ðN ˜-à£ä¿!‘'CY>’ ëÉ!ëš2¾.¼€4E¾*—5yÓ’˜8œ‘¢bt63ðg;òIJ™è¤p¢¹$¡\ Ë#|UÀV5këP­ÅS(2Ù³]HJ¹§)m‡ ¬~>HÁõv‡‚™„Ñ¡ÅØ–wÛbÍó#@¥ƒÓbðÙs5¯V'¶ç*åJ?×ɸm~ÁÛÉVÆ +UODéaÁ!îˆÊ*°2gHæLà²OYZ›ÀAeyŽˆÎ`%q_µ"ùWŒ<°,$؉QäLz‰}®aÑXn©DQz=…s¼RÎæÛ¶ >í˦ðà€×‘ÁÝK¥CÅê†øÒÕ–9ƒC6iÑ eFÏ3\AÌíùPYqÞ]ªál>œm½o–DØUA'Y7E’­;«Ö=ð(•½nDñ© ™EEÀ•Ž»\¥•Ácµ­‘«%GÔýá÷uSïØããc¨5ÕŽMfxßS§(œúfD½¹Ž¨í61Ñ k4ÃéDSÇ)cÌ5}&«3¹¥3‰=#°Rä‰pCµ+¥l  ÔëPÉá»­.ÕeNä°5ú<³}Fƒ2^V”i5kácÓGøŠµˆÊ¿(î#ñ"áb­µ2J(IÉ®:&C;Ç:#2žØ„˜À)KyFw14PLÌeí”ÂÆ*ò¸F?4%5>Š×`Ø3:GÖÊì\¾£ElK‘m­f+¨ÀÜÜS_äZ9{n(ÝQ/Ÿtëf„UpJ ºéKvtÒîPâN8â؃ÛJ6Jµ“Œwõ´ÍwèXBEj.@ŸÝïÁí«Xt"a'œ¡W¬¢nÊËýîÇ°9‘˜˜+8Ö4‡†m|ËyP +xEÝ$æ“W¶íE—·‚t¡ÈZ Š©¤ŸôzTïñÚµâ‰o÷®œú@ŒÅ‰øYi‡”}±¨u5Ê¢§¸2gJ¥O’¡>§ƒm"Ú²£°z H›š¾ñÛº~A£_°Ð@S„~Fc žu¹Ù#¼í}íð†R}í1»ëAÖÙ³mqY ®îʦ9à†-¼NÃÆYÕ k_¨æ6µ?¶ïÉ\ØsJœs[Q*òå=vsîiž(}‡O{’‚.^ì¡F1¼ ¥¶¡ +]sÛžžsosh–½ŠÉ—ÆïÚë†êÒCÓéÉè2H,à*"³†2ÉÃÐwúÖŸ9JÁÀØ»pžêXâ'„‡2ôBz A³b̺ywxš`,¸§¶fÝ–‚h\¶¥ÉÖm/ªŸp-™}ygb­x‚=œnBWoÇ*ìj2 +{Sã³ÁÝc8…æ)I8.ÔtiUN#?& ¢bÀ?ÄqãØ]È!ìYêç ãšIÜÿΗ¢bfíS!1^é¼B‰1%³µUS±v¯vʇþè +’¤Ÿ7?™hOÿ?£óiæí!jQoÛo(é¢Æ–»ÙõÛdßÕðèË„Câs)nlR ‹#HOƒA+/róœ +‡$aD8LD]×€2–‡ÃÏsè¸ióaÞoFŒÈo}씋…zÉXtk—bAc—ÆzDà´F§ƒÿ•¼Z~V^ÈÈ|ݼðŽó"~ÉX$æb(ìÐ$ BEG€ŽÑĪKñë‡&Ç ø¬dpÓ¾N.¹äà×/ ¿Ws,¤žçUB3E•J {¯ö´ãç´ö…ÄOW¿ñ¹°j…Ô†›çJ…›¦èæ(Gy™”8 +Õ‰±S. ÉË׉逸±‹ñµbÈ…b1Ñ  È3Õâ×â§}¥€9åb^\ ¦ãa‡.†Ã‹Ô!?ÎUj:‡1‰3™Â¡uÊUÂtLÿOÔ‰8*ýèÜ ÿfÌcxÌ{;¨Ó—‚zúï£î‰)“1ÙˆÄɃwö&©¸FO&é2ð#ý–P+ŽËƒíǃ7¶÷§G÷(˜±ñSÇàæ[A7* îæ»±[7–ââMÚŽŽ·Rn«›7þo¨‡.cš9nìr&»†á¢´úFdš>£Áiþ­ž# Avwʾ,…„‰i/âJÏ8tëöaö_#Íé +endstream endobj 521 0 obj <>stream +hÞb``ø £`Œ@`Ûëü +endstream endobj 522 0 obj <>stream +hÞì–Û +ƒ0Dûÿ]¨ÚD÷’QÕ}QÇÌÎ^Ð쉻 Ñ¿ÀH´Â¯OÕÁëj¥]Ì/Q-Í•Eói5×xº¤Y#e [o=¿g +yÛ Ïðg‡ð„/ùNcg>§ë'„ ù…§¿Éaˆ$fÚŽˆ'!ô‡Ë—ï&:žÙ*ÿ9æ¿;Q|¸¾õÊ«‚/—ò‹¡§ñI#ÏÊßàÕþéVe6F1ÑÛÒ:—ƒþ=•üUÿ'×Ï&——A7Û +endstream endobj 523 0 obj <>stream +hÞì–Q„ D›¹ÿ¡MAmÝí05±?D:¯Ð*ÀgŸ=ËŒväd†[yÓòOã±2_Âx¤eð@Láãywr?êY|0Oã{‚ÇwH>’ïÁa‘i÷G¿ÿjÿ‘ûŸÞ¿ÕÿG6€A `д-À•ë‹ù‹õÏÿÞ÷Ë{Þbÿ{©-Y–LפÛdûBX¢©ž¢¬“nÈòÎGñó^I¾-í7¾=¯_­‘›¬®îÚ9ñ ÿ?ÆÅÀû0 0ù¸Å +endstream endobj 524 0 obj <>stream +hÞì–ÁÄ D_üÿÞnbºYKE.Ρ—f€míà \éJîOŸ …úUíü²€±þI! +@§ðÉóQø—y·§ü ú·ð¥þé-‰íÏòüÙùÝ|‰3ýˆ|'ô"ßý›k€÷4$æØ^.YÿÝ“\î¼ýçi‘g ÌêpþX¿åû5h¯üL|RgŽÁŃ¥;x©Âc¢cüøÖÛƒî=*?ñý¸ƒ¯¼¿håïσ4> ÍÉ +endstream endobj 525 0 obj <>stream +hÞì–Ñ EOîÿ´ÌŽhÝy@ãšl$¥§-…’¯8?Û,xa\â)Ï3l\sDzvOÊC†›zsÕ‡á7*+úüëþÓý¯ï}ÿMƒâð>stream +hÞì–É! CŸòÿÝEtञU‡90rˆˆØØø;p†Iwpÿ,âs€‹ËÇJýÿÉbÀOlñ²†ËŸ#ø†þViá×ø‹ýKÉðìIŒÏÅ ¹2÷‰~„Âá·äÆùÇ4”ÿóÞÁªßSäOü'ßÿ²å(‹C‰ŠC®´ºöó×v~jZ´Ÿò_O1•Œ½vŒ®ä,—ß/oÓZ¿»e_ýxYÜŽ'Œí1°ùÅ숵OÐ+N r[Ñ +endstream endobj 527 0 obj <>stream +hÞì–ဠ„ïÿÐý‘%z5èV‹-Ûì>TRõ·ße’þÔUñGB!Sç±´‡Ú Ä)¨kùYžä'}–r~ ò¼G.ðŽYÁ÷Pêü +;¿dý!ëYÉÿ‡(Å‹R¼(Å‹R¼¨.õOÇOçŸ^ÿÜ_>pÿ`ëßÛÌâ³Ök[ì{'Ã@ÿj—`~ÖÄyëìý·¹x?ÿ±:ïS¶§Êf!‡ù#ίßòt{߸ó7ÓÍ +endstream endobj 528 0 obj <>stream +hÞì–у Eoîÿô2  [(§.>ШĖ{ÐZû©&­Å~ô©.Çò#½›!½ŽÆåzu¶ÐHÿñ¶à¹ë©™Ñ÷‡Uè± þ:¾ô-ÿ5Gí¦§¬Ÿ5«-Û”ÊXD?í è™d@f™d@f€;LJïó¿?¬?XÿpþÁùYòÖ¿µß¼ S¿@f€d} 3€Ìùú@lúݳØû¿í_¶m›µ—Á¼Ï +endstream endobj 529 0 obj <>stream +hÞì”[ƒ@ G¹ÿ¡+U¥ÚÍ‘ªõ7“M쳩ÿM<‹šø¥qÄÉUÿε¿ÜÍÖ?JØ¿H­ƒ=_3ô+jŒp§É HXýnáBêñÕÄ{ÃÏq; +ÛÅI Ác +ÿ"ÊÃ}*ñ.Žýã¯ã›#>…'sAC>áûk}I]ËÁülÿÌ>¹ÿWðëéôOÉGå·‡Ðq‹Üûkâe‰ÏËó‹!È<'`SS·ë!ÀÒ +× +endstream endobj 530 0 obj <> endobj 531 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 532 0 obj <>stream +hÞÌTËnÔ0Ýç+î2V×ØNX@iQ ªØ £Ï4(“TžÄ'ñ—Ük'i;H¨ªâ‰oÎ=ç܇„]vúúFÂîY NTPV´€à³mö²ÉN/$Hh¶™T ð²r¼®ÀiÁ…‚fŸ Dá¢ÄwÍ:+¸BCó5û˜¿=¿Ã+8;=;9«ÀdÅ«|Ø…Õ~ßö;¸ìG¶«µgŸš7˜J§TŽ+e \ZÍ«Y¸ Ü? Ãæ~=¶CÏšÏÙy“™²Fö– \麮—}uXÅïQ Wå“{ÔOòu¼D}‹ú:j®/Ëj–Jt¤#:xÐ.I}·bºä:ÿJHVîrÇ +¥D­x™+&ñ¿Î™:¿Â¾ C +#!À,ž>0Wq›ûô>ZVX z21Z$È¥¬#[ˆF5Ñ BïÌp“ –çÑÏŸ=ÿ0ìß þÇa±ÚòŠìS„ + ËT€¿’óE×¥Ãu»»pí>°Bk.ó/L9ì3¿á‘öþÔ½NÅîµ8¡¿^ ´Ò>\Mã:ÏÖûaôÏ€¦jGÍ…|¬–!ŸZ®¹õÐ ëM#ìZäg¸Ê}íÆxÇ0¡Ê¿2©è‚aç!Ù)5ŸÍŒrnç*aw~;Âz4I¨½÷†mD þpßmŸ`wæÌÂQÊ(j‡vô0ÄÚ“6œ/õ(¾\4¥ø»¡÷ý«-®§˜¾‰ö§µä–/çùSá}Ñ•­¸U¿0ŒÉU˜éÚê˜.LÌîauw×µXa¸ÉÅT2U7BiæràÖ[*×㓲InÊcÓ!6êø¸n“«‘:-¬v73•êÈYLÕ.¬oÛnkßu> endobj 534 0 obj <> endobj 535 0 obj <> endobj 536 0 obj <> endobj 537 0 obj <> endobj 538 0 obj <> endobj 539 0 obj <> endobj 540 0 obj <> endobj 541 0 obj <> endobj 542 0 obj <> endobj 543 0 obj <> endobj 544 0 obj <> endobj 545 0 obj <> endobj 546 0 obj <> endobj 547 0 obj <> endobj 548 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 549 0 obj <>stream +hÞÌXÛnã6úè¯à£ØÂ\‘)òqëM[¤@šx·(6}PÚQ+_*É{éõ¥ßØŠºÄN츻Š–"‘3sær†#N£¯¯9YT#-I’MdLJ7š¾ŸŽ^œsÂÉt>â‚ÄðnRf IeÌbA¦ËQ RXœÀ³él4fqK2ý8z]œÅ ™¼˜|÷¹,)7ÌDëE™-—ùjAÞ¬jW㙣¿NMG`Ú!µ7ƒ›²1Ãz+,U‰i•£Nž¢v¸‘i£ünjʄÉè31§cÅÒ(¥c!b+X Ê#IÇR3ƒîCbÀ“&_EçË¢hn®òÅ}]‘+W¹’Ž¥d<ú@E +yæîØN§Â§±†šÙ+'HqLd¸(a±Ž´ŽÛtŽAŒÖCšNC‰€Ìœ PÄX}(xÜÈÏß’,O!¯¡ðPÛîýxlÑB´ÛÚ²ŠÃð Å‚ãLŽ‹üÛŸ:•5ÿF§2ñ:•M× .‰÷ \и8 $Ãbnm[[¼ç—+—ݹ’\»z»!ÙêŽLÖ«º¤ zM™ +rµÞÖùÊU><“ô„†%IÐãùKµL&”ÃôÞ‘ èYUA@,k¢‡W$cÔØ°‹Þ߸x@œ‰@%;º’V— +¨ÈE~[Òx'ƒƒÜJ€ÃÎ>Íî³Õ‘s*¼h:Â×HfK¸Â%«ÉMtáQrÁ´njâ! $(9;¿¡àtï» ¥>Ð1üæw®"•£²y$¸8 +?h”Š2¼-HœJê5ÉWygEþ'å~qS™cn™H$oé :¦å²Êß‚« “v`tÂ-B%/ŠõmVo’F;¼8Bb–è[*bx\ ]÷àoˆe\ªž Dë n¹Yéȶrwä–rÍDô([D¤7’* v µàÀàx®UgrËþÂ4¢1qæT +ØÍ%íEÎFù±v^D¬7u¾^U;Jo.Î&ü£g_*}öu¢»ƒꀦ» Ùã(4iÌIÙׯMkZÚ%òô½(_ÕoWny´¥ø 44ÉŠâ6›!“ñè÷ª=Txy)æ'¶œD?^`óÓíãN½ïiv~ªvË£.€¶ò|üÍâ¾yðرû€J<3M‡ÒŽÖ›>†#‘'ei¿¾'’÷Î"¯`Ž¹pse¦”CØÒèóÆ ã–pLZÝE‰q‹%¾ßQõåPŠOÊÚn}T â³äÞaÖ7žô{Òõž‚.×J +½PŒ¾>~µ#“‹ö$¸ï8tK¥Gœ"lŠâ¹nîØÉh8|NÖË¥[Õ“û! ‹Ó/ÇÃذùßïÉ?NÅGA¦xÒ< ä`Çn¢Ê6ב³0Í·ºâ˜ŒèJ¤Â§=\„WYkÍci¯,¾ßSýð+@NÂ?رsbø×÷ù¼žd•„8±˜Á¡!Dût?Ú“~´¶Í1„â„‹ûnÐâÚo³BÀXM Ôå¡Ä…ÀJ1{°µÅ«S³u°£Ÿºl}Gáô©#Wâ)ïÕ§†b;df¤\LѬÔâg9¾ßÓ÷Åñ㆟˜¡ÃýÈ}Ê–{úr BÈLu„|¤'Ÿ=©G‘Ù€¬ýæþc'˜+›9Õ>á­D<˜é‚[ÇB²4ÅÚònÊä½79{è7 ÕÕÃ(zß{Ç7›TøÅtkx#´n¢ú@<øõøîÓo:€Áh˜q6'¿P.±öÖ[²ôß5¶8ºW5™ea>æ£Ã—ŠGû.ã™7ÿWtŒßç‚B˜Š›ÇeUwŸáþ`…ë r +endstream endobj 550 0 obj <> endobj 551 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[276.06 532.26 533.52 545.76]/Subtype/Link/Type/Annot>> endobj 552 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 553 0 obj <>stream +hÞÌXÍŽÛ6¾û)x$‘ɤ=l·I‘¢‚¬Ñ¢hz`lÙ«Æk¹’Üìö5Ú—è[v†¤dÙ^oshb[–Èáü|ß7£•d={ùõ­$ënf4±Â‘Ü¢i«Ùjöå|öòµ$’ÌW3©ˆ€?ø’ÎòÒ«ŠÌïg¬p‘ýùb–q!„&óO³Ÿè·¯^“‚;róòæÅ ò¶eÒqG›uëïïëíš¼ÙöU»ò‹Šý<ÿŽÒñ(îLA2É%|Í¿Š-Ú† eÑt°ü®ò˪%·U¿ß¿]’›f۷͆¼kö}½­:6ÿeöj>+ò"3¼0„+]–%á¹"1Å­žCð\åGÏ!7˜BìcfÊ’ÀÃÜ i@_å૶1 ßy¦s®é#QB²¬à–Z–)%JÅsª˜¤9ˤµEIßÂÜk›¸l¹_ô„¸úžYÇ ­âý¶«Yf`a³Å‡ô L™RÆbÎÐ —ÜÀ"¡±‚}°$%ã÷ÉÏKߟ¹ì¿±ú?^ +  w˜~‘ + L*€Ìcþ•3¯7›xñ®^ßõ° «Z–iÍ%ý) 8«–<8ØOèµ* ×{Ÿ!¶\Á"k&¼€Æ8DàâHª‘©’번–æKSÄ7¼íï*²€‹~Ád þN¬ë®o™…_žÁG_’ÛÄ[²bZÁÍ&D!!$79CÀº…šŽh¶h2“Š+ +¼éÈ#zòoµÄïv›záÃaûBæðœ'õIùÈ@¤€‹È¦RŽ4É~>&©`a§Ið[& ì#ñËeø éFéçûmÎM­Ah fcRÚê×}ÝVKÒ7d×ÆÅ‚—zrt1]Ä£«o«˜Îò-ØñK_, ÊèªÞT ,g‰0 ¡žÈCþ|N{„BÜTÄMš“6E£›jÕ¢°¿§ïÙ‘ù‚—åaeD@ŠrÈf¦ë=²ÁÒþB 2…™I g“LMÚŒM}ëº#•_Ü eP¤ÞÙ"uθŠa…‚”\ª3B eQ&´Æ¦…|èÂ>ÀdÛì"nsZuÅž65ßW‰BbB®‚~ ¨†bF2Urš©Sê˜BßUÝžJÀ~rˆ„𺾠nQLbôKŠ)\°FC<]×,jðpI–¾÷˜4jA9ý„V A­P¼ôðçÂœÞ3Ôߟf p´þP‚L§Õt~À3dŠÛ Ë!…)àd~7M)$aá·áÞÀJ7[DsÉùˬ8<ØQbjȆ’š%ýƒÐ†¦Rhˆ¹ß*+Š³A)?tPŒÀS þ4^3-á4 ‡UxùÀõ÷» ¸Ò¬ÈõÛ7#Ãö_‰ ½‚0Ð[n‹³ì ó:ívÕvY?`Q èO×@Pøº"LƸh +8iOÓ3(1©?B‚n×€~òê!:Š W@m)PþÿúŸÂffHó—uD*˜ ÝÐÅNèÂLWêÔ®Ì8b^¦£æA ÇŽŠvÌ‘!7zAŸmìSšn6 ¶ +K?!ï&…?ÇÕ 9:Ÿ£HB3ô ìKÓAA}½ñ˜’tíIƒPNÄ©žÒ®0dÌ1’gA®ßlëþrüºÌqÚ¥èé„wÜ\ûMý;Æ 1˜ai~õ8Õ( uFN¡ïðÀ‡Çƒ`Xë|#ZcBàîCrD»(vB)V(^v ”üŒ¸¦Gº ý¦Ù“{&5Ýcº' 0ˆÍ ‘äCÕ‘PH™Q?Ƕ—Ê”çÜ5î}ð(±âA~’)“ +qp^ê û `èÚìŽU:LèG”˜”6Ü{ŽÆ«ýv×Åd!¾&q×ñbÚúäˆt—¸»êÃÛ‹’VG°wø¾£ÇŽ,¶çsHÚˆ†:y!Œ¹º}Üöþáh®€&¾ŸáÂÀ«U‚¡ +àE$ôfC#ˆÃÌñO,PX`UD<¸­ºRt™ +ª>hÁ0H•y›†hq0¾z  ú‰À`ÔEûQ60övi²40Y6›e,ð!?êWj<)ãÄÞUÜÛsxI3ô¦i@ÉÊrÔÄQ¤ƒÃ ;’wˆԨÜS`W§ÿ-8¢ +ƒ;|\`ô>w*z—H3y{ ÄÙ(¬'~ˆÂ=…¯Ï‚–Dè|DÄp%d¼§ñ]k^Øþóà«´¦WØЋÉD&HB/û[€´ï@? +endstream endobj 554 0 obj <> endobj 555 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 556 0 obj <>stream +hÞÌWÛnÛF}×WÌ#ٔ$ѧÄq)`ØJ"éMQkŠTÉUçú—Ù EÉqa -P0)^æræÌ™!‡ÛÅËw×nÇ…J ‹sHsI C½X/^//ßrà°\/¸€ÿðÀóŒ9dIÌbËí"F+,NñÚ²ZD,Žã–÷‹Áûó· Yg/Ï^¼€Ë!ä9˃þv(·Û¦»…‹N×ú¬êð÷åÏè*±®X®$Dœq<,ßX‹ÙÆ‘‘icùª.Wõ×µÞï ìVpÖwzè[¸ê÷ºéê1\þ±8_.”`™ÂÜ“ +˜HŠ¢–æqœÚ,Mâæ&æÎDzt¡¡sSŸ€) àÍ4÷(P¨Ü‡šd…_Ê0IY<€ˆyI–Y ‚¥y Èg™,‚K<ÁkCo[í+ ¡Â³_Ã,g*¨íõalÂHáƒ}GøôbBL•dFî Q…’É€bÈÀ…éxòó©ã3ûo¬þ3HË þØ V®<µøW|¾j[{rÕÜnôˆM0ÖC% ãÁçPdȳzÅL@H}ÇÞLö*lÞèk|PejÖÓÑ”El3x…œ ín÷ÛºÓ£ëZe !…oYRób0êrÐ×õ86}Gý859gEaº<S“s˜£ìë¾oë²cp±†f„®ï¢¯!OY€ÿ°MÒ?Âe„’/‚ÞÜÀöÊm(ð×zSîF«3$B¹´u2nM}‚š®ÑMÙ6_KÑâOmàÑM9Ö+Øö«ú' ,"gãD¤¤À\H›@ž‡ûsj¾M$ë}W÷MkB+ù,¯£¹“ÑC £¥ÓÅGÂ@dÑÞƒ=–tõ3 ‡UoÝ–óyÞÂÝî0ó›¦môƒIÖG}bˆ’°•„-ÏðxFøŸ¼Ô!N|1ÊJ·¶!"‘øs¯JbbSPŽ` !=!’ÄEê´õz¸À’| +>…GÔQ³|“ eŒBU¶-s†=ÃW†äæ y.UÊ”"ž;ôA‘Ï3äÜpÌÕyHÒõí4ç ‚™pZUãËÈÀ0 å Ç"X•º4ƒªj{¼f‹R0»´?Sg¯1hÖ¶ŒdS÷àÚÎÖ2^<ªêI6!d²8ÛÒÛIhøI’«Ø‰ã]³ÛÕ+Ëg“VEJQS~tÕDOF±Up¶Íô];]DdCØV}WÃM(¨±RÜ‚Ò–Á}’äìO,;„|häDè<>8…GFþ$¥"÷R”0q²£X§×.¿ñ»`…²;ÐÚ c–xâÚ/ĆÒÐÖ¡ +敳 ?MçÃQ©§³œºç]­?àxxƒzšÏI.ÈŒ§´¯ŽàžÑšZ¥=h\ pÎLlÅu^¢ê1 +ÞoV¨–H ËðäDn¥Wye=” –hƒVºÁ®t®t¤á¥#ÑÁ~ê ß•îëSúãÔOÄ|Vùæ›ùg‡ŠÏÙŸdßußãÒÏñ]ßÐÞ¦ŽaÇMSmà!ÄN΂~Ä׈±ù$RÁD>9uļ~¢B¹QNŸ•ôP1ø '°ÂMUegœõT›²»uÐ ’Þ2v…ôur2¤R*— +¼\'œ4ñ8{îg„¹fÌ44fd°­q,˜³†*¤7†Ç)ãnšÌJsÒ”ÏÈ}Ž?÷ãÐH̱#dgñ´£wÏù0w…_™b;SÛv´3—Á¹a?N_Úºp¢"|‡§nÜ®ˆ "¸›19Ü @E×-~"]rúŠ²r;«¾J àKò[‚ÛˆÖõ¦VPvQcÇÚe_ÿ.é¨ɉrÙnCå²HÃòxY—ÏÒ2‘Š™–‰Éöp9`Û}@Î"¿ƒ=bJºP¯ÎPo,àYp7I  Í1'¸¶3©0g…­÷¥]nRRa;«ƒuEåt_–à÷6ZN&[4mzC}6àøêµéU7Øö$6¥ý9ÔÙ¶öXר#];w£öÑâWâèw=RÑuÓÖ¶µãM+Yž}gñ¹TŠÿ¹oVÐRñ§Bí§âàåênü¼½xþ5,Íæb¼>rÏ”ŒÝÂç&7~×ü-Àâ½ø +endstream endobj 557 0 obj <> endobj 558 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 325.26 224.28 338.76]/Subtype/Link/Type/Annot>> endobj 559 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 560 0 obj <>stream +hÞÌXÝŽœÈ¾ï§¨Ëb×]¦ +( ¹r¼öj"DZìväÈE ]=CÜ  3žÇ°åò–ùNUA=£ìE"E# 4TÕùý¾s’Ý®žÿüA²Ûn¥#–†‹3Í¢µfµ[ýf³zþZ2É6»•T,Ä.2KEž±4 +E¨Øæ° +qŠc<Û”«µÃ0b›ûÕgþæÕk–ˆŒ½|þòÇÙ»6™ÈxsÛ‡CUß²«º7í®(Mð§Ío!*r¢D¦¶–Bâ²ùɘÒÙ¸Q)mO~oŠ­iÙÓŸŽ¬¨·ìeS÷m³gï›S_Õ¦ 6Y½Ú¬’8‡eZ$š åyÎDœ…aìlÔJ¤zxã…ŠgïárMd_ÂöÑ3¹õGÎð2Î7®rÐ5J~WQ,"þÀT(ƒu"Ržk¥Â\‰˜«@r¬eš&9‡{Se³W½—ÀŽÍÛöËu‹tšÒ”B%~ôöf×ô]#dÏì@Ûãt@ûíÞxÈCëþáhÊjW™Žõw†wÕÞ°¾jÅV0:šD‘s¤=BŽÌâθÚÙÍvã±h;v_õw´5R&“­ñ¸Uú(Ô 3mÛ´»æý]ѳª d p=sqÌD˜AT>vÜ^âßMQ2Çâ/ôíO-@¬ƒuŒ‹;a jL"Çaé¥R[#ʦÞV}—ÍÖºƒtÁ³²è ëNeiºî:°þ@jMý¡—&ö¤gØ[AÇ{Ћöh¡¥ÛŽ‚=/;µS(-yÇ +†¼Ixû“aÍŽy:N\lÓ³G]„³Ð íÞqáû´ZG0>"¡4Î?<Ô}ñÕ-÷Br‘kG¨tƒ$Jƒ‘-/> +%¯êžíM ¹KÁkî€'B$±_HL U^_½yõs´Áq2Ä5qàüÌ)…@¥üÙÜæµ_>9t¢"×õ¬„wEûÃà.=¸K)•?"ˆÄìÍ[º³è·=.˜«>vdxûSÑK‘™ˆUš^ˆÜ$«/æ’”ÐaO2ƒ»{¤ÒSiËs"…Ëþä(åÒýöt0uß͵A!RC픡aÝ<# ‘çÖ½±L.ÓZ-˜¢`Ǧ¢fh¢¨Y±o-,Ôì>¿‘¬9šÚ2D Q"¹`ˆsFŽ +?Ù'å‚©÷û&€ÝüÞ‘”¥+ÛD”N„&ƒÖ™Û|H‰BÛ#$Hƒš ÿ¬©úM1ƒ8¯ðl¡ *=“Å×Ü·­º/ŽêÚs¬Žf˺lyîÈËò‰=¹¯øÎâÖE‰C˜¿žªõ½ö5:·?šÓ‹4H½?&ÌóYªº+â7؃¨ÏÄ7^ïL?˜†nEM›¹3¹Fî¾±ÞË­0k×6øȹžÆvlg»«j(B^Îø™ý +.Rø¿€ÉZ’³ìŒóø\ÙÈÇoÍ'U=ÑŒ~ž%êÇ·WŸl´ê‚TKùÁ°SWÕƒ£SunÎÁÖ&~{ÎŒ²9÷¦÷1·ÉŠ4[Ö€iÖ·f_ô•FFÑÈ8ÙÖ9íPUPkÄÂ% +]$Ù·D¬óÈdóŸa+gþó¢ÂÓ¬8Zæ|HÙPè$yÌéëôëUÓÒ¢.î‚HÙßðªâ®î*~Àk+nVèœò$é»ì Æn†˜ÕÒêÌRT½]e"ÇaVXÕÀv5‘Þ©å5õþÙäÖ”ì(ñ¬¤Ž>¦¶²§ôŽyªsrµ“K“ ]jå*äwvvË`™Lµ§J̺"B®>Ç#Þœ,KÜRûGcC@?¨Ê¬¦:ñ“}|¸-¡5,¨4¢¨Ì)» ½&ÕÁV•yã;¤§ôÐq–$Î’„,A™dÿÌ#HUÔ·æ0A=ÕÔR¡ +v08Õ¥eôL‘‹HŒkd¼Jfœ_ºl,â{ÖWC#BµC–R+^çhyØ}Š"ß4ÖCc`ÉòëÅ@nZûã#·¯h +@^DõžJ¹iÈ„"aQ’9” NZP\J¼pöŒã›OŸ>-è{RAT2hå=ˆ,T‰ë\¤ \IŸ¾Q]Êzùq󴬩ÚWLû½fÙ—†YrqêûßÜ\½ýyv2øÿ‘ÙPk=af—Ü%YNI–s—M¹}êA@ëlÝôëÎS\~ñ%jüº3dsï¿ÕP ã*þ>°8B¾xçž\±þÞÝU¥ùÕÜî‹ÉGf@c<2²Š/sÀ””aî5ÿF±Öüû3ö ‘ø~üúüU(q2ôÿ…û½ÏÇ3§yŸ>šwuŸ9jœ›IwôI,Y`æ4×ÙG#αZƒMâéX2él¶smh›E†.¾Ù_Dœ^Æû¡^„5\ÃÇ€¾ØgŽ‘’ð')îïªòÎÒtméŽdܘ3Âcýǹl'Õ¶ÙžJ<µüÔ—ø)‚†}v:¢-²˜Ol¯ +ˆÑ‡þÁiÂ>Ö|¸œãP—‘Àp8µÊÖ¶)mŸï[!x›@³ög-iù-•šŽ­Y[ö<· O'è-_Ž#óò~(•ÄZ7f$.ú å:œ 0ï¼W’ +endstream endobj 561 0 obj <> endobj 562 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 563 0 obj <>stream +hÞÌWÛnÜ6|߯ Ð2©h‘”D }J¸h›½-PØ}PvµkÕkÉÕ%­?©Ù9$¥¬ì8 z +ÖeÉÃÙ3s(Åö«“o.Û÷«Ì0ç,É3fbÖU«ÝêëõêäL1ÅÖ»•Ò,Æ.*·²È™5±Œ5[ß®bD‘q‚wëÍ*’q¶þ}uÉ_¿:c©ÌÙéÉéóçìM'T.sÞî»òö¶nöìÛf¨º]¹©Ä/ëï°”ñKÉ@ŒÖ$2ÒÔí2â'­cvŽÆáA'¿F/?"ËOw:0¿ [¤·ÎùpY#ØÖŸ­ÔöX_ö|wÂ@‚¼ÃT?&ÔO ‹`wíˆãc_ïZÑ æ žÒ/È#H¢ÒxZ1ÊÂ…®³õ]N¢™zäB iË G©ŸÂÏÞ–2ÜœßôËsó‚9•¤hå~…(Ô¿Ã6™Nçß È6çUufÐúÈÓæÐde䎲Ţ §S'´DN¦O¡U8òúó7&—+»Š5íÀzÏU!Õ‚«‰òÐeÉ~FÆqœ·#VnHáž:¬'µßP.)¥N™ûñ¯n¼&ȵö_vY®¼Ø$yµ;A­[¬pæ>ʦ0y¸µZ„‹ŒÅ·˜»q ǨXè +#yGζõ¨åt&xÐ ¢ F× +ªKÆëý5ZÎ øEþ@~#!€Ôð7'°m ¨#4i(áýUHŸ–£Õºê·±ÆVˆÚvŠï”rÌŸkêx-3}…ü†ºmЭÊn:2¡(,ŸŸ 0—]ã +endstream endobj 564 0 obj <> endobj 565 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 566 0 obj <>stream +hÞÌWÛrÛ6}×Wì#T0nÉÇÔq2éô’±Ïtì> "$±–H•¤œæ“ú—]$u±»3íL'3L‹svÏ®,'gï¯,Û‰Qò tf@qhÜd1ù~69{'@Àl18þÑ¥,Ï Uœq ³Í„# +ãŸÍæ“)ãœ+˜}™Ü/ÞAÂ28?;ý>6Td,#õ²±›MY-áCÕ¹façŽþ6ûRñ(–™¦‚ ü˜½ˆ©ÇÆ…L=t@¾t¶p \¹n·[p^W]S¯á²ÞueåZ:û}r1›$:Ç›–`RåyLgœëxG#Yj†ïñòLê£ï‘O +_âÝGfòÀGø¥Î|¬bˆU¥‘†Ÿ,Uš)ò$tš°”¤t*%Ï%ÓDRA2:išää#.ðYSÇmÅnÞ5¸º¦iÆ qñyÓ–tjpc]y‚}ÜS&¥I=g>Œ¬ËäÃø‹&,!>†"(ŒŸ'>õùÂmÿ êÿx[@–yúy/7½BGþ•3߬×qqY.W]‹Uк†N•b‚ÜS™bž¹‚…€0÷ûìMeÈ^ƒÕûÂÆ&5E½¯<ªîêkÕÙ?}Y½KâÛ9ËM,¿ð‰aJ{_­Ú¿|Cîë²€5Åü]4X¯—nY¶XúŸª]ë +||n×ëÏv~×Þ†­·´7„!Då 'DVþa˜É¸èŠ\ßu<àjURÜIݹmOÜåè¾I–÷÷ÝßuÚãyÉ횊IýÒB·¢SÌ;ØÚ¸j{èêp@æ}„†%‡êKu°Û¶«rÑÞ*»q-” Dtà­ÌS*$3b DŒ`Q®”-Ìñ"PV­«Ú²+QiVê|laè&Löi8²6•‚¡M“'>úr54ùçÔ¼ò÷òUØÕÁ0–”çXõÍ«(F1MŠ¡Jì²]¹ñÊû cÉE½øä6#­O¦_ÆòCfÅÀAßâÃüq|d<‹/ðã#Þ?qD~U>àç½A3 5B£Ó3¸ H0‰^÷u`N±„?˜Ÿôèl=÷ŠL‚§¨Æ%˜•ÏSMöÔKHÇ“äò‹àT$ê_ÂÜo +°Ír·qUÇâ5[Š8£-½ÜŒÎjÏ™ÑÀì-‰=™qt ?q?¤½-¾6¾d3ƒÐZ¦cO†ÆR ãÒÙS ÏôÊh}G—=r-%ö–ÕþÁ™’D¢ÚãPp¢“ûüY<ðŘ~j”£2É LÖÛáÖÍËEéN=‘ã'…ŸN[ô’kŠªbý`+Èz÷­n,c?üÞÒ-nᇜ„ØݺƒP ¶Aü¯ñ§AoµóO6Ÿ1u«#!µÏiÜ„1™±> endobj 568 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 569 0 obj <>stream +hÞÌVÛnäD}Ÿ¯(FBrgãN_|U”‡%—UЫÄðÂð`2í‰ÁcÚž$€ö'òü%UíKf¢òɃ{ºË§ëœª:3V³£×Ví,Ò‹‚$-ÀšY1û*›]H3©@à?>dó4X .dë™@.ÜËnf>BhÈîg?zÏ/ ä œ¾{Ÿ,“ O¼feóõº¬WpYwÆùa?e_ãUº¿Š'Q¾äÙY6.TLÐùÊäKcáÚtÛ äõN›º³MWͶ+kÓ²ì—Ùy6‹#äñ0®tš¦ÀƒDˆ g鈻CäÎU°wˆÒP€v‡H}&ur¤€‡A2ª@©Ê1U÷*|“3píýJHæ‡<öbæ+%RÅO1é¥Ì—q¦Þ'\àžmú°åö¦áê'<òL¿oÛ’ù65éëÔ¤˜RQL’QÉÕˆÒø“…<ô(‡zP˜žÏ>¾ö|c؃ú?sÐOH~1@DCdÐà_¹ó}Uõ‹«ruÛµ8­±ÌךKûÌ,¹K[èÞX¹îpxÿf®10Š£™ö'¢gð'XcÛ­¶kSwí0µQ„ ¨Æ‘%7Ðô¢wg°Y›šFqº2àaö: ýñ0þºùÔ4þz´Ùgr½17eQšº[H<@I ëg§¢fRà‡-óiòÖ?£O¸l1}©û«ý½E=n×@Þ¶åª\4MQV†É‰óò¨&#tò¹*âPG ¥¹v¸zG¾ó‡|½©X@ƒÜî[Þ^Â(ªà«ÑO†AÎ0­‚iIVJ~ ¼ªj˜ ðó=¹ªa*Åõy‰òèJííAŠ(¯Üp‚ >:|jZ9yø È=)QÖeWæUù;É =㤱ÎYH­7 +ötRžF½?Ò‚(!×Á +Zì“(eÝAkXä¡‹ƽð þ臊""ÈeÏhŒðïâò#¾q~ű ˆDÃ\XÓ¾v´Å‰9Ë»N@<)pW -‚)Þ…sΩ+±«‘Ÿ §ˎp½ËQ’'1p×XÝ–-Øž ”-Ýz“W•Yb'Ù¶ã;~½Çª2ÆZB& ŽÇ8L@$Áóð{ÏQ%rŪíÁ"¤ÅÀïGʈ‹6yM¹> endobj 571 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 572 0 obj <>stream +hÞÌSMÓ0½ûWÌÑÖ*SÅvŽPv¤U×â²âµn(j”¤ ~ÿ’qÜ®VB9ÌdfôæÍ›±‚Ž­^?(è&æ xÀF˜؞½Œlu§@AÜ3¥AÒGFMo$J ñÄ$¡ ´‹[V¡”Ò@üÆù»Û;¨1Àzµ¾¹ûQ¨€ÝØžN‡¾ƒ7ýœÆ}»Mâc|K­Li…ÁÕP)Tdâ«‚è369Úgèy“Ú]á!Íç/Ðö;Xý<GØ çùЧIÄÏì6²Ú64™ÃÚjÓ4   RÚ2£ÓèÝ5O㶿äI›,Y’4û“2Í¢G”´á*C檮\/2¼o…±høwÐR‰ªFϽ¨´–FËP\ŠJy_7üžŠC)Û·3GÞá:žJ|œ¢rT8ôYàE>™%ÓÚù¬Y¦.4ò’2¢Æšg +(<Ùß~ÿdÿ²ìyPÿã²eÆaÈòËˤ»,@Ù²€ÒóÅñXœÍ¡û4Oô +¦4ŠÊTü«Ðžî,íp!D·¹^¯—ëuôz—óý)ÀÑÚÍW +endstream endobj 573 0 obj <> endobj 574 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[311.04 167.22 549 180.72]/Subtype/Link/Type/Annot>> endobj 575 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 153.24 121.62 167.22]/Subtype/Link/Type/Annot>> endobj 576 0 obj <> endobj 577 0 obj <> endobj 578 0 obj <> endobj 579 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 580 0 obj <>stream +hÞÌWËŽÛF²ÔWÔ’L"º,9;Çî8˜ÄV’…l©¤fZ"’švGòÙÌ7ιUEŠ¢»“Ì` ÙdUÝ×¹ç ¶[<ûò`»n‘)fxÎÒûŒ}ÛÆ"Oò¨ÙµåáPÕ;öUÝÛv[®müÓêëÅÕjGÈ•97D>qCy7 +çEÁ°*ÍãdS²Že¼ñoÊX¥‰Š˜ä"^êÄD&^JÉ ™¤‘ŠE„·Â]DßâïÚÆ/ÛœÖ=‹3<ý›<É"ëß·]/3,lj +Ë9ͶJ™ÁèK².òॆÜø=Ö‰ŽÈÃü¡l¼Ïþ|êþ—ýoNý?^æ + ²$§ôóPž…ˆÔà¿bóù~ï^W»Û¾c¯mgÛx©T"¢ÄÒgv“Ì`l¤ƒq†žù¨q2nZÔGYÆ8sŠ€“÷€éêg:ñœY1:4K9u¼ô ò㧬Ær\£ñÈÚÏî >_2)‡mC[ñð,¨áD¢™ Eîëw›ºÈÿ›:çOØÔEú¸M¤H¦.3¸‘sÜ’I¸(†Òrsæ—׶ÜØ–½(÷û›rM #¢;öº9õUm;W‘‘<ÎF>¤i8ÚQ–gKí¿ºµ8sckJP$¾^tJc3˜,ßX¬ÒÊ O¦HN>³#5²WÕ øPE%`$ XêêÃú¶¬w–]ÇJD "ñUtÀ5*{w!SœÁ.Ê…sáåä]Œtº¬¬‘•Žá‚'çO´ö»žöA¯B ýŽµ!‡ìþÖÖ¬ +,%° ˆõ„ÏÁÔþ ²ß±ªf=òXmsD0B¢8UŒ‚#ËŽ»2x×#DÜX³õAª$ͧ~¦ãùYHKåßV{#¬,JØ›æ`G¯c‘âåç¬;­oYÙ¹ èÔÔÑ9. sÐøºC΢»ÏYÙÚfðâÌô4P2OÛì†5õþ@Dhò€¢H#öwØjÏŽ¸ˆ€tQƒXÖeÍn, ‡øÐ +ád”,J‚OîJÕÄ%5B ·êtì©þMÝ—UèCõùEù‡~’!«HÑ6VCã²ß7XÝ£LˆFvg×=×ý-t– c™ÚÙ7h8gµõeƒ|B^<Ò¹™¬_†÷ž…Nq®“4¯Oµsƒz…ã ÜU®[ {ˆ%þ*ûÝé˜ß9:7K”dIæ*9pòÙ)}Ÿù"ç²…vw–쉌”ø³d¤é¿‘ ¿øÑMÒ" «XHŽ§‡x‰òѪe½aolßS©.80䔄4û¦Ð2¾G&U¸ ÜDJþYàRŒñ/Å>®¿„öàÀ÷Ý”ê=M=&>…ÔÔ/OÇ >Â÷™Ñ9ô> +: AÂ8÷çå°2gܤ³i5ø- žw$9Áxg$7í!`öñy¥¼Þ}ë´Èú2ÛpJÇnKÏ7`D9iu!fªT¨@ÈŠ¼è]çKÀžÞP룈Ñ=€Dâk.¾S¯‘ö934ÛÀú $(Œ %<¥ú«êž}ßÅ å6dènHÊ»ÈK<Ì~ét6§¼¤Ae·´»Ü†ÕÃѾÌýì: Ùƒ¦WE> Kí»É‘7d³v=nñV?̵/±ufÐíZ}dp㜒è‡<Ì"וѻø‰ŽDÝ ­ÃÜ;\J(éªÄ|=¡/—ÝéxÜW˜`3pÒ †`*çC0)$X†áu,»§ô·­…vhw§ƒ­{7χAxî=•¡ýÜ9 ”f¹wxj„ëYrG ¿eÁŸÇg<–QJ?çAœùŒ¤¢O`È0ØSŽåO½ju’á‹Õ‹tcdú¬è)eLÐc +(7%ÛW]ä'&ÓóŒÒf¢mn~ÆÀ&õ9ª··p*bØkÒ`®d§ºúådYí¥Ç)ÆåpÞEYª]í< JÐ$™ž)Áñ×W€Ç¨'–¤¼Zf .ëË1¶m›ƒ£ BúY•¼NÈ5¬Ë ©:¹ãrR¹b¢ûŽ=xð5'Ö7„ÎQ> endobj 582 0 obj <> endobj 583 0 obj <> endobj 584 0 obj <> endobj 585 0 obj <> endobj 586 0 obj <> endobj 587 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 588 0 obj <>stream +hÞÌYmä8–ø8¿ÂnÛ;vœÀ'n_Ð!­öú@h¡L·{&Lwz”¤w™ß‚ÉS¶ó:={‡Zi’NœrÕSUOUy%»»ùú·ßKv×Ýä³iÁt‘³,e­»9Ü|³½ùúd’m7R±ÿp‘…eÁl–ŠT±íé&…‘j<Ûîn6"MÓŒm?ß|ä¿ûŽQ°×_¿þê+ö¾Md! +~¾k«Ó©nîØ·MïÚCµsÉ_¶¿ÃVYØJA¼a)dnØö äG¹3±\µw-{]·Õ.Q)`Η¾n\祽ÝÞ]¤\˜œ ••eÉ„.ÒTãr%l>¼‡ÕBéÅ{€B˜dþ%Œ!)=%ÃK] ö“zÒ’¢¤§ Š~W%™b*•ÉÆËm²Q*-•Ð¹p/Xà¬÷gb+/ŒµÆfžvȸj­#À‡bIÒ|¤>V·áÉÑÃá¦Ð7jú±ëø|ïBµ ¼9ÔG‡v¢õh3@1cžõù­»C^‡¿bž&ÍH“†hÒM${02]”Ù¡‚«èˆe‹ë¡‘¦0z +O±­ +L,ôrÖYÍŠÊÑZšLWµ¾X·!"’`¤éMVøtX¥ŒÁ’Å¥ bÏVM*לù‘ÿØÈ9ú@º4>0æž,ÉÐH›HaÉc¨O¨aœ±f]£¦¹ž“È!^Ù线g¡kÔzÖºÅÙ³bˆÈt¨cÀq ôu¥ŠeÊר̦Ϛ‘4È~E£¡lºdzH­,5fß»¾'»§×+Z¦‡ýfOÀÓ†£¶ûBmw ±jÕxûÐÉÔØœÇð±!|ˆM«ºhä:¼gÝP/ØŸ(A¦¶Ÿá¯†ø.Ss½Ò-ú1<Is ]ä™|™v£û.ÝЅŪÇš¨ã ®›q¯.¡;4ü„+.•“zÂd"ÇÉìY‰äP=b¼{ôTËëª'Bô_bªRWƒshƒ×£±DÉ(yCm${KªGó‘À™ùò”²à3CpèAqè‰xž9È#¦ÓØœ¦¾L³ ^Í‚Tò#8‚ýb+ +RYdš¡Î•eqEª­ãý\r¢ÿ% ¼´Ï˹ Y‹zr3N¹s,Ë[•P/}»•«1Ÿe6™és_¤«#™2TÏoý,[RO¨¨OJð§=yîò[æ#o¼*&ïªØ ÚÒ\R¿öÉ:Ò°ÏŠm’Ó Ä¢&m,é¯å¤ÿpàà-øæÒ±oÐ=¯¬ +ã}Õ&è9yµC_ß-ÛŒÅר'Î|ŸÎõžQë+° ö aÝëÛ‡k[ñ}›ó}ßÂ`¬y×lÉ’ès8ÞD@‚Ž%ÜdõËq©JFEkéÜ}A?&¿&y¹?ô[hîÓÅï¿TtPaÂ2²sà@ttÀHfènwŽMgç³ + ÂÊï\•lrÞã1eº+`Έ,à7A•¯Â„Ghýö´5¤wúߟ-ŠŽÊ6´ ^¿-Ú¥Ì\ÁöŠ¦Û§µAÞ—`ŸR˜¿qMG§5óÃ2;?y# ×á=_Ù©EošÍŽ»D`§^“Ï¢Y"7t¾bgþåVYvu§i›•ƒ<Ç•ÊǾöXÞ•öS•V” îÒÅÜK EÐXÖ¡uM™2D㤙.J|šÆãzÎoè9m:=¦ÓËøtŒ*¼y ý‹ð¿hã ékPx£Óa‹ 0fº¦ +endstream endobj 589 0 obj <> endobj 590 0 obj <> endobj 591 0 obj <> endobj 592 0 obj <> endobj 593 0 obj <> endobj 594 0 obj <> endobj 595 0 obj <> endobj 596 0 obj <> endobj 597 0 obj <> endobj 598 0 obj <> endobj 599 0 obj <> endobj 600 0 obj <> endobj 601 0 obj <> endobj 602 0 obj <> endobj 603 0 obj <> endobj 604 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 605 0 obj <>stream +hÞÌXÛrÛ6}×Wàœ ÜALžÅî¤Ó4žDÍ‹ÝZ¢Ö6•¡ä4þ¤þe¯)Ñ®;ÓxbÒÄmqöìÙZÏ^ÿü™¡õv¦24A2ÑHPTf³›ÙÛÅìõ9C -nfŒ# +?ð`‰!6AFPB9ZÜÏ(ÌB¨„o‹å,&”RÍ.ñ¯gçH‘Í_Ï_½BeÄ’àͺLïïóbÞ»¬¼I—YôÇâXJ„¥8L¯PÌÓ +-ÞÁüÕ¼i?eé*+Ñ<½»»N—§ø}Ú<ìò"ÛúÙÎ3͉Ѱ)M”F„ k-"2¡T†íùûFØ4á²×˜¸Â7žD¬ÇÁ"h”I½}g3ÎNg¦ v~H#!‰ÀˆSÅŠl¢˜sj9‘XD þÇÌeñ¼À·rº­–;ixû™„hœ…ïå6b 7…Öo”:¤8×ÆAåÌH*3œsœGŠ(ìl0(LŠšçÞŸcωÝþ›YÿÇݼ„&‰ƒŸV ºr“Á/²æOwwáåS¾þºÛBl³2Š… ¸že+RS?°—ŽŒ#‡'8Ø¥wšÊmLkíújn]Ä4!í#néâÏmã]þ=‡˜‹,…ZêuƒôÏ¿¦æ§Kí*¬UkƒšÎqEÏOñ÷M¾BwÙMù9ÛUK¹Éæ×·ÑâÏÞRqß2|…ý°] šÝÏ‹Åã·Ì r@(+Ø“D%ˆ¯ ŦMœ÷`àVí`‚`«bVÁWÑ7@Ȇöà—ï›\[ÐhZÌôUqc~<>û±ËŠm¾)¶¡gmðô ôæåíà‚î(“ð½W`6ëTP6s1F„UÝåüœ1`EM`/*p-!Ôðb#.te,Q²q5N:iFì§nA¤êúw|ѳtL­-ݳ§»ó£áa0³†Ÿƒ[˜ƒÞrJáå|Ñ^²ºiU¿ îÍÂ[ZÚº×û¶~AÿöマŒóüG¶úno¢ >³®³r$””.í1ƒ|Ѻ@PëäBIÕÈBëI’ýhh‘ïÚ9!ühU홫*Íç×ed u¢Äܽ<¢³bu <~0kåàó.Ýe÷Y±Û «ÉêãNËGXk²ø|ácXˆNz8'¢’6$=ÀsX3:$=À qééÙ;mxþkqÀ5bxMq9ÎHQã%ñJ³¾N›}>Ö]†’Fzaà^FÉÈ¡ì”P £tö¨³fô=ú5 P²-Ë ôyèð6[çE*÷\rùü,/“Ù¤°>”;™g6)é^(ŸÎl=‹ŸÌΡìvŠR~à «û ¢BC¾¯85tSt$ßë*½5'Q*€à.^Ò*vÍïÒív€cŒ³Nµµx„ÌÁþæ +gÏ®¥‚ÉnMgôËNè#¹ü€tÂì§ð‰¤ëZ=xu»©dp—4žËÁfl[3Ù^Í0« +§ÐØBû2•“r<ÄÇ+'X«Šõêìì7˜x¡7ÃuÔ0'—LN2ü¿¬üÅA$(äólÕ=GÔØ„8TZs’÷~¡ábÉ<±VâPÙ)ÞÔJcRRÕJŠEÃÇj%3ÆôÉõR£-¶ÁÖö°o"÷»Ìòuñô"³æþùÆO0E†Û®ƒêáá`œ¾„0$ÑÐ{$ÃÇp,S!¾âËÛ<(h-À¿Ûƒ ]Õs²ÄC+U~hK‡.Q]¾›Æ'¦ë“P¿º³Î!‡>ß˼­Ú°˜ŒRØ4AÚcåo÷#’Ĭè NJ’€ ›@>†„`tpíQRþ:à×=QjyB’8(õL¿v¹Ä¯·;ç9wòxˆà×rGI4ˆÍúéüÇõ¨ßq(ž˜J¼$~´æ ²Ú9ÉîI’GYTéwH“ú&ü›bç"/Ðs’ïE~JwBAx¸ðrì?¦Øܧ،Ëa¹1½ngÍÖÇCŠ +E½o|‡Zï‹w®¼N+8v>âû(v‡]ºç˜A®„­±’5¼pHôÚ íÜ%zuë D¥šY"ñ<Š<ª›qAã[´ˆ4Nz±„¶oYsGî/ uâ™$ŸÃ˜»×¯nÈ}+ì‹ëºµƒÚigô@;5Îu{¸ˆï´+à1ÓGÚ!/0~¤òÞü’öí—ÚŸÛãã9öš+:ý#À”aèw +endstream endobj 606 0 obj <> endobj 607 0 obj <> endobj 608 0 obj <> endobj 609 0 obj <> endobj 610 0 obj <> endobj 611 0 obj <> endobj 612 0 obj <> endobj 613 0 obj <> endobj 614 0 obj <> endobj 615 0 obj <> endobj 616 0 obj <> endobj 617 0 obj <> endobj 618 0 obj <> endobj 619 0 obj <> endobj 620 0 obj <> endobj 621 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 622 0 obj <>stream +hÞÌXÙŽÛ6}÷WðQj`†;)ä©™,HÑ ‚'/Iùùù ¢©#W¯="o6)wÔ%ëûÍtµZ÷äU±Ë7óé,O™üU²T% ^“1§Üh2yù•Ü†Ø›|z—oÈÕt¹ü8¥‚%äf½ß-Š|¤=ŸŒ´Êà’¡Ú*d–e„*ǘ*3‚ZS¯Ãk*Tk xLdX„ÓH²DF°¨\í¿7[o¨·Ó–†¾ž¦RQ™|%‚ñt¬©Ml:‚e‚ªD¦§Â‚gù­¹_±×ŠÀ^ƒ´­é{Ldƒ$q›Ä¬&±$‡g›5¹]ìòtòrT—9ZyN¨šoÁÝäózqG–ù|s›ïÂiøêãƒ?Ïi=®(:ó Žs¨yâE1ùú)èõiKa3×eB;*¡Ií"žIì‚[†#¹Kç %ù>ñ²Æ\R›yCœ<"k'dÛ‰·Å¶íƇZòLÆüè÷âPáÆõMQ{PÏy]:x]:JØ¿¥°6Kê +ÙFŸ•z{[*PaÊM`_3pT@+k»´£õ­ŽÖAçTfº¡´:抂/Ç"†meR6t‰ƒ® èz¿:1œ5D#¼>È«ºA>ÚtŒ6Ó”ãPV›Vš¼N]2+%OZvi˜Çe4‚‹xüЦø1€á¸[±Ÿ§’#O§é99Ûí‘¥h|2ñ-ïX±º!-~éw‹±ìÄ»mëÙŒƒS¯ê"Y×̵gëýÇeO¢i!©D³Gq³ª?ÓD†ˆ)ìVT‹“T3!‘Œ¯ n›zf”¨³ãËb•ribŸâÏŠ¼[L›ØÚƒ:}ëûäv‡Q!üÁ׃÷‹—ò}Ý$ihfͪ60#šrcI¡\¨yÜŠƒãülVD§²ªÀH ŠC Š“ºÖ4³7`¢î„¼$öõº¸Ë‘¾WM÷Ë]< ªbt³_b†k7›Ã¾xT ÿY>÷’/0¾µ1Âz¬á‹ í£ƒqZA Fe­"íERÃ{)ßÒ? ¬°¬ðÍfýÉw{…Õd÷õ,~P°(»ÅºØ’#&OóûEQ„’Ô†Z€¢ƒ*·)H¹€ù;œéAÛ—EÔÀ)U?ÜÂ"evg±A,Z˃ò¦‘}m˜¹ïÄ[uñ>ÇZðvÕ–vÒdž©Ã “–E˜z¹ÿŒ¤e;Mžwçé)ZWtq¾oð”ÝÁ³Ÿ¦Ò_âÓæ}MKc‡4TÕävºÊÇ×ùŽDýÓåžOÓYã“çÿô¯Dÿ½ + œÎbKºÞÀöXs;†ö|_{Þ¾aâ E«ã-ôl¼ã¦~ÏüP Â¦´,Ö°X¥…´þ Ç)€hw¬Óøe¿‹ý~05e»3Ï'ý_àd<í2P g$ëê /eûá¤+ÑÂ]’ôÞÀû.¯’îåû”`½—m®E`×00üœZKˆ¡åV©{±Ê„{‹ž±ý.ÂÉ ¬¨÷Ä à6Ð"xÚ„ ·%Ž¹&Z¨ Nö7Zý–[ãCx¼ýo·9y½(¢¥ªÑé9)Wñœ‚hHTªº[#8:0Ê„OÈìÜ€­”'ž¡LFNÙ¨ G0ùL…:(:³†ÿªƒ¯n^l0×ÌSdOÖ)þlVS?Á„9Ç¢úºÓ¹YTŸäÎwŠê5îùÌpEUr•rj’Ãgl> endobj 624 0 obj <> endobj 625 0 obj <> endobj 626 0 obj <> endobj 627 0 obj <> endobj 628 0 obj <> endobj 629 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 630 0 obj <>stream +hÞÌXÍnÛF¾ë) +I´Þ]þ#È!–íÂEÚ¶’‹Ý--mÖ2%”·èKä-ú–ýf—¤D‡’}h&€´š™ùægg-ÙÍèðÇ ÉnªQè±HÄÌCæ VêQ6:šŽO%“lš¤bÿñ%ãˆ'1‹<Á…bÓû‘€.|Ц³Ñ˜ !<6ý2ºt>œœ²€Çlr8yýš},]óØYÞ”éý}^Ü°³¢Öe–δûÛô'åÙ£Ôl,¹ 6=†þFï–ÚsÎuÉ&ébqÎ\%œ;v¾\×y¡+£íd: +B8ò d\yI’0îÇBøÖ=ã±Ù„Ó\ù½M`B žÙ„Ï"‰Á!aØôãÖ}²NFd'™Y;N]ÏçžóÈ”î8à‘¹c¥D¢¸ïx®tw,£(HœX€V.-Û|=«™bõÙb:ÚÒË*wÇ!—k„”RaDP‘qc‡ÌøÛ xà ³JY÷ýäç®ï²ý7ZÿÇl&^Èc‚_4aéÛü+g¾_,ìâ<¿¹­+@¥Kwìy\:®ŠgzÎÛÔo²7R&{CTí÷íQ›š6+Êgh ãMI é‘+ºqò5½_-\ŸÒ±êWì¦9Ô”m ã ¬ 1z¦·še®G5€t'u‹ÅÒ•~¡® ]tßùꎱEGjVݶ ðÔŠ¸¾°zÉf¥NkÍRVéÚ¦PL^`#bŒð;#bkÄzÅJÛ.Xµd5L‚Ž¹Nx(¶e£N6°²è;³´`«´¬´¥†dDÇžD#4­+êäƒ6L=:Y‡Òb)‰Ïš&6ý}ŸÄ÷†7VÐÙw­Ù{t%Lu–k6×(MôO”„'¡íU´ ^)Ž~†À@¡ò·B›5°sC§^¯š.zå\¹ìO›àœl§.#¨ãSJãßéÙHœ¼bÙ[Ã6}Õl@6°(uµkkì=N딽câ«T%<áwü†sN¨ Å!Í¥l?ç)³œýLëž"}0ò´‡BôË0„€p3‰¤’ûÒ‰îY à‡¼}!l!ñØ"õ#·uôNÏU+¢Ì8`?_£M yÿlå)É>“®!@0¯ÀDßD|'ž„W å@yaªÛW^Ýé/È;­^:Ÿ +7Á Œ;™^MšúŸ{šÑžÊùT@ͼyfÞU{‘‚Ø0L~˜ÊQ&/LåÈÁ¼Ixàƒ;l*g3~v Ã²u1ëRI “5‹ŒúTT+=˳\Ï{ Ê ˆ#xÔÇÐ<±ŸTˆÑžX„Ï +Ü'sá’Äò>­Q»åÉß™Tó ®5Múͨ‰6'BXá;WÒÌ߾鱾cS7¤YÞ¾ë=Æ÷éižÀ}¡º÷|èû4€ûQ—ŽfÇô#»Óû@(P’VW>µ§v'@!Çq³cþ|Ðíµ‘éíøa4$ó·Â+¯ +endstream endobj 631 0 obj <> endobj 632 0 obj <> endobj 633 0 obj <> endobj 634 0 obj <> endobj 635 0 obj <> endobj 636 0 obj <> endobj 637 0 obj <> endobj 638 0 obj <> endobj 639 0 obj <> endobj 640 0 obj <> endobj 641 0 obj <> endobj 642 0 obj <> endobj 643 0 obj <> endobj 644 0 obj <> endobj 645 0 obj <> endobj 646 0 obj <> endobj 647 0 obj <> endobj 648 0 obj <> endobj 649 0 obj <> endobj 650 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 651 0 obj <>stream +hÞÌXMoÛFzÔ¯Øú´L¢õ~q¹Û ‡ÖŽ‹IÄJ.U´L)ldJ ©¤F‘ÔÙ.%Q´LŠ@ 4,™»œÙ7óæͬYŒÎ¾dQŒŒ"·D[C'y2š~šŒÎ¯d2 I8ü‡a#æ,‰g\’É݈ƒÆ5<›ÌFcÆ9Wdòuô}ýòŠ„Ì’‹ó‹§OÉ»<–YºZäñÝ]š-È«¬Lòy[¿>öyâ¶ÿÆêÿx[•e˜Åðó:ÜÔ Ú'à_ñùãr鿼OŸÊ* Hò`¬ôK #àYr˶ܯÙÉŠ½Êv_Ñ¡/3ÇœñTÆ/°ÙD`Dï+šCE^ƒ€çç¡P¶_VŸR~JÈ:ÎñU/HEŽeqY¿’C=Â;/È2™çXµS:FÎà7xü*[oÊ«t™¼ï’³gdJ¿¬Rx~ûdlÀðe\ÆÓàyeò¤¶˜Î!tJÁ2ùþáÓ€üu¸£ +%ë<ÍÊù”ž¡`Ô'…ÇyRnò¬ qF’<_åÓiv†Û~j+~û”ÊƆjý[0ùc4ÞÁv¢¸ƒ=ŸÁ»ËU‘Üí‹ÜoS¦؆ö þ #ô¡HÞ¤ÙõÇ3ÐÈ‹›ÏWÙä~½•È­[¯Æó¢ÞÜyåÕÛÚ¯%ì5TRI>£Òz¨–;íÝË<æ•ad²ðæ&ŸÒ‚ɬLA€n“b–£€¥7 dÄ©hè*€Ëee\@Œ\èË£:¤Ø +º¨jˆ9ú5€øPì ˜|2«-€  ïy}àêGÐX[½kL[úÒï0YGPÚ¨±Û»fp$LÆe’iyïsÉ¡úîƒ1±ÎZe@‚€„0S!Ü–ÛÞÔ®·ÜÉvÓ$Ùu¼Á—‘c’ª¨¯áØOÇ»Û_¹ xW›h¥Ð,–É´ÀÞqˆ7t,²€Wã :ð +\ß»ÛIcÕËÍC¸ +»b/\5«²‡¥áVƒÇ"É™5m¨ê€Ñ²° "DçÀÉvѱlFTÙ>xðAìÝíß—–ù¦=0¶* $€MÄ®êi ‘‘cNáú¡_![ºÓÀm9²ØõàVN bñ~›ÅoâY¾ê ¯rÜÓˆÞ‰3Âõ½Ÿ“è«yNã€ô›Ûô­^avAhó$]dDV&B"‡œYÝÁdázÃaoJµèƒªÍ *ï÷MéÛÍ]WVµ®Ø«ÂnœÐçÎÕiYí…*å0öîö·{Nõ:-“îsˆUŠŠÁ +¯HXA¼`½å«O¡´ìÃÊy­4'£m¼ñïŸ×¥oòÎ&Ð\?¦q_Ë•Î"©!‹®“Ô +׸ïí¹ZõÄ@¨Ìå4ßðÈß®²K˜‚•¢ñfYî‹V²ezbc?b!\cíQ^ƒx89-Ùºh!´ƒ€6ÞØGÛCþõ¦(qb”ãMÀ,­ÉF²m|(=Ó-ƒ«L…ÞEâzÛu¿„…}ðÕäJSëwi— ÙTã¬czB `Fíæ­aë@±ñ~u˜eaòF +kºò¬Yõ·&}¤‚:õªohf@®7·›ðõºq#=ÚƒŒúP¬xƒèReázíå´þÛ‹™A¹l¼Ñ–©ëÒ_k%MáFjéô‰89!—½D=>NVõÀíi\î»5`6†Ìûýí~ü!KË¢¯ýbe£,Ã6”7%³s(ÎNJvØ7BÃdØüÑxáÜúï-Ô>2rÀkz.] \mw}b]Gÿ0˜˜9 +endstream endobj 652 0 obj <> endobj 653 0 obj <>/Border[0 0 0]/Rect[319.86 92.22 499.8 105.72]/Subtype/Link/Type/Annot>> endobj 654 0 obj <>/Border[0 0 0]/Rect[384.54 518.28 426.36 531.78]/Subtype/Link/Type/Annot>> endobj 655 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[481.98 271.26 549 284.76]/Subtype/Link/Type/Annot>> endobj 656 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 257.22 147 271.26]/Subtype/Link/Type/Annot>> endobj 657 0 obj <> endobj 658 0 obj <> endobj 659 0 obj <> endobj 660 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 661 0 obj <>stream +hÞÌXÝŽã¶zé§ rE51W$EJºÜÎO‘b7 fÝŦ4¶ìQÆ?IîÖÏ‘¼Dß²ç#)Y’=Ù½h€b€±,Sü~Ïù%Ùföæ¯$Û43«Yg,É,Ó1«ËÙzö—Åìͽd’-Ö3©XŒ?|È,yÆR‹X±Ånc'¸·XÎæ"ŽcÍŸfù»»{fDÆnÞÜ|ý5û¡Žd&2~ØÔÅnWí7ìÛ}[ÖëbYFÿ\ü ¦´7¥°½as)¤5lq‹ýþƒmÊbUÖì¦Øn‹e¤bþÌǶڗÛín1³J¤AYa,JçyÎD’ÅqâÃs»´PÉèGä„h÷#bî3’»<ä ?&Y>y'Sò“ÜL½Ÿï‹H'BóS±ŒæF¤<æJŹ ב¤¯2MMÎÀîÕ¿lu\¶,²¸ú1J3ayéï×MÍ-ö”XhL™Rʦ”*r# nPqÈÿDFN>¤ÌoÊúÏÉ××>¿pÙ³ëÿñ2WmEFéCb + _€ÿ‰Í·Û­¿x¨6Om4e͵’ÿ+R)ú¬\‰®õC÷¦Êu¯jÏ€N=Êr‘[ßÊtÅ6µ@;ÐÅÿS´øåŒÎ3déà‡û„úÈ·åºþ±*nŸï÷‹Hª|z);çÜs ’ÆòD&lÜ£‰Fâ牉d*€Œ +/ÅQiŽôÈäÕ0äèîKCì×_ ñá¸-/L#E–0)spÙë*°~ŸXúl¤ês‘‚Ç¿0†›®.ÃÌ°Ù9Ìniš>n?w…@M– ›Å’ö ã'D샸-÷MÕž‚÷VŠœŸˆp-™Œž³§´-ȹóP ·áCÙwR¢Ui à†ðÑ—†­Š¶`ëú°cíSÉ‚  I”ñ\1(ÌíÝw¾]ücTžD(¿nÞÇDn¸õìðøK‰á¬|ªÚ§jï¹ Lßù¥©÷oo¾Ò3}5ò¡ÁþÞ”Î@QoŽ»r¢-ЉcÕi¿…9ÛZ•k ä»æ&næ SªP£‘c˜Í]´±ìt€”¡U–Û¢iX{@§¹¢XTÖEú¢HWÉyª‹gȹT"K¡1ÔHc|ä÷xÍ.yÍšÓ¾-þ ×בÊü=Þ|‡ÿ¼h+´iñÅá¶&I2)´EKž³ÿÙÄ›^óM[´%¥úÖ”%ûê}±¬_ÑóœÎÀœ 3"$›¤"¼Š¹DYc”êÙ@qÀÇ•IFn‘¤S$½‹æ m~‡„*~ÿæ¶ ™fJyÖkô`šÝ?]ì7GÀƒkMãÊ 2øW—û©üDd~Ѷ»H`îÍaÙô)t„É?¸ºM0fÆ$É…N]¨@éÕ¾eÛ2²|B๟¸Ÿô‚èŠäVLÒï6Ð D(ž"úL‹î1oC@v:Ϻ¬ϯ¼=½Œ¼œwëîÀ¹öç‰ Â¡Ñ@èE¾w²Ç-Š²V2Í=¨ƒî^÷l?ê[jêH&•¦—Ž΃bìÂHÄ|xðS4ªóˆ5;Qoq¦Ð˜E”Æ®Ä| °sÒ»fsIâ[u4£BëªLõŒ$ìf|ﺿ¹Â솶˜ðµoÝñ¢»‹4?³\o¾›‡-=:Q\°ÅSÕ0œyþƧ†pöÁî‰ ó)Ç|ŠûY•qt8¯Oݸè<Öì¥>l"éW# 7÷è.à›Lɾç=‡ r³}*ˆ +áyÈ–‡º¦µ 4( œ?‹qæ!ûê‚9úÄç‚ìš]&æ¢oû„â¨$'5íGGl§5Í]M%'¯_I)‰Å¤¼ð_^Ó×'—=WôÌ…¡¡Àí¾,†#ú¿„3®Æ<§é´FƒŸ÷sÍv‡ºt£Hkw—\#)1 Â¥èˆfi^áÃM,?J~xý['áˆmpJµHIT íõª¼2QLbˆñD|žM$¦§žÍh&H¸s¼;Èó ô˜Í¹¿ÞCMÒuƒêÒpµÄ ºL [@Q ü”\ÂQ‰ÇHIˆÄ˜·eÃkvÄik9ã3¯GÒLu w’lj ’Mµ×ƒ@ES¶(dÓ’ƒ2APfÊóþÔåµn˽ïÄ—=‚¿>ÑŸóu°:·›ç4—!ã&¸ít¤ÒA¡5Õf¤Ñˆy/e¶DW e¶œÊìÃñ1’D*ý¡ÈPž~WeKm0•ý®£tiFŠ[acw<$îH‹@Bd$¸«µÓ¸=Ѳçj¿rU{w×ÕkœìŽ‚ûP­2‡.Pàxò! Ñ-ð¶ì„$`á÷F!õë] +/«:šI¹ÂÄÞŸ"š° Ywx8ùaÒ;ÇšãšGwžh Óøúk1éKéä9˜¤Øv¾ÔTÒLXyí ÞN” R×\JSxEï™è½lW9¬Ê—r¿¢wv/‰×ékíß¹E’^Oqí ÑƵƒ~à_ÇoÖñ›ð[y£³ç.¢{Aqw̧Ãz&“T8]NšÜ‹xO{:¬Z7!ýft"wª\Sj»t \Ic¾e–Þgà L§s;eÏ+ÍŸä8¶Ê> endobj 663 0 obj <>/Border[0 0 0]/Rect[382.98 133.26 452.28 146.76]/Subtype/Link/Type/Annot>> endobj 664 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 665 0 obj <>stream +hÞÌX]oÛ8}÷¯ æ‰Ú©Y‘”Hé1“4Ev§ÝAêd%¦]ol9äéä'Í¿ÜsIJ–\·Ì°`+"yïåá=ç^Z²õìåëw’­Û™Ñ̦Ë +ÃtÊ7[;[Ì^^K&Ùb5“Š¥ø×,¬( fu*RÅ»Y ++"Íðnñ0›‹4M5[|šÝñï_]³\ìòåå·ß²šD¢àûuSív›zÍnêÎ5«êÁ%ÿYü®tp¥`>gs)¤ÉÙâ +ö£Ý‘Ù[W-]Ã.«íö¾zHTÊÙíþÐmj×zk¯³<+±%#rÄÒeY2‘iš…Í%¬éDZk¡²É8@!L´ĦHJDÉ0˜ýþ)÷cöZå³×€¶_a4&kFlö$öÙœÒø»çº«~MÿÅê<¬.Eiè,äFèŒ,`1¸„Åw|SwlëÃWÍÕþp¿u—÷×õâùÉýÄv"E”À)‘é +k¶nÕ€×XDÔ~¤É?;%ÂÄØA Á‰çrÞ=?M‚”¢ÌmœåU„¿ ñ¹ÔB—`ÿÈï4_ú@Y0ýeBISž¸»ã5ÈÈ»{úÂa„£o-ÊÔCtâ»R™ü¬k¿÷Íû–k®ª®úÇɶ ‘)k? cYQ]5 @ “Ù8€Ÿ’°©s þôçCþÞñ ¶†Ö¬;Wwí4¨Žê¡Lá×ü¥ßi¦hš·Gn¨·Gù£‰Y6Ö§‰îö¹ÜV;—È÷‚R—$²·T=t‡jÛûjÐkà´–+R{ ·Wò?"Õ8™I†ö’–ö’F"D«¢\SÄ%€°äýv ´¾ r‘G+JÇЮ-½´ÓgJ5Žmj¢ïñ-ÆUÇCïªnƒ8«{x=F{l+´(zAL‚r}óã««7ïþ5Q•­Æ¬úJÇ]Õ9ª°/ÀwǾ9š‰½œ.èFZá¨Á«Rh&r\gŽW’#1²\ Es -éùÑ"mäl¼±¬ïYÔ1Ö¬4ǽ0/¯@ÚBÊJ‰ž· tÅ¥ã‹1Y•ŽÇ»ó–óáœc@ßWõúP­ÚZOšœ˜ŠSqu¼©·¿øô›DC&­þüªš{4FÞGç5Õ/T‰2c¤£Ûwò}¡#Ý Æ ·1e©à-“¢‘Vùê‚N5ËßÎì`QöûJö¦ª+JÏŒJ3,>x¶Ë"–É×Ã?Ëi–Sa:ª«Wo–XÜÀT•ºèIZÎýzÄfNEâwÎB'оêÚk¢÷úÁùérâÏ~îPQgáÍCÅ­ƒº}HŒìõe{pÐÏ¿isºÝiŸöK…0& ‚?ÙXÎÊ>}¢šÖQ†Jtª>E48ysñöýõÅåâýíÍÛׯoo®¦-K*d9V" +9ŠC–òp»ÔÆÏû#Ip/kç:WHeù'!QöëÛw7ÿ~;ñMZ«“ +2’×(]t×l¸zi\K$ÝzÃïAôsN&èç/¼? #â;7 -ª-–@¡k:—´&Œœ,S¥=?ö?t… +endstream endobj 666 0 obj <> endobj 667 0 obj <>/Border[0 0 0]/Rect[309.18 97.26 397.08 110.76]/Subtype/Link/Type/Annot>> endobj 668 0 obj <>/Border[0 0 0]/Rect[199.74 97.26 293.22 110.76]/Subtype/Link/Type/Annot>> endobj 669 0 obj <>/Border[0 0 0]/Rect[459.36 111.24 549 124.74]/Subtype/Link/Type/Annot>> endobj 670 0 obj <>/Border[0 0 0]/Rect[63 97.26 197.04 111.24]/Subtype/Link/Type/Annot>> endobj 671 0 obj <>/Border[0 0 0]/Rect[384.54 111.24 456 124.74]/Subtype/Link/Type/Annot>> endobj 672 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 673 0 obj <>stream +hÞÌXÝnÛȾ×S öŠìZ“ù!‡œ½Kí¤HëtG[ °‹‚–(…k‰2HªY=Rßr¿33¤HEÎþ - +"Íáœßï|ç %ÛÌ^ýé£d›vf4ËDÎ’Ü0-XSÎÖ³?.f¯ÞJ&Ùb=“Š üá"óŒÛœeZp¡Øb7ÂE‚g‹ålÎ…š->Ïî£Û7oYÊsvýêúÛoÙ‡&–9Ï£ý¦)v»ªÞ°wuW6ëbYÆÿXüª´W¥ >esÉ¥IÙâòƒÜ‘Ø»²X• ».¶ÛÇb+=±»ý¡«ê²uÒÞ,fFñÌÀ)ÃSøÒÖZÆ“\ˆÄ»çY'3²“Ì̼ï‹X'\GG¦„Œç)Ï¢,ž+%¬âI¤cÙx.³,µÑÜàY³÷¯­ËŽÅw‹³œ›¨ôÏ›¶Šç/îk +¬sTP¤”2…ŠÌȃ”2ãßqÊÓˆlȘʆëÙ¿/]åkÿ©ÿǯ¹hÃs +¿ &$@&>ÿ¯·[sWm>u- + -›x®5—Ñ¿b•gåŠ÷ÐèÍ”C¯AÕ~¥ ñ¢Ę́˜] ;4 ò úx¬»â§xñ#v§~·åÖøB ’®’€Í¨%l¾ªºcÛ26Ѻqµ¾)›ëǧ·õâøìk^sÀ‚Šé{¶åºCYcUö½úÏ’†0Áv‹ß„§>ä÷Qw|F}D=Ÿ¤=Ÿ‘'þeÇ%Ñù2— X+Ÿ¨lw¦{M/%Îç©Êú°{t:›©RÍíðúX)¢$­¾¨Óù^ýÐRÀš›¢+þpævΕe_˜°*È€®ø%¯bïÐ%¤¹Ëþ|Àï}ô|­Á5›Ã®¬»vj +XGõü SœüŽ²ê4"—ÜZG䉢÷œð4‡J}qÜ•Ý¡!VGÕ1~ZV0’ĺOEÇí Ziˆ-q­b‰ß²e«ò¹¬WÔIÀ‡Ý§€i¹AÿèËQEËÐ*°œ¢Y4¾Y°C‹²a l^ÇšŒ“ÆívK"ÎÏ$Ÿ j½øyÿrZ5{,QqÁ³¨î+sß<„&ç!‚‰=•A +pºI™þoB¹ôpR‚gD'lôü@J‡ &ê8˜ $ô©?Û­•ó¬O‹ {Q24*pëþTÕ+¶_³Ê Ä]!qÊÇ=ûmaw`ÕzЬÂÎ$ [ßV?ÅŸƒBÙ®hŸ¾c7{¥Þw¬@È£Ïn‰µŸª5³ámH¡¼JLȈ¯)Ž4¬¼+4‰èú.V×ïÙ‡wÅÓaEÛV›ÚX/'pðò”iÜ™é]LÉ;¸wäô“‡uùܱµ÷%%_ +a!?ûêH0åŒÓÐÃôƒØÜíŸUµv©DhéBp$InÆÐЃ /ç!’Hbµ,ºI(¨èsŒÍ,¼r&†ü.Õ¸®ÆB…A x”Ä(ê{hƒ44=Ä“tOkSê~([6{F ×¼wÙ~7ØÙy×0‚fb°Q9QrÛçrY­+‡»"ÔPá‚8E:ŠrOB¿€(×äû`ˆI0&%#eˆq°‹xÚQx,`B“c Ø_áPá ½rì—È! ÝË–÷]W ¦„ÀN!£uŒwGKŽ³Å™7É47ƒ3À†pã€ã"*¸ÊÏÙ#H!õ}T­—À%Øxɸ•)#>V\e©kjÙ¨§yB&ú*(çT "Fè™ u–èаG°@tŒED‚ãÀšÍ|Uú9êò¤t¦ e­)r†A¡ñüXµ¬-Q›û¶s¡J¦à;‘ŸH#(íÊÚgëyO[€F=Þ1œ!tЊáÞwM–ÆÌž'T÷ ÉïZ•„EoítòÐF>ÜHSæŠØÄ"4˜2V¨•us[xìc0‡{Fä»ÁD§DRG:G¥ÑóÙ‰r2êÈ4!¥aÚé+ £¦H´T•1ðªi¬N½Ð?­õºÙïN£Æ0lF¥£ÊðÀ¹}ý÷7wäèQü šÆþñÇ'?`¢/ìuÿ]¹„Ìk'>Â*m,š0³¡­¯bªzHÝ`óÞyžC×àÝ z[ϦDÃ~¡vÄnl¹ÿNM7b š×0~”~¼ræxd8‚ð¢‡ò;ÑvhÐÈÍQÃZwGèK¹æ +m‡ß¨è*Ì/Å#†»!„g™2§éð÷%©íÀLÞ+T]ɾ.á !ìaØAH€6 ÃtN"ûcÙ ¡I +NB [CGõ0«WJ_ Ž±×Ù«JR˵éUé dò¢&ª!Fµ08›fCGƒDí·ÛjY²}þwitÇJ/†»âyì*dZ‹A•M§+ÆSkm~A¹´­Ÿ ÷·4=s”ø?.¸þ3Ïf¬U’Î$h¶8´ä/+VXWêLqO³îäK±éu+èƬ¼öw»çmQ#½§ì +Ëe”Ó·±—ukr:醢ªóIÒÞrÝŸ`ÛÝF™á Ø«@û¶¨7‡bSö]0Ì&TbÓ•Þ•n–£"¤3@YŸyK9ÕòèÈ8åmTnÉà~+σXÿd£Ók> endobj 675 0 obj <>/Border[0 0 0]/Rect[384.54 299.22 426.36 312.72]/Subtype/Link/Type/Annot>> endobj 676 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[467.58 478.26 549 491.76]/Subtype/Link/Type/Annot>> endobj 677 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 464.28 130.32 478.26]/Subtype/Link/Type/Annot>> endobj 678 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 679 0 obj <>stream +hÞìWmoÛ6þî_AôµV _DJúØ%Í°!ÅŠÔÛ—v›vÔØR Éíü;¶?±¹;’’%»iƒmV`ÉÉ»{î¹çN‚¬ggß½dÝÎŒ")ÏH’¢8iìl5ûv>;»Dùj&$áð‘¥,ÏHª8ã’Ì·3§0žÀ³ùb3ι"ó³7ôêÅ%Ñ,#çgçOŸ’WM$2–ÑzÝÛmY­É÷Ug›U±°Ñ/óÀ”ò¦$¯I,˜0šÌ/àüpîèØk[,mC΋Íæ¦XD’Ó;r]ﺲ²­;íÅ|¦“B2L¤Êóœ°$ã<ñÁÉRÓ¿‡¨™L&ïÄD¹—ôIî€È ¼L²>~tO¤è(ú™zG_‘J˜¢{"¹ˆbÍRšF±”<—,¡I$(b‘¦:§¯àž5µ_¶Ü-:¸û9J3f¨õÏ›¶Œb ë +‘u‘r„JJ“"VèFÜÀì FšiŠ>¤ÄJ†ëÑχ®\öeNý/s P†e? à&$@$>ÿŠÍ盿¹.×·] ÐÚ&Š•b‚¾d +<³KÖs?°7•Ž½Êö MjFÕìŠØ±™côõ¾êŠß¢ù;Ø­ýîœåÆÞà Ú0•à °j 6¿¡eÕ‘ ]5WÅÞ6ç7w—Õ|oßRã`ù˱–.`ËÆ®(k؃•}‡‹µ$(„ ®C­(Л€¸öˆÓn?ñQ°\§a•ú ßÇB1•CñìŽ|Jp°Í7G† 3’ë#»°Š’b|au°¯˜4ZœÚÏY–iý ó?µˆYsQtűKdšžx°,Ð…®˜: ™áY2vàmäútæ~CŸƒf+›õnk«®ºÂ#{W¦)PC +ri"ûêAÎ3ôéÚv;`²Ðª@¡-én‡œ‡X4S=ò}é鉔éé…|™x3öe"”d‡ëj*#óÛ²%ÐIjÿàCKö‘Èá®Þ‘®&P] ü F1O…„ké܃[>vË÷g(t«Õž|(qkJ»[¯âe…28¤ÞyÊhf’ñ)á<÷îÞ7õ:¬§´ˆ8ÝBEç!Š•dzÜ0>¢ï™?¢Ã 1N²¨›ÆBY„æ ¡æôŽM“‡Ìg8 îÈþ™D‹a0ljÎ]¢EwîëçDº8Ê98&ôˆ¾CºË«4K +¬{Ó2pŒ´&N@#ÜEø® ûS)엑µ{ÝmÝXRV«H)÷Ôe›CAI˜ !^axØÜ·p…KÑ•uõŒ´Ö’ß½ÛŒM†:~¡ÀüÑ vbR¦qüâ $KÃpãˆq÷Ê}(V-9Sš$8‹…ªCØÂñ†œâ@‹â„"}Ÿ’.?ô¾X[hŒx\E„%HÔ§x0Ìn\O9 ‘ÄкkÈM$`Ãig[R¯ÈZ\¼´+>Èéz9Äê ‡¢²K‚î0òÙ¸[ä{k;ÈeÛ¡—"çOD$Z5¶êlå©x_㘲ÔxÇ0\©`5P× –ƒzZ~Œ´ê‘ö»–¶-ו÷vªÇŠ¹¶Yvw8€¦@˜,ôU8¹‡;WAk} E¬œ4/`Àt¿¡ÕFefÔ§÷GcöDûU¢BÿŸÂr¨\_> ^ëDáÌ¡qæˆðGëá^5õö#Òe#Oëøåóóë'äQçJ¸¾y‡²ê‰&ð+`UnœˆgÔ%Ý›/syR¤¡Ã‚YÜ\4¡£`—cN8u2?ÄaÖtZ4!ì›úHˆT>6¯ûi°×òŦh[äLãQ…Âw¨r¸º^£}¯MB—˜,R“NvHÙg³5(o7¨·Egb¯~ONOp?ˆÊ º¾3¡å“þɇµ.‘0Wâ7©òÓiÈ¥·2ÉZ2q ¿Hå¨Z®ÒŒ¾pÆåÙE2¬ÌF‹ý#$íª¨Ö;ÔÇkP#™ºa›°Õñ×+]ä'\Ÿ–yìÅ`ù nrxÔ¨-**Á¤?4l;´¿–aå ¦Ýú‘ÃöÖ ÛXu_ó°-´ùÃvú¸Y[è/;l÷ôúØþGÃ6(á_ +{6 +endstream endobj 680 0 obj <> endobj 681 0 obj <>/Border[0 0 0]/Rect[442.14 476.28 483.96 489.78]/Subtype/Link/Type/Annot>> endobj 682 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[467.58 655.26 549 668.76]/Subtype/Link/Type/Annot>> endobj 683 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 641.28 130.32 655.26]/Subtype/Link/Type/Annot>> endobj 684 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 215.22 239.28 228.72]/Subtype/Link/Type/Annot>> endobj 685 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 686 0 obj <>stream +hÞìXË’ã¶Ýë+P^‘ñƒr9é™v9å±]m%›q*Å‘ 5Ó-ª‹¤<éïH~"™s’"ÙšŒN%‹”ªD +û8÷ÜIvX½þæ'ÉíÊjæDÎLn™¬ñ«ýê÷›Õë[É$ÛìWR1.2w¼È™Ó‚ Å6Ç•À*\Œm¶«5Bh¶ù´ú|÷î–eY'ÙIfºhçû2Õ†ëä™)!ÓuÆ]âÒµR¢PÜ$&• F¥sY‘üˆŒ5§8mwÞv,µ¸ûSêrnÇ›¶J×O568*(RJYG¡"3òÞ J™ñÏ4ãYB68eãuñós×_9í?³êÿð´myNá}„í MLÀo²ç›ÇÇxsWî»Ðú&]kÍeòKªpæw|€~^§z-ªöRÐvYИhsF.2?9–[Àró×K}J^¡>ÌŸåXû6:}ç»3ìS˜œÔ)j9iYÉžNÕ<ëNøÑW}W-xåÄXðq÷G¿¯Þ¿° ãæîlØZõ€gm‡¥êÏ)}oaŠO%J=ᩦb¸M5=8…Ç ;žϪzŸjFÉ0)¸½Aëq· ϦqÅ¥ìªSýŠµÞ³¿ÿcH†±Žg9³™ã¹a™åTcÅH5ÈÊ%™2¨fL.@©”Òè¢ÉzAaù5ÐgL K7ZjzªÀä©ÆYs5‰²V–2XBß12‡³?âµp˪±î¶¶#+¥ñÓTéq‘lÚù:¢î)@ 쩧oŒ¤©û]{”v÷žÑ|*4QLšÒe +t|kçÛêPGkcô†æ©©c† ‡;T\f·9ÕML±œ ëÑ”îà(Ü5ÀÓ-P~V)ÊéPß||¸­7)µ¹äùiÑDgå©¡W¯§Å*¥³G,$¶¨YpŠÁŧøjcÔ÷D3²Š¯å²~zDïfOÍiëÛ–:r»,kjùfiÓo®L`Šäý››»Øíwï¾ýæûæwn|Q*7VwÙù£¯;BDØÌ*¹¤;ÜK|ÈbÙÎôV{ɧÎ…3­”1A¯ªG Œ>A,äK´]˜ŠÒÌ\)xVdÊÙRÉÞ©ícÙ¶¸Æ÷äU„TÈHï.>°h°&",Ô¿’Ý´ŽÇÒì—&ª#¢CÊÚçº+ÿˆNåq,”,±Xä0V~„ˆ +{ÊZ¤Ì•¿Heó¥L/¨”ÜÏbyŽ)úUˆãW´ѧo†!ÈS‰fË͢ȯ°§ÉQ_$ÙÄv;ƺç‚YFM4P¹É¤¾`!xÁ’s êRü¤vƒ’·Ówe}8ÉÞùP#• ªÖ×ÛUÉ­v¹dNë~¤x¡™ ,“ŸBöf@,ÈÙ G醩€Ú†2ÑD¥ØH(#@ú îø9‰R†ê,èIAÚömà¢}•i$´6˜ü?ch ºÈÇƘ'ÝóÓÌZ`:sùÔùW!ºàD]@©OöXß× -ÿÝr6wz±ÿ‡d¾!ž«]ê9š „¿ÕW¬¸úßYƒ>DÖ¼E.-ÉÁDν0dW’h©3 j‘›©?§ó¶1åp­õÓ’78Qiœzb››"^ööKF®wõõôø ó¾7 ‰ãÔ†¾»3DòÀ×:Œ‚¸îã¸_Pbé–Í}vK4¶ææék¼1U™¬£w$p8Û¥YrOµ…€£!(Nàǧ–=§²Ò.L9Ó‚V‹Pªa(ö?ê­ëÐ{ŸÙ§ª»¯êøt|j¦çÝ‚+›-ÁHìCgEs<è˜)5Ï’šçñ*‰eaeÓàäטuhz%ÛžšÆãX¸í¼0À&|žô5¶2n.ëL1¡´ý•æ´@Áo.ç/Mr¡é¿Ð)¯´ŠQÜ» î/Ú> Šq÷"äz®í1ÇALtA½/Äû˜ÚL^Íì¨Ï¢VêÝèå~nya˜‚‰9Ës’{AìË+íJºŒ +s‹ž²/×ò¢ôIÀ“Éèm‰Ë”8‡ý_Çÿ·t¼DILuüRÆ›QÆ’ñ.ߟín¿ Ý R4qý GÑõk´{µG @‘t졪w!}ÂAçżÄ4܉…È£m6àìNÀ2ž€%ŠˆV´)©Øó0£¦é¤¤‰’?Ñ1œh0úÜÆÄ eG;&5ßmyôD¨.yEx¤ð€K¢h-Aåã`ÃSã[xìwÑ3˧[ ÿÒ ­$DMC],ÉÕ*PоóO¾Þ…3ÉÇá_ƒ¼ê[§dM/5ñ¯I2> endobj 688 0 obj <>/Border[0 0 0]/Rect[384.54 672.24 426.36 685.74]/Subtype/Link/Type/Annot>> endobj 689 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 690 0 obj <>stream +hÞÌXÛrã6}×W ò&†|œØã”S™LÊVòÉVŠ–(…™r‘T&Þ?Ú¿Ìi¼z<ÙÝdkS®’dáÒݧûœnJ²ÃêÅ—·’Ú•Õ,3–d–é˜5åj¿úb³zq%™d›ýJ*ão2KEž±TÇ"Vls¿Šq‹ˆ|·Ù®Ö"ŽcÍ6ïWoùׯ®˜»xqñÙgìÛ&’™ÈøéÐ÷÷U}`×uW6ûb[FÿØ|SÚ›R¸Þ°µÒ¶¹ÄýáÞɵ7e±+vQwÅ6R1ÇnN箪ËÖÝöj³2IŽ¬0– ¥ó~rO¦ä(ù™zG_‘N„æLÅ2Z‘ò4Z+çJ$<‰$WÑZ¦©Éù·ø€ïš“߶;o;Y|ú>J3ayé¿oÚ*Z[l<Õ„¬‹4&¨”²)aEndÁ ʹñ¯ÈÃɇ”ùKÙð¾ø÷¹÷sÛÿæÖ¿ñ6—mEFðÇ!± ‰OÀ_bóåñè?ÜT‡Ÿ» hË&Zk-$ÿ5R)ê¬Ü‰¾öCõ¦ÊU¯mûò‰Œu›Ú ‰¢Iï÷U¤%?¡LÖ>Ö]ñ«ê}¤2ÿU2¿Ç+/º +õXܬû¹dDÐ@iÔà + NÇÎïWüõË‹›7Ñæ—‘öÚ/;1ƒ”dn7k»¢+ï˺ûœµeÉ>y]l›Ó'tÁê,&A0 ÁI¯ÂÆ•gQ'Ê +z¹Ï–ò–ªÚÅà]Kf®‘È)Ú!ŠÖ°È_Eà¿zqÙ‡MIQÙDÁèà’2átQÎÅ¡D&÷”?’ã¥)ë¥ ÊXÈ|/˜ç»ôyí7­aÙ˜G§HüÖ%Ïo ÉEn½ŽÑª„X,Àƒ\LèÜ[^Õ;–‘åûÆþÍùþâîÝU½y|(ä¾øE PIbRÃKœ:–ûÂŒc¤ÍïhóOe_6„µÓèWã9ûLJ™›Rä&Í&¡óÏi}-álùžØ¸ *¸ +V‘-©‡dkýþúŒ­÷‹Š}Æ2˜JùÃßµXsYtŧ ó™HTš.b~Ëw4wÅÜ… +Î’©?F³ŒÏˆlTÊy=(Ð[þ-W£[ÎDvî ú†2t 3‡_Ž L=`3¢ª]›N¤™wRä7ewvJÊ®©¼[V0˜)A²¢c.P—®ð©â½À…–íʇ²ÞÑ p +œ$ÿe>J IU0´ “– fÆÏìÜBÙ‡÷‘&'NÄYÃGhµÅ÷t?9Ôî†ûŸ?¶EÍîJ(KˆŒ×½îÐâpäÖ™0x=mkæ± –Á«ò%Æ’0ÎñÕ7 Ša„íD[Ò6LÔ7>2Ù[3åd0l½á€·ÞSœ¡e8ã% lù{äÔr²ò®ªw-;í½‹„å;Y›jf(c}oqÄÆ¥Ú]û,üÄL?ÍYž¥T{>kððCe>Cž<ì¨1í*ŒŸv)É£˜w¥ 5ë´Þ ž@«†ÎëZ/*w!Á '«jÑû:vj;òP&ˆjš=\’øVvÚw%’zåNtÄ8<Æ䨃UÌã´¿o€ÔÈâ|’”ÑqÜŸÚ•mu¨½·óÊÖÂ)<4Ê}‚LIÚHB—‘“VŠ.CBåúŒûÔ`¦GÝžn«®ô='2ÐOJ«Ë9ÕBçd®×BÕ9&ÍÓ@ñ +VQ#ÜÉPFý7 ä!º(î‹™æ¼4 ÖÎnNñFR'$DŽx¤aÍi[¶­cÖX´_™>ièn$b·×›W³4®˜?’æa6rÅâ’W4Aò}]®Ì2SJ qQÉ͆Ÿà«¥Yf¡®Ó¹‘€ò3s7i>ÊóˆM?T²í±h[ª²Æ'du‰~5¤Kýã\ñeå“=Œ:ža*éM?t÷âDCè¥Ë¤Q)‰Ô&²1ÐM\à-â‘{o”}kÝ?Î!^ö†|Î0mW‡ŠªDƒû³Æ [r9Êz”i0r—¼ip¸FYÓl4Ww~Ø1QRöŽÈ©#·Õ?©»ç¼üíãh9³.gÖÁÑáaR}M㥯n]Ž¾¬ì»øñ\¢ÞÿZ`í20š§Ç°~-`tþ(‡ù‘2:ØÓAØ­Sj†:æË'aó'éí¼¹¹þòú›…!3ëÞÏ> endobj 692 0 obj <>/Border[0 0 0]/Rect[442.14 672.24 483.96 685.74]/Subtype/Link/Type/Annot>> endobj 693 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 411.24 219.66 424.74]/Subtype/Link/Type/Annot>> endobj 694 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 695 0 obj <>stream +hÞÌXínã6ýï§ ú‹j+†)Rú™f&ÅìÎG‘xÒb¡8²GMl’¼3yŽíKô-{.))’œ™v·EÀ’eŠ:÷ž{Ï=Šb›ÅÉ÷—Šmš…ÕÌÉŒ™Ì2-Y].Ö‹ï–‹“sÅ[®*a8¨Ì‰9Ã&ëÃ'tÊN‚éÎWE¤Ðü%REq*wQœ$2O„á&R\G±r.Íù8Áµz–ÝV-‹,ÎÞE.–—ázÝTQl±p¿£Äú@%e*I¬£TŒ¬ƒAäŒß¢T¤œ086eÃqöõSÇ/\öçìú7^æ ÐVd”~Ù mG€2€ÿË3OïîÂÉEµyß6h€¦¬£Xk¡ø¿£Ä¡ÎÊÑ—~W½.ñÕkѵ}ù>ö1~·ÎŽzxè3pŸGZñ=Ê´fÍî->²j·Ž’,\£Jæ[|ò¢­PÅ5ÚµïKFýÙutÚ‰‡-í3äÂô5êSÄ_ž]¼aço.ž¿øþu´üåQ œpùøÆ´»1Iý¬i‹¶Ü–»ö[Ö”%ûêU±ª÷_ÑÈ‚1‰ Ö0ÄŒ¢OaåÐã“t˜L‹ÜŽR\ÒY">ÆÒºç>UšÖK¿i8¡e±Î„õQÏH+}WüRõ²ØmŦ¥k"2E·ã£.wsaT‰°¶Ë†'‹‹€£Óè¸[k‘¤é3¯KüÒSÖw´ä°W39êAjÅCð]Ä„±Úµì®Œ,_×>»—U[ž]ßžï–÷tù'Ú@Hd‘´H’.>Ãw庆Bc ‰ô-­ÿWÙ—†íb‚îiŒŽ>ƒ!ã¼}¸Ÿ@U"O]6ý[Ÿ[À9T~ôÜt¨€ì¯gÏ…Ô¨ö鳯¸WYÞ–Ó"Fnefž€ „ÕÙç ¼m(Oõ³¢-æ2açŽÜAñG~Š&0iî4É*ùŠŸb +kLͺ¦™¢Á,AÇt“$¡"r?œ*l9: ÊqÅh9šZøl4¼2¯Ç¿Ú Âõr&©0nÔñ£Ž¢z— /À ¸€îñfÕëLŒµt‹JEÎ[¾¯±>4ì!Rh¾?°vÏ ª_ÐŒ9aGo)ŽÂ Á]?°UûZÐßA‹uˆ3];v0>IÝ8¾¯÷›HI¿)Œ/èÖ-²QzQHAedO)fg.XÁVûº.aV ËoÅ”Ò2.="6d´A"?Kïľ†<½e{ 6±l"J°Y°û}E~ŽRWÌ(EŠÔ‘üœV§Ÿ’þ)Šn$1£à¯£Dñ‡HB-¶_³\I|ƒAFˆs2b=ü…gƒ¥¼a„G0(díOQýÈ~ ªš–`*ôé\âÁ]!ë¶Ü…¢»ßÓ-Ð=¾cðú{jW¤ý'%óY·†çŽ‡»nʦÚìÚ©äjá§øógô΀¢±¦›¢Aw‡ŠAe†}Äñ’<ÎÛPxôEsz“Á·Ûðí]U@å°³6J3äÙ_¾?²#ÕO²œ`tÌÖcëRÓ(ÔMURwhr)¹Çˆ¾4…u½ß†M}œ69²c²óp?¾{qz¹<=û社ð‚5‘ä䨜¯!댙ÇuuçE:ƒH{¹ÈÜ“E6á(sQwc¡}yaWÏ1|•Ìç’œŒ¨¡idf‘z4\î4ëãe SŽ&áf³ ÔÖ¾›Øê®hª¿:PA†¨8ú‘Cþ/¦ƒ)T\Ð"dßú¶ž½ÿE~=ðüúÍk¸ÖÓ·/—o_>ŸÅ®'±÷/B‰{âÖÿƒ$V[LAHÉ–!“¬Mc ”†%&#Õ„ÌeŸM*zžQ¶sÓpʼn&šŽßþ:ük€î1ŽÍ·$Ô(ýwàxóÜÒÏãýeÔ¼˜ÜMdÄÿïâä)ÓïÈg¸'M¿ùØøfƪáòàûÿ Û¯^g®?x-ØÖ¡ÌÏÿ·7ü G=7Üh"0Ÿ9î­wÜ,W·sOš(›?f5UÙ—yÿ‡ÒNõÿhýQË¿ 08‹™ +endstream endobj 696 0 obj <> endobj 697 0 obj <>/Border[0 0 0]/Rect[449.34 393.24 543.48 406.74]/Subtype/Link/Type/Annot>> endobj 698 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 132.24 233.28 145.74]/Subtype/Link/Type/Annot>> endobj 699 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 558.24 243.36 571.74]/Subtype/Link/Type/Annot>> endobj 700 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 701 0 obj <>stream +hÞäX]oÛ6}÷¯ ú$­5Ë/QÒc×4ƶ+R·/í0(Žì¸µ¥@–Ûæwlbÿrç’”,)M‘bë°a"+²H^žs﹇‘l={øÃKÉÖû™Õ,3™eZ°¦œ­fß/fO%“l±šIÅ~ð!³”çKµàB±Ån&0 ÏËÙœ !4[|œ½‰ž>9e ÏØã‡ïßg/šXf<‹êuSìv›jÍ~¬Ú²YË2þeñ–Ò~)…é6—\Ú„-N0˜w0íYY\” {\l·çÅ2V"zÏÎêC»©Ê½›íÉb–˜[²<±Œ+ç9ã&ÂøÍYÅSÛ}]seFßÂD»/±é’Ü‘3|i²nÿžL)PŠ3õ>+bm¸Ž®™2ž'<Òx®”È7‘‰%~ç2M“Ô«õ!UW«\$4,j¯¯âÅ»cMKžç®¦¢×æÃ<Õ™_ä,žèR×ö@ŸEØ¢Òø¬ÜÓ=k/ýó’… ¿@ÂM``R?mËUó¬øô²-–ï_oŠÇçï×Wå8:€ˆðze¯d60ØÒi5g‹ËÍžAxjÿàãž]Ç*ÁŠWó<:°¶fü# ›@ BñBÜ¢Õ5û¸i/7 4ðÐøíÌ¡ÖÅo>ŠG†’¾jêu,æjb¨qTĸìNÑâ‚ð6ž£ Š6@ÅtÊŠlY7M ±Y%•9Ôæ=3<ÇR&MÏAfLnŽï¼TÙ1Òcêe0ÄP)—2¹ö³²=Pv•CÀ³«zCƒP.&Yó\&ƒ ëQli0Š%sÙy–œTpÚ·Da +=ĸ,˜%YåD)Ôõ4F?L¸4lW7%ÛT+ªËî!^¤?v1½_´›ºzÀöey$>—Ÿå=”àoƒ KyDÛø½+x400’X-b¹æ€[Ñw3þ°ƒ ¼©BÁ»•ºZT®#†þrU¬K–eÜ#ÕeBÎÇy¾(Úb”ŠÛ/ðð’AtÀyWÄ:8_ÅZSu™…r+]Ç"jË=«Wìœ_”+‡„¤¬šÈ€+éB„=¸`'g¯0ÌÝ¢VÀC Îö-E( vu#‰æ½žœU[V>ý®jAÒÃ}ÖaÕ®íeé@ Õù”mÝqàG]”ûͺòÑŽ`ÅóÌséîȈXí!6Cu÷iCê÷¼®NÊUqض¿Ójƒ{¸’«‰ï5ƒ®–gÝŒ&@`2Ó3äEÍF›2Öä]œâ§xœ9hWM½ó»•)ÉÉ°–<ÿùùÉ“ÓG¯ž.Î^=}2)S=(S“vâ\Ÿ¿# ƒžÒRdW›­ß\ÎE†DŽs÷JÑ„FÆ7.'+¨Ï\LÅWv´è`?Ý2Ô„ô&K©ž#“ ÿ:6±Üû8¡W£dºŠ°UÖ!K¸F.xŸ^4©t_¯zD ½‡í¯«¶øäå(óÏ\mípõBÄŠsxç½ Y–Û쯒’’²;í5µhKbÁËà=`DUìœ !ÅÎÛò^§oÆä\†9ÀŽbt'?#p‰ÑÔøtžö¦¦ÙSmpx1Žéô«ˆ6S¢©v~O™þ€ò°°§Eµ>Šžù}‘Ç¥)«é‘š“g72g\öÔRFm3ƒ½tû—Ðús +ÝÐ9Fá$bC=+Ga'±ÆúexykËÉrÐùBÐYç$ŒÁ± ƒÈ/8/õkOèÈK£» AM½—<šÂ¤7…I:ÜvôÀ‘YuÖ­+EìÁ hª'‚þn²:ŒVÉdñ7ÐS¢Õ$¹o Aò$÷Òm}´!4'¨Æi(k•¦7((ôȉfX‘™aoã±ÜeY%tê¦"ß \ú zz7~ìÆÿ¤Aµ¨›þ–é†?¿‹+÷æúëý¸{khÊÅ”Í$çK¿mîØöô 6é&¹mKG)D°ÛtËc:ï’Û–=O»íNÃuDZ¢)vnÄçü¶–Ç04Ù>j?Å>ñØRjAý›êö$-°Á‡N À¾^ÇÿÇxì|â±ýQ`z¦žšì[ˆíWùšéô®^dþ)À†ã +endstream endobj 702 0 obj <> endobj 703 0 obj <>/Border[0 0 0]/Rect[366.72 177.24 486.42 190.74]/Subtype/Link/Type/Annot>> endobj 704 0 obj <>/Border[0 0 0]/Rect[368.88 603.24 533.28 616.74]/Subtype/Link/Type/Annot>> endobj 705 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 342.24 235.14 355.74]/Subtype/Link/Type/Annot>> endobj 706 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 707 0 obj <>stream +hÞÌX]oÛF}ׯä‰lËÉ|qH>&N³È¢iGÛ—¤XÐ2%«±Hƒ¤6ëßÑýû/÷Ü™!ER¶7Z 0`Jäpæ~œ{ν’l·zþ·’íº•Õ,93¹eZ°¶ZmW/׫ç¯%“l½]IÅþp‘yÆ‹œeZp¡Øú°Ø… ƒ{ëÍ*áBÍÖ_V£Ÿ~|ÍRž³‹çßÏÞ·±Ìy5»¶<öõŽ½©ûªÝ–›*þuýw¥ýQ +Û§,‘\Ú”­_aÿ°ïdÛ˪¼®ZvQÞÞ^•›X‰è3»lŽý¾®:·Ûë•U<³pÊòÔ2®tQŒ›\ãÝs»‡pš+3{ˆ˜ÐíÂç1"…‹CÁðÐäƒûdÌÈN23óv¾-cm¸Žî™2NRžEYœ(% +ÅMdb¥q"³,-¢÷ø€{mã—]7=‹->ýg9·Qåï·Ý>N,65Ö9*(RJÙŒBEfäÁ J™ñß8åiD6dÌoÊÆëâëcׯ\öçìú^æ -Ï)ü"$@Øi|þ3_ÜÞú—ûÝMß¡ºª­¹Œþ« 8«®ùý€ÞL9ôZTíyAkªbWÓî–ÛÌðìTÑ®à6T~äÅmµmß]u} lî›úâêóëz[É‹èžÐk£»EŸ(ƒö68‚6wµbý¦—U'¤„_û*Ö^À™”œ‰éKǮ˾dÛ¶9°þ¦bá€4 ¸U©¼MÞ½ü¯›ØÁóSrÔHR¡<اèI¹Bù±†[áeVŒZ†²?Õb +ÊP´8 òÍO) @ð×—ÅjB +ý ô(ëÁ Ñ°v€)ìXrrðç¯êŸÊzw,wÈlkåuÎVõ²)ÆÓÕ<Üg!PZBÙ¢r‡é˜ 'Ëч² Óœ˜ÓpTJrmCL(»¯{†ú²Ñôwë}Š¼Pòœ j ^ÎD‹‚UÔ¥|^ßßUÿƒeƒc~]Œ •zôDýýÝÌXÔHšMýàä­ ´9“s'Ƈ2…ƒáß-èŒL±8þcÔ\Qf»E5Ïpw™g`4O&ûÁˆ¢9Rn),µ bÊîš= 8Àr‘`0ŽœJ²þfe}@ÉÎPv2ôûÇÿ60˵)˜þb €J +\zܲCÓV^"³ñ&Ò—CLëBzÑsZÈIJÇLEø}´ßÁĆ.ê?ƒVaÒ* ÓÆTåø¤J> U2Cc˜c±VñPi*­SÍîHDмú` y.¸°¥™šŠ'ó<"çXQ†‘_(–¦"1ð~+‰6XD}Õ±fËŽhÎtU^á!GËjvøwr¹ÎË59Ô½µ¾ã껪G~ºžÌ„ú‰ô 0É8d +Û¾ª=Ôîz¼¢§oŒc¡§h ¢X«‚íߺ®ºý®-ÙŒvϧ ePþ&¨)vžŽè¾4õý~˜#ÒœewûÉ1Ó3¶§ +<œ K3m… -¥ñ-¥qìeþÿD¡§QSȼóó1Ùy1’)c5:PCWTV‹ Â?Yœž¡˜ì(Ÿš%Ô¼ÉVcòáð³‰ÂÏ ƒÎÙœ€ tØŠ~Y€`Z7OL +–úJ±è»ˆæ™íæ$P£Ÿü4MÆÈcäò™»l +Ê%eR„Ñ€ž—TvÄ0áö‰Jô0w:´Dxv1*dãmªuæ@Äi¾nT0Åù¨ðµ°Q…||Xsœ²Ký#§Tp +"ýà|`yFtZ¸ùª˜1žô{Ø9éÒoa†~å“°ÉÚÀ…ZŸÆƒ>ÖÑ ±ß²ù0ÅÌTN”Ú~Ï4ùl¨ !õ­ÙÙTनrºôÀL Nƒ†o)Áãÿ 0c#×Ð +endstream endobj 708 0 obj <> endobj 709 0 obj <>/Border[0 0 0]/Rect[485.28 299.22 549 312.72]/Subtype/Link/Type/Annot>> endobj 710 0 obj <>/Border[0 0 0]/Rect[63 285.24 123.24 299.22]/Subtype/Link/Type/Annot>> endobj 711 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[453.18 478.26 549 491.76]/Subtype/Link/Type/Annot>> endobj 712 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 464.28 130.32 478.26]/Subtype/Link/Type/Annot>> endobj 713 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 714 0 obj <>stream +hÞÔWÛnÛF}×W,ò´lÂ5÷N>¦¾.ÒÄpÔ…S´DÉŒ%R ©ºúŽö'ú—Ù%i’v£M$šÚËÙ93gÎr²ž}÷ž“u=3’Ø(&*6DF¤Êf«Ù·óÙÑ'œÌW3.HðÅcË’˜X±HùvÁ*,Rðn¾˜…,Š"Iæw³+úæôŒh“ã£ã—/ÉEð˜Å´\Wév›kr^4YµJYðËü{ØJú­,¯IÈ7šÌO`ývÝÁ²—YºÌ*rœn6×é"½%—å¾É‹¬v«ÎgZ%p$ô!LÈ$ISq)8#˜5Ýïpj&Ôèw +ÆDºáÐ}Hˆ„À*îÎð¸E ˆÓz ?¤TLÒBÍ,µA(D”¦¨ +85AÈ­Õ ½€xW•~Ør¿hH`àé§ÀÆÌÐÌ¿¯ê< , Œ¬;i„¡ÂXŒˆ[ÈÂø+ÐLSÄ`‰_”ôß“?õýÌaÿͪ_ñ0G€4,ÆðG-‘i àÊðEö|½Ùø‡Ë|}ÓÔPuV¡”ŒÓßa!ϲ%ër¿Í^+\ö(Û'*kÕìŠØes„' ïE“þÌ?Âlíg',1¾ðWІI…+Àd¨%˜|Eó¢!›,0tU]äÅñõíY1?ì²ÔŽE°;fo„•t6Ùª‚¢†X×·8ø׌´ú`ZàP)Ô¦·öñ¦Ía7BÈY¢m;ÊI}…¿‡\2™@éö 9@ßL¶ÕLqݳ¬ñv9Œ-Ú¡ŸÙH²R?±ó5«:I›tº}Ì”°vrè+ºLAh“Žf¢X ||p#_ÇŽù°ÏÝ+úÄZ‚ά÷Û¬hê1Pщ3@G_ö!HÜI•ÀaáP˜dìëâ24Ð6ølö(q1…œ¾ ÷¶&Íßgîéh£áp«ûlÅòÙ†é3Bõz0KtR©ÛJmpÇý™ßä5Súw59<Á¶'MI èFÏ"t ªò£½ÏꪡcS —Àä** +){NAD›¬&åŠì¡…Ëlå+@ŽØýI¹C.mI# x•{ļ­³h©DÉ€‘ìQm¸VMVø¤Ú•8ªTgôFH¶»¶IØÜd} £dhÙÚÏZfu¾.<Ú±„Jæš0ìžÐ,Z—¾(Š{€„©³ +†®Üùn€‡¸›xà‘>K%ûæÜÆ îriOsXßù ‚„\¹®ªrëO;nO 4É4²>G..ß]œ^Î>9=;{>?÷öý8eøDAû$¶„–×Qy@àpg4ë«|ã*QSÇ·{ŸVmkéô÷®ß¶Éè‚¿r¹Ò.6êïàØão\™Vån"vˆ™wª/:ñXlÒºÆ̨œÏÔE5f.®%"+ÛV%hÛ“ô$l¿nBêµ5„a(îK°§ŒûÍÎ(h) @µ³U^ƒbÿÎUÊ’^Ã¥¦ä„Fɦÿ=ã +Õ½ ¦M† y|Qu†Ó`³ÆëJ ›^ctÈ^Fõi1„„q Ù>@~‚”çxøúB†ÅÝ &›˜È]Ó4\æâG–æ@üþ`ùÎ{è8”ˆì‚ñøEö"IÞ¤ÅzÂ{ :'Eßý³bz‡õJìÃÆ6Vl6Nõ½þ8Ùx–åÐΤòçI”™{ù8n¸øº›z^¸“ð˜?ð¼;´¼XäŸñ¼~w¸> óõ™n®Í?0Ýöyž›÷éÔ» ÙU¶sÝÚI™n]·n]·v®[;×ýˆß~\j|º¹\{Äo'É° +‡å#¯mÆNÛxŸ-¢{—í[š³Ø÷[ØzuÖ@êø¡É†v+&„º8KpÙøÏÔfÃMþ‹Øl®¿ÔçuL +endstream endobj 715 0 obj <> endobj 716 0 obj <>/Border[0 0 0]/Rect[369.18 476.28 398.34 489.78]/Subtype/Link/Type/Annot>> endobj 717 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[460.38 655.26 549 668.76]/Subtype/Link/Type/Annot>> endobj 718 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 641.28 130.32 655.26]/Subtype/Link/Type/Annot>> endobj 719 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[460.38 229.26 549 242.76]/Subtype/Link/Type/Annot>> endobj 720 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 215.22 130.32 229.26]/Subtype/Link/Type/Annot>> endobj 721 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 722 0 obj <>stream +hÞìXËnÛFÝë+Y‘M4ž9C.S; R¤…a«Ý8EAË”¬Ø’jêïh¢Ùsg†I;nQ4m…ó5œû<çJ²õìè͹dëff4³"cIf˜¬.g«Ù׋ÙÑkÉ$[¬fR1?dfyž1«Š-îf»p‘àÞb9›s!„f‹³‹èÝ«×,å;>:~þœÖ±ÌxU뺸»Ûl×ìí¶-ëU±,ãßÀ”ö¦¶OÙ\riR¶8ÁþaßÁ¶geqUÖ츸½½,–±Ñ ;«öíf[6n·W‹™QÜexjW:ÏsÆ“LˆÄ‡ç"v4WÉè!rB ´{ˆ˜ûŒä.9ÃÃ$ëÂ'ï¤%?ÉMëýü¶ˆuÂutÏ”ñ<å6²ñ\)‘+žDI,éRZ›æÑ)Np¯®ü²«ý²e±Áٱ͸‰J¿n6ñÜ`aµ¥Äº@eJ)c)UäFÜ â¿Ç)O#òÁ2¿)ë“ËOÿâ²Ï³ë¼Ì@žQúE(€0¡2ñøGl¾¼½õ'g›õuÛMYÇs­¹Œ~Ž•EŸ•W¼kýнV¹î5@íÐf +h,4ÖŒÀœR‚Üvuµ‹ð”<Ï<™v!ËúÆÇ|V¶{¸§°8ÚÆ€rÔ°‚íª Ažµ.èS¿kÎsl'z¼{ã·åjs:u ¥ôɶeÕe»iaXJ$düà°Œ ;-A ÷ê2–”GkJïëXK«˜þ×쮪K¶Ù:ßòÎŽ ì’‹hkL­ ']ÞáˆCÑnªí Ö”%ûµóÿ·®0‰\g̤–g ŠÃ ¨ÉˆžvP¡CaR‘sÚÂrœ$Tj«´ 9ICÈ g`®S.­çNÛ{ž„~ôŠvźd¹ä>§¡桪ª#ÝQ\mñ‰P#†é¸üŠŠÒ#aÚ¥ ùg—±’Ñ},¢¶lXµb{tòüª\¹¤æjuÕí,¥óü~ÅÈξÇkî”md»Eíš–¼” œO›è~ŸmË­ïÂ]E¯€LõðžCu°º¶½.­'܉|0£v(Ñþ­«²Ù¬·Þ[Ÿ½n–j ®Èî LËMF8r5ö„nCÕ盶<¾¼y½]ƦÇýn24GpNU7›ÇáÀé!b£MIý¯‰BR¢˜.ŸÖU]ÝùˆGH•‚õªço¯F=7?]HjÚË%ÆÜfëlÐP_mnájQu};HäùÑZúñ•îí¢^ïïÊ-x‘\°<}¸¨ÈÊ5P°éÝ aÍ‘£&ÐqTîXˆ +0a!›?03€[ÞMCMSûtÃ+—n#ÒMÌQzqÎø6q(ö[±x`XkCþqIG\ÄÕÜoÛâDFP;Ü (ø.¦{Ž™Xq Ôç|R[è ýwKkì)¸hKª‡§Ág”¼gj“sˆ”Â&c +ç`ÀÚ,{„užqM<)ºfîeAÞôÅô$‡ÐUÝ”HrÞÊ•é5äÑ ÂWl×{"ÄÀŸ‚[5€5½;$þ3°”²®rDüåvª]S.Fc,#îŸc,©m¸»ŽZ3ÑxµI'$8…¥tøT(ÇëDN ¸1Ñ%Àï#/O`Ñ…¤éÕ“@(PÎx…Äó -þ©O`'Àí:ïm ÐÞïF.b¤6üÂñ#ˆMçPß»— à@ùÕÄ.tˆÌäÄìEÔ@÷FÁQ»*ŒÎ,yhcU™ô ã˜0^ŸsS2Ì4k8pUƒâÀûxLõCZÖZSíÌr½ÄG‘Ÿú»"ÎãCŸÄó¡@вÇžg@7øßîécÂËãÖÝmaúts=’e]¯QóŒÊœCb( tÇY¬¥ÕÒ€ßטÚøz«èòcÃîé®Ú_Ò,¢I9ÖŒ6~(®ˆ>ÌfA“ݳ›öl@[aŠU¯ëØiA—gnÀÑX+Ú€y$Ôûd”ËŽÍÃî-¹K³eU×4·–áÓSœÑ Wîi9ÕLgɤˆŸ[Q?2Ëþ E=åAV[/«uÕÚËjý@VSSY­È2F‹SUNVËGe5¶7XL?4ô’+ˆ6§¥ÂÃý 1~Ûù9´tÊÙÿbú Ó Ši;ÓN +¿v…;[R+xµ›¹;$²ÓŒSZÝ£'¥v£æ`ê_ÒÚ§/ß~÷f‚áa©»o>aÇj2UÛÆ©í`ŽÒo„FKì'U4Øã{RËtÂ?»b‰|Ü7Ѐƒ¦éøW=Ó˜^‘Ëiæå´ÓȦ:šžˆ¢ÿ9ä} Ò€ +endstream endobj 723 0 obj <> endobj 724 0 obj <>/Border[0 0 0]/Rect[319.86 246.24 499.8 259.74]/Subtype/Link/Type/Annot>> endobj 725 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[479.28 425.28 549 438.78]/Subtype/Link/Type/Annot>> endobj 726 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 411.24 147 425.28]/Subtype/Link/Type/Annot>> endobj 727 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 728 0 obj <>stream +hÞÔWÝnÜD½ß§q5¦õÔóã±}YÒ¦**¨JnR„Ü]ïÆ$ñ®l/!Ï/Á[r¾™±×Þ¤B @‘bïx~Î÷wÎ7’m/Þ\J¶íV³,É™É-Ó k«ÅfñÕrñâ\2É–›…T,Á2ÏD‘³L'"Qly·H°‹H Æ–«E,’$Ñly¿¸âï^Ÿ³TäììÅÙ³gì}É\ä|·mË»»ºÙ²·M_µ›rUE?,¿ÆQÚ¥°}Êb)¤MÙòöûN¶½¨ÊuÕ²³òööc¹ŠTÂoØÅîÐ×MÕ¹Ý^/©)`’©eBé¢(˜0y’oœU"³ÃwX-”™}‡SÈ'Ú}„Ñ£K +爂á£Éû žÌ(áÌ<ÐoÊH¡ùS‰ŒâTd<‹b¥’B ÃM$yÅ2ËÒ‚¿Ç ÆÚŸ¶>¬zY¼}e¹°¼òãmWG±ÅÄ]Cžu–&ä*¥lF¾"y€AÑ!¿G©H9aȘߔϓŸŸzþÉiÿÌ®ÿái.ÚŠœÜŸ„$6@€¿åÌ—··þå¢Þ^÷* «Ú(ÖZHþs¤2äYµCî‡ìÍ”Ë^‹²Ò÷XÈøn3;)â±Ð¤Ç}iÉwHÓ–uM_þÂêf©ÜQ&ó;üçe_#˨?Ö_WŒ +4”tØà +‹šNB9ß/øåû—go¿}-:¾ÊOHd‚†³®/ûê®jú笫*öÅe‰UO;HÔŽMk•õK.÷å +Dóp;`þ4ãO‹µzÊ3Äavä09’Í‹W°ç]Ùl嶂ß7äm*Iük«æ”¾¤Ev´u þð@§q˜k¡Òt´Ù1¿tÎöóƒ hŽwè…"—hnBäÈ^Cë®xÝô춊,ß´Áô³7çÍòa_}à>WE‚Èa$D^¯°è¶Ú´àQ¬"*½¡É?VCül° Ö øâ©OqÞ?ìg(¥(Ò,Ÿ˜ÎŸÓ÷Xk¶œ;A 5à!þòäè Å•ê““¯x·rØHf;O7N·ú ˆx!?‡ã»ŽÜ×¾*ûòH.ŒÊ²G@Ö%!èË9%l’›)‚Ñ,fe˜ª"”a<òÇ ÁÔàúí²¾›£ë+!ç§óhè1…Ëo#ÓšTÈo•q¸¨ú•²„27üÂ;_*3sRØ~Zš>­){Ž¹FÉ3Lj¬82ãx|PHÖÓ°ƒâ‚-¯ëŽAÐw~à¾cv¼A5àX¿c ºC•ƒ +à’€# ›v_÷×(öaá¡eûv·¤Ÿ w‚­ÜÒ;oaLGÉ µï4@]³!d«]ÛVèUè>$Š’߈y€âàþc”L1ñ[ç}öÙ€ÅACœËdÀ\D±AV #Àÿþ@qlL¹Ò¸Q¹ßù/55Yðœÿ…óÈ"—æô©4†¶¾|&:¦"=ÆT1Mlj‡†CòžZšÂÅÈây€Û%_!Û\À%Ñ}g¤2ÂéŒ ¥¹Ûµ•Ó§l;‡Y”ª)J3žœâÔö‘ááÉëį3~äÑd…PhvAä9³'´ˆÖÙòX&S“Ší#f^)G9A‰u?M¡Q½|ªSö'ù(Œ2ôÉ<™„` úlŠŒ’M«¦õ¬¨š‘äG* ÃQ #%ùC”ð¾êØnÃh!â5Í9YÏäWòëõõšÁ@’­{¥rèª1ë¼ OŸÔpã¶ÛôUCuìKÐÅê銱yÕáTŸ½£|SÓOz›œíW­«®Þ6íœuµp*†Àº7jð%ÄÜ!•jô=éA¤…ÓÒ¾­#h +ô4²D7D]såŸrºÊ :aàôÁ©<ŠJC‹j”`Cp›ÁEŽÈ­ëë40€.£g7u³vQ{÷zˆ×ÜÙC!†ÎC´–ð²·*ä/Hì*Q*4bÖä]ÐÖ›DÔǘªp4#㔎¶ï#RW°+ªW¯"z4ªvÍŸ»äà ñ€æ} _ Iž¾ìIJÚ¥k”·À}K!Å¥Hž&Ú¤åFsŒÌY3çÒ ¨èòD—-œ]G°®öU³¦›èÎ÷‡Dèô³õ7ÉHÒËózì¤*µé¬ÏwS{l˜‘1Deö„ÊÆQøÍ:¢¢±Ð9$—dO‘Üà +×_Soí›qOoÚZHCgŠlVŸîg3J»lÒÏ‚%5„ ·epmǽœ™=âÉ'’ß|ÂTi(úî30®O:ð_h„¡‹BÈ'Za”ïÿ£^íšm\—íãFX)U> endobj 730 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 731 0 obj <>stream +hÞÌX[oÛ6~÷¯à£„Â,o"¥GÇq· MZ8n0 Øƒj3ŽVG.$y]ÒþåÎ!)YRœÌ:``;"y.ßùÎ…âd;yýÓ-'Ûz¢%1,%*ÕD2RÙÉýäb5yý†NV÷.ƒ?øâ©¡YJŒd” ²zœ0B™‚g«õdJc’¬¾N>FooHBS2=õŠ¼¯bžÒ4Úo«üñ±(·äªlluŸ¯müÛêP%½*â2å”넬.A~Û»´ùÆVdžïvŸòu,Xô™,÷‡¦(mí¤-V-¨Ñà”¦‰&TÈ,ËU)cÊ»çZÇ Ú‰foçuKEeôÆãiBMdâ©,TE*æQO¹1I½‡ð¬Úûm›Ãº!±†_w±I©Ž¬^ÕE<Õ°q_"°ÎQ†H ¡ B…f¤Á šñWœÐ$B ñBI÷=ú÷¹ï3·ý7RÿÇÛ\¤¦)ÂÏB˜àÊà‡èœívþDzØ>45$@m«x*%åѱ0À3»¡-õ{pìÕµ/$4lÔF÷’yÚyÁ¼3H] ´ÛmÙÔ!]µmªR–౨ùö%^ý~LiN³Ì¥´¸Í)HL"ñJ–¶9T˜ÀÖ2†šäYÒ<ä '<Ìq¥Â¼ï"æðik²±_l¹Áš™Ñv ¥ó?(:jì'ðð¡”îŠGHÍ÷±``^TC+ ~g=„Ƙ“Âuj?°!¸ÒŸcGP/>Ü^\­æ?Ï–·ƒðjª{:LWÏ|µ'u“7@× D=rÌ…®›‰tTÓa „ù-ͨˆ–ЮÓ(4SJ¶8q²Å±PÛ\ðêÆ‚Ò‚ˆå¥8 pg‚8&-ÕaŽÍß.fËÙÍ|q½˜Ý~X.˜ÀŒ˜õíUù1*Gá1*íçÕeý”,*ëÕ‡uàX50¢ž$êÞN`HNuL5cNy —WwW—‹%2dD`„¤8Éjºz9@‡ìéŠ} ¤Î¥œTÁ¢CÈQf OŠØ´]˜SøJÌ5ÒŽG%0fÿâ×ÕâæöêÝÍ>™½ßÈ5àûW}蟂ûˆ‡nòGûCƒË{Eþz6_¾HnÚ=Ûw¨î|ìºÌ“§ú v}Paf@VÝmÜÜŽ# ©•Kj=Hêp‹xšÔxml¯&½`ÏßÎn‡ENžœ›GŽžnùO+éS,ÞÈOÑpeMýE‚›!VÑÔÐÌû¿¹]gÒ¾Y ©0Ç~ä¬z–~/\7>þ]Ïb‰ExEßT¼ëÇ_èR¸´&'zF76Ìhl~l86L•H»î¨#‘:fDïê}ê/GÉ»ÅòI©€[óùé‚ï!%ÑLQ¥ˆ4)áø®¥}™˜”¦i»^S¶‹ +ߘêge÷Ó”¨±D …)wB±Þ +‡ýîWþ`±\,q +endstream endobj 732 0 obj <> endobj 733 0 obj <>/Border[0 0 0]/Rect[404.1 177.24 503.28 190.74]/Subtype/Link/Type/Annot>> endobj 734 0 obj <>/Border[0 0 0]/Rect[384.54 603.24 420.36 616.74]/Subtype/Link/Type/Annot>> endobj 735 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[467.58 356.22 549 369.72]/Subtype/Link/Type/Annot>> endobj 736 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 342.24 130.32 356.22]/Subtype/Link/Type/Annot>> endobj 737 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 738 0 obj <>stream +hÞÌXÝnÛ8½÷S½¢fF,IñGºì¦Í ƒ¶(wo:‹âÈ®§‰Hòtó»/±o¹ç#)Ù’“mÙ,Å"ùýŸsdÅ6‹ç?_)¶é®`^–Ì”Ž’µÍb½øËrñüR1Å–ë…ÒLâUzQ•ÌRHÍ–w ‰S„4øn¹ZäBJY°å×Å'þæÕ%³¢dÏ/~ü‘½o3UŠ’ï7m}w·ÝmØë]ß´ëzÕd[þSE4¥q¼e¹ÊY¶|‰óÓ¹'Ç~hꛦeõííu½Ê´ä_؇ý¡ßîš.œöj¹°¦BHNXÇ„.ªªb”RšœÓ»á9¢ÚLž#)”“"ËщÝÅõ—ðàr·Ì, øCø÷~6ÕG!CÆ1ÈR‚‹8àÊESš¡)#[XUˆ !Z +1£:vS÷5[·û;ÖnX²d“%)œ¶±r €|÷zy•-?ºTÄ5yš•äƒJEÛ_ÿÞ` +·»`‚@g½EæŽ ö±Kfáe5X '™T}ªÏisÝnwÍU»iÖ€¨›áÔèNò;G„6ŸOsÇn±¹ï»IÈJujÞÍgS«ÛºëX¿G„¬z€eU⊬\€.t .Qfcåñè\ŸqJÑ%JÃ÷€±–u»¾þ;ÂZgºŒßÒñ;|òºß¯êkàó˜ËYÉœpå±d߬–©¦ «Y××}C)þ‰uMÞ…<=£ý†¢Dt†9‰ÒiV„Oáäõ˜Šcw-@ßI?Ò[ªg´4©œ™¸F$¨O&æ ¥µä¯Ð³š_>9„àžòXhÚ7F¤SÝÞԻ͡Þ4ô57U m³›ó%ú]Ugí.¢‡iØó¸(/„¶c_ñ«PºI'V¢r‘åèój‰Ç\šW:üßîz†pz`ÀÃ}ó+¸($òIä$‰(_ Y·àlì!ÚþB‹Ç×¥p@„E@¦G€÷÷1vÖ—'aóŸèy0+*0û‰ÝŸÓ Á¾ûaf=¨¥ÙýÄ`\ÆnҲȤ³êÜ~%Ê2NñSæ;ÊYûs6÷ F{æÁMM.ôõÔ.Í©¿f“šO׸A®aåMVÄeºžÕŽ©s¢~ŠçÌQa•s´DÅ 1¯Ôh+¸‚pDÖA0b+¸ Ÿ-»Û· À<8„™“K‚ðuFÉǦ@Óp%VÃ%ðZ$œŒNÿs`Æ´KÐ 4³Ð$&’Žz„t,ºEƒšœ'´h§ˆ¼ øúªÌI3•Æ=±EåðO‰ëÿc™GÆ—vZbMFy‘Ÿ"d‡Zviõ'yßtl¿f(ÔŠ'Nói½Åƒ* +Úƒ¤UÚ¹kz”ªëÉMeàýFä£ÒF’Ö}³‹v¿§-àúâtÇønT$«©3J'=-«ù¬ÍjqÓtÛÍ.)¥ âžKjmJª|Rºj¢§j]ó ¹Ý]Ý×+¼G͉ßz+ü†”Æë$LÑÉÑ„râüLL»$¦MÓ&ˆióbZžÉۤѮ^½}ýîêý‹‹×ï~žô‘~"JÝà”1ßP× 6Lå)h¦.'áý¸¦õÓ$3K5°H ÌXã‚ÍiÕë'iˆÈûíXªéèÀ:Åø ÝLˆ“]Å9^âuÑÒ¨ ú&¾ìcʼnTµølˆì¨ÈeÀ¸q¤Æ_Ãÿ[/¢$ß%Ê aõŸ­¼žþ(t¦Ôi³JÍí ‡-ϨäÈ:Kid½‘F`ð|Ez¾ª„*´ýÎóÀJÀOÉT© ‚â°LÞ–F‰ ™Þ‡R>’ÊÏñ¢ïª©lwS_ÃSAèÏå;ý„ƒÇ仕·ëwDùo³† +endstream endobj 739 0 obj <> endobj 740 0 obj <>/Border[0 0 0]/Rect[368.22 299.22 394.08 312.72]/Subtype/Link/Type/Annot>> endobj 741 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 464.28 257.64 477.78]/Subtype/Link/Type/Annot>> endobj 742 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 743 0 obj <>stream +hÞÌW]¯Û6}÷¯ ú$mkFü–³I³è¢Šo^ÒE¡kÓ¾j®eC’›½¿cû'ú/÷ IÙ’½Iƒ¶» XE‡3gÎ ¶[<ûÛkÁvýÂ*抒éÒ2U°Î/¶‹¿®Ï^ &Øj»’øá"JÇ«’9UðB²Õ~QÀ +/4ÆVëÅ’E¡Øêýâmöíׯ˜á%{ñìÅ—_²ï»\”¼Ì»®Þï›vǾißmëµÏÿ¹ú;¶Rq+ ó†-Ö°ÕKØOv'fï|½ñ{Q?>Þ×ë\Ù;vw8 Mëû`íëÕÂJî,e¹±ŒKUUãº, +N^âÐ\êÙKÄ„&¨ðg>G¤ +q¨^êr<>y'ùInºèçwu®4WÙ“…È—†»ÌåK)‹Jr™\dΙ*û7ëqÚæ´Xnq÷&w%·™ã]ßäK‹‰‡–ZP¤¤´ŽBEn”É J¹ñkn¸ÉÈÇ¢Qv¾^=~èú‰Óþ7V?ãi!Êò’Â_¤6%@蘀?eÏçñæ®Ù= = + ÷]¾TŠ‹ìç\:àÌoøý„^'z-ªö#‰ÖÙI1‡h.èÙë§v¨ÿ•¯~ÂjWW¼²±è†,Ë•& XŒZÂâ·YÓìÑç6ÛvÿèýwMûúX¯Qù/îß½j1¼z:ú²E^À‚rAeõ«ý¶CcÕø;šü£g‰+l:ÊFyRðM ~6<gî +^—f:ɾ¢÷K¡¸ª@“}'îÃ~Ëëù$Þfý±F©fXB—]Z”ÜÑ ÄìÖd¡ømoº—õP_;Rr-»ñcÜê¹’Û¢ÔS~ÈcÀþ:L ±<ƒûmöd®@D»ÓÞ·C?w”$Gò†+óŒ¨sFª@òZҴ唹T ç._j4 þ‡q`™ôRáچў qüŒŒtDÃuŠÆ2‘ágÂÕ- ^sA›pñl"Ñ)h¢ -9[=4=C:Ä÷={ÊEEMîĆCaÆD¿…ã2kr§í{ß M½^JÁ ;mz䳉ÄÆ­ŸÐçˆüQöè §Ž»Ã.¡sÄtÔ9=ì”zÀ_Sq[NB}46Ô3CÑ)ØúÐugš*â²w|žÛ%¶³å,ÁºR—àö1¤¿•ëBœÅB•’í‡å†‘[^eäÒñÐF XÖŒ + 8Ä43b”"mͲËú!ÆÞd§k샸幤Öø*WôtˆÆ%/¹°¹Û©ˆ¶;¶?tž5í6ùJ¬BµT¢dûœÆê¡9´_±Þû1½šêà’ÝkHþ;÷Åë_(‚`r(“J3maœ‰ÂÇ–Uu$eVi.!ály.W3†9†&cPÇzçYUÅÓZÐ>7uÝÛ€o>–ѳB+ÌU2‘JLR¬·šP{ŸK,Ùà{vز:Ùrã·1üˆßuÙ¨†ð££ø #w8C¸ºpKèíý€¼ôy)(ØÁ;‚°|Au<Яš®8k(•vM Qbj¤À½J¨aWm|ßìÚèíœ\I w¤3]ÁcÚÈÍ 2ˆösªöm÷¦©ATál•Ò…Oáñx% gä­´J­}O§Ës¦¨:ˆ“ìDXk\|vC¼íûxúÉ5JšI‰xyóÍó+¸”“àV£f¤B*þ>GíÿD^¤Í ôã¶mCÍŠŒ‘‚ˆéI¡ŽŒâ\ªTlÔ]êQ  ðIƯN% nBe‰¸Ï£G€f +1Hp7ð©Öuß~:Ÿ¸(F»ˆÑÖ!Úø ~mb׫i€“D¾œAm<¬p‰>‡U¨1üu¬Š-’” ð)²‘_÷9™‹4Åê{|7ᾎ +>&©“æc9v3N¾ñ<\žR™ñ ö‹Q°*[â#_žÀª…¬ÜÒœÍ!ÄŠêíŠæ„3cG IN§ÑgÕSž£+›É‘Ú)Ï^"ßÖíîD,Ù›òäæÍYWfR£w /I ÆSƒé|{ýIk8aa"·æ„°ŒïÑÖå%ÅA€’ö–pPi:ŇÔwäŽ(r>sÁMåf³ku 5'ÌEÝÚ$Cn0÷JÛ~hkôN§Ìg'®…±¿C\»OÓÖÂü_ĵž‹ëˆ¶A]"õ溷ODÃWÖI¿é[q˜ +õ"»ƒ5h¾³Š&ØåTÄ5qÒÐI¾áÛÖ^w{1ºŸJrûƒBº…4¸î? €'}K +endstream endobj 744 0 obj <> endobj 745 0 obj <>/Border[0 0 0]/Rect[398.94 476.28 452.76 489.78]/Subtype/Link/Type/Annot>> endobj 746 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[453.18 655.26 549 668.76]/Subtype/Link/Type/Annot>> endobj 747 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 641.28 130.32 655.26]/Subtype/Link/Type/Annot>> endobj 748 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[480.48 229.26 549 242.76]/Subtype/Link/Type/Annot>> endobj 749 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 215.22 153.66 229.26]/Subtype/Link/Type/Annot>> endobj 750 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 751 0 obj <>stream +hÞìXÝŽÛƽ×S r5lÌñüpÈá¥k{‹.lß8AÁ]QZf%J ©8zŽö%ú–9ß ¥›-‹ÂðŠ¢†ßœïï|g¨Ønõú/ß)¶kW©a™t,q)3’5åj»úózõúN1ÅÖÛ•ÒLâ>”ËDîXf¤š­+ +B&¸·~\ÅBJiØúóêÿðþŽYáØÛ×o¿þš}ÛDÊ Ç»¦8ªzǾ©»²Ùeôãú¯ØÊ„­4Ì[+¡RËÖï`¿·;3{_›²ao‹ýþ¡xŒ´äÏìþxl½µ÷ë•Mr¸” +›2¡MžçL$NÊ$8—j‘¥ÃïðZèdñ;‚B11þG8=†$÷È~LÜà?ÁS%œYú·"2‰0ü´TQlEƳ(ÖZæZ$ÜFŠë(VYfsþ-.p¯9†e›ócÇ¢W£Ì‰”—á~ÓVQœbᱦÈzO%…Jë4£X ×àìŒEVXN2Œ²ñóêëo}þÎeÿ«àe>&ŽÂ/ûÈ´O€JBþ+{¾ÙïÃÅ}µ{êZt@[6QlŒPüçHg¨³r#†Úï«7Ó¾zS´íÔÑéuGcaš¥‹n¶ä‚$øü窈Ö?Mí©DžûöL”¤Œ”D¸Ãî"WÎþ4ìplJVÕ[ +âp“Ú+᢫Žõ+Ö–%ûGéŸC¤‹ 8–ÚL¸„%R¤Ž‰TŽ<‚O‘Nr#(6aR´=oØÁº‚× ÝM.Srså™0NúâÒ¾¸ø©Ø•,ÏEQŸÚ¸Ï‘(t‘ÐMÑýVFõ‚o¥]&SS*‘Èmd â'üÜ°‡H+~‰$ïÊ–·ìŒ²Œ7åÖÇG™E²ôè¨òHÀÖFpûùKVµt‡¬´¡T ÀÛ™3Iúhm»²5u:Ò#`F3b$DÓïÚ×`÷TŽq–ùlâLûP ÃS›²­vu@¢7LFCãÐ'Ø_¡›l’¡ ¨6!ÈLÔOƒú¹?ï#,çåÛ‡ç»zai„ ?] ÄE§Z=ÌÝe0¦Æ£úW ŠªŒ ™;Xb‡ˆ¾´!ÈÛæxþ/ºP¡|õm~üæÍý÷Þ¡ õâ¾dØñá§3¬ªý.4²·ÕÞ·¡ã>ÛagÍÍÌÎUuÓ³E³;Ê”‡ªòÓ pzä±7Z{Õ,ö†J÷ráæ>+5èýxÜmKÅÒÐæ>¸Î‡VR`„UrgC¿ÔE á8˜žºpl,Œƒ†úHƒÚKÝ¿rážo8" @?¬x€¾£y•·õ6åíw¥ì¦Ú®èJŠt`º¯-FáúŠŒ€éLîDŠƒ q ¬ç4ƒƒyî^":ëåôÔ¢R{•D»…$|É ü²¡ø@nÔ“¤h|2> +Òü}„"º{ýnClpWÎ%#ÉÑ‘Uu_“Šzw&º¼/=×[äš²¾V h•ßtÁ²íã°(ÃMœá ÿÎ'sQžoiÐtAÒQbb'}p´/ûOÄL å™ò"zv¸œÊxÐB"º$ø$‰Ïw=¡@ã)’ÂÏ´øïc_³ÜnÒǾ\–sMžšphàP_ÂbŽæ8îˆÃx˲ ›‚`".hŒpŒó‚¢%ëÏ9Ù3 óÁìœv „zÏ]K(òv4O¹xy(ÏǧvúZe9¯²4èý–Ô-™¸êû‘g…F•³„ E–O²vܾ?Þ°Žõh0úú s§±c¸ñ¹eœÊpªàgâP?‰´ŸDš‡1.%åøöÂ>WÝhaxââÔw‘ +«IK€_éË¡ï{ÚJ]ÏíÁ–íž +¢MÀ#„ìñØ44™û££BGòg±LÐ  +Òm¡‰oÉU¦qFWÎ]I)”Fá`÷oe±Kg¹ûç™RK]L¬w&ÖU± ªØöªØzaG´8éb£ým?¯%—o‡ˆ&9Gg‘C6I8àI<;‰37ÓÐ)ih¢D/žÕ 3Å& +ÇxmèAW3~£“ü|Ì &èNLS¯›•4ÿÎ$á¬@esáœ] ç(3S5¯6“t6üòEÑŒcWž³ËS#&xÿª&t‡âÏBÊ]U×ô–ª¨7¬Ä¤(¤2j®§äH7½  +ú·°Úyz,™$îð'p@ÐwDk™ï‚}¸£fæÇ· ½Â'©IénúâÂQƒ{ULüû™è7M¢•~™ÈéB$MŒ2+Ù¶8€ˆ^Q…Ê/‚ò,@Å~ØÿÔ”-†öÀ3!³Q¿²‹T² eL¤ÒSP‡ü"IBl)ÌÇzŠýóE!N§ü>_ÄÞôTÞùb:Þƒú—2 —_¥Úº +endstream endobj 752 0 obj <> endobj 753 0 obj <>/Border[0 0 0]/Rect[319.86 672.24 499.8 685.74]/Subtype/Link/Type/Annot>> endobj 754 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 755 0 obj <>stream +hÞÌXÛŽÛ6}÷Wð‘ÚD\Q¤Dé1ÙKÑ"-‚“—Ý¢ÐÚ´­Æ–¶’œÄèõ/{†ºXrv7ÚÝ6#^fæÌÌ9”%[ÏÎx'ÙºžÅŠ™ a:‰™ +Xeg«ÙëùìüZ2Éæ«™ Y€ø’‰iÂŒ +D²ùnàh<›/f¾‚@±ùçÙ-suÍ"‘°‹ó‹/ØÛÊ“‰Hx¹®²Ý./ÖìÇ¢±Õ*[Xï×ùO0¥ZS!Ž˜/…Œ#6¿Äùݹ£col¶´»È¶Ûûlá…ÿÈnÊ}“¶v§]Ígq(LŒ bÅL„*MS&tº ÏEì&´õd˜Ðå&ó€HêpH&uÒ‡OÞIC~’›¦õóçÌSZ(~`a =?†Ïà …æ‘'¹ò|iL”ò·àYU¶Ë–ûEü£žIDÌmû¼ªsϱ°,Xh@H…al*r#éÜ äy‘ˆ8ù`X{(¾OþûÔ÷w.ûoNý/s P±Hþ K@w ºMÀ¿bóÕvÛnòõ¦©Ñµ­<_)!ù'/4¨3»}éwÕkBW½1º¶/ßcc>6ñ¨‡]‹Å­Ïמ’¨»Ò£ÏŠíÊʲ¼Xy°7ØbIÊ‹Vuíæº5ž é dghÑI+¦#ˆkÕŠ+Û× 6Çf9É"‹Û-X„æ3OÕíñ~wþÓz¾È +voч]d¼è™l@ÏN0l;q¨¥g€”½,ÊS %™È¢l6ð^°;>ßä5Ë Û‡m‹.cJS¥u,k̦ÜÒ¥ÄåÀP ß’í¬mFˆ·â=¡Uö}^Ù%Vàìê +©EÚi¢µÕ09ŽQ=I£0uÀØl±éSwç‰I[ö˜†BºD;=‡éÄà´0¦äÎi劃ï+vï…’¼€7(‹rEUTùK𵃌9B6u™rG0´z冔šîʺ!/¥†óϤ‡Ãhc J2ZÒÜŸÔxÇpmRUÜMi}/K$µAz +¸šˆ_Ú:_­·SîPÂ.èÃÀ ÒDh J™£|©ðoùÕ—l‡ÂÓtõ«§·ã I@—Ú3ŽzƒQØÕЩ” |t}ªøg\POÔ­ÖÃ]^ñ/žOe Ö՛aT˜w½ ߥ~D×CÝÝ536¢xBdhJ¸¸&ÄݼNºFº5-À@˜äØ4­D°‰†ˆHù{±Éª³ÉêHs}™…©óGeÅrzœ¯ê J¹™Æ<8Lêã¤gbÆ™FcOÄóÚ/Q¿êéßeP¶EU¾¶ë¼¸x ^ê1Âó‘¼ݾ|êFÀÚ?ì`Ç¿EYÔ [lð4«ØÙ.ƒ•_²]wÊüì©}}ÈxJQ»F¦ÁÇþì²ûµZâ*ÒTõÁ¤XããÑBC…3÷âJJ²æx0í÷Öc¢©Lú#|“ßW©_F·dª»*–Ó +¤ÛÝiÒƬ:`-n[„ï$³¾ÛÛqÏ™ƒÅ·Uù@WrMÆšsIcß6HûÚ‡½ U…ÉW–²|E…ü„Ý#kM=øf¼æ‰+ ÷-¨¹»x§…>1;mªÛøObŒ_öî‰éèQÓß™d ç[þ¾ððòÀQ÷ôJ®ø¤©øóp··=²û¾¨ì"_åvl˜~«PLhk ê"Žoô?ShÑëK7Õý”ÑOªp:©ƒ~çß Îã+¿ +endstream endobj 756 0 obj <> endobj 757 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 758 0 obj <>stream +hÞÌVmoÛ6þ®_q)0€LmšÔ %!؇Åq‡kxÚö¡Õ¦m-¶lPr³¢íê¿Ü‘”ä·$° ˜òAò‘w|îáÝs°ðßÿ,`Qy2€˜'&Zysï:ó¯Èæžðã¾D³48àŒû­=ŽQÑ–M½>ãœÝ{ïÈ£W±†ƒáË—p«©HXB6 ¯×E¹€×e­ô<Ÿ*ú{ö¸£| A_0!#Èn0~÷ ìXå3¥a˜¯Vïó)õ9¹ƒñfW¥ªl´QæEaŠ)II`~¦)°0á ID i_Äq”’[ü@›Þ¸m³Ý´*ñëW'Låìº*h_âÆMi˜µ™rC•ïËØpe`$ s;ÆW±ˆ 1¸ Ð½O~>ö~æ¶ÿ&êÿx›½€@²ÄÐÏ› ಹº øWÎünµrãb±¬+ì€JiÚ&ÈêÇXgjÆÚÚoª7ömõJlÛ}GG®ÍR–JWÊæ7˃„ûŽæؘo’Àg0 ’`ÛN7Z+¬ÐúãVÁ}^!0²Í«JÍ ({ þÚâ*v¸Ù]/•Û·RóâM>Å—äZ-Šrøþ.Ã…}§ ‡î°bnÜ'Ä:_|»÷¿Fûÿ„Â'wŒcž¦¸iÌ6Ž%ÀVe=ŸÆŠ +J¤>ÛÆD3néµ1ñ:Ïb¢n¡‚嵂mnzR’rÁ&“òÅ„^Y¿þ#Ž ­ê.A¸ÍÙ¥g¿ÐìOëiÒÀ{åI¸÷tÜ,µ#úÊÖÄÍË\_ÂÚ$ñ6_«§È(ææü ¹èvÃçÏpq¹ÎÑÜX:B×ÃZ¾ 4g¡Ùp‰Hz¬Øz@bNX9 ø<DÒð›.ðÔ{[^릪¢'²ÇÌUä`@ó7•ÚÛóx†áâ>ƒ˜_}9žYûñhÆB6£ÑNÃVýÄuR†ç4ð™OPîC‰«Õ†Šß›±8m†šHÑrÓ´‡ ÁbáTÆÆZ·q Ž>Xb/æz±[«%bƒ—Tt¼<ôºî&غ™¥¶§þPα͎³8éôÍ7~¤w›EQävØqM>lŠÙåQ  üv¢‡vDa¬¼œÇë“‘û7 î ‡G‹_Poò:?:'f"=‚ÂNH8‘½G §<ÞV'yïÌ +·=Ó›í¨œ ¯Q‰:–ÐÞeÅ­÷ êK lk¾÷`_tO—¤9±Îa×$|Þ¢ƒñ.ÕôÎ4y§º¦à+Ê 4š}ìÕÊÁÆê×ãÌÍ&í‰}TÎEµ‰Ó1Š $âauu]z¢üS9MDJ:6àéø§[½½qGâÊÕSz®8qÿ`BU­ +endstream endobj 759 0 obj <> endobj 760 0 obj <> endobj 761 0 obj <> endobj 762 0 obj <> endobj 763 0 obj <> endobj 764 0 obj <> endobj 765 0 obj <> endobj 766 0 obj <> endobj 767 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 768 0 obj <>stream +hÞÌXÛŽãÆò¨¯èGÒq»›Ýì¦ý”Ìî6ÀžÄÖ~àj( 3©%)ç;’ŸÈK¾1§úBQš‹wƒ³$ÕͪSÕU§ª(ØfñêÏïÛ ‹"g†[¦lÁrÎúz±^üézñê­`‚]¯B2Ž¸k²Ò2“óŒKv½[pHɸÂo׫Å2ãœçìú~ñ>ùîÍ[¦3Ë._]~ù%û¾O…ÍlÒmúj·kÚ û¦ë~]­êôçëoo®B8òÂÁv#÷0J‡¢dØ¥lTN:…!í¸ÉWþ—*ÍU–'Lr‘.uf“.¥ä¥ÌT¢S¿¥0F—É÷¸Áo}ç·ÝV#K Üý556+’ÚÿÞMº,°±kÉ,š3¼*e¥¯I»°¹†`ü+Õ™Nƒa^(›®gÏ]?qÛï#õÿx›;€¼È,¹Ÿ‡àE8¡üüOtþq»õ7WÍævØU=Ô}ºÌóL$¿¤Ò Îê›ì,Œta\ g¥Bœ-KÊ£¢à1œ9YÀ }¢Òë¿“ÄÙ0Z(NÙG‚—>A~ü‚µØn×H<ҶĽ[ÁBÀRH_‹iÅà +‘Ö†8ÞÍŽË'ý)gºÍTÔªý p×´>ìAÓö²é‚ƒ—äcq:“.¤& +F«šùBñ÷JôŽ¥=7u95¢ÇÇ‘Ò]ºDÒž4:±Åyšš¥8‘oÁ¸¦¹½ñÁ ¢—¸T>úýÝLm”¥6*²‡SÉ\碉qT˜Î#Ç ‰ḣ7J¤Á†P‹7YJŽ¨2tx|ÓĬµr¦%Ÿh2$í0:º€@bâ•ÞåºìÁQ€ ŽY!YBÆb$*ιKuij,}ð½ew¸`¥¤{6EO_E¢âùSÜ2}ªÀ|çÄXb›ú9[¸g=qÙ=¸=Ú®Š£Pa§º^{æ膙§æìÄ©N¼¤ÀxgfÆV„ëcaÈØ7kO“÷«¾fm7ºÃòHx&‹'f>—aô$Y±MãxT%¨PCí8®i§ ÁU„òZøòŠ}l&º^|Ÿtí…‡¤ÒÐìöÛvÓyÛ왿ceSSBè)†\tйÂK|É2³i~«4Å$w_ÏΘ «Ð”ö$ 鵊¦¸ÛÚoGzO]I€yTï*:UöñÐDéHß<-KH¿U]߸ +i’iÀ?ŽÆB»Õƹ ÛOšŽEm&gJ7Ä/þgUP\aE:Šepd¹ÂKŠV…-C7âß4nøð‹ôêì͸¦§·Tª>‚1’B%Z²ÕÎý :Ê-•ζè'ÊL(F#§Âãú Œë4Î?)CŠÐÒ‹ÀmŽ²‚LñòÀЂZˆ£tW„ü#?]¥Ç ›äˆâ ‘­ÁÃÕ}ʘ0ÚœDôŸs3½òe”Çgµ KfMKR¶ôI8§å¤XЧË ͳ“ÁU=š? åÔÕûo¨å¼»ßí;j„©¯)AÉícð‡ÓŠ‡¢H†¡£*‹Yñœº7Õ\f'Ô0¹î TD™H~³ŠÍM1ëSÄqNß3#Á'‰û^*Ð!ÞS‰* 50w~}k¿gïØrU©Gl<ÓŒ%x%ØÎW¿‘ó@=Õžú5›<@.zÁfÌXtÌ03³ +endstream endobj 769 0 obj <> endobj 770 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 771 0 obj <>stream +hÞÌXÛŽÛÈ}×W ,@®­6»y·“›™ñÆí%Èb•ŽÔ’¸H…¤¼3ìå/sª»y‘<“ø!² hÈVwu]NS²¤íìå÷·’¶í, ) 2Š²„€=ÛÌ~¿˜½|#IÒb3“Šü?2KEžQ"P´8ÌXA„µÅj6A„´øyö£÷îæ Å"£«—WÏŸÓÇÆ—™È¼zÛ‡CYmémÕéfS¬´ÿ·ÅqUh¯Š…R1Í¥IL‹ë[”½íP²mcú“.Öº¡«}Ѷºõ?Ín³8ÊG"â„„ +ó<'eAÙˆ%Ò¤ÿ¡ +}Lp"Bó%"ò›ès—QÖÍþÈ”=cÇRôûÂ#z¤éÏc‘z©?W*È•ˆ¼Ø—^âÏešÆ¹÷Xkj»m}Zuä'xú‹Ÿf"ñ´]oÚÒŸ'ØXWœN“¬€ó£T’ºÉ̹Á%a7þéÇ"ö؇”¬Qþ^¼>õ÷+·ýo¬þo3‘qúƒ¡‰+€Œlþ+w~·ßÛ‡Oåv×µ€|«†BzŸ}•gz-ŒCÀ¾Coª zôê—mœÙ6ÎÉIª¦Pfè¬ðfÜÿ¤»¦Ô¾à¼ÏܬŸôQ?qï]]qÞµ#A°åH¹®=XÓ±ë_vʵIåË}ðç T6Zßý¤WˆrUW]QVðÞ\iî‘‘ˆ]¶ç!üèÁþTÝP{Ô«rS®p¨®ZgrOØzI%TO „ƒG®`‹¦•åêvE7šF·ÇºZSW[+s…²'Srš%÷ºªóh EELO24§zÈô—ÕZû`ÓÄ»ÇÎ5Mã§x+ìâÕÒ{}ÐUg=ë¢ä³øsOÚð{æQñ5¥2yàT2Á]þS~öCÅË{³Žü*x+õ”¦¦Y zJS™5þ + +ÒãhVÈè Év~½|[‚×U< ʸåmê†Ó?BUd—H2O¶Œ´¯ë#mšú@ö”³‰ôÛÁ™eŸaìÂ4Š qJ ösïäããpC‰ËNZa[a${ä—,zM@éq“{÷–‘§“ëe8© ÄÖBp¬*¡wd™J½ceÁ縢Ái­8¥EžÀJd´ +pÁ¶d’ž!ƒÜV…3ÌÚÓ]«ÿ~¼}Ó'PéØ'C«H7ü  ?$ mË@ ÑèoìBíógCÚ¾Þû¼÷pÜëWç`ÉEžXYç°V'"4”Ȩ‹&Ù‚h t#ÄßRðšJú í‹ÝÌ·×,—ïøíÕ«êtx_Vm§Koéã ì}þ|éÓ?ÌÝÜ…4ÇœŽk. ÑæØ°éªÛ,qÓ©{Aψ޿ýp»¸ÁòGúfKÏ^Lî+ßaÙÞwè/+—þÒíHêÑ[Œ¦xTnÉÔ±[»¢u¾/ŽÚ˜Äø`£‹oϬ8¯§.ƒõöÒÑÁøáÂrïì…ݯñݮÅòéàl}¥‹œ·›ß/þpûç÷6«Oìÿë=Á²sf n`™=Üx4¤K'^/—Õ3“Øa»Ùý«e’Ç„:D5{%íy¾'„kÝ”F ¯èörsêr¬ ž»íê¿ë0¬ËQ +¯0\W+Pìñ¸wŠJǦÞ2sa&…B¥^1(ÑجN~ì„_š ŸÆ–Þwߢ`ˆ›–ÙcÎ\ÒKtLéS]Ì´k(ó]Ýí*ë$7^ñFó³^óY­Õj=ЉŠÂI¸Ϩli«+í¢ëÀµ–¥z>¦#H?Ó¨ÐÙa3ð©­OÍJ[õ{7&¹F³íÊ°¤‚i¤=Ñb¢w„sªVœòbOër³aí®ˆMœð¹Í=}CNÏz ¸ÿa†^¢;­+Z5ÚDÉ3 +[ë\ ²8¾äm<ÉÔANŸÖµ›qæµÕ0 ø–Úîao\Œ¬‹h€›û`(+k=AüXè2u¡oáJ[2_Cæ¡ñí®>íפ«âÎW¬8{ð;’1œËË÷RÓ§ãFÎ? N,À'èfÓv !–Î]Ýl‹ªüÅ \<>Äý| ÙØ™ŠÊ3Í~_Û¢ÿÌÐ7òC}x¼5òÓr(nBˆ­\¶®‰bˆÐcó©C¿wÀÖŲc +66Ak:\œóGÈ?ÒM“›'ô¹ŠQ§Èå®Sí vî™pÅtìùB%~ú„£5 .×f†&&ï[Œ4„Ÿ®ž?´4#† +ø7ôõ0šðœÜvÌ•«]Ñ|KUqÐ,ŸÃú¯¢åiÇØš_þãƳ]&[¸2nÇú—'ÖõéÎ=6ÿ¢ÿú„Ýó]?<±‹}¬Œ@qžô‘]cÙ»&h>Èsݽˆ',SæO wÝpŠÝºÿÏ7ÙS·]còôÂ7žœÕÊy–@µ¼__»cù— s{I +endstream endobj 772 0 obj <> endobj 773 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 774 0 obj <>stream +hÞÌVmoÜ6 þî_¡V;+z³dmŸÒK3tkº q» í08wòWÇlßÒìí_Ž”|——¡Ã6$ÃpÀɶȇ|(R¤ ëäàësAÖcb±¼ º0Dq2ø¤N^”ÉÁ± ‚”u"$áðƒE–¹‚XÅ—¤¼L8 0®á[¹L2Æ9W¤¼NÞ§¯_“œdq°xþœœT¬HûõP]^6Ýš¼ê&?ÔÕÒÓŸÊoÀ”Š¦r&eN2Á„ÉIy” ¢Øa+ØúÌW+?E[£iùKò²LŒdÖÃrC˜TÎ9ÂtÁ¹ŽœÍ° L™Ô÷6!( Â&݇ÁòŽÀ¦.vœÑaÑ1ôËFÎ'Uš©ô†H.h–3›ZšIÉd:Í©ÀWamîÒSx€oCÅVÛåD¨§wÔ̤>~Ɔfû£bÅ1XAÉ~}ðú¹õoŠ= êÿX,€2¬Àðó]‚šù„Žð(6Û6>œ5ëÍ4BÆ~ ™RL¤¿Ri!ÏüŠ‡ õçìµ2d¯Rýs+,ÝPÈá ÄÕÌÞ–q(Þ˜J!£Ó9¿é¦êÖ×Áqqs&–> J®˜ÒšPUÁc –}7b^§ËM5g¤õusÞLþ箺Œ…¯_1¡9×F|H h‚(ïT@{Ú4#‚} _Ýl¯ì8x”›U@h6´©ÆpG<ª15û,½þàóã[ÞÑ\õÛ‹@ó®Íßüÿ¥±Ÿ$¦°Û^âú4aŒçö€ÙäßüÛìü¡AÓ­ü'òOí~74¾›žÊ²úkÒ³q“žOÃcº°oí·S¶YƇlédwX¹ñdA†~;5'WC?õÓÍ•I÷žM{Š­1^ÆB2ãâU òÝ]œG¬ °O_‘zÛ-§ +–,«Ž\xÀ +ê‚)Õç;«ßv+ @P±¦JB+…&­aiÛž +l­×8ÀÔMëÇ/c”¥‚I'“LŠ½ýxŸbŒ‡Z~`:à°ÜPç`aTÂÿ†f–kÍdÚRï þ¦ïŽ|` +*Ûvb £•pweÞ5ÕÙÒܤÍí\`ó½úÖƒÅÐcI…ä0ZTíÇ鄆Á!aܨ‡EÕ¶/ª%C&ý8RØ5i´Æ¡ àœý’0;›å³hËìm q2£Ú‚ªç.G$T?ò\Ðév;F™°Cq +Ûu0 z05ÁÎÞÆ}×ßC¨É7Pè>ÑQ#òbvôÛ³–Ï[y±ßz Ç€”ohˆ†üw(q*»ÏMÜÆñm×LÁEŽÏÅã“Z2²pÈâ-¶é\`!‚Œ¼+ƒÙ$Ò:4'Õ†@ÍQþ¾]uÇîÔ´HÃÚAßÇO'͸ Ÿd9ÚFh mŠI2C€ð‡¥dÝe +endstream endobj 775 0 obj <> endobj 776 0 obj <> endobj 777 0 obj <> endobj 778 0 obj <> endobj 779 0 obj <> endobj 780 0 obj <> endobj 781 0 obj <> endobj 782 0 obj <> endobj 783 0 obj <> endobj 784 0 obj <> endobj 785 0 obj <> endobj 786 0 obj <> endobj 787 0 obj <> endobj 788 0 obj <> endobj 789 0 obj <> endobj 790 0 obj <> endobj 791 0 obj <> endobj 792 0 obj <> endobj 793 0 obj <> endobj 794 0 obj <> endobj 795 0 obj <> endobj 796 0 obj <> endobj 797 0 obj <> endobj 798 0 obj <> endobj 799 0 obj <> endobj 800 0 obj <> endobj 801 0 obj <> endobj 802 0 obj <> endobj 803 0 obj <> endobj 804 0 obj <> endobj 805 0 obj <> endobj 806 0 obj <> endobj 807 0 obj <> endobj 808 0 obj <> endobj 809 0 obj <> endobj 810 0 obj <> endobj 811 0 obj <> endobj 812 0 obj <> endobj 813 0 obj <> endobj 814 0 obj <> endobj 815 0 obj <> endobj 816 0 obj <> endobj 817 0 obj <> endobj 818 0 obj <> endobj 819 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 820 0 obj <>stream +hÞÌYËnãFÝë+jI"Pu½Y\fºÓAíÄh+ɘcÓnNô0$z:þ¤ùË9·Š¤Š”Dõb4 Kbéܺ¯sOUKö¼x÷ãdχ…Ó¬žï˜l_/ž[-Þ}”L²ÕÓB*&ð¤/xéY¡Š­6 . ¾[=,–\¡Ùêëâ>ûôÃGf¹gïß½ÿî;v»Ï¥ç>Û=ï«Í¦Ù>³Ÿ¶m½ªêü«¿Ã”Ž¦,Wʲ¥äÒY¶ú° DÙckIØús]=Ö{ö~]õ!_ýsñÃjaM ?·Žq¥Ë²dÜx!LôÈ)^¸þ9\åÊŒž#ÂÓ!eð¾dxh|ï4íG´3ÚX¾©rm¸ÎÞ˜2_Z^dE¾TJ”Š›Ìæ2óùR…-³[¼Áwû]\öøúвÜáÝoyá¹ËêøýþÐäK‡…»-…3KP|”rE é»mPJhÿÎ-·í¡`” '/ýýÆeÿÔÿãe!ÚqOá}…º.ÒÄüWl~¿^Ç7Ÿ›ç/í%¨÷ùRk.³åª@Õ×® çGcIYF…Ð}¿.Îx1ƒXNÊ  Ù‰ÔÀ°ƒ#Ž€ù‚ãJéL‚_¼›˜-N8v8¶õ¡»m¶‘\G±².Ðj1W™ª¯Ç~]€¼ÆAÄeºólˆwÿ$ÀÌ&ÐŽ!UB6²H¢ýc½ÛÔ!Þ¤ëMhø ws{µ1µÑIóëc<Â\C G}§IÎöU\ªÊ´átQ›iå©í%Tm9?9´ð)Ï÷Õ¡†êø«Ù`¢C!nØoMÅîÚê¤F™ý9ªQD«žBQ@ÉÂ„Ô –/õV¿. ÂùÒ\SeoTJ¼õ»öÙŸP*ƒ'“$GK–ý¸5烦<ÕA<[%Êò¦9<Ôëuµ­w¯‡dð*ïÂH êò¢`&̪)¶ìœ@d¨CUvJsøE€'ò¹~(NŒœ; 8—¨Ñû•¹š¦>^'QëÌŸEÆ!sn²áx†¶ +¥öónûX‡£ÄóëºeŸ_×uZ^Ê…½ÓpœQþƒ¦öä…ëWÛ¤Ææ%݉'Éx‡à¦¿ >L"­PY›ù`;61=*ßîw/tí`èPܾ1m¶ÍtÖ)cb?*âÀª #ijt±£Ðë×t:…~ƒÎSP¹blä\áAéºDã¹A‘Ç#ŠëÍCIùkÌ©4 ¼iñÝÀQí{œŸˆ^&Z_é üNÄt«¯c‚em˜œù8Üd…‹¢¶¥.Vôv"ïhøi¢ +3¯îˆÀ&7Ù¯ ‚tþH¤—˜F$Ùnfôô«#ð·œóÔÿ\ó£Eyr¯¹4NF°}%ÅdQC‰¤Uú@¡_0ÖØM³=ÓŽR“,+õ dfdêÄÂɄ驳¡:)l9¹xÁvor’bͶoÉqÍÄMÏžõÈ7ȹ‘‰Xò$ì’Hº(+ÎéRL~<>Á;וýRy)igk†\IáÏU ]aÏ^]’À•L°þMZ§Qã—Ü1 @ýTåtçL—¾hPú_!:kN®÷pÞÃñÔ)’R©5º›WáTB'x7éºqx$/û'Ýÿ—…gÿ`®À +endstream endobj 821 0 obj <> endobj 822 0 obj <>/Border[0 0 0]/Rect[375.72 250.26 446.94 263.76]/Subtype/Link/Type/Annot>> endobj 823 0 obj <>/Border[0 0 0]/Rect[473.58 250.26 549 263.76]/Subtype/Link/Type/Annot>> endobj 824 0 obj <>/Border[0 0 0]/Rect[63 236.22 116.58 250.26]/Subtype/Link/Type/Annot>> endobj 825 0 obj <> endobj 826 0 obj <> endobj 827 0 obj <> endobj 828 0 obj <> endobj 829 0 obj <> endobj 830 0 obj <> endobj 831 0 obj <> endobj 832 0 obj <> endobj 833 0 obj <> endobj 834 0 obj <> endobj 835 0 obj <> endobj 836 0 obj <> endobj 837 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 838 0 obj <>stream +hÞÌXmoÛ6öÑ¿‚è'q­ñÚ>uI3thÑ õZ É>¨Žìh°åB’×ûEû—»#%YrœØÆ6`ÉÒñŽï¹ãCq²˜œýøž“E=1’ØÄå ‘ ©òÉ|òÃtrvÉ 'Óù„ ’À\¸³,uÄÊ„%‚LW“¼°DÁ³él³$I$™~™ÜDo^]Í9?;þœ\U”;æ¢õ¢ÊV«¢\×e“Wól–Ó_§?A(Bi&„&1gÜh2½˜ GÞù–}{××yv—Wä|™Õu^Óéo“WÓ‰Ì@b˜6„ ™¦)aÊ%‰ +˜g H¤{éô¶Äa›?[o·}hŒíê㛲Ä2ëˆÓ8„ßà÷!ø~Çó!d&9€ «ãhX­±¬zL¯Ëùr“—°sõ”S°Õ…IxDmROà§JÕªÝP³{ª:§Ú[¢lÅÓ»þXÜ5÷õš2H]è0Om&Á÷mˆ^¢y `‚“ °kÁujIâÒxþáÁÆe:„_öoÞû…‘px^BB wH\êV²_ç ”+°XDENqëG‡y†墚d!Ya  C9gRé6ÒýºßDE9Gˆ +ÇœBຂ+JSúyµ^‘Œ´°[IÊI$Ù5Ö ßnQë|æ}¯ç Ä‚â›@Mè7* +bgb,œñ »Ø>PÜiº›è’JŽÂ $gýµl²?ˆãÂ3Dâq´(²O û`c0 éL§—r(.·hjÊ¡}D/àwNžÁù±au\‘Ûè|ÓÜÒÏ:šJè¬ÐN„X…OkA¤{¸ª€Ð©c¤Ù€"ý‰ºãpà·íÓé¢*à±v]Ti{1²/*’R%c>†%º®½¨^ÜÒgݹŒaK5æ#<^v(¢ÝÈq_wBÅ^”>Y!j”üŽîö\ÈêÙdöMV.6P¯pšS»)VFU^ˆ$Š¥V?8W°²-od¡R$–Lèqþã¾Føå⽧àèØò ïq¥Ø–w 5øiËŸ(Èn» p²þ 'J–Àòá±>Á–u±­â†Üg55Q;ðe•g×HüÛè–Âñ0š=›ï½“é·ûF\óy7 +ž†a9a(øÁÈ'žoVý$áéуú€ð´èž6îè‰â ËlÖ¬+´‡ç§ ¹øž¾Û ´¯ùA@3ëƒß€dŠŒ\o–¡$°Øp„>ÁIÁÇÏ@ô‡î•<þ8Ö›ßâißÚ¢Õ¾©[&Œh¿xNœ׆„²þ,äà›Ç£´¦ÐNwµ@Ëÿû­t‡m¥{¬üÆ6Ž*R؉3xHGÝó1WÃ@ÇRãÅÛýŠùw/q+®V~ß¡±Õ 6`´ð ÝÍúq ( (g‰ÚÓŸúºïFƒ|qÝ«öeÿRp–î{÷·Þªç› +endstream endobj 839 0 obj <> endobj 840 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 481.56 176.94 493.56]/Subtype/Link/Type/Annot>> endobj 841 0 obj <>/Border[0 0 0]/Rect[375.72 206.22 446.94 219.72]/Subtype/Link/Type/Annot>> endobj 842 0 obj <>/Border[0 0 0]/Rect[473.58 206.22 549 219.72]/Subtype/Link/Type/Annot>> endobj 843 0 obj <>/Border[0 0 0]/Rect[63 192.24 116.58 206.22]/Subtype/Link/Type/Annot>> endobj 844 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 845 0 obj <>stream +hÞÌWÝnÛ6¾×SôJL+F$%QZ¯²¤)6¤hàz†zªM;lä6Å°Ú[îR’åX^v†‘Lñü|çÿXy—¯ß XÕ^¢@‡)Di*„ÊxKïû©wy+@Àté !þáC¤šg)hòPÂtã…È…‡žMç^ÀÃ0T0ýä½÷ï^ÝBÌS¸¾¼~þî+&RžúÛU•o6E¹‚ÊÆTË|nØoÓQ”r¢b.e à"‰azãGÑñV‚x[Ö“/L×ë¼®Mͦ¿{¯¦^eˆ#áq\ª,Ë€GiFQ"¹Nºï•Ëèà;Z‚ ¡ìGDÚÛ!³è3ÀQÚ&}„&ÍH1í@¿É™Š¸ò?ƒ  b®}Í)ÃLòÈO˜ðC­ãÌ¿Ç<«¶îÚb7o€%øö3Ó)O|ãΫº`A‚·%™Ó+$ûH™èÖ@"mÕ —±˜Ç>é Á1…þùäç©ç™×þ®ÿãkÖ*á)™?ì"4i "ç€EæÕzí^&Åê¡©1äkS±@).üLjŒ3³àV!Œý6zµ´Ñ›`®îÓ8v¹•ñ,q¡L/™‚D#“hŸÆ!f ˆ¢là!¯Yâ_a®–eþ®X˜«Ê䓼)ðt;óg æÛ²n^â2¤¹£¿)–ËŽž›#Ó‹s)ï¹;øz·é5ÇÓó¥"a/O[äßF|¶ÖÊ·ù¼!cW_IvóÓÛ³žlw Öæû5žîêë]såë¼1÷ë]Mxñô<"RòMQZ*<]žOEb&f±ÃÓ¹9´'tqˆå6Ä·q8È«  ¸q<Þ>¢öDx>¾TÞÛmÛ݇µ|¯ÀQ`÷±ê^%=Ò‹¹ˆ²Í¶µY/-Âê;£®c[WªxF-KdÙ 9$µÐ ݉ҸMì÷þÅ@2ôÕX(â‡V£ å‘ÔzÔObÈôÜ:Ç¡êM3ÌÇóMs1`…§CCïQ‘ɇÌN¢èÒÅ¥’a´~™ìdü +ì­;‡šôàÙSnÿäÂÑâx¶G«ã7¹ò)¢ñ’rÑxáÜk§•±/›a´Ž}~äCöïŠÛAeäøŸ/ÛY¹ËÍâv2·oØþ1sy’ÒļñÚa|îuR»Â‚媟·÷£=QÇ4Ö;ê 'Ý`;õ'¦Á DH.ýÂ0\RšD"|†ÿê Üfn‚OEmà®(M^YÍÎÜ*vcSp07µž„[bŠÃ.£Ñ˜&gœ„7øäš0óÉ( y“òÚn ‡Ö$q‡½¡úyÆ¿»úõÕä»äY6Ô&î´±c´µ™c–°]Bó€@pí ú@ ®2»£è^Ð`nZâÄ¡Í™ˆ}>èHíFvÛŒpײ@À¯ þ\6ù#å’ÉÔ‘ ¬lj–À½Wç|‚¾o¬xU‡·5~‹·f"©óþ6ðì.'—hÿ3>pçšù4°Ϻ¥4n*× Üð@Ój<±{[פöQE¶AIöAÖ¯Ž²]_0ŠV°ÄmÐ –$¸“iÅã´•§4m¢'åaT‹,‰jg ™ßÎ<3ö¬]"-†´„ØŠáqF›ä1köÆïGì“Oäâ¨(­Ãœ¢?Ðêœõ÷³~u¾¼AïÞååj—¯ NþK¦0Z)Ë2¬´åÓ­–é½ç;t܉lËeSA ¸ŒcÀ +·+¬OËú;†Žvtu )ZúBã‡AMžÓb‡…Ç–Å?ÜÅ)Ë3Æ`ç(m'”«>Þ[`ÍÜÕ¹3KOR +ª™ ó8cß=©À-™“P¹ŽETEi¯Ó4ØZ †¿ÂuJ +endstream endobj 846 0 obj <> endobj 847 0 obj <>/Border[0 0 0]/Rect[371.4 361.26 442.14 374.76]/Subtype/Link/Type/Annot>> endobj 848 0 obj <>/Border[0 0 0]/Rect[445.02 361.26 549 374.76]/Subtype/Link/Type/Annot>> endobj 849 0 obj <>/Border[0 0 0]/Rect[63 347.22 130.44 361.26]/Subtype/Link/Type/Annot>> endobj 850 0 obj <>/Border[0 0 0]/Rect[422.46 617.28 513 630.78]/Subtype/Link/Type/Annot>> endobj 851 0 obj <>/Border[0 0 0]/Rect[157.14 347.22 247.68 360.72]/Subtype/Link/Type/Annot>> endobj 852 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 853 0 obj <>stream +hÞÌX[oÛ6~÷¯ ú$m1#Rwô©KÛ­Cº©w)š=02mk³¥@’×Ã~Ðþå¾CR²ìØM +tÀZÀ’ÈÃs?ß9Œ`ËÉù·o[¶“$di±(KX°FO“of“ó—‚ 6[L„dþã!²”çKÀ’Í6“\xamVL¦<‚Í>LÞ{—/^²˜gìâüâë¯Ù›Æϼz٨ͦ¬–ìUÕéf¡ +íÿ6û¢B+*æRÆl*¸Hb6{>!Ž¢ç +âmX_i5× »X«¶Õ­?û}òb6I$OX’ð8a\†yž3eAY›Œ™f–rímÂDšM:¸!7Æç ›QÖÛLꈔ#½Rkók函;&áOcžz©?•2È%¼ÄVEšÆ¹÷/XkjK6ßó¼ýì§OD?/ÛNýÞ¬ãÔøÈÈ"w¶½Uå9GíÄÑA³ô÷SÓ@%UÆ¥ŠÞ ä4d.ÒQ"sQ(UÞ~ÈÇ …íü3` ©8@?éÐ/³è—ôË€~sÕ©ã –ó4ÿ< sµÛƒÕÑ™|¹äá¤fÑ*ó8›­Ê–j½¾Q9$óþÀgÅn4Û¶zÎLU`ˆóñÓ0б5J>À×%×vÇž<7¥—²Üèk·»»Õ-`¢Øvgl£ZÌ„íº,ŒF¹wæh¢À7·kUu†-Bšñ1$Ž-Ë3¦ª9kzÜáì»Ú¢ñßDD“Æ’™/àtöc‰/#0óئn;Ö‹“ñX\º7l9Üo5[l+øŸü˜ö¾‚ÖߘäZ¦no×w¬« ¶š–žQj—£|)góxj=ž’ÇiJô5)"xQo6ºêZ‡‰Î‚(c•ánœ¸$øºÎ¼,T§q°†A¤à7c[Do‹M:Õ,·V^·R3«®¬mÊZ‡Þ-NÙÖ§à­B½Dµ×•Åv­šãf2J +&™JóQ ß#m©ÂAv432+¥×uðþ.ƒ¥Dù€+È8uhâŽûÐÅ÷h˜%C/ÐP…$ûíÜ´»L =µt<ÕÔ£(þ̹&4sw“ŒU1ªdhÙhÁÖúضì‹mwíŸ ý:LqQÁµu‡‹b‚~˜ ¸ß¯#ÄPqD¸ëà±ïxQàâÐO +¡B+öõ®úÙ0+D1á¬.ç'¥Óí-½ØçBw-ªö£aDÙÂsæ­ÕíØVâÑ\’¤ðùiINþ“¶KÆHB!çßÄú795‰85n‹F#Ñ)Ñó6:ÙXtÜDñx 2È{QØqƒBio£ÝVOBÙCƒWä/3IÜ¥Cˆ‡'¡Ku?n +Z©ÓÈ UïfŸýAfGò¦ìŠÕˆ†1s_óØî¥VR;> endobj 855 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 856 0 obj <>stream +hÞÌWÛ’›8}ç+ôIY–¸¨Ûžƒ«ØvÎ!*Ž>Owqµ÷!‚C7Ø:­øP_1SÄüÚé·Ür\ì˜djõ<웾ճmÚØ5™EMÛêQß÷Bs  +òúZ²Ž+d1xú`ùf¦¨åE™Z=s©Â©ƒET|l›ùM€hÐÐP)Q4~ZöLÅÁG5(Úý¶þ<õ{åµÿõ|M'Àa8Pá'Û +eM¨['àYl²¬~˜¤óEUBÉ—¢°zŽƒ©ùݲ}¨3‘`Mj¿©^ßÖÕË W÷mìÕ½âÕ¥¬B1@Ü}èp„ÔN¤²B ^ZÌœ®x =;ár.îå,[ ÒX<ê;©LÄÓ£…â\–Õ«ƒ +%ª[î®BÒ‚ì£'q¶º îfÓ­û ä¼ZD‹B” e*K:܃WÈê¹ !Üý>šäë +”oÂípN9­ 8 ˆíëÀǼàY&²÷ß¡˜™ñÕ Òg0…à;-_®‘LÞÏR©ñ ‘ÒB‘%sÒ“UÓ­ýÈ•b©Õ@|½æ ù +ïYžbewUÝhyÊ—BŠF Ä·*Žßä2éæF»ïò*^Ôeôhj»7(ë ¦î­–†ð€@§õh‘Æߤ(˳¹¹ë#äyôT Yää Ã,dŽ {Ĭé¢Hå7>ÏÀ "üvUé*KEÑÍëj,54†j>ÿy `Y•’o{ò_ñj°ê)|²(¯Œ×º(`ÀÝ©DV›q^OÈ£D\ÔÒ¥|¬ÕI;ŽÔŽ‹¿ÓÎÝ*°)ÀjL`Ùm +r½„Kã"_•mN­½BŸè°àÅ ´•w0z›§öî¡Ù¡÷Ã.rqÒ'ùúK&Ô mk½ü¢Êt;^A|Ñš6mV»}@Íè““.+[÷eÛÔ“JØi9?§s2øÍ»äTï@}ÚÌuá+ês¸®— š¨IÜÚ_b_å£NË-ɬtŒÎç …·\k¸¶:\1_«´«•Ô7«—ÝUC~ª µ÷ÏÉ~xëó‰[äPe6+Åù—À­4kÈ‹<ëkGD›[ðÁð·ðY« +endstream endobj 857 0 obj <> endobj 858 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 859 0 obj <>stream +hÞÌWÛr£F}ç+ævK£á•'[–S›ò­dj½©8F‚]1lŠªüPþr»‡›‘u©¤*öh¦ût÷átèd¥L~ÔɪT“¸Ì#–ç“‘‚+Kå2P¦×:ÑI°Ttƒ0ø‡‹î¹Ô÷ˆk2Ê d +Ê,X "eBc& ^”ßÔ›ù5±©GfÓÙÇä¡Ðtzj¾*Â,KÅŠ|/–aĵ߃_ ”Y‡²©aØd¢SݱIp¥ ¢Þb›:bKèc^Ù:,K^jÁWe(ŽA]*q¨íj˜¾ïjyŒYuM²L¹ •RÃlh`ÊM(´£Á—Åû6-¯­ÓÑ]L órëšoCÍ´¨©þE ¦k›ºª«M ƒùµTGÓUS›è®kûêÜÀZ‘×fñ&ªˆæÀÝgÍõ¨£òz½(Smâ€a.MÉCz Ãq~t¯IŸ¦ñfS[Å\Rƒ’îºósßõH³ÿõl&€éPég­@æèVýþ•˜ëu}³HWIU‚âK^hÓ¤ºú§f¸ 3S™H¿Q¯kHõ:Ъ}ÛukùÔwj)ãoÇ«ïb…°ºˆ8ßü±æ‚ú’ÆUò¬>k$ÊEYýDˆÌQ%ƒ¿-m2ì“+Ù#Î,,x(@Ôj &Ý‚½Mœ†«‡´Š’£ ¿mùë1–O]¹ ¿‡Œ²¡)ðÒY¿a²l=RQ‘TÄü]Û ÛDÊXQÈ–ã]˜ñΖ¥ï¬M< „áªÓ)™mª=#ÊEü殨À¤D4Xî³i긞aƒÄv‘ÞÔÒ‚=¥U«©×ÂYžn'2Z!LLæ™. Ã(‹P¬øm“ *u˜Î6Ç{|Ã׳}?‰åzÑՈ’q‚ÿíŸh~"JSÍé( ‘°*Î)¥áV_Ot¿ábU%ARðe•¯ã€í^; +c  ‰%S;+ŸNö`Á8„“ŸÁ¸…q8‚:Ï×Í´ÕÚÛ‘º£Jê¢ÆZyQa3Œ¿~¯çá ‡ª¿Ëa$×Ä>«rvTg âû¥ÄzB¡¶tž$•ãñ;¬ŽLécZ¦G¹A1Ô…í¦‚lòƒ†b“Á>(4Í6Y´©¶NÝ1.Ð%“ ³=YÆrκ %Ø!IXÒ;YxÙ©®cQg¹<ªÒ|ßX‚ƒÐ„W<'®÷·—÷ŸçäoŒ?/ç7÷O[‡,º6åi› Âà „‘Þ„ÁÐé¨cEÜm²æüE¨Ó¸k{æ Ú¯Ò² +¶ü» ·­Ë‚â´h)0ѽN|Ÿ‡:²¿È7~ì½ßÇ0S»¬úLvÞ/÷Âî”…Ø‹;hØýC,Ç4àéVÂñÕ{çÍ÷ÜÄ^€·ùkÅEÙs׌”ÓÁ w¢o‚—åvrçfV&E*¾…+~||ü`ô‰d +endstream endobj 860 0 obj <> endobj 861 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 517.56 188.94 529.56]/Subtype/Link/Type/Annot>> endobj 862 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 457.56 188.94 469.56]/Subtype/Link/Type/Annot>> endobj 863 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 864 0 obj <>stream +hÞÌWMs£8½ó+tÏX–øPsò:ÉÖn%U©Ø59Lö ÅÑ,à|ü¤ù—Û` Ä™š­Zûnº[¯Ÿúµ0Ekcöû’¢ua0ù$@nÀCP.ŒGã·•1»¢ˆ¢Õ£AmDà ø8 ïLl´Ú²`â‚mSLqÐêÅøf^_^!h1[|ú„ns‹80³uÎ7™®Ñi)òG ë¯ÕŸ°”S-åaÛöДbÊ<´º0TFÚäv¨Ê­Sß ‹-^¢°VßË•á¹!ÔÁ°Ç¶0 vBܪ"fcŸ5Ï¡Tl»­çÀ„"ÂÑ¡Ò=¡®>DðÐ š¢ê+d +˜_}Ã-ÇÅŽù†lB­©‡}Ó·¦¶MB»&³¨éZSêû^hÞ Øò¬r‹wQ‰,w_-?ÀÌ•=/¤5eà˜¥ŠNMQüØ6ók‚hPÃP[¢`ü°<ì™ +ƒª¤híüºžéößdý»é pý¤éPVou« ø%kΓ¤º¹“맲€–/DnMSóÙ²}è3c z¿î^ßÖÝË@«{•¶B²ª•ÕMè æC÷ cŠ€BHUDœíþN@0#¾½Ù%¥Ü&Rä情¢,{Q~Aû5 ŒjÎfè.Û•JäGíJ”t.ZiE¼ ¾mVÙÀŽŽ?ƒiW“V2ó$MùµH×åÓ‡1ö'›ç‚ÐýËÏ ‹vy.ÒòB¤…,ßn3™ªTíªÑQäs&cíÀç8nžçüíÁ”`NË Jw©øŒôJŠÎɽȸ|*>W]Š tA‡{ðS¸Àµ†Õ&JN{"+Pü¶<’%O#Ñ 8jÓºˆ` eþ¢\_y²…ÂæšœqL¹PØeÑ…¤˜ï¤Ì!‰o{ Á趙ë”în}Æ=é|@‘Ñó¨Ý ºT‡è´}bIÄ£¼æojwó:¨<è׃3Ž´Ðá:ÊìýQ¦­–Øi(Ϧµà¿™Äk8½Ô¤!™Æâuß—UE!fNu$`Jºx¿$ÝÔ=…LP|2Èf%Ò›,É^M*Õ “s­¼}Г®×b’†a0ΤËZLÖPT‡h4ÝZ°ö|v‹zâÊk™då½ÌŽêÑöë«ê4°5•ZÛÐõ?Zdį=Toøë<þ/ti©b–0'À +Êx?n‘ñWÉ“&Lϸ3Â.áüØǨ5VGk설FÕ½‹ÈTnv›ãÞ%@}È¿v\<‰èŸ{è—ìåý"Žc–¥Ø)îq%“d•òYì™z°Ôle÷åŒæ~ºnhÀ¯h g»Í³2ß2K»Ž­ Þ¼Yë¥8 ¼3›£ÂéD5Dz²i­€Î2CŽ'Y{=7Z8b@8ãÃÊÎX==ÚÑî§úi–9Ï1·}°ÆüOˆOÔs­ÇûœŸ†Þ+·÷µ/pÙiéêOè¿ Ÿ)o +endstream endobj 865 0 obj <> endobj 866 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 397.56 188.94 409.56]/Subtype/Link/Type/Annot>> endobj 867 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 868 0 obj <>stream +hÞÌVKoã6¾ëWð(ea†Ôƒ’ÐÓ6ñ-6hÝC¶U¦m¶lPrÖÛÔÙR–­—@ >HÍ73ß¼HNÖýO¯œ,JKx$dñ#A&ðÑœ1b`Wh8?¥ŽçSÏþN\ÆI@C;t&®Ëb—ú¶p¸8†Al?à ÈÔƨÍvYEo¿9aD…-\•¹3 ¸)0›:W Óãº"¬óã: ¬†ñ·ÐÀÆBbŒ’æÙù;ö¼Rí¿±ú?VÓð0ýìР¢.÷MþŸW+óò’/–U _JåL3Ì‹Š»5$ë)o¢KY?ó W´ƒdób&÷mà‰³eZjg—|ßJƒˆ ov¶LÕÁ@ÄC ž+“»r·F(ˆ zZSõ­Ðž×§t/g Yêx±#Ï!×ÚzF´¸kU³]ÈBÙjSÊYªdj* +òKs`·¡WDÝð=Ebÿty¬ÓÅLß%_/€$ÃÈ|ðJÎsPõF÷°§`íxq„ÇtÐO`Ç'gmkGñ(BŸñzO½Ùw¤¬#ë&ˆ +&šIL…‡·ˆa +Sˆ’ggñ4ù âe×8ñHÖÍ<áàœÂH7X'y€üú.Õ2-°·ô`^SäؽàøÅì`½pÆöÍ WhÑIÞätºÏ䶚î+…e}ØUýÎÄÅp>€Û D,ÇÀ퉿|lÇg%çRuš²µN:¡vØ\ =¿ LOnA¯¾è¶Æ>Ã5bú´cB¯Ú­¸­Œ¦áÖØ ›ÓÐôþU]w28ÕÓ"“ÏRé†Ã;I÷JÒë÷jÖºq èS8±Ú7”vroP}_j{ÎótÑsˆçÔ¯Æál x¼§‘sw–×ü¯ÞVîŒËˆ-ÿ0“ü/í +endstream endobj 869 0 obj <> endobj 870 0 obj <>/Border[0 0 0]/Rect[375.72 376.26 446.94 389.76]/Subtype/Link/Type/Annot>> endobj 871 0 obj <> endobj 872 0 obj <>/Border[0 0 0]/Rect[473.58 376.26 549 389.76]/Subtype/Link/Type/Annot>> endobj 873 0 obj <>/Border[0 0 0]/Rect[63 362.22 116.58 376.26]/Subtype/Link/Type/Annot>> endobj 874 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 875 0 obj <>stream +hÞÌWÛnÛF}×W,òD:Ñz/ä.‰<¹¾)ì&°…A܇µ´’ØHdJR‰Õ¢Ô¿ìÌ.I‘’åä¡ +õœûœ9æd1:ýñŽ“E5R’h–(QD2RÚÑ|ôÃdtzÅ '“ùˆ Âà>x¢iš-e‚LÖ#Z(‹àl2)cL’É×ÑÇàúòŠÄ4!ç§ç/_’weȚŢ4ëu–/È›¼¶åÜLmøëä'0%½©˜ +“1§\Ådr1B¼Õ-9êvªo­™Ù’œ¯LUÙ*œü6ºœŒâ(…8¡B¦iJh”0ùˆ” Zµï!T*¢Á{È&Bº—i—‡ÔEŸx%mÐè×è:¦}Ð7&”•Á–ÆÃqLu Ã±,4 +TÈáw̵ŽÓà<ÀYYx±ÙfZ“PÁÓûP'TÖŸ—UŽ9¦Ó%‹a~„PºIO7°$èÆßaLã}ÐÄ+%ÝçÞ×cŸß)ößhý‹¹HEL?k;T5à‘/À¿bólµò·ÙbYWÐò•-ñ””_B¡¡ÏìŒ:‡ ÷›îÕÂu¯‚YÝqìg+¥©ò­Œ©$Jƒ’h7Æ &a>ˆY±yXYp!€½Ëþ°¿d³zydyM²Žgöñ>$Ó"¯ê×½Æd8$O)¸¶ù¢ÓǹÓàפU£ÂÀ?§%—¦Ùóxµ*L ØqVZs i8?bÇS âX?¡F+*™œ´áïLŸ•¥ÙÞ}6S¸êí‚<œï®ô¥¯ 47:ѧåÞg¦IèØ¡ó_úÂÎë=½ÜtS÷=”ì—oÖmp盺:ê®)Kk…|õ›Ò燐_s3ÈÚñ¦ÙKKscb@ÍÛ²^èœ\YÙyðjY,ŠÜ¬ÚI€ÆŽäëISÄxž¦=4L× +eb–6“Ã{R ]¯S½¼ø'4Z÷uLWé onLõipu%Œ§§ä|i§ŸH½´X ˜æ•Ë/¬3ÿníUQBÏVŸl¸l‘Û)Z¼¨)¦Ä#‡Ýß«òÚeuàÊ_ÎÁMÑ›[[oÊܹƒVAº1 òNs|‡öVè$mvË $GÜ.I€(å%b£ƒ_®kB +Ò`jØoø@yaó*«·C°ã¨ j鹆[¹Í\€Ó€…œíˆùéÔõÚä‹YX˜ÿy(Œ¥ áOió}N¥JõaSo²Áè!Ed,©ˆ‡ÕwÆAð_;×€ƒ9B2&‡1 ‚xRÒÛ‰S$ýÄ +R!nÙýéùe¼C<$dº4å BY½ýl{ …݈ÅÕÛÜ^æu¹=qû D,)Ž‰¸Ý +"›õUiß@>ŸS3ßÉ4«êt4 zFá×>K›=£É­X !³Ïé«[±íþ?¢&×ÁzN'ÐÏÁ:/qц¸š¾¹]¸Œéþ µl0 ú/¨ûŒàé­ÂYÒük¹ö=½Ã¨fµ¿XÜZÁ¥+¥@ú­;õ¤ò\Å©”˜jSÙ`©[@fD§qô} úÜPAÇþÿ`bHèí +endstream endobj 876 0 obj <> endobj 877 0 obj <>/Border[0 0 0]/Rect[422.46 470.28 513 483.78]/Subtype/Link/Type/Annot>> endobj 878 0 obj <>/Border[0 0 0]/Rect[422.46 244.26 513 257.76]/Subtype/Link/Type/Annot>> endobj 879 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 147.6 170.94 159.6]/Subtype/Link/Type/Annot>> endobj 880 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 123.6 164.94 135.6]/Subtype/Link/Type/Annot>> endobj 881 0 obj <>/Border[0 0 0]/Rect[375.72 672.24 439.32 685.74]/Subtype/Link/Type/Annot>> endobj 882 0 obj <> endobj 883 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 884 0 obj <>stream +hÞì—mÓFÇßçS¬xå¼·O~¯èUOGTTÝõ…É99WŽb‡¡~ ~Ëþg×vâÒm%¤V‘b{=;;3;ó›µb«ÙÙ÷¯[µ³Ø°D¦Ì¦13’mŠÙröÝ|vöB1ÅæË™ÒL⇋J‘¥,1RHÍæ뙄!-Ææ‹Y(¤”†ÍïfWÁ«ç/X$Rv~vþè»Øp•Š4hV›|½.ë{YwÅf™/ +þëü,eüR‘Ð:b¡*ŽØüÙŒ4ªA·Q¤Û©¾,ò›bÃΫ¼m‹–Ï›=ŸÏb-’žÄ"Š™Ð&Ë2&l*¥õ>97ÝKx*´¼D HÀ¸—pt CæœÏ^Útð™ÌQ Fv%Þçsn¬0ÁG¦¥âa$’ á¡Ö2ÓÂ1Wô¨’$Ê‚ Ü`lÓx±›í¢c<ÆÝÏ{í²7F©é»+^¼“x¯påPXÊÛý‚4HÓ k?Ö]þ•õ’ëÔQ&küyW"ó·Í¶cÝmÁ¨ û2ŽzbÄ"N#!é‹öé/Ï/©NÇR7þõ Á>€m± 5Z®,"ðÏ{ð +å%ñø‘« ”ÿup¾í®ù“ fàgb±ApW€±+| k2aô^@œYo‡ÎzCÊòЊ,(íÄ~¢ŸK9ÀéìÅ®†DƒxB3›ECÐÁ9Oʼ^móU^Ò¾F(~ümŠúŽJ +•AV>ª=«C/¡£h_·¨CU@L~í¶ØOî·-pÅÑŽn(_¤!škw‹.¼¬*–åO›î¶Y5u^±O¤Ì‰ð¢$áò<,뎱zËã`½“¾®9[`;Œ?qŽÎBø¦Ù¾­ë8Xl»7ew[Ö×NCYß0âc%3ß$ñáe“ÿñ8àQ[œ“'|ÌNñQ[úˆõùö†¤ÂiÙìÊî&wÕLP¹*Ëö%xR/«-ùz„¤ù%²tØŽÁ¦¢ð”MšX‚}¢ôÝÇÌÔ •HP‘¹ +RÊï–=ài˜àÓ 2ŸŸOËö¢}?ø¢½h$5ûzsµuæ*o®ÚïÏÇÖYLŸoz°÷ÝdÕæl°WkäåÄ^²d~× m¦Ý7I¾¹S¦ôÁSÑž)Ý]ãUNC7ô¬ñ§ê@P +endstream endobj 885 0 obj <> endobj 886 0 obj <>/Border[0 0 0]/Rect[344.52 191.22 386.4 204.72]/Subtype/Link/Type/Annot>> endobj 887 0 obj <>/Border[0 0 0]/Rect[422.46 617.28 513 630.78]/Subtype/Link/Type/Annot>> endobj 888 0 obj <> endobj 889 0 obj <> endobj 890 0 obj <> endobj 891 0 obj <> endobj 892 0 obj <> endobj 893 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 894 0 obj <>stream +hÞÌXÛnÛFú¨¯Xä‰LÂ5÷ÎmžR;.Z8­a -Š¸ŒDÉ,d* é:FÑê_vfwy-[ÚE‰YÎÎ}Ι‘õìèÛKFÖÍL bÒŒÈL‘’º˜­fßÌgG§Œ02_Í')üƒ/–j3bDJSNæ7³´ÐTÂÙ|1Khš¦‚Ìïf¢³w§DÑŒ¿zEÎë˜e4‹¶ë:¿¹)«5ù®j‹z•/Šø×ù÷`JxSŠr®HÂ(ÓŠÌOf¨‘uºCÝNõE‘/‹šoò¦)šxþÛìÝ|¦¤…84UšP.¬µ„Ê,M¥Hsjt÷B¥\L`"„{ ‘öy°.zKà¥Ìº ÑfÐ3tÌø ßç±TD÷„§,N5‘‰ÎSË©ŒtÌ¢,N˜1ÊFçðgõÖ‹-o-‰5<ý›Œê¨ðçuSƉÁm…étÉJ1?œkIJà–Ýø+VTEèƒ!^)é¿'ÿ}ìû™bÿÖÿ±˜+€Ð4Ãô§]‡êP&}þ›o7ÿpQ®¯ÛZ¾)ê8‚²è÷˜è³bICÐû¡{ wÝ«aVŽ±ÀÙu“ìž@\IÍ0Ç8 Iê£Ø«rkÝáðšhûs¹l¯›Ý°ÕICQÅM¾/&\-À8x^1`ˆÁ@ÀèvøhH –ZJîÐi>å ‹²ZaÀðå@‡‹þ&†‰Žò¶„ÙXÕÛ’“à›ò¾ñ”Z«|™Ò>°èìí/ï.2ú „—IB ½Ó6Ôò*ºØÞâ4ʨ-+ÿ°Žø¼ŠIS,Z˜Pé'Ô™Ï(cƒ¾Tuú2¯o»"íuAÄV妈Ϊ/c"8ep!/Ó;íÏß=ƒ°¨&Í}ÕæŸ]f„€³Dº¼pÈJÂCRòÛÛ¶·¶›¦©ÎúÔÊŠï‹$ 1Hû¬@>Ö]¶Õk‚×3*25ŒÆ¼?DMQg”€ñÑ} 5b ùHß‹®§%ØÄf¶°HlJ¶X yè>meò5g}Ú{ÞÕ²¬ X.]B¤6†îniõnÔn«@.Ïòj}›¯ J×™ˆ×ðQÕt¡1°eö õ™“™©DP®úœ‹Î:wë%ÂEzéÊî/‡JZ +~º …0…JB ÜâݾrÚ‡°À•IÜlß…‰&°b¢?<´Ñ’‰û%Å]wÒaAYµ¤º½‰uä®\aï/¶UÓ¾q×æ/Af¹½ý¸´êèÎËà¥Ò˃4œO.àûë¼é”ž_œïÀña#Ϻ3qþÒ£JwŽ;Ÿ¶µÿÞk2˜G á"‰°Ñ¶.ÊuÕm wMP“‘,£öYÅ3 +'ÎM«fÒCÁ1—©'ãa“R‚Áµ¤£Ë²-Æ‘°ºP[*žÔ¸wãA ʪȰ1ðÌBÁSv(¹ÍÐf~ B›Á`?±«á.¼«'òqK÷›µé“.9ýHÜv/¨[ØËE†äp° é!°~H™9ŽfsûQ™#ÍF±² +ì©1 ÔØzjl‘XX ÆKoÂ>ŽMýÂ<éƒo¤}ð5bȱÎg0+ÏFzÈO`väiÕe…À@'ÚÖséÍtO\Ý b,;ܸSw¼/ÁN"‘TíaUO/-Þ{¶VÏ['uCø"´²`É +?Éh–Mço¨¯È YATívrÒï»À;‹°våŽk;<“ëî/»4/&†tÊPÕè÷Zࢠ+[Fíã¢0lœ´) õï ýç,”A5…ì‡ï ¦ç‹XèY~_Ô{Yèâ:¯_’ È ÈùM[µ,>_Åp>¾¥þ[€µ¥aö +endstream endobj 895 0 obj <> endobj 896 0 obj <>/Border[0 0 0]/Rect[344.52 556.26 386.4 569.76]/Subtype/Link/Type/Annot>> endobj 897 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 898 0 obj <>stream +hÞÌW[oÛ6~ׯ8è“ÔV II”„bmnH‘¬ž-š=(6íh³¤@’ÛzÃ~ÐþåIÝ’Ú±7lÀÀ¢Ès?‡ß§0XY'—3«Ú„4?àQ¨¤µ´Þ%ÖÉÉÒb(þáƒE!‰#=J(‡$·(Z!Ôǽdn¹„RêAòÅúd_Ÿ_@@"8=9}õ +&•Ã"ÙåªJó<+VpU4²Z¦séüœ¼GWžqÎpa"€äÌRYgÛcʶ6=•éBVpºNëZÖNò‹užX‚“P`&‚÷â8âG”ú&'¦>ÄL ÷b!”€§1Ѿ ±N><ô£.g U`*®Ðä|“:žO<{ œ2Ç Hh‡ŽË99ñmá0;v\†AlOp{UiÄ›yŽÀÕG'Œˆ°¥Ù¯êÌq +–…ª¦®Uåá\„m}XÔ†¡:¢ÂøÓ H`«B0F¡>yÝ÷*C ]‚¯q!á…ê[ù¢åÏG‚ "!2#Q$@†€~h§‡½ôQ6VÓÑM„è¼qßxË +“ˆÏž¢ÄA^t´ur†%¿N‹Õ&]E—£Ç„çãûp §R×4À1ÁŸJß2&eãÂÙÄÔκkÎ]ð /\?\3—­(z¦{htw"†æ?DŒnÆ Z(+íLÌCwcJ@æ²7ˆ‰1ð1HŒ0æ>­ñ¦j"¿µw\þAæR²J›²:NN›”_ä!Sªl•„ÎÏ8 q}PbVnªù¡ˆœmóqd{@î§#åbz¤à,kä÷i.›¤ ~ØJ†û{„;dd¶*Ž“êZ¥IA±²|ôH]Y4ÿLwRf½jËEUO×åü×dû°¿Yýå6Ëå3#šÕW*Öϲj¾•ÒœS…BŠ“uVšÐŸ6©§É]T>|Lªòer÷-Õï Xü>­^ÂJ›—ô8½¹ãv¶Sq„:íÇö¸É[=wŸb <Üj]Óq÷T…ñüáªFowªîý· nÒ™5þóóœNÛ7¯í› +ÑĪëS —ð™°'EͶ5¹¿ «'@;vµK~"ãþ%ÀÁmµL +endstream endobj 899 0 obj <> endobj 900 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[356.94 517.56 519.78 531.06]/Subtype/Link/Type/Annot>> endobj 901 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 902 0 obj <>stream +hÞÌVmoÛ6þ®_q¥´¢Iê½Å>tiÒuhš,†ÍPh2íh³%CRZ{Ã~ÐþåîHú5v’u0ˆäãñîøð¹cgðæJÀ¸sâžB˜Æph•3r¾ÍÁ©ùÈ8þáK¤ ËRHθ„|êp´Âxˆ²¼t|Æ9 ÿâ|tßœBÄR8?{­'R–ºÍ¸-¦ÓªÃÛºWí¨(•÷Sþ=º +Œ«ˆI/˜ˆ#È_;dQ,m‚lkÓ—ªªŽ'EשÎËqNr' +37ÕÆŠSmÑc %E~u1UÅÏaC í©Q¾én¢FÕUEP¨‹¢Ç +X#NUo~ ´­oܪ‡j¾ ö>Ôhë{ô¶å‚ÖU¿©G!#¥ë‡± ë»)º;mZUën—Ú ©š–N‹:çm¥ê~}>Ïáàë¾Hy¤;43®jêb>ÙÀøZXñsè”éR0ž†Á61ƒü(£²‰ÉƒÁvY·³ ŠYB„FLìi7ÝsÌ:!XæRü¹‡ãfˆ]ǦÞÊ +gXÐmŠ%æ«Ær8Ã(`Iºí+}Í +dsj!R˜ +äc ’Rf&àÈÜÁýŠk7ص‚~'ÕV<@¹µðasŠ·.íð¶ë'mÛ´auEŒÞ—¶“¹?^Úk]N)&úfõµk,–qjXÊA/ÀQdT¥þj=ÂßmˆËZPyõ¸>Ä2ŒS„€|ÛwMŽÌµ]ªž8#‘Ëšäh+vˆ/åῆE_x~ˆë0¢RŽ“-Íý™ö›Ñ°¢Œ¿EJ¡{¼;ÁÉ fmSª®£qªA4m0MØÅW„rÏ^_žÃéùåÉÛ7ïº=^Â’,Z;ÔSœ ò]M‘>Ì·Xû j“Ñ*È`¤ÔóK“ßÕsf¾ÙfÐÈ&»üߨ]%Íx@•/¬mlÅÑÅéwÓŽ¡²‘ æ¬3¤cU¾ ךh`dŽùزˆR4z³d#RŽ¨ŽS]_su×ÄÖc¥DyûÜÝÕúîoš°™DÏüë·.þQàçT¶©p|½•† +%ð·š°ˆq¼t[¥—s¼T“ɺ¡üà¨aý¬"¡ßÚ¦y÷››…†z‘Þ1›ïmY÷ÔÔöú7¥¥OÞ´lŠ÷‚ÞÁ +S½W¥†/ö#rÌO‡°}zªWv;á_ ­Óu6 +endstream endobj 903 0 obj <> endobj 904 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 905 0 obj <>stream +hÞÌWÛnÜ6}߯˜Gʱ‘”()~J'uÑ$†­mí"P´\[­öIÛØòAýËÎ’VÚØn´@׀ťȹñœ3\׳§¯/\73­  *€Ú̳Ùìé+²ÅLHð"‰yš@¬HÈ–³­ð Ŭ˜ù<ÙÇÙ%ûáäD<ã§ÇOžÀY퉄'l}]çËe¹º†ÓUkêE^ï·ì{t¥œ«ˆK/¸Ðd/gdQô¶• ÛÖô¹É禆ã*oÓxÙﳓl¦%5f¢y¤K•¦)ð0 ‚ÐådÓ´/1S.ÃÉK,-Pö%&:”!µÉ§€/äϙÂ1FqÅ.ç7¹§B®ØÈ@x~Äc{¾”A*yˆCÁpVÄq”²3à\½vËæÛ¢Oãè'/N¸fÆÍ×Méù®WTM[«€Ê#¥Ž»úˆ¤ ƒN„ÂøË‹xÄ(†œQž{_z~å²ÿÆêÿx™=¥yBåz€êîDèà_ñù¼ªÜ༼¾iD|cjÏWŠ ö§'cÄ™™sB¿Co,-z5RuÇâÈQ+å©vP¦Aª@Çh$ܱ8@F`"A—”«–b¡ˆðS˜ªú.oÞÕ¥Yµ8ûþh„Æ€˜ñò]nK·>;˜±ÏGDؼ(Ò«0v„yh鄘¿ì‘] õÊ,Ê7yQ{2À*¬/ÊvO>vJ…F"$¹S)°AƒÈ%xnZ¬§\²Òx¨h Õ5ćñð_ó¼Í=?Ä÷° ‚£|Ñ‹Sô7ÖoJzcaàO„JX&² +å 6õº0MCš·^@.õáLD‡£`(={óüøü\œf'ní i¼ÉÞ›Lì6hÚ¼5K,5‡I}}L*%UU\FÃvEÛ‰óÅݪÍo÷âc…j){¬ 8!+Ú•² †þtì¹êûäø© #˜¸47ÛUY<#¿ +Ÿ öüq²0úR!¬Æ>®X±^5-7yMˆ£5+åKsîEkÏò½<°ë6´ÌN]y’Q¦Ì·‘"±VÈ89Ñç ÁY4ü]±+Ï­|€ƒ•½p+Ý÷{ íbºdˆ¥ÖdÈÌŸýƒ§ÇâÝqñ[‚û&+#ƒòE;Ÿy +Q…\"<2”‹æ«0sx^$Þ"‹![yØ8ho ü ùj¿ÀfMö}5ÑW#}iA粃»ˆ¸R#j%;2¾;?}}úvBDÅ£ ÃNXdèxH®'l’öR³Oó‹Ó_§Ç“YUƒ˜ì±»Aýq9Œ}$öÆt¯”LƒßÜ*ˆî| ¸Êõj_?ðR‹=ýöÎóÕú!ú1ú¤Ó4m½-ž¹#{@:Ñaó5ê‡Û£N@.û™»#KðÏ­þ`"R»½Û˜¹A¯ pŒ½ã4}{»]uHyé"Å ›î;U´×eúv…W88¹Í—›Ê<†w‹ìBô×KáLexæ O Gž;`U­=âÎ>R{1ž$bÝÒÕR0ë +š›~u2ôÈ¡Èmz¡î\¬ªyá lrì¨×Û¶\øX¶7}T¿}I¨/Z”C"–³¶ÂýÂ\—«ãd¸‚LÜ%»Í®?Z(ú¨q8þ]0í€îG#âQh®M©ï¥Ç®}LBѼkëŒ?k¡â/a}I¢ËA4äû®l ŽóŠºÖཫãáý`ßuÂQ#ìô£¦VÃÁ’ªJª~8õ{ö¢¤K¤f/ñj[Ó[Χþù·TÖGf +endstream endobj 906 0 obj <> endobj 907 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 908 0 obj <>stream +hÞÌWÛnÛF}×WŒ´ iµË;a¤@¬8AŠ80l¶µ#Q‰4Hº‰Ñäƒú—={!E)¶mQ¶Ö³³;gÎÜÖ‚–ƒñ‹ AËz¸òˆ¼( —S• ƒãd0~.HP²‡8¾ñ!¢Å….gÜ¡d3ฅq²d61ιKÉûÁëÕÉsòYD“ñäñc:«l±È*—UºÙäÅ’^MV-ÒYfÿšüS®6å3Çñi$˜|Jž 䢽Ûònuõy–γŠ&ë´®³ÚN~œ$ß‹áGÀü€˜ãÆqLÌ‹8÷´Gà݇«ÌñvöÁ„$ÂU›ð´ã!VÞÇ„M/j–xD(‘I`¡vú4µ]¹Ö-9\Ø#Ÿ…Vh‡Çó°–cDú±u†dU©Õæ7³†ì«Ÿí0b•iyUçö(€bYH:Y\òã8Ah‘!C"aüeûÌ·$†ô¥Ô}îýyßçWªý;·þÕTÜ€E’~Þfh` <€ÄæÓõZ/Îó媩‘òuVÙ#×eÂúÃvBäY6g +rßdoè¨ì P«Û2öumÅ,t*Ë”ƒ—xÛ2æ¨8ÂÈ(à2uÇv€n¡lgeUeHÖæö:£÷iº–U8§¼Röá»yñ’šU¦ô4kŒ•L].ËèLŒÇ´Î9tOÓYUg˼˜¼}—´G’Cƒ#_€ +kj)£OÔ)}âÞ©©MîžTla•Íbj=’Z”×T”7½‹Ú[ †ÊОШҦCâ3ϦÐá1*³XB™M§Å£©}ÔªõØ3¶«¬¹© +ŠÚü$›ÖÈ‚˜ +ÏפÈͱ$œN—”lAÅ òañ*­i#1¿N7÷RÛgí Ó¦éàp“Bl$_fLÑC…´±¤HzüHmCÇ>ß@¼}~©rX)o•OÊ).¾à=€Ú¾Òˆ¿«%Ôá–ÇÏP.ô$b~ôiwHmç¡ (ÈX5þB3¬ô¬zc%€¼ÐÕZÚøµ^—¶ð±xo ü–£0³1N]ëƒ=B±§›ëuFõªÓ)¡U# cÂ×GÙó:{fðÎÒõúm:³EŒ)òŽ*ð–¨Ô¼YuõHÆ¿õ‡Å®¹T¥¯…²¨gm5"Hû1󣂠Eà¨îg )-æÊ”-¦—Û›èêŒßõk&G8iÃ|ßß·`u¥º$íè:í,4•Ê(Y!äŠãHqìŽËb}Û©pDà¹û›š9 IßÒcÞ"úúY8VžÙN »²Á-T{@àB«Áô·¨\hÂq¯ÛÇÚ>…Õ’”ÍÓ&¥EUn:;VFN̸ÿ8êbu7/ñ]¼8æ@Šw[xð•í¦ÃgsÂÅcIωýAm7™ÓT%ÎDg`ÛJÓ97|¨VM‹P_?Ô5ª—Å¢ÞÙTº?a8>“äÉ¢5ë®·áÅ„)ÆáͶ7Mw¾ýº®Êë×òüfHùVi}V5·zBâ£Þëk=ìc;¿@›:K4Æ․U¡=Üé'«löNöë®BeïªåÄ5óökú|o:šê…øÛãNJíÿd&Þ,ã êÖ2F? 8òñ/YšZS{jßm°s“hòêéÅÉ ÇC;ô­ípQÿWè{_.#OûÈ.‘4o²¦ºÕ·öLÿÆ‹«ÓÓ“äüJŠ/龑ÚOл˜üìù´‹òꔽ'ßXå†J†Kº¢ïé<æ(ôÍŒÖ2ß‹ì¾âÒð`o¤¹~·èzÖTà ¬µœV8„Dl¨nÒªÉæòÐmÖ<b=òw„$^mÄKùo!Iœ2 +endstream endobj 909 0 obj <> endobj 910 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 911 0 obj <>stream +hÞÌVmoÛ6þ®_q @Z#šÔ»-ÀšºE†e5l¡@0ïƒjÓŽ6[6(¹«1øí_ìȵœØ°1AÄɇ÷Ü=GRÀÜè½ ˜FàBÈ#ð¢\J3ãubôÞ +Ì áÇüˆ(dq¡Ëw YQ÷ЖL ›qÎ]Hþ0~1ê¿ŸEpÛ»}õ +Ê‹ÌÕ\¥Ëe–Ïá./¥š¥iýšüˆ[¹ÕV>slÁDàCòÆ DÑ`»‚°5ôP¦S©àv‘…,¬ä7£ŸÙÌ€9nÇÀ¼ˆs¯â¤iêAdʯ5ˆ  ®D¢û0Äš| 8èE grG„äùVœïSËõ˜knÁá²}š¡e;æaW˜®e‹0ôcs€´©U5mº™”`Øû`… LYÙU‘Yv€W9ESÇŠSx'ëøˆ¨vƒ2BnüeùÌ7ɇ*PØþíú¾pÚ¿ƒú?ž¦à,¢ðóF AáU øGöüa±¨:ÃlþX¨øB*Ëv]&ÌO–¢Îä”i‡PúµzCG«7ÀR=T±_•VÌâ ’2ub‚A¼Cs¬$ÂkU³ê=¦Å@•£í¾qýD†œJâMkúN'߶ŒrQHh· +ùÐz=(%™Y.iKH +ë| E™¢Y•rz +ÿ®U–—³±yñc뺙¥'íètØ/Éf´dl.Ó‰ZÝ峕}ƒ;Å|´Eór)Kµ›cklÁŸ§öÂåcó›}8hÚ‹˜ä«’Xh +8{+Ë瘌îïû š‡0Œy‹Ùóù9šôŸfåØû3yi…ö$n…Ši¸óΘ<?±±í2ŽU‚!<ÿ á^Vß>ÊÉïäÓè.éÃ:-KITsÈ +˜ÊFb +YN‘¡ÙZKÕÑPÆiÑ2: t•ŸSÌV + gš dðn‰æ=X¾Y!QV+0œˆ7o'$µuµ5Â’gh­ñŠL#eäz§òÚŠÅh‘ù²€Ë¹þ›÷Ôyæ‹›Ô%ýA5N ¼ê®[í$Z‘hº”Äíª±Ú7Ÿud[&]Á_…»R™ÌË6 Ü|QÍVv'ðÖöü¨âõ>î¸÷a…^`Ÿ\ñ¼G¸³\ñÂmcîÊÈî¬ÔyäuJ}0|?è“ „”«¶ÒI#TÇJGÐæ‡sýófY‹ªQ(Z7ËZ­¥*3YŒ÷’âÝå‚`éø3§V_C€Ìç•´Öº§}tÁœ­< ?¥‹„IšÕn†qQðQBŠ§¡¢wíŠà ò#ÞÖ]8ú9D‡”F\?6:wæ ØK¥¡}YÔwqõ4Þ +]/Ù ªZ“àâ©Gϻκc¾ŠÊü¥T„‹oøúéÝ^@é¤ë¼ŽåÞí/Ÿ6»ó¢zzàPñÏñí„B=T× ý*IÇÁV~½k^h 0¾% ý +endstream endobj 912 0 obj <> endobj 913 0 obj <>/Border[0 0 0]/Rect[421.38 507.24 549 520.74]/Subtype/Link/Type/Annot>> endobj 914 0 obj <>/Border[0 0 0]/Rect[63 493.26 121.92 507.24]/Subtype/Link/Type/Annot>> endobj 915 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 422.58 176.94 434.58]/Subtype/Link/Type/Annot>> endobj 916 0 obj <> endobj 917 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 918 0 obj <>stream +hÞÌWÛnÛFú¨¯ØæiéXkî.¯5ú8¸HÃVó-S2cI4H:‰ôƒú—=³R’¥$-PÈåp®gÎŒ$›Ž^_H6oG‰fi˜±(K˜YSŽf£ç“ÑÑ+É$›ÌFR±ÿø’Y*òŒ¥:¡b“å(„F8›LGc†¡f“Ï£üÍËW,;9:yú”5ÌDÆëyS,—ÕjÎNW]ÙÌŠiü1ù ¦´5 ¥b6–B&1›¼‘FéukIºêó²¸.v²(Ú¶lƒÉÇÑËÉ(ŽrÄ‘ˆ8aBé<Ï™ˆ²0ŒlD‰iâŸ#T¡¢çÈ%B›‡ˆ´ÏCn¢ÏF™šü‘)yFŽ¥6è·E #¡ùS¡ ƱHyŒ• +s%"\Jc™¦qÎÏp³¦¶b×÷ÓŽ ®Þi&^Úó¦­‚qÁzEé4É +)?J%©KÌœTrãï 1'Rf•²þ{ëvß÷Šý7ZÿÇb¦:¥?ôM\dd ð¯Ø|¶XØ‹ój~Óµ€|[6ÁXk!ù§@¥ÀYy-ŒCÀ¾Coª zôêã6Îlg„ä$UëPF8 õPžšžMxÍÞ]µ]€V¡é¸ÍžèôFÊõìÒ*Žb´µQ<¹)u0pª©'ØûÖJSßwÕª´†d"$Þî³í±j5]Ü_—¬ƒÆ%$æ5©X,ê@R|$>‰mÈà”<ÿŹžZ×s‘'¶»é‚Ü—yÏlð;4„óñËŽp³tM~ö_”³jwd¾\æÕ0b)ÀÄDö<„’­n¢ñxËŠ§åjű»bÊPiNœ¹(}á5‘¶Ñh®g ’IIa_{jï¹-÷žÀIA’*ï’v­<—&z”Ve€y‘h#|•>Zv]t›5õÒÔo šr–:4\rOìÉ…Ê ÖÊôîùŦ¿"³2À‡¹õð2`mWtå²\uÀ’qcÓfŒr0õöÙÉù» cJäùš,¥Áš“®mi£©gÆAÒ˜kiÞ†ÞFF£Ä‘ʬZ”„ë” 6ù^Ê(2ÛnraM:fC¡E†rŽµP[Ç$§ ôÂÀľï!ÿHgëŸeEå ƒb§Ìü`[É°ñ¯v+TuZÍBZ_X‡í0x]ÖA—àÄÊ 5”$‡E¥©$`D˨Z/ɦ{s2zúø°yY{ ¿$F›¢ýºã¿Ž¿;4`b–­‘"7Æ?x…äFص>t{·b/¿Ë;{³ ÿ­ý@ü<®t KÁCD#<ò#<‡æÄÌp3E"þL’pØ\”¬½XhÄh™nYÁ¦…mL gkdÛVeqUnÊø­_7Ø窻1¸îÄ8‰Q_?5›5Pœ\ÝN `swÒa‰1þðCÓ@cSJ¶ø_m¶/V×Æ5 à '[¤¬lžgÃÈ2 æ{k_{h ­6Ú|ñ±,?ð <ùS:N +Ê0›\üisz¸»Sú òÞÕšB§«Ymß™8©ßÛRÍ Zî±Ó€ÿÕÿ4†BøÛkÝh½fÿ¨qpŠÃ‡ãµßT½;•ÙÃ9Ûü[Ý/OÉÉrÙ~í¯ÙGœo†à\:+º›ƒ^ôwß=ÅæƒuQ:Ø-~ŽUcÐÜàn¯f4;ÑýšÏêÅÃœŠcÁNqðMi§Þ¯ÿ}U Ž³OU±WlpšÄlQšã](8:b'7å·¬š ý]µ KÂ’‰z +LgÌp«yãç_ÙÐê„íµnï1h|u"îÀcvÉŸLœÑíØcÒÀ1Éö Á? n+9˜ +endstream endobj 919 0 obj <> endobj 920 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 921 0 obj <>stream +hÞÌWmOãFþî_±BB²K¼ìúÝM‹Ä…ÜÕE‰Ut:ß_pÓ¼ Ûô.ªúƒú/ûÌÚ‰ +G ©Ô€ðfvfö™gæYÉ2íôÝH²¬Ô<›ù"`Nà1[°"Õ&Ú›H;}+™dÑD“øÁC>æÛ‚ ‹EsM lÑX3¹ÂfÑWí“~ÕË\°Þiïä„ +C<ЗY‘Ìçù"c—‹*-&É85>G¿à(»>Êå–å2Sré¹,ºÐ(£\ç¶%åV©‡ir“¬7KÊ2-èVëGšgqßC%w=Æ-; CÆ@§®I•©6Q)·œ› ‚lµ‰B74„ªøaÓ Ö5é0Âå×5ÿš¶Ãm}Å,! Óå¾î¦e‰Ðâ–Rw Sú¾ê,`+–µÛÍý¸b†‡Õo†pOOk{Qæ†éÁq¹ 6W‚è±,Ïoø‘Aƒ:B0þ6\îê„ÁguR¶y>úúÔsO·ÿ&ëÿØM5Àöx@ô‹õ€zM¤S7à gžÏfõb˜gÓªÄÄ—ia˜¶Í¥þ‡aù˜³ô†+@ýfz}KM¯©¶*vki…<ôêQ¦… 0Ñ>²8­Œ$JD]ô ¥&†‡»K0Š‹ŒÇñâ(6ºêX3äžÓhIã‚j¯?ˆ‚ê¾X0Ùý«v·¹.<¤tÜÖ5Bý®ÈÕ$Ö>¼mŸÒD=>#K—8cžVÅŠýÌ–_Jó &|‡µÈÓ2Ö× ¢šÅý›—U:/R{+ólëý\ÙÛ(¨ ¢`jsädYPY±ž#\tYÎ~¢œ$$% ''±ÁþÜRé.Zʯy5ž"M‹æÇG«»Ùcc“eƒ½‰¥Ï8)S6K'ù;Ä÷`¥;°ÿã“þê³a·6÷®ÎG#v\Ñš +ê3aÉÒJݪ î÷ó~)Òä÷î~X¯`MViñB¬WçûÃ'±^QÆÃc½¦–ÜTÓb½¾¼ˆÞ³ãl7ÖkÊØ`=ÔѺRø¨±‡u=wÀ4HHÝ:8Þ=Å`Îoq,ÌPÌ-C8 ¹ûù`™“ò*ç–„óýT °*±žé76@5eÅŽyöíÓíçNsÈ +ëý ‹cØG£¦7¸"Š}úC~dݾš]ª{¸xe«ØeÔžGý‹×÷Œ°©¾ÁL­;hßêäuïT>ésÇÃëÛƒKô®å=쮹Óÿ í~ÄæÅÂþæ#ýEý;†93„¾Q}ßåÂÖüT)B¨:[ܺjŒ-¤Ç1éÝvÈ +V²µ<ì:÷ßNñÖt\=7Á|vÜ0C˜_1¶Ã~/Úµn¹†¥¦›NÅèÌ:ÏÏ¡Â+¬f›ÐigË<=¨þæöÑÑøíÐ?1øzý+"ý7„ÂÞršm±¹N,î¸~мή¡Õ3â é`ÿÏmvŸOM~óBù0ʹö¢§/Ÿà +ó!²Fƒ-ºÂ|CÂÜ*èÂÄ{ý? ÈÊ£¬ +endstream endobj 922 0 obj <> endobj 923 0 obj <> endobj 924 0 obj <> endobj 925 0 obj <> endobj 926 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 927 0 obj <>stream +hÞÌW]Oã8•ö1¿ÂBBJbl'q’™‰b5³T!èxÓ4!qÀ($: P( Á–uŸ2Æ’ýt®Ü/­Ï$¢ 9Ú;ÚÙ!íÊã MÜQ¿Ê‡Ã¢ì“Ór¢ª^ÞUÞ÷ìw8*0GETˆˆøœr‘ìØADn±ŽØú\åת"Gƒ|’ò›õÉ?(ï '€ÃÒÎNÇ{­ñ¬Ú™ŽK¶ûøÓñ¶v50¬h쇫›ï»ÍQ–G”Ih×¹ ¹S؇,à2óWlØN¸9 V*ÿkýž5i>…ÛºNõúÄØ­`…»y9É`n°ÞžhršµÎ³Ö¿J8ºà`À ï¯Jºq +¬«sÞLjÕð:ïëÒ}å.†ËoÒ/¼cþ—¢z|†þú†¿/²V›lcÙz ™u:%Ðz9ƒ‡‹I^MšR« ÄÔØ×2ã! £8©¯¨êÜà!l‚®òEW·s´W__¯®ýK°ù¦š¿/rSè`Õúe‘¿¡À/Oç+Šl!°9€c »n1`zq:¡{í:\jùP½W`^r!Ü›m+nüK½æêqª//[³6j[»sˆ0iÙÀ‡tç?ì’æÏ©y¶µ·wêšùvniÛÌ¡¥7°?æ^Ðsûú»ä™*x´Vm|ÄÿQÍ–JáwUIà’}¬çy+#œžafõ€óüÐha'{ÎíݵJ´‹²™ï4ÂLŽ&O—0#;‹EZ,d?AÁ€È³ÝMŠRIQvHºI3Ì-zeµÌݵ"ÀéáÔ®yðk0yØÄý‰jOè_?ÔÎÆ«†.t8®'.;i¹¿ +Ø%±Ýlé:.v!°¨Þ"@f‚J3RË%;ùÍé6žâú<œÕ.¢Ö.F³Û¼ºCÄ) +—x‘ˆƒ4‘!›¹7žR:EX–ù×ѵÌÑ S¶ g) +O¥(ëVÔeðô„,ÓM,…V¼/çØì÷epåÚ».@€ ï +å_]Ú5Uh¸Ôa(¥aš¬b*C\Ÿó »„Yø§C¢ì +endstream endobj 928 0 obj <> endobj 929 0 obj <>/Border[0 0 0]/Rect[377.22 603.24 497.7 616.74]/Subtype/Link/Type/Annot>> endobj 930 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 931 0 obj <>stream +hÞÌWÍnã6¾û)ˆ=IÝŠ!)‰”Pô:I›…ݸ¶šË¦®MÙÚÊR@ÉMÒ>Qß²CJþKlHZ ÑÔ7ÿ3ßØ-?Î(ZVî#A"Dùi5H?$ƒ‹Š(JÒeˆÀR!ÂØ™ÀîtÙÀ›y\§{WD˜;ª¹×Uæz€ea²isELzã¢ÍZ7LEŒ»!ãƒ@R´{¾úxîÙößhýÃl|Ž#“~²mPÞ€Mþ›—yÞ¦ÙrUWÐñ•Ò®çû˜:¸L@Ÿ©¶Aë·Ý+˜í^£úvŠ}3ºví à\XìǸ5b§,Wi6É +3Z»éÜL¾‘nǾRÊ›$LU îR +dÊõ)ø n‡Æm×|¨ÐBÖ¥º\£z¥PËak‰`D`SLöNMn>vGû2У9pPUËZ­UQ£¬hLXÑÖ‚Àœ¿50¾NïŽLø¯ ªÔ¼Î`4ËÔêpä·*-î³åDãƒ!¯4Ë!3¿ +7~‡SÎqH˜‰Vø|¢Ϭ%C´bço°#ñ&¾]+$µ‚,ÎóÍB-l:Ê€‡¼µåoB=ˆ¥.æöÓHÉù +­åx/ rlgÊktylKüÞQSm©íÆ…Í#@™áFT½µ|wR3ÛkøÐ_kxÂCÚÉ/妶=06ÆÑ$³Va'…ìD}›AvŠ} } µVèH›Àc“ÃB¿NœµP ÙVúC» |!L”œ—Ã2eÂœì–Ìë~Æ‚‚°ØíÚ¦Úö>jê )³Ü´] í~b~ìÝÍWP‘,–¹TÀ-6ƒfíÀ?­Š×k™8o7Æ[‚ñZ”çcv¢†ÌnIÇ|˜ÙÂõ.¤”7‹Ö€^B³JyK/l—á–]æfñ£–£ìH篆›1Ì™I̲¾jýìdÀ+Y¹Ü¹)µÊ–Ńóà¢yYTõwV0ùæêNgP¾û"ƒëb¡žÑ÷ˆô‘”ÙN´€ë>¢£ë_:»ÊtC:¸_+Õ˜­äcf¼©ê¯GìnS¥^öÁÁË`ª Ã¶X¸?¿-zi”OJw`FJþÞ®|ÎK¹èF-T._:`Cù(çÙQ¨U ÷'ÁoÓr.ØMž/ʧB«ª[k’©2Mßä¦ùI‰CüýO·§±í0aGw®N³JÝ—y}”÷s®ÞÈ<ï 6š“¤`Õ5Æ µÐhœÉz¾Ñ=4ö7ˆ´ž•ݧ×ù%?,éIÐ%üh* +9Ëþ쑤*=ÝäofVÿ? ²‡÷¦ +endstream endobj 932 0 obj <> endobj 933 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 565.62 176.94 577.62]/Subtype/Link/Type/Annot>> endobj 934 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[357 493.56 519.78 507.06]/Subtype/Link/Type/Annot>> endobj 935 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 936 0 obj <>stream +hÞÌV[o£F~çWÌ#ìÖ“a€Tõ¡Í&Ù]e“4FQ«M¦flσ5À&ùIý—=‡Klc;æ¡•ªH† ß¹}ç6.YXgWS—,JKx$dñ#Aå•2s9SÎÉg0嵦Êy@&.uE@’jt{Ýž‹ºÕ÷J¦ÊóL–¥*ä›u‘XC‚‚PîÅqL¨1æ· NCчP)÷w¾H„×|„H_yˆ›ècý¨ýqCô  Û ¿HÇó©g¿Î\gÐÐ ç,æÔ‡W׎œ‰†AlßÁ œ™¢…¥õ¬"Ž€·'Œ¨°U{nJíL‹élÈbÈç"ìr£Î L ºñ·ÐÀFBÒ*%¯ÏÁ¿Çž#aÿÖÿ1¬I€'h„ô³¾BE—×oð¯Øü9ËÚ—{½XV%”|©Œ3ñ<êÚßB©”6AíwÕò¦zôꦃ¶·b‹¶”ñ%öˆA‰¿ic°6Wd)KG€¥šfêéZ¯tõh?:dVäp^V?n$Ãæø°#x)³ì-ÁäÝüFUÏkÓ ¦õz½LU^êJ×Õ âáü ‘+SÔyú¶MÊ€™&ˆæ ™h)Í;’Ë•:êW^¯wW˜ªbÔdj®¯T蕪Œ†ÉÕ¥²*òhŒƒ‰¿&A;©sC˜@Ä]ú¾ÚïÈÌ?6îhPŸ§êyדI:Ãp7Ê÷—…Qz‘Ÿ +`@˼•ºiØјZ0¶ÉO„`k ^ɵ2÷uÖS‹Žï± 6àÍÜcy$Xã]Cf%ÃQ{vFŠ5z£‹\fd‚J@~W²;þ”ª]>œÓ(vÅv Ø„ ÷ÊëjÚlA/‰÷½Ól½~ó¨mž[ƒƒ6z,Ñ9/ÒM¾[‚ÂÄ€ß.ØvÂ4­xÞ6-i8t˜MÖr¡z:¸Û– .ΣxLJ[®§H–Ù0¾¡{/UiQÿ™)˜Xv§á·m18>\{b¿8}}ñëÁîÀRmÔ “q¬ÞøºTcÔ–K¨ã1ÀU]Vß +…XH¢McÇJQW_¤Yèü#¬€F2j˜¡Cüuñ´ ÇxKE—•Ìgª7c±ÛÈé­tPh–mí:?ìûgzøÐõ +àûèuñ¤Ì.n”)ùtÁ)ØJ>g…LGÀR•É—S¸™\Ë™nˆyeó”Þueiñ”ƒÄ½•VÅ|~’¢‡ŸNB®oOA \Š¬Ú#û ks¸ŒG£îd A/OyzÇ!QçTV³ÚŒÑ9iö.Io÷ê|ïntßÍõÁ  Žç¢6X8p> endobj 938 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 265.56 206.94 277.56]/Subtype/Link/Type/Annot>> endobj 939 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 940 0 obj <>stream +hÞÌWÛŽÛ6}×WðQJ`.)J”„™pÊ¥Oâ{ y-8bkè'•,TMîò¤iTãÄY±%]H`"©/ uEE„z!cžá¤iêE`J]oo „^¢[3Dš|D`Ñ {ΨP1Ô+0œ?&Žð¨°7ÄeÜ™ø4°gâº,r©CnG΄ÙSÀ\]™m‹õ¼%Ž„Ñ''©´•™¯›Ì™HØX•hMm+†æq]töáa§zÕø×ñ©o£1 dûý<õýÎm?õ¼M;@H¢ùY ²s÷Œ~È™·ynOÙò¥m âU;!(·¿8nq¦T+¡ßEoàê蕪»,öMjE4’&”q "¥O…·ËbD˜!‘•-)×…#í[HÕ²LfÙ7õl?;d^•M óïáÈ05îAlQ­?ç +4·“¡¢eå¦Õ×ÂÈÇo@Jÿ&sX~Iê7d ú˜lP¨ÞBŒåá|È.”ôùjTm’ßÖ*ѺÃü¾ìYݲY ÓG8C “G 9` WyTå²}y¶aúÀ —© ¤OXó™G³rH®ñË4©Û,É5*Îöº‚ÓQˆ11tÛEnÌn]>$ˆœ¯¼‘v³l¡.’ÄgEšüëØ&ÀðXx"ìã¾ìrù»H÷˜=q$ýªŒëpïÖmú¯ôëàúpݱÓ8ãI›A“ÖUaªTì·> endobj 942 0 obj <>/Border[0 0 0]/Rect[377.22 672.24 497.7 685.74]/Subtype/Link/Type/Annot>> endobj 943 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 105.6 206.94 117.6]/Subtype/Link/Type/Annot>> endobj 944 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 93.6 230.94 105.6]/Subtype/Link/Type/Annot>> endobj 945 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 81.6 206.94 93.6]/Subtype/Link/Type/Annot>> endobj 946 0 obj <>/Border[0 0 0]/Rect[331.86 214.26 435.3 227.76]/Subtype/Link/Type/Annot>> endobj 947 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 948 0 obj <>stream +hÞÌWMoã6½ûW{¢v+†¤H}`O©³ ¶H°Abô’íAkÓ¶ŠX +$¹M°èê¿ì Iɲ«8Ùm "™â ç=gYMN.nY5“8" O‰JcqR›Éròãlrr.ˆ ³åDHÂá"MX–’$âŒK2ÛL8xa\ÁØl> ç<"³ß'wôòÃ9Ñ,%Ó“é»wäºDÊRZ­ê|³)ÊùX¶¦^æsü2û –ŠÜRšI©I(˜ˆ5™MУè|G}[×7&_˜šLïó¦1M0ûuòa6Ñ*1Ó1a2ʲŒ0•r®¢X²$î¾T&ÕÞw`‰ˆìG@ÚóYô*í@c<"ÁÈ0°Ä¾ÊƒH±ˆ>ÉEj–Ð$¥ä™dŠ¦ <E’èŒ^à ŒÕ•›¶ØÎ[Äðös¤,¦Æ×M„1L¬J¤Ó’Å‘)ãÄ$Rn †ñg ™¦CBœSÒ?~>÷|å´ÿÆëÿxšÝ€(f)ÒÏ» ýå6à_Yóôþ޽ܫuÛ@Ê7¦Â(b‚þÈòÌ,˜ rßgo"möÆpV»ôÝ^ø'ñàävÖ]Ÿ>çï„VæižÊ6$E¹Ä5»aÌj`Oxämù™©¶-i׆\åóº"×… ¾–;®úÓìÈ¢%iÚ¼5S¶?Æò¬ñ@g,ãÚÙÙèT§+v…’ÜvÖo|ˆ’N U°K›Ã!',æýAßãDej·•– +°- t}r®\ +aÿ«”Êâýðl<9ƒRu™—«m¾2°–B<Ûð¯6åañŠe‰‡lãà6æV÷Å8ô³ÂˆI­{vú]”¶Q¬º·v뜵vÖ@jìʾ`BðˆAÉähÛs; s¬¯äÞ,‹S¨×e™_U iÆô«; +Œ‰X8ÖÆ3ò-Ê–¬ó&ˆ©7¼€]:­Mþ™~ÈÆ«²iß[³·cWù#Οæ5šÀ8™ƒÉqƒÛba™Â¨³³F/­3ݶ~8pt`• +7ǽ=C6Öyý–ä0Ç™~z„õv«ÀøÁBåvƒ‘¼È2xGÕö˽!c¦à©(Ê…yAg[ç.Ô=sôw™?™Úºø@@Ï@Þ¡8º-¯Ä14.,߈Ä;€Qð1‚åèöaϘ¶y5žCÅ÷`B'–ãfŒ:{®c)ý¤Î¶(aø;Р½ec,Ùº¼'¼÷ů™*K[•íÔ&™e,VX›v%îŽb5º0´EM[¦9¨¢Ã~'Î\yÛõž®¾Ý€b0‡&ˆ„k­&À YämN–uµ46×Ö"§ƒö$÷DÅÖÔ76 g±ï‹2òñþ–¹à*òéKcãK@n±iÌm£Ýù…El0¡LÈÀ]G +™È×ãv5ÛO•ï‚Åñ°ßЫÓéÍ'×0<›Ñ.B×v¡G»(ª¥Eƒj|YÜײÓdIwœ¤®‘‘ÙDÌ.þ†4f^,ŸlƒÒF¿3ïeUÔ0ä ?T¨ƒ°“:f«ž¦˜n]pžO\ÐâˆÆ¯ÚWL¦ç¹€¦â›ue›µ…ºÁ݇¶;ˆ"ÙÏ°ì¥TŠ>Ò¿I©nØJ)餔ܓRH-çò-éeÔ·w´C - L0êEÕeŽy­éS 2üZ“‹¶´F (ÐêM§(#8 %¥S"@'(åt”ÓQ‘fpÜÞ1S6]lþêæ£ô‚ʧ¡Tp1뢂[›W`>ß:…)‚ê7Q‡ÒK÷ÚG{éu ¹4J.=*¹8Ù‹ŠËN²‚ëë-¡€'Ù3tDqùýúöJ½e/:ÁG8]ͨú1ðÕMëVø€#Ìž`ôÁë`ŽÞS;Û¨^t‹ÃÕ:Q+.Þ¬E– îÐ{> endobj 950 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 673.62 230.94 685.62]/Subtype/Link/Type/Annot>> endobj 951 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 601.62 224.94 613.62]/Subtype/Link/Type/Annot>> endobj 952 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 589.62 248.94 601.62]/Subtype/Link/Type/Annot>> endobj 953 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 565.62 200.94 577.62]/Subtype/Link/Type/Annot>> endobj 954 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 553.56 224.94 565.62]/Subtype/Link/Type/Annot>> endobj 955 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 956 0 obj <>stream +hÞÌW[oÛ6~ׯࣔN I‰¤„`ëš-p„î!ÙƒfÓ—Õ–‰nc ýAû—;‡’-ˉÕØ€Á¦yî—ï𘓅wùî–“Eí©ˆh–8Q$b¤2ÞÜû)ó.ßrÂI6÷¸ >ðÅMÓ„èˆQ&H¶ñh¡,†»lê…”1‘ì‹wç¿%’&dt9zõŠÜTOhâ—‹*ßlVÅ‚¼/¬©æùÔ¿g?ƒ©¨1%©’„œr%IöÆC|¯;â¨Û©ž˜|f*2Zçumê ûÓgžT+ˆDQ©Qš¦„Æ cq“ Ó!R*â ‘#B ‡4¤.ø”1Nö1£;\£cè—nb¾Îƒ(¦‘¿#‚ñ ”Tû:…`© ±Ÿ܇[®µLý8À]U6l³íÔ’@Áéc ª|ÓÜWõ*0–fÓåŠaz„PºÍOZ7°"èÆߤÒG4i”’Ã÷ÉÏsß/dûo´þÙ\"EL?Û7¨j Àã¦ÿŠÍ×ëus˜¬K[CÇצ +Â(¢Üÿ }ffÔ9­ßv¯®{@µC±l •ÒT5­Œ‡4"Jƒ’¸C1D@ ̬¶öäÚÌWïL¹¹Éíò= ¶E$ˆÇ·TÒ‘$HBÌôl ÀÓÙ»ó/È"€.·{½÷þª°dUÌÌ#ÜßdZµ½rá…<¢I +°ïbð h@~—+™×ò©ÆSó`o¿‹::}uÙHO—yuá¤Æ:é?Ü?™•Û?ÖæXäzUÜ>äSg÷>\Ù{*<Ù®Ío«™]‚a¸~©ì^dÈ×'Å+×»EY׎¹Q™¤ß®ˆ]í˜<®£¶UÛO4NJ'b}\¹3Î4—L:ÈAþ›Æ òÈ4êyh;1OϤ8ä’*©T¿»zýá^™ïÌùÇU~ŽRŽzV˜ÃŠTi?Ô7ÐÔ!g4‰t4”iPqše_H©Ÿ´A«öEmï mOË5p–Õu^º:zÝö|½Bo»E$ÂíÃí"îäždN•{–qK`wþ>âq@^”¿Ýô·Œn¡A „f™qû‹>yM'ÆnaîÂÀÕ~ÀÔ­‰]bw†”s̪Ni¢š!<ø‡¤QRnŒÅá-àaÞ1>Ï ›“M>… fpA[ÛPC§1„¼ÉƒÖh¿ ·pø¸YÝî +›?6YzvÐãN“îÁÛòw¾)¶‚%8$ ~ÿÕ¼r”A~z hÓ +ì›mñ©(¿äGÂ~è&ÕC3‘hÝðâ:LÉ3LC4|[HØ´gÈ3µ¤Évè SäLç)rnD¡‹ùzÕo¯gÄ5 ·m\ G0˜›{?æ/œkÓøð_ =…PŒR¡Yns2¯ÊSë[׿ºÃº¥d2e=G…Þ>ÂØ›æÍ_RÛÜšq“©1uŒM÷këŒ\¿M~=±’>µ‚P­ÈϪ,h;Yÿ`oiL +endstream endobj 957 0 obj <> endobj 958 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 959 0 obj <>stream +hÞìXÛnÜ6}߯à#…`¹¼ˆ%O‰c)šÆX A £ŠÍu¶Ý$¹ö¢èõ/;CJ²´k§Nâ¤-Pˆd’š3ž93\A.G“W'‚\V#£ˆåŽ¤ÎÅIéG³Ñ‹|49D|6’pøá,˱Š3.I¾q°Âx +cùùhÌ8çŠä×£3úãáÑÌ‘ƒÉÁ“'ä¸L„cŽ®/Ëb¹œ¯.ÉëUíËYqî“ŸóJE(ͤÔd,˜0šä/GhQ´¶•@ÛÁôÔ¾$‹¢ª|•ä¿Œó‘N3؇aÚ&U–e„¥Žó4îÈHfM;[e2ÌC$0*LÂN»8da÷ÉÔµ›F„EÏÐ17ý¦HTÊÝÉE2ÖÌR›Œ¥ä™d)u‰ 2 kuFáÆÊu\vqu^“ÄÀÛ»Ä:f¨ãe5OÆ®WÎ,Žñ‘ÒØ&@Â5nà‘ &šiŠ>X’î¹óç}Ï.û6VÿÅËÂ(ÆŸ· 5͈4À£`>_,âËt~ù±®€ò•/“±RLÐßigþ‚‡€û {­ ì5«ŸHcXh¬é¥p›¹1Ïd 3ÅÄ=Ù®êâókr¤£™Œe&f¾ )m˜JÑ~›¢ãPÕ%ð:1”,ülþʯ—S<ÿ=F‘qp©Ì1­^ŽèÅúêÓˆf"Zʤ0YjmB¨éÍbà’`Š‡ÝÁ"<ÃyÈ -œèct~Øö{‚Ý|üž;»ìÖÜ3r"¯ê! +¨äˆ(1/Îèùz2gh úê×Fóu«ùÎX½{¸<ƒåFr³É¤ÚøóùlKÐXI–E‚†ÈêjùêÀ †êž¼‚цeÃ1m8 –+¯JÏ¢ómz(,m!CÂ0[§)3 вÕWHŸË¯¡ŠE+êŽ$ÓÂ6I,íŠdócêÁ (~•€êW䢨 2+×Ë°Ÿa  áÑ ÕGu™F§‡ùÀ ÉT¦û´!ƒ“fÒÅIú:?œ>ÏYnaâ¦`,¿¤ª‹Ú/=þ|½ì›¶Ì˜>rtðÍóƒéÛˆêAt݃” „v¾^ 㤊IÝ}ú¥¢•j÷Y¢…ý¿pý„ëÁZýºAÕ:©ƒx•õ0'A*:ÉëC;&¤Ñ_ ½ýç ›]{|lv‘¥ÎöAÆ µ}¬=?ð7.RX£t*ôiÐŒ½25 +†wˈ +Œv‘ Ó³vÀÕ³Æâm¹ŠÝÕÎ)ѶsŒ«(Šô§uퟒ¡è‚tõt7mûV¥ï(‹¡k,EÑÓ6šÍÈ$pþ/pUí7dSÔ诂=Ý+Y=Ýu–È tWv%µ§¼ôåÛáA 渕;…¡|?H~É wén×B^œ>àØÑÚéß[ƒŽþj¤¡ÇmE6m<û«;.UºÅ9>üû½¬ÚÞQš“`QÞaqƒ¶àº|ú@kwµ#Ò¦ØØ´íˆj¯&ž~ç ‹¨\$ðßâÊW¤(=°x³ñ¤^JTQ†\tE8˜ÔÑ0BHz÷Ý@ܶO˜%J•Ddðn3¹tÄT‚nŸI>ðj¾Í† Ò¶¹ïž ásæÐsG‘”+ò.1ÝìXjtÆ$}“HÞT¸£“6»ö–:ܹj~“з¤½¥c×y™û×1×m¬š í ëÃÍî70š…~Öö]éÑø‹¼Ø~­iVUÀyÿ~ÇŽ»³5m·¨¹Þ ‰ßìØúSÎ@“®ïóæô+½Ù≯c‚¥†¥ñw4rw‚qò†›ß¥Ú ¡ ®¤{3 0—[N +endstream endobj 960 0 obj <> endobj 961 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 962 0 obj <>stream +hÞìXÛrÛ6}×Wàl†î “'ÇqÒtšÆck2ñxúÀÈ­F·!©&šN?¨Ù]€¢HÉNÜ8ióÐñŒIàîÙ݃³¹ _œ r] ¬"ŽgDg–(NJ?˜ žŽÃç‚2š „$þà"2ÇòŒ8Å—d4p°Â¸†±Ñx2ι"£ƒKúóÉsbXFŽ‡Ç‘Ó2Ëèòº,æóéâš¼\Ô¾œcŸü:ú \©èÊ0) IÖѳZ[ÛJ í`úÌW¾$dz¢ª|•Œ~œŒV2g!ËŒ%Lª<Ï Óç:Æ !R&uï!$'¨ðmÓ‡àsu¶á‡À—‹1¿*¥™¢"¹HRÃuI*%Ï%Ó4KUI*œ39=…+—qÚÕz\“ÄÂÝ›ÄeÌRÇËjš¤&.˜Í+Žé‘Òº&?"k``EÆ_‰a†"G¢QÒ^÷~Þu½ç´ocõ;ž + ,Ë0ý|KPÛ@èX€¯âóh6‹7gÓ뛺ÆW¾LR¥˜ ¿'ÒÏü €€ú { ìµ°TW±Â¥r¸ƒéÖiæv˘ó@%£˜ùÉô…_ÎO%‘2VÐú¦¿`wÚ€ö´1@ƒA +t+ +y4yæë5Äà5]$`´"WE]I¹œ“úƓƶ‰¶s–7YËMµàèéÑèG\ô- ÉTnvsq)D×"j©ê¢ös¿¨Ét]…×OŽmëÉwN^Ÿ½Þó’z)'~\O— _jòžJÅ@SŤ1í«j Pñ ¨’ç›E]|ìƒب?x)6YÆ@£ Åø®îÔ«ªKP‘ÄRÒV®¨oÈ‘³ŒC‰P88ŠØ³B*¢+» Nóà,°ÚDV_ÒÅZºœ.ðRWý*Yg:¹£OÐjš1éœèzlñ^Ò«åúÝÌÿ€Xk Í2¡T×Z?ÌÛ@lü¦-Èüƒýl¾ÜϽS9^Ζ˜Ã\ª÷w§²Äòç“$ÕRX–Óá‚©V~KO÷Mõf·dªy‹1^üÛÏ-ë>N°(o±¸B[ÅØ_ÜÓÚm› ©D»ÃPÛ3²¥A±áÇسÀ¿ÙÚW¤(=PxµòW¤^>TQ¤±»ƒI-„¤k8ÜÖn[ÿ$Q +x$"€Dpt£H¤‰@ŸJÐÍã>ÃSpø »üàˆ!šÃý9òöZÀDžQd䂼Il;±E­É™¤¯‰Ã« +#:ßîô¦÷ª>0dªùþbvŒÝq±ÝLÙ»+›±¬­kì² ü úýšßm †™s](ŠÍCQè<̪€ðþížìÖ½¥Ýn 7)ñ«=Ò| +Œ†]Ã]h.ˆfs?4ø¥ V쵎Ëðcàö ›pØ<Â8ƒNÒ·}’‹Ýƒðm.<ø[€“”ø +endstream endobj 963 0 obj <> endobj 964 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 965 0 obj <>stream +hÞìXmoÔ8þ¾¿ÂCqýî>A)¨' U»BTÕ}[oÙc»Y%)°:ݺy3v’&Ûz”ê8éT©É:ÎÌ33Ÿ±#Èùdçå± çõÄ*âxFtf‰â¤ò“ùäÙt²óBA¦ó‰„Ã\DæXž§8ã’L/&¬0®al:›¤Œs®Èôó䔾Ú{A ËÈîÎî£Gä°JDÆ2ZžWÅÅÅbuNöW¯æÅÌ'¿MW*º2LJCRÁ„5dú|‚Eg[ ´LùâÌWdwYÔµ¯“ééÄèâ°ÌX¤Êóœ0q®cDV2g»ç*“zô2‰Pá!DÚç!Ñçê¬ ñ‡È˜‹A¿.¥™¢"¹HRÃuI*%Ï%Ó4KÕI*œ39=„«Ê8íìrÖÄÂÝÛÄeÌRÇ«z‘¤&–+LgHÇüHi]› ‘µ0°$ã¯Ä0Cƒ#Ñ(é¯[?o»ÞqÚÃXý‰§…(Ë2L?ïjÛ ðC|>].ãÍÑâüCSåk_%©RLÐO‰tÀ3Æ à~Ë^'{-¬ÕëËXáÚ +9ÜÁtë4sWë˜sƒ‘ðÅÒÏ/}yq˜hÎrZ&A«iƤsb豇|JÏÊË÷Kÿ Âm­Ù®˜™Pjhmœfm!¶~ ÓôÿÞ~6ßïçΩœ•ËsXAû€KýñöT‚xBþ|‹,ÂÊÙÙ©×â™-æ‚ö*rQÔ Té= C§œÃÒ¼ãŒv«::ÄpŠ› +æ{.+ÏZD· ‰ +º–"\úDÁÊî5Ûjˆ’Cnñ9 ØoàÎ`˃Ñê+Š¢-Gÿº¢DnŒ%ƒÉlÛÝŸî=î}[˜‚ʈïP&õÒ”3*´éÞÒ¤¹ü§Ò´Cþ_¡Z¡°ž6”3ú#ã¼}õym«÷SzÜÁªšqfA„q7eÖÉì‡#Ùü4HÚœx¼¬·HkÄM@¸Ã}Àƒ¤äù/ô± [½Lð;õ²a‘N´ý…q5¾)ÿ˜Œt5i «ºÛý‹˜þ Aw°E°sÜ®·#KH’ÀçŸñ\7~MÖEƒø}ëñµF5ÕÌi Pv[Xéóƒq±˸“[ÅBq|7èË<Ó[Õ¡äÙÉJÖN¾m ÎEÇÐ -=Ü55šÝó©ü-fxñï¾µ²Ç8Á¢¼Áâm3rGk7mB¤ýDu§ +K?…bÃÙ U´HàßòÒפ¨<°x½ög¤)ê¨SŠ8\‹i>9…mP*$½L ¬íöóD)à‘ˆ4Á"‘>'}*A7Ç OÁ àƒ~îòk[Ñ~28FÂë,CäEF®ÈÛÄö# PÔšœIúöq0¼®1¢ãÐÉäöôQ•Ãg‹LµŸu®š.öû{{e3–õuÄ„¼@óÛ ¤Â° tneÀáïB±¹/ +‡Y5Þ¿Û²“ݸñ´ÝŽÐps-%~½eCš¯Ñ°q¸ ÍÉ=Ñlî†foŠ0$lµŽŸàðcütï9ìaœA³éëžäâêAøèü-Àí¼ªû +endstream endobj 966 0 obj <> endobj 967 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 968 0 obj <>stream +hÞìXÝnÛ6¾÷Sð’ZaFüIµWiš–4HŒ E° ŦSo¶eHòÒ`Øí-w))’•¬Y“®»D2Eÿó}Gääz´÷ër¤%1±%Êj"cR¸Ñ|ôz2Ú{Ë '“ùˆ Ã\¸5,µÄȘłLV£¤°XÁÚd:³8Ž%™ÜŒ.éO‡oIÂ,9Ø;xñ‚œ·ÌÒüºÈV«Åúš­+W̳©‹~žüªdP•0!2æŒë„LÞŒP"odKŽ²½è3—Í\A–YYº2šü2:œŒ´`Fƒ'š%š0!Ó4%LÙ8VÁ'咽2¡z!¸Aú‡àh†Ô;Ÿx¨lã3šÃ †v™àóqIÅ$½%"æÑ8a†šh,Dœ +¦¨8M¢17&Ié)ÜÀZ‘‡m³í´"‘†»‹ÈX¦© ëE¹ˆÆ6ækŒ¦UŒáB›:>ÜÖf`FÐŒ?£„%m0$%íuççC×Gnû6RÿÃÛ|¤fÃ7ªëpð,:÷—Ëps¶¸þT•Pñ¥+¢±”ŒÓß"a ÎÜŒyƒ ôëê5ÂW¯†Vv±ÄÖõìï`»6Š™»6öÍ;…ØeK7_¼sùêb‘a{µz(@è~”à{_µ(†Hœ¹j FƒµŠ®#¨ë’̲*#ó"_‘ê“#u÷'AvÊÒ:¬(€ µæâh¿o3ir·K?hæ#HYe•[¹uEë É¿^+2¬É_|§ãxÿàì}O‹ìhhNˆZƒ›V‹|ÍÂu¡Û™’€`’‰$i_–íË*(bâùíºÊ>÷Ìÿu@¼ø&Ö2@$ˆ/¾«Z[/iY€‘¦¤“(ò{(PCz%bD¬7#:ý”?::(SLp6Uœ„*¾„45ÍV®ŸÁtlU'dô +c+$²««5”ÎòíÕÒ=¬4ÈéG€i4Ä?®5(fµIž¢áö P@=ñÞ8Õƒ¨UùæØ®ü/'ÛU?~À:Üò2‚ôK0`¬À\–Ò½½äqíH•CR7d’Èz»º–›çÁTC7‰éß–Œ-K…1½´?Öúé¶z&ë§[0¨úfÖKÉåÀú«¼ªÐì|Õ8q‚×]',SÀ¼;N@O[,¯þ‡8¨‡A¥uè +LùW]Ÿ`Ñ»Õ÷ Vƒ[¬Öü0ò*£ò¶°9@Ý#F^¥,Šú®ÈÚ«¬Lغ¹Ž&‡gû“ÃÞËÐœHMZ£í#A['GíîJù·  5Ìf?²eÿÈÆ,ÿÛÏ Û_ÒÐ Üg Üy•á¥¨úáƒnmá²>˸ÐOW}ûýT×^;¼lv5‹$*6>ŸÉç¯SÌã/Ó³0œéÙóÃæ؇øa‹×!É ÅüÀ%‚ÂÍ.ÝA7|½A:ì€ Ð’2a |Þôú' §©½ÎÐöX咽îªoáLÿ¢w÷'O¡÷‡HmúW{¤î)µwÙ+þKV¢”â~Êïrµ p5žc )È@-ô$¯ÜKÒg.`€?ªæ»’‡½d Lž#;çø!X¯,—yÄñù ž¯”•ÛMV¡)àå€ö;ìe >8Tcj—¿è›÷ýtqfc#vÒE!–zÀÝ¥ »Æ%¯?>"ù(íã—¥Á÷9 šž6SnâÙÝÝVTéÁ'ómã> p—'æžùF7<„J7¾4§îã#¥Ý7Òq˜«šyN6g::¤~Ɇ¯~ø\§Yÿ–[W’¬pPÀ›› +ùz(‹pÅ$ïhm¦-”T`;ÐmÄ©¯ÛfÒšGRBñPFPDÑXR,¤›ˆ£NÉéíË~A Øc“IûâX³õaÔ9Öá)¼ý–[Š¹&‘nWÀ(Q¤LÐãHàò¦DΛælïeÙˆYYŸvF×»Z”mõ<œYËl›×0â5-÷4}XÀ˜'ÌÏT¦kJ§†¿ÊŠÛ§Z¡R¿«„‚wväØ{GyÝÌÛIœ Bâ6;2ÄPžÅÂs­™Rá8‹›3X.SÝü: +Ïwý“¿“i$ñ +endstream endobj 969 0 obj <> endobj 970 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 971 0 obj <>stream +hÞÌWmoÛ6þî_q+@tc†¤Þ¬Àš&EŠµ5µXQƒêȶZ[2$¹m0ìí_dËqÒX9@,÷òðîáIÂ|pòüZ¼.„"/ +ÀPeƒÙài28¹ !™ ¤ø%£Ç„®àBA²´Â…‡²d:q!„ É—Á{ç×ó ðyg'gøb2â‘SΫtµÊ‹9\MVÍÒiÆ~O^ +׸ò¹R>Œ$—ɳY”­mW’mmú*Ko² +Ζi]g5K>ΓïŘGÀý¸rã8îEBx&£@ñ0h×1U®¼Þ:"A@¸z3ípˆuö1ࢵIS<2¤È(°Ð$ý2e®Ç]ç”läóÐ ÙH)+î9“NÀF2 ýØãʪҨÝl¦ °ŸÞ²0â“yUçl bYœ,Aø(„ Ù0èH(Œ¿™Ï}‡bÁ…î{ïç}ßß©öc¬þÕô¸~ÑVh`@zæþŸ¿,—æá*Ÿ/šK¾Î*6r].ÏL…XgÙ ×aíÛê •®Þ{õn»Ô»º“õªBò ¢k[Yç`Ú ÑVõ”¹Ø¼S–0Î 8ÿšjá +ë…ë%va¯“·¤~üг„¡ûF¶}#‡d‘ÁŒ¹’ÇŽîé,—%“þþBd‘1ãóWêé¤+ôõ¢Õ`#¥5¤0Mu -¸ætZJ²ädd¹ü€9ÉÁýU¹iò"ƒ/y³€#in×Ødü6.\ߘš„–Ù¬BÎ>|JP¨Ë<ân´­ Õ±—vîCZÜh?´iäb«z†ñÂ.`Ÿö?Sb80öm0ŠûjËTÇ’c,½ <®vðm*´gÊ!Yä5‹Lî°øßàZË[.‘‚ëâW šK«©ˆÈðwnM`Ezø•Ña ÷¬S*URh œétoÒ&…YU®Lò=|ñx]w'¥ãyÉØ&ï=Á{W†NXSâ{ƒ•‰rxß#ÖS`x¨DUÀ]eZŠß3ò¢UÊgZ•tÞOa¢Ïþ,¥""¹.€?LÙ~àËžHZÐ…ñŒÁ|PÚÍnk”æÅe1+Íödxÿ†7ÈÏÈ-b¹ÑÏM:aðg{1à=#0ŸÎ'î!ëϳr…g–gõpkxn„·§;·J/`Ì}×ÿöƒÒb³—USŸöCþÆ–Ë&[ý›-ù1|ÜSßÉhœ6‹á®ú«cÕpW÷o¹Ê¦MÏC…‚‡Õ{*+x ¨ry;/‹á6#øæëg»ãa?oót؃ösž>¨½ÍÃjoílãM$"o[/''tg‹lú òÙ–Ks×L80-+Bd¯I¤Ø­¹¹›8zãO?ÖgQL¶[í÷tغššMœG‰ö^CQRÇ@Ÿ³¡ÉèˆpM›Œ«Æ»†O&Å£ ÅӃ͈Է© +ݪ^üËpùaXÖ•npÑøòÕäãÖHm3zR¤«lâLØ„î"³ßÊ-2¸môd‘Öe•åóÂì¤Ð¾ ØßM]ùi¡h¬™ûø§ƒàâõÕ9Š/ŸS&p\½9KÞ\£m8"V¡ƒ>šžÓÑIÔ\Êx…zQ‰©Íô:ª™Iè•…CÔI3"ÂãæÛUx×íÑ Zénr¶xÒK7[ÖÙV(6æÆeþC Ò8µ%¾x~dGÉÃÐ0)=_âüu£{àw ~×CÕû=¸Ø;4¸3âáêáůÌí‰ïa4—Ôk|¿{×»¾qdŒ{³‹m¬E„ßÎNzhqn¯›l½gC2a§ÜÞö8 6îvPí€n@² cš8#'eø¯Ar+à- :Érƒ³Œ +üg‡—L‘x]ÓðsÝTø²¶©²;êv§¹:r¹g_$ið5/ (÷ñÕÁ¼hÛ7ÔnÁ+ÿ0®±Æ +endstream endobj 972 0 obj <> endobj 973 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 974 0 obj <>stream +hÞÌVíŽâ6ýŸ§¸Zi¥¤³ñ8ßI§‹DfJEY +QWmé,˜J”dºC«} ¾e¯í@˜0hUÚ¤ØǾÇç~™+×÷câRq-ð¨¶ï‚E¡`Ê\ù6T®ï 0 œ+† ¿ø0|>x%Ô„0U(²j#NPJ-?*¿ªýî8ćÎuçê +†…føÄWó¸ˆÒ4Ébèe+æÑ”i¿…ßãQ–<Ê!¦é€nÃu ¼U8£±å¶ Î-¨G,š±:«¨,Y©…K¥*®I<=q‰ã1­ €Ø>¥¶ôI¸)ÑSbÚO1|ƒ%ÑÑ]á|¸hû[Ÿ¹Ãã¸.OúüC¤Y6±Ô ˜ÔÐt‡xª§é¦I“ت¯|jxž¨C VärÛìaZæâè'Íó‰«2‰e¢é.nÌ3M+ÊÃcš®WÇÇðk<#\ÆßšC•kð@’Âîùlzìyæ¶Ë°~ÁÛD,—ø<üt[ nÖ øWÎl¯Vr0JâEUbÅ—¬ÐtË"†ú‡fzXglF„ ,ýºz=ST¯‹­Út±#[+ +K™ \I즋)v:Bk'äGsåh]$Y5Ÿ¨¯îÞº÷îðºœL²Wo`dzkž ñ$ÎQÊ&êD›h7{%KyûÜ*‚ïoYÝ"•âÃ0lÑîòØdÎO¨‚u•ýî’M†_5„O´îéD3)ñ­Æ•¶§€úöqm¼­²,'"^»!c‚4 ¼z |ƒ*FÒì!mHã ߟ\]í˜Ã¯N¦¡=yƒö¸÷K^Ç°u2âGìq'Ã8“ùÖÑH!,ìúцµñQ=û’úíŸîŽ0蔣”GõìøxiÛ÷i‹¾\M٤üÀ&z+UaðqŽpUÊÈŸHä\l|šÄ=û›“)ÛK×ðÝ(”áÂa§b–§¬*6[™ëÑ¢;lq} m˜æézÅ*ì1JÅ L£ >0ÿÍÿ<8Å <—$BzKy„jˆnD¤Þ„é¹¥¬ð¥ ÎR‡Ç[X!ðB=—“jº@y*÷OMÐ8ܬ±t—{v¤þÐ×’ÁŠÍ“{Þœy*^ +º_Ÿ´i*Q™ èôÛãñîJ‹%χފY%X… \8Q¾ÍçCÁ¢ß&û˜zÑ#Ÿ¡»O´Þaõuç]\ýûdV->CýûÞmøÞa‡Õ Öÿ@ý0:O> endobj 976 0 obj <>/Border[0 0 0]/Rect[421.62 340.26 534.36 353.76]/Subtype/Link/Type/Annot>> endobj 977 0 obj <> endobj 978 0 obj <> endobj 979 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 980 0 obj <>stream +hÞÌWÛnÛFú¨¯ä‰Lª5wɽ0yrì$pëÍš>0òJf-‰I56Š~Pÿ²3»KŠbm#š¢6,RËáìÌì™sÆV³£7—VíL¥ ™Q&ÐØÙrö²˜½æÀ¡Xθ€ñÂf¹&,Plf zaI†kÅb6gI’¤P|žý¿z ’89:yö Þ517ÌDõª)7›j»‚³mg›e¹°ñ¯Å¸Uê·’L sθ’PœÎÈ#ï}§œ|;׶¼² œ¬Ë¶µm\ü6{UÌd–cŠIL¤yžËL’d>#%˜VýsL•‰ìà9V‚ +‘º‡˜éP‡ÜeŸ>ÌLŸ4ÅÃ5EFiŸôÛ2N3–Fw Ï%Ó‘ŽçB$¹`YdbŽs®µÌ£wxƒkMíÍ®v‹b…wïcm˜Š¬_oÚ*ž+4¬·TNW¬„ê#„Ò¡@Ü„0èH(Œ¿bÉdD1hðNa¸N¾>týB³oãõlæ UÌPù“¡*Ïüü+{¯×þæ¢Z]w-B¾µMSN“{z Z2 n`Ò ¤ (cŸÊŧs¤6c&ÐK Ο»#=Î5SÎã0 ‚¢–Cüy°å>ŽC"𼥺Ÿ]´Р¼Ó Û!ÉrŽÁU6N9²,’­$²éK WeW²©7Ð!ÂN™lT®<‚õöµMs&Ìh,¥ÀÅŠÝ56O4 ! …aJÉ~JÈr5ÌÈ|˜‘N±œçåvµÃ®@‰wœâ¦¿Œ¦C»È<órXkæ+ºhŽ'¢ðD°­…<ÄÕ|hƈæòK€rý; ¸óf?#ŸÐ1Žâ`ÔŒ7tBT?ü´Ä¬÷h,5«ÐÜ\EýK¢1,êmÛ¤ŽÌ®ËÍFî/°bÖ™ãúô ÷øäºlžÒýk/kR½®Þœ—w¶¹w»‡_.êO¸:}óQñä†#×øÒ`ÝéõHÕ.ìz]nm½kƒTÞÏüäMN¼e‡€šx›ê9FVUcéìÿsà2 ¾ëuM®‰^ׄ×5óuºÆ…ÍõeÒ¶·÷äþ ¼itZvø9’3TÔãJ²[\âzæ>=’‚žï½~™$åýF 0;dC +endstream endobj 981 0 obj <> endobj 982 0 obj <>/Border[0 0 0]/Rect[449.34 381.24 543.48 394.74]/Subtype/Link/Type/Annot>> endobj 983 0 obj <> endobj 984 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 985 0 obj <>stream +hÞÌWÝnÛ6vé§8è•ÔN )J”´]uMRtȲ"q»‹vŠM;Úd9ä5Ážho¹sHJ–»Í°Ø4Éóÿï0Ö³“××ÖÍLIHx +Qª@r¨õl5ûa>;9 `¾š‰8þá—H–¥HÎxóÍŒ£Æ#Ü›/fãœK˜š}ð.ÎÎ!f)¼:yõâ¼­}‘²ÔÛ®ë|³)ª5¼©Z]¯ò…öÿˆ¦¤5³0Œ!L¨æ§3Ò(:ÝRn£úJçK]ë2oÝøóßfgó™ +Y¢0Åb,”Y–‹RÎ#“ Ób¤,ŒF‡˜º Í!Ú§!3Ág€‡QÚÅL#¿óO¹/#&½¹ðƒ˜%^âaȳE^ê /ó‘$qæ½ÅîÕ[{m¹[´à+\½÷“”)OÛýº)ü@áÅmEÙ4¹â”ž0T‰ËHTrã/?f±G>$`•Bÿ=ùyìû‰×þ­ÿãk¦R±”ÒÏ;€*WÙ|›/ËÒ.®ŠõmÛ â]û”Lxøa‚8ÓKfBè;ô&¡A¯ÂV}ÜÅ’Z×4²Yáu•D,Ù·1ç1EÂM—•zU¼C“§y›Sõ-ºgÒ%Øþ¤"èå™iYT1¿Õ°C°D°È+¸ÑÐè¶5,H§6‰qX;¹Í«µ^BÞB^ù‚ºáÚb£áSÑÞB‹ºuÄ_ØαU؇P_ëö`)˲¸/ah*ç¡¥%ØkNi€ ]O„”Œ¿þ²â`Ä^´×ƒQW÷ùÏ­T{[Ô˜Õz½ÛèªeÖw‘ ”LA YËB«Ð°œGt~ýPµùý(Q諲DI DFŒØ’fF¸ü:`}pÈò‘äLö`”MÜnóÞGß·¯C®m,C7~ÆZÔ]n«¥^廲…«]©íŒ8Žà˜• ÑqúÂ4oF±b Ä ãƒ¦¹üùòôìü廋ùÈ`¼Ç§ËÞX S{è]½»8I"¦§X¢…ƒk½ÝµE¥(ªE¹[j ”Ïp@ äÂét^à8öñ£,·Ô^©÷‰æ2» Œ}ç +©o„s*só°ÿ›#yN“ÁýÀE°pXÀ‚jã‘ò¨l§¡„%øÞÀÁi­L +:b¼J” ó‰…n:‡n:Îл|­©Ï2d“4›@ì1?Fg±rž’£uÛàì8º"Ôf6†©²]éûZô¥Ð¾ÈèH1»O?Û·«z»9Dwœ©pØøÑ!>TÊä€÷„Ã4mÞj"„’1F8X¥¶ÌkçL€Œ„X +ÂîuÆG÷Á;Ç(T«¡1Ú°°©Ý#ó6øéåmÅÈo¾½±ItŠ©ô_Ew}œßâ ÒðÌ’…§=e<ëE“ÈTâć ûþ3(Œ#I£B¦qÿ6î]6 "N³²Ÿ%+€åW “~zü! +ºœD$aW¹(ëx>Œú÷ ¦.plîæø`p=¥}ü¨u5}kÓJ¬d]L ø•&‚Ä -Õh"× †t`ÚXòþ´.Æ1ÇôòøŸJ7‰Ql[5-¾&¾êçPåMÓÌþ÷ƒ3Œe¸¼‹Ëë»|¤7˜?wתݯ½­·wÍÁ;ãwxñÒ8@Ân#¸îŸ&÷>/wN·‹#‚ËíîGÞ0¶v›];k(Û_´fŒÍî:'+ÊÃÀŒ3€·ÉØ›fjë·d­—¹nk“Ýã2¦4'T˜ÒPÊLÚ/ò]’Ž‹9ÉdIbû|&“ô +1¦~)–íí3¹Oùt¡‰¥sÓÔÖSÅÅUë³ûVW 2îGÏ$Äã)ñýá‰åÓ"_t´ +pæËâ,Â@9úo0u(k +endstream endobj 986 0 obj <> endobj 987 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 649.62 135 661.62]/Subtype/Link/Type/Annot>> endobj 988 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 618.6 158.94 630.6]/Subtype/Link/Type/Annot>> endobj 989 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 990 0 obj <>stream +hÞÌWioÛFý®_1 `i[k.oÂM×GêÂq[NPXEÁÈ”ÅF¢ ’JlùAý—}³ËC”íh Ô$j™7oN*ºì¾¼PtS—B;"/ +ȵ©HÓÁ£Áî±"E£é@9dã_* +eQèÚÒvh´Ø"mk£É`(mÛviôqp%NŽÉ—ìloÓëÂR‘ŒÄò¦H‹,¿¡“¼J‹i2I­ßF?C•kTùÒq|*©ŸF‡–¨Ù®bÙZôyš\§Ì“²LKkôÇàh4ð½vÒH:nÇ$½È¶=cQàÈ0höaªt¼Þ>˜`"\½ K[bm}LØô¢ÆhÆ£BFÆÀBcô«Är=éŠ{rle }ŠÐ:Ž;Ò±¥„m Uú±x¬Ksìz5©È +ðôÆ +#ˆÔ¬ef \æL§&Ëf~'k‚TTÃ`—0Œ¿,_ú‚1„d„Rû½ñó©ï¯<ößHýÓp1ýv¡Aíåü+:÷çsópžÝ̪!_¦…5t]©ÄË géµÔ€ûuô†ŽŽÞ¹Ú¥±or+–q`B™b—‚À—®×¥±Œ€!¶1"Ë+ÊW +o²¤‹±E“e^V{kAhsBÄÎè°é9\\9Ζ:MVóŠØz:ºK·ˆ°~ûê:%Kôc§¥¨¦S(#n4Kij¹ˆ`¡;€óùÒR~äö˜ZbKÜq—PB«¢rÖœ°J””Ð$Ñ$¸¦5M¸nÇuK˜Ïß%‹CZ¼§b¹ª²<¥Y5£ +HªûÛ”jKüÆi#9;‘N[8g +ðqhø8x÷~„ûœûk•ÒuR%ÆYCĈWS¶t4š½°ŦÅrÁ\rÔ4-¬%Ó•Ñ?â’uŽgqŒ†BbîaŽ-ÌŠ!‚œ‡¦—ÝiûLÁJÍ&O;̦Á‡´týu`~k•o”Õt†˜t@§ÃÏN_hC1ÿ P‡Q]Š5q;T¦iÞ/ƒþ¨©t¶Ž;D:7yRj)¨Fó´Ò±]· &¿u¶'êdðù@µvßGÜpëà`%e:©2T7æÏE<öýÔo9<§ÆaÝnmÜK.›M†þHc´É|Žu”²¿›Ìß1Cdó{…Ì7Ðî¯ ¬é[PÆšNòér§+ÌO^¾ä1&‡Æ+<óŠõŸý«0¢w5ÛëïCöyèØÒûpöã'j_´¹î»µ¹¦ìÈëÌÅ°m󬾋«»–-è`–NÞS6]«“Z¢·¶A„u²p‰g¡o}÷‚º²‰åµÊÙo?Iÿm>¦cñŒÏÔkÿVô°c™]Jx»Â{VR¥ )>fÕÔ"”š’Ç@Èñ86¶ZîêZÓD[9)tÑåú°²»‹·»z @¸s0Ô²Xq°™‚õ”}0L÷w¶í엳ããýËÓÑùåé«~^2º‚Àá¹Æ–žè6|=]rH!Ê3zAöeô}} Ë«…'ôì­íí‡Ñ¶I3Ñéþ¯GçÀì0Ì»¹„ÀÁì=* ¾ }e–”Zý[¾p]ÍÆæÚ“‰²†èí gÊè'z~³ëÅÛ5y_ ãË&¾ ÈÅk,½Ü„±=™{Ÿ¾-Éf(°hµ\°³\GP[]DéçêÓ<ß¼º|Þï¬ø…¹VO·:q³†V¼ü-Àã9u +endstream endobj 991 0 obj <> endobj 992 0 obj <>/Border[0 0 0]/Rect[485.28 385.26 549 398.76]/Subtype/Link/Type/Annot>> endobj 993 0 obj <>/Border[0 0 0]/Rect[63 371.22 123.24 385.26]/Subtype/Link/Type/Annot>> endobj 994 0 obj <> endobj 995 0 obj <> endobj 996 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 997 0 obj <>stream +hÞÌWÛnÛFú¨¯䉬£5—w6M4±‰cÈD î-­lº¤šE>¨Ù3{‘(Y¶ƒ"j"¹;œë9CI7ƒã·—’nÚAQäç)E5j0ü\ŽO%I*§R€\dž‰"§, +DR9Ð"‚kåx0ADT~|òÞœR"rz}üúèˆ._æ"÷–7M5Ÿ×‹:[tª™VcåÿVþ‚£"sT"Â0¡¡2M¨|3`ÒéŽ$ëÖªGªš¨†^Ϫ¶U­_þ>8)i(²ž¤"II„QQ$â<bã“vSoÂSÆ;› DzŽnÂPhç Âfœ;ŸÙ™±alWf|~_ùQ,"ïŽÂ@úÃDd^æÃ0(B{…/=¬Ê,K +ï7Xk–Fl²w䧸ûÕÏr‘zʬ7míS.M«€Ã†ifã#skg„ÍøÛODâ± ¥´¹î=>týJ±ÿFëÿXL' JEÎá\¦626 ø&g¾šÍÌͨ¾¹íZT|«EBzøa†:S¡ BéÛêÍB]½)ZuÛʼni­B©)e¾)"J3(‰·] #àH`Àßñ1Lðn«Åd¦¨]UcîÜzA ¬.5­Ö³®YÏT¯0n’7VÁtÙ@”®¼š^Rð‚jú‘ðÚð'Ö°ž_•#hh¯¼+GØ8ºòé/­²üÞ*ÒQñ66¼4ZðˆU§§@Åg z.€£Ö–Fuk¶e3¾XÌqð–x˹Å CaÛÜÂŽ´ C„}¹âDÈ ¹éîèšÖ‹º«Ñ¡vm ž¬=qÚµbéÄ[y«ˆÁál“¶X@L—šƒW›"ïbôáâdT~|srzv~Vž}8¿4oº“¥ˆŠ¤÷®Ã+s5ËuW/T‹ŒŽg뉢î–ßÏñ–yiES?ˆÈf3ü¦Þg?ô8cãùÖõìPűû®ÜøüïvÝ„)ÏœÜpÓ\Þ Q¾h–+‹ôZ&½ÄHs  ~‹Ø=¾BŸ`ßêã·PMHתº̆YDò)ÓMGy› <æÂF~ëŧ¥/eX¿[)×ÁüNPY(ÒçTSߟ’÷·lôëT¥÷Œ˜}ä^ÑG\ˆZ¥¾cvËL¨ Æl? tõ?RßqöëÛÚ2R7ŒDœkåG(KF°„Ì燖&UWÑ´YÎQƒŠì¶$¬ +“oÔ–"©íªNÍÕ¢c8ëlßMk ™dÞTÞ³DÎßÎ&ÿÒ7΄IqϘYÝê+@ÿª10ƒ€J¯«Ñ¥ëVM´E°0pa…‰©­{ž°,Æœ¬xâ¥9\ÐG_ÆÃÒÇÏšæ~ÆW~h;†Y@„‰Ä—ýél›Ž~pés”6ýZM™±2oÙ(ºó%wŽËp\ƒ-èÍxâáÙ©¡nÉnÌáŽñãOÐsÁt0êBÍÃ8æ©HÓ^\l«Hpê↑€¨Bf;€gƒsŠbÕp×P{·èª?aÔí¼9~½JÃu c6gí1lË¿AÛ0[+“ýzN­RôìÂe“Š×ñ¨™c(uH瘲sŠ0ËgŒ"~lx"F9ëY½å½ö™›¿Y8*§ž®D0„û}Ån„rÜd“fâ›8D.‡?7Ž?zW-nÖ€=ŒKº®rÔ~µØÿÒ±(\kô ]˜#å¶ç .y| âm-òÎ¥®æ¾Ç!ª rm†-ÖbQRs(9† Ìýž‚P£2ìÏV•Ç}Gc=¡5ߣP1Q¤w°þb;Dí s–`'Žõ¶{\ü¼š?,)¢ –ä}½;R5î¶j!u¾ž_«æ ¡rù”¢Ë=§ŸËßW«]Ù]zy˜,××w[9ûÚ­ÒÕ=%Óð¿'ôåÅ“t,ãx¶é| lc˜H2ï8ø\©GØYbf5-6ï±Á}¢¡–‰:ÀDã¢4èžÔ\Ý!Ç[Â>ˆwIöµp×>w@’§‰;õžS=µ\º)RÃUÙÃTÅ +zLñ@_·´œw}BG[—dÏ¥ÑÉ«w;>„;ˆ-wçîe³;áKÇ÷èì¼> endobj 999 0 obj <>/Border[0 0 0]/Rect[485.28 672.24 549 685.74]/Subtype/Link/Type/Annot>> endobj 1000 0 obj <>/Border[0 0 0]/Rect[63 658.26 123.24 672.24]/Subtype/Link/Type/Annot>> endobj 1001 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1002 0 obj <>stream +hÞÜWoÛ6ýߟâ`•F IýFÐm~ º6HµE< ²-ÛZmÙ”¦Áдo¹GR²e' ŠbÊ%€ESäñîÝ»w´¤ÙàøÇ·’fõ ô(1ùqHž *L/ÓÁñ…$Iét  üã!ãˆ'1EžàBQºXáÂÇ\:¸\áQz7¸a¯Î/(à1Ÿ>{FW•#c³Õ¬Ê–Ë¢œÑeÙäÕ4çÎoéO8ʳG\©€\ÉePz6ÐegÛ“Ú¶1}g“¼¢ÓEV×yí¤ ÎÓAà'ˆ#äAH\yI’÷c!|Q¨xvï*WþÎ{ ¡ðÌKDºÁ!1Ñ'„—~Ü­ý‘‘öL;Ù ÎÏç»'%¤ãáÆ!p¿eo¤ {CÔjGßmõâ}…½Ê]eIë÷…ãI¶M+ªïË&ûHE9uTlç4“ÙŸ,k +ð1­njæ9éŠlë8h%#äaX„:YëóP¿W×o®Î¯Ówgç—¯/ÓË7¯ßêÞh€”ÜK‚-ºjãeÐÂ[7Y“/ó²9¢:ÏéàªZ­ 6H kteŨÁ?†ªÄÝGÚ(ð8ê>›º„ïѾãgù´( {}ÐJŽY/xì>Õ†¥òôû=ãqlà6xZ8| ‡×!ñ¸ÊFz••³Ûl–ƒ$SÇS?wðQåå¾ÀJŸ'Q ®Ø†Æí‘­à#Ñ¥?¬Š îxáñ°D ×Þ0N鼨Ö‡ ‡Ã2³ Ç\mÎéK‹l„rï‹œßõ6“:[«©Ù¶‘¨Í|ÃCcËÕ‚íƒléó±^ÍŸ.5úîù;¥¦ÝhP"(ŠÕÇÚ½¤¡ÉÚi†y¹IÚï6áGßnNdT7²kSv“ÛåòÞîN?¿^Wû/5fóê,k2º­íkëÞmÏF³ÓÜØœ}|¬MÎóñ{*¦[‚˜®ÁPðU¤žòû°zÈÌÆïžÓ–¼˜ÞòwãË~ ë +€N‡ìÀh¨S®0ÝÐÃ"À4°$ÜtqçEËêÌÜW²½3Ò:Ã%¯œa-˃¡sÒ-kµ®wt•7·UIr³Ä¼üdËhƒ˜@;ÚDkß:¼Ûy1ošoÿÔÏ@†s±Z-N>=¡l*ÿSe{LÔâMÛ‹êÖI–MOø˜Êõ +üaS<úúb® ¬k•;¾øúÇÍVCí%aOà”èaÂæêŒuj wܘÈ'H!Ä +jâ࣢<Ïib¹-‘~Ù7µQq\ÀŒ)¨,¬·j¨ô…Máq#&òÝ´<9åC-•îÎ=¡èöÕ®'t6ü}¥Ðu°Ò³\–ÓÕ“RgUÎ(f¿•;u|µÀµµa3 +þßi[' ÒjôPVFx»ÖkɆž;Ñîvûìê¦/×C¶n³íþЦÞ^6‡Î,ŠQ•U÷zƒCÏŸ“:O£úêòåõ‹ëwô½n€tpD=ó½ÖyiÌwxá‡Æß )ë@( +endstream endobj 1003 0 obj <> endobj 1004 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1005 0 obj <>stream +hÞÌWmoÛ6þî_q PTlc†Ô»P´€ç¸‡Ô͵À0ƒj˶Y2(¹]0ôOô_ì__“&YÛ³?H:’wÏ=¼ã%ÌZ'g—fUËw !¸¡Ž•¶¦­ãÖÉK âiKÚ ð< +!p6Ä‹–@-\¸(‹Ç­6B8hýj÷^‚ÇCèžtŸ>… ÅdÈC«œ©d±ÈŠô‹:UÓdœ²ßâŸÐ”cLyܶ=hK.}âÓi”kÝŽ$ÝZõ0M&©‚nžTUZ±øV/nù6|ôÄçžÜv¢(î†B¸Æ'í¦DO¹íî "4Áуè膆H;ºáÚg‚#F¸ãó«„9.w¬k°…dmVÀÚ¶-"›»VĤ尶 /².ðeª4Ó&«q ÌÇ··,¹o¥F®ªŒµ}œXĦæJ=¶í ?2l`ÐŽŒ¿™Ç=‹0`”Âæyðù¹ç§ý7ZÿÇÓô8>‰~±P¿Ùéš ø&6;yn^†Ùl^WñUªXÛq¸´Þ3;À8K'\ÂÐo¢7°uôú˜ªÛ,öLjE<òM(ÓK䀠w›Å3øKóŠa,B6…‘UÕj¼XŽ¬¥*—ýåÓ²ý‚>âëe:²F쎖 <bÄvVPòœ6Šµ“,UVÔÓ‘utÑÀ£ +ŽŽIl ¬µ’…ÖŽ#öL+ŒŸ|)¾E2ÆU Ü(<ÄõªÓ¾ÖÈP|Ì ‚#`¨ýëÁ½Ï’›ä}ÚÛ~ç»PfP©Užþ dÃ7ç=DGbxˆÅàף˓kZ Ší¼óKoø½6´(i`’N“U^ï2x7ÆÁëÁiïeçÍyŒâ†É=Q¼·Ïk¤m‡ Ì||HézÛl;9!ýÝy:¾‚zžjE©ª¯ÉlpÍ©fÖf*:«ùØÒ4Iê„œlh"‡>õ?ÝG|÷Îú#–Ì>ÌÈð^#Ã^çœ,|‘úË{Õ_ÆÃþàì‹ üü- Ì“j˜³m°Â_÷pÓœa$ÍàŠgù{™™§Ózdéc7ÒH¥½ž+÷Cã…¢ªÔ,ØÄßÍ™ÊGêÏîöe°Z¼#_”qænWЉ;ŠŠ‚Ö«[ÓöV{—µÒ¥jö{UE¯•T¤a¶këöy‹ë&{P.1ZF£âæƪ´Æ +U€xöq¿ÞvÝXØmê1¦í”ë¶SšJcJO™#ydévRZy^2éâ÷jµSfcÉ·þ¤–SZÉb™§PÍ×3XÛEi Œ @¢Ç47놾ií›þ2Ïßa•ö&W ÊU)|Èê¹>\è@Æoí ŽgTêîÂÂhS¸½bÒ}w¥CdëºàA¸…pÐh[Ç mï#î}‚5¦›+ ,»è ¨¦ï±Þ—Ùžì¡q¸¿C‡»¡£¡ŸC<Ï*doË¿ÃË"QÔóc Ui~R‚®yÆ›ˆ·£¸a·œêiúŒfä cÕx‹Ð÷ŠÓtšYáu JÇôäûTï7y8ÂÁ&°.n´xÞë˜FÅ´?be£½é¢3(Gôæün¶õø®BÑ$ÍöGL>ÉŠªýâúøÖÛþÐjö†:\ß:ųVøN/›ƒí!Å-›nC¯¢cn\*…\=¤Èé…?<‡mxRýn"ôþ#6Öv+(J*¬pKcÏxïÅpR§kewmÙ\!a™à¯˜áL~p`ìôåa<<èäÍÉ×€"4ëã +endstream endobj 1006 0 obj <> endobj 1007 0 obj <> endobj 1008 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1009 0 obj <>stream +hÞÌWk‹ÛF…~ô¯¸ FÉjVóЫ¡…Äë—f³¬ÕB‰KÑÊc[][6’¶›Pòƒú/{gF/{½i +-4µ,]ݹsνf°¿™1XU£@@èE £„¥-G¯’Ñùk ’åˆqðð?~°(¤q¡ð¨Ç!ÙŽ<ôB=‰÷’läRÏó$÷£÷ä‡ÉkðiãóñóçpU:,¢Ù­Êt»Í‹L‹Z•Ë4SÎ/É÷x”°Gù”s\FYàCr1ÒYë[0íÛ¸¾VéB•0Þ¤U¥*'ùm4IF¾Œ1€úP.â8*#Ï“6£€Ó0hŸcª”˃çX ]ab¦]b“} øPFmÒ:êÈt`¡MúmêIùÜcŽëÓ„ŽË¹s*Iì0"—…¡“+¼À{åΚ-¯~rˆDÙûe•;n€†»B—ÓËÓõá<›±¨ C·D‡ñ§ãSŸèB°N¡û<úúØçšý7^ÿÇf¦" ‘.¿×"4hÀ¤mÀ¿ræËÍÆ^\ç«u]!ä+U:®”‘ß"ÎÔ‚š€û zCnÐ W{û–[1 e} Ÿ +ÙÓØCF`"^“þÛ—¹¢^ÎÉ“Éå\]¿»š\'?_Lðöëéå4™¾»œÍçÅ“¹óbNOå¢qRª­ïʼŸº·ÊYe‰4¹æiqÁpŒÈÕ†\d–n•{©j˜íÓL+ˆá¾f~'½N¡7?zc¬¥ªÕd­@ëˆ}¿)¤hfšêuu ³«—ãé囃ƒ$åÖÎê·Fæ(wwu^¨ +ò"ÛÜ-ÔúåFbðoE1[n h©»Š"éàŸÍfç`="r¯sÕ¡f:ßošú…§Zª³ö…êâÿê‘EakÜ'A6j™7õm4Õ˜!Þ±ž4ˆ€ú(«½4&ƒôõóKƈX@ Û§+T6Ž½á$–G`ºaÆŸ¹Òé°½ê °íGÍë(ÔÓ q;¨šÑÔÔ<°]«Å’,WŽ`H)d–¯™åè/,Ò:…e¹ÛB jâmà‚í pXýsÀtqt•©ê´V[UÔˆs’nø2ß(P8¬”Ë$*ÎIA¹ßºå–'zÜÎ>uúáÛ"uº²)%¾öÒTÆ€ 5Cä+T÷v@óF0r VÈõYf·s2w ÛUm•!y¦ýêï¡Í:-ŸA¤f_jÈOB^ìîn6 +9³È”1ÖAÛ>½ø[° )4„°t¬ö­ûCýqR«2ùn÷Ü@¶˜ +4¯×wõÇý˜sê‰æ–ze‹ñÍm‚¯2!õ!mIä Òba„׸MJ»î…m{:*‹Æ#­æüõÓ„€Öö=R)YçVËÖ{ƒ*4÷ÕÂV1¿Ÿòü˜¶Ø6$ ¶ ©@JPi¶††P ‡ª¡Íªï,!7’‚ ëÜå’b¸êŽ…vnņE}¨ÕaǪã–IêÅȃµ½{¥Vyq²‚†q—7—v¬µ]ëNqõ´ŠNfðà¬I±8y§~4h#¡Ÿ-îãz-»y`eË*OµG­°˜|ssö¸©]@ÌÉ¿Úb1»«˜å«½êÞ}Ö6uZ,wg½T~ïGÜÖ.R½ù¤pg¯ST$+¡ns<îr88ûãÏϵ—ñZe·/{Fê-¬r<‚êW–*«?—¾‡Ösb^üú[軀·[Âv‘g€Ÿ]÷snÅo×p‚óRÄáÏ9^­3ŸJÎÚ±¶Oñ÷‹©îˆh6Ø1›ƒqKÔ+"ëLÌÃOV'NW —aTÒ…<{ùvr9Iài[­§<]Á“³¾qød¹s¿ëæÎ#`ˆ¨¢ÎÍËzn_6³è œíPI«®¾Sc2B§³n»4€”ûNÏ™AŒžs§Ýîÿ`T̹@ +endstream endobj 1010 0 obj <> endobj 1011 0 obj <>/Border[0 0 0]/Rect[369.18 91.26 398.34 104.76]/Subtype/Link/Type/Annot>> endobj 1012 0 obj <>/Border[0 0 0]/Rect[369.18 425.28 398.34 438.78]/Subtype/Link/Type/Annot>> endobj 1013 0 obj <> endobj 1014 0 obj <> endobj 1015 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1016 0 obj <>stream +hÞÜWmoÛ6öQ¿‚È'±’)iýÔåeh×mA, -š}PmÚÑ`Ë$¯Í†þ ýËÝ‘”,Û1’°-dY:ïŽÏ=ÏYEpúÝDE蘤<#I¦IÌIc‚yðmœ^ +"H1„$þáCd)Ë3’ÆœqIŠUÀÁ ã <+¦AÄ8ç1)>ïÃ7—D±Œœž=N®*2–…ëES®VU½ ¯êÎ4órjè/ÅkØ*v[)&¥"‘`B+RœèQô¾c¾­ëkSÎLCΖeÛš–¿E %K5d¢™Ò„É8ÏsÂ’ŒóÄådÓ´/!S&“—P4ˆíKHt(Cn“Ï ¼L²>g G¤Æ•ºœ(iœ°8¼'’ )–†)¤ä¹dI˜S*‰4Uyx7ð¬Y;³ÙfÚªáîgšfL‡Æ=oÚŠF ×5VÓÖŠcy¤Ô©¯È|x"ÆŸT1b )qNÉð¹÷õØçÍþ¯ÿb3{±f–Ÿ÷ÕþDâàoÙóårén®«Åm×â[ÓÐ(Ž™£2œ™³ô=zSiÑ«¡U·]¬\kå,×Êx“ÇD§à$Ùv1‡Ž€D¸OÂýQ’»¦ª»ùMx2)^ž}ONnè‹9vŹ_¦°ÂYßÜÔcSè¦éÀtÓÔ„¿ Ÿ= ôŒ“9ÆÉ°ëTž!é@œ‘G¹£áè`RufL—li è±!úÖu>Š[CVÜz_°„™=d>Ô%œ¼*.vv´œQ4pÞX(„¤Yoºª6-©êér33¤ƒp}-, ,øݼµÆ÷¾÷‘Ñ»#F>§m¬0~$·“ûÕ +xâþ»wO´Ëù ¯×¯J$Ñú¨a½YÙ$:s¤à®Î`&?Ú£ÃeU=3Ÿ°@‡EÄ×p.ðÆüÔTЫ®ØÙí™tM¿ »•nùübo 9$z‘Àxž!µz{,1±‰„—˜z·Õvè_H]±u¥†ßPjO”å@YP ­õá7‚„蘻Òë¾®­QO¯ÊÒ«òôª,½*O¯Ç$~²iõ¥ÔÚOÃÜV» +‚ë4ãJíÏLã)hWfpêeõZþßU&Y:¨Ì±yË«L>ž þ“:yÿ%ÀVÞE +endstream endobj 1017 0 obj <> endobj 1018 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1019 0 obj <>stream +hÞÌVÛnã6}÷WL ²1#êBI¶À®7Y¤ØA¤ÔE¡Øô¥±eCbšA>¨ÙR’/Iœ<´@åÑÔáðÌᙑŒ;Ç_Sãª#}ˆÜ‚X‚ïB©:£Îç¬s|&@@6ê\üáMÄObˆ|—»dóŽ‹Q¸à\6èt¹ëº>d÷ßØ·Ó3y ½ãÞ‡pY:"æ1[ŒË|>Ÿc8/´*Gù@9¿g?ãV¾Ý*äžBWp!CȾt(¢hbû‚b›ÐW*ªz³¼ªTådvN³N$˜‡ä¡îùI’b× lFÒã‘lžcªÜ ¶ž£$„ob¦­‰É>|ÄMÒÄGDÄŒˆE6é‹Üñî³x®pº!Xät=ÏM<°ÄL:]EaÂ.q€så†w ŽÄѯNsÉ”/«©Ó•\$§Ë%}ØøWöü4›ÙÁÕt<ÑZ¾R¥Óõ}.Ø_Ž¡ÏÔBèýÚ½‘gÜ+±V÷”1e$7J¸©\[gž±3£ÂMW…Ψ¾ŽÏB&ቴA +JîŠÖŵ:ÌÔhšNÉ´ºÌ5|VAî" ²±K%õ±ƒEQi x’—‡PäsÕg}Ìü‰Y•"nZhX”TúEÄN$#2Õe ÆùM<%,-Ýáâîf¦àÁ±ìØnä°zPgM 'y…û¤Z-›Ä[ª$ǾÝS—úM +ïB=ýdk$’Zµ` „§“º77þñ©÷ ™õÃDr×GOvªuhƒ§S­àô!Ÿ£m±#-gت·Úý–%™Ô–4ÍU4ÍUØ`ÙDÁÈñO˜iš‚Íf GøÿžÞ(ÊñБì«`ùwƒjÒ œn€³ä0È |[ÂÛîoºèlv“‘`ÞB¹¸ÓÓBÁýTO@#½Z*¨“ ›d8enBuÉÿ%iл¹Ío˨N=¶bÖÛïdËŽ /†f#ZÔÅŽ#û^ŒZÆa[il@ïAØ*S‡a¸‘ŸéQuEêm*â–6‚øþzüã[r³Þ­é+[ê½ÏhvJ½— 1wœ_ª?¬jG¯u°bͽ¡zˆq‘°dçÅhq´öø ð_°C~Éuw8[ÑÏÛ‹*-½,uºšÃGp­Õ»5+l±$wËêø˜ô&jp ÓÑúü)ßÊqVLYªÞ—®CtŸ™…?|„µ7pÚØã9Ó:½e‰”G}v™M+(¨‰iر×P^ªÄï«\«&RÈOÔß'°Ìñƒ¢#Œ÷ûÅAßÙm»–Jßaß-Ä<|²~|Y',s4kù¦çÙ)üXáVðàÈ$b÷§¦½÷|ròÝÖkñàÌwŸ™6!öŠÐûö)M‘-À¬7yШ‡óÏ;Ù1ËKÛG×ÌIk]®ìª·N ½¾¸8Í®®iú;<Û¨^±éJq‚ÎcemL7šåcäô¶‡[µº_”Ãup +I/ö@ì(‰qá¾ÄES|ÖíÏë#Þ/Àõ{ÀÕ}ÖæôÊQÑÕ*uýº6jV)x„æ²ÚìJP¿z±F4Ü(U`Ö&eXQÑo°G…Ó&Ú:tm׋°§çõ³_ÜÄÅx8=¦.~çý#À£éPø +endstream endobj 1020 0 obj <> endobj 1021 0 obj <>/Border[0 0 0]/Rect[384.54 295.26 420.36 308.76]/Subtype/Link/Type/Annot>> endobj 1022 0 obj <> endobj 1023 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1024 0 obj <>stream +hÞÌVmoÛ6öÑ¿â ÕÖ II”´bÖ¼ Ú"HÔbY½ŠM;l9“äuYÑ´¹;’’l7Þ °³K&Ç{yîž“°{-aÑŒt‰H!J5„j3š^æ£ãs òùH*øŇLž¥„‚ ùj$P ®åÓј !BÈ?ŒÞ³WgçóNŽOž=ƒË:)OÙzQ«UY-à¢jM=/¦&ø1ÿ¯ +ÝU1W*†±äRÇŸŽH£ìt‡’t[ÕW¦˜™N–EÓ˜&Èå#­x¢ÑÍc \…Y–R!"ç“uÓn¢§\E;›í&:Ú‡!³Îg€›QÚùLæÈ„ #»çóë"#²PBã˜', ÆJ‰Lñˆe¤¿2IâŒ]â ®Õk'6ÛL[4¾½ ’”kfÜzÝ”ÁX£àº¢hÚX +R:ññ‘©7ƒ2BfüÄwz_GoÞdRõöŒC.0ø2Š‡ð`ò+ÌF³)[sQÍ×ã¯ñ +Ôt]þf&lø{¼†ÞÊÅgðdAË/oð…ìxƒv\oPõ÷¤ûyçBÌ#%}ÏêdQÅIöÆÙÑm x1ʹ»Ïޜ“¦¿×ý•U±2{*ÜéÚÔ¦®@¼øäÛ~Ç0©c˜ÔvYݱ‹%”®½©Ôvÿ·U‰Õ`?¥¬gŽ¤HE¸­BÊ®Q;Éï ‰¸ó¾<"Ì–+iÑW{ûæ"¿Þ¹&t2㞘èÅÖ=ƒz½iËÊ4PVÓåff Å‹èt†ýzh{|öžÍ•bU¯¤=¶\âSãË¢I2sJ¾~é–vL£‘Xm‘é«`!ðÎ,ÒÎO;·Ç¡"C¶çÝ(ë]Âœ¹ÓEµØ`á 0'æ²øS›j|F˜Êì3”rg¢/µ±BzRÂþNË Œ†ök›É&ùYÛÁ9”‡Š`°&Ò£é¶wA_±Èš}|œâ|¨ÚÀqâ)ÖãmÑX2Ù¢’Aस/¦e[`ÊàØT6.’—«Ã›—ë¦>lÁ¦Æ,´÷ß­—-&îàþym~Þ` ;WeÃkëyJÄ\5-LïŠú©íQ“7¸\l›½3Žõ `³õævi†c›Õm玛w:‰é~,w·ë½0ºrúC€ÉáR/ +endstream endobj 1025 0 obj <> endobj 1026 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1027 0 obj <>stream +hÞÌWýnÛF ÿßOÁ( µÑE§o­XÕQR±ãÙJ‹-E–-¶ìIrÓ`èí-GÞI²%© lÀ ¾ðxäß4‡yçølÌa^v\ÝËsÀÔ¡H;³Î»¨s|ÊC4ëptüÅî¹Ì÷À5u¦-;:Jaº…´(éhL×u¢»Î•rž‚Í<èw_¿†a¡ryÊj^ÄËe–Ï¡—Wi1‹“Tý5úU™R•Í Ã3îØtH"od›œd Ñ£4ž¦tqY¦¥ýÞ £Žmùh‡Ãl˜aú¾ÌòtÝ’9sæMe†µwž G˜â-mýà ë}ÀKËkŒ&<Ü%dÌ•F÷cÕ´˜©Üƒ¡sU³™«¸ªfºo0KñU®xªÆ]×ö•!V¬$Ût“T :xú ºs”TÒ‹2S5W9¹S8K'ÿ†ãÖâ^ ƒBB0þRmf+„Á)ÚÏÿ>õy Û#õÌ&`:Ì#÷ëM†:u¸%ð¯è  yeó›ªÄ”/ÓBÕL“qå“j¸˜gé” @˜ûuöº†È^ku[ƶ¬-ŸùŽLe:ø&8. +±¶e¬cEÔ¥æˆJ›®6׋ªl™N”‰ú†êLfŸN•pÒr¬WwiѲD¯Ú‹dSi^=võiµ¨âyúØÕ¬Hÿؤyr/.¿ˆëm72©‰†$NhµíùÌñ¨Q,÷â¡‹x(—y†þ ?ÇËõB6‹¶ßl[‰Á!Ûšèdní Ùv®”è‘IǯTü³X¬TnãáNåø—ºZªbg4•Ïª†qê ¼i¹4©%Ä2‹=·ei5ØZ_ÝC“x±¸Ž•£uÊ-«M•å)ÜeÕ T¦º_§P÷O»±‡ùf-TÆ/ÒY!н¾ðÁžù>³½NƒÀŽ;‚8Ÿ +UôJü·LÑœÝö‰MO¤¦„š1Hù5ƒÙ¶ýPAʤ=,è#¯Ž\lOÒ~òR° a¯–—‰{…1¨`“«ŽBö¾ƒ‰°¾+Ýx!ð›tÜ‘,e¦cìw2úŠêD Ö§í«Ft/Ÿ­äsÌÙ'`­žÄULÔM}ž¨ð§x¥ÕZ±’¹eoµ“ŒîMšÜB6Û†8Cr©ê +$+¬¦¤z9¾Cî‰"~÷lÃd™-Ž‡è×úo6Q^DBk ù +Éï €“ +ÞãÈ/Kx9'ÍGÐ +EúÛ) E‰ƒXöÊgò¶xÚ>Ý,¯eÝq×3vtã56JÈ8O4¥ ƒn/ +<è†0ìu/NƒQp2®­Bú7 OÁ®úC`ãËJJ ÃQÂqo$#è‹÷ýñ~.¤$úá it ò!H†ÃôIãùyïcEûP.%·ñÀXÒœ$3ªãx9…ƒˆÈý" úÃ= ä_)|gåÍe$Ï ·‹ó(8 ‰LÇñÃú@: +Þ™ö‡Á8¥ÉÍðu §£ð§Ëp@îgè‡gÁûpý²…Cîm*–D98ì-¾ß4ÞÊÕƒXµ¬ö·lK™ˆa'ðÖÔ"Æ>GÓ[N;œÛÍRSo4bᮎ\g¶›í—¦ÜgÊúYcª>Ü:Ä· §×_çÍ·ùuŠÖúJµ7n-l¾W9å/Ça¿7Sœí)u™ëÛÛ¥¸õÚRB–'‹Í4sm¦š.5¸G9ÍåÈ É‹ûÄ÷Í‚û·èz”V +endstream endobj 1028 0 obj <> endobj 1029 0 obj <>/Border[0 0 0]/Rect[436.38 578.28 534.3 591.78]/Subtype/Link/Type/Annot>> endobj 1030 0 obj <>/Border[0 0 0]/Rect[355.5 269.22 381.36 282.72]/Subtype/Link/Type/Annot>> endobj 1031 0 obj <> endobj 1032 0 obj <> endobj 1033 0 obj <> endobj 1034 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[332.94 148.56 495.78 162.06]/Subtype/Link/Type/Annot>> endobj 1035 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1036 0 obj <>stream +hÞÌWËnÛFºÔW ²"›r܆0°#Æß©¦:Árâ’áº÷ï}×Gšý;^ÿÇf®ÒP‹ågq@MhW¾ßdÏç뵿yW¯®û&¾«Ú4“’òäS*r˜³êŠº€`ôÃôæÂM¯¨Ž(Î=´ +Z?ÊxÆ&73L‚9€}‡x 9¢ßæ“5ÙÍËd]-ë÷]õ:´HêíÅM¹ŒÇØÜ25#EA%¡†  ƒø¦äb¨ÜßAì (Ü”+ˆÈ *’¢ ÉJ"C9—î•€%ôˆnô˜g {ŒøpÞè‚9â >d ŠÔ»ª‡Þpíª«TrhôHcRü§#We_’eÛlH]‘²;1j€õÜ<¹TÕãû‹¯ÏÞ\œ??>{ór'¾œæÅt‘ŽS¨C¡º¾ì«MµíI³t»"q.ë5„„ág'^V‚d"2.øÒ"¸8MèuÒ¤ð§%Ý—m_þAêí2•Â=ξ@Šƒë®p)û:TþÚÜöæ{éB›Mˆœ=.S;‚-„Öb?ÏHWUä ´”@OIhê“8‡ +€+-Ñ–¿ú)Õ öÀ,j rú¡í0‹\Ç­‡Ã.¾ŠF1Ÿ +.Cr—I Dž W¡ÔÄJ ŠšaØù ¢G'PÀWåvu C,àŠïB¡€TÛ} åÊ`·ºÔW4€$ƒñJ*†pDZNÐTî ×t¿XßC$š®U‡PÑKÀÆ5šÜÁÁzü•2¨9ÊC‰=‰E[4Û®'‹Ô$×eû=Ù–›êcò1%îù3¿vþ=Ö0äŸÊ5ÞN-þz¶Ç +(%¤ÙgÇ1ɇºœž,3‚âq¹[ÉãYÀŸQæqò§…SÌöóáìùî&qØG&ÀßÒ¬êmÕÁä-Ö·W•gXó'&ëîÐæ%Ã"”m²^7H6ù ädlƺð)ÿjvŸlÈ‚ Eûª^ãq¼éBÑ M,œ µòÚÀi/ðýÔ]<}‰ü0ä£0Ü›ˆÉý{T.ƒ}6¨þeÌçU‰\©’/)Dª<< pã¨Ày¨pHe%ª +|?îõ@†N™_Ó>)éQ¸ø®ø…>pQØÿFò †‘ãA««Nnn *ü¨$nÄû sÁw5NXÿ å͉Ûã¤ÍØ1­¯f$#¼‡wÈ'´çIÀ‰Ô ÙD上 g¼{'HZ(¿[:>!8¦ý> [‘8-’£éAtüâÚ•!\˜‰‚j9‘<Ãq†9ÀÓÁ]Ò¥tlý¾6ù÷ßFšc M¾ +‹’¾“¤ …æºì@hNªey»îGµ!ÏvõÈ›½¬¶U ç“«‰,²;mÚª^m§î œ\—îÞ=S0S¹ì?ôŒíS aøQ-x<€Ij¹ÜIú@yÏ·Ó†Áó‡zñ¶Åü¢=<¿¯ÇçmsSµ}]upßq5œX0ž77o—}¹øý1”úFÁ +endstream endobj 1037 0 obj <> endobj 1038 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1039 0 obj <>stream +hÞÌW]o›H}çWÜGhד¾iŸ¶nZuÕ¦‘ƒ¢]­û@ðØa…ÁÐÚûö_îb0±MÕ®´Šð½ç~{fœ0ØhWïïl*͵À£>ؾ …’kkíM¨]½cÀ \kÌŠ?ø`¾G<‹jB¸Õ(f!ÔF[k3B)µ ü¦ý©¼~ña~5ùnKƒùÄ×óMm·I¶™àå:Š¹ñ%ü KYª”CLÓ#Ìu |«ÉŒ¬Ëm1™»I½àÑŠ—0O£ªâ•þ¥]‡šc8‡KˆiAÄö)µÕD®I<·óã¨Ä´~dBa5Nœô‰‡ ™>tÚ~7´ì‡9²3Ù˜£†þ–M}&eÆÌÁWϘ™Ìg&1uf0üM•̳=IÊm™+ÛªŽ.ñô{£ñpe/«Ä˜a¿zžINƨ$É4]¯e‰ùm/r/²— *ñ@%…§çÑÇSω°ÿ&ëÿÖ,Àr‰/é§LÝvÌV ø)5MSõ²H6¢BÝW¼4f–E˜þÕ0=bé|Eš†ð´öÌFÂ.ØÃYvÔ Hà*=Ë—À×Ã$öá,S<8UC$†«g²zû1Úó²ZêKâ<«:^÷”HåÑx‹ñcT¾€Ý2à&Úò¥ž`Š´ùˆæzÛ¥Pñá YGA÷‚Ç¢ê‡H<ÚG!«¼~H9²£ïÒ!þH24 œ>7ÏÖ;ï$x÷ø#•¿?ø@Ómžî7èBn%Ju³è)_'ïy¾m£aÃÅ!×°´Ë†èíuÓß»IlŠ*êí]Ь¼ƒÃ3"‘w§«ôÕ²Qò*©D”Å*o;}´¥FÊÄû³à¥Hx«NtœªÜµY £êL²ßÉÊmá{ƒˆû(­‡!ç¥YÈ*õö—‡ ©›g¶$ë@QÊî‹p_5ÖMõj(Ì/«|¨Ž‹ìÐ|B@O1w¢Ä¯â‹1Š€µl äÉ&[ŽAã®ö÷á>ǵ¸?Nàºec‡ˆÄ$øs™ðL,§ôª 8è@¯á9Ë"Q…˜û$ZÔ)?®p,¥Fe2gSô« +ºéä?’Ò˜¤Ý¼wÉßüIûó¸–¤£~rñ‰‹(m.î¥~b·Ã˜¸-\aÑ~.òâR‰CQÜH¯?ÏÓÍ2}2z÷&×Y|‘Ïi°]˜S²…õ¬ÄµÈ¿Íót©Ÿ½ÞqjÄU—Q˜ê4JÄ3°I¦ÚÝçõºâââÄga£‰{è‹ àf&ö0)×81ç%äh4ÜÀm$ð_™¿øçØ¿ U¥æ +endstream endobj 1040 0 obj <> endobj 1041 0 obj <>/Border[0 0 0]/Rect[355.5 432.24 381.36 445.74]/Subtype/Link/Type/Annot>> endobj 1042 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1043 0 obj <>stream +hÞÌXÛnÛF}×W,ú´LÂõ^xEžRÇ R$…ኸki%±áÅ ©FBÑê_vfw)‰–e8E,j9œûÌ9” ËÉÙÛ‚,»I¢HÊ3e Qœ´f²˜ü<œ½Déb"$áð"KYž‘TqÆ%™VZàl:›„Œs®Èôëä3}ñ†Ä,#çgçÏŸ“Ë6Ëh³luUõ’¼«{Ó.ôÌ¿OSÊ™Š™”1 IL¦¯'¨Q º•@ÝVõ•ÑsÓ’óRwé‚é“‹é$‘,M ’„Å aRåyNX”q¹˜l˜ö&DÊd4º ‰@eoB »4ä6øœÀÍ(bFwDŒŽ¡_±‹ùƒTÄbº%’‹ Œá2 B)2!™¤"ðŸ»s¸-Ò(Åœ\¶;›¯g= –ÒO½cÜyÛAþҦƔڄqÌ‘”Iê“$2ï –}ù'ÀGÑ‘”8¥d÷yçë©ÏGŠ=Öÿ±˜-€JX†éçC—&¾"rø.6_•¥»¸*–«¾ƒ¶ïL„J1Aÿ dÊ5sf‚þ÷-œJÛ Ìë~”c7_9Ë×Ïx‘+’¤ $Ú2‡±€@¸ bÖÔ]OfABWº}FfëþR÷0¸õ5½ì9 +¼ô)aL†’EtCZ>Óy"ë›Ò?æ‰s#bRÀÂñÉ‹]òè¦ÄAÞù*˜â©ÜeØ9F_ÂÁ€¹²SÀq,¿ÝÚö´5î,0´óå›ã[ýh‹ÛÕ#2z¼<™ÒÒ€¹EñÖ4•éÛÂtÏÈ®¯8öe}Ý+êzû£?oʦý »/×ö´Ô[TÙþº®^ŒÚfü8>‰zÿ¶tÛ” ¿ý>–þ~é;€ŸBijøg¯`Àb‘²$C\ªæùÚ”fQ|*ô{ˆtàÒ†y!ÜLPòHýê¶@—f~‰_AÎ(`Aa…øS£V &™ë^“EÛT¤_íZb¨6g +0jß_ÜÁç«ß.®\[x—Ô~‹© ÇI×ëÞTúµèWE}!VÛùôîÕÈŠ`iî¥Â‘©D¦  +€\³°Fçt ˆa22…³ÊT7¦í|?HèúÈÑ…Ôëyî´y%È>fȈ®çäÂÁŒ¦,¢ë€%tÖ¯[à¨MtGþåÞ¿(Þ¿YÓ‚ðmŠú†˜Ò>–2™ïó7p•Xù‡lêº!¤qÞ&²ƒŒˆ‡j$Y~oö¢4=*Ô½E‚“ÇÉïêÖlÄ™L Y¸‹’úr1+Éqñ{>6Ÿƒ7к´ mI·­{½ÌÜ0$I+øOµ­¾¾iÖý®î´tƒ·â¡öYòè ÂC‡½€ C~‚YýÉSGÃö#Ð7˜=˜0ÀO–ØHÝÏ­Ê`M +0àüÆÎÌPëXtgÈ¢<äe<Ú³×ë{]/×zé eÎbµïm>¬„â~ ©¡©4 =eÎ ¿ÎBwV©Œš‰KÛL‡æ£­Ô>ÆäÁ’e…™pëË¡ jI9µïÉ‚–%àFß¿â &€E™ÓM€›’Zc¤[ WOÒd¦ʃuŽî^œËòFÏÀ¥ô iŠŠÚXêcWz¿½=¢Y’q5Â$Ôb?¿ù2ñQäSÙž-ÈÝ/Ö8¼Û I #TÐ ÑøÆ{ôvvÔq’Åñ!OHmÇù%> endobj 1045 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1046 0 obj <>stream +hÞÌVOãFýߟbŠ„ddÙõïw'q!9åJI|¨¨©*6Á8‘í\‹*>P¿egvç‡HROª#a3»ûæ½Ù·c '_®ŒrÃw à!¸¡‡LCãsdœ´ˆ††°ão" X=„ÀáŒÛM Ž(Œ»‹FqΈþ4~3/š-ðX“ÆÑt3K„,4§£,žL’tí´Ù0Hë÷è+¦rt*Ù¶5Á„ïAtn¢X`;‚°tOÆw2ƒÆ8Îs™[уь Ï­£Ÿy>0Û©×ëÀÜsW+òmø‹q”Êlwm+A…pÔ *­êPWê뀃n¸M|„G̈˜§Eÿ[ŽË<ó l.¬š‡U³E(lf›Âø—ë¸mÕDàT”n6Õ±»ù Ëgym©©ãYžX5äkNSª©ª§"Ù¶”UaÉ…ö…¸ücÑR"€…ê¾ñï¶ûžÓ~ êÿxšÚÇg!•Ÿ/lê— \½ÿIγñX?ô’Ñ}‘£ïs™Y5ÇaÂünÙsLyÇ!<¥…[YØÇ»<Ëž>`uV÷µŸé'û‚¸Ë³ÌñX ®E$ißË7ãÆgè›c9Ìñx|£§Æ劧™<ÖEa“’39•s*ƒ¾p*Ý ¹Nâw·Ó!F§zeôîŹßPîy\Ä0Ï)™zî[ð·ZS+Óa1„ë-Ó%)Î- 9†‡ÓUZ6s9Š®æœPªÆ½/miáDÍìº}‡9«­¢ðpZûTîßû÷i<‘}³oQʤ;*¤w×ßÇù¹Æó1É¥õˆ°³@çÍÖÙ·‹ˆÄ­¤ª¦Ë±òÅnŒÊl§MgáQCïà êt;­«èŒŒôsçòâfïd­i&Ú¹TgzÍ*­N¯ÙþrIáåÎ(¸!aaxTb¾…,6)½EÚM‹,Jw”õ4áp‡”N .Úä‚Cú+Aëv‰o@tÆFoXç?JoÊšû¦P{qÕ:­MQtvuiÓN–Èt—ËÊ«†UÅ0Š™ª•WEVAc¼¢¹Š»­ÖÏo²¤šóLŸ1;-ƒ_ +3lÿèÏDæûº¦Ûët›½è†ÂÛè¢2,cŸBʦ¯3§ó‰ÎLi)„äèh?»h¯b¸’2C´KÕ@’µòÌúþÒ+·óËùäVf +`÷æ®ð©¬XUñ˜O0¼Äz3t và·1É_brSWœËD~ˆ¯ð«"É Úðt ÷ë{½æUÛÞ%õ½&¶J¼¢‡Lª@—ˆ¯µDtÙEü$³…Ãàð­{ͯI•šÑ¾^¸8»ib¸‡/¿ Mcê-[9w—Y4ÁMðÂ`Uj¿+q#ŽDp?ó”á^³AÙ‰GÔƒéyÑ’UDÑ߉Y^È £šÚ_c”†NÔ¸W_üOËø›!ï·@Vñ­…|^|Ùþ+ÀºÚˆ÷ +endstream endobj 1047 0 obj <> endobj 1048 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 297.6 188.94 309.6]/Subtype/Link/Type/Annot>> endobj 1049 0 obj <>/Border[0 0 0]/Rect[150 423.24 257.04 436.74]/Subtype/Link/Type/Annot>> endobj 1050 0 obj <>/Border[0 0 0]/Rect[63 423.24 120 436.74]/Subtype/Link/Type/Annot>> endobj 1051 0 obj <> endobj 1052 0 obj <> endobj 1053 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1054 0 obj <>stream +hÞÌXkoÛ6öÑ¿‚0€j+†‰¢V`@Ö$E†¬(/ÀïƒjÓŽ[$¹m0ôí_î^R/?2gÀº-d‡û⹇Gd>8}{#ȼhEnHd4Qœv0ü0œ^ +"Èh6’pø…a–’(θ$£Õ€ƒÆ#M!ãœ+2ú4¸£×—$f†¼9}óò%y_Â0C×ó"[­ùœ\å•-fÙÄ¿Ž~WÊ»Š™”1 :&£óZm%ж3=´ÙÔäÍ2+K[£ß£–,щf±&Lª4M ‹ ç‘ÏÉ¥é&!S&£­I(.Pnm˺äS“‘irÆpDŒa\±Ïù§,P‹é#‘\a _“ ”ÂÉ$€'÷ã*E%X“÷ÅÚM7“Šš%ô6p3Öå"!^ºÎ±¤®`k$¥Nê" SÇ‚Ç‚±üàV $!Þ(i?wþ|êó™Ë¾ŽÕÿñ2wJ3ƒåç Ju}"òðø<[.ý—áb~_•ûÒA¨ôc ¦¨2࿆p"„5ôk×ʱﯔ¥Ú㿤ŠèŒD]+sh H„»N#øó»ËãcœcrøóPš.òj6¦'ïÎÉ·åxœŸ¼"0ž]å³uø}ž­ì˜ŽƒqðÚE9zÑì.,¬ª6ENøë/5 4|c<ßì9-8Rn‘p@§·‹Œ 7KÛ§‚–M:âC±é¢i^O*£{KXüþºZƒeî„yW”Û«³áÏ×[Ž"&ýº°žú*ëMµÈmIùd¹™ZR3ÜŸB ÷öµ¹ÉÔch†GœÒuår`)è'¤O uâ3þ®.^rè„1ï¸f­6ƒož(’IšÅ]wtig ¨òp„Ót 4QÛ`Îí^ 1àˆ°8·£ÎÞÅE¬ 3Lê.N{ÈæÀt2Iç‚«c騸½{ž•Q»Þ%ï$µ´×ÀÚY;)|XLH·Ÿ ô›cЈ‘a¢Øž·¤FÂñtè+Ĩ3é¾á¥“F`͇ؗïsî¥ð4è#­kÐ×wsÝ<ÚÇ3´ЉÊÂJŸ­ÄH+þQ’iVedV¬W´>غ=Žnë¿ß QS–È7H–O·O¶ñ\»tÛ“I}{ñîbx6ÚÝgºxD}8e•Uves ÚõÌå‹m6[@…¦žfC©™’$”B¹£—P8èQA R>æUöú:×ø18jIWð¤Yµ€ãÏ>´Æw +ª™6]AŸ_KGú?/f­?jµ&÷ÊÐwô)m ¥PI¦LOïuĶø¸£'€sÏ>ŽëÑLD_4-Š8ÐB‹ÆРÚ1é•–%ýöT Q×¢•¸â´wÊ[›Ãu ê-¡Yʶ>Ȩ‚ƒÑèiÇ2vó;¾Ó¦j®Ð*0Ë”¶ù«¦¼QÚÖ¦A- èôtåó P hwmhhax6ßÕØ"ò³ æ´æ¡„,èÛP1ÙKKžÎ(*û‡ø-¸ìQ¶Ò¦Ö­¾@+5¹kŒôØŒ€Ú¥¿{•ÅðžïIî÷€ê ÷Y +Âà E™¬ó²ê nÙ¹e›eupÕä>+^EËjÏŽ>)Ǻc¯£´£ùfu=Ú¢ì–ÃDoG'•êÄ`Ú_6°«ÁÈ/™–D$YŠ¯#² í: +cpâùjyG_%šCž¨¥ASû¹QZaÊ´òïR‡Â‡Êƒ¹v‘ûº|D‘—½s¥ÁzÖNÈÆÝVÒ¯“Ús¯7G=ጳè\>À–žC4UûÜ=¹ý}·ÙrSotêôðÆézó¦©óµY}ðeôéÁðQoÎÙèñ¡­ + ö…Ó°}]•»®>Ãð‘=77U’ï‰=äËë£ +B(À‚AÂð2 9¤$j $9ŠÆèK +KRÝYûwDÅõÙ/í[Gõ.ÁæMœ¶Wù´¨î³Z²CRQôµ”KÜÛ³.Ò~²{7¯Ù}¯xê +NØ •Áÿˆì\¯Û7ÝV=¸Mwþ¤ïè¶2Š0Œ4œö§‘ïEk +endstream endobj 1055 0 obj <> endobj 1056 0 obj <>/Border[0 0 0]/Rect[150 658.26 257.04 671.76]/Subtype/Link/Type/Annot>> endobj 1057 0 obj <>/Border[0 0 0]/Rect[63 658.26 120 671.76]/Subtype/Link/Type/Annot>> endobj 1058 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1059 0 obj <>stream +hÞÌWënÛ6þï§   Z‹!©; + h“4ënE¢fêa`lÚÖ&K$§ÉŠ=ÐÞrç’b9v°°eéð\¾sùŽYŒŽÏ¯YÔ£Ð#‰‡Äã¤Ò£ùèM::~+ˆ é|$$áð_"ŽX“ÈãŒK’®F´0îýt:rçÜ#éçÑ'zqö–,&'Ç'/_’•#bÓrQ©Õ*+ä]Ñèj®¦Úù5ýLyÖTÀ¤ ˆ+˜’žŽP£èt{uÕ—ZÍtENrU׺vÒßGgé(ðˆ#dAH˜ô’$!Ì9÷mD¡dQØ=‡P™ôÏ Â3!Ò‡ÄDŸxèÇ]ÐèÐ3t,°A¿WŽç³€>É…ãp9®±LRáøäö¾ï¸"ò#åCUÚ{³õ´!NÈ"zí˜'ÚÞ¯êÌqÁ_Zˆ©AŒ#HR†Q‹’ˆ[_0/èËßEG"b•’þ{ëç¾ïgŠý7ZÿÇb&^Èb„Ÿwe¶ ¾MÀ¿bóužÛ‹Ël±lj¨ûZWŽëyLÐ;GFÌ£zÆŒCÐm GÒ”p ÛÕðc Ãó0 +7Ú—wí%¬ßoOÐÒ´"õCѨ{’sGÆö”³¤+ø¤ªÉ ÕM¹nH³ÔÛ²mæ ! ãÀ"ÄMë^¿{}ùñâ ûµoyŸI+bƇßy#Cs‚¨bF¬|«ZIö:§ÏQL‡ +˜ŒZ§èùÙg—¯ÓísñcVe?|Ú¾"u£½ÒES;Æ“Zk¹ëIæÅãËí ÄÔVÆÑu¦×g!%—ë\£ŸŽº,b†BÎbŸa!ï'Ô Br“ [õ£×Ž€vZ3vȹ. x`ET9ðÑèÞ¦xgTð•î5,ó|Ëv7~dÜÚÎ +¨ +Œǘ- ¿K`$ƒa? zêHÚ£PIǧPMªX¬ÕBCÕϱÖЄãPÛ´zy"òrñ~¹G‚ªò׫v€u+¶‡{µ™°æ +&Œ c Ode3cD¿wDÝÎuÇö€M-9»W«ÛöN½5"77é جn·Wޯ؟h +„>‡E€%Ô,§‚æ9ð¿¿?ãú® “Þ;ÈuþËNǾ 5QdªŒ0Ÿ…·ÁòýÔí¶Õ<¿QSG$ÀJ +VŠ¬ÀJm–fµhnõönìã v ˜¶U;mOnþHáÈ€ÕgQüèlÅmÄvîûEÃõàÇ·/!ѾwôÊùMø»v“ x/"Ýväö6Úd &Œ¤Ë¬¨ámË@Ý#­òº´pnÏÀÝß°XA.xð¸Éø[ÛASB+6°Ð ›H¦1Û>.•©'üAfªQd^•+“†a\ ÜÛÛŽ·3pÃè$›Ñ÷‹V¿A|±¢bʆ¦Ÿ°±H€eß+–7(õ.ƒ´¥ñ†LL©œ([s!5µò›­²ñnvÆ]Êüx{µÉîp÷Ø0×ïŠy9~œ»Ï}„-þT5èYÛkÃáKÇO’ù=™áˆaCCûW¬W¨­Çø ¼‹l'˵–A~p¾ §½Úgü¶BôŠf>ÍÕîÙä›úhLîP[´ûmG¶g¯ Ù¡˜Ð»ÍsÀëçˆ!l§°Z[ ;O¬¤[Ü'> endobj 1061 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1062 0 obj <>stream +hÞÌWënâFþï§8Zi%»‰'ã»Qv#±„M¨Dà²MKX0ÀT`"ÛÝVy ¾eÏbÉ‚ÚJu¢`Îõ;·9 ¦ÚÅMß‚i¦ù<7ôÁá +m¢}Š´‹ÏXM4ËŽ?øa…«…8œq¢…ÆÑ +ã.Ò¢‘f2ιÑ“ö«Þn~…иhœÁ}jX! õå4 ™L¡•ä"Ä#aüýˆ®œÂ•ÇlÛÓb–ïAt­‘Ekc۱ȶ2ÝñX¤Ð˜ÇY&2#ú]kFšo³ÀÇH|æùÀl§V«sCÎÝ"&¦bb¤Ìvw˜˜pݦ¡¦‚¯2Ýp3Á±<F¸¼"æ»Øp\æéßÀæ–azø¦m…–ÍlÝ2,üË ºg˜Và”“ûtYÐÆ«Q†Ï}`(Ž(èi& ñêË„RªÆ)G¶íe’¬°ÄBe!,¤J@(ŒÂösïëkŸGŠý7VÿÇbªŽÏBJ?ßt©_Àr‹ü+>ëóyñÒ“ÓYžaÛg"5LÇa–¾6ì€9º3û¿láÀV-ìã¼¾Œ²WÌWÕü¢Ÿé¥æ€ ÷e”9ŽÂË ðóÌðuQi;Nsp]²TS™ä“¡þn8LÞ Ë¸Í\Žž¶âÉjâíø›H3øk÷VsÑJ&H]šWÈ.xC½bdß'•ËæëКÀV >~$,ö9ÈdƒV½÷S» OÉùl¹Êá¦ÙiöêQâd 3$Ç×3å(úA•Ítm‹³ÙFtÄ ÁÈ ÊVSxAr†&*¾ò™ò‚ rtNž”}—…–ãìFƒNò™'Ãœ,|>ZåEUÍCJ”‚ÉRÉu‰Yä— áC™*Vš!åìlhÀŸ•Ð^ªµVaTóÔ æ_@£›äï+nË Ð®?4{𞚃j~^Åbƨ|CY‡ÍÈ "ßÈÏâìZR4b”ËeR¨¾œžeIþo—©üc™äñ¼ôûš*=•ùºÕk6¢V··Ý^ë—n'Br½]íããP DšËÑ?Ä0hö¢V£Þ.³ú‚ç£ÒúEŽUãQ À—’¯£[x?…¨‹·ÅEº2ü$ÇùìNªB¿&>%¤–zñ×Íq’e–ÇÉHœFæ¯ßêGõN£Y¢˜ó*ÙŽÙãðt×Éé,N¦§ éÜìÝÖ;7;XÔÀ›W˵¨˜<ÉÈéôšwwtƒsGɉêíî`Óæl6•¡ãŽoí>W ‘“W•Æ}Ðæ!7‚è?RWäiðû÷4¡–ŸÀ¿Êc2ÛÏÅãÏC¦é¤^­¨?œÖ¯#š¸“;µ¡ŠñðÛ¼«#ÞØ=^¿Î÷ï’®ëxcÜÈP“b/j³â;r¶RåÁpY'ÖµT{o¸»ùl:žË`pe¸Xç¸LãµÀ}BMI ûÎ…-d\½Ђwâ¼Ü&}«ëï˜T÷J"—@‹ÕžL€¦³Xßì­CoB⽄+¹º‘üae¹OØ xÀÝZV~oIã÷ŽÚ±òõÆÜ.E|¦ÿ¶"è‰r­œ5;×U?ti)îcËê"ß󑪳g•&éóæöù·ÅmH +endstream endobj 1063 0 obj <> endobj 1064 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1065 0 obj <>stream +hÞÌSÛjÜ0}×WÌ£Eð¬Fw?&› - „Dô%ôÁìj {{ÛÐOê_F—Ý@ …<4P –<#Ÿ9ç̈``³›‚abV´· Œ‘­ØE`³k‚°b$A¤'-ävœ($„- …N±°`- +!„öØ|¹ºƒæ³ùÙÜœ<úf?Œýv»Þ ðiwˆãª_Dþ-|N¥T-ePJ-!Yá’eD:a+ÊØú>öË8Â|ÓOSœxxfWÝ%”ªë:@í…ÐU‘•èì)Ÿ¤¢Ô¿å“ÙU’Ié›]QßAJjùÉÌ21SEßö\i4ÍO‚xkÒÖñV’'‰²!Né-jÜò–œvÙ”»q_cËï‹p‹®ùÊK&Öø8­y›ø6û]ö´8&²IRZwt‰ü‘KîKæò‹ç_3ÞÖ?>ÿ¶¾óØÇ þÇÇJ”EŸí§1µÇ® ø'5Ï7›º¹_O‡)ÍýGÞ*…ÔüàÒ¡jâ ¡tŽ#ìda›.l™áW’àÇY +endstream endobj 1066 0 obj <> endobj 1067 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1068 0 obj <>stream +hÞÌW]Ô6}Ÿ_áÇHð·GX–ŠŠVt™‚*èCÈxfRfH2,û“úÒßØ{m'¦K[U­T­´ùp||î¹÷{8Ù­~ó’“Ý°2’Xæˆr†HFz¿Ú®¯WŸrÂÉz»â‚0øƒ w¶(±’LõõŠJÁ¼[׫¼`ŒI²¾Y½Éž_>%ºpäâáÅýûäEO¹+\ÖíúêúºiwäY;ú~[Õžþ¼þvu¹^ä!M ÁÝ‚†Œ4ÊÀ¢$ð•rÓâ¸&׸:ÜHÿ®¢R:»%‚qšk¸µ4ÜqQˆŒSÿÙüž[e‘Ü‹¾‹ï6Çz$Ô6{EÈïû¡¡¹¹]‹±æŒä€&Œ%ë'H»ÄõA.¿RœŠD,‰ d¾ž=~íú7?ûoPÿÇŸ…HS8”Ÿ¥0“ÀULÀ¿²æ£Ã!Þ\5»ý8+?øžæR<ûD…-dæ7ÅY-[jÙ@ãü¡§ Î±šá¢E‰Íd ›jša Ùgš®AÄ€Ù5Ša "p»äõ=ÒÂç¶t®–Ã}ÄÅ1M›z‹¥P°Ä®ã…&? +£?,ÖÔ¥û'kjǾ²¦.ÕÝk‚DBeà‚ä˜MNS0~·Ë¼î°rQ漢 + ûž\uDZiýR2[ÈÉÉ„R ;@N+\Äþ‰r…FÑI]µä8x2î=¬³ñm²­²ˆYÄ+/ËB +ÃHÖ8gñ7ÌâimÁL¡Î—çsleªÛçÍ»ž‚ßfT”?»ü\ï«vçÉS*4 uþá°€ák¸Â¥É[Tæ-%7}àÉuaÀC‹„%RkánšqFõx xïI?©Ç!OÙÒõ±Ù†v=ÛmRŽ'û½E˜Y8„&]ë‘ x-d',‰±Bð%1;%ÁF¨í±­Çü‚ªÈØ\{ +ÁÈ,¶ZžæcØFÏ z–2z½÷- ¬4(–ãÖp ]„­ÏÂÖö¸ŸäSJŸFNø2•aŠƒ?„ØêÞW£€1è¶9ø./ŒXD+&áÒ^Ñ´¡Äÿñˆ5F†}G9Öó lY.kIú`Î311øTFA7*ȇeÜzÇê]ì’C@õq¨ÀâYïS4ø¢©CGê½2Ao äfßÔ{ Y‰€°ÊEX³'y  Eï¡É?›ÞoÈ-Saõª¬ŸeÆCŲf™tF-‘¯Í +òlsj±Ò6i»1)#!üË*Õ*‘ùÐwàÍ¡š‡4-êÀBzéY Wx~*nf¢Z™*õAÈPªu„RÃbØøl²êxHT¹ü¢´LÍŸ*1…JnEoÛ‰Ï$}7U„+¤]VÄÆÖ,;–GÕbIˆPuF¢ ’é•æÔ bÊÕJçJð©ëws¦íy¢SåŒÖ£óAŒ¡‹Zâû,èÚCµ›óŸ¬=m¨9æΡ1uƒH9 ÑÜZ.]QlÕ”TxË ¾}â·AÓGTñP ˆMâp¼=`‹ÀFÿåžN€NNz;1ûþ›ìœGƒv*à?´ügؘð¾ÅÿÖÄ+¾ãLZ>?ÎçK;'“O'݈ÿø8ÇÍH.ö°G×4†e$Cð€'JwQ«õ½³¾š\öIó ú 0<"‘x´iiè„ ú¥ç%¦[DýcÛŒÀ¢ä¥¥¡Òäùy9y:¿‹ä×pÿ€Ë+6<ÞÈL˜è#<é)> endobj 1070 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1071 0 obj <>stream +hÞÌWÛnÛF}×Wìã)7{á.Iô©¾) H”ô!. +ZZÙŒ%Ò%)»þ¤þegv—I+N€&@aÀ”Dî\Îœ33äzñò×÷‚\· £HÊ3’d†(N»Ø,N–‹—‚²Ü,„$þà"²”åIg\’ånÁÁ +ã ü¶\-bÆ9Wdù°øD_Ÿ_Í2rúòôÅ ò¶‰DÆ2Z_7ÅnWV×äUÕÙfS¬lôÇò7p¥¼+Åd¦I,˜0š,Ï“Þ¸8Øþ½‰b!™¢%Ø!§Åv{U¬"‘³”Þ’wõ¾++Û:ÛçË…NrHÐ0m“*ÏsÂ’Œóħj$KM0`2™Üˆ!ån@¹ƒ%'p3Éz4\œ#†Jûˆß‘J˜¦DrÅ>¦Q,E)H*"ÿ¹ÿ=ƒ¼Ò$E´Þ6µÿm½_u$2ÛÇÈݱþ÷¦-£â¥u…`»t9¢'¥I>Œ% ±`Á0–"<Š¤Ä%ÃuöõK×o|ìÇXý?æ +  Ë~ +ÀM(€H|¾‹Ï_¶[ÿá]y}Óµäm-HB)&è}$SP†]³^©t6 ä§"ϼÈ3¤³Iå˜Ï „À¡Ô§ÐëM¢o#Ô+%ûjÕ•@Å‹ºÙÝT؇‚æ‰ÆúøäRYM¼ ¦Z²÷"œéÜC1å¹È’îÆ’M¤$K(¨&a†n·u$4|À†³APðü  rCwp…Kѱ¬öÁæ,7^ÛøÆD$àS:4¸w\VùÐF†Ú&€rÛãÐ^ROÆ!mT%Ç6q§¶vóÃ1wbùxgÿ´$ab‚%*ÏziŸó' +Pèéö¤À Æë¦ µò‡9¤?EËÏ‹–F‹q8CJ.®òCk!®æ¬èŠYDc›£€Ö.®˜Àò,paÂ)–ιO³Ö3&ÀÌû&ÊõŒt²Œ4Œ"úIøgŸ!›VŽga~„ÂÑ%ÐŇâPj=)yŠãŸT= rÄD†“’YwÑ\ïwxQ¶¤ Û²íH½!õÕg»¡v7Eçq Szd),…ºª«®(+´²¯Ê¿ö–TûÝŒ»¢mËëÊùp–b©˜Oæf¯ZTëäa¼<@Ä«›±ò *¯©wNKwEƒ%Iágá9²¼Œ\>j =KΤÐs8F{ÀCKÑ6Ìþ=éjг—j[ììØw¾?¶½Œ3”jQ† ½#Ì0œ‰aë­u]nÜáäˆètP»ÑÇ•a Œî…þe&°88ô瀂6‚ʘbB·gþnT€xÔ¦uÆŒ#ÓÂì›ø +H?*Tv†´µÇ§ôÃI³\¹Û—KèP. hE®P mk×!w…ZûCˆM¿ˆB’9“oÀ’ºD7]áx +7Ýk]oh]⨷À¥,p)dº†s:ï®SÑÛ¸ ™8QlP«|T+[…ÌÑ'©^•E•š5µ@Zßµ¡F@c·ÀÅZQ(˜‚E„A^ýZ7”äpmóýº¯%)Ÿë"÷còU…òΡ C!¢*(îI°)80ÎÓ™~2Y†^:+oçJ&ü)–DÒa<ºfºŒ ~À8¥AŒŽ D>i~ðГ}KN@#G’bLÌ›¢4§Å +*ÜÎœLq“z_—k‚‹¤Á!ÚkO¯n¢x(½tûÓG8_T8 /£Ÿñ”€XsëNL½<™ë1€iB“ =ìæÖBžBÑ¢Z…%môO¾±nja­„.nŸį‚£Ù‚t\èì·`wQ:Eè«à@¿PÇüqgçÁù¸¿ˆ›œvDzVÞ—kœÇr ë£c®æŽEÿDÁÚû$šzù:‰Æ©žÿ S¯EÁ»”#Šy:š½ø'‰‚™§øæ¬ÜÓî1oç¹ät9:4¤M÷uyºÀTà«'Œ`˜GϤôLíÀXûžeóöfû$á]‡‡×BC’†œàáuîHÃy¸ÁdÂû[ÿ +0÷åŸÛ +endstream endobj 1072 0 obj <> endobj 1073 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1074 0 obj <>stream +hÞÌW[oÛ6~ׯà#¹B /ºPèÓæ6A‡¶(Õ{Xû Ú²§Å‘In៴¹sH]êKÇð€!€¥ˆçúï’’,½«›;I–i C-H{ ï·Ô»º–D’táIEüÁCš˜'†ÄZp¡Húà °ÂEßÒ™çs!„&éïOúþí5 ¹!“«É«WäSͤá†VË:{x(Ê%yW¶y½Èf9ûšþ®´s¥¹2!ñ%—QHÒ7ƒIg\Ž¶ÿ¨™/×´;d’­Vß²“ é=¹­ÖmQæµý6õ"ÅãRŒx®t’$„FˆÀ%kó·‹WÁÖ" „Ú.>‰E%!°˜ fˆË]À2¦Ò QB2?„טùJÈ@QÉ$ü +÷=´â F°>Õ•û6_ÏZÂ"HmÊìJî¾×MÁ|ˆ—V%bm³žRQŒèa,¦‹ë…±üÃP‰‰3J†çοO=Oûo¬þÅltÄ Â/ºˆ¨+€ \.âó×ÕʽÜË¿Ú†ÜæM¡5—ô;S14F>ç=ÿ; +ÇÊR8‚Fî9<¶v ÐÖ;LÆØE×u@bA7ÐcÀ?Aë®qC׸0\ÊcÇÓ€~¯Š9Yå‹wyû>ÛäõäÛ=Kÿvdí:Ýz¡_(ŠMAD®Ëtó˜a¯QVB¶0zq+×ÛB1”ƈ¯Iâ+žÈqŽØ¶„fœAcYé—ÆnU/{oë´Ø¥ +'I¹^0-¡òó¡Ê³v“Ðà$„±:Î÷º*tº7(˜@óóýÚõ +Âbd“³Lᙹø-L†€ë›Úæ½ Íé³øÀ4×áO‡Ü¤›è\Ü'Ñ`ØNTì˜ý±*ç9 ªÕõª%·ëU~ŒÞjk¦nQl½Éhå(/dÌ"[N^F ØTqRÓnñ6>tŠ²h‹ªlöºeŸ‡Ñ@o`g ŠøL$â¡uF«ÇrWÛ©Ó;8)œ×ö¨y¡®ïL=_3z÷˜Í€ïG">‚{§|I +ºð»'Ž\{ú ŸGÍyØ[Õ}þœÁšÞÒIœý±Iëés““EIžƒó©ªýLšýùz°É1ù&§ÛÅLyéL=`{×𓘑°úF¹ 2…Ó§‘°ÿû&  ü* +ÇP#he¿—gÎiÇÙª¼ð¨­>[öñ„0-²óÈ +ŠšÎÒiM¦"ëTÜÆuÖÄmT¾øÄíŽÉÈ­dt̃qV» +À ï ÇÀw%ì_<¡ ¦œw+?õC†[•%&ÍC³ÓT?ßN!áKÝE‘ù‰†`ÀÝmR ¸kÝ“”EøáJM"£ywÂDp¸ãu¸¿JF”§[è.›ý’LnÌ°à Û®ý+À£­Ã[ +endstream endobj 1075 0 obj <> endobj 1076 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1077 0 obj <>stream +hÞÌSM‹Ô@½÷¯¨cš%5]ý£Ž»¢(,³A²‡ìl&ç’YÅŸä¿´º{fDAð  t¥ªóêÕ«*‚A,^Þ ³ð‚Š`££`êÅFÛn‹±‡ÇVýÜóJƒT}–:ðfôx^€ÓGØó&çþ.ÀÝ¥Î0 +endstream endobj 1078 0 obj <> endobj 1079 0 obj <> endobj 1080 0 obj <> endobj 1081 0 obj <> endobj 1082 0 obj <> endobj 1083 0 obj <> endobj 1084 0 obj <> endobj 1085 0 obj <> endobj 1086 0 obj <> endobj 1087 0 obj <> endobj 1088 0 obj <> endobj 1089 0 obj <> endobj 1090 0 obj <> endobj 1091 0 obj <> endobj 1092 0 obj <> endobj 1093 0 obj <> endobj 1094 0 obj <> endobj 1095 0 obj <> endobj 1096 0 obj <> endobj 1097 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1098 0 obj <>stream +hÞÔYÛrÛÈ}çWÌ#5ÇsðHQ”ÃD·%);®8IHx[´¬üQ^öÓ=3P’¹[Þª¤TEÄ §O_NŸ¡8yè½ÿ0åäaÛ3’D,&*6D2Rd½ûÞɬ÷þŒNf÷=.ƒ?¸ð8¢IL"É(d¶ì1°B™‚ïfó^Ÿ2Æ$™=õþœÎˆ¦1¾þô¹.BÓ8X?ér™¯ÈxUfÅ}:ÏÂÌþÒÍzàú!uƒÇ 7¤s#±^$V©¸Ú÷äw‡7R»Í/ÒP*ªƒg"ûÞFa_ð˜ *rûj¿‡ T„Î]k÷ÝÝn^’ÐÐ(øÚ;™û¾ØæaßÀ³ëb³ž3ÒkÂDdvŠ.ðØû‚ñA_þâ£èHDœQR_;_»¹ì±ú?¼Ì&@cø™O3>\¹ü=‹…{3ÉË-™dÛ¬ûRR| EDeÝÑN-GÂÖ²Æ9è)¨s¬f¸h‘`3êšfˆ€¡÷ gÿD‹¿€Íœ Q£¶ î».ùô'²‚åQ"(tîÖ‡÷öÜð¾!ªÇªÞbþD0Á®ãTŽ‹ìÝŸ{ê$þ={꘽²§NÔË{Bˆ„²‘ :Ç"Ï4”ñÄÔ,Ãmtd>90 ™¬we¾Ê¶¯š1öÄ…{*åMY UŸŠØ•Éç+ä…õŽÌÓÙm3R>fd˜Þe+ÏR uIÃ+O*~ðLX'íWtb¿·`†ªîö²†ây‚œç·EA‰¥PX¶¢žÉèÛü1]=dä,n­CxÁÛn/á +—´$_0_BטÏh׬ÞÅ3ã<ÌE`CVø‘rMæE––I‰¾0T«µqKlýº±à]$|gmŠõCÈUà0« +Ò°¯¨ –9ð +ÌovÐ+)Á<Ýç‹,äVQ龍ñÀj뢲îÏ øøœó˜v}ž¯‹"ÛnÖ«;gLSë†9]™“~ !JLè6›—ùzµ%ùÊ~Æ=<è„ò؆øU†dE'ÎL#³ÇyL7èÙ]¶£«˜¸ü£úè<ƒ¾KôžžD5|Ýe{L‹|[fwä6[¬CŽsæ)Dà.šÏ•5wa2g *w•ÁóôÉy¢1hÿ –”‚Gƒ2ŸïiÑD ã)j¢|„¨k%ÏWTÀAØG†WÅ%ç@݃}θP@¸ÍDŒL}ÔížuÚáËÚ$7{ñðÉ廼O³r·!éêŽ ×«²X/*ª5À" +bN¸¼„ëXE·&”Ш°4†E­Dÿ}‰ŒWy™§‹üß)újw{X¬oÓŠWØ™¾ý8öh‰íw +_/2®ý§WTÃÜo¤|ì¶ä$GQÁƒ’ Ó"—j "£ Q šXu¡½?Ó]’óEÔÀ¸/àäfz2ž ÿ<˜L[, ½žèn'¢Û–™²-–٪ħúë¹ð°†‹,µ¤)Ð'¹ÈÒí®ÈšÐ˜Æ¬1`+ñzÚxÄð¾ +Õ–%„‚¦&i`°© †ç£Ádp9]Œӛɨ;éÀ®’$ø‹°å °k‘ƒ}šÍï \1¥ˆJ[4`ËXaFA7ÄGg˜í匞Ž?ŽOGLéΨiËè[™­¶ÐŽÞ›* ô zjâïõž4ªBÕ¡³=¿ßcÛñî°êQ±?l€Þg ÓŸCžX¹/LÅá®|G.R`Õb»Èç–¸ãà°jìÕ£GÜ¡³àu¸–èzˆœ;®€'$°,JC8ïè`‘nB|öäx +/7‹Ô& ˜ÈÇ_¦"FQ‘pªŽïw©äAoœ>Ú%!åµr°‰é-08™cÔ–©1ŒŠ¨1¼ª©Z#n„ÖX˜}‹sí>~EÕâÃÁ}8¤[‡aò„€ˆæn%ã…Ÿ ÈÆ9†oU’…Í·rùV˜oUñf§^Zå"ž\Pê=#s x?`½¸öÐÎ (Px0¨ÞlNÔ9a±¯“£“rPÔUZ|VœJxðØ;µ^az¥ÁéN¸î<ÀDl˜Ä¾H’øû¸œÿµ@ªôÈ‚‹Áprõv¥õë[cr­_ö—×yp™\ÝnK7uu°CҳⳔÀiÁhÛ91ÔÐñhŒi£qqº:iÏGÞÒ©qWRטÀ1 •§„Ÿ} ÓëéÚƒh¯R¾CêOí¸Ñq‡¯y5½$ßçš\ç+Ÿo @ì‰åhfJ¿Ÿëñåÿ_|dGvïl,rjfXö#튃²Yb@í¿(¡âø¢//Dðj2káÃÓÂWsöJ5œÉ»!¬Yš*„«Ý=2©=ø0˜—;7øL€Lõ¡þp×àSÁ†N4Ž]«&G’É:{éU•ÇåÍÙ`8»™Œ/?|˜ŒOÛHå‡:o¯UÔ²â©9A¯Ë—NÔîBxY’yJ¦e:G.N‚5`ò˜;˜ LFÉaÊ´P6Ù{ð·ãÁt6þõGk½{ Çê RkìnQ’ÉnÑÔîÜ0;›è‚khwÍñ>7ü¥hË÷ˆ +ÓDaåapyuy::ÜœÏ&7çmõÝù6l?<jR¡îP‚—¸×Åzƒ2Eá‘®|nb•ö‡ ÂèxÅÎÈÓH¤„Áõäêz4™}n!QÖ·ZbÕÉp‡áF‰ëöfØŒ==w›êä­fGÞµÍP­›VÐÀAÀûpËc¬¼ªw^s£/ Aª!—ÄXm«(¦côJëM‡mñ=S—ý晜f÷9þÔPýâ ŽÂ"¶ŒÁÅÑ—»ÿ†ti±*6€9¾œ¯.§]^Œ~/jË£m¤õ¤^ZOÓeÖ¿ÌJ2ݸ •Îa4PÆÒd5uÎÌÕ|jxÓëÁøþõ}› Ñü?R„G-¥a3Ô÷Öü.6ö{*dMoÿ`Õ÷% +endstream endobj 1099 0 obj <> endobj 1100 0 obj <> endobj 1101 0 obj <> endobj 1102 0 obj <> endobj 1103 0 obj <> endobj 1104 0 obj <> endobj 1105 0 obj <> endobj 1106 0 obj <> endobj 1107 0 obj <> endobj 1108 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1109 0 obj <>stream +hÞÌX]Û¸}÷¯à£Ô­’")ê1M=‹dŒ=)Šn쨰å%ï$ýíŸè¿ì¹$%KžéîØÅ`lY/Ïý8ç^I²ÝìÍû•d»vf3– Ç´³,ìTͶ³ß­gon$“l½IÅþð%]Î ÇòLp¡Øú0°Â…ƹõf6çBˆŒ­ŸfI>,n˜áŽ½{óî‡اS*wÉqw*‡ºÙ±eÓU§m¹©Ò¿®ÿ€­²°•áYÆæ’KkØú÷Á¢lË‹í?Ò¹T\'5찻㹫›ªõÆë™Ñ<²ÜXÆUVãÚ‘%ï›U<·ýu8Í•ž\GL($™¿Ÿ‡ˆ>ÃEíz÷ ™4„™ ?–i¦¹I¾3%d:78ÌÓ¹’˜U"Sé?ýyGrSx>ŽáÜÃyÓ±Ôò<ùœú+U8jët¼É±¡èzwÅK)›SÀ‹‹X(C„å_)-% 9 FÙð}õó?}¿ò¶ÿÕÿãÛ|2Ë…_Ä uHÀ¯²çÛý>ÜÕ»¯]Ë²ŒËä§Tå/îVË?Þ¾<…½Â<ßÛiº.J™|ÆÄ>äɘ‚àÒ´¯_׊)ÜåÛ+-p?[Za*êi ®h0¼bP¶ÇËîÎû} P´6D‡W²× #Ïj Àïî?,~¥8‹¡çÆy³GÎÞW =8@²ÒYzvIºj\5”ÐÅÆW»$]té"š¿Þ/nwo¯TÊy¡¾š;ÉCù‚‡£ÖÅÄ:ôÖ,r¥â¨:¼ò™K46”äú†äz’=¼ B²Æ"}ð…^]…÷@8o|—¦óñEQňâ¥+ÿ`»Z`Ž +endstream endobj 1110 0 obj <> endobj 1111 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1112 0 obj <>stream +hÞÌVÍnã6¾ë)æHv!†"¥ã6›-ZlAb´‡¤'‘µ¶ÔJòfÓ7ê[v†”d[Ù, ´Š²BRÙïgHëäì»kë.q¼ÌÁ挄¶LVÉ·‹ä콋U¢4HüÕ{QäàRÃb›HŒ"¤Å±Å}’ +)¥ÅSrÃ>\¼‡Läp~vþæ \¶\å"gͺ]n·U½†ïë¾lWËû’ÿ²ø·2q«L©Êe°x#Ú)¶ÚÇþ¹å©Ò² +ãÀU³ë«ºìB°‹Eâ´ðkr"s ´)Š„Í)V¨.&±f¡íÑ$BB L˜Ä’'@ŠC8ió±zJLe”"¾˜,føã’+2ö Z*žføêyªUŽ)k¦¸ +Ï0n°o=¡sÙ6qìawßw³Ÿx˜)ãxÛU<Å|YS¸¡ZIpií<áE¹äC.Dåò§O)1(L¿³_û=qÙõ¼,`œÈ ~9 Ý@€²‘€eÏ·›M|¹ªÖ}WeW¢ŒŠ}âÚ ÃÊ1ê°×AÂûÒÔ†œ|Þp¹óVøQ×’ªTÛ”«§‹ú/~ÝußèCëÙtmªG½¿í ,Œ»ª6%W¨^&`ñXuÐFï–{Üq|t=Ü•°‹vÆÆ‘™ˆnˆ>zM^+`³ìúY´‡¦ì nz,ü]Õ–°¬iW²dˆšÆ°Ôjü:Ÿj¾aËv½Û–ußqeÑqbèSzè:#ô¾Gyú’]?×ýòsÄ)‹ Q¸Ø6è±Êdz'ÕzÛ «êÇзì–o÷²2l0Î q"ä¨ó]ÛbÚ„»íŠäUÚ2é'ÎÔÔd‹XÿUÙïP`¨,Åj. +)ܸ¥Ä‘O-ÎÒ&ЬÂtdÌpOÙ$ˆ2â+FzŠm\cïËúæ@'1N‡±¦Dõh”S1—Sø­©?Žd/´A¥F‹ÜfóÃg®¶½ŒŽ’$h§STb‘]c_WÉ –oŽŸ S lòQ6>&Ý|`|¢˜Ç‡ò‘hŒ—jÔ©õŸp.ûx.w°„;ŠêØ<‡àýhc‚k|F¢ráçzÙß&Ø+Î&0;cø~Ä,t‡C÷»9mnNµG*ø'ä­q¯“÷± Ÿdsí${dóÈ×e‹/Ú–k‰lÚ¯P¦­Åhäœ47á; tYs”eôy;Ùß‘ý-ƒ®_ö»îÈè˜îè³Ù¹ñÍQû9ìã~2òpLŒ fÌKfí1s: +¯xfÆƧ¦ÂcÙ8@²!…]HŽ®U’îyï’@^ÜÄÅMðæ)Ã6áÌÏ"¢7Œ0ÂŽ®)'dsZ"êC<õ¾”A#º9_7ì-Þ¢ R1 +8nᦆ£ÇÎE7ò°KäìøEºœUÙ”NzÐœ¯/ï«UUFÔMþ‰ÞÁ+¨bmˆD¹Æ~Oúˆ :Ú8P©±#¸TdÂ!‚wXEÇõ\°gN½–Mÿ©Zu_st¸ðJe41Þ{þ`¦ÜõK +endstream endobj 1113 0 obj <> endobj 1114 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1115 0 obj <>stream +hÞÌWkoãÆúQ¿âÂ@™Äsøfû!ñÚÁÛ&Ø-Š¸h‰²YK¤ÃGœm‘?±ÿ¢ÿ²ç΃”´Þ¤($k¬Dq8÷qî¹g.5Ý-.¾üVÓ]¿H#Ê‚œâ<¥( ®Zl_¬ך4­¶ R€?|éG¦ŽQbCüS)£X%â…–Ë—™\†:GÌ¡ÐR›Os?F"Yœ1<ßt­½·×ÉTeâ/Ò¬Tö~××r‰xEÛ0º&Ý€ñ +Ã4cÀ8–ÜÅÂâXþ-y+’‘5JÓ÷ÉÏ}ÿ—ý:VÇ™D©ÊþÀ H]tl ðñùùng/ÞÖw÷COo«¾BD‘Òâf*ÕFùpÎBCá­ûaWGÜʦ±ÍO³Xe‡¼Ž +›Á·Õ0>ÒÕåáðqçzmjÜY#ØNœ)nÛ½m[ßÌL¶¶º¯h+£¬ß¹Mv»VjfékC%¡/‰øQ.ñYîÙõ÷þ ôØ<ý¤¡¥¾ñ &$]¨,Ll5ŒûÌ»·Þáü‰Å#–,2fì!ª®¢ÿ‡'‰–àKã¢äx"ñ®g_c`ƒEÈø[:‡¬Z™wªÙg`o¹õµ sñ™C.³ÈªH­®ð£§gu…ñ¹úÇs@çÙÁ£3Ð߉¿I3HíHë´æ”ƒ:'—6䘇€Å^@ë†ÞId™ÂbG>À%×! °ÿ~¬è8Ê‘ +… !Ê ¦ui%Úú‰Tvä'<=4 äûò]±âáu¹ ÷å@}»¯â!Ž‰býpªBœsjZЭ ü%> Lay¬ÅH{™ùÅ~ðÙœM!|2Öoˆœß¨¨j†{t©îiÝv]µÎgÀ—ù¬œNJQ6‹³ ƒ)˜ÜÓ©PZû6ì1éÂGÝ6<† ¥åÂþdI4EíJ¶Ûõ– ™é¬¹ñ0lj^råÃôq"³Ræ Žf"ÀmÙ£v8÷ù®7öàbhšòŒ1츊†Å4/]¼‚\½)›»±¼«pvùu´ìLû«9Ÿ}Ð3±½ÞRé±crzv›Ø–|érÆþ™ ¤!£äOn%4VÌ­AIFÚ´Ô´=b(Ò)~¬%hôLÞðàʃ$x¶Dav$ ¬T™mçHÌ%ç_¦äu߬,ÿ|à–¾_‹|6c:´F%'‹F"hœ^Ó6 KI‹u*Êq7øÚcCq‚Ž>r§hS˹äc÷~Ö ƒhF€_€ +Ÿ ŒFuùGovm*R”?s6zˆL¬‘Õ@OõpoÇù>‡°5EIûªï™aå0 ¹x 1lÀ€Ò°~ú)5Œü,”öeÇJ&Ær‡ŒÖ»qƒ˜1 3c@äÇŸ„þxÂÄËÝÌÈÁ²ÅªÞÇœéWJÛ®éA»²ò{íã,ÒÜ$1U-ŒO&šÔž±ŸhÒƒ‰&5©Ä6ž#le|JášÈÉŸ{É9JgŠõ(Æ‹ëä#úÇ83躰§ñ¤np¶V2ñÜ{Ô¸‘ô/;ܪªÍo¿ò¼âqÿ®_¿ÁŽ«OhûÂ<¶úÄ-ÀpÑUý ÿ~‚! @Ø-”2”ŽM^\Ð×UÃ;’]µ¥m ¶mGlÏÐÞ€€ Ì\©·[ Çq‹-½Ä6»g°óõÈûÇáöþ\󳧳‰_bᥠS¶“=3u hòÙÂÒe;î6ÍûÓ¬U (µQ¾ÿcÿž½ß4gçÏ™qqÁËÏúì0kwˆ>»f¾/{ƒrkGÃmÝõƒ¢K\[ðëþà¥ò¨äÖ·S7ýP•8 ðHð‰¸¼}@'êñŽ¡ÍÁ2>öÜ᧬­YÇé¹óNê 6q|/É{2nŽñ™©uŠÐÑî«fs3”ç/XÙ®£¶¯Ž}{ 7 +GÁ3–í ÿÓGf"´§†`[é?yg +âÿõiV˜ÃÙßÊÈ¡†$NC’_Ô¿‘†àö? ^ŽÃ +endstream endobj 1116 0 obj <> endobj 1117 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1118 0 obj <>stream +hÞÌWÛnÛF}×WL\à&ÖzÉåM0ò+Nê6m›m¢" ¥¥ÅZ" ’²’ý‰üEÿ²3³$%9‘“¢-P©Ù3÷‹]¸=¿p᪄"ƒ‡ Tf N’ÁÑ3\H²ëÂ?|¸q$G1DZIåA²(D‘ÊGZ2 ¥RJC²¼q^œ>ƒ@Æ0>?z¯*áÆ2vÊ«*].óâ +ΊÆTY:5â×ä{¥­¨@j CWºaÉS‹è÷Øîûu%†®'}'G8/WM^˜šÁN“AèÉ(D›B„ ==@ú1a±ul0¢ÍÒówÑ%tAó!šÜ;dÄnúqg=)æ¤"¾èÀjøc*´/ç=xÊÃ_#1ôÜUöW¸üÍôíˆüˆ¼óª*-m¶š6 B9¿>1–^Õ¹¢¾NYsÙZEîò¼0"‘.q« ˆtùS+)…þyçç¾çW^ûoPÿÇ×8:”1¹_µPa×·øWd>Y,ìËy~5oj87µÁÐZºÎ­ð"©3“]þ·)yœÂ!V[i#9 +m>ÓËHC!ˆ¿)jåqá©ÖüäE#Bz[¡ì§i“ÂcPê)­üã.#±0¢¢C˜QJ)’ßÚTUT;O[È£#´Êyyc +hæ&ƒ,_ÈZVL[W\âMIoHnŒ53yØb`aùJËÐÉ3˜8'Cµ²!'ÎÁ GörÕܬšgüSº4‡ë$OÄDÀc4v!ÙëŽE!òM…¶gˆ7.W‹Yg P2´UšÈßÖ'“âàð~<ÔkK) æ]Æ“U}‚êÎÓŠ,`þË é+Æim.LQcpàÖ0Ä´%~ YUfÚäe‘â—‹Á’"b_:-f/òKf&ûë6j÷笸-¯m²Þ /°Ñ})˜6ª×”J˜‡”TggÅNíyâÜ–ùìáDtl¿®ÜSýÁßk´£¬+ÎgL0[¸5¤˜ +§<*L]â¼–4l¶›m6]”µióoÐu‹Š ÖgãHEMÞa¼~ Û,|8D¼ Äev¯åî>¦ƒÈΆdN [{¨p)(-¥p|Y〢 «ÜÜCç"!]Þ`»¬çxMñ5¿k˜wlÔƒ04œT›lº‡:ã¢ÕÙ^¸³Ø„§¾/bÂY¦´)’€kgÐ0ØHú¡…b“¢K·ë+ +6·0Ò‚IžÔÓŽ´sHEo«QÔo_ Ä®iÞß`S¬Áº8è]Zq7è~ÖrUõ%• ónl”ÄOmB'wpwÇ:…Ïó¤¦ØõýóÍÌdyÁ=xüÝéø‡·ç§œå˜àm +L&v½‘ +óà“Ê˹¹wL`ë³Ã~7µÉ¸WT$§Xóó(>ÞÇЕ :þ¼„½3åPñ>·$,e’?ng ’ɽomˆ÷5™^ }?ÿ¹íDÝt»­¡ß–hF}açGOn³Íæ Rk¡hÛñ>åº80Ó;mòØ¡Bîm[}·JÚ-¨55ðIr×ÄF†ÿº¥é¶Ì¿e]v× +endstream endobj 1119 0 obj <> endobj 1120 0 obj <>/Border[0 0 0]/Rect[272.82 489.24 381.18 502.74]/Subtype/Link/Type/Annot>> endobj 1121 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1122 0 obj <>stream +hÞÌWÛnäÆ}Ÿ¯(ìSÓÞée³y…‘‡Õe³JÛ&kRPÎˆÉ )óYþ ÿeNuó:Ò:†‘ÙDÙ]¬:UuNµ¢ýêÝoí›U¨)rcòã´Ku¾Ú­Î6«w)ÚìVÊ#ÿqQq$“˜"íJ×£ÍqåŠt}<Ûd«µt]WÓæiu+¾¾ü@ŒéüÝù—_Òwµ£b‹j_§ÇcQîéªlóz—f¹ó·ÍŸð)m?H­i­¤ +Ú\X‹þh[M¶¿¯µò¤/ +Ø¡ëªk‹2oŒ±ËÍ*ðDÊ $éé$IHú1[2±…žŒÂá=‚–ž¿xLm^"æ‘Äà^úñ>{¦ö7:°.þ%u´/ñLž«œu€ÛÈY{*†ÏžPŽ2ÍóD~Äð|WWöÙ¶ËZrB‰OŽy“ÛçuS8kø+ª’Ñ5Ẍ—ç…ƾĽ/œ!ö凷²#Y£4^O~~îú—ýo¬þ/3 СŒ~·O€ö P¾MÀå›ï{s]ìÚ†®ó&Gh-•ø—ãER‹|+‡èK8òL ‡hÝ©«Ûj‰LB[Ï|“h +#ñ§®v=Óyô=TŽä©.Ðh{'òî®|sç|5«A—›â?ìZûKñí¶«KRvñæ‹•yù³³ùïD»ð;í¦}ŒM C¾{º,·wâÕÏØÅç/±øüÏ¿¾¼¹Ø:¬ÅWs-Vð÷ÝñË ãÀÄr±e¹˜Û;\&:`1QPÇvÖ5tV´tþÖir˜K4K2›x“-zƒE®ŒÐÚÙ<ä4·åD2Æ`Cµå4@>1]C)1ûõßé3©ŶüŒ·†ŒLÄÙ_oή6çß_ßØ`{×@}I0Û¢‡ } jÚ´ÍyÙJbíÞþsØ&øÝŸ³Ð‹kß• +ÏOø~àR×p©]¡¢¡ê±-ª2=PZn)KKº·Î)_†a0µ 4CÛ€º&ßRUžñ'Ë©({ w…Ù­äk`ôrsÈ9»‘ôÁðE¢rð§¦æ¹lÓŸ`kÇí7<Ë{(…#®¸¤ì.¥÷È¥MÚÚ M°'1«Á_/1þ¶Ý$z¼–Q4Gñ?až&iõv–á·Ôä9½9)à/Ã7£x‘š#?Q|Qn,¡24¾Ü2¼Ž&ŠDƒB_`¶¾€v¬+¿oH_?Nðj»H¼»_§å¾K÷vßÚKd ,’Ñ°qªÅ[q›ÄO–μ|9l°pϪR»ö1Ò7KÉxÑ +Þ)¿¹áâ9ótp•?"kx‹–ª Å€beÿ•–:šÛò–hrzÈÓ-Æ¢;ñôPd”š +g‡n +iO£À\"“è´$£©Ä>]^ß\}ûÍ" ß´îÞ˜Û·¦7—0ÉÀý c\\}ºº¸¼fÀ~¯•:!(¾¤+ ÒøÐ4µ'ÿ&¦“¡özŒš<³=ZçTVm_Zf&+‹·G=eoóXyû–ŽiɼŠgg v¦ôññPd¦áAÓMÓsÚÚ§w‡– Ó>ß;øsèúi•±_¸ TÄ}m쬼ƒ_4h¾%}¬¬ä<9 /H?3“æ ü‹W:>ïzë0™ˆÙmX‰ß÷%æ÷Úw±O‡ž©¬gŸc*•X÷4ãaÂ&†# %G|8éœkêYóÖiQ‰¡ª}CÛº†ëÑiÊçs?ì Fø+Þ^ÛxBQÁçg2ˆÛŽ2kMI&F¸EZ²·ÐŒ¦Ã–ö!mmݤÇSf·)daùØ'{Œ°|`ãŒ÷âã-rÄÈíç…¡.,M $?àF €uÔ=ä¥J𚥭#¸ +ÖûV¥è`)oc`:î…žT5íêêH“-mÓ6½OK±°'ƒÌŽ‹ñ„u¯_ar=ˆèÑt:ÂÆð1†³CÕSë¶êî­²b’ù±«Z;DYDT„0ÿi׸sè0 þ[€§pÓ +endstream endobj 1123 0 obj <> endobj 1124 0 obj <>/Border[0 0 0]/Rect[422.16 379.26 534.48 392.76]/Subtype/Link/Type/Annot>> endobj 1125 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1126 0 obj <>stream +hÞÌWÛnÛF}×WLý´›DkîòŽ4lYé-)[i¢" iJV#QIÕ1Š|Pÿ²gvI‰’’¶hZ 6@Ò{™û™3Ö4œ~}¥i^"Ÿb/¡ ‰È÷¨*³Áùdpú\“¦Él  yøÅK'±JŠ}Oy†&«)Ê °6ÉCåyžO“ûÁñbüœB•Ðètôø1½ª¤NT"Öó*[­圾-›¢šey!ž|U¾S*ߧ¡V: +irá$[Ùz'û§JµQX@]®7Í¢,j+l<DFÅ|ŠT‘2~š¦¤‚„eYï¬Ãv>+ìm"$|À·›pyÔ†!%lIç=¦C6~è,|™I?P¡x ãi9 ñË¡Ñ L6BKmŸÝºŽƒ˜£óªZ»µ›MÞŒT,~”v§pëU½CØ+Ö%×zëq¸Œ‰bŽÛ’´¶p‚Ø–ß%_eCbrBiû>øóSï¿yì¿‘ú?>fàG*áð{m¼¨M€\þgË¥û¸\Ìo›š.‹º|_iñ«4±òEq£ºúoK86¶„# ÷Ô>#ÙâÚ~áx*î×5ƒ9‡çh5ã¥"±¾hhtË‹Y•å@ Ô@®¨Qã¨N¿ÏVrˆ»å¼w„Õ±bp¯-¶-ʵߢ|r[ÐLš®-–K¼#|ÜKƒ'w‘Bú¼ó^â‘­ ŽêÛ½C5e”gËåu–KãaáU®WÐý¢¹¥Jš‡»‚Z;Cg§aËB—Òa‹¥aabYÌîÏ7õù¢ÝfU=º~79ù¥ç&²’¸Û_Êm·ÒS•F®•ðG‚óµ‘0 ú¢lèz##±SuNS«~”-±ÎNYÝoO\9"„Æö›Ô ûÁêý@Ðâu]`µºÈšŒ6((þ˜JúÍJšà‘óU:ŠúJ»I€GŽ6`Q¶ñ-КѳPô\bœÃL!ñ¨\ä‡X‰=ç}¼•·é ÓV`ýP6Ù{H9‚_ —ø#+4`ð»FÙ52m»Âqru PZŸŸÝ°µ.jÑY£Ý@÷|tâj4Æ$Ô/Ñ“Ž0¶Àô›h'¤Q˨YY^ê¨s…ú—ŸfN׶;þŠ:ÖG¬ÛX¦Ê¤…´ã“7¢‘FbKAA–]2yÀŽ>2Ÿ^ ˜/²r¾Éæ&‚™ô èÃ"ÌC¿(§k„:Mv!ëEZÙê‚9#”ßÐì}7Ýš°cfmG£¶õÙ”‡¢”xÔGàMuþNŸ·—Jæ¸`sC½Éó¢®g›eˤŸb|1ØNá>oo{Ý_¶:mnû0lÛ–ýç#éúÕ¾»°#üÌfÕ-jÏñ!ü…Œc&ÜǧSue‘ùçS‡A¶ý Kž ŽcžúÄ|‘¯Ëº¡·ÀgºxDNmŒNLÚ9ºNˆ¢ࢿ+æ.@. ú“ÓT²@è cll +endstream endobj 1127 0 obj <> endobj 1128 0 obj <>/Border[0 0 0]/Rect[272.82 420.24 374.52 433.74]/Subtype/Link/Type/Annot>> endobj 1129 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1130 0 obj <>stream +hÞÌXmoãÆþ®_1ȧesÚãî’\2ýä³}ƒKغk‚ºhj%3¥H¤âóOê¿ì̾P¢ìš  +&M.ggžyæ™Y Ø.ÞþåNÀvXd +tœC’g bèÍb³x·Z¼}/@Àj³büÁ‹È5/rÐ*汄Õn£'ølU-–<Žc«§ÅßÙ‡ë÷ò.ß^~ý5üØG"ç9ë¶}¹ÛÕínÚÑô›²2Ñ?VßáVÊm•r¥`)¸ÈRX]9‹Éd[mÿ­–Bò„Õhn»ÃX·f°Æ®W‹4)0¢Œ§p©Š¢žädÉÆ–I®³ðƒæ2™½GLe_bÌ"…Å¡|™ä!|òL¤ä#Þ¨Ô¹ø}©„§ìd,¢eŠ·:ZJ‘£Ï’‰HØßöyŽèDT#D×ìSdß÷¼êh‰þ²®%tm¸1á%e¦ 0ò%÷¾P†È—Eô)9¢Á…ézöço]ÿÃeÿ«ÿÇËlTÆs‚?ö ˆ3Ÿ‘¸üWö¼hws[oÇnÍ`°”â‚ýIÍ3k +ÀSXKKá K÷ U 3TôrŠ"v\`ý*,¶íagÚqð5›8CH@ +µ ·ücãóÞD«_Ž¥-xQ¤ÄÕD D`j涹ۛªÞÔf€ñÑY€nUcJ»¿`%Ž`meÀ'q’:؃ô8Ü­1þ¬HlÆÇr„§|0Pî÷MmÖ@Α‰lJœôÚ5vÐ= £SÅ°ë®àž=D2Æ 4]‰oþ-ñ}¹5Ã}丰”qz"a¾«Å‰€•íö5š¬[¨LÓ dW2Žb­Ã±¬…ž‚ 6„¯êOQ†¼CDðWs0߀ïºÖ¢Fnˆ¨ºvMÓE5ƒ=E´ Âò ø<B䎹Ó7AJ„°»}“VßØUýk½Fݽ|,û²Bžgú”YI:3$‚˜‡8Vè穹1/˜5 +½ËsÌ•>Ísp[–5áÄž(a¥[Â%P›ð¦Î1TÒ@˜xb7»ºùtsu}{ùíÅí,ŒŒgçä¢;©íW0Œåh¨8P îS¿‘FAþýû0kd© +ž%çMpŠÙ%`Úêº=´l€xU•-±Ü²;áY–ui +A¹9 X]Ûg*Cdt mjûµà¯—ü1Ä&Í8¼’L³†çv,?£-˽ð[UÒ¯T0ä.”˜·“ªÉÒó˜'®ÈÂúK”¶I=…Zq­ÿhNåDF߶I}ƒ1ðÕŒ™TK–˜_™•Z¢öC"íEÄ‚kà™u=èí±”Ɖ€'^j—§ÍBfŽV˜…q¢“WXr˜ÓrÛ[hz{…|(Ûí…È1HæNúAߥ'j~klrRœ*h¦0íË)Œ9bŠÊDfÝã£Ø/¹Ï{Qò¼\¿‘´8åY˜^äyFˆé{ÌÂ2A°Ù4ÎÖ7„¹PÍ”ÖrMIé¼gOuõe3tˆxÕÖ¾éÌ¢Àúœ–úH³O×·w7ýaPÂEq +^ˆ…½±õ9‡‰§ñ es¦ß}¼{w³"¸î¾ˆWêRœÉö$7¤é¡-lØä &’”@=Ñ`*W§½¶=³ì°<ëLÚ7ïµÙ  +¯ßÀ®lI2öŒí1a®áV¥k¢å0à kGÁŒ•‡fœ_ºðö27_ö37u¨ÖÔë¾ëoŠ4F¡ô ï;ßÚ6§¨Í š‰H³;Ð_´2Jè«7i‘˜¼QV™è½÷¨°/jøj(ˆƒW+çÙo©•(œ{šõ°  «‚Ç—]d;\ƒºkù¬èáHÒ(X`uãëÙñ]×ç)?=ž&„ÿLŸ÷.žŒuèó3Í*x{?6ávÒœŽ”-y‹}c8à'v^²¼)wARRR¸cÈÌ&rï“ŠßØfB-§,ʸo@rVF±/"\Z`3ùoDìÃcwhÖh³™húQ°çl^ ö)&îæqÙ+-+œIëªtGTŠo0ŽzÚ%Z9ò‰Äö5ÙÎy¢œìéíX¦aŠAuêý Ò›ñà’²–$vx1‡âEËŠgeþúìáKê &ªªÌ0l w†)NѸe[Ž½ÃLfê8ÓQ5žº8.b›'ìsö®&w×îio›Þ¬1Ì&;©’ÐÅ ﶇó<ÌaóØÑrúGûõDüÐ,3Ø ƒ%ŽŒ)î²T\¾ªÛwvJ™IqA-ÓïéÃeDRh»Ðp+"v"„-s Ñp@0Ý3wä4×Òy<¦\áú +Ù=bée —ý)€‘çDY„bLÝ0€RJ§|†ÆéBÐuÊÅ4cÒ¿ N»ô}ää=äH¢¥:§¡c`ß_üôÓÏ3t5M_íÓøqðM±)û-v„Ï®‘OÕQCBY§áÄ‹EVcnp°Hs¬ÑÎÝúéLæŠËÚ™tÒ)ɾ¶ÌhÅçÓâÉìlL¶JSÆç,) ´¦I?žbÙõÇËH²‹^Ç`¢•ÜªÓ‹ãtˆÅ©yB├G¿:°ÿ®0pžü·Ÿ(Ÿ' +endstream endobj 1131 0 obj <> endobj 1132 0 obj <>/Border[0 0 0]/Rect[243.36 125.22 310.5 138.72]/Subtype/Link/Type/Annot>> endobj 1133 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1134 0 obj <>stream +hÞÌXÛrã¸}×W ~³L¼îÔ>ìØžÝI&ÎÖX¹Õ*µEKÄŒD*$5¶“ÚÊ_æ4JÔe¶òTe¦J¢I°Ñ}ºûô$[Žn¾{”lÙŽÍÒ0cQ–0²ÆŒ£·“ÑÍ;É$›,FR±ÿñ%³TäKu(BÅ&›Q+"Œpo2E†šMžG?ò÷ïX,2v{sûÕWì‡&™Èx½lŠÍ¦¬–ì}Õ™fQÌLð×Éo°•v[ÅBk6–B&1›Ü9‹ÑÞ¶<ØþSŒ¥/a‡}¬w]Y™Ö»ŸŒ%Ò1%"N˜P:Ïs&¢ŒlÙèlÀö!b*:zHh¶òÜÂ3<Œ²>zrLÆä".tì<ü]èHÄü•©Pã—i0V2ƒËŠË@ÚO{?Gi”:?4µ»7ßÍ:$"å ìãî7mŒá/¯+×F\J%)áE¾dÞJùò¯€^%GR挲ý÷ÉŸ_úþ—ýo¬þ/³ ЉÈþÐ' L|däð_ÙóÛõÚ]|,—«®eMkÐZ É?*š›¹èëß—pªl 'èÜ_hj,LÒdÐÐã}¡‹à[´¯F¯-wSu­oÙÄBª¾_‰ +l/ðyù¹œ›ævU4Áäo‡—"Ç +”l¤z¼dßßÊ÷÷ãÖÌÊEiZÖ­ ›‘ Iq3êõ]k欫™ T‚›/(oÉ·i[—™Š4rÙ°ô½ ‚³ÖW%€KÑE3[`2jÓç•©ñJUl< U¥Š÷i•¶8+Ã6Åv뜨FáU.²$0WØåcZ4õ†Õˆ§aó¢+žŠÛȘ 69Äè#Üß’·ǃ´…øÉ0SÍÖ5áQVl^ïžÈ—Läj¸ØÓÀÚ°¿ïê®èJǦpô©ù§`ŒO¸¡¶„Ϭ/‘1Ê*Í(½Zûôj9(‹‡º "â&Í¿>¦qÐo8ô¡o‰ ö~asë«ÄÅŸ¢Â.êPDú$g$µ™ MK¡ûÔ±¢Å_¶ä¨dÿþ!~<™ån]ø}3·kk~ ’æì5P!¯wgy£àt8Ìò>6ØÖIîl£@áÃS1ƒ‘a|´ë¢]±)÷0ŦT$ñÐC‹+ŸN:F$ ú^Ñ:u›MödD9¯QšûŽ¡M”)Úƒ*='ªˆð….¶+Ð%ùiuÙ=òümLA‰²e\ÒìFÖ©~¶ê¦1Íô½Å16‘‘*=óÝNt²ëª^íµ¹óí™»öT1®^ÙܬËMi“DËOꙆ±lf¯@h±R"IˆÐö +Âç +ßùª#rr;ß¿›íyDUC†´¼¶q5$ûiï«™:xhI) A-ùz]SGåü™pSå¸~ nwbíª_Œ§ÐgEŸ”éy>­¼¦â’9ÿÄ'}ØsÙ­lº×­Oþ΀qxÞJ®ÚÖfñ|w ëÛ§O“×í $”U +øíco¡%NÑA•BÅ)½²ØÿÈQ3èö án§·èÚù¶pÁ M°­ùɹí« Ò%u’ܺ#Þpÿ°Ü_1)ÿ€QxWt¸[Ðt ë}ñOkeòkÿ<ðïaV¼éµ$d·÷ÖonÈúíÊÌ>±rq”\oƒ³YÝ4fÖ ´×‘wx+§Ü¾ô«oØ^Ü lÎômxº˜ò«‰Ý·eUÛ;OnÓšk††¨.:ÓŒ1^¥göܔԞX-¦Óêj¼é—ylŽNÞ5“û%öáÏ”ð `Hzé›SßÀs ¿úz¿Õœn¿¿'œûÓÇûÇ)¤¸uÁøƒyþ€*Ÿ‚ïÞøü#SÅ|ΊŠ™Í¶{ekJQeŽ|q›‹ÑPPøᛟOÆÓ‹åIˆ%¢³Í@aðû—ÎT-¦k˾L#J½«¥oéÁ˾¡[äŽ' >?âNÚÄ‘Ï·÷ß½¸ÿóäÈ‹HdƒþïTZ%¾Z(CêÎ ’Ó9%ÕÙ8ÿÅÍÒ<>•`´]¯ÁÛQ×[%ÅÚTá`xDTQÍA’&žS7ñp§®fæ åÚ@\ ’W‡lΔI?=/Á¾6Ø5& @%æXYCæD¾ò!%©Ïàl×võ¦üí« ÅYûZuÅ M_"çVo)ŽÎؘlÅz¯ÕU×ÇZ.+:gO$(2þ +É•ÒÕõºíç-ôÿ‘ü„µXy°­©y é6gÚy'Ø_z­å§ &ý¨äL±nkkÃʉˆFÄÍCÄÚG(/T[,}µ¨èT+ž{ È=‹{IIVY»Ûnk¤ »€–€õ!#½ùQ‘ìq”Úç€ÑIû5^ÕÑÑyװϤ+${oÈwV/(EHݺ¦Iq"óþ-x;;+ÿw-Mõ#.ð£;¾º }è¥=ºK:8¬ 4D &*ä +gïÈd‚ÍðÑ.½–ÃMÚëÌë3B¯¬îˆ—5h@)ßh)w¢¿xB‰EZ.TzR4V ÷½mg8êÑCò´­9šÿþáñýï8 ¶½j86%”ç#ÞbšÂ½QNŽ¬ø5kaW‡Þ½¢wqêU‘F€iS]’j"±Â³?ý¸XU¸ œ2Ý•ÿ!‡8ˆ‘F‹yÏŠ‘sR÷låÉ…Ÿ¨nî߇¢ZÁy +QÙÚ†­£¨:ýí‹ä`vÆæÂ÷ot¾ +endstream endobj 1135 0 obj <> endobj 1136 0 obj <> endobj 1137 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1138 0 obj <>stream +hÞÌWÛrÛ6}×WàhJ7äcì(wZ'ckz™¤´ÉldÊ©ÚùŽö'ú—ÝHñâÄmÇéLÇcÝHìåìž³KI6³ç¯/%ÙÔ3«‰1™%Z½Ÿ­g'‹ÙóW’H²XϤ"þàMfŽçqZp¡Èâf&À +~[,g Bh²¸›½£ßÎ_‘”gäôùé³gäížÉŒgt·Ù77eµ!gUã÷ëbéÙÏ‹oÀ•Ž®R®5I$—6%‹—Ñ¢9Ú–½íö,‘ŠZ‚r±;4eåë`l¾˜¥&‡Œ,O-áJçyN¸ÉÐRÈÍ*îlw’æÊŒ®&‰!ç#"yÀ!'pÑd]ú™L1Fø ÓâwÓ†§ô#QB²$…Ž%Jf³¢’IxUñw‰8ãž·û]ümuX6„Yîè÷,\ññ÷}]²⥻ +Ñ é +ÄK)ë0Œ%kcÁ +a,2<Š8’ãûäëçÞÿámÿÕÿñm¡Úò ám„m M,Àñùb».ÊÍuS“ _{à€Ö\Òߘr\S¿âÚv*´°êv=Ü“®[gDG¢µ]ü“zí@nXFLÒº!W~SV¤¨VÄÃAŒ-‡ÓV.4ÏÁB€C !z2}v>ÿqÁ¿ôT7 âHò3‘‡¤nŠÆßøª!wesMškOâéÖIÆ­Mç5žÞ¶~}wÙûæCõ÷ÍÈ­\æé±XÊD˜ÐÈA¢ÈC:£Þú¼Z}ÒvÆó|T§ŠÚµT$ûN¨¤s‚UEïPÎå,À‰qºÅh'·;LÑ•_×I²¾ +]M;„ óó˳7ç—£ðÓQøÚ¥Sg7 0F€è„à.™. äSµá^yRVËíaåWÐ?Í“”Ûû*ÚȹÑÃH‚߇ê×~„¥±Õ“x6Q£‰!;²5ðŠÁÄÊéŽÁËžøøíž%Àâæv ©íÖ¡ÇÐG¿sÓþâÇàXùzǦåäví÷žáIú5SÈÝÚ{ò{ÇI­@¹3b•½ @NV§Îˆ›"„Ö´Jµü p¸X½ûÆWu¹«j2¿ácÑCw*xˆÓ#>Œ1<¸}ƒüÑìn ö Þ÷ˆ5h85‰86]Çä ®Ûbãá„âè$ÑXºP@7;Œ0¤I[~–€»fñÝûæêW±£"8 õC1;1êzn§eî=SR®I}X.}]¯[Ê^粘~øzš¦)BÞeŸ}¾;ªD«çÍ &"©ß€†Ÿ03¨—Á®ÄÖiÆ{ÑHµS•]<àJôâehSGÝA[IþYè© ìTª5®vAAËòÁ5Þ)„Ußúe¹.6M±ádmÛ"lX€ŒêYíúH/?VMq?ÒëùÖ3ü€šÍ¹ØÊü2ð¶![Ï,Œˆ÷4Žr.bܧ.x/áÄxÖ%¹.ö_u`ÚèÔÁâ¥òn˜¤Qø@¯ +ØÒèf2yžºlÐŒô=÷Ó°ÆÈû2·†_À­¡²›â]ƒä±®Éf<ýB-!A#ÓqqcÿlƱ4±±ÜîbN8F#ÁuÅECÐ5°…¬v‡+&á™ØE~=ì 1¶›"NSG?€Ä;&†n'ÆcôÕèkÚ–0ãÝxê£K‡DÅ)öQµpƒ"*Ù&aÚ!žar²iÅ Ž¾¤hëòB6?9ݪôPÎô„ S–e\çO#™2@²Ïsl°(½Çvÿ»(‘ + £=ľ>¥÷ÍéÞÍnÿòð &±#ö²ÓIkíü,>@Ö°ÇŽáÖ8ð¦pŸ^Ì_,Þ\L¶Xõ‰Íöêvw`¿x ÅŽã“ã¿w£nÜÔ )a—¹EÛ°Ô.‹ +Éu¨2»jû^–mØ|J§Óçí1×hØöÇ»1> endobj 1140 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1141 0 obj <>stream +hÞäWÛnÜ6}߯à#ÕtiÞD‰Iì.Ú4°i»Ê®v­bW +$m÷ú—!©«oIš ++Yçr8çÌPÝâä‡KAvÍÂ(’ð”èÔÅI/¶‹«ÅÉ+AYmBpiÂlJÅ—duXp°Â¸†g«õbÉ8犬>.®èOg¯HÌRòòäå³gäM‰”¥´ÚÕÙáP”;r^¶y½ÍÖyôûêGp¥¼«˜)E–‚ “Õ©·¨{Ûb°ýk-…dš`‡\TǶ(óÆ;[-Œd‰œ ‹ aRYk Ó)ÚrÙ¹„ÝKÈ™I=y àʽ„”{@¬ƒÁx©Ó.{ LÄ"ܨØGøs)ÍbzK$Ñ2†Û$ZJ‘BÈ’ŠHÀ¯ôÏáµHt‚輩+ÿls\·$2,¡o#÷&÷Ï릈–/­J×eË.)M‚xa,iˆ7cù+Â¥HB¼QÒ_gÿ>týÌÏþ«ÿáÏÜ(ÃR„Ÿ‡ à&l€Ð~¾‰Ïçû½¿¹(v7mC.ò& +(ÅýÉ„)šoXWÿ¡„éJØs!5|h3"ô²Ï‚û ž}pmw<äeÛÊo +Pv|E)P¸®ëß~|‘ïÀZ’ôS{šµ3i››8î‚íäÃ[sÚ–¢²! +ÁJì­@$qHs€ž>_M e°èí{) ÑáV:üHÓcî@:¢%H9IG&º¢öLëW7· Ø!mqÈqMÂŒm;á–AIVnÈ‘¨I $¥i^§YB¡ó/É8Ï—@EË]…‰¤BNô¹ ©Þ·EUf{Ø:+É;—ˆÐLÙ!™zØŽM¾!U¹¿…ŸuNŠ–PˆÛ²DÞ ûì·ÕÙëËó_^_N‚7#¤ú'Íl‡˜_Jr 6q©˜úc2¸º¼-ÛìÓ,$k|ßÂl]PÃÐÛ ôПó|E ÀcŸG†vuì+øš^GO’BÇ@ + úMŸ3"F\„»E˜? ä´é7ãÆÅÙÛsD¾fãâV=üÉ~_œc@è¶_ã¤g“pTˆ¸Þ2­ÇipÍP¦£bô¥Ï1¬Ùä”—!­‡ªâ´sÚ>Zº±r~GÄ¥~¼zgiÿ³òUPmJ>]¾¹/´kê»4ãÂá#9În ¸Æ»2½špkº>û »¢òº© µY±ÉØŽv‰~ïöúˆI“±£>Ì/ö(ô8ؼŽÈã “djGLêÌA7w¥àâ/nC$Júô§©1#ú/´íÍÈIJ+-î÷»îG‚[לfý¿ñ4Øâdh…OkÒÏrÌ¢ÑÙ Õy¤DÐ"RFBÐc$èá&ÂØC‡„‘ãé¡@ÂIb¦÷Ž(‚¡Â?ó¾ Æ´}Ù0‹m6 ô覭ÅŸt*8l £]ÒV%€béx"ê•t|ŒÚ{›¥¨t Dµ?IušÔaÉõ\Éè¬oÂNàÞ¦ƒx áš(Äz¨j7¸•A¹ Ùþ„K@™|Žpy[ÉÖ]WeÓ’5¬¹ÉêïÈ”¾Øœ¤½£(-ži»Ïï(Š‰Å]ƒtušÞ+b_ç¿iÑ]”xÙÝéÚ"NÆAÀÌQÀ1æo¯‹Ôm +endstream endobj 1142 0 obj <> endobj 1143 0 obj <>/Border[0 0 0]/Rect[340.92 173.22 408.3 186.72]/Subtype/Link/Type/Annot>> endobj 1144 0 obj <>/Border[0 0 0]/Rect[414.96 173.22 549 186.72]/Subtype/Link/Type/Annot>> endobj 1145 0 obj <>/Border[0 0 0]/Rect[63 159.24 112.86 173.22]/Subtype/Link/Type/Annot>> endobj 1146 0 obj <>/Border[0 0 0]/Rect[142.86 159.24 230.88 172.74]/Subtype/Link/Type/Annot>> endobj 1147 0 obj <> endobj 1148 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1149 0 obj <>stream +hÞÌXÛrãÆ}×WLö ˆÅfp¯­Ý Á–g_Þ +¶lÎ’¥AÆ¢,aaÀju¶8{7=»x/˜`ÓÅ™,À?\D–ò½J†¤ÌeÝõèçK×ÏÜö¿‘ú¼M@˜ðŒàì‰=™ø¯è¼\¯ÍÍM¹\µ »QB„!Þ¾Lyè©{îÀ†p*u'HÝW²“4dô¨ó"0\"C$Ûr·QUÛØœMŒ  t Ë ^[¶kåOÿÑ« ¹LD¡Ô›Î™ÙaåðidwD¹ÙÒ´5ØÂl³hÏ2ŠùH:À;†–!nÔ¼\ìYQù"Ý{ˆbÜȼÈ[ïTÃöfòÄÛ±J9üzˆBb;’¾Pq.y’m´êÜ%›ÕûQK˜þÞ¾ÍöZ5o]qA‘ `s'ùâ‚$Wjþ‰•‹>J¬6~à±ù¶®Õ¼§ËðvÎ<ýÒïþÀúÁ2É©aÖ™pA»˜yo¦Z_ê-ÁÄc융 +Ë5Ú ‘„T—"µ|üX—-ÑJâñÙ¬z3óߺmö JkÕîꊉn‹~øÅå3à8zÉxuÛuûN-‘5úƒÐøBøÏßßLngD |FÕÐŽkUšm EãË«ÉWãÉ›“W£ð«B£:óþS“êÞÉœy$ñ³å¸Eœᦈ¥ó ÞþtÄÝ–¸5kKôƒ–T‰mYîº ŠÈ\ÐWL­زFêwí9ûX4è0‰Ab¯Y—hXG"À†sŸ8–}ýƒª×ÅÃ9ûÆ)ªvæ¿BïRôf¸š•¢,È…<¹ã¦ö7ДxÄïkÍ1 Yšã¢h[툹AXS+izâcbŽ@¶=1[²ñ®/¿›Üòsõ •.qeù¯¸ƒR6'€6  ìMŒ¤¾Ö¸¢ðF¸(Ó¯‡ÀòÃÁ¶¢ºg¥ÁÎØL.­S@œ[6¤‚” HÑS…KQ2.‰ `˜ÿŒGé¯ôßEJ"Ä¡ÿÄ=µúç®Ô*ДTWÉâÌ5 +EY¡îÒà²(×ÊÔ£síûf[ƒ@WEõŒÍtüɯ85Òî&±$ÌŽŒ6è¢[Í*irÔÃÀ»¥ª•5tLkÔPílmêݽáTF*x¹rl…4ónB»Sð'ã>v>œ½7á¼5qÜ쫶p²Ås¥XZ—ž'ú I¥?Є¼‘ÞW\ +í® Q*OG <Šzéâ5\%ÏóáѺ†Ìô™ƒ|0m +õÐññøzÒHt–¨¬ŸÍ¢ é¡}a[óS§QæÒHº4Ête& vQßGôI.‰]²™L +Í„”I¡Í$ +ÍF)öóõÑKŠ3ÿ7g„¸P2‘Ò¬ŸPâ2žh Ü¼Ñ` ãÃÖôÅþö*M_[˜NvOŸ r£ø£EÈ´±¥õ9:¸š9["jsk‹À‹É+Æ€E‚ÞIšV~Ô Î¶ø€‡Ô®à4à# OÓ{–„>¢ñKsúàpªRààè{‘Ú.sdäP Ã´à÷dOtE¦Ó."+T[e4>¼h¤5;µÀ 12·”¶jW4°wéQM”‡G‘z»¸Å]ÕrGíõZØÉT—ªŽ?÷Љe'üÆM6aÌIõhÙ3•%Ô說vlãgÞÎÇPÓ²;j*4r +ÿ®=J|ÌpÁÁpòyôoi§'Òn2¯Zñ Ë(>&Ä~ÒÍàu±G@ AC†1Í€Mç¡ô8#†ä2˜¯ªûSÁ)ÏRWàÊ‚kÌtȪ'Ë›£“lÕs ‘ŸÿÆ.¢ÿâpÔÁ‘…£†3UÌW¶J Ê;©÷ ì mÔÌòÄÖLñ¦J-àœO$Â}rË•?d@|U¢³Ð¶bº.ÑŒ­Ae~Ñ`i‡ê†G +Âа.z’ôØiÞWTjÏî•«‰!ÕÄ{¶Rµ2M’í…4évÔ*ŽÈËcúX³½Hf! {ä(íɀϤéote®GTÑ}S¤d¾Nô_O8­9‹_'uêQäPõ 0~¡ ÐÌl6i‘¦¨—åìN\9ÍE„ÏQŒ@²Zþ-Àë[­ +endstream endobj 1150 0 obj <> endobj 1151 0 obj <> endobj 1152 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1153 0 obj <>stream +hÞÌXÝŽÛƽ×SÌ%ÙXcÎ9œK×^)œÄX §\i´«B¢T‘Š«çh_¢o™óÍ )’Ú]oƒ(XRü™ïïœó}CÁîg¯ÿòI°ûfV(f²’é²`*cG7[Ïþ¼˜½~/˜`‹õLH–áQnKfTÆ3É»Y†Ux¦qm±œÍy–eŠ-¾Ì>'nÞ³œ—ìíë·ß|Ã>SQò2Ùß«ÝnSß³oëÖ×ÕÒ¥[ü¦T0•s¥Ø\pQälñ.¬¨ûµÅeퟎé\H®“ Öa·ûS»©]ã»YÌ +ÉM˜ +žŒKe­e\—´–Îìo"f.õè&RB(!÷ ±> –á¦.»èÉ1‘“‹8Qyðð»*UšçÉ™ÉL¤ó§&KQÂe™ˆTà¿ ×â0ÚPv>÷áÚê´lYZp“ü˜ú;.\?6›t“}MÉõÑf”.) Cù"_Êè ˆ|ùOJ¯’#†…EYœü|êøÂÇþ7«þ?æ   +^Rú³X€¬ˆ:à±ùf» '·›û‡¶a·®q €R\$¿¦Òp•¸ïð!l¤‡pæv¾p÷ S xì)f:²y®%ßÖ¬Z­6íˆk÷¬}p ]ü}Vò<!9*‹tà#[¹fIL5ÄÔ;·b¬ó°iBêDÆu· ™ŒünÜ’ ¾bçTX^$û[V5^]nO+Ç*5#ò$¸éVÉÈÌ»þñö‡7·‹ŸÉÛ^_4$éI¯Ö´Uëv®ûðÖ\å$9êÊßA@ 6:xi/FÄÅ£o~¾¹¹#¹µÃ4š)tb*8{ŸBsUÐÁ‘íöG‡Œ¬Cé÷)þ!Ϻ—ìpÄ¡jCŽ·âNÙ×7ÊU¶ºƒ~Rq*o”R‘Ch^ÁÇþÕáJKÁ‹’EÆKÍ4‡Y¯œ#|i™sƒG%§<ï‚QÕgã3ÉÝ0¬œoÏá½`çå36Œ€rŒøú'ÿ¦$ÓRÝí—¸kP쉻—lÉ2É:T÷ŽI©y€ˆæÊä ¦/£ê;VL2±7&– +¨’&¥2ÂöDe£Öi/)=”J.Ô5²³†x1PÎH_¶Y³æ´\º¦YŸ¶<â´këŠz¹ߟAr›£¾ôrL@ßLÊÈ;·ÞÔt´" =©ïÃOö]€f…æV$ ºr +zçI³Ý,ÁÙzûáWwÜVö¡¢‘À$çþÁñ$0ª¼(£Py¯ºv+b»]¤BÒ ,¬ÈG’‰]EnöG¶'H礖Ԛ]¥<Ùš(nì•¢ ¸¼­R`³H¢,¹ÿŽi.qxEœÓI¯Xtë´lϬv=hç ä"ýœˆWqé+Œ’mÝú˧¶:¶*JÍ°Ò%Wö¢–R‡#µcý™+À)÷²eÆëÞÔ«ëU W«By.:  gßïûNPõ`nXu éƒXd—Uº¤ANÜ?N›cÈ@,LÐ$ŠfB2 %²æ­X‹Iz©8+ +BDS/0ö‚SPL$5 ›o¡nÀ›$=§Ô‹\ª n@xû,ò¨v°ÑŠÒbˆ;Kå¶Ü-a.„gCx–³+6`ED¬Xên;òÃ&'z¨iŸBJÁ­ô"¥¾¶¾°ôÓ¡Z"æQ‰ÑÔÜ]¾”’ãrS™ÐI•%Èí›kÂ’ÁŸ¹ #¼žîŠJ˜¨˜8!Ÿ XÇ F8í‹‘É(uƒ\´Þ„I¥Tù#ÙM*Ág K_ +R̵—1v稫.xð__¨5R#Õèε_R¤ãêG +‰–&®4ýYÚ_•ÝÇmžà?¶rðB>6ò5 ÷½n$ÉA ‚¾©IµKìpöaΘ.á yÀæl .ÎU ¾œ"hØçdˆbCî@[C 1ToÍ1º°(C71®Xµ¦]â ­GòC©¢w¢ ”'ðÔ÷‡¯êšÎMXQ×.uPƒþë÷Ï»ÐOÛªöâæUôL¸´]$§ÔðÊgåMõ;€Kx¿ÑúfHßÌEß0‰ï‚ÙG5<ÕT©W)Í ,Þé4îRÁæà–›õùz`ÄöQ~øzü´YµÏ𣟀ìDÙ:Zê'h9—–çvÂmýB†¾¨11ói¯ÿïø(Ë'øøU`)Ý‹°âÞæ·Ðü)˜ŽÏàGZÅx8šÑ™‰jVV4iaÛŠ´“²æÓA—Ìõ {½aR)¡1ÓÝÒMµ| 6üj8z`îÃ/? š.F\²bÐcl´ dl“\Sì÷©‡+jùTâ‚*eòz»%ºQõLSˆUè¶qi‰ãÉÿ +Í&°¬ë7 +mD ”rèU¦"ÄïRÔ–F ï²p@Ê©ð~·I;…zÁUv5ë¾åzð–O?6ˆ#ˆóüú³Àï€y7?öä=T/,€úé„Y4dLsùxÂùt®ÛêŸÑ·EøG'„adOé€áHß%mŒ©¦.-’aB~IÂ7„ÿð–Ñ—Àwx|¹¯QÀ%ž¨Žê^tJ)m‹<ˆÁ)~„Ã÷ÕÎM…ÒŒ¶€µO”6³a éìüþ=Ž`÷ ûØØd¥Úÿ%ï ‡R ž +ÄeßxêäþDßTš±+ÙeÓL_#T(É>£fë?“ \-ò1X¢äP¥}CÙ8¯1¬Æl¿öà´£ï1apŒà$ŒÑãNë`#uÚHÈþÛÚo ¬‰o5 +endstream endobj 1154 0 obj <> endobj 1155 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1156 0 obj <>stream +hÞÌXÛrÛ6}×WàlB„¸ û¦*rƭ㺲’N&é#S;å’T}Rÿ²»I”í¤m:Óñ Ió²ØË9»âävòìÅ5'·õDKb¢„¨D‘*Ÿ¬'?,'ÏÎ8ád¹žpA"øƒO KbdÄ"A–ÛIVX¤àÞr5 YE’,?MÞÒ‹ù‰YBfÏfOž«*à Kèî¶Ê¶Û¢¼%çe“Wël•¿-„¥¤[*fR’3®c²|î,ªÞ6?Úþµ +B.˜¢Ø!‹Ý¾)ʼ¶ÆæËI¬RˆH³X&dš¦„©-ÙØ´`FwÏ!h&”÷r‚)‘ö!ÄÜg$µyH zÆcô.dì\|™R±˜ˆˆxÆpi‚Pð|”ŽÂÝWˆQÓsUíܽ›ýª!f†¾ì“Üݯê"Á_º+1»6Üó%„6˜0ô%i}Á +¡/ø):bˆ3Júóè߇Î_ùÚcõüš-€Ô,ÁôGm"Ý€+W€o²æt³q‹âöCS“E^çÀ)§a˜¤ù ëÐBØ a Ô=²ZY /j£=F[mwy°üýÈQÎÒ4FÐ)~$©ì@§íG×wùªXyMš9Ad·F+©K“ýÆtyjÓ´É €žb8*ò>Ç~q“¯àm€ÏΔs%Lm³0­Inz·ßÒ×PEÓ cº·×À"Ãé÷~Ë‘,‚fc½Šðs(—6v™HÜC:{µåA'ÇhlèÓÑÇq¶Y¥/§×Ëùâúâ|6÷ìA;JãEâq{ÎÕŸ_ÏÓ+ÏŒÂBökò®0Ò6f0¸«|›œ1°éŠ~þòêbzÙÆÛ‰½ßbÆ^!l"IÀn½ú-ÝäëOóòæ"ÃJr((ö,€«—x€±1-1vç+XpøñüUÐìNü½˜¾™/¼4È#ûÒ²ÎWM=tˆfÈú±¨áZu‹Ü„£Äû‡@DpÊÝKA,áÔá°MMhЩP2ûèvÞ]Ê&ûìE‘²T»i‚˜Ru hóX” Ùä¦m:yõŽº¦h¶óG8ŠžÃË«]Y7doȪïHëaËvtP¤]Nb×£ PHzÀN¢ée¶íÆqÜãÄHqï‚/aBiÄp¸,8@ ‘é ÔA2⬦Š€è³Ù¾ªò²yž—uÑŠ’i •#Àá*Á ˆÕµÒ’‰Ò &YIü˜HŒ!)å±NÓÙìÕb1¿\>Ÿ_^Ÿ/ßx€J=z"æݲI×¾ê&kò-„°²maÅVYí›NÜÁ‰[8ÁÃ@%pb¾O–ˆuÏY `Œvëçn&¶;G'ê)úÄO»V(c†E6Òã ³‚5ÙÝ!c²ÍSÈè YAZßçd_Ovåæ‡UNŠbõ›Kj¥ÜWÓ5lu‹[Û-Þ±•yÈ …°¦ÿé$`dÞƒ¤³Œ›¡ ·ß–„€v`ß݈{‚é(QCî=Å`”%’Ë᪽ïôf·¿éú¥îû%ק‹~Ä5³ F:Z3š>Fú!e¤lì¬OAðcŸ¼Ý#Ðj?  XE‹µVi Dï£ï\©{•Ð2!$èD‡¨N‡˜‘Ù•(Aúq-DBd½ZžRÐY (ÖVlŠm!ð + 鈠† j ^ͧ?y^Âåï‰ a:…É>}1MvžÆ÷8ýÀP‡~-^^3!HFcl%Ü^«+ÅG…_ Ë°SÔ•€»:ˆ +G©Ëê±ÙfŸ‹m€ d¶ƒLÛärô¸A·mA5°ÃÂ&:l¨¬HIJbƒà¦•å£'Г¶ÅfSdÛ;gœ³$å­Öä6’õû¬Êá‹U ‡œ¯Ikm·o»%(Tå`7Ü£¦Ç¾ãÄÁ¯‡dÒcTä¥Ð WŒ·ÒO úÐç â;Mû‚ædnÀø‹N”§óÏbÛ×Ϊü}^®¾®E?ž mÁvŒýß .àLr’qïšË :Ô¼l*ƒ¿¬dÆ›\ýêWÕíò¹B F| vá*eºÓTQ2ØõˆtzÄ8=Â[=¢P4…ì!ÂÇ…:!ÒMZ͵'DT+DȸË&rL{—-ØhLóéCÜ÷P¢•ºG~·.H®¡úˆàÿJ¹}Ä&„ø£Äýê#5ñ?r²'.ú¨O¥G§(삆¥ƒ-‹#~'[n‚ì R€ÆéSº'=ÓœŒ ÅÇ äG‡Gʲ6z¶˜ÿòj~9ó%ìIïͽýÙÇ +”.¬¡8B<Â9wÜŒ%îý{dSIFJňG4ê—µ_/QqÙtä¦óåä/^˜‹ +endstream endobj 1157 0 obj <> endobj 1158 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1159 0 obj <>stream +hÞÌWÛnÜ6}߯à#ÕDŒHŠùè®í"E¤ö¦EáôA^k7*ÖZ[—¸Û?ê_v†¤nÇI‘( he‰ž¹9âd»xñÃ%'Ûf¡%ÉCR£‰LH],6‹ïW‹çœp²Ú,¸ üÁ7³†d2a‰ «ÛEVX’³Õz³$I$Y=,®è«³s¢˜!ËËgÏÈ›:↺ßÖùímYmÉ˪-êM¾.¢ßW?ÂQÒ¥˜”$æŒkEV§Þb:Øæ£í_ë(æ‚¥´;äbßµeU4ÎØÙj¡Ë4ø¤™Ò„ i­%,5hËyçv/Ág&ÒÙK .î%¸<ĺ0X/SÓ{À¸Bˆp#•GøSÉ”)z "áQ¬à6‹bÁ @”G®Â?WàG–f7õÞ?»éÖ-‰4Ëè/‘{SøçuSF1à¥û +ƒë¼M0\Bè ã…XLÀ‚ B,G¸dÄ%ÃïÑ¿ŸúýÂeÿÕÿñ2—©™Áð'!‰ à©OÀ79ód·ó7åö}Û‹¢) ¤dœ~ˆDÆ$-nX_ÿ¡„3áJXCç>ÑÔ°PgzÒЮ×2ô"Aèå¡jó?£Õ°[ùÝ–Yí»oЂÒL¦h6 ײW´¬Z²+"M7¯òCQŸ,—]›×EþŽúбÎÇúM°¡Nn‡?Hûƒ Åw” ®òÁ½¢Uw»„V `Àdˆ$Ìv•ß—àúíÆ–)“Ê陼7ûîzW|€I°P¤Ìp ¦cë'!(hKa§ÞEÞ·ÇR ¬‹^²p( ¬êý†¬»–àQ +0ešæ\vÐ0ÇÙpÌ9ÓJÁNÇ2[? œ‡‰À“Ðbs'æ¸,â².KŸûäBhEª&Š~Îà4{påKšû,‘Ûr]ï+·ß€_®äå†"nqªu¤¹ó6Á7©&)Gaj!ÂÙW;¼ÌA*€ÈaÄ5Ôi,BýÅæ¡qó0`Êa†L€Ë±lHµ­ÞwEuSTëCd-ÐÆs/eé4©É«¹6¿Ž¸Â,ˆҴ Pwàõ´OroŽ3cÔÈ|.´i ^ÁÞžäwwà-Þ{!4ׂ™BM¦|âQøäÏJ§o‰ªÃõŠ»Ã,¡>MèžXß1»«Ìâ¼40ô6zF¢cð +þ•®N \…{k¨wPÑ“HXµÄÅ–ž‡Å5š´_|o%íÂÛþqåC´grfÖá)¬ô$‡éêC{ÿ¤1^Ò@”ÉœMÀq9Éœûæüâìç·g¯—¿Í*ÇNR3´Lª†4mÞH,dƒŽsº‡sZ÷'gc)t‚ÆÁ|î@ç$¨s°DEJ”fðàŒQw¬ ¬æžhÆ­ú +Wú>åZ|ä +tA]Üwe XbƒŠåR×÷“öûi¦.eà’æÎwªïLHô&\¡; pÞñ”±Ù´Ý½É =ÓǾÆaäÀRƒ7®ò˜v½Ù]1£u îžUS¶‡9aÅÙãñƆ`Õ^+cŸ§Žl Œ¬óŠ\¤k vŽ¦BÌP'OÛÑ»"º.ÐØ8sXr +AŽ>ô·g¯W§g¯/_®æi6ŽêŸˆÕf6£Ø‰HC1úÈ'_¤Z$¬ø¬j9ÇšB.ýºåÜ«…{§À(þŽËÊ%?/ŠY¦ö©—ÍçÀGF6›gOJŸ]Ö|•ŠÑ½ŠBþy5ðïtŒ8þR…¦Þô‡yÅ`P1˜A1˜§”LöˆÙ|9vÞ+ðÇ„Ì®G” 4ßm±Íß»o`lÚþÅ|öøÒ™¼‘=„qÓë—Ìë—Qžö·bº»g”.G°FáA¢€q”20®ÌŽ¿èoÏtËhr.<ðRéãnŽ7ʨæ*FàX9 q,õ2çRéL/_xö{ƒ¸ù„‚ñêE±LÎGý|(1= +r1|Žý#À”Ö ¡ +endstream endobj 1160 0 obj <> endobj 1161 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1162 0 obj <>stream +hÞÌW]“›6}÷¯Ð#JbI àÑq¼t6›Ô˶“IúÀby— † Iü“ú/{¯6àõ6¶31,HWç~œ{.œÜÍ^þtÍÉ]=S’nH¼Pé’J϶³Wñìå'œÄÛÄ…?¸ð0`QHé2Wx7sÁ +s=x§³9s]W’øÛì£s¹º > Éòåòùsò¾¢"™8D^zaï>"ã>b„é[ˆo*=æ;{"\Nç>Üt.x˜…Ã)‡_aŸ+p$ð Ïûª´Ï6mÚªXàüJÍmŸWuFç€×) Œ®q×Åx ¡ b ;,˜!ÄòÅ­$ Ö(9\'ÿž»þà²ÿÆêÿx™I€T,Äð»]\Õ%€{6ÿÊ™‹<·7ëìÉZ×8 %ãÎW*&½a=º„)aÔ=eµD*b›;X®}]»|®·ß.*\8gO9‡R‚bäp\µ ž µ¸Œi“[Ê]˜ëUÑTYÇƵ]Oò†ÄÞYúô÷¸²§z‡–Þ5IHgÊ·¦$ »p„ëÄ‹W—«ÕU¼~³º¦ñçãéã‘ØãÉ>5u“4z§‹†l1ˆÊ))üTpdÚ6$»ð?8ÁE›wÔÃu è øH|¯'è œ\ø|þß#ð EþÔ%*Ô Ð¬†d~i³JoìÉsÀ„¾é›ÁÁDß’•Ûõ¤lKŒÐ=ZR?è4ÛîOB«˜êýb½úåfuµü0 {\ö§ò“¿ I±!iRÛ.dP.°¬ß¬x§m ž•E¾‡ŸT“¬€˜ã²;Ö¢[,—7kˆìëÕÕõ›xŒ1dQt\œÎ€ðzŽÅÛEm 6ܬ8€fÖRÇèµ’‰ãâÀ,¾ÞMòÝ.<à‹” ¼‚÷•Ë¤)xØ'Lz!#Í\Så ÅöºZ,ã䶧<®?9¶Ã0hƒmÞEÝy=3;íʵèš#Mòmâ>:E»[b8`/GRÒíƒ& cóÂÄB&‚`xäö¦lå3Øg¥᱃~OA觀J*%‡>ÑQÌG}ÃL»Am~t0[H`â]‹ùªÇˆ a¢O/Î)†Š&*]‹Ö 7u>{bL¼‰L™]ÚÀFÒïÁÎ-LåÍ@1{Ñ"Ð@:GNö¢MH„ì{l,Ú¸ׄšU- ã¾é4#—Ì؃u;rL‰ªŸtO«ÁÌ6vn—|Ïv[]‹èv¦!&•N&R'é=ÙV–Ð!;¡Ë¹Åó¥ÕEº·ìïm<$Ye*%”gºeÝÚ`@L#Ž™¶ Úž-Ÿs}Ê{¤½º¶½:ÛÈ8ŒibP”Ïò&^¬W‹‘a ú%ï“.Çͦ7§ ®åÉ=ç)Î3È.Ëñ>§Ü1x¸{¨ÉÔUý¥Åø¨‚|˜÷©Í^ֳ@K¥º®ÃŽ ªSäL/í¾•ö© +¿Õ¦ó¢HÌšEe×&æÕ*HàØWiSVOˆ¼„‰^áûùx(ï¸O{;t~")]—¿ŠWWW LÂ4Ëwëq‘»G‘j‘ÑÂSµa†)©™drÿï1&0OÙ—Ô—pa8ôgôÞÿðP™døÈgPÿ‰Á…åÆp(š¬,’ü °†Y UÁWp¨z“d¸“Zø ƒ Šá)ÇõQß¼Ž$[üÖ2|qåŒï89v…ô¶Üè|äz4x&}–Tö‹Îˆÿ”ö8þMio¼\|XC,åp gwD­SŒ##¹™ËÇ4Þšÿ¡TË_é¼ +0+¹Hà1òè¬Ô[µ«=4®¢¡ýŠ +›ä-^ô¸HçÝ–Ç=-‹º!)@¹Oªgd“m·7µ~#ˆñ¸É £söoKr÷µjõø+`Ö£,˜ LyqH*:áålª]Éæs •Ù0îäMöå–J‰ + 1·Šì‰ú {Ø0zç£ÞÁ¸µohAxœEG²*,mvºb¦Iž¶yb +}o´?~ø +Ð +endstream endobj 1163 0 obj <> endobj 1164 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1165 0 obj <>stream +hÞÌXÛnÛF}×Wì#‰T›½p¹ä£ê8E +Ç¥E‘ô–V2 ‰ H*®>©Ù™½ˆ¤,»n“A“âe®çœ†“ÍäåOï9Ù´“TÍ2’d)‘Œ4f²žü¸˜¼|Í '‹õ„ Âàx¦iž-e‚,vV(KàÚb9™RƘ$‹ûÉÇèêò5Q4#//^¼ g4‹êMSìveµ!oªÎ4ëbiâß?ƒ+é\)*%™rÊSE¯œÅäh›÷¶mâ)4‰J°Cæõ¾++ÓZc—‹I*¨N!§”ª”P!ó<'4ÉЖÍÎ&loBÎT$£›P|@Ú›ò± ¹-CNàf’…ì10®0D8‘ÊEø¶ˆeBUt ‚ñxªàTÇSÁ3YD<æðW¯sh¬Î»¦v×VûeGâ”êè—ØÞ1îzÓ–ñâê +‹k³eX.!RõÂX2 6cù+ÆW1MœQr<žü|ìøÌÇþ«ßñc¶2¥–Ÿù°Ô7€'®ßÄçl»u'órs×µdnZ’òèK,4•‘YÑ€a-,„S`nOjuJjx0ÕéˆÐ"·ˆf˜@´*×ë­¹©¶‡xñGÏUNsx Зðž¬"Udöå›Ï]YWÅ–Íf¿3UGº»¢#íg³,×hŽKÊ”rÕ bË'¼’”¦…w Yî›ß/@9ªª ëXË£"†?Ë®nlîÀ¯\­iiïêývEn Ù·fEjÈ…Üß™Š`SÙ;ÙÑÇCEê°!ÔBû¹®V(a[ 9:Ä<‡p4¡iÔ²…«Ê,;’³ç´j]#]mÄ:ï[¨%ïmyÄÕ{Ø10ÂúÖ\¸ºõqà©WÎÜ•<•›ªn 8„0]ò9UZ D×+mðG£0$‹ { R9£1„¹Y|Œ¶&–P”õýU ¸ÅY(ühf®—ö™Yãž-ì­yÑ•1Jh=#Ø*ÐùÜ*±UaéÓÍRízf‡DÔ€!Ñpˆ·å šÀ°yЗôìzqy}=›Í/góÙâÍͨÈP°\õ|çÁmæçi»¢3ìRdh ŠÏ ¸³ÀÁß, ÖÂÞŒ“ 4ÆçÉð0ÊöOàã<ffùù y€ô Nëk*ÕRçoH +àR¹\­È2”3£"x ›€Î¬üE=å–†kœÖ¦XÞ@›Ñô|#¶f}ïQò¶^™ícd÷¾sŸaãRVPûqA–YÿîðW³ß.ç'¬W2t\ë৶[æzž%SiJ¦’ +5ŽÒ¹z¨ºâÏQ)rš§nÏÀ\5€VRx^‰Äñª„ž·³& 8TÌ ¸ Á|ŠÜx¢HFÜ.-¯@ÏëýíÖø¤ +‚§yÀ´rê÷&˹ÝãÁŒË‡)å"ØkD¯HvE_ óÏ3(´G)?œ†Aˆõ—S-ΑD)û&ÖV”¨-jœR£b×8ÐämÝuõfœ)H½&^ø!·¡é<˜Þ4¼¸3ðé¾´Š\xÂŽôò&ªÊÄ‘‰UÝ…ÔòäÖrÕO1|W…À3?ÅNF œ«b»pDÇØ=£ð2gE×Eæì"MÄ£¬qæ@â9Ho€æÅ~çЉU|\Ò%öñDÏ“gëyŸ”ó‹oÏK%,‡ ‚½üŒ¤ ‚ÎFrÎì93r µgEبÕ×Çèçæ7 RhuúѾH¸MÔ‡VÇÝ&ô91õ‹ØHÈñØ™Øx{ +á®ñ˜Ö«o ôa9 {ÍXæ‡ÞpCÎô€ì)¡—'S è]ô +?T¹©ü:qàü> endobj 1167 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1168 0 obj <>stream +hÞìWMoÛF½ëWìq‰D›ýâ’{T»pᤆ­6(’hie³È€¤âú'õ_vf—¤HÆvœ¸)z(Éy3óÞPëÙ«/¹®gF‘„§D§†(N*7ÛÌ~XÎ^"Èr3’pøÁI¤ ³)Ig\’ånÆÁ +ãî-W³9ãœ+²¼½§gÇ'$f)9zuôâ9¯"‘²”–×U¶ÛåÅ59-Wm²•‹~_þ[©°UÌ”"sÁ„‰Éòu°¨{Ûâ`û]Í…dšæ`‡\”û&/\í/g±¶‘a±!L*k-a:EK>6#Ybºç4“zô0AH”1÷ˆXƒ%ðP§]ø虈ÑG¸PqpñM)ÍbzG$Ñ<†Ë$šK‘‚Ï’ŠHÀQ†û)’èá9¯Êpo½_5$2,¡¿Fþ‰ ÷«:æà/- DׇË/)M‚€¡/ië f}ù+Â¥èHB‚QÒŸ':?ñµïcõ?üšO€2,Eøy›nÚðì¹ØnÃÅE~}ÓÔäÂÕz@)&è§H&LQ·f]´%œH_ÂZ÷ó®VØʾ±ý¼nÍ’C[c¿­àÚ±u‘‚vÛÜže‘äXÚ‘Ìbe±Z@?Eæ÷OYœ¦8èÑ~÷:ßl•Ë.²&/£å‡¶?0 z¡†M¿ ­ÕuVpÃ÷}Š]_“¬ -{ÄÁ tt"3‡÷Ÿ.Þ.ß¾]ýòæõéÉÉââxq±Xžþ<öB±Ä–Ûvë¶HÝdÛ¹¢!\Ð2‚CE2²Ú7d -Ïá?àbáäü³Hã{ Z@"Ë7ñbaŠÇžò’~ãøy~Ë1ÏkR~ô‹l ð­ Ú4vÕ{ؽ»‚å+ÀùÊ‘}íÖ¤,VŽdä\—­nHð£ FÆL›)}«C0[·¹m åM¹vÛQ–Åv˜<Ó»‘„(ª@ò$/ñÑÆÀoa!?ìu¶øíøb´šÆˆ)u+Dƒ‘Ó ñ‰‹i¹'õG·Ê7w!W´ÎN‹ª«¬‹æPm‹DÌ }‰ùÖ4X4h0,Ê&œË”‰tóàp¿é02ÅTÚÆæÑ;Ëî\×kÓŽ:w6ŠºÔÚ.ƒ‚¨Å:Û¹)’‰$A¨Ç…šî2Öªs =ÛV]‡mXÔÒ2‡esÅä¡H’Ã>—wE“ý9òÊ2k‚ôâPD¬ yŠÀöÔ!™9Ô7°”¡÷Á„·{¤>Ð@ÜŒã zr”s€x]$¦#)ŒíÂŒC]¾Îšm÷xrã¦ÆȆÀÓÑ‚ÛikÚYêPõïé&¤Ûë=¶mÝÚo=Å—mé°PÉôxâF›xx>Qê0èØ— “VmI+ûÒ—dT‹Õ²Úï¢hÁa 8‚ì€^ ÓLeíÐ1šñtÐ1ý@’³©À¤Y”ÍáÂ7MJgp>Ä ¯Ê¦)w$ƒ´µ­A¢ê}¥åÆ/Ù¹˜í6¯üÍ<ßaÜsÔÇ–fÔ4%ÊUYP´ÀsMéÍáÚdÌŽº…VÜ×Ђà2 dë8-kö°Ô*›2£Û +´Y+´I/´) + +(´æ ´øÎÑÞï]!å`þðÍD'äp»}XqUÂÑ­Eq§,xÅO]%½èÎ5NO‘]|ÿ>Õ\Åçåð,çûyï1¹]y½õÍ{ÞÊ ·#¹ÅÀu*¾"ö{L‘á#Ä“íÿ’ü=$ù@"_çqÙ@¥ÚøRép}TŸ¿×i×eÁÔóTY¨oe`¨u­ŒDrÉýîcQ.ö»säÛm§—Ó¶«–{O¿Fú×h’‹'¤~<õt³vñs7«üœÑàw?-ëé a{¾> endobj 1170 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1171 0 obj <>stream +hÞìW]oÛ6}÷¯à#…V¬ø!JzôšdÈvk¬Ò=(6•h°¥@’›å'í_î^’’%µMdö00õÅËËÃ{Î!9¹Y¼ùñ'7íBK’D)Q©&2"Y‹Ö‹7gœp².\~Ðð4aYJ±Hõ~A)x¶Þ,BE‘$ëûŽ8=#1KÉÛ7o_½"—MÀS–Òú¦É÷û²º!çUgš"ߘà·õO0”tCÅLJrÆuLÖ'.¢bócìMrÁ-!YÕ‡®¬Lkƒ®Z°DÃœ4‹5aBfYF˜J1–°} sfBM^$ø´/aÊ ™…!#ðR¥ýì11cŠp!c—á»<ŠÅôˆˆa —I +žBÊ‚ò€Ã¿pÏ3˜G¢D粩ݳíaÓ‘@³„þØ7Æ=oÚ2!_ZW®m„p ¡Ä sI}.¸@˜ËŸvÅDâ‚’¡Ý~«}âgÿLÔÿðgv¤f)Âùˆ´_®Üü-c.w;w±*on»–¬Lk€R2N?"a’š-ëëß—p"l k`î‘ÔzNjøP'zFhœC„ùÓ&ïʺ Ö¿YÊY–ÅXwŠ[šF}Éyò¸3›²(MKº[Cš ¥yÀ)„!jlov`«ˆ(óüï¥F¢¾ØÄìæÊ¡5ææ1õ‰]Ñ $£¸¿È!ËèCü’È$Ë$¦ªrûÍIY@›Ñ^)ºlŒ{¼r d6•¡ 8qÆqtKôžç.+B)JPKòŠø±‹üt¢AÆâ#¤Ë÷ëÓ÷ï—'çggËÕérµ\Ÿÿ<õÍú’òœ&m—wfoªŽ¸øœÖü5$'›CGv€G ÷PÐ +æÞ±€;Bwd K3Í8ä ‰Q<×_ùÜÄG³æ©q¾eKê;¼Êw€Ù–`wè¥u<0Èwڤ׆Z³%uµ1$/PëM¾¹%nÐ>o!±B0íÄ—#tß™âÞ—À»zkv“<3ÓtœµW‰K¸qŽBÊ +0Œjê:FG\.–¿ž®&ÈùÊ㢙 Nœ‘ó‚@©B´>Ö’åÁ­c/üÑû2·òÝ-è“ xÌ4}멨‹¨1"WÕ Š”ñt¼¦.ãaÔñÔ$“é£[ /òÓ +¸T ƒV( —/¦1>AVõÚà@QÚ|oæ¸&â™À»!|™y„]¯)¡ä 6’‰cM'Ç!>É­mꪂjméjÛ{…|•¤ßuú*óÜÂ2Z¨3²-AY†ÙŒL*122>7²x02mÌÚX:¶±ØÛ˜¶6–ô6;‹ÂËûÝ#N&q…^îdêqCøB$K¾ffOö28m —¡´(ø.PÉwœ,eòK'‹_–¸˜ržâjÉÜú«çù[Ì”žUåÈ•ÿwºÃ馥‘U)ö¥£3*)qÓ¥he7œƒåá9NÑYµ>Ïù&ò*åcÆ'ø—Ÿà +Œ/â϶>àÒ7Ý{O¬V5²O­¯:ì/Ñöîw-6¯g÷½F‘‡ Ÿc°[Œ ÙcƒªŽmÕÎó_:XcݼÃc<­Û¹g +ß÷sþR?W™­"‹2"üuOSáø93tr ÚUVø"¦²c±þ‰!,7 mºv!žÎð„x—— ž ­¾ûãì_ I­]° +endstream endobj 1172 0 obj <> endobj 1173 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1174 0 obj <>stream +hÞÌXms›Fþ®_qÁ‰.ÜÜA¿©¶ÒqÇq2¶&iÆé"!™/‰õ“ú/»{wH²\§Ig2™1 `÷ÙÝgŸ]ÂÈfòê·kF6ÍD +¢‚˜„±$" u6YO~]L^½f„‘ÅzÂ8 àX¬h%p²¸›`…!ü¶XN¦4A_'7ÞÅü5‰hLN_¾xAÞÕ>‹iìU›:½»ËË 9/Û¬^§ËÌÿsñ;¸ÆUD… SF™ŒÈâÌX w¶ÙÞö‡ÚŸ2NC/;äªêÚ¼Ìml¾˜DaIIB¹H’„Ð0FK:6É©’ý}šòй9Á”}bÞe$ÑyHÜ ã>|DÆ"Ä'"2ߤ¾iäm ˜?àTùSÎbÀÌ=æ3ø+Ìï¢B…éyWWæ·U·l‰/©òÞûúNf~¯›ÜŸ^¯*1»:ÜóŹT˜0Ä[,X!Äò·¯"EŒQ²;Ž.ŸùØÿcõ'~L@Hcú[€@Ú°Ðà‡øœ…9¹Ê7·mC®²&ƒ‚2ï‹Ï^¶¢}X ++®),¡u÷]-Ç] J%G­`Þ*_¯»&¯ÊÆ_üµïUFx +Ȳ}³²¾Y™eßõ}¶Ì×yÖö6#;S0‡4ñRþ´.ÃKjåÀbœZœ2Kohì®:móêiLAß â14µæÄé †;(½ +T>1}I‹TDæ̆kqÝxEæ *½õ׋,AͶ>ô=Ã.†‹zÚW–©~æMµ2®:Õ‰B-»àIg¶×ãL+aŒ:Ø´$ÖLdÌ€A"WKMöf—‹ùååìÍÛ³ù…“CEY9lÖ$nÚ´Íî²²%k_€‚z•Á”,»–Ž4C¦ïù€[A"ñi²€„»à ‘!·ž¾ ס!å Áç§ìp€ðž“<ÖïU÷Pð2- ]+²„œ}ÎH§yÄ`®EÃ|‰¾•ÇlEîª:òÀ[U¹ÌH^B Ô>ª€îcê“}1û8¿r"/ÜzáÜÆ•-!5/XN¹ €› +Ê÷±©½ëmÙ¦–„&ÒÌ,<Á±”Ür–k6Üx9$(k»Íz~"5‹OžÑ8Š ÇAàä;ƒ·– -YÂk·i}BÜÆU0‘xÒ,2’xãU0¾¼|•¹D€ˆdÄIó>ùNìN7„(»nèMÏ`Å>y› Ѹp-!†G»¨ÇЋNìq +†ÁGëÝ`7q¦QU{ðQÛÀ°rj(ÁJ ZÀ 1îT}–Ë`Î4™4M&QNBˆ¸ö#Wö ¸"ótykýXn7;áÛ±¼2|¾‡mêÀ üѽ,u/Kœ¯M½§\R©tRŒ@kÃÑ@ +µBâ:Ô‘F»Û*:ªgéÁ>– ¼Ämu•.¼ÓlLÏŠÀŠ>I×VØ´x-aƦ8s”`ÌÑSy §'Np1ÔÒž-,áÝËWÂGòÅlÖ>a†T°;2då^mqÊàxéo¥(҃NjŽN¾ú8‡Hn9ŠÍÆ:Ôï³Zô»²Í ¢‹Ûû°|¨Ç‚Ψøžqó¨Zï“DmC†½ & 2n¶˜pï=WâdJ ž>‡–QÌûŵ nò±Æ·QQàéíÚ{ûÇùÙœ¹‚N£áˆÒ½YŠäÐ6¿ÝHX#+r˜õ3L˜ö’TõhbQÅ&–6º(”(”R!¬” +fÔ÷²jý³+ÆÉ…† +žL®3oŸ“ÝÝ'Üv³å.qgŒ‹?eÚŒT´-XoFþ²«kà`±%Mw_ÁÒ¢V´°t£êõ†’=ŽæHíè~ˆ>JpÛu ª'’èÉòý+·¦öK+ãòp¶q£®6¤­ª¢!÷iÝèñ»ý!ví«LûbeòMiÖ¦ì®oâãk5`Ò„è]o)Î8)2»Tã`IŒ”ÃC=«kû³¾¾¾O—y¹yb§†õü/?r«¾ºš}¼~7;=¿üí§ÙªŸ‡é·êÝ—OŽnÕøv2à¦N´áE×è•úéÈÓ8Fqt…vX'Ä“+t€F¿kƒfÀNÁwì<ºC·–…Çvhý’ñ&{Í +ƒD¬ÍET†ÅŒâ!ݺh,Õ Žá°µ¡= ù¡ÛUÕ}.2×sH9“‡ û½¯§ÌÚÞÞŽ_9Nh(„ú¯Ž—è±k¯ñ€YÄ㮟w+cÄbç³á¥öŒk“¡ë=ºçæ¼ìîfèuÛÓ®=XU¨½Ãº‡â¨ó×»!ÅØyº÷Š‡ÝçÌó ++ó ûo5“ø çè;-¤1âÐÿ0r`1µžÂq„%¦aÌ’Ão·ùbòbõ« +endstream endobj 1175 0 obj <> endobj 1176 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1177 0 obj <>stream +hÞÌXËŽã6Ýû+¸”[$õò"‹JM%èA§§Ñe$Ò³PÙ´K[ª‘äT<49ç’ÔÓvMu@P€­²$ò>Î=÷\ +¶[¼ýî^°]³HKÃŒEYÂTÈj½Ø.¾Y-Þ~+˜`«íBHâ_"Kù2c© +y(Ùê°± +#ü¶Z/†¡b«çÅÏÞû»oYÌ3vûöö«¯ØÇÚϼjWç‡CQîØ»²Õõ6_kÿŸ«¿c+e·Š¹R,\$1[ýÍ®õk‹aík?’G^uاêØ¥nÌbw«E"yšÀ§„Ç ãR-—KÆ£ŒÖ2Þ‡ÍMøÌe4¹‰ÐÊÜ„Ë}@–& K†›QÖyO†‰˜LÄ…Š­…ß羊xì˜ …ĸLý@Š &KOøŸÊþŽÛ"RŠÎǺ²¿mŽë–ù O½|sGÛßë¦ðØëU%×xR¸¤LRŠÙ’9[(AdË}z• I™]”õß³¯}¿ò±?gÕ¿ðc&*á…?t —Ùü!{Þì÷öâS±{löI7% Þ/¾L¹òô†wøwN¥p‚Ê}¡¨ñ`’&£‚z/BëÁ ÊW¡Övǃ.ÛÆ•lbeW¯D¦\½}Uînê:?ù« å-ør`#Ù—·ìÊ[f´›÷§¶¨Ê|ÏòÚîÇÚǼeE¹)Ö9­SÂ8âÝ/`ﵺ±¯´šýRäl—ìØhfMqf‹Êß-÷ÎzÜcqg±²…Æ­_'kð$ž¬à±ïgGé‘[[8Yû)*„âëÔø"Â÷öü¨kͦ¡ÎLœ¿Ôæ¯/Ûì™—Àì=PnçJNÉ»="ÛcÀ:ñÈ¥žšeb ay¹™†|'GÆX{§Qê- +\pfQBö4VöEl(p'nÍ}|ìÚþüôJ4W”ëýqS˜¸ 85Ô¥0 zè=U©¦¶ÊÐ@ðo9â¨â3Ó?\7]ˆÎôĚλ÷ƒú¤×ÅöÔeÓ¥)â*;ß œm0Z_u]ÆõXÖš~¡Q*QíñúZu»²ªÉ}øÞŸ8¸"=/jk *êÇbÓ>^)lwu©ÜÖ2sö^©ìÆD§0Uk öÙå/㉼7ÙEfp¶Â[TFè­‰­£(ižò5 Ò )¸ëèãç=6©Êý‰åOOøD•.vn¯iðDÏ,‘egßA·ð♢@¢H,y_¬ŒN´ì|A†Õ„ÓÈÓyÛ¡®ª™þ÷ëµÕ¬Üé…ž¢þb.–#ZŒ; ¬(ï;ŽÉð_Â!&²-™=•%•ãö˜TÜ‹vù/ž%#0å½ÍçëÛ‰U¢Þý]z³ÓAµ ˆzM/U¹OÆ÷;™çÂ1õŽvQNeeSl´¡–ŽÖ35À‘´Þ ÉñÍ}…ÏYš‰Þzæøнòx¸¹ÈÆóª3n§ü¸à>VzîªíY/LÓ‹@»Ú¢3°ÇD/txØ ™màr;Ý$ãÑd91ØS^Ô {‚jF È ƒYp:hà%ýQ|ÓWûx‰Ñì;i7nSü‡,ë@¾Ga¦Ÿ<‹aÚ<=ÈÙ áÇ#OG1Òb˜mT†}×¥–ëRpÝs"ʱ¿¥MÊ湤kG0n ÒÔ’"íêב1þ6lXù1¥›^tRjÆ1Þ8ýヲ|$EÚE0ËZŠ’š%õCe/3×7‘Š3îïà–vpÛ ¬ ¬aŠF-%óšÖjËIЖv_jb"1®ÉËíæ‡HÅXavSx’EgSZ¸€‹öÙ³êò‚¼ü Fý¢&LP1Cæ&3B3ÿLšÀ»Ì}öY£Ÿrrª¯Õ¶­««P[µË D÷Vñ¼ŠºIX¸….ãÁ—æ +ì‘ÁF¶)š6/ך™Ž-ѱ–L& ^ͦŽkÅ4ŽÍr(ÌI„Ç$8É/&ƒaK³#QuX¢´ñIIØiO‡Öw[v‚c^utúêD¨UÀ¬ðömñ´?‡lÆÁ ®+š7†^_ÚäwzÌšaƒd%©Ç#ˆÞQÄ{:§ŒÞ¾nv9ÈiPM`ˆé¤îlD£ +(¸!‰QÕLó=Íçêà’*zUð.ªƒ—åÑXò¬ò ð£éæA·Ï>Ê"õ4Tô¸Ñ¥£ÞdæÙtðª;}P4ušs•(&c”XD=ö°pò²?€Øk§ÄÛ>¿Ï©ZSTÒ4ÚÿÔ·Nú4¢„&ô29è’¶³›\š`ÑÒÛœÎUhdh1"¹f9Ü.Î5óýÇ›Ûw¾›¤ âòÒ9EGˆ šV›Ahë+R†•9¬ÁBË}¯ Ci{Ó²AIÞæt.41ŽNjäÙDmmÜk +áI÷+wwåfŠ…1b0ºeq#÷5J[çëG§õô4žRtP2|Dp§£¼U_¼Îr92Úôï+1íǜ鱊›G† b©ú‘6¯’—ý¡Àô¼Áò–=l@Gß°ƒiˆÐ© bóY'Œ†á¡wËzÿþ槻O³¥©Æs³eg¶^“©n$reBÒ$¡"F²ã™Äw¨;•mþëĬ%_&ö¤š.zˆ®†Ê’&§4²bÚ·e5ÁÄgÏžlòÐNq2¤ónˆ³Mu|ØÏ(I˜Øþì5~xXŽ¾Š¾&û¡3NÂñ¹š<-z·ZüO€d`¿ +endstream endobj 1178 0 obj <> endobj 1179 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1180 0 obj <>stream +hÞÌXÝnÛ6¾÷SðRBcV$EJÚçºE‹´5­[ÑîBµeW­-²Ü,O²gØ[î’ú¡’¬Ý€!€$Sâù?ßùFÖ£§/®YïFJ(ˆI+"Rç£Õèçtôô9#Œ¤«ã$€?¸±8¢IL"Ѐ“t; +@ + BXK£1 ‚@ôvôÁ»œ='’Ædútúä ™×>‹iìUë:Ûn‹rM^–M^¯²Eîÿž¾U¨’T2f”)IÒgFbØÉf½ì_kÌ8 ½ä«jße¾ÓÂféH† x¤¨T„r‘$ ¡aŒ’´oŠÓHµïÁiÊCç=ÄC"ôKð¹‹H¢ãxÆ­ûh“h#<iL|ù"¤Ò»#<`þXÂcä9‹Áfî1ŸÁU˜uŽDa„á™×•Y[î ñ¼w¾~“›õzWøc°×«JŒ®v7Àxq®" Ú[[0ChË_>nEC"b„’î~ðóÜý‘Ÿý7RÿÇŸéEc `(›šü+:'›y¸*ÖŸ›¹Êw9ô€”yß|QáåKÚ6€-áˆëVк÷t5|¨"5èèqçE`<˜@ÿ +h¶õ~›—ÍÎö¬2‚ yÛ°ˆ7z»›lî§_úîf4I$–kÈ»îæmµ&FÕõM¾(VE¾#ÍçœV[š&öö>\¶ÄÊ%ÙfSi;Tw,ûè‹.„…¢[ÜѦÞ’|Ê›ne,  yI¾YìÁ1&¼ R” yQW¥]¡ÄºÜÆN êðé'ˆ L8U1BÔVç~½MîcðV·—™ÏDŸA(P?\ëé¾¹F§ü4•ëÉò ÀbÙ¸ÀèdK*i³5nUÑy52ƈ‹;’•­áÒˆLb6V=¶j3½É³W“éìM:ý%½v²Q–H§ºuQɱÈÊ€¨^åÃ¥&ÙJÜnv½²ëùdúòÍ GOHùÀ2ÑÖÅÃú sd€Àom‚9Õïü0‚õñk’B9¹–94ž6‘5ï‘aÐQŽì*v¤ºiŠªÌ6”¼‡ŽQTyÕž, ;(ë¶\vÍbuGªrƒ—œT+]û+ìjë&;Cÿn±ö;•;ã‘v$‡ƒ“·ÀcíÚ LJÛ>?ã›lÇnÄrt9y?»rB z÷M“_¸b¨”GÅuo@£¾®øij`–7¹šMÐŃÒd]뇺@ZU»8*«Ì¸;Ÿ\M./g—oßÍ®.'sGŒà¶mŒ%Ô¼fm!%4 !þ‚ò>ü‘þòú®l²?#àce˜> ™€/¸E®Ã%È¡4nÜåLh„€e =3‚hÈ€< @bòl¤w¥ª U$ª•4ðþÁ䛥ðöª÷H¡”ú|ò€}$‘L†º:›½eµÿ´É]½ÐÕL%Gz—¨´Ø5xËÊŽvõØo*Oh(DtZùc=†æY Ö¯®JL£ñ£ïäØà0аo¸•üSá?=%Ùù^~k†dµQ‘5fÌôD‘,¤ÊûŽÚY0S"°p¯ÜÛ~ˆøѦ+ö @榷ڑùg^€”ƒ6ÃÖ>ÂîxIÕC­/Ž'w눴ä;”÷tý‘9áY&5Ô­¦1ðy<³µI´eu¬køÁ,öG™ðÛiŽ‚Ó#wÈ ¤ó€œà +u ml5ªMö^cõ}”u@j(ìÙjËc¸mïsÛg¿Mgóôzòz6ñf–@k’ ­õÛSù +| f9gšÄÁ(d^½ÄÁ›g­ÜŽ4J^âÜ,3‘óÁH´H£!¶GIT¸¡‚ÛÝ­•ëU Ä€wÆ;(b&ßÏ tP;3¸íC‚œ ™ü(!ÂH–ÔDY5$»¹Z  B"g„‚Àb …& X €#’Ü¡ìM×P±7ÙÆp.’“]ùƒdY>2uçÊGÞ>À’í†#~ xzü=üŽÖ"ìŽÖ È5.ggÉñ?à© CŽ'xë±gÀ‘~LgéèoóüíK +endstream endobj 1181 0 obj <> endobj 1182 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1183 0 obj <>stream +hÞÌWÛnÛF}×Wì#· ×{áî’}S%Hà&†Ì¦’>°2%«•H—¤êú“ú—Ù%iR’]¥h€Hó2—3gÎ YO.Þ\ ²®'FËcņ(Nª|²š|—N.^ "HºšI8üÁAÄ–%1±Š3.Iº›p°Âx×Òå$dœsEÒûÉçàrþšh“ÙÅìÅ rUQ³8(×U¶ÛmŠ5y[4yµÊ–9ý)}®”w¥™R$LMÒWÞbÔÛ¶¬h($‹‚ Ø!‹rßlŠ¼vÆæéÄHf äd˜6„I•$ aQŒ¶\v.awrf2ÝHðånBÊ= ‰ƒ!!p3Š»ì10¡1D8QÚGø}FUÄtð@$4Ôpji(E !Ë@P¿Ê_‡ƒ°‘Et®ªÒ_»Ù/B ³ÁGêîäþzUohñeàºl9Â%¥±ˆÆ·±`0–?)¾ŠXâ’þxðïSÇ3ûo¬þsP†Å?o ÀM[ùü+>§Û­?YlÖ·MMyC (ÅDð;•–© ¿aÿ[ +[é(l sŸijxÐX3hè°Ï‚û ¦Ð¾ +zm½ßåES·-k¼!  ìú¥@á‹ÁrßL«<£é/Í-X’h¤k$š[CœÎ×õ]¾Ü¬6yMšÛœ€’F¦šh)¼æBÀ˜¸öÀ‡-ã1Ó©Ðý¦¹%YáLü·}¶%MIÊŠ¬©àÐW€ 6dž5Þ dF š.ºÄÛ©inÁ^s»©I6¢`ï^5 ÊÍÒ2²Mk÷3¼[A› +Rs¯„ +p‹j/JxÝÜlšMY@¼õ]¶ÁdÄCÙUO¡»º3¨¡¥°XÂ^Úêms +Ï«ûËŒJ6¹èüõ]>òf%ȼp‘±[ øÿ•¹¿I5¢Ë@—¤Àøqp¡TÌFúäH<!•±!rœF l.ï<áˆz#¡bR·!<E“ýál#MXbü|Ä‘ÀG%[BJñç`΀Ʊñ!ïé‡Ì+à2ò®„S8~ ¾ÐŒ§I©˜Ó:á‰wâ¯ZÂc‹å…Ÿ¢bÄx ŒŸ7ÏÐ9¢ãò!|ð¢cñpûÈ¥'i$†UéZDž¤-ˆ(Ä1™Ä-ȉÜQZ¦ãAÑ\øvÀî3ʧ´üšò!Œ&8«f +e¶«™ƒš™¾fÖË”p2eGEÓP´Ó=SGë¶kw}׺þ µÉ/”'ÕI‰ÄåôÓAÇ©Š$þ‰" ¥Íþ,õ|âKu£B-?Ð#§F¨E^—Ô)‚Ê)uHÙ§ nÈŸ柄PÖDG!ogî£0}¢"@€Í{²„A\»má”ÅrR®H;Ë 3] -ƒÑ$PÈÎÊv[úµâž¢eü2ñá91ÓbŠûüp"w0ÍÛÉüíX,‹c}>UX»µ/ÇfBX+DÄŽe?˜¾z7EµŸý^Lo¬~Þ,Ó£!LóéAù¢Þ‚è‡jä×’—¸:ì fåQ²WÓÅôòr~ùáã|q9½:˜I±<ñpâ@gÃ:}B¼ÎÒ-‘ÀØ9[¶à_¸ŒÃÆïòÈS÷AÅñ ï¼»,‹º!Kxê6«¾!ãÝ×——Lº|´Ÿƒ"ƒÏ´`—ËC‘¦#”‡ÿ%æâÇC·}ì.tŸ°é Ä]Êc—ÀÚ%:ýõÈ¥n7¨Ï£=r(’Bi‘L¼¯ZÿÝÞ ùcî§WÑ÷÷ãÊvjó¯s@þ¦]›”_›”[›hz Ðâ*è¿yþ`ª‡Ø +endstream endobj 1184 0 obj <> endobj 1185 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1186 0 obj <>stream +hÞÌXÛrãD}÷WÌãЬæ"OÞ`(“¤ÁÖÖ.Š=NŽ”²eB>‰¿¤{F·Qœ]S,UTª<Š$÷õôénsr;{õæš“Ûý,‘DG)QiBdDvf¶™½Îg¯¾ã„“|3ã‚DðO5ËR¢eÄ"AòûYRX¤à^¾š…,Š"IòÇÙ{º\|Gb–’³Wg_~I.wOYJëÛ]q_V·ä‡ª1»M±2Á¯ù J:U1“’„œñ$&ù·N¢êeóAöÛ]rÁ-A¹ªMY™½¶Èg±ÊÀ£„Å aBfYF˜JQ’õ-L'Ýspš å=‡˜`H¤}>÷Él2UÚ¹–ñm„ ;*©XLŸˆˆxÆp©ƒPðl”>¥»¯À­4†çrW»{ëê!AÂ4ý%°OŒ»¿Û—AöÒºÂèZw#Œ—‰Æ€¡-ik fmù+À¯¢!š8¡¤?'ÿ¾tžøÚ#õüšM€LXŠáÚDI›®\>‹Îùvë.®ÊÛ»fO®ÌÞ@ HÉ8ý#šIjÖ¬+€ÂZX'PºCU'Óª†xmñ¡ùt߫߃ü·¡H9˲Q§øP¥¼«R‘Ù¯]<4e][Rìn÷¦jHY­ËUÑ`õ7(K&Rµ°…k[ç©‹Û]Ñ}qoÂÊ4du§öÍcÀ9R Y—Ö[¬(îÄDòµ°Ù²Cí[¨HNŸA1q¨$²**rcúˆ˜þî…Š®]^C3àd£®¶z…j‹«ÜæÎ ú)€ð׺àúO¼Q¬ší)¶åmeÖߺ鬎{ßEÜ|gvåìÃÿ +%;¿ïƒn,mìrW8…÷cï“–Iûô¥u˜TÙ(¡ ñú¡XA¼¬& ßÒ‘t®ŠÆ7Æ_Qc*4îžµ‘o•ŽGÄÝ#©¼~0«róDœÂØ)”,ŽãQâhäÙÃ’‘1–V)ija¬!ÂÍ]¹ï¡ÅZÁ]¿’ؤ,¸íà;Î"¦Þm‹j {O·fó¸,ž¤žÐ9 'ø‘ÐÝY§K¬¯”íƒb»5[¿oyÅCƒÉl°½¡k N¡m\)¶-°¿ËY‘Ì‹ˆ Þåüj¾\.–¿,®–óK/HÙ#Þ*@@7ÆVÜ&P(ˆögª4ãY¯ 3t9?ûáü'\11Z_ß=«ùz€†@sºb®à˜+98Œ{ÄHX #™Q’À}»B¡˜Tñt§…#µÌ4Á0^8N™ è©[†B S*îå™s‘‘wWøú`ébß⸮¶øaHmË ñ­>¶[ˆ0…ZÁùèÎ L@JMóÀA{óöäÈìJXÂQ¤H[‡@¿ö+KõÄ:‚ÑrþnqåEK Ñb­l OÒ´Dçßþ8?[œçg?çמ,ÀÓˆËåI²®ó‰=jlÍ#J¨w¾δäd\¤ÜÓÍ<ÂeÌ8'!4¤rÚ¾xýT5ÅŸž Ë7â΂Ð<¥jÙEØqö$ùåɌ٤ØÁmK"臠ÅÿËÜ¥`ÀHÒV3ª>4o­°àYíŸ"ÔC ½Rjù™,©Q5Ž§Ý©àœs_ê5.dLoas‡Õnà¨NÝ|`©R·ðì}úÅ°yµËžMØ‘=oØÞ…DÖ5·­•@ƒ8Û‚˜³ÃI×C ŽÑ/í—o17—í—]‰‹¶Ä±˜'8"4$ƒ†Ýú¶Ÿ zý?ùM¡›4Švÿ‡ÒSX¡Cè$åzôÛÉß æàc +endstream endobj 1187 0 obj <> endobj 1188 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1189 0 obj <>stream +hÞÌXÛnÛF}×Wì#™D›½qI>º¶¤HƒÀVNy%± H•¤’ú“ú—Ù]Šɱ´@a@¤ÈÕì\Î93kN6³—¯o8Ù43-IÌ¢M$#µ™­g¿,g/_qÂÉr=ã‚0øƒ Obš&$–Œ2A–»+”)x¶\Íæ”1&Éòûì6x»xE"šË——ÏŸ“÷uÈšÕ¦Îv»¼Ü7ekêu¶2áïË_a+鶊¨”dÎ)×Y^9‹êh›÷¶?Õᜠª‚ìëêÐæ¥i¬±År¦5Ĥi¤ 2MSBU‚¶lt6`ûb¦B^BJp´/!äcBR›†”ÀK•tÑ£cÞ‚`C«®Ççz0 [¶ k×…E0HÈÃíW0hQ fewœ:¬³1׃œ¸C9y*Øy¦ˆ¹ü°¼¸^\ŒÒ²4¨BW†XÄgÚ¬ä–p>5Z‘:‚$– s×iq¢! ÑBt?çÝPuâXž8ͳ†a¦Ù;’#£l槌šÃჟ¶ä.j%ü9!#pNQà{†|•!ÕúdªQú‰”ú®dpÐSB šÄc|2ÅP®úYd><¿)–ŒQŽG‰È/¢à8p<4LŒ¼œ ¨ßÉÿŽ~~XIsR4(êdÐp?´sFäóþÄñ‚Ã1@*ǦG KÌ‡Æ +û‹Qkd©>iêåaw‰ ÌáL6SáÄD*¢D*nýTñ žÌ3ÐH¸”'^¬~èB4‚†ãÅb9ûG€‡Ô[ +endstream endobj 1190 0 obj <> endobj 1191 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1192 0 obj <>stream +hÞÌWËnÛFÝë+fI&æ„ó&—Ž¬)Ü4°™AÒMlé’T}Rÿ²÷Δ(ɆMQ_Ã;ç¾Î¹dänöæ§kFîÚ™ÄÄ ‘‰&"&-go³Ù›wŒ0’-gŒ“~p`‰¡iBŒˆiÌI¶žÅ`…ÆîeÅ,¢q ’=ξ—‹wDÑ„ÌßÌ_¿&›%4 ê»&_¯Ëꎼ¯:Û,ó†d?ÃVÂo¥¨$b”iE² oQŽ¶ÙÎöïM1NeP‚rUoº²²­3¶ÈfJ¦à‘¦JÊEš¦„Ê-9ß4§FÏÁiÊåä9ÄC"ÜCðyŒHêâx(“Á}DÆb„¡<Ä_òPHª‚-á1 #§&Œ8K3XÈà_øû1Ò`x>6µ¿w»):jj‚ßB÷ÄúûM[†à ê +£ëÜ1^œkƒC,I3„XþñUbˆ7JÆãÁåSÇ.û1VÿÇË\„¦ †?îë>Lúü+{ž¯Vþ䪼»ïZre[ = eÁ·*{K‡èKØpWÂZ÷™®†…Ú轎ŽF/bïÁ9ô¯€f»Û¬mÕµ}Ïjo + ‹\àz!¨6ëù¦Ë›·aöç®ÃMa”¬äc‡û7®lQ.KÛ’îÞxÿ:ßM©Ö>º;>ÀãÁÕKRl:‚[ˆ„¤:ÈCø[m€^Ò)àˆ1ª•:€-Gƒâ¥Àå$Ó«©#,4Äb*¥Úó#y­¯ž!x¬ µ4 zXpFJ§Â§¤ýkF.ÝâÆ’uÿ¸@ +‘úþåÁÿ!óIÜ%ßAþ01ÈÿÑ­>õ+»|¼ÌC–‚Ím‘HF Éèbž…&6ÊoBðNÁÚEÕ5¥m§¤>©4Å]™E}Ô\$Ó~3Çê‰gõ–䤷£¼AsX>aÙùÛËÅâCvõ~q=Iš¡,ÝÅ\Š¡#Û.ï,Ö2Ybïè ÆŠi`KÌÙ +Ø;†ë-º­Á_|JãJ)BÕ!¤wŠbÉø~~Õ¾ð@RuèåúhÙBÿµ){ëwŽ£IÔž\öYŒÑEå’lCCÔ ;,ØÖéö(¾zŒo¼ƒ>ÿ”_-Î'°å$ªNó}ø.1Ÿ‘¼º%E^‘{Ôã‹hB¸±!Ø´à\]­¶ðWXRVÄ÷δ0=ÜØ㼘Ï?]AŒ/®ßgŸ'x׺;Ïg4)¾¥™Mºø£ Ôb#Õ Êw£‰ñĵ­ºüû't‹öÞ༠`´Œ»Ì/½œ¤\9~;˜8èøa0QAðéf‡©2¯ƒ uyÄ‘ן–AÉÕ‘Œ<Pžøêh¾`Në+©º²®ò•Oîr¬áËÈÏYA¯GNkÖ5”Gwwž˜Ÿ±Ã]Q—çŸWwøNgNU#im0§…_°Å)añÛ¼D]dOˆK?¸Ác±>}e>%(_‚¢®ÚŽ°þ>o^»LžûªFJ/òÎ1{]M+AQÎtz¬-H^:ôÚ2Õ6¹ghow·ù7ëd2x‡Gv!ÑF€Ó8‘â‡@àÿ-„Gû[—‚ûÃy™«ôXYáóðb™ª +endstream endobj 1193 0 obj <> endobj 1194 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1195 0 obj <>stream +hÞäXÛ’ÛD}÷WLñ$A<Ñ\4#ÁÓ&µ°Ô®IŠJxÐÚ²-°¥E’³ìoðü%Ý3£ËÈNBŠ{Q[%i%¹ïçt·ÙÎ~Ãȶ™)At”™(""Rç³ÍìÉröø3FYnfŒ“þàÄMÓ„hш“åaI¸·\Íæ4Š"A–÷³—Áåâ3Ó„<}üô£È7uȚն·¢Ü’ge›×›l•‡ß/¿UªŠ©dÎ(S1Y~j%Ê^6d¿¨Ã9ãTÈ!×Õ±-ʼ1ÂË™âT+ðIÑXÊEš¦„ÊeïŒÃæ!øL¹ôBHða‚Ë}@R†”ÀC™tÞ£a,FáBÄÖ¯²PH„G,œÇp©Ã9g ˜Ì28Šþ>ÓRct¾©+{o}\µ$TTÏCó$·÷ë¦ç`oP•\ãm„áâ\iŒÚ’8[0Ah˯!þ ÑÄ +%ýyòï›Î¿óµ¿Fê¿ø5“¡h‚á\"åÀ¤MÀŸ¢ób¿·×Åv×6ä:or€€”¯C®©ò5íêß•°æ¦„ ÷- †•V#@Ï{/"ëÁÀWÖ¶ÇC^¶ƒ¬²‚ y‡W¤×`_­²¶¨Êpùà3¦,m "ó±øç‚r¬fÉO°ÏÎÆ”«;”šíIV[kH»ËZÒÜå«bSä ¹ßåí(¡Ý3YJYât¾ rR…,¦ +C&á”×» Ȩh >?‹:_€üžÔ†Q¶dŸ…ð‚$øA‡º±™Ÿ;á¾b=_¹ÈnÖÔjMÑŠšÜæ{¸Á¿÷@i`´®Ž-jxÛhLQcÔaÌáDC u@nŒ·Ä%"vUT*ë)jû|àÅ™MÒ`l5ÌVT¤Ø–Uƒ=–.ÊÔeJºL1MUl=×N!^ôó<¢RÁŽqp4×Àašû|/h¤ÎU„s‰òdpˆ óÆÅ“«ç ÏMçu᧮YjO$”—k´z²¸¼zá öÎ Õ9%9[ñÕk[MÌS4-Ï9èäQ%:ÃcO +÷‘!¡Ah°¡Î”ËBÜý¦ÁDVbÕIhBu¾jAæ>'›Ú¢B6D ‘o$ÅÂõŒê`ÓßÕ#ö«‡GpÊMóª;À4¦n;¡:Ž‡|õà•IbÅŽ@%~*¨½³ð¼EÍøö¼!>ûÌ:U"þ$'ý‘ŒœàêÂh(@‰P‹î Òk0À<< +‘v!Àk´ 4ƒmxÃ7 (SéØK¯oƒUÆ=¨:fª,½ÝC7cû,%A8„SÒ”Ë{7T@§±dHãâ¶Ey_¬N} +1ov\ÝÓˆ±õ]$’ 8‰ûÛPÌP®ˆÑã¼\í«æœ„CŸ¦È(p€r®Ê}Wz<=‰JÓÆ ’ÝÝí]{°a4>‘jcð8犲“Á“OS0i PÉ­aœÐàPc'Ù"«Ãµ1,¥\Ÿ@í²ì”g­iUY‰<ˆ‚˜ +<ŠH‘p¢Žk†*:M +´O9*ì¸OŠåv:ô1CIÊØ)!Fžd:ê+Óþöæžáõ~HxšØ‘Ã\á £“2ƒ4 +KGEºÏa"ØÜ_fˆ}‰QfvfA½(Wö®­ŠË¼Ü¶!Î';¿¹x#ŽŒR7âÓ»…EjGy/lm%¸P€夹J¬ôÈç^©Å×O/¯n¾½^LÐ,¼‚½>íàÜ´|Žû*1›(„{¦O].¾þ|ùÅ$ëCrd'üGD‹3݇:¨ê5Ù„ø"„ø®žØ ­#©CÁÊ$°$0;o½êfÚ%fÚb!'û&RPutL„Mc<"t¡]3h\1fÂâ&ÀšùÜ‘¢lÚ<[#D{¼RЛOÅ9Ì} Þ’yÆ!}&àXÕPüª+†9ŒÙ’MYB{óÆmNŽ Œ‘ v¹ÊÁL°7‡@ >—à‹ï×ç¯j#Î-ôèì`©µ9› çé‰VÉÍCÙf?{æÀ¨©ìz‹¸þB\wà䆷^„°© 2rDâ€A¸Ýî^v)‚œ˜YžG¸*ã콪 ¡doí²úÃIëÑ°Âò´ï•_À°«6 <á6áe>¦œ©þGÎÈà‘etü8 ÒdlC°®Ž·Ð5Úzºê7ë6V>w‹±›©"Øî<ª>pîf3CÒR†ôvhivh5]Tãwì©ìm{j7’ð(öÖgó™z²êþÕ8^\ˆÉj*̆-F¶À [L W0À½Ï~-Ï¥‹sýÆÆÙ!òéÙ}X•®f¦Ÿ +ð[ŸÛ±ËÙo († +endstream endobj 1196 0 obj <> endobj 1197 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1198 0 obj <>stream +hÞÌYÝr㶾×S`rE6– €l¯¼¥“Ž[ïØÊ:l/h‰’˜È¤CRëø5úyËœƒ’ h{û“NggDš$€óÿ}ç,#ûÅ›?ß0²o2&*JI’JG¤)»ÅÛõâÍ7Œ0²Þ-'üƒ KÍR¢âˆFœ¬ïìB£ž­7‹%¢(&ëÇÅÁåê"hJÞ½y÷å—ä}²”¦A½oòûû²Ú“o«®hvù¦ÿ±þ ›£c²d”IAÖ_›“~o6ì}Û„KÆi”°¹®O]Y­Þlµ^ˆ$$’PgYFh’âNZ7É©’î=(Myâ½› Ibýtî-’i;d^&©S%ce„›Xÿš‡qBEðDxÄÂ¥€[.9KAf°Áolž§ ˆJšç}S›gÛÓ¦#¡¤*øê7…yÞ´e¸yƒºBëju#´çR¡ÁP–ÔÊ‚BY~ q) +¢ˆÙ”ô×ÉŸÏ]?ó³ßg×ÿãÏ´bIS4dIë–üWμ8ÍÍu¹?t-¹.Úr Ž) >…\Ñ8(¶Ô%€ aÅuKHÝ!«å4«áC©ä$£uÖE¨@ {YTûî®R•Ñ,{ r•»\å©^zõЕu•IÞìO÷EÕ‘îw¤}(6å·c1„0¶s9n¢×lP­YÒ +ÒÕluÔ²½:‚z!Ë÷Ç3‡A½ÓëŽuµ/ÚŽÔu cÙ–ÛBo°ä13]qT/‚K fëMÂ9­œÀ¥hyµoÉ}¨à¯S?°õ]Aöæ3p +ÇŒÍ;í x†vš(è +Èå ¬HÝâçè×ÕÄÚ:*E ­Šâ5¯@U;UlYÆÍïóŸB–A$!ÆWw([RT›cÝžš‚h-Uã»c¹¥&Æ—\@!£ÒÜïn¤Y +_jÁ3ZìAb¸“XÐ´È Þ}‘£p[ba‘ä¬Û€^ž¹åÂ&˜×FÁ椗$4Æ+¤[¡ìŠŽ’›‡p™P`”> QÂÈ 1à6ô<¨ìôÓ—ûªk“»Œ n‡¶1B¬NM}Ù)²ˆ*LÎ^ÃÈìy,Bˆß`÷x™‡<4| +3pÁ‚fUmÌSãÚÛr ¦÷àÖ«p1Ó°¦3È!š9IãmŠh ’Wg&ì̤Æ.«¿½»¼ºùîz5ñyœ iË¥þ”´]ÞºH<–àxŒ^$¦y0Ð{È÷ïVï׫ï××ï¾[{'¥ÃIK›Ò›¾Ti·ü„Ô$“±.O€–YP7[² ¹ÄÛp %¶!9PGŽ9æG††6«ôËP@¸Ê1üEÖè^›6’Êlœ6‘=?•Ö°¡.åmy_óFϾ)åjš"Fóc¾*Ð×ÆË~†¸ñŠ+©p"(‚ˆùeS<Øâ\‚– ÌV àl'[®§‰TFþ;áj$‘Ö% ¦'@+§ôO;lT^Ä€>£$|6Î’å#•Z凈ó×=VU[²èƒš~j¡èÜ›œÅ]mÀSÄ‚o +póè 6âòâï«kO$>ÀA5¸(íe*6(õ«ÂX†‚B ƸUÃI7OU—ÿâÙ(£™4Œo´Êlj-$\û뇠¬Ðß¡ ¦‘„õ>†æÐêrÍÉï×°tSW}ü(oþàlbБó¸LQ€’ù$ƒ  #\@O߀2LzŽýJGRýŠÓèø^…`[ŸîŽøIFNׇBâ„2W{¼²©©TbFÎ4‰øÿV„Gmû­vÁÁ?ÃkÆþŠ&JdÿñÁ<ñÔÝêóñZ½¦ûÇÐlÍf0+V=`¹3. ×Œô º¶~PB³ÄcY.Ä$Ä#ÆâøAYæÉA¼<ÆDÔì—Ÿ5ªLI“Ë/²_d¶‡˜ @Ãf2ÊæB€x +`!š’IK<±R5@K¤CÐ"³1²×à„ tå–Èï$´ŒŠìæ“æšØD~§LÍ) +Ð@Ç’â(ꄈդvçɨNLYI\»s˪Ԅ;@Sb¦ç¸y¾ƒt”Š»º Ëäc¨çfý €X‹%r cÎ^<¶^Å9A‹‹±ÓÒÜ$gpÿâ_pI#õ‚Ü|*w2ç.ÎÕHpðTm@âQÏF–ϦÕÜ¥w“ §¬U;:yi9£¬Iþ¨›Æù¹÷ªpüúÀ§,ìÈ'õzv7{x3‹ßŽ ¼¦…'Ùˆ¤dýÈÒ:®I]Ž¡ÙlyÝôd½ç*9£Ñ½MLéÌ EÏ=ÛÉ+SÄ?•–ÅJ9a±¦fvÌT´í+caƨbs1ø¬ Æs09a:}ð?™°!ÓˆÜõS¬QùÑyùxeôbœ¶Z/~`•Ö¼Ÿ +endstream endobj 1199 0 obj <> endobj 1200 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1201 0 obj <>stream +hÞÌX[oÛF~ׯô‰l« g†×¾9Ž²›…71d5ÁbÓZ¢d.$ÒKRñê'í¿ìwfxJv - +E‘sîßùÎl7{õ·;Ávõ,T,òbæÇ!S«²Ùvöz5{õV0ÁVÛ™ÌÃ>Dñ$f‘ò¸'Ùê0óp +÷|Ü[­gsîyžb«§Ù¿›Å[ð˜]¿ºþáv[¹"æ±SîªôpÈ‹{W4YµM×™ûËꥌ¨€+Åæ‚‹0`«7æD¿?[ gªÜ¹ÜwrœÃ–å±É‹¬Ö‡-V³Pò(„M!BÆ¥J’„q?¦³´uÚ`ý#læÒ·~„K襄ɽC톄áG?î¬'ÅD@*âBFæ®òyàœ˜ô„;p¹s)b¨,á +üWæ~;"?"ïÜV¥¹·9®憺ú—ÌܯêÜC_§,ȹÚZÜ%e‘¿H—¸Õ…DºüߥWI‘ˆ™CYÿ9ùúÜçW>öÇœú~L@…<&÷{m¼° €ðM~™Wû½¹X滇¦fˬÎPJqá|qeÄ•“mx—ÿm +GR§pˆÊírx¨e$~â³0 +­Rö<Ë©î<åÍsWÿA}¦>%÷‚À˜êÑsΧwoV7´%¬ÌÏCé¶Ú]Õ]:ûŒå5ËwEYe–ÖÜý¼\X’îd'­l™Œd¾H¶€ìšm]%q‰¢óq»b¦üàF¸¥9°§|<åN«Vµ¹ôx‚ŠPª:É•ôñqŸÃª¦ÔF}ÉS¶>’¶(çdÐRˆÎC¡Ñ¡Í‹ºÑ/œtÃÙÝcûeí’H'ßž&>Š¹JÎ\äY®ááÈ3²óŒF‡t4A€ª9Yº;²¢áæ„® (B~;ú +éJÁÃr§÷€g¬ØgÛ§›Ô…§„sr…e¤½rªÛ*ÛÒ¨¿³(ÖæÉ}Y«ICò$,¤iÇuˆkêvS3€þ÷@]+gn—‹·‹ååDJ†bV}ó‰Û4ª›´ÉÈ?È ×#´Œ"Ü°= Ÿ¾ŸÈ&¥ùÑ >8YŒš^§¹â¾ F1R_§iÌ“dôš MDéé¹B[‚i_½iºB„¾|lò²H÷º×iÁî3v¬é DÌ®ü6xY~0ɃÊbª.(cÜ@/㛫-–/ÆeO¶&Å8³Rr.ÑcmW"MÀÔØqïË&û‰ÙR8”îƒiÓÑ°@n‡o ©®®¶'S?fë|›#I© ÛèíU¥s¸èY)Б +Ù’ +ø9+Ö¦HZ0 © fð~£CÖ‚`]M0JL5Ë B袨3vH sçèÒã"ýeÝI.Üí‡;åÙ~ó£Á«tÃÊ-églI¸S/ŽZâȉº8«ÁŒô¾.÷Ç&ÛŸáqDVFNÝP:²¦5ÑL÷gÇ +(‘J­ÌW5ŽÊýI5}v§ð^V\Cnߊ&ýŸ¥@“ÐGº þü:¥Î÷5Cç”i˜Ì«`æH_© ŸG ô ^Z—p?[ã­‡´ú¾ƒ•ÐÈÀ ef1Üé¬Ó†>PW6pk8n(ÎE¨q+ ÿH|¯¼³)÷û®ŽZéþè ‘t-ü ±Ò¹Øѧ˜ª‡QpA̱¯þ䟫“öýF‡àaÚ°d`ùÿ³k·âqOTqß»£¯0m¡Ÿ8¦×vJ`^(ø‰Q|_"(Ær@:Ë6–RÚ“|yÜ"jé̇¾¡´¤Âø€ƒOøQ…Ûpˆ¸• Äc@§L ×ÇGVQ°ˆ4VÙ9±FLBį*=î¨ûJz¤#¡ˆfVõtø³m°§ô^KMŒÔ„´¨€<(Ä>Aàÿ´Ô®ßÓm-1!‰ µ{‰´{â—ÄàÖç¬M„=³%é#ÚýÝw–ŸÅ$ ]sx‰ºµ‘òÛH¡U„ÁÄrÛÇyFŽÿÔSèô,ÎO6…—R¢Z¸­éW¯?|´áVsÄä ™ _ÛÌûþ9{{½¸ùðépìâ#Њbò‘ñå“MÂ’†ª÷/Ùv4Zõ…l"íÊð¹¯qÒÁY[¡‰Lûü®/Óô +Ê:ß9!¹× Îl{j0rXÏ0ÕŽøåÁ„àŸÒðO©ù§9m ¦F,òL\`]~ÜRÝQQ!ÅÏŠ +¹w±<ïI2==‡5“†4GuFž=<2”¾=Ç#ë‡zmý¨1U©g9PØDzÆÀê|“Õ¤ŸrÓ˜¬I-”z(¡¶nÀÌñ/j%ŸÑjÞsÉñ¬ƒ¦ÒàÛ¦w5Ö¯åi5.PÈ–úµ¶ø ‹\OÚñ±q|Ü9¾ý–ºø·?"ÖDžb"O1‘'u<—¨™™[Á°)lŠn…ÐW;ÎD,ÍЗcÏ0µ><ÕøF)“ÁóRyqaÌ'¾ª.s¹ß lÍy·ðb¨+<!W]vF˜—« Z;Ìüü%¸ê]ÁÆa¿Ñá´ÓÕ%f߇׼Cny–á#ö]ÝÊä,óè´H+tbf÷ {«ñµÙc€ŸkW‹³%«œ¦ï¤«b´Ä¿ŠÚðŽZ"®µb ãQpaù#Ú11mºLBbõIfákB`íu@ýRPÀ=Fyh<:ï7°šîÞ}.Dð-«’¯k³Ï¯HgL˜u˜,×FK³"ñÍBÄwªeVç˜90IßbúB)]›¶"ÂC{Œße5²\ܽ»[]½¿¶Knì1]ì·"ŠÈO©‰Ð·Ð¤ [pçpZ7/êL†ñ~M#ãm‡Y’xö89,F¬eˆæœLŸ[tPŠyôåuÇt×m;è…Åjö«Üi + +endstream endobj 1202 0 obj <> endobj 1203 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1204 0 obj <>stream +hÞÌWínÛ6ýï§àú‹ZcF$õ‰b?Ú$Ý:d@‘z †z…¶µÚ–!ÉMƒ=ÑÞrç’”m¹I»îX X +EÞïsî¥dóÑé·o$›·£D³4ÌX”%L‡¬1£ÙèÅdtúR2É&³‘T,Ä‚"„TÆ!áê|ÄoëíÍÒ0§2q*#¡d’÷aŽ]˜ßr!áƃ“|zîhÅ[ ¤zîhHÇø4p² ‰^¹(x%ÏA`l3̺߮k½to¨zÆ"2´dÀ›¿M‰  –x'=ŽÁ‰HíøO÷xN\26¦¬f•iY·0l¯…m@„$ Çñ¾}–ÛŽ6ºEÕ²e¨X -Ìñ0~š VxÐeD²ï«Â¹*%rëEZ›z¾“žcØ]Õ-@ÂdSÕ°:Ä9w๘¯YëL.]¶ÇJ‹ü1’W™—xàÊ;‚eY¹Ü’ðogÝ°so*›5õŠôΨ=¤ø¾µ‡\9ÀW}åujªõÅ0®ît(t~‚¾å©´·˜Qˆ­±ŠŒU½±Ê›qVk¶mM‡\¤Q|‰QžÆI*å+ lt`R2ÖkÕPW¾.û¢ÖÔ¬m]Û7j[y$RRçAèÔx¤*8IU!A4è9°Œ7×Õm·¶é\¢$!é1²Ï$–hÛª3ת[„vM8ÀÁÎõ«óÉw\èƒÈ'½†Ìk`Kg™lFTñ:ÀOÃîjµYë®OašîI¹35÷‚¨œ +›G‚H$rƒÊÕ5`I ‘øKPà%g“…9r~Æ_èNÜ[‘ƹ¬Ö›®ª×ÅÎÜî É;BÐMP©Ýª¶[À~yNµ¦¹tÔulòåóŸ/®5¹/ReK›’Œ¦£ôI4B¥öf~a[Ñ(X­ŽÚJ…ÈÓ §šEk±Š~ò{ÉŠšGµ¾¶}ÕÇýpº?ôù.¢#}‹¿ÕH¬»ó²ƒà¡*„ö“m1·mDî#/8{ØH ¥Z¨†œ83ç+!”PšÖjZkìN×<,2"‡ŒÈ!CYd|Ž‚TŠ$"k å}ÝöÓ½e¡âS4h0RÃ.>r@ÔjÚO‘"k3'}qšÌ½x‚,|’Ö'‹éåíŠ<¹£‹‰ €®œpäGJ kýç+±XY8J„CdèÝeÅGy¹¼)Jj³)ÇwO±}ÆƲ»ß3R@׈>µÀ‰ãfÔùÙÍ»  2‹8;ПöÈ´- P8„NŒ1§Û;*ð'~N0Ô[l†þÇÖŠ[Ëv³®fec@WŽ6Oتhq#k—UiÜž“€êÂ9©$QÁÞÚ¼W®|vj?;Ø™–Bm\#Ïù²ØPåÁ6éÆIc Õ]”â! „üÒm¨í§ק趟 𤡂Ž­Ë±w¹žÑ`Ó5÷¬K—Þæ–~†°…fómmÌœtqõ1sS€"¶46ù—Ç[¹*?Ñ®|m:6åî®;wÔƒn®Žy™ÞTö1?F²2ý{IG³~0°\ëGø³ÐOÕxVز~7¡õùÕòÉÃLmÕþ£yßþƒˆêG\_΋® Õ­Ÿìw+còµ?íþ¦ŸgÃoàu|#jÿºÜ6 èôY!ÆdµòÓSRs¶0å;VÍöÈ«°Ú!³ÊîàB=0g°sÊí¡¯¾a{D’”Ûî=Þ4pb6åO&VcËÖ5–;vŒêÚ è€ˆ§^TŒ›€Ü§ME©Ç>1®ŸLƒ]DÂ~~Ù©mL·mÖL>믄 +0ò™2‡ +endstream endobj 1205 0 obj <> endobj 1206 0 obj <>/Border[0 0 0]/Rect[484.14 117.24 549 130.74]/Subtype/Link/Type/Annot>> endobj 1207 0 obj <>/Border[0 0 0]/Rect[63 103.26 116.58 117.24]/Subtype/Link/Type/Annot>> endobj 1208 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1209 0 obj <>stream +hÞÌW[oÛ6~÷¯8ð“ÔÆ )R¢Øƒç¸]7 l-EƒjËŽEj%y]ôí_îR²cçҮɀ!€¥}çN~°î¿š X×½@BÈ#PQ’C•öV½ãÞñKâUOxÀñ" +™Ž ”œqâ«GÆÊâEoÀ8çâϽ g2~ >‹`tÄ'Qm±Åûmå„Ç”“!LËM“imÀÆq/ðX`Ló`žÔZSa™èLÀfcfžÚ[Ä”‚4‹ò6!Ú¤A.ª¨‹ž>¹ˆ/Ò·¾I\©˜ï\ƒÇ…;ðñ5tžˆÐeÏ®À_eå¸,BRvΪÒÊ–›EnÀBçÜ5+©•WuæÐ_§,(¹&ZNéò¼ ¤|‘/Që ˆ|ùÛ¥OÉ‘,(lŸÿÞ÷üFµÿõ¬f + Qúy[´ÊàIlóܾL³õeSÃ4­S)™pþp½I']²®ÿÛ=ÓÂNîn¨};išéÀö3½h Aˆ j7ÔÜ3ƒÇ)r¾¸ñïÔn8u?Áh/Œ|±©ÜÀ©Ò¢`î,Ë͇<}6w¯’åy¹˜;uöWZ®ºµ¹ûLâÊÜ}aüŸµ@pà Hž®>Ïš¤j&ÉuZÍ>ŠGÃþôG¿Æýî;ÛùœF±seôÓ˜Tùm:žÍÑ¥úaþd4ÚTUŠÒ¢9I‹:k®Ñâð|<¾÷H›ß‚ùº¡]V.ø{´ç1~¿† ÿ! 4¿¥rW?…þä@¥‚ŽÀªH1äÏåx‘Ã~Ä ‰ÆÓŽÉîïx›³;Ä`[;ø¦OñÓíô}FàKÊóñ~Ý,°Ò¸~l“¥,7ÆÞ7e0ÙUݨ´>L.ŽÉñ ŽÊ$)Ö›d"™_¹‡”’¤‰'^‹1iúŽí‰µý#À¶‘½ö +endstream endobj 1210 0 obj <> endobj 1211 0 obj <> endobj 1212 0 obj <> endobj 1213 0 obj <> endobj 1214 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1215 0 obj <>stream +hÞÌXÛ’ÛÆ}çWÌ#‹#ÌÀ£c¯\J)öÖŠIJ%çK/)^6èÕ~GòþKŸž€–«H•¤Ê¥É%€žžîsNŸ¡`›ÙëÞ ¶ifV±<+˜.,S«Ýl=ûãböú`‚-Ö3!Y†xEÎË‚å*ã™d‹Ã,Cži|·XÎæ<Ë2ųɻ›7Ìð‚}÷ú»o¾a·u* +^$§M]»ã†½=¶®^WK—þ}ñ',¥ÂR†+Åæ‚ kØâûQ÷±Å%ößêt.$×ÉqØÝéÜñÁn3£KìÈrc—ª,KÆuA‘üÞ¬ä¹í®cÓ\êÑuÔ„J¢üE칯HéëP2\ÔE·}ÊLÊ” )þ¹J•æ&yb2éÜàcžÎ¥(³LD*ðªÃ÷ÉuNå¹­Oá»ÕyÙ²Ôò<ùk꯸ð}ÝìÒ9òMNGª®ßnFõ’ÒæT0Ê¥ˆ¹P‡(—_Sz”ÉYÊú÷ÉŸ/½ámÿŸ¨¿ãÛ|”å•?‹ Èll€Ð¡ÿ“5¿ÝïÇ»ÝfÛ6ìÎ5PŠ‹ä—Tæ\%nÅ;DçÒCØ‚º†/dÆu›Û‘³žhÅR¡µ3;¤ErNEÒ´ìÞmvGVWÌáňŒ‘Ã&Ê…â%"ørd(y÷퇛»tñ ÏU¸<0 ËÊÂßÍ·lw@øã®Ý²vëXx4†Ï¹Öfð¸§^XgïÖïÛªnßUO®¢°­ ú™rð°Ž­’:,Mû­6GwK=¤ËJ7ÇÕËë®ÊK ÂþÀ¿€‡º“+aÎØaíÕîH®mBM…æ*¤«ºt£Êî!30ñ”Šo.ÅK݇g+·ÆûŠ¡aívׄ˜si Æo)ï#‹>IBwM8¤¨Y‰îãÅ·Ñ–ûó +aï]û˜b§eTœ/_h£ÙËÞQ®œ[s¡M…‹3@’;*xfËÚU­c§£›€¨Èåþ¸ëkùñ‚¶u +.),…Ö¡ˆ®ZncÁ”Ĉ3c DĆD»žQ;š!3TD ˆÿþÊÕžbCRaÞi·ülÞPK$…äþú”ÎAúêð°GOkOJ!4x¸™8;#.še˜Ÿ*ÙÝ#µ­«‘!éU*ItçØ¿:1Q#§`3/šŒ©j0T‹+¢¢!Èd3o ,ó¡"ʸ­HöÎãWüj¯Æ6o>…½õëw1ýú‚ÌGñrÚfºd0Ä¿ ˆØßó;ÒV‡ÝvÔ ÙN³ ‡jãà ­Aº¬µïîÀÉä}{ýCo¡£«ÕΣàm¤§ nÌT¤æƒòõômÌÉÝOyŽvjs¡—#^¿b¾æ–й¬Ž©!è1<7æ³nï~º½¹[|‘KÃx50Õ‚ºwlY¨!ûu!UBrO£e,ÀŠ[k¾œÙÃñÕQ›³7ÄË“§äáT“„ÛÃ7°eyrHURáÞP9Ém1l@?Ðcý‘ä= +™,HA#Î}tÿ<ïê0¿iy´Ê˜kêEuC:6°ð\Ó)GV“”·³Nêy±Zßun„—¯v‹çNGží8ðD'¼›‹e©Ê¡cù+a®Ø¸,r+xsþtZ“éÇûÙÿœŸ]Ž‡“ºº{˜C +FОƒ–(Fã€LAî‚ܸ÷%/ìôDðU–~‘O2<±ñðp™™þ´îý3?ü¢GÉCµ«Sƒ©m]¯óø(Ü«œØ€°½÷OǶú4Jµ$ö¿3Ðú”\é¨'RÛºÃÝ»Ô&WÊósÎ¥<ƒfÐýZñ=žZžŽèäm«ú]lG')eÙpíÏs›<Ñø±ÉÕÁ[‡É“ä5ù9+äP¾TVŽM!d¨€YJ6gbj3Îi8èw&F›õ©ŒÚäõ +ûÕò¹¡ÎÂïýƒ[îÖ»(@G„ðÚó:#QxÎ@ÇÏÖ j¡ Ú€/÷Ž®EüO€peLHh‚µ±­BŒÆDª1‚’x„ú§¹?àÑt¯Ôlüi“Ï 10­“IðÍóó5Ü®üJ¿5©òèP…±ÜŸ_h­&v`5©fªIgIº7ÕôÜ”NÑÿŽLB•äü_$ÓD~T‚OûM€‹` +endstream endobj 1216 0 obj <> endobj 1217 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1218 0 obj <>stream +hÞÌWÝrâ6¾÷SèRž Š%Ù’}I ÙÒÒ41î|Sæ~쥫ƒk½ 0\B(ñB[âÚLÚò¯WÑMœP²_O~>·¾òµ#õ'~Í&@*cøƒ:ªÀC—€wÑÙ],Üæ&ŸßW%¹1¥’qúÕšIj¦¬Á a-,„Tî·E-±’m]Û¼®tÈô¡ªk(΋…ñC@Þlwá6`1å•ÐÇÞ½;œø‚ƒ%~žŒ*8³Öí?° ª 5Ã_º:jÊÈ©´5c…—$#µ”ÈI›£Èż¡ÚTzÑ¿ ÒO½_û½ßGiÿÚOÿ>hOX”ßk’%”½KÊ*«ÌÒ#é½!în­SC½Q'^Ó'šH^’ÕºÊWE¶° +;@¯R[lª:H쥬˜’IV/†lK3%«bñÿ&†ä†èØZ2ÎÖà`è°û©Ó²Ny$šhˆÚF3A»˜»P#ø +%w$’֣ǢÊþiÙ’°D9òÄ ä=¨IÛAP›eø;šC,fÊ‚ ðU!®&£Ê¬?SWk,Ü áÈÀ®¶_Mž”ÓHä*i¹ßѸ“‚,\n³ÅWÓFªÒÑQÐèg¿å{ ¼‘°•Sƒ·QÓ…^'¡1Í·˜Ü²VP›l-šæ†}ÓzNK° +-2­Äp–lÀÙG{ƒîèhm&ù,‡š¨ xu uš  3_Jºò9Ý¥©2«2¦Z°oš„ˆëê&Sq2ûfŠGOø× £M,ÞÃÏçyŸGœ©³³ôN*taf»Ë|±èÚt„L©£ÙˆK›*ÿjFël‚=kä¶çØ„•SÕÙwØÅJS¾ûT|Šôuü4ù^†Ãn/ÜöG×ÝÞàêã)÷ò÷6PŒuRÏý§¤ßÒ«-½Uo¬Õ©¶ö<‰J;ˆÿø»úç˜(áCå?¥Óe +endstream endobj 1219 0 obj <> endobj 1220 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1221 0 obj <>stream +hÞÌXÝnÛ6¾÷Sð’\kV$EJÚç8E·´è·C‘îBUèDƒ-g’œÔ´·Ü9$KJÒl†’,‘ç÷;ß9Œ W“/Ϲj&F‘$JIœ¢"RÛÉzòÓjòâTAVë‰$‚?¸‰4áYJñH’ÕvÅðnUL¦<Š"EVw“ z¶8%š§dþbþìy[3‘ò”î®ê|»-«+òªjm½Î Ë~_ý ª”W¥¹Rd*¸0š¬N¼Äø^¶8Êþ­fS!yLKC–»}[V¶q«‰Ž3ðÈpm—*Ë2Âã%9ߌä‰é¾ƒÓ\ƃï ‰rÁçûˆd.qÚ¹– 6ƒÒÞÄ×9S1×ô@d$ØTÃc¦R¤`³¤‚ ¸Æþ=ÜD'ž·õο»Ü-a†'ô=s_¬_7%›‚½tWat»ÆKJ“`ÀЖ4Ø‚B[þb¸ IˆJîOÝ¿qÙ#õ¼Ì%@žbø£€È„ˆØ'à_Ñ9Ûlüò¼ºn²´…PŠ zËdµ—¼+€áD:(Ý/T5,4‰éU´+¶½ˆÐz~¨Úü3[ý»µßñÌøjÀ”  W1J€ÍÒÕì-«–l,3t}wZn6³¢-oíùM^|¤>z<ÂÖÔÉ„^îöŸ6–xuÆ«‹¹&ëB¬}ˆ/hÕ@AÞ@dàÝíÑ&’~O„ëéGæ…>”¹õ®é3`-sµßÚªm‚ô`”ìh +P9 ÷Í« œ&x–iô0–CNCˆJ;¿±E¹.mCÚkK‚òɶwLn¨µÙÚ6w6 ½_-÷bQÚ†¬!Ú É«K’cÌ™Œy$rew ÉÓ§ À'ˆ  NKxp²‹BºwArO'-%7&ä¹Ðj×wg9“ðÓ!˜Í0±´ž±8€Îçûº†PžØª)ÛÃúÙˆ!b!¢£V¯ÅŠ´þ‘)*>FF1<›Ïß-—‹7«“Å›óW«ƒe\gý}YG¡. ”4mÞZ'«ëšAgäû•OhL(:Êj¤‡” ÙÝ´å®Ê7NÝZ®’º×ƒ° Ó\@,>Y²oì%ÙU›\ +KÊŠäCk!Ë€¹cMxKÏfË}ªç’ Ñ2Xi ´ŒŠ šJ4ÉcëþN‰[_â³ü`ëYEð€ô•\ÐbW5-)`Ùu^ÿ@†%Œ™“I€‰¬b‡ÐÔGiÜg“ç./O•P}­÷¶“Ý¢Î|³ÇÛH3F4ûVS&ú4æÆ8ß×¾÷õ“R¦˜1½©®~ŒÏý€ÝP<Ù­QHÅ„wÍÌgtΦ€YJ +Ÿu²)ý‹m¸·gÅÁžl8@Š>G½Ï!À†nàªéÞ=G%‚þ8$#€’ÑøRÂeê?Ò·‹Ù/ƒp‚û…í‘2Ú­M¯ºœytö~±œ½\ Dw=QBu4{¶xNvõ¨¸y"{4&õ±ü–¯Ï0œ +¢~$û·€BûÕÖõ?è`9ÙæŸË-ƒþ’AŒá²½OÞ'•Œî|ƒžÒ@Ö‰”êk€ νйÈ“Qh/äü€Ç ©ƒw5Óo(GàèoÀyÛ2,ß0ßâüV\¼½i< äÓ1É¡v´ßÀ¹b[5yµ& 2Ã̺3zzµèw2{@¬Ñ ]ñP! N†ð=RA`bº÷’§0W"¡C÷ è¦û-K`(„0'˜®³ ëlh_Âã£y`™ïÖŽOOkûçÞVÅa˜u1lQ¡b³€4R?!y•ÿ-ª¶\ …+ždêkªà¤2jq“XÝð`ø”“¯Î)"ƒ$\(|G¿ÀÂG¿9)ŠÖn +JèOèüT0¶ä,…ëÁº¯)õ³’¦3&SX5ÇÅ= ‹k%i·øOüª[Ü×îuå__z„AãÑã0ùt'_#Løñ§^,´q£H•~ÁÓåâ×w‹7óáü¡4ud!xÒx”wô;žyFhŠ¾CUüH™ùá¡XÖ0Ĕǒcp9–]NÜ8›B–à\ÊEB¾×Kw0œ[t·S€!Úñ»Í#3ày4¿ËeX©"üO€ #„¤+h¾žžÞÆî"Ó7:™+îÍãP0íô1ϸÎŽ 0îå"È +endstream endobj 1222 0 obj <> endobj 1223 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1224 0 obj <>stream +hÞÌX]oÛ6}÷¯à£¸V¬HŠ¤ô˜:Ζ¡+ºD]1¤{PÚÑ`Ë™$¯õþÑþåî%%Y²Ý$:` É’x?ν÷*œ,'¯¾¿ædYO´$&JHœh"#RÙÉbò:›¼ºà„“l1á‚Dð'ž–&ÄȈE‚dëIVXýl> YE’dŸ&7Á›ÙQ,!ÓWÓ/È»Šò„%ÁfYåëuQ.ÉeÙØj‘Ï-ý-û\IïJ1)IÈ׊dçÞbÜÛæ{Û*rÁâ ;äj³mŠÒÖÎØ,›hÁŒ†œ4Sš0!Ó4%,NЖËÎ%ìBÎLÄ£‡ ¾ ÝCH¹$u0¤ÆI—=ƆRùÊ©Œ™ +vDDœ† +. O dpÊáûû +ò0±AtÞUïn;oÕÌ¿P÷ÄúûU]Ðâ 6%‚ë².!´A¼0–¤ „±üMq)bˆ7JúóÁÏ/ŸùÚcõüš+€Ô,Aø£¶‘n Àc_€oâólµòWÅò¾©É•­-Œ€”ŒRa˜ ìëú¿ma#\ k˜ÜG†^ÔFÚÍšÁ,"Ì ¸Þ•Mþ™f¿ÃjåW§,Õ~ð-(ÍdŒ`±p#{eCV–ê`ñéM¾³ÕÙô¢²lm9ß} ÷KR”dm—ù½›8üÛüÕ%ÓUO¢.ºº+”m˜î&ÂW1òîWçŠfwG…Ïa„«3CgÓŒšŠßRèT+feS¶«å¨gb™¢ç¶mx§š’kïÕ)fâ³&9÷'À–PõÈÎ^¿™ÍÞfW—³ëÊ€Á tçJtŒW7yc±OÉáÙäâ´«ž4¶]Ÿ”ЇžHQ,dQÙ;R, =l¶¤vÕÞù(B¬0?Øbð}9ñKº¡Ýg\\Í~~?{;ýu)l]RujD¸Û B}IòòŽÌó’ÜZ4%æf¿ßßÖɦ\íà0·Ø„°â€…Í°rŸÆÙtúþ +ð<Ÿ½½¾ÌÆ&nú{¹âÝp¤a²ÑÜ…R1©À€‰ýd}¥JH˜ )žT‰,¿í:n×ßB+fÈÉ`Oû9R]“)Øš« %ŒùF"a‹6‹ZËçʃŒâÁ¨ÿ+…PBtÄrZ$Úmk"ß''•b³hû9NÙ5@kÈ?XQGK¬ƒEh~G᱂sNÝ[Ž‰ñ÷‘‚@½¯ ¦Kl0ö¹©u´}J ÖùçbM9ƺ¥a Q®É|[UÈ:."€ÝŒf_õÛ‚•h~CqOl>¿¬ÔIáSѲ1XR˜!ZºkîÉC^TuËkÒ]éL[*„M¡ö¹¶u÷¨|‰½â<yž \l£Ñ†ï˜cÿpyžý02+ɳ·9än'´1 ]ˆ;¹õ8àöíàÂþÛ&X­Š|ýP“h½u1¯6%#ã©9–e®ã,ÇDz ²‘zY–^–•—å`ú¡ðQ`Ÿî¾ ‡òû%ñM•úJ4e‡¦<¤m/¹Ãb\‹A{òÇ|ˆÓêÐ">ÖÛÍCSlÊÜïG.¢î+”·°ê5Y 59?ÚH}ŒÄ-ë·€!ì°Ñþ{pØ3'U´Öï»:ì“wˆù1xJØÿ˜§Ï•aø¦ûG€£Ó +endstream endobj 1225 0 obj <> endobj 1226 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1227 0 obj <>stream +hÞÌXÛnÛF}×Wìã² 7Ü]î.ù¨úR¤HCQkNhie³H—¤ª¸Ô¿ìÌ.¯²â:H +Dš—¹œ93gNîfo~øÀÉ]=Ó’˜(!q¢‰ŒHeg›Ù÷ËÙ›KN8Ynf\þÁ'†¥ 12b‘ ËÝ,+,ŠáÚr5 YE’,³úîâ’(–³7g¯^‘«*à KhyWe»]^Ü‘·Ec«M¶²ÁoËÁ•ô®“’„œq­ÈòÜ[Œ{Û|°}]!,¦9Ø!‹rßä…­±‹åLÅ)d¤™Ò„ ™¦)aq‚–\nZ0£»û4ñä>`‚HwrîI)›qÒ¥‘q…1‰T>ÄŸ²@ÆLÑG""„ +NM +ž@Ì‚ò€Ãoì¯kHÄÄṪJm½_5$ÐÌÐ_wÇúëU!ÄKËÑuéFˆ—Ú `KÒÆ‚ÂXþðU Äo”ôÇ£??w|ácÿÕÿñc®R³áÚDº-}¾‰ÏùvëOùÝ}S“…­-ô€”ŒÓ?a˜¤vͺh)l„£°†Ö}¦«áAmô¨£]³Ì" è‡Ç¢É>ËßámåßNYª}7à ZPšÉ-ÀËÂõì Í‹†lm éæð.{´Õüì:_7÷©ŽEàÙa;ÏÜóÞön Ã#çÈA«<´7´Øﮡ(ÃÃ}ÝNÕM‘Dåߊð ú­† Æð±ÇQ¬ër»µßA°¤µÖƳ„ÃT:ŽáðL’¥\™qŸ×)ðUêp {îÜÐ9 L Óín¿³ESO‚ŽÝ„Äáëp˜ ¸µwÔTÎÒTaƱèj? ¤¯îƒ]å›ÜÖ¤¹·ÌܱÀFÊdâSÆp‹—cu¹!tH€~1Ó4 àg»‡)ÌñO6 :äœI(Ê4ôc‡çb烈N x«Óðye‡°RYÆ01»ÀúšäÙ嫪,Ú+]¨]q$Šœ«;Ãq¯ Ó»¹ìþ¡@o ]‰DÆ7ãabÕt®(2÷̼òÏfîÖy¾ÙÀŸ ]ø«0óíÕa;Õà Ob™b8-Ux'9>'ˆ ÊaM²‚LùRÄÕq-=îó÷Ë‹÷ïçóÅÅüüíååââü糋«ëwÓJÄL¦£÷;‰¤åBÝdEª’ Î"¨~*’‘ +¤Ù“`OŒlÈ^Ö[µ ¬Èj3‹À2…ƒ ৠ+bœŠK¨õ4Çü&b´<|E~b"¡ãôòš”M^Ù`^“Ú‚s3z]÷©¹^¡P[Köµ]“²XY’mpi±ÙêžL†j(ÜJr´ÿˆ¡X[Û RO«ŸÊµÝN3L¥ê8¡„È^ .èàŠ²¯ó$ƒ²¸Á0aHéP5p~8"†ˆb7Ž_£°W[êèµ+‹²)‹|•m·ù +kéËéë + t§³ÁŒAÒ”®˜»ìS¾ Ügõoí: ‹ã‘,õ_¼íTç¤ „Zà§æ”‹¨7!ÆK8Ñÿ‡‚h·¶áú –§„BÍšîsg } +ûžó¦£¼ùl³}É®Ù"ÿ õ¼ß%ùœ×—µ¸ÔãFPX(Õ¶A꺽oå›D7BOvϾ¢$û"o:bså§Ãtј® +7y† œêÀMwŽm·¶9À§hL­=^4aÉ7éøË«e7‹ŽÐNNõ¿0Á'‹,Ôâ‰Qþ9£¬­õ|ÿ#À¡êe; +endstream endobj 1228 0 obj <> endobj 1229 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1230 0 obj <>stream +hÞÌX]oÛ6}÷¯à#µÂ¬HŠ”ôè5ñÐ!I‹ÄÝ0¤{Pe:Q!K>šæ'í_î^’’%'ÍZ,†–*‰¼—‡÷œsNn¯¹âä¦]hIâ0!Q¢‰ Ic»ÅÏ›Åë5'œlv .Hÿà“˜¥ ‰eÈBA6ûE³°0‚g›|±daJ²¹_\Ó³Ó5Q,!o^¿yõŠ¼ož°„Ö7M¶ßÕ y[u¦Ùe¹ þÜü +¡¤ ¥˜”dÉ׊lNÜŒÑ87?Ìý{,¹`-`rY÷]Q™ÖNvºYhÁb kÒLi„LÓ”°(Á¹ìêì‚íKX3Ñì%@‚Hû–<’ZR/£dX=&Ʀ7R¹ ϳ@FLÑ"B,ÜÆÁRðR”~£ñ9£ÑyßÔîÙ¶Ï;hÓßûƸçM[KÈ—Ö‚kW"\BèñÂ\Ÿ næòW€C1‘˜¸IÉx=úï·®ßùÙ3ëÿø3»R³áý„ÚoܼHÌUYº›Ëâæ¶kÉ¥i P@JÆé—@ÄLR³eCýûŽ…-a Ì}Lj‰L¶¼¶wð¹Ž#XtËáÞ.¢4¶íîϲ@„XÚç,ÅÊ„ßft®ªÌ~³jÜ·™}µx +i»WyW7s´ˆb†tß;V ¤rXÆ'È÷–dñÓ(7 HŽš!ÇÔéêbszq±Z]ž®Ö«7›w—Áæó$~Èx:9ìžÐv4i»¬3{SuŒln qƒ}Ôˆ÷"Aãg'AIÑÚK)ÊJc<^­Z"Fõ]WÔUV@[’JŸ é*¦,„äÚk©Ù’ºÊ Év¨£&ËoMØ7p-ÍîÞoûy½5ål…)SÓh‘ßCÒ8¡&EE²£@ŠE‘‚œ­þ8c''Ù ®Ã…×:Òš`Ãܾؗ@RÆ"™PsÐ]˜«‡ªË¾ÎöðÒNïñŠS;¤5=¬kJ×´€-jhKŒ3ð(­3xŒÿ‘:À<­X‡è' º­ûOåPRz(dÁu:ˆ‰råx _jš•=^Ì·¥2™y’`^WmGrHå6k~"Ûb·ûКwUùð1˜c4c¢Br'‡,V`ãHã›k³õã}æ`DbðmÈGÐ/²™—¾-CÈ5âjÜëkzugòbWµ; Y¶ýÜCÖuCöö§eWÜ•dH ZÂXCÃ0­O5ö +‰gDc@­tP7¿Û%W$ ã³)¢A¬|Ó½é€OyVæ}™ÙÚš•ÉR@Ý&véÞEª…5ÁûYft…Mž¾ÙÜ8Ä!ù¬#­Å +§ƒÍÕ#zâžo yß48~X8À(¬(ÃϨÉЛ¤ñ‘*Y1º­ûrë¤ÄÊìÃý­©œ0 ÍÂG-Û\D¯©Í¡†Ú»ºÚbÿW‚!„PJhÚHÄ4lè”leûËã§Vhå Õ««í +è¾µÔwµô0—j.iËŇ³³Ù¦@;y\ö.u8@¤â¦ªY tñD–}—:„6Î×Ì·­Wª˜iíÅ…sG +ë¹jô\` ë¸ÉÔq•w\e7¡çE…Þ,€7—¦­}wý'<ƒÂ‘ðl÷Œ K8¼€«'ÝðüíŇ«“·ëõœȇ±ƒâ£š68çpæ|ÄûŽ-arR ÈûÎWœp'\ÅŽBX¢“Pgñsy‚ëHW¸üÑÕM áò —ŸY·%7ìVPÜ ÑÔŸ2î¹0I¬¨'†ƒ}O-뱇ƒ¨'[£s3ŸWÓ¦?gçâÍÈãCü|J 8I1Hâ_Ù¹ˆ$“ßïæç<®úötæ% }N^TÖÐqR¼î eXêi“<&'’OŒ‚yÏeÊ_žBf¡üa÷ö¥L +'u·âuf“úG4S¦žÂs_EÍd¾Iƒ2“éq•Á]äüçšn&ŽÝ±=YÀÔqæ즜yá঑ð­Æ$÷¤ÚþS` ã3”Añ¼³€ +{5¡ö8JŽ;qONç\ΕŠŽÍ+Î6z¨°+×ç`†­©ª¿± Ò~^ÖЛ€ÖÝÕXÃp Œ¬8 “ ÃF[“þx +šÕœ­q¦±”‰•ó¯¨Y_"f’Â)´³°ôH3å@ÿ‰Û†,<ªŸÄmÍ­ 0‰®bà +endstream endobj 1231 0 obj <> endobj 1232 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1233 0 obj <>stream +hÞ̘ÛnÛF†ïõ{I"åš{$÷Rõ¡pᤆ¢6(’^0e³È@¢âú‘ú–Ù’œ¸p,‰ç´ó;+Fî&g¿¼eän7Ñ‚diNd®‰Hɶœ¬&?Ï'gWŒ02_M')üÁ Ë3jr’‰”¦œÌ7“¬ÐTµùb’Ð4M™?LÞG7—WDÑœœŸ¿zEn·1Ëi5wÛb³©ê;r]·åvU,Êø¯ù¯àJ8WŠ +AF™Vd~á,ÊÎ6ëm¿ÛÆ ãTFØ!³fßVu¹³Æ.ç% d¤©Ò„raŒ!TæhÉæ¦9Ít¸IS.G÷¡&XaoBÎ]EŒ­ƒ!pSæ!}ŒŒ)ŒÞåB|]ÄBR=ž²8Qð6‹Îrˆ™G,fð_ºë9$’É Ës»mܵå~Ñ’XÓ,ú#¶wJw}»«ââš«kÓM±^œë †±ä>\!ŒåßÅ@2⌒îõàãS¯ÏüÚ÷±úÍ.€Ð4Çò§~Rí€I·ßÄçt½vofÕÝ}»#³rW‚„ ,ú󌊨\Ò ß·-¬AºÇª(e+lû¾®3I³^Ö)<™¤.‹u ª£ÕÃMóyŒ¡™¶&|ØNAÐu]ØïL·î»…½5+Ú*F14c­÷XA×2£¨ôÕg¾„ÒKÞÊÝ€·ª‰^w¤½/Q Ì/ÃÙ•rv!ã#ÉçMßÌ/ß¼™Ng—ÓÙt~ý[<ÿ»ÇPeT·ˆÜr,"»¶hËMY·”ÌïKâžðŽ2bdÿ¤ùœš`>ñâtTcìÀ©v¤ùÔVM]¬­Ãp«Se¹˜uB—9*FE½$‹¢&K²ß•KÒÔ‹’+¤cY,îÇ‘3Is¡Ni]®üb¾n–åú EJYHBø$¶ĤªI1v êJ\ÝLÿ¼œì‹AL÷¹ö*Xê û>N§6 Ay¿gd½“·u[ü3ŠÅP£Êñ tŸ‚ÆvCCwÖñû¨‚¥€¦w-ÿX†‡æ.f\†X>DŽ¥‚Nq_¸˜DËfÿqÚE‡¾äL›P<åð=ˆ7¥¬÷øRŽ;S2ƒªEâQê#)neì¬Oaç°MÞí±µvÞ¾¶¶ZˆÈºø ¡”£5a¶s!;Éú‡•WÊCîí§rQ­*§KR¸Z9ešquba•òêÞÆ™¥µE%´{ôSÌá?ô2N hòcӶ͆P~Ò¬HkMcnCÓ&˜æÞ4<¸)[ÒCµ-ÁNѺ˜`Ž‘}1ªÜï™ ÁºiÉ¢©kh:“}( @6">«:!çîÙ¶±ñ.«Õ +¢‡zYŽbãFDý<Í`É5ÕÚ·¢[ÅÀ½ ÙËÀøCkžï7®;±ŠO³¢Ð&³b€Ùgª,áWÖZõü÷קáÁŠ!“»:e?²OðüËn {„ZGXHŽ«ÃÉ3´…½†õé°<¢­oò!ß™öýwŠÄ£ªæô…FoÒ¯ßGŽ•ò8LõŒ{Y <êãf õB h|!ŸÇ`×èpÙõú„ažiÏÇïb~ÄRí¤tÈáÅ~ƒSšŽö86Éh å‚iQRLù@l¡ +{õh:°×p¬rˆs”6@i ü ˜váÐ#‡Û?Úòñ¶'íéë˜ £m–?¥LO®¨µ§/2Ê·ß[èùÐ +*ðu@38éÜ-p èpD–݈¬¦‘M?"£}ž"hë ªgøhõ‡]ƃxße/á¸<Ô‹ë««' *ºùú…sòsÝ8ÑyPÔÆ“p8|3‡÷Óƒt 6ZÛ<– ëFM—ÎpˆÆPÒGc†¯fÿÔœýr´æ|óµƒy6ÜÅžMz~ð›Aúë.6øãÍžì,\Aa¸qZiCó#Vt¥ÙÎ…‹êêqñˆ2p ´g¹=. +>˜÷k§Ã?å<ØF2º}w3J¤iÓ“£“$_9XÖ [YœìŠý FFG»jÆ¿é¹ïÿ 0oâšM +endstream endobj 1234 0 obj <> endobj 1235 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1236 0 obj <>stream +hÞÌWÛnÛF}×Wìã ×{!—ä£êKáÂI YmP8} ¥¥ÍB"’ŠëOê_vfwy“sOLJâÎåÌ™3CAî'?ßrß.´" OI”j¢8iÌ¢Xü´^œ\"ȺXI8üÁE¤ ËR’(θ$ëý‚ƒÆ#øn½Y„Œs®ÈúqqK¯Î/HÌRrzrúâ¹n‘²”Ö÷M¾ß—Õ=¹¬:ÓùÆ®WʹŠ™R$L蘬ϜÅh°-FÛoš ’E´;dUº²2­5v¾^hÉ 9ik¤ʲŒ°(E[6;›°ýrf2šýàÊþ)€d†ŒÀQÚg‰C„»_åŠXLŸˆä"c¸M‚PŠB–TþGîû òH¢ѹnj÷Ýö°éH YBì/Æ}ß´eB¼´®\›-G¸¤Ô â…±¤>,ÆòO€G1„8£d¸}üØõ û1VÿÇÙ(ÍR„Ÿûpí "W€ÿÄçr·s7«òþ¡kÉÊ´Z@)&èû@&LQ³e=ÿ=…i)¬¡s?ÑÔð Nô¤¡m¯%˜Ç èÍSÕåë¿àtìNg,Ó®ð-Äš©-Àai[ö––UGv&дx¼ÊŸL³„¦¯ªüô°?+ üzÙ˜|•weý–:,‡€Ð;ìlA·õángˆs®óˆI¡³ðØ~ 0„šæ»^zYñá*&c€ãÃômà,~ 4¸w(xÓKÐ/bsØ›ªk½qt ì ±ößCƹðÊ&X–ŘZ$eS½²ya»yg6eQš–t†lû Šø·” ÎÜüLr‹¥DD Ô›fHÙœ4`HÒ<€vq¸y ‚ÒB-ê1:¼«»®Þ“Šâ¨ 9KOpb¥uaìM—ïÈcÙø˜w¤lm©B$$•\ΧÝÔUe6Ù’®¶æðlÂúfÕßs +“Ù–E!ƒnËzk3M™¯H_N…SÊVÔÞAQcž2z~ +5û–AŠ $Dž«Ò ¹`¹ç¬}æô`ý祜4¼mŠœ }ý¸›—Ê°(¾Ý< nx¸xìdKq®µPd2'2 £ãºtùz}þúõòô·Wg—ËÕùrµ\_þzýæjLƒlbÁN JÚ.ï ’›‘õCßoÞi°_ÍÄsᛢ8ñ‡”©ßb)¯¶dƒ§¡bÊ‚¸gŽ´–0w¨ Ô©+<꣦Àd}8Cò7“oŽ²ƒIͳg\) )= ^åæ…Í »©c=p:+ÑÊlPB5¹u?”ÕaCòq×âåå\bBjbyˆôkÆñmCuñ‚‚ת=v毳ÆÎþ×cZ·ÇÃ?PøüôWß5ý£ÌꆅáýÜÐ)0r’UV9‹FuC£7a·Ìa0†6\㈚áÀ'ïò²iqº‰aTúðíKvõ,‰xäô`öcɈ±† „üÐB3Žn»Éd¸d¥6øñYh·ôSãj°ÚYK³©¢R2 íM"ž¼¬ÎÃl‚"84¶l”’Á¦!à…@§ˆÅ~|v~͸fÐmX3@Sè‘$Þ”[3ÊâìyÆVkM¦³¶KÜ\žã}Î =šÉ—- >F¾Ñå°SJésþÔj1[Žvÿêô¯Õ  +endstream endobj 1237 0 obj <> endobj 1238 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1239 0 obj <>stream +hÞÌWÛnÜ6}߯ࣈDŒHŠ”ô¸õ¥pᤆ½mP8}Pv¹¶Š])´uýIýËÎÔuí&qR °±ºr8sæÌ™'w‹7?Þpr×,´$I”’8ÕDF¤6‹íâ‡ÕâÍ9'œ¬¶ .Hpài²”$2b‘ «ý"+,ŠáÞj½YE’¬·ÁåÙ9Q,%'oN^½"W5å)Kƒê®Î÷û¢¼#ekêm¾6ô÷ÕO°•t[)&% 9ãZ‘Õ©³÷¶ù`û}MC.X`‡\W‡¶(Mc­*Î "Í”&LÈ,Ë‹S´dcÓ‚%º{A3Ož&‰´!æ‘Ìâx§]øèWè#œHå\|›S3<q*8Mh(x +>‹€S¿ÊÝ $Nž«ºr÷6‡uK¨fIð+µOŒ»_7 Áß *]n„x ¡ }I½/˜!ôåoŠKÑ‘„8£¤?Î.Ÿ;~ákÿÕÿñk6R³á|"íÀc—€ï²çr·s'×ÅÝ}ÛkÓ¨)þ¤"a20Ö€§p",…5”îPÕj^Õð¢Nô¨¢»B^ÃDìÌöa [–ùÛjcvtõÇP²S™rÁ‡}ôö,±‹I튓%ɉ[ªºj÷ £a¯Ëåogד äȸ­3@´1붨JF.¶ä‘rð!¨¤ùdÖÅöÑ¥…ƒFe£¥ƒŒd.-í}ÑtÎQ®˜^C‰‚¤8‹-®ó²¬Zg0)ã©É“ó¸ßušd2õÁYø.óGS{ OûÓb»½)6fY›ü:‡P®Þ_N‚` (5ÓÀÁlï iò½™cšˆ/AU°l’6áI+„Û CØ-ò ”ŠÅ°,”L¨A¡“a£›Ç²Íÿšx”±L;áÄ$[Ái$î»”eKv†êà)¬ðö®+=Qÿ"dÀzS>î:H´s f‚ëLåz Uê ßðе¡>{Be#ƒt‚äv”’¾vþßKhyÈtwØ›²m¼}ïh¶`Ü+¶åtð'xb&â6C\̨eGíH|cÉW˜ÆÒa}ØSè0Ip ð³¤@b85xMr‡©¯˜¥é@í Ö4êç~gG£º84غ-ï ärݽ ê”×Î.g‰1K§Î°ÉIµµ‹÷¦Íw䡨 \æ-2ô渚÷1-‚uU–@N³!meí!jàt2/vÏ.Ü|õÞCÛÜ `®Ü™OJ—T‰³Í«=Ã.¯à½Ø3•Šx 5M%@Šd¥"‚ýHmk‡F –;öÚwÂ2Jj5«êàH +¦;![,ìæÉÆ»±Ã9e‡¢G¢rM¦œ†q„ ~¤ïËw«³wï–'¿¼=½8?¿¹8=[^Ãÿruñó\—8l?Ò%ÞåFz]jÚ¼5ÈxFV÷3i +…`*:Êï7;2t̸š9‚ôª>¡–éÐD +9ZØaè•5/7¨ú䣺ǪrmH¾Å)‡€Âç!¤C&_ßOàäGÀ]OM<Ìqê{׬©N 3ô ô¿Ë¤Šº©å¨ÇfG=6ciüD‹ý|‹ðû\‡…ï +.A’ïÜ`§ÁC%Žõ}—/j¬}é}çæ*™îšëK{«ÄIðÛz+èϳí-Mz+ô…Ⱥ0í­åa…}õa×àáõ”¡¡_…–y”z1qÞ~Mß mH4PÝñX6óÍüâQ/Ú¬¶ãB‹`AÕÌç…¬Gáóƒ°2è¥#Cœ9A˜âÏŽ Ý'‰›}gSXùòVmÑŒÍñSß ¤o¥¡u—CÿÆf8-OyQ7Øyß\½ûöc‡gÑ 'F¡r÷fŸ‹FI’ó‰!hèõvøÉp@ɘ®ÊñòÈ3·ÅıÁ¯Kâ_}š*ÈÜ›š¦à·ð€?Ê^XgDôßkÿ0@H!š +endstream endobj 1240 0 obj <> endobj 1241 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1242 0 obj <>stream +hÞÌXÛrÛ6}×Wà‘œ”ø¨ú’qÇq<2ÝL'é#‘;™!©¸þ¤þewÞ EMs›vì!)’ØËÁž³+1ò°xþ⎑‡v!Q¡&‘–D„¤ÉÅâçtñü’FÒbÁ8 áNL+šh¢DHCNÒÝ"+4Œà^º^4 CAÒÇÅïúâ’ÄT“³çgÏž‘ÛÆgšj¯~h²Ý®¬ÈUÕåM‘­sÿ÷ôp%¬«˜ +AF™ŒIzn-F£m6Ù~Ýøã4òJ°CVõ¾+«¼5Æ.Ò…äTIÈIÒXÊE’$„Fm™ìLÂæ!äLyä<HðaBÊ# ‰!!ð0ÒCö‹1D¸±ðe拈ÆÞá!óƒ.•p¦!dî1ŸÁ1¶÷á1S‘Btn›ÚÞÛì×ñ%UÞ¯¾y’ÛûM[úÄëÕ‚k² .Î¥B¼0ÝÇ‚„±üåãR Dk”Œçƒ§ÎÿòµcõüšÙ!©FøÃ~BÙo‹ì|ŸËíÖ^¬Ê‡÷]KVy›„ ÌûèsE…—oèPÿ} +nJXsI-Ɇ×æ +^—*¢jb5Òm ×&‰mî `[ñxù<ÄÒö£ V&›%йª2ã_ÓXë8¼³ýî®ÜäË&ÏVYWÖ~úÇÄúI`0ŠHQäüÎRk`– ÃÐ^#é[’U¤ØšÆCW8LüÞò&½¸¹YžÝ¿¼»:¿X®à™^½r£T%cÜÜxôHÛe]¾Ë«Ž’ô}NìŠÞ¡âõ¿ÊMh 16‘PÁô©1AV˜¡²7†BÊ–ÔÅ*Û ²F,À +Øæj´³Oç]Nöm¾!uÊ $E/ÓûÉ ‘Í>+P^ólýÞÍ|¾FL0oóâ±/…—õ&ß:‰'4Næëž SôÕX'eE2×–¹†¼¦ÆN>¯—¿]¬Gb*¾¡|Xï£Í×íí³Á> ¹Ø…Íš¿{ªºìO'œ„&Ò¶¼€’eH…)YDڔݯ„}ÖHo„dƸmhðÖ³BqQÈCì,ç oSïßm‡r“C}s&Ç +-€o€þô²íO¹ËLÊ©µ·¾“¸C¼˜…ëÓKèÛHû‡=–]ÛïÃÎÇý ¶V½Gî¸0¸Vû¸U˜rl66ânAá•´¤¿û¯Ë¢ÊwÀÀõ~çCUÞÞ‡ÃPýá‚ÜQ/3‹µ•ÑAŠŒ½Þ`ã+ +ùp@)ŠB¸ø ú3d +ôÀñµ°WäÑgrx$8k¬]F•˜Õ²ÔÖpž‘º0‹wyÜ|,›>f†±feÀÁ›—òlhªêŽ¬ëª‚"Žvµ±´)‹‚‚–¿)S>‹!MÚoÅi1#©ûš õ¡”óQÊ…•răš´_‚’µ³ÕÃívßží;w\sêG踟 +ˆp¯^ݧW7/n¯ïïÎîSWR#*’Ùúaâý¶L"N +ì•0@ùph@gPtú®•°#U fs–EÝ@ù­œà’¡ðún –¦mNŽøÕ3ÿ†ô¸3áͳ;ê ¦)pty »Á$ò°ó¶pRó±tab>˜Î¹«þ×ÙSÞœlÊ×öb§uìŸäŸÓdðñ-€3 +A|Sà‰†ŽO5‚9:–Z>JÐÈ®·(Пc65E%Û Cæz µI`mr +a>‹çœÖÞyYÀ9ñ +xy¦áí•=¡ žæ8l$øÀŽ=qœžby$OÌ = ί./O MlÚT§ˆ99N?Á>EÙwsŒ®Ù‘¼X1•a|È”/Ý/ûäg¥ˆ©\)Íp'ÉÊ §}‡M¾“>W—¡È1eúË9Œ$E?jð3ÑÔB*±æÝñxüa@õ}ýª F’¥WïIk¦†'è¡ô(ó‰é¾Çà†j”yÓb¹´g-r´„z0ì&€ }ñ9ó€ÅøEèöõµ[n e³Ý·?-˜£ÿm‘ï1WõQ™±qä·‚gF™lwðÕÅm)_´WCûáÜTWOá)Æö-zÊ É +þÙ±z'Üþ¯fjøÖý·¾†Ã +endstream endobj 1243 0 obj <> endobj 1244 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1245 0 obj <>stream +hÞìXÛnÛF}×Wìã‰6{!¹ÜG5¶ njÈBƒÂé--TTRÿ²3»$Å•íÀI[ ‘âe.gfÎYûÙ›o¹og©"šg$ÎR¢8i쬘ý°š½¹DU1’pøƒƒÈ43ÑŠ3.Éj7ã`…ñ®­Ö³9ãœ+²:ÌnéÕùIXFÞ¾yûê¹n"‘±ŒÖ÷M¾Û•Õ=¹¬:ÛùÚF¿¯~WÊ»J˜Rd.˜H²:óãѶ8Ú~ßDs!YLK°C–õ¾++Û:cç«YÈ(eIJ˜TÆÂâ -¹ÜRÉt:܇¤™Œƒû€ B¢ÜMÈyDÄ8 ›q6¤‘‰c„•øÎ#³„>ÉE4OàTGs)2ˆYR øLüu ‰èX#<×Mí¯möëŽD)Óô×ÈݱþzÓ–Ñâ¥u…èºt9â%eª0Œ%ëcÁ +a,Eø*¢‰7JÆãÉ×çŽ/|쿱ú?~Ì@¥,Cøy_žö±/À¿âs±Ýú“eyÿ±kÉÒ¶f@)&èçHj¦¨Ý°aúÖÒµp +£û…©†SN&z>fÁ} ˜_Ãv¿ßÙªkû™M½!h@9 ,ãnèç|»·Ñêãd fL‚­Ëq²Õ0ÙR7Ÿìº,JÛ’î£%9pDU変4äGðÑ•us8y Ó)“½¢S`~,F{‰ ÝÕ]WïHÞ؜ԅ»t(1:˜ÆT_óaÐÆÂ#yGÊ–¬ëª²ëÎnHW»÷ð­¹°Ä)M‰!i|2›²(öm £º)ëD e=vCò©«ƒ;ƒR$0ð+‰I¶6R0ÈÅá*$g)}ˆ„Df~h+÷ÄYYÀ1¥܂ƬÝå¥?„ׇmH»A/$ ÇP WšÙ|Žw3dÝêCz3‰7Œ7 ydn=]¼[¿{·8»¼¸X,ÏËÅêò—ë÷Wa‹(¦ÍX élعˆLK?çUþ`‡ù‚Ñ*p –92QÐUÀÀÇæ=-1EþhóÝI'LËI7~ ¤Rö#Ò#ê_è©Y +øc ™„Ýè]Ü€ýG<+}ˆ‚r­Æu}œãmé^$ÆÆõ¸~zQ‹ä9¦÷4X¹Žª G€œÅ“9·"špã?®Å¹ WÀb‡5¸—ȧ¼lZ\nb\”é0©Pñ, ¤Fl’c;fÛ¶”Å&yDöc²PÚSQ2F,äS¢ä¸Õ?{¦]b(¨6B2y·‡3ûuƒ<òeüù½z*œ&Ê áЃ€÷ÅE#ù Ć„Ai<¨ yª6ÒQmh§6 .Ö‰Š‰ÞH{½¡ÞHéMá/Ÿ=òäóZC€Ø1bÞ«AÆ©ž +zÏIŽø’ãæòì|Ô!ÚñHÛÁºŽµÖÕ‰þÜkƃm/¿ÅýãþœƒÆ•Áºý®F¾«‘'ÕÈM9™4öÓÌ¥Œ1ûŸþ+…”™¤Œ®¤…öu%øe§Ôc‰¿Oÿ`Þ•R +endstream endobj 1246 0 obj <> endobj 1247 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1248 0 obj <>stream +hÞÌWÛnÛF}×Wì# 7{á.ÉG5¶N*ØjƒÂé#Q6 ‰ Hªª?©Ù™Ý%EÒŠãÔ-PØ)^æræÌœ‘ w³7ïn¹kfF‘˜'$J QœÔùl3ûa9{s!ˆ ËÍLHÂá"‰YšXqÆ%Yîf¬0Áµåj2ι"ËÃì6¸:¿ š%äí›·¯^‘EMEÂ’ º«³Ý®(ïÈeÙæõ&[åô·åàJ9Wš)EBÁ„Ñdyæ,F½mq´ý±¦¡, + +°C®«}[”yc/gF²Ø@N†iC˜Tiš%hËfg¶7!g&£ÑM€Pö&¤Ü’ZR7£¤ËC„¥]„ï3ª"¦ƒ"¹ ¡†Ó˜†R$² ð©ÝuyÄQŒè,êÊ][ïW-¡†ÅÁ/ÔÞÉÝõº)hñU‰àÚl9Â%¥‰/Œ%ñ±`0–¿(¾ŠÄÄ%ýqòõkÇg>ößXý?f   K~î À/€ˆ\þŸóíÖ\w÷mC®ó&‡PŠ‰à*c¦‚|Í:þ{ +ÇÒRØ@ç>ÑÔð ‰Í ¡m¯Å˜Ç ‚›‡²Íþ¤ËßámíÞNYj\7à ZІ©-ÀËÒ¶ìmP”-ÙæÔ›ÃUö×shú²ÌΊÍ榀Ëë|^çÙuÖÕ§ÀÉ8D„ŒæØbg³`]í?osâ¼ç=bR˜´C\;Äo‡ÐÙv‡n®øx“Ú¿ÀñáàuO¢wozLÁ´¹Ûïò²m¼q´ ì&„cíÿqäÎ…m‚¥©ÆÔ"Ù6Õ6;®Ü|ÉWŦÈÒÞç$sxp-ÈhA-qøþšâU²wá@|*Ñ.GkÒ8“8mÑXS¬sr Â0‰Â0*øIµ±÷©b`ÄåúšEÃãYKŠ†¬ª²ÌWm¾&mål@¡Ĺ?™á¢7“º¨ÖÀ}SÀ [Õ:§B³4`×®( +ÅÆÖÅžAi4O˜I<ÍDOÑÛh†õA¢QÉqôRˆãä„ÏŽyö u°[IDDPT\¶cQ‘#J„o•° õªgU)AMj xdÌA„´Ñ±Ãæ–ç>ÌÏ./.n.ÏÎç×ð?_^þ´øx5æa"”ز& M›µ9“‘å}×+ÞkhÄÜOÄžÿÿÜ#fn )¥OùèQ}Ë ˜U®É + øœ? U¹>oP¬ólu?&tn&¤QG€¶ùæàkøè²Ř2žä,÷øÔn= EI²1: ƒ©à|]Í=¿9PãÚ Òñ!UF.7¸1Õž4¶|3Á–”N nÏ|´÷™;À@K‡¸Ô8‹-ˆeÕ:ƒ¡L˜Hô'qïu˜Ú`XøOàçÇ5OYœõ̃àÙ1’íò)†±ü^û}QJOaçh*‡ +Z˜„8¼û7¿S—TÂ_¤K0 ¾*Mhf¤KP:nýu©Üï¨I‡mƒ‡×îû·–ûP¿GýÖh2ÀNV<–ÍÔ™ù¥Îj+µ-®£AÕLµ6íQø¶Øª‰m”Ú!a!Fx¿%¸Ýnæ:p"·`ä3̧jƒf y£Aôƽ¬’^ÁB®@y†ÔQžÉ—¬¨Ô!Ñkšé&””„>’º7ûµdÄ UòÔúpÔXØ# d? `/i¨ˆrÛ‡æ|H/Ø1®»áé˜x®:MM@X| m¿Ø`$†ò سM‚);í$þºƒâ/­ô'Cé×Á»¬…£ñ·Û}ã–˜OH¾€¥#5ÎõKE_?ýwóåùâêç”â1¼‚©áÎÚ½?QÝ •ðð¬Aܬ˜ØR¿?z¿¢‹¢X +«š¬ö03GŽ*•[˜4ж¦ZXŠ„Hm·VLÆ–‚è'4ûYù ±“mæÑBaûR0ctߘÂ!xrÕ¯C0ÇÍ4j9Þ4†¢ðxÝ€>±o‡ÊsÖp´¾žKi{k<~ðt,—Ö<üàû[€×E.à +endstream endobj 1249 0 obj <> endobj 1250 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1251 0 obj <>stream +hÞÌX]oÛ6}÷¯à£ÔV¬HŠ¤Ô7¯qŠýBbtÒ=¨¶œhP,C’×æ'í_î^’²I9 R ’l‰—÷ãÜsÌÈõìå›KF®û™D§9ÉrEDJºj¶™ý²œ½äS"ÌMˆù‘Âä¡ p3ËÇðÑ3&ÑG¸Òºø¾ŒEFetGxÊâDÂ¥ŽÎrð™G,fp”ö÷ Ñ™Æô|êZûÛz¿H¬¨Ž>ÇæNeïú:NÀߨÝbvM¸)æ‹s¥1aèKî|Á +¡/ÿĸÑÄ%‡óäëCç'>ößXý?f + Í1ý©+@ª\Xf ðSöœ7½¸¨¯o†ž\T}= eÑß1×TDÕšŽ à ¬¹°‚Ö}¤«áA¥•×ѦÙ4F‘bÑåÝv(¿ÇË¿`µ´« Z(Û x¤¢"C °˜›ž½Šêí@š*VÑæÛ»ò®êæÐõÛmù¦ªO ü¼ïÏêÍæKdóHSpÁœbwÍ¢u»ÿÚTÄn¬ìÆåLc²¥MöU´ƒ¾ˆš}'´‰çór…§¡íÉ|gøŘHqyô%¶{Ü›ÜâÖæÄm6:À=×ûÛj;ôκsú‘ü…ÔhÖD»ÆÆ +>¡?f7ÇyŒ…ĸ3~à<á8Opm1t¹«Võ¦®z2Ü”*RÚd’.Ö‹2†ÃP·“à^ž»¯¢kÈ7)»ª$ýM»oÖ¤Þ®šýº2fÖõ¸"s F®uÖƒÍfß×À;ÆÎm DVDûÍPZ“¯1Oáû]œ&I˜•*¤ÇíP¼#ÂIOü2‰‰hˆ *¥‘¸L™GLê Ölḏaëž”dӴ倳j×"Ž¡É2ª0Ï´*f.¨‹rŽÀñh°c®>2Í©Ê]_¢Æ¯"h Amk`â4$’ÊëáËØ+æ™÷íÚ>Ü„ã2j–3×Ãf$Ê”ƒ™9ðŒLˆoK®ÈhÆü¦°…™X.>|˜¿ÿx¶xäPS>Í nƒÕ¦°tØ”,eá^š¦ùa«ÇwaűR÷XÇRµ;Àý¶l ¦5YA`_Ý~ ‡!YÌ郫ò '̬èÞ¶v¬m·« +úêðcGyéy7ÿcqx,Žs`¬@*Œ(¯«zJ²IXfL'‚ò£èùAöÍeB=}LÍCœ{­Úm?,»)»g“6†ªs~ʾíw$Úz]…e†ˆ”dO%Z!s¿?ÀµÚ£pݸŸ_™ éÍÓ”>¿V¤9Eô=Îàö3²‰²^‹¬×‘aäM!îé„4u¼ æè⺼€484[ÔÅ’ +IPÇ’E¹ºqû8 ÷‡ ¦ÌŒvÃk‹Ø¨à“màÐÅ™6›àVäífl E•–S¥-=v2F$Äš ŽÝ“ÞìwwÊ`é„KŸÚÐ.¯Ÿ_Øù†k´ñíø¨“³†‡qÞc™˜”Sëhâ¨D±4aÆ|cê„âž~Â…<¶òVLüí« â‚‡DÃ\61ÏÕ[Ðü Qãð€ßî÷‘ðÇ[yðxÓÀYÁÅ·'©æ`Z°03«Ã{ˆáÇýv¨bjo]~õZp ›$ÈM°“"þ5{Nð|’£qZg£(€EBì1íAï3ÔVá¬K Ï\CËh½ +§W(ãBʦ<÷Ü3oEÑÇßßž-XHØTz•6QD/&–¤ò·1Fø 懵"&VÔÑc;ÀÓãi»ÉL¢šŸL$c6›L˜œ¨½<]*œ’úÐÕ«Ð,΄1q’56>¤óñ!n5®©½²µÇIŠË£ž·üA˦Òc=”Ÿdµï:ÀUƒ*pd*8’~¿ÛÎK ¥òèÐ'ű,Ü*C¿7á 9ñé^[®×…]b“x0Æ'QˆiZÃÐ#8%0-e/‘:—GÁ-j°«€›ý,.GdhÛ¦'»Ò(`ÔÒÞ¢a–„ûÊ”­¾ÞZ1TÝÚƽGÔ²ÆÉ(7<.EQ;êY¤7TMØ»À/A{ ótïçHN"²êüaUkë$íؾž}PÍÊ€Ñä £]BJç‹ùùüõòc¨á@†Ëb:,> endobj 1253 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1254 0 obj <>stream +hÞÌW]oÛ6}÷¯à#¹Î¬HJ”ôè%î!M GÝP¤{PeÚQ¡H$7õOڿܽ$eKvSt@ ¬OÞsï=‡d;{ùû­ Ûn¦‰ƒ„„‰&* ­™mf¿e³—¯$ÛÌ„$üÁA$1O«€’d³¬ð „{Y1›ó ÉžfwôzùŠD’ZRÃdȆ'*r¾Î™ +yD÷D‚Í#8Ù\ŠB–T0¿‘»‡1¢ó¶mܽõ®è Ó<¦2ûĸûmW²9ÄK›ÁµÙ—”:F¼0–ÄÇ‚ÂXþa¸‰‰3JÇ“ËçŽßùÚÿcõ'~Í@iž ü/@ }Dè +ðC|.ªÊ¬Êí}ß‘•é Œ€R\ÐÏLÆ\Q³æCÿûŽ¥ma “û¡†u¬Gmg-Æ,Ì€Þîë>ÿ²O°:r«Sžj7 x‚"ÍUˆ`±´#{G˺'•ašnž®ó½i0ôuß–k³há¶É_åEß´¨C’¶s€óu9£ëf÷±2ĹÖÎuÈ¥Ðéwäà¾æšæÕ©ø`ç~ÉÈò(È¢©»žÎ}ÞþBÖåfó®3oêjÿy;_ƒ,Jm¶óCÅï(ä$PÒv÷`ê¾ó‹}Ø0§r 5WÐϯqÉyþš¢Ü”¦#ý½!ùúÓ"nZòþèŽ Zõåcµ'¦Íáºè­st9¤lœÑIך`cƒÍц!¿8û®J®».&&BßÜÒ67}0}^‘"¯Š]•÷eSóI›ÌeÌ:É\¦Ñ±³F`?ƒ8ꀢ—6zúæ‚û¼uˆCôyO: šƒbÑ8x5oEŠ:@óÞf]ìÚm²G 0Ña°…—@Yrè5?ؽ¤»ovÕš4ùhÈ®3k¦6O«àOÐÞÓ½©] „Ð=6õ² PC˜Há`\Ê^«k×á"æ>-ÎQ)!:ˆ¤o¬q„z×a…ˆk§=™” +rcŸlp¬ÐÍ»ëëIi$WéÓAn¤o)ôWnkP²„«5àDKÁyÇæðë‘åXé}Ѓۡ¤¾†T¸û°3hÏPˆUÊuâyG¸qÊÁ1DÒaÒC…* +¿ Ùw™|•÷pÑ’0 +“-ÉdêC€É¥Õ}å—X^ÌÞnK cØ–tÐKdÊD!õYCºŒ7Ùòæfq{u¹\¬à‘]½™Î„Šãb=8—ƒÐt}Þ É äSß1?Ìuzp-N]õ¸>ëü®Ä¯‚fnC\¯GêudzÚcp'Žu†!kêèjƒ;@“÷' pýõ|+³yòMðºY›j’+ÌÚ$Õøà;õ©¶n³IÊšä'G\$ǵ£~¾^¼_®Næh +©üăŸÎ–QÉT…æ°áКÀHÉhå÷«µ‚©ýíO©Ö˜W:â! +2òPŒ9…]rÙc9uµÂï(AÏè9N¿NÑ»Õjy“].on¯²÷ÏQÆqsqFÆãŒá‹í¨µƒýgÌ''Lqع ɘ{Ç„jk ;ˆ†O¿¨=£Øzê=Ò*ld,·:Š›°*@(Îv çô¦NFd¤×.€•rúä: +endstream endobj 1255 0 obj <> endobj 1256 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1257 0 obj <>stream +hÞÌXQoÛ6~÷¯¸G©‹Y‘)ñ1MÜ.CW‰ÖbH÷ Ør¢Á–3IN矴¹;R²DÛ Òa†’,‰wß¿»ï÷“×ïn8Ü7-!‰RˆS 2‚º˜,'o²Éë·8dË ážxš0“B"# ÈÖ“­°(Æ{Ù|2eQIȾNnƒ÷³· X +¯/~ø>Ö!OYlîë|½.«{¸ªÚ¢^æó"ü-û ]IçJ1)aÊ× +²Kg1ÞÛæƒíÏu8å‚ÅA‰vàz³m˪h¬±Y6Q±Áˆ4S˜Æ`qJ–llZ°D÷Ï1h&bï9æ„R"íCŒyŸcó`Æi>!ãŠ0â…TâÏy(c¦‚ˆˆ‡S…—I8‚Ǿ«t`ÓQ»—#z18£`¦†¥’˱×=ö`±ÙÞ­ +pAwNc&¸>vúD>óÕ–Nž%ÊŒ ÅS› ŒÍßtÏ¡Ûà§Ä.w¿]cÖ?Xù¢ï”ÇÚowüØÆ>ößÔµÛ)&FQü±Ø·[á·òà汘—˲h }(àòæn aU®Ëö @Ýd×W³/9ØLOÔ…½~5mÞÔ€d´õž«„qqÚÕ OºïFÞd'…>ôeƒ’õǶ¬‹”T˜V}TS»Æ&F>àÈ}a¿ï8|¾ºÌ~ô° Û_òÐ]#÷ØÎ,9çywl-Ïp³ÇKyÏf·[¨Ì°©V;<Ì ìp+p Åà@Åüå3y9ûps•ýêNÀ{§äÓàež L%õZ˜’4ù…þr±—X/ûQ5âíæ[RoWzª€­52úHh«ízF"‹é4TêÙ¥pÂ>ÖyL”H’“:Û ý+x0b³ðkäDñœùµ–/|ax·qÿXõcãä’Rsªíí5SóÚœÐw´s‡º´YZV£b˜gæÚ»™@‘ V!©`…Í‹ÐV,IŸH9q8 +í[[j³ô›ù!Ù/¹T6ª‚âÙÐFã€ì!žLŒtâ±`Ý|àÔZ°~T&‹î‚lµ°À¡'Vœ°„MØÙ¡Èç]S*±Î¿– gN2•êUÿ­ˆ!µgÔ ºyÁ|ÆK×8kôåÇHÂX2DW> endobj 1259 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1260 0 obj <>stream +hÞÌXÛrÛ6}×WàLB„¸“}sm'qÇM2'žVé#A2;2•RTRÿ²»I‘òµMÛéØCÒ¢°{öìîYÀœ,'/_àd¹™Il’•"R»Ébò}>yùŠNòÅ„ ’ÀÜxjY–+–’_O°ÂŸå³IÌ’$‘$ßM¦ôüôÑ,%Ç/Ÿ?'ï눧,¥ëe]\_—Õ’œU«ÅÌE¿ä?€+\i&%‰9ãF“ü$XT½m¾·}YG1LÑì‹õ¶)+·ñÆNó‰ÌˆÉ0m2Ë2ÂTŠ¶|t>`ÿbfB^%øé_BÈ=!™§!#ðR¥]ôŒk„R„?‘TLÓ"Åm ždAyÄáªûϹUÙy_¯Ãgóí¬!‘a–~Œü>¯7e^º®\m‚t a,ò…XÒ &±üáRbI0JúûÁŸ÷ÝŸøµÇêÿøk>Ò°éOÚ$¦MW!ÿˆÏ£Õ*<\”Ë«fC.ÜÆA HÉ8ý=–Iê欫ÿ¶„­ð%l shjø¢±fÐо×,F‘`ôÃMÕ_£üWX­ÃêŒe&t> m˜Th ß²SZV Y¹ÈÐÅqõÉñe9o®>Ñ@KÀ;Vo‚ít2ñßnLp žxGžZ¨Òj{} @ÁÞ®6­ˆèNDRcuX•à +ú­Æ)Öò¡ÇÖùzûyåžXÒZk1(–r¥C »H–qm‡>E!®»È×™ç-îkgJ@/%ˆÛr{íªf3/:DíõxNÜMpÔê)gY¦1b%z=íB†ì~q³rQº i®3Ÿ¡°ÀFÆdBØ«pË—¯êõ‚ìÐ!òSÌÐ"‚Ëj "ÌñO6sÎ$$e }_c»‡°óý0Ý0àí0Ãß•µÛÃÊ@:‹(V ˜°”¾ eE®ËY½®ÚO:¨]r$Î8Ÿÿ„ro,3]u£çö”®Öv$ù&â¥LÖ~"E +rX-Ç#n”{%3tѦ_ð–dÕç§\-^6§!L¼¯SÝÕ©Í%h=9»8=ÎÏÞ½1«™dVv” +ë×¢š“Q·ÃзL_žäoFfå^Û]Ù4Eã| “E$%]GœÖ¤8€äéó£ŸN/î2}G%‚7kÊuÅH0Âm«Ìã¤ÈL?àæ+±´L… +mKú)ìì)ÇR’m{š +(àÚý¶…Bž{Ÿ3´•¨Íž^Þ¥LúB¡EE>;²ÝÀ’uµºËÌa™cÄЃÆÜJäÃl÷ 'Ò1Ý#A‹%nBH,™Ø÷ê_!šLŠGFHØé-ï!S:ƒ¶n€4På¢~v å@Šì––Ïq[Ek7ÃwkžX©{ö4Ð?T 30¢ÔhŽ…Y2e BÜd‘Ã)"töÔ!"5’o˜#s(<Ÿàǵ¸Žn«9Öâ/µ[àÎÄRW×ÞuŠsqÄ#”Ôl’Jz߬åNµÕb£ÙÖ;·þ"o`øÀUÓ­´œ~7–^H•Ñ÷¶!ÈUûÇá|Ã(ÚÖ\V+Ð/ ;ØÁ[¨Íeç@u)a&½Õ`dD%Ôø€Ï9—J g%ŠœT¶ùñGŒ0&Ÿ8%ñAß•˜9äE +?á²]5!>>’Án7›dÁ¤)Ì×f‚øQÈBe‡mjí–ÛUg¬OxÜÂé“VÔ8­ý)NSh@P84Gĸ‚T‚'¨柆tâñ'Rn,Â#Íp°·Dy"è›wg?¿{›KÙ€ÿ½’v»õV`È—Â÷’€H½[aÈM[ÈæpRL) þJŠ¯å†ÀoWü‹¿Û™СÁgÍÞ)—O/ò³ãÿøÍß>Új½VúÄ£‰š .Vk¼¥ã¹[F÷R5$ 8KR¶?íö"вДGuÝ܃÷˜¹ü&а|€úÀƒÿf<ŠŽo +0Áy Õ +endstream endobj 1261 0 obj <> endobj 1262 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1263 0 obj <>stream +hÞÌW]s›F}ׯØGh¢ » »ð¨:NG;ãÚj;­Ó"!™Ž„@IÜÔÙsw!d¹NÓÎtE&"Š7*r!^¦¾ +yä=0áÖøc)bÄ,=á üÜó‰˜ÐPy®Ê­{¶ØÍkækn¼Ÿ|û&sÏË*÷Lj×ÛT]›n@õ’R*Å7±ÐQ,ú´”1ÌeÝuðóÔõ™Ÿý7VÿÇŸÙ PšÇTþ Ù€@7 B·ÿŠÏÉzín®óÕ]]±ë¬ÊÀ¥¸ð>úÒpåe Þ °‘ÂÔ=fµ"*[bÛ;|®MÈM‹ëÀ¿Î–Ÿ.R_ðóà (ŒîJË:‹½b5)³ôÊ{Õ Ë¡áDä£KËçÂr9&&W,-Xc&rfÀ"°+hÕ@(Zkcó&×çöûÞ¥ä*é}Ûm„Ôö{VÕim²¢ælv—1·¶ñcÀ¡fm𤋰砓&¡X^±í}o‹t¤Öª§u?À–ª2¶ËçÈþ}ÆvU¶`Ûbý€óŒåKc˘K+“fïÅä—ó냀UÏlÝÉ&ÚlNr· ÁŬ¸Üë¯Ù›¿y(êôóA, O´“EºÁVG‘²Í<Ù +Ýz9*²Î|í˜2‡öÎs4â°IÉ€ÄõõÈ[lwï×í6éRè¤åZä¶øÖK!‹Þ‚Q»Y:ˆÃŽ˜.ïÏ>j$- ¶æ'è_ +Ífµ£½­/MH`Ù6,„d}¤KOMdŠèh?‚Äáæ>›çË4¨OôÉ|ã£aÄÞÎÇ¿ Ûd5¡©´þ‰µj&2‚Š–Ù‡]^DK´]Z^²ûíúaµ-ÌÂ:pfBÄ=+ª…´4 •Ð?Áä‰ü~„.ê½DSÃ/Âè"ø ¯»"‡>YãTjŽT‰*M¯>ìP¥g¤l]hßpMùj¯ªÙMâ’µ«ä–·U$ ¡ú#ÇÔòpå‹›WR¬0’ÒÄPß9[4jôl‰ŽÐŽ"0µ-ʉº×[‹}»p àø%Ë—¬Ø8«°7ÛôX{9}{3ýõü0z \aš¨L3]°r‡yÊ[û"DMp×r¨‡üPuÊùrz¾§àe^TùÙ!X7É ŸÁNdÁƒPÖªA+¶pº$‰:ˆÀðc5}2ÏôE¡jS¥ñ$ ‚g™CãgŒ‡€\…"YJ Ò‚NŽQ¯Ò¼›{0ß3¶É²še9hQî¹Ñ%ƒ‚è~=Íßå$úPÛï¤ÃAªöôqñ¬þÓµ8«—®\b‹2öx“Å鎯’˜ë°k׎Žú¾r}߸¾/Ú¾$Ñ÷ÏÒûtž[â?Ñþ• zªúTûqFÑ#ÌͶÞÙäjr6MÞž³³«óë›^OofC,n†j7C}ÑP`׶c~}‘û£mµ^Æ +ÑÑð¸ÓúhèôDAÓ‚*ЭM´§k§aÊÁí9RÆGa>cš輪ã„Ä1 {øU3…L•¤Ìž3U8Lâ±…å©ñâÖ›C j6LJwiù ;ìê´õòxИÛIöéB¸§k‡ý6t¢ë•Šyzä!ª]rÿpè7vÌ{l|júº6÷Øàѳ‚ B)Ì`=ËÒù³]ÛµNDÝ;ôtsƒÐÍb—¶û|¾Å(‚=Ä f”ý C`9"Ù~¢ñ»‡*»ySѼbìa:Ü ›ÓÉNØpdq!u³ƒ JIꆸENÜ.wëß/÷qì¾_Û7yV>!v½ØÉ–ŽQ”ôô.Ǽ¦ö϶ìt°ÞÑé§=Xû8´çòÇ‹Ùôêb:à¨AóŽ†Íªß¾$oÞ Œ¾ÖgÒùCŸ¤cÖcÄîÉV{–Òª96‹ëî`²Šæà õ…’×5¥S²'-žwÂéû/EK|÷ +endstream endobj 1264 0 obj <> endobj 1265 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1266 0 obj <>stream +hÞÌXÝr£6½÷Sèf‹I à2MÒ4ìN&ëi»³Û bË6RÀÝæ‘ú–=Ÿ$ð&éþu¦“ €¾ßsÎ',Øzöòâ`ën¦Ëâœ%¹f*f­™­fßÏg/L°ùj&$‹ñ‡“È3^ä,S1%›ïf1¬ð8Á½ùbñ8Ž›˜½ ®Î`)ÏÙéËÓ/ØuŠœçA³nËÝ®ª×ì²îM»*&ümþ\)ç*åJ±Hp¡S6?s“ƒmñ`û—6Œ„äIPÁ»iö}U›Î;ŸÏ´ä™FNš§šq©Š¢`<ÉÉ–ÍÎ&l"g.“ÉC”„^Pö!R>¤°e(&ù=&R +*u¾*C•ð4¸g2a”â2 #)r„, +Sw¿@Y’Qu®ÛÆÝ[î= 5Ï‚ŸCûĸûmW…â ššŠk³©\RêŒêE±ä>jÅòwHK)Œ9£ìp>ú÷©ó'¾ößXý¿f 4Ï©ü±o@¬}DâðM|žl·îâ¦ZoúŽÝ˜Î€JqüÊŒ«À,ù€áLZk0÷RãEé¡-×2Ê"¦ ‚7÷u_þÎÇêÔ­.x¡è‚,¤š«„,`±´”}Tu϶&ÔÁêÃUyoZGÓõiy÷j¿Åí¾ºÛV¦}¸BòÑšc¢×Ù,X6ûÛ­aγvž.….†j§®ÚÀ.öÛžxÀ8P'§1>öœ'Yê-Ä´:x:–†<ì\M¼¯¨™‚ô¬÷;S÷·îãå _¤ŒvM°°)û|3¯x‚EJY'r8bð›;³¨V•éX¿1læèù"‚Á"[… ½Û:` +ÁuîÒ´Ñ"%´3[‘/šº6PX.ª¾¬†õ +‹fî­Z)ì’ú°ª^´¦ìHU;‘sò˜b{§±ñE¹ï݆̒2æ:¸w‘ÆziìÙS›²µoCNȤìCÕBê ,‡ªÒ-߃¡Š¦”í¡½BÓ8§@>ãÂ5ØT ¡“$p€|¬Ü¢Š­!ðÔ볪tÖx„Ó«ª>_Ò5­2W¦^÷!Abæól¥$že‘—;×ríbgZîfZÇJ6…­âÙ¸›êŸg—'¯._ŸŸ]œ_¿¾˜ÿ8Š[Œ«+¿YáKÜõeo˜Ͱ©_í¨þµ~óL{cUÇš»¾jêrëá¤$·æYlƒ Êz èÔìÖ0‹Ÿ¦ÞÞã@Š%›ˆ!Ĉß.Ú«“·ç7“Õ(-9@ÖrA‚ŒO„“š,GŠË°¦P&¢ÒGB¹5ƒàÃA$¸µG™öÛ¼FÎ×(å’4ÆéDféÜoŽ{žb¯ò©©Ò|„ëÏPÉlIKø`‰¨\¢_š'Ž\,lÒÅ:`õS¤Sˆ{%zDA«ºÚ…ØŠQvRD`+EØSǸ°tõ›Ï i­¤½lˆC ìQØÂf¹6¡ÀÆ,àì¤A€;À$œeE{ÛåokxiÖ´:kÌÔ&$ŸDxO"Üõž)~äHx²FÆ•göº†C;„'D‡#B¶ùnPŒÒ’ÐZ,¸ÈK|Øѯ]B-)® LIûn¨YÓ2óDZbnL»ŒZô]vL9nµz¢ÕSþ=¢ëRÃGB ?Rö/õëª_<+à/rçÌbbØöõû)õ.Òô#M"½¾œŸN•3åɨÉd;9–OÛ> ð¾¬j(imØ2 SP@U<¢n$VÄ@D‚”Ë0¢Zl÷æ+¯SŒß6,f€FQ’}5ŒOàÞC:³.ëõ–ŽK4oüh ‡T£a!} ‡uKÌ|ûfʵ|ÈL Ã,ÓòV¶;’ž"xlœ%èà—4"WÏŽ/ÊËW§ Ê'Š#E>l‰j7ÃÚa–Mâ… Å"ýÌivp74ü0ÏØåŠ*ßìYguñ½T|ÈFS[1­ûÂ&yË‚ïHT02„tê¦Ù;.{$ñ™$&»ËÂÑt:ô, }{VuvÃ8É|.F¸>|늡9Ì}Bç±<"„×Ø3ùáœO÷‰‘³÷/óœ=?И¢>mžÛÔ𵣿ÝïzûáS~HIè>,Op|þ#Àãß:– +endstream endobj 1267 0 obj <> endobj 1268 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1269 0 obj <>stream +hÞÌWÛnÛF}×Wìã.n¸W’®•¤.Ò°…6AÜZZÑ,dÊ ©ºú¤þegvIŠ”/qP( ˜K.9;sfΙ‘ ÅìÝÇKAŠffIâ”èÔ“ÚÍÖ³³wd±ž Ibøƒ‹Hž¥$Q1%YÜÎb°Âc ÏËYÄã8Vdq?ûJ?½ÿ@ OÉé»Ó7oÈyÍDÊSº-êüö¶¬ +rVµ®^çKÇ~_üG©p”áJ‘Hpa ỸE=ØÛ¿Õ,’kZ‚r±ÝµeåoìýbftYn,áReYF¸NÑ’ÍJžØ~‚æROö„DùMˆy@$ó8d6uÚ‡ž ƒ>ÂB™àâÏ9Sšº'2,2°LX$E +>K*˜€ÿ6u}ákÿÕÿñk>Êòá»ĶK€Ð!¯ræÉfeqÓ6äÂ58 ôO&®¨[ñž] 'Ò—°ê>ÃjxÑ&vÄhO¶£ˆC'À_'»[WÁáim°({Æ¢xÂÒUÙ´y_üqà·àYf°`µìÑè å黼sËr]º†´7Žh­\Á|BkçHíÏ(ñƒF N"¼ä®l—7dÍ”ä–nü«½Ñ Ð3†»=\œßa: ïbëQR(x(¿¬LÖR£[@:jãÖ÷Ÿr&ckN'H]p–Ö^£˜†eUÌËžŸ-Nœ$Ëp=‚¸—8ÑÉ +/[‡õæ-Yn«6/«†4î.¯Yš“·!YšK1:Ó»Üùê/¼ÉÝìÀß5“Ð&ஞfßç>¯Š þ_… "©@Á}9‰dðSöò×I±Ptô`eUÖnÙ–Ûªaà_J9Yܸ#°`#“#ì·S™} :_¤v YÙퟣ ÜÄëÝøH—yE¶ÕfO®Ù5B‡÷#™q£eÒŸæ‰=j¨¬°¼]PZìÈGqˆéÓÉ—÷“x¤§küÛ¡†œœ­‰'$oGÏà=d°ì´j;“cKb(LÕ¡…3a€o* + &3dnFwEµmGÖóÁÛÒ˜GˆbàçÞ6z"H¾›©JAÞ³D½ «ÎWú´¥ÈèHâb‘×øRƒ„D +îÈTI¢`¶äQÊ‚k—{àÏ_Ó\Að6̸À±ÃBút§<Ò6ˆÈÙø>ÃãAQ®úŽÅ‘Å86Ä8ÇÌA¬·»k E8Üö…"…Íúª4¡ú¿ÒL ÌãE›9$Ìã¥ƹÁ!í¡°ƒÃôm¨aì(Zé×ð8>÷·M‹—üG’T5ˆ^±pÈcÝP¤5dè{; í:`^ B/ëƒr`„|¾Ê‘Š…wE.ÐÕÓô•.NÞQ»Â +èS8¨K{ßõ+W ‡Åp‡¹íl±«o>Ò·^üB6»æŠñI&£.ì V# + `˜Ê bbÈ 7.J&€F Ož4z8Å3´… ¾B<@,©\“ž1ôßž¤ÜÚŽ±BLfý‹öƒŸF$Ž اúiA÷Ó‚ ³‚…0rÿÝÒ¿ˆSÎ3s‚ bñjCÂåùÉéÙ/'Ð[n­kÐu%ŽZ^×`Çò–@ÛûþcÓ®¤y¤µâ‡ÐGôAyÂ[]Ë=tÖëàQÓ J»ÿ%%Sÿµo¿¾?ÑZá—Ú¸m¨¶Ö1‹DÖ…Ó7Ö "`hššÙD”äK›TÛ²¬àqñêÍMûÛª˜–_ÂññC±†ß5ÿ0R1á* +endstream endobj 1270 0 obj <> endobj 1271 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1272 0 obj <>stream +hÞ̘Ûnã6†ïý¼”°—‘”.]Ç9i$Bƒb·Z›¶UØ’áCÓZçhö0ûãÐᜦðh6m‡‹F²©÷÷´¶“bVØ-Ù-,^«:' ö!|¬ÈÖÛ%ùÒ­„ÇPå àì5íÈêv\V!Ç&x 9‡Á†Øcd†iSA…ß6$'±Š¦vr†ß­%y9_Z²]äkëoÒ:î&ƒYè’è® *T'È©UO›Ä¥ 1‡³—û< ÈõŠ«q½Íƒ#XCo—ó«"÷Ss˜‚áÙOLw Ò§e¯†J«º†Q->GM­µ÷xbn!ÜÚ”ò¦$¤°“AÝ.<¸ºÞ<ß]e·½2¨ÓnÊ[w¦vG¶»|gQ/”dPž;Cšßá×þ ÇþH±%ÕzWTÎ%lX¬óCÎÛ¼Ôb+ó%”zJ&yI¾X²ßÚ)©Êå«_q$Rªü–dZç¦Ö—0nÅU9±¤(1§nÉuŒ1ìe]χ{á ×-Bxƒ·FˆÍN ž’ÖjFÆí–’ +Õ_š÷òôZîò¿úkJiªý.†¸‘ba§óz®Š(U§R¼Z/L§ÉùsüÀýš|PDᶆûá4}µÿ=ã]ê& ‚ë´‰MùR +¦°“`4Œã¢/Øâ´©³ÂT>‡½ôôÇ¢£Ÿˆ÷¡Ë4äŠ[r¹PÏp‹«ã21}[Hè=ìøÀõ‚f[˪WlNTÝ9é8`¥@v€•¬¢,õq•žâJÁÍ·q%U¸ª‹Ï{¬j0¥<¦RÄ:j8%Sã©«žŸåë p’’wá$ë&L´éÁIÖp*pqÔJLT>¾º†ÃÑ]6üe4îÕ,9t:{š4MÕAtßä¡æ˜óŸÅRœ–/"9â‹ìé*8!Óàp¿ úåmdgÅÍÞ+D5}Ò€ Ðô¬¹Œj“G¤) /°1j·-hʲ#Ðpóݨ±¨R°ˆÃA¦­´”fâ½,û þPð3qƒ™‹”qÕ…žÆ×ÓƒÇÉÉlY嘯h]a&á Ã1÷pW¯‰’ºÅ÷–T3²¶þEJðj!aX/àž‹@¥“Z»äæP?xËPø¤£Î;Šs]LªëP1· ø@«p9Ý¢O€ãdƒ*{ Q"ꞨÌW)%<¥‹ðݪÁ@êÖâ ÁbwP)ô½>¶!±ìòéÜÑ© Œ¦#nÇw7·Y¿í¨>Ÿ´S*u›ÉÀ+Þ;}¨ÓsYÝp='§83˜CÓq58à üM„ÿ ˆÕñ[{ó$<þB+š¤ß~:z“Yðöókß +endstream endobj 1273 0 obj <> endobj 1274 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1275 0 obj <>stream +hÞÌ—Ûnã6†ïý¼”º5ÃHJ—n’í¦ˆ·‹Äí¶ÈöB±i[…%–¼I©oÙ’²åœ‹$@@’)qNüç#ÃÉbpðó9'‹f %1,%Iª‰ddmóÁO“ÁÁGN8™Ì\pã©¡YJŒd” 2) ¬P–ÀØd:RƘ$“ëÁEtzü‘(š’ÃÃÈ—uÌSšFõb—eQ-ÈIÕÚõ<ŸÚø¯É/àJzWŠJI†œr­ÈäÈ[L¶¶ùÎö×u<ä‚&QvÈY½i‹Ê6ÎØñd ’ 2ÒTiB…̲ŒÐ$EK.7-¨ÑÝ{HšŠdï=ÔK"ÝKÈy[‘ÌÕ!#ð2I»ô12®0Fxʇ8Îc™PÝÁxvágïcõü™[©iŠåga˜ À¿oâs´Zù‡³b±lrf = %åÑ÷X*#;£] á$¬¡uŸèjøPÝëh×l³`˜At~[µùM<ùf+?;£™öÝ€hAi*´“…ëÙ‹¨¨Z²²±Žæקù­]û>]|²˜ ‹|)ƒ0PÆ ûêhÍêÍåÊïR{— \g]™•/óE´„ŽˆÀ ÞÀ¨ÇIˆRÒŒ¹8a +ÃÏ£o±·ù`Ðdé³ÆG. ”YlJ[µM°‚Ω‚ÎÁÒç木qše +ÓKÄ=¨%Ôί촘¶!íÒ’YÑ´y5µd¾®KqŽ`g+3±5a¼ KÚúŠÔsgas„ bÁ»©f^­)MBA\*‘Yˆãj•Whȹ¬Ûü‡‰Ú¨^)瀻à³@¨O몲Ӗ†Zu…–¸q¸Z»'(·‚jã μ¹•E½Ä‚¶o1…ä q¯ LDÕbœß\ûçYŒ+…:í +ß_ÝjVWÈí–J經 m><ýõüøhtv<Ú[¾ôNG™Î©gù{xÚs +°¯wºÝ‡„ºë40j ç(²vÁi “cNYƒLÚ%Œ<Z*{aðw ¯=Êd«ÇçÐS8Ñéâ%ZØÃüCµ=/õðSmʱ#PeñVMW5ÞÁü¾2Êqýz0úÑí¸ƒ=û¾{yxþ“}úÀâðnOêEƒûr´k$Õ…®yò€oT2æ\?Ía­ø}Ãaü_}û†þ +endstream endobj 1276 0 obj <> endobj 1277 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1278 0 obj <>stream +hÞÌW]oÛ6}÷¯à£„άHŠ¤ô˜¦éÐ!YŠÔmP´{PlÚÖ`K™%×ËþÑþåî%EZRœ¬:`0à/‰÷ãÜ{Ϲbd5yùó{FVÍD ¢“Œ¤™""!;3YN^Í&/ß0ÂÈl9aœ$ð‚–išgD‹„&œÌ¶“¬Ð$…ÿfóÉ”&I"Èì0ù]^¼!’fäüåù‹äÝ.fÍ¢zµ+¶Û²Z‘·UkvËbnâßf¿€+á\I*™2Ê”$³×Îbl³£íÛ]ÆöŠqÿïš2žB¼Q]!¸6Ûáâ\iÄ cɺX°@Ëß1Å@4qFIøý|êóoûo¬þo³ŠfÒ Q]Xê +ðC|žm6îËM¹Z· ¹1‚²èkÌ5‘YPßÿ] kn[XÁä>3Ôp£Òª7ÐÓEâ28ƒñ0k«ýÖTmÓ¬r† ¹ŸW¤{0ªöÛ+˜Èj¾©³ˆg¿gœÑ<—ص)3îˆuMûþÞÌËeiÒ® cw0åõ’@ª8W… 1 ˜$ØàcÚìáüÂ,!Ž)+kjç˜"f0?f2…$5†ÖËG¢bgŠçI‚y*  ½r 8Fû˜E[‚Ö̳MDPÁŸË䯘¥ŽR˜~¢ ëzcˆ˜ÜÅ<;â)Þ°5má-óT{³ƒwCÉ'0É’÷d^T¤±±>º2¤Þ¹Îžr¤H9æcæ£ã¹³¶­wÆU&‡ÊÀçvøP.Úõ¿¶Š—Å•s}ß–uUlR× wÑ’âþ~c±÷@ä,@¬DwöXNTÞBi,è +@‡7²)·e èl¼µ$—'*¦PÐð9¬k9[¨²!s0ÛB©:l5ÅFyBë˜ì°]îjˆJ€Ø¦µ.û r– r‘õcñõaª«¶=lLãá Š½#Êé(k ]`þجmM†UÂË|K=[>h¾~`"¦ß…úù.ÔT§?¤ =õ \b,ûÙo¨ç +J"v$¸ocb °<\8bF g8‹ðcg79©Z]¹NÊ¡8LÖv¾o‡ÛÍ€sSŽÜ®v…ð%5°N®aÃÁ’w¦¤‡Ö÷_r¬ÀÕÛ_ß^}¸:ÿ0”AÚ) +˺}Š4-4&N%3hØ¡'MyòÍ®T¯ÜÚûùØvcÝ­õ–ÓT#ÌC„þdQ-lƒÜ²o Ne6j ÆÇ4lfw(UŽ!ëÊýœÃh:Ví.ŒÎ)c²¿<ûtq3lõ^âaau y›9æJ‰;Â<r´=µS2Í9yÿPµÅŸîH&Wn Å/vIMQ:\ßrëøsTÀж®iŒëÑ®=÷ð76æ—È-/à 2Aæz=‰õþøʹíàa*#ïèâ3"œ¹=·a-þŒT ï!ý„6§ÕZ³¾Ëù÷øÞ¢Ó²ºµÈ;ç²wÈ9ÿ°L¢HXo½‡ïZz„_zΈÓÆäc¹àÙÉ}'f(æ GÀ"nóqTŸP1˜Å¾”¨*òÄײ aÏhP0bnwD œÅ"§K%Ž`Øô ’V¼#i'8Æ©ðò=,S‡5ì}šrA¥v<­½9oæ}…IcÂs.«>·µ(4cqQÊW;ÍÓã8€Nß>RIÙ€êû̓]&Gµr½vÒܸX.{»Óé­ð¦¸ÙB?âR!Isx’µ‹éá:âˆRÅëIK• R¥¬TY¡ÊŽB•…*£Nª´“*”¹óºªÌÜšAÆjžÑ/&D_¿ÂæÂÔ@¿Ò'õëÑâêüææúêìÕõÇ‹Q¡E_ä÷柸ú<Ø¥ñI¯..¯oŸò0¸àò”LBGŸ”³'¤Š) +váÛÁél—¸ú€$KœSÌ×dÄÿ\?Z;]RsŠíma.©¤öîWÃ#RÅ ”ÿ0¥,G@ +endstream endobj 1279 0 obj <> endobj 1280 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1281 0 obj <>stream +hÞÌX]oÛ6}÷¯à#ÕÖ¬HŠ”´·4MÛ I[¤nƒ!݃bÓ¶6[ +$¹i~Òþåî%)Y’®Û:`(É’xy¿Î9—åd5yþú'«z¢%‰Ã„D‰&2$•™,'/f“ç¯8ád¶œpABøžÄ,MH,C +2ÛNB°ÂžÍæ“) ÃP’Ùýä†^œ½"Š%äôùéÓ§ä}ð„%´\UÙv›+r^4¦Zfsü:û¶’n+Ť$SθVdöÒYŒ:Û|oûº +¦\°ˆæ`‡\•»&/LmÍ&*J!"Í”&LÈ4M ‹´dcӂź}A3 ÞCN0%Ò¾„˜»Œ¤6)—QÒ†žq…>ÂTÎÅË,SôˆS·q0<Ÿå‡¿Ú= 8Š1=ï«Ò=[ìæ 4‹é§À¾1îyUçÁü¥eٵᆘ/!tŒ C_ï V}ù#À¥èHLœQÒ]G?»~çgÿÕÿñg¶R³Óú„Ú€G®?dÏ“ÍÆÝ\å«uS“+SÀ€”ŒÓ/ˆ™¤fÁZøŽ…ma ÐýªáCë¢-ØbŒ"Ä臇¢É¾³ß`µr«S–j‡¼A J3¡X,,foh^4dcM—÷Ùƒ©NW—y‘owðx;ß5§eQ˜y“—Eý™º„²¼Â®f/ÁÐÞ6dKÖYõ„xÒÐΗÚ_¤mþ•Ëÿ ] VheæxAû~•j©&‰®vUˆ+èçÀ…x4Ahuë2ãퟩI` ÕnkŠ¦ú¨-‹!AÚ„€K• ÕmäI³4Uo$:Òk ExBùpgæù275iÖ@È-dîBŠ]ž¿=¿üxyúq6ØIÙÂnÙQkl—‘ºÉƒáìînƒÛ•Åæ4%™—h èKëžÕ5É íÊH–U¹%ÙmpdèNt×è3xO6@Ž!’cÀÓöE墙§Z©žt­xCËÊY¾50X¸B¤5ÊáÇC B¸˜T’pa>S‘ËÂì :ϽÕOô‡¦ø«èÎÞC‚cNJt¥´ ‚‰¤—Û"ôÕջ˓ï>Š Û"`}æ!¸=膨¿«+Z|qvñîú1‹­WmKÔkÛÆö•+XìqÊ¥Ë`ó„(Åô%X*HYØP걋…ã,ÁR‹aXÐ g¤X5ëk÷u³ö«†™+ÒóØâ­Ø+®]WY¡OœÐ×$5=ì«ú ìSuqööõìÍ O’©£í¯ü`±oFfë¼ö¿í–<„I¢·V´k¡îv1‚–”wˆlC²bAæYAÚÕ¡÷®­FÐ[CvµY8´•ÅÜl‰ƒÉæëa_Lêã£#’ {cŽq­-Ò€s™iÏ¡¸å›Ø§¢*wH31m Ê’—Úâ¨3ˆkÙ¡Ê·ÚÔ™„Ï„ÚÑ÷H‡„Ž”âHÇ…qÍ}V<¦tQîn7Æ'ѳsÄׇŠu\YÁX;- SÝÇÿ349MZõwì‚ø;[/pϼnð’ÝXÜiÕ~Ñ_k•"ÜCê_É9®V¼#è ‘ò3ç‰Wdæ­eŒèdgçÞ-Ò„5ÖpÏ KMém&Ž4’©oM,7¹)­‰TÀÌÜM!gE°$Ù[‰",!»ÏÆ­8ö÷3§!ùÒ:û%ÏPóZ5ÒLs ¶¸WYhkü´çFV™ãEÄ÷ë žðn6ô‰uÐ8š]Åø€¢D;Ì·Á[Äí»8 }æ\NXÚc)Þ¢ÚnˆŒ4XIÖ™¥TìcU¤ê(±ìÃÞXÀa”Èu¸N±vòµûñv à©“µUe2$²ÃÄÀ,";T}Ã=F¼ôÓö&Zƒ3‹ÐÿAÛ/M\a›dydØòýË%¶*4ï¦%t©1£{Iur€™*—‡µŠÆÌyD¤yã åUº7dY¥Ž:¥¶CDc•:Ý+µÜ+ubAs[«ÔŠ:Æü†(svŠÜžlûrü˜§êpdydÕGć‡Ð{pÔ7h·KÌy°ÉõùìÍùÛQÓèý‘ŒÎÄäẇ´ hxúpó‡ sá•¿²‰tˆÒ\}C) ƒ²_çÛ|“U8)C¯Yá4£ôLe¸§’$Û]\Ñ^¶ñB°ÏRKm)%Çí”~›»Æa×:–‚TöÙÎóh&Gí…C&Ó´Ü‘Úâá â ‹C5¢›o¤?} ÂéŽ/0‡‹5X Ô¦Â6u +`™ +á;S8k§#Žêm:[›a¯ˆñQå{FÑàßoɃÏ‹x<ê6´#¹'^r8àxŒ:€¬õ!€.N~9»frì)Þ í]u§0Çg³ÉŸ ôM­7 +endstream endobj 1282 0 obj <> endobj 1283 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1284 0 obj <>stream +hÞÌX]›H}÷¯¸03®ÔUÀcOҳʪ³u¬v;û@ì²ÍÈ@ ðdzÿÑþ˽·ªÀ@;Q'Ú•FiæÞs¿Î=XÀaõê/ﺕQò ’Ì€âÐÚÕ~õófõê6û•ÀñžD–²<ƒTqÆ%lªG+Œ'xm³]­ç\Áæóê!º»ý4Ëàõ«×?þ¿¶±ÈX5‡¶¨ª²>ÀÛº·í¾ØÚø_›¿¢+å]i¦¬FÃæ·˜Œ¶ÅÅö‡6^ É’¨D;pßœû²¶3v»YÉRƒ1¦ 0©ò<–ddËEçv71f&“ÙML }A¹›ò˜Ü¥!¼™dCôLh‚ˆ”öß±J˜Žž@r¯5~LãµB–‘ˆ¿®1Ž4I);¿¶¿¶;o{ˆ K£¿ÇîŽõ×Û®Œ×ˆ7jjJ®‹–Sº¤4)å‹°d ˆ°ü'¦G H +Þ(ŒçÅ¿t~á×þ?VÿÄ_sP†e”~ +ÀM(€H|þ'>oN'ÿá¾<ûîmgq”b"ú=–)S‘ݱ¡ÿC §Òµ°ÁÉýÊPãMj&íf-¥(8E½ªûâxó>­ýÓ9ËŸú@´a*! ø°t#û•u'›hÿù®x²­Óû².«3^®¶çþCÙËúcäsÉ8¢†æ4aoVÑ®9:YðÎwž0)L>$\û„?D5ÎFt®^»SßbÑÃ3Úp9É#Œ~r†×KÓT|¯ßŠ–õwÚõǹc=yˆ{§ÎgÎ¥Ò©Ï ¬op¾õѾqλ¾ s=²jÀ2¢˜)†±7~­tæ:a=öòCtƒü­lçÊÖcj2d 96íå<ÔX ª‚sØ]°<×r"Gv—ÝÌü¸¼´Ûr_Úú£…: ðã¡ú„Tßìw¼ª¸ž„D&²ýÄa_uPÀïe"ÇÇEÔõp,béÆE#£Š>m e¥C”!KÃ* ÐÒ`y·€ÏåÎ⡵дðXÖh¦éè +ÖÞSÂZ*¦S½Xdƒ•²ƒE•F8À’· Ö‹æ™5̘¡âIž\&Wè×jÓìj&òiF"6k 5†—éE­|¿]5·(VØ¿³Õ2/UEcM}"(ßx¬|N|n%3ZO’;ÚrKS»wF&ye°ÀŸ ‰~}É Öü Muÿõ8„žv‹PžÜ&1ýÜ%®Ú39“g׺)&™F8è!‡¶¤~t­YÅ)3ÔÔ†Úò“E–ìºk ý ¢ÅQÿ:†}ÛT`‹íÌ7¶]3ô,R9÷=;h‰q8¹ré¶9£tÛás;¨B3ß´‘µý¤GR$¼ÆÁ8€¤Üx ÷… Á†L ¥Hy:–rŸH¡e ˆß9<÷Tu²´lbÉ‘®žbåÔ“ˆüò‰‘F#·ºòßæâsÆ‚J§ Š!‹Æ„,:õ™yõID3§[œ39™C_°woÿöþí?o#¯Ô +—q¨Ö··Ä¸ 6G KRçB‡›‘ÕÒt鉚ǾlêâE½ƒ-6$ÖüÜaÁ›úô„‡mÀ±9 +ë%ÇâÇ÷®EÊÎT9`Aò qA~wóÛûné&—ÏWÙöÍÝV6[eë„eDsÈåTÏÄ |]ÍHì,•º™ž ½e¢™–¡Nú8ˆÁg†4ÐŒTð¥…çæ¹z9W÷´¼1¦çÊ!=†å©Î¯ +ˆ‡  ~@¨ BÁ쥾]ÃH™A<á&ãÊÌÔÓwû¿s¨=ŸÈR¥_*b¤à£ˆI§"F "^¨bî©"S?ž÷8`ÖµhF/EŽ£Â¥²9;=CÏæ“=Ï¥{‡Œp¶è¹¨¸`g÷ø~»[ntá–ê••~M&è/È„y{2£f놌ÜQIæêç+Sפ µúŠ<£š Š‰xæä*3쨠ۧ³ %’‚ñ)…–ÙÓ[O51Zd™Kºü&w¾ô…Œ0¬Ùâ“_ ôö(ýÂîs.TöŒ(»¦²ô|¡plI«Ð«‹_¦Íéé€òÿðb@Ž[MæK‘d•À %¹Ó¢m¬ +¶µŒ€^õ‚9R +Ù ^+¿DËn±¼.â×Èîú6ëÏè7+ ¿\@‹Þ0û±È—ÌlaH¾êâ.¼ÆøøIÊð¾[î¡nåEL–ÕÍýíÍ‚ñ“I ù`Yg8§rj AEÄ\t–*œÓ›©ßv^''»Òdz¹=ÏéB¿im1×b±††”É$Àú3x»‡‹xuWß³ŒR#ÄLšÃcvƒµû +ú]`ÐoFNôÛ%P6þr6i+ŽÔ‡›Ë–^Ñ=ÓÈ›C}c‹Í´¾´~ð1¥%õÒQ—î š‰â›fK8m eœš48ðAMÞnVÿ`™òá +endstream endobj 1285 0 obj <> endobj 1286 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1287 0 obj <>stream +hÞÜX[oÛ6~÷¯à£„V¬x—³Ö-:4k‘ë†vªMÛlÉä6Þ?Ú¿Ü9¤hKNÒ6[wÁÀºóžó]È0²šyúèyÓÄ,£YT¯šb»-«yYu¶Ysÿ2ûB JQ!HÂ(ÓŠÌžùåqlvûm'ŒS•0¹ª÷]YÙÖ 6M”ÌaFš*M(yž*3ÉÍMsjtx“¦\ŽžCM°$Â=„9+’»:äÊ,L3c +s„¡|Š—E,$UÑð”ʼn‚S'œe3XÌàWûûp`F,Ï›¦ö÷ûyGbMMôcìžX¿iË8|£ºÂêºé¦X/εÁ‚a.YŸ vsù=ÆO1Cü äx<»¼ïø•¯ý=£þ‡_s šfXþ´o@ªû0éðMb^l6þäª\­»–\ÙÖ„ ,úsCEd4 ‡°á¨{›Õ©ìˆíÎàum$5'Z§©ƒRêg±±ËO¯Š˜§é3©*ªQãèK8­V—eÕvv7¦õIA0Š4I½õÔ ôΘöµ3Oí–¤Jù¡5¹/uzL.º|ùÃõlú&žýzŠ))÷ïD:Õ7¥íŠÎnmÕQ2[Û³(šæF >7_ŠÅòáëâÍœG#eKê]WÖU±!Eµ ó¢",Ù·vA¶ucI·†;.„å „NÍ88ñCƒÌ-)+¬“ËH…Œ„dÄNù¿ºøyz5ÊžÓ|”=œ€@îvŽùRÿQŸÄ8©”«»ªt}¨ºâf”RNsíO +à&œ`0סwQ %ÚØXGˆ¶ƒõØ +°‚Û»÷‘gMN(})jñ³I´¨÷6¶/ƒ>‚€é2jÖ‹ Ù© ,ÈOo—×;;/—%p©œƒû–Ûl(ö1ül Ò•´åo1“pmc¦àð˜Ô!^ês* ì¥]×@X ž_;b+ ¬Vû<£Jp°Åz£\?&˘k\Ä [@n×ÅÎb6YDûÂݯYR¦TËDl¤W16 ˆ–ò¢…Là÷¨Y"h¼­ú‡;´oøöÆ]M+$”=ÿ´ýŒ¶I,ì ¡b(l÷ÉZ®ÔŸÐ5º¡{®U ¤¦Áo 5|¤¨nÅ„jÔ–ÛrS4¤«Ç’QnnÉ‚ÏË{Á9;w£<¡CFMÑ} ¨ÂW«H6X楽\rÝW +ZÇ¢›¹Ýu¨† ™¨ `zè$dNZéƒô¸Ž€y¢.–ðâ§é³Ó볚‘â±€ +–í%ú.kP°T|p£xöEðŠÏ3`›:_‡üR–»p½gÌ‹Í\£®6â| XâjxÔE&îoáuW4Ý°ãrª†UrP‹(ÛWî­;Œà«<@÷…|¨\7ÀJÛþ^ðØA8§R3ŒyÌÿ!Á·.êÍ8¡¿bD\Ë+ßØŠÜ2͆ÿ¯½FdkuW}<ƒ¶=ï)Sa?ÀÇì½U¥âªj EÂ}á–Ìë +Ö\€ù1ì´ydÝD[¬G~ÉìÉù¹)ê£)4E˜Ÿs6s2E50EÓ?ܽ-ýåúõΟ€vµä3fÈÒüŸ5C®ò–Ú:ºvL‹„ìLpØô÷²¡-„]}Ø™t‡uZÝÕ¨ö }k[0,[ÃÏf½ÂË»ü#áŒâÐgÿÀÿÃå³ÆãÀÊ'ìP“á5ùÉiûqÏ® +$òÃÄ·ÚVÀ–õ +ùW& +endstream endobj 1288 0 obj <> endobj 1289 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1290 0 obj <>stream +hÞÌX]oÛ6}÷¯à#µÕ¬HŠ¤´·,I· ýBê­Ò=¨²lk°¥@’›fÿhÿr÷’ÔgÜ´ë6``Ë–EÞsÎ= 'ÛÅÓÞp²mZÆ$Š5‘!©óÅfñýjñô'œ¬6 .HðÆcÃ’˜²PÕaÂ*,Œà»U¶X²0 %YÝ-nèóËgD±˜œ?=ÿö[òºxÌbZmëôp(Ê-¹*Û¼Þ¤Yü¶ú ¶’n+Ť$KθVduáVŒúµù°öÛ:XrÁ"ZÀ:äº:¶E™7v±ËÕB f4䤙҄ ™$ aQŒkÙìlÂö&äÌD4¹ %ÁH{Rî ’Ø2$nFq—=ƆR¹_¤Œ˜¢÷D„Šâ%ýûìã§Þ¿ðgÿͪÿãŸÙHÍb,èjß¹ü+{ží÷îâºØîÚ†\çM’qú!†Iš¯Y‡a#,„50÷RõÑ#B[®Ì"Ä è›û²M?’`õ;<®Üã K´£^àJ3áð´°œ½¡û|s÷< 4½ÏkÇÑí‹¢lÚüömÑÂ×»W·mQ•Í»®–,„€Ð!2ìbA×Õñý>÷{k·wÄ×IWpå +~C×À Z4-¾¥e¯,ªS–ñC>BúÄ®¼LX$¥o|C3ˆ«%F™Öß¿šÁåÄÃê#n¾Ÿm-˜ãè“[ǒ˯Íù`“ýøßòrksß͵QîÉÐîü.pKŸB‚Š- ÜÐ3o øÚy ЛVôGtr“À%·†>ØŒ7RŒ'“@|Š^û—’ÙÞG¢—~ÞQÉ+ÿ›Û<+6EÞv—$Å!IMè1€—Ad‘¦ø#à|ήàí ©j4~Ô.€å˜©xË7» +8A¿h›Cóóõ6'{¬ëî Ù Ë"ZðR“”4»ôÖîQ6« (:K”šTF |ªû|’9g SçÇ^y!¿*×E–¶˜|EîvE¶tâ¾1S±êÓŠŒÏð›gÀ9‡2Êm:®rS„$L©q_\”/®^¾Y]¾ž +(•OvêØ+ÊÛa€$½½ÝC·°†2˜€pœ‘‹ësò¡¨ö)’ŸTYv¬=¬–B Š 0~®}>ņTeŽÍTn_œ-Dãµ&íý-Ä[c¿,RZΚ +#Õ1ÐÝ•jŠöÞÊÀ(î‡B@l¡ YíòÚ‘|)ai€±ïé ¹9ƒ˜ªrOÞç¶XmúoÁÕ®6.÷  ¹›~ߥ<èØ|oÁ;íÓ@€í¢÷OpŠðR +[e;Ö͹§Ï¢ÝvƒI´|7ô—dd^=Úk00†Óï¦fÔ^«9žFt$Žî÷®í®a–…YÛWÈ?CïÀP +Ãå;2g"TVC¨Ò«Ê¬qNKïGé8Æ:ÔI)J?¢I‹}¯ i›î‰pCŒáØÙe.<·¡!©OK`Zh¡v€fºFP¶äÕësqнP¸^²ª®sp“wE»ƒL²ôØ ÿölÓÀ³Àësí,d‰ 4DˆÕžò·c7ðzàtGÂ0îäD§KaOúÂuÕÕjŸ»}pŽù Cu2Cá±Ã8EpX9p³`‰¬ðÊ8ep·l» ŠCúRMÔÆë®Ó‘™$Œg²îÇñg¥`,›IÇGᤀ ÙÖyŠ™›°DžVÓà…q?¨6Ðí¥¼êéè—xœ³Óß^¡a¨¸‡ÁËzZ{3à(NPp»óv,A­Á»s×k”NÛÝ”ö¿Áã°óÝ°÷'H{‹ñ|×À´N,iÇ뉉õöêbõãldÅ'FV(Œ«=t«ÍÑ×XAžz\4y_³Io+’ÙØéÊ:ÞtσíŒÆiô"MIZ® ò¤þØÀx²¤qÃ"Ä°f”5h]Z %ÖmœKŽø欞Ÿýzy=IIX’ÝÂ'ª‰° ž–ÆžßAíÔ,¶ñIâñƒèX nr”( | š"'lj»b _·»wôŸŸ!îìb}ÊGcRÉC= YÀœŽ`:©Þ@;/ >êêâòüÕõËY‰“‘góÚxæ :¼©¿1½¿­\À)ªX{#ÎÑ æÿÉÐ×Bh‚–NdÚÇ­ï…ûKÄܧc:âq“—à0„¶Jkf—¾úyõÙúŒSŠ?S©xV©Q‰ÌCŠzO`²õì +¥ûBy‡-ÃAT;^?2–/«Žp?(#LTüQ_FÄ6=™O_m_7…`‡ê¹/šÀNH÷g(«ºôµV½¬ý_“uæÐBòIáÝYÌÍY÷ü'í­S”S¨—ŽTÃ`ûúb^® 0 +ëé +endstream endobj 1291 0 obj <> endobj 1292 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1293 0 obj <>stream +hÞÌXÛnÛF}×Wì#‰˜î…Kò1Mì"EŠ¶Ð6ˆû K”ÌD—€¤j«Ô¿ì™Ý%EJò%i D™¤fwÎÌ9g6‚-F/¼lQŒbiœ1¦bV£ùè‡ñèå…`‚ç#!YŒ¸ˆ,åyÆRóX²ñj# +5ˆÇq¬Øønô)xw~Áž±×/_¿xÁ>T¡ÈxlÕdµ*× övÝÕ|2-ÂßÇ?a)å–J¸R,\˜„߸ˆº‹-ö±­ÂHH®ƒqØåf۔뢶ÁÎÇ£DçÈÈðÄ0.UžçŒëŒ"ÙÜŒä©iŸ#i.õà90!H”}ˆœ;Dr‹CÎðPgmú´3‘ÐñE%n‹?OB¥y옌E%øš†‘ö, +|w?C"©N žÕÆÝ›m§ Oƒ_Bû¤p÷«º #ì7ج ]›nLxIiRŒö’ù½P…h/…ôSÚHÊ\PÖ]þ|èúÌ×þ›¨ÿã×l”áÁûÄÆ@hW€eÍWË¥ûrY.n›š]u(ÅEðG(S®‚bÆ[øN¥maê>Âj¼hRÓctÔe» ^¿ +d[lWź©=g „”-ayl™Ü•³æ6Þ3[ðVlY,&K»8Q\‹EBŠ°ÍÍç$²a  E¬hG9Ȳ¯•l·àµÅ +É‚-Á_âè.”1.…%l& +—3”då[œV›uŠ÷9ó¸´+ÒJ‹±ý˜“\r“ÑZ+Û =ˆ—ÅüîÝ„–ƒj„péñYYq 5 +¼^¼ŸÏë¢jæ ‰I|!-ÊÃ’‚ûv«›bA7k6Y·{N\,¬b<¬q·¹àýÅÅÕùxPNÅMý¤]F{YÝLš‚šÀO6ݬ›Ii×Ê!ñýÊu[”~‹ëõ*šZ£Ý'!>–Û‚ÍCÝ6ôwÅn6(kãj³˜*õ¾G‚3¶c‹ÊD9tù³1^&Ÿó|°³ì ’¼hŽÇ‘F¿¸F骇•ä`N‰\¿6åf=YÚ½N©"ƒŽ‘i²oSѶ·²7ÛÖÅ @-‘ÞzZP7N˜Û OG`'ÙQ-ß½úx~9L¤—ò!#Y a{œ½³… -ú(¥»Xmi¼Cå‘ž\ÊÒC_益»µ*gâD¦ $“Ä10!§¹aKȬ7M/öaõYvØV.eG­]á˜Ô’è·oJØ u*ç"ïÅ1-ò²…¤·Oð!ç#ô(¦åK<ðØÀÕÝ?(z͸i‚¾Ð@ŸWÒ ƒ´rö)(Ñ"Ë"4Á©pû:pÄ©³h ˆi.y3 +f›íͲðý`ZnKaò¶§—E€€té¤%i{ÈÍøˆõ[ +gF1ï ]/ rAÃgæ¤]­ÏHÒ„•4ûÜÆõ¯.È~@?ÙÑôœZ?PäBÂɘ¢7ÙÓ®£´æF·žsÚt -"íÙÞr´µœVe³8=0Î`H$6¬Y¿7”0½ÞheFõMéAKJÄw©ò^ˆQê1c‚åÔÅ×I¦ä8—<Ö§¤NxŲEUŠ´3©Ú¹”¢Fñ=eBÊ™PzÊ„"‰‰.IÄR|SÒûaH¹aèañ¤ܘ£<[ã÷äJÏrâò3GZ6ŒGf%NúvbqŠpô$ xêŒh½§§Ô†Æ6:/ºÀ†Û€©µëc£Ý§~d;ý”³ƒiF>e;CŠ Ö$q›ø„ÛHœ a4'í†=î7@*Ý¢­ãxE€œ°KÜvD¿n>ÿÄxîÉq t¡¨Ö€†dÀ$`zcÛdpæ† + gZ}ïò»o[þiûfï}ißûTë}ì”ù¥­÷¹äî‡S‰èv¢‡Í®ÐÙSöxx¼º÷Šä¼-'ÉÂaƒµŽ–ŸòÚÝ+_aeòGbÖ8M+§–ÊŸ£’T(ä”H§‚/ü € ÿÉÉÅÁ( ÷LÚžÔ:Q>œóî™9÷Ï%±òÖqkGòÞÒeú''i=àOpn·-<·ï|±gÄ6qÐÿ`EÃH +endstream endobj 1294 0 obj <> endobj 1295 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1296 0 obj <>stream +hÞÌWÛŽÛ6}÷Wð‘DbF¼ˆ¢Ó\Ú)°ØmƒÝ>(^ÚVë•·–œ¬ûGýËÎp$Y²½É¦ X@ÒZäpæÌÌ9#Å–“gß¾SlYOœaYâ™õŽ™„mÃd1ùf6yöZ1Åf‹‰Ò,?¸)ŸÉܳÌ$2Ñlv;IÀŠL,ü6›O¦2IÃfŸ&Wüí«×,•ž½xöâÉv±ÊKÏ7Ëmq{[VKö¦jÂvQ̃øeö=eè¨TæJ*—²ÙK²h{Ûê`û§­˜*--/Á»Üìš² +u4öj6qZfbr2uLj“ç9“Ö£­] 8¾„˜¥¶£— .0ñ%„Ü’Gr/­ï¢GÇTŠ.ƒIÉà +a¬LùžéD‰i +™˜jåÁeÍ•Ppuô{qd6Ct.¶úíf7o˜p2ã?Šø&ÐïÛºSð—o*7F› \Z» ñB_|ë &}ùSàVt$cd”õ÷£º?rÙcõ¼,&À8éþ¤M@âÚ(K øWÎ|¾^ÓÃe¹\55» u€0F*þQèLndWÿm g:–°ƒÎ=mjƒû:>Ár—Y™ºÛmÏ1ˆuX|z[`U ¥dŽE ×mì=aÁjyQ6sz¹÷õBð›Iìê[jž®¿rtVìmO½]³‚µ¦R2e¤‡6K:z88É/ÞÌ^|'f¿ŽÕ2Ïki1¥ó67uS4á6T kVEÃ曪)ʪf›x(„¢Ûu¿ÝÓö*°;yÅ ú´pYï+k¶«Ã ëLÙ¡ßIzöB è ulÙ‡M³Cݳ¢ºa{:J’¹©Î¥’D®ÌÎ`1ƒ}E [G‚KÎ eˆfÑÂd~ß•[\Á°ç!š¼-z­hó¼¨Ø‡@ñoªõ.óÀÊ +Ó9t 9ÜžÍæÛçï_]~6›¦c:×%3Ì›rSIöfÁ Hsh—Í®Å˨¸ûH[º‚HTË–õ]˜—‹=àŽA“¬•BE?‡f#Ã9¤ .;Œ³Ú4ì°-•+,Nô±Ó!õÔ>P Q÷¬~~ÿ²ä­QìÐi>La„qj2éÔ¸t,¬+ŽbDZ;£zTÐUpƒp ܤ@Uh}m9´ÄH}@'‹'½ÛCOܲ8C|€–N­“ ˜ÐÒè%J(uŽŸ óšyJD,AI}9á7›Ý‡uW»ŽŽ³R+—w ›Ã^ñ;#ãÀmuLz ×µ ‹ê ÙܵãÌ´çï+þ|‹@Y¾ÜaÔ­}×#¥[Ì%u2Ý9ÎYWqV¥ãüO{}æïbå”@tX;TqË~³Ðèü¨Å ü™Âsäàœ)âüà;À=²uÔ¤‘´=Ü´aHq¹§ÿŒ$XèOçÛ¼&þ¬ „ mC!A !ãÃÊ~XŒO¹PÝ\5†‡d!OÓAÆ’s†@´ù‚Ôá®ØŠ ¢€÷-ŸƒŸ6=¨~:Îëª2v]!°é@jL’‰¯"¿µGcÙj)‰¸ÿ„ÖAøóÇGݱFŽ»F¬AS6žJþ ù³y¤ eŸŽfžèêã8_IçNsuJøæp€9¦xâx œÀÃ#ÞnÆ%}LøºÓŒvP¼Š×Ø2‘á=JÇ—Ù¦‘cMÿ ¹éA÷”ÓÝͦ“3úpÄà€Áá +ÎZà% ÓüwDá5æö”Çɭǹν4 qDçmÇ;~N±àçØÚ×ÝTüOˆýNÉ*ÞÃxH—ËH>ò§Tß +>O½5÷øý×ÿeÑO€~¥ÄPéâ'6Ex~:8§4G=šûvp½æ‘éÚ‘ÎÚ“ µ}À‚„Îz7×wðá­Þ|8a„P±P€1"FP wŽÏÛ£Ÿøõ p„Q¼¡áªœë^@F>^ÌiâúíZÈ1DXìj¨Ä-JTêû1TªÏœMO©IhÿuHî?d҇ߣdÃO€T¨ÍŠCi:¢¼â« Ê_ÆË?ÐJÓ+ƒH!ö8Á‡à_ ¶º0Œ +endstream endobj 1297 0 obj <> endobj 1298 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1299 0 obj <>stream +hÞÌWÛr£F}×WÌ#d—ñÜàÑÙÕ¦œrv‰$•òæEH"%À´ZRþ2Ý3\„d;vm’J¹J`.ݧ{NŸ3p²™]|·ädÓÌ´$ ‰ +5‘ŒÔÙl=û6ž]¼ã„“x=ã‚0øƒ…$Œ2AâbÆ +e +®ÅéÌ£Œ1IâÃìÖ¹ž¿#> É›‹7¯^‘›Úå! jS'E‘—rU¶Y½NÒÌý-þRI›Ê§RS®}¿µÕ›±©] ªœâEµoó2kL°y<óUiêkB…Œ¢ˆPb$S›4Ðý}(š +5¹=Á–Hsj:™>Dnª°/‘q1‰ô-ÄW*ê;÷D0îz>œ®'x˜…Ã]¿½Î @Øž›º²×Vû´%®¦ó³kîdözÝä®xªÄîšröK`ÃKØaÁB,ºø* ˆ J†ãÉ¿ŸùØ¿õü˜Y©iˆígÝ0Ý-Wvþ‘œ—»=Yä›mÛEÖd0RRî|vE@¥“­h?…a(¬atϧZâ(›Á6gð¸ ƱÆyKáܱË\ ã¶>\'®`Hm—s!3á·6è*@Qn`Úá‰È©ZxH»oòªœÎù()˜V§¼°³¤ûyïûgf=¤g½! éBù6€÷mïÙ×¹Y|ˆ?-¯>¼wãßå%êîôÄf +;e!M›´Y‘•-%ñ6;ÉPÁžJÛn}æ!yCª»”ìL¶ˆ*9"Œ„ý›I¹"iR’OÙ7ÙÊBô¤ ~h„3˜f…œU¹»'U™f$/±‰lW™¦Jù#`.Çò®//&•‰±‰^'36Ѩ-K±j_êØæA]Šx’ + +ÐfYÞ—mòe‚)¢‘¶z‹'@Ø)ë`2ã +·N-jjCÌûÌò)Xµõ.#õ>:vN)¾¡X2Tï·3gUí?í²®Ú¦UTpõ+àÛa¾u »N¾jñ°åg d‘>"†óCz!å|ì(ãü%©w˜3+7xh·ÿiêIÕâïRt'K>™qE(2ÝŒ÷ñ/a_€ª²Ùã,4]‚›è7¸Ç09vÐhÂ1¹á#”ª¸?€1Y:3^Þei¾ÎA;Z˜é"ù’nèì]îv|8£úUèõÇæ$ÕÆæ‰r„Ò@|Ãõ rÜ™øˆItóØ÷d?@GCOÕÐo¥&>rRG^B) ðSw +mÁÜ}¥MzÖä#”â”bÒ¬£ÍƃÑ£l³Ž@âýC^Û õh¨™bt¯­Èa›§[óރ塔¦UY‚üôNø”ÙIØÄjÝɉ%ä`u½Ëqër>º‡\ÍA°9pàt¼<ÝÃNx/±’b “!–¯õÄØÔcƪӎx0בÕóÅ|yµŒ/ß¿™“ÅÍ|±üqºT°C×cCý@?ÏáØdtŸS©æì‡Psù”åõöÅ)î¡Úøw.ÉOï)CãŠr~fÕç^&_ìcÀ9ˆüUF&€yRáè<ÇÊ,Íà22í1+»u€ùMKRxn›Ôßé¨ÃÎEˆsy‡áóÐ"c-ß8Í”ð‘$®Ìó}•Æ›ï(À5LÖò3.Úøáy¢?c C h(ù=~Zvã±va'¥ø S¹Z5ì“:CÁ2bÅ}¸ý×mÖÂÓ}2§Ú ¹ƒïÒîå"OëŽH°7ÿK€Fò•X +endstream endobj 1300 0 obj <> endobj 1301 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1302 0 obj <>stream +hÞÌXÛnÛ6¾÷Sð’BgV¤”v—µi—-KƒÄØP´»PdÚÑjK…$/Ë#í-÷ý¤$[Š“m bYùøHK¶ž½|{-Ùº™ÅÓ~ÂÂ$fÏj3[Í~XÌ^¾‘L²Åj&óñ‡™h‘&L¾ð[lg>f~ˆ{‹|6¾ïlq7ûÀÏOß°H$ìÕËW/^°ËÚ“‰Hxµ®³í¶(×ì¬lM½Êrãý¾ø ¡*AÀæRÈ8b‹×nÆp˜[îçþ­öæR‰˜‡]U»¶(Mc';]Ìb%tŒšbÅL¨ MS&„æ²ÕÙ‚íCÔ,T8zˆ–Ð }ˆ’‡†¤¶ )ÃÃ0髧ÄdD)â"ˆ\†¿d^Šˆß3åKoáR{s%¤¬¸ô$þkw¥5u粮ܽå.o™ Íõìãî×MáÍ‘/¯Jj®­Ö§v)kêå’t¹ÐQ.{4”ÑÌMʆÏÉ×Ç>ŸùÚ3ëÿø5»A,j¿ß-€w C·ß$æÉfã.®ŠõmÛ°+ÓP „äzJ‹€›¥èñßAX+ áÌ}Hꀘlym¯ðz¬C¡÷¬¶äøb«Ø/Ww癧|‘ò{`š„LË@ãy¹¾¾­q%yáŸå';.ó¾&Ç|Bù½ºP +¡Dø­ãUOý8Ž]–ö‰£}Ã2ÖM¹©H¹u˜ aÓç×?^]ü|òöÔ[ü1R›4:0„Ó]8Ö´Yk¶¦l[ÜšI8¤*£¯‰'»xZªi‹ Ptì¼â»]?j4pN?%8|(·ÜO¬/f+ú '›VÇÑì!âAfÃiûhÇÿ0³ArS +endstream endobj 1303 0 obj <> endobj 1304 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1305 0 obj <>stream +hÞÌXËrÛ6Ýë+°'!‚AK7Q3鸵ÇÖÔ § F¢$¶©’TURÿ²÷ %Ò²Sç1ÓñŒE‰îëœs/(Èjòæý­ «f+bxB¢$&Š“:Ÿ,'?Ì&o~DÙr"$áð"1,MˆQœqIfÛ ‡]à·Ù|2ι"³Ãäž^N$š%äí›·¯^‘ë: Khµª³í¶(WäCÙæõ2›çÁo³ŸÀ”r¦4SŠ„‚‰X“Ù;·cÔï-Ž{ßÕA($‹hû›jßeÞØͦ³‰ŽRˆ(f:&Lª4M ‹ÜÉÆKfâî>Íd4¸9Á”({bî3’Ú<¤nFI>z&4úJ;Î1Mˆä"5\š ”"Ÿ%€ÿÆý.!LÏu]¹ßûyK‚˜úk`ïäî÷º)‚ü¥U‰ÙµárÌ—”±Á„¡/‰÷+„¾üàRtÄ·)é?G_Ÿúü}Ÿ]ÿÇÙ¨˜%˜~î Àc_¹|››»¸)Vë¶!7y“”b‚þHÃͬ#€‡°‘Â1P÷Vñ‰OmÉf0 +ŽÐÛ‡²Íþf¿ÃjíV§,ðwÐ1Sî‹¥åì=-Ê–lò ¦ËÃeö׎§«Û]6/Jøy5-WËK îGêrÉ88„€æÈ°wº¨öŸ69qÆcgOCÁ•‰ƒúí1rQW¡³)~Ñ@Õ H±_Ú®IFìšg%š2•è>ÿG„ž *~bPö½¯@‰?÷E QZ! +ö¸÷t™Q‘q‹ ÝY˜ + ”ȼ »õ·ª l›mH[|¦wÞ©w9‘ÜéiÆDïKêø”’³”>hMaÑŒTKÒZó ‹åé.]§VʧØ"e%†$éÃa×9Árãô‡ 3>=ÚFUø€ËFq$çÂಠcQ4mVBôBCldÒ°$Òßæ|æîŠG& ºSe[J:[(-hzb¿Q*l¯}‚¡ŒÌÖEC@–#ø–ðo³ÏÉ60pµÇ¯M Å#ÍÖÆ +ÀÐüd)|‘~ûl³A‰¥· s—e€U ¶âÛçø­Øî·w_+”Œ”DGîž_¸ÕóЫ‡õôréõpgd¨U +§@+Wö +ç!©YÜÉ¿N³Àk£Š?5F Jt&× ‚$Í6ûäÜÞƒÓ«Ëë@v©»QcLøl¾ŒÙT©O½rʾLÜ“× ! ÒA!ob³©(Ê5„¥©•KÉõÅÍÅååôrúîýt3âkÜÝΔDÚÕñÑÁPw‹¥ünö€±Úµ¸Úà€}\£ûY¨Ñ¢*Aº29hÙ'çd¨$KÒGÚØ¡Ô/Ý79ÈN¹y€s“%Jb6Œ°qì~¼¸¾xûá—÷ƒà"&Ï4 .ãq*À JJP1yô󅃌$+ùâA›!JóÍ·ev8Bdõ-~쎧¤ï?ÊxÃ/e^[ÃP\žDêÔòÑ9LàPwYÄmæ‡öÛC5E›‹•ªš§ÿü%54ÇqúÕ£Ôjñ¨A»ÌqÌÀ¸å™QjøÌsÖÎpŽé)+üYÓõ JâtìB)D¿Ùh†C4p< LÝí6]âê$¹'Çy Àr»Xb 0€¤dÜ…T‚eAù]S‡Ý)Þ [¦elÛPßÓ!of’/KÍH& 5¾ï!\/q](„ê£e«ŒÙ¦©ž8á¼.ôù¡ :?*Dz7Ö¡ Dšgå=|¿Úµ¾ÕŽÛ®Æû®ßùðš\áâ(g`|vw…ÍövÔ’3‡ ;êØðÿÀ_Ôà¢á¬žÐª^¼&‡u1_“æ¤Y{z°r¤ÁÕBXÓ¿Iðžð7FþFó3«} ÀêˆëãÛ‰~þæž$-°Câ´èé —¶$©?%ØVÏ„ï&TjCÚæy{/ݱYˆ¯˜¤œÊy[ü=:…|FP;ìŒ:“”ú%¤xÌ÷Ó7¡.«0AáA ¡Ûæ¢&€ª$pNp¼|A2ÅÃùxJâ³,¶ŒNœÅª¬ ð-?:8•™Î&ÿ +0·à +endstream endobj 1306 0 obj <> endobj 1307 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1308 0 obj <>stream +hÞÌWÛrœ8}Ÿ¯Ð#TIHB^ß·¼ã”MÅÎ>Íek\³‰?)¹Ý0€ã¬]ñÖnM0€ºO·NŸnYNÞŸß2²¬&J§$I1ÙÙÉbòk6yÆ#ÙbÂ8‰á'–jjR¢ELcN²í$+4Nà^6›D4ŽcA²/“ûàêôŒHš’ã÷ÇïÞ‘»¥4 Êå.ßn×Å’\µÝ-ò™ ÿÈ~W»’T1Ê”$Ù‰·˜t¶ÙÁöÝ.Œ§I°;ä¦Ü×ëÂVÎØi6Qœj1)*¡\cMR´å¢s»‡3åÉà!¤_î!„Ü%ĸ4“´1‰áBHð÷< •Á#á1 # —:Œ8K2XÈà¨ý}qèDcv>ìJo¾ŸÕ$TTC÷Äúû»jF€7( L®‹6Ætq®4æ ±¤ Ü Äò-Ä¥Do”tçÑßçÎ/|íß±ú?~Ím€P4ÅôÇÍĪٖø xŸG›¿¸Y/WuEnle¡„ ,ø+䚊ÀÎiËÿ†Âš; ++¨Ü§E-°’]]»+x]é„ê–×±¿±‹/WyÈcðó2T22p·sEÂâ XÞ>ä3çœÅTKsÈÃdÜPò§Åüz¯Ë`ZÖ34e‚ÕÝz^¯†pP„”hŠ°õu&)H‘îÏÉ@ +h@*’¤±%½­äDz,­8Í|dÁéôäúlz_Ü]ždaöçBJ9,KAJüFVu^Û­-jJ²•ùRÔÈfÑk=4œq¾’±/²®HùP¯Ë"ß@„sï6â†òÔI¥î¬ð¡ +3HÈgKö•“²Ø<ÂafI¾@É̉$;:Ó”2uûáèørz>ÀŸPÖâo„ÙSÞ¸½DùU ç@é¨L%‰å}×=WE3Ô(¯»x”ÀRáš,æI˯šll¨dë£õÜô´\pÛ³‰ç)÷)ðµKcà +hŒŠ~2 æåþóÆ6¹Qm°œ)ÓF+ýfÝc(Pâ;<õh,ÛNvXã‚à4š¡û>»0^ã|ë¼S<¹âs—C šbk9ìªPˆóA +ÃÔ›B¹²€Îãl@¯…æ×ÏƧp@AÕ'Æ $5Ußú9‚!B@Ç_î‘YUã Ám·S$> + Û㶦Ï]æj¢NØ„¬+Ä3ñÁÎÖ‹5ˆJ •n‹y„6Ò^…tÅeˆ+ÊET ¿ÈôH‡©ƒmwNyS®Qx#ÑÔsuùj¨÷#¬`k½ aÐ0ÁÞå„‚JµM+º&uåÝq3$‡%w„7ýÙó¡øFÝdòØhBÓt ÙO¢íbƒC ~ãÐV‘Ÿoq&W¥ñðÄz£F›®Ó¹|„HÕU¶ÚY¸A¶‚U¹™ÿ Ù LQÓéÚ¡W05ètIÓéFÍGÐÔ|¿Ï]Nϳ‹ìâæôöâúêä‡]H·N¹xIÇyá?ïTvNå‹[ßøá _Ûžãn2ªPAõ“Ì÷¾ƒÈΚ„LÂðFá#È@.8fàN¹‡ÊÃ:x„*€p›!µßmî ÑÐrÏp +½…ÃÑMÑ(dJ£g{¼y¼¯fÉ?†}“K;Œ]u±ÓÞgZ3š‘r¶3rç5‚ú“O¶ïG9϶~.çý”3=Ly…©ÁX"¿ü§fÃ6rÔ¦×M!^)Q*Ô‚·˜B6Øn»®û1ÇófoŸúÃÈÿá(”}±s?yÀWÒß ã•÷q +endstream endobj 1309 0 obj <> endobj 1310 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1311 0 obj <>stream +hÞÌX]sÛ6}ׯÀ#9  ò1ͺi;^·ckš‡d™úÈH¤JRkû'í¿Üs‚"i+[wÚ™ψ^ÜsϹ°`›ÅÛw‚mÚEª˜‰3–d)S1kÊÅzñýrñöÁ[®B²¸ˆÌðÛñm-l+îŇ>ŠŠ÷_Á_UÇeW 8ˆ2’ Oc=b°žûLõÚ»Œôù‹ú” ‰ÆçЀ)?îî»­[.A8ЇÑÄÒœ½C]tlxšÓmmÀe¨’õÃuÊÌòZ¡†ìò4hìx¢µÊ»ca×®ìOÀÅMÝáA†˜‚­­Êµ³Gt1o&¤‹‘ƒü°ÄççWd;Ýd4Û´ÀroB;D³érsóËòý×W7–?NÒ“òô,LóöemøPßr¶D{¸7û} †Š×os¦M‹=Û‡íZ»‹æ 8ïW¿ªÈøY9_œG¦M%ƤœZpv]íŸð±B®© &Þç\š9øöåúá®+šîºx*]m«ÍT£$äD_†9ž).Ï´a컧ª+g®ä©é†êª¤‡ LwH`˜Zžýº³äƒÇ„³ÕöÚJÐçÀ œ„‰¦¿˜ÆQäå¾>}Ù—ÓNJ¸i>´“ÓõOÁƒ$6½¡ Y¥ë€Ví«ª1±Žóð9œö×ÎJg¿ÉŸ˜@87.Êÿ96ˆ™ÊϦ†]…©AP;blÈ16T”AOÑƼDÑ^Dú!³w•Ó'÷¶¥mgG äò¨Ð/ïg)Ž˜Wräw<-L©÷¥L \:ñÜ8qç'£ˆÙmǶ–Ñ Íˆ .%=§8÷¼´YI1VRÌ ).Ì”‹dÞGv¿Ì퇘Æ$>Éü0°õûp/»PÈäÒ1O%©³LŒd½N1à“¤›R?ÔÛR'Ê L¬ágBñ‚L)ÝÃÅòG»§q7{èo/ ÙL¬TÚçv㥖¢¬j´4P¥="¶ïæ<˾µã>ýŸƒ5Mð9ÉaŸ!˜2M>!¦–3~»¤ßN¶0Ôá¯ÙA?3Kz–Ê‹ôK¬ m+g=½(œ‘Ly®g=y.cPLå•gJÏÏ[VXŸk×LZ1åç‰D>#ÞÆý+'T 8 LöìÈqãw[š%úc[v‘‰?ƒEú7u‰h2‡Ä€ GVç%£Ì$rÔ‹ÑìLw!lGÝKâ˜d8ʂױ~(«g£ 4/¹<ÉLv.åMÙ=O¸~v΋TÆc©_$á!em(ˆ}gÍÿéÁGÄŠ+ùÚÁ‡H ü Gžör?vôè%—¨76Q8)eÆ{οzs`þèænÒºZ.þ+ÀC8)¾ +endstream endobj 1312 0 obj <> endobj 1313 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1314 0 obj <>stream +hÞìXÛrÛ6}×Wà‘œXùè&NÇ'ÍØJ2¤´ IìÈ”KRuôIýËî ÒtêdÒN:™1)^örv÷ìaYÏžÿxÅȺ™)At’‘4SD$¤6³Õì‡Åìù+FY¬fŒ“þÁešæÑ"¡ '‹ÛYVh’µÅr6§I’²¸Ÿ}Œ.Î^I3òâù‹gÏÈÛ:f͢ݺ.noËjMΫÖÔ«biâ_?+á\I*™3Ê”$‹—ÎbÚÛfGÛêxÎ8M£ìËݾ-+ÓXcg‹™âT+ÈIQ©å"ÏsBÓ mÙìlÂö&äLy:¸ àÂÞ„”{@r CNàfšuÙc`Lbˆp"¤‹ðu‹”Êè@xÂ⹄SÏ9Ë d±˜Á_í®KÈC§Ñy[ïܵ›ý²%±¢:zÛ;Æ]¯›2žC¼Ñ®Bpm¶ ÂŹ҈Æ’ùX°@ËŸ1¾Šh⌒þ8úùØñ‰ý3VÿÃÙE3„?ñH”/K]¾‹ÏÓíÖ\–ëMÛKÓ!(‹þˆ¹¦"27´ëßšÛV0¹_jxPi ô¼Ï"qœÂø +˜µõþÖTmãGV9CЀ¼›W¤;® ù‡ò¦Ýċߎ>%e¹ì€Ü>xBÜ#ÞU¬B:KÅçÀ’特 <­Ÿòž(x¼ïü«;³,W¥iHAîÑ<8ŒSÏS˜¢jmbsQr¾"›܇ Jz›]1ñmîö¤±f`´Ž5 Rx;)äÒn ÔË[{gß[×&,¥*“eÑÑ×ÎtsW,‘‘Ù°žð¶Ž¶Æ½.áíàeÙW'*îc»#6 À4œÊTD:LÓÜ9¼/kx¸£Þe1ðzˆy‚ÍãpØ,xàaS´}.b ZæžÿHQ²ŽY‚¤ÄS Qƒ‰Šìjb~ß[ yØK€¾}ý}/¹4‡ %4” D÷ˆ.ê†lMÓ8ÏÖ¢5Fp,i&ý~±ÑGƒðÂÞ”™ nªGƒà¬‹ˆ†&*ÏÜ Ú3@T*Váb4–È?BÄšuuQ¸ÒbÆ 3`'@Qmw_œÂiµ¾º+ìÃKwºéº~`!ü çÕj»7Õxóø@ +QØÝÖ­6¨Ý»n]˜ªª+Ÿt6`å19‡Ðù›WïÎÞ¼8A$òÉ™pË+"M mƒ¤CÉšÔ½ì½iX{¼_ö“ŽÛÕ#GÙxøØ`+ÃÛÛLÞÒb…sQŒSS*tÎ n vÂÁ¸ºÛ’/}Í gÛb\/£HíTr—†æ„1‘cB–Õ€êÚ 3xüÄ?î&Š§4Uljš@ùcd­J´ +ˆU»60nF}íÊ¿>ûw¹0ÕºÝ,6Àk›Ýöf€ìH™OpEâ¸"BZa.4 8V£âiÁLÔ#Gk£¬Ž’¹/GCJÇÈMq;êøüØ“AË_œþrv9prs¯Ìy7RfÙ–»jHFȉ7°‡Bäœ\ª¶ø<Š&WNã ŠbB‚{úâ©£¯Æ +(LESXÁeWOJäSäTÅ5ŽÒ6A­ýrÝìö×[3ddØâLå½^p„>A%GÕê= +°‹Ç“a‹Íý«‡>è¯qÕ ív‡×°¢ð››Ã%,žÐåУe*E¸‚>ÅÃ’¾P ÷çýÎÛ7h¿ ·°ÚŸæ¹ll4LÇ8 +6ìÐÙ­Ü,´h ö^&ä“wŠoMPÔûM¹ÜÀmŒSVs$°3\T>1;-¶ªw·N=kÉOEtˆÂœK7<ÜóBÑ Gû5P°×^ÂœûkJ3L¢Ô­®½pûù'÷OíËbµ™gT—"ÔLO?Ï|†›bå•1]/eu'‰Ç‹ pZ; -¢þy'}Ë~ŒÝ^pQ4 >*B¹ËAìÎS»#5Û´*çùƒ‚ù/ï ð5›@¥l +¤ü Ål‡Ñ°ÆÖ^ÌfNÌò‘˜õ;PQ&Ž;0lof~4­*ƒ h¨ëÃŽôLõ£HŒï£ZGà(eÕÈíTk꣜ *è’¿“´<Ѥդe½¤åNÒ*§Py/i{AËœ åAÛ?>¸ò¸¦eYÒs[7ïš«@Öj÷ßIø¹Kr@Žé”§×ïåé›Ï]¿Ý§‘Ê;Õ5’´“ž ™T|­+Ö'õÀU'l§E«k__˜ÿ‹Öï%ZŸ¨_c­ +›äVíÿ«`JªB^ß*UŸ ›³K÷[äêãJ5r_NiBY:U‘(­g‹Ù_ ¶~ +endstream endobj 1315 0 obj <> endobj 1316 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1317 0 obj <>stream +hÞÌWÛnÛF}×Wì#‰„›½p¹ä£›(N +Ç1,¦Aa÷–¨K*“®HÕQÿ¨Ù™Ý%Å•ÇIS 0@ѼÌõÌ9CN£§NÍ(‘D³”ÄiB$#›r4ý”^¼æ„“|>â‚0øƒžjš¥DKF™ ùíˆÊb¸–OGeŒI’ß®‚³ñk¢hJ^¾xùì¹Ø„<¥iP/6ÅííªZ·U[næÅ´ ËWÒºRTJqÊEòWÖbÜÛæ{Û7aăØ!—õ¶]UecŒó‘Š3È(¡*!TÈ,ËS´drKÕIw’¦"öîCM°$ÒÜ„œûŠd¦›qÚ¥‘q…1‰T6ÄwE(cª‚Œ‡‘‚SF‚§³xÈá¨íõѱÆò\lj{m¶¶$L¨~ ÍÒ^ß4«0‚xƒºÂêštÖKˆDcÁ0–ÔÅ‚ÂXþñU Dk”ô¿ÿ~é÷‰ý7VÿǙȄ¦X~æÀ×ÛüŸ'ëµ=¹\-–mC.˦„’òàÏPh*ƒrF»pÖÂ@8Ñ}dªáÁD'ƒ‰6æ1 †“]ÕŸÃü¼­ìÛÍ; x‚TBeŒàeafö*XU-Y—aÌïÏŠ]¹±sº˜ÜÓU——Eµ(Íá:°Å¤ "BD3±W£`VooÖ%±Þë=¦‚'YWqe+~ÜÂp€ÏægÖ.·¨Ž[ö/1|!xŽF£ŒÆRê¡Ï>ƒov^|~²óëÐZ=Ö•™JF=š®‚ P |·ØÞ–UÛ8ë.$àÑq&Ò± ˆö£‰dèGQž©.x)lüiÂû'”µyí-9®Ž$MáA¨[,z²æŽ¬¹Î,ø'wåt5ß‘‚4å´®fä ‘MJ`ãC®àŒ’·s² 9À)¨C8lIcÞ4‰‚xèÔ†dl;!X…êÏàóÿ'í²$P‡Õ­½¿EÓ·`¸ VD8\ŽbøÁN£»ÈúÛësYiÀºñ\ÜÝ­WeCVsãÁäÔzNnjH®¾ùTNmà–Xõ‘3Ö ¥ÖŽa”‹MI!gÀë@º/PÕÚeQ‘zCÊ?¶Åš´5ñ›‘§©×';­~Û{a{‚êš”JWHR@ ×eÓXŸ¶RP)Ô‘*0fT.ðBHQ|„yht±Ò’‘Ó­á2k(ÈÔ•µ%« +ÚŽ4M³ƒ¤uðf«ù<4ôXn`bˆ™nrRWÊnø$®5fþÌ™xØqÑgp %µŒ +„¼ †@¢áKq!j¿á9óìÔÜÀ]ZPSÑ·ŽqnGB<" ÐV|hЕ +Îà*X)«EkÌ-óåN&Ͳ^Ïü Êã‘XŘŽ£’®BnE3+TŠ Tƒõè +ª †-‘û~˜ŒÏÆç§ù›üÍåxòæýÙ+¯™¿öºÙ©¡Hl3›ÀFI¾ì¨Õ¹Õ°Èü ·âÀY5ÆÂZëÃSuKÝDÔwíª®Û8S˜‰›’l›rFêj½ƒÃ´$Ňô°rÀ`6ó·W›Âº<&ƒVýd@ç³½ ¡»è€”ì¼â¢ˆËb 6CTˆ ÀË€"ŸÁîœêf¶Eq˜´ì¸È‘š¡_Ôõî€  j»\#­j Uƒ`Fùžuâe €¾Â”xß_‘}æK<‰ xü=ŸÙ _üÆFÞ/hÌŒgÿ÷âô}…ß·ë݃‘ì~ÝŽóÑ? Uàáä +endstream endobj 1318 0 obj <> endobj 1319 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1320 0 obj <>stream +hÞÌXÍrÛ6¾ë)p'!BAÇIÕq­Ö“qz`$HfKS*IÅÕ#õ-» €)+©Ó¤ÓŒgHŠöÿûvaNV“o®9Y5“D¥$N"#R›Éròr6yñšNfË $‚?¸ñT³,%ZF,dv?‰@ +‹bx7›OBE‘$³‡É-=?{MKÉé‹ÓgÏÈeð”¥t½ªóûû¢Z‘iÕšz™ÏMðëìGP%*Ť$!g3>BHp´Áå> ™ CFàcœvÞ£a\¡‰ð •³ð§<1StGDăPÁ£BÁS0YPp¸êþ=×±Æè\Ök÷n±·$H˜¦¿ö‹qïë¦B°—®+ ®õ6Âp ‘hŒÚ’z[0AhË_nEC4qBI?øù©û—ý7R¿ãe62a)†?ò ˆŸ»|'e鮊Õ]Û+Ó€€”ŒÓÐLR³`]ýûÖ–pÈý ¨aa¢“ ÃÞ‹Èypð•€µÕöÞTmã!›8AP€¢Ã+RoÞVå.˜ý¶‡6gY¦°XcÑC[vÐv±¢o7m±®ò’äµÓEÚ»¼%ÍÆÌ‹eaøiˆ“ª¼T€Cêbõ£ú‹ów#õ’%nÙqN!¿Äcè[×–1.ÛÆ,Ö’/qdÈÇÞ„NʱÑÃ…ÉUäθúsÅ7¨ºÒ\æu^–¦¹xTéa¼Ã,L³®ç'‹:Œá¡‚ÊÅjçe¿z±ðMìÕƒœîª6ÿsä`ƲÄÍ/ø€#LÇ|ÂzzK ˆti‚„s^ü®¶P }Oßÿö¬NÒí©S¸ºt@×è¼:< .z¨OÝ'\œQ„8ü²öܸM ÷¥½û àe¦}ßûÞÿé7ÓW³Æ­n†¾Ãz@=‘$þ§ÂèÞBP‰g‡ì‡TQ›?¶Emé!ƒÆ:ìq=mF~>ƒ^½$;lîô.ßµw®e’Ž”õ$±͈%ãC–ˆºó„P=KØö_EŸ'ú= ÎZz†êNªŸR ‹ê ä±öÞŸ¼;»ngºÇóƒèŠÍÌ‘²™ÛÔ±—¶‡¼¯á.‘%À]hÛ¿`¯>7ÅØÙË ò,â¶üD„Ç;(ÀÅz 9n1<ɺ.¬\ã»…™(L(ÈÃÛÝ!W• ÛßsÛþ4‹µÊ†úzO¾DñÂ*n¬â|?Þ¨jûMCå‹¥Ô_­¼A­Uk̪#ÝУ’hÈ'Ø$†…0¢b!zî¤ѱÃÛ‘È{xñ.Ç_ÄX‰ÇÎ%ß +®ûà-¯Á. +ùÜ`¬XºÑ_ÁªË‹§ýÇó5>Áìdb‡ëÚlj8Îái Óƒ cÈÞRà¤ÎEÀ}k'qsMÕu(~Åà,Ú+”þ¿Å FK(ÀŽìo@]<â Þ!½œXlŸ†+¶eâñ¥{‡ŸªE1ß–8Ï`Hì2Pê~ƒ«˜VIÙ8¡¡? +Oÿ˜T¹§…fxâ}…ÅŸK,Ф;qrõ SKºÜÆÙ±¶ÂídG3 ™ó.`âìÜ +u'Ô±Á5J}²0½ +Zp©¬Œ¦ +¶Áã?œûDÞ~¶!Ïë}Ð||¼NýX6ØOúü-À&`±ô +endstream endobj 1321 0 obj <> endobj 1322 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1323 0 obj <>stream +hÞÔX]oÛ6}÷¯à£´Î¬HŠ¤´·´M·^$Þ‚¢ÝƒjË©[Îdyi~ÒþåÎ%)Ù²•~¬-°¡€¥PÖ½ç~{\ÁnF¼ìf;2ŠÙ$cif˜JX]Ž£'ÓÑãç‚ 6]Œ„d þá"2ËóŒY•ðD²éz”À +ORœMg£1O’D±éÝèu49Î4ÏØÓÇO=bu,2žE››ºX¯—Õ {Q5e½(feüûôg¸RÞ•æJ±±àÂh6}æ-¦m±·}]Çc!y-a‡]nvͲ*·ÎØùt¤Ó® ãRåyÎxš‘%›‘Üšö9‚æ2í=GN(%Ê=DÌ]Fr—‡œáašµá2¡ #n”ö)b•rÝ3™ˆx¬qkã±0ËHÄŸÖŸgĦ–ÒsQoüÙ|7kXl¸~‹Ý“ÒŸ×Ûe<ÞhSQv]¸ åKJc)a„% X¨B„åï˜^% –y£¬»ýùÐõ¿öm¬þ‡¿æ +  Ï(ýI(@bBDê ðU|ž­Vþæryó®Ù²Ër[b”â"ú+––«¨œóvB [éZØ`t÷SmŽ§_4Öô&ÚõsBð£»å¼yOÿØóâRûhúâsOÃS7jMM™Šý‹fø궜-ËrËŠŠ5øAò<ÂÔ$¸Ü³Í‚!¨Ôácåâ 7IðÜgiÔÌ5ïŠÁÞÖÈOÕàÏÒÁÉþ=Ñ‚IŒƒi¾DÔ¼#ÏôŽJ†ÛºŒs à«ZZTÄ….‡îŽÒ–3†ÒØõAâ]¬ÊÅݤˆe‹÷±˜HبZíÈ+†‰¨º¹j +U±5W·Å TÙocDn‘„1ŽË‹XÑã¢.V«rÕ§Ï^Mu.‰‹¸¥'Æ‘gFÔ‰ô³`B·ÅÍõau}\]œ=}ñòÇéÙ“Éy¯Ú–Kÿå¶ ‚.ía¥”k”‹³Ë³Éä|rùëËÉ9¬ýÔ3… E~øR;G¡ºlÛM¹FU9›†²vþ€Cž´ÆG±wþzLŽ1ØIª×Ñ¿ +E†NU6 œÐÖ[¶¹m–›ªXaæ¾è4;0 ;aÃÌ07oK¶Û–s¶©V™jV²euRPXÊ“ÓŠNÎ^_ö@c{˜Eç2o1—3ÂÉY(QÚºDåÒ“ òiò®^nšò‡>I(ó§•N‚§W±H‘€ë0å&Ú±ulñç.ÆǶ¡ Y¹Ä˜ÖIÎiu5ŽëwL5R\{‰À6uÇ ]Š²ãJyÜ~fïK?¡N?ýJ+nó!ß-·tŽDÒ!á£fÑy¯NDå™<è¶Kí×l×MÖ/Ó6Rá´Zlì¼ElFå¾jŠ÷½Ü€øŒ—=tã”XKŽ“nÎ^GKôñªŒMt”1ÐYs…ãŽÊVåE`®7‘ßž¨‹Z&¤©@$dËC0mc¦‰áÖ¾[^GÕn J4Q‰’à‚%ÕË'ô‘±½ñþž¬Ž3P“‡â˜ov€ø·Y Rž ¥N0|˜Th{àMÜÛ£=¶N±:ò¬%ìÖþ£BÓßìˆ*¶}LP~²máÎÇ +hÚ}Ýö¨죅¬Âtk“>¼‘-Ö¯Ô¸ì72Ñ2¢]ë™ +ŠV 0•6Aläuñ~I#­i¤u´f·X{ΘKÚqê–8]ï0Z` ühW10¸°¹£½ +­\V ÷†~oxˆci¸žÉ[™| qH‹î–¼éÔŒK^/Ñ®Y¨ÿ&Ÿ˜lÛŽ¨Ÿ².Ó” ˜y "C~{MO+¿Ó”ú”N\"g‹"ð«›¡º_·m0ÿ¸¢‘øùAâT4Ò+ãlMz¨gÔ±žÉœžQAÏèNϤÑ5T-“È2¹Ÿ«!‘#5c–ü•Îòà2l¤èúų£w·ô7Iî¥1ªÒÎŒïü/ªÍÓ@Tj "1(•êòϦuΖ †¶ËI%ìBGßûÕÞ_«ÄŸvðÿØòng ,¬~ðë>ÛçRJÛ_÷D&gL­ïdÝ°` üä­uü4TY/í3 +²;|ñ9Ú®Õ R†® Ê®·Ÿ ½2Bõ%jA`>Õ—‹…kÓïÐEƒ_Ü} +M±˜L~²³ïhYÃ]NV¶Ôù©d€ö´8’ Ÿ£V®È#‚sþ¡z®!¡E&†äJ½ò•äÊöCЃƨS½r>ý#Àß|±’ +endstream endobj 1324 0 obj <> endobj 1325 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1326 0 obj <>stream +hÞÌWQoÛ6~÷¯à#¹VŒHŠ¤ô˜¶i×!Û‚XX0¤{PlÙQaË™%ÏÍOÚ¿ÜIÉ’ãf)°aCI¡ä»ï>Þwwd99û0dÙLŒ"6NI’¢b²-'‹É›|rö^AòÅDHÃÜDjy–«bK’¯'1Xáqkùlñ8ŽÉ÷“[zyñžhž’·go_½"W[&RžÒÍr[¬×U½$ë¶Ü.ŠYÉ~ËWÊ»Ò\) .Œ&ù;o1ém‹ƒí›-‹„ä ­À¹ÞìÚª.gì"ŸÉ­˜ ׆p©²,#ñJ¼ïÿ®?§ØaçH°¢½m$I9êXtzuþöãOòó7—$¿ùùæã»üûé8s ìeúç2H i‹¶ÄbÅIÜû÷Ú¥>”ëä§däó[Y}<ŸÁï]“ª!›‡¶ÚÔÅÊeï Ô}W:‚¡lÿ0â„œ!»¦œ“5³°I;—U[=¬ ‰ª5ZÕO8…MÍÒU|Ýåù¯×£ Ô±ü¦œ!\R,p¨j‰‹dz*þAô9ùXv8òœq=Ú3Ó-»J¼õc”Æ!u!p2VHä­DŠKbÅÝ{¬ÛâË,ÈÂøy pžË$WIP’tŒc½kɪd†Žq£rÚ),÷ªY•ù~sS9Iú‰~b«\¥ÚIW{‡Aµ2öšM¼f“§šÕÇš5N³Úk4º#5ÃP·Nµ©S­úŒt•Ô¡ßÿ§Ò$ê8Ó¸T:S#KÒµ–n—úD -†ì"¡Z©O”ý8s?ÆÏËßwP¨çA Å‘ˆÀKÁŽe|Z >£N¦Ó(&ÍEªb?l q' +q¿kS HEâü8J0Õ+å0k½\3RX½P2.6X> +ϧ"JÆOË<†Ä#KŒg¨w:ßìàûñ|—À`c²~Àó»s ) +öðvœ˜Rgƒ¬¢¯Ñ`dyba}à¯ä[oÑ㮾Ä[ xœÇŒÕO@¦Åi¢NC¨Â Òû‡#v{0öÓ4úÄ))€Ê:rGY8[ö=-XílGÐ¥%ÌB·!öïØ¡¾ö¤B©'šç¼Ã„mŒ†ÕÑEuê¬! ž50³×é½èaCå æÉñ„JÜO2Ì°†nÈæî3tÀû ýaê/;z@ +endstream endobj 1327 0 obj <> endobj 1328 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1329 0 obj <>stream +hÞÌWÛnÛF}×Wìã6{!—ä£ã(©[×1,¢na÷–V2štI*‰?©Ù™]Þ}I€6@!€¤HîÌÎÌ9g†‚ì¯ß¯Ù× ­HÈ#âGš(N*³Ø-Þ$‹×ï$Ù-„$~pQÈ∄Š3.Ir·à`…qî%›Å’qÎI¾,®èéê XDŽ_¿zEÎ+OD,¢å¾Jïî²bONŠÆT»tc¼?“ŸÁ•r®¦Y +&t@’·Î¢ßÛƒíËÊ[ +É|šrQš¬0µ5¶JCDšš0©â8&ÌÐ’MKêî9ͤ?y9Á”(ûbî3Û<ÄúQ>îL¸G¸PÛ⯩§|Ð"¹ð–\†ÞRŠö,©ð#wŸC ¡bzΫÒÝÛ6 ñ4 éož}bÜýªÎ¼%ì—–f׆Ë1_Rê†{‰Ú½`…p/{¸7g”ôçÙßçÎßùÚ±ú?~Í@iaúy[®Ûßà?ñy”çîâ"Ûß65¹0µ(ÅýìÉ)j¶¬#@ áPZk îÀj=g5¼¨C=c´eÇhu(NM±on½äã@UÁâ8@ìùbàªj¹ª[ª~¸o²²Hs’VûÃ)Òܦ ©ïÍ&ÛeŽüB1`{Ÿ=Ñ™P­ÖrŸ‚†`°)GÐ<79A Ð,¦‡‚ävƒäÆ4_œQІ±U‰V¯¨1…µoY&–¤¼ùh6Mí‰þ2OÁ‘¬íöH«M x)5†,,Ùø">I ÓαM‰UJš’dû¢¬À÷mV÷ù`Ä­Ô`Ve§€XŠ`ðSîÖ÷éô™ZÈÞoØ¡Ð.\·wÉ37 ›ånê]pö8y­Ÿp ê6OoçÖb0‰M­Ôåp|ê&P¼>{pȶ×.Ã]ô`,æá«—7ò$ûýˆVˆº][óASSvg“•¹¯€SEãð0ó#Pö=Ȧ±3hQx_íõ[‚öÁv]Ua+µ´WÀšdˆ$ìU„;o¹Ù}9M=ÉÁ΃'è9tœ¯\ëÛ¯Šm Œ&½ñ°4÷–Ðg vÂz?æè.Ǻ%µM6˜œ¶i9 ˜ŠG؉Äúüèøäì}rôæt5©OÈDŒÖ ¥qÈ$u“6Æq!AjT®™[Ljœ;´‹Û9ß7²ÊlI¶#œ˜i +mԇحÐ5v=ÄxzôÇêb +s«³3£ÙÒ¤zý û¡è#¿l*Ÿ‹ï"€…â§n¯©›Ï ’Òɧö· º-ÀŒiïó™:«÷m`Þ¦o8!¸ñ\O‘ƒ¸'üÆ“0a€”3Á½¢Gv²ñ©›êiOä³nhç ¹ö­1`è\í4:ÐjfŒÑYÏ1ãÞ—Ö5 ¸ ÷MYPîi­ŸÐáû#]‘Ov´…ÅöN–p–„åÒ]Tfõµ1Eíþ•Øùàé 2#`p±ß ÀfýÇ©šçd&ÆÅt@½<¹X­~OVgë“g³öHwß^þ½ÍLÉÂWÛÓ½ô%oa<Œ]b±d œ]a´ëGWë±ûPDD‚™‰´<#Ðeô>Yþ` åãÆ +endstream endobj 1330 0 obj <> endobj 1331 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1332 0 obj <>stream +hÞìWMoÛ8½ûWÌ‘BkV$E}½©[´HÛ 6Ú.Ò=¨6m«¥B’›ä'õ_î I¹²ë,¼‹èaÀIq8óæÍFÀzôìåLÀºÅ +’0…(A…ИÑjôÇ|ôì…óÕHHñ"Mx–B¢BJ˜oG!Záa„sóÅhÌÃ0T0¿Ý°Ëé Ð<…‹gOžÀUˆ”§¬^7ùv[TkxUu¦Yå ü5G)w”æJÁXpk˜?w£½mñÃö‡& É#V ¸®w]Q™Ö›ÎG±äIŒ1Å\ÇÀ¥Ê² x”’- Ø.bÌ\F‹ } ì"†¼$³0d€‹QÚGOŽ M.â‹ÒÎÃ7y "®Ù=ÈPc¯I0–"E—%ÀßÔÍã²H¢„йjj7·Ü-:bž°÷]1n¾i‹`Œþ²º"pm´!Á%eœ^äKê}¡‘/ßÚJŽ$àŒÂþy4|èyæg¿Æêoü™M€ŠyJð‡>aì "—€G9sR–îåºXoº®Mk°”â‚} dÂ3KÞóßS8‘–Â1Vî?5~'ñ  m­%EH°Ù}ÕåwÁü îÖnwƳØU½s‘Ü,mÉÞ°¢ê  d„>ÁVntëF—î‘»É{7ò_6nòÚj7Ú¹Qç…›¬ÜhíFúµ¡osêwn²ëÏZiL×nä×>1—p"jTu!ÉÀó[ֻϥ‡P슸qÖ³B;VÜ`ä㘡Çô®³ÏÊ–5µ×BqÊ£D{ !ífŸwÄÉÒ [—;ÖUW¡D®w[Su­·îýCݽ̒‚Û=ì]#·Ð%tÇæ•Yð,Óu$÷Ê,UöÕ,ŠUaZè6–EÛåÕÂÀç@ \a‚#ü…ÛM±Ø¸Ú²vþ •Nâì‘;-ä`ÏQ˜º1Öú·4KÈ;øV䘱W8L©¥À!†¸”¤z€¡ctx.È^>3û%t5´6ª{¨j ‡lžÇ2ãZéã^¥="Qä{²‹ä—üÖÌãÊá}c÷AâãO¹ÃkÄ«AÐòê8É{m9Ïÿ¤÷@y a:ìüi;øl`[cö¬M^® ^áÀ¥Cr• Ѳ‘ø@`i°zS–ïÊÛp׈DzÛÀ*PŠj…56ïÖÖãŽã!@ÜÒćpÃJê‘È ‰ÊDX©Z0îƒï ®è¶a9nߨñf˜Q/3Î+ÍêöM~7Y~ÁëDÕÍʺ›}ÍèÞ!‡Õ!þYÚŒèÛ·óÌÞ-RºY ÷Žò~h}L—”7““ç¯'Ó·óÙå»ùìjrñêíËCP®³ávåO–ʱ ¦3T­æ›^QüÑ ¶ùá^ý£±JðtšÆŒ½C°½WP U¿vÈἄ¼Z‚‹vкLô(zeP¶²n×bÉÖUy?¨ EEØã!—éOT¿œü9½>ˆDÃOo¸Óhä?ʱÄjôÑK}X)çw8…ÌSòT‡3AÌNQ§‰…Ñ6¶Ô ò»=ˆÛ¶m¬©‰1âóÜ~¡"5¨€ÿÔ2,KØÝ:Unû~!ôPOBq²W •b¤ÔáÙ—bô’”©ŸXo3nïÚˆÂSâÒ¾×쪂üH¼SEzUì|Ûx +yY¢tQsÁ[‰°÷(É®˜ +ú÷rŸ`h1ý΅©- ä€ý^æ> endobj 1334 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1335 0 obj <>stream +hÞÌ—ßoÛ6ÇßýWÜ#…Æ I”³Ø 2$]kíŠtªM»,)°ä&ù“ö_îHJ¶ä&Y°¤ÀÀd$ñŽw÷½%«ÑñٌêE4‹AÅH3ZŽ~IGÇï9pH—#.€á<Ö4‰AKF™€´1´B™Âké|4¦Œ1 éÝè†\LßCHc8=>}÷®6iLªÕ&+Š¼\ÁyÙ˜Í2››àÏôWt%½«J cNyB:ñÕÎ6ßÛþ´ Æ\PEr´×Õ¶ÉKS;cÓtª#Šh2I *¶–\l‘ :êîcÐT¨Á}̉M‰t71æ]F—‡𦊻ðíÎxh÷ˆú-^fT4$ Æ!Nu0<Æ= ÂŽ¿±¿.0­´MÏÕ¦ò×ÛyAD5ù¸;Æ_ßÔy0Æý’ª´Ùuá2›/!"mf÷·{±²{ù;°KíF4x£°þ}j|ác?Çêÿø1WÑئŸµ`Q[®|ÞÄçÉzí'×ùê[Sõ© ö€””“ïÐT³ ]´ÖÂI8ÂÖ}¦«ñÁHG½Žï¢`>‚ì_‰Í¶Ú¦lê¶g#o(º†µ,p½@Šì~v›Í±×ƒô¯}ƒsšà¨X%v .Û×Z{w³[3Ï—¹©¡ùf-åE 1ôm€?ÔÞîä%,òºÉʹñ¥à å‰/Ä Ù–9n•+‘#ÈÖë*à!ÎïÎq0 øjšîSÎ#œVP¯+Ì/Ú¶Îë¬hm½ñ8‰¶ÖÂ5±k¡6ó&¯JêïÒ--9]ÆÝ “bkk›sk(ì¥{m–w—Ùýt±B60Ûþ3´Û¥sÌAÃYÓhÑA©c’7êˆ[^ÖAk%ôVpGaèó¶¯ˆÛ ¹<ùc:9›Î.~KgW'§çΆõdT'ý¥øEä––§1V5Ŗ_ܺÕÈ­7r+¼A^;_c‰°×‡UãÝ‘"·®ºµËÖ• ˜g%JínµÄºÇ¹(ÙÖ¨žª\?àJ¥’ Cdï—â‚‹“ÏÓëAr‹NþLÊ6ˆÇô3ÌK*öqè}Âfe“Ýv‘Ð$ò'–ØC 'E«8áÎÕ’c²Ö&ˆH§¹Ø"ò…xÊQ†"³G ³gßdDÕö뺫hËE’.¶Ð«á†xj‚¬a;î”ÜîOc<{ '_‚aõ¥®„îI½óó38Å‘ OžUbA•ü*O¨ˆ*Ù®>8­[œíà%wðb8¿sFbÊ»¾ÙuÚMŸhÊÍÁÈ`A!Eh›§‰$ÒRuHJ~DÆ'„ S“bbJ|%Áª“æá0I ûµ`b8œ_þ~9™~˜§Ÿu‹©ê%7é’«^£ÞRõBw2éUB=B¡[’¬tûHjŒ+[ôü+_¸òa^žÄÌcGÕ˜Á3Òš~gÊH +[çgH“[/Ÿæá 3±ƒ%Ž;Mþ'ÄðĶ…âõiC}2CÆÄO3€-ˆBȦAq-<]$ã^Éû/ÞÿîE($ö}'´ÔXxH†¤ +ì†ó²ÆÏf?_|éÁgÜ@iŽð3Æ~Nxø5#›fßo™mè[³™cž²•j H5È6&sªÃÕçl_¼ +endstream endobj 1336 0 obj <> endobj 1337 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1338 0 obj <>stream +hÞÌ—[oÛ6Çßý)ø(¡1Ã;©Ç¬I» IVÄÚ‚¢ÝƒjÓŽ[,y™?Ò¾åI]í$õ X²%ëÿüHQ´~œP´(GŠ#M F!NÐƎ棟ÒÑéŠ(Jç#ʨÑ81Hs‚ CéjDÀ +&þK§£1&„p”>Ž¾DWĽ?}ÿîú´‰©Á&Z/6Ùj• tYTv3Ϧ6þ#ý\ñàJbÎјbª$JσEÑÚ¦í»M<¦ ‹(;èv½­ò–ÞØE:R k9),ÂŒ'I‚°0ΖÏÎ'ì/BΘ‰ÁE(‰»û‹r[Ä—!ApQ˜&{•.D8á2DxÅ\`í#4K8Õñ˜Q!³ˆÆ¾MøŸCZhWO›uøo¶V(VXG¿ÇþŠ ÿoÊ<C¼ÑºpÅõÙW.Æ”võr±˜:× Ë?±{Ô¢Q0ŠÚãÞÏçŽGÞöc¬þoó à +W~R7€¨ºT„¼‰Ï³å2œÜæ‹ûªD·¶´0œcý3ydg¸Ñ-aͼ„LîáPs7É~®ýÜ®´Àº›jB¹Ë„„,–vþxÇ«¨ÈW1ãàq Ú…\Û¢ —ªÝpž;t8ûBc7Í«04ÍÌû~ çe¨¶"ƒPÊP`Ò†]_Þ\^ÿv}~q3¹L?ÇéŸ[ƒE¸Ýc#i&Â7$Be•Uve‹ +£ôÞ¢ðdíJÃ,õGºã‰lÀöÝ ¼Dë‡*_ÙeÅÌ{CÏíY§{ʧY¾Y´-í ­‹å¾¦å…+K?T`‰Ãä~Y®Î>_ÜÂ㽄X] Æê íԆõ6ÆTzÓcŽYÇaÝù˜ìŠ*û{M‚øèN ÛÔÄý"Q×d +]ΡK«È‰ t´ Ú©v_£0L˜€VшCìù(š­·ß–M“Tð%0£*i +.ÃÄ}‰VGðpî^‘ãž ë0ú@á^Ñ¢¯ñ ÷b%ó³Q+¶ñs«Ý/¶®»eí Ž xÌšåË­Œ~iˆ`Í«t†ânpCDåA‹h ðɃæó梵®\Ùbè½ñƒ¯ZÙ +t5 æQ¶\®c蟉cJÝÚ1 ÓĦ|_Úýeuî0¢¢u _ïk Ë_»˜&p°þJ,N`9ƒ ¬VÍ‚ “»™B‰²…Eë9Ê[ÙÆfC±="!À«¨¥ªtç 4Y®«+[,ªûa)û}PŸ®oT5©6H°4žÅÍÁXM®~M¯.n>¦?ÜJßÁ6mÚx2uQ`3ð´!G»R½æéÆOöýôiã½%Xð.¤°yÒ©ÏÿИ3,ÍþVL7ôÐ>З褰²‹¸·– +„¶\H3[æ‹7£ù<–¼2tX‡XºËg/Q‰Â^>1Ž5—š·&Ù ¾ælƒüŽßDOÁIö뤆ظ»> endobj 1340 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1341 0 obj <>stream +hÞÌWÛnÛF}×Wìã1×{_òÑ4…Ú6Q£púÀH”ÌB"‘ªãOê_vf—IùRB€–"¹s9sæÌJõìôý• ëffq ’zRuÒ§‘ ƒ1Â…2!ÄŸóHifè=‘\D±KÅR$³¤"ð„ûqÚ!<wu¸·Ü/ZYæèo‘R„û»¦Œbˆ—Ö¢ëÓ列”Ö!`KÒÅ‚ÂXþŽp+âH0JëÑϧÖ¾ö:Vÿǯù(Ë„Ÿwà¶+€Ð¡ßÅçÙf..ËõmÛË¢) ”b‚þIÇ-–¬o€ŽÂNz +[hÝgº^´ÎŽ::>dÁCgп +šm½ßUÛt=kƒ!  ìµÀo¤ÐåW›º½.—ím”ý9´¸`ij³ZâÞ³µŽ«/Å¢\•ECÚÛ‚€•r ¾é>tK°è Á’$ O ÷V(¹C·'¤¬È²lÚ¼Zd_•9D"8SаÃfÕoœ|³©#aì;y±DKϲhÊuÅH‡@¥BUôhú+Ô¤’ÙMn½i9BsSDŠYºº íÂÏyXª5à5ÑÄI¡Œ5]¡âq`Ø‹b‚’ؼÑ+˜é’æ‡XèÕü×ìúÃåÅüâ—÷Ù“:%L0Jû2é0€ÚHF2À%ìì\9£ÑVýBw*5‡’ÇnHÙúK[ÖU¾!yµôc }êü¼p£æƒ‹¼"Ÿ¡æ ”®®6÷ð€"æÓPE`î1,ó³ß/.'á©QB²ÃBÊ.Èb±°¡ãD üAÓ±br˜en„Å}Õæ_'Ѥ šÇ¼À),‚18$=7´4€BcÍ ¤Í'ôˆ!Ýp(pœRç3º¬÷Ÿ7}‘º®ÕL +›ö€›ÐA7t ó<\û ã +Æq9ðÒâL:ÂŽ~Š&Lˆ«µ·w÷aqteÈø aæA­ÀOÊ‹„ »àk ±+]0tF3;»èO"8cÑÚ£#9Hò t"Kio‰c%õSZtÝEÀ×U¤ðG !í|HnÞ’ª€çmÔöFc©‘)G&5 ³Å¹0©ËC¹RÕÑ‚©`Èø¸¸JX4ô½UéúÃù‘J8–¼š(=æÍ4Iü«&¡ê]‚©áŽËÒW\zòÐÉgr”°xN¡¤§ÿ7«È“û*%> endobj 1343 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1344 0 obj <>stream +hÞÌW]oÛ6}÷¯ ò$µ1+Š%¡Øƒë¸m¶t ­Á…*ÓŽV[6$yI°_´¹sI9¶œv(Zˆ4?îǹçÞË6ï½xs%ؼî)É"/fA¬˜ôX¥{³Þ«´÷âµ`‚¥³žð™‡Dñ$f‘ô¸ç³tÙó …{ÖÒ¼×çžçI–Þõnœ‹Ñkò˜ _ Ÿ?g—•+b;«y•-—E9gçe£«Y–k÷cú#TI«*äR²¾àB…,=³ƒGÙb'ûºrûÂçS@¯6MQêÚ¥=åóHÁ'ÅCŸ/“$a<ˆI–ñÎ8l6á3÷ƒÎ& ¡ÒlÂåG@C°Ä[ïÉ0’‰˜ÈÐZø.seÀCçùžpû!¦‘Û÷E “}G¸ßØ®‡ð# +"Bç²ZÙµé&o˜«xä|pÍŽ¶ëU]¸}Øë¬J×xë\¾¯"‹l‰[[(@dË_.]%C"f…²Çñàç·Æï<ößHý3ŠÇ¿×ÀSmD`pƒÅÂNÆÅü¶©ÙX×) %ήqéè)ßò¿¥pä ++dîÓ¤–”É&¯Í ÇUðh—Õ&—sü€ÎBÏî®Ö‹¢¹.*}]L›[7ý}—·»Ar‚ˆSÖ.mrlsâa7¦´­YÆÚì­†Ho§úêòâ<½>®ÏÏÒ·µ1ìqS’-ó 𫛬ÑK]6œ¥·šÙ›­ª9³w5øNu2 íªaEÍVë¦X•Ù‚eåÔhì#6IdjZ´Ç\̳’}ÖlSë)[•‹|rÍŠ’`Ù75ƒÊá!,ƒ_GãŽyrÏ!¿ÅÂ÷[#uN†q{¡å@_„Ft_rWo£=,Ê&»ïX“ðDÙ:HD;k¤i-&9¢\…v•sÈš‰c“†{à +U.JéYÏ™®6ŸÛ )«+à¾PÉðÐfÖ³D„†k3@®§ ·]BEHÍPîAçLÜÞ†¾É„–·[mô.‰F3ßPŒëVAk!ª¯¿mVÔÍî MÄÖž(Ù¤Ã:ìSÇ(ØEc›>èÏ&®Ö:/f²§§¡©Xº`Hâl\|–ìŠñ!Íd©@J«gwÍÔo›é)1nZ€ÄľMYÀEÐ"pN]òše‹ÅÊHJxì…{ Ûö‘XAw® ¶2Ï\ImÍ,@戴IdnÖ°Rc¿Yïо6¹—ÉxãÔk’8ào¡ÿv |Å•j©(=µ„9»È\ߣæL'Ô[ñ­Øè>3ƒ]x=8ë…®»o“Wð¤x$Šl5)ÙBAÕfFE9ø„ÂÃäŽôkWÒüz¥“-¡È¦}»"ä#B_àMͱ?cõjißJ ©§3´Û~3Û”&ÙkTýj“AÜÜy|… Š^t5cU Ò`€ˆ X‰~TnHqTp®U<Fœ%v¼Üäw¿â9$¬3´„ÀÇRCŽ’פN"D M V,?g¹]ûÒšª-f¼›øOª”TxZ*Õ2Ì”ª ¥êAWÃWlbZÝЪú’ÒúZÒ¬ÁpúõÚuC]š™NÝÎ ¢ø ú,k2ZÝ´ó‰Ëþ42Ògí-hoo!G^v÷P±GUñY¾©*TŸ—Û'^¾N:ɹ)ìÞS« •äÿÀLo²ª¹ÈàèxEVQ¤'ÎÉ;y2qtߎpbøÓ§ñèjâ@Ê“É­P#«úöýøü·÷?§ƒ‹“SæñäÈ.‹&G3íŽ,˜ +÷è¾Ñe š8ǵÎrƒ: .ødx¶ÅAÀŸiÊ‹]lUË0#?öÔÐXŽÃ¤ÁpH„ÇjÙœQ(š¨|oF'§Xÿ7°!‰p‚òèÆûub¤¾}B˜ž÷Og|:ìÎàåý·"£ª +endstream endobj 1345 0 obj <> endobj 1346 0 obj <>/Border[0 0 0]/Rect[63 441.24 104.82 454.74]/Subtype/Link/Type/Annot>> endobj 1347 0 obj <> endobj 1348 0 obj <> endobj 1349 0 obj <> endobj 1350 0 obj <> endobj 1351 0 obj <> endobj 1352 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1353 0 obj <>stream +hÞÌY_oÛÈקX䉼³6Ü¿$qèCÎqÚ´ÉÅ°…‡øPÐÔÊf!Q>’ªã‡~Šë—è·ìÌî’\Ò²ã-P–hr93;3¿ßÌl¹Y¼þý%#7íB ’&‘™&"!Yl?®¯ß1ÂÈj³`œ$ð¾X–Ò<#©HhÂÉj·H@ +M$Ü[•‹%M’DÕýâsôáìQ4#§¯O¿ÿžœ71Ëhíošb·«êò¾îL³)Jÿ²ú#¨N•¢B%£L+²zë$ÊA6eÿ¥‰—ŒSU ‡\ì]U›Ö +;[-”ÌaGš*M(yž*3”d÷¦9Muÿ6M¹œ<Ÿ K„}{<’[?äʬß>ZÆÚB9?±TE„',^*¸Lã%gØÌ#3øÌÜ} IeŠî9oöîÞúPv$Ö4þÛ'ÆÝoÚ*^‚½Ñ¾FïÚí&è/ÎuŠC[2o FmùWŒ¯¢!)qBÉð=ûó©ï.ûßHý?^f 4ÍÐý‰@¢}˜tø¯è|³Ýº‹‹êæ¶kÉ…i `@Ê¢¿Ç<¥"2kÚÀ§pÊm +k€îˆjå –Ó\»|Æ‹\‚9¢:áy‰ßü4€0‘ß‘­ÙÜ(Lóæô]c~=À]S—W‘8!å¡iLÝ]Å?é™ ^Þz1§8ƒNÿô׋³Ë«„ökWßù V ˜ÏÉ/ /¡úl©Ÿ^ÄÜ"õì"îÉÇ‹ŽíkU\o Ü=«»¦lmxÿëšh8«×V ²Ü:¼Š^}¯¾I®]@)WC&ÆÁÇAч¦&ÉÿðÛÓyæèœR +v#Ün Ð=Í€3¡I¢d…;rÓN4K©cìh‡ú~*vf¢ºª‰ Ä 3õ:¡ØJÀjÃÇö`|²‘œåëpçcèÀœ@³é%~ŽÖ#3Vk(%Õj‹ .^bcMÑ¢RíùÃ2ëµÁöym6 d dmæIȳS¬Æ­  œ†\ÔyIp ÜÖ¬òc.PY²‹SðÀÝ`sQnk`ÂkÓÝÇŒÁcj¿1ŽMíÆ(ð »èn¡¯Ì<Ý©Öòñ…©èû—£™%‡OPô’ ºÁ…í)«Í†ÄzÓ¹¦Æ¬?êÈ5dK–Ã|a‰ AÖƒ“éc¼nÜ__â%øîn êö›+¨~H®tª±âXצ-]rˆ¨º†ðÜšÆZ—F'1ÇÉú·¾s “!s˜Þ¶†Or°ÁÇB1×4:ÝÜñ’uÄÙg¸g÷þ+;˱Û|R¸Ÿ©,BÿéåôÏ^`£„Š¬û~Áê9èðÙ"íxA(U®|´òDð¨z½®,vû!.•u$ìM~<“ö±L0ªèC M±J`£áñé<ƒ ÔpP]?ýx9Égeäó`—´vE'dßL¡|TÝÎßÿ4š«#mæ>±‘;³¾ëiNA·1aîË&ÛM¬TóoìMúxñ¡X ¢ÅY†8Ëg¶-Ãî ÊSº¦¦lÛ=ñy÷ÔšYÝ9™"HJÌ"ˆ]F$ö'O§§„皀cÐ…³± ß“O×mçðËmóÈîbTæ8eyJ³gÀ  ©ÊYžúö貫øËìWÐåb"1rŸD¨?jü†ÑØå[=›z¿y˜J@᥉K{°ag gÏŶÝÔ1/°ÉXß<¶/>Ÿ]¬~žàJŽçOõº£7£š½½ÓÒ€7V€€èq ÙÅÏÈb¼ Ö°~ç^sHö L<Ó†d^>ŸB|:G€*‘³“v>"¤²Ý0çÇ&I¦ÜËxìW5еt{?¸š¢¼50J|£‘Ã$p>5r¬%_€%KA!Ÿ‡—ÓQË¥=™X3=ðÄ0°„j†;îÄ®¹#öè/3®"wÖKáäD³Ü×0ÿ”°þ¶h¾›ŸÐEpž÷Ħ\á…ãðegÐItqVšdzt{ÿ[€²·ú> +endstream endobj 1354 0 obj <> endobj 1355 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1356 0 obj <>stream +hÞÌXÛrÛ6}×WàlL„¸ ó&ËNÆ­myd%íLÒF¦u$*%©¤þ¤þewÞ%9î4™éxÆ¢Dpo8çì‚œ¬F/ßÜs²*FZDDEšÈ€äéh9:Ÿ^¾æ„“ùrÄ à>xdX#2ߎ°Â¿Í#ŸA Éüëè=½¾|MB‘ÉËÉ‹ä.÷xÄ"º[åÉv»ÎVä*+Ó|™,Rï÷ùÏàJ:W!“’øœq’ù…³¨Û¼µýkîù\0E×`‡Ìvûr¥…5v9iÁŒ†œ4 5aBÆqL˜ŠÐ–ÍÎ&loBÎL¨ÞM( .ö&¤Ü$¶eˆ ÜTQ=ÆC .dè"¼I<©XH‰¸ç‡pi<_ðB”{þGÍïÜ(ƒÕ¹Ëwî·‡ý¢$žf†¾óìÔýžkχxé.ÃâÚl,—Ú`½0–¨Š7cùÛÃG1CœQÒ|¾žú|æ²cõ¼Ìn€Ô,ÂòÕºÚ®Ü|ŸãÍÆ]ÌÖ«OeAfi‘¤dœ~ñ„a’¦¬Æa#,„50÷ RÃBmt‡Ð~“Eà2}%pmµß¦YYT”ÕÎPÔ|E)°t¥Ûd‘ïn“mêÍÿhéÍY‡X%z‹¯–;ôþsºX/×iAÊO)ÉÀÙ- Z‰Y»*ûÕrûœpÏájë”|LQ`Ò%(”Äú¯“–(_6o{©‡±`:BiÙÚ(L'ïMºüz™=Ü€YOLÓ]_­z5 uXÕ°ÖAžD +f\F.žÐPÀ\—Rи¥7ãÉlÚ+›lÁ%14ºŠtQ®A–žˆP¬¸äÖWQÕòô·Œs†e«Œ†­ëã»R#ÃN˜´_T_(Ý×L´¢mËHï³2ù«—rÌbít/°n ÄRUå=ïé:+É&õ4m6`÷:º±êš _ÀâÅ.+J²€ÕŸ’ü§A®J,â&W‡ë÷)()] âjj3vO…MʦŸóï[HR¡$Õ8ªü „jü„t7Ù$Eñˆ0¹¯[ŸÐÚí¶m{‘k{IH?j ð4¹ßßÃS¯» +£k@•I™"Ñ™#`{. ãu]l„O¹–íG\E®Èº »ÏˆãdC’ìvÝB» D ~S²’Ûɾ„ï²Í#ü[¤dÆ1H“UnžK·ž: ÛM¶  ¡ß™$ Æ“°ø·Ðù¾$øbI°Ù§øÁ‡XŠyhº 8Ã$|Ð.a;Î;Aÿç(Ä·¢ò°Ë#^œ–û>£™º}Y'_‡Ÿh]<¬ñÈk1®[}¿y¹vT>~N=®¡O³ºªñÜty·õ¼Ã¢@UàH÷öêc8}ÕW@‚îéT¿Á0uÈj{Lß]ÎN•U§gC¡>04»º}3°#¿m'ì…{~=ür¢Ù=ËÀÝøb°Oæ_Z˜Lg—ƒ4TcÁ¥ŠI+×ÈÏÈ.ïÛ‡Müòöb2¾sët-BœEÐmOÀM< ·V@;½¿…[BŠýGDŽ¦™Tbfºb]‹Ýó9<‡0„‰¡*ŒY€Ô«åy>21a +p¶SVD(Jü n]pÑñâ5F±M'hÏ„U*gä[¬²ó¢{²õ°Mîí7$7 +=/1 ÌÌÀÉ > endobj 1358 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1359 0 obj <>stream +hÞÌXMs›H½ëWÌqØ„ 33›bˉ¶lI+“øìHÈÖY6ñOÚ¹Ý3€IŽ]Iª¶\%aýùÞëNn¯Þ^sr[ ”$Ú ‰*"=²M«Á›xðê‚NâÕ€ âÁ|ñP³($ZzÌ$¾x`…y>ü/.ó2Äs™›(¾lSƽ‘qñŽ|WÀÆ+$“¼?®ù?uŒ¶Ué$N]ï)•ƒ.Êv»À=¢_BELù¹´}J‘hP¾püæùÖñiº¾Ý<¢b‡þU’èVšnŠrÕ–2»‰HÜÁct 1ÓùhüvÒIÖgâˆÎ„¢òr d/ŠEº-3ú{¾xG5eãM÷½ÈZ[²îómŠx­Üå ¡]«±MO(œ‹_+$þ˜Æ èçêœ6«åHxIa±ðˆØ®T?Wð`Q¥Ë² ~Ñ;Áµ¹òS1²n´Ü7Óe¾ûœ¥]rú-Cà]ïô[Ö) gÒãâЬ™°àþ¨³‡w†éx‚2x‘:(j¾]›²nÊ>i£æòöøh)‡=ÅL :žw²h¿ Öäò¤Ù}èô›z¸â@2Æ“Ùû¸Ç‚°µ™H[š®%!8}÷­À„{®•ñdz2V±ñ´†Ýt6½ÍOûû†l0׳áYÏŠdM§«!€>}[ý—$ßìVLèàè~5œ†ãÞ‚µ Hµ!d[` i£1ô ´÷Wãb4:ßÍß÷^«'wu/…4Þß¾;5,N7Eõw\4u9½é—ŽÿÄöžLÍ +{?‡¬­á$M&`ïò²cP± =N,döm9D ô÷°7`6Îz¥óÄq¨à"[PÙ³b49?ë™iPslžÎqyÛÂ0>šnMm¸³2;9O ׇ¯ûR ô³ÐRo:»]ÄýêégÂÌÌ¿};êy¹y擾™Æñôê ,|¶8– {²-à±j“ÃQãÔï Z8âê”ÛÃ4óupzv9àØ'!ìÌAÏâxUeëWÙ†{< aãûTšÓ >=º3Ç0µ¢¼Š™×ì“þ^ÂD#aÕ»&|”H²âµã†@ŠÂªÚ<Ýûõ‚Ólz8Šuc¢Ú=?8Z˜ŽO"»TÀ +ÚÁgþáNýSÅøÖC…0Õª—wÈ@ûÒ~*ü½z+XŸ ~ìÌ ˆ-­X +endstream endobj 1360 0 obj <> endobj 1361 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[305.04 487.26 479.82 500.76]/Subtype/Link/Type/Annot>> endobj 1362 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1363 0 obj <>stream +hÞìWÛnÜ6}߯à#Õfñ*©o®.š8°éCÝEæîªÕJÆJ®ãïh¢Ù’ºíÆF‘4@‹V´.Ù3çÌ 9Ù,ž¿ºâdÓ.Œ$Iœ•"c²·‹õâÛÕâù'œ¬Ö .H pái²”$2f± «Ý"+,VpoU,–,ŽcIV÷‹é÷/ψf)9}~úõ×äí>â)Ki³Ùç»]YoÈyÝÙý:/lôÓê;ØJú­4“’,9ãF“Õ oQ ¶ùhû‡}´ä‚)Z‚rÙÜuem[gìåjaK Äd˜6„ ™ea*E[.:°{13¡f|Aº‡òHæ`Èvý‹¯}«ÿà×\¤a)‡Ä&$€+Ÿ€¿eÏ“ªò‹Ër³íZri[ ’qúk$&©½a=ÿ…á(l@¹Oˆ^4‰™z9DûN@¾´¶¹ÛÙºkƒd7½^±8¹ÒÂVÕ›|g£ÕÏ£º9Ë2|U¢KöâæÆïuuk‹r]Ú–ÜoËbKÖ‘H!¸4#éÞ–›š\ÓW/®œ §, ߈b(÷ z~~‘ö¡íìŽÔà ér×Z0mkr[¡sX*½ šXšòš”uÛåuaI³&ݶl ¾¹éIqÂmÒ J»¼+zesˆ–!pÀ)ÈÔ ú¡òðèžàHìžÿ0Ø`Föó?T3lYl<´\Á!{p/n»²©óŠäûK/ïHë@€<¬7a•ƒ@iK\°¤Á*ŒÜ+7%楂4Å@Òûˆs¸@e®ìºó:;±Ö£Lçú²^ 5PÑ>t)ê¶ýNØÁÂ<ðX¶ d'‚¹ÍÉôÑEˆ<ÝzwqYBè9BôhÖëÖvd½ov=§ Ÿ?È9t6çÔ%§€•ðãI 0 +F®¢}†b’cÇÏi'4îXl 6‹~•‡LF\t‡Ì7c1£žÊÆ›="ñˆF'DT*÷ݦ4Bí:e)ff4‡„Ð&É“t̉‹#…ý1"?ˆëHB³ÇL$!Xzž¤D,f:jÎå9£FΨѿ'’+³£ä.ù¼b˜Móì‚Ï=¼ÌÛP}9Lg.‚$˜ÂÅPˆÞå0%ZÁ¯¦wn DÂé7óaKºšq\qBAÐdÈÈÁaQ;%™ÔÙQ’'ý“‘³HÆCŽÉá)k'Áþf´t-p!\–ž‘ÖZòÛ…OT(H,6Éžd§Ím歷¡ä)è–KRÂc…:ú¢ÇÖ©[§Š3 Ve1ŽÅÐ>Q^z€D{H`·Û|c‰pT€ÝúÏün&c™9ÞLm–dèÕ¸ÙÐ@¾·K|Ã}æV8°ê˜ã]tÈ€le#è~t}ó*,Š}$°Í6gÀzuõtÕíç´™M +ó¾ó\ô“gçIÕºVPriHaã:Ðú@9šeZ‘äìâòåù«73ª¨™|ÔlCJ iC§G½ÊgïŽhË&öóº/DPEÊÖ‹g„ܯg,Î`Ä>¤¨÷À50C¸fîf#µ' +[ÊÓпk¬wf•²Û%c ²·¨M?öv,£–̨$š°Ê\Ê>Ö€3QŠbЇúÒô,Ìi]þKÄ3wVŸ6ô|pHN˜VÿòåÔ Ú/œºl~ƒŽçC±NY2/u#Ïd8á”p–ÜÀ4¬ Ž^z{Ä/m>^zîñ„_È—fèõ )Ða?MjýÑŽåcô½ÅôÆ1hš&œ3¡9åuF[u,Š×'§—óL…"¨L=¢–[[¸ö5+0½K&ô¼žÓ«(“þÅž”U*ŠR#_dè\PC®©?-1ÌYc.³tºýà;½iîÞWv>t«‰!ØݘGÆö˜‹ãÝ€upàÿÜÍ>{³OCçƒC^º9¾ÐT¸N¦N\Gó4mBB}Oq”ÝM&ê/qªäú_}¬L>ùTÙãô•âÿSåýT “ëŸ .7Þ +endstream endobj 1364 0 obj <> endobj 1365 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1366 0 obj <>stream +hÞÜXËnÛFÝë+] ›h2/ÉîÒÔR4v` ÉÂéB–(™…L"]ÛŸÔ¿ì½ó 9´ØH …’æãι¯sÏHÝìÕÛ… »vfÉxNtnˆâäPζ³Ÿ—³WÇ‚²Ü΄$þà$òŒ9Ég\’åÕŒƒÆ5Ü[®gsÆ9Wdy3;§¿“”åäÍ«7/^‡Dä,§Íî°ººªêyWwåa»Z—ÉïË_a)å–J™Rd.˜0)Yþâ,êÞ¶l:$s!™¦Ø!gÍuWÕek-g©.À#ÃRC˜TEQ¦s´d}3’e&<§™ÔÑsˆ †DÙ‡às‘ÂÆ¡ ðPçÁ}D&RÄ*u߯¥YJïˆä"™§p™%s)rÀ,©H wŸƒ#™Î0<»·¹^w$1,£û¤t÷m•Ì/mjŒ®u—c¼¤4 ±ä f±ü•à§$#Î(éÏ“;?ñµÇêø5›eXŽáç>Üøíð¬ùz¿wgÕî²kÉYÙ–ÐJ1AÿLdÆ-7,4€/áLÚ6кCW›iWË&3“ŽF8â§Í¡*ë.Yþ1´©`E‘bÝi1ô© +}*3ûÝé—®jêÕž¬»ë+0AºËUGÚ/åºÚVeKФÐÌðÔÅÎZ˜Ä·RwY’Æu{NÉ +Í’f 欻9´ñØÂÇ9-É6QÐó´Iàp(«]MÖ%Äó沬 Ú¿Z­ ©ZRÕ.§s qÍ,…¾’>›5‚QPO §ËOðYX7ïˆç·ÔN0U8¬|ˆð?L¢+GîȘZ)ééP” ‡è2gC;ˆ'-b*EWü’çôã +˜ÄÐ=Szm¯d2AŠY1¢kSâÖñ1™»‡ô$ò™Á›úròašFf?ÅŸ§ò™ß/&ßçÏüþèûàŸ<žÂ§ø41 dÏ(òISyo@ô=¡]½„šÍ –É{…y죄€ÂéoYÃ^q¤gòFO|çt_noÞCG%’ÃàiNÕ®ªãªŠÈ'…\Øy:c•Â÷¯õ9Ìz¨÷zÒSšé¨BôÓ³woßÅIQÐc¢Â†§'꺷´ÍD–@ ñ:÷ˆêÉk™~-=] y§ \i—,˜’?ÀÌü§«zCÖ†‹’\·å†4õþë2pWδL§2*L%ç,¦[M+ /Äbpïýë7g§‘wÒòÿ„£Ð¶tÕ–kË‚QõÌ5Ës€¥˜P ”Dw@ž·¤‚Æi.¼@Ù妤¯7©]½UÃ}™êÊÎÜgê¦3ðž´‰£f¢Ú4×ûÒûnB IaŠóÔØ`ÑÛý$@Š‹q“Зø•»ñ=¸g,v÷­Å>'q3Ž[HËlÔB¡_ƒìV0–Ü€h}9{ e(ÆÓÈaÑc(eq 4Z"X^…6™ÈáËYq_΋^ô£Zö¤ÕüÀ8TÂë§ü O4•Àp0KTT‘džé,†ë +ïv?åî"}„{M?ž¾îw¹¹×¾ƒÑTÎÙ}“ ¢7°‡ÖìÈÝ—˜³¿¦ ñ#Ä@bÊ­½/ 6Áã‘èÙl…’;íæ”MÄ a‡µnšÃ¦ªWÈ·[—µ“¦¯”Zdb„®¡`ƒ¹ÆË.ËGþÇhüì¼h®ë n¸/šD!ˆÛ`ÄæpR2øóMóøÌWÒ¬ÃЋÊñä7´YÀ_™û0ÐÆsßôØu4÷Ÿû“q hôý±¿x·<šŒ*ý@²rù´‰/ùs–ˆøgÅc“Þ®’±T?´ïÑ>snëz_9©zHÆð4,xå6ðÝHÀN‘ÿOU„‚TÁ}U`9>¦ +óêú ^¿\~œŒ¨)‡‘¬ý9†vå žVWe\>éhÎ{„‹T|ß×…“ØØ'æỌ+ÕWF:šÃh…¬Ú¶A3ÅÐkakî·ØŽº×T¸ãj|]Ã^büz6ùE*žRŠö?[ü-ÀË€´È +endstream endobj 1367 0 obj <> endobj 1368 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[305.04 251.22 479.82 264.72]/Subtype/Link/Type/Annot>> endobj 1369 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1370 0 obj <>stream +hÞÌXÛnÜ6}߯à£Ôd‘I©o©“)$°iŒ¤²V^«Ø• I®ãïh¢Ù’ºPò¦q’]YçvfÎÌ,#»Õ“ŸÏÙµ+%ˆŽ'Šˆˆ4ÅêrõÓfõä#Œl.WŒ“þà‹%š¦ Ñ"¢'›Ã*)4ŠáÞ&_­iE‚lnWïƒ_Ÿ¿ ’&ääÉÉ£GäM²„&A½k²Ã¡¬väeÕÍe–áï›_@•°ª$‚¬eJ’Í3+1d³QöoM¸fœÆA rÈi}Ó•UÑaÏ7+Å©Và“¢RÊEš¦„Æ Ê2Þ‡ÍCð™òØ{!Á„y.IMRã¤÷ cM„ !­…¯²PÄTw„G,\K¸Ôáš³Læ |¦ö>\TõOûР„s/üG$¸ÈA>ZΊ™ô;>\%nõx=t¢¦ÉtÊÖÄÔ¶V@-ºʈ\˾3©íÃrm©¾ÑpCƒ`ƒ„9ýeÕ–Û¢,tç[= ±Å ìݼ#C«O 9ò|§c± Ó PxcMÊ]…Ôö^XmÄb0é§^®ú&Ô1L!4Úx™6[')§^ÀÑ#éÍfÍ®„H ÔƒÔÏ>"½ !ÝH:­&“u¥‘P®§’A‚›9kQ3Û™“Ó!Öƒæă÷už™)âž ®­s8×l&>*‘ƒ9êÄ ÷È„q“®ƒ¾»ÂIÓÅÓM8ñ@LÓéÉÚð§ìáS7æ:ŸfÁþ¾ÃŠº¯8Ó”»>’¸^D\Øy ýô†=~:í ”÷Nüý.GÉ œ®5Ì ðÑØù²¬.qêo€ëØŠRÊÇ0ä¯×6•D[<Ò¼M(H•“Ö‘¿ûå j ‡s˜-hBX*'ÐG±2Ç-.žwèÇv=›†™ãtNÞ0â²+7Éš†3¨I™Ys¡h±ÏÅ:E‹œ¢I ©GÈÈZÈûzÖ=Óȧˆ]ø¼>b`.&=Ï[±,‰ýoƒ8 mémi±ß5-iƒò Ø¡ ¶[³°º cô²ÉÙá'›ˆÙv‹« +øhw8£‡dôåê ôŽlËÆ.†=U¿–®”æ»ÏdqxÃoŸÒ[¥?UHbøÅ/ZÀ=¼¾ì튲ã´ÞÂøTÌ{{’Êä€1ËNí0>|Ìd’~FX„Qti0M¨ð6YG1jfw «uP•Ëa= Ø9©ßvÀÿ +0a”v +endstream endobj 1371 0 obj <> endobj 1372 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1373 0 obj <>stream +hÞÌX[oÛ6~÷¯ úDu5+’¢.{ëÚdè°^mƒvŠÌ8Úl)ä¥ùIû—;‡¤.”“.i; `)–xîçûÎ1'›ÅÓ_O9Ù´‹X’$LI”ÆD†¤Ñ‹‹Å/«ÅÓcN8Y],¸ !üÁ…§ ËR’È…‚¬v‹¤°0‚ïVÅbÉÂ0”du½øH?:&Š¥äùÓç?ýDÞ6OYJëM“ïveµ!/«N7y¡ƒ?V¿*iU)&%YrÆcEV/¬ÄhÍGÙï›`É‹h rÈI½ïÊJ·FØÑj¡¢ <Š™Š 2Ë2¢%ßbÁ’¸N3yÏ!&i‚ÏCD2‡ŒÀÃ(íÝG˸BáF*kâ«<Sô†ˆK·I°<›å‡ÏÌ~/À‘$J0ÛníÍI¹¹ìZr¢[ = %ãôï@$LR½f}¸N„)áZ÷°«%¶²ils¯ÇIÄ’±­]ë…Ö‹­¾¸~•M BÐUŸBã½E½Í;èÁê´kˆßÌ#n ì(a(ogFôEšXé϶­©}AÉ5¶v +w ¡%y/Tõ‘)ecÖÑÓ—«£`õ稠Á¾´t`3bЉ’¶Ë;½ÓUGºË¼#eUl÷k£¬¥ä +=Bq\±D¨‰ > ˜)D¿ + Œ¬.Ë–4ˆÜv—š´ùN“ÜÞûn,EÄrê’AºDéC mˆmp=ß8gYv`Ü)‘¹Šëí¸.»K£]€Ùý\è«®ô¨/¦FÅNpÄDÚ×±£[7%ÄʳA²Ô3Aö&8Œ&y³Ùc„Ÿë˲#ò¿žAýê>Z«y Fÿ3Àï l1² +ÖD@Xè)«¶Óù1¢RÆÓ[ìP0¯àH§7Ð4 +ðŸ2ÈÔ1¤mžš˜e.0Ùؼ¾ jñ|KrSRáãåPÿ´Z“,<×dßê5ÙÕÆÒ¬YB—¥|V+I$+ ® +¨º +ÛÅXé|‰€O'iË—¾zöüäÍÌ#¿ªú¦Â9¥ t„ÙCE–‰alÉ„òMsa»©ºü³oSƲØ)Þ4¨(f@¶ ¨Í`N7ALýF”ùÔã.CAò ‘_À¡¢†ª œºÌ›Ç³êN€%E6”·…é´ÊRéNûE X¦Ñ€éÖ*úÄæ#c©ärªš®ëýùV;Gã>ø‚LJ +kÔ×”¼|ðµb³;”&,Jàá7)Ýœ=ÀK¤5å{ äkƒ.M6gÚ0P!€ÆÌ¿lòú>ɳ¯ÑG«ýîƒWb_ôKAÝØvú +=gߤç k1~Wyýáa ¦ßCíÙÝj 4ÒOáG0êÚ%aàyØ$à®%‡vÖ¢0Ë +rŽ€ =wÚS1Ÿš@< [BBŒïW>=ºq1éJåE©E#áç-L )šB êYD˜¹ž%àúÚ°*¾ùÓÁ Ç-Fþ./ê&ˆpr°E!°> |›¹›_Ã8¦„z®³±[†i 0¼ÏSMÊM…œë¦ M[FÓ±¤ëEl­ãÀôfÙê4É°š~i°r¼$%Îb)³;²Ô'É&ˆ3™Ý– ©Üv>m€1M 'ïJ7M‰d*!$¸qªö3š£æd‚»õëAsÚaÙÖEn‰;ò™âZ>Oç£G³(‰Q‰”¨1¡.“ ãÙ<‘bèjS¯Ôå¾Ã¾¨›r"«nõßçÉdú‡cCL·ð©èÞÜå%œþì/A0¥Ä·õ­svéë[ Í”x*o ¢ïýãJ<ðüéì|úÀóGßfþñëÛó{ïgøX!â^Nç†UÈì¶d"»A>¶ñÅqà‚ƒª=>ò@1Ëñ€ãn™_¾õÒGúq,^È) Na/´°÷_H«Šc4þ7©…yÐ~®DƒÖ,ìØ{vω'E0þ(b˜¯×¸® €Ï$‡õÏÀ.‘ÍÕ-'ˆ{CÖec··1¬Ý®ÏyOüÎzÛ΀4>£ÎJ ¼³†÷É iÜB‡t™WÓÌOi …KÏÙ>ÍÔjÀˆ˜U`v|?˜…Ì°’Ý£ +l†QviršŽëd8ûVòsÝ]\P­+W ^†½ì‰pÈ“:¬·?HêŽV‹:VSÒ +endstream endobj 1374 0 obj <> endobj 1375 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1376 0 obj <>stream +hÞÌ—ÝrÛ6…ïõ¸š!~½Kc§“NÝflNÚÔé-Q;éŠT]õú–ÝHŠ”lÇIÓ™Nf(†$v‹s>À‚¬f/¾½dÕÌŒ"6Œ‰Ž Q!Ùæ³åì›töâµ ‚¤Ë™$„ð#bË“˜XòP’t3 ! +5¢b‹C쟶,’kZ@rYïÚ¢Êì<É­9Â¥J’„pc,7;7a÷æÌ¥ž¼„–àʽ„) I\/uÜÏ –7*ò^dLiÑ=‘¡`A·–RÄP²¤‚ ¸&þ¹‚yXm±;o·µ¶ØÍ[ ·ôsorÿ|Û,€zi]asÝlCl—”Æb¿°–¸«kù›áP,Ä” ¿Gÿ}è÷‰Ÿý7QÿÇŸ¹P†ÇØþ°[€Ðt ´_€/’óeYú›Ëbµnr™79X@).èLZ®h¾à½þ; [é$lÀ¹§¦VèdçkwŸ«¹íuúâË|yw‘Í·L† ¢úªø ôBÒ#ã´åhÛwGoÑ97Fß6$#]”ÈGJ¢Èw2ÄQ®zõæ—s–þvH¾÷õÄqñ¥K@IÓfm¾É«–“t?²K`Á*Ña¬PfQÉèÛc‘¢ÿ¾+¶ù‚dÕÂå‚Çj<¾7¦ŒÝðyV‘›œìSWå.óœ6e\r‹ E{Ô˜‹—¯.œÔ¬FùdŸOvåæó¶¨+ît2·ŠËmí¨#ûªÍþœ“ðÄx +â ,ušQn+ÀL®E×´€–”93ÔkU“ Þ-< ²BdèÙŒ.êÝMÙ/“ñi4—Â$½¥"o©kzô£Å¢ÅŸõ±rd”Œ”CŸcÀÀrmáù(ßPæ§$^cƼX¹Äí‰fC×”!õ6iñÄÈ"‰{kôñ_Âþ¨`3[íPNM— « /û jr)î  kŸE0Ô-} ¦sã&¾Ð‰ÿd#N&‚^%NnZTù:¯nóy±Ü“|Ûx±a¨°cpÙx+'<Ò÷›&ñö¿©wÕO[cV­@'"âÖ+Àí °)@3•ï´%Šlíòœ,‘y–Ö .[_*ép&èþ!‹Hà%ôi0Ó0·`0Ê5*#ͺޕ ´iF6,vsp-Ûâ¶Ìû¥=¦Q0ÚI½tõÝ–pÚq´X1U"‘ÛEÇíÇЬ…æÆt6yt +h€Þo6y ¡hæþF«Ø~9@¿¿¸8O/ßOt¤y|_[ YO¢ôç$éw^¯µ#@×·H¿¬ÄñÐ=žF׃ø>A³c z¥<>œÚ²~Z09Þ +Äc—<™l;OøuçCrSúc$÷òÚ?Dók:ç¶dCÖÙö+2E.¬<Åk³G°BdüèSÍE#&°Òèn‹þlÄêÄoM7ÙÉò·<ˆG9•Oçȼƒ¦ÏʲfÂÀÎ%$͘ 7L +Z2IsRo=@WjVªÍpÁÏ<ÌÓæ©ô Ñ=Å1ìD¬bŒwôÚ@%A¨á=tß +úõ”°Âfì:6—ÿèÏ“.qs˜’šlFýÀhÂ:µ5×æø†üï9tnLp{Ê‹Ë$œªä”ªÂnâ‘V¤× +2õªÍ€ƒ°_HÚ^°@Ñ)+·ëÀòÓ38~Ã^ãÆ%hÕíž<\¡bpÚ(YDëÙÒq)î í}è5§“<;ÿáêMzÌD1ˆít9†aåÄ3 Yã!üÓΖ®öø8EÄí¸,1”Õ¹§‡¾?•»#üažtG€Ç{¡ÿ>áp.<6§Ìyw,˜ìø!üÑöWŽ +endstream endobj 1377 0 obj <> endobj 1378 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1379 0 obj <>stream +hÞÌWÛŽÛ6}÷Wð‘jj†‘”ú–f7EŠ$v-ŠMYk«°¥T’»ñ'õ/;CJ²h{ƒMÒEµ,™3gÎÌœ ²š=ýåZU;3ŠXž81DqÒ³»ÙÏ‹ÙÓ‚²¸› I8üƒ‘X–&Ä*θ$‹íŒƒÆc¸·ÈgsÆ9Wdq?»¥¯._Íòüéó'OÈÛ& Kh½j²í¶¬VäeÕÍ]–Ñ‹_Á•ò®4SŠÌF“Å…·¶ÅÁöoM4’Å´;äªÞueU´ÎØåb¦ã"2L¤JÓ”°8AK.6#™5ÃsšÉ8xœ %Ê=„˜GFRÇCJàaœ á#2¡#\(í!¾Î"3M÷DrÍ5\Úh.E˜%‘€¿©¿C 6¶HÏÛ¦ö÷–»¼#‘a–ÞDîIáï7mÍ/­+d×…Ë‘/)EÂKÒcÁ !–"<Š@,ñFÉøyôõ¡ÏGþìÛXýÿÌ%@– ý¼O7}DìðŸø|¶Ùø‹«rµîZrU´ô€RLп#i™¢Å’ З°•®„ ´îPÇf†çÆšI#»JFìqÓË,_“hñ't§öÝ)™ÖÚÇÉñwôâòÍõËÅïþG} ÇLúŸ rà›w$£í²®ØUG¶‘…xvüi;¼ñ` ¹/»µgWfR=±8´šp­F»uÙ’Æ÷?ɪ%)à¿;Þ­‹þ4(ÖÇò¢oŠ»ûËjù:Ë›ú¢¨Ú²Û¡uŠ¯dß÷’H`Ï1hyl=Ϥº‹a±š²ç9_9´¸>!5Û´µc6Af`Ö9N™c‰:¹¦¤¬òÍn vdSdº:&OÊxm¶¡4¸›÷*ÛÍU‘w!ƒ1KÓŽQ«„ùC¥ì(] U4wú'%ªàÈCbYx&õ9J¯÷U—} ãIYj¼œãô‚NR¦\/`>]d·.ªë.24kºitï†Þg: ˜ãD¸€#y]9œYgÍRã½ZPj™R¡}ÀM²N÷ØІ¾É¶EX,@ˆUA㽋|0'Q iäê[ú F°‚y¹Úa™´!,˜!rh +ç.z@ˆš …@µk¢XèÐ-½þPäå]Y´®ï %è>’SG¨'r¿.¡ ººïkÅì´Ä8åPм) ¤±%pŽ@gÓsÒ"­/È È\ÞeÕj»…¥,¬ð +Ô8®ÜNr­™‰û¼{¶¸·7”4D]|(lüŽÁA2!:E]™“p‘ 2K;Ɉ”=pܹœ#·Ì@‡BXô`µ%™ôG²Õ/¦…àëûêòù"È,F#QVhDYyq Lƒð&ú‹$iT$çM»cdqÆŸÆ¡B¬HO#‚Püµ+›bé†@žUÞ㨗üDôí ;Îñû‚ìZ8¹­¬88[Wy4e¡hÀö–Ƨü?‚18L½àØ VA“òë”LAEŸU2ØJ =#Ñï(Ü@Ðè²Þ½ß ÃÀŒ3^˜ƒŒ×5ô£ÉbŠ 9RàÐ%ÜfaþBGûïåè£ü^}sGÃXâˆAA…¨üÌ6;w÷¸G©Õc§ŽÔæ릎~ †¦Â™QcxÔŧKž>Mö縖!5g÷Òäéd‚ΧÚ¿AÍÓ¼®›eYen›0~„>»d{a„Cõh×8 q=ÌB3h °/\ì0øã.½HÜ@q|z!ø·Î#øŠ&‡üg+_£°GË$x_BÔ½C„Žgà@Ö… ï †n௦;w /ÑVПÂA ‚gô™\õU0¥< ™ãQéF{¿Nã’sTKéÉÔœñj‡‰1€xxkÂL¶–‰Æ÷ï/¸£¨qgùÔr’Û¢êçT XkO_¤@Zä#‡ <óÖ"åñ tæáµõ_Cv8Ý +endstream endobj 1380 0 obj <> endobj 1381 0 obj <>/Border[0 0 0]/Rect[334.5 87.24 499.2 100.74]/Subtype/Link/Type/Annot>> endobj 1382 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1383 0 obj <>stream +hÞÌXÛnã6}÷WLó$ucFuEчÝ$Ûn»Û]$î uQ(6m«kK$7I‹~Pÿ²gHʱgÑ-R I`39œ9s;”¤ùàä‹KIóv(JƒŒ¢,!P£³Á‹Ñàä¥$I£Ù@†à_2KEžQª„4Z HA„¹Ñd0A(Ý ~ò^Ÿ¿¤Xdtzrúì½k|™‰Ì«çM±Z•Õœ^UnfÅDû?¾ÂQÊ ¥h(…LbY‰ÑF¶¼—ý}ãe("¯„º¨×]YéÖ; ’P¤ lJDœUžç$¢ŒeëŒÁæ!la´óðeÂä ¹!'<Œ²ÞzVLƬ"*¶¾)|‰Ø»£0þ0Æ0õ‡¡Ì rèI_â3·ó1ìH£”Ñy×Ôvnºžtä'"õ¾óÍm盶ô‡Ð׫+×X0\a˜¤Œë’9]ØA¬Ë_>oeER²Bió½÷ïcßÿpÙ#õ¼Ì8@%"cøç€ q‘uÀ“œù|¹´ƒ‹r¾èZºÐ­F +(%¤÷›¦Byz*úøw!œ†&„dî’ “4ÙJh“k)[°Þå]Õ·ä~ÅöØnÏEžØtà‹ˆ¡"Ý¡ÉÙŸ¼¥žÝœW~âMß“¦>ÓU[vwcoì»´ï•Q\VŒ>fÄòd"’ŒSÞH ú 6)6iü0@¨éü¶X]/]úojÉŽ…q–; MÂÊ>a]I-4Í|%Eî™”ÞrYû2Âÿ7\®´ÂPïÖçÚä™Ó¨]ô+üa„Ù– +šF ÊFD_] sI¹\^_æpè{jlõ¢›²[PMº»kMΘ¸7Fpu1"­W[ƒêéÕû6X÷¨Þ=q¶u~êÌ S³UÐhQ¶Æ¡C„oŦæ¦n}Ø£¢}ÅÃj‘lcF+̶4[W“®DEšËeK]M“F+VÏX† ÍP²z# $¡ó'½êhZë–ªº£²š,×Sv ïB ã-kÂ~«K°Ç0Û‡p]æLÜj+}@9[®T_µw–%sm¤ +zÉ(Ĉ ®ÀTT¤íÃ;XêY`bï†5°Q€ÉãCaàÎÜjëpå­}„Ƥ³rpšÜ·ßƒnÇÔjm"Æ‚s(VñcM4ìÏ~»9,âÃÏbØjg5"¤?ß›‡†98®X8{G#s"§3¦;Ú¯VǼÔ dÞíE¡°„2uá¦)QçX'ÆãêhìoðpžÜ:¶Ñݺ©Hn–˜‡rBÐó&kÙeW4Q ZcúÕ7ßmÎ:Îé—ç î׿\œ_Ž=HÚÒë€tkó²h[+ýôíÅùÑ1}óíë×6þÑ/ëF—óÊøëª_Bx`þ†òIxWßèf Î +7O"ñ²ü]½$e‰á1…ÑÓH½[­4*òHü@?ÒE=‘Â>âè‡÷äG={\8XƒÏþÜcAŽþ#£Œ™#,[— |‹ÿàR•€ÿ˜ZnÛÕ(”½Ä¾Ž+u/ë¾ý„®óõ¼¤E&šé’{UµOLb‘ä;Ääí‹Ë."Ev ªØQ!TàGÛ´pT@m·Ò¼%NL«™†åf—¡?Þ,ÊÉÂjŒž³MÉz@UèÌÖ̧¹v>{Í[àb9Eagz*¾ ~¿×[7—ß4ÜâÌ{Bô)ÈÊ3Cå­8ÖÜÚŽÇ¥e)à€‡X§¹<À&Ø~…1í•ßHì\ÃùGz7Þ5Þr;Ÿ‰è‘cw¬T¾çϨgöÑiš\§WºêŽú+¢â„[QšL)‰Ä¼béoŠ÷µ#Êq*娕½ ·¯¹–Pz …µ0²òíBmsQ~W”xŸsr_Õ|ÍLñBÏøJ›à‚FWû¯‰øÚ•> 3Á‡Ã¶¿ „ +endstream endobj 1384 0 obj <> endobj 1385 0 obj <> endobj 1386 0 obj <> endobj 1387 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1388 0 obj <>stream +hÞÌXÛnÛF}×Wì#·‰6Ü+ÉG'VÒqØj‚ éM­l™’T|GûýËÎ,¹¼É6’¦ +ÍË\ÎÌ93'׋'/.9¹®F’(Œ‰Š ‘!©ìb»xº^Oôð$÷‘tmLÒb3s%à‰öpêeUlîô³Ä»èÒºÐ]²¤ê„„4¥s¥XÂG1µ¥…ûjHƒ.4.0ëƒ[ï9ÈÀTÄD߇ ¹sØ8ƒz ¹çO/§ð€˜†Gš(eÜE^Û¬ÉË‚‘5T¤²û4/Pg÷ƒsÂ3ñðJÕIVIÊ«ºie•gmÀccë ¯Ep-÷•Ù‡ume7$/ CòÚG-;èªCa)bf´hÚ:êh0/²ÝaV¯lsK92X‹€ +}¤Ð®pž¯b2K|ÖÐß­ÍçfY”>*bÛÿ>Ó%¤™î?í órëší·y‡,Šæ Îúá4AK+sÄáÆV–â“Ác*ÕµµäÏV)@ÓcbDJB$K`l™°ŸGÖJˆæ•¢cîr,9ÂøùÝOλ‚FЦ +·EX}nSëÝ{“Î=×ÐÀêþT¬˜ŒGŒ¸÷'¶,XìïqÞø€=h‰Y>n‰ÄŠ—R35kî®»óSzmqÀ1¼ý¨è²_ :)A-íúH 5ª)6 ×/'¦í¾çhì˜=œpÂSfæ½1xH¾%õ!Ël]o;Ö>è·,‰«•Åhªc®ã2w2âÕâ•(Cg˜Šï<JʃsÆÖÓEk24Wãfê¥A$­«ÖDîÃä9–|ð+`yXÀdï#š +JF:³åìŸ<»8Ÿxƒõæ¥<ÖGУ®úío‡¼Žn) S‡|‚¤ÙÍ\£cØuõ7fêWc‰i(‡‰†CÃè¹þù¥2t‚di‚ SwCöe…³ΔEf;Ì\ >TÅb9Ÿ¦÷'†±¸ìç"ªI×µ»I¿¢¬Ä°¬K&ªEƒ›Ë/E“~ž• ²¹p‹†‡5½©v¸æECv–š`¶-| >Ò®÷SFÕY ;‹£•€‚$Aq1¸Ÿ2ræ<¼Â‹VlÀRG‚qn +vðo쌯ƒÙmhß…²äúA”GÛÒWa,"=ÂØ {€µøÔÖùuqqØQxß`Wïò ì?÷C/¾a’7Ñù{í‹ñ¥¯>R ð¢Éyºº|ùâõÅϯVï^ž®œ”#¹cŒwEÆ ¯±{[4Œ¬r¨v5gì’êÈÛ«“÷«‹»DiVôÁg>ÏCѵ¾{‹~(¡Ñ~Ûn‘Ýü„NPã•t¢ò²Û\Fєպð’s îÛ—'ô·öÂ~Iõ.`Œ M`)Ñã=0ƾ +ïpc· Úr AÉ+Ž^=L¬ÿ Ñ ç³A„ê|¤¹Ýº +/bÑ|ÇçQ¿\ÊaÓ×0Q¦Û£6Ë(È,n©Òo©=×Âïã97À0u?Ï=É{bâiGÈAû&ëÞ¶ðç„ß8…dz²€údpãMZýàã5o!Dâ ¦{)Hñç ¾žšàuº·Ó*-»ÇF~úxƒMy¸Úyi5½´rsìæÍCôøu3—¡Ço†¨jífú·G[½ +endstream endobj 1389 0 obj <> endobj 1390 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1391 0 obj <>stream +hÞÌXÙnÛF}×WÌ#™F“Ù8$XI]¸±a« ‚¤(h‰ZZ‰4HªŽ>©Ù33$ER²ë  P ).w›{ιcN–£Wïn9Y–#-IÈ"¢"M$#E:ZŒ^OG¯ÞrÂÉt1â‚0üáÄ£Æ %£LévÄ`…2…{ÓÙhLc’LFŸ½ËÉ[Ј¼yõæ‡ÈuáóˆF^¾,’ív-ÉEV¥Å"™¥þ¯ÓŸàJ:W•’Œ9å: ÓsgQµ¶ùÁöÇÂsA•·†r“ïªu––ÖØd:Ò‚†9ihB…Œã˜P[6;›°}ˆœ©P½‡(‰yAÚ‡H¹-Hl˳jµ7D“’yZ®—1´âÆÎ<ߤ®JH&­’K‡’‹EÑü¥õf‹€*tH¹INèzÅò»²²~á•› °:kÄ[¤I•ÎIR’„”«ä>%ùv]H`_ÖÍ—·Vë„aÁF¦½c/÷q(H ”÷É̈Èl•Î|ãþvc×>{R¯gP¯OHYS^vXHÖ[Dª ‡á*'(p^Ô5ƒàðV‰¦²ö+¯Z!‹fÑ©sÖàO%µ´W@a Ðt„­¤ÔøÛ¤>ÞñFWp1+|¼ª¼üꮼLp~¶bÀ±èkjé*¶Þàd\S”M3àÚ¹²º9]5ëÖ/#š48T ^ž}šÜôŠ(,½66ÄPC’”Ú„LÖh³âÈMDCu´VÇ®äa¹šî $zyyd> ñ0@çâ|r{ñîýÍ/—“çÓ{΢A^¢­Ü ùqN†ªUt„#çøÃÅÙ€N¢®Ø±+²5 ¸G^Y‘;C ŒBs€Ý—‘$BÈSÇP¸z}ûDáPÓÊÔá<Éædp¼+áukvË@Ñî8:p+x´‘Ëc:G cIEpè¨Û}V%_](uĸv£—¹0MŒî—¢FŠ°= ¾@5ma2+6 B_<'ÓÔP©™•˜ÞÎñÅ,ÏP²>Y%Å ÒW€C•ˆ› œŠ &0oo´W{Vß­…=žñ^ZÆY¬U׺7ÏwwǶ­{E×ÇîKãìgN`À¾sf¢ëü‹ßçœ.È ê0Aãà;H=†(µÞÓzî´ž[­çNëŒ;áT‹ZÖ˜Mßo°¯°[eBîlÃR2zE5"4‰…M^J¨¥æÉÔz Å(ïùÑw)c/´Þú¡E°Í.:4Ã[³²FÞ¶U?(aîÇøôÁçÌlæ@aõàì0ªzã„jë딦±òt¨‘24¢kw"'bŠ.RÆl·ý͉ceN«òH˜û]S sDEò“ºü¹æˆx ŠF\¶ãg m Þ×Í O% űKp¢pªïrÿ,—“éèoœ„J +endstream endobj 1392 0 obj <> endobj 1393 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1394 0 obj <>stream +hÞìXmsÛ6þ®_ä5B€xáG7qÛt’‹ÇÑ´õØ7Z¢eÞI¤KRgë'õ_v_@+½dšÎõCÇ3"M‹ÝgwŸÝ#ÛÅËo?0²mJ’EDBšbq·øzµxù #Œ¬îŒ“þàÂŒ¦™!Z$4ádµ_$ …&)<[­Kš$‰ «ÇÅuôöü"©!¯^¾úê+rÑÄÌPÕÛ&ßïËjKÞT]ÑÜåë"þ×ê{ØJ¸­$‚,eJ’Õk'1d³QöM¼dœ¦Q rÈe}èʪh­°óÕB¦X¤¨T„r‘e¡©AIÖ6Å©Vý{0šò4x˜ $¾›D2‹CFàejzóQ3&QG¸Ò©ø.EJet$„5·!¬ uǬ–.Õ2š)Ïx“ ¢4IǬN¸Í¼ˆÊ +rõoX®ÜrÈ½Ä +°FKgtTö?¹Ïdÿ™JLê>Kì'/ð=D3*³¡›`.½7üŒ½®þð^›úp»+ÂíRÊ™ÊfÛ]G-¤^ô¯ñRüäyËo-h6h8ÝÚPÆʾèÖWÿkë›ØÉ|Fß + zïèÔ ?rÀ¤Ûþ¨ºÖK÷ +»ðž‘èÓú‹¼»oÝ>ž»Í2kjÊ}x(Öå]Y´¤»/,¾ÎƵUjÌãÒ¥¾#(œt5Y7EÞ1C£^³Ôm·dŒ*)'ú%c¸†¨RÁ倩Õ艑è˜8[­D¸øÈ»—”+k6“½%—,f|9|eíhInM#·E÷C)€œ-* Jë!Ú‡ºD/€É›Ì&§Áè6.µç—°róCWïó®\ç»ÝÑ­M(7“Ŭ_¬3¿¸ˆ¡šgÑS¼&éŠjã¼´+ª-H´B–<£Æغ¬IC™ñ&Þ¢Ê<:‚‘û|wGÀ“(j}hˆ,+*£I&'ú¤.Éc¹Ý ¬ÝÖp-<wHo*ªA‚ŠDN¼eë¯G‘óh¿@Ýë.¯¶;ˆPâÛèŒ<4`2’f•õ¡%a:a–£|ˆ¥ß¼^}xÜǃ‹“¥Ð.î¥÷’ÍvÒv˜`¤lA³_eƒ|í’ ™@"|—s[¿î ¯ññ!fã¥È×÷àï²A€=L¨DSt}ýÙÇVbøi;kû¢¤Ø!Âè¥'R7½»¡3šÛÃ{wûçHò'°ä&JårSlc4øslV +°{w«ièömRŸê;L‰(¡î(S£YS%”³›˜’Ž¦I¯'9é~MÏ×Ѧ„à©Ö9T%VÉÌy1ð£ê©Cü>¥3D¾ý¹'£G+°"¦ž lç)áÀJœè¤­âÓxk‘qËmU7ÅD<;Y@°~Œ1Ôcv£’éбÁ“™qÝž½Ã)6ÅüÇžo@>éÉ÷îñL0SäÀÛ*Z7J,ªß߶oóÚ‘jáüÉà¿æ"†iGDõJ*lÜÖU8ÀͦàÜŸ yJ‡~ÁNðçwl‹žõ´ò9Äïß^}ûþŸЀ܉lu'Ñœ—`ƒ;Mé¨5=±ÑÙ¬àÃ2)Ю¿Q)§´aéù# +³lLn6hœZX@lÝYoªO„Ûåù«ÕÇUÏL˜˜s.Áv@a; °š+ø±Ø+0ü>sË’*ô$›' +½=»:¿<Õ%MSÀNŽ±©·Î+lKp5¤ Ó':î3öÐB‹¼ÇÔú« a\ÓÇSŽ0–Hmš@ŒóYétJ8V]þÀŽÅÄHøüá¾]Å ÚJAåëÆ%̱h.êÝq ëê&rgÐióéø÷‰Ãí5V¦ŸíÔ¹—c;¯Ëf(áÀɵ>=ë^û‰ó à¬‹2163Ê ØO»ù„5öÙ– +fÜD~™-xË¿O*>ý¤bþÂœ8¯øÿS€~È_â¬âgH¢cìù“žjíûž[P#ç=w8ñž<Õpóœ0¿Ã`nhÛaé$m¹)l%ïO7ÎW‹ßëi +endstream endobj 1395 0 obj <> endobj 1396 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1397 0 obj <>stream +hÞäXÛrÛ8}×Wà¬1âB€|ôf=·ÊnRŽj&.ghV4#‘Z’Z[Ÿ´¹Ýx•’µ3³S[µå*ëB²8è>}Ž8Y/^}÷ž“u³Ð’˜$#*ÓD&¤¶‹‡Å_–‹WßrÂÉòaÁIà^xfXž#–²Ü-ˆÂß-W‹˜%I"ÉòqqKß\}KR–‘ׯ^ó yWG¢êcó!öÏusÁÝ@r]ÚMiìj¹Ð‚ {Ò,Õ„ ™ç9a*ÃXnwnÃî"ì™ 5¹à Ò]„-÷€ä†œÀE•u»Ç…ñ—odêWø·"’Š¥ôHD£8…·&ŠÏ`É‚òˆÃÿÜ/Ü(ƒè¼«+ÿÝýaÕ’H3CŠÜ뿯›MÃziU"¸n· Â%„6ˆ®% kÁµü+ÂGq!†ø ¤}üÜë3oûïDý¾Í€Ô,Cø“p‰À•?€?$çåvëß\oÖŸÚ†\ÛÆB HÉ8ýg$ “ÔÞ³®þC áJXCçM­çM 7j£' íê9ÁåÓ'-…ÇÒð“~§ Þ{sCL¦eƒ‹@ááÐÝ,¶†rU|èî®u¸+Wú~oW›‡mHAûƒ-W–Td_mJŒ d2Ÿ$ƒÝq@ÓVdmK@Ç=­…Hûj{\CÓ8|xÂò¼?®ðÜÚV;Û"¢€£<D¹lbÛ_écÙûµõc!™1Ž¶º.ìÂîÜ"ükZrgɾëÚní—Úº3€Ä°-1çÓO–<‘ª&GRìl‰¥ö©hIãJö,™öÊÞ»·on¾{û÷InÅ„¿Ngb\èÆ-ý‡åÕõåòjö<Ÿ ÈõSÒ´Pþ¸R6Å$…ыʲs§+OŽgƘAùEy?-Ʊ§usœE>­›X‘‰¹HÃA`Uº²#^bi§Ðb1Üݨ ‹Uµ=ìÊÆ-¦*Çøèå7À ã-É>¼ ]ø¦;à]ñ[Ma` ##ö.qQc' +£>é(Ã@O‰~2 \«˜> ʸ˜å¬˜c6” ]?#ÜŽs`ìH>Gª»_‰¼C +K}R¢ø(° ²)ÉýJ¶CF™9 ÝÒC¹i{ƹ³í#Ì!$¶táN‘Îiw;#ïCâ€G×óIWò£ÖH¦£B{"–3† ĺY—Umq5š–BYÈÛ Y‰êÕ=÷¨!…ƒÕ'_¯ãXn¢(æàͪŽð­ÞÞ5o +xGî(ˆ3ø_GÐÇôÔœÓkî w¡*ÜÉÜuŒ´óGÝÉ\áéæ–:‰›y‰‹ãpŠ!$à'^_½^ΚL͇%¦41ÄÕ¬Oò€üLOiìrùýç󸆂Z™²Y:_$B„£ëJ‘»ƒöÃn&E´I_AÏ¢U‹9dÁ"áð†õCâÊÐÊ}Þnáå×#ÎLIO`Âùz¨7—7W׳å䡆ÚVÐ *·òTØÐa™Øh«¢D1qhœ$=£F„ÆÍx +Ü‚.$;ßÚCK¨KਪôÁƒy±3m–8Ä%ét ù½½?–mñ49’œåÚ›$|ƒí%Uh/¡<¡³è.ízkUû†:ÚúÚ®ÚÔ‹jÇyèl´Z€Õ}u¸ÛÚ鬂ẗr©Ö>þÓbóÙù°<åÙ¸/ø@ÏÌ8S¿Ð—¤<þù)Ý.ÅŸ¿Ë? %ÀL4¨$×}>_üg¥f’©Ó\)TKÆo®›ÏæÕîÅÇÈY2ôknŸæ~¢I@´?Oa ã 9Ã÷ ï6yî}ÔWæÙÔ7ÿ)õÇÈÇäg¦˜ÈÒ@T»wÝÒË:‚9«h7'š(95PÒs³ùLk Lð›§ÔKÌÅÓV|ݺôbê*€^Õà*Æ +ÍÈ ÐƆ·tþ µ™W‡ºFÎß‚ñŠ¤yê(E÷’#§½„3f,n;íl:íüCÞi¥Nâ6a÷ Àjï÷U‚tÈòÇJk[7¡äC’a`õÒ)¦NõáSàoñåS„‘¬Û¡û· ")Ž†J-Æ»çVÔ Ëÿ{'Ú©ƒíŽàžµ¢;P³ÙÙóÇ?÷«“¶OY.ÇÄ÷ ªÈ9óiX"Ó3Ó˜3szº@æ¼QüpÞ(Ž‘9qD#‚âÎÍíñ‹æVöÁ;'ØŒýK,U8›sîTè Û+=|Ù‰âß°é bÇ?üˆ,lpnDÑ;9' +þˆ:’hK¼‰y/2÷¢ÀÙWXÑþgxaôú`0>à}Ó%ÛmÉh~jßÇn4pÖývK{zêA9™P%ü¨R’¬/ýPûó£@¼UŸµª˜F¤Ï4«‚ÏÂnÉàPû*ùàe'j_ 54õ² +æhÿóî¿wåb +endstream endobj 1398 0 obj <> endobj 1399 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1400 0 obj <>stream +hÞÌWms›Fþ®_q6\îøè$Nꎛdl5NÆé‚MG 8úIý—ݽ’í8u;ÓÑ àvŸÝ}öÙC«Ùó7ç‚\53«HÄc¢cK'u>[Î^ÌgÏ_ "È|9’pøÁIÄKb)θ$óõŒƒÆ5Ü›g³qΙßÎ.ééñkbXL^>ùóÏä}ˆ˜Å´ºªÓõº(¯ÈIÙæõ2Íòàù¯àJyW†)EBÁ„5dþÊ[Ôƒm±³}Q¡LÓì³jÓeÞ8cÇó™Ñ Dd™±„I•$ a:FK.6+Ydûç4“zòr‚)Qî!Ä"1Â…2âoi 43tK$Ahà2 +B)bÀ,© ¹¿'éÓó¾®ü½Å&kI`YD?îIîï×M„€—V%f×…Ë1_RÚ†Xâ V±üàRo” 罿÷ùÚcõüš+€²,Æôó®ÜvÚà_ñy´Zù‹³âêºmÈYÞäÐJ1A¿2bŠæ Ö7@GáH: +[hÝîVØÊ®±Ý¼n#Í¢][sá"á>ŠUhº¼fkšÕ@ªêÝ—æ4ÅkA·pÛ SJh8^åYB ø“ÐE€}MÛëiÇïÄèˆa¿¯}WõM帖±á’’ΊñV c|ø€™^œ¼šÿÌÿÜySþ^©œyéìSÒ´i›¯ó²ed~¿®³A‡™ÝZñ9½ëõk ÃÈ)RÝ´EU¦+’– ’¡È¢ˆFËe/2vëÓ’|Éɦɤ*W[8d9)J‡7” SÚ8î›–Ó°S‰wEO>Ÿ=‡ìó%»8ò ±3¿¨cUu€br§àÑÁù¶lÓo K¬V¼ ¡rã½¹ô]Òò´Ž‚Yí™·Íë‹b”²ô3õÍÈ8P ‘£DC`‹jóeÕ—Óz—šIa“¾cïØKz âJÁž®÷ &M2"ýLâžÐØH×Q{ëG0L¬« ¿éìwˆ@Åe?õ‘sqëB—D¸’@tZ˜ Ÿà›<+–ôH $v&à*mÝßiñåŽÔ£¦ytÀg½Ïæñ4Þñ¹AVÂ0KYÝýZ£5gVwE1…Æ—8ð†“˜Eú€hhd—í'‹Æ‡“£½œÇ£ð{ó\ˆÆq)®ÑË8Ë1Kô¡“Ãn+“ZÞìyy¶oÞY̾¨y¯ŽÏOÞ¼=ûýôøP£âïõöÎauR¨`eFÛ´GgoÐ2q@²ÆùÓM‡¦E[äKØÔ-€Äí5Š×¤~6pwäöÝ‹ó Dûù“1/À#q]WuŽS:…EZ«}Z‡ÀP¡Gj÷xS@ÿÇhPÿ)ÊföÐo«}Ùç®…5{æ¦ìa‡:ö1€ûgÛ';»¤YU2HÅuZÿD¦Z‰ÃXª÷WÜÓômŠ§u>å +lÆ­U‡(„`QœÈ»cÆzL)ä®cϴܬ?NB–ÌòXß2¿7¿÷õéɾ~`$6˜Ì›4ÃSþñ@?G{ãÏüd c&¤5ÿtOü~ºßï÷‡±øÍŠÂýÄqüMìóz a³fÉ7…˜hìrÇs|¢(Qà ߺ¹½ª²E +mÄÌFû‚Ÿ{”´¹YÁ‡µ[øµHÙX(`¨bYd·Cį÷ÑЀoShžïî:ú‰ÁÍÛŽLj‰VfÅxÒ GÝ€îa¸Qi5¾dþ`yT¾O +endstream endobj 1401 0 obj <> endobj 1402 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1403 0 obj <>stream +hÞÌXÛnÛ6¾÷S»¢:›%©3Š]dYºu[× õN¨‹A±åX«-’¼Ôö@{Ë}?IÙ’’lmÑs["ùÿùÀ(v3züåKÅnêQä³X&,H"æKVå£åèóéèñSÅ›.GJ3‰?ü¨$iÂb_ +©Ùt3’@2ÀÚt>š)¥Ï¦·£WüÛ‹§, ;|þé§ì²òT"¾½©²Í¦(oس²É«e6Ͻ×Ó¯ÁÊ·¬Báûl¢„ŠB6ýÂ"GluÂþ±ò&J‹€ÀaWÛ}S”ymÀ.¦£H‹8‚N‘#&´Ÿ¦)ABXF;£°Ù„ÎB½M˜„øf* ’3¤ ›AÒjO‚©DăZ Ÿgžˆ˜–Ê›„xŒ½‰V DÖ\{ +ßÒ®c[ÅALÖ¹¬¶vm±Ÿ7Ì‹DÌðÌNn׫ºð&—oK2®ÑV’¹´Žb²É’8YÈA$Ë_‘’ 1³ ìø;x}è÷ý7¨ÿãcÆ~$2¿t‘s€ +¬> +ϳõÚ>\7«¦fWy#|_(þ›§cáó|!Úøw!kÂ2÷”ÔÑ0©q0Š£^B›x–$>/÷›Ÿ¼é¯ -¡‘ÕUÒ!hg6ª˜3„Á òŸäa¾@½C‘èKà‹ô‚TŸ œ®ÎL’€Ì Ô©Ðøm¡ ]ê¼Ø5ŶÌÖ,«nö›¼„ÝcâTèÈ)a(Ã#¥%\e «wù¼XX³Ê™+rN~¸QvM` ý󳞈 +ÕÓœitÔBÇαÑðÙôâêlzÑ£„J;2jœÕMÖ䤋èÛ-Zõ,?t¿?pÿ‘;¡'±‹õ¬\´ÚF-ÁCÀ‡ûû¾ˆ[äÖž}‚òš„¡iñ7è(²Dd{0ºF‹Ø.Ù|»ÞoÊÚȈR«¨.ÞÖ´c0ñÅáI9Ý¢%.vÛ„yw“½ñ´D)ÎM1gûqtVU^‚wÔZ>xJÒ!"2>°ŒBò&÷˜¦òþ ä{QÇQÇì6Ì[û :ûtZi«R¹VÚ R¢Gk³¢d.Ê“6N_ñEÈ)ç9Û—ES{ +öçcv7·ž"Ýò¼<…:Úœìz³H$Ãwè +2Ò­A…±ØË®«Olôݼ‘=Cu£Sµ\§-k¶¬¸)·U~Š"‚¨-ßúCu~ª$cÀ…M=™&¶žš'Ô %•ÂpcZAÜÎsLB)upÔnà°×ö¡n*4ýÂ-—ìâm¶ÙÙ—5OÌÝtsªÝ)±ê¥NئÎnYRˆÁ_ëµ þ˜Ãuø¦q,÷0ÒÅü­7A#çuζåúÀêUïh}Ì”ž{Õ‘czÊ»}Ýä”\õvþû’ÔƒË+;òÁP~ÒÁÐGŒÄb¬Q§ä12Ú†‚‰Ì̧ùÞCÀ8á©ÃhÛF|´CQ[M}£iì4Åê.v€œá ‰l«<¢2ÒÃ*ïÂÙTùÜÉ6ÏÖëëlNž ù´™Fmý NEÙ1’Ès8å.NtpŒëWð •/â`qþ9›ñu¾¼=·¬ÞL±~Øå¿ä¬ÁÏØN"B"h”4ŸRÖ2ûÁaûˆâ{L_dMF«{÷<óØcúÈQ»£ªòúIo±Ýcï¦{ôv—5«‡·§m ª˜×%´6= !宼+2XóÏHÞÛ—MV5ÆÐH–ˆ×3>óÏ¿ºÀÎù7¿\]¼œqPß9ÑCt`õ·Ù!Çj5ãŸF+Ç+ù0HÎxØ}ÿ!jõ/Ôf_éà}|r‰ˆ„OÆÌ„î˜À(ÒWÖælùeEè9‚“ÏWY‹üw8w¸÷\O‡‹rѪ1ãX~/ù¹vJ–©¿¯J&Ÿü9hk®§™†¦pÑI“c—iëµTªÛÛÌ-Ÿ]å?4+%{Hmõ×{nK*L%¡qQÎÿ4нŸÝRkˆÁ»hЫƒØ»sÃå³ïûóg;:Ô¹i8cv»*æ+ô3Û0|ÞxÔ6V¸Ù™)¾Ó;-ƒ-P€Ià ¥zz)z„Æ7;È [¾¯Ø}㥦GT4ðȇÇBÙöÞm{ñò êö‹…;.QþI¼çgçW/s}Ú½‡Ü7Ù;!iœg%†Jg¦ÛЬ†»Ä8‚Ùâ «QWý•åx‰ý¾,‚=µs²î­X{µþ[€? ‰µ +endstream endobj 1404 0 obj <> endobj 1405 0 obj <>/Border[0 0 0]/Rect[334.5 672.24 454.5 685.74]/Subtype/Link/Type/Annot>> endobj 1406 0 obj <> endobj 1407 0 obj <> endobj 1408 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1409 0 obj <>stream +hÞÜXÛnãÈ}×Wô#™õ°¯$'sYL°³kx„Ál8RË梒ڙùŽÝŸØ¿Ì©î&EÒ²á‡X$šdWUW:uZ‚ݬ^~ÿQ°›ne˳‚éÂ2•±Ö­ö«¿nV/ß &Øf¿’eø×(r^,WÏ$ÛV¬ðLãÞf»Zó,ËÛ|Y}J~xûŽ^°×/_÷»jSQð"9Þ´ÕáP77ì}Ó»v_m]ú¯ÍßàJW†+ÅÖ‚ kØæM°¨GÛâlûmº’뤆v}<õuã:oìífet‰Yn,ãR•eɸ.È’ß›•<·ÃslšK={ŽœPJ”ˆ=)}J†‡º¶O‘ C1âB™â‡*Uš›ä“™H×—yº–¢@Ì2‘©ÀgîKl$×9¥çª=†{»Ó¶g©åyò÷Ô?qá~ÛÕéñ&dž²ë·›Q¾¤´9%Œb)b,T!Šå”–R 9 FÙø½ø÷±ïg¾ö¿±ú'~Í@Y^Pú³X€ÌÆ +ð_ñùêî.\\×7·}Ç®]çÐJq‘üšÊœ«Äíøйô¶hÝÃçfÆs›ÛI#’¥ŠÁëØÈÝ·¦¯t*ùÊê&\íS0@ž­ÿ! Yâûâ^|·§ëúèãɹ1!;ëËÐÏÂ÷sÒ°ê3ú—õ·ŽQk§›_@&öU†µ-ËüŠ«÷?†—"k͘ý3]”1ýÛöõ±y ÇRD“üö¡ÚúÐ +.²il ®IÚ#»ªö±¯zwpMÿ;ùE~u7Ò§Qzä2cÜf#̲¬MxsH´ßødnm­‘5¤Ÿ”‰H‹:l„%‡j°YX-CŒ”´—obâÖ +ªÍ„Ci…¶%#?ýP57§êÆF{ÿ¸fÉÈ"ãâa¸÷ž­%ù2û‚øˆ<ý3šxúxb‡T(\À~:ézvêœ/zt8V¼Ð“Š¨³Ó;·ÿ‚J´=ª×Q—9(˜I-ÅI¤AV5»…+yikäåm³»è£àåàbŠdaâfYëô5/Å_ž’ØJ.¹Mz˜‚[YB™Å”c|Ÿ’þ-–,Ó&¸•f²™Ç›Ä2 Bé‰]ÂÙ%iÝ¡ªÔ‡ÊûX^˜e]È@÷Žt±{ôʘ”¸E¹ñjvDÑ–™tŽc}{wÚ¹Þë¿x¢s®!x$ƒI@ ÷É­%h¹Ñ7tm䌾#¦*ÁTøh™ ÿ}E›‰¤:Üß!ÌãÞƒ|„èÀlùr£|~k;×mƒQIýAߺ֥´2y‘Ò¦=Õü6°±B¬²`¦DøS¼„,1P%žPˆzÄ”†”V$Œ0ÊIOHo¿†èG:Š‹¼‘•´öQZãm9q1Aÿ@pã;Þ¢&òzž¾òÈ9äÍrO”#Qÿ@U‚2M<]E4½ÇTØíjB$zi¬Ð€ ôº¹ÈÛ*2ê¬H:©&<ÕGú`ÆÚiÓÂOŒo©Ìˆº¶Uƒå¡¬Zt’-F4~ºÞÌ:(™5Ìv¶”™ØzìKør0~ÆË)#Õ-HÐ÷¸¥æ°4«ííRH€[Åó%÷<f¡&΢‹\˳ýpnÎ> endobj 1411 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1412 0 obj <>stream +hÞìWÍnÛF¾ë)æ¸lÌ ÷—Ë£Û G5lµ=$=0ÒJf!‘.IÅõ#õ-;»KŠ¢ìÆ)R-0)’;3;óý Ö“×oo¬›‰&¤Ñ ¨íd5ù~>y}΀Á|5aüÃ3)Í ¤"¡ ‡ùv’`šH¼6_Lbš$‰€ùýä=¹<;E ¼yýæÕ+¸ª#f¨!պηۢ\ÃEÙÚz•/lôëüL%B*E…€˜Q¦ÌOCD¹Í†Ø¿ÔQÌ8•¤À8p]íÚ¢´v6ŸhNS{ÒTi \dYTËïÎoØßÄ=S.G7±%îáoâ–÷ É|2À›Òô»w…1åJÄ¡B…ïòHHªÈð„E±ÂÓ4Š93X2'@Fª,+(«>϶)äÈH÷ˆð_ ¥Ûv?ÃaŒû´çjîî¡$ö<{NÆ"Å·+u$qüø-1¿»Ûø.T£Áa‘¡à&%Ã[ÃIíñb…›n;cJá;•’ÅoöÓåå¨P|[üŒúa ź B‹(ëç5VÃ'LS¨”jÝi[ÀÖ)­ó-šÃ3Ö)ð=üå|óít~ö²¾ù¾Î7¾ÔUê‘sz¿ÌWîÁæ¨#c×äÔdõ ÃÛÏî`j瘟݌%;½7€„Ñ„:|‹<áÒøþ"í>5Ì×94G é4æ =1Œ—í7†˜~IƒæÜEõÜô¹óŒïºBPÌð±ÒK²î?½+›®_h°ýjXÙ»¾f˜;³³Ô<ñjî~Ô‘t´Çî+ØSÖÛqñÿåßì÷sö«ÕÿÞñ‹ö/ô†fq +endstream endobj 1413 0 obj <> endobj 1414 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1415 0 obj <>stream +hÞìW[oÛ6}÷¯à#¹Ö,o"¥G/K‡K¤ÞH÷ Êt¢Á–InšŸ´¹ï#%[’×5í:`غó»ŸshIng/¾}-Ém3³š8‘“Z¢©ýl=ûz9{ñRI–ë™TDÀN2u[í‹–0Ëý‘…7>>¯›’Í!^º«°º!]õRÊ:,Æ’v±`‡0–ß.Å@‰FÉá<¹ýÐù‰Ÿý=VÿÁŸ…hËS,¿è l×ib¾ˆÏÅf/®ËÛ»¶!×¾ñ€­¹¤ï˜r\S¿â=ºv*Œ°螢Z#”°Ã|náîk!ÂX‹˜ÅƯ.ò¢fJìvWeµ WU~‘¿_Ô>?Ëë1–´¦ãˆämÄK—h:€9E(7$¯Hg&‰fF/q }ˆ‰..—ç——‹‹ÅÏ‹ëóÅÙâš-ø\fÕ}_” «IÓæ­ßúªådyçI\Üyu©/âÔÐ8pJÊ&¸œkÅ¥Jë¹SÒ³éíîÛrWå(ЊP¥·žì¿"»ªð$_# ú¼¸›ThHîŽ:&Ò7tØÊÝÊoÆù®Gù˜^§Ýtב|IY‘|â=áÆu‹ÅÑñի˱žÆoh,ˆ@ÚS#C_`x׬n”5WɸæôõcÕæïG]Íxf#‡ãŒeb×a,q.BÑoh ÍÙxféi}Àž¥Ý´¿¡þ\Àˆ# ÈbµÛ¿Ýôódû)VÒf=G$qo¹sKóÍOþù¸xónÍÀô ÈbW5-) œ»¼þª¯»=N¯:õ¶ÉÑÏ#ò†¥—ùÖO»•:=l}ÃFu!:ˆþv€¬( .1ôvÞŒc‚&©¾£<2 }©ûÉ,dYÀ‚Q'¸Yœ¸—L%HA 5¹+!—y]Ü• ä¾Þ¾A* M‹µAv£Aî%[t’í×k¤Ñ´ ¿`ªØorœ·ç¤¹÷E¹. Z Šmþ¾Ü2üxoI±Üâ dÓÛŠÌ»þh®žºìú¨¡–Šg4gp€H°ØÝCÕ÷!”>°Õd¤íÛo23}í­V:¯§¥ 1u[ˆç@5¸kC‡Å¾%9 h³cÀw }€ý ¤ßÖ5’[LYI4|Ìx¸Uêë~_2 «+² gØ8)Ü81%Cýð¦f&ƒg8ïfEu¼ù¤Ló%ûˆ"'öÄ!½5P£q¿öˆÊ§ $¼R8õ!}XSµÑܦÃóAÕA=Û·®§ZÚn Ž«>™¤IÍ Â²eH$¥5î+†ŒBOdÖ¤¼³–S½ƒ¾ŒPuÄõò0UÙ‘W½Kþ²[i§¾P\Šgþ³¤f*³j *K?ª­C1<§z¼ùm=l•Ž„±œÂ6þéZzìF7aóÑÉçˆÕç°Mprª¡ÑÇS„TÁ˜ëOÔÑ8äÿq…¿„dœ¿OÖR÷T)•É¿XKÝÿRú9RjÅ„¿‹¿ 0K=  +endstream endobj 1416 0 obj <> endobj 1417 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1418 0 obj <>stream +hÞÌWÝnÛ6½÷Sð’Z#V¤DRºô’´ÈÐdAblÒ](2h°¥@’›ø‘ú–û>Rt$Å)‚®Š‘,‘ßÿ9‡âänöþã5'wíLÅDG)IREâˆ4f¶šýº˜½ÿÀ '‹ÕŒ Á\xªY–G,d±™E`…E <[³EQ“Åãì†~:ý@$KÉñûãwïÈe𔥴¾kòͦ¬îÈYÕ™f•&ø{ñ¸Š+É☄œq%ÉâÄYLö¶ù³í?› ä‚%´;äªÞveeZkìt1S‚i9)&a"βŒ°$E[6;›°} 93‘Œ^BIpAl_BÊû‚d¶ —Iê³ÇÀ¸Äá&–.Âó<ˆ&鎈ˆ¡„[„‚§² "àð?rÏ%ä¡Õ¹lj÷l¹-:(¦é}cÜó¦-ƒâ¥u…ŵÙFX.!”Æza,i 6cùàV Dg”쯓Ÿ¯]߸ìÿ±ú/³ ˆK±üQ߀Hõ à‰kÀñ9_¯ÝÍUywßµäÊ´ ÇŒÓ/Ð,¦fÉüü÷#¬…aÈ}µš‚*­&€¶ ‹0ºÎw¦¹È7&XüóŒTβLâì%\úÌÅ©Ú¥~ý`ŠrUš–t÷†¬8ù»@Dp1M¤pa=xʉ‘gl€öcQ +cô\ÐxC×fõx„ Í…(€m2d€ +ühZVs(F?%íLU¹×¹Ûùt].Ýcô«‘f`·ÉófLU£ÊŒûȸç›%ªiª%yEzÒÙŽ€êE{ª“ÏUŸ_,N/.æçó¿®ÏNNçW§óãùÕ¸‚Él°ÙÏPÖi»¼3SuŒ, únoïXeüÇî£Öv@ÈÄ”¼=3rËFt)[R?te]åk¨Ë’X0ýzšöC%lEé­!ÛÖ,I]v"ar£áúÌó_âʯP!L^ÜK0Ü3œvœ¥¼hêK˜˜ +Ç$?¯—f=®@ÂâC€ Õ¶zošï1áâiœT‘²"ù$ èÉÀ¦ çòìb»t·ð-}ËM%enK¥P#¶aš…Õy¸ÞU]þ4Š$c™rZ‡78Þ$l±‡ÎlµnQY›@Ñ—{Š Ì¼±ÈùLU2œÔ«ôdF—õövígSyP®2ϧÒÍõ °\¨h¾ÞâÅqö{¦uÕv¤€îóæAõŒñÒpøÙ!Ç*jÉoäÔWÇr8ŸƒQÑGì$¢§×g ÞÐ9ÐRÌÝÑŽÃYý1"ú’ÿ6h€ô!¼Ô²¹/!% ·ySÜ—€ï¡© Ó"9ÙÞ¹òÀ€ëìAô7hÕ¬V¨:ØþÁqLÛuŽãwDÚïoò§ràâ-.Þb;ø‰{@ÁoËöLèÄ+ Ç&c>jL +¸<€±ûßP5 ‰k9.YæÛù&õƒþǃêð}X=ëGá1צo:(s h ’Ä°2 +‚ž:È­Y×@ûÔ(Ž’™¶-Û¦A.}2Aq ¯;Ô¾K‰â•`«Y€åIÊa?<Â×÷çT}_*é™gÀÓ7{¢F³1}Aׯkµ÷r÷á'Jl¾¦Ù —/xÚ«æï'§ŸF~™ + :Óª?NUzä ˜;Ý»ú¶>€ëëõöÖø‰ƒyÎJw¸Ç<µª»©m…ͨ¿TŒÃéJÊïÑ1«ñé·„ ¦"ÛÿIÊð6»˜ÕKxlÖ¯iØ÷éKý„Âœ0n8d¦$«®p> endobj 1420 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1421 0 obj <>stream +hÞìW]oÛ6}÷¯à#ÕƬHŠ”´7/q‡ ‰¤n7 ݃ê(‰Y2$¹Y~Òþåî%©O'MÛuÀ€ d…’.ïǹçrr;{õÓ[Nnë™–$ô#DšHŸTéìföãzöê5'œ¬of\þà‡G!‹#JŸù‚¬·3¬0?€µõf6g¾ïK²¾Ÿ]ѳåk¢XDŽ_¿|I.*G,¢åm•l·YqKN‹&­n’Mêý¶þ¶’v+Ť$sθVd}b-mÞÛþ¥òæ\°€f`‡\–û&+ÒÚ[®g*ˆ!"Í”&LÈ8Ž "´dbÓ‚…º}A3ŒžCN0%Ò<„˜»ŒÄ&1‡AÔ†žq…>ÂTÖÅóÄ“SôŸ{s·¡7<Ÿ‡«o×5!¦ç¢*íÚõ~ÓO³¾÷Ì“Ô®WuæÍÁ_Z˜]®ùB‡˜0ô%r¾`…З?=ü ‰5JºßÉ¿Oý~ákÿŒÕñk¦R³Óï»øÚ€¶ßeÏEžÛ›Ëìö®©ÉeZ§ÐR2N?y"d’¦×¬máPkhݾ«Õ´«¡â€èPšÚÇ|ôŸ.Vëåjµxq¼¸ôÖ¿÷½ª™¶1›p}Oê&iÒmZ€‹7ž”´ô8­Hs—’]VÀoÒÀºˆÌzž¹Ä®ïÒÇÛ~ç®ßáU QÞ{®$kȾh²œ¾Õ4‡«¢{s-rúØÿ$óÁ=¿sºM\LD½C¾itúæ×Ó“%ù-™ŠU—Pa^;šXRz¸1"¾ÞˆRVäÄÊ$–&m2HY-rŠE[c6°ïñ¶œ€ÙÌ GY¥ÁÍ]•`vå4¹@ûþg“ÛFóÅÙ5A9¸ +G·Àë ø·¡z<,ñ9Ó~ØÚ–¼5^¥d³¯*`þ@êýnW m ÿÉé ô`¯o‰±7<=î͵cý–m”°mK€ƒêÉX}¶|Ïbk.Aa@²&€;à“ê2@š²Ìk²Kª:Å£qÈ–HDh{+“Ý%ä(bÛvp+s$jÉæøSiÅt„»o{fw-§7÷çɦBR´¼ÈŠhš¢H.€Þ€‘T(xÓdØ£I~¼oUšŒAÙÓ0î'#ÇÁ²X'©Œä‰PðÔÉ$õ 6ø9ê€Þ.—ëÓÅÙñ»õâr¹•D‰Š·LèÎ[‘ºhO|9‡‰ÉÔ¤S5´s‰d5)wMVIn +¼Ü|4pààñq×ȾN¯ÉÖ">(‹MJ`>%:â,’ƒè„1A/NWã0X8jÛÖWK ¿tƒ²1… Së¹dBÞºøö¡h’?FîÀÓV‚â ªPÀ'ÈT‹NXÌ )yêijñ9D&`R;(~ VÁÀ´2ù>êÚ“½.÷ó¶Òº…˜à:n»VY”\ø˜k75šM¦®ûf`zàè¦,ê†lÀ¥»¤zÑZ÷¸‡»å8HéJMWÉ6o¢8”#Žÿà›|Øn/íÖn±€ÃŠ„“ÅíÞȘ±[>Îî´¶EÃ'>à!Ž …\A ªÝá­aç ºÙ¨£Äò¸0õŽoë“#ÒJ$Ôfºµ¦œÈ¼¿Ë6wØ ÉGPD>øª0`8 áb¶hYs—Y›p| +z›R:K$K´`&‰³PYö,êì:õ¸‚3½áà5\1†çþ §Þ5pl·A¶ˆOh>è;»gd÷Ä\*O øaãÌ]zû:qÐ÷Mž: 2ž-I²´D÷¦ã‘ÊßêÕzT(p¹%ì âwf\eQ™¢ 0 þϵ“ÖsÙFÍÛ÷Q(è8×ôÈ“tÒ@gBvSs@f‡4œâ§§á¯Ø ÂÝ.Çx,Ûâì˜VKNÎ0M õ7$Rc½L^lÉB[²KBe‘?x1.5b¡L¬¦„SY6c`Ban®K~’"œ°îØEuyƒí Ô#¹RÑ·¤êP3¸Taðf2ЋT? ³Úé4tZ`]98,àÜŽ5e K‰íz¸›Ê28ÛñCñ´zw6>“@Ó>VY?°î‚›ÂA2p@fÏ)(Ðúûèœó´Iòg”ŽÀQ÷÷eNð”Ú8_®g‡zC¤îu§ü*yóMÛŒd Èrñ$-þ¯kz]Ã2èt÷×(›|ÿm³\Ïþ`YV » +endstream endobj 1422 0 obj <> endobj 1423 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1424 0 obj <>stream +hÞìXËnÛFÝë+f9lÂñ<Èr©ÆJ¡Â/Øl»Hº`¤‘ÌB" ’Š«Oê_ö΃)ÙNÒ$@ $JäÜç9÷\™¡õäì§;†ÖÍD +¤h‚¢D"AQ­'«ÉÙäì-C e« ãˆÂ¼±D‘4AJPB9ʶ +Và»l1 ¥T ìqò_ÌÞ¢˜$èÍÙ›W¯ÐM°„$¸Z×ùv[”k4/[]¯ò…~Ï~W¹Š‰(d„ÉeçÎbÔÛfÛ¿ÕAÈ8‰pvÐmµk‹R7ÖØ,›HN”„œ$‰%"\¤iŠH”[6;›°½ 9nBIÌÂÞ„”û‚¤¶ )‚›QÒeoc± .Dì"¼Ì‘ï§,c¸TAÈY!s̯´ÿž©H™êÜÔ•ûn¹[´(Dá_{G»ïë¦BˆW¥)®Í–šrq.•©—‰%ñ±˜™Xþ +ÌQˆBÎ(êß>>÷þ™}«ÿâÇl„$‰)?õ  Ò7€E®ßÄçt³q·Åú¾mЭn4P@ÂðÇ€+"°^’ÿŠ[K`î ¤†¥’B[H›$¨K` +ìx½Ûê²õt•Î€w\%Ô²Ì7;dHÍHšÆ¦ïI-<©#éaz÷ ŪРjï5zÈ!¹ˆCVm‘oÐV·ðš×:ï‹Å=*´¨ÊÒ†ÃRë oël'~`èE«—hYÔp±Ù£¶²>æg×è¡(Q^.íç¢lŠ¥˜„’¾v½ ½é£‰Ä:ŠIg¿ª w:&)œ®VÖä6_Ô¶æh#½}`l£á¥"˜§˜Œ‹úzAe=©£4êÛ7ù^×Wùö¹³§&§ôú¡-ªÒ–Òµ¢Ì[ÔŒjï"•.R‰Ý„†ñM¥¯q8,²õbl×AÌm2&pŒæ+äS­vhY¡²êü쟫*MV¾‚ãš@SxßáøPŒS°‰þAjáˆÌÝP(ö'}äǪ•?±PaƒÇO,N-èSjqœy·/­Åíò…` ¬ðbwùÂÐ5é‹–þÿðßÚž¼Ï­ŸÚX +½KL{>g!8·ŒL¼ ðLÂxåÎbèÛزÉNüœÌ»äÑ¢Q=€÷|è! |>¿½Éæ×cIŠ‰HOöãNh­×÷‘;Eèh­øb²ãÏj»u û;d¬¯KêöÀ@å«r³ï´=%±û‡:n~•±›À©¾GDˆø{ +<,9âëô`(>­î=þžò&²Kó¿ ¦ÍÛÞOˆ,õk²_Ï 0ãÙ +endstream endobj 1425 0 obj <> endobj 1426 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1427 0 obj <>stream +hÞÌXÛnÛ6¾÷Sð’Z+–‘”v×5iça9 V2 Í.T™ŽUØR`ÉÍò{‹½å~’’,)©Û P°i‰üOü¾ï'ÃÐÝìÕ»CwõL ¤iŒ¢X!AÑÎÌV³ŸÒÙ«· 1”®fŒ# +ðÅbM’iA å(ÝÎ(X!4‚gi> ¥T ôaöÿzúI£7¯Þ¼x.w‹IŒ«»]¶Ýåš—Ù­²Ü¤¿€+á]I" +aJ¢ôÄ[ŒzÛì`û·]2N"\€tU훢4µ3všÎd”@FŠH…I’ ÅÖ’ËMq¢U÷’&<½‡šØ’÷rî+’¸:$^Fq—¾ŒI# „ô!žeˆˆÄˆS„†:9‹!fŽyÀà“úç1$¢#mËs¹«ü³å>oP ˆÆ7{cüó]]!Ä‹«ÒV×¥Km½8WÚÌÆ·±Ø²±üØ¥6¼QÔO~~îû+§ý?V¿ãin„"±-?m7€ªvXä7à›ø|½ÙøÁUq·njtej‚0ü)àšl–¤#@ aÍ„P÷«a¢ÒjÀè°Ï‚ú ^ín¿5eS·œUÞw„µZàøŠ—ÅÎäMQ•AúñÀoF’DZÀF|Ìo;ÐÞÙâÞäŪ05jÖÝ%jïMÀ$Q˜´®£ÞõP+à‡˜o2 ŠÂø”xïÆÀ"ÍðcÉ„‚·yÔEŽ|ÄÒ¿&<ö/Ï…›1?¿¼NGyqkÙ#€»Y/'†@lzCÔ‘_\§SKPæ/[’r`ª¯Ÿƒ[k¥WóEú:=]ùGÆ]µŽÆÊÚœ/ŽæìKcçG¢5YíÆVÑ|øaøíééIúóÕµŸß!TØfã@êF€S j¨-LûÄßãY=œeù.àHP]å»n¼/— SÖES|*šG4Þø¤¤ÖX[æºdb¥<š\¿‰}¿©QÖ™’ݦéJ¨8$öîêâúüdqz¾˜§ó›yúû˜”°dXÖùÕI«u“5ƲŽ è0ö«H¢¾ßX«©7TÔ¨º·üÍ6Þi(€jÃæl=º(qV.Qž•èƒAûÚ,QUná#7È›M@Ætóá^ÎÏ':1¬'oÎ]Gƒ(½²ZBˆ„¡P~8;/Ë&ûsLâë=Ýl[| ÞŒ(œï<º†¸‚Ç­Û®€qש=!œÀê¼*ëå0oí~@cíÔйyÒ‘HzJ¼Ç÷¶ÍãòÜJÞšñ¦Ã¹BA¨ź Ƽ;âzl_NÐE'è踢{Õ%>Ï ˜çõœÉ1 a$ø3Šž´Vð]´NÏC$ýÚö°gõæBKØuWS¤šÂ-Nˆ­æÝê¨m½&ÜT¶sÄø¡3ÀA·¸Þçk”Õ>1F”–OÐÉþú@'ÒM›‚õÊÚ|-ìo‚˜B·†–eöâ!p±q<¨ûmðMÇ,N”#–îλ¸^WûͲ ßæoûb [Jã~?¬ ÈÆGØn!¸c¬Wçv }6Ïí#`*’G7Üò%‘p=°º¹MÏC©–NªÏöuó±*Ê#Ò,, ¶‡VDúK†åÏIr"ŸîäÙõ"ýåb"6y"ÞväÑûT‡bùû_œtGÄV@Ÿ×]»>!Q4L£­‚]ó¬êÚ5!ÔŸóé5Jw[êÓúŒ> endobj 1429 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1430 0 obj <>stream +hÞÌWÛrÛ6}×Wàl,„Hì›+‰;‰£±·™¸ YìH¤JRqüIýË.Þ­8î´vàÄ.VÕ Q·'èêÍÙÛƒôû½ÎOÓ"½öN ,7»fÔÉtk‡Ö ;ð}·»Ðµ»« ¡'3 %ÛpØÍI£GùT4)0ÄeìVź†ü È$¢Á%PÒ T[žÎ ƒn9²ÛFƒ±IK] »MàÁ ´uÔ. Ð}6! #Ò€¡6qþM\m’½~D¹ +›é¹ÐÆÊ„É£m)£ŠêÕêÍér1*s~_&[|;Ei$käBö¥c#|Ì ³|rÄ•zàÊÅX™ÚÜù¬O]Wü¼á"¯o©Ò(ê9‹ õúöd9ï”ïÈ,úŽ&=.I¶ +§Š±$eÌVƒÀ¸2ê +èO4‰úÿ±&1a2eÊa×5k¯JA«JÇDIþuMšŒ4CE‚†EwY½A•yÅÔ´sf¬ÒÁl4ÂKýû!+µ“ÎÏ:M ¦P±Fü[Ùž¥†õI‹hÐæÝY± • +¸2à +¼…kˆö[Iñc€\Šaëâñ3šª¸øôŇøÝâ"žL‹¢;§­ødb+ Gž.Ï/^Oú6è1êæÀ +¶¢0žùˆdá4:Wù¯‹³øÍå‡ïQ(wÐR¨dŽ=…cÏÃ~oaS$â´a1øÐ3 Œï=sàYé¼ÊêìKJóÑR8šõCTG´ê©D+‡ùàƒ^ÿ°\¾ý¸Z\¬Îãó«óø㸚ýþ42”ŒžÂ¾ÂÑÆßõ«äãÜŒ5fL”¶ñh£ÄíÑáI'8€Ñ§Ÿ¡:PLV¢É Ê,ìŸ Mú +endstream endobj 1431 0 obj <> endobj 1432 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1433 0 obj <>stream +hÞÌ—Ïnã6Æï~ +©nÍðHŠÇt7[l± ‚ÄÙ’´m«p$C’7›×è[ô-;CJŽd;i€¦@ R$‘óÍð›A–““Ÿ¯Y6£ˆåI3C'µŸ,&?Í&'d¶˜I8üÀEd–¹ŒXÅ—dv?á0 ã)<›Í'SÆ9Wdö0¹¡ŸÏ>Í2òþäý»wä¢NDÆ2Z-ëüþ¾(—äSÙúz‘Ï}òûì¥b(Í”"SÁ„Ñdö!ΘîæOsÿV'S!YJ ˜‡\VÛ¶(}&;›Mtê #ô!L*çai†3…ÜŒdÖôï!i&ÓÑ{¨ –D…—ó®".ÔÁx™f}ú¨LhÔ7JG‰¿æ‰J™¦Dr‘L5ÜÚd*Eš%•‰€ßÝs‰ØÔby.ê*>»ÛÎ[’fé—$¼ññyÝÉôÒªÄê†t9ÖKJc±`¨%ë´à +¡–¿ŠB,‰“’ÝuïÏ箯üì¿™õüYXeX†åçÝpÓ-€Hã¼IÌÓõ:Þ\ËUÛKßx襘 ßi™¢þŽõ ÐYØÊ`a­ûBWÇƚAG‡f³˜Ç èÕcÙæßI2û†ë8Ü1gb;à N¡ S)N£ehÚºö‹èCçuuQ”WÛÍfýxå˦h‹oð¸hoû22ZÐ˛댞WeÓ’9|·ÊëH‡ +X0½t}Õu¬ú Ý`‡Ðò<ÇË}—N4´¤©a Çïém³:Zœó~Pz + SPêåöÞ—° +cIЊ²GRQ…›Ô€’§ãœ`ÎiL6•œÒDß\mü¼X¾!í*oI±€kјÀŠSúy RfÒ˜Õ mýi+’“¶ðÓ˜¥û²-·´ÙÎW$ß)ï +#Ÿê×]üùUŒdpãGAp¶Ü‘†€²/I†p`¥À­HéŒxëjy›üC£se¶Ïz9ÞGÀ¤YUÛõ]Ÿ¦Ö¢&Ç„hIûž {]yÒ@ÍIéȇUYÇTLï_+wæyJùØbkô ÔN#ÈÇ!O‹ÑbŽì¤p» Ž +w`*Í3f²®M‘û^™×‰ä°¯a»ÌëÀl`e0 +Ýøúr»ÞÛ0G†M¡ô±‹§~‚Pc:C…M3‹›f{@Æiš§¢ÌN/Î./¯?ŸÊ{µÓûK€álŽ4mÞzlFf°"ãp–á¶ù/â‰.žr?.IµLJpfáƒBìêââÀ2_“¼å%ùêɶªÊõcçT阎§» n;¿IWåÜ£ûó1$S8Î "ËÑ.>ïÁº—áMÖÄû ΔA'é±²!·_Æv +~TfÛ”œfhtdðbÞùï–¾%®ë-rzíÏñ’ïóZ3)Œ{-¯•Îöï#Dd§=²ÛöÀéƒ&Ðó<±…>° çîÙ@Ÿª¼ó ܜͷë–`ÿYØ°· Ï!iaÓÈ0ƒH¢ô©@¢ëæ%îÈšYƹFäá¯%ëÛd°û\_í­@ötÆê+/”xl„{}€éÍxçô³xÙ#®!XI#T¨}¼ ¨1ÞÓî° ‡ÈèôÒ@iÊ៽ª=J~Œ¯‚üÃÂÔ?3\ó¶´€fLìA:SÛìp þ[€ö–k‰ +endstream endobj 1434 0 obj <> endobj 1435 0 obj <>/Border[0 0 0]/Rect[355.5 161.22 475.98 174.72]/Subtype/Link/Type/Annot>> endobj 1436 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1437 0 obj <>stream +hÞÌXÝnÛF¾×S |5l£1g†¿ì…c;i¶®-Øt‹¶^ŒLYl%ÒKR«‹>Pßr¿3CŠ?N‚õ#"5Cžÿï;g$ÙÃìøÍdõ,Ð,t#æEÓ.«²Ùjö*™¿–L²d5“Š¹øÃEF¡ˆ#jW¸Š%Û™ )Âõ°–,gsẮfÉ~ö3¿8Í|±ÓãÓ¯¿f‹Ê‘‘ˆxùP¥Ûm^<°·E“U«t™9ÿLþUÚªò…Öl.… |–œY‰ÞA¶ìeÿP9s©„ÇsÈa×å®É‹¬6ÂΓY DÀ§@øJÇqÌ„‘,ãqØlÂg¡¼Ñ&BBh³ —‰Mb†M/ê¼'äO&âFûÖÂïRG{Âç˜r¥3÷q:s%#˜¬¸r$>Ûu\dè…EUÚµûݲaN Bþ½cv2»^Õ¹3‡½¼,(¸Æ[—Â¥TR¼È–¨µ…D¶üáЫdHȬPv¸N¾~êú'ûßHý?~Ì$@"¢ð»mÜ M€ôlžEçÉfco®ó‡uS³ë¬Î­…äÿvT(4ÏîEWÿm ‡Ê”pä~Ôx0ƒ ç/\ëÁ ૵‡Ý6+šº…l`¡U‡Wá$ð]9ɯ=¬¥ˆcŸ +ÕSXë.L-cÜ7iC E^ê:‹ +0Κ’!4•‰‡HÖ€½6§–úDˆC¿4~øÆ¿õo=¦àOa©!«É+w™n6ï|cï7VÙÞJû¼C`›ûXÄmŠtC—`"EŠMV•7€d^4l›:‡’ÓWìŽo²ÕþÔ*û-Áú‡Çì—Œ5¸¼°Ì +L+ÓÞ\ê·gÄ¥ö¶7‘ß‚ ÏÒ&¥Õ]{ç°ÿÉWí[ÐÞ¾UeõË®u"÷.,‡l³%„ `ºO•â%zýï¤qÓ¤Uc‚µÈ±ZÜñ£ŸŽîœ—c§ßœcóôÛ_®Ïoî8:&0ÛÀtÀ[¤·7ý>SˆÊ±{(<9-¼Ø<ø3?Cè.ÒâaGÃÏu¶¢£ˆ‰ƒN«Y1=Þ£@ƒñ¸mØnÞ®ÓA¢‡AÜÙ[ût¤x¹c['ÄÍÎÁGÝÐÑÀ¤qœÂPÄîpüR½gÓ>`šÀ8»ªÆÇ?B¨Àf˜Ð2ªv`O fÒžªÓŽTtþºÝ¹$IÉŠ OIÌOöh3 qv®=!'©éÍP·¸¨3ëIe Ïðÿcó½éäÿI;ØÞ0ìx«GmòDŽuñ³ç$ˆ‚>bÔVL}TÕfZPVºj:²Ÿ«“ê˜yÕ`ZmÖ84ò©ý²¯ßžŸÚ>¶SË(Xƒ~ÙO×  Í‘¤Ê¶i^Ðä±4}I«lƒL´ÿ‘Ólëéº*ùOÇ^|Xÿób¹ÙÝ#ï²fï ô€Ñ¬è"á /ö§?»Ž+þP0Z×¹F”“`ÝOÿ`óèÅÚ +endstream endobj 1438 0 obj <> endobj 1439 0 obj <> endobj 1440 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1441 0 obj <>stream +hÞÌWÝnÛ6¾÷Sð’\kFü%í.kœ.C›Ž×`hw¡Ú´£Á–I^šçØ^bo¹sHI–ä&í°D²$žŸïœï;¤ ›ÉÉëA6ÕÄ(1ѱ!* ¥¬'?,&'炲XO„$üÁEÄOb©€’,v“¬ð@óÅr2åA(²x˜¼§ofç$ä1yuòêÅ r]2ó˜›2Ýí²|C.òÚ–ëtiÙ¯‹ŸÀ•ò®B®™ +.LHgÞ¢îl‹ƒíÛ’M…äšf`‡Ì‹}å¶rÆf‹I¨ÈÈðÐ.U’$„ë-¹ÜŒä‘ißCÒ\êÁ{À!Qî%äÜ!’8/uܦ‘‰c„úߦLiÒG"Á¦!ÜFl*E 1K*™€ÿÍs ‰D:Bx®ËÂ?[í—5a†Gôso¬^V›B¼´È]—n€xIi" c‰›X°BË_ —b ñFIwý|êú•Ÿý7VÿÇŸ¹(Ãc„?h +˜¦Bû|Ÿ§Û­¿™g›»º"s[Yà€R\Ðß™Œ¸¢vÅ[4-IרÛöðÌðÞD¦Gä–cžmÂøèÏ°=¡ƒ%±þ×'6¿éî~k+R¬I}gI $tþEÀ£ŽV<Þ •¬lµôV4ûhWäΖ–áJú’IÌ»²–üÑæ£$t} ñjÀš(ž±MÐ1v—‚чÜ\-CAç†.Ë‚\g9¹f”‚¢\k +’föÉçØÅÑÚvqr Û“‘hr-(C@ÿd‹ßÐb÷³¨ñÃgì%\e&ÛŠI—% ÷éÆ)"Ž^°Iâˆ@F}YU¬6:Vz!eS u©˜ÆB”¶Þ.®ÅrÖµýÉyè5;怃/w/¿=wºÎ͸ž)ÉÖ¤Ú/—¶ªÖû-÷ ÛÙ£pà¸üÝ6mpc†… | +[»~¸©SŒVaßb"šB©™è Æ0Z(ýšAé -°ÐÓz8†$ ãÖÝ,’ ;¼7èM”Hƒ!80’cp®¯æ‹>0Éz¼ –uVäœ °I€ñ©âòPÖèàåæ1¯ÓO~IN‚ÌqC o09JI¤æÙ!kähM¶–êñ¬[·¢¬?P/{<|pö8 Ï`ղȫš,aÙ]Z~×"a¼ë†”LZ• ½Jš-L4šV^÷vˆL¹hÐ]ô6H¿T:’Ø$mµ§P}Úìw6¯«aXA¸“q@T‘‹¦_%áñ\‹ÏðÈË=½ºÇR¥[’–Þ!tEZ“êÞ.³uÒ÷pg¡OJ´ ›"ÑWJÓÙj´’%É‹Ú5Ö}á;Íxu2 aúˆ°g#jT¶")YågÖñ¶2ºé#©5—˜ˆ;"êÑê] +Å1+Ò½»‰ˆý~Hh 3¨4*¸{I/¯.g£þW-Mx3ƒÚá0Øüõ1§^]ÍgŸçý¢¤¨(l$¥£“Y¾ÂÖg2@µ¸Î˜ œJ +3•¤À{ÔøYQúГí0”n£LÁA#ý 5p埊†l Ë¡fŒ%Ãȧ2N¾  h½Êzpž®€ÔI¯úP~E ¯Û~V;Ø¥tM œ§g¶Ê6ù|¿µ·Ùª¾{¦RvrÞöYsf¹õ•„rg¨CgxÜsg³›‹×—óŸßÌn/Î?ª“|fÔTuZ[ÔNfŠúë£óDy{súËl>ð¡z>Úd¤ùx96»‡0G÷å„b§~cvO4†LJ¶°Q²0jND½pŠò^ØØFÇð¾»8éoÜ »sÑx8dLvLàöm[:˜H-ì7×°¯YØï}CT¨g9× Õ(ÕFáyGÒ|E–iŽÎ÷xÞ¡Ã(Ƚ{Ýh$º}.¾‡3œŽœˆA¿¦²·ïÝäjyüUÄÅݪzšµ}Êz6ÁãŽPßvèoq ÐG<Àz™î,^_Ë2mÖöœuÓU±ÿ¸mEÓt¢)̱¯´ )àånLj&Ç{ Ø•ÿ-Àh¥ßS +endstream endobj 1442 0 obj <> endobj 1443 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1444 0 obj <>stream +hÞäW]oÛ6}÷¯à#ÕÖ,?$RzÌ·Ë6†ãµ(ÒaPmÙÖ`K$/õOڿܽ¤$K²¤Å D2%ñ~žs.Y^¿»d]Ž´"†‡Ä5QœÉh5úi>zýVAæ«‘„Ã\DhX£8ã’Ìw#»0îÃÚ|13ι"ó‡Ñ½ž¼% É›×o^¾$ÓÂ! i¾.âÝ.ÍÖä*«’b/ï·ù/`J9SSŠŒ: óK·£ßî-Ž{*¼±Ì§)ìCfù¾J³¤´›Mæ#-™Ñ“f&Lª(ŠóCÜËFg¶!f&ýÞCH ¾ ìC¹MHdÓxè‡Môè˜ÐE¸Qóð}ì)Ÿô@$Þ8€[ã¥ÁeI¥'཮ ãÌδÈÝÚr¿¨ˆ§™¡=û$qëE™zcð—æ&×FË1]RjƒùB_ÂÚ,úò—‡Ÿ¢#†¸MI{ü|ìúÌ×þ]ÿïÙ(ÍBL?¯ Àu]á»ü#6/¶[w3K×›ª$³¤LJ1Aÿô¤aŠ&KÖôÝÂFÚÖ€Ü'@ /j£;€¶-ApÀ WÑõ~—dU Wí6æ“ V‘,Té6>$Ňx—xó?ŽÐ,ŠlV_6™R-²Cgéö>Y¤«4)IµIÈP$ °ƒ'9Æçá‚@ó?lÒ…õDfÂÀåÞnÔ QÔÝ¿!UNî·@4vËu’ï’ +'ž^Á…‘~Tc¡`×^hA›ú.«ÍS‘kð¹Ð¤ ÞÜWižÅ[.‘àN\‘² w>Ó¢Í õa ÉjåûÿU +õ÷ñ'Y&eºÎR£jÜãómB¬Ç®7 2¿íTi¹š’«UëÇò•MS| +´Š>eÈबí§û².Uy/Ö—É +xxIÒÌ.×AÁÛ¼›Œ‹Ë¡Ÿžˆà±¨m™,0O69ÖaÃÞ͈h3â;çyQ$å}ž-K,µ+L]Hc]æÏ(¡b²cå„ÏÎt¼ðüF~_AK"Ë×ý¸Í|&„ÛŒmòž=Ö͈i{¥.HǨEGÃÌ; *žØÝiÙ6sƨ+m‹v{€$ñÞÚ¯±¾MVïãEÓ4Ÿ¦ÙÔC†£¹'} bx­ ’^ÇøšÄ +Û(EðNOÒ{DãGÖ0Ü’ kg«é!*:D2È)|'I½¾ø<™õ Ùï4§„KkYÅUb±×iÏÖ‚a ‰[×ÔÑÊôf6ï DÁS†\32IÁLÁô-™^·=´ÜrÊorÓ«¡•1ˆ‚ñ‡ÝÓ ërr{õîÃì×ëɧ«ËùÏ=³áÀlÛtBœØÍÏ(åI­>^] X3|4®»n±v’Y@ËŠ|Mº$3l )NûäLý§’Z³Pœ-k ¿>1—jçó"ÎÐ= Å%Ù9LÂJžÁ+Àð-7.‹VC-ûôØÀ¹}{Ȫø[/µ‹´CñÅAûýÊÒútGSHÛ6ñ4u`¶0΋ê…ù uc CDÀrf/Ñÿ<ƒ/à³M\¼ˆ"ÖTF-™º)ÇÒøXÓÎ"šZÍïÕ¦T£ºõ ¯lBˆx¤ý®ýÖ}ºÌ÷_·IŸÊ±®úÔ|‰fA{ðú3äá@ón#Ò/^Ÿ»Ô¤ü á¥fw;ø@Å©–ÿÓÙ8ûØ’µÐ?~l²s´Dp6ãÂiRçÇ´Ã »vøˆ·ÛÜÖP˜ˆUó#ÉœHó0Æã‘͸öÞœ§Ž‡¨ …¬gžÐ0zHn¾ÜÄ0 Ø%æáLN\9‡£Qð=ÃA£-R¶³Á)>ÀŒiÝH¾|DòÅQòH>pt-ù!H>ªQòí¼f%_8ɇÁmŠGCc«aL«ü yª»âïôgåÿt¤š^ T«Ïêº1!ý¡¦t•¹gÛÁwÚQŽÖú +ÈÕåéÍõçw7z›£µ“¸hØ@Fn´ªÚÛ,sêÚlòæaë–RË3ªBÁö–XŽ|[rC-Žð°ù€Š¥è©Ìr†ÏÇ:ã uRêÃÀèŸ;N@š:õéµs-‘öõg‰¢€fW>B÷Ù²8…ehßÇÔÑ~ÛS$È4ô‰"eûÝïN”*¼lÊAì×±ÄIcÄY=¼«ñx8`kŸ…B©ÖíÒøm;èÅ<19™þ`¤Ÿ{ +endstream endobj 1445 0 obj <> endobj 1446 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1447 0 obj <>stream +hÞìX[oÛ6~÷¯à#µNŒHŠ¤ô˜¥îeH× 1ÖÉ0(¶ìh“¥L’›ø'í_îð¢«ÝµE;`EË‘ÌsùÎwn¢h3;yyEѦžIŽT¡0’ˆ¨JgëÙO‹ÙÉ Š(Z¬g”¡þàB#Eâ)€¡Åv€„po±œù$Ž³|>‰ÐÙÉÙ³gè¢òhD"\nªd»ÍŠ z]4iµN–©÷ÛâgPÅ­*A8G>%T +´xn%†lÚË~Wy>e$ÄÈA—å®ÉŠ´6Âæ‹™cðH!a<ŽcDÂHK2¾IF”lŸƒÓ„…£ç€‰†„›‡às‡Hlpˆ< £Ö}mÚFøÂ…5ñMâñ¼G, ž/à«ò|F#°™aæQøt÷CpD…JÃsQ•öÞj·l'‰Â¿zæIjïWuæù`/. ®q7Ðx1&•LÛ9[t„´-{ú¨6D!+u×É¿»~æÏþ©ÿ㟙pI" àHÚ|§yn¿\f›û¦F—iBpN(þà1E8NW¤MGaÅ …%¤nŸÕ¦ZLbiù¬¿ÄIBÂ>«f2/°N¬ÊÝ]žþàIçõÉ iå„$¢´Î{!÷xŸ{‹?ze”ð@1û£ÀüàGý¸LY ƒRÏ{½8+ Œ§ Ò=06[Mg\ì¶ïGº‘Aêrƒ~­®ë¯Öe‘« £2ž¨»Á5d;~H–ú’¾w¸;՜ąCÕ@*Å·U}ý)Õ·ž•yÐ1€„"¦šT~—7øú‡â½ÙmÓ¢©Ç„‚‚ÆÚ {KØB‘4÷µÕÃ[Zűq5d]»0¥_=¤Ël¥5jîS‡ï Mè³1‘²OÕÈ’»\£-5%ZViÒ¤ÕE“8ËB«Î§”H!ö]†à1ª„3Ñaj,z¢ÓŒ89-'‡÷tä·OXdܦ½7øÌXŽã ºK›G2h§…Á -HˆÖµWeÁpÈ­ÐC™éà°.}-@ŒŸìšr›4Vb¨jïi‰nÈ–IžïQêqŠŸ¼7i±²AÉÓb‚Œ_0“/Tu‘ì™u§ƒÂðÞóµ%÷I¾F8-j¹«* ’“ vîõãáÇlÚ qÞ•p+œ:æk]@%.­7Š•˜ºãÀ’ËÞÂ' «tÙ$Å&Œ¥†nÞâSôPw?€»Y¹«Ñ8{ô zù@w¯Ÿ/^ì¸aiásei7ž‹dk3}× D_çÊj°ì¯]VéŽ`9 ánŽºõL8s˜œ[€Q8²¤ÉòÂœU`“ÅzÝ]×ᶞ‚“;>êdÁÙÊ܂ا¹FXGé •Un˜½¦þ°6Ün†Ú£ä <¹Å¡ðWéÆ£„½ò˜‡€åÅÆ…»ÍçœCº'¤{Ù Ð\Ú#Æ/8³ºõÈ¸Ò óY ÒÍFåXcù·”åã”=Ò+D,¾@@ Õ7[…÷³„1ëE\KG5sP;ÚÌ7TR¡+ˆoš¬,’àt5"Øâ ÓK´G]Ô’Õ¦‚ìMÌÇÔ$æãÌ2°/N¯ÐëÅüòt1Ù«HÀ‡úZÖ+ÕNWïÉd2&¬FNãÊ'q5‰ÞÊwÓ3m5‘ËrÃ(IÞO$‹Q-âpÕï°²i;ƒ Î0/Z„™­ô¡AGƒô\–ùn[ÔÆNØLßz¬õ›±‚Hu¤Ü³È9ØVÁ{ˆÜ6ùÓ–ûÔl(h÷`‚˜T•Áÿ°ÔPS€i0ì ct | +rûÎ|Bçўǔ@o)Üâ››+„ꀼ‘r}bÈ?}öÍQV Ç_%Ä­QäN¯2 T±LѮȠûAo“0Yùz×쪤4UÒtžô% oOt5Œn_8QÑ0 ,@Á›!'{#ã–•PR³MQB±ë©ûƱ¡;DÏœ:ísZ›vCíâGv|3ßô&¬YxÝÞmyº~|“,¡*¸¼ÈŠ ›õè£l¯$1n fK|žxŠ‡fÕû¬¦NÕþ>‡ +Ì~Sã£I’Óö½C—©¤›ÌH¿€h ƒU~ñöüúåÛ_F°Ã4|$_훇Q©™gf¥5 4×ðˆ¢ÓI{2 Ú±ÞÇ‚`D²Ôpü#Ó¸OoÚYX@lY¡Éà©Ø¡‰—ó³ÅÇMìßÁ´c]ÒÍ_êæ/uóïF)ø0-Ød„§sæ ,>‹Wƒ|t~z=¿<6õöô£Ï¨ Ÿ#ŸÃ¸5Òj¸ÚMò4Âf¼ã0Ÿ;â37Iê]&>‰-õ í˪9Oö)ð\Ï5o±}9‹ .cŸ¹jÞèfò»ÙÁ 9ಯ§­4êêúxýcJß<¿x‰úê%þû{ƒïï >ýÞ`¾˜ý#ÀèÞ&ø +endstream endobj 1448 0 obj <> endobj 1449 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1450 0 obj <>stream +hÞäX[oœV~ß_qA 'œ;<º©Û¦rËYµµ’ª"»ÇZ\`kïOê¿ìÌ9À»Nã$­*U–Ìe®ßÌ|#›ÅÓo^1²iZ'D&šˆ˜Ôvq³ør¹xú5#Œ,oŒ“þàÀCÓ„Ó˜“åvƒK¸¶\-"DZ Ë»Åëàâük¢hBž=}öÅä²YB“ ÚÔÙv›—ò¼lm}“­løóò;P%¼*E… £L+²üÊK”ƒlvýcFŒSä ‡\U»6/mã„/šS£Á'M•&”‹4M • ÊrÞ9‡ÝMð™r9¹ !Á„» .I]R7eÒ{†1…&‰PÞÂY($UÁžð˜…‘‚SFœ%`2xÈà·»®À# Fç²®üµõnÕ’PSüº;Ö_¯›<ŒÀÞ *1¸ÎÛÃŹ6/´%élÁ¡-†ø*bˆJ†ãì߇ŽøØ?#õ?ü˜K€Ð4ÁðÇ]bÝ%€IŸ€Ï¢ó¬(üÉU¾y×6äÊ6J@Ê‚?Bn¨ìšöøï l¸ƒ°†Ê}OQÃÚèQAGƒ±÷à ÊW@­mv[[¶MW²Ú ò¾^±¸r ÊÝö—ÛªØ7áò×Cy3š¦ ++ùPÞ^]ç^ÝÚU~“Û†´ï,1oÁO‘R‘ø»·úŠã]őꆠ¾ ”F“¯¡0,@:µ5bŒ +£&«ÁÑàžykUo­ðcçñ7;QT‹>åNB°gWi¬çžö63>ó4#ý}gË•õnä%Š‚^aÆ.ú ö> ÚŠll 2TYkAT…sVj$¤gœz¶ÚÚÄAÀ>LSH3%çÙêÝ È®7ÖC=ârÚŸGMy &È`ÂOÓ’·–Üfµ»”…-ÐÐÖÉH¨‰Çñù䀬ߓª&{’Ýç.Ið/d½ÉÕ¡ÚúügDªhm7!‹á…ÚB(ÊMaC`aã%s4¤”ñÑØûi‚Ñ#ð¯_Ï^W©z„€æÆãÔAÓ S~q=Áe”@ ΀Éú0‡¬àåm›WeV¬îJŠ1kIã»w•9­”q`|ô._^\óò{ò|y~u¶<ŸØÎQ…ìºe@š`Œ:éÔ;CnŸy’Ä,IÓšáÞ3Åz*—?(wZî(ô‘€²“s¾¢:¬ïMã°•ˆOua{Âæ†%¿ªŠÝ¶lœu@Nì;ßg™.0.1ˆ7ãÖ—YÚf¿…€l¬ÈîÖ)Îj,G3‰áàJÝ@aða !’Ó‡eŒH1C¤ƒÏ`Z_”m×9`J +6Tÿ¼äi)Äëgx ã’—d:°Kö‘‘fÞI^»2o‡¶ñÖ¶w06AÙÒ‰;Žt‚‘vSòªSÜÅ£/ܘò#|ÇÓnߣÇEB!;èmOËúî}0ß”UmÑšÆ* L¦U?¢’m7¥ÝòNS­qPÏgtaoî^d«:䈯ê2//C„¡ +±õA‹çH—ÛÃE†1@Τ—0ë‚úÊ®Ú)Ÿ°ÉjŽ:nãRÇY7Œ!O%çŠy çcŽdDÇ‘Ækc MÏ­9ÈŽ½ÙÕ5N‡hsÞÍyXƒà·ÿ'8íÓ` QƨùbúzözsÖ±•žd6k /°°ÞÞV Ì|`Vžc¨ ôäÖÖMGþ:%“½‘©š{=ÕMˆoÁšˆ‡w!J²ÎCwÝî‚dÄ!WŠðéùFç?0ðxýö9vÇ=q0XéÜ“‹]Jur2ÿ]úçkߤâMÅ8‘OpGlNî~†ÆB`yÆœ`yÓìB÷4^‡ú9ÚIFMý W&É{—À!å“]Ì »X3Þ "!»äœÚ¹î¿ã ºÞñŽ/Xu ’ãï'<霯‚¸½¸À'» l(k·€¢Ø’£mzFòËà°{s£G¡ïV¼þKå_ KL7 +endstream endobj 1451 0 obj <> endobj 1452 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1453 0 obj <>stream +hÞÌWÛrÛ6}×WàlL$ÝØIÝqR­Æñ8}`$JfG"=$GŸÔ¿ì.À«$;É8éxF¤Ib/gÏžYNŽß^ ²¬&F‘G$ˆ Qœ”éd1ùu:9~#ˆ ÓÅDHÂá." +Y‘PqÆ%™®'¬0À³élâ3ι"ÓÇɽ8{C4‹Èëãׯ^‘ËÒ‹h±,“õ:Ë—ä<¯Ór‘ÌRï¯éïàJ9Wš)E|Á„Ñdzê,mÑÛ¾)=_HÐ ì«bSgyZYcgÓ‰bÈÈ0m“*Žc‚-ÙÜŒd¡ißCÒL£÷€ B¢ìKȹC$¶8Ä^Q›>F&4Æ7J»ß%ž +˜¦["¹ð| ·¡çKAÌ’JOÀoóÜ@"a"<—eážÍ7³šx†…ôƒgߤîyYežñÒ"Gtmºñ’Ò„Æ5±`…0–<\Š„Ä%Ýuçߧ®ßùÙcõü™-€2,BøySnšˆÀà§øKÉ&ÏêÊp÷ˆ|NëGOäqš[+v%ô`Å»FoE$ÔMÍŠÕfW$ÉçZCp`þ£µ*)#×MT‚èF¬Àlâáh£-ʽéß½Ì0ÓWK´^£&[R$[æEÙ„éC'ËxW•Ú"KãVAVUJ’r¹Y§¹K= ¬‰­R…êiá·wP!#3áïàÎà*]<¾Kf¥'9T½¸ÌòK¨ÓÂC݃ÚKÔ’ÚSPú‹?St‹0‡(--o²y}?Vؾþà]ÀµßÕâ M“‘•ØÈI,Ô`gÅ¢xæ›óÓéo#¨Õ À‹°qA€-uŠ€12miѹ™Pº_.žs#YëC®¢=W$«HñPgEž¬,µfeO‹°1 Tè $9ð˜lªtNŠ|µ… 94Á.0¾Œa"ê_ø\þq5݉;8Ð\Z토ÓÊÜÑz€E¾b²gcØ»¸ÞæuòÕ-hBŠYlÜè¬;°N ë¤ÅêŽfÍ*õ u¼³Œ+Êú"Ù¦å ¯ €Ö­qn¡m„‰[Hµk™;ú# áå~—TRÇRÑOÞ(óyƒP´ämMŸÀ>CcÛ&tÆ›p`Pʶ$ŽµÿhdXa‰©²CWµ‚“AO ’Y p—ÔN؆¸ã°? E—'{ä P·ÛïôÔ­žÐÌ€´Hø%ß[¶^`Ì£{ ­ÀÈF`+0‚~È’gtDÞéH»ŠÈSë}t>œŸì$€ÓšçAÓ ½€œeP€½ kÁÛwrqr{võ¤Né® õŽ—£]ó0<õPwTïãôìúüíû«?/Îöå*Ú‘+ÙN¹ç°ØKÉW°}B`žEO¡aèÆ´ªQÞæéöÑóCº†SWt@>«eÃMWc)sŠëÄWêÓcßh!ÆjwÃz,·ª‹  a0æ¾{ ¨Å‹„QB·¨€‹ï“FhŠ—¢±ÝH¿®Æ¢Ár(‚Gø÷ÿp|úèügÛ;ÃmYl™÷Iù «l’'÷Eÿ \hò>ÁË:S NJƨý(p/ÅòpÎX“QÂ@?›Ï4߬?ŽRÙäQp(eþ$¾ßïëöž~`’V&ìÇñ’~Ü×.Â¡ëˆ iôÏu}û-×Ïq«a?<ÆÃáÿ*vI=t>·Ý%ã:BŒÍÞ-zOÊx8ظãЪ˜%(kNÊÚS`? +üî nÏ«d–Ú…_²„óáxc°2ƒMJæ ¬xŸ@ë|k·ÒήlWr°@Š‰™Cå펭ª=¹0»¸QwÛ3 œ1ÿ`<]% +endstream endobj 1454 0 obj <> endobj 1455 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1456 0 obj <>stream +hÞÌW]oÛ6}÷¯ úD¦1+R%aØC›º[»t ·ûˆ‹B±i[«-’¼ÔÛ/Ú¿Ü!EÙ²·éÐs‚H&ïç¹ç^2‚ÌzO¾»dVõ”O"/&A¬ˆï‘R÷¦½gÃÞ“‚2œö„$~ðqÄ“˜D¾Ç=I†Ëž+Ü °6÷úÜó<Ÿ o{×ô|ð‚„<&gOÎ?&%1i1+Óå2Ëgäe^ëršŽ5{7|W~ã*ä¾Oú‚ ’áóÆb°µ-v¶.Y_HÐ vÈe±®³\WÖØ`ØS’G +9)*Â¥Ÿ$ áAllÙìlÂv9sìm#àÛM¤¼$±0$›AÜfo¡ /~ØDø:e~ÀCº!Ò¬â5b})b„,©dwë" +"ƒÎEY4k“õ¸&Lñˆ¾evG7ëe•±>â¥EnÀµÙz.)Udð2±Ä.S Ëß̨š@"Ò%ÛçÁ×cÏŠý7VÿÇb¶¾â±ßsð”+€š|ŸO‹æå2›ÍëŠ\êJ£|Ÿ ú“÷©žð–ÿŽÂ‘´VèÜ]S«Ã¦† ŠÔ^C[>{&|š¯—¿°áïP EÉU“«g„ÝtV9Œ9 ¬ £þëz˜„_` ZaHìGàóäA‚DîL¸(ÜœéÇ#ˆÝ ñÛAºÖùiUgEž.HZÎÖK÷ÚBœp©\V3Üj6Šó´&ÕJ³é†ÔsMÜsñ£Œ^‚è·/Ÿî…(0=­L› Óæ2êxŽl†/‡ƒË§ÃÁž~ÀEÒ‰QZ6RRÕi­M.|·K±‡üaùýƒòo½ëq丞æ“6[Õ*3¼¹ßð~-¢Ör‹§µÞÇxÃÐÑ2H¥%ƒ=Ýàˆ(¦d\,Ö˼²1bÔ +3o+³cm⻊Â]r²µ;:¬ŠÌRÀTw™~`ÒÃ(Öv˜“õÊ:-Kã;æ¿YÞ0á!Ž!1~€Œ@óÆ÷@Ó¥¼@ù½QFª{C󜀟ÎQÚ¦)w”vIjôq4Ÿ’,'ŽåqËÓk:ÉÀœ|¬É:ÏêŠ àOOÉ®o™0¹i﨎cÎëV³½˜¬ßÃRn­U€E®º¥Þ߸‘wûÆÛªËNÑz]¶¤.H6Ë‹RïX$“µã[î8TéÝ01”»ÐĶ’IÜÌSû†b¤.íQІb¯ +Í aÌ|s¤3)hA.€ùó#s¶3”ë¸.ð„ÖR” >Zét¹Z¸[ÎnNty$Æå^"Â]Ɇ¨Î”ùæÒ„{F³‹…í‚€Þš+™f¸Öô#ëcËz"E¾ØjÞJá¼ÁVeë¼®Ò™6½S6)AæîL”ûWBº„÷u>6µÂq´ÀšØ„aïôÄAÔ(°*[ˆ…à=œ¾º¸Zb˜«;ŒZsQ BV5™ú6ÓÈeŠÕU +«¿6y5“ÌTòpÒ;JÛI¯]xãt±¸AQE‚:}©í´2|ŸÈ OTs•4/¦jòÇl¹}M1p0j˜¢pqöŒŒèBOoÏW†X߬ô{Mjn^`"{ƒÛÃó´NÍêÚ½ùËÚž8-xwZ¥®¾Ùß›kìݺ“«´žßÞì¶qYý:ÅÝ^=<·­ʉz# +üþɈ-SÓå ЈVÙŸº˜¶{#vâß±±ù +6Ú8®½w0ƒN‹8i’cêÂìò˜²ø¤²üœoyŸúg+t*¨J,çO‰í@ûæ™ßÖš!›ßžÍØaß1:½X®ÃÿuùdV-9¿B/|®;nGË_Ô[‰i©!¡1ÏÓì²P>@nÓ•Ã?9ÿ0D–õï +endstream endobj 1457 0 obj <> endobj 1458 0 obj <>/Border[0 0 0]/Rect[247.5 174.24 361.08 187.74]/Subtype/Link/Type/Annot>> endobj 1459 0 obj <>/Border[0 0 0]/Rect[423.6 549.24 533.28 562.74]/Subtype/Link/Type/Annot>> endobj 1460 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1461 0 obj <>stream +hÞÌXÙ’ÛÆ}çWô#`­^±Tž&’¥Rb¹ìZvjœˆRˆ¸È(iòÉOä/}n/XÈ%ª$U©©€ ôí»ž{.$Û,ž¼¸‘lÓ-rÍ +Q2SæL vlëÅ–‹'Ï%“l¹^HÅþp‘eÁ«’Zp¡Ør·Â…ÁÚrµÈ¸B³åÇÅmòí7Ï™å%{úäé×_³ï©,y™6Çz·k÷örß7Çu½jÒ¿,ÿˆ£´?Êr­Y&¹Ì-[>óÍ [Ž²:¦™TÜ$-ä°ëéo÷Mç„}³\XSÁ¢œÛœq¥«ªbÜ”$ÉÙ–+^äñ9ŒæÊÌžÃ'äíÂæÁ#•óCÅðДÑ|ÒLZÒ7Úz_Õ©6Ü&÷L ™f·Eš)YBg•¨TâX/aHa +rÏ÷ǃ_»;­z–æ¼H^§îIã×]›fÐ79ìÉ»Î\AþR*/Èa¤Kt¡‘.ÿLi+)R0/” ׳Ÿ]ÿÍ×þ7Rÿ_sÐ9/Éý"@ä!ÒøüWμÚnýÍu»yÛwìºéÔ€Ö\&RUp4w<@HáB¹ÎQºcU[_j¯rŸÏtSi–bƪÊUž #H Æ9O—¥„Cá l‚½·îɱéÓ<9÷Lüþo¡¢#x”¿zºüñúåw/^\¿|FN-\VvH&¥½û»¾î›]³ï9#{ü–p@8F®°ù¥çdÓ¬ÕÙ‰¬íØá}ßöõ–DTܘéƈ7<.Ýëý[Õ{ö¦a§®¹c‡ýöÿV k÷ÁCëvÛ¤ÒÉ8{žB@ZŠGï»LV<7g  ò»û}_‚¬5¥}ÜtUÊ®¸Ô¤.«ß H¬'Í".ʉzÌó/tš +½Iªhüà¶ß±®iØßCN—ÉÉ© ÕBêQ#šk\bº¥»Ä"6JóœY+/L +¸¤d<CŸB5u`PÂZZ3wýÒkþ÷þÕHÊÊù·ˆ¶¨Á ·Iÿm&Üf‚õ<χÌ4Uþ@_~ò Áý¶ÞoNõ¦F¡æÏ©}”ȱٟ7|i¨tcuÄ(8œÉdŽ$°„6t`‚®Ë·ÈÏX"r®¢‚ܧ8¹ƒìvͺÓjÕtÝú´ågð¤ýù𡻣Ö^(ò´w¡0·l›õÇOK¥ø¥þH¡fB`²>°%ÇfÊ!ód…ZÖþ§É¢äw^àÜo ÉðJÌÑéÅxè+¿Í[ Q'*ßJ†6r œíª>OœO3Çý’øVJ•äøŒ ‚õl‘ÜNo¶ïrœáJæU4ÌzäºM6”³c‚nˆ¥(Í$Ã’_Ò™½³(i¾Ø‚Ø+pWtÚœÈW]T“ì„*Nþ†t˜‚Wˆ¬2ê8b +ܼoVíºE^¡£ +ª•lO s•TØ•@Izg7 ­Et¡û€0ŽÔÜ6þµaÉ{[©³ì ÕªÊ+ÄÙŸSi`]r8±ù@º¾Ì«¤ëYçÔ½G¶¾?tmßBa‹äøæî Ø9T§Í‡”c‚g^Æ+;©¶°^UÉÿ#P†p¤Jøg†ÒULÆì|´##ðôâS C*“ÉŽ½nkvÓ×+¬ Žß}¦v•¥Ž©;m«)Ç ñ„<ˆÁQ¸IÞ¹Ãf”`ñQÊ CEÍQñÕÕϯ_^Ý,¯žþi–_˜cª ªBÚaÊ9kJ=Ì+¸”“Ýö‹ô%åê33hãùùô'#á&£äAV1e $ 4é4ò²Ò%³ +·[ò ¼äC“ò¼£ˆ¼£ Š*•sV—«ÐžUè«ð9¬rgìÜæÏtR{ÑI½÷t>š"å¬õ=À5hoÉU1µ¿Šý2d)Jt^2y70e +øP¹c(} æa+¤/™‡Î% ”T…šIŒ¼²#ûn¤ÙäŒZè3ZqÉ%\†Ä™‘¶ÐëSÄ ¾W,p‚†åK¶,g~w­ÿŠ‰©e42ICf¸±)ü ÜäôÓWlE¥PUnœÊpïžà [0{‘þʵù8pùe PpO,ÚFIýY‘5ë&¬l wÆÈ÷þ!mìŒÏÆ]&|¤ø•IFÒáK`[íÜ2"£K¢‰‚m#“†'ƒŸë¯?¸ÉïAf.Â*/·èó4àxyŠ)GM¤KúºâŠùSúÎ&92@¤×Ö‹Ẇž£Ž¥&Òä33ýáY”O˜ÅÓ1éÁ¬ágF‡eþDNñÄH‰ƒ¥òß»à|7bŽC´9oaƒŽ£hü2Vyñr÷þ@ã:^Oh"“zßÇzûa^Q`Od“ 5}A @–\L`p˜ê§m ŒX½›aJé舘s;ÜÙøñjhT„Ôzñ-?ŽsNi #bZI´ß„vã¹^Ó‡¹z»eÛƒwrŸ*º”qÄs•|9Ha~™Í×èG.£‹àº¼˜ +ÎÁæ‘©ÀÒT`1Ìñ.‘íV̼6â±!ùolÉùˆáAå7G“Û +endstream endobj 1462 0 obj <> endobj 1463 0 obj <>/Border[0 0 0]/Rect[294.42 252.24 388.56 265.74]/Subtype/Link/Type/Annot>> endobj 1464 0 obj <> endobj 1465 0 obj <> endobj 1466 0 obj <> endobj 1467 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1468 0 obj <>stream +hÞÌXÛrÛÈ|×WLí°+Œ1`xTl9åD¶UídK›ˆ%Ä$¨"@KúŽä'ò—é3\HJvÖIUÊe’"síîs‚ݽúã¥`·í‘J˜Žs–æŠ%1ÛTG‹£?ÌŽ^½L°ÙâHHãÞD®y‘3Ä<–l¶:Ša…Ç)¾›Í"ÇqÂfGWÁÙé[–ñœ½~õú—_Øù&9σõí¦\­êæ–½kºj³(çUø·ÙŸà*±®2ž$,\¨ŒÍÞX‹io[ ¶ÿ² #!yÔ°Ã.ÖÛ®nªÖ;)ɵBNŠgŠq™EÁxš“-“IØüˆœ¹L'?¢$tAb~DÊ}A +S†‚áÇ4÷ÙS`"£ñ!Él„ïË0Iy<1‹0ÊðQ‡‘9B– ^Ý÷òЩ¦êœoÖö»›í¼c¡â:øš_*ûý¦­Ãñ놊k²©\R*Mõ¢Xr 5ˆbùWH·R šY£¬ßùó¹÷ï¼ìcõÿø2Ó€DñœÊ»ÄÊ5@¤¶ÿŸ'Ë¥ýpQßÞu-»¨Ú +H.‚¯¡Ô< ªîñï ¬¥°s÷I“ ¯Í'\®tÊõÀê86PŠmËjñð¾|üZ‡)\–mWÎCÃí—)ƒ± ‹©æÄß•¥‰g‰µh(œ[V2g%³VR–Ù’Æ}Áû“¿~~wr9;yýçpö÷Á§âÊ^yëC€]µªšŽ3{­Ë;1Ï`;J¸Ì‘у—˧¦+íM.œ‚Ê’Ÿ> ±,Ï9‰áfiê*¨›Ž-«P®R¦H_~ ,LxŒšWc7îú¯å7l«csÑìg|=_7mÇæøú®Üüì £l$\—…[fÁv\C9TÐuæmµ,Ÿè™UsRšQUƒcÊ2)O +èå(¸QV¿'ÇýYIoO»qd\ +UŒãø-œôh‚¡ áÙaõìº +N0QÈÿí–zÜN£‚&Jäê‚2Pçm5àE‘QΩ` ü¬nÖ\ÞWózQ¢Ý]ÅVåc½ +5ünC¼¬X¹\®C‘áóØ™‚ƒ¬Ùš`ðe’f½*Heí­®1®Ö Öb.«ÈÐH¸ó‹}ƒNˆ¤Ó€OÓ €M“›4y³¸×k`uVRÁg*ûD¥OTææÞ÷]½nÊ%+7¶¤È·ìXkÒ'k¨vì)é‡ñ¼Дš/’ ƒ-1c^O”X†— «pÝâAØ1OýÈ`ÙÜVT+kIYKŠ,)ŒB¶‰O€ÕjÃîêù‰À˜d +pî.Òûp“Úw4§Žæè¨ïHn;’»Ž0»oÈÀu7æ:}©ËŠ•÷÷KÔ„ZY •¯ÌÂéiGí %rOì>|:;›´ÛÎÈcÒ#5µ‚×­Y}Û¬7JP·}¹µá!$AR¿ †ÒÁk·¾ÿ&€bçZiG’Áãa˦“}”1º(Ð3[L”YïdÚAË¢F£Ý¿¶Ó‚~ÝÒÅ+ç}ÀɈý Ê‚AMÁ@*`ÜL›­Ðìˆ~}¦ÛDmõŸ¶[NìoµÛ ©›ðf¼'vÐûa,¬ÛusS-Êí²c[ä1íûX‡eîo>°YC¡YHs–éè›>@–Dö^·½³[WA;N{þ.QT±W¿Þœ¾=ùt6»øtv:IôšÜ¥zÿ~C- 3¯ã±ÿS;ãLi£4æRíŠR6¥ †¡±ëž[Í ›— »¶M" ©a¾ zX€l[`uÝ,Ÿð2¯¬îRAµ¹[ðlWLxÀƒñ¥ÎÞÉ4è„— kÍf[ Ú8ý׻ĸ"Ð'AIá²ò=õ:¬L²;9÷Š) +<¨»iøxïJ¸Öûkà‹U“FÓuù˜µUÅ~ú@·æ\äÇšôà´¸&ùîqý“_´e‘’(Ê,Å!€á¨1Wƌ߸%Xqä”™ÂBCŽVÓöK7“¨Y(iKx0¦®"¾ãia`L‡áW¨;ƒ0nË[ Ž]ö ­÷…«à¢2ÌH6q¬¬šýs8jGè5ºÙ¯‡áaÂ/|ø®`¿Bá¬f4YÉ­¨ 9Œç½Š ½äÐh:s\vå¦TŠªßNE*Ý¡wÏ©m߉9XIZ žõxÚܼè +wˆÙ !ž…¹öÕÙx±ƒ€·)Îç“ñ—÷÷¸#| Ž¥»Hgr©ð¿Ž8þJM¢M„WÆjN„>¤‹PˆüTFÔðÍPÃKÈ]H»lXè ‰FqU4Ë`ìÚ…Ðe‡äÍϪº™/·7ÐÇëª{¡…šˆ€Ã; Ô7‰Æ¹vkxd­î€ßsW¸VÁÌHÁ+VٿïåêX¢Ý…šg]øE8KGñz[¸ø¦jç4)ËúßU#ÎÎn’ä”ì^ŽÒZ&TÌsfNMÏk)„Ä¥Ãɪçrô¡—>=H_ËNM&½Oo‰œóÕó^SZ÷^G’þOê=Œõ±„Û/ØʸÊgà™ItOš(q°$%±N‡Ã”ˆú1ñÓëæ¦6c µ½²“";´¤öG;Çë¡e©m™QsLrpH³qý¢iivÌÜ: í¤Y÷x„ {àùÈùÅÇóÓ‹Ù¯ža2=õh(:ËhDME¬‰¶ª$Aå® êýöó»“SD~h¡ÕùîÆj¬ÙË ÈtùÓzWئ+Ί6jZp êÍ1"yiűzáð8Ù›»ãq¬-"8žX$f‘±ú&þE’C€qiî”{5<}tcþ|³¾7O éÑD÷48qw’“4ãù ;‹È±gʉ«Öž±ýßqn:8¶59÷û“숵Çl½Au¬+© ž|—':«à»µ=+ù\—Þª¿–ÌÚ',Ï«fŒ#ç Åð¿«oëo¼W׃Ïe†b`0†JZí² ÛÓnz^ìf1܆4ÊI·%8Óã&ìb8FÆw©O(5~ÚºëË낵Ûù¼jÛÅvÉ]aþ-ÀP)‚ +endstream endobj 1469 0 obj <> endobj 1470 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1471 0 obj <>stream +hÞÌXÛnÛF}×W,ü´l£ ÷Â%ùèÄÎ¥pÝ@VZN‰²UÈdJRMüIýËžÙ%)R²\m €E‘ÔìÌÙsÎÌF²›Éó×W’ÝÔ«Y&Ì$–éUùd5y1Ÿ<%™dóÕD*â>d‹4a±E¨Øün"Š îÍ“©ÃP³ùçÉ5¿8Å"‘°—Ï_~ÿ={W2 /oªìîn]Ü°·E“W«l‘¿ÍÀRÚ/ ­ÙT +i#6?óM[îbÿRS©„ákÄa³rÛ¬‹¼vÁÎç“Ȥ¨ÈŠÈ2¡tš¦L˜„"¹Ú¬±íž£h¡Ìè90!H´{ˆš{DR‡CÊðÐ$]ù”™Œ(G\èȧøch#"~ÏT(ƒi„Ë8˜*™ gÅU Ý_w?D!±‰ žwUéï-·‹†VÄüçÀ=Éýýª^SäËË‚Ðu冄—R6&À(—¤Í…vˆrù+ ŸR"1óAYÿ¹÷õØç_û¢~ï¹ ÐV$Øn@hÛ ÆoÀ²æéfã/fë›Û¦f³¼Î¡­…ä*šçKÑ  ¥p¬…-¤{¨jMRvÂvWxÝÆFÄC^‡Ž×¡/c“¯>_5U„j.±:iº OÅÏòU¶õ—›@áA3ë¿‚¡ß“úÎUhe úÝžä•õkûuu Á£öæ6gm°ÈƒÖÒÈï€Ë–_þtyvþêôýÅ|öþâ<˜ÿ¾[8zð®Û)§Îê&kò»¼hó¿h¡"§‡P1ÑΗâ~u_4Ùÿ›6£T¤ÖÛ] Ä(Á–J¤]…×|]4l“–{h›Ë²p8nÞ·óÜsL„Š„’óœá§‹²¨¶ÀK·Yõ]‡‡õ«Çp•v”Œ<%¯y…±ØÈKúÈîò1ˆ‘PÒ¦dø‡`„ÃhË"´M`Ú“þšŸÂé5véfK8Öã¬`UJÈÖ¨Lê0@Nȇrî‘ÞÕkäpÙ7ãQÿ”/Ö«uî Q +W¬¡@2¤uÂþ§$;>Ñûe±ÌW¤à pæ;ŠåÛw69kJ†ÐVáŽhk9.a“v‡ôðÒ9/–ãÝ5* ±¼º+ÀõWŽ`­ †œ3ØõÁö=A f€Q/:Ùöð˜ÃÉò2ÀŸÊ-\·à/÷˜G ÎD=óvy<¸Ï‘ÉP‹@y$<4"/¼±îž$9m!9s\rû[ò©íaZÚÿ ‘«/#0è ˜Ì©ž7pM¢i,š•êOÙbíÞÀö÷T’‚{¤7Ï>ÙQÃØV?nüJüøU³lÏÑìßœÎή޾|{ùzDTÔ“Ð3O°ùÙCÉ€·ÑSÖèÛôŒ|=ñÁ‚=±I_Yò‚äŸ`’sèuÀM`Ô΢¼¡=,!tfxÏH7›m3ÀkË¿,rȇÄDí¸FÈHëAÊR謁8ýõ|6ªO9» :eŸ{•ÿ±]W®Pl[•³ÐÙ¦v¸èì +Xž8_ŒÁøb +²Õl )äÙ’Ìö¤.WÍIIÝEÇÆw¶!»Éê0Îië@Hƒ¾³÷¬5fëŒù«0ÞcØ¡E`ì*Žö®Ò6<0®òdÿSÄiªÀùüMFí&í߃T3ª±E!&´C¡¹íÒv˜PJÚù›H¤o1·±E ¡ÎâÓJ €=Àt@¥‰Öåì $)ù”Œ©ð£×5²‰yƒ^†ólãÃ&"ŠòC(¶Uuåûk˜ØÍÕeF#ÕSÅÕ bu .¶®Yù‰F²Y±d‹¬`óŽ@8¨È¤ˆ†NŸ|[C(e±¹ÇŸE’å ­g¤t¿•}Í 8¦’2ûóàÞ8ÃOmééC NzBï5$ïßè,ÃNç^Òfá6öëõ†?$Nœ¶ëv¡y¨9hb MãƵ‡‹,ȌߦC&ÍéÕ#AâÐœ&}_èN½Ã¦p¬%¤QtÐLï»tëð£í  ?°‹øßP`ä›Zœæ‡ >0m=^Q<:š*ª]p:Ï;GèÿÛƒ·Ö½ʆtáÜ[îºEËd +WÂwÐqŠc²IQþ× Œ#ÅèM8~þ-ÀÜšKN +endstream endobj 1472 0 obj <> endobj 1473 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1474 0 obj <>stream +hÞäXÍnÛF¾ë)ö¸lÊ wIî’ÇÔvŠ‰ØJ{pz ©•ÄB"]’ŠãGê[vf–¤HINR8 +´üŸof¾™¥d«Ùó_¯%[532$,J4 VÛÙröË|öü¥d’Í—3©X?XdbDš0"Pl¾ E\›ç3_A²ùý솿¾xÉb‘°³çgÏž±wµ'‘ðjUgÛmQ®Ø«²µõ2Ë­÷çü7P:U±CæK!uÌæçNb4È–{ÙÔž/•ˆxrØUµk‹Ò6$ìb>ÓJ >ik&T˜¦)Q‚²È;r˜n‚ÏBE“› >ÒMpy$%R7£¤÷ “1šaì,|“ya$bþÀT =?†CãùJ&`²âÊ“ôO×á¶4‘AtÞÕ•»¶Øå-ó´0üwîXw½n +Ï{yU"¸äm€p)¥ â…¶$- ´å_EC sBÙ°œ>¶~åcßGêÿø1 +@¨E‚ð]Ý@F.ßDç‹ÍÆ\«uÛ°+ÛX(0’ô”!· Ñç—ÂFQ +k¨ÜÏ5<¨4ÕšA/ô€_?”möÉ›ÿoÇîíT¤ÚU „X‹0B ð²¢’½áEÙ²õ4_Þ_Vå¹]f»M{µÛØ×Ù^®?p¡ÀÌã ë^Í«²iY­³ú'Ö±„vÚ $¼J{Äc‡ø ßdPüqÑü2ÛöÜ÷Ü’(Pz+À7øÏè“/A}ª£±þÁ¾¨v·ËœóúH(©ÕߣÚbÑⲞª…ŠÓcÍFD®?Uñ–—׸Üe9r/WS €ì€}N8Fé7r¾¶¸\|ji-‰®€¬~žÚâw2žª“âl’¦ÍJ\sû”å(=»£Ë‹–Ö2?H1#ËO ,E˜Jýd#ÖÅŠ–<»›*‡†£5VþÁsBO•|ìªÕ놿€.BK]í¶¶l›iÍAŸQ}[ÆŽïlß@!×Tj¤¨ëâR¤iŒÎFjèâ¦ëâ‘ê&„ë;›ËÂ6¬][µ« ùóO¦ÈeüÕl阭rgøp]']ÁÖ ”X@?…‡v »‡ò[³¬\8ÂQÒtß'ÆÑ`½À8Bb Š5|³ƒABâ©`óuÑ m0ðg›AÛ X³õ ™¾Ã3 ª[Ë2VÓ²rÚýNý~œSŽr#ªÐß܉%SÔýÊ ô4mp£®õ_ľw;pnó·wmQ•Ù†eµ‹5@›µ¬"‚ŒÁ‹)Ý”ƒñ¨m^mAÄÂ.XT*1 âãü³e=ÀÉ# cÌc“>×»Ìrçtz‘G'{ý0Iï`x”]²z˜>= º1Fàâ®A³ZŒï´Œ‘î+l¸|{y~ñòÅû×ó«÷¯/&†$PÕ#„ze¬­XàÔle«­m)O!KÇÄŠ!­ƒ )¯'AŽ÷PN.ÄÓØèSÕUÛ¿w@ÎCˆB +‘¤¹šA€(>’„©‰Gœ,Ö]¦HHh%¦(‚}E²ê±'µÅÞ}¡*ñHîç~5ø”|9k)c¡‘ÇGå> +LÇ¢Àv‘[v‹îaaû@ ì~]äkÀÃq‡¡ ëǺ~Rƒ°¬¶Ì"qEüÈмu•f},2b‘ˆ‹9¨tŒ€g(EÍqYE`⢸ˆJ؈׊ü9ªYyãR{Xl6Ã=€Q²ª«-Œp8ÊLÙ+‘)a ù@Bž®³Í’UK‚1Lp$ù\Ñ÷קM¨(mÈVGÑd@*‚ y˜ÁËd ¿cÂ÷b@z¦Ìʲ†-ìöuû’€þÁöPöqé%YQV 2/å8v2×-$¢˜r˜Je «`®PHû sŒËà`’µBO‚ÒbUVD-}ªŠi{÷¡ˆÐ“cZwz ·º4p-¢ô˜ø{0SZÂt´0Åฺmªm©¬åãpÀ2úJ4ºz›êe­Q#Çø²Ø#ä+f‹îbt£¡~fÒu°ÕݧwK'è¨M&B†ñã€Â°”áÔ6 úñü¨ ™³ý|ûÉ•Å!ó‡ÇKœ&n‚¦#¢%lþu‚о7ˆÆÓízA¥á°3à8n€ßåÙ®FðÄ€.˜D´“ívè¨û²CßÀðóPA߇¨³Ã§NF$•ìq}óêòìýüz‚n$äxžÙw`)»'µÖEµZÆh÷Óñ§`ü‡Ê}µiÂüHRGyrÚu¢»iìŒcÂN4:r}“yC`›‘CÏ…v¼khþûù# ëj‰m]SÀ&£˜MÝÂŽþøÆÍ°kó#ñ­‹ùì_Ìž +endstream endobj 1475 0 obj <> endobj 1476 0 obj <> endobj 1477 0 obj <> endobj 1478 0 obj <> endobj 1479 0 obj <> endobj 1480 0 obj <> endobj 1481 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1482 0 obj <>stream +hÞÌX[oÛ6öè_ÁGjYñ"JÜ[–¤C‡4+7{hö :²£A– In柴¹sHQmçtÀÄRDŠç|ß¹›“åäí¯×œ,Û‰–$3¢2MdLšb²˜ü2›¼}Ç '³Å„ Ã\x–2“‘TÆ,d¶šÄp +‹<›Í'SDZ$³‡ÉgzqþŽ$,#§oOß¼!›ˆg,£ëe“¯Ve½$ïë®hù¼ˆþœý¢¤•0)É”3®2;s'ªál¾;û&šrÁ-árµÞte]´ö°óÙ$Qi–h„4Ʀ2<ÉbÓ‚¥Ú¯h&T°œ %Ò.æcy0Uæá£fv}á¶ÿæÔÿñ6k©Y†ôǽbÝ€+g€ï"ó¤ªÜÍU¹¼ïZrU´Ä€”ŒÓo‘H™¤Åóлp*¬ kÝ'¢6êT"Ú[Š(bD@¯·u—ÿM¢Ù_ðzâ^7ÌhxƒG$šI…GÀÛÂígZ‹‡Ëu¤i}V,òMÕ]mªâCYŸnºö–ÂóžBƒèÇ1Ö¼9_×mGæ°å>o~$}šÐNx +/Œgk]-æå¢,ZÒÝd¾é0 +¹>£Ûˆ›†à£‰T +ê2í +É!GÈÏqx2PÔ£?ÔêF¹:è&âtEêˆswû*Àzá¸á ˜ÑŽûjPZ’WÕ:âš>D)„ +YD +¼ßÜžµ%ßÊœlZ,O!60Ѓãô<;XÇÉO ¬ÎB£K,¢ÖîöˉN™öÁƒun<ãȹîrðm!˜¡Ý (ÏÀ™”4x¶÷§¡ˆ +Ýsk’)”Pä&š*¸#¡ûJ¬“;ñÍû“=#f;¾c_…u)JÚ.ï +ô]RÖÖŠAОב„Ëß/ÏÎß|º˜]}º8„eL„ï/jO#³CQB¼‹ +Ü1ÀÒ’õ×®\×y岉VÉ~çbÉ y}GæyM¾à\àx«uSðd]Ï ä%Uåæôx5Ò$£·Ä`ñ쀫³HOÇk;™¬ó|~*&X’ŒÍõ ¾ú¾mD Ä16o›> Í[·ƒ–Ž²s吝õS%˜¦A* ø{(»{çM¿BŠJ(èãôh,a… U +X”‹½  +)C¶vñ´'樸óúî@˜“dq/‹÷i|_ [ u^½Àbo sÁGUõÌiqTißBšK uxÀÔæÏ´>i_Ïö0û²wœ/è£ójsW8âÖº?yÿëBl—–F.ò³{+}¤ÛÊ Ë ë‡PÒ³t´ßJ˜î‰® ¿Æ&›ÓÅÞÞ”ø™_ä‘0Xü2·ØøþÊÄ u€:É6cœ0m 軬ÑÈ”`Î +Å»ê>²dò5_‚ ‘0”PÜ»ö£@øšì û§{%Üò–yãʼÁ2ohó1J8:Zµ]®kÜž¤0?qcyx¸Iq}Onè[ûÈ3@.žEŽþýbØnó È8…m#Ã¥°#YsUÌaZ´ãÑg O€E³yaÇc0D*©|©ÈpÎF[½îø!˜¯pŒ¤-zr †ÿÔýî  +61vʇ¬`Lv l¦p},+(8òb‰¶µ¿6L¯qíÝþ]Ù0ïûªÚslr4,Œ' :3Œ?0­=n^-q}OÚkWC +ká[[þKh±š¢‚Ôv7äßÛÈóз…S¨àØC@³¹k!¦°§‡0nà—Ì`CõÓôöûaßð+ +š_ÚYlD‡#S˜ï BÙ¢l@k5ÄÏÏOe\BÓ»òBÜh¦ühöôdf³P“?1—ñ$ìFS8Õp´RØ6|g\€ó‡oþ`¦m„Z +endstream endobj 1483 0 obj <> endobj 1484 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1485 0 obj <>stream +hÞÌXMsÛ6½ëWà4BHÝXé¸ãº[vN¬ÉìHd†¤êú'õ_và·¤Ô™´3Ϙ4I`wßî{»° ÛÙÛïÙV3£HÄ$Œ Q)íl3ûa9{û^A–›™$€¸ˆ8âIL"ð@’å~À.<áÙr5›ó Y>Ïéõâ=Ñ<&ïÞ¾{ó†|(™ˆyL‹m™î÷Y¾%WymËMº²ì·åO`JySš+Eæ‚ £ÉòÒïv{‹~ï_K6’‡4ƒ}Èmq¨³ÜVn³Årf$ Äd¸6„K•$ áaŒ{¹è\Àî%ÄÌe8z àʽ„;@CBàe·Ñ£cB£‹p£´÷ð甩kúBd Ø\ÃmÄæRÄತ’ ÷Û=WGFˆÎ‡²ðÏÖ‡UM˜á}`îõÏË*csð—9‚ë¢ .)M„x¡/qã &}ù›áRt$"~SÒ]'ž»¾ò³ÿg×oø3—exŒðMÓ$@„>ÿ‰Í‹ÝÎßÜfÛ§º"·¶²@¥¸ 2qEíš·õß”p$] `nOj3%5|h"3!´#]€Ьº´›ô°«Ùòž©‚'‰ÆÚ …£jвÊ W]­m^g›ÌV¤~²äÏ,%)Üâ °&论¥0ø|m7L‰)Úu‹·õ3Y›{äEÔÖ=ð¢ +ã7BÃÕ'»B7Öd¤e¡/Lp± ÿ(+&4\9i„¨Õ<…Bçrw’6€?b„¢ŸGº³›ç›"÷(±Ö ŒÞvv‘¯2x”â#IÉXíF9Ð*FC°ÿ¼«"¸ £¦Œ`+e³‡ö{„\ȘR÷‰{¸º˜¤,JšOÛl…I£¤ªÓÚî!gW´`€ Øî +Ìu臉ê C¾nÒ½9T}ªÚ~A»œ,ÒÕñ+šÈÄ—GæÀÓmx±> +oÏÀsM ~U5¾…ø¨&i¾&6o"«¤Ñ“v$D«õMµ>gõ…-è$;ŠGrà—ìCMµržÔY:Ž Ä;9Iéyæ|á-æÕ6]}N,†\ -ʸ°l›,|f®4‡˜+.ûÖݳ„Þ½äuú×ØÓ„'Æ÷T¼Á¶ +S²á˜tÔÒ‹zìøÇVƒ¡T¤k„væKXµ*rÈî +–=¥åw“Ú…ÄJ™´å¨=Ù¡n¡½R¨]¼ìí”h j@ú‘ùhÎKFPÓj†‹çDî+ ±q†Ò â¨Õ…®ú|RÜãT‘ô¨ö=¤»ÏÃýÝbÊÅÍ ^Úö%¯¯ž9YNÒq¡õ©aqºÆÍ/7—‹÷÷×ËÛûëÅÈ^<)°hbˆ“%ÊÜÐPÔÕô—„µ¡DG¡TnìŸ&˜RÜS¦¯}Z|ª³"OwŽk«4‡fDn-(ÐGôÄ<¹AO&û¢´ °ªÈWöˆ°Çqš^_×õÐb2…qTs íE%?ŠCø~úšþ¶ø9¤”4aÞ~Å#½€“Š‚aj{@«‰_0l˶Rºžw²Ýõ㑳£É{×tV¤î§Ò2©¹a$ƒfÅ¡Ú½¸1ÈM:‚«¾×6ç ÜS5í;c +XΰAÍáÀ´)AŠ½»Àä…—'ÿÁ#Ô¾„GÑq7ÚxÚZ0 £!â{R”MTpVŒ!ª9Œ?}TÐGÖæRò8Pñµl{.Èñ +!ulµ¤iÔ@}ßɶÅ"‚Y‡³L„x¸âÿ: +hS&öÅÓçZ¬gÞ}Fá¦/Ç2*Zg§e>>#G`™É ô ¯ؘ¯Vúó½åŒäÍtŸN;Î  ÑøƸ“ß’é¨3œ{§õ8vëë5J/NõË/i•æ´ÆwÜÀ™&ÀäˆB÷××gkaò/zµÍ!ÜHK¯…SÑhj¥‰ã¬¡ö%¢9¡9%6'@Àuwì·ÿ0Pî\B +endstream endobj 1486 0 obj <> endobj 1487 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1488 0 obj <>stream +hÞÌXÙnÛF}×WLó4l¬1‡;ôÁ‘•4­ã²’6ˆŠ€‘(›D$Ç(úAýËž; EIvÚ¢)PÛ©áÌ]Î]Î¥%»?¿”ìªD>‹Ý„IÄ|—Õù`9x:?“L²ér =æâ™Ä"MXì»ÂõØt=p!E¸Ö¦óÁP¸®ë³éíà??c¡HØèxôø1»¨™ˆ„WWu¶^å{Q¶y½Ìæ¹óËô¨òµªPø>J!£MOµÄ “-·²ª¡ôDÀ Èa“jÓeÞ(aãé Rx‰0bÂóÓ4e"HH’ò-òDÙçpZxÁÎs`Bøê!|îI)Ãà ±î“e2$qã‡ÚÄ—™ã"äwÌs¥3 q;CO&°Ùãž#Õ§ZàHÄÏE]éµÅfÞ2'1ã¨'¹^¯›ÂÂ^^•„®r×%¼Ï€IáØS)¡t¿PÕØÅQ¯¢U±Åä…KðË»²Í>3gú+Ž‡úx*ÒH—݈0~@"pÚSEûŽ¯òåíyåD¼<Í—ÙfÕN6«üu“¿)²ÉË«|fQ.L¡Tv©¶Nqx^•MËæØvÕß2Ó)"­?FÎ{©=Ô ¿ãŸ¨@8 ’ôóŒ®kÛeB{–*NŸuéŸ9Ú¹{±!Ùk ŠÑr‚~æ£ù\mÖyÙ6»–¡ =ÛÀ¨7ªÞÃ2òý<ƒ1J•éxR¤Ø¿¯ëxžéxaj2èò&ŸË"oXÆnêÜAÿMõ!:AQmšÕ[äK4ÀÛuFzhI[Gu<ß¼8™¼>ïØ™š|7ÒZ¯oàÏÇçãÉÉt_DlE¨¦è[7bC +Œš¶LÝP;óÖVlÓäì¶h¯Y{]4¬®ÌÃM2æE©¿]©³‰>«Ž:) öÖ‘‹»j£}z`… Ü'¯#‘DÛ2ÏʲjY£½®$IùÀ–-ëjå=@=ÆÏ>j¡Uï)‚àÊa)èc ÎãõÚIOì¤ëŽDi‚9<—»[G"ÕxU/„õIvI’&:ßÕR>t%¦–ÝÔÊ £œWåB—3£œnØøs¶¾YíqùN‰4 F¥†´|i(}z À_YH—|µªY|¿¥q^3Ÿ ++WÊXsmw8Cd/§â˜gÊ ~¿‹¾ñ`µúÍ  ˜¤”£éÁ&!’òî&? ¼ë÷’['”nr¶Ã>|œâün‘#mzÑRæ wiÏЇ&_ã.îØ%ÝÐbƒ²@ÍK¸ïßP§ü-Êùj³0Ö"~=êœNMùåÒñ¨„€>kHÀš@yÖ˜*ðG°¢•ó[*Îygmnë +¢p«ÁëLµ49…bQ*K•'8Êã*[¨ÆÀ–¨1€0’†a+$vP¸–Líð÷Œš_ðQ³¬d¹^@jˆÈ S-•´Ü9aí¼žªV¸ò¦±&Ï•á 'ÜÏ ñeÖ àœïí°žkÑn@úFOÙLåÊ([­°Ž T™ò^'ÜÑC4ÈôN°íä¯iˆøiÖfÔDkº™9ì7%hú­9 +;ÌÑ:ožØ‘MÒ…‚ãcR0ºÎçY±ÜVAÕiÇæU]‘Þȹc Î`猫Cß|Ƕ5å^YÚg\»©aèrÆM•ÚFcײÃâÂ2ÁÅ0øãUÙiå…®4™ÈnëE}…Íb6+Íœ'v›‰OOw·›ºd²Û¢þN‘¿*ÀH‡´—mV·Æ>¬š n!ÈNí=ˆ¾â?¾ŸŒ/gB{&Þ£h‹œÎ²»¼&E??:bÈu÷ˆ|ÁëÅ‹D}-e£eî¿U6.> +ù½þµð{#E©O¡uŸü¾Gz†ñÝÉȉ:ÌzÛ9ßáuÌÁ0ñê&×ÃA€ôþÇIbÚH‹±]ÜR&^ï”$?†Ë: 2•^eéEmˆÞm÷˜'®· Я.&¯.Æ“éÛ/ŒvÞì¸Ãš•BÓ*ÂÁX‰(ºwLÜU8ìhoT eŸ#Õ+Ä_M›ÂðÈòôˆ~vòv<Ùâÿ#kÔÈÁ_žŒ&¯v¤x" ï7…¨9MúŒÔA‹9jW—ÞâîþÓ‚Ÿ¿:??;y}6=@<œöý³a£áÐR£¬ÙQýÃ<,{ÆFò6 VÝ–lEçS54ovÿDHôÁ¬\`¸*Ù‡œ¨fÁÖU­Mb0K܇çmi¦˜ö:£ébž3=`è7n64Å%v +ÀËëŸ @BbŒ +endstream endobj 1489 0 obj <> endobj 1490 0 obj <> endobj 1491 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1492 0 obj <>stream +hÞìXÛŽÜD}Ÿ¯¨Ç6Á½}q·íÇì"„Õf„6jåò[DK)‘¦0ÞOþ|êþ‘Ÿý;»þ‡?ó Жg¿è lß™„ü#1Ÿo·áá¦ÜVßF áܸxUÑÈê‹+9ã]ÍwsRŸ Ð£ks{ÚîcdåÚÃjåÚv}Øò°p˜,šÆ‰¯ß?'Eέ¥òÇêE¨`ëÖïplà,QÄ“:"û÷Ý”8•X‡wö8'3¶›lDU~vöÃ$£QÒBqR?æe>¬ÿúæ»ëË›å3°Ç’Á‡ÓCÛÛ¹ªCµ*`í•@; ïu>Y::HŸ_U±C‘ììµÄÞwe÷E5dlû¢%7¹ü(ÉÕ1í§îw˜gmst¯Q­½bݧ2+phi¶= J->ðHã–(ü9^±6(Us:ÄíŸb—9Ü èÉSôJtœ}WÖU±ÅÚïa…Ü98´I{ÆÞyÁ]Ý8¿B­”ö›ŽëM@$ïËé×0³Xsez`>¯«®x*è ÏIÜþ€@Ä7d²Nz&+Or¿0”e=—©¡Ýã[F HUšç‚/ñûU]µ¬pÁCÑ|vÒé¿Ê‡Þ™Pð-Û#E,«÷¯è†Ä™7Û#m>a4:.ù¦4jp~ÌÛ§ªíCãÇ"·gB×{Šú¦ØÒíðAì̦S5±·Ñܦ‚M’t´Á~ÿçxÔإ͸ÐÎá$â‡Ô)¥W„”n’ç¹çh¢FºŒ£O$¡Ç{·*×%j”Æ)ÐCñ´—ù-ëGß KâTì£)0©O.öcÑœK1PŠ6AØO%*ÍÄy ö1S$v¯qÒm‚Häö6÷ ¿Ï8°FÊÛ¤hƒñÞ¸bK§xÃB©J{ ú»U¹¢ ÇNñép°¦Nðçl7“§Rþ«öAÑÂؼ}Ê~}ÐœgS÷5ÃÚá4§þ‹}6Gÿ=µ_$ ÕoÂYÒj67Ç°j[ÑÈ°C„—ÝÝÐRƒ-ÅKßPƒ Ut¾?çÄ’œè#V¸I-Ÿ¶âÀîOÄ‹ïëÃÝÖÍí8™l4NQ–| ûß²diè?”Ÿ´/ãÙüwÝ.åb +endstream endobj 1493 0 obj <> endobj 1494 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1495 0 obj <>stream +hÞÌWÛnÜ6}߯ üD%^F$EJBЇÄqÚ´Ij¬·.»”µÖV£• I[Ç(úAýËž!%í%N› -и9×3gÆ’]M}{*ÙU;±šÅa¢Ä2²&Ÿ,'Oç“GÏ%“l¾œHÅBüÇK&±HëP„ŠÍW“RDao¾˜LE†šÍo'çüåñsfDÂŽ=|ÈNš@&"áõU“­VEuÅ^T]Þ,³Eü2ÿª´We„Öl*…´†ÍŸy‰Ñ([ndÿÜS©DÄ Èa³zÝUÞ:aÇó‰‰Rxd…±L(¦)QB’œoV‰Øßá´PÑÎwÄ„B¢ÝGøFÉà>Y& Ùˆ…6ÞÄWY #aøS¡ ¦Ë8˜*™ÀfÅU ÝÓí[8G1…礩ýÞåzѱÀŠ˜ŸîKî÷›¶¦°—×E×¹R¼”²1ŒlIz[(CdËŸ]%Cbæ…²ñ½÷óSïÏ<ößHýs ÐV$þ°O@hûÈÈ'à_Ñù¤,ýbV\]w-›åmŽÐZHþ[ b¡y~)†è!+a‹ÒÝTµÝ¯j´±Ý«hWu!9Àošúæ,+×y0ÿuSªR¤©!ìErS«öd_ª§7ù¢XyË2XÓ`.ü¬Žð6!^ü=# 䣉qœ¥nEÆ‚K¬%c{Rè =çe¾¼=íš@A *E¤¼º÷¨×7-¥°ÕÝírÎN L*I°+ꡦ½lÇ8 ñ 9Ó‹0^,3Æ ÜÄídöãÉñlþf'lðÕÜp-bwƒµ]Ö嫼êXwuì2_­1’ C¡Ó­«#Êzû2Ve«ü’Q¶È×H _ÙmÑ]o ’/‘ã±Qª6F·]~Þ1Y‹$5xëAqÜÉo#‘O—G‹…4žl~ïk +fPöXÞþcÜâÁˆiOn‹Éض#W´¬¾éŠºÊJ–U—l‘Uì]ÎÖ­‹¢½/„=Z½UÝäûŠÕÕ"gE…ÐQ¿Y¥Ãg´Ï© +eS-”é{Nïª.ûà=èýNEj}¡a 8ÖQcå pÎ xU–;$„_ÊgwwÁ=ÛˆH%Ê©=ÕE]µ[àÎuÖ<ØËtŒÞ Ò!{Æû|ŽšF#AU¼¦p³›"Ô¡´é ù!¹â:®N“mõ[¦gÎÏž!I¬·+‹_>¨òžâŒŠwÿ“‡FÖ®Ö„v×&´N5€päúáíìøô‚CäG'vÔà³­®cùAá7 Fé¯>˳rN¶òƒ¦ß!ñ˜ÍiØ ß~À›œ¾n*>þc˜Žÿ`—œ{Y +endstream endobj 1496 0 obj <> endobj 1497 0 obj <>/Border[0 0 0]/Rect[457.14 610.26 549 623.76]/Subtype/Link/Type/Annot>> endobj 1498 0 obj <>/Border[0 0 0]/Rect[63 596.28 123.24 610.26]/Subtype/Link/Type/Annot>> endobj 1499 0 obj <> endobj 1500 0 obj <> endobj 1501 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1502 0 obj <>stream +hÞÌXÛnã6}÷Wû$bWŒx%=¶›¤H±Ý £‹EÒǦ½.l)ä&ùŽö'ú—!©«í&›¶@ÄV$q8sæÌ™a8YMN~¸ædUM´$I”•j"#RšÉròýtrrÎ 'Óå„ Á|ñ4aYJ±Hév)¸7OBE‘$Ó‡ÉMðáìœÄ,%ïOÞ¿}K.KÊS–Ūœm·ë|E.òÚ”ËÙÜÐ_¦?ÂVÒm3)IÈ×1™ž:‹ªµÍ;ÛŸKrÁT°;äªØÕëÜTÖØÙt¢K4ĤY¬ 2Ë2ÂTŠ¶lt6`ûbfB $ø‚´!äÌÂx¨Ò&ztŒÇè"\ÈØyøÓŒJÅâà‰ˆˆÓ0†Ë„†‚§à²åö³¹Ï• :—eáî-vóšPÍ’àgjŸw¿¬Ö4ƒ"Gpm´Â%„N/ô%õ¾`‚З?).EG⌒ö{ôç±ï¾ößXý¿f 5KþÈ' Ò>\¹ü+{~·Ù¸‹«õêk]‘+S()~£"a20 ÖðßS8–Â*w¿¨SWÔ)ÒY'm5GMµq_ÉP»B€ùâ7ä øP?‘S³\çëz]äÕ°‚;±@»JøºÝ©e༵«°–‡vIi-gLzpíº¸µ: ¾ôɃó.FE 3‚"á=‹gPHqÏDCÚ.¯>]ž]M¿œž_|œ^|úxM§¿öBŠX’õV6 Ú®&U=«ÍÖä5#Ó¯†¸µ~ÓPd bIÚ7îÝw;íIÖ)î°ÙWfL©þûpîÎò™ÏrrgÈ®2 Rä›'ø˜ãZΙÖqËdî6d{D—ë¡< bäœ +¼((|”ëPr–AŠ0ܤqAHï‚òŒªžòz†B&ƒG0í®–šJÖ`­ —œ ¶îùwk¼^v#Ès?HÑ’ÖE îÞ/H é°Dè§j%{=Žc{ÓËÊ;RCÞôØ"»›úTqÂ@ 0Y’’X2è@14©®× Ë(ŠÚ +ê¹Û«•7è(6>Iâ ˆKl[;f” ‰Ïû†VGž(óºe³rȆ‡;þ G>ÌòÕn¶2 QSa»|”&7{®X–x<£.,†[† 9€Šƒ³@ìêà&øB¹Ö‚ +-8u°¸AKªùíBÈX»%ì¶1ˇëzVÖ˜+@tñ ì%œûÝUâóÅ4´îŠ>ETît–/í“%û@Øý,AÊFáê †ªl÷6ð»aí å£*|%Ï=!\ª%^ðFöRŠ¡Š[3Ým³×šÈ1³P"Yî{g¼p=–e+8Mã]çóÍn"wgêèž*0&ï”*I⣳¦Óö›Ð5)²ÃX3x ¹ÙÂÄýÚs”´ 24î¯GBËžmï7ÑbiÓ‡æ­MD>kk±,X˜jî†_¬ï ¸¯¦MFñ|GŽ (=¿7R# Œ 18 "Y¦«‚”V5bÑŒ÷/íÔg. vSoÈmÊ5€||W•â÷wíç¯kÍ;ΠÂÿÆœ"tÏ^;¡c8ª)«¢e‚f‘ oæyëÄ=ª™€Ð™½´Ë–¶~àÆQÍ¥HU˜–ÒÔ;ìk8«å´{ó —ûj +†é1;ºïKRíæsSUË݆¹…͸'ñàf²Wx†‘Ó©¨'7­&RTaÐ#Û꡽¶ŠÏ| +˜ÙcÏ^E]{ CUÔKušûº®Ü"Ý“«&! 20 +„Ð +»t&ô×8§<Ô-Ãú±§@¼ÀS"4o ¦QØ`±Nks’†­å6¸¥>ÖãY‘pÕe%uÁ8øþA9JYA±ŸI†€ãm$zx£(ÂQìU½6ߦ §á¯ìXEãY•íÁ…ùðXNÊx8]˽ žEÿÁ¡ÓÖœóÆÄEîë@[èåsÐs ¡O‹ŸÝ%ÅKíÚUmV¦$÷NiÛ†ÐÖ;(ð¢Uàá°ÖêI¿äÀsq £¼Hl%%/8é æ‹ÞÔѵ~ ÆT?Æžl<öDnìézïxÓ;»ØÓ +TžŒÇGC·«;Ûl‹'@XŠÎÄ8Y ¾#}ˆíлþ`r~~ +endstream endobj 1503 0 obj <> endobj 1504 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1505 0 obj <>stream +hÞìXÛrÛ6}×WàlJ„H€ì›+wÙ#3édœ>Ð2%3#‘*EÕõ'õ/» "A+·^fòÉŒ“À^Îîž]„“õäùÏל¬÷%‰bÆŠÈ€Ôùd5y‘Nž¿â„“t5á‚ð<Ö,‰‰– I·“¤° „wérâ³ $I&7ôböŠD,&/Ÿ¿|öŒ\ÕYL«um·E¹&çe“׫l™{¿¥¿€*iUELJâsÆUDÒ3+1<Êæ½ì_kÏç‚…´9dQš¢Ì÷FØ,Da))„L’„°0FIÆ7%˜VÝwpš‰Ðù˜ $Ò|Ÿˆ$‡„ÀÇ0îÜGËx„6ÂBFÖÄ×™'CÑG"îù,µç ƒÍ‚ +›_ó>Gt¨ž«º²ïîˆxŠiúÖ3_rû¾ÞžöÒªDt»â%„ÒÚ·¶`„Ж¿<<Š†hb…’ãsôçÇž_¸íÿ‘ú o3ŠÅÐ PmxhðŸèœn6v±(Ö÷Íž,ò}5 %ãôOh&i~ǺhSX “ +J÷U •VƒŠ6Ŧы= ×e“ýé¥àtdO',Q¶p"Ådˆà°05{C‹²!›ÜStõé½;ËWï©… s7Àb:ƒí˪Ü7d ûï³úÒRƒ²5$¹H:”#‹ò ­n¡"è‡ô»ŽNZ+¡ØfθŸþˆ^øœ3'ŽöÕÿÄŒ]ú«ÝÙvdGÄWÉ ;€Á$ç);è]u¸ÝäÄ®:‡zAíÔš¯|,²rmþ›+0¨<å¿6Áø©‰lÀçzd.0àI´Ê>iæc`˜äG Ú¡Ò·™AãðYÿß{Vì©zˆ"Ãïþ±œoèz˜„†³>ló²Ù»Y$,º¦…ýК¾`8r§tÀ’Ð1Äuu ¾™Ï5ü@LÛ*ýzBŠŽxx×)¥é”ôr×U™mHV·V“æ>ƒ’,¶…•·ºŒ£]mäó5tWDÖp†>Ò< ›V™çc‹Ûr[< ®D2ôÍ4GÝÒ`Fö»|Y¬ŠüŽÔ^LK\QF®ÍûG↠¤%ƒCƒ‹:]¬õµ3ƒŒ>’3„e4RÈãHÑöÈb]Vuè«öhy<Âeи]G<Pï†]öœYÝ'íܵGºu8Ýúº…C•’Ã(Ѐ$²ò¤ÀʃŸš<Ü[Ä%‹ƒhD=Ä[Þ“G'à@uÏrr—¯ +sTát<Øá×Îo%i]àCI°à€Xµ0„- "ŽÌûÞqõå¨ EEô`Ö0ÍhN‚uHG1—L&OÜ¡ç/ÓÅ;Ìꣿ°tBœJcQäÚÅôÝlá‘_'àíùtÐø«,Þ\ÌFŽˆÞaùi)ý@Lç—ó³Ù«é›‹ô‰Ä¸ñK {=}¹¸t„– ÓCvùaÄUµ+ZªH´Upu>wÈ͇©X<)ëfÛ[ççJ&ìJFK&#‡²øý÷™‹W„¦%Óm8v¥'ÚÒ+Aù¨ÊF5èq oÊÆLL,NúdA@c +>æ?AL–4Ÿ2¸%ð}ïqI¦ —k¦ø0OZ +@ +Ê &ü€!à%LŒ +½Tà%9ù R†AÑ¡xëãüÍÅÅ(}ÂqãJÈ'ü̹aíÆÅlŽÍæ#9û#Ìíݯ¥¦}›ÞÞÉ”jçQËn-!AW~XäÙ/¥ð»JÝk¨3 œˆv è/»m£4—Q ™—QL¤S0†4 +¦‚¾0ûž•XPšË#A5¹çTŒžñÓA³¹Z\^Íé; „óùyz~9¿vs»´*lv‘}“5¹“¤cm¾ˆQ_OìVUžÅÍåäI÷·QRÛ+:VǤ.ïÈ’ïÖæ/p¿ŒÆóˆÕJ{¶6 0]ËeŽec›E÷ÚÅéë!RcˆœŒóÛý¾d"rÓüËïL<†¾üñ+Óæïw¦ïw¦oçÎ4K' 0ÜR¡ +endstream endobj 1506 0 obj <> endobj 1507 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1508 0 obj <>stream +hÞìXÛnÛF}×Wìã²6{!wɾ9‰S¸plCf\I™’H¤JQMýIýËÎì’"—’S» @ZJ$çrfæÌŒYNžÿx-Èr;ÑŠ“0ÖDqRç“ÅäE:yþZAÒÅDHÂá–ÄÄ(θ$ézÂA +ã!ü–Î'SÆ9W$ý=UQ Ç5Õž5[(–eUç€dNI Ðæ‡D%Idãjº°ªÞÆêã§ô~㇤}B"z䈊®[0919ð\¢È"PûC5ù|çB¡XÌ£1lߊù¹D¹_íÀ¥œÜæ‹Â¾ª‘ÿ÷/ŠŽžÝ{%6 }ìmÀ"À"Õ¶0H-"ò‘fP7ð±¦+øŒèÎ^UA€ëŽ"®˜JÜ¡çg/f'³wš!@´g #}F¼RbQäUÒùɻә'D=MÀÍÙÉ(¢ñ“ÌÞžŸŽ‘½ÃêËRúfO/./^¾>y{žHŒ{kØ›“—³KOˆdÉ0=ºW®°ž‘ªö% +fäA©^]xì5…–/ÇeãüÁd»ÈÖ(™°+3.™ŒìÊâ×]>d­XË%ÎBj€cWz²-½´ªlTƒÈVñ!ÕÊèÅ;И› xð×ä!!ióA;~ÞÐÖ) ?xlrŸ5`ßÓz8ÐÑgv:ŸMœxÚ†ÿ365ꇎ‚vÏ A¡“#v`‡Hâ£vÐÛj÷q•ûÓx84ÐŽÃ…éÍí×± ±6Ñ8P_¨þ± ÖX ðÀõÏåÈØîaÝ>jƒQarÜL#ÏÀŒw£‚jƒJ¡óá±ûKÿ?>‰‰Vòˆ‰u=(â¯yëró +ßï#Y¸ú©éÛ54ëvá vPѶšãK–ÀÍ×mY®X€ßnè‰|ʪåp¶n»gAUѨ1øŒûžÙ¯Â/ìW}½`ÉoûÕ·ýêÿ³_¦“?T.4+ +endstream endobj 1509 0 obj <> endobj 1510 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1511 0 obj <>stream +hÞÌXÙnÛF}×WLõD6Ö˜ÃúàÈN›Öq[IDE@I#‰‰D©$UÇ(òAýËž;‹ÊnݦšE‡w9÷Üe,جsúí`³º,ñR¦1 rØõjÓ¥¬•°‹A' +3xó(fܲ,côýÈcÿÔÿñ1€ æ)Áï™x± €uþg‹…^\³yS³kYKä@páüêú 9á6 …_Q8Fêî²:ng5ÆIÜÊh•u9ଫÕú*_Jwða—©‚gYDÔ E+Ui‘hÏoÖr\L Y³œmÊâ—d$Œ )y›; !er ìæ*9¾¡p ílê>Õkæ’­F$¥¹[KW nª‰q±'Bú°Òç¤ǑcoòÅæÏ=óLý‰…©m?®›bUæ –W³ÍR–°`ž7¬†³Ö› ÝóÆ°(Mµ IÝPK¨Š¡"Äê"Bb•»ø€ap¡ÉéN+ñÙ¾ô(3FåeŽÄáLÀ |ú<2¢|Þ«×——@ (;/„-ñQl‚š+f%U&ŠJÂ"µ¦ŠŠ*òä :ͼ¨·r­Ø6œ€ºŒb§Z Q €b"(‰ÊlK0¦ ¿øY¡¨DS¢Ö¹œeá‡V³‹Oùr½0mbïýDˆ‚”(ƒ#£Eت>˜›€DÈY,VtäÜRK“®OëO@"r”"VÏíÄ7r(æã\s$¡ö8X]¾IÅb”]‘!ŒY¥û»-š¹b>ŸTð]ÓF/äô-e ú£¢ÅÏ=žì³@yª^äl@Á¡Ó½`zQ»'Ûg[²t1„Ê÷Øø>Yã媱 „¡à1Ë©”™D€ã´÷ÞÎjª|¯–£¢Ìu±Gfƒ£¨cDˆÐ2â°Ìh.hZÛb¹Å/|º¿Ó‚¨ày\³ÁÈ5‰‚üEʯ+i©°}Ɔ +ë~®ƒ; +ì÷:L'ºIPhU§öht8§üÑpܬ„¯QÖÏó»(™z]ö›’2øÚ¼ è½JÖOíG=¾}zJ¢ûs9þÈŠéŽ5vk×s€kU¡^ì ¦áœ:ꥯ¾a;6aÛêØ2ãѺ‚‰Ó¡Ó(Äl7ìNÆΠ÷¤K+ |ñ…Iv[!rå 'ùpXv‡îS{ÌdOq%›MU2±=¢~&ÒlmltTûtÓäUcLRï‰×Çûß]’?¼¿¾¸¢ÆÕG'Záûl@¸|ñìúìúm÷„u¯Î^^tOè´w‚VE§ö¦ÛÏ'²Ë,~À׿i†mã lÁöž9ˆÒÕf‰¶•A˜¿€k™/¶ú°½ï~…g¤PEÝ(¤ñõKu^”“­Ê¡‹ýÇŠ»'s@!œ%yO?›"a;“iKª'‰Œº•Àeû¦’©vƒ±¥w%´á|L>(¿ûmGÄ-QÉÁ$ „e<:¨‚‡ô£oEÈuYò鲄D÷§ÃÚ—r?;šn^õ_\}{`4z鞺̪SE×Á<ƒ VíœQ«Ôo ‚üTÛNŸ´t°m‡ +xu( +´ÕÊ ZoÉFUµÝA¼mÜÌ€&'lU.îð1Fñ* fÓbÁJ =>w@Ø‘ cJ´ßÈÄV iGõ]ÙäŸ J™ƒ¨ø˜L¥Kª£:ËGèõªZ‡©çCqu7W%…§Èî”{€ž°ZJÖmS­K4Ûp††½÷…½ò„Y|Ïýô\æål“Ï$î+j~é*‹©)X¶/ÿ˜Ö³ã±”ë §˜zõ$ϯ"p®i’^mØÒ¤n£ÕÕ uSíǦ OÚ3“ê÷¥,ÒmJåÐö)"Ù¡t˜ë¿Ó„ªuŸøšµ¨Ù”¶³`Mã7bGwÀ•tKü?ö°Æ¥â(AO"Kü¸ ß÷5:ôõ>GãC@Õ³|—n¢‚‰„rDY9^l&ÒŽá7 Z•ÞÉ£·À-¥b18`UèŽd¯Ì0¬Ñ’É +endstream endobj 1512 0 obj <> endobj 1513 0 obj <> endobj 1514 0 obj <> endobj 1515 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1516 0 obj <>stream +hÞÌWÛnÛF}×WÌ#· ×{ã’|t;HÑA$´(’>Ð%±•(•¤âè;ÚŸè_vf—I 6\$ +&ÅÝ™sæºV“«7S «zb5Ä"“XЪ|²œ|?›\ÝJ0[N¤øIÌÓb-¸P0ÛNJáÂà·Ù|r!„†ÙÃäcðãÍ-DìMQæµv3›XÅc‹˜,,p¥Ó4n’åÐ9Àn1seF‹H mÐn!ŸI )à¢I:ôd˜ŒÈD|Ñ‘·ð]Æ´áQp%$ #|Y¨d‚&«@1‰ÿµÿŽË261±ó¾Úùo‹Ã¼fyüÄÜJî¿WuÁB´7Ø•D®C+ˆ.¥lL|‘-Ik 9ˆlù›ÑQ2$/NϳŸ=Ÿ¹í¿‘ú?Þæ -Oˆ~Ñ:@ØÖÒx|×›ùP¬ÖM ò:ÇКËà3S1×A¾à]ü·!+Â3·‹á>—qÝÆvÇ]Šùd“Ö[Ë0ÙÓ`Çð_¹ÿõ……¨7Ûî7y »%4ë*ÌA§_ +·ttÁóáRžÂ"¯ç>ƒuPÜç XçUÎèdð’)Â]ç9üÙáÑ +£>A{ r š§˜ÕVœ2v„K£…˜Ñ=¶°M Å Á4Ûæá]ÞÀtŸÍ© Ý|ñpØì7§±“â4ÊÈrû„Nª"éˆNÔ&œ¢¿ZÝ–g 0©àä¶1‚ŽFå*lXHt¨#n£è¬hÊ® ¹½ûl•ƒÒŠÓ,ŠËxìžpP0(Ô*_PYhÐA53ä‘*oè3k%;ÅÿÕmäkwÂ%Ö?ç÷~A:OõÛóÀè5P,¡>Ìçy]/îv=HSãq¹7ŒÞ(Eä AÝbWx›|ù0m2²—R¤iÝ<î6£dˆl2 [u š6l]ÃIQTÑ+2À(Æ°§z,Ï™@ºÒ "¦ï¯_½½{3¢ÃpÕóÑúµn²&ßæeÃaÄ@˜pìb¡æªoñ@ü±l²/þDkFJQæZ½D‘rm"!t}•ò±MÎlà ë˜ú|b-ªÇ]`lŠ.hJå¢0ÍIÜM¹ aîWÁ°m=É¿1ê‰pGYŽo!DþÔ¿'úT¡•=§üœq£zƟϳNô“<·Ä<—emtϲ¯d>¾Û˜Qªå°‚ÈS ”É ¦t Q-»ÄñE´]¿»¹»™q,Ө߮ÌE<ÏÎýý÷<±¢›µDr&ŠkÔ‡; +H¹;oÏ- +0ÏJ¸ÏáPc Úî*o^¨Rn|Eí¦ª¾/ê¶4k<º+q€•TøØ‹âëU¡ÇõyÚ@8¹–¦@AcékÜ;ß•usܼΪï:¯Úžt•vóJä³Ó6ÃZiª°Á¶GzÊq@àȬ° ö‡ÝšÃPÅvhÃÀðofŒújc‚Åîp¿é‚Оjƒ´—&lIeQNé±ï/*QwQé •cähýL&0rç¿_äÿ0ecZ\kÛ5Þ§4^~V +üzLé ÁÓÕ,òõ"C2‰Hé±›ŽCÓ%B÷¥åå˜7]t;ƲÔ(QñŠ"ý bdù]í<9ÝçóbytÕ¦D§ù]®"œ- ÛlŠW8kX2œ[Nóçú˜¯}IW{ .Ÿ$®¦¯Ä¯n<7n&±vB¶ßo +öd„™«ø…Iƒ×*\<¸šà4„^Å©Œo£ªT·€FzÐ7†mæc‡À‹üdå  ÷†Ó8dR/yEœh‰ãÖ‘)A>£U7:´ÙÕ¯Cóè&I»8ÜúÕÿ YË’šD½ò¨SnÛÞàíìLˆ¼ôÈIÇ‹(‹4>^"Tº[ŽøöÔáÀn.¦ROÞàjtÉŽV†TÐa‰#èîI3¼s,÷ŽnÁ8ágýÿcp$‘M€3ŸŒG(ê y(\éF÷‡ªßpJÿG€¼(äæ +endstream endobj 1517 0 obj <> endobj 1518 0 obj <>/Border[0 0 0]/Rect[63 194.22 92.16 207.72]/Subtype/Link/Type/Annot>> endobj 1519 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1520 0 obj <>stream +hÞÌXmoÛ6þî_qË'j‘) Å>´®»u˺"v·õP(Žìh±eC’›CÐþåîHÊò۶؀%€¤Hä½(íLü1 TÄ5{Š ¯ñ1úR$h³d2xUî½DGâ(&xÞU+÷îf3m 0¶)¦|3cbÍ…IÀ,y +f#JÑ»§ä¤€~È9fUA}Û®pñŘÁ4s1F j'ÄjÛ|<›.×.Ibv磜Ã}ÑÜÚoÖùa$%§¶Ð†á\ä³û‘ËüÁõÝ·ìçsÈãd'ôÌÃîå¡7Æõ!z tÐ%=èÒÖíV`‚×ëÀ0§æ%L¬ÚAæì7Ìêýè,>w<ÆC„›šIHÝíåûÁåþ PHñ™çUÖpظçlÀïVÊøk¿- }U^?oûfYˆ6oE_\èÁm>½ƒbÖXàÛ:LWU•O›>·gîÁ•f7}õ tÀâëÛc˼Gë +MœMØÙØꬡ\áëN„Ç°sÀ9 ,kòV˜æ‘¤r±…v_T︒O&åÙ$xÞ. ýŠNq•7›ª±]b?~¡(Ÿ ¤MÞ»&«oœu½UtÁwCB÷‡WÃÑ„¡˜£N‰vRÁû1¾ÅÙ9œ ^àUp}–{ ;òD5Ãòf«iàûÇŠ; ¥a>ÿâ«®%'ÏL––¤¦îFŒ¶Ü©j6ÂÙq¿òvIGªýM- Ý1‰hY Æ$°C©¦¡)…æÔcVOŽX}ôf<<Íê»Ì3£.Õä–ŽLØ#‡'Á'ÈïïŽ+az ŸjbµnhkLsù Vt&ùÆZÞ ‹–píl¢¦¢U×SìÆØo4±?' ÜÀ[µãVåK±ôàÍŠENÍY1î;0’ö);Lêëð5uÛ;^*¨Ê&ûŒòf4 µ¯q—(r‰w¼e4@v1´t"h8pÇO5n[^æ9ÔyÞ¶[ÅÍá)'îDŸQV‘pœä0EŠƒ`xœ16%Úi®ËØTÒg‘&Û|M}\eêmA\©óÛÁ¦õ1rÆ«6ߢԜ8n]¼BT.³r¾Éæ9ŽžOCÓŒÁ-Oq¦ã4·m¬/CœÓìl×9oSœ ³éí~6ci½Û Y)R¢8wÒ¤¼ h +¨JÒle%fŸmÞÙaÐ5—âÈË“‡¬ñd'%·§Ui\9QYxu¢F[j<n¸9,Õ¾oóÖCÏ=T%ãÛôŠ“ùùô CŠv7æ„ÂŽÑyÃv'¬ :Q”Áö”³5?ÁIÙîY½gôfFm»ÞL§y]Ï6‹œ)E¨ýLù71Øcn<1»lXvÙÅ·ÿ™°ÿ9Hˆ¢ë£¨£N­ŸÆÏòˆ”}áþ)À"ª +endstream endobj 1521 0 obj <> endobj 1522 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1523 0 obj <>stream +hÞÌWÝr›F¾×SœË¥ ëýrçÚN'6É8š´»DB <€£è‘ú–=gw ;mÚ¸ÓŽf,»ç÷;ß9HXÏξ{'aÝÎ F¤¥ hM1[;ÏÎ^J0_ͤ?¼ÈÔð,£ +æ»™@)\D¸6_ÌB.„Ð0ßÏnØW/!æ)\œ]<{o›@¦2r xçÛ­»¹.×›®…ë¢-°´æ’} ”ášKÞãßCØ( á+÷OŠ7&&´­5C^ò€½;T]þ)˜ÿ†§cw:ãYâªnHBœp‘<¬lÉÞ°²ê`[ [íßaÞ20.P+¡VP]âÆE]µ,pç&o¾Ï ‰ÓeÞ*ëã»øÞ0[ ¬+^Ó%ßõD÷D¢dâ :Àž“–34ÒÕHýÈàbÇbk h[ºÌw I ÒÂCC0 Y=¡!í,Øa$(.Íáë–õý‡m.õ^{44Ò¾'­å²£ËfªZs?¢ÙðÈàú×*ÞÆ¢\[ÅÝ©æLX UßNæcUÇ–ÕÃcß°sl\»Ìú~WT];ÍR¯ê;5Agúb‹X°8°Š|c“<Ëbò5RÇƦ…rÌ;‡e‰Hl19-EÆrŽœrN?^JŸÿ£†Œ§6ã· K×.E +—:×PžÑ#yÃtŸ9·ÃŠî{¬<'ñ»rÑ eŒxr,‘žÈ5•µår{‡ÁQ +÷õ#‰•Ë¶Xí¯ª%$ÓŠ7™%(‡‚µ›’­²¥ÃP@ ù”š4×ÙàšP¯æ§ü¤³ø4 ¾ÿ˜ZôÛ²‡ Xð;À¤X$4bùòYMê”ëÏj>4ÿí´æúô%hƒßTvJe?O‚iøJ©=µ]+ú$šh>!*¤)È?àw£Ýð òO%"+>âÊ[’lôÞÄÞ6Œñ/O¬üðw”_gâ³ê‡ÚÖÉ_ÒclâáÓe8î¿]¬¹ØIÈ`œJ*hjæ2áòzcÖöµâi{Y¬ÝäÑ…­Ýˆ¿Sþ`T<Ãü +endstream endobj 1524 0 obj <> endobj 1525 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[305.04 338.22 479.82 351.72]/Subtype/Link/Type/Annot>> endobj 1526 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1527 0 obj <>stream +hÞäXÍnÛF¾ë)æ¸lÌ ÷Ÿì-Mœ"E›¶œX™’ÙJ¤AÒUòíKô-;³KR¤¬¸MÑ-ŠÔšËùvæûf#`³xúõ•€M»° +\’‚N-¨šb±^|µ\<})@Àr½ü‡?"uUx¯1§ÁsÑÔáÝÍýªƒÈrÇÞF~¦Œbô—Õ¡ëÃM/)­#ÀÈ—´÷…Nˆ|ù-¢¥äˆƒ`Æߣ??õû'?ûg¬þ‹?ó ,O þ¤?€Äö t8€¿eÏgÛm\–›Û®…Ë¢-°”â‚ýIÇ+nøP} +;éSØbé>RÕø¡uvRÑñE"x†õ«°Ø6÷»¢êÚ¾fm0„ (‡‚%.ðõÊZ,Ì×ù®ˆ–?ö4\d&•ø¯ L÷Õ+.)›µ‹_Éì ‹]Ý«r]-t·Thê5Ùȸ½e¿Î¤aûC w[d +ȽH Ý0ÞG3À¢ˆá<2~„à˜Lr›ûì£O=2Ûb½¿B[—u$4·lUÎ3v)Éò¹©‚9ÃÍ`7Öô°{H$˜ö—ÁµVL°‚®™)ÞvùæÝųåòüòõ V;ÁåOh»¼ ˆ”•‡ˆV:níÌ!¡³«WËóÃBË~Ùè]Ƶ>x÷iÇ Ï†tè­OÏlæ\ëw tÇI7‰F2õËê»®¬«| yu«¼‚ +¸oi¹@Ù2ÓÀÔP©r, ØÕM8઺ZJ> m<ž™E†Ê4ÙF÷ÛH}ŸUG,¥?V*3Ïä~›U—8Æ:³A–h@Ê„ÙŠÒrUú­‡4,£LÝ_„Ì|Ï`UW-) [ÝæÍ0íYÏl<¾ eBz÷bÁJ<‹°½M2;œ¡ ©rÍê¦Dɲ¬êäíøy`€÷Ñ ƒYyh-'åÈH d§ØÈ=FFC%úì#ºfžñ¨ž§ §Ï L'ÔI<ô5»kŠ{% #9”õ}»ý7Å›•›žƒhšA­ r÷œWy@è"²SÜOeV öÀ¬³@EOóHk"rC;åTP°ŽdŠ°#Ñá³ £ŸÊM÷´€žp ¨ätðöº>„N&gM pÊ}›cfY¶Å§a÷~Œ¹æûrδD§ éS‘Ë4L²d·§dD†€®>¢®²tàæMv’súáð’rÄ!°øh•Õš4}x‰¢B¿‹0-˜?3h‹~yÚ`Å°/¤šëy}S´¿í€JPg4(`K. pë)÷Ðèã +ÄÊæt%Ð2°‰ÎÌG/¸Ó]¾)@ + +w×ÐNÖsÒƒ(¡vyÔo4rÎ'¤Y%¥yf1%»A“ i²"EÆè5ùªk“eé4òN|_"£jº¾Ú¶¾S— ö^¥qtR§Í_ÕéñÒ#µô¶lƒL 1±„ šp!"ݤ2l‰·òvøÑ¿Xd¾J抪®°TcΡ˜¸“ìV®hp€Z,ÇÎ|Þ¾ìn½ EHø«ÂK51ª÷lÆÔN©QXN“ßXéÙ è”Z¿¼ ZqûÛr…>ä?E8ñ>ÆS‹eÆ•4Ç÷Ï£¤¿fmGgî0³JäBÃð:[¢Œù 5£dÉñÄ7]þxÄàQ…Kºbƒ-¼‘x¿ë›¨Yî8¼ºNŒ˜?ÌŸI;5oÛ²íÔÐ%…æyì×æþ&¡£šwRC—ä2„Ìé#ÄÄø¿BR@Õ’2j«Â¨BALuXQ¬Ç¿!³GHàEÝ|vÓu$ÆŸîºÒyÓõ­–pȹz¼ü·›-!UÏ¡ÿ—v åêw|¶d) +endstream endobj 1528 0 obj <> endobj 1529 0 obj <>/Border[0 0 0]/Rect[63 285.24 98.82 298.74]/Subtype/Link/Type/Annot>> endobj 1530 0 obj <> endobj 1531 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1532 0 obj <>stream +hÞÌXírÛ¸ý¯§@ý ìZ0üh¦?ºŽÝn»MwleÓŽÝÙ¡%Êf#Q’ª“éìS´/Ñ·ì¹H‰”<ÛîL“‰‘ÀŽ÷œ{É'¿¾•ì±™Äš%aÊ¢4f:du1YN¾žM.®%“l¶œHÅBüÅ—L‘¥,Ñ¡›­'!¬ˆ0³Ù|2aj6{žÜño¯®™)»¼¸üê+ö]ÈT¤|óXçëuY=²oª¶¨—ù¼þ<û-¶Òn+#´fS)dlØì­³õ¶åÞö‡:˜J%"^»ÙìÚ²*kìj6‰•HbÄ 3¡t–eLD)Ù²ÑÙ€íKÄ,T4x Hh‚¶/rHfaÈ^Fi=9& ¹ˆ6ÎÃß玄៙ +e05&ÁTÉ.+®‰OížÄ‘D ¡ó]½qÏ»yË‚X$üûÀ¾)Üóº)ƒ)ü囊ÀµÑ†—RqBx‘/©÷…ˆ|ùg@KÉ‘„9£¬ÿý|éû §ý4Vÿ§ÙбH þÐ@û‘;€ÿÉž¿Z­Üà¦||jvS4( µü¯J„æÅBtùïS8Q6…c0wOêxLjLŒ“xDhŠ!$ÿù¦.‹ª fÙ³TŠ,3”w‘4]Ôºc©Œ]Ø·Ûb^.Ë¢aíSÁ6ÄW ÿÉXÞ–Èàe R¸½4¯˜à‡NŒÃ2ìÙK +™ÙÖE )â—›]³úÌÅÌ_°BȘ æ%r¾N½I•Äk + |xwüûœŠù +Ÿ†ïìtK$ÿÆïÌgN úÇß ±{G@XDø9süzaÌ`ù‡ár£^¹þv´>}åú«ÿÎýëw£Äx­ÿ×F¤ê™¤¾ÈÀíØ@Ú}RF6‡`kSÍ!%Õ9—ò×W§£âÂ=ïꢦbhYdGD¤0qJ…jÝi°s « ·HSvõ)_ƒ»åíÊ­ýf‡¼4Iâyi™%»2ã á ŒX‚"ã¶rH¾ZN~?S‘-•aü) äçù»±æ©›L#Î0€sêàìV N +‘ĮӀÀ1P½È#­l—pÇ˪…1Ç_³{»ßendžx¾-~p®ž;õ†([BCªéoI¯Ý̵߰P¾‡Ø¾ÍÛœíðÔïö7kbös¿{ûEuѼéª3š”÷¦/.ÈôåS1ÿÈÊå9rº®±ù¦®‹y{PÝ®a fÞs»èg¿d{DñØ‚zì™g[ÃÅå=?›Ù Vm)6:”sFq5µ¼-:KFDŠ„Ó–´çºÄá?bš¸¿¯Îîƒ7Ý4¯ª»ÖE»«+&û)öåt¸'àt´hܽüÃÍ•<ÃãsfÇgøþ#>âD¨sšwœÀëò7W„÷ï~¸¹º½ç00÷xsŠœ¼ ßüèS¹#»gº¥¹ŽbÊUÏK/T﫲m†ÂqÈe-k¢®Kð\¶«;R5xßß‚¡ÔòŽ¨åÒæHºÞ¿ûf6TÄCFw­‰²5š³¥¸X£" FZ2à°U¯4ßµÁ¸K ÍS®m¶TõóË«§bné‚3îú»6ÖKÏ®AßT(ø›jŽÜ­<(Ër…²oÐ v(l|týºð؜Ҵ®;k>£ùƒRÜhu¾m© Òè¸ëWòŽåë‰Ó@ ш–2#´ÎYSxlà’ ±q†Ïl¶œÑºíh¦p1KÓ†>…Á}gmÙga–Òk•f(*}R¾2¦Žª‚á£&Jw%5Êâ·±‹·äÛ¼zÜåZS ¥m£"dp]TãkÁ•Á%\:„ÐwCÜìûµ0Ì:¬2·éŸPè¦mvl$ìªe-CžØ#n­áaDûM­Ì´yÝÓ7Ý÷z¾ÂÐ1Qúˆ‚+:ªqWÕâv›ÏI#_0y‚18„^Ú %1B +@£iÛÿŽƒ›*‹æÈO,>ÈcÈÌ(>5þ¾mX·”Î-¥s{ NÏW»…ËŠøøĦ½¯w|%ísD¢6u]'…KRl^¤Ù/zŒ©2Ü]šˆiYêÒî@…äøVsèж[ø¨Ñ`Ù_h°ºþ +:çj:mÒ…’$c=}ìa/Šfî_óòJ÷Tà¢C+ùy@ªdáïÝõNãÄUÊ”’–ôÔ.2yÌy ‘ºJéžô'{É÷•ë © +QÚw¦´_gÃî—jj»^Ü0B3lÒÁ† ù¯Yý¬/!’‰0Ç!ìK„/7Ðè- Ò‰—’ ëÆRrÔÕÒÕÚ§ –Fä¶oñ…  +úû~ψÝòq_¼PwæÔÊ5»ù¼hšånõoïÒÄ"Ž7 ßlug‰S^Ê^¾VHã’{ý»œ5àñ¶9¡9 NöÊæCiŒO… 0 Ò´X +endstream endobj 1533 0 obj <> endobj 1534 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1535 0 obj <>stream +hÞÌWMsÛ6½ëWàNJ„<ª²ÒºÓØKiN EÉìؤKRQò“ú/» )YN§ÓŽgLŠ$öãáíÛ'›É럜lꉖ$ + &2 U6YO~\N^¿á„“åz à.ÜD,6$’ YÞO°Â‚ž-Ӊς d¹›ÜÐ_çoˆb†Ì^Ï^½"W•Ç 3´ÜTÉý}^lÈyÑdÕ:I3ïå/àJ:WŠII|θVdyæ,†½m¾·ý{åù\°æ`‡\—Û&/²Ú›/'*Œ!#Í”&LÈ8Ž Z²¹iÁ"ݽ‡¤™Gï„DÚ—sHlqˆ ¼ M—>FÆÆ7R¹ß&ž ™¢Ÿ‰¸ç+¸<_p1 *<ÿ¥{®!‘(Œž«ªtÏVÛ´!žfýͳo2÷¼ªsχxiY º6ÝñBGÆbÚXp‡0–¿=\ŠDÄ%ýõàç©ëW~öïXýf7@jfþ Ý€@·ÀC·ßÅçôîÎÝ\ç›Û¦&×YA HÉ8ý艈Iš­XW-…#a)¬¡tŸ¨jøPGzPѶØ"Ì"À èâsÑ$Ÿ¼åŸ°Z¹Õ1‹µ«¼A J3¢X,lÍÞмhÈ]æiºÞ-š¤jÞyS¿§ï½¶ê»P$ªŠÆÞ¡9®™6XñÖ`;ƒ`LB¦ëݼX¡1øÒz¬!£Ä”‰ÛÄ:u²[#¬LQ°R“æ6#£ÜB('·›ÁƒwçË…û¬õ#Ý7{j‡IÝ$MvŸ sKÚDýMû’‰½¼=gÚûÎ-0_‡r€r‡±1€x½³FÉŽ@ µ€Ê;ísl·ÊlP—k’6„6ð«Ô3¡=ز´dy¸s¯Ú¯åOù,Žßb>iÃÈÉk¨ž¿¶9.7¶5Šî†VÙŠìn³x@±Be†peY6à +w»]Ô"²sðÛZY<$)tÊQÌ1S]Ì-u0ÒÊu?Œ³~ÈÒ|£Œx羈x¸-ñ$ñZÖ9Id0ûR€òlBWåöÃ]·[º¯3®ã.åtó†6Ðâh~ŸÑL&p‡þ€Æ|_%‡¾úðžã4E§ÉC‚—4oìµHbˆvêã8g2æúÅATè5³=žý +ÌA 0´ÀñH @7 cÏKcx@§å.ÃKuX½BÅÇž#F*þ>;°­E3v ³”ıoâ(â/öýÑ&}g™—l²gûæÁ·û^Y§Žq’úÀ¹,rÎAÖ‡¥=f¡ ³ëš~?ŠÜÐ)ÌßØ)7[´®_¶qÁ)Z bmh°üFòoÅR ù^@T7˜s;iÒˇ&/‹äŽ$•s¢—4½&Ùv0”®X(ÚÁ ]ž¿Ã°lz1½¸\Ìg—g‹q™ˆ†2¬ûPÚ3¸M€2æxà€y t8XTLQeѪ²:Í=zôVíÁ¡![Ð:’àr×4?ê$x'Œ]–‘")Ê:KËbÅÈÂÂñù +ÐÖø¨1£=Øk¿?hSMIòMQV€ ivг1÷àèá:À~§ÃXí=¥ vœô+ö½Ï«oÞ÷ðx ˜M¯¦³óåôb6Ń û–ŽÍì)@¯Îg—o¦×Ó³q‹×c¸ÒÉ1-l% ä8Üû.KG©–A0j dÙ3y1@p@Œ<äi¹ÆùÜÐÄ.òìíã>áqô Lа­ó$%Æeyš4¢ú¿eÄõ|q¾x„_¢ÃåÏog½ðpfó'äSbaOUÐC¸Ë…›pxî{ØC7¢By{ªü ÚyƦó>…ði@püG€@·$ù +endstream endobj 1536 0 obj <> endobj 1537 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1538 0 obj <>stream +hÞÌX[s›F~ׯØÇ¥©Öì…¦OŠ"§î8¶+ádZ»ÓÁ2’¨1(€â¨ýEý—=»ËE +¶;I§ã´ö\¿ó³P´½Q´,’#×öð$â6Ê£Ábð:SDQ°P†løƒê¹Ä÷Ëmb3ÜlBl÷‚ù`HlÛæ(x\áÓÉ1rˆ‡ÆGãW¯ÐEnQx8[æáý}œ.ÑIZFù"œGÖoÁO ŠUá )¡ÒAÁ#Q4²i+ûCn )#Ç M³M§Q¡…M‚dÄ•à“$ŽD„qß÷ž’¥½Óë‡à3a¢óB¢^àú!¸ÜÄ×að<^í½2Œ:ÊDXpÇXø.´¸ Þ"fSkèÀÒµ†Œz`2ÃÌ¢påÍ}ê +WEç"Ï̽ÛͼD–$.~oé'‘¹Ÿ±5{q–ªàjom.Ƥ«â¥lñ*[T‚”-[j«2ÄEF(j~{ÿú}ækßFêÿø5.‰§ÂoW °e•*L¾ŠÎQ’˜Å4^®ÊM£"‚àœPüÉb.á8º%5þ+»LCXBå¶E-ûE /JWv +ZãÙVæãuöŠ‚?Ú¥Ä÷…:AÛ"åu‘¯ñùºŒ³4LP˜/7÷QZ¢r–¨XGóxG +‘êTB" ztíVûÅù‡É´£›wpw;anµ¿;9==ù0 +‚YgŸ4‡M†ÔŠÕ)*Ê°Œ”™«¸@±¢'/#¯- ™<‚ gidr>d‚¸T•ÛHeuá9-M­3 <óðƒE©®c¸äh“Æ% +¼û8Ibx (Âa úg:D[Tc ^{?>vÇG²ëd“C•Š—i–G +p±N 1"*X ™M ¹¬f`Eî¼Õ7ßä9ì9€V—­t;Ò3±xºþ:Ú‚Ö¯5b|9N΂Ž‚P7<{ø`N)£w] @ ª%u\ñè¬hÃ]ÐÐ* ¼ €kvÕ€âP¨kk×\“:Ç +WfÕ  `Çú]°‹. ®* œ”q÷=UH—ÆŽráýÚ‚6.0±T=;ŸHï?A%ʳƒ¸û”%e¸Œ¾„»Žzæºÿxœî8ä¶F¼?? Fo'/Ã]MKjóì1&ëÌ8Ì•O2’PŒ$[FRP¨X ÆÇé#‡6)ñlè‚øPÖcØ%5Ïá’f$AØË°QC˜½Š½2D«ï6,Û°x>4¾r‡z3 +F¯G³>*¼§ÛÔxz~6ëmcߨKÉýNM©×ö©Ûd§ó÷Œª.Þ(Œp@A¼Nâè=¬¢Í3-Z’pûéU‚Y%8µ ™xnÐûÀR¡Æßä€åªS§•Uo)6ò±@Áæ/AœhLªËªÅ\EµP‡¨¶Âécà¬OF\‡ô¥Wêd@3…¥š`ÛFw-.•§Çyôq¥s˜ç|¼í€:c÷©’ +²4nëC†§O@ž:ÿì“ãìCõx:ùùrr6þ¥×ïÄNÄê“Œí™m )ƒ‰ºxv‰”ûz.ÏN¾@u{¢ƒê=u[}¡nçÔñÃ4J]5â W2Í•8kH"½Eó0E7Æ@Ç(Ýnð¦lgi²… „¬G"p˜k·>*¾ŸøÔ¨Ò†\5™GÚÕl›–áçŽzŸøÒbÕB! ÐÊY…V¦ËEÏ*(‰,‰{xÝ^csâQ¥¶:™Ýf››¤NlÈŒJ¿¤CgWx'Xà©êGün»è…Yº¦zmuËn·H˜ôvŠ¤V3Ê-(IMÕ•‚Ê4û±v‚µ›Ï?íP3fàÙ¡¦S,)~÷Gˆ¦gLÞŽ~œLƒ_Ÿ*`mšód×p k¨Àøð~ã¹êMpL‡¨ú ð±pzÇ æsM͹õA'Z†«ª \þIªœ¦RêRà—šJëIÖ6í[#M>ÛDE7e»ð B4Ú0h5Ê+ºYXœšaÈQÃP’©>äãõ‘*² +þl)±Ö„ŠUý†ŸTÊç¡iˆm¶c:èÉM8· ä\|‡róÍ +=ÄåJ3k¹]Gý†Çˆ½3s€ÛMßÜ°¡ã¸Oo·lÈ—‹ŸB_~´ø7)¿Òñ]kãP›~À}Pú»1öûÇÙàJ}´@úÃEµñeåo á«»›j}m¡¿´Œà»jhW»ò¨ø¡þºh±ÁÞFðÑ‘1^Eó;/ÚÈÅp·°l ã ‹æeý-䬙ñ +endstream endobj 1539 0 obj <> endobj 1540 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1541 0 obj <>stream +hÞÌWÛnÛF}×WLóD&ÖzwI.É}H'M›,%}ˆŠ‚–)‰­D +$U×(òíOô/{öBŠ’4M[  ÒKîìÌ™™s†‚–£ÓgAËf¤ŠyBa¢(àTç£ÅèñttúT éb$$qüÇE$1KŠθ¤éfÄa…ñkÓùhÌ8çM¯Gï½çO)b ž=x@oj_$,ñªem6E¹¤çe›×‹lžûßO¿ÁQ=*bA@cÁ„ŠhúÄZ {Ûboû»Ú ÉB¯€º¨vmQæ1v>EaŠˆ‹1¤iJ,L´%›’,VÝsÍdxð˜hHó1÷ˆ¤‡”ð0Lºðµg"Ò>â&ˆ¬‹/3?YäÝäÂG¸ý± |–žô~»ž 8Œ5Öûö峯ϱxöíç“™‡­ƒãï0ç, ÎOH`Y_P,½ìNˆß²÷7OmïjìøÃŽ®;eH¬2$†S®Åõ³§m}c’å½mrzY”4Ùfs2ÀÞ³þ^`´50#Tb9]åtd‚jËú¨M¡V ÊHëƒó3êüdIÙå}Q{o'ç/Ÿ¿š¼ytöüÕ³b–Ø·M(‘S £J¦¬š%¹ÉËö„®WÅ|Et•/´Ѫòß^[ÆR1…£?¢iB9½D‘?fÚÇφ$úcž­ç»5¼¢…îtåUƶµ€õ´#;›‰#þšªË¦Õà€¡`W‹Î¼- ˼Úäý“Â×¢„Ê®Œ4ÖGøÑ á§a§Ñ`“èü“é1Š«B• ±†eDj«£ÈÖ”•W@§$}n”؃!ú]ŒËœv ÜTuNí +›ªrú)]Á,ŠuîáY{hߊ L]O}LB)ÒŸšš›²Í~I“¥n²#ÞÆ׶¼ÌàŸ]¢táE~W­*¤ÿë^°; s«`›Ü¥WY8®É0v›~;j¸ß;u !yqH!XœPŠÖÃ¥ @Ìì[: $b bàÚóƒèš*ì› +'¹:H™TÇ=#bÔ®0y}•†9¦TB˜ª;æÆÓ'ÀûEV.wÙ2‡†.ü@¢Ÿ0^…à:/RôXšÜ"¦Á×Í£ÂÈÔÈ µ»QPFs¡b;ª2"„JˆÁ¥Ÿæ(û KÅ­ãøA®Ù0iA¤©sOkt³›Ïó¦YìÖÌn}§Ž°Ížq5=ÍïÙ#b59²ÿ—„-Ód˜×n¶Ñ›9=é˜ù0V8}>)÷ŸÒEÞ—8£ƒ°ÇB°Abû4Åû'¦oíž;‡#dÈYàp²sÑ{c tÚxÕ̳s¡¦ºÃ)h^•MKslYeõýÕ…'¥L»úl£Öot­oóCìPµ< ày'¦&S–"ž:pøsŽ¯J}üëÅâ8wèÐa¥êé Ø†%"ðÃ¥® 78ãð] ñ–;·æ°ùž}ÑΉɷ=K‘¥©¡ŠPD‡DíŠDWád›Ï‹Eó[ⵂ‹Ï±T+nÚ)n'¬êHJßSål»]kU/±Bš›í©þ ¼Í«\:^=’`3¹@œ•‘`í¨b,†\k:ì´HÄ6|—!EÊ[ã7B0ú„ ïËC.CAªa¿ytPóLºöò^?žè'`ú?°„¼Ö +endstream endobj 1542 0 obj <> endobj 1543 0 obj <>/Border[0 0 0]/Rect[198.72 390.24 246.9 403.74]/Subtype/Link/Type/Annot>> endobj 1544 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1545 0 obj <>stream +hÞÌXÛnãF}×W4òÔÜŒzØMv“LžfÆãƒdØZ/Ï>p$Êâ‚’ ‘ŒãOÚ¿ÜSÝlÞäx'Á.i^ºªNÕ9UMÉoÿz+ÙC½0K”ũaQÈNÅb»x¿Z¼½”L²Õv! ñ‡ƒL‘¥,‰B*¶Ú/B¬"Â×VëÅR„a±ÕÓâžÿðñ’i‘²o?|ý5ûéÈT¤üøpÊ÷ûòðÀ®MqÚæë"øçê{˜Šœ)-¢ˆ-¥F³Õ…[1î×–ÃÚÿ8K©DÌK¬ÃnŽmSŠÚ.öqµ0J$1¡ *ʲŒ‰8¥µlt6`{1 Onz ²7rHfaÈnÆ©ž“š\ÄI¤‡?æA ÍŸ™ +e°Ô8M‚¥’)\V\¿‘»ž!Ž$NŸNGwmÓ®‘ð»ÀÞ)ÜõS]KøË×F\J™„ð"_ÒÎJùòï€^%Gæeýqöïo¿ð±ÿϪâÇl"#R‚?ìš.2v øŸØ|WUîä¦|Ø55»)êˆ"!ù/JDÄ‹ðõß•p¢l 0w u<'54‰™:µUR(¶ëí6Xýk`©Y¦©îb©}Ô‘g©4.ìÛÇb]nË¢f»c |bÍ‘­ójÝVyc]•¡È¢9EkÜó‚5»‚A&Ê} #”{k ³gõc¾†xüÒ½Mj‘ôb¡<ø]õßùáy€Ÿª-¾aέgv<층–¶„ÄÉ>SÁYp‹?ÁfÊaíÖI”WÃÔ—Zˆ¬À´v„Yb¬ä”¡X^Ë8ÁôÕ +H€çq†ãaª~“œÄ¡_z@™tà®à6ÒNk~  Є““AöDâ˜8q¬YÎH0;Kº³uŠðáé»7·W×›ä:Ê=·gY&IWÜu“7ž84‚]è á˜ð«ŸMþ++>ÓiUlD†gãŽfÖpæ gáò€è€ èâëèÚ³$ÎÿÚÐjß^òÃC›?Ð[Ñ •2Qæ]ÙÏÒ³ì B‰%$€}`•¤‡lÍ9 ;ÌÇ…aú"¸å\(¼YY³Ç¹a7ÄOëx&Âɱ'¹¸¯ˆmYlWäLŸøÓ®$?PxZŸÙïVÁËëË«úì×U»]šy˜K=ˆõ|,Ñrïÿ~ûþjõá»w7·“Ð1a$z7?$IRW¼ö†å‡Í R'gµéŒ\\Ý]]|¼!+s#pzŠFÙßúS Ø•=wÑqB>Y¢'§êÈIïºê쮋µ#å©+Õ%J-oŠ’¯Ñña›b qÚ¼aûü@ñç`I-.|¬ÊµåxíÖ‚êO`èÇKÕÉz^×í¾ %I6ÏÛªq‚¨Hëi}ͺ›VSRHÜß÷ë§g8/G" Øw¶h4Cä'mÓÜš ÿh  åš¿!‰Â€EØtþèÞŸŒÎɼvõHéHÏ:W2X‚Í®H-?$‹Dì}@—òªzîù’X¾x­¥Iô\á|S´¾V^.l^JBÿ[ºqrê¡ùÑg0Èh¨cÏÛç@RxÇ=ý@ž~FUµ'êÞ¹“é:ß÷Å¡)Ö…"OE[%.©® (ú¶.6TuˆÓÖˆ¥32œ¼('a‡›¯¤€Tyü'XÀŒ·¬ÞÛjƒ5Ÿh(ɸ–ñçšÙgüW¥ä°fC‡z™9¹FÛœr]6H‚+mŠ¹îúrâÒÙ´“+ \aŒTÄ‘Óع ŒJpµƒú–~*šÖe_cjÀO=k€©È䙤‡¥æ™èö h>[do½.êzÛV½èGžÈõ ´2{†éDÅZ˜¸oej4ûTÅöé.ˆ»} )ù‰˜ÓDÿ!9¯Œ=JÒ“Òºzè·û¾Ô6Sà›Wú?4ÔôPŒfš³¦—`³õlôM[5=°‡¨c«ýx¨h4]¶îû®æäRLÑ%Ñ\XbD<·vîšøœ‰Ì¸½+d©1}ÂäQì¦î®À’áÈžu>q·Á¡F`w™!m{/öQgÀôm+ÌŒWíÈ=ÿë`ÃÊå•›fÇžÊSá%Í'ãìö¸ â«¿8/GÚ¸?nŠ +,ý\7´«uãZ¿Aë9÷ÓG8éŪÝx7q Í»¸Ü‹Ó.M†c^#3õºÓÃ, T6U£AëÏ$;ó¯›ß• »qïLmïlÉ8¼Þøˆù(Õ/~ݵ/ŠÒot͆ۆ…hŽØ>£³®ļÛæ´lÊ~?±0½Xø!–j¦=“®ëËË/¨uõÛµŽ=ý´ÈCðø\†m³9¶h / ±J:!vUéÒmDhôt‡·î½tCaǺ@IWb(gE€P-£ü,$© h^Ù´yյ݇Î?J¼es@Ö-Ø—aøZ%¥ó] ÎTbÆ…ä8hh^1œ2ÆàìNJÃÿlé±Êùh ¤´]ößGD:¯6ÿqP¹í?r †f3É!–JÎ2ø +/îûTYÄ19÷žÛÅ­çÎ)#b3'A'ãÐúèãâÒ¼ÿ®õoSï +endstream endobj 1546 0 obj <> endobj 1547 0 obj <>/Border[0 0 0]/Rect[454.62 273.24 480.48 286.74]/Subtype/Link/Type/Annot>> endobj 1548 0 obj <> endobj 1549 0 obj <> endobj 1550 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1551 0 obj <>stream +hÞÌXÛnãÈ}×Wtæ‰ÌZmv7› ò0ëñd'Ù` â X ZnYÚ‘(ƒ¤Æcû›ŸÈ_æT_(’¶~H€Œ1EvWWª:U%Áîf§ü$Ø];ËË“‚¥EÆTÂ3[;]ÌN?&Øb5’%øÇ(r^,W O$[ìf ¤ð$ųÅr6çI’(¶x˜ý}þi^°³Ó³o¾aM, +^Dû»¦Úí6õûXw¦YUKÿcñ'¥ÜQš+Åæ‚‹L³Å{'1íe‹£ì¿5ñ\HžFÈa—ûC·©Mk…/f:-aQÆuƸTeY2ž$ÉÚ–Ižgá=Œæ2½&‰²/asHiq(^¦E0Ÿ4štÄÒNÅ¿T±J¹Ž™LD<׸Íã¹t–‘Œ®©{žÀ<Í ž‹fïžÝ–‹3žGW±}cÜó¦ÝÄsèíkBך›^Rf9Fº^òéò’"9sBYÿ9ùúÒç+—ýo¤þ/³P/þÄ; ɼDêð_9óÝvën.7wë®e—¦5È¥¸ˆ¾Ä2ç*2·<$€á\Úκ¿‘ÕX˜åÙ £ç½‰³àòW!Ùî;Sw­ÏÙÌ BÊ°<±™}1M+âÅÏX•ºUŠK ÒÒ.:an…—Ã3ݯ@þ1Ò-òX/E|*{‚Pž ò¢tê~º7ËÍê‘=¬7Ë5:)pC +¥ )„äÙ¯Xg­ /Swª•¥ƒ¬ÜgòÚ0â›ö±îª¯lÓ²Cüuh6ÜÎÒ±¿!ªG#Õƒc‹Þ„38©ÃÙ»ŠÔ.¢Ÿ÷3DFþÉö`b¡ñƒXð}¢LâÓ/)#_R&±°[¿ÌUÁ𘰱ìâ znê a qñú•÷Š…¸STBlèÙ;DŸÇå|$· x¶¿ŠÓRL¬È{±%ÐÖ~!Gž­v÷Û˜p1í¸–Œ\ë„Ö¯ƒÊ²€ «X!¸"KÁ"Ún÷± cÈÝ&–¤ÄטЈèHÃÚuXAQË*¶¬\TA‚¸Wõ%Ìsòv{S-cQ".?³ÆU/ö°éÖÌîñÞwê>¶utü¸5«‡+cÃùìæó[FNE`çÅЩܽöò`MæªÝ@0Ï9AÚš çÖûbâÌeÍÙ·ìÚ{V9ý³Èžû“Óøı!O€8•¤„jä{Še÷ËýƒÍ_Á_ï«O+Ê&º¯®cöO+eñ{¿оƴoCµCÕO s/úô”DŸ­Íò3Û¬Žn𴓈-÷Mc–Ý ZŽT켎ì¦ßýÅã€íSͼE÷ T\]GoöÌ–Õ´­cϸ'ã¡[AªT Â4˜ …Ù%ýC³A$Üa%¿¾®ß\ÇoÃ2OăƒÓšš‰~‰}ù yù mZW_Gú„)²=Lo_Âçì»sÂ÷Ï?]žºŽ (¨õì1ä.Ò+yûË$ï}ÒÛŒWR„\tÜ]mªqü³W–Â3ÂÎE³Mbv†j µSÔ"‰¸'i&ÑÕÇwãSy1-k<€‹³wl”CÈý1oþ¶4—¶Lõr)hö÷tWmí×ÏT${‡mU} š©Q‡lb»}ƒ€_ã‰emt¤Õ„µ©zúÙ×KÄjí!Zm¶–ªEÄÙ‡½½ $fk\Ýsœ_Õ’¡ãM}Dm¬©7ÕÑŠDh!¨eEu*ñ¹‹q©ÜŠŽî‘^öKí\„JQ>–«3QuÛܶNºÁ¶ñG/¼Ò±6›¼NpÂÍ¡ÍDÓ›ÐE¥:å™d2G¯\1OhŒÇ‘ঠ0D`qŽN*9†wJ†C;ì €u_´C“ÔwHGK`ï©«Ç9ÏKëؽ©ÕÊ¢ýÁ2§7ì7 (1 +jçñ‹Ë.Î/ù;ñÉDëˆâ¸34+ùVZGüœú¥Ü–‰G¨¸.^Ïiý¸FrU6N1Ë邬éÚ¸‚±©AÓêø,Ú]LÏ*?5tNFˆ òfÏÌ6:ìÆœy¿-¥^âèI +9Æýµ'Z‰ ¦@o@&¥4‰òÌghz–X©ú^^ Õ‹fOcqJóA÷x”ï6Yñšã—åç Á"à¸í_;‰ ï^¡&ê|¨fŸ†iŸ†ïžê&‘Äää9!åi>åácAÞ¿¶RÓ¸bë´qß0 „ù¤µCîÚ¥lÈ’<Ÿï­QžIš¯(ÏÖ¦As€ÑI,é÷ˆ‘〕@DÛ +©h–°²| 8BO +dø¹Ä'µsnªC°8Üûö”\=½xLš(J¶á1ƒê]VY‘Η/KÌ)Ÿ(.û¬/\Ö‡Ê4w%Ub®zÂŒO†AúiÇóªû¢é ×áÇsûÛN÷¿7õ$Q`È|JWɈ#F• ÖM>ía¹4m»:l9óÐüG€…SÓ +endstream endobj 1552 0 obj <> endobj 1553 0 obj <> endobj 1554 0 obj <> endobj 1555 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1556 0 obj <>stream +hÞÌX]oÛ6öè_ÁGi­Y‘”HioY“².HÜC»Í‘ ¶ÜIr²ü¤ýËKR_vÒņ ,Ù¢îÏ9÷2‚­g¯¾»lÝÌ´b&JYœj¦"V³ÕìÛÅìÕÁ[¬fB²¸ˆÔð,eFE<’l±E°Â£¿-–³9¢H±ÅýìCpqö†%c÷; ªÎe½s¿Ýì—- 57ÁûÐ>)ÜïuS†sÄì**®Í6¢rI© Õ‹bI},´AËŸ!½J挲þzðõ©ë3—ý;VÿÇËì(ÍS*ä7 Ò~Dì6àñy²Ù¸›«r}Û6ìªh +P@).‚»P®‚â†wø÷6ÒBXƒ¹Ç¤VÄdËk{‡åÚÄÜ ¬¶|[â‹ÍbS¬î¯Û>¥äYо/ó)u• S±áDÜí…¥vÖœ%e@`$“‡ówÌLœAE¶Uú8‚÷ç'áâ·‘Wžº5ƒrcK°¦X¶å®â̽ãS'.i6W\&ƒÊ˜ÁÇõCÕæ¸W|,Ï´c?Ý Á$M9 zwKdUV-Û¡\©¨F¡0ÄÔˆ¤ã‹—»ªiÙ«oóúë.wíüPZf¦‡©Áñ?ÈßætÙÓzAp4"*¼¤æBp“f¿$Œ²!ÿ§ÅÊF³ß´Ó@ MJ8 +äc8Ù€ T©}3™÷ìùœ c(`b½ßUÛLÂæI.¼âÅ™²>îJÔ5™¢#ËJ<ÃN‹N };¹þT,ËUY4¬½-Xl*ùŽp)‚Ú>€}> cîÍË®]Q0ñ€£²A‰lyIvŠ¡<=¤ô’ñã'‚m¾ayí +€ò–•7¸BED,oÜ–‰ŒGi2¢BgSd¾#Ó7Ø2h…±›fßÿµhïCBHP•7ñ¸Û¾¾^]¤K/Ú Û ×¡a¡Œp)BúR7¡Hpå žV©Ð±g’ Û•笺!¡™Ôo …¼³´êøosð¶«Ô„Ë1@ý|]ñÚ`…ÜË ÁC2†ZLñ²F²/d28{ ª`ï°}ÒÒ÷pvÆË8Øà3 öö3Aðiy1bð„ÐEÚö¥Ò&µàêies[òŸêÚ¡œƒJFÙTÆy!@!ô‹œ*XlÐFŸîc˜Ø`‘(à&ºN&…'ƒDS7ˆ¢“õ°,JŽÀvqòóÙÕd÷Õˆ¹Ý,-U»6o «V—¤Ó¥èË­*±³0¬œcØLÌó÷ƒ,ùî ¿«Cdl#ŒÇ8tõîâìÖr@µ>J¨l0™ü¾/k§¬Ž¼íè%ÉèDðœ)À&1jþ'‡üÏâ‘RZy{¤*Òêôñl!ºÙ¢Ob™WÐQ¶oÄvW[^£öS/¦{½«,¦zT᜽]å¾. wÅf£3’ÎÐã~¯mhÓi2nƒ£¾æ›ÈùŠA“I…a@ ö^©à› +ïM¡ÐXò2¤I’yßíÙ–ú¯€ÖœƒÐùÆ5ÍÇCYWo¤ÙõæwUÁv+fû^ +š•q|š»¥v‹¦¤&>6k„›{:&ú›o<.Ìš%@ÁÌŸÉz<~õDßHÍhý0ŒÜŒö!´ø¨/ÃDÐH°yXc§üœm-¡Ÿ¦¸D4®B}³l81ŽNΙ¡ç~»³šL;ºUìS¾¤ÉÀp‰áo2Ï´O๩^ð§ÄƒÔ…ÕF+‘…=©ÖWŇH´£¼3(ËpÎf\[{äŒ&þ&ƒI@&­´:›í lˆõä¼}wq1IÕðÏ€-8_W৛ ºÑŠOÄaN 7&9ðtzöæäÝÅâ3κtáüÑim4†%ýÖÜþ`‰ý_ +endstream endobj 1557 0 obj <> endobj 1558 0 obj <> endobj 1559 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1560 0 obj <>stream +hÞÌX]oÛFöQ¿bÉ4šp>ø•·lâ]¸©á)‚x±`¨±Ì]ŠtI*¶~RÿeÏR¤b}h…’âwî×9çÒ‚íV¯~ø Ø®_%Š¥QÆt–0±Î¬nWÿܬ^}/˜`›Û•,ÂN"Kyž±TE<’l³_E°Â#{›rµæQ)¶yX}./¾g1ÏØÛWo¿ûŽ]u¡Èx´»®Øï«fÇ~lÓÝ¥ ÿ½ù¶Rn«˜+ÅÖ‚‹$f›w΢žl‹“í_ºp-$×A;ìº= Uczkìb³ŠuŽˆ'ŒK•ç9ã:#K6¶Dò4×4—z±ŽœPJ”]DÌSFr›‡œaQgcø䙈ÉG\¨Ø¹øS*ÍãàÈd$ÂuŒË4\K‘ÁgÈPà¨Ý}‰@RRz®ºÖÝÛÊ… Oƒ¡]1î~×WáþmCÙµáF”/)“”F¾dÞªùò[H¯’#)sFÙt>ûùÜùO>ö÷Xý?~Ì@%<£ôG¾Qâ ´+À_²ç›ºv×ÕînèÙµé 0 Á×P¦\fËGøN¥máÐ{øf¬'i2²ÅØØÉhëü§Phþi¬,VÔ}ËÚû¡j›¢®¬¿7eu{dÃa·äž q¨ë6.íÃçköÔ=çyâEäN¬8ÁÜyü#Üü÷D'÷³tö¼!½ó9¨ÍíÃǪ¸&È=ÀTýPÐƳ òc_<Ó,·ŒÆ“h‚ÿ"I"Ó´~ÚÉË1’òcÀã}±Ã–2U€«¸b>`O¤kd„˜m­¸ŒO—ž‚ýpl†âÑE?“¥8×Üä|‘ÚE]5«M˜6øËâhº›Àµ'qDD¤õ—mÓ¬ÄÓwE÷bt2qû¥ ™Ý»nFZ‘Â$8RÏ%Áûb?w<w–‚üì[¶xÁMèÂøFD(­}ß­'À|Þ@%(}wØ›fè—næ$žätnÆSpÈ:³èžç1E¬E<ùó9ø`[µ2½mVÄ£Dp erAG%|¸«Ê;6´.#ð%U.¢Q}¯f®èegŠÁXc)‡¢ÙÕÖv1°}ñ¿P ^-¡‡N–âIѼ\°Ã½µóµ*8{ß"ÇR;{œq*jZèWè0žŠ™FN®Á` A³ïŠP +Ç 1NˆGfB™àüÒ½¢jÂmg|2¸KÇôx׳Co¶¯YÁÊÃðÌ3¬h\ˆ9×:>Å(FŒÄ~ زáC™’W0¥Fq“´’ç®XÏ”Âý<”v“ÜÆ-c÷ðy¼³YôÞ"r…-à¨1Ä¡c7c¢Ý˜ËŒ'.—£z:l{ ÛÅì1côuUš›³eWûÊ¢±íMJòd„§P¶‰™B´”C¨½º ©Iƒ‚2JÙ°Ãé®B0n +•è š0!±H/ìФËi+Mý4#C>cv\ÊhXêQÎ%táxÇûY”£ì©QöØSº7Rý(|pÓùøŒðÉ)•Ó×€ré\ˆ Ì|¢Û‚ªì‰zÊQ Ú[vïÈúj‹/-AŸ7|éëZ®¨˜3ãS)ë3pªù¼àKìMñDM#ˆ]>Ö‹Py”Ì%~üô´Ý›æžõNÁèä_mè"©(Ñúi?5 )wJ–ñxA2#(2᧽bJÅδ{3\§VsÒ|Î6wÎt2ŸÒ“Þ™ ™í^îI’àâ€mÒ¨Ô“Gºä\iá\ÞI†q¡65G~dÅce«•/íãⳜ·á guäG +äPÇë­Ù‘ŠƒÔ16Ø‘‡pØ ]8ÎæýT5FKkŽ¢‡È©[ö…¤0G&×4¯øä<Ññù&ö¹ÄLÛYAÛM)®?”¥éûê«50`ž°…·ihX9V[,õù> endobj 1562 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1563 0 obj <>stream +hÞÌXÙrÛ6}×Wàœ˜±Û'×u2î¸NFVÓÉ$}`dÊf+‘.IÅÖ'õ/{±p•œ¨­ÛéXCÑ"p÷{Î)º½|}MÑm=“©H#¡%⪲ÙjöÝböòE-V3ÊPðEµ"‰FŠG$bh±™E …D~[,g!‰¢ˆ£ÅÃì¾<…b¢ÑÙ˳/ÐÛ* šh\ÞVéf“·è¢h²j•.³à—Å Š;U1á…”P£Å÷N¢èdÓ^öÏURFÎAš—Û&/²Ú +;_Ì$#J‚O’ÄÆ“$ADh#Ëzg¶ÁgÂÄè!„Ä,àö!¸Ü$±aH<ºõÞFcc"ÜðØYøcpAb¼C,¢Aí +BF5˜Ì0 (\…ûƒJ(·Ué~»Ù.H¢ð»À>ÉÜïU!Ø‹ËÂ×z™p1&•‰—±E{[L‚Œ-f«1D!'uß“Ÿú>rÙ¿#õ¼Ì&€K¢Mø#Ÿ€HúPáð,:O×kw3Ïoïšͳ:ƒàœPü9`ŠpœÝ¶þ} +fKXBçî757lûÚÞÁr©Qú6%´„ÿ¬ëlõð.O/¡ŽI‚Ó€& sЌʪy¶lÆ­Ü£†-1¼qýÒ¶‹“l{Y›N®QŠ¼”ØIÛâØÅ6êŒÁóó³E°øµWH൴lS«QݤM¶ÉŠ† ó¼¹À5v»×¢I"öµ¼}sùþõ›«‘"AØ@‘j¡‰q§©¬Æ‚)â(óyäÒòÄÄ”×VCÜ[‹Îa$®²ß·y•Ý |5õÐà@D/OߟÏG6q·ÛÝ!WD ‹ÌªÕiî`çÈ´ú>[æ«Ü(.¦Š)%Jõša뻋ӑJJô—hâû¨†ËËâ¥Å Z¦ú”¡m º6e•¡æ~) `(I‰¯#_î!Ty ÚCNXÜ[p½+šôqdfBé€ÞÜ@íÆÐܲI´e£8×Y ±kŠtçZà#v˜@"¨{Ì‘a +ˆâM¹ý´Î|@dWKT&-pÄÎáø0ÓõɸB¿z ´3çéÒKßQ0z=–M¡É¨Ô>±I—ÀÃZýc•ì?W¹;JåÇÀÉ¢K¸QÇ#V››Sd8T×íÖT|íx[€ŠY;¹€-VÅ#]u¶Ña‚RÎñ±GDÒn…“±{ììheøv…™ÄfJÐÉ°æ¡Ñô—Ń4g†îKhšndŒv¦¿ÓmÒß ¯H3ð3ÚÞÛ­ŸótÒÏèKD‚Háøk¶æÀ•†#ë𪘎£Ìs%™§²Åâ–Ï]‘OÖÀ¿¾¸^œ^ Þga€úš¶ˆ××Â0Ö¤ EŽV%±O¦z †—÷eS×= ¼·0é,lwN¡Øn +9#±žÎñ-ž3ÇÊe±ÞY¼FÀÉS²P=qvÃSLÅú0öôïwMÈs”`xãûAü21uÖÎŽ˜µX• )§þñä㯒ϼ+êç`ŸÊ°Of†Ú óݵK4Rz,’²Øt¨IÆßÆR‘8ªúþ§Ç@D‘OˆüyìÚ%µE“¦lÒ5êe¡re•ƒ5RÅ͵ŸT[0:1•´-r€³r…Ê»MPà0Wt›;yP6´—'|Wø.ÌÌl Žc¨Hg•±Çn“„»•uÎx#¼Ñ÷0Æ\l[”ÅãmoŒ¼*;'5pF‡OQ6¶*tß}•v”ƒåõ†Ë­Û +Ó–¤ìíÆ{믆\ÖÛì[”[˜i3aÍ×äA=Ùí6wx’¨žFõ¶Ï4–ÄL›þLæºÎ|ªízRGò¥,ñ1ÜtðïªAʈ§ˆ@ëCÀ2ÿéòü GŠ¼¸R{à¼2=…Ë.U‰Á™f<ïpƒGúý‹ £½=»–ûr]_ö믹GGèÜ©†8À>ÝÉÅ—udÞäŒËzB$NDæ  ØÕ;æˆôÙOÇÄÁãñÙõog†¾w,jÇ#Âtgu]1é9sßi8 ñ¿Hd¬ ${ëN|1@á¨ì<¦^¬Ð.`1Tc(ðÖŸüvY*÷>. 96 #\n­å½G€¹äé¬AÀÛz0A:¤bzR6.xpµ-’˜Iðz]f,üC`óÚÑVÓ¾)ùS€>Õê +endstream endobj 1564 0 obj <> endobj 1565 0 obj <> endobj 1566 0 obj <> endobj 1567 0 obj <> endobj 1568 0 obj <> endobj 1569 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1570 0 obj <>stream +hÞÌXÛ’Û6­ÚG}ÉÄ‚qãíÑqÆ©l9‰k¬õ>Øû@K†[9)Ï(”¿Ìi€¤Hä_RÞš)A"îÓ÷nH¶™=ýéµd›fk–ˆ”™4fZ°­g?,fO_H&Ùb=“Š üa‘i³”%Zp¡Øb; Â…Á³År6çBÍw³·ÁË«,â){þôù÷ß³W»P¦< êÍ.ßn‹jÃ~®Z»[çKþgñO°ÒžUĵfsÉe±Åž¢hË#íï¹TÜè°ëzß•m±«Å,2$Šy3®t–eŒ›”(9ÙbÅ“¸¡¹2“÷Ð ©D»—yÐHæô1¼4i/>!“aÄyˆ¿ä¡6< +L Î#|M¹’)0«@…ŸÆ?Ç"“z^íjÿlµ_¶,Œy¼ ÝëŸïš"œoPW¤]'® })'¤0Â’vXÈB„åÏŽ„y¢lXO~^Z¹íï¡ú¼Í@Ç<%õ‹Î"î 7ÀWáù¬,ý—ëbsÓ6ìÚ61 5—Á‡P%\vÅûè\8QÎ…c„î1ªjÏbïÏô›ã$Eµ ! ü#\ü÷¢Çl&£3ÇP}”v}÷¦ÈñßGé>œ,¥ým½nlÛÃt ÔǤH9<—ÇbC€ež,¢÷'üzWWi§iÄÅm¾A´¨$CØ(±.Á\”:Òœpo+ñ°ÞÅØ9‰•—X‘Äý“bSTcÁ#ÉSã×—[Ÿ2ýb#Ñ?^f¿y>8÷Cc/pŒ¯B#aëÜÿnC² høA«èËD +ŽI‰ÝHײuzFH_ô¾ƒ2JoSáÿOáE2xú£äö;dçUydxq]‡R 0ïž×åXR9_— ¹hs%Œ:å*û2¨²‡‚0 Þ‹¡žj®Žå49ŠüúPµù½—;º «ÈÀ?M§s5 ð0œôûÒ¾ës!€ +’  +ù#ö.ëªiÙ›oòÝw=ÂسKP¹T֧Ψ÷®Tæ‚üzOKiÍiÝö½BÔŸ¥º9¤]-xÂHž9¼Ig¨ò#(ÁªÞ¿/-óòv£2~àž>ß·´¼.þ8áMpθÑ:ù\Ƈ¯Éøó”ÿ¾&æí/Ö-yùÒÙâà~î¦xR´Mòñ„€|1 ¥sƒö¥ó‚ƒÝ}‚N¨øèì+`hRnÿ¥|¶_ÞæKZÑN_ +yOHD†œDÆåçzê·…â´òCí \UË)´á±PÌ‘ò$Iäë7àëä]Ô·ßDÞÇðue5xz¢ÆH7\ŧ-Å3 ‰½Âf¿µUÛLÃSŽê§B8ÝÀ…:AõµaR½y†Ò¨¡îé®~jß8Àgí²X¶aíeUNPp£èè­¢kUÚuZ[Ëêµ;@CèT1RÍH|_bßüüìú_/¯&è Ýã°Ð—u-ûf®½É[v»«1Ú~ ƒœÜs£¶"!Ž‹nØXÐþ + +aÛ°kJð|·³k2Ì’øر¶öÑ=ð4ŽFS7Ñún£Ÿhs@²¡–%?„ø(ê}SVv¹{ÅN3`š&6éB¸J:3?]ýzuýlqzn¬ƒ«è°2jÈ€ÜÒÒ:}„’Æ`N(¦aæôTT«b™÷ŠÕÍ×:÷€=Èä°+¼»¸`Bßj&ŠcØÙf_¶ä-ù¾­·y[,­,9zû).¯ÇÂè~xtü‹ºzÂòj5A¼1,Nç9°3;ÖUy`ûv)ëe^âGQ5ÅÊzgòØaH}¸7Hú{ƒá +'Ôè§_°uh°¢%CºJ÷ÚL°ð“â9ïoªæ¨Î{Ô ×ÕŒÁ.‹Æycš‹x¬‡Dä^&DäÐœ!ѹ Z#ᮕŒŒNãNø¸;I;ûû¾ØAwŪ½aï‚ $ÄUšM@uâauœ]ç=WöÆÕNÅHζ7–FúS&Òè “ÃG˜ˆA(oB0èÒÕrß²2Gü"‰+AöC +ØÙe›W›Ò6Ž€ŸØyA%ΖIoÊøã}‘¡œ:²±=æqö4™S¼ö!™Ou‹¶¾=Ô›Ÿò ˆF0¹WÔ>â*¢†^%I¢cÌõIÇQ$]ã\§k¨ÏvîRrãÕNwP<¨žnòBÌUQðÑu³2E͙ܞv_oD~e6$óÐPbR¾÷颾ð¿p‚û]ÀÔiN²™T}U±=O©A¡IFuæ½õ•‚6~çL}©`}­(ªNÞŒK}TèpÍKîF<½ÞŒ×›qz3pZG¦h‘ÉkñÈ'Èm˜º{&ÚH¸Ëg d¼ÌÃ'BwÃPVm&è]§Ðg€ã5u[þñm:wZùVaì»é™°¾ÔÊ ƒÖ“0àRsÑ%Á¹æÈ%[4æÔ” Ÿ£Œ;¦Ô†™ôB›eζYCTŒ§ãìèo&Èß³®ºw–=@•Ž7\«½ cºé´½I.âèa7e´Bƹ‰D­Z8«xR¨ƒ[›7{ÂâÈ"GHçø¬úˆdå‡õÝh/_]ùäjWÛUjÛI)ûÔß«lHÜ·ÃñP“Ý…Ñ_ £,⊠+endstream endobj 1571 0 obj <> endobj 1572 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1573 0 obj <>stream +hÞìXÛ’›F¾×SÌ%T–Ù903pi'ë”Sù§ÖŠsaç‚•FZR@ñêIò yËtÏ dm²ŽsºHÙ¬€>~Ýý5œl×_¾ædÛ-´$†e$Í4‘Œ´v±Y<_.®_pÂÉr³à‚0ø'žšgÄHF™ ËÝ‚ÊRøm¹Z$”1&ÉòýâmôõÍ ¢hF>¿þü³ÏÈ7mÌ3šEͶ-v»²Þ’—uoÛM±²ñ÷˯@•ôª•’$œr­Èò /1eó“ìïÚ8ႦQ rÈmsèËÚvNØÍr¡5|ÒTiB…ÌóœÐ4CYÎ;ç°» >S‘ÎnBHðén‚Ëc@r†œÀÍ4¼GøBáB*oáÿŠX¦TEG"—&NÏÀd‰˜Ã1õ¿+ðä£óMÛøßÖ‡UObMMô&vw¬ÿ½íÊ8{£¦Æà:o†Km0^hKlÁ¡-¿Äø*bˆJÆóÙŸŸøØ_#õ_ü˜K€Ô4Ãð³¦Cxêð§è|VUþâ¶ÜÞ÷¹µ…’òè§X*#»¦þ„pÖP¹§¢ÖçE j£Ï +Z¢ ˆž7ýM½Š—?ÀÛÊ¿ àN•w™á“ऻ„SâáJ#:^–ñ4ÁšèaÙì?Ù©ŒÐt.©‚Ò…BJ¹ÒÈCÛ‘™k;Ñë½]•›Òv¤¿·Ïek×äõš‰­Q&O¡{’ (Å4¬ª¦;´–@ÒRh_E ‡êR7±Ä~- ¥:j–»¦ï]N9Ç.Å>è‰Rk/¶Ù9;úfOv¶/*RA b èóN6F¡]ÌQ8%Kî'ºƒq¾sÄc¼P[Öîlgïûºìú¢^Y²iA-þ²:x+sšš©÷C ô_'±'E ³@Ð<Õ9´H»ÞZ0Ü ÚùyS™žä˜<´UôË?}_ôÄ[6G QŠÉìÃ(ŒŽ,HpÆ+$ D‰Ã ¢ÄœiGÃä“8î\¸+@“Ê5¾R•Ý¼Sð¿=TöÕfÓÙžÌÐ5+4“)w³ÃÍÑ>"îÆZ†ÀXë £$Ø3¢=Í'`÷&¼zñâõÍr¦SR=É‚´da8È_ow¶î=ê¤G ¨û©,&•³‰Ôìw,Pù j°aÈåĆ²#;/›Òû¾ìïIq®YÌ[…×úæå³Ûo¿¾™©M©ðÏù>¤ ¦¿:gj‹èd +ÖÐ +Â~gÝû9Íòs—áBø×ÔSWG8@5”5>mNÙøúÜì9>fQƒ +7½!Jv…‘¡þ•ËD0ª2’H*Ô<Ë^ÅëcÝ3SrškO_ð àXº–Ú\?yÐëhèw‘Ÿt”qWa‚!ÿ ¯›Ã]eç-RÀu>v]ßßFÀ\"˜xB©x¶ý<ÏÀÈ€"“Ô[]ùTr¨; ðÿƒúÿ°~ç? ŸÔÿÐï§é»x¼Y/K™œô²AÏ3×XÓh{À‚ê‚‚`UqêÏiîg2 ´d5MóåÅü¦¡æRd|¼” W9ñŒ©˜‘jÀh˦TcÆTXÂœl £ñ!ÐêÄ9‡Ž¦E`ýÐØa *h쇑M Op óyßA ò`Á2‘y2ë<™È€L•Û2ÌÆD*ªùŒ¿L¸› ¯Ù “ §c7PnŒœÀ3p™‰4¤>;2i•‰Û‚7= Á•Ö‡ªµŽrǪN¾ÈÑ¢0éW@¡¶•uA4ž‘ud…Ƴ‘Ûp=™bl`<øWTdZGï‰-V÷“¬qÈ™`1 ðþ0ÊÏ Ãf$ƒáç‘#mm÷u_ã­Ä×}Y­ +Çyï° @dÚìõÀ{õ%࿺}ùåËÿŸ­ ù©ì\Ÿ²¦ÜŽÌÃ’Œ`LŸ°¤ ©©NÝÒZ?>ÝÒË@&ëOÝÓ.¹ÿ÷îi—,øoOûWïi ü„=ÍAúÝðIò“5è±xêÎ7hqš‰G6”Œcø'-(OÑ;ÝLn–‹_]ïÍó +endstream endobj 1574 0 obj <> endobj 1575 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1576 0 obj <>stream +hÞäX]oÛ6}÷¯ ö$­1+’"%=¦i;tèÖÀñÚ‡uª-;Úl)“ä¦ùIû—;—¤)NÒÝ€CK±ÄËûqî9—l;{úÃ…`ÛvfK¢”Å©a*bM1ÛÌž-gO_ +&Ør3’EøÁE¤ ÏR–¨ˆG’-÷³Vxã»åj6çQ)¶¼žý¼~ñ’iž²³§gOž°ó&)OƒzÛäû}YmÙ«ª+šM¾*Âß–?b+å¶Ò\)6\Í–ÏÅx°-nm¿k¹<JØa‹úЕUÑZc/–3gˆÈpm—*Ë2Æã”,ÙØŒä‰éŸ#h.ãÉsä„R¢ìCÄy&4ùˆ¥‹?å¡Š¹n˜ŒD8׸M¹)|– >c÷½A IœPzΛÚ}·>¬:žoCû¤pß7mÎáoPW”]nDù’Ò$”0ò%õ¾P…È—¿BZJŽ$ÌeÃõΟ]¿ðµÇêø5[exJé|"ã bW€dÏÓÝÎÝ,ÊíeײEÑ襸>†2á*(Ö¼oáDZ´î#]MbF=¢ˆ\§è_…fÛöEÕµ¾g3ʾa‰ - >½ÙlÚ¢ —¿ãMíÞDGÄÚå)²/1÷ØâpÄ'ÑöSp3¶ábŽ€S‚|,†0ž!„ô¿¸*Vå¦,ZÖ]ìË«µ«UÊ{@‹´ïÙVÛíØ&” ªP Ë‘õzc­|,­…Œ›HßÖZôVbO|9k/ó+P‘Ш gÏnغ؄¶N9ú^‡]wb-ú4úäb½‘k6õAtMÂàÔ舅J=Ôê·euëzî6›+PÅÁjoE'>¥ËÛª ’î¬ËA‚Mrk.ë‘7²·“YoPÊ;­-ªÕ®n‰÷÷E—ïÆU—W[ŠLÄÜÜ1½~ì(ƒ1˜ƒ6AxìtC¾±ª®æíe‰¿×£È¤á`aŠ,˜Ðùƒ°Võþꀅ'¶²6$¸¸/¬'’ÖN°ÄÚ•#ŸáÒPx¬ØuWéªßµoÿ¡hÏ›,_¯)¤EaB ų¸PÁ%Œ5}«*R]Û­ö}¢ òf¨a‡ +F}æ6×oË¿ÍaWœ–óPò,èÀŠMõvBZ%dpî©ËÕ˜´f­à¦Np‘;àU<ÕGØ=?]._,~žà7ær„Õï"Ÿ«¶Ë»‚H†º0ÝÕ!>šÆœ-ïkŒ&Ÿó@d÷¢V¦G>1õUWÖê]v—Gq“œO¬6ûêtñËëm>bÀyq™è‡ú²Çï­_ÚU^±…]Ÿñ4ùÐÃÞZ4J]íÀoÕª` …œMh9–Gï!Ùoag ¤ Í4q·ÄÃv0kpµâRß— ‹›ªË?M}ÉxfÜ”E74hè*ö@—–=ÆC 0Ï-ºß÷’LZ`碈µçX²ª«¶c+¬¹Ì›ïÙT P2ÄÇ +Ö0mÝyn/é­ ª)0DÊXŒKú>œdaÒb±ˆûs™èµUõÚÊW'Œ .ñe™¾ÕÆÅ"}Ÿ,û]å.,™ .€¨±cÏqK‰žÒü¾ª×ÀT¨ØéÅÙ«Wè'<"À„JZWm©WK"L²»Âå J¯ò&L8ê }ÍSß`›âÏCÙëžã5ÏŽÔ«‡¢ 2¸¾,*ÖÖûb¤[Ž±÷¥ek`Cß"éãj­Fmšzo—Z¹#z–ÆNÖ„=8¡tФ~$UVýÁdYCø‘ùš}çµÇ¹åCÓ{C³tlW D£êN¾cå2رÖtÍÙsÇ‚¡"ÉMßG“án*‹š¼>«wI…Lb²Û«EúKÅCB‘éc¥X¼ywöæõËŠ›QVûó•Ð÷è„¢‰'':p}N)Róe›ë ««¡žî¦ +Ak /à à`ÜQŽ1ÏáH¦¿]7˜_þ?eãqÕ@»’T®‡ucaÑNHP6‚Y›œQ0ZG™9RŠê°?#q8t ºÔ×í‘Jàì?ÁŠx⪘òL&É7îk/õî‘}?¯Nxºíê~¯:ü9}"· +JøL†ÇÙלÿœ™3ŠjrÄÉJÝ9ª;ÿô˜J }p'½†(SåuËÐŽÆqzˆGý(<{£_êÝa_‘™¼cûüPà!>Øáj8^‘TX U„ËM˜ÑkÃyüo<ý +endstream endobj 1577 0 obj <> endobj 1578 0 obj <>/Border[0 0 0]/Rect[446.1 139.26 499.92 152.76]/Subtype/Link/Type/Annot>> endobj 1579 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1580 0 obj <>stream +hÞÌW[oÛ6~÷¯8óµÆŒH]b©ãtݲ.p•®C=ªC;Zm9“ä¦Áд¹ïP’/qÚµh +, $†:<÷ËGE³ÎáÓŠfe'ô(rcòã<— +Ó™vž$ÃEŠ’iGirñ‹—Š#Ù)ò\éjJ\¤ëc/™tzÒu]’›Îkq:<¡@Æ48úqk=+¦V /¨5ü%u<_â–´«œ^€eäô´Š¡²ÚQxúë}ù{ç¬XÖ{—«IEN(#ñÒ±_L½_”™Óƒ¾b™³s­µ.»Kë0b±.q£ ˆuùÇᣬHD5SZ¿ïüû±÷g’}®ÿc2/”1»ßmà†M”_àAdÍçõb”Í®ª’F¦4(Ï“J¼st$=a.e›ÿM +GÚ¦pˆÊÝ/j+ÙÖµ]<Œ|mªÚVÞMG¼ÌR¾O×sXòç¦X7}û‘䋺"T[MÍ&W†¦Ž§d_Ø$Wb>_:ÊÇÿ7ÜŒ£ûX¿w¸ø…FåUKáô|ì–”Ò$µ6*pðj—·]§éMÖÏçoÒ‰£úðØ[*êö@7YuE4©n¯ 5'h‘\¾–¥kíž›é l¼y›€|ÇòXzñštÒ²þÚ°‚!aÝ*xÁ¾áø„ìh¨m?{-²¼¢w™Štð„ÆVÚ µj³<웋Zу:ͤ Gs­»Ü|Ž9±êâ‰óÙ9râ8­RZ•»v=vèoË ù¾9Á|¤0å㶃 ‘ºPuÍõð¹®Ìä-eÓËXÝÒqM–Ea&ÕVÚÑ +g@9öÐw?ÐÆ•ØfoîkÕr]@½éXt+¯¤|‰íŠvƒq@•5£$­LË(¾F“«‹î¦Èó¨äxœwÇÎã–Ìm(6B S­ŠœÔšÄ~üÀA½Ç9pª­zQ¥EÅ ñè¶/ÎÝêOŽÎO“µØ{|4øqÈ>þùb4|1`º¥â=‚ 5Ÿ•UšO89ÆBïør–'ËÂd³ÚcûÙsõ +Ê»ö¯§€ýizkŠÖ5݇b8âÌãôê¹2‚¦öÙ<°= âƒsNX¥¿‰î:°ÊóË>™š_+kdÒ9°Äµ)ª[+«[lí žf?yÞ× +ˆk¹ŽGxðëùó„ø»‰¯ÜÏIü{ŠdGÜ0¿l+íâŒY|ATî­cŽ¾ûøC3 ÚáØLF;5ãÎÅ9£Ö£q´š›E©¦ï·È¸=ÓN¥­ÊbY±,FÃÛ;³É† ¶ÆÅxõ”zùìht~:ÜÑò¿MÞ"Ú#„&R™…É+IG´3ºB©¢íø9ÜïÌ^AËVì°êÝž—Ÿâ­7œ-cAOwX)éÛÒ#K4|>%ŸÖ3¨Ù‘U­çõe ƒ­»Fƒã¡ØÚ=< +ó×*+Ì%ÆfGDBµå¨×bš! CmI¿; +¨0ËðJN”"»@¯Å(ÅÆ2ßC˜]Û€â?}S;§ îNLkEk‘7Êšíå‚ÚºLµºûÐýÄÁåÎHã ò6¯Ò÷` ì¦í6/.3ïÞx¥U†Iú m±Â~kþ +¾<êË_ƒšvÌ< Fé­ «p]  ú6†º(9Æœh$£U½˜›n‹•}IOÊW2Š)ðæI†ö²ÙbæMAû}@:\ƒ}͹m +ííO7·?ŽÜÀ® +D뿶®‡ÄðÕNÚùýðžî! ¦ùl•Î àþ”A>æ¾Ãî7ùÝ‹3ãähßÁ˜ÂÈm¬ºƒ +endstream endobj 1581 0 obj <> endobj 1582 0 obj <> endobj 1583 0 obj <> endobj 1584 0 obj <> endobj 1585 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1586 0 obj <>stream +hÞÌXÛrÛD¾÷SìåŠâ­ö$­.CI™2¥dS¦“r¡ÚëDŒ-Inšç€—à-ùÿ]­¬ƒ]Â3N-ÅÒþÇïûæävöü»kNnëY"I¢LBdL*;Û̾YΞ¿ä„“åfƉá\¸IYfH*c ²ÜÍbÂbß-W³9‹ãX’åÃ솾¾|I43äÅóÏž‘«*↺¿­òÝ®(oÉ«²±Õ&_Ùè—å÷ JzUšIIæœñD“å·^¢êdó£ìŸ«hÎS´9d±?4Eik'ìr9Ó*¦„̲Œ0eP’ó-,MÂspš 5x1ÁH÷|î"’¹8d*ÜG˸FáFjoây$Óô‘ˆ˜Gs ·i4܀͂ŠˆÃ§òßp$U)†çªÚûïÖ‡UC¢„¥ômäžXÿ}UÑì¥û£ëÜ1^B$) m1­-˜!´åÏ¢!)ñBIwýyîúÄ×þ©_ðk.2a÷ ˆ“6\ùü':/¶[³(nïšš,lmR2N?F"e’Ú5 h!œ +á¨0|$3“%K’©þÓUHŒA?ï7«^=rœJ‘S)pj·¯,`ƒÍ&| 3 RcW¸ä-±ä¨D§}fQÌcþXرÜ'3Žõ)ÃÂs,À½!íT +¨3D*Q@¨YfNá:‡7F»f{0Ý»¦šTšÇ£xÆI×,5çÅkÁ™IaÞl5¸\t„rOŸf§šuRåIÈŽK @ƒtÜŠBiöïzÎ å8Ø6 4NmåÅZ#iaÌÁÈæ€ ÇQ£Œºñ§ƒ a\N!ÀÇ’ó)¦¤Øú°ZÙºÞ¶Ì ;ˆÄÅÃÇÝÁð¢¡Ä%IÈ#ïå1LíÁª1„Tªº@OêÈu; (j’ûégä¼Ä•âŸÓOtºÌdø?O±üÎ%'ÇëDzÉ? *B†ܾ‚7è#‡í*à^8/±Ë5"“ÐáŒöžúÑ–ÅÜ/b\x°a¯ö%tôœ¸Ë«¯B’ã¼"²PLµ'× ýˆ[ ÁxÙÚ79^wv<5âÔ‹!} !ÐO˜L ä¬Ut{¦„äÜ0„õиþä€;«ÛÙÀ6çð›|7aÉ«×ÃtáöQ¿·«bSààM©Ø PLÆLö™I©XƒyÅæÑ ˆŸ1¸Ÿ˜ ª0ð|ŽÂT €~Ò$<£Ð( +í;]e@†wn-ujlü{°«Ðø¸ÕM$q³Ø{nUNeÝFw=®Ð]Ãîù|.“,uì,¢]ÕE[íÈG@£Pt ŸW¸‡º7‰~7òÿ +ÂüÏäy3öEòoŠ?®d‹¿yÀ›n€šÉ ¤¸ ÀEa}åúëù2Ì÷«E¨ŽJŸ,÷«OÆ-DŠ ÖÕcüEdR͉yèõÅ»ËÅr<¦ :e¦³ÐòÄš›ñêzNpÕä¨*éTM¨ƒie;NLEòøÃB·›–A—º–=¬ñ°qÁn¾Æ=æ؃p Z5[¨8Å*¬c0d“Ñ¡ûù¢H§³&ïŠÛ“vÝ÷…÷¹v6úK€ÉE·™ +endstream endobj 1587 0 obj <> endobj 1588 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1589 0 obj <>stream +hÞìX]s›F}ׯØGh¢ » ,ôÍMœÖ4ÎØg¦N°„$:’pÙñOê¿ì¹» ,§I›Ìô¡ãƒ€½gϹ÷‚`«É‹/[Õ“X1$,Lb¦Vå“åä‡ÙäÅkÁ›-'B²8ˆDó4aZ{ÆÞU¾Hxâ•«*Ûn‹ÝŠíš¼ZfóÜÿmö3\)ë*âJ±©à"ŽØ앵v¶ÅÁöûÊŸ +ÉC¯€vQî›b—×ÆØélK®cäó(f\ª4M²e²3 ››È™ËppÐÊÜDÊ ©!e¸&mö˜ˆ(Dœ¨ÈFøKæ«GÞ“ð§Nµ?•"AÈÒ“¾ÀÿÐ^O‘‡5¡ó®*íµÅ~Þ0?æÚ»òÍÜ^¯êŸ"^¯Ü¸&Û€à’2Ö„Å’¸Xhƒ(–?}ZJhf²î8úùÔñ3û6VÿÙ P1OþÀm@» ¡Ý€¯âód³±'ÅjÝÔì"¯sH@).¼;_j®¼|Á[þ; +ki(C¹Ÿ5ŒuÜ´Ñš¦,ÊÀ»|Ø5ÙGö;VGvuÊÓتNÈBs’,–F²×^±kØ&÷coyUdûMþ&{È«žŽðNì HN¯°`^îê†Í±bUß1WbëSƒæ2mqŽ,Î×Þ&ƒ&¼B#öÞfÛ¶¢DmEI4diV´Â{N™LܧqØ÷ß‹üŸ² qzU>§CS”»§éŠÀ;Ï>œãø|ÁÔ-ý·®J²}g·zíVßЕÉ*o ¹6çw¹ÙÛµù ¿— u4À÷ƒo]ÓZÆ$“iW*®½´G…^¶Úoó]SÙ†/Û~H­Öf²!!¶G®} +ž¦¥ʧڧwy›Ï‹e‘׬Yç¬)oYY±›²iÊ­-Jè^2¦Ái[Ê*ÓgW šSÂ{ðe€Ö$¼Š•Kcí®Èø0ú©MðGr°ÅeQ@1F-LJA@¶áèĆ3Lå–XgŽ³³%{ðEJcÇžÕæÑ«dÌ"`FÐÖ®Sf0þ²Ê×Xz!7¨%óvàÞÞÇ%(»½Ý×¥ñ\·Së‚&íD®µ‹wñˆ²+ íÇá„Ñ!ò$ÂÍF!kØ’:R0¡n_³.v.‹anœãruoqÁÌ9ó¨Þu›?F$Þ¡ £O„„…@†<–Qošs4B¶ÑqË$à÷ØÔƒkÀ)šû¢1`ŸbS5î0Câö‘°åiÂG“§Ð6Ö+=ŠþGÈ›ÎQ ´ð¾ή(áñ Ñ°AËä²G¹ÀLŒÞOçg¿ž¿¼ÅKì?<¬ÝD! =ìÀ4dö=[,®N/fg/[Ó1'FŽzH8ŒåïMùî[Ž¸H;ä”ÍjH^”Ù¸+žÖzÁÁêÊ2êÞHÐʱ7qä=¿¥­Ë6,«\)´t®o-=¦úh "­·Ë­Â3[RŽ Ýò®ÄýèÄMîN*÷ëb¾>T•­ØKúšä¥dO^x¾¬x q¼—°w”÷p$¥ËM@öÒQ¾ÕVÌS¸¡k›Üˆ +úB HܧiÍI›LrØœRº—0VÔ$,å*X—­ºGŠjÍIÕ‡·µ'RWþor¶B,˜B+4òòŒ^¾°EËÿØcëóH­¨årÀKÏ!ß:æËG +šª„»:¢>»ùØâFͺ>Í€­¢_kûÑ#m©°í;žyž³Ë¶£ôõ‚f' 1åñÁ¶j—¬XíJì6ªÎ ;n©4POwÔ’Ž>ÕPûœ4s…1[uçäaåM]nòu9&þrÌ?hQø™Yjì—5~"– •iAså­¨éh˜˜{Œ½QÒ"Ls±ÚûfíÎz4ƒ@i*½¸·÷óhÄû5_;´*úÔcæVs†ÑU¢˜Ä !`^ó‚é6y÷Ž‡ÃÄþô+R´IiMLÝK²­À±KË|ÙIì—à:BMñäq£;;íZ¿Óvt‹[Ý nÑfqÔÒ|ä8‰¾ÐEÔ¹ˆÆ.ˆjJï‚Q‘š£<¡ŽîküÞZÁSÁÚÍ!úeÓ5Œb*½ÞØ×ÃÒƒÍU«þf˜îAè)zMö +Uî bƒkç#Ñj)CSEµx0˜|þGAÍèo¿àðu¿Ü™óì­yyÀÈ#´G/o§³É_ ½Úðø +endstream endobj 1590 0 obj <> endobj 1591 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1592 0 obj <>stream +hÞÌWÛnÛF}×WLýD6Öz—w"胣¨[ç™qÑVEÀH+‰µ.IÙ1Š|Pÿ²gvIZr”¤mZ 6 R{93sæÌìJѼwòÝ…¢yÕ‹|ŠeBA‘/©Ô½YïIÖ;ùV‘¢lÖSIüã¡’X¤ žÒ£lÕ“@2ÀX6éõ…”Ò§ì¶÷‹s>ü–B‘Ðàdðè½*]•ˆÄÙÌË|µ*Ös:[׺œåíþš}S¾5 +ߧ¾* +){jƒ[ÝcÿXº}å‰À)€C£Í¶.Öº2`ì)"ŠD‘ðü4MI #™Ø"OÄQ; …ì̓¦Ä7“ˆ¹c$5<¤„É iÃgÏTÈ>âÅ­‹Ïs×DèÜ‘'•Ûñ»}O%ðÙs¦ƒ itÀ‘ó1rÇtyp—¿À_Î’‚,5ÕÚL…ï5ÈŽçüô§áh¯Vý: +âFGTÕy­M/ Í쀕DHÿ#—g§£×çÃ=3ð>eè˜ò5ô:­›TG6?ç'2U õC{ou}‹þˆq½nu†8 ^'¢.cq[PÈï œM—+†À ØXÀºB· ÑÄÚ6RŸïD¦—š7´ÓgBÌÝ´iû÷—K4›Ñvé¸fBÃwù꺩ö¯D{}:” ›r¿ƒækGƒlºË"uÌMB9Ëå†N[Ž +ý4µe¤¸Ž`RSµhW¸}ôR‡;ï$o _íêÀï"i5¸|›O˜¡Ø¹j¨Ó¦±IÔw×uú‘þ½ü Š¥žÝ‚ð¡o¯2lÙ?2¤ˆ“%|3Ý©­Í\ÊøÅÜË ð¨¡Þ3zB2ÞkæÉØXäÆý+Œ³Ù78 Ž Åkœ¬Os ×9m§c—~·ç¼H_¶$ßþžrààXÊo¥®·W2\M%wÝvÕÉ Nog°Ð“+*f÷ô°W•+šlpMê+ݾ•ï;fÓWßPC(kÜïÜ̾n¶˜›ƒƒSÎÆÎQfìU´Þph;ÂÅ!ƒ¼•ây~‡_/ÜâÌ8†mÜ0ôÿ{,5ËÒsutLG—ÃQv68=Ç{Ê™’xŠè˜Ð +w¨SÒP·<ÈîN<Ÿ§øs.zìâ³—£³Ÿ_¾ÈØI^í³“æC¤Y¦÷Ÿ¹ƒ<Á0T5¾È†£]u;ÿ&öE"›ãçÛµ µ¾ƒ‰›²ºæp×úö‹ññkÙ‚32†^0¸úRà‘Η-²ÍÑMY22ôò¥ØÃõ´á¼#üAù`³à~ËÝE>~ßþÞùS€]th +endstream endobj 1593 0 obj <> endobj 1594 0 obj <>/Border[0 0 0]/Rect[205.92 596.28 312.96 609.78]/Subtype/Link/Type/Annot>> endobj 1595 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1596 0 obj <>stream +hÞÌXÛŽÛ6}÷W òD55W¼éò˜&»AŠ4vE¶ŠM{UØr*ÉÙä“ú—!©›½.¶H dEÉá™sÎ WÀfvñòFÀ¦™% +Ò8% b¨íl=ûi1»¸ `±ž 1þÑ¥<Ï U1%,v³gá±Æg‹ålÎã8V°¸Ÿ}`¯/¯Àð ž_<úÞÖ‘ÈxÆö›ºØíÊj¯ªÖÖëbi£ß?ãRÊ/e¸R0\$/üŒºŸ[ sÿZGs!¹f%Î×ûC[V¶q“].f‰äi‚{J¸I€K•ç9pÑ\nwnÃî%î™K=y‰ÐʽÄ-÷€ä†ð¥ÎºÝS`ÂPˆx£Œð—"Ršöd,¢¹ÁÛ4šK‘aÈ’ÉHàÕøçøZ¤:%tÞÖ{ÿluX¶%F[ù_=»~÷ú^^¾¹¼~¶¸œÄ—s“›a„è6§œŸ0hZÜÑÎV-‡gàG†µgDndL£âÉbôé\®O,ËQ€=ŒæiŒ³ÙE#2;ÆmO¢@ÏH‡qzÉÑb¼@Ü/ ;>öû…²Abüy(k»‚²Ã-Ï’Ñ4è†nðºÜÚH ù0¿EB rõ,‹ +–µÅya·¯-´wø`_Ù£ÜÍ¥áBWÚG¨:Çúw¹ÀèÅ6Ù›ßÎxlN0§›Üoê +Öh¬•6§Ýæ®"™ÓÞÈy%«¡ùZµÅœÕí(ãzÄI…ZGJòãùŒòÔlÑ£¢-Ѽ[TÃ)³3.…ùÇDÊa¤‰qîQL‹»"%Í1~„ÆZxr¤ÏË~ð¤3žK09V$qŠu0y>TÈÁ j8Gë‰c2‚ùØã »ÒãàcÖ>fÕÉTçiªìËþÅ íuQmÅÆ¢:œS,x©muÜM`*óôT¿Ü£ˆÛ@Lær¤\“šµ%{eì Ö´ph¬x’´´w£Ë~™­]ßß´EÝ"®+¢:µMÁÕÄ +†MòST«£Å0ÖØœ_í²Z[+ž¸‚I»5zßm÷Ä*)TKÚañ¹Â8“cÍvÉ”0fñë!™!ZÅqÎ<˜*ýwl:ú^ˆùó‡ŒNf§¾Nãеò¡ `]Ýcäõ€ÄŽ*e/˜vÚŽ>>$fùh‘ÎËía…FúѶ÷®T[ëÞÊÌeÆ•É6öc»…ÉyÆ»®nÌKÕõïUJ1¥Ë}„©O©EÈPÐå¹Ù'»t IÁ“1”(‹-Ü—T‹É»¨cGKw£Ú·`#<$ìKÀ&»kÏc%ƒ½~ږ˲Ý~…•]c`«^ù=½ŽÙez¾|z1Nú! F™élƒ:§0Ôノ45VµmÞ›«¢¾¹±P§ÞOÈ“‡8áWFƒ[CsX.mÓ¬[îvÝ—¢s”óJwGG +…@f]Û$FtF‚Á¢©²±ŸLín܇iä„?£MK” ¾éÄ®¶“A£!PtŠú>VG|¤?@˜¡ÉŒölæ‘…£Ò'C)ƒ»Âg¤®ÌÙ¯.}RS•É±ŽQRašÆ9Š5ø›t+ðÌ«äyÝNRÿ©;è¿ ™‹ +endstream endobj 1597 0 obj <> endobj 1598 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1599 0 obj <>stream +hÞÌXÛrÛ8}×Wà‘܉¼€Ü7o¢d<å‰S²’©g ’8%‘’ŠãOÚ¿Ün\(€b2©ìì¥\%ÒÙÝ8èsºŒìfÏ_ß1²ëfYLD”“$ÏH‘Vζ³¿­fÏ_1ÂÈj;cœDð– ZäDÄ8YgX¡Qß­Ö³9¢(&«ÇÙ}p³xERš“Ï_üðyÛ†,§yÐìÚòx¬ê¹®{Ùn˵ ÿ±ú \ÅÚUJã˜ÌeYJV/µÅd°ÍζiÃ9ã4 *°C–Í©¯jÙ)c‹Õ,M +XQFÓŒPEAh’£%µ¶ŒS‘ÙßaÑ”'Þï€ B«aÍ"…¡ ðc’Ûåcd,Åá&Nuˆ?—aœÐ4x"öŸ±úü˜Ú€8£9™ ˆ2³,Ñð§ø¼:ôͲÚíûŽ,e'qLYð)ä‚ÆÜPK“‚«΀º—¬Ž‘ÊŠØêÏDBÅ™ÖQ¤Ò:ÂU¹}|_•ËÓA¾–õK¹-OÈÑÕogòžum%‚"uš –ÅÞ¹Û‘’ Hµ&M5˜ÑÙýËÅ««w7+Ï_B¹~Î +FÝ€Þõe/²îÉ6Œñp+”ZÒï%ùT•tWß7c4Ϳ÷ÝqíÜõÝ=Èuµ­`øzA;ç ³Âf¥ß—½Ž D-‚ˆøu¨¸áQ’*ƒ>Hd¡-­Ëš|”äÔÉ é²“5$‹!¸Ðz pü¿ áCC²‘ +(xvV9c¯Ý‹3ÆsäV ïŽh5Ž!X…ñA†,ÈŸ‘²ÞèÀÂ5Å-dF11Ìîôðpи•5ZÈA@ýÊ©`ŽñG»Ä +7—µ ó¸ yœŽëLjÇ… i[}yÚ *ÌÔþ‘îC+2(;RÕ +A,L~¸‚%2˜£äzKÔJaV8™qÆ4å ¶4?«®0õ¾@bŽz'u+ÿL£¨&Ž(Ç©¦„–_¹n”çÎ" §íbÔ•Ú™js‘¢|ÀÚnþ4.N2ÙÃÚª[}3#•*ÔÄ×ïM§?^%·ðuû¨qúhÇ&¨]8Ç…(ˆiJå ‘Ðð„fÜ­øÃppÇ@h 22fª_Sm›Tck‘tàòØ‚Çgé°¯e“ƒ5˜¶ &6Ms::ÀcBÇúUT>SœáäB°à¯~_ !û–NàÜ«?Þ.¯½}³ººÅ[-ˆÓ.ë<Ó@“dbˆX,W×/¬éŽœ}ŽÂO¸#!U\Ëéºcfñ ¬Ú“³‘Ø6+0µŽÉl%7‰{;Ì[­‘HÊ݃NM2³t ¾¯_×ì.µœiœªT7¬hÌ&¸#r£š†&ûj½?+Šjsnfg蟑S±/–c˜«óœŒ`=Ö§ÎK˜á¡•ÞA,0 µ!žIɲW³H‰ë'ШÃÎAÌ#¢‚Œs/Atfú©6$=Ÿ8ðÈ)¿ø¨áxp]7Ž›¬Œ¹:ë†3•´©{Næ‚tÜÙjâr%Ž3FžQšùlϪ]ÝÀÁNuòLØÀ`8ý—\lÝr +endstream endobj 1600 0 obj <> endobj 1601 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1602 0 obj <>stream +hÞìXÛ’›F}×WÌ#$Ö˜™xtìM*)çRkUR©MX4’p8€¼«OÊ_æô H‚Ý­¸Ê‰“‡ÔV –K_OwŸF°íâùWoÛv ­˜‰R§š©ˆµv±Y|±Z<ÿR0ÁV›…,Â"5LVéäQâð¤Þ«º¨šîÐÚ©è±Ù¤—S°Û_ï>j|0@ŒÁ½¶T\žÕŸ¼9Ö}~?‹Q¦=Ÿ ¢š|ªAƱ%ò[ÙPÌW¿~ü𧊈ˆ”¼ÂKESw=+ðÖ.o?cÓæe@äÉÃÄO+T\fP:pø.ßÛy]¤fÙà™ƒ J9Êt|©ÿd}°n·•"5¨¹ú¬^;õÁ}5‰  ùPªêc•?¥²ûݧôì“(!sOPyóΧ§Ÿ#æüÒ¥òŒÇJ™V~ü7•»"±ŽŒèõ3bV1Úù„_ÂIϘÌ+%ÍiX J^`gRXp<è¦U9ò¡“‘}x*j ®x'ò‰¦~xJQ¢ÃõÃÀBCÀ–—ÒÐÍÜBú3®²Ë.à:³ñ"Z¶ %V¼Pà”¤lmv’˜Skö¾Ì°(à3›ù‘L‡Í}ÅŽ»ß±ÙOð¨é„Œ}ϸT5EÞ—Ø›šÍð? D€¥¾œä£~1,OwD9¢´ÎµèÅtÖÝ…©µ°E&þõ)‰zJÍh¦ò.Ä`vNþÚÑ‘¹I3„þ•Ý¸éTXÚª—}³ôg¬#‘Î$òÔ\z:2 B`BY»ØÜ;ŽpdëÈë4„°¥$úb<–(9¬ý¬h-ò •À*ˆ+)ôc蜴¥Äê?:µODÓìð‹Ä™ªCáüâg I*ñ"q/3s„ÊỞìJQ0 Û¼ØÁUJ$á£%© ¼ø +‘¹¼Q ö æl¿Ë…œÒf¸’/ÈšmÊžÝ5 v= ÁAû¦ ˜‡å™yËo›C½îFì–”Ûn°wCË•3ZòDÍø+?}7AÛ’*Øck$x RMmTNh¾Ð1¨š¼‚•^ àF\ÂÆÌ–ÛÖºäÛw›{I¹ šäx¥ï´º.0¤m5~ÀÖFcGkïÀ-iß°Dþ3²Ë[7¬nz´“¦"œ¡ûÔ ²à·1kzè y ¾˜¯ßæTÔƒØm{[3ÿõHŒ2CçCöXõêYõ&gR×Kêþ…ýð’ô€êïßQöèÓ¢çpÔMšÖYƒÑÜIËQ¬9!üÉþ,k„•gØÒÒ€mË÷!R{(ŠÇ.³T_8¤§ÇïP…=ñbA°”­ùÀýt3ÿ% 0mr×8T\¬ÈœD\­ +0é·êŒ +endstream endobj 1603 0 obj <> endobj 1604 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1605 0 obj <>stream +hÞÌX]ã¶}÷¯`ó$%kŽHJ”„ “Yg‘bº f½»(â¢Ðز­®-9’¼3n‘”ÙsIJ¶lO IÑÀ–%ò~Ÿs/%Øjtóæ`«f¤‹ƒ„…‰f*`u>ZŽ¾™Žn¾L°ér$$ ð/‘Ä÷IMR†‡aÒ¹O–‰ˆlÄ…Š¬‰Î|òÈ;0á2öÇR$°YzÒøŒìýŽÄaLáù¡®ì½Å~Þ2_óØûà›'¹½_7…?†½^URt»ÅKJSÀÈ–ÄÙB"[~ñi+3+”õßg?_úþ•Ë~©ÿÇËL”æ …?p ´K€m~·›½x(Vë¶ay“Jqá}öeÌ•—/xW±4%¬ÝKT+‚²¶¹Âr‡<îê:°ÆoòåÓ‡"{Øoò7yyŸù2@ý|!¸¦²¤J®'åÜÞßT;>Ãô‘>HEsBôÖ⦃Õe@¤–•Ì‰‰¬À 0 zZ0Q6Fz“·w÷ß¿{ÿ0ñ§pIzºAu˜I{{Mk"²ˆÅ‰3Ç¡Sز~ÌÙ¾ÁþÜ—Ä0Ï>1^6o7Ö>óœ%ËβçÒA㣋¾»}x?Œhh¼:ÃÆŠK—ïÍäíäávz¾;îv»þaÑžW€Ýå1u'KÅetÍÐw‡²ÍžÏ*%Õ¶;Ð +=–”é‘Ø,M"~ô +D~“ûÚbêiŸ™gy…À , nóûçUÙ´ŒV®³úË.´Úš£ È´ó6²Õ +ghÞÈB{o³m>LÚH¬~eê ÙRžêïñÕþqÓaEw±–B_ª¯Híg«}•+ú&èøš ˜2’Pý.&Èÿ­ [ÒY”Í×¢]Ÿk?n:ÕžòP©ø·Qž=ÿjå3‡‡qDÍÂñw§áóÂ0¶Úšša]b@‘Ý@G³¢µCUoÊñ°`Kb¡8"¯h„®Þíòy±,Ð$N9u2­)ÅWîScbK_ÑÄ…¦ñ»c6žðBß,µy$¶­vÄÒUÛV[V-®ÏEÆ‹¢ŒƒñÀ?KªŽ*N ¸Å^ã4'“kÕ§Ð<î¤ÈA¨àjâ,T¢÷$¼ŒUÖvN€î1ÈÛ§=Û£ŸëÿÀöóÊÄô˜7ˆêbŒ¤hÔü1ìúc4·y›m&Ôö‰¦„È«\Ô1v§Ôß+S«£ÚíªÝŸ5Å?’¶Ôˆˈ:3Ðß°ºÆ0EéèäÐàÂv5}ŸN.F wAv¼2-‘<@¸*;_Âΰ¼zy¶@£u .±q@½è@ÌCÙ×âÕê‘綇ç=4+§š³©Kò*/Az ‚—µEå橱L «ƒ®tèB0¯9¹_²ùºª‡µæ…¹‘U-mNm§¼Ì©ÖN«lMͤžõÈãcŽ`l³çb[üÃæi_(ê +"I@é|ߺRwÞƧcq}¢bã9æÌeÑÒ¨òÀ-#]2˜Í³ §.Žc‡²bŒ®‡ GN`\ŒË‹RK\¾¿ßQB€¸¬vôkýov®c›öÛíDŒiOH->`«AäÊUî€pu:J'!N!?a|FŸÖÅ|mÂh„™‘2!’I@2–‰/£Ÿ8Ë`}U/òºË“„¼!ŠÅ$¥óuéK*g”>Ý#ƒ6\F÷6DÜ,Ûí6hA€;ܧ0‘µ3Iz¥¸¤tŅј`«À½+6.[`©«·Æ'¯2Hc+¼¹‚-àÚGa{yÖš£FF`˜Á‘º¶:#“å @®•[Ïò¢›ŒUBÃëÙ«yÖèˆæ6yÓ\1gP­ô‚!ºfε¢í͹8á›l?: §øðÚ'åúÛÚW\¬Êª&ÊÂɦCÂp¬¿rà•8»ëÐ éÇ6àz'Ft†”Ú“.Hü q*2È&ÏÙv·É›sÖ•A=wÚíƒáÊ™ˆ°@®=óâõ»©,>ÑHƒƒ V”FÏècͺ[A#flžÙZ„õr˜pØyp÷øiŠ-Ãù-ž¸¢¾;9ª°ê,æULg¥3nv¯gø‡°ç˜-AÂkñK{|hâÅÁK`BUÒFýìèõ¹ÀÉÉÚþÍ̸r—™˜|Â}òåo˜q^Ëâ}“ׯ3Ün3¶_Ì|öÏ—Îd Ž¥tUçÍ×Ýk9ÉC¡Ž«nnVÝ­óù'V,1'«?ð0_ÕÔ_O^ë µ,iÿÌ3›þðGær<8ó{3§_º-æí‘Çv5,\μ/¦F_ÃÊŠ\;‘@@xt6­A2¨ðNP„æ#â.{uAÃ6VñÙ¬übæÝ-sy;QZçí¾.™è—˜‡?S½L¦£ 06ˆR{ +endstream endobj 1606 0 obj <> endobj 1607 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1608 0 obj <>stream +hÞÌTÛnÓ@}÷WŒòä¥ñd/öz­Š‡ºm ½Èµ‚A(j)u$ÇiÕ>ˆ¿dví¤Š© rÙÝÌNÎœ93cs¯wr%`¾ö´‚˜Å¡*¼™÷*÷zÇä3OHàô¦M˜±âÈ%ä·'ä!Ùòk/@ι‚üÞ{ïÒcˆÐÀ 788€ËŠ ƒÆ_Í«éíí¢œÃ°¬‹j6½.؇ü5…RM¨•‚@ ÐäG b¸ÃØo+‰¡¿ ÈV›zQk–æž–kÊIc¤¥J’04Ëeçv—”3Êð›K’Ä:(wI)ïIœ Ðeh¶Ù[b"²é ¢†áÙ”©#ÿ$,ˆè³@ +C”¥/™ 5jì´‰8Œ­:—Õª±Ýl®k`cÌÜMÑØ«õ‚Ä×_•V\—-·rI©c«—åbZ.¶@–Ëfÿj‰ÄЀÂnÿîçÏößtû;¨ÿ±›+€Òh¬ü¼-×mDØàYbö—Ëæ-æŸê5dź P +…ÇdŒÊ/npÛÿm ÇÒµ°¦É}ꨙ´Ýô³=$ +´¦á ‡šK7x¼M‚^ ˜öá%,‹ÙýU=­êñbšm–YOŠrâwÆÃþIz.dgÂ÷º“Ûq9jQ§)ùÞ|ÌÒ«‰O˜[ßüÅSqÚ„?š’õ¡¨(Ιèt¡3N³|8è:dïGÑ‘ÐÃîžœ¹IïEÚKëYIKèô"¾»8Ïûd‘»Ï?ç£l%¬BGãV²«P»ì¡ÑS‰¡ö#Ô]Ðh)£ü!ârJË›-²>ٿƦæ±zQ{*jòÝT%ðÃÏÛnÿ*À„X{ +endstream endobj 1609 0 obj <> endobj 1610 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1611 0 obj <>stream +hÞÌSMkÜ0½ëWÌQ"xV£o›4)--„i¥‡eãu Ù]°7-ýIý—I»R(ôÐB1XòŒüæ½7‚A,ÞÜ ³¢NàR«aêÅF\vbqC@ÐmÐüðB)b› ZÚ@·šQP;ŽukÑ ÖÚB÷M|–ï¯oÀc‚«ÅÕÅÜNŠ&¹¦Õv;îx»;ôÓfµîÕ—î—²µ”Gk¡!¤à¡{]Ý›ž±?Mª!ƒNŽŒËýÓaÜõs»î„w-+ +è ±mÛº”‘Š¶`0†SžE£q/òìI¶Ä–$k>;ÒZà¤K'ù™ùÌ‘7ÖWŠVÊ:ôò;Mªñ¼ª1”˜³‘F¿}]ÌöÜNû»Z@Œò£*™¾Æ§yT ó•û]v·ÈÕÙ/cB̆e.éÈ%w(sù¡ò¯™H„ + +çõ—Ïß­xìß þÇÇJlÀ”í×Çèpl¹Ú€¿RóÕãcÝ,Çáá0òŸ{žk‘äWe"ZÙßãiŽW8šr…n¹Ã?m7Éé +endstream endobj 1612 0 obj <> endobj 1613 0 obj <> endobj 1614 0 obj <> endobj 1615 0 obj <> endobj 1616 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1617 0 obj <>stream +hÞÌWÝnÛ6vé§à%ÕÖ ÿDJèU—ÆE‡ëZc–ìBµi[ƒmy’Ò4}í%v³gÜ9$%KNÒuÅ BZ"Ïïw¾s$Èzröâ­ ëfb±<#:3DqR»Éjòõ|r6Dùj"$áð‹È,Ë3bg\’ùnÂA +ãžÍ“)ãœ+2¿™\ÒW3’²ŒœŸ?~L^׉ÈXF«u]ìvå~M^î[W¯Š…K~ž3¹˜OÀ´Co†Èf¨`Fî­È œÒY§uŠµÃF¥Aù·E¢4Ké-‘\$Ó¶6™J‘ É$•‰€ÿiÿ\XmѸ×už-¯-I ³ô‡Ä¿qáyÝ”ÉÔÀÝj¾yË9™‚4i,™?GDmÁø -$x ±$%ýzòó¡õ3ý7RÿÇÇ|”a†ŸÇp tHÀ¿¢óÙv6oÊõ¦mÈ׸:™*Å}ŸHËuKv‚e+=– Κœ#šaIeŽÅd ï0ÍÑŽÖ<ç¿ Ä_AfIP¨ÑKOC•üøˆìá¸Í%ƒêCmSØû7ð"Úb¤ì®uµÅãˆ`ŽU'XJòo¿èLóìKt¦@gšëûuBˆ¤ö‘ã62 ã"·=Ëøâò$s^íµk·$³rëÈ›êº-÷®ÁÀõÔqd0T®u”éEuä!=yÐùÆ‘óbéö@M "g!Q¸ +à—T!Dêë³ô'ž°¤†¨d'zD$Fòª|l¨hø‘8êâÃbSì׎Ì%(p¦øJÒü§Ep.³y@9Š‹Ò®0W „L®É(L@$§åÒ5¤ W9“æx•‹Ž¢b…€Ç«D>¼r@ôv b wô©ºŽ=‚u°j*3f4r °½|9n´:¸= +*öK²ØV îÇ´½ºðá3Lˆ‘º’+gdùm¡™¡ BÃ4%­Æ-ìÜåy:ÕÛ#BŠ‹Ú‘kÔ\î›Gªi!2i„ gZG)ƒT¯Ð™¶T8Cýõ© ¤>°D|¼)z?ÖÀòN]a\ÜX.KG^è§>kôèt»Œô>ùXBÂåðn×” Â>–+¤,‰™”ÉÚ­¯·EM°œúËã,ÒìÙÌÆ.Œ…*6Ø‹sÕ}˜¾z ü2;8t‹nÝêÅOåá»\`<R`­?s0ã‘Ûé ÚRíYf,6v_­úP¬–Z$-Sûwî˜Å}¾;ýù#›\°˜RZ¸‘ÒùOplþ^ÆlFà¶ú”o†©SjÌ‚_䤶ÿÀÃpØkô L/>»ÃÖ 2¥qÖÓ†ù g [Âû(‘lï³ß‚ýY´¿@úïÅøzÀAY…¨GNt P6ïÛJ¬OpOw#^nH1&©P òeäåª#WÈqvZj°SVÙSå…Þ”í†ì+â꺪c¡=.› M±,V®éÄeÝ8ëÜ^û>t¸G¨Š6ªGkÒVG†Ö*S´è1$bÚ Î¸0Å ±( ¶h¥lœ x“=·D„п½Ý·Å‡ÇÝAžâˆè˜=(–Yb(†i¿+&ñ|_ Zäê–‰» + Xžè‡,òL÷SlP@¯’§!œâK?_ zw¬\Òg8^@s\_ïܾmÆFAúd~·5ë–r;î?Оr-Òn¶=õ˜ñƒ[”«Ò7!Ë%LMJÝA1º®ùŠòE(ź`±3F#§0ì(å-5Q÷ ÂwÕò!KånÉ#¾–n`¶I¡Xn:åÞöPÛøœÅ‘2Ô£ÅIŽßñ?0ÅÑ‘†4›êz»$ïÂô2œ¸l×ûyîÛ€ý¶·OÃô \ôÉôÆ žìJÕÕÎwpø ®½Õ uŠß¶¤ñ~Þ’1º ƒÞ™d~«?‰âÑQ¯’vYy˜…JÏí!–ðù‘f_›%œ¢·‡Ö%õׇÀ:áa˜Ï<‡> endobj 1619 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1620 0 obj <>stream +hÞÌVínÛ6ý笠+0€ljF¤$JB—Ùº5H½ XT ŠMeÚlÉ ä¦Ý°—hû{ËÝKJþÈÇ°0°e’º÷ÜsϹŒ„ëÑñ‹×®Û‘! RˆR aÖŒÊÑ—³ÑñT‚„Y9’ +üÃ/™&"K! (˜­FFA„k³ùh,‚ av3ºd/O§‹&Ç“£#8·\¦"e͵-V«ª¾†³º3¶,憿™}…©BŸJ‰4ƒ±RÇ0{>¢€ŠBÓƒ¤È.ð¤Y­­i[³€iµ4pÑlºª6-Ÿý2:â(Ãz´ˆ5fY"Jƒ ò•i%=ìcÉBEûȺM¬xËGæXÈ7£t(žj–q1Œ}ñß<ŒDÌÞƒ +$Çø˜ð±’©TB1Å%~Æ~=åc™D ‘sn¿¶ØÌ;àZ$ì{îvŒ_·mÅLj—55që˜ ˆ-¥tÒÓ%Ó.å±üÉéU’€ +Ûï[?úþ‡Çþ›¨ÿãc®¡)Ñ zÕ}däð¯ä|¶\ú‡‹êúç®… ÓËÇa(${ËU"BfÂBôN”“°Fãþ§ñ NôžŸª"pŽ{ý¾îŠwä­ãiìßÎD¦½è"ÄZ„EÀ—ÑPøò%«ê–†kV¾ø±ZO–MkræIf&åd¥çxxiðÔ´ÂÓhè~(hŸ Á¡u†cÏð%+Ñ íNßíßé¢ý4âºâ!±œÃS_Ƚ4P䕯¿Ïñ W("v½Y™ºkq¡÷ÔnREYèr” á¸4ýX“"Ëbª7RtØeˆtÂ^¯Í¼*+ÓB릢ñ]ÝÏæ ÃÙâ€ÙêL#wš›‰èvÉZŽ8 +™õ\j\8oDƆBëŽ ÷„dÄJ ­ûŽJ¹•Ã%;}W¬ÖK!-·¦÷›V<°9Ôªz¨3¬ªä!f`8ó(ÒrÙpãïº ÇF³w|Œ[”ÍÀ¦EjˆÃ>ËH(ÏI°S¬ÓRµ~µ6õA´Ðþì= õTŽÃz{Ö ù n"d¶ëŒôØþV¢4e›`ŒÅ)ïÝsãýÁ¡´'Éu Õ0ßÝvÔP¢)bâwéP„êÀ‘}ÿ° {V£Ñª.÷Žè/ïJçƲ±£ÃœÁ&œ@ðÔeÇç/p±z³:«éò–ŽrŽë𻋦D ¬ÐÙµ7¸Å±…gŒË{_ÚãcpMÃ8^øÛÊñÚ§U§hGÛÖ œ‚t¸q?v7â6kUbX a>=aä8ž?Á¹ô¼yí§œ#%''t>À'_Ži¨ƒÀåÚÒ°ª»2gm‡8ìx4i6ËÁÿÐù–WõzÓyÔpùóöCž×ž€ËÝ'ÆõîÍÀÇì1ƶ¦ÛàªEjÛ ñNñì’Ô>{8go›j‘sWfiOëâji.©Ózn߯)³Yìšá’cÎꪣÖËê7ã¨FâàƺUc|kÌÂéú +›T,]xR§m;q§ $î^ÒmWt›ÕD#cÞP&ì:1À¢ªë¾B0ñ­ÏNH?üôêkTÚ]Ù2òk{*CI!„žbƒ2={yú8ç%ö†ÚºkéÂóˆëx‘}^tÅiªuê~Ü}’ùx±1a·u WÅ> endobj 1622 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1623 0 obj <>stream +hÞÌSMÓ0½ûWÌÑÖ*S$¶£=AÙ"H«nĥˡjÝÔ&(iAöñ/ÛÍ"ö°H(R<™™ÌÌ{~£`Ïf¯ïìGf 8é¡ôŒ„!°{Ù°ÙB‚fÇ”IÊ;¬=8#QjhŽLR”%ùš +PJi ùÆVüÝÍ*ô0ŸÍ¯®àvÊ£çý~Xm·‡7Ý) »õ&ˆÍ[jer+¾†B¡²4¯X,¨céh¨X9ž÷Ç/CÇ°…E{°ìϧ¶ £h>³›†YÎ"‹•Ô¦®kÀÒKYfl n +bÔåoA"$&˜$ÀtÔ‰„(Xú {„¬ªË„¦ÊØ߯…)±âßAK%ŠŠL' +­¼Ò¨¹ŠÞUö×¢P®t‘›Û¡Ï¾íysaÑñ"EBöc+ +š—÷]¤6'#YZ[waKù‰-gù!â¯q¹(<ž|þí|bÚ¿©ú§¥ 0}¤_Nrµ— Pe¾€géùâpÈƲÝ:° cDa *þUh‡†‡-¦Hÿ ;$lio­t•÷¬ÆÚf=Gƒ’--)'YËB¦}{ˆK•dVEl $­ ÅW|·9ôc–ßó­à½¸žDiPR[Ê^ñ!œÎCGI ¯¦ +0ÛÑëu +endstream endobj 1624 0 obj <> endobj 1625 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1626 0 obj <>stream +hÞÌSMoÛ0 ½ëWðh¡0#J²$·¬Vl@‘ +»=‰âyHâÁN[ô'í_NI ÐC Lš”ù)‚ŽÍ>ßt3 +¬p %` lË>z6[ø-# ">ѳØ:°J à÷LD:ÆüšÕ(„PàÙmõõr :˜Ïæp=rr誡Wû}èàËáÆíjø¿Š¥T)%ѵP’iÀb P&èäPBÎÀóaÿk Ó6°èw–Ãý±?„‰ûŸìÒ³F·‘ÁÆJÕ¶- vBèÂÌH´æœ”Qê¿òQ‘$ˆÊÉÈøY6«ÐBLjw&Ÿ8SsjQ5…ü·W›ê ¤ ^7ѵ¼–äH¢¬$§ø6%.xMVÛ$Îõ8”Øæ~}nÐVßy΄§ž×±ßj8$m³r"©%¥±'¹Èå’¥—ß<ýš±P@áÙþóù?ûÂcoƒúŽå(ƒ.É/ÎûjN ]ð*5?ìvÅYöÝãË0…‘×J!U\ZTUØ`n(^€Ó +[™WØÄ‹›wøXçÊí +endstream endobj 1627 0 obj <> endobj 1628 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1629 0 obj <>stream +hÞÌX]ÛÆ}ׯ˜G21gç‹2o‰í-Z¤ë¨-gQÐ¥e+‘’êzÑöõ¥¿±çÎ %’ZÇF‘… ’šÞ{çÜsÏ®dûÕÍo¾—l߯2ͬșÉ3¦ëªÕnõÍzus+™dëÝJ*&ð7™[^äÌjÁ…bëãJÀ +cëÍ*áBÍÖ«wÑ·¯oYÊsöòæå—_²7],sžGí¾+Ǻٳß6CÕíÊMß­·z½^!ŠCg. ™OÂÐ>ŒÂEQ0¬2ùèœ|Ê”¼ãA§ÞùïËXžFOL ')mœ(™KÅU¤b‰kæÇ1-­±Ü›®õcÛÓf`qÆmô§ØÍT~¼ëë8ÉðnÛÐÞ\ä‚%°¦2ËÖ¯(™‡XŠåß1½JXæ²ó}ñóc÷Ï\öëXý?^æ 3žü"$@d!Òøü">¿>üÃÛz?ôìmÕW]œhÍeô÷XY®£jË\¶Êq9Cá\ÕxNlÆ-US–‰‘Ó‚v (ú(×%‹?ÁfÍÈhf• N|•üù Ö`¹-Gõ‘·Ïn!–L©ñµ±¶D˜‚Uä)“´ÈÍþaâ3-òÿÅgš‹øL ó¼O@¤ŒC7 +NØ 4\ÈbL­°Ò˜ÛúP±—íñ¡ìêuùÇ¡>ÔÃÁvŽ‹~‘kc‚E'W£t('ÑúÖÊmÕ@˜`¢à>Mt—P—Ô@‚ðsôZ9ÑHLò…¸ømýR¨£äQõúÃæ¾lö»µŒ @&¢)qÊýHÛü1@«s “–›4õŒOΔwO#ç e2åäLxÕÛªgö¶‹µÂ(ùÁðá€U¿I’O:¬Ÿi ./²Da3&%­“öìVŸÝ­Û¸<@QêLR†vÈPKƒâáØf¼ÍK{ÑD‡ž{rúÄ3Ÿö°=õ¡Úmñ¿Þí>ža“]ÒkFÆ„¶ä™B`<ÆR‚ÖÅØvìÕ*+›-Б– GIyh©ö©è¿#z‰ð¦Œºà€ ªŽxÔ³÷¼‘xTUCY8z¡H¼uY:ª— +˜j0ý¦Ú”§¾raRd—8}„HçEûäø6aæ2R6pÏ Q)”ªBç“Ž_(ùè)Æv(»=Æ3<¿@æ0îˆR”†ÖË­žð-ýdBR^S†ŽÛRE èH¶GOÕ¶T•›{¶i›~ a‹a׊=s.Õ‚‚RùͽÝ]×Y €ˆàѱÁ5uH8CÖÁ-®Y¬¼ª´§áá48ŒYÝx0ÜÖH»ïODàf8>Ì8çe&32d,éªÍàx¤è¤n<¦ŒThÅ(äS.¹µÓä ’»˜'(æ„bÏN=•ä9¹hf= žŽvç-Ì–XN|ISÒ#F%ÅK¬×"ú*p$ &K… L6^¬£»¬Ûæ/÷¯Œ¶˜ÂÝøé`Í o°”zK§÷ÁØÌNÆÍçÙù„•çlè¹ ÛA1Îùœ’ëâláñ*ŠtŒñÇPÕ±j†EÙä³8œbˆQ^(.Ìwóë%9Õ’sŸ[ c!ÉE}‚. 뉧F9½Sбþ¢‚+ìL+Ç«(t«¿. ðWÊë +º +q^AöÜl²KÛSûÒ`(iqãrDÁ3߇FžãcÅÊϯ•c¸÷:Q¹Ö€WÐ.2‚¦}Ó¤%_‡ñc^øËXQ‹{êIli->\h81Q7ô¥+x.Òg•åæÐfåfs„ $7i´ybíîyU¶S¶<ƒ ¾ðn’cD#<†ž6 ±7}Ý›:6ÚYekqшè»v¨¾b §…YŠž2>Î~”î#êÄŽ±“ø—~`ýCµ©ËÊI ʉÿôþ™-›Ñù¸cÙF ë(]uÅÆd{møò‘áÚYô‚Í‹Ü\<¢U7t@ý®Vî\áG¤ó¶è´™ùÓ¦¹f4NbвJçêâQýþ©Ê3Å*ècÅà‰R¦à:O• í]Ú8óeè>M9õ{úû€ ?X¼Â¢aÙ?±ŠÃþÅæ=týeØ£EˆßÆ n”gºË9{‘lkìUÓ8›L‚IŸt¡>Ëų–Ñ»¤]’؈âÒŒÇÐ3®"ø¨ó‹ù;ÎL¹ÑÓàø¡îç¾ W2+®|?Ç’„ÿ9Çéì¥+ÇFk;Ïí»ä§S½ùr{çÓŠlbpë_ÁZRïhPUoêæõ‡¡+ïÆ¥³Ù·í#Et7±sþð_b†L +endstream endobj 1630 0 obj <> endobj 1631 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1632 0 obj <>stream +hÞÌXÛŽÛ6}÷WðQj!F¼ˆ”ò–f7EŠ6 6N[ èƒbÓ¶Z[r%¹»úCýËÎÔÕÞdÑ PìÂ’%™œ™3çÌŒÙ.ž}ýž‘m³P‚è8%2UDĤ6‹Íâ«åâÙ+FYnŒ“þàÀRM³”hÓ˜“åaÃ*4–pm¹ZD4ŽcA–÷‹Ÿ‚oo_‘„¦äå³—_~IÞÕ!KiTÛ:?ŠrK^—­©7ùÊ„?/¿­„ÛJP­1ÊTB–7nɇž k¿*ö†¼¬Ǽ#ÆiMU’m±/Ú³]ôv¹Hdž)š(B¹È²ŒP™Æ±t>*Nµêîƒó”ËÉ}ˆ †FØ›à{™ÌÆ##pS¦]ÐTÖ™*¼©ßå¡`Ü™ð˜…Q§:Œ8KÁdðÁ§r×9ø¡¥Æ0½«+wm}Zµ$TT߇öŽq×ë¦#°7—!ÊÖÝÃƹÒ7´%õ¶ RhËŸ!þ ÑÄ-JúãìëcÇ'>ö߬ú?~Ì M1ü± V&ÿÊž/ö{wrWlwmCîLc€BPürME`Ö´#€OaÍm ++ ð'Ø *­FÌŽz/bçÁ à± 2Øž¦lÏÝÄ- È;ÞRÔÕ"ˆÖáò—Ñ^”+ŸØÞ&î®'?ÕÂr_òžúÂëŠâÚYð¡1 iw†lËņ™Z‘ÐL¶°†ëb³™lÅ©tÙ]X¿Kæ‘:ÖÕ×Ï‚:É ò>¤­ÈÊjŽ±6l@„²Á¨gA…Ô$wö°„¢p {ènæ²9äû½©IcZRmˆ5ÑÁW›rešIøB x ›[7â‚Š‰Dz†¯úmpñ¼v‘ªÜŸÁBH +75ùðæõä¸ÏÛéuÐ%Èàà:Ø?«4Ä'f1†²,±pëÚ.ÖÑîï@Î’)xâisgÚ»%Ù%@s.ÛüäåÚG<¦Izq,>&€ÜŸ>5ùÖ`L8ÄP\pê#&—LzËÁ±½Ù¬ážJ‰Åà!í—œ|5bq @ÎbÈ3*ø„2<Ó£0Û²ªÍ»¢¼}hë|²¥Ç”qz¥Â{ûÚþ¼ø„ åâ|ÁÁ“ ¢P3l¦º’ìñ ÞL¡SÉ +¥=…š6o• R”6ÀG8–ùÁ`feå®pÈAÕ磵ºlNóT!}>¯òÒåôG@š5¹ß™r Ï¥†à}¸¦“[‘h',“Ÿ–ñZê­»êþ :ø°º`±lF j?˜Æ‚{Œ•µ"ƒkžNy—gÆa5tCÂ:6u!KOÛïÞþ03XgÉ8x×Û]öæÖ[ +ýP÷KÞÁׇWBÄiÈᱡêñK©fsüXŸ]-¸L4>Åî’úÞ€It4a»Z-Õr’L—Ù(jE‰-(¢Í&z§)“Éã‚í›9Ù«·sñýѬŠMáóaSÔMkÑ4Í®P.f|è‹«ºwÌÓlæWFÓôInñG²x¤Ô|ÒaÎìžYc=¦CRÄSÏGÒ¨¾Þínäçêê™ /‹QÔ AÊMþ ¨÷*E³+8ÃKÒL<ê·×ºÁq "Ø\Ðü çA_V•Ó9È|–Ì™<¤éŒ¾³Ú<Õ–?úRž€Zì²ÿòâT‘‰¢³>zðÁÒ¶~ªò6¶—=Y?êoOíñÔzí2ÍiçÐÏàWÀÒ£.Ä8Ð6i½ôyRºñ ð·¥ÝÇsía@—¿nɱT$q2êToŒmnèÜ"<€YÏç£fF<õˆÌ]räëZû‰(ÆNäôº³~USº(&ƒ½ ŒÓò1è˜C²Ïª.Â$>tD@§3€úôôCè2d@±½;VÐÄ£{5äAjÚ´}*p4·ý]âfìJÞr_̺€‚àÛað¾¬ÉÇc~#Èçk £J^Òï‘.k¬îjF¿®ÏËCà«í /ãÓ7 +½Bt%tÈ8 ź¨Í +"¹ƒl<‡Yf©7IÂåÿ,ë®6îÀâØŽÛ”;´°!±hac>CË2Ä‚ñTó E©¯Õ«S]cÑœä˜繤h*õXV'ûÛ©XýúÄ +a¥8µ¿ëÇ· =$åW„øãEˆO%A7²I;²IÙ¤ÙŽ¦¶£•Än_.·:x€‰Íßµ¿h ùÇÍ‚²ÊÔAß 5_ƒÙ±ÙžÁ䌨©¥ü°ð²Ð§ÅíC~8îC ËÏÞwM†ï ÖRn…®¬»—I>I—;;¶`Ø÷C<Øï+×UÝcÁ0!Ç¢ó€$ l b´ëž@jpl¥}» W•˜×b •rÛUV]ñHmk0’Z>Bj>{“Ï2{4?¨œ£¹IÈÀ'Bâé ΋Y‡Ø.ä¬Ãgˆ¦½GÅømMµ2õœt¯Hþ`ÁòÖ +endstream endobj 1633 0 obj <> endobj 1634 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1635 0 obj <>stream +hÞÌUo›HýŸO1Rÿ«Øì.°@TU"˜Ø®b;Ť×èzªh¼8œli”ÔoÙÙìü¸TwR+U–Ìòf÷í›736ƒµq4^2X7†pÀ§¸‡B-Â8ÉŒ£S ²Â`(~ðÁŸ„ø%”C¶5(²ê"–]6¡”:Ý™gÉ)x$€ø(~ýÎk‹$0wë:ßnËj Óª•u‘_Iëïì^åtW9Ä÷=°aƒlÔQzŠÜ;pŸ– ñn{“×–Í8ñ̲ÙUpÑ–›²½×¤IfN|¹ â Ü ÃˆPêvYêÄus'Ü}DkÔG1õ½1¡¶# ºÁà‚RÊ¥N¯t–[Ž‹ÚîSfÙ.}Ëæ,@ÅÜäÃoÑá¦á»¾ré¼ÞuØêöªKßü`éˆìðº)-õš˜1š¬³¥Ê5Î…¯lSZ‚^‹*”ÒòÍRG•:RØ?Ÿ¼¾ôüÛ~ ëo¼MÀ$PöÓ¾Tô`nW€Ÿrg´Ùt‹´\_· ¤²‘8ŽC˜ùÕâ>qL¹"Cÿ÷-ìsÝÂ'ø0Ü^7q! E×Ïjø |$qÃMq,0Ú%ñ*»–På–0·²]-¾·w;PC‰hsÙ ˜·p'k W8¢çõ J÷©§Ì!ÝPî YtFf`à­ðçWË6oå²Âü7eÓÊÜV+YC„èj…¯úêb‡(”+2Íô嶅j×*¼—ËN†ÌH1[Ù?ƒ³è2Iq/Ì,Ï£x:%b8€ƒï¹ýŒýHÜHndûLαÙëcÏôÙZ bã4öµè1~|ðçÍAoú«2g“l’&ËÉâl¤PJ\ïmá¥í³é|:»˜ÅpøsŠè(›þ?(W|Wk© +ùæ.¿o°%ª6/+ìD±sí™2ìXwSƒðAÞ@‰ß77Rõ\Ýh_ö}D‡>ê먬* Gk5QÏ¢øu,»âßZ3žDóq¢<8~dÀ,ŠÓ…2`:ÿðù’ä½ZÁòr6C4ÉÒKø—†tÌ´mûAC=aˆÏ¢åâEš@¢|{2„ñu= +/s.Òéx:‡O¦m²~pxq²„sÜaõðˆ‡5àà‘îEÍ`€ÿþ~Y¾ 0¥5ïÞ +endstream endobj 1636 0 obj <> endobj 1637 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1638 0 obj <>stream +hÞÌSMkã0½ëWÌÑ¢x¢oÉÇ6M–-]Y·—ÒCH×b»-ùIû/wd9]v¡ÐCŠÁ’gä7ï½ÑH¨ÙäÛO uÇœ/˜à@ h+¶a%›Ì%H(7L*ôÐ"ƒÇ"€×…‚rÇ¡ 0+×,G!„†ò•Ýe׳9X 0LÏÎ`Ñr0d‡º]ív;†ïû¾j7«uÅïË+*¥S)Þ[È%Jg¡¼L6‚ÓFÙ?Øóf[Áô°{Zµ<— +mÖt‡=ÜôͶéè¬d̡֤u€JEh‚&it +½;åI<*óWž¼‰Öè!IÚßœ)? + ¤ '"Uy¢ªGª?V\"w%$Ï-m=Ï• DYeŠKz»7¤ÃmZ´‡{x^÷Àúì–™*ÅÛ®á9ñÍH2¹<ÈÑ6¥œ¾E.aä;¹üâñ×HÄC…·õŸÏ÷Öû?¨_øØÐí0DûÅØáÆH“ð)5Ï·Û´Y6õcßÁ²ê*­Qf/\yÔYõ€§¯°WÃv4ÂÃþ-À?Ì× +endstream endobj 1639 0 obj <> endobj 1640 0 obj <> endobj 1641 0 obj <> endobj 1642 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1643 0 obj <>stream +hÞÌVÛnÛFúȯ$/\\í…—eSH})\8iê²õƒZ\J,$R%©Êþ¤¼ô;Ë$+V-PàÒܳ3gçrFfÎäûŸ%Ì'Ô ¾ A ¨­“;ß%ÎäB‚„$w¤¸HñØ@¤ +’¥#Ð +>~K¦ŽÇ…’së^_@À œNN_½‚÷5“†·šÕérY”3¸,[[çéÔ²ÉÎyâ â¡ÃŽ†4{4tO#îXÄ€(ߌÎɧ È;¾è wþ6eÚçûJHæø1OI#W®bŸaÿ=`žŒüˆÈ½¯«þ[¶ž¶ÀB¹¿²nÇößë¦`^ˆg«’îÖ1à¡5Fœi.âò‘ÑQ"Ao¶ëÁ¿ÇÖ/„ý7VÿÇ°.:ä†Â/†ˆpH€ôûü+>ß,ýËu1›· \ÛÆÖÌÓšK÷¦"®]›ñƒZŽTWË!6Î'=…uNÕŒK 45SŠ±¦Ý@{÷ K~#‹¿£ÍÈhè jA2ìõ]rs%£Xqì>òæá{·ƒ—P©ñØØ[bØÁÆÔu’ Ôíþ´ç3ˆÍ?ñqÄgûÏûÄ)¿‹ .DNDƒÒp!ãmjeÒ˜k›f¶†´Ìà¦.PSàü!]®¶¡Èmµc'aäÝ÷££b=)˜d^4®V¶ÌŠ˜Ve›e–¡êEîó0Ù½ ¨rhçN‘C9HYÌûÌÒª•ÏÀG Ôr›Ø?‰ÞŽ•Ö’‡æ™:и*îQIJRJÕGjöˆžÎÓrfá‚¢È2|à6V¥r—¬C·pGáºcè.`W‹BǤ`²Ó¯NLG-í]R`7hL—¢Ëåöe>¹ˆY¦Lö7Æ +¯ˆ.ûÕ‘\˜h{û«ÂÝ ò‹Úqß(ª)B„ÀCA)©ïMÞXÓþSrd åP 8™VéÌRò5]­Ä¬q”›Þ é®ïËmìÇŠ?>= ï Þƒ¹àXDe̵?ðãzë¾,òÌæ,táæòV»áPÞϱªÓÙ)lÒº¤_ wnV4éýÂÂ×tçtxǺ£É‰ã¾¤Í)]hET*9X*Êéb'2 ß4mVT|þísŸâjt9ÑþÁ~Q!¦ËãˆeºXTÓ=W§ÑU^fùñûã°)J„ E2·. ä¾ç/¼h,Ý·÷}€ßeVmš§üúaì&¨ØUÛ;‡“ÉóWx±°yݧÏW«ÇQ›^m?ƒ*Îìýzö9Ðy9­W-þ$äsüü÷à_Úb±3ø4Ȩƒ5d¶yº^´ïÒ¥½•Ê|xýL´°?®Û=(º¦®ètȽ¸¼:?¼Z·¯‡iü—‰±’b +endstream endobj 1644 0 obj <> endobj 1645 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1646 0 obj <>stream +hÞÌUmOÛHþî_1‡t•Mɲ~[;p­”&Ñã%.=©>UÆ^·‰­zèÔtÿòfìˆ!Q?ÜI¶ggžy晙ń[íðtbÂm¥ <îƒã °9(©eÚ»P;<1Á„0ÓL 8þâÃô=Ö÷Á³9ã„s# +ãÚÂDë1ι á7í“~œ€Ë|_¿†+e˜>óõòVÅóy^ÜÂYQK•Å‰4þßc*»Me1Ûu¡g2S¸ŽZHAàøb‰G챌S© .Rø¨Œžé1¡ç ÁŸñ|1“Uƒ„šëô±8Á\̲ûý>0ÇçÜiËóÄúëg–³qŽò:vsˆå?ˆÓo$é:þZ bkº+¶¶Û²ý-6l‡¹ú=XÜ4z.¾zFÏ2}Ób–n&þ­]P!ŽGJ]©²µ¥Ë¤C0O¿6šÙÚU•=ä«— Ý”ËI9ËIG\üjqùÛ P"âA +ÏÎç¶çºý7¨ÿc·¦¶`>ÉÏW x]Óið¯äÌfíË8¿ÖîB%ql›™úayÌÖeÊÖ °aÏjFXà?.¸Ûn]ŸõE;Ïô‚ÎÂCçqÁ9®ÂÛ"ò¢†…2½Ð.¿~ ôsxWhV+{=•P.ëŲfãé’&£5JLî•n1o`Ö~6ã¦e¶ŽˆþþGgã£p<¸˜œÂ³Ë ¸¼xˉ&ª~ÑÂýGâŸô»2O!E¸Ž¥Jé‘5è‰l¡rt(ê,Ò3ä}{Áx|9>BÁÐ^/U!SX¢Ö" +ä{YCR*%“ú§(*ö"ãx Ú’ù¾"³•U‚(S™| ï2Òg2SÃx6»‰ÉÞ?KHºdó "ƒëð¥ƒW¯ _ÞœSsnT¬îƒ"Þ´ÐjºÁå¯O­ßAÎÐZÉ®s¶Xuö™:Ä¢%üjLD a—Ü”Ë"­ºÒP¦•OTÚhü™’i¬ö)O©rYÔ“»GãÓ~¢ý¡¶Í¨¾åtžLQ­Öû¹ ÐV€%sj5õ½#ÊJ%ïGÆÞÅSîÝ(s[ÔÇ]QÖ¶¨É®({[T°+ÊÙu²³0wkØÎÊÄÖ°¥y[Âîä¯F‡ (†<š˜w—§&[vq=e!kv‘f_f×yÜ,bŽ/ûp‡_Ñ|yÄhiÝàËæõµv …D‡‰¬‡XçDU^çwy}éf3»Ç/â¾p]Ÿ àç +öh·VïíŠäÑQÏes!DFGãõM±é?«‘Ìè>\Îꨉê4†› ? +Nèn »”³ŠîÈ6Y'%©Ne!U\ËôGsÁx@¹‚Q7Û Ò<½_ðŸÞ? sñ  +endstream endobj 1647 0 obj <> endobj 1648 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1649 0 obj <>stream +hÞÌVínâFý笠Š­Ý„ÉøÛ„v¥lÖD´,°Æ›6*ýá%câ,d›ÝF«} }ËÞ™1ˆB›V5RìÜ™{ιsm&ÊÙÕP‡I®8&¸ÔËsÀ¤1%VÞ„ÊY[ÂXÑ  øÛékRB g +EB-´…c¥A(¥&„_”ßծߛxpyvyrƒLÓ=â©óIÍfI:NZ°,ŽÆLû#ü©LIeÓ¶¡¡ݱ!|+!Ž†³ÁXtË2ˆÒ[ø5ÓºK5AHðÿŒf‹)Ë®*ŽA\Ãsˆí1Ìf³ Äò(µd "v±ˆáÃÚZÄìð ¦XÄè×¹iŠŒ4-o•.V·K±¦-ž‹4Ó"¶úÕµ†®Ö0tO7ˆ¡šŽµ]w-—'jÍ¥ív9.@sˆ«^kb…I{–'Zõªó”çYDKyâ Ãqy港ÔÂkŵ|׸+â‚…õ}çߺû3·ý;¨ÿãm¢¦C<ž~Z`ݹº% ð"œÓ©|’É]‘ãQÈÓ$ºúY3\bªì–¬ú¿la×-ìà!Þœo[º&i:²Ÿùnv\±6ç›â±À@h$1ŒTÍQ?'Qãõ”ÅÉuŸßEy8_ ¹‹hüi¤Ž´‘¶éL›§ã­À+Æ‹,I‹x¤Æóeq +GaÐG{{^\þÒïuoF£ôh¤µHøÃ~òöÄ;²F*ã„OýöûCŸVâ®®:כꠤ³HôvPh—‰æÎý,a«¸êØwC»Ìò\8‹LR }ïð¹Ø5Å#™û›Þï¯nk§}Ôm§ÚNâÓÁXV$,?¤™A€v?oàèi^¹Ï'zJÐ-ÈÃa á÷ÄßP”×*ºŽ¦Ëý)Ê¿$ÅønKTy°¸ø°X¹×T ¯q”3x¼:—âÐüH_à_t«hûT‹ëcÆ¢Ohní'êTuz¡åœkÆÁtÃjºatzW/Ùûjª÷ú¡/øÐþ”½jÊÞ‡wod.ÿ1Õ7ø¯f~=ðÖÍ‹(³Êa^9éØA;¾¨{—>G ~y ¶†yÆr ·YÅë¦ZÁnôÀ]21á5К!üœŠX%ÏøAà‹ö‹,ìq¾‰‘Kåy Sÿh®Ö–5bï¥Ø{!í;l\ðš0ÜÆÅ®¾æþ`Ò¹Wñ +endstream endobj 1650 0 obj <> endobj 1651 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1652 0 obj <>stream +hÞÌWënâFþÏSEŠd70ñ_m¥,q"*œ¬¶!?\b'€‘mv¡«} }Ëž3cs )$TÇÂãïÌ|ç>ž¨0(œ^uU$SK±¡l› +û… ðÉ-œ^ª ‚T üÇj[¬bƒ¥+LÑÀdaJ1·_(1EQtp¿s ³¡vZ;9v,«6³¥h{£Q8@}œúqàõ}ùÞýUéB•ÆtÀ’ÊTÓ÷BPšDŽÍ\rw|ïÁÁ?ÀçX.©3¥)Á™y£ÉÐO8¯ãŒr3™aÓôJ¥¬l+JY¸ijÌ2s9úÏ´òšÃCÑѹÝ_§ÂCR–í<d­jdÖꆰöÚ“õ23¤9hŠ*— ZrISmUcš¤É*þš·É‘²E‘jÇ‘À¦ýd“YÒ­Ì%¾Àã$”Kh¯)ÐÜ]…"§i¦E¡#[ìÌJÙòS¦¥dˆ‚Ï×]Ï=§} ëÿxO€n2›Â¯d X”®Z øOtž‡bÐ i‚½øغÎT髬YL—ü–7@V–ÆKØÄ.^6¸!º®Â*¦¨gàdÓB’ò²Ál tDÉœà—lŠA0‰Ãqô¤ š¦E8ÊðŽSs¡'Áq@wOÆ1I¯Õ^o|T\–­A±ºØbÏ®¯¡Wú}臷¡wv6ö¤°O=¹È…( ¹ΗB®ÀýeÞÇ×xžŒ‚ê‹äA£¯Oð(Ux‚_‘q¡FÐŒ§£v4œŽÆ Rödœyr‚Qù¾ËÞ$i# Ž+?!Ì)°ù'ø¬îZFB´dËÍŸfë¹Gˆ£S;Yv¤¸Ýj|¹j5áèµ¥<¸žyDÆ aŒe‰€)¯äkÍ +ÄÑ8Ð}T|³;„Ÿï³·ùÝóýaNñšÜµäGŽ +ð‡ì>eoù¦‡(ô<â"Ü^‚O„;Ó¡ß“¨~¶RMÉÙ0 à¶~ÞAü¦áÀq’õLžMÄ3zˆ¸é|®œø«ûÐÔnw»õ?,– E;«MÓnø7¢Ük¬üzÞ"Ÿ¯“ïm}ãñ/N§KÑwfÿV +þŠÒk +Yê ÞÜ÷t‚“ ¼àéOÓ•õ8]MM®ÉU5‡&£}^«7¯Öò±­ˆòhwâõñ<õA)™PÍæü{»á4¯5ZÝ›N^UâÎ[¬¸î Âg³OQêŒûûû±mpÎÀ ¸.—vÛÉ;U¸ÃŽ£ù¬H¸lõ?5ô­ E(_þtl“ðNës­Õ€ãºwÕ7)Õ7jIÞ]ðŠô!é½ÅÿVÂñáþ·:õ«zs}Ú2oÖ +‚„wÞG8?_c?Üs\/=ÈóËË®ãÒCKMïh£õP¾ ûàýŠ2’·Gw¨¶—â?}o¨©ö¹ë:æÚWuÃÀ¾ 'ûr Õ•3ÀêWŸ”à¼U=NóɉšU6z ¿Ô´‡¬â!Xg +žÎ³Cpì§Ômñ¸ºuFVè,.qýx¾ÿG€:´ÌÜ +endstream endobj 1653 0 obj <> endobj 1654 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1655 0 obj <>stream +hÞÌVÛnÛF}×W  kÍ‹x‘P$&V«‹!±rݲµ”™P”ARNÒ¢Ô¿ìÌ®î±RKJÚ‚H9sffI¦•ë÷#¦EÅ6ÁÑ\¨¹6˜ä¼WÞú•ëw:èàÇÝ ÿñ¢»«»à˜Ó ðg ½0­†˜UªLÓ4üO•ß”®÷,æBëºõú5Üæªî2W™Oóp6K²)t²’çqqõwÿG eÊP3- ª:Óm ü¶ti“s¼1ìï!'<‡0›À]®Vu‡ÙJ‚.ÁûÎS^¿ž_± æؘžÍ,˜aÖëu`5WÓj2Q‘»XÄô™QÛYDuÈÀ‹˜ýZ›ºP¤¸XsWBYÝZ’5-I¶ªfYÊ04]­Zxë¨UCwuƒŠ¡êømK¼NyÔê6ŸKl²ˆJPmæ(cU¬p‰çE¢V‘¯2ÏHg‘­F†írÄÅ]r¡Z—¿UÚJDNa}ÝûyèúB³ÿÆëÿØLÀ´™Kòkˬ;W¯É|—˜Í4•7ÃdúP8 +Ç0M¦+Oªá0Sá¶êÿe ;†ha‡x3ß–º:«Û²Ÿém³¶™o ÇÑdOód©j+<=†Ns ¤â­î`ôóУ?²cL8þíÙmÚFƒK&4|ðÄó‡0›~óÈ8Å¡±w>œ¨Ú]2)^z\|×A¼íßJþàl­>Qüž˜às’nhX>§O0>×’Õáû|{eè!>êàqÚoygk’K¤É7ÿ–ΪUŽ)ï€ØxÛfÿýÙyÌe|z>Ÿ‘E—a*SOÌc²éQ]üfw0þN)Í$z|mI{R^ë7™—§3ºE¼ÙêÈDÞÞŸÎæEgTòÇ_ΙÀ]W÷gMaTn©‚o”ÿ0­œ®/ +endstream endobj 1656 0 obj <> endobj 1657 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1658 0 obj <>stream +hÞÌVínâFý笠ŠÉNÂÄß6ÐVJ‰—R±wÓjÝ. Æ[°‘mØ Õ>Pß²÷zŒM¶…f#VªAx|æ̹s¯ "é¶?Ñ Ê%ÛGuÁtm0Tȸ4—~ô¥Û7hàÏ%M?xÓ\‡µ]p •©:ø+IE¦šˆùS©ÅTU5Àÿ(½—‡Þ°˜ ½ÛÞõ5Œ2Es™+§Q®VqÁ )x6§\ùÝÿM”Π˂–Æ4Ûÿ^HÚ$ŽÝn´Ç<œñ Âd™ÒÒfË1J‚÷®ÖKž—ºž/Yfƒ³™eÓv» ÌtUÕaÚ:sìý<ÆÏtóÙ<¦‡²c”“~œv™’6à¤éî3AÞjVå­a o߆Ša2KÞ®jJË¡£´tÍÕt¦Ëº¢á¯#p•1ÊÔ(K6ÛL PlæÈï”r† <Ëc¥…þÊiB‰.ÃU)sºn;”:òÅ­|¡Í"_þRh)9 úþÅã±û ißFõL+7À°™KéW« ¨KW3ÅœÅæÝr)ã8Z9öBα ƒiòVÑfÈ|Æö P•°£—%lc7 n‰®k³¶-ê™H¶1›W±-0µ +‚®¹bËë,NŠy ÏÓMq=Ä{>2\Îé(õgè±ÉÅMS°eé~¯ Ä×vîxÖúaÉçñ;„ãp¼Yòìtž–(7°Å‰C^EBTðv‚Wšó¯¾ÚÊâ…VJ^ tíd¼Ø #KjT¥,ÊŸÿ=a5ˆAà÷ò6g°¦UEŸ§+^d»@&“åâEóü +¢ý¤Ÿmâ†Ävp%äÊjPðUß×Ë1„÷ò¥v§“lV²„TŠªû"ýø†àÏÈä7¢¤= +‹ÅUM^‡¤¿8EFO³«C2ÇŒù´hÔ3ÊÓ´8EnÔ+ò)õQºÜEiRX§—Àð+ ÿ” ¬¨&Øžà6þWÜgÚ¢Ìþ¥º°mÓŒö/c¬µ 1|´ß´Ùˆ#p}ýeMáEsãbºÀf>¨N=ý¬vð ^ù;*`Ž6¨%þ¡%êgæ\DEË{ËLä^çx£ÎŸ½n¿è ï&¸ÌáâDƒï¯¨î áú¡ßw"^yåw÷¸âÿìk/^¾1þʨÄÄðî7oL±Ñûñ3…Xúô B|šòu1Šxñªh½_{ÞÈõ<ŸèåqVßÆÉdNñ¿ç«ü›Œîzƒ‡>\FÐ¥þ©°³ìGãœèÍ3oUñ¬X¼*ô{o2è?Œzt,Üû?•Y8s +j™Þ)gÊ@©øÚ|ÄÚt þ§ú[€'ù5_ +endstream endobj 1659 0 obj <> endobj 1660 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1661 0 obj <>stream +hÞÌVmoâFþî_1Št’]`ñ»ÍÑœ”K¸\ªkƒˆÕÓ)äƒ ‹q +ÙNTõõ_vfw1/ /É%RëgggŸ™}fw-H´æåI¡ùfnèƒcBε‘ö1ÒšŸ,° i– &þá¬Bà˜Ì´!šj&za¦‹X4ÐÌ4M¢?µ[ýKçx,„óæy­ÝÜ°Bê³$§Ó4Kà*+y>Šܸ‹~©9•Íσ†Å,߃èBºôÉ96lå»Çã!Ï!Άð57VÀ|=E—ÐyŒ§ó /„ßN¤ù6 | ÏgžÌvZ­074MW*b>³ÝNÌ8¢£¯rÓivºá2DÖòYÇ“dŽ Çež¾Û´Œ†‡ÍÀhØVhÙÌÖmÃÂï@âÅᔨn>“ØðaP‚á³@ÿÕ=\ây‘ ä«Ï2ʳˆÖ¤ÄÙ¶PæˆK¨¸ÐZ— JDN¡úÝzÝõ{¤ÙÛxý›‰p|RúMµ•r-W.À«Ìy6™ÈF/MÆe¥Pp,Ça–þ‡aÌÑù-õ¯$ØBÂ>ñª¾=Yt-Öò¥ž©Æ~€NÜU}›Xˆ©‚á«Fõ$|6å—ù¢ñaÂGé%ežòâ=Âï^~M‡å¸¯§}£o´Wšõ(QO¸þ-çñïÒ0úa³–³tãrÜ¡9ž4ÏMàT’,~‚$±D’äLplïö6šçiVŽúúhöPÖ ?‘ݳè3œì;Ë¡¯ß#³ ÷„ÿ(Ø5>dÓî ým2¿¯ÕúüµÛ>éˆ\Õ,8=%|Ë o6 ŸÄE ³ŒãÊ1æ-E´(÷º^E‰° +te_‡w ¼£|¦8O»ßÏNêŠÀã-…u·|]ÜÞßíÍ>|Rð×£³E殾JÎA2ïîzŽ¯¨xÞ9 É+:³H– !nÉaR¦’%YŸ4¯¢Nï,¢Z¹x¡L‰C¥1 +Õ*¤ºwùÖX!þßµKpÕha«…“ÓÐâ!\?$ •O¢£F\çyº¸&:¿Ñ7Â7Q§«(V"_›çñ¦Œóò‚ó•(µŒ”ö#áŠÏ×¢G” ù|oÇŠ²Çå=2G“ãöHröb!ö:ç‘X÷þŽûÇòum/!8 æeR‡Ãù¶"eh®ŽëkðøÕÒxDmÓ´Ç×vOY_JWµ½‘ΪMõ%·Æã²Y©õQeTU€L3¢•Åøm*ï¹´U‘)¦²È›`Žè²òžéþõJ³;›,I¶÷¸ +<ÀE"ü„¢(FuZHã—×_¾]^ÿò’3Bμº†'uD<ó6³í©gÞi¶/4⎓¾É…fÉ»äM☓HÂÕØõ³¯äÿ +0Çd¨, +endstream endobj 1662 0 obj <> endobj 1663 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1664 0 obj <>stream +hÞÌVíNÛHýŸ§¸BB²—d;°E +F©ºaUa´’‰18Nd;´ÑªÔ·Ü{ÇvB)á«]í:R<>3sçÜ3÷xl@ÔØîå ×û`û.X2Ù7öƒÆö{ Æ ÃŽ?¼¾ÇÚ>xgÜ„`Òà…q±`Øh1ιÁçÆ…ö±ûæÃÁöÁÖ 2Ýð™¯M£LL&qA?-d6C©_p)«\Êd–ã@Ë`†ë@pX†t)86LwûDŠ‘Ì@¤#ø3Ó[†Ç\-ÆÐý"&³Dæ*n7h8v“s™ã3­v» Ìö9·Ë4]“ynÝù3Óþ®å!u,Õ‰é/Åi+IÚ€¶_+Al §bk9%Û?„nÙÌÑ`rCo9Øôô–iø†ÉLÍÔ ü÷JܤDl”dÓ͇è.ó´s]õÈÏòXo!_mš’Ð*]NÊ™¦ë‘tÄů¸Ðf—o:M%"”Aayð¸îþÂaÿNÔÿñ0µ–Ë|’ŸW°,]Ã.7à—¬ÙI’²qG×EŽ^È%zÀ²˜¡Ýé¦Ç,MŽXm€ª„=S•°‹.^Ü)]×fm·¬gjà`×à öÊàm‰ð* uénÕ K&¹\• Cy>>¯ñ,‹ÓbŒp¨§ó¢ eG¨Áf›Øé\ƒPÃt£ ³i²ˆ¦ikïËvÝ\6ÕJÁok€¼œ»¸¸¹ õÝõS¿®ïºÊ¤¸}|êPä9Ž{r:ÐbOÓ>¾Šº;ë#V´h¼#8Âé²È­½:˜D¸Èb™ïìD²Ô•Y¨ÅOæR)\ÉKx¥ðàøã§Þñôƒî  »ñt i†»rï€ï á¿ßçÞÚKç“eŒËå8bk+ÔŸÛ7n?­‡]To*’ï³e°VºÃcb·ÿ‰þ> ºE7‚]ÅóyF³ïÊ9-DV” RÒKŽ%þ¦€rÖü^üdÒ/-ðóX> endobj 1666 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1667 0 obj <>stream +hÞÌVmoÚHþî_1Wé$;…ÍúÝ$j%BHĽ +ÎUj9U³Zc_Ú‹N÷ƒî_ÞÌ®1¥§kC¥ ¯ŸÏ<óìÌ`ÆéõĆEa.„</ +ÀåKcn\ÄÆé• 6ÄsÃv€ã/v²N¡Ëw ^½0î!'F›qÎ]ˆ?ïÌ_úWà³z§½—/aœ[vÄ"s½ÈÅjµÌ0ÈJ™ÏE"­ßãŸ0”«C9Ìõ}hÛÌ|ˆ/µË€œã v¾o¤˜ÉD6ƒ7¹Õ¶C˜Kt ý?Äj“ÊBùíÇFà°0ÀôæÀ·Óéó"Î=¨Ê]mbúÌñö6Q2pÕ&fßhÓQŠt7½h+‘µýš¬ëk²¿ +Ëõ˜o>€Ãm«íã2´ÚŽÙsLDzñ7Ô¸Kyx! 5Î×›UI VÀBó7KíHçÅÒj#_s‘Î*[NÂ9N’rÄ%ª¹ÐY—¿-z”ˆ„ Bs=¸ýÒõ?š}¯ÿc3unÀ"’Ÿ×ÐT®íé8JÌnšêÅÍrq_Ø +…Äp]f›Ÿ,'d®)gl[ÿu ‡Ž*á›x×ß¾nºëºžiÆAˆN¼]sl L„×I¨Ô ¸Ë¥øx¾«@ŸÒ¾Ü7LD!!•ó¼‹}Ÿeb!¼®ÊÞÝÇøa#ÏÔÓñÉÞç›|™•ó©9Góá/ºÃ¸?vÃÑm|9¸ºêÞ Üï 8ŸN³-ø$ÒJN­ó/»}Dúpÿë¨B¸Ü<,R×l¾yŠ-âÏ$<È%±F‰ßÁyŽÚ÷dð–Ä=º¶£ªÔ\–ßÊU‹ú˜,ÂoOv­ ëè;ê:“sQ¥å×Qº]ßNð/TU9”˜ÂŒØ| Dÿ²â[Ó\–Ô.y¼1á49•(¥S”¢¬Šfr5ÄÈ&¹—@EšÉVCWäͪ^ƒÏ“Räe7Ç4¦& R;Ðr9µ¥ƒÃ¯_gÞ¼ýŒ`_rJÕD)=šÎ{+}ßJLjª4N@ ܲ¸Ù(¼“wþ]áÇ„ª¼e >´¨f{b³ŸÅ@‹ ¾ÊE‰ïsÙ lôâp<Ö¦qŽÜÛ’îž2»Ndš6f º{ÖÁoQ´_7ZeÕ +©Ó¹Õ¡¦&ÊôxS‹øüÖZÅB +endstream endobj 1668 0 obj <> endobj 1669 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1670 0 obj <>stream +hÞÌ—[oÚ0Çßó)ÎÞâ1\;'i×J]/Ón**ÑúP¦)‚À2A‚LXAÓ>оåŽã$´tT¥%R©Ô˜ãøçsñÿ$p{ï»F3CØà1_€Í@ÆÆÐx{ç8„Cƒ[Àð/Ü÷hàƒg3Ê,'C +eÚ¾ѦŒ1ÂãÚü|v.õádï¤Õ‚Ž$ܧ¾™d4™$é>¤y,‡Q?&߸•­·²¨íºÐæ” ÂS +ŽK¬Ø—q4ˆ%Dé®$is +3A$œ-¢ÉtÏ +îYh¸N€Á ê + –PÇgÌÑa +‹z¢šÇø©åÜ™Çô¨ìØÅ$†_''(RN:~• å-wKomW{û%"¶C]s ã¤íâÐ#m‹ûÜ¢–iŽÿ=mwT Ž§2Õ‘™¶ æýˆ žù•3±¶ËYBÚ诙¥*ÑE¸Le℧R§|ñK_T±”/‰Zªñ@C¡¾®}Ýt}ämÍP_ðmElA}•~V >ºÜÑØÉžÇã±\&£ù µ0‹Q¶M¹ù‹XµÍx@+”GسŠ#,PÅ+»Zu „>Ïj€7 !ÎJà e°2õafzf‡À ·µÆ1ڇɱ”Ñr?Oº¨ÊN”çhŽeÚ3{ïmµz~¯Î¬«uZ¡18Lq®@zE&š5vV2 `Ò#8qPÀÂ×w³<Êç3Dàú›Â'4+zf‰×èn‚öš‰~G“X¹úæ¿ÔûŸÊü t±sârçÄL&qš+,Úw}7d#äecdô9žî¾jõƒ› QYåé}uøÄ»Bû÷‹O¸fƒ+ƒ(ΤÌd¡±ê.=÷‡„?ËoÕðºÚ×W«E{¥hîŒñù¬hp¬ìjëǶ¤(4ß×ÿz$Ⱦ_r +Ío!xܪ×ݪKác7Y}éâ¶õ^«ù}ö¢ê²ªêhÕm`÷™@µªŠ6C_6JWý­Ó¦\¯á›Ž÷‹h i–_ôûóér7­¡À¡¹">§=ÜrM5Ým».ÏÊåå>h¯šø­R©$<ñ aí(lä/š„/›„¯^!ËMýÀo,AïðäW‹-BˆŸÕKð§Ã?%ÔÔå +endstream endobj 1671 0 obj <> endobj 1672 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1673 0 obj <>stream +hÞÌVíŽÚFý笠]i%» ³3þ&›D¢,»JCV£ªT•65ƒÆ¦éªÊõ-sïŒù\`³Ù­T#as<œ9÷Ì=c —·}ãÂðxnèƒÃA&Fjü—7D©!làøÁ“Ö!p8ã6D3ƒ# ã.bÑШ3ιÑgã7³Ó¾…кl]\@WZ"d¡9Ëx6Ëò1¼ÉËD¦ñ0±~~Æ©=•Íσº`Â÷ ºÖ”>‘ã…ío¸{IJ«.æ›RBûïx¶˜&…âmG†o³ÀÇò|æùÀl§ÑhsCÎ]]¨ª]ÝÄò™íîÜDwh€£nbõkoÊ‘àM7\Ab…W‰u<-ö]l9.óÌ;°¹°ê^VÝ¡°™mÚ–Àï@ãÕádTWÎ56ZK°|˜¿XêN¢qYdVõšóœ|VÕr2ζý€œ#-a¥…ÖŠ´ükÑ_IHšÖ罟ÇÎß8ì¿aýS àø,$ûyµëή^€g™³9ê‹^6þ³,0 +E‚p&Ì¿,;`Ž™ŒØªÿ«lÕÂ>†x“oO‡®Á¾îgºÀÁ~€$î&ßc…ðªuX¾¾ÅeÜ–r.æÀºÚô¡GÅ_zÐ+šÑôK]â‡qÔ‚#ˆ0Ka`"c\=MÒ¬)e|÷âE¾œE2Fxø‰Èá5püþçÞ•¤GÎ%eð +ødð!â{œšðŠjÈ..Ö¤¨p§¼’F"ÙFiD–RSd«Š÷ÿ˜.d–—éÀLç˲gâ½fëm΋œáúœ pÔî"0ägµƒd«CMª” œ©*ºq‰{^ŽeųD98°¾Ÿ¤(cY±À÷k!‹É¨á§â‰TÅ‚žZz}˜H5φ%[õ̶ N|—È¢bÚi¤²öWOáæ¯íœ[qú›j¾‰n¾ ¼$|W–Ò„ðž,Õ‹D3¡^¢ò+jÌ£ÞY¡§s. ú­Zçéô9ƒŽœšðÁ iä¡ 5Å#‚~‹x«ÝéÜöÞ\ogá‘ÅMèkÜÕÔë\¨Z÷S$ˆûI-ËY«‡pñDžcYâäf:WíÒÆyñœÝ…ÄŠἊð©C·Ëe”(ïs¿²^±)¢Ê˜÷æI«Iò÷T-zv<Àʃjž^¾&Düoo*žÞ÷Z|o[C3ßs¹ïÞz{¥¨Àä„x,ôš¯·]pDHRƒÉ‰mjÇË&eõ€j+Übîš™6Ú‡r³9öáJ;Âzª|ÝÃÔ j•VüøöU€:.>Ð +endstream endobj 1674 0 obj <> endobj 1675 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1676 0 obj <>stream +hÞÌV]oÛ6}ׯ¸{›˜!õAÉéZ uœb[»¶>TCÁÙT¢Í– J^cýAý—»$%ÅIŠ5æu/}î=‡÷Hæp鼺àpY{"„„¥¥BZy…÷2óNÎ9pÈ +Àð/zïý×Ãsˆi +ƒ“ÁÑŒ4á)Mýù¥–³YY]ÂU£t!ÇŠüžýˆ¥BW* aCS.bÈΤ0à¸Äû­’¥AVx§I'Tø%BÂðZÎSU[ÜaæÅQÉ   AØï÷F)c‘£)šˆ.üiíäQ£Nh“H-NßJÒLFi§„é–Çm·aìº}#IÑØ_AÀ8éŸLH/à)hà„ãÿÄÅ…!%F©‘ž»Ød9n€šø¿›Q.®ë’ô°_^¡-]f” ‘éL/iÛ‹9,ÓËb¾jIÀÂúºw{Ûõ+·=êÿx›=€PÐÔÈÏÚX.ÜUEy.¹Øé)F¯s?'Ç›ñfg]eµ©’=yhð¹.UÕ|K…Ü/€,$&,în!ŒÚZ×ÔÿE¡Õ7º÷Ø/µxÌ«®@NžÞV¢,Pº‘Ͳ†ïžÁkŒÏß}ø姜ÜÑÕD6r¨õ\ôÃØŸ÷¢µ‘Û–yØìÇa5y¡µ\aø|:ŸëÅTV¹/Ì`\®NO “aîg9Sxt>ÄÇÄ Âü]2Ž‰ýÊÁÓp;>“ìÏöÎ.Ñ™!e<à5'ª˜&†Ñ¦oÓ4†«åìLr9m¸cƒ¿op«?î7hê9°œÀ§{ij³Ù‰´©“w0–òcjÔn)¬õ¥°1öJøÞêb¼µ¨ñþèè\oêFa›ËZSŒ[Y'ë䛲a´¬PÙòßè|‹Š‚ÿðpï»EÄø®ùšY»ß*Ûú<º ¶ÛÒªY*<æn 3/DÇíKß½+ß›'-ÈV_d1x™ûHHätú‡cü¯lµPŒa<¯êÆWfvô¨Ðïdž~ù+¾ÚÏìÓZÂr²ž§NªËÇ1_»mÝ–Ù3¾R몹?¾Í”·Ý8€Ü¯Lø Ú•¾3ñ Ño(n´@%QÆí6ñ'Ê? ý½ô– +endstream endobj 1677 0 obj <> endobj 1678 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1679 0 obj <>stream +hÞÌUmoÚHþî_1©Òº ›Ýõ+ªò€Sqפ8ɇúT¹fM|­M_Tõõ_ÞŒm ‰tW5º /³Ï>ûÌ33 an½šJ˜W–ï@ BpCF[¹u[G§$Ĺ%|ãC†ï‡8‚ ñÒÈÂ…‹±8³z\á@üÙzÇ^G§àñ†GÃ/à­±eÈC¶š›t¹,Ê9ŒËZ›<Í´ýgü;^å´W)îxô$—¾ñ¨¥ô‰ÊßqOt:ÓÒrWÆîÉ€û¬@Jˆ¾¤Ë›…®Þ(¶|ÅÓó¹çWN¿ßî†B¸m¢MîÍ&¦Ï•{gÝ!€Ólbö[oú#}ÀM7ÜAb¥×‰u¼VìYj;.÷ØWPBÚ=—ÝS2”Š+¦l‰ŸÁ6.7 £ÞšU›­³lŸìÒnvt7Ua÷P/[•äs“­ ã”òrŽ´„ªiùaÓQ@K +Û罯=ÿ!ìiXÿÇ°¦ŽÏC²_tØv®tÛü’;‹E»˜óëºÂQ¨4Ž€ãpÉ>Ù*àÓ3¾éÿ®…Õ´°C¼›o¯º>ïûm?ÓÁ~€$în¾Ž&"º$¡^Û>3%ˆ—»Îó(Ý¡2‹}·ã¿(ìp!•ìühiÞ±¢¬á1T'E=¼NM5†xr=PÔΖá7Õå ËWkl‰ƒóÁY4b|0¦Ñùt/#xs/“¤< ZìÌC½¨t×ÿšóô´!ÅøÁ¯«5¿NMZfúnIÈ™½‘È®©1p$Êty»*m»ÀÏWeËÑ +„Ývcø:LçÃãgÑ`z1‰àYÕú{HB(ƒÇæä癑ŽOþçßkÕß÷%5Þó¥Ò'òe4¾¢ <£™²»åÈØQ®ðÜUatô¥þ/ÿXþ`ÜÝ|Ì +endstream endobj 1680 0 obj <> endobj 1681 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1682 0 obj <>stream +hÞÌ•ooÛ6ÆßëS +R›!)‰’W‰­¶²8µu@= ŠD»ÚdÙ ånEÑÔoÙ;Éâ.):,Æýðx|îÇ£,`n¿š˜¯-åBÀCðB.£­™u•Zç/Hg–Àñƒ, +!p9ãÒ…Å1 ãjinõçÜ…ôOë­}¿Ÿ…08¼x·Æ! íåÜd‹EYÏaT7Ú̲\;¿¦?àVn·•d®ïC_0¡|H‡]JEÉq Õ!w¢³BÈêÞ§/¦ìSBüW¶XUzÝæSË÷",N1_“nEÀ¼s¯+SI¨Ý<ÖϤw4xˆŽÛNbù{8Q‹$œô r+ü­[×ïÜþ˜9®Ç|ûH.œ¾ÃÀéK +ɤ-ßA§‡Tˆ©[³ì´b“7à(Ø?;íŒît³.>úµ—5nËåDNJ:òn½Ða‘—Ï-%#tIaÿüêçcÏï ;MÖÿqX{®b!áçÛØ·®ðºx’=/«ª$åü]³Æ»°Öx\— û½#æÚº`» °má@¶-¬ð.¸ßݺˆEªëg`° +0‰w¸à¯·EÀleJGÙu3›Ú³å¦éÁ³›ñ›QÇ¿¤¨Ç7“Ñøž¯áb:­Ÿõ Îõ©sqèSŸà ÛtF7œ65ð. =£½rËþ䤿S¸Ë8ï v^ÞÚeÝ€.pÝ\‹ÁÕÔ®ôÌ ²ªºËò?Ò¨¯ôoòËÍ]¥[=”ËŸÙ0k2ØS>>h+§sŒÇd+=µó{î[;b÷xø*N.Ó˜h¼NâÉëñõPÀóùêhç_‘ÿ‘D>9ÇyLò¬ÒÇLPÏÛJŽ™tFz_1Aõ¤2A}p‰ÿl—ƒtœÄ2t<õIÈäEW:oL™¡! !ånÁm~º¾Žâëx&#âs¯_öF蟞Mi¨X³\]éyY߇ƒúÝœ÷˲8#6«Æ<Ü5OÞ4£d˜Œo ÄI^ªûâÿöA}_7UŠF0ìŒz´4´â>T¿Ý´•»¿ª/ +<“ø +endstream endobj 1683 0 obj <> endobj 1684 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1685 0 obj <>stream +hÞÌVoâFýŸO1ŠÉ&°ÙµñH[)!Ü)¹CĽèt®ª½€ïŒl“4:Ýê·ìÌÚÀ‘Þµj¥’(fgßÎ{3³Ž€yëôõ€yÙrmð¸=ß›C¡Z³ÖEÐ:}%@@0k 8þàCøëûàÙœq ‚e‹# +ã=ôQ«Ë8ç6­Æxô +æÃðtxr“Â>ó|^Èå2Éæp•Uª˜ÉH™¿?ãQv}”ÅlÇ®`Âu ¸¬!]GÃrŸ°§Jƪ™Åp[˜]á1×HF¿Ëå*U¥Æ-×bž‹ô\æ¸À,»ßïëùœ÷j¢š»^DúÌêí,¢:`ëEd¿Õ¦¯é.öü”¬pšdm§NöZšv9Æ#X\˜]MÏìZ³ Ëø׫ý}âÑóH¨I‘×¾xU`ºÌ3Þ™zEÕþ¢LÌ.ækäé¬Ùrβ\”£\ü&ªåò‡I[)jPØ>÷¾¾ôüΰÿõ¦ `»Ì'ùyS€mçŠ^]€åÌó4­i2_T%ŽB©pl› ãÞ´Jj”ÅË+†2Mï$ú#]ÛßD¸Ï“¸ «ŠŽéøîRVÖqh¢ûóÁýó.½¹Txúý“ç¤÷øNöâý”h>ªb—:ñ¦²6Ô‰ìXbTRt“µ§zI8,„I>vàÓNáš%lÍIŽvÙÖâÍz¹çë;ÝÌÐ~Hâjaíh]*£rì„RZèÓé^ª¬LªÇ6ÄÚ ¦‡bÏñ%œerr;Æú>¤‡BnV2Â÷u ïRÕ†rEºÕ¡Ø«l†ÝœE˜l̲œÈõV)žÛX‡¢‚‡üV³nCµ1÷£…¤F†µÙ +_'Ù«61-’4/Uü¢\ç1¥W?_`ñ¶¨ù<Ï$äôíp¿< +;íB}Hš«j(Ku£k—Üc!CƒÓU·7AbÛf3 j[Y”Êu²%Nå!|ülÚ¸¾‰t³ +-a½uºÆžBãoLëøüýh +ÇeÒ^”éÞèþöu¾á~•Ý‚&µ¬¥£ýß¾µñ-ó~2¢®8.Aߚϓ¢l «-èÙæ}ù§CÓÈf +endstream endobj 1686 0 obj <> endobj 1687 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1688 0 obj <>stream +hÞÌ—ín£V†ÿs£•*A7>9|ÃFªDmâõÊI¬Õ^•þ@6*DÀv³—Ô»ì ÇÆ6Nµ†l¥:RL†ÃÌó¾gæÄV!•®‡SÒB²t°¹†cÎ!¥Dú5®oUP!H$UŽ?ø¦:6s°uθÁZ★qcÁBê1ιÁWéwyìß‚Éè_÷ß¿‡I®¨sämšGëu¶Ia´)ã<‰±òGð K颔ÆtÓ„žÊTË„` RZ”/4ëû1Ž–qÑf ³\é©6³ä S‚ÿ­ŸWqQåõÉ4\g1Ó¦é®ë3Î !ÓÒ˜míï£~¦'÷ÑrG¯n¢üÚ·²Ä¼i8{'ˆV5w´º)hï"E7˜)«JÏÄK[éiª£jL“5EÅߎˆsbØäÔ$ߊØòË¢Åb¶ü›R݉E<üùYß³û!IŠ¸¼\ÐÃííã~ðŠÏ?¤ß'¶ä.^¿‰­‡ñõ£ó°ƒÝâé.~²(mÙCƒ‘7Ä8µÒÇïÉZVé1ú¦&ÿǜµ&'FE‘N;°Ü#vÝ„Y¶,Ûë›ÁE›0£M¨+´¦›>G ü¬Óšo:ñú£ûá)!Íå™ý)­>®ÒŠ±¥{dÛ%‡ó׬›e^G—Óx¾Gíõ + ­ß§Žê¤­X¦«m9Ëò¸¥EÓñCP5Ø£Öd?+VPô¬R'Òq¼I;¢Žýûá1kË).Õÿ¾N*ºy}Á0 ÄÎÃLtýmz[ñÑ)}Æ7¦ ?Ôhx½xË?ñÛÔ¦$V:hÚœ=wÞœæiðÉëû÷Ñ×Çò +—»uÇúíMÊìo£—,ZíUÒž¶TIå¼ùÈŸˆ¤£´³Âc**ûþ2ku”d7Nªói‡þ©4ÒEFu‘vÌsÜS7ûïÿ0ïœOõ +endstream endobj 1689 0 obj <> endobj 1690 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1691 0 obj <>stream +hÞÌWkoÚHýί¸ŠÉÞ„‰ß6Ín%/”] ÜÐhÙØd¶`1i¢ª?¨ÿrï1ÏBCPVZGŠ;3wÎ9÷1F…«›®£yÁ1ÁÕ<°<L Ò¨~ +W5tâ‚n€†?øÒ=—•3¬­AT‡&˜bÙ¯´) EJ€ƒ–·‚ÀêvÖ´%Øf¨š³•g04]-ÚøéªEC÷tƒŠ¡êøÛ“vxX. ÕN§Ò6\ 2Pæ*wª‰¤=sµˆx•iB: ¶ gŽKÊ/ÇB±",ßUZJ@\NaõÞùóÐûÈiÿ×ÿñ4ÓaɯåXe®nɼɞþx,?:|ôͱæ–€i2]yT —™J4dËüÏSØ5D +;XÄëú¶eÑ•XÉ‘ùL8Ùqщµ®o ˉh9 à1ôÕQÆás”ߣ˜7èóÝ»‡ÍóføTOà ÝO£°¯ôÕ¾Š˜‰‚|®®0kÝuÖÚ$UE8Ç'Æ©³”'YÜWâé"»„3€¦ÿ©†öÆ­Ô[7~§êÃù®ûýäìR8 +~Y®ßØj "šÊÉ6>4Kˆ×›~^"é§iøÜ…ô’3ü +‡H®±íåæw:>Úï»m¿Œäàl >ÇcUSÔˆpAÍS⃨$œ½¢Ä;{7n[h¿!÷'n{ÇÃf¯ØµW¯ =ø@<»Ü EXªü¸åöúeËÔíBÂóÑ–c4/Ã7Xd«°QèxŸ¦È™Ão ]‡_¥/´o¥B²˜â”XåE6'¬8ûâ‚Òý!0{û}ÉDˆI"Ó€â"hÎî­ß RH@Câ(§úÈ…ÂŒƒ¬I±íj6Nþ¦ÿ[[ÝÙ˜g=žF‡kouÛ:%V¯Þ©bŽÉ;©EÌwìK”Û Oød1©DÉœgÏdzhÖ[Ä¢ù±Y©¶ºõàþôF·ƒà$áÓi,üOoÅbÁ),òÅå‡hð¹Ç“áôËÊÏ1dˆÚ‘EùCµüg¯ÞªÜöˆÐ9ÕÆi´†ÛÐŒ¨Q2’ÿ&îuÐ×ÈÕÍ¢YÿT¥ºAµ½ +üÏÑ‹¬íxýAÆ£[„ÿJµz£v¿ÔïªË#:ç„öW>ÞFƒæå b‹]pŒYLß4ã‘Ó¤6`ÇÓis4¯Ž¥¼ùàa—'ú^ÁäDòô4ºÁqŠ5´—-»¯û%ˆÐ’:¶7ì +xØÁ9þ÷&Ú4šÅUà'ÇÔ^¢“ –|Y3xëýW€ÌÊË +endstream endobj 1692 0 obj <> endobj 1693 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1694 0 obj <>stream +hÞÌVoâFýߟb„t•Ý„eýkmŽö¤4pwT@£Ä-•Jÿ°À€+l"Ûô.ªúú-;³kÀ8@®•¤Ø<¯ß¼y;3‹ ­õáÁ„E® <îƒã °9d‘6×¾ ´Ö{LæšiÇ^Lßcm<›3nAhYw ¦Z“qÎm>i¿èƒÞ{p™·­Û«+¸Ë Óg¾¾^da’Äéúieóp¿ßc([…²˜íºÐ4™)\ºŠR9ÞXbÏ}…³(ƒ0Á83š¦Ç„#%ô>‡Éã*Ê%o/Ð\§É æ +`–Ýn·9>çŽJSXÌÛç˜?³œƒçh¹cˇ˜þÎœ¶´¤ øÐñ·NZÓ-ÕÚ®R; Ûa®þ7¦‹·žÑ´Lß´˜¥[†‰ÿ}…[”ˆã‘SwÙZa³Í´C0OÿÉO"…gyl4Q¯¾NÉh™.'ç,KxdiñK-´Y¤å/ƒ^%!(RØ]k_O]_¸ì¿aý/“` æ“ý¼Ü€]階ڀ%æÍj¥nîãŲȱò{À¶™©ÿnX³õhƶ P–°gÉØÅûwU×µY[¨z¦\,<$qö α-0^&!ÿ Qެ§(k¾[Eóx€0}{ûÛ_oŠkÂã~ð±?‚7 h\—ê.£UÕ#*CUâtŽz¡êÛ5ÂiM‹x}‰ò7ù^r-NR ’¦ˆù2Ù£ ÂÉí¦È/Ð<è>Éíï´¼q}’ä@Ð¥rß JÅa)æbšnœ!5ΛTË©Ñ™Lh•Ôú?à·òÛö–˜Z-pñæ0³@zø¡Lå=Âù0üü [û†´Á5qs\S0¼ùyŒx¿« G¥éÉWôª3²?!ßàºû*ýqúzýýÑ‹õ+úËõ§›dˆxœFétµÎ£|»-Êj‰ÊUÓÂ0‹BŠÙ9fÇnµâ|“GüXþë ߉1.ï@ ßHI4×v¯#|uuļ•)qô°7ºüðÐëÞÜ÷nä˜CøtŸœžà[˜0Á_6Kvd£cUçÇI-EJµÇ}„Ë‚iœË²š-ihÖÊ©¶ÃUç'ìGM¥‰ ðÚÙ_á/9ñÊË‹èñLƒÕ L2!~@¦*6§óT‘¯ºçEGmÔ=½»ƒ3µÖFÉV-5ÝiSŸ—Ñvt«2"Žàé‘f6™}¦zêB?r~V† +µäúåw‡T¾Iþ¡ÊèTgæÃ×õ9¿Të¤e/¤³ýqø·ä ‹n +endstream endobj 1695 0 obj <> endobj 1696 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1697 0 obj <>stream +hÞÌWmoâFþί!E²›°ñ»Í¥­DC¸‚ÀiîTúÁ…|Ù¦Mtºtÿ²3k †ƒI®R)^?»™yæ™™Ý +“Òe£¯Â$)Y:ØŠ†c®@ÌKãÒo~éòZüqIÕ@Á|©ŽÍªغ üyIA+L1ó‡¥ +SEÿŸÒRË»“9à^ºççÐeÕaŽ´˜ÄÁ|FhF)ÇÁËúoÑ•ž¹Ò˜nšPQ™j™à×3“Çfmm÷x0â1Ñîc¹¢ÚÌ’B4 ÞC0_Îx"ìz~ÉÒ˜max3-`š^­VŽ¢Y "v1‰á3ÍØ™Duh.&1ú6U¡HpÒpr!ˆ¬j®ÉêfF¶ȺÁLé4E•+&m¹¢©Žª1MÒd;®S†MBuãE†VÃd‹ÙÒﲘá'¡\A¾Ò""E´ + §i–MÊgÍ…rE\¾Êô§DĆÌ(lÞ{ŸÇÞ'.ûo¬þ—‰èsH~e€MåªF–€â³6›eƒ^8™¦ ¶B±t©Òß²f3]â#–×ÿº„mM”°…M¼ío3kº*«ZY=Ó[61¶ý­`[` Ê:ñÈÂ1 ¤YðÈãʯ3>[Á#â<~óf$í0JR¾l|4!8Há@ÈÛb5I¡ú®M|ÆË8ŒÒñ@/Vé”o×Þ{õ†×‡³”/@øDxã–|Î…CD×>7¯„Gÿ§]Gû^®ƒ'Ê…õÙò/²ÿqý•ÉÐå%˜¸žL-Úš ¾+K¦  ¶v¯’p $"Ÿ÷Ø)‚]jÝÞ­xï®ß¼íÜ7ëþ œM åu‹ J”/Æ,žf rË ­ûp”NV‰ßËÍ´x4Iž¾ÎLÎFËÔ*¦æ ²ñ=ÙûË`ˆOg5ÿ‹ÇO(¿ˆÑN¿€r!ü|¸Ò¢Õœì!Œ&É®=??`QÄ9þ&›ý.â5·ÙiP¾òzFÔ&/IFé |´Žô õ@ÖƒyÔÁœ‹^†ŽäbŸf‹8~ðzp–)’ñ}ŠhŸ˜?Õn§ÐFûT4ÁðSq³ø>Ù>â~Í}Ô¾Px¶…–?yßÊ +žÄ/dZ}Ä» méóxÖ¯¿­¹^Çwï|±Ý7ý›&¬ŽwÊN»ªd%´ãQê®Òl÷ûAöîÃtF¯MpA6ïaÈ—¹x§¤å€˜âï]¯ë÷km¯Ûèx~–þ—Òs9ÝJiC]dÃçåÖEóêõü[W¼¡ü +­úس§f(ˆtb iT)×èXUì3C|³˜Qµ ¹ncÍs~'°ú†âH®Û¸í´>¼J®Z̃í÷¼Ž?Ò§=¯¶·=s:!ö›o“ôbþ½ šðíVø$9@´Gyí4KøWºNïk®µP±g+ óƒì|~^å7;×­;¯ãz§lþOÁ¹~ûœ®òþ`w¥Î +endstream endobj 1698 0 obj <> endobj 1699 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1700 0 obj <>stream +hÞÌWmšXý1iÛñÊ;Ø&MÜ‘QªFIý°î¢eÃÀœvš¦?hÿå>ÏDPª“Úd‰Â¹p8ÏyνWe²mu‡ ™lÓ–¡S²ˆfD•HÂZ~ëO·Õ}‰L\¿%+D‚?ø-“ö,bª•â>¶$`¡’˜»nu¨$I*q¿¶þûèÔ"÷Ýû·oÉ,e‹ZB¼M¼ÇÇ Ú’q´g‰ï­™ø·û¥fR¨ªë¤#SÙЉ;È( $‡Å(¹çÌÛ°„xц,±#›Ô $ö‹÷ø²”óÚnK×zPœAuƒPEíõz„j–$iY™†BM£‡ú©¢UÆÁtGåƒPþÁœ·¤G`P³ +'P­¬çjU=SûÉUêÂ7¢H²ØÑáÐ;ŠlÉ +UE”áÝÊp ÑLtj–Ķy^ï‰hPSø,ò–áIˆÐ+ÄÍË•Ð9E1L´µX¹ljùWÄ[QˆI2Rrø¬6}^yÙïaý_Æ ÔBû¥¼‡èÊZÖ€›<³†ÙÁ<Øîö)Ì…”ÁPU* _DŤªÀ6´˜y„M…GØ€Y\Np=›u=Ú3²<ã\l˜@¢•\‚i…Hyü%ù!OVBè}cIçC8óÏÞ½ÛyéâÉ[ÃŒxîE[6Žüð™EkÆÏ] ÁJ\‰e€utmpî9ðòŸ’ Úû+Á<~Þß‘ö¼?ÚäÍÿÛwœÇý£ávxe:þ–:ÓLäàŠÈOAÄõ~kfï¥`^‰ï›¸¦¬4pô¸n0Àü!øþvljƒäÒÉøð×:Y´%ëñ~gR + oÆ—×àZݱŸGÒaÑv¿sw Kwq¸)lžïMr}CÓÅž Ý‘;šÛ‹ÑÔpû.$æP.èÂh—›‹¸¦«1&•j5Õ«V€«-’Â#øÓ°TjÆÊ*Yù•¨`­˜¾š*M±4ürï¥\wn¢I¼_ﲦå¤ä{·‹<:5_£ÉÔ½eYºÂÕC韮7“ ¯ÉºA­v´™ú¼àe°9#O·ûÊríÉ`úÀk^Ž¼d2Ŭ?ž º#p 73ÆÆ`Öp;ÎÜ«³žé#l–*•`?¯m–õÅÀÉ÷ãNÎ¼Ä ùœ §_XzOEr o$ PQÌK»r½­3Àûó¾ãØÎô³=wú3Ò½äœ×èäqsp…ŠØanåÞè<õ¹.ÏÆY©sƾv-Çîsð…-¯¢àJ£âéŠë"Í~Ç‹½°àŸXwØB*-æý Yho¶¥{Íâªn!ÞžåÍ´ÃÜ0€3Ï.G(\ 7¨[<¡ê5»b¦\`Z|•.ÙvâÜñžQ:‡ëÍ×MK¯p­jà> endobj 1702 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1703 0 obj <>stream +hÞÌVënâFýÏS|BŠd7aâ ¾´•Xâ$T8ËJK¸06®ÀFc³›hÕê[ö›n’ËJ5RpÎxÎœóÝ°Qéü¦¯C”•lÍ…ªkƒ©£¥°ôÉ/_ë ƒ–t4üà—î:¤æ‚cjD3ÀŸ•4d!Z1TªMÓLð¿—¾*-ï,âBã¼qz +]¦ê.q•4bÁl'4“œ²0QõOÿ<Ê”GÄ´,¨èD·-ð¯$¥ÍÉñÆ°7Ü=Œ)ƒ À©Ý!¶#%xÁl>¥™àõü’mÇF{6±l †Y«Õ€T]M«J£Â»XDûĨ1:üS,¢ûulj""5ÀŪ» +«[K±¦%ÅÞªY%–ò†¦« oµbè®nC1Tÿº·¸ªÃÕe©ÄÆ‹QªMå³*V¨ÄY«Ô«¤ ³p«ñÀ†íðÈq-îR Ï×ò¯Ê·r!HRXïüûÔ÷‘ýÖÿñc"¦M\~m™€uåêU™€9³>Ê›^Mò [!£Ø¦Itå›j8ÄT蘬êYÂŽ!JØÆ&Þô·%›®Fj¶¬g~ƒÛ’T7ý­a[ ›@ÿ¨þß²Ø,îðŠƒ8„¡¢ÚÊ4x¤¬òû”†q‹ß^\L„³þ<aãûÁ_SÚaù$*C†*ü€­ëü,„‰ªaŸpþ/‚¯ñ9‹“<*aºÈÏ ÜïÖÍ6â7~ýS˃NÏ¿íÜtÚõVy¨^";)bütø +JbS¾¥I0åú.(Hq¿v 1ü +bâ’©³Þq‘,žuŠŒŸž +ãðc‡8áŽÃá0‘ ƒ¦ÛlÃIÒô ‡O¢òÙAšÕ%Ô iÔù Î'NÐÐP}+‘XéÏ\[¡“¢fžMå%:-÷mo +1î¼\¶C¿Ê â›rK3/MÓŒGŸÑ­ ïEü€ +¯Ýhuúˆß÷<(ïW@ŒK!Ö&ÖÀ^¥ã{¶<ÑÞbJE4D™•í“Œãå38HN÷˜—è.iÄ«æÞÎ7Ê&Aé2Ò/ÕÄæ’ðqäÆŠü}ÑÄã|‚<"¸G†wмBÜ¿åñ(áeý¬õÞÅ ¢«cÞ+×{Ñyî!ü³ ±È—œGéö¾4÷º¾÷ÅïÕ÷¾4ðlr6ŠxÃîšC9¼kPQQÎ{,bÀZ4‰^Gì(w-ONðý´R~Ç%‰ƒžÌËÏ.]FCÊx&W’^9cº=ïÚëñ„ŠaóöI³T²ž +oÃÌ›ùÿBÄâÏÎ8!øÌè£ÆÏÓGo/ùÀxŽ_WôÅQ´}ÿ!µV.~̰Þ›G¯¯û—ÞÚðÝ2Îò Ñ.ebJ0xàX€ž×o"Þ÷ëí†ÇM +%Ï$ôàë+žÏG‹”P°þ’‹Æ‚1šäW4Éâü±›¢TÑìÇziÜ÷d»úW^{Ç ¾bÿ'ÀêDú2 +endstream endobj 1704 0 obj <> endobj 1705 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1706 0 obj <>stream +hÞÌVko£Fýî_q)+hâ oð¦­Dm’¸ë³M«õ~@x°é:8Ü$ZíÚÙ{yøA²MH[©Nd†;pî9g掯 óÎÉùD†yÖ1T0% 4ËU‚”w¢ÎO~çäLü¨#+ á^dËd= LUb’þMGB&ióÃN—I’¤‚×ù Œœ3Йý“þÑŒSQ¶˜%¬æips's&9O£ äâGÿgL¥–©¦ê:te&:øƒÒ p(ÆÛãÁŒ§$3¸NÅ®l2Cˆœûàævɳ×ñ;ºÖCqÓ `ŠÚëõ€i–$i¥LCa¦QÏ£~¦h{óh¹£“(cN¯°¤8©YµÄVÖ+¶ª^²½ DUcºðŠ$‹]‡¦ØUdKV˜"(¢ŒßV7Hˆf’SãtUÆfë0Ñ`¦ð«XÌð2žf±ØE¾Â*!£ ¹9§(†IÖ«âB‹E\¾Šô*1¡…͵qû­ë ûoPÿÇ  Ì"û¥j6[WÖÊøWrÚËe9ðâù"Ï°2Ž5 ªLþ“©Ÿ±ºª-l*Å6°Š·®—U×c=£ÜÏ4À‡ A´mKX(DªDѨ° xÚýqÉ£x`ïÞ¾ ×iÊ“|À“,ÎÆ^ÅI>¦âT<ÝîV, qSŸÛƒ+°„šõ÷í4 0\"Âçrüïj~Kœ{„¤0ÜD™ +o’5ÆoÆD1;†7wñ,_У•šõ6CDšRäà B ßC²FŒFŽŽ¦bã­Ê·è6Åg¢©­Öù1ñþ{Ïs\จ +‡súG|át:MŽ¡äõ!þx !†Kfx»CÁ¿ˆþuÆçLÄ)óx•”>>!ñÑÁÐsˆ¬?¼rá0«¹0¾—dVÀ“!u†=Ÿc‡;;Îò ùËéyÎdˆñ‰o»}¼±ãM~!#‰&ÆŽŸ^onä´Á¡•€~p„qK}{l“ÁÃRB¿0N|8Äð\”êýÐRIØ$ÓJŠ3›s”órÎà¼Ø'¨¦–R-2G¦a”ïfiÅï‚Óiørzþïc¢·å´Cˆ6l ¾ÛŠ¿ˆÃO ϲ”.†}Œ¿sɤɫYYyOŽÕZ±»ÆÂtîs:ÛÔþuYûÎo¾ãNŠúß²|êÀ½‹‹ó¶‘©ÓÉI| +æ- +hráÑླÏç|Ì +xâ>e_®—y|»ŒyÚªÄ/1þ~äÇ£¡ã=çcHÉejÅÔÆŽ;I;åÁËyÚ®Oëíº¶í9ö™Ý÷¯¼r˜M¯‘0âÉ<_¼FÄÈqÏý‹Ô@¼â$ šDgÛÖ¨LÂ6«jkNN@Çi¦CEÿr5ãË'; Û‰¢¥Ùé(êüTé;°Í¨À0\à‰ªá€Ï 5›‡uWNµÑ6r* øoÄ> endobj 1708 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1709 0 obj <>stream +hÞìWÛnÛF}çW àÖÖz—wÙmV” +¾A¢U‹ThH¤AÉM‹ ”¿ìÌ’eJVÒˆòPÙÉÙݳgÎ\–’0ÕNI˜.4ÇWx`y˜ŠXK´_Cít AB˜hÒx‘žË»¸¦à€p® DáÂB[x¯u¸„ðƒö‡~Ù€Í=èöŽá¶`ÒãžžO‹h>O³)\d˸H¢û˜ý¾Á­Ìr+ƒ›¶ É¥cC”ãáÔØÃ8šÄDÙÞ¬#]îè)BBÿïhþ8‹ +·jŽÁ]Ýs¸í7Ìn· Üò„°JG•ïjÝç†õlÕ¡ ¦Dï×Út•"]ÀAË[ Ad¥]‘5í’ìUÄL‹Ûú?`É:6Þº¬cHOÜÐ &ñÛ[Û¥k¹$Ôm‘—¶ÉÓý˜Ã]ý-S#qi/)ë _=ÏHgå­ á ÃqI9ââU\(VÄå3£¥DÄ…Ö×ÆãKׯœö:¨ßñ4ÓáÉ/ª¬3WZeZÙÓŸÍÊ›a:}¿\`),b,ÓäRÿ‹.7õxÂWù_¥°k¨v°ˆëú¶Ë¢ëò®Sæ3ÝàdÇE«®oeŽˆÊ õaÞ$Eš-“±žäOË8ðÑ~ö¯¯}Ø÷‡~xq?LáÍãqvtR'ªMêÏñVŸè*ŸÄ³Î/³ÍIêc³È²ÒxvášÑàq4Œ–i>ÖÇlÌÎxøã +3¥ÅLè0ÖkÀ +V€ï£EµC€æ4I¸ Ø/»\ µûh&j÷›PÿÑë`CGo:O“g‹Ò¤á>ÚŸ#—î£9n‚ß¾Cëe¹|ÜÉýñà ~†½ø‘zBs\!ï þ #º GÛIPåŽ? Uqðò&}6"‹ãìŒx>Í+n8õøø…øÃ6CÊqò Ãÿ¨ÙÑ ÔŒ¨Ú¿&*A“§EšgHnÌö§À>°"¢RB<쪅ݚ"ÅUen,)W|báÃAÅÔSRZK½»«N‚æ)‘h¯šz[o#¥çA ½ßÈu4«vÚ¦óÏXª ~5 TUÑ-µ“Þþª]·"ôÿMåûk*1Œ÷ º_æÅÞ“éKï&¿Þ IS4·SN~ƒÙn½¶NdŸ|Ý>‘+ jÐàîfOÙ;”Öw£þÍõåï{R¹±’ú+ÉÒ~G”P“øÐÆ8ºú¯÷Š5ÚÁpû=å›ß/G-@a­E@sØîÑ4x¢õ…óñ€7Í TŸ©Z亦ñ÷Ë¿ aúHÊ +endstream endobj 1710 0 obj <> endobj 1711 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1712 0 obj <>stream +hÞìWko£VýίEZ‰ÛÄ7—7NÚJÔ/¹òK6Þ¨*ý€bðÙÝmUõõ_vðÛÛf½Òªªmž 3gÎÌ™+˜K÷‰óL25°„ ºm‚& ¤PúÁ•îÛ +(à†’¢‚À/žÛâu,Mp¡‚»”záBG›û,Õ¸B÷£ô³ÜkµÁà64î··0J™bs[Næ©¿\Fñºñ*HCÿ9`¿¸?b(­¥rÍ0 ¦pÅ4Àm.MrŽª¹ó=üY‚Ïà)e5Å⦡Khýæ/_A–ûm¹’¡×19“&pU«×ëÀu[½HÓT¹enÖ1®êëH±£å‹˜þ–œzNIpQ·7LZÅ(ÑjF¶ï3Mç†ü;¨Ba5/-VS[Q¹*«LÁ£]ØmJD·ˆ©Qš¶ÙúyÌä–üžå+AaO³ˆÕ¯œÄDtž® æTÕ´ˆ:Âb—X¨X„å/F +§°=ý=wþ‡·}¯_ñmy4“ÛD¿( °m]E/ +p•˜ÎbQ\Œ£ù‡U†ZÈÔ€¦qEþ•©×ä`Æ7([ØRó6QÅ;…êê¼nýLx³i¡}'p²ÀDD™Dþa&^¼~\Àwà÷“Y°¨}¿ÂÍj;Ž ãßÿC³ßŒÂpÍ' ü±¿Š’ZŸzžì±Ç]ÿDZó0LøšFñ*ôä0Y¯îàÀAûÀm N³ÛnOºÍ–3Æ™ÝîFO=ðd¸Ùxv¿9r˜¤¸þ‚ØÅ#¼À·˜ÚËJüèãု—£%¼ÜÞzì¤G¨¢D»'3!û9ý<7wÄEÁµÃ@x˜ya¸Î¢$Fp»;ió¹à,õWhŽ’ÜÑYŽ#ÄGBíÅûÌOüÉÜ—=9VJΓ÷ËŸ£À¥mù?øY‰¬‘SyÐDê>/•¼1íï*î¢+Ž?îËœí îs¶×©¡áÌ+yŠÆ·²P‘Â6Â[ÈØ“É9É ¹&€IÌÛêSBÏ,²¢ðˆ”Êd(HAsPÖbDÊÃÆüãd&ÿj5*ÄçíÏ kPÿÿôùú¦Ï„ðuoûÏ«$½ØV—ª¾=m§áI Dïu„6© $>ÎÐW˜C©WV2rè»9^9§; +€~:i ½Ÿ.4øÑ“4™qá‹m*c ƒo£Å:k¬Wo¤ãáÔí:£Þ”Ú¥1u‹=ås¿“Í€ Ò z#ÆŽã¶UÞ¡yN ®·ñu*??sB}×âÏJ$×ïÊÜÑ|Õß9Д¯–E0q;n5§ ÚÍþKÛ¾ý-Àv], +endstream endobj 1713 0 obj <> endobj 1714 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1715 0 obj <>stream +hÞÌVmoÚHþî_1BŠde³~7ñ]$ +Î5UšËçPu¾>XS09Û4ªü û—7»¶1¦%¡-'$¼Ìì>óÌ33¶U˜JÇ¿^«0Í$K›:`8èR&EÒk_:>SA?’T (~ñ¢:6é:`ë”P ü…D…PmþXêJ©þ½ô§|áIè÷Ûm¸JÕ!Ž¼œ¦áb'S8Or–Fá˜)ùo1”^„ÒˆnšÐQ‰j™à +H‹ƒãB³jì! ',…0™À(U:ªM,9FHð>…‹»9Ë®çK–Fl Ó³ˆiÑôn· Äp(5ŠDEî‰éÍh8Q¾ANÌ~­MW(ÒtN%'«š%YÝ,Ⱦ Ý ¦üU•Ž‰K[éhª£jD“5EÅ_§°wy†Í…ºJ—…m²ç XÄ–ÿP„‡ö4‹•ò•— ×YdK¹pšfÙ\9ÎÅ)¹ðZq.ÿ*ü('bC +ëëÖß]×=·ý?¨/x›(€n‡ËOˬ;W5Š$fo>/Ãxz›g8 +ÃÐu¢ÊÍ&ºÌ&¤êÿ²…mM´°…C\Ï·Y ]—t­¢Ÿù7[6‚õ|S L„–Iˆb•‹òsw?ïœÎš£¸‡Ã$áÕèâäÒ0Gs¼ äY Š[7«É41£»4Nò(£å*­@A´ª³þORqâQñgå?±DPP̱#d<<XÊéEñ_žœ$+4/zãñ*MY’X’ÅùC s‚œÆç]$#ô.S„á .Äð3x´oEðhÞŽ€‡Úmž’R†Á š²NŠÍ¡dÎs¨¡ÃŠ6‘ã Yš0ÛR +{¯ß¿½Kà]^Ÿûïá(k¡ùU´sš?ܱB .<|[H»>rf¿¡=a^’§•Œ_=_ðâöMÁå5®y ýtÙ@twpaóŒí’rG¼­vúòL3?žÛjq–²V,—tž +ÙŒŠö²gCï÷ï²ÿ¾%:Í}C´ÚŒ·šØKe˜aíy RèÙàå¬Ý~Jý;ÑAU{M×ò£á£:áÑý–„ÝRh±yçáÇo«C•‡) ³)CÿÆï ½^ëÙ¤ž¯@ŸyÍè¯òâ¾,ùGñ$¿ý!ñGçÿÍ!¤Åè©ØRø{žãË’Ýÿž‹»aÌöÿ*gºßS¿÷úÂÃGÄðÜCóõ!*å‡èi&°g½„€«Æ³I×yqÕ6ß#‚D¸Ž¦èhm>î +]ù §ûÝèjyѬ>»÷±x@¡ù;©¯Ûí Îañ2±çvÛ­Þ ÿ`´F=Œ +endstream endobj 1716 0 obj <> endobj 1717 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1718 0 obj <>stream +hÞÌVoâFýߟb)’]ŽÍú· m$¸;Ni¯QUú‡ kâ ²M¯èt¨ß²3»¶)¤­’ªçHñòv÷Í›·³ &,´«·…æÙàóœÀ›C.´D{iWoL0!J4ÓŽø2Ÿ…ø6gÜ‚h¥qdaÜA,šimÆ9·!ú¨ý¬ß ߀Ëè_õ[-¸Ë 3`¾^äñj•f e¥È“x&Œ_¢÷ÊV¡,f».´Mfz.DEé9,oÏ=ñ\ägs¸Ï¶é3OO‘†¿Ç«ÍR’wi®brs=`–†!0'àÜQizó½zóg–s0ö;¶œÄôsBiI8鵤Öt+µ¶«Ô~¶Ã\}7¶‹Cßh[f`ZÌÒ-ÃÄÿ¡Â9%âøäÔ]¾VØ|;+Áð˜¯ÿhÈ¡ð¼H6êÕ×-Óåäœey>YGZ‚J iùà­$ÄE +Íûèã¹÷?\öß°~ÅËäØ È~^@Sº¦£àEbö–K5§‹‡²À»P¼¶ÍLý7Ãò™­‹9«/@U¾%KØÃ[¼¿à®ºu! =UÏ4ÀÅž$Îþ‚s¼˜¯’áUƒêù¼/A—òœ^™lò4+“©ž¬ß–¯àºÓiv15ºr1±DßœØüùôTëÕªè±úTi}šÀTÇ Ëx'òöõR$é ;l‹ðj0›mó\då@dEZî¦úÔ˜áÓQØÁuŽl)|¼ )| ’ñ#bÉŠð11njµŸ_°WIÍÕbŒP &é{êy­–HôOÓüÅlå4áƒ~ÿÃx<¼ÃÛÉ(ú .‹ „_ÕAÛ×ån#”]â9Í-m¶<Äňgb˜•yíÞÙ£<ÔEø\.Tìu ~½>`ìžÑ"–…8gå™xUÉßs˜å¶]õ·eœ‹¸PjžŠx¦Òñéˆzãaïéà´]Ù#â]ƒëðˆ¥Ö(’rpf¯¨ ­ÖS¶è’¥S×Åå¢ñqdŸmËò¢Uÿ6Ñg]ésöߧóòáYæßÑ»—°þ>Å™ZÍKÿ‘rüºlâ_—ò¦âYæG½×7CüÞ†O^â¢gÕ½äa”uæ»ÿçDþ¦·a³µÇŽ^5[2Lu„£Ö„} ñƒÖ4ÙÄ3ü!Ž°<Þ¦-5‡{¢“¸z#—ïu%„+âB±V”ˆŸèMäù} &w=Äû£Û·²LN=S¤„ê`ªJˆ@ÉP°*r§“£,YnEF°x²hÓj!å¤HiËž·!E¸Ó,–~Õ?±þ`žî"í +endstream endobj 1719 0 obj <> endobj 1720 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1721 0 obj <>stream +hÞÌWkoâFýί¸BZÉnÂà~@¶‘Ò„$T”Eà]TÕýà‚ &Æ Ûl­òƒú/÷Þór R*••Ö3gÆç¾ÎOT—ªw}ÆiÉÔÁRl¨Ù&è +$~)(ý┪·*¨à%UÿáCµ-V·ÁÒ¦hàÌJ +²0¥†˜3,U˜¢(:8¥?¤vó fÃuõúì º‰¬ÚÌ–æãÄ›ÍÂx ­8ó“ÀúòŸÎ¯hJ¦4¦TT¦š87‚Ò$rh憻ç{#?/Á ‘+ªÅL)DJhþíÍ‘ŸrÞ¦S25f™žÉ ˜¦×ëu`5[Qj"P;_Äð™VÛYÄìÐ/bôëÜÔyFꀋ5{•rV5rguC8û›'ë5fHO )ª\1phÉMµUi’&«ø]à*ÅQ³(QÝd.°Ñr˜l2Kú"ó_àIÊôWšÇ”g­B‰Ó4Ӣ̑/vî ÕŠ|ùG¦WÉ )¬Ÿ…é¡ç·ý7¬ÿãm¼ºÉlJ¿’`­\µ& +p›WQ$½p<ÉRl…ÔÇÐu¦J_eÍbºäØJÿ¹„-KØÄ&Þô·!š®Îê¦Ð3 p³i!ImÓß +¶¢äAðŸlâ X$aœ®Ì—Ù9”W8´:·íÏÍÎu³ìÊq”‘›Ç<WšÂÏ \À>B#DK?ú•ËÈÂV̧ýF#^Îr`è7ã ÑäÉ•ÐLÏÎ\¾q{ÎO»fॷˆ»n ëß uãÜÇ1í´œûV'Ðï^]·:wÄòa\>?D¾ú…[¾îxO®?"Ž² ÆëÊÿŽjDTiæáäl) oˆ'3'[­H÷Lƒ} /„pẸ—_2=Ó ~”úXøtáxEäâèT_¸ÁÁF#L»{‰E~DEvåýå]ä{PF9#Â"Ì]Fè†ïâmá¬ÒÙ½ê]µÛÍvïs§ÝìÜ9÷—²•½ðH¬Ü¶p­›{‚0×uÛǤŽµ˜‰ç=It aá•F#Ê-L9÷Á:Ÿ(žû¦7qáíùã6ÌS€pÁ5lÂz'O¡ À*Üî|$|7³œ“Lm¡|ˆ¿~CFœ¤V¬ h‹÷³I»_ÏááÕ@ž©ñ{ùM«U¼ˆàÕc€ð'^«þ^ ÙãœË"]·*E¸§UIDëÍïèUg»A¾ÃÛÑ ›.9„'éMó&:Í'çǢζ|ÙñŽ\Ûù¶¼¢~ê®óZ¹äúÝašxé€N œu{íœï8ã{ôíD%¿ê3¢\Î3GuãV+â< [¥"MšÚðe~°eÛšhÊíìÓÑþÛºòýÍ·ê=gšÏøoW:Sðr—ß®É|ov–3LXä=ù‰HQÛ{"מü#c±ÕXÅ +3¸ˆ.AÙ#õ€ï(t`·÷‰¾ÛÍžó;ì99è^ÎP”3¤o YA|9ÃùÖÁ‰WØï ŽÑ›… +endstream endobj 1722 0 obj <> endobj 1723 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1724 0 obj <>stream +hÞÌVmoâFþίEŠÎnÂâ÷—¤­” >ʉÐ;ðÝI=úÁŸÅÙ&w´ºÔÙ™] LÚkS© ÅÎìÎ3Ï<;3‹q£Õê ÇWóÀò05ÈycÚx6Z¯tÐ!œ6t4üâC÷\æ{àšÓ Ó††(L³ÐŽM¦iš á§ÆG¥¼›ypÛº½¸€7¹ª{ÌSq¥i’ÅÐÍJžO£1W_c(S†2˜iÛÐÔ™îض%¤Càøb8ØMxQ6¹ÚÔ]æ( BBð9J—s^Ü lØ–É9Ìv€¦ïûÀ,OÓ,™¦c0×Ù®cþÌ°*ë(©cŠEL'Ž/$ñ-o«±Õí [Ó–lï"Õ´˜­¬ÁÐtµiã««6 ÝÓ f(†ªã__Ú JÄrI©7ùBÚ&«q ªÃ\å½*V¸´çE¢6‘¯²ÈHh‘®Fʆã’tÄÅÛp¡Ã".¨äJD\ °{ü{êù7·ý7¨ÿãmâL‡y$¿¶9€]éê–<€g‰y3ŸË—AÏÊ{¡àئÉtåA5\f*|¶ °)a×%ì`?6¸-»Îg¾#ë™^p³ã"ˆõØà¶&¢m’ÕÁ—V ¢ùŠÃ8Ê€'匣9‡{eN¾È![¥h¾G’»*µIšvlºD‡r:R¦‹Uy gçÙÏ.a­yÞü~ΧI^¯Ð|µÌË~”ò‘’ŒÔ‘z-°ÃoªÉFJÕíˆ Ü»E•"­ D-}ˆ©ó‰¡y½E®â:Ê?c7 +>¢ÀW1,ždøžŽíIí–ázÉá»=4o@@к@¨÷/>%åx†Ê*ü~Šþ8*8¼¼¸’y y¯ +ÁMÎN©|îsýzRí] n} n? :Á€b=…ñÕá†õá†á Ûï$&Guù×EW5?…¼-‚DÔñ®‚Ä«Ðd^É›«rGï}נ߆ó‚ü)­ã«îÂL\ƒUjåíL²ó’Ê…ìØ‚gERÒiùS€)° +endstream endobj 1725 0 obj <> endobj 1726 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1727 0 obj <>stream +hÞÌUmoãDþî_1TÙ½d³~·¯©Ms”Ü•Ä…‹0BÆÙ$>;² Bü þ%3»‰órÉ]Ê‹„+ÕÛ™Ù™çyf¦6a¦u¾™0«4ÏŸàØJ¡Mµ»Hë¼2Á„hª™püÁ—ø, À·9ãDKcÆ´E©Öfœs¢_µïõ~ï¸,€n§ûâ<”†°@/fe²\fù ¾ÊkQN“T?D_c)[•²˜íºÐ6™é¹Ý«”%ǃåírE2%$ù¾+¶é3OÏ0%ô~K–«…¨dÞ^¤yó=¤ç1×fÙasÎETr—N¤Ï,çÀ‰êP€-ȾÑ&”Š„€N'Ø +A`MwÖvØAbØsõ'°¸i´]<úFÛ2Ób–n&þ•Ý&ŽOB=”…²MÖi †Ç|ý[Cz„²—Uf´¯^䤳dËI8Ëò|RŽ°,Ô+Âò§AW ˆ*)4ï£?Ͻ/ ûo²þÃdl$?ß4 ™\ÓQ øWjÞ.ê0ÌfóºÂU¨®€m3SÿÅ°|fëb¶ó¿aß’#ìáïöÛUK²ÐSóL öpilg·ß׉pE"ËkX&†§§eq'fYÞ½‹õ…˜–Ýd±ø íIúsô´? +H[yUCŠæyR^ãE¼õ:YŠà´fˆþ>©XOb~ßM²KòÝ“jÎeic=›m˜Í8RÚ„MWe†ay=õi±®[p5¸íßÀ§U“ãª;{YŠ•¢^cp™WÑ5QO5ý#zwP´‘æP•î"©*ÂÚ(Cª 8ÇÊ ™ÄÙ)#o¢•¢Z'у͡y°HöHÙÞ×Ñ_ ¡ùQ »ý[´FRÌ’„˜ +˼ÿLQóC’îϘ”í[%‰ý€À ŠrþÊB›ÙBëÆ‹B‰~@’¿"ù5¬ÔÍ7û2¦cùWe±z½¦Ê-ÈZ0Oª‡²=-áó-ßãA=ÓŒm)Ä:º¥¾í/v/_ÎIJI¬ÇFlœÚ,lä~:8"šØA¸Q=lJ ½©r0‰ªÎ³ðõzßì¡Û\: +ƒIÐdO6‰›”ÏÒþE@ú ȨX—©¸ËèÍãíÝÞ‰V¡}—¾ÚO|<ªõGt)êòI]?üwqÙx0@{/Žá-\é€Ïœp·fãG·Üö ÑÑaîN‡VObÂâcø †!Ç•$k‘ Xd¹8‚C­›\ÇbŸ4‹y‚¬Zêéû|ÑŽ”%ßñ)¾êâüe8d­Ú¢ÕÇŠ´‚¸Ù~Ðÿ`²ç¶ +endstream endobj 1728 0 obj <> endobj 1729 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1730 0 obj <>stream +hÞäVmoÛ6þ®_q+P@\c†Ô»ÚmÀÚ8C‹¥5"a[6íƒPŠK6$¥M:ôí_åDi²tÀ€ÙÅÏ=ÏÝ‘”„Ò:ü!‘PvVàB("ð¢\­² +ëejK–t@à2 +yAè +.HkK +ÚÒskÂ….¤¬ßì§Çàó^¾zö f-“ìEÙæu]5%¼nzÕù¹b¿§o0”kB9Üõ}˜H.Ò#8œ`ƒ}ªò ÕBÞ\ÀÏ-›Èv…0½Îëå\uwšZ¾£¸€ûpÇ㸠á™ÃÃ`=ú¹ãíÌcz(;®žDùCrb’pÒ‹Ö™ ¶Ò_±u}Ãö$g®Ç}û!ÙÄÇaÈ&ŽŒ¤ÃÛacc÷HˆR¦fíÂØ.®Î{`ퟘžQÆÞv› _{ÑP¢µ\A™sœ ¤Ô—hÅ…ŠE\þb´”ˆ„`@axîý;ö¼§Û¿ƒúvÓpQúŪCëJÏà‹Äü~>7ƒÓª¼ì;Ü Â=àº\Úï™r×V|½V-:º…ÜÅ› î›]ó80ýLtBñ6\à¶@!‚D O,ýÃ4›O +HTd6 ì:?o“ï檨NhøüùeŽæ.ÉM]«¾½ÉìŒe þÔ Ó¯õjüTèU0a#ÌW—y7k{\p‹jÇA±l«¦/2»X\õð AûÙÉÉ4==ƒÓXÀ“Œ½¸uéß‚\Œ‡–¶Y pÁ¼S÷b€1ɾÖÞ\§è.uÎ`_dYƒ°8³/èm[jÄç"'Á³óm^+SšQJÛÙ~NIîÓ4½Ø`£} ßíï)¸­YÞã¹ÞŒ4 ÅZ´ˆRiùPÁ7†Úw›«šÐмˆþx;õØÒ8"ðÀZt[Ú + ÍÈ`¤ß´È–¡”P«‹Il—ôj9#Íw‰5}wKï“ +BÕxZê¿ŽÞéú”ðòŒ~“t:Ó3h-i›™²„0Ÿ k4kâ[¬,«ž±¸Sßµöùç‘n>¿~ÑVªé“¾Õý´ÇFCiJ„f\MŠAê:é©^mÿXq_ùP9–§3ÀŒ4ô'Px&>²;±ûÐþ¿oÀ±ß~+=øTÿø ý×éΉ±u®Ó)» Cè_ÖÉOÌ34k϶û _%\.ðÍ䞯Ç‹VUåî)¹ÿ:òÀ» éÚ*›n¸l|‹ú[€ *Eû +endstream endobj 1731 0 obj <> endobj 1732 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1733 0 obj <>stream +hÞÌVkoÚHýί¸ŠTÕÞ„alãÉn¥>Ī긨Þï‚ƦiUåõ_˜ÚtSiI„ÇgfÎ=çÎÜ4˜¶:ýs ¦YË2Àæt R´¢Ö ¿Õ9Õ@?ji:püÇæجç€mpÆuðç-Ž,Œwó'­6ãœàß´>*¯ÝS0™/;/a,UÍaŽ’Ne8ŸÇÉI.dN„ú—ÿ'†2ÊP:3LÚÓ,üW%¥EäØЭ ·'Â+!!L®à½TÛšÍ,%FJp?‡óÅLd¯ë·,ÙÚ³˜iÓ^¯¬ëpÞ-Þ‹N´Ïôn­³CŒ¢ݯsÓ+2Òìì:«DXͬÄf)ö,T.3•/ sMm›Ø´Õ¶®9šÎtEW5üI>º6%j,Ó»ZNrP-f+ïÔ¢G”¸Ìbµz•4¡<n9%N×-›2GZœJ ­iù¦ÒTbCI +ëçÖë®çû5¬ÿãaÅs(ý¼Z€õÎպ媅h!ã$%J—ùœ">òÜAO288‚y8‘iûÂ3Ågôv|¥RÄÓdˆh8j žl6±I™{UG([E…8±]‡ÙiI8NQN  ^0ÂׂÒÿ­Î÷…#ŽÓ¸O¦ôS¿#ýC1£í +±úìc¹Øh=ÙųíñŠdã{$ ä½ Û£©æq4_[¨zˆhÍ/Dóó\ûôÞ6¢ÛÙ> b;¸ÃR¿Uý¿«·UóãjéqB}õË œ¡¼iœJƒõûïmÒ‘7è#>"ífÅIå6åvœTÒ:aeÏš×$"\ͦ©¥ÀZâ¾çlœÞùãÆÆ£÷.â9ZÙY1#¾&_lhkr2]à¸ár@c­%Ë9ÞM !óXdÄÐh‡xˆäð†*l–îƈ»ž÷·ÍI%²Ç¨ŒŸ@ ¿jéYÎñýðpg½w:ð)œ-LÂDœ_S.$\ +!Ë%ýAjt†ð%¥M»ORñŽèƒŸ8t°ôöT_apu@þÜA³V·:¯V¹b–‰Ú™þj;¸±üܽ4 ÆñnÛ¾4²›8Ÿ\×–Ž +ù›ÿe±Z9šñuÿ%„ŸI˜ xê==.@§â&žûüuÓö½çàRŠð„w- š †¾Ûw=ŠµãÁáΛÃûÞ`Ø\gošC½y;òÝ"ârØrøöìE™Ëÿên4üö¯\¢:± +endstream endobj 1734 0 obj <> endobj 1735 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1736 0 obj <>stream +hÞÌUmoÛF þ®_A ¥öåNïJŽ_·Q8J6 U>9Úl)å¶Á°´9R'[vâ´Ý’³ëÄ#Ÿ{ø< ˜k§Wæ+͵Àã>ؾ ‡Rj©vj§#ÂT&püâCø |ð,θ áRãˆÂ¸¶0ѺŒsnAøYû ¿ŽÀa>ôOû¯^ÁûÒ>óõb^ÆËe–ÏaœW²LãD¿†oð(Ke2Ëq +˜p +Ò%p\˜n‹=•ñL–ç3ø¹4ºÂc®ž!$ ¿ÄË»…\Õ¸ÃPsì“s™ã3­ €Ù>ç¶JÓ5™çnö1fÚ{û(©cÕ›˜þVœ –$Ü´ýÄV8 [ËQl/cò™£ßƒÉ…Ñupé]SøÂd¦new)Û#¥Þ—…²ÍÖI†Ë<ýƨw¤²—«Ìè"_½ÈIè:]NÊ™¦ë‘tÄÅo¸P±ˆËß…(lŸ^Ÿz~§ÛAý»Õ°\æ“ü¼)À¶u…­ +ð"gö µ˜fóÛj…³°’8–Å„þÉ0=férÆ6д°gÖ-ìâ· Xàª~¦:»‚Øí€s L„7IÐ'5\ý®Ìò*ô´XW8zEùQd¼n{Ñ!Füe„¿káI]ÊjÑe\ù¢¾^{a¤Å8òTª£?èx,cŒKÊb˜Ïú瑾iÙ‹q‚ö?Âû;ù›„¤I‘¯*Hnɽ<Á0Œ™ÄKÙ ɮъŠ â*†õ,2àÏGŒ‰fr+·°‘žì$¶¥Gn)ª€n»B '8^‘¸Ñi?¤Í¿D<¥H¾Æ›´Zc5æ­,h¯•Ù‘eV¬?’YB¾^6Z(!Ðúƒ´¸ìM®G½~H¢OÇ“‹‹éÅ™CÝ,$‚öå3…yJ—/Wæ“Ż͂ö}UH†Ë=wêõBõ;ÈŒ‚póú@5]þÉ~¹÷®ÂÚûoáxG-£îO”AMyË÷ì wѺyôÈxJÒ,…H'Í[¼- —»W->5Ç4ÎçRáî&yø"˜ö&C¼¢ôãβB[j{4Ðü(­ZçEUËwñ½,‰É ¡†ÅÝr#Zz 6{wÜóï³~$c^¹w£‘æš4ËÑÜxcfùKÞgâk9žŒ†½ðzŠö!Mo;ÀÈ¢mÉl“ËÙY‘˺Ï6uzÈf§` +¢Gs Q}.å¿«”Ö@¦ñzQ}SíIAj7Þ'0“éWÕÆÚ( Ö +endstream endobj 1737 0 obj <> endobj 1738 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1739 0 obj <>stream +hÞÌWín£FýÏS\­ ’õxøÆI[ɵIâÊõ¦˜Ý´*ýl°ébN7Zíõ-{ˆ·ÚØ©T"rçrî9çÎ0fRûf¬Â¬,lî€áX sÈ#)–~ô¥öµ +*ø±¤jÀñoªc³Ž¶Î×À_HQ70æO¤ãœëàÿ%ý.Ýk0™½vïâîrEu˜#/gy¸X$Ù Yåq8‰”?üŸ°”^•Ò˜nšÐR™j™à÷+H‹ÀñA³¶Ø^N£Âl +÷¹ÒRmfÉ B‚û)\<¤Q!p]_²4f[(Ïb¦LÓ;0Ãáܨ„ +íbå3ÍØDw(Aƒ¨~ãMG8Ò4œµDV5k²ºY‘ý9Ttƒ™òh\UZ&>ÚJKSUcš¬)*þîlâªmØdÔ]¾¬bÓÕ¤Åb¶üA#QÏ‹Di!_y™‘ÏB-'ã4ͲÉ9ââÔ\¨WÄåo…^%"6T °¹7þüÚýÓþÔÿqšh€n1‡ìçu63W5ª¼JÍnšV^2›—.…"Â% ëL•ÍfºMÙzþ×SØÖĶpo×·Y-ºëXÕ|¦L¶l1¶ë›ã²@!¼IFs’UWrµ&‰î‹´4ŠLû„ç"í1 «Dÿ|w|üNð“pEõ°ÓGº5ØdM0ù£ÿôò$Pö â‡œ ²2äx¹*ß›ѻQß½î¾bÜ÷Þ]8+‚ {ó¦QÜú!0'£eÖâp•–——Y¸@h ʾ))‰AdÔ{ïcør·a>­•i—'^1æ!Û]ª·]¯OVÜu{ƒÑ \ѦÄeN¦rß¿‚¾[+!È}%«Å0|"…yA$0ûâ"Pàó·pvs1î5ý"±äñ¦JŠ%òšVÑÚº¶-@M‰.£kÏ,Ã!BAˈk~ŸL˹€hUó-~FVÄï}ÿÎf•oaŒ7„„1ºWê$Æãu—ÉþþWÎëVoX|y}m©`xÙhñ +DåTMý$œ‘=^;ôUýA÷¦Ñãu ¿R·î“> endobj 1741 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1742 0 obj <>stream +hÞÌVÛnÛF}çW !ëhµ¼“vÀ‘C…Í8墨úÀHK™D $•ÄòAýËÎ,u¥¥Z5T 4`ÒgwÏœ93CZ‡‘Ò¼îê0*Ç—{`y˜r¡$Ê»Hi¾×A‡(Qt8þàM÷\æ{àšœq¢‰Â‘…q ±h 4çÜ„è«ò»zÓ~6ó ÕlÁ]®éóÔé('“4A'+EžÄ¡ýý‚¡Ì*”ÁLÛ††Îtdž誢tˆ gÍŠx(rˆ³!üšk ÝeŽš"%´¿Å“ÙX’·)¶åcr³`†éû>0ËãܪÒt æ:ËuÌŸÖÖ:ÚCî˜rÓ_™ãKK|ÀEË[:Aju{¡Ö´+µ·±fZÌVÁàºÖ°ñÑÕ†îé3TCÓñ·_á%b¹äÔ]>­°á|P‚æ0W½×䊨ð¼HµêU§-Óåäœa8.YGZ¼…*iùK££$Ä…ŠV÷ÚŸûînûoXÿÇÛdL‡yd?_`ÕººUà(1/Çãê!LGe³PœÓdºúE3\fªbÈ–°ha×-ìà¯Ü®¦Îg¾Sõ3=àfÇEk=àÇá‹$ ™æ¨@í«)¼~)ü C‘4ÞŽE‚xL³+‘Äóqy~žÍ'ÝY< 8…s;Ú×ðÌÙY_ƒïëƵɭ+ÉWð½+Þ¬¸‘á5wQí@V„ÊAbIý´ä‘+I·ÚØW'6öá¶Zô'i0G{šMxÀ³ø† ˜âKïÔú/½èâžàxÃ…šd:6ËÓ¬Lúj2—¯á„à^ñö}çN ¸è÷³“׋@2Å­@(6 ñ“Ê”eºä˜c…Žš'•ü幆½›ö:ßÚaÒS=lvHv%ýXAéé9Ð üH æeq 'nÓ¬…0²=mü猸íP[½¨K&œ7êŽø:ãe¸ t?Š> endobj 1744 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1745 0 obj <>stream +hÞÔVmo£FþίE: {³¼CÜVº8N”ª[é‹Žª"öâpµÁÜ6:Ýê¿ìÌ.ø…sÚSÛ“ÚMd6³;3Ï<Ï Ž íüæÞ„E¥y6ø<'ðÀæP +-Õ.#íüÚ¢T3-àøƒ3ðY€osÆ-ˆVÇ(Œ;h‹fZŸqÎmˆ~ÕÞêߌ®Áe χgg0) 3`^,ÊdµÊòÜæµ(Ód&Œ£¯1•­RYÌv]è›Ìô\ˆ®TH‚ãÆòv±§"™‹’|ß•Fßô™§gF¿%«õRT2î(Ò<‹ù–ç1×fÙasÎU¨¬]bùÌr‘º`ËC¬~ËM(  %‚ÀšnÖvØ7‰a;ÌÕŸÁâ¦Ñwqë}Ë L‹Yºe˜ø*{Hu8>5) e›of5óõo y"”½¬2£xõ"'žeµœˆ³,Ï'æKÐ`!­Ëï¹TPØ>;¾ôüÄkŸ'êøšÀöX@ôóF€m皎à_Éùz¹T›i¶xª+…JàØ63õ_ Ëg¶.æ¬íÿ¦…}K¶°‡C¼›oW ]ÈBOõ3mð²çcg7ßÇ áTÁø`DïT¿¹TäÕF+5<}]fyÆzZlêœ â8?‰Ré[rJñ::í{Œî®àUèH'=˜‹´ÿÕR¤Ù]‘_‰4AófY_\äÉJÄzl´ÑÍ8–Ø*E½Á»e|°›1§’ô¶­ß¶Ú·:–Å#¨êÇ0+òáe¬#Žr˜,—hLf?GÏkñ“€Yàøàú)ºW½27\¡ˆÍF-ò )=ý*©ØÌcÞ·´‘ÝÀÓQ¬D]f¢:……Ú?£ù³Í4{3<•@c}¶§Ä ôŒ/ï•hûQàSZ<¤Ìð%U©ô?V5®Ê¿¸Xl‘Æ:Ú;¹×e}CAT±ÞÖò)±G:›ÛiŽö#R›G´^Ë4û·£}§ñ$Ca×YÞ#[ѺŠu £ø½åÊ7Äã¤(ëªYÞ þBp¹)4K²ŽÝG„¯ñû5Ï“7Å\,OŸhÆm‡hqˆ¦;\Ge™ÜÞáènYRˆh\%èÎÄÒ”‚ì”Cǧ¤º.h.D¶È•ûá`4ož¢Dï ’ ƒ/TúF$…`³Â@¥¢v¤†„ìììH8%–„sˆí +E£&y9 ÒÑ ˆÚg©±_§£Û¢ î£éÃÍÑÃt„ áÕ‚~½ (vzï¥ðíj`¢¹Aš*Œwò%™Éñë*’R[È[ßË"þv’þ™»âÍ÷uÙ°98K,+ÑQEõ{Û$mRd2ØçÓE~§áÁÿA”?£²ý'á0Èñå +endstream endobj 1746 0 obj <> endobj 1747 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1748 0 obj <>stream +hÞÌV]oâF}÷¯­´’Ý]&þ¶I¤JœÄ[ƒYp’J¥Œ‰·`#Û,éCPÿeïµ 6¤ALÔJM¤x83œ{î¹so¬¥pu7UÈ2LX²MtÛ$šL2&DÂOpu«…‘ ¨D†_x(¶E»6±4™Ê* Ö‚ ,TÖ æB‡Ê²¬‘`'ü*zÎ-1¨MúWýOŸÈ8“›ÚbºÌÂõ:N–ÄM +–EáœI¿_ ”V…R©f¤£PÅ4H0¨(M$‡…j6Ü.XFÂdAž2©£XÔc $ÎK¸Þ¬X^ò:`è]HΤ†I¨ªu»]Bu[–õ*MS¥–¹ß‡ü©ªíƒ=èŽVnBúsº¥%]›º½wÕ*F­V3*µÃPÒtjˆUV¤ŽKKꨊ­¨T5I¿r…˘ˆn¡Sã,­°Åv^ɤ–ø(•;¬Â³<–: WL4ºLWFçTÕ´Ð:Ôb×Z°X¨å/ ¿ŠB,R‘’Ãóäã[Ï ý7¬ÿãce4“Úh¿\àpu½*À¿³·ZU‹I¼|.rè…œAhUÄï’jQMd ºo€ú +[jy…Mèâ¦Áªëº´kV÷pØ´€Do\†¶€Dä:‰òG2«E´É⤈fb”n‹ÏäCßúǽ‘9¹™Í’ŸßÄIçÇ‹âqœ\_GiÆ—É(\³™Ϥ™tÓÜdíU˜?¥à›ü€ŸöKTGd&É1ós˜{ÎW€g"r–”õP1ž?°çþµܨ¼¤Ίð¦Íø¦„AœÌæEœ&ÄÉëzŸŒý@9Ë=Nw83žôÆ>àOÎsz«ë7énOz™áøù=\2{wΩÀô+¶ˆ/-þ0|A’4\p¡à¿x~opNÑ:|i_ª¨nð:ÎcîÎ죪q¯ïšr¯¬œ­0ópp71.S†dücc‚ElŒƒk'c-«ZQ>iãí +Ý_¤»8¸î:Ž4ÏøO#jçŒÛlWÐVŒËÔ16NE\]à+‰ãßÞNÎ]´"f-âK/Úã½Ëù:òˆoîë‰Ð¼Ž')žÏ+ÁÜ?+ÁóÛàMüoþôö¬ +endstream endobj 1749 0 obj <> endobj 1750 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1751 0 obj <>stream +hÞÌVkoâFýί¸ŠÉn–‰øAÒVb‰“Py ²¶i©*/1Ä•1È6›Í®úƒú/{ïؼ– `”JÉß™9÷œ3÷T˜ÔÎo|&YÍÔÁRlhØ&è +¤am\{Ïkç×*¨ÀÇ5U¿xSm‹5m°t…)ðiMA¦40ÆGµ:SEþTû]rk0˜ íóöÙôRYµ™-Í&i0FÉ:I¦ã`Êð_0•^¤Ò˜nPW™jÀ¯ +H“Àq ™kl/ ‚ä>¦r]µ˜)E Η`:ÃLà:¼fjÌ2QžÉ ˜¦7›M` [Q…P¡]L¢|¦5¶&ÑZ ‹IT¿ò¦)iN6ì¥DV5J²ºQýÈzƒÒ3hŠ*× Zr]SmUcš¤Ë*^•"®’Ž†EFõÒY{XŒrMfIYÌ„E<Í"¹Ž|¥YB> µ +§i¦EλäBgE\þ‘i+± …Õý»Ç}÷—ý7¨ÿãeât“Ùd¿RÀªrÕFqo’³ÇÅÀ‹&y†­…غÎT鳬YL—¶¬ÿ²„-M”°‰M¼îo£hº&kšE=Ó›‚4Öý­`[ ¥Ñ†’lJó(©ÿ‡ã¨%AæE†ÃÁ,΃I8”†òP^—¦A~\ üŒ ’|<”ƳEþN(ìu0î;ƒ;—·n~ë9þí{§žÈŠ—ÃaròN ò–`hH9€-R¾H£l›Ñåææ½Z®ƒÃñ®–uÖ=®[wÝ7”0âø åqðÇ4Ì«((¡ §“’1Ãøfòá)Ë2C%w«S+Í}yvµÒ5?ÈG‹ô×üo÷½×\CxŒ®2Tr­:µÒµ×©‘kGQ[º‡On4òcŒsnçC‡¯ ROl§"ïhõvžjöÃqéà!ÉÄc9¶T²i˜äþl‘Ž*½xÚ}Œ{žÓåþ]ßk;pšíåˆÇ+zc;Ïayð‰| ³*ä:ŒÿÉ[ï]Ç'b+n°“">ÅtÈ·ø× ¦‚[•×¥ØïΞ–{×5'KRoWòSmôÏ뻞/Œoéš pJR…W7¤†t¾Ì+õ|×Á8w~íy0žœfxY1Ù­$I˜#<^^þ‚¶Ìãg?L²(>Gùs†>Õk¯çÞûN×ïðΠÃï…®ú™-æ»Dç@-7øÛ”ÉÑZn<Œßõ»Wo e’Îv‰TÐÒJrÑÚIàG_ËJƒo/蘥ˆÁO \B?LDk/ëb1E0D%S€áÚ³³ Iã]s(Þêr§Ûmùßzu¾T„È„Ñ’v´S‰«$Bú¶nÚWRÅÝnð¦%Ä>ç¿gJ/øÖ½ãѱí+à‰æ¿£ë —9A͇'ë‹åËü¯òI ñoû¿ Š } +endstream endobj 1752 0 obj <> endobj 1753 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1754 0 obj <>stream +hÞÌVín›0ýÏS\UªKãÚ|h·I¬¥]'E Ú4-ûH™Rº­šö@{Ë]c!k«.M¤&R0×æÜs/a0Qχ & …`SL‡ƒA!•Dy*‡g „‰Ât øÅ slâ:`”P™B…Pcá•Ò%”RÂÊ5ðÏÀ"œžt:ÐÏ5æGOòh6K³ \dEœ'ÑU¬} ?`*C¦Ò‰aYÐe„q ÂS É8tÞ`âhçecø”k]f®¦ þÏhv3%®*–ébqœXˆn¸® Ät(5e™\'6_ÎcýD7[ó(PÇ('±üZ·”Äœ4¥‚-³*¶†%Ù^FšaK½2­káÐÖº:s˜NtÕÐþR×E!¦-”êçsß^ qb«µr&–ñ|‘j]ä«Î3!tY.Êé:·…t‚‹Sq›%¸üÑÄ£‚ˆ êëÚíC×'.Û ê ^Vn€Á‰#ä§ÕÔÖe¦Ü€­äô¦S9¤“ëbgaã0 ÂÔïšnCÇdy* ÛziaŽ§¸9à–0Ï/…7@!…×Pâb¼†Îng]â +üh| Ó©ñÃWKXTÉMžfE2R“ùmq{UÜë…~¯ç]ú¡x߃ý‰ïÜ ‚Ÿv¡†+6 •T”y|/@)WãÑDÝÅÎ+¨‡¨¬—„ñÀûì`ÔL1\‘]M#ðe¦üQÆëIŽG£ 'öVÖË念ð[u·þA‚8›×-‹4T6tFƒ¹ôNllÀï‡ïEx²©A–ŒPpœØÜ%'èÍîÂ'A¹Ge®9[A(¶£ª<Á2ý(/ÒhZŸ!æv»K_(ÞN"$dÚ¸Ïô½Axᥟ0\uœGÜ´f)‘¼Ù¡Z ?»û´$ý·;lf®GËj*ÃpÒòž$#v¦Õk2\}Y¦cQÄÞrk>‰V ÿœwÞš‡§þvý¸äºOE. øb|9\%TnÉ.ú#þuû+ÀŽhkö +endstream endobj 1755 0 obj <> endobj 1756 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1757 0 obj <>stream +hÞÌVínÛFüϧX@ÖÑùŽßŠÒ¬$.$GPØE•‹ThH”AÑ­ƒ Ô·Ìî)R²œØŽTLjŽœ›%%`aœœ½°Ø¾Á }p8‰‘¿ÆÆÉ©qj8þáA„ë†8œqâ•Á‘…q±øÒè0ιñ?Æ_æhx + ¡Ò?>†Ia‰…æzQÈÕ*Ëpž—I‘ÊËÄzÿ†[9z+›9žÁ„ïA<Д>‘ã‰í7ÜÓDΓd>‡w…ÕóÍ )ax+W×Ëd£x‡±áÛ,ð±<Ÿy>0Ûév»ÀÜsWªjW‹X>³ÝEt‡.pÔ"V¿õ¦«é.ºam‰^%Öñ´Ø±´—yæG°¹°:žVÇ¡°™m:–Àÿ\ãÕádÔ¤Xkl~sY‚å³ÀüÃR+‰Æ‹MfuP¯¹ÎÉgU-'ãlÛÈ9ÒVZ¨W¤å_‹n%!hRØ÷¾Þw|àeÿ ëÿø2ÕÇg!ÙÏ«l“+\Ý€gÙ3Z.õÉ4[|(78 +›GÀq˜0ÿ¶ì€9f2guþ«¶Š°CÜÌ·§‡®Ëº¾Î3àÅ~€$n3ßÇ áU¥03-ß¼ÎòÎ/Ë$Í&YþêÕ¹‰òá$ÏåDe&—ý›2*93g.Ì,øÔ$Õ#{Š?)®¯ äÍàgà=Èà5(~Ä·[ä7+ÜBñ#|g ¼ëñãí>ñO5=:†'éu‘åe:3ÓõMùŽ*<ºˆ‡Ñ$šÆçѨÿ{MFðbG/2ÕŸÆ„I¢¬ôÕâ®ôe3 %dS†îºIõíQÁ#ù1)*¾ûÄíWŠø(ús8…›o•ÔT…p¥fG +u¤r½-¥÷ Ë{³YŽ G­ëõ埭øªú¦N1#ãÂuHºA–¦už1lêmÃL1{jÆ秧ÑTG‹lxZºš: b®jÕCšÎïIÔV* šÜ‘Jýù¡aI±½ª¦+Ý᫺Ãm‰M‡Çë9¥}©Û{ÕjïôÐÐ K¤n›‹ð¶lµŽ»ÝŽôJx+ˆwó‚aA\åeüf0‘ÅdÅ×Ò¢wl§¥UÚRëB7·Ù<ÑÒ«KTæµJÌhô-nb|vˆ‰•žh-b=€ Á¹<“eò¬Ú½?ƒrLƒ¹»Ú«v¼Ý³3©”ìMåA‡>="ÔÚeþYÕ°"üíWAÓ„÷ô+¼Æ¨L½ï›¨†¸Õ…*¾ûí­ÛR3WÓV? ¾"}ÇÄчG¼+ª²iÂï´m¼Fx¿FÜþ[¬÷ˆþ¨A¸ï–ÏÏï±¼%kû²øÚÞ°Wÿ¨û"ÀoÍh¤ +endstream endobj 1758 0 obj <> endobj 1759 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1760 0 obj <>stream +hÞÌWínÛ6ý¯§¸P@\bšÔ%ÅmÕq‡Ij8Z·bê5¦ ¶Hr×bèí-wIÊv¬:i7$A ’¥sï9$'†R(r7'“bvÕÔ8 µÄp]ÊíOÄ ¨kË)]@áÀÑ8ÅÛ÷ÍÔE4&Ïê/’xÛg8(„µ"ô‹sR¦þÞÐWªO¾¹.¿®Š²ÉS;_®š#8hñø<ŸÇgñïñdc„'ðlGš1ùé¢õ+;[N弇ð˹̋qQÆøP)Kƒ#||œµ@ö9®d6Ì*DS»HIJ·Ñ9¤vË­ˆïr+b„;ܧÙ‰hÕ¸£ý+G7Nã÷#Ô]?œnÕ^õ=ñ{6i¦åÁm·|]£üJ’?U\Ê0gÛxqN˜½ë¬i}c¤qö*«µ„µ€‹b*[©­}źßI[¾¬°R/€  €çh⺺(ÂmÝrµXÛ¨ÐnÝÛãr#þ?fènê/ÞœŒâ Â*ü‘üV¢FË}§ÿ†Q”= ØÕÿèSÀïg †«f3ÿm½‰ø^áÿ?öÃ_“¡Žý$~Ý»Êî=‡ÝPëm?JžFÎÛÖTÎ)âæÝþ´kkñÎë¢Ü„N§L}±EXVM!k•/x ì®L«]é4«à± +ÏÛñh’¼‡=]«»ºc {A¼ÓŽîaÓÎàÎ'z¿Ÿ²ùJÂeV‚,š+ý‰%dP7•úeƒU‘ᘑ}Úš]_´Äåõ;EÝîÜš-L“Ü UOŽãcE{ž- ëÑú;á¿ –¹q) +endstream endobj 1761 0 obj <> endobj 1762 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1763 0 obj <>stream +hÞÌVmoÛF þ®_A*5öåô.;Û€&V©›:J‡¡U>;jmÙ8Ék"?hÿr¤Nò[í`Ã2` +`É#ùðá‹cÂD;¿¾3aRhž >À <°9H¡µËH;m‚ ÑX3-àø‡/3ðY'ßæŒ[Í4Ž^wP¥Z›qÎmˆ¾hô›ð5¸,€«ó«³3¸•†°@ŸOd2›eùúy)ä8I…ñ[ô3†²U(‹Ù® m“™ž QO¹ôÈ9,oã{(’‘ä#øEmÓgžž¡K¿&³ÅT•ß0Ò<‹ù¦ç1×fÙN˜pî¨D«Ü+%¦Ï,gG‰ìлRbökn:#@¥4DXÓ­ÁÚ®û&1l‡¹ú +,nm¾Ñ¶ÌÀ´˜¥Û†‰Ÿ\É]ÊÃñ‰¨[9W²Ñ2-Á𘯿7*PrYdFñêóœx®²åDœey>1GX‚ ÕŠ°üi)ñA9…õ{ïë±÷ß¼ößxý_« +`{, úy]€u皎*À³Ä|5ªÃ0›<”ŽB!pl›™ú†å3[#ÖôݾUµ°‡C¼™oW ]‡u<ÕÏtÀËžNœÍ|s L„×ITáÕ‡úYdyû§©@ñ8»Íònw!ç‹÷Ét)b=‹Ø@ÍŦM]⦷ëí±RG/w¥bZˆƒ +|Æ ™åå8ÖÇóeÙ‚”Ÿp:“VˆÐ ¸4Hf +Oë˜Ë'ó,gu6í‹/Y™>@¬o‚£¼±ŽV‹† øv,~š^ _tUr(ÞÊo¾º“cÑwžR$Ÿ×œ Ô?¨?ˆÂëpH±žòñÃÝw ûƒëçÍìÝáPïîßFaåÏrp8äàþÍ¥âò_‡z„F¬¤FôiëÒ/íÄEçÛ‘õ-šy¾œQ³Î%®”·§'KjÒÅú^ã¹$lØØhÆ/ ƒ ¹Ly@vvv á¿ƒzBÒÛ·C”G{˜k“ ªÄ|&J¹ÚAØŒF¬Ækßndy]›Æú¤9êí’8¤véç²bíhÕ옆ƒœqLŠÝ­„óÅ´‘¾[)R”K‚¥ë¢sZÃz·¨Í8®sõS£6ô$¢„m­¼ÈÊÕÕe¬c0y•L§“”úŠ–ÐïÒŠž {(^½D³Ê¦õô’ÞˆeŸÕ¶L÷»íǽpp×~¥.Ü*Ð~ +›FEŽ¶š•ò¦*Wª2Š“V‡ Ïn’•U×ït2þ´þ%À@  + +endstream endobj 1764 0 obj <> endobj 1765 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1766 0 obj <>stream +hÞÌUínâFýÏS\EŠÖN`2þ6¤­”€Q¥lä¸[­ÖUåÀœƒl³Tõö-÷^ ÀŠ­ºRI„ÇgÆçÜs?ŒãÆÅíƒã¼aàpL׃C&qã:h\Üh A748þáEsÖvÁ18ã:³GÆMÄ‚a£Å8矔;ï,æB÷¢{~÷™ª¹ÌUæã,šÍ’t ý´Y …úgð+JRJg†eAKcšmAГ”6‘ãB·7ܾˆF"ƒ(Á™ÚÒf+ R‚÷ÍS‘—¼^аÌ6š³™eÓv» Ìt97¥M[gŽ]›[û˜ÊŽQn¢ýurÚeJÚ€›¦[g‚¢Õ¬*ZÃ’Ñþ©†É,e:×Ô–…KGméš«éLW UÃo.q›Œ˜eê>›Kl´ ÚÌQÞ©åŽx–'j ãUæ)%º´Ë)sºn;”:ŠÅ­b¡bQ,_Tz”q@’Âúºs{èzä±Ãú?>VÀ°™KéçUÖ­«™²ÿ‰æÕt*~2ž9ÎB.p ƒiÊ'Uw˜¡ˆ« jaG/[ØÆ)Þ ¸%§®ÍÚ¶ìgZàaÛAs3àÇðÊ~â…j+Y’q¨ÄóeÑ„‚ï®Þ#îùpšÃe¦'M‰4OŠU ñ_¦"Nzò¾Ó™F+ ÛVÑL„Jª¡z¹ic‹r׫Õæ¤x*-à ~~‰—ŸqI¿ÍMðræ‹a‘—ÔxüüS,`sê,¥äÄÂŒkºVìºeÕÔ*óEOÄ×bœ¤ÝëPA#Y7š">}Œ†ƒÕBü%`Ø„OódtFI[YÈïï8!½¨ˆ(KËÑn# 'bˆ%C¨ w’»Çâ½ÿöÞóƒ÷=jö›þ ôߤçý=|¤óoá¹4ŒøÆ3¹ÄÅY\à⇧¹>ÍOšµˆì&Òítè¾ +)Ä)i˜åu;ï>_QÊ×ÁVÒƒùç¤ÀÃIøJx„8Z¬…÷Œ9™Œroúo:†ëÕ#ÞÞ­çSQáÀc™ˆ>^’ó¿KÎ÷®îþ½ÖÃwi=~p{¼ÚÎØ'1”¯ŠÝRL¢|@6{™¬Å{\>´ÎéxCáüášiËù7ð)#éX­ï_ n=r]¾ 1–¤4³Ä‹7Ŧ«ñgõ«®XÀ‡ +endstream endobj 1767 0 obj <> endobj 1768 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1769 0 obj <>stream +hÞÌUoâFýߟb©Òn.lvýcm'j¥;p*ªKÛ:W• kp Ùεètè¾eg½ÄBÔö¤ /³;oß{3ã˜Y—ßÌ*K:àóÜ@‚áTVf½‰­ËâÌ6püÇ|à;œqâ¥Å…qcñÄê0ιñŸÖò6ºнì¾zƒ’Š€d5+Óå2/fÐ/jUféDÑ_âð*Ç\e3Çó #˜Ä=)58.l¹ÃªtªJH‹)ü\ÒŽð™$9BBôWº\/TÕàF±%mæK”'™'ÙN†ÀÜ€s×m´7›(ŸÙî£MtGpšMTßz6Ž„€›nð`„&+¼-YÇ3doSê¸Ì#°¹ —>íØ"6³‰C~ó6.|××F Ê•‰Mï'5PÉ|òmv”‰—UN;È—¬ +ís£–kãl[úÚ9Í%ØrѵÒ\¾Pª‰ø`@¡}ü|îyⱯƒú?>ÖÀ‘,ÐöómÚή)ÀrçëÅÂ,†ùl^W8 +•Âp&ÈGjûÌ!jÊúÛ¾ݴ°Ä!ÞÍ·g†.d¡4ý¬xXúâîæ›ãX ¾Ñ|¨Ü.`]®Öï*Ëu×J²¾º*5³„$4¡×»Öô´½!Ï !úì~.&ÎÓj„áºÄw„ÉoÒãó‡{³&)/ê,!Ùê¾¾€3ø¦:»€#`Â`øéz*[›½=œ$)ÎN•ª¾ÇSe¼smùLãßµ*‡qa‹m½MÒCW0qµî©,*¦Ý7 A^e7],~Ãx:ù#Þ¬Õ¯ +&ðq•OÏaÝȾMÿG,h/­S¸Ÿb4¡ðiŸÔd®&n2yYXt׃ÁðÝ Âø0÷¢›þ]?î¿»íK>,щÚH¯4Z=mc|+ZËá ûO×:üD9–[ìÓñö)ôK‘`· Êz´Y·{$÷ä­´–ë?rpÔ#l3´ 7°Ù³2¦5\]épºT§tüa*jèbx‘VÕÉ Ý·¯õ˜Œ\ë"îQÒ² ´u÷€%yìÑóŒÞkðÍr©êrc’·às¼FãÛ[ŒGñp ïápšð3×FíŠ&Ú}ÜnÚêenã—¹éòe”Äh[ä‰±æ –hÃY3r˜}È]é2UêÉmÇÐ Œ£ãcf˜Äùs~ÀÎ’ÓÝ 1Ì¿ž=Ãëø1ÿÆDÝAâÿ¬¿Ç‹’Ü +endstream endobj 1770 0 obj <> endobj 1771 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1772 0 obj <>stream +hÞÌUmoÛ6þ®_qP@Ll†Ô»šm@â¸EŠ.5lm]W ƒfÓŽ6[6$¹]6ôõ_üÚÝÚ“‹º;>¼ç¹;IÂÌ::’0«¬À…PDàE¸JeM­«Ä:"AB2µ¤x“QÈãBWpá@²°¢pá¡-[].„p!yk½¶Ÿ÷Ÿ€Ï#è÷ÎÎ`P2ñÈ^ÎÊl±È‹Üµ*§ÙX±_’gx”kŽr¸ëûЕ\>$×2 p\8Á{¨²‰*!+&ð²d]òÀÎúf‹Õ\U·ŸX¾#¹€ûpÇ㸠ášÃàõ#îx{~”‡Ôqµéoĉµ$1 Ó‹Z%([é7Ùº¾ÉöûŒ¹÷í{p„d]—!ë:2’wl—IüÆ/$¥åÒØ&ëq ,à¡ý#Óeìe•³.æk/ ZÓ¤œã!IG¹DM.T,Êå=£­”H6÷ƒÇÝ?1ìë þÃtÜ€G$¿h +°i]é™|‘3/çs³æ³»ºÂY¨΀ëri¿aNÈ][Mx;M ‡Žná§x;ྙº˜ÇégZ`p"ˆ·pcDDCB_,ÀÅ]V Êzt¿€oA^l›Ð'æ×– }ǒ߭䔞Ú%äSHmDÙ`¤L4n¼¦è]•yQOS{º\×8¹HÓâ$e»‘-P…/€îws5ÍG¸züGhÎÿR©²OAÝüÜ'ffpõŠþõ l´ïÂWü!£½s€mÔÑ×^Vhnv¾29m4s¹ÀÒ fÇŒÇpùvÕø~+´vÂßGr?Dløâåí—IÒÞ¡„Í®e‰çæXKq9|crGûëb½ EÕäqggGÒúÓ£$'&PÞ +Q[iÐcD­Õm¶ÀŠå){@Õ=aÑÜ–¤V/Ê\õ¨.u†ùVäÕWm¯¶•‘­¾D +·ïîíß^#! N€Ã6,24/ÔA½÷ŠVªzAe·š8û8‰Í4¾¶‘T+ܘñ›z¥fyÑ»Jm<ºìes´ÏËÆ$÷+õ«‚qÞ,óÉ)i¸ªËP†?à›ã:«3Rv=IÙ‡{j|§Æ ‘R{ü±®ý€4£Áeïæö)jƒŽ“Ϥÿ ûâš5Ú·Äu1V‡æÙ)nÓ{6ÐáZÒ>KD¤—Ž9 µ›“¾jáûÅd½¶–(ü¨ì뉞â/]vš]z´ëêÿ×Òã÷ë¹ô“¬ +endstream endobj 1773 0 obj <> endobj 1774 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1775 0 obj <>stream +hÞÌVínâVýÏSŒVZÉÞ„›ëo#ÚJ •+Bíîþ¨«Ê…kâ.Ø‘ aWU¨oÙ_ó™’»U›D±3sg朙37h0i\½4˜” Û‡»`º6 +ÑH7a㪧aÒÐtàøÍuXËÇàŒëγ0n¢-5šŒsn@¸lü¬ô»=°˜ «ÎÅ Us™«ä“"žÍÒl^6E„úKø#–2d)–Mi¶á­LiSr|ÑíMn_ÄcQ@œác¡65‡ÙJŠ)¡û9ž=NEYåí† [gŽôlfÙÀt£Õj3]ÎMI´â^9‘>ÓÍ'v‡•Ù¯{Óª:ÒtšîªV³j°†%ÁÞŪa2Kù:×Ô¦…¯ŽÚÔ5WÓ™®ª†¿¹´·ˆ‡éP£†E.mãÅhªÍåƒZy„´eª6¯’gÔçŠ-§ÆéºíPç‹[c¡Y–¿T +% Ȥ°~îýyèyä±'ëÿøX5Ãf.µŸ×X+W3å¾IÍëéT¾øéäa^â*”WÀ0˜¦<©ºÃ EŒÙJÿµ„½’°K¼ÙoK.]‹µl©gzÁÃ6.anö›ãZ .I¤Ùæ©j+´È›H™Š¤èÄÓéoñèSˆö/âW£K@G¦tìš1ˆ^¥ù'Ä|£uÃb©ðÇFÂõí–ÚT ¥íʾ«Œ£1B㧠EÊ(RÛ«Xƒq$XÇ&¡ÌæI¤$ùb~ oBïμ¢ì :¶âvj&yA5#%…ï·!…ïjèÍ(ßbÖ+òÙ0Íʈr@zq©Ûøð+ÁƒX~»6ôüû»!Ú½¼-¡M(.·'2+ÖÔ¶:ãëÂüt@áýÐÐ`žÃ™çh?æ@6ß º2èw?jðv²ùÁÜr+}‘–"˜ +´.ï3A¨/÷*P&ù²„æ©X†Ë¼ +Úò¡£Ê¹  +qFÊ^¾((jlš@¤L눇¸ô%ø¥^M„"N쎾ÓìËf9Ö­YöˆÑÓD‚ôóÁÞâIdDZìáBSHe?’dïºß?V‰Ìšª Hè6‘˜O‘ÀVÊã%°jÎIØî΋¨[s¢¶ˆ|# Ðñsš¼EËt$£ê›úE®òž%Œ•î½Aè{ƒÀëT”ÑW&þS E€_;šJ_7ÒÜk£IVPÿËÑìýçÑì@=w4´5~pì­°ËÐv/…£$çÓ²ÛùÚƒ?¨/Êçý&í$4íh~'8á^ÛeÐ9‡Aç%}ø¡öo{øÂò +endstream endobj 1776 0 obj <> endobj 1777 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1778 0 obj <>stream +hÞÌVmOãFþž_1BB²ïȲ~w餔 +Š—öÃ¥ªL²î%6²RTõõ_vf×ÎË逵UŠÍÌî3Ï<3³¬óÖéedÁ¼lù<7ôÁáPÈVÒ:­Ó ,I˲ã>¬0`‡3nƒX¶8¢0î¢ML[mÆ9w@<µ¾Wƒ ðX½ÓÞÇp[˜VÈB#Ÿñr™fsf•,’x*ÍŸÅÊÑ¡læx´-fùˆ¾†ô _lƒ=–ñLg3ø©0ÛVÀ|#EHü/²T¸ÑòÜ&ç3Ïf;N˜rîê4}›~ãÇü™íîøQRÇQNL-NGIÒtºa£±µ¼š­ãi¶×±é¸Ì3žÁæ–Ùöð50Û¶Z6³ Ç´ð»¶sJÄ H©Û"׶ÙjZé³ÀøÑT©íE™šmäkä ­Ò夜mûIG\š ‹¸üeÒV"€…õó›?_zî¹ìßAý/Sp|’ü¼.Àºu-Wà‰Ù],ôË8?T%ÎB)q‡YÆo¦0Ç3Ö @Ý­ZØÇ)Þ ¸§§®Ã:¾îgzÁÅ~€ îfÀ9Ž&Âë$ M`b˜¾Q¥4ÌíÏqy/ãhbL̉¹iFè«=øIpËc‘fU21’|UÀ‘^G—h‡‹îÕÕ8‚ã9ýžM&Ùщší@Ëô§ œPT4G7™¤Ø';tŒ#ñ”kVgÛp/dÐÛÎ`ùMâ½÷ï½F¼·?ñ»,®d&Ë͇ӿuÅ`4ˆ0ƒ²¦[ø«œ)À›tÆi)»Ue)û¡lÆÃhu…°¶ôDûÑFŸ¢†Gk£ÝÛr«MD³²ê‡wçAMñzI PjÓyP=D>yW)ßéëíÆ(lMí{VA 9?¨ïáNò¿Â=Q°qW[âõ/òLÞ¦TwQ¤ó¹,öM„FQPϯýáõ` oFu6Çhž›ÜØû¨Q<ÐLTjâù±9uбYWi÷Z¾gKªm„¢€µ8›.§#n+ +)÷¯zÊß-Þ1…ZÅ] ñ;­*þÛ&E¾TKHÂâ óÝL7FèØ*ÍX—•Å…ÛâF}Pc†öKRï›-…¬Vè*2àk;§»ƒñ§)~¥KÃ8ÞAôýH_+¾X?XQ©ÓªìOŒ…LŠÜ}<ý*ž©Äò Ó@Gz—áª@að­¶á ¨W±²Î&&üñÝ;ÈôANqÁW]¼iÃ}›Õ y߆"Òù¢çì»èM¯Vûóšê§OØÏTCäw—rï>†~WÝh šz}”a— 3‚G+FÅË·ºd‡#a5´}µ¼×MøòÿûrìÅñ4­âlº&ÞBÿ`?Ϫ… +endstream endobj 1779 0 obj <> endobj 1780 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1781 0 obj <>stream +hÞÌVín£Fý笠Š´dãÉæÃYi%/ÁYW±ãÚ$Q»®*-Æ)ÞF«>Pß²÷6ØIgµ•šHñäÀÜ{Ιs1 +,Z§SiËÐÀät,4‰h­në´¯€nÐRTàø‹Še²®¦ÆWÁ]¶8Va¼ƒ˜ë·ÚŒs®û¥õIºtú 3 ìSûí['²b1KZ-o¹ ã âL$ç ù÷l¥•­T¦é:´¦:¸çeIƒŠãB5êÚáÍE^<‡ÛDn+&3¤K‚ó§·¼DZÔuÜ–¡2Ó@yÓ `ªÖívu,Î;¥ÐB{qå3µ³sÝ¡´â"ªßzÓ-é^ìX#ˆ¬¢Wd5½$;ôd­ÃtéT®Èm—¦ÜVKQ™*i²‚+\!“Œ'«›ç~²ÁLéF.®ˆOÒPn#_i“Ï…ZNÆ©ªa’sÄŪ¸ÐY—¿eÚJDL(‹Âösïßç>¼í¿©ú?¾­8Í`ÙÏ«Ø&Wé”ð]zö¢¨\LÂÅ]–â(¤G@Ó˜"­eÕdš$æl“ÿ*¦ZDØÀ!®ç[/‡®ËºF™gZà͆‰E:õ|s Â+ôȆtŸ„q̤`•g'p`÷Æ=ÄíÛÙŒöU¿7éOá  ™Kðn6‹Nê¸êäÑù¦*êªÇaÖ~‰ ¼ŽC„³ôìÌ÷î=?̼Ø3i&ÏäwE!÷¸Ø0“ðδíÎKF›Â´±·¹õ9Ag:@|Zê¹ú8D%‹¤ú¨U‚è^Ÿ×p¯¾ˆäpzã«[‡”Áppy9¸í¹nÍñ“Çü¨JÝã5Ôì“ákS”'¨lÑ~&ùÉ;bž±ëzê £iõø]À›0Hiɸýž¤ý:ŠiŒ½åN ö¥l’µ­Ô(C¹©*­½(:ûdD°¯«%º7ÏïQ*èü^ØÞïoSøm¹x"kAûÒp×(Ó€xˆù*ÿ ˆóeñ€«Ühœ(Â_Ÿtò…Óý—ýq&Óz¶÷%F$ž;¶oñ_Mµz}.¡ordš%»¦ Þœ§ +ô’cŠ=¾â‹60aµQ刺É}ûÿ}ÜJn­k:RC:Ð8|…ùG€+'0Ï +endstream endobj 1782 0 obj <> endobj 1783 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1784 0 obj <>stream +hÞÌVoâFýߟbŠt'û›õoCš“rDW¥×ˆsRUçªÚšøj ²MÚ¨êê·ìÌ®ù =*µRAÂöììÛ÷ÞÌ8±abœß~´aR !À‹p9”ÒHw±q~cƒ qjØpüâÅŽBÖ t9ãÄSƒ# +ãÆâ‘Ñaœsâ_OæÝà|ÁõùõÙÜ—–±ÈœMJ1fÅÞµ,S1’Öñ7x”«r˜ëûб™ø÷5d@àxãkì¡cY‚(Æð}iuìf†0øML繬î 6|¯‹âæÀ·Ûíó"Î=-3pX,×Q?s¼­u´‡ÜqÕ"Ê_™ÓU–t½hé±µý†­ëk¶ß +Ëõ˜o¾€Ãm«ããmhu;²昮eãowHˆ’S÷åLÇÆ‹Q VÀBóÑR+RÇË*³:Èלd´’ËÉ9Ç B²Ž¸D *qùÓ¢­D$ +«ëÎã±ë‰iÿ êÿ8MÀ XDöó¦«Öµ=]€åÌ«<×7ÃlòTW8 •Äp]f›Ï–2×”c¶€¦…CGµp€S¼p_O]—uÝÏtƒÉAˆ Þ²­9‰à$ÀüÊ?S›¹Œ#‰#ƒëŸÌ¬¨á9³S\¿KÌ\¦åµÈóŸÅè—øe.1þ“„Qp!{ÌÄÌmÔA™Ù*è‹ZÀbœXðûº›}²°OÎÁèIŽ0]¡%æ(±.–i+6”†p˜–‰ÄÄ6²¶ÀJY/0«,€ë„øÖy¢Äá"—»21Nܶdb†¥RK{ôʥÿ¤˜ŽÃ<Øú‹éx!вjÓž‚7ÙJFcÑÔ$æË)¨+†wÄß1—„XÔib¦³E݆Öãû«áÃÝ^a¼jµ—;oí¦ç^¯SDL¬cÅÈRHLÌÞ  ÷zO¢º•…,EÝàl2ÃOŠYÈo“Ü> †¿Š­-§œ×—©XäõÉÇõ7W¿‹[_v.IŠÖnÿÚK7¨ÀÔbX« +.·\¥¾nx¢«ª0Ii9æm:+©‡3C,~| ËT7Œœ­:p­ñ™´PÒßQÈ)¡ñpØÙ¯Ú>Ýl@œGºRão8„Ù{·Y£•J¸¼^¿†¯þa¯/&Ü¢'h[&†Ó-§)…àVÓ³VJÅM-n"ßb‰…Vïuåt§q>>͈C>†'ñ,‰иT +¶ ØfÌØfÓ¬Q‰j^ɽú5§aõwJqE²)üÁm°ÏSÅ‘ +¼ªà‚¨4ó®^à[Uèõô+òƒšúl=öºÚÐ|£ö§Ž%Ú‹ÿÍU!à-Y¼'ûÐhÂýð»{Œ†ñpÀBÚ³ëÓQmÈÃ+ÇÆçp±Ñ;ŒxUU ü÷ŒÃ¿â 0hÁè1 +endstream endobj 1785 0 obj <> endobj 1786 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1787 0 obj <>stream +hÞÌVoÛ6ý_Ÿâ ¨”Ú õ[N€q¢.R¯u”´C5 ªL9ZmÉä¤Åдo¹;Òvd×M,¦ýHÞ{ïxGÇ„©v4¸4aZkž >À <°9TBË´~¤=7Á„(ÓL 8þáË |Ö À·9ãDscÆÄ¢Të2ι ÑöN¿ŸƒË8;:{ö ^U†°@/§U2ŸçņE#ª,I…ñ{ô©lEe1Ûu¡k2Ós!:W!= +ŽË»=ÉDTxS]ÓgžžcH?&óÅLÔ2nižÅ|íyÌõ€Yv¯×æœ;ʨô.'Ñ>³œ­IÌ-°å$ºßä¦'3Òœt‚u"H¬é®ÄÚ®û21l‡¹ú'°¸it]úF×2Ób–n&~®p›|8>%êUU*l²L0<æë׆œ +¯êÜè¢^½,(ÏÒ-§ÄY–çSæHK°ÒBgEZþ6h+ ñA…Í{çë×Þ߹쿉ú?^&ÀöX@éç«ØT®é¨xÎÓÙL Æùô¦©±j-`ÛÌÔo Ëg¶.&l]ÿ«ö-YÂ6ñ}»ªéz¬ç©z¦.ö| âÜ÷7Ƕ@#|eB>†‡ƒ<ƒX¿Í“ñr&º¿ÌD–_#®¾/ªrqÌ–"ÖóØÀ üØÔ©KÉ9߇O¶¨ò¢Éb=+—MRÃA¾‹ErÄƉ¤‰·£×wy“Þl Fœ¢µCEŸ‚ÂäØ€¿ö†Â'MjOÇO•d„[ªÇáé|MÈÖó¾É„O&î'Ž¢pŽ‰ë¡?Lw¹Ÿî2GƒÇuöz?Õë«_£Pò!þÈ”£ý”£«—}•ËMõÖ°B?ÑŸ­E.Ú)ô“8.ÚÌúö&’‹›Ú;ÂÑ9<©iNì6}A˜ªºHæØ_ôE%ZQÀ78§6×%/6©Í¸i™«»L]ït â#%Nu^gýY²ê,™ÍÞ'ˆ§¨…þv -‹ºôá¤:Ä}M]t€^ÑåéçI“Àr²i´Ý«!½).“!c=ݱ°')ýp0…o#P‡ÌjGÿœÿ=ö'%‘ŠmçÒ6Ý'Êùm™OaÑTdaåø'í¶µ

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

Contents

+
+

Preface

+

What's New

+

Related Documents

+

Typographic and Syntax Conventions

+

1 +

+

Introduction

+

Overview

+

LEF Reader Working Modes

+

Comparison Utility

+

Compressed LEF Files

+

Orientation Codes

+

2 +

+

LEF Reader Setup and Control Routines

+

Calling the API Routines

+

LEF API Routines

+
lefrInit
+
lefrInitSession
+
lefrClear
+
lefrGetUserData
+
lefrPrintUnusedCallbacks
+
lefrRead
+
lefrRegisterLef58Type
+
lefrReset
+
lefrSetCommentChar
+
lefrSetRegisterUnusedCallbacks
+
lefrSetShiftCase
+
lefrSetUserData
+
lefrSetVersionValue
+
Examples
+

3 +

+

LEF Reader Callback Routines

+

Callback Function Format

+
Callback Type
+
LEF_Data
+
User Data
+

Callback Types and Setting Routines

+
Examples
+

User Callback Routines

+
lefrDensityCbkFnType
+
lefrDoubleCbkFnType
+
lefrIntergerCbkFnType
+
lefrLayerCbkFnType
+
lefrMacroCbkFnType
+
lefrMacroForeignCbkFnType
+
lefrMacroNumCbkFnType
+
lefrMacroSiteCbkFnType
+
lefrMaxStackViaCbkFnType
+
lefrNonDefaultCbkFnType
+
lefrObstructionCbkFnType
+
lefrPinCbkFnType
+
lefrPropCbkFnType
+
lefrSiteCbkFnType
+
lefrSpacingCbkFnType
+
lefrStringCbkFnType
+
lefrUnitsCbkFnType
+
lefrUseMinSpacingCbkFnType
+
lefrViaCbkFnType
+
lefrViaRuleCbkFnType
+
lefrVoidCbkFnType
+
Examples
+

4 +

+

LEF Reader Classes

+

Introduction

+

Callback Style Interface

+

Retrieving Repeating LEF Data

+

Deriving C Syntax from C++ Syntax

+
C++ Syntax
+
C Syntax
+

LEF Reader Classes

+

Layer Classes

+
lefiAntennaModel
+
lefiAntennaPWL
+
lefiInfluence
+
lefiLayer
+
lefiLayerDensity
+
lefiOrthogonal
+
lefiParallel
+
lefiSpacingTable
+
lefiTwoWidths
+

Macro Data Classes

+
lefiDensity
+
lefiMacro
+
lefiMacroForeign
+
lefiMacroSite
+
lefiPoints
+
Macro Examples
+

Macro Obstruction Class

+
lefiObstruction
+
Macro Obstruction Examples
+

Macro Pin Classes

+
lefiPin
+
lefiPinAntennaModel
+
lefiGeometries
+
lefiGeomEnum
+
lefiGeomRect
+
lefiGeomRectIter
+
lefiGeomPath
+
lefiGeomPathIter
+
lefiGeomPolygon
+
lefiGeomPolygonIter
+
lefiGeomVia
+
lefiGeomViaIter
+
Macro Pin Examples
+

Maximum Via Stack Class

+
lefiMaxStackVia
+

Miscellaneous Class

+
lefiUserData
+

Nondefault Rule Class

+
lefiNonDefault
+
Nondefault Rule Examples
+

Property Definition Classes

+
lefiProp
+
lefiPropType
+
Property Definition Examples
+

Same-Net Spacing Class

+
lefiSpacing
+
Same-Net Spacing Examples
+

Site Classes

+
lefiSite
+
lefiSitePattern
+
Site Examples
+

Units Class

+
lefiUnits
+
Units Examples
+

Use Min Spacing Class

+
lefiUseMinSpacing
+

Via Classes

+
lefiVia
+
lefiViaLayer
+
Via Examples
+

Via Rule Classes

+
lefiViaRule
+
lefiViaRuleLayer
+
Via Rule Examples
+

5 +

+

LEF Writer Callback Routines

+

Callback Function Format

+
Callback Type
+
User Data
+

Callback Types and Setting Routines

+

6 +

+

LEF Writer Routines

+

LEF Writer Setup and Control

+
lefwInit
+
lefwEnd
+
lefwCurrentLineNumber
+
lefwNewLine
+
lefwPrintError
+
Setup Examples
+

Bus Bit Characters

+
lefwBusBitChars
+
Bus Bit Characters Example
+

Clearance Measure

+
lefwClearanceMeasure
+

Divider Character

+
lefwDividerChar
+
Divider Character Examples
+

Extensions

+
lefwStartBeginext
+
lefwEndBeginext
+
lefwBeginextCreator
+
lefwBeginextDate
+
lefwBeginextRevision
+
lefwBeginextSyntax
+
Extensions Examples
+

Layer (Cut, Masterslice, Overlap, Implant)

+
Defining Masterslice and Overlap Layers
+
Defining Cut Layers
+
Defining Implant Layers
+
lefwStartLayer
+
lefwEndLayer
+
lefwLayerACCurrentDensity
+
lefwLayerACCutarea
+
lefwLayerACFrequency
+
lefwLayerACTableEntries
+
lefwLayerAntennaAreaFactor
+
lefwLayerAntennaAreaRatio
+
lefwLayerAntennaCumAreaRatio
+
lefwLayerAntennaCumDiffAreaRatio
+
lefwLayerAntennaCumDiffAreaRatioPwl
+
lefwLayerAntennaDiffAreaRatio
+
lefwLayerAntennaDiffAreaRatioPwl
+
lefwLayerAntennaModel
+
lefwLayerArraySpacing
+
lefwLayerCutSpacing
+
lefwLayerCutSpacingAdjacent
+
lefwLayerCutSpacingArea
+
lefwLayerCutSpacingCenterToCenter
+
lefwLayerCutSpacingEnd
+
lefwLayerCutSpacingLayer
+
lefwLayerCutSpacingParallel
+
lefwLayerCutSpacingSamenet
+
lefwLayerCutSpacingTableOrtho
+
lefwLayerDCCurrentDensity
+
lefwLayerDCCutarea
+
lefwLayerDCTableEntries
+
lefwLayerEnclosure
+
lefwLayerEnclosureLength
+
lefwLayerEnclosureWidth
+
lefwLayerPreferEnclosure
+
lefwLayerResistancePerCut
+
lefwLayerWidth
+
Layer Examples
+

Layer (Routing)

+
lefwStartLayerRouting
+
lefwEndLayerRouting
+
lefwDensityCheckStep
+
lefwDensityCheckWindow
+
lefwFillActiveSpacing
+
lefwLayerACCurrentDensity
+
lefwLayerACFrequency
+
lefwLayerACTableEntries
+
lefwLayerACWidth
+
lefwLayerAntennaAreaDiffReducePwl
+
lefwLayerAntennaAreaFactor
+
lefwLayerAntennaAreaMinusDiff
+
lefwLayerAntennaAreaRatio
+
lefwLayerAntennaCumAreaRatio
+
lefwLayerAntennaCumDiffAreaRatio
+
lefwLayerAntennaCumDiffAreaRatioPwl
+
lefwLayerAntennaCumDiffSideAreaRatio
+
lefwLayerAntennaCumDiffSideAreaRatioPwl
+
lefwLayerAntennaCumSideAreaRatio
+
lefwLayerAntennaCumRoutingPlusCut
+
lefwLayerAntennaDiffAreaRatio
+
lefwLayerAntennaDiffAreaRatioPwl
+
lefwLayerAntennaDiffSideAreaRatio
+
lefwLayerAntennaDiffSideAreaRatioPwl
+
lefwLayerAntennaGatePlusDiff
+
lefwLayerAntennaModel
+
lefwLayerAntennaSideAreaFactor
+
lefwLayerAntennaSideAreaRatio
+
lefwLayerDCCurrentDensity
+
lefwLayerDCTableEntries
+
lefwLayerDCWidth
+
lefwLayerRouting
+
lefwLayerRoutingArea
+
lefwLayerRoutingCapacitance
+
lefwLayerRoutingCapMultiplier
+
lefwLayerRoutingDiagMinEdgeLength
+
lefwLayerRoutingDiagPitch
+
lefwLayerRoutingDiagPitchXYDistance
+
lefwLayerRoutingDiagSpacing
+
lefwLayerRoutingDiagWidth
+
lefwLayerRoutingEdgeCap
+
lefwLayerRoutingHeight
+
lefwLayerRoutingMaxwidth
+
lefwLayerRoutingMinenclosedarea
+
lefwLayerRoutingMinimumcut
+
lefwLayerRoutingMinimumcutConnections
+
lefwLayerRoutingMinimumcutLengthWithin
+
lefwLayerRoutingMinimumcutWithin
+
lefwLayerRoutingMinsize
+
lefwLayerRoutingMinstep
+
lefwLayerRoutingMinstepMaxEdges
+
lefwLayerRoutingMinstepWithOptions
+
lefwLayerRoutingMinwidth
+
lefwLayerRoutingOffset
+
lefwLayerRoutingOffsetXYDistance
+
lefwLayerRoutingPitch
+
lefwLayerRoutingPitchXYDistance
+
lefwLayerRoutingProtrusion
+
lefwLayerRoutingResistance
+
lefwLayerRoutingShrinkage
+
lefwLayerRoutingSpacing
+
lefwLayerRoutingSpacingEndOfLine
+
lefwLayerRoutingSpacingEOLParallel
+
lefwLayerRoutingSpacingEndOfNotchWidth
+
lefwLayerRoutingSpacingLengthThreshold
+
lefwLayerRoutingSpacingNotchLength
+
lefwLayerRoutingSpacingRange
+
lefwLayerRoutingSpacingRangeInfluence
+
lefwLayerRoutingSpacingRangeRange
+
lefwLayerRoutingSpacingRangeUseLengthThreshold
+
lefwLayerRoutingSpacingSameNet
+
lefwLayerRoutingStartSpacingtableInfluence
+
lefwLayerRoutingStartSpacingInfluenceWidth
+
lefwLayerRoutingStartSpacingtableParallel
+
lefwLayerRoutingStartSpacingtableParallelWidth
+
lefwLayerRoutingStartSpacingtableTwoWidths
+
lefwLayerRoutingStartSpacingtableTwoWidthsWidth
+
lefwLayerRoutingEndSpacingtable
+
lefwLayerRoutingThickness
+
lefwLayerRoutingWireExtension
+
lefwMaxAdjacentSlotSpacing
+
lefwMaxCoaxialSlotSpacing
+
lefwMaxEdgeSlotSpacing
+
lefwMaximumDensity
+
lefwMinimumDensity
+
lefwSlotLength
+
lefwSlotWidth
+
lefwSlotWireLength
+
lefwSlotWireWidth
+
lefwSplitWireWidth
+
Routing Layer Examples
+

Macro

+
lefwStartMacro
+
lefwEndMacro
+
lefwMacroClass
+
lefwMacroEEQ
+
lefwMacroForeign
+
lefwMacroForeignStr
+
lefwMacroOrigin
+
lefwMacroSite
+
lefwMacroSitePattern
+
lefwMacroSitePatternStr
+
lefwMacroSize
+
lefwMacroSymmetry
+
lefwStartMacroDensity
+
lefwMacroDensityLayerRect
+
lefwEndMacroDensity
+
Macro Examples
+

Macro Obstruction

+
lefwStartMacroObs
+
lefwEndMacroObs
+
lefwMacroObsDesignRuleWidth
+
lefwMacroObsLayer
+
lefwMacroObsLayerPath
+
lefwMacroObsLayerPolygon
+
lefwMacroObsLayerRect
+
lefwMacroObsLayerWidth
+
lefwMacroObsVia
+
Macro Obstruction Examples
+

Macro Pin

+
lefwStartMacroPin
+
lefwEndMacroPin
+
lefwMacroPinAntennaDiffArea
+
lefwMacroPinAntennaGateArea
+
lefwMacroPinAntennaMaxAreaCar
+
lefwMacroPinAntennaMaxCutCar
+
lefwMacroPinAntennaMaxSideAreaCar
+
lefwMacroPinAntennaModel
+
lefwMacroPinAntennaPartialCutArea
+
lefwMacroPinAntennaPartialMetalArea
+
lefwMacroPinAntennaPartialMetalSideArea
+
lefwMacroPinDirection
+
lefwMacroPinGroundSensitivity
+
lefwMacroPinMustjoin
+
lefwMacroPinNetExpr
+
lefwMacroPinShape
+
lefwMacroPinSupplySensitivity
+
lefwMacroPinTaperRule
+
lefwMacroPinUse
+
Macro Pin Examples
+

Macro Pin Port

+
lefwStartMacroPinPort
+
lefwEndMacroPinPort
+
lefwMacroPinPortDesignRuleWidth
+
lefwMacroPinPortLayer
+
lefwMacroPinPortLayerPath
+
lefwMacroPinPortLayerPolygon
+
lefwMacroPinPortLayerRect
+
lefwMacroPinPortLayerWidth
+
lefwMacroPinPortVia
+
Macro Pin Port Examples
+

Manufacturing Grid

+
lefwManufacturingGrid
+

Maximum Via Stack

+
lefwMaxviastack
+

Nondefault Rule

+
lefwStartNonDefaultRule
+
lefwEndNonDefaultRule
+
lefwNonDefaultRuleHardspacing
+
lefwNonDefaultRuleLayer
+
lefwNonDefaultRuleMinCuts
+
lefwNonDefaultRuleStartVia
+
lefwNonDefaultRuleEndVia
+
lefwNonDefaultRuleUseVia
+
lefwNonDefaultRuleUseViaRule
+
Nondefault Rules Example
+

Property

+
lefwIntProperty
+
lefwRealProperty
+
lefwStringProperty
+
Property Example
+

Property Definitions

+
lefwStartPropDef
+
lefwEndPropDef
+
lefwIntPropDef
+
lefwRealPropDef
+
lefwStringPropDef
+
Property Definitions Examples
+

Same-Net Spacing

+
lefwStartSpacing
+
lefwEndSpacing
+
lefwSpacing
+
Same-Net Spacing Examples
+

Site

+
lefwSite
+
lefwEndSite
+
lefwSiteRowPattern
+
lefwSiteRowPatternStr
+
Site Examples
+

Units

+
lefwStartUnits
+
lefwEndUnits
+
lefwUnits
+
lefwUnitsFrequency
+
Units Examples
+

Use Min Spacing

+
lefwUseMinSpacing
+

Version

+
lefwVersion
+
Version Examples
+

Via

+
lefwStartVia
+
lefwEndVia
+
lefwViaLayer
+
lefwViaLayerPolygon
+
lefwViaLayerRect
+
lefwViaResistance
+
lefwViaViarule
+
lefwViaViaruleOffset
+
lefwViaViaruleOrigin
+
lefwViaViarulePattern
+
lefwViaViaruleRowCol
+
Via Examples
+

Via Rule

+
lefwStartViaRule
+
lefwEndViaRule
+
lefwViaRuleLayer
+
lefwViaRuleVia
+
Via Rule Examples
+

Via Rule Generate

+
lefwStartViaRuleGen
+
lefwEndViaRuleGen
+
lefwViaRuleGenDefault
+
lefwViaRuleGenLayer
+
lefwViaRuleGenLayer3
+
lefwViaRuleGenLayerEnclosure
+
Via Rule Generate Examples
+

7 +

+

LEF Compressed File Routines

+
lefGZipOpen
+
lefGZipClose
+
Example
+

8 +

+

LEF File Comparison Utility

+
lefdefdiff
+
Example
+

A +

+

LEF Reader and Writer Examples

+

LEF Reader Program

+

LEF Writer Program

+ +
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/preface.html b/lefdef/doc/lefapi/preface.html new file mode 100644 index 00000000..04470aef --- /dev/null +++ b/lefdef/doc/lefapi/preface.html @@ -0,0 +1,202 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- Preface + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

Preface

+

This document describes the C and C++ programming interface used to read and write Cadence® Library Exchange Format (LEF) files. You should be an experienced C++ or C programmer and be familiar with LEF file structure to read this manual.

+

What's New

+

For information on what is new or changed in the LEF programming interface for version 5.8, see What's New in LEF C/C++ Programming Interface.

+

For information on what is new or changed in the DEF programming interface for version 5.8, see What's New in DEF C/C++ Programming Interface.

+

For information on what is new or changed in LEF and DEF for version 5.8, see What's New in LEF/DEF.

+

Related Documents

+

The LEF C/C++ programming interface lets you create programs that read and write LEF files. For more information about the Design Exchange Format (DEF) file syntax, see the
LEF/DEF Language Reference.

+

Typographic and Syntax Conventions

+

This list describes the conventions used in this manual.

+

+ + text +

+
Words in monospace type indicate keywords that you must enter literally. These keywords represent language tokens.
+

+ + variable +

+
Words in italics indicate user-defined information for which you must substitute a name or a value.
+

+ + int +

+
Specifies an integer argument
+

+ + num +

+
Some LEF classes can be defined more than once. A statement that begins with the identifier num represents a specific number of calls to the particular class type.
+

+ + { } +

+
Braces enclose each entire LEF class definition.
+

+ + | +

+
Vertical bars separate possible choices for a single argument. They take precedence over any other character.
+

+ + [ ] +

+
Brackets denote optional arguments. When used with vertical bars, they enclose a list of choices from which you can choose one.
+

4/12/17

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapi/titlecopy.html b/lefdef/doc/lefapi/titlecopy.html new file mode 100644 index 00000000..458256e3 --- /dev/null +++ b/lefdef/doc/lefapi/titlecopy.html @@ -0,0 +1,220 @@ + + + + + LEF 5.8 C/C++ Programming Interface -- LEF 5.8 C/C++ Programming Interface (Open Licensing Program) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+ +
+
+
+
+

+
+

+
+

+ + LEF 5.8 C/C++ Programming Interface
(Open Licensing Program)
+

+

Product Version 5.8
May 2017

+

© 2017 Cadence Design Systems, Inc. All rights reserved.
Printed in the United States of America.

+

Cadence Design Systems, Inc., 555 River Oaks Parkway, San Jose, CA 95134, USA

+

Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence) contained in this document are attributed to Cadence with the appropriate symbol. For queries regarding Cadence's trademarks, contact the corporate legal department at the address shown above or call 800.862.4522.

+

Open SystemC, Open SystemC Initiative, OSCI, SystemC, and SystemC Initiative are trademarks or registered trademarks of Open SystemC Initiative, Inc. in the United States and other countries and are used with permission.

+

All other trademarks are the property of their respective holders.

+

Restricted Print Permission: This publication is protected by copyright and any unauthorized use of this publication may violate copyright, trademark, and other laws. Except as specified in this permission statement, this publication may not be copied, reproduced, modified, published, uploaded, posted, transmitted, or distributed in any way, without prior written permission from Cadence. This statement grants you permission to print one (1) hard copy of this publication subject to the following conditions:

+ + + + +

Disclaimer: Information in this publication is subject to change without notice and does not represent a commitment on the part of Cadence. The information contained herein is the proprietary and confidential information of Cadence or its licensors, and is supplied subject to, and may be used only by Cadence's customer in accordance with, a written agreement between Cadence and its customer. Except as may be explicitly set forth in such agreement, Cadence does not make, and expressly disclaims, any representations or warranties as to the completeness, accuracy or usefulness of the information contained in this document. Cadence does not warrant that use of such information will not infringe any third party rights, nor does Cadence assume any liability for damages or costs of any kind that may result from use of such information.

+

Restricted Rights: Use, duplication, or disclosure by the Government is subject to restrictions as set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor.

+

 

+

 

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapiWN/ChangedFeatures.html b/lefdef/doc/lefapiWN/ChangedFeatures.html new file mode 100644 index 00000000..cb94dbf9 --- /dev/null +++ b/lefdef/doc/lefapiWN/ChangedFeatures.html @@ -0,0 +1,488 @@ + + + + + What's New in LEF 5.8 C/C++ Programming Interface -- 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

+
+

2 

+

Changed Features

+

This chapter describes the features that were changed in this release of the LEF application programming interface.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Layer Routines
+
+

Layer Routines

+

The following syntax has been added to the listed layer routines.

+

lefiGeometries

+
+      int colorMask;
void addPath(int colorMask);
void addPathIter(int colorMask);
void addRect(int colorMask);
void addRectIter(int colorMask);
void addPolygon(int colorMask);
void addPolygonIter(int colorMask);
void addVia(int viaMasks);
void addViaIter(int viaMasks); +
+

These are described below:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

colorMask

+
+

Defines the color mask number for the GeomRect structure.

+
+

addPathIter(int colorMask)

+
+

 

+
+

Adds the color mask number to the lefiGeomPath structure. The default value is 0.

+
+

addPathIter(int colorMask)

+
+

 

+
+

Adds the color mask number to the lefiGeomPathIter structure. The default value is 0.

+
+

addRectIter(int colorMask)

+
+

 

+
+

Adds the color mask number to the lefiGeomRectIter structure. The default value is 0.

+
+

addPolygon(int colorMask)

+
+

 

+
+

Adds the color mask number to the lefiGeomPolygon structure. The default value is 0.

+
+

addPolygonIter(int colorMask)

+
+

 

+
+

Adds the color mask number to the lefiGeomRectIter structure. The default value is 0.

+
+

addVia(int viaMasks)

+
+

 

+
+

Adds the via mask number to the lefiGeomVia structure. The default value is 0.

+
+

addViaIter(int viaMasks)

+
+

 

+
+

Adds the via mask number to the lefiGeomViaIter structure. The default value is 0.

+
+

For more information, see "lefiGeometries" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiGeomRect

+
+      int colorMask; +
+

Defines the color mask number for the GeomRect struct. The default value is 0.

+

For more information, see "lefiGeomRect" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiGeomRectIter

+
+      int colorMask; +
+

Defines the color mask number for the GeomRectIter struct. The default value is 0.

+

For more information, see "lefiGeomRect" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiGeomPath

+
+      int colorMask; +
+

Defines the color mask number for the GeomPath struct. The default value is 0.

+

For more information, see "lefiGeomPath" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiGeomPathIter

+
+      int colorMask; +
+

Defines the color mask number for the GeomPathIter struct. The default value is 0.

+

For more information, see "lefiGeomPathIter" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiGeomPolygon

+
+      int colorMask; +
+

Defines the color mask number for the GeomPolygon struct. The default value is 0.

+

For more information, see "lefiGeomPolygon" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiGeomPolygonIter

+
+      int colorMask; +
+

Defines the color mask number for the GeomPolygonIter struct. The default value is 0.

+

For more information, see "lefiGeomPolygonIter" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiGeomVia

+
+      int topMaskNum;
int cutMaskNum;
int bottomMaskNum; +
+

Indicates the top, bottom, and cut mask numbers for the GeomVia struct. The default value is 0.

+

For more information, see "lefiGeomVia" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiGeomViaIter

+
+      int topMaskNum;
int cutMaskNum;
int bottomMaskNum; +
+

Indicates the top, bottom, and cut mask numbers for the GeomViaIter struct. The default value is 0.

+

For more information, see "lefiGeomViaIter" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiLayer

+
+      void setMask(int num);
int hasMask() const;
Int mask() const; +
+

These are described below:

+

 

+ + + + + + + + + + + + + +
+
+

setMask(int num)

+
+

Sets the color mask number on the layer.

+
+

hasMask()

+
+

Checks whether the layer has a color mask assigned to it or not.

+
+

mask()

+
+

Returns the color mask number of the layer.

+
+

For more information, see "lefiLayer" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiViaLayer

+
+      void addRect(int mask,
     double xl,
     double yl
     double xh
     double yn);
void addPoly(int mask,
     lefiGeometries* geom);
int rectColorMask(int index);
int polyColorMask(int index); +
+

These are described below:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + +
+
+

addRect(int mask)

+
+

Adds the color mask number to the rectangle inside the via.The default value is 0.

+
+

addPoly(int mask)

+
+

Adds the color mask number to the polygon. The default value is 0.

+
+

rectColorMask(int index)

+
+

 

+
+

Returns the color mask number on the rectangle.

+
+

polyColorMask(int index)

+
+

 

+
+

Returns the color mask number on the polygon.

+
+

For more information, see "lefiViaLayer" in the LEF C/C++ Programming Interface (Open Licensing Program).

+

lefiVia

+
+      void addRectToLayer(int mask,
     double xl,
     double yl,
     double xh,
     double yh);
void addPolyToLayer(int mask,
     lefiGeometries* geom);
int rectColorMask(int layerNum,
     int rectNum);
int polyColorMask(int layerNum,
     int rectNum); +
+

These are described below:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

addRectToLayer(int mask)

+
+

 

+
+

Adds the color mask of the via rectangle to the layer. The default value is 0.

+
+

addPolyToLayer(int mask)

+
+

 

+
+

Adds the color mask of the via polygon to the layer. The default value is 0.

+
+

rectColorMask(int layerNum, int rectNum)

+
+

 

+
+

Returns the color mask number of the indexed rectangle inside the via for that layer.

+
+

polyColorMask(int layerNum, int rectNum)

+
+

 

+
+

Returns the color mask number of the indexed polygon inside the via for that layer.

+
+

For more information, see "lefiVia" in the LEF C/C++ Programming Interface (Open Licensing Program).

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapiWN/NewFeatures.html b/lefdef/doc/lefapiWN/NewFeatures.html new file mode 100644 index 00000000..5063728f --- /dev/null +++ b/lefdef/doc/lefapiWN/NewFeatures.html @@ -0,0 +1,481 @@ + + + + + What's New in LEF 5.8 C/C++ Programming Interface -- 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

+
+

1 

+

New Features

+

This chapter describes the new features that were added in this release of the LEF application programming interface.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
General LEF Reader Changes
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF Reader Setup and Control Routines
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF Reader Callback Routines
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF Reader Classes
+
+

General LEF Reader Changes

+

The following changes were made in the latest version of the parser:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Elimination of static data: In the latest version, the parser architecture has changed from C style-based to C++ style-based. In the previous version of the parser, most of the parser data were stored in static variables and the data lifecycle was based on initializers and cleaners. The new architecture places data in data singletons and uses C++ constructors and destructors. The switch to the C++ architecture has improved the parser re-enterability, made the data flow more robust, and helped clean multiple memory leaks in the parser code.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Introduction of parsing sesions: In the previous version, data were stored in static variables and, therefore, were retained across all parsing cycles. This meant that if a property was defined once, it continued to be defined in the next LEF file reads. In some applications, this feature was actively used. In others, it disturbed expected application behavior. To address this issue, the latest version of the parser introduces two modes of files processing - compatibility mode and session-based mode.
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Compatibility mode (session-less mode) - This mode is compatible with the old parser behavior. You can call the parser initialization once with lefrInit(), adjust parsing settings and initialize the parser callbacks any time. The properties in PROPERTYDEFINITIONS sections will be active in all subsequent file reads.
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Session-based mode - This mode introduces the concept of a parsing session - the parser configuration settings will be active during the session time and will be cleaned on its end.The parsing session also controls PROPERTYDEFINITIONS data. Property definitions remain active throughout the parsing session time and are cleaned at the end of the session. The session-based mode does not require calling callbacks and configuration unset functions - all callbacks and properties will be set to defaults by lefrClear() or the next session lefrInitSession() call.
+
+
By default, the LEF parser works in the compatibility mode. To activate the session-based mode, you must use lefrInitSession() instead of lefrInit().
+
Note: Currently, the compatibility mode is used for all old applications for which code has not been adjusted. The lef2oa and def2oa translators have adjusted to use the session-based parsing mode.
+
For more information, see "LEF Reader Working Modes" in the LEF 5.8 C/C++ Programming Interface (Open Licensing Program).
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Long DEF Files Support: In this version, the LEF line counter switched to 64-bit integer type, making it possible to process files with more than two billion lines.
+
+

LEF Reader Setup and Control Routines

+

The following reader setup and class routines were added in this release:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrInitSession +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrClear +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrRegisterLef58Type +
+
+

For more information, see "LEF Reader Setup and Control Routines" in the LEF 5.8 C/C++ Programming Interface (Open Licensing Program).

+

LEF Reader Callback Routines

+

The following reader callback routines were added in this release:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrFixedMaskCbk +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrMacroFixedMaskCbk +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrSetMacroForeignCbk +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrSetMacroSiteCbk +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrUnsetMacroForeignCbk +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefrUnsetMacroSiteCbk +
+
+

For more information on reader callback routines, see "LEF Reader Callback Routines" in the LEF 5.8 C/C++ Programming Interface (Open Licensing Program).

+

LEF Reader Classes

+

The following LEF Reader classes were added in this release:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefiMacroSite +
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
+ lefiMacroForeign +
+
+

For more information on reader classes, see "LEF Reader Classes" in the LEF 5.8 C/C++ Programming Interface (Open Licensing Program).

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapiWN/images/Diamond.gif b/lefdef/doc/lefapiWN/images/Diamond.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cdafa3387318b1d3581c1b7f4083a66bc79a0b8 GIT binary patch literal 92 zcmZ?wbhEHbC%M@ z7fzizb>P5(b?erxUAuPPym_-`&1!0Ds;{rFsHg}D3Gwvwbai#Lu&^*OF;P@hl$4Z| zkdP1%5a8wI<>268VPOH954MLUgyK&YMg|5&1|5*;AU`p%SsiEyV7Qnga44mbDMM~@ zqsQ`>E^=xzTBVaGWbB`JbUN227P({xH^q_+dr`J4clSsv$Yoe&cwjqcfFpx70FDw; AfB*mh literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/Thumbs.db b/lefdef/doc/lefapiWN/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..89a67ee6add69ee45ebed976dac24899f91c189d GIT binary patch literal 161792 zcmeF)2V4|M+A#1TiGbvsMWRH>2nZ^YL_|SABq>2al8PjWg5)Hiq9{QDQKDoCf@BpD z36kR=DoJKQU?hIe?8@El{cdj!``wgwuOEtJD|@|Z>t|FS3` z@DOY3M2IcF`8^&y#@YBc1pwV+7}*R{{g?+Tz-I0U=`jYF??Ut03Q$l z>~~HGwgMtR0;s??KnlnJIlzARlz;|s0A4@~=m0%n0E~bMFas9A3fKTU*ba68e!vO1 z05{+Pd_WHD1Oh-52m&D>3`D>#AO>~=aUcOCffSGiGC&sW2lC)B*aH-RBG?P|0VQw{ z901Bd1*ifwpbj*E4mbofffhIgj)0>;8yo|MKo{r%eQ+EYfD^z7SO8;S0!+b4U&5D0w0C7=zj z2fm;9z4l+6z7+xV!zk#S@5A2 z+K7)$zx1_uux|nu?Dq3L3&h94uF1xG_>$McmLrqT@v+xbOmB6CYb1iLeD6 z7VLY+=EuIBKPvy&`T<)9VBhnb2mW38$L=5gsQhz4o*jS_{I>jK>k@1o zfGz*n`T<)9{JZjx-F~p&A@+0pZTZK>#Fl?--GHqFuyqNx4)}NFe?RhfM3Q{skG7=IB zItof^8d_S~ZRGR}bTkZ9G_*9>7s0`UJop4e1O!Ahq$H#?U%jk9K~Qdm?Qa_%&JF}F zB@P}X&UzhoKY~L5?-u)pKQB1A@E*4iZY3fnfhQDEKncOa!^OwLzH4~47yKQ8Pf0+< zA-Zo1_0dy=JI>LFU5dW5m2-byHLZ3lic8$=ydM!U9X$gh6E_bp-%frBNhxWW-Lgst zlvPyK)DP+$)78^IZg9ff!t%70wapo)3(hXCZtfTTF9!q$1&4&j#9qC2J?_TM_`4~o zY4_6aKgh^0C@d;2c~n|fQ(ITx(D?M(^S1Vm*PUJ6J-s8y(Klmn-@PB7K+n#7oL^YP zd|JY;7Y+jN*VX#Rn*GaqQDRFzK0Y2kA$GlRa9sf&B|ZU%=oYGdM+r}zquwEQX)DeC z=sS7UM4aNEY5j;1%!EtdLZKBh*T#b`ucqCoAb zT!1M>HPx(1v`-692^LK&uyfVA$kr7Bm3<9O)N*NdaJ5^NY}Qz*(!HQvMR8XO-^(!tnmaL z4K?)e81^>w2w~cb0B@mAhaxYhktF~5>=V-^{iYL4q*-$> zy75Ff8w?^5jJ!qeu3=XhMOZ^Ok1KQgqW56nx?zL8yDlm>M~lW z_>A+cY|Jz)wo#C$Bqs{o=S(D`vbH!f&Sl4Fp!RfoWOC$3Z9_vPOMBYK73u^Pe4LSd zSNV5b@=Yc~;Dr42Y>u#r;FUvj@;;@vSu$1G z4%lT$m%cGtM+Dd-jp-N5=<8U`R84R9**+kh65q9)(VS;Y@lkH8j6BOF{rLg1<(i8{ zEg|x94qZq4cg5&S{iHw z%bZ`Y*maiKr&=@F_5}yBWQ^(Rj16$!Ef99v%er{k(_FY{PeWX0_q{Nrp)$Esy5L*u z9-=4lLyez_X=lP`y&C_fET2WlNLoju&_GvX7nV!s-I^pa8}pR^h2`6#!{kkaw4 z%7@p2qK2CzA^bh=b^I%CqgTk2t#e5+qszzLT!#m$BBx&_WSm(_50IBH8|%p{n#)cW zdum?ncUo_Nxg2-JSH8$)ph1AMc8Fbm-zcfaaB;$(qDFt`B#LqA_^uGoJzi<TxUDh!I$vHjgN^cJ`5Z_+n-TfbZYV1d~sC`o2vysIr3C${` zBi(7uN*u!V26@Fa!~M3re~nVTkzkEi>v;;L*f7YCaX&RuP98pqRAjX6tz+YP{OGk= zqP^7H=k(+YYA5~nKJ1A(#^&R3o9^YSQYNh_X=E;$Cv{haP?}p?h3q^~Qv5&tdiH*A~vdlqc}0~|X4(q9P8 z(l6?N!S>BT8|;@w^4H{>e`4cf<8CZp@I7d0Cmp!m1W@3!9&GtP28J7+3VG*v@h-c8saY>q`C=sgB&j zFp_4KmmaT+D;^cA^Y}8KHluv{{7pt8`H?*WZPs7Z#`twh|Mx#P>QCYyr2S8VAlWQG zKS%lb)V@Y606hSsY^BR8{Wfd@8Z-Fmfx?&L*>0uxKYci@&m-`@pYrjL^^SduXZ8KI z=02{(^KMTnA`Dfaa5L1Y#4y_90<9k=Sj24LoJ-u> zYjaV5;dFu>cUftNBhR(d!Illv*Qaec`QFEfJB1%1%x*Q28?K6Avb=1<^ok2L6CyDw zUG}I|v2fm{U{`O8EkRvm?7`TFp4_*SD^5MJti857yNb}$vAyEh!s)pKo$>;X9;r>) zz5TZ1_(VckCTa;!4GdCdo9hhbaB-RW4faXky#J_=V~LK{jQ_ACH!X0i^<=JkegUZ`5fdYHC{P@Z;+Z#)qG4ybd9l z&N|;n6O(GD#Lwq$j@PWVXmPC{Le%=O77kJN_mNMr+G@7XXpetfJ@{$+agoc+VK<7O zw-jc~=vyAM+#a|)nOx&;sbYYFNQb-^YEB7F_8_Gxd2nKv`}8UC6tSJWr=H7&i%p-J zv)U%^A8l-jphcQeDD1+Bo1(dA{3XfhZDiSQrnfLnY8wx6iS>(JbFyN}W7K0XFvYhQ zVffS};oYZPALv0j26POZ#&{giZgR}QNV!(*TTM%R9sV$iq6>7qk&}Zaz zUM=7aKifWQp_4`-GL#L7mkQ?35M8e%ju1YtlaaUSf1eVyCMU;DicB?&)A*U&@O5*-8Y;Jyq7SE!+?q5#V$*IN*Wz|*`f_zxUz0<< zw`K1LZ>){|Q)$-Ls-}{RyT0<~PZSFVx_liRig*3SIM-tVRTem-^P;!wNLLTnzO%SopLgihE~PZk^#?e%B$J#sPcc_ zpMLN8$Bq3@KAg}0mi9lkE&e^rx3s^pV^=Cak3YbkqyL@-8z0W<{xaU^OWVJZ@cdDt zU!!8j2Yk=+E$d$b0YyIdKkWKtWYf35gDtTB*zpWVfft||yaX-a6=(%*0Gqc1($}C9bb)SwJq6Ya`anMz z0E1u%3+=hMSuaHz!Jdb zS%GvF`xyMvQ3dPz-|qk6-#q^OnT|i7p$`|hkE{|;tkv%Ckk@o28;CcF<1RDOx=!rE z9AXx1kDoWN1C`DwgO5A#A=^CNsM~O0u&=k@^o4yEGG14u^s372jZyruZdID7LW}8$ z7G*A{bp)Nf^E!gKYQ!qM!g7IqS`njq!EnHI%Ea;7LR7(%*-st|#RGk!<3?~&D$~-8Agc7^|^Lr-wA!|A$jdkt1_or-qUBdGs>0t^f>VwhOKNG zqcFEd^}|+#(v?mj$?@U55pTBXV6Tmo3CHrjPIJcvs+~U24LY!*_GqP#oZ*}*Tr!aWlN7}q5 zQO4zWpkzUKWYe}_1nPR>T+#!Fc}1d0HnK9tXm&)39IYnj%?+FtoBH40Rfd7W>H8iW-KPOr7!;6??#kopvH z^~DZSUk&0aCI$ZP6^hkJ&wZo0zVWI7^Ucx+0vs-s@7dDhAmLBnr|ZadtiY1lT(2~` z=Qx3di$jE|vVOg3QBbHS$Fc;5w~-B@k*!!$Nrkxtr{e1H_O|W_H#9gt(OF!lPD8xq z=~{Q(xoC#jR~pv!x^FAY_DcF#CiMy&S-tOLUd4v#8x0Iff1gO_IISVjGF7h8z=P#y+}3uhQTiyJ=;S>6)xBd3VxG2=k)bZYFVR%W#eHhnpJ>^mOi|dG9HfB^}*!>~5TL%I^ z-PO3&G+_4TxYF5&55?+)rgL9(7OYJiC@&UbN%m)dpN()@BhE+b23`~N7U{g;<)kf6 z7dd*Mjl2ES@!}kcM(*Znp+~z1DsZ2c$4sBK(o2^+mWJaHoD zrg@qcwb&;C+N_fE4bP?Ch}!ljQK@n0AWp{MjF~WDtcFF%J>5&-)4uG@?q*s`x5m=W zftH+q8GG+ulK5c%YJS6$^ynf>-Am5bqEG7-w%{C!S$5aLS?gfq$HWas&?6fn(%&x( z5zi-4*evPYOdnF>>k{5kR^_kZay#oD$!WjodpBt3>d*|Y!d$hd-?P&xP&7aAl)&Vr zxVgxMHESRbHQ9T&Ycd!Tlol4Y-75`eEx%4;?cF*?H^8a#KC8UTAtwkW+^CF}ih7`d zOro*9=ny0kcTpiEdxFG+Ea?JD9q*;Eg_65C!v|q~`}(^3cb$qn}BR#+$>0xLIe z9Wi`2sX#Hf>Wpd68;om>tJFA>l~X6ms35qSbs*=F;V9w zzfc4wbB!osnbj?6!2rb@Ja5Wqusf!U#`-3 z$=f1*Fo$z1c8|1>+sGz$U+B}^?~$NmaJ^|wfx9%~D6P=xmkQ78VpIoNj;r zp%#|lCMOB&iCZg=pJzOJPH}LSd^dVRH}~Zo4ZTl^;{wWQEBPP1BLbd`X^`qrM;KiR zdKl5cy?eKA`p)8YgpVdyDO=ZowU^w#z6Zr(Z(g5QcSb~3_;ad08JhBV?nR3P+xuAN zM);6c7<;&8xdm0rUJHj7zZ2(>LI04lP+`tn1G3pWFZ&~c%}mtnE}GU?buW%s`71EE zW!8B!z51{shh(MJOww(imt)nNd|8q>u&p(JCffJY72I=IhcFM99(sh-XjS3D7GGJuFwW4}V3UV!NM6r8;oqb?Hlc!1~VCn?_gj;1f)oIO97TM-*> z#kG2`_3F4#(YtY5MeVg7Ou{;1f6(PBR7Tl4V$A+u-hOVPH>vkacCyM{wpH|!N%U^6 z%ck1?jZ2SHomPwAvgQeJ2K2FnlE3)i6h7B=$)rGf${yuCy1$?`6%{xw)%Moo(e}0W z3TEz`X6nqY39;AwIQ-5^p|%`0yNY(c)52_+UQxb|=&G8N747zBZ^~oW%Ncu--F!yd z#zeZc;)J8#^^85Hv6DW(-vD$l(hVm*WFwm$YX>=6C8l{659b$DsY^6#YjlrAA~mie z;z}-O?ksYsqo|Gl6t&>7dUcJ?ZFG%Je_<$Kt#37I)Lu(1Zyga5(BZ9_Wnvn~{)}%R zqVcU=UJF-OTbcAqoGJY}qPyhoI$~TeQ#UZvB%SNsUB@ynwzVnyyh!Iu&ryz)0W~=` zH9Lz(_zX&QimH5c4^C*xr8&e6F#St*BlaoDbp%h*aMH3Dl%UDbLFg77iNafPMvJU) zd2_aTDlX)bzF$*aNc*Ta=+c+1<c&N<_Y;$fKVETz$0#M)~GiMF_xsDZV##?)=Wi4@z~Vr~>ha`2#c zr%ef4)U>qJntn{)Oh-#zM|$8=AX_TO;q2aPQhjN}ZWk}iq%7XHQGdo;K9I>Kw5;yd zsEv6rvX1bjlhyL)KoiV_yHt0|aPm^0^W)(+AlZq?eAp{yYl;*Jt|az6T!l(o z$VSuGQkr0F^@5J)l@@miUQV>IQqU2nQ_#5*aP6%6fp=rHCe69ox5hmRw(9!f>u5NCb>A zr4OL?@fwXH{$!%~db+Z4B-?7rWhPK%j!{a=Xr|ikqb_UagchEg)*6KmiGg)epKM96 zLQ~ZmkL+|;uOm8nZ0at?1H{P=!M?iojyX#A6}9#XssjS8`lw*oCa{DEjegCG;8c>x{fd#3|mK} zoyb0KO73Zn@)*fo;i~FMqV|+iTv#h{$~E@NH7&4@Z7I2UukF#khbLJQOL>Y`@Q|w{ z4M~g@R$e31wuigyQeH_|o4h+z9*LB^Vsyshjs@2ioU5ZbTj$gFHHfBZ-ITi3^GU5m zGT_WSy1T_vru}SWewe94%tU!g$NjsZ^HD8+*x`S_LH;KvQ@{84W#jmf6Ys}3ek4PX zZyrDX9OD;Ow_J@I)b4>5*^vL233wz|CtlYnW;+0Y+XVJ-5FiQRE)N8%aC4U5G3T4X~N_#%VQKr zk4-9u-t7=h^XpeSxlnewxH(>F~Gc{)3+Ej1&5UFJx)ok(3$xCtvp z-F>7L8N%Csq4^A|o2O_8j=9Zl#t309-bIsB&oe1YIPr5-JPjMz^Q3&&5o}c>me$dl zPV~XTxNZf?r5!mOh5-V>AF|U_wnZ@y7ao|pAXH+`M@rt%((SVs6J?v?X1+hr9;2hsL*#2H>ae0lqUt(?AYoRTeW=?i-> zLdeIsbLw#;Q2`R~bFK;)jb9YXE_#l5k`R-6>dI~N?f!mel@W%k36(+|ZY%@CuWOzT0o~LTDJ{ zoYG8Va;k?VLZO1O zROh`Nk5&w68O1hFXjZ)LpJCEV8O@eP3P)LuW z4+nv5lppN==tn3&WSjF3{50jqs*atZ!fLc7RJxKHqh+3AqBO$X9TYlKv|K7gdGl(1 zkKuHn-k=I&+Rj2Uni#ifpAv5&pI5QNRV#uH>xfUf$11tkTH;0Ov>2=_`J#?>%8Tb1 z$kw~NCZ7@SR)5grr(X2Pjg>K$_k2Q+w#bxKhhkv$L;N_C#JWE*uOKnr`uPwNt8RPlq>P$5yIaz z3O34*!Vgk@NdL#m4|dudTmaLuz$GIv{~Oo>2*Fl>9XCb{DGAsHNC6oj2NZx3PyuQ{ z184y@4?Uy|fDteOX21ei0ULn%Z4lc52f#j`6H+d~4R`=A-~&4WKM(+dKnMr}Y@S_^ ziUREQl;S`FNCGJ!4P?M>APeMxJiz8tfK(Ce1^d8$pac#8WuO97ff`T;*gP7L9s-)+ zFwg==z)_$Lbigs73-o|KI1aFRPe5u2jDRsP0jA(2I0ejrIj{hh0Gr1OQfpuX&H!6r z2ke0Za0F+;Ie>k>6Qmb_GjIW}zzw*Ai@*bT0xy7lz7M3nVDtF@+s~h~c1k1#w@<{0 z*_iO79$&xRd_!nPUfk)Nm`I9R+2vDFkCd16Z?34LdFzt=O6U^hI#+a4+%oqmk==A1 zUS;2R{pGtO?v}XHc_Pkod%6Yp*B}h^`43*nsl1uxNse(s3TeO7e(i}f;-z)8)P8PY z(7Lm&S>R$pK2>9Xe9J2zE62b=I`n*Qc%dV~`?AB2ZLAku3XUJIcPO5C^C>(y6cHUr zQ`%%tun*_PE<%rV6CdmGg%a-rot2&%BGKn>aYvmcw9P%uSj`$idpZ>Hn=18}cIlV? z*r_P(As-0H|(RPu;=Z_NR+`~y$kaAs~H z##lbnx$Pit8hT+l1+71-{G|9sUkhqdHE^eALB2Yjms|eM_s0qM?|tKFdek^>YR+CV z?g@LK%Oa&bJq5=6P^4O#c22mEIf0tIA31{r&L38<8}%m=w#Of#{YSppfAZ6`|I!z3 z!%zwsPGO0s4nrx5rghOn(*dYj?BnA7B#KxP_cDC)yc#ORq&5qZf}lEgs#g z%YfJ6`){u+-`M__ewgi_;(zM=&F1m@Hy^(*=Qb)9DPFD+KwIs@oJ%+Awe{w$hD!NkP>f9CI9Qmkh$Bn(xwn(1Y4 zbTttwuRv>6e-fS|{g9Vl_hFDC-tc^0^*O@kTP`@9U%B~eTRHB#8!V^p!vZ&MC zzt;5xYh-j5=2*|C;-$I>YMRo7#Qo(l^7R4XxVNdB9HxD&U^u6gPr>WBPzf(`y?7tu z3E6^)6MBK@XtwakP`0fJH*a3azm6E*1_KPX|LO38KPYwo{PjlpS8~H zKVIv9{^c~pAO76_W#61X{YRZYec7tshjm3iW5ubflF?J4^+Nf8R_#TWi=F9C*)Pzk zGXiELYA#-#CmC)U@|WV-ye)<+A|p>kO;e-V-Zhk5#6c}2IAt35+3YI69%CzWTP43z z1&`ifA4%hLei3%>W|u($OxOcV%K@}r_VBd%iPoxzlIiW7fm+4ATb|R-9lflxU65`s z8P3>Y0sUdECmve9vdW$QDQ-b}9Tmc1EGG^}KM<3(IY)S1Rc+uHegB+j|0ny5uo#Np zoxb_U_^q5Dr2ZsFP;Vap{~Y6&r+n;uBBI^qkT2s-jf^^uk`ve_vcF#8Nb6VQj%gsL z4AFTR&oHXJDBg&NA7nOdV?i9_px-y0L|SDd!e~t|%U+WpKHL&sp_*gO#?qelsN%J= zJx}l0^h!~HgYZ>j*;>Ky$U&XmS9}lmTd_>XO%Wmo#78_<`0_AO>3wb_>Rsf)@;ft{ zQd@W)-{}uIl=ta;TE{s{#<5QePH%Vjl90x;Z(S1^@@_tBgi%G7_=yOuIC%BL9_2)r{W#2(&ic2WhAerqi!ceJ0TEb{Hr!kcd4TQ(V9 z!RpQe*(JRO6s5tt!bfzE-FuC5?5L@z30!-@H%}gXqB0Me35}87q}uWbC+&)kb;Jm5 z>s{(T8yiWu{13P6d8onBIG5^&3d3nvw{ZV+IK#&AkHimCemC3izup(+#~=T!_PWTH z74P8Vj(NF0FFDQpfDaD2!ehtp_;G2saF$ch>h9wXfit+dv>2t)7N!+<^i^;9yu{HO zpDoFOYK20w$Y*rR^_C4=(iGzZrtJ}L2PJz1OXn;&h*buC&>n{{A!rZen|RZ31xmLR zJ&ZuICQIiDw&?rTS(W^cRiF2t*@D(Rr1qDWy|TnyI< z60MvXxuss>_*zoqG2`@b&2{Gb$~%JT=WtZI`>r!Sd4_=I$42?-_(A%=C=f)O`@f%K z|F>KtWUhm`gj~YZA2~>;f5C2LPPOs*xhdz- zXzQh)$o5b5lg(c({{8Jw97$+eV&^gc()Q0A`K9r_A^!Hy z?QhBNkB`^~@%Mkl`d@?iyr1JseSdr$CWy`Q74h%>=JWr*Jbr(+`Zv|Iz$S$Iq8wTkr$^ z;4%mRfglJ3gAfo3uw%x;A&mf$APQUo(E$6mSV*se9B>`Pfg9i^hzGa8ZIA#GK@vy? zcK|kj3Z$tZ4cr6i;68W&GC(HC0@(oj{0c}Pf;^B93P2$!0>z*NJOZVl43q4ALIZ3;IAm z7yyG{2n>S}fCQu94Z!AuTS_3_!Q=N}987>oFa@T;2QULr01ajVHs41`=fMJ41Q_rM zEP-XP0#?BqSjVQ2=gV)yxc-~ZwIZV5&ok?H=fH5}CI<`=np>Uu2;V>CGFtjww4`ia!o+g*~& zYCg{@JdeUuK!(R)A`^AnWQ^rHf~&8_XMw129nrdTFFWg6#|g5V8J^~7#N+mC;kvxN zG43dV8PkH~>Zfna!}WUxw<fKeqx`_5()PtLjXsS>hdK-HR-TaJ&*yB=2(W(1>c34J6SXXA ztw>Q}m5GU#Ofao2iC>5;+fo*{n(-LO;Ov44&%%f3<^W|N5+r{U6ugwEz3s`i}%b z`n&e;#`|afLEisn{r&s#uRn7AQL+$)+LLO!O@RYb*`FyNBsMS{bZ^$y}z~^-zYynO8cMUCu{%zA3pwB=0z$_FQTkQ^c(mTm~00*5)~;W z^7ftMqRZwkx*cO~rn!ANeOu}zPP#>>?FiA++Rw>e_Y)eim`l#j|MMit?+;mi_pk3g|GrUvu>A?&GJaV4FX(?z zf;Bn-pgHkH;}3G7?I8~D7rV&(1@Rf-bJVG1kaK6u6k7#-8L!qvmmAJtVJJ5l$I&mOc0B@#Dt z6{9wcj3I`@>#3w9?Mcyc$-cK@2B$)HCp_jrs!nllRYf;|vPJ^zgZLCJK$6UBPx}27I zSGJX}-mb*QxIT$n8ns<4#x*$o$hd}KP@PGM1}Eecl|ygoZW*C~fqzVhu~B|RH_H#_ z{=8~h?N$_*xY>C>B4Rpv21X`s9$vnk{1TE<(qAyld$asBK7IDQt-a%QXIFPm?>{Pr zf7T1V*rN{wE+rl%LJ_g#+L**x$?4s)j$j{o2M`?Sn8N^j-& zB&3Zo=dPqQc=NBlWEz^LzT@_RJXo)6Pg;MmhSl)LHc9oj#yi`o!iuA(Up1bc%koH| z%%eFI)~UpMXNAKbnG=S3r_}E0MHpCQN^8)U{rGLly)z|S1oHiH&Dc69rVxU%4$m0y z5x<^Y`rhk*Hp<_RGJn(N@#9ak|5|2VXj)Av^67y~2rqIk2H7#|mX%Zl>2`5M=vE|9 z?Ld-iO$e3$wM`joPN>1&BJ|Hq6pIDoIe7iY^P(W2>XEtuGP@ z7~Itpnyq^H^}Ob`J=d~7B%BkRIrH1r+V}RK z{N3eG^!wYNICSuV@P9@7^X+fipJIPOd~CZ{;49+KL43u}?QikFD8ArV#K(d2yBpX4 zOMHL)U)ufH&j7o?+xXLk9O7fg8)BEQJ^w+rdH?aBrTxAnv*O-yK`U&CeMN3mB%H9O zSM`#PR+6fd<2_Z0@jXGksoP>|4vjHn_y(vyWj$^_Nlx51(V0l!I^6Xkxw6ZwAV88N z^H>iJ45_%*dUjXZBE_yg!b0; zmK{_M!{vJE_MU8at}}`>DLBiMIaLYSw`{CYS2JLE^if`vW$EqNCWVG(taHIaj_9t$(zcQ2RBGjYOG)N5R>cFGgKek7z5v%Y#gR2 zIh4>B7)3I@pwMsWy|~){?luB@;W-)X2XFx%zy}0i3m^nr0TCbuBw!mL1=w*ze2`KA zN;|$x4#fj*I0Ed7k zI1IGF5pWb>^PGb87|;cJKpz|j2H*rR1V+FZm;h675@7RUnZsiXU5y;1)z!E5~p^)Kna zjNka)^KakVfBf5OYP0|5>-uk=&&o}kE`01*p?5~IQ~J~h@YZ%$?3c*&I{#siZ^lsD zjp=}>S{6f8!hXY4{k5^@Bsd?{3mG(Au;&nIu_Y>8oUDfzqA^wrZwIi3~fEcy@s zuxa?~0rsE#{GyJ%|FHksD1T3Xkn%@{*!sKiQ=8=v|A)Q)e1Bh~w}@i#^h|B3yt+6> zS)Q6b)U1H+`beism905tY*W8^@8t!%q{ofira>dp;av;0k1+RMy;rKGa#K(w5yaEJ zF*xR!_^w5C_10IY2_$m-1@Gc62W>S( z^b`DI)y_4X*7<3YnqsL$UNjC`s*FN%Fj>gFSoQpt1LyAg-X}lwW+_SQny1w=y<032 zd(S2Xq1Sg`6*lYFxytILjR-lacRElXedTDERbSRrHRV6%qAQquML+V+aW6bnqE?uT zH*x#4!j2xd!^?FG=-?blR`O$yC`>5V5kiL?tt$=L#8NnSb6VH|jHMb`X3T?puDFgnu<<(#;JHK%@r z2h|nC@j6H3-NVSS4kD{DEB5P}U3ybsiZLbQgX` z)BSP`+y{in1WAEll=`&PjCNWuKv&hg@_cRMY6YpbCSLTaM&s*yvxavFG|BL)Q_<;(KS` zIuwGB8K=qCSf2Yg-@CCkn?{R4EWoJExI_D#n)cIxrpZb zD|?GyIV@rvO<(IAZ7*C9Je$A||7iyC4}Fd= z`u*|0di=%N-?YEQ{)YJ85MSo=`fs*BzP`;@1(nm5(A)y93<@b_8w@(0XbR#qn?-y*HJoRag5$1bV1ii?%RClkjVs@hyRaUc#w1T5WE`LlSn&j%8G(X(o z5I>_=6iB33|F$@$zoA65;K02DH^>ELde85g=~*73uY(!L;DY}$&)iNyoNgDsEKYZNG3D+ops zOhKBlZEtbxuuo7NU9V7LRH|`P`s4Z0l%o3jx>sdSs|{Rs z5RwFJQ&E40N?Gvp!Syu9l%NV4y?J7f6`;bG?8?}(-5uIYG;Lh%EN6MGuLfBkoTl0} zI2>r!9Bcfs3b%-zVC5Lvv`!@GVo~I+2X6U%^v12uVM;>R`ddT7{pUCDKbJ%nuCM0GYg!H`g^QqSnx?2dC1=fE%PZg4 z+NxDlFgn$0C?WQ#)^?}h2|=n|hqo%kp_~>jS9W;X-dT}G=Ol6GhR%zS)*|=F9Sa>3 z7Mj;^K^jd3itrpTQ*_Z`KC2|HQ}5lTm=~EnYD&DK5j5gmYJb;sMM+euD$O>AI^F1C zlFJyQnfs}@OIJ$uo;+oE_o{N++RIosrMh0%NKdOwatgQEmi<~}eUfDv-Q&dvM=CO% zyR%*#w@mXaC3Hlb|K$RVjr|wZH}1bS@(X@r{_nkh@Ddyg`T>7%83cep5Cnoj2nYq( zaYNydMu12V1+IW-5CdYtRd5Yl2XO$K=N_c-;1;+I5H1Do6v^d^M2X z2M<67$OKs+8{~jo@DSvId{6)i0XA5 z28@BX;2n4m#=!)b1XBQ;Zw1mBfC6YR3+BK_Fb@{MBEW!806R8o8DR6$!*;d?kJkYL z9)JD#@6G<(pJe{zWxBcgN{NmtyJ?M)c(=B7#9>s`3Wq4>E^R@6{v0wPcd)zutvcR^ zs52H84$qbwS<-8w=rCP%RfV|?rnqMmB&$ka$uryE-Q&+Jz+D)1+vR#zhxzmRlO=ELnM%;#U)kTWp;y@$;l_kS3cZH9xJE=^K*&?Zg@z^{2?+ zRDXVL`5{OAZ^_`a}<#P`R?;e^+b22j0yQUB9Th)?i2zT{sJp9^Bk zd`0|ph=1^Ne5t=6K6br#e?|Nvh>x9b4ZCa}zkd7i>pLXjwB!91VYEmCsob$wSfGI{1?z~@>Xp0P984)NdV_1GtaTTfIPGmb zSSw^BuF9s;3$Z@A8ekdhK6`&#y6a+Ot4S*=edKT$%A;oXeHrJVQFi@wLz;)z{g!ve zCIc_W-X`ilA?S%bj9~Nq$JC17d;GXj|6-3beuVxT(#`AFewO~5nKc1VRkUMZCAW8* zEPar?<*0$D{z%i~En0XsQdIpD%6~BAf5a=$bx)w%`Wri5eyx7L`uO`_=WpC7f7tPSKSuf69Dntbv>%q7 zkVBW|wYIFaEs;IQIx{GZX0L@?2*o{oe`P#gBy`?mxBQ+5SyXD=q0EL?^@^^`Sh}BA zbRLU)o-^!y1!FrrS%ttzHSMcFlcgbV3ck6mnqf=D=}YD zSQC*^)1F$SRdA(Dzo%-ux1e>Wj$vQX^`P_#Z*uAJyM|@=Z|wE%4SRb~Urh6%+%}&5 z{K*R<0p7G-EA+!2LIU+{J7XK-XEmMnbe3=@7tOsWp*l!=iVP{C9Br<K=XgsBNV6WAKzvY5m4aS7SqGOC*{dS!mvVCow}V!Me5v;!cwbwYDdHxH*jz#KIZ)~&8W{>Z!k#@J-sFemCI=2qMGY!Die8sgc&Q8b6t7hNZCm~GF7J2A_g??7QT~3M^N0Ui z?SJXNsQoDm-|CmPziXkburdBZ<}Zpb_Z9KmApXYnAG^OlK7tQo%YQ}uA&9^4bNhQ2 z0(Cav;2O0`E5d0 zHRMvRwfGdq1*W2_LJ#;5RA^W^(a>x6Rx`9q%5+_W3Aw@=G$!|u@djRby8=$j zs1}8_Ya$=oq`-MkV1e9#b^M;@+Z38s=>@0z`x#zQ%c&OKbht#+no@OWIysM}(}g8`+-diWKzb=pH&F zuAX9B%ygz(u=C&p_GYT6m@y2u5y%K2*r!T5|im z2*r>|<3&Ne|Hs~a!1cKO4*>rril(Bag%(ZiU1mcnLVHlsmNY39+LNMGG*pt7(k`Vf zQ5u>wzEPy{{Tlgd{yz_Ouj`Hpslof3(1*p-f4_rp6- zM{NFmv;VgfwuRQei>>^UFOPp*D*flv1h|-fa!MTgSrfg2)?(p4S?^AnknlY1`n$%$ zFK$}B{d9{`9Nl@_e+~2Lh=k7A$j8&+GAy`3^k8|HH4UzRS2m`9C`+hQ&tq-zLE-SJ ztY~91W+MfeBktGZnFURPMW^Ftn4S9jgR2<{E6((s&ynmoFT-q_!A%m)(n3S9 zg;nu{k<-Wx*07bv9X0`0He=C5SVCW^J#J~rsW?MxVzY~i>o>U2w5?Tkw0(Ob%;7Ct zh>&tUg@(g$<*<`6>K_h_zm?E`{^4iM--(R1S&aSf{6C@nxe?xC1@OJ?&uMtCR?fA5 z1%5*OO%VIw55y;e*vNb#$R_v`;%|n>IRw7<^&@@7W^?g{79Rg|TqHKKA+PB_ZOB?N z#&hxUAYB3Q0rHt3<06o`NeRJfum&LG#)u&$0i=Kokb|{=0w7}_*8yY=Qz}3WkbT%8 zr2`uPvOXHp#$yCb0GV%kBiIBs0~UacNniuWzB?gB`e?QSPJpaef{c;m0lWYi?}L1X z$h`5$y_d-Rk3s<1R|HZ~fZXFE4kQ3F-UOL*1X*_lxmJeE|BCb(BK1y|XC)&ib0eO~Q3O z8}yapaH89@?yM4;92tK@tgljI>*ZxO%5ap5WJ_#TuEp!9HB<6r*N>eiW;_tqz42q7 zV66%3*qsv&9y`0WctZ0ym=j&F*j>Gjl?{w8)+M-56X8NVr_IE680x6gXJ77ec&l8h zW^sYmn(MI#{b5Pf2M3}qmX}<>S<(1z!pK}K;hWry3#in8%SE?A;izF{>fVueGF6;W z4cv!9ul?0bgA1*{=F1;){97F5Z@K?YsT!=-2`0h0X<%R?9~b<@?ja_o z5}a?p9wuh^icUkgrtw}n0SLnngf{ucT(vE}Uck^+LsrpVzRod3$ z)_$&4qCR$#lNM`Iho|KG`cJdnD@h`uEUL38zCAz}Wup&5yX^r4n)G=kZy|`es zGUdD7Si;I4cUQjF9KH?a(R7&6c(Wvfl7f>~_r1my)6|^IsQw{xDyDk@L*u^1D3$`G0Z#kr64qNf%~{DJHCSwIrWk>kLC) zkZD@6ASQlCOSV%^tySyT@LS!Uoac#MzAs3cSH}g{1#Jl(xL71MRID?LTD2O}FkITt zVvOeVRi8yM6|YO**(RZ%)OR|&F3>_g-)DDLm%hB^kvu2Xo`F4E)@Qq}3fn^{yg`}O#t4RWExS~!ccZibf8$j%1}n=PV>{2Ljwn;TdvZ{4EW z93)mlHmdm_2C&SRKcp?Y7|I{XH|uW-|APJpj3S(dkN;U$i&N;8<9at_IRYz@d4pphc8R`yx<9cTh4#~ zljj+?a<>a5q&WIMRh(QgY22>9k#!Bup=K+CdLP~=I930s^5SiAY0tl_MiU?BK?btq5dWPrvCla7L1BvyLHYr3LB5Z3|AvEf3;cZrn1r9Fz%=qZfJ|D5eD=%zum5`d(4-ssWA*ie zWhGk+?=%(LW8&pP8V&3H(bL8w)*R0gBck`Xy|;O2#dN6X98dnqoSrE*Y;n(8DM6VO zk>tL!`=`?tt`xH+Uzcm5!cz!L;w*ZBdNJku(VMZZSiV=;TIcCNaTYERZB5>lzrWD+ zx^-ePe=llp#BgG0h`_1A5Sw%7bo8m7WVlG*%t?dWE^_$RsT||wv)3F^+rJwB2sNfM zN^Z?$!HXBs+y1`w`TP7Y$TgP5P=7A3|G9MTUlzT}U3P}xMr8Je34OEikNE02 z-nD-3rOdm}u&Y$Lj1q^s-#^yYV6aw(!6~M1Y=k~zO0j9vlVZiA{b|%~<^G9pZ0lBM z7pqlo?lQb6eK)Y%a4IeIz9n{;86~qm>HgUH88Xaf{gMPb9vMk3-kurl+K&mww6uD| zUGn?$SB41wanMk*MPyCYgBueiJ^s(lKaBCdcs4wXlFE1|B6`H+ zhP&i%_r4>iLG9t1xgI)?E##xYc`v9kt zv&eh;pEfI~tB|n`$hHl7fEKdN&;Ke95Awb7ogp?dMg!US7asqI$KUut?D_sDfrZEa z{QfJ#Yx&;Se-+{*<8_dY8Cn9X@IG%}{sI2J0)OQy0>b%vYAv)M@bOoy#9y^)GmX|P(`yQ0)% z7DZs0-F0ubX<=e@j7)+3E$!k<#UIs2LsJjnXGvc=!#p0-uP`N=+g~xm)MTg8EL6lbm21DoFl4ANo%itGgnjkY z%-1i8mSFy&0W)9!B4e}`WBvQ9%ilS8-_C;zzyo*!FW?P)0MfUB@Q0rRKp+SL!Qdje z1VTV4xD2j{veCZtK=7DxuSK?+C(X&@bB zfIA=)Ap6{hG#liAT#yIyK>;WPMW7hm10|poAp3PfS`I2eC8z?`pawhuwcsJB1CIc* zPd%g!;0b61O`sXHfTy4pw1IZe0g!!OLHZ0l2i>3t^nyNs2L0d#cnJo;AVBuRhbngn zetrXn!3Y=yV*mrN;4OFu-h&SS+3zEyIPeKffJra~rojxD1t@sz<^G?4-~XdJe*ejo zVqb&zhMFqt6;9s!8>dWq{aI4wO>AyIn?)I!i#VVadDBh|@1iyCAy&>QXN_xR*mn+( zVHP!f5EE6YUP6j#s|u!e(ZbdQ74PboC9g@=H_Xxe3@T%_7$xTms#xZ6(kmt5M$SpEt&;{?SF`x>b4piECVpCDqJCJ? zeRY2A4~^&x_b>?=ERW=FR%ohYyUhDmoGl{2T#@wyyC2eSJ&LkKokW?Uj-q%`CMYx1 z@z3WN-0J`ZUu&spuSFJ|Q zL{^S@4mWwr)^~unaq6XvdDMkkDs}0mqaS1Pk zQf_wCoM2@U<6cYB&ykV#cbBO@m$kq8W4`<_Et2v>_RaB2@F(>@?1eW6PCLJ=|0faN zD^7rHLO&rs4?NCc@V)WxLhMa*@r8dvd|rsH{sZyLAol0^w_zWVpAer79!KK`;y;G? zWOJ|oSGPZx>(75(e@@g?$?)K6Z_P9pwpHknS4}VlCw1cv6z?&y;k`6ia*Z0B)=0xG z)p~JtU3j0P*kQ4Q`k|9srqrI62+!1)tiriOGNWJ9o zB5RyR3G*z<(--=7+Q!|c4jXhBw8vP#OPECk%SzV2Exy+!+v?JlJ34aBM&D#|9d7Tt z`)*mtEkoqylskk6qRe=Tvvl}P+kIcYR7CX;t@`_Fb)n}E^Yt$kQl=I``+*ci^oRcU z^$KOqK^-pck@Zv7Ex+RZp@TZP^MlCA(ggulXjW=R_iIO6%)}}nuo%jKPINi0C zN80jTSXxfx1bZ?OmzG=~%{Y;*v~@80V0eh!Il8OSFG5uNb;l}Y@m+Rf(?iib)NR!= zw9R&U+MUj9LDt02RBcHF;&w$4#QHtLXL7)ce%k58QsIX2!trf?BGWkDFq|gST{A*2 za=PS@dDQrek@{!-9CSmb|M~v-A8r5s-Tbr2`V)(x{C#`=vt0fbZ~4m`zkn;kYQX(_ z!5KW+Z?1EwXJP~Mn_Sl2Bvy@XKK$HdL(U_Qz@cjA@-{9-f)MKhJ%Ante)#Z2^Y>p4NEw(2D9@eslVx&-JMm_&oqekJ(g{+ zR3D*vC|@_YSCQ3?Ot7ot6;it9k3TCG&GCn1`S`Om*5Cfvvli#a?7^Hf81&x2Cz=n- zTCxVq;T=;I&B%-iF<;AbIrqMQmsptiCDcZ`!~E_m+;@n{%DXm1Gqg!bW2(zlDfP^4 zEzTr_nCDR!CcbYwWj14Ltt5OpBF1uyniQq0u~BGb5;kw#2{TrsY;=D^Sgy!3r(HUF z`sATb`O2Qha&0b36_AJNY-XH2WhUUuWZK3t=eEDNtB;}9d|JnRWqCcVi z$qt{S3i#gkcNctC+W@kO{e<`&@HndAd*i=`*jwk~i!VI>=eS60WJ6xlf7-?&w#;1o zZJ$@J`A>WN{qJG?%MZs#hH*&G#b0iJ|LgYmG%e0M#bpO(`ekl>pECJg?D31249E6_ zyy!6J{xmuMu3%f+c0m8O(U1xswe*v3<2hx1=45L)b6 z|A&EZb6=^2j^CNDe;MKXv>49+Ntdr5ES2kbA7pV`+(uHc8so~inqJc>@taz@PSmiB z-Q=EzE-Odkx+@WtPkhhBX-AN&7#Ug+)NvM-Lmt_$0%R|0LH{yL8J#CG>wh$ z$kc~Z3_tQCI9W!Ie{wK{Od;dM^o>#zw>7TK2BaBMjOZ>$kfi#i51itlzJziom+2_HC;Swm}M$^Uj??fLQ} z@Qcb19vll+0A$Pv1*EG00U!jc!5TmWhye*81!RC6tOdw^T#&8<>j4#@1~h;c(18tr z9xwn#zyy%}HbS}yYz8cV6|ezzzyY>^t$-6C`NbjS0la_@Yy;ZBB*-rsdMX(nrfqg(3r~p;49~=N`0LlLz(!)R< zXaG&11+;+<&;@!x9~gim0NKwFQX_B-7=z=$1egLdU=A#RC9nd>KGu+)1UBFlumyI& z9ykC;-~>(sB)>DHF5oP11#Z9{{AmBra{W0!E|vnu#jaSn(D`>3I{(K)?w^%MkCpK; z;%cfk4EkozqWtuEFz4I39XGHtZ72*fJ#6GB@Z@ol6g{uf0}jjVgzK;JJM&WvGBqld zp}X^b9W#x2^u~NF&p?VjYoPO~O#$go6{a#*Zs#db^AI|19pn7Mo9ZCi(PQdtZ$p3# z9X7^WhQol@H+5+3tIl8#`=V9%?rc`;GQMC``6LUfo3Q)bs*j6GaEurO72Kx2dq&E4 zA~?b|TQh{;w4Nuw+m%*TH)?;L@$t*uv0Dy3Yp*#N`MJHh(DT>%`j`I~)xSSl{>Wk0 zMZC?Z6%=^*6nL|h%j3847j6ILj=ZuS8sRnR!i~xD7S1nt({8r+NKr>V+}YQsl;7sN z;#xoeWdaxV;r&8W%owA6m|!2Poa0Y(&RV^HBY5*wYhgmBl!SD0SK$^BxqwO^^g-^& z+zE07GX^IKKcCYqbpFNp^0!#VPf-3pyMKS7^&kJj`ycRRpe?Be;56gA`adY)ykma+ zhrq()|8V~YGsH*MP)9bwUl5-g;v?f-kxl3q#Fv2h^ZjoNEx(KT{KsJYZA<$5;Er`@ zy_cRXtr{0!ziQOgd0=#jJcgO`{(17IdnSEF*)e2O+@nh7B%fCbJOfEDg+&-lc+h->H}2UT48pnX<{G9<_$#RDo3gaWZnM_x0D4x?W41 zO$$sgq}MSGqcvK2(I<8lofHNYOM)w=kKKV5pV~$3eX}N`K923FS`)whW=|q~rNBxn z)TuKlF2m1bslR+*zWsB){=_Vj>#yHlKVE46|3dq(7FvJ)FP9&;anCkkt_EKNf?`4= zw6sR~6Q>x>dtpP9yDza6Ug91$&R=V7Z@+q&#;GfW29@Dvml0DU{<`_uO!F-2uJSW; z5|PfEg{*@sPc#mqCf~|xPY}3E>A%_8e8SCAheyRqqDgNr`AUf@C(PDJ{_)|Xx&c9~ z7f+s%JQF$Yw`IOdWuf)YeEA_?B-;Cc}Et@D0IujP3>U8>%#sPDUQxYB3O-7@v2b8u3D)iiwvD`{ECPUveDx^yG`iy;doJ@wj zi3L@0q344YI!U{UnqYz4N@}rDi$S+@0XpN|)3U`T#V<9wNZoux8&Jw(4Kz@^t z*B+uezCB!i?}JI41m!T+<9XxKG3_v6hW(lxrH1aJPk93Uk3t7HPB;V+z-(muXGj_o zun98U7E-wLj55kRd{S-bju(pB(h*&C)!t$awDoJ&|HXaK^W~@UU!MO7|AO|1JhVTa z&$YiqenI?05FhF9LpITc$NxP4f+0NC_qKnJLj3vh_hLUOzR?fFKLPO{&b|K&9e@3! z{g-60qRevtC3M{8EdJ{Ub(PHY!e{BnV=>|7W5dpT!`Cf#-+KyGoJ`Y*%n|-u!4KQ1 z#BJ*bAJh={v|H2_+h8aws!QoyXs`?xh0&q6aVNShWbd|TtsdJLqVR&hfOBtPqkEUa zv&8VYj05v0_(&oBhixI(KVoX4S?23cwncLO|Ly$E%jf@#_WXb1Bf4$G__hoGbUe2! z^>sq!!WjKVmIBOhhD&44Kpg7;o8PI2l(hGQ4wgAsrQ{79xiUI~A6g~gq*hgIMsUd* zZB#m9^GZ;O=jx{}ldz^61rIGbIJZ@~KS0F@;p!&Ya9sUKJ~_%3m7zoa&S(2RVBY3j z%jD~zIN{mixQ#k6f|q*xwoe<$L_TJyVywM+r8xS!q&eRhJe5*n%eG)156e1gk-QzX zVr0Ed3X_1!vk(>KzqpNOzWgkf@z0e1&&FRa_dosX@pltSx)P)j(ewY_-ETL53k1I3@skWBbG!<%Va5w^jD+ulmPqBGo6 zcq^XLJ?6u~mbuMaD{dWq`yk@wF@4&#PU85F+$>@~QJ2uqqB`U-4KvqnWZ1{9=1sNA zD9*_4scH%XD3IOGx>e@lJ5v{3!B{Pnnpx05Z8dE!eQIGj52k~vo{ zQ{1lavfd^}l*t@i`*V{5DYGYOCSUw z`7c9y1%!cca1}&=NDu|Cf$Ja|!~kTUI7n}Rc#r@R!A+0^Zh>TQ8>9dve;TCeAOqY1 znIH??1=%16&0llCPpg}))0bYUuFbI(RuOS@*Z@@4Z z0i$3HU;q}p1@8co{{y7sb3fxC{RAe!B$xs;s~{hwvj7D@{|{fk{1DuEu%<+$5F0bX zI31CKE8jXrfAdu)&IM<^Kdif1L7*$=*+)m4-9yH@@uSBT<*K;yE|Pb-k=q|{o5Jr) zQ~sa?>y_KpS%f|14!5N7M617xr=^vz@7*T0x#ZwoOpL$F>B+q_Pd5;H*;~=<&3Z@Bg!r8NLY6C{(5~iZh+N+p3u7RgDB33Is zEPUMx)+=$3PDz>+*c;kZt1=k6%YHqWeE#@3v`Ee$m#_aXo$Fbz4u>x zxUMBOa`X0A3>ta+39q}@H*xd2thd)nO?&xNC?)E2_GFu{wzH^Nzq-@4z{X6q9h^Hh zqVG|EGZtq4`#-a2zW>Yp-%Diu(#gU8prTtHxS~FS;P|0~+CAp3JO^z}tYpJJs&8w5 zUT0H$?1Zm^Pp;E5BSx(qA8unB{LWY0LDCXLD7)nJ(?&>*&xByF;Ck2>4>O`9C~g@=XFrG%v~dR=8^QSGVlcLvFxU?ep}Nyn!C*?P-d%h4zCJ6g~E@%PxSup2eiz8{|Em^zyE?iq5ZiXY8!n3 z&5zmdsd!SM?Sae}gls}TA-)nkjsf`I`1wfNXRiG%{1f8ugNHlv1Mw>%{>a?x7x@YC zl_B=gABg|ttN6>~XMfrH4U?tl=Ob06H5upjS4m~=vbi->D`fhD+uh9e4vD1ucBzl3 zwk!?bsY93S`8t()13i;zXu`--hVo8UpL(J_?Kx6eFL68Kcp#n>CO%G)ZlBev^B>+wmm+QMGP1ia|3;fBgGQZ?-cKdRX@QqsJ=g zFP|664`bv%7O|i3WM*CVx|VbK{n7$wElNLMwV40@_br<5Kk@SQx1}+E*JK5{Iyret z78j4{(rwPs8EBr`lg{TYtW0fI*ZCks`LUl5Ycmjck!NH6%}J?e^cdVCi{uh zg=!X+bod3?EsE5-=M_pDom#u$H=$mHj^Wa>7^~*=1yk{8r=@@-KWNiPt zOLU9x`@h`&TO#ehX(HU=G=rgNNnEYf>C?iGOQO(4&N^a=r|PWNJb9lSU`qb{AZu0$ zAy%O#S@^Z^O9O&g)QcNa4lvH6zH1hBU}VERb$1!6=^IkAiKR8c6wh*_j<*TcnX%rb zUFQDE4IHH*469;lzPogwK0ciM=He1GlH^IMJ;w8n=y2Cj(EHEUI%^O>wM z-~3{HzXYD1-d|4t_FMb!*`lfcmdBqhk>melyb6}!)+{PF*vC$!CB18pf8R`mGgG9A zk!5IZyle25V98xqcB{4562*(H@QX{FMb&=9Ma|UaUYSKDDa-kx#uG3zVUh0((XVs; z)08a3)XaCTqTyR{S7P_EYV^75?Yt+6`KuLg{N17dbG6!5!aAjI;HAHzC0&S-MKR0! zFjgh+m=^EOy^nZ?tzJ~KoR-RSyvX>_Z$)p3e0CX8R|Ugf&D&e{>(ynVjKWw$&elG5 zY8al-IEZbl;W5{2F=*)Db!0T5zc#noGTwJPYd;RT=Zl5uDt@Oae!~o|giU{U9j}w;mV*3T0@m}knn;S+7E2BMUs>S>M_0!hE@nkWKpId74r_7%} zu3jYX|F`R}nS35Q5cU4M4^f5kpD>NC6oj2WtTZpako{dO!uJ0kRJp zq;y~dpa%?q5ikK}un}wmn*j@81;~EeA>{yDz*fKsxBxfc0la_@YycG=L`10@^?a=mKP4eMk+!5pWb30wZt?7=z=$1egLdfb8Q1sU@%iCxA6L32eYA zU<>SkJ#YYy0NL*}q-TILZ~kKvY!uo+FG-nlin^ck#pOsy;JhDHg zSo6eTE1Bj9x|i1vxwr2cF}SPa)N1YCO;Csnysc|KBXX~KbIDVVqUM7tkz0>HDm8Jo zL$T~kzY}vsk)L`a<@UiDG1podLfkB>-uVl;fuPl}N zcXHSG1L(Y0!myNYAdNv558TyH?kmGqVxh;pD}>HOU=PW0i{z=Re#L%1aSH0XbccO6 zDab@&G|!h(l-ETc3OKrYHOO z1?<87t!%}?JD!*{+1(@3w57WKsA<5Wy~nYRrD`&a{`7wFULsgv_S}=1h8eoHV#%Ya zO1EA)p7}7Eme?*Nb4Xh{dzjHOjy~$6X;(Xwz%e6t)s4)*4Z;6e^N$fMlJd89dHupA zQ~vnSq9bhSI1My=Jo}Xd%^sI+n1JzISAo`-&x~^-`!g;+#8usvqO2$4U&Bt&#Pv#( zBWQqjz-v#~*7Xt!9#qCG8_!EzFc5IriR0;ya4|+(6FTX43gPsy)FXUTyKeD3tda?- zv}#e~E*TfKk>8O1bQ6=JX77dx4dv#v?6VTBegeho!GYn^s&p zmb=1zR7GYVL)$@2cU{$MV_P@$w42h?QR`gARX2T24YTfUC#QJus7Wb*tx_f`rtr2{ z60Uz2_C(Q4aGZq1%{@JMO`WF9+T-99ySKJy zhFxBE=@oW=l_$fzmX=nlpBFtmuT$h1?4a?|zfSd{OToY&?-~2LL@l)cV!r$#^9e78 z{^xJ|KbQNz7VZ2wANe}v$D3N;2P&aOJ&XCzn)THMZr+WVz7{UQ6z6u@?W{meiNf(b zW54#@cTdpQ716$3M-n@&gyGYe>B1@Xr38N!bR$kjH`TbgyE`&d-;~ z1@!+-)8Hmk=F6Yxzbt>kKdJpm0hP-4w*OV3{kaRCFS3dJr1+HZSl=6858`j1i!b^U z;%h?ebw3c_0^*a-#TWYt@wFiK`X7kz^ws)|YrQ7i)*0wLf7V^UJ;cJ(>BI??Z-V3MfZiLidT~1k3Hz;wOZ)f&yZJBP@@UTJs&x;o-L*b?PtvtRF&y=Fjyq4*(d|1Ld5^0s8igsX2;|ihEqA4F zlHyBJ;?EChkjwOIqPcuK`C@{3Z04Z@*Gz~AkN$Xr1IpRg+kE{i^e^k*|91H!MUgL$ zA73Kl$7Rvp)jc$(of=gJYhQ&Il3nQQ@viLLS6Clx>t>&$U)LjjR$+2|xhk27O9m0ORjNc`OO!4{r74wP` z7V|KgQ|$&?PS$D#c}1QNr3Bbg1JYB)S1GJyYESF&{zyX;y#n*><0(bqmO|sZb*u^D zCj46sE8i-L&zC>EMNMKxV zc8;xoqM~(Zjp!$>$r2$4x3xAFG>n%*Ef1O zl^r2}sJN1$_q;%RZ89{%eVebvORlzZ&8PJcFTEdUeQbCHe2wyI|0mEPfjDj(M z?1zQ)EqDjsgAZUFd;~b~2~2=VFa?l(W+0sfD1zVb|NOV@$N%>E3-J7teVi##bCgn}yX7Dn-Zs%t`k-742!BS^N6n7?v=|SV!sB4Y$ZwqJ!`@5AT8{@*ix zSP-=h#sB?J_fI)j!~Ba-rTn)2DZ^j6Ahv->5KgpvL`@ZBLIjaby==N(h&0x%tWJrDwxb(Z1f@jqBbjU}-UQ zt@pf&4~{o%mhA|yp^<&tRKJ=pPRfQ`lwXN%u(44!BS|d7B9=@8of~12>LP&EOPo%i z$qg}clWIg zfi^yS9{B?~#VvLNg{^U#83{q1Gw5!b(wX7Oj=h%Yd+sgKdd;{oY!gfHLW2$Rhg|MXn3UTi9*Eqjd4{9~(4gXlSz9Z3&6 z9_KuoIDKiG!i&T%K4~YTwzkhx-v565*t$sjA4Pw{`KLLYd!G1#^UpLm{}i4({}=lS z@!cWzxgUsM2=N8x;*0-;_*M}6{13#hf%t-R@sZZo0^47B#~}8}ABf)q@zv(yFOPp& zwBujKgQ;B(VDl=O17}1r*Sa~{Txcvyq?)9dtt}FDQ$?vekA=~QD%(uo*u-(GpCI!MG_ z##Jocc{~|&;zBAerT6LcasQ)^r%(4=NK2pxERLBS&!Ki48+SAmXryMnT7PI%%2t2+ z=uxXg&8`kDohlO(s|^*a?iH>K+R}o$bzAH(d_{Zbhj?y;zo2?%CFjo{*x~!Q7}}p? zORWD<{3nb*(T0!G7<_O4%K^wcKmKRi!t383?tcowgL{YP>OcNp5dSQkDs+G( ziC%3#Cu+!I$iUrzmRm+@MLN-#?4;o{?$%a8Ieim9@24^#;!2tuv*kmg|#h;)}El%4?oyUpP;`5nYmq zJBsPqiQ9phMeW3xc%?-)?`lj7YwZ+gDC#{Hc3fKPY8XdL^ySaD1#-jp1{v>#`l|iK z0iWk$s6R=T*WX(z_m50ikC);yux@=OzUY_=CJxMicVAm$j-Cp!)_aH2!Yg*u(xU^X z=@J8Y2iH*E9=&h%BJ{0B$rObQS5#lLuXDfhnTAU357UMEwf0Ao&U&raqR=wb{8-{J zNbmcpu-ESPj1X>3Z-bBPw(!d6&CQ8V`Hnr|Ef#uGYrDB@oa@?j+|I2i!3){>gS2$L z>ZRp9UJ}e@v#3>?IGu{xlR{lPhqLrm+SWaMROPS8BwpA~~*M1AhI_^a|Gw@Av* z+U5HnmrVJYEQ`r@tdeDz(!}{=#w+^5FZ8t*6Hi~CPL!?*;tlJz&b{AU@#0RCk_eT8 z)x&&gQ8H7E$p|A>wMLd&X7iNv9h`A5&OT$sEXu^qOx32}KQS+A^tUzJ8ElwEmCH_h-WrOge9E0R>ROYuH(c^XLltE$`<++kUx!4c7OO(k-SKc1L|~|-|u6sN6yCS5U(Xi!r6ZCfdsQfs19|_9AkPVSRo~`wLh|*AT>g^J49bQT#O41(KBNqt z{>yw{KN^zj43dk?^vah3id2AU-l)8`%VZLj3*kIF{gh<4;5U`SmY_79RhH+rLBv zFt63z>;E5a|4pyMs`z77#`FrqD_jLIu2*j4_T24&V`5=Re(+1YyhoAOI6qlc8VcXv zcuKCn%0(Ra7@cC!Nw13&?0?$$LE1rw%+ItfJKKlm+)lsL&=W zvT6jLlhNUA9dS8`X|8nL*mfdgSccoFqCzCpsw45WL!@9=nJ1A0eV~k%3YwU)NtD~> zoI583p-8|HR%;IijM-l|s*V{yD zz*fKsxBxfc0la_@Yy`vCfstP*Rj?l%0BYbMI0Oy@b)W%|yjqZI10A3X^ngAv07t-4U6{~02uc6w9OEsXW__OvI(uZWcO5?=k@_gL$D3;#*~u22io zy29JKT|PGs7x-#O)?FOlR-|O#P1#&*ZQ{)36jLd~+{#0u8N|b~Bf5M~D9ZpJ+i-8X zfXE0TD+BgI6q@f`Hzk(O*IH_akVI}os)77^jc{$Udu|C)nY5b)w`E83b8%+wuP0tr zK8V6g?43nVU4daqcW=gRIr5F>#Cc-~)o^vzNy3?G`$*Ohf@H|~CCKqK^Zi=+8)^4U?QhI{Da&U0Mv$h>zo zJJ!Ba9CeJrMi#T5x#MkDzuWz@cCYJJg$Hc(>+Y^Q5H_G=XG;3AsBYzqri`V09T~+_ z_e&J+D~~x3o^v6LcM-!3Yx8AoAS0zN7>4t}C7;0UwHB@Cs?tGu` z9pL_L{GIe7IsPp7zb%>aGc9-z=h>$xS*^~rwg@W{Y=N%BDL;|=riQ{p0A7$GeZoZBU zR`t`66*@3|Eo(%x<+R62+FDqi=Y*<9vy)Cm-Q*4zp+-ArW`9>yL{4oEVP-&XS`tse z`SI@8{x?5RcO0qA_PcZ0BVIA`J$buMnYs*WI=F<=EYc-!olZmF70GJ{k7oae97xXtGEyB?&K>zBhbi=noC3$;(f-)Sg0xPM z5$!03;A_98&ZVS)r&;3*$NZx6W8(;E%X@^;Ue&7E18j#*EPbBY? zgK>Y(`}ONUo`DyVlQTCS$>|91o!RI2&=x+qKfZ$-A)7anS7R^%$?F6;zkV!M_>~Xx zdk@;1$nVd<;~?+v*Lje5zDOQsB_AXY(idnAElT9mvis)qN8Up}B(JG<=xk9fo&&@? z29Np2o-yRi$sft(9bvVtxE2rTFSLcVI}PExVhR5t&%pq-5&jM7OEj2EzkN;t$Rjj; zIK}(<5&pRM*LlStTOgA6p{*U?T(m#t-uRa>L|~Vof86h{p4oQTBN*B1A79(wzcS<< zWJC79|6vF6ZhvXLTYXcCkX#7V2>Y(zbDj7m7xKw*{3(|;lwM=#Vf^}2HZe6bx3#l( zaCAC-=7NW(m$#3vUr6ZXD`DYRBO-6aCnVlXx|MwUAMWz%L-)UUIWYL@^$_;$yZ0Z) zKjJ=3%vPe9@lg19^BeL^pqaS>f8{Cy!XvOuD6fN_pzm_o?T@?pf5^H?ycwSjYvZSo~$@8rT`uvx1%3 zW2`>!Tr{oGF#|g{$+kJqqEbFtjLo8O_BF#*v#8y5vnZ~Kq*)Z}6T*k3S@M-V@WDfu=x6E~bDb7xGuj7mhFd`oGTRFPJ!b@vcums|Q zczg1vliXfKxV>~!g7v#1x5Sd)F6|AEA)n!!BEa_4@WHBH&w8=+irwc0Ol$FwJ2#MiEz94|ACdKh7eoKWn*V3> zXNrIB0sm4!|IMFp{~sQ7Bh3=P&Pe(_k8zL?^1|nZY};T3=mlPX_#FQ@Jl6NdH-Pva zbMg6qLVV;%Z}J22%^`l>Tzr9_5Fa^vF#Un}4qwGzuK%-ha`W;F3d<`htEy`r)IMx# zZh6|;*51+i+kx%(<60*&`V+N+0-pjUi<*e(%_}4K&YI#W#F|u63{36!KRX!YVw`M1 zPinEZrFEr6e%Q>q^-BIP>Vg*3^uZk&43&*?+NQY*F8Tes1)V$gp1-SFeAgWf!MZlon*2(7}S(3gO;4GqE9Eit4$atNR*GI{=(cfS5A{g?IE zfBXBp2DN5M-G3|m3&tPN!pY+N{F@@bAU@ky@kM_@d;y5Rdv5%N*e{5`9pdxN#h)*K zi)H@8wafDtE|u}GlN}|zxYDX`NQMo$1n2IxS2ST*co-+~w0x!JTGdbHgCv1dC=r z-@0V`AnD#=T|4Gg#iCf}-B`vKF>8f$o@RSza}ixX)$}3c?3?o}-n;H>wCZ_Br%6Uo zas46Ojj>#Q2shiT7dUq*ZZ*r!%rYvqMhvT<;i>a$h^Uc8^4LDFk|*?i%j7NhKmJhr za~cnuHdvistn3s`(ImCXwy*E*aMPPJX~UvcZ+WL*Gv1B;^byZX9JTJe0+kdER<)|o zt&&IdekrA$GQCopa1{M@CHWG}%c(pE$E}u)Je9m`e&Q@wq;OYVQd3iVwsBpE!ZMea z(tY5g8xoaShb3=!k(n{*NSj6FrKaT?3X@M32+`lv%{O{9cI}1L%FP+&W1cdcs&u+e z7tn_sx;M8N-Vu>F`=P#oDb~v9G}X%>NvHQkTjIOb1e%UMFTT}s{r0x6%8%G0x&FJ< z#()10kN+HR=zP;}9W29Gixtj&!^HU1MO?%eO-^J!p&x6YdawCdaduXIZovh5;!k&V zMLH<_33VAWw_5L-j+EMwj=L}(jBBLI3l`2;hvQHb5%J!K-Ap?=BFqu|=yJ`vT@+rV zNq9RwxoOY2lREaSFIiz>KLW8T2X&S%j+$rls&|8V(UKkx_iDqBhOj+z zC&@qs<;3+GocqW`i2HyQM6>E|7FE|54OSI24Ln9O+^nsWO1v@VG&fQ5Cx-xPscR(2 zcqF7@^=~&k=sbchEz}yY608CQfDo((#DEeo01`k7$N)K53n;)kKnK-6 zHUoOV2*%-wGC>O0hfo{ACcpyT!@sja$_Cg02Y3trwiQxNzzvXor@!la5`^Ci0bw8l zM1dF(2NGZq9&2gz*!C`PIIPOCjXh(QB^FmbigdiN0xbXW)m)wOHaS5n8&)WU8vUZ z$g5g=8=;U0eEgg+W992)WM_!RC5efxIIFuKKJ4a_lr(Ln${>M!j`X4gqu77R&d~i{7WiH4WaE*!pCkHN$$C_h??xJ(*Kg z3)wz1SYWlS4AlJ=Kq3D{j6jdr*c;&b&Yf(vlq#$E%K%r%%OQyJ& zg&EZecJf?>_LQl_E0_B(>GcH4kUKe6PkbmT6)S0SQL;Wh;i5g@f0pM;d#(xDle^XT z6`5W>(86EE7U7Wj*un`PPP)BksBybgFnONY?e7B#Rn&DX#GYScA2c!4@;we4cV&oX zh@#Nv>5RTAO+WtQeEC~E_b(DJAHSBy{LLS&J4E}I~QU>!q; zn~>|P*!}duNhO3+^iO0>U>I>Exw{l^oAnLT#s?P_-L{0CCJ8CdlDtE-#^h213hx@+ z>iz8@OmN}tkI(H6uODcCxI_D6aIXC)wD9;azs8q)9lp2y69Dn`=h|PwKOsIc%LsBW z#rMXKg!lw=@kM?@d}QVljh_VZKg_-V=iuk_-~#Xfp1=!u10UcE{D40|`d$Me z4FbX7BDe%XKq$Bju7EHQ4z7X-fb16q={0a2M1vR*3*x{H5DyYSBDe{VeQrUT3~qxI zkP6a3I>-QbKqklnNd9a{b3iW0`@iE*0F{Dn zg33U6O*x!zgDOCkpgW+upnIVEpa-Cbphuu85MJ{H&efnAP%WqqR1YG98bD7$&p^*X zFF<(BD>yfTUW49%nm}(s%^(Vh3Tgqhg5H7fnszw92hl(uKp#OJpiWR1s2kL~U>nwQ zGWyTQ{bc@1=pVLzp0|Gb%hylmwI_C+QiI*gWTYP&rbpB@`4lW%HZ^DE+a#Z3qp0Jz zny>0g%Qv%|aaBJkEn`BtLh><{tKIV5w>C#R!{?et3DGW@L_^WaHs!1hx#LwY?QtlL z7&$tjjI_#3VZyeKBOVfUr~UX`ulz?JuZ;4K`(gKo@tg1uw*T0_c>d#~QbX)&lPl%P zdOiucR^;TLU81F^iDkZ-E;>nB31chWn%LUr&+9!XmUl*N(yMcI(@!=eAmQ7q!Td_LiQ{IlrU!Rzyvtv%k%U zRT5Nq6;kC>WU)c!?B(^RA`|MxT+&Cd`S}u9hrZG<-I*=M#5~E4&h@MT03ak?re7wN#vY1I;_QlH=H*7R+4!i9< zFaD9e{lv9HpO30mtA6)cgF8n3``AzVAD;i#A7}pLb^BVXU5SfK!{Aj0)9cDdMaC9> zv`8Q+RyKK@uNZz%Pr){{+PQjOnf8oPEpe0P@6S(B8&Vassq*)WS(R_<^KzVCzpOVt zpJSSPc+ZUAwbop(61@I+TVjLa`MiW40>6PgwcMg2v(w3Y%3a3=l)Q69r`@V)LZ=(T z)Fp+U<(R&FwQsV)yHT~bzx?BUu=yGF=T$$cKSDp){`vpn{;Nxq8b>>pciO0a)JkcM z<11_XN$;!)T3sqXva9-V%l;5OyV=g=>kLF|q^RN>NuFfYP&=1^$QPrf_E(h> z)BRj7s#+>*q>^M)uD?sIe-Y<|Glz4xcFR35u&jwb)0J1GLkuOgp7!5caP;AYg2W)g zYYuCUQU0g(6Z>uWKWzVVoo_JzfV-jM-VZSJ{H*uiXJGs}=hOU$?l*`Z_gckWB|bO) zD-b`fH^pPxH;5nia7_e#Zv3|(eun>{$=~4nYupwp)+m~gdRqnN&SYb_RE;z3?Wr)FomF~yN(~HF_^Ai@ox1RB`;>vSDv5S*uG>;~0 zYN@|5qAm|iJV40I8d^>47FD%2y?g5H{1X;8&4kLg1d%0&jvJTYv`ZqJI$HIb?0&b6 zu&Uoybz1%SUaAW)1cD?;)ul%&z*gW%Ql2o1Hvx&hin}sYo z475O)Y(*ol`VA0T5;@f?!C4ZE5g=y%p#k)&g!;~ikp1d-Nwd1nUGSl6t)kA zvh$?}qy3%KPugFe{qf`2?-pdAq6H>b^Rm=8!6NR=$OFce(K>Yx58ruEsMtdYUAEKQ zA>et3sJM#M#EEHpQ?G~EBoL-Yv>VdS9PbS2+7r#+;2-LKpQJxP-D{JERH^pDTyxxfyhTjTuDZRj-c)E8F zNk)BR)Sv$1|7rwb1n>RjkMaKU<9m1+S(3K_-bfnQP$$+@wiY~C?z6U2nA9+T>5+;6 z<2wR6^QAMcscUTZzq@%Iqa}vZ=`4d~# zTsGHKoS~G~586g4 za9Pq`Yk7~<6yX?|b~mdmDe*+?K^Dd7!P}FHEL0S-|z+8zZBB=`te8axC6%? zcrg04|8#x{;}6FAW6kdne;dR<{L}bH>+9q1UH`rrZuoQWe*nC9Rs9sd_SeV%Kj*(N z#E<*!;=yP?`_K9*A)fv5W7r=ZPQ_#Osm+B4l6O`O-N8*i2#oV2yssLY;8}l3+@eyulyv5fpK3!^RK-!=wAiPEg&bpv!AU%*i$N)4QWC$_>%>c~=%>v;y#&DhknhP=knS#tf z^FZ@K=AZ?jUqBWhOOO?4AqcNu1ZNwNEyxaJ4{`uGf}B9kAQzA;2>Hcub_aQYJV9O{ zZ_pBu4`?aK7lbSk&VC?&Pyi?p6a)$eg@8gqVIUF+`3N{if}%jnK`TJfpp~E)P%LN_ zi1+S!RI{q1MW&GwTuQktVWQMm4`(yivqE#A|mu_&b zET!8Q|Lt!^`#G+kw4c29|3A$9VTY^HSQ^=_s<~KZxZ-`)ag<9h;zqhwJk3699qJz3 z{;S`!gaHa4vULZ`|9;i^oy-~W;v^^Xi^8sXFI+a=e(gB=;?cqfeo$`D?6>js#3O)lcv_pS6NA%lee|GkG$mtNX#EPA;k1w|+GSG3_A~u9m1l?U{G4wk81)CgXYCK`*LeG<{4n+B zBe8uQ?N!9#n2MBczDswTqSX(+a+ORj4sLYZUZ8KSd|``Jqm5m4h-#79Gsi?p#qC-H zPG_77rmQF)D}SIpiMG0)7$~yLRgE%rTdHri)-t`kN7Z%rP7d3;t1i-tZ)1~V&8)qq z3m2WdP4hb-*J&+OMUH_V-l)(z-L9KX);0axk`emcH7w{w~T{#Io4ZPDeQJh z6Rn*YNi4`QT7C9P`pZ53=XUyBI=u8ms^I0h&(cEgRVPnsO7Xl7+o$)w_hQr^d>`5$ z>d&|KKQrY!%s>1Lb|?D##bfGsh<^ga&)9!b=R3qd72?P5Me)%64)M>1_}_hs-^!i0 zf1BQH<2iFpOwHz5FS4<ooO zZ4-(c8y#Z{TgBTG@6Ua>Zuhu-+NJ^p0weYLW%kUHek(maBmc(rx&y))g~uQ3-f1eF zee%YiwI$J69|Bw)R-5bT4_fRLEYNmJoz@J?sKg?j7RAPo9ZnszJFV8Y%6Lyqy8nrn z5z8;-o{O`Zyj9mublP__S-~kvCE*CYgutzNh+DL0HyZ^x7JENt=eY+QBqG+U!ET zm`zpZ(obfktr(t~`HRxU^V1a0ZW<65^@hMt;ESgSCtn^y+X((mid^MsJ18Aj+hZgv z+lCUCJUH9YLm1{v^z&L3WmP^bJim1H808?bwIa<5gremS^7ls+$0*Qj4!O~)hSXD4 z#%wt0s6Qbyg|sP3K0fx$O@YlHPAi1$dNSaM`C?Bomi-SW^b`AI81MU&A7=ku`38$7 zVkl*GVa-(PJlfn^M@stIEWSf!ny=+*x}SF)OxhxME;4*q=Oc1r-rihcjr%$_F5Ran ze>Rf`K40@^^sGDYgp3w#)je!~cFaaE`$s!9jmdLLEb9i_j{7slrfR4SRXyKmJ$x|| z7NhhaTIO)$$4aq4!xkA01+RrinbJr3*mvP#^gl2AN&OKgNd2SwpMUZC_4edP z@4F@WyTz0W-DqZc^=7dJW<7) zfOvw3Hb3x67|P}c1ien`pq+hbnk}7Wlz*Q8w(nE^wZ7i}*#Er#Bo5{u82;ZFgRZYR z!|Tq!j;{&lORxPaa`?xWhVeDmeNFuT;{N|1;lFJJVQ{b4*u_u)Q0NU9wyTB(6#MM4 zg){~)m+s)V75y!Hv9+a>0P5Yu#YtHKNq1;t{127Xq=edlyDV6}gTD^Ozil=F{u9nlnr_WR+v* zGg@c0^aT?Rd>fxAP z67`TWE^|N%8Sh?S$eiKfz33wu-0esw{o(0_5u(73!JOp0Zv$jY7rW3|hEG~dZ(kqZ z(~apvP(WVITXV2Hkux+RcG^z4q$ zlan<;cJY{{3>H)B10^$%OBzg(O)~doXE7!0If{8@hHTEtW$bJigd5Z+4fBwFagxYn z(YL%ew8HH9fL8Q;WX01Z7^I4S&cOfm`~i&V2iA@*kmS4gmT0^ zAMB8wH%Eh$B$CwtFEA7JIk=2%X)E!4$Y4DK|KbPKH6; z+*=f6U6HlWB_SKoTay_re?Xto?S^c$Z#XN=*f-MWD6PTK}ZW8 z_kW#p4SEFZ+p*+g>%^^Zg<&de*hjaR(N<<}6S0LI!a{gKNbb>&_DIB@5<`z;TkrF*7#-Na4?=|s$#E>$o8bznDBw|d}{OCj4WIF-)gxByejUivZqG03Ut>mcU|If*uiUvJK{=PLFCKO<}J zr^{rySq~VybRW{Q&nOgQAB)`D{nMBsavvig3u^&jGtpamOcqNBjvv|WI*eZy+1eg` zR+gKUGY+|78q=8^ce@(z9_@L;G!H{2>)YFFvF8(}R36DC+l-hbcl!=mw8seBie@lb zW)II=2C<}$M>fB0CX>YxA18$*p-FKzlM3LVFkYoTR3NmtXjS*UAIwqS`~!|O-MQo> zZ~nm(>L9*T;LSgv#k~Y;OYgiLZ~g)2g?RH1*sAj8AL#XhH~#>W)!0Dr<{x`!FnMzS#1R)H2NDPZex6JBwgI1 zk;D-JzNz@TS+CxD9lv=cC(Ai1L95dT!_B@D!^+}#l-p=$DY8#nVmVoE;o_Szf{4Pe zOcv+Qao&3gn|+MAunbv4n>ad)<3b!Aa*hnKogyN+D|-!{#J4c)IgcX(KV*pORx=sa mT$hC({gEhsxt30_zdOV91mN#2lI!WeF)=YAAt49|2mk;8A^8LW00031EC2ui01f~R000C?Fvv-3NTaGMUKUc}QG?@T zlF*!_^B9xCFjdk#NI(<;DjBfbf@fI}B#H+E1e!D!lf(ufX{T{@xqpGUv Jj+RLT06U&`IGX?f literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/alpha.gif b/lefdef/doc/lefapiWN/images/alpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..49de981bb1c61911e1ffabafac4737af455cf9d9 GIT binary patch literal 147 zcmZ?wbhEHbn`m8 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/ampersnd.gif b/lefdef/doc/lefapiWN/images/ampersnd.gif new file mode 100644 index 0000000000000000000000000000000000000000..faf90fa016da7000e73e3cbac478543fd7a04fc0 GIT binary patch literal 209 zcmV;?051PWNk%w1VG{rk0J8u9|NsBLzrVG$wVa%sl$4Z&goJy0duwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui022TY000DjFvuWKT4U->8wpLrNsE>| z5`%JsgG_2LJjoa^#-u!mD;0zwFrm;i9t}ak@n|+3i;n~$YB&mw+^w`hJPLu6=;sh< zGR%p?ArUk(lLM^@mt!y-riyz*nmI8?4h#(nM_L<&5(5NqAP)OG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtz>% literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/anglrite.gif b/lefdef/doc/lefapiWN/images/anglrite.gif new file mode 100644 index 0000000000000000000000000000000000000000..f30742e70b1b4d043e555f346837eb43242b8f9d GIT binary patch literal 120 zcmZ?wbhEHbOG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtopFJFSLV>e2RHAj0f=h;E@I(!kZ#x+?7io0| P8+7(u)0EN|WUvMR&ip1V literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/arrwboth.gif b/lefdef/doc/lefapiWN/images/arrwboth.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6a26d1a64476e85e5fba2fa1b1cb363dbd0ee23 GIT binary patch literal 154 zcmV;L0A>G2Nk%w1VG;lj0J8u9|NsBLzrVG$wXLnKoSdALl$3jWduwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui01^NX000C>Fvv-(y*TU5J6%SlgqP9? z)!>j6;}DneBvau$N1^Y#@-TzI;W0xbjL75S;V4K5jnjqTU|1Rpi=d&vG@O(~Hv^-T IJ(maoJC>Xc^w@cH8nMbg@t;0dKwxU>gwvs%F5#6 z;{5#l3^1VhlZBCifssK6BmgplfyK_?gy-tDNp}?2iLe(6x~Fq;Y+j>tTICsw*u9V` rmls^vx;CTn;Gqk%CBzOKSX0qm8?^StX-)3lf_Z1!qTaYNFjxZsBCaw- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/arrwdbdn.gif b/lefdef/doc/lefapiWN/images/arrwdbdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..701bb8bbcae9b0e09d0d069e4a5be1fada76f7a3 GIT binary patch literal 138 zcmZ?wbhEHbpeRE Qt&+(Qzah}SgM+~u0B6G{wg3PC literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/arrwdbrt.gif b/lefdef/doc/lefapiWN/images/arrwdbrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..570fca03a58aaa40e6d7c23c5a55f1af873d96c4 GIT binary patch literal 124 zcmZ?wbhEHb6k_0I*v!E2|NsB}`}fb8GpDDgr@FejxVYHT(o$1XQ&CY-KtO;211SDv zVPs%nWY7W0fXrZE(KI;Wxq7eT1KU1PHx0R@N4esKi$ohU-h`+WtO;7MqCL%~bf2fL Khl?u%gEatK@*+K$->CM zz{sEjk_4H-z+zzF;dx@u=A<>{+vHf=WG$;ytGt>NS)zV>F&l+^ZQwmwsItpfaiT#B O)4pT}gV`<&4Aub310s=}PM@L6ZO-))_T6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471B-#d3D4DgEnc5pZFSegB0)mI&xzCZ j^}g1}I?X1hD*DV_(=B)$-7f^p5ONbfc;t=?1A{dHJBKZp literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/arrwup.gif b/lefdef/doc/lefapiWN/images/arrwup.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a770c30fb4167a6485f2a93ba6b4c9e81c70f97 GIT binary patch literal 135 zcmV;20C@jLNk%w1VGRHh0J8u9|NsBMz`(V&wW+D8o}QkQlaq*uhBtH3_%+R38C4a#P`2XaOddxipHTuSz%HHG~*`%06R#sGAsZ9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/arrwvert.gif b/lefdef/doc/lefapiWN/images/arrwvert.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c5e9daf26bb482bf5659dd5f62ff2ffee66269a GIT binary patch literal 85 zcmZ?wbhEHbdV|w=Bx1^<$W9MG~HuqEK!j!4W4jh4#85pbqqv9M# literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/b_bullet.gif b/lefdef/doc/lefapiWN/images/b_bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..0aeaa180e861d12ee0b131f7d713af607c998c07 GIT binary patch literal 818 zcmYL|PiPZC6o5}Ua=+!dC^foPlP;GK^TMXvm#_;ZwF_4l`nOz4LgyKS zuQ2Or5-`t6gHg4*>KmvxO1au(%9>L7 fsr_z`b6TbUiT>bmj9_ePZS`F_I5IXJ9p=(sJyFbD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/beta.gif b/lefdef/doc/lefapiWN/images/beta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6172e8978c16768fb7cadde044d91c4bc835802 GIT binary patch literal 151 zcmZ?wbhEHb9$U%nJMz@Fauw#&q(LRO(A*nwRjI1A@2Z#vqF24}sVW&N%ZQ`d+1_o;Y D6S*~0$;rt8zSTPZ<#pHwvy@O4 G25SH=gCi6G literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/bracrtbt.gif b/lefdef/doc/lefapiWN/images/bracrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..345b70213f2f9bc99b528aae2a89c0dc4bb957de GIT binary patch literal 121 zcmZ?wbhEHb=}PO-)T&T3U2;bU;9WrKP2w zo}RL@vbeZ74-XFm1B2pE7DfgJMg|=qn*n471B;fy2~SnWQn9H|-yOW(Iaj&CgNe;O dsHbD1Zkv~Niv|SbyFcM_21^}ynD7gRt literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/bracrttp.gif b/lefdef/doc/lefapiWN/images/bracrttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..76c33b52222f37ee7a778a3c9f8552f5830a248c GIT binary patch literal 122 zcmZ?wbhEHbNtwM|RiZhL2F^0vUQ7(u09Wc9YybcN literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/braklttp.gif b/lefdef/doc/lefapiWN/images/braklttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..67a063fee279ce5795a2e79caa2a4aa567942577 GIT binary patch literal 88 zcmZ?wbhEHbK05M@2>Hq)$ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/brakrtbt.gif b/lefdef/doc/lefapiWN/images/brakrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdb1927189d7b4db1c3160666897f32f0ba2f57b GIT binary patch literal 122 zcmZ?wbhEHbFfd?XU{L(Y!pOkD$e;sc vGl0}GFe^&zT9Yc!w~c4vsYeS6m&XemC6`vJ&*;*=IV*bR-ct%JoD9|gy4oLO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/bs_bullet_sub.gif b/lefdef/doc/lefapiWN/images/bs_bullet_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e02a6610c0ed14cf5aaef054fdd6bb94f51a8ac GIT binary patch literal 834 zcmX|=L1+_E5Qe{PHf>shG;2u%4YbyaSP!KHtmq*tZLFsJZ3rm!vTQem zU_gWvJb1Bs6!e%t@E{R-D}q}RWF;`_rZB?5?IdUK!?cbqBV}P-z57Xl2ZjoqMwdI(cKfNMeW!Q% zq4M8?$sJEOj4802jZfRTY9V1-vQS8%2@L__PIeQ$%7`g3-|N9`w`Lg1&jst$CNN79 z9;}Dl3C$>}R*?|<8Wphc<%#;KtzlX|TSO5xgo&_Oj^TgInu%po%Hrx2MkF3WprKSD z*$?<=D*is4m93k7yFi&r@{oLH(?UQL$= J{oOj3{{hdW(xU(X literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/bss_bullet_sub_sub.gif b/lefdef/doc/lefapiWN/images/bss_bullet_sub_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9bb133eabc5c242cead02fa2cc319ab69871057 GIT binary patch literal 837 zcmX|=(MwZt6vsc;ZEeaBceOck4`weiMS9r7qL*FLRT3x!O`?ZM7Z#X9Ea>I3-7!Qd zf(?A=CHn*FaRccg?t^a<_-N5XV0!N~%s|LU`}O;6(t&&LIp=qN=X}5CoO|7fkefq~0(Y}qc?c7JiqcXN^{aOeIq*PNhV68?11+_Os_E<9 z=ZErt3upH{zpjr%vFU8>7V71UVaY@hfhIHrh;#(ZB7@45|LS9&45O=AM1 zB*Vko5qCnOkTizP34ZPn<>F!qh(z3=QG)lkTydia&BGzJB!8S?<1=Sxx<% Qz45%iH!(VVb&%`-07Y!l@Bjb+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/bullet.gif b/lefdef/doc/lefapiWN/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..b71c1a475fc702b21c95d5edbdc1aa1d509729bf GIT binary patch literal 120 zcmZ?wbhEHb4+9J+{$ycfU|?j>0SSQ2U|>--IN`Z^uf^l0z7?LzMu$y0Rv3w{*x|!;S!s%* R`Du4f)`fo$#IrD10|3w$Ct&~p literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capalpha.gif b/lefdef/doc/lefapiWN/images/capalpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..f93e524cdd9b7902b98f22fec2fbc71879ff5380 GIT binary patch literal 138 zcmZ?wbhEHbtlf iBjK7S9_sU)YA~@h;Sz3fys?9ohxe??^2Z)Z4AubiT`R2s literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capbeta.gif b/lefdef/doc/lefapiWN/images/capbeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4c37026ab5ebd18ba0a8d1794553e3a808cccd3 GIT binary patch literal 141 zcmZ?wbhEHb@#^7Au1jo~!3BmMJmYcuq;M+r#pdip9y9ehaM? o{R)llK2i|1lGVAn@#^7F&Z8o~!3R&QLbiihbM=bSUwhl4wV%MaP7g sgOAR9nQ*Cbp+!6Q!c^&q5JuUeMFKu?YaJRdD)@TGbY+_ALBS< t9Kj+a(H~=&|Dfi|0-uid#ziMs+4zs8ELfrwBXoqxajBi~0#6nOYXFE-FHQge literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capepsil.gif b/lefdef/doc/lefapiWN/images/capepsil.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b6a387a40e314a6cd651f81a2710054bb57a113 GIT binary patch literal 130 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu;?3{@LbLNc*)uGBIk@mABhBUlzKUDW$QYf e)Ae}T2ivV$eUfVTn;IM~q~@?bPU>V}um%9uyDb|4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capeta.gif b/lefdef/doc/lefapiWN/images/capeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..064c5273534fdba50c309b3b8de0e448583c5e90 GIT binary patch literal 139 zcmZ?wbhEHbtXj8D{Znc=Qc*ct*LGIS; ng6A0BZqz9HaLrao$7Ax1n4<>*6ADbM8V??tC=jb5$Y2csq?<3U literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capgamma.gif b/lefdef/doc/lefapiWN/images/capgamma.gif new file mode 100644 index 0000000000000000000000000000000000000000..6cc19838930ae56e3c6a961b4a4941b4f6a60ccd GIT binary patch literal 118 zcmZ?wbhEHbsXF&jt)P(QRAq< Ie?bOo0L;=Pt^fc4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capiota.gif b/lefdef/doc/lefapiWN/images/capiota.gif new file mode 100644 index 0000000000000000000000000000000000000000..42e74365b648cf7c6ed53a02b6634cbec424fbf0 GIT binary patch literal 111 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^jKK-d)iO_Il$J$wZdFi<>`kqjC9*51d85W0Q&$FS0B#c> Ak^lez literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capkappa.gif b/lefdef/doc/lefapiWN/images/capkappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..263ee4f8874da785aff03241179a652a69f5e1f1 GIT binary patch literal 143 zcmZ?wbhEHbVD%$`Miy+9ct{*51BY*}=wx?XJHNBZD;nJO?mi literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/caplambd.gif b/lefdef/doc/lefapiWN/images/caplambd.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b7af2c91a0c26e39a71126e3ac4de879205cea9 GIT binary patch literal 139 zcmZ?wbhEHbh3D4DgO&)s2-E{nvar=-BQ<}o@ r=7cT^y6N3f~K?Z98elIUh literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capmu.gif b/lefdef/doc/lefapiWN/images/capmu.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0066cf5925e6850511df007c66c32b0eddb8173 GIT binary patch literal 159 zcmZ?wbhEHb%PT^-v`jfHIelh# zt!@$dCau!zm~epO3sdg_PQe=zllMJOP_%UN?{N|BnxiAt^!CC9gBI>H4vm5PVw4!H E0YR8G=l}o! literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capnu.gif b/lefdef/doc/lefapiWN/images/capnu.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d841a31ef2a70380018e4253ec1c8ed0ad25f32 GIT binary patch literal 156 zcmV;N0Av40Nk%w1VGaNe0J8u9|NsBMz`(S$w5X`4oSdAHkdTCggm`#(Y;0^`U|>{K zR7gljFfcGABqR(B3;+NCA^8LW00031EC2ui01f~S000C@Fvv-(Nr_Bxk(S5P2vlQK z&%;nmfi90SwP?^hheT6PAUF=qZqf@7fP$f<7zj0#0cJpva`7sRhcz%jJP?CTV_TsN KNaeI70suQwZ8p^a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capomega.gif b/lefdef/doc/lefapiWN/images/capomega.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6e11542c02b2ca350e3add8174458872d846540 GIT binary patch literal 152 zcmZ?wbhEHb~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0V;%achbM@Y`IVnL0J)C_O2FRZCF!X)8CG?@p z4 Aod5s; literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capomicr.gif b/lefdef/doc/lefapiWN/images/capomicr.gif new file mode 100644 index 0000000000000000000000000000000000000000..20f4ae6b5b392f23b70a83e0b7ab1684560ba69a GIT binary patch literal 145 zcmZ?wbhEHbIn{K>+|z`)3$ z1Cj@s!N6i?aKdx7h>Eaum!P;&01J~}vxQ>YQLmR_k{uzZLK4}IH2RxNU@#^79)cbo`(%I76-KkGhWnT`s&#>c}7BopZ+5S gHD{ULphH}aJW~&7Yvc&FPdRw-qQ;w!BODCY0Fo{%$p8QV literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capsigma.gif b/lefdef/doc/lefapiWN/images/capsigma.gif new file mode 100644 index 0000000000000000000000000000000000000000..f75c3553b8eec054cc9e17284bc8ec1ee1bc89d6 GIT binary patch literal 131 zcmZ?wbhEHb0SSQ2U|`WSIN`Z^ujncD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/captheta.gif b/lefdef/doc/lefapiWN/images/captheta.gif new file mode 100644 index 0000000000000000000000000000000000000000..96b4c5022d99b4e1de7f6b8432207cf30601cf70 GIT binary patch literal 153 zcmZ?wbhEHb9pW4wfr4EcoLr8Y9jz*t7nI~VWSml1Xx(bS o`e!Q(8{?$u$*S7zS5neEWsEqPk2i{ zNIX0|FfcGABqSIZ7ytkOA^8LW00031EC2ui01f~S000CzFvv-(y`iLS zhlh=gje&uIii!#Y1B2pE7DfgJMg|=qn*n471BMxJ+HeGQ| q$;Tzh)IavLXtIb+Q*f(SLD4P&j!7*|$Df$Can9aiwkJf1!5RRyLNNRQ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/capzeta.gif b/lefdef/doc/lefapiWN/images/capzeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcba9c83a24c02d071efbf8e72ce88b584f41d58 GIT binary patch literal 138 zcmZ?wbhEHb@#^7IT9Wo~!rXP?}Qa&U} literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/caution.gif b/lefdef/doc/lefapiWN/images/caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8a5e7588a618e53a52e8dc4b72555e7dc0714bc GIT binary patch literal 286 zcmV+(0pb2fNk%v~VRir~0Pp|+|Ns90001li0001X04D$d0{w)KsmtvTqnxzbi?e>A z`wfPo;{{4Nrs`!z?Fz?9N73@FzLk#m7{BugEhb=Xh=jb16J|20b1I)y1W?MUQkht- z_tfZ?x-8pwAx)3ToG5#nMY}=fbNqg&13reab-u?JI3w6sR0zYyqeqC6H|J;g=V%xy z^R|R#V^+rrCbtD#Tx@K)<|fUTO6km)_=70wU3rN6jGZ0(V~5U?zJ8i<#ol9{X9e#g--llxuTi9L k&+ku&wl)Eg3_NkK;D&?G6hcXs(BX=15-VD~=&%3)JGI1(d;kCd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/chi.gif b/lefdef/doc/lefapiWN/images/chi.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4555582cd9fb8d55b51b5027afc252e5177d480 GIT binary patch literal 145 zcmZ?wbhEHb(J3^J9fJwoZo6KNOf|o(v2U(3NaFxOFqDmlA_D0At%VJpcdz literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/circmult.gif b/lefdef/doc/lefapiWN/images/circmult.gif new file mode 100644 index 0000000000000000000000000000000000000000..49bac178460a729bf930450705a25aec65a44ebb GIT binary patch literal 81 zcmZ?wbhEHboa25SJ5=on)F literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/circplus.gif b/lefdef/doc/lefapiWN/images/circplus.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf9719820db56f560d1e94f957bb08ad5a552437 GIT binary patch literal 80 zcmZ?wbhEHb)5TRPWpn*l7_0#<{3$K~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/congrunt.gif b/lefdef/doc/lefapiWN/images/congrunt.gif new file mode 100644 index 0000000000000000000000000000000000000000..b886bacb112a0250512b5865b60aca58c4efdd85 GIT binary patch literal 115 zcmZ?wbhEHbt079H3XaE2J literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/delta.gif b/lefdef/doc/lefapiWN/images/delta.gif new file mode 100644 index 0000000000000000000000000000000000000000..239069d87bcba07487e82ca0daa0b1a08dfbb616 GIT binary patch literal 141 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK(;gy-t5O0wHpY+IJ7+%Srnyg*?^i_WrCgGWJ} my^4aqj1s`JAu6eRBSOWk{MJ+b~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/draft.gif b/lefdef/doc/lefapiWN/images/draft.gif new file mode 100644 index 0000000000000000000000000000000000000000..9952c7ec4b536327a1a840e49488a07b7a16512f GIT binary patch literal 279 zcmV+y0qFimNk%v~VNU=f0Pp|+|NsC0001li0000_03!eZ0``QDsmtvTqnxzbi?iPR zh7X3~NS5Y_l1k9E7@NTEEXjvW=L`2Od(@R9H_0Y^dW8Hg5zCL9qBsjFuqDEes0I_CKWds+Br%L$75IU5=$!>W3^tCVZh3cFRUbC7TgJFz3FqODb2=REKAH3bWF%Rjz$T%p8fu&+`t^Gvv1wc d&)@8yz<>e)!byQJp+bcP8#;UlF=B%P06R~di+un9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/element.gif b/lefdef/doc/lefapiWN/images/element.gif new file mode 100644 index 0000000000000000000000000000000000000000..150898251de90d00c6327c6e287c2b6c830a286d GIT binary patch literal 121 zcmZ?wbhEHb@#^7Bzzto~!rXn6a;+-|1YC8( UPfhf6I<)e-!tw12YD^5)0A;r(u>b%7 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/emptyset.gif b/lefdef/doc/lefapiWN/images/emptyset.gif new file mode 100644 index 0000000000000000000000000000000000000000..f83eb0be9ad2ed570321abe42dc5ce1644fb7f0e GIT binary patch literal 81 zcmZ?wbhEHb6kyqk-)7Df@lZK2cg2pJ)a{F=th(aH$Y2cswJsXO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/epsilon.gif b/lefdef/doc/lefapiWN/images/epsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..753b8c7cef695d7bf5ba15a42791f4246cef8744 GIT binary patch literal 123 zcmZ?wbhEHb%_1T9H|KtPIuw1JoBm literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/equivlnt.gif b/lefdef/doc/lefapiWN/images/equivlnt.gif new file mode 100644 index 0000000000000000000000000000000000000000..deb2a0bb4eea15d6e66ce2cb5821e4979305d8d1 GIT binary patch literal 115 zcmZ?wbhEHbRfjb?ic55V2QBtol(?>4kii-NpeGK=GU?NX|AcHjk!Z0c^ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/existntl.gif b/lefdef/doc/lefapiWN/images/existntl.gif new file mode 100644 index 0000000000000000000000000000000000000000..3338a4eb820e95eedb1a12f7e087abe0eadf4d47 GIT binary patch literal 117 zcmZ?wbhEHb<_~`MXrPbY8!rDNU{orItMh0sDL9Q&4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/gtequal.gif b/lefdef/doc/lefapiWN/images/gtequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..adcc0dd377ee1e11f5eba9755fd655c68019e901 GIT binary patch literal 126 zcmZ?wbhEHb0SSQ2U|`WUIN`Z^?+rDTO*Y;}6$cM?ELo`H61HY>>Y^fv XY?+m>z2E;9aZ2=%dDqv-!C(yl-_0vt literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/header_doc.gif b/lefdef/doc/lefapiWN/images/header_doc.gif new file mode 100644 index 0000000000000000000000000000000000000000..3dace6c2c084e6f4ad5c19794e7210b61ef3a510 GIT binary patch literal 2954 zcmbV~`9G9<8^>?Lv5jNOkTpWbdP+BDNF8IBI64&**-E!;Z6ta0lq-w8bYR z2=PE#5IDqdox~Rih9CrjPzb^x2q!8ShF}DOQ3%E$7$+_f7(x&TK_LW#5S)06!Vro; zC<>t%gyKXi216JEVJL)Q5QYOK2!|mYfp8SUF$f0*&<4^#3p9h*I5CGf2n?ezjKMHY zj0F{fzz7N>7>wWq1-L{J7)425|uY00KA!)IbbC14{4|aDc%;8%P5!oJfwi1~oVsisD3&z#kY3 zDhxw09OMe@0t#@6;uwm996{0`0Kf&FgP?(15GBY1V1jNC2Veq*fkQwI!~itt1XzFr z3&4H8r)jw|8-I@%8l$ z4i1irib_sS&dJFsFE4LyZtm{x9vT{&nwnZ&UHxD0&foa|`4HTODum>$Dzn?d1@~y2 z>#EFYj}})x&b6w_eHOPD_IcM;mDib|Xv&nczOLAGZKAKphGv&R4OG4Gf@@v#s5gTa zu<%ZOH*}X`Bqbo+v5?(#{R5_BHtV19XXN}J-n;6ryC1e<@Vh=sUwq?Gn$~oAV~V0V z>YMq8iA~1F8`aW&zVnePiQ2lC+$-odo03V7J?BLyA~mlb%5S*P^Q}ze=89_A?Mc@R z&0($D*2JXMY32jixhg>KWlQtu!Lh!$J)f8UrmhT?GrJEsaJNdPvKsC5@=9`E%NJpv+w_NjcSx-sNcQ#CDhCuKf0?YxV6u(a1| zqxoJR9v_CYTLKS9^gLJnLH2D4lRBj=Y-&M_E+eZ-rAyC-mp1k_F8JSbD=&LenM-98)`k+3faAHZ;gD)p|wg7URr$XkQPGcgy$G{X*g^#?}o{^lI; zi|Rr$CBaojFds6rw9h+6QMaSN{oWy*KdheLM}rg_C8*o))lv&6b6fc&>UheoQ}oaB zDLKsOGZtylN#=Xe$}WY#Mfwd%eVMB6r`G+|HG^j4V7F;E1_p>~nMS4e<`jSj_k-HgqNP zobBdUn~7%eyog63q{4e&kBH}g>TwZ&=OeZF`B$NbN5yk4vXfaQB023OYJAUb+LJbx ze|EI2=ToO4cUab)QldR0tn zs~cxsi7`b!H1=?h&;HaFbJ>pbD&BSZH^Wb5zZvI-ljxa`rHhJ8Q*!xar!71a8IlnX zu8}W#FmAD&cf;}pgUq?4h!dCk)zZpJRXL?zCwK-9OKW=1WCeNmdYU9BjEO#G4UV(a zgOnX@B_10NclQM~tv_6ee{A%hG-M`-EEs}FS+-Wenq{6VDRx^Rnc<^6khe`2FGgz zcwV1cbWH3MHjDY?pGo>iJ-7L=io7#(yXa}%Dydy;N^aJm^K`UohS=Qbl9$?BvXJI?F}Xn#O{hz<*<0c9Os}gqF+fB`da2L+9LM&v z-d&FPqhp<+**+Pr&ON4@qCXfGoY5vzB#V_@U$jQ)GEa96Bwq7VHnQ-De9(HI25tjgimZ z12&vHn^$G2mk@GZdhh-xl3s7l%~FnPKL0SW-grFlf^nQ~1^ZZ;i?-qLvhkl(NteKc ziZF+de2s}omtzbZvPne>9htKnj(+v{Zq}Oz`YQwH?=TH=TA_rF+2)fSyE%BO z?t+`fqE|cDY3Sd}J!=f?6KUYua8OEBRwv2u$il$zeCqHCiB@t{vv!s!TBonzXYF9* z|CaLBljix>#y)Pzd3RlY-IW=a=KJ**p9r2maEsscU8OkROTl8{7YE0UlCRK)1aR#e zFLOIZ_RMGs`sBO}-_Yc^$;m-ML0(>7hK7a`5)vF7 z91KW6@h1x-0|O(24oD1S1_O(|!3odRHkvadv#d@WGPoZ&GpMm9%#mYq0FRie4s(n* nbMqS!R%dpdA6l)kOXyft19Om1uP6OMjf-F^`#KTlt8e?Jeezt7+A R{|_*rz<~q{8l+GF06WF0eIEb- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/infinity.gif b/lefdef/doc/lefapiWN/images/infinity.gif new file mode 100644 index 0000000000000000000000000000000000000000..766b388fd5bb6c91ec1e3fcf0de45ba8444f7b66 GIT binary patch literal 139 zcmZ?wbhEHb6ky~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0VVqtK?bM;<}*R}nUcQ=VRPUhhZTqtzO;Bt`c mf+rI$xr=5MSlG^Aut-6qfwR-0Q1b;-C+lSAwNWbt8LR>QI4nH? literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/integbot.gif b/lefdef/doc/lefapiWN/images/integbot.gif new file mode 100644 index 0000000000000000000000000000000000000000..3beec4f22b65e3f555aa8ded68bfed95eca1a1dc GIT binary patch literal 134 zcmZ?wbhEHb=}PM@L6tVPRTYT6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471Bto2aSLaOEH(ZvA@)6D!?7_0%Vc`kMU literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/integral.gif b/lefdef/doc/lefapiWN/images/integral.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa748c92f066dda9f052c88ec8431474edc7fb3e GIT binary patch literal 123 zcmZ?wbhEHb eGhV(7-L{ks*L7vt!*q7vdn*2g(Qq0EgEauLUnt)I literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/iota.gif b/lefdef/doc/lefapiWN/images/iota.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2dfc0d6ec0703a9ec2cb80aa0fb91732c712a9a GIT binary patch literal 112 zcmZ?wbhEHbCMz{sEjk^z~)z#?mK!gKZB%ROEbw8B2NCaX53dCqlHRXLH!%aRr>$Y2cs%Q7G+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/kappa.gif b/lefdef/doc/lefapiWN/images/kappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ede7b0fb74bb772fe59de82a908577956b5ac6f GIT binary patch literal 124 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^rojo%)q8JDo0RU^cA@qmN0;nEnGA7`l-I}BO)uDL62toF OKSxZS#}O9>25SInswUZ0Z`H91tFjsx(aPr7 zgiYBn71R&|G$?_EI}C<4q@jgo^M-tlBhIOF=KWzTDiJ5@#JpWl;8Mk@IyJZl6y7=$ zXX*_0kOwf)jX2;R5O4@;hyfaucnS^-hBl<3Wj;B7jT%Qq%m)d77>i0()Q~Ief&!Of zDux`9Gy(t@o+D_uMU=<`nCM0vV1i*d1U19}jZR>J1B0OrY4a=cuW^kU$FMO334a)i zO3nNNgY|ogV55GY!IC^wkh@=R5T$1f((&644146jgI|7tw`N1vh@AO6abxqumBWo|sj-85>fWuQxoE@2;bW_FV_$~P?!UXW{m{eAOg8zV z5EY{IMGd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/nav2_index_b.gif b/lefdef/doc/lefapiWN/images/nav2_index_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..87fc9ddba320b458e6a8e00e4c731c196938f810 GIT binary patch literal 854 zcmb7@F>BLd5XP_I5Qjj)4kdI@T!KiKBcQkl0d1WEu4Zt#!F+-2LIf2YG95S=b#e%; zYbFt~ftxcq<_lyJr}KAj`vv+g;dtMB?)N0K_4*UawL#Po08cLqR!C>ph6Etp#l03kqn>b*?Fb<(c3}`yR zf`h?mBb~LPdd)R8C)pT5;*YUZky#6D>o1D7(b{KQQbD!cYrQSXVr=QuwwvKXZXRm+ z4XYfqNl5cKuqDF7QyV4SZnxL#_51z7U@#mGN2AerJf2J@)9G|Jo6YC*#bU8sE?2A7 zdcEFkHrwrXx7%IzUVX^d|GD$;#?6lG$^B}r|HR{t%3kN_Y8Z!0ufmt!84{pHiWp*;9R$5<;9GOBfF^C24o6MEcjxE2oj^b@%Y^D{0F>mnv;9a zb3V^=zTI0>Rq<3TLif{Obmu4{O~gcoNC=fuq%(M50JE36mHS6wrn=w9t&#V&~YSm13ogQewxV(pqU&+9)lS0+*~6 zvtpxIEEL`vtqdz;lo2qZRf$%@N{kXr1vSI~4N73)4uhc$X=tHYtRY+Du+~OvvHma? z6|-ieS*%@9;L@-*MjL^9K;f+x)?&249`XPtx)BHb0|E{~4KYB25>LT_!O(^@w8SQ7 zuTkR|X0buSAI73GhK(Rs*aZbHSquwuMA8TVTzHP4;TBOM4`8AjaexVi;Skgi12j5; z1r7{`Hl)R_$iBukY8=7F5G4FzEGi>n7wD|tQaBs6`*fCMp`6_9dYvdOqmz!^wqw{L zJ09%v9W3j>nFMKk4%iaHgC}Pcx!rEB*X#HD1A#y&6bgsK(P%UtkEc?pOeWLa-90cc zkj-ZE`TWGh#Psy^;^N}!>gt`||32jZ|FdoV?hP&~qB7fR{}VyiKUCy;sCu;j%XeIx zcJ9A2x-H$jlpQSTtzXE+=cp^M@4LL`^_g?gNNMw8sFP|lYpME|FU1SNL$9=5+kYW` zX1u2L$`?c5e-eD__=AVCCoc3;X8WJ)o~`TiJn0$phkfbIb35NCxFTDp`W_y6due#2 zuROV<_p|8L^4R(0?cI-zeK<9ndo8i%Irn0-{_4Hb>+heg4*0%JKCaFduV0JTjb<7< zb8W{?ymV^glJ`_)&PR!@%V)iR|M9|}<25avXPO$LO~-C~KDb_&KfnCb#lydicWiv( z=aa#b-#x>Llb2e0D-V`!DW7e>$rB@~2OcZ5CvP=m$7-|wmE^8mSM1)E#PETS=RHGL zzgyXU`kR@{pFiDxWN@xy$D_X-?Pw@Fde}GlX;0|KuUjYEN?NMIG2dY5M(gfGz+2z7 z-nfb8d&cLVxm7k^ob0Q~^&f27;NSe}4DFpNt|;p7ezWwz+GK2|`q!HcLtAdt@4IKY n;)mx8?suQ7x@+B)?pR0{8Y8tw)JLg>bj57Xv-{Q~L8|;0OU5W- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/nav2_previous_b.gif b/lefdef/doc/lefapiWN/images/nav2_previous_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..b02bc97081d3d64f843aac572eabcfc39cdb022a GIT binary patch literal 871 zcmb7@ziZQB5XP_I5W#?;gOnnQOArU)2vl5zh_+6FuFW9A4Q6!7E>zILA%h%tF#Z}k zgtm^EM8rnVHIrlhflT6be(qcU0pBGY?|aXEp69-~zkP4>*25jSD8J?OsECQUNQk6R zsfwDYi-u^{rKy;Sxmbv0y>%5gaTgEqtkzHolW>WUNR%X1(j;9nBq`8F8ZDZ6oi(S9 zsk&;YW{ssXQ**UY%c9`YP2JT)JqwDrVH&Ox8VMtXtbTzZBlIg&I1z{PWd#w}5j2bgpd2TT~oA=HQg zO($4zFc@v5vsP5Exu)hM8zV^kF_tPaYk|%Bi=x?R?Xy`@K{dJ8dYdSVu}P=4-54(9 z#zQT?!72yMB&7Kq*b?F4sTn2hc6)t&z0>J*yWL)|*YEcSgTZh(9F0bMdwb*Ycruwx zr_2L-7lQu?5$=X;{LA9Z^dz@^z4(yXsnQkgHJ}r}z2TKhXK*?%6rd`+2?J z&*!FPY*?F|UqYhDU*yrDgfK!lA%YM|P*F-KBa{;=2$kxRQNkEuoG?L{RBt&YoDt3m z7lcdIDku?*2u_3`LPCj1N+cta6Df#90c}V_3(a^f)f{ygrJPbhsZ?W8F-94uOi(5j z1ui+GoKr3+mkJ7R1*3vfA*hgGL@SkyN=~Jq5>r79F+hV7Sh&MrXhRxWXqL*5s&P1D zf-$N5VJs@n85fL8Wfv5<6r2gcgoJxQ;VqM#Nx>xSArD}p8*#utAm9+x5Cb$Q@e~{w z3~fk5ORD75HEJBexl}>IAI72*f(waUVHXs*V1WaJp$%!NR-|6z8a0l@#tkrCOk|ennwyRPEDPl7cdFSL-#R zRE$PCYTJfkg=~0G%Qvu;17i}T@i|~i2oIi&Q6wxZEG8xQBv1ugY*)v^j?c-W0@it$qXn$+4 zE^*i{ykFbg4*!)J%ZnYSQ;+I-3#Poe6`S@<+Sc0!w@!CAWVURq3EZ%4A!c!SQQp$P z4;Rfn<=Xb4@!k$g{}IjnjXAk>m&bK7;Z|(FW9)_8hv|D$yLZ~Y%FvsJlKOVb+|`{>B5xfgEqpxhr z^!%SiNfX|8&6}I_`{AoET!?;d&Sa_c|I|-b{A0NiOK=ec3jKEq zZcbdzOgJg-ww3;TEA#yLMz_B#u&@1tshd}?VtK*w(;u56w$`s(wrhAIYn8vjRn^5w^P|-|V_EWoWS9h)7veNg) zw&agS3u|4!yI;F!4GDDf!k4e<6U9-Z!!?EXc9h;opVEDiIf<9%X0( zEGOqqt24F0%Pq^C?veVpt2KYIIcnA66BC!Z?|xC+yVCCD;h)+MX74K-J#smDNkm#f zw5!3n;lX_Fse+P_U&{2)pZW3q{l$%$S@Yqo^=qa-S)`wx)TkMe;;?t literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/nav2_toc.gif b/lefdef/doc/lefapiWN/images/nav2_toc.gif new file mode 100644 index 0000000000000000000000000000000000000000..5474e92e609d9f4b155e6c30e2b1d4a781670170 GIT binary patch literal 1154 zcmb7@>uZ!(5XL8vgf$v3Xau)5;tirJQaIgY7a=T7yu^A5*rt&fXyE-_U>7fZm> zlAx`h0_rpbjhF?MY+5x5-3@r9P0BGV0T{sW#b%W%#-^Lw6o zcXh?8Q246~nnf?^?J-1_h>3(q36(KqEEy&vWYk?+L)MaIvO-qfTQL_r@)-W3u!|I^$ zR;&>=B1RO9XfN++i@ZAq_1wt25+k9JW@hRp$?5Q88N<%j)cc z0++&8#EQZ_pzzizTNSIYhdh9ZZo~oqfPh0#Lk!TM#8Yr!Fti~JEp^GcYt%TxtS(6S z!&p=zEQ(xV7ZkW;6;|Ykq!9qP@Ek$IEuusoz(hCV022(uA*dk+XmkP#92g93NUK|s zdyQ+5nCvOzx=jZ$V{-UCyU@%x#R#sVASzB8hi^byccvDkTOG`_8dwVjOOsCTW z0|P@tLt|rO6B83}d*6M?@BcIZb@n75WzjO%>i!cE-+z?lo4e+hQ&+$D&0M;r|MtV~ z*hpR?UA$o=SWkt=0tY(p_Z}YqeP=qcd~U^e{_w%Vo~78p0Xbc*QYLx-^q#YYJ4@A$h3B?yp{8O@P3E_{Tx_*sV>xzK3`m% zN!5h+jaB)kyj&6Q9qo)QEP1nU|48?NV6=I7cI46Jd;fm9Hm831lG}feTx*;xA76-f zjQ`oX=~?NyNW;vo?%adF4d2)k=*y0*tGoNh=heN9%?01S7%iApJ$fiwUHqWDuDWE# njyp&9ZakYQ2o>i2FrWN;Pi&3d`zZ6lu4O$>7Oc<8q80xGL>~yq literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/nav2_toc_b.gif b/lefdef/doc/lefapiWN/images/nav2_toc_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..727f3ae5ea1605452ef2b2f2bb555f7f293c9328 GIT binary patch literal 866 zcmb7@y^51j5Qb;LA{GHb3kh2&HbE?eA)r_&1axB+u-z0QOkr*yr65Gm!XkwXY+?Lq zEW-YjsYGNqI&~_`+(0U^8lU;r8}Kw?IA`8@-gmw{8a%vn_vt{c$Zt76Dq-GEn;cz$_jmG2gWHOmfr?c5?KA$fZ zi{)~;TCLXW^=7l#Znx*X|32jZ|GEC>!o`;C$gOIv|HOmVec5U4?j64W`m%NT=Kk5? z{M)NbHy$7C9ew!z=Bhsbb$0ae^zF6&>)pZer`4?csnmtm|O z7WxpCfppW-u_9D(a$9u4g32xo7DA8_R21#j`RX6&ybPOj_S(O-_BU(SugMOSfW*;w!};<#OhkbkXRBX5fX(GsUfwb zOe&-(pbcqgp&75$&2h&X!^Vg)>c*n7)>t-Hj8#X0OSXpDuozYcg|}jjun{q$U_`4? zYm|+OQA`Cj!~hLSVBrpfp$%zhp;?_FSL3j?Vy!xV7>kP8vRGDU7ZkV@wjx#(?g53j zR@tgpg+1f}Omrg-_y+_Wf*N9g1|^5@Au~3cH}d zC9AL^M6lh+o!iA2j%7N*6T&-7`=4dwmriR+4JC*?_oIy-XuulbHJ7m9z1!Y zC?O#sB_$;-EzR%u=jG+)=jR85!SeF*+S=NNhK5im)Y{tG-rgRGM558?@bGXf78@TQ z|J(cTL;nAtxj*8k_$ZDRxmNd|$o2iEIN!{5S6lAa`;rzEHhwR6;j!epZ=|A`` zV`}rIldn1|-aH9z%*rU~teiJ^uyo-1g~8LAL(#&x;^x4a?5f0SUtKuwSaNUN&d2Em z{l}l*oieTM>dU_Bwf3)_B1$I5ajIoz~u?ZYb@t~DktERx&%OM5DB+$ zA+%jH6%m_yb0)|91DV9>{M@(x1HMZ*-uIsSJkNde$xqar5aA|aAO zr7CKoE*hd)m!@JS=3*h1_10C~#9chZvsyzXOu{8XB2ki5Nt1NRkfcBxX|!nOb=I6Z zrs}Gpnl+ZnOwH9oEsKInH+5GJ^(-jfhH1D)Xe5lZYMQ2Nh9*;?Mhs{u!Qzg=Xd{gl z%~^)3=D1myW%*+)mAiSEXW4~<%W#XZNZbR(TT8bLOYD&cm~;~d{(-XiB$5^V!tOYjfFN$WPwa;cr1=ZwU>usVe#wMNGc4N4Z z8xOVo2CE!2laS_fU`vFDr)HG2+wD%L)9rS9yjmP83WHOyjXS3OS zK3^;r%jI&lTCLaX&1Q4e`|m^k|DW4`u3c}*mh4q){U`QYk7TR0dvNmM{AKIL-Q$as z*|%5Qcb>jKIQ{tj&5pkKb#eOX$J<-|*Sm*jpO@3_(bwbU*_WU1?mfTU+u4?fe*ryw BfVltw literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/notelemn.gif b/lefdef/doc/lefapiWN/images/notelemn.gif new file mode 100644 index 0000000000000000000000000000000000000000..479a88d3f83b722f8a83b4e0bc96457c1e6739f2 GIT binary patch literal 141 zcmV;80CN9FNk%w1VGRHc0J8u9|NsBBwY9CSt(=^kl$4Z=jEsAGdvkMhT3T94N=i97 zIVmYAAt50U5D*9m2mk;8A^8LW00031EC2ui01W^Q000C!Fvv-3HOf|X^kK{5gcYI) v!I4#hg9eIW72(2+^cz7_A literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/notequal.gif b/lefdef/doc/lefapiWN/images/notequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f3d74408318be926ba759044d1af33e32e6fdbc GIT binary patch literal 121 zcmZ?wbhEHbzY VN-uU_Tv6b;puzfyk2oWPH2|hgCG`LR literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/nu.gif b/lefdef/doc/lefapiWN/images/nu.gif new file mode 100644 index 0000000000000000000000000000000000000000..049486c79cd9d8d526b7d89f8ad0a2fe21bb7e35 GIT binary patch literal 124 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z+!1|!gKXr3vVSRN%4s#lL{j`9?o?P3Sedu>nu?axqCF#_NA(H-y{VV YmQ@a`j4XI~TAUhF6=h9la4=W{0MM!<(EtDd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/omega1.gif b/lefdef/doc/lefapiWN/images/omega1.gif new file mode 100644 index 0000000000000000000000000000000000000000..0009f0e3029e451f022cd6541d553efba0b73688 GIT binary patch literal 144 zcmZ?wbhEHb@#^7DIy*o~!o;O$k0C%cH1rHo?&Cm`>X7Wv5@fIj0EewD8~^|S literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/pareltbt.gif b/lefdef/doc/lefapiWN/images/pareltbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3c0f75b7d96b7af435ca7d4cadfc0da691f299c GIT binary patch literal 126 zcmZ?wbhEHbR~A2WZ@$fZfghVWe5P?QSOWmu4k>5= literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/parertbt.gif b/lefdef/doc/lefapiWN/images/parertbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..81fcda4e8e32ce249e416556201de738684ea355 GIT binary patch literal 127 zcmZ?wbhEHb_^@YMD_aw+u7lX)y{i^H?d3b37v($Su@ b#`l@%*;5jUi(1&*4osd=$)e@Y!e9*mS3xW2 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/parerttp.gif b/lefdef/doc/lefapiWN/images/parerttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..3479f8d9a92563e0c50a6b87dc38522ce8bd8b60 GIT binary patch literal 124 zcmZ?wbhEHb@#^7EOZ_p3at2<)%K5oV!FJ@d8KUq!y=OBj>Co XDeets^F*sk+xJ}17vXkcV6X-NE=VUT literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/partldif.gif b/lefdef/doc/lefapiWN/images/partldif.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f1928e773c45229ae7b2a67a86d9316c7ab688b GIT binary patch literal 137 zcmZ?wbhEHb@#^7Bhnro~wP%$x2U9WZfKkSj9kQX@pCW%rP%f kU&)qGoWRv-a{1yC n&X<19&MYg=H7)vagsEFZHPAzVPukC+aiUk#HO)>TMh0sDU9l|w literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/pi.gif b/lefdef/doc/lefapiWN/images/pi.gif new file mode 100644 index 0000000000000000000000000000000000000000..71444f3c50f9181ea24f57e885725eb1ee3df4d3 GIT binary patch literal 134 zcmZ?wbhEHbHR46R~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/prsprset.gif b/lefdef/doc/lefapiWN/images/prsprset.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1c8c73bf084fcdbc83b30a5fa6bf1b4702ee6f6 GIT binary patch literal 67 zcmZ?wbhEHbe+4F3%o41uZ?f3h$#Ft9M_0ND&6GZTz9y{)aSrKP2ml$4B&jD&=Qb8~ZRYin9s zT2fL{DJdx!7#Ii$2mk;8A^8LW00031EC2ui01f~S000C(Fvv-(y+NcR$B;!LOi433 zPSzw;;c#f+aue|e@!@=wqu{ATs>1li77WXw0Sq)~6$A=(z+_M(Yg4<`dMptDJI@F< AMgRZ+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/radical.gif b/lefdef/doc/lefapiWN/images/radical.gif new file mode 100644 index 0000000000000000000000000000000000000000..74fc200c7abf8a90bc528bcc3da1837531a657d1 GIT binary patch literal 78 zcmZ?wbhEHbL!; literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/refsbset.gif b/lefdef/doc/lefapiWN/images/refsbset.gif new file mode 100644 index 0000000000000000000000000000000000000000..410f8277cea4d67d77fdce2607d3c27a87dee28f GIT binary patch literal 118 zcmZ?wbhEHb~0+1c62$;n<`UY3@Yii(O75)vF7 z91KW6@h1x-0|O(24oD1S1_O(-!3odRdo8kiru~m|QavWd(Iv^#EwyD8<7`$Axjfe! LW$%6qGFSruC6FQZ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/refspset.gif b/lefdef/doc/lefapiWN/images/refspset.gif new file mode 100644 index 0000000000000000000000000000000000000000..8464b13226ef3b7727e52d91b6c95cf4505125dd GIT binary patch literal 124 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK?>gy(7%=83bvnS=+6uwAZbG%|JPU~_8r@D<{_ xe6eBcl2G<&XGaGU7STh?#IqxrjAp&9oD{^u-FlESR6(DMO{+k_{=6WAH2{BmE35zj literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/rho.gif b/lefdef/doc/lefapiWN/images/rho.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8c565914153cb35a245d77aecf480b1ee47ed94 GIT binary patch literal 134 zcmZ?wbhEHb@#^7Gr}Go~uocb4Z71b_a)W8X5XNm6`ldU`n#r h5$Vk(QtH7g&Dfj#OC%MO~V6!GVRr8UQw$C}scv literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/second.gif b/lefdef/doc/lefapiWN/images/second.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e65da28d0c0efce39715984712f8801348eeeda GIT binary patch literal 115 zcmZ?wbhEHb$;m-ML6(-5hK7cUii#2v z5*!>H3^1VhlZBCifssK6BmgplfyL0^gy-tL#S<2~>-s47-8*71uQ0+b*yps@*3<$M c(T9E|OI0SbJf7qrz{Aa`W)PrfD9B(90F2%y>i_@% literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/sigma1.gif b/lefdef/doc/lefapiWN/images/sigma1.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd4939b672a10f6dccbd67715280cea74990a72c GIT binary patch literal 135 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu$UN}@XR)SE}-4+)KOH>xM^ZgU literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/spade.gif b/lefdef/doc/lefapiWN/images/spade.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc55199c42f6251ea7cde8a4e2964f7687e6ff27 GIT binary patch literal 122 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z@lPs!gKZB5&@+*60S}OZbmWAK>;m^GM$ZG*Beu$i%O;*NS?~UU=0A( C93AEW literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/sumation.gif b/lefdef/doc/lefapiWN/images/sumation.gif new file mode 100644 index 0000000000000000000000000000000000000000..f65c1ddc6f666d05fa0e78b8555ab1797fbfd8e2 GIT binary patch literal 77 zcmZ?wbhEHbCMz{sEjk^z~)z@lPs!gKZ3MK6qAd3ddmm>S4(s*<(&(%RNdULR$SuoyKTpL26M H2ZJ>L%*-X* literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/therefor.gif b/lefdef/doc/lefapiWN/images/therefor.gif new file mode 100644 index 0000000000000000000000000000000000000000..95944f41d016e6bfe322c85717be224b389c76a3 GIT binary patch literal 111 zcmZ?wbhEHb@#^7TbUmo~s?aRki&lcO{v2gjg__N?m#|?)smtvTqnxzbi?iOm z`wuoiNS4WHrXi}f605+A?54DFA9-EgIk4lAd<>vaXoLihCKfP>V-A-AXw^EyN?%Wz zR_A?gJ;v_|JZ@5}macoWcE#Bl+FW%vKkn+cuX_UL=U{iH*OMiNa3~TJ7=;uAxX4Gh zNO>6Jt_J->%*s>ZcR%s hJ>a;WAd3EzgEB1uLDYXG9%EKL9a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/univrsal.gif b/lefdef/doc/lefapiWN/images/univrsal.gif new file mode 100644 index 0000000000000000000000000000000000000000..effc1a5fba72adb9b56c56f6ca69f9143c43666f GIT binary patch literal 135 zcmZ?wbhEHblCGj?*M&2x#Fav1TasHk$+uk*s%2`5+!_dnNVVz34P_0cY) literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/upsilon.gif b/lefdef/doc/lefapiWN/images/upsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8a2b3389f27abf4a7a8593e1fa193b2e606df46 GIT binary patch literal 133 zcmZ?wbhEHb0~jd&WMO1rU}Vq%@jzxUuoxMf@Lau?m9x_$woi%ktRpX@#^76XG5o~xHWnV~799CFaZ`=Q3wCJ}do2-n3N f(_dR`eWFvj;rsrW4bLQES=ihcU)b!zz+epkQ~WGS literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/video.gif b/lefdef/doc/lefapiWN/images/video.gif new file mode 100644 index 0000000000000000000000000000000000000000..f339ffb6bdd11220d4e530f1798597d12a1bab46 GIT binary patch literal 906 zcmV;519kjINk%w1VHyAz0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui02%-n000PY009UbDDa=bg9r&K1dxy+!iNP95^VSoqCrrnR8`Kp+#Yu g3~EznQ<*nQ{*?KYrO}s4v1-jab12ZBR|5h7JB8)3VgLXD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefapiWN/images/weierstr.gif b/lefdef/doc/lefapiWN/images/weierstr.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f9689b8080c0d57935d6802003b3e14b7def1e6 GIT binary patch literal 153 zcmZ?wbhEHb@#^7B_5@?L763@Caai6Bae0SE|6DgsKEfYK5wDP7Vb z-GZbD{O;}|qWCqK!ciupCHG01ktK6+tjTI9LJ%fy4M=UqNQNLm2&ka$g$v|pYhz4FpkIE-Np9GqO>jsEBsmHH&JU0cdj+!okp>ZjBYsbV zLSU%=UP0JCS|AWO|L-&dX~^I6LLdml{xqcE z@3;_%0Q7f0Lm-0tbO-{4@c+(x2o$Yp5Aq4i(2Se@CH3&=qwm+{RVqac3|2{nc ztj&Hs#hRd9-F37#FtYN1Wl~Cnw?HkWiE)C)u@&d%h84v;{2v}kS6b6<&mJ;@Z5wUNJ3h|06#)G@`s1y zlbpalo)cU3f)vg z+l=wlSDP=ASB)L0Nsu1pV|`_QB@-T&N$@~5Ll0urAD1jVJC$=iy{iRj(>!CIJWJV; z?v^_{n4Xd$bU#upugha>MxTGq13%{Ax#MM;RN_2bT;^q+e0=i*t|}=h zNgqt|zKnmmE;N)-of7JK+fpP$A2b3cNG*DG@M@#hSt!+FJ zt_#4=&m5SF?&J_hJ2*Oku(k@My!V|wEl3mq#g?iI7PGN-L|X$n;Fu8sfFovaV=HQN zLkGhHBw$rhf>2$sJlfdYU|*_|fjy8Fs5y>8Wwe8hlf4m!gBU9Yl%;Ir2((TRKaL3) z=Itd2lWT`)1)!Qh2MAb9N$)KVlYh53 zIAlkLpdCtdkT4MN9|82KC}8;YTVdD=>@5sa`fg!AM4$wM@Z+ciXoF*mLkRqdHmt4O zTO1}~PjNUc#T18AtN$nt=yrY;B_?4{aX8bg1p3LieRb0YuX*+0`(sqUVZ?s|Av9~l#!k*G_!URggN%uc!!#4lDrR`}Z3Ly9n z^OZoDu^~oV|4pdaLD60*;1c%GhBG!wAmm@s_M67R`G08*J7@sk5PzX?K+pfXOn+?* z*upVw3p1kp@0$MBwBY=|w1yotOlf~b+i#5l&i_kez!i>d_c%5F4=McC7T}oq#9j^g z(H3A>2IFLk;s=a~00_koShBrFWXDMC(GaZF*dx>3w(yf}fU;l;L&A~27Pe!+_7;ZG z)}6w{Y%Fc;RcsB6(0~~ia}WSbqHs9KkYHfL#^CeaPs7H5Co7p^Y&4WUMe5cNn&pt{;s`2N>HK zqi>*%!Q$xa=0<2`DNzsK>({*5P!z(@f?3Fe^6GtZGpe6z6Gpj59>%G{p=;%l+}j)o8(?U?#=*7y@Q) zg@~q_1CbPSw3n*y_;fiUBg%%$YFv{u?`2y>We{$u_kLS@d}oR5YiFDo>0K}5_SsYe z9c%8vic@Sf`S`|91D;M?tRqmc;dBxgw>lXIesbZ$>-)<7x!(rxJs$;zoRyw=CJEdMa{!s+4xxIs^}sy=ivuo-oX4K0E_zL7xM<@8uu4>h4ldJobJaH%qKrE0u#jM{gDSi2HxAL6}H3w9r54p0gOHFDV#KR#4X}rgcayAZfdr32Z$0dOQ*pO7#j!H0Gojgz>Z)$CmUdrhItF@09F8_!OmcFur*i?ECH4T zo0wlmgKdGwHpXCVNnkOsgQbCk8Q9j+$pNecwg=mQO~F=R8L$c12y6^?0;_}N!7gA& zXB)69+TI3iV~qwops%B?!Kz>jun}Nmt-;D*aj+#0*a6TyOEg#nYzUSHD}r6YQea!K z3Kw9$aMj?2V&;*S2Br=mz*zu6A+ee$iW%qfLV!+#7YY>s#%O?BLJ$db9T8UR!xZgH)ATqh-z{VV;bLtp#pu`YMseEtbCgFrm_s0aD-T zV{V6nh(RZbYCVo1I153b%XTtyUNL5Fr%LQ9!XE|`$+j7*#U*tmx#ZL5Sa(jzJgh2p zZR*<|S(==4uo+0vS#H-*%X3kfuUrtCN4dCt|FD*|d8(UsyeAZWMvme^jo#CgTg0lo z#Z##o2Zc6m*=fJ$e#_GmEen@Y#Ia zq;Z#$Ddzlp-A0Yq<2>Gvo0Ge^kZ4zfeyEOmG}OH2-AwP(ncfj}Zkwks)OEoS9htzY z7-8};XLPJ}#+_Uly7<@_tz~VW!pkFwQmMHu|KOu$@Y^*0ss#V&7q$75$dZyb zsWCOsK0sSY;^1>_tkSphdWYqNMW+$9f2;q!-sQQ=bL4ZSE=ymem#P=?J1R;)zT-13 ziW!GCzK>QczI!u$rF(oix#r~-@%31uxJDYK5A0cEzOIUkBidRItaQ6yx*2&5xwWSs z95mXZ<0e#5<$}jDFI{*=xMX+*0>cJY1!w#Q;F)b#vE*LW z9ltG%C`8!wfX=}?Z^Q&#bIItRM_kQso3fwg`7#!JB3X5sQH9+U!Xs&O;H;+GnSiSA zPu8-Icy(@k5&TeQ5thktuD)j4Ba2!HpH^P~?t;FgBGJ+3_h(;SeHiqa?)llF9LV%CJ1J%gV*$H$3$vt@7b-czxp3&C+2ImBd0Fd}U8oCTzr=DEE6 zoYpW{J9(Q$=0ax8y%OpO^Xs>Zj9yZZ#AFh%yi)1Z@UXob#mI#pV4}GWm+;^xbXUFj zq_*qUcg-@*qkMQ5mwCSoD~jH4IFjBSAAq_ie6{ZNpz(}PiKZvIiHRee;@I{fA+m0Z z3Vme$7sao4b(G{lkuqPdRZV7=-;@$pe$u{FQ29vW&NuRjgYqxG-etLB{H5|xwT~xN z5D`~?zpn-Z74oQo`$8B^cmOk3Cyl)NOuZaUJm?*D;f8k-S95ZyfHJ#jUn}*p!2O2k zrCH+pYXsj?`@+qU>st)G%wyVe>tbTW8BJb1@YTlzxkB>I!uVnb?u#wP9xpa~m`7Pa z>Nli9#(LvKn^ICJDA*vgVj}n2qxi5zVh+>Z#!p*DG~3+^GG@6?RKLsR6Bq^@`V_{h zILIEpU_~ThL(l6+KDgZ#A964KbFEeEJEL}%i?d`Ooxa>Xdv2SC;QfJY1zykTqk8xB zrAQ8CQcwyr5n8O2J9#H_4m>h+*CVJNZlD}7;5sy+v*9ow?XJXAM#(hNUad?Y(-6}Z zoBfg^_OYX7OQ4AXX0^ie0u0$XZYe5R!bp5%E1HH zLP&i)Yq|2nP=bweH+|FYZV!&nZiSkL;sn_+{;NneDp|EV%8`E1a;0X558T9Y40Yd$ z?q2m`9$Ia_R)M5rPDx69qf2&?SqsXS13$Wad^E-2gpU)UkD8G#6Tu4>A2p7tWl!%f z(1U%PI;G7~dOeW_KKHMMYN-`YYrw)`7KwAg6<15UU6vN*9aPRPl}$n~v?jSooU~fF zdvjhf@8O$K|5uURB=%n#-dws7Ew2ra_sEh~ErVa1%h6`7D>5IZtf@|voI!nHv8=UuEv!lUVC8Op+2IN1NTE|k1#iS1 z0$kg8HC9`XTPyk=stdON%IQCQ8UJo&DAVd(O&IqzQ%hNts3PH!RHX}y*5wbHRlDOZ zyZg%43x(gp7rk(^=i9kUh=*;~H7%{$E8O|78(O-b6BEkhB1mVG zX{r0&Y?m6kupNE`W3 zi>b`>Fnn9;0QmU}VO{38H*bnqaXK-I+Sa5H;5(eWqjQr^{Y^7Pv_yGoB>7_6r2-mh_^g6 z)Ro7lqdR#_zDKHO{StNiy7q%}u~Qtjf%#Md+!vPHMGFXWW8&1#ni*Rq2BP}F&mVIS zlh?Z*?Kdhtc)L5Rahs%Tn%yMzCfR3Dc=8+lLvP6JnGh?Tu{r)zWrUZNhw0kxkPzHA z6gX!6PBq5Z*F=Dpj%e!Av!1s}>(8JW)fTOfVSp^%*QOm9Qu+|t0;IM zy3TdaY|kw)(q(PAmo4ehKi2|V`-WVN$2-qd3BwUE@9AgWC9d19Ro|^1G8P03X=@Q3ZymQNF0cI5a2ULPP+dnyUEN}q-}1)rLvjn=R;21| z&bx(qX39x_xxrF3ZrsV;@H@XcK+TJ1grHkREACbz*KQ7AEm>icO!AcJ?^gC&Ep7f^(}xZSc7y zF!AV2z*i0{eP!Dt6HJ`vO4a(}RW7zXUP4!&JNP<;SmogBPy*rx#XI3@T{aw=>Y2Pe zFI3+4zcScpAaAGTzx9grs1A|u7v+HaJ@2+G)4g$7SWiCg z;( z=ILo^X%iC@U%!5>tgIXx8*_1Sadvi|pPye`Toe)#s;jH}Qv309(c6mWF**JLnfHBP zJ@8vtSa5fDx3RGq9Ua}=+`M@4;?~yImoH!1+S%HFglQ&V$t zav~uik(QRediCnFXU|ksRr~wS)~(>+U~O&f+1c4w zuU-`v7JmHr@%;JoA|fJp@7}$C|9*CMc1cOe)YKF=H#aXYZ&Op#qeqWYQc|+AvWkm~ z3knM8=;%^YQ+s=RhlYk?Vqyjd2Tz|qJv=;YXJ^;h*%=ZNa_`=~$;n9r1B1A@xSX7v zPoF;7+uOUkx+*Ixx3sjBmzVeS^f)*;baZrZadCbA{8>jw$IZ>HsHmvDz5T<755~sE z4Gj(I>grWhRkE_OiHV6pK|!}~-+uY>B_AJObab?woZO{Lm)^gBKRrFIr>93tOB)dp zVQy|NARxfZ%xq<4WnyA-^5jWTQPBqv9w;a%FfuZlnVAU+3Z6N028l#!YHBhtF!=lX z`}p{rJ9qBv*|P{>H4KGfWo5-D!;7{uf&EdZ_qfDG%^e+-(Dq_BRRq(cM{fQNU-3y1YNLkP^*IbQ+&Zx$bm6|@?dSKbR-GHxpEaIeeLArI%uf^&^_b{X{O7qQ zH{*tCIiB`gs}6Zkl~SIK*}?j@XVN>vmXAkY5I;M{ z8y{ZJ$^MYpZDL3&^t`NjM8}oWDN5q5E_Ggp)mM_%)Whv8WRf3V)^hQIe;s~uz3RJx z9bquZG`;Zft7YNWx{|3;ZncNX`j^v`+P{g$zlqGYMA^7u7}D^sV!wUj>2g{Q8u znO`AKvxugGeM*0+EyUn4Pt||x6UhrXM4$NK0)s-m`-uh}nK2f;+{yMW$fOsE-)$AS z!&xijq?^)HtI)wu61|J#FTd~ngdz|}R=_Bp+t) z=kTm_4X~`U%7WHK>A5Ap$snh;S|RANF57%#)76qe z)j+P4{l@6T`kO-72O|YRXJ=1ZuugvYbVBx<`$dV1mfj1im`5ol?o((gB z+{wuz*H#CXzctzBt_r)HhetS%1dK4s-C{9L6E)$l%Svm0G-fNLSLRO{5KzHOo*@?V z3MEoD&DPT0dGxkeS@F~2x%(>*or5k?JP=|`$g}#Y5M}OkRKZKv+Ebq&p}HAURg>&`<4{Q|WaQAmu{v@kyQDf% zxQAM&=_q8J{c@bIFVzM7=#WR3;}3J3t1P%TXMIKl!lb!He2*HI)E-)E?)Ikh2~xLjpElJ;fEaw zt76J^gT%L*u0Ldr#qWUAy{o&1KEP?5&~)L-%{U_J4+;T-FC$(gioVKhZgmN_ zbymCe`ehQ4kdKq85|@e6baj#e9bbQ>mI*A-<@7~0t+Fd0D9s^Am!nY1u%@qdM0`bu z<%17IwN%M5h8T8CUEbP~^ND@i^D}*q?sf8_{R8bdLshX(}Wz1*Qf&vBH_{J2GWJTJrD02mvT@!Nf~|WRvr?Sea>at zjK};Oy(yLD#b(t8RcS~j$}i$TCH(Y9%N$PTUx!;Pj?cN?cavx=9IbzAG{i?bW)%F!VsPp>moTh`H4f7IS`+j{z1 z*Rtlt+n8ARP1znTyi3i8@|*XI*Nphh>J;^LHXrocwL6EHSo zhs)f>Zi13T5v6DQJV+x%glam^&*?`HhYuci*LrE%;V~V}Ezl!b!f7=ir#~4nX}sXt z)}dQ}sR)+Bdw?~^j@)I_%Erg+=?36Q5}wl5(skyk6Btx+3v16zYlpR$9?s=SRMr(y zzgrMNJa+L_EShqP(w2d>IPn#w#o^4D!?n-BqAL|i4%bayKCu`~Pn23&3=E25ES2N) z%_j^$dm`%W=3^^fO5VJ{^O<%}4)~!Op!1C*GpK~l83eh*;Mty-_X>#vpGGg|0d@+4p9a@OUa6977Hq?r^uEGCKXKYs$A3;^kRV~y; zu0}Ovcq{Gv$j6q96Ok88J`=W&TUXL=UeEP>$bDmI-rX2_s3JsWj>wx~daGELSr*wZ z0M{+!pJsC>|KM77oo;HFAXZnB-Dr*Ks)~;49j53mJ{#Q(o3Y zgv7veSSY@0R-+jXUcYMCOLW*+Xd=5Rq{irh5FD@X!TCpc^Cux~!P1@SwwCXoso!+F zHbp?>6E#Wf)8n!L{3-TQvH3Srccs z{?xBy!;*H!s$w=yKxYobxnUR5fRH6zWCUi(47k}@THakez&_o{iHQ$7Ed}L6Kp^~F zUiAY01ya1 zAfOY7g@khL5{V0u*dcN!UIG_G^aB$c76^ypf<^WaV1{P^fSUp&7~_HPB!N!@fFLJ4 zd*JFvr0 z0r=(sO~2#sS;NLL1ik|g-_H+RjKU5-aEqQh0>Odr(t=s814zTfO#TqoE@27)3C{n) zls&;EI9_0h0Rngd;ouN4F{XQK|CGWj?3s4r1cD)%<)`-XU4w}vS+UF3n2)=IP3~$$2{QF567)tLNFSD5dy|MVA|&IWc;EBSgG#U z0|bH}wp(vpJJ`kkMJayc`9CQIMn^3Hc^Ci;u>ffLm-dR)`#({H0yJ}{Y3zvohZgLm z2ou`=-)gD?@CIY8Yyny@`heln52I=ihz--C{*A^xMs}|$6NCXujH3|~hQ3!@aJRcc zvIGb)0aOyxjBT(Q;s|JkIdJ!@c=j02JwSpGLF687*nz@o0}RKEeL(6!;RbsZ4g2CR ze8%<EXVb{TXYY zeZyi20D=EMB(xKdwyW2_VExv(f7I@WxNxNXZUZO%J2341%Ge7u^IoMy#fM1<@=kx-dk_@Z+2@xF2;VE{i(*-tbag83H)sP zzuBi>kbfJ+`~&hYb^WuoK>=G>e(-pwK7Zyh4*nlyjOj0ofZF~+x>zIjhq^*wfce?6 zbH5FY_SSW0H1}V~d+Lf2%MKnUBp%yR_JqXa3je_a`h)I;>76^oB-sHD7e8Nw0ZvqR^HjeWYI(C00* zVVm>t;MXnl$oIxN1haO9Pw2k-HS~P`IywYO^>2$jq)UI8@+JenqKRtc4gae>l6tvA z?sHr6ZX{o$%q)DaT9(gxtiC&U<6H~WrD@rL-sWSBmE0#I13l`88$k~UW?Qym=ieEg zxV&B2a_~I)-H25Ojsd!7D*3Uq6wmL(xVTt4^%dghoilme+dN72g2h`y?O@i@^0lr{ zyblz+j@1x64zx8E`K!cSJ$5;b@--v zo~wD4zA4I`Ql&_HqWzMJ*EQ->i^T|*{?fOw2Kgjo)sPkujaw^6*n(9QG znfc8l(_eX6#3W_Gw=AjC*2nT_ATFoDr9KJFBk70Vq==PHq(`hSHp^3W5_%P8d)%pz z06&sVJ#w2+yO3z=Yt|D*R>d@pMTs60i4bS2$Ot>AC_|-TEP7t-k{*Y^i>yNi-kAqj zIzxT*E`2n*ci`r+;J35QALrX;`V}qLF7rQiJff>-+L}K(c_WaQF<1YaJiV!qL@s8&)qm@>j=4O4&<>gxTfUV~lt@*TLq%~Wz;?iu!q|JsJ>2576af52~IR?I3 zk3zm*PF{mjbM_GY$Vp`V!4W=^J2(hjhGj2uPx5B3F+KE zKCx2osv3Uu99>#WV(OAiVh};}F=m4a|MeMu4=0M_bjg(xujE~Wi%#4~(=vX$LJ|?? zM4}b=g@^JCg|dsD2W?A-WMB53>JJ6on%AEwO3kDu-_CH!9-W4au%30AB3xQwy>+WcM2P!IJ_x zQu#vg+kyv-j=JT!ldH#x9(puKJy&9p=rS`^V5MJeBlYg#m=*mz!8qg^ePExs^4!%c z2BG)q<-Q(zqp2vQ%=M*i7r_-Z9x5L!PaV%u* z8iTy1r)jjP&KkwqLCKcaTJKuI6_lj!BEKI++tbPook@S|C;#29^6=QK;K{7~qKofO zAMmJTBrGP0gwZjsEg$P}m^gd5P=U7TGrQAhOtkr^48_u!sx#GWM`C4Cr;cs#Y3HF{ zhC@z#3R&+azbE^s)2m@>=;gr}MFsEJ%al-CFpt61tk*X_auG?S?*g|CQQjH#Nmmo; zdnCmd6=KoRd1Hwesb`;!p&68-#jEf%z`QZuLyqZu4xWUp+?sa|7U& z%AYU#k*-XKXC(V2+WZMolx?kJTUn-X{N-MLf5I##VSRhpk-_HEq52hPWI4!RdPJnr zSq_mIMxXW&pOIZ-H|tfQpCt(4zTv9Mw{o=qWPBwwF0l1b{sbN`^Jd;+skXbP{%z#h z8w!(y;S+2zN50gbDwUF4B73ByfB$tEmEARJyK&l?zFF3jqM4c{_FqzTo7>+C=}&2| zeI1C|IE8E#eKgngls!>@l{?@$qe3~w;m$}HmEqcmlKc3pJj1Qfqi?1APiOU5+-*8z ztKFwen0M#f0sbPP713zJb6+oAk*MIiitjJwXjjPH@$`fI(;*fP! zvD}9|=~ipDsQAYBZ_EfB)S0Zqq&t?6_pq}bhac$eq&BDX!z*{F6uEBDK#?gmJanD7 z^gQS4vaJw46Pr+gQ=<1KPmnb6+4$P3zDU{D>g^^W!do?1hqc9n)7wE*ieB@9HGs==P7d6$QR zuk6I3i3+7kInTy70`g+>%mxxnh^m4YgbZg39(+9?Bav)lF#m{J#%o=Q71Z>Qogi-% z`D9JmD$X@LPVZ&=$*}DEjfS*JdL#1EUZOXngl?uAoagk$NBMxW0o`6&Z+Gkc-9{EPRc^&xFo0KfTOJb~8dU#Fz z(gy*fv!8CRRGM@<$WN4zZ!60{HDcw$NYHV&jYZ%3!wXds?XG9Ui!lv#W>lrl8-`Kl zT@R*q(~KXsqzJrlwQ8+vU9aZ$9U{fQ3imCOWhmYFwNk#7d&S3Y@HG0@4Bbo44%WimbCjOXs; zk$Ctl?%J&wS`QM?IhG1Kfu=h1(^Rj#u3c45eLC09^DZ0}! z1)zK?Kd7ewSI8C14|9e_!0rnSYzpK3_Y$(R||XNZGb z>_(xI+5K9+q!Vr0BFkm;@nrDvZOKv3-0DCn5@Wt+HX1&Jy>X#o#^4l!sZ)2(Fi{(Hxs4Iy0X5{0)gSY zooo^Y{e;@HC*vgbN#=cr!<;jZSxMP+e=t{Ej-4uteQdIff66)R;rW%trTV(wZnuIg z5Y5?w4IbxKjs$I)4F6SyCg^C~*yj>o13cewdZEJ8Jj{mjWCW)@R9n#rEGB31Gx7;H zhbKMGWitda2g)3CKKk%s=!ZUy`YeY_DMh*{*K^4-cyPu*bvMn zH7V3*wetw0N#z61o1!b>y4y`8W0K|ChoHzY_SFI()l6j8$N-g1aSyH5?V$|wShIo} zm3OSk1RT`HhQ)z8+Tq};g2$E6ksD?BPeQLnHdG-_945)n&NM9gnB87-Md?2Lbg%P0 z>#=XLmUf351MJ}PPHD{ACEg$KPbvpgsuw4^)x|z}u6mmEy#HlqnR&X4l8gAu8{b=& z$rEZt>>2AMWR1=}qZ~m=9T>a9SILmNG;z8WUZAevzHYg^sMVVieZEILEuZ^vhVS|a zDoZ$Js|R%{{_uLhjVZbBy5|bM`?*~|<)U_;&2>;pevC=`(UIV~jF^jPZwq)5<-2FD$D_k+yFyCF?E!}SB|!{x0y%X&vPxoKQ&nS z6s|VdJj$v-FXTCoPJ4Bn*iutDUi|oYU6Jb9Gjj>)Pcq%uv`#X}`M5lE+2pJvjb3ih ztFIn)@IGulnyr+IYTxR(dCfg6A)UG1!}75bxt~Je)VI&FH$St^$mFIL)+;)rwvXxK z9rBs`Zm$Ccwm#XqV7FO00NbfdfQ_k`t#Us$+x=Xw+v5@a zmzh6Ya5v5eyW8%UEkuUK`UZyj#>OLGoxZMqac-x`sFSa4Jn$fCE6CtGYr~>gsMJhe z)%>&4jLmCCPioSJHs>n0`*a42N(cQ}W<<&A{QbWtch#&PdLj`q$-q&OED>Sez#r`; znVsMj8}E}$aUXs-Box%rB3usPxX7i(nxCD|j>yw2hk*r4lR%}Xv)B<5iX!EZQ&I;E zqeU-sH`PI7PPd_j%c?sY%3j(s7^6rx66SBY2`@RQ)sHovC>^-6_3RdGxTJo-Md8-- z{K29*lQ9-j_qwCAN$KXPGl~(0c^z%5sLYzU0iOYcN(re6Q_(9oiT76?e5=fVUCcRf zp=O}?n0?7jy_*HrRYMW?WOLQd+@ArDg*SF=>E2mZ9G=H(9w;AJzCC@5l2G*Ry#Dd( z)(s}IJHiVC<@Qk(B|UCoheS_MZR)J#kyE`h56Wk}+Wz!;LaVz}z5dOHW#1FPF&E!; zUY_}b!1uV7cedW~@7Z_rZ5?pHPVxzUY(XO|m%?*=zu4?Qn%_6@MX4LIlpScv1_ zyTc9VZvSj}#@dHUv+&GF(_#4{=TGX{cYzs=L-oKXg&f}VX2NXbu;AYI z0Yn$x;s*s3eastU`opMf$$SG-;zfM_c7sWiwzrF*7x@u)J#NXTduLNGGTsv#Bv!vz z!Kvddlr56mRz4Mc)t#-`zkeW0iX=!x&9hv+x=(N2d+LaB@Y{lqBS(A-8tIHoZNJE} z@k~+GrX@vt7+)~m_SH$O~l0r01*VZJ6tKa)hu8$BrXwG3T}B6gj{<0y26o3| zPXmGS^8qJV0UO@=fYV)&a0qaxyKDJ?!`&=!ii{P-PyO9{M8H2IVHa|Dk@)%ffRF|# z00Er!f`q{MQ1HJ&+UuVF$2!3)H0(`((CxS>m6mUwxkD$$euF@Xo z^Pj4OU8{!*B7hZ#T_89D!#vD!DhMR0t+WUkbu+L zu)2T(Bm@V};}HByUD(qT{0kCh8GRQCDTvVpC=|s900}_;;&2twww5uwuD=L#V*k8BEbasfNT&1pbh{M0>X#-8@r0_ ziT)D_y9l|91chL^hvMf0jy?iR?q726KkUQKk}_t2br*>rj^iHCj|c#rAL=i;_aF8F zhlE{3{(%G)Kw-HD)CsV!Frer7JMR65eb}iJW|@2!34p-p9ttBM5ESS+{;F5P#tQzY zoDi6RfL$a&6)?S$fFQ<h7<_8e4!vn`WtTBQJ0w&^bn1>w${+B}FLWp*e0P}-k9$;C49s?o(Xy9KlZ_fbY ze_AB}>y`06mf@c#ClKJ+%DuCb8SNVT9!aXVUwOu8L3{zG&&!)1g$bZf1=M9zW-#g# z$Av5Di;CI_x<4+JTP3^h1)5N{85Em3< zXX~-Nj@Yn<++2HnOo3Jd#z*9R@y4*P%Jlsw{!kHG6pS!cDS_dNGbBo-@=NQzuA+%q zCvCSJwu>eZ)MF`@YVK3uXd#Zsv-T_eTj+)N{+DXm(~548T}l!kKKjb5$-pP)FlBYB zRUK1%vq^!xjkWrEuu!9)<;^F0#MSSO)qXu{c4V8RjiDc#*4phN zoeBpriPtp?p_>K_5f0pUvW5Z}o+2y*l|HYyR|(Lp=CYrWom%ZLz1M$AZ)HC18_m@* zauB%_k-LmwrJOllhSz~P<3_1zr#0IWZ9Tek_R+K1RzhJ%dj}geHMw8R1g}g?!{xmW zUaK!ZagFw%O!2(n%giH%qt5+(suip!tcRL6>a9d*KczCcM2uyowdf zu6S2{oydO3dyI(tu%I-a&hSIH2d^}j|A_=yOP*!2u@M@!@yhNaWacrsFVrc@iBc|D zdy~jZq2H7Zib#&LB_UoiMvw(@U!J^j>o~`I!||@OyoNr}g9R=OudHr`+#Av*)gZrs zpLGu=&k=i8<|qn}2W5N8HoaU$HEAk3r0fCja7@Q={_8KJWS=YsAGP~lJzsSWKhEh` zz5(wTWtm;#QKQjfzO~eE*-cu~Z4>HpTvmQZSmf{&zQRMvhFNcDJf_X-Ni&i^(EP}j z!qAk0lqwJOa<(3y(5cS98ZtuZa5hfrln#oZBw9#^#kek9?2vOy{5ek!HO1I|iNN+0_X4w7Abs1)0y8Dq(hZCJ9paLQ4+{_q;17($QzhNRUS|zi$9cF zvBC*cJ@zu`C|lSa8qJHDLeMUi=TZqBCpn5scrq+5IUcJ|I@CX%mcRMzxFYSfM~;Wf6@kA(|wFOJzHJKhIXhFv%+dNO)e zLL_1$=-#=Mwtn?Zq2fGUD~Yc%6YlARmnv1hLfuL{l%Gkl7?r!>moO>QnbXL=G163G zTA}2yyCRwbG5(k$AjM)A9;pySZ=1(@OMsWWG)k!CDoa4>v4m?+pAhP+7DRuJ3Z2Nv zNo~)ubO@o*A){#%Po?JzIDSk(;pK`JHNjD|q+ASBz@^!4lB+Dbh&Mqw&30=~*5kAW zm|isUY`tHh85{4CxI9JUl}7*J08yX`wb6rNQii)J|_D_DWR>&{xq*+;vD7lQrl;> zG&dB$lyh(0CI(4*f;aW#xZ?>emu=&ST?iS9;)JL~+ zWTQ@VeR)I=iS&i^sS{TD7;eP%EfqR>RYib$RxX_CGz_-SE1yf?5Vd_CD*O(W&>{Ib z--9tB*w6bKucDg8sks=I<%pN>yK^1Gqiyq}ZG{bpA3XJF2|o2DwBk$45%L5jICXJ= zKIJ9NeCp>@Z(_z{Z|cZayuPkx*kjq6m@J;B>x8;P_cpPk>N(lMVsns(khXvIC4Rgn zCcm4u0s04h8mXushgtF1nqGGJ@VJ(FX=6LP1o>|0coN%G__SxprJg?bBCD#(yzJ3vVoHr26 zNc)DWqilkZD(b!IMf`)KIqt)%<9R%3-_K?Zp$-JiQEe-=2X6It*VAABW-UuLm$3ZB zdX@#Bc$A#d=C;GV{`N^p$+cegkA5jKn}LAitVoH~<`0fDY;5h1A&3s{Oi1Out|+W0 z>;L3vTNu_i_U|X#?iq{!|1(V4Ge`gDVG2x8VDBiUPDTFG2Y#xz;~I7Kgp)IJ!JL!L zHq=if{Fpzy&%QqGRYW?QvKI0^jI&-{l}hNeG$m|SZs2B!i-FmPiHYFY$vf?X)!qxV za1kB9h|cs66G5J_k;Ll4L&TosFTM`KS-FyEz3@qtMPhBZ?b&_1a`J03=1)zhQ#4rA z&9d3C8wcJ!mbgPilp;-Zv!{pOn&ak~Y_(PeTEF#d z&*9NRYts<(J~2kslVnuO7Cj$Lw?#@67C-9UB98sICgRvudoaFVDO&y|(sS+*byl5U z(Afx{cq_RlbzLDV6FGK8vZF;+lgD35gz3uA@i=|!zwQvBquO3b+CPYKE{kPJ16QmN;T?AO8z6 z5X_t$37m`%%wGXFE@n>tH&d{^q1%5V24D{GRUcr09^BRcL=qBkNC1oh=F)(}68LtD zzniOJwP(jr?js2&EDePnacL<0PXqzZZD2|Ve7OZ5Ko8w&=jO zyZmyxLY?ME`<`l=^xEL7%|&<&$3%fxYvb{1_0L?2m3FET6#}I93Aos)V_3_Y1)f9P zAyIBd4YPE@$}QDuGHSJaM^7Hln;(AaVB?)L`}uRA`>5r)Gp~)&*5S~|ny0f-6($S! zrYkCFOrPr7&|Z1Pxc#Mqrcw62Y=min{wHTYM)mCC>MZLwnkFs^8kBzXA@kPL3wZ}O z9761$EsS`+VY<1!;!6`@5JopSkXfo{8!>wHdgegcofH!20n#{ITE5b6zPCCPdyOSp zY*v^1bbGA2imWYHqFmcGkJ)6>5qW$M>n?1pue&wbo0+ys^PU^+)jGmMsUurDigMzn z$=#?EZ)in(euV0hup)G89c$$I!r zC_P6|XHkwwxA4Bh+Ei|$YRms4?ybYJT(|9Ex|Qyb?(XiE?rxCo?(S}+ySq~a0Ridm zQbbxh<$FQ*-tKeOT6)&r*Z2DicrJaP`QAC^m}Aa)@uuL6{6L%WRbt;!0$=ux_eR}A z)Xc+{aTAcjtKi8af|SpT=)P2{z7IoL)h=8vUu#!Zqd{-y;YN71C84qIQo|V&BZb)QA6-+lANrpf18B=@lRl5@Xuqy|Zxl!SjWenV1qfV-S?ev=B_y2PKNtb*9* zra~{1a&f4;%|-Fmm<#%RN2boxv$(ZjU7nDnYbOlEK97`RLm9JyzpbaE>kB+ldzTgD zh4e}xx0pLT1@CUAw9&^KV&xi54C$rbDrHhk=AoB~EX{|iA?-!j3q0f_u&H+p+IhkU zZJ0Ug=}Itn5KUBfEo2Pcm)hfWl`tWs?EKw{!&3+7LID1cAX5w)Vgx8)-V{DPgu-oSXkgB&tjRnINX1G z0TCss;0;B{sc1?-dpV9{>mlidC$N)ye?b-k>6|2K4ZEiY5la(Sk4Pc3COpJ?P=yIJ zL3|nuzp}ut8WqGnhj=8gBIxxnoe)DJXBziFivO_E-4%4Zvp?8$xadRRr)2BM_`ISz zn*gJhZ{MT{PUAGOFM{gR7wg_jeu_~h@u{9MGlH4}eyIFb0b4C@oTKO7yTyL~lER$5 z0p3SF8>oa9I018k;_zGuVPlctBVTv*Fpa*D%AOOiZ@Z3pcxodO4wPAkCrqKwhoo3`QxDQ+rn|OGZ3Z0o?ffZBV2`uF2-- zl~?0!Nn24ei`b@dNu;QSX2NdsLXs`PlR!C9s#M4=7~0UJWFH*w;q9}SdB z;zc&m`wCu&&~I9~V&>N(mc_Zr#YT#1Bljh=kp^X%6*)u6@k&&P!fjdc0itF(25W|? z79A>}Zk7%^Dg;t}o!M(-1rg^}xO|%ABJiE>Lu)>`-?b6FH!TsE^7~XCT*Co&8E5Ui z$qRqn9^fc|kJ&*0%9l$~T7WAmxI#ah-yDdVi=M=!UH~Df65M<5CEE)rjY|Xuu3K@z z5RWu3n9?=QN^x$z6ClB2BclKAb1pa2{BZ#|NcqPi0)GNBJACt5MXl&(I1JdP2~S0C2qV;F18w&PZ$EVXJt6}2JBNUvLIgkWwL4qW%aNO;5#r@+ zwqQ!$!Xkk|>0F!-hn0#b2`eb^C8K4pdTV6KmV7gv#@f8k3d>T&tsgpRq*V_5%*n`7c_NkhLG}KcpN8|Mqe3N3yi5tIBBuFyFrK@SJMF<)t7z!^UUk%RC~f(Soeh42J7c^qrFKGOZS@OsZ0MVTsSO;})rmn*p){+Bz-G4EJaO zc{Oo>`nIB^89D`&MXH_lYmOLcs?u!Zr!PF?1Eu5fr!c(v3O52Ry#ke> zNm*Kl7^MzVSH@OPrSwbvr+UcZH^ioj72cOaZ;z2!cSZXvlWkqx=6A>k4vChK3p!qk|Rl)7|@*jm?gf<3&3h z66c#L;nCM$=flm6b%C54*;{Tn)@1a9t!-}$Q$bPnVXA}|@Q%jCzk`=2h@i^}DKNql zIRSS=T6RfzRga=7AH6Biz&#k(#GybS#@R(m>ic0U-)v^Sc?`iGJI4(TES0~;_GFW} zt1vT#V8>wAPJ2LN8XO(HqriCno)1t=suWdU?GN0Nrxp)CdDc&k^iQ5OAR7B$^EJLZ z>3=2iVE)PR{d?%_7pZYiU+0%NjG5_wde$~m{0N;#)v4Gz%2^-0t78h8p@ij?EA07k zq;}aw!-y81qwIY9oLcNwZX! z!lGFT4pq`DC7yE}h~L2f`7MQDyxa>6a5Q3}jpg7Zag=(oi_)tWi*0n|4x82*@^G;o zNLQCmhyc7Ql{<&~Wayv*5Sx2Sxt$^5@NRr*la{s?-=#R%m?Cy(LkIRVAxN9xR@~;1 zB59QJ#v!DaLBVi|AVDl~4CaUixk?gBcGsU=U+1o#BQG=emM)y$P_A5v6x@BUs^3KTxbCmjd>a^;1WFWnaiFV``JNUOffIhcdb(rz z$iaTjrQOZH-Pv4BhZ41Fjg1z!EYGW(n0)`Pu2H6_vT?(@xbdE%8^~{VlID+=`cFZ? zA0GH)Lqve^>am~OsT06O|Gvpl)7O!VxufaV~82=H%tvQGo>>lghix(w)%@?BBGME_kU^t+0hr!oHZ zoBpY&dHhQ3PgDV*ogOU*psxzYZ&C$M)A*}5{UmgGd=o%n@EBGGc(;$*9cF;j{W}Vj zr$Ne;$;KfqM9ZI)P3z%NR4?bb*u5qfPDV$$bOu$ywF zqt5l`L8+#iSj8@g3*UNAeltEQBwmtU?8j!+gF;{+a2n;g+>!%fU6_fO17Y5JD*aNNA1g1)Pp^(D8?l zx6XPp%lI?q>`jaDlDXs+-N=d@R_dtzNNFR9Fm;c;d(46Ka>62o4xeB2C41aWI%Qo zN20%k*-A;OVFeLSVf@Ym<&N^EGrfP$*X#8$Ssps>i?y6@F)@W8 z10Z))8M;T#Tbo4-mLYi71~1z4lwbzdwFz()-Lz^U5B7}Abt9NAOz&zMOZ~p;8;Ll) zqRC!LO#qRZ_?)NqO*GU8-vkuQoaNOF`|Kxn44W>0w3v3u$sI(^u)T%=Y(;97q3cGs zjH`wK%nH+SFedyRxkWFhelyAkS@x*U+3U_hdrHkIRl$>#ECcKD4 z%%x_|+rtQMr@bfz5ldiq!?82x5l9+feVg=IF`K$s8vdLWXFNg=^%iT73a8%fl=Xt% zlBhxaRjO#)`M#5>ZRuB}f;4<>7WFX{lr9{I7CNvp5;_95UBbW_%BuH*kOoM8V75P7QZrIMVIALHh7Y523u$kMFY(&SEE(FhnI_zAe3)=2~j%M6B z;g>JS086&?@tsU=%+zYc;Hy`ZGl!Q4zC@^tARH3&D%A~BEX&r%FJe_qh=GvEm+(9Ik z-3^A<1F=U`YolzPjZo3ayPA?>%A3i@GW^x#!x(c{bngnVV7q@`7jE1AbL$Hip{cz6 z2{-sTfJJik>>FHA|h(oCqfH zPS#}GWIxRo<;9@tv)o2nn}J#Ltt+2?j&zK1P${=CwXm9hK4_39Yw*a(id2FosSdQk8DB(vHPvGLu&t)biMuvZj*=Q_9Z}lUB z$2VVxd&5G2PXuWcvBSmH?9fZ(1*H!vEOHHSa z&Ea!tBy?LbEaFlqLS>X7s7-D-!-G_2n7Zk2&tt&lxvz1bllV}6lYhV5TCYcj2Ey0h zdXAeZqcNORd$%;H%245rBu{>?>>rc%CY&&7a$s6_kXy+u*288|^r55E(tV@2W{1vO z^o`QZZBzL@YV-~Z*$KBMMtpi6`AEZ-5RSZ!EMnoo!@*Q#gA3_dUQg%PH_yX+WV+k6 ziW?tKOi2Dh0hvR#_wc>bVEp}@Ko3bg51#Bh@HTq`UTa~^%BqduBq@xx*6zqb_sgyH z7;NOyMIskbO1(!wT21^i5Hd_AFnR)@A$oL`i_2)>Gfr&E?KK-Wt#z~T?v)V>0%gMP z+s&TCGYetAi_=fYUwumo?HcZ)c0^Tssw}+Eub$x=BDD3=|4@uD{F#-i(`G&$Nmuz9 zixo*U`?Fg4Y6&RXa7S`#FHAzJGv4`axeMhvSXY|oFcpF5#Apg-3t@O~vWJtsV2dS> z91NB6qA2|dXToG(yr)-ZKYXV`aIks*R`;RdU9%f&oA>4p`6p~$Jo9mbg}te9O0(FZ zIG$)wCufhmJ-c&J%i*r+bgUz?^}q?Q(G}91>;Sig`C6v;m9LFoPgOdZvKu%FZD%>e zlP`^Q9hN_1sG3j744YCJ*H?*y1LDj3`XQ5;744l}SxlWpdVWg)fozERxtw!Ls|{EZ z?0piiD2{lBmk9z*z7)ec7pTQ-Yh?*B@%t!LoxSZz?Im){6$SGK`&|{*Ypx)X4DebP zs_17OCf*yyP_zu>J}M3S9EzHdQCsACb9#q2MM3wz^T6NWn?Y3EkWaw zy4LW{cxmJ9zPSxWK-KGL$UGOvLz%-H49?dZKzcX%B^|T?$5a>rHABlR8-L%^SE;7o zo{+;(y~NcLV|m~RH*`x55$TkFh(skc6}6*_!^!`-J^I z4_x$5xt45|I)FslH>{#{Zn#0Hv)ALgIx998z8y@GB(!VP5BB3bTB_G7FUDw2jdmHj z5JwK65=}Y@z#Pw9{ogfdC>Qj2`U_smz1aOWNEbS1lcsgvnpX-*Q&CK2RDFbFW06Rx zY&+Y;px3EpYW&r-^F!N=V8t6_w!`w?Rz`kAG2Qlrc!JaCUS7N{A0zzlV9feQ4TF%^ zsS%~zL2wJQy6scmg_OPW0z1~%p0`m=$!SS2J z6Ql8vKN2pz4qU8oJcRK8O2Q2C_vB5u^EHUqc_^@=e9s1swyMI_RKj63e+E)iy(1}q z>3dvSEz2vT>WZ!{_JXo42tLXjr;uo=a7hD`_+*HbD%20y^(ZAv`9(Dluj~hq+|Ie3 zW^FHgpA^k2%C9ZYT}CE~$f!eb)J+s%XHPtNr?F>wgQ+NHoyeprsI2!KgBaxmN@D3C zxN**Uk?q(WeWRKrtMYhYSY;LvvZQ=%2E&%xdPP0?FzoDarMv_jyLFQed3*#+D30LF zNjsi3!R-RI!`HfeOHg^EbUPV?zikn#oCjr@!v)O}IiI{l!?`GPn}65_d%h9c!N>z8 z^FkE%tirONR)U9y!enR;i9d_P!F~H&D&CjQVjK+-?WFD@bXM5ySqYv~j0%%zz68zo zOvr(8hvRx7#HB-CrSIw%Can;7o+U7(uzDT7e&JW1A(W#5r@VaS*9j9bVnUw=s}(ug z?zzz!N-o1k9@r75^24CxOB&u- z0Ri**Hl+eEP$U2RVzJGt_vQAdrE_@Qt`48`o0*##m+CcXWKoDRH6_v_M862NFFCo@ zemF`L10RVcj{Sue6g0Jx7Lza?zbb%r9-fRV^XcLn^%WrH(nD-EbMTXVJ;DcaVA)t; zzg|JTmr``ek8#Lwptp$?-MX_Q5MUh1&_RsP)@M^5_}3I5gF%o#HA zI7wZ(hM;I)0~NMsSud^ygX@TJRXn$Y7NG0!X6U(l&aC4~lreA(RjI2+wX zitVez(v@3NQ5?m$OQ{#5*Uq-9lTr-tOt#{;tI~8N?6e4Bk>Kd51}JomGV3_J)vYyG zvuvIoux*^ewKFG1_{D`3mS~(Q5qYfavtv$d)H_%FRXB;vSaYLHwLKJvJl;(6<`0t9 zO`L*cOYh~EiQ{CKwD2xR3Y+usGnh1h^j`N_1N>D2JNS?yOR-9g48B*&@z~{-dP7-u zk=;^7H1A;K>zH?;GKDvgQ@xjxb)R)nBr>UHOq(VaFu5$@zmk=P7ree!=!MwShulJ) zXCE~|a41_$rg^y%|M3h`8%3*&pcW>F4*%yEZQ?!d@l_I=XRgEZ zs}WCPZAgpsr~W~NiZ4>wT=t2EXG05)$ybb*u7VrYNR^;!a}&CqFWh2Xu8dHNMn;86 zU)D_;6(_%Is)drMzGb#{@T@E;RnXB5^Uh){z?gCcx+(FMLS>5*&4x;4pb)~Ff43U6 z%MpmeS+9O3{;}Nctf=lFK?q|ZUXOI^ymT)Yqy-!El&N-?kQ-fO6Dl1`!!H%i9STnp zo*j-i)?#~dPFmNCmULJ|G0nV{@TFAjA*~fGqQg4$^7s-LP)k=&KR0&pX*4L4CYI$I zKMh0U1V<3~B;$n!Dbg;~P(2lVABc@nSm}|FgEjU^a544fR@dsjn|nX#VD9P5ENrLw zGU<*RIb|}UhEgkC>=8zMu!T1$l_hDsM{>w$cE+pRs`}v>71*txiSnJAvpcH1GKk%o z*m#^wtIe(=Oa^5PN9q~k8%Bj+56a<5i8l0EvThdTAgh~Ml#euiaBSWH^Mu`M^U#&& zny^)z*mbk?TD2B`Gd$Be_HdscF@)_viYrtq z@Vpav^^gn!_RtVRL9`B~A1eXDL!IESQGx&I+5YK}fE$Y7-lRPigrS=M?g+_&?> zwpV=6U!?AzJp|};pVIZ0#aRz$3O)NQV97I?NOMVk!||0=i|q#fSt9?Yu3EWS9p1v5`V!qt74Sutwoky>3EO>GPUePaH4X%o1ZhqW#Pi zHD;%}dtMLBoRdI(W?~m74KdCln_h}p&P@FQSyYjbpoDrnM<-=lt=70f+JOLa50d=M zv}JAINuluTZth{}Oc|b?UoHVE0;Y_cxXd<<9GmPb9IB54xG%_s)wY-MPsKmFLYi(2 z@niwJ6pg_ba&wI%xp(wAz{s#!6ZgEzl72aNnMC%w@M}jiqTUTCG@gA-I{(u2^`pX1 zMR`l?4?NzdrrJL|xE~%b>vvWbkbMF0NFSTAKmB-e#_(C6cvwKk)$b3Vd}DmpC*Kv& zul?yEpugwie_;FmDS!-^r@y{`3ft4Cd{J!jE!vUY|y8!UNp{`>4&KCa_ z#ryOn|M9*5r@HF9k_q5UGfIhwIv6`T*?#w@0nhCvtj!!1jU61!Y^?vpr3Q=`pbGM% zXy-AXj`dL}^E>GtPviY}EE2Lb)_*Ks`bX|Pz!nxj(j7ps^JEJk+lu3NnAN9A|G(Pu zEA<&8Jp(PEXD|yOCl4?-%mC@xW6B{5AZh7$a#R5MEdQcr{&d2a025}YZ)s_uZ)oxJ zoH-i50yJweun@I=ti15&gT>7Blu`AR2noo<{k_3@Ty4J`tpC`uN8#R&6ir5^-^kB= z+M|ENtY1wd6Chg{pd=w%$|l$(ah2KcgF2e z0r~yBU}9tay)E!`=Km+-_Pe${iVwffDHA|>_*--ObP@g1wm&%O6^vh*IRLtBOBtK6 zu>bY3!Sa|A{(W<@u>a0s|8y<>(kSM~)67!e!NJ(!pNE;*Kj-q#Pca5SQu>dz#lZ19 znf+`(B>?{U+WK>Ie(cJ>u!!X;tMl<(WdNjR|K7y?)`|bWjQZvI1-OO)(r1S6Cp|MD z-Sjb45|G&XTL;(^wD>V`e>dj%pE2G~IO&H4f6jO_0Lrod8{@6EV7(-Y0)A6co!T5P z&YtDP?q#vkB97SXSJ?zF@dCq)xPI0k)_&Pj>=yZccvZbcvgu_Z3Is0&0som!C#P9i(t$eRppJ5O&%R!`nvF}7COqw&c9hoDHUedjv#e!{?u_wk;CDvtc7B)0#I%x;6u6r*Kn57AB-76x zWOsF(3@uPH@-DbmLU8&@H!-yHQ8AuM9Vk^9(>rprEg0`|q3^VbE1SotUWR zQ)weg1A|_E9G@ouFE9>UUj!C}FC~I}t%Qbp+M3CAv$&GD z{Xx0>>vox z)M?ou!lzSmVC~dMih;JqDaOx0j{9kic<&uwdDt?8o8=-AuLETW6_Nz4!g6ad;LZ@5 zgH4yoP&TXz(j=w_?PYG0*3?-PIKhMi6M}@f1DaD$=*G-FG?m}HNk0TF>uUw#o-9me z2%lL+;r!@thmgVGzLNJjPQ*R5;3WueZ*XFwL*fI%U1P>TA%*UpXss1@skDaa$nl4eOJYpM#9)+a(FuL-Ge6HwMN4mOAWpw{0XeI7%iCUQ#UtU1@F=hkDS3Icgp_?st)m^{ zJGiSWu^HoAcCMsoag-7u0AaRAmM1F_QDE1|<@nCD$b*nB_c}c8Wes(KLvDQw= zgK9nhnDZ2oUN6M=*?ggvHN<;YYwnq0oYT+ziZ@DSM^a*LmU`MLTwL!85@ku0{Jo!( z63Bw0?6<{VntCrx%LYl_?k!RtGhE=W7J^3Y1wQM+_}9q3m6cpb-nAKTIuS79P6G zg6kiSjBYTa8r8@%yQ%TQJIOWsuNe(i#uCh|&baLT4m*p5ww2AS3eBgUMR zRC(Y?e2+wW9n8KvE>6V3mtsnk3z`fAg8Msuu3rmAC_!!lcxt(wsfpZA&-tZJ?FP>l z-YS<%^y5r;C&VA*z2vRs46ZzmmFcROVE{YU1%?2!!j5|O2Q&cNPqF34NcRsZ*1w$d z|6ZhTh z0#(BoGh5$Eza~(zphdBWh|Xm-^-KVMMcENsm&*@>{SqT^M8iQQz6#fVCL6Dxc_dUd z(_D+n-qn&j=Tnmvur{&12!;*ARUvJ7t`pyk$an?WmiBV^?T5yWC7Soi4G-G>S z*>6>I`$oGqdV@P{am+i58W$W9d3^}A6|PvlII+w__*C`-}M?kK%DdOveNnT^iw}9Tnm5e z0NNS?`6fB``SOyab>W#yF|_q$qNq00u+?3e6~a=nrWUu4vsF#KMW@#JLK7bt2GHo# zw9y|dc0hr?e|dS|>%jpE`2c9D@5Iy-WA&5DgZ*hU{4JHocS=ja*uloh9#BvcA5aes z@S4BW9zI#}W9|QY3g1tCXnrbo1dz}DkOVR^(E|!n{dSG5CtLobP4@fhxu+rgC1zz~ z`M2VPAC#qSrs)xq*tb)D|+iE3{b1zQa9f z90xkb<}4kepenckzCR^M&%|5cjAv5G9pcRg<61h-Ua-}-gU`xMHn`u}Wv+vgKP+FJ z8Mmf*<4sn3UZCnF(ta+WP~}kEjytjHwU2US%Lz16_bW0^Q)nfqH%Oxv(K%t{!ESon z*`XoT4cGid%w%w@=OLulFl~c!<>JgJyTVt>zA*9`9a^eIPO$>gJ-n!D*peVn(9-E@ zc1-3Q%nKX2hb{Uw-{s@@p%-E@P{`Q$PNv zmujAPY*{3|&<)_a7{1vsodVjDFA2XG#bAi3%|VA6;#IErCK{^ zwTXF#VNE4cE@p|jxEc_h8X<4q#af*ZidUg05<%()9Pi(8d5`x>KFOy?J#iCpG;b2# z!5}R0BI#{FJThxI5_;X_skI0Xrv{r>1Z+hOtTi-QRazAU+YRe7WnbnvV(l#A*xu`C z7_x{^wd!_6v^|p$f3TNqv=H#sQ-=}Q`Wjqn^3Bq_rT&{{Ra;kX#K^Ipu1s%PqMrpb z-LbIyA8JaW200Lx`R23;EVKo6bMw4gXRX4-wN%YYOKe&=U|q>e<4nZ&Ve7RNR*!`l zR1Z+_2nRt zHy7F~XTC5qpmdTUUvb(XZIzy+hL90=-P41`$;%RRwDpZhHZl(G{&TvrvNpwsPMc&v zkzhl7Do=CEWe@6!Dl_@^q{?G6g%8Ah;21z$H^GO0bW;7~0zY2MKTfHCUd!x%pELho zN7Ju4bM~Kz&cEyX{;sa;>6`uX!~i6L{@WG3|6OqFHCNqYgRC055h5(Pq&UYc65;*)7=w5%lGA%_G*ymHr}6W4nar+ z>QOe8{EWt5>!IG&LD5#R+p1N7(E4t`>vC@^73YxTOLZGy(+lTP>ti&-5e}tVtw3h? z#H4pTU-_>5Rtj9BkwM4uO46T1Bi0?0s(^HO4x86p= zT_`bMvEt3{^-9k{>v}5}%oT*MIOnyPUpF z(|>rjiy86^8y{7=@^1AilHv_8w=?#!_O_?Ga+RH86`L0%TM-jYSiw7^4kE$)F)0DD zBacgSh89)*B0d_BQYw&Ar@Bc4^G`xI4mNo%92=OZ8=xCK*KtMquxuk$bQakTw;y?? z(P436V_KZ%^Z8nIMdB9LusaqYltZ;Jk(f~ zr@F@4-*{&gaMl}tMhZB5UDxeoU}~3nnLeh^f$P7L9fsX}_0{Z5le#?tao!3t6U)vp z`Tq2))mig~F566RTWPVP-sKzk)KUMHti@7+7emY7Ye}t9dtFGb{LXLZy+Zj8&)5eq zl3nBZcTPt6SFy;Ynk}t120qYC_+w%<`D$)SWd~jIjo=D>1?p>vy|G0o>)hz+^``!o zagwLdijp>^-$kmOCp~c@~gRAlRPM_w}{S>?2Oqf}F*n1R)r9)#0} z(2-28XmOU_&D(gwPA$5Ko~&-d{m^$HpNt)}A-_78r0w-uj3Uh9Ou@<8r*R`%QR5_^ zN8(Fz!@Qy>Walp)Clb15E&9Q_eRKK=(toLG9(8IDU-?dqF~27Z?nK;EV0>9UzF}d zs51JNE4evn2{a0wQ3{jgP*8A%SC38VqcXBvQj#i<>S|hvSoj`C1m`3VO_}5<{|pi2 zI0x5EEsw19CnD)LgB1_$=NvqW>KLazzzcuKaPF=Fc z7C{I;I!AFBkO7Z!iRRMO3L=&XB3y?lvyHRO6{k|ylSp*VRLTO?@o)Zk#8Kg5JRkuK zEKjSM&vWMZu%bH_Nunt`n)MBTp)Herq->ID3wMfyi#cKDEX?I!`tzMg?AM496RfQPEzFB zb1caHDTQI-U~xUtJH&~YD}j+`zR%gx&N@S#VyjGA%sf>hI}(&nWK<{GKRZ-KjrVyJ zNe&jH;i-6*DXCNG!wiym7uS_pYHR8FT7-CcTDo=aV7Op(eoR8IGTl5EYTr-{fxP6J z>&=^64Vr`z+Y66#BC6tbm5_-8e`b{`gXMMSuic9N$W-I^DUy5MxCdnB<%D43cg zVw%k6ZB$3hPa76&(w~zSP_jzjdN}JQVUaw$ENOL3q(eqKyWz@{TaA$XBrcc&bx@S^ zZCaZ(a?D#)m7%sAt}S6Ob$Wto*EnX>AZD?;m0HLa6}<23tN99XYb_n-TA(6H7&^$# z@DJrU^)cJJ=xYy)Ifm9~BUL1dZfK|`^2`yGP1V;e&m>89{X&hQq~E35GtGevfpPSN zo`lc&ADDtggOP$4HY@%MQm44hoOQ3BZi@ExA--Wb;UT(J$Iel0ita{`W z>1Sh-f|$C<*&xOWSdr(cjVl|R1DV_xc~uANGs_Le=8OI#^ec7hB1PMCs<@!K(*tn? z+FIJ6e#uFMg?JYF#tTZ&>c;7HE(5P3m7dv8EbHSN2;Xbvi(V&EAN6FSPR#N_RB`h* zXH<=BooZjj>wuVs6XlzOY4t zh+RYCRnWZIb7*;S;589K(rF@;y+{Ku$Z&h#JYqb!JMLgau3@mPk)p2;;`za>I?v3Q zUlhqtHECvIMa@Wbmry&8(e}p54KeH3R`z%v&!Me+l6PC%R4}W6@&SDrR56TIM{d=x%l>{Pc6 z*c@Qdin=ewjIcmpcHP z<+;MeP6-yfN;0Ea$FVmKlBjYLHJ=u3zOxP6sZMKrg@gZV z$Gr;|v!MPwnAVV)rwduDe4ID`{7U`kg#}>gtCYn{x?}> z7BLU7Np7kXb<;2-IjBWKTWZC;#5gYCV8y#l&J}7{_&wM5Ve2JuI_TKb^hWtG)&gs$ z=uU>_u}U32nl|oZu!ayP@0Y0(*tw!jBpan*@39vP<_U>OpC5_GAd4<-1#PQD_u$!n zyhL#mX@$d9kkych3u~Mxe&2_ZX3zrC>bI|y-8_W+?3*lr1J8c5)ba;t4N&U(f6{^+ zPfjuZ_Xf839N*<`fMnPw(Dnr39w|d6jvv4N(=P{f{rIn;HU|19Ncfke;gg;J!9{Ol z>GsOT`q%h~`FrsvrpFr1fVy43Tm0#1{QkaqDrS!z&;Ll?#sDbu|Cl%YB-&yG)X8V~ zUb^e|(9zH6{7)5Se~NV<(b2C*jP-jV`tS9|0ZK^#Li!!C&(j+F`y(dzeM0|a)P8_n z7J$GF0K}O9dI$g@V*#Xj{}vE`TI_${G{9v3dei{E!6V!Sq?`j-YQSdtJ-GXQr~EMO zzlkg9MA-o8h)?d+F9J*7H~tS3{sLpNF>(B?&e%^~0;n^dFs6qpQrN7A4z2ynb|8v0 zR)L`V#+hK8nR*lnI8rA5*hGi$THV9Gy_o{!JBCes^dR84ZGC5F=WjM96bqh?Cui`3 z+e>j%A0oojh8Sq(i|{gIywf6OvcyRjK6(quqgvs#E~ON<`gB+{&yw~5K7AEvrEF1WKe*%LRXW!{&;dm9LyEYu7IR(fZYry45imPE^&gsYEjZ zeQKtI*HBjS>L|i}QOj!Aiuufyv5piUCR%f#Ws(4_Uz#LP;;U`AN6HbAoL1UfuXk}h zC0o*@<+R}h{j~JU%*xL(TgklkvMvTYKTj!OS4GH5L90j8Xq|mhqd-Jq3!*m89jZNB z4c;V?v9+p~iOJL+!BXMO=%n@P)0QvZOFziN;o@%5kze1E0vC~>_^h}Lt|e_f?jMi+ zkc@^%_JaGRsJhGY_2vB6;Fy)DnHN{JEkKK3!+X|9yAZ0hfy^dBJQEmvx;muDs?km( zOonx4mfRJi8-p?U5{HP!cA2sq-i+u}8(eUb^AsO7Uf8X`;>dEaKc;3n^X;_ zW?QzdPRD+83-fC)7dH{Z!WvOR_brx&Xptxd(|*5Y5$p=kohh9 z%v2t_>swGXMS>LCmlBRQfj)u^y48yl+KjlawqZVwNO~BEa|<<$gU5M}eP#Of=bzk9 zJ=?r4^;}>&Q5w|dJl1Hp?Iryt+ZNAV`%haD<#9$(NqzDmbJPn*{F*OA}J{1 zO6*D@yIzhN&%6}%zBZ#5tfkZ}*`eVyEH9 zhILDjqfvAF)>IvBRydfV2EnUp{AwEH4r$`CH~~YaOz}0Dyh_2!hIWB3s8&rx@_>3s z1L6mi(^xS&_)5!6AJ_wTbNET%&rIL%F6;N88@*mZzNrzdJt>@KhzIpj$hh5w<4fd} zriapq_x-RKNyUOs1U*gS2LY9MXo#7`!d^d3u)ezuYtN$NAepW?Jd;``vUizW&P%RJ zi3-}N%)P8um)BNmVu&lD*wN}*S}L=7zNXRMOj*quJso7F`bHFb5mx-{@|bB>%}uXFg{pxrT~Pq@GI9}Xw1tyeYNZEnXZS94!=7&{+I@p*4Fmb? zQSIk$yW2x>+^S?DiQEhdqT5YZex0aX%uid^FQFHwxZ9lb)M7y=&R4JWeeM>NPc!-h zm%kiucF)(f<=3uNr8D0fJ8!I?QCU)0?cAI>$3j}>+yNh;ERF=W8pC6-pDHIMRN>?^ z(2SzhnyHzoQJi(3N@N$;Mbkts|>xX$biqK?6bv z)H&uzWuZ^DFzI$Bf*I?nFf_K}w>lXl!gyfV`r3sNr|qK^y!?e37)W=Av|6 z|F-f1mu6o>Cr=vs0v304V-^ClU=vAk^dKH_B(D`5BZ+@afdtiQVM1)n36U>YEC+OW zGVSU`tjqKFS+F4sbbfT3s=$vxi%9t(n2YO(xE17`Nh6h=`to z*^U??<7Hf3Ti8ac(k`AiR7(Sgz4#;VuXx(>PD56^!4S}%WzoHcQxP90Mtr4L=6stk z6)_AiZUT;l3`ar94!N%c&C%KW7?uN+PjEIhkgzeUq_hp96-tw%`(rixP|ATZs=xTt{SxwGV)3 zyYish*dM@Z27uV|f8uI}e+Wz-!SfTG{)zEq_+Dq>ze0I30L1CP;yk|_^Y;*ql)l@q zI7MbwfDZi;qyo|jo@(m+7Rvf=`2S-p^HaR2BaG1sXXJriRN4 zn$##+4O!2RY_;cls(42`KwUDvM2Gd-U0dnpnZrz)N!(Z@lbtgG_d7L&Quz;1ieW4} zIiah0P-v=djm!>?e!y>{rBz+XHjRtCxv{iuurC28%;Aucn&p@|nDm*siLfI1@w(zPEp> z=L(XHzojoHjxF4IF2F}t`;G0=W$g{$>NW^IiUiF)!4aVACy>+)kY@suZern^R_f&P zDv^{TmS@pHz8W2GwS=e>KKZi~Nd>y8Yg>eh}qm`I1{k>EEYj6hJSuGu=NaR(Kvtc30`{rb>q)w?Y` zyi91u#4AXD;~KxVl%_7_IC!OINK@^CPD`J;yu8WdFrVHF#Do7OpoKW5H3sak&TYkj z62!`0;b;UNY$KC4@CdmL-0O7b*?D{L7}yWuXxahCTIqHD)P4`vKFfY4fkhJ8a2~kI ztHh?Lp&DS->WAZP5L+UR-L&x=6eWQm=@ypRpS0yw$9yRQzQHiqqBW%|wxn(!@$P28 z$bk?mL%hzg%~KFYlI!erJ;?kFog=Ei^x`O|9L>NesZ$d(u-FI0YI4e1c+Ml<5}lpz zbXSLtAs?UZ+3az;;T7gkhqRI_H`5N~%|U&s=f1&vin0X1#U(>mc*B zBspXBn{Q)ZRD(pb8u>uRD95308NV4zs^q0 z+7o}{!*zSx@}Z#{V{D<{NW^Ai>0FTo%oMM{%a#}7x}G0tESeaY=BF~}j92!J>r1w0 zH*s@tOmnrbwNh$oyeuE=tUfN96B)0`;kqy*18VUSN3LZblmO5+QPkT$vyeonPrV-z z&f`%adM_a~3TA3BTb|b^plZ}?uYlJ|#Cx@yK%OcDr6tV)dd#0Un#moU*Ki}O=FEhl znlWC`ZPSl36q~vqel#{PUC+qUSAL%=EQF z&GlO^gY?@L#Av!JE5}DtQn#(90etCiRj+rW=*G2o|QPLP@>9vtV&(y3DdEQQtYr|6_y~l!G?ltt&mpm}0?MGLA=dyev?iXT|jl=lW9hZU7!rFMg zC(@(w*SZ~fx(9N)FM!=%jCg0VN5Sf8yQ#k{SDM)ISXUzp*@j&O7~JP##;n0n(8e0U3>e#6|}8-z?7l zeSrS9O@EC!=%1RderKH+0d)ughW$3{1n5}&uUY+nM4`MjvsH%TQ2Nw$R?k$4DAA|4};agBybl_n5%na$6px_LGWnDLWCqt>y^OF8uT zgD4zKciZVPL;@=H^~GJ~>BMeMD^nlR-v9Icx&?&-5LwV?>#dvYMh+g`nuHhpXV z(!LKf#i%RIuBNADgWiVWCFbX=GwTb^YbWiCwf*<7Vj}&*C(+ZIC;Nlo3?Jf8nQoTu ziqqsGscN`<;7A?y$HCNMN!8dN4!KV1@_QH)8p^AdEq4#X?^+JDo2k)9)7b(2Sl%fy zWF{!l$6+$>2+0SCpwd(g9}Fpf^cTEy+Z^&<`F%Ec9Hda8IC++ z<7CKXjzFxQ?mzYf*2V{T~3_>SV; zomZaI%o`hZI+eG$t&UuC6G{~1{mn|--At;rez$R*t!MiqIg^k#tJAz4V<(mhm;45x zo|gd#&H2OTi+qW1zgV2pf%ndOyl> z@@gyjyu8g*#o!!m&@UXsI=ZLu)?z;NBhGjbKg+5;og(#?VH)0nc#lUpS-a$bJO8CR zHB@4i_y0%QcfeB_y^mM2vbRE!opIgeqL96}kdeLj4pA~%s3et8L^P0{NLgi+k!Vm> z8JQ`{?0?>SFWrm2-{0@||CG;t?{lB$InO!IbDr~@bDsB{Nv-A=oat7hw+|*B_1|wx zaUq^R{(Nu*Ytln2gPM#YnUuQHET0>idxm$$vL#sZ%Rlq&=@+`1dhXt%3=Zkhl=x%c zVtS_9-}bAVX5$$!dBc23UDEWY8H~y)fI9UKIw6@+b>x|zgLPpo*~4Wf#>0vN$Y?ih zW5yqh$xcxV`>CFsp(7QIuFAFLQ5O_FL33!Q*IO3h2jAX^Eru*TJoI?#z&+a&Jy&!p zmUtz0((Y1c`^Kt96He{^fK_0!fCIzFN0*Mia=M3yUx3+kwpx0ZoV#%N}XvI&$CvmJU>oJ(~C-ZJjYN6 z!{%?2e-SU3V>Qi;**jeGS#D}fr|0={oowiy2fx&lN;}Nb4640k;0#~gtI5U$`6>Lq z23?@FppYVQYyYypBGzm4BbvLNZ1w3<#3+51ohHplr;ayTzMyUK9A)CSBlc)-&}i6&FC^LV z2rAmAd6%t)x*uKWjgxyS-IpSG@xI#`!Tm?M%b#w4BfiquvxlZ8^nrljlS8g>Ej>?{ z7YZJW-7t^kLa(|)ukU7RqiDM}Aw`{2FG(6dFKZOb2N)m{OZ-;VyEH1iLwAT>eBr$7 zniE~XCx+JjjU=Z8E2~MKS=4_s`femMwQqY?yZyPJ~~o#_jumUXe~lJDj>w^y>zroKfPE z_PI+!Uzz4U=Ut_7Mj@Vd-X1U&FMDqXaJnHkZicT4 z-F>6vV(Z6^fI-+GTi)K!)hEE)j~kZvdenU96ASJ?C@F-c)dINN^KgZR(F=SG zS1C?2DW5S27!)%2lAe+Z|JC(898)pfvhrDe+I}=8|DMds!JG(ZcU9X?jT(u#&gjA` zwSw_;6nbW%fF<1@A<#Oh@q&@6}AE zI_9J}UEL;Kon;$^CoKoRPl?N|Mks+*Y1>KDljB`|J^aUy6-n0c%N!Jw|(Z>Mp> z&rQ?M%`&vMN@pe`*I4uMabhB&P4dz<7kk121dMp19Un z&)+omL6}m!##Y={YdC~I=Lz4Nr>-p}uIGL*4jD2ry;*%# z{aTvg!O7{j_v4Jb3K=}RKb~+kYWY|^Hc>t?Z7DCFdhoSu|Ht3KzYUgEfm?I#DJ**_ z6Ba-_U3K@zKr5`W(TX;(bbQaJ(pRk=;=NPn(>_#RTVYruCJ4PCwW9={HK;;lD?tBS(lvL zenyOL%6uW}g7^F4f}&$9Rdmy*o(O>lah;mA})54mf-g zoqux*&O9b}Es@&HvhMl(9)6EAM*9U~4l|19M>YiP8RL(>v&ZI-|Fbf>iC9x`F*Fr?w~Ti3vS^L7S-sb8^?Ge$UqrycO>}y(_vKZMqi~!;(%L zcaFVq?2YR33w{m_FD=|*>^3@(uSBkqOIQ0m;8pTH#u*hFhf!m- zn^AK*^o51ey+Z6UBbR9B>})&kD#p*uhK{>UFw*ZHijqy1zyFat%>Ncy($3z_k52n! zi@z0-)w(HAR{0LcJbLOU2U|8Y@mct3Ki5YxWviD;e@4+-qwT8qhk3?SRKYV&juDQ_ zi~>|`rlNf%t})tkXKu?NE`0mbew(j>p09h3zgY2jmHUlXw2|ZN4yU+3pJ}v{`&>iq zHZPOg9a)*q6YRY_bf($xeCp4B{V2KjT;+EMm@SxsDZOfa z)C=+p^U6;&S`G{}>EX85o%tB0KvBvB!?fOs$j?%TSSJ8Bf_uPe+ehaZ#enA%3-p)xGn##Ce@Q#D>$_w0U*Y0??^VA~Pj^!Kg~ zi^l`hBYfswRB*sX&&LN2{?5IEX`8CFJuz2K>Ho4Vb+@vZF$sgrZ-pG0t_kN;Bn8p$ z9#P3LdK;e%{CX<&R?FaH$4-(%sMD?iy*F-kw^Uoc-(5m-(#)EoG&s_NjOtQtSp0O{ zVb;o)(Km79Y>jx+d9EhTd)LwbDpdJpG$V;E^XMYf7nT(4bErhgeVT zr7@JUWbjov_tY5veJGT2#pb?@_`oiqZscaaYo9@-gYW&55*UHH_B;Fm~FGI3=A zVZ$hU!ANA>sb9zBNk)1KIt>E#gQT?WRYG_>ZT5?cHIq3@)zo}*yH2jey*Feu{))q) zx*N;NXZ!o}RK4S#Q~U|m=eK88W9hDwk?s{pIBf9nVDUo>nho)98Je02$r9(LK&t7Vc zx0I9fi)F^lJx!%Uv9HKcZ^N8*3nR^(nllWL5#^9(PmG)j%{&QBk zc5IaU%wtlxJZ)ryGi=2USgARlX?`3xi+*q!g}&eH+IreLB`RJqUSCh!;X!VTM$God zDp5Q7^Dmfv6biJSNR)liQW~ea-&?%O#?UdY0k66`S7@Hgw^zZWJqac(LmDTIsq5B+#9NLk)^;`s| zVV4(BCSOY#5}TNBhVZk0tPg6YXJz4>$g=&$!u8PLLWcGdita5RE$0oZXLCmqRlb~4 zulV8|Qd|9{U-n63j8bWKjph@ctjNG@rI%?bpXY{c7+HQL7N-|?@!XE9HSX}+HGjp1 zRhqW+H)rWgs!DRy3ad*Vf!3L04LE}uZwX74XQw5o;DR@F)DVM^Rm3V#NkXNcaF(#%o#%Q-#p4(z zk2K6x;`q+Fyo}L~Xw6YN5}3lsi^*Aiai4~t(gu4Rl||VH9@A>lN({#rQUE z|Bo4a-D43X@zK&rbk&cqv{=22xXSP+Er;yuK%?!+fG2U067z57tmLmYEijLasvZ+6 z54fxD9YMDL=gtg@FdCJRnPr!Y?*;n#4{)g-i7M9(tfdg7u1kq|SHEw$K7_+5;aBHl zoj=>zZ{$i{r>71Y{XX5!A9+a1yvqHVWuVi^$zhnM>+__B*nQKI?UpOQ?%df?);#$= zQ9Ez@)r1a?q(@h@S=>)}&*Yq+Pns0^_}KSM)(|GovefmeQ)3)mY>V6-r75$!dm4?+ zt#jT!w|E;WpODj-GH_PG<<#CkM`_GE-yhBxeMw1EQ?YFQA#1Vs@|*D4|_qY7g)QLxE|GI5AT@@A>=oxyKxG32roj=wZ3$s=um*OufUAh{hP6S`&G`XSZftVGF3HAm&~|)pY*nh z`VojSSYFB$5O?cZbTtg3zh+_fsPHgJs|B^QV@=O8&8Lx`KAYDtt|B%^1ZJN(M*nP&*D95DI^`>{mH4?qAceIoa70L|jxCOyPtc2X$Lkqt-qYoT`H7t&O zzT)?}!Ybo)Yys@^d)dH*=w}@LwANO~tipn)Uv)4_a`Xr9U98-Dp4M!p=9ToDJ`+AG zj@;es2jS9Mt=R$vb3HNeZ`5!(nP_Mbo$HuUoswUAi)NbZrmVi*yo} z={%rT%AESZRZj{|Vz=6qLR;>2n`U57VIBJ5@+{q%tFcEjl}RREjSNp8EPu3kGNj7+ zgt1}l5!ow8p2};yR!9CQkX>$(gw}(XybTx5o{h45%J?svwjd zIE^lxn!WfdoAXW&fChq&4+y%uSDOP-PK=br599`_XR~^AVPhYe*cF#v9Q`Ff0 zy=J70y5Gj7X%;%zhTl18!His+pWF;|aZFu&+H~*o`^h_CVrYdk1iXH?Bw?S?#3PJKyhjN9Sz)z+-{YC8tH znw$J-$M{{om%jf#`ZFM6C92rkG+DD`H+|9Rhr5PvG&X8GaWom$3S2?Q&++koh~QMV zIDgc9;HlpEqjc^W+a!IEBu^aPd^=Ia7{NP*x=?zw_k$Ddp|L&ItzCmE#U}ED4Nv^N zCi|8;r}uIm*VlN>)k>O!>@U`KBG)jg4Sr-A4WGGzcFvSl&6HIx6D;ibz58iT%jv{B z6F0ZFN=1=!JlJNLd-JlbZnNZ1Uz-NRGZA-qkaUIO2HiZn?>ulPTIt{WAA5tXhnxM(>VaE7urVIQ8)7Io__R zyej&HRnLIYb}nxp+7jJo#;)NPn0S*of9rYsM$`09 zFYY@wliISlJ;9pv^^s1xSIsi)=A=wso$vGcER!kBDPn3aQERBHnIm7->2t!L7|9umG4R%--A6(-x)y^KtZZ^>%dS*K7wF33M*7qcBG=2k>A?15?Bm=3wW66~}b_E0&8e3|e}F z+E5H3fq|)d*gE@zSLv{ea*B%H$1TL*;Al!Q1OnXQD*N3iAyhvVMc zTwisBV^GA)fq&%$jIryC2<*8xP`3ZtKO_>#4gE=QqrpBN^gHwo`h@<#*{T1dzcu_d zt`gwad#5?>_rE0p z$=9R={MMccrAI*Jfj>0(9r}byTfncf`lnTd(u!;6EU~-aZ(1$)poW4{(sl5;c(m*_Fq%lw0aGP z}TyEz&=*&BV4Ebaq zT_d9;wG@M@Wl@o$AAk-(D%+66#96ygUb z+O@EAu(7qXad2S%9{A%|fZw|WO;L6KrdL{enxevF=N>Fya$M$VomEOudpKS`Tkz_Z zpqb;F{l}lR4g9G#>tEVcBi#3A7yOX~qUcdUUz&?os*BgRRBQdCNjK6BGH+jgc+bYg z)%HHg{?|2Gq}NM~eYBhOG>=f^i;8Q!7BiW7rPT^M&DKz?b9T{8_ug7HjD&(6cuH_&n23H|TJH3aU>wsmg=PEI8@ zn7?MY=6yE%Q3B5k#x+Q42!|LC^8L^+YoE|F;Xmw%1ibj#*aiKz#sNpOdCXd)$Bk8M z-_|~HRM2>WD;44f!Jt2AyujgY9G`F_0YtTij~koTxc+ZGK`Dej8r#;yuIInTrKTXN zv;`q2K|JUW!a7F~RVssMP!&X}xPT5D=IMhd)Ek7Uo*-ED0^z9>2wndMntC9%1o0pg zc&>$;hPXf#AI4%M&A*z-SmcV3pQZBH0m zPsz&S>l49KsY|!~+fJ??bT)hO;hgQ!`500I-wpEII^;{nDr-I`q%Mpu)H{$Z@S-KG>B>MzHix{-ucgcF6SVIRnX6WM z86b5JF;_ zFY|P`eA{*N>zCz@=1{e@cGIW{weLpmLc}$^U395X?gp) zt@*WxXiHmrOj~F6@LlpRy91BDEx+BUf9Y!aRkv5oLf4o781GI#7I%SZ=!L|T=undc zOybpXQsgjO z>u7D)CPS(FT{l~IPFF3p+CMbwxJsdcZ=3Y{g}65=H|}}#tNQw;UUna{`W>?zQT>wt zg=1+;6N7f*0gY^4*GCQG8H+!ovWyg~+5=MPJL08ZJ9?hCm`(V3usSCLq__@`_*S_g zU$DxjSk)f;X8L?Fn*sq_UeW92|HaHylQmS3+dv9Q>AL|kJ%$ixgzA^PrHd;n-hu}w#N|m--41gP4 z_H&aLALPE7a+#JP^}xMZp0M%A9gKV5q`nN1y`B7RFe9FS!lM1|DJCTqJJgw*d%ca1 zeKF1!aG56ChtxVP99i)tpCac~P^?zTMby)r<=N-oKjoB^i^J0C9}6kUBj?3tBd9dcMc&q2Y; zlM*!&Hpd>{!2`=Qe{o!wv|AIIbd#s=RSG$Cy%+1Ge@1E?yyxX%xsWCg?-L%}VZu}N zSId_Aq|QcqF_68MQdbyyJs-S}gDf{er$H%}v0L-q&>8B%EL;2RkjA`dw1LHMBMyx~ zq0z=Ye2i3#?%xEzMUYBUCYsgoB#QITUZh#cdXU2V@TnH%#HE^BGF6KuZfc$myke=_ zga$=V2ISlyTd7GiaWs(+A64kni!bK8DY!HG@ODXCBMPvDLDu_xhs)`^9Qxa~|9oUF ze8)R9u-AQ?NQ4uddh$Q!>>Dci1*wX{Na8nPv`Q$jWkQ$mDndbV$-KbeoTL$ z-naXkRdmfzSQ}?}?soYAPZd+jB~F7gy=k^2!I>kT#>ZcaUq~uE>lJ>ZYxCUfI?J6kC6ejuIj~Ke2>q=Guve_ zC^({RD8>@$@H{NNiwW(fL$!MEi+VCt;KjS(D#iyUH*A6qj#hSwt+d-w7VV1S z+j+X-XM7X9<|Cy>ABhMPnw+Y(h9>+E<}u%;o8%n9Q^~LsrIp3Q_H0W??hCRb1@r2) z{qnTn;&<{7zKI%kf3 z4JO})bQhj;Rl9y1><`hLK0&SXY8SbvB3<0+w7~|t!_ghwZwIfB3F*Dop0Nt0I)1Kf zuk(8zGJi$Alv-t(4C><;%S)cMGHRVu;JCRnRioS4u4g8fGl`e{{B zLDfSMUL`(7ul=PynzgLTmvw^WF4rJ2r~(Y52*j6{dKb#0uZw?K~i zt%uFh;{|ipdv2N@Fx9V4tEu|-Y_Qub+WwD5s3sytgSoqFw{~YFZ5Y{t`>8Im?;by2^Q!PeCS%PCu!6du$|Itep#cXog8qXxVf|xDm}a*-`1> zDb1f*;U-TR5B2b~taR24p46Ckrs8~L*z}?{w6K8n#i?y~3@Q--Y%+WyRF=~%q$etP?T_3@CaS(*nh3>Rt3E~d}WaS0xx5ZE~w-FSB2jB`YU z(rjMdKJWYwFss(#mgFO4%`;4T@=xCT*Xw6iJ4Eg}a9v;1BrNg8VUO&^Xt7@k4Vg*d zPLv*zL72U=5zP}%LOlLd)ENfG7z)u0ow2A!T8fgrV=N02Qr&*>ES;wl-K3nR2zf-7 z!S2S84W(Bru?(?dhIk7)&$*8hG`J%^E+itAD0Ho$L!QIFgh{lWlm9^JN@0 z!akGl~GZFqz|oc3(bS}hjrvXuuA4Cq3|etea!Js#ma%D*kmztanFUT zB;)i$K1E$wCSm5X?IoQL-==oBeD2}9-+wsU99~u4LHcV~LwYX!_T3#}$EF&t!Fg`e zk_fhQ9JVIY?K_p?o$mX{kj6lLOkDonsr1|MQv%GPWby-b*S+q^9c%mO35gr|HlGy{c^|lirHkeZsn5K&W&HK+NqX4*fYS+?9DD5_o6ZEA zDY0=Lj2JjS;Q6QL{r>0jPH#jbqF=54=F7>NFbF7UZy4zCKQ8(ryhK1FmJ0D({Xl!8 zPy0i%!2;Tr4|N(pJNCQ&+C9`}N)j9J<5vHk#f9`0rkJb9v5G)L!}!9%!Kp;M0cC}R zir#G=&km~Vq&{=|5U{s4L){Lo(eUWV>A=MKQt4jmrN)@07SR->AUa-u-~+z@?d76>-ySx91SI6j??uVE|T z@G?oO^u6Pj(svflwEXTzFD!F1@0&z{ZG_SCa=4cFr#$gWeis`-se3lk0n6UKv$iQy z4gp@;+5w6V4hpsBm`E!GLtgtG)wq_(sK@7ap@k*m)PpYx!cCf26PCPORqYHz%}s`7 zR_n8JKPjk|yz~l};3PlvQdc5>e*RqIE?Wf#E?LKkstnbMFEn}2w^g?fE_PzdYukga z_MtVxb%{tu47{5=*y7tCKZNM)+$r$W%>~$VX|148qwgD1Mh7 zzjk@9{bB{Rn6n+dcx~%B`<*C+gIv7^x2E|hcb(1H%c2>?6s9%v;gOOjKeT1y?uuy) zDrp&8Uml1sdc$pV;7aVR4zumP67SVcH)Yb%lFh!^k$v*v-NllWMG;xf#F=7w3#Lxb z_sOfBi_|qVReVw(s6Tc1sleJq`}Znwd97_n zO7o@G*Nv77dJd02x;l(@+~T1_Ct5C&%x;Se>-F(Gxmv!1T8x)(iDKCH=!#{9vLu(| zxmttF!2<*8{JT_FZ9A;UDzs^W&$8@gvbM;SxzOz91m3*Qk+8n4KD67e4ZiR7bo0!W zhbBQHJ%MwKq43<7WN(#7;*Z%q&{#hmd0CTPmlO=Bkuqqeo-& zCZ8*Odnqc-K;;>F?W1E+ur}tEJjd*n$cENKCg*5O{KDYVl5{#|Niq~^q#o|soweDT zg{djmZ{>#Tm%OJwvQOw2^S8P)J;F&h4qmT)ty@7E9$+z?GTaKU&w*)P9LX+41q*#O z>rPJViNE>lZhjA+sIa)67@~UT;{NxiX}N+Pdonz>Z1(zvB^1sBzvybyJKP;tbd;i3uUzOl{;$u5zY)7y6MNQo%jo0UXA zd(;FjB2f`Asmrbx1+#r{g@TPQVE@Dq$DqOAZ*)qIBqXaJ$eesfL7r2`$W>JM`HN_p z-FW2JfuHV_ObzDC=_(^(yr)Q}J_q^?4=kCF|8_UIa>7#MYRTB6ZEQl`zS~9n^DlqX zS5H{7pkzB+z)oG3^~RMt!N73rU3W$cwRY*3H^1b*%d;sTt=^Vtey>m)$@nO7{()a^QUxDBYyLOdyVVM?KmCrB z87Ep%i_bsY55E@QcSP(vlii1j8+$Ey<32a)jtTi>lX&TQxa7(PPl>kihbWOZMWrn( zzPuW%O1(1fGxV79W!uPP*tV&Pt_Pi((ZjFPoA%|RLXob6V<890mvZgxn0HFKt(2pSYnY!Xf4*6FgmGRT=jA zv!Jw&jk19vCNuEiy4Gva~@;%ozr}XP-VMTEr5P~z1quu*qkT0`QfBd{OGB9 zl0uO(lBMeBU47!0U{v1)$9&U~iRuIWr_+y-Oud|bK5X*3H&S3=Ss>+L<)Xuj)j;w| zTF1Q~lUn{TwDdhJJf3LQnp}5KBqG!BL0$Il2~!4z7^S$}$ z4>dR=EE5H#v`CVAL|+Jcvbx$y(DsdgKJxBqNO)g?g=w3@r^?X2kdMr5+bAs^x~}eu zK|Hux*B0QfwkSr82=aUOd)!=M?4`%650C9{4Y+X|?0^L*>-bxyRQLa$nZG=QIo={c z(YaDmJU^&qKlHR|%4D!EoYL~^7iF>fmR_SqBb1EU;YNPsyK>I(ko%&ZIy`M%Bh9E^ zsDln~yJM8!kLa>%FS+?osr^`KajDa0L6* zR96Tul^RD!zB_D3#cBol`#w?mqb7U~w6>O~uhDWyJC1L+jyS@e7BDuptC%5lU$~Fn zBdOXGpX#2Z26hQH%GFE_=Dbq{g*)UVV)olG>RjovfsIjkvTBe#uTOt$?Z>Ne(e(~s; zH<_Erd&}^2maKg<5y-*rT`qQi=tk>E?C)yx8$Wp=DR}q(ea=-C%`cQ^-zb=tcymAe z-DVuXy>IDEdqO$&TcwsK&B4>(Uf5|F)6h+{+x`x|JxDo}bxY%*)7;pIz;~Bkx34!H z`9J(FiT09^yK=+le$a59-baPnKUQ+9duo^rCA)bTZd5k2N&PuVp>9;~uinCXpe_+}!`)v2{$Zo$PzoK6=maB0dGIG3P@y3sieE4v$ zHh=6w*;!TjlC(}XbUSaU-_z$@AxQ=c<%O{}?;Lrembmh)U+eL7p}Lu`RYi$7UIuxgrsa4Hz`)pTMdMsOFkcE-hL+|{UM}kL!ukbLU&0V$LnYZ-WlPwKV z$)wdp%$$yJ;Cj-8+Lt0pes{=>f;VKh>QrY%=zBU!nJK}aYVsfTqQ?xmNz$H^%4AY; zIfT#KwzDm}*nOZ1?Z`Sw&D65nu$rrbfpe@NuPv*RH`T~Q^8nLtr9;uVS5MSFK0v9Y z?%Kd$c5WpjF`4hDVESR9)!`_aJ+dmfe4baG7LI*=b1a~b^jM`f2fJBuX^n$M&-2-( zmE`h;{&vN(YZeFM^ZtlE-{zgPdTz@p-#>CXG?dgtlt3nptE1olb>|Cv7$ofP&KCks zyf?6U=Svd1mqfS&1VPsRa8G}KUBmv@Co$$4m$lEo+}0q3pMOgwhW@4c&)f;Apy#dm z{ri`7e4_m=f_w=D+}64zLYiQ69W9C2xV`QHwz8bSu9XJZuW|+ZTz_|~2==M;v6)mV zAZzL<*!5Bc`(H-b>@0t<*##wTIe;xMZQM>4E?FuB>~tLm*--8vpUNI&Wc^K*3Ih9S zCLm$T6XaUqlDNQogdow%-<@FJ3yxk-bV3vCdx2wr#1Lpub?_i10WRW%lA7>oPS~Z1 z4ZB_hCQ7*1wU*?B2KENBolL+TKYvZ_?_U3Uk`oF_+E`C=!k$~W)uyo8dWZPmYzbpP zO^IKxgd;X2sKEbc9Rp`9f6eY+PlTqohOq zh5#D}Tdx014LM;P3P*Jz3un|$IH{lI=jDYL&#Q9?d5i;PPqkEV+st++phA8upVDY@6}qriOi&ne3A z3z9iGIf5gvL%cs%PJaq}wiG`7-7@LiP)Nj^!81Qt#m#)I%iN1A-;Sl<7gAL%QB1OMyKC2U+faevmBJYcrpIZyO-)$r1J-EPS-V?9sfrD za;RZDhx6b)4g8)`Kyn>p(mx8Zz}HX zw;eDVx12&;t9l7+<{#6*1xC;xo8?U!e(i59=L?d-8L zsgZB)R~~tD1yN$>@a4@tqffi;wVqOzJ!&3OryH6q9kFP3w<=&^Jcoo_E+(sP<=`Q~ zE{mFc4*S%cSdJk>Hz|&@WW5voU9irGrCe)@@zpytr_t+@?_v$^7QF4q^ZJlMoVFRjc zlpTgo-cNlzVmf{~c=B`SBO}==w@=lA4si-v2XyP2Y(nVOT}H2ePxvM$E~+Dv+j{l# zmsQ7Yje;XJKWqB0+>4kCxN`VOFz2tbDLLlwtO4~-+ZbP|ge>vXe5J8NHFnPp>Zn;i zwMrz73-`0>{Yno<3Y|P*6PSFS#iLYPFJ>fL-q=#P<#cLdEz7QnYwU>vlTWPAN^y3- zd_3ZHu%w2WWYC7>Zk@T}7-fp>OPUm(K|5p8J#5nNa#b{0&n8j(Wfu#Q&ayZR)YWRz zbbl*Wv7{O&RkW2fi;+L~>d$po#rhC)zMi0Dw}Vd|=*VXn;swSYpQ6+aNz*gw$8e1X5^d`WAAOmi-)7EdmMgE7I35T(eH)fsO+z-UzM?Ml{FIxi z?{5K~yJ3QYZ zBV}JeHQ_;3Uy3UGeauANB2v#MOg4SbhvH8o502b?mn5Il^ntx}K%u1eqFYp3Zq^Xe zd*+(fAnWVg=9|cI7nd_dZaIfFSMp;KroB$n$xp;~jg5ZbFTwn_elN0=QuSH2bXnWk zQ-77-&YFW1xocHz&yhEhb(rymUqiYyWS{pgKSVrmUETw(OK2=rC{iF(7v$^g>uK87 zOy@eCp{L1tU^QT7R>X6JS?{901pl+L!|6lR%SthZF5QJk?Z_R*x?}crds^@IIV)?B z$Ka*rgR!4G!&dU_7)4NZSN^5@G4usF`XVpfO>dC?Qctm8_?A7}J9uTpc=U-Fg9X*Y z8vaXdQ_6B2?=I1oD8{5&)-7BYb8vs8+QwkJOFO30_x>f08*NN*sv^>|9}$nOZM;3I zyF~`M*e?{)i&SylC}z9#U8j7kYTs}a$Ly<;_`**)_UYZQK_&M35A@6dTqEvmDrT{N zQqBZz??h32D^?!wUimo@q3ss?)9K_>ioh_nWm~alHIgi9sDieNNA`w1lMz8^US~}HXR(gt{Z|A4&GQyd|;#P>ggKbZy}@# z7Zy@Oi-RK_B_)v|5(!~r&z)EYp&=~n3}GE41xmu58vPdpm52?O{(>X{ z2qzkzJxT&1#EG~DLIU=w!>qgkP<)$ zBwl(f77Bv_LLl+dV?p4ic8C`?pBPUFZWMCtE;AOsN+q?vUPM2K&DJTDX+fC!~WgM-Wgh)8<0Bt%FoJq98qmL3D7 zM-fR6f=B=&l3o%Hv<;$o0=c9l0T!A_dMQc39!(^@Gy(%aMAAzmfLv%I=|MUi01-(q zjRfkzra!K?1Xi_ZBI%{2KzpGHr3b=;3ZV(5my|#QUXp~;OG-#VAVTRSC8Pl_NkZu* z!BOS_L@2!^2>l07O(R45%q$&7^RI z;8=P9B2~WXXtzk(+mV>(rZyf|#A@c50i07TgK(r}dwmkqrgoKtO4Tn4;_B6-8LO=sL?)1&|5`mE;u}5tY zU;+Pxdj)R|3jqhN6!$vY8VH33C1T&6TPH+Gf@;Hwq(@0Y?1`j@92gS!LK9Ia2l?(T z-5+pyC}ANDF!p1EIth&QMhA$+fD;)NumcHUIFV6FVBrz#EkY0%{BZ12&5{s&x>Ag_C|A1o{%*sMbNCm*9A;z#eZ@>ma}$Z&Yg_P;CU>sMbM%J>IC+L4ZBpsMbLcdtBSEgCO>}wqFCG zAojSnUk5?#iKRzD?1`mE0rvO_z&asdkDmyvfgl%xpAf8r0DJtLU>yY5Z~Ux)00_JkeqOK+l!V3`{LFv=2z(=cZa@G8;^1co1VB&_ zettjz1XAK>2!DZ~>mu-TgmoYoO#u*JAAFBQVW43PKTlZereN{_k>fRj$3&w+^oYRE z71lA)NKhmEY=Hm>S_wa2_zQ%zjGr+O06{hJbB4b_41|eux9dP~5fcF7`^K6`7%-zj z;Aal&m>3X{Bk*&Fb)Yl?5@|z?q#?V;&mYz>B_*&xyq&H4Eo`iX3p)N{LN&tAA_#y` z2!``he}Ta5flvlA8zQ#}K{mL}bs9Jr42AT?3H&9|Phfn*S>c+9a7ig)_y+At!a?W@ zBCQRWK;`f??SkM1GGY*KL*)1#w+@sB{%%dXe}TYNu4#7-h>?;8KwMO>fd@*Wz(@^( zI$Y^^ATUA%0OGZ~29$&fTGQ?tP)Y&=fOvad14;w83Eo*F<|&PW3c_m_j|qYTP|Y>% zt^rXX5CJ!Y5|M)_0Ms2nLtGPH8n{IOB&rb#v=iXDrd=FQ00bc;96wLQlcOY{83q^| zumx#DM7VlrL#R0EwSgq~@Ld~>NBFQ^8#FFHT-QO0ON+xL;o!nuCvWf{Iv_yY(9y#Y z9H=R-Y#ZPxF0SwA?GR`mAa3I5=kMz6C2nSBCJe`i_E>V@F2MC$|2uMAow4N5DvYGK z3tZgA(bfT23Md_v>maV|Z6D|f&Is@arQ!68MF)W^3PXUd?j0;{?BeRbjxVm^FRth3 zZ0qG3>gWJyab}={f+`AT-=G|VqHG;NeZi3pfj;84UJl~W?RjW^;O!%>=IG_gC<`+TdD}MHcBl+LAD}JViCI3IPD}GjoCI3IPD}DxuC6|;y5t$+AVc=!SfDmzI za7VV6YXInF{^F*7uGqe~Zi)B_qrN!k>G+uD||Qz_Mq5w69Lq3 z{zU*)Y!d<0Q???2<~xwv+(ZDi?K%PO(jr4_9iaFY1tt@lD4<@kPJwICwMt_^tiBN+ zJLLUu@F73Cjt|F0>^O-)s18j@HkAOm(sc@)`qry}2H!Uk5Cjm)7K8+#1QgKYCITWw zZy}R+`2R&Fgi*O~uwLEeR%Fn@S+k^acX34!oIwNYfh#P$1mcR05Hr zi3p&>ST;8+HWc_*9iRhlHkN=56V?fcRSoWM*rL|h7-F4**!V!F+f=~66b*2l#CtzvDlClSW!01L)4#fQRjanA<{E0g8OeIM4HCA(*H(6q-#P={JSz( zf48m+0?D>+ThJ{kzO37<&U#J+ngH-=rA zT^FAiAFNJp=1-(*T5$l zVZ)epeBy4oC4VC2660?nJ~mGI%l^OhOKe>77aeL@+>o}lrD21Rzvz%%tfOx!JdtLR z1dj3FeFfVIw<_a5kPxYuUT^9@&8~>NOVAqe=NeKNu=qu2c7$hKJ2#Z}^-jV=X{Dc<2Hc=33o-m#R6ezGr zyNQCxl@kgDl>zNZZ=xVlJb^#K5`cBhO$0=0-#`Fu%xxkd>hy&D1ZpT?5}OE!RK9@# z%=9)B5GkCn)}RD%o91SMfAw}O{-#F4t+ubLj=(zrd}!N!Lk)0C@&CdH>*1U5i4;xD zA6lf^gioYqsP^k_R}w7yY(gj2F%ddgfZl{otYIQ_5an+|C(i!Vqbe7#+;YHlkxUBDUs^0{c9h(1|8kMBGte621wYNUg-^z+Y}c z|F>3ATU3?sEJ`pHBUBS|bNr9n6xpJxU`T?J5H<<(53NGzU;%Cu`aiS^p@Rk0P3Vxg z{}2XjVQfPGhgKo(n*&D+zAiOB5X*&eT%soZe!;k+`;&?iTgja3ULRE z(wor#(N`gKunn{c{U3c5Lf^vC5T^ETs4BG8xrsZGRtW+L;P6HK<*e|r1v{4?y1U_X8LVR%6=@y1Sm?X0iA6lT=#Gk0c67rYkhJ$I$CVV2@ZouEX zE`Zw~TW=qNC=0YF_`iugk#Y&x{{x+<%Myf2P_h`bt-gsrk$MRTAoXsZnBlhK*2O0X z-vIs=;XZDcZYz9<6SN$;Q6S<4F9Ly}RX$0uEwqV%$RTee*rLkVy`goH2ne9vX7uJz z0kDmY2vmf*QF;A z2TY<+TXaaQ1Y6-l3PWwtBZ(Kf2nv7*ptQh^4Me=qwUJz%0J!Aaf3zoji?|V+MEMVVkO8?#93uU0X#Oomd@RN~`wjS8 zO!~2@ng77wV$Tzo4E!&AFm`Q{pGdvL@@(Z8u^FHL;J;PSg-r+j2R@Y5xIrFV0`kA` zH*a_1vXlRT4+qJjoA?vWnl|)DC@*dk0g-|U2_Ub#B?VE)MMwdB1hn10sR*JjOh|w& zVk-)wPE1Gvihxoq{$G37w%bOML*EVL9~xQ=HpYzH-BMqw1z7`Iwy^<5*CnmpZ}7|6WYFNtYZ6^mrCs@NophEQUzH;^GD{EAwr zbzE;DL-6ssjK{7dQE%XfKs2l!LOZnTEre0nP^p2k*2Z_*VC>3J?;1_Qww?E}fw4Yj zx3vMU=Q2#ZtpQ3E@EnY=6-ko$Lz6bL)(vnIp$10Qy9QpJu*Ru{lJ!@8>MD~AtBFeo zC1a&;KLCy5Ly@Z%H4nifO_acESI9@2s0IEtUq{OH$BMAsRG@_!JDSSW$O^qS58$T_ z3&Y1qx8O?-hLwi)d+Gig+-haUWn2FUp{M?}wAFkYVu#9H&6fTpG|Tqi>iB9g9IcKo z;Xj`t%M{Rxo|;m4dGU(#(cf+Od}J$=M_cgau>_j0TG6#jJm`_c6~b2wTGQWf?k{sv zD|&SQ$f4r?m3)m?2gfI(N1eb7K4Nq&zIJ?Rd?Y3_zFNc@UvlrLf3<=&e%xRneYA87 zf3gPoYOj~(C$dMGo=4=HHqo!-Yv^yV4?Z%xjs6CC`JnAK{3dxR`D%SbSTN03yS)rP zf2=7pg)4gWe4F^Mon9J093 z?5&StZ^4)RS)xa+UrkS+{h(z=bX)%o`sRCV!B5!(SLRYz_(mW2D}9-0UEyo`CAq-P z7iO}R|B}H=_>agpMwAcXKO*0T8>X1B8a=fWM9cnSoLweti4Sx>hqvO7?!Re&(NSI6 zLzy+K_eY&w$gv^@Jr>r5)Dy;62HH%3-B4wsdNpBl&d(6eVkKrhUAq%3L?D6N)If>Y zj(|qgK+9Npl^dcq%KZ3h3R(tf6N}Uu)?SK~KPHu#^)3A;{7t${yKlp9*dw){OVi)* z6+m2N)f#wxcX|6e-hnCu>}yd%C1gXz+wf$U@!$6&Z2p3}gm^A9&O%=TrC-M5qdPCv z&2wLGrbxx8x339w(>~g?FMSk&94dYe{NWX0E&iACsEi;Q|66IO@SV*6R+=F^0V%)z zD|{obKCMASDS7|49MMqIk&=eZ6iST`%C4}*uxn@jW-JX~H}-3}fOJ5#(G zx)|X90uDQYM_GS5>>SA-f?p?Zg7Nig5u^vb?kqwAFA}ei{g(8LAMp7;#?wYc*vq?d zf6&hd*fuvmozWitH(bq^gP%{%HpAh!!_LR``eqP@_xJY)_x*$G)rSzt!$lbN!d|Zn zjPC8{tM&Audv*J_vXgB;+oFI-HVLHP>3d|F9CkV~Q1w&JYd)*Sxw%_i_)+Gw5LseA zKPyCbUs!dHw!`^su)JPfPS>O9%?%!6ok~hecr#xP!`+{D0}1{Nl2~7_{5-4S{e<5x z{;i=hf>3;MJ{ltl2`}FTn9TWytKjWt)Lp#1{ULaDH9HuF8>HPp($Yh9pPnivK*(C3 zuP+vQct7^h#acsmM2U0;7f6db>^yYmi{p8%)%5ZbPk(}PWc@7hdhlc9>(M>=iqNucO~PARJ?%C4pGhA2U5Oq!NnX1T zP~tLtnBG9_krq3!2V;@rLNW(O(C54xB`7`kF76F_@t`07HVh5YPB_ErFW0Mg*Vh-L zGw@_FnSNTV0(TJAT5kSsnoh3g=gZH3GI9-R)BKz93hLd=EBpbx>T6yBI4CnK7pu|H zY;}!CUxSnL+x0nKOkTnANzQB*yu^dT^XvQD{h=(MU5jr`Ja|8uG?Tv-_2s3Wfp0R{ zW@)}U8QtBT&tbM^%Oy&qbc=aE>L#;v-YwqG<8Cr9Tr`iDMH2VCC?}J8TP;ic?bX%o zdWxmJ?ROdFi{5lG?Jnc^eK(n=3Hn{8-FTL~hrydiQIc=_t+joWPo?N#P+`l%%9wB0 zN@a!qlK<=`{FiiJcKSTXlbHL=u4i^Vi33kUe%7vMc0Gv$PeOjyu5ZS!+I4Vog*)Iq zE_)4yN&EPaSzYgs?$#f#S1%vCkL-v3Y>bJ$0n$+5L6ASm z52~+7-6{DAt}2*hPFolX0a+M|Ji-^D+d2sbHn1X+crlHKB0My1k%~9c;5qTm7+4{0 z2n9nTkW~LNFkiCEzD1VarSg2~I|wyl$5Pi73%2DLEM+M)hpUk^vO zjeEpg zyi%sW2HqzL%N%v;h-Q2vu{wmhOyaN7W1!L^wMAJg__GaO#ymyx6wMc=Q9@dSDEdqMLp@)q0;R`5Y$T1F`if}=&zE^MFx1YW{xY&nD9+n} z$7=zeOyV;t?~;v0>0RP8zQvGU^|M^!>^05!OkwpDg>}hBAijol9GfAxbp_e`ei4x! z?-#rW^ov}4znZ?nk?rh*RaT#q2nA_P+azL}gVJGS+Y{`?c1J&>b9`OG!K_cMNN$d7SKGfRoJ!}3VT|) z!P=9q!9nx zM|y?I(ZuIGDWveIX=`D75)B^jM>!Th)9j=wuW9Qf+Q`DlcEX&JZ32wW zAUW!XT6+MPd_&`-GZM9h$z~Ye!SdV}oYwQmeGOX+ zV_S!6l*9uRmnU6=VI$puks#fbdXJW;QYW5Z8M4oWyc+L?`2@=)(ca*J(*$$8R#88m zX(?zQ#O;#yo*YL};yp^W(mWjBqfn}tW$t{Pa6J##u+QLnPJ4y(k+!BS-w|=TVmppP zr#uhd<58oW?&4q{+f&DPPCR%)cLTs0cQSFw;aFVoV=2nmo09ys!j~w1xu+8(MIL<1zemV47xB9kccd4_dHpAS;z=N$F1F5L--q#*;n`FsWH=XknkK zL;W3+5vIoTWj~?AgD}j4f_#S#Pp{CL#uF;U7dR9fU=98G*C6!VkWfUlV4ERbLt+Ze z4Q^J_KXF=G{vm0A_>AIY#6LI>d0ajVI5_)w4BT>PTv$qmk^jKK*~jxh9erwBkU!R; zx;>2nhaJrWZhjgACWpp=Ux4Nz&N)j9t}Z+Vp9LH~W$_repi_S-+fz8xcnm%ZI6RKS zWAIr3$3&Jno{Hiza401D_)P8at{=?<4mRRd%044lPL_Go3`j6c0sM zxupf`Murc{7B7ofH?W1$xQN%MG2lET{mc9dCz|&#_uQY)xHEVSHZ0?By+x#K=Xy0g zM@S^1w1?qayy+lcp2JrszYqKQ>De*N_8IOC#p!X>JMQ<6j + + + + Table of Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

Contents

+ +
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapiWN/preface.html b/lefdef/doc/lefapiWN/preface.html new file mode 100644 index 00000000..f9934a51 --- /dev/null +++ b/lefdef/doc/lefapiWN/preface.html @@ -0,0 +1,263 @@ + + + + + What's New in LEF 5.8 C/C++ Programming Interface -- About This Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

+
+

About This Manual

+

This document provides information on new and changed features for version 5.8 of the C and C++ application programming interface (API) used to read and write Cadence® Library Exchange Format (LEF) files.

+

How This Document Is Organized

+

This What's New document is organized into the following chapters:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
New Features
+
+
This chapter describes features that were added since version 5.7 of the LEF API. New features are those that introduce new functionality into the LEF API. Any enhancements made to existing statements to support a new feature are also described in this chapter.
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Changed Features
+
+
This chapter discusses features that were changed since version 5.7 of the LEF API. Changed features include such things as changes in default behavior, changes in whether keywords and statements are required, and any other changes that do not reflect new functionality.
+

Related Documents

+

The following documents provide detailed information about LEF and DEF, and the LEF and DEF application programming interfaces.

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF/DEF Language Reference
+
+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
What's New in LEF/DEF
+
+

4/12/17

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefapiWN/titlecopy.html b/lefdef/doc/lefapiWN/titlecopy.html new file mode 100644 index 00000000..a32c1b2f --- /dev/null +++ b/lefdef/doc/lefapiWN/titlecopy.html @@ -0,0 +1,220 @@ + + + + + What's New in LEF 5.8 C/C++ Programming Interface -- What's New in LEF 5.8 C/C++ Programming Interface + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF 5.8 C/C++ Programming Interface
+ +
+
+
+
+

+
+

+
+

+ + What's New in LEF 5.8 C/C++ Programming Interface +

+

Product Version 5.8
May 2017

+

© 2017 Cadence Design Systems, Inc. All rights reserved.
Printed in the United States of America.

+

Cadence Design Systems, Inc., 555 River Oaks Parkway, San Jose, CA 95134, USA

+

Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence) contained in this document are attributed to Cadence with the appropriate symbol. For queries regarding Cadence's trademarks, contact the corporate legal department at the address shown above or call 800.862.4522.

+

Open SystemC, Open SystemC Initiative, OSCI, SystemC, and SystemC Initiative are trademarks or registered trademarks of Open SystemC Initiative, Inc. in the United States and other countries and are used with permission.

+

All other trademarks are the property of their respective holders.

+

Restricted Print Permission: This publication is protected by copyright and any unauthorized use of this publication may violate copyright, trademark, and other laws. Except as specified in this permission statement, this publication may not be copied, reproduced, modified, published, uploaded, posted, transmitted, or distributed in any way, without prior written permission from Cadence. This statement grants you permission to print one (1) hard copy of this publication subject to the following conditions:

+ + + + +

Disclaimer: Information in this publication is subject to change without notice and does not represent a commitment on the part of Cadence. The information contained herein is the proprietary and confidential information of Cadence or its licensors, and is supplied subject to, and may be used only by Cadence's customer in accordance with, a written agreement between Cadence and its customer. Except as may be explicitly set forth in such agreement, Cadence does not make, and expressly disclaims, any representations or warranties as to the completeness, accuracy or usefulness of the information contained in this document. Cadence does not warrant that use of such information will not infringe any third party rights, nor does Cadence assume any liability for damages or costs of any kind that may result from use of such information.

+

Restricted Rights: Use, duplication, or disclosure by the Government is subject to restrictions as set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor.

+

 

+

 

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefWN/NewFeatures.html b/lefdef/doc/lefdefWN/NewFeatures.html new file mode 100644 index 00000000..34116b29 --- /dev/null +++ b/lefdef/doc/lefdefWN/NewFeatures.html @@ -0,0 +1,1062 @@ + + + + + What's New in LEF/DEF 5.8 -- 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF/DEF 5.8
+ +
+
+
+
+

+
+

+
+

1 

+

New Features

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Overview
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Multi-Mask Patterning Technology
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
New LEF Features
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
LEF Layers Support Masks
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Fixed Masks for Layers and Macros
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
LEF Via Adds Masks for Fixed Vias
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Macro Layer Geometries Support Masks
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
New DEF Features
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Routing Blockages Add Mask Information
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Component Mask Shift Multi-Patterning Layers
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Components Adds Mask Shift Information
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Fills Adds Masks
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Nets Routing Points Enhancements
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Special Nets Special Wiring Enhancements
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
DEF Via Adds Mask
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Tracks Adds Mask
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Pins Adds Mask
+
+ +

Overview

+

Multi-Mask Patterning Technology

+

The multi-mask patterning technology allows you to define multi-mask patterns for layers. You can define multi-mask statements that split a single layer into two or three masks. The syntax enhancements made to LEF/DEF v5.8 support more than three masks, though most applications support two or three masks only.

+

The subsequent sections describe the new syntax changes that have been made to incorporate this new feature.

+

New LEF Features

+

The following sections describe the enhancements that have been made to support multi-mask patterning for LEF.

+

LEF Layers Support Masks

+

The MASK statement was added to specify how many masks for double- or triple-patterning will be used for a specified layer. You can use this statement for layers - cut, routing, implant, overlap, and/or masterslice.

+

Includes the following new syntax (in bold):

+
+ + LAYER layerName +
+
+ + TYPE ROUTING ;                #or TYPE CUT, IMPLANT, MASTERSLICE, OVERLAP +
+
+ + [MASK numMasks ;] +
+

Fixed Masks for Layers and Macros

+

Some technologies do not allow mask shifting for cells using multi-mask patterning, e.g., pin and routing shapes are all pre-colored and must not be shifted to other masks. The FIXEDMASK statement was added to indicate that mask shifting is not allowed. All the LEF macro pin mask assignments are kept fixed and cannot be shifted to a different mask.

+

Includes the following new syntax (in bold):

+

For layers:

+
+ + FIXEDMASK ; +
+
+ + LAYER <statement> +
+

For macros:

+
+ + MACRO macroName +
+
+
[CLASS className [subclassName] ;]
+
+
+
[FIXEDMASK ;]
+
+
+
...
+
+

LEF Via Adds Masks for Fixed Vias

+

For fixed vias - rectangle or polygon - the masks in the via-master for cut layer are required for multi-cut vias. The VIARULE statement was enhanced to include masks. The MASK statement indicates which mask for double- or triple-patterning lithography is to be applied to the shapes defined using the RECT or POLYGON statements of the via master.

+

Includes the following new syntax (in bold):

+
+ + VIA viaName [DEFAULT] +
+
+
{ VIARULE viaRuleName ;
+
+
+
    CUTSIZE xSize ySize ;
+
+
+
    LAYERS botMetalLayer cutLayer topMetalLayer ;
+
+
+
    CUTSPACING xCutSpacing yCutSpacing ;
+
+
+
    ENCLOSURE xBotEnc yBotEnc xTopEnc yTopEnc ;
+
+
+
    [ROWCOL numCutRows numCutCols ;]
+
+
+
    [ORIGIN xOffset yOffset ;]
+
+
+
    [OFFSET xBotOffset yBotOffset xTopOffset yTopOffset ;]
+
+
+
    [PATTERN cutPattern ;]
}
+
+
+
| [RESISTANCE resistValue ;]
+
+
+
  {LAYER layerName ;
+
+
+
    { RECT [MASK maskNum] pt pt ;
+
+
+
    | POLYGON [MASK maskNum] pt pt pt ...; } ...
+
+
+
  }...
+
+
+ + } +
+
+
[PROPERTY propName propVal ;] ...
+
+
+ + END viaName +
+

Macro Layer Geometries Support Masks

+

Macro layer geometries support multi-mask patterning. Three different masks can be added to the same layer geometries. The MASK statement was added to indicate which mask from double- or triple-patterning is to be used for path, rectangle, polygon, or via geometries.

+

Includes the following new syntax (in bold):

+
+ + { LAYER layerName +
+
+
    [EXCEPTPGNET]
+
+
+
    [SPACING minSpacing | DESIGNRULEWIDTH value] ;
+
+
+
[WIDTH width ;]
+
+
+
{ PATH [MASK maskNum] pt ... ;
+
+
+
| PATH [MASK maskNum] ITERATE pt ... stepPattern ;
+
+
+
| RECT [MASK maskNum] pt pt ;
+
+
+
| RECT [MASK maskNum] ITERATE pt pt stepPattern ;
+
+
+
| POLYGON [MASK maskNum] pt pt pt pt ... ;
+
+
+
| POLYGON [MASK maskNum] ITERATE pt pt pt pt ... stepPattern ;
+
+
+
} ...
+
+
+ + | VIA [MASK viaMaskNum] pt viaName ; +
+
+ + | VIA ITERATE [MASK viaMaskNum] pt viaName stepPattern ; +
+
+ + } ... +
+

For syntax information, see "LEF Syntax" chapter in the LEF/DEF Language Reference.

+

 

+

New DEF Features

+

The following sections describe the enhancements that have been made to support multi-mask patterning for DEF.

+

Routing Blockages Add Mask Information

+

The BLOCKAGES section was enhanced to include masks. The MASK statement indicates which mask for double- or triple-patterning lithography is to be used for the specified shapes.

+

Includes the following new syntax (in bold):

+
+ + [BLOCKAGES numBlockages ; +
+
+
[- LAYER layerName
+
+
+
    [+ COMPONENT compName | + SLOTS | + FILLS | + PUSHDOWN
+
+
+
       | + EXCEPTPGNET]
+
+
+
    [+ SPACING minSpacing | + DESIGNRULEWIDTH effectiveWidth]
+
+
+
    [+ MASK maskNum]
+
+
+
       {RECT pt pt | POLYGON pt pt pt ...} ...
+
+
+ +     ;] ... +
+
+ + END BLOCKAGES] +
+

Component Mask Shift Multi-Patterning Layers

+

The COMPONENTMASKSHIFT statement defines which layers of a component are allowed to be shifted from the original mask colors in the LEF. This can be useful to shift all the layers of a specific component in order to align the masks with other component or router mask settings to increase routing density. This definition allows a specific component to compactly describe the mask shifting for that component.

+

Includes the following new syntax:

+
+ + [COMPONENTMASKSHIFT layer1 [layer2 ...] ;] +
+

Components Adds Mask Shift Information

+

Some applications require the ability to "shift" the mask of pins and obstructions on a certain layer for a specific component to better align the pin masks with the routing masks.

+

The MASKSHIFT statement was added to allow shifting of the cell-master masks used in double- or triple-patterning for specific layers of an instance of the cell-master.

+

Includes the following new syntax (in bold):

+
+ + COMPONENTS numComps ; +
+
+
[- compName modelName
+
+
+
    [+ EEQMASTER macroName]
+
+
+
    [+ SOURCE {NETLIST | DIST | USER | TIMING}]
+
+
+
    [+ {FIXED pt orient | COVER pt orient | PLACED pt orient
+
+
+
         | UNPLACED} ]
+
+
+
    [+ MASKSHIFT shiftLayerMasks]
+
+
+
    [+ HALO [SOFT] left bottom right top]
+
+
+
    [+ ROUTEHALO haloDist minLayer maxLayer]
+
+
+
    [+ WEIGHT weight]
+
+
+
    [+ REGION regionName]
+
+
+
    [+ PROPERTY {propName propVal} ...]...
+
+
+ +     ;] ... +
+
+ + END COMPONENTS +
+

Fills Adds Masks

+

In order to support multi-patterning technologies up to three different masks for the same layer can be added.

+

The MASK statement was added to specify which mask for double- or triple-patterning lithography is to be applied to the specified rectangles, polygons, or via shapes on each layer.

+

Includes the following new syntax (in bold):

+
+ + [FILLS numFills ; +
+
+
[- LAYER layerName [+ MASK maskNum] [+ OPC]
+
+
+
    {RECT pt pt
+
+
+
    | POLYGON pt pt pt ...} ... ;] ...
+
+
+
[- VIA viaName [+ MASK viaMaskNum] [+ OPC] pt ... ;] ...
+
+
+ + END FILLS] +
+

Nets Routing Points Enhancements

+

Nets Adds Rectangle and/or Virtual Connection

+

The NETS section was enhanced to provide the ability to create a rectangle or add a virtual connection to maintain the symbolic routing graph.

+

The RECT statement allows creating a rectangle from the previous routing points. The VIRTUAL statement indicates that there is a virtual connection between the previous point and the new routing point.

+

Includes the following new syntax (in bold):

+
+ + { ( x y [extValue] ) +
+
+
{ ( x y [extValue] )
+
+
+
| viaName [orient]
+
+
+
| RECT ( deltax1 deltay1 deltax2 deltay2 )
+
+
+
| VIRTUAL ( x y ) } } ...
+
+

Nets Adds Masks

+

The NETS section routing points was enhanced to add masks - up to three different masks for the same layer can be added.

+

Includes the following new syntax (in bold):

+
+ + { ( x y [extValue] ) +
+
+
[MASK maskNum] ( x y [extValue] )
+
+
+
| [MASK viaMaskNum] viaName [orient]]
+
+
+
| [MASK maskNum] RECT ( deltax1 deltay1 deltax2 deltay2 )
+
+
+
| VIRTUAL ( x y ) } } ...
+
+

Special Nets Special Wiring Enhancements

+

To support multi-mask patterning up to three different masks for the same layers can be added to special nets.

+

A new VIA statement was added to make it more efficient to specify several power-vias.

+

Additionally, the route status - cover, fixed, routed, shield, and shape - can be applied to polygons, rectangles, and vias.

+

Includes the following new syntax (in bold):

+
+ + [ [+ COVER | + FIXED | + ROUTED | + SHIELD shieldNetName] +
+
+
[+ SHAPE shapeType] [+ MASK maskNum]
+
+
+
+ POLYGON layerName pt pt pt...
+
+
+
| + RECT layerName pt pt
+
+
+
| + VIA viaName [orient] pt ...
+
+
+ + | {+ COVER | + FIXED | + ROUTED | + SHIELD shieldNetName} +
+
+
layerName routeWidth
+
+
+
    [+ SHAPE shapeType]
+
+
+
    [+ STYLE styleNum]
+
+
+
    routingPoints
+
+
+ + [NEW layerName routeWidth +
+
+ +     [+ SHAPE shapeType] +
+
+ +     [+ STYLE styleNum] +
+
+ +     routingPoints +
+
+ +     ] ... +
+
+ + ] ... +
+

New syntax for routing points:

+
+ + (x y [extValue] ) +
+
+
{ [MASK maskNum] (x y [extValue] )
+
+
+
| [MASK viaMaskNum] viaName [orient]
+
+
+
    [DO numX BY numY STEP stepX stepY]
+
+
+ + }... +
+

DEF Via Adds Mask

+

For fixed vias, rectangle or polygon, the masks in the via-master for cut-layer shapes are required for multi-cut vias. The MASK statement indicates which mask for double- or triple-patterning lithography is to be applied to the defined shapes.

+

Includes the following new syntax (in bold):

+
+ + [VIAS numVias ; +
+
+
[- viaName
+
+
+
   { + VIARULE viaRuleName
+
+
+
      + CUTSIZE xSize ySize
+
+
+
     + LAYERS botmetalLayer cutLayer topMetalLayer
+
+
+
     + CUTSPACING xCutSpacing yCutSpacing
+
+
+
     + ENCLOSURE xBotEnc yBotEnc xTopEnc yTopEnc
+
+
+
     [+ ROWCOL numCutRows NumCutCols]
+
+
+
     [+ ORIGIN xOffset yOffset]
+
+
+
     [+ OFFSET xBotOffset yBotOffset xTopOffset yTopOffset]
+
+
+
     [+ PATTERN cutPattern]
+
+
+
   |[ + RECT layerName [+ MASK maskNum] pt pt
+
+
+
     | + POLYGON layerName [+ MASK maskNum] pt pt pt] ...
+
+
+
     }
+
+
+
;] ...
+
+
+ + END VIAS] +
+

Tracks Adds Mask

+

The routing tracks can now have mask assignments to aid alignment of routing masks inside a block with the level above. The MASK statement indicates which mask for double- or triple-patterning lithography to use for the first routing track.

+

Includes the following new syntax (in bold):

+
+ + [TRACKS +
+
+
[{X | Y} start DO numtracks STEP space
+
+
+
     [MASK maskNum [SAMEMASK]]
+
+
+
     [LAYER layerName ...]
+
+
+ +    ;] ...] +
+

Pins Adds Mask

+

The PINS syntax has been modified in include mask attributes. The MASK statement indicates which mask from double- or triple-patterning to use for pins or via shapes on each layer.

+

Includes the following new syntax (in bold):

+
+ + [PINS numPins ; +
+
+ + [ [- pinName + NET netName] +
+
+ + ... +
+
+
[[+ PORT]
+
+
+
    [+ LAYER layerName
+
+
+
          [MASK maskNum]
+
+
+
          [SPACING minSpacing | DESIGNRULEWIDTH effectiveWidth]
+
+
+
               pt pt
+
+
+
     |+ POLYGON layerName
+
+
+
          [MASK maskNum]
+
+
+
          SPACING minSpacing | DESIGNRULEWIDTH effectiveWidth]
+
+
+
               pt pt pt ...
+
+
+
     |+ VIA viaName
+
+
+
          [MASK viaMaskNum]
+
+
+
               pt
+
+
+
     ] ...
+
+
+
     [+ COVER pt orient | FIXED pt orient | PLACED pt orient]
+
+
+
]...
+
+
+ + ; ] ... +
+
+ + END PINS] +
+

Blockages Change Component, Pushdown, Exceptpgnet to be Independent And Not Exclusive

+

The BLOCKAGES section was enhanced to allow a blockage to simultaneously have COMPONENT, PUSHDOWN, and EXCEPTPGNET statements with the other attributes. These statements are now independent and not exclusive. The meaning of the keywords is unchanged.

+

Includes the following syntax changes (in bold):

+
+ + [BLOCKAGES numBlockages ; +
+
+ + [- LAYER layerName +
+
+
[+ SLOTS | + FILLS]
+
+
+
[+ PUSHDOWN]
+
+
+
[+ EXCEPTPGNET]
+
+
+
[+ COMPONENT compName]
+
+
+
[+ SPACING minSpacing | + DESIGNRULEWIDTH effectiveWidth]
+
+
+
[+ MASK maskNum]
+
+
+
    {RECT pt pt | POLYGON pt pt pt ...} ...
+
+
+ + ;] ... +
+
+ + [- PLACEMENT +
+
+
[ + SOFT | + PARTIAL maxDensity]
+
+
+
[+ PUSHDOWN]
+
+
+
[+ COMPONENT compName]
+
+
+
    {RECT pt pt} ...
+
+
+
;] ...
+
+
+ + END BLOCKAGES +
+
+ +   +
+

For syntax information, see "DEF Syntax" chapter in the LEF/DEF Language Reference.

+
+ +   +
+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefWN/Preface.html b/lefdef/doc/lefdefWN/Preface.html new file mode 100644 index 00000000..a505366f --- /dev/null +++ b/lefdef/doc/lefdefWN/Preface.html @@ -0,0 +1,249 @@ + + + + + What's New in LEF/DEF 5.8 -- About This Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF/DEF 5.8
+ +
+
+
+
+

+
+

+
+

About This Manual

+

This document provides information on new and changed features for version 5.8 of the Cadence® Library Exchange Format (LEF) and Design Exchange Format (DEF) integrated circuit description languages.

+

How This Document Is Organized

+

This What's New document is organized into the following chapters:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
New Features
+
+
This chapter describes features that were added or changed since version 5.7 of LEF and DEF.
+
New features are those that introduce new functionality into LEF and DEF. Any enhancements made to existing statements to support a new feature are also described in this chapter.
+

Related Documents

+

The following documents provide detailed information about LEF and DEF, and the LEF and DEF application programming interfaces.

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF/DEF Language Reference
+
+ + +

1/20/17

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefWN/images/Diamond.gif b/lefdef/doc/lefdefWN/images/Diamond.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cdafa3387318b1d3581c1b7f4083a66bc79a0b8 GIT binary patch literal 92 zcmZ?wbhEHbC%M@ z7fzizb>P5(b?erxUAuPPym_-`&1!0Ds;{rFsHg}D3Gwvwbai#Lu&^*OF;P@hl$4Z| zkdP1%5a8wI<>268VPOH954MLUgyK&YMg|5&1|5*;AU`p%SsiEyV7Qnga44mbDMM~@ zqsQ`>E^=xzTBVaGWbB`JbUN227P({xH^q_+dr`J4clSsv$Yoe&cwjqcfFpx70FDw; AfB*mh literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/Thumbs.db b/lefdef/doc/lefdefWN/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..89a67ee6add69ee45ebed976dac24899f91c189d GIT binary patch literal 161792 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 Jj+RLT06U&`IGX?f literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/alpha.gif b/lefdef/doc/lefdefWN/images/alpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..49de981bb1c61911e1ffabafac4737af455cf9d9 GIT binary patch literal 147 zcmZ?wbhEHbn`m8 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/ampersnd.gif b/lefdef/doc/lefdefWN/images/ampersnd.gif new file mode 100644 index 0000000000000000000000000000000000000000..faf90fa016da7000e73e3cbac478543fd7a04fc0 GIT binary patch literal 209 zcmV;?051PWNk%w1VG{rk0J8u9|NsBLzrVG$wVa%sl$4Z&goJy0duwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui022TY000DjFvuWKT4U->8wpLrNsE>| z5`%JsgG_2LJjoa^#-u!mD;0zwFrm;i9t}ak@n|+3i;n~$YB&mw+^w`hJPLu6=;sh< zGR%p?ArUk(lLM^@mt!y-riyz*nmI8?4h#(nM_L<&5(5NqAP)OG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtz>% literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/anglrite.gif b/lefdef/doc/lefdefWN/images/anglrite.gif new file mode 100644 index 0000000000000000000000000000000000000000..f30742e70b1b4d043e555f346837eb43242b8f9d GIT binary patch literal 120 zcmZ?wbhEHbOG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtopFJFSLV>e2RHAj0f=h;E@I(!kZ#x+?7io0| P8+7(u)0EN|WUvMR&ip1V literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/arrwboth.gif b/lefdef/doc/lefdefWN/images/arrwboth.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6a26d1a64476e85e5fba2fa1b1cb363dbd0ee23 GIT binary patch literal 154 zcmV;L0A>G2Nk%w1VG;lj0J8u9|NsBLzrVG$wXLnKoSdALl$3jWduwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui01^NX000C>Fvv-(y*TU5J6%SlgqP9? z)!>j6;}DneBvau$N1^Y#@-TzI;W0xbjL75S;V4K5jnjqTU|1Rpi=d&vG@O(~Hv^-T IJ(maoJC>Xc^w@cH8nMbg@t;0dKwxU>gwvs%F5#6 z;{5#l3^1VhlZBCifssK6BmgplfyK_?gy-tDNp}?2iLe(6x~Fq;Y+j>tTICsw*u9V` rmls^vx;CTn;Gqk%CBzOKSX0qm8?^StX-)3lf_Z1!qTaYNFjxZsBCaw- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/arrwdbdn.gif b/lefdef/doc/lefdefWN/images/arrwdbdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..701bb8bbcae9b0e09d0d069e4a5be1fada76f7a3 GIT binary patch literal 138 zcmZ?wbhEHbpeRE Qt&+(Qzah}SgM+~u0B6G{wg3PC literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/arrwdbrt.gif b/lefdef/doc/lefdefWN/images/arrwdbrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..570fca03a58aaa40e6d7c23c5a55f1af873d96c4 GIT binary patch literal 124 zcmZ?wbhEHb6k_0I*v!E2|NsB}`}fb8GpDDgr@FejxVYHT(o$1XQ&CY-KtO;211SDv zVPs%nWY7W0fXrZE(KI;Wxq7eT1KU1PHx0R@N4esKi$ohU-h`+WtO;7MqCL%~bf2fL Khl?u%gEatK@*+K$->CM zz{sEjk_4H-z+zzF;dx@u=A<>{+vHf=WG$;ytGt>NS)zV>F&l+^ZQwmwsItpfaiT#B O)4pT}gV`<&4Aub310s=}PM@L6ZO-))_T6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471B-#d3D4DgEnc5pZFSegB0)mI&xzCZ j^}g1}I?X1hD*DV_(=B)$-7f^p5ONbfc;t=?1A{dHJBKZp literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/arrwup.gif b/lefdef/doc/lefdefWN/images/arrwup.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a770c30fb4167a6485f2a93ba6b4c9e81c70f97 GIT binary patch literal 135 zcmV;20C@jLNk%w1VGRHh0J8u9|NsBMz`(V&wW+D8o}QkQlaq*uhBtH3_%+R38C4a#P`2XaOddxipHTuSz%HHG~*`%06R#sGAsZ9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/arrwvert.gif b/lefdef/doc/lefdefWN/images/arrwvert.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c5e9daf26bb482bf5659dd5f62ff2ffee66269a GIT binary patch literal 85 zcmZ?wbhEHbdV|w=Bx1^<$W9MG~HuqEK!j!4W4jh4#85pbqqv9M# literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/b_bullet.gif b/lefdef/doc/lefdefWN/images/b_bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..0aeaa180e861d12ee0b131f7d713af607c998c07 GIT binary patch literal 818 zcmYL|PiPZC6o5}Ua=+!dC^foPlP;GK^TMXvm#_;ZwF_4l`nOz4LgyKS zuQ2Or5-`t6gHg4*>KmvxO1au(%9>L7 fsr_z`b6TbUiT>bmj9_ePZS`F_I5IXJ9p=(sJyFbD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/beta.gif b/lefdef/doc/lefdefWN/images/beta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6172e8978c16768fb7cadde044d91c4bc835802 GIT binary patch literal 151 zcmZ?wbhEHb9$U%nJMz@Fauw#&q(LRO(A*nwRjI1A@2Z#vqF24}sVW&N%ZQ`d+1_o;Y D6S*~0$;rt8zSTPZ<#pHwvy@O4 G25SH=gCi6G literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/bracrtbt.gif b/lefdef/doc/lefdefWN/images/bracrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..345b70213f2f9bc99b528aae2a89c0dc4bb957de GIT binary patch literal 121 zcmZ?wbhEHb=}PO-)T&T3U2;bU;9WrKP2w zo}RL@vbeZ74-XFm1B2pE7DfgJMg|=qn*n471B;fy2~SnWQn9H|-yOW(Iaj&CgNe;O dsHbD1Zkv~Niv|SbyFcM_21^}ynD7gRt literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/bracrttp.gif b/lefdef/doc/lefdefWN/images/bracrttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..76c33b52222f37ee7a778a3c9f8552f5830a248c GIT binary patch literal 122 zcmZ?wbhEHbNtwM|RiZhL2F^0vUQ7(u09Wc9YybcN literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/braklttp.gif b/lefdef/doc/lefdefWN/images/braklttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..67a063fee279ce5795a2e79caa2a4aa567942577 GIT binary patch literal 88 zcmZ?wbhEHbK05M@2>Hq)$ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/brakrtbt.gif b/lefdef/doc/lefdefWN/images/brakrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdb1927189d7b4db1c3160666897f32f0ba2f57b GIT binary patch literal 122 zcmZ?wbhEHbFfd?XU{L(Y!pOkD$e;sc vGl0}GFe^&zT9Yc!w~c4vsYeS6m&XemC6`vJ&*;*=IV*bR-ct%JoD9|gy4oLO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/bs_bullet_sub.gif b/lefdef/doc/lefdefWN/images/bs_bullet_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e02a6610c0ed14cf5aaef054fdd6bb94f51a8ac GIT binary patch literal 834 zcmX|=L1+_E5Qe{PHf>shG;2u%4YbyaSP!KHtmq*tZLFsJZ3rm!vTQem zU_gWvJb1Bs6!e%t@E{R-D}q}RWF;`_rZB?5?IdUK!?cbqBV}P-z57Xl2ZjoqMwdI(cKfNMeW!Q% zq4M8?$sJEOj4802jZfRTY9V1-vQS8%2@L__PIeQ$%7`g3-|N9`w`Lg1&jst$CNN79 z9;}Dl3C$>}R*?|<8Wphc<%#;KtzlX|TSO5xgo&_Oj^TgInu%po%Hrx2MkF3WprKSD z*$?<=D*is4m93k7yFi&r@{oLH(?UQL$= J{oOj3{{hdW(xU(X literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/bss_bullet_sub_sub.gif b/lefdef/doc/lefdefWN/images/bss_bullet_sub_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9bb133eabc5c242cead02fa2cc319ab69871057 GIT binary patch literal 837 zcmX|=(MwZt6vsc;ZEeaBceOck4`weiMS9r7qL*FLRT3x!O`?ZM7Z#X9Ea>I3-7!Qd zf(?A=CHn*FaRccg?t^a<_-N5XV0!N~%s|LU`}O;6(t&&LIp=qN=X}5CoO|7fkefq~0(Y}qc?c7JiqcXN^{aOeIq*PNhV68?11+_Os_E<9 z=ZErt3upH{zpjr%vFU8>7V71UVaY@hfhIHrh;#(ZB7@45|LS9&45O=AM1 zB*Vko5qCnOkTizP34ZPn<>F!qh(z3=QG)lkTydia&BGzJB!8S?<1=Sxx<% Qz45%iH!(VVb&%`-07Y!l@Bjb+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/bullet.gif b/lefdef/doc/lefdefWN/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..b71c1a475fc702b21c95d5edbdc1aa1d509729bf GIT binary patch literal 120 zcmZ?wbhEHb4+9J+{$ycfU|?j>0SSQ2U|>--IN`Z^uf^l0z7?LzMu$y0Rv3w{*x|!;S!s%* R`Du4f)`fo$#IrD10|3w$Ct&~p literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capalpha.gif b/lefdef/doc/lefdefWN/images/capalpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..f93e524cdd9b7902b98f22fec2fbc71879ff5380 GIT binary patch literal 138 zcmZ?wbhEHbtlf iBjK7S9_sU)YA~@h;Sz3fys?9ohxe??^2Z)Z4AubiT`R2s literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capbeta.gif b/lefdef/doc/lefdefWN/images/capbeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4c37026ab5ebd18ba0a8d1794553e3a808cccd3 GIT binary patch literal 141 zcmZ?wbhEHb@#^7Au1jo~!3BmMJmYcuq;M+r#pdip9y9ehaM? o{R)llK2i|1lGVAn@#^7F&Z8o~!3R&QLbiihbM=bSUwhl4wV%MaP7g sgOAR9nQ*Cbp+!6Q!c^&q5JuUeMFKu?YaJRdD)@TGbY+_ALBS< t9Kj+a(H~=&|Dfi|0-uid#ziMs+4zs8ELfrwBXoqxajBi~0#6nOYXFE-FHQge literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capepsil.gif b/lefdef/doc/lefdefWN/images/capepsil.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b6a387a40e314a6cd651f81a2710054bb57a113 GIT binary patch literal 130 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu;?3{@LbLNc*)uGBIk@mABhBUlzKUDW$QYf e)Ae}T2ivV$eUfVTn;IM~q~@?bPU>V}um%9uyDb|4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capeta.gif b/lefdef/doc/lefdefWN/images/capeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..064c5273534fdba50c309b3b8de0e448583c5e90 GIT binary patch literal 139 zcmZ?wbhEHbtXj8D{Znc=Qc*ct*LGIS; ng6A0BZqz9HaLrao$7Ax1n4<>*6ADbM8V??tC=jb5$Y2csq?<3U literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capgamma.gif b/lefdef/doc/lefdefWN/images/capgamma.gif new file mode 100644 index 0000000000000000000000000000000000000000..6cc19838930ae56e3c6a961b4a4941b4f6a60ccd GIT binary patch literal 118 zcmZ?wbhEHbsXF&jt)P(QRAq< Ie?bOo0L;=Pt^fc4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capiota.gif b/lefdef/doc/lefdefWN/images/capiota.gif new file mode 100644 index 0000000000000000000000000000000000000000..42e74365b648cf7c6ed53a02b6634cbec424fbf0 GIT binary patch literal 111 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^jKK-d)iO_Il$J$wZdFi<>`kqjC9*51d85W0Q&$FS0B#c> Ak^lez literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capkappa.gif b/lefdef/doc/lefdefWN/images/capkappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..263ee4f8874da785aff03241179a652a69f5e1f1 GIT binary patch literal 143 zcmZ?wbhEHbVD%$`Miy+9ct{*51BY*}=wx?XJHNBZD;nJO?mi literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/caplambd.gif b/lefdef/doc/lefdefWN/images/caplambd.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b7af2c91a0c26e39a71126e3ac4de879205cea9 GIT binary patch literal 139 zcmZ?wbhEHbh3D4DgO&)s2-E{nvar=-BQ<}o@ r=7cT^y6N3f~K?Z98elIUh literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capmu.gif b/lefdef/doc/lefdefWN/images/capmu.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0066cf5925e6850511df007c66c32b0eddb8173 GIT binary patch literal 159 zcmZ?wbhEHb%PT^-v`jfHIelh# zt!@$dCau!zm~epO3sdg_PQe=zllMJOP_%UN?{N|BnxiAt^!CC9gBI>H4vm5PVw4!H E0YR8G=l}o! literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capnu.gif b/lefdef/doc/lefdefWN/images/capnu.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d841a31ef2a70380018e4253ec1c8ed0ad25f32 GIT binary patch literal 156 zcmV;N0Av40Nk%w1VGaNe0J8u9|NsBMz`(S$w5X`4oSdAHkdTCggm`#(Y;0^`U|>{K zR7gljFfcGABqR(B3;+NCA^8LW00031EC2ui01f~S000C@Fvv-(Nr_Bxk(S5P2vlQK z&%;nmfi90SwP?^hheT6PAUF=qZqf@7fP$f<7zj0#0cJpva`7sRhcz%jJP?CTV_TsN KNaeI70suQwZ8p^a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capomega.gif b/lefdef/doc/lefdefWN/images/capomega.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6e11542c02b2ca350e3add8174458872d846540 GIT binary patch literal 152 zcmZ?wbhEHb~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0V;%achbM@Y`IVnL0J)C_O2FRZCF!X)8CG?@p z4 Aod5s; literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capomicr.gif b/lefdef/doc/lefdefWN/images/capomicr.gif new file mode 100644 index 0000000000000000000000000000000000000000..20f4ae6b5b392f23b70a83e0b7ab1684560ba69a GIT binary patch literal 145 zcmZ?wbhEHbIn{K>+|z`)3$ z1Cj@s!N6i?aKdx7h>Eaum!P;&01J~}vxQ>YQLmR_k{uzZLK4}IH2RxNU@#^79)cbo`(%I76-KkGhWnT`s&#>c}7BopZ+5S gHD{ULphH}aJW~&7Yvc&FPdRw-qQ;w!BODCY0Fo{%$p8QV literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capsigma.gif b/lefdef/doc/lefdefWN/images/capsigma.gif new file mode 100644 index 0000000000000000000000000000000000000000..f75c3553b8eec054cc9e17284bc8ec1ee1bc89d6 GIT binary patch literal 131 zcmZ?wbhEHb0SSQ2U|`WSIN`Z^ujncD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/captheta.gif b/lefdef/doc/lefdefWN/images/captheta.gif new file mode 100644 index 0000000000000000000000000000000000000000..96b4c5022d99b4e1de7f6b8432207cf30601cf70 GIT binary patch literal 153 zcmZ?wbhEHb9pW4wfr4EcoLr8Y9jz*t7nI~VWSml1Xx(bS o`e!Q(8{?$u$*S7zS5neEWsEqPk2i{ zNIX0|FfcGABqSIZ7ytkOA^8LW00031EC2ui01f~S000CzFvv-(y`iLS zhlh=gje&uIii!#Y1B2pE7DfgJMg|=qn*n471BMxJ+HeGQ| q$;Tzh)IavLXtIb+Q*f(SLD4P&j!7*|$Df$Can9aiwkJf1!5RRyLNNRQ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/capzeta.gif b/lefdef/doc/lefdefWN/images/capzeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcba9c83a24c02d071efbf8e72ce88b584f41d58 GIT binary patch literal 138 zcmZ?wbhEHb@#^7IT9Wo~!rXP?}Qa&U} literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/caution.gif b/lefdef/doc/lefdefWN/images/caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8a5e7588a618e53a52e8dc4b72555e7dc0714bc GIT binary patch literal 286 zcmV+(0pb2fNk%v~VRir~0Pp|+|Ns90001li0001X04D$d0{w)KsmtvTqnxzbi?e>A z`wfPo;{{4Nrs`!z?Fz?9N73@FzLk#m7{BugEhb=Xh=jb16J|20b1I)y1W?MUQkht- z_tfZ?x-8pwAx)3ToG5#nMY}=fbNqg&13reab-u?JI3w6sR0zYyqeqC6H|J;g=V%xy z^R|R#V^+rrCbtD#Tx@K)<|fUTO6km)_=70wU3rN6jGZ0(V~5U?zJ8i<#ol9{X9e#g--llxuTi9L k&+ku&wl)Eg3_NkK;D&?G6hcXs(BX=15-VD~=&%3)JGI1(d;kCd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/chi.gif b/lefdef/doc/lefdefWN/images/chi.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4555582cd9fb8d55b51b5027afc252e5177d480 GIT binary patch literal 145 zcmZ?wbhEHb(J3^J9fJwoZo6KNOf|o(v2U(3NaFxOFqDmlA_D0At%VJpcdz literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/circmult.gif b/lefdef/doc/lefdefWN/images/circmult.gif new file mode 100644 index 0000000000000000000000000000000000000000..49bac178460a729bf930450705a25aec65a44ebb GIT binary patch literal 81 zcmZ?wbhEHboa25SJ5=on)F literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/circplus.gif b/lefdef/doc/lefdefWN/images/circplus.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf9719820db56f560d1e94f957bb08ad5a552437 GIT binary patch literal 80 zcmZ?wbhEHb)5TRPWpn*l7_0#<{3$K~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/congrunt.gif b/lefdef/doc/lefdefWN/images/congrunt.gif new file mode 100644 index 0000000000000000000000000000000000000000..b886bacb112a0250512b5865b60aca58c4efdd85 GIT binary patch literal 115 zcmZ?wbhEHbt079H3XaE2J literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/delta.gif b/lefdef/doc/lefdefWN/images/delta.gif new file mode 100644 index 0000000000000000000000000000000000000000..239069d87bcba07487e82ca0daa0b1a08dfbb616 GIT binary patch literal 141 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK(;gy-t5O0wHpY+IJ7+%Srnyg*?^i_WrCgGWJ} my^4aqj1s`JAu6eRBSOWk{MJ+b~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/draft.gif b/lefdef/doc/lefdefWN/images/draft.gif new file mode 100644 index 0000000000000000000000000000000000000000..9952c7ec4b536327a1a840e49488a07b7a16512f GIT binary patch literal 279 zcmV+y0qFimNk%v~VNU=f0Pp|+|NsC0001li0000_03!eZ0``QDsmtvTqnxzbi?iPR zh7X3~NS5Y_l1k9E7@NTEEXjvW=L`2Od(@R9H_0Y^dW8Hg5zCL9qBsjFuqDEes0I_CKWds+Br%L$75IU5=$!>W3^tCVZh3cFRUbC7TgJFz3FqODb2=REKAH3bWF%Rjz$T%p8fu&+`t^Gvv1wc d&)@8yz<>e)!byQJp+bcP8#;UlF=B%P06R~di+un9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/element.gif b/lefdef/doc/lefdefWN/images/element.gif new file mode 100644 index 0000000000000000000000000000000000000000..150898251de90d00c6327c6e287c2b6c830a286d GIT binary patch literal 121 zcmZ?wbhEHb@#^7Bzzto~!rXn6a;+-|1YC8( UPfhf6I<)e-!tw12YD^5)0A;r(u>b%7 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/emptyset.gif b/lefdef/doc/lefdefWN/images/emptyset.gif new file mode 100644 index 0000000000000000000000000000000000000000..f83eb0be9ad2ed570321abe42dc5ce1644fb7f0e GIT binary patch literal 81 zcmZ?wbhEHb6kyqk-)7Df@lZK2cg2pJ)a{F=th(aH$Y2cswJsXO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/epsilon.gif b/lefdef/doc/lefdefWN/images/epsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..753b8c7cef695d7bf5ba15a42791f4246cef8744 GIT binary patch literal 123 zcmZ?wbhEHb%_1T9H|KtPIuw1JoBm literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/equivlnt.gif b/lefdef/doc/lefdefWN/images/equivlnt.gif new file mode 100644 index 0000000000000000000000000000000000000000..deb2a0bb4eea15d6e66ce2cb5821e4979305d8d1 GIT binary patch literal 115 zcmZ?wbhEHbRfjb?ic55V2QBtol(?>4kii-NpeGK=GU?NX|AcHjk!Z0c^ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/existntl.gif b/lefdef/doc/lefdefWN/images/existntl.gif new file mode 100644 index 0000000000000000000000000000000000000000..3338a4eb820e95eedb1a12f7e087abe0eadf4d47 GIT binary patch literal 117 zcmZ?wbhEHb<_~`MXrPbY8!rDNU{orItMh0sDL9Q&4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/gtequal.gif b/lefdef/doc/lefdefWN/images/gtequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..adcc0dd377ee1e11f5eba9755fd655c68019e901 GIT binary patch literal 126 zcmZ?wbhEHb0SSQ2U|`WUIN`Z^?+rDTO*Y;}6$cM?ELo`H61HY>>Y^fv XY?+m>z2E;9aZ2=%dDqv-!C(yl-_0vt literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/header_doc.gif b/lefdef/doc/lefdefWN/images/header_doc.gif new file mode 100644 index 0000000000000000000000000000000000000000..3dace6c2c084e6f4ad5c19794e7210b61ef3a510 GIT binary patch literal 2954 zcmbV~`9G9<8^>?Lv5jNOkTpWbdP+BDNF8IBI64&**-E!;Z6ta0lq-w8bYR z2=PE#5IDqdox~Rih9CrjPzb^x2q!8ShF}DOQ3%E$7$+_f7(x&TK_LW#5S)06!Vro; zC<>t%gyKXi216JEVJL)Q5QYOK2!|mYfp8SUF$f0*&<4^#3p9h*I5CGf2n?ezjKMHY zj0F{fzz7N>7>wWq1-L{J7)425|uY00KA!)IbbC14{4|aDc%;8%P5!oJfwi1~oVsisD3&z#kY3 zDhxw09OMe@0t#@6;uwm996{0`0Kf&FgP?(15GBY1V1jNC2Veq*fkQwI!~itt1XzFr z3&4H8r)jw|8-I@%8l$ z4i1irib_sS&dJFsFE4LyZtm{x9vT{&nwnZ&UHxD0&foa|`4HTODum>$Dzn?d1@~y2 z>#EFYj}})x&b6w_eHOPD_IcM;mDib|Xv&nczOLAGZKAKphGv&R4OG4Gf@@v#s5gTa zu<%ZOH*}X`Bqbo+v5?(#{R5_BHtV19XXN}J-n;6ryC1e<@Vh=sUwq?Gn$~oAV~V0V z>YMq8iA~1F8`aW&zVnePiQ2lC+$-odo03V7J?BLyA~mlb%5S*P^Q}ze=89_A?Mc@R z&0($D*2JXMY32jixhg>KWlQtu!Lh!$J)f8UrmhT?GrJEsaJNdPvKsC5@=9`E%NJpv+w_NjcSx-sNcQ#CDhCuKf0?YxV6u(a1| zqxoJR9v_CYTLKS9^gLJnLH2D4lRBj=Y-&M_E+eZ-rAyC-mp1k_F8JSbD=&LenM-98)`k+3faAHZ;gD)p|wg7URr$XkQPGcgy$G{X*g^#?}o{^lI; zi|Rr$CBaojFds6rw9h+6QMaSN{oWy*KdheLM}rg_C8*o))lv&6b6fc&>UheoQ}oaB zDLKsOGZtylN#=Xe$}WY#Mfwd%eVMB6r`G+|HG^j4V7F;E1_p>~nMS4e<`jSj_k-HgqNP zobBdUn~7%eyog63q{4e&kBH}g>TwZ&=OeZF`B$NbN5yk4vXfaQB023OYJAUb+LJbx ze|EI2=ToO4cUab)QldR0tn zs~cxsi7`b!H1=?h&;HaFbJ>pbD&BSZH^Wb5zZvI-ljxa`rHhJ8Q*!xar!71a8IlnX zu8}W#FmAD&cf;}pgUq?4h!dCk)zZpJRXL?zCwK-9OKW=1WCeNmdYU9BjEO#G4UV(a zgOnX@B_10NclQM~tv_6ee{A%hG-M`-EEs}FS+-Wenq{6VDRx^Rnc<^6khe`2FGgz zcwV1cbWH3MHjDY?pGo>iJ-7L=io7#(yXa}%Dydy;N^aJm^K`UohS=Qbl9$?BvXJI?F}Xn#O{hz<*<0c9Os}gqF+fB`da2L+9LM&v z-d&FPqhp<+**+Pr&ON4@qCXfGoY5vzB#V_@U$jQ)GEa96Bwq7VHnQ-De9(HI25tjgimZ z12&vHn^$G2mk@GZdhh-xl3s7l%~FnPKL0SW-grFlf^nQ~1^ZZ;i?-qLvhkl(NteKc ziZF+de2s}omtzbZvPne>9htKnj(+v{Zq}Oz`YQwH?=TH=TA_rF+2)fSyE%BO z?t+`fqE|cDY3Sd}J!=f?6KUYua8OEBRwv2u$il$zeCqHCiB@t{vv!s!TBonzXYF9* z|CaLBljix>#y)Pzd3RlY-IW=a=KJ**p9r2maEsscU8OkROTl8{7YE0UlCRK)1aR#e zFLOIZ_RMGs`sBO}-_Yc^$;m-ML0(>7hK7a`5)vF7 z91KW6@h1x-0|O(24oD1S1_O(|!3odRHkvadv#d@WGPoZ&GpMm9%#mYq0FRie4s(n* nbMqS!R%dpdA6l)kOXyft19Om1uP6OMjf-F^`#KTlt8e?Jeezt7+A R{|_*rz<~q{8l+GF06WF0eIEb- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/infinity.gif b/lefdef/doc/lefdefWN/images/infinity.gif new file mode 100644 index 0000000000000000000000000000000000000000..766b388fd5bb6c91ec1e3fcf0de45ba8444f7b66 GIT binary patch literal 139 zcmZ?wbhEHb6ky~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0VVqtK?bM;<}*R}nUcQ=VRPUhhZTqtzO;Bt`c mf+rI$xr=5MSlG^Aut-6qfwR-0Q1b;-C+lSAwNWbt8LR>QI4nH? literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/integbot.gif b/lefdef/doc/lefdefWN/images/integbot.gif new file mode 100644 index 0000000000000000000000000000000000000000..3beec4f22b65e3f555aa8ded68bfed95eca1a1dc GIT binary patch literal 134 zcmZ?wbhEHb=}PM@L6tVPRTYT6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471Bto2aSLaOEH(ZvA@)6D!?7_0%Vc`kMU literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/integral.gif b/lefdef/doc/lefdefWN/images/integral.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa748c92f066dda9f052c88ec8431474edc7fb3e GIT binary patch literal 123 zcmZ?wbhEHb eGhV(7-L{ks*L7vt!*q7vdn*2g(Qq0EgEauLUnt)I literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/iota.gif b/lefdef/doc/lefdefWN/images/iota.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2dfc0d6ec0703a9ec2cb80aa0fb91732c712a9a GIT binary patch literal 112 zcmZ?wbhEHbCMz{sEjk^z~)z#?mK!gKZB%ROEbw8B2NCaX53dCqlHRXLH!%aRr>$Y2cs%Q7G+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/kappa.gif b/lefdef/doc/lefdefWN/images/kappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ede7b0fb74bb772fe59de82a908577956b5ac6f GIT binary patch literal 124 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^rojo%)q8JDo0RU^cA@qmN0;nEnGA7`l-I}BO)uDL62toF OKSxZS#}O9>25SInswUZ0Z`H91tFjsx(aPr7 zgiYBn71R&|G$?_EI}C<4q@jgo^M-tlBhIOF=KWzTDiJ5@#JpWl;8Mk@IyJZl6y7=$ zXX*_0kOwf)jX2;R5O4@;hyfaucnS^-hBl<3Wj;B7jT%Qq%m)d77>i0()Q~Ief&!Of zDux`9Gy(t@o+D_uMU=<`nCM0vV1i*d1U19}jZR>J1B0OrY4a=cuW^kU$FMO334a)i zO3nNNgY|ogV55GY!IC^wkh@=R5T$1f((&644146jgI|7tw`N1vh@AO6abxqumBWo|sj-85>fWuQxoE@2;bW_FV_$~P?!UXW{m{eAOg8zV z5EY{IMGd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/nav2_index_b.gif b/lefdef/doc/lefdefWN/images/nav2_index_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..87fc9ddba320b458e6a8e00e4c731c196938f810 GIT binary patch literal 854 zcmb7@F>BLd5XP_I5Qjj)4kdI@T!KiKBcQkl0d1WEu4Zt#!F+-2LIf2YG95S=b#e%; zYbFt~ftxcq<_lyJr}KAj`vv+g;dtMB?)N0K_4*UawL#Po08cLqR!C>ph6Etp#l03kqn>b*?Fb<(c3}`yR zf`h?mBb~LPdd)R8C)pT5;*YUZky#6D>o1D7(b{KQQbD!cYrQSXVr=QuwwvKXZXRm+ z4XYfqNl5cKuqDF7QyV4SZnxL#_51z7U@#mGN2AerJf2J@)9G|Jo6YC*#bU8sE?2A7 zdcEFkHrwrXx7%IzUVX^d|GD$;#?6lG$^B}r|HR{t%3kN_Y8Z!0ufmt!84{pHiWp*;9R$5<;9GOBfF^C24o6MEcjxE2oj^b@%Y^D{0F>mnv;9a zb3V^=zTI0>Rq<3TLif{Obmu4{O~gcoNC=fuq%(M50JE36mHS6wrn=w9t&#V&~YSm13ogQewxV(pqU&+9)lS0+*~6 zvtpxIEEL`vtqdz;lo2qZRf$%@N{kXr1vSI~4N73)4uhc$X=tHYtRY+Du+~OvvHma? z6|-ieS*%@9;L@-*MjL^9K;f+x)?&249`XPtx)BHb0|E{~4KYB25>LT_!O(^@w8SQ7 zuTkR|X0buSAI73GhK(Rs*aZbHSquwuMA8TVTzHP4;TBOM4`8AjaexVi;Skgi12j5; z1r7{`Hl)R_$iBukY8=7F5G4FzEGi>n7wD|tQaBs6`*fCMp`6_9dYvdOqmz!^wqw{L zJ09%v9W3j>nFMKk4%iaHgC}Pcx!rEB*X#HD1A#y&6bgsK(P%UtkEc?pOeWLa-90cc zkj-ZE`TWGh#Psy^;^N}!>gt`||32jZ|FdoV?hP&~qB7fR{}VyiKUCy;sCu;j%XeIx zcJ9A2x-H$jlpQSTtzXE+=cp^M@4LL`^_g?gNNMw8sFP|lYpME|FU1SNL$9=5+kYW` zX1u2L$`?c5e-eD__=AVCCoc3;X8WJ)o~`TiJn0$phkfbIb35NCxFTDp`W_y6due#2 zuROV<_p|8L^4R(0?cI-zeK<9ndo8i%Irn0-{_4Hb>+heg4*0%JKCaFduV0JTjb<7< zb8W{?ymV^glJ`_)&PR!@%V)iR|M9|}<25avXPO$LO~-C~KDb_&KfnCb#lydicWiv( z=aa#b-#x>Llb2e0D-V`!DW7e>$rB@~2OcZ5CvP=m$7-|wmE^8mSM1)E#PETS=RHGL zzgyXU`kR@{pFiDxWN@xy$D_X-?Pw@Fde}GlX;0|KuUjYEN?NMIG2dY5M(gfGz+2z7 z-nfb8d&cLVxm7k^ob0Q~^&f27;NSe}4DFpNt|;p7ezWwz+GK2|`q!HcLtAdt@4IKY n;)mx8?suQ7x@+B)?pR0{8Y8tw)JLg>bj57Xv-{Q~L8|;0OU5W- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/nav2_previous_b.gif b/lefdef/doc/lefdefWN/images/nav2_previous_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..b02bc97081d3d64f843aac572eabcfc39cdb022a GIT binary patch literal 871 zcmb7@ziZQB5XP_I5W#?;gOnnQOArU)2vl5zh_+6FuFW9A4Q6!7E>zILA%h%tF#Z}k zgtm^EM8rnVHIrlhflT6be(qcU0pBGY?|aXEp69-~zkP4>*25jSD8J?OsECQUNQk6R zsfwDYi-u^{rKy;Sxmbv0y>%5gaTgEqtkzHolW>WUNR%X1(j;9nBq`8F8ZDZ6oi(S9 zsk&;YW{ssXQ**UY%c9`YP2JT)JqwDrVH&Ox8VMtXtbTzZBlIg&I1z{PWd#w}5j2bgpd2TT~oA=HQg zO($4zFc@v5vsP5Exu)hM8zV^kF_tPaYk|%Bi=x?R?Xy`@K{dJ8dYdSVu}P=4-54(9 z#zQT?!72yMB&7Kq*b?F4sTn2hc6)t&z0>J*yWL)|*YEcSgTZh(9F0bMdwb*Ycruwx zr_2L-7lQu?5$=X;{LA9Z^dz@^z4(yXsnQkgHJ}r}z2TKhXK*?%6rd`+2?J z&*!FPY*?F|UqYhDU*yrDgfK!lA%YM|P*F-KBa{;=2$kxRQNkEuoG?L{RBt&YoDt3m z7lcdIDku?*2u_3`LPCj1N+cta6Df#90c}V_3(a^f)f{ygrJPbhsZ?W8F-94uOi(5j z1ui+GoKr3+mkJ7R1*3vfA*hgGL@SkyN=~Jq5>r79F+hV7Sh&MrXhRxWXqL*5s&P1D zf-$N5VJs@n85fL8Wfv5<6r2gcgoJxQ;VqM#Nx>xSArD}p8*#utAm9+x5Cb$Q@e~{w z3~fk5ORD75HEJBexl}>IAI72*f(waUVHXs*V1WaJp$%!NR-|6z8a0l@#tkrCOk|ennwyRPEDPl7cdFSL-#R zRE$PCYTJfkg=~0G%Qvu;17i}T@i|~i2oIi&Q6wxZEG8xQBv1ugY*)v^j?c-W0@it$qXn$+4 zE^*i{ykFbg4*!)J%ZnYSQ;+I-3#Poe6`S@<+Sc0!w@!CAWVURq3EZ%4A!c!SQQp$P z4;Rfn<=Xb4@!k$g{}IjnjXAk>m&bK7;Z|(FW9)_8hv|D$yLZ~Y%FvsJlKOVb+|`{>B5xfgEqpxhr z^!%SiNfX|8&6}I_`{AoET!?;d&Sa_c|I|-b{A0NiOK=ec3jKEq zZcbdzOgJg-ww3;TEA#yLMz_B#u&@1tshd}?VtK*w(;u56w$`s(wrhAIYn8vjRn^5w^P|-|V_EWoWS9h)7veNg) zw&agS3u|4!yI;F!4GDDf!k4e<6U9-Z!!?EXc9h;opVEDiIf<9%X0( zEGOqqt24F0%Pq^C?veVpt2KYIIcnA66BC!Z?|xC+yVCCD;h)+MX74K-J#smDNkm#f zw5!3n;lX_Fse+P_U&{2)pZW3q{l$%$S@Yqo^=qa-S)`wx)TkMe;;?t literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/nav2_toc.gif b/lefdef/doc/lefdefWN/images/nav2_toc.gif new file mode 100644 index 0000000000000000000000000000000000000000..5474e92e609d9f4b155e6c30e2b1d4a781670170 GIT binary patch literal 1154 zcmb7@>uZ!(5XL8vgf$v3Xau)5;tirJQaIgY7a=T7yu^A5*rt&fXyE-_U>7fZm> zlAx`h0_rpbjhF?MY+5x5-3@r9P0BGV0T{sW#b%W%#-^Lw6o zcXh?8Q246~nnf?^?J-1_h>3(q36(KqEEy&vWYk?+L)MaIvO-qfTQL_r@)-W3u!|I^$ zR;&>=B1RO9XfN++i@ZAq_1wt25+k9JW@hRp$?5Q88N<%j)cc z0++&8#EQZ_pzzizTNSIYhdh9ZZo~oqfPh0#Lk!TM#8Yr!Fti~JEp^GcYt%TxtS(6S z!&p=zEQ(xV7ZkW;6;|Ykq!9qP@Ek$IEuusoz(hCV022(uA*dk+XmkP#92g93NUK|s zdyQ+5nCvOzx=jZ$V{-UCyU@%x#R#sVASzB8hi^byccvDkTOG`_8dwVjOOsCTW z0|P@tLt|rO6B83}d*6M?@BcIZb@n75WzjO%>i!cE-+z?lo4e+hQ&+$D&0M;r|MtV~ z*hpR?UA$o=SWkt=0tY(p_Z}YqeP=qcd~U^e{_w%Vo~78p0Xbc*QYLx-^q#YYJ4@A$h3B?yp{8O@P3E_{Tx_*sV>xzK3`m% zN!5h+jaB)kyj&6Q9qo)QEP1nU|48?NV6=I7cI46Jd;fm9Hm831lG}feTx*;xA76-f zjQ`oX=~?NyNW;vo?%adF4d2)k=*y0*tGoNh=heN9%?01S7%iApJ$fiwUHqWDuDWE# njyp&9ZakYQ2o>i2FrWN;Pi&3d`zZ6lu4O$>7Oc<8q80xGL>~yq literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/nav2_toc_b.gif b/lefdef/doc/lefdefWN/images/nav2_toc_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..727f3ae5ea1605452ef2b2f2bb555f7f293c9328 GIT binary patch literal 866 zcmb7@y^51j5Qb;LA{GHb3kh2&HbE?eA)r_&1axB+u-z0QOkr*yr65Gm!XkwXY+?Lq zEW-YjsYGNqI&~_`+(0U^8lU;r8}Kw?IA`8@-gmw{8a%vn_vt{c$Zt76Dq-GEn;cz$_jmG2gWHOmfr?c5?KA$fZ zi{)~;TCLXW^=7l#Znx*X|32jZ|GEC>!o`;C$gOIv|HOmVec5U4?j64W`m%NT=Kk5? z{M)NbHy$7C9ew!z=Bhsbb$0ae^zF6&>)pZer`4?csnmtm|O z7WxpCfppW-u_9D(a$9u4g32xo7DA8_R21#j`RX6&ybPOj_S(O-_BU(SugMOSfW*;w!};<#OhkbkXRBX5fX(GsUfwb zOe&-(pbcqgp&75$&2h&X!^Vg)>c*n7)>t-Hj8#X0OSXpDuozYcg|}jjun{q$U_`4? zYm|+OQA`Cj!~hLSVBrpfp$%zhp;?_FSL3j?Vy!xV7>kP8vRGDU7ZkV@wjx#(?g53j zR@tgpg+1f}Omrg-_y+_Wf*N9g1|^5@Au~3cH}d zC9AL^M6lh+o!iA2j%7N*6T&-7`=4dwmriR+4JC*?_oIy-XuulbHJ7m9z1!Y zC?O#sB_$;-EzR%u=jG+)=jR85!SeF*+S=NNhK5im)Y{tG-rgRGM558?@bGXf78@TQ z|J(cTL;nAtxj*8k_$ZDRxmNd|$o2iEIN!{5S6lAa`;rzEHhwR6;j!epZ=|A`` zV`}rIldn1|-aH9z%*rU~teiJ^uyo-1g~8LAL(#&x;^x4a?5f0SUtKuwSaNUN&d2Em z{l}l*oieTM>dU_Bwf3)_B1$I5ajIoz~u?ZYb@t~DktERx&%OM5DB+$ zA+%jH6%m_yb0)|91DV9>{M@(x1HMZ*-uIsSJkNde$xqar5aA|aAO zr7CKoE*hd)m!@JS=3*h1_10C~#9chZvsyzXOu{8XB2ki5Nt1NRkfcBxX|!nOb=I6Z zrs}Gpnl+ZnOwH9oEsKInH+5GJ^(-jfhH1D)Xe5lZYMQ2Nh9*;?Mhs{u!Qzg=Xd{gl z%~^)3=D1myW%*+)mAiSEXW4~<%W#XZNZbR(TT8bLOYD&cm~;~d{(-XiB$5^V!tOYjfFN$WPwa;cr1=ZwU>usVe#wMNGc4N4Z z8xOVo2CE!2laS_fU`vFDr)HG2+wD%L)9rS9yjmP83WHOyjXS3OS zK3^;r%jI&lTCLaX&1Q4e`|m^k|DW4`u3c}*mh4q){U`QYk7TR0dvNmM{AKIL-Q$as z*|%5Qcb>jKIQ{tj&5pkKb#eOX$J<-|*Sm*jpO@3_(bwbU*_WU1?mfTU+u4?fe*ryw BfVltw literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/notelemn.gif b/lefdef/doc/lefdefWN/images/notelemn.gif new file mode 100644 index 0000000000000000000000000000000000000000..479a88d3f83b722f8a83b4e0bc96457c1e6739f2 GIT binary patch literal 141 zcmV;80CN9FNk%w1VGRHc0J8u9|NsBBwY9CSt(=^kl$4Z=jEsAGdvkMhT3T94N=i97 zIVmYAAt50U5D*9m2mk;8A^8LW00031EC2ui01W^Q000C!Fvv-3HOf|X^kK{5gcYI) v!I4#hg9eIW72(2+^cz7_A literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/notequal.gif b/lefdef/doc/lefdefWN/images/notequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f3d74408318be926ba759044d1af33e32e6fdbc GIT binary patch literal 121 zcmZ?wbhEHbzY VN-uU_Tv6b;puzfyk2oWPH2|hgCG`LR literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/nu.gif b/lefdef/doc/lefdefWN/images/nu.gif new file mode 100644 index 0000000000000000000000000000000000000000..049486c79cd9d8d526b7d89f8ad0a2fe21bb7e35 GIT binary patch literal 124 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z+!1|!gKXr3vVSRN%4s#lL{j`9?o?P3Sedu>nu?axqCF#_NA(H-y{VV YmQ@a`j4XI~TAUhF6=h9la4=W{0MM!<(EtDd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/omega1.gif b/lefdef/doc/lefdefWN/images/omega1.gif new file mode 100644 index 0000000000000000000000000000000000000000..0009f0e3029e451f022cd6541d553efba0b73688 GIT binary patch literal 144 zcmZ?wbhEHb@#^7DIy*o~!o;O$k0C%cH1rHo?&Cm`>X7Wv5@fIj0EewD8~^|S literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/pareltbt.gif b/lefdef/doc/lefdefWN/images/pareltbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3c0f75b7d96b7af435ca7d4cadfc0da691f299c GIT binary patch literal 126 zcmZ?wbhEHbR~A2WZ@$fZfghVWe5P?QSOWmu4k>5= literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/parertbt.gif b/lefdef/doc/lefdefWN/images/parertbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..81fcda4e8e32ce249e416556201de738684ea355 GIT binary patch literal 127 zcmZ?wbhEHb_^@YMD_aw+u7lX)y{i^H?d3b37v($Su@ b#`l@%*;5jUi(1&*4osd=$)e@Y!e9*mS3xW2 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/parerttp.gif b/lefdef/doc/lefdefWN/images/parerttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..3479f8d9a92563e0c50a6b87dc38522ce8bd8b60 GIT binary patch literal 124 zcmZ?wbhEHb@#^7EOZ_p3at2<)%K5oV!FJ@d8KUq!y=OBj>Co XDeets^F*sk+xJ}17vXkcV6X-NE=VUT literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/partldif.gif b/lefdef/doc/lefdefWN/images/partldif.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f1928e773c45229ae7b2a67a86d9316c7ab688b GIT binary patch literal 137 zcmZ?wbhEHb@#^7Bhnro~wP%$x2U9WZfKkSj9kQX@pCW%rP%f kU&)qGoWRv-a{1yC n&X<19&MYg=H7)vagsEFZHPAzVPukC+aiUk#HO)>TMh0sDU9l|w literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/pi.gif b/lefdef/doc/lefdefWN/images/pi.gif new file mode 100644 index 0000000000000000000000000000000000000000..71444f3c50f9181ea24f57e885725eb1ee3df4d3 GIT binary patch literal 134 zcmZ?wbhEHbHR46R~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/prsprset.gif b/lefdef/doc/lefdefWN/images/prsprset.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1c8c73bf084fcdbc83b30a5fa6bf1b4702ee6f6 GIT binary patch literal 67 zcmZ?wbhEHbe+4F3%o41uZ?f3h$#Ft9M_0ND&6GZTz9y{)aSrKP2ml$4B&jD&=Qb8~ZRYin9s zT2fL{DJdx!7#Ii$2mk;8A^8LW00031EC2ui01f~S000C(Fvv-(y+NcR$B;!LOi433 zPSzw;;c#f+aue|e@!@=wqu{ATs>1li77WXw0Sq)~6$A=(z+_M(Yg4<`dMptDJI@F< AMgRZ+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/radical.gif b/lefdef/doc/lefdefWN/images/radical.gif new file mode 100644 index 0000000000000000000000000000000000000000..74fc200c7abf8a90bc528bcc3da1837531a657d1 GIT binary patch literal 78 zcmZ?wbhEHbL!; literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/refsbset.gif b/lefdef/doc/lefdefWN/images/refsbset.gif new file mode 100644 index 0000000000000000000000000000000000000000..410f8277cea4d67d77fdce2607d3c27a87dee28f GIT binary patch literal 118 zcmZ?wbhEHb~0+1c62$;n<`UY3@Yii(O75)vF7 z91KW6@h1x-0|O(24oD1S1_O(-!3odRdo8kiru~m|QavWd(Iv^#EwyD8<7`$Axjfe! LW$%6qGFSruC6FQZ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/refspset.gif b/lefdef/doc/lefdefWN/images/refspset.gif new file mode 100644 index 0000000000000000000000000000000000000000..8464b13226ef3b7727e52d91b6c95cf4505125dd GIT binary patch literal 124 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK?>gy(7%=83bvnS=+6uwAZbG%|JPU~_8r@D<{_ xe6eBcl2G<&XGaGU7STh?#IqxrjAp&9oD{^u-FlESR6(DMO{+k_{=6WAH2{BmE35zj literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/rho.gif b/lefdef/doc/lefdefWN/images/rho.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8c565914153cb35a245d77aecf480b1ee47ed94 GIT binary patch literal 134 zcmZ?wbhEHb@#^7Gr}Go~uocb4Z71b_a)W8X5XNm6`ldU`n#r h5$Vk(QtH7g&Dfj#OC%MO~V6!GVRr8UQw$C}scv literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/second.gif b/lefdef/doc/lefdefWN/images/second.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e65da28d0c0efce39715984712f8801348eeeda GIT binary patch literal 115 zcmZ?wbhEHb$;m-ML6(-5hK7cUii#2v z5*!>H3^1VhlZBCifssK6BmgplfyL0^gy-tL#S<2~>-s47-8*71uQ0+b*yps@*3<$M c(T9E|OI0SbJf7qrz{Aa`W)PrfD9B(90F2%y>i_@% literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/sigma1.gif b/lefdef/doc/lefdefWN/images/sigma1.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd4939b672a10f6dccbd67715280cea74990a72c GIT binary patch literal 135 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu$UN}@XR)SE}-4+)KOH>xM^ZgU literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/spade.gif b/lefdef/doc/lefdefWN/images/spade.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc55199c42f6251ea7cde8a4e2964f7687e6ff27 GIT binary patch literal 122 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z@lPs!gKZB5&@+*60S}OZbmWAK>;m^GM$ZG*Beu$i%O;*NS?~UU=0A( C93AEW literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/sumation.gif b/lefdef/doc/lefdefWN/images/sumation.gif new file mode 100644 index 0000000000000000000000000000000000000000..f65c1ddc6f666d05fa0e78b8555ab1797fbfd8e2 GIT binary patch literal 77 zcmZ?wbhEHbCMz{sEjk^z~)z@lPs!gKZ3MK6qAd3ddmm>S4(s*<(&(%RNdULR$SuoyKTpL26M H2ZJ>L%*-X* literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/therefor.gif b/lefdef/doc/lefdefWN/images/therefor.gif new file mode 100644 index 0000000000000000000000000000000000000000..95944f41d016e6bfe322c85717be224b389c76a3 GIT binary patch literal 111 zcmZ?wbhEHb@#^7TbUmo~s?aRki&lcO{v2gjg__N?m#|?)smtvTqnxzbi?iOm z`wuoiNS4WHrXi}f605+A?54DFA9-EgIk4lAd<>vaXoLihCKfP>V-A-AXw^EyN?%Wz zR_A?gJ;v_|JZ@5}macoWcE#Bl+FW%vKkn+cuX_UL=U{iH*OMiNa3~TJ7=;uAxX4Gh zNO>6Jt_J->%*s>ZcR%s hJ>a;WAd3EzgEB1uLDYXG9%EKL9a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/univrsal.gif b/lefdef/doc/lefdefWN/images/univrsal.gif new file mode 100644 index 0000000000000000000000000000000000000000..effc1a5fba72adb9b56c56f6ca69f9143c43666f GIT binary patch literal 135 zcmZ?wbhEHblCGj?*M&2x#Fav1TasHk$+uk*s%2`5+!_dnNVVz34P_0cY) literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/upsilon.gif b/lefdef/doc/lefdefWN/images/upsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8a2b3389f27abf4a7a8593e1fa193b2e606df46 GIT binary patch literal 133 zcmZ?wbhEHb0~jd&WMO1rU}Vq%@jzxUuoxMf@Lau?m9x_$woi%ktRpX@#^76XG5o~xHWnV~799CFaZ`=Q3wCJ}do2-n3N f(_dR`eWFvj;rsrW4bLQES=ihcU)b!zz+epkQ~WGS literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/video.gif b/lefdef/doc/lefdefWN/images/video.gif new file mode 100644 index 0000000000000000000000000000000000000000..f339ffb6bdd11220d4e530f1798597d12a1bab46 GIT binary patch literal 906 zcmV;519kjINk%w1VHyAz0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui02%-n000PY009UbDDa=bg9r&K1dxy+!iNP95^VSoqCrrnR8`Kp+#Yu g3~EznQ<*nQ{*?KYrO}s4v1-jab12ZBR|5h7JB8)3VgLXD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefWN/images/weierstr.gif b/lefdef/doc/lefdefWN/images/weierstr.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f9689b8080c0d57935d6802003b3e14b7def1e6 GIT binary patch literal 153 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 + + + + Table of Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF/DEF 5.8
+ +
+
+
+
+

+
+

Contents

+ +
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefWN/titlecopy.html b/lefdef/doc/lefdefWN/titlecopy.html new file mode 100644 index 00000000..7273e788 --- /dev/null +++ b/lefdef/doc/lefdefWN/titlecopy.html @@ -0,0 +1,220 @@ + + + + + What's New in LEF/DEF 5.8 -- What's New in LEF/DEF 5.8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
What's New in LEF/DEF 5.8
+ +
+
+
+
+

+
+

+
+

+ + What's New in LEF/DEF 5.8 +

+

Product Version 5.8
May 2017

+

© 2012 Cadence Design Systems, Inc. All rights reserved.
Printed in the United States of America.

+

Cadence Design Systems, Inc., 555 River Oaks Parkway, San Jose, CA 95134, USA

+

Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence) contained in this document are attributed to Cadence with the appropriate symbol. For queries regarding Cadence's trademarks, contact the corporate legal department at the address shown above or call 800.862.4522.

+

Open SystemC, Open SystemC Initiative, OSCI, SystemC, and SystemC Initiative are trademarks or registered trademarks of Open SystemC Initiative, Inc. in the United States and other countries and are used with permission.

+

All other trademarks are the property of their respective holders.

+

Restricted Print Permission: This publication is protected by copyright and any unauthorized use of this publication may violate copyright, trademark, and other laws. Except as specified in this permission statement, this publication may not be copied, reproduced, modified, published, uploaded, posted, transmitted, or distributed in any way, without prior written permission from Cadence. This statement grants you permission to print one (1) hard copy of this publication subject to the following conditions:

+ + + + +

Disclaimer: Information in this publication is subject to change without notice and does not represent a commitment on the part of Cadence. The information contained herein is the proprietary and confidential information of Cadence or its licensors, and is supplied subject to, and may be used only by Cadence's customer in accordance with, a written agreement between Cadence and its customer. Except as may be explicitly set forth in such agreement, Cadence does not make, and expressly disclaims, any representations or warranties as to the completeness, accuracy or usefulness of the information contained in this document. Cadence does not warrant that use of such information will not infringe any third party rights, nor does Cadence assume any liability for damages or costs of any kind that may result from use of such information.

+

Restricted Rights: Use, duplication, or disclosure by the Government is subject to restrictions as set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor.

+

 

+

 

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/DEFINEandALIAS.html b/lefdef/doc/lefdefref/DEFINEandALIAS.html new file mode 100644 index 00000000..4835bf11 --- /dev/null +++ b/lefdef/doc/lefdefref/DEFINEandALIAS.html @@ -0,0 +1,501 @@ + + + + + LEF/DEF 5.8 Language Reference -- 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

2 

+

ALIAS Statements

+

This chapter contains information about the following topics.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
ALIAS Statements
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
ALIAS Definition
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
ALIAS Examples
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
ALIAS Expansion
+
+

ALIAS Statements

+

You can use alias statements in LEF and DEF files to define commands or parameters associated with the library or design. An alias statement can appear anywhere in a LEF or DEF file as follows:

+
+ + &ALIAS  &&aliasName = aliasDefinition &ENDALIAS +
+

&ALIAS and &ENDALIAS are both reserved keywords and are not case sensitive. An alias statement has the following requirements:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
&ALIAS must be the first token in the line in which it appears.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
aliasName is string name and must appear on the same line as &ALIAS. It is case sensitive based on the value of NAMESCASENSITIVE in the LEF input, or the value of Input.Lef.Names.Case.Sensitive.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
aliasName cannot contain any of the following special characters: #, space, tab, or control characters.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
&ENDALIAS must be the last token in the line in which it appears.
+
+ +

ALIAS Definition

+

The alias name (aliasName) is an identifier for the associated alias definition (aliasDefinition). The data reader stores the alias definition in the database. If the associated alias name already exists in the database, a warning is issued and the existing definition is replaced.

+

Alias definitions are text strings with the following properties:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
aliasDefinition is any text excluding "&ENDALIAS".
+
+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
aliasDefinition text can expand to multiple lines.
+
+

ALIAS Examples

+

The following examples include legal and illegal alias statements:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following statement is legal.
+
+
+ + &ALIAS &&MAC = SROUTE ADDCELL AREA &&CORE &ENDALIAS +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following statement is illegal because MAC does not start with "&&".
+
+
+ + &ALIAS MAC = SROUTE AREA &&CORE &ENDALIAS +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following statement is illegal because &ALIAS is not the first token in this line.
+
+
+ + ( 100 200 ) &ALIAS &&MAC = SROUTE AREA &&CORE &ENDALIAS +
+ +
+ + $ALIAS $$ = INPUT LEF myfile.txt;
VERIFY LIBRARY
ENDALIAS
+
+

The following examples show legal and illegal alias names:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
"Engineer_change" is a legal alias name.
+
+
+ + &&Engineer_change +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
"&Version&History&&" is a legal alias name.
+
+
+ + &&&Version&History&& +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
"design history" is an illegal alias name. It contains a space character and is considered as two tokens: an aliasName token "&&design," and a non-aliasName token "history".
+
+
+ + &&design history +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
"someName#IO-pin-Num" is an illegal alias name. It contains a "#" character and is translated as one aliasName token "&&someName". The "#" is considered a comment character.
+
+
+ + &&someName#IO-pin-Num +
+

ALIAS Expansion

+

Alias expansion is the reverse operation of alias definition. The following is the syntax for alias expansion.

+
+ + &&aliasName +
+

where aliasName is any name previously defined by an alias statement. If an aliasName does not exist in the database, no substitution occurs.

+

You use aliases as string expansion parameters for LEF or DEF files. An alias can substitute for any token of a LEF or DEF file.

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/DEFSyntax.html b/lefdef/doc/lefdefref/DEFSyntax.html new file mode 100644 index 00000000..130ba31f --- /dev/null +++ b/lefdef/doc/lefdefref/DEFSyntax.html @@ -0,0 +1,8576 @@ + + + + + LEF/DEF 5.8 Language Reference -- 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

4 

+

DEF Syntax

+

This chapter contains information about the following topics:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
About Design Exchange Format Files
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
General Rules
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Character Information
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Name Escaping Semantics for Identifiers
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Escaping Semantics for Quoted Property Strings
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Order of DEF Statements
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF Statement Definitions
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Blockages
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Bus Bit Characters
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Components
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Design
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Die Area
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Divider Character
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Extensions
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Fills
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
GCell Grid
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Groups
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
History
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Nets
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Regular Wiring Statement
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Nondefault Rules
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Pins
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Pin Properties
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Property Definitions
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Regions
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Rows
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Scan Chains
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Slots
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Special Nets
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Special Wiring Statement
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Styles
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Technology
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Tracks
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Units
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Version
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Vias
+
+

About Design Exchange Format Files

+

A Design Exchange Format (DEF) file contains the design-specific information of a circuit and is a representation of the design at any point during the layout process. The DEF file is an ASCII representation using the syntax conventions described in "Typographic and Syntax Conventions".

+

DEF conveys logical design data to, and physical design data from, place-and-route tools. Logical design data can include internal connectivity (represented by a netlist), grouping information, and physical constraints. Physical data includes placement locations and orientations, routing geometry data, and logical design changes for backannotation. Place-and-route tools also can read physical design data, for example, to perform ECO changes.

+

For standard-cell-based/ASIC flow tools, floorplanning is part of the design flow. You typically use the various floorplanning commands to interactively create a floorplan. This data then becomes part of the physical data output for the design using the ROWS, TRACKS, GCELLGRID, and DIEAREA statements. You also can manually enter this data into DEF to create the floorplan.

+

It is legal for a DEF file to contain only floorplanning information, such as ROWS. In many cases, the DEF netlist information is in a separate format, such as Verilog, or in a separate DEF file. It is also common to have a DEF file that only contains a COMPONENTS section to pass placement information.

+

General Rules

+

Note the following information about creating DEF files:

+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF statements end with a semicolon ( ; ). You must leave a space before the semicolon.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Each section can be specified only once. Sections end with END SECTION.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
You must define all objects before you reference them except for the + ORIGINAL argument in the NETS section.
+
+

Character Information

+

LEF and DEF identifiers can contain any printable ASCII character, except space, tab, or new-line characters. This means the following characters are allowed along with all alpha-numeric characters:

+

! " # $ % & ` ( ) * + , / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

+

A LEF or DEF property string value is contained inside a pair of quotes, like this "<string>". The <string> value can contain any printable ASCII character as shown above, including space, tab, or new-line characters.

+

Some characters have reserved meanings unless escaped with \.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

[ ]

+
+

Default special characters for bus bits inside a net or pin name unless overridden by BUSBITCHARS

+
+

/

+
+

Default special character for hierarchy inside a net or component name unless overridden by DIVIDERCHAR

+
+

#

+
+

The comment character. If preceded by a space, tab, or new-line, everything after # until the next new-line is treated as a comment.

+
+

*

+
+

Matches any sequence of characters for SPECIALNETS or GROUPS component identifiers.

+
+

%

+
+

Matches any single character for SPECIALNETS or GROUPS component identifiers.

+
+

"

+
+

The start and end character of a property string value. It has no special meaning for an identifier.

+
+

\

+
+

The escape character

+
+

You can use the backslash (\) as an escape character before each of the special characters shown above. When the backslash precedes a character that has a special meaning in LEF or DEF, the special meaning of the character is ignored.

+

Name Escaping Semantics for Identifiers

+

Here are some examples depicting the use of the escape character (\) in identifiers:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
A DEF file with BUSBITCHARS "[]" and net or pin name:
+
+ + + + + + + + + + + + + + + + +
+
+

 

+
+

A[0]

+
+

is the 0th member of bus A

+
+

 

+
+

A<0>

+
+

is a scalar named A<0>

+
+

 

+
+

A\[0\]

+
+

is a scalar named A[0]

+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A DEF file with DIVIDERCHAR "/" and net or component names like:
+
+ + + + + + + + + + + + + + + + +
+
+

 

+
+

A/B/C

+
+

is a 3-level hierarchical name, where C is inside B and B is inside A

+
+

 

+
+

A/B\/C

+
+

is a 2-level hierarchical name where B/C is inside A

+
+

 

+
+

A\/B

+
+

is a flat name A/B

+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The " character has no special meaning for an identifier. So an identifier would not need a \ before a ". An identifier like:
+
+
name_with_"_in_it
+
or even
+
"_name_starts_with_qoute
+
is legal without a \.
+
+ + + + + +
+
+ + ParagraphBullet + +
+
An identifier that starts with # would be treated as a comment unless the \ is present like this:
+
+
\#_name_with_hash_for_first_char
+
Note, the # needs to be preceded by white-space to be treated as a comment char, so it has no special meaning inside an identifier. So an identifier like
+
name_with_#_in_it
+
is legal without a \.
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Pattern matching characters * or % inside SPECIALNETS or GROUPS component identifiers can be disabled like this:
+
+
+
GROUPS 1 ;
+
+
+
- myGroup i1/i2/\* ...
+
+
or
+
+
SPECIALNETS 1 ;
+
+
+
- VDD ( i1/i2/\* VDD ) ...
+
+
These will match the exact name i1/i2/* and not match i1/i2/i3 or other components starting with i1/i2/.
+
Note, the * and % have no special meaning in other identifiers, so no \ is needed for them.
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A real \ char in an identifier needs to be escaped like this:
+
+
name_with_\\_in_it ....
+
The first \ escapes the second \, so the real name is just name_with_\_in_it.
+

Escaping Semantics for Quoted Property Strings

+

Properties may have string type values, placed within double quotes ("). However, if you need to use a double quote as a part of the string value itself, you would need to precede it with the escape character (\) to avoid breaking the property syntax. The escape sequence `\"' is converted to `"' during parsing.

+

The example below depicts the use of the escape character in a quoted property string:

+
PROPERTY stringQuotedProp "string with \" quote and single backslash \and double backslash \\" ;
+

The actual value of the property in the database will be:

+

string with " quote and single backslash and double backslash\

+

Here:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The first \ escapes the " so it does not end the property string.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The next \ has no effect on the subsequent a character.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The first \ in \\ escapes the second \ character. This means that the second \ in \\ is treated as a real \ character, and it does not escape the final " character, which ends the property string.
+
+

Note that the other special characters like [ ] / # * % have no special meaning inside a property string and do not need to be escaped.

+

+ + LEF/DEF to LEF/DEF Equivalence +

+

In DEF syntax, \ is only used to escape characters that have a special meaning if they are not escaped.

+

Consider the following LEF/DEF header specification:

+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
LEFDEF/[] is equivalent to LEF or DEF with DIVIDERCHAR "/" and BUSBITCHARS "[]"
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
LEFDEF|<> is equivalent to LEF or DEF with DIVIDERCHAR "|" and BUSBITCHARS "<>"
+
+

In the following examples, <> are not special characters for LEFDEF/[] files and [] are not special characters for LEFDEF|<> files. Observe how the header settings (listed above) affect the semantic meaning of the names:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
A<0> with LEFDEF/[] is not equivalent to A<0> with LEFDEF|<>
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A<0> with LEFDEF/[] is equivalent to A\<0\> with LEFDEF|<>
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A[0] with LEFDEF/[] is equivalent to A<0> with LEFDEF|<>
+
+

+ + Verilog and DEF Equivalence +

+

For Verilog and DEF equivalence, consider the following DEF header specification:

+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
DEF/[] is equivalent to DEF with DIVIDERCHAR "/" and BUSBITCHARS "[]"
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
DEF|<> is equivalent to DEF with DIVIDERCHAR "|" and BUSBITCHARS "<>"
+
+

In the following examples (showing net names), <> are not special characters for DEF/[] files and [] are not special characters for DEF|<> files:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
A<0> in DEF/[] is equivalent to \A<0> in Verilog
+
+
A<0> in DEF|<> is equivalent to A[0] in Verilog (bit 0 of bus A)
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A[0] in DEF/[] is equivalent to A[0] in Verilog (bit 0 of bus A)
+
+
A[0] in DEF|<> is equivalent to \A[0] in Verilog
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A\<0\> in DEF/[] is equivalent to \A<0> in Verilog
+
+
A\<0\> in DEF|<> is equivalent to \A<0> in Verilog
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A\[0\] in DEF/[] is equivalent to \A[0] in Verilog
+
+
A\[0\] in DEF|<> is equivalent to \A[0] in Verilog *
+

The following example shows instance path names for Verilog and DEF equivalence:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
A/B in DEF/[] represents instance path A.B (instance A in the top module, with instance B inside the module referenced by instance A) in Verilog.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A\/B in DEF/[] represents instance \A/B in Verilog.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
A\/B/C in DEF/[] represents \A/B .C in Verilog (escaped instance \A/B in the top module, with instance C inside the module referenced by instance \A/B).
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The net and instance path A\/B/C/D[0] in DEF/[] will represent \A/B .C.D[0] in Verilog (escaped instance \A/B in the top module, with instance C inside the module referenced by instance \A/B, and bus D in that module with bit 0 being specified).
+
+

+ + Comparison of DEF and Verilog Escaping Semantics +

+

The DEF escape \ applies only to the next character and prevents the character from having a special meaning.

+

The Verilog escape \ affects the complete "token" and is terminated by a trailing white space (" ", Tab, Enter, etc.).

+

Order of DEF Statements

+

Standard DEF files can contain the following statements and sections. You can define the statements and sections in any order; however, data must be defined before it is used. For example, you must specify the UNITS statement before any statements that use values dependent on UNITS values, and VIAS statements must be defined before statements that use via names. If you specify statements and sections in the following order, all data is defined before being used.

+
+      [ VERSION statement ]
[ DIVIDERCHAR statement ]
[ BUSBITCHARS statement ]
DESIGN statement
[ TECHNOLOGY statement ]
[ UNITS statement ]
[ HISTORY statement ] ...
[ PROPERTYDEFINITIONS section ]
[ DIEAREA statement ]
[ ROWS statement ] ...
[ TRACKS statement ] ...
[ GCELLGRID statement ] ...
[ VIAS statement ]
[ STYLES statement ]
[ NONDEFAULTRULES statement ]
[ REGIONS statement ]
[ COMPONENTMASKSHIFT statement ]
[ COMPONENTS section ]
[ PINS section ]
[ PINPROPERTIES section ]
[ BLOCKAGES section ]
[ SLOTS section ]
[ FILLS section ]
[ SPECIALNETS section ]
[ NETS section ]
[ SCANCHAINS section ]
[ GROUPS section ]
[ BEGINEXT section ] ...
END DESIGN statement
+
+

DEF Statement Definitions

+

The following definitions describe the syntax arguments for the statements and sections that make up a DEF file. The statements and sections are listed in alphabetical order, not in the order they must appear in a DEF file. For the correct order, see Order of DEF Statements.

+

Blockages

+
+ [BLOCKAGES numBlockages ;
[- LAYER layerName
     [ + SLOTS | + FILLS]
     [ + PUSHDOWN]
     [ + EXCEPTPGNET]
     [ + COMPONENT compName]
     [ + SPACING minSpacing | + DESIGNRULEWIDTH effectiveWidth]
     [ + MASK maskNum]
          {RECT pt pt | POLYGON pt pt pt ...} ...
;] ...
[- PLACEMENT
     [ + SOFT | + PARTIAL maxDensity]
     [ + PUSHDOWN]
     [ + COMPONENT compName
       {RECT pt pt} ... 
;] ... +
+
+ END BLOCKAGES] +
+

Defines placement and routing blockages in the design. You can define simple blockages (blockages specified for an area), or blockages that are associated with specific instances (components). Only placed instances can have instance-specific blockages. If you move the instance, its blockage moves with it.

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

COMPONENT compName

+
+

Specifies a component with which to associate a blockage. Specify with LAYER layerName to create a blockage on layerName associated with a component. Specify with PLACEMENT to create a placement blockage associated with a component.

+
+

DESIGNRULEWIDTH effectiveWidth

+
+

 

+
+

Specifies that the blockage has a width of effectiveWidth for the purposes of spacing calculations. If you specify DESIGNRULEWIDTH, you cannot specify SPACING. As a lot of spacing rules in advanced nodes no longer just rely on wire width, DESIGNRULEWIDTH is not allowed for 20nm and below nodes.
Type: DEF database units

+
+

EXCEPTPGNET

+
+

Indicates that the blockage only blocks signal net routing, and does not block power or ground net routing.

+

This can be used above noise sensitive blocks, to prevent signal routing on specific layers above the block, but allow power routing connections.

+
+

FILLS

+
+

Creates a blockage on the specified layer where metal fill shapes cannot be placed.

+
+

LAYER layerName

+
+

Normally only cut or routing layers have blockages, but it is legal to create a blockage on any layer.

+

Note: Cut-layer blockages will prevent vias from being placed in that area.

+
+

MASK maskNum

+

 

+
+

Specifies which mask for double or triple patterning lithography to use for the specified shapes. The maskNum variable must be a positive integer. Most applications support values of only 1, 2, or 3. Shapes without any defined mask have no mask set (are uncolored).

+

For example,

+

+ - LAYER metal1 + PUSHDOWN + MASK 1 +

+
+ + RECT ( -300 -310 ) ( 320 330 )   #rectangle on mask 1 +
+
+ + RECT ( -150 -160 ) ( 170 180 );  #rectangle on mask 1 +
+
+

numBlockages

+
+

Specifies the number of blockages in the design specified in the BLOCKAGES section.

+
+

PARTIAL maxDensity

+
+

Indicates that the initial placement should not use more than maxDensity percentage of the blockage area for standard cells. Later placement of clock tree buffers, or buffers added during timing optimization ignore this blockage. The maxDensity value is calculated as:

+

standard cell area in blockage area/blockage area <= maxDensity

+

This can be used to reduce the density in a locally congested area, and preserve it for buffer insertion.
Type: Float
Value: Between 0.0 and 100.0

+
+

PLACEMENT

+
+

Creates a placement blockage. You can create a simple placement blockage, or a placement blockage attached to a specific component.

+
+

POLYGON pt pt pt

+
+

Specifies a sequence of at least three points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle. Each POLYGON statement defines a polygon generated by connecting each successive point, and then the first and last points. The pt syntax corresponds to a coordinate pair, such as x y. Specify an asterisk (*) to repeat the same value as the previous x or y value from the last point.

+
+

PUSHDOWN

+
+

Specifies that the blockage was pushed down into the block from the top level of the design.

+
+

RECT pt pt

+
+

Specifies the coordinates of the blockage geometry. The coordinates you specify are absolute. If you associate a blockage with a component, the coordinates are not relative to the component's origin.

+
+

SOFT

+
+

Indicates that the initial placement should not use the area, but later phases, such as timing optimization or clock tree synthesis, can use the blockage area. This can be used to preserve certain areas (such as small channels between blocks) for buffer insertion after the initial placement.

+
+

SLOTS

+
+

Creates a blockage on the specified layer where slots cannot be placed.

+
+

SPACING minSpacing

+
+

Specifies the minimum spacing allowed between this particular blockage and any other shape. The minSpacing value overrides all other normal LAYER-based spacing rules, including wide-wire spacing rules, end-of-line rules, parallel run-length rules, and so on. A blockage with SPACING is not "seen" by any other DRC check, except the simple check for minSpacing to any other routing shape on the same layer.

+

The minSpacing value cannot be larger than the maximum spacing defined in the SPACING or SPACINGTABLE for that layer. Tools may change larger values to the maximum spacing value with a warning.
Type: Integer, specified in DEF database units

+
+

+ Example 4-1  + Blockages Statements +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following BLOCKAGES section defines eight blockages in the following order: two metal2 routing blockages, a pushed down routing blockage, a routing blockage attached to component |i4, a floating placement blockage, a pushed down placement blockage, a placement blockage attached to component |i3, and a fill blockage.
+
+

+ BLOCKAGES 7 ; +

+
+ + - LAYER metal1
     RECT ( -300 -310 ) ( 320 330 )
+
+
+ +      RECT ( -150 -160 ) ( 170 180 ) ; +
+
+ + - LAYER metal1 + PUSHDOWN +
+
+ +      RECT ( -150 -160 ) ( 170 180 ) ; +
+
+ + - LAYER metal1 + COMPONENT |i4 +
+
+ +      RECT ( -150 -160 ) ( 170 180 ) ; +
+
+ + - PLACEMENT +
+
+ +      RECT ( -150 -160 ) ( 170 180 ) ; +
+
+ + - PLACEMENT + PUSHDOWN +
+
+ +      RECT ( -150 -160 ) ( 170 180 ) ; +
+
+ + - PLACEMENT + COMPONENT |i3 +
+
+ +      RECT ( -150 -160 ) ( 170 180 ) ; +
+
+ + - LAYER metal1 + FILLS +
+
+ +      RECT ( -160 -170 ) ( 180 190 ) ; +
+

+ END BLOCKAGES +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following BLOCKAGES section defines two blockages. One requires minimum spacing of 1000 database units for its rectangle and polygon. The other requires that its rectangle's width be treated as 1000 database units for DRC checking.
+
+

+ BLOCKAGES 2 ; +

+
+ + - LAYER metal1 +
+
+
+ SPACING 1000     #RECT and POLYGON require at least 1000 dbu spacing
+
+
+
RECT ( -300 -310 ) ( 320 300 )
+
+
+
POLYGON ( 0 0 ) ( * 100 ) ( 100 * ) ( 200 200 ) ( 200 0 ) ; #Has 45-degree                                                             #edge
+
+
+ + - LAYER metal1 +
+
+
+ DESIGNRULEWIDTH 1000 #Treat the RECT as 1000 dbu wide for DRC checking
+
+
+
RECT ( -150 -160 ) ( 170 180 ) ;
+
+

+ END BLOCKAGES +

+

Bus Bit Characters

+
+ BUSBITCHARS "delimiterPair" ; +
+

Specifies the pair of characters used to specify bus bits when DEF names are mapped to or from other databases. The characters must be enclosed in double quotation marks. For example:

+
+      BUSBITCHARS "()" ; +
+

If one of the bus bit characters appears in a DEF name as a regular character, you must use a backslash (\) before the character to prevent the DEF reader from interpreting the character as a bus bit delimiter.

+

If you do not specify the BUSBITCHARS statement in your DEF file, the default value is "[]".

+

Component Mask Shift

+
+ [COMPONENTMASKSHIFT layer1 [layer2 ...] ;] +
+

Defines which layers of a component are allowed to be shifted from the original mask colors in the LEF. This can be useful to shift all the layers of a specific component in order to align the masks with other component or router mask settings to increase routing density. This definition allows a specific component to compactly describe the mask shifting for that component.

+

All the listed layers must have a LEF MASK statement to indicate that the specified layer is either a two or three mask layer. The order of the layers must be increasing from the highest layer down to the lowest layer in the LEF layer order.

+

+ Example 4-2  + Component Mask Shift +

+

The following example indicates that any given component can shift the mask on layers M3, M2, VIA1, or M1:

+

+ COMPONENTMASKSHIFT M3 M2 VIA1 M1 ; +

+

This layer list is used to interpret the + MASKSHIFT shiftLayerMasks value for a specific component as shown in the example given below:

+

+ - i1/i2 AND2 +

+
+ + + MASKSHIFT 1102     #M3 shifted by 1, M2 by 1, VIA1 by 0, M1 by 2 +
+
+ + ... +
+

For details on components, see the Components section.

+

Components

+
+ COMPONENTS numComps ;
[- compName modelName
    [+ EEQMASTER macroName]
    [+ SOURCE {NETLIST | DIST | USER | TIMING}]
    [+ {FIXED pt orient | COVER pt orient | PLACED pt orient
           | UNPLACED} ]
    [+ MASKSHIFT shiftLayerMasks]
    [+ HALO [SOFT] left bottom right top]
    [+ ROUTEHALO haloDist minLayer maxLayer]
    [+ WEIGHT weight]
    [+ REGION regionName]
    [+ PROPERTY {propName propVal} ...]...
;] ... +
+
+ END COMPONENTS +
+

Defines design components, their location, and associated attributes.

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

compName modelName

+
+

Specifies the component name in the design, which is an instance of modelName, the name of a model defined in the library. A modelName must be specified with each compName.

+
+

COVER pt orient

+
+

Specifies that the component has a location and is a part of a cover macro. A COVER component cannot be moved by automatic tools or interactive commands. You must specify the component's location and its orientation.

+
+

EEQMASTER macroName

+
+

 

+
+

Specifies that the component being defined should be electrically equivalent to the previously defined macroName.

+
+

FIXED pt orient

+
+

Specifies that the component has a location and cannot be moved by automatic tools, but can be moved using interactive commands. You must specify the component's location and orientation.

+
+

HALO [SOFT] left bottom right top

+
+

 

+
+

Specifies a placement blockage around the component. The halo extends from the LEF macro's left edge(s) by left, from the bottom edge(s) by bottom, from the right edge(s) by right, and from the top edge(s) by top. The LEF macro edges are either defined by the rectangle formed by the MACRO SIZE statement, or, if OVERLAP obstructions exist (OBS shapes on a layer with TYPE OVERLAP), the polygon formed by merging the OVERLAP shapes.

+

If SOFT is specified, the placement halo is honored only during initial placement; later phases, such as timing optimization or clock tree synthesis, can use the halo area. This can be used to preserve certain areas (such as small channels between blocks) for buffer insertion.
Type: Integer, specified in DEF database units

+
+

MASKSHIFT shiftLayerMasks

+
+

 

+
+

Specifies shifting the cell-master masks used in double or triple patterning for specific layers of an instance of the cell-master. This is mostly used for standard cells where the placer or router may shift one or more layer mask assignments for better density.

+

The shiftLayerMasks variable is a hex-encoded digit, with one digit per multi-mask layer:

+

+ ...<thirdLayerShift><secondLayerShift><bottomLayerShift> +

+
+

 

+
+

The bottomLayerShift value is the mask-shift for the bottom-most multi-mask layer defined in the COMPONENTMASKSHIFT statement. The secondMaskShift, thirdMaskShift, and so on, are the shift values for each layer in order above the bottom-most multi-mask layer. The missing digits indicate that no shift is needed so 002 and 2 have the same meaning.

+

For 2-mask layers, the LayerShift value must be 0 or 1 and indicates:

+

0 - No mask-shift

+

1 - Shift the mask colors by 1 (mask 1->2, and 2->1)

+

For 3-mask layers, the LayerShift value can be 0, 1, 2, 3, 4, or 5 that indicates:

+

0 - No mask shift

+

1 - Shift by 1 (1->2, 2->3, 3->1)

+

2 - Shift by 2 (1->3, 2->1, 3->2)

+

3 - Mask 1 is fixed, swap 2 and 3

+

4 - Mask 2 is fixed, swap 1 and 3

+

5 - Mask 3 is fixed, swap 1 and 2

+

The purpose of 3, 4, 5 is for standard cells that have a fixed power-rail mask color, but the pins between the power-rails can still be shifted. Suppose you had a standard cell with mask 1 power rails, and three signal pins on mask 1, 2, and 3. A LayerShift of 3, will keep the mask 1 power rails and signal pin fixed on mask 1, while mask 2 and mask 3 signal pin shapes will swap mask colors.

+

See Example 4-3.

+
+

+ Example 4-3  + Mask Shift Layers for Components +

+

The following example shows a LEF section that has a three-mask layer defined for M1, and two-mask layer defined for layers VIA1 and M2:

+

+ COMPONENTMASKSHIFT M2 VIA1 M1 ; +

+

+ COMPONENTS 100 ; +

+

+ - i1/i2 AND2 +

+
+ + + MASKSHIFT 2          #M1 layer masks are shifted by 2, no shift for others +
+
+ + ... +
+

+ - i1/i3 OR2 +

+
+ + + MASKSHIFT 103        ##M1 layer has shift 3, VIA1 0, M2 1 +
+
+ + ... +
+

If an application shifts the layers M1, VIA1, and M2, then the above example indicates that the instance of AND2 cell shifts the M1 layer masks by 2. Since M1 is a three-mask layer, this shows that the cell-master M1 layer mask 1 shifts to 3, mask 2 shifts to 1, and mask 3 shifts to 2. The other layer masks are not shifted. The instance of OR2 cell shifts the M1 layer masks by 3. For a 3-mask layer this means keep mask 1 fixed, mask 2 shifts to 3, and mask 3 shifts to 2). The VIA1 layer does not shift and the M2 layer masks are shifted by 1 (for a two-mask layer this means that mask 1 shifts to 2, and 2 shifts to 1).

+

+ Example 4-4  + Component Halo +

+

The following statement creates a placement blockage for a "U-shaped" LEF macro, as illustrated in Figure 4-1 :

+
+ + - i1/i2 +
+
+
+ PLACED ( 0 0 ) N
+
+
+
+ HALO 100 0 50 200 ;
+
+

+ Figure 4-1  + Component Halo +

+


+

+ + numComps +

+
Specifies the number of components defined in the COMPONENTS section.
+

+ + PLACED pt orient +

+
Specifies that the component has a location, but can be moved using automatic layout tools. You must specify the component's location and orientation.
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a component property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ + REGION regionName +

+
Specifies a region in which the component must lie. regionName specifies a region already defined in the REGIONS section. If the region is smaller than the bounding rectangle of the component itself, the DEF reader issues an error message and ignores the argument. If the region does not contain a legal location for the component, the component remains unplaced after the placement step.
+

+ + ROUTEHALO haloDist minLayer maxLayer +

+
Specifies that signal routing in the "halo area" around the block boundary should be perpendicular to the block edge in order to reach the block pins. The halo area is the area within haloDist of the block boundary (see the Figure below). A routing-halo is intended to be used to minimize cross coupling between routing at the current level of the design, and routing inside the block. It has no effect on power routing. Note that this also means it is allowed to route in the "halo corners" because routing in the "halo corner" is not adjacent to the block boundary, and will not cause any significant cross-coupling with routing inside the block.
The routing halo exists for the routing layers between minLayer and maxLayer. The layer you specify for minLayer must be a lower routing layer than maxLayer.
Type: Integer, specified in DEF database units (haloDist); string that matches a LEF routing layer name (minLayer and maxLayer)
+

+ Example 4-5  + Route Halo Example +

+

For a U-shaped macro, the following component description results in the halo shown in Figure 4-2.

+
+ + - il/i2 +
+
+
+ PLACED ( 0 0 ) N
+
+
+
+ ROUTEHALO 100 metal1 metal3 ;
+
+

+ Figure 4-2  + Route Halo +

+


+

+ + SOURCE {NETLIST | DIST | USER | TIMING} +

+
Specifies the source of the component.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

DIST

+
+

Component is a physical component (that is, it only connects to power or ground nets), such as filler cells, well-taps, and decoupling caps.

+
+

     

+
+

NETLIST

+
+

Component is specified in the original netlist. This is the default value, and is normally not written out in the DEF file.

+
+

     

+
+

TIMING

+
+

Component is a logical rather than physical change to the netlist, and is typically used as a buffer for a clock-tree, or to improve timing on long nets.

+
+

     

+
+

USER

+
+

Component is generated by the user for some user-defined reason.

+
+

+ + UNPLACED +

+
Specifies that the component does not have a location.
+

+ + WEIGHT weight +

+
Specifies the weight of the component, which determines whether or not automatic placement attempts to keep the component near the specified location. weight is only meaningful when the component is placed. All non-zero weights have the same effect during automatic placement.
Default: 0
+

+ + Specifying Orientation +

+

If a component has a location, you must specify its location and orientation. A component can have any of the following orientations: N, S, W, E, FN, FS, FW, or FE.

+

Orientation terminology can differ between tools. The following table maps the orientation terminology used in LEF and DEF files to the OpenAccess database format.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF/DEF +

+
+

+ OpenAccess +

+
+

+ Definition +

+
+

N (North)

+
+

R0

+
+

+
+

S (South)

+
+

R180

+
+

+
+

W (West)

+
+

R90

+
+

+
+

E (East)

+
+

R270

+
+

+
+

FN (Flipped North)

+
+

MY

+
+

+
+

FS (Flipped South)

+
+

MX

+
+

+
+

FW (Flipped West)

+
+

MX90

+
+

+
+

FE (Flipped East)

+
+

MY90

+
+

+
+

Components are always placed such that the lower left corner of the cell is the origin (0,0) after any orientation. When a component flips about the y axis, it flips about the component center. When a component rotates, the lower left corner of the bounding box of the component's sites remains at the same placement location.

+

Design

+
+ DESIGN designName ; +
+

Specifies a name for the design. The DEF reader reports a warning if this name is different from that in the database. In case of a conflict, the just specified name overrides the old name.

+

Die Area

+
+ [DIEAREA pt pt [pt] ... ;] +
+

If two points are defined, specifies two corners of the bounding rectangle for the design. If more than two points are defined, specifies the points of a polygon that forms the die area. The edges of the polygon must be parallel to the x or y axis (45-degree shapes are not allowed), and the last point is connected to the first point. All points are integers, specified as DEF database units.

+

Geometric shapes (such as blockages, pins, and special net routing) can be outside of the die area, to allow proper modeling of pushed down routing from top-level designs into sub blocks. However, routing tracks should still be inside the die area.

+

+ Example 4-6  + Die Area Statements +

+

The following statements show various ways to define the die area.

+

+ DIEAREA ( 0 0 ) ( 100 100 ) ;                        #Rectangle from 0,0 to 100,100 +

+

+ DIEAREA ( 0 0 ) ( 0 100 ) ( 100 100 ) ( 100 0 ) ;    #Same rectangle as a polygon +

+

+ DIEAREA ( 0 0 ) ( 0 100 ) ( 50 100 ) ( 50 50 ) ( 100 50 ) ( 100 0 ) ; #L-shaped polygon +

+

Divider Character

+
+ DIVIDERCHAR "character" ; +
+

Specifies the character used to express hierarchy when DEF names are mapped to or from other databases. The character must be enclosed in double quotation marks. For example:

+
+ + DIVIDERCHAR "/" ; +
+

If the divider character appears in a DEF name as a regular character, you must use a backslash (\) before the character to prevent the DEF reader from interpreting the character as a hierarchy delimiter.

+

If you do not specify the DIVIDERCHAR statement in your LEF file, the default value is "/".

+

Extensions

+
+ [BEGINEXT "tag"
extensionText +
+
+ ENDEXT] +
+

Adds customized syntax to the DEF file that can be ignored by tools that do not use that syntax. You can also use extensions to add new syntax not yet supported by your version of LEF/DEF, if you are using version 5.1 or later. Add extensions as separate sections.

+

+ + extensionText +

+
Defines the contents of the extension.
+

+ + "tag" +

+
Identifies the extension block. You must enclose tag in quotes.
+

+ Example 4-7  + Extension Statement +

+

+ BEGINEXT "1VSI Signature 1.0" +

+
+ + CREATOR "company name" +
+
+ + DATE "timestamp" +
+
+ + REVISION "revision number" +
+

+ ENDEXT +

+

Fills

+
+ [FILLS numFills ;
[- LAYER layerName [+ MASK maskNum] [+ OPC]
    {RECT pt pt | POLYGON pt pt pt ...} ... ;] ...
[- VIA viaName [+ MASK viaMaskNum] [+ OPC] pt ... ;] ... +
+
+ END FILLS] +
+

Defines the rectangular shapes that represent metal fills in the design. Each fill is defined as an individual rectangle.

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

LAYER layerName

+
+

Specifies the layer on which to create the fill.

+
+

MASK maskNum

+
+

Specifies which mask for double or triple patterning lithography to use for the given rectangles or polygons. The maskNum variable must be a positive integer. Most applications support values of 1, 2, or 3 only. Shapes without any defined mask have no mask setting (are uncolored).

+
+

MASK viaMaskNum

+
+

Specifies which mask for double or triple patterning lithography to be applied to via shapes on each layer.

+

The viaMaskNum variable is a hex-encoded three digit value of the form:

+

<topMaskNum><cutMaskNum><bottomMaskNum>

+

For example, MASK 113 means that the top metal and cut layer maskNum is 1, and the bottom metal layer maskNum is 3. A value of 0 means the shape on that layer has no mask assignment (is uncolored), so 013 means the top layer is uncolored. If either the first or second digit is missing, they are assumed to be 0, so 013 and 13 mean the same thing. Most applications support maskNums of 0, 1, 2, or 3 for double or triple patterning.

+

The topMaskNum and bottomMaskNum variables specify which mask the corresponding metal shape belongs to. The via-master metal mask values have no effect.

+

For the cut layer, the cutMaskNum defines the mask for the bottom-most, and then the left-most cut. For multi-cut vias, the via-instance cut masks are derived from the via-master cut mask values. The via-master must have a mask defined for all the cut shapes and every via-master cut mask is "shifted" (from 1 to 2, 2 to1 for two mask layers, and from 1 to 2, 2 to 3, and 3 to 1 for three mask layers) so the lower-left cut matches the cutMaskNum value.

+

Similarly, for the metal layer, the topMaskNum/bottomMaskNum would define the mask for the bottom-most, then leftmost metal shape. For multiple disjoint metal shapes, the via-instance metal masks are derived from the via-master metal mask values. The via-master must have a mask defined for all of the metal shapes, and every via-master metal mask is "shifted" (1->2, 2->1 for two mask layers, 1->2, 2->3, 3->1 for three mask layers) so the lower-left cut matches the topMaskNum/bottomMaskNum value.

+

See Example 4-9.

+
+

numFills

+
+

Specifies the number of LAYER statements in the FILLS statement, not the number of rectangles.

+
+

OPC

+
+

Indicates that the FILL shapes require OPC correction during mask generation.

+
+

POLYGON pt pt pt

+
+

Specifies a sequence of at least three points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle. Each POLYGON statement defines a polygon generated by connecting each successive point, and then the first and last points. The pt syntax corresponds to a coordinate pair, such as x y. Specify an asterisk (*) to repeat the same value as the previous x or y value from the last point.

+
+

RECT pt pt

+
+

Specifies the lower left and upper right corner coordinates of the fill geometry.

+
+

VIA viaName pt

+
+

Places the via named viaName at the specified (x y) location (pt). viaName must be a previously defined via in the DEF VIAS or LEF VIA section.
Type: (pt) Integers, specified in DEF database units

+
+

+ Example 4-8  + Fills Statements +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following FILLS statement defines fill geometries for layers metal1 and metal2:
+
+
+ + FILLS 2 ; +
+
+
- LAYER metal1
+
+
+
    RECT ( 1000 2000 ) ( 1500 4000 )
+
+
+
    RECT ( 2000 2000 ) ( 2500 4000 )
+
+
+
    RECT ( 3000 2000 ) ( 3500 4000 ) ;
+
+
+
- LAYER metal2
+
+
+
    RECT ( 1000 2000 ) ( 1500 4000 )
+
+
+
    RECT ( 1000 4500 ) ( 1500 6500 )
+
+
+
    RECT ( 1000 7000 ) ( 1500 9000 )
+
+
+
    RECT ( 1000 9500 ) ( 1500 11500 ) ;
+
+
+ + END FILLS +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following FILLS statement defines two rectangles and one polygon fill geometries:
+
+
+ + FILLS 1 ; +
+
+
-LAYER metal1
+
+
+
   RECT ( 100 200 ) ( 150 400 )
+
+
+
   POLYGON ( 100 100 ) ( 200 200 ) ( 300 200 ) ( 300 100 )
+
+
+
   RECT ( 300 200 ) ( 350 400 ) ;
+
+
+ + END FILLS +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Shapes on the TRIMMETAL layers are written out in the FILLS section in DEF in the following format:
+
+
+ + - LAYER TM1 + MASK x RECT (x x) (x x) ; +
+
The following FILLS statement defines two rectangular shapes on the TRIMMETAL layer TM1, which is defined in a property statement in the masterslice layer section in LEF:
+
+ + FILLS 2 ; +
+
+ + - LAYER TM1 + MASK 1 RECT (30 28) (33 38) +
+
+ + - LAYER TM1 + MASK 2 RECT (36 23) (39 33) +
+
+ + ... +
+
+ + END FILLS +
+

+ Figure 4-3  + Trim Metal Layer Shapes in the FILLS Section +

+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following FILLS statement defines two rectangles and two via fill geometries for layer metal1. The rectangles and one of the via fill shapes require OPC correction.
+
+
+ + FILLS 3 ; +
+
+
-LAYER metal1 + OPC
+
+
+
   RECT ( 0 0 ) ( 100 100 )
+
+
+
   RECT ( 200 200 ) ( 300 300 ) ;
+
+
+
-VIA via26
+
+
+
   ( 500 500 )
+
+
+
   ( 800 800 ) ;
+
+
+
-VIA via28 + OPC
+
+
+
   ( 900 900 ) ;
+
+
+ + END FILLS +
+

+ Example 4-9  + Multi-Mask Patterns for Fills +

+

The following example shows multi-mask patterning for fills:

+
+ + - LAYER M1 + MASK 1 RECT ( 10 10 ) ( 11 11 ) ;  #RECT on MASK 1 +
+
+ + - LAYER M2 RECT ( 10 10 ) ( 11 11 ) ;           #RECT is uncolored +
+
+ + - VIA VIA1_1 + MASK 031 ( 10 10 ) ;              #VIA with top-cut-bot mask 031 +
+

This indicates that the:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
M1 rectangle shape is on MASK 1
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
M2 rectangle shape has no mask set and is uncolored
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
VIA1_1 via will have:
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
no mask set for the top metal shape - it is uncolored (topMaskNum is 0 in the 031 value). Note that the via-master color of the top metal shape does not matter.
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
mask 1 for the bottom metal shape (bottomMaskNum is 1 in the 031 value)
+
+ +

GCell Grid

+
+ [GCELLGRID
{X start DO numColumns+1 STEP space} ...
{Y start DO numRows+1 STEP space ;} ...] +
+

Defines the gcell grid for a standard cell-based design. Each GCELLGRID statement specifies a set of vertical (x) and horizontal (y) lines, or tracks, that define the gcell grid.

+

Typically, the GCELLGRID is automatically generated by a particular router, and is not manually created by the designer.

+

+ + DO numColumns+1 +

+
Specifies the number of columns in the grid.
+

+ + DO numRows+1 +

+
Specifies the number of rows in the grid.
+

+ + STEP space +

+
Specifies the spacing between tracks.
+

+ + X start, Y start +

+
Specify the location of the first vertical (x) and first horizontal (y) track.
+

+ + GCell Grid Boundary Information +

+

The boundary of the gcell grid is the rectangle formed by the extreme vertical and horizontal lines. The gcell grid partitions the routing portion of the design into rectangles, called gcells. The lower left corner of a gcell is the origin. The x size of a gcell is the distance between the upper and lower bounding vertical lines, and the y size is the distance between the upper and lower bounding horizontal lines.

+

For example, the grid formed by the following two GCELLGRID statements creates gcells that are all the same size (100 x 200 in the following):

+
+ + GCELLGRID X 1000 DO 101 STEP 100 ; +
+
+ + GCELLGRID Y 1000 DO 101 STEP 200 ; +
+

A gcell grid in which all gcells are the same size is called a uniform gcell grid. Adding GCELLGRID statements can increase the granularity of the grid, and can also result in a nonuniform grid, in which gcells have different sizes.

+

For example, adding the following two statements to the above grid generates a nonuniform grid:

+
+ + GCELLGRID X 3050 DO 61 STEP 100 ; +
+
+ + GCELLGRID Y 5100 DO 61 STEP 200 ; +
+

When a track segment is contained inside a gcell, the track segment belongs to that gcell. If a track segment is aligned on the boundary of a gcell, that segment belongs to the gcell only if it is aligned on the left or bottom edges of the gcell. Track segments aligned on the top or right edges of a gcell belong to the next gcell.

+

+ + GCell Grid Restrictions +

+

Every track segment must belong to a gcell, so gcell grids have the following restrictions:

+ + +

Gcells grids also have the following restrictions:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Each GCELLGRID statement must define two lines.
+
+ +

Groups

+
+ [GROUPS numGroups ;
[- groupName [compNamePattern ... ]
   [+ REGION regionNam]
   [+ PROPERTY {propName propVal} ...] ...
;] ... +
+
+ END GROUPS] +
+

Defines groups in a design.

+

+ + compNamePattern +

+
Specifies the components that make up the group. Do not assign any component to more than one group. You can specify any of the following:
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
A component name, for example C3205
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
A list of component names separated by spaces, for example, I01 I02 C3204 C3205
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
A pattern for a set of components, for example, IO* and C320*
+
+
Note: An empty group with no component names is allowed.
+

+ + groupName +

+
Specifies the name for a group of components.
+

+ + numGroups +

+
Specifies the number of groups defined in the GROUPS section.
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a group property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ + REGION regionName +

+
Specifies a rectangular region in which the group must lie. regionName specifies a region previously defined in the REGIONS section. If region restrictions are specified in both COMPONENT and GROUP statements for the same component, the component restriction overrides the group restriction.
+

History

+
+ [HISTORY anyText ;] ... +
+

Lists a historical record about the design. Each line indicates one record. Any text excluding a semicolon (;) can be included in anyText. The semicolon terminates the HISTORY statement. Linefeed and Return do not terminate the HISTORY statement. Multiple HISTORY lines can appear in a file.

+

Nets

+
+ NETS numNets ;
[- { netName
       [ ( {compName pinName | PIN pinName} [+ SYNTHESIZED] ) ] ...
   | MUSTJOIN ( compName pinName ) }
   [+ SHIELDNET shieldNetName ] ...
   [+ VPIN vpinName [LAYER layerName] pt pt
       [PLACED pt orient | FIXED pt orient | COVER pt orient] ] ...
   [+ SUBNET subnetName
       [ ( {compName pinName | PIN pinName | VPIN vpinName} ) ] ...
       [NONDEFAULTRULE rulename]
       [regularWiring] ...] ...
   [+ XTALK class]
   [+ NONDEFAULTRULE ruleName]
   [regularWiring] ...
   [+ SOURCE {DIST | NETLIST | TEST | TIMING | USER}]
   [+ FIXEDBUMP]
   [+ FREQUENCY frequency]
   [+ ORIGINAL netName]
   [+ USE {ANALOG | CLOCK | GROUND | POWER | RESET | SCAN | SIGNAL
             | TIEOFF}]
   [+ PATTERN {BALANCED | STEINER | TRUNK | WIREDLOGIC}]
   [+ ESTCAP wireCapacitance]
   [+ WEIGHT weight]
   [+ PROPERTY {propName propVal} ...] ...
;] ...
+
+
+ END NETS +
+

Defines netlist connectivity and regular-routes for nets containing regular pins. These routes are normally created by a signal router that can rip-up and repair the routing. The SPECIALNETS statement defines netlist connectivity and routing for special-routes that are created by "special routers" or "manually" and should not be modified by a signal router. Special routes are normally used for power-routing, fixed clock-mesh routing, high-speed buses, critical analog routes, or flip-chip routing on the top-metal layer to bumps.

+

 

+

Input arguments for a net can appear in the NETS section or the SPECIALNETS section. In case of conflicting values, the DEF reader uses the last value encountered. NETS and SPECIALNETS statements can appear more than once in a DEF file. If a particular net has mixed wiring or pins, specify the special wiring and pins first.

+

Arguments

+

+ + compName pinName +

+
Specifies the name of a regular component pin on a net or a subnet. LEF MUSTJOIN pins, if any, are not included; only the master pin (that is, the one without the MUSTJOIN statement) is included. If a subnet includes regular pins, the regular pins must be included in the parent net.
+

+ + COVER pt orient +

+
Specifies that the pin has a location and is a part of the cover macro. A COVER pin cannot be moved by automatic tools or by interactive commands. You must specify the pin's location and orientation.
+

+ + ESTCAP wireCapacitance +

+
Specifies the estimated wire capacitance for the net. ESTCAP can be loaded with simulation data to generate net constraints for timing-driven layout.
+

+ + FIXED pt orient +

+
Specifies that the pin has a location and cannot be moved by automatic tools, but can be moved by interactive commands. You must specify the pin's location and orientation.
+

+ + FIXEDBUMP +

+
Indicates that the bump net cannot be reassigned to a different pin.
It is legal to have a pin without geometry to indicate a logical connection, and to have a net that connects that pin to two other instance pins that have geometry. Area I/Os have a logical pin that is connected to a bump and an input driver cell. The bump and driver cell have pin geometries (and, therefore, should be routed and extracted), but the logical pin is the external pin name without geometry (typically the Verilog pin name for the chip).
Because bump nets are usually routed with special routing, they also can be specified in the
SPECIALNETS statement. If a net name appears in both the NETS and SPECIALNETS statements, the FIXEDBUMP keyword also should appear in both statements. However, the value only exists once within a given application's database for the net name.
Because DEF is often used incrementally, the last value read in is used. Therefore, in a typical DEF file, if the same net appears in both statements, the FIXEDBUMP keyword (or lack of it) in the NETS statement is the value that is used, because the NETS statement is defined after the SPECIALNETS statement.
For an example specifying the FIXEDBUMP keyword, see "Fixed Bump".
+

+ + FREQUENCY frequency +

+
Specifies the frequency of the net, in hertz. The frequency value is used by the router to choose the correct number of via cuts required for a given net, and by validation tools to verify that the AC current density rules are met. For example, a net described with + FREQUENCY 100 indicates the net has 100 rising and 100 falling transitions in 1 second.
Type: Float
+

+ + LAYER layerName +

+
Specifies the layer on which the virtual pin lies.
+

+ + MUSTJOIN (compName pinName) +

+
Specifies that the net is a mustjoin. If a net is designated MUSTJOIN, its name is generated by the system. Only one net should connect to any set of mustjoin pins. Mustjoin pins for macros are defined in LEF. The only reason to specify a MUSTJOIN net in DEF (identified arbitrarily by one of its pins) is to specify prewiring for the MUSTJOIN connection.
Otherwise, nets are generated automatically where needed for mustjoin connections specified in the library. If the input file specifies that a mustjoin pin is connected to a net, the DEF reader connects the set of mustjoin pins to the same net. If the input file does not specify connections to any of the mustjoin pins, the DEF reader creates a local MUSTJOIN net.
+

+ + netName +

+
Specifies the name for the net. Each statement in the NETS section describes a single net. There are two ways of identifying the net: netName or MUSTJOIN. If the netName is given, a list of pins to connect to the net also can be specified. Each pin is identified by a component name and pin name pair (compName pinName) or as an I/O pin (PIN pinName). Parentheses ensure readability of output. The keyword MUSTJOIN cannot be used as a netName.
+

+ + NONDEFAULTRULE ruleName +

+
By default the width of any route segment in the NETS regularWiring section is defined by the default width (LEF WIDTH statement value for the routing layer).

This keyword specifies a nondefault rule to use instead of the default rule when creating the net and wiring. When specified with SUBNET, identifies the nondefault rule to use when creating the subnet and its wiring.

The width of any route segment is defined by the corresponding NONDEFAULTRULE WIDTH for that layer.

Wrong-way Width Rules

Some technologies required larger widths for wrong-way routing than in the preferred direction. If the wrong-way width is larger than the default or NDR width, then the wrong-way width is used for wrong-way routes on that layer. The implicit routing extension is still half of the default or NDR width, even for wrong-way routes.

The following LEF DRC rules allow a WRONGDIRECTION keyword that defines wrong-way widths that will affect the width of any wrong-way routes in the DEF NETS section:

LEF58_WIDTH

LEF58_WIDTHTABLE

LEF58_SPANLENGTHTABLE

See the "Impact of Wrong-way Width Rules " section for examples and more details.
+

+ + numNets +

+
Specifies the number of nets defined in the NETS section.
+

+ + ORIGINAL netName +

+
Specifies the original net partitioned to create multiple nets, including the net being defined.
+

+ + PATTERN {BALANCED | STEINER | TRUNK | WIREDLOGIC} +

+
Specifies the routing pattern used for the net.
Default: STEINER
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

BALANCED

+
+

Used to minimize skews in timing delays for clock nets.

+
+

     

+
+

STEINER

+
+

Used to minimize net length.

+
+

      

+
+

TRUNK

+
+

Used to minimize delay for global nets.

+
+

       

+
+

WIREDLOGIC

+
+

Used in ECL designs to connect output and mustjoin pins before routing to the remaining pins.

+
+

+ + PIN pinName +

+
Specifies the name of an I/O pin on a net or a subnet.
+

+ + PLACED pt orient +

+
Specifies that the pin has a location, but can be moved during automatic layout. You must specify the pin's location and orientation.
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a net property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ + regularWiring +

+
Specifies the regular physical wiring for the net or subnet. For regular wiring syntax, see "Regular Wiring Statement".
+

+ + SHIELDNET shieldNetName +

+
Specifies the name of a special net that shields the regular net being defined. A shield net for a regular net is defined earlier in the DEF file in the SPECIALNETS section.
+


+

+ + SOURCE {DIST | NETLIST | TEST | TIMING | USER} +

+
Specifies the source of the net. The value of this field is preserved when input to the DEF reader.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

DIST

+
+

Net is the result of adding physical components (that is, components that only connect to power or ground nets), such as filler cells, well-taps, tie-high and tie-low cells, and decoupling caps.

+
+

     

+
+

NETLIST

+
+

Net is defined in the original netlist. This is the default value, and is not normally written out in the DEF file.

+
+

     

+
+

TEST

+
+

Net is part of a scanchain.

+
+

     

+
+

TIMING

+
+

Net represents a logical rather than physical change to netlist, and is used typically as a buffer for a clock-tree, or to improve timing on long nets.

+
+

     

+
+

USER

+
+

Net is user defined.

+
+

+ + SUBNET subnetName +

+
Names and defines a subnet of the regular net netName. A subnet must have at least two pins. The subnet pins can be virtual pins, regular pins, or a combination of virtual and regular pins. A subnet pin cannot be a mustjoin pin.
+

+ + SYNTHESIZED +

+
Used by some tools to indicate that the pin is part of a synthesized scan chain.
+

+ + USE {ANALOG | CLOCK | GROUND | POWER | RESET | SCAN | SIGNAL | TIEOFF} +

+
Specifies how the net is used.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

      

+
+

ANALOG

+
+

Used as an analog signal net.

+
+

     

+
+

CLOCK

+
+

Used as a clock net.

+
+

     

+
+

GROUND

+
+

Used as a ground net.

+
+

     

+
+

POWER

+
+

Used as a power net.

+
+

    

+
+

RESET

+
+

Used as a reset net.

+
+

      

+
+

SCAN

+
+

Used as a scan net.

+
+

      

+
+

SIGNAL

+
+

Used as a digital signal net.

+
+

      

+
+

TIEOFF

+
+

Used as a tie-high or tie-low net.

+
+

+ + VPIN vpinName pt pt +

+
Specifies the name of a virtual pin, and its physical geometry. Virtual pins can be used only in subnets. A SUBNET statement refers to virtual pins by the vpinName specified here. You must define each virtual pin in a + VPIN statement before you can list it in a SUBNET statement.
+

+ Example 4-10  + Virtual Pin +

+

The following example defines a virtual pin:

+

+ + VPIN M7K.v2 LAYER MET2 ( -10 -10 ) ( 10 10 ) FIXED ( 10 10 ) +

+
+ + + SUBNET M7K.2 ( VPIN M7K.v2 ) ( /PREG_CTRL/I$73/A I ) +
+
+ +   NONDEFAULTRULE rule1 +
+
+ +   ROUTED MET2 ( 27060 341440 ) ( 26880 * ) ( * 213280 ) +
+
+ +   M1M2 ( 95040 * ) ( * 217600 ) ( 95280 * ) +
+
+ +   NEW MET1 ( 1920 124960 ) ( 87840 * ) +
+
+ +   COVER MET2 ( 27060 341440 ) ( 26880 * ) +
+

+ + WEIGHT weight +

+
Specifies the weight of the net. Automatic layout tools attempt to shorten the lengths of nets with high weights. A value of 0 indicates that the net length for that net can be ignored. The default value of 1 specifies that the net should be treated normally. A larger weight specifies that the tool should try harder to minimize the net length of that net.
For normal use, timing constraints are generally a better method to use for controlling net length than net weights. For the best results, you should typically limit the maximum weight to 10, and not add weights to more than 3 percent of the nets.
Default: 1
Type: Integer
+

+ + XTALK class +

+
Specifies the crosstalk class number for the net. If you specify the default value (0), XTALK will not be written to the DEF file.
Default: 0
Type: Integer
Value: 0 to 200
+

Regular Wiring Statement

+
+ {+ COVER | + FIXED | + ROUTED | + NOSHIELD}
layerName [TAPER | TAPERRULE ruleName] [STYLE styleNum]
   routingPoints
[NEW layerName [TAPER | TAPERRULE ruleName] [STYLE styleNum]
   routingPoints
] ... +
+

Specifies regular wiring for the net.

+

+ + COVER +

+
Specifies that the wiring cannot be moved by either automatic layout or interactive commands. If no wiring is specified for a particular net, the net is unrouted. If you specify COVER, you must also specify layerName.
+

+ + FIXED +

+
Specifies that the wiring cannot be moved by automatic layout, but can be changed by interactive commands. If no wiring is specified for a particular net, the net is unrouted. If you specify FIXED, you must also specify layerName.
+

+ + layerName +

+
Specifies the layer on which the wire lies. You must specify layerName if you specify COVER, FIXED, ROUTED, or NEW. Specified layers must be routable; reference to a cut layer generates an error.
+

+ + NEW layerName +

+
Indicates a new wire segment (that is, there is no wire segment between the last specified coordinate and the next coordinate), and specifies the name of the layer on which the new wire lies. Noncontinuous paths can be defined in this manner.
+

+ + NOSHIELD +

+
Specifies that the last wide segment of the net is not shielded. If the last segment is not shielded, and is tapered, specify TAPER under the LAYER argument, instead of NOSHIELD.
+

+ + ROUTED +

+
Specifies that the wiring can be moved by the automatic layout tools. If no wiring is specified for a particular net, the net is unrouted. If you specify ROUTED, you must also specify layerName. An example of DEF NETS routing is shown in DEF NETS Examples.
+

+ + routingPoints +

+
Defines the center line coordinates of the route on layerName. For information about using routing points, see "Defining Routing Points".

As described above, the width of the routes is defined by the default width (e.g., LEF WIDTH statement on the routing layer) or a NONDEFAULTRULE width for the routing layer. In addition, some technologies require larger widths for wrong-way routes that may increase the width. See the "Impact of Wrong-way Width Rules " section for more details.
The routingPoints syntax is defined as follows:
{ ( x y [extValue] )
    {[MASK
maskNum] ( x y [extValue] )
    |[MASK
viaMaskNum] viaName [orient]
    |[MASK
maskNum] RECT ( deltax1 deltay1       deltax2 deltay2 )
    | VIRTUAL (
x y ) } } ...
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

  

+
+

extValue

+
+

Specifies the amount by which the wire is extended past the endpoint of the segment. The extension value must be greater than or equal to 0 (zero).
Default: Half the wire width
Type: Integer, specified in database units

+

Some tools only allow 0 or the WIREEXTENSION value from the LAYER or NONDEFAULTRULE statement.

+
+

 

+
+

MASK maskNum

+
+

 

+
+

 

+
+

Specifies which mask for double or triple patterning lithography to use for the next wire or RECT. The maskNum variable must be a positive integer - most applications support values of 1, 2, or 3 only. Shapes without any defined mask have no mask set (that is, they are uncolored).

+
+

 

+
+

MASK viaMaskNum

+
+

 

+
+

 

+
+

Specifies which mask for double or triple patterning lithography is to be applied to the next via's shapes on each layer.

+

The viaMaskNum variable is a hex-encoded three-digit value of the form:

+

<topMaskNum><cutMaskNum><bottomMaskNum>

+

For example, MASK 113 means that the top metal and cut layer maskNum is 1, and the bottom metal layer maskNum is 3. A value of 0 means that the shape on the layer has no mask assignment (is uncolored), so 013 means the top layer is uncolored. If either the first or second digit is missing, they are assumed to be 0, so 013 and 13 mean the same thing. Most applications support maskNums of 0, 1, 2, or 3 only for double or triple patterning.

+
+

 

+
+

 

+
+

The topMaskNum and bottomMaskNum variables specify which mask the corresponding metal shape belongs to. The via-master metal mask values have no effect.

+

For the cut layer, the cutMaskNum variable defines the mask for the bottom-most, and then the left-most cut. For multi-cut vias, the via-instance cut masks are derived from the via-master cut mask values. The via-master must have a mask defined for all the cut shapes and every via-master cut mask is "shifted" (from 1 to 2, and 2 to 1 for two mask layers, and from 1 to 2, 2 to 3, and 3 to1 for three mask layers), so the lower-left cut matches the cutMaskNum value.

+

Similarly, for the metal layer, the topMaskNum/bottomMaskNum would define the mask for the bottom-most, then leftmost metal shape. For multiple disjoint metal shapes, the via-instance metal masks are derived from the via-master metal mask values. The via-master must have a mask defined for all of the metal shapes, and every via-master metal mask is "shifted" (1->2, 2->1 for two mask layers, 1->2, 2->3, 3->1 for three mask layers) so the lower-left cut matches the topMaskNum/bottomMaskNum value.

+

See Example 4-11.

+
+

 

+
+

orient

+
+

Specifies the orientation of the viaName that precedes it, using the standard DEF orientation values of N, S, E, W, FN, FS, FE, and FW (See "Specifying Orientation" ).

+

If you do not specify orient, N (North) is the default non-rotated value used. All other orientation values refer to the flipping or rotation around the via origin (the 0,0 point in the via shapes). The via origin is still placed at the (x y) value given in the routing statement just before the viaName.

+

Note: Some tools do not support orientation of vias inside their internal data structures; therefore, they are likely to translate vias with an orientation into a different but equivalent via that does not require an orientation.

+
+

 

+
+

RECT ( deltax1 deltay1 deltax2 deltay2 )

+
+

 

+
+

 

+
+

Indicates that a rectangle is created from the previous ( x y ) routing point using the delta values. The RECT values leave the current point and layer unchanged.

+

See Example 4-12.

+
+

+
+

viaName

+
+

Specifies a via to place at the last point. If you specify a via, layerName for the next routing coordinates (if any) is implicitly changed to the other routing layer for the via. For example, if the current layer is metal1, a via12 changes the layer to metal2 for the next routing coordinates.

+
+

 

+
+

VIRTUAL ( x y )

+
+

 

+
+

 

+
+

 

+
+

Indicates that there is a virtual (non-physical zero-width) connection between the previous point and the new ( x y ) point. An '*' indicates that the x or y value is to be used from the previous point. The layer remains unchanged.

+

You can use this keyword to retain the symbolic routing graph.

+

See Example 4-12.

+
+

+
+

( x y )

+
+

Specifies the route coordinates. You cannot specify a route with zero length.

+

For more information, see "Specifying Coordinates".
Type: Integer, specified in database units

+
+

+ + STYLE styleNum +

+
Specifies a previously defined style from the STYLES section in this DEF file. If a style is specified, the wire's shape is defined by the center line coordinates and the style.
+

+ + TAPER +

+
Specifies that the next contiguous wire segment on layerName is created using the default rule.
+

+ + TAPERRULE ruleName +

+
Specifies that the next contiguous wire segment on layerName is created using the specified nondefault rule.
+

+ Example 4-11  + Multi-mask Patterns for Routing Points +

+

The following example shows a routing statement that specifies three-mask layers M1 and VIA1, and a two-mask layer M2:

+

+ + ROUTED M1 (10 0 ) MASK 3 (10 20 ) VIA1_1 +

+

+   NEW M2 ( 10 10 ) (20 10) MASK 1 ( 20 20 ) MASK 031 VIA1_2 ; +

+

This indicates that the:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
M1 wire shape (10 0) to (10 20) belongs to mask 3
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
VIA1_1 via has no preceding MASK statement so all the metal and cut shapes have no mask and are uncolored
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
first NEW M2 wire shape (10 10) to (20 10) has no mask set and is uncolored
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
second M2 wire shape (20 10) to (20 20) is on mask 1
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
VIA1_2 via has a MASK 031 (it can be MASK 31 also) so:
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
topMaskNum is 0 in the 031 value, so no mask is set for the top metal (M2) shape
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
bottomMaskNum is 1 in the 031 value, so mask 1 is used for the bottom metal (M1) shape
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
cutMaskNum is 3 in the 031 value, so the bottom-most, and then the left-most cut of the via-instance is mask 3. The mask for the other cuts of the via-instance are derived from the via-master by "shifting" the via-master's cut masks to match. So if the via-master's bottom-left cut is mask 1, then the via-master cuts on mask 1 become mask 3 for the via-instance, and similarly cuts on 2 shift to 1, and cuts on 3 shift to 2, as shown in Figure 4-4.
+
+

+ Figure 4-4  + Via-master multi-mask patterns +

+


+

+ Example 4-12  + Routing Points - Usage of Virtual and Rect +

+

Figure 4-5 shows the results of the following routing statement:

+
+ + + ROUTED M1 ( 0 0 ) ( 5 0 ) VIRTUAL ( 7 1 ) RECT ( -3 0 -1 2 ) ( 7 7 ) ; +
+

+ Figure 4-5  + Routing Points - Usage of Virtual and Rect +

+


+

+ + Defining Routing Points +

+

Routing points define the center line coordinates of the route for a specified layer. Routes that are 90 degrees, have a width defined by the routing rule for this wire, and extend from one coordinate (x y) to the next coordinate.

+

If either endpoint has an extension value (extValue), the wire is extended by that amount past the endpoint. Some applications require the extension value to be 0, half of the wire width, or the same as the routing rule wire extension value. If you do not specify an extension value, the default value of half of the wire width is used.

+

If a coordinate with an extension value is specified after a via, the wire extension is added to the beginning of the next wire segment after the via (zero-length wires are not allowed).

+

If the wire segment is a 45-degree edge, and no STYLE is specified, the default octagon style is used for the endpoints. The routing rule width must be an even multiple of the manufacturing grid in order to keep all of the coordinates of the resulting outer wire boundary on the manufacturing grid.

+

If a STYLE is defined for 90-degree or 45-degree routes, the routing shape is defined by the center line coordinates and the style. No corrections, such as snapping to manufacturing grid, can be applied, and any extension values are ignored. The DEF file should contain values that are already snapped, if appropriate. The routing rule width indicates the desired user width, and represents the minimum allowed width of the wire that results from the style when the 45-degree edges are properly snapped to the manufacturing grid.

+

+ + Specifying Coordinates +

+

To maximize compactness of the design files, the coordinates allow for the asterisk ( * ) convention. Here, ( x * ) indicates that the y coordinate last specified in the wiring specification is used; ( * y ) indicates that the x coordinate last specified is used. Use
* * extValue ) to specify a wire extension at a via.

+

Each coordinate sequence defines a connected orthogonal path through the points. The first coordinate in a sequence must not have an * element.

+

Because nonorthogonal segments are not allowed, subsequent points in a connected sequence must create orthogonal paths. For example, the following sequence is a valid path:

+
+ + ( 100 200 ) ( 200 200 ) ( 200 500 ) +
+

The following sequence is an equivalent path:

+
+ + ( 100 200 ) ( 200 * ) ( * 500 ) +
+

The following sequence is not valid because it represents a nonorthogonal segment.

+
+ + ( 100 200 ) ( 300 500 ) +
+
+ +   +
+

Impact of Wrong-way Width Rules

+

Some technologies require larger widths for wrong-way routing than in the preferred direction. If the wrong-way width is larger than the default or NDR width, then the wrong-way width is used for wrong-way routes on that layer. The implicit routing extension is still half of the default or NDR width, even for wrong-way routes.

+

Some older tools may not understand this behavior. Normally, they will still read/write and round-trip the DEF routing properly, but they may not understand that the width is slightly larger for wrong-way routes. If these tools check wrong-way width, then the DRC rules may flag false violations. RC extraction that does not understand the wrong-way width will also be incorrect, although wrong-way routes are generally short and the width difference is small, so the RC error is normally negligible.

+

The following LEF DRC rules allow a WRONGDIRECTION keyword that defines wrong-way widths that will affect the width of any wrong-way routes in the DEF NETS section:

+

 

+ + + + + + + + + + + + + +
+
+

LEF58_WIDTH

+
+

Defines the default routing width to use for all regular wiring

+

on the layer.

+
+

LEF58_WIDTHTABLE

+
+

Defines all the allowable legal widths on the routing layer.

+
+

LEF58_SPANLENGTHTABLE

+
+

Defines all the allowable legal span lengths on the routing

+

layer.

+
+

These width rules are mutually exclusive, so only one of the 3 rules is allowed on one routing layer.

+

The full syntax for WIDTHTABLE and SPANLENGTHTABLE have an optional ORTHOGONAL keyword or ORTHOGONAL keyword with a value. The ORTHOGONAL keyword and any value after it can be ignored, and has no effect on DEF NETS routing interpretation.

+

The full syntax for these rules is:

+
+ WIDTH defaultWidth ; +
+

Along with:

+
+ PROPERTY LEF58_WIDTH +
+
+    "WIDTH minWidth [WRONGDIRECTION] ;" ; +
+

Or

+
+ PROPERTY LEF58_SPANLENGTHTABLE +
+
+ "SPANLENGTHTABLE {spanLength} ... [WRONGDIRECTION] +
+
+    [ORTHOGONAL length] +
+
+ ; " ; +
+

Or

+
+ PROPERTY LEF58_WIDTHTABLE +
+
+    "WIDTHTABLE {width}...[WRONGDIRECTION] [ORTHOGONAL] +
+
+      ];" ; +
+

For more information on LEF width rules, see Layer(Routing) section in the "LEF Syntax" chapter in the LEF/DEF Language Reference.

+

DEF NETS Examples

+

+ Example 4-13  + Impact of default and nondefault rules on wrong-way segment +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
This following example shows how LEF width rules will affect the width of any wrong-way routes in the DEF NETS section. An example of each type of rule (WIDTH, WIDTHTABLE, and SPANLENGTHTABLE) is shown below for METAL2:
+
+
+ + LAYER METAL2 +
+
+ +    ... +
+
+ +    DIRECTION VERTICAL ; +
+
+ +    #0.6 is the default routing rule width in the vertical direction +
+
+ +    WIDTH 0.06 ; +
+
+ +    #wrong direction (horizontal) metal width must be >= 0.12 +
+
+ +    PROPERTY LEF58_WIDTH +
+
+ +       "WIDTH 0.12 WRONGDIRECTION ; " ; +
+
+ + ... +
+
+ + END METAL2 +
+
or
+
+ + LAYER METAL2 +
+
+ +    ... +
+
+ +    DIRECTION VERTICAL ; +
+
+ +    #0.06 is the default routing rule width in the vertical direction +
+
+ +    WIDTH 0.06 ; +
+
+ +    #wrong direction (horizontal) metal width must be 0.12, 0.16 or >= 0.20 +
+
+ +    PROPERTY LEF58_WIDTHTABLE +
+
+ +       "WIDTHTABLE 0.06 0.08 0.12 0.16 0.20 ; +
+
+ +        WIDTHTABLE 0.12 0.16 0.20 WRONGDIRECTION ; " ; +
+
+ + ... +
+
+ + END METAL2 +
+
or
+
+ + LAYER METAL2 +
+
+ +    ... +
+
+ +    DIRECTION VERTICAL ; +
+
+ +    #0.06 is the default routing rule width in the vertical direction +
+
+ +    WIDTH 0.06 ; +
+
+ +    #wrong direction (horizontal) metal width must be 0.12, 0.16 or >= 0.20 +
+
+ +    PROPERTY LEF58_SPANLENGTHTABLE +
+
+ +       "SPANLENGTHTABLE 0.06 0.08 0.12 0.16 0.20 ; +
+
+ +        SPANLENGTHTABLE 0.12 0.16 0.20 WRONGDIRECTION ; " ; +
+
+ + ... +
+
+ + END METAL2 +
+
For the above rules, any METAL2 vertical routes are in the preferred direction so they will have the normal widths and extensions as given by the default rule width, or the NONDEFAULTRULE width definition. The horizontal routes are in the wrong-direction, so they will use the first WRONGDIRECTION value in the rules above, that is greater than or equal to the preferred-direction width.
+
If the rule width is larger than the largest wrong-direction value, then the wrong-direction width is the same as the rule width as shown for NDR7 below.
+
The table below shows examples of different routing rule widths and the corresponding vertical and horizontal route widths and extensions for the WIDTHTABLE and SPANLENGTHTABLE rules shown above. They both have 0.12, 0.16, and 0.20 as the legal WRONGDIRECTION width values.
+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Rule +

+
+

+ Rule width +

+
+

+ Vertical Route Width +

+
+

+ Vertical Route Extension +

+
+

+ Horizontal Route Width +

+
+

+ Horizontal Route Extension +

+
+

default

+
+

0.06

+
+

0.06

+
+

0.03

+
+

0.12

+
+

0.03

+
+

NDR1

+
+

0.08

+
+

0.08

+
+

0.04

+
+

0.12

+
+

0.04

+
+

NDR2

+
+

0.12

+
+

0.12

+
+

0.06

+
+

0.12

+
+

0.06

+
+

NDR3

+
+

0.14

+
+

0.14

+
+

0.07

+
+

0.16

+
+

0.07

+
+

NDR4

+
+

0.16

+
+

0.16

+
+

0.08

+
+

0.16

+
+

0.08

+
+

NDR5

+
+

0.18

+
+

0.18

+
+

0.09

+
+

0.20

+
+

0.09

+
+

NDR6

+
+

0.20

+
+

0.20

+
+

0.10

+
+

0.20

+
+

0.10

+
+

NDR7

+
+

0.30

+
+

0.30

+
+

0.15

+
+

0.30

+
+

0.15

+
+
For example, the default rule in the table shows that a vertical route in the NETS section will have a width of 0.06 μm with extension of 0.03 μm, while a horizontal route will have a wrong-way width of 0.12 μm with extension 0.03 μm, as shown in the DEF NETS routing example below:
+
+ + - NET1 (...) +
+
+ +    + ROUTED METAL2 ( 1 0 ) ( 1 2 ) ( 3 2 ) ( 3 4 ) ; +
+

+ Figure 4-6  + Default rule on wrong way segment +

+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
NDR1 has a width of 0.08 μm, so it will use the wrong-way width of 0.12, because 0.8 is less than or equal to 0.12 (the first wrong-direction width value). So a vertical route will have a width of 0.08 μm with extension of 0.04 μm on a vertical route, while a horizontal route will have a width of 0.12 μm with extension 0.04 μm:
+
+
+ + - NET2 (...) +
+
+ +    + NONDEFAULTRULE NDR1 +
+
+ +    + ROUTED METAL2 ( 1 0 ) ( 1 3 ) ( 4 3 ) ( 4 5 ) ; +
+
+ +   +
+

+ Figure 4-7  + Non-Default rule on wrong way segment +

+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
NDR4 in the table has a width of 0.16 μm. Width of 0.16 is larger than the first wrongdirection value of 0.12, but is less than or equal to the second wrong-direction value of 0.16, so it will use the wrong-way width of 0.16. In this case both the vertical and horizontal routes will have a width of 0.16 μm with extension of 0.08 μm.
+
+
+ + - NET3 (...) +
+
+ +    + NONDEFAULTRULE NDR4 +
+
+ +    + ROUTED METAL2 (1 0) (1 3) (4 3) (4 4) ; +
+
+ +   +
+

+ Figure 4-8  + Non-Default rule on wrong way segment +

+


+

+ + Specifying Orientation +

+

If you specify the pin's placement status, you must specify its location and orientation. A pin can have any of the following orientations: N, S, W, E, FN, FS, FW, or FE.

+

Orientation terminology can differ between tools. The following table maps the orientation terminology used in LEF and DEF files to the OpenAccess database format.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF/DEF +

+
+

+ OpenAccess +

+
+

+ Definition +

+
+

N (North)

+
+

R0

+
+

+
+

S (South)

+
+

R180

+
+

+
+

W (West)

+
+

R90

+
+

+
+

E (East)

+
+

R270

+
+

+
+

FN (Flipped North)

+
+

MY

+
+

+
+

FS (Flipped South)

+
+

MX

+
+

+
+

FW (Flipped West)

+
+

MX90

+
+

+
+

FE (Flipped East)

+
+

MY90

+
+

+
+

+ Example 4-14  + Shielded Net +

+

The following example defines a shielded net:

+

+ NETS 1 ; +

+
+ + - my_net ( I1 CLK ) ( BUF OUT ) +
+
+ + + SHIELDNET VSS +
+
+ + + SHIELDNET VDD +
+
+ +    ROUTED +
+
+ + MET2 ( 14000 341440 ) ( 9600 * ) ( * 282400 ) +
+
+ + M1M2 ( 2400 * ) +
+
+ + + NOSHIELD MET2 ( 14100 341440 ) ( 14000 * ) +
+
+ + + TAPER MET1 ( 2400 282400 ) ( 240 * ) +
+

+ END NETS +

+

Nondefault Rules

+
+ NONDEFAULTRULES numRules ;
{- ruleName
      [+ HARDSPACING]
      {+ LAYER layerName
           WIDTH minWidth
           [DIAGWIDTH diagWidth]
           [SPACING minSpacing]
           [WIREEXT wireExt]
      } ...
      [+ VIA viaName] ...
      [+ VIARULE viaRuleName] ...
      [+ MINCUTS cutLayerName numCuts] ...
      [+ PROPERTY {propName propVal} ...] ...
;} ... +
+
+ END NONDEFAULTRULES +
+

Defines any nondefault rules used in this design that are not specified in the LEF file. This section can also contain the default rule and LEF nondefault rule definitions for reference. These nondefault rule names can be used anywhere in the DEF NETS section that requires a nondefault rule name.

+

If a nondefault rule name collides with an existing LEF or DEF nondefault rule name that has different parameters, the application should use the DEF definition when reading this DEF file, though it can change the DEF nondefault rule name to make it unique. This is typically done by adding a unique extension, such as _1 or _2 to the rule name.

+

All vias must be previously defined in the LEF VIA or DEF VIAS sections. Every nondefault rule must specify a width for every layer. If a nondefault rule does not specify a via or via rule for a particular routing-cut-routing layer combination, then there must be a VIARULE GENERATE DEFAULT rule that it inherited for that combination.

+

+ + DIAGWIDTH diagWidth +

+
Specifies the diagonal width for layerName, when 45-degree routing is used.
Default: 0 (no diagonal routing allowed)
Type: Integer, specified in DEF database units
+

+ + HARDSPACING +

+
Specifies that any spacing values that exceed the LEF LAYER ROUTING spacing requirements are "hard" rules instead of "soft" rules. By default, routers treat extra spacing requirements as soft rules that are high cost to violate, but not real spacing violations. However, in certain situations, the extra spacing should be treated as a hard, or real, spacing violation, such as when the route will be modified with a post-process that replaces some of the extra space with metal.
+

+ + LAYER layerName +

+
Specifies the layer for the various width and spacing values. layerName must be a routing layer. Each routing layer must have at least a minimum width specified.
+

+ + MINCUTS cutLayerName numCuts +

+
Specifies the minimum number of cuts allowed for any via using the specified cut layer. All vias (generated or fixed vias) used for this nondefault rule must have at least numCuts cuts in the via.
Type: (numCuts) Positive integer
+

+ + numRules +

+
Specifies the number of nondefault rules defined in the NONDEFAULTRULES section.
+

+ + PROPERTY propName propValue +

+
Specifies a property for this nondefault rule. The propName must be defined as a NONDEFAULTRULE property in the PROPERTYDEFINITIONS section, and the propValue must match the type for propName (that is, integer, real, or string).
+

+ + +

+

+ + rulename +

+
Specifies the name for this nondefault rule. This name can be used in the NETS section wherever a nondefault rule name is allowed. The reserved name DEFAULT can be used to indicate the default routing rule used in the NETS section.
+

+ + SPACING minSpacing +

+
Specifies the minimum spacing for layerName. The LEF LAYER SPACING or SPACINGTABLE definitions always apply; therefore it is only necessary to add a SPACING value if the desired spacing is larger than the LAYER rules already require.
Type: Integer, specified in DEF database units.
+

+ + VIA viaName +

+
Specifies a previously defined LEF or DEF via to use with this rule.
+

+ + VIARULE viaRuleName +

+
Specifies a previously defined LEF VIARULE GENERATE to use with this routing rule. If no via or via rule is specified for a given routing-cut-routing layer combination, then a VIARULE GENERATE DEFAULT via rule must exist for that combination, and it is implicitly inherited.
+

+ + WIDTH minWidth +

+
Specifies the required minimum width allowed for layerName.
Type: Integer, specified in DEF database units
+

+ + WIREEXT wireExt +

+
Specifies the distance by which wires are extended at vias. Enter 0 (zero) to specify no extension. Values other than 0 must be greater than or equal to half of the routing width for the layer, as defined in the nondefault rule.
Default: Wires are extended half of the routing width
Type: Float, specified in microns
+

+ Example 4-15  + Nondefault Rules +

+

The following NONDEFAULTRULES statement is based on the assumption that there are VIARULE GENERATE DEFAULT rules for each routing-cut-routing combination, and that the default width is 0.3 μm.

+

+ NONDEFAULTRULES 5 ; +

+
+ + - doubleSpaceRule #Needs extra space, inherits default via rules +
+
+
+ LAYER metal1 WIDTH 200 SPACING 1000
+
+
+
+ LAYER metal2 WIDTH 200 SPACING 1000
+
+
+
+ LAYER metal3 WIDTH 200 SPACING 1000 ;
+
+
+ + - lowerResistance #Wider wires and double cut vias for lower resistance
             #and higher current capacity. No special spacing rules,
             #therefore the normal LEF LAYER specified spacing rules
             #apply. Inherits the default via rules.
+
+
+
+ LAYER metal1 WIDTH 600 #Metal1 is thinner, therefore a little wider
+
+
+
+ LAYER metal2 WIDTH 500
+
+
+
+ LAYER metal3 WIDTH 500
+
+
+
+ MINCUTS cut12 2 #Requires at least two cuts
+
+
+
+ MINCUTS cut23 2 ;
+
+
+ + - myRule #Use default width and spacing, change via rules. The
                #default via rules are not inherited.
+
+
+
+ LAYER metal1 WIDTH 200
+
+
+
+ LAYER metal2 WIDTH 200
+
+
+
+ LAYER metal3 WIDTH 200
+
+
+
+ VIARULE myvia12rule
+
+
+
+ VIARULE myvia23rule ;
+
+
+ + - myCustomRule #Use new widths, spacing and fixed vias. The default
                #via rules are not inherited because vias are defined.
+
+
+
+ LAYER metal1 WIDTH 500 SPACING 1000
+
+
+
+ LAYER metal2 WIDTH 500 SPACING 1000
+
+
+
+ LAYER metal3 WIDTH 500 SPACING 1000
+
+
+
+ VIA myvia12_custom1
+
+
+
+ VIA myvia12_custom2
+
+
+
+ VIA myvia23_custom1
+
+
+
+ VIA myvia23_custom2 ;
+
+

+ END NONDEFAULTRULES +

+

Pins

+
+ [PINS numPins ;
[ [- pinName + NET netName]
    [+ SPECIAL]
    [+ DIRECTION {INPUT | OUTPUT | INOUT | FEEDTHRU}]
    [+ NETEXPR "netExprPropName defaultNetName"]
    [+ SUPPLYSENSITIVITY powerPinName]
    [+ GROUNDSENSITIVITY groundPinName]
    [+ USE {SIGNAL | POWER | GROUND | CLOCK | TIEOFF | ANALOG
              | SCAN | RESET}]
    [+ ANTENNAPINPARTIALMETALAREA value [LAYER layerName]] ...
    [+ ANTENNAPINPARTIALMETALSIDEAREA value [LAYER layerName]] ...
    [+ ANTENNAPINPARTIALCUTAREA value [LAYER layerName]] ...
    [+ ANTENNAPINDIFFAREA value [LAYER layerName]] ...
    [+ ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4}] ...
    [+ ANTENNAPINGATEAREA value [LAYER layerName]] ...
    [+ ANTENNAPINMAXAREACAR value LAYER layerName] ...
    [+ ANTENNAPINMAXSIDEAREACAR value LAYER layerName] ...
    [+ ANTENNAPINMAXCUTCAR value LAYER layerName] ...
    [[+ PORT]
     [+ LAYER layerName
         [MASK maskNum]
         [SPACING minSpacing | DESIGNRULEWIDTH effectiveWidth]
           pt pt
     |+ POLYGON layerName
         [MASK maskNum]
         [SPACING minSpacing | DESIGNRULEWIDTH effectiveWidth]
           pt pt pt ...
     |+ VIA viaName
         [MASK viaMaskNum]
             pt] ...
     [+ COVER pt orient | FIXED pt orient | PLACED pt orient]
    ]...
; ] ...
+
+
+ END PINS] +
+

Defines external pins. Each pin definition assigns a pin name for the external pin and associates the pin name with a corresponding internal net name. The pin name and the net name can be the same.

+

When the design is a chip rather than a block, the PINS statement describes logical pins, without placement or physical information.

+

+ + ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} +

+
Specifies the oxide model for the pin. If you specify an ANTENNAMODEL statement, that value affects all ANTENNAGATEAREA and ANTENNA*CAR statements for the pin that follow it until you specify another ANTENNAMODEL statement. The ANTENNAMODEL statement does not affect ANTENNAPARTIAL*AREA and ANTENNADIFFAREA statements because they refer to the total metal, cut, or diffusion area connected to the pin, and do not vary with each oxide model.
Default: OXIDE1, for a new PIN statement

Because DEF is often used incrementally, if an ANTENNA statement occurs twice for the same oxide model, the last value specified is used.

Usually, you only need to specify a few ANTENNA values; however, for a block with six routing layers, it is possible to have six different ANTENNAPARTIAL*AREA values and six different ANTENNAPINDIFFAREA values per pin. It is also possible to have six different ANTENNAPINGATEAREA and ANTENNAPINMAX*CAR values for each oxide model on each pin.
+

+ Example 4-16  + Antenna Model Statement +

+

The following example describes the OXIDE1 and OXIDE2 models for pin clock1. Note that the ANTENNAPINPARTIALMETALAREA and ANTENNAPINDIFFAREA values are not affected by the oxide values.

+

+ PINS 100 ; +

+

+    - clock1 + NET clock1 +

+

+       ... +

+

+       + ANTENNAPINPARTIALMETALAREA 1000 LAYER m1 +

+

+       + ANTENNAPINDIFFAREA 500 LAYER m1 +

+

+       ... +

+

+       + ANTENNAMODEL OXIDE1                      #not required, but good practice +

+

+       + ANTENNAPINGATEAREA 1000 +

+

+       + ANTENNAMAXAREACAR 300 LAYER m1 +

+

+       ... +

+

+       + ANTENNAMODEL OXIDE2                      #start of OXIDE2 values +

+

+       + ANTENNAPINGATEAREA 2000 +

+

+       + ANTENNAMAXAREACAR 100 LAYER m1 +

+

+       ... +

+

 

+

+ + ANTENNAPINDIFFAREA value [LAYER layerName] +

+
Specifies the diffusion (diode) area to which the pin is connected on a layer. If you do not specify layerName, the value applies to all layers. This is not necessary for output pins.
Type: Integer
Value: Area specified in (DEF database units)2

For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAPINGATEAREA value [LAYER layerName] +

+
Specifies the gate area to which the pin is connected on a layer. If you do not specify layerName, the value applies to all layers. This is not necessary for input pins.
Type: Integer
Value: Area specified in (DEF database units)2

For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAPINMAXAREACAR value LAYER layerName +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value, using the metal area at or below the current pin layer, excluding the pin area itself. Use this to calculate the actual cumulative antenna ratio on the pin layer, or the layer above it.
Type: Integer

For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAPINMAXCUTCAR value LAYER layerName +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value, using the cut area at or below the current pin layer, excluding the pin area itself. Use this to calculate the actual cumulative antenna ratio for the cuts above the pin layer.
Type: Integer

For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAPINMAXSIDEAREACAR value LAYER layerName +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value, using the metal side wall area at or below the current pin layer, excluding the pin area itself. Use this to calculate the actual cumulative antenna ratio on the pin layer, or the layer above it.
Type: Integer

For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAPINPARTIALCUTAREA value [LAYER cutLayerName] +

+
Specifies the partial cut area above the current pin layer and inside the macro cell on a layer. If you do not specify layerName, the value applies to all layers. For hierarchical designs, only the cut layer above the I/O pin layer is needed for partial antenna ratio calculation.
Type: Integer
Value: Area specified in (DEF database units)2

For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAPINPARTIALMETALAREA value [LAYER layerName] +

+
Specifies the partial metal area connected directly to the I/O pin and the inside of the macro cell on a layer. If you do not specify layerName, the value applies to all layers. For hierarchical designs, only the same metal layer as the I/O pin, or the layer above it, is needed for partial antenna ratio calculation.
Type: Integer
Value: Area specified in (DEF database units)2

For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAPINPARTIALMETALSIDEAREA value [LAYER layerName] +

+
Specifies the partial metal side wall area connected directly to the I/O pin and the inside of the macro cell on a layer. If you do not specify layerName, the value applies to all layers. For hierarchical designs, only the same metal layer as the I/O pin, or the layer above it, is needed for partial antenna ratio calculation.
Type: Integer
Value: Area specified in (DEF database units)2

For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + COVER pt orient +

+
Specifies the pin's location, orientation, and that it is a part of the cover macro. A COVER pin cannot be moved by automatic tools or by interactive commands. If you specify a placement status for a pin, you must also include a LAYER statement.
+

+ + DIRECTION {INPUT | OUTPUT | INOUT | FEEDTHRU} +

+
Specifies the pin type. Most current tools do not usually use this keyword. Typically, pin directions are defined by timing library data, and not from DEF.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

INPUT

+
+

Pin that accepts signals coming into the cell.

+
+

     

+
+

OUTPUT

+
+

Pin that drives signals out of the cell.

+
+

     

+
+

INOUT

+
+

Pin that can accept signals going either in or out of the cell.

+
+

      

+
+

FEEDTHRU

+
+

Pin that goes completely across the cell.

+
+

+ + FIXED pt orient +

+
Specifies the pin's location, orientation, and that it's location cannot be moved by automatic tools, but can be moved by interactive commands. If you specify a placement status for a pin, you must also include a LAYER statement.
+

+ + GROUNDSENSITIVITY groundPinName +

+
Specifies that if this pin is connected to a tie-low connection (such as 1'b0 in Verilog), it should connect to the same net to which groundPinName is connected.

groundPinName
must match another pin in this PINS section that has a + USE GROUND attribute. The ground pin definition can follow later in this PINS section; it does not have to be defined before this pin definition. It is a semantic error to put this attribute on an existing ground pin. For an example, see Example 4-18.

Note:
GROUNDSENSITIVITY is useful only when there is more than one ground net connected to pins in the PINS section. By default, if there is only one net connected to all + USE GROUND pins, the tie-low connections are already implicitly defined (that is, tie-low connections are connected to the same net as any ground pin).
+

+ + MASK maskNum +

+
Specifies which mask from double or triple patterning to use for the specified shape. The maskNum variable must be a positive integer - most applications support values of 1, 2, or 3 only. Shapes without any defined mask do not have a mask set (are uncolored).
+

+ + MASK viaMaskNum +

+
Specifies which mask for double or triple patterning lithography is to be applied to via shapes on each layer.
The
viaMaskNum variable is a hex-encoded three digit value of the form:

<topMaskNum><cutMaskNum><bottomMaskNum>

For example, MASK 113 means the top metal and cut layer maskNum is 1, and the bottom metal layer maskNum is 3. A value of 0 indicates that the shape on that layer does not have a mask assignment (is uncolored), so 013 means the top layer is uncolored. If either the first or second digit is missing, they are assumed to be 0, so 013 and 13 mean the same thing. Most applications support maskNums of 0, 1, 2, or 3 for double or triple patterning.

The topMaskNum and bottomMaskNum variables specify which mask the corresponding metal shape belongs to. The via-master metal mask values have no effect.

For the cut-layer, the cutMaskNum variable defines the mask for the bottom-most, then the left-most cut in the North (R0) orientation. For multi-cut vias, the via-instance cut masks are derived from the via-master cut mask values. The via-master must have a mask defined for all of the cut shapes and every via-master cut mask is "shifted" (from 1 to 2 and 2 to1 for two mask layers, and from 1 to 2, 2 to 3, and 3 to1 for three mask layers), so the lower-left cut matches the cutMaskNum value. See Example 4-17.

Similarly, for the metal layer, the topMaskNum/bottomMaskNum would define the mask for the bottom-most, then leftmost metal shape. For multiple disjoint metal shapes, the via-instance metal masks are derived from the via-master metal mask values. The via-master must have a mask defined for all of the metal shapes, and every via-master metal mask is "shifted" (1->2, 2->1 for two mask layers, 1->2, 2->3, 3->1 for three mask layers) so the lower-left cut matches the topMaskNum/bottomMaskNum value.

Shapes without any defined mask, that need to be assigned, can be assigned to an arbitrary choice of mask by applications.
+

+ Example 4-17  + Multi-Mask Patterns for Pins +

+

The following example shows via master masks:

+

+ clock + NET clock +

+
+ + + LAYER M1 MASK 2 ( -25 0 ) ( 25 50 )            #m1 rectangle is on mask 2 +
+
+ + + LAYER M2 ( -10 0 ) ( 10 75 )                   #m2 rectangle, no mask +
+
+ + + VIA VIA1 MASK 031 ( 0 25 )                     #via1 with mask 031 +
+
+ + ... +
+

The VIA1 via will have:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
no mask set for the top metal shape (topMaskNum is 0 in the 031 value)
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
MASK 1 for the bottom metal shape (botMaskNum is 1 in the 031 value)
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
the bottom-most, and then the left-most cut of the via-instance is MASK 3. The mask for the other cuts of the via-instance are derived from the via-master by "shifting" the via-master cut masks to match. So if the via-master's bottom-left cut is MASK 1, then the via-master cuts on MASK 1 become MASK 3 for the via-instance. Similarly cuts on 2 shift to 1, and cuts on 3 shift to 2. See Figure 4-9.
+
+

 

+

+ Figure 4-9  + Multi-Mask Patterns for Pins +

+


+

+ + NETEXPR "netExprPropName defaultNetName" +

+
Specifies a net expression property name (such as power1 or power2) and a default net name. If netExprPropName matches a net expression property higher up in the netlist (for example, in Verilog, VHDL, or OpenAccess), then the property is evaluated, and the software identifies a net to which to connect this pin. If the property does not exist, defaultNetName is used for the net name.

netExprPropName
must be a simple identifier in order to be compatible with other languages, such as Verilog and CDL. Therefore, it can only contain alphanumeric characters, and the first character cannot be a number. For example, power2 is a legal name, but 2power is not. You cannot use characters such as $ and !. The defaultName can be any legal DEF net name.

If more than one pin connects to the same net, only one pin should have a NETEXPR added to it. It is redundant and unnecessary to add NETEXPR to every ground pin connected to one ground net, and it is illegal to have different NETEXPR values for pins connected to the same net.
+

+ Example 4-18  + Net Expression and Supply Sensitivity +

+

The following PINS statement defines sensitivity and net expression values for five pins in the design myDesign:

+

+ DESIGN myDesign +

+

+ ... +

+

+ PINS 4 ; +

+
+ + - in1 + NET myNet +
+
+
...
+
+
+
+ SUPPLYSENSITIVITY vddpin1 ; #If in1 is connected to 1'b1, use
                         #net that is connected to vddpin1.
                         #No GROUNDSENSITIVITY is needed because
                         #only one ground net is used by PINS.
                         #Therefore, 1'b0 implicitly means net
                         #from any +USE GROUND pin.
+
+
+ + - vddpin1 + NET VDD1 + USE POWER +
+
+
...
+
+
+
+ NETEXPR "power1 VDD1" ; #If an expression named power1 is defined in
                     #the netlist, use it to fine the net.
                     #Otherwise, use net VDD1.
+
+
+ + - vddpin2 + NET VDD2 + USE POWER +
+
+
...
+
+
+
+ NETEXPR "power2 VDD2" ; #If an expression named power2 is defined in
                     #the netlist, use it to find the net.
                     # Otherise, use net VDD2.
+
+
+ + - gndpin1 + NET GND + USE GROUND +
+
+
...
+
+
+
+ NETEXPR "gnd1 GND" ; #If an expression named gnd1 is defined in
                     #the netlist, use it to find net
                     #connection. Otherwise, use net GND.
+
+

+ END PINS +

+

+ + numPins +

+
Specifies the number of pins defined in the PINS section.
+

+ + pinName + NET netName +

+
Specifies the name for the external pin, and the corresponding internal net (defined in NETS or SPECIALNETS statements).
+

+ + PLACED pt orient +

+
Specifies the pin's location, orientation, and that it's location is fixed, but can be moved during automatic layout. If you specify a placement status for a pin, you must also include a LAYER statement.
+

+ + PORT +

+
Indicates that the following LAYER, POLYGON, and VIA statements are all part of one PORT connection, until another PORT statement occurs. If this statement is missing, all of the LAYER, POLYGON, and VIA statements are part of a single implicit PORT for the PIN.

This commonly occurs for power and ground pins. All of the shapes of one port (rectangles, polygons, and vias) should already be connected with just the port shapes; therefore, the router only needs to connect to one of the shapes for the port. Separate ports should each be connected by routing inside the block (and each DEF PORT should map to a single LEF PORT in the equivalent LEF abstract for this block).

The syntax for describing PORT statements is defined as follows:

[[+ PORT]

  [ + LAYER layerName
      [ SPACING minSpacing
      | DESIGNRULEWIDTH
effectiveWidth]
      
pt pt
  | + POLYGON layerName
      [ SPACING minSpacing
      | DESIGNRULEWIDTH
effectiveWidth]
      
pt pt pt
  | + VIA viaName pt
  ] ...
]
+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

LAYER layerName pt pt

+
+

     

+
+

 

+
+

Specifies the routing layer used for the pin, and the pin geometry on that layer. If you specify a placement status for a pin, you must include a LAYER statement.

+
+

 

+
+

POLYGON layerName pt pt pt

+
+

 

+
+

 

+
+

Specifies the layer and a sequence of at least three points to generate a polygon for this pin. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.

+

Each POLYGON statement defines a polygon generated by connecting each successive point, and then the first and last points. The pt syntax corresponds to a coordinate pair, such as x y. Specify an asterisk (*) to repeat the same value as the previous x or y value from the last point. (See Example 4-20.)

+
+

     

+
+

SPACING minSpacing

+
+

      

+
+

 

+
+

Specifies the minimum spacing allowed between this pin and any other routing shape. This distance must be greater than or equal to minSpacing. If you specify SPACING, you cannot specify DESIGNRULEWIDTH. (See Example 4-21.
Type: Integer, specified in DEF database units

+
+

 

+
+

DESIGNRULEWIDTH effectiveWidth

+
+

 

+
+

 

+
+

Specifies that this pin has a width of effectiveWidth for the purpose of spacing calculations. If you specify DESIGNRULEWIDTH, you cannot specify SPACING. As a lot of spacing rules in advanced nodes no longer just rely on wire width, DESIGNRULEWIDTH is not allowed for 20nm and below nodes. (See Example 4-21.
Type: Integer, specified in DEF database units

+
+

 

+
+

VIA viaName pt

+
+

 

+
+

 

+
+

Places the via named viaName at the specified (x y) location (pt). viaName must be a previously defined via in the DEF VIAS or LEF VIA section.
Type: (pt) Integers, specified in DEF database units

+
+

+ Example 4-19  + Port Example +

+

Assume a block that is 5000 x 5000 database units with a 0,0 origin in the middle of the block. If you have the following pins defined, Figure 4-10 illustrates how pin BUSA[0] is created for two different placement locations and orientations:

+

+ PINS 2 ; +

+
+ + - BUSA[0] + NEY BUSA[0] + DIRECTION IN{UT + USE SIGNAL +
+
+ +    + LAYER M1 ( -25 0 ) ( 25 50 )    #m1, m2, and via12 +
+
+ +    + LAYER M2 ( -10 0 ) ( 10 75 ) +
+
+ +    + VIA via12 ( 0 25 ) +
+
+ +    + PLACED ( 0 -2500 ) N ;          #middle of bottom side +
+
+ + - VDD + NET VDD + DIRECTION INOUT + USE POWER + SPECIAL +
+
+ +    + PORT +
+
+
   + LAYER M2 ( -25 0 ) ( 25 50 )
+
+
+
   + PLACED ( 0 2500 ) S        #middle of top side
+
+
+
+ PORT
+
+
+
   + LAYER M1 (-25 0 ) ( 25 50 )
+
+
+
   + PLACED ( -2500 0 ) E        #middle of left side
+
+
+
+ PORT
+
+
+
   + LAYER M1 ( -25 0 ) ( 25 50 )
+
+
+
   + PLACED ( 2500 0 ) W ;       #middle of right side
+
+

+ END PINS +

+

+ Figure 4-10  + Port Illustration +

+


+

+ Example 4-20  + Port Statement With Polygon +

+

The following PINS statement creates a polygon with a 45-degree angle:

+

+ PINS 2 ; +

+
+ + - myPin3 + NET myNet1 + DIRECTION INPUT +
+
+
+ PORT
+
+
+
  + POLYGON metal1 ( 0 0 ) ( 100 100 ) ( 200 100 ) ( 200 0 ) #45-degree angle
+
+
+
  + FIXED ( 10000 5000 ) N ;
+
+
+ + ... +
+

+ END PINS +

+

+ Example 4-21  + Design Rule Width and Spacing Rules +

+

The following statements create spacing rules using the DESIGNRULEWIDTH and SPACING statements:

+

+ PINS 3 ; +

+
+ + - myPin1 + NET myNet1 + DIRECTION INPUT +
+
+
+ LAYER metal1
+
+
+
      DESIGNRULEWIDTH 1000   #Pin is effectively 1000 dbu wide
+
+
+
      ( -100 0 ) ( 100 200 ) #Pin is 200 x 200 dbu
+
+
+
+ FIXED ( 10000 5000 ) S ;
+
+
+ + - myPin2 + NET myNet2 + DIRECTION INPUT +
+
+
+ LAYER metal1
+
+
+
      SPACING 500            #Requires >= 500 dbu spacing
+
+
+
      ( -100 0 ) ( 100 200 ) #Pin is 200 x 200 dbu
+
+
+
+ COVER ( 10000 5000 ) S ;
+
+
+ + - myPin3 + NET myNet1            #Pin with two shapes +
+
+
+ DIRECTION INPUT
+
+
+
+ LAYER metal2 ( 200 200 ) ( 300 300 ) #100 x 100 dbu shape
+
+
+
+ POLYGON metal1 ( 0 0 ) ( 100 100 ) ( 200 100 ) ( 200 0 ) #Has 45-degree edge
+
+
+
+ FIXED ( 10000 5000 ) N ;
+
+

+ END PINS +

+

 

+

+ + SPECIAL +

+
Identifies the pin as a special pin. Regular routers do not route to special pins. The special router routes special wiring to special pins.
+

+ + SUPPLYSENSITIVITY powerPinName +

+
Specifies that if this pin is connected to a tie-high connection (such as 1'b1 in Verilog), it should connect to the same net to which powerPinName is connected.
powerPinName must match another pin in this PINS section that has a + USE POWER attribute. The power pin definition can follow later in this PINS section; it does not have to be defined before this pin definition. It is a semantic error to put this attribute on an existing power pin. For an example, see Example 4-18.

Note:
POWERSENSITIVITY is useful only when there is more than one power net connected to pins in the PINS section. By default, if there is only one net connected to all + USE POWER pins, the tie-high connections are already implicitly defined (that is, tie-high connections are connected to the same net as the single power pin).
+

+ + USE {ANALOG | CLOCK | GROUND | POWER | RESET | SCAN | SIGNAL | TIEOFF} +

+
Specifies how the pin is used.
Default: SIGNAL
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

ANALOG

+
+

Pin is used for analog connectivity.

+
+

       

+
+

CLOCK

+
+

Pin is used for clock net connectivity.

+
+

       

+
+

GROUND

+
+

Pin is used for connectivity to the chip-level ground distribution network.

+
+

    

+
+

POWER

+
+

Pin is used for connectivity to the chip-level power distribution network.

+
+

    

+
+

RESET

+
+

Pin is used as reset pin.

+
+

      

+
+

SCAN

+
+

Pin is used as scan pin.

+
+

   

+
+

SIGNAL

+
+

Pin is used for regular net connectivity.

+
+

    

+
+

TIEOFF

+
+

Pin is used as tie-high or tie-low pin.

+
+

+ + Extra Physical PIN(S) for One Logical PIN +

+

In the design of place and route blocks, you sometimes want to add extra physical connection points to existing signal ports (usually to enable the signal to be accessed from two sides of the block). One pin has the same name as the net it is connected to. Any other pins added to the net must use the following naming conventions.

+

For extra non-bus bit pin names, use the following syntax:

+

+ + pinname.extraN +

+
N is a positive integer, incremented as the physical pins are added
For example:
+
+ + PINS n ; +
+
+
- a + NET a .... ;
+
+
+
- a.extra1 + NET a ... ;
+
+

For extra bus bit pin names, use the following syntax:

+

+ + basename.extraN[index] +

+
basename is simple part of bus bit pin/net name. N is a positive integer, incremented as the physical pins are added. [index] identifies the specific bit of the bus, if it is a bus bit.
For example:
+
+ + PINS n ; +
+
+
- a[0] + net a[0] ... ;
+
+
+
- a.extra1[0] + net a[0] ... ;
+
+

Note: The brackets [ ] are the BUSBITCHARS as defined in the DEF BUSBITCHARS statement.

+

+ + Specifying Orientation +

+

If you specify the pin's placement status, you must specify its location and orientation. A pin can have any of the following orientations: N, S, W, E, FN, FS, FW, or FE.

+

Orientation terminology can differ between tools. The following table maps the orientation terminology used in LEF and DEF files to the OpenAccess database format.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF/DEF +

+
+

+ OpenAccess +

+
+

+ Definition +

+
+

N (North)

+
+

R0

+
+

+
+

S (South)

+
+

R180

+
+

+
+

W (West)

+
+

R90

+
+

+
+

E (East)

+
+

R270

+
+

+
+

FN (Flipped North)

+
+

MY

+
+

+
+

FS (Flipped South)

+
+

MX

+
+

+
+

FW (Flipped West)

+
+

MX90

+
+

+
+

FE (Flipped East)

+
+

MY90

+
+

+
+

+ Example 4-22  + Pin Statements +

+

The following example describes a physical I/O pin.

+

+ # M1 width = 50, track spacing = 120 +

+

+ # M2 width = 60, track spacing = 140 +

+
+   +
+

+ DIEAREA ( -5000 -5000 ) ( 5000 5000 ) ; +

+

+ TRACKS Y -4900 DO 72 STEP 140 LAYER M2 M1 ; +

+

+ TRACKS X -4900 DO 84 STEP 120 LAYER M1 M2 ; +

+

+ PINS 4 ; +

+
+ + # Pin on the left side of the block +
+
+ + - BUSA[0]+ NET BUSA[0] + DIRECTION INPUT +
+
+
+ LAYER M1 ( -25 0 ) ( 25 165 ) # .5 M1 W + 1 M2 TRACK
+
+
+
+ PLACED ( -5000 2500 ) E ;
+
+
+ + # Pin on the right side of the block +
+
+ + - BUSA[1] + NET BUSA[1] + DIRECTION INPUT +
+
+
+ LAYER M1 ( -25 0 ) ( 25 165 ) # .5 M1 W + 1 M2 TRACK
+
+
+
+ PLACED ( 5000 -2500 ) W ;
+
+
+ + # Pin on the bottom side of the block +
+
+ + - BUSB[0] + NET BUSB[0] + DIRECTION INPUT +
+
+
+ LAYER M2 ( -30 0 ) ( 30 150 ) # .5 M2 W + 1 M1 TRACK
+
+
+
+ PLACED ( -2100 -5000 ) N ;
+
+
+ + # Pin on the top side of the block +
+
+ + - BUSB[1] + NET BUSB[1] + DIRECTION INPUT +
+
+
+ LAYER M2 ( -30 0 ) ( 30 150 ) # .5 M2 W + 1 M1 TRACK
+
+
+
+ PLACED ( 2100 5000 ) S ;
+
+

+ END PINS +

+

+
+

+

The following example shows how a logical I/O pin would appear in the DEF file. The pin is first defined in Verilog for a chip-level design.

+

+ module chip (OUT, BUSA, BUSB) ; +

+
+ + input [0:1] BUSA, BUSB; +
+
+ + output OUT; +
+

+ .... +

+

+ endmodule +

+

The following description for this pin is in the PINS section in the DEF file:

+

+ PINS 5 ; +

+
+ + - BUSA[0] + NET BUSA[0] + DIRECTION INPUT ; +
+
+ + - BUSA[1] + NET BUSA[1] + DIRECTION INPUT ; +
+
+ + - BUSB[0] + NET BUSB[0] + DIRECTION INPUT ; +
+
+ + - BUSB[1] + NET BUSB[1] + DIRECTION INPUT ; +
+
+ + - OUT + NET OUT + DIRECTION OUTPUT ; +
+

+ END PINS +

+

Pin Properties

+
+ [PINPROPERTIES num;
[- {compName pinName | PIN pinName}
      [+ PROPERTY {propName propVal} ...] ...
;] ... +
+
+ END PINPROPERTIES] +
+

Defines pin properties in the design.

+

+ + compName pinName +

+
Specifies a component pin. Component pins are identified by the component name and pin name.
+

+ + num +

+
Specifies the number of pins defined in the PINPROPERTIES section.
+

+ + PIN pinName +

+
Specifies an I/O pin.
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a pin property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ Example 4-23  + Pin Properties Statement +

+

+ PINPROPERTIES 3 ; +

+
+ + - CORE/g76 CKA + PROPERTY CLOCK "FALLING" ; +
+
+ + - comp1 A + PROPERTY CLOCK "EXCLUDED" ; +
+
+ + - rp/regB clk + PROPERTY CLOCK "INSERTION" ; +
+

+ END PINPROPERTIES +

+

Property Definitions

+
+ [PROPERTYDEFINITIONS
[objectType propName propType [RANGE min max]
   [value | stringValue]
;] ... +
+
+ END PROPERTYDEFINITIONS] +
+

Lists all properties used in the design. You must define properties in the PROPERTYDEFINITIONS statement before you can refer to them in other sections of the DEF file.

+

+ + objectType +

+
Specifies the object type being defined. You can define properties for the following object types:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

COMPONENT

+
+

     

+
+

COMPONENTPIN

+
+

    

+
+

DESIGN

+
+

    

+
+

GROUP

+
+

   

+
+

NET

+
+

    

+
+

NONDEFAULTRULE

+
+

   

+
+

REGION

+
+

   

+
+

ROW

+
+

     

+
+

SPECIALNET

+
+

+ + propName +

+
Specifies a unique property name for the object type.
+

+ + propType +

+
Specifies the property type for the object type. You can specify one of the following property types:
+ + + + + + + + + + + + + +
+
+

   

+
+

INTEGER

+
+

    

+
+

REAL

+
+

     

+
+

STRING

+
+

+ + RANGE min max +

+
Limits real number and integer property values to a specified range.
+

+ + value | stringValue +

+
Assigns a numeric value or a name to a DESIGN object.

Note:
Assign values to properties for component pins in the PINPROPERTIES section. Assign values to other properties in the section of the LEF file that describes the object to which the property applies.
+

Regions

+
+ [REGIONS numRegions ;
[- regionName {pt pt} ...
   [+ TYPE {FENCE | GUIDE}]
   [+ PROPERTY {propName propVal} ...] ...
;] ... +
+
+ END REGIONS] +
+

Defines regions in the design. A region is a physical area to which you can assign a component or group.

+

+ + numRegions +

+
Specifies the number of regions defined in the design.
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a region property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ + regionName pt pt +

+
Names and defines a region. You define a region as one or more rectangular areas specified by pairs of coordinate points.
+

+ + TYPE {FENCE | GUIDE} +

+
Specifies the type of region.
Default: All instances assigned to the region are placed inside the region boundaries, and other cells are also placed inside the region.
Value: Specify one of the following:
+ + + + + + + + + + + +
+
+

    

+
+

FENCE

+
+

All instances assigned to this type of region must be exclusively placed inside the region boundaries. No other instances are allowed inside this region.

+
+

      

+
+

GUIDE

+
+

All instances assigned to this type of region should be placed inside this region; however, it is a preference, not a hard constraint. Other constraints, such as wire length and timing, can override this preference.

+
+

+ Example 4-24  + Regions Statement +

+

+ REGIONS 1 ; +

+
+ + - REGION1 ( 0 0 ) ( 1200 1200 ) +
+
+
+ PROPERTY REGIONORDER 1 ;
+
+

Rows

+
+ [ROW rowName siteName origX origY siteOrient
  [DO numX BY numY [STEP stepX stepY]]
  [+ PROPERTY {propName propVal} ...] ... ;] ... +
+

Defines rows in the design.

+

+ + DO numX BY numY +

+
Specifies a repeating set of sites that create the row. You must specify one of the values as 1. If you specify 1 for numY, then the row is horizontal. If you specify 1 for numX, the row is vertical.
Default: Both numX and numY equal 1, creating a single site at this location (that is, a horizontal row with one site).
+

+ + origX origY +

+
Specifies the location of the first site in the row.
Type: Integer, specified in DEF database units
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a row property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ + rowName +

+
Specifies the row name for this row.
+

+ + siteName +

+
Specifies the LEF SITE to use for the row. A site is a placement location that can be used by LEF macros that match the same site. siteName can also refer to a site with a row pattern in its definition, in which case, the row pattern indicates a repeating set of sites that are abutted. For more information, see "Site" and "Macro" in "LEF Syntax."
+

+ + siteOrient +

+
Specifies the orientation of all sites in the row. siteOrient must be one of N, S, E, W, FN, FS, FE, or FW. For more information on orientations, see "Specifying Orientation".
+

+ + STEP stepX stepY +

+
Specifies the spacing between sites in horizontal and vertical rows.
+

+ Example 4-25  + Row Statements +

+

Assume siteA is 200 by 900 database units.

+

+ ROW row_0 siteA 1000 1000 N ; #Horizontal row is one-site wide at 1000, 1000 +

+

+ ROW row_1 siteA 1000 1000 N DO 1 BY 1 ;            #Same as row_0 +

+

+ ROW row_2 siteA 1000 1000 N DO 1 BY 1 STEP 200 0 ; #Same as row_0 +

+

+ ROW row_3 siteA 1000 1000 N DO 10 BY 1 ; #Horizontal row is 10 sites wide, +

+

+                                          #so row width is 200*10=2000 dbu +

+

+ ROW row_4 siteA 1000 1000 N DO 10 BY 1 STEP 200 0 ; #Same as row_3 +

+

+ ROW row_5 siteA 1000 1000 N DO 1 BY 10 ; #Vertical row is 10 sites high, so +

+

+                                          #total row height is 900*10=9000 dbu +

+

+ ROW row_6 siteA 1000 1000 N DO 1 BY 10 STEP 0 900 ; #Same as row_5 +

+

Scan Chains

+
+ [SCANCHAINS numScanChains ;
[- chainName
   [+ PARTITION partitionName [MAXBITS maxbits]]
   [+ COMMONSCANPINS [ ( IN pin )] [( OUT pin ) ] ]
    + START {fixedInComp | PIN} [outPin]
   [+ FLOATING
      {floatingComp [ ( IN pin ) ] [ ( OUT pin ) ] [ ( BITS numBits ) ]} ...]
   [+ ORDERED
      {fixedComp [ ( IN pin ) ] [ ( OUT pin ) ] [ ( BITS numBits ) ]} ...
   ] ...
    + STOP {fixedOutComp | PIN} [inPin] ]
;] ...
+
+
+ END SCANCHAINS] +
+

Defines scan chains in the design. Scan chains are a collection of cells that contain both scan-in and scan-out pins. These pins must be defined in the PINS section of the DEF file with + USE SCAN.

+

+ + chainName +

+
Specifies the name of the scan chain. Each statement in the SCANCHAINS section describes a single scan chain.
+

+ + COMMONSCANPINS [( IN pin )] [( OUT pin )] +

+
Specifies the scan-in and scan-out pins for each component that does not have a scan-in and scan-out pin specified. You must specify either common scan-in and scan-out pins, or individual scan-in and scan-out pins for each component.
+

+ + FLOATING {floatingComp [( IN pin )] [( OUT pin )] [( BITS numBits )]} +

+
Specifies the floating list. You can have one or zero floating lists. If you specify a floating list, it must contain at least one component.
+ + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

floatingComp

+
+

Specifies the component name.

+
+

    

+
+

( IN pin )

+
+

Specifies the scan-in pin. If you do not specify a scan-in pin, the router uses the pin you specified for the common scan pins.

+
+

    

+
+

( OUT pin )

+
+

Specifies the scan-out pin. If you do not specify a scan-out pin, the router uses the pin you specified for the common scan pins.

+
+

    

+
+

BITS numBits

+
+

Specifies the sequential bit length of any chain element. This allows application tools that do not have library access to determine the sequential bit length contribution of any chain element to ensure the MAXBITS constraints are not violated for chains in a given partition. You can specify 0 to indicate when elements are nonsequential.
Default: 1
Type: Integer

+
+
Note: Scan chain reordering commands can use floating components in any order to synthesize a scan chain. Floating components cannot be shared with other scan chains unless they are in the same PARTITION. Each component should only be used once in synthesizing a scan chain.
+

+ + MAXBITS maxBits +

+
When specified with chains that include the PARTITION keyword, sets the maximum bit length (flip-flop bit count) that the chain can grow to in the partition.
Default: 0 (tool-specific defaults apply, which is probably the number of bits in each chain)
Type: Integer
Value: Specify a value that is at least as large as the size of the current chain.
+

+ + numScanChains +

+
Specifies the number of scan chains to synthesize.
+

+ + ORDERED {fixedComp [( IN pin )] [( OUT pin )] [( BITS numBits )]} +

+
Specifies an ordered list. You can specify none or several ordered lists. If you specify an ordered list, you must specify at least two fixed components for each ordered list.
+ + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

fixedComp

+
+

Specifies the component name.

+
+

    

+
+

( IN pin )

+
+

Specifies the scan-in pin. If you do not specify a scan-in pin, the router uses the pin you specified for the common scan pins.

+
+

    

+
+

( OUT pin )

+
+

Specifies the scan-out pin. If you do not specify a scan-out pin, the router uses the pin you specified for the common scan pins.

+
+

    

+
+

BITS numBits

+
+

Specifies the sequential bit length of any chain element. This allows application tools that do not have library access to determine the sequential bit length contribution of any chain element to ensure the MAXBITS constraints are not violated for chains in a given partition. You can specify 0 to indicate when elements are nonsequential.
Default: 1
Type: Integer

+
+
Note: Scan chain reordering commands should synthesize these components in the same order that you specify them in the list. Ordered components cannot be shared with other scan chains unless they are in the same PARTITION. Each component should only be used once in synthesizing a scan chain.
+

+ + PARTITION partitionName +

+
Specifies a partition name. This statement allows reordering tools to determine inter-chain compatibility for element swapping (both FLOATING elements and ORDERED elements). It associates each chain with a partition group, which determines their compatibility for repartitioning by swapping elements between them.

Chains with matching PARTITION names constitute a swap-compatible group. You can change the length of chains included in the same partition (up to the MAXBITS constraint on the chain), but you cannot eliminate chains or add new ones; the number of chains in the partition is always preserved.

If you do not specify the PARTITION keyword, chains are assumed to be in their own single partition, and reordering can be performed only within that chain.
+

+ Example 4-26  + Partition Scanchain +

+

In the following definition, chain chain1_clock1 is specified without a MAXBITS keyword. The maximum allowed bit length of the chain is assumed to be the sequential length of the longest chain in any clock1 partition.

+

+ SCANCHAINS 77 ; +

+
+ + - chain1_clock1 +
+
+
+ PARTITION clock1
+
+
+
+ START block1/bsr_reg_0 Q
+
+
+
+ FLOATING
+
+
+
   block1/pgm_cgm_en_reg_reg ( IN SD ) ( OUT QZ )
+
+
+
   ...
+
+
+
   block1/start_reset_dd_reg ( IN SD ) ( OUT QZ )
+
+
+
+ STOP block1/start_reset_d_reg SD ;
+
+

In the following definition, chain chain2_clock2 is specified with a PARTITION statement that associates it with clock2, and a maximum bit length of 1000. The third element statement in the FLOATING list is a scannable register bank that has a sequential bit length of 4. The ORDERED list element statements have total bit lengths of 1 each because the muxes are specified with a maximum bit length of 0.

+
+ + - chain2_clock2 +
+
+
+ PARTITION clock2
+
+
+
  MAXBITS 1000
+
+
+
+ START block1/current_state_reg_0_QZ
+
+
+
+ FLOATING
+
+
+
   block1/port2_phy_addr_reg_0_ ( IN SD ) ( OUT QZ )
+
+
+
   block1/port2_phy_addr_reg_4_ ( IN SD ) ( OUT QZ )
+
+
+
   block1/port3_intfc ( IN SD ) ( OUT MSB ) ( BITS 4 )
+
+
+
        ...
+
+
+
+ ORDERED
+
+
+
   block1/mux1 ( IN A ) ( OUT X ) ( BITS 0 )
+
+
+
   block1/ff1 ( IN SD ) ( OUT Q )
+
+
+
+ ORDERED
+
+
+
   block1/mux2 ( IN A ) ( OUT X ) ( BITS 0 )
+
+
+
   block1/ff2 ( IN SD ) ( OUT Q ) ;
+
+

In the following definition, chain chain3_clock2 is also specified with a PARTITION statement that associates it with clock2. This means it is swap-compatible with chain2_clock2. The specified maximum bit length for this chain is 1200.

+
+ + - chain3_clock2 +
+
+
+ PARTITION clock2
+
+
+
  MAXBITS 1200
+
+
+
+ START block1/LV_testpoint_0_Q_reg Q
+
+
+
+ FLOATING
+
+
+
   block1/LV_testpoint_0_Q_reg ( IN SE ) ( OUT Q )
+
+
+
   block1/tm_state_reg_1_ (IN SD ) ( OUT QZ )
+
+
+
   ...
+
+

In the following definition, chain chain4_clock3 is specified with a PARTITION statement that associates it with clock3. The second element statement in the FLOATING list is a scannable register bank that has a sequential bit length of 8, and default pins. The ORDERED list element statements have total bit lengths of 2 each because the mux is specified with a maximum bit length of 0.

+
+ + - chain4_clock3 +
+
+
+ PARTITION clock3
+
+
+
+ START block1/prescaler_IO/lfsr_reg1
+
+
+
+ FLOATING
+
+
+
   block1/dp1_timers
+
+
+
   block1/bus8 ( BITS 8 )
+
+
+
   ...
+
+
+
+ ORDERED
+
+
+
   block1/ds1/ff1 ( IN SD ) ( OUT Q )
+
+
+
   block1/ds1/mux1 ( IN B ) ( OUT Y ) ( BITS 0 )
+
+
+
   block1/ds1/ff2 ( IN SD ) ( OUT Q )
+
+
+
   ...
+
+

+ + START {fixedInComp | PIN} [outPin] +

+
Specifies the start point of the scan chain. You must specify this point. The starting point can be either a component, fixedInComp, or an I/O pin, PIN. If you do not specify outPin, the router uses the pin specified for common scan pins.
+

+ + STOP {fixedOutComp | PIN} [inPin] +

+
Specifies the endpoint of the scan chain. You must specify this point. The stop point can be either a component, fixedOutComp, or an I/O pin, PIN. If you do not specify inPin, the router uses the pin specified for common scan pins.
+

+ + Scan Chain Rules +

+

Note the following when defining scan chains.

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
For incremental DEF, if you have a COMPONENTS section and a SCANCHAINS section in the same DEF file, the COMPONENTS section must appear before the SCANCHAINS section. If the COMPONENTS section and SCANCHAINS section are in different DEF files, you must read the COMPONENTS section or load the database before reading the SCANCHAINS section.
+
+

+ Example 4-27  + Scan Chain Statements +

+

+ Nets 100; #Number of nets resulting after scan chain synthesis +

+
+ + - SCAN-1 ( C1 SO + SYNTHESIZED ) +
+
+ +          ( C4 SI + SYNTHESIZED ) + SOURCE TEST ; +
+
+ + - ... +
+
+ + - N1 ( C3 SO + SYNTHESIZED )
     ( C11 SI + SYNTHESIZED ) ( AND1 A ) ;
+
+
+ + - ... +
+

+ END NETS +

+

+ SCANCHAINS 2; #Specified before scan chain ordering +

+
+ + - S1 +
+
+
+ COMMONSCANPINS ( IN SI ) ( OUT SO )
+
+
+
+ START SIPAD OUT
+
+
+
+ FLOATING C1 C2 ( IN D ) ( OUT Q ) C3 C4 C5...CN
+
+
+
+ ORDERED A1 ( OUT Q ) A2 ( IN D ) ( OUT Q ) ...
+
+
+
        AM ( N D )
+
+
+
+ ORDERED B1 B2 ... BL
+
+
+
+ STOP SOPAD IN ;
+
+
+ + - S2 ... ; +
+

+ END SCANCHAINS +

+

+ SCANCHAINS 2 ; #Specified after scan chain ordering +

+
+ + - S1 +
+
+
+ START SIPAD OUT
+
+
+
+ FLOATING C1 ( IN SI ) ( OUT SO )
+
+
+
    C2 ( IN D ) ( OUT Q )
+
+
+
    C3 ( IN SI ( OUT SO ) ... CN ( IN SI ) ( OUT SO )
+
+
+
+ ORDERED A1 ( IN SI ) ( OUT Q )
+
+
+
    A2 ( IN D ) ( OUT Q ) ... AM ( IN D ) ( OUT SO )
+
+
+
+ ORDERED B1 ( IN SI ) ( OUT SO )
+
+
+
    B2 ( IN SI ) ( OUT SO ) ...
+
+
+
+ STOP SOPAD IN ;
+
+
+ + - S2 ... ; +
+

+ END SCANCHAINS +

+

Slots

+
+ [SLOTS numSlots ;
[- LAYER layerName
    {RECT pt pt | POLYGON pt pt pt ... } ...
;] ... +
+
+ END SLOTS] +
+

Defines the rectangular shapes that form the slotting of the wires in the design. Each slot is defined as an individual rectangle.

+

+ + LAYER layerName +

+
Specifies the layer on which to create slots.
+

+ + numSlots +

+
Specifies the number of LAYER statements in the SLOTS statement, not the number of rectangles.
+

+ + POLYGON pt pt pt +

+
Specifies a sequence of at least three points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle. Each POLYGON statement defines a polygon generated by connecting each successive point, and then the first and last points. The pt syntax corresponds to a coordinate pair, such as x y. Specify an asterisk (*) to repeat the same value as the previous x or y value from the last point.
Type: DEF database units
+

+ + RECT pt pt +

+
Specifies the lower left and upper right corner coordinates of the slot geometry.
+

+ Example 4-28  + Slots Statements +

+

The following statement defines slots for layers MET1 and MET2.

+

+ SLOTS 2 ; +

+
+ + - LAYER MET1 +
+
+ +     RECT ( 1000 2000 ) ( 1500 4000 ) +
+
+ +     RECT ( 2000 2000 ) ( 2500 4000 ) +
+
+ +     RECT ( 3000 2000 ) ( 3500 4000 ) ; +
+
+ + - LAYER MET2 +
+
+ +     RECT ( 1000 2000 ) ( 1500 4000 ) +
+
+ +     RECT ( 1000 4500 ) ( 1500 6500 ) +
+
+ +     RECT ( 1000 7000 ) ( 1500 9000 ) +
+
+ +     RECT ( 1000 9500 ) ( 1500 11500 ) ; +
+

+ END SLOTS +

+

The following SLOTS statement defines two rectangles and one polygon slot geometries:

+

+ SLOTS 1 ; +

+
+ + - LAYER metal1 +
+
+
RECT ( 100 200 ) ( 150 400 )
+
+
+
POLYGON ( 100 100 ) ( 200 200 ) ( 300 200 ) ( 300 100 )
+
+
+
RECT ( 300 200 ) ( 350 400 ) ;
+
+

+ END SLOTS +

+

Special Nets

+
+ [SPECIALNETS numNets ;
[- netName
   [ ( {compName pinName | PIN pinName} [+ SYNTHESIZED] ) ] ...
  [+ VOLTAGE volts]
  [specialWiring] ...
  [+ SOURCE {DIST | NETLIST | TIMING | USER}]
  [+ FIXEDBUMP]
  [+ ORIGINAL netName]
  [+ USE {ANALOG | CLOCK | GROUND | POWER | RESET | SCAN | SIGNAL | TIEOFF}]
  [+ PATTERN {BALANCED | STEINER | TRUNK | WIREDLOGIC}]
  [+ ESTCAP wireCapacitance]
  [+ WEIGHT weight]
  [+ PROPERTY {propName propVal} ...] ...
;] ... +
+
+ END SPECIALNETS] +
+

Defines netlist connectivity and special-routes for nets containing special pins. Special-routes are created by "special routers" or "manually", and should not be modified by a signal router. Special routes are normally used for power-routing, fixed clock-mesh routing, high-speed buses, critical analog routes, or flip-chip routing on the top-metal layer to bumps.

+

Input parameters for a net can appear in the NETS section or the SPECIALNETS section. In case of conflicting values for an argument, the DEF reader uses the last value encountered for the argument. NETS and SPECIALNETS statements can appear more than once in a DEF file. If a particular net has mixed wiring or pins, specify the special wiring and pins first.

+

You can also specify the netlist in the COMPONENTS statement. If the netlist is specified in both NETS and COMPONENTS statements, and if the specifications are not consistent, an error message appears. On output, the writer outputs the netlist in either format, depending on the command arguments of the output command.

+

+ + compNamePattern pinName +

+
Specifies the name of a special pin on the net and its corresponding component. You can use a compNamePattern to specify a set of component names. During evaluation of the pattern match, components that match the pattern but do not have a pin named pinName are ignored. The pattern match character is * (asterisk). For example, a component name of abc/def would be matched by a*, abc/d*, or abc/def.
+

+ + ESTCAP wireCapacitance +

+
Specifies the estimated wire capacitance for the net. ESTCAP can be loaded with simulation data to generate net constraints for timing-driven layout.
+

+ + FIXEDBUMP +

+
Indicates that the bump net cannot be reassigned to a different pin.

It is legal to have a pin without geometry to indicate a logical connection and to have a net that connects that pin to two other instance pins that have geometry. Area I/Os have a logical pin that is connected to a bump and an input driver cell. The bump and driver cell have pin geometries (and, therefore, should be routed and extracted), but the logical pin is the external pin name without geometry (typically the Verilog pin name for the chip).

Bump nets also can be specified in the
NETS statement. If a net name appears in both the NETS and SPECIALNETS statements, the FIXEDBUMP keyword also should appear in both statements. However, the value only exists once within a given application's database for the net name.

Because DEF is often used incrementally, the last value read in is used. Therefore, in a typical DEF file, if the same net appears in both statements, the FIXEDBUMP keyword (or lack of it) in the NETS statement is the value that is used because the NETS statement is defined after the SPECIALNETS statement.
+

+ Example 4-29  + Fixed Bump +

+

The following example describes a logical pin that is connected to a bump and an input driver cell. The I/O driver cell and bump cells are specified in the COMPONENTS statement. Bump cells are usually placed with + COVER placement status so they cannot be moved manually by mistake.

+

+ COMPONENTS 200 +

+
+ + - driver1 drivercell + PLACED ( 100 100 ) N ; +
+
+ + ... +
+
+ + - bumpa1 bumpcell + COVER ( 100 100 ) N ; +
+
+ + - bumpa2 bumpcell + COVER ( 200 100 ) N ; +
+

The pin is assigned in the PIN statement.

+

+ PINS 100 +

+
+ + - n1 + NET n1 + SPECIAL + DIRECTION INPUT ; +
+
+ + - n2 + NET n2 + SPECIAL + DIRECTION INPUT ; +
+

In the SPECIALNETS statement, the net n1 is assigned to bumpa1 and cannot be reassigned. Note that another net n2 is assigned to bumpa2; however, I/O optimization commands are allowed to reassign bumpa2 to a different net.

+

+ SPECIALNETS 100 +

+
+ + - n1 ( driver1 in ) ( bumpa1 bumpin ) + FIXEDBUMP ; +
+
+ + - n2 ( driver2 in ) ( bumpa2 bumpin ) ; +
+

+ + netName +

+
Specifies the name of the net.
+

+ + ORIGINAL netName +

+
Specifies the original net partitioned to create multiple nets, including the current net.
+

+ + PATTERN {BALANCED | STEINER | TRUNK | WIREDLOGIC} +

+
Specifies the routing pattern used for the net.
Default: STEINER
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

BALANCED

+
+

Used to minimize skews in timing delays for clock nets.

+
+

     

+
+

STEINER

+
+

Used to minimize net length.

+
+

      

+
+

TRUNK

+
+

Used to minimize delay for global nets.

+
+

       

+
+

WIREDLOGIC

+
+

Used in ECL designs to connect output and mustjoin pins before routing to the remaining pins.

+
+

+ + PIN pinName +

+
Specifies the name of an I/O pin on a net or a subnet.
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a net property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ + specialWiring +

+
Specifies the special wiring for the net. For syntax information, see "Special Wiring Statement".
+

+ + SOURCE {DIST | NETLIST | TIMING | USER} +

+
Specifies how the net is created. The value of this field is preserved when input to the DEF reader.
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

DIST

+
+

Net is the result of adding physical components (that is, components that only connect to power or ground nets), such as filler cells, well-taps, tie-high and tie-low cells, and decoupling caps.

+
+

     

+
+

NETLIST

+
+

Net is defined in the original netlist. This is the default value, and is not normally written out in the DEF file.

+
+

     

+
+

TEST

+
+

Net is part of a scanchain.

+
+

     

+
+

TIMING

+
+

Net represents a logical rather than physical change to netlist, and is used typically as a buffer for a clock-tree, or to improve timing on long nets.

+
+

     

+
+

USER

+
+

Net is user defined.

+
+

+ + SYNTHESIZED +

+
Used by some tools to indicate that the pin is part of a synthesized scan chain.
+

+ + USE {ANALOG | CLOCK | GROUND | POWER | RESET | SCAN | SIGNAL | TIEOFF} +

+
Specifies how the net is used.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

      

+
+

ANALOG

+
+

Used as an analog signal net.

+
+

     

+
+

CLOCK

+
+

Used as a clock net.

+
+

     

+
+

GROUND

+
+

Used as a ground net.

+
+

     

+
+

POWER

+
+

Used as a power net.

+
+

    

+
+

RESET

+
+

Used as a reset net.

+
+

      

+
+

SCAN

+
+

Used as a scan net.

+
+

      

+
+

SIGNAL

+
+

Used as a digital signal net.

+
+

      

+
+

TIEOFF

+
+

Used as a tie-high or tie-low net.

+
+

+ + VOLTAGE volts +

+
Specifies the voltage for the net, as an integer in units of .001 volts. For example, VOLTAGE 1500 in DEF is equal to 1.5 V.
+

+ + WEIGHT weight +

+
Specifies the weight of the net. Automatic layout tools attempt to shorten the lengths of nets with high weights. Do not specify a net weight larger than 10, or assign weights to more than 3 percent of the nets in a design.

Note:
The net constraints method of controlling net length is preferred over using net weights.
+

Special Wiring Statement

+
+      [[+ COVER | + FIXED | + ROUTED | + SHIELD shieldNetName]
     [+ SHAPE shapeType] [+ MASK maskNum]
      + POLYGON layerName pt pt pt ...
     | + RECT layerName pt pt
     | + VIA viaName [orient] pt ...
|{+ COVER | + FIXED | + ROUTED | + SHIELD shieldNetName}
     layerName routeWidth
          [+ SHAPE
               {RING | PADRING | BLOCKRING | STRIPE | FOLLOWPIN
               | IOWIRE | COREWIRE | BLOCKWIRE | BLOCKAGEWIRE | FILLWIRE
               | FILLWIREOPC | DRCFILL}]
           [+ STYLE styleNum]
           routingPoints
     [NEW layerName routeWidth
          [+ SHAPE
               {RING | PADRING | BLOCKRING | STRIPE | FOLLOWPIN
               | IOWIRE | COREWIRE | BLOCKWIRE | BLOCKAGEWIRE | FILLWIRE
               | FILLWIREOPC | DRCFILL}]
           [+ STYLE styleNum]
           routingPoints
        ] ...
+
+
+   ] ... +
+

Defines the wiring for both routed and shielded nets.

+

+ + COVER +

+
Specifies that the wiring cannot be moved by either automatic layout or interactive commands. If no wiring is specified for a particular net, the net is unrouted. If you specify COVER, you must also specify layerName width.
+

+ + FIXED +

+
Specifies that the wiring cannot be moved by automatic layout, but can be changed by interactive commands. If no wiring is specified for a particular net, the net is unrouted. If you specify FIXED, you must also specify layerName width.
+

+ + layerName routeWidth +

+
Specifies the width for wires on layerName. Normally, only routing layers use this syntax, but it is legal for any layer (cut layer shapes or other layers like masterslice layers normally use the RECT or POLYGON statements). For more information, see "Defining Routing Points".

Vias do not change the route width. When a via is used in special wiring, the previously established routeWidth is used for the next wire in the new layer. To change the routeWidth, a new path must be specified using NEW layerName routeWidth.

Many applications require routeWidth to be an even multiple of the manufacturing grid in order to be fabricated, and to keep the center line on the manufacturing grid.
Type: Integer, specified in database units
+

+ + NEW layerName routewidth +

+
Indicates a new wire segment (that is, that there is no wire segment between the last specified coordinate and the next coordinate) on layerName, and specifies the width for the wire. Noncontinuous paths can be defined in this manner. For more information, see "Defining Routing Points".
Type: Integer, specified in database units
+

+ + POLYGON layerName pt pt pt +

+
Specifies a sequence of at least three points to generate a polygon geometry on layerName. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle. Each polygon statement defines a polygon generated by connecting each successive point, then connecting the first and last points. The pt syntax corresponds to a coordinate pair, such as x y. Specify an asterisk (*) to repeat the same value as the previous x or y value from the last point.
Type: (x y) Integer, specified in database units
+

+ + RECT layerName pt pt +

+
Specifies a rectangle on layer layerName. The two points define opposite corners of the rectangle. The pt syntax corresponds to a coordinate pair, such as x y. You cannot define the same x and y values for both points (that is, a zero-area rectangle is not legal).
Type: (x y) Integer, specified in database units
+

+ + ROUTED +

+
Specifies that the wiring can be moved by automatic layout tools. If no wiring is specified for a particular net, the net is unrouted. If you specify ROUTED, you must also specify layerName width.
+

+ + routingPoints +

+
Defines the center line coordinates of the route on layerName. For information on using routing points, see "Defining Routing Points". For an example of special wiring with routing points, see Example 4-31.

The routingPoints syntax is defined as follows:

( x y [extValue])
  { [MASK
maskNum] ( x y [extValue])
  | [MASK
viaMaskNum] viaName [orient]
     [DO
numX BY numY STEP stepX stepY]
 } ...
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

 

+
+

DO numx BY numY STEP stepX stepY

+
+

+
+

+
+

Creates an array of power vias of the via specified with viaName.

+

numX and numY specify the number of vias to create, in the x and y directions. Do not specify 0 as a value.
Type: Integer

+

stepX and stepY specify the step distance between vias, in the x and y directions, in DEF distance database units.
Type: Integer

+

For an example of a via array, see Example 4-30.

+
+

  

+
+

extValue

+
+

Specifies the amount by which the wire is extended past the endpoint of the segment.
Type: Integer, specified in database units
Default: 0

+
+

 

+
+

MASK maskNum

+
+

 

+
+

 

+
+

Specifies which mask for double or triple patterning lithography to use for the next wire. The maskNum variable must be a positive integer. Most applications support values of 1, 2, or 3 only. Shapes without any defined mask have no mask set (that is, they are uncolored).

+
+

 

+
+

MASK viaMaskNum

+
+

 

+
+

 

+
+

Specifies which mask for double or triple patterning lithography is to be applied to the next via's shapes on each layer.

+

The viaMaskNum variable is a hex-encoded three digit value of the form:

+

<topMaskNum><cutMaskNum><bottomMaskNum>

+

For example, MASK 113 means the top metal and cut layer maskNum is 1, and the bottom metal layer maskNum is 3. A value of 0 means the shape on that layer has no mask assignment (is uncolored), so 013 means the top layer is uncolored. If either the first or second digit is missing, they are assumed to be 0, so 013 and 13 mean the same thing. Most applications support maskNum values of 0, 1, 2, or 3 only for double or triple patterning.

+
+

 

+
+

 

+
+

The topMaskNum and bottomMaskNum variables specify which mask the corresponding metal shape belongs to. The via-master metal mask values have no effect.

+

For the cut-layer, the cutMaskNum variable will define the mask for the bottom-most, and then the left-most cut. For multi-cut vias, the via-instance cut masks are derived from the via-master cut mask values. The via-master must have a mask defined for all the cut shapes and every via-master cut mask is "shifted" (from 1 to 2, and 2 to 1 for two mask layers, and from 1 to 2, 2 to 3, and 3 to 1 for three mask layers), so the lower-left cut matches the cutMaskNum value.

+

Similarly, for the metal layer, the topMaskNum/bottomMaskNum would define the mask for the bottom-most, then leftmost metal shape. For multiple disjoint metal shapes, the via-instance metal masks are derived from the via-master metal mask values. The via-master must have a mask defined for all of the metal shapes, and every via-master metal mask is "shifted" (1->2, 2->1 for two mask layers, 1->2, 2->3, 3->1 for three mask layers) so the lower-left cut matches the topMaskNum/bottomMaskNum value.

+

See Example 4-32.

+
+

 

+
+

orient

+
+

Specifies the orientation of the viaName that precedes it, using the standard DEF orientation values of N, S, E, W, FN, FS, FE, and FW (See "Specifying Orientation" ).

+

If you do not specify orient, N (North) is the default non-rotated value used. All other orientation values refer to the flipping or rotation around the via origin (the 0,0 point in the via shapes). The via origin is still placed at the (x y) value given in the routing statement just before the viaName.

+

Note: Some tools do not support orientation of vias inside their internal data structures; therefore, they are likely to translate vias with an orientation into a different but equivalent via that does not require an orientation.

+
+

+
+

viaName

+
+

Specifies a via to place at the last point. If you specify a via, layerName for the next routing coordinates (if any) is implicitly changed to the other routing layer for the via. For example, if the current layer is metal1, a via12 changes the layer to metal2 for the next routing coordinates.

+
+

+
+

( x y )

+
+

Specifies the route coordinates. You cannot specify a route with zero length.

+

For more information, see "Specifying Coordinates".
Type: Integer, specified in database units

+
+

+ Example 4-30  + Via Arrays +

+

The following example specifies arrays of via VIAGEN21_2 on metal1 and metal2.

+

+ SPECIALNETS 2 ; +

+

+     -vdd ( * vdd ) +

+

+        + ROUTED metal1 150 ( 100 100 ) ( 200 * ) +

+

+        NEW metal1 0 ( 200 100 ) VIAGEN21_2 DO 10 BY 20 STEP 10000 20000 +

+

+        NEW metal2 0 (-900 -30 ) VIAGEN21_2 DO 1000 BY 1 STEP 5000 0 +

+

+        ... +

+

As with any other VIA statement, the DO statement does not change the previous coordinate. Therefore, the following statement creates a metal1 wire of width 50 from ( 200 100 ) to ( 200 200 ) along with the via array that starts at ( 200 100 ).

+
+ + NEW metal1 50 ( 200 100 ) VIAGEN21_2 DO 10 BY 20 STEP 1000 2000 ( 200 200 ) +
+

+ Example 4-31  + Special Wiring With Routing Points +

+

+ SPECIALNETS 1 ; +

+
+ + - vdd (*vdd) +
+
+
+ USE POWER
+
+
+
+ POLYGON metal1 ( 0 0 ) ( 0 100 ) ( 100 100 ) ( 200 200 ) ( 200 0 )
+
+
+
+ POLYGON metal2 ( 100 100 ) ( * 200 ) ( 200 * ) ( 300 300 ) ( 300 100 )
+
+
+
+ RECT metal1 ( 0 0 ) ( 100 200 )
+
+
+
+ ROUTED metal1 100 ( 0 0 50 ) ( 100 0 50 ) via12 ( 100 100 50 )
+
+
+
+ ROUTED metal2 100 + SHAPE RING + STYLE 1 ( 0 0 ) ( 100 100 ) ( 200 100 )
+
+
+
;
+
+

+ END SPECIALNETS +

+

+ Example 4-32  + Multi-Mask Layers with Special Wiring +

+

The following example shows a routing statement that specifies three-mask layers M1 and VIA1, and a two-mask layer M2:

+

+ + FIXED + SHAPE RING + MASK 2 + RECT M3 ( 0 0 ) ( 10 10 ) +

+

+ + ROUTED M1 2000 (10 0 ) MASK 3 (10 20 ) VIA1_1 +

+

+     NEW M2 1000 ( 10 10 ) (20 10) MASK 1 ( 20 20 ) MASK 031 VIA1_2 +

+

+ + SHAPE STRIPE + VIA VIA3_3 ( 30 30 ) ( 40 40 ) +

+

+ ; +

+

This indicates that the:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
M3 rectangle shape is on mask 2, has FIXED route status, and shape RING
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
M1 wire shape from (10 0) to (10 20) is on mask 3.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
VIA1_1 via has no preceding MASK statement so all the metal and cut shapes have no mask and are uncolored
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
first NEW M2 wire shape (10 10) to (20 10) has no mask set and is uncolored
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
second M2 wire shape (20 10) to (20 20) is on mask 1
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
VIA1_2 via has a MASK 031 (it can be MASK 31 also) so:
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
topMaskNum is 0 in the 031 value, so no mask is set for the top metal (M2) shape
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
bottomMaskNum is 1 in the 031 value, so mask 1 is used for the bottom metal (M1) shape
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
cutMaskNum is 3 in the 031 value, so the bottom-most, then left-most cut of the via-instance is mask 3. The mask for the other cuts of the via-instance are derived from the via-master by "shifting" the via-master's cut masks to match. So, if the via-master's bottom-left cut is mask 1, then the via-master cuts on mask 1 become mask 3 for the via-instance, and similarly cuts on 2 shift to 1, and cuts on 3 shift to 2. See Figure 4-11.
+
+

The VIA3_3 has shape STRIPE, and the via is at both (30 30) and (40 40). There is no wire segment between (30 30) and (40 40). If the route status is not specified, it is considered as + ROUTED.

+

+ Figure 4-11  + Multi-Mask Patterns with Special Wiring +

+


+

+ + SHAPE +

+
Specifies a wire with special connection requirements because of its shape. This applies to vias as well as wires.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

RING

+
+

Used as ring, target for connection

+
+

   

+
+

PADRING

+
+

Connects padrings

+
+

   

+
+

BLOCKRING

+
+

Connects rings around the blocks

+
+

   

+
+

STRIPE

+
+

Used as stripe

+
+

   

+
+

FOLLOWPIN

+
+

Connects standard cells to power structures.

+
+

   

+
+

IOWIRE

+
+

Connects I/O to target

+
+

    

+
+

COREWIRE

+
+

Connects endpoints of followpin to target

+
+

   

+
+

BLOCKWIRE

+
+

Connects block pin to target

+
+

 

+
+

BLOCKAGEWIRE

+
+

Connects blockages

+
+

   

+
+

FILLWIRE

+
+

Represents a fill shape that does not require OPC. It is normally connected to a power or ground net. Floating fill shapes should be in the FILL section.

+
+

    

+
+

FILLWIREOPC

+
+

Represents a fill shape that requires OPC. It is normally connected to a power or ground net. Floating fill shapes should be in the FILL section.

+
+

   

+
+

DRCFILL

+
+

Used as a fill shape to correct DRC errors, such as SPACING, MINENCLOSEDAREA, or MINSTEP violations on wires and pins of the same net (see Figure 4-12.)

+
+

+ Figure 4-12  + Fill Shapes +

+


+

+ + SHIELD shieldNetName +

+
Specifies the name of a regular net to be shielded by the special net being defined.

After describing shielded routing for a net, use
+ ROUTED to return to the routing of the special net being defined.
+

+ + STYLE styleNum +

+
Specifies a previously defined style from the STYLES section in this DEF file. The style is used with the endpoints of each routing segment to define the routing shape, and applies to all routing segments defined in one routingPoints statement.
+

+ + VIA viaName [orient] pt ... +

+
Specifies the name of the via placed at every point in the list with an optional orientation. For example, the statement
VIA myVia ( 0 0 ) ( 1 1 ) indicates an instance of myVia at 0,0 and at 1,1.
+
+ + ... +
+

+ Example 4-33  + Special Nets Statements +

+

Signoff DRC tools may require metal shapes under the trim metal shapes to fill up the gaps between the line-end of wires sandwiched by the trim metal shape to be output in DEF. Those metal shapes would be written out in _TRIMMETAL_FILLS_RESERVED with the DRCFILL tag in the SPECIALNETS section in the following format:

+

+ - _TRIMMETAL_FILLS_RESERVED +

+

+       + ROUTED + SHAPE DRCFILL + MASK x + RECT M1 (x x) (x x) +

+

As trim metal shapes need to be aligned and merged, dummy patches are often added even on OBS and unconnected pins. Those patches would be written out in _SADP_FILLS_RESERVED with the DRCFILL tag in the SPECIALNETS section in the following format:

+

+ - _SADP_FILLS_RESERVED +

+

+       + ROUTED + SHAPE DRCFILL + MASK x + RECT M1 (x x) (x x) +

+

The following SPECIALNETS statement defines two metal shapes under the trim metal shapes and a dummy patch written out with the DRCFILL tag:

+

+ SPECIALNETS 2 ; +

+

+ - _TRIMMETAL_FILLS_RESERVED +

+

+     + ROUTED + SHAPE DRCFILL + MASK 1 + RECT M1 (30 32) (33 34) +

+

+     + ROUTED + SHAPE DRCFILL + MASK 2 + RECT M1 (36 27) (39 29) +

+

+ - _SADP_FILLS_RESERVED +

+

+     + ROUTED + SHAPE DRCFILL + MASK 2 + RECT M1 (30 27) (36 29) +

+

+ END SPECIALNETS +

+

+ Figure 4-13  + Trim Metal and SADP Fills in the SPECIALNETS Section +

+


+

+ + Defining Routing Points +

+

Routing points define the center line coordinates of a route. If a route has a 90-degree edge, it has a width of routeWidth, and extends from one coordinate (x y) to the next coordinate.

+

If either endpoint has an optional extension value (extValue), the wire is extended by that amount past the endpoint. If a coordinate with an extension value is specified after a via, the wire extension is added to the beginning of the next wire segment after the via (zero-length wires are not allowed). Some applications convert the extension value to an equivalent route that has the x and y points already extended, with no extension value. If no extension value is defined, the wire extension is 0, and the wire is truncated at the endpoint.

+

The routeWidth must be an even value to ensure that the corners of the route fall on a legal database coordinate without round off. Because most vendors specify a manufacturing grid, routeWidth must be an even multiple of the manufacturing grid in order to be fabricated.

+

If the wire segment is a 45-degree edge, and no STYLE is specified, the default octagon style is used for the endpoints. The routeWidth must be an even multiple of the manufacturing grid in order to keep all of the coordinates of the resulting outer wire boundary on the manufacturing grid.

+

If a STYLE is defined for 90-degree or 45-degree routes, the routing shape is defined by the center line coordinates and the style. No corrections, such as snapping to manufacturing grid, should be applied, and any extension values are ignored. The DEF file should contain values that are already snapped, if appropriate. The routeWidth indicates the desired user width, and represents the minimum allowed width of the wire that results from the style when the 45-degree edges are snapped to the manufacturing grid. See Figure 4-15 through Figure 4-24 for examples.

+

+ + Specifying Coordinates +

+

To maximize compactness of the design files, the coordinates allow for the asterisk ( * ) convention. For example, ( x * ) indicates that the y coordinate last specified in the wiring specification is used; ( * y ) indicates that the x coordinate last specified is used.

+

Each coordinate sequence defines a connected orthogonal or 45-degree path through the points. The first coordinate in a sequence must not have an * element.

+

All subsequent points in a connected sequence must create orthogonal or 45-degree paths. For example, the following sequence is a valid path:

+
+ + ( 100 200 ) ( 200 200 ) ( 200 500 ) +
+

The following sequence is an equivalent path:

+
+ + ( 100 200 ) ( 200 * ) ( * 500 ) +
+

The following sequence is not valid because it is not an orthogonal or 45-degree segment.

+
+ + ( 100 200 ) ( 300 500 ) +
+

+ + Special Pins and Wiring +

+

Pins that appear in the SPECIALNETS statement are special pins. Regular routers do not route to these pins. The special router routes special wiring to special pins. If you use a component-based format to input the connectivity for the design, special pins to be routed by the special router also must be specified in the SPECIALNETS statement, because pins included in the COMPONENTS statement are considered regular.

+

The following example inputs connectivity in a component-based format, specifies VDD and VSS pins as special pins, and marks VDD and VSS nets for special routing:

+
+ + COMPONENTS 3 ; +
+
+ +   C1 AND N1 N2 N3 ; +
+
+ +   C2 AND N4 N5 N6 ; +
+
+ + END COMPONENTS +
+
+ +   +
+
+ + SPECIALNETS 2 ; +
+
+ +   VDD ( * VDD ) + WIDTH M1 5 ; +
+
+ +   VSS ( * VSS ) ; +
+
+ + END SPECIALNETS +
+

+ + Shielded Routing +

+

If, in a non-routed design, a net has + SHIELDNET attributes, the router adds shielded routing to this net. + NOSHIELD indicates the last wide segment of the net is not shielded. If the last segment is not shielded and is tapered, use the + TAPER keyword instead of + NOSHIELD. For example:

+
+ + + SHIELDNET VSS # both sides will be shielded with VSS +
+
+ + + SHIELDNET VDD # one side will be shielded with VDD and +
+
+ + + SHIELDNET VSS # one side will be shielded with VSS +
+

After you add shielded routing to a special net, it has the following syntax:

+
+ + + SHIELD regularNetName +
+
+ +   MET2 regularWidth ( x y ) +
+

A shield net specified for a regular net should be defined earlier in the DEF file in the SPECIALNETS section. After describing shielded routing for a net, use + ROUTED to return to the routing of the current special net.

+

For example:

+

+ SPECIALNETS 2 ; +

+
+ + - VSS +
+
+ +    + ROUTED MET2 200 +
+
+ + ... +
+
+ + + SHIELD my_net MET2 100 ( 14100 342440 ) ( 13920 * ) +
+
+ +       M2_TURN ( * 263200 ) M1M2 ( 2400 * ) ; +
+
+ + - VDD +
+
+ +    + ROUTED MET2 200 +
+
+ + ... +
+
+ + + SHIELD my_net MET2 100 ( 14100 340440 ) ( 8160 * ) +
+
+ +       M2_TURN ( * 301600 ) M1M2 ( 2400 * ); +
+

+ END SPECIALNETS +

+

Styles

+
+ [STYLES numStyles ;
{- STYLE styleNum pt pt ... ;} ... +
+
+ END STYLES] +
+

Defines a convex polygon that is used at each of the endpoints of a wire to precisely define the wire's outer boundary. A style polygon consists of two to eight points. Informally, half of the style polygon defines the first endpoint wire boundary, and the other half of the style polygon defines the second endpoint wire boundary. Octagons and squares are the most common styles.

+

+ + numStyles +

+
Specifies the number of styles specified in the STYLES section.
+

+ + STYLE styleNum pt pt +

+
Defines a new style. styleNum is an integer that is greater than or equal to 0 (zero), and is used to reference the style later in the DEF file. When defining multiple styles, the first styleNum must be 0 (zero), and any following styleNum should be numbered consecutively so that a table lookup can be used to find them easily.

Style numbers are keys used locally in the DEF file to reference a particular style, but not actual numbers preserved in the application. Each style number must be unique. Style numbers can only be used inside the same DEF file, and are not preserved for use in other DEF files. Because applications are not required to preserve the style number itself, an application that writes out an equivalent DEF file might use different style numbers.
Type: Integer

The pt syntax specifies a sequence of at least two points to generate a polygon geometry. The syntax corresponds to a coordinate pair, such as x y. Specify an asterisk (*) to repeat the same value as the previous x (or y) value from the last point. The polygon must be convex. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle, and must enclose the point (0 0).
Type: Integer, specified in DEF database units
+

+ Example 4-34  + Styles Statement +

+

The following STYLES statement defines the basic octagon shown in Figure 4-14.

+

+ STYLES 1 ; +

+
+ + - STYLE 1 ( 30 10 ) ( 10 30 ) ( -10 30 ) ( -30 10 ) ( -30 -10 )
            ( -10 -30 ) ( 10 -30 ) ( 30 -10 ) ;
+
+

+ END STYLES +

+

+ Figure 4-14  +   +

+


+

+ + Defining Styles +

+

A style is defined as a polygon with points P1 through Pn. The center line is given as (X0, Y0) to (X1, Y1). Two sets of points are built (P0,1 through P0,n and P1,1 through P1,n) as follows:

+
+ + P0,i = Pi + (X0, Y0) for 1 <= i <= n +
+
+ + P1,i = Pi + (X1, Y1) for 1 <= i <= n +
+

The resulting wire segment shape is a counterclockwise, eight-sided polygon (S1 through S8) that can be computed in the following way:

+

S1 = lowest point in (left-most points in (P0,1 through P0,n P1,1 through P1,n))

+

S2 = left-most point in (lowest points in (P0,1 through P0,n P1,1 through P1,n))

+

S3 = right-most point in (lowest points in (P0,1 through P0,n P1,1 through P1,n))

+

S4 = lowest point in (right-most points in (P0,1 through P0,n P1,1 through P1,n))

+

S5 = highest point in (right-most points in (P0,1 through P0,n P1,1 through P1,n))

+

S6 = right-most point in (highest points in (P0,1 through P0,n P1,1 through P1,n))

+

S7 = left-most point in (highest points in (P0,1 through P0,n P1,1 through P1,n))

+

S8 = highest point in (left-most points in (P0,1 through P0,n P1,1 through P1,n))

+

When consecutive points are collinear, only one of them is relevant, and the resulting shape has less than eight sides, as shown in Figure 4-15. A more advanced algorithm can order the points and only have to check a subset of the points, depending on which endpoint was used, and whether the wire was horizontal, vertical, a 45-degree route, or a 135-degree route.

+

+ Figure 4-15  +   +

+


+

+ + Examples of X Routing with Styles +

+

The following examples illustrate the use of styles for X routing. In two cases, there are examples of SPECIALNETS syntax and NETS syntax that result in the same geometry.

+

Example 1

+

The following statements define an X wire with octagonal ends, as shown in Figure 4-16.

+

+ STYLES 1 ; +

+
+ + - STYLE 0 ( 30 10 ) ( 10 30 ) ( -10 30 ) ( -30 10 ) ( -30 -10 ) ( -10 -30 ) +
+
+ + ( 10 -30 ) ( 30 -10 ) ;          #An octagon. +
+

+ END STYLES +

+

+   +

+

+ SPECIALNETS 1 ; +

+
+ + - VSS ... +
+
+
+ ROUTED metal3 50 + STYLE 0 ( 0 0 ) ( 150 150 ) ( 300 0 ) ( 400 0 ) ;
+
+
+
  #The style applies to all the segments until a NEW statement or ";"
+
+
+
  #at the end of the net.
+
+

+ END SPECIALNETS +

+

+   +

+

+ NETS 1 ; +

+
+ + - mySignal ... +
+
+
+ ROUTED metal3 STYLE 0 ( 0 0 ) ( 150 150 ) ( 300 0 ) ( 400 0 ) ;
+
+
+
#The style applies to all the segments in the ROUTED statement
+
+

+ END NETS +

+

+ Figure 4-16  +   +

+


+

Example 2

+

The following statements define the same X wire with mixed octagonal and manhattan styles, as shown in Figure 4-17.

+

+ STYLES 2 ; +

+
+ + - STYLE 0 ( 30 10 ) ( 10 30 ) ( -10 30 ) ( -30 10 ) ( -30 -10 ) ( -10 -30 ) +
+
+ + ( 10 -30 ) ( 30 -10 ) ;                             #An octagon +
+
+ + - STYLE 1 ( 25 25 ) ( -25 25 ) ( -25 -25 ) ( 25 -25 ) ;  #A square +
+

+ END STYLES +

+

+   +

+

+ SPECIALNETS 1 ; +

+
+ + - POWER (* power) +
+
+
+ ROUTED metal3 50 + STYLE 0 ( 0 0 ) ( 150 150 )
+
+
+
NEW metal3 50 + STYLE 1 ( 150 150 ) ( 300 0 ) ( 400 0 ) ;
+
+

+ END SPECIALNETS +

+

+   +

+

+ NETS 1 ; +

+
+ + - mySignal ... +
+
+
+ ROUTED metal3 STYLE 0 ( 0 0 ) ( 150 150 )
+
+
+
NEW metal3 STYLE 1 ( 150 150 ) ( 300 0 ) ( 400 0 ) ;
+
+

+ END NETS +

+

+ Figure 4-17  +   +

+


+

Note: The square ends might be necessary for connecting to manhattan wires or pins, or in cases where vias have a manhattan shape even on X routing layers. In practice, the middle wire probably would not use a simple square, such as style2; it would use a combination of an octagon and a square for the middle segment style, in order to smooth out the resulting outline at the (150,150) point.

+

Example 3

+

The following statements define a manhattan wire with a width of 70, as shown in Figure 4-18.

+

This example emphasizes that the style overrides the width of 100 units. In this case, the style polygon is a square 70 x 70 units wide, and the vias (via12) are 100 x 100 units wide. The application that creates the styles is responsible for meeting any particular width requirements. Normally, the resulting style-computed width is equal to or larger than the wire width given in the routing statement.

+

+ STYLES 1 ; +

+
+ + - STYLE 0 ( 35 35 ) ( -35 35 ) ( -35 -35 ) ( 35 -35 ) ; +
+

+ END STYLES +

+

+   +

+

+ SPECIALNETS 1 ; +

+
+ + - POWER ... +
+
+
+ ROUTED metal1 100 + STYLE 0 ( 0 0 ) via12 ( 600 * ) via12 ;
+
+

+ END SPECIALNETS +

+

+ Figure 4-18  +   +

+


+

Example 4

+

The following statements define a similar wire that is offset from the center, as shown in Figure 4-19. Similar to Example 3, the center line in both runs through the middle of the X in the vias.

+

+ STYLES 1 ; +

+
+ + - STYLE 0 ( 35 20 ) ( -35 20 ) ( -35 -50 ) ( 35 -50 ) ; #70 x 70 offset square +
+

+ END STYLES +

+

+   +

+

+ SPECIALNETS 1 ; +

+
+ + - POWER ... +
+
+
+ ROUTED metal1 100 + STYLE 0 ( 0 0 ) via12 ( 600 * ) via12 ;
+
+

+ END SPECIALNETS +

+

+ Figure 4-19  +   +

+


+

Example 5

+

The following statements define a wire that uses a "2-point line" style, as shown in Figure 4-20.

+

Note: This example shows the simplest style possible, which is a 2-point line. Generally, it would be easier to use a normal route without a style.

+

+ STYLES 1 ; +

+
+ + - STYLE 0 ( 0 -10 ) ( 0 10 ) ; #a vertical line +
+

+ END STYLES +

+

+   +

+

+ SPECIALNETS 1 ; +

+
+ + - POWER ... +
+
+
+ ROUTED metal1 20 + STYLE 0 ( 0 0 ) ( 100 0 ) ;
+
+

+ END SPECIALNETS +

+

+ Figure 4-20  +   +

+


+

+ + 45-Degree Routing Without Styles +

+

Because many applications only store the wire endpoints and the width of the wire, DEF includes a specific style default definition. If a style is not explicitly defined, the default style is implicitly included with any 45-degree routing segment. It is computed directly from the wire width and endpoints, at the expense of some loss in flexibility.

+

The default style is an octagon (shown in Figure 4-21 ) whose coordinates are computed from the wire width and the manufacturing grid.

+

+ Figure 4-21  +   +

+


+

The octagon is always symmetric about the x and y axis. The coordinates are computed to be exactly the same wire width as equivalent horizontal or vertical wire widths, and as close as possible for the diagonal widths (they are always slightly bigger because of rounding of irrational values), while forcing the coordinates to remain on the manufacturing grid. The wire width must be an even multiple of the manufacturing grid in order to keep A and B on the manufacturing grid.

+

Assume the following rules:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
W = wire width
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
M = manufacturing grid (mgrid). This is derived from the LEF MANUFACTURINGGRID statement.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
D = diagonal width
+
+ +

The octagon coordinates are computed as:

+
A = W/2
+
B = [ceiling(W/(sqrt(2) * M) ) * M] - A
+

The derivation of B can be understood as:

+
D = sqrt( (A + B)2 + (A + B)2) or D = sqrt(2) * (A + B)
+

The diagonal width (D) must be greater than or equal to the wire width (W), and B must be on the manufacturing grid, so D must be equal to W, which results in:

+
D/sqrt(2) = A + B
+
B = D/sqrt(2) - A or W/sqrt(2) - A
+

To force B to be on the manufacturing grid, and keep the diagonal width greater than or equal to the wire width:

+
B on mgrid = ceiling(B / M) * M
+

Which results in the computation:

+
B = [ceiling(W/(sqrt(2) * M) ) * M] - A
+

The following table lists examples coordinate computations:

+

+ Table 4-1  +   +

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ W = Width (μm) +

+
+

+ M = mgrid (μm) +

+
+

+ D = W/(sqrt(2)*M) +

+
+

+ ceiling (D) +

+
+

+ A (μm) +

+
+

+ B (μm) +

+
+

+ Diagonal width (μm) +

+
+

1.0

+
+

0.005

+
+

141.42

+
+

142

+
+

0.5

+
+

0.21

+
+

1.0041

+
+

0.5

+
+

0.005

+
+

  70.71

+
+

71

+
+

0.25

+
+

0.105

+
+

0.5020

+
+

0.15

+
+

0.005

+
+

  21.21

+
+

22

+
+

0.075

+
+

0.035

+
+

0.1556

+
+

0.155*

+
+

0.005

+
+

  21.92

+
+

22

+
+

0.0775*

+
+

0.0325*

+
+

0.1556

+
+

* A width of 0.155 is an odd multiple of the manufacturing grid and is not allowed because it would create coordinates for A and B that are off the manufacturing grid. It is shown for completeness to illustrate how the result is off grid.

+
+

The default style only applies to 45-degree route segments; it does not apply to 90-degree route segments.

+

Example 1

+

The following two routes produce identical routing shapes, as shown in Figure 4-22.

+

+ SPECIALNETS 1 ; +

+
+ + - POWER (* power) +
+
+
+ ROUTED metal3 80 ( 0 0 ) ( 100 0 ) ( 200 100 ) ( 300 100 ) ;
+
+

+ END SPECIALNETS +

+

+   +

+

+ NETS 1 ; +

+
+ + - mySignal ...  #mySignal uses the default routing rule width of 80 +
+
+
+ ROUTED metal3 ( 0 0 0 ) ( 100 0 0 ) ( 200 100 0 ) ( 300 100 0 ) ;
+
+
+
#The wire extension was set to 0 for every point. The wire extension
+
+
+
#is ignored for 45-degree route segments; the default octagon
+
+
+
#overrides it.
+
+

+ END NETS +

+

+ Figure 4-22  +   +

+


+

Example 2

+

The following regular route definition, using the traditional default wire extension of 1/2 * width for the first and last 90-degree endpoints, produces the route shown in Figure 4-23.

+

+ SPECIALNETS 1; +

+
+ + - POWER (* power) #The half-width extensions are given for the first and last +
+
+
+ ROUTED metal3 80 ( 0 0 40 ) ( 100 0 ) ( 200 100 ) ( 300 100 40 ) ;
+
+

+ #The default extension is 0 for SPECIALNETS, so it is not given for +

+

+ #two middle points. +

+

+ END SPECIALNETS +

+

+   +

+

+ NETS 1 ; +

+
+ + - mySignal ... #mySignal uses the default routing rule with width of 80 +
+
+
+ ROUTED metal3 ( 0 0 ) ( 100 0 0 ) ( 200 100 0 ) ( 300 100 ) ;
+
+
+
   #The default extension is half the width for NETS, so it is not
+
+
+
   #included for the first and last end-points.
+
+

+ END NETS +

+

+ Figure 4-23  +   +

+


+

Example 3

+

The following definition, using the traditional default wire extension of 1/2 * width for all of the points, produces the route in Figure 4-24.

+

+ SPECIALNETS 1 ; +

+
+ + - POWER (* power) #The half-width extensions are given explicitly +
+
+
+ ROUTED metal3 80 ( 0 0 40 ) ( 100 40 ) ( 200 100 40 ) ( 300 100 40 ) ;
+
+

+ END SPECIALNETS +

+

+   +

+

+ NETS 1 ; +

+
+ + - mySignal ... #mySignal uses the default routing rule width of 80 +
+
+
+ ROUTED metal3 ( 0 0 ) ( 100 0 ) ( 200 100 ) ( 300 100 ) ;
+
+
+
   #All points use the implicit default 1/2 * width wire extensions.
+
+

+ END NETS +

+

+ Figure 4-24  +   +

+


+

Technology

+
+ [TECHNOLOGY technologyName ;] +
+

Specifies a technology name for the design in the database. In case of a conflict, the previous name remains in effect.

+

Tracks

+
+ [TRACKS
[{X | Y} start DO numtracks STEP space
  [MASK maskNum [SAMEMASK]]
  [LAYER layerName ...]
;] ...] +
+

Defines the routing grid for a standard cell-based design. Typically, the routing grid is generated when the floorplan is initialized. The first track is located at an offset from the placement grid set by the OFFSET value for the layer in the LEF file. The track spacing is the PITCH value for the layer defined in LEF.

+

+ + DO numTracks +

+
Specifies the number of tracks to create for the grid. You cannot specify 0 numtracks.
+

+ + LAYER layerName +

+
Specifies the routing layer used for the tracks. You can specify more than one layer.
+

+ + MASK maskNum [SAMEMASK] +

+
Specifies which mask for double or triple patterning lithography to use for the first routing track. The maskNum variable must be a positive integer - most applications support values of 1, 2, or 3 only. The layer(s) must be declared as two or three mask layers in the LEF LAYER section.

By default, the tracks cycle through all the masks. So you will see alternating masks, such as, 1, 2, 1, 2, etc. for a two-mask layer and 1, 2, 3, 1, 2, 3, etc., for a three-mask layer.

If the SAMEMASK keyword is specified, then all the routing tracks are the same mask as the first track mask. Tracks without any defined mask do not have a mask set (that is, they are uncolored).
See Example 4-35.
+

+ + STEP space +

+
Specifies the spacing between the tracks.
+

+ + {X | Y} start +

+
Specifies the location and direction of the first track defined. X indicates vertical lines; Y indicates horizontal lines. start is the X or Y coordinate of the first line. For example, X 3000 creates a set of vertical lines, with the first line going through (3000 0).
+

+ Example 4-35  + Mask Assignments for Routing Tracks +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following example shows a three-mask layer M1 that has a first track of mask 2 with cycling mask numbers after that:
+
+
+ + TRACKS X 0 DO 20 STEP 5 MASK 2 LAYER M1 ; +
+
This statement will result in M1 vertical tracks at X coordinates with mask assignments of 0 (mask 2), 5 (mask 3), 10 (mask 1), 15 (mask 2), etc., for 20 tracks.
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following statement will result in M1 vertical tracks at X coordinates with mask assignments of 0 (mask 1), 10 (mask 1), 20 (mask 1), 30 (mask 1), etc., for 20 tracks.
+
+
+ + TRACKS X 0 DO 20 STEP 10 MASK 1 SAMEMASK LAYER M1 ; +
+

Units

+
+ [UNITS DISTANCE MICRONS dbuPerMicron ;] +
+

Specifies the database units per micron (dbuPerMicron) to convert DEF distance units into microns.

+

LEF supports values of 100, 200, 400, 800, 1000, 2000, 4000, 8000, 10,000, and 20,000 for the LEF dbuPerMicron. The LEF dbuPerMicron must be greater than or equal to the DEF dbuPerMicron, otherwise you can get round-off errors. The LEF convert factor must also be an integer multiple of the DEF convert factor so no round-off of DEF database unit values is required (e.g., a LEF convert factor of 1000 allows DEF convert factors of 100, 200, 1000, but not 400, 800).

+

The following table shows the valid pairings of the LEF dbuPerMicron and the corresponding legal DEF dbuPerMicron values.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEF dbuPerMicron +

+
+

+ Legal DEF dbuPerMicron +

+
+

100

+
+

100

+
+

200

+
+

100, 200

+
+

400

+
+

100, 200, 400

+
+

800

+
+

100, 200, 400, 800

+
+

1000

+
+

100, 200, 1000

+
+

2000

+
+

100, 200, 400, 1000, 2000

+
+

4000

+
+

100, 200, 400, 800, 1000, 2000, 4000

+
+

8000

+
+

100, 200, 400, 800, 1000, 2000, 4000, 8000

+
+

10,000

+
+

100, 200, 400, 1000, 2000, 10,000

+
+

20,000

+
+

100, 200, 400, 800, 1000, 2000, 4000, 10,000, 20,000

+
+

+ + Using DEF Units +

+

The following table shows examples of how DEF units are used:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Units +

+
+

+ DEF Units +

+
+

+ DEF Value Example +

+
+

+ Real Value +

+
+

Time

+
+

.001 nanosecond

+
+

1500

+
+

1.5 nanoseconds

+
+

Capacitance

+
+

.000001 picofarad

+
+

1,500,000

+
+

1.5 picofarads

+
+

Resistance

+
+

.ooo1 ohm

+
+

15,000

+
+

1.5 ohms

+
+

Power

+
+

.0001 milliwatt

+
+

15,000

+
+

1.5 milliwatts

+
+

Current

+
+

.0001 milliamp

+
+

15,000

+
+

1.5 milliamps

+
+

Voltage

+
+

.001 volt

+
+

1500

+
+

1.5 volts

+
+

The DEF reader assumes divisor factors such that DEF data is given in the database units shown below.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Unit +

+
+

+ Database Precision +

+
+

1 nanosecond

+
+

= 1000 DBUs

+
+

1 picofarad

+
+

= 1,000,000 DBUs

+
+

1 ohm

+
+

= 10,000 DBUs

+
+

1 milliwatt

+
+

= 10,000 DBUs

+
+

1 milliampere

+
+

= 10,000 DBUs

+
+

1 volt

+
+

= 1000 DBUs

+
+

Version

+
+ [VERSION versionNumber ;] +
+

Specifies which version of the DEF syntax is being used.

+

Note: The VERSION statement is not required in a DEF file; however, you should specify it, because it prevents syntax errors caused by the inadvertent use of new versions of DEF with older tools that do not support the new version syntax.

+

Vias

+
+ [VIAS numVias ;
[- viaName
   [   + VIARULE viaRuleName
          + CUTSIZE xSize ySize
          + LAYERS botmetalLayer cutLayer topMetalLayer
          + CUTSPACING xCutSpacing yCutSpacing
          + ENCLOSURE xBotEnc yBotEnc xTopEnc yTopEnc
          [+ ROWCOL numCutRows NumCutCols]
          [+ ORIGIN xOffset yOffset]
          [+ OFFSET xBotOffset yBotOffset xTopOffset yTopOffset]
          [+ PATTERN cutPattern] ]
   | [ + RECT layerName [+ MASK maskNum] pt pt
              | + POLYGON layerName [+ MASK maskNum] pt pt pt] ...]
;] ...
+
+
+ END VIAS] +
+

Lists the names and geometry definitions of all vias in the design. Two types of vias can be listed: fixed vias and generated vias. All vias consist of shapes on three layers: a cut layer and two routing (or masterslice) layers that connect through that cut layer.

+

A fixed via is defined using rectangles or polygons, and does not use a VIARULE. The fixed via name must mean the same via in all associated LEF and DEF files.

+

A generated via is defined using VIARULE parameters to indicate that it was derived from a VIARULE GENERATE statement. For a generated via, the via name is only used locally inside this DEF file. The geometry and parameters are maintained, but the name can be freely changed by applications that use this via when writing out LEF and DEF files to avoid possible via name collisions with other DEF files.

+

+ + CUTSIZE xSize ySize +

+
Specifies the required width (xSize) and height (ySize) of the cut layer rectangles.
Type: Integer, specified in DEF database units
+

+ + CUTSPACING xCutSpacing yCutSpacing +

+
Specifies the required x and y spacing between cuts. The spacing is measured from one cut edge to the next cut edge.
Type: Integer, specified in DEF database units
+

+ + ENCLOSURE xBotEnc yBotEnc xTopEnc yTopEnc +

+
Specifies the required x and y enclosure values for the bottom and top metal layers. The enclosure measures the distance from the cut array edge to the metal edge that encloses the cut array (see Figure 4-25 ).
Type: Integer, specified in DEF database units
+

+ + LAYERS botMetalLayer cutLayer TopMetalLayer +

+
Specifies the required names of the bottom routing/masterslice layer, cut layer, and top routing/masterslice layer. These layer names must be previously defined in layer definitions, and must match the layer names defined in the specified LEF viaRuleName.
+

+ + MASK maskNum +

+
Specifies which mask for double or triple patterning lithography is to be applied to the shapes defined in RECT or POLYGON statements of the via master. The maskNum variable must be a positive integer - most applications support values of 1, 2, or 3 only. For a fixed via made up of RECT/POLYGON statements, the cut-shapes must be either colored or uncolored. It is an error to have partially colored cuts for one via. Uncolored cut shapes should be automatically colored by the reader if the layer is a multi-mask layer.

The metal shapes of the via-master do not need colors because the via-instance has the mask color. Some readers may, however, color them for internal consistency (see Example 4-38 ). So a writer may write out MASK 1 for metal shapes even if they were read in with no mask value.
For uncolored fixed vias, or parameterized vias (with + VIARULE ...), the mask of the cuts are pre-defined as an alternating pattern starting with MASK 1 at the bottom-left. The mask cycles, from left-to-right and bottom-to-top, for the cuts are as shown in Figure 4-30.
+

+ + numVias +

+
Specifies the number of vias listed in the VIA statement.
+

+ + OFFSET xBotOffset yBotOffset xTopOffset yTopOffset +

+
Specifies the x and y offset for the bottom and top metal layers. These values allow each metal layer to be offset independently.

By default, the
0,0 origin of the via is the center of the cut array, and the enclosing metal rectangles. After the non-shifted via is computed, the metal layer rectangles are shifted by adding the appropriate values--the x/y BotOffset values to the metal layer below the cut layer, and the x/y TopOffset values to the metal layer above the cut layer.

These offset values are in addition to any offset caused by the ORIGIN values. For an example and illustration of this syntax, see Example 4-36.
Default: 0, for all values
Type: Integer, in DEF database units
+

+ + ORIGIN xOffset yOffset +

+
Specifies the x and y offset for all of the via shapes. By default, the 0,0 origin of the via is the center of the cut array, and the enclosing metal rectangles. After the non-shifted via is computed, all cut and metal rectangles are shifted by adding these values. For an example and illustration of this syntax, see Example 4-36.
Default: 0, for both values
Type: Integer, in DEF database units
+

+ + PATTERN cutPattern +

+
Specifies the cut pattern encoded as an ASCII string. This parameter is only required when some of the cuts are missing from the array of cuts, and defaults to "all cuts are present," if not specified.

For information on and examples of via cut patterns, see
"Creating Via Cut Patterns".

The cutPattern syntax is defined as follows:

numRows
_rowDefinition
  [_numRows_rowDefinition] ...
+ + + + + + + + + + + +
+
+

 

+
+

numRows

+
+

Specifies a hexadecimal number that indicates how many times to repeat the following row definition. This number can be more than one digit.

+
+

 

+
+

rowDefinition

+
+

Defines one row of cuts, from left to right.

+
+
The rowDefinition syntax is defined as follows:
{[RrepeatNumber]hexDigitCutPattern} ...
+ + + + + + + + + + + + + + + +
+
+

 

+
+

hexDigitCutPattern

+
+

 

+
+

 

+
+

Specifies a single hexadecimal digit that encodes a 4-bit binary value in which 1 indicates a cut is present, and 0 indicates a cut is not present.

+
+

 

+
+

repeatNumber

+
+

Specifies a single hexadecimal digit that indicates how many times to repeat hexDigitCutPattern.

+
+
For parameterized vias (with + VIARULE ...), the cutPattern has an optional suffix added to allow three types of mask color patterns. The default mask color pattern (no suffix) is a checker-board (see Figure 4-28 ). The other two patterns supported are alternating rows, and alternating columns (see Figure 4-29 ).

The optional suffixes are:

<cut_pattern>_MR alternating rows
<cut_pattern>_MC alternating columns
+

+ + POLYGON layerName pt pt pt +

+
Defines the via geometry for the specified layer. You must specify at least three points to generate the polygon, and the edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
Type: (x y) Integer, specified in database units

Each POLYGON statement defines a polygon generated by connecting each successive point, and then the first and last points. The pt syntax corresponds to a coordinate pair, such as (x y). Specify an asterisk (*) to repeat the same value as the previous x or y value from the last point.

For example, + POLYGON ( 0 0 ) ( 10 10 ) ( 10 0 ) creates a triangle shape.

All vias consist of shapes on three layers: a cut layer and two routing (or masterslice) layers that connect through that cut layer. There should be at least one RECT or POLYGON on each of the three layers.
+

+ + RECT layerName pt pt +

+
Defines the via geometry for the specified layer. The points are specified with respect to the via origin. In most cases, the via origin is the center of the via bounding box. All geometries for the via, including the cut layers, are output by the DEF writer.
Type: (x y) Integer, specified in database units

All vias consist of shapes on three layers: a cut layer and two routing (or masterslice) layers that connect through that cut layer. There should be at least one RECT or POLYGON on each of the three layers.
+

+ + ROWCOL numCutRows numCutCols +

+
Specifies the number of cut rows and columns that make up the cut array.
Default: 1, for both values
Type: Positive integer, for both values
+

+ + viaName +

+
Specifies the via name. Via names are generated by appending a number after the rule name. Vias are numbered in the order in which they are created.
+

+ + VIARULE viaRuleName +

+
Specifies the name of the LEF VIARULE that produced this via. This name must be specified before you define any of the other parameters, and must refer to a VIARULE GENERATE via rule. It cannot refer to a VIARULE without a GENERATE keyword.

Specifying the reserved via rule name of DEFAULT indicates that the via should use the previously defined VIARULE GENERATE rule with the DEFAULT keyword that exists for this routing-cut-routing (or masterslice-cut-masterslice) layer combination. This makes it possible for a tool that does not use the LEF VIARULE technology section to still generate DEF generated-via parameters by using the default rule.
+

+ Example 4-36  + Via Rules +

+

The following via rule describes a non-shifted via (that is, a via with no OFFSET or ORIGIN parameters). There are two rows and three columns of via cuts. Figure 4-25 illustrates this via rule.

+
+ + - myUnshiftedVia +
+
+
+ VIARULE myViaRule
+
+
+
+ CUTSIZE 20 20 #xCutSize yCutSize
+
+
+
+ LAYERS metal1 cut12 metal2
+
+
+
+ CUTSPACING 30 30 #xCutSpacing yCutSpacing
+
+
+
+ ENCLOSURE 20 50 50 20 #xBotEnc yBotEnc xTopEnc yTopEnc
+
+
+
+ ROWCOL 2 3 ;
+
+

+ Figure 4-25  + Via Rule +

+


+

The same via rule with the following ORIGIN parameter shifts all of the metal and cut rectangles by 10 in the x direction, and by -10 in the y direction (see Figure 4-26 ):

+
+ + + ORIGIN 10 -10 +
+

+ Figure 4-26  + Via Rule With Origin +

+


+

If the same via rule contains the following ORIGIN and OFFSET parameters, all of the rectangles shift by 10, -10. In addition, the top layer metal rectangle shifts by 20, -20, which means that the top metal shifts by a total of 30, -30.

+
+ + + ORIGIN 10 -10 +
+
+ + + OFFSET 0 0 20 -20 +
+

+ Figure 4-27  + Via Rule With Origin and Offset +

+


+

+ Example 4-37  + Multi-Mask Patterns for Parameterized Vias with Via Rule +

+

The following via rule describes a via cut mask pattern for a parameterized via:

+

+ - myParamVia1         +

+
+ + + VIARULE myGenVia1        + CUTSIZE 40 40 +
+
+ + + LAYERS M1 VIA1 M2        + CUTSPACING 40 40 +
+
+ + + ENCLOSURE 40 0 0 40      + ROWCOL 3 4 +
+
+ + + PATTERN 2_F_1_D ;                          #1 cut in top row is missing +
+

 

+

+ Figure 4-28  + Multi-Mask Patterns for Parameterized Vias +

+


+ +

+ Figure 4-29  + Multi-Mask Patterns for Parameterized Vias using Suffixes +

+


+

For a fixed via specified using RECT or POLYGON statements, the cut shapes must either be all colored or uncolored. If the cuts are not colored, they will be automatically colored in a checkerboard pattern as shown in Figure 4-28. Each via cut with the same lower-left Y value is considered as one row, and each via in one row is a new column. For common "array" style vias with no missing cuts, this coloring is a good one. For vias that do not have a row and column structure or are missing cuts, then this coloring may not be good (see Figure 4-30 ). If the metal layers are not colored, some applications will color them to mask 1 for internal consistency, even though the via master metal shape colors are not really used by LEF or DEF via instances.

+

+ Example 4-38  + Multi-Mask Patterns for Fixed Via +

+

The following example shows a fixed-via with pre-colored cut shapes:

+

+ - myVia1 +

+
+ + + RECT M1 ( -40 -20 ) ( 120 20 )             #no mask, some readers set to 1 +
+
+ + + RECT VIA1 + MASK 1 ( -20 -20 ) ( 20 20 )       #first cut on mask 1 +
+
+ + + RECT VIA1 + MASK 2 ( 60 -20 ) ( 100 20 )      #second cut on mask 2 +
+
+ + + RECT ( -20 -40 ) ( 100 40 )                #no mask, some readers set to 1 +
+

+ Figure 4-30  + Multi-Mask Patterns for Fixed Via +

+


+

See the Fills, Nets, and Special Nets routing statements to see how a via instance uses these via-master mask values.

+

+ + Creating Via Cut Patterns +

+

Via cuts are defined as a series of rows, starting at the bottom, left corner. Each row definition defines one row of cuts, from left to right, and rows are numbered from bottom to top.

+

The PATTERN syntax that defines rows uses the ROWCOL parameters to specify the cut array. If the row has more bits than the numCutCols value in the ROWCOL parameter for this via, the last bits are ignored. The number of rows defined must equal the numCutRows value in the ROWCOL parameter.

+

Figure 4-31 illustrates the following via cut pattern syntax:

+
+ + - myVia +
+
+
+ VIARULE myViaRule
+
+
+
...
+
+
+
+ ROWCOL 5 5
+
+
+
+ PATTERN 2_F0_2_F8_1_78 ;]
+
+

The last three bits of F0, F8, and 78 are ignored because only five bits are allowed in a row. Therefore, the following PATTERN syntax gives the identical pattern:

+
+ + + PATTERN 2_F7_2_FF_1_7F +
+

+ Figure 4-31  +   +

+


+

Figure 4-32 illustrates the following via cut pattern syntax:

+
+ + - myVia +
+
+
+ VIARULE myViaRule
+
+
+
...
+
+
+
+ ROWCOL 5 14
+
+
+
+ PATTERN 2_FFE0_3_R4F ;
+
+

The R4F value indicates a repeat of four Fs. The last two bits of each row definition are ignored because only 14 bits allowed in each row.

+

+ Figure 4-32  +   +

+


+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/Examples.html b/lefdef/doc/lefdefref/Examples.html new file mode 100644 index 00000000..8ea64071 --- /dev/null +++ b/lefdef/doc/lefdefref/Examples.html @@ -0,0 +1,288 @@ + + + + + LEF/DEF 5.8 Language Reference -- A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

A 

+

Examples

+

This appendix contains information about the following topics.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
DEF
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Scan Chain Synthesis Example
+
+

LEF

+
+ VERSION 5.7 ; +
+
+ # DEMO4 CHIP - 1280 ARRAY +
+
+     &alias &&area = (73600,74400) (238240,236400) &endalias
    &alias &&core = (85080,85500) (226760,224700) &endalias
    &alias &&m2stripes = sroute stripe net vss net vdd layer m2
        width
        320 count 2 pattern 87900 4200 218100
        area &&area core &&core &endalias
    &alias &&m3stripes = sroute stripe net vss net vdd layer m3
        width
        600 count 2 pattern 89840 6720 217520
        area &&area core &&core &endalias
    &alias &&powerfollowpins = sroute follow net vss net vdd layer
        m1 width 560
         area &&area core &&core &endalias
    &alias &&powerrepair = sroute repair net vss net vdd area
        &&area core &&core &endalias
# PLACEMENT SITE SECTION
SITE CORE1 SIZE 67.2 BY 6 ; # GCD of all Y sizes of Macros END
    CORE1
SITE IOX SIZE 37.8 BY 444 ; # 151.2 / 4 = 37.8 , 4 sites per pad END IOX
SITE IOY SIZE 436.8 BY 30 ; # 150 / 5 = 30 , 5 sites per pad END IOY
SITE SQUAREBLOCK SIZE 268.8 BY 252 ; END SQUAREBLOCK
SITE I2BLOCK SIZE 672 BY 504 ; END I2BLOCK
SITE LBLOCK SIZE 201.6 BY 168 ; END LBLOCK
SITE CORNER SIZE 436.8 BY 444 ; END CORNER
LAYER POLYS TYPE MASTERSLICE ; END POLYS
LAYER PW TYPE MASTERSLICE ; END PW
LAYER NW TYPE MASTERSLICE ; END NW
LAYER PD TYPE MASTERSLICE ; END PD
LAYER ND TYPE MASTERSLICE ; END ND
LAYER CUT01 TYPE CUT ; END CUT01
LAYER M1 TYPE ROUTING ; DIRECTION VERTICAL ; PITCH 5.6 ; WIDTH2.6 ;
    SPACING 1.5 ;
END M1
LAYER CUT12 TYPE CUT ; END CUT12
LAYER M2 TYPE ROUTING ; DIRECTION HORIZONTAL ; PITCH 6.0 ;
    WIDTH 3.2 ;SPACING 1.6 ;
END M2
LAYER CUT23 TYPE CUT ; END CUT23
LAYER M3 TYPE ROUTING ; DIRECTION VERTICAL ; PITCH 5.6 ; WIDTH 3.6;
    SPACING 1.6 ;
END M3
LAYER OVERLAP TYPE OVERLAP ; END OVERLAP
VIA C2PW DEFAULT LAYER PW ; RECT -2.0 -2.0 2.0 2.0 ;
LAYER CUT01 ; RECT -0.6 -0.6 0.6 0.6 ;
LAYER M1 ; RECT -2.0 -2.0 2.0 2.0 ;
END C2PW
VIA C2NW DEFAULT LAYER NW ; RECT -2.0 -2.0 2.0 2.0 ;
LAYER CUT01 ; RECT -0.6 -0.6 0.6 0.6 ;
LAYER M1 ; RECT -2.0 -2.0 2.0 2.0 ;
END C2NW
VIA C2PD DEFAULT LAYER PD ; RECT -2.0 -2.0 2.0 2.0 ;
LAYER CUT01 ; RECT -0.6 -0.6 0.6 0.6 ;
LAYER M1 ; RECT -2.0 -2.0 2.0 2.0 ;
END C2PD
VIA C2ND DEFAULT LAYER ND ; RECT -2.0 -2.0 2.0 2.0 ;
LAYER CUT01 ; RECT -0.6 -0.6 0.6 0.6 ;
LAYER M1 ; RECT -2.0 -2.0 2.0 2.0 ;
END C2ND
VIA C2POLY DEFAULT LAYER POLYS ; RECT -2.0 -2.0 2.0 2.0 ;
LAYER CUT01 ; RECT -0.6 -0.6 0.6 0.6 ;
LAYER M1 ; RECT -2.0 -2.0 2.0 2.0 ;
END C2POLY
VIA VIA12 DEFAULT LAYER M1 ; RECT -2.0 -2.0 2.0 2.0 ;
LAYER CUT12 ; RECT -0.7 -0.7 0.7 0.7 ;
LAYER M2 ; RECT -2.0 -2.0 2.0 2.0 ;
END VIA12
VIA VIA23 DEFAULT LAYER M3 ; RECT -2.0 -2.0 2.0 2.0 ;
LAYER CUT23 ; RECT -0.8 -0.8 0.8 0.8 ;
LAYER M2 ; RECT -2.0 -2.0 2.0 2.0 ;
END VIA23
SPACING SAMENET CUT01 CUT12 4.0 ;
SAMENET CUT12 CUT23 4.0 ;
END SPACING
VIA VIACENTER12 LAYER M1 ; RECT -4.6 -2.2 4.6 2.2 ;
LAYER CUT12 ; RECT -3.1 -0.8 -1.9 0.8 ; RECT 1.9 -0.8 3.1 0.8 ;
LAYER M2 ; RECT -4.4 -2.0 4.4 2.0 ;
END VIACENTER12
VIA VIATOP12 LAYER M1 ; RECT -2.2 -2.2 2.2 8.2 ;
LAYER CUT12 ; RECT -0.8 5.2 0.8 6.8 ;
LAYER M2 ; RECT -2.2 -2.2 2.2 8.2 ;
END VIATOP12
VIA VIABOTTOM12 LAYER M1 ; RECT -2.2 -8.2 2.2 2.2 ;
LAYER CUT12 ; RECT -0.8 -6.8 0.8 -5.2 ;
LAYER M2 ; RECT -2.2 -8.2 2.2 2.2 ;
END VIABOTTOM12
VIA VIALEFT12 LAYER M1 ; RECT -7.8 -2.2 2.2 2.2 ;
LAYER CUT12 ; RECT -6.4 -0.8 -4.8 0.8 ;
LAYER M2 ; RECT -7.8 -2.2 2.2 2.2 ;
END VIALEFT12
VIA VIARIGHT12 LAYER M1 ; RECT -2.2 -2.2 7.8 2.2 ;
LAYER CUT12 ; RECT 4.8 -0.8 6.4 0.8 ;
LAYER M2 ; RECT -2.2 -2.2 7.8 2.2 ;
END VIARIGHT12
VIA VIABIGPOWER12 LAYER M1 ; RECT -21.0 -21.0 21.0 21.0 ;
LAYER CUT12 ; RECT -2.4 -0.8 2.4 0.8 ;
RECT -19.0 -19.0 -14.2 -17.4 ; RECT -19.0 17.4 -14.2
19.0;
RECT 14.2 -19.0 19.0 -17.4 ; RECT 14.2 17.4 19.0 19.0 ;
RECT -19.0 -0.8 -14.2 0.8 ; RECT -2.4 -19.0 2.4 -17.4 ;
RECT 14.2 -0.8 19 0.8 ; RECT -2.4 17.4 2.4 19.0 ;
LAYER M2 ; RECT -21.0 -21.0 21.0 21.0 ;
END VIABIGPOWER12
VIARULE VIALIST12 LAYER M1 ; DIRECTION VERTICAL ; WIDTH 9.0 TO
9.6;
LAYER M2 ; DIRECTION HORIZONTAL ; WIDTH 3.0 TO 3.0 ;
VIA VIACENTER12 ; VIA VIATOP12 ; VIA VIABOTTOM12 ;
VIA VIALEFT12 ; VIA VIARIGHT12 ;
END VIALIST12
VIARULE VIAGEN12 GENERATE
LAYER M1 ;
 ENCLOSURE 0.01 0.05 ;
LAYER M2 ;
 ENCLOSURE 0.01 0.05 ;
LAYER CUT12 ;
 RECT -0.06 -0.06 0.06 0.06 ;
 SPACING 0.14 BY 0.14 ;
END VIAGEN12
VIA VIACENTER23 LAYER M3 ; RECT -2.2 -2.2 2.2 2.2 ;
LAYER CUT23 ; RECT -0.8 -0.8 0.8 0.8 ;
LAYER M2 ; RECT -2.0 -2.0 2.0 2.0 ;
END VIACENTER23
VIA VIATOP23 LAYER M3 ; RECT -2.2 -2.2 2.2 8.2 ;
LAYER CUT23 ; RECT -0.8 5.2 0.8 6.8 ;
LAYER M2 ; RECT -2.2 -2.2 2.2 8.2 ;
END VIATOP23
VIA VIABOTTOM23 LAYER M3 ; RECT -2.2 -8.2 2.2 2.2 ;
LAYER CUT23 ; RECT -0.8 -6.8 0.8 -5.2 ;
LAYER M2 ; RECT -2.2 -8.2 2.2 2.2 ;
END VIABOTTOM23
VIA VIALEFT23 LAYER M3 ; RECT -7.8 -2.2 2.2 2.2 ;
LAYER CUT23 ; RECT -6.4 -0.8 -4.8 0.8 ;
LAYER M2 ; RECT -7.8 -2.2 2.2 2.2 ;
END VIALEFT23
VIA VIARIGHT23 LAYER M3 ; RECT -2.2 -2.2 7.8 2.2 ;
LAYER CUT23 ; RECT 4.8 -0.8 6.4 0.8 ;
LAYER M2 ; RECT -2.2 -2.2 7.8 2.2 ;
END VIARIGHT23
VIARULE VIALIST23 LAYER M3 ; DIRECTION VERTICAL ; WIDTH 3.6 TO
3.6 ;
LAYER M2 ; DIRECTION HORIZONTAL ; WIDTH 3.0 TO 3.0 ;
VIA VIACENTER23 ; VIA VIATOP23 ; VIA VIABOTTOM23 ;
VIA VIALEFT23 ; VIA VIARIGHT23 ;
END VIALIST23
VIARULE VIAGEN23 GENERATE
LAYER M2 ;
 ENCLOSURE 0.01 0.05 ;
LAYER M3 ;
 ENCLOSURE 0.01 0.05 ;
LAYER CUT23 ;
 RECT -0.06 -0.06 0.06 0.06 ;
 SPACING 0.14 BY 0.14 ;
END VIAGEN23
MACRO CORNER CLASS ENDCAP BOTTOMLEFT ; SIZE 436.8 BY 444 ; SYMMETRY X Y ; SITE CORNER ;
PIN VDD SHAPE RING ; DIRECTION INOUT ;
PORT LAYER M2 ; WIDTH 20 ; PATH 426.8 200 200 200 200 434 ;END
END VDD
PIN VSS SHAPE RING ; DIRECTION INOUT ;
PORT LAYER M2 ; WIDTH 20 ; PATH 100 434 100 100 ; LAYER M1;
WIDTH 20 ; PATH 100 100 426.8 100 ;END
END VSS
END CORNER
+
+
+ MACRO IN1X class pad ; FOREIGN IN1X ; SIZE 151.2 BY 444 ;
    SYMMETRY X ; SITE IOX ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M1 ; PATH 61.6 444 72.8 444 ; END
    END Z
    PIN PO DIRECTION OUTPUT ;
        PORT LAYER M1 ; PATH 78.4 444 84.0 444 ; END
    END PO
    PIN A DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 95.2 444 100.8 444 ; END
    END A
    PIN PI DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 106.4 444 112 444 ; END
    END PI
    PIN VDD DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M2 ; WIDTH 20 ; PATH 10 200 141.2 200 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M1 ; WIDTH 20 ; PATH 10 100 141.2 100 ; END
    END VSS
END IN1X +
+
+ MACRO IN1Y EEQ IN1X ; FOREIGN IN1Y ; class pad ;SIZE 436.8 BY 150 ;
    SYMMETRY Y ; SITE IOY ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 0 69 0 75 ; END
    END Z
    PIN PO DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 0 81 0 87 ; END
    END PO
    PIN A DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 0 51 0 57 ; END
    END A
    PIN PI DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 0 39 0 45 ; END
    END PI
    PIN VDD DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M2 ; WIDTH 20 ; PATH 236.8 10 236.8 140 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M2 ; WIDTH 20 ; PATH 336.8 10 336.8 140 ; END
    END VSS
END IN1Y +
+
+ MACRO FILLER FOREIGN FILLER ; SIZE 67.2 BY 6 ; SYMMETRY X Y;
    SITE CORE1 ;
    PIN VDD DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M1 ; RECT 45.8 0 55 6 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M1 ; RECT 12.2 0 21.4 6 ; END
    END VSS
    OBS LAYER M1 ; RECT 24.1 1.5 43.5 4.5 ; END
END FILLER +
+
+ MACRO INV FOREIGN INVS ; SIZE 67.2 BY 24 ; SYMMETRY X Y ; SITE CORE1 ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 30.8 9 42 9 ; END
    END Z
    PIN A DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 25.2 15 ; END
    END A
    PIN VDD DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 50.4 4.6 50.4 13.4 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 16.8 4.6 16.8 13.4 ; END
    END VSS
    OBS LAYER M1 ; RECT 24.1 1.5 43.5 16.5 ; END
END INV +
+
+ MACRO BUF FOREIGN BUFS ; SIZE 67.2 BY 126 ; SYMMETRY X Y ; SITE
    CORE1 ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 25.2 39 42 39 ; END
    END Z
    PIN A DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 30.8 33 ; END
    END A
    PIN VDD DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ;
        PATH 50.4 4.6 50.4 10.0 56.0 10.0 56.0 115.8 50.4 115.8
            50.4 121.4 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ;
        PATH 16.8 4.6 16.8 10.0 11.2 10.0 11.2 115.8 16.8 115.8
            16.8 121.4 ; END
    END VSS
    OBS LAYER M1 ; RECT 24.1 1.5 43.5 124.5 ; END
END BUF +
+
+ MACRO BIDIR1X FOREIGN BIDIR1X ; class pad ; SIZE 151.2 BY 444 ;
    SYMMETRY X ; SITE IOX ;
    PIN IO DIRECTION INOUT ;
        PORT LAYER M1 ; PATH 61.6 444 67.2 444 ; END
    END IO
    PIN ZI DIRECTION OUTPUT ;
        PORT LAYER M1 ; PATH 78.4 444 84.0 444 ; END
    END ZI
    PIN PO DIRECTION OUTPUT ;
        PORT LAYER M1 ; PATH 95.2 444 100.8 444 ; END
    END PO
    PIN A DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 106.4 444 112.0 444 ; END
    END A
    PIN EN DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 134.4 444 140.0 444 ; END
    END EN
    PIN TN DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 28.0 444 33.6 444 ; END
    END TN
    PIN PI DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 44.8 444 50.4 444 ; END
    END PI
    PIN VDD DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M2 ; WIDTH 20 ; PATH 10 200 141.2 200 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M1 ; WIDTH 20 ; PATH 10 100 141.2 100 ; END
    END VSS
END BIDIR1X +
+
+ MACRO BIDIR1Y EEQ BIDIR1X ; class pad ; FOREIGN BIDIR1Y ; SIZE 436.8
    BY 150 ; SYMMETRY Y ; SITE IOY ;
    PIN IO DIRECTION INOUT ;
        PORT LAYER M2 ; PATH 0 69 0 75 ; END END IO
    PIN ZI DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 0 93 0 99 ; END END ZI
    PIN PO DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 0 81 0 87 ; END END PO
    PIN A DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 0 15 0 21 ; END END A
    PIN EN DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 0 27 0 33 ; END END EN
    PIN TN DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 0 39 0 45 ; END END TN
    PIN PI DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 0 51 0 57 ; END END PI
    PIN VDD DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M2 ; WIDTH 20 ; PATH 236.8 10 236.8 140 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M2 ; WIDTH 20 ; PATH 336.8 10 336.8 140 ; END
        END VSS
END BIDIR1Y +
+
+ MACRO OR2 FOREIGN OR2S ; SIZE 67.2 BY 42 ; SYMMETRY X Y ; SITE
    CORE1 ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 25.2 39 42 39 ; END
    END Z
    PIN A DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 25.2 15 ; END
    END A
    PIN B DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 25.2 3 ; END
    END B
    PIN VDD DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ;
        PATH 50.4 4.6 50.4 10.0 ; PATH 50.4 27.4 50.4 37.4 ;
        VIA 50.4 3 C2PW ; VIA 50.4 21 C2PW ; VIA 50.4 33 C2PW ;
        VIA 50.4 39 C2PW ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 16.8 4.6 16.8 10.0 ;
        PATH 16.8 27.4 16.8 37.4 ;
        VIA 16.8 3 C2NW ; VIA 16.8 15 C2NW ; VIA 16.8 21 C2NW ;
        VIA 16.8 33 C2NW ; VIA 16.8 39 C2NW ; END
    END VSS
    OBS LAYER M1 ; RECT 24.1 1.5 43.5 40.5 ; END
END OR2 +
+
+ MACRO AND2 FOREIGN AND2S ; SIZE 67.2 BY 84 ; SYMMETRY X Y ; SITE
    CORE1 ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 25.2 39 42 39 ; END
    END Z
    PIN A DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 42 15 ; END
    END A
    PIN B DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 42 3 ; END
    END B
    PIN VDD DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 50.4 4.6 50.4 79.4 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE ABUTMENT ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 16.8 4.6 16.8 79.4 ; END
    END VSS
    OBS LAYER M1 ; RECT 24.1 1.5 43.5 82.5 ; END
END AND2 +
+
+ MACRO DFF3 FOREIGN DFF3S ; SIZE 67.2 BY 210 ; SYMMETRY X Y ; SITE
    CORE1 ;
    PIN Q DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 19.6 99 47.6 99 ; END
    END Q
    PIN QN DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 25.2 123 42 123 ; END
    END QN
    PIN D DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 30.8 51 ; END
    END D
    PIN G DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 25.2 3 ; END
    END G
    PIN CD DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 36.4 75 ; END
    END CD
    PIN VDD DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 50.4 4.6 50.4 205.4 ;
    END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 16.8 4.6 16.8 205.4 ;
    END
    END VSS
    OBS LAYER M1 ; RECT 24.1 1.5 43.5 208.5 ; PATH 8.4 3 8.4 123 ;
        PATH 58.8 3 58.8 123 ; PATH 64.4 3 64.4 123; END
END DFF3 +
+
+ MACRO NOR2 FOREIGN NOR2S ; SIZE 67.2 BY 42 ; SYMMETRY X Y ; SITE
    CORE1 ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M1 ; PATH 42 33 ; END
    END Z
    PIN A DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 25.2 15 ; END
    END A
    PIN B DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 36.4 9 ; END
    END B
    PIN VDD DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 50.4 4.6 50.4 37.4 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 16.8 4.6 16.8 37.4 ; END
    END VSS
    OBS LAYER M1 ; RECT 24.1 1.5 43.5 40.5 ; END
END NOR2 +
+
+ MACRO AND2J EEQ AND2 ;    FOREIGN AND2SJ ; SIZE 67.2 BY 48 ;
    SYMMETRY X Y ; ORIGIN 0 6 ; SITE CORE1 ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 25.2 33 42 33 ; END
    END Z
    PIN A DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 42 15 ; END
    END A
    PIN B DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 42 3 ; END
    END B
    PIN VDD DIRECTION INOUT ; SHAPE FEEDTHRU ;
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 50.4 -1.4 50.4 37.4 ;
    END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE FEEDTHRU ;    
        PORT LAYER M1 ; WIDTH 5.6 ; PATH 16.8 -1.4 16.8 37.4 ;
    END
    END VSS
    OBS LAYER M1 ; RECT 24.1 1.5 43.5 34.5 ; END
END AND2J +
+
+ MACRO SQUAREBLOCK FOREIGN SQUAREBLOCKS ; CLASS RING ;SIZE 268.8
    BY 252 ; SITE SQUAREBLOCK ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 22.8 21 246.0 21 ; END
    END Z
    PIN A DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 64.4 33 137.2 33 ;
        PATH 137.2 33 137.2 69 ; PATH 137.2 69 204.4 69 ; END
    END A
    PIN B DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 22.8 129 246.0 129 ; END
    END B
    PIN C DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 70 165 70 153 ; PATH 70 153 126 153 ;
        END
    END C
    PIN D DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 22.8 75 64.4 75 ; END
    END D
    PIN E DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 22.8 87 64.4 87 ; END
    END E
    PIN F DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 22.8 99 64.4 99 ; END
    END F
    PIN G DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 22.8 111 64.4 111 ; END
    END G
    PIN VDD DIRECTION INOUT ; SHAPE RING ;
        PORT LAYER M1 ; WIDTH 3.6 ; PATH 4.0 3.5 4.0 248 ;
        PATH 264.8 100 264.8 248 ; PATH 150 3.5 150 100 ;
        LAYER M2 ; WIDTH 3.6 ; PATH 4.0 3.5 150 3.5 ;
        PATH 150 100 264.8 100 ; PATH 4.0 248 264.8 248 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE RING ;
        PORT LAYER M1 ; WIDTH 3.6 ; PATH 10 10 10 150 ;
        PATH 100 150 100 200 ; PATH 50 200 50 242 ;
        PATH 258.8 10 258.8 242 ; LAYER M2 ; WIDTH 3.6 ;
        PATH 10 150 100 150 ; PATH 100 200 50 200 ;
        PATH 10 10 258.8 10 ; PATH 50 242 258.8 242 ; END
    END VSS
    OBS LAYER M1 ; RECT 13.8 14.0 255.0 237.2 ; END
END SQUAREBLOCK +
+
+ MACRO I2BLOCK FOREIGN I2BLOCKS ; CLASS RING ; SIZE 672 BY 504 ;
    SITE I2BLOCK ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 22.8 21 649.2 21 ; END
    END Z
    PIN A DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 22.8 63 154.0 63 ; PATH 154.0 63 154.0
        129;
        PATH 154.0 129 447.6 129 ; END
    END A
    PIN B DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 137.2 423 447.6 423 ; END
    END B
    PIN C DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 204.4 165 271.6 165 ; END
    END C
    PIN D DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 204.4 171 271.6 171 ; END
    END D
    PIN E DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 204.4 213 204.4 213 ; END
    END E
    PIN F DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 406 249 406 273 ; END
    END F
    PIN G DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 338.8 249 338.8 273 ; END
    END G
    PIN H DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 372.4 357 372.4 381 ; END
    END H
    PIN VDD DIRECTION INOUT ; SHAPE RING ;
        PORT LAYER M1 ; WIDTH 3.6 ; PATH 668 3.5 668 80.5 ;
        PATH 467 80.5 467 465.5 ; PATH 668 465.5 668 500.5 ;
        PATH 4 500.5 4 465.5 ; PATH 138 465.5 138 80.5 ;
        PATH 4 80.5 4 3.5 ; LAYER M2 ; WIDTH 3.6 ; PATH 4 3.5 668 3.5;
        PATH 668 80.5 467 80.5 ; PATH 467 465.5 668 465.5 ;
        PATH 668 500.5 4 500.5 ; PATH 4 465.5 138 465.5 ;
        PATH 138 80.5 4 80.5 ; END
    END VDD
    PIN VSS DIRECTION INOUT ; SHAPE RING ;
        PORT LAYER M1 ; WIDTH 3.6 ; PATH 662 10 662 74 ;
        PATH 461 74 461 472 ; PATH 662 472 662 494 ; PATH 10 494 10
            472;
        PATH 144 472 144 74 ; PATH 10 74 10 10 ;LAYER M2 ; WIDTH
            3.6 ;
        PATH 10 10 662 10 ; PATH 662 74 461 74 ; PATH 461 472 662
472 ;
PATH 662 494 10 494 ; PATH 10 472 144 472 ; PATH 144 74 10
74 ;
END
END VSS
OBS LAYER M1 ; RECT 14 14 658 70 ; RECT 14 476 658 490 ;
RECT 148 14 457 490 ; # rectilinear shape description
LAYER OVERLAP ; RECT 0 0 672 84 ; RECT 134.4 84 470.4 462 ;
RECT 0 462 672 504 ; END
END I2BLOCK
+
+
+ MACRO LBLOCK FOREIGN LBLOCKS ; CLASS RING ; SIZE 201.6 BY 168 ; SITE
    LBLOCK ;
    PIN Z DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 2.8 15 198.8 15 ; END
    END Z
    PIN A DIRECTION OUTPUT ;
        PORT LAYER M2 ; PATH 2.8 81 137.2 81 ; PATH 137.2 81 137.2
            69 ;
        PATH 137.2 69 198.8 69 ; END
    END A
    PIN B DIRECTION INPUT ;
        PORT LAYER M2 ; PATH 2.8 165 64.4 165 ; END
    END B
    PIN C DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 2.8 93 2.8 105 ; END
    END C
    PIN D DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 64.4 93 64.4 105 ; END
    END D
    PIN E DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 198.8 39 198.8 39 ; END
    END E
    PIN F DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 198.8 45 198.8 45 ; END
    END F
    PIN G DIRECTION INPUT ;
        PORT LAYER M1 ; PATH 2.8 111 2.8 111 ; END END G
        PORT LAYER M2 ; WIDTH 3.6 ; PATH 1.8 27 199.8 27 ; END
    END VDD
    PIN VSS DIRECTION INOUT ;
        PORT LAYER M2 ; WIDTH 3.6 ; PATH 1.8 57 199.8 57 ; END
    END VSS
    OBS LAYER M2 ; RECT 1.0 80 66.2 166.5 ; RECT 1.0 1.5 200.6 23 ;
        RECT 1.0 31 200.6 53 ; RECT 1.0 61 200.6 82.5 ;
        # rectilinear shape description
        LAYER OVERLAP ; RECT 0 0 201.6 84 ; RECT 0 84 67.2 168 ;
        END
END LBLOCK +
+
+ END LIBRARY +
+

DEF

+

The following example shows a design netlist.

+
+ DESIGN DEMO4CHIP ;
TECHNOLOGY DEMO4CHIP ;
UNITS DISTANCE MICRONS 100 ;
COMPONENTS 243 ; +
+
+ - CORNER1 CORNER ; - CORNER2 CORNER ; - CORNER3 CORNER ;
- CORNER4 CORNER ; - C01 IN1X ; - C02 IN1Y ; - C04 IN1X ;
- C05 IN1X ; - C06 IN1Y ;
- C07 IN1Y ; - C08 IN1Y ; - C09 IN1Y ; - C10 IN1X ; - C11 IN1X ;
- C13 BIDIR1Y ; - C14 INV ; - C15 BUF ; - C16 BUF ; - C17 BUF ;
- C19 BIDIR1Y ; - C20 INV ; - C21 BUF ; - C22 BUF ; - C23 BUF ;
- C25 BIDIR1Y ; - C26 INV ; - C27 BUF ; - C28 BUF ; - C29 BUF ;
- C31 BIDIR1Y ; - C32 INV ; - C33 BUF ; - C34 BUF ; - C35 BUF ;
- C37 BIDIR1X ; - C39 INV ; - C40 BUF ; - C41 BUF ; - C42 BUF ;
- C44 BIDIR1X ; - C45 INV ; - C46 BUF ; - C47 BUF ; - C48 BUF ;
- C50 BIDIR1Y ; - C51 INV ; - C52 BUF ; - C53 BUF ; - C54 BUF ;
- C56 BIDIR1X ; - C57 INV ; - C58 BUF ; - C59 BUF ; - C60 BUF ;
- D02 BIDIR1X ; - D03 INV ; - D04 BUF ; - D05 BUF ; - D06 BUF ;
- D08 BIDIR1X ; - D09 INV ; - D10 BUF ; - D11 BUF ; - D12 BUF ;
- D14 BIDIR1X ; - D15 INV ; - D16 BUF ; - D17 BUF ; - D19 BUF ;
- D33 BIDIR1Y ; - D34 INV ; - D35 BUF ; - D36 BUF ; - D37 BUF ;
- D39 BIDIR1Y ; - D40 INV ; - D41 BUF ; - D42 BUF ; - D43 BUF ;
- D45 BIDIR1Y ; - D46 INV ; - D47 BUF ; - D48 BUF ; - D49 BUF ;
- D82 OR2 ; - D83 OR2 ; - D84 OR2 ; - D85 OR2 ; - D86 OR2 ;
- D87 OR2 ; - D88 OR2 ; - D89 OR2 ; - D90 OR2 ; - D91 OR2 ;
- D92 OR2 ; - D93 OR2 ;
- E01 AND3 ; - E02 AND3 ; - E03 AND3 ; - E04 AND3 ; - E05 AND3 ;
- E06 AND3 ; - E07 AND3 ; - E08 AND3 ; - E09 AND3 ; - E10 AND3 ;
- E11 AND3 ; - E12 AND3 ; - E13 AND3 ; - E14 AND3 ; - E15 AND3 ;
- E16 AND3 ;
- EE16 IN1X ; - E17 IN1X ; - E18 IN1X ; - E19 IN1X ; - E20 IN1X ;
- E21 IN1X ; - E22 IN1X ; - E23 IN1Y ; - E24 IN1Y ; - E25 IN1Y ;
- E26 INV ; - E27 AND2 ; - E28 AND2 ; - E29 AND2 ; - E30 AND2 ;
- E31 AND2 ; - E32 AND2 ; - E33 OR2 ; - E34 OR2 ; - E35 OR2 ;
- E36 OR2 ; - E37 IN1Y ; - E38A01 DFF3 ; - E38A02 DFF3 ;
- E38A03 DFF3 ;- E38A04 DFF3 ; - E38A05 DFF3 ; - F01 I2BLOCK ;
- F04 OR2 ; - F06 OR2 ; - F07 OR2 ; - F08 OR2 ; - F09 SQUAREBLOCK ;
- F12 LBLOCK ;
- Z14 INV ; - Z15 BUF ; - Z16 BUF ; - Z17 BUF ; - Z20 INV ;
- Z21 BUF ; - Z22 BUF ; - Z23 BUF ; - Z26 INV ; - Z27 BUF ;
- Z28 BUF ; - Z29 BUF ; - Z32 INV ; - Z33 BUF ; - Z34 BUF ;
- Z35 BUF ; - Z39 INV ; - Z40 BUF ; - Z41 BUF ; - Z42 BUF ;
- Z45 INV ; - Z46 BUF ; - Z47 BUF ; - Z48 BUF ; - Z51 INV ;
- Z52 BUF ; - Z53 BUF ; - Z54 BUF ; - Z57 INV ; - Z58 BUF ; - Z59 BUF ;
- Z60 BUF ; - Z103 INV ; - Z104 BUF ; - Z105 BUF ; - Z106 BUF ;
- Z109 INV ; - Z110 BUF ; - Z111 BUF ; - Z112 BUF ; - Z115 INV ;
- Z116 BUF ; - Z117 BUF ; - Z119 BUF ; - Z134 INV ; - Z135 BUF ;
- Z136 BUF ; - Z137 BUF ; - Z140 INV ; - Z141 BUF ; - Z142 BUF ;
- Z143 BUF ; - Z146 INV ; - Z147 BUF ; - Z148 BUF ; - Z149 BUF ;
- Z182 OR2 ; - Z183 OR2 ; - Z184 OR2 ; - Z185 OR2 ; - Z186 OR2 ;
- Z187 OR2 ; - Z188 OR2 ; - Z189 OR2 ; - Z190 OR2 ; - Z191 OR2 ;
- Z192 OR2 ; - Z193 OR2 ; - Z201 AND3 ; - Z202 AND3 ; - Z203 AND3 ;
- Z204 AND3 ; - Z205 AND3 ; - Z206 AND3 ; - Z207 AND3 ; - Z208 AND3 ;
- Z209 AND3 ; - Z210 AND3 ; - Z211 AND3 ; - Z212 AND3 ; - Z213 AND3 ;
- Z214 AND3 ; - Z215 AND3 ; - Z216 AND3 ; - Z226 INV ; - Z227 AND2 ;
- Z228 AND2 ; - Z229 AND2 ; - Z230 AND2 ; - Z231 AND2 ; - Z232 AND2 ;
- Z233 OR2 ; - Z234 OR2 ; - Z235 OR2 ; - Z236 OR2 ; - Z38A01 DFF3 ;
- Z38A02 DFF3 ; - Z38A03 DFF3 ; - Z38A04 DFF3 ; - Z38A05 DFF3 ;
END COMPONENTS
+
+
+ NETS 222 ;
- VDD ( Z216 B ) ( Z215 B ) ( Z214 C ) ( Z214 B )
( Z213 C ) ( Z213 B ) ( Z212 C ) ( Z212 B ) ( Z211 C ) ( Z211 B )
( Z210 C ) ( E23 Z ) ( Z143 Z ) ( Z142 Z ) ( Z141 Z ) ( Z119 Z )
( Z117 Z ) ( Z116 Z ) ( Z106 Z ) ( Z105 Z ) ( Z104 Z ) ( Z34 Z )
( Z33 Z ) ( Z28 Z ) ( Z27 Z ) ( Z22 Z ) ( Z21 Z ) ( Z16 Z )
( Z15 Z ) ( D45 PO ) ( D14 PO ) ( C01 PI ) ( D45 TN ) ( D39 TN )
( D33 TN ) ( D14 TN ) ( D08 TN ) ( D02 TN ) ( C56 TN ) ( C50 TN )
( C44 TN ) ( C37 TN ) ( C31 TN ) ( C25 TN ) ( C19 TN ) ( C13 TN ) ;
- VSS ( Z209 C ) ( Z208 C ) ( Z207 C ) ( Z206 C ) ( Z205 C )
( Z204 C ) ( Z203 C ) ( Z202 C ) ( Z201 C ) ( Z149 Z ) ( Z148 Z )
( Z147 Z ) ( Z137 Z ) ( Z136 Z ) ( Z135 Z ) ( Z112 Z ) ( Z111 Z )
( Z110 Z ) ( Z60 Z ) ( Z59 Z ) ( Z58 Z ) ( Z54 Z ) ( Z53 Z )
( Z52 Z ) ( Z47 Z ) ( Z46 Z ) ( Z41 Z ) ( Z40 Z ) ( E18 Z )
( D49 Z ) ( D43 Z ) ( D45 A ) ( D39 A ) ( D33 A ) ( D14 A )
( D08 A ) ( D02 A ) ( C56 A ) ( C50 A ) ( C44 A ) ( C37 A )
( C31 A ) ( C25 A ) ( C19 A ) ( C13 A ) ; - XX1001 ( Z38A04 G )
( Z38A02 G ) ; - XX100 ( Z38A05 G ) ( Z38A03 G ) ( Z38A01 G ) ;
- XX907 ( Z236 B ) ( Z235 B ) ; - XX906 ( Z234 B ) ( Z233 B ) ;
- XX904 ( Z232 B ) ( Z231 B ) ; - XX903 ( Z230 B ) ( Z229 B ) ;
- XX902 ( Z228 B ) ( Z227 B ) ;
- XX900 ( Z235 A ) ( Z233 A ) ( Z232 A ) ( Z230 A ) ( Z228 A ) ( Z226 A ) ;
- Z38QN4 ( Z38A04 QN ) ( Z210 B ) ; - COZ131 ( Z38A04 Q ) ( Z210 A ) ;
- Z38QN3 ( Z38A03 QN ) ( Z209 B ) ; - COZ121 ( Z38A03 Q ) ( Z209 A ) ;
- Z38QN2 ( Z38A02 QN ) ( Z208 B ) ; - COZ111 ( Z38A02 Q ) ( Z208 A ) ;
- Z38QN1 ( Z38A01 QN ) ( Z207 B ) ; - COZ101 ( Z38A01 Q ) ( Z207 A ) ;
- XX901 ( Z236 A ) ( Z234 A ) ( Z231 A ) ( Z229 A ) ( Z227 A ) ( Z226 Z )
    ( Z193 A ) ;
- X415 ( Z149 A ) ( Z148 A ) ( Z147 A ) ( Z146 Z ) ; - X413 ( Z143 A )
( Z142 A ) ( Z141 A ) ( Z140 Z ) ;
- X411 ( Z137 A ) ( Z136 A ) ( Z135 A ) ( Z134 Z ) ;
- X405 ( Z119 A ) ( Z117 A ) ( Z116 A ) ( Z115 Z ) ;
- X403 ( Z112 A ) ( Z111 A ) ( Z110 A ) ( Z109 Z ) ;
- X401 ( Z106 A ) ( Z105 A ) ( Z104 A ) ( Z103 Z ) ;
- X315 ( Z60 A ) ( Z59 A ) ( Z58 A ) ( Z57 Z ) ;
- X313 ( Z54 A ) ( Z53 A ) ( Z52 A ) ( Z51 Z ) ;
- DIS051 ( Z216 A ) ( Z48 Z ) ;
- X311 ( Z48 A ) ( Z47 A ) ( Z46 A ) ( Z45 Z ) ;
- DIS041 ( Z215 A ) ( Z42 Z ) ; - X309 ( Z42 A ) ( Z41 A ) ( Z40 A )
( Z39 Z ) ;
- X307 ( Z35 A ) ( Z34 A ) ( Z33 A ) ( Z32 Z ) ;
- DIS031 ( Z214 A ) ( Z35 Z ) ; - DIS021 ( Z213 A ) ( Z29 Z ) ;
- X305 ( Z29 A ) ( Z28 A ) ( Z27 A ) ( Z26 Z ) ;
- DIS011 ( Z212 A ) ( Z23 Z ) ;
- X303 ( Z23 A ) ( Z22 A ) ( Z21 A ) ( Z20 Z ) ;
- DIS001 ( Z211 A ) ( Z17 Z ) ;
- X301 ( Z17 A ) ( Z16 A ) ( Z15 A ) ( Z14 Z ) ;
- X1000 ( E38A05 G ) ( E38A03 G ) ( E38A01 G ) ( E37 Z ) ;
- CNTEN ( Z38A05 Q ) ( E38A05 Q ) ( E25 A ) ;
- VIH20 ( E37 PI ) ( E25 PO ) ; - X0907 ( E36 B ) ( E35 B ) ( E25 Z ) ;
- CCLK0 ( F09 A ) ( E24 A ) ; - VIH19 ( E25 PI ) ( E24 PO ) ;
- X0906 ( E34 B ) ( E33 B ) ( E24 Z ) ; - CATH1 ( F09 Z ) ( E23 A ) ;
- VIH18 ( E24 PI ) ( E23 PO ) ; - CRLIN ( F08 Z ) ( E22 A ) ;
- VIH17 ( E23 PI ) ( E22 PO ) ; - X0904 ( E32 B ) ( E31 B ) ( E22 Z ) ;
- NXLIN ( F07 Z ) ( E21 A ) ; - VIH16 ( E22 PI ) ( E21 PO ) ;
- X0903 ( E30 B ) ( E29 B ) ( E21 Z ) ; - RPT1 ( F06 Z ) ( E20 A ) ;
- VIH15 ( E21 PI ) ( E20 PO ) ; - X0902 ( E28 B ) ( E27 B ) ( E20 Z ) ;
- AGISL ( F04 Z ) ( E19 A ) ; - VIH14 ( E20 PI ) ( E19 PO ) ;
- X0900 ( E35 A ) ( E33 A ) ( E32 A ) ( E30 A ) ( E28 A ) ( E26 A )
( E19 Z ) ;
- TSTCN ( Z38A05 QN ) ( E38A05 QN ) ( E18 A ) ;
- VIH13 ( E19 PI ) ( E18 PO ) ; - BCLK1 ( F01 A ) ( E17 A ) ;
- VIH12 ( E18 PI ) ( E17 PO ) ; - CLR0 ( F01 Z ) ( EE16 A ) ;
- VIH11 ( E17 PI ) ( EE16 PO ) ; - BCLKX1 ( Z216 C ) ( E17 Z )
( E16 C ) ; - CLRX0 ( Z38A05 CD ) ( Z38A03 CD ) ( Z38A01 CD )
( Z215 C ) ( E38A05 CD ) ( E38A03 CD ) ( E38A01 CD ) ( EE16 Z )
( E15 C ) ; - E38QN4 ( E38A04 QN ) ( E10 B ) ;
- CAX131 ( E38A04 Q ) ( E10 A ) ; - E38QN3 ( E38A03 QN ) ( E09 B ) ;
- CAX121 ( E38A03 Q ) ( E09 A ) ; - E38QN2 ( E38A02 QN ) ( E08 B ) ;
- CAX111 ( E38A02 Q ) ( E08 A ) ; - E38QN1 ( E38A01 QN ) ( E07 B ) ;
- CAX101 ( E38A01 Q ) ( E07 A ) ;
- SDD111 ( Z38A05 D ) ( Z205 Z ) ( E38A05 D ) ( E05 Z ) ;
- SDD121 ( Z38A04 D ) ( Z204 Z ) ( E38A04 D ) ( E04 Z ) ;
- X0901 ( E36 A ) ( E34 A ) ( E31 A ) ( E29 A ) ( E27 A ) ( E26 Z )
( D93 A ) ;
- VIH21 ( Z192 A ) ( E37 PO ) ( D92 A ) ;
- STRDENB0 ( Z206 B ) ( Z202 B ) ( Z201 B ) ( Z189 B ) ( Z188 B )
( F12 A ) ( E06 B ) ( E02 B ) ( E01 B ) ( D89 B ) ( D88 B ) ;
- STRDENA0 ( Z202 A ) ( Z201 A ) ( Z183 B ) ( Z182 B ) ( F12 Z )
( F01 H ) ( E02 A ) ( E01 A ) ( D83 B ) ( D82 B ) ;
- DAB151 ( F12 H ) ( D48 Z ) ; - DAA151 ( F08 B ) ( D47 Z ) ;
- X0415 ( D49 A ) ( D48 A ) ( D47 A ) ( D46 Z ) ;
- SDD151 ( Z38A01 D ) ( Z201 Z ) ( E38A01 D ) ( E01 Z ) ( D45 EN ) ;
- X0414 ( Z146 A ) ( D46 A ) ( D45 ZI ) ; - D151 ( E14 C ) ( D45 IO ) ;
- DAB141 ( F12 G ) ( D42 Z ) ; - DAA141 ( F08 A ) ( D41 Z ) ;
- X0413 ( D43 A ) ( D42 A ) ( D41 A ) ( D40 Z ) ;
- SDD141 ( Z38A02 D ) ( Z202 Z ) ( E38A02 D ) ( E02 Z ) ( D39 EN ) ;
- VIH60 ( D45 PI ) ( D39 PO ) ; - X0412 ( Z140 A ) ( D40 A ) ( D39 ZI ) ;
- D141 ( E13 C ) ( D39 IO ) ; - SDI131 ( E16 B ) ( D37 Z ) ;
- DAB131 ( F12 F ) ( D36 Z ) ; - DAA131 ( F07 B ) ( D35 Z ) ;
- X0411 ( D37 A ) ( D36 A ) ( D35 A ) ( D34 Z ) ;
- VIH58 ( Z193 Z ) ( D93 Z ) ( D33 PI ) ;
- SDD131 ( Z38A03 D ) ( Z203 Z ) ( E38A03 D ) ( E03 Z ) ( D33 EN ) ;
- VIH59 ( D39 PI ) ( D33 PO ) ; - X0410 ( Z134 A ) ( D34 A ) ( D33 ZI ) ;
- D131 ( E12 C ) ( D33 IO ) ; - SDI101 ( E15 B ) ( D19 Z ) ; ...
- X0315 ( C60 A ) ( C59 A ) ( C58 A ) ( C57 Z ) ;
- SDD071 ( Z211 Z ) ( E11 Z ) ( C56 EN ) ;
- VIH53 ( Z190 Z ) ( D90 Z ) ( D02 PI ) ( C56 PO ) ;
- X0314 ( Z57 A ) ( C57 A ) ( C56 ZI ) ;
- D071 ( E08 C ) ( C56 IO ) ; - SDI061 ( E11 B ) ( C54 Z ) ;
- DAB061 ( F09 H ) ( C53 Z ) ; - DAA061 ( F04 A ) ( C52 Z ) ;
- X0313 ( C54 A ) ( C53 A ) ( C52 A ) ( C51 Z ) ;
- SDD061 ( Z212 Z ) ( E12 Z ) ( C50 EN ) ;
- VIH52 ( Z189 Z ) ( D89 Z ) ( C56 PI ) ( C50 PO ) ;
- X0312 ( Z51 A ) ( C51 A ) ( C50 ZI ) ;
- D061 ( E07 C ) ( C50 IO ) ; - SDI051 ( E16 A ) ( C48 Z ) ;
- DAB051 ( F09 G ) ( C47 Z ) ; - DAA051 ( F01 G ) ( C46 Z ) ;
- X0311 ( C48 A ) ( C47 A ) ( C46 A ) ( C45 Z ) ;
- SDD051 ( Z213 Z ) ( E13 Z ) ( C44 EN ) ;
- VIH51 ( Z188 Z ) ( D88 Z ) ( C50 PI ) ( C44 PO ) ;
- X0310 ( Z45 A ) ( C45 A ) ( C44 ZI ) ;
- D051 ( E06 C ) ( C44 IO ) ; - SDI041 ( E15 A ) ( C42 Z ) ;
- DAB041 ( F09 F ) ( C41 Z ) ; - DAA041 ( F01 F ) ( C40 Z ) ;
- X0309 ( C42 A ) ( C41 A ) ( C40 A ) ( C39 Z ) ;
- SDD041 ( Z214 Z ) ( E14 Z ) ( C37 EN ) ;
- VIH50 ( Z187 Z ) ( D87 Z ) ( C44 PI ) ( C37 PO ) ;
- X0308 ( Z39 A ) ( C39 A ) ( C37 ZI ) ;
- D041 ( E05 C ) ( C37 IO ) ; - SDI031 ( E14 A ) ( C35 Z ) ;
- DAB031 ( F09 E ) ( C34 Z ) ; - DAA031 ( F01 E ) ( C33 Z ) ;
- X0307 ( C35 A ) ( C34 A ) ( C33 A ) ( C32 Z ) ;
- SDD031 ( Z215 Z ) ( E15 Z ) ( C31 EN ) ;
- VIH49 ( Z186 Z ) ( D86 Z ) ( C37 PI ) ( C31 PO ) ;
- X0306 ( Z32 A ) ( C32 A ) ( C31 ZI ) ;
- D031 ( E04 C ) ( C31 IO ) ; - SDI021 ( E13 A ) ( C29 Z ) ;
- DAB021 ( F09 D ) ( C28 Z ) ; - DAA021 ( F01 D ) ( C27 Z ) ;
- X0305 ( C29 A ) ( C28 A ) ( C27 A ) ( C26 Z ) ;
- SDD021 ( Z216 Z ) ( E16 Z ) ( C25 EN ) ;
- VIH48 ( Z185 Z ) ( D85 Z ) ( C31 PI ) ( C25 PO ) ;
- X0304 ( Z26 A ) ( C26 A ) ( C25 ZI ) ;
- D021 ( E03 C ) ( C25 IO ) ; - SDI011 ( E12 A ) ( C23 Z ) ;
- DAB011 ( F09 C ) ( C22 Z ) ; - DAA011 ( F01 C ) ( C21 Z ) ;
- X0303 ( C23 A ) ( C22 A ) ( C21 A ) ( C20 Z ) ;
- SDD011 ( Z209 Z ) ( E09 Z ) ( C19 EN ) ;
- VIH47 ( Z184 Z ) ( D84 Z ) ( C25 PI ) ( C19 PO ) ;
- X0302 ( Z20 A ) ( C20 A ) ( C19 ZI ) ;
- D011 ( E02 C ) ( C19 IO ) ; - SDI001 ( E11 A ) ( C17 Z ) ;
- DAB001 ( F09 B ) ( C16 Z ) ; - DAA001 ( F01 B ) ( C15 Z ) ;
- X0301 ( Z14 A ) ( C17 A ) ( C16 A ) ( C15 A ) ( C14 Z ) ;
- VIH45 ( Z182 Z ) ( D82 Z ) ( C13 PI ) ;
- SDD001 ( Z210 Z ) ( E10 Z ) ( C13 EN ) ;
- VIH46 ( Z183 Z ) ( D83 Z ) ( C19 PI ) ( C13 PO ) ;
- X0300 ( C14 A ) ( C13 ZI ) ; - D001 ( E01 C ) ( C13 IO ) ;
- CCLKB0 ( Z234 Z ) ( Z189 A ) ( E34 Z ) ( D89 A ) ( C11 A ) ;
- VIH10 ( EE16 PI ) ( C11 PO ) ;
- STRAAA ( Z206 A ) ( E06 A ) ( C11 Z ) ;
- CCLKA0 ( Z233 Z ) ( Z188 A ) ( E33 Z ) ( D88 A ) ( C10 A ) ;
- VIH9 ( C11 PI ) ( C10 PO ) ;
- STRB00 ( Z192 B ) ( D92 B ) ( C10 Z ) ;
- CRLINB1 ( Z232 Z ) ( Z187 A ) ( E32 Z ) ( D87 A ) ( C09 A ) ;
- VIH8 ( C10 PI ) ( C09 PO ) ;
- STRA00 ( Z187 B ) ( D87 B ) ( C09 Z ) ;
- CRLINA1 ( Z231 Z ) ( Z186 A ) ( E31 Z ) ( D86 A ) ( C08 A ) ;
- VIH7 ( C09 PI ) ( C08 PO ) ;
- X10001 ( E38A04 G ) ( E38A02 G ) ( C08 Z ) ;
- NXLINB1 ( Z230 Z ) ( Z185 A ) ( E30 Z ) ( D85 A ) ( C07 A ) ;
- VIH6 ( C08 PI ) ( C07 PO ) ;
- CLRX00 ( Z38A04 CD ) ( Z38A02 CD ) ( E38A04 CD ) ( E38A02 CD )
( C07 Z ) ;
- NXLINA1 ( Z229 Z ) ( Z184 A ) ( E29 Z ) ( D84 A ) ( C06 A ) ;
- VIH5 ( C07 PI ) ( C06 PO ) ;
- STRBB0 ( Z205 B ) ( Z193 B ) ( E05 B ) ( D93 B ) ( C06 Z ) ;
- RPTB1 ( Z228 Z ) ( Z183 A ) ( E28 Z ) ( D83 A ) ( C05 A ) ;
- VIH4 ( C06 PI ) ( C05 PO ) ;
- STRAA0 ( Z205 A ) ( Z186 B ) ( E05 A ) ( D86 B ) ( C05 Z ) ;
- RPTA1 ( Z227 Z ) ( Z182 A ) ( E27 Z ) ( D82 A ) ( C04 A ) ;
- VIH3 ( C05 PI ) ( C04 PO ) ;
- STRB0 ( Z204 B ) ( Z203 B ) ( Z191 B ) ( Z190 B ) ( E04 B )
( E03 B ) ( D91 B ) ( D90 B ) ( C04 Z ) ;
- CNTENB0 ( Z236 Z ) ( Z191 A ) ( E36 Z ) ( D91 A ) ( C02 A ) ;
- VIH2 ( C04 PI ) ( C02 PO ) ;
- STRA0 ( Z204 A ) ( Z203 A ) ( Z185 B ) ( Z184 B ) ( E04 A )
( E03 A ) ( D85 B ) ( D84 B ) ( C02 Z ) ;
- CNTENA0 ( Z235 Z ) ( Z190 A ) ( E35 Z ) ( D90 A ) ( C01 A ) ;
- VIH1 ( C02 PI ) ( C01 PO ) ; - CALCH ( E37 A ) ( C01 Z ) ;
+
+
+ # +
+

Scan Chain Synthesis Example

+

You define the scan chain in the COMPONENTS and SCANCHAINS sections in your DEF file.

+
+     COMPONENTS 100 ;
    - SIN MUX ;
    - SOUT PAD ;
    - C1 SDFF ;
    - C2 SDFF ;
    - C3 SDFF ;
    - C4 SDFF ;
    - B1 BUF ;
    - A1 AND ; ...
    END COMPONENTS +
+
+     NETS 150 ;
    - N1 (C1 SO) (C3 SI) ;
    - N2 (C3 SO) (A1 A) ; ...
    END NETS +
+

You do not need to define any scan nets in the NETS section. This portion of the NETS section shows the effect of the scan chain process on existing nets that use components you specify in the SCANCHAINS section.

+
+     SCANCHAINS 1 ;
    - SC
        + COMMONSCANPINS (IN SI) (OUT SO)
        + START SIN Z2
        + FLOATING C1 C2 C3
        + ORDERED C4 B1 (IN A) (OUT Q) ;
        + STOP SOUT A ;
    END SCANCHAINS +
+

Because components C1, C2, and C3 are floating, TROUTE SCANCHAIN can synthesize them in any order in the chain. TROUTE synthesizes ordered components (C4 and B1) in the order you specify.

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/LEFSyntax.html b/lefdef/doc/lefdefref/LEFSyntax.html new file mode 100644 index 00000000..f4e55d94 --- /dev/null +++ b/lefdef/doc/lefdefref/LEFSyntax.html @@ -0,0 +1,9441 @@ + + + + + LEF/DEF 5.8 Language Reference -- 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

1 

+

LEF Syntax

+

This chapter contains information about the following topics:­

+
+ + + + + +
+
+ + ParagraphBullet + +
+
About Library Exchange Format Files
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
General Rules
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Character Information
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Name Escaping Semantics for LEF/DEF Files
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Managing LEF Files
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Order of LEF Statements
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF Statement Definitions
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Bus Bit Characters
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Clearance Measure
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Divider Character
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Extensions
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Layer (Cut)
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Layer (Implant)
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Layer (Masterslice or Overlap)
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Layer (Routing)
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Library
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Macro
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Layer Geometries
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Macro Obstruction Statement
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Macro Pin Statement
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Manufacturing Grid
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Maximum Via Stack
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Nondefault Rule
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Property Definitions
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Site
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Units
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Use Min Spacing
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Version
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Via
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Via Rule
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
Via Rule Generate
+
+

About Library Exchange Format Files

+

A Library Exchange Format (LEF) file contains library information for a class of designs. Library data includes layer, via, placement site type, and macro cell definitions. The LEF file is an ASCII representation using the syntax conventions described in "Typographic and Syntax Conventions".

+

General Rules

+

Note the following information about creating LEF files:

+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
Distance is specified in microns.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Distance precision is controlled by the UNITS statement.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEF statements end with a semicolon ( ; ). You must leave a space between the last character in the statement and the semicolon.
+
+

Character Information

+

For information, see Character Information.

+

Name Escaping Semantics for LEF/DEF Files

+

For information, see Name Escaping Semantics for Identifiers.

+

Managing LEF Files

+

You can define all of your library information in a single LEF file; however this creates a large file that can be complex and hard to manage. Instead, you can divide the information into two files, a "technology" LEF file and a "cell library" LEF file.

+

A technology LEF file contains all of the LEF technology information for a design, such as placement and routing design rules, and process information for layers. A technology LEF file can include any of the following LEF statements:

+
+      [VERSION statement]
[BUSBITCHARS statement]
[DIVIDERCHAR statement]
[UNITS statement]
[MANUFACTURINGGRID statement]
[USEMINSPACING statement]
[CLEARANCEMEASURE statement ;]
[PROPERTYDEFINITIONS statement]
[FIXEDMASK ;]
[LAYER (Nonrouting) statement
 | LAYER (Routing) statement] ...
[MAXVIASTACK statement]
[VIA statement] ...
[VIARULE statement] ...
[VIARULE GENERATE statement] ...
[NONDEFAULTRULE statement] ...
[SITE statement] ...
[BEGINEXT statement] ...
[END LIBRARY] +
+

A cell library LEF file contains the macro and standard cell information for a design. A library LEF file can include any of the following statements:

+
+      [VERSION statement]
[BUSBITCHARS statement]
[DIVIDERCHAR statement]
[VIA statement] ...
[SITE statement]
[MACRO statement
  [PIN statement] ...
  [OBS statement ...] ] ...
[BEGINEXT statement] ...
[END LIBRARY] +
+

When reading in LEF files, always read in the technology LEF file first.

+

Order of LEF Statements

+

LEF files can contain the following statements. You can specify statements in any order; however, data must be defined before it is used. For example, the UNITS statement must be defined before any statements that use values that are dependent on UNITS values, LAYER statements must be defined before statements that use the layer names, and VIA statements must be defined before referencing them in other statements. If you specify statements in the following order, all data is defined before being used.

+
+      [VERSION statement]
[BUSBITCHARS statement]
[DIVIDERCHAR statement]
[UNITS statement]
[MANUFACTURINGGRID statement]
[USEMINSPACING statement]
[CLEARANCEMEASURE statement ;]
[PROPERTYDEFINITIONS statement]
[FIXEDMASK ;]
[  LAYER (Nonrouting) statement
 | LAYER (Routing) statement] ...
[MAXVIASTACK statement]
[VIARULE GENERATE statement] ...
[VIA statement] ...    
[VIARULE statement] ...
[NONDEFAULTRULE statement] ...
[SITE statement] ...
[MACRO statement
  [PIN statement] ...
  [OBS statement ...]] ...
[BEGINEXT statement] ...
[END LIBRARY]
+
+

LEF Statement Definitions

+

The following definitions describe the syntax arguments for the statements that make up a LEF file. Statements are listed in alphabetical order, not in the order they should appear in a LEF file. For the correct order, see "Order of LEF Statements".

+

Bus Bit Characters

+
+ [BUSBITCHARS "delimiterPair" ;] +
+

Specifies the pair of characters used to specify bus bits when LEF names are mapped to or from other databases. The characters must be enclosed in double quotation marks. For example:

+
+ + BUSBITCHARS "[]" ; +
+

If one of the bus bit characters appears in a LEF name as a regular character, you must use a backslash (\) before the character to prevent the LEF reader from interpreting the character as a bus bit delimiter.

+

If you do not specify the BUSBITCHARS statement in your LEF file, the default value is "[]".

+

Clearance Measure

+
+ [CLEARANCEMEASURE {MAXXY | EUCLIDEAN} ;] +
+

Defines the clearance spacing requirement that will be applied to all object spacing in the SPACING and SPACINGTABLE statements. If you do not specify a CLEARANCEMEASURE statement, euclidean distance is used by default.

+

 

+ + + + + + + + + +
+
+

MAXXY

+
+

Uses the largest x or y distances for spacing between objects.

+
+

EUCLIDEAN

+
+

Uses the euclidean distance for spacing between objects. That is, the square root of x2 + y2.

+
+

Divider Character

+
+ [DIVIDERCHAR "character" ;] +
+

Specifies the character used to express hierarchy when LEF names are mapped to or from other databases. The character must be enclosed in double quotation marks. For example:

+
+ + DIVIDERCHAR "/" ; +
+

If the divider character appears in a LEF name as a regular character, you must use a backslash (\) before the character to prevent the LEF reader from interpreting the character as a hierarchy delimiter.

+

If you do not specify the DIVIDERCHAR statement in your LEF file, the default value is "/".

+

Extensions

+
+ [BEGINEXT "tag"
extension +
+
+ ENDEXT] +
+

Adds customized syntax to the LEF file that can be ignored by tools that do not use that syntax. You can also use extensions to add new syntax not yet supported by your version of LEF/DEF, if you are using version 5.1 or later.

+

+ + extension +

+
Specifies the contents of the extension.
+

+ + "tag" +

+
Identifies the extension block. You must enclose tag in double quotation marks.
+

+ Example 1-1  + Extension Statement +

+

+ BEGINEXT "1VSI Signature 1.0" +

+
+ + CREATOR "company name" +
+
+ + DATE "timestamp" +
+
+ + REVISION "revision number" +
+

+ ENDEXT +

+

FIXEDMASK

+
+ [FIXEDMASK ;] +
+

Does not allow mask shifting. All the LEF macro pin mask assignments must be kept fixed and cannot be shifted to a different mask. The LEF macro pin shapes should all have MASK assignments, if FIXEDMASK is present. This statement should be included before the LAYER statements.

+

For example,

+
+ + ... +
+
+ + MANUFACTURINGGRID 0.001 ; +
+
+ + FIXEDMASK ; +
+
+ + LAYER xxx +
+

Some technologies do not allow mask shifting for cells using multi-mask patterning. For example, the pin and routing shapes are all pre-colored and must not be shifted to other masks.

+

Layer (Cut)

+
+ LAYER layerName
TYPE CUT ;
[MASK maskNum ;]
[SPACING cutSpacing
   [CENTERTOCENTER]
   [SAMENET]
   [ LAYER secondLayerName [STACK]
    | ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]
    | PARALLELOVERLAP
    | AREA cutArea
   ]
;] ...
[SPACINGTABLE ORTHOGONAL
       {WITHIN cutWithin SPACING orthoSpacing} ... ;]
[ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing
   {ARRAYCUTS arrayCuts SPACING arraySpacing} ... ;]
[WIDTH minWidth ;]
[ENCLOSURE [ABOVE | BELOW] overhang1 overhang2
  [ WIDTH minWidth [EXCEPTEXTRACUT cutWithin]
  | LENGTH minLength]
;] ...
[PREFERENCLOSURE [ABOVE | BELOW] overhang1 overhang2 [WIDTH minWidth] ;] ...
[RESISTANCE resistancePerCut ;]
[PROPERTY propName propVal ;] ...
[ACCURRENTDENSITY {PEAK | AVERAGE | RMS}
  { value
  | FREQUENCY freq_1 freq_2 ... ;
      [CUTAREA cutArea_1 cutArea_2 ... ;]
      TABLEENTRIES
       v_freq_1_cutArea_1 v_freq_1_cutArea_2 ...
       v_freq_2_cutArea_1 v_freq_2_cutArea_2 ...
       ...
  } ;]
[DCCURRENTDENSITY AVERAGE
  { value
  | CUTAREA cutArea_1 cutArea_2 ... ;
      TABLEENTRIES value_1 value_2 ...
  } ;]
[ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} ;] ...
[ANTENNAAREARATIO value ;] ...
[ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...)} ;] ...
[ANTENNACUMAREARATIO value ;] ...
[ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...)} ;] ...
[ANTENNAAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNACUMROUTINGPLUSCUT ;]
[ANTENNAGATEPLUSDIFF plusDiffFactor ;]
[ANTENNAAREAMINUSDIFF minusDiffFactor ;]
[ANTENNAAREADIFFREDUCEPWL
   ( ( diffArea1 diffAreaFactor1 ) ( diffArea2 diffAreaFactor2 ) ...) ; ]
+
+
+ END layerName +
+

Defines cut layers in the design. Each cut layer is defined by assigning it a name and design rules. You must define cut layers separately, with their own layer statements.

+

You must define layers in process order from bottom to top. For example:

+
+ + poly masterslice +
+
+ + cut01 cut +
+
+ + metal1 routing +
+
+ + cut12 cut +
+
+ + metal2 routing +
+
+ + cut23 cut +
+
+ + metal3 routing +
+

+ + ACCURRENTDENSITY +

+
Specifies how much AC current a cut of a certain area can handle at a certain frequency. For an example using the ACCURRENTDENSITY syntax, see Example 1-9.
+
The ACCURRENTDENSITY syntax is defined as follows:
+
{PEAK | AVERAGE | RMS}
{ value
| FREQUENCY freq_1 freq_2 ... ;
    [CUTAREA cutArea_1 cutArea_2 ... ; ]
    TABLEENTRIES 
    v_freq_1_cutArea_1 v_freq_1_cutArea_2 ...
    
v_freq_2_cutArea_1 v_freq_2_cutArea_2 ...
    ...
} ;
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

PEAK

+
+

Specifies the peak limit of the layer.

+
+

     

+
+

AVERAGE

+
+

Specifies the average limit of the layer.

+
+

    

+
+

RMS

+
+

Specifies the root mean square limit of the layer.

+
+

     

+
+

value

+
+

Specifies a maximum current limit for the layer in milliamps per square micron (mA/μm2).
Type: Float

+
+

     

+
+

FREQUENCY

+
+

Specifies frequency values, in megahertz. You can specify more than one frequency. If you specify multiple frequency values, the values must be specified in ascending order.

+

If you specify only one frequency value, there is no frequency dependency, and the table entries are assumed to apply to all frequencies.
Type: Float

+
+

    

+
+

CUTAREA

+
+

Specifies cut area values, in square microns (μm2). You can specify more than one cut area. If you specify multiple cut area values, the values must be specified in ascending order.

+

If you specify only one cut area value, there is no cut area dependency, and the table entries are assumed to apply to all cut areas.
Type: Float

+
+

    

+
+

TABLEENTRIES

+
+

Defines the maximum current for each frequency and cut area pair specified in the FREQUENCY and CUTAREA statements, in mA/μm2.

+

The pairings define each cut area for the first frequency in the FREQUENCY statement, then the cut areas for the second frequency, and so on. The final value for a given cut area and frequency is computed from a linear interpolation of the table values.
Type: Float

+
+

+ + ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffAreaFactor1 )
(
diffArea2 diffAreaFactor2 ) ...)
+

+
Indicates that the cut_area is multiplied by a diffAreaFactor computed from a piece-wise linear interpolation, based on the diffusion area attached to the cut.
+
The diffArea values are floats, specified in microns squared. The diffArea values should start with 0 and monotonically increase in value to the maximum size diffArea possible. The diffAreaFactor values are floats with no units. The diffAreaFactor values are normally between 0.0 and 1.0. If no statement rule is defined, the diffMetalReduceFactor value in the PAR(mi) equation defaults to 1.0.
+
For more information on the PAR(mi) equation and process antenna models, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAAREAFACTOR value [DIFFUSEONLY] +

+
Specifies the multiply factor for the antenna metal area calculation. DIFFUSEONLY specifies that the current antenna factor should only be used when the corresponding layer is connected to the diffusion.
Default: 1.0
Type: Float
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+
Note: If you specify a value that is greater than 1.0, the computed areas will be larger, and violations will occur more frequently.
+

+ + ANTENNAAREAMINUSDIFF minusDiffFactor +

+
Indicates that the antenna ratio cut_area should subtract the diffusion area connected to it. This means that the ratio is calculated as:
+
ratio = (cutFactor x cut_area - minusDiffFactor x diff_area)/gate_area
+
If the resulting value is less than 0, it should be truncated to 0. For example, if a via2 shape has a final ratio that is less than 0 because it connects to a diffusion shape, then the cumulative check for metal3 (or via3) above the via2 shape adds a cumulative value of 0 from the via2 layer. (See Example 1 in Cut Layer Process Antenna Models, in Appendix C, "Calculating and Fixing Process Antenna Violations."
Type: Float
Default: 0.0
+

+ + ANTENNAAREARATIO value +

+
Specifies the maximum legal antenna ratio, using the area of the metal wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
Type: Integer
+

+ + ANTENNACUMAREARATIO value +

+
Specifies the cumulative antenna ratio, using the area of the metal wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
Type: Integer
+

+ + ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)} +

+
Specifies the cumulative antenna ratio, using the area of the metal wire that is connected to the diffusion diode. You can supply an explicit ratio value or specify piece-wise linear format (PWL), in which case the cumulative ratio is calculated using linear interpolation of the diffusion area and ratio input values. The diffusion input values must be specified in ascending order.
Type: Integer
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNACUMROUTINGPLUSCUT +

+
Indicates that cumulative ratio rules (that is, ANTENNACUMAREARATIO, and ANTENNACUMDIFFAREARATIO) accumulate with the previous routing layer instead of the previous cut layer. Use this to combine metal and cut area ratios into one rule.
+
For more information on process antenna models, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)} +

+
Specifies the antenna ratio, using the area of the metal wire connected to the diffusion diode. You can supply an explicit ratio value or specify piece-wise linear format (PWL), in which case the ratio is calculated using linear interpolation of the diffusion area and ratio input values. The diffusion input values must be specified in ascending order.
Type: Integer
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAGATEPLUSDIFF plusDiffFactor +

+
Indicates the antenna ratio gate area includes the diffusion area multiplied by plusDiffFactor. This means that the ratio is calculated as:
+
ratio = cut_area / (gate_area + plusDiffFactor x diff_area)
+
The ratio rules without "DIFF" (the ANTENNAAREARATIO, ANTENNACUMAREARATIO, ANTENNASIDEAREARATIO, and ANTENNACUMSIDEAREARATIO statements), are unnecessary for this layer if ANTENNAGATEPLUSDIFF is defined because a zero diffusion area is already accounted for by the ANTENNADIFF*RATIO statements.
Type: Float
Default: 0.0
+
For more information on process antenna models, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} +

+
Specifies the oxide model for the layer. If you specify an ANTENNAMODEL statement, that value affects all ANTENNA* statements for the layer that follow it until you specify another ANTENNAMODEL statement.
Default: OXIDE1, for a new LAYER statement
+
Because LEF is sometimes used incrementally, if an ANTENNA statement occurs twice for the same oxide model, the last value specified is used. For any given ANTENNA keyword, only one value or PWL table is stored for each oxide metal on a given layer.
+
For an example using the ANTENNAMODEL syntax, see Example 1-10.
+

+ + ARRAYSPACING +

+
Specifies array spacing rules to use on the cut layer. An array spacing rule is intended for large vias of size 3x3 or larger.
+
The ARRAYSPACING syntax is defined as follows:
+
[ARRAYSPACING [LONGARRAY]
  [WIDTH viaWidth] CUTSPACING cutSpacing
  {ARRAYCUTS arrayCuts
      SPACING arraySpacing} ... ;
]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

CUTSPACING cutSpacing

+
+

 

+
+

 

+
+

Specifies the edge-of-cut to edge-of-cut spacing inside one cut array.

+
+

 

+
+

ARRAYCUTS arrayCuts SPACING arraySpacing

+
+

     

+
+

    

+
+

Indicates that a large via array with a size greater than or equal to arrayCuts x arrayCuts in both dimensions must use N x N cut arrays (where N = arrayCuts) separated from other cut arrays by a distance of greater than or equal to arraySpacing.

+

For example, if arrayCuts = 3, then 2x3 and 2x4 arrays do not need to follow the array spacing rule. However, 3x3 and 3x4 arrays must follow the rule (3x4 is legal, if the LONGARRAY keyword is specified), while 4x4 or 4x5 arrays are violations, unless an arrayCuts = 4 rule is specified. (See Array Spacing Rule Example 1).

+

If you specify multiple {ARRAYCUTS ...} statements, the arrayCuts values must be specified in increasing order. (See Array Spacing Rule Example 3.)

+
+

 

+
+

 

+
+

Specifying more than one ARRAYCUTS statement creates multiple choices for via array generation.

+

For example, you can define an arrayCuts = 4 rule with arraySpacing = 1.0, and an arrayCuts = 5 rule with arraySpacing = 1.5. Either rule is legal, and the application should choose which rule to use (presumably based on which rule produces the most via cuts in the given via area).

+
+

   

+
+

LONGARRAY

+
+

Indicates that the via can use N x M cut arrays, where N = arrayCuts, and M can be any value, including one that is larger than N. (See Array Spacing Rule Example 2.)

+
+

   

+
+

WIDTH viaWidth

+
+

   

+
+

 

+
+

Indicates that the array spacing rules only apply if the via metal width is greater than or equal to viaWidth. (See Array Spacing Rule Example 1.)

+
+

+ Example 1-2  + Array Spacing Rules +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Array Spacing Rule Example 1
+
+
Assume the following array spacing rule exists:
+
+ + ARRAYSPACING WIDTH 2.0 CUTSPACING 0.2 ARRAYCUTS 3 SPACING 1.0 ; +
+
Any via with a metal width greater than or equal to 2.0 μm should use the cut spacing of 0.2 μm between cuts inside 3x3 cut arrays, and the cut arrays should be spaced apart by a distance of greater than or equal to 1.0 μm from other cut arrays. This creates the via shown in Figure 1-1.
+
An array of 3x4 or 3x5 cuts spaced 0.2 μm apart is a violation, unless the LONGARRAY keyword is specified. This is because the 3x3 sub-array, inside 3x4 or 3x5 cut array, does not meet 1.0 μm spacing from other cut arrays. Also, any larger array, such as 4x4 or 4x5 cuts, is a violation because the 3x3 sub-array inside 4x4 or 4x5 cut array requires 1.0 μm spacing from other cut arrays.
+

+ Figure 1-1  + Via Created With Array Spacing Width Rule +

+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
Array Spacing Rule Example 2
+
+
The following array spacing rule is the same as Example 1, except the LONGARRAY keyword is present and the WIDTH keyword is not specified, so it creates the via shown in Figure 1-2 :
+
+ + ARRAYSPACING LONGARRAY CUTSPACING 0.2 ARRAYCUTS 3 SPACING 1.0 ; +
+
An array of 2x2, 2x3, or 2xM cuts ignores this rule.
+
An array of 3x3 or 3xM must have 1.0 μm spacing from other cut arrays and 0.2 μm spacing between the cuts.
+
An array of 4x4 or 4xM is a violation because the array does not have 1.0 μm space from the 3xM sub-array inside the 4xM array.
+

+ Figure 1-2  + Via Created With Array Spacing Long Array Rule +

+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
Array Spacing Rule Example 3
+
+
Assume the following multiple array spacing rules exist:
+
+ + ARRAYSPACING LONGARRAY CUTSPACING 0.2 +
+
+ +      ARRAYCUTS 3 SPACING 1.0 +
+
+ +      ARRAYCUTS 4 SPACING 1.5 +
+
+ +      ARRAYCUTS 5 SPACING 2.0 ; +
+
The application can choose between 3xM cut arrays with 1.0 μm spacing, 4xM cut arrays with 1.5 μm spacing, or 5xM cut arrays with 2.0 μm spacing, using 0.2 cut-to-cut spacing inside each cut array. No WIDTH value indicates that any via with more than three via cuts in both dimensions (that is, 3x3 and 3x4, but not 2x4) must follow these rules.
+

+ + DCCURRENTDENSITY +

+
Specifies how much DC current a via cut of a certain area can handle in units of milliamps per square micron (mA/μm2). For an example using the DCCURRENTDENSITY syntax, see Example 1-11.
+
The DCCURRENTDENSITY syntax is defined as follows:
+
AVERAGE
{ value
| CUTAREA cutArea_1 cutArea_2 ... ;
   TABLEENTRIES value_1 value_2 ...
} ;
+ + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

AVERAGE

+
+

Specifies the average limit for the layer.

+
+

     

+
+

value

+
+

Specifies a current limit for the layer in mA/μm2.
Type: Float

+
+

      

+
+

CUTAREA

+
+

Specifies cut area values, in square microns. You can specify more than one cut area value. If you specify multiple cut area values, the values must be specified in ascending order.
Type: Float

+
+

     

+
+

TABLEENTRIES

+
+

Specifies the maximum current density for each specified cut area, in mA/μm2. The final value for a specific cut area is computed from a linear interpolation of the table values.
Type: Float

+
+

+ + ENCLOSURE +

+
Specifies an enclosure rule for the cut layer.
+
The ENCLOSURE syntax is described as follows:
+
[ENCLOSURE
 [ABOVE | BELOW] overhang1 overhang2
 [ WIDTH minWidth [EXCEPTEXTRACUT cutWithin]
 | LENGTH minLength]
;]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

ENCLOSURE [ABOVE | BELOW] overhang1 overhang2

+
+

     

+
+

   

+
+

Indicates that any rectangle from this cut layer requires the routing layers to overhang by overhang1 on two opposite sides, and by overhang2 on the other two opposite sides. (See Figure 1-3.)
Type: Float, specified in microns

+

If you specify BELOW, the overhang is required on the routing layers below this cut layer. If you specify ABOVE, the overhang is required on the routing layers above this cut layer. If you specify neither, the rule applies to both adjacent routing layers.

+
+

      

+
+

WIDTH minWidth

+
+

     

+
+

   

+
+

Indicates that the enclosure rule only applies when the width of the routing layer is greater than or equal to minWidth. If you do not specify a minimum width, the enclosure rule applies to all widths (as if minWidth equaled 0).
Type: Float, specified in microns

+

If you specify multiple enclosure rules with the same width (or with no width), then there are several legal enclosure rules for this width, and the application only needs to meet one of the rules. If you specify multiple enclosure rules with different minWidth values, the largest minWidth rule that is still less than or equal to the wire width applies.

+

For example, if you specify enclosure rules for 0.0 μm, 1.0 μm, and 2.0 μm widths, then a 0.5 μm wire must meet a 0.0 rule, a 1.5 μm wire must meet a 1.0 rule, and a 2.0 μm wire must meet a 2.0 rule. (See Example 1-3.)

+
+

 

+
+

EXCEPTEXTRACUT cutWithin

+
+

 

+
+

 

+
+

Indicates that if there is another via cut having same metal shapes on both metal layers less than or equal to cutWithin distance away, this ENCLOSURE with WIDTH rule is ignored and the ENCLOSURE rules for minimum width wires (that is, no WIDTH keyword) are applied to the via cuts instead. (See Example 1-4.)
Type: Float, specified in microns

+
+

 

+
+

LENGTH minLength

+
+

 

+
+

 

+
+

Indicates that the enclosure rule only applies if the total length of the longest opposite-side overhangs is greater than or equal to minLength. The total length of the overhang is measured at the via cut center (see illustration F in Figure 1-5 ).
Type: Float, specified in microns

+
+

+ Figure 1-3  + Enclosure Rule +

+


+

+ Example 1-3  + Enclosure Rules +

+ +
+ + LAYER via12 +
+
+ + TYPE CUT ; +
+
+ + WIDTH 0.20 ;                    #cuts .20 x .20 squares +
+
+ + ENCLOSURE BELOW .03 .01 ;       #m1: 0.03 on two opposite sides, 0.01 on other +
+
+ + ENCLOSURE ABOVE .05 .01 ;       #m2: 0.05 on two opposite sides, 0.01 on other +
+
+ + RESISTANCE 10.0 ;               #10.0 ohms per cut +
+
+ + ... +
+
+ + END via12 +
+ +
+ + LAYER via23 +
+
+ + TYPE CUT ; +
+
+ + WIDTH 0.20 ;                  #cuts .20 x .20 squares +
+
+ + SPACING 0.15                  #via23 edge-to-edge spacing is 0.15 +
+
+ + ENCLOSURE .05 .01 ;           #m2, m3: 0.05 on two opposite sides, 0.01 on +
+
+ +                               #other sides +
+
+ + ENCLOSURE .02 .02 WIDTH 1.0 ; #m2 needs 0.02 on all sides if m2 width >=1.0 +
+
+ +                               #m3 needs 0.02 on all sides if m3 width >=1.0 +
+
+ + ENCLOSURE .05 .05 WIDTH 2.0 ; #m2 needs 0.05 on all sides if m2 width >=2.0 +
+
+ +                               #m3 needs 0.05 on all sides if m3 width >=2.0 +
+
+ + ... +
+
+ + END via23 +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following definition describes a cut layer that requires an overhang of .07 μm on all sides of metal3, and an overhang of .09 μm on all sides of metal4, if the widths of metal3 and metal4 are greater than or equal to 1.0 μm:
+
+
+ + LAYER via34 +
+
+ + TYPE CUT ; +
+
+ + WIDTH 0.25 ;                        #cuts .25 x .25 squares +
+
+ + ENCLOSURE .05 .01 ;                 #minimum width enclosure rule +
+
+ + ENCLOSURE BELOW .07 .07 WIDTH 1.0 ;  #m3 needs .07 on all sides if m3 width >=1.0 +
+
+ + ENCLOSURE ABOVE .09 .09 WIDTH 1.0 ; #m4 needs .09 on all sides if m4 width >=1.0 +
+
+ + ... +
+
+ + END via34 +
+

+ Example 1-4  + Enclosure Rule With Width and ExceptExtraCut +

+

The following definition describes a cut layer that requires an enclosure of either .05 μm on opposite sides and 0.0 μm on the other two sides, or 0.04 μm on opposites sides and 0.01 μm on the other two sides. It also requires an enclosure of 0.03 μm in all directions if the wire width is greater than or equal to 0.03 μm, unless there is an extra cut (redundant cut) within 0.2 μm.

+

+ LAYER via34 +

+

+ TYPE CUT ; +

+

+ WIDTH 0.10                      #cuts .10 x .10 squares +

+

+ SPACING 0.10 ;                  #minimum edge-to-edge spacing is 0.10 +

+

+ ENCLOSURE 0.0 0.05 ;            #overhang 0.0 0.05 +

+

+ ENCLOSURE 0.01 0.04 ;           #or, overhang 0.01 0.04 +

+

+ #if width >= 0.3, need 0.03 0.03, unless extra cut across wire within 0.2μm +

+

+ ENCLOSURE 0.03 0.03 WIDTH 0.3 EXCEPTEXTRACUT 0.2 ; +

+

+ ... +

+

+ END via34 +

+

+ Figure 1-4  + Illustrations of Enclosure Rule With Width and ExceptExtraCut +

+


+

+ Example 1-5  + Enclosure Rule With Length and Width +

+

The following definition describes a cut layer that requires an enclosure of .05 μm on opposite sides and 0.0 μm on the other two sides, as long as the total length enclosure on any two opposite sides is greater than or equal to 0.7 μm. Otherwise, it requires 0.05 μm on all sides if the total enclosure length is less than or equal to 0.7 μm. It also requires 0.10 μm on all sides if the metal layer has a width that is greater than or equal to 1.0 μm. (Figure 1-5 illustrates examples of violations and acceptable vias for the three ENCLOSURE rules.)

+

+ LAYER via34 +

+

+ TYPE CUT ; +

+

+ WIDTH 0.20                          #cuts .20 x .20 squares +

+

+ SPACING 0.20 ;                      #via34 edge-to-edge spacing is 0.20 +

+

+ ENCLOSURE 0.05 0.0 LENGTH 0.7 ;     #overhang 0.05 0.0 if total overhang >= 0.7 +

+

+ ENCLOSURE 0.05 0.05 ;               #or, overhang 0.05 on all sides +

+

+ ENCLOSURE 0.10 0.10 WIDTH 1.0 ;     #if width >= 1.0, always need 0.10 +

+

+ ... +

+

+ END via34 +

+

+ Figure 1-5  + Illustrations of Enclosure Rule With Length and Width +

+


+


+

+ + LAYER LayerName +

+
Specifies the name for the layer. This name is used in later references to the layer.
+

+ + MASK maskNum +

+
Specifies how many masks for double- or triple-patterning will be used for this layer. The maskNum variable must be an integer greater than or equal to 2. Most applications support values of 2 or 3 only.
+

+ + PREFERENCLOSURE [ABOVE | BELOW] overhang1 overhang2 [WIDTH minWidth] +

+
Specifies preferred enclosure rules that can improve manufacturing yield, instead of enclosure rules that absolutely must be met (see the ENCLOSURE keyword). Applications should use the PREFERENCLOSURE rule when it has little or no impact on density and routability.
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a layer property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ + RESISTANCE resistancePerCut +

+
Specifies the resistance per cut on this layer. LEF vias without their own specific resistance value, or DEF vias from a VIARULE without a resistance per cut value, can use this resistance value.
+
Via resistance is computed using resistancePerCut and Kirchoff's law for typical parallel resistance calculation. For example, if R =10 ohms per cut, and the via has one cut, then R =10 ohms. If the via has two cuts, then R = (1/2) * 10 = 5 ohms.
+

+ + SPACING +

+
Specifies the minimum spacing allowed between via cuts on the same net or different nets. For via cuts on the same net, this value can be overridden by a spacing with the SAMENET keyword. (See Example 1-6.)
+
The SPACING syntax is defined as follows:
+
[SPACING cutSpacing
  [CENTERTOCENTER]
  [SAMENET]
  [ LAYER secondLayerName [STACK]
  | ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin
      [EXCEPTSAMEPGNET]
  | PARALLELOVERLAP
  | AREA cutArea]
;] ...
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

cutSpacing

+
+

Specifies the default minimum spacing between via cuts, in microns.
Type: Float

+
+

   

+
+

CENTERTOCENTER

+
+

 

+
+

   

+
+

Computes the cutSpacing or cutWithin distances from cut-center to cut-center, instead of from cut-edge to cut-edge (the default behavior). (See Spacing Rule Example 4.)

+
+

    

+
+

SAMENET

+
+

Indicates that the cutSpacing value only applies to same-net cuts. The SAMENET cutSpacing value should be smaller than the normal SPACING cutSpacing value that applies to different-net cuts.

+
+

     

+
+

LAYER secondLayerName

+
+

   

+
+

   

+
+

Applies the spacing rule between objects on the cut layer and objects on 2ndLayerName. The second layer must be a cut or routing layer already defined in the LEF file, or the next routing layer declared in the LEF file. This allows "one layer look ahead," which is needed in some technologies. (See Spacing Rule Example 1.)

+
+

    

+
+

STACK

+
+

Indicates that same-net cuts on two different layers can be stacked if they are aligned. If the cuts are not the same size, the smaller cut must be completely covered by the larger cut, to be considered legal. If both cuts are the same size, the centers of the cuts must be aligned, to be legal; otherwise, the cuts must have cutSpacing between them. If cutSpacing is 0.0, the same-net cut vias can be placed anywhere legally, including slightly overlap case. (See Spacing Rule Example 7.)

+

Most applications only allow spacing checks and STACK checking if secondLayerName is the cut layer below the current cut layer.

+
+

      

+
+

ADJACENTCUTS {2 |3 | 4} WITHIN cutWithin

+
+

    

+
+

   

+
+

Applies the spacing rule only when the cut has two, three, or four via cuts that are less than cutWithin distance, in microns, from each other. You can specify only one ADJACENTCUTS statement per cut layer. For more information, see "Adjacent Via Cuts."
Type: Float (distance)

+
+

 

+
+

EXCEPTSAMEPGNET

+
+

 

+
+

 

+
+

Indicates that the ADJACENTCUTS rule does not apply between cuts, if they are on the same net, and are on a power or ground net. (See Spacing Rule Example 5.)

+
+

 

+
+

PARALLELOVERLAP

+
+

 

+
+

 

+
+

Indicates that cuts on different metal shapes that have a parallel edge overlap greater than 0 require cutSpacing distance between them.

+

Only one PARALLELOVERLAP spacing value is allowed per cut layer. The rule does not apply to cuts that share the same metal shapes above or below that cover the overlap area between the cuts. (See Spacing Rule Example 8.)

+
+

 

+
+

AREA cutArea

+
+

 

+
+

 

+
+

Indicates that any cut with an area greater than or equal to cutArea requires edge-to-edge spacing greater than or equal to cutSpacing to all other cuts. (See Spacing Rule Example 6.)

+

A SPACING statement should already exist that applies to all cuts. Only cuts that have area greater than or equal to cutArea require extra spacing; therefore, cutSpacing for this keyword must be greater than the default spacing.

+

If you include CENTERTOCENTER, the cutSpacing values are computed from cut-center to cut-center, instead of from cut-edge to cut-edge.
Type: Float, specified in microns squared

+
+

+ Example 1-6  + Spacing Rule Examples +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Spacing Rule Example 1
+
+
The following spacing rule defines the cut spacing required between a cut and the routing immediately above the cut. The spacing only applies to "outside edges" of the routing shape, and does not apply to a routing shape already overlapping the cut shape.
+
+ + LAYER cut12 +
+
+
SPACING 0.10 ;              #normal min cut-to-cut spacing
+
+
+
SPACING 0.15 LAYER metal2 ; #spacing from cut to routing edge above
+
+
+
...
+
+
+ + END cut12 +
+
+ + LAYER metal2 +
+
+
...
+
+
+ + END metal2 +
+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
Spacing Rule Example 2
+
+
The following spacing rule specifies that extra space is needed for any via with more than three adjacent cuts, which happens if one via has more than 2x2 cuts (see Figure 1-6 ). A cut that is within .25 μm of three other cuts requires spacing that is greater than or equal to 0.22 μm.
+
+ + LAYER CUT12 +
+
+
SPACING 0.20 ;                           #default cut spacing
+
+
+
SPACING 0.22 ADJACENTCUTS 3 WITHIN 0.25 ;
+
+
+
...
+
+
+ + END CUT12 +
+
+ +   +
+
Adjacent Via Cuts
+
A cut is considered adjacent if it is within distance of another cut in any direction (including a 45-degree angle). Figure 1-6 illustrates adjacent via cuts for 2x2, 2x3, and 3x3 vias, for typical spacing values (that is, the diagonal spacing is greater than the ADJACENTCUTS distance value). For three adjacent cuts, the ADJACENTCUTS rule allows tight cut spacing on 1xn vias and 2x2 vias, but requires larger cut spacing on 2x3, 2x4 and 3xn vias. For four adjacent cuts, the rule allows tight cut spacing on 2xn vias, but it requires larger cut spacing on 3xn vias.
+
The ADJACENTCUTS rule overrides the cut-to-cut spacing used in VIARULE GENERATE statements for large vias if the ADJACENTCUTS spacing value is larger than the VIARULE spacing value.
+

+ Figure 1-6  +   +

+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
Spacing Rule Example 3
+
+
The following spacing rule specifies that extra space is required for any via with 3x3 cuts or more (that is, a cut with four or more adjacent cuts - see Figure 1-6 ). A cut that is within .25 μm of four other cuts requires spacing that is greater than or equal to 0.22 μm.
+
+ + LAYER CUT12 +
+
+
SPACING 0.20 ;                           #default cut spacing
+
+
+
SPACING 0.22 ADJACENTCUTS 4 WITHIN 0.25 ;
+
+
+
...
+
+
+ + END CUT12 +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Spacing Rule Example 4
+
+
The following spacing rule indicates that center-to-center spacing of greater than or equal to 0.30 μm is required if the center-to-center spacing to three or more cuts is less than 0.30 μm. This is equivalent to saying a cut can have only two other cuts with center-to-center spacing that is less than 0.30 μm.
+
+ + SPACING 0.30 CENTERTOCENTER ADJACENTCUTS 3 WITHIN 0.30 ; +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Spacing Rule Example 5
+
+
Figure 1-7 illustrates the following spacing rule:
+
+ + SPACING 1.0 ; +
+
+ + SPACING 1.2 ADJACENTCUTS 2 WITHIN 1.5 EXCEPTSAMEPGNET ; +
+

+ Figure 1-7  + Except Same PG Net Rule +

+

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Spacing Rule Example 6
+
+
The following spacing rule indicates that normal cuts require 0.10 μm edge-to-edge spacing, and cuts with an area greater than or equal to 0.02 μm2 require 0.12 μm edge-to-edge spacing to all other cuts:
+
+ + SPACING 1.0 ; +
+
+ + SPACING 0.12 AREA 0.02 ; +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Spacing Rule Example 7
+
+
The following spacing rule indicates cut23 cuts must be 0.20 μm from cut12 cuts unless they are exactly aligned:
+
+ + LAYER cut23 ; +
+
+ + SPACING 0.20 SAMENET LAYER cut12 STACK ; +
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Spacing Rule Example 8
+
+
Figure 1-8 illustrates the following spacing rule:
+
+ + SPACING 1.0 ; +
+
+ + SPACING 1.5 PARALLELOVERLAP ; +
+

+ Figure 1-8  + Parallel Overlap Rule +

+


+

+ + SPACINGTABLE +

+
Specifies spacing tables to use on the cut layer.
+
The SPACINGTABLE syntax is defined as follows:
+
SPACINGTABLE ORTHOGONAL
 {WITHIN cutWithin SPACING orthoSpacing}...
;]
+ + + + + + + + + + +
+
+

 

+
+

WITHIN cutWithin SPACING orthoSpacing

+
+

 

+
+

 

+
+

Indicates that if two cuts have parallel overlap that is greater than 0, and they are less than cutWithin distance from each other, any other cuts in an orthogonal direction must have greater than or equal to orthoSpacing. (See Example 1-6 , and Figure 1-9.)
Type: Float, specified in microns (for both values)

+
+

+ Example 1-7  + Spacing Table Orthogonal Rule +

+

The following example shows how a spacing table orthogonal rule is defined:

+

+ SPACING 0.10                   #min spacing for all cuts +

+

+ SPACINGTABLE ORTHOGONAL +

+

+     WITHIN 0.15 SPACING 0.11 +

+

+     WITHIN 0.13 SPACING 0.13 +

+

+     WITHIN 0.11 SPACING 0.15 ; +

+

+ Figure 1-9  + Spacing Table Orthogonal Overlap Regions +

+


+

+ + TYPE CUT +

+
Specifies that the layer is for contact-cuts. The layer is later referenced in vias, and in rules for generating vias.
+

+ + WIDTH minWidth +

+
Specifies the minimum width of a cut. In most technologies, this is also the only legal size of a cut.
Type: Float, specified in microns
+

+

Layer (Implant)

+
+ LAYER layerName
TYPE IMPLANT ;
[MASK maskNum ;]
[WIDTH minWidth ;]
[SPACING minSpacing [LAYER layerName2] ;] ...
[PROPERTY propName propVal ;] ...
END layerName +
+

Defines implant layers in the design. Each layer is defined by assigning it a name and simple spacing and width rules. These spacing and width rules only affect the legal cell placements. These rules interact with the library methodology, detailed placement, and filler cell support. You must define implant layers separately, with their own layer statements.

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

LAYER layerName

+
+

Specifies the name for the layer. This name is used in later references to the layer.

+
+

LAYER layerName2

+
+

Specifies the name of another implant layer that requires extra spacing that is greater than or equal to minspacing from this implant layer.

+
+

MASK maskNum

+
+

Specifies how many masks for double- or triple-patterning will be used for this layer. The maskNum variable must be an integer greater than or equal to 2. Most applications only support values of 2 or 3.

+
+

PROPERTY propName propVal

+
+

 

+
+

Specifies a numerical or string value for a layer property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.

+
+

SPACING minSpacing

+
+

 

+
+

Specifies the minimum spacing for the layer. This value affects the legal cell placement.
Type: Float, specified in microns

+
+

TYPE IMPLANT

+
+

Identifies the layer as an implant layer.

+
+

WIDTH minWidth

+
+

Specifies the minimum width for this layer. This value affects the legal cell placement.
Type: Float, specified in microns

+
+

+ Example 1-8  + Implant Layer +

+

Typically, you define high-drive cells on one implant layer and low-drive cells on another implant layer. The following example defines high-drive cells on implant1 and low-drive cells on implant2. Both implant layers cover the entire cell. The placer and filler cell creation attempt to legalize the cell overlaps in abutting rows to ensure that the minimum width and spacing values are met.

+

+ LAYER implant1         #high-drive implant layer +

+
+ + TYPE IMPLANT ; +
+
+ + WIDTH 0.50 ;       #implant rectangles must be >=0.50 microns wide +
+
+ + SPACING 0.50 ;     #implant rectangles must be >=0.50 microns apart +
+

+ END implant1 +

+

+   +

+

+ LAYER implant2         #low-drive implant layer +

+
+ +    TYPE IMPLANT ; +
+
+ +    WIDTH 0.50 ;    #implant rectangles must be >=0.50 microns wide +
+
+ +    SPACING 0.50 ;  #implant rectangles must be >=0.50 microns apart +
+

+ END implant2 +

+

Assume that the high-drive cells and low-drive cells are completely covered by their respective implant layers. Because there is no spacing between implant1 and implant2 specified, you might see a placement like that illustrated in Figure 1-10.

+

+ Figure 1-10  +   +

+


+

Note that you can correct A, C, D, and E by putting in filler cells with the appropriate implant type. However, B cannot be corrected by a filler cell--either the placer must avoid it, or you must allow the filler cell or post-process command to move cells or modify the implant layer to correct the error.

+

Layer (Masterslice or Overlap)

+
+ LAYER layerName
TYPE {MASTERSLICE | OVERLAP} ;
[MASK maskNum ;]
[PROPERTY propName propVal ;] ...
[PROPERTY LEF58_TYPE
   "TYPE [NWELL | PWELL | ABOVEDIEEDGE | BELOWDIEEDGE | DIFFUSION | TRIMPOLY          | TRIMMETAL | REGION]
   ];" ;
[PROPERTY LEF58_TRIMMEDMETAL
   "TRIMMEDMETAL metalLayer [MASK maskNum]
   ]; " ;
END layerName +
+

Defines masterslice (nonrouting) or overlap layers in the design. Masterslice layers are typically polysilicon layers and are only needed if the cell MACROs have pins on the polysilicon layer.

+

The overlap layer should normally be named OVERLAP. It can be used in MACRO definitions to form rectilinear-shaped cells and blocks (that is, an "L"-shaped block).

+

Each layer is defined by assigning it a name and design rules. You must define masterslice or overlap layers separately, with their own layer statements.

+

You must define layers in process order from bottom to top. For example:

+
+ + poly masterslice +
+
+ + cut01 cut +
+
+ + metal1 routing +
+
+ + cut12 cut +
+
+ + metal2 routing +
+
+ + cut23 cut +
+
+ + metal3 routing +
+

+ + LAYER layerName +

+
Specifies the name for the layer. This name is used in later references to the layer.
+

+ + TYPE +

+
Specifies the purpose of the layer.
+ + + + + + + + + + + +
+
+

 

+
+

MASTERSLICE

+
+

Layer is fixed in the base array. If pins appear in the masterslice layers, you must define vias to permit the routers to connect those pins and the first routing layer. Wires are not allowed on masterslice layers.

+

Routing tools can use only one masterslice layer. If a masterslice layer is defined, exactly one cut layer must be defined between the masterslice layer and the adjacent routing layers.

+
+

     

+
+

OVERLAP

+
+

Layer used for overlap checking for rectilinear blocks. Obstruction descriptions in the macro obstruction statements refer to the overlap layer.

+
+

+ + MASK maskNum +

+
Specifies how many masks for double- or triple-patterning will be used for this layer. The maskNum variable must be an integer greater than or equal to 2. Most applications only support values of 2 or 3.
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a layer property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

Type Rule

+

A type rule can be used to further classify a masterslice layer.

+

You can create a type rule by using the following property definition:

+
+ TYPE MASTERSLICE;
PROPERTY LEF58_TYPE
  "TYPE [NWELL | PWELL | ABOVEDIEEDGE | BELOWDIEEDGE | DIFFUSION | TRIMPOLY
         | TRIMMETAL | REGION]
         ;" ; +
+

Where:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

ABOVEDIEEDGE | BELOWDIEEDGE

+
+

 

+
+

Specifies that the masterslice layer is a special one for a hard macro to define an OBS on the layer such that the die boundary of the above or below die do not overlap.

+
+

DIFFUSION

+
+

Defines a diffusion layer.

+
+

NWELL

+
+

Indicates that the layer is a nwell layer.

+
+

PWELL

+
+

Indicates that the layer is a pwell layer.

+
+

REGION

+
+

Defines a special masterslice layer that is used to define the areas of a region on which a set of rules defined in the metal, cut, and/or trim metal layers with the REGION property would be applied.

+
+

TRIMMETAL

+
+

Defines a trim metal layer. This layer type is only used along with metal layers manufactured with self-aligned double patterning (SADP) technology. The TRIMMETAL layer has the shapes for the SADP mask used to "trim" or "cut" or "block" the self-aligned metal lines created during the first mask step of SADP processing. These shapes could be pre-defined in macros/cells or added at the line-end of a wires during routing. There are additional rules in cut and metal layers to define constraints to those shapes on a TRIMMETAL layer.
The TRIMMETAL layer can have the following property to indicate which metal layer or which mask of the metal layer can be trimmed by the TRIMMETAL shapes. The metal layer should have the MASK construct with value of 2 or larger to indicate that it is SADP (or DPT) layer. The TRIMMETAL layer could also have the MASK construct to indicate number of masks on that layer.

+
+ PROPERTY LEF58_TRIMMEDMETAL
"TRIMMEDMETAL metalLayer [MASK maskNum]
  ; " ; +
+
+

TRIMPOLY

+
+
+ Defines a trim poly layer for self-aligned double patterning (SADP) technology. Only cells would have shapes on that layer. +
+
+

Type Rule Examples

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following example indicates that macro A defines a region of (0,0) to (100, 100) with respect to the placement of that macro, such that the boundary of the above die does not overlap:
+
+
+ + LAYER TOPDIE +
+
+ +     TYPE MASTERSLICE +
+
+ +     PROPERTY LEF58_TYPE "TYPE ABOVEDIEEDGE ;" ; +
+
+ + END TOPDIE +
+
+ +   +
+
+ + MACRO A +
+
+ + ... +
+
+ +    OBS +
+
+ +       LAYER TOPDIE +
+
+ +       RECT 0.000 0.000 100.000 100.000 ; +
+
+ +    END +
+
+ + ... +
+
+ + END A +
+
+ +   +
+

+

Trimmed Metal Rule

+

Trimmed metal rules can be used to specify the metal layer that the shapes on the TRIMMETAL layer tries to trim.

+

You can create a trimmed metal rule by using the following property definition:

+
+ PROPERTY LEF58_TRIMMEDMETAL
   "TRIMMEDMETAL metalLayer [MASK maskNum]; " ; +
+

Where:

+

 

+ + + + + + + + +
+
+

TRIMMEDMETAL metalLayer [MASK maskNum]

+
+

 

+
+

Specifies the metal layer metalLayer that the shapes on the TRIMMETAL layer tries to trim. If maskNum is given, only maskNum on metalLayer is trimmed.
Type: Integer

+
+

Example of Trimmed Metal Rule

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following is an example of a double patterned layer TM1 used to trim both masks of M1. As both TM1 and M1 are double-patterned, and the TRIMMEDMETAL property does not specify a mask, it implies that MASK 1 of TM1 trims MASK 1 of M1, and MASK 2 of TM1 trims MASK 2 of M1.
+
+
+ + LAYER TM1
TYPE MASTERSLICE ;
MASK 2 ;
PROPERTY LEF58_TYPE "TYPE TRIMMETAL ; " ;
PROPERTY LEF58_TRIMMEDMETAL "TRIMMEDMETAL M1 ; " ;
...
END TM1
+
+
+ + ...
LAYER M1
TYPE ROUTING ;
MASK 2 ;
...
END M1
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following example is of a single patterned TRIMMETAL TM2 layer, which trims only one mask of the double-patterned M2 layer. This is indicated by the MASK 1 portion of TM2's TRIMMEDMETAL property:
+
+
+ + LAYER TM2
TYPE MASTERSLICE ;
PROPERTY LEF58_TYPE "TYPE TRIMMETAL ; " ;
PROPERTY LEF58_TRIMMEDMETAL "TRIMMEDMETAL M2 MASK 1 ; " ;
...
END TM2
+
+
+ +   +
+
+ + LAYER M2
TYPE ROUTING ;
MASK 2 ;
...
END M2
+
+

Layer (Routing)

+
+ LAYER layerName
TYPE ROUTING ;
[MASK maskNum ;]
DIRECTION {HORIZONTAL | VERTICAL | DIAG45 | DIAG135} ;
PITCH {distance | xDistance yDistance} ;
[DIAGPITCH {distance | diag45Distance diag135Distance} ;]
WIDTH defaultWidth ;
[OFFSET {distance | xDistance yDistance} ;]
[DIAGWIDTH diagWidth ;]
[DIAGSPACING diagSpacing ;]
[DIAGMINEDGELENGTH diagLength ;]
[AREA minArea ;]
[MINSIZE minWidth minLength [minWidth2 minLength2] ... ;]
[[SPACING minSpacing
    [ RANGE minWidth maxWidth
       [ USELENGTHTHRESHOLD
       | INFLUENCE value [RANGE stubMinWidth stubMaxWidth]
       | RANGE minWidth maxWidth]
    | LENGTHTHRESHOLD maxLength [RANGE minWidth maxWidth]
    | ENDOFLINE eolWidth WITHIN eolWithin
         [PARALLELEDGE parSpace WITHIN parWithin [TWOEDGES]]
    | SAMENET [PGONLY]
    | NOTCHLENGTH minNotchLength
    | ENDOFNOTCHWIDTH endOfNotchWidth NOTCHSPACING minNotchSpacing
          NOTCHLENGTH minNotchLength
    ] 
  ;] ...
[SPACINGTABLE
     [PARALLELRUNLENGTH {length} ...
        {WIDTH width {spacing} ...} ... ;
        [SPACINGTABLE
          INFLUENCE {WIDTH width WITHIN distance SPACING spacing} ... ;]
     |TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ...} ... ;
     ]
  ;" ;]
[WIREEXTENSION value ; ]
[MINIMUMCUT numCuts WIDTH width [WITHIN cutDistance]
   [FROMABOVE | FROMBELOW]
   [LENGTH length WITHIN distance] ;] ...
[MAXWIDTH width ;]
[MINWIDTH width ;]
[MINSTEP minStepLength
   [ [INSIDECORNER | OUTSIDECORNER | STEP] [LENGTHSUM maxLength]
   | [MAXEDGES maxEdges] ;]
[MINENCLOSEDAREA area [WIDTH width] ;] ...
[PROTRUSIONWIDTH width1 LENGTH length WIDTH width2 ;]
[RESISTANCE RPERSQ value ;]
[CAPACITANCE CPERSQDIST value ;]
[HEIGHT distance ;]
[THICKNESS distance ;]
[SHRINKAGE distance ;]
[CAPMULTIPLIER value ;]
[EDGECAPACITANCE value ;]
[MINIMUMDENSITY minDensity ;]
[MAXIMUMDENSITY maxDensity ;]
[DENSITYCHECKWINDOW windowLength windowWidth ;]
[DENSITYCHECKSTEP stepValue ;]
[FILLACTIVESPACING spacing ;]
[ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} ;] ...
[ANTENNAAREARATIO value ;] ...
[ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNACUMAREARATIO value ;] ...
[ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNAAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNASIDEAREARATIO value ;] ...
[ANTENNADIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNACUMSIDEAREARATIO value ;] ...
[ANTENNACUMDIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNASIDEAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNACUMROUTINGPLUSCUT ;]
[ANTENNAGATEPLUSDIFF plusDiffFactor ;]
[ANTENNAAREAMINUSDIFF minusDiffFactor ;]
[ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffMetalFactor1 )
    ( diffArea2 diffMetalFactor2 ) ...) ;]
[PROPERTY propName propVal ;] ...
[ACCURRENTDENSITY {PEAK | AVERAGE | RMS}
   { value
   | FREQUENCY freq_1 freq_2 ... ;
       [WIDTH width_1 width_2 ... ;]
       TABLEENTRIES
         v_freq_1_width_1 v_freq_1_width_2 ...
         v_freq_2_width_1 v_freq_2_width_2 ...
         ...
   } ;]
[DCCURRENTDENSITY AVERAGE
   { value
   | WIDTH width_1 width_2 ... ;
       TABLEENTRIES value_1 value_2 ...
   } ;]
[PROPERTY LEF58_SPANLENGTHTABLE
  "SPANLENGTHTABLE {spanLength}... [WRONGDIRECTION]
     [ORTHOGONAL length] [EXCEPTOTHERSPAN otherSpanlength]
  ; " ;]
[PROPERTY LEF58_TYPE
  "TYPE {POLYROUTING}] ;" ;
[PROPERTY LEF58_WIDTHTABLE
  "WIDTHTABLE {width}...[WRONGDIRECTION] [ORTHOGONAL]
     ];" ;]
[PROPERTY LEF58_WIDTH
  "WIDTH minWidth [WRONGDIRECTION]
     ;" ;]
+
+
+ END layerName +
+

Defines routing layers in the design. Each layer is defined by assigning it a name and design rules. You must define routing layers separately, with their own layer statements.

+

You must define layers in process order from bottom to top. For example:

+
+ + poly masterslice +
+
+ + cut01 cut +
+
+ + metal1 routing +
+
+ + cut12 cut +
+
+ + metal2 routing +
+
+ + cut23 cut +
+
+ + metal3 routing +
+

+ + ACCURRENTDENSITY +

+
Specifies how much AC current a wire on this layer of a certain width can handle at a certain frequency in units of milliamps per micron (mA/μm).
+
Note: The true meaning of current density would have units of milliamps per square micron (mA/μm2); however, the thickness of the metal layer is implicitly included, so the units in this table are milliamps per micron, where only the wire width varies.
+
The ACCURRENTDENSITY syntax is defined as follows:
+
{PEAK | AVERAGE | RMS}
{ value
| FREQUENCY freq_1 freq_2 ... ;
    [WIDTH width_1 width_2 ... ; ]
    TABLEENTRIES 
     v_freq_1_width_1 v_freq_1_width_2 ...
    
 v_freq_2_width_1 v_freq_2_width_2 ...
     ...

} ;
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

PEAK

+
+

Specifies the peak current limit of the layer.

+
+

     

+
+

AVERAGE

+
+

Specifies the average current limit of the layer.

+
+

    

+
+

RMS

+
+

Specifies the root mean square current limit of the layer.

+
+

     

+
+

value

+
+

Specifies a maximum current for the layer in mA/μm.
Type: Float

+
+

     

+
+

FREQUENCY

+
+

Specifies frequency values, in megahertz. You can specify more than one frequency. If you specify multiple frequency values, the values must be specified in ascending order.

+

If you specify only one frequency value, there is no frequency dependency, and the table entries are assumed to apply to all frequencies.
Type: Float

+
+

    

+
+

WIDTH

+
+

Specifies wire width values, in microns. You can specify more than one wire width. If you specify multiple width values, the values must be specified in ascending order.

+

If you specify only one width value, there is no width dependency, and the table entries are assumed to apply to all widths.
Type: Float

+
+

    

+
+

TABLEENTRIES

+
+

Defines the maximum current for each of the frequency and width pairs specified in the FREQUENCY and WIDTH statements, in mA/μm.

+

The pairings define each width for the first frequency in the FREQUENCY statement, then the widths for the second frequency, and so on.

+

The final value for a given wire width and frequency is computed from a linear interpolation of the table values. the widths are not adjusted for any process shrinkage, so the should be correct for the "drawn width".
Type: Float

+
+

+ Example 1-9  + AC Current Density Statements +

+

Most LEF files do not include PEAK or AVERAGE limits. The PEAK limits are not a practical problem for digital signal routing. The AVERAGE limits are only needed for DC limits and not AC currents.

+

Most technologies do not have frequency dependency for RMS limits, but the LEF syntax requires a frequency value, so in practice the frequency value is a single value of 1, as shown in the example below. In this case the RMS limit does not vary with the frequency.

+

The following examples define AC current density tables:

+

The RMS current density at 0.7 μm is 9.0 + (7.5 - 9.0) x (0.8 - 0.7) / (0.8 - 0.4) = 8.625 mA/μm at frequency 300Mhz. Therefore, a 0.7 μm wide wire can carry 8.625 x 0.7 = 6.035 mA of RMS current.

+

The RMS current density at 0.7 μm is 7.5 + (6.8 - 7.5) x (0.8 - 0.7) / (0.8 - 0.4) = 7.325 mA/μm at frequency 600Mhz. Therefore, a 0.7 μm wide wire can carry 7.325 x 0.7 = 5.1275 mA of RMS current.

+

+ LAYER met1 +

+
+ + ... +
+
+ + ACCURRENTDENSITY PEAK       #peak AC current limit for met1 +
+
+ + FREQUENCY 100 400 ;         #2 freq values in MHz +
+
+ + WIDTH +
+
+ + 0.4 0.8 1.6 5.0 10.0 ;      #5 width values in microns +
+
+ + TABLEENTRIES +
+
+ + 9.0 7.5 6.5 5.4 4.7          #mA/um for 5 widths and freq_1 (when the frequency                             #is 100 Mhz) +
+
+ + 7.5 6.8 6.0 4.8 4.0 ;         #mA/um for 5 widths and freq_2 (when the frequency                             #is 400 Mhz) +
+

+ END met1 ; +

+

The PEAK current density at 0.7 μm for 100 Mhz is 9.0 + (7.5 - 9.0) x (0.8 - 0.7) / (0.8 - 0.4) = 8.625 mA/μm, and at 0.7 μm for 400 Mhax is 7.5 + (6.8 - 7.5) x (0.8 - 0.7) / (0.8 - 0.4) = 7.325 mA/mm. Then interpolating between the frequencies at 300Mhz gives 8.625 + (7.325 - 8.625) x (400 - 300) / (400 - 100) = 8.192 mA/μm.

+

The RMS current density at 0.4 μm is 7.5 mA/μm. Therefore, a 0.4 μm wide wire can carry 7.5 x .4 = 3.0 μm of RMS current.

+

+ LAYER cut12 +

+
+ + ... +
+
+ + ACCURRENTDENSITY PEAK #peak AC current limit for one cut +
+
+ + FREQUENCY 10 200 ; #2 freq values in MHz +
+
+ + CUTAREA 0.16 0.32 ; #2 cut areas in um squared +
+
+ + TABLEENTRIES +
+
+ + 0.5 0.4   #mA/um squared for 2 cut areas at freq_1 (10 Mhz) +
+
+ + 0.4 0.35 ; #mA/um squared for 2 cut areas at freq_2 (200 Mhz) +
+
+ + ACCURRENTDENSITY AVERAGE #average AC current limit for via cut12 +
+
+ + 10.0 ; #mA/um squared for any cut area at any frequency +
+
+ + ACCURRENTDENSITY RMS #RMS AC current limit for via cut12 +
+
+ + FREQUENCY 1 ; #1 freq (required by syntax; not really used) +
+
+ + CUTAREA 0.16 1.6 ; #2 cut areas in um squared +
+
+ + TABLEENTRIES +
+
+ + 10.0 9.0 ; #mA/um squared for 2 cut areas at any frequency +
+
+ + .... +
+

+ END cut12 ; +

+

+ + ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffMetalFactor1 )
(
diffArea2 diffMetalFactor2 ) ...)
+

+
Indicates that the metal area is multiplied by a diffMetalReduceFactor that is computed from a piece-wise linear interpolation based on the diff_area attached to the metal. (See Example 4 in Appendix C, "Calculating and Fixing Process Antenna Violations.") This means that the ratio is calculated as:
+
ratio = (metalFactor x metal_area x diffMetalReduceFactor) / gate_area
+
The diffArea values are floats, specified in microns squared. The diffArea values should start with 0 and monotonically increase in value to the maximum size diffArea allowed. The diffMetalFactor values are floats with no units. The diffMetalFactor values are normally between 0.0 and 1.0. If no rule is defined, the diffMetalReduceFactor value in the PAR(mi) equation defaults to 1.0.
+
For more information on the PAR(mi) equation and process antenna models, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAAREAFACTOR value [DIFFUSEONLY] +

+
Specifies the multiply factor for the antenna metal area calculation. DIFFUSEONLY specifies that the current antenna factor should only be used when the corresponding layer is connected to the diffusion.
Default: 1.0
Type: Float
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+
Note: If you specify a value that is greater than 1.0, the computed areas will be larger, and violations will occur more frequently.
+

+ + ANTENNAAREAMINUSDIFF minusDiffFactor +

+
Indicates that the antenna ratio metal area should subtract the diffusion area connected to it. This means that the ratio is calculated as:
+
ratio = (metalFactor x metal_area - minusDiffFactor x diff_area) /gate_area
+
If the resulting value is less than 0, it should be truncated to 0. For example, if a metal2 shape has a final ratio that is less than 0 because it connects to a diffusion shape, then the cumulative check for metal3 (or via2) connected to the metal2 shape adds in a cumulative value of 0 from the metal2 layer. (See Example 1 in Appendix C, "Calculating and Fixing Process Antenna Violations.")
Type: Float
Default: 0.0
+
For more information on process antenna models, see Calculating a PAR, in Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAAREARATIO value +

+
Specifies the maximum legal antenna ratio, using the area of the metal wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
Type: Integer
+

+ + ANTENNACUMAREARATIO value +

+
Specifies the cumulative antenna ratio, using the area of the wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
Type: Integer
+

+ + ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)} +

+
Specifies the cumulative antenna ratio, using the area of the metal wire that is connected to the diffusion diode. You can supply and explicit ratio value or specify piece-wise linear format (PWL), in which case the cumulative ratio value is calculated using linear interpolation of the diffusion area and ratio input values. The diffusion input values must be specified in ascending order.
Type: Integer
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNACUMDIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)} +

+
Specifies the cumulative antenna ratio, using the side wall area of the metal wire that is connected to the diffusion diode. You can supply and explicit ratio value or specify piece-wise linear format (PWL), in which case the cumulative ratio value is calculated using linear interpolation of the diffusion area and ratio input values. The diffusion input values must be specified in ascending order.
Type: Integer
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNACUMROUTINGPLUSCUT +

+
Indicates that the cumulative ratio rules (ANTENNACUMAREARATIO and ANTENNACUMDIFFAREARATIO) accumulate with the previous cut layer instead of the previous metal layer. Use this to combine metal and cut area ratios into one cumulative ratio rule.
+
Note: This rule does not affect ANTENNACUMSIDEAREARATIO and ANTENNACUMDIFFSIDEAREA models.
+
For more information on process antenna models, see Calculating a CAR, in Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNACUMSIDEAREARATIO value +

+
Specifies the cumulative antenna ratio, using the side wall area of the metal wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)} +

+
Specifies the antenna ratio, using the area of the metal wire that is connected to the diffusion diode. You can supply and explicit ratio value or specify piece-wise linear format (PWL), in which case the ratio value is calculated using linear interpolation of the diffusion area and ratio input values. The diffusion input values must be specified in ascending order.
Type: Integer
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNADIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)} +

+
Specifies the antenna ratio, using the side wall area of the metal wire that is connected to the diffusion diode. You can supply and explicit ratio value or specify piece-wise linear format (PWL), in which case the ratio value is calculated using linear interpolation of the diffusion area and ratio input values. The diffusion input values must be specified in ascending order.
Type: Integer
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAGATEPLUSDIFF plusDiffFactor +

+
Indicates that the antenna ratio gate area includes the diffusion area multiplied by plusDiffFactor. This means that the ratio is calculated as:
+
ratio = (metalFactor x metal_area) / (gate_area + plusDiffFactor x diff_area)
+
The ratio rules without "DIFF" (the ANTENNAAREARATIO, ANTENNACUMAREARATIO, ANTENNASIDEAREARATIO, and ANTENNACUMSIDEAREARATIO statements), are unnecessary for this layer if the ANTENNAGATEPLUSDIFF rule is specified because a zero diffusion area already is accounted for by the ANTENNADIFF*RATIO statements. (See Example 3 in Routing Layer Process Antenna Model Examples in Appendix C, "Calculating and Fixing Process Antenna Violations.")
Type: Float
Default: 0.0
+
For more information on process antenna models, see Calculating a PAR, in Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} +

+
Specifies the oxide model for the layer. If you specify an ANTENNAMODEL statement, that value affects all ANTENNA* statements for the layer that follow it until you specify another ANTENNAMODEL statement.
Default: OXIDE1, for a new LAYER statement
+
Because LEF is sometimes used incrementally, if an ANTENNA statement occurs twice for the same oxide model, the last value specified is used. For any given ANTENNA keyword, only one value or PWL table is stored for each oxide metal on a given layer.
+

+ Example 1-10  + Antenna Model Statement +

+

The following example defines antenna information for oxide models on layer metal1.

+

+ LAYER metal1 +

+
+ + ANTENNAMODEL OXIDE1 ;         #OXIDE1 not required, but good practice +
+
+ + ANTENNACUMAREARATIO 5000 ;     #OXIDE1 values +
+
+ + ANTENNACUMDIFFAREARATIO 8000 ; +
+
+ + ANTENNAMODEL OXIDE2 ;          #OXIDE2 model starts here +
+
+ + ANTENNACUMAREARATIO 500 ;      #OXIDE2 values +
+
+ + ANTENNACUMDIFFAREARATIO 800 ; +
+
+ + ANTENNAMODEL OXIDE3 ;           +
+
+ + ANTENNACUMAREARATIO 300 ; +
+
+ + ANTENNACUMDIFFAREARATIO 600 ; +
+
+ + ... +
+

+ END metal1 +

+

+ + ANTENNASIDEAREAFACTOR value [DIFFUSEONLY] +

+
Specifies the multiply factor for the antenna metal side wall area calculation. DIFFUSEONLY specifies that the current antenna factor should only be used when the corresponding layer is connected to the diffusion.
Default: 1.0
Type: Float
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNASIDEAREARATIO value +

+
Specifies the antenna ratio, using the side wall area of the metal wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
Type: Integer
+

+ + AREA minArea +

+
Specifies the minimum metal area required for polygons on the layer. All polygons must have an area that is greater than or equal to minArea, if no MINSIZE rule exists. If a MINSIZE rule exists, all polygons must meet either the MINSIZE or the AREA rule. For an example using these rules, see Example 1-15.
Type: Float, specified in microns squared
+

+ + CAPACITANCE CPERSQDIST value  +

+
Specifies the capacitance for each square unit, in picofarads per square micron. This is used to model wire-to-ground capacitance.
+

+ + CAPMULTIPLIER value +

+
Specifies the multiplier for interconnect capacitance to account for increases in capacitance caused by nearby wires.
Default: 1
Type: Integer
+

+ + DCCURRENTDENSITY +

+
Specifies how much DC current a wire on this layer of a given width can handle in units of milliamps per micron (mA/μm).
+
The true meaning of current density would have units of milliamps per square micron (mA/μm2); however, the thickness of the metal layer is implicitly included, so the units in this table are milliamps per micron, where only the wire width varies.
+
The DCCURRENTDENSITY syntax is defined as follows:
+
AVERAGE
value
| WIDTH width_1 width_2 ... ;
    TABLEENTRIES value_1 value_2 ...
} ;
+ + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

AVERAGE

+
+

Specifies the average current limit of the layer.

+
+

   

+
+

value

+
+

Specifies the current limit for the layer, in mA/μm.

+
+

     

+
+

WIDTH

+
+

Specifies wire width values, in microns. You can specify more than one wire width. If you specify multiple width values, the values must be specified in ascending order.
Type: Float

+
+

    

+
+

TABLEENTRIES

+
+

Specifies the value of current density for each specified width, in mA/μm.

+

The final value for a given wire width is computed from a linear interpolation of the table values. The widths are not adjusted for any process shrinkage, so they should be correct for the "drawn width".
Type: Float

+
+

+ Example 1-11  + DC Current Density Statements +

+

The following examples define DC current density tables:

+

+ LAYER met1 +

+
+ + ... +
+
+ + DCCURRENTDENSITY AVERAGE #avg. DC current limit for met1 +
+
+ + 50.0 ; #mA/um for any width +
+

(or)

+
+ + DCCURRENTDENSITY AVERAGE #avg. DC current limit for met1 +
+
+ + WIDTH +
+
+ +   0.4 0.8 1.6 5.0 20.0 ; #5 width values in microns +
+
+ + TABLEENTRIES +
+
+ + 7.5 6.8 6.0 4.8 4.0 ; #mA/um for 5 widths +
+
+ + ... +
+

+ END met1 ; +

+

The AVERAGE current density at 0.4 μm is 7.5 mA/μm. Therefore, a 0.4 μm wide wire can carry 7.5 x .4 = 3.0 mA of AVERAGE DC current.

+

+ LAYER cut12 +

+
+ + ... +
+
+ + DCCURRENTDENSITY AVERAGE #avg. DC current limit for via cut12 +
+
+ + 10.0 ; #mA/um squared for any cut area +
+

(or)

+
+ + DCCURRENTDENSITY AVERAGE #avg. DC current limit for via cut12 +
+
+ +  CUTAREA 0.16 0.32 ; #2 cut areas in μm2 +
+
+ + TABLEENTRIES +
+
+ + 10.0 9.0 ; #mA/um squared for 2 cut areas +
+
+ + ... +
+

+ END cut12 ; +

+

+ + DENSITYCHECKSTEP stepValue +

+
Specifies the stepping distance for metal density checks, in distance units.
Type: Float
+

+ + DENSITYCHECKWINDOW windowLength windowWidth +

+
Specifies the dimensions of the check window, in distance units.
Type: Float
+

+ + DIAGMINEDGELENGTH diagLength +

+
Specifies the minimum length for a diagonal edge. Any 45-degree diagonal edge must have a length that is greater than or equal to diagLength.
Type: Float, specified in microns
+

+ + DIAGPITCH {distance | diag45Distance diag135Distance} +

+
Specifies the 45-degree routing pitch for the layer. Pitch is used by the router to get the best routing density.
Default: None
Type: Float, specified in microns
+ + + + + + + + + + + + + + + +
+
+

   

+
+

distance

+
+

Specifies one pitch value that is used for both the 45-degree angle and 135-degree angle directions.

+
+

    

+
+

diag45Distance diag135Distance

+
+

    

+
+

  

+
+

Specifies the 45-degree angle pitch (the center-to-center space between 45-degree angle routes) and the 135-degree angle pitch.

+
+

+ + DIAGSPACING diagSpacing +

+
Specifies the minimum spacing allowed for a 45-degree angle shape.
Default: None
Type: Float, specified in microns
+

+ + DIAGWIDTH diagWidth +

+
Specifies the minimum width allowed for a 45-degree angle shape.
Default: None
Type: Float, specified in microns
+

+ + DIRECTION {HORIZONTAL | VERTICAL | DIAG45 | DIAG135} +

+
Specifies the preferred routing direction. Automatic routing tools attempt to route in the preferred direction on a layer. A typical case is to route horizontally on layers metal1 and metal3, and vertically on layer metal2.
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

HORIZONTAL

+
+

Routing parallel to the x axis is preferred.

+
+

    

+
+

VERTICAL

+
+

Routing parallel to the y axis is preferred.

+
+

    

+
+

DIAG45

+
+

Routing along a 45-degree angle is preferred.

+
+

    

+
+

DIAG135

+
+

Routing along a 135-degree angle is preferred.

+
+

 

+
+

Note: Angles are measured counterclockwise from the positive x axis.

+
+

+ + EDGECAPACITANCE value +

+
Specifies a floating-point value of peripheral capacitance, in picofarads per micron. The place-and-route tool uses this value in two situations:
+ + + + + +
+
+

    

+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Estimating capacitance before routing
+
+ +
+
For the second calculation, the tool uses value only if you set layer thickness, or layer height, to 0. In this situation, the peripheral capacitance is used in the following formula:
+ + + + + +
+
+

     

+
+

segment capacitance = (layer capacitance per square x segment width x segment length) + (peripheral capacitance x 2 (segment width + segment length))

+
+

+ + FILLACTIVESPACING spacing +

+
Specifies the spacing between metal fills and active geometries.
Type: Float
+

+ + HEIGHT distance +

+
Specifies the distance from the top of the ground plane to the bottom of the interconnect.
Type: Float
+

+ + LAYER layerName +

+
Specifies the name for the layer. This name is used in later references to the layer.
+

+ + MASK maskNum +

+
Specifies how many masks for double- or triple-patterning will be used for this layer. The maskNum variable must be an integer greater than or equal to 2. Most applications only support values of 2 or 3.
+

+ + MAXIMUMDENSITY maxDensity +

+
Specifies the maximum metal density allowed for the layer, as a percentage. The minDensity and maxDensity values represent the metal density range within which all areas of the design must fall. The metal density must be greater than or equal to minDensity and less than or equal to maxDensity.
Type: Float
Value: Between 0.0 and 100.0
+

+ Example 1-12  + Minimum and Maximum Density +

+

The following example specifies a metal density range in which the minimum metal density must be greater than or equal to 20 percent and the maximum metal density must be less than or equal to 70 percent.

+

+ MINIMUMDENSITY 20.0 ; +

+

+ MAXIMUMDENSITY 70.0 ; +

+

+ + MAXWIDTH width +

+
Specifies the maximum wire width, in microns, allowed on the layer. Maximum wire width is defined as the smaller value of the width and height of the maximum enclosed rectangle. For example, MAXWIDTH 10.0 specifies that the width of every wire on the layer must be less than or equal to 10.0 μm.
Type: Float
+

+ + MINENCLOSEDAREA area [WIDTH width] +

+
Specifies the minimum area size limit for an empty area that is enclosed by metal (that is, a donut hole formed by the metal).
+ + + + + + + + + + + +
+
+

   

+
+

area

+
+

Specifies the minimum area size of the hole, in microns squared.
Type: Float

+
+

   

+
+

width

+
+

Applies the minimum area size limit only when a hole is created from a wire that has a width that is greater than width, in microns. If any of the wires that surround the donut hole are larger than this value, the rule applies.
Type: Float

+
+

+ Example 1-13  + Min Enclosed Area Statement +

+

The following MINENCLOSEDAREA example specifies that a hole area must be greater than or equal to 0.40 μm2.

+

+ LAYER m1 +

+
+ + ... +
+
+ + MINENCLOSEDAREA 0.40 ; +
+

The following MINENCLOSEDAREA example specifies that a hole area must be greater than or equal to 0.30 μm2. However, if any of the wires enclosing the hole have a width that is greater than 0.15 μm, then the hole area must be greater than or equal to 0.40 μm2. If any of the wires enclosing the hole are larger than 0.50 μm, then the hole area must be greater than or equal to 0.80 μm2.

+

+ LAYER m1 +

+
+ + ... +
+
+ + MINENCLOSEDAREA 0.30 ; +
+
+ + MINENCLOSEDAREA 0.40 WIDTH 0.15 ; +
+
+ + MINENCLOSEDAREA 0.80 WIDTH 0.50 ; +
+

+ + MINIMUMCUT +

+
Specifies the number of cuts a via must have when it is on a wide wire or pin whose width is greater than width. The MINIMUMCUT rule applies to all vias touching this particular metal layer. You can specify more than one MINIMUMCUT rule per layer. (See Example 1-14.)
+
The MINIMUMCUT syntax is defined as follows:
+
[MINIMUMCUT numCuts WIDTH width
    [WITHIN cutDistance]
  [FROMABOVE | FROMBELOW]
  [LENGTH length WITHIN distance]
;] ...
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

numCuts

+
+

Specifies the number of cuts a via must have when it is on a wire or pin whose width is greater than width.
Type: Integer

+
+

   

+
+

WIDTH width

+
+

Specifies the width of the wire or pin, in microns.
Type: Float

+
+

 

+
+

WITHIN cutDistance

+
+

 

+
+

 

+
+

Indicates that numCuts via cuts must be less than cutDistance from each other in order to be counted together to meet the minimum cut rule. (See Figure 1-12.)

+
+

     

+
+

FROMABOVE | FROMBELOW

+
+

   

+
+

    

+
+

Indicates whether the rule applies only to connections from above this layer or from below.
Default: The rule applies to connections from above and below.

+
+

    

+
+

LENGTH length WITHIN distance

+
+

    

+
+

   

+
+

Indicates that the rule applies for thin wires directly connected to wide wires, if the wide wire has a width that is greater than width and a length that is greater than length, and the vias on the thin wire are less than distance from the wide wire. (See Figure 1-11 ). The length value must be greater than or equal to the width value.

+

If LENGTH and WITHIN are present, this rule only checks the thin wire connected to a wide wire, and does not check the wide wire itself. A separate MINIMUMCUT x WIDTH y ; statement without LENGTH and WITHIN is required for any wide wire minimum cut rule.
Type: Float, specified in microns

+
+

+ Example 1-14  + Minimum Cut Rules +

+

The following MINIMUMCUT definitions show different ways to specify a MINIMUMCUT rule.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Minimum Cut Rule Example 1
+
+
The following syntax specifies that two via cuts are required for metal4 wires that are greater than 0.5 μm when connecting from metal3 or metal5.
+
+ + LAYER metal4 +
+
+
MINIMUMCUT 2 WIDTH 0.5 ;
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Minimum Cut Rule Example 2
+
+
The following syntax specifies that four via cuts are required for metal4 wires that are greater than 0.7 μm, when connecting from metal3.
+
+ + LAYER metal4 +
+
+
MINIMUMCUT 4 WIDTH 0.7 FROMBELOW ;
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Minimum Cut Rule Example 3
+
+
The following syntax specifies that four via cuts are required for metal4 wires that are greater than 1.0 μm, when connecting from metal5.
+
+ + LAYER metal4 +
+
+
MINIMUMCUT 4 WIDTH 1.0 FROMABOVE ;
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Minimum Cut Rule Example 4
+
+
The following syntax specifies that two via cuts are required for metal4 wires that are greater than 1.1 μm wide and greater than 20.0 μm long, and the via cut is less than 5.0 μm from the wide wire. Figure 1-11 illustrates this example.
+
+ + LAYER metal4 +
+
+
MINIMUMCUT 2 WIDTH 1.1 LENGTH 20.0 WITHIN 5.0 ;
+
+

+ Figure 1-11  + Minimum Cut Rule +

+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
Minimum Cut Rule Example 5
+
+
The following syntax specifies that two via cuts are required for metal4 wires that are greater than 1.0 μm wide. The via cuts must be less than 0.3 μm from each other in order to meet the minimum cut rule. Figure 1-12 illustrates this example.
+
+ + MINIMUMCUT 2 WIDTH 1.0 WITHIN 0.3 ; +
+

+ Figure 1-12  + Minimum Cut Within Rule +

+


+

+ + MINIMUMDENSITY minDensity +

+
Specifies the minimum metal density allowed for the layer, as a percentage. The minDensity and maxDensity values represent the metal density range within which all areas of the design must fall. The metal density must be greater than or equal to minDensity and less than or equal to maxDensity. For an example of this statement, see Example 1-12.
Type: Float
Value: Between 0.0 and 100.0
+

+ + MINSIZE minWidth minLength [minWidth2 minLength2] +

+
Specifies the minimum width and length of a rectangle that must be able to fit somewhere within each polygon on this layer (see Figure 1-13 ). All polygons must meet this MINSIZE rule, if no AREA rule is specified. If an AREA rule is specified, all polygons must meet either the MINSIZE or the AREA rule.
+
You can specify multiple rectangles by specifying a list of minWidth2 and minLength2 values. If more than one rectangle is specified, the MINSIZE rule is satisfied if any of the rectangles can fit within the polygon.
Type: Float, specified in microns, for all values
+

+ Example 1-15  + Minimum Size and Area Rules +

+

Assume the following minimum size and area rules:

+

+ LAYER metal1 +

+
+ + TYPE ROUTING ; +
+
+ + AREA 0.07 ;           #0.20 um x 0.35 um = 0.07 um^2 +
+
+ + MINSIZE 0.14 0.30 ;   #0.14 um x 0.30 um = 0.042 um^2 +
+
+ + .... +
+

Figure 1-13 illustrates how these rules behave when one or both of the rules are present in the LAYER statement:

+

+ Figure 1-13  + Minimum Size and Area Rules +

+


+

The following statement defines a MINSIZE rule that specifies that every polygon must have a minimum area of 0.07 μm2, or that a rectangle of 0.14 x 0.30 μm must be able to fit within the polygon, or that a rectangle of 0.16 x 0.26 μm must be able to fit within the polygon:

+

+ LAYER metal1 +

+
+ + TYPE ROUTING ; +
+
+ + AREA 0.07 ;                     #0.20 x 0.35 um = 0.07 um^2 +
+
+ + MINSIZE 0.14 0.30 0.16 0.26 ;  #0.14 x 0.30 um = 0.042 um^2
                                #0.16 x 0.26 um = 0.0416 um^2
+
+
+ + ... +
+

+ END metal1 +

+

+ + MINSTEP +

+
Specifies the minimum step size, or shortest edge length, for a shape. The MINSTEP rule ensures that Optical Pattern Correction (OPC) can be performed during mask creation for the shape.
+
Note: A single layer should only have one type of MINSTEP rule. It should include either INSIDECORNER, OUTSIDECORNER, or STEP statements (with an optional LENGTHSUM value), or one LENGTHSUM statement, or one MAXEDGES statement.
+
For an illustration of the MINSTEP rules, see Figure 1-14. For an example, see Example 1-16.
+
The syntax for MINSTEP is as follows:
+
[MINSTEP minStepLength
  [ [INSIDECORNER | OUTSIDECORNER | STEP]
       [LENGTHSUM maxLength]
  | [MAXEDGES maxEdges] ;]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

minStepLength

+
+

Specifies the minimum step size, or shortest edge length, for a shape. The edge of a shape must be greater than or equal to this value, or a violation occurs.
Type: Float, specified in microns

+
+

    

+
+

INSIDECORNER

+
+

Indicates that a violation occurs if two or more consecutive edges of an inside corner are less than minStepLength.

+

If LENGTHSUM is also defined, a violation only occurs if the total length of all consecutive edges (that are less than minStepLength) is greater than maxLength.

+

Shape b in Figure 1-14 shows an inside corner. It is considered an inside corner because the two edges >= minStepLength (shown with thick lines) that abut the consecutive short edges < minStepLength (shown with dashed lines) form an inside corner (or concave shape).
Default: OUTSIDECORNER

+
+

    

+
+

OUTSIDECORNER

+
+

Indicates that a violation occurs if two or more consecutive edges of an outside corner are less than minStepLength.

+

If LENGTHSUM is also defined, a violation only occurs if the total length of all consecutive edges (that are less than minStepLength) is greater than maxLength.

+

Shape a in Figure 1-14 shows an outside corner. It is considered an outside corner because the two edges >= minStepLength (shown with thick lines) that abut the consecutive short edges < minStepLength (shown with dashed lines) form an outside corner (or convex shape).

+

Note: This is the default rule, if INSIDECORNER, OUTSIDECORNER, or STEP is not specified.

+
+

    

+
+

STEP

+
+

Indicates that a violation occurs if one or more consecutive edges of a step are less than minStepLength.

+

If LENGTHSUM is also defined, a violation only occurs if the total length of all consecutive edges (that are less than minStepLength) is greater than maxLength.

+

Shape f in Figure 1-14 shows a step. It is considered a step because the two edges >= minStepLength (shown with thick lines) that abut the consecutive short edges < minStepLength (shown with dashed lines) form a step instead of a corner.
Default: OUTSIDECORNER

+
+

   

+
+

LENGTHSUM maxLength

+
+

   

+
+

 

+
+

Specifies the maximum total length of consecutive short edges (edges that are less than minStepLength) that OPC can correct without causing new DRC violations.

+

If the total length of the edges is greater than maxLength, a violation occurs. No violation occurs if the total length is less than or equal to maxLength.

+
+

   

+
+

MAXEDGES maxEdges

+
+

   

+
+

    

+
+

Specifies that up to maxEdges consecutive edges that are less than minStepLength in length are allowed, but more than maxEdges in a row is a violation. Typically, most tools only allow a maxEdges value of 0, 1, or 2. A maxEdges value of 0 means that no edge can be less than minStepLength.
Type: Integer

+

Note: The maxEdges value of 1 will check the cases covered by OUTSIDECORNER and INSIDECORNER. However, there is no relationship between MAXEDGES and STEP.

+
+

+ Example 1-16  + Minimum Step Rules +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following table shows the results of the specified MINSTEP rules using the shapes in Figure 1-14. For these rules, assume minStepLength equals 0.05 μm, and that each dashed edge is 0.04 μm in length.
+
+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ MINSTEP Rule +

+
+

+ Result +

+
+

+ MINSTEP 0.05 ; +

+
+

OUTSIDECORNER is the default behavior. Therefore, shapes a and d are violations because their consecutive edges are less than 0.05 μm. Shapes b, c, e, and f are not outside corner checks.

+
+

+ MINSTEP 0.04 ; +

+
+

OUTSIDECORNER is the default behavior. Therefore, shapes a and d are checked and are legal because their consecutive edges are greater than or equal to 0.04 μm.

+
+

+ MINSTEP 0.05 LENGTHSUM 0.08 ; +

+
+

Shape a is legal because its consecutive edges are less than 0.05 μm, and the total length of the edges is less than or equal to 0.08 μm. Shape d is a violation because even though its consecutive edges are less than 0.05 μm, the total length of the edges is greater than 0.08 μm.

+
+

+ MINSTEP 0.05 LENGTHSUM 0.16 ; +

+
+

Shapes a and d are legal because the total length of their consecutive edges is less than or equal to 0.16 μm.

+
+

+ MINSTEP 0.05 INSIDECORNER ; +

+
+

Shapes b and e are violations because their consecutive edges are less than 0.05 μm. Shapes a, c, d, and f are not inside corner checks.

+
+

+ MINSTEP 0.05 INSIDECORNER +

+

+   LENGTHSUM 0.15 ; +

+
+

Shape b is legal because its consecutive edges are less than 0.05 μm, and the total length of the edges is less than or equal to 0.15 μm. Shape e is a violation because even though its consecutive edges are less than 0.05 μm, the total length of the edges is greater than 0.15 μm.

+
+

+ MINSTEP 0.05 STEP ; +

+
+

Shapes c and f are violations because their consecutive edges are less than 0.05 μm. Shapes a, b, d, and e are not step checks.

+
+

+ MINSTEP 0.05 STEP LENGTHSUM 0.08 ; +

+
+

Shape c is legal because its consecutive edges are less than 0.05 μm, and the total length of the edges is less than or equal to 0.08 μm. Shape f is a violation because even though its consecutive edges are less than 0.05 μm, the total length of the edges is greater than 0.08 μm.

+
+

+ MINSTEP 0.04 STEP ; +

+
+

Shapes c and f are legal because their consecutive edges are greater than or equal to 0.04 μm.

+
+

+ Figure 1-14  +   +

+


+
+ + + + + +
+
+ + ParagraphBullet + +
+
Figure 1-15 shows the results of the following MINSTEP MAXEDGES rule:
+
+
+ + MINSTEP 1.0 MAXEDGES 2 ; +
+

+ Figure 1-15  +
+

+

+ + MINWIDTH width +

+
Specifies the minimum legal object width on the routing layer. For example, MINWIDTH 0.15 specifies that the width of every object must be greater than or equal to 0.15 μm. This value is used for verification purposes, and does not affect the routing width. The WIDTH statement defines the default routing width on the layer.
Default: The value of the WIDTH statement
Type: Float, specified in microns
+

+ + OFFSET {distance | xDistance yDistance} +

+
Specifies the offset for the routing grid from the design origin for the layer. This value is used to align routing tracks with standard cell boundaries, which helps routers get good on-grid access to the cell pin shapes. For best routing results, most standard cells have a 1/2 pitch offset between the MACRO SIZE boundary and the center of cell pins that should be aligned with the routing grid. Normally, it is best to not set the OFFSET value, so the software can analyze the library to determine the best offset values to use, but in some cases it is necessary to force a specific offset.
+
Generally, it is best for all of the horizontal layers to have the same offset and all of the vertical layers to have the same offset, so that routing grids on different layers align with each other. Higher layers can have a larger pitch, but for best results, they should still align with a lower layer routing grid every few tracks to make stacked-vias more efficient.
+
Default: The software is allowed to determine its own offset values for preferred and non-preferred routing tracks.
Type: Float, specified in microns
+ + + + + + + + + + + + + + + +
+
+

   

+
+

distance

+
+

Specifies the offset value that is used for the preferred direction routing tracks.

+
+

    

+
+

xDistance yDistance

+
+

    

+
+

  

+
+

Specifies the x offset for vertical routing tracks, and the y offset for horizontal routing tracks.

+
+

+ + PITCH {distance | xDistance yDistance} +

+
Specifies the required routing pitch for the layer. Pitch is used to generate the routing grid (the DEF TRACKS). For more information, see "Routing Pitch".
Type: Float, specified in microns
+ + + + + + + + + + + + + + + +
+
+

   

+
+

distance

+
+

Specifies one pitch value that is used for both the x and y pitch.

+
+

    

+
+

xDistance yDistance

+
+

    

+
+

  

+
+

Specifies the x pitch (the space between each vertical routing track), and the y pitch (the space between each horizontal routing track).

+
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a layer property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

+ + PROTRUSIONWIDTH width1 LENGTH length WIDTH width2 +

+
Specifies that the width of a protrusion must be greater than or equal to width1 if it is shorter than length, and it connects to a wire that has a width greater than or equal to width2 (see Figure 1-16 ). Length is determined by the shortest possible path among all of the protrusion wires with width smaller width1, and is measured by the shortest outside edges of the wires.
Type: Float, specified in microns
+

+ Example 1-17  + Protrusion +

+

The following example specifies that a protrusion must have a width that is greater than or equal to 0.28 μm, if the length of the protrusion is less than 0.60 μm and the wire it connects to has a width that is greater than or equal to 1.20 μm.

+

+ LAYER m1 +

+
+ + ... +
+
+ + PROTRUSIONWIDTH 0.28 LENGTH 0.60 WIDTH 1.20 ; +
+
+ + ... +
+

+ Figure 1-16  +   +

+


+


+


+

If the given value of LENGTH in PROTRUSIONWIDTH is zero, then the length of the protrusion wire is irrelevant. In this case, the width of the protrusion wire should always be checked independent of the length of the wire. The following example illustrates this rule:

+

+ PROTRUSIONWIDTH 0.05 LENGTH 0 WIDTH 0.11 ; " ; +

+


+

+ + RESISTANCE RPERSQ value +

+
Specifies the resistance for a square of wire, in ohms per square. The resistance of a wire can be defined as
+ + + + + +
+
+

    

+
+

RPERSQU x wire length/wire width

+
+

+ + SHRINKAGE distance +

+
Specifies the value to account for shrinkage of interconnect wiring due to the etching process. Actual wire widths are determined by subtracting this constant value.
Type: Float
+

+ + SPACING +

+
Specifies the spacing rules to use for wiring on the layer. You can specify more than one spacing rule for a layer. See "Using Spacing Rules".
+
The syntax for describing spacing rules is defined as follows:
+
[SPACING minSpacing
  [ RANGE minWidth maxWidth
     [ USELENGTHTHRESHOLD
     | INFLUENCE influenceLength
        [RANGE stubMinWidth stubMaxWidth]
     | RANGE minWidth maxWidth]
  | LENGTHTHRESHOLD maxLength
     [RANGE minWidth maxWidth]
  | ENDOFLINE eolWidth WITHIN eolWithin
     [PARALLELEDGE parSpace WITHIN parWithin
         [TWOEDGES]]
  | SAMENET [PGONLY]
  | NOTCHLENGTH minNotchLength
  | ENDOFNOTCHWIDTH endOfNotchWidth
      NOTCHSPACING minNotchSpacing
        NOTCHLENGTH minNotchLength
  ]
;] ...
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

SPACING minSpacing

+
+

    

+
+

    

+
+

Specifies the default minimum spacing, in microns, allowed between two geometries on different nets.
Type: Float

+
+

 

+
+

RANGE minWidth maxWidth

+
+

 

+
+

 

+
+

Indicates that the minimum spacing rule applies to objects on the layer with widths in the indicated RANGE (that is, widths that are greater than or equal to minWidth and less than or equal to maxWidth). If you do not specify a range, the rule applies to all objects.
Type: Float

+

Note: If you specify multiple RANGE rules, the range values should not overlap.

+
+

    

+
+

USELENGTHTHRESHOLD

+
+

    

+
+

    

+
+

Indicates that the threshold spacing rule should be used if the other object meets the previous LENGTHTHRESHOLD value.

+
+

     

+
+

INFLUENCE influenceLength
   [RANGE stubMinWidth stubMaxWidth]

+
+

   

+
+

   

+
+

Indicates that any length of the stub wire that is less than or equal to influenceLength from the wide wire inherits the wide wire spacing.
Type: Float

+

The influence rule applies to stub wires on the layer with widths in the indicated RANGE (that is, widths that are greater than or equal to stubMinWidth and less than or equal to stubMaxWidth). If you do not specify a range, the rule applies to all stub wires.
Type: Float

+

Note: Specifying the INFLUENCE keyword denotes that the statement only checks the influence rule, and does not check normal spacing. You must also specify a separate SPACING statement for normal spacing checks.

+
+

    

+
+

RANGE minWidth maxWidth

+
+

    

+
+

   

+
+

Specifies an optional second width range. The spacing rule applies if the widths of both objects fall in the ranges defined (each object in a different range). For an object's width to fall in a range, it must be greater than or equal to minWidth and less than or equal to maxWidth.
Type: Float

+

Note: If you specify multiple RANGE rules, the range values should not overlap.

+
+

   

+
+

LENGTHTHRESHOLD maxLength
   [RANGE minWidth maxWidth]

+
+

   

+
+

   

+
+

Specifies the maximum parallel run length or projected length with an adjacent metal object for this spacing value. The minSpacing value should be less than or equal to the "default" minSpacing value when no LENGTHTHRESHOLD is specified for this range of widths. For an example, see "Using Spacing Rules".

+

The threshold spacing rule applies to objects with widths in the indicated RANGE (that is, widths that are greater than or equal to minWidth and less than or equal to maxWidth). If you do not specify a range, the rule applies to all objects.
Type: Float

+

Note: If you specify multiple RANGE rules, the range values should not overlap.

+
+

 

+
+

ENDOFLINE eolWidth WITHIN eolWithin

+
+

 

+
+

 

+
+

Indicates that an edge that is shorter than eolWidth, noted as end-of-line (EOL from now on) edge requires spacing greater than or equal to eolSpace beyond the EOL anywhere within (that is, less than) eolWithin distance (see Figure 1-17 ).

+

Typically, eolSpace is slightly larger than the minimum allowed spacing on the layer. The eolWithin value must be less than the minimum allowed spacing.

+
+

 

+
+

 

+
+

+ Figure 1-17  +   +

+


+
+

 

+
+

PARALLELEDGE parSpace WITHIN parWithin
    [TWOEDGES]

+
+

 

+
+

 

+
+

Indicates the EOL rule applies only if there is a parallel edge that is less than parSpace away, and is also less than parWithin from the EOL and eolWithin beyond the EOL (see Figure 1-18 ).

+
+

 

+
+

 

+
+

+ Figure 1-18  +   +

+


+
+

 

+
+

+
+

If TWOEDGES is specified, the EOL rule applies only if there are two parallel edges that meet the PARALLELEDGE parSpace, eolWithin, and parWithin parameters (see Figure 1-19 ).

+
+

 

+
+

 

+
+

+ Figure 1-19  +   +

+


+
+

   

+
+

SAMENET [PGONLY]

+
+

   

+
+

   

+
+

Indicates that the minSpacing value only applies to same-net metal. If PGONLY also is specified, the minSpacing value only applies to same-net metal that is a power or ground net.

+

This rule typically is used when a technology has wider spacing for wider width wires; however, it still allows minimum spacing for same-net wires, even if they are wide. (See Example 1-19.)

+
+

 

+
+

NOTCHLENGTH minNotchLength

+
+

 

+
+

 

+
+

Indicates that any notch with a notch length less than minNotchLength must have notch spacing greater than or equal to minSpacing. (See illustration a in Figure 1-26.)

+

The value you specify for minSpacing should be only slightly larger than the normal minimum spacing rule (typically, between 1x and 1.5x minimum spacing).
Type: Float, specified in microns

+

If the value of the specified notch length is zero, then the length of the notch is irrevelant. In other words, the spacing of a notch should always be checked independent of its length.

+

Note: You can specify only one NOTCHLENGTH rule per layer.

+
+

 

+
+

ENDOFNOTCHWIDTH endOfNotchWidth
  NOTCHSPACING minNotchSpacing
    NOTCHLENGTH minNotchLength

+
+

 

+
+

 

+
+

Indicates that the notch metal at the bottom end of a U-shaped notch requires spacing that is greater than or equal to minSpacing, if the notch has a width that is less than endOfNotchWidth, notch spacing that is less than or equal to minNotchSpacing, and notch length that is greater than or equal to minNotchLength. The spacing is required for the extent of the notch.

+

The values you specify for notchSpacing and minSpacing should be only slightly larger than the normal minimum spacing rule (typically between 1x and 1.5x minimum spacing). The value you specify for endOfNotchWidth should be only slightly larger than the minimum width rule (typically, between 1x and 1.5x minimum width).
Type: Float, specified in microns (for all values)

+

Note: You can specify only one ENDOFNOTCHWIDTH rule per layer.

+
+

+ + Using Spacing Rules +

+

Spacing rules apply to pin-to-wire, obstruction-to-wire, via-to-wire, and wire-to-wire spacing. These requirements specify the default minimum spacing allowed between two geometries on different nets.

+

When defined with a RANGE argument, a spacing value applies to all objects with widths within a specified range. That is, the rule applies to objects whose widths are greater than or equal to the specified minimum width and less than or equal to the specified maximum width.

+

Note: If you specify multiple RANGE arguments, the RANGE values should not overlap.

+

In the following example, the default minimum allowed spacing between two adjacent objects is 0.3 μm. However, for objects between 0.5 and 1.0 μm in width, the spacing is 0.4 μm. For objects between 1.01 and 2.0 μm in width, the spacing is 0.5 μm.

+

+ SPACING 0.3 ; +

+

+ SPACING 0.4 RANGE 0.5 1.0 ; +

+

+ SPACING 0.5 RANGE 1.01 2.0 ; #The RANGE begins at 1.01 and not 1.0 because +

+

+                              #RANGE values should not overlap. +

+

Threshold spacing is a function of both the wire width and the length of the neighboring object. It is typically used when vias are wider than the wire to allow tighter wire-to-wire spacing, even when the vias are present.

+

In the following example, a slightly tighter spacing of .24 μm is needed if the other object is less than or equal to 1.0 μm in length (see Figure 1-20 ).

+

+ SPACING 0.28 ; +

+

+ SPACING 0.24 LENGTHTHRESHOLD 1.0 ; +

+

+ Figure 1-20  +   +

+


+

The USELENGTHTHRESHOLD argument specifies that the threshold spacing rule should be applied if the other object meets the previous LENGTHTHRESHOLD value.

+

In the following example, a larger spacing of 0.32 μm is needed for wire widths between 1.5 and 9.99 μm. However, if the other object is less than or equal to 1.0 μm in length, the smaller .0.28 μm spacing is applied (see Figure 1-21 ).

+

+ SPACING 0.28 ;                      #Default minimum spacing is >=0.28 um. +

+

+ SPACING 0.28 LENGTHTHRESHOLD 1.0 ;  #For short parallel lengths of <= 1.0 um, +

+

+                                     #0.28 spacing is allowed. +

+

+ SPACING 0.32 RANGE 1.5 9.99 USELENGTHTHRESHOLD ; +

+

+                                     #Wide wires with 1.5 <= width <=9.99 need +

+

+                                     #0.32 spacing unless the parallel run +

+

+                                     #length is <= 1.0 from the previous rule. +

+

+ Figure 1-21  + +

+


+

Influence spacing rules are used to support the inheritance of wide wire spacing by nets connected to the wide wires. For example, a larger spacing is needed for stub wires attached to large objects like pre-routed power wires. A piece of metal connecting to a wider wire will inherit spacing rules for a user-defined distance from the wider wire.

+

In Figure 1-22 , a minimum space of N is required between two metal lines when at least one metal line has a width that is >= Y. This spacing must be maintained for any small piece of metal (<Y) that is connected to the wide metal within X range of the wide metal. Outside of this range, normal spacing rules (Z) apply.

+

+ Figure 1-22  +   +

+



+

In the following example, the 0.5 μm spacing applies for the first 1.0 μm of the stub sticking out from the large object. This rule only applies to the stub wire; the previous rule must be included for the wide wire spacing. The SPACING 0.5 RANGE 2.01 2000.0 statement is required to get extra spacing for the wide-wire itself.

+

+ SPACING 0.5 RANGE 2.01 2000.0 ; +

+

+ SPACING 0.28 ;              #Minimum spacing is >= 0.28 um. +

+

+ SPACING 0.5 RANGE 2.01 2000.0 ;    #wide-wire >= 2.01 um wide requires 0.5um spacing +

+

+ SPACING 0.5 RANGE 2.01 2000.0 INFLUENCE 1.000 ;   +

+

+                             #Stub wires <= 1.0 um from wide wires >= 2.01 +

+

+                             #require 0.5 um spacing. +

+

Some processes only need the INFLUENCE rule for certain widths of the stub wire. In the following example, the 0.5 μm spacing is required only for stub wires between 0.5 and 1.0 μm in width.

+

+ SPACING 0.28 ;         #Minimum spacing is >= 0.28 um. +

+

+ SPACING 0.5 RANGE 2.01 2000.0 ;    #wide-wire >= 2.01 um wide requires 0.5um spacing +

+

+ SPACING 0.5 RANGE 2.01 2000.0 INFLUENCE 1.00 RANGE 0.5 1.0 ; +

+

+                        #Stub wires with 0.5 <= width <= 1.0, and <= 1.0 um from +

+

+                        #wide wide wires >= 2.01 require 0.5 um spacing. +

+

+ Example 1-18  + EOL Spacing Rules +

+ +
+ + SPACING 1.0 ; #minimum spacing is 1.0 μm +
+
+ + SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 ; +
+
Any EOL that is less than 1.3 μm wide requires spacing that is greater than or equal to 1.2 μm beyond the EOL, within 0.6 μm to either side. Figure 1-23 includes examples of legal spacing for, and violations of, this rule.
+

+ Figure 1-23  +   +

+


+ +
+ + SPACING 1.0 ; #minimum spacing is 1.0 μm +
+
+ + SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 PARALLELEDGE 1.1 WITHIN 0.5 ; +
+
Any line that is less than 1.3 μm wide, with a parallel edge that is less than 1.1 μm away, and is within 0.5 μm of the EOL, requires spacing greater than or equal to 1.2 μm beyond the EOL, within 0.6 μm to either side of the EOL. Figure 1-24 includes examples of legal spacing for, and violations of, this rule.
+

+ Figure 1-24  +   +

+


+


+ +
+ + SPACING 1.0 ; #minimum spacing is 1.0 μm +
+
+ + SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 PARALLELEDGE 1.1 WITHIN 0.5 TWOEDGES ; +
+

+ Example 1-19  + Same Net Spacing Rule +

+

If you include the following routing layer rules in your LEF file, same-net power or ground nets can use 1.0 μm spacing, even if they are 2 μm to 5 μm wide, as shown in Figure 1-25 :

+
+ + LAYER M1 +
+
+ + TYPE ROUTING ; +
+
+ + SPACING 1.0 ;                 #min spacing is 1.0 +
+
+ + SPACING 1.5 RANGE 2.0 5.0 ;   #need 1.5 spacing for 2 to 5 μm wide wires +
+
+ + SPACING 1.0 SAMENET PGONLY ; +
+

+ Figure 1-25  +   +

+


+

+ Example 1-20  + Notch Length Spacing Rule +

+

The figure below illustrates the following routing layer rules:

+

+ SPACING 0.10 ; +

+

+ SPACING 0.12 NOTCHLENGTH 0.15 ; +

+

+ Figure 1-26  + Notch Length Rule Definitions +

+


+

+ Example 1-21  + End Of Notch Width Spacing Rule +

+

If you include the following routing layer rules in your LEF file, the notch metal at the bottom end of a U-shaped notch must have spacing that is greater than or equal to 0.14 μm, if the notch metal has a width that is less than 0.15 μm, notch spacing that is less than or equal to 0.16 μm, and notch length that is greater than or equal to 0.08 μm. See Figure 1-27 for different layout examples for these rules.

+

+ SPACING 0.10 ;       #default spacing +

+

+ SPACING 0.14 ENDOFNOTCHWIDTH 0.15 NOTCHSPACING 0.16 NOTCHLENGTH 0.08 ; +

+

+ Figure 1-27  + End Of Notch Width Rule Definitions +

+


+

+ + SPACINGTABLE +

+
Specifies the spacing tables to use for wiring on the layer. You can specify only one parallel run length and one influence spacing table for a layer. For information on and examples of using spacing tables, see "Using Spacing Tables".
+
The syntax for describing spacing tables is defined as follows:
+
[SPACINGTABLE
   PARALLELRUNLENGTH {length} ...
     {WIDTH width {spacing} ...}... ;
     [SPACINGTABLE
       INFLUENCE {WIDTH width WITHIN distance
         SPACING spacing} ... ;]
 | TWOWIDTHS {WIDTH width [PRL runLength]
         {spacing} ...} ... ;
;]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

PARALLELRUNLENGTH {length} ...
  {WIDTH
width {spacing} ...}

+
+

      

+
+

   

+
+

Specifies the maximum parallel run length between two objects, in microns. If the maximum width of the two objects is greater than width, and the parallel run length is greater than length, then the spacing between the objects must be greater than or equal to spacing. The first spacing value is the minimum spacing for a given width, even if the PRL value is not met.

+

You must specify length, width, and spacing values in increasing order.
Type: Float, specified in microns (for all values)

+
+

 

+
+

TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ...}

+
+

 

+
+

 

+
+

Creates a table in which the spacing between two objects depends on the widths of both objects (instead of just the widest width). Optionally, it also can depend on the parallel run length between the two objects (PRL). For more information, see "Two-Width Spacing Tables."

+

The first width value should be 0 without an accompanied run length definition.

+

The PRL values in SPACINGTABLE TWOWIDTHS statement can be negative, which should be interpreted in the same way as in SPACINGTABLE PARLLELRUNLENGTH rules.
Type: Float, specified in microns (for all values)

+
+

    

+
+

INFLUENCE {WIDTH width WITHIN distance SPACING spacing ...}

+
+

 

+
+

 

+
+

Creates a table that enforces wide wire spacing rules between nearby perpendicular wires. If an object has a width that is greater than width, and is located less than distance from two perpendicular wires, then the spacing between the perpendicular wires must be greater than or equal to spacing.

+

You must specify width values in increasing order.
Type: Float, specified in microns (for all values)

+

Note: You can only specify an INFLUENCE table if you specify a PARALLELRUNLENGTH table first.

+
+

+ + Specifying SPACING Statements with SPACINGTABLE +

+

You can specify some of the SPACING statements with the SPACINGTABLE statements. For example, the following SPACING statements can be specified with SPACINGTABLE:

+
+ + SPACING x SAMENET ___ ; +
+
+ + SPACING x ENDOFLINE ___ ; +
+
+ + SPACING x NOTCHLENGTH ___ ; +
+
+ + SPACING x ENDOFNOTCHWIDTH ___ ; +
+

These SPACING checks are orthogonal to the SPACINGTABLE checks, except SAMENET spacing will override SPACINGTABLE for same-net objects.

+

However, you cannot specify some SPACING statements (as given below) with SPACINGTABLE as these would generate semantic errors.

+
+ + SPACING x ; +
+
+ + SPACING x RANGE ___ ; +
+
+ + SPACING x LENGTHTHRESHOLD ___ ; +
+

+ + Using Spacing Tables +

+

Some processes have complex width and length threshold rules. Instead of creating multiple SPACING rules with different LENGTHTHRESHOLD and RANGE statements, you can define the information in a spacing table.

+

For example, for Figure 1-28 , a typical 90nm DRC manual might have the following rules described:

+ + + + + + + + + + + + + + + + + + + + + +
+
+

Minimum spacing

+
+

0.15 μm spacing

+
+

Either width>0.25 μm and parallel length>0.50 μm

+
+

0.20 μm spacing

+
+

Either width>1.50 μm and parallel length>0.50 μm

+
+

0.50 μm spacing

+
+

Either width>3.00 μm and parallel length>3.00 μm

+
+

1.00 μm spacing

+
+

Either width>5.00 μm and parallel length>5.00 μm

+
+

2.00 μm spacing

+
+

+ Figure 1-28  +   +

+


+

These rules translate into the following SPACINGTABLE PARALLELRUNLENGTH statement:

+

+ LAYER metal1 +

+
+ + ... +
+
+ + SPACINGTABLE +
+
+ +  PARALLELRUNLENGTH 0.00 0.50 3.00 5.00        #lengths must be increasing +
+
+ +    WIDTH 0.00      0.15 0.15 0.15 0.15        #max width>0.00 +
+
+ +    WIDTH 0.25      0.15 0.20 0.20 0.20        #max width>0.25 +
+
+ +    WIDTH 1.50      0.15 0.50 0.50 0.50        #max width>1.50 +
+
+ +    WIDTH 3.00      0.15 0.50 1.00 1.00        #max width>3.00 +
+
+ +    WIDTH 5.00      0.15 0.50 1.00 2.00 ;      #max width>5.00 +
+
+ + ... +
+

+ END metal1 +

+

Using the SPACINGTABLE PARALLELRUNLENGTH statement, the rules can be described in the following way:

+ + + +

By definition, the width is the smaller dimension of the object (that is, the width of each object must be less than or equal to its length).

+

Influence Spacing Tables

+

Processes often require a second spacing table to enforce the wide wire spacing rules between nearby perpendicular wires, even if the wires are narrow. Figure 1-29 illustrates this situation. Use the following SPACINGTABLE INFLUENCE syntax to describe this table:

+
+ SPACINGTABLE INFLUENCE
{WIDTH width WITHIN distance SPACING spacing} ... ; +
+

If a wire has a width that is greater than width, and the distance between it and two other wires is less than distance, the other wires must be separated by spacing that is greater than or equal to spacing. Typically, the distance and spacing values are the same. Note that the distance halo extends horizontally, but not into the corners.

+

By definition, the width is the smaller dimension of the object (that is, the width is less than or equal to the length of the large wire).

+

+ Figure 1-29  +   +

+


+

The wide wire rules often match the larger width and spacing values in the SPACINGTABLE PARALLELRUNLENGTH values. The previously described rules translate into the following SPACINGTABLE INFLUENCE statement:

+

+ LAYER metal1 +

+
+ + ... +
+
+ + SPACINGTABLE INFLUENCE +
+
+ +   WIDTH 1.50 WITHIN 0.50 SPACING 0.50 #w>1.50, dist<0.50, needs sp>=0.50 +
+
+ +   WIDTH 3.00 WITHIN 1.00 SPACING 1.00 #widths must be increasing +
+
+ +   WIDTH 5.00 WITHIN 2.00 SPACING 2.00 ; +
+
+ + ... +
+

+ END metal1 +

+

Two-Width Spacing Tables

+

You can create a table that enforces spacing rules that depends on the width of both objects instead of just the widest width, and optionally depends on the parallel run length between the two objects. You can use this table to replace existing SPACING ...RANGE...RANGE rules to make it easier to read, and to include parallel run length effects in one common table. Use the following SPACINGTABLE TWOWIDTHS syntax to describe this table:

+
+ SPACINGTABLE
TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ... } ... ; +
+

To find the required spacing, a 2-dimensional table is used that implicitly has the same widths (and optional parallel run lengths) for the row and column headings. There must be exactly as many spacing values in each WIDTH row as there are WIDTH rows. The width and runLength values must be the same or increasing from top to bottom in the table. The spacing values must be the same or increasing from left to right, and from top to bottom in the table.

+

Given two objects with width1, width2, and a parallel overlap of runLength, you find the spacing using the following method:

+
+ + + + + +
+
+ 1. +
+
Find the last row where both width1 is greater than the table row width, and runLength is greater than the table row run length. If no table row run length exists, the runLength value is not checked for that row (only that width1 is greater than table row width is checked).
+
+
+ + + + + +
+
+ 2. +
+
Find the right-most column where both width2 is greater than table column width and runLength is greater than table column run length. If no table column run length exists, the runLength value is not checked for that column (only that width2 is greater than table column width is checked).
+
+ +

For example, assume a DRC manual has the following rules described:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Minimum spacing

+
+

0.15 μm spacing

+
+

Either width>0.25 μm and parallel length>0.0 μm

+
+

0.20 μm spacing

+
+

Both width>0.25 μm and parallel length>0.0 μm

+
+

0.25 μm spacing

+
+

Either width>1.50 μm and parallel length>1.50 μm

+
+

0.50 μm spacing

+
+

Both width>1.50 μm and parallel length>1.50 μm

+
+

0.60 μm spacing

+
+

Either width>3.00 μm and parallel length>3.00 μm

+
+

1.00 μm spacing

+
+

Both width>3.00 μm and parallel length>3.00 μm

+
+

1.20 μm spacing

+
+

The rules translate into the following SPACINGTABLE:

+

+ SPACINGTABLE  TWOWIDTHS +

+

+ #             width=     0.00  0.25  1.50  3.0 +

+

+ #               prl=     none 0.00 1.50  3.0 +

+

+ #                        ---------------------- +

+

+ WIDTH 0.00               0.15  0.20  0.50  1.00 +

+

+ WIDTH 0.25 PRL 0.0       0.20  0.25  0.50  1.00 +

+

+ WIDTH 1.50 PRL 1.50      0.50  0.50  0.60  1.00 +

+

+ WIDTH 3.00 PRL 3.00      1.00  1.00 1.00  1.20 ; +

+

Note that both width and parallel run length (if specified) must be exceeded to index into the row and column. Therefore, in this example:

+ + + + + + + + + + + + + +
+
+

If width1 = 0.25, width2 = 0.25, and prl = 0.0, then spacing = 0.15.

+
+

If width1 = 0.25, width2 = 0.26, and prl = 0.0, then spacing = 0.15.

+
+

If width1 = 0.25, width2 = 0.26, and prl = 0.1, then spacing = 0.20.

+
+

If width1 = 0.26, width2 = 0.26, and prl = 0.1, then spacing = 0.25.

+
+

+ + THICKNESS distance +

+
Specifies the thickness of the interconnect.
Type: Float
+

+ + TYPE ROUTING +

+
Identifies the layer as a routable layer.
+

+ + WIDTH defaultWidth +

+
Specifies the default routing width to use for all regular wiring on the layer.
Type: Float
+

+ + WIREEXTENSION value +

+
Specifies the distance by which wires are extended at vias. You must specify a value that is more than half of the routing width.
Default: Wires are extended half of the routing width
Type: Float
+

Note: The WIREEXTENSION statement only extends wires and not vias. For 65nm and below, WIREEXTENSION is no longer recommended because it may generate some advance rule violations if wires and vias have different widths.

+

The following figure shows WIREEXTENSION with same and different wire and via widths:

+

+ Figure 1-30  + Illustration of WIREEXTENSION +

+


+

Type Rule

+

A type rule can be used to further classify a routing layer.

+

You can create a type rule by using the following property definition:

+
+ TYPE ROUTING;
PROPERTY LEF58_TYPE
  "TYPE {POLYROUTING};" ; +
+

Where:

+

 

+ + + + + +
+
+

POLYROUTING

+
+

Indicates that the polysilicon layer should be considered as a routing layer. Polysilicon layers provide extra routing resources for designs with limited metal routing layers.

+
+

+

Span Length Table Rule

+

A span length table rule can be used to specify all the allowable legal span lengths on the routing layer.

+

You can create a span length table rule by using the following property definition:

+
+ PROPERTY LEF58_SPANLENGTHTABLE
"SPANLENGTHTABLE {spanLength} ... [WRONGDIRECTION]
    [ORTHOGONAL length] [EXCEPTOTHERSPAN otherSpanlength]
  ; " ; +
+

Where:

+

 

+ + + + + + + + + + + + + + + + + + + + + + + +
+
+

ORTHOGONAL length

+
+

Specifies that the length between two inside facing corners of a rectilinear object must be greater than or equal to the length. Type: Float, specified in microns

+
+

EXCEPTOTHERSPAN otherSpanlength

+
+

 

+
+

Indicates that the span length rule only applies if the span length on the perpendicular direction is greater than the specified otherSpanlength. This construct must be defined on a layer with RECTONLY. Otherwise, the span length in the orthogonal direction could be ambiguous in a polygon shape.
Type: Float, specified in microns

+
+

SPANLENGTHTABLE {spanLength)}...

+
+

 

+
+

Specifies all of the allowable legal span lengths on the routing layer. All of the given span lengths are exact values, except for the last one, which is greater than equal to the value. All of the possible span lengths of an object in both directions should be checked against the given span length values. At most, two SPANLENGTHTABLE spacing tables can be defined - one with WRONGDIRECTION and the other without.
Type: Float, specified in microns

+
+

WRONGDIRECTION

+
+

Specifies all of the allowable legal span lengths in the direction parallel to the specified direction in DIRECTION on a Manhattan routing layer.

+

Note that using WRONGDIRECTION changes the interpretation of any wrong-way routing widths in the DEF NETS section. If WRONGDIRECTION is specified, then any wrong-way routing in the DEF NETS section will use the WRONGDIRECTION width for that layer unless the net or route has a NONDEFAULTRULE with a WIDTH greater than the WRONGDIRECTION width. But, the implicit default route-extension is still half of the preferred direction width.

+

Some older tools may not understand this behavior. Normally, they will still read/write and round-trip the DEF routing properly, but will not understand that the width is slightly larger for wrong-way routes. If these tools check wrong-way width, then the DRC rules may flag false violations. RC extraction with the wrong width will also flag errors, although wrong-way routes are generally short and the width difference is small, so the RC error is normally negligible.

+
+

Span Length Table Rule Examples

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following example is an illustration of SPANLENGTHTABLE {spanLength}… ORTHOGONAL length and SPANLENGTHTABLE {spanLength}… WRONGDIRECTION with preferred direction being horizontal:
+
+

+ Figure 1-31  + Illustration of SPANLENGTHTABLE +

+


+

+

Width Table Rules

+

You can use width table rules to define all the allowable legal widths on the routing layer.

+

You can define a width table rule by using the following property definition:

+
+ PROPERTY LEF58_WIDTHTABLE
"WIDTHTABLE {width}... [WRONGDIRECTION] [ORTHOGONAL]
   ;" ; +
+

Where:

+

 

+ + + + + + + + + + + + + + + + +
+
+

ORTHOGONAL

+
+

Specifies that one of the right or wrong direction width between two inside corners of a rectilinear object must be greater than or equal to the first width value in the WIDTHTABLE in the corresponding direction, if WIDTHTABLE WRONGDIRECTION is specified. Otherwise, the width between the corners must be greater than or equal to the first width value in the WIDTHTABLE (for both directions) either vertically or horizontally.
Type: Float, specified in microns

+
+

WIDTHTABLE {width}...

+
+

 

+
+

Defines all the allowable legal widths on the routing layer. All the given widths are exact width values, except for the last one, which is equal to or greater than the value.

+

The WIDTH syntax should be used to define the default routing width on the layer, which should match one of the values in the WIDTHTABLE statement. In case that the last value of WIDTHTABLE denotes the exact width also, the MAXWIDTH statement with the last value can be used to represent it.

+

A polygon will be fractured into rectangles, and only the shorter dimension of the rectangles will be checked against the allowable legal widths.

+

At the most, two WIDTHTABLE spacing tables can be defined, one with WRONGDIRECTION and the other without it.

+

Type: Float, specified in microns.

+
+

WRONGDIRECTION

+
+

Specifies that the allowable legal widths are for wires with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer.

+

Note that using WRONGDIRECTION changes the interpretation of any wrong-way routing widths in the DEF NETS section. If WRONGDIRECTION is specified, then any wrong-way routing in the DEF NETS section will use the WRONGDIRECTION width for that layer unless the net or route has a NONDEFAULTRULE with a WIDTH greater than the WRONGDIRECTION width. But, the implicit default route-extension is still half of the preferred direction width.

+

Some older tools may not understand this behavior. Normally, they will still read/write and round-trip the DEF routing properly, but will not understand that the width is slightly larger for wrong-way routes. If these tools check wrong-way width, then the DRC rules may flag false violations. RC extraction with the wrong width will also flag errors, although wrong-way routes are generally short and the width difference is small, so the RC error is normally negligible.

+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following width table rule indicates that width must be 0.10 μm, 0.15 μm, 0.20 μm, 0.25 μm, 0.30 μm, and greater than or equal to 0.40 μm.
+
+
+ + MAXWIDTH 0.40 ; # To define legal width =, instead of >=, 0.40 μm. +
+
+ + PROPERTY LEF58_WIDTHTABLE +
+
+
"WIDTHTABLE 0.10 0.15 0.20 0.25 0.30 0.40 ;" ;
+
+

+ Figure 1-32  + Illustration of WIDTHTABLE Rule +

+


+ +
+ + DIRECTION VERTICAL ; +
+
+ + PROPERTY LEF58_WIDTHTABLE +
+
+
"WIDTHTABLE 0.05 0.1 0.15 WRONGDIRECTION ; " ;
+
+

+ Figure 1-33  + Illustration of Width Table Rule with ORTHOGONAL and WRONGDIRECTION +

+


+

Width Rules

+

Width rules can be used to define the default routing width to use for all regular wiring on the layer.

+

You can define a width rule by using the following property definition:

+
+ PROPERTY LEF58_WIDTH
"WIDTH minWidth [WRONGDIRECTION]
   ;" ; +
+

Where:

+

WIDTH is the same as the existing routing layer WIDTH syntax.

+

 

+ + + + + +
+
+

WRONGDIRECTION

+
+

Specifies the default routing width to use for all regular wiring with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer.

+

Note that using WRONGDIRECTION changes the interpretation of any wrong-way routing widths in the DEF NETS section. If WRONGDIRECTION is specified, then any wrong-way routing in the DEF NETS section will use the WRONGDIRECTION width for that layer unless the net or route has a NONDEFAULTRULE with a WIDTH greater than the WRONGDIRECTION width. But, the implicit default route-extension is still half of the preferred direction width.

+

Some older tools may not understand this behavior. Normally, they will still read/write and round-trip the DEF routing properly, but will not understand that the width is slightly larger for wrong-way routes. If these tools check wrong-way width, then the DRC rules may flag false violations. RC extraction with the wrong width will also flag errors, although wrong-way routes are generally short and the width difference is small, so the RC error is normally negligible.

+
+

Width Rule Examples

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following width rule indicates that the default routing width of a vertical route is 0.1 μm, while the default routing width of a horizontal route is 0.14 μm:
+
+
+ + DIRECTION VERITICAL; +
+
+ + WIDTH 0.1; +
+
+ + PROPERTY LEF58_WIDTH +
+
+
"WIDTH 0.14 WRONGDIRECTION ;" ;
+
+
In the DEF, a vertical default route in the NETS section will have a width of 0.10 μm with extension of 0.05 μm, while a horizontal route will have a width of 0.14 μm with extension of 0.05 μm.
+
In more advanced nodes, wider widths are required for non-preferred direction. The following example shows route with wrong-way segment:
+


+

 

+

+ Figure 1-34  + Illustration of WIDTH Rule with WRONGDIRECTION +

+


+

+ + Routing Pitch +

+

The PITCH statements define the detail routing grid generated when you initialize a floorplan. The pitch for a given routing layer defines the distance between routing tracks in the preferred direction for that layer. The complete routing grid is the union of the tracks generated for each routing layer.

+

The spacing of the grid should be no less than line-to-via spacing in both the horizontal and vertical directions. Grid spacing less than line-to-via spacing can result in routing problems and can decrease the utilization results.

+

The grid should normally allow for diagonal vias. Via spacing on all layers included in the via definition in LEF determines whether or not diagonal vias can be used. The router is capable of avoiding violations between diagonal vias. If you allow diagonal vias, less time is needed for routing and the layout creates a smaller design.

+

Library

+

+ + Defining Library Properties to Create 32/28 nm and Smaller Nodes Rules +

+

You can include libraray properties in your LEF file to create 32/28 nm and smaller nodes rules that currently are not supported by existing LEF syntax. The properties are specified inside the PROPERTYDEFINITIONS statements.

+ +

All properties use the following syntax within the LEF PROPERTYDEFINITIONS statement:

+
+ PROPERTYDEFINITIONS
LAYER propName STRING ["stringValue"] ; +
+
+ END PROPERTYDEFINITIONS +
+

The property definitions for the library properties are as follows:

+

+ PROPERTYDEFINITIONS +

+

+    LIBRARY LEF58_OALAYERMAP STRING ; +

+

+ END PROPERTYDEFINITIONS +

+

OpenAccess Layer Map Rule

+

You can create an OpenAccess layer map rule to define the equivalent OpenAcces layer name for a LEF layer.

+

You can define an OpenAccess layer map rule by using the following PROPERTYDEFINITIONS statement:

+

+ PROPERTYDEFINITIONS
LIBRARY LEF58_OALAYERMAP STRING
   "OALAYERMAP
oaLayer
        LAYER layer [MASK maskNum]
      ;..." ;
END PROPERTYDEFINITIONS
+

+

Where:

+

 

+ + + + + + + + +
+
+

OALAYERMAP oaLayer LAYER layer [MASK maskNum]

+
+

 

+
+

Specifies the equivalent OpenAccess layer name oaLayer of LEF layer layer. If MASK is specified only on a multi-patterning layer with MASK, only maskNum shapes would be mapped to the given OpenAcess layer name. If MASK is specified, there would be multiple such properties for each of the possible masks.

+
+

OpenAccess Layer Map Rule Examples

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following example indicates that the LEF layer M1 is mapped to OpenAccess layer Metal1:
+
+
+ + PROPERTYDEFINITIONS
LIBRARY LEF58_OALAYERMAP STRING "
     OALAYERMAP Metal1 LAYER M1 ; " ;
END PROPERTYDEFINITIONS
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The following example indicates that the LEF MASK 1 shapes on M1 would go to OpenAccess layer Metal1A while MASK 2 shapes on M1 would go to OpenAccess layer Metal1B:
+
+
+ + PROPERTYDEFINITIONS +
+
+ + LIBRARY LEF58_OALAYERMAP STRING "
     OALAYERMAP Metal1A LAYER M1 MASK 1 ;
     OALAYERMAP Metal1B LAYER M1 MASK 2 ; " ;
END PROPERTYDEFINITIONS
+
+

Macro

+
+ MACRO macroName
[CLASS
  { COVER [BUMP]
  | RING
  | BLOCK [BLACKBOX | SOFT]
  | PAD [INPUT | OUTPUT |INOUT | POWER | SPACER | AREAIO]
  | CORE [FEEDTHRU | TIEHIGH | TIELOW | SPACER | ANTENNACELL | WELLTAP]
  | ENDCAP {PRE | POST | TOPLEFT | TOPRIGHT | BOTTOMLEFT | BOTTOMRIGHT} 
  } 
;]
[FIXEDMASK ;]
[FOREIGN foreignCellName [pt [orient]] ;] ...
[ORIGIN pt ;]
[EEQ macroName ;]
[SIZE width BY height ;]
[SYMMETRY {X | Y | R90} ... ;]
[SITE siteName [sitePattern] ;] ...
[PIN statement] ...
[OBS statement] ...
[DENSITY statement] ...
[PROPERTY propName propVal ;] ...
END macroName
+
+

Defines macros in the design.

+

Note: The keywords must be specified in the given order. For example if ORIGIN and SITE are both defined, ORIGIN must be specified first.

+

+ + CLASS +

+
Specifies the macro type. If you do not specify CLASS, the macro is considered a CORE macro, and a warning prints when the LEF file is read in. You can specify macros of the following types:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

      

+
+

COVER

+
+

Macro with data that is fixed to the floorplan and cannot change, such as power routing (ring pins) around the core. The placers understand that CLASS COVER cells have no active devices (such as diffusion or polysilicon), so the MACRO SIZE statement does not affect the placers, and you do not need an artificial OVERLAP layer. However, any pin or obstruction geometry in the COVER cells can affect the pin access checks done by the placers.

+

A cover macro can be of the following sub-class:

+

BUMP--A physical-only cell that has bump geometries and pins. Typically a bump cell has geometries only on the top-most "bump" metal layer, although it might contain a via and pin to the metal layer below.

+
+

       

+
+

RING

+
+

Large macro that has an internal power mesh, and only exposes power-pin shapes that form a ring along the macro boundary. When power stripes are added across the macro, they connect to each side of the ring-pin but do not go inside the ring. The CLASS RING macro can also be used for power-switch cells that are abutted together to form a power-ring around a power-domain. In that case, their power-pins have the same effect of interrupting power stripes as the ring-pins in a single block RING macro.

+
+

     

+
+

BLOCK

+
+

Predefined macro used in hierarchical design.

+

A block macro can have one of the following sub-classes:

+

BLACKBOX--A block that sometimes only contains a SIZE statement that estimates its total area. A blackbox can optionally contain pins, but in many cases, the pin names are taken from a Verilog description and do not need to match the LEF MACRO pin names.

+

SOFT--A cell that also contains a version of the sub-block that is not fully implemented. Normally, a soft block LEF can still have certain parts of it modified (for example, the aspect ratio, or pin locations) because the sub-block is not yet fully implemented. Any changes should be passed to the sub-block implementation. In contrast, a BLACKBOX has no sub-block implementation available.

+
+

     

+
+

PAD

+
+

I/O pad. A pad can be one of the following types: INPUT, OUTPUT, INOUT, POWER, or SPACER, for I/O rows; INPUT, OUTPUT, INOUT, or POWER, for I/O corner pads; AREAIO for area I/O driver cells that do not have the bump built in as part of the macro (and therefore require routing to a CLASS COVER BUMP macro for a connection to the IC package).

+

For an example of a macro pad cell, see Example 1-22.

+
+

     

+
+

CORE

+
+

A standard cell used in the core area. CORE macros should always contain a SITE definition so that standard cell placers can correctly align the CORE macro to the standard cell rows.

+

A core macro can be one of the following types:

+

FEEDTHRU--Used for connecting to another cell.

+

TIEHIGH,TIELOW--Used for connecting unused I/O terminals to the power or ground bus. The software does not rely on this sub-class. A tie-cell has to be CLASS CORE, but the software does not consider the sub-class to determine its type. The dotlib representation of the cell's output pin is considered, and based on the function on that pin, it is determined whether it is a tiehigh, or tielow.

+

SPACER--Sometimes called a filler cell, this cell is used to fill in space between regular core cells. The SPACER sub-class needs to be cells with no logic-pins. Thus even with the sub-class defined, a cell will not be considered SPACER (also called FILLER) unless it has no logic/signal pins. A filler can only have Power and Ground pins. The instances of these cells will be marked by the insertion command to be of type 'Physical'.

+

ANTENNACELL--Used for solving process antenna violations. This cell has a single input to a diode to bleed off charge that builds up during manufacturing.

+

WELLTAP--Standard cell that connects N and P diffusion wells to the correct power or ground wire. The WELLTAP cells provide a tap for the N and P wells to the power/ground wires.

+
+

    

+
+

ENDCAP

+
+

A macro placed at the ends of core rows (to connect with power wiring).

+

If the library includes only one corner I/O macro, then appropriate SYMMETRY must be included in its macro description. An ENDCAP macro can be one of the following types:
PRE--A left-end macro
POST--A right-end macro
TOPLEFT--A top left I/O corner cell
TOPRIGHT--A top right I/O corner cell
BOTTOMLEFT --A bottom left I/O corner cell
BOTTOMRIGHT--A bottom right I/O corner cell

+

The ENDCAP sub-class is required. The PRE and POST are CORE area cells, whereas the other four are PAD CLASS.

+
+

+ Example 1-22  + Macro Pad Cell +

+

The following example defines a power pad cell that illustrates when to use the CLASS CORE keywords on power ports. For the VDD pin, there are two ports: one to connect to the interior core power ring, and one to complete the I/O power ring. Figure 1-1 on page 6 illustrates this pad cell.

+

+ MACRO PAD_0 +

+
+ + CLASS PAD ; +
+
+ + FOREIGN PAD_0 0.000 0.000 ; +
+
+ + ORIGIN 0.000 0.000 ; +
+
+ + SIZE 100.000 BY 300.000 ; +
+
+ + SYMMETRY X Y R90 ; +
+
+ + SITE PAD_SITE ; +
+

+   +

+

+ # Define pin VDD with SHAPE ABUTMENT because there are no obstructions
# to block a straight connection to the pad rings. The port without
# CLASS CORE is used for completing the I/O power ring.
+

+

+   +

+
+ + PIN VDD +
+
+
DIRECTION INOUT ;
+
+
+
USE POWER ;
+
+
+
SHAPE ABUTMENT ;
+
+
+
PORT
+
+
+
   LAYER metal2 ;
+
+
+
     RECT 0.000 250.000 100.000 260.000 ;
+
+
+
   LAYER metal3 ;
+
+
+
     RECT 0.000 250.000 100.000 260.000 ;
+
+
+ + END +
+

+   +

+

+ # Define VDD port with PORT CLASS CORE to indicate that the port connects
# to the core area instead of to the pad ring.
+

+

+   +

+
+ +   PORT +
+
+
   CLASS CORE ;
+
+
+
   LAYER metal2 ;
+
+
+
     RECT 0.000 290.000 100.000 300.000 ;
+
+
+
   LAYER metal3 ;
+
+
+
     RECT 0.000 290.000 100.000 300.000 ;
+
+
+ +   END +
+
+ + END VDD +
+

+   +

+

+ # Define pins VCC and GND with SHAPE FEEDTHRU because these pins
# cannot make a straight connection to the pad rings due to obstructions.
+

+
+ + PIN VCC +
+
+
  DIRECTION INOUT ;
+
+
+
  USE POWER ;
+
+
+
  SHAPE FEEDTHRU ;
+
+
+
  PORT
+
+
+
    LAYER metal2 ;
+
+
+
      RECT 0.000 150.000 20.000 160.000 ;
+
+
+
      RECT 20.000 145.000 80.000 155.000 ;
+
+
+
      RECT 80.000 150.000 100.000 160.000 ;
+
+
+
    LAYER metal3 ;
+
+
+
      RECT 0.000 150.000 20.000 160.000 ;
+
+
+
      RECT 20.000 145.000 80.000 155.000 ;
+
+
+
      RECT 80.000 150.000 100.000 160.000 ;
+
+
+
  END
+
+
+ + END VCC +
+
+ + PIN GND +
+
+
DIRECTION INOUT ;
+
+
+
USE GROUND ;
+
+
+
SHAPE FEEDTHRU ;
+
+
+
PORT
+
+
+
   LAYER metal2 ;
+
+
+
     RECT 0.000 50.000 20.000 60.000 ;
+
+
+
     RECT 80.000 50.000 100.000 60.000 ;
+
+
+
END
+
+
+ + END GND +
+
+ + OBS +
+
+
LAYER metal1 ;
+
+
+
    RECT 0.000 0.000 100.000 300.000 ;
+
+
+
LAYER metal2 ;
+
+
+
    RECT 25.000 50.000 75.000 60.000 ;
+
+
+
    RECT 30.500 157.000 70.500167.000 ;
+
+
+ + END +
+

+ END PAD_0 +

+

+ Figure 1-35  + Power Pad Cell +

+


+

+ + DENSITY statement +

+
Specifies the metal density for large macros.
+
The DENSITY rectangles on a layer should not overlap, and should cover the entire area of the macro. You can choose the size of the rectangles based on the uniformity of the density of the block. If the density is uniform, a single rectangle can be used. If the density is not very uniform, the size of the rectangles can be specified to be 10 to 20 percent of the density window size, so that any error due to non-uniform density inside each rectangle area is small.
+
For example, if the metal density rule is for a 100 μm x 100 μm window, the density rectangles can be 10x10 μm squares. Any non-uniformity will have little impact on the density calculation accuracy.
+
If two adjacent rectangles have the same or similar density, they can be merged into one larger rectangle, with one average density value. The choice between accuracy and abstraction is left to the abstract generator.
+
The DENSITY syntax is defined as follows:
+
[DENSITY
   {LAYER layerName ;
      {RECT x1 y1 x2 y2 densityValue ;} ...
   } ...
END] ...
+ + + + + + + + + + + + + + + + +
+
+

 

+
+

densityValue

+
+

Specifies the density for the rectangle, as a percentage. For example, 50.0 indicates that the rectangle has a density of 50 percent on layerName.
Type: Float
Value: 0 to 100

+
+

 

+
+

layerName

+
+

Specifies the layer on which to create the rectangle.

+
+

 

+
+

x1 y1 x2 y2

+
+

Specifies the coordinates of a rectangle.
Type: Float, specified in microns

+
+

+ Example 1-23  + Macro Density +

+

The following statement specifies the density for macro testMacro:

+

+ MACRO testMacro +

+
+ + CLASS ... +
+
+ + PIN ... +
+
+ + OBS ... +
+
+ + DENSITY +
+
+
LAYER metal1 ;
+
+
+
RECT 0 0 100 100 45.5 ; #rect from (0,0) to (100,100), density of 45.5%
+
+
+
RECT 100 0 200 100 42.2 ; #rect from (100,0) to (200, 100), density of 42.2%
+
+
+ + END +
+
+ + ... +
+

+ END testMacro +

+

 

+ + + + + + + + + + + + + + + + +
+
+

EEQ macroName

+
+

Specifies that the macro being defined should be electrically equivalent to the previously defined macroName. EEQ macros include devices such as OR-gates or inverters that have several implementations with different shapes, geometries, and orientations.

+

Electrically equivalent macros have the following requirements:

+ +
+ + + + + +
+
+ + * + +
+
Pins must be defined in the same order.
+
+ +
+ + + + + +
+
+ + * + +
+
The EEQ macroName specified must refer to a previously defined macro. If the EEQ macroName referenced is already electrically equivalent to other model macros, all referenced macros are considered electrically equivalent.
+
+
+

FIXEDMASK

+
+

Indicates that the specified macro does not allow mask-shifting. All the LEF PIN MASK assignments must be kept fixed and cannot be shifted to a different mask to optimize routing density. All the LEF PIN shapes should have MASK assignments, if FIXEDMASK statement is present.

+

For example,

+

+ MACRO my_block +

+
+ + CLASS BLOCK ; +
+
+ + FIXEDMASK ; +
+
+ + ... +
+
+

FOREIGN foreignCellName [pt [orient]]

+
+

 

+
+

Specifies the foreign (GDSII) structure name to use when placing an instance of the macro. The optional pt coordinate specifies the macro origin (lower left corner when the macro is in north orientation) offset from the foreign origin. The FOREIGN statement has a default offset value of 0 0, if pt is not specified.

+

The optional orient value specifies the orientation of the foreign cell when the macro is in north orientation. The default orient value is N (North).

+

 

+
+

+ Example 1-24  + Foreign Statements +

+

The following examples show two variations of the FOREIGN statement. The negative offset specifies that the GDSII structure should be above and to the right of the macro lower left corner.

+
+ + MACRO ABC ... +
+
+ + FOREIGN ABC -2 -3 ; +
+

The positive offset specifies that the GDSII structure should be below and to the left of the macro lower left corner.

+
+ + MACRO EFG ... +
+
+ + FOREIGN EFG 2 3 ; +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

MACRO macroName

+
+

Specifies the name of the library macro.

+
+

OBS statement

+
+

Defines obstructions on the macro. Obstruction geometries are specified using layer geometries syntax. See "Macro Obstruction Statement" for syntax information.

+
+

ORIGIN pt

+
+

Specifies how to find the origin of the macro to align with a DEF COMPONENT placement point. If there is no ORIGIN statement, the DEF placement point for a North-oriented macro is aligned with 0, 0 in the macro. If ORIGIN is given in the macro, the macro is shifted by the ORIGIN x, y values first, before aligning with the DEF placement point. For example, if the ORIGIN is 0, -1, then macro geometry at 0, 1 are shifted to 0, 0, and then aligned to the DEF placement point.

+
+

PIN statement

+
+

Defines pins for the macro. See "Macro Pin Statement" for syntax information.

+
+

PROPERTY propName propVal

+
+

 

+
+

Specifies a numerical or string value for a macro property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.

+
+

SITE siteName [sitePattern]

+
+

 

+
+

Specifies the site associated with the macro. Normal row-based standard cells only have a single SITE siteName statement, without a sitePattern. The sitePattern syntax indicates that the cell is a gate-array cell, rather than a row-based standard cell. Gate-array standard cells can have multiple SITE statements, each with a sitePattern.

+

The sitePattern syntax is defined as follows:

+

[xOrigin yOrigin siteOrient [stepPattern]]

+
+

   

+
+

xOrigin yOrigin

+
+

Specifies the origin of the site inside the macro.
Type: Float, specified in microns

+
+

   

+
+

siteOrient

+
+

Specifies the orientation of the site at that location.
Value: N, S, E, W, FN, FS, FE, or FW

+
+

   

+
+

Note: Legal placement locations for macros with site patterns must match the site pattern inside the macro to the site pattern in the design rows.

+
+
If the site is repeated, you can specify a stepPattern that defines the repeating pattern. The stepPattern syntax is defined as follows:
+
[DO xCount BY yCount STEP xStep yStep]
+ + + + + + + + + + + +
+
+

   

+
+

xCount yCount

+
+

Specifies the number of sites to add in the x and y directions. You must specify values that are greater than or equal to 0 (zero).
Type: Integer

+
+

   

+
+

xStep yStep

+
+

Specifies the spacing between sites in the x and y directions.
Type: Float, specified in microns

+
+

+ Example 1-25  + Macro Site +

+

The following statement defines a macro that uses the sites created in Example 1-37 :

+

+ MACRO myTest +

+
+ + CLASS CORE ; +
+
+ + SIZE 10.0 BY 14.0 ;   #Uses 2 F and 1 L site, is F + L wide, and double height +
+
+ + SYMMETRY X ;          #Can flip about the X axis +
+
+ + SITE Fsite 0 0 N ;    #The lower left Fsite at 0,0 +
+
+ + SITE Fsite 0 7.0 FS ; #The flipped south Fsite above the first Fsite at 0,7 +
+
+ + SITE Lsite 4.0 0 N ; #The Lsite to the right of the first Fsite at 4,0 +
+
+ + ... +
+
+ + PIN ... ; +
+

+ END myTest +

+

Figure 1-36 illustrates the placement results of this definition.

+

+ Figure 1-36  +   +

+


+

The following statement includes the gate-array site pattern syntax. It uses two F sites in a row with N (North) orientation.

+

+ MACRO myTest +

+
+ + CLASS CORE ; +
+
+ + SIZE 8.0 BY 7.0 ; #Width = 2 * Fsite width, height = Fsite height +
+
+ + SITE Fsite 0 0 N DO 2 BY 1 STEP 4.0 0 ; #Xstep = 4.0 = Fsite width +
+
+ + ... +
+

+ END myTest +

+

This definition produces a cell with the sites shown in Figure 1-37.

+

+ Figure 1-37  +   +

+


+

+ +   +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

SIZE width BY height

+
+

 

+
+

 

+
+

Specifies a placement bounding rectangle, in microns, for the macro. The bounding rectangle always stretches from (0, 0) to the point defined by SIZE. For example, given SIZE 10 BY 40, the bounding rectangle reaches from (0, 0) after adjustment due to the ORIGIN statement, to (100, 400).

+

Placers assume the placement bounding rectangle cannot overlap placement bounding rectangles of other macros, unless OBS OVERLAP shapes are used to create a non-rectangular area.

+

After placement, a DEF COMPONENTS placement pt indicates where the lower-left corner of the placement bounding rectangle is placed after any possible rotations or flips. The bounding rectangle width and height should be a multiple of the placement grid to allow for abutting cells.

+

For blocks, the placement bounding rectangle typically contains all pin and blockage geometries, but this is not required. For example, typical standard cells have pins that lie outside the bounding rectangle, such as power pins that are shared with cells in the next row above them.

+
+

SYMMETRY {X | Y | R90}

+
+

 

+
+

 

+
+

Specifies which macro orientations should be attempted by the placer before matching to the site of the underlying rows. In general, most standard cell macros should have symmetry X Y. N (North) is always a legal candidate. For each type of symmetry defined, additional orientations become legal candidates. For more information on defining symmetry, see "Defining Symmetry".

+

Possible orientations include:

+
+

 

+
+

X

+
+

N and FS orientations should be tried.

+
+

 

+
+

Y

+
+

N and FN orientations should be tried.

+
+

 

+
+

X Y

+
+

N, FN, FS, and S orientations should all be tried.

+
+

 

+
+

R90

+
+

Specify this value only for non-standard cells.

+
+

 

+
+

Note: If you do not specify a SYMMETRY statement, only N orientation is tried.

+
+

For corner I/O pads, if the library includes BOTTOMLEFT, BOTTOMRIGHT, TOPLEFT, and TOPRIGHT I/O corner cells, then they are placed in North orientation (no flipping). However, if the library includes only one type of corner I/O, then SYMMETRY in x and y are required to create the rows for all four of them.

+

+ + Defining Cover Macros +

+

If you define a cover macro with its actual size, some place-and-route tools cannot place the rest of the cells in your design because it uses the cell boundary to check for overlaps. You can resolve this in two ways:

+ +
+ + + + + +
+
+ + * + +
+
If you want to define the cover macro with its actual size, create an overlap layer with the non-routing LAYER TYPE OVERLAP statement. You define this overlap layer (cover macro) with the macro obstruction (OBS) statement.
+
+

+ + Defining Symmetry +

+

Symmetry statements specify legal orientations for sites and macros. Figure 1-38 illustrates the normal orientations for single-height, flipped and abutted rows with standard cells and sites.

+

+ Figure 1-38  + Normal Orientations for Single-Height Rows +

+


+

The following examples describe typical combinations of orientations for standard cells. Applications typically create only N (or FS for flipped) row orientations for horizontal standard cell rows; therefore, the examples describe these two rows.

+

+ Example 1-26  + Single-Height Cells +

+

Single-height cells for flipped and abutted rows should have SITE symmetry Y and MACRO symmetry X Y. These specifications allow N and FN macros in N rows, and FS and S macros in FS rows, see Figure 1-39. These symmetries work with flipped and abutted rows, as well as rows that are not flipped and abutted, so if the rows are all N orientation, the cells all have N or FN orientation. The extra MACRO symmetry of X is not required in this case, but causes no problems.

+

+ Figure 1-39  + Legal Placements for Row Sites with Symmetry Y +

+


+

+ Example 1-27  + Double-Height Cells +

+

Double-height cells that are intended to align with flipped and abutted single-height rows should have SITE symmetry X Y and MACRO symmetry X Y. These symmetries allow all four cell orientations (N, FN, FS, and S) to fit inside the double-height row (see Figure 1-40 ). Usually, double-height rows are just N orientation rows that are abutted and aligned with a pair of single-height flipped and abutted rows.

+

+ Figure 1-40  + Legal Placements for Single-Height Row Sites with Symmetry Y and Double-Height Row Sites with Symmetry X Y +

+


+

+ Example 1-28  + Special Orientations +

+

Some single-height cells have special orientation needs. For example, the design requires flipped and abutted rows, but only N and FS orientations are allowed because of the special layout of well taps on the right side of a group of cells that borrow from the left side of the next cell. That is, you cannot place an N and FN cell against each other in one row because only N cells are allowed in an N row. In this case, the SITE symmetry should not be defined, and the MACRO symmetry should be X. A MACRO symmetry of X Y can also be defined because the Y-flipped macros (FN and S orientations) do not match the N or FS rows. See Figure 1-41 for the different combinations when the SITE has no symmetry.

+

+ Figure 1-41  + Legal Placements for Row Sites with No Symmetry +

+


+

+ Example 1-29  + Vertical Rows +

+

Vertical rows use N or FN row and site orientations. The flipped, abutted vertical row orientation is N and FN, rather than the horizontal row orientation of N and FS. Otherwise, the meaning of the site symmetries and macro symmetries is the same as those for horizontal rows.

+

Single-height sites are normally given symmetry X, and single-height cells are normally given symmetry X Y. Example d in Figure 1-42 shows the legal placement for a site with symmetry X, and the typical standard cell MACRO symmetry X Y.

+

+ Figure 1-42  + Legal Placements for Vertical Row Sites With Symmetry X +

+


+

Layer Geometries

+
+      { LAYER layerName
    [EXCEPTPGNET]
    [SPACING minSpacing | DESIGNRULEWIDTH value] ;
  [WIDTH width ;]
  { PATH [MASK maskNum] pt ... ;
  | PATH [MASK maskNum] ITERATE pt ... stepPattern ;
  | RECT [MASK maskNum] pt pt ;
  | RECT [MASK maskNum] ITERATE pt pt stepPattern ;
  | POLYGON [MASK maskNum] pt pt pt pt ... ;
  | POLYGON [MASK maskNum] ITERATE pt pt pt pt ... stepPattern ;
  } ...
| VIA [MASK viaMaskNum] pt viaName ;
| VIA ITERATE [MASK viaMaskNum] pt viaName stepPattern ;
} ...
+
+

Used in the macro obstruction (OBS) and pin port (PIN) statements to define layer geometries in the design.

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

DESIGNRULEWIDTH value

+
+

 

+
+

Specifies the effective design rule width. If specified, the obstruction or pin is treated as a shape of this width for all spacing checks. If you specify DESIGNRULEWIDTH, you cannot specify the SPACING argument. As a lot of spacing rules in advanced nodes no longer just rely on wire width, DESIGNRULEWIDTH is not allowed for 20nm and below nodes.
Type: Float, specified in microns

+
+

EXCEPTPGNET

+
+

Indicates that the obstruction shapes block signal routing, but do not block power or ground routing. This can be used to block signal routes that might cause noise, but allow connections to power and ground pins.

+
+

ITERATE

+
+

Creates an array of the PATH, RECT, POLYGON, or VIA geometry, as specified by the given step pattern. ITERATE specifications simplify the definitions of cover macros. The syntax for stepPattern is defined as follows:

+

DO numX BY numY STEP spaceX spaceY

+
+

 

+
+

numX

+
+

Specifies the number of columns of points.

+
+

 

+
+

numY

+
+

Specifies the number of rows of points.

+
+

 

+
+

spaceX spaceY

+
+

Specifies the spacing, in distance units, between the columns and rows of points.

+
+

LAYER layerName

+
+

Specifies the layer on which to place the geometry.

+

Note: For macro obstructions, you can specify cut, implant, or overlap layers.

+
+

MASK maskNum

+
+

Specifies which mask from double- or triple-patterning to use for this shape. The maskNum variable must be a positive integer. Most applications only support values of 1, 2, or 3.

+

Shapes without any defined mask have no mask set (they are considered uncolored). The uncolored PIN shapes can be assigned to an arbitrary mask as long as they do not have a spacing conflict with neighbor objects. The meaning of uncolored OBS shapes depends on the cell. For standard cell MACROs (with a SITE that is CLASS CORE), the uncolored OBS shapes are considered to be real metal shapes that can be assigned to any mask as long as no mask spacing conflicts occur. For other MACRO types, uncolored OBS shapes are assumed to be abstractions that may be any mask, so other shapes must be spaced far enough away to avoid a violation to any mask shape at that location.

+
+

MASK viaMaskNum

+
+

Specifies which mask for double- or triple-patterning lithography to be applied to via shapes on each layer.

+

The viaMaskNum is a hex-encoded 3 digit value of the form:

+

+ <topMaskNum><cutMaskNum><bottomMaskNum> +

+

For example, MASK 113 means the top metal and cut layer maskNum is 1, and the bottom metal layer maskNum is 3. A value of 0 means the shape on that layer has no mask assignment (is uncolored), so 013 means the top layer is uncolored. If either the first or second digit is missing, they are assumed to be 0, so 013 and 13 means the same thing. Most applications only support maskNum values of 0, 1, 2, or 3 for double or triple patterning.

+
+

 

+
+

The topMaskNum and bottomMaskNum variables specify which mask the corresponding metal shape belongs to. The via-master metal mask values have no effect. For the cut-layer, the cutMaskNum defines the mask for the bottommost, and then the leftmost cut. For multi-cut vias, the via-instance cut masks are derived from the via-master cut mask values. The via-master must have a mask defined for all of the cut shapes and every via-master cut mask is "shifted" (1 to 2, 2 to 1 for two mask layers, and 1 to 2, 2 to 3, 3 to 1 for three mask layers) so the lower-left cut matches the cutMaskNum value. See Example 1-31 .

+

Similarly, for the metal layer, the topMaskNum/bottomMaskNum would define the mask for the bottom-most, then leftmost metal shape. For multiple disjoint metal shapes, the via-instance metal masks are derived from the via-master metal mask values. The via-master must have a mask defined for all of the metal shapes, and every via-master metal mask is "shifted" (1->2, 2->1 for two mask layers, 1->2, 2->3, 3->1 for three mask layers) so the lower-left cut matches the topMaskNum/bottomMaskNum value.

+

Shapes without any defined mask that need to be assigned, can be assigned to an arbitrary choice of mask by applications.

+
+

PATH pt

+
+

Creates a path between the specified points, such as pt1 pt2 pt3. The path automatically extends the length by half of the current width on both endpoints to form a rectangle. (A previous WIDTH statement is required.) The line between each pair of points must be parallel to the x or y axis (45-degree angles are not allowed).

+

You can also specify a path with a single coordinate, in which case a square whose side is equal to the current width is placed with its center at pt.

+
+

POLYGON pt pt pt pt

+
+

 

+
+

 

+
+

Specifies a sequence of at least three points to generate a polygon geometry. Every polygon edge must be parallel to the x or y axis, or at a 45-degree angle. Each POLYGON statement defines a polygon generated by connecting each successive point, and then by connecting the first and last points.

+
+

RECT pt pt

+
+

Specifies a rectangle, where the two points specified are opposite corners of the rectangle. There is no functional difference between a geometry specified using PATH and a geometry specified using RECT.

+
+

SPACING minSpacing

+
+

Specifies the minimum spacing allowed between this particular OBS and any other shape. While the syntax is shared for both OBS and PIN, it is only intended to be used with OBS shapes. The minSpacing value overrides all other normal LAYER-based spacing rules, including wide-wire spacing rules, end-of-line rules, parallel run-length rules, etc. An OBS with SPACING is not "seen" by any other DRC check, except the simple check for minSpacing to any other routing shape on the same layer.

+

One common application is to put an OBS SPACING 0 shape on top of some PIN shapes to restrict the access of a router to other parts of the PIN without the OBS shape. This is sometimes needed for cells with large drive strengths to avoid electromigration problems by restricting the router to connect only to the middle of the output pin.

+

The minSpacing value cannot be larger than the maximum spacing defined in the SPACING or SPACINGTABLE for that layer. Tools may change larger values to the maximum spacing value with a warning.

+
+

VIA pt viaName

+
+

Specifies the via to place, and the placement location.

+
+

WIDTH width

+
+

Specifies the width that the PATH statements use. If you do not specify width, the default width for that layer is used. When you specify a width, that width remains in effect until the next WIDTH or LAYER statement. When another LAYER statement is given, the WIDTH is automatically reset to the default width for that layer.

+
+

+ Example 1-30  + Layer Geometries +

+

The following example shows how to define a set of geometries, first by using ITERATE statements, then by using individual PATH, VIA and RECT statements.

+

The following two sets of statements are equivalent:

+
+ + PATH ITERATE 532.0 534 1999.2 534 +
+
+
DO 1 BY 2 STEP 0 1446 ;
+
+
+ + VIA ITERATE 470.4 475 VIABIGPOWER12 +
+
+
DO 2 BY 2 STEP 1590.4 1565 ;
+
+
+ + RECT ITERATE 24.1 1.5 43.5 16.5 +
+
+
DO 2 BY 1 STEP 20.0 0 ;
+
+
+ + PATH 532.0 534 1999.2 534 ; +
+
+ + PATH 532.0 1980 1999.2 1980 ; +
+
+ + VIA 470.4 475 VIABIGPOWER12 ; +
+
+ + VIA 2060.8 475 VIABIGPOWER12; +
+
+ + VIA 470.4 2040 VIABIGPOWER12; +
+
+ + VIA 2060.8 2040 VIABIGPOWER12; +
+
+ + RECT 24.1 1.5 43.5 16.5 ; +
+
+ + RECT 44.1 1.5 63.5 16.5 ; +
+

+ Example 1-31  + Layer Geometries - multi-mask patterns +

+

The following example shows how to use multi-mask patterns:

+
+ + LAYER M1 ; +
+
+
RECT MASK 2 10 10 11 11 ;
+
+
+ + LAYER M2 ;     +
+
+
RECT 10 10 11 11 ;
+
+
+ + VIA 5 5 VIA1_1 ; +
+
+ + VIA MASK 031 15 15 VIA1_2 ; +
+

This indicates that the:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
M1 rect shape belongs to MASK 2
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
M2 rect shape has no mask set
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
VIA1_1 via has no mask set (all the metal and cut shapes have no mask)
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
VIA1_2 via will have:
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
No mask set for the top metal shape (topMaskNum is 0 in the 031 value)
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
MASK 1 for the bottom metal shape (botMaskNum is 1 in the 031 value)
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
The bottommost, and then the leftmost cut of the via-instance is MASK 3. The mask for the other cuts of the via-instance are derived from the via-master by "shifting" the via-master cut masks to match. So if the via-master's bottomleft cut is MASK 1, then the via-master cuts on MASK 1 become MASK 3 for the via-instance, and similarly cuts on 2 to 1, and cuts on 3 to 2. See Figure 1-43.
+
+

+   +

+
+ + LAYER M1 ; +
+
+
RECT MASK 2 10 10 11 11 ;
+
+
+ + LAYER M2 ;     +
+
+
RECT 10 10 11 11 ;
+
+
+ + VIA 5 5 VIA1_1 ; +
+
+ + VIA MASK 031 15 15 VIA1_2 ; +
+

+ Figure 1-43  + Via-master multi-mask patterns +

+


+

Macro Obstruction Statement

+
+ [OBS
{ LAYER layerName
    [EXCEPTPGNET]
    [SPACING minSpacing | DESIGNRULEWIDTH value] ;
  [WIDTH width ;]
  { PATH pt ... ;
  | PATH ITERATE pt ... stepPattern ;
  | RECT pt pt ;
  | RECT ITERATE pt pt stepPattern ;
  | POLYGON pt pt pt pt ... ;
  | POLYGON ITERATE pt pt pt pt ... stepPattern ;
  } ...
| VIA pt viaName ;
| VIA ITERATE pt viaName stepPattern ;
} ... +
+
+ END] +
+

Defines a set of obstructions (also called blockages) on the macro. You specify obstruction geometries using the layer geometry syntax. See "Layer Geometries" for syntax information.

+

Normally, obstructions block routing, except for when a pin port overlaps an obstruction (a port geometry overrules an obstruction). For example, you can define a large rectangle for a metal1 obstruction and have metal1 port in the middle of the obstruction. The port can still be accessed by a via, if the via is entirely inside the port.

+

In Figure 1-44 , the router can only access the metal1 port from the right. If the metal2 obstruction did not exist, the router could connect to the port with a metal12 via, as long as the metal1 part of the via fit entirely inside the metal1 port.

+

+ Figure 1-44  +   +

+


+

Routing can also connect to such a port on the same layer if the routing does not cross any obstruction by more than a distance of the total of minimum width plus minimum spacing before reaching the pin. This is because the port geometry is known to be "real," and any obstruction less than a distance of minimum width plus minimum spacing away from the port is not a real obstruction. If the pin is more than minimum width plus minimum spacing away from the obstruction edge, the router can only route to the pin from the layer above or below using a via (see Figure 1-45 ).

+

+ Figure 1-45  +   +

+


+

If a port is on the edge of the obstruction, a wire can be routed to the port without violations. Pins that are partially covered with obstructions or in apparent violation with nearby obstructions can limit routing options. Even though the violations are not real, the router assumes they are. In these cases, extend each obstruction to cover the pin. The router then accesses the pin as described above.

+

+ + Benefits of Combining Obstructions +

+

Significant routing time can be saved if obstructions are simplified. Especially in metal1, construct obstructions so that free tracks on the layer are accessible to the router. If most of the routing resource is obstructed, simplify the obstruction modeling by combining small obstructions into a single large obstruction. For example, use the bounding box of all metal1 objects in the cell, rather than many small obstructions, as the bounding box of the obstruction.

+

You must be sure to model via obstructions over the rest of the cell properly. A single, large cut12 obstruction over the rest of the cell can do this in some cases, as when metal1 resource exists within the cell outside the power buses.

+

+ + Rectilinear Blocks +

+

Normally, footprint descriptions in LEF are rectangular. However, it is possible to describe rectilinear footprints using an overlap layer. The overlap layer is defined specifically for this purpose and does not contain any routing.

+

Describe a rectilinear footprint by setting the SIZE of the macro as a whole to a rectangular bounding box, then defining obstructions within the bounding box on the overlap layer. The obstructions on the overlap layer indicate areas within the bounding box which no other macro should overlap. The obstructions should completely cover the rectilinear shape of the macro, but not the portion of the bounding box that might overlap with other macros during placement.

+

Note: Specify the overlaps for the macro using the OBS statement. To do this, specify a layer of type OVERLAP and then give the overlap geometries, as shown in Figure 1-46.

+

+ Figure 1-46  +   +

+



+

Macro Pin Statement

+
+ [PIN pinName
[TAPERRULE ruleName ;]
[DIRECTION {INPUT | OUTPUT [TRISTATE] | INOUT | FEEDTHRU} ;]
[USE { SIGNAL | ANALOG | POWER | GROUND | CLOCK } ;]
[NETEXPR "netExprPropName defaultNetName" ;]
[SUPPLYSENSITIVITY powerPinName ;]
[GROUNDSENSITIVITY groundPinName ;]
[SHAPE {ABUTMENT | RING | FEEDTHRU} ;]
[MUSTJOIN pinName ;]
{PORT
  [CLASS {NONE | CORE | BUMP} ;]
  {layerGeometries} ...
 END} ...
[PROPERTY propName propVal ;] ...
[PROPERTY LEF58_VIAINPINONLY
"VIAINPINONLY
; " ;]
[ANTENNAPARTIALMETALAREA value [LAYER layerName] ;] ...
[ANTENNAPARTIALMETALSIDEAREA value [LAYER layerName] ;] ...
[ANTENNAPARTIALCUTAREA value [LAYER layerName] ;] ...
[ANTENNADIFFAREA value [LAYER layerName] ;] ...
[ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} ;] ...
[ANTENNAGATEAREA value [LAYER layerName] ;] ...
[ANTENNAMAXAREACAR value LAYER layerName ;] ...
[ANTENNAMAXSIDEAREACAR value LAYER layerName ;] ...
[ANTENNAMAXCUTCAR value LAYER layerName ;] ...
+
+
+ END pinName] +
+

Defines pins for the macro. PIN statements must be included in the LEF specification for each macro. All pins, including VDD and VSS, must be specified. The first pin listed becomes the first pin in the database. List the pins in the following order:

+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
Power and ground pins
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Mustjoin pins
+
+

+ + ANTENNADIFFAREA value [LAYER layerName] +

+
Specifies the diffusion (diode) area, in micron-squared units, to which the pin is connected on a layer. If you do not specify a layer name, the value applies to all layers. For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAGATEAREA value [LAYER layerName] +

+
Specifies the gate area, in micron-squared units, to which the pin is connected on a layer. If you do not specify a layer name, the value applies to all layers. For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAMAXAREACAR value LAYER layerName +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative area ratio value on the specified layerName, using the metal area at or below the current pin layer, excluding the pin area itself. This is used to calculate the actual cumulative antenna ratio on the pin layer, or the layer above it.
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAMAXCUTCAR value LAYER layerName +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value on the specified layerName, using the cut area at or below the current pin layer, excluding the pin area itself. This is used to calculate the actual cumulative antenna ratio for the cuts above the pin layer.
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAMAXSIDEAREACAR value LAYER layerName +

+
For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value on the specified layerName, using the metal side wall area at or below the current pin layer, excluding the pin area itself. This is used to calculate the actual cumulative antenna ratio on the pin layer or the layer above it.
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} +

+
Specifies the oxide model for the pin. If you specify an ANTENNAMODEL statement, the value affects all ANTENNAGATEAREA and ANTENNA*CAR statements for the pin that follow it until you specify another ANTENNAMODEL statement. The ANTENNAMODEL statement does not affect ANTENNAPARTIAL*AREA and ANTENNADIFFAREA statements because they refer to the total metal, cut, or diffusion area connected to the pin, and do not vary with each oxide model.
Default: OXIDE1, for a new PIN statement
+
Because LEF is often used incrementally, if an ANTENNA statement occurs twice for the same oxide model, the last value specified is used.
+
For most standard cells, there is only one value for the ANTENNAPARTIAL*AREA and ANTENNADIFFAREA values per pin; however, for a block with six routing layers, it is possible to have six different ANTENNAPARTIAL*AREA values and six different ANTENNAPINDIFFAREA values per pin. It is also possible to have six different ANTENNAPINGATEAREA and ANTENNAPINMAX*CAR values for each oxide model on each pin.
+

+ Example 1-32  + Pin Antenna Model +

+

The following example describes oxide model information for pins IN1 and IN2.

+

+ MACRO GATE1 +

+
+ + PIN IN1 +
+
+
ANTENNADIFFAREA 1.0 ;             #not affected by ANTENNAMODEL
+
+
+
...
+
+
+
ANTENNAMODELOXIDE OXIDE1 ;        #OXIDE1 not required, but is good
+
+
+
                              #practice
+
+
+
ANTENNAGATEAREA 1.0 ;             #OXIDE1 gate area
+
+
+
ANTENNAMAXAREACAR 50.0 LAYER m1 ; #metal1 CAR value
+
+
+
...
+
+
+
ANTENNAMODEL OXIDE2 ;             #OXIDE2 starts here
+
+
+
ANTENNAGATEAREA 3.0 ;             #OXIDE2 gate area
+
+
+
...
+
+
+ + PIN IN2 +
+
+
ANTENNADIFFAREA 2.0 ;             #not affected by ANTENNAMODEL
+
+
+
ANTENNAPARTIALMETALAREA 2.0 LAYER m1 ;
+
+
+
...
+
+
+
#no OXIDE1 specified for this pin
+
+
+
ANTENNAMODEL OXIDE2 ;
+
+
+
ANTENNAGATEAREA 1.0 ;
+
+
+
...
+
+

+ + ANTENNAPARTIALCUTAREA value [LAYER layerName] +

+
Specifies the partial cut area above the current pin layer and inside the macro cell on the layer. For a hierarchical design, only the cut layer above the I/O pin layer is needed for partial antenna ratio calculation. If you do not specify a layer name, the value applies to all layers.
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+

+ + ANTENNAPARTIALMETALAREA value [LAYER layerName] +

+
Specifies the partial metal area connected directly to the I/O pin and the inside of the macro cell on the layer. For a hierarchical design, only the same metal layer as the I/O pin, or the layer above it, is needed for partial antenna ratio calculation. If you do not specify a layer name, the value applies to all layers.
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+
Note: Metal area is calculated by adding the pin's geometric metal area and the ANTENNAPARTIALMETALAREA value.
+

+ + ANTENNAPARTIALMETALSIDEAREA value [LAYER layerName] +

+
Specifies the partial metal side wall area connected directly to the I/O pin and the inside of the macro cell on the layer. For a hierarchical design, only the same metal layer as the I/O pin or the layer above is needed for partial antenna ratio calculation. If you do not specify a layer name, the value applies to all layers.
+
For more information on process antenna calculation, see Appendix C, "Calculating and Fixing Process Antenna Violations."
+
DIRECTION {INPUT | OUTPUT [TRISTATE] | INOUT | FEEDTHRU}
Specifies the pin type. Most current tools do not usually use this keyword. Typically, pin directions are defined by timing library data, and not from LEF.
Default: INPUT
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + +
+
+

   

+
+

INPUT

+
+

Pin that accepts signals coming into the cell.

+
+

     

+
+

OUTPUT [TRISTATE]

+
+

Pin that drives signals out of the cell. The optional TRISTATE argument indicates tristate output pins for ECL designs.

+
+

     

+
+

INOUT

+
+

Pin that can accept signals going either in or out of the cell.

+
+

      

+
+

FEEDTHRU

+
+

Pin that goes completely across the cell.

+
+

+ + GROUNDSENSITIVITY groundPinName +

+
Specifies that if this pin is connected to a tie-low connection (such as 1'b0 in Verilog), it should connect to the same net to which groundPinName is connected.
+
groundPinName must match a pin on this macro that has a USE GROUND attribute. The ground pin definition can follow later in this MACRO statement; it does not have to be defined before this pin definition. For an example, see Example 1-33.
+
Note: GROUNDSENSITIVITY is useful only when there is more than one ground pin in the macro. By default, if there is only one USE GROUND pin, then the tie-low connections are already implicitly defined (that is, tie-low connections are connected to the same net as the one ground pin).
+

+ + MUSTJOIN pinName +

+
Specifies the name of another pin in the cell that must be connected with the pin being defined. MUSTJOIN pins provide connectivity that must be made by the router. In the LEF file, each pin referred to must be defined before the referring pin. The remaining MUSTJOIN pins in the set do not need to be defined contiguously.
+
Note: MUSTJOIN pin names are never written to the DEF file; they are only used by routers to add extra connection points during routing.
+ + + + + +
+
+

 

+
+

MUSTJOIN pins have the following restrictions:

+
+ + + + + +
+
+ + * + +
+
A set of MUSTJOIN pins cannot have more than one schematic pin.
+
+
+ + + + + +
+
+ + * + +
+
Nonschematic MUSTJOIN pins must be defined after all other pins.
+
+
+
Schematic and nonschematic MUSTJOIN pins are handled in slightly different ways. For schematic MUSTJOIN pins, the pins are added to the pin set for the (unique) net associated with the ring for each component instance of the macro. The net is routed in the usual manner, and routing data for the MUSTJOIN pins are included in routing data for the net.
+
The mustjoin routing is not necessarily performed before the rest of the net. Timing relations should not be given for MUSTJOIN pins, and internal mustjoin routing is modeled as lumped capacitance at the schematic pin.
+
Nonschematic MUSTJOIN pin sets get routed in the usual manner. However, when the DEF file is outputted, routing data is reported in the NETS section of the file as follows:
+

+         MUSTJOIN compName pinName + regularWiring ; +

+
Here, compName is the component and pinName is an arbitrary pin in the set. You can also use the preceding to input prewiring for the MUSTJOIN pin, using FIXED or COVER.
+

+ + NETEXPR "netExprPropName defaultNetName" +

+
Specifies a net expression property name (such as power1 or power2) and a default net name. If netExprPropName matches a net expression property in the netlist (such as in Verilog, VHDL, or OpenAccess), then the property is evaluated, and the software identifies a net to which to connect this pin. If this property does not exist, defaultNetName is used for the net name.
+
netExprPropName must be a simple identifier in order to be compatible with other languages, such as Verilog and CDL. Therefore, it can only contain alphanumeric characters, and the first character cannot be a number. For example, power2 is a legal name, but 2power is not. You cannot use characters such as $ and !. The defaultName can be any legal DEF net name.
+

+ Example 1-33  + Net Expression and Supply Sensitivity +

+

The following statement defines sensitivity and net expression values for four pins on the macro myMac:

+

+ MACRO myMac +

+
+ + ... +
+
+ + PIN in1 +
+
+
...
+
+
+
SUPPLYSENSITIVITY vddpin1 ; #If in1 is 1'b1, use net connected to vddpin1.
                         #Note that no GROUNDSENSITIVITY is needed
                         #because only one ground pin exists.
                         #Therefore, 1'b0 implicitly means net from
                         #pin gndpin.
+
+
+
...
+
+
+ + END in1 +
+
+ +   +
+
+ + PIN vddpin1 +
+
+
...
+
+
+
NETEXPR "power1 VDD1" ; #If power1 net expression is defined in the
                     #netlist, use it to find the net connection. If
                     #not, use net VDD1.
+
+
+
...
+
+
+ + END vddpin1 +
+
+ + PIN vddpin2 +
+
+
...
+
+
+
NETEXPR "power2 VDD2" ; #If power2 net expression is defined in the
                     #netlist, use it to find the net connection.If
                      #not, use net VDD2.
+
+
+
...
+
+
+ + END vddpin2 +
+
+ + PIN gndpin +
+
+
...
+
+
+
NETEXPR "gnd1 GND" ; #If gnd1 net expression is defined in the
                 #netlist, use it to find the net connection. If
                    #not, use net GND.
+
+
+
...
+
+
+ + END gndpin +
+
+ + ... +
+

+ END myMac +

+

+ + PIN pinName +

+
Specifies the name for the library pin.
+

+ + PORT +

+
Starts a pin port statement that defines a collection of geometries that are electrically equivalent points (strongly connected). A pin can have multiple ports. Each PORT of the same PIN is considered weakly connected to the other PORTs, and should already be connected inside the MACRO (often through a resistive path).
+
Strongly connected shapes (that is, multiple shapes of one PORT) indicate that a signal router is allowed to connect to one shape of the PORT, and continue routing from another shape of the same PORT.
+
Weakly connected shapes (that is, separate PORTs of the same PIN) are assumed to be connected through resistive paths inside the MACRO that should not be used by routers. The signal router should connect to one or the other PORT, but not both.
+
Power routers should connect to every PORT statement, if there is more than one for a given PIN. For example, if a block has several PORTs on the boundary for the VSS PIN, each PORT should be connected by the power router.
+
The syntax for describing pin port statements is defined as follows:
+
{PORT
  [CLASS {NONE | CORE | BUMP} ;]
  {layerGeometries} ...
END} ...
+ + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

CLASS {NONE | CORE | BUMP}

+
+

     

+
+

 

+
+

Specifies the port type.
Default: NONE

+

A port can be one of the following:

+

BUMP--Specifies the port is a bump connection point. A bump port should only be connected by routing to a bump (normally a MACRO CLASS COVER BUMP cell).

+

CORE--Specifies the port is a core ring connection point. A core port is used only on power and ground I/O drivers used around the periphery. The core port indicates which power or ground port to connect to a core ring for the chip (inside the I/O pads).

+

NONE--Specifies the port is a default port that is connected by normal "default" routing. NONE is the default value if no PORT CLASS statement is specified.

+
+

     

+
+

layerGeometries

+
+

 

+
+

 

+
+

Defines port geometries for the pin. You specify port geometries using layer geometries syntax. See "Layer Geometries" for syntax information.

+
+

+ + PROPERTY propName propVal +

+
Specifies a numerical or string value for a pin property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+

Via In Pin Only Rule

+

You can use the via in pin only rule to specify that vias must be dropped inside the original pin shapes to connect to the pin.

+

You can create a via in pin only rule by using the following property definition:

+
+ PROPERTY LEF58_VIAINPINONLY +
+
+ "VIAINPINONLY +
+
+ ; " ; +
+

Where:

+

+ + VIAINPINONLY +

+
Specifies that vias must be dropped inside the original pin shapes to connect to the pin, and planar connection to the pin is not allowed. In some advanced nodes, the pin shapes can be extended for metal alignment purpose. However, via insertion is not allowed in that extended portion.
+

+ + SHAPE +

+
Specifies a pin with special connection requirements because of its shape.
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

ABUTMENT

+
+

Pin that goes straight through cells with a regular shape and connects to pins on adjoining cells without routing.

+
+

     

+
+

RING

+
+

Pin on a large block that forms a ring around the block to allow connection to any point on the ring. Cover macro special pins also typically have shape RING.

+
+

     

+
+

FEEDTHRU

+
+

Pin with an irregular shape with a jog or neck within the cell.

+
+

 

+
+

Figure 1-47 shows an example of an abutment and a feedthrough pin.

+

Note: When you define feedthrough and abutment pins for use with power routing, you must do the following:

+ + + + +
+

+ Figure 1-47  +   +

+



+

+ + SUPPLYSENSITIVITY powerPinName +

+
Specifies that if this pin is connected to a tie-high connection (such as 1'b1 in Verilog), it should connect to the same net to which powerPinName is connected.
+
powerPinName must match a pin on this macro that has a USE POWER attribute. The power pin definition can follow later in this MACRO statement; it does not have to be defined before this pin definition. For an example, see Example 1-33.
+
Note: SUPPLYSENSITIVITY is useful only when there is more than one power pin in the macro. By default, if there is only one USE POWER pin, then the tie-high connections are already implicitly defined (that is, tie-high connections are connected to the same net as the one power pin).
+

+ + TAPERRULE ruleName +

+
Specifies the nondefault rule to use when tapering wires to the pin.
+

+ + USE {ANALOG | CLOCK | GROUND | POWER | SIGNAL} +

+
Specifies how the pin is used. Pin use is required for timing analysis.
Default: SIGNAL
Value: Specify one of the following:
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

     

+
+

ANALOG

+
+

Pin is used for analog connectivity.

+
+

    

+
+

CLOCK

+
+

Pin is used for clock net connectivity.

+
+

    

+
+

GROUND

+
+

Pin is used for connectivity to the chip-level ground distribution network.

+
+

    

+
+

POWER

+
+

Pin is used for connectivity to the chip-level power distribution network.

+
+

      

+
+

SIGNAL

+
+

Pin is used for regular net connectivity.

+
+

Manufacturing Grid

+
+ [MANUFACTURINGGRID value ;] +
+

Defines the manufacturing grid for the design. The manufacturing grid is used for geometry alignment. When specified, shapes and cells are placed in locations that snap to the manufacturing grid.

+

+ + value +

+
Specifies the value for the manufacturing grid, in microns. value must be a positive number.
Type: Float
+

Maximum Via Stack

+
+ [MAXVIASTACK value [RANGE bottomLayer topLayer] ;] +
+

Specifies the maximum number of single-cut stacked vias that are allowed on top of each other (that is, in one continuous stack). A via is considered to be in a stack with another via if the cut of the first via overlaps any part of the cut of the second via. A double-cut or larger via interrupts the stack. For example, a via stack consisting of single via12, single via23, double-cut via34, and single via45 has a single-cut stack of height 2 for via12 and via23, and a single-cut stack of height 1 for via45 because the full stack is broken up by double-cut via34.

+

The MAXVIASTACK statement should follow the LAYER statements in the LEF file; however, it is not attached to any particular layer. You can specify only one MAXVIASTACK statement in a LEF file.

+

+ + RANGE bottomLayer topLayer +

+
Specifies a range of layers for which the maximum stacked via rule applies. If you do not specify a range, the value applies for all layers.
+

+ + value +

+
Specifies the maximum allowed number of single-cut stacked vias.
Type: Integer
+

+ Example 1-34  + Maximum Via Stack Statement +

+

The following MAXVIASTACK statement specifies that only four stacked vias are allowed on top of each other. This rule applies to all layers.

+

+ LAYER metal9 +

+
+ + ... +
+

+ END LAYER +

+

+   +

+

+ MAXVIASTACK 4 ; +

+

If you specify the following statement instead, the stacked via limit applies only to layers metal1 through metal7.

+

+ MAXVIASTACK 4 RANGE m1 m7 ; +

+

Nondefault Rule

+
+ [NONDEFAULTRULE ruleName
[HARDSPACING ;]
{LAYER layerName
   WIDTH width ;
   [DIAGWIDTH diagWidth ;]
   [SPACING minSpacing ;]
   [WIREEXTENSION value ;]
END layerName} ...
[VIA viaStatement] ...
[USEVIA viaName ;] ...
[USEVIARULE viaRuleName ;] ...
[MINCUTS cutLayerName numCuts ;] ...
[PROPERTY propName propValue ;] ... +
+
+ END ruleName] +
+

Defines the wiring width, design rule spacing, and via size for regular (signal) nets. You do not need to define cut layers for the nondefault rule.

+

Some tools have limits on the total number of nondefault rules they can store. This limit can be as low as 30; however most tools that support 90 nanometer rules (that is, LEF 5.5 and newer) can handle at least 255.

+

Note: Use the VIA statement to define vias for nondefault wiring.

+

+ + DIAGWIDTH diagWidth +

+
Specifies the diagonal width for layerName, when 45-degree routing is used.
Default: The minimum width value (WIDTH minWidth)
Type: Float, specified in microns
+

+ + HARDSPACING +

+
Specifies that any spacing values that exceed the LEF LAYER spacing requirements are "hard" rules instead of "soft" rules. By default, routers treat extra spacing requirements as soft rules that are high cost to violate, but not real spacing violations. However, in certain situations, the extra spacing should be treated as a hard, or real, spacing violation, such as when the route will be modified with a post-process that replaces some of the extra space with metal.
+

+ + LAYER layerName ... END layerName +

+
Specifies the layer for the various width and spacing values. This layer must be a routing layer. Every routing layer must have a WIDTH keyword and value specified. All other keywords are optional.
+

+ + MINCUTS cutLayerName numCuts +

+
Specifies the minimum number of cuts allowed for any via using the specified cut layer. Routers should only use vias (generated or predefined fixed vias) that have at least numCuts cuts in the via.
Type: (numCuts) Positive integer
+

+ + NONDEFAULTRULE ruleName +

+
Specifies a name for the new routing rule. The name DEFAULT is reserved for the default routing rule used by most nets. The default routing rule is constructed automatically from the LEF LAYER statement WIDTH, DIAGWIDTH, SPACING, and WIREEXTENSION values, from the LEF VIA statement (any vias with the DEFAULT keyword), and from the LEF VIARULE statement (any via rules with the DEFAULT keyword). If you specify DEFAULT for ruleName, the automatic creation is overridden, and the default routing rule is defined directly from this rule definition.
+

+ + PROPERTY propName propValue +

+
Specifies a numerical or string value for a nondefault rule property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.
+
+

+ + SPACING minSpacing +

+
Specifies the recommended minimum spacing for layerName of routes using this NONDEFAULTRULE to other geometries. If the spacing is given, it must be at least as large as the foundry minimum spacing rules defined in the LAYER definitions. Routers should attempt to meet this recommended spacing rule; however, the spacing rule can be relaxed to the foundry spacing rules along some parts of the wire if the routing is very congested, or if it is difficult to reach a pin.
+
Adding extra space to a nondefault rule allows a designer to reduce cross-coupling capacitance and noise, but a clean route with no actual foundry spacing violations will still be allowed, unless the HARDSPACING statement is specified.
Type: Float, specified in microns
+

+ + USEVIA viaName +

+
Specifies a previously defined via from the LEF VIA statement, or a previously defined NONDEFAULTRULE via to use with this routing rule.
+

+ + USEVIARULE viaRuleName +

+
Specifies a previously defined VIARULE GENERATE rule to use with this routing rule. You cannot specify a rule from a VIARULE without a GENERATE keyword.
+

+ + VIA viaStatement +

+
Defines a new via. You define nondefault vias using the same syntax as default vias. For syntax information, see "Via". All vias, default and nondefault, must have unique via names. If you define more than one via for a rule, the router chooses which via to use.
+
Note: Defining a new via is no longer recommended, and is likely to become obsolete. Instead, vias should be predefined in a LEF VIA statement, then added to the nondefault rule using the USEVIA keyword.
+

+ + WIDTH width +

+
Specifies the required minimum width for layerName.
Type: Float, specified in microns
+

+ + WIREEXTENSION value +

+
Specifies the distance by which wires are extended at vias. Enter 0 (zero) to specify no extension. Values other than 0 must be greater than or equal to half of the routing width for the layer, as defined in the nondefault rule.
Default: Wires are extended half of the routing width
Type: Float, specified in microns
+

Note: The WIREEXTENSION statement only extends wires and not vias. For 65nm and below, WIREEXTENSION is no longer recommended because it may generate some advance rule violations if wires and vias have different widths. See Illustration of WIREEXTENSION.

+

+ Example 1-35  + Nondefault Rule Statement +

+

Assume two default via rules were defined:

+

+ VIARULE via12rule GENERATE DEFAULT +

+
+ + LAYER metal1 ; +
+
+ + ... +
+

+ END via12rule +

+

+ VIARULE via23rule GENERATE DEFAULT +

+
+ + LAYER metal2 ; +
+
+ + ... +
+

+ END via23rule +

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Assuming the minimum width is 1.0 μm, the following nondefault rule creates a 1.5x minimum width wire using default spacing:
+
+

+ NONDEFAULTRULE wide1_5x +

+
+ + LAYER metal1 +
+
+
WIDTH 1.5 ; #metal1 has a 1.5 um width
+
+
+ + END metal1 +
+
+ + LAYER metal2 +
+
+
WIDTH 1.5 ;
+
+
+ + END metal2 +
+
+ + LAYER metal3 +
+
+
WIDTH 1.5 ;
+
+
+ + END metal3 +
+

+ END wide1_5x +

+

Note: If there were no default via rules, then a VIA, USEVIA, or USEVIARULE keyword would be required. Because there are none defined, the default via rules are implicitly inherited for this nondefault rule; therefore, via12rule and via23rule would be used for this routing rule.

+ +

+ NONDEFAULTRULE wide3x +

+
+ + LAYER metal1 +
+
+
WIDTH 3.0 ; #metal1 has 3.0 um width
+
+
+ + END metal1 +
+
+ + LAYER metal2 +
+
+
WIDTH 3.0 ;
+
+
+ + END metal2 +
+
+ + LAYER metal3 +
+
+
WIDTH 3.0 ;
+
+
+ + END metal3 +
+
+ + #viarule12 and viarule23 are used implicitly +
+
+ + MINCUTS cut12 2 ; #at least two-cut vias are required for cut12 +
+
+ + MINCUTS cut23 2 ; +
+

+ END wide3x +

+ +

+ NONDEFAULTRULE analog_rule +

+
+ + HARDSPACING ;     #do not let any other signal close to this one +
+
+ + LAYER metal1 +
+
+
WIDTH 1.5 ;   #metal1 has 1.5 um width
+
+
+
SPACING 3.0 ; #extra spacing of 3.0 um
+
+
+ + END metal1 +
+
+ + LAYER metal2 +
+
+
WIDTH 1.5
+
+
+
SPACING 3.0
+
+
+ + END metal2 +
+
+ + LAYER metal3 +
+
+
WIDTH 1.5
+
+
+
SPACING 3.0
+
+
+ + END metal3 +
+
+ + #Use predefined "analog vias" +
+
+ + #The DEFAULT VIARULES will not be inherited. +
+
+ + USEVIA via12_fixed_analog_via ; +
+
+ + USEVIA via_23_fixed_analog_via ; +
+

+ END analog_rule +

+

Property Definitions

+
+ [PROPERTYDEFINITIONS
[objectType propName propType [RANGE min max]
   [value | "stringValue"] 
;] ... +
+
+ END PROPERTYDEFINITIONS] +
+

Lists all properties used in the LEF file. You must define properties in the PROPERTYDEFINITIONS statement before you can refer to them in other sections of the LEF file.

+

+ + objectType +

+
Specifies the object type being defined. You can define properties for the following object types:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

    

+
+

LAYER

+
+

    

+
+

LIBRARY

+
+

     

+
+

MACRO

+
+

    

+
+

NONDEFAULTRULE

+
+

   

+
+

PIN

+
+

   

+
+

VIA

+
+

     

+
+

VIARULE

+
+

+ + propName +

+
Specifies a unique property name for the object type.
+

+ + propType +

+
Specifies the property type for the object type. You can specify one of the following property types:
+ + + + + + + + + + + + + +
+
+

   

+
+

INTEGER

+
+

    

+
+

REAL

+
+

     

+
+

STRING

+
+

+ + RANGE min max +

+
Limits real number and integer property values to a specified range. That is, the value must be greater than or equal to min and less than or equal to max.
+

+ + value | "stringValue" +

+
Assigns a numeric value or a name to a LIBRARY object type.
+
Note: Assign values to other properties in the section of the LEF file that describes the object to which the property applies.
+

+ Example 1-36  + Property Definitions Statement +

+

The following example shows library, via, and macro property definitions.

+

+ PROPERTYDEFINITIONS +

+
+ + LIBRARY versionNum INTEGER 12;
LIBRARY title STRING "Cadence96";
VIA count INTEGER RANGE 1 100;
MACRO weight REAL RANGE 1.0 100.0;
MACRO type STRING;
+
+

+ END PROPERTYDEFINITIONS +

+

Site

+
+ SITE siteName
CLASS {PAD | CORE} ;
[SYMMETRY {X | Y | R90} ... ;]
[ROWPATTERN {previousSiteName siteOrient} ... ;]
SIZE width BY height ; +
+
+ END siteName +
+

Defines a placement site in the design. A placement site gives the placement grid for a family of macros, such as I/O, core, block, analog, digital, short, tall, and so forth. SITE definitions can be used in DEF ROW statements.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

CLASS {PAD | CORE}

+
+

Specifies whether the site is an I/O pad site or a core site.

+
+

ROWPATTERN {previousSiteName siteOrient}

+
+

 

+
+

Specifies a set of previously defined sites and their orientations that together form siteName.

+
+

 

+
+

previousSiteName

+
+

  

+
+

   

+
+

Specifies the name of a previously defined site. The height of each previously defined site must be the same as the height specified for siteName, and the sum of the widths of the previously defined sites must equal the width specified for siteName.

+
+

   

+
+

siteOrient

+
+

   

+
+

   

+
+

Specifies the orientation for the previously defined site. This value must be one of N, S, E, W, FN, FS, FE, and FW. For more information on orientations, see "Specifying Orientation" in the DEF COMPONENT section.

+
+

+ Example 1-37  + Site Row Pattern Statement +

+

The following example defines three sites: Fsite; Lsite; and mySite, which consists of a pattern of Fsite and Lsite sites:

+

+ SITE Fsite +

+
+ + CLASS CORE ; +
+
+ + SIZE 4.0 BY 7.0 ; #4.0 um width, 7.0 um height +
+

+ END Fsite +

+

+ SITE Lsite +

+
+ + CLASS CORE ; +
+
+ + SIZE 6.0 BY 7.0 ; #6.0 um width, 7.0 um height +
+

+ END Lsite +

+

+ SITE mySite +

+
+ + ROWPATTERN Fsite N Lsite N Lsite FS ; #Pattern of F + L + flipped L +
+
+ + SIZE 16.0 BY 7.0 ;                    #Width = width(F + L + L) +
+

+ END mySite +

+

Figure 1-48 illustrates some DEF rows made up of mySite sites.

+

+ Figure 1-48  +   +

+


+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

SITE siteName

+
+

Specifies the name for the placement site.

+
+

SIZE width BY height

+
+

 

+
+

 

+
+

Specifies the dimensions of the site in normal (or north) orientation, in microns.

+
+

SYMMETRY {X | Y | R90}

+
+

 

+
+

 

+
+

Indicates which site orientations are equivalent. The sites in a given row all have the same orientation as the row. Generally, site symmetry should be used to control the flipping allowed inside the rows. For more information on defining symmetry, see "Defining Symmetry".

+

Possible orientations include:

+
+

 

+
+

X

+
+

Site is symmetric about the x axis. This means that N and FS sites are equivalent, and FN and S sites are equivalent. A macro with an orientation of N matches N or FS rows.

+
+

 

+
+

Y

+
+

Site is symmetric about the y axis. This means that N and FN sites are equivalent, and FS and S sites are equivalent. A macro with an orientation of N matches N or FN rows.

+
+

 

+
+

X Y

+
+

Site is symmetric about the x and y axis. This means that N, FN, FS, and S sites are equivalent. A macro with orientation N matches N, FN, FS, or S rows.

+
+

 

+
+

R90

+
+

Site is symmetric when rotated 90 degrees. Typically, this value is not used.

+
+

 

+
+

Note: Typically, a site for single-height standard cells uses symmetry Y, and a site for double-height standard cells uses symmetry X Y.

+
+

Units

+
+ [UNITS
[TIME NANOSECONDS convertFactor ;]
[CAPACITANCE PICOFARADS convertFactor ;]
[RESISTANCE OHMS convertFactor ;]
[POWER MILLIWATTS convertFactor ;]
[CURRENT MILLIAMPS convertFactor ;]
[VOLTAGE VOLTS convertFactor ;]
[DATABASE MICRONS LEFconvertFactor ;]
[FREQUENCY MEGAHERTZ convertFactor ;] +
+
+ END UNITS] +
+

Defines the units of measure in LEF. The values tell you how to interpret the numbers found in the LEF file. Units are fixed with a convertFactor for all unit types, except database units and capacitance. For more information, see "Convert Factors". Currently, other values for convertFactor appearing in the UNITS statement are ignored.

+

The UNITS statement is optional and, when used, must precede the LAYER statements.

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

CAPACITANCE PICOFARADS convertFactor

+
+

 

+
+

Interprets one LEF capacitance unit as 1 picofarad.

+
+

CURRENT MILLIAMPS convertFactor

+
+

 

+
+

Interprets one LEF current unit as 1 milliamp.

+
+

DATABASE MICRONS LEFconvertFactor

+
+

 

+
+

Interprets one LEF distance unit as multiplied when converted into database units.

+

If you omit the DATABASE MICRONS statement, a default value of 100 is recorded as the LEFconvertFactor in the database. In this case, one micron would equal 100 database units.

+
+

FREQUENCY MEGAHERTZ convertFactor

+
+

 

+
+

Interprets one LEF frequency unit as 1 megahertz.

+
+

POWER MILLIWATTS convertFactor

+
+

 

+
+

Interprets one LEF power unit as 1 milliwatt.

+
+

RESISTANCE OHMS convertFactor

+
+

 

+
+

Interprets one LEF resistance unit as 1 ohm.

+
+

TIME NANOSECONDS convertFactor

+
+

 

+
+

Interprets one LEF time unit as 1 nanosecond.

+
+

VOLTAGE VOLTS convertFactor

+
+

 

+
+

Interprets one LEF voltage unit as 1 volt.

+
+

+ + Database Units Information +

+

Database precision is relative to Standard International (SI) units. LEF values are converted to integer values in the library database as follows.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ SI unit +

+
+

+ Database precision +

+
+

1 nanosecond

+
+

= 1,000 DBUs

+
+

1 picofarad

+
+

= 1,000,000 DBUs

+
+

1 ohm

+
+

= 10,000 DBUs

+
+

1 milliwatt

+
+

= 10,000 DBUs

+
+

1 milliamp

+
+

= 10,000 DBUs

+
+

1 volt

+
+

= 1,000 DBUs

+
+

+ + Convert Factors +

+

LEF supports values of 100, 200, 400, 800, 1000, 2000, 4000, 8000, 10,000, and 20,000 for LEFconvertFactor. The following table illustrates the conversion of LEF distance units into database units.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEFconvertFactor +

+
+

+ LEF +

+
+

+ Database Units +

+
+

100

+
+

1 micron

+
+

100

+
+

200

+
+

1 micron

+
+

200

+
+

400

+
+

1 micron

+
+

400

+
+

800

+
+

1 micron

+
+

800

+
+

1000

+
+

1 micron

+
+

1000

+
+

2000

+
+

1 micron

+
+

2000

+
+

4000

+
+

1 micron

+
+

4000

+
+

8000

+
+

1 micron

+
+

8000

+
+

10,000

+
+

1 micron

+
+

10,000

+
+

20,000

+
+

1 micron

+
+

20,000

+
+

The DEF database precision cannot be more precise than the LEF database precision. This means the DEF convert factor must always be less than or equal to the LEF convert factor. The LEF convert factor must also be an integer multiple of the DEF convert factor so no round-off of DEF database unit values is required (e.g., a LEF convert factor of 1000 allows DEF convert factors of 100, 200, 1000, but not 400, 800). The following table shows the valid pairings of the LEF convert factor and the corresponding DEF convert factor.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ LEFconvertFactor +

+
+

+ Legal DEFconvertFactors +

+
+

100

+
+

100

+
+

200

+
+

100, 200

+
+

400

+
+

100, 200, 400

+
+

800

+
+

100, 200, 400, 800

+
+

1000

+
+

100, 200, 1000

+
+

2000

+
+

100, 200, 400, 1000, 2000

+
+

4000

+
+

100, 200, 400, 800, 1000, 2000, 4000

+
+

8000

+
+

100, 200, 400, 800, 1000, 2000, 4000, 8000

+
+

10,000

+
+

100, 200, 400, 1000, 2000, 10,000

+
+

20,000

+
+

100, 200, 400, 800, 1000, 2000, 4000, 10,000, 20,000

+
+

An incremental LEF should have the same value as a previous LEF. An error message warns you if an incremental LEF has a different value than what is recorded in the database.

+

Use Min Spacing

+
+ [USEMINSPACING OBS { ON | OFF } ;] +
+

Defines how minimum spacing is calculated for obstruction (blockage) geometries.

+

+ + + + + + + + + + + + + + + + + + + +
+
+

OBS {ON | OFF}

+
+

Specifies how to calculate minimum spacing for obstruction geometries (MACRO OBS shapes).
Default: ON

+
+

 

+
+

OFF

+
+

Spacing is computed to MACRO OBS shapes as if they were actual routing shapes. A wide OBS shape would use wide wire spacing rules, and a thin OBS shapes would use thin wire spacing rules.

+
+

 

+
+

ON

+
+

Spacing is computed as if the MACRO OBS shapes were min-width wires. Some LEF models abstract many min-width wires as a single large OBS shape; therefore using wide wire spacing would be too conservative.

+
+

 

+
+

Note: OFF is the recommended value to specify because it is a better abstract model for the various wide wire spacing rules that are more common at process nodes of 130nm and smaller. Certain older style LEF abstracts use ON, but it can have unexpected side effects (such as hidden DRC errors) if the abstracts are not created very carefully. You cannot mix both types of LEF abstracts at the same time.

+
+

Version

+
+ VERSION number ; +
+

Specifies which version of the LEF syntax is being used. number is a string of the form major.minor[.subMinor], such as 5.8.

+

Note: Many applications default to the latest version of LEF/DEF supported by the application (which depends on how old the application is). The latest version as described by this document is 5.8. However, a default value of 5.8 is not formally part of the language definition; therefore, you cannot be sure that all applications use this default value. Also, because the default value varies with the latest version, you should not depend on this.

+

Via

+
+ VIA viaName [DEFAULT]
{ VIARULE viaRuleName ;
     CUTSIZE xSize ySize ;
     LAYERS botMetalLayer cutLayer topMetalLayer ;
     CUTSPACING xCutSpacing yCutSpacing ;
     ENCLOSURE xBotEnc yBotEnc xTopEnc yTopEnc ;
     [ROWCOL numCutRows numCutCols ;]
     [ORIGIN xOffset yOffset ;]
     [OFFSET xBotOffset yBotOffset xTopOffset yTopOffset ;]
     [PATTERN cutPattern ;]
}
| {[RESISTANCE resistValue ;]
   {LAYER layerName ;
     { RECT [MASK maskNum] pt pt ;
     | POLYGON [MASK maskNum] pt pt pt ...;} ...
   } ...
  }
[PROPERTY propName propVal ;] ...
+
+
+ END viaName +
+

Defines two types of vias: fixed vias and generated vias. All vias consist of shapes on three layers: a cut layer and two routing (or masterslice) layers that connect through that cut layer.

+

A fixed via is defined using rectangles or polygons, and does not use a VIARULE. The fixed via name must mean the same via in all associated LEF and DEF files.

+

A generated via is defined using VIARULE parameters to indicate that it was derived from a VIARULE GENERATE statement. For a generated via, the via name is only used locally inside this LEF file. The geometry and parameters are maintained, but the name can be freely changed by applications that use this via when writing out LEF and DEF files. For example, large blocks that include generated vias as part of the LEF MACRO PIN statement can define generated vias inside the same LEF file without concern about via name collisions in other LEF files.

+

Note: Use the VIARULE GENERATE statement to define special wiring.

+

+ + CUTSIZE xSize ySize +

+
Specifies the required width (xSize) and height (ySize) of the cut layer rectangles.
Type: Float, specified in microns
+

+ + CUTSPACING xCutSpacing yCutSpacing +

+
Specifies the required x and y spacing between cuts. The spacing is measured from one cut edge to the next cut edge.
Type: Float, specified in microns
+

+ + DEFAULT +

+
Identifies the via as the default via between the defined layers. Default vias are used for default routing by the signal routers.
+
If you define more than one default via for a layer pair, the router chooses which via to use. You must define default vias between metal1 and masterslice layers if there are pins on the masterslice layers.
+
All vias consist of shapes on three layers: a cut layer and two routing (or masterslice) layers that connect through that cut layer. There should be at least one RECT or POLYGON on each of the three layers.
+

+ + ENCLOSURE xBotEnc yBotEnc xTopEnc yTopEnc +

+
Specifies the required x and y enclosure values for the bottom and top metal layers. The enclosure measures the distance from the cut array edge to the metal edge that encloses the cut array.
Type: Float, specified in microns
+
Note: It is legal to specify a negative number, as long as the resulting metal size is positive.
+

+ + LAYER layerName +

+
Specifies the layer on which to create the rectangles that make up the via. All vias consist of shapes on three layers: a cut layer and two routing (or masterslice) layers that connect through that cut layer. There should be at least one RECT or POLYGON on each of the three layers.
+

+ + LAYERS botMetalLayer cutLayer topMetalLayer +

+
Specifies the required names of the bottom routing (or masterslice) layer, cut layer, and top routing (or masterslice) layer. These layer names must be previously defined in layer definitions, and must match the layer names defined in the specified LEF viaRuleName.
+

+ + MASK maskNum +

+
Specifies which mask for double- or triple-patterning lithography is to be applied to the shapes defined in RECT or POLYGON of the via master. The maskNum variable must be a positive integer. Most applications only support values of 1, 2, or 3. For a fixed via made up of RECT or POLYGON statements, the cut-shapes should either be all colored or not colored at all. It is an error to have partially colored cuts for one via. Uncolored cut shapes should be automatically colored if the layer is a multi-mask layer.

The metal shapes with a shape per layer of the via-master do not need colors because the via instance has the mask color, but some readers will color them as mask 1 for internal consistency (see Figure 1-54 ). So a writer may write out MASK 1 for the metal shapes even if they are read in with no MASK value.
+
 
+

+ + OFFSET xBotOffset yBotOffset xTopOffset yTopOffset +

+
Specifies the x and y offset for the bottom and top metal layers. By default, the 0,0 origin of the via is the center of the cut array, and the enclosing metal rectangles. These values allow each metal layer to be offset independently. After the non-shifted via is computed, the metal layer rectangles are offset by adding the appropriate values--the x/y BotOffset values to the metal layer below the cut layer, and the x/ y TopOffset values to the metal layer above the cut layer. These offsets are in addition to any offset caused by the ORIGIN values.
Default: 0, for all values
Type: Float, specified in microns
+

+ + ORIGIN xOffset yOffset +

+
Specifies the x and y offset for all of the via shapes. By default, the 0,0 origin of the via is the center of the cut array, and the enclosing metal rectangles. After the non-shifted via is computed, all cut and metal rectangles are offset by adding these values.
Default: 0, for both values
Type: Float, specified in microns
+

+ + PATTERN cutPattern +

+
Specifies the cut pattern encoded as an ASCII string. This parameter is only required when some of the cuts are missing from the array of cuts, and defaults to "all cuts are present," if not specified.
+
For information on and examples of via cut patterns, see Creating Via Cut Patterns.
+
The cutPattern syntax uses "_" as a separator, and is defined as follows:
+
numRows_rowDefinition
  [_numRows_rowDefinition] ...
+ + + + + + + + + + + +
+
+

 

+
+

numRows

+
+

Specifies a hexadecimal number that indicates how many times to repeat the following row definition. This number can be more than one digit.

+
+

 

+
+

rowDefinition

+
+

Defines one row of cuts, from left to right.

+
+
The rowDefinition syntax is defined as follows:
+
{[RrepeatNumber]hexDigitCutPattern} ...
+ + + + + + + + + + + + + + + +
+
+

 

+
+

hexDigitCutPattern

+
+

 

+
+

 

+
+

Specifies a single hexadecimal digit that encodes a 4-bit binary value, in which 1 indicates a cut is present, and 0 indicates a cut is not present.

+
+

 

+
+

repeatNumber

+
+

Specifies a single hexadecimal digit that indicates how many times to repeat hexDigitCutPattern.

+
+
For parameterized vias (with + VIARULE ...), the cutPattern has an optional suffix added to allow three types of mask color patterns. The default mask color pattern (no suffix) is a checker-board defined as an alternating pattern starting with MASK 1 at the bottom left. Then the mask cycles left-to-right, and from bottom-to-top, as shown in Figure 1-52.The other two patterns supported are alternating rows, and alternating columns, see Figure 1-53.
+
 
+
The optional suffixes are:
+
<cut_pattern>_MR alternating rows
+
<cut_pattern>_MC alternating columns
+

+ + POLYGON pt pt pt +

+
Specifies a sequence of at least three points to generate a polygon geometry. The polygon edges must be parallel to the x axis, to the y axis, or at a 45-degree angle. Each POLYGON keyword defines a polygon generated by connecting each successive point, and then connecting the first and last points. The pt syntax corresponds to an x y coordinate pair, such as -0.2 1.0.
Type: Float, specified in microns
+

+ Example 1-38  + Via Rules +

+

The following via rule describes a non-shifted via (that is, a via with no OFFSET or ORIGIN parameters). There are two rows and three columns of via cuts. Figure 1-49 illustrates this via rule.

+
+ + VIA myVia +
+
+
VIARULE myViaRule ;
+
+
+
CUTSIZE 20 20 ; #xCutSize yCutSize
+
+
+
LAYERS metal1 cut12 metal2 ;
+
+
+
CUTSPACING 30 30 ; #xCutSpacing yCutSpacing
+
+
+
ENCLOSURE 20 50 50 20 ; #xBotEnc yBotEnc xTopEnc yTopEnc
+
+
+
ROWCOL 2 3 ;
+
+
+ + END myVia +
+

+ Figure 1-49  + Via Rule +

+


+

The same via rule with the following ORIGIN parameter shifts all of the metal and cut rectangles by 10 in the x direction, and by -10 in the y direction (see Figure 1-50 ):

+
+ + ORIGIN 10 -10 ; +
+

+ Figure 1-50  + Via Rule With Origin +

+


+

If the same via rule contains the following ORIGIN and OFFSET parameters, all of the rectangles shift by 10, -10. In addition, the top layer metal rectangle shifts by 20, -20, which means that the top metal shifts by a total of 30, -30.

+
+ + ORIGIN 10 -10 ; +
+
+ + OFFSET 0 0 20 -20 ; +
+

+ Figure 1-51  + Via Rule With Origin and Offset +

+


+

+ Example 1-39  + Via Polygon +

+

The following via definition creates a polygon geometry used by X-routing applications:

+

+ VIA myVia23 +

+
+ + LAYER metal2 ; +
+
+ + POLYGON -2.1 -1.0 -0.2 1.0 2.1 1.0 0.2 -1.0 ; +
+
+ + LAYER cut23 ; +
+
+ + RECT -0.4 -0.4 0.4 0.4 ; +
+
+ + LAYER metal3 ; +
+
+ + POLYGON -0.2 -1.0 -2.1 1.0 0.2 1.0 2.1 -1.0 ; +
+

+ END myVia23 +

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

PROPERTY propName propVal

+
+

 

+
+

Specifies a numerical or string value for a via property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.

+
+

RECT pt pt

+
+

Specify the corners of a rectangular shape in the via. The pt syntax corresponds to an x y coordinate pair, such as -0.4 -4.0. For vias used only in macros or pins, reference locations and rectangle coordinates must be consistent.
Type: Float, specified in microns

+
+

RESISTANCE resistValue

+
+

 

+
+

Specifies the lumped resistance for the via. This is not a resistance per via-cut value; it is the total resistance of the via. By default, via resistance is computed from the via LAYER RESISTANCE value; however, you can override that value with this value. resistValue is ignored if a via rule is specified, because only the VIARULE definition or a cut layer RESISTANCE value gives the resistance for generated vias.
Type: Float, specified in ohms

+

Note: A RESISTANCE value attached to an individual via is no longer recommended.

+
+

ROWCOL numCutRows numCutCols

+
+

 

+
+

Specifies the number of cut rows and columns that make up the via array.
Default: 1, for both values
Type: Positive integer, for both values

+
+

viaName

+
+

Specifies the name for the via.

+
+

VIARULE viaRulename

+
+

 

+
+

Specifies the name of the LEF VIARULE that produced this via. This indicates that the via is the result of automatic via generation, and that the via name is only used locally inside this LEF file. The geometry and parameters are maintained, but the name can be freely changed by applications that use this via when writing out LEF and DEF files.

+

viaRuleName must be specified before you define any of the other parameters, and must refer to a previously defined VIARULE GENERATE rule name. It cannot refer to a VIARULE without a GENERATE keyword.

+

Specifying the reserved via rule name of DEFAULT indicates that the via should use a previously defined VIARULE GENERATE rule with the DEFAULT keyword that exists for this routing-cut-routing (or masterslice-cut-masterslice) layer combination. This makes it possible for an IP block user to use existing via rules from the normal LEF technology section instead of requiring it to locally create its own via rules for just one LEF file.

+
+

+ Example 1-40  + Generated Via Rule +

+

The following via definition defines a generated via that is used only in this LEF file.

+

+ VIA myBlockVia +

+
+ + VIARULE DEFAULT ;                   #Use existing VIARULE GENERATE rule with
                                     #the DEFAULT keyword
+
+
+
CUTSIZE 0.1 0.1 ;                #Cut is 0.1 x 0.1 um
+
+
+
LAYERS metal1 via12 metal2 ;     #Bottom metal, cut, and top metal layers
+
+
+
CUTSPACING 0.1 0.1 ;             #Space between cut edges is 0.1 um
+
+
+
ENCLOSURE 0.05 0.01 0.01 0.05 ; #metal1 enclosure is 0.05 in x, 0.01 in y
                                 #metal2 enclosure is 0.01 in x, 0.05 in y
+
+
+
ROWCOL 1 2 ;                     #1 row, 2 columns = 2 cuts
+
+

+ END myBlockVia +

+

+ Example 1-41  + Parameterized via cut-mask pattern +

+

The following example shows a VIARULE parameterized via:

+
+ + VIA myParamVia1 +
+
+
VIARULE myGenVia1          CUTSIZE 0.4 0.4
+
+
+
LAYERS M1 VIA1 M2          CUTSPACING 0.4 0.4
+
+
+
ENCLOSURE 0.4 0 0 0.4      ROWCOL 3 4         #3 rows, 4 columns
+
+
+
PATTERN 2_F_1_D;                              #1 cut in top row is missing
+
+

Example of a parameterized via checker-board cut-mask pattern for a 3-mask layer with 2 missing cuts. For parameterized vias (with VIARULE ...), the mask of the cuts are pre-defined as an alternating pattern starting with MASK 1 at the bottom left. The mask cycles from left-to-right and bottom-to-top are shown.

+

+ Figure 1-52  + Parameterized via cut-mask pattern using PATTERN +

+


+ +

 

+

+ Figure 1-53  + Parameterized via cut-mask pattern using Suffixes +

+


+

+ Example 1-42  + Fixed-via with pre-colored cut shapes +

+

The following example shows a fixed-via with pre-colored cut shapes:

+
+ + VIA myVia1 +
+
+
LAYER m1 ;
+
+
+
RECT -0.4 -0.2 1.2 0.2 ;           #no mask, some readers will set to mask 1
+
+
+
LAYER via1 ;
+
+
+
RECT MASK 1 -0.2 -0.2 0.2 0.2 ;   #first cut on mask 1
+
+
+
RECT MASK 2 0.6 -0.2 1.0 0.2 ;   #second cut on mask 2
+
+
+
LAYER m2 ;
+
+
+
RECT -0.2 -0.4 1.0 0.4 ;           #no mask, some readers will set to mask 1
+
+
+ + END myVia1 +
+

For a fixed via made up of RECT or POLYGON statements, the cut shapes must all be colored or not colored at all. If the cuts are not colored, they will be automatically colored in a checkerboard pattern as described above for parameterized vias. Each via-cut with the same lower-left Y value is considered one row, and each via in one row is a new column. For common "array" style vias with no missing cuts, this coloring is a good one. For vias that do not have a row and column structure, or are missing cuts this coloring may not be good (see Figure 1-54 ). If the metal layers having only one shape per layer are not colored, some applications will color them to MASK 1 for internal consistency, even though the via-master metal shape colors are not really used by LEF/DEF via instances. For multiple disjoint metal shapes, it is highly recommended to provide proper color.

+

+ Figure 1-54  + Fixed-via with pre-colored cut shapes +

+


+

See the MACRO Layer Geometries statement to see how a via-instance uses these via-master mask values.

+

Via Rule

+
+ VIARULE viaRuleName
LAYER layerName ;
   DIRECTION {HORIZONTAL | VERTICAL} ;
   [WIDTH minWidth TO maxWidth ;]
LAYER layerName ;
   DIRECTION {HORIZONTAL | VERTICAL} ;
   [WIDTH minWidth TO maxWidth ;]
{VIA viaName ;} ...
[PROPERTY propName propVal ;] ... +
+
+ END viaRuleName +
+

Defines which vias to use at the intersection of special wires of the same net.

+

Note: You should only use VIARULE GENERATE statements to create a via for the intersection of two special wires. In earlier versions of LEF, VIARULE GENERATE was not complete enough to cover all situations. In those cases, a fixed VIARULE (without a GENERATE keyword) was sometimes used. This is no longer required.

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

DIRECTION {HORIZONTAL | VERTICAL}

+
+

 

+
+

Specifies the wire direction. If you specify a WIDTH range, the rule applies to wires of the specified DIRECTION that fall within the range. Otherwise, the rule applies to all wires of the specified DIRECTION on the layer.

+
+

LAYER layerName

+
+

 

+
+

Specifies the routing or masterslice layers for the top or bottom of the via.

+
+

PROPERTY propName propVal

+
+

 

+
+

Specifies a numerical or string value for a via rules property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.

+
+

VIA viaName

+
+

Specifies a previously defined via to test for the current via rule. The first via in the list that can be placed at the location without design rule violations is selected. The vias must all have exactly three layers in them. The three layers must include the same routing or masterslice layers as listed in the LAYER statements of the VIARULE, and a cut layer that is between the two routing or masterslice layers.

+
+

VIARULE viaRuleName

+
+

 

+
+

Specifies the name to identify the via rule.

+
+

WIDTH minWidth TO maxWidth

+
+

 

+
+

Specifies a wire width range. If the widths of two intersecting special wires fall within the wire width range, the VIARULE is used. To fall within the range, the widths must be greater than or equal to minWidth and less than or equal to maxWidth.

+

Note: WIDTH is defined by wire direction, not by layer. If you specify a WIDTH range, the rule applies to wires of the specified DIRECTION that fall within the range.

+
+

+ Example 1-43  + Via Rule Statement +

+

In the following example, whenever a metal1 wire with a width between 0.5 and 1.0 intersects a metal2 wire with a width between 1.0 and 2.0, the via generation code attempts to put a via12_1 at the intersection first. If the via12_1 causes a DRC violation, a via12_2 is then tried. If both fail, the default behavior from a VIARULE GENERATE statement for metal1 and metal2 is used.

+

+ VIARULE viaRule1 +

+
+ + LAYER metal1 ; +
+
+
DIRECTION HORIZONTAL ;
+
+
+
WIDTH 0.5 TO 1.0 ;
+
+
+ + LAYER metal2 ; +
+
+
DIRECTION VERTICAL ;
+
+
+
WIDTH 1.0 TO 2.0 ;
+
+
+ + VIA via12_1 ; +
+
+ + VIA via12_2 ; +
+

+ END viaRule1 +

+

Via Rule Generate

+
+ VIARULE viaRuleName GENERATE [DEFAULT]
LAYER routingLayerName ;
   ENCLOSURE overhang1 overhang2 ;
   [WIDTH minWidth TO maxWidth ;]
LAYER routingLayerName ;
   ENCLOSURE overhang1 overhang2 ;
   [WIDTH minWidth TO maxWidth ;]
LAYER cutLayerName ;
   RECT pt pt ;
   SPACING xSpacing BY ySpacing ;
   [RESISTANCE resistancePerCut ;] +
+
+ END viaRuleName +
+

Defines formulas for generating via arrays. You can use the VIARULE GENERATE statement to cover special wiring that is not explicitly defined in the VIARULE statement.

+

Rather than specifying a list of vias for the situation, you can create a formula to specify how to generate the cut layer geometries.

+

Note: Any vias created automatically from a VIARULE GENERATE rule that appear in the DEF NETS or SPECIALNETS sections must also appear in the DEF VIA section.

+

 

+ + + + + +
+
+

DEFAULT

+
+

Specifies that the via rule can be used to generate vias for the default routing rule. There can only be one VIARULE GENERATE DEFAULT for a given routing-cut-routing (or masterslice-cut-masterslice) layer combination.

+
+

+ Example 1-44  + Via Rule Generate Default +

+

The following example defines a rule for generating vias for the default routing or masterslice rule:

+

+ VIARULE via12 GENERATE DEFAULT +

+
+ + LAYER m1 ; +
+
+ + ENCLOSURE 0.03 0.01 ; #2 sides need >= 0.03, 2 other sides need >= 0.01 +
+
+ + LAYER m2 ; +
+
+ + ENCLOSURE 0.05 0.01 ; #2 sides need >= 0.05, 2 other sides need >= 0.01 +
+
+ + LAYER cut12 ; +
+
+ + RECT -0.1 -0.1 0.1 0.1 ; # cut is .20 by .20 +
+
+ + SPACING 0.40 BY 0.40 ;   #center-to-center spacing +
+
+ + RESISTANCE 20 ;          #ohms per cut +
+

+ END via12 +

+

 

+ + + + + + + + +
+
+

ENCLOSURE overhang1 overhang2

+
+

 

+
+

Specifies that the via must be covered by metal on two opposite sides by at least overhang1, and on the other two sides by at least overhang2 (see Figure 1-55 ). The via generation code then chooses the direction of overhang that best maximizes the number of cuts that can fit in the via.

+

Note: If there are also ENCLOSURE rules for the cut layer that apply to a given via, the via generation code will choose the ENCLOSURE rule with values that match the ENCLOSURE in VIARULE GENERATE. If there is no such match, the via generation code will ignore the ENCLOSURE in VIARULE GENERATE and choose which ENCLOSURE rule is best in LAYER ENCLOSURE values that apply to the same width via being generated. This means that only ENCLOSURE statements in LAYER CUT are honored, and one of them will be used.

+

For example, VIARULE GENERATE ENCLOSURE 0.2 0.0 combined with a LAYER CUT rule of ENCLOSURE 0.2 0.0, ENCLOSURE 0.1 0.1 and ENCLOSURE 0.15 0.15 WIDTH 0.5, would mean that any via inside a wire with width that is greater than or equal to 0.5 wide, 0.15 0.15 enclosure values are used. Otherwise, 0.2 0.0 enclosure values are used. See the LAYER CUT ENCLOSURE statement for more information on handling multiple enclosure rule.
Type: Float, specified in microns

+
+

+ Figure 1-55  + Overhang +

+


+

+ Example 1-45  + Via Rule Generate Enclosure +

+

The following example describes a formula for generating via cuts:

+

+ VIARULE via12 GENERATE +

+
+ + LAYER m1 ; +
+
+
ENCLOSURE 0.05 0.01 ; #2 sides must be >=0.05, 2 other sides must be >=0.01
+
+
+
WIDTH 0.2 TO 100.0 ;  #for m1, between 0.2 to 100 microns wide
+
+
+ + LAYER m2 ; +
+
+
ENCLOSURE 0.05 0.01 ; #2 sides must be >=0.05, 2 other sides must be >=0.01
+
+
+
WIDTH 0.2 TO 100.0 ; #for m2, between 0.2 to 100 microns wide
+
+
+ + LAYER cut12 +
+
+ + RECT -0.07 -0.07 0.07 0.07 ; #cut is .14 by .14 +
+
+ + SPACING 0.30 BY 0.30 ;       #center-to-center spacing +
+

+ END via12 +

+

The cut layer SPACING ADJACENTCUTS statement can override the VIARULE cut layer SPACING statements. For example, assume the following cut layer information is also defined in the LEF file:

+

+ LAYER cut12 +

+
+ + ...
SPACING 0.20 ADJACENTCUTS 3 WITHIN 0.22 ;
...
+
+

The 0.20 μm edge-to-edge spacing in the ADJACENTCUTS statement is larger than the VIARULE GENERATE example spacing of 0.16 (0.30 − 0.14). Whenever the VIARULE GENERATE rule creates a via that is larger than 2x2 cuts (that is, 2x3, 3x2, 3x3 and so on), the 0.20 spacing from the ADJACENTCUTS statement is used instead.

+

Note: The spacing in VIARULE GENERATE is center-to-center spacing, whereas the spacing in ADJACENTCUTS is edge-to-edge.

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

GENERATE

+
+

Defines a formula for generating the appropriate via.

+
+

LAYER cutLayerName

+
+

Specifies the cut layer for the generated via.

+
+

LAYER routingLayerName

+
+

 

+
+

 

+
+

Specifies the routing (or masterslice) layers for the top and bottom of the via.

+
+

RECT pt pt

+
+

 

+
+

 

+
+

 

+
+

Specifies the location of the lower left contact cut rectangle.

+
+

RESISTANCE resistancePerCut

+
+

 

+
+

 

+
+

Specifies the resistance of the cut layer, given as the resistance per contact cut.
Default: The resistance value in the LAYER (Cut) statement
Type: Float

+
+

SPACING xSpacing BY ySpacing

+
+

 

+
+

 

+
+

Defines center-to-center spacing in the x and y dimensions to create an array of contact cuts.The number of cuts of an array in each direction is the most that can fit within the bounds of the intersection formed by the two special wires. Cuts are only generated where they do not violate stacked or adjacent via design rules.

+

Note: This value can be overridden by the SPACING ADJACENTCUTS value in the cut layer statement.

+
+

VIARULE viaRuleName

+
+

 

+
+

 

+
+

Specifies the name for the rule.

+

The name DEFAULT is reserved and should not be used for any via rule name. In the LEF and DEF VIA definitions that use generated via parameters, the reserved DEFAULT name indicates the via rule with the DEFAULT keyword.

+
+

WIDTH minWidth TO maxWidth

+
+

 

+
+

 

+
+

Specifies a wire width range to use for this VIARULE. This VIARULE can be used for wires with a width greater than or equal to (>=) minWidth, and less than or equal to (<=) maxWidth for the given routing (or masterslice) layer. If no WIDTH statement is specified, the VIARULE can be used for all wire widths on the given routing (or masterslice) layer.

+
+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/OptimizingLEFTechnology.html b/lefdef/doc/lefdefref/OptimizingLEFTechnology.html new file mode 100644 index 00000000..a945c4fe --- /dev/null +++ b/lefdef/doc/lefdefref/OptimizingLEFTechnology.html @@ -0,0 +1,1140 @@ + + + + + LEF/DEF 5.8 Language Reference -- B + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

B 

+

Optimizing LEF Technology for Place and Route

+

This appendix contains the following information.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Overview
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Guidelines for Routing Pitch
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Guidelines for Wide Metal Spacing
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Guidelines for Wire Extension at Vias
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Guidelines for Default Vias
+
+ + +

Overview

+

This appendix provides guidelines for defining the optimized technology section in the LEF file to get the best performance using Cadence® place-and-route tools.

+

For the following guidelines, the preferred routing direction for metal1 and all other odd metal layers is horizontal. The preferred routing direction for metal2 and all other even metal layers is vertical. Standard cells are arranged in horizontal rows.

+

This appendix discusses the following LEF statements.

+
+ LAYER layerName
TYPE ROUTING ;
PITCH distance ;
WIDTH defWidth ;
SPACING minSpacing [RANGE minwidth maxwidth] ;
WIREEXTENSION value ; +
+
+ END layerName +
+
+ VIA viaName DEFAULT
[TOPSTACKONLY]
LAYER layerName RECT pt pt ; ... +
+
+ END viaName +
+
+ SPACING
SAMENET
   layerName layerName minSpace [STACK] ; +
+
+ END SPACING +
+

Guidelines for Routing Pitch

+

The following is a summary for choosing the right pitch for an existing design library. For detailed information on determining routing pitch, refer to the Cadence Abstract Generator User Guide.

+

+ Pitch Measurement

+

+

DESIGN RULE No. 1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

W.1

+
+

Minimum width of metal1 = 0.23 μm

+
+

S.1

+
+

Minimum space between two metal1 regions = 0.23 μm

+
+

W.2

+
+

Minimum and maximum width of cut1 = 0.26 μm

+
+

E.1

+
+

Minimum extension of metal1 beyond cut1 = 0.01 μm

+
+

W.3

+
+

Minimum width of metal3 = 0.28 μm

+
+

S.2

+
+

Minimum space between two metal3 regions = 0.28 μm

+
+

W.4

+
+

Minimum and maximum width of cut2 = 0.26 μm

+
+

E.2

+
+

Minimum extension of metal1 beyond cut2 = 0.01 μm

+
+


+

Although the minimum metal1 routing pitch is 0.485um from the design rule, you should use 0.56um instead, to match the metal3 routing pitch in the same preferred direction.

+

LEF Construct No. 1

+
+ LAYER metal1
TYPE ROUTING ;
WIDTH 0.23 ;
SPACING 0.23 ;
PITCH 0.56 ;
DIRECTION HORIZONTAL ; +
+
+ END metal1 +
+
+   +
+
+ LAYER metal3
TYPE ROUTING ;
WIDTH 0.28 ;
SPACING 0.28 ;
PITCH 0.56 ;
DIRECTION HORIZONTAL ; +
+
+ END metal3 +
+

Recommendations

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
Align the routing pitch for metal1 and metal2, with the pins inside the standard cells.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Have uniform routing pitch in the same preferred direction. The pitch ratio should be 2 - 3 or 1 - 2. It is better to define the metal1 pitch larger than necessary in order to achieve a 1 - 1 ratio because the metal1 width is usually smaller the metal2 and metal3 widths.
+
+

Pitch Recommendations for Library Development

+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
The height of the cell should be the even multiple of the metal1 pitch, and the width of the cell should be the even multiple of the metal2 pitch.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The blockage modeling, especially for metal1, should be simplified as much as possible. For example, it is very common for the entire area within the cell boundary to be obstructed in metal1, so use a single rectangular blockage instead of many small blockages.
+
+

Guidelines for Wide Metal Spacing

+

The SPACING statement in the LEF LAYER section is applied to both regular and special wires. You can use the Cadence® ultra router option frouteUseRangeRule to determine which objects to check against the SPACING RANGE statement. The default checks both pin and obstruction.

+

DESIGN RULE No. 2

+ + + + + + + + + +
+
+

S.1

+
+

Minimum space between two metal1 regions = 0.23 μm

+
+

S.2

+
+

Minimum space between metal lines with one or both metal line width and length are greater than 10um = 0.6 μm

+
+


+

LEF CONSTRUCT No. 2

+
+ LAYER metal1
WIDTH 0.23 ;
SPACING 0.23 ;
SPACING 0.6 RANGE 10.002 1000 ; +
+
+ END metal1 +
+

Guidelines for Wire Extension at Vias

+

The following guidelines are for wire extension at vias.

+

DESIGN RULE No. 3

+ + + + + + + + + + + + + + + + + +
+
+

W.1

+
+

Minimum and maximum width of cut1 = 0.26 μm

+
+

W.2

+
+

Minimum width of metal2 = 0.28 μm

+
+

E.1

+
+

Minimum extension of metal2 beyond cut1 = 0.01 μm

+
+

E.2

+
+

Minimum extension of metal2 end-of-line region beyond cut1 = 0.06 μm

+
+


+

LEF CONSTRUCT No. 3

+
+ LAYER metal2
TYPE ROUTING ;
WIDTH 0.28 ;
SPACING 0.28 ;
PITCH 0.56 ;
WIREEXTENSION 0.19 ;
DIRECTION VERTICAL ; +
+
+ END metal2 +
+

 

+
+ VIA via23 DEFAULT
LAYER metal2 ;
    RECT -0.14 -0.14 0.14 0.14 ; # Use square via
LAYER cut2 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal3 ;
    RECT -0.14 -0.14 0.14 0.14 ; # Use square via +
+
+ END via23 +
+

Recommendations

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Use the WIREEXTENSION statement instead of defining multiple vias because the width of the metal2 in cut1 is the same as the default routing width of the metal2 layer.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The WIREEXTENSION statement only extends wires and not vias. For 65nm and below, WIREEXTENSION is no longer recommended because it may generate some advance rule violations if wires and vias have different widths.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Define the DEFAULT VIA as a square via.
+
+

Guidelines for Default Vias

+

The following guidelines are for default vias.

+

DESIGN RULE No. 4

+ + + + + + + + + + + + + + + + + +
+
+

W.1

+
+

Minimum width of metal1 = 0.23 μm

+
+

W.2

+
+

Minimum and maximum width of cut1 = 0.26 μm

+
+

E.1

+
+

Minimum extension of metal1 beyond cut1 = 0.01 μm

+
+

E.2

+
+

Minimum extension of metal1 end-of-line region beyond cut1 = 0.06 μm

+
+


+

LEF CONSTRUCT No. 4 (Case B)

+

+   +

+
+ LAYER metal1
TYPE ROUTING ;
WIDTH 0.23 ;
SPACING 0.23 ;
PITCH 0.56 ;
DIRECTION HORIZONTAL ; +
+
+ END metal1 +
+

+   +

+
+ VIA via12_H DEFAULT
LAYER metal1 ;
    RECT -0.19 -0.14 0.19 0.14 ; # metal1 end-of-line
    extension 0.6 in both directions
LAYER cut1 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal2 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via12_H +
+

+   +

+
+ VIA via12_V DEFAULT
LAYER metal1 ;
    RECT -0.14 -0.19 0.14 0.19 ; # metal1 end-of-line
    extension 0.6 in both directions
LAYER cut1 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal2 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via12_V +
+

Recommendations

+
+ + + + + +
+
+ + ParagraphBullet + +
+
If the width of the end-of-line metal extension is the same as the default metal routing width, as in Case A, use the WIREEXTENSION statement in the LEF LAYER section, and define a square via in the DEFAULT VIA section.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
If the width of the end-of-line metal extension is the same as the width of the via metal, as in Case B, define one horizontal DEFAULT VIA and one vertical DEFAULT VIA to cover the required metal extension area in both pregerred and non-preferred routing directions. Do not use the WIREEXTENSION statement in the LEF LAYER section.
+
+

Guidelines for Stack Vias (MAR Vias) and Samenet Spacing

+

The following guidelines are for stack vias (minimum area rule) and SAMENET SPACING.

+

DESIGN RULE No. 5

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

W.1

+
+

Minimum width of metal2 = 0.28 μm

+
+

W.2

+
+

Minimum and maximum width of cut2 = 0.26 μm

+
+

E.1

+
+

Minimum extension of metal2 beyond cut2 = 0.01 μm

+
+

A.1

+
+

Minimum area of metal2 = 0.2025 μm

+
+

C.1

+
+

Cut2 can be fully or partially stacked on cut1, contact or any combination

+
+

W.1

+
+

Minimum width of metal3 = 0.28 μm

+
+

W.2

+
+

Minimum and maximum width of cut3 = 0.26 μm

+
+

E.1

+
+

Minimum extension of metal2 beyond cut3 = 0.01 μm

+
+

A.1

+
+

Minimum area of metal3 = 0.2025 μm

+
+

C.1

+
+

Cut3 can be fully or partially stacked on cut2, cut1, contact or any combination

+
+


+

LEF CONSTRUCT No. 5

+

+   +

+
+ VIA via23_stack_north DEFAULT
LAYER metal2 ;
    RECT -0.14 -0.14 0.14 0.6 ; # MAR = 0.28 x 0.74
LAYER cut2 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal3 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via23_stack_north +
+

+   +

+
+ VIA via23_stack_south DEFAULT
LAYER metal2 ;
    RECT -0.14 -0.6 0.14 0.14 ; # MAR = 0.28 x 0.74
LAYER cut2 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal3 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via23_stack_south +
+

+   +

+
+ VIA via34_stack_east DEFAULT
LAYER metal3 ;
    RECT -0.14 -0.14 0.6 0.14 ; # MAR = 0.28 x 0.74
LAYER cut3 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal4 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via34_stack_east +
+

+   +

+
+ VIA via34_stack_west DEFAULT
LAYER metal3 ;
    RECT -0.6 -0.14 0.14 0.14 ; # MAR = 0.28 x 0.74
LAYER cut3 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal4 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via34_stack_west +
+

Recommendations

+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
If vias are stackable, create the TOPSTACKONLY vias with a rectangular shape blocking only one neighboring grid for both sides of the preferred routing direction. In other words, one north oriented and one south oriented for vertical-preferred routing layers, and one east oriented and one west oriented for horizontal-preferred routing layers.
+
+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
The STACK keyword in the SAMENETSPACING statements only allows vias to be fully overlapped (stacked) by SROUTE commands. To allow vias to be partially overlapped, set the environment variable SROUTE.ALLOWOVERLAPINSTACKVIA to TRUE.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The metal1 layer does not require a MAR via because all metal1 pins should satisfy the minimum area rules.
+
+

Example of an Optimized LEF Technology File

+
+ VERSION 5.8 ; +
+
+ BUSBITCHARS "[]" ;
+
+
+ UNITS
DATABASE MICRONS 100 ; +
+
+ END UNITS +
+
+   +
+
+ LAYER metal1
TYPE ROUTING ;
WIDTH 0.23 ;
SPACING 0.23 ;
SPACING 0.6 RANGE 10.02 1000 ;
PITCH 0.56 ;
DIRECTION HORIZONTAL ; +
+
+ END metal1 +
+
+   +
+
+ LAYER cut1
TYPE CUT ; +
+
+ END cut1 +
+
+   +
+
+ LAYER metal2
TYPE ROUTING ;
WIDTH 0.28 ;
SPACING 0.28 ;
SPACING 0.6 RANGE 10.02 1000 ;
PITCH 0.56 ;
WIREEXTENSION 0.19 ;
DIRECTION VERTICAL ; +
+
+ END metal2 +
+
+   +
+
+ LAYER cut2
TYPE CUT ; +
+
+ END cut2 +
+
+   +
+
+ LAYER metal3
TYPE ROUTING ;
WIDTH 0.28 ;
SPACING 0.28 ;
SPACING 0.6 RANGE 10.02 1000 ;
PITCH 0.56 ;
WIREEXTENSION 0.19 ;
DIRECTION HORIZONTAL ; +
+
+ END metal3 +
+
+   +
+
+ LAYER cut3
TYPE CUT ; +
+
+ END cut3 +
+
+   +
+
+ LAYER metal4
TYPE ROUTING ;
WIDTH 0.28 ;
SPACING 0.28 ;
SPACING 0.6 RANGE 10.02 1000 ;
PITCH 0.56 ;
WIREEXTENSION 0.19 ;
DIRECTION VERTICAL ; +
+
+ END metal4 +
+
+   +
+
+ LAYER cut4
TYPE CUT ; +
+
+ END cut4 +
+

+   +

+
+ LAYER metal5
TYPE ROUTING ;
WIDTH 0.28 ;
SPACING 0.28 ;
SPACING 0.6 RANGE 10.02 1000 ;
PITCH 0.56 ;
WIREEXTENSION 0.19 ;
DIRECTION HORIZONTAL ; +
+
+ END metal5 +
+

+   +

+
+ LAYER cut5
TYPE CUT ; +
+
+ END cut5 +
+

+   +

+
+ LAYER metal6
TYPE ROUTING ;
WIDTH 0.44 ;
SPACING 0.46 ;
SPACING 0.6 RANGE 10.02 1000 ;
PITCH 1.12 ;
DIRECTION VERTICAL ; +
+
+ END metal6 +
+
+   +
+

### start DEFAULT VIA ###

+
+ VIA via12_H DEFAULT
LAYER metal1 ;
    RECT -0.19 -0.14 0.19 0.14 ; # metal1 end-of-line ext 0.6
LAYER cut1 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal2 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via12_H +
+
+   +
+
+ VIA via12_V DEFAULT
LAYER metal1 ;
    RECT -0.14 -0.19 0.14 0.19 ; # metal1 end-of-line ext 0.6
LAYER cut1 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal2 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via12_V +
+

+   +

+
+ VIA via23 DEFAULT
LAYER metal2 ;
    RECT -0.14 -0.14 0.14 0.14 ;
LAYER cut2 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal3 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via23 +
+

+   +

+
+ VIA via34 DEFAULT
LAYER metal3 ;
    RECT -0.14 -0.14 0.14 0.14 ;
LAYER cut3 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal4 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via34 +
+
+   +
+
+ VIA via45 DEFAULT
LAYER metal4 ;
    RECT -0.14 -0.14 0.14 0.14 ;
LAYER cut4 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal5 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via45 +
+

+   +

+
+ VIA via56_H DEFAULT
LAYER metal5 ;
    RECT -0.24 -0.19 0.24 0.19 ;
LAYER cut5 ;
    RECT -0.18 -0.18 0.18 0.18 ;
LAYER metal6 ;
    RECT -0.27 -0.27 0.27 0.27 ; +
+
+ END via56_H +
+
+   +
+
+ VIA via56_V DEFAULT
LAYER metal5 ;
    RECT -0.19 -0.24 0.19 0.24 ;
LAYER cut5 ;
    RECT -0.18 -0.18 0.18 0.18 ;
LAYER metal6 ;
    RECT -0.27 -0.27 0.27 0.27 ; +
+
+ END via56_V +
+

### end DEFAULT VIA ###

+

+   +

+

### start STACK VIA ###

+
+ VIA via23_stack_north DEFAULT
LAYER metal2 ;
    RECT -0.14 -0.14 0.14 0.6 ; # MAR = 0.28 x 0.74
LAYER cut2 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal3 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via23_stack_north +
+

+   +

+
+ VIA via23_stack_south DEFAULT
LAYER metal2 ;
    RECT -0.14 -0.6 0.14 0.14 ; # MAR = 0.28 x 0.74
LAYER cut2 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal3 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via23_stack_south +
+

+   +

+
+ VIA via34_stack_east DEFAULT
LAYER metal3 ;
    RECT -0.14 -0.14 0.6 0.14 ; # MAR = 0.28 x 0.74
LAYER cut3 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal4 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via34_stack_east +
+
+   +
+
+ VIA via34_stack_west DEFAULT
LAYER metal3 ;
    RECT -0.6 -0.14 0.14 0.14 ; # MAR = 0.28 x 0.74
LAYER cut3 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal4 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via34_stack_west +
+

+   +

+
+ VIA via45_stack_north DEFAULT
LAYER metal4 ;
    RECT -0.14 -0.14 0.14 0.6 ; # MAR = 0.28 x 0.74
LAYER cut4 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal5 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via45_stack_north +
+
+   +
+
+ VIA via45_stack_south DEFAULT
LAYER metal4 ;
    RECT -0.14 -0.6 0.14 0.14 ; # MAR = 0.28 x 0.74
LAYER cut4 ;
    RECT -0.13 -0.13 0.13 0.13 ;
LAYER metal5 ;
    RECT -0.14 -0.14 0.14 0.14 ; +
+
+ END via45_stack_south +
+

+   +

+
+ VIA via56_stack_east DEFAULT
LAYER metal5 ;
    RECT -0.19 -0.19 0.35 0.19 ; # MAR = 0.38 x 0.54
LAYER cut5 ;
    RECT -0.18 -0.18 0.18 0.18 ;
LAYER metal6 ;
    RECT -0.27 -0.27 0.27 0.27 ; +
+
+ END via56_stack_east +
+
+   +
+
+ VIA via56_stack_west DEFAULT
LAYER metal5 ;
    RECT -0.35 -0.19 0.19 0.19 ; # MAR = 0.38 x 0.54
LAYER cut5 ;
    RECT -0.18 -0.18 0.18 0.18 ;
LAYER metal6 ;
    RECT -0.27 -0.27 0.27 0.27 ; +
+
+ END via56_stack_west +
+

### end STACK VIA ###

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/PAE.html b/lefdef/doc/lefdefref/PAE.html new file mode 100644 index 00000000..6e4c67bb --- /dev/null +++ b/lefdef/doc/lefdefref/PAE.html @@ -0,0 +1,3002 @@ + + + + + LEF/DEF 5.8 Language Reference -- C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

C 

+

Calculating and Fixing Process Antenna Violations

+

This appendix describes process antenna violations and how you can use the router to correct them. It includes the following sections:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Overview
+
+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
Calculating Antenna Ratios
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Checking for Antenna Violations
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Using Antenna Diode Cells
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Using DiffUseOnly
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Calculations for Hierarchical Designs
+
+

Overview

+

During deep submicron wafer fabrication, gate damage can occur when excessive static charges accumulate and discharge, passing current through a gate. If the area of the layer connected directly to the gate or connected to the gate through lower layers is large relative to the area of the gate and the static charges are discharged through the gate, the discharge can damage the oxide that insulates the gate and cause the chip to fail. This phenomenon is called the process antenna effect (PAE).

+

To determine the extent of the PAE, the router calculates the area of the layer relative to the area of the gates connected to it, or connected to it through lower layers. The number it calculates is called the antenna ratio. Each foundry sets a maximum allowable antenna ratio for the chips it fabricates.

+

For example, assume a foundry sets a maximum allowable antenna ratio of 500. If a net has two input gates that each have an area of 1 square micron, any metal layers that connect to the gates and have an area larger than 1,000 square microns have process antenna violations because they would cause the antenna ratio to be higher than 500:

+


+

To tell the router the values to use when it calculates the antenna ratio, you set antenna keywords in the LEF and DEF files. The router measures potential damage caused by PAE by checking the ratio it calculates against the values specified by the antenna keywords. When it finds a net whose antenna ratio for a specified layer exceeds the maximum allowed value for that layer, it finds a process antenna violation and attempts to fix it using one or both of the following methods:

+ + +

LEF can specify several types of antenna ratios, including ratios for PAE damage on one layer only and ratios calculated by adding accumulated damage on several layers. In addition, LEF can specify ratios based on the area of the metal wires or the cut area of vias.

+

What Are Process Antennas?

+

In a chip manufacturing process, metal layers are built up, layer by layer, starting with the first-level metal layer (usually referred to as metal1). Next, the metal1-metal2 vias are created, then the second-level metal layer, then metal2-metal3 vias, and so on.

+

On each metal layer, metal is initially deposited so it covers the entire chip. Then, the unneeded portions of the metal are removed by etching, typically in plasma (charged particles).

+

Figure C-1 shows a section of an imaginary chip after the unneeded metal from metal2 is removed.

+

+ Figure C-1  +   +

+


+

In the figure,

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Gate areas for transistors are labelled Gk, where k is a sequential number starting with 1.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Wire segments are labelled Ni,j
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
N signifies that the wire segment is an electrically connected node
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
i specifies the metal layer to which the node belongs
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
j is a sequential number for the node on that metal layer
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Nodes are labelled so that all pieces of the metal geometry on layer metali that are electrically connected by conductors at layers below metali belong to the same node. For example, the two metal2 wire segments that belong to node N2,1 are electrically connected to gates G1, G2, and G3 by a piece of wire on metal1 (labelled N1,2).
+
+

Thick oxide insulates the already-fabricated structures below metal2, preventing them from direct contact with the plasma. The metal2 geometries, however, are exposed to the plasma, and collect charge from it. As the metal geometries collect charge, they build up voltage potential.

+

Because the metal geometries collect charge during the metallization process, they are referred to as process antennas. In general, the more area covered by the metal geometries that are exposed to the plasma (that is, the larger the process antennas), the more charge they can collect.

+

In Figure C-1 , note the following:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Node N1,1 is electrically connected to gates G1 and G2.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Node N1,2 is electrically connected to gate G3.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Node N2,1 (node N2,1 has two pieces of metal) is electrically connected to gates G1, G2, and G3.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Node N1,3 and node N2,2 are electrically connected to gate G4.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Node N1,4 and node N2,3 are electrically connected to the diffusion (diode).
+
+

What Is the Process Antenna Effect (PAE)?

+

If the voltage potential across the gate oxide becomes large enough to cause current to flow across the gate oxide, from the process antennas to the gates to which the process antennas are electrically connected, the current can damage the gate oxide. The process antenna effect (PAE) is the term used to describe the build-up of charge and increase in voltage potential. The larger the total gate area that is electrically connected to the process antennas on a specific layer, the more charge the connected gates can withstand.

+

In the imaginary chip in Figure C-1 , if the current were to flow, the following would happen, as a result of the node-gate connections:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The charge collected by process antennas on nodes N1,1, N1,2, and N2,1 would be discharged through one or more of gates G1, G2, and G3.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The charge collected by process antennas on nodes N1,3 and N2,2 would be discharged through gate G4.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The charge collected by process antennas on node N1,4 and N2,3 would be discharged through the diode.
+
+

What Is the Antenna Ratio?

+

Because the total gate area that is electrically connected to a node (and therefore connected to the process antennas) determines the amount of charge from the process antennas the electrically connected gates can withstand, and because the size of the process antennas connected to the node determines how much charge the antennas collect, it is useful to calculate the ratio of the size of the process antennas on a node to the size of the gate area that is electrically connected to the node. This is the antenna ratio. The greater the antenna ratio, the greater the potential for damage to the gate oxide.

+

If you check a chip and obtain an antenna ratio greater than the threshold specified by the foundry, gate damage is likely to occur.

+

Figure C-2 shows the same section of the imaginary chip as the previous figure. The shaded areas in this figure represent the process antennas on node N2,1 and the gates to which they connect: gates G1, G2, and G3. The shaded gates discharge the electricity collected by the process antennas on node N2,1.

+

+ Figure C-2  +   +

+


+

What Can Be Done to Improve the Antenna Ratio?

+

If there is an alternate path for the current to flow, the charge on the node can be discharged through the alternate path before the voltage potential reaches a level that damages the gate. For example, a Zener diode, which allows current to flow in the reverse direction when the reverse bias reaches a specified breakdown voltage, provides an alternate path, and helps avoid building up so much charge at the node that the charge is discharged through the gate oxide. Diffusion features that form the output of a logic gate (source and drain of transistors) can provide such an alternate discharge path.

+

Routers typically use two methods to decrease the antenna ratio:

+ + +

Both of these methods supply alternate paths for the current. For details about how to specify antenna diode cells, see "Using Antenna Diode Cells".

+

Using Process Antenna Keywords in the LEF and DEF Files

+

You tell the router the values to use for the gate, diffusion, and metal areas by setting values for process antenna keywords in the LEF and DEF files for your design. You also tell the router the values to use for the threshold process antenna ratios by setting the keywords.

+

The following table lists LEF version 5.5 antenna keywords.

+

 

+ + + + + + + + + + + + + + + + + + + + + +
+
+

+ If the keyword
ends with ...
+

+
+

+ It refers to ... +

+
+

+ Examples +

+
+

area

+
+

Area of the gates or diffusion

+

Measured in square microns

+
+

ANTENNADIFFAREA
ANTENNAGATEAREA

+
+

factor

+
+

Area multiplier used for the metal nodes

+
+

ANTENNAAREAFACTOR
ANTENNASIDEAREAFACTOR

+

Note: Use DIFFUSEONLY if you want the multiplier to apply only when connecting to diffusion. For more information, see "Using DiffUseOnly".

+
+

ratio

+
+

Relationship the router is calculating

+

Cum is used in keywords for cumulative antenna ratio.

+
+

ANTENNAAREARATIO
ANTENNASIDEAREARATIO
ANTENNADIFFAREARATIO
ANTENNADIFFSIDEAREARATIO
ANTENNACUMAREARATIO
ANTENNACUMSIDEAREARATIO
ANTENNACUMDIFFAREARATIO
ANTENNACUMDIFFSIDEAREARATIO

+
+

Calculating Antenna Ratios

+

Tools should calculate antenna ratios using one of the following models:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The partial checking model
+
+
Using this model, you calculate damage to gates by process antennas on one layer. For example, if you use the partial checking model to calculate the PAE referred to a gate from metal3, you do not consider any potential damages referred to that gate from metallization steps on metal1 or metal2.
+
You use this model to calculate a partial antenna ratio (PAR). A PAR tells you if any single metallization step is likely to inflict damage to a gate.
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The cumulative checking model
+
+
This model is more conservative than the partial checking model. It adds damage to a gate caused by the PAE referred to the gate from each metallization step, starting from metal1 up to the layer that is being checked. For example, if you use the cumulative checking model to calculate the PAE referred to a gate from metal3, you add the PAR from the relevant antenna areas on metal1, metal2, and metal3.
+
You use this model to calculate a cumulative antenna ratio (CAR). A CAR adds the damages on successive layers together to accumulate them as the layers are built up.
+

Calculating the Antenna Area

+

The area used to model the charge-collecting ability of a node is called the antenna area. The router calculates the antenna area for one of the following areas:

+ + +

The height of each side is taken from the THICKNESS statement for that layer.

+

Figure C-3 shows drawn and side areas.

+

+ Figure C-3  +   +

+


+

Antenna Area Factor

+

You can increase or decrease the calculated antenna area by specifying an antenna area factor in the LEF file.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Use ANTENNAAREAFACTOR to adjust the calculation of the drawn area.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Use ANTENNASIDEAREAFACTOR to adjust the calculation of the side area.
+
+

The default value of both factors is 1.

+

The final ratio check can be scaled (that is, made more or less pessimistic) by using the ANTENNAAREAFACTOR or ANTENNASIDEAREAFACTOR values that are used to multiply the final PAR and CAR values.

+

Note: The LEF and DEF ANTENNA values are always unscaled values; only the final ratio-check is affected by the scale factors.

+

Calculating a PAR

+

The general PAR(m1) equation for a single layer is calculated as:

+

The existing ANTENNAAREAFACTOR statement is shown as metalFactor for the metal area. It has no effect on the diff_area, gate_area, or cut_area shown. Likewise, the ANTENNAAREADIFFREDUCEPWL statement is shown as diffMetalReduceFactor, the ANTENNAAREAMINUSDIFF statement is shown as minusDiffFactor, and the ANTENNAGATEPLUSDIFF statement is shown as plusDiffFactor. For cut layer, the ratio equation illustrates the effect of an ANTENNAAREAFACTOR cutFactor statement as metalFactor. If there is no preceding ANTENNAAREAFACTOR statement, the metalFactor value defaults to 1.0.

+

For single layer rules, the PAR value is compared to ANTENNA[SIDE]AREARATIO and/or ANTENNADIFF[SIDE]AREARATIO, as appropriate. For cumulative layer rules, the CAR values is compared to ANTENNACUM[SIDE]AREARATIO and/or ANTENNACUMDIFF[SIDE]AREARATIO, as appropriate.

+

The following example uses a simplified formula to calculate a PAR, without including the various area factors:

+


+

PAR(Ni,j, Gk) is the partial antenna ratio for node j on metali with respect to gate Gk, where Gk is electrically connected to node Ni,j by layer i or below.

+

Area(Ni,j) is the drawn or side area of node Ni,j.

+

C(Ni,j) is the set of gates Gk that are electrically connected to Ni,j through the layers below metali.

+

Area(Gk) is the drawn or side area of gate Gk. (The reason to include the Gk parameter for PAR is to maintain uniformity with the notation for CAR.)

+

Note: For a specified node Ni,j, the PAR(Ni,j, Gk) for all gates Gk that are connected to the node Ni,j using metali or below are identical.

+

Calculations for PAR on the First Metal Layer

+

Figure C-4 shows a section of an imaginary chip after the first metal layer is processed.

+

+ Figure C-4  +   +

+


+

To calculate PAR(Ni,j, Gk) for node N1,1, a node on the first metal layer, with respect to gate G1, use the following formula:

+


+

Because gates G1 and G2 both connect to node N1,1, the following statement is true:

+
+ PAR(N1,1,G1) = PAR(N1,1,G2) +
+

To calculate PAR for node N1,2, another node on the first metal layer, with respect to gate G3, use the following formula:

+


+

To calculate PAR(Ni,j, Gk) for node N1,3, another node on the first metal layer, with respect to gate G4, use the following formula:

+


+

Calculations for PAR on the Second Metal Layer

+

Figure C-5 shows the chip after the second metal layer is processed.

+

+ Figure C-5  +   +

+


+

N2,1 consists of two pieces of metal on the second layer that are electrically connected at this step in the fabrication process. Therefore, to calculate PAR(N2,1,G1), you must add the area of both pieces together.

+

To calculate PAR(Ni,j,Gk) for node N2,1, a node on the second metal layer, with respect to gate G1, use the following formula:

+


+

As on the first layer,

+

+ PAR(N2,1,G1) = PAR(N2,1,G2) = PAR(N2,1,G3) +

+

Calculations for PAR on the Third Metal Layer

+

Figure C-6 shows the chip after the third metal layer is processed.

+

+ Figure C-6  +   +

+


+

To calculate PAR(Ni,j, Gk)for node N3,1, a node on the third metal layer, with respect to gate G1, use the following formula:

+


+

As on the prior layers,

+

+ PAR(N3,1,G1) = PAR(N3,1,G2) = PAR(N3,1,G3) = PAR(N3,1,G4) +

+

Calculations for PAR on the Fourth Metal Layer

+

Figure C-7 shows the chip after the fourth metal layer is processed.

+

+ Figure C-7  +   +

+


+

To calculate PAR(Ni,j, Gk) for the fourth metal layer, use the following formula:

+


+

As on the prior layers,

+

+ PAR(N4,1,G1) = PAR(N4,1,G2) = PAR(N4,1,G3) = PAR(N4,1,G4) +

+

Note: Node N4,1 is connected to the diffusion layer through the output diode. After the router calculates the antenna ratio, it compares its calculations to the area of the diffusion, instead of the area of the gates.

+

Calculating a CAR

+

To calculate a CAR, the router adds the PARs for all the relevant nodes on the specified or lower metal layers that are electrically connected to a gate. Therefore, CAR(Ni,j,Gk) designates the cumulative damage to gate Gk by metallization steps up to the current level of metal, i.

+

To create a single accumulative model that combines both metal and cut damage into one model, specify the ANTENNACUMROUTINGPLUSCUT statement for the layer, so that:

+
CAR(mi) = PAR(mi) + CAR(vi-1)
+

This means that the CAR from the cut layer below this metal layer is accumulated, instead of the CAR from the metal layer below this metal layer.

+

Note: In practice, the router only needs to keep track of the worst-case CAR; however, the CARs for all of the gates shown in Figure C-8 are described here.

+

The router calculates an antenna ratio with respect to a node-gate pair. To find the CAR for the node Ni,j - gate Gk pair, you trace the path of the current between gate Gk and node Ni,j and add the PAR with respect to gate Gk for the all nodes in the path between the first metal layer and layer i that you can trace back to Gk.

+

+ Figure C-8  +   +

+


+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
+ In Figure C-8 , node N1,2 is not shaded because it was not electrically connected to G2 when metal1 was processed. That is, because the charge accumulated on N1,2 when metal1 was processed cannot damage gate G1, the router does not include it in the calculations for CAR(N2,1,G1).

Another way to explain this is to say that the PAE from node N1,2 with respect to gate G2 is 0.
+
+
+

Calculations for CAR on the First Metal Layer

+

Figure C-9 shows the chip after the first metal layer is processed.

+

+ Figure C-9  +   +

+


+

In the figure above,

+

CAR(N1,1,G1) = PAR(N1,1,G1)

+

CAR(N1,1,G2) = PAR(N1,1,G2)

+

Because PAR(N1,1,G1) equals PAR(N1,1,G2), CAR(N1,1,G1) equals CAR(N1,1,G2).

+

Note: In general, CAR(Ni,j,Gk) equals CAR(Ni,j,Gk') if the two gates Gk and Gk' are electrically connected to the same node on metal1, the lowest layer that is subject to the process antenna effect.

+

Calculations for CAR on the Second Metal Layer

+

Figure C-10 shows the chip after the second metal layer is processed.

+

+ Figure C-10  +   +

+


+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
+ In the figure above, N1,2 is not included in the calculations for CAR(N2,1,G1) because it was not electrically connected to G1 when metal1 was processed. That is, because the charge accumulated on N1,2 when metal1 was processed cannot damage gate G1, the router does not include it in the calculations for CAR(N2,1,G1). +
+
+

In the figure above,

+

CAR(N2,1,G1) = PAR(N1,1,G1) + PAR(N2,1,G1)

+

CAR(N2,1,G2) = PAR(N1,1,G2) + PAR(N2,1,G2)

+

Gates G1 and G2 have the same history with regard to PAE because they are connected to the same piece of metal1, so they have the same CAR for any node on a specified layer:

+

CAR(N2,1,G1) = CAR(N2,1,G2)

+

Calculations for CAR on the Third Metal Layer

+

Figure C-11 shows the chip after the third metal layer is processed.

+

+ Figure C-11  +   +

+


+

+ + Gate G1 +

+

In the figure above,

+

CAR(N3,1,G1) = PAR(N1,1,G1) + PAR(N2,1,G1) + PAR(N3,1,G1)

+

+ + Gate G2 +

+

In the figure above,

+

CAR(N3,1,G2) = PAR(N1,1,G2) + PAR(N2,1,G2) + PAR(N3,1,G2)

+

CAR(N3,1,G1) equals CAR(N3,1,G2) because gates G1 and G2 are both electrically connected to the same node, N1,1, on metal1 and therefore have the same history with regard to PAE. Therefore, the formula for CAR(N3,2, G2) is CAR(N3,1,G1) = CAR(N3,1,G2)

+

+ + Gates G3 and G4 +

+

Gates G3 and G4 are not connected to the same node on metal1 and therefore do not have the same history with regard to PAE. Therefore, the CAR(N3,1,G3) and CAR(N3,1,G4) do not necessarily equal CAR(N3,1,G1) or CAR(N3,1,G2).

+

In Figure C-12 , the relevant areas for calculating CAR for gate G3 are shaded.

+

+ Figure C-12  +   +

+


+

In the figure above,

+

CAR(N3,1,G3) = PAR(N1,2,G3) + PAR(N2,1,G3) + PAR(N3,1,G3)

+

In Figure C-13 , the relevant areas for calculating CAR for gate G4 are shaded.

+

+ Figure C-13  +   +

+


+

In the figure above,

+

CAR(N3,1,G4) = PAR(N1,3,G4) + PAR(N2,2,G4) + PAR(N3,1,G4)

+

Calculations for CAR on the Fourth Metal Layer

+

The following figure shows the chip after the fourth metal layer is processed.

+

Note: Node N4,1 is connected to the diffusion layer through the output diode. After the router calculates the antenna ratio, it compares its calculations to the area of the diffusion, instead of the area of the gates.

+

+ + Gates G1 and G2 +

+

In Figure C-14 , the relevant areas for calculating CAR(N4,1,G1) and CAR(N4,1,G2) are shaded.

+

+ Figure C-14  +   +

+


+

In the figure above,

+

CAR(N4,1,G1) = PAR(N1,1,G1) + PAR(N2,1,G1)
  + PAR(N
3,1,G1) + PAR(N4,1,G1)

+

CAR(N4,1,G2) = PAR(N1,1,G2) + PAR(N2,1,G2)
  + PAR(N
3,1,G2) + PAR(N4,1,G2)

+

CAR(N4,1,G1) = CAR(N4,1,G2)

+

+ + Gate G3 +

+

In Figure C-15 , the relevant areas for calculating CAR(N4,1,G3) are shaded.

+

+ Figure C-15  +   +

+


+

In the figure above,

+

CAR(N4,1,G3) = PAR(N1,2,G3) + PAR(N2,1,G3)
  + PAR(N
3,1,G3) + PAR(N4,1,G3)

+

CAR(N4,1,G3) does not equal CAR(N4,1,G1) or CAR(N4,1,G2) because it is not connected to the same node on metal1.

+

+ + Gate G4 +

+

In Figure C-16 , the relevant areas for calculating CAR(N4,1,G4) are shaded.

+

+ Figure C-16  +   +

+


+

In the figure above,

+

CAR(N4,1,G4) = PAR(N1,3,G4) + PAR(N2,2,G4)
  + PAR(N
3,1,G4) + PAR(N4,1,G4)

+

CAR(N4,1,G4) does not equal CAR(N4,1,G1), CAR(N4,1,G2), or CAR(N4,1,G3) because it is not connected to the same node on metal1.

+

Calculating Ratios for a Cut Layer

+

The router calculates damage from a cut layer separately from damage from a metal layer. Calculations for the cut layers do not use side area modelling.

+

Calculating a PAR on a Cut Layer

+

The general PAR(ci) equation for a single layer is calculated as:

+

The existing ANTENNAAREAFACTOR statement is shown as cutFactor for the metal area. Likewise, the ANTENNAAREADIFFREDUCEPWL statement is shown as diffAreaReduceFactor, the ANTENNAAREAMINUSDIFF statement is shown as minusDiffFactor, and the ANTENNAGATEPLUSDIFF statement is shown as plusDiffFactor. For cut layer, the ratio equation illustrates the effect of an ANTENNAAREAFACTOR cutFactor statement as metalFactor. If there is no preceding ANTENNAAREAFACTOR statement, the metalFactor value defaults to 1.0.

+

In the figures and text that follow,

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Cij is the cut layer between metali and metalj.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
NCij,k specifies an electrically connected node on Cij.
+
+ +

Figure C-17 shows the chip after the C12 process step.

+

+ Figure C-17  +   +

+


+

In the figure above,

+


+

As in calculations on the metal layers,

+

PAR(NC12,1,G1) = PAR(NC12,1,G2)

+

Calculating a CAR on a Cut Layer

+

As explained in "Calculating Antenna Ratios":

+
CAR(ci) = PAR(ci) + CAR(ci-1)
+

To create a single accumulative model that combines both metal and cut damage into one model, specify the ANTENNACUMROUTINGPLUSCUT statement for the layer, so that:

+
CAR(ci) = PAR(ci) + CAR(mi-1)
+

This means that the CAR from the metal layer below this cut layer is accumulated, instead of the CAR from the cut layer below this cut layer.

+

Figure C-18 shows the chip after the C23 process step.

+

+ Figure C-18  +   +

+


+

The router calculates the CAR with respect to gate G3 after the cut C23 process step as follows:

+


+

Figure C-19 shows the chip after the C34 process step.

+

+ Figure C-19  +   +

+


+

The router calculates the CAR with respect to gate G3 after the cut C34 process step as follows:

+


+

Checking for Antenna Violations

+

For each metal layer, the router performs several antenna checks, using the keywords and values specified in the LEF or DEF file. The router can perform the following four types of antenna checks, depending on the keywords you set in the LEF file:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Area Ratio Check
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Side Area Ratio Check
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Cumulative Area Ratio Check
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Cumulative Side Area Ratio Check
+
+

Area Ratio Check

+

The area ratio check compares the PAR for each layer to the value of the ANTENNAAREARATIO or ANTENNADIFFAREARATIO.

+

The router calculates the PAR as follows:

+


+

According to the formula above, the area ratio check finds the PAR for node Ni,j with respect to gate Gk by dividing the drawn area of the node by the area of the gates that are electrically connected to it. The final PAR is multiplied by the ANTENNAAREAFACTOR (the default value for the factor is 1) and compared to the ANTENNAAREARATIO or ANTENNADIFFAREARATIO. If the PAR is greater than the ANTENNAAREARATIO or ANTENNADIFFAREARATIO specified in the LEF file, the router finds a process antenna violation and attempts to fix it.

+

The link between PAR(Ni,j,Gk) and a PAE violation at node Ni,j depends on whether node Ni,j is connected to a piece of diffusion, as follows:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
If there is no connection from node Ni,j to a diffusion area through the current and lower layers, a violation occurs when the PAR is greater than the ANTENNAAREARATIO.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
If there is a connection from node Ni,j to a diffusion area through current and lower layers, a violation occurs when the PAR is greater than the ANTENNADIFFAREARATIO.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
If there is a connection from node Ni,j to a diffusion area through current and lower layers, and ANTENNADIFFAREA is not specified for an output or inout pin, the value is 0.
+
+

Side Area Ratio Check

+

The side area ratio check compares the PAR computed based on the side area of the nodes for each layer to the value of the ANTENNASIDEAREARATIO or ANTENNADIFFSIDEAREARATIO.

+

The router calculates the PAR as follows:

+


+

According to the formula above, the area ratio check finds the PAR for node Ni,j with respect to gate Gk by dividing the side area of the node by the area of the gates that are electrically connected to Ni,j. The final PAR is multiplied by the ANTENNASIDEAREAFACTOR (the default value for the factor is 1) and compared to the ANTENNASIDEAREARATIO or ANTENNADIFFSIDEAREARATIO. If the PAR is greater than the ANTENNASIDEAREARATIO or ANTENNADIFFSIDEAREARATIO specified in the LEF file, the router finds a process antenna violation and attempts to fix it.

+

The link between PAR(Ni,j,Gk) and a PAE violation at node Ni,j depends on whether node Ni,j is connected to a piece of diffusion, as follows:

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
If there is a connection to the diffusion area through current and lower layers, and ANTENNADIFFAREA is not specified for an output or inout pin, the value is 0.
+
+

Cumulative Area Ratio Check

+

The cumulative area ratio check compares the CAR to the value of ANTENNACUMAREARATIO or ANTENNACUMDIFFAREARATIO. The CAR is equal to the sum of the PARs of all nodes on the same or lower layers that are electrically connected to the gate.

+

Note: When you use CARs, you can ignore metal layers by not specifying the CAR keywords for those layers. For example, if you want to check metal1 using a PAR and the remaining metal layers using a CAR, you can define ANTENNAAREARATIO or ANTENNASIDEAREARATIO for metal1, and ANTENNACUMAREARATIO or ANTENNACUMSIDEAREARATIO for the remaining metal layers.

+

The cumulative area ratio check finds the CAR for node Ni,j with respect to gate Gk by adding the PARs for all layers of metal, from the current layer down to metal1, for all nodes that are electrically connected Gk. The final CAR is multiplied by the ANTENNAAREAFACTOR (the default value for the factor is 1) and compared to the ANTENNACUMAREARATIO or ANTENNACUMDIFFAREARATIO. If the CAR is greater than the ANTENNACUMAREARATIO or ANTENNACUMDIFFAREARATIO specified in the LEF file, the router finds a process antenna violation and attempts to fix it.

+

The link between CAR(Ni,j,Gk) and a PAE violation at node Ni,j depends on whether node Ni,j is connected to a piece of diffusion, as follows:

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
If there is a connection to a diffusion area through current and lower layers, and ANTENNADIFFAREA is not specified for an output or inout pin, the value is 0.
+
+

Cumulative Side Area Ratio Check

+

The cumulative side area ratio check compares the CAR to the value of the ANTENNACUMSIDEAREARATIO or ANTENNACUMDIFFAREARATIO.

+

Note: When you use CARs, you can ignore metal layers by not specifying the CAR keywords for those layers. For example, if you want to check metal1 using a PAR and the remaining metal layers using a CAR, you can define ANTENNAAREARATIO or ANTENNASIDEAREARATIO for metal1, and ANTENNACUMAREARATIO or ANTENNACUMSIDEAREARATIO for the remaining metal layers.

+

The cumulative side area ratio check finds the CAR for node Ni,j with respect to gate Gk by adding the PARs for all layers of metal, from the current layer down to metal1, for all nodes that are electrically connected Gk. The final CAR is multiplied by the ANTENNASIDEAREAFACTOR (the default value for the factor is 1) and compared to the ANTENNACUMSIDEAREARATIO or ANTENNACUMDIFFAREARATIO. If the CAR is greater than the ANTENNACUMSIDEAREARATIO or ANTENNACUMDIFFAREARATIO specified in the LEF file, the router finds a process antenna violation and attempts to fix it.

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
If there is a connection to a diffusion area through current and lower layers, and ANTENNACUMDIFFAREA is not specified for an output or inout pin, the value is 0.
+
+

Cut Layer Process Antenna Model Examples

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Example 1
+
+
To create the following process antenna rule for a cut layer via1:
+
+
cut_area / (gate_area + 2.0 x diff_area) <= 10
+
+
Cut layers should include the following information:
+
+
ANTENNAGATEPLUSDIFF 2.0 ;
+
+
+
ANTENNADIFFAREARATIO 10 ;
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Example 2
+
+
Assume the following process antenna rule:
+
+
cut_area x PWL(diff_area) / gate_area <= 10
+
+
This rule uses a cumulative model with diffusion area reduction function, where:
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
PAR = (cut_area x diffReduceFactor) / gate_area <= 10
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
diffReduceFactor = 1.0 for diff_area < 0.1μm2
+
+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
diffReduceFactor = 0.2 for diff_area >= 0.1 μm2
+
+
Cut layers should include the following information:
+
+
ANTENNAAREADIFFREDUCEPWL ( ( 0.0 1.0 ) ( 0.0999 1.0 ) ( 0.1 0.2 )
+
+
+
( 1000.0 0.2 ) ) ;
+
+
+
ANTENNACUMDIFFAREARATIO 10 ;
+
+

For examples of models that use the ANTENNACUMROUTINGPLUSCUT and the ANTENNAAREAMINUSDIFF rules, see the examples below in "Routing Layer Process Antenna Models."

+

Routing Layer Process Antenna Model Examples

+

The following process antenna rule examples use the topology shown in Figure C-20. In this figure, there are two polysilicon gates (G1, G2), one diffusion connection (D1), contacts (C), and via (V1, V2) and metal (M1, M2, M3) shapes. Note that M1,2 is one LEF PIN, and M1,3 is a different LEF PIN. The other metal is routing.

+

+ Figure C-20  +
+

+

The following area values are also used for the examples:

+ + + + + + + + + + + + + + + + + + + + + +
+
+

G1 = 1.0

+
+

D1 = 0.5

+
+

M2,1 = 4.0

+
+

G2 = 2.0

+
+

M1,1 = 1.0

+
+

M2,2 = 5.0

+
+

All Cs = 0.1

+
+

M1,2 = 2.0

+
+

M3,1 = 6.0

+
+

All Vs = 0.1

+
+

M1,3 = 3.0

+
+

M3,2 = 9.0

+
+

Example 1

+

The following process antenna rule combines cut area and metal area into one cumulative rule:

+
ratio = (metal _area + 10 x cut_area) / gate_area
+ + +

Every routing layer should include the following information:

+

+ ANTENNACUMROUTINGPLUSCUT ; +

+

+ ANTENNACUMDIFFAREARATIO ( ( 0.0 1000 ) ( 0.0999 1000 ) ( 0.1 4000 ) +

+
+ + ( 1000.0 4000 ) ) ; +
+

+ ANTENNADIFFAREARATIO ( ( 0.0 5000 ) ( 0.0999 500 ) ( 0.1 1500 ) +

+
+ + ( 1000.0 1500 ) ) ; +
+

Every cut layer should include the following information:

+

+ ANTENNAAREAFACTOR 10 ; #10.0 x cut area +

+

+ ANTENNACUMROUTINGPLUSCUT ; +

+

+ ANTENNACUMDIFFAREARATIO ( ( 0.0 1000 ) ( 0.0999 1000 ) ( 0.1 4000 ) +

+
+ + ( 1000.0 4000 ) ) ; +
+

+ ANTENNADIFFAREARATIO ( ( 0.0 5000 ) ( 0.0999 500 ) ( 0.1 1500 ) +

+
+ + ( 1000.0 1500 ) ) ; +
+

Note: ANTENNAAREARATIO and ANTENNACUMAREARATIO are not required because the *DIFFAREARATIO statements are checked, even if diff_area is equal to 0.

+

For gate G1, the PARs and CARs are computed as follows:

+ +
The polysilicon and contact cut layer and shapes are not normally visible in LEF and DEF. If the contact cut area should be included, its CAR value should be included with LEF PIN A, using appropriate ANTENNA statements. The M1 PIN area should not be included because M1 area is a PIN shape in the LEF and will be added in by tools reading LEF. Therefore, there should be two antenna statements for LEF PIN A, either:
+
+ + ANTENNAGATEAREA 1.0 LAYER M1 ; +
+
+ + ANTENNAMAXCUTCAR 1.0 LAYER C ; +
+
or:
+
+ + ANTENNAGATEAREA 1.0 LAYER M1 ; +
+
+ + ANTENNAMAXAREACAR 1.0 LAYER M1 ; +
+
Because the M1 PIN area is not included in the MAXAREACAR value, both of sets of statements give the same results. For more details, see "Calculations for Hierarchical Designs."
+
Similarly, the LEF PIN B should have values, such as either:
+
+ + ANTENNAGATEAREA 2.0 LAYER M1 ; +
+
+ + ANTENNADIFFAREA 0.5 LAYER M1 ; +
+
+ + ANTENNAMAXCUTCAR 1.0 LAYER C ; #only C2 affects G2; C3 does not +
+
or:
+
+ + ANTENNAGATEAREA 2.0 LAYER M1 ; +
+
+ + ANTENNADIFFAREA 0.5 LAYER M1 ; +
+
+ + ANTENNAMAXAREACAR 1.0 LAYER M1 ; #only C2 affects G2; C3 does not +
+ + +
+ + + + + +
+
+ 4. +
+
diode_area = 0, single-layer PWL(0) = 500, check PAR(M1,G1) = 2.0 <= 500,
cum-layer PWL(0) = 1000,
therefore check CAR(M1,G1) = 3.0 <= 1000
+
+ + +
+ + + + + +
+
+ 7. +
+
diode_area = 0, single-layer PWL(0) = 500, check PAR(V1,G1) = 2.0 <= 500,
cum_layer PWL(0) = 1000,
therefore check CAR(V1,G1) = 5.0 <= 1000
+
+ + +
+ + + + + +
+
+ 10. +
+
diode_area = 0.5, single-layer PWL(0.5) = 1500, check PAR(M2,G1) = 3.0 <= 1500,
cum_layer PWL(0.5) = 4000,
therefore check CAR(M2, G1) = 8.0 <= 4000
+
+ + +
+ + + + + +
+
+ 13. +
+
diode_area = 0.5, single-layer PWL(0.5) = 1500, check PAR(V2,G1) = 0.67 <= 1500,
cum_layer PWL(0.5) = 4000,
therefore check CAR(V2, G1) = 8.67 <= 4000
+
+ + +
+ + + + + +
+
+ 16. +
+
diode_area = 0.5, single-layer PWL(0.5) = 1500, check PAR(M3,G1) = 5 <= 1500,
cum_layer PWL(0.5) = 4000,
therefore check CAR(M3,G1) = 13.67 <= 4000
+
+

Example 2

+

The following cumulative rule is the same as the rule in Example 1, except it also subtracts the diff_area factor. Only the cumulative model is used.

+
ratio = [(metal_area + 10 x cut_area) - (100 x diff_area)] / gate_area
+

Every routing layer should include the following information:

+

+ ANTENNACUMROUTINGPLUSCUT ; +

+

+ ANTENNAAREAMINUDIFF 100.0 ; +

+

+ ANTENNACUMDIFFAREARATIO 1000 ; +

+

Every cut layer should include the following information:

+

+ ANTENNAAREAFACTOR 10 ; #10.0 x cut area +

+

+ ANTENNACUMROUTINGPLUSCUT ; +

+

+ ANTENNAAREAMINUDIFF 100.0 ; +

+

+ ANTENNACUMDIFFAREARATIO 1000 ; +

+

For gate G1, the PARs and CARs are computed as follows:

+ +
This value is on the LEF PIN, as mentioned in Example 1.
+ +
+ + + + + +
+
+ 3. +
+
CAR(M1,G1) = PAR(M1,G1) + PIN A's CAR(C,G1)
PIN A's CAR(M1) = ANTENNAMAXAREACAR for LAYER M1 = 1.0
= 2.0 + 1.0 = 3.0
+
+
+ + + + + +
+
+ 4. +
+
Check CAR(M1,G1) = 3.0 <= 1000
+
+
+ + + + + +
+
+ 5. +
+
PAR(V1,G1) = [10 x area(V1,2 + V1,3) - (100 x diff_area)] / area(G1)
= [(10 x .2) - (100 x 0)] / (1) = 2.0
+
+ +
+ + + + + +
+
+ 7. +
+
Check CAR(V1,G1) = 5.0 <= 1000
+
+
+ + + + + +
+
+ 8. +
+
PAR(M2,G1) = [area(M2,1 + M2,2) - (100 x area(D1))] / area(G1 + G2)
= [(4 + 5) - (100 x 0.5) / (1 + 2) = -13.67
+
+
+ + + + + +
+
+ 9. +
+
CAR(M2,G1) = PAR(M2,G1) + CAR(V1,G1) = -13.67 + 5.0 = -8.67, truncate to 0
+
+
+ + + + + +
+
+ 10. +
+
Check CAR(M2,G1) = 0 <= 1000
+
+
+ + + + + +
+
+ 11. +
+
PAR(V2,G1) = [(10 x area(V2,1 + V2,2)) - (100 x area(D1)] / area(G1 + G2)
= [(10 x 0.2) - (100 x 0.5)] / (1 + 2) = -16.0
+
+
+ + + + + +
+
+ 12. +
+
CAR(V2,G1) = PAR(V2,G1) + CAR(M2,G1) = -16.0 + 0 = -16.0, truncate to 0
+
+
+ + + + + +
+
+ 13. +
+
Check CAR(V2,G1) = 0 <= 1000
+
+
+ + + + + +
+
+ 14. +
+
PAR(M3,G1) = [area(M3,1 + M3,2) - (100 x area(D1))] / area(G1 + G2)
= [(6 + 9) - (100 x 0.5)] / (1 + 2) = -11.67
+
+
+ + + + + +
+
+ 15. +
+
CAR(M3,G1) = PAR(M3,G1) + CAR(V2,G1) = -11.67 + 0 = -11.67, truncate to 0
+
+
+ + + + + +
+
+ 16. +
+
Check CAR(M3,G1) = 0 <= 1000
+
+

Example 3

+

The following cumulative rule for metal layers includes a diffusion area factor added into the denominator of the ratio:

+
Single layer: metal_area / (gate_area + 2.0 x diff_area) <= 1000
+
Cumulative for the layer: metal_area / (gate_area + 2.0 x diff_area) <= 5000
+

Every metal layer should include the following information:

+

+ ANTENNAPLUSGATEDIFF 2.0 ; +

+

+ ANTENNADIFFAREARATIO 1000 ; +

+

+ ANTENNACUMDIFFAREARATIO 5000 ; +

+

Note: The via area is ignored in this example. If an independent via model is needed, similar statements should be added to the via layers, which would be computed separately.

+

For gate G1, the PARs and CARs are computed as follows:

+ +
+ + + + + +
+
+ 2. +
+
CAR(M1,G1) = PAR(M1,G1) = 2
+
+
+ + + + + +
+
+ 3. +
+
Check PAR(M1,G1) = 2 <= 1000,
check CAR(M1,G1) = 2 <= 5000
+
+ + +
+ + + + + +
+
+ 6. +
+
Check PAR(M1,G1) = 2.25 <= 1000,
check CAR(M1,G1) = 4.25 <= 5000
+
+ + +
+ + + + + +
+
+ 9. +
+
Check PAR(M1,G1) = 3.75 <= 1000,
check CAR(M1,G1) = 8.0 <= 5000
+
+

Example 4

+

Assume a cumulative rule that includes a diffusion area reduction value and a routing ratio of 1000. The reduction value is 1.0 if the diff_area is less than 0.1, 0.2 if the diff_area equals 0.1, and decreases linearly to 0.1 if the diff_area equals 1.0. The reduction value remains 0.1 if the diff_area is greater than 1.0.

+

Every metal layer should include the following information:

+

+ ANTENNAAREADIFFREDUCEPWL ( ( 0.0 1.0 ) ( 0.0999 1.0 ) ( 0.1 0.2 )( 1.0 0.1 ) +

+
+ + ( 1000.0 0.1 ) ) ;" ; +
+

+ ANTENNACUMDIFFAREARATIO 1000 ; +

+

Note: The via area is ignored in this example. If an independent via model is needed, similar statements should be added to the via layers, which would be computed separately.

+

For gate G1, the PARs and CARs are computed as follows:

+
+ + + + + +
+
+ 1. +
+
Initial PAR(M1,G1) = area(M1,2) / area(G1) = 2.0 / 1 = 2
+
+
+ + + + + +
+
+ 2. +
+
diode_area = 0, PWL(0) = 1.0, therefore initial PAR(M1,G1) is multiplied by 1.0
to give PAR(M1,G1) = 2 x 1 = 2
+
+
+ + + + + +
+
+ 3. +
+
CAR(M1,G1) = PAR(M1,G1) = 2
+
+
+ + + + + +
+
+ 4. +
+
Check CAR(M1,G1) <= 1000, therefore check 2 <= 1000
+
+
+ + + + + +
+
+ 5. +
+
Initial PAR(M2,G1) = area(M2,1 + M2,2) / area(G1 + G2) = (4 + 5) / (1 + 2) = 3
+
+
+ + + + + +
+
+ 6. +
+
diode_area = 0.5, PWL(0.5) = 0.155, therefore initial PAR(M2,G1) is multiplied by 1.0
to give PAR(M2,G1) = 3 x 0.155 = 0.465
+
+ +
+ + + + + +
+
+ 8. +
+
Check CAR(M2,G1) <= 1000, therefore check 2.465 <= 1000
+
+
+ + + + + +
+
+ 9. +
+
Initial PAR(M3,G1) = area(M3,1 + M3,2) / area(G1 + G2) = (6 + 9) / (1 + 2) = 5
+
+ + +
+ + + + + +
+
+ 12. +
+
Check CAR(M3,G1) <= 1000, therefore check 3.24 <= 1000
+
+

 

+

Example Using the Antenna Keywords

+

The following example is a portion of a LEF file that shows the antenna keywords for a process that has cumulative area ratio damage for metal and cut layers.

+

Assume you have the following antenna rules for your process:

+ + + + +

The corresponding LEF file would include:

+

+ LAYER M1 +

+

+   TYPE ROUTING ; +

+

+   ... +

+

+   ANTENNACUMAREARATIO 1000 ; +

+

+   ANTENNACUMDIFFAREARATIO +

+

+        PWL ( ( 0 1000 ) ( 0.099 1000 ) ( 0.1 5200 ) ( 100 205000 ) ) ; +

+

+ END M1 +

+

+   +

+

+ LAYER VIA1 +

+

+   TYPE CUT ; +

+

+   ... +

+

+   ANTENNACUMAREARATIO 20 ; +

+

+   ANTENNACUMDIFFAREARATIO +

+

+        PWL ( ( 0 20 ) ( 0.099 20 ) ( 0.1 120 ) ( 100 20100 ) ) ; +

+

+ END VIA1 +

+

A typical standard cell that has only M1 pins and routing inside of it would have:

+

+ MACRO INV1X +

+

+   CLASS CORE ; +

+

+   ... +

+

+   PIN IN +

+

+     DIRECTION INPUT ; +

+

+     ANTENNAGATEAREA .5 LAYER M1 ; # connects to 0.5 μm^2 poly gate +

+

+     ANTENNAPARTIALMETALAREA 1.0 LAYER M1 ; # has 1.0 μm^2 M1 area. +

+

+            # Note that it should not include the M1 pin area, just the M1 routing +

+

+            # area that is not included in the PIN shapes. In many cases, all of the +

+

+            # M1 routing is included in the PIN, so this value is 0, and not in the +

+

+            # LEF at all. +

+

+     ANTENNAMAXAREACAR 10.0 LAYER M1 ; # has 10.0 cumulative ratio so far. +

+

+            # This value can include area from internal poly routing if poly routing +

+

+            # damage is accumulated with the metal layers. It does not include +

+

+            # the area of the M1 pin area, just the M1 routing area that is not +

+

+            # included in the PIN shapes. If poly damage is not included, and all +

+

+            # of the M1 routing is included in the PIN, this value will be 0, and +

+

+            # not in the LEF at all. +

+

+     ... +

+

+   END IN +

+

+   PIN OUT +

+

+     DIRECTION OUTPUT ; +

+

+     ANTENNADIFFAREA .2 LAYER M1 ; # connects to 0.2 μm^2 difusion area +

+

+     ANTENNAPARTIALMETALAREA 1.0 LAYER M1 ; # has 1.0 μm^2 M1 area +

+

+     # No ANTENNAMAXAREACAR value because no internal poly gate is connected +

+

+     ... +

+

+   END OUT +

+

+ END INV1X +

+

Using Antenna Diode Cells

+

Routers generally use one of two methods to fix process antenna violations:

+ + +

Changing the Routing

+

One method routers use to fix antenna violations is to limit the charge that is collected through the metal nodes exposed to the plasma. To do this, it goes up one layer or pushes the routing down one layer whenever the process antenna ratio exceeds the ratio set in the LEF file.

+

The router changes the routing by disconnecting nets with antenna violations and making the connections to higher metal layers instead. It does not make the connections to lower layers. This method works because the top metal layer always completes the connection from the gate to the output drain area of the driver, which is a diode that provides a discharge path.

+

Inserting Antenna Diode Cells

+

The second method routers use to repair antenna violations is to insert antenna diode cells in the design. The electrical charges on the metal that connects to the diodes is then discharged through the diode diffusion layer and substrate. The router inserts the diode cells automatically.

+

The following example shows a LEF definition of an antenna diode cell, with the CLASS CORE ANTENNACELL and ANTENNADIFFAREA defined:

+

+ MACRO antenna1 +

+

+     CLASS CORE ANTENNACELL ; +

+

+     ... +

+

+     PIN ANT1 +

+

+         AntennaDiffArea 1.0 ; +

+

+         PORT +

+

+         LAYER metal1 ; +

+

+         RECT 0.190 2.380 0.470 2.660 ; +

+

+         END +

+

+     END ANT1 +

+

+ END antenna1 +

+

Using DiffUseOnly

+

LEF defines only one value for ANTENNAAREAFACTOR and one value for ANTENNASIDEAREAFACTOR, with or without DIFFUSEONLY, per layer. If you specify more than one antenna area or side area factor for a layer, only the last one is used. The AREAFACTOR value lets you scale the value of the metal area. If you use the DIFFUSEONLY keyword, only metal attached to diffusion is scaled.

+

Suppose you have the following LEF file:

+


+

+ Figure C-21  +   +

+


+

In the figure,

+
+ + + + + +
+
+ + ParagraphBullet + +
+
The input pin H01 of GATE_M2_M3 connects the metal wires to metal1, metal2, and metal3 in sequence.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The ANTENNAAREAFACTOR 1.2 DIFFUSEONLY and ANTENNASIDEAREAFACTOR 1.4 DIFFUSEONLY apply to metal3 routing.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Prior to metal3 fabrication, there is no path to the diffusion diode. This causes the default factor of 1.0 to apply to the metal1 and metal2 segments shown when calculating PARs.
+
+

Calculations for Hierarchical Designs

+

The following section illustrates computation of antenna ratios for hierarchical designs.

+

LEF and DEF Keywords for Hierarchical Designs

+

 

+ + + + + + + + + + + + + + + + +
+
+

+ If the keyword
ends with ...
+

+
+

+ It refers to ... +

+
+

+ Examples +

+
+

area
sideArea

+
+

Drawn area or side area of the metal wires. Measured in square microns.

+
+

ANTENNAPARTIALCUTAREA
ANTENNAPARTIALMETALAREA
ANTENNAPARTIALMETALSIDEAREA
ANTENNAPINDIFFAREA
ANTENNAPINGATEAREA
ANTENNAPINPARTIALCUTAREA

+
+

CAR

+
+

Relationship the router is calculating

+

CAR is used in keywords for cumulative antenna ratio.

+
+

ANTENNAMAXAREACAR
ANTENNAMAXCUTCAR
ANTENNAMAXSIDEAREACAR
ANTENNAPINMAXAREACAR
ANTENNAPINMAXCUTCAR
ANTENNAPINMAXSIDEAREACAR

+
+

Design Example

+

Figure C-22 represents a macro block. This block can be a custom hard block or part of a bottom-up hierarchical flow. The resulting PAE values will be the same in either case. In the example,

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Gates G1, G2, G3, and G4 are the same size.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Node N1,3 is larger than node N1,2.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Vias (cuts) are all the same size.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The I/O pin is on metal3.
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The area of diffusion for D1 is area(Diff1).
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The area of diffusion for D2 is area(Diff2).
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
The area of the cut layer that connects node N3,1 and node N4,2 is area(NC34,1).
+
+ +

+ Figure C-22  +   +

+


+

+ + Relevant Metal Areas +

+ + + +

For the design in the figure above, you must specify values for the following metal areas in the LEF file:

+

+ ANTENNAPARTIALMETALAREA area(N3,2) LAYER Metal3 ; +

+

+ ANTENNAPARTIALMETALAREA area(N4,2) LAYER Metal4 ; +

+

+ ANTENNAPARTIALMETALSIDEAREA sideArea(N3,2) LAYER Metal3 ; +

+

+ ANTENNAPARTIALMETALSIDEAREA sideArea(N4,2) LAYER Metal4 ; +

+

You do not need to specify an ANTENNAPARTIALMETALAREA or ANTENNAPARTIALSIDEMETALAREA for any layer lower than metal3 because the I/O pin is on metal3; that is, there is no connection outside the block until metal3 is processed.

+

+ + Relevant Gate, Diffusion, and Cut Areas +

+ + +

For the design in the figure above, you must specify values for the following gate, diffusion, and cut areas in the LEF file:

+

+ ANTENNAGATEAREA area(G2 + G3 + G4) LAYER Metal3 ; +

+

+ ANTENNADIFFAREA area(Diff1) LAYER Metal3 ; +

+

+ ANTENNADIFFAREA area(Diff1 + Diff2) LAYER Metal4 ; +

+

+ ANTENNAPARTIALCUTAREA area(N34,2) LAYER Via34 ; +

+

+ + Calculating the CAR +

+

Use the following keywords to calculate the actual CAR on the I/O pin layer or above.

+ + +

For the example in Figure C-22 , the keywords and calculations for metal3 and via34 would be:

+


+

+ + Sample LEF File for a Bottom-Up Hierarchical Design +

+

For a macro block like that shown in Figure C-22 , you should have the following pin information in your LEF file, ignoring SIDEAREA values:

+

+ PIN example +

+

+     ANTENNAGATEAREA 0.3 LAYER METAL3 ; # area of G2 + G3 + G4 +

+

+     ANTENNADIFFAREA 1.0 LAYER METAL3 ; # area of D1 +

+

+     ANTENNAPARTIALMETALAREA 10.0 LAYER METAL3 ; # area of N3,2 +

+

+     ANTENNAMAXAREACAR 100.0 LAYER METAL3 ; # max CAR of N3,2 +

+

+   +

+

+     ANTENNAPARTIALCUTAREA 0.1 LAYER VIA34 ; # area of N34,2 +

+

+     ANTENNAMAXCUTCAR 5.0 LAYER VIA34 ; # max cut CAR of N34,2 +

+

+   +

+

+     ANTENNAGATEAREA 0.3 LAYER METAL4 ; # area of G2 + G3 + G4 +

+

+     ANTENNADIFFAREA 2.0 LAYER METAL4 ; # area of D1 + D2 +

+

+     ANTENNAPARTIALMETALAREA 12.0 LAYER METAL4 ; # area of N4,2 +

+

+     ANTENNAMAXAREACAR 130.0 LAYER METAL4 ; # max CAR of N4,2 +

+

+ END example +

+

Top-Down Hierarchical Design Example

+

In a top-down design, the router uses the top-level antenna values to check for process antennas inside the block. If the top level is routed first, the top-level routing CAR and PAR values can be passed down into the DEF for the sub-block. This method can also be used to pass down estimated "budgets" for PAR and CAR values.

+

Set the following keywords in the DEF file for the design. In a top-down design you assign a value to the I/O pin that indicates how much routing, CAR, and PAR occurred outside the block already.

+

+ MACRO macroName +

+
+ + CLASS BLOCK ; +
+
+
PIN pinName
+
+
+
DIRECTION OUTPUT ;
+
+
+
[ANTENNAPINPARTIALMETALAREA value [LAYER layerName] ;] ...
+
+
+
[ANTENNAPINPARTIALMETALSIDEAREA value [LAYER layerName] ;] ...
+
+
+
[ANTENNAPINGATEAREA value [LAYER layerName] ;] ...
+
+
+
[ANTENNAPINDIFFAREA value [LAYER layerName] ;] ...
+
+
+
[ANTENNAPINMAXAREACAR value [LAYER layerName] ;] ...
+
+
+
[ANTENNAPINMAXSIDEAREACAR value [LAYER layerName] ;] ...
+
+
+
[ANTENNAPINPARTIALCUTAREA value [LAYER cutlayerName] ;] ...
+
+
+
[ANTENNAPINMAXCUTCAR value LAYER cutlayerName] ;] ...
+
+
+ + END Z +
+

+ END macroName +

+

Sample DEF File for a Top-Down Hierarchical Design

+

An example of the DEF keywords for Figure C-22 would be:

+

+ PINS 100 ; +

+
+ + - example + NET example1 +
+
+
+ ANTENNAPINPARTIALMETALAREA (N3,1) LAYER Metal3 ;
+
+
+
+ ANTENNAPINPARTIALMETALSIDEAREA (N3,1) LAYER Metal3 ;
+
+
+
+ ANTENNAPINGATEAREA (G1) LAYER Metal3 ;
+
+
+
 # No ANTENNAPINDIFFAREA for this example
+
+

+


+

+
+
+ ANTENNAPINPARTIALCUTAREA (N34,1) LAYER via34 ;
+
+

+


+

+
+
+ ANTENNAPINGATEAREA (G1) LAYER Metal4 ;
+
+
+
+ ANTENNAPINPARTIALMETALAREA (N4,1) LAYER Metal4 ;
+
+
+
+ ANTENNAPINPARTIALMETALSIDEAREA (N4,1) LAYER Metal4 ;
+
+
+
...
+
+

+ END PINS +

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/WorkingwithLEF.html b/lefdef/doc/lefdefref/WorkingwithLEF.html new file mode 100644 index 00000000..eb9697c7 --- /dev/null +++ b/lefdef/doc/lefdefref/WorkingwithLEF.html @@ -0,0 +1,570 @@ + + + + + LEF/DEF 5.8 Language Reference -- 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

3 

+

Working with LEF

+

This chapter contains information about the following topics.

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Incremental LEF
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Error Checking
+
+

Incremental LEF

+

INPUT LEF can add new data to the current database, providing an incremental LEF capability. Although it is possible to put an entire LEF library in one file, some systems require that you put certain data in separate files.

+

This feature also is useful, for example, when combined with the INPUT GDSII command, to extract geometric data from a GDSII-format file and add the data to the database.

+

When using INPUT LEF on a database that has been modified previously, save the previous version before invoking INPUT LEF. This provides a backup in case the library information has problems and the database gets corrupted or lost.

+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
+ The original LEF file, created with FINPUT LEF (or with INPUT LEF when no database is loaded), must contain all the layers. +
+
+

Adding Objects to the Library

+

INPUT LEF can add the following objects to the database:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
New via
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
New via rule
+
+ +
+ + + + + +
+
+ + ParagraphBullet + +
+
New macro
+
+

If geometries have not been specified for an existing via, INPUT LEF can add layers and associated rectangle geometries. If not specified previously for a macro, INPUT LEF can add the following:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
FOREIGN statement
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
EEQ
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
LEQ
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Size
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Overlap geometries
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Obstruction geometries
+
+

If not previously specified for an existing macro pin, INPUT LEF can add the following:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
Mustjoins
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Ports and geometries
+
+

The database created by INPUT LEF can contain a partial library. Run VERIFY LIBRARY before proceeding.

+

If new geometries are added to a routed database, run VERIFY GEOMETRY and VERIFY CONNECTIVITY to identify new violations.

+
+ + + + + + +
+
 
+
+
+ + ParagraphBullet + +
+
+ When defining a pin with no port geometries with the intent of incrementally adding them, do not include an empty PORT statement as shown below. +
+
+
+ MACRO abc
...
PIN a
...
      PORT # dummy pin-port, do not
      END # include these two lines
END a
... +
+

Error Checking

+

To help develop, test, and debug generic libraries and parametric macros, LEF and DEF have a user-defined error checking facility. This facility consists of seven utilities that you can use from within a LEF or DEF file during the scanning phase of LEF/DEF readers. These utilities have the following features:

+ + +

The error checking utilities have the following syntax:

+

+ &CREATEFILE &fileAlias =
    { 
stringExpression
    | stringIF-ELSEexpression } ;
+

+

+ &OPENFILE &fileAlias ; +

+

+ &CLOSEFILE &fileAlias ; +

+

+ &MESSAGE
    {&fileAlias | &MSGWINDOW} =
message;
+

+

+ &WARNING
    {&fileAlias | &MSGWINDOW} =
message ;
+

+

+ &ERROR
    {&fileAlias | &MSGWINDOW} =
message ;
+

+

+ &FATALERROR
    {&fileAlias | &MSGWINDOW} =
message;
+

+

+ message =
    { &fileAlias | stringExpression
    | stringIF-ELSEexpression
    | stringIFexpression }
+

+

Message Facility

+

The message facility outputs user-defined messages during the scanning phase of LEF and DEF input. These messages can be directed to the message window.

+

+ + &CREATEFILE +

+

The &CREATEFILE utility first assigns a token (&fileAlias) to represent a named file. The file name is derived from a previously defined string, a quoted string, or an IF-ELSE expression that evaluates to a string. The following example illustrates these three cases.

+

+ &DEFINES &messagefile = "demo1.messages" ;
&CREATEFILE &outfile = &messagefile ;
&CREATEFILE &msgs =
        "/usr/asics/cmos/fif4/errors.txt" ;
&CREATEFILE &messages =
        IF &errortrap
            THEN "errs.txt"
            ELSE "/dev/null" ;
+

+

The derived file name must be a legal file name in the host environment. The default directory is the current working directory. The file names are case sensitive.

+

&CREATEFILE creates an empty file with the given name and opens the file. If the token is already bound to another open file, a warning is issued, the file is closed, and the new file is opened. If the file already exists, the version number is incremented.

+

+ + &CLOSEFILE and &OPENFILE +

+

The &CLOSEFILE utility closes the file bound to a given token; &OPENFILE opens the file bound to a given token. &CLOSEFILE and &OPENFILE control the number of open files. Each operating system has a limit for the number of open files. Therefore, &CLOSEFILE might be needed to free up extra file descriptors.

+

Files are closed in the following ways.

+ + +
+ + + + + +
+
+ + ParagraphBullet + +
+
If &CREATEFILE is invoked with a token that is already bound to an open file, that file is closed before opening the new file.
+
+

+ + &MESSAGE +

+

The &MESSAGE utility appends text to the file represented by the &fileAlias token, or to the message window if &MSGWINDOW is specified.

+

&MSGWINDOW is a special file alias that is not created, opened, or closed. The assigned expression (right side of the statement) can be one of the following:

+

+ + &fileAlias +

+
Must correspond to a valid file that has been successfully opened. The contents of the file are appended to the target file (or message window).
+

+ + stringExpression +

+
Either a string or a string token.

For example:
+

+                 &DEFINES &romword16 =
                    "ROM word size = 16 bits" ;
                &MESSAGE &mesgs = "ROM size = 256" ;
                &MESSAGE &mesgs = &romword16 ;
+

+

+ + stringIF-ELSEexpression +

+
String IF-ELSE expressions evaluate a Boolean expression and then branch to string values, for example:
+

+                 &&MESSAGE &mesgs =
                    IF (&&c_flag = 0)
                        THEN "FLAG C set to 0"
                    ELSE IF ( &&c_flag = 1 )
                        THEN "FLAG C set to 1"
                    ELSE "FLAG C set to 2" ;
+

+
As shown in this example, IF-ELSE expressions can be nested.
+

+ + stringIFexpression +

+
A string IF expression is an IF-ELSE expression without the ELSE phrase. The Boolean expression is evaluated, and if true, the THEN string is sent to the target file; if false, no string is sent, for example,
+

+                 &MESSAGE &mesgs =
                    IF ( &&buf = "INV_BIG" )
                        THEN "INV_BIG buffers" ;
+

+

Neither the file alias token nor &MSGWINDOW can be part of the assigned expression.

+

Error-Checking Facility

+

In addition to the message facility, you have partial control of the error checking facility of the LEF and DEF readers. When scanning LEF or DEF input, the readers record warnings, errors, and fatal errors. At the end of the scan, the total number of each is sent to the message window before proceeding with the reader phase.

+

If a fatal error is detected, input is aborted after the scanning phase.

+

With the user interface to the error checking facility, the LEF and DEF files can include custom error checking. User detected warnings, errors, and fatal errors, can be logged, thereby incrementing the DEF/LEF reader's warning, error, and fatal error counts.

+

A user-detected fatal error terminates input just as with the resident error checking facility. In addition, the user defined error checking facility utilities can send message strings to the message window.

+

+ + &WARNING, &ERROR, and &FATALERROR +

+

The &WARNING, &ERROR, and &FATALERROR utilities use the same syntax as the &MESSAGE utility. These utilities can send message strings to files and to the message window in the same manner as &MESSAGE. In addition, when the assigned expression is a string IF expression, or a string IF-ELSE expression, then the associated counter (warnings, errors, or fatal errors) is incremented by 1 if any IF condition evaluates to true.

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.01.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.01.png new file mode 100644 index 0000000000000000000000000000000000000000..a1115a5d2fd55e01151c8fdf17f1661f97b1b8c6 GIT binary patch literal 14996 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 Qm@^nWUHx3vIVCg!0O#(8&;S4c literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.03.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.03.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8090c0fd75f50a031fbae6d8ae2ce0c3475bc9 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feN>Ix;TbJw7#8T$ah$Q z$JO)b6wbotGjp01xvxLg;E_?RP7~8>6!^jrva0UZ71vMFy}5r>^f!FDcl3;hM)m#g zQQBpVQxsWNu)O9^y&jd^6VSO;?38=uom+p|H!zs$IPh`@9A>%#V>a()?|Xb>TW-(v zpgrHu?bP>WZQ$fk4D!-{{CZcN)oImb@rq&#+E`c2j7w;&dp0F#=@i3zQO3tI)*fFx n=X2$}>+Ch`Y9HEt_B;7cDAMst&3VKI^Z|pXtDnm{r-UW|NfmHO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.04.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.04.png new file mode 100644 index 0000000000000000000000000000000000000000..c22e66534d1e010126c9ef427e90a131ce86921b GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feMQ~T^vIqTHjv3$k|}P z(~_wDZepgDOZr)pnJRWaR&^K_XztB#D6$vvn!P*U`1VESe^EvWJs0F8MX zYwnlY_0#q^Ej3{1Wz4wDF0=Evtu5(f8<>i?{K-_5k}=J&tH zW?Fw`SQ^5ZwTi*?4Xa$l8O!V2-fnNZ5Ow$_+ivzHQ;tdOcrBQn%fZ;!9KYc8u0olI z>)iKzS1tTjy?`qqm~};>K7-t12CtQ;f0_8Ip8n^T5IIfa@lL%KjmT+#^+Q-!tYo^f zL7bug;*?7UJo2v3D)+6)zuk8B15?d~iucz`bu<5{J-_qaR)(GRAN#lJhP?-bC104F U>Nq6g0Q4Dyr>mdKI;Vst0ISh~^#A|> literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.06.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.06.png new file mode 100644 index 0000000000000000000000000000000000000000..afe43be93be694f92151b384683f73b57b05f145 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feLSWx;TbJw7#9bk+<1E zz}0sOW6TbRMH_Xv#1?*%5Lt78Bj*syyLE{oIZ|L~7@4v;8t#Zdd{#c#V zIxO^yjblySm!7`2lwUMsNFc(8Z>YpZR!v$u-rvFE4! gZ~kGd5chz!{hk5GbJp8CfSzRVboFyt=akR{0KmkE=Kufz literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.07.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.07.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc431f77f73a4c632b99b9c352107036ebcbbd7 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feLqcx;TbJw7#8T$aPeK zr!9Vd{zdJI{&@>Fo4>H#wX;g@{luNw*8^7U?tae@r0FQtQj@Im^QQub)zlz6<TlWNmKQC49COD)7x^7Nkqjo=YQ|iS7y4?!CJxG qJ?i?`ImWuH&zk(Y{^*1D7j~Hfo$O`PJKqESz~JfX=d#Wzp$PzKg?PUJ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.08.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.08.png new file mode 100644 index 0000000000000000000000000000000000000000..335859b9ad6e2a78ee7bb15df69f32ca37dca428 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{fePn)x;TbJw7#9Ok&{JH zz%`#=Sy-6cz+@}?+A6LMip-mDGKDq&uKpnSto2m+vx5yUmadvV`R69-itgsg_kKU! zwd&cN(_%Vg}G)D9eDxgn$9aG&|y&MB9QYtMCV zXWqi7?yafx>3EnypS+@QLNZg1PeU)~217pk$aET-zm{TIA7AGRNs TVmaFabSi_VtDnm{r-UW|z-ww& literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.09.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.09.png new file mode 100644 index 0000000000000000000000000000000000000000..f09b87b5cc751d5f740228b15454577701b8d79d GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feKH0x;TbJw7#8g$k(DE z;ClURT*Ikpx2|zzXPrOXx~E~PyTPSmb}4=bryEJq!rMP48~GWnpY!B!J*P*Gm!|%? zJuA7dC^22>U@(2dY8R0+YuUEk{LBSYUj3HqGrwVdq4cgr--mVX&no#8AN*uWTzj-> zyZ+ICd_d(&4!qTj9~3{|lTJSOdCuo;xusLrF>)=La;?<%{MKusrRxs=MtxJm%ll2jU)Zi>E$6+aS>+1oRYxr>mdK II;Vst0HL>iWB>pF literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.10.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.10.png new file mode 100644 index 0000000000000000000000000000000000000000..9095acbceccad5a5de98a63b26bc4792ff4b9312 GIT binary patch literal 339 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 ZQ2RD_TA==&AAm$aw~#vOrE1oX{{u+pn@j)z literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.12.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.12.png new file mode 100644 index 0000000000000000000000000000000000000000..2283ff2a56d82e930dffa836ea2fed0fbf7c6178 GIT binary patch literal 7704 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.13.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.13.png new file mode 100644 index 0000000000000000000000000000000000000000..907d2073451b1e82a79fcc592ea4909efc44f473 GIT binary patch literal 19536 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.14.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.14.png new file mode 100644 index 0000000000000000000000000000000000000000..c25972889b2c85428b2e33903b6d745895c81c6f GIT binary patch literal 18947 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 x%bd=P7c*_SFYx!EvY$dDw~(SZ{{zBx@{|Ao literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.15.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.15.png new file mode 100644 index 0000000000000000000000000000000000000000..e259244f92532d663aede5ab41f5ca59503aef1a GIT binary patch literal 8106 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≧6KRse=Iunv|iDG?_Xk?06>5= z>hG7PqS#%#<}jOGN#K0xfu@*jgP4x-(zM&MDv-VJ|HRG$T{EyS#oDt42(a&&=;k+l>{9+83VuF%;Ieas9<25^v*|$% zrBlH|VYg-q9-Winf!2Y1t)2mMrqn5^T|nHa+b3Yu3bA|5C>Kibd$rHp^)z8H7XAB@ z$ug%2V#<#GJSn@(7a(_mMkV$_;IV%c81d!^77vMi6+N7!N7{kq4X3A3rIlSdp?v3cemM>f7oy!r=v9w3Ej& z_a!6IoL8ct=U{r%CpE{w*jXJ#Rz9XlzP*S{sHes77kc|w~(bN-kY?ZR(q z-Ww>o72L3mcY%LdNu^zbMXJZGJu~856po`FhXwY=kXbX~f+GuRqQj3x0Vz|TVL5bP z*UCdJHb#3AgD|qO5c?(a)@4pPD*`{B{nvTE_-L4Yb?i$o4|GFFB^A;Hl zVW7bM^sCY{Nih8q-Y`>d`Sr1E&2}-s>qF@6-1rKpb{06i)&5|06FCG~=lOh}*aT57 zCwJq*C1IfW1qqE^Fp$-3)Jt|Z%#3&e`T%NTPZ~qE0Rd73G!~S4KdsaxM7Q}RM|O<% zWQ!&O%U<0&Y`q<@k_GR7)7jIamUsfqtKjfMcAODwIVNIX(tEQUH1sxXR~$1)KkpWKC`g0ePQxhO{kHz&bksH?_P#I(PlvzX9A}(DncT literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.16.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.16.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6624d27b362b9b61a935d3bb4173f669d4e4ba GIT binary patch literal 9246 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 X9>HAYAgc-AkpUj4dqmeaSY20 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.18.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.18.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bd638869f8fd2dd90b10241c489f04b966ec4f GIT binary patch literal 8812 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%0D3pkZkZ{AgmLwD(Dx{ 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.20.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.20.png new file mode 100644 index 0000000000000000000000000000000000000000..c22e66534d1e010126c9ef427e90a131ce86921b GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feMQ~T^vIqTHjv3$k|}P z(~_wDZepgDOZr)pnJRWaR&^K_XztB#D6$vvn!P*U`1VESe^EvWJs0F8MX zYwnlY_0#q^Ej3{1Wz4wDF0=Evtu5(f8<>i?{K-_5k}=J&tH zW?Fw`SQ^5ZwTi*?4Xa$l8O!V2-fnNZ5Ow$_+ivzHQ;tdOcrBQn%fZ;!9KYc8u0olI z>)iKzS1tTjy?`qqm~};>K7-t12CtQ;f0_8Ip8n^T5IIfa@lL%KjmT+#^+Q-!tYo^f zL7bug;*?7UJo2v3D)+6)zuk8B15?d~iucz`bu<5{J-_qaR)(GRAN#lJhP?-bC104F U>Nq6g0Q4Dyr>mdKI;Vst0ISh~^#A|> literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.22.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.22.png new file mode 100644 index 0000000000000000000000000000000000000000..afe43be93be694f92151b384683f73b57b05f145 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feLSWx;TbJw7#9bk+<1E zz}0sOW6TbRMH_Xv#1?*%5Lt78Bj*syyLE{oIZ|L~7@4v;8t#Zdd{#c#V zIxO^yjblySm!7`2lwUMsNFc(8Z>YpZR!v$u-rvFE4! gZ~kGd5chz!{hk5GbJp8CfSzRVboFyt=akR{0KmkE=Kufz literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.23.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.23.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc431f77f73a4c632b99b9c352107036ebcbbd7 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feLqcx;TbJw7#8T$aPeK zr!9Vd{zdJI{&@>Fo4>H#wX;g@{luNw*8^7U?tae@r0FQtQj@Im^QQub)zlz6<TlWNmKQC49COD)7x^7Nkqjo=YQ|iS7y4?!CJxG qJ?i?`ImWuH&zk(Y{^*1D7j~Hfo$O`PJKqESz~JfX=d#Wzp$PzKg?PUJ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.24.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.24.png new file mode 100644 index 0000000000000000000000000000000000000000..335859b9ad6e2a78ee7bb15df69f32ca37dca428 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{fePn)x;TbJw7#9Ok&{JH zz%`#=Sy-6cz+@}?+A6LMip-mDGKDq&uKpnSto2m+vx5yUmadvV`R69-itgsg_kKU! zwd&cN(_%Vg}G)D9eDxgn$9aG&|y&MB9QYtMCV zXWqi7?yafx>3EnypS+@QLNZg1PeU)~217pk$aET-zm{TIA7AGRNs TVmaFabSi_VtDnm{r-UW|z-ww& literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.25.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.25.png new file mode 100644 index 0000000000000000000000000000000000000000..f09b87b5cc751d5f740228b15454577701b8d79d GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feKH0x;TbJw7#8g$k(DE z;ClURT*Ikpx2|zzXPrOXx~E~PyTPSmb}4=bryEJq!rMP48~GWnpY!B!J*P*Gm!|%? zJuA7dC^22>U@(2dY8R0+YuUEk{LBSYUj3HqGrwVdq4cgr--mVX&no#8AN*uWTzj-> zyZ+ICd_d(&4!qTj9~3{|lTJSOdCuo;xusLrF>)=La;?<%{MKusrRxs=MtxJm%ll2jU)Zi>E$6+aS>+1oRYxr>mdK II;Vst0HL>iWB>pF literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.26.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.26.png new file mode 100644 index 0000000000000000000000000000000000000000..9095acbceccad5a5de98a63b26bc4792ff4b9312 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feP<}MI{&;2Y@ zf*xDEo3`beq4DJVPM!?2RT_9J86TKh`3B$Kwp=CRy6H069}72LJGSOmPw~48_g}Cs iIPl-$AI}8w9n7B&o;{ha{UieDPXv^8_KD%XZ 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 E0jTWQhyVZp literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.28.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.28.png new file mode 100644 index 0000000000000000000000000000000000000000..67d965248f258e5b16f3185188f72cdcc86d16aa GIT binary patch literal 23209 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%0ACA!vskgAxtm%vm6Ie2APlBn`b7l{I` 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.29.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.29.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8090c0fd75f50a031fbae6d8ae2ce0c3475bc9 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feN>Ix;TbJw7#8T$ah$Q z$JO)b6wbotGjp01xvxLg;E_?RP7~8>6!^jrva0UZ71vMFy}5r>^f!FDcl3;hM)m#g zQQBpVQxsWNu)O9^y&jd^6VSO;?38=uom+p|H!zs$IPh`@9A>%#V>a()?|Xb>TW-(v zpgrHu?bP>WZQ$fk4D!-{{CZcN)oImb@rq&#+E`c2j7w;&dp0F#=@i3zQO3tI)*fFx n=X2$}>+Ch`Y9HEt_B;7cDAMst&3VKI^Z|pXtDnm{r-UW|NfmHO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.30.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.30.png new file mode 100644 index 0000000000000000000000000000000000000000..c22e66534d1e010126c9ef427e90a131ce86921b GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feMQ~T^vIqTHjv3$k|}P z(~_wDZepgDOZr)pnJRWaR&^K_XztB#D6$vvn!P*U`1VESe^EvWJs0F8MX zYwnlY_0#q^Ej3{1Wz4wDF0=Evtu5(f8<>i?{K-_5k}=J&tH zW?Fw`SQ^5ZwTi*?4Xa$l8O!V2-fnNZ5Ow$_+ivzHQ;tdOcrBQn%fZ;!9KYc8u0olI z>)iKzS1tTjy?`qqm~};>K7-t12CtQ;f0_8Ip8n^T5IIfa@lL%KjmT+#^+Q-!tYo^f zL7bug;*?7UJo2v3D)+6)zuk8B15?d~iucz`bu<5{J-_qaR)(GRAN#lJhP?-bC104F U>Nq6g0Q4Dyr>mdKI;Vst0ISh~^#A|> literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.32.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.32.png new file mode 100644 index 0000000000000000000000000000000000000000..afe43be93be694f92151b384683f73b57b05f145 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feLSWx;TbJw7#9bk+<1E zz}0sOW6TbRMH_Xv#1?*%5Lt78Bj*syyLE{oIZ|L~7@4v;8t#Zdd{#c#V zIxO^yjblySm!7`2lwUMsNFc(8Z>YpZR!v$u-rvFE4! gZ~kGd5chz!{hk5GbJp8CfSzRVboFyt=akR{0KmkE=Kufz literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.33.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.33.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc431f77f73a4c632b99b9c352107036ebcbbd7 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feLqcx;TbJw7#8T$aPeK zr!9Vd{zdJI{&@>Fo4>H#wX;g@{luNw*8^7U?tae@r0FQtQj@Im^QQub)zlz6<TlWNmKQC49COD)7x^7Nkqjo=YQ|iS7y4?!CJxG qJ?i?`ImWuH&zk(Y{^*1D7j~Hfo$O`PJKqESz~JfX=d#Wzp$PzKg?PUJ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.34.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.34.png new file mode 100644 index 0000000000000000000000000000000000000000..335859b9ad6e2a78ee7bb15df69f32ca37dca428 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{fePn)x;TbJw7#9Ok&{JH zz%`#=Sy-6cz+@}?+A6LMip-mDGKDq&uKpnSto2m+vx5yUmadvV`R69-itgsg_kKU! zwd&cN(_%Vg}G)D9eDxgn$9aG&|y&MB9QYtMCV zXWqi7?yafx>3EnypS+@QLNZg1PeU)~217pk$aET-zm{TIA7AGRNs TVmaFabSi_VtDnm{r-UW|z-ww& literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.35.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.35.png new file mode 100644 index 0000000000000000000000000000000000000000..f09b87b5cc751d5f740228b15454577701b8d79d GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo+!2~3yO8;E|q&N#aB8wRq_!B{xafSWzOpuBa z*NBqf{Irtt#G+IN_W&OS_l*4FlH%l|%z_dH3q4cw8(Hg{feKH0x;TbJw7#8g$k(DE z;ClURT*Ikpx2|zzXPrOXx~E~PyTPSmb}4=bryEJq!rMP48~GWnpY!B!J*P*Gm!|%? zJuA7dC^22>U@(2dY8R0+YuUEk{LBSYUj3HqGrwVdq4cgr--mVX&no#8AN*uWTzj-> zyZ+ICd_d(&4!qTj9~3{|lTJSOdCuo;xusLrF>)=La;?<%{MKusrRxs=MtxJm%ll2jU)Zi>E$6+aS>+1oRYxr>mdK II;Vst0HL>iWB>pF literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.36.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.36.png new file mode 100644 index 0000000000000000000000000000000000000000..9095acbceccad5a5de98a63b26bc4792ff4b9312 GIT binary patch literal 339 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 R6xftTfl}AIS*mIs_CKt?z_|bb literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.38.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.38.png new file mode 100644 index 0000000000000000000000000000000000000000..4cafab3fbee15ff7447197368ce3fec9697ee2b2 GIT binary patch literal 19762 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.39.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.39.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8ea476af7a19a5f63bd0a8ee58f5bbdd2a95ca GIT binary patch literal 6269 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.40.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.40.png new file mode 100644 index 0000000000000000000000000000000000000000..f60115c3c79b0441b9ed88952c59282d7ac4ae87 GIT binary patch literal 14064 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�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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.41.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.41.png new file mode 100644 index 0000000000000000000000000000000000000000..179e175f22e3068d08126d62e0ce3558ab291147 GIT binary patch literal 8626 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 a4z_c0r$2gCeF9G`KzCHMl*^Q?fB!#4OE#SV literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.42.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.42.png new file mode 100644 index 0000000000000000000000000000000000000000..22e2737813742465796b18e40c01d75c12c1471c GIT binary patch literal 62470 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 IHaoe00!gv+<^TWy literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.43.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.43.png new file mode 100644 index 0000000000000000000000000000000000000000..926294364dc6eb389114175d2bdbe96c6c48212b GIT binary patch literal 18808 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 Qu0Y5m+dO)E$i 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

^e=}VYUZ?paiq8EBac-mOoPq&PgLx~R@%Ug=9 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.45.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.45.png new file mode 100644 index 0000000000000000000000000000000000000000..29f1d00460fe5616c58a183c662715554717d1a7 GIT binary patch literal 1637 zcmZvcdpOg39LK**XG>UxROh%R&HW^owZp~`!rXF8QLdG03^Usy524jLXUU~>p;D%v zq)B1gR!MH9%fwvraLSw+6V^s^IX^wmdCv2k=lt=#eBPh$_xXH2&*%BP=>7x`b=9q^ z004C_Pq#n-lq;b-4xtR~5idimpkr;4XLt$#$iu5ksT#*T3W>U@?qR7x#Q4eNS^=Z`0TdOFhME8u6ivm|_*%qSQME1iX!oX=7t!nwf@%&X5^ei<#rOtDfz#J!iksWmlL<;7xnm zGp6KrZ^S}nQ}Z}U*dgB)9#gS+{&|C!q?|b_lZ8Nexi5`Nq2uYEVm$y#0;mA&+apo} z{#$OtfpeVim>wE~Q7ve(w6y$iwMrn7NZQ-m-@ZNnFh+19D{FX+ltw0Fe%WJIvQ=L{ zo%{pHKA=7(siQ5-j>%-?5~gYI`}a0j?DE1~0u#;(b#=|{H8nL9$K_9L$nZon13d;a@J?yOe3%o=n7&ZQmcBX+)XiX}ZpTlD0^GGre9a+R*GuJ%Rj zHNuXK^#1;EzF&ZO>Ot$}_^7CgKC!xrG9Gb`^(GFxS?zH{LqxbL@OSko#VR(`whG1* zhR5ehUS))ahT3jjnxCm`+MU?m+Unjhod6^5lr5AsEZeJr>-m>>ce|q}*V#l#+CoA? zeEh1_&armP0sl7^2XRD%Lzq`z48&vsaFP@2&9f(xtR zvXw7*Tc3@#K5Z~(Z+gb53=Xu4qNs&B3J2ma!jMcRw?FYEv2bX#U}(sA_4(uCNW|#e z!t&z6-0~95@CDPaqWwvxt#4O6x3V%93ZS|f`{*&gBbJnrv0L$Vc9vvQRxhHjN2t`5 z;c&Rxg34?F@&$q47QMgN`mW2v>oE!hgNE|{#WxkWOl*{lK|rnn6z9)8TGZ@bnyJUo zP3LFZDS-qI450RqMBed{of{fZ{*W&k2~Y+PrRhTsev@PDPx%-~Xx~vIm7ip|PR2FK zxf!cMVbC|#^k>^-y}^x68Z0=7^+IuOygo_iXy=n58Gyqasfnz9hfH`$Fj*>q0gIAh z={vg@!zey&K$8ZlQ-t2cnbYjO(G@->Eu&vvzy4ihn20wkq0ao7*EMD)hiziqH`ZI4u(#F_nmKcG^X>WhQK^n4k?NY7nm)U-!hCvN>KCA7dyp-+d0g%$yr&}(tD}hGWobM13=B}o zWFfh^2G`|U>S>I@V9xSt#Z=>sg_QM{Py|eDqckxwvEO3GN=yD_vS%_W3vZ(drdO64)#?zW*BAm4?KGC-~o@f^4GgH&Lp|D!RRR0eECazkJ^I;$xp7SpXP)`5w;T}Z4$Dd&_F)?DXIJmq@@TrZ# z%UZfC`>+gk_!OG9wpbyDI1&&yU3aCdOe7MqK5-X1MQmvLrqSQr)u)F!gM)+O>FIRp y`s9oZkrV+yM<=%m4uI-N%6};Ozi9m~F2TZXRn;Bgh>k;$177X~xBK`*Ie!CJBmj&6 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.46.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.46.png new file mode 100644 index 0000000000000000000000000000000000000000..bbf1531726a2e4bc6a5e43c069c20cc6135b91de GIT binary patch literal 1501 zcmZuxdr;C@6uv~ZshO3nmFqhVr`+7g74re%q9!O%SeEQm5|WmwC7X)RHQn+_t(j5A zqtc&cSyqz~i`JT&k?2~M>4d0hx(eg~(u(H(=+B+KGxyvx-#y>C-@W(DDWsA^tt{*; z0035DI|#b~Sac2c{g*C+?USh0zVKq6yklPq0M;?4iKxXv@i6GX4&KYAC9&A4F(+a{ zC^g(UG%hKHopR_zd@|eFck_>!z9V-|0bs@oBj6*`s#NcBr1cT@Po}5wr8(-=_??T* zqtZ%I7Duan@_s$I-hyZ`dCLp0Hd`vjB)b)qDubziy-?cPzQMPKMCLURT@qYu8#-v7 z`DY28a`|J{T=vb8fDO2rBCn$-4@VQLe}^Sqn)Mn-0FcY|2n4|Inht>Rk{%=wZY5fS zTzT~57uDF@W zUmTRn0Kh$Xoh4I$>=HCKHag)VZtL~>=A4Bkfd$;<*4C95F68lpmb!$5h9)H@=J6K+ z;okW{g_oC?r3(>n6SO!3G9sF?j2rUrdT#neQq4g~;N4>QkF>9PQ=&Kn5AVOb<&@I* zP}P2~bJOL{+2auj17o|8PbzmUWX-+}CzG)O0iV5JaGh``#8s4H%$k9RP)*Go9cNoS zZ!~l@>k&Y3TGG=cm#e3y*lhMQM#Iymcz2th_wQ$+c~p7`gx8r5)iAy zUwJQUxp%9#x3@p1dvLH>BAI+uju1Q>895Xc^>%0|Mpe^nV`D=ik!s@oDx>{o$Yb~4 zC7^jF?IShu9KIds_Ga>>sr{b$$+Iqorxm=M+c7j64T(gan8XyT)oPJQG&D5y7+2ap z(!oSu?hJ8VDMn4)L~D-i1>3df<_g5LxCwt_2-+*(7mK~{9R)?^kE*9S0>Jh!SsZw0 z$yP2}?4N<>$`Kx3w+dRVsaEn2tdC>2WB(uJ3XUZ-?9Pv@fr+JI%xthCfYw zWYwnd?u^_x`l0BhEZ)r&O%3a8GHBYG&{`sPTE_AJiUq$j$0R-DzpT?of2Ce{aewOX zHvUVa=<5m8%3<2kItFEIp0>_tG@4}8lIHhlM)Jop$9wb9NvOSDp^G zf8T1*EpPb&u4wodJyu^0Y>M8u&-`>tS6A0ia$0Px`}lDH1Z7^;mc`!X)TvsQP zDL$uN*1pfg3J%cevX9!Hj1jmVYnpVUnlXdHAa%+=^)?cl*C>^$rk(9UZvE=YroUGP zxI+rj9##2_f+9tNxUkrXNo+i2sv<*G;KzVq4DXBKN1Mz$2M!0${*H8_kK5C|730Ct@V-GXR{1dPoT;NmK66Rd8km_>(kI zZFqp1sZZPX__sbJa3g7^$L$z{&KlI~l^NjkFq3%aL%ttlp`OuDYjUi?0bcmTZU+K= zoe_di+`0+W6>^>5nTO~ZA`8BwWh(T>(ZRvoWdjOjoSpUY@i`xU_tB$^WC(sR2!bj+ zYfFPfD@sFB#8o#*4y7R!3Z=r+48+;0i8vphlUZ3=$4x_&eSS}BOQsnwd_#H1;y^PX zEEE?{DinN5ija6C(t@)Xjl!B^z;dp zYPa4FgKg&X`4Wjl2mw$V)vU9$w4~GNg@oZ#5I(oRzdz3r0fhT4HOJsKwxtO&@&7mJ Z0#c|syE!RAU5Ee`()CV2R`xoEC!wdib literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.47.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.47.png new file mode 100644 index 0000000000000000000000000000000000000000..d7652ab90e5d1cf970c7bca4fde63d85bcdf730d GIT binary patch literal 2017 zcmd5-dsNa{9{*wOFlC`U^PiwsdI06;S$5AKg+em^&%_?xE= z*)va!JbE$evHI`7?AQ{r>4Gf(u@CK^{0?dal-2)dmrqk>eQNGqjkZotHs<;MobX+7 zk5AM!nDtbI-ral8)~M|^m>b5-OSmQ%^IGo$O>S6{C+E;-fcvkhCIkTN zK5*C#xUvHS9BeTI?zPX?e4X+eK=l?=(pKbH)^Ru-tyar&E2~|xs3;m4Yp*dDSbLUw z*g5~YZ(Kq{@t=M;BvB}WMR#CY`en0ox-y{KX7FoHkHV^NwJOGy0? zYwD&_Z!VCVG9kcH9QQB<{>Wf3jE$YJ-BIdy`umS&+!+}eY25Bex1SK+l}Zy3$e)D5 z{E&L03JRS0;i#T1C*K;QU6xWvmx$(P}M_PmPWq=TTV= zDE<*;0k9Ns%-0SgP0u32S`Dfh3wn5bj^4KP!~%*2ouxoNlEKZV1$wl$hlR(&2@UAw zg@FKt-8zmeT6*>BLB-JevN-so2NiB6Gy!@QJg;5Y&j_h6QiOG%qm@G<7JT6k9P^dmtG&`J>&)p3aYOpyzhZay^ri9sQv+i!M5^fSy}t|PtCcl%9|q@Gcz-<{eI}e5nqBv2NIcFSHkP0 zGM7_Q89|LGPy(h5zXKBgSlvvZ z(6#ZTx(P2YFL?Nst(bI{LK8r!Xjw;$g+rmxbRRCSl@qtYS>c9k5yi~=0@u{F$mxgK z-;EMfFLl})|8F3J$<1G#7pr$hX|g3G;poD`!u0eh9(6Jswad7;qSZeCIp^%zvn*C8 zSS+|TrT1>wRvqHu7S5c_GPCL23}6~b3v8z-u+(yW7X(OcGw&PAxYL`u8&ojKmWjp0 zDNoHDeV~)wpbHHRZF-g#?8U2aN#t$(sPtU@-t(rXC?YvIAt9JW!p7qpbgr(h#N*ey zJ-^Rbjb;bYpF0L!37>dA@t^jA_pBb1;hclpD(MWyz_u%RE`rduL{GQZ5XfJ!8VKmI zz7Y%P6dy%vu-vj}4DEb8 zWn;wyyWKwDYQb7g#+EF%*~;&T#d|StQcsXbQ55M&7L5k#s~=qL?d@e9x=%Hk^~##m zG#-zKx8LyO^ggT#jJ3s<>-5C?1Ldu}P;d7XrxSgCj44*5hn<^VD&jy+bUMmg%7N;cA3kwU4Q*vbS>in;yJ)i(&wi~e!=^KBxJ}Q9HUASVM1D%sW?`K+8>|8E)M;A2~?&s&H zhugyCrxh9z^IZ)55tv;t_HcP<&riv z&l4yV#S7&+Kuph?T2n#@>KpAx=V+5^zrq0j3E2MsNVUI9=*j#=pe+Q8Epj^S;?&{n z3F#i=ZJ>wyp{u;SS1M9CY!XdT7t8ck)^|U1QqE>f9RMyi1$l7ZVm<=CJ)YDGEqQzu r0r(ILfQ!+3$d)g`Uh~I5hZFMk5q5P9`f54Yo`J}4{K58bzP<2YhHlic literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.48.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.48.png new file mode 100644 index 0000000000000000000000000000000000000000..4593326fe0d7b6f8c4bb4370dd09cd791b7163d8 GIT binary patch literal 15196 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 nE=d9%r7!rMp~V>ya7_YZ6 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

~%0%YeGsYm? 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 RdN>?$_qMWZu8h%({{tP-Md1Jd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.51.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.51.png new file mode 100644 index 0000000000000000000000000000000000000000..52244d4a0672d86a2977368c9bd3016a937a23fe GIT binary patch literal 17350 zcmbun2RzmN`#*k)Qi#aRNFqYW-ejf77P7j{kdeJrZXww#du5BPY?AB_+1bP)^JI6- z-*t4~pU?gI{lEYJ|NHxW&*RZJ>pfoMx}MMH^}J4ys`8x+_?Ph!2*icE3bN`5#OX`~ z;*{aJ)9{J}^>Z`$=e)gwt|J0L{0H{Wsa(k%OL&paNlwQ}!_M5v^$!O##2r;7hC7e# z9Gx6Z94zgf7=$?a1;1Gp`ymhvh`X}4HQka{Cw%Q`P|1=%!=j=O9B8{JUw(_D(7SQ= zb^7OxTeMo3Te>P&l||mV-b>z3nZW7H@2`!weq)&>T&3o4$Na65-gvh+Ug3HBoG-fx z^4e9xuL)SrNcVKuKTG-|H?JU7%By7(!1S=~>64Kt*(u3bPH9P(D~e$c`j!qazkE6r zma?!}_+Zb?*ZafucqLNqK>3a*oX!{FHiFCF4xG{?49giHfoB|s7j_nPWi!j4UXx?| z_6`s64ByY&<9gHd!Z98Kk;~A&r4+t+3Xvu~^FutU!rIa!VW=>DaZx=0M(aJ*x13=L zeDBz4E~8dkaRfq>%GATg=XgQ#T0ag#%ItRb@XmZ<>aiG~W{nV>i-LGzkzaw7pU>-$ z^J^72aH<#H9v9*RmY*W7AP{WlcG$mf*a>%{Nx0CXbZy)n@X0gW# z1j#a94!KSmR3~#!^p@}H<@$B`6oZlg*(YU*Z?F$lyXL3hhj@UP< z9TzqTZd}gN;qXrHtasrkGdUmh&3t#Q7TvJFR=Z>)RAg^hWNBa`KnNg_cDgu$F&d^`bQK90y!E`HW4km|H+;lH# zptz)G`wk4flO_o}4DUSZ z-SGN^JUZNu<1$M5z)c$TMk)JcIo>BPH8J`)Cd=8@kfp;i7-n-@+qIREvitY%vuhV| zFum>V-KJL=CieN+S-)$jX4%?DuBh-?K(u;8)5OH&`PExQZPqTYuP%y-#?Jf-)k$e` z9G4JwX}Pu0>5a$E=g=CW5r96xU@-R+1$6T_6gawJ^&zMpMqY{QB0q;aFot{jR9sgJ zb^%2wd`3CQF-Dx0!N-l1?eN~0euyluH9mi%LqIgOXJHeAPaO1A=)W_yD<|im#xB)o z5m*0Dp6I5iR8iB?>X#VH&2Ox)ucvi7P6V~KwFN2EUog?;u*uHO4t#8C%5*t|g0yda z_JS;3R8*9IPbf1}mf&^~r(s>LFl`%o_y6~ZM455K3a};KW{h}jZOxmAOo*UTf%A^k zdkUfzI!C{~8Ch6fUf!%If9z#(3L)iQ`taQghG>yj>eD*9l+I|iU3zEq$Q_QJX|>%H zJI&VyF*6qNCF}$B#pi@nh+(2l+qYm<$-h+kKY5bt8CJ7f*qpv5K1I^S>o!ooKtpb# zZT3sodtJ{Xi78*wW-?$g7e9o&yeE7yp`F z@>2^ClMt^7E&Sx`GmQihq6~QoNRfSL`O7U3A zTS)ONN>86rIhs?EzjJ4hCRNz+Iz@1v#gt+kr+@Q|<3jg4gW3mKBfXh-RFXxq)Z?}$ zT&KJjl3lH=tvx+F1~N}SGw$N;_ucBfBRFm^Gry6ScVj!F-$Bh7De{fOprkw=!qbtF zf_nmbkch z{Qj0iYH@vieP*T%%KzH6Ycuvbn=0C|MLMHON=mq=pBEJswYIiOON+QX$?CZS_u%dQ zAjTYS^iPP!QDMpXc2%_6Ld7GuUcTL2(Rn$`|GmVdEqpPZ(Q9upXGyPi9xq@$Dy!MG zp-!ck{-qi!e$lRW^+RD7tja;+?RGpvofMkf5pok6Myn@JG%Z_6BfY9}KYWNCUKx;y zwCuJ;b;cw#Kh>Y9GjIDA)?H>o9XcGyafjzrXH%(J7yiLCw@;};8~T9lPxcMOJ&ud# zau0SsKF3*IUF{rMOHWUS>E^7sZEd|Ads8o#%c!V&%<16Qy1h`LK4bXc+}ztb#d4oR zkDc7oJrtKOrcaS8%YSLz4d$A1jJ&N~x8^$)tXvM!h8nra!NIJ9x~H@9+cRm54E;FK zZ}xWgfByWLeLrzdz_3{GCQ^?hR*HdJNGNwCY^5`XeF>S-`-3Ib%VElUHxEskB_9(! z@dvB|(M}p=Yu6pq+d^yC0@x@vAgfnwxab$?t{f7l&tQq0-zx+*F? zA3sVhkurHAk|AP6*TOj9-{0g>Ba2u$b?;m}eOh72>({2@f<`wi4PTlPt4hNrM|CZ4 zXB+m)$HdQ@RY!_j&Ek;J6xHLgYQ%WjN>Hki1+hA-r>j0THvT^8iN0x|if9e+_IT!C zTF1xLHC`s^xl`CY^YIU_XWu)@)(-!-%<%GT3}x%=)4P#;1-IV+M_O=5&aRWWOlN>z zcRHNLD<1bmlmB~hp_{ad^Sl0Y!-R&0dWg}ZQsZNuhS3T~K5)#=%4(UhFML>${|%ci zv}zu%;0ntZZL+*5DJb3J$cb$v$Gu&K5Xh77u6nxkGg(qnveB~tdT>hyebCiEQt8v` zOwF5M>bux<-;;{}n)VBmJaSu#gk2NX#w#kSmmiLJ&CwCog~G=@y<~Ix`Liw*Y(~XI z1*Y!~)r=7e&##_2eK%vS!Tahv^HJCp(WZ&X*aYL{AMja-_8JLrb?iFUiOF%N?jFG*Bjyp8qR#8)AI!gK$qZ!|Ew6)lOcz9?T_X7uU z&C~;7;9hTtBWBm|jVJ2x;NU=!tNu^N9fW)P=6S(dSM)sHU0oU)-hD4`Z|{cK*vEM$ z&+!F#cp`V|+!-B&Xj?hMq6E#HZyMBWjaFF8nwE`>j*i}=i)&gPDZ7Iiv8u40tgHUB z>8Dx6!!x&8oynNP7d96~MMZfV6JG`d2tN7tb$q;V;}c|F9S-w~hlBeTi?6bf0|S~u zw6=D3#l^*3Om7DZXaXNk)Hpw|j=IMSK~I|T!-#+LAB3I%Y9r00Fh5qhoi<*GPHO2-B%O$1+aIlhmDhuC=K1XBmfH znR$o@FS4ClP?@e_^HR{CBTpU>H|K7A+0v`DMd}NQiH*Y*9#xPNo;4|XGjF7YO&>w> znKSlP*l2vgoG>VGsMv_>939&Qof=~-GG&n@Qm_06Ccvk@wV76*@pCoF1Pg#U4bJ#A zVXx`aAAcoZ_cZ-it^Yxu!H!*rOGL-UxkFSM=1)x78qp2>g#=^J0#ly8vXIm2z5<+MM zJ?afn6H)xV8alee3AB%PyVt2SdpPL<1T(TsF=f8X+aC1-iT97(;i?1@Z^kPfZRJSPUAYo> z{Ql?up>mGnqel$!N<@T&LdnXFQ!28C#kp?kw>=Jh zj`6N|P1_5Zo0~@~Cn;O7l0j}>cM~JSztM%Rnho{CBc|XnL$J~UFtmW^zuMq#sP*%} zr;*{@JxQW~<{A5oy&-~=RVHmj%$dO%tW!Zu=U%YB+OVykLi2)W&w{7B=IB2V0xbA=r7Dy zlhs~0>qikRcQo=upmxF*rJb3XxpCoh(#o#hO| z{?D3SCDmPeKC_{6J1eWD)m3C6jktio{3a&aw??0{_3F;bNdNHga9>{rhp^W#dsZ?? zpk)u=IXt{?eJu>-P~8`6;nKomJmgCnAtpPdeTyi%Yo<8>9;j5Lxucz(ozEdcbf8|4 zexUx&gy+zV>aL;L=PwC6f>U0OzP`RgG)s^SllN4%fAznBPsb4_UQ+Y*J

+3Qa| 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 M3;WY#bB`PU1=Ep?4gdfE literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.54.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.54.png new file mode 100644 index 0000000000000000000000000000000000000000..3134e1a4edd941e59a07e8acaa1f76cc19a5a978 GIT binary patch literal 9247 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 SEBK`h0M{|TTlI&-v;PB}ie$6^ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.55.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.55.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c236eb2164af7fa3a7b5d25e48786eda1d877e GIT binary patch literal 30319 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.56.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.56.png new file mode 100644 index 0000000000000000000000000000000000000000..59c8f57c28c3072af51741c840fa9aebf7a150c9 GIT binary patch literal 29108 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 Q9T!Q|RkW4M?_0n65B#g_yZ`_I literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.57.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.57.png new file mode 100644 index 0000000000000000000000000000000000000000..07e0996a3032c45616190b96332c3968953ac9af GIT binary patch literal 34255 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/DEFSyntax.07.1.58.png b/lefdef/doc/lefdefref/images/DEFSyntax.07.1.58.png new file mode 100644 index 0000000000000000000000000000000000000000..41da2e8cf49b7c83be74f1712d9aa38e5c58e2b6 GIT binary patch literal 5597 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/Diamond.gif b/lefdef/doc/lefdefref/images/Diamond.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cdafa3387318b1d3581c1b7f4083a66bc79a0b8 GIT binary patch literal 92 zcmZ?wbhEHbC%M@ z7fzizb>P5(b?erxUAuPPym_-`&1!0Ds;{rFsHg}D3Gwvwbai#Lu&^*OF;P@hl$4Z| zkdP1%5a8wI<>268VPOH954MLUgyK&YMg|5&1|5*;AU`p%SsiEyV7Qnga44mbDMM~@ zqsQ`>E^=xzTBVaGWbB`JbUN227P({xH^q_+dr`J4clSsv$Yoe&cwjqcfFpx70FDw; AfB*mh literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.01.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.01.png new file mode 100644 index 0000000000000000000000000000000000000000..96e4a32e8562ad189f07e5b780dafce3623d079c GIT binary patch literal 22038 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 E0AF`jq5uE@ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.05.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.05.png new file mode 100644 index 0000000000000000000000000000000000000000..faa45586d350861b66940a03a6e0d970d0b2103d GIT binary patch literal 48535 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 BcNzcy literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.06.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.06.png new file mode 100644 index 0000000000000000000000000000000000000000..99da6b433f7a1d0a57fdb8a2aa401f8a7ca29d03 GIT binary patch literal 7442 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 L?n3n+HxmB?J$9|$ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.07.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.07.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d66453710123b0cba696db3124e4d62ee30a17 GIT binary patch literal 13083 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 C=By?F literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.09.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.09.png new file mode 100644 index 0000000000000000000000000000000000000000..d230a0fff094e5fd428cf6b5e6d792b546e4ecd8 GIT binary patch literal 23185 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 U23ws6Krx5FbrCo7b?ig`54q**761SM literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.10.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.10.png new file mode 100644 index 0000000000000000000000000000000000000000..ba14141f4316c47b627c3391e11125811b02c832 GIT binary patch literal 31401 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.11.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.11.png new file mode 100644 index 0000000000000000000000000000000000000000..f89ee478723490f7f176bb60433985c8eb64f9aa GIT binary patch literal 45704 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 ZA*vAfR*#7ZEBIlAmYSYw=~bKH{{ri!>Zkw! literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.12.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.12.png new file mode 100644 index 0000000000000000000000000000000000000000..843f4e79f90ca56de907555d7d77dcf5d28fcb99 GIT binary patch literal 19788 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 E09MUN4FCWD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.13.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.13.png new file mode 100644 index 0000000000000000000000000000000000000000..eabe79f825b9bae6b2f3aa7f9ff24cdeee43b86b GIT binary patch literal 5944 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 Y>)LcecZ)e48YTlTe6?y$=djJ3c literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.14.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.14.png new file mode 100644 index 0000000000000000000000000000000000000000..36a9368f6ed9f5a07d9ae98304ab5d2de260e29b GIT binary patch literal 13244 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 Ns%hOWx%uSf{{YLxMJfOQ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.16.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.16.png new file mode 100644 index 0000000000000000000000000000000000000000..014ad49e9b73ac37ff891644fa30f242e27a0b2d GIT binary patch literal 14207 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.17.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.17.png new file mode 100644 index 0000000000000000000000000000000000000000..117a6a3603650340d15a5d918eb00b19b97b0e53 GIT binary patch literal 14513 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.18.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.18.png new file mode 100644 index 0000000000000000000000000000000000000000..476fc5ef515c3468ef43720c3b0ce3b657313e57 GIT binary patch literal 11045 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 M#PTBUyj$$Q0S_fDM*si- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.19.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.19.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1d75c39c2471c6f0b48ad98670f38a7ccbb4d1 GIT binary patch literal 12083 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.61.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.61.png new file mode 100644 index 0000000000000000000000000000000000000000..bcdaad2f1d80596e8af30c9d0b2eacddaad23b9a GIT binary patch literal 34864 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 jx`FXO_XPg$>W&*iNwzPN!mv#5mi~{}-PP1<3 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.62.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.62.png new file mode 100644 index 0000000000000000000000000000000000000000..77bd6fa335b4fe4808b19fc054dd660a2fec17e3 GIT binary patch literal 11706 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.2.png b/lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.2.png new file mode 100644 index 0000000000000000000000000000000000000000..6581a881438f2851d5d87245b7a005be6c6cc3bd GIT binary patch literal 11067 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.3.png b/lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.3.png new file mode 100644 index 0000000000000000000000000000000000000000..6a02b8339ff1b7f0264423395497ba6e023623cb GIT binary patch literal 5903 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.4.png b/lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.4.png new file mode 100644 index 0000000000000000000000000000000000000000..eecd7a0f255bc1495b774aebe5f07d84e1cc4be4 GIT binary patch literal 6689 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 Utzz8Z-*g~Gdgi+L8_tja2j7z6-T(jq literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.6.png b/lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.6.png new file mode 100644 index 0000000000000000000000000000000000000000..55b21b53b0b87b6cda2297766971029563b2a4ce GIT binary patch literal 21317 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 Yc=hI*KzS+e3H}013@yMogTE9114a(Avj6}9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.02.png b/lefdef/doc/lefdefref/images/PAE.10.1.02.png new file mode 100644 index 0000000000000000000000000000000000000000..f80e20a16572cd734e677c89490f1d13f5c8f730 GIT binary patch literal 5403 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.04.png b/lefdef/doc/lefdefref/images/PAE.10.1.04.png new file mode 100644 index 0000000000000000000000000000000000000000..538f956ef50be693a7727e87d339a980dd0d11e9 GIT binary patch literal 4136 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.05.png b/lefdef/doc/lefdefref/images/PAE.10.1.05.png new file mode 100644 index 0000000000000000000000000000000000000000..a479953c995ad91a48925ce05690727f71fad299 GIT binary patch literal 4934 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 CJDuzR literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.06.png b/lefdef/doc/lefdefref/images/PAE.10.1.06.png new file mode 100644 index 0000000000000000000000000000000000000000..33eb344def70602832447fecd961d85038e53a0a GIT binary patch literal 3877 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 b?cF^&cUVT3pIiiLs6r4^Ym@3Lw-f#iiA169 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.08.png b/lefdef/doc/lefdefref/images/PAE.10.1.08.png new file mode 100644 index 0000000000000000000000000000000000000000..a7280973299f13ad17a71c1d01444c426fd3e1b4 GIT binary patch literal 2688 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.10.png b/lefdef/doc/lefdefref/images/PAE.10.1.10.png new file mode 100644 index 0000000000000000000000000000000000000000..07948f863be01f897c4a383767b943e786ec862c GIT binary patch literal 2456 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 OL{m-gam7RXnEwHAmpLH- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.12.png b/lefdef/doc/lefdefref/images/PAE.10.1.12.png new file mode 100644 index 0000000000000000000000000000000000000000..a82866dc3a7ea80f5a50e68e4251a86bd6b343d0 GIT binary patch literal 3225 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.13.png b/lefdef/doc/lefdefref/images/PAE.10.1.13.png new file mode 100644 index 0000000000000000000000000000000000000000..ab20c6955128a9766555c6c61c084dc6b28dc358 GIT binary patch literal 10623 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.16.png b/lefdef/doc/lefdefref/images/PAE.10.1.16.png new file mode 100644 index 0000000000000000000000000000000000000000..2b42a2c7637caf1444898def64721f75ddfeeed1 GIT binary patch literal 3509 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.17.png b/lefdef/doc/lefdefref/images/PAE.10.1.17.png new file mode 100644 index 0000000000000000000000000000000000000000..919701bf1a5f843c3f049821eb3d559e72b978e3 GIT binary patch literal 10368 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 Lbkxf4JbCqR#cNwB literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.18.png b/lefdef/doc/lefdefref/images/PAE.10.1.18.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b8b167a78873c29f11321fca0d40a7b01d5ecf GIT binary patch literal 3792 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.19.png b/lefdef/doc/lefdefref/images/PAE.10.1.19.png new file mode 100644 index 0000000000000000000000000000000000000000..0351435b458a0ad555d27ccf5f2ac322be0ddf3b GIT binary patch literal 9570 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.20.png b/lefdef/doc/lefdefref/images/PAE.10.1.20.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2f5c749d5e38b1d98056b81f4eeb21245c5247 GIT binary patch literal 9732 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.22.png b/lefdef/doc/lefdefref/images/PAE.10.1.22.png new file mode 100644 index 0000000000000000000000000000000000000000..601a3220cec3f0710c88a4f058ef5d0d15a82a41 GIT binary patch literal 7239 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.23.png b/lefdef/doc/lefdefref/images/PAE.10.1.23.png new file mode 100644 index 0000000000000000000000000000000000000000..4989009b907320d13a933a89ac08189134a113f9 GIT binary patch literal 7984 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.24.png b/lefdef/doc/lefdefref/images/PAE.10.1.24.png new file mode 100644 index 0000000000000000000000000000000000000000..2b0466ff35f96f1788f143feed0cc18443200084 GIT binary patch literal 8006 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.25.png b/lefdef/doc/lefdefref/images/PAE.10.1.25.png new file mode 100644 index 0000000000000000000000000000000000000000..e563c7e82f5f18dffbaceab7d0095272d2be7187 GIT binary patch literal 7994 zcmc(Ec{r5q-}gwR5G|s}a?34CmLe2pkUg5n(t>OWS+Whrp0b7{WGs{Yw(nz^hH5aC zTS&|>Gq%Z=Eg3U*@2UHJpZ9nFp6C6&e>}(YJlAo|G1qY!=XIUm^Lu`_EB3~9y(8@W z><|d#h=IPgDFm`F9|B=fJ+u#8aS{=J2EGnI(!cEkfpFXHeOUg06}y0og1$Ppd~bR> z`TE;=--qbkFcQ&o_Vn@faqxC|z-MA(vByV>7OG+(XjPqme>4VQ%hf_FSw#yg1&5GR5 z^C+B`>d3;1x_0px>pl`*DJDkU)_V7rRliI)wZT5ia66KxZ|TQYCpz?njP&8(KP8P; zrEJCIwH8T)eu(BS(JvbSa|w85mh zzkq-OXC!p1PxA{aWFK#Q2a-O1H?4un5v2AMs|&6@PVaUi5D0v{yjO%aDq z+?3MO(`CB8hq5yh!I+%w843?%ty}7AYbP4ri0Dyg#lgWrE+I9Q@-GZt@EGz(^SDQa zQA9T-Fiv{_jw>Z4Wynn_vzx2&E$;E&2!=|T*(lWUq^`-I{cxDNk`k|nK~QgNH3tNu zZ;wQ7OmxHxCQN_MKEeHI@@I_$p*>@b&n94eZJBoNde$jKY|wEq`BMkO&eIa+(`r=f!CcGCOe zaP-%CXJ@CAlhgZ3t@2+(Ucs{ZI@CP<-&}6A5dR$mEHRN|B?S&O;VImGdfKJo4$IdA5EA~yN5?|b*$WZwWQ==e z(dGIVh$=z8BD+&@dGt2y<`&~jp zw#VK@s*A7D!MbkFE0~){TbSN}?ryCth3#&(t#^CwL$5d_sViN&G(c@_ZeA~xTfM^7 z7P85R>L;v zxbgj+$f>CDz>#pL>t9&k{&Dy2UF@TAEt0uyxOa2b{oAal%b?HlWm64PyC&~c@FIRY z#bZs3@5rO6M85jSzljws+(1|X$@YVAF7jk^W*(c-GfGf1Xxq9&7rg+ms#JI?Uhf{D^Im@ zO-o)H76wB{pFCM&kVr7z$Gef=DovYN)R_lTGhHcRTsm*^N)8-^4!yj&{@I{EFJBR~$PI=h## zp)RPw<(1`@%Emhtj30x3>e<)*xd(l$l{1WnG43d*q(%U8wguL20=$sO7ToWd-56yd zwE+24Lt|rO>lRkt~cLuvMj z%PX&}jJx?$KtLcaFD8XaTJW`oi>H*9B6BRIQh9W|&Jb$L4GSk)DrqV^5v?luZNGzk zjVQZy9x+dW6=iuX%u?sBRV zZ2W=^Se|$k{~i*UL)#YKx1G(UCH3wQCiR?$N@S2ftutYJlgWHF z##kW7<;`~<2wj=#K8FtWKI+pNx{bV;G4C--BF%)vU-b&3$ap>u`t~7tu~VM_pMkvf zctB<(wk`hdagG?oPX`UoXuW?ICd~dskZ&rx61NB0|33o!Z^bybd!z$nHtL)6b{xcrSQivN7>nNBn%-nC2~VjWoS^!ThRjtoR$5~R9Z+rC3!ZzZWp|3T)b0bCr5d=z{7T{_k9e%+Am^!k@;atBoL)CqynHQlig zSlWF*<%^=+|6X+D#%hbkYUg2Vm_IgEwE+Dc6(@Kd^nb|qw1A*rUE-DSM3?X>E0~^ zwdWB_y8VD2C53?Y0Vw<^J~?U+z^7dOlsZbpH|*DUX;xFt};6mQ9$@$Vm_eQ9gzrs7jx6R!AzkSJ{rBace^5E`yf1$cfDNV(mO^G+&-M=0E z(J{(YtQBCg1VI`?Mnf`GYs zP*2+Ch=X=UQN~BdFSGTd_P4>WQAIrKLGIH~{|g$#gs2q;%o>oB{uc^Ts#8!`6RJdN&9E7}L}- zxt@JxVEMeZaO4t^8yu4Zx{@-GuTMS+@Mn})7#O!+xH2ZpS|Ln+g zvq}+R=Av<3Nc!lmWanZC*;!EvBl&Fn#j_ba6K1hnYkfoOKO=D=#mw%fPoE|}=Sq?A92;6L9jI(tD& z(Rhx88}OqpeYj&~_2=};g3NO`^U7<9xUkYMepGGI!Y_&W&*eqHRQTj<=AG62 z7qfN)92@|jgocEKbg_)@lprgshLR7hGJa#G8tQPG^Afh#gKf;sdsdK3YcJ@eOPqL# zRKtZ3OwM$3rS!ofd%2_e7s>vsx7c*MK{xyKs55~W6Nvil%6D=$EG+c?{YkJk3JMCj zFB`GWD2pnhD*tx;bJ}uK+X;$*L6Y@VU&jV?tskJO^T?k}E~1|xVVO<1hU?jDAc_nN za{{MMw-pY#RaR9I>}$Hx<*Lfd-)#Ntq6R@`&@`0=zTa0P3ka2c)Dr2+raAQ^j$g88 zK$kdy>A1Uh3%e^TD>q^=7P9HnQ&a5_9D`+j#~_5hB#W%pN6y>lO!oootKs4tQeAqp zLR|`NB@JnZ1VUp8ERrt4N$C z8W7xD2xx{2JF-^)p`PzFM_@H#T*T5+m!5CL0BCT z3K)x!X%nF~Mv%`|-fL@}WX|2&-2j%r$IWdX=;Q?tnD;k*e}^Ynqt{^=Uj{L++w9AMKOG;QYpIO37LO`Mo7-#L>PIL-p+bnm?+&?U2YyS| zi@G_|x+r;Yxl?1z4Ok&8TGG#2+1RIdRm3;S?#W#ZsnkzSb>oBKnwiI|)b#zZqj`HjE6gpG;FOEBmJv#rJeFc!B^I9Tx|JQ^&!jCH7Iztgs zGYEq#8ec2!Uk`@PYgI=(qkvDyHaPW%nN*>KVY3w%_PM&I`G9GOViPp@#g5HM_5(dD zq`x!NlK~3b@$GW~J$*V#Q+TJhowodLbsXH?(0o8ES3?*YWngaJugHe9=Z@*H zr;l@|xS&c)Jpw7OK00E8Ql|q2^L??&be3L4cWg+_2w_7Vs`k3kN|rB)(5U89e?Q-y z3a3{MxRqhZhOOeYCnp|P|Zv@)dwx498lzH-4rNpQIV_2vu z*(zQW?Xf37*+LharxS%?Pzt}lv~mBP3JX1lhC2%$^J6WQcBcwWOVIv9{^b{HpREdWze+&h{}Df%tciLm|EqW_dNy944TRwr98ZC(Qv1G(%a5*|KZq&i@+If zMFaq;cQ>btfFm!XT0H0@+(|QTxk18s$5TVj*BdRKa2VapR8#pqBZu$jQM z(rC0#*NLaDn!E(cxv@u*3@0~mADRnAToc>2Z3u&a^sIbCHB{}b^~{LGFJ{7*9Xjp` zOPBM=R#j5!j9pjt_P3OvbokxfyCqEpXvTS|>c)T^V$USzE$(%G=&QwvGiL~NJpLdb zp78nis4-A~yYz6IJstcvG@J&p(4lw3!^3HOgwZB1TI=TG-12*JqvsO%xVe@0D1SHF z5DeQ|v{B?wXxo~UJ8|L!?%d`EvF)?|=b-x5)*WWsZU{jqWbKEY*W{dsFGwwbX$>ZP zR8m&XVJ-NBKwcZmJIu^l(geyRyp+N4Be?1%VkXR{r#aE)-f0RPm8jIv^S9c5# z-C9BKQfhI`3is6Ak+Rpj*t)H@0$AYBZyL%m#7gU+B^)yc`MpG_->TVra;iHM=vHrpJfu#ZudA+vj!h@`}c^2i@;$X&yo7euz4Knw(0mmFs;LP8YH11b4=BVwZE)7`Tv$nB;J{r@| z+Z5jU5e<^CV1mx}C+RA;%SYm`X!Jlg-I)FWjpm3|%$;x^ogos5^b-pdpbLtHhwb*8 zJ9CbwrscIU)juLY10Hz5A?iJl3s`NwV=1@;40$BFNj@7A5&(N)9 z0_YRq)@y_0#y_P>k8VvV-~OrzfWM{EztOU6V9(lzy65+;z2gq;rFz^R6lrZH;aXR+ zm(E=FF2II3IMDVInZ_!jCUs+DgHHGL-`rybFgG>}(H3A!HN`@hopv{HOt|{0SvBDd z#(gOOQqLx+@@OpMLC#@BTM#xd^xb?|_wV<>(b%R)dX9WlzkViX`ZU1S!zN&27KR z)yu(*p$AN=|Gnz?4G@)vY%VmiX8rbfJ3QRO6Sq1j7rGp8JG~cagR-PWh;8@f>z&lO zV65;q5JX*MM7Y9BJh*fTw4%)0K>ny>W0cqXx2xralp0;uMG6y;5#P&g4PIe8KQa#X<%s9vGaRF?OPXoD&I zg(kL*9+{b$05@1Z-{1mYiM0LDF=^6?-5|=xlyj``4S+5ORjlxyS!-hV^a{Y}WPL|_dr@=`woJ!0axIabxe-O?zaL1)z}>`74NXf(dbXzKZ*pkB#5ymzYTjMwHDV75Psl&8;HAyM!>0 zxID@beH)G>eqU|*Ihr5H$rF#HchJ206+s60!r`X8YfDP2MVVwAFydEo2K=ne!6ZP) z5P%tQ9hh77y&{v?KpUJ*6>)CImZN9oV#c$XQ-4^LCDPpd zkIO%)VMf{2a~nB_ecG)$8sm6zR_?)tV6Y}2^EMI(6(;eDSS^emSU!C+zC&B|H)y^p zzb~s>anMbXm_H8H$oqn@q1j57KcN&@_Lh}<_Kr#53`EhA;=ICzYYO}csG?>nX~a$p zN2;P*%C*gz(k&(8CIUymii)SW2*<}@MR*&8$9H1SggyS1nnsBP zQEUAxYIu2&?i89z@~{W%HmRz5us>mF+MT-Sr6`v;9|GbVnTd$$zzLDod}|XPf|nI> zl{t>&Y&@g;rL45n9CFqzT*k z2QHL*&M9Mwb_cgh23$)^H)tFn7=q2b4ynx@I9ub|Ak`Am-uuk7L~QUyVg#z$>Uw|u zb63jT#B$TjZ4e%=BCVfwdhR|e9RTkqmIJbmnKwPeDIc&Gd{{Fen3i}fFi(1H z(Ey%9_4`=m>Il!bl|T#xKh3Pan`SP-vo%hK_A6d8z9x1Y>}ODR!c3v5f%!meZ0xP` z;u!9UtPo%y{HYnQUfnP^x2nQ+Y+_nIQ=Uj1KV5v!5rvf2tOLXw$0zP!Ptl|Ihw)TGu9tI4RX`mQ? Un`;NW_l6kgT-UDDvVHu&0EwYs&Hw-a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.26.png b/lefdef/doc/lefdefref/images/PAE.10.1.26.png new file mode 100644 index 0000000000000000000000000000000000000000..4d13acf25a1599282a755e2b270b2fcb613806a5 GIT binary patch literal 5047 zcmbW5do)yk_s5Y+j1oh`cQDe0LWE4Y4o10OCy_hj+PL2vL~bF2ucS%jHsmt;VqAts z3?`Amlqn-jl$b<~TdvP|p7mSnx1Rrgzjf9*XP>h^YoEQ=`Ru)4@BP5a;<_Ne1V0xS zm!RKY&Y8}4&)iRc*{!tA1pmY#Lx)wMKH)Hk9IX@>q& zD*O1`$r(WahU?&XBB{TcDHHZcc9l=4=z<9HNSNNcGltZy%OMS*?R>?`wUq5084yJ7&cTm3WK0!2Cj z-K;dNG%2N%jVf{%G2xef$hyfuAeJIKAbgDqoG^^@{IHu1{h;`LWdKa*M`VY>pxmG` zU`NVx=*QbEcTi0Y(S#~aQwuqEsUX_L&Kg*4&1gX}%KSH~Hy-68#alBN!Qk^5rvX03 zc`IV6XizDOSUk_%QZu&(es;jy_=8f<7)N$IQ^D2LK={0G#+fh`1_N6zt^|%pgq2+G zcN&v0c~MjIeRMKQ<;WomMhgOgbm%uN5$#^$Hu}w`>L$!h`DYzV;<{oB?4!{{c9Y-6 z7W>p!uBIp^92%c!6;bNcNxNumQt6k`yu3|Xrdi@yzja|)TxY&Az?ojD%hp;Z{_NAI zgjDDUK>*|cQ>P1h?O2?($-~(jT?NRP_G+9TUU65ny-NJj+;H0AMdCTl1!A^@E;X$A z%GvZMm7fi;IJ;OZE_>D~&om$|VRYHsSwjogsBp>N8%!bM8}hm`Y%=&IDb@kz9x*2; zrJ}d)Z``Z|W_%|qQNx_Tlw5@;Rnz&LulS2I6DJ9+OGKq4EfaZ9Gc2xftazY|&@z4+ zRZkcv;MN_h5tXzXYifFw4U+<`C`Y?RHbz<$PsJZ2D?0_)S7pRYvxqI0f@HU> zb}R8Wl)s5btFKdeE)S$01pMa4`^eZ@7O^nuLZxqVQROsndV|ptH}n0B)39^kQ%wE% zgfd_js-r6OeE#oAM*)Tp8hzh$lG3iwy6Tn5fh|092wk+oM= zH@t6$yFc8i>MH;4fGlx*qD*e0CB>|_qj@}Cru?m(q{XmfX3m|wGg=AgM86D^;YH)v|Gq*-W*ZbCnQH0X%14FXX-zoWv8|Ndun z)ed+V+Xo`c)<*jy5T(F~$x5Szj~j_zc>`y2j*b2p0U4A<--z@E)Q-JB#_B<#7{71G z^XB!1vK+Bu@>c-&=VLyax7ApR!eP%Oe``|>cv?)3MKs?Emo7{rT*)Zgjc>?)h8!P- zaAS0gh4W^K_;G9i4|x{;S~=Bya~7kU(=y&8j9;qXXg=?p5F48`xSlQv{&B+^V>btrf`S$cic)7if4*7!0e- zU*7h^_87};{1FxrVXg`8))p|m*U7gMX464-zdE)v*da+y)*Ov+$ zsz<(h8-h|N?-UU93P{T@U_^Ym(I6XanI`-k9{>~_tY9G>Qr&MAAn6gVBy@;#s~;B6 zlEX?;RPyIBI0aKmh+At+@!vIG%I37-V{M69rOS7PD+xG>cUg&md#1MuO8y0hnnZ+e zh?ydwNJlHcIJ|3k>%DmM_|BgKq&P)oB8~XSQD6yoUFgd>WP#+vJE{EoQ8WI%Az2c? zvJTQVbt=~9ZrRPvGMic|rI%wI7}skPTM z|LWWC{mnP3+9pzI$7soM1s?AER7U{H_%g;rz||Se*NRh0<*uFaaxfCMl9h^ui%kw3 z>ZGatA?eM=+&ymYWVEM%D0V^%NsGp zmoURO5nrLlJ!Cjr7jj-*LOU+-$gMlp=@<>k0wiC?SWQxv(Ah8XF8pIL#RiZU88$CX zWRE!pP(nBvoRrzq2vB#FFt7$X1}HRD+bYy&Y6!p~ZF=?UpE0iX<^mdKv}C=*L4O>| zM}>t%6ypD)rg*Yn8gr@`wzX6xby0vY*f_V<5ZSC|ejoCETdLK)Pm2)?Va&i+F08By zzFON`H-xXSLZ^Ej87+!CUu(e-inp%R(XQ-kUr?Due5r1POX0@lYI)diRB(NX{f`?G zh0jpk9x3Nq!maoM)OF?&cj9p4-n&heO|hin4ljcCQ;X1Jwewjo@ASQfoi}VthGzfa z)_6`x{f%_Me=A#D8GAu$#!}fuCG@9>uJ)Ldino_rK3u6kakI%y5T-GERjFx+|Errk z`Q80s=f^cOM5V)`J<1iH*YT_}1rt5)sk})pFr~B;MEbLsRxB}|*`#?wz*I*zu_Q5L zwhbSkFggq(+f2B>BU-2rinAQm6`SYAqHjvmE;MQSrI^FrcFjd$pH&8vb+m3aPmBgX zD~6x}bZ$%DvFdbk*xi{0`-OUY!g=l}(jCU9lkFd}BR}}x1z+d?BiAzV%|P(PC^LNN z#fNo4DOhxZOE-!g!VU)WE=a|bPIX%@GPJz2MZN+5agzKMq$)pU9Q^=ocy5<44lT}D z@uo+Z(}wiD(D_U_WGmz4`NtS5(a%PbS=hmiI448HD1un}Az3?;1UfZOEv0OfX$J`$ z$aGlY^VQ(KD?X@@Mx(gqp8DtEhbvlOil)DjR=PvEbs3B3&|I|NdtQ7J;Eg$SwhY*; z+#c4Kt@1bTp5BY+q-Ex&yMCePD_=mx1z}Uxmv>1vInQ`)T=pQ}<#YTbi#w$E^d4jU zM5m&n88)pcrn8oUcYRjtm{z4LjpZ;XJz>3!pTBa;=49Hu#p9}=?+0}Snij5|cuwLpUiXEyg%=*umc-4})*eX%(7e%?87zTR{I z_QJp?TK5fKp z9qWz^w>GO+_8JLX1@Nc2L001SX;qfhmxJ^sZr;;rQpj{D(LLk_Xj9_7gwD*cX>=zx(~TB-daWW=i3b(+pM4;+=fQ(b`{r&SX4h4@pXPzQIEskPL zpR+I9KiZ7ApRlJsOTeZK%e~4_i_l`I1IW_}``YF-Wx(SuZH1yQsXCA5uTGWU)vU+! zynW4K7m^3#*1E&q_*d;2!PZY#J(%Q1&CYPpc73Xq{2T#G+@~I*77h zU5y=sr)*wW4o==8OV&GjfB)BJe|weXJBwmnAu9U~$0aAsnGf4_D>$twR0+?%1$RdU zW*mM%^*X%L^ncTPlClBmzwkZv_Fnq}ZlKX@&zZ!*`*WKMRV5_!pWnWUI%3mBjP{|%ZLOW zDc*czM)S&wX%CukVf_w{0rw$oZ=Z_6|6wdODg-dD3^txI-i%VuJ2TLj zwKvpw2a7u(|1f6_W8s~ysoi+YLXt{9yYs{vGFvVqCq6c|Y~xHlp}KB9=77r^71&x- z$895QGip1s=de3lYjxYRXZ`zju?}=McYuvvNBkDw{IP*>ExUtF_35_nU!dbz)rMO+ zSI%Sv4q zdOCr&#ouF;3u#~32f}lapW?fwmp3-=sg#vl1DS&)ni@w`WWm%vI%X=sgo+;c4<`f2 z_iP#u7?Y-^_;sk!$rOQDmC;9=LNm$^*t!fF$!OtVk92ZlZmP*hH^?)~IM1u#@C^B} zRU3-28?S3FqNBVB9iFF_{DQIELB46Xx0ID>4IIU*&OJBU z6b-eKbHq?uWp)-85O4*KZfIBjiFK4u(Np;lg#%pv784Hz zb5JZRrkD~kBvO$&eob5dlyx{wEk`-q6O?+Zjvnz)Q+^PdjTT>o9vA)(qn*X(w;C1C z%SDNM&STx^_ZBVG5%jv2ZBm*ZQRD%hwM9z%EvE)Bkn0-KNBY%M^Uv~4pPQc4)eyB% zIY?!9&=#qI(BDVIhkS{RNno_#S>Iyz%I0kKtuj=+<>$@Xce>s#M{1rKQ~N6HJ>OYJ zSTQCmKev+8HTCoZQB(#1Nza$>*1aqRxT0u_4%)8iw(|MUw^b7LY%f;U)P#c5-rq}B z7(`D~Y;*tyZ(7H3ei^RDVWhdfvXcDy3cn1b5*(6VQ!{dT5v0{7QXf$~Kd6e7lMqe2 z8?TZX>jHxb-QyidNq8^|I$F`BP+kfSvG`e={^YiH*y*jT9NW-gukOY56*M8vdz~wB zPGUgdbTd?f$s2R=OOG_dPV5ncOjw&y%)`BD|%;zzzoanH;-GclOZH!a^sm(bAu zkfN0Gg&8%>30oc+k7Nz`;dUWt<#KMe*#Y36Y zAJF4TLvMypSjY~W!Fxl@##S!Et3(CVX}dASwt7$Pxj*zOLCO)`h(*($?_0KO{Tkb;036OYiA2Okq$Nr8}FamnaY&t#OZfF9(JS7)fIH) zqx%!`k;Y1#c2pF9X)rH89Go^45(+*KFffsoor=9Mm^U@sGg;<`CE|S=B4lLo;m${W z3?7h2>w5@nr;kh7vxU-^(>nA&O7oLvd!qC!aem+FWVYg>cyrg(#;aLq^CJt(qj!hg zK^~`V=;{hG<}?nOnB@K>9?#rXZ4k~!zR1s*1u3o%Uh0~0u$?WJ&$lVOs@P3Rf$_K#rP@ z^Qo6iWnNtW^f9N{xpO7`OXf^UYeU-_FH_2kptvL8Vr!&8kNBLnIYCEaanteJOH|$c ztl3S;Y|X>4d$wQT)@~P>L*gn-zz(_u!l(K_OIsAWHu##|U_dU5%`}#@F(2dI&ZefVmcT4&g6{oTd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.27.png b/lefdef/doc/lefdefref/images/PAE.10.1.27.png new file mode 100644 index 0000000000000000000000000000000000000000..ce990ca6bf0fab036edac5d752dbb69551dbf88a GIT binary patch literal 5413 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.28.png b/lefdef/doc/lefdefref/images/PAE.10.1.28.png new file mode 100644 index 0000000000000000000000000000000000000000..de37b1c692b20da5314a1ae2d386e9ad3a8d1923 GIT binary patch literal 2957 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.30.png b/lefdef/doc/lefdefref/images/PAE.10.1.30.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9ef1201643520d9b1812bd5835f97df59a0dea GIT binary patch literal 4049 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 Ult3usRHV6#^v!NoL+(ZY7cQxdkN^Mx literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.33.png b/lefdef/doc/lefdefref/images/PAE.10.1.33.png new file mode 100644 index 0000000000000000000000000000000000000000..b7af8b5a41c33a98c6e7e1dce2e6695cb5ff1a85 GIT binary patch literal 3371 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 Bhynlr literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.34.png b/lefdef/doc/lefdefref/images/PAE.10.1.34.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf5533c51eaf987dfb13d92ea1eeb43a55d4c18 GIT binary patch literal 3500 zcmc&%{Xf&)8%ORE3K6QIp%8hw2Hp`?^l{NiUCW%Da{2 zCNACs-ogV)-dKYyi{%4MXv zr>W;evyfm{C3S@ix&Mk6KU7IC_12m%_=y^gx%t=DWBX6^oYWFLaaaib+m7{kuc2Z2 zO$qCPxho6?<5OXTk zyPjZ-XrxDQAVrZo;h2kSD}Xy}w~;g3D1GlEY%+*Rr1dt&l}g4Nyd zASMn(fO-@V(22jCYNd1B{_L_<%-meyJFy*+|BXniGSk=j3Z+dRW{Jv8)jz0F?aVXD zJ-81pUlEmbVIMD<+k|_gHezW=YPdzw_X7wZCT(&n_@#CCF)$1bV7ba*NjtNreYSyN zaUz3=emTF9i317sGSrDQ;j|=g*#}9Ct7{6fS)=Tx*Zb&vCF&n|^xQ;4>KVh)9L4Hp zVstaqecwV*+$Q*gPca|wYt&ayOsS!PZC#<#P0~4)bM>q328x~Kv3!eaQ)M(&9|?sn z-VJ+pTkT#@hl3ppbZ=SRaR)`PRR;Eqzt$_mlV+9Ls}_be>z`ZblSD~SGROl`f^t(& zq5(}wa;=OjPXFvLxHD$^q6J%A}c>kd}xa<>AxCh^r47COS?f6T*T;Z z@49=sdHDxXzh%CYfHvE=e+0#;@OW0}+hx5s(2Ju5XY(o!qkl%}75Kt^LKjD@RVO@K z#=@OhH+{>0))W^E)U7l?P{2;hoUc8=+?=D~NYXJwiSe(e@|=DeSg=;5js+HtuePg) zjY6z?2b!=VGm+Eva;2Ro zk@pbf-iF8^W$-VkJvNezxJ>|d$yyc5Z6C+UkLg91tPd1yf_2=mOBnpqQ1Zm0cjh~z zBQe#Gq{|h<#0PWAYiiGn0=ldpp}fVA4Km?3ia=*irhL~T8jyur;BIgvYU}5n?N8~# zi)Fi9VP)cAEJ?`6TiSvZgHu}0SWc|#dfKhDcL1KZs@^P-?_7+TU)0Kxyu8qPrnYyy z-1d%MJv7Y!y5PYxdM<9Mh0cKt&hIf3FI9;X(M)@1Hm5D1Lg!e^bsPu{49+6`{Kknq zYgM7^#R-G{$NvEP&IV-?5z7tHC9!>))aOHyL0|uLVyUEu&YHoLFx*SJnYZUWS>Vbu zlb^b@q{fKFU_ImV*!euMlS}4uVwhEh!Yl1>4t~g6M5evy@9c*^Ldkq#Vc#RQ{eKEQ zBMhqCTUDwog&g_(r+NnG{AF~(>*PM2av-1q!W~~ElGtxCG(^t#^E>EoeYA9<^i#i| z-!18uvqUN%Xj3lCIQMSpr1p@7KGz&xXQet`6m!fBHz zPKrkaIm!LzB$3&*B0F^`R%hz3y)U%vnYb4E(Q3z%*X~N(rb6G`z;o|k%ZMf+pB+`f z{27uwCJBkO!OkU3_8q@&_fdP<)fI-{K3jO0*;uzwep^Oe0lRiF*-hBBw{38^56tI7 z)3hPo3TdCJnlAVFi#D8`c}o+E12e0iMV4hv5ke>eOzQgDim<*T7_H*Cv)y}R1AOVu zTYSlWCJt|&3Rdk(<_d_k)%K1RFCQ5VdDf@^Lc*Q8Q^+8#S79}m*~;Ge-GtG;2Z6`) zBcvrSc#h*+GBKgva%>Z+bcvrQ7QYI1G?@F?J@kZVtnbhqdY+fU8c8;*eEw)S%zzOC ze64B1E}X5yx6?%vr-*I-S^IkDjH)E1)uz1z76$eKHYSGUn#rv=$<=bxe+~DJQ0_?> z)N=p<_+zo6V2d6=sh`lU6GS$p>CEyCtX8i2`BoGZUrO8ODQS0Lr3WROcAhC0^NJib zG^FQe?YuU~{gc<((miT!#SUXLQ6A)cDkH13yHXa|%Et+~GL!H^$Jk_CG z^s~*}EEpg}6~~rD*~;N|FW+m z6Z7I*%IL~@ z2=SGq(_q972nN{pQRWt4u56LxK6_V%ZSpcz_STOW49&$qkC_M`+E;qQL|B;H=X1R( zI)yLev8n9~myC&L$|`FQ@RxM17N3QcWxTh!Iy1viVJG%9)|uwm$39he5AZgr88(k2 zvl_Y}C=O(*T}l_e%N=dKwhSyh6ngHELhCR0T|Y;g+=aNj{ZhaA0_HdOI|}j)>1#5C zYNY>L4-UlC;HWi}sw;f_?a@Y5l{`x%D_&PfelHksrOE<~E_JNtbk^`k0=mN0+S@p9 zO}W$#2B<8W^~T>3?WKmJ<7tzDH`NhZaazZy|H_xI?vcX0v+0}ZINI3?^gwmbPo}Bj z(vXwU5v!RV-ou_xUc*$6LHPPst@481%!b)y>7YSMqNy7)`@UG`+Wok}=n}&>-A*hr zUj?lF+!R0F*D8IQD+|PP&BV*a9mHhzPK6y;C@b_unx*uFoCoD*$vwVJD0WkYdfm++ zzccyk)%#r6^r)|41|W*&lv=VK><5B_Z`d(EF@Apz2h!Oia&j1Jc%Iov@A)P^ULny#lBYTn&lS$sM{Md-{=KPR9Eow?jV#(8k4k14mHf!8aXpI zE%G=*J5)G#vGeri;}I3B$q#C4Yv11PqlUBjxxA@YBo|rrQ+pocZODJ%-s{sBGzDKoM4C;W^Mt}`Uc9-H}e3$6r}dJE(dSp zK+vjlRx@db&r=r#Sz}^JV8d>h^-|}RVXBV^g6i9IXf}@%8~l2$AL?Ao2)GLcRRg~Z ziCdLq#2zE{`%a-ZelM4-7W=6{dE5%DRfd+~b8YG|69$Zhc5pyGhE(Od= z8LOJk2F$5!eGRzA{(20p^Y@4&NvGjHKPn?rpdof_TN@93w$a;0Sc^Vb(RZc2<(Sy4 z%lb1z_1(7s`Z`jS&oXwr3adKjOHztX@aSn)Y9||GTp2lGt&m2zgv_L-x~>L%_XY JbobEoe*+A8?0f(K literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.35.png b/lefdef/doc/lefdefref/images/PAE.10.1.35.png new file mode 100644 index 0000000000000000000000000000000000000000..51831e4645253f3e9158793def26e121fd53db5d GIT binary patch literal 8912 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

Q(w+cOd zvtoEP*z1Iw+HbPOei0$SrFDkoJxYBcE)sUxD_gzo%&_}?XNOGcHOjRjx}x2O{9B_{ z_1RzF(rNK?GdHja?a8fy4$kHrYGdQtSdnZE5V01ly?*AoI>^7kf3sG04Ye$0q6?WbASoi*YR)-BOdPmk#NPegsno8! z|INv<-{oj{@v(q}3O~Qv#aZ{-?UWHt8HC$YmvobBPy5`T)d(#03InAOB*B7mYwcE4 zYEHDp54T8gRy0{Q4V)T85@vXtp?W@#1l%5hOiid>@CH=Z1%BwCKw$0(m^P&dSQUf4 zJ#IO!QCmBgoQ`ep@S*o%jDFo@kVqxtD*cl*#j-ujPRat&XZ}U674!d%q)P7G^!PX; z3(WZwBa8!x&Sny!5o2@*ZM)3E7oVl${_)9HCG+pDVtv&vl`j4#5T|1P^GBP~LVHb5 z23~yTi!}o87L;I=s6LGOSUqKjJWrz|L3M-J_g**6OFL)(MAVV+7E3=eu6=cEDimis zIF|F(51FfO(kXd}8+j@*V7l^SHBPmHk3Ap(09=lj4CDP)WXP?Wo`)6U^xOs21AouH zU<70< z(*?&t0$UrSw(oVA{~?B`TToi4vWe*j$6$6FdbHUH7?yK~M3r)~?}$t5lrU>4Q|0uT zZ@Ao{XQdCSf^EVL6rlh~N?T6+fvz&#EC)RwD9*j$0{QE%nK!sf!|D zRs!LVf48=!=#|tvmcDf+a!7Wa^?k0wiIfhHFC%yL+}7F-Z?6h$un-S&S}-aty_*sX zgO6DS_>|d|1j%|Um!CMth41>gJHDyy%$|t^KGQ-1(%$g#7d~Ki!lLF5NKbw!pyIE;7IOL}t%yDX*W$hvu-$JV!tMB_Dx$m|*7!xHJJ=wkZ6lu$p z;KptU7_I>Kvj2LS2^a^%*mtkFOS_&300R;y{wODZSS}Oqt#{2q<&sALV3px0=hxk-2ZmnqtFEY(>p6CI5fB(&R?+_GTqih80rDdhM(V@#17uY_+)b{+fYYc z_E;UwGdYpiIe{l$J`e-AY7PX~{Hqe84c;K^u*?;!ouoAQzv$LM^4ea=(m{Cr>k>Jg}o~V6ctkD z4o4~JyRtNleiub6X%%cqlsaiz7)<#xXR6hvh2oR#tZIDP(`Dud2DS^lIn9Q1srhSX zK$2!{&5H@V&;}@I3Kb#IFqe|MXHUEW=}isTP*C2Um;Sx}EZt!)duBIC>6O9xfd)`_ z%^I>KG-8>@%?J<$r{zljVhpC=PrEyW4y$N?LoXFIGLZZ$5+P- zZ!a}XN^UjS1GRsih-$=wtY-@>(tfL3%i^vYIrKFc)F6YzKzZ8`t~Jql(k-7V@91Bt zhOQ|#ROOYPeCj5}vhZ?393E_hgpDWu5^mwNUPNDJWKMDx7t5W?7(qLM`zc()!y$Op zx#me$7!-=zS$0w+V)Dawap|wj@UE~cfu5BX;ynx;djN@v^{+h*aWVN45IW#zL{;+W zsKt8bmYVGVc{HA(1qG+-x%9eo+N|30H8kOTe7=Hdrsvs0>w{0g!Q|o=yb7#@GDiLx z>ys>t^oVhCy0&?~cc>#`o{wm}d2^xAjJ-y3DWeusPI)~z4sOOxHA(qva`0-~4gsK{ z1LV2H&Lw-aFX#ge%Kvg)|H6y^kQpEM^*-SP#HOun+08)%Gf1Q+X{x}D6n%lPGkI_Y zoTz*|JYl(53G?mIf1u#wvk&LWshFlaT~R_z#rjRnXQR3>x2*>yE4zLQ-0vEG(G~L= zoPWL-Q`*%2Qa^4+YpGMu8ZYv4_LAp@>o?0z9^T0$I?KN{`6vfOC%0G<@kRmiomuM2 z8UE!RjsemHoe==o2i^7pm^hZO=>_J}Ob9RQawsfJU(Qq9!yHDnnPJ!;GwHH6(vLds zSp7Y#NwS)yC!u*nkuel&`_AS5OX|Ymi#qDrl73i zb3a8n#6{*xcF|SqK6K>KM0UT~J@&=mIBfp_yxT-@a`4axu#lqGSN5-_hy%~{;nOhJ zDNwwzM4pdvksrW6T392MVQyfJGds}z_tiwg^9V`lk) z;md*s`UhS){8KD+zeM8?%KcYl`ma*_2LFDj5b)99-ZX5%mw1Q4-IlLIQZDN%+J5)?lfp`Wj(+`1b&cdvkb3pP z*HFg9fh$3Of)tN>5qL1?PYLG6gC%$f4jKp2(jxFPuPVPKl;RH`(me$^*|plYctx$& z|N8WvhbO{fQ^2w5W1jO4p5yA5odOVbayRKC<&=oGlZ%~OADL{HT|`0U19PvyuuCMdQZN`t7H9wa_`IPHC?aH#$wM~fnt=k~m$~_?5+Z%9(daZ5nlwTm8Hpx9R@$fGmUiCD& zd()#MPV^gReT@`tR9)j1jBC{Rii$rR_X|{R@?|^r0Ldm6L~vHzY&>J)N4Lwg&+t4| zBIG^V@8y(nJ7lGe9(@58sdHqdv+`c#-wo&IiDgz#SI@5T^IIcK)BLLFBsS=~nJvbs zcsxV)HEOhDvu*SDY3mZ}mJ32a#c^4hR-Y|;*!)9bSi+Jd_2b3W)2;H3TMpm;sc>69 zIwXZ3gg4r^*+HRH#I|(EcnTanP%;1D^s~{w)HkXpx7F9D@zq!PT|a~Vlso_U(|x1h zk&%E)a;m|;CVRep0LkcIKgfSFi)^pjU7L<(p9J;Tjv?)VaMY9Swb0bL>rid|?I{D? zyr;uA&zgTyQ+ZTsmBhQS=v%hlDGLh=?paw?390zY~^ zeo%z~$CiDtSSUG^BhFTepRAn?*S|qd(nP?_Do_k8OG|%suKY(8FRir8xiU2y0+0+b^5)4y6rq^ZS{azfy+@fulX1m zp05Mw)Ef5|kM-86M}kW$6bUYEjHThizMPI`lHlwj8c&$6?cDp5%!$?(@6sfko|#Io zQ5QXKVT%s$G_9ZBVGL=p|rmZ@R~_yPWtS&8iHxUig})#*5( z;lRy{VvHZU$@%O0M*&r-{{fi)cWxsk`(N1)pEz%kKe6zno@O@6YNjVrSiO<{^czrV zkM>`Ie_wd~eQotuNX;*tOH+-VX{i5tgFIL6b7bv`Mvaez{O8DRg#RBdy=bTlDMgjc zazr$0u((mh^Mdmhoxbjxh`! zt#U%4F)6n!FyQrv4wfesr|p>f@ubLVX@I>ZRVBh{JWM;WtLA2>V5&~>Xe=)UE=Fk_ zOF6%>4&{ri5@doS?;t#<$V~|}peghbw4Tg#rP`As1!rS3=KsW-5ze#6A{CY>nc1BT^g!4r>`#yna^e{k6{66NL&PwL;mIF=thk_jUT~9h+4*%qkXcc*B@UQnrfg*d8FKk$uclKaK<%P zA;Hpths;MFK@`l9(+DMCoo^criBFa?^t(9v zs4fG)DU;DsT#EH}DRyhb_-x)tpOeu@$x{Z6k?ek3}l|qvo$w#}rY1I!n9`bNV>+FA+G= zbrLK^Q9V6`hHirKG@5m9jbxaj#HRCwE;r%iBS3Z5qF8>+xYOfNH+fAh3PvUUR7zLg zSJ9Y9v|Gr9${^ULDmVoN zMjoB{IGuKv9yp39bxl)X00#m+cZWS)Ta^8VgXKu$z%*y#INRw+qZvJGlO3iwCSc(j5=^ zGo7XuHn|ieK4)B}XgMAqI#pjLzl(hgH*b@;IWh!CI>ETD#KEo#p|qa+FH3W~%sKqg zsKgQ*F~d0=Ds*}y&XHpr;felhh-Oqi9BNShE@+ZrQK5L2)HY%@^44^aeC=`6SMi&*0(_uC<03dgKSylOw+L`txSu!;pUehV)<1Kdu!)DlBNLqF(@xW zkGv*t#f3?;vNjZaXWsa=g2eEk3 zwL43wTm{oVcqsTgmYH3Y;4?E7`gB$5zR^!GNv7Ub=?5c1j^?!!Iy+~-5rIL@;?IUf zUOZS>R)agUBu@RM9);I=wJgo3+j9r(Bu1dAYy#c{+9{(Kgr{9TGWBAHe{lc$Cwh1J zRs~}nl{-eQKe?KP?B%3@f<9OdsMoqLeDbplgAhuv%zKFgiNwBs8mtLS9fH=(IabU! z13%tAYUPdKI5l{%Kn-Lz*A-m!^L3bs%&~?j{cF!}qmJ+%>gxPnY9xWc$KK84NPib$ z!1y-|tH%UWWhpX-v!73O2uuLQ&Fi&bni^7-yj2|DQ7#CyeNQhg922?gP?S!iBez#yF5!LOIT*=`(LsK62 zq0l3HbZuVg+`SMLf?(?=T80hsTXF-PAghJJyzQ!t?{~;F z9js~~E$F8>99P|6d)8{WCo^l>hcK9|4!Yo@U##}8;N_E~2U?yhND(E6*KeqlUhCWk zdc_jK+gA)#b3kG1L14{F=-Kx>W_cPFS3u*UF$YZyZKQNM=M{r80YL@rmwjlh^S1sr zw+3<{p;Msuy=Byzk@c%u^Y=to{siYjuBA5Fp~<`Dbz8tvy5%k@&@3rE9=uJ}s!a0z ie{f*`A8p(lD6?tyq3;5U>!3RrFuiJd1$)W$;eP=i|Cajz literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.37.png b/lefdef/doc/lefdefref/images/PAE.10.1.37.png new file mode 100644 index 0000000000000000000000000000000000000000..df173ea7aa46144abfc071db5f570cd4b89a42b4 GIT binary patch literal 6293 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 R9l)^%L5!>nt8Uy)_%Gdfq=End literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.38.png b/lefdef/doc/lefdefref/images/PAE.10.1.38.png new file mode 100644 index 0000000000000000000000000000000000000000..46d4a3ab3ccf1ae925c3ec6c654e4bf2fee6c486 GIT binary patch literal 12257 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/PAE.10.1.39.png b/lefdef/doc/lefdefref/images/PAE.10.1.39.png new file mode 100644 index 0000000000000000000000000000000000000000..757e9454e318dd01716504649c9b11dfde458734 GIT binary patch literal 56696 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%0A&iM~1)>3<@(i_r4`l5H2+o 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 Jj+RLT06U&`IGX?f literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/alpha.gif b/lefdef/doc/lefdefref/images/alpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..49de981bb1c61911e1ffabafac4737af455cf9d9 GIT binary patch literal 147 zcmZ?wbhEHbn`m8 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/ampersnd.gif b/lefdef/doc/lefdefref/images/ampersnd.gif new file mode 100644 index 0000000000000000000000000000000000000000..faf90fa016da7000e73e3cbac478543fd7a04fc0 GIT binary patch literal 209 zcmV;?051PWNk%w1VG{rk0J8u9|NsBLzrVG$wVa%sl$4Z&goJy0duwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui022TY000DjFvuWKT4U->8wpLrNsE>| z5`%JsgG_2LJjoa^#-u!mD;0zwFrm;i9t}ak@n|+3i;n~$YB&mw+^w`hJPLu6=;sh< zGR%p?ArUk(lLM^@mt!y-riyz*nmI8?4h#(nM_L<&5(5NqAP)OG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtz>% literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/anglrite.gif b/lefdef/doc/lefdefref/images/anglrite.gif new file mode 100644 index 0000000000000000000000000000000000000000..f30742e70b1b4d043e555f346837eb43242b8f9d GIT binary patch literal 120 zcmZ?wbhEHbOG^s~2(YxYR903N7Z+zh z1&Tje7#SEC8FWCxATtopFJFSLV>e2RHAj0f=h;E@I(!kZ#x+?7io0| P8+7(u)0EN|WUvMR&ip1V literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/arrwboth.gif b/lefdef/doc/lefdefref/images/arrwboth.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6a26d1a64476e85e5fba2fa1b1cb363dbd0ee23 GIT binary patch literal 154 zcmV;L0A>G2Nk%w1VG;lj0J8u9|NsBLzrVG$wXLnKoSdALl$3jWduwZJV`F1dQc_Av zN;x?>F)=YAAt49|2mk;8A^8LW00031EC2ui01^NX000C>Fvv-(y*TU5J6%SlgqP9? z)!>j6;}DneBvau$N1^Y#@-TzI;W0xbjL75S;V4K5jnjqTU|1Rpi=d&vG@O(~Hv^-T IJ(maoJC>Xc^w@cH8nMbg@t;0dKwxU>gwvs%F5#6 z;{5#l3^1VhlZBCifssK6BmgplfyK_?gy-tDNp}?2iLe(6x~Fq;Y+j>tTICsw*u9V` rmls^vx;CTn;Gqk%CBzOKSX0qm8?^StX-)3lf_Z1!qTaYNFjxZsBCaw- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/arrwdbdn.gif b/lefdef/doc/lefdefref/images/arrwdbdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..701bb8bbcae9b0e09d0d069e4a5be1fada76f7a3 GIT binary patch literal 138 zcmZ?wbhEHbpeRE Qt&+(Qzah}SgM+~u0B6G{wg3PC literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/arrwdbrt.gif b/lefdef/doc/lefdefref/images/arrwdbrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..570fca03a58aaa40e6d7c23c5a55f1af873d96c4 GIT binary patch literal 124 zcmZ?wbhEHb6k_0I*v!E2|NsB}`}fb8GpDDgr@FejxVYHT(o$1XQ&CY-KtO;211SDv zVPs%nWY7W0fXrZE(KI;Wxq7eT1KU1PHx0R@N4esKi$ohU-h`+WtO;7MqCL%~bf2fL Khl?u%gEatK@*+K$->CM zz{sEjk_4H-z+zzF;dx@u=A<>{+vHf=WG$;ytGt>NS)zV>F&l+^ZQwmwsItpfaiT#B O)4pT}gV`<&4Aub310s=}PM@L6ZO-))_T6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471B-#d3D4DgEnc5pZFSegB0)mI&xzCZ j^}g1}I?X1hD*DV_(=B)$-7f^p5ONbfc;t=?1A{dHJBKZp literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/arrwup.gif b/lefdef/doc/lefdefref/images/arrwup.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a770c30fb4167a6485f2a93ba6b4c9e81c70f97 GIT binary patch literal 135 zcmV;20C@jLNk%w1VGRHh0J8u9|NsBMz`(V&wW+D8o}QkQlaq*uhBtH3_%+R38C4a#P`2XaOddxipHTuSz%HHG~*`%06R#sGAsZ9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/arrwvert.gif b/lefdef/doc/lefdefref/images/arrwvert.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c5e9daf26bb482bf5659dd5f62ff2ffee66269a GIT binary patch literal 85 zcmZ?wbhEHbdV|w=Bx1^<$W9MG~HuqEK!j!4W4jh4#85pbqqv9M# literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/b_bullet.gif b/lefdef/doc/lefdefref/images/b_bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..0aeaa180e861d12ee0b131f7d713af607c998c07 GIT binary patch literal 818 zcmYL|PiPZC6o5}Ua=+!dC^foPlP;GK^TMXvm#_;ZwF_4l`nOz4LgyKS zuQ2Or5-`t6gHg4*>KmvxO1au(%9>L7 fsr_z`b6TbUiT>bmj9_ePZS`F_I5IXJ9p=(sJyFbD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/beta.gif b/lefdef/doc/lefdefref/images/beta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6172e8978c16768fb7cadde044d91c4bc835802 GIT binary patch literal 151 zcmZ?wbhEHb9$U%nJMz@Fauw#&q(LRO(A*nwRjI1A@2Z#vqF24}sVW&N%ZQ`d+1_o;Y D6S*~0$;rt8zSTPZ<#pHwvy@O4 G25SH=gCi6G literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/bracrtbt.gif b/lefdef/doc/lefdefref/images/bracrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..345b70213f2f9bc99b528aae2a89c0dc4bb957de GIT binary patch literal 121 zcmZ?wbhEHb=}PO-)T&T3U2;bU;9WrKP2w zo}RL@vbeZ74-XFm1B2pE7DfgJMg|=qn*n471B;fy2~SnWQn9H|-yOW(Iaj&CgNe;O dsHbD1Zkv~Niv|SbyFcM_21^}ynD7gRt literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/bracrttp.gif b/lefdef/doc/lefdefref/images/bracrttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..76c33b52222f37ee7a778a3c9f8552f5830a248c GIT binary patch literal 122 zcmZ?wbhEHbNtwM|RiZhL2F^0vUQ7(u09Wc9YybcN literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/braklttp.gif b/lefdef/doc/lefdefref/images/braklttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..67a063fee279ce5795a2e79caa2a4aa567942577 GIT binary patch literal 88 zcmZ?wbhEHbK05M@2>Hq)$ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/brakrtbt.gif b/lefdef/doc/lefdefref/images/brakrtbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdb1927189d7b4db1c3160666897f32f0ba2f57b GIT binary patch literal 122 zcmZ?wbhEHbFfd?XU{L(Y!pOkD$e;sc vGl0}GFe^&zT9Yc!w~c4vsYeS6m&XemC6`vJ&*;*=IV*bR-ct%JoD9|gy4oLO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/bs_bullet_sub.gif b/lefdef/doc/lefdefref/images/bs_bullet_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e02a6610c0ed14cf5aaef054fdd6bb94f51a8ac GIT binary patch literal 834 zcmX|=L1+_E5Qe{PHf>shG;2u%4YbyaSP!KHtmq*tZLFsJZ3rm!vTQem zU_gWvJb1Bs6!e%t@E{R-D}q}RWF;`_rZB?5?IdUK!?cbqBV}P-z57Xl2ZjoqMwdI(cKfNMeW!Q% zq4M8?$sJEOj4802jZfRTY9V1-vQS8%2@L__PIeQ$%7`g3-|N9`w`Lg1&jst$CNN79 z9;}Dl3C$>}R*?|<8Wphc<%#;KtzlX|TSO5xgo&_Oj^TgInu%po%Hrx2MkF3WprKSD z*$?<=D*is4m93k7yFi&r@{oLH(?UQL$= J{oOj3{{hdW(xU(X literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/bss_bullet_sub_sub.gif b/lefdef/doc/lefdefref/images/bss_bullet_sub_sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9bb133eabc5c242cead02fa2cc319ab69871057 GIT binary patch literal 837 zcmX|=(MwZt6vsc;ZEeaBceOck4`weiMS9r7qL*FLRT3x!O`?ZM7Z#X9Ea>I3-7!Qd zf(?A=CHn*FaRccg?t^a<_-N5XV0!N~%s|LU`}O;6(t&&LIp=qN=X}5CoO|7fkefq~0(Y}qc?c7JiqcXN^{aOeIq*PNhV68?11+_Os_E<9 z=ZErt3upH{zpjr%vFU8>7V71UVaY@hfhIHrh;#(ZB7@45|LS9&45O=AM1 zB*Vko5qCnOkTizP34ZPn<>F!qh(z3=QG)lkTydia&BGzJB!8S?<1=Sxx<% Qz45%iH!(VVb&%`-07Y!l@Bjb+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/bullet.gif b/lefdef/doc/lefdefref/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..b71c1a475fc702b21c95d5edbdc1aa1d509729bf GIT binary patch literal 120 zcmZ?wbhEHb4+9J+{$ycfU|?j>0SSQ2U|>--IN`Z^uf^l0z7?LzMu$y0Rv3w{*x|!;S!s%* R`Du4f)`fo$#IrD10|3w$Ct&~p literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capalpha.gif b/lefdef/doc/lefdefref/images/capalpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..f93e524cdd9b7902b98f22fec2fbc71879ff5380 GIT binary patch literal 138 zcmZ?wbhEHbtlf iBjK7S9_sU)YA~@h;Sz3fys?9ohxe??^2Z)Z4AubiT`R2s literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capbeta.gif b/lefdef/doc/lefdefref/images/capbeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4c37026ab5ebd18ba0a8d1794553e3a808cccd3 GIT binary patch literal 141 zcmZ?wbhEHb@#^7Au1jo~!3BmMJmYcuq;M+r#pdip9y9ehaM? o{R)llK2i|1lGVAn@#^7F&Z8o~!3R&QLbiihbM=bSUwhl4wV%MaP7g sgOAR9nQ*Cbp+!6Q!c^&q5JuUeMFKu?YaJRdD)@TGbY+_ALBS< t9Kj+a(H~=&|Dfi|0-uid#ziMs+4zs8ELfrwBXoqxajBi~0#6nOYXFE-FHQge literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capepsil.gif b/lefdef/doc/lefdefref/images/capepsil.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b6a387a40e314a6cd651f81a2710054bb57a113 GIT binary patch literal 130 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu;?3{@LbLNc*)uGBIk@mABhBUlzKUDW$QYf e)Ae}T2ivV$eUfVTn;IM~q~@?bPU>V}um%9uyDb|4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capeta.gif b/lefdef/doc/lefdefref/images/capeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..064c5273534fdba50c309b3b8de0e448583c5e90 GIT binary patch literal 139 zcmZ?wbhEHbtXj8D{Znc=Qc*ct*LGIS; ng6A0BZqz9HaLrao$7Ax1n4<>*6ADbM8V??tC=jb5$Y2csq?<3U literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capgamma.gif b/lefdef/doc/lefdefref/images/capgamma.gif new file mode 100644 index 0000000000000000000000000000000000000000..6cc19838930ae56e3c6a961b4a4941b4f6a60ccd GIT binary patch literal 118 zcmZ?wbhEHbsXF&jt)P(QRAq< Ie?bOo0L;=Pt^fc4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capiota.gif b/lefdef/doc/lefdefref/images/capiota.gif new file mode 100644 index 0000000000000000000000000000000000000000..42e74365b648cf7c6ed53a02b6634cbec424fbf0 GIT binary patch literal 111 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^jKK-d)iO_Il$J$wZdFi<>`kqjC9*51d85W0Q&$FS0B#c> Ak^lez literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capkappa.gif b/lefdef/doc/lefdefref/images/capkappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..263ee4f8874da785aff03241179a652a69f5e1f1 GIT binary patch literal 143 zcmZ?wbhEHbVD%$`Miy+9ct{*51BY*}=wx?XJHNBZD;nJO?mi literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/caplambd.gif b/lefdef/doc/lefdefref/images/caplambd.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b7af2c91a0c26e39a71126e3ac4de879205cea9 GIT binary patch literal 139 zcmZ?wbhEHbh3D4DgO&)s2-E{nvar=-BQ<}o@ r=7cT^y6N3f~K?Z98elIUh literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capmu.gif b/lefdef/doc/lefdefref/images/capmu.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0066cf5925e6850511df007c66c32b0eddb8173 GIT binary patch literal 159 zcmZ?wbhEHb%PT^-v`jfHIelh# zt!@$dCau!zm~epO3sdg_PQe=zllMJOP_%UN?{N|BnxiAt^!CC9gBI>H4vm5PVw4!H E0YR8G=l}o! literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capnu.gif b/lefdef/doc/lefdefref/images/capnu.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d841a31ef2a70380018e4253ec1c8ed0ad25f32 GIT binary patch literal 156 zcmV;N0Av40Nk%w1VGaNe0J8u9|NsBMz`(S$w5X`4oSdAHkdTCggm`#(Y;0^`U|>{K zR7gljFfcGABqR(B3;+NCA^8LW00031EC2ui01f~S000C@Fvv-(Nr_Bxk(S5P2vlQK z&%;nmfi90SwP?^hheT6PAUF=qZqf@7fP$f<7zj0#0cJpva`7sRhcz%jJP?CTV_TsN KNaeI70suQwZ8p^a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capomega.gif b/lefdef/doc/lefdefref/images/capomega.gif new file mode 100644 index 0000000000000000000000000000000000000000..f6e11542c02b2ca350e3add8174458872d846540 GIT binary patch literal 152 zcmZ?wbhEHb~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0V;%achbM@Y`IVnL0J)C_O2FRZCF!X)8CG?@p z4 Aod5s; literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capomicr.gif b/lefdef/doc/lefdefref/images/capomicr.gif new file mode 100644 index 0000000000000000000000000000000000000000..20f4ae6b5b392f23b70a83e0b7ab1684560ba69a GIT binary patch literal 145 zcmZ?wbhEHbIn{K>+|z`)3$ z1Cj@s!N6i?aKdx7h>Eaum!P;&01J~}vxQ>YQLmR_k{uzZLK4}IH2RxNU@#^79)cbo`(%I76-KkGhWnT`s&#>c}7BopZ+5S gHD{ULphH}aJW~&7Yvc&FPdRw-qQ;w!BODCY0Fo{%$p8QV literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capsigma.gif b/lefdef/doc/lefdefref/images/capsigma.gif new file mode 100644 index 0000000000000000000000000000000000000000..f75c3553b8eec054cc9e17284bc8ec1ee1bc89d6 GIT binary patch literal 131 zcmZ?wbhEHb0SSQ2U|`WSIN`Z^ujncD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/captheta.gif b/lefdef/doc/lefdefref/images/captheta.gif new file mode 100644 index 0000000000000000000000000000000000000000..96b4c5022d99b4e1de7f6b8432207cf30601cf70 GIT binary patch literal 153 zcmZ?wbhEHb9pW4wfr4EcoLr8Y9jz*t7nI~VWSml1Xx(bS o`e!Q(8{?$u$*S7zS5neEWsEqPk2i{ zNIX0|FfcGABqSIZ7ytkOA^8LW00031EC2ui01f~S000CzFvv-(y`iLS zhlh=gje&uIii!#Y1B2pE7DfgJMg|=qn*n471BMxJ+HeGQ| q$;Tzh)IavLXtIb+Q*f(SLD4P&j!7*|$Df$Can9aiwkJf1!5RRyLNNRQ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/capzeta.gif b/lefdef/doc/lefdefref/images/capzeta.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcba9c83a24c02d071efbf8e72ce88b584f41d58 GIT binary patch literal 138 zcmZ?wbhEHb@#^7IT9Wo~!rXP?}Qa&U} literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/caution.gif b/lefdef/doc/lefdefref/images/caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8a5e7588a618e53a52e8dc4b72555e7dc0714bc GIT binary patch literal 286 zcmV+(0pb2fNk%v~VRir~0Pp|+|Ns90001li0001X04D$d0{w)KsmtvTqnxzbi?e>A z`wfPo;{{4Nrs`!z?Fz?9N73@FzLk#m7{BugEhb=Xh=jb16J|20b1I)y1W?MUQkht- z_tfZ?x-8pwAx)3ToG5#nMY}=fbNqg&13reab-u?JI3w6sR0zYyqeqC6H|J;g=V%xy z^R|R#V^+rrCbtD#Tx@K)<|fUTO6km)_=70wU3rN6jGZ0(V~5U?zJ8i<#ol9{X9e#g--llxuTi9L k&+ku&wl)Eg3_NkK;D&?G6hcXs(BX=15-VD~=&%3)JGI1(d;kCd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/chi.gif b/lefdef/doc/lefdefref/images/chi.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4555582cd9fb8d55b51b5027afc252e5177d480 GIT binary patch literal 145 zcmZ?wbhEHb(J3^J9fJwoZo6KNOf|o(v2U(3NaFxOFqDmlA_D0At%VJpcdz literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/circmult.gif b/lefdef/doc/lefdefref/images/circmult.gif new file mode 100644 index 0000000000000000000000000000000000000000..49bac178460a729bf930450705a25aec65a44ebb GIT binary patch literal 81 zcmZ?wbhEHboa25SJ5=on)F literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/circplus.gif b/lefdef/doc/lefdefref/images/circplus.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf9719820db56f560d1e94f957bb08ad5a552437 GIT binary patch literal 80 zcmZ?wbhEHb)5TRPWpn*l7_0#<{3$K~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/congrunt.gif b/lefdef/doc/lefdefref/images/congrunt.gif new file mode 100644 index 0000000000000000000000000000000000000000..b886bacb112a0250512b5865b60aca58c4efdd85 GIT binary patch literal 115 zcmZ?wbhEHbt079H3XaE2J literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/delta.gif b/lefdef/doc/lefdefref/images/delta.gif new file mode 100644 index 0000000000000000000000000000000000000000..239069d87bcba07487e82ca0daa0b1a08dfbb616 GIT binary patch literal 141 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK(;gy-t5O0wHpY+IJ7+%Srnyg*?^i_WrCgGWJ} my^4aqj1s`JAu6eRBSOWk{MJ+b~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/draft.gif b/lefdef/doc/lefdefref/images/draft.gif new file mode 100644 index 0000000000000000000000000000000000000000..9952c7ec4b536327a1a840e49488a07b7a16512f GIT binary patch literal 279 zcmV+y0qFimNk%v~VNU=f0Pp|+|NsC0001li0000_03!eZ0``QDsmtvTqnxzbi?iPR zh7X3~NS5Y_l1k9E7@NTEEXjvW=L`2Od(@R9H_0Y^dW8Hg5zCL9qBsjFuqDEes0I_CKWds+Br%L$75IU5=$!>W3^tCVZh3cFRUbC7TgJFz3FqODb2=REKAH3bWF%Rjz$T%p8fu&+`t^Gvv1wc d&)@8yz<>e)!byQJp+bcP8#;UlF=B%P06R~di+un9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/element.gif b/lefdef/doc/lefdefref/images/element.gif new file mode 100644 index 0000000000000000000000000000000000000000..150898251de90d00c6327c6e287c2b6c830a286d GIT binary patch literal 121 zcmZ?wbhEHb@#^7Bzzto~!rXn6a;+-|1YC8( UPfhf6I<)e-!tw12YD^5)0A;r(u>b%7 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/emptyset.gif b/lefdef/doc/lefdefref/images/emptyset.gif new file mode 100644 index 0000000000000000000000000000000000000000..f83eb0be9ad2ed570321abe42dc5ce1644fb7f0e GIT binary patch literal 81 zcmZ?wbhEHb6kyqk-)7Df@lZK2cg2pJ)a{F=th(aH$Y2cswJsXO literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/epsilon.gif b/lefdef/doc/lefdefref/images/epsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..753b8c7cef695d7bf5ba15a42791f4246cef8744 GIT binary patch literal 123 zcmZ?wbhEHb%_1T9H|KtPIuw1JoBm literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/equivlnt.gif b/lefdef/doc/lefdefref/images/equivlnt.gif new file mode 100644 index 0000000000000000000000000000000000000000..deb2a0bb4eea15d6e66ce2cb5821e4979305d8d1 GIT binary patch literal 115 zcmZ?wbhEHbRfjb?ic55V2QBtol(?>4kii-NpeGK=GU?NX|AcHjk!Z0c^ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/existntl.gif b/lefdef/doc/lefdefref/images/existntl.gif new file mode 100644 index 0000000000000000000000000000000000000000..3338a4eb820e95eedb1a12f7e087abe0eadf4d47 GIT binary patch literal 117 zcmZ?wbhEHb<_~`MXrPbY8!rDNU{orItMh0sDL9Q&4 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/gtequal.gif b/lefdef/doc/lefdefref/images/gtequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..adcc0dd377ee1e11f5eba9755fd655c68019e901 GIT binary patch literal 126 zcmZ?wbhEHb0SSQ2U|`WUIN`Z^?+rDTO*Y;}6$cM?ELo`H61HY>>Y^fv XY?+m>z2E;9aZ2=%dDqv-!C(yl-_0vt literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/header_doc.gif b/lefdef/doc/lefdefref/images/header_doc.gif new file mode 100644 index 0000000000000000000000000000000000000000..3dace6c2c084e6f4ad5c19794e7210b61ef3a510 GIT binary patch literal 2954 zcmbV~`9G9<8^>?Lv5jNOkTpWbdP+BDNF8IBI64&**-E!;Z6ta0lq-w8bYR z2=PE#5IDqdox~Rih9CrjPzb^x2q!8ShF}DOQ3%E$7$+_f7(x&TK_LW#5S)06!Vro; zC<>t%gyKXi216JEVJL)Q5QYOK2!|mYfp8SUF$f0*&<4^#3p9h*I5CGf2n?ezjKMHY zj0F{fzz7N>7>wWq1-L{J7)425|uY00KA!)IbbC14{4|aDc%;8%P5!oJfwi1~oVsisD3&z#kY3 zDhxw09OMe@0t#@6;uwm996{0`0Kf&FgP?(15GBY1V1jNC2Veq*fkQwI!~itt1XzFr z3&4H8r)jw|8-I@%8l$ z4i1irib_sS&dJFsFE4LyZtm{x9vT{&nwnZ&UHxD0&foa|`4HTODum>$Dzn?d1@~y2 z>#EFYj}})x&b6w_eHOPD_IcM;mDib|Xv&nczOLAGZKAKphGv&R4OG4Gf@@v#s5gTa zu<%ZOH*}X`Bqbo+v5?(#{R5_BHtV19XXN}J-n;6ryC1e<@Vh=sUwq?Gn$~oAV~V0V z>YMq8iA~1F8`aW&zVnePiQ2lC+$-odo03V7J?BLyA~mlb%5S*P^Q}ze=89_A?Mc@R z&0($D*2JXMY32jixhg>KWlQtu!Lh!$J)f8UrmhT?GrJEsaJNdPvKsC5@=9`E%NJpv+w_NjcSx-sNcQ#CDhCuKf0?YxV6u(a1| zqxoJR9v_CYTLKS9^gLJnLH2D4lRBj=Y-&M_E+eZ-rAyC-mp1k_F8JSbD=&LenM-98)`k+3faAHZ;gD)p|wg7URr$XkQPGcgy$G{X*g^#?}o{^lI; zi|Rr$CBaojFds6rw9h+6QMaSN{oWy*KdheLM}rg_C8*o))lv&6b6fc&>UheoQ}oaB zDLKsOGZtylN#=Xe$}WY#Mfwd%eVMB6r`G+|HG^j4V7F;E1_p>~nMS4e<`jSj_k-HgqNP zobBdUn~7%eyog63q{4e&kBH}g>TwZ&=OeZF`B$NbN5yk4vXfaQB023OYJAUb+LJbx ze|EI2=ToO4cUab)QldR0tn zs~cxsi7`b!H1=?h&;HaFbJ>pbD&BSZH^Wb5zZvI-ljxa`rHhJ8Q*!xar!71a8IlnX zu8}W#FmAD&cf;}pgUq?4h!dCk)zZpJRXL?zCwK-9OKW=1WCeNmdYU9BjEO#G4UV(a zgOnX@B_10NclQM~tv_6ee{A%hG-M`-EEs}FS+-Wenq{6VDRx^Rnc<^6khe`2FGgz zcwV1cbWH3MHjDY?pGo>iJ-7L=io7#(yXa}%Dydy;N^aJm^K`UohS=Qbl9$?BvXJI?F}Xn#O{hz<*<0c9Os}gqF+fB`da2L+9LM&v z-d&FPqhp<+**+Pr&ON4@qCXfGoY5vzB#V_@U$jQ)GEa96Bwq7VHnQ-De9(HI25tjgimZ z12&vHn^$G2mk@GZdhh-xl3s7l%~FnPKL0SW-grFlf^nQ~1^ZZ;i?-qLvhkl(NteKc ziZF+de2s}omtzbZvPne>9htKnj(+v{Zq}Oz`YQwH?=TH=TA_rF+2)fSyE%BO z?t+`fqE|cDY3Sd}J!=f?6KUYua8OEBRwv2u$il$zeCqHCiB@t{vv!s!TBonzXYF9* z|CaLBljix>#y)Pzd3RlY-IW=a=KJ**p9r2maEsscU8OkROTl8{7YE0UlCRK)1aR#e zFLOIZ_RMGs`sBO}-_Yc^$;m-ML0(>7hK7a`5)vF7 z91KW6@h1x-0|O(24oD1S1_O(|!3odRHkvadv#d@WGPoZ&GpMm9%#mYq0FRie4s(n* nbMqS!R%dpdA6l)kOXyft19Om1uP6OMjf-F^`#KTlt8e?Jeezt7+A R{|_*rz<~q{8l+GF06WF0eIEb- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/infinity.gif b/lefdef/doc/lefdefref/images/infinity.gif new file mode 100644 index 0000000000000000000000000000000000000000..766b388fd5bb6c91ec1e3fcf0de45ba8444f7b66 GIT binary patch literal 139 zcmZ?wbhEHb6ky~0+1c62$;m-ML0(>7mX?-=hK7oY ziV_kM92^`BV4(Pug^_`QkwFK<1DV0VVqtK?bM;<}*R}nUcQ=VRPUhhZTqtzO;Bt`c mf+rI$xr=5MSlG^Aut-6qfwR-0Q1b;-C+lSAwNWbt8LR>QI4nH? literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/integbot.gif b/lefdef/doc/lefdefref/images/integbot.gif new file mode 100644 index 0000000000000000000000000000000000000000..3beec4f22b65e3f555aa8ded68bfed95eca1a1dc GIT binary patch literal 134 zcmZ?wbhEHb=}PM@L6tVPRTYT6A=DKtO<{ zrKO&pp18O;4-XFm1B2pE7DfgJMg|=qn*n471Bto2aSLaOEH(ZvA@)6D!?7_0%Vc`kMU literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/integral.gif b/lefdef/doc/lefdefref/images/integral.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa748c92f066dda9f052c88ec8431474edc7fb3e GIT binary patch literal 123 zcmZ?wbhEHb eGhV(7-L{ks*L7vt!*q7vdn*2g(Qq0EgEauLUnt)I literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/iota.gif b/lefdef/doc/lefdefref/images/iota.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2dfc0d6ec0703a9ec2cb80aa0fb91732c712a9a GIT binary patch literal 112 zcmZ?wbhEHbCMz{sEjk^z~)z#?mK!gKZB%ROEbw8B2NCaX53dCqlHRXLH!%aRr>$Y2cs%Q7G+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/kappa.gif b/lefdef/doc/lefdefref/images/kappa.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ede7b0fb74bb772fe59de82a908577956b5ac6f GIT binary patch literal 124 zcmZ?wbhEHb^GJUk4j zK=CIFBLf2?gAPa-WCjC^rojo%)q8JDo0RU^cA@qmN0;nEnGA7`l-I}BO)uDL62toF OKSxZS#}O9>25SInswUZ0Z`H91tFjsx(aPr7 zgiYBn71R&|G$?_EI}C<4q@jgo^M-tlBhIOF=KWzTDiJ5@#JpWl;8Mk@IyJZl6y7=$ zXX*_0kOwf)jX2;R5O4@;hyfaucnS^-hBl<3Wj;B7jT%Qq%m)d77>i0()Q~Ief&!Of zDux`9Gy(t@o+D_uMU=<`nCM0vV1i*d1U19}jZR>J1B0OrY4a=cuW^kU$FMO334a)i zO3nNNgY|ogV55GY!IC^wkh@=R5T$1f((&644146jgI|7tw`N1vh@AO6abxqumBWo|sj-85>fWuQxoE@2;bW_FV_$~P?!UXW{m{eAOg8zV z5EY{IMGd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/nav2_index_b.gif b/lefdef/doc/lefdefref/images/nav2_index_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..87fc9ddba320b458e6a8e00e4c731c196938f810 GIT binary patch literal 854 zcmb7@F>BLd5XP_I5Qjj)4kdI@T!KiKBcQkl0d1WEu4Zt#!F+-2LIf2YG95S=b#e%; zYbFt~ftxcq<_lyJr}KAj`vv+g;dtMB?)N0K_4*UawL#Po08cLqR!C>ph6Etp#l03kqn>b*?Fb<(c3}`yR zf`h?mBb~LPdd)R8C)pT5;*YUZky#6D>o1D7(b{KQQbD!cYrQSXVr=QuwwvKXZXRm+ z4XYfqNl5cKuqDF7QyV4SZnxL#_51z7U@#mGN2AerJf2J@)9G|Jo6YC*#bU8sE?2A7 zdcEFkHrwrXx7%IzUVX^d|GD$;#?6lG$^B}r|HR{t%3kN_Y8Z!0ufmt!84{pHiWp*;9R$5<;9GOBfF^C24o6MEcjxE2oj^b@%Y^D{0F>mnv;9a zb3V^=zTI0>Rq<3TLif{Obmu4{O~gcoNC=fuq%(M50JE36mHS6wrn=w9t&#V&~YSm13ogQewxV(pqU&+9)lS0+*~6 zvtpxIEEL`vtqdz;lo2qZRf$%@N{kXr1vSI~4N73)4uhc$X=tHYtRY+Du+~OvvHma? z6|-ieS*%@9;L@-*MjL^9K;f+x)?&249`XPtx)BHb0|E{~4KYB25>LT_!O(^@w8SQ7 zuTkR|X0buSAI73GhK(Rs*aZbHSquwuMA8TVTzHP4;TBOM4`8AjaexVi;Skgi12j5; z1r7{`Hl)R_$iBukY8=7F5G4FzEGi>n7wD|tQaBs6`*fCMp`6_9dYvdOqmz!^wqw{L zJ09%v9W3j>nFMKk4%iaHgC}Pcx!rEB*X#HD1A#y&6bgsK(P%UtkEc?pOeWLa-90cc zkj-ZE`TWGh#Psy^;^N}!>gt`||32jZ|FdoV?hP&~qB7fR{}VyiKUCy;sCu;j%XeIx zcJ9A2x-H$jlpQSTtzXE+=cp^M@4LL`^_g?gNNMw8sFP|lYpME|FU1SNL$9=5+kYW` zX1u2L$`?c5e-eD__=AVCCoc3;X8WJ)o~`TiJn0$phkfbIb35NCxFTDp`W_y6due#2 zuROV<_p|8L^4R(0?cI-zeK<9ndo8i%Irn0-{_4Hb>+heg4*0%JKCaFduV0JTjb<7< zb8W{?ymV^glJ`_)&PR!@%V)iR|M9|}<25avXPO$LO~-C~KDb_&KfnCb#lydicWiv( z=aa#b-#x>Llb2e0D-V`!DW7e>$rB@~2OcZ5CvP=m$7-|wmE^8mSM1)E#PETS=RHGL zzgyXU`kR@{pFiDxWN@xy$D_X-?Pw@Fde}GlX;0|KuUjYEN?NMIG2dY5M(gfGz+2z7 z-nfb8d&cLVxm7k^ob0Q~^&f27;NSe}4DFpNt|;p7ezWwz+GK2|`q!HcLtAdt@4IKY n;)mx8?suQ7x@+B)?pR0{8Y8tw)JLg>bj57Xv-{Q~L8|;0OU5W- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/nav2_previous_b.gif b/lefdef/doc/lefdefref/images/nav2_previous_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..b02bc97081d3d64f843aac572eabcfc39cdb022a GIT binary patch literal 871 zcmb7@ziZQB5XP_I5W#?;gOnnQOArU)2vl5zh_+6FuFW9A4Q6!7E>zILA%h%tF#Z}k zgtm^EM8rnVHIrlhflT6be(qcU0pBGY?|aXEp69-~zkP4>*25jSD8J?OsECQUNQk6R zsfwDYi-u^{rKy;Sxmbv0y>%5gaTgEqtkzHolW>WUNR%X1(j;9nBq`8F8ZDZ6oi(S9 zsk&;YW{ssXQ**UY%c9`YP2JT)JqwDrVH&Ox8VMtXtbTzZBlIg&I1z{PWd#w}5j2bgpd2TT~oA=HQg zO($4zFc@v5vsP5Exu)hM8zV^kF_tPaYk|%Bi=x?R?Xy`@K{dJ8dYdSVu}P=4-54(9 z#zQT?!72yMB&7Kq*b?F4sTn2hc6)t&z0>J*yWL)|*YEcSgTZh(9F0bMdwb*Ycruwx zr_2L-7lQu?5$=X;{LA9Z^dz@^z4(yXsnQkgHJ}r}z2TKhXK*?%6rd`+2?J z&*!FPY*?F|UqYhDU*yrDgfK!lA%YM|P*F-KBa{;=2$kxRQNkEuoG?L{RBt&YoDt3m z7lcdIDku?*2u_3`LPCj1N+cta6Df#90c}V_3(a^f)f{ygrJPbhsZ?W8F-94uOi(5j z1ui+GoKr3+mkJ7R1*3vfA*hgGL@SkyN=~Jq5>r79F+hV7Sh&MrXhRxWXqL*5s&P1D zf-$N5VJs@n85fL8Wfv5<6r2gcgoJxQ;VqM#Nx>xSArD}p8*#utAm9+x5Cb$Q@e~{w z3~fk5ORD75HEJBexl}>IAI72*f(waUVHXs*V1WaJp$%!NR-|6z8a0l@#tkrCOk|ennwyRPEDPl7cdFSL-#R zRE$PCYTJfkg=~0G%Qvu;17i}T@i|~i2oIi&Q6wxZEG8xQBv1ugY*)v^j?c-W0@it$qXn$+4 zE^*i{ykFbg4*!)J%ZnYSQ;+I-3#Poe6`S@<+Sc0!w@!CAWVURq3EZ%4A!c!SQQp$P z4;Rfn<=Xb4@!k$g{}IjnjXAk>m&bK7;Z|(FW9)_8hv|D$yLZ~Y%FvsJlKOVb+|`{>B5xfgEqpxhr z^!%SiNfX|8&6}I_`{AoET!?;d&Sa_c|I|-b{A0NiOK=ec3jKEq zZcbdzOgJg-ww3;TEA#yLMz_B#u&@1tshd}?VtK*w(;u56w$`s(wrhAIYn8vjRn^5w^P|-|V_EWoWS9h)7veNg) zw&agS3u|4!yI;F!4GDDf!k4e<6U9-Z!!?EXc9h;opVEDiIf<9%X0( zEGOqqt24F0%Pq^C?veVpt2KYIIcnA66BC!Z?|xC+yVCCD;h)+MX74K-J#smDNkm#f zw5!3n;lX_Fse+P_U&{2)pZW3q{l$%$S@Yqo^=qa-S)`wx)TkMe;;?t literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/nav2_toc.gif b/lefdef/doc/lefdefref/images/nav2_toc.gif new file mode 100644 index 0000000000000000000000000000000000000000..5474e92e609d9f4b155e6c30e2b1d4a781670170 GIT binary patch literal 1154 zcmb7@>uZ!(5XL8vgf$v3Xau)5;tirJQaIgY7a=T7yu^A5*rt&fXyE-_U>7fZm> zlAx`h0_rpbjhF?MY+5x5-3@r9P0BGV0T{sW#b%W%#-^Lw6o zcXh?8Q246~nnf?^?J-1_h>3(q36(KqEEy&vWYk?+L)MaIvO-qfTQL_r@)-W3u!|I^$ zR;&>=B1RO9XfN++i@ZAq_1wt25+k9JW@hRp$?5Q88N<%j)cc z0++&8#EQZ_pzzizTNSIYhdh9ZZo~oqfPh0#Lk!TM#8Yr!Fti~JEp^GcYt%TxtS(6S z!&p=zEQ(xV7ZkW;6;|Ykq!9qP@Ek$IEuusoz(hCV022(uA*dk+XmkP#92g93NUK|s zdyQ+5nCvOzx=jZ$V{-UCyU@%x#R#sVASzB8hi^byccvDkTOG`_8dwVjOOsCTW z0|P@tLt|rO6B83}d*6M?@BcIZb@n75WzjO%>i!cE-+z?lo4e+hQ&+$D&0M;r|MtV~ z*hpR?UA$o=SWkt=0tY(p_Z}YqeP=qcd~U^e{_w%Vo~78p0Xbc*QYLx-^q#YYJ4@A$h3B?yp{8O@P3E_{Tx_*sV>xzK3`m% zN!5h+jaB)kyj&6Q9qo)QEP1nU|48?NV6=I7cI46Jd;fm9Hm831lG}feTx*;xA76-f zjQ`oX=~?NyNW;vo?%adF4d2)k=*y0*tGoNh=heN9%?01S7%iApJ$fiwUHqWDuDWE# njyp&9ZakYQ2o>i2FrWN;Pi&3d`zZ6lu4O$>7Oc<8q80xGL>~yq literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/nav2_toc_b.gif b/lefdef/doc/lefdefref/images/nav2_toc_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..727f3ae5ea1605452ef2b2f2bb555f7f293c9328 GIT binary patch literal 866 zcmb7@y^51j5Qb;LA{GHb3kh2&HbE?eA)r_&1axB+u-z0QOkr*yr65Gm!XkwXY+?Lq zEW-YjsYGNqI&~_`+(0U^8lU;r8}Kw?IA`8@-gmw{8a%vn_vt{c$Zt76Dq-GEn;cz$_jmG2gWHOmfr?c5?KA$fZ zi{)~;TCLXW^=7l#Znx*X|32jZ|GEC>!o`;C$gOIv|HOmVec5U4?j64W`m%NT=Kk5? z{M)NbHy$7C9ew!z=Bhsbb$0ae^zF6&>)pZer`4?csnmtm|O z7WxpCfppW-u_9D(a$9u4g32xo7DA8_R21#j`RX6&ybPOj_S(O-_BU(SugMOSfW*;w!};<#OhkbkXRBX5fX(GsUfwb zOe&-(pbcqgp&75$&2h&X!^Vg)>c*n7)>t-Hj8#X0OSXpDuozYcg|}jjun{q$U_`4? zYm|+OQA`Cj!~hLSVBrpfp$%zhp;?_FSL3j?Vy!xV7>kP8vRGDU7ZkV@wjx#(?g53j zR@tgpg+1f}Omrg-_y+_Wf*N9g1|^5@Au~3cH}d zC9AL^M6lh+o!iA2j%7N*6T&-7`=4dwmriR+4JC*?_oIy-XuulbHJ7m9z1!Y zC?O#sB_$;-EzR%u=jG+)=jR85!SeF*+S=NNhK5im)Y{tG-rgRGM558?@bGXf78@TQ z|J(cTL;nAtxj*8k_$ZDRxmNd|$o2iEIN!{5S6lAa`;rzEHhwR6;j!epZ=|A`` zV`}rIldn1|-aH9z%*rU~teiJ^uyo-1g~8LAL(#&x;^x4a?5f0SUtKuwSaNUN&d2Em z{l}l*oieTM>dU_Bwf3)_B1$I5ajIoz~u?ZYb@t~DktERx&%OM5DB+$ zA+%jH6%m_yb0)|91DV9>{M@(x1HMZ*-uIsSJkNde$xqar5aA|aAO zr7CKoE*hd)m!@JS=3*h1_10C~#9chZvsyzXOu{8XB2ki5Nt1NRkfcBxX|!nOb=I6Z zrs}Gpnl+ZnOwH9oEsKInH+5GJ^(-jfhH1D)Xe5lZYMQ2Nh9*;?Mhs{u!Qzg=Xd{gl z%~^)3=D1myW%*+)mAiSEXW4~<%W#XZNZbR(TT8bLOYD&cm~;~d{(-XiB$5^V!tOYjfFN$WPwa;cr1=ZwU>usVe#wMNGc4N4Z z8xOVo2CE!2laS_fU`vFDr)HG2+wD%L)9rS9yjmP83WHOyjXS3OS zK3^;r%jI&lTCLaX&1Q4e`|m^k|DW4`u3c}*mh4q){U`QYk7TR0dvNmM{AKIL-Q$as z*|%5Qcb>jKIQ{tj&5pkKb#eOX$J<-|*Sm*jpO@3_(bwbU*_WU1?mfTU+u4?fe*ryw BfVltw literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/notelemn.gif b/lefdef/doc/lefdefref/images/notelemn.gif new file mode 100644 index 0000000000000000000000000000000000000000..479a88d3f83b722f8a83b4e0bc96457c1e6739f2 GIT binary patch literal 141 zcmV;80CN9FNk%w1VGRHc0J8u9|NsBBwY9CSt(=^kl$4Z=jEsAGdvkMhT3T94N=i97 zIVmYAAt50U5D*9m2mk;8A^8LW00031EC2ui01W^Q000C!Fvv-3HOf|X^kK{5gcYI) v!I4#hg9eIW72(2+^cz7_A literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/notequal.gif b/lefdef/doc/lefdefref/images/notequal.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f3d74408318be926ba759044d1af33e32e6fdbc GIT binary patch literal 121 zcmZ?wbhEHbzY VN-uU_Tv6b;puzfyk2oWPH2|hgCG`LR literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/nu.gif b/lefdef/doc/lefdefref/images/nu.gif new file mode 100644 index 0000000000000000000000000000000000000000..049486c79cd9d8d526b7d89f8ad0a2fe21bb7e35 GIT binary patch literal 124 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z+!1|!gKXr3vVSRN%4s#lL{j`9?o?P3Sedu>nu?axqCF#_NA(H-y{VV YmQ@a`j4XI~TAUhF6=h9la4=W{0MM!<(EtDd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/omega1.gif b/lefdef/doc/lefdefref/images/omega1.gif new file mode 100644 index 0000000000000000000000000000000000000000..0009f0e3029e451f022cd6541d553efba0b73688 GIT binary patch literal 144 zcmZ?wbhEHb@#^7DIy*o~!o;O$k0C%cH1rHo?&Cm`>X7Wv5@fIj0EewD8~^|S literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/pareltbt.gif b/lefdef/doc/lefdefref/images/pareltbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3c0f75b7d96b7af435ca7d4cadfc0da691f299c GIT binary patch literal 126 zcmZ?wbhEHbR~A2WZ@$fZfghVWe5P?QSOWmu4k>5= literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/parertbt.gif b/lefdef/doc/lefdefref/images/parertbt.gif new file mode 100644 index 0000000000000000000000000000000000000000..81fcda4e8e32ce249e416556201de738684ea355 GIT binary patch literal 127 zcmZ?wbhEHb_^@YMD_aw+u7lX)y{i^H?d3b37v($Su@ b#`l@%*;5jUi(1&*4osd=$)e@Y!e9*mS3xW2 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/parerttp.gif b/lefdef/doc/lefdefref/images/parerttp.gif new file mode 100644 index 0000000000000000000000000000000000000000..3479f8d9a92563e0c50a6b87dc38522ce8bd8b60 GIT binary patch literal 124 zcmZ?wbhEHb@#^7EOZ_p3at2<)%K5oV!FJ@d8KUq!y=OBj>Co XDeets^F*sk+xJ}17vXkcV6X-NE=VUT literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/partldif.gif b/lefdef/doc/lefdefref/images/partldif.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f1928e773c45229ae7b2a67a86d9316c7ab688b GIT binary patch literal 137 zcmZ?wbhEHb@#^7Bhnro~wP%$x2U9WZfKkSj9kQX@pCW%rP%f kU&)qGoWRv-a{1yC n&X<19&MYg=H7)vagsEFZHPAzVPukC+aiUk#HO)>TMh0sDU9l|w literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/pi.gif b/lefdef/doc/lefdefref/images/pi.gif new file mode 100644 index 0000000000000000000000000000000000000000..71444f3c50f9181ea24f57e885725eb1ee3df4d3 GIT binary patch literal 134 zcmZ?wbhEHbHR46R~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/prsprset.gif b/lefdef/doc/lefdefref/images/prsprset.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1c8c73bf084fcdbc83b30a5fa6bf1b4702ee6f6 GIT binary patch literal 67 zcmZ?wbhEHbe+4F3%o41uZ?f3h$#Ft9M_0ND&6GZTz9y{)aSrKP2ml$4B&jD&=Qb8~ZRYin9s zT2fL{DJdx!7#Ii$2mk;8A^8LW00031EC2ui01f~S000C(Fvv-(y+NcR$B;!LOi433 zPSzw;;c#f+aue|e@!@=wqu{ATs>1li77WXw0Sq)~6$A=(z+_M(Yg4<`dMptDJI@F< AMgRZ+ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/radical.gif b/lefdef/doc/lefdefref/images/radical.gif new file mode 100644 index 0000000000000000000000000000000000000000..74fc200c7abf8a90bc528bcc3da1837531a657d1 GIT binary patch literal 78 zcmZ?wbhEHbL!; literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/refsbset.gif b/lefdef/doc/lefdefref/images/refsbset.gif new file mode 100644 index 0000000000000000000000000000000000000000..410f8277cea4d67d77fdce2607d3c27a87dee28f GIT binary patch literal 118 zcmZ?wbhEHb~0+1c62$;n<`UY3@Yii(O75)vF7 z91KW6@h1x-0|O(24oD1S1_O(-!3odRdo8kiru~m|QavWd(Iv^#EwyD8<7`$Axjfe! LW$%6qGFSruC6FQZ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/refspset.gif b/lefdef/doc/lefdefref/images/refspset.gif new file mode 100644 index 0000000000000000000000000000000000000000..8464b13226ef3b7727e52d91b6c95cf4505125dd GIT binary patch literal 124 zcmZ?wbhEHbH3^1VhlZBCifssK6BmgplfyK?>gy(7%=83bvnS=+6uwAZbG%|JPU~_8r@D<{_ xe6eBcl2G<&XGaGU7STh?#IqxrjAp&9oD{^u-FlESR6(DMO{+k_{=6WAH2{BmE35zj literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/rho.gif b/lefdef/doc/lefdefref/images/rho.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8c565914153cb35a245d77aecf480b1ee47ed94 GIT binary patch literal 134 zcmZ?wbhEHb@#^7Gr}Go~uocb4Z71b_a)W8X5XNm6`ldU`n#r h5$Vk(QtH7g&Dfj#OC%MO~V6!GVRr8UQw$C}scv literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/second.gif b/lefdef/doc/lefdefref/images/second.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e65da28d0c0efce39715984712f8801348eeeda GIT binary patch literal 115 zcmZ?wbhEHb$;m-ML6(-5hK7cUii#2v z5*!>H3^1VhlZBCifssK6BmgplfyL0^gy-tL#S<2~>-s47-8*71uQ0+b*yps@*3<$M c(T9E|OI0SbJf7qrz{Aa`W)PrfD9B(90F2%y>i_@% literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/sigma1.gif b/lefdef/doc/lefdefref/images/sigma1.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd4939b672a10f6dccbd67715280cea74990a72c GIT binary patch literal 135 zcmZ?wbhEHb1n0~jd&WMO1rU}Vq%@jzxUu$UN}@XR)SE}-4+)KOH>xM^ZgU literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/spade.gif b/lefdef/doc/lefdefref/images/spade.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc55199c42f6251ea7cde8a4e2964f7687e6ff27 GIT binary patch literal 122 zcmZ?wbhEHbK$->CM zz{sEjk_4H-z@lPs!gKZB5&@+*60S}OZbmWAK>;m^GM$ZG*Beu$i%O;*NS?~UU=0A( C93AEW literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/sumation.gif b/lefdef/doc/lefdefref/images/sumation.gif new file mode 100644 index 0000000000000000000000000000000000000000..f65c1ddc6f666d05fa0e78b8555ab1797fbfd8e2 GIT binary patch literal 77 zcmZ?wbhEHbCMz{sEjk^z~)z@lPs!gKZ3MK6qAd3ddmm>S4(s*<(&(%RNdULR$SuoyKTpL26M H2ZJ>L%*-X* literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/therefor.gif b/lefdef/doc/lefdefref/images/therefor.gif new file mode 100644 index 0000000000000000000000000000000000000000..95944f41d016e6bfe322c85717be224b389c76a3 GIT binary patch literal 111 zcmZ?wbhEHb@#^7TbUmo~s?aRki&lcO{v2gjg__N?m#|?)smtvTqnxzbi?iOm z`wuoiNS4WHrXi}f605+A?54DFA9-EgIk4lAd<>vaXoLihCKfP>V-A-AXw^EyN?%Wz zR_A?gJ;v_|JZ@5}macoWcE#Bl+FW%vKkn+cuX_UL=U{iH*OMiNa3~TJ7=;uAxX4Gh zNO>6Jt_J->%*s>ZcR%s hJ>a;WAd3EzgEB1uLDYXG9%EKL9a literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/univrsal.gif b/lefdef/doc/lefdefref/images/univrsal.gif new file mode 100644 index 0000000000000000000000000000000000000000..effc1a5fba72adb9b56c56f6ca69f9143c43666f GIT binary patch literal 135 zcmZ?wbhEHblCGj?*M&2x#Fav1TasHk$+uk*s%2`5+!_dnNVVz34P_0cY) literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/upsilon.gif b/lefdef/doc/lefdefref/images/upsilon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8a2b3389f27abf4a7a8593e1fa193b2e606df46 GIT binary patch literal 133 zcmZ?wbhEHb0~jd&WMO1rU}Vq%@jzxUuoxMf@Lau?m9x_$woi%ktRpX@#^76XG5o~xHWnV~799CFaZ`=Q3wCJ}do2-n3N f(_dR`eWFvj;rsrW4bLQES=ihcU)b!zz+epkQ~WGS literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/video.gif b/lefdef/doc/lefdefref/images/video.gif new file mode 100644 index 0000000000000000000000000000000000000000..f339ffb6bdd11220d4e530f1798597d12a1bab46 GIT binary patch literal 906 zcmV;519kjINk%w1VHyAz0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~EC2ui02%-n000PY009UbDDa=bg9r&K1dxy+!iNP95^VSoqCrrnR8`Kp+#Yu g3~EznQ<*nQ{*?KYrO}s4v1-jab12ZBR|5h7JB8)3VgLXD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/weierstr.gif b/lefdef/doc/lefdefref/images/weierstr.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f9689b8080c0d57935d6802003b3e14b7def1e6 GIT binary patch literal 153 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 p-q?c`u_RCaY!_aW6Z&aCZ^4O$*zK| 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%0Df&-6<;kQ%h&)N=# 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 z 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�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ⅈy1(s79cPwcF6+zLI z6ZR_?6OdorODHsCJlv(45N7T1-a80Fj`@RSq4&*9BW3OvMCwY+=x z&y_u)gS)N>f8nj}XCV*^7QpA&KzlRWo$UmKUoOoq0DiY;>+WlO)?Xd>T#d#2%5Ta2 za9FU_!Ee(C%e_Z%t{J3y4-J}Y!!sJPi?^_QcEiS?-|4@@YK!XfI!~URfWwLHH;u{; z!xUjd9v!7zn$Iay@GHNHKw3p>#2M{jw-`svsT?vLSX}ukZot;}j7)4KcszvQ;3R?U zi1Z1J6N5f&f9ODPw@zjF)hs-@^pUEUyM_SwbS7~eZQpGG5u(vr(Ra{Bu*gqUbi4ufa}Hi)Aej@Jaz2yc8%Cl_6>odi?`h0<+OkwUq|4O=q@{42P}j?7}+&?YzP zHKbdI4x3R0JR$@X77xgRE6RF&N4nv7%{-Wo>D{J*8oybKI*7zncZ~P)?(> z3N@Kp=&;_wOd!Ae?c+_!E^5Z^G>yGwgcd!4C9bRjx^bohhrw&sjh1bfXm#EPN?H48 zdOL&nV(NlxGuEuakqlN$z~Ejt1*!Hv!(+d1Ti;KoRp7x+Jl?EqU7c5(*Om_+_U(}_ z1g)+2s~;UaqshHW6AyW99KvAgQEIP{sllIleJU%A>0Mf*2ZPj%Syv@q{#eMU`1*mxxMrAYhn_*1_`kK`k9A z1~o(?_{{Yz(9a6PRM9{3F$Oj6JsO6aPwSgT9k`21TnOStg&2}0Dw8-{%B<`Zp7DT4 zbOT$gsPA0+kVosm)fS=OM4;R2)Yr~~XoU_4G+Vrx(M)khVan+5i2-+yz1=uZ0cixZ zwO|vz?O`oxI)z?M z?H9XQft->QgyG?T>^mm$(!|U!K|Qe>2AY1f#JRzn0Ln)v%IEs&EtWno!0GH@pE1jc z9@C%dS6A=LqwZ#nv!Y37hHrU>LFFbQ0z>i%dqm^sXt!uwYmwxSfg(sBS`nx%;scjEOtab|PDMra)ZpHAf~m3KtUh?i zik}3Ay@8htD<`IKLPg{X$xN&!jeb+7&Bgq+lLx6Z7Y}+H42!$xqtb^vE$0b zWw-kVjl(XuGFJ;`6y49F-_JzRO|C;uH-R^lm3*Xfy0=5nLpY0iO-T%wiQ_RiwpVz} zz7!&F;7&M{@)A+K)JK{EcQO1KoQ`B89+WlEVW5YG4U5b@20yVQk=3zfE~*NgGDrvg z=Rr1QB5<1F+>s=o3jrjbU2l2duht%8?LusL=r|wfQ`^-500nL-&@S5Nwd*eD`T4gb7BRGC+X`of7_vvsg#nOuUcmvS9G8%x+D>nJr^il>4z9%KO2Ph*%FUJAElLa);b#%DPkM7ej=kC)EuJb z1q~bbYmtQeGkodAq55{lXRqeHRQcNZju4XFOOO>g=D+#wNT2fvV!PoJt71Y zkc{U`33rz@q&KViwLPPom`qshC2G+O1S1co-bH>*SSA ztUoc$Gt~Q8Di`k6(=Cw!jMb@!v#D;^$*9me#!{J>iJJPFWCqF~xwV6@Ui|7IayO^! zbHYX`fonBPKq5M1UP*D&WXYV>S{CILFiB7A4TWY-*2b1T( zB1W3=Ki_p2Q=qSH(v@kH#6ApCUJXt2Umdt7HGyohbCv7avaKdjF8veZpJVELtjD3j~quS*k~?V#Yn5;4j6v8+IStmw_Y>$+E@L7`tV3~24y^%w4C8(8U-d+^pfeCkiOvLR9uNtCSrLWgh0oZ7`cr6G%58{qz%o_2GQuu zgjZ^3QG*9w%CpaUeO@h+Hw~xx`ow6ovn&4?nm?mu1BIwW@g2A zUKw+EDft^dU$UGdfpad^me^*Y3eHI0vAX?o&vMOK+@MC61}BFq-?s0kUSgp;05qw= zz-+S{2A!La4=^ny1*gxvU}O_Ze}F4alQ)POX)pVx3%c5!;2OloYR6(8yv#Of0?rszO+l%oaaE8u)$?>JnaD(iGQh;wtRy?C6bMgw7Y3+7h1 zByI>uS?Uw1r}(joGAZZGH5d0GLH!4j8Df)Cj>{HAuwj%iT(L3 zYeVtu7N;FNZWX7E;dumR;W;K74E$IxYrl>}c3OYik3{A-H&96Adm-s4jt}#W{HAy-l>?9eO_rT#4L-T3!y-tL%jD;QftPnT>OO z*$F>!qezvCcfh3O<2Qv2JkCxNu}AgE7lTax<5~{lGCF_c7~FLA;C7p_)S4g*)AQ{Z zypRa@ces!J)4=k9v)WA4t3t4p%d_9<5hG}LnT(qPTC!7s3`B#35raFj_3^y}+MUfm6v zRk=%{e0GG@&JsnT1HDKt5bpx@c$K+?2gk$8-cLk`&)z?)NpNQU0RL1M`ip7n|E-y0 zXZX9FjPBp0|1kXBr1qb?r2oV`#{Tzn{s*?Fe=U^IiT){R;9&dvwf~i9^7s4wm!b(H zE8Bl@H&tm^J8rTfebwmt#~P6a-HXO`T{@9UU&U~hUpq3N8)tmvIhu*FdDxS*SAYNJ z=>#B_D9B=;FrtoEyE4$t*$(zIvu9)f^(!0Ib<)4JK%v>L8BHZzgsTlFt4pJ5q_r?J z`E5TmasSZU(}AS}YgV-K-s|Nsmap5L=gpj*or6g*a{rniEB_8&SJeDGs;nwuB5dC& zuP#QZhGO^*3?Awd<{R@fr<;d|%iYm~R6;$nwQzlVkbG4lWnEi``ORY3*)vo1De2H~ ze#U0wlW$PBt_0T7qr95DX$iMr7X~W9`jBvBfv_pW?Uh|K`fDci8!HPAd}nN8P=!vC zuBcvm5#rpUSgS4rr(gI@5VKVzsM0K;u>rDY!HQ^cFDgWP4kAN=Z1N{nwp6Pz{qI$I z8=NQ)V%uYp@KH*-sG2{8aEt9DrMj_~6Uxn1jg`aPQQjW>N)B|DSKc#8tWk6+hh2Uv z>t3Qd#xzl*06h9!tN^x>|x^fo%Bwq6~TNuJ!;}@`{p&7Gho;S?9i!im51)kK)Bf;Aq zehq!=?qheaj=lxjoulnRiLZ>h^i%b#13$Yf?Yh1mbH~ys&`%EDDdwfZ=OBU=3Y{bAS@Flsajrz5iNub0PZ*YR}!+ zytk5qq_IK0He0407T=mBi*-fcKaNVkE@+Z~ij3gzu{>RL0X-cQ1b&8gxEO5sP5hM^ z*eWCRO^ZqmA0BPAJti5hucpK5s}^rl`0+9R7D6@sfS1$;ZU;5BhC~vWXpL5QJF6Rh zZaCx5!m37;4Wx-yWUK4V-i@j#WvN;i9{z^i18{!va2=XUN5^lV`U5MghB%K3C3*or zdLH2i*Ob5wYza@5TqI}G<>IPP7@!Cz(y8$KrlG9Gx{yV+Ds2HRGbRhNWj3(myy5Tj z;Y@8jXT}90b1L=pJ?+Ih*T%}r$;!pceQ-n|#o#`GT8cWQ%gUfcxsY45$B)SQCX}Z; zA7;oZ#BrI54&vqtX^h(N+?Kaw_7JX=8{B!SxLd#-;HLeycvBk=(uPcsaT{U7HS>D+{caskTX~ zDolJ@eo;9sjmgMLFf9YYRxIJoT4d9lGMdoI4Vr)}@zMT>u^bWwA{P-Pqi6EMZ3LJd zTi3JB5^rsgX(w9`xMjl2>kcF(h0D{YHJK}zm$j;DwxCAW>2p$y3>b8(*>+CQFm_e1 z0lz-|$YoGarL#vW_QJ9qvYiEyU&(y)G-E-VEf)gcSvX_ziG^psu7lGAoPq(3+vCyP zOrRh}EY-Q>J*f7z`8%DIzztg2l2cbA7nY@p@99b8`Zx0lX)b7QLo_m3=t}6H;q!&Y z5t>3wL9@`<6mdn)0jPdU>v8n-={z!774$+1e^yd~Xfg*jW0rFYrZtBds0kyvi%Zqg zW}kyf;lo={@lX}vpcs8!EkefZq_!|bJ5zE>p#0X**KD@cUS;>W;VfrAD%Oc+h3T&| zBh_)8mULrSD{KpN>o-~J40H=$0(KL4oqJBb2Lc7CB)Si1&f>tO*6F{cq(+#=fWoVw?n`|pNp%Iw?`*d;2&k}&v$3Aw!N%kf+ue{wn0<(TsuOTJiv?- zh#(VCo&;o3j0-CRA$6R_W^JQlvH7ND}f+wRG^^@1JZS2^_A*JJ^G}R(l?p$ zIzBK3#~LxZoxkx`3DLQ+@`kxQHD-7tO_&=DJN{zM!s)Bf?@c`h zeC*YTOYD!YtI}1F!^kb(Z2tW+oKsg}V!r9Du2^BYK+N4xB!hH&W&}gV18~vl4OAr$ z@s`*XDERJtK6RR=>J-F=p=2aGJimr2qz-hcZQLp?_~{pNh7eY#lsh(`G?wqTbmS>! z3^*_MDMZ~@ib$J8CCw(_)PM=3vfzj_Kkr|2Y^V{UFKsAe^RxV1W}C16Q|;4`M}7Y*b7ixr`8)F zQd)X1L?|E5kLURT&~S61`rN32SBp9c_5;9b6A4Gp(F<6Qs?B^85BfcM2Wgs~W z+M&OZ$ZRYyiiG=NQ`T^xU2McuhC%bCEYvNiyVfr%jLAa{c=%g}Ejpkzci59!09iew zzc?vU;1%0bpCro5x=?7ZAv#fCkD6XR2RPT;WJUtp&E&u8z7H~5vghOnIw-l5XS_A6 z8rqL?n^{*}y7E=kXqW8K)D~!niSGc(c5f{KeLA9HGCSD&3qHs=U22UNiw>o4+G0Gu z-+K|PT8zOYSDcF;=?-a~Ym?GC`n!;F?n7!Q+cM6cLDRxjpfVP^djcKp|0R1JI;R|+NYr(c##AkbZ9=&T5l^hS_mq_ zYiUDDi7%9S)^2L5qJ3p66Ze0XC=5~J$xyD5liqjr92)JKdM0cjEGVr4jj%JY`p>Td zLTw5V)n*8gDf-m?6An>b<$L;P_?_Wz!HoYvu7APre{*{&{M+#RKcXc6 zTmKfrU)Ik4PmE6g|CBaFn>WoJAy1 zdX!?5cxm8J_OL-6Jf@~glci(`v22F#uH#P$RO4Bfc@co&7UG8;$6Jn5g}Uv7mr~Py zmu+pPAH9IlK*P{li%Obig&#`ng~Gg5Y9nWN4j=aa?6doma2v*o zbaSEfK)4@Vf8vk!Ch#O{>duqlrM6V97Jt_+)2%TvdX{JjQzK{*ibD$Nsd2WNe`Y&(oT_ZqI1T%g*#pT2wz^sfa8s|;l&bNF z_-;p1+Zt|~eDp=wh)tlwz#@OJnGM$9A2C21;BsP+a%0*<3_3w@G#npX^~Zv^SbBA| zfS9rwW#4VdX+(3(8XqntW34QGuu;zCtF^*jY&94vyY}GAZ08-2euR_Sx1#qDTrdG0c<)7*OPZF)1vAX@v#A0W}OwaGw0Wb-|*OHgQkAwvPuAz88_kc0CDGP*KG zne#SD?AKB9)=Rc`;Iee>u+diX4rI|0VeX>S71LniEP1@mqn`K0x~lHTS!_TCh?&=H z1ukG(nPbjKA_A$NVxRXS+6M#BhR!{CM@4kV8E!!kNX+;Gm7W^6iWr%xe|^NmOza+> z?S}sv7#vJ)LRgB|dDAMJXRc4jJ+P5q@U!i3pI-Qd?+^HLjw@+?;gib~JqLM3d)z2) zspyCtk0q~7)=&bRlP8Oj;*O%l!)?A)S(#pS1Gk$^EfdEzvTGj2)-8J`UKa{wRzQV; zBxfaNv*t>(Kw{B}_ZjFSgq!{DcZ4f+2jcTg8|3#8$xAYNx&f_A=842ZOGg7saUUVa z#b3W#io*e8m3gaM1P;59TW$?5I@5rRYL&kOxXAn5z!h>9cz(dPX13FY0-2s??d%s- zrDCgU4W$C}^Z&64t$db%ZV=hrT$GSR6HZCWO^V?jK0 z_<5thp3Q>s!cd}4xtb#R%T7_aC`WhkY7NyUwz+K9k;uhb?| z_WL(wWEv)V+S`2WdD#ySoTePJaD@A5!ip6Xwwl*-~%ySb<4rRA z#O>jytGDgMB$5%CE@UD!5d~u(+^<^pE_@uky~kHQIl{b=-9ex~hrD8y9U8K*bCslf zrcPi#j#CfUZHQuP8$Y_nGP9*X$6gL^VhAtYRT5E zdmQXzuR<@xO`o8l!=HmVskJbWp21v z95*PC2r*w8@Oru%r34x`WPNQ{n>x4nGA#%|9*RV@>i*?2E6m(Zu zE4fqZFNuUO|6@#JqH3#)0W!)BGk#uZ?^XCQQ{+#;>+|#9yxLiH&oePqu9Xg7Zxpjl zpEi5@(nhl4NLlB>Y_6$_RYu~IiJg-eo|7GX88+WLTgwUKr(HJmk}XWN4Ugx`PbWqt zFJ&zdaiv}E^a+kM?g$ir5)NuP@?3pJc;;cd8gF zS%5%lCph%rH%2F`ZQrbNo8ArO*;3q4TZ;khGoUN(nXS)j z;hEf`{5hRC0F%f6N?#--I@_$WgKuEN`*rzrNYX@~^E<~XE2d_ml!!Vjweq^7Y@IJH z@Axj}g?^8GznpK)*TdNb-xi*TRo0&}fZyylQP)Y7_9o)4kd+9+=63aSw!j%&?T1

h|1r;W1l%xdZH@PuRaKU2K|XJ=K7@A1|RCGpDrA!XNP-e6;}$x_Y8z(*(KP89%9 z(OY%tqBdcv2A@%e_fnP`d`(mkm%$?Zyg_o@&j-8+qc~@&m?Xs2EG57m?{SMW@X6v1aaQF>pb~1szO&(0xv>Z|0T**tWTc1IWdar!V`_tHj#5eAKZ9I_s>4 zmFvgdI7XB4MjD`N&KG*G&5^V2`*y}ZdZh!~m4l!_fUD3hr%Ak%L&VEfZnWwWuFC#${^Q3NaY|Uw}|KqMbfL1tl7LS|?V+AbSs^Lnk zq^a_+6Df&B{&_o<0s(@F)INQ2M_ zV0TkOn8uX``iCIBEmqJ)^bqWeQG2uwVulL6p)9-}m26N3wlyp{yIr^NjSI!0ogXng z{EKIG=aLHjNxHp^^ct4y7RL=HXcE$Hk>9ywcS`fFUyDw^N8k}~6*%}<4_;c5sU{PzBDC-?K{l@Kvne@GK=TD zJJ!)jT8VJ~wo-&x(F)t9|BicmHKLA2@-RANypL}+CSFl8&^80!pK4`uXXy#MUN^bz zKzY>>CxKGtLO3N;^j|>4YFM`g`9V|@si=xAZs8yOx+l0@!3w)iEoY5VFMQ-7MW3a8 zdR}!zLjd3-rQc)h-uR~@t5@*|;`71>$(>|4f@dvSD+`(%{Keb!24z9RzZ=>MhuB0y z#gX60#NPb&ifIaoWg(KS(loEBuEqw!FZ4x|mzi5?kvdtSxt`&a#1sqSKzG{2uX{m? zJ~+WSJG5z#DZg^f{T~j3`Nk1Ac|_OgtHS4HjRnN)vwKQe_!F<&S$SFBs#yd@%0fBF zJg{5b>u`j})r8n0z|y_e#0;`%Ja6&|5%|MbVi^}oA)@RA04!oD96y%u<*dsyHGClk zpfc6)nRdw`Vu#ZJ5Ll|@!Vyy8o*7N1d~|``acZU}pH&|PR_?l-U)D7JV|vXc19#lzzB(yMr*1Nlwq7e? zfdC4k?D7TcA}yt1Hdv0c8geyb!){ih0P&tfdhC;w%*4$Ba_!uPh;-js^T9*3$&77xl|_G-#CSymdDE!QCDzY0b|QH4XC^Q9&UPLn}I^^iaoy;Oqc>+EFv?8aUT zimEe({2a@im0I%Lq$zY1-S%H;E*#Xy0HLK}XVYg$7vW12|F+LYP1B70Pa*B!B9i|L z@y7TMsr%mrY5(5x@-Kw*zXdjEs8;otA~Ukc|;94t(KtpzF4 z(2U(2K>>R&(`AS?(p$)aHVyex%9yw&qS)`Mw*8wi>y?(pOGrSu0_f zSt4H?seGJfYCEy_11Crx(^U{$J-;lA1`9QXlr$V{!Au-1dVrLnKBms;V0&fi!#1Zxz*thmU5FE__qmk_c$G6ix=#PMe(U9v{;PmP3t9A;S zH{+s-Ocf5DhPu{|U{VV{G}r*R4bG>*h(xw8BMb34T>A2*zgWI4(R`7=y$IC&x?R6X zB;%(3&9*wG;acdU*=pgwO5+#}{qFDU#uE9;br$s|rEC!=yG*B_b~YZZ!HXOD@p1=9 z%Do^=3UImE)s(Jrd}q*z({lxwc$|WTUL_qni0&bp zYABWI{!pb=5U-b&xnCtukfkk8M7)W|mZ-57u|u05+xKmqs+l&<)XUBWUccPi&*386 zK`mDlN#>>wEaKW%fjiEZ7|`BUr~h;lFa$Cj{vio!U8(!>r>oPr;yJ;Vn#cX1(XvG1fnR=S%#09 zNR0k>~) z*RN++Gf?Nt$RlUxG6$Rpfr-~@Jy_El7QKmDh(F=M#DpUXC5BXV4Q|E_Eqzj z8)+25Gdj*B9M7=bV`RkogYeDV|wU|eF#awLIb8Wor;ZgcF z05<2o7i&hpE8|xMOGV?3`V>;mge)Pn*&9pJiC*iL4z)}v$4fVWEeAsfJG)%TBpQKL z!IsDaEd7YFv0ol?cz5aeg$Vfid^3Xu7FoqdOz&Qe?e4GJa_B#9U7~amT7?$2Hp`6c^Z#^})PzM#q>n zk`qAF-R**X_QjHUaZUAHPUO>NK1hcdVLu-0o2@FSvb?0D;7LHJhnrH@_GCmU7pev% z`;{%gD_iK{egi`3Y3Iy+YxshRi3Mg`ZYFu42Xsh^c~xwqg|zt<*lMfUJwtuXZ|r5h zzG-B`8&`%^C~{5AiVgTDQw!(w^PG_&ao$Y_59^l`l~o&ya2OY5l0EMRDmurO9IfW#Z zt<(XJ6y%Us#sJ}T@|l45WNGFFbX!tp5%W4_Ox0PEd*LKSJ21C$gUiZ zxkua>N=o1#0G|s^H**J1Ftkp+8ls*$~BiEY)*AS8$!vB&`B&>oD zXF1p?EDcv08peoO7{tvKB`@fZyM*prtxV0 z?XNTIlnV-F!d%tP3mTzfbb#i!g04q*Nc_;nAH3DZ7w}_>TqfzqOKpa9S$ZQ7G+;KU z!6Eis2_bJfuc0vTb|x8tHD(kv`TT}doXVLJ*q;n=^H5=!Q-#smc8oA*bCLh2a6D`L zMP;D);)dqo7&(r}!2HH!&-j4LOhU688!&RGkOc8l`VBD8NGX1EikqM%)V**K zK~Xo0HowPwhUn8fJOEECX+OtMQ8*983~~bP{#D@uXch$}4~7|DvPXE#58e#e%`B3tRG%>kI|Cm9XY`goO~8em7%U43KSpOhJSzL2o-AiR6{$ z%||L5!B2TF=SrnN3c;PgM|$U3d6d2EQ%sg^u<>5pc`fZX#&ABWk46(hW-tBPgT|5e z^J^EhX`t!0cVAds>F963DMX)PjS{Or27BFQ^uxA}difwm#<^4is8DbpUVR>)7p)+K z{4X^jXlt4$P_cNkoPoG z-k;|wOZ?T9V;L{!SlQr6+%P-GNsh&GsEoVi$vYRg)(b2_hP7w{3KiivjK7GY7>46l z-VGM@^jcJ8t6J6u95_BmaiIee4Koc>SeC4iRUhYqhveWEqp?g#4@|$T@SEhzdxR*N zBzru@Rao78`IJw8AmRnRBWFS(r*w??0%TZHZUqcH!}~=etp9MpvPg(=iC9P#Ip!=y z93M9e!SL?R-c$SRn^90t@gbtePg7zoC)))K$RQ{@_qOK>78DhN+xtZ7SvKU_thaab zXY_Zh{Fm;-AmrJ}k@@`Fmc8@(Gic9g^w|W-jFbrq^BwtZG^%6T`47MYig<%rDO2&r zz5r>zCpXg2#SEyO5|^~YaTAD*yE#~Ey0n$o>;(&^Ygbe*OiCqmS(b{$$FwB-KZ$gG zOPj?MyOFR%X;$liVDnRMQpPdgjYp&fuuGXkW}&@yxr@m&YFxuKcPGKlpc%M>-`;Mh zk;)*mP~5OHq%n8W3oNkb8SMb@o$m}iKMCmz_yF@-lCt3;o+0$@3PE%H)rO&=qp~mO zfoA!ua@+bK5EN$hgRd$0nUhRtO{D=Ww{oTri4=AnB_3|Z_xj{67PSj&AWf-6HS?N8~<=rPWV_xJ(P?ZXEMl`RJZ9xCfx({z$LC?DJ%VJz~WSR2NtM zQI$vneXcRJyzhr428@Nc7Q6>+Lrb7KWL-RcbEY^+_d`OUbw^bDj#o&Ut%v;M#%)oM zqPpqr7v0jU#2~FQZ}Vy5LJV4q&M?ojwK?`wC|0G4lO03^@Y@e2o80^O@0^#PY#09hNWtK|58HmUEQ3*$n{dUE z&M~Rka2&YrCb~?hIy75fkgsC6maem0h+6>BBdEq@=HRI(`_NF}%TVDn5Bsg#J9kIs zG1VQ$E_VsTXBqsyhlAr1RYtlRVLl*TMt(w!Sz~tmk}+Q9z+ryLwdKowrNP^%&Ro2Q z*|k0?E`44#cn$O5Gb-+Zg5^Tacb)p4R1B z?ft)c+7B`<4kb+y?war_kXm{P&Wqwe0>-o*^z|xUanuRX+~2SmToOwok)=yoxIDN5 zezt0QbX|L}k#^sdou4tCQD6uJ?i7RG*tTDKkMA+`oSe$435*zIZ)9 zZTn~R1>@fw{{Jg|@qbeq`ycw7v7@cCgQ2k_K0D*TE{*-iIsfrH{%`1u{}kc=mDiu~ zFHWWZjqt|C_Fs15o7Amsx7rZDdU^x;yyM}L346j45(WWzN8uJY+n09O%>oJ4)*2e4 zS6{AcZWBJ9y-h+qHj}Z@%n*l?*pKeg2~62zRVpvn8&yp;v~5jxDhR2Psk$4|HC7ud z*Bb+$UEG`7)+%y+JXpV7boo46+jMqlTP8ayLojb0f#IXHb@9naTKEGlGE+tlKr*3T?(cf=$@ zNmt8UR<`ApqWi8qUyI;;TYjllnHx*zT2vxsTfi^VnL?ho=p!1MBWeg`dv|Wr_KZCG z&c>WD*)9wWs^p&N6pyGV7b~cmr2nW~N2Cs-Q#b?@Y>NP6&r~^}nr3Z)nJHTXO)elX zHsr`(h(2dUTim5KxYS!>dr-+ba-%*NI#bA866Rca(-h|$>aY_@Pnqw0&VJJ7)l)Ud zMV)t_O3-*;%{0#XvjE^K`FG1dKqr0F`X$``*o%H1-KXBAMs3Cd)R&QmLHMvuOUXT(KBtcZ(v=9>SxeiI+|su?|ZbFf&6juwX02>X!@oj`d^bO*QzYc4=g&b-jjFcj?<8iigeOfQh?j)f7&3b+Yb3;v%L> zQf>8b0GubQwylqbW8~x#Lkco>^b2mYl_pb{U#Wn`0@#$jt}gA;PPrYfP>@ zmK@Zl2a(xh78kqHxy}(~0|o6ym$So6i#pHGHWk(VSBl+&l7ftk4m6qyKOmSY!`32# z7CeZ8!PC#;A&bc{Hv8j0rNIO>1D_C_X<=zR&dRVZi&prYTm-K7&|QS*!WOR`)tJL^ zk#weJ7mjsHkxc+6#B3*dREaL`>Gn}``PI&A!^iIr{ukOIQ^92KK67>tSxIw7c%J05;+eDhX`yXF8J^-idoSk!{ zzsdi2y+p2UR9XCf+pX8J-JZ|DY$|K9@GN2D`7NM^Cn^FJ_{2FMz;6pP^$DWePejII zps|!*ya1~@{$MhW>9;>WAN_uZ$uOfJ4{_@*o)$bOw~IxP#V{L+yGXr6OA#2hcb~YO zMhu7dQdFeqeyONQaWTF?VBe810CC7+Rl?Rpd*xNnJ7&tJ>zqA z-PJx$mVo#rD0DbpK?>FnW1#xd@7DheaMB*#nGF=r+-3=M6?;khWpl$js5y77RM5-= ztjW`8-hU>|W*(H&<~SmC^I8P!@$F_3gb(X!)8q=T(2inwH;-TJh7K@J_}4Su__?jUvQ6DYyFj6p}6@XdY3}bfEW*%kM)JytS zH^dQfE-nk_pkQT4aiv=k`8qPh{76U=ZIC3AA%;?*!GDd-wk5|L=wX+tmo91T4GIZi z8*D(vzY7b~c8Vx|PpEClqM?(tUAa7?Ii7Tostl!}Z2AgRDrF9@P8nvJqQd##(a$o= zXeN6K5u$QhlLd(@21{`S<}$rbyiJfP@os>`c)tEAhNe9jKD#hIMe`MMJ`W*|1EIq84T znyS9+G9wp*y&C0@A|oeQ7%<(q5kbuAYh&}JmO9QoaTBZ({9J0BFeGbZ_u}RC3@wBMmAm`A z4?D<*4pQ1Q8YHmLs6011Fxa>&se7#4KuG(9BNa0-3LWay9T@voreLehaUTHnY{a38 zg;~?FGFuda9Jj~6n1<`abDWO7(Md~%@?|?guP-3$#~!$F)^Ls91=2D5&GW6PYr^1+ zA_8P^VAmoL;IvM9`HeaIt%9)0jWyOLN(SS(0$xLt?tcbjI+Me~&MmN!&tN3C{bE&E zP4BbKpv&x0j|1AVIJ0;DRpT8WibnFv^DK~?1KKRYZU=W04^DtMqHUyjVs40~qgm=Ngo3kz2Rg%6W1LEKfaFR}mh=ohRCj-L`7h?!vz@wfT$v=>vgtUaORI z-%iw3bz4`_ytTS{%UJK8jCo0V_&vkYtB@@ZzH)0ki70-LW-~` zW24QykiVO^hxF+{Fia8bcjc3=6-_pHopA3M~BqAG?$^-DCHFU^7Lh0{%i(5x83pB zW>Koaao*94m;E6~)`^V4lm1{PVlHP8C;FmeQ7VxPX~;hR8iKhCJGxiqlc^Ntr$`Ex z^i(WB7F4lcV{|ci;ruMpzHCgfpA%R5PfJgFX+3Dvd8CCy1B{=Fq?poOzvw(&f3+@@ zWOv8!p?N4uEs)}_{|Ju2>YA41X*Py{rn_Z~&btD5e_^7gz*^utSktJ-ryC{{ON%on zF_PlMT2#u#ULaq*;^sxt~ zM=dOTDnN>pON!mic7ug)ua|qy;XSF&2q#cl6;G^5<~9ii?s;l7uW-qT4$2@7 z$~^vBbz}ApgMdqN70F8CcM4(&5H+?zKv}o2>fFO$u&GH`^c9dCuq<);$$B>$mQK47 z#aqbXchZ*S+kKcE1JH+NqD>8{{!aru9(nqXu2 zixT^HIxNHgNpA1o?-KqKxxK&E@UOds|A5%~Z~EH5iLJ~G^#7=qpl4_JtL%Z1`9D{` z!0=y82>wUo)c?YMC8thj2p*fNLP^XBy6e9+6qu|#~Rkxl z+lXeIJN2@0V38WZ|;nLxy>dc;S5T%7f~Pl7|=37ew^ zt_rxa_%{5q`SNlx6XOIU9+LuN{o*4$!PE0y_Ev-PdL@-?s)GQh>0Xfow$d~RT|p@JjCBBZqZICB>Xy&p7iLc2h2 zzHbgPw%NYVX-x72!QoJY;X=$}YJFEvLiZPXsM;NcgZe~xYl{Ope9>WOs{Li-hy!Jj zI=o+QZ`m%-QFlyVFqLJE6VqPodu&F1f*`PZB-HSaU#_>*+s)WC(v1V;KimWaTN?0c zb=G`xLrpr0`eK+|cz6y1BAX@<;M^hTuU+28Dc86^AvC3{XvSX_1V)m?DT+528~3nH zF{}@wHo%!u!a4i}WtpqeX$4eUYb9Sd769rSomLcE^0x_$)B#~$>A?L2Sg`vh-ryl- z-ct5QJuxyBmm>+`hW-aEr-^v^GBlcUAqY_G?s!4!Jk19WOlekjN2I;QqFX)tN`Cx=JS5U zIuko@Eq)|CKCrFfbQWObC*#U-&&M8WuZ!yQ6YcQaQmx z9oGX8qLlH)l`5Czp~E_4-SQonoM-QW^9&YjU&i;Sh{b|gu%802P`d+6oC(P(d0Mt- zgCV*xZ5BA`_InP@3&%S%WyFym%DW|CKMs0?*JHAhW`UGa4p2gQHrE!#aKY(~TdQ9V zAN9)6huuc`v?lfpiz>$aWjDGGoQ8N|Y0dj|BmU$4kp~yi4HsOQG(Dks#>y+0x z$6NBUOoAXXO#=y*mo*8zNiK}*FH1NGDAdLw$3>#6D9*;n@Vp60J#*i?{fa{ zN#8MgmYUve`1k=|(=jCG@@9sSqb%+cNwl;AF~X4rz$pRPxY`)dv|OsI ziLsuk-alLX28gnQoL9yV4>u-Nc2+M|J8qm}^2;!z-EzrKl47c%Rz_dpfMf87DIFk_ ze!J32RPn_w(<~Cl&uK@eAH{3z$i-qMZF2$uOUa?uLy~gwJ_w@r!6*xwYXmTOL3;Ud zNs91Bj@uh-FubAJjH-9W2t2=J9-2cq!AMyVV-X}h*E#RP=lAeJ^86=-fn*yqsEF#m zN*Y7c^7&7ZODH%cBzybce%9D(DZF*@t_!TV&pxUGA&kZ1dbusiThY2mBA?<25*_|Y zn0;onitfZ>i07oD@KNnd-#%0-GtKZ{zg`$Tmnmv9VM&Y_-<3GtZOmY*!o}yJ)*zZW z*`+f`@kK&*oFEA8GvL0F5$E@UEd8T@(Ud;8eivSO{pzrp?+)JxGmfei%yC2RyvjDI zU1`Nd2@ACUn4Q$jmv5*;k?9Pb$3vOkNtg0f?DjIK6YwRN$;Yq2^}NS{(qI7?s0RWw z(d%OM7&l`h<}Ue40`wEf(SB~`Coc=<@8OBd3d0WZH)e* zDcBhP7NPp*>Vlp1y8wydU+bN|--hNJr_aFjUGK#9ePO5h?hR&Oq5Ds^N&U6P|AOQB zpE@b|Kjp@M8YIawMFMHtHCQ@-)^^7%c-rU9F>fAZEIHF=KCNEaN1fXS=*~#V&?xN*3`WN*c93F3E7V z7ohU#AbIq^J3^&3eWOvooL%bJ8Yrl#4lU+4B9uW#tKer(AvaGKc4=$*QGdXj;=Mo)og(g87=fV+F z{8Eu9WFbrgwujC9tz>Q-JT~elR^Bot7x3W09_g*wGHKmlF5H3a3DCVd#1MNaOx<1S zW<)-ZRh{HK-&kNS;#|Mx2bn2~^*EVr(rG)>CNn~apj=o#vKkptS9mP#uG&@gWZi)1 z=7pkbV2l@=9#qex_nF{R%nyZHlbxN_(^0{S#G=FPeIsSWI2*tnX542>$Dw{u)}jZUXK_2*3qYYOe>?cu}jsN~JoGsUK^7L5*< z_w8*Cnkx~1(Of;)AvdRknZ3h4EN_on2tA5#IvEN*%*~^i7FEIGp=m_ntge7tWku{_v!&>Idb!bb9 z?WT@aLWr+>X2{hFX0t2dwX0I|>hYzwbnJs0O|4Bqg#!b6GEZ?}UdQiO)&+Y?{@~0> z$@1yaR7s|CCDrWD_pBAYWZ@!(L`$UuVmDI=Fp7C|{K`>J!!a!LTa)_UW7==O2I&P`--c(mYTgQQ zSR5Y1xj90)<84z~sK;$kk!6AL!s@n?s*%pjp1aEZ4+ffw+M2>uD>{%dt`D~&xlr62 zHksZ=h>{6;xp!2_u;a`YwP$}GQ64<+&zhqV5u4~K9yQCaQ%83>btsU0yns!2r>w0M zF#D3_PPPV>t{`8yeG$iaOL{PELilTmB9qB|-*vpAu2Kz?dPr^`va8bhua zxcl2XyX_1@x-n4ZiS&pGyn2$BE;Z>E=j}O11>~3ta=TRD*nO_nauoE>H*NSvafZUp zCB+GhW=hxeN61mxzMN6-D*HQRb{a<0mB~4kwC%cb5hZ1vHTm1QvOG4vybAFuACeYb`D)EziCqwlO-~rVqAZl{W0!Nh&&6bw8ux|v| zh;q#+^j71@;VB=r~FRKV-5v95DkGxzNvgv_KRWu=6ZWUj-P zeuD8f%-tzSD5g$SNz1qF4HLFTRzRql zBRN=f+l+KjY=46bAy=3mGzqa+CPb{r0jyTZ(65LH_Y_V+0X<;CeGFUdk{e+4mm}l+ z2U62M7_mSIG%_VlXzD=UPvRs`lY0i1e?RE0Q49HbCL5PbYByDn z|NQLH;K_-|2TCTp=8jl)5>W|hd^-Ev@|+wLNqnLUj0G`}{ZM%t*nmgkSVe?`BF{r6 z#Ns4h;=ID>MTS#;W<)@HMjlzo<@aR7151kL3?v_lVwu8JHVAUkLc3sd0B!$ggB-Ip zX&PV7$<{nBsInzY*S;`f6=-P*)~MhG*2&L>UolL%st2}y9D8Co7C8ZjMQaDSigF!H zOtgzM(A+5IV!~Ncq3$V9OLtoGX|o5~YhQDTRX6e-NIJ7KG@)$Twum^4ySV}Nc)rgLBLELpfT+2+-0&^Xw;X#5L4Hn zc?HG{;3+&oQ>a?SbfhSSSwbK>qR-ns)Ig(3c4Z87b^tqy;{0Z0C$>bksGNCV6C~qd zo~uU`Dp@j?-prL3q&Vn2@^*+Ew%g$SH8}p7OZoT?aCua3C;&7 zFMe#?NF_hp3j#mh@l7opg94OP8AXK-D5|S+12333gFAXQxDsc-k?r^-mfxIFLWf&| znGam~ek|KRJkdd8l|5y$tJzeK;RF7(SxNd~E!i+^pGWuwIxM7q(>zEj`{d8BXm=_R zi05AlwG-ho4oogXM9wPsya}metK}Gf;5E3st0|uD=V~gyoXJP{B~prbiE;3SnJx$2 zgBpp@f$edStBz^Lb-pcwv(X_glu~qwM#}1AwdHysWXFgC{6c-uxCZCkeXgAo#t+YS zA1&;#dvH|}Tn@m8L`3(}EW|87kGXJ;SKB`Kb1@u~l+fY=w?uqc;6(h=pGevS>8NHo z;Uw@EL^Cw#?3h&>=Hlt7r(f*|^2n4Ox**u#>C-J8#xpk&3DITWPpeiqUiVOXIL6uI6QJGQK?W!;jqWJ4lZZB!hF^$RdY^kg2K%N(Uo_!C#SWkh%I`Es`52O z%`s)gV7!uGoU|V7b=nxt;v3%|xiaT-0vN1hp!n?Hm!8D{AObxJ@EB zMT*cCaUM1Ut!$rHpQmi>K+Vqf_rNYJ+;p zjJbD({~;7fgKn*cC|LqpLhjlV4lNJk47>%8OUNVK-syJQPCL>cdHjBnky6JLhCEBl z+wJ~G7ti4-vG%k@c@>vcVml{-$9nYzStgO@ds7FEMG6b$P!Sp z%o}!z<;NgRailhLOSko!$-?KAQy+vwhruFDNV#Io0f1Zn!KK~Q^RFgIo(MwYnOo#$ zOvD<@qtq~N16{|kIT_2I8Rp_2bA`vsGu$Mifpylb-NP}4(J|Yy5w>h?=6O#9birwN zs;Je`p6TaI(Dw z?Fn?lNXt{~` z7c1UTUbr6RiPAZAHu=~aVBaHvW{*IWXa0yjNE(xRr*nQ{fN71nF>Ex1`T1^nP8AI< zmwJ%l=VZjghH}Mf#IVLyf&sB;?t5<7uARN`T17TGDAr>5Ta&93`Jn&1Ex=X|BV>)LN_qQ3T`=c8bJQOI?O8 zdJL?0J1Wwp9Sw?B@de;|-HVEuG%x9(a)#nG`C0JytW$}pZ`N}pAmJ3!W$DyU^tP7K zI$fARQQ;|1n?OU}E#4d9c~-WG*ezxmDRGLtgO)e_o9aNJm~zr_3C8pq_Et>5KaVMo z{%_z~%*ARVpAzbZg7j*A*vEwE?#TAH`%*GEQB3q}3X1i6Cu;fcVEF#^cU{xJdCp*K zKvQXcyjGu47tsj=`hAq!tO^e(uCCer!K=%>4I9-L?91mH zahS%wf<2Vi?AXend?IT3c+AER{t;m)jC2~IroeTZ5p1^!wF{~c@%m{oH>-2_gFWj& zu#c}@^C#cSptVLdo_{F}XKKcfw%P}V3;X)ahOO^XqFr+JgY?9&)QXwL<)p+N0WfhC zhhR6#AjK*65w@1P4xDk|qtAvoDb(@TTHET4x9fC4)hF>BKi_ENKW;vFcIA*+R$y^U zQX2)_BGT(Z#KGB{_vFXVeEs?{u>nh7C*qGiwYB*s4M}e(Zf>`GPiQ<^m(y~KC@*%QZU@;cI7qN;$uWE* zhq;pZJ%#ErS*p!BV|{0v;7)Aqq};?Y6jVcgd~UOd4T|?_%jjEEq!>x8XW8_2fLZT| zh(Fsgk!yqW)3##=28VYDD}sqbdiaz$p-$A~1EHE0k!wfG$Izlj$1WMlBvY@qds1f> z3Vh=5|02rW)HrqucPWiAv85R6Zr_DBHT_bPi8DOhXPYn;lp(6#p)RmF6)heTUHs;5 zX@~73>VSNm#z0uKF;t3JQyFQjwnQs;=cmI@0o*MOYIQ_n>ZwCgz?HKNljo=HClS)!rz@^o z+SIVLucz9dT1xJ!3yV)%Uv_scj{^=a&Xj3-iIu##F{rIf2{2A zrwUuO^$P=VjxVp0UisL2IybZ$!^^IE>u_H=>i*=q&Hiu?@lEGGiO!ixij5UfrM&nu zfAL&VS~8gkHgN0{j;gXXaa_}6Csc@sukYK$EvNZ9rTya4q%xIH?VC>(rQcI9Rv&Up z1>raIjv^gIzntiJ#ID4CJs}XQ> z#%q0d4;ufSBN-3z7iDYu_a^K|n^-^5LD^Gv*+tg_j{c2dwi~Y3U1al9M)UO%Ta&8l z&kBD?nGQqJxlDGH5=7lULnz}>rghxh+IsexL|VZm&%k~^cz%K`4GusP^3~WNzP0Y_ z>#^`*xxoR`SAFbzli!kJjjX4ne{%14@B~d+^^dZ?Y4J_F+2}G$Q*tN}X-lNZg~BMp zXE6RbmX<$B?y`woOzv|SZ%@C_oV<;3)|`wepO=s-BirGq0RfT<3nGM z?GP`F`eT=6k0I;w;G@+|jZ2%hV;dx|)MPpS>?%sRvcF$2Kc3A}S+z(&ih(zA+u<#BT?XRjgF z6SA=`2ve|CsgKTaS02IVc13&8X;W^JK)^T;^Kmc*iKJFd3|K>zM88+6JM71XXJG&E zn)pJ{wzvnx?=M1)8(*xdY+=vm)e2bOM9`2S)A90l$KHyt3O9&%CVkb1%c6y_-0IVh zyCoqk_^9nBK+;Dl>Rwa)67l&vQtO4gjqTDNfr^Los=XDI_ zx-rd*Y=HeAmEloqNV?um6elMS>Z?C*;MQz``C;T#KJtLf6+cw3ntH(>u_vPQ8C6HR zM(BV5xuX)8AFl+QRY=ZhyP*Jzkv0MG1#!)mdR`~A2wcLnG_Rag&wGEpEg8@ZrviId zB*YUBFq@8B&(;U@PmQ&Eh{&+M)_5)qrN?6D6Y--{R40sp$mh$)1RVd_;HKWBxx&F+ z+4Ax5YJc0?8@PSV{>buHY3oq`WIDW5d>vABth@;pXcjy- z!<8lzA((S@bl8nbJ>DR-p^cp&k=L6YgcwjxW!oIp)sYC~w-!HJ`Sl%OKObVB+m9Lv zun!W6$(t#02c>(PvdBVM5G&z%kY=+}ehVwfSk7N0 zf=qfk3_~c#BHK}cRT$fohlqVK4U^X4P+(0;y`{_C2Tjf)WSzL#_wAdQyVD{_3E=<3 zDStlpn^@9%hcXW-yaJ}witzqea!)i2*JCa-XqTw*&VKSbZ>6>8v(*iw3=tTjeTFZy zn$wxnCcKaGF3=__4wD07GA-IFJ3?BRCVNl7nlDWFVd6C8;x-w>QN1#%BP2-*xWWCxakD7N`TlMOdz)sxs5sNg7jUULGUcZ4nhJi8spv%+4 z3$*@~Erf!D7+-maKBG#^%ls5oAbNH%v@=uABTi<9(*?e)`1qjm7WiSO>tu-2I*srK z!VLYODp%8wZ++HU-$qcE2&Y!0AzBL6Re=P4met6lZ8^x!Ad!RzgS6L7*F0?OTFFu? zU$FG2D`!25L9IF_clTvq%aY7-&Npxhk?`DJk9~oMdp{NR3g=rrZpI${v@dUrr}=dw zWUIhBzc)gxHO9XW;wXdLBrYErUv@JB&cf71l&7;xhP79ip4h>b+<{o)y}l|R2}ja= zyo?=DFu>+GvAdVo7q0)fh0AdPdl6!Z~ zE16e1o0($!SXxEnoR_sZh0DdAf=So{%QQ@Xn?X*WmT`ALk4-v@qmy0c3XQ~8y$*WT zlm}qvlJ$+&DhU}~y)oehr6;|k0UG0W{-iJY>70bmTwWCo{h+#W`9*1LeIEW8H{e$3 zyse`JS|EO4V{*9hxwkNt|7f`&S%-CjbxDz~)JyxK83RbZUit$mdD`OuabJCdD27d{ zhm5AdKqAY=3pmZ=ebt54+BafFlC538tyJZ}rz(~f{k%4_T$~tKMGsc9A_;RhVC~de zi2ILhdu?H&qg2Q*QYVLPuEKC~e!o3hv3>u2G|Bz=xaik@%x-kF=Bt9F#7)4D!@3EE zzKnuT2V2O5hC0#K(^1Mojn2sY(>Y3#;im^y zq&R{u%L(%7&R=-WpX-QM znDoYnZJnVjZe3oM_f#SetZwesS9yWa08aQaUH+*`{HOFY#{bq7732SsqWWJapDh1$ z^7+@R{<~+9%>N)s{L6CwMw0k13CjOeB#ME7j{fhFsB?8q+w~!Y@44iPXg%1n=gvbT z+4hJ;Igluf(U5Q~JW^C+g1T6tqrH|2C{mfc+^Xg1AT;-ib#qAB?dNLYxx_EYyCXY@p|n$NlB5#eK|ACX!|K zx{dFnZ%p4C!jxX=_%e-Fc%C-9G9`M&%cJ`qJVlH&{DTCy%v-qRZVb29=0<@aA$+pH zjcz38$Ma%eXps{De>t2vL_JSDfuGOFU6IY8QuG}+gC>?7naxn|8dcOGZ(V@JJ0{N=_=qge(fX-U7Qi$GGrlRxT?BwOf_}70o^fA;RsVGoYmxTojmf$ke3!6 zlFJ`Z&$?#(wU4g;<1wj%T;a&1J(s~|GKPa{5HB^!QMkTc_-QdrJdFHTxPMj z*r;=c%?SziXMogHPZ-64Lye{^w!i1SncL@1~`@geX9+z<-^j|dS~(Y(9=oeWEmB-&l- zS0TM&4uzUQ(S-h)|2wccfCIg2a|OopTU^_ZEr9F@s&a>}*tePffzs(f9%5)7*S+zR zk~4Ww+??CO3-{rC>u&%o18&w+!Kj%>+N0^PC!&#|z(&w^@s!_ldFg2XzJZvtU6n^0 zMWF(Y^YOAG^3{t7sI{xJ?2yOQW(Aq>W#I-UeKjdQeVC01XqKkjWl)+^^(atg);x?6 zc<`iz?ZC4iXC1Cw*%{n;N0#0m9IKN^s&4Um(yj(i5LIAXuDxGWSHHr+ZR~7frGDj5 z(7Tt#_M#gHM)6(-_{)U}$0x2-Yg%E-vWvhgBGikwSJG#(ql*U+Ic5mm+v;1n(G7LN zmB_pk6k^EmzJUdB+peVpAeIoYh(3vV&HM|&6cv5CRv#bQaz9FW{A}pX_U2BDHUZZZ$QVg!rU-jgheCyzw4Na#c@nN^A!W|WxJ;}naB2wO@P9%QG%G2^2<@UqobP_#6$ zRH^A$X6PVomWwwJb#P21C_GX-`AKLf8T!v28#&zPG9mhNm2>zBjhHbAEpKf2q(A;a zoJA{noFr@VReH#^CQI(DU_B>`=Sr@=C}$G735^t3{c*-^1iYENt2avr@kxzRODn!` zL4@`M_Xz-E_SmM*augVncLF_i7T%A9KagE& z@~xhDeQP>%-p)(t=S9?QkKU(n0by;E&IJW+J*gW=Ep~Cb3PEph&ZEOB#zFd zyUV0s=RrziLly?Cy@|p}Z}Nz99>i4ugy@%Pq-rUK5V2GSutioQUUG#tQbJj>Va5kW zVq>-m->SG^MEmFhBD9>!O{Asu-<{t|O|* z<$CmN?McY;zP5d_&a08M(^SjcS8r9-KWr*nN1N;+A6w0l(|y=sCzpb~gOk>*V!&)e zk%s3@D>xTXBHzx?>qru;X!*|}BUkQeYAL_VBM!IFrV1+;eK{flE6=@XhkckyZ)|iA z#NJZu+e|05sBZ-(M^RB5aEsN?DJ^6)A0u;xxyD=Ay>ilcbmW&z912M#Ln|3Le+7%i z*?x-O?K*r+qwOmJ2!Z|FAiKq%;bwj7+DISK={#>+w|>hs<77Slt$i*duwdgnN&@2d z@*Ml~SFC`Whv8n|ULFbOW0y*VQEV*bgtPN%V@{jde6@IN{vS8iRjB0k6)kq&5%@p- zD`>4}!}n;Wkzm7*TWG_F!ZHPw8$@&TrJ?I zyA4m81enMQS4{Cxn|Ptb5cCtOJhH-Ot#ee>@#dPx!RiuSpSCp~oP?D-#y_-$`Eb6iWpWTzWYGff6l>Wi`1fIQNA%XNYC$s%A9c^Wf2uci z{#0%%P%*SqpANKL8j_JQge!xbXAbKwBYEF1d{HYd2$tBnq=ho$Rbb?cR@|FD!=rIDSNjid!%%29p1Iy66nZSu?`+zK{XXaJrr z-D=*=>f=ABHcdJCX^NJ^;T4=t{ zfYq?W7OD@!qV240ttI6?_%u<37e7O(7&Ai*QGlrze)}1b;UPwg)BWs0D%BEGa>xym z8g{)0Ks*p=rO}fgk6B_tcoUs+-Jd{Ny)FEe_EumcXvI}CRHj^-drx*yxpqW--$6hww8NdO%|nH(7>8Kc&hA9iAL z#q<;LaGV8#$g!ztJ2;+|3D%ogo*Woa1*hJ~>D@!Tt!(LvtBf+wuFB~UVca_mryN!z z9*)L~A}Gf!Wvm-J~G$8Vdvoc^k=BMAcywtRNbT@f^Wrgk6w+DiQDyUwfjbLX% zEoP;i$`K6KSw_*KA0MfQNB!tb5uj^gMihTls5W7dpufmnJ??S9?oB5<=d=K`rXjHT zS;~VR3xUP3+JsC&xtCq!aPQKcJp)+uq_-qmi9C<8L^Mggt#IF{zK3BRdyI(I&oKHL zRjIk;KD;>SY%JR=KKQaSZ5nu;FAQBpEP z%#Qg3m`PT6ImH@Ofh?57cu}eY>Dhba6Sao>4SkoEnKgIh4Lz&3gA9v^xvl|<)-4kp z{y9h#2qfg>Nmpy~Exg5`BG0hYWC*`G1=qG^$v$sj<9;$#a~2xbcYL~nnJ-6g#s5|H zurqEXQ12&G{EsdGP zsd&|?F!b`s%*xOWBg*{64>H(PLNjA6E||`V9vgno zRv~)Hn$nU7noM<$LqVmHd;^N`rP7Xi)wDK_^n(y0zQl#U`UqA!1K50z@~L9!b#`If zL~Uc?0GJ-oX=kg@ggH7U3-c3KyyQh`IT$ay{B}lU*l7n9v62?UfCVZCh&z3T5~fSw z7?MNDWCFx-L68clm(Gk@lb~2Z2Dm)ljyi4q`0H>Ivjkp$Nb~bP4s|QhVS8gF??CB# zIr)C*>0)}zYXFPufIM5AKHa2sHFgO}Fp$xTgFZBVk|v^z-P>7r*#JjkBJ<|1G68$o zP!Zq1zx9f)^gQ%&W@cuxve7B7_;wcV&FHSnioOhYUy7QjCsCJFglHB|=*WXaq)ql> zv1a)%kOz3>1@J$U5=?&sdHmlod#1m@8-I`4GyS)YB$@sbBgwzk@UJ)b{~%P)#?DO7 z`mdpSMn+be?`bLv6Wu>9Oe}0PEG&2|%#1Xw+O&$!22SpF#`T(?`73{LUc9j$KVz`FuJt(h6Xzl|Ef`f)P4VC z4F;g_g@^^WPTii8_6!8^(W!Hg5VG`?>T<;r8D+`ZhyB-K&%UKeB6+H4hT?{xvapLu zBjz@r2HSDvI)~sPfwqdU=F&gLqSu!f`=KxUuObY6hZW&*RQacE@aNZJNAwxAb_jh_@8-AUtyzDxdNTghrkb8Nmo9}8Ai>85Ig`Suq(uprVPWkAp%P<_}i6g4HW5+I}FW1fGuSwzzAyibo>@rV=2 zBK}UlX4BUy=bA=eR!1^NZ36D!{E4D<+9%B?3~M&%7@AZ|zvc-**aEj7g)`bdGDE9g1g zdiGWfRdUTyN-40IADr5?Ue?G%y1Q@BYl$AKo&bR}-hBp!UA;E}_)6Zol_uOqAw94* zoIluCJ8j(8JfehvC4iNl%#GGuDhR*VGo82a%;02dn|zL+2rrW}K)wvPp5DAd*SgMw zpG{P%-nG6cy^3MdmE*eya4#cN=9o{OVz&*5VulY-=T=V-OywC;7=ur)nyW2zjt8=) zMj#pW+OWzS;1u9yZ-m4*|LKnDwYDmaVEP<^yg2t7*=mXPIOPaDEi1FLbtJbZ=A#~4 zEC8PtR#|p8q{!@W*8gHx9ydc$*fMM{_M0AJ56$0;JfO6KRTbj=DVILvPvY6YCLMjW zp)P_1Ajv2KG^HMB)*YI2ymoH*7-O~>SB0C^e7!T@f%fXb6bjrLvSq4x!RUpo133rUpF=^1P^slCD{Z^nb&R&+(LW;pn1FuD{{o~B)gsZ6>`OeVfR~` z0stecAV08n#vH?xB<5tJRgZmkWY*&nTP0cbu3XayN$^0 zzD@0bDxfV+S)uR_xv3}Zy8QK7wqb>JVh!jtx80ZdYW!yOZh_}~o)T$zqOz^!AoR5Q?b;$YzI!wp&;g(OM6s3zL^i1U_h=uxQ3100e| zc^yJ_3-j%1VOh~HnD$L=mNXZZ&FkT{)-O*#qm@a9`|>ZY&;vnbLFJhFK~l74pnKjw zPRP^>M(XmdI~VB5+v1Kv0CiXc47LX5;C;QGgPoAuQ>jP^K=kf2;RAN0$55uHip-FG zVldPI`FlnB^m_(QE`|jKjq5U}bkpgtoY-X`izZ}F#bK4K^0N~`nd#Yps=ohQ6cyQ*`5{4trp&HH z?Hqs`HXBCHlXMU;6;}|Z#gL~sd(C{GLe>Q!NAg#;V}#%oT_K@G!@(GF-}FvNAWCvDwjZnGI93HR7ghswa8Qud4m zW<>4xhpSpWR3_fw$eSTh-+akrDjT+=@z~K(cHCQo+m&8XgNL1;0+7wtai?aI(dVVR zC}$?}sO1S-;CV~;9(wm4ZHc*IAaQOJFScMQ_IX=WT-{m@6x@Pey9%q>{^OZE&YDFp z=Jnwo^HC*^oN+7fkU5VhFCPp_O{oeCdZPDpKMphzAt%|{7oFUH>agU&WV*XLCf>w~ zL~Yezwb514@~CkE4#2iq$q-jdep1e17aT;nn58ne9+BF#KT_{GbxhwPQpC$~o9Y6jG8z zxI~hJYLIEZ10Pf3Y!NHkw077k3qnuaKbDpcbT-V;a0{h48OLr4D>tUtq4!`WRtfka zjku>0L`kU>-sAJ9F2SwfTM;2$ZyNfrVpo-@_L9JOXT6X=m11i>6?J}nRjW2}niPx8 z!O4Nzjuitlfe5E<#Rxm%?Kbc+SO=|q%AjH_5mhWK^+uSUy{u2)-Ivg(0qigrzKJls zfnwhJDFXR+^lB`_U zTgAp18#hm(HRW>j>7?-AKLW6xeAZyZK(YrF7F9wEAy$=*5CFvKR+WrpmC|-IHVVj2 zKLC@vD_bz|&JBM|0P7A0vbF?7tk#18L9(&Y0x12{q=yiVfX}0H`L$qSAY^+PL70}7ix{dTxx}?(; zOx;bX2iEH5k*KCPs5fA{Zb6%P<-{ZFOH>K%g2x$ou9r15?2q7|aNg?=-16Le*-Alp z<_tidJ8pM4zOSP(L=!?751vGBS~z*Y9A@?zCo-bwf~LTuc~pHFE@}2;dZt$amd|%f z5!Q$UR@b8YoNe!Y>=PgPf!98L!+mWZ^H8X~Z1&RB20M4E4<5I);mKJ`l_(%CjJV6%CoJ}ayAyUhnbYvPMgGA2s8O8Hb2btEN_?)WZg>z3UGR&{N@d>DQR z2-^U|zEA)QMC9@c`Pt5cmw9LikX|%tf(Do0aw6UsDJKvCH5Zfot516N+YXmdJ zs{%dZxM-7k8xLQYh^1cZgc4^U(A=0v(6T$*wqvmJzEMyg?zT7?2Q&8VnWqg=E%9s+_?1U zPH%;JzOBq^we8Y-z?VSaGR zGT+y6a43?wcu1vk&fq03Fiz@UMar0>Pa}q!o`>(YpgY9vt*b>E2P?sPEfZebf&8S@(5x_5rt0k9DkhlPyBS=hDr6z})uj zu)}d`JrR(@QKukcm26FJP_y<_tpWx6ItcKlT8~Kv7gaAl`Y@LiS z)M(-7(b@x`nRnL1rQ<2GR-(g*iRVrNF-=&Nr?5vvf@ZC!jGL_3Y7Yjau@ZF>H zoOt%wEK9^AkrTLiXhfX9;VE0DD|{2BEKFw-1n&&MgW0hK*bFc+Piac$)e*n z@{Deie^L2RzD$B$f=x@4Q5BuaQcWcHZBJb5LR%M$B-@-WSVR6?SOZjO$AuSVk2r9} zsGiqipM>1!^X-VQnSH9k<)=gAe#ekgTz#@LAG{{-Q%KMgJU6b6+b`c1 zNr?55v)%>U#sk|Plgm`TB~C^5@VA2DR(+Q5qG#on zcVp%KQn=3dMJOj?5pW*2;w8Ai^=?_c;sJ9vXE31Cdo?%_ge;n4yVEKR-6+IW>Z2YT zg^VOfxP55#z$>}(fp=%8ixorySY5)1g*fyYO(=JbmxyXv6e z140vHsJFuHJVM!dN`u!RpWUjT+ooWDxN~+FJE{y34@>AUOJejB7;fUofpKMj=@zaU zXQ5mJ7ppi@+%r6x+isPg*#k&FkrB)CXc)byfG?XzF;|sOrfbH+7Njd=Lk1 zjP%JLoOIh2Wg0Cds$8Qks?rBBE0gu6rtHr7^pL&`y%ID%%8lqQGohbql8e%l*`0uC zgH5r9cd<2yn_$@p5oDXqeAMU0)@MS=S(4LdjMgS)Yy$kTHjkJQ;*~xwKc?xn4wzJj zm&4~bb^r`OwScyr^y_O*@Y%5v?Xc7~>%XrhGp2QiSkZkZZ=*OuAJj;GN8W|4+_HvN zah#5>bEpQ72x|_Ehdkq%(QvJi$sUJcMggRx7;u0;HxR z6^=AZTnHA}g7mPD1Zf6XL#s0f$bDIG%~;2(8MvN|7+U1uwRU0`F55WrZuH?r7t%q5 zE6zfKod_8mN5V#>?TpMW34=8xYL88Z+R40IDe->dKIy2kI+HowD%F2@3vr0bH71ZV z*Qb7ixE{3|Of9Abb+x2f-6~cU~PVSyDq7E#6zU7wDIqFNn#~dNI z975D6X4>{#66O4tXdFK5g-Utcmf#$F+iI#6@|a%IYdlulylq;#KR3PA&iq5PFUzuM zq<>lS)5KtN;^hF+0{>|~n>z*r021M0(#|0jXGQ#?lp6YXOd${6!6zdw&Y0|o8kHNQ z(+G2k%6WC^@FHX)FSF^N-X@A~1#fYJ^_qV5#-nkgyOztdizraL9$=bS@~{)4kFrWtnl8sycC+)y1icQ5X+WP_BVCtH)I1D&NyVbqXx+S7K5 zyRXxZnO!7ZD-+0lkEk6w)%SdR1G~LOS(k7=yX~&znXr3fM+!TLCq+UMzZOQ?3^JGm zi|mcMXvsR|qB`5Xt8_uqcq`@5KJdnR;YP=o?x#AwwBOIV`?hDxOJxF|vmspGs!AUsbF7t}B3qx{P0 zLiAZ_D2+Y6g6{m&h<)B_9X@HfK!?so$2gZ;#4Mq%i2wt;DO89z5Ssg8blP`Cou1txUlNV$%kS-C`baxKn9P+-^HeUooCkL&eh^)_0XTKQa zWuiE9?R9Yz)3te`LWlxRj^IcDl6i1A>;&8{b0TMNgIQ9|jZ)l@{cVR$mxz z=7NjW!6~`G&1W9mA(FzW+Vh~;mY+C{c?AA&H9T|rw7U2Z1&pUnyz;GL5qS%jQ>WJeoa!~LW2K4EQ{S+n*jVPdV&vDLiN4`}s+K%uIj(cSDVADf`zk_$rP z!u78w+wVU;Kt?6P$~=I1OlKwKNm*#7_*wy(QySD-_f(Z#J&L59T=9;xoY-8kh-LnK zDz%f7{dwo&(4Lv?zUIMu>FlbvbAeKVLhjlp_9in6qOZx`dF3CPgpK5;cr`om7-MT^ zJ=BY3XF8pz={$w47)ZQWNt2>HE4lDvLSa`G_Vc+Z0 z=ow}HEDq6P2!Rs;;&j1N#j`-C6}}O#*eZy2!_930BUDr1M8rhxZymg#Zz;8Y`))zMMzK0$6S)4O9Zd zgp{`lVO^eAAKY4~B@f1Mj4WvwW?HO~y`dXMHKeDbmEn-~iksgj0`G z8kbL~Y3_5MI~M#-tD}42(1VOb{BucC3RDyI*Ewek4X=IfNdbI6Ko?74u*8;2OvEb; z4*~nk2x~v*#kUH;KRjpy(XBD}b81R>GJ*x-*7!i1#*jOiR93m{nXL3#qXQ&LfZXU(}GfhtP3gP1IcjBx2sJ4Yv$B=bJ<``A}G zv?O9d=}b+xX4!PMG0htZu$KcD(R=kkX&}K$Z%o{o$aGp4h)T-lCkcXm$IQV?Jc>T? z0XX*!oe}bZ6vdEgo#F(NimDoFr;VYX#VQFzDEF4XL=vIA@8otl8jQ!Y(Rem}l3+>G z#HE+K%AaT*^H-kJ%_eTy+LS$J4`%%|ywVK8gVYM*^nqMJjNnOyjkhri)pGHnNjmRa&e$r$04;RZGh3_MxQRwtjPc~;tM)?mGd~u>h7Q@9fL5( z`U_4Z+W=a{*(DFr#TK$zHc4BE4}{QWaavl^oQe(Y@$jxiyt%^%gZXXwMz_PhTbSP6(6Vs2 zMQ$9>_eP&P4HZ2A%XE&MGRdh$hr6fs@P1ATH#+PVMd9?+`6LO1h09Ssz9x@-FRU%$ zs;_TD@qB!%0*<-smUAE(!!g#T!|K@kg2-shlOa110z>alwxKIQ+IV=}7l9wsZPBgn zDC?s-(?fr5Mlnun#X|B~%MBQEgC9~C8XwIb-Pfy;=eXBtJfI(;?@;nd%?FLS%%J?1 zh++wSCvR7(K_k+;5M%pM7q5Igw{jR2Wf(kl2!TxWzE3YA0QIyA?POF)$7k^D2BQZ+!a|Oj98Ro?321~*Ue+Sy|ts~?-wEKp8RUO z6b85dp%9=GR2M$lP)yqQ;Gz^2ye&A4;^Hk)UH6*9251Nt_j|?iTYUvWC1A!TO&}zc zwJ(FFMr4fzaDBFV9~3GAmu}^>y#Dxc1%wdGUe`wz@wGAcMmSxP>bp!8{LB!p194(@ z2fdV6yY~Pa5`#MIC-847i9gwM#Z>jZco9o8Ez64x9QC?@uD&=i>}2$ zxMJM0obqm9yhVxnYqXPl#4j&6J<>6#AxKu=$2;J&N=}z2By(bo*%z|jhmf3bL0PY2 zBDY@0G=_z{UuyW+Y!HNhdFWt66(6FLdio-%>6s323xgYlYk6D_t>b!_c@KTA!|Xdl z<~R}8y4W-M=eKWV;4snLl(o`bYcBY`Pm%76{r_W2PXE%UNO#q&@bx~$t22KiYyI|A z-oNu4@`=AO1o+|;PKXySdjz0XWKBd(o*tjr;bpv` zRM80K_pr0Xj){)R>QvPz3L-}|?Cw{{maxe{gEFi}>Vlrz+s!j{c@pq(ug68`H$**^ z7Nr|3#YEP5+t)uVFNks=rwyOY6(VtG6DzjRQU5+aw@5zuC@MJ46VRPEW_v#EJBoe!%6RWg}wt{A`5a$26N$d@(XjHvU{3Vs#7 zJPf|1jlb33*l{x{9r=D$j6EtZvgG?`4DyTOoSmt=euyma&~TcHkS%!+^r{f%Nl_&| z_Ug@mql_!&#gtp*l25I45dK43G=O1rz9d4dE_4 zLxz!|E^atok>Afacqp@-ZN>&uDoiTB&H7044K_;Zya8CdvLAH@5&-rb>wbbaOxWyD zV&8kN&&it_U59ULJ~Ve%SO?M9*4bYyjZ7>;xOBf}TtgBc^I=P@2~qjH3Pi9JAyok{!C2qAGD~<Y_#)vq~A_!EDe;4BKDWjDUVEVb?WFh@1`)Y*YcxxH*IV0#f(-!hm#g9>cb(H4c& zf5xwz+28gqJsn5@eiG+Up5}7R=GztH=xi!%7q{a%M=E_OX>J;tx{F1bX#P$DU9jGL z1L=U*FjVDKZ?MYuX9C`h4l=yogms=W@$FtfiHRZE^}rjbvrxCuv8>3IPkg_XCGDj= z>!w+YtblT&*BOxZ6pLC@s&b5@*|iY`*NE&38T}ZMeX;taeqVP) zcQq*e8$@=^HvI91>u;?%qPx7;HwlY|_7BChjHIY>3ng^jsr(AsqdA3gZ59bghv5Z@_mEg9g%UD8l8YETNdzG%IO8o& zd{#&+V*QwLF-gT(#v~Ux>qbs}og8NR+px$?&dtT`~rp^SC%%ME@8K+NPpUlp>N4P2C$Kw~uEueVx^GZIaR1>19NqiB_@s5jd z7d9;uiA#gbiNt$Z9zwy7 zr(6;d19})KoUG7#b~nz28k+MhI-rt*9TH)q0yEQ?nGUIjh{!%UMSUDh8=F(LtWqyg z2M!G(_5}pph{bEK8?RyUi+J<1uy`pqNqqy0*CeT5h{bD94F3OckUx!>l>xrCY@vkn z*mCe=Qv&N$5*&v0;0R;%4COH7p-2Y{V}9bv+-7O8d!Rbjkqn-uD{r93j#HXvH;GfK zuSdtY+GGc%#5GfNhXm_n)-LPtPM02UtqVgNU<#|ofibcA*y*)WF|SUW(rqqQN*Qd! zzGOVe)J8+1v=>Khc&p%sTo9Jxo_GmIEz`xKW#n>07(%m}($7AoFA?&_l(E8E({A@; zRth6$=9^bLx6I5V8m`sdmh0nBn5e{wZEXKa*VZ zp{3+XoM|RsFN%3!?#Iw`;3BvbML@?*Xr#ZCAb;bE-_c0_B`Nz!Xr%u#; zZPgSHaKj697QF9b#VI9qWW_B-{Vy7uB}%+>VOvJ&h73L0aG@#+nOS5^N947iZANtt z>2=Gw=_-SQCu?SL^rvtOBJsHmNC|+>h6(n=_aiZRAR>oaH#0bj+Ah*hge$-G^j00J z81YL*vhV*?`YP3Hxq6mdF1|c@Q=HBfN<1xFUz9|G+Yf|{txnU>NqL4hJP=p%PGE&g zo{Qa)hOUMjgg#L&ausN@wImXDKvaKMHUZo~umZU51q_62twt%Ko*biYyx!f^XgDOe z!lQ`OG>1)_1eeu?N3jUAedy>*8q=a3c6_!LgD zg8F4u#y&vzO=x7e%n*P3_qm3~FR}F}aU;WbyfeBw^Xt)gEg$$A zH~!%vk4%W9FfeaypV=kad~Lr%7nNoRqWxj=iBGdd6Y5TKSAj@T7;~SqBSkhMUNFmM z;Mvw8EGI=y92w_loOm}r`=V(#NlIHSik#dX>(PoD#4bHq)`n+886RP}9hot`fmKW` zia%ja*}WH)sA-%#v#*eohu))k3UNCj`q@Z~NpMeErYI1&_-4+Tl@&zhUhX9-czDt) z7usCCqKnRGz5V{9ZWwjP$S6#W7<;?&Fl|@{H?;&p=zL~WiimlfI=pEpu!{L;&sa7? zUGFE0B&IzdJ*4^ZRv84&Ev3Tngsc+yst&bR<)33sWHE~FwJad(zM0gf;VQ@Gz}P|k zREn(nUX(3)rlMcLi$}O- zjFThFV0?2`Oz#CFTmP7Wahtc3_Y!(^-npgD49Opk%<%)oYMu-mjT;epEt|TA$S)lC zvk>{4eEqd(eKq^&*CX;;PVhBE{$b|k->R$8N;?bsx}3NS6n84Q4SKtbEc)GdP)a@O zHNoUq_gZ!&w!osh{p`-o{FbZPZ1*i#ZFY~f%5?nS`jvrr*l7Su8GhdXmNGm3m!*sc z!dxPTAoGrQoo*b^Als8Tz?6DvXj-70NB96-Dhu-mNPdu|x( ztg@n5iA?UeIG+)-bbkC6V3m+i?P1f(n`~a5fWf9*%T!P z6KOLXRM1NST;_`ao*0Osw&qo%U^xyHz=zM+SVJ-r>HZ*qBT6#+@xU;uoW4F;oDGX` zTYMueMPdcTWw^x#E-hfV)CE+1wgAAfA;$~^a_|v-&AmkykWAe^UP)+nKJtE!dj?Qj zV>ayiGx91Aglt|`+Qmw*+T|2+;LE%Kq7k6}2`RzSlQ497miCaHe2;7rGOG5Ip;Yhr z?Bq_k3PC2jR)WQq(ZcCmESh-hTNT5m%4lVsh<@NrA4|!AWVVa*SoNsS8y=%-v z=#i4U9;gQqeGCOiJ*Yo>c@V2nDjmfji=k(tH*F(=!0rg`M6p&kH>@xxrEZZFz<5^k zDzSEFTeHe4yh0%63@kmZDzx|OspLZXn`TT7AoNBw-e|@!{S!0huW0-t7=1NPGhNFU zejPVn-RtL}@!zcR5HPd-1KgPE0O-0Ajo0$1-y=2C7exJ}NX_(HRr9q-eRby7bK|vq z;3q`tf4T9rDrxr%8vmXdqX!7T5slX}ssEvoiSnPAF@NSpCdzM{F<;L7YBYYi*T3BO zGb`$uAE~I*=m9-9ppl94CNqW!xTO5Y_fY*6jo&t7m?*Dh48JT=f4SFppz)6tb%>;K zGbNJe%r42M_U?OH2EnjcTC z4(HKCVkGmFfn$%sdx-P07Y8#dIPI#zk!WNrM}?ala#Y6IF`H2+gn&$(?ctZ2dae{$ zQ)gY))S_&L|E;N!FKg;2Db`577)1>S%WK}=uyXhGA}k_{l|q!^gdDdxqq&4=uB(kZ zFZ!Crzo?B~kKnKLolh%}TYWa{yfbnt4A}F)0q2Hx)>(JUM7-FV@6HjpCW7ABEtnl-iXDUY#1iWFOl`<#AznV zZ`&|m&is02yrv)gjX3?UP5u9DYOIX<?*---yO*dDQQ5n(CkUFn?vnFKW@( zY8WQUYx%;jW5%m{eFroC$rR+gZ2b1zx_T|5%OOvYNM}I)ah64jkfWDf4jZ0^bpH~D2*1d z2GLrIhr$)(D$IpUfkt-L1(_Kz5U6nk;pT0Zek6>gI;(D-(A#&2JmSSQh5K9QH>m_f z1U5hOIcw&N{}$9G!0yH`9XzGk%g0~q;31m^MBfBPs+(*WCaQm8!~6w|RNuB?n6A$J za%#M~*WU-@b!sf!*Y9`%XMm6?fk60jC4EmrYNApilkvXkbUg_R6Oy~_7+q|PI07(C zW8q!dFp`%x%6VS?c>o*;vtWD(-@0j2L(5^(j=*bk8|ZJ0su>o!dLmApet4!U$H z@1%Q00efw)z!*g53VYRS>o3JkEU8otly~eZ>V3b+I|V>_=hJq_yGE;dqU^Rw5aN$@ zV6>iadOaq{%#J{VT4re`QGr*6FEvTCgJ_}jF@}rQ2b>G3$y9#jPl>9_fCJ~YvSgVN zAOB3IvcOCs6scq(q$q1Ydof<-c}UVr7p52J!jMj;2&)}mfpPP)olN@CYq3hgz3$6) zGLrwfFo_=kjW>evnyPY*8Gqb`Vfb&o^1mlBOjO@?VZNOC^_xk|((we))HAC*yO0w7c_KHI?4YWt>N7CYXKOQh9*y zfk=;O-^^g&Z97yxDx*vo?lumw)+$xr?J*mVy`l=Bn`_7^fe9{%sDBZ#)WZmf&T+}gw#M?`| zn3|epHeI^jJFLCag-0ZVlyP;GS8ovh#EZYl-rvKE zzy~ovUX1^p7iqunq8ia=Un-e>Z^16pY5m+~<4!Bk5fo~d#)rz5!1og#Z<~~7jp(Ta z@n5iK?5+!fa)zo{36*CTU8{N;&ypCrzA(t2he!_TT=H>nVeDPpeWA;g!>64TeHu_^BwH7*ZA@L=FV zJ=t%-N%6a+Mm>C~H?-Vn>^R$Sg_XbuF%d`p1@D+n>NAA2vy{_#cM*hz0Yve^B6^{a zlgE?tw5W2*?JBlty@0KAzXmRtk})XJFul#7sKlieW)|2GqZH4Wt@3=4#Fv#U1qa5T zfODe=eE@zpg7KQ7@;fzB|F{Qp6Bxhk!7x!@%NBkeHD2B8JHYraHGVfWGW-ZNzES|R z-iXF)S=2Q&ehIBVDNs{?+k;`cI`iwP@mf0YHv;v))cF6Yk;0HXuRO47gEDb>`V`sK z6GN{AHTFsO1C?$htTS2ZGLBq<48!V0>V7#BINAUXL)kCAqdj5RqUmKFvP(yGa$DN`OV$UHaB zM@ACQsPTe1e*F;!y8yCJNEb$zk%HlK!NoeTjEBn(LJ1scIK>)LpC91n*m0695y;`{ ziqLq>UiR+z)er;~w6awbXRb`d62D9?2mw~qr2ng^EtXxKuL|m#9mf4>ir)%qTEmPB zyEVhWf|7Z->?cam$9fa*7RG$yfc@Thm;K(vw*WUy8)c%o(S!L18^>?L;&*s3e|Nw5 z&2yW+@u;8a>R#W0#Xn_@*RdG1UyKC@B07g81duw@MV@3ui=kR4UpFumUs9zW9NP zujR0Du%czK4f>Kjcz`1&+_*T;v|d@mU$ttnXDDm4XQwr zmP9VQ1>RGOz4I)4u5@3t!u-h5>BkiKfI?%G z^nq#jrO@c%zl8%|uKkn_Y zv0XzLhDY_RAG0;uGg<7mEK@Ch3LJQn{Qky%Zzh^+dDQQ5`X6jNy$Ow9#G9^4MeOpawX#eEFTu0--1@#{b>cbx>sEKQDZ1`rnzAx_@7=PS@xdDt{_V0al`VQ0e z{dm7FOkZD&_cuzIf1kqK_!K6EvEOA~I5Fk&`N1dF_@(J~&wAj)tpBSu&UIhTg1V%} zBwj$%O-bYR4T0Ct_)koj-;~AQO&HqmFk!CF{1!rgAsVmA2VX6KwJ`3RI>&0fCIr5PA-Zof0=qw$_Xs#{^WN8On5_TWFgD+`VcP$R)~Ix)HRAuSHI{x&YgGQ9*2uaAAZ<2UkM6ub zZ=YDFzEddCVsgMWkP)*ypPtE7-P6OJ7HgonRAWjKrvG>|F!wz643hE|Ar-*)Ml9aw z!u&Q={>Q|fzhd!=RP@y_O?xd}_=Q-!CLVkZi+@TQ|7FJi&x|BL!i=wO16poE<;)BCuR(qIKZBaq zaOuKs^|GGc{ZdbxUDeaT_tOneF6(K+j{yH0!FWwmxdz66;==re8tJ~ng}FNO%fs~5 zAk)8JPyb7e|DPHk{17$P0oravS4fAIP^p#Yn~Y+aB_(Pth`xUw(=9 z%PMkeaw^8}`qH(G;{RWY;lE#EWWWZlKfnAC@c$bf4b^vk<@&tN|Nj*x%Io)Gq9q3o zrJ)8cRR@aHbd-$b)ZcTTpEHq@f{zxPis@<$i4+CjKi(Ad1-{=TCu&MsN_KXDwUw@> zDGa2+bg6=|`NUgf&~ft<U`X%ltxp)PuwDj;_`Wn1aqd( zP7_&Z(gYO!25x!Y4nbi$wBL-Ok=n4d-I-6&3i?P&PZ~l5H4u&75vx_6sH#G*TGb=} z@N~1re{osWatCmsAZIUswN>51neJ4Rsm87_MyqpQ#PG?Ew|}INM=U-cWcHX9OW5{f zooHT@s^*s-NsGH1h@Xq>TrKPDdT~RFVeR)Td+*@$wmx#V_Y!Wpkjr!T*aUH+sD)WXnV(b+)-&Te*DWLV$iH69+i>mHBh|S&leov$M zD@9*a$z}I*0Ui=MoouCQ6ogU=^1gF5Gdi4V!LotW3fWe_bDCx`!(fWurJa{g@@|*# zf@k7`Hr@Rx)WKGITNT^{Nh?dzQ)oO;3L*=h@-tM$GZ=bdKE8R01KF6|aOltHy?M>+ zf*GE)!xNZ?2M}0C3R?NzS{dY+t4YxcI#h{-@Kn4MW0?&BPJD_dWbCOji96`JvqVY$ z6S-q;Q{;u<^>BYJ=XBGha_RZ>Al5*am zvUxB%=yHW``lXt)zo#;i&=M5s;^}EhJA@ALvso9Ufg=LB+^mB6wXz*xN{-KZvH|us!`0eKIy2X~4*BXnU;PRO+WP zNI)a19RlJ{L47_SBN8EXKB4|@cRaI_JU0}ZR^qwp{UpK|N_7GFRNW_mJ(;KtiE0Qi zd1p50_o2?VD=}YUELR?}5t!(5X+be|m z)qdH6*R#ysoG?RM79$+5*G54P&;)_as}EU|lm#BfpD@p~>U8lU7DyA6PYv1&encTC zp*r7Fjt{&D3fB+acn<5NyM6#m3FQ+v;#kggc3Q4+oYAE`e1DqL5gO$A;?Ny;@FLze zq__dR5qU#Z5G4(Y0||{p$Y4U<+b=1VkPZyJ$)i7_uq(+i5L(<}gWq*he(t8+?#NR? zRNE6F0f9biKQWw(;Kp9GTza+iLwj$yr$#l!1)iFXRwBa+#wp$aJR zh!RSSr}Ugz?-2>^JW01z%?lJZ6pr7r1wCtlvxRI(#F#UFPCbAHx7*t*&MPgk15kFk zyOyiL@8bu@Uk6Cf=y__nhGhNHDq*_<{N5?d`)=dIms6G;U1wF!%ez71_f47unpRq| z*d1O;^u993)I-NZa@~CsClsHJHsO$SBJvm=7WBLopu{1Yvfl0_9HoT;LEqYn3Av~O zcr&W*#8Ugvv#U+i zPQ7`GPLI!j$E;@FnAQyrE;u0x+)TfRY+I6ZZfymW9M&!1C4aLHh2G%6OLvTI8+C27 z*c7r!0fUPqj9_2??H2oxY(o9 z$v8Sy4cR=3{L64q@shN9yexMJy-Q4J*9mmTHH#CA-ggk;ae}-IfSXAmetzJCwo2wH z9;z(5Gf{7Xxl`xJYiei`8K@$*nt$XmjZt`{{^8Y0pedR2M?v?phcy%`J-Y6$)#C^L zZ@?ZQ!+RUU_1LXZvV&=UK=TgsgrTBEVSOsenB`*+-v(STFoa0L(yJpE_eP~wF3;!Q zoXYDI={Ah~SKQgWC>3b8C6PA3*E6$6JKaMS(7@%>28E?KyizBS$8ad6RS|QHxopx~ z9mrf?g{#dkzzE(VRu=9w{Rmzj#*-#tMaV4n>hULznJLb&>Md(F-_L3jryi6zO9oJY zQJc(^xWGOL&kR4zUd|q3_Sncu^*N>!gR@aKxu=X3z7n%Iy(WyA5|J0@tc~q@>O~IS z86v)dvh8iprq1o`YbtB1Yn7d9YZRx?s-sIuS)Mz;5UxnKXntIkSyz~6d%8&mfYgHQ znNK1v5p$hGm*IzheG2_edfSbT%JZJ}atnmzOl-{LL%@`YyGD zgW81_rc5Nvhl_r=fSJ=195k7#PeI#d6xMcrL?Y)cdSd*(R__(_U=ZUe;1D zj!V!}f^_ABW1El$uVEg>#c}lI24};WZ;d8R&uP|w^7uTA=n^#pmW=64MTm*)-xW~l zic9&D!2Df$w&OEv72D0XzAh1gGI#H=IZnVC`{~tbtu(7X4GhO_^{=PIvL-Id zX=k4w8*pV#o`*)3jI3)&O(vu+N;jYf$cxYuwU?dQHmnN8lia2+T!zgVX-2l}YfK

XAb65qoyqvj>Q$0?(WR?)eyZC3Q_)$n{|yQz73<9%OWjg5jp>f;Vb(Y z4S)FDZmE-Gh&XvV9X|VztfzQOG@ta_J_A**wEZEF=wfot6n z?ro;Jf<8sM2O$$6AQ?V5rQ9eQUxV3?iZ>17zh@y~I@Xs@h8}5U=+b@wHUll#5xP;k zSI&612ss8MuHlXQp^MqTbp{3WxC_z<*>09 zdY0qpf={^lyTwO~Q5E``sTC!C9aVTQx*{Lr_`c#d|WA@fN76MEr+T-+AH0 z#*Izdl5zr3#bETrWMOvNjfLl)9e9F@nn*#1O~UZl6OuK*?hCfq9=>FuM)huP(Msr0 zJRFs_`og?rrB4D34R`QVa;CSQqk&|ABr3f1upBzO7mat%*W*KIw<__l#(nW zF}H`?NT3T@K7)Rl^ia!T+9+|aHX`4RK9!wD3~q^6DHD!k6(l}?%_=Hp5+P;RfID!% z>$$}TX|p-p+uAkW^u8eR4?Ma{?B=3M-$gfKF9#ED^O8q8TC+8(gJnPzQD_RKZ$y`@$E>@+we&moDalwQg4FWf>Dmd)$*_% zHZER(?QmLrxM*$)mLGZ;t4bO$@J7zmMAm?0bMd)=MCmx;Dh<)gTLa`!$P!hmnY$)U zA+Sl$r&OU2skS)cp?y4#W^~i&QSkSSVW@7Ky$FPeRbKw^iD<)5mUnaaWSCK}n4opT zO+z)RoP09XaYD7KTSMRT*08-?o#kw<$4Hg^$zZuBi6~8oG}d!(6vg`9s`qyA-cu3cJO{Xv-qz>a z4Ucba%sp+oU{|z$tnQ`f=FyuhM*ErSXcR+1s8~}%5wuSGsI$7KVm%;l7eoh{11X$A z_N++7A2q@_9kJlB%QvyKQj6_8*6hRNT6?$=D3cLQM?4x`f}##*Objb5C9M#ta7ec` zxJKM6pAg7nGx#!FHze)ETa;tOWtvDz{Hm1`cpAlk98v4ONHMnTcBV8o0wzq9I{OT-E4HX+C3fPNPu*NO3dy)(Y;ipHL!EL%m<`}gk7)sJVh6QD}m=}Zv=te`WHzVRCwtg){eOXD3N z=d0@>FtUYIaV^Snp`I)l$gveC$LLW-%u7aJ6S?CukzYw>G$15U?I!NW3*)d(Ap&{Q z=wvdUYZBJmX`{&6UKVgGOk1YGXm@XjL}0-G@R4gmNarfk7%M5DvZlxGyzHXGlmb)o z{r*0DT3RN&T1hkF%kWY_8kt*ChCJ$WLrAB8g?w1<%tnjZVKfOkFW501V^coJc2}gn z>W-x(_>%hJ#4EMqC`xy{*Ay-WcO<6hNnVM+NVGE5w@H?W$9fQ-Wq9Yl5(wsL;`+U` zM|HKx7XGV`*a#<>;>Dm=;)_iVDGW^gWrrsSUmKgPFwhVOCnr-fv*t45irte0_tY{G z11(?%dzypghC(3)d%HW0f~+E_s%8Y4`Qq+53vIxB!}3wi2TcV;O%#Ddrbx=K|OaV&1%=f1YVRoir@(2Cz8OVI(akR!3eK#u}f1EZ!2JWeDr5Sh5*7LBp=@ z8|4c)*C9-eMkj|zfXlSic&xYLhh5Uu#TyUYQ{LLme&+T`k6S+T8P+l@9PiWBhWfEPQ+97zMP2o& z8%OG6>)-ck_hr=A5WIv{ii^9)>6Jm7X{|SWnXj?)jXT|#uU!*6f0y3rzxaqhD_{Fl z%lV)4HKv>MwQGLq_vC9oo}&GYWra*vKbddpV^q{Mf3T7Q5)8L_6p%hNf8G9 z@D+<;I-56G--X9~?1%6y-g76Aq&7oj8SUv=c-D3HVVb0)M_alYnh{I6Itb9qRE*te z@Tt=syOW&SPe)L!e-bVtc$m-Mz^dp~btyy5e;h#bR+zXT8x{(4(iSs(eWq zeG7aDoEiQC0-=qM&ffBD%Y=&HvxewY2O_*}2`hcC!|Wb+_mfCcYT@4IiJp~>GdFE- zhpHk)1wJCgh;_#thzsfQ6uE-eGidVseErCCx^rYJ;v||y30u-iO1KkZKdN#_!L(+) zy}8YUIXBilUGtIhO&0odmg+=4zE52o?Ow**l`_1NaEVKTp(oQ1F*otCn{^%b5N@@A zX3u%@i&TnDu{=++;6S+1IpnY7l=b%?IrCbQFY z+PAyoFRFLnD_Y~+w`HH;t`%mh%aOfpk$3%x?3+ShzLk>7*;k-A(YrWaUvo}2En{GEb` z=YGToh@Gv9N(YzB;wI=FGsz8sQsA#U(Vc3P4-^}{`4E=LmE}`k#v59H#iJUd+HHX_1#2o! zp2frq@SeHd`detT`)RTW}HM4!H%{|%^V)%#pF9c*Hora40e&y zIJ`R7hG$$+A~FRZBZgx_?6SZVka4Kb+bJlS17BTM>W^(19cUJwL0! zS}VqQFxky#oE$OuK}aqUcI{NAm8j>-Zv@21@njL<#^3tFDp%~QaPetzU8KtKe|Kl3?b@$!0<*c*R63+f5 zdJwj2ZkRLBT*;VZ?R}{jSj%9%rGRU(NZwfM_=*G)Ssr#V7(r^>G0ZSg@GFtC;ukdr zn*m_*S~Lo&%%(-8$Y|DZ9(qx^6yKw&@>C|P^fNGQStaSsv0!MH> zA1le_a7SNmx8{`Fk;vHLOWt~RzeExtMr0N|Xq1I8kLDqO9#_?WruL1W3o=9qOG2bv z`74{U+s=L3;U84SB}Vg=MvIy=>-LTFkxsZ9@MM@t*V$)`|Z|SZ9I< z`L%w6RVcyQKx>obu7(7(iJQXM_$uo13zcysjLuJ?`!rvM5B-wOzlvqAh{bqiZTCg zFlq`+3Uo`~P(O@wC^DEx!WFx?2G*xF)fGkVQg}&D;RDmGr;q3u{>zt&_tBk{pyTOL|$7P$48FzQ;3Ee_r zgPHj_gZ&-2`L&43PfzY2MNf!1*d9ovUp=>fay|b`poi_Bt_A)R=mGw1DJqU%%dPyK z`w@8WxdpNS|8zh8!^z3QLJ!K-_;^3(L-+rU-}XTeJMb58D$Ad4PG;b}xAW0%&IdjG z7ihQtK8*Vv)AlgFzlCl9CLr)v*Ji33sL-@1Cd|2fvp!*OTNX!q5=kvJd`_8`VN|6= z_B=PsHDeZa=qK{$q!?fCyqcM@LKL1+X=9@>v~zsE9C8_AGP#J^)mdee|au!uW;5V1ehqBy?c)1sR5;t zTj~pI09X%mGgy%l93-12lEtt-aeeOEDnd$%>Tq*)VZ^;&I}n=lcHx`Gg|!`js(#wq zsJDK-LjA>caqvgn*RwA!-Hg5Ii;j{bq%Xh+E2{{wC?xG=c3E5_qmO8C2#t>RWTU^s z0q{fxtE7aKavO+SiM(_*Jkk?LC727XLSEPVLED64>OV1F9+3DUnH!^E5I_}Tchyte zgtx6^bac0+Byxq3RuG%uxX|RrQ43PHM%!9SLW#B7PR93eeX1Np9C|~i!`B<+sr=^fUcwVF%BQr#s_UvHg$wqK}bg&kw(Tb z@bJS-{>|Bbvx&eoibtH`I`#>;#M~x&;ZmhK-BfkBFDwC1X}~t(h*eAm=bk*jyZffS zc&lFpJ}Hy2bzQOoc|@`1WZ8U^69aFzA~)MpNnC0R8KG4GECyLGe57t$)p47$Jm+%U zbdpD1Du_A53LQZ7og)7IX>eD=^owu|ex`BKj`+li5_H6}%Y z55`5fYUb7p8`)|Gf4;~h!reinX{!TC>dLgP`#CQ-->pEClKx_!a-8AF@NJ@9xRh1K zOL)iaP!chwoD6U=$3CztKSa4+F~JHHLLIbVT^;s9h|Sp$xg5imd{*Wd(K#d1cZ!g2=%^3-hl zLyzP#j_K#mrY~M39OaoI&(B25OH5n6bufMRJ*m#xCuT*s{!KY;C4aqO>@oQ!CcTj0 zkx%J>2~CHQ3ci^zAA0Ur?jEHk4`|+3j!9BffyNxKT-XR5I>9vHti~Tl|98UY5 zGUSsM@x(#b{$t$DJC15{9hbLPb4qKjm_I}qkhw_lvCNi8xn#SxO{??g)F%cMXc3vZ zkeGyvS&WFWpTqB`lfI#iuw9?w!I+kG4|9lm_XXhe>Ip2PhYXm?XtG)o8maDV68!C| ztg_70!s|LQu9-MI{o^(-(1ODc$1TL{~f%rT*_>p87-ULNJ; zsNff|>GU&V4F0=MS5ni!I0+TJs~~4|b$!SELImZfV6IbF@-f1%!=4Q9u0wOMaLa51 zoG!?dkkH%lD&f;AG)KXBcXUe*#<6%Rt~q6SmnNBGt*#@#lTV#ic(O<1ZoGe{upFJlX>cL$=n3S(GF-!l5+A z;X#0g>)a7+b(S_8PoE)LxgP!~CQCn2(Y3RB(cWRPDX8P=CDKS)%2zu4?y^gGINyN? za9kf7;jGz~IVPL-W@32jJN0|yak-*hn<=5ew_f2K*@#rsPoQrbTO(C2ia^uGWQqha zg`ylPX0Xqh`->Adpdbj7w|*+!y`gThaCRbYw~-#GOtfnAJ!#h@?fc;+>tEmb1~4=J1@0B8&05cjqd{-T>x{NEL_)?GvmJ!$`gFuYBCou}m-Z7VMP?D1 zPK^>rl;~Xjam6!%rA^*B1d##;_+YJ~{Jwxwc_Ni(KxWZ%xuNQ+6%2~S9$AqErc{|6bUwk;mVq_iZs+~a`{02|Vm_V(TG_eR$QV?)B zucX&Y0b`G-`vEO0b~L_&SV+_X@*UCh>=M8%vh9|M;Fz-@cULu;Ya4Vpi6uSX`T=1Y z&0BQ*t?K*&+2u_OfQ?6FV3Wb*`(uxnN`zekw7tzQrE-hliBRJZc2VH z!d?cHU)y&QhPW#_!kg*EF=Fg!oF`7VwXd>iKz$+hC@uIl@?fDpR?dp!P%~DUFeUJPJul*kGjJBUwG+>*r>M zoM9|)q_Ssq?lGsZUuSBONaKant2N7=M9)7?Rt%!wfEUwCnd$W_Y&)TxXEqbXDiEe; z`Ox~R&rZ4}IkC$tt`TH;Ye{9SqH&swad8`%3lD7HlwdoTL`H zK?mZMaCU-%f7sG%ISckEi{LlR->fpRJge$o)7d_c>WNe3Z;gkz=vU6Z-_VDK6n0rzs;q@eQ$%3oKLs2QseYZZ> zS5R>fh3A}4nnikl_aa6me>{1Zuc?SUY)rfTW!qVk???W*l3*m*TvuuL=D5S?OVa>&A z(^$#}c>x=xoOg9LtVB?gLxJB?3l82;Lr6SpR1Vh-XPnDME=Wq6QaKT%b8BU5U_1=W z!jdyC%5s&`=D|aQ^;e3tv>tBf<+(FJ|4RKley*+B$mvbwk2N24ZM}8gq#S~6LS<@9 zA9+Ds3KsMwaLuJ#6g;S?3%(C?rQX!od9(G^*NT{WOLC2vRK9lxnS~dKBmnqX4KDJ7 zug~zGyyYh*=1j>_#`s_d1^e93Kf7#YOTRE@x1b)Zw7;nTTSc|5n_`cjlWgsFHWcUE zY_cI%k<5su1J1ASW3k1U`446qitCErgiZt7;cliB){%c`I<}M#@-@Z03<{6o2Y0P(7vqOgfik*oTf?13-CRtyBiA~$@zXswPeE0HlVAa9*NzCnD zQq8o^C$!MaUKVBYA|cH9>K+Rz$i|t9p5wT?w{hj}Rb6xAQJaX1jvVI^YlV;(`*Qri z{)}7jMnk=1U6VYe>Iq3M*KYHuMnYJ!1)tn}6=aqYS!;rh8nnf#Qq7ie-mdc@ooXpR z563H)h8{&y+zH>rNzG5+%d0x!b5R$Nap(M9AT9}2YTXAB&)%Z78?@1VDa>XIVx?wb z&{v2G^=2-n4vvCA!QOwW-W1jBm*$Z}adhRrp&KB?*?qE;FfGQxfbU7v0YpWCrvQuK z6{UTKPl2dNLDVEM4aVg`w@|# zWM_9Wq$@;J5=%(V)~?9pFL?#06SEcdc=7X_ec}tBb-BZIlAxA%T29F9gATW>S3Tr( zYm2#}dgePqJH=O;7#o-KN@x2m;-x!UWp60V%zq>@^3&bb0_Cf}u3j|89K4*w(?;`r zI%>;hz*n(uUE!9SYG2LjWmSisn{AziL5|kh`qF$bJmGXGbNMPYN*g_2{4Hkl%5uJ_ zi_)1vn0%N$ZubpEr+c@2_dw>iyLD`I0CCyn#Pr_j7^d0%**Y=3&T$g1$x9ish8AK^ zm?&TaP_Uc-GL+JlyF*140JhpcZ4fo<2b0{)&k)G{VS%U~oX2#!_X%$j@cNp_LAj!| z_HaNM;Wgc)21-e7SrnTT^rxcTPw&nHicPjw0-Z!cOEX1H)q8;4RnEv6Qw3W#@9ZZo zqrJ>MDJlw(95Zme?>GzS#w+AakmWp(KV>X2m0BzAXMk~JNu3k z>DU~6+k-YPdJ;2>5kH0P&t%ydt_yrtXOWg(kPW1_C+Smc|1}rF)RTk13(@9 zP`}f3Z#Ypy4`zf>p>;E5KZ{;vqN;{NVf>-Lmja-iK2j-W1Uj4YdZ)B0Af&c^YQ4*T z2jW$vMu8uU-7W7{u8&8j>m-jc!E4HEgTjU0U|9B2JE+_HL{QWfrhgkN_-pyme?ZSa z3sU~~=+Zy4DE}jh`k{p8FR_CE3_SsV3q5}=y!jX(@n4`PDC&iYgX53P1pk8ze*YEk z@vj9s{~aa;{Kb1bu5M+sT7wF6HQMag6U0v^Q~5pX^TIxO?Yl}$OeBBd0& z@v09>(F}0kzBRi9=4jJ#eOr0;OcjdJ=q2tDH?zlgg!W!{fTv4$Z(X`@bccYT5*jK_ zq@?UOsURepiV8Ki)h=Yav1) zU6O)B>-T~7qpOYq+tBls6e?G169GG+OQ(F_xI69P&XE!mNwLOBJ6Rug>=Uq%d_{wh zJh$^2cNHTbLK5qx^j-D$rvo(msUZ{s;vPe;P}K}nP0ZHDsMhhaO5{?m6af(-SKP+I z7Xep?Nmv%gv24gt_)LK&p%Ub3_~6e_pOUq`ks6C-jDzwm&%jO{koF0It8zh)?0}6m z%nyjhdosY&@|^X_2Ph(mSGpr63#4R1yC>ISlF&@e#EIj`%YfXbB{(dUfQ&hhmoaT@+++K~u$6htO6=rDY-r5d2S;)+QuTj zI)p^!uVRh~=`;-Bmyls6+a{B3k*47b9jm`6OLO@3<@v~#yOttR(1pWd3R{pkpFyI3 zOZJFit1S+8Yfk{v2GDVP$k$;(5>8_g0iLtREXXRoVKfcVk>b8ki$;?~^PaZU4O?1) zyNRYWcF{2zEdFx#UUQUI+|Tl7*`FZ5%qW~iikk7Jif&sx>yREk1zG5wytzRXB?mM+!EfPIs< zH%dDyHsaT9r1K3NvmW3$rcx)ogJ>BSB)8fG2rkwMp?q!qlFOZ~yD}=z^t}6A#&@niN(FcVREyN|?PW7|Bz?b$m9X6;urpYZW3Inl}?*yVGS5F~SZQA<*1 z=>)L`_Q`JH^90@>)L-@6*q)h(`}5T|wcF)(r$;m*AquwMcC4u$zmVBKc_X5UqmS?+ zGBOXD$b`*7e4JW(5w|~-FIiLDyC$WT>;!$d;r;x)RtxiiarRB1)Da_Zly)zK+7Gel z>*;GZ#%YGNn;-LBiOXXXgX=-E&F2B*5V&PfZCw10g@|hWsq8zR9lGtoGe3shO)}A< zDbV6&kSAI`oycN+W>a128?3*Z)rDO@dewolwRe8r{-TBnUXiKQe{DP(dL1kD2<^LP z7kjgsrY4!9UQsr`-Xc0F4=S~|W_sVE`kAw6MEp@pp#IRNTEjWlaN6{eZlS)c z2cAKUzp<&VT}Qf6)>aol@Dyc!dqcyZLQR>8=$3^V8XyiGl*S{3dqMhY5WBG!A{O9zk)7~matODp4!A}wtu|8 zjMbMAesGmWL^N_G6K8#-vL+_D7{Pxsz5NA)%h^UiWhgxGsU|t$9wM4^n9bW=1QB=3 z;NB6AxG3*$eYxI5SU8;!qUa;u0`uW`S&aDZhIn&@9B8**3j$1MPxE*}BJ(w7g$;;k z8%-1&TPooruxxE&T#@8YH*x)%-7_YE1-Z4XJ#b^+S|hETlekcOG;Li6;#2$!^!KCR z^6Ij^&FW%(bNB-;{{s*I6A{;<&q$j1`^(^Gc3<|%lth}Q_iRP^(bcELT*7Drt&@W! zEtZmBrO0sDDIK|Y_u3ITI@*pnK%{8RXGGVNZHB*-GHN0*q5ZCI^K$5wAD6@Y%g+~r z%OT`E6G7Fo_!zHO1F?D*1`&(p3YUu5R^7l)**89JILYGYZ6Br1x_jm{W0q!g=GUb5 z@Ze5PJF2RV6%8evIo7^lirn_}D#<-R^kW?!B#EAb&x;YKq={%k>a~8!`4++XJo0^X z1~Fj{Nw%lDJuB5_*IjNO;f0glak90g^a^;~N;i+rjhnO35aVo|zcJkb1kPd1Z8B^) zu9zf=i6Udu7e49GdE+riZ_8Cl0U;58&kCb@apA^SWv8>~Y0FP7nLU)G80PS-Ai@;k+PNgxjP6=8yYexFiMvuSTWQImP%x(OltETu<)M~|h07O| zPqhsh;J|OCNp2g}OA8fUQ6GWPpKH$yQW=j3zWZLrwdr`1h<8lVucf@4ZXAAsc5^4R zQYDtAgWyYYg!s|-y|!sGZv1i7b1o?NWxTh9bM&rLEwugiP}QTHHhbDZo45RBy-mDV z31E<5XyEi-e@Br1T9*75l=?qOBJiJ4>c5XX0W$wRO1=Nqf0rQrzkyQkb@qElIWv&y zKRL=d(O}L&D0NGSA0mo08jT_iZ)A*J1XEgrrRzL%9=0==V84t)C|Wl8#~D|9C>@QA z0v!Z(x#gf|(`8_)r7_ll4aamPGlc}M5&6)wC{(jkOP+dH5N%qg=DhZKksdSRwdYao zRIKu7oYPr1k+*hJ%8%MaEls$#UVWZbKjA~zJK>IYwMZpVJ@OuXworaq>`pg9%$GI6 z{KG4H=kL4{b+j~xO2pBO*M#J)kf2xP6GsrA+JFDpi`8gMv%pltQuoUI{GgLh;A17{ zDq|=b+F>MZq$kJIRNHJ3_7^%yJ%R!jFbRRs+=$FqSWlN;so)*UIbT2_F!^nUs-tb9 zJi(w0c_X;tCey|qnl%+D9L%VE`}(ai^~&f4ie#7}UHe>DbP9Ij0kK*woV?5-RZ;{3 z?x3fsq5iujn#8cyZLu)Qr)V|O>cp;H&^093Y^o=k8M1cCzC!O)W_UFSh%KZ7XntTZ zFPdIAn7zcL4igQKzmVaoP}H+jxiLNJj7!eN^2$?S75@}mXGbi!x;F|SpGM`f(Zd7Vg8FO!<7v^PEh@RM;?uNm!6B0qMEzv_Ocwppv4c7e1S+HW<#6X(YIR52+P&?~k-2Zgv; z%z}<;>b78c68d&bEkkG%VVGNEzq+oWZ!QRdB(lQ;0sDRep5#tQ=E@Lihpeejx;N3 z-$)HJ%H+vbYB_Evr{*8N8v|t;VBecb`~;#uLk(jNy>8Mz=X~uw4o#0H~+eefX0uyqSSiDEI)uJnh#71OUsVyg&uO;X3?TnR>lMilG5(3z@<`A!98mARn8wQN!ssfGI)KS@ z_8JpD_d+;5p;7YmU@oy&wf@G1>}QrYZYv%ZGT6REkd>!xrf9n>YGFS`cH64q<88Z* z3nSz=)~0eK`T6Aa9A);J+uu_$c zZ8=~aP=K5*XN_!K5h68WaA`z>Hq;zlC~#rgE7J`1(UAbgbCQ8LBY>;FA*G992E&|p zn7&&_E!`O(;k$P|9idJ0*1eelrzIaZun6GSxMQdDw=lHY?h6YZmv#tw}j4`yjpHEwV#(J=7j2=@rd4 zmHkbItK4`4F3--LHQJt}VZZNIT*Jwz&sK-WG7u?rP+;qVEx`?zD~e`9?|V(Tc0ra% z#qoB@)@oMY|D|eG!9LnCe_z$57l2pK`)&HFAlv7IW^M0=o6|V%uVn_r6?mLQU^(-< zMz!=&CCG{dx`-(fY)h0>tW7;lH?hm%9(wOJ;yNcwC=(%&AxgV(p2X=rPk)bZZ5N>2 zPtQg9wECS;4rz|*ti2)!HxjW9jrVzJ8@fdW9$W>U(X*EWMZm>t|EKNzGxig*1=X~5 zgyk}#9QK+WmcolT;3Ke!Bu*3kjFB-UG(B`QE%t%0rfyd3-(NXm6Y!jD4Ljy`a;HO3 z;w`xh#C)u;+bv8HnvF7=_vyZ#IdP~^HLOAQ*II{HSXVbrrKDQoSc!+`7nFV;m9${i zvVLBwDMTbi*Tz!kOU!>a2F;9e@y^x|J{I_ z(5Pi)2|W#LHwjX|6^|F}4HXy9jwHDu@}fHXAYA2J{7rJ6jhublp4FQmh7Vtv+r_}a zH*}JP5KR+@FiBvILn6TyKl1WoZMgX$V01@8=iz^*F)4Y^_@%@b5^aqWs+qGZE?k}* z_dUBUk==IRHGC*V0BM(E0E~Eb&prv{(5?RG#T}j8(3Z%7Lvo>kbw*#qy|1^f>}Ng) zTHdLP(G|H1JmZ5Qw7JxmY1~J$9osEJl9Z7!gA}dqrTqgX{n@!Tr-KQyY)}D05qGLF zi}H{elUmbNHa#Wi(xm{3%a_SMtU0><64GAA(ah8p(oek_z>V@2%qdCbWtAX&<<(E4 zU2d_!y_FYnwswW4EhJ?}AdqSdXdO&;W@S7zX1=Pn-n8#)HmfYR&60iM`Ai_>_2xsU zkzzSEufTe^h433U7IM__{1gNWyR~fDAw1FDbhh#{*?Dl`GM*M{U*oHa;?KCUf?^En zQ~n&usie?l?JiujbK3;E+~0Oe`;<#-A+NrlzmvW$SWxBOSL$_)*_Y+|u==q}P7`6U zpoS;03Xd>#^|WU|GFSo6qE@hfqI4ghvU=KWhJ`?o@T+v{{JCdf%oZb{v>7D?%y9O1pMx9=Ywv34_Sd6?7u?RBJ~Gnzvov~mSf#W zACZcBw@ytksx}qrUCZ6Q24uZ@okfzWM3irD zPG&C-Fl|&rV;ox9HLS2S8Hv1I(RnW*TJ^VIH|Z7z1t4>!6M?+_pX`>~hjz@4dTTkk z_}sjmhXfh)RMl&_4CyZ#N2Y80pV@HK_kOmPQl;14Y0%vK#;58XB%N;sqrDPj*~>$y zw|^1(L0wZFwW}|U7EP8tE;M0A>v-yAD&HK1cBp-KddPWtD{9r@v^gpqLpYeoS^(PTFgtG~P_Lhg(8hWj#}!uJ+Uf8h)5^5Gp%YOS1Z zOEHp=A%BA&U)Xik=95z-3=~U{=P!-cjKhh-5ib>3R9m8n9iB$zLc_BiTSTq?T8D+s zMS!vF1mhE3+TOC=`(3;Utx86Zukr6rQeWHQ?<~2;kHopVHRU{UEG4KobaZ{KD?u@m zZnhg$PRJhNw7{a<8ThFp+Ot5|RBs zk7$_S*!yjDcj+^{H4YmD=dHw65B1_^!J&?kw~3yr=gdewI5BJUjG*#II0heK2zx3U zUQU2}B5zLS)lf1)-iNDfl)0MOCm8fe_q&zyz60JRT06`dUy?+d3Q+dUua=g-L7(>6ls5wy>c@GD-NUm~xaO=9FhQaK!ze+7dvRXhcMn^i<- zn{O^JNdHaqBdauA!^#v>d;;2P8W(G(7|*r_?^|8tH-mflPepV$rW^yM#jvjnO|Wb3 z`t?Es7B#i~f!;s%_t!g9?kvCtqP?5h{cEkX*%p_KDP+G#CI(0cEU)k4dnSA>Ag1o8 zo5fQ1N4soa&yU6v<`%c&c_9r~%VNb6dbZy=zkYTd;gU^?h_QPnduT11C{rGLotVjO zxM%nAL*EKg;Rr(?x3TnbRwEo)b~TDfAk19crRa%N9xn49?pTH7_Fj8^XYW24ogkXG ztIK8jC9|YjFCTPn9Vs^?!cz^sG|$B;zCsIClzQbgj(nvvvu(-EdC#UUs!ilC1)Fb* z`H4nRY$rRLOy7&8d%o9wFU<~5E!_pz9rt!nvzAW1diq&qv=Kz5aLhi!rEU}DD1Jc5 z2voi}F*(|kPrEevHwNcYdI2&{x)(SiglN~$D(AZ$FdfxaQTx+%&u8mq$m(YpUm3*C zP2t8@^Y=_Q6w8NM2%>l8v?=nucdaf7oS;B^c_U0uO}Qs^Snxw7z)0Oif>TT8k~iHJ z3y2-kX7*Wea~cM5tIZ*psa(l?{TnZXy1xSbQv#JYUWCG|-}tlmUZIhUhKO9cnhuil z9}r_HG=)hpMUtBAgW;>Io(1yMa(^R*8i&|liQPfxH-Gzyqufv&H-s;J-fpxKGmz-n z%yYrzt?3WtvL8YdFxBxFmdg}*T2Ji9*2jTAN^w_53czE)A*8zJRVtr1_-qb ztp$3?&B}9rGy%oQm1?GcI`~*&t+f1%lP1KP_g!9xwb}a+dquN=Lnsx1h|a{)$GTUW zmtA`tRXTZe+3x&;eK|vjYh6mFrbMUc!ZwO_Oc^o#FZx-Q;K0*QeH49C8V0{gD(01! zg?F^3&h4*ZnbkAIS$DLwuF}m`W9k?JlWkde44IV_2DF5uR<Q^uM#m%Y2(3Ely46 zV_{T?W&8jUl4hAUd+J!5rWBITH^1)}TdFTR(JMGnTZ+)(d38A@j*D|a>%>aB<|7*D zDdj)RO?`8yT)Vd=Eg)Zf5hOh{8I=2pQ0YBAMckK+EYbNse*p%kGFyz$?puMHDJ4LP zFo%>siy6OnsJ!>d^lddkK3`J0bRBGdAl+DZ#aL{!sTZjWbK1p(wHT{dImum?`t39j zQ!228DK7y0`@|(=a*TpRK0mxnF(>Db&v?QaV=xAImRG{u#QEPpgd|c|k1tTkoe5bL zMV3=K!@#h`O1|eLK$0=0l$pDn4HM8#6Y0IE)G>fnss3@N3Y*j7HQs#o}JiN z2zSTf$?V~@Bh;+(g=q{&Rf*ct&5*;1cfpj{!)bEl z0Cit2GIxem7C)_?>BGgi^tQO+IwiPgUDi63=Sh?#o2~Vf4!Me3*nD_KIWQ9uSSt#7 z#)V{g82BSRȻ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�h!^fX$C1 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ôhaEp)UiG4} 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

|;$5Vmo}>>9v>!NM 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

YE!WwV~}N@Hvg2o^%Kc5l+o&2yAEvO=@y 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

1)!UuB!yfl->>6^_i~_aaING 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

sGInr1u?EIjInK*hKYXfxB%72`Ufn9+f< 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

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

Index

+

+ Symbols +

+
,... in syntax 
... in syntax 
[] in syntax 
{} in syntax 
| in syntax 
+ A +
+
abutment pins 
alias
+
+      expansion in DEF and LEF 
+
+      names in DEF and LEF 
+
+      statements in LEF and DEF 
+
+ B +
+
blockages, simplified 
braces in syntax 
brackets in syntax 
BUSBITCHARS statement
+
+      description, DEF 
+
+ C +
+
capacitance
+
+      peripheral 
+
+      wire-to-ground 
+
cell modeling
+
+      combining blockages 
+
characters
+
+      escape 
+
+      information 
+
COMPONENTS statement
+
+      description, DEF 
+
conventions
+
+      user-defined arguments 
+
+      user-entered text 
+
COVER model, definition in LEF 
+ D +
+
database
+
+      converting LEF values to integer values 
+
debugging
+
+      DEF files 
+
+      LEF libraries 
+
+      parametric macros 
+
DEF
+
+      example 
+
+      syntax overview 
+
DEF syntax
+
+      PINS 
+
DEF syntax and description
+
+      BUSBITCHARS 
+
+      COMPONENTS 
+
+      DESIGN 
+
+      DIEAREA 
+
+      DIVIDERCHAR 
+
+      GCELLGRID 
+
+      GROUPS 
+
+      HISTORY 
+
+      NETS 
+
+      PINPROPERTIES 
+
+      PROPERTYDEFINITIONS 
+
+      REGIONS 
+
+      ROW 
+
+      SPECIALNETS 
+
+      TECHNOLOGY 
+
+      TRACKS 
+
+      UNITS DISTANCE MICRONS 
+
+      VERSION 
+
+      VIAS 
+
DESIGN statement
+
+      description, DEF 
+
diagonal vias, recommendation for RGrid 
DIEAREA statement
+
+      description, DEF 
+
DIVIDERCHAR statement
+
+      description, DEF 
+
+ E +
+
edge capacitance 
EEQ statement, LEF syntax 
electrically equivalent models, LEF syntax 
endcap models, definition in LEF 
equivalent models
+
+      electrically equivalent (EEQ) 
+
error checking, utilities 
escape character 
+ F +
+
feedthrough pins
+
+      LEF 
+
FOREIGN references
+
+      LEF syntax 
+
+      offset between LEF and GDSII 
+
+ G +
+
GCell grid
+
+      restrictions 
+
+      uniform, in DEF 
+
GCELLGRID statement
+
+      description, DEF 
+
GROUPS statement
+
+      description, DEF 
+
+ H +
+
HISTORY statement
+
+      description, DEF 
+
+ I +
+
INOUT pins, netlist 
INPUT DEF command
+
+      error checking 
+
INPUT GDSII command
+
+      with incremental LEF 
+
INPUT LEF command
+
+      error checking 
+
+      incremental capability 
+
INPUT pins, netlist 
italics in syntax 
+ L +
+
LAYER (nonrouting) statement
+
+      description, LEF 
+
layers
+
+      for LEF via descriptions 
+
+      routing order in LEF 
+
LEF
+
+      example 
+
+      files +
+
+           distance precision 
+
+           line length 
+
+      overview 
+
+      routing layer order 
+
LEF syntax
+
+      overview 
+
LEF syntax and description
+
+      LAYER, nonrouting 
+
+      MACRO 
+
+      NONDEFAULT rule 
+
+      OBS, macro obstruction 
+
+      PIN macro 
+
+      PROPERTYDEFINITIONS 
+
+      SITE 
+
+      UNITS 
+
+      VERSION 
+
+      VIA 
+
+      VIARULE 
+
+      VIARULE viaRuleName GENERATE 
+
LEF values converted to integer values 
legal characters 
library design, simplifying blockages 
literal characters 
+ M +
+
macro obstruction, OBS statement
+
+      description, LEF 
+
macro PIN statement
+
+      description, LEF 
+
MACRO statement
+
+      description, LEF 
+
models, site orientation 
mustjoin pins 
+ N +
+
netlist pins
+
+      INOUT 
+
+      INPUT 
+
+      OUTPUT 
+
nets
+
+      mustJoin nets 
+
NETS statement
+
+      description, DEF 
+
NONDEFAULT rule statement
+
+      description, LEF 
+
+ O +
+
OBS (macro obstruction) statement
+
+      description, LEF 
+
obstructions, simplified 
Or-bars in syntax 
orientation
+
+      models 
+
+      pin 
+
OUTPUT pins, netlist 
overlaps, specifying in LEF 
+ P +
+
peripheral capacitance 
PIN (macro) statement
+
+      description, LEF 
+
PINPROPERTIES statement
+
+      description, DEF 
+
pins
+
+      abutment 
+
+      direction in LEF 
+
+      external, DEF 
+
+      feedthrough pins in LEF 
+
+      INOUT 
+
+      INPUT 
+
+      modeling in LEF 
+
+      mustjoin 
+
+      netlist 
+
+      orientation 
+
+      OUTPUT 
+
+      power geometries 
+
+      ring 
+
+      using in LEF 
+
PINS statement
+
+      syntax, DEF 
+
PITCH parameter, ratio in three-layer design 
placement site function, SITE statement in LEF 
ports
+
+      in LEF 
+
+      multiple pins 
+
power pin
+
+      geometries in LEF 
+
PROPERTYDEFINITIONS statement
+
+      description, DEF 
+
+      description, LEF 
+
+ R +
+
REGIONS statement
+
+      description, DEF 
+
regular wiring
+
+      orthogonal paths 
+
RGrid, description 
ring pins 
routing time, diagonal vias 
routing width, LEF syntax 
ROW statement
+
+      description, DEF 
+
+ S +
+
scan chains
+
+      example 
+
+      rules 
+
SI units in LEF 
SITE statement
+
+      description, LEF 
+
sites
+
+      symmetry 
+
special wiring
+
+      description 
+
+      pins and wiring, DEF 
+
SPECIALNETS statement
+
+      description, DEF 
+
syntax conventions 
+ T +
+
TECHNOLOGY statement
+
+      description, DEF 
+
three-layer design, pitch ratio 
TRACKS statement
+
+      description, DEF 
+
+ U +
+
UNITS DISTANCE MICRONS statement
+
+      description, DEF 
+
UNITS statement
+
+      description, LEF 
+
+ V +
+
values in library database 
VERSION statement
+
+      description, DEF 
+
vertical bars in syntax 
VIA statement
+
+      description, LEF 
+
VIARULE statement
+
+      description, LEF 
+
VIARULE viaRuleName GENERATE statement
+
+      description, LEF 
+
vias
+
+      default vias in LEF 
+
+      layers for vias in LEF 
+
VIAS statement
+
+      description, DEF 
+
+ W +
+
wide wire signal wire, specifying 
wiring, regular
+
+      orthogonal paths 
+
wiring, special
+
+      description 
+
+      pins and wiring 
+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/lefdefrefTOC.html b/lefdef/doc/lefdefref/lefdefrefTOC.html new file mode 100644 index 00000000..27a70a29 --- /dev/null +++ b/lefdef/doc/lefdefref/lefdefrefTOC.html @@ -0,0 +1,287 @@ + + + + + Table of Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

Contents

+
+

Preface

+

What's New

+

Typographic and Syntax Conventions

+

1 +

+

LEF Syntax

+

About Library Exchange Format Files

+
General Rules
+
Character Information
+
Managing LEF Files
+
Order of LEF Statements
+

LEF Statement Definitions

+
Bus Bit Characters
+
Clearance Measure
+
Divider Character
+
Extensions
+
FIXEDMASK
+
Layer (Cut)
+
Layer (Implant)
+
Layer (Masterslice or Overlap)
+
Layer (Routing)
+
Library
+
Macro
+
Manufacturing Grid
+
Maximum Via Stack
+
Nondefault Rule
+
Property Definitions
+
Site
+
Units
+
Use Min Spacing
+
Version
+
Via
+
Via Rule
+
Via Rule Generate
+

2 +

+

ALIAS Statements

+

ALIAS Statements

+
ALIAS Definition
+
ALIAS Examples
+
ALIAS Expansion
+

3 +

+

Working with LEF

+

Incremental LEF

+

Error Checking

+
Message Facility
+
Error-Checking Facility
+

4 +

+

DEF Syntax

+

About Design Exchange Format Files

+
General Rules
+
Character Information
+
Order of DEF Statements
+

DEF Statement Definitions

+
Blockages
+
Bus Bit Characters
+
Component Mask Shift
+
Components
+
Design
+
Die Area
+
Divider Character
+
Extensions
+
Fills
+
GCell Grid
+
Groups
+
History
+
Nets
+
Nondefault Rules
+
Pins
+
Pin Properties
+
Property Definitions
+
Regions
+
Rows
+
Scan Chains
+
Slots
+
Special Nets
+
Styles
+
Technology
+
Tracks
+
Units
+
Version
+
Vias
+

A +

+

Examples

+

LEF

+

DEF

+

Scan Chain Synthesis Example

+

B +

+

Optimizing LEF Technology for Place and Route

+

Overview

+

Guidelines for Routing Pitch

+

Guidelines for Wide Metal Spacing

+

Guidelines for Wire Extension at Vias

+

Guidelines for Default Vias

+

Guidelines for Stack Vias (MAR Vias) and Samenet Spacing

+

Example of an Optimized LEF Technology File

+

C +

+

Calculating and Fixing Process Antenna Violations

+

Overview

+
What Are Process Antennas?
+
What Is the Process Antenna Effect (PAE)?
+
What Is the Antenna Ratio?
+
What Can Be Done to Improve the Antenna Ratio?
+

Using Process Antenna Keywords in the LEF and DEF Files

+

Calculating Antenna Ratios

+
Calculating the Antenna Area
+
Calculating a PAR
+
Calculating a CAR
+
Calculating Ratios for a Cut Layer
+

Checking for Antenna Violations

+
Area Ratio Check
+
Side Area Ratio Check
+
Cumulative Area Ratio Check
+
Cumulative Side Area Ratio Check
+
Cut Layer Process Antenna Model Examples
+
Routing Layer Process Antenna Model Examples
+
Example Using the Antenna Keywords
+

Using Antenna Diode Cells

+
Changing the Routing
+
Inserting Antenna Diode Cells
+

Using DiffUseOnly

+

Calculations for Hierarchical Designs

+
LEF and DEF Keywords for Hierarchical Designs
+
Design Example
+
Top-Down Hierarchical Design Example
+

Index

+ +
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/preface.html b/lefdef/doc/lefdefref/preface.html new file mode 100644 index 00000000..45f71cad --- /dev/null +++ b/lefdef/doc/lefdefref/preface.html @@ -0,0 +1,249 @@ + + + + + LEF/DEF 5.8 Language Reference -- Preface + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

Preface

+

This manual is a language reference for users of the Cadence® Library Exchange Format (LEF) and Design Exchange Format (DEF) integrated circuit (IC) description languages.

+

LEF defines the elements of an IC process technology and associated library of cell models. DEF defines the elements of an IC design relevant to physical layout, including the netlist and design constraints. LEF and DEF inputs are in ASCII form.

+

This manual assumes that you are familiar with the development and design of integrated circuits.

+

This preface provides the following information:

+
+ + + + + +
+
+ + ParagraphBullet + +
+
What's New
+
+
+ + + + + +
+
+ + ParagraphBullet + +
+
Typographic and Syntax Conventions
+
+

What's New

+

For information on what is new or changed in LEF and DEF for version 5.8 see What's New in LEF/DEF.

+

Typographic and Syntax Conventions

+

This list describes the conventions used in this manual.

+

+ + text +

+
Words in monospace type indicate keywords that you must enter literally. These keywords represent language tokens. Note that keywords are case insensitive. They are shown in uppercase in this document, but a keyword like LAYER can also be Layer or layer in a LEF or DEF file.
+

+ + variable +

+
Words in italics indicate user-defined information for which you must substitute a name or a value.
+

+ + objRegExpr +

+
An object name with the identifier objRegExpr represents a regular expression for the object name.
+

+ + pt +

+
Represents a point in the design. This value corresponds to a coordinate pair, such as x y. You must enclose a point within parentheses, with space between the parentheses and the coordinates. For example,

RECT ( 1000 2000 ) ( 1500 400 )
.
+

+ + | +

+
Vertical bars separate possible choices for a single argument. They take precedence over any other character.
+

+ + [ ] +

+
Brackets denote optional arguments. When used with vertical bars, they enclose a list of choices from which you can choose one.
+

+ + { } ... +

+
Braces followed by three dots indicate that you must specify the argument at least once, but you can specify it multiple times.
+

+ + { } +

+
Braces used with vertical bars enclose a list of choices from which you must choose one.
+

+ + ... +

+
Three dots indicate that you can repeat the previous argument. If they are used with brackets, you can specify zero or more arguments. If they are used with braces, you must specify at least one argument, but you can specify more.
+

+ + ,... +

+
A comma and three dots together indicate that if you specify more than one argument, you must separate those arguments with commas.
+

+ + " " +

+
Quotation marks enclose string values. Write quotation marks within a string as \". Write a backslash within a string as \\.
+

Any characters not included in the list above are required by the language and must be entered literally.

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/lefdefref/titlecopy.html b/lefdef/doc/lefdefref/titlecopy.html new file mode 100644 index 00000000..07bb9f36 --- /dev/null +++ b/lefdef/doc/lefdefref/titlecopy.html @@ -0,0 +1,220 @@ + + + + + LEF/DEF 5.8 Language Reference -- LEF/DEF 5.8 Language Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

+


+

+

+
+ +
LEF/DEF 5.8 Language Reference
+ +
+
+
+
+

+
+

+
+

+ + LEF/DEF 5.8 Language Reference +

+

Product Version 5.8
May 2017

+

© 2017 Cadence Design Systems, Inc. All rights reserved.
Printed in the United States of America.

+

Cadence Design Systems, Inc., 555 River Oaks Parkway, San Jose, CA 95134, USA

+

Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence) contained in this document are attributed to Cadence with the appropriate symbol. For queries regarding Cadence's trademarks, contact the corporate legal department at the address shown above or call 800.862.4522.

+

Open SystemC, Open SystemC Initiative, OSCI, SystemC, and SystemC Initiative are trademarks or registered trademarks of Open SystemC Initiative, Inc. in the United States and other countries and are used with permission.

+

All other trademarks are the property of their respective holders.

+

Restricted Print Permission: This publication is protected by copyright and any unauthorized use of this publication may violate copyright, trademark, and other laws. Except as specified in this permission statement, this publication may not be copied, reproduced, modified, published, uploaded, posted, transmitted, or distributed in any way, without prior written permission from Cadence. This statement grants you permission to print one (1) hard copy of this publication subject to the following conditions:

+ + + + +

Disclaimer: Information in this publication is subject to change without notice and does not represent a commitment on the part of Cadence. The information contained herein is the proprietary and confidential information of Cadence or its licensors, and is supplied subject to, and may be used only by Cadence's customer in accordance with, a written agreement between Cadence and its customer. Except as may be explicitly set forth in such agreement, Cadence does not make, and expressly disclaims, any representations or warranties as to the completeness, accuracy or usefulness of the information contained in this document. Cadence does not warrant that use of such information will not infringe any third party rights, nor does Cadence assume any liability for damages or costs of any kind that may result from use of such information.

+

Restricted Rights: Use, duplication, or disclosure by the Government is subject to restrictions as set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor.

+

 

+

 

+

 

+
+
+ Return to top of page +
+
+
+ + + + + + + + + + + + + + + +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +
+
+ +For support, see Cadence Online Support service. +
+
+ +Copyright © 2016, Cadence Design Systems, Inc. + +
+ +All rights reserved. +
+
+ + diff --git a/lefdef/doc/support/header_doc.gif b/lefdef/doc/support/header_doc.gif new file mode 100755 index 0000000000000000000000000000000000000000..3dace6c2c084e6f4ad5c19794e7210b61ef3a510 GIT binary patch literal 2954 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 GhyDW7D8Cy3 literal 0 HcmV?d00001 diff --git a/lefdef/doc/support/nav2_feedback.gif b/lefdef/doc/support/nav2_feedback.gif new file mode 100755 index 0000000000000000000000000000000000000000..04d20f0e9fe493e66ec747355efc4e8febed1f51 GIT binary patch literal 1174 zcmb7@|4-Fr6vxknD4JbzA+@m9swpUGwMPh7Ha3>P@G6SmyE+xwL_knC#X0Xdu5t~V;Z=-5;#x8iYil0g&&U3Oo?q_Hp69&J>-|2T zTU4?7ifqhp9H5fcfK5-MZJSTamT$f&!thO8yaWQDA{w`_hkH zmV`-!M4?1#NG&Oo3MmR`LmFCW#%pzR+_A>6F=C9mv8b#ymW>r-)luM*tzkAShSfpg ztym*$M2sjH(Q4EhWusygQ$Y z1uliHh!ur*QjxXSzVCu zhq0(cSQNR!E+}xxDy+y6Nh1Jo;W>haTSSRGfQfFz0VWuRLr_Bu(C7pfI4~I6kXE-M z_ZruzaTFUvkno4Gs6^E*&|ANw@HXo9=`G1YdAYmwdQmz?FCDjS&#*)GJh#1Ei5}tnkuZeR_OMP3PdSdH)y*1@WDi_rUCNCW@v8r#Y)3P=m zUc0I?XQKPquf6_`p0>R`9|ZcA9FNQ@s;%j3z5Z{~_+<2ZIZvmfCTq>DZTstome(%a z(4H6BzG?M^&jQn>&5bX;+r8tNELz{TZak$R?UlsUuJ?xy1_pYz{1mOfvaF^zCow|( zi{=+C`TOpzghWC+f2qiyNXp20{cKg=P|N3Mu3z-iNHHBa^GSJBa<{A)Z22K;UT9|b z<)%bk@8$5DZ9it*`!hZ9;>?}FkM_mCes0H&)6v#FrC-D{>z}S3tSGtNm3L)hY_z-K z)8MkN!o}D6=0!@AtCLser)d_-hK#9pcp&= literal 0 HcmV?d00001 diff --git a/lefdef/doc/support/nav2_help.gif b/lefdef/doc/support/nav2_help.gif new file mode 100755 index 0000000000000000000000000000000000000000..958256cbf2aedc328cb0b640c6d15680c0bf2034 GIT binary patch literal 1023 zcmb7@-Aj~F5XNW4Y!mj%KG2q+3u(n7>9CY^Q!JLUMH-0(t`Mz<&@%cGFM_Rbu?l<01DNPW9PkeaI0QAs01Zk!1qTL08`98Hmz=vsjU&wJf`mVeMJ2+b$Q5=$ zflF3lMUF@s0e}n75j5N)O5_1dbR!Nh!7v>{N$s}uGRe~cKPSY=MR=XzVoWZpR?gbW1xEbnHlkoH|~!Owr1pJ zd>OsIX5>_Mq%}BJu{hT9SqA9G+xfxE1qTxG*}!ngwRI!D!xLN9Q+xi&n#qDEy%RiB zx3I5wsdslG{hHfCQ`Lj#$}ZN-m4+WwbX9KZZ)<9=932SeZma(K^!T%e6LW8FMP~|T z@AZ0Z`H91tFjsx(aPr7 zgiYBn71R&|G$?_EI}C<4q@jgo^M-tlBhIOF=KWzTDiJ5@#JpWl;8Mk@IyJZl6y7=$ zXX*_0kOwf)jX2;R5O4@;hyfaucnS^-hBl<3Wj;B7jT%Qq%m)d77>i0()Q~Ief&!Of zDux`9Gy(t@o+D_uMU=<`nCM0vV1i*d1U19}jZR>J1B0OrY4a=cuW^kU$FMO334a)i zO3nNNgY|ogV55GY!IC^wkh@=R5T$1f((&644146jgI|7tw`N1vh@AO6abxqumBWo|sj-85>fWuQxoE@2;bW_FV_$~P?!UXW{m{eAOg8zV z5EY{IMGd literal 0 HcmV?d00001 diff --git a/lefdef/doc/support/nav2_index_b.gif b/lefdef/doc/support/nav2_index_b.gif new file mode 100755 index 0000000000000000000000000000000000000000..87fc9ddba320b458e6a8e00e4c731c196938f810 GIT binary patch literal 854 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/support/nav2_previous_b.gif b/lefdef/doc/support/nav2_previous_b.gif new file mode 100755 index 0000000000000000000000000000000000000000..b02bc97081d3d64f843aac572eabcfc39cdb022a GIT binary patch literal 871 zcmb7@ziZQB5XP_I5W#?;gOnnQOArU)2vl5zh_+6FuFW9A4Q6!7E>zILA%h%tF#Z}k zgtm^EM8rnVHIrlhflT6be(qcU0pBGY?|aXEp69-~zkP4>*25jSD8J?OsECQUNQk6R zsfwDYi-u^{rKy;Sxmbv0y>%5gaTgEqtkzHolW>WUNR%X1(j;9nBq`8F8ZDZ6oi(S9 zsk&;YW{ssXQ**UY%c9`YP2JT)JqwDrVH&Ox8VMtXtbTzZBlIg&I1z{PWd#w}5j2bgpd2TT~oA=HQg zO($4zFc@v5vsP5Exu)hM8zV^kF_tPaYk|%Bi=x?R?Xy`@K{dJ8dYdSVu}P=4-54(9 z#zQT?!72yMB&7Kq*b?F4sTn2hc6)t&z0>J*yWL)|*YEcSgTZh(9F0bMdwb*Ycruwx zr_2L-7lQu?5$=X;{LA9Z^dz@^z4(yXsnQkgHJ}r}z2TKhXK*?%6rd`+2?J z&*!FPY*?F|UqYhDU*yrDgfK!lA%YM|P*F-KBa{;=2$kxRQNkEuoG?L{RBt&YoDt3m z7lcdIDku?*2u_3`LPCj1N+cta6Df#90c}V_3(a^f)f{ygrJPbhsZ?W8F-94uOi(5j z1ui+GoKr3+mkJ7R1*3vfA*hgGL@SkyN=~Jq5>r79F+hV7Sh&MrXhRxWXqL*5s&P1D zf-$N5VJs@n85fL8Wfv5<6r2gcgoJxQ;VqM#Nx>xSArD}p8*#utAm9+x5Cb$Q@e~{w z3~fk5ORD75HEJBexl}>IAI72*f(waUVHXs*V1WaJp$%!NR-|6z8a0l@#tkrCOk|ennwyRPEDPl7cdFSL-#R zRE$PCYTJfkg=~0G%Qvu;17i}T@i|~i2oIi&Q6wxZEG8xQBv1ugY*)v^j?c-W0@it$qXn$+4 zE^*i{ykFbg4*!)J%ZnYSQ;+I-3#Poe6`S@<+Sc0!w@!CAWVURq3EZ%4A!c!SQQp$P z4;Rfn<=Xb4@!k$g{}IjnjXAk>m&bK7;Z|(FW9)_8hv|D$yLZ~Y%FvsJlKOVb+|`{>B5xfgEqpxhr z^!%SiNfX|8&6}I_`{AoET!?;d&Sa_c|I|-b{A0NiOK=ec3jKEq zZcbdzOgJg-ww3;TEA#yLMz_B#u&@1tshd}?VtK*w(;u56w$`s(wrhAIYn8vjRn^5w^P|-|V_EWoWS9h)7veNg) zw&agS3u|4!yI;F!4GDDf!k4e<6U9-Z!!?EXc9h;opVEDiIf<9%X0( zEGOqqt24F0%Pq^C?veVpt2KYIIcnA66BC!Z?|xC+yVCCD;h)+MX74K-J#smDNkm#f zw5!3n;lX_Fse+P_U&{2)pZW3q{l$%$S@Yqo^=qa-S)`wx)TkMe;;?t literal 0 HcmV?d00001 diff --git a/lefdef/doc/support/nav2_toc.gif b/lefdef/doc/support/nav2_toc.gif new file mode 100755 index 0000000000000000000000000000000000000000..5474e92e609d9f4b155e6c30e2b1d4a781670170 GIT binary patch literal 1154 zcmb7@>uZ!(5XL8vgf$v3Xau)5;tirJQaIgY7a=T7yu^A5*rt&fXyE-_U>7fZm> zlAx`h0_rpbjhF?MY+5x5-3@r9P0BGV0T{sW#b%W%#-^Lw6o zcXh?8Q246~nnf?^?J-1_h>3(q36(KqEEy&vWYk?+L)MaIvO-qfTQL_r@)-W3u!|I^$ zR;&>=B1RO9XfN++i@ZAq_1wt25+k9JW@hRp$?5Q88N<%j)cc z0++&8#EQZ_pzzizTNSIYhdh9ZZo~oqfPh0#Lk!TM#8Yr!Fti~JEp^GcYt%TxtS(6S z!&p=zEQ(xV7ZkW;6;|Ykq!9qP@Ek$IEuusoz(hCV022(uA*dk+XmkP#92g93NUK|s zdyQ+5nCvOzx=jZ$V{-UCyU@%x#R#sVASzB8hi^byccvDkTOG`_8dwVjOOsCTW z0|P@tLt|rO6B83}d*6M?@BcIZb@n75WzjO%>i!cE-+z?lo4e+hQ&+$D&0M;r|MtV~ z*hpR?UA$o=SWkt=0tY(p_Z}YqeP=qcd~U^e{_w%Vo~78p0Xbc*QYLx-^q#YYJ4@A$h3B?yp{8O@P3E_{Tx_*sV>xzK3`m% zN!5h+jaB)kyj&6Q9qo)QEP1nU|48?NV6=I7cI46Jd;fm9Hm831lG}feTx*;xA76-f zjQ`oX=~?NyNW;vo?%adF4d2)k=*y0*tGoNh=heN9%?01S7%iApJ$fiwUHqWDuDWE# njyp&9ZakYQ2o>i2FrWN;Pi&3d`zZ6lu4O$>7Oc<8q80xGL>~yq literal 0 HcmV?d00001 diff --git a/lefdef/doc/support/nav2_toc_b.gif b/lefdef/doc/support/nav2_toc_b.gif new file mode 100755 index 0000000000000000000000000000000000000000..727f3ae5ea1605452ef2b2f2bb555f7f293c9328 GIT binary patch literal 866 zcmb7@y^51j5Qb;LA{GHb3kh2&HbE?eA)r_&1axB+u-z0QOkr*yr65Gm!XkwXY+?Lq zEW-YjsYGNqI&~_`+(0U^8lU;r8}Kw?IA`8@-gmw{8a%vn_vt{c$Zt76Dq-GEn;cz$_jmG2gWHOmfr?c5?KA$fZ zi{)~;TCLXW^=7l#Znx*X|32jZ|GEC>!o`;C$gOIv|HOmVec5U4?j64W`m%NT=Kk5? z{M)NbHy$7C9ew!z=Bhsbb$0ae^zF6&>)pZer`4?csnmtm|O z7WxpCfppW-u_9D(a$9u4g32xo7DA8_R21#j`RX6&ybPOj_S(O-_BU(SugMOSfW*;w!};<#OhkbkXRBX5fX(GsUfwb zOe&-(pbcqgp&75$&2h&X!^Vg)>c*n7)>t-Hj8#X0OSXpDuozYcg|}jjun{q$U_`4? zYm|+OQA`Cj!~hLSVBrpfp$%zhp;?_FSL3j?Vy!xV7>kP8vRGDU7ZkV@wjx#(?g53j zR@tgpg+1f}Omrg-_y+_Wf*N9g1|^5@Au~3cH}d zC9AL^M6lh+o!iA2j%7N*6T&-7`=4dwmriR+4JC*?_oIy-XuulbHJ7m9z1!Y zC?O#sB_$;-EzR%u=jG+)=jR85!SeF*+S=NNhK5im)Y{tG-rgRGM558?@bGXf78@TQ z|J(cTL;nAtxj*8k_$ZDRxmNd|$o2iEIN!{5S6lAa`;rzEHhwR6;j!epZ=|A`` zV`}rIldn1|-aH9z%*rU~teiJ^uyo-1g~8LAL(#&x;^x4a?5f0SUtKuwSaNUN&d2Em z{l}l*oieTM>dU_Bwf3)_B1$I5ajIoz~u?ZYb@t~DktERx&%OM5DB+$ zA+%jH6%m_yb0)|91DV9>{M@(x1HMZ*-uIsSJkNde$xqar5aA|aAO zr7CKoE*hd)m!@JS=3*h1_10C~#9chZvsyzXOu{8XB2ki5Nt1NRkfcBxX|!nOb=I6Z zrs}Gpnl+ZnOwH9oEsKInH+5GJ^(-jfhH1D)Xe5lZYMQ2Nh9*;?Mhs{u!Qzg=Xd{gl z%~^)3=D1myW%*+)mAiSEXW4~<%W#XZNZbR(TT8bLOYD&cm~;~d{(-XiB$5^V!tOYjfFN$WPwa;cr1=ZwU>usVe#wMNGc4N4Z z8xOVo2CE!2laS_fU`vFDr)HG2+wD%L)9rS9yjmP83WHOyjXS3OS zK3^;r%jI&lTCLaX&1Q4e`|m^k|DW4`u3c}*mh4q){U`QYk7TR0dvNmM{AKIL-Q$as z*|%5Qcb>jKIQ{tj&5pkKb#eOX$J<-|*Sm*jpO@3_(bwbU*_WU1?mfTU+u4?fe*ryw BfVltw literal 0 HcmV?d00001 diff --git a/lefdef/src/CMakeLists.txt b/lefdef/src/CMakeLists.txt new file mode 100644 index 00000000..a7c4cb6a --- /dev/null +++ b/lefdef/src/CMakeLists.txt @@ -0,0 +1,4 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + add_subdirectory(lef) + add_subdirectory(def) diff --git a/lefdef/src/def/CMakeLists.txt b/lefdef/src/def/CMakeLists.txt new file mode 100644 index 00000000..b0e9eb41 --- /dev/null +++ b/lefdef/src/def/CMakeLists.txt @@ -0,0 +1,7 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + add_subdirectory(def) + add_subdirectory(defzlib) + add_subdirectory(defdiff) + add_subdirectory(defrw) + add_subdirectory(defwrite) diff --git a/lefdef/src/def/LICENSE.TXT b/lefdef/src/def/LICENSE.TXT new file mode 100644 index 00000000..b7802a4b --- /dev/null +++ b/lefdef/src/def/LICENSE.TXT @@ -0,0 +1,13 @@ +Copyright 2012 - 2017, Cadence Design Systems + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/lefdef/src/def/Makefile b/lefdef/src/def/Makefile new file mode 100644 index 00000000..3c52f8aa --- /dev/null +++ b/lefdef/src/def/Makefile @@ -0,0 +1,57 @@ +# $Source: /usr1/mfg/3.4C/solaris_bld/group/util/makefiles/RCS/dir.mk,v $ +# +# $Author: wanda $ +# $Revision: #3 $ +# $Date: 2004/09/29 $ +# $State: Exp $ +# + +.PHONY: all +all: install release + +BUILD_ORDER = \ + def \ + cdef \ + cdefzlib \ + defzlib \ + defrw \ + defwrite \ + defdiff + +## HP-UX 9.0.X +OS_TYPE := $(shell uname) +ifeq ($(OS_TYPE),HP-UX) +OPTIMIZE_FLAG = +O2 +else +OS_VER := $(shell uname -r) +ifeq ($(findstring 4.1,$(OS_VER)),4.1) +OPTIMIZE_FLAG = -O +else +OPTIMIZE_FLAG = -O +endif +endif + +install: + @$(MAKE) $(MFLAGS) installhdrs installlib installbin + +release: + @$(MAKE) "DEBUG=$(OPTIMIZE_FLAG)" install + +test: + @$(MAKE) "BUILD_ORDER=TEST" dotest + +.PHONY: clean +clean: + @$(MAKE) "BUILD_ORDER += TEST" doclean; + echo $(BUILD_ORDER); + @$(MAKE) doclean; + +.DEFAULT: + @for i in $(BUILD_ORDER) ;do \ + echo $(MAKE) $@ in $$i ; \ + cd $$i ; \ + $(MAKE) $(MFLAGS) $@ || exit ; \ + cd .. ; \ + done + +.DELETE_ON_ERROR: diff --git a/lefdef/src/def/TEST/Makefile b/lefdef/src/def/TEST/Makefile new file mode 100644 index 00000000..e05e5ec8 --- /dev/null +++ b/lefdef/src/def/TEST/Makefile @@ -0,0 +1,18 @@ +FAKE_ALL: all + +all: test + +install: test + +dotest: test + +clean doclean: + rm -f run.output run.stderr diff.out + +TEST_FILE = complete.5.8.def + +TEST_GOLD = complete.5.8.def.au + +test: ../bin/defrw + ../bin/defrw $(TEST_FILE) > run.output 2> run.stderr + diff run.output $(TEST_GOLD) && echo TEST PASSED diff --git a/lefdef/src/def/TEST/complete.5.8.def b/lefdef/src/def/TEST/complete.5.8.def new file mode 100644 index 00000000..ec4af503 --- /dev/null +++ b/lefdef/src/def/TEST/complete.5.8.def @@ -0,0 +1,1007 @@ +############################################################################### +# DEF57_01 testcase +############################################################################### +VERSION 5.8 ; +NAMESCASESENSITIVE ON ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN design ; +TECHNOLOGY technology ; +UNITS DISTANCE MICRONS 1000 ; + + + +############################################################################### +# PROPERTYDEFINITIONS +# objectType propName propType [ RANGE min max ] [ value ] ; ... +# END PROPERTYDEFINITIONS +############################################################################### +PROPERTYDEFINITIONS + DESIGN strprop STRING "aString" ; + DESIGN intprop INTEGER 1 ; + DESIGN realprop REAL 1.1 ; + DESIGN intrangeprop INTEGER RANGE 1 100 25 ; + DESIGN realrangeprop REAL RANGE 1.1 100.1 25.25 ; + REGION strprop STRING ; + REGION intprop INTEGER ; + REGION realprop REAL ; + REGION intrangeprop INTEGER RANGE 1 100 ; + REGION realrangeprop REAL RANGE 1.1 100.1 ; + GROUP strprop STRING ; + GROUP intprop INTEGER ; + GROUP realprop REAL ; + GROUP intrangeprop INTEGER RANGE 1 100 ; + GROUP realrangeprop REAL RANGE 1.1 100.1 ; + COMPONENT strprop STRING ; + COMPONENT intprop INTEGER ; + COMPONENT realprop REAL ; + COMPONENT intrangeprop INTEGER RANGE 1 100 ; + COMPONENT realrangeprop REAL RANGE 1.1 100.1 ; + NET strprop STRING ; + NET intprop INTEGER ; + NET realprop REAL ; + NET intrangeprop INTEGER RANGE 1 100 ; + NET realrangeprop REAL RANGE 1.1 100.1 ; + SPECIALNET strprop STRING ; + SPECIALNET intprop INTEGER ; + SPECIALNET realprop REAL ; + SPECIALNET intrangeprop INTEGER RANGE 1 100 ; + SPECIALNET realrangeprop REAL RANGE 1.1 100.1 ; + ROW strprop STRING ; + ROW intprop INTEGER ; + ROW realprop REAL ; + ROW intrangeprop INTEGER RANGE 1 100 ; + ROW realrangeprop REAL RANGE 1.1 100.1 ; + COMPONENTPIN strprop STRING ; + COMPONENTPIN intprop INTEGER ; + COMPONENTPIN realprop REAL ; + COMPONENTPIN intrangeprop INTEGER RANGE 1 100 ; + COMPONENTPIN realrangeprop REAL RANGE 1.1 100.1 ; + NONDEFAULTRULE strprop STRING ; + NONDEFAULTRULE intprop INTEGER ; + NONDEFAULTRULE realprop REAL ; + NONDEFAULTRULE intrangeprop INTEGER RANGE 1 100 ; + NONDEFAULTRULE realrangeprop REAL RANGE 1.1 100.1 ; +END PROPERTYDEFINITIONS + + + +############################################################################### +# DIEAREA pt pt ; +############################################################################### +DIEAREA ( -190000 -120000 ) ( -190000 350000 ) ( 190000 350000 ) + ( 190000 190000 ) ( 190360 190000 ) ( 190360 -120000 ) ; + + + +############################################################################### +# ROW rowName rowType origX origY orient +# { DO numX BY 1 STEP spaceX 0 +# | DO 1 BY numY STEP 0 spaceY } +# + PROPERTY { propName propVal }... ; +############################################################################### +ROW ROW_1 CORE 1000 1000 N DO 100 BY 1 STEP 700 0 + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +ROW ROW_2 CORE 1000 2000 S DO 100 BY 1 STEP 700 0 ; +ROW ROW_3 CORE 1000 3000 E DO 100 BY 1 STEP 8400 0 ; +ROW ROW_4 CORE 1000 4000 W DO 100 BY 1 STEP 8400 0 ; +ROW ROW_5 CORE 1000 5000 FN DO 100 BY 1 STEP 700 0 ; +ROW ROW_6 CORE 1000 6000 FS DO 100 BY 1 STEP 700 0 ; +ROW ROW_7 CORE 1000 7000 FE DO 100 BY 1 STEP 8400 0 ; +ROW ROW_8 CORE 1000 8000 FW DO 100 BY 1 STEP 8400 0 ; + +ROW ROW_VERT_1 CORE -10000 -10000 N DO 1 BY 10 STEP 0 8400 ; +ROW ROW_VERT_2 CORE -9000 -10000 S DO 1 BY 10 STEP 0 8400 ; +ROW ROW_VERT_3 CORE -8000 -10000 E DO 1 BY 10 STEP 0 700 ; +ROW ROW_VERT_4 CORE -7000 -10000 W DO 1 BY 10 STEP 0 700 ; +ROW ROW_VERT_5 CORE -6000 -10000 FN DO 1 BY 10 STEP 0 8400 ; +ROW ROW_VERT_6 CORE -5000 -10000 FS DO 1 BY 10 STEP 0 8400 ; +ROW ROW_VERT_7 CORE -4000 -10000 FE DO 1 BY 10 STEP 0 700 ; +ROW ROW_VERT_8 CORE -3000 -10000 FW DO 1 BY 1 STEP 0 700 ; + +ROW ROW_array0 ARRAYSITE 10000 10000 N DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array1 ARRAYSITE 10000 17000 W DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array2 ARRAYSITE 10000 17000 S DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array3 ARRAYSITE 10000 17000 E DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array4 ARRAYSITE 10000 17000 FN DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array5 ARRAYSITE 10000 17000 FE DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array6 ARRAYSITE 10000 17000 FS DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array7 ARRAYSITE 10000 17000 FW DO 100 BY 1 STEP 16000 0 ; + + + +############################################################################### +# TRACKS +# {X | Y} start +# DO numtracks STEP space +# [ MASK maskNum {SAMEMASK]] +# [ LAYER layerName ...] ; +############################################################################### +TRACKS Y 52 DO 857 STEP 104 MASK 1 ; +TRACKS Y 52 DO 857 STEP 104 MASK 1 SAMEMASK LAYER M1 M2 ; +TRACKS X 52 DO 1720 STEP 104 MASK 2 LAYER M2 ; +TRACKS X 52 DO 1720 STEP 104 ; + + +############################################################################### +# GCELLGRID +# X start DO numColumns+1 STEP space +# Y start DO numRows+1 STEP space ; +############################################################################### +GCELLGRID X 0 DO 100 STEP 600 ; +GCELLGRID Y 10 DO 120 STEP 400 ; + + + +############################################################################### +# VIAS numVias ; +# [- viaName +# [+ PATTERNNAME patternName] +# + RECT layerName [+ MASK maskNUM] pt pt +# | + POLYGON layerName [+ MASK maskNUM] pt pt pt]...;]... +# END VIAS +############################################################################### +VIAS 6 ; +- VIAGEN12_0 + + PATTERNNAME VIAGEN_12_12.800_7.600_I5 + + RECT METAL1 ( -4400 -3800 ) ( 4400 3800 ) + + RECT M2 + MASK 3 ( -4500 -3800 ) ( 4500 3800 ) + + RECT V1 + MASK 2 ( -3600 -3800 ) ( -2000 -2200 ) + + RECT V1 + MASK 1 ( -3600 2200 ) ( -2000 3800 ) + + RECT V1 + MASK 2 ( 2000 -3800 ) ( 3600 -2200 ) + + RECT V1 + MASK 3 ( 2000 2200 ) ( 3600 3800 ) ; + +- VIAGEN12_2 + + PATTERNNAME VIAGEN_12_5.0000_3.000_1.5600_-0.1600_1.0400_1.0400_D + + RECT METAL1 ( -2500 -1500 ) ( 2500 1500 ) + + RECT M2 ( -2500 -1500 ) ( 2500 1500 ) + + RECT V1 ( -2360 -960 ) ( -760 640 ) + + RECT V1 ( -1320 -960 ) ( 280 640 ) + + RECT V1 ( 760 -960 ) ( 2360 640 ) ; + +- VIAGEN12_3 + + PATTERNNAME VIAGEN12 + + RECT METAL1 ( -1600 -1600 ) ( 1600 1600 ) + + RECT M2 ( -1600 -1600 ) ( 1600 1600 ) + + RECT V1 ( -800 -800 ) ( 800 800 ) ; + +- VIAGEN12_4 + + VIARULE VIAGEN12 + + CUTSIZE 1600 1600 + + LAYERS M1 V1 M2 + + CUTSPACING 5600 6100 + + ENCLOSURE 100 100 150 150 + + ROWCOL 5 14 + + PATTERN 2_FFE0_3_FFFF + + ORIGIN 10 -10 + + OFFSET 0 0 20 -20 ; + +- M2_M1rct_0 + + RECT V1 ( -25 -65 ) ( 25 65 ) + + RECT M1 ( -35 -95 ) ( 35 95 ) + + RECT M2 ( -65 -65 ) ( 65 65 ) ; + +- VIAGEN12_1 + + POLYGON METAL1 + MASK 2 ( -2500 -1500 ) ( -2500 2500 ) ( 1500 2500 ) ( 1500 1500 ) ( 2500 1500 ) ( 2500 -1500 ) + + RECT M2 ( -2500 -1500 ) ( 2500 1500 ) + + RECT V1 ( -2400 -960 ) ( -700 640 ) ; + +- CUSTOMVIA + + POLYGON METAL1 + MASK 3 ( -2500 -1500 ) ( -2500 2500 ) ( 1500 2500 ) ( 1500 1500 ) ( 2500 1500 ) ( 2500 -1500 ) ; + +- TURNM1_1 + + RECT METAL1 ( -100 -60 ) ( 100 60 ) ; +- TURNM2_1 + + RECT M2 ( -100 -60 ) ( 100 60 ) ; +- TURNM3_1 + + RECT M3 ( -100 -60 ) ( 100 60 ) ; +- myvia1 + + RECT METAL1 + MASK 2 ( 0 0 ) ( 40000 40000 ) + + RECT V1 + MASK 3 ( 0 0 ) ( 40000 40000 ) + + RECT M2 ( 0 0 ) ( 40000 40000 ) ; +END VIAS + + + +############################################################################### +# [STYLES numStyles ; +# {- STYLE styleNum pt pt pt … ;} ... +# END STYLES] +############################################################################### +STYLES 10 ; +- STYLE 0 ( 30 10 ) ( 10 30 ) ( -10 30 ) ( -30 10 ) ( -30 -10 ) ( -10 -30 ) ( 10 -30 ) ( 30 -10 ) ; +- STYLE 1 ( 25 25 ) ( -25 25 ) ( -25 -25 ) ( 25 -25 ) ; +- STYLE 2 ( 50 50 ) ( -50 50 ) ( -50 -50 ) ( 50 -50 ) ; +- STYLE 3 ( 50 21 ) ( 21 50 ) ( -21 50 ) ( -50 21 ) ( -50 -21 ) ( -21 -50 ) ( 21 -50 ) ( 50 -21 ) ; +- STYLE 4 ( -30 -20 ) ( 10 -60 ) ( 50 -20 ) ( 50 40 ) ( 0 40 ) ( -30 10 ) ; +- STYLE 5 ( 0 2000 ) ( 0 -2000 ) ( 0 2000 ) ( 0 -2000 ) ; +- STYLE 6 ( -2000 2000 ) ( 2000 -2000 ) ( * * ) ; +- STYLE 7 ( 0 0 ) ( 0 1000 ) ( 1000 0 ) ; +- STYLE 8 ( -7500 -3110 ) ( -3110 -7500 ) ( 3110 -7500 ) ( 7500 -3110 ) ( 7500 7500 ) ( -7500 7500 ) ; +- STYLE 9 ( 0 -10610 ) ( 7500 -3110 ) ( 7500 3110 ) ( 3110 7500 ) ( -3110 7500 ) ( -10610 0 ) ; +END STYLES + + + +############################################################################### +# [NONDEFAULTRULES numNDRs ; +# {- STYLE styleNum pt pt pt … ;} ... +# END NONDEFAULTRULES] +############################################################################### +NONDEFAULTRULES 1 ; +- DEFAULT + + LAYER METAL1 + WIDTH 10.1 + DIAGWIDTH 8.01 + SPACING 2.2 + WIREEXT 1.1 + + LAYER M2 + WIDTH 10.1 + SPACING 2.2 + + LAYER M3 + WIDTH 11.1 + SPACING 3.2 + + VIA M1_M2 + + VIA M2_M3 + + VIARULE VIAGEN12 + + MINCUTS V1 2 + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +- RULE2 + + HARDSPACING + + LAYER METAL1 + WIDTH 10.1 + DIAGWIDTH 8.01 + SPACING 2.2 + WIREEXT 1.1 + + LAYER M2 + WIDTH 10.1 + SPACING 2.2 + + LAYER M3 + WIDTH 11.1 + SPACING 3.2 + + VIA M1_M2 + + VIA M2_M3 + + VIARULE VIAGEN12 + + MINCUTS V1 2 + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +END NONDEFAULTRULES + + +############################################################################### +# REGIONS numRegions; +# [- regionName pt pt [pt pt]... +# [+ TYPE [ FENCE | GUIDE ] +# [+ PROPERTY {propName propVal}...]...;]... +# END REGIONS +############################################################################### +REGIONS 2 ; +- region1 ( -500 -500 ) ( 300 100 ) ( 500 500 ) ( 1000 1000 ) + + TYPE FENCE + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +- region2 ( 4000 0 ) ( 5000 1000 ) + + TYPE GUIDE ; +END REGIONS + + + +############################################################################### +# COMPONENTS numComps ; +# [- compName modelName[netName | *]... +# [+ EEQMASTER macroname] +# [+ GENERATE generatorName [parameters]] +# [+ SOURCE {NETLIST | DIST | USER | TIMING}] +# [+ FOREIGN foreignCellName pt orient]... +# [+ {FIXED pt orient | COVER pt orient | PLACED pt orient | UNPLACED}] +# [+ WEIGHT weight] +# [+ REGION {pt pt | regionName}] +# [+ PROPERTY {propName propVal}...]...; +# ]... +# END COMPONENTS +############################################################################### +COMPONENTMASKSHIFT M3 M2 V1 M1 ; + +COMPONENTS 13 ; +- I1 B + + EEQMASTER A + + GENERATE generator + + SOURCE NETLIST + + FOREIGN gds2name ( -500 -500 ) N + + PLACED ( 100 100 ) N + + WEIGHT 100 + + REGION region1 + + MASKSHIFT 1102 + + HALO 5 6 7 8 + + HALO SOFT 5 6 7 8 + + ROUTEHALO 100 METAL1 M3 + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +- I2 A + + SOURCE DIST + + ROUTEHALO 100 M2 M3 + + PLACED ( 200 200 ) S ; +- I3 A + + SOURCE USER + + PLACED ( 300 300 ) E ; +- I4 A + + SOURCE TIMING + + PLACED ( 400 400 ) W ; +- I5 A + + PLACED ( 500 500 ) FN ; +- I6 A + + PLACED ( 600 600 ) FS ; +- I7 A + + PLACED ( 700 700 ) FE ; +- I8 A + + PLACED ( 800 800 ) FW ; +- I9 A + + FIXED ( 900 900 ) N ; +- I10 A + + COVER ( 1000 1000 ) N ; +- I11 A + + UNPLACED ; +- I12[0] A ; +- I12[1] A ; +- I13[0][10] A ; +- I14\[1\] A ; +- vectormodule[1]/scalarname A ; +- vectormodule[1]/vectorname[1] A ; +- scancell1 CHK3A ; +- scancell2 CHK3A ; +- scancell3 CHK3A ; +- scancell4 CHK3A ; +- scancell5 CHK3A ; +- scancell6 CHK3A ; +- scancell7 CHK3A ; +- scancell8 CHK3A ; +- scancell9 CHK3A ; +- scancell10 CHK3A ; +- scancell11 CHK3A ; +- scancell12 CHK3A ; +- nobrackets A ; +- somethingwith[1] A ; +- more[]brackets A ; +- more[1]brackets A ; +- more\[1\]brackets A ; +- more[1][2] A ; +- more\[1\]\[2\] A ; +- more\[2\] A ; +- foo\[1\]\[2\]/haha\[3\]\[4\] A ; +- foo[2][3]/haha[4][5] A ; +- foo\[3\]\[4\]/haha[5][6] A ; +- foo[4][5]/haha\[6\]\[7\] A ; +- foo[5][6]bar/haha\[7\]\[8\] A ; +- foo[6][7]bar/haha[8][9] A ; +END COMPONENTS + + +############################################################################### +# PINS numPins ; +# [ - pinName + NET netName +# [+ SPECIAL] +# [+ DIRECTION {INPUT | OUTPUT | INOUT | FEEDTHRU}] +# [+ USE {SIGNAL | POWER | GROUND | CLOCK +# | ANALOG | SCAN | RESET}] +# [+ LAYER layerName pt pt] +# [+ {FIXED | PLACED | COVER} pt orient] +# [+ ANTENNAPINPARTIALMETALAREA integer [LAYER layerName] ] ... +# [+ ANTENNAPINPARTIALMETALSIDEAREA integer [LAYER layerName] ] ... +# [+ ANTENNAPINDIFFAREA integer [LAYER layerName] ] ... +# [+ ANTENNAPINPARTIALCUTAREA integer [LAYER cutLayerName] ] ... +# [+ ANTENNAMODEL OXIDE{1,2,3,4} ] +# [+ ANTENNAPINGATEAREA integer [LAYER layerName] ] ... +# [+ ANTENNAPINMAXAREACAR integer LAYER layerName ] +# [+ ANTENNAPINMAXSIDEAREACAR integer LAYER layerName ] +# [+ ANTENNAPINMAXCUTCAR integer LAYER layerName ] +# ; +# ]... +# END PINS +############################################################################### +PINS 11 ; +- P0 + NET N0 + + SPECIAL + + DIRECTION INPUT + + USE SIGNAL + + PORT + + LAYER M2 MASK 2 ( 0 0 ) ( 30 135 ) + + VIA VIAGEN12_0 ( 0 100 ) + + FIXED ( 45 -2160 ) N + + PORT + + LAYER M1 ( 0 0 ) ( 30 135 ) + + VIA M1_M2 MASK 23 ( 100 0 ) + + COVER ( 0 -1000 ) N + + PORT + + LAYER M3 ( 0 0 ) ( 30 135 ) + + PLACED ( 1000 -1000 ) N + + NETEXPR "power1 VDD" + + SUPPLYSENSITIVITY P1 + + GROUNDSENSITIVITY P2 + + ANTENNAPINPARTIALMETALAREA 5 LAYER METAL1 + + ANTENNAPINPARTIALMETALAREA 5 LAYER M2 + + ANTENNAPINPARTIALMETALSIDEAREA 10 LAYER METAL1 + + ANTENNAPINPARTIALMETALSIDEAREA 10 LAYER M2 + + ANTENNAPINDIFFAREA 20 LAYER M1 + + ANTENNAPINDIFFAREA 20 LAYER M2 + + ANTENNAPINPARTIALCUTAREA 35 LAYER V1 + + ANTENNAPINPARTIALCUTAREA 35 LAYER V2 + + ANTENNAMODEL OXIDE1 + + ANTENNAPINGATEAREA 15 LAYER M1 + + ANTENNAPINGATEAREA 15 LAYER M2 + + ANTENNAPINMAXAREACAR 25 LAYER M1 + + ANTENNAPINMAXSIDEAREACAR 30 LAYER M1 + + ANTENNAPINMAXCUTCAR 40 LAYER M1 + + ANTENNAMODEL OXIDE2 + + ANTENNAPINGATEAREA 115 LAYER M1 + + ANTENNAPINGATEAREA 115 LAYER M2 + + ANTENNAPINMAXAREACAR 125 LAYER M1 + + ANTENNAPINMAXSIDEAREACAR 130 LAYER M1 + + ANTENNAPINMAXCUTCAR 140 LAYER M1 + + ANTENNAMODEL OXIDE3 + + ANTENNAPINGATEAREA 115 LAYER M1 + + ANTENNAPINGATEAREA 115 LAYER M2 + + ANTENNAPINMAXAREACAR 125 LAYER M1 + + ANTENNAPINMAXSIDEAREACAR 130 LAYER M1 + + ANTENNAPINMAXCUTCAR 140 LAYER M1 + + ANTENNAMODEL OXIDE4 + + ANTENNAPINGATEAREA 115 LAYER M1 + + ANTENNAPINGATEAREA 115 LAYER M2 + + ANTENNAPINMAXAREACAR 125 LAYER M1 + + ANTENNAPINMAXSIDEAREACAR 130 LAYER M1 + + ANTENNAPINMAXCUTCAR 140 LAYER M1 ; +- P1 + NET N1 + + DIRECTION OUTPUT + + USE POWER + + POLYGON M2 MASK 3 ( 0 0 ) ( 0 100 ) ( 50 100 ) ( 50 50 ) ( 100 50 ) ( 100 0 ) + + PLACED ( 45 -2160 ) N + + NETEXPR "power1 VDD[1]" + + ANTENNAPINPARTIALMETALAREA 5 + + ANTENNAPINPARTIALMETALSIDEAREA 10 + + ANTENNAPINGATEAREA 15 + + ANTENNAPINDIFFAREA 20 + + ANTENNAPINPARTIALCUTAREA 35 ; +- P2 + NET N2 + + DIRECTION INOUT + + USE GROUND + + LAYER M2 MASK 2 ( 0 0 ) ( 30 135 ) + + COVER ( 45 -2160 ) N ; +- P2.extra1 + NET N2 + + DIRECTION INOUT + + USE GROUND + + LAYER METAL1 ( 0 0 ) ( 10 10 ) + + COVER ( 0 0 ) N ; +- P3 + NET N3 + + DIRECTION FEEDTHRU + + USE CLOCK ; +- P4 + NET N4 + + USE SIGNAL ; +- P5 + NET N5 + + USE ANALOG ; +- P6 + NET N6 + + USE SCAN ; +- P7 + NET N7 + + USE RESET ; +- ARRAYPIN[0][10] + NET ARRAYNET[0][10] + + LAYER M2 ( 0 0 ) ( 30 135 ) ; +- ARRAYPIN.extra2[0][10] + NET ARRAYNET[0][10] + + LAYER M2 ( 0 0 ) ( 10 10 ) ; +- scanpin + NET SCAN + + USE SCAN ; +- scanpin2 + NET SCAN + + USE SCAN ; +- INBUS[1] + NET INBUS<1> + + LAYER METAL1 ( 0 0 ) ( 10 10 ) ; +- OUTBUS<1> + NET OUTBUS<1> ; +- INBUS.extra1[1] + NET INBUS<1> + + LAYER M1 ( 10 10 ) ( 100 100 ) ; +- vectorpin[0] + NET vectormodule[1]/vectornet[0] ; +- scalarpin + NET vectormodule[1]/scalarnet ; +- RE_RDY_2 + NET RE_RDY_2 + DIRECTION OUTPUT + USE SIGNAL + + PORT + + VIA myvia1 MASK 123 ( 500 500 ) + + FIXED ( -390000 0 ) N + + PORT + + POLYGON METAL1 MASK 22 ( 40000 40000 ) ( 80000 40000 ) ( 80000 -40000 ) ( 40000 -40000 ) ( 40000 -80000 ) + ( -40000 -80000 ) ( -40000 -40000 ) ( -80000 -40000 ) ( -80000 40000 ) ( -40000 40000 ) ( -40000 80000 ) + ( 40000 80000 ) + + FIXED ( -190000 0 ) N + + PORT + + VIA myvia1 ( 100 100 ) + + FIXED ( 290000 0 ) N ; +END PINS + + +############################################################################### +# PINPROPERTIES num; +# [- { compName | PIN } pinName +# [+ PROPERTY {propName propVal}...]...; +# ]... +# END PINPROPERTIES +############################################################################### +PINPROPERTIES 2 ; +- PIN P0 + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +- I1 A + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +END PINPROPERTIES + + +############################################################################### +# BLOCKAGES numBlockages ; +# - { LAYER layerName +# [+ COMPONENT compName +# |+ SLOTS +# |+ FILLS +# | + PUSHDOWN ] +# | PLACEMENT +# [ + COMPONENT compName +# | + PUSHDOWN ] +# } +# RECT pt pt +# [RECT pt pt ] ... ; +# ... +# END BLOCKAGES +############################################################################### +BLOCKAGES 8 ; + - LAYER METAL1 + MASK 1 + RECT ( 60 70 ) ( 80 90 ) ; + - LAYER M2 + SLOTS + PUSHDOWN + EXCEPTPGNET + COMPONENT I1 + MASK 3 + POLYGON ( 100 100 ) ( 100 200 ) ( 150 200 ) ( 150 150 ) ( 200 150 ) ( 200 100 ) ; + - LAYER M2 + SLOTS + MASK 2 + RECT ( 10 20 ) ( 40 50 ) ; + - LAYER METAL1 + FILLS + MASK 1 + RECT ( -10 20 ) ( 30 40 ) ; + - LAYER M1 + PUSHDOWN + SPACING 3 + MASK 1 + RECT ( 50 30 ) ( 55 40 ) ; + - LAYER M1 + EXCEPTPGNET + DESIGNRULEWIDTH 45 + MASK 1 + RECT ( 50 30 ) ( 55 40 ) ; + - PLACEMENT +# POLYGON ( 100 100 ) ( 100 200 ) ( 150 200 ) ( 150 150 ) ( 200 150 ) ( 200 100 ) ; + RECT ( -15 0 ) ( 0 20 ) + RECT ( -15 20 ) ( 30 40 ) + RECT ( 30 5 ) ( 50 40 ) + RECT ( -10 -15 ) ( 50 0 ) ; #floating + - PLACEMENT + PARTIAL 0.40 + PUSHDOWN + COMPONENT I1 + RECT ( -10 0 ) ( 0 20 ) + RECT ( -10 20 ) ( 30 40 ) + RECT ( 30 0 ) ( 50 40 ) + RECT ( -10 -5 ) ( 50 0 ) ; #coordinate are absolute + - PLACEMENT + PUSHDOWN + RECT ( -5 0 ) ( 0 20 ) + RECT ( -5 20 ) ( 30 40 ) + RECT ( 30 0 ) ( 25 40 ) + RECT ( -5 0 ) ( 50 10 ) ; #coordinate are absolute + - PLACEMENT + SOFT + RECT ( 50 30 ) ( 55 40 ) ; + - PLACEMENT + PARTIAL 0.40 + RECT ( 50 30 ) ( 55 40 ) ; + +END BLOCKAGES + + + +############################################################################### +# SPECIALNETS numNets ; +# [- netName [(compNameRegExpr pinName[+ SYNTHESIZED])]... +# [+ WIDTH layerName width]... +# [+ VOLTAGE mvolts] +# [+ SOURCE {NETLIST | DIST | USER | TIMING}] +# [+ FIXEDBUMP ] +# [+ ORIGINAL netName] +# [+ USE +# { SIGNAL | POWER | GROUND | CLOCK +# | SCAN | RESET | TIEOFF | ANALOG }] +# [+PATTERN +# {STEINER | BALANCED | TRUNK}] +# [+ ESTCAP wireCapacitance] +# [+ WEIGHT weight] +# [+ PROPERTY {propName propVal}...]...;]... +# [+ {ROUTED | FIXED | COVER} layerName width +# [+ SHAPE {RING | STRIPE | FOLLOWPIN | IOWIRE +# | COREWIRE | BLOCKWIRE | FILLWIRE +# | PADRING | BLOCKRING | BLOCKAGEWIRE}] +# (x y) [ (x *) | (* y) | viaName ]... +# [ NEW layerName width +# [+ SHAPE {RING | STRIPE | FOLLOWPIN | IOWIRE | COREWIRE +# | BLOCKWIRE | FILLWIRE +# | PADRING | BLOCKRING | BLOCKAGEWIRE}] +# (x y) [ (x *) | (* y) | +# viaName [ DO numX by numY STEP stepX stepY] ]...]...] +# [+ SHIELD shieldedNetName layerName width +# [+ SHAPE {RING | STRIPE | FOLLOWPIN | IOWIRE +# | COREWIRE | BLOCKWIRE | FILLWIRE +# | PADRING | BLOCKRING | BLOCKAGEWIRE}] +# (x y) [ (x *) | (* y) | viaName ]... +# [NEW layerName width +# [+ SHAPE {RING | STRIPE | FOLLOWPIN | IOWIRE +# | COREWIRE | BLOCKWIRE | FILLWIRE | BLOCKAGEWIRE}] +# (x y) [ [ MASK maskNum ](x *) | [ MASK maskNum ] (* y) | +# [ MASK viaMaskNum ] viaName [ DO numX by numY STEP stepX stepY] ]...]...]... +# ;]... +# END SPECIALNETS +############################################################################### +SPECIALNETS 5 ; +- SN1 ( I1 Z.extra1 ) ( I2 Z ) ( I3 Z ) ( * Z ) + + WIDTH METAL1 200 + + WIDTH M2 300 + + VOLTAGE 3200 + + SOURCE NETLIST + + FIXEDBUMP + + ORIGINAL VDD + + USE SIGNAL + + PATTERN STEINER + + ESTCAP 1500000 + + WEIGHT 30 + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 + + + ROUTED M1 120 + SHAPE RING ( 14000 341440 ) ( 9600 * ) ( * 282400 ) M1_M2 DO 2 BY 2 STEP 200 200 ( 2400 * ) + NEW METAL1 120 + SHAPE STRIPE ( 2400 282400 ) ( 240 * ) M1_M2 + NEW M1 120 + SHAPE FOLLOWPIN ( 2500 282400 ) ( 250 * ) VIAGEN12_0 N + NEW M1 120 + SHAPE IOWIRE ( 2600 282400 ) ( 260 * ) VIAGEN12_2 + NEW METAL1 120 + SHAPE COREWIRE ( 2700 282400 ) ( 270 * ) VIAGEN12_3 + NEW M1 120 + SHAPE BLOCKWIRE ( 2800 282400 ) ( 280 * ) CUSTOMVIA VIAGEN12_1 + NEW M1 120 + SHAPE FILLWIRE ( 2900 282400 ) ( 290 * ) VIAGEN12_4 + NEW M1 120 + SHAPE FILLWIREOPC ( 2900 282400 ) VIAGEN12_4 + NEW M1 120 + SHAPE BLOCKAGEWIRE ( 2000 282400 ) ( 200 * ) VIAGEN12 + NEW M1 120 + SHAPE BLOCKRING ( 2100 282400 ) ( 210 * ) + NEW M1 120 + SHAPE PADRING ( 2200 282400 ) ( 220 * ) + + NEW M1 200 ( 3000 3000 ) TURNM1_1 + NEW M2 200 ( 3100 3100 ) ( 3200 3100 ) TURNM2_1 + NEW M2 200 ( 3300 3300 ) ( 3400 3300 ) TURNM2_1 ( 3400 3600 ) + + NEW M2 200 ( 400 400 ) M1_M2 ( * * ) # case : pt via ( * * ) + NEW M2 200 ( 500 500 ) M1_M2 ( * * ) M1_M2 # case : pt via ( * * ) via + NEW M2 200 ( 700 700 ) M1_M2 ( * * ) ( * 800 ) # case : pt via ( * * ) pt + + NEW M2 15000 + STYLE 9 ( 105000 105000 ) ( 50000 50000 ) + NEW M2 15000 + STYLE 8 ( 105000 155000 ) ( * 105000 ) + + COVER METAL1 100 ( 100 100 ) ( 100 200 ) + + FIXED M1 100 ( 200 200 ) ( 300 200 ) + + ROUTED M1 120 + SHAPE DRCFILL ( 8000 8000 ) ( 8000 8200 ) ( 8400 8200 ) + + SHIELD N1 M2 90 ( 14100 340440 ) ( 8160 * ) M1_M2 ( * 301600 ) M1_M2 FN DO 2 BY 2 STEP 200 200 ( 2400 * ) + ; +- VDD + + VOLTAGE 5000 + + FIXED + SHAPE RING + MASK 2 + POLYGON METAL1 ( 0 0 ) ( 0 100 ) ( 100 100 ) ( 200 200 ) ( 200 0 ) + + COVER + SHAPE RING + MASK 3 + POLYGON M2 ( 100 100 ) ( * 200 ) ( 200 * ) ( 300 300 ) ( 300 100 ) + + VIA M1_M2 N ( 2400 0 ) ( 10 10 ) + + FIXED + SHAPE RING + RECT M3 ( 0 0 ) ( 10 10 ) + + SHIELD N1 + SHAPE BLOCKRING + RECT M3 ( 0 0 ) ( 10 10 ) + + ROUTED M1 20 ( 10 0 ) MASK 3 ( 10 20 ) VIAGEN12_4 + NEW M2 100 ( 10 10 ) ( 20 10 ) MASK 1 ( 20 20 ) MASK 031 VIAGEN12_3 + + SHAPE STRIPE + VIA VIA12_2 ( 30 30 ) ( 40 40 ) + + ROUTED M1 100 ( 0 0 100 ) ( 0 0 50 ) ( 100 0 50 ) M1_M2 ( 100 100 50 ) + + ROUTED M1 50 + STYLE 0 ( 0 0 ) ( 150 150 ) + + ROUTED M1 50 + STYLE 0 ( 150 150 ) ( 0 0 ) + + ROUTED M1 50 + STYLE 0 ( 150 0 ) ( 0 150 ) + + ROUTED M1 50 + STYLE 0 ( 0 150 ) ( 150 0 ) + + ROUTED M1 50 + STYLE 1 ( 150 150 ) ( 300 0 ) ( 400 0 ) + + ROUTED M2 100 + SHAPE RING + STYLE 0 ( 0 0 ) ( 100 100 ) ( 200 100 ) + + ROUTED M1 100 + STYLE 2 ( 0 0 ) M1_M2 ( 600 * ) M1_M2 + + ROUTED M1 50 ( 150 150 ) ( 300 300 ) + ; +- SN2 + + ROUTED M2 100 + STYLE 3 ( 0 0 ) ( 150 150 ) ( 300 0 ) + NEW M2 100 ( 300 0 ) ( 400 0 ) + + ROUTED M1 100 ( 0 0 ) ( 150 150 ) ( 300 0 ) ( 400 0 ) + + ROUTED M1 4000 + STYLE 5 ( 0 0 ) ( 1000 0 ) + + ROUTED M1 4000 + STYLE 6 ( 0 0 ) ( 1000 1000 ) + + ROUTED M1 1000 + STYLE 7 ( 0 0 ) ( * * ) ; +- SN3 + + USE GROUND + + ROUTED M2 100 ( 100 0 ) ( * 3000 ) + NEW M3 100 ( 0 1000 ) ( 3000 * ) + + SHIELD N1 M2 40 + SHAPE FILLWIRE ( 300 80 ) ( * 1920 ) + NEW M2 40 + SHAPE FILLWIRE ( 500 80 ) ( * 1920 ) ; +- DUMMY + + ROUTED M1 100 + SHAPE FILLWIRE ( 0 0 ) ( 100 0 ) ; +- DUMMY2 + + ROUTED M2 100 + SHAPE FILLWIREOPC ( 0 0 ) ( 100 0 ) ; +END SPECIALNETS + + +############################################################################### +# NETS numNets ; +# [- { netName [( {compName | PIN} pinName +# [+ SYNTHESIZED])]... +# | MUSTJOIN (compName pinName) } +# [+ SHIELDNET shieldNetName ] ... +# [+ NOSHIELD lastSegment ] ... +# [+ VPIN vpinName [LAYER layerName] pt pt +# [ { PLACED | FIXED | COVER } pt orient ] ]... +# [+ SUBNET subnetName +# [( {compName | PIN} pinName)| (VPIN vpinName)]... +# [NONDEFAULTRULE rulename] +# [regularWiring]] +# [+ XTALK num] +# [+ NONDEFAULTRULE ruleName] +# [regularWiring]... +# [+ SOURCE {NETLIST | DIST | USER | TEST | TIMING}] +# [+ FIXEDBUMP ] +# [+ FREQUENCY freq ] +# [+ ORIGINAL netName] +# [+ USE +# { SIGNAL | POWER | GROUND | CLOCK +# | SCAN | RESET | TIEOFF | ANALOG}] +# [+ PATTERN +# {STEINER | BALANCED }] +# [+ ESTCAP wireCapacitance] +# [+ WEIGHT weight] +# [+ PROPERTY {propName propVal}...]...; +# ]... +# END NETS +# +# regularWiring = +# {+ ROUTED | + FIXED | + COVER | + NOSHIELD} +# layerName [TAPER | TAPERRULE rulename] [STYLE styleNum ] +# routingPoints +# [NEW layerName [TAPER | TAPERRULE rulename] [STYLE styleNum ] +# routingPoints +# ] ... +# +# routingPoints = +# ( x y [value] ) +# {( x * [value]) | ( * y [value]) | ( * * [value] ) | viaName | + RECT ( delta1x delta1y delta2x delta2y ) | + VIRTUAL ( x y ) ]...] +############################################################################### +NETS 6 ; +- SCAN ( scancell1 PA10 + SYNTHESIZED ) ( scancell2 PA2 + SYNTHESIZED ) + + SOURCE TEST ; +- N1 ( I1 A ) ( PIN P0 ) + + SHIELDNET SN1 + + SHIELDNET VDD + + FIXED M3 ( 10 0 ) MASK 3 ( 10 20 ) MASK 031 M1_M2 + + ROUTED M1 ( 0 0 ) ( 5 0 ) VIRTUAL ( 2 3 ) MASK 1 ( 7 7 ) + + ROUTED M1 ( 0 0 ) ( 5 0 ) VIRTUAL ( 2 3 ) RECT ( 1 2 3 4 ) ( 7 7 ) + + FIXED M1 ( 0 0 ) ( 5 0 ) ( 7 7 ) + + FIXED M1 ( 0 0 ) ( 5 0 ) MASK 3 RECT ( 1 2 3 4 ) ( 7 7 ) + + NOSHIELD M2 ( 14100 341440 ) ( 14000 * ) M1_M2 + + VPIN N1_VP0 LAYER M3 ( -333 -333 ) ( 333 333 ) PLACED ( 189560 27300 ) N + + VPIN N1_VP1 LAYER M3 ( -333 -333 ) ( 333 333 ) PLACED ( 189560 27300 ) S + + VPIN N1_VP2 LAYER M3 ( -333 -333 ) ( 333 333 ) PLACED ( 189560 27300 ) E + + VPIN N1_VP3 LAYER M3 ( -333 -333 ) ( 333 333 ) PLACED ( 189560 27300 ) W + + VPIN N1_VP4 LAYER M3 ( -333 -333 ) ( 333 333 ) PLACED ( 189560 27300 ) FN + + VPIN N1_VP5 LAYER M3 ( -333 -333 ) ( 333 333 ) PLACED ( 189560 27300 ) FS + + VPIN N1_VP6 LAYER M3 ( -333 -333 ) ( 333 333 ) PLACED ( 189560 27300 ) FE + + VPIN N1_VP7 LAYER M3 ( -333 -333 ) ( 333 333 ) PLACED ( 189560 27300 ) FW + + VPIN N1_VP8 ( -333 -333 ) ( 333 333 ) + + SUBNET N1_SUB0 ( I2 A ) ( PIN P1 ) ( VPIN N1_VP9 ) + NONDEFAULTRULE RULE1 + ROUTED M1 ( 168280 63300 700 ) ( * 64500 ) M1_M2 ( 169400 * 800 ) M2_M3 + + XTALK 2 + + NONDEFAULTRULE RULE1 + + ROUTED + M2 ( 14000 341440 ) ( 9600 * ) ( * 282400 ) nd1VIA12 ( 2400 * ) TURNM1_1 + NEW M1 TAPER ( 2400 282400 ) ( 240 * ) + + SOURCE NETLIST + + FIXEDBUMP + + FREQUENCY 100 + + ORIGINAL N2 + + USE SIGNAL + + PATTERN STEINER + + ESTCAP 1500000 + + WEIGHT 100 + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +- N2 ( I3 A ) ( PIN P2 ) + + FIXED + M2 ( 14000 341440 ) ( 9600 * ) ( * 282400 ) M1_M2 ( 2400 * ) + NEW M1 TAPERRULE RULE1 ( 2400 282400 ) ( 240 * ) + + SOURCE DIST + + PATTERN BALANCED + + WEIGHT 500 ; +- N3 ( I4 A ) ( PIN P3 ) + + COVER + M2 ( 14000 341440 ) ( 9600 * ) ( * 282400 ) M1_M2 ( 2400 * ) VIAGEN12_0 N + NEW M1 ( 2400 282400 ) ( 240 * ) + NEW M2 ( 400 400 ) M1_M2 N ( * * ) # case : pt via ( * * ) + NEW M2 ( 500 500 ) M1_M2 ( * * ) M1_M2 # case : pt via ( * * ) via + NEW M2 ( 600 600 10 ) M1_M2 S ( * * 30 ) ( * 800 ) # case : pt via ( * * ext ) + NEW M2 ( 700 700 ) M1_M2 ( * * ) ( * 800 ) # case : pt via ( * * ) pt + NEW M1 ( 0 0 ) M1_M2 FS M2_M3 + NEW M3 ( 0 0 ) M2_M3 W M1_M2 + NEW M1 ( 10 10 ) ( 20 10 ) MASK 1 ( 20 20 ) MASK 031 VIA1_2 + + SOURCE USER + + PATTERN TRUNK ; +- N4 ( I5 A ) ( PIN P4 ) + + SOURCE TEST + + ROUTED M2 STYLE 1 ( 0 0 ) ( 150 150 ) ( 300 0 ) ( 400 0 ) + + ROUTED M1 ( 150 150 ) MASK 3 ( 300 300 ) MASK 032 VIAGEN12 + + NOSHIELD M1 ( 150 150 30 ) ( 150 300 30 ) + + ROUTED M1 STYLE 0 ( 0 0 ) ( 150 150 ) + NEW M1 STYLE 1 ( 150 150 ) MASK 2 ( 300 0 ) ( 400 0 ) + + USE GROUND ; +- N5 ( I6 A ) ( PIN P5 ) + + ROUTED M2 STYLE 3 ( 0 1000 ) ( 150 1150 ) ( 300 1000 ) ( 400 1000 ) + + ROUTED M1 ( 0 1000 ) ( 150 1150 ) ( 300 1000 ) ( 400 1000 ) + + SOURCE TIMING ; +- N6 + + NONDEFAULTRULE RULE2 + + ROUTED M1 STYLE 4 ( 1000 0 ) ( 1100 100 ) + + ROUTED M1 STYLE 4 ( 1200 100 ) ( 1300 0 ) + + ROUTED M1 STYLE 4 ( 1000 -100 ) ( 1300 -100 ) ; +- SCAN ( scancell1 PA10 + SYNTHESIZED ) ( scancell2 PA2 + SYNTHESIZED ) + + SOURCE TEST ; +- MUSTJOIN_1 ( I7 A ) ; +- ARRAYNET[0][10] ; +- vectormodule[1]/vectornet[0] ; +- vectormodule[1]/scalarnet ; +END NETS + + +############################################################################### +# SCANCHAINS numScanChains ; +# [- chainName +# [+ COMMONSCANPINS [(IN pin)][(OUT pin)]] +# [+ START {fixedInComp | PIN} [outPin] ] +# {+ FLOATING {floatingComp [(IN pin)] [(OUT pin)]}...} +# [+ ORDERED +# {fixedComp [(IN pin)] [(OUT pin)] +# fixedComp [(IN pin)] [(OUT pin)]} +# [fixedComp [(IN pin)] [(OUT pin)]] ...}] +# [+ STOP {fixedOutComp | PIN} [inPin] ] +# ;] +# ... +# END SCANCHAINS +############################################################################### +SCANCHAINS 2 ; +- chain1 + + PARTITION clock1 MAXBITS 256 # DEF5.5 + + COMMONSCANPINS ( IN PA1 ) ( OUT PA2 ) + + START I1 B + + STOP I4 B + + ORDERED + scancell1 ( IN PA2 ) + scancell2 ( OUT PA10 ) + ( BITS 4 ) + + FLOATING + scancell3 ( IN PA2 ) + scancell4 ( OUT PA10 ) + ( BITS 4 ) ; +- chain2 + + PARTITION clock1 MAXBITS 256 # DEF5.5 + + COMMONSCANPINS ( IN PA1 ) ( OUT PA2 ) + + START PIN scanpin + + STOP PIN scanpin2 + + ORDERED + scancell5 ( IN PA2 ) + scancell6 ( OUT PA10 ) + ( BITS 4 ) + + FLOATING + scancell7 ( IN PA2 ) + scancell8 ( OUT PA10 ) + ( BITS 4 ) ; +- chain3 + + PARTITION clock1 MAXBITS 256 # DEF5.5 + + COMMONSCANPINS ( IN PA1 ) ( OUT PA2 ) + + START I5 B + + STOP I6 B + + ORDERED + scancell9 ( IN PA2 ) + scancell10 ( OUT PA10 ) + ( BITS 4 ) + + FLOATING + scancell11 ( IN PA2 ) + scancell12 ( OUT PA10 ) + ( BITS 4 ) ; +END SCANCHAINS + + +############################################################################### +# GROUPS numGroups ; +# [- groupName compNameRegExpr... +# [+ SOFT +# [MAXHALFPERIMETER value] +# [MAXX value][MAXY value]] +# [+ REGION {pt pt | regionName} ] +# [+ PROPERTY {propName propVal}...]...;]... +# END GROUPS +############################################################################### +GROUPS 3 ; +- group1 I3 I2 + + SOFT MAXHALFPERIMETER 4000 MAXX 100000 MAXY 100000 + + REGION region1 + + PROPERTY strprop "aString" + + PROPERTY intprop 1 + + PROPERTY realprop 1.1 + + PROPERTY intrangeprop 25 + + PROPERTY realrangeprop 25.25 ; +- group2 I4 + + SOFT MAXHALFPERIMETER 4000 + + REGION ( 0 0 ) ( 100 100 ) ; +- region2 I7 I8 + + REGION region2 ; +END GROUPS + + +############################################################################### +# SLOTS numSlots ; +# - { LAYER layerName +# RECT pt pt +# [RECT pt pt] ... ; +# } +# ... +# END SLOTS +############################################################################### +SLOTS 3 ; + - LAYER M1 + RECT ( 3 3 ) ( 6 8 ) ; + - LAYER M2 + RECT ( 3 3 ) ( 6 8 ) + POLYGON ( 0 0 ) ( 0 10 ) ( 10 10 ) ( 10 20 ) ( 20 20 ) ( 20 0 ) ; + - LAYER M3 + RECT ( 3 3 ) ( 6 8 ) ; +END SLOTS + + +############################################################################### +# FILLS numFills ; +# - { LAYER layerName +# RECT pt pt +# [RECT pt pt] ... ; +# } +# ... +# END FILLS +############################################################################### +FILLS 5 ; + - VIA myvia1 + MASK 2 + OPC + ( 5000 5000 ) + ( 800 800 ) ; + - LAYER M1 + MASK 2 + RECT ( 0 2 ) ( 1 10 ) ; + - LAYER M2 + OPC + RECT ( 0 2 ) ( 1 10 ) + POLYGON ( 0 0 ) ( 0 10 ) ( 10 10 ) ( 10 20 ) ( 20 20 ) ( 20 0 ) ; + - LAYER M3 + RECT ( 0 2 ) ( 1 10 ) ; + - VIA M1_M2 + MASK 202 + OPC ( 2400 0 ) ( 10 10 ) ; + - VIA VIAGEN12_0 + OPC ( 100 100 ) ( 200 100 ) ; +END FILLS + + +############################################################################### +# BEGINEXT "tag" +# extensionText +# ENDEXT +############################################################################### +BEGINEXT "tag" +- CREATOR "Cadence" ; +- OTTER furry + + PROPERTY arrg later + ; +- SEAL cousin to WALRUS ; +ENDEXT + +END DESIGN diff --git a/lefdef/src/def/TEST/complete.5.8.def.au b/lefdef/src/def/TEST/complete.5.8.def.au new file mode 100644 index 00000000..e620da31 --- /dev/null +++ b/lefdef/src/def/TEST/complete.5.8.def.au @@ -0,0 +1,808 @@ +VERSION 5.8 ; +ALIAS alias1 aliasValue1 1 ; +ALIAS alias2 aliasValue2 0 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN design ; +TECHNOLOGY technology ; +UNITS DISTANCE MICRONS 1000 ; + +PROPERTYDEFINITIONS +DESIGN strprop STRING "aString" ; +DESIGN intprop INTEGER 1 ; +DESIGN realprop REAL 1.1 ; +DESIGN intrangeprop INTEGER RANGE 1 100 25 ; +DESIGN realrangeprop REAL RANGE 1.1 100.1 25.25 ; +REGION strprop STRING ; +REGION intprop INTEGER ; +REGION realprop REAL ; +REGION intrangeprop INTEGER RANGE 1 100 ; +REGION realrangeprop REAL RANGE 1.1 100.1 ; +GROUP strprop STRING ; +GROUP intprop INTEGER ; +GROUP realprop REAL ; +GROUP intrangeprop INTEGER RANGE 1 100 ; +GROUP realrangeprop REAL RANGE 1.1 100.1 ; +COMPONENT strprop STRING ; +COMPONENT intprop INTEGER ; +COMPONENT realprop REAL ; +COMPONENT intrangeprop INTEGER RANGE 1 100 ; +COMPONENT realrangeprop REAL RANGE 1.1 100.1 ; +NET strprop STRING ; +NET intprop INTEGER ; +NET realprop REAL ; +NET intrangeprop INTEGER RANGE 1 100 ; +NET realrangeprop REAL RANGE 1.1 100.1 ; +SPECIALNET strprop STRING ; +SPECIALNET intprop INTEGER ; +SPECIALNET realprop REAL ; +SPECIALNET intrangeprop INTEGER RANGE 1 100 ; +SPECIALNET realrangeprop REAL RANGE 1.1 100.1 ; +Parsed 50 number of lines!! +ROW strprop STRING ; +ROW intprop INTEGER ; +ROW realprop REAL ; +ROW intrangeprop INTEGER RANGE 1 100 ; +ROW realrangeprop REAL RANGE 1.1 100.1 ; +COMPONENTPIN strprop STRING ; +COMPONENTPIN intprop INTEGER ; +COMPONENTPIN realprop REAL ; +COMPONENTPIN intrangeprop INTEGER RANGE 1 100 ; +COMPONENTPIN realrangeprop REAL RANGE 1.1 100.1 ; +NONDEFAULTRULE strprop STRING ; +NONDEFAULTRULE intprop INTEGER ; +NONDEFAULTRULE realprop REAL ; +NONDEFAULTRULE intrangeprop INTEGER RANGE 1 100 ; +NONDEFAULTRULE realrangeprop REAL RANGE 1.1 100.1 ; +END PROPERTYDEFINITIONS + +DIEAREA -190000 -120000 -190000 350000 ; +DIEAREA -190000 -120000 -190000 350000 190000 350000 190000 190000 190360 190000 190360 -120000 ; +ROW ROW_1 CORE 1000 1000 N DO 100 BY 1 STEP 700 0 ; + + PROPERTY strprop aString STRING + PROPERTY intprop 1 INTEGER + PROPERTY realprop 1.1 REAL + PROPERTY intrangeprop 25 INTEGER + PROPERTY realrangeprop 25.25 REAL ; +ROW ROW_2 CORE 1000 2000 S DO 100 BY 1 STEP 700 0 ; +ROW ROW_3 CORE 1000 3000 E DO 100 BY 1 STEP 8400 0 ; +ROW ROW_4 CORE 1000 4000 W DO 100 BY 1 STEP 8400 0 ; +ROW ROW_5 CORE 1000 5000 FN DO 100 BY 1 STEP 700 0 ; +ROW ROW_6 CORE 1000 6000 FS DO 100 BY 1 STEP 700 0 ; +ROW ROW_7 CORE 1000 7000 FE DO 100 BY 1 STEP 8400 0 ; +ROW ROW_8 CORE 1000 8000 FW DO 100 BY 1 STEP 8400 0 ; +ROW ROW_VERT_1 CORE -10000 -10000 N DO 1 BY 10 STEP 0 8400 ; +ROW ROW_VERT_2 CORE -9000 -10000 S DO 1 BY 10 STEP 0 8400 ; +ROW ROW_VERT_3 CORE -8000 -10000 E DO 1 BY 10 STEP 0 700 ; +Parsed 100 number of lines!! +ROW ROW_VERT_4 CORE -7000 -10000 W DO 1 BY 10 STEP 0 700 ; +ROW ROW_VERT_5 CORE -6000 -10000 FN DO 1 BY 10 STEP 0 8400 ; +ROW ROW_VERT_6 CORE -5000 -10000 FS DO 1 BY 10 STEP 0 8400 ; +ROW ROW_VERT_7 CORE -4000 -10000 FE DO 1 BY 10 STEP 0 700 ; +ROW ROW_VERT_8 CORE -3000 -10000 FW DO 1 BY 1 STEP 0 700 ; +ROW ROW_array0 ARRAYSITE 10000 10000 N DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array1 ARRAYSITE 10000 17000 W DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array2 ARRAYSITE 10000 17000 S DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array3 ARRAYSITE 10000 17000 E DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array4 ARRAYSITE 10000 17000 FN DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array5 ARRAYSITE 10000 17000 FE DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array6 ARRAYSITE 10000 17000 FS DO 100 BY 1 STEP 16000 0 ; +ROW ROW_array7 ARRAYSITE 10000 17000 FW DO 100 BY 1 STEP 16000 0 ; +TRACKS Y 52 DO 857 STEP 104 MASK 1 LAYER ; +TRACKS Y 52 DO 857 STEP 104 MASK 1 SAMEMASK LAYER M1 M2 ; +TRACKS X 52 DO 1720 STEP 104 MASK 2 LAYER M2 ; +TRACKS X 52 DO 1720 STEP 104 LAYER ; +GCELLGRID X 0 DO 100 STEP 600 ; +GCELLGRID Y 10 DO 120 STEP 400 ; + +VIAS 6 ; +Parsed 150 number of lines!! +- VIAGEN12_0 + RECT METAL1 -4400 -3800 4400 3800 ++ RECT M2 + MASK 3 -4500 -3800 4500 3800 ++ RECT V1 + MASK 2 -3600 -3800 -2000 -2200 ++ RECT V1 + MASK 1 -3600 2200 -2000 3800 ++ RECT V1 + MASK 2 2000 -3800 3600 -2200 ++ RECT V1 + MASK 3 2000 2200 3600 3800 + ; +- VIAGEN12_2 + RECT METAL1 -2500 -1500 2500 1500 ++ RECT M2 -2500 -1500 2500 1500 ++ RECT V1 -2360 -960 -760 640 ++ RECT V1 -1320 -960 280 640 ++ RECT V1 760 -960 2360 640 + ; +- VIAGEN12_3 + RECT METAL1 -1600 -1600 1600 1600 ++ RECT M2 -1600 -1600 1600 1600 ++ RECT V1 -800 -800 800 800 + ; +- VIAGEN12_4 ; ++ VIARULE 'VIAGEN12' + + CUTSIZE 1600 1600 + + LAYERS M1 V1 M2 + + CUTSPACING 5600 6100 + + ENCLOSURE 100 100 150 150 + + ROWCOL 5 14 + + ORIGIN 10 -10 + + OFFSET 0 0 20 -20 + + PATTERN '2_FFE0_3_FFFF' +- M2_M1rct_0 + RECT V1 -25 -65 25 65 ++ RECT M1 -35 -95 35 95 ++ RECT M2 -65 -65 65 65 + ; +- VIAGEN12_1 + RECT M2 -2500 -1500 2500 1500 ++ RECT V1 -2400 -960 -700 640 + + + POLYGON METAL1 + MASK 2 -2500 -1500 -2500 2500 1500 2500 1500 1500 2500 1500 2500 -1500 ; +END VIAS +- CUSTOMVIA + + POLYGON METAL1 + MASK 3 -2500 -1500 -2500 2500 1500 2500 1500 1500 2500 1500 2500 -1500 ; +END VIAS +- TURNM1_1 + RECT METAL1 -100 -60 100 60 + ; +END VIAS +- TURNM2_1 + RECT M2 -100 -60 100 60 + ; +END VIAS +Parsed 200 number of lines!! +- TURNM3_1 + RECT M3 -100 -60 100 60 + ; +END VIAS +- myvia1 + RECT METAL1 + MASK 2 0 0 40000 40000 ++ RECT V1 + MASK 3 0 0 40000 40000 ++ RECT M2 0 0 40000 40000 + ; +END VIAS + +STYLES 10 ; +- STYLE 0 30 10 10 30 -10 30 -30 10 -30 -10 -10 -30 10 -30 30 -10 ; +- STYLE 1 25 25 -25 25 -25 -25 25 -25 ; +- STYLE 2 50 50 -50 50 -50 -50 50 -50 ; +- STYLE 3 50 21 21 50 -21 50 -50 21 -50 -21 -21 -50 21 -50 50 -21 ; +- STYLE 4 -30 -20 10 -60 50 -20 50 40 0 40 -30 10 ; +- STYLE 5 0 2000 0 -2000 0 2000 0 -2000 ; +- STYLE 6 -2000 2000 2000 -2000 2000 -2000 ; +- STYLE 7 0 0 0 1000 1000 0 ; +- STYLE 8 -7500 -3110 -3110 -7500 3110 -7500 7500 -3110 7500 7500 -7500 7500 ; +- STYLE 9 0 -10610 7500 -3110 7500 3110 3110 7500 -3110 7500 -10610 0 ; +END STYLES + +NONDEFAULTRULES 1 ; +Parsed 250 number of lines!! +- DEFAULT + + LAYER METAL1 WIDTH 10 DIAGWIDTH 8 SPACING 2 WIREEXT 1 + + LAYER M2 WIDTH 10 SPACING 2 + + LAYER M3 WIDTH 11 SPACING 3 + + VIA M1_M2 + + VIA M2_M3 + + VIARULE VIAGEN12 + + MINCUTS V1 2 + + PROPERTY strprop aString STRING + + PROPERTY intprop 1 INTEGER + + PROPERTY realprop 1.1 REAL + + PROPERTY intrangeprop 25 INTEGER + + PROPERTY realrangeprop 25.25 REAL +END NONDEFAULTRULES +- RULE2 + + HARDSPACING + + LAYER METAL1 WIDTH 10 DIAGWIDTH 8 SPACING 2 WIREEXT 1 + + LAYER M2 WIDTH 10 SPACING 2 + + LAYER M3 WIDTH 11 SPACING 3 + + VIA M1_M2 + + VIA M2_M3 + + VIARULE VIAGEN12 + + MINCUTS V1 2 + + PROPERTY strprop aString STRING + + PROPERTY intprop 1 INTEGER + + PROPERTY realprop 1.1 REAL + + PROPERTY intrangeprop 25 INTEGER + + PROPERTY realrangeprop 25.25 REAL +END NONDEFAULTRULES + +REGIONS 2 ; +- region1 -500 -500 300 100 +500 500 1000 1000 ++ TYPE FENCE ++ PROPERTY strprop aString STRING + PROPERTY intprop 1 INTEGER + PROPERTY realprop 1.1 REAL + PROPERTY intrangeprop 25 INTEGER + PROPERTY realrangeprop 25.25 REAL ; +- region2 4000 0 5000 1000 ++ TYPE GUIDE +; +END REGIONS +Parsed 300 number of lines!! + +COMPONENTMASKSHIFT M3 M2 V1 M1 ; + +COMPONENTS 13 ; +- I1 B + PLACED 100 100 N + SOURCE NETLIST + GENERATE generator + WEIGHT 100 + EEQMASTER A + REGION region1 + MASKSHIFT 1102 ++ HALO SOFT 5 6 7 8 ++ ROUTEHALO 100 METAL1 M3 ++ PROPERTY strprop aString STRING + PROPERTY intprop 1 INTEGER + PROPERTY realprop 1.1 REAL + PROPERTY intrangeprop 25 INTEGER + PROPERTY realrangeprop 25.25 REAL ; +- I2 A + PLACED 200 200 S + SOURCE DIST + ROUTEHALO 100 M2 M3 +; +- I3 A + PLACED 300 300 E + SOURCE USER ; +- I4 A + PLACED 400 400 W + SOURCE TIMING ; +- I5 A + PLACED 500 500 FN ; +Parsed 350 number of lines!! +- I6 A + PLACED 600 600 FS ; +- I7 A + PLACED 700 700 FE ; +- I8 A + PLACED 800 800 FW ; +- I9 A + FIXED 900 900 N ; +- I10 A + COVER 1000 1000 N ; +- I11 A + UNPLACED ; +- I12[0] A ; +- I12[1] A ; +END COMPONENTS +- I13[0][10] A ; +END COMPONENTS +- I14\[1\] A ; +END COMPONENTS +- vectormodule[1]/scalarname A ; +END COMPONENTS +- vectormodule[1]/vectorname[1] A ; +END COMPONENTS +- scancell1 CHK3A ; +END COMPONENTS +- scancell2 CHK3A ; +END COMPONENTS +- scancell3 CHK3A ; +END COMPONENTS +- scancell4 CHK3A ; +END COMPONENTS +- scancell5 CHK3A ; +END COMPONENTS +- scancell6 CHK3A ; +END COMPONENTS +- scancell7 CHK3A ; +END COMPONENTS +- scancell8 CHK3A ; +END COMPONENTS +- scancell9 CHK3A ; +END COMPONENTS +- scancell10 CHK3A ; +END COMPONENTS +- scancell11 CHK3A ; +END COMPONENTS +- scancell12 CHK3A ; +END COMPONENTS +- nobrackets A ; +END COMPONENTS +- somethingwith[1] A ; +END COMPONENTS +- more[]brackets A ; +END COMPONENTS +- more[1]brackets A ; +END COMPONENTS +- more\[1\]brackets A ; +END COMPONENTS +- more[1][2] A ; +END COMPONENTS +- more\[1\]\[2\] A ; +END COMPONENTS +- more\[2\] A ; +END COMPONENTS +- foo\[1\]\[2\]/haha\[3\]\[4\] A ; +END COMPONENTS +- foo[2][3]/haha[4][5] A ; +END COMPONENTS +- foo\[3\]\[4\]/haha[5][6] A ; +END COMPONENTS +- foo[4][5]/haha\[6\]\[7\] A ; +END COMPONENTS +- foo[5][6]bar/haha\[7\]\[8\] A ; +END COMPONENTS +- foo[6][7]bar/haha[8][9] A ; +END COMPONENTS +Parsed 400 number of lines!! + +PINS 11 ; +Parsed 450 number of lines!! +- P0 + NET N0 + DIRECTION INPUT + USE SIGNAL + NETEXPR "power1 VDD" + SUPPLYSENSITIVITY P1 + GROUNDSENSITIVITY P2 + + PORT + + LAYER M2 MASK 2 0 0 30 135 + + VIA VIAGEN12_0 ( 0 100 ) + + FIXED ( 45 -2160 ) N + + PORT + + LAYER M1 0 0 30 135 + + VIA M1_M2 MASK 023 ( 100 0 ) + + COVER ( 0 -1000 ) N + + PORT + + LAYER M3 0 0 30 135 + + PLACED ( 1000 -1000 ) N + SPECIAL ANTENNAPINPARTIALMETALAREA 5 LAYER METAL1 +ANTENNAPINPARTIALMETALAREA 5 LAYER M2 +ANTENNAPINPARTIALMETALSIDEAREA 10 LAYER METAL1 +ANTENNAPINPARTIALMETALSIDEAREA 10 LAYER M2 +ANTENNAPINDIFFAREA 20 LAYER M1 +ANTENNAPINDIFFAREA 20 LAYER M2 +ANTENNAPINPARTIALCUTAREA 35 LAYER V1 +ANTENNAPINPARTIALCUTAREA 35 LAYER V2 +ANTENNAMODEL OXIDE1 +ANTENNAPINGATEAREA 15 LAYER M1 +ANTENNAPINGATEAREA 15 LAYER M2 +ANTENNAPINMAXAREACAR 25 LAYER M1 +ANTENNAPINMAXSIDEAREACAR 30 LAYER M1 +ANTENNAPINMAXCUTCAR 40 LAYER M1 +ANTENNAMODEL OXIDE2 +ANTENNAPINGATEAREA 115 LAYER M1 +ANTENNAPINGATEAREA 115 LAYER M2 +ANTENNAPINMAXAREACAR 125 LAYER M1 +ANTENNAPINMAXSIDEAREACAR 130 LAYER M1 +ANTENNAPINMAXCUTCAR 140 LAYER M1 +ANTENNAMODEL OXIDE3 +ANTENNAPINGATEAREA 115 LAYER M1 +ANTENNAPINGATEAREA 115 LAYER M2 +ANTENNAPINMAXAREACAR 125 LAYER M1 +ANTENNAPINMAXSIDEAREACAR 130 LAYER M1 +ANTENNAPINMAXCUTCAR 140 LAYER M1 +ANTENNAMODEL OXIDE4 +ANTENNAPINGATEAREA 115 LAYER M1 +ANTENNAPINGATEAREA 115 LAYER M2 +ANTENNAPINMAXAREACAR 125 LAYER M1 +ANTENNAPINMAXSIDEAREACAR 130 LAYER M1 +ANTENNAPINMAXCUTCAR 140 LAYER M1 +; +- P1 + NET N1 + DIRECTION OUTPUT + USE POWER + NETEXPR "power1 VDD[1]" + + POLYGON M2 MASK 3 0 0 0 100 50 100 50 50 100 50 100 0 + PLACED ( 45 -2160 ) N ANTENNAPINPARTIALMETALAREA 5 +ANTENNAPINPARTIALMETALSIDEAREA 10 +ANTENNAPINDIFFAREA 20 +ANTENNAPINPARTIALCUTAREA 35 +ANTENNAMODEL OXIDE1 +ANTENNAPINGATEAREA 15 +; +- P2 + NET N2 + DIRECTION INOUT + USE GROUND + + LAYER M2 MASK 2 0 0 30 135 + COVER ( 45 -2160 ) N ; +- P2.extra1 + NET N2 + DIRECTION INOUT + USE GROUND + + LAYER METAL1 0 0 10 10 + COVER ( 0 0 ) N ; +- P3 + NET N3 + DIRECTION FEEDTHRU + USE CLOCK ; +- P4 + NET N4 + USE SIGNAL ; +- P5 + NET N5 + USE ANALOG ; +- P6 + NET N6 + USE SCAN ; +Parsed 500 number of lines!! +- P7 + NET N7 + USE RESET ; +- ARRAYPIN[0][10] + NET ARRAYNET[0][10] + + LAYER M2 0 0 30 135 ; +- ARRAYPIN.extra2[0][10] + NET ARRAYNET[0][10] + + LAYER M2 0 0 10 10 ; +END PINS +- scanpin + NET SCAN + USE SCAN ; +END PINS +- scanpin2 + NET SCAN + USE SCAN ; +END PINS +- INBUS[1] + NET INBUS<1> + + LAYER METAL1 0 0 10 10 ; +END PINS +- OUTBUS<1> + NET OUTBUS<1> ; +END PINS +- INBUS.extra1[1] + NET INBUS<1> + + LAYER M1 10 10 100 100 ; +END PINS +- vectorpin[0] + NET vectormodule[1]/vectornet[0] ; +END PINS +- scalarpin + NET vectormodule[1]/scalarnet ; +END PINS +- RE_RDY_2 + NET RE_RDY_2 + DIRECTION OUTPUT + USE SIGNAL + + PORT + + VIA myvia1 MASK 123 ( 500 500 ) + + FIXED ( -390000 0 ) N + + PORT + + POLYGON METAL1 MASK 22 ( 40000 40000 ) ( 80000 40000 ) ( 80000 -40000 ) ( 40000 -40000 ) ( 40000 -80000 ) ( -40000 -80000 ) ( -40000 -40000 ) ( -80000 -40000 ) ( -80000 40000 ) ( -40000 40000 ) ( -40000 80000 ) ( 40000 80000 ) + + FIXED ( -190000 0 ) N + + PORT + + VIA myvia1 ( 100 100 ) + + FIXED ( 290000 0 ) N ; +END PINS + +PINPROPERTIES 2 ; +- PIN P0 ; + + PROPERTY strprop aString STRING + PROPERTY intprop 1 INTEGER + PROPERTY realprop 1.1 REAL + PROPERTY intrangeprop 25 INTEGER + PROPERTY realrangeprop 25.25 REAL ; +Parsed 550 number of lines!! +- I1 A ; + + PROPERTY strprop aString STRING + PROPERTY intprop 1 INTEGER + PROPERTY realprop 1.1 REAL + PROPERTY intrangeprop 25 INTEGER + PROPERTY realrangeprop 25.25 REAL ; +END PINPROPERTIES + +BLOCKAGES 8 ; +- LAYER METAL1 + + MASK 1 + RECT 60 70 80 90 +; +- LAYER M2 + + COMPONENT I1 + + SLOTS + + PUSHDOWN + + EXCEPTPGNET + + MASK 3 + POLYGON 100 100 100 200 150 200 150 150 200 150 200 100 +; +- LAYER M2 + + SLOTS + + MASK 2 + RECT 10 20 40 50 +; +- LAYER METAL1 + + FILLS + + MASK 1 + RECT -10 20 30 40 +; +- LAYER M1 + + PUSHDOWN + + MASK 1 + + SPACING 3 + RECT 50 30 55 40 +; +- LAYER M1 + + EXCEPTPGNET + + MASK 1 + + DESIGNRULEWIDTH 45 + RECT 50 30 55 40 +; +- PLACEMENT + RECT -15 0 0 20 + RECT -15 20 30 40 + RECT 30 5 50 40 + RECT -10 -15 50 0 +; +- PLACEMENT + + PARTIAL 0.4 + + COMPONENT I1 + + PUSHDOWN + RECT -10 0 0 20 + RECT -10 20 30 40 + RECT 30 0 50 40 + RECT -10 -5 50 0 +; +END BLOCKAGES +- PLACEMENT + + PUSHDOWN + RECT -5 0 0 20 + RECT -5 20 30 40 + RECT 30 0 25 40 + RECT -5 0 50 10 +; +END BLOCKAGES +Parsed 600 number of lines!! +- PLACEMENT + + SOFT + RECT 50 30 55 40 +; +END BLOCKAGES +- PLACEMENT + + PARTIAL 0.4 + RECT 50 30 55 40 +; +END BLOCKAGES + +SPECIALNETS 5 ; +- SN1 Parsed 650 number of lines!! +( I1 Z.extra1 ) ( I2 Z ) ( I3 Z ) ( * Z ) + + ROUTED +M1 120 + SHAPE RING ( 14000 341440 ) ( 9600 341440 ) +( 9600 282400 ) M1_M2 DO 2 BY 2 STEP 200 200 ( 2400 282400 ) NEW METAL1 +120 + SHAPE STRIPE ( 2400 282400 ) ( 240 282400 ) M1_M2 +NEW M1 120 + SHAPE FOLLOWPIN ( 2500 282400 ) ( 250 282400 ) +VIAGEN12_0 N NEW M1 120 + SHAPE IOWIRE +( 2600 282400 ) ( 260 282400 ) VIAGEN12_2 NEW METAL1 120 ++ SHAPE COREWIRE ( 2700 282400 ) ( 270 282400 ) VIAGEN12_3 NEW M1 +120 + SHAPE BLOCKWIRE ( 2800 282400 ) ( 280 282400 ) CUSTOMVIA +VIAGEN12_1 NEW M1 120 + SHAPE FILLWIRE ( 2900 282400 ) +( 290 282400 ) VIAGEN12_4 NEW M1 120 + SHAPE FILLWIREOPC +( 2900 282400 ) VIAGEN12_4 NEW M1 120 + SHAPE BLOCKAGEWIRE +( 2000 282400 ) ( 200 282400 ) VIAGEN12 NEW M1 120 ++ SHAPE BLOCKRING ( 2100 282400 ) ( 210 282400 ) NEW M1 120 ++ SHAPE PADRING ( 2200 282400 ) ( 220 282400 ) NEW M1 200 +( 3000 3000 ) TURNM1_1 NEW M2 200 ( 3100 3100 ) +( 3200 3100 ) TURNM2_1 NEW M2 200 ( 3300 3300 ) +( 3400 3300 ) TURNM2_1 ( 3400 3600 ) NEW M2 200 +( 400 400 ) M1_M2 ( 400 400 ) NEW M2 200 +( 500 500 ) M1_M2 ( 500 500 ) M1_M2 NEW M2 +200 ( 700 700 ) M1_M2 ( 700 700 ) ( 700 800 ) +NEW M2 15000 + STYLE 9 ( 105000 105000 ) ( 50000 50000 ) +NEW M2 15000 + STYLE 8 ( 105000 155000 ) ( 105000 105000 ) + + + COVER METAL1 100 ( 100 100 ) ( 100 200 ) + + + FIXED M1 100 ( 200 200 ) ( 300 200 ) + + + ROUTED M1 120 + SHAPE DRCFILL ( 8000 8000 ) +( 8000 8200 ) ( 8400 8200 ) + + + SHIELD N1 M2 90 ( 14100 340440 ) ( 8160 340440 ) +M1_M2 ( 8160 301600 ) M1_M2 FN DO 2 BY 2 STEP 200 200 +( 2400 301600 ) + + PROPERTY strprop aString STRING + + PROPERTY intprop 1 INTEGER + + PROPERTY realprop 1.1 REAL + + PROPERTY intrangeprop 25 INTEGER + + PROPERTY realrangeprop 25.25 REAL + + + FIXEDBUMP + + VOLTAGE 3200 + + WEIGHT 30 + + SOURCE NETLIST + + PATTERN STEINER + + ORIGINAL VDD + + USE SIGNAL ; +- VDD Parsed 700 number of lines!! + + + ROUTED M1 20 ( 10 0 ) MASK 3 +( 10 20 ) VIAGEN12_4 NEW M2 100 ( 10 10 ) +( 20 10 ) MASK 1 ( 20 20 ) MASK 031 VIAGEN12_3 + + + ROUTED M1 100 ( 0 0 100 ) ( 0 0 50 ) +( 100 0 50 ) M1_M2 ( 100 100 50 ) + + + ROUTED M1 50 + STYLE 0 ( 0 0 ) +( 150 150 ) + + + ROUTED M1 50 + STYLE 0 ( 150 150 ) +( 0 0 ) + + + ROUTED M1 50 + STYLE 0 ( 150 0 ) +( 0 150 ) + + + ROUTED M1 50 + STYLE 0 ( 0 150 ) +( 150 0 ) + + + ROUTED M1 50 + STYLE 1 ( 150 150 ) +( 300 0 ) ( 400 0 ) + + + ROUTED M2 100 + SHAPE RING + STYLE 0 +( 0 0 ) ( 100 100 ) ( 200 100 ) + + + ROUTED M1 100 + STYLE 2 ( 0 0 ) +M1_M2 ( 600 0 ) M1_M2 + + + ROUTED M1 50 ( 150 150 ) ( 300 300 ) + + + FIXED + + SHAPE RING + + MASK 2 + POLYGON METAL1 0 0 0 100 100 100 200 200 200 0 + + COVER + + SHAPE RING + + MASK 3 + POLYGON M2 100 100 100 200 200 200 300 300 300 100 + + FIXED + + SHAPE RING + + RECT M3 0 0 10 10 + + SHIELD + + N1 + + SHAPE BLOCKRING + + RECT M3 0 0 10 10 + + ROUTED + + VIA M1_M2 N 2400 0 10 10; + + + ROUTED + + SHAPE STRIPE + + VIA VIA12_2 N 30 30 40 40; + + + VOLTAGE 5000 ; +- SN2 + + ROUTED M2 100 + STYLE 3 ( 0 0 ) +( 150 150 ) ( 300 0 ) NEW M2 100 ( 300 0 ) +( 400 0 ) + + + ROUTED M1 100 ( 0 0 ) ( 150 150 ) +( 300 0 ) ( 400 0 ) + + + ROUTED M1 4000 + STYLE 5 ( 0 0 ) +( 1000 0 ) + + + ROUTED M1 4000 + STYLE 6 ( 0 0 ) +( 1000 1000 ) + + + ROUTED M1 1000 + STYLE 7 ( 0 0 ) +( 0 0 ) +; +- SN3 + + ROUTED M2 100 ( 100 0 ) ( 100 3000 ) +NEW M3 100 ( 0 1000 ) ( 3000 1000 ) + + + SHIELD N1 M2 40 + SHAPE FILLWIRE ( 300 80 ) +( 300 1920 ) NEW M2 40 + SHAPE FILLWIRE ( 500 80 ) +( 500 1920 ) + + + USE GROUND ; +- DUMMY + + ROUTED M1 100 + SHAPE FILLWIRE ( 0 0 ) +( 100 0 ) +; +END SPECIALNETS +- DUMMY2 + + ROUTED M2 100 + SHAPE FILLWIREOPC ( 0 0 ) +( 100 0 ) +; +END SPECIALNETS +Parsed 750 number of lines!! + +NETS 6 ; +- SCAN ( scancell1 PA10 ) + SYNTHESIZED ( scancell2 PA2 ) + SYNTHESIZED + SOURCE TEST ; +- N1 + SUBNET CBK N1_SUB0 Parsed 800 number of lines!! + + NONDEFAULTRULE CBK RULE1 ( I1 A ) ( PIN P0 ) + NONDEFAULTRULE RULE1 + + N1_VP0 M3 -333 -333 333 333 P 189560 27300 N + + N1_VP1 M3 -333 -333 333 333 P 189560 27300 S + + N1_VP2 M3 -333 -333 333 333 P 189560 27300 E + + N1_VP3 M3 -333 -333 333 333 P 189560 27300 W + + N1_VP4 M3 -333 -333 333 333 P 189560 27300 FN + + N1_VP5 M3 -333 -333 333 333 P 189560 27300 FS + + N1_VP6 M3 -333 -333 333 333 P 189560 27300 FE + + N1_VP7 M3 -333 -333 333 333 P 189560 27300 FW + + N1_VP8 -333 -333 333 333 + + + FIXED M3 ( 10 0 ) MASK 3 ( 10 20 ) +MASK 031 M1_M2 + + + ROUTED M1 ( 0 0 ) ( 5 0 ) VIRTUAL ( 2 3 ) +MASK 1 ( 7 7 ) + + + ROUTED M1 ( 0 0 ) ( 5 0 ) VIRTUAL ( 2 3 ) +RECT ( 1 2 3 4 ) ( 7 7 ) + + + FIXED M1 ( 0 0 ) ( 5 0 ) ( 7 7 ) + + + FIXED M1 ( 0 0 ) ( 5 0 ) MASK 3 +RECT ( 1 2 3 4 ) ( 7 7 ) + + + NOSHIELD M2 ( 14100 341440 ) ( 14000 341440 ) M1_M2 + + + ROUTED M2 ( 14000 341440 ) ( 9600 341440 ) ( 9600 282400 ) +nd1VIA12 ( 2400 282400 ) TURNM1_1 NEW M1 TAPER +( 2400 282400 ) ( 240 282400 ) + + + SHIELDNET SN1 + + SHIELDNET VDD + + SUBNET N1_SUB0 ( I2 A ) + ( PIN P1 ) + ( VPIN N1_VP9 ) + ROUTED M1 ( 168280 63300 700 ) ( 168280 64500 ) M1_M2 +( 169400 64500 800 ) M2_M3 + PROPERTY strprop aString STRING + + PROPERTY intprop 1 INTEGER + + PROPERTY realprop 1.1 REAL + + PROPERTY intrangeprop 25 INTEGER + + PROPERTY realrangeprop 25.25 REAL ++ WEIGHT 100 + ESTCAP 1.5e+06 + SOURCE NETLIST + FIXEDBUMP + FREQUENCY 100 + PATTERN STEINER + ORIGINAL N2 + USE SIGNAL ; +- N2 ( I3 A ) ( PIN P2 ) + + FIXED M2 ( 14000 341440 ) ( 9600 341440 ) ( 9600 282400 ) +M1_M2 ( 2400 282400 ) NEW M1 TAPERRULE RULE1 ( 2400 282400 ) +( 240 282400 ) ++ WEIGHT 500 + SOURCE DIST + PATTERN BALANCED ; +- N3 ( I4 A ) ( PIN P3 ) + + COVER M2 ( 14000 341440 ) ( 9600 341440 ) ( 9600 282400 ) +M1_M2 ( 2400 282400 ) VIAGEN12_0 N NEW M1 +( 2400 282400 ) ( 240 282400 ) NEW M2 ( 400 400 ) M1_M2 +N ( 400 400 ) NEW M2 ( 500 500 ) M1_M2 +( 500 500 ) M1_M2 NEW M2 ( 600 600 10 ) M1_M2 +S ( 600 600 30 ) ( 600 800 ) NEW M2 ( 700 700 ) +M1_M2 ( 700 700 ) ( 700 800 ) NEW M1 ( 0 0 ) +M1_M2 FS M2_M3 NEW M3 ( 0 0 ) +M2_M3 W M1_M2 NEW M1 ( 10 10 ) +( 20 10 ) MASK 1 ( 20 20 ) MASK 031 VIA1_2 ++ SOURCE USER + PATTERN TRUNK ; +- N4 ( I5 A ) ( PIN P4 ) + + ROUTED M2 STYLE 1 ( 0 0 ) ( 150 150 ) +( 300 0 ) ( 400 0 ) + + + ROUTED M1 ( 150 150 ) MASK 3 ( 300 300 ) +MASK 032 VIAGEN12 + + + NOSHIELD M1 ( 150 150 30 ) ( 150 300 30 ) + + + ROUTED M1 STYLE 0 ( 0 0 ) ( 150 150 ) +NEW M1 STYLE 1 ( 150 150 ) MASK 2 ( 300 0 ) +( 400 0 ) ++ SOURCE TEST + USE GROUND ; +- N5 ( I6 A ) ( PIN P5 ) + + ROUTED M2 STYLE 3 ( 0 1000 ) ( 150 1150 ) +( 300 1000 ) ( 400 1000 ) + + + ROUTED M1 ( 0 1000 ) ( 150 1150 ) ( 300 1000 ) +( 400 1000 ) ++ SOURCE TIMING ; +END NETS +Parsed 850 number of lines!! +- N6 + NONDEFAULTRULE CBK RULE2 + NONDEFAULTRULE RULE2 + + + ROUTED M1 STYLE 4 ( 1000 0 ) ( 1100 100 ) + + + ROUTED M1 STYLE 4 ( 1200 100 ) ( 1300 0 ) + + + ROUTED M1 STYLE 4 ( 1000 -100 ) ( 1300 -100 ) +; +END NETS +- SCAN ( scancell1 PA10 ) + SYNTHESIZED ( scancell2 PA2 ) + SYNTHESIZED + SOURCE TEST ; +END NETS +- MUSTJOIN_1 ( I7 A ) ; +END NETS +- ARRAYNET[0][10] ; +END NETS +- vectormodule[1]/vectornet[0] ; +END NETS +- vectormodule[1]/scalarnet ; +END NETS + +SCANCHAINS 2 ; +- chain1 + + START I1 B + + STOP I4 B + + COMMONSCANPINS ( IN PA1 ) ( OUT PA2 ) + + FLOATING + scancell3 ( IN PA2 ) + scancell4 ( OUT PA10 ) ( BITS 4 ) + + ORDERED + scancell1 ( IN PA2 ) + scancell2 ( OUT PA10 ) ( BITS 4 ) + + PARTITION clock1 MAXBITS 256 ; +Parsed 900 number of lines!! +- chain2 + + START PIN scanpin + + STOP PIN scanpin2 + + COMMONSCANPINS ( IN PA1 ) ( OUT PA2 ) + + FLOATING + scancell7 ( IN PA2 ) + scancell8 ( OUT PA10 ) ( BITS 4 ) + + ORDERED + scancell5 ( IN PA2 ) + scancell6 ( OUT PA10 ) ( BITS 4 ) + + PARTITION clock1 MAXBITS 256 ; +END SCANCHAINS +- chain3 + + START I5 B + + STOP I6 B + + COMMONSCANPINS ( IN PA1 ) ( OUT PA2 ) + + FLOATING + scancell11 ( IN PA2 ) + scancell12 ( OUT PA10 ) ( BITS 4 ) + + ORDERED + scancell9 ( IN PA2 ) + scancell10 ( OUT PA10 ) ( BITS 4 ) + + PARTITION clock1 MAXBITS 256 ; +END SCANCHAINS + +GROUPS 3 ; +- group1 I3 I2 + + REGION region1 + + PROPERTY strprop aString STRING + + PROPERTY intprop 1 INTEGER + + PROPERTY realprop 1.1 REAL + + PROPERTY intrangeprop 25 INTEGER + + PROPERTY realrangeprop 25.25 REAL ; +- group2 I4 ; +- region2 I7 I8 + + REGION region2 ; +END GROUPS +Parsed 950 number of lines!! + +SLOTS 3 ; +- LAYER M1 + RECT 3 3 6 8 +; +- LAYER M2 + RECT 3 3 6 8 + POLYGON 0 0 0 10 10 10 10 20 20 20 20 0 ; +; +- LAYER M3 + RECT 3 3 6 8 +; +END SLOTS + +FILLS 5 ; +- VIA myvia1 + MASK 002 + OPC + 5000 5000 800 800; +; +- LAYER M1 + MASK 2 + RECT 0 2 1 10 +; +- LAYER M2 + OPC + RECT 0 2 1 10 + POLYGON 0 0 0 10 10 10 10 20 20 20 20 0 ; +; +- LAYER M3 + RECT 0 2 1 10 +; +- VIA M1_M2 + MASK 202 + OPC + 2400 0 10 10; +; +END FILLS +- VIA VIAGEN12_0 + OPC + 100 100 200 100; +; +END FILLS +Parsed 1000 number of lines!! +BEGINEXT "tag" +- CREATOR "Cadence" ; +- OTTER furry + + PROPERTY arrg later + ; +- SEAL cousin to WALRUS ; +ENDEXT +END DESIGN diff --git a/lefdef/src/def/bin/lefdefdiff b/lefdef/src/def/bin/lefdefdiff new file mode 100644 index 00000000..5f1a6866 --- /dev/null +++ b/lefdef/src/def/bin/lefdefdiff @@ -0,0 +1,526 @@ +#!/bin/sh + +set -f + +OS_TYPE=`uname -s` + +# Add path to lefdefdiff so lefdiff and defdiff are found if not already on $PATH +PATH=$PATH:`dirname $0` + +lef=0 +def=0 +outFile=0 +file1=0 +file2=0 +tmpPath="." +quick=0 +ignorePinExtra=0 +ignoreRowName=0 +ignoreViaName=0 +netSegComp=0 + +#---------------- +# shell functions +#---------------- +output_usage_msg() +{ + echo "Usage: lefdefdiff -lef|-def inFilename1 inFilename2 [-o outFilename]" + echo " [-path pathName] [-quick] [-d] [-ignorePinExtra] [-ignoreRowName]" + echo " [-ignoreViaName] [-netSegComp]" + echo " -path pathName redirects the intermediate files create by lefdefdiff" + echo " to the given pathName instead of the current directory" + echo " If \"-quick\" option is used, bdiff will be used to do the diff." + echo " -ignorePinExtra applies for def only. It will ignore the" + echo " .extra in the pin name." + echo " -ignoreRowName applies for def only. It will ignore the row name." + echo " -ignoreViaName applies for def only. It will ignore the via name" + echo " SpecialNet specialWiring & Net retularWiring routingPoints." + echo " -netSegComp applies for def only. If this flag is set, it will compare" + echo " the net by segment instead of single point." + echo " User needs to verify the accuracy of the diff results." +} + +output_def_msg() +{ + echo "ERROR: Options -ignorePinExtra, -ignoreRowName, -ignoreViaName and -netSegComp apply to def files only." + echo " You have run lefdefdiff with lef files." +} + +ld_sort="/bin/sort" +if [ ! -x $ld_sort ] ; then + ld_sort="/usr/bin/sort" +fi +if [ ! -x $ld_sort ] ; then + ld_sort="sort" +fi + +ld_diff="/bin/diff" +if [ ! -x $ld_diff ] ; then + ld_diff="/usr/bin/diff" +fi +if [ ! -x $ld_diff ] ; then + ld_diff="diff" +fi + +# arguments combination can be: +# lefdefdiff -lef|def inFilename1 inFilename2 +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFilename +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFilename -quick +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFilename -quick -d +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFilename -d -quick +# lefdefdiff -lef|def inFilename1 inFilename2 -d -quick +# lefdefdiff -lef|def inFilename1 inFilename2 -quick -d +# lefdefdiff -lef|def inFilename1 inFilename2 -quick +# lefdefdiff -lef|def inFilename1 inFilename2 -d +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFileName -quick -d -path pathName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreRowName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreViaName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -netSetCmp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreRowName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreViaName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreRowName -ignoreViaName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreRowName -netSetComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreViaName -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreRowName -ignoreViaName -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreRowName -ignoreViaName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreRowName -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreRowName -ignoreViaName -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreViaName -netSegComp + +if [ $# = 1 ] ; then + if [ "$1" = "-help" ] || [ "$1" = "-h" ] ; then + output_usage_msg + exit 0 + elif [ "$1" = "-version" ] ; then + if [ "$OS_TYPE" = "Windows_NT" ] ; then + lefdiff.exe $1 + else + lefdiff $1 + fi + exit 0 + fi + output_usage_msg + exit 1 +fi + +if [ $# -lt 3 ] ; then + output_usage_msg + exit 1 +fi + +if [ "$1" = "-def" -o "$1" = "-DEF" ] ; then + def=1 +elif [ "$1" = "-lef" -o "$1" = "-LEF" ] ; then + lef=1 +else + output_usage_msg + exit 1 +fi + +file1=$2 +file2=$3 + +if [ $# -gt 3 ] ; then + argCount=1 + while [ $# -a "$argCount" -lt 4 ] + do + argCount=`expr $argCount + 1` + shift + done + while [ "$#" -gt 0 ] + do + if [ "$1" = "-o" ] ; then + if [ $# -gt 1 ] ; then + outFile=$2 + shift + else + output_usage_msg + exit 1 + fi + elif [ "$1" = "-path" ] ; then + if [ $# -gt 1 ] ; then + if [ "$2" != "-ignorePinExtra" ] && [ "$2" != "-ignoreRowName" ] && + [ "$2" != "-ignoreViaName" ] && [ "$2" != "-d" ] && + [ "$2" != "-quick" ] ; then + tmpPath=$2 + shift + else + output_usage_msg + exit 1 + fi + else + output_usage_msg + exit 1 + fi + elif [ "$1" = "-quick" ] ; then + if [ "$quick" = 1 ] ; then + output_usage_msg + exit 1 + fi + quick=1 + elif [ "$1" = "-ignorePinExtra" ] ; then + if [ "$ignorePinExtra" = 1 ] ; then + output_usage_msg + exit 1 + fi + ignorePinExtra=1 + elif [ "$1" = "-ignoreRowName" ] ; then + if [ "$ignoreRowName" = 1 ] ; then + output_usage_msg + exit 1 + fi + ignoreRowName=1 + elif [ "$1" = "-ignoreViaName" ] ; then + if [ "$ignoreViaName" = 1 ] ; then + output_usage_msg + exit 1 + fi + ignoreViaName=1 + elif [ "$1" = "-netSegComp" ] ; then + if [ "$netSegComp" = 1 ] ; then + output_usage_msg + exit 1 + fi + netSegComp=1 + elif [ "$1" != "-d" ] ; then + output_usage_msg + exit 1 + fi + shift + done +fi + +# ignorePinExtra only apply to -def +if [ $ignorePinExtra = 1 ] && [ $def != 1 ] ; then + output_def_msg + exit 1 +fi + +# ignoreRowName only apply to -def +if [ $ignoreRowName = 1 ] && [ $def != 1 ] ; then + output_def_msg + exit 1 +fi + +# ignoreViaName only apply to -def +if [ $ignoreViaName = 1 ] && [ $def != 1 ] ; then + output_def_msg + exit 1 +fi + +# netSegComp only apply to -def +if [ $netSegComp = 1 ] && [ $def != 1 ] ; then + output_def_msg + exit 1 +fi + +# split the following from unix & window_NT +if [ "$OS_TYPE" = "Windows_NT" ] ; then + # it's a lef file + if [ "$lef" = 1 ] ; then + lefdiff.exe $file1 $file2 lefOut1.$$ lefOut2.$$ + status=$? + if [ $status != 0 ] ; then + echo "Error in reading the input files, lefdefdiff stops execution!" + if [ -f lefOut1.$$ ] ; then # file already created, remove it + rm lefOut1.$$ + fi + if [ -f lefOut2.$$ ] ; then # file already created, remove it + rm lefOut2.$$ + fi + exit $status + fi + if [ -f lefOut1S.$$ ] ; then # if sort file for file 1 in tmp, remove it + rm lefOut1S.$$ + fi + if [ -f lefOut2S.$$ ] ; then # if sort file for file 2 in tmp, remove it + rm lefOut2S.$$ + fi + if [ -f lefOut1.$$ ] ; then # if both output files are there, it means + if [ -f lefOut2.$$ ] ; then # the parser parsed successfully + $ld_sort lefOut1.$$ > lefOut1S.$$ # sort the output file + $ld_sort lefOut2.$$ > lefOut2S.$$ + if [ $outFile != 0 ] ; then # user has requested to + # save output in a file + if [ -f $outFile ] ; then # the file exist, remove it + rm $outFile + fi + echo "< $file1" > $outFile + echo "> $file2" >> $outFile + # -e #1 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'c' ... and replace it with + # "Changed:" + # -e #2 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'd' ... and replace it with + # "Deleted:" + # -e #3 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'a' ... and replace it with + # "Added:" + diff lefOut1S.$$ lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + else + echo "< $file1" + echo "> $file2" + # no output file, output to standard out + diff lefOut1S.$$ lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + fi + rm lefOut1.$$ lefOut1S.$$ lefOut2.$$ lefOut2S.$$ + fi # remove all the temp files from + fi + elif [ "$def" = 1 ] ; then # it's a def file + defdiff.exe $file1 $file2 defOut1.$$ defOut2.$$ $ignorePinExtra $ignoreRowName $ignoreViaName $netSegComp + status=$? + if [ $status != 0 ] ; then + echo "Error in reading the input files, lefdefdiff stops execution!" + if [ -f defOut1.$$ ] ; then # file already created, remove it + rm defOut1.$$ + fi + if [ -f defOut2.$$ ] ; then # file already created, remove it + rm defOut2.$$ + fi + exit $status + fi + if [ -f defOut1S.$$ ] ; then # if sort file for file 1 in tmp, remove it + rm defOut1S.$$ + fi + if [ -f defOut2S.$$ ] ; then # if sort file for file 2 in tmp, remove it + rm defOut2S.$$ + fi + if [ -f defOut1.$$ ] ; then # if both output files are there, it means + if [ -f defOut2.$$ ] ; then # the parser parsed successfully + $ld_sort defOut1.$$ > defOut1S.$$ # sort the output file + $ld_sort defOut2.$$ > defOut2S.$$ + if [ $outFile != 0 ] ; then # user has requested to + # save output in a file + if [ -f $outFile ] ; then # the file exist, remove it + rm $outFile + fi + echo "< $file1" > $outFile + echo "> $file2" >> $outFile + # -e #1 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'c' ... and replace it + # with "Changed:" + # -e #2 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'd' ... and replace it + # with "Deleted:" + # -e #3 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'a' ... and replace it + # with "Added:" + diff defOut1S.$$ defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + else + echo "< $file1" + echo "> $file2" + # no output file, output to standard out + diff defOut1S.$$ defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + fi + rm defOut1.$$ defOut1S.$$ defOut2.$$ defOut2S.$$ + fi # remove all the temp files from /tmp + fi + else + # neither -lef nor -def + output_usage_msg + fi +else + # it's a lef file + if [ "$lef" = 1 ] ; then + # 11/23/99 - Wanda da Rosa, PCR 284352, make the temporary files unique + # per process + lefdiff $file1 $file2 $tmpPath/lefOut1.$$ $tmpPath/lefOut2.$$ + # 11/22/99 - Wanda da Rosa, PCR 281498, check the return status + status=$? + if [ $status != 0 ] ; then + echo "Error in reading the input files, lefdefdiff stops execution!" + if [ -f $tmpPath/lefOut1.$$ ] ; then # file already created, remove it + rm $tmpPath/lefOut1.$$ + fi + if [ -f $tmpPath/lefOut2.$$ ] ; then # file already created, remove it + rm $tmpPath/lefOut2.$$ + fi + exit $status + fi + if [ -f $tmpPath/lefOut1S.$$ ] ; then # if sort file in tmp, remove it + rm $tmpPath/lefOut1S.$$ + fi + if [ -f $tmpPath/lefOut2S.$$ ] ; then # if sort file in tmp, remove it + rm $tmpPath/lefOut2S.$$ + fi + if [ -f $tmpPath/lefOut1.$$ ] ; then # if both output files are there, + if [ -f $tmpPath/lefOut2.$$ ] ; then # the parser parsed successfully + $ld_sort $tmpPath/lefOut1.$$ > $tmpPath/lefOut1S.$$ # sort the output file + $ld_sort $tmpPath/lefOut2.$$ > $tmpPath/lefOut2S.$$ + if [ $outFile != 0 ] ; then # user has requested to + # save output in a file + if [ -f $outFile ] ; then # the file exist, remove it + rm $outFile + fi + echo "< $file1" > $outFile + echo "> $file2" >> $outFile + # -e #1 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'c' ... and replace it with + # "Changed:" + # -e #2 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'd' ... and replace it with + # "Deleted:" + # -e #3 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'a' ... and replace it with + # "Added:" + if [ $quick = 1 ] && [ -x bdiff ] ; then + bdiff $tmpPath/lefOut1S.$$ $tmpPath/lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + else + $ld_diff $tmpPath/lefOut1S.$$ $tmpPath/lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + fi + else + echo "< $file1" + echo "> $file2" + # no output file, output to standard out + if [ $quick = 1 ] && [ -x bdiff ] ; then + bdiff $tmpPath/lefOut1S.$$ $tmpPath/lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + else + $ld_diff $tmpPath/lefOut1S.$$ $tmpPath/lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + fi + fi + rm $tmpPath/lefOut1.$$ $tmpPath/lefOut1S.$$ $tmpPath/lefOut2.$$ $tmpPath/lefOut2S.$$ + fi # remove all the temp files from /tmp + fi + elif [ "$def" = 1 ] ; then # it's a def file + defdiff $file1 $file2 $tmpPath/defOut1.$$ $tmpPath/defOut2.$$ $ignorePinExtra $ignoreRowName $ignoreViaName $netSegComp + # 11/22/99 - Wanda da Rosa, PCR 281498, check the return status + status=$? + if [ $status != 0 ] ; then + echo "Error in reading the input files, lefdefdiff stops execution!" + if [ -f $tmpPath/defOut1.$$ ] ; then # file already created, remove it + rm $tmpPath/defOut1.$$ + fi + if [ -f $tmpPath/defOut2.$$ ] ; then # file already created, remove it + rm $tmpPath/defOut2.$$ + fi + exit $status + fi + if [ -f $tmpPath/defOut1S.$$ ] ; then # if sort file in tmp, remove it + rm $tmpPath/defOut1S.$$ + fi + if [ -f $tmpPath/defOut2S.$$ ] ; then # if sort file in tmp, remove it + rm $tmpPath/defOut2S.$$ + fi + if [ -f $tmpPath/defOut1.$$ ] ; then # if both output files are there, + if [ -f $tmpPath/defOut2.$$ ] ; then # the parser parsed successfully + $ld_sort $tmpPath/defOut1.$$ > $tmpPath/defOut1S.$$ # sort the output file + $ld_sort $tmpPath/defOut2.$$ > $tmpPath/defOut2S.$$ + if [ $outFile != 0 ] ; then # user has requested to + # save output in a file + if [ -f $outFile ] ; then # the file exist, remove it + rm $outFile + fi + echo "< $file1" > $outFile + echo "> $file2" >> $outFile + # -e #1 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'c' ... and replace it + # with "Changed:" + # -e #2 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'd' ... and replace it + # with "Deleted:" + # -e #3 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'a' ... and replace it + # with "Added:" + if [ $quick = 1 ] && [ -x bdiff ] ; then + bdiff $tmpPath/defOut1S.$$ $tmpPath/defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + else + $ld_diff $tmpPath/defOut1S.$$ $tmpPath/defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + fi + else + echo "< $file1" + echo "> $file2" + # no output file, output to standard out + if [ $quick = 1 ] && [ -x bdiff ] ; then + bdiff $tmpPath/defOut1S.$$ $tmpPath/defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + else + $ld_diff $tmpPath/defOut1S.$$ $tmpPath/defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + fi + fi + rm $tmpPath/defOut1.$$ $tmpPath/defOut1S.$$ $tmpPath/defOut2.$$ $tmpPath/defOut2S.$$ + fi # remove all the temp files from /tmp + fi + else + # neither -lef nor -def + output_usage_msg + fi +fi diff --git a/lefdef/src/def/cdef/Makefile b/lefdef/src/def/cdef/Makefile new file mode 100644 index 00000000..034d2386 --- /dev/null +++ b/lefdef/src/def/cdef/Makefile @@ -0,0 +1,70 @@ +DEF_TABNAME = def +DEF_BISON_SRCS = def.y + +FAKE_ALL: all + +LIBTARGET = libcdef.a + +PUBLIC_HDRS = \ + defiAssertion.h \ + defiBlockage.h \ + defiComponent.h \ + defiDebug.h \ + defiDefs.h \ + defiFPC.h \ + defiFill.h \ + defiGroup.h \ + defiIOTiming.h \ + defiKRDefs.h \ + defiMisc.h \ + defiNet.h \ + defiNonDefault.h \ + defiPartition.h \ + defiPath.h \ + defiPinCap.h \ + defiPinProp.h \ + defiProp.h \ + defiPropType.h \ + defiRegion.h \ + defiRowTrack.h \ + defiScanchain.h \ + defiSite.h \ + defiSlot.h \ + defiTimingDisable.h \ + defiTypedefs.h \ + defiUser.h \ + defiVia.h \ + defrReader.h \ + defwWriter.h \ + defwWriterCalls.h + +LIBSRCS = \ + xdefiAssertion.cpp \ + xdefiBlockage.cpp \ + xdefiComponent.cpp \ + xdefiDebug.cpp \ + xdefiFPC.cpp \ + xdefiFill.cpp \ + xdefiGroup.cpp \ + xdefiIOTiming.cpp \ + xdefiMisc.cpp \ + xdefiNet.cpp \ + xdefiNonDefault.cpp \ + xdefiPartition.cpp \ + xdefiPath.cpp \ + xdefiPinCap.cpp \ + xdefiPinProp.cpp \ + xdefiProp.cpp \ + xdefiPropType.cpp \ + xdefiRegion.cpp \ + xdefiRowTrack.cpp \ + xdefiScanchain.cpp \ + xdefiSite.cpp \ + xdefiSlot.cpp \ + xdefiTimingDisable.cpp \ + xdefiVia.cpp \ + xdefrReader.cpp \ + xdefwWriter.cpp \ + xdefwWriterCalls.cpp + +include ../template.mk diff --git a/lefdef/src/def/cdef/defMsgTable.h b/lefdef/src/def/cdef/defMsgTable.h new file mode 100644 index 00000000..34eb5341 --- /dev/null +++ b/lefdef/src/def/cdef/defMsgTable.h @@ -0,0 +1,154 @@ + +/* + * emsMkError: +*/ + +#include +#include "ems.h" + +#ifdef TSIZE +#undef TSIZE +#define TSIZE 2048 +#endif + +emsError_t DEFEmsMsgTable[] = +{ + {5000 , EMS_NONE, "The 'defrRead' function has been called before the 'defrInit' function.\nThe 'defrInit' function should be called prior to the 'defrRead' function.", -1, 0}, + {5001 , EMS_NONE, "DEF statement found in the def file with no callback set.", -1, 0}, + {6000 , EMS_NONE, "The syntax for an ALIAS statement is \"&ALIAS aliasName = aliasDefinition &ENDALIAS\". '=' is missing after the aliasName.", -1, 0}, + {6001 , EMS_NONE, "End of file is reached while parsing in the middle of an ALIAS statement.\nReview you def file and add '&ENDALIAS' in the ALIAS statement.", -1, 0}, + {6002 , EMS_NONE, "The def file is incomplete.", -1, 0}, + {6003 , EMS_NONE, "The BEGINEXT tag is missing in the DEF file. Include the tag and then try again.", -1, 0}, + {6004 , EMS_NONE, "The BEGINEXT tag is empty. Specify a value for the tag and try again.", -1, 0}, + {6005 , EMS_NONE, "The '\"' is missing within the tag. Specify the '\"' in the tag and then try again.", -1, 0}, + {6006 , EMS_NONE, "The ending '\"' is missing in the tag. Specify the ending '\"' in the tag and then try again.", -1, 0}, + {6007 , EMS_NONE, "The ENDEXT statement is missing in the DEF file. Include the statement and then try again.", -1, 0}, + {6008 , EMS_NONE, "Invalid characters found in \'%s\'.\nThese characters might be using the character types other than English.\nCreate characters by specifying valid characters types.", -1, 0}, + {6010 , EMS_NONE, "An error has been reported in callback.", -1, 0}, + {6011 , EMS_NONE, "Too many syntax errors have been reported.", -1, 0}, + {6030 , EMS_NONE, "Invalid direction specified with FPC name. The valid direction is either 'H' or 'V'. Specify a valid vale and then try again.", -1, 0}, + {6060 , EMS_NONE, "Invalid value specified for IOTIMING rise/fall. The valid value for rise is 'R' and for fall is 'F'. Specify a valid value and then try again.", -1, 0}, + {6080 , EMS_NONE, "An internal error has occurred. The index number for the SUBNET wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information.", -1, 0}, + {6081 , EMS_NONE, "An internal error has occurred. The index number for the NET PATH wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information.", -1, 0}, + {6082 , EMS_NONE, "An internal error has occurred. The index number for the NET SHIELDPATH wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information.", -1, 0}, + {6083 , EMS_NONE, "The index number %d specified for the NET INSTANCE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6084 , EMS_NONE, "The index number %d specified for the NET PIN is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6085 , EMS_NONE, "The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6086 , EMS_NONE, "The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6090 , EMS_NONE, "The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6091 , EMS_NONE, "The index number %d specified for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6100 , EMS_NONE, "The value spefified for PARTITION SETUP is invalid. The valid value for SETUP is 'R' or 'F'. Specify a valid value for SETUP and then try again.", -1, 0}, + {6101 , EMS_NONE, "The value spefified for PARTITION HOLD is invalid. The valid value for HOLD is 'R' or 'F'. Specify a valid value for HOLD and then try again.", -1, 0}, + {6120 , EMS_NONE, "The index number %d specified for the PIN PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6130 , EMS_NONE, "The index number %d specified for the REGION PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6131 , EMS_NONE, "The index number %d specified for the REGION RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6140 , EMS_NONE, "The index number %d specified for the VIA LAYER RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6150 , EMS_NONE, "The START statement in the SCANCHAINS has defined more than one time in the SCANCHAINS statement.\nUpdate the DEF file to only one START statement and then try again.", -1, 0}, + {6151 , EMS_NONE, "The STOP statment in the SCANCHAINS has defined more than one time in the SCANCHAINS statement.\nUpdate the DEF file to only one STOP statement and then try again.", -1, 0}, + {6160 , EMS_NONE, "The index number %d specified for the SLOT RECTANGLE is invalid.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", -1, 0}, + {6170 , EMS_NONE, "The TimingDisable type is invalid. The valid types are FROMPIN, & THRUPIN. Specify the valid type and then try again.", -1, 0}, + {6180 , EMS_NONE, "The index number %d specified for the VIA POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again", -1, 0}, + {6200 , EMS_NONE, "The ASSERTION statement is invalid because it has an invalid operand rule.\nValid operand rule is either NET or PATH. Specify a valid operand and then try again.", -1, 0}, + {6201 , EMS_NONE, "Unable to process the DEF file. Both WIREDLOGIC and DELAY statements are defined in constraint/assertion.\nUpdate the DEF file to define either a WIREDLOGIC or DELAY statement only.", -1, 0}, + {6202 , EMS_NONE, "Unable to process the DEF file. Both SUM and DIFF statements are defined in constraint/assertion.\nUpdate the DEF file to define either a SUM or DIFF statement only.", -1, 0}, + {6501 , EMS_NONE, "An error has been found while processing the DEF file '%s'\nUnit %d is a 5.6 or later syntax. Define the DEF file as 5.6 and then try again.", -1, 0}, + {6502 , EMS_NONE, "The value %d defined for DEF UNITS DISTANCE MICRON is invalid\n. The valid values are 100, 200, 1000, 2000, 10000, or 20000. Specify a valid value and then try again.", -1, 0}, + {6503 , EMS_NONE, "The execution has been stopped because the DEF parser 5.7 does not support DEF file with version %s.\nUpdate your DEF file to version 5.7 or earlier.", -1, 0}, + {6504 , EMS_NONE, "Def parser version 5.7 and later does not support NAMESCASESENSITIVE OFF.\nEither remove this optional construct or set it to ON.", -1, 0}, + {6505 , EMS_NONE, "The NONDEFAULTRULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6506 , EMS_NONE, "The NETEXPR statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6507 , EMS_NONE, "The SUPPLYSENSITIVITY statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6508 , EMS_NONE, "The GROUNDSENSITIVITY statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6509 , EMS_NONE, "The POLYGON statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6510 , EMS_NONE, "The ANTENNAPINPARTIALMETALAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6511 , EMS_NONE, "The ANTENNAPINPARTIALMETALSIDEAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6512 , EMS_NONE, "The ANTENNAPINGATEAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6513 , EMS_NONE, "The ANTENNAPINDIFFAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6514 , EMS_NONE, "The ANTENNAPINMAXAREACAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6515 , EMS_NONE, "The ANTENNAPINMAXSIDEAREACAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6516 , EMS_NONE, "The ANTENNAPINPARTIALCUTAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6517 , EMS_NONE, "The ANTENNAPINMAXCUTCAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6518 , EMS_NONE, "The ANTENNAMODEL statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6519 , EMS_NONE, "The SPACING statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6520 , EMS_NONE, "The DESIGNRULEWIDTH statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6523 , EMS_NONE, "Invalid ROW statement defined in the DEF file. The DO statement which is required in the ROW statement is not defined.\nUpdate your DEF file with a DO statement.", -1, 0}, + {6524 , EMS_NONE, "Invalid syntax specified. The valid syntax is either \"DO 1 BY num or DO num BY 1\". Specify the valid syntax and try again.", -1, 0}, + {6525 , EMS_NONE, "The DO number %g in TRACK is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again.", -1, 0}, + {6526 , EMS_NONE, "The STEP number %g in TRACK is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again.", -1, 0}, + {6527 , EMS_NONE, "The DO number %g in GCELLGRID is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again.", -1, 0}, + {6528 , EMS_NONE, "The STEP number %g in GCELLGRID is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again.", -1, 0}, + {6529 , EMS_NONE, "The HALO statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6530 , EMS_NONE, "The FIXEDBUMP statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6531 , EMS_NONE, "The layerName which is required in path is missing. Include the layerName in the path and then try again.", -1, 0}, + {6532 , EMS_NONE, "The VIA DO statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6533 , EMS_NONE, "Either the numX or numY in the VIA DO statement has invalid value. The value specified is 0.\nUpdate your DEF file with the correct value and then try again.", -1, 0}, + {6534 , EMS_NONE, "The STYLE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6535 , EMS_NONE, "The POLYGON statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6536 , EMS_NONE, "The RECT statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6537 , EMS_NONE, "The value %s for statement VOLTAGE is invalid. The value can only be integer.\nSpecify a valid value in units of millivolts", -1, 0}, + {6538 , EMS_NONE, "The PARTITION statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6539 , EMS_NONE, "Invalid BLOCKAGE statement defined in the DEF file. The BLOCKAGE statment has both the LAYER and the PLACEMENT statements defined.\nUpdate your DEF file to have either BLOCKAGE or PLACEMENT statement only.", -1, 0}, + {6540 , EMS_NONE, "The SPACING statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6541 , EMS_NONE, "The SPACING statement is defined in the LAYER statement,\nbut there is already either a SPACING statement or DESIGNRULEWIDTH statement has defined in the LAYER statement.\nUpdate your DEF file to have either SPACING statement or a DESIGNRULEWIDTH statement.", -1, 0}, + {6542 , EMS_NONE, "The defined BLOCKAGES COMPONENT statement has either COMPONENT, SLOTS, FILLS, PUSHDOWN or EXCEPTPGNET defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES COMPONENT statement per layer.", -1, 0}, + {6543 , EMS_NONE, "The defined BLOCKAGES PLACEMENT statement has either COMPONENT, PUSHDOWN, SOFT or PARTIAL defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES PLACEMENT statement.", -1, 0}, + {6544 , EMS_NONE, "A POLYGON statement is defined in the BLOCKAGE statement,\nbut it is not defined in the BLOCKAGE LAYER statement.\nUpdate your DEF file to either remove the POLYGON statement from the BLOCKAGE statement or\ndefine the POLYGON statement in a BLOCKAGE LAYER statement.", -1, 0}, + {6545 , EMS_NONE, "The NONDEFAULTRULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6546 , EMS_NONE, "The STYLES statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6547 , EMS_NONE, "The PLACEMENT SOFT is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6548 , EMS_NONE, "The PARTIAL is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6549 , EMS_NONE, "The EXCEPTPGNET is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6550 , EMS_NONE, "The HALO SOFT is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6551 , EMS_NONE, "The ROUTEHALO is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6552 , EMS_NONE, "The FILLWIREOPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6553 , EMS_NONE, "The LAYER OPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6554 , EMS_NONE, "The VIA OPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6555 , EMS_NONE, "The PORT in PINS is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6556 , EMS_NONE, "The PIN VIA statement is available in version 5.7 and later.\nHowever, your DEF file is defined with version %g.", -1, 0}, + {6557 , EMS_NONE, "The VIARULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g,", -1, 0}, + {6558 , EMS_NONE, "The FREQUENCY statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g", -1, 0}, + {6559 , EMS_NONE, "The ROWCOL statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement.", -1, 0}, + {6560 , EMS_NONE, "The ORIGIN statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement.", -1, 0}, + {6561 , EMS_NONE, " The OFFSET statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement.", -1, 0}, + {6562 , EMS_NONE, "The PATTERN statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement.", -1, 0}, + {6563 , EMS_NONE, "The TYPE statement already exists. It has been defined in the REGION statement.", -1, 0}, + {6564 , EMS_NONE, "POLYGON statement in FILLS LAYER is a version 5.6 and later syntax.\nYour def file is defined with version %g,", -1, 0}, + {7000 , EMS_NONE, "The specified string has exceeded 4096 characters. The extra characters will be truncated. Specify a string less than or equal to 4096 characters.", -1, 0}, + {7010 , EMS_NONE, "The PropName %s is not defined for %s.", -1, 0}, + {7011 , EMS_NONE, "The NAMESCASESENSITIVE statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7012 , EMS_NONE, "The DEF file is invalid because the VERSION statement is not defined in it.\nThe VERSION statement is required in DEF file. Define this statement by refering to the LEF/DEF Language Reference manual.", -1, 0}, + {7013 , EMS_NONE, "The DEF file is invalid if NAMESCASESENSITIVE is undefined.\nNAMESCASESENSITIVE is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the NAMESCASESENSITIVE statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual.", -1, 0}, + {7014 , EMS_NONE, "The DEF file is invalid if BUSBITCHARS is undefined.\nBUSBITCHARS is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the BUSBITCHARS statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual.", -1, 0}, + {7015 , EMS_NONE, "The DEF file is invalid if DIVIDERCHAR is undefined.\nDIVIDERCHAR is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the DIVIDERCHAR statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual.", -1, 0}, + {7016 , EMS_NONE, "DESIGN is a mandatory statement in the DEF file. Ensure that it exists in the file.", -1, 0}, + {7017 , EMS_NONE, "The DEFAULTCAP statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7018 , EMS_NONE, "The DO statement in the ROW statement with the name %s has invalid syntax.\nThe valid syntax is \"DO numX BY 1 STEP spaceX 0 | DO 1 BY numY STEP 0 spaceY\".\nSpecify the valid syntax and try again.", -1, 0}, + {7019 , EMS_NONE, "The PATTERNNAME statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7020 , EMS_NONE, "The REGION pt pt statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7021 , EMS_NONE, "The FOREIGN statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7022 , EMS_NONE, "In the COMPONENT UNPLACED statement, the point and orient are invalid in version 5.4 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7023 , EMS_NONE, "The SPECIAL NET statement, with type %s, does not have any net statement defined.\nThe DEF parser will ignore this statement.", -1, 0}, + {7024 , EMS_NONE, "The ESTCAP statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7025 , EMS_NONE, "The SPECIAL NET SHIELD statement, does not have any shield net statement defined.\nThe DEF parser will ignore this statement.", -1, 0}, + {7026 , EMS_NONE, "The WIDTH statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7027 , EMS_NONE, "The GROUP REGION pt pt statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7028 , EMS_NONE, "The GROUP SOFT MAXX statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7029 , EMS_NONE, "The GROUP SOFT MAXY statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7030 , EMS_NONE, "The GROUP SOFT MAXHALFPERIMETER statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7031 , EMS_NONE, "The ASSERTIONS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7032 , EMS_NONE, "The CONSTRAINTS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7035 , EMS_NONE, "The IOTIMINGS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement.", -1, 0}, + {7500 , EMS_NONE, "Unable to open the file defRWarning.log in %s.\nWarning messages will not be written out in the log file.\nCheck if you have write permission on the directory.", -1, 0}, + {8000 , EMS_NONE, "The data still exists after the END DESIGN statement. The DEF parser will ignore this data.", -1, 0}, + {8500 , EMS_NONE, "Unable to open the file defRWarning.log in %s.\nInfo messages will not be written out in the log file.\nCheck if you have write permission on the directory.", -1, 0}, + {9000 , EMS_NONE, "The DEF writer has detected that the function defwInitCbk has already been called and you are trying to call defwInit.\nOnly defwInitCbk or defwInit can be called but not both.\nUpdate your program and then try again.", -1, 0}, + {9001 , EMS_NONE, "The DEF writer has detected that the function defwInit has already been called and you are trying to call defwInitCbk.\nOnly defwInitCbk or defwInit can be called but not both.\nUpdate your program and then try again.", -1, 0}, + {9010 , EMS_NONE, "The function defwWrite is called before the function defwInitCbk.\nYou need to call defwInitCbk before calling any other functions.\nUpdate your program and then try again.", -1, 0}, + {9011 , EMS_NONE, "You program has called the function defwInit to initialize the writer.\nIf you want to use the callback option you need to use the function defwInitCbk.", -1, 0}, + {9012 , EMS_NONE, "You are calling the function defwPrintUnusedCallbacks but you did call the function defwSetRegisterUnusedCallbacks which is required before you can call defwPrintUnusedCallbacks.", -1, 0}, + {-1 , EMS_NONE, "", -1, 0} +}; + +/* + * End machine generated table. +*/ diff --git a/lefdef/src/def/cdef/defiAlias.h b/lefdef/src/def/cdef/defiAlias.h new file mode 100644 index 00000000..f6a9bf4d --- /dev/null +++ b/lefdef/src/def/cdef/defiAlias.h @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: arakhman $ */ +/* $Revision: #4 $ */ +/* $Date: 2014/04/30 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIALIAS_H +#define CDEFIALIAS_H + +#include +#include "defiTypedefs.h" + +#endif diff --git a/lefdef/src/def/cdef/defiAssertion.h b/lefdef/src/def/cdef/defiAssertion.h new file mode 100644 index 00000000..bf4dca2e --- /dev/null +++ b/lefdef/src/def/cdef/defiAssertion.h @@ -0,0 +1,82 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIASSERTION_H +#define CDEFIASSERTION_H + +#include +#include "defiTypedefs.h" + +/* Struct holds the data for one assertion/constraint. */ +/* An assertion or constraint is either a net/path rule or a */ +/* wired logic rule. */ +/* */ +/* A net/path rule is an item or list of items plus specifications. */ +/* The specifications are: rise/fall min/max. */ +/* The items are a list of (one or more) net names or paths or a */ +/* combination of both. */ +/* */ +/* A wired logic rule is a netname and a distance. */ +/* */ +/* We will NOT allow the mixing of wired logic rules and net/path delays */ +/* in the same assertion/constraint. */ +/* */ +/* We will allow the rule to be a sum of sums (which will be interpreted */ +/* as just one list). */ +/* */ + +EXTERN int defiAssertion_isAssertion (const defiAssertion* obj); +EXTERN int defiAssertion_isConstraint (const defiAssertion* obj); +EXTERN int defiAssertion_isWiredlogic (const defiAssertion* obj); +EXTERN int defiAssertion_isDelay (const defiAssertion* obj); +EXTERN int defiAssertion_isSum (const defiAssertion* obj); +EXTERN int defiAssertion_isDiff (const defiAssertion* obj); +EXTERN int defiAssertion_hasRiseMin (const defiAssertion* obj); +EXTERN int defiAssertion_hasRiseMax (const defiAssertion* obj); +EXTERN int defiAssertion_hasFallMin (const defiAssertion* obj); +EXTERN int defiAssertion_hasFallMax (const defiAssertion* obj); +EXTERN double defiAssertion_riseMin (const defiAssertion* obj); +EXTERN double defiAssertion_riseMax (const defiAssertion* obj); +EXTERN double defiAssertion_fallMin (const defiAssertion* obj); +EXTERN double defiAssertion_fallMax (const defiAssertion* obj); +EXTERN const char* defiAssertion_netName (const defiAssertion* obj); +EXTERN double defiAssertion_distance (const defiAssertion* obj); +EXTERN int defiAssertion_numItems (const defiAssertion* obj); +EXTERN int defiAssertion_isPath (const defiAssertion* obj, int index); +EXTERN int defiAssertion_isNet (const defiAssertion* obj, int index); +EXTERN void defiAssertion_path (const defiAssertion* obj, int index, char** fromInst, char** fromPin, char** toInst, char** toPin); +EXTERN void defiAssertion_net (const defiAssertion* obj, int index, char** netName); + +EXTERN void defiAssertion_print (const defiAssertion* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiBlockage.h b/lefdef/src/def/cdef/defiBlockage.h new file mode 100644 index 00000000..7c194089 --- /dev/null +++ b/lefdef/src/def/cdef/defiBlockage.h @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIBLOCKAGE_H +#define CDEFIBLOCKAGE_H + +#include +#include "defiTypedefs.h" + +EXTERN int defiBlockage_hasLayer (const defiBlockage* obj); +EXTERN int defiBlockage_hasPlacement (const defiBlockage* obj); +EXTERN int defiBlockage_hasComponent (const defiBlockage* obj); +EXTERN int defiBlockage_hasSlots (const defiBlockage* obj); +EXTERN int defiBlockage_hasFills (const defiBlockage* obj); +EXTERN int defiBlockage_hasPushdown (const defiBlockage* obj); +EXTERN int defiBlockage_hasExceptpgnet (const defiBlockage* obj); +EXTERN int defiBlockage_hasSoft (const defiBlockage* obj); +EXTERN int defiBlockage_hasPartial (const defiBlockage* obj); +EXTERN int defiBlockage_hasSpacing (const defiBlockage* obj); +EXTERN int defiBlockage_hasDesignRuleWidth (const defiBlockage* obj); +EXTERN int defiBlockage_hasMask (const defiBlockage* obj); +EXTERN int defiBlockage_mask (const defiBlockage* obj); +EXTERN int defiBlockage_minSpacing (const defiBlockage* obj); +EXTERN int defiBlockage_designRuleWidth (const defiBlockage* obj); +EXTERN double defiBlockage_placementMaxDensity (const defiBlockage* obj); +EXTERN const char* defiBlockage_layerName (const defiBlockage* obj); +EXTERN const char* defiBlockage_layerComponentName (const defiBlockage* obj); +EXTERN const char* defiBlockage_placementComponentName (const defiBlockage* obj); + +EXTERN int defiBlockage_numRectangles (const defiBlockage* obj); +EXTERN int defiBlockage_xl (const defiBlockage* obj, int index); +EXTERN int defiBlockage_yl (const defiBlockage* obj, int index); +EXTERN int defiBlockage_xh (const defiBlockage* obj, int index); +EXTERN int defiBlockage_yh (const defiBlockage* obj, int index); + +EXTERN int defiBlockage_numPolygons (const defiBlockage* obj); +EXTERN struct defiPoints defiBlockage_getPolygon (const defiBlockage* obj, int index); + +EXTERN void defiBlockage_print (const defiBlockage* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiComponent.h b/lefdef/src/def/cdef/defiComponent.h new file mode 100644 index 00000000..d3f0c2fd --- /dev/null +++ b/lefdef/src/def/cdef/defiComponent.h @@ -0,0 +1,116 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFICOMPONENT_H +#define CDEFICOMPONENT_H + +#include +#include "defiTypedefs.h" + +/* Placement status for the component. */ +/* Default is 0 */ +#define DEFI_COMPONENT_UNPLACED 1 +#define DEFI_COMPONENT_PLACED 2 +#define DEFI_COMPONENT_FIXED 3 +#define DEFI_COMPONENT_COVER 4 + +/* Struct holds the data for componentMaskShiftLayers. */ + +EXTERN int defiComponentMaskShiftLayer_numMaskShiftLayers (const defiComponentMaskShiftLayer* obj); +EXTERN const char* defiComponentMaskShiftLayer_maskShiftLayer (const defiComponentMaskShiftLayer* obj, int index); + +/* Struct holds the data for one component. */ + + /* 5.7 */ + + /* For OA to modify the Id & Name */ + +EXTERN const char* defiComponent_id (const defiComponent* obj); +EXTERN const char* defiComponent_name (const defiComponent* obj); +EXTERN int defiComponent_placementStatus (const defiComponent* obj); +EXTERN int defiComponent_isUnplaced (const defiComponent* obj); +EXTERN int defiComponent_isPlaced (const defiComponent* obj); +EXTERN int defiComponent_isFixed (const defiComponent* obj); +EXTERN int defiComponent_isCover (const defiComponent* obj); +EXTERN int defiComponent_placementX (const defiComponent* obj); +EXTERN int defiComponent_placementY (const defiComponent* obj); +EXTERN int defiComponent_placementOrient (const defiComponent* obj); +EXTERN const char* defiComponent_placementOrientStr (const defiComponent* obj); +EXTERN int defiComponent_hasRegionName (const defiComponent* obj); +EXTERN int defiComponent_hasRegionBounds (const defiComponent* obj); +EXTERN int defiComponent_hasEEQ (const defiComponent* obj); +EXTERN int defiComponent_hasGenerate (const defiComponent* obj); +EXTERN int defiComponent_hasSource (const defiComponent* obj); +EXTERN int defiComponent_hasWeight (const defiComponent* obj); +EXTERN int defiComponent_weight (const defiComponent* obj); +EXTERN int defiComponent_maskShiftSize (const defiComponent* obj); +EXTERN int defiComponent_maskShift (const defiComponent* obj, int index); +EXTERN int defiComponent_hasNets (const defiComponent* obj); +EXTERN int defiComponent_numNets (const defiComponent* obj); +EXTERN const char* defiComponent_net (const defiComponent* obj, int index); +EXTERN const char* defiComponent_regionName (const defiComponent* obj); +EXTERN const char* defiComponent_source (const defiComponent* obj); +EXTERN const char* defiComponent_EEQ (const defiComponent* obj); +EXTERN const char* defiComponent_generateName (const defiComponent* obj); +EXTERN const char* defiComponent_macroName (const defiComponent* obj); +EXTERN int defiComponent_hasHalo (const defiComponent* obj); +EXTERN int defiComponent_hasHaloSoft (const defiComponent* obj); +EXTERN int defiComponent_hasRouteHalo (const defiComponent* obj); +EXTERN int defiComponent_haloDist (const defiComponent* obj); +EXTERN const char* defiComponent_minLayer (const defiComponent* obj); +EXTERN const char* defiComponent_maxLayer (const defiComponent* obj); + + /* Returns arrays for the ll and ur of the rectangles in the region. */ + /* The number of items in the arrays is given in size. */ +EXTERN void defiComponent_regionBounds (const defiComponent* obj, int* size, int** xl, int** yl, int** xh, int** yh); + +EXTERN int defiComponent_hasForeignName (const defiComponent* obj); +EXTERN const char* defiComponent_foreignName (const defiComponent* obj); +EXTERN int defiComponent_foreignX (const defiComponent* obj); +EXTERN int defiComponent_foreignY (const defiComponent* obj); +EXTERN const char* defiComponent_foreignOri (const defiComponent* obj); +EXTERN int defiComponent_foreignOrient (const defiComponent* obj); +EXTERN int defiComponent_hasFori (const defiComponent* obj); + +EXTERN int defiComponent_numProps (const defiComponent* obj); +EXTERN char* defiComponent_propName (const defiComponent* obj, int index); +EXTERN char* defiComponent_propValue (const defiComponent* obj, int index); +EXTERN double defiComponent_propNumber (const defiComponent* obj, int index); +EXTERN char defiComponent_propType (const defiComponent* obj, int index); +EXTERN int defiComponent_propIsNumber (const defiComponent* obj, int index); +EXTERN int defiComponent_propIsString (const defiComponent* obj, int index); + + /* Debug printing */ +EXTERN void defiComponent_print (const defiComponent* obj, FILE* fout); + +#endif diff --git a/lefdef/src/def/cdef/defiDebug.h b/lefdef/src/def/cdef/defiDebug.h new file mode 100644 index 00000000..233b113a --- /dev/null +++ b/lefdef/src/def/cdef/defiDebug.h @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIDEBUG_H +#define CDEFIDEBUG_H + +#include +#include "defiTypedefs.h" + +/* Set flag */ +EXTERN void defiSetDebug (int num, int value); + +/* Read flag */ +EXTERN int defiDebug (int num); + +/* Error loggin function */ +EXTERN void defiError (int check, int msgNum, const char* message); + +/* for auto upshifting names in case insensitive files */ +EXTERN const char* upperCase (const char* c); +EXTERN const char* DEFCASE (const char* ch); + +#endif diff --git a/lefdef/src/def/cdef/defiDefs.h b/lefdef/src/def/cdef/defiDefs.h new file mode 100644 index 00000000..40bcd1cf --- /dev/null +++ b/lefdef/src/def/cdef/defiDefs.h @@ -0,0 +1,28 @@ +/************************************************************************* + * Copyright 2012, Cadence Design Systems + * + * This file is part of the Cadence LEF/DEF Open Source Distribution, + * Product Version 5.8. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * For updates, support, or to become part of the LEF/DEF Community, + * check www.openeda.org for details. + * +*************************************************************************/ + +/************************************************************************* + * THE FILE WAS OBSOLETED IN LEF/DEF 5.8 +*************************************************************************/ diff --git a/lefdef/src/def/cdef/defiFPC.h b/lefdef/src/def/cdef/defiFPC.h new file mode 100644 index 00000000..b63c058e --- /dev/null +++ b/lefdef/src/def/cdef/defiFPC.h @@ -0,0 +1,63 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIFPC_H +#define CDEFIFPC_H + +#include +#include "defiTypedefs.h" + +EXTERN const char* defiFPC_name (const defiFPC* obj); +EXTERN int defiFPC_isVertical (const defiFPC* obj); +EXTERN int defiFPC_isHorizontal (const defiFPC* obj); +EXTERN int defiFPC_hasAlign (const defiFPC* obj); +EXTERN int defiFPC_hasMax (const defiFPC* obj); +EXTERN int defiFPC_hasMin (const defiFPC* obj); +EXTERN int defiFPC_hasEqual (const defiFPC* obj); +EXTERN double defiFPC_alignMax (const defiFPC* obj); +EXTERN double defiFPC_alignMin (const defiFPC* obj); +EXTERN double defiFPC_equal (const defiFPC* obj); + +EXTERN int defiFPC_numParts (const defiFPC* obj); + + /* Return the constraint number "index" where index is */ + /* from 0 to numParts() */ + /* The returned corner is 'B' for bottom left 'T' for topright */ + /* The returned typ is 'R' for rows 'C' for comps */ + /* The returned char* points to name of the item. */ +EXTERN void defiFPC_getPart (const defiFPC* obj, int index, int* corner, int* typ, char** name); + + /* debug print */ +EXTERN void defiFPC_print (const defiFPC* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiFill.h b/lefdef/src/def/cdef/defiFill.h new file mode 100644 index 00000000..e016b10c --- /dev/null +++ b/lefdef/src/def/cdef/defiFill.h @@ -0,0 +1,67 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIFILL_H +#define CDEFIFILL_H + +#include +#include "defiTypedefs.h" + +EXTERN int defiFill_hasLayer (const defiFill* obj); +EXTERN const char* defiFill_layerName (const defiFill* obj); +EXTERN int defiFill_hasLayerOpc (const defiFill* obj); + +EXTERN int defiFill_layerMask (const defiFill* obj); +EXTERN int defiFill_viaTopMask (const defiFill* obj); +EXTERN int defiFill_viaCutMask (const defiFill* obj); +EXTERN int defiFill_viaBottomMask (const defiFill* obj); + +EXTERN int defiFill_numRectangles (const defiFill* obj); +EXTERN int defiFill_xl (const defiFill* obj, int index); +EXTERN int defiFill_yl (const defiFill* obj, int index); +EXTERN int defiFill_xh (const defiFill* obj, int index); +EXTERN int defiFill_yh (const defiFill* obj, int index); + +EXTERN int defiFill_numPolygons (const defiFill* obj); +EXTERN struct defiPoints defiFill_getPolygon (const defiFill* obj, int index); + +EXTERN int defiFill_hasVia (const defiFill* obj); +EXTERN const char* defiFill_viaName (const defiFill* obj); +EXTERN int defiFill_hasViaOpc (const defiFill* obj); + +EXTERN int defiFill_numViaPts (const defiFill* obj); +EXTERN struct defiPoints defiFill_getViaPts (const defiFill* obj, int index); + +EXTERN void defiFill_print (const defiFill* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiGroup.h b/lefdef/src/def/cdef/defiGroup.h new file mode 100644 index 00000000..1964ebe0 --- /dev/null +++ b/lefdef/src/def/cdef/defiGroup.h @@ -0,0 +1,65 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIGROUP_H +#define CDEFIGROUP_H + +#include +#include "defiTypedefs.h" + +/* Struct holds the data for one property. */ + +EXTERN const char* defiGroup_name (const defiGroup* obj); +EXTERN const char* defiGroup_regionName (const defiGroup* obj); +EXTERN int defiGroup_hasRegionBox (const defiGroup* obj); +EXTERN int defiGroup_hasRegionName (const defiGroup* obj); +EXTERN int defiGroup_hasMaxX (const defiGroup* obj); +EXTERN int defiGroup_hasMaxY (const defiGroup* obj); +EXTERN int defiGroup_hasPerim (const defiGroup* obj); +EXTERN void defiGroup_regionRects (const defiGroup* obj, int* size, int** xl, int** yl, int** xh, int** yh); +EXTERN int defiGroup_maxX (const defiGroup* obj); +EXTERN int defiGroup_maxY (const defiGroup* obj); +EXTERN int defiGroup_perim (const defiGroup* obj); + +EXTERN int defiGroup_numProps (const defiGroup* obj); +EXTERN const char* defiGroup_propName (const defiGroup* obj, int index); +EXTERN const char* defiGroup_propValue (const defiGroup* obj, int index); +EXTERN double defiGroup_propNumber (const defiGroup* obj, int index); +EXTERN const char defiGroup_propType (const defiGroup* obj, int index); +EXTERN int defiGroup_propIsNumber (const defiGroup* obj, int index); +EXTERN int defiGroup_propIsString (const defiGroup* obj, int index); + + /* debug print */ +EXTERN void defiGroup_print (const defiGroup* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiIOTiming.h b/lefdef/src/def/cdef/defiIOTiming.h new file mode 100644 index 00000000..c2064438 --- /dev/null +++ b/lefdef/src/def/cdef/defiIOTiming.h @@ -0,0 +1,69 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIIOTIMING_H +#define CDEFIIOTIMING_H + +#include +#include "defiTypedefs.h" + +EXTERN int defiIOTiming_hasVariableRise (const defiIOTiming* obj); +EXTERN int defiIOTiming_hasVariableFall (const defiIOTiming* obj); +EXTERN int defiIOTiming_hasSlewRise (const defiIOTiming* obj); +EXTERN int defiIOTiming_hasSlewFall (const defiIOTiming* obj); +EXTERN int defiIOTiming_hasCapacitance (const defiIOTiming* obj); +EXTERN int defiIOTiming_hasDriveCell (const defiIOTiming* obj); +EXTERN int defiIOTiming_hasFrom (const defiIOTiming* obj); +EXTERN int defiIOTiming_hasTo (const defiIOTiming* obj); +EXTERN int defiIOTiming_hasParallel (const defiIOTiming* obj); + +EXTERN const char* defiIOTiming_inst (const defiIOTiming* obj); +EXTERN const char* defiIOTiming_pin (const defiIOTiming* obj); +EXTERN double defiIOTiming_variableFallMin (const defiIOTiming* obj); +EXTERN double defiIOTiming_variableRiseMin (const defiIOTiming* obj); +EXTERN double defiIOTiming_variableFallMax (const defiIOTiming* obj); +EXTERN double defiIOTiming_variableRiseMax (const defiIOTiming* obj); +EXTERN double defiIOTiming_slewFallMin (const defiIOTiming* obj); +EXTERN double defiIOTiming_slewRiseMin (const defiIOTiming* obj); +EXTERN double defiIOTiming_slewFallMax (const defiIOTiming* obj); +EXTERN double defiIOTiming_slewRiseMax (const defiIOTiming* obj); +EXTERN double defiIOTiming_capacitance (const defiIOTiming* obj); +EXTERN const char* defiIOTiming_driveCell (const defiIOTiming* obj); +EXTERN const char* defiIOTiming_from (const defiIOTiming* obj); +EXTERN const char* defiIOTiming_to (const defiIOTiming* obj); +EXTERN double defiIOTiming_parallel (const defiIOTiming* obj); + + /* debug print */ +EXTERN void defiIOTiming_print (const defiIOTiming* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiKRDefs.h b/lefdef/src/def/cdef/defiKRDefs.h new file mode 100644 index 00000000..40bcd1cf --- /dev/null +++ b/lefdef/src/def/cdef/defiKRDefs.h @@ -0,0 +1,28 @@ +/************************************************************************* + * Copyright 2012, Cadence Design Systems + * + * This file is part of the Cadence LEF/DEF Open Source Distribution, + * Product Version 5.8. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * For updates, support, or to become part of the LEF/DEF Community, + * check www.openeda.org for details. + * +*************************************************************************/ + +/************************************************************************* + * THE FILE WAS OBSOLETED IN LEF/DEF 5.8 +*************************************************************************/ diff --git a/lefdef/src/def/cdef/defiMisc.h b/lefdef/src/def/cdef/defiMisc.h new file mode 100644 index 00000000..f0b0eedf --- /dev/null +++ b/lefdef/src/def/cdef/defiMisc.h @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIMISC_H +#define CDEFIMISC_H + +#include +#include "defiTypedefs.h" + +EXTERN int defiGeometries_numPoints (const defiGeometries* obj); +EXTERN void defiGeometries_points (const defiGeometries* obj, int index, int* x, int* y); + +EXTERN int defiStyles_style (const defiStyles* obj); +EXTERN struct defiPoints defiStyles_getPolygon (const defiStyles* obj); + +#endif diff --git a/lefdef/src/def/cdef/defiNet.h b/lefdef/src/def/cdef/defiNet.h new file mode 100644 index 00000000..5e52bfc3 --- /dev/null +++ b/lefdef/src/def/cdef/defiNet.h @@ -0,0 +1,247 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFINET_H +#define CDEFINET_H + +#include +#include "defiTypedefs.h" + +/* Return codes for defiNet::viaOrient + DEF_ORIENT_N 0 + DEF_ORIENT_W 1 + DEF_ORIENT_S 2 + DEF_ORIENT_E 3 + DEF_ORIENT_FN 4 + DEF_ORIENT_FW 5 + DEF_ORIENT_FS 6 + DEF_ORIENT_FE 7 +*/ + +EXTERN const char* defiWire_wireType (const defiWire* obj); +EXTERN const char* defiWire_wireShieldNetName (const defiWire* obj); +EXTERN int defiWire_numPaths (const defiWire* obj); + +EXTERN const defiPath* defiWire_path (const defiWire* obj, int index); + + /* WMD -- the following will be removed by the next release */ + + /* NEW: a net can have more than 1 wire */ + + /* Debug printing */ +EXTERN void defiSubnet_print (const defiSubnet* obj, FILE* f); + +EXTERN const char* defiSubnet_name (const defiSubnet* obj); +EXTERN int defiSubnet_numConnections (const defiSubnet* obj); +EXTERN const char* defiSubnet_instance (const defiSubnet* obj, int index); +EXTERN const char* defiSubnet_pin (const defiSubnet* obj, int index); +EXTERN int defiSubnet_pinIsSynthesized (const defiSubnet* obj, int index); +EXTERN int defiSubnet_pinIsMustJoin (const defiSubnet* obj, int index); + + /* WMD -- the following will be removed by the next release */ +EXTERN int defiSubnet_isFixed (const defiSubnet* obj); +EXTERN int defiSubnet_isRouted (const defiSubnet* obj); +EXTERN int defiSubnet_isCover (const defiSubnet* obj); + +EXTERN int defiSubnet_hasNonDefaultRule (const defiSubnet* obj); + + /* WMD -- the following will be removed by the next release */ +EXTERN int defiSubnet_numPaths (const defiSubnet* obj); +EXTERN const defiPath* defiSubnet_path (const defiSubnet* obj, int index); + +EXTERN const char* defiSubnet_nonDefaultRule (const defiSubnet* obj); + +EXTERN int defiSubnet_numWires (const defiSubnet* obj); +EXTERN const defiWire* defiSubnet_wire (const defiSubnet* obj, int index); + + /* WMD -- the following will be removed by the next release */ + +EXTERN int defiVpin_xl (const defiVpin* obj); +EXTERN int defiVpin_yl (const defiVpin* obj); +EXTERN int defiVpin_xh (const defiVpin* obj); +EXTERN int defiVpin_yh (const defiVpin* obj); +EXTERN char defiVpin_status (const defiVpin* obj); +EXTERN int defiVpin_orient (const defiVpin* obj); +EXTERN const char* defiVpin_orientStr (const defiVpin* obj); +EXTERN int defiVpin_xLoc (const defiVpin* obj); +EXTERN int defiVpin_yLoc (const defiVpin* obj); +EXTERN const char* defiVpin_name (const defiVpin* obj); +EXTERN const char* defiVpin_layer (const defiVpin* obj); + +/* Pre 5.4 */ + +EXTERN const char* defiShield_shieldName (const defiShield* obj); +EXTERN int defiShield_numPaths (const defiShield* obj); + +EXTERN const defiPath* defiShield_path (const defiShield* obj, int index); + +/* Struct holds the data for one component. */ + + /* Routines used by YACC to set the fields in the net. */ + + /* WMD -- the following will be removed by the next release */ + + /* NEW: a net can have more than 1 wire */ + + /* 5.6 */ + + /* For OA to modify the netName, id & pinName */ + + /* Routines to return the value of net data. */ +EXTERN const char* defiNet_name (const defiNet* obj); +EXTERN int defiNet_weight (const defiNet* obj); +EXTERN int defiNet_numProps (const defiNet* obj); +EXTERN const char* defiNet_propName (const defiNet* obj, int index); +EXTERN const char* defiNet_propValue (const defiNet* obj, int index); +EXTERN double defiNet_propNumber (const defiNet* obj, int index); +EXTERN const char defiNet_propType (const defiNet* obj, int index); +EXTERN int defiNet_propIsNumber (const defiNet* obj, int index); +EXTERN int defiNet_propIsString (const defiNet* obj, int index); +EXTERN int defiNet_numConnections (const defiNet* obj); +EXTERN const char* defiNet_instance (const defiNet* obj, int index); +EXTERN const char* defiNet_pin (const defiNet* obj, int index); +EXTERN int defiNet_pinIsMustJoin (const defiNet* obj, int index); +EXTERN int defiNet_pinIsSynthesized (const defiNet* obj, int index); +EXTERN int defiNet_numSubnets (const defiNet* obj); + +EXTERN const defiSubnet* defiNet_subnet (const defiNet* obj, int index); + + /* WMD -- the following will be removed by the next release */ +EXTERN int defiNet_isFixed (const defiNet* obj); +EXTERN int defiNet_isRouted (const defiNet* obj); +EXTERN int defiNet_isCover (const defiNet* obj); + + /* The following routines are for wiring */ +EXTERN int defiNet_numWires (const defiNet* obj); + +EXTERN const defiWire* defiNet_wire (const defiNet* obj, int index); + + /* Routines to get the information about Virtual Pins. */ +EXTERN int defiNet_numVpins (const defiNet* obj); + +EXTERN const defiVpin* defiNet_vpin (const defiNet* obj, int index); + +EXTERN int defiNet_hasProps (const defiNet* obj); +EXTERN int defiNet_hasWeight (const defiNet* obj); +EXTERN int defiNet_hasSubnets (const defiNet* obj); +EXTERN int defiNet_hasSource (const defiNet* obj); +EXTERN int defiNet_hasFixedbump (const defiNet* obj); +EXTERN int defiNet_hasFrequency (const defiNet* obj); +EXTERN int defiNet_hasPattern (const defiNet* obj); +EXTERN int defiNet_hasOriginal (const defiNet* obj); +EXTERN int defiNet_hasCap (const defiNet* obj); +EXTERN int defiNet_hasUse (const defiNet* obj); +EXTERN int defiNet_hasStyle (const defiNet* obj); +EXTERN int defiNet_hasNonDefaultRule (const defiNet* obj); +EXTERN int defiNet_hasVoltage (const defiNet* obj); +EXTERN int defiNet_hasSpacingRules (const defiNet* obj); +EXTERN int defiNet_hasWidthRules (const defiNet* obj); +EXTERN int defiNet_hasXTalk (const defiNet* obj); + +EXTERN int defiNet_numSpacingRules (const defiNet* obj); +EXTERN void defiNet_spacingRule (const defiNet* obj, int index, char** layer, double* dist, double* left, double* right); +EXTERN int defiNet_numWidthRules (const defiNet* obj); +EXTERN void defiNet_widthRule (const defiNet* obj, int index, char** layer, double* dist); +EXTERN double defiNet_voltage (const defiNet* obj); + +EXTERN int defiNet_XTalk (const defiNet* obj); +EXTERN const char* defiNet_source (const defiNet* obj); +EXTERN double defiNet_frequency (const defiNet* obj); +EXTERN const char* defiNet_original (const defiNet* obj); +EXTERN const char* defiNet_pattern (const defiNet* obj); +EXTERN double defiNet_cap (const defiNet* obj); +EXTERN const char* defiNet_use (const defiNet* obj); +EXTERN int defiNet_style (const defiNet* obj); +EXTERN const char* defiNet_nonDefaultRule (const defiNet* obj); + + /* WMD -- the following will be removed by the next release */ +EXTERN int defiNet_numPaths (const defiNet* obj); + +EXTERN const defiPath* defiNet_path (const defiNet* obj, int index); + +EXTERN int defiNet_numShields (const defiNet* obj); + +EXTERN const defiShield* defiNet_shield (const defiNet* obj, int index); + +EXTERN int defiNet_numShieldNets (const defiNet* obj); +EXTERN const char* defiNet_shieldNet (const defiNet* obj, int index); +EXTERN int defiNet_numNoShields (const defiNet* obj); + +EXTERN const defiShield* defiNet_noShield (const defiNet* obj, int index); + + /* 5.6 */ +EXTERN int defiNet_numPolygons (const defiNet* obj); +EXTERN const char* defiNet_polygonName (const defiNet* obj, int index); +EXTERN struct defiPoints defiNet_getPolygon (const defiNet* obj, int index); +EXTERN int defiNet_polyMask (const defiNet* obj, int index); +EXTERN const char* defiNet_polyRouteStatus (const defiNet* obj, int index); +EXTERN const char* defiNet_polyRouteStatusShieldName (const defiNet* obj, int index); +EXTERN const char* defiNet_polyShapeType (const defiNet* obj, int index); + +EXTERN int defiNet_numRectangles (const defiNet* obj); +EXTERN const char* defiNet_rectName (const defiNet* obj, int index); +EXTERN int defiNet_xl (const defiNet* obj, int index); +EXTERN int defiNet_yl (const defiNet* obj, int index); +EXTERN int defiNet_xh (const defiNet* obj, int index); +EXTERN int defiNet_yh (const defiNet* obj, int index); +EXTERN int defiNet_rectMask (const defiNet* obj, int index); +EXTERN const char* defiNet_rectRouteStatus (const defiNet* obj, int index); +EXTERN const char* defiNet_rectRouteStatusShieldName (const defiNet* obj, int index); +EXTERN const char* defiNet_rectShapeType (const defiNet* obj, int index); + + /* 5.8 */ +EXTERN int defiNet_numViaSpecs (const defiNet* obj); +EXTERN struct defiPoints defiNet_getViaPts (const defiNet* obj, int index); +EXTERN const char* defiNet_viaName (const defiNet* obj, int index); +EXTERN const int defiNet_viaOrient (const defiNet* obj, int index); +EXTERN const char* defiNet_viaOrientStr (const defiNet* obj, int index); +EXTERN const int defiNet_topMaskNum (const defiNet* obj, int index); +EXTERN const int defiNet_cutMaskNum (const defiNet* obj, int index); +EXTERN const int defiNet_bottomMaskNum (const defiNet* obj, int index); +EXTERN const char* defiNet_viaRouteStatus (const defiNet* obj, int index); +EXTERN const char* defiNet_viaRouteStatusShieldName (const defiNet* obj, int index); +EXTERN const char* defiNet_viaShapeType (const defiNet* obj, int index); + + /* Debug printing */ +EXTERN void defiNet_print (const defiNet* obj, FILE* f); + + /* The method freeWire() is added is user select to have a callback */ + /* per wire within a net This is an internal method and is not public */ + + /* Clear the rectangles & polygons data if partial path callback is set */ + + /* WMD -- the following will be removed by the nex release */ + + /* WMD -- the following will be removed by the nex release */ + +#endif diff --git a/lefdef/src/def/cdef/defiNonDefault.h b/lefdef/src/def/cdef/defiNonDefault.h new file mode 100644 index 00000000..697bde16 --- /dev/null +++ b/lefdef/src/def/cdef/defiNonDefault.h @@ -0,0 +1,79 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFINONDEFAULT_H +#define CDEFINONDEFAULT_H + +#include +#include "defiTypedefs.h" + +EXTERN const char* defiNonDefault_name (const defiNonDefault* obj); +EXTERN int defiNonDefault_hasHardspacing (const defiNonDefault* obj); + +EXTERN int defiNonDefault_numProps (const defiNonDefault* obj); +EXTERN const char* defiNonDefault_propName (const defiNonDefault* obj, int index); +EXTERN const char* defiNonDefault_propValue (const defiNonDefault* obj, int index); +EXTERN double defiNonDefault_propNumber (const defiNonDefault* obj, int index); +EXTERN const char defiNonDefault_propType (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_propIsNumber (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_propIsString (const defiNonDefault* obj, int index); + + /* A non default rule can have one or more layers. */ + /* The layer information is kept in an array. */ +EXTERN int defiNonDefault_numLayers (const defiNonDefault* obj); +EXTERN const char* defiNonDefault_layerName (const defiNonDefault* obj, int index); +EXTERN double defiNonDefault_layerWidth (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_layerWidthVal (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_hasLayerDiagWidth (const defiNonDefault* obj, int index); +EXTERN double defiNonDefault_layerDiagWidth (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_layerDiagWidthVal (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_hasLayerSpacing (const defiNonDefault* obj, int index); +EXTERN double defiNonDefault_layerSpacing (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_layerSpacingVal (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_hasLayerWireExt (const defiNonDefault* obj, int index); +EXTERN double defiNonDefault_layerWireExt (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_layerWireExtVal (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_numVias (const defiNonDefault* obj); +EXTERN const char* defiNonDefault_viaName (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_numViaRules (const defiNonDefault* obj); +EXTERN const char* defiNonDefault_viaRuleName (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_numMinCuts (const defiNonDefault* obj); +EXTERN const char* defiNonDefault_cutLayerName (const defiNonDefault* obj, int index); +EXTERN int defiNonDefault_numCuts (const defiNonDefault* obj, int index); + + /* Debug print */ +EXTERN void defiNonDefault_print (const defiNonDefault* obj, FILE* f); + + /* Layer information */ + +#endif diff --git a/lefdef/src/def/cdef/defiPartition.h b/lefdef/src/def/cdef/defiPartition.h new file mode 100644 index 00000000..183af732 --- /dev/null +++ b/lefdef/src/def/cdef/defiPartition.h @@ -0,0 +1,84 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIPARTITION_H +#define CDEFIPARTITION_H + +#include +#include "defiTypedefs.h" + +EXTERN const char* defiPartition_name (const defiPartition* obj); +EXTERN char defiPartition_direction (const defiPartition* obj); +EXTERN const char* defiPartition_itemType (const defiPartition* obj); +EXTERN const char* defiPartition_pinName (const defiPartition* obj); +EXTERN const char* defiPartition_instName (const defiPartition* obj); + +EXTERN int defiPartition_numPins (const defiPartition* obj); +EXTERN const char* defiPartition_pin (const defiPartition* obj, int index); + +EXTERN int defiPartition_isSetupRise (const defiPartition* obj); +EXTERN int defiPartition_isSetupFall (const defiPartition* obj); +EXTERN int defiPartition_isHoldRise (const defiPartition* obj); +EXTERN int defiPartition_isHoldFall (const defiPartition* obj); +EXTERN int defiPartition_hasMin (const defiPartition* obj); +EXTERN int defiPartition_hasMax (const defiPartition* obj); +EXTERN int defiPartition_hasRiseMin (const defiPartition* obj); +EXTERN int defiPartition_hasFallMin (const defiPartition* obj); +EXTERN int defiPartition_hasRiseMax (const defiPartition* obj); +EXTERN int defiPartition_hasFallMax (const defiPartition* obj); +EXTERN int defiPartition_hasRiseMinRange (const defiPartition* obj); +EXTERN int defiPartition_hasFallMinRange (const defiPartition* obj); +EXTERN int defiPartition_hasRiseMaxRange (const defiPartition* obj); +EXTERN int defiPartition_hasFallMaxRange (const defiPartition* obj); + +EXTERN double defiPartition_partitionMin (const defiPartition* obj); +EXTERN double defiPartition_partitionMax (const defiPartition* obj); + +EXTERN double defiPartition_riseMin (const defiPartition* obj); +EXTERN double defiPartition_fallMin (const defiPartition* obj); +EXTERN double defiPartition_riseMax (const defiPartition* obj); +EXTERN double defiPartition_fallMax (const defiPartition* obj); + +EXTERN double defiPartition_riseMinLeft (const defiPartition* obj); +EXTERN double defiPartition_fallMinLeft (const defiPartition* obj); +EXTERN double defiPartition_riseMaxLeft (const defiPartition* obj); +EXTERN double defiPartition_fallMaxLeft (const defiPartition* obj); +EXTERN double defiPartition_riseMinRight (const defiPartition* obj); +EXTERN double defiPartition_fallMinRight (const defiPartition* obj); +EXTERN double defiPartition_riseMaxRight (const defiPartition* obj); +EXTERN double defiPartition_fallMaxRight (const defiPartition* obj); + + /* debug print */ +EXTERN void defiPartition_print (const defiPartition* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiPath.h b/lefdef/src/def/cdef/defiPath.h new file mode 100644 index 00000000..ab0daf99 --- /dev/null +++ b/lefdef/src/def/cdef/defiPath.h @@ -0,0 +1,98 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013-2014, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIPATH_H +#define CDEFIPATH_H + +#include +#include "defiTypedefs.h" + +/* TX_DIR:TRANSLATION ON */ + +/* 5.4.1 1-D & 2-D Arrays of Vias in SPECIALNET Section */ + +/* value returned by the next() routine. */ +enum defiPath_e { + DEFIPATH_DONE = 0, + DEFIPATH_LAYER = 1, + DEFIPATH_VIA = 2, + DEFIPATH_VIAROTATION = 3, + DEFIPATH_WIDTH = 4, + DEFIPATH_POINT = 5, + DEFIPATH_FLUSHPOINT = 6, + DEFIPATH_TAPER = 7, + DEFIPATH_SHAPE = 8, + DEFIPATH_STYLE = 9, + DEFIPATH_TAPERRULE = 10, + DEFIPATH_VIADATA = 11, + DEFIPATH_RECT = 12, + DEFIPATH_VIRTUALPOINT = 13, + DEFIPATH_MASK = 14, + DEFIPATH_VIAMASK = 15 + } ; + + /* This is 'data ownership transfer' constructor. */ + + /* To traverse the path and get the parts. */ +EXTERN void defiPath_initTraverse (const defiPath* obj); +EXTERN void defiPath_initTraverseBackwards (const defiPath* obj); +EXTERN int defiPath_next (const defiPath* obj); +EXTERN int defiPath_prev (const defiPath* obj); +EXTERN const char* defiPath_getLayer (const defiPath* obj); +EXTERN const char* defiPath_getTaperRule (const defiPath* obj); +EXTERN const char* defiPath_getVia (const defiPath* obj); +EXTERN const char* defiPath_getShape (const defiPath* obj); +EXTERN int defiPath_getTaper (const defiPath* obj); +EXTERN int defiPath_getStyle (const defiPath* obj); +EXTERN int defiPath_getViaRotation (const defiPath* obj); +EXTERN void defiPath_getViaRect (const defiPath* obj, int* deltaX1, int* deltaY1, int* deltaX2, int* deltaY2); +EXTERN const char* defiPath_getViaRotationStr (const defiPath* obj); +EXTERN void defiPath_getViaData (const defiPath* obj, int* numX, int* numY, int* stepX, int* stepY); +EXTERN int defiPath_getWidth (const defiPath* obj); +EXTERN void defiPath_getPoint (const defiPath* obj, int* x, int* y); +EXTERN void defiPath_getFlushPoint (const defiPath* obj, int* x, int* y, int* ext); +EXTERN void defiPath_getVirtualPoint (const defiPath* obj, int* x, int* y); +EXTERN int defiPath_getMask (const defiPath* obj); +EXTERN int defiPath_getViaTopMask (const defiPath* obj); +EXTERN int defiPath_getViaCutMask (const defiPath* obj); +EXTERN int defiPath_getViaBottomMask (const defiPath* obj); +EXTERN int defiPath_getRectMask (const defiPath* obj); + + /* These routines are called by the parser to fill the path. */ + + /* debug printing */ +EXTERN void defiPath_print (const defiPath* obj, FILE* fout); + + /* as iterator in const traversal functions. */ + +#endif diff --git a/lefdef/src/def/cdef/defiPinCap.h b/lefdef/src/def/cdef/defiPinCap.h new file mode 100644 index 00000000..5b483db2 --- /dev/null +++ b/lefdef/src/def/cdef/defiPinCap.h @@ -0,0 +1,194 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIPINCAP_H +#define CDEFIPINCAP_H + +#include +#include "defiTypedefs.h" + +EXTERN int defiPinCap_pin (const defiPinCap* obj); +EXTERN double defiPinCap_cap (const defiPinCap* obj); + +EXTERN void defiPinCap_print (const defiPinCap* obj, FILE* f); + +/* 5.5 */ + +EXTERN char* defiPinAntennaModel_antennaOxide (const defiPinAntennaModel* obj); + +EXTERN int defiPinAntennaModel_hasAPinGateArea (const defiPinAntennaModel* obj); +EXTERN int defiPinAntennaModel_numAPinGateArea (const defiPinAntennaModel* obj); +EXTERN int defiPinAntennaModel_APinGateArea (const defiPinAntennaModel* obj, int index); +EXTERN int defiPinAntennaModel_hasAPinGateAreaLayer (const defiPinAntennaModel* obj, int index); +EXTERN const char* defiPinAntennaModel_APinGateAreaLayer (const defiPinAntennaModel* obj, int index); + +EXTERN int defiPinAntennaModel_hasAPinMaxAreaCar (const defiPinAntennaModel* obj); +EXTERN int defiPinAntennaModel_numAPinMaxAreaCar (const defiPinAntennaModel* obj); +EXTERN int defiPinAntennaModel_APinMaxAreaCar (const defiPinAntennaModel* obj, int index); +EXTERN int defiPinAntennaModel_hasAPinMaxAreaCarLayer (const defiPinAntennaModel* obj, int index); +EXTERN const char* defiPinAntennaModel_APinMaxAreaCarLayer (const defiPinAntennaModel* obj, int index); + +EXTERN int defiPinAntennaModel_hasAPinMaxSideAreaCar (const defiPinAntennaModel* obj); +EXTERN int defiPinAntennaModel_numAPinMaxSideAreaCar (const defiPinAntennaModel* obj); +EXTERN int defiPinAntennaModel_APinMaxSideAreaCar (const defiPinAntennaModel* obj, int index); +EXTERN int defiPinAntennaModel_hasAPinMaxSideAreaCarLayer (const defiPinAntennaModel* obj, int index); +EXTERN const char* defiPinAntennaModel_APinMaxSideAreaCarLayer (const defiPinAntennaModel* obj, int index); + +EXTERN int defiPinAntennaModel_hasAPinMaxCutCar (const defiPinAntennaModel* obj); +EXTERN int defiPinAntennaModel_numAPinMaxCutCar (const defiPinAntennaModel* obj); +EXTERN int defiPinAntennaModel_APinMaxCutCar (const defiPinAntennaModel* obj, int index); +EXTERN int defiPinAntennaModel_hasAPinMaxCutCarLayer (const defiPinAntennaModel* obj, int index); +EXTERN const char* defiPinAntennaModel_APinMaxCutCarLayer (const defiPinAntennaModel* obj, int index); + +EXTERN int defiPinPort_numLayer (const defiPinPort* obj); +EXTERN const char* defiPinPort_layer (const defiPinPort* obj, int index); +EXTERN void defiPinPort_bounds (const defiPinPort* obj, int index, int* xl, int* yl, int* xh, int* yh); +EXTERN int defiPinPort_hasLayerSpacing (const defiPinPort* obj, int index); +EXTERN int defiPinPort_hasLayerDesignRuleWidth (const defiPinPort* obj, int index); +EXTERN int defiPinPort_layerSpacing (const defiPinPort* obj, int index); +EXTERN int defiPinPort_layerMask (const defiPinPort* obj, int index); +EXTERN int defiPinPort_layerDesignRuleWidth (const defiPinPort* obj, int index); +EXTERN int defiPinPort_numPolygons (const defiPinPort* obj); +EXTERN const char* defiPinPort_polygonName (const defiPinPort* obj, int index); +EXTERN struct defiPoints defiPinPort_getPolygon (const defiPinPort* obj, int index); +EXTERN int defiPinPort_hasPolygonSpacing (const defiPinPort* obj, int index); +EXTERN int defiPinPort_hasPolygonDesignRuleWidth (const defiPinPort* obj, int index); +EXTERN int defiPinPort_polygonSpacing (const defiPinPort* obj, int index); +EXTERN int defiPinPort_polygonDesignRuleWidth (const defiPinPort* obj, int index); +EXTERN int defiPinPort_polygonMask (const defiPinPort* obj, int index); +EXTERN int defiPinPort_numVias (const defiPinPort* obj); +EXTERN const char* defiPinPort_viaName (const defiPinPort* obj, int index); +EXTERN int defiPinPort_viaPtX (const defiPinPort* obj, int index); +EXTERN int defiPinPort_viaPtY (const defiPinPort* obj, int index); +EXTERN int defiPinPort_viaTopMask (const defiPinPort* obj, int index); +EXTERN int defiPinPort_viaCutMask (const defiPinPort* obj, int index); +EXTERN int defiPinPort_viaBottomMask (const defiPinPort* obj, int index); +EXTERN int defiPinPort_hasPlacement (const defiPinPort* obj); +EXTERN int defiPinPort_isPlaced (const defiPinPort* obj); +EXTERN int defiPinPort_isCover (const defiPinPort* obj); +EXTERN int defiPinPort_isFixed (const defiPinPort* obj); +EXTERN int defiPinPort_placementX (const defiPinPort* obj); +EXTERN int defiPinPort_placementY (const defiPinPort* obj); +EXTERN int defiPinPort_orient (const defiPinPort* obj); +EXTERN const char* defiPinPort_orientStr (const defiPinPort* obj); + + /* 5.6 setLayer is changed to addLayer due to multiple LAYER are allowed */ + /* in 5.6 */ + /* 5.7 port statements, which may have LAYER, POLYGON, &| VIA */ + +EXTERN const char* defiPin_pinName (const defiPin* obj); +EXTERN const char* defiPin_netName (const defiPin* obj); + /* optional parts */ +EXTERN int defiPin_hasDirection (const defiPin* obj); +EXTERN int defiPin_hasUse (const defiPin* obj); +EXTERN int defiPin_hasLayer (const defiPin* obj); +EXTERN int defiPin_hasPlacement (const defiPin* obj); +EXTERN int defiPin_isUnplaced (const defiPin* obj); +EXTERN int defiPin_isPlaced (const defiPin* obj); +EXTERN int defiPin_isCover (const defiPin* obj); +EXTERN int defiPin_isFixed (const defiPin* obj); +EXTERN int defiPin_placementX (const defiPin* obj); +EXTERN int defiPin_placementY (const defiPin* obj); +EXTERN const char* defiPin_direction (const defiPin* obj); +EXTERN const char* defiPin_use (const defiPin* obj); +EXTERN int defiPin_numLayer (const defiPin* obj); +EXTERN const char* defiPin_layer (const defiPin* obj, int index); +EXTERN void defiPin_bounds (const defiPin* obj, int index, int* xl, int* yl, int* xh, int* yh); +EXTERN int defiPin_layerMask (const defiPin* obj, int index); +EXTERN int defiPin_hasLayerSpacing (const defiPin* obj, int index); +EXTERN int defiPin_hasLayerDesignRuleWidth (const defiPin* obj, int index); +EXTERN int defiPin_layerSpacing (const defiPin* obj, int index); +EXTERN int defiPin_layerDesignRuleWidth (const defiPin* obj, int index); +EXTERN int defiPin_numPolygons (const defiPin* obj); +EXTERN const char* defiPin_polygonName (const defiPin* obj, int index); +EXTERN struct defiPoints defiPin_getPolygon (const defiPin* obj, int index); +EXTERN int defiPin_polygonMask (const defiPin* obj, int index); +EXTERN int defiPin_hasPolygonSpacing (const defiPin* obj, int index); +EXTERN int defiPin_hasPolygonDesignRuleWidth (const defiPin* obj, int index); +EXTERN int defiPin_polygonSpacing (const defiPin* obj, int index); +EXTERN int defiPin_polygonDesignRuleWidth (const defiPin* obj, int index); +EXTERN int defiPin_hasNetExpr (const defiPin* obj); +EXTERN int defiPin_hasSupplySensitivity (const defiPin* obj); +EXTERN int defiPin_hasGroundSensitivity (const defiPin* obj); +EXTERN const char* defiPin_netExpr (const defiPin* obj); +EXTERN const char* defiPin_supplySensitivity (const defiPin* obj); +EXTERN const char* defiPin_groundSensitivity (const defiPin* obj); +EXTERN int defiPin_orient (const defiPin* obj); +EXTERN const char* defiPin_orientStr (const defiPin* obj); +EXTERN int defiPin_hasSpecial (const defiPin* obj); +EXTERN int defiPin_numVias (const defiPin* obj); +EXTERN const char* defiPin_viaName (const defiPin* obj, int index); +EXTERN int defiPin_viaTopMask (const defiPin* obj, int index); +EXTERN int defiPin_viaCutMask (const defiPin* obj, int index); +EXTERN int defiPin_viaBottomMask (const defiPin* obj, int index); +EXTERN int defiPin_viaPtX (const defiPin* obj, int index); +EXTERN int defiPin_viaPtY (const defiPin* obj, int index); + + /* 5.4 */ +EXTERN int defiPin_hasAPinPartialMetalArea (const defiPin* obj); +EXTERN int defiPin_numAPinPartialMetalArea (const defiPin* obj); +EXTERN int defiPin_APinPartialMetalArea (const defiPin* obj, int index); +EXTERN int defiPin_hasAPinPartialMetalAreaLayer (const defiPin* obj, int index); +EXTERN const char* defiPin_APinPartialMetalAreaLayer (const defiPin* obj, int index); + +EXTERN int defiPin_hasAPinPartialMetalSideArea (const defiPin* obj); +EXTERN int defiPin_numAPinPartialMetalSideArea (const defiPin* obj); +EXTERN int defiPin_APinPartialMetalSideArea (const defiPin* obj, int index); +EXTERN int defiPin_hasAPinPartialMetalSideAreaLayer (const defiPin* obj, int index); +EXTERN const char* defiPin_APinPartialMetalSideAreaLayer (const defiPin* obj, int index); + +EXTERN int defiPin_hasAPinDiffArea (const defiPin* obj); +EXTERN int defiPin_numAPinDiffArea (const defiPin* obj); +EXTERN int defiPin_APinDiffArea (const defiPin* obj, int index); +EXTERN int defiPin_hasAPinDiffAreaLayer (const defiPin* obj, int index); +EXTERN const char* defiPin_APinDiffAreaLayer (const defiPin* obj, int index); + +EXTERN int defiPin_hasAPinPartialCutArea (const defiPin* obj); +EXTERN int defiPin_numAPinPartialCutArea (const defiPin* obj); +EXTERN int defiPin_APinPartialCutArea (const defiPin* obj, int index); +EXTERN int defiPin_hasAPinPartialCutAreaLayer (const defiPin* obj, int index); +EXTERN const char* defiPin_APinPartialCutAreaLayer (const defiPin* obj, int index); + + /* 5.5 */ +EXTERN int defiPin_numAntennaModel (const defiPin* obj); +EXTERN const defiPinAntennaModel* defiPin_antennaModel (const defiPin* obj, int index); + + /* 5.7 */ +EXTERN int defiPin_hasPort (const defiPin* obj); +EXTERN int defiPin_numPorts (const defiPin* obj); +EXTERN const defiPinPort* defiPin_pinPort (const defiPin* obj, int index); +EXTERN void defiPin_print (const defiPin* obj, FILE* f); + + /* 5.5 AntennaModel */ + +#endif diff --git a/lefdef/src/def/cdef/defiPinProp.h b/lefdef/src/def/cdef/defiPinProp.h new file mode 100644 index 00000000..7cef41bf --- /dev/null +++ b/lefdef/src/def/cdef/defiPinProp.h @@ -0,0 +1,54 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIPINPROP_H +#define CDEFIPINPROP_H + +#include +#include "defiTypedefs.h" + +EXTERN int defiPinProp_isPin (const defiPinProp* obj); +EXTERN const char* defiPinProp_instName (const defiPinProp* obj); +EXTERN const char* defiPinProp_pinName (const defiPinProp* obj); + +EXTERN int defiPinProp_numProps (const defiPinProp* obj); +EXTERN const char* defiPinProp_propName (const defiPinProp* obj, int index); +EXTERN const char* defiPinProp_propValue (const defiPinProp* obj, int index); +EXTERN double defiPinProp_propNumber (const defiPinProp* obj, int index); +EXTERN const char defiPinProp_propType (const defiPinProp* obj, int index); +EXTERN int defiPinProp_propIsNumber (const defiPinProp* obj, int index); +EXTERN int defiPinProp_propIsString (const defiPinProp* obj, int index); + +EXTERN void defiPinProp_print (const defiPinProp* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiProp.h b/lefdef/src/def/cdef/defiProp.h new file mode 100644 index 00000000..d8a9cca3 --- /dev/null +++ b/lefdef/src/def/cdef/defiProp.h @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIPROP_H +#define CDEFIPROP_H + +#include +#include "defiTypedefs.h" + +/* Struct holds the data for one property. */ + +EXTERN const char* defiProp_string (const defiProp* obj); +EXTERN const char* defiProp_propType (const defiProp* obj); +EXTERN const char* defiProp_propName (const defiProp* obj); +EXTERN char defiProp_dataType (const defiProp* obj); + /* either I:integer R:real S:string Q:quotedstring N:nameMapString */ +EXTERN int defiProp_hasNumber (const defiProp* obj); +EXTERN int defiProp_hasRange (const defiProp* obj); +EXTERN int defiProp_hasString (const defiProp* obj); +EXTERN int defiProp_hasNameMapString (const defiProp* obj); +EXTERN double defiProp_number (const defiProp* obj); +EXTERN double defiProp_left (const defiProp* obj); +EXTERN double defiProp_right (const defiProp* obj); + +EXTERN void defiProp_print (const defiProp* obj, FILE* f); + + /* N:nameMapString */ + +#endif diff --git a/lefdef/src/def/cdef/defiPropType.h b/lefdef/src/def/cdef/defiPropType.h new file mode 100644 index 00000000..260fc8ee --- /dev/null +++ b/lefdef/src/def/cdef/defiPropType.h @@ -0,0 +1,45 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIPROPTYPE_H +#define CDEFIPROPTYPE_H + +#include +#include "defiTypedefs.h" + +/* Struct holds the data type for one property, if the property is */ +/* either REAL or INTEGER. */ + +EXTERN const char defiPropType_propType (const defiPropType* obj, char* name); + +#endif diff --git a/lefdef/src/def/cdef/defiRegion.h b/lefdef/src/def/cdef/defiRegion.h new file mode 100644 index 00000000..feb50f15 --- /dev/null +++ b/lefdef/src/def/cdef/defiRegion.h @@ -0,0 +1,63 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIREGION_H +#define CDEFIREGION_H + +#include +#include "defiTypedefs.h" + +/* Struct holds the data for one property. */ + +EXTERN const char* defiRegion_name (const defiRegion* obj); + +EXTERN int defiRegion_numProps (const defiRegion* obj); +EXTERN const char* defiRegion_propName (const defiRegion* obj, int index); +EXTERN const char* defiRegion_propValue (const defiRegion* obj, int index); +EXTERN double defiRegion_propNumber (const defiRegion* obj, int index); +EXTERN const char defiRegion_propType (const defiRegion* obj, int index); +EXTERN int defiRegion_propIsNumber (const defiRegion* obj, int index); +EXTERN int defiRegion_propIsString (const defiRegion* obj, int index); + +EXTERN int defiRegion_hasType (const defiRegion* obj); +EXTERN const char* defiRegion_type (const defiRegion* obj); + +EXTERN int defiRegion_numRectangles (const defiRegion* obj); +EXTERN int defiRegion_xl (const defiRegion* obj, int index); +EXTERN int defiRegion_yl (const defiRegion* obj, int index); +EXTERN int defiRegion_xh (const defiRegion* obj, int index); +EXTERN int defiRegion_yh (const defiRegion* obj, int index); + +EXTERN void defiRegion_print (const defiRegion* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiRowTrack.h b/lefdef/src/def/cdef/defiRowTrack.h new file mode 100644 index 00000000..ba0d4abc --- /dev/null +++ b/lefdef/src/def/cdef/defiRowTrack.h @@ -0,0 +1,81 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIROWTRACK_H +#define CDEFIROWTRACK_H + +#include +#include "defiTypedefs.h" + +EXTERN const char* defiRow_name (const defiRow* obj); +EXTERN const char* defiRow_macro (const defiRow* obj); +EXTERN double defiRow_x (const defiRow* obj); +EXTERN double defiRow_y (const defiRow* obj); +EXTERN int defiRow_orient (const defiRow* obj); +EXTERN const char* defiRow_orientStr (const defiRow* obj); +EXTERN int defiRow_hasDo (const defiRow* obj); +EXTERN double defiRow_xNum (const defiRow* obj); +EXTERN double defiRow_yNum (const defiRow* obj); +EXTERN int defiRow_hasDoStep (const defiRow* obj); +EXTERN double defiRow_xStep (const defiRow* obj); +EXTERN double defiRow_yStep (const defiRow* obj); + +EXTERN int defiRow_numProps (const defiRow* obj); +EXTERN const char* defiRow_propName (const defiRow* obj, int index); +EXTERN const char* defiRow_propValue (const defiRow* obj, int index); +EXTERN double defiRow_propNumber (const defiRow* obj, int index); +EXTERN const char defiRow_propType (const defiRow* obj, int index); +EXTERN int defiRow_propIsNumber (const defiRow* obj, int index); +EXTERN int defiRow_propIsString (const defiRow* obj, int index); + +EXTERN void defiRow_print (const defiRow* obj, FILE* f); + +EXTERN const char* defiTrack_macro (const defiTrack* obj); +EXTERN double defiTrack_x (const defiTrack* obj); +EXTERN double defiTrack_xNum (const defiTrack* obj); +EXTERN double defiTrack_xStep (const defiTrack* obj); +EXTERN int defiTrack_numLayers (const defiTrack* obj); +EXTERN const char* defiTrack_layer (const defiTrack* obj, int index); +EXTERN int defiTrack_firstTrackMask (const defiTrack* obj); +EXTERN int defiTrack_sameMask (const defiTrack* obj); + +EXTERN void defiTrack_print (const defiTrack* obj, FILE* f); + +EXTERN const char* defiGcellGrid_macro (const defiGcellGrid* obj); +EXTERN int defiGcellGrid_x (const defiGcellGrid* obj); +EXTERN int defiGcellGrid_xNum (const defiGcellGrid* obj); +EXTERN double defiGcellGrid_xStep (const defiGcellGrid* obj); + +EXTERN void defiGcellGrid_print (const defiGcellGrid* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiScanchain.h b/lefdef/src/def/cdef/defiScanchain.h new file mode 100644 index 00000000..8449c4ff --- /dev/null +++ b/lefdef/src/def/cdef/defiScanchain.h @@ -0,0 +1,93 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFISCANCHAIN_H +#define CDEFISCANCHAIN_H + +#include +#include "defiTypedefs.h" + +EXTERN int defiOrdered_num (const defiOrdered* obj); +EXTERN char** defiOrdered_inst (const defiOrdered* obj); +EXTERN char** defiOrdered_in (const defiOrdered* obj); +EXTERN char** defiOrdered_out (const defiOrdered* obj); +EXTERN int* defiOrdered_bits (const defiOrdered* obj); + +/* Struct holds the data for one Scan chain. */ +/* */ + +EXTERN const char* defiScanchain_name (const defiScanchain* obj); +EXTERN int defiScanchain_hasStart (const defiScanchain* obj); +EXTERN int defiScanchain_hasStop (const defiScanchain* obj); +EXTERN int defiScanchain_hasFloating (const defiScanchain* obj); +EXTERN int defiScanchain_hasOrdered (const defiScanchain* obj); +EXTERN int defiScanchain_hasCommonInPin (const defiScanchain* obj); +EXTERN int defiScanchain_hasCommonOutPin (const defiScanchain* obj); +EXTERN int defiScanchain_hasPartition (const defiScanchain* obj); +EXTERN int defiScanchain_hasPartitionMaxBits (const defiScanchain* obj); + + /* If the pin part of these routines were not supplied in the DEF */ + /* then a NULL pointer will be returned. */ +EXTERN void defiScanchain_start (const defiScanchain* obj, char** inst, char** pin); +EXTERN void defiScanchain_stop (const defiScanchain* obj, char** inst, char** pin); + + /* There could be many ORDERED constructs in the DEF. The data in */ + /* each ORDERED construct is stored in its own array. The numOrderedLists( */ + /* routine tells how many lists there are. */ +EXTERN int defiScanchain_numOrderedLists (const defiScanchain* obj); + + /* This routine will return an array of instances and */ + /* an array of in and out pins. */ + /* The number if things in the arrays is returned in size. */ + /* The inPin and outPin entry is optional for each instance. */ + /* If an entry is not given, then that char* is NULL. */ + /* For example if the second instance has */ + /* instnam= "FOO" and IN="A", but no OUT given, then inst[1] points */ + /* to "FOO" inPin[1] points to "A" and outPin[1] is a NULL pointer. */ +EXTERN void defiScanchain_ordered (const defiScanchain* obj, int index, int* size, char*** inst, char*** inPin, char*** outPin, int** bits); + + /* All of the floating constructs in the scan chain are */ + /* stored in this one array. */ + /* If the IN or OUT of an entry is not supplied then the array will have */ + /* a NULL pointer in that place. */ +EXTERN void defiScanchain_floating (const defiScanchain* obj, int* size, char*** inst, char*** inPin, char*** outPin, int** bits); + +EXTERN const char* defiScanchain_commonInPin (const defiScanchain* obj); +EXTERN const char* defiScanchain_commonOutPin (const defiScanchain* obj); + +EXTERN const char* defiScanchain_partitionName (const defiScanchain* obj); +EXTERN int defiScanchain_partitionMaxBits (const defiScanchain* obj); + +EXTERN void defiScanchain_print (const defiScanchain* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiSite.h b/lefdef/src/def/cdef/defiSite.h new file mode 100644 index 00000000..7353ceb8 --- /dev/null +++ b/lefdef/src/def/cdef/defiSite.h @@ -0,0 +1,74 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFISITE_H +#define CDEFISITE_H + +#include +#include "defiTypedefs.h" + +/* + * Struct holds the data for one site. + * It is also used for a canplace and cannotoccupy. + */ + +EXTERN double defiSite_x_num (const defiSite* obj); +EXTERN double defiSite_y_num (const defiSite* obj); +EXTERN double defiSite_x_step (const defiSite* obj); +EXTERN double defiSite_y_step (const defiSite* obj); +EXTERN double defiSite_x_orig (const defiSite* obj); +EXTERN double defiSite_y_orig (const defiSite* obj); +EXTERN int defiSite_orient (const defiSite* obj); +EXTERN const char* defiSite_orientStr (const defiSite* obj); +EXTERN const char* defiSite_name (const defiSite* obj); + +EXTERN void defiSite_print (const defiSite* obj, FILE* f); + +/* Struct holds the data for a Box */ + /* Use the default destructor and constructor. */ + /* 5.6 changed to use it own constructor & destructor */ + + /* NOTE: 5.6 */ + /* The following methods are still here for backward compatibility */ + /* For new reader they should use numPoints & getPoint to get the */ + /* data. */ +EXTERN int defiBox_xl (const defiBox* obj); +EXTERN int defiBox_yl (const defiBox* obj); +EXTERN int defiBox_xh (const defiBox* obj); +EXTERN int defiBox_yh (const defiBox* obj); + +EXTERN struct defiPoints defiBox_getPoint (const defiBox* obj); + +EXTERN void defiBox_print (const defiBox* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiSlot.h b/lefdef/src/def/cdef/defiSlot.h new file mode 100644 index 00000000..a1194234 --- /dev/null +++ b/lefdef/src/def/cdef/defiSlot.h @@ -0,0 +1,54 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFISLOT_H +#define CDEFISLOT_H + +#include +#include "defiTypedefs.h" + +EXTERN int defiSlot_hasLayer (const defiSlot* obj); +EXTERN const char* defiSlot_layerName (const defiSlot* obj); + +EXTERN int defiSlot_numRectangles (const defiSlot* obj); +EXTERN int defiSlot_xl (const defiSlot* obj, int index); +EXTERN int defiSlot_yl (const defiSlot* obj, int index); +EXTERN int defiSlot_xh (const defiSlot* obj, int index); +EXTERN int defiSlot_yh (const defiSlot* obj, int index); + +EXTERN int defiSlot_numPolygons (const defiSlot* obj); +EXTERN struct defiPoints defiSlot_getPolygon (const defiSlot* obj, int index); + +EXTERN void defiSlot_print (const defiSlot* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiTimingDisable.h b/lefdef/src/def/cdef/defiTimingDisable.h new file mode 100644 index 00000000..5106ae9f --- /dev/null +++ b/lefdef/src/def/cdef/defiTimingDisable.h @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFITIMINGDISABLE_H +#define CDEFITIMINGDISABLE_H + +#include +#include "defiTypedefs.h" + +/* A Timing disable can be a from-to or a thru or a macro. */ +/* A macro is either a fromto macro or a thru macro. */ + +EXTERN int defiTimingDisable_hasMacroThru (const defiTimingDisable* obj); +EXTERN int defiTimingDisable_hasMacroFromTo (const defiTimingDisable* obj); +EXTERN int defiTimingDisable_hasThru (const defiTimingDisable* obj); +EXTERN int defiTimingDisable_hasFromTo (const defiTimingDisable* obj); +EXTERN int defiTimingDisable_hasReentrantPathsFlag (const defiTimingDisable* obj); + +EXTERN const char* defiTimingDisable_fromPin (const defiTimingDisable* obj); +EXTERN const char* defiTimingDisable_toPin (const defiTimingDisable* obj); +EXTERN const char* defiTimingDisable_fromInst (const defiTimingDisable* obj); +EXTERN const char* defiTimingDisable_toInst (const defiTimingDisable* obj); +EXTERN const char* defiTimingDisable_macroName (const defiTimingDisable* obj); +EXTERN const char* defiTimingDisable_thruPin (const defiTimingDisable* obj); +EXTERN const char* defiTimingDisable_thruInst (const defiTimingDisable* obj); + + /* debug print */ +EXTERN void defiTimingDisable_print (const defiTimingDisable* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defiTypedefs.h b/lefdef/src/def/cdef/defiTypedefs.h new file mode 100644 index 00000000..08580948 --- /dev/null +++ b/lefdef/src/def/cdef/defiTypedefs.h @@ -0,0 +1,115 @@ + /* ***************************************************************************** */ + /* ***************************************************************************** */ + /* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ + /* ***************************************************************************** */ + /* ***************************************************************************** */ + /* Copyright 2012, Cadence Design Systems */ + /* */ + /* This file is part of the Cadence LEF/DEF Open Source */ + /* Distribution, Product Version 5.8. */ + /* */ + /* Licensed under the Apache License, Version 2.0 (the \"License\"); */ + /* you may not use this file except in compliance with the License. */ + /* You may obtain a copy of the License at */ + /* */ + /* http://www.apache.org/licenses/LICENSE-2.0 */ + /* */ + /* Unless required by applicable law or agreed to in writing, software */ + /* distributed under the License is distributed on an \"AS IS\" BASIS, */ + /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ + /* implied. See the License for the specific language governing */ + /* permissions and limitations under the License. */ + /* */ + /* */ + /* For updates, support, or to become part of the LEF/DEF Community, */ + /* check www.openeda.org for details. */ + /* */ + /* $Author: xxx $ */ + /* $Revision: xxx $ */ + /* $Date: xxx $ */ + /* $State: xxx $ */ + /* ***************************************************************************** */ + /* ***************************************************************************** */ + +#ifndef CLEFITYPEDEFS_H +#define CLEFITYPEDEFS_H + +#ifndef EXTERN +#define EXTERN extern +#endif + +#define bool int +#define defiUserData void * +#define defiUserDataHandle void ** + +/* Typedefs */ + +/* Pointers to C++ classes */ +typedef void *defiPinPort; +typedef void *defiTimingDisable; +typedef void *defiPartition; +typedef void *defiAssertion; +typedef void *defiPinAntennaModel; +typedef void *defiIOTiming; +typedef void *defiRegion; +typedef void *defiSubnet; +typedef void *defiTrack; +typedef void *defiProp; +typedef void *defiRow; +typedef void *defiFPC; +typedef void *defiShield; +typedef void *defiVia; +typedef void *defiNonDefault; +typedef void *defiBox; +typedef void *defiWire; +typedef void *defiOrdered; +typedef void *defiPropType; +typedef void *defiAlias_itr; +typedef void *defiScanchain; +typedef void *defiComponent; +typedef void *defiFill; +typedef void *defiSite; +typedef void *defiPin; +typedef void *defiPinProp; +typedef void *defiStyles; +typedef void *defiBlockage; +typedef void *defiGeometries; +typedef void *defiVpin; +typedef void *defiNet; +typedef void *defiSlot; +typedef void *defiGcellGrid; +typedef void *defiPath; +typedef void *defiGroup; +typedef void *defiPinCap; +typedef void *defiComponentMaskShiftLayer; +typedef void *defrData; + +/* Data structures definitions */ +struct defiPoints { + int numPoints; + int* x; + int* y; +}; + +struct defiPnt { + int x; + int y; + int ext; +}; + +struct defiViaData { + int numX; + int numY; + int stepX; + int stepY; +}; + +struct defiViaRect { + int deltaX1; + int deltaY1; + int deltaX2; + int deltaY2; +}; + + +#endif diff --git a/lefdef/src/def/cdef/defiUser.h b/lefdef/src/def/cdef/defiUser.h new file mode 100644 index 00000000..6a113a51 --- /dev/null +++ b/lefdef/src/def/cdef/defiUser.h @@ -0,0 +1,89 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + +/* + * User header file for the DEF Interface. This includes + * all of the header files which are relevant to both the + * reader and the writer. + * + * defrReader.h and defwWriter.h include this file, so that + * an application only needs to include either defwReader.h + * or defwWriter.h. + */ + + +#ifndef CDEFIUSER_H +#define CDEFIUSER_H + +#include "defiAlias.h" +#include "defiAssertion.h" +#include "defiBlockage.h" +#include "defiComponent.h" +#include "defiDebug.h" +#include "defiFill.h" +#include "defiFPC.h" +#include "defiGroup.h" +#include "defiIOTiming.h" +#include "defiMisc.h" +#include "defiNet.h" +#include "defiNonDefault.h" +#include "defiPartition.h" +#include "defiPath.h" +#include "defiPinCap.h" +#include "defiPinProp.h" +#include "defiProp.h" +#include "defiPropType.h" +#include "defiRegion.h" +#include "defiRowTrack.h" +#include "defiScanchain.h" +#include "defiSite.h" +#include "defiSlot.h" +#include "defiTimingDisable.h" +#include "defiVia.h" + + +/* General utilities. */ +/* #include "defiMalloc.hpp" */ +/* #include "defiUtils.hpp" */ + +/* + * API objects + */ + +/* NEW CALLBACK - If you are creating a new .cpp and .hpp file to + * describe a new class of object in the parser, then add a reference + * to the .hpp here. + * + * You must also add an entry for the .h and the .hpp in the package_list + * file of the ../../../release directory. */ + +#endif diff --git a/lefdef/src/def/cdef/defiVia.h b/lefdef/src/def/cdef/defiVia.h new file mode 100644 index 00000000..9d3d4171 --- /dev/null +++ b/lefdef/src/def/cdef/defiVia.h @@ -0,0 +1,69 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFIVIA_H +#define CDEFIVIA_H + +#include +#include "defiTypedefs.h" + +/* Struct holds the data for one property. */ + + /* 5.6 */ + +EXTERN const char* defiVia_name (const defiVia* obj); +EXTERN const char* defiVia_pattern (const defiVia* obj); +EXTERN int defiVia_hasPattern (const defiVia* obj); +EXTERN int defiVia_numLayers (const defiVia* obj); +EXTERN void defiVia_layer (const defiVia* obj, int index, char** layer, int* xl, int* yl, int* xh, int* yh); +EXTERN int defiVia_numPolygons (const defiVia* obj); +EXTERN const char* defiVia_polygonName (const defiVia* obj, int index); +EXTERN struct defiPoints defiVia_getPolygon (const defiVia* obj, int index); +EXTERN int defiVia_hasViaRule (const defiVia* obj); +EXTERN void defiVia_viaRule (const defiVia* obj, char** viaRuleName, int* xSize, int* ySize, char** botLayer, char** cutLayer, char** topLayer, int* xCutSpacing, int* yCutSpacing, int* xBotEnc, int* yBotEnc, int* xTopEnc, int* yTopEnc); +EXTERN int defiVia_hasRowCol (const defiVia* obj); +EXTERN void defiVia_rowCol (const defiVia* obj, int* numCutRows, int* numCutCols); +EXTERN int defiVia_hasOrigin (const defiVia* obj); +EXTERN void defiVia_origin (const defiVia* obj, int* xOffset, int* yOffset); +EXTERN int defiVia_hasOffset (const defiVia* obj); +EXTERN void defiVia_offset (const defiVia* obj, int* xBotOffset, int* yBotOffset, int* xTopOffset, int* yTopOffset); +EXTERN int defiVia_hasCutPattern (const defiVia* obj); +EXTERN const char* defiVia_cutPattern (const defiVia* obj); +EXTERN int defiVia_hasRectMask (const defiVia* obj, int index); +EXTERN int defiVia_rectMask (const defiVia* obj, int index); +EXTERN int defiVia_hasPolyMask (const defiVia* obj, int index); +EXTERN int defiVia_polyMask (const defiVia* obj, int index); + +EXTERN void defiVia_print (const defiVia* obj, FILE* f); + +#endif diff --git a/lefdef/src/def/cdef/defrReader.h b/lefdef/src/def/cdef/defrReader.h new file mode 100644 index 00000000..de48194d --- /dev/null +++ b/lefdef/src/def/cdef/defrReader.h @@ -0,0 +1,668 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013-2014, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFRREADER_H +#define CDEFRREADER_H + +#include +#include "defiTypedefs.h" + +#define DEF_MSGS 4013 +#define CBMAX 150 + +/* An enum describing all of the types of reader callbacks. */ +typedef enum { + defrUnspecifiedCbkType = 0, + defrDesignStartCbkType = 1, + defrTechNameCbkType = 2, + defrPropCbkType = 3, + defrPropDefEndCbkType = 4, + defrPropDefStartCbkType = 5, + defrFloorPlanNameCbkType = 6, + defrArrayNameCbkType = 7, + defrUnitsCbkType = 8, + defrDividerCbkType = 9, + defrBusBitCbkType = 10, + defrSiteCbkType = 11, + defrComponentStartCbkType = 12, + defrComponentCbkType = 13, + defrComponentEndCbkType = 14, + defrNetStartCbkType = 15, + defrNetCbkType = 16, + defrNetNameCbkType = 17, + defrNetNonDefaultRuleCbkType = 18, + defrNetSubnetNameCbkType = 19, + defrNetEndCbkType = 20, + defrPathCbkType = 21, + defrVersionCbkType = 22, + defrVersionStrCbkType = 23, + defrComponentExtCbkType = 24, + defrPinExtCbkType = 25, + defrViaExtCbkType = 26, + defrNetConnectionExtCbkType = 27, + defrNetExtCbkType = 28, + defrGroupExtCbkType = 29, + defrScanChainExtCbkType = 30, + defrIoTimingsExtCbkType = 31, + defrPartitionsExtCbkType = 32, + defrHistoryCbkType = 33, + defrDieAreaCbkType = 34, + defrCanplaceCbkType = 35, + defrCannotOccupyCbkType = 36, + defrPinCapCbkType = 37, + defrDefaultCapCbkType = 38, + defrStartPinsCbkType = 39, + defrPinCbkType = 40, + defrPinEndCbkType = 41, + defrRowCbkType = 42, + defrTrackCbkType = 43, + defrGcellGridCbkType = 44, + defrViaStartCbkType = 45, + defrViaCbkType = 46, + defrViaEndCbkType = 47, + defrRegionStartCbkType = 48, + defrRegionCbkType = 49, + defrRegionEndCbkType = 50, + defrSNetStartCbkType = 51, + defrSNetCbkType = 52, + defrSNetPartialPathCbkType = 53, + defrSNetWireCbkType = 54, + defrSNetEndCbkType = 55, + defrGroupsStartCbkType = 56, + defrGroupNameCbkType = 57, + defrGroupMemberCbkType = 58, + defrGroupCbkType = 59, + defrGroupsEndCbkType = 60, + defrAssertionsStartCbkType = 61, + defrAssertionCbkType = 62, + defrAssertionsEndCbkType = 63, + defrConstraintsStartCbkType = 64, + defrConstraintCbkType = 65, + defrConstraintsEndCbkType = 66, + defrScanchainsStartCbkType = 67, + defrScanchainCbkType = 68, + defrScanchainsEndCbkType = 69, + defrIOTimingsStartCbkType = 70, + defrIOTimingCbkType = 71, + defrIOTimingsEndCbkType = 72, + defrFPCStartCbkType = 73, + defrFPCCbkType = 74, + defrFPCEndCbkType = 75, + defrTimingDisablesStartCbkType = 76, + defrTimingDisableCbkType = 77, + defrTimingDisablesEndCbkType = 78, + defrPartitionsStartCbkType = 79, + defrPartitionCbkType = 80, + defrPartitionsEndCbkType = 81, + defrPinPropStartCbkType = 82, + defrPinPropCbkType = 83, + defrPinPropEndCbkType = 84, + defrBlockageStartCbkType = 85, + defrBlockageCbkType = 86, + defrBlockageEndCbkType = 87, + defrSlotStartCbkType = 88, + defrSlotCbkType = 89, + defrSlotEndCbkType = 90, + defrFillStartCbkType = 91, + defrFillCbkType = 92, + defrFillEndCbkType = 93, + defrCaseSensitiveCbkType = 94, + defrNonDefaultStartCbkType = 95, + defrNonDefaultCbkType = 96, + defrNonDefaultEndCbkType = 97, + defrStylesStartCbkType = 98, + defrStylesCbkType = 99, + defrStylesEndCbkType = 100, + defrExtensionCbkType = 101, + + /* NEW CALLBACK - If you are creating a new callback, you must add */ + /* a unique item to this enum for each callback routine. When the */ + /* callback is called in def.y you have to supply this enum item */ + /* as an argument in the call. */ + + defrComponentMaskShiftLayerCbkType = 102, + defrDesignEndCbkType = 103 +} defrCallbackType_e; + +/* Declarations of function signatures for each type of callback. */ +/* These declarations are type-safe when compiling with ANSI C */ +/* or C++; you will only be able to register a function pointer */ +/* with the correct signature for a given type of callback. */ +/* */ +/* Each callback function is expected to return 0 if successful. */ +/* A non-zero return code will cause the reader to abort. */ +/* */ +/* The defrDesignStart and defrDesignEnd callback is only called once. */ +/* Other callbacks may be called multiple times, each time with a different */ +/* set of data. */ +/* */ +/* For each callback, the Def API will make the callback to the */ +/* function supplied by the client, which should either make a copy */ +/* of the Def object, or store the data in the client's own data structures. */ +/* The Def API will delete or reuse each object after making the callback, */ +/* so the client should not keep a pointer to it. */ +/* */ +/* All callbacks pass the user data pointer provided in defrRead() */ +/* or defrSetUserData() back to the client; this can be used by the */ +/* client to obtain access to the rest of the client's data structures. */ +/* */ +/* The user data pointer is obtained using defrGetUserData() immediately */ +/* prior to making each callback, so the client is free to change the */ +/* user data on the fly if necessary. */ +/* */ +/* Callbacks with the same signature are passed a callback type */ +/* parameter, which allows an application to write a single callback */ +/* function, register that function for multiple callbacks, then */ +/* switch based on the callback type to handle the appropriate type of */ +/* data. */ + +/* A declaration of the signature of all callbacks that return nothing. */ +typedef int (*defrVoidCbkFnType) (defrCallbackType_e, void* v, defiUserData); + +/* A declaration of the signature of all callbacks that return a string. */ +typedef int (*defrStringCbkFnType) (defrCallbackType_e, const char *string, defiUserData); + +/* A declaration of the signature of all callbacks that return a integer. */ +typedef int (*defrIntegerCbkFnType) (defrCallbackType_e, int number, defiUserData); + +/* A declaration of the signature of all callbacks that return a double. */ +typedef int (*defrDoubleCbkFnType) (defrCallbackType_e, double number, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiProp. */ +typedef int (*defrPropCbkFnType) (defrCallbackType_e, defiProp *prop, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiSite. */ +typedef int (*defrSiteCbkFnType) (defrCallbackType_e, defiSite *site, defiUserData); + +/* A declaration of the signature of all callbacks that return a defComponent */ +typedef int (*defrComponentCbkFnType) (defrCallbackType_e, defiComponent *comp, defiUserData); + +/* A declaration of the signature of all callbacks that return a defComponent */ +typedef int (*defrComponentMaskShiftLayerCbkFnType) (defrCallbackType_e, defiComponentMaskShiftLayer *comp, defiUserData); + +/* A declaration of the signature of all callbacks that return a defNet. */ +typedef int (*defrNetCbkFnType) (defrCallbackType_e, defiNet *net, defiUserData); + +/* A declaration of the signature of all callbacks that return a defPath. */ +typedef int (*defrPathCbkFnType) (defrCallbackType_e, defiPath *path, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiBox. */ +typedef int (*defrBoxCbkFnType) (defrCallbackType_e, defiBox *box, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiPinCap. */ +typedef int (*defrPinCapCbkFnType) (defrCallbackType_e, defiPinCap *pincap, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiPin. */ +typedef int (*defrPinCbkFnType) (defrCallbackType_e, defiPin *pin, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiRow. */ +typedef int (*defrRowCbkFnType) (defrCallbackType_e, defiRow *row, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiTrack. */ +typedef int (*defrTrackCbkFnType) (defrCallbackType_e, defiTrack *track, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiGcellGri */ +typedef int (*defrGcellGridCbkFnType) (defrCallbackType_e, defiGcellGrid *grid, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiVia. */ +typedef int (*defrViaCbkFnType) (defrCallbackType_e, defiVia *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiRegion. */ +typedef int (*defrRegionCbkFnType) (defrCallbackType_e, defiRegion *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiGroup. */ +typedef int (*defrGroupCbkFnType) (defrCallbackType_e, defiGroup *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiAssertio */ +typedef int (*defrAssertionCbkFnType) (defrCallbackType_e, defiAssertion *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiScanChai */ +typedef int (*defrScanchainCbkFnType) (defrCallbackType_e, defiScanchain *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiIOTiming */ +typedef int (*defrIOTimingCbkFnType) (defrCallbackType_e, defiIOTiming *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiFPC. */ +typedef int (*defrFPCCbkFnType) (defrCallbackType_e, defiFPC *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiTimingDi */ +typedef int (*defrTimingDisableCbkFnType) (defrCallbackType_e, defiTimingDisable *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiPartitio */ +typedef int (*defrPartitionCbkFnType) (defrCallbackType_e, defiPartition *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiPinProp. */ +typedef int (*defrPinPropCbkFnType) (defrCallbackType_e, defiPinProp *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiBlockage */ +typedef int (*defrBlockageCbkFnType) (defrCallbackType_e, defiBlockage *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiSlot. */ +typedef int (*defrSlotCbkFnType) (defrCallbackType_e, defiSlot *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiFill. */ +typedef int (*defrFillCbkFnType) (defrCallbackType_e, defiFill *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiNonDefau */ +typedef int (*defrNonDefaultCbkFnType) (defrCallbackType_e, defiNonDefault *, defiUserData); + +/* A declaration of the signature of all callbacks that return a defiStyles. */ +typedef int (*defrStylesCbkFnType) (defrCallbackType_e, defiStyles *, defiUserData); + +/* NEW CALLBACK - Each callback must return user data, enum, and */ +/* OUR-DATA item. We must define a callback function type for */ +/* each type of OUR-DATA. Some routines return a string, some */ +/* return an integer, and some return a pointer to a class. */ +/* If you create a new class, then you must create a new function */ +/* type here to return that class to the user. */ + +/* The reader initialization. Must be called before defrRead(). */ +EXTERN int defrInit (); +EXTERN int defrInitSession (int startSession); + +/* obsoleted now. */ +EXTERN int defrReset (); + +/*Sets all parser memory into init state. */ +EXTERN int defrClear (); + +/* Change the comment character in the DEF file. The default */ +/* is '#' */ +EXTERN void defrSetCommentChar (char c); + +/* Functions to call to set specific actions in the parser. */ +EXTERN void defrSetAddPathToNet (); +EXTERN void defrSetAllowComponentNets (); +EXTERN int defrGetAllowComponentNets (); +EXTERN void defrSetCaseSensitivity (int caseSense); + +/* Functions to keep track of callbacks that the user did not */ +/* supply. Normally all parts of the DEF file that the user */ +/* does not supply a callback for will be ignored. These */ +/* routines tell the parser count the DEF constructs that are */ +/* present in the input file, but did not trigger a callback. */ +/* This should help you find any "important" DEF constructs that */ +/* you are ignoring. */ +EXTERN void defrSetRegisterUnusedCallbacks (); +EXTERN void defrPrintUnusedCallbacks (FILE* log); + +/* Obsoleted now. */ +EXTERN int defrReleaseNResetMemory (); + +/* The main reader function. */ +/* The file should already be opened. This requirement allows */ +/* the reader to be used with stdin or a pipe. The file name */ +/* is only used for error messages. */ +EXTERN int defrRead (FILE * file, const char * fileName, defiUserData userData, int case_sensitive); + +/* Set/get the client-provided user data. defi doesn't look at */ +/* this data at all, it simply passes the opaque defiUserData pointer */ +/* back to the application with each callback. The client can */ +/* change the data at any time, and it will take effect on the */ +/* next callback. The defi reader and writer maintain separate */ +/* user data pointers. */ +EXTERN void defrSetUserData (defiUserData p0); +EXTERN defiUserData defrGetUserData (); + +/* Functions to call to register a callback function or get the function */ +/*pointer after it has been registered. */ +/* */ + +/* Register one function for all callbacks with the same signature */ +EXTERN void defrSetArrayNameCbk (defrStringCbkFnType p0); +EXTERN void defrSetAssertionCbk (defrAssertionCbkFnType p0); +EXTERN void defrSetAssertionsStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetAssertionsEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetBlockageCbk (defrBlockageCbkFnType p0); +EXTERN void defrSetBlockageStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetBlockageEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetBusBitCbk (defrStringCbkFnType p0); +EXTERN void defrSetCannotOccupyCbk (defrSiteCbkFnType p0); +EXTERN void defrSetCanplaceCbk (defrSiteCbkFnType p0); +EXTERN void defrSetCaseSensitiveCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetComponentCbk (defrComponentCbkFnType p0); +EXTERN void defrSetComponentExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetComponentStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetComponentEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetConstraintCbk (defrAssertionCbkFnType p0); +EXTERN void defrSetConstraintsStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetConstraintsEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetDefaultCapCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetDesignCbk (defrStringCbkFnType p0); +EXTERN void defrSetDesignEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetDieAreaCbk (defrBoxCbkFnType p0); +EXTERN void defrSetDividerCbk (defrStringCbkFnType p0); +EXTERN void defrSetExtensionCbk (defrStringCbkFnType p0); +EXTERN void defrSetFillCbk (defrFillCbkFnType p0); +EXTERN void defrSetFillStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetFillEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetFPCCbk (defrFPCCbkFnType p0); +EXTERN void defrSetFPCStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetFPCEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetFloorPlanNameCbk (defrStringCbkFnType p0); +EXTERN void defrSetGcellGridCbk (defrGcellGridCbkFnType p0); +EXTERN void defrSetGroupNameCbk (defrStringCbkFnType p0); +EXTERN void defrSetGroupMemberCbk (defrStringCbkFnType p0); +EXTERN void defrSetComponentMaskShiftLayerCbk (defrComponentMaskShiftLayerCbkFnType p0); +EXTERN void defrSetGroupCbk (defrGroupCbkFnType p0); +EXTERN void defrSetGroupExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetGroupsStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetGroupsEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetHistoryCbk (defrStringCbkFnType p0); +EXTERN void defrSetIOTimingCbk (defrIOTimingCbkFnType p0); +EXTERN void defrSetIOTimingsStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetIOTimingsEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetIoTimingsExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetNetCbk (defrNetCbkFnType p0); +EXTERN void defrSetNetNameCbk (defrStringCbkFnType p0); +EXTERN void defrSetNetNonDefaultRuleCbk (defrStringCbkFnType p0); +EXTERN void defrSetNetConnectionExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetNetExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetNetPartialPathCbk (defrNetCbkFnType p0); +EXTERN void defrSetNetSubnetNameCbk (defrStringCbkFnType p0); +EXTERN void defrSetNetStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetNetEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetNonDefaultCbk (defrNonDefaultCbkFnType p0); +EXTERN void defrSetNonDefaultStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetNonDefaultEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetPartitionCbk (defrPartitionCbkFnType p0); +EXTERN void defrSetPartitionsExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetPartitionsStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetPartitionsEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetPathCbk (defrPathCbkFnType p0); +EXTERN void defrSetPinCapCbk (defrPinCapCbkFnType p0); +EXTERN void defrSetPinCbk (defrPinCbkFnType p0); +EXTERN void defrSetPinExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetPinPropCbk (defrPinPropCbkFnType p0); +EXTERN void defrSetPinPropStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetPinPropEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetPropCbk (defrPropCbkFnType p0); +EXTERN void defrSetPropDefEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetPropDefStartCbk (defrVoidCbkFnType p0); +EXTERN void defrSetRegionCbk (defrRegionCbkFnType p0); +EXTERN void defrSetRegionStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetRegionEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetRowCbk (defrRowCbkFnType p0); +EXTERN void defrSetSNetCbk (defrNetCbkFnType p0); +EXTERN void defrSetSNetStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetSNetEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetSNetPartialPathCbk (defrNetCbkFnType p0); +EXTERN void defrSetSNetWireCbk (defrNetCbkFnType p0); +EXTERN void defrSetScanChainExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetScanchainCbk (defrScanchainCbkFnType p0); +EXTERN void defrSetScanchainsStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetScanchainsEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetSiteCbk (defrSiteCbkFnType p0); +EXTERN void defrSetSlotCbk (defrSlotCbkFnType p0); +EXTERN void defrSetSlotStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetSlotEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetStartPinsCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetStylesCbk (defrStylesCbkFnType p0); +EXTERN void defrSetStylesStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetStylesEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetPinEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetTechnologyCbk (defrStringCbkFnType p0); +EXTERN void defrSetTimingDisableCbk (defrTimingDisableCbkFnType p0); +EXTERN void defrSetTimingDisablesStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetTimingDisablesEndCbk (defrVoidCbkFnType p0); +EXTERN void defrSetTrackCbk (defrTrackCbkFnType p0); +EXTERN void defrSetUnitsCbk (defrDoubleCbkFnType p0); +EXTERN void defrSetVersionCbk (defrDoubleCbkFnType p0); +EXTERN void defrSetVersionStrCbk (defrStringCbkFnType p0); +EXTERN void defrSetViaCbk (defrViaCbkFnType p0); +EXTERN void defrSetViaExtCbk (defrStringCbkFnType p0); +EXTERN void defrSetViaStartCbk (defrIntegerCbkFnType p0); +EXTERN void defrSetViaEndCbk (defrVoidCbkFnType p0); + +/* NEW CALLBACK - For each new callback you create, you must */ +/* create a routine that allows the user to set it. Add the */ +/* setting routines here. */ + +/*Set all of the callbacks that have not yet been set to the following */ +/*function. This is especially useful if you want to check to see */ +/*if you forgot anything. */ +EXTERN void defrUnsetCallbacks (); + +/* Functions to call to unregister a callback function. */ +EXTERN void defrUnsetArrayNameCbk (); +EXTERN void defrUnsetAssertionCbk (); +EXTERN void defrUnsetAssertionsStartCbk (); +EXTERN void defrUnsetAssertionsEndCbk (); +EXTERN void defrUnsetBlockageCbk (); +EXTERN void defrUnsetBlockageStartCbk (); +EXTERN void defrUnsetBlockageEndCbk (); +EXTERN void defrUnsetBusBitCbk (); +EXTERN void defrUnsetCannotOccupyCbk (); +EXTERN void defrUnsetCanplaceCbk (); +EXTERN void defrUnsetCaseSensitiveCbk (); +EXTERN void defrUnsetComponentCbk (); +EXTERN void defrUnsetComponentExtCbk (); +EXTERN void defrUnsetComponentStartCbk (); +EXTERN void defrUnsetComponentEndCbk (); +EXTERN void defrUnsetConstraintCbk (); +EXTERN void defrUnsetConstraintsStartCbk (); +EXTERN void defrUnsetConstraintsEndCbk (); +EXTERN void defrUnsetDefaultCapCbk (); +EXTERN void defrUnsetDesignCbk (); +EXTERN void defrUnsetDesignEndCbk (); +EXTERN void defrUnsetDieAreaCbk (); +EXTERN void defrUnsetDividerCbk (); +EXTERN void defrUnsetExtensionCbk (); +EXTERN void defrUnsetFillCbk (); +EXTERN void defrUnsetFillStartCbk (); +EXTERN void defrUnsetFillEndCbk (); +EXTERN void defrUnsetFPCCbk (); +EXTERN void defrUnsetFPCStartCbk (); +EXTERN void defrUnsetFPCEndCbk (); +EXTERN void defrUnsetFloorPlanNameCbk (); +EXTERN void defrUnsetGcellGridCbk (); +EXTERN void defrUnsetGroupCbk (); +EXTERN void defrUnsetGroupExtCbk (); +EXTERN void defrUnsetGroupMemberCbk (); +EXTERN void defrUnsetComponentMaskShiftLayerCbk (); +EXTERN void defrUnsetGroupNameCbk (); +EXTERN void defrUnsetGroupsStartCbk (); +EXTERN void defrUnsetGroupsEndCbk (); +EXTERN void defrUnsetHistoryCbk (); +EXTERN void defrUnsetIOTimingCbk (); +EXTERN void defrUnsetIOTimingsStartCbk (); +EXTERN void defrUnsetIOTimingsEndCbk (); +EXTERN void defrUnsetIOTimingsExtCbk (); +EXTERN void defrUnsetNetCbk (); +EXTERN void defrUnsetNetNameCbk (); +EXTERN void defrUnsetNetNonDefaultRuleCbk (); +EXTERN void defrUnsetNetConnectionExtCbk (); +EXTERN void defrUnsetNetExtCbk (); +EXTERN void defrUnsetNetPartialPathCbk (); +EXTERN void defrUnsetNetSubnetNameCbk (); +EXTERN void defrUnsetNetStartCbk (); +EXTERN void defrUnsetNetEndCbk (); +EXTERN void defrUnsetNonDefaultCbk (); +EXTERN void defrUnsetNonDefaultStartCbk (); +EXTERN void defrUnsetNonDefaultEndCbk (); +EXTERN void defrUnsetPartitionCbk (); +EXTERN void defrUnsetPartitionsExtCbk (); +EXTERN void defrUnsetPartitionsStartCbk (); +EXTERN void defrUnsetPartitionsEndCbk (); +EXTERN void defrUnsetPathCbk (); +EXTERN void defrUnsetPinCapCbk (); +EXTERN void defrUnsetPinCbk (); +EXTERN void defrUnsetPinEndCbk (); +EXTERN void defrUnsetPinExtCbk (); +EXTERN void defrUnsetPinPropCbk (); +EXTERN void defrUnsetPinPropStartCbk (); +EXTERN void defrUnsetPinPropEndCbk (); +EXTERN void defrUnsetPropCbk (); +EXTERN void defrUnsetPropDefEndCbk (); +EXTERN void defrUnsetPropDefStartCbk (); +EXTERN void defrUnsetRegionCbk (); +EXTERN void defrUnsetRegionStartCbk (); +EXTERN void defrUnsetRegionEndCbk (); +EXTERN void defrUnsetRowCbk (); +EXTERN void defrUnsetScanChainExtCbk (); +EXTERN void defrUnsetScanchainCbk (); +EXTERN void defrUnsetScanchainsStartCbk (); +EXTERN void defrUnsetScanchainsEndCbk (); +EXTERN void defrUnsetSiteCbk (); +EXTERN void defrUnsetSlotCbk (); +EXTERN void defrUnsetSlotStartCbk (); +EXTERN void defrUnsetSlotEndCbk (); +EXTERN void defrUnsetSNetWireCbk (); +EXTERN void defrUnsetSNetCbk (); +EXTERN void defrUnsetSNetStartCbk (); +EXTERN void defrUnsetSNetEndCbk (); +EXTERN void defrUnsetSNetPartialPathCbk (); +EXTERN void defrUnsetStartPinsCbk (); +EXTERN void defrUnsetStylesCbk (); +EXTERN void defrUnsetStylesStartCbk (); +EXTERN void defrUnsetStylesEndCbk (); +EXTERN void defrUnsetTechnologyCbk (); +EXTERN void defrUnsetTimingDisableCbk (); +EXTERN void defrUnsetTimingDisablesStartCbk (); +EXTERN void defrUnsetTimingDisablesEndCbk (); +EXTERN void defrUnsetTrackCbk (); +EXTERN void defrUnsetUnitsCbk (); +EXTERN void defrUnsetVersionCbk (); +EXTERN void defrUnsetVersionStrCbk (); +EXTERN void defrUnsetViaCbk (); +EXTERN void defrUnsetViaExtCbk (); +EXTERN void defrUnsetViaStartCbk (); +EXTERN void defrUnsetViaEndCbk (); + +/* Routine to set all unused callbacks. This is useful for checking */ +/*to see if you missed something. */ +EXTERN void defrSetUnusedCallbacks (defrVoidCbkFnType func); + +/* Return the current line number in the input file. */ +EXTERN int defrLineNumber (); +EXTERN long long defrLongLineNumber (); + +/* Routine to set the message logging routine for errors */ + typedef void (*DEFI_LOG_FUNCTION) (const char*); +EXTERN void defrSetLogFunction (DEFI_LOG_FUNCTION p0); + +/* Routine to set the message logging routine for warnings */ +#ifndef DEFI_WARNING_LOG_FUNCTION + typedef void (*DEFI_WARNING_LOG_FUNCTION) (const char*); +#endif +EXTERN void defrSetWarningLogFunction (DEFI_WARNING_LOG_FUNCTION p0); + +/* Routine to set the user defined malloc routine */ +typedef void* (*DEFI_MALLOC_FUNCTION) (size_t); +EXTERN void defrSetMallocFunction (DEFI_MALLOC_FUNCTION p0); + +/* Routine to set the user defined realloc routine */ +typedef void* (*DEFI_REALLOC_FUNCTION) (void*, size_t); +EXTERN void defrSetReallocFunction (DEFI_REALLOC_FUNCTION p0); + +/* Routine to set the user defined free routine */ +typedef void (*DEFI_FREE_FUNCTION) (void *); +EXTERN void defrSetFreeFunction (DEFI_FREE_FUNCTION p0); + +/* Routine to set the line number of the file that is parsing routine (takes */ +typedef void (*DEFI_LINE_NUMBER_FUNCTION) (int); +EXTERN void defrSetLineNumberFunction (DEFI_LINE_NUMBER_FUNCTION p0); + +/* Routine to set the line number of the file that is parsing routine (takes */ +typedef void (*DEFI_LONG_LINE_NUMBER_FUNCTION) (long long); +EXTERN void defrSetLongLineNumberFunction (DEFI_LONG_LINE_NUMBER_FUNCTION p0); + +/* Set the number of lines before calling the line function callback routine */ +/* Default is 10000 */ +EXTERN void defrSetDeltaNumberLines (int p0); + +/* Routine to set the read function */ +typedef size_t (*DEFI_READ_FUNCTION) (FILE*, char*, size_t); +EXTERN void defrSetReadFunction (DEFI_READ_FUNCTION p0); +EXTERN void defrUnsetReadFunction (); + +/* Routine to set the defrWarning.log to open as append instead for write */ +/* New in 5.7 */ +EXTERN void defrSetOpenLogFileAppend (); +EXTERN void defrUnsetOpenLogFileAppend (); + +/* Routine to set the magic comment found routine */ +typedef void (*DEFI_MAGIC_COMMENT_FOUND_FUNCTION) (); +EXTERN void defrSetMagicCommentFoundFunction (DEFI_MAGIC_COMMENT_FOUND_FUNCTION p0); + +/* Routine to set the magic comment string */ +EXTERN void defrSetMagicCommentString (char * p0); + +/* Routine to disable string property value process, default it will process */ +/* the value string */ +EXTERN void defrDisablePropStrProcess (); + +/* Testing purposes only */ +EXTERN void defrSetNLines (long long n); + +/* Routine to set the max number of warnings for a perticular section */ + +EXTERN void defrSetAssertionWarnings (int warn); +EXTERN void defrSetBlockageWarnings (int warn); +EXTERN void defrSetCaseSensitiveWarnings (int warn); +EXTERN void defrSetComponentWarnings (int warn); +EXTERN void defrSetConstraintWarnings (int warn); +EXTERN void defrSetDefaultCapWarnings (int warn); +EXTERN void defrSetGcellGridWarnings (int warn); +EXTERN void defrSetIOTimingWarnings (int warn); +EXTERN void defrSetNetWarnings (int warn); +EXTERN void defrSetNonDefaultWarnings (int warn); +EXTERN void defrSetPinExtWarnings (int warn); +EXTERN void defrSetPinWarnings (int warn); +EXTERN void defrSetRegionWarnings (int warn); +EXTERN void defrSetRowWarnings (int warn); +EXTERN void defrSetScanchainWarnings (int warn); +EXTERN void defrSetSNetWarnings (int warn); +EXTERN void defrSetStylesWarnings (int warn); +EXTERN void defrSetTrackWarnings (int warn); +EXTERN void defrSetUnitsWarnings (int warn); +EXTERN void defrSetVersionWarnings (int warn); +EXTERN void defrSetViaWarnings (int warn); + +/* Handling output messages */ +EXTERN void defrDisableParserMsgs (int nMsg, int* msgs); +EXTERN void defrEnableParserMsgs (int nMsg, int* msgs); +EXTERN void defrEnableAllMsgs (); +EXTERN void defrSetTotalMsgLimit (int totNumMsgs); +EXTERN void defrSetLimitPerMsg (int msgId, int numMsg); + +/* Return codes for the user callbacks. */ +/*The user should return one of these values. */ +#define PARSE_OK 0 +#define STOP_PARSE 1 +#define PARSE_ERROR 2 + +/* Add this alias to the list for the parser */ +EXTERN void defrAddAlias (const char* key, const char* value, int marked, defrData * data); + +#endif diff --git a/lefdef/src/def/cdef/defwWriter.h b/lefdef/src/def/cdef/defwWriter.h new file mode 100644 index 00000000..d880c8b7 --- /dev/null +++ b/lefdef/src/def/cdef/defwWriter.h @@ -0,0 +1,1455 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFWWRITER_H +#define CDEFWWRITER_H + +#include +#include "defiTypedefs.h" + +/* Return codes for writing functions: */ +#define DEFW_OK 0 +#define DEFW_UNINITIALIZED 1 +#define DEFW_BAD_ORDER 2 +#define DEFW_BAD_DATA 3 +#define DEFW_ALREADY_DEFINED 4 +#define DEFW_WRONG_VERSION 5 +#define DEFW_OBSOLETE 6 +#define DEFW_TOO_MANY_STMS 7 + /* section is smaller than the actual numbe */ + /* of statements defined in that section */ + +/* orient + 0 = N + 1 = W + 2 = S + 3 = E + 4 = FN + 5 = FW + 6 = FS + 7 = FE +*/ + +/* This routine will write a new line */ +EXTERN int defwNewLine (); + +/* The DEF writer initialization. Must be called first. + * Either this routine or defwInitCbk should be call only. + * Can't call both routines in one program. + * This routine is for user who does not want to use the callback machanism. + * Returns 0 if successful. */ +EXTERN int defwInit (FILE* f, int vers1, int version2, const char* caseSensitive, const char* dividerChar, const char* busBitChars, const char* designName, const char* technology, const char* array, const char* floorplan, double units); + +/* The DEF writer initialization. Must be called first. + * Either this routine or defwInit should be call only. + * Can't call both routines in one program. + * This routine is for user who choose to use the callback machanism. + * If user uses the callback for the writer, they need to provide + * callbacks for Version, NamesCaseSensitive, BusBitChars and DividerChar. + * These sections are required by the def. If any of these callbacks + * are missing, defaults will be used. + * Returns 0 if successful. */ +EXTERN int defwInitCbk (FILE* f); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwVersion (int vers1, int vers2); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwCaseSensitive (const char* caseSensitive); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwBusBitChars (const char* busBitChars); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwDividerChar (const char* dividerChar); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwDesignName (const char* name); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwTechnology (const char* technology); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwArray (const char* array); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwFloorplan (const char* floorplan); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwUnits (int units); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called 0 to many times. */ +EXTERN int defwHistory (const char* string); + +/* This routine must be called after the history routines (if any). + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwStartPropDef (); + +/* This routine must be called after defwStartPropDef. + * This routine can be called multiple times. + * It adds integer property definition to the statement. + * Returns 0 if successfull. + * The objType can be LIBRARY or VIA or MACRO or PIN. */ + /* NONDEFAULTRULE | MACRO | PIN */ +EXTERN int defwIntPropDef (const char* objType, const char* propName, double leftRange, double rightRange, int propValue); + +/* This routine must be called after defwStartPropDef. + * This routine can be called multiple times. + * It adds real property definition to the statement. + * Returns 0 if successfull. + * The objType can be LIBRARY or VIA or MACRO or PIN. */ + /* NONDEFAULTRULE | MACRO | PIN */ +EXTERN int defwRealPropDef (const char* objType, const char* propName, double leftRange, double rightRange, double propValue); + +/* This routine must be called after defwStartPropDef. + * This routine can be called multiple times. + * It adds string property definition to the statement. + * Returns 0 if successfull. + * The objType can be LIBRARY or VIA or MACRO or PIN. */ + /* NONDEFAULTRULE | MACRO | PIN */ +EXTERN int defwStringPropDef (const char* objType, const char* propName, double leftRange, double rightRange, const char* propValue); + +/* This routine must be called after all the properties have been + * added to the file. + * If you called defwPropertyDefinitions then this routine is NOT optional. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwEndPropDef (); + +/* This routine can be called after defwRow, defwRegion, defwComponent, + * defwPin, defwSpecialNet, defwNet, and defwGroup + * This routine is optional, it adds string property to the statement. + * Returns 0 if successful. + * This routine can be called 0 to many times */ +EXTERN int defwStringProperty (const char* propName, const char* propValue); + +/* This routine can be called after defwRow, defwRegion, defwComponent, + * defwPin, defwSpecialNet, defwNet, and defwGroup + * This routine is optional, it adds real property to the statement. + * Returns 0 if successful. + * This routine can be called 0 to many times */ +EXTERN int defwRealProperty (const char* propName, double propValue); + +/* This routine can be called after defwRow, defwRegion, defwComponent, + * defwPin, defwSpecialNet, defwNet, and defwGroup + * This routine is optional, it adds int property to the statement. + * Returns 0 if successful. + * This routine can be called 0 to many times */ +EXTERN int defwIntProperty (const char* propName, int propValue); + +/* This routine must be called after the property definitions (if any). + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwDieArea (int xl, int yl, int xh, int yh); + +/* This routine must be called after the property definitions (if any). + * This routine is optional. + * This routine is the same as defwDieArea, but accept more than 2 points + * This is a 5.6 syntax + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwDieAreaList (int num_points, int* xl, int* yh); + +/* This routine must be called after the Die Area (if any). + * This routine is optional. + * Returns 0 if successful. + * The integer "orient" and operation of the do is explained in + * the documentation. + * In 5.6, the DO syntax is optional and the STEP syntax is optional in DO */ +EXTERN int defwRow (const char* rowName, const char* rowType, int x_orig, int y_orig, int orient, int do_count, int do_increment, int xstep, int ystep); + +/* This routine must be called after the Die Area (if any). + * This routine is optional. + * Returns 0 if successful. + * This routine is the same as defwRow, excpet orient is a char* */ +EXTERN int defwRowStr (const char* rowName, const char* rowType, int x_orig, int y_orig, const char* orient, int do_count, int do_increment, int xstep, int ystep); + +/* This routine must be called after the defwRow (if any). + * This routine is optional. + * Returns 0 if successful. + * The operation of the do is explained in the documentation. */ +EXTERN int defwTracks (const char* master, int doStart, int doCount, int doStep, int numLayers, const char** layers, int mask, int sameMask); + +/* This routine must be called after the defwTracks (if any). + * This routine is optional. + * Returns 0 if successful. + * The operation of the do is explained in the documentation. */ +EXTERN int defwGcellGrid (const char* master, int doStart, int doCount, int doStep); + +/* This routine must be called after the defwTracks (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the default capacitance section. All of the + * capacitances must follow. + * The count is the number of defwDefaultCap calls to follow. + * The routine can be called only once. + * This api is obsolete in 5.4. */ +EXTERN int defwStartDefaultCap (int count); + +/* This routine is called once for each default cap. The calls must + * be preceeded by a call to defwStartDefaultCap and must be + * terminated by a call to defwEndDefaultCap. + * Returns 0 if successful. + * This api is obsolete in 5.4. */ +EXTERN int defwDefaultCap (int pins, double cap); + +/* This routine must be called after the defwDefaultCap calls (if any). + * Returns 0 if successful. + * If the count in StartDefaultCap is not the same as the number of + * calls to DefaultCap then DEFW_BAD_DATA will return returned. + * The routine can be called only once. + * This api is obsolete in 5.4. */ +EXTERN int defwEndDefaultCap (); + +/* This routine must be called after the defwDefaultCap calls (if any). + * The operation of the do is explained in the documentation. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. */ +EXTERN int defwCanPlace (const char* master, int xOrig, int yOrig, int orient, int doCnt, int doInc, int xStep, int yStep); + +/* This routine must be called after the defwDefaultCap calls (if any). + * The operation of the do is explained in the documentation. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. + * This routine is the same as defwCanPlace, except orient is a char* */ +EXTERN int defwCanPlaceStr (const char* master, int xOrig, int yOrig, const char* orient, int doCnt, int doInc, int xStep, int yStep); + +/* This routine must be called after the defwCanPlace calls (if any). + * The operation of the do is explained in the documentation. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. */ +EXTERN int defwCannotOccupy (const char* master, int xOrig, int yOrig, int orient, int doCnt, int doInc, int xStep, int yStep); + +/* This routine must be called after the defwCanPlace calls (if any). + * The operation of the do is explained in the documentation. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. + * This routine is the same as defwCannotOccupy, except orient is a char* */ +EXTERN int defwCannotOccupyStr (const char* master, int xOrig, int yOrig, const char* orient, int doCnt, int doInc, int xStep, int yStep); + +/* This routine must be called after defwCannotOccupy (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the via section. All of the vias must follow. + * The count is the number of defwVia calls to follow. + * The routine can be called only once. */ +EXTERN int defwStartVias (int count); + +/* These routines enter each via into the file. + * These routines must be called after the defwStartVias call. + * defwViaName should be called first, follow either by defwViaPattern or + * defwViaLayer. At the end of each via, defwOneViaEnd should be called + * These routines are for [- viaName [+ PATTERNNAME patternName + RECT layerName + * pt pt]...;]... + * Returns 0 if successful. + * The routines can be called many times. */ +EXTERN int defwViaName (const char* name); + +EXTERN int defwViaPattern (const char* patternName); + +/* This routine can be called multiple times. */ +/* mask is 5.8 syntax */ +EXTERN int defwViaRect (const char* layerName, int xl, int yl, int xh, int yh, int mask); + +/* This is a 5.6 syntax + * This routine can be called multiple times. */ +/* mask is 5.8 syntax */ +EXTERN int defwViaPolygon (const char* layerName, int num_polys, double* xl, double* yl, int mask); + +/* These routine must be called after defwViaName. + * Either this routine or defwViaPattern can be called after each + * defwViaName is called. + * This is a 5.6 syntax + * Returns 0 if successful + * The routine can be called only once per defwViaName called. */ +EXTERN int defwViaViarule (const char* viaRuleName, double xCutSize, double yCutSize, const char* botMetalLayer, const char* cutLayer, const char* topMetalLayer, double xCutSpacing, double yCutSpacing, double xBotEnc, double yBotEnc, double xTopEnc, double yTopEnc); + +/* This routine can call only after defwViaViarule. + * It can only be called once. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwViaViaruleRowCol (int numCutRows, int numCutCols); + +/* This routine can call only after defwViaViarule. + * It can only be called once. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwViaViaruleOrigin (int xOffset, int yOffset); + +/* This routine can call only after defwViaViarule. + * It can only be called once. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwViaViaruleOffset (int xBotOffset, int yBotOffset, int xTopOffset, int yTopOffset); + +/* This routine can call only after defwViaViarule. + * It can only be called once. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwViaViarulePattern (const char* cutPattern); + +EXTERN int defwOneViaEnd (); + +/* This routine must be called after the defwVia calls. + * Returns 0 if successful. + * If the count in StartVias is not the same as the number of + * calls to Via or ViaPattern then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +EXTERN int defwEndVias (); + +/* This routine must be called after via section (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the region section. All of the regions must follow. + * The count is the number of defwRegion calls to follow. + * The routine can be called only once. */ +EXTERN int defwStartRegions (int count); + +/* This routine enter each region into the file. + * This routine must be called after the defwStartRegions call. + * Returns 0 if successful. + * The routine can be called many times. */ +EXTERN int defwRegionName (const char* name); + +/* This routine enter the region point to the region name. + * This routine must be called after the defwRegionName call. + * Returns 0 if successful. + * The routine can be called many times. */ +EXTERN int defwRegionPoints (int xl, int yl, int xh, int yh); + +/* This routine enter the region type, FENCE | GUIDE. + * This routine must be called after the defwRegionName call. + * This is a 5.4.1 syntax. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwRegionType (const char* type); + +/* This routine must be called after the defwRegion calls. + * Returns 0 if successful. + * If the count in StartRegions is not the same as the number of + * calls to Region or RegionPattern then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +EXTERN int defwEndRegions (); + +/* This is a 5.8 syntax. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwComponentMaskShiftLayers (const char** layerNames, int numLayerName); + +/* This routine must be called after the regions section (if any). + * This section of routines is NOT optional. + * Returns 0 if successful. + * The routine starts the components section. All of the components + * must follow. + * The count is the number of defwComponent calls to follow. + * The routine can be called only once. */ +EXTERN int defwStartComponents (int count); + +/* This routine enter each component into the file. + * This routine must be called after the defwStartComponents call. + * The optional fields will be ignored if they are set to zero + * (except for weight which must be set to -1.0). + * Returns 0 if successful. + * The routine can be called many times. */ + + /* USER | TIMING */ + /* foreignx, foreigny & orients */ + /* PLACED | UNPLACED */ + /* xh, yh or region */ +EXTERN int defwComponent (const char* instance, const char* master, int numNetName, const char** netNames, const char* eeq, const char* genName, const char* genParemeters, const char* source, int numForeign, const char** foreigns, int* foreignX, int* foreignY, int* foreignOrients, const char* status, int statusX, int statusY, int statusOrient, double weight, const char* region, int xl, int yl, int xh, int yh); + +/* This routine enter each component into the file. + * This routine must be called after the defwStartComponents call. + * The optional fields will be ignored if they are set to zero + * (except for weight which must be set to -1.0). + * Returns 0 if successful. + * The routine can be called many times. + * This routine is the same as defwComponent, except orient is a char** */ + /* */ + /* USER | TIMING */ + /* foreignx, foreigny & orients */ + /* PLACED | UNPLACED */ + /* xh, yh or region */ +EXTERN int defwComponentStr (const char* instance, const char* master, int numNetName, const char** netNames, const char* eeq, const char* genName, const char* genParemeters, const char* source, int numForeign, const char** foreigns, int* foreignX, int* foreignY, const char** foreignOrients, const char* status, int statusX, int statusY, const char* statusOrient, double weight, const char* region, int xl, int yl, int xh, int yh); + +/* This is a 5.8 syntax. + * Returns 0 if successful. + * The routine can be called only once. */ +EXTERN int defwComponentMaskShift (int shiftLayerMasks); + +/* This routine must be called after either the defwComponent or + * defwComponentStr. + * This routine can only called once per component. + * Either this routine or defwComponentHaloSoft can be called, but not both + * This routine is optional. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwComponentHalo (int left, int bottom, int right, int top); + +/* This routine must be called after either the defwComponent or + * defwComponentStr. + * This routine can only called once per component. + * This routine is just like defwComponentHalo, except it writes the option SOFT + * Either this routine or defwComponentHalo can be called, but not both + * This routine is optional. + * This is a 5.7 syntax. + * Returns 0 if successful. */ +EXTERN int defwComponentHaloSoft (int left, int bottom, int right, int top); + +/* This routine must be called after either the defwComponent or + * defwComponentStr. + * This routine can only called once per component. + * This routine is optional. + * This is a 5.7 syntax. + * Returns 0 if successful. */ +EXTERN int defwComponentRouteHalo (int haloDist, const char* minLayer, const char* maxLayer); + +/* This routine must be called after the defwComponent calls. + * Returns 0 if successful. + * If the count in StartComponents is not the same as the number of + * calls to Component then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +EXTERN int defwEndComponents (); + +/* This routine must be called after the components section (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the pins section. All of the pins must follow. + * The count is the number of defwPin calls to follow. + * The routine can be called only once. */ +EXTERN int defwStartPins (int count); + +/* This routine enter each pin into the file. + * This routine must be called after the defwStartPins call. + * The optional fields will be ignored if they are set to zero. + * Returns 0 if successful. + * The routine can be called many times. + * NOTE: Use defwPinLayer to write out layer with SPACING or DESIGNRULEWIDTH */ + /* INOUT | FEEDTHRU */ + /* GROUND | CLOCK | TIEOFF | ANALOG */ + /* COVER */ +EXTERN int defwPin (const char* name, const char* net, int special, const char* direction, const char* use, const char* status, int statusX, int statusY, int orient, const char* layer, int xl, int yl, int xh, int yh); + +/* This routine enter each pin into the file. + * This routine must be called after the defwStartPins call. + * The optional fields will be ignored if they are set to zero. + * Returns 0 if successful. + * The routine can be called many times. + * This routine is the same as defwPin, except orient is a char* + * NOTE: Use defwPinLayer to write out layer with SPACING or DESIGNRULEWIDTH */ + /* INOUT | FEEDTHRU */ + /* GROUND | CLOCK | TIEOFF | ANALOG */ + /* COVER */ +EXTERN int defwPinStr (const char* name, const char* net, int special, const char* direction, const char* use, const char* status, int statusX, int statusY, const char* orient, const char* layer, int xl, int yl, int xh, int yh); + +/* This routine should be called if the layer has either SPACING or + * DESIGNRULEWIDTH. If this routine is used and the pin has only one + * layer, the layer in defwPin or defwPinStr has to be null, otherwise + * the layer will be written out twice. + * This routine must be called after defwPin or defwPinStr. + * This is a 5.6 syntax. + * This routine is optional. + * Returns 0 if successful. + * This routine can be called multiple times within a pin. */ +EXTERN int defwPinLayer (const char* layerName, int spacing, int designRuleWidth, int xl, int yl, int xh, int yh, int mask); + +/* This routine must be called after defwPin or defwPinStr. + * This routine is to write out layer with polygon. + * This is a 5.6 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +EXTERN int defwPinPolygon (const char* layerName, int spacing, int designRuleWidth, int num_polys, double* xl, double* yl, int mask); + +/* This routine must be called after defwPin or defwPinStr. + * This routine is to write out layer with via. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +EXTERN int defwPinVia (const char* viaName, int xl, int yl, int mask); + +/* This routine must be called after defwPin or defwPinStr. + * This routine is to write out pin with port. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +EXTERN int defwPinPort (); + +/* This routine is called after defwPinPort. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * This routine can be called multiple times within a pin. */ +EXTERN int defwPinPortLayer (const char* layerName, int spacing, int designRuleWidth, int xl, int yl, int xh, int yh, int mask); + +/* This routine must be called after defwPinPort. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +EXTERN int defwPinPortPolygon (const char* layerName, int spacing, int designRuleWidth, int num_polys, double* xl, double* yl, int mask); + +/* This routine must be called after defwPinPort. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +EXTERN int defwPinPortVia (const char* viaName, int xl, int yl, int mask); + +/* This routine must be called after defwPinPort. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. + * NOTE: Use defwPinLayer to write out layer with SPACING or DESIGNRULEWIDTH */ +EXTERN int defwPinPortLocation (const char* status, int statusX, int statusY, const char* orient); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.6 syntax. + * The routine can be called only once per pin. */ +EXTERN int defwPinNetExpr (const char* pinExpr); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.6 syntax. + * The routine can be called only once per pin. */ +EXTERN int defwPinSupplySensitivity (const char* pinName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.6 syntax. + * The routine can be called only once per pin. */ +EXTERN int defwPinGroundSensitivity (const char* pinName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +EXTERN int defwPinAntennaPinPartialMetalArea (int value, const char* layerName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +EXTERN int defwPinAntennaPinPartialMetalSideArea (int value, const char* layerName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +EXTERN int defwPinAntennaPinPartialCutArea (int value, const char* layerName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +EXTERN int defwPinAntennaPinDiffArea (int value, const char* layerName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.5 syntax. + * The oxide can be either OXIDE1, OXIDE2, OXIDE3, or OXIDE4. + * Each oxide value can be called only once after defwPin. */ +EXTERN int defwPinAntennaModel (const char* oxide); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +EXTERN int defwPinAntennaPinGateArea (int value, const char* layerName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +EXTERN int defwPinAntennaPinMaxAreaCar (int value, const char* layerName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +EXTERN int defwPinAntennaPinMaxSideAreaCar (int value, const char* layerName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +EXTERN int defwPinAntennaPinMaxCutCar (int value, const char* layerName); + +/* This routine must be called after the defwPin calls. + * Returns 0 if successful. + * If the count in StartPins is not the same as the number of + * calls to Pin then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +EXTERN int defwEndPins (); + +/* This routine must be called after the pin section (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the pinproperties section. All of the pinproperties + * must follow. + * The count is the number of defwPinProp calls to follow. + * The routine can be called only once. */ +EXTERN int defwStartPinProperties (int count); + +/* This routine enter each pinproperty into the file. + * This routine must be called after the defwStartPinProperties call. + * The optional fields will be ignored if they are set to zero. + * Returns 0 if successful. + * The routine can be called many times. */ +EXTERN int defwPinProperty (const char* name, const char* pinName); + +/* This routine must be called after the defwPinProperty calls. + * Returns 0 if successful. + * If the count in StartPins is not the same as the number of + * calls to Pin then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +EXTERN int defwEndPinProperties (); + +/* Routines to enter a special net or nets into the file. + * You must first call defwStartSpecialNets with the number of + * nets. This section is required, even if you do not have any nets. + * For each net you should call defwSpecialNet followed by + * one or more defwSpecialNetConnection calls. + * After the connections come the options. Options are + * NOT required. + * Each net is completed by calling defwSpecialNetEndOneNet(). + * The nets section is finished by calling defwEndNets(). */ +EXTERN int defwStartSpecialNets (int count); + +/* This routine must be called after the defwStartSpecialNets it is for + * - netName */ +EXTERN int defwSpecialNet (const char* name); + +/* This routine is for compNameRegExpr, pinName, and SYNTHESIZED */ +/* It can be called multiple times */ +EXTERN int defwSpecialNetConnection (const char* inst, const char* pin, int synthesized); + +/* This routine is for + FIXEDBUMP + * This is a 5.4.1 syntax */ +EXTERN int defwSpecialNetFixedbump (); + +/* This routine is for + VOLTAGE volts */ +EXTERN int defwSpecialNetVoltage (double v); + +/* This routine is for + SPACING layerName spacing [RANGE minwidth maxwidth */ +EXTERN int defwSpecialNetSpacing (const char* layer, int spacing, double minwidth, double maxwidth); + +/* This routine is for + WIDTH layerName width */ +EXTERN int defwSpecialNetWidth (const char* layer, int width); + +/* This routine is for + SOURCE {NETLIST | DIST | USER | TIMING} */ +EXTERN int defwSpecialNetSource (const char* name); + +/* This routine is for + ORIGINAL netName */ +EXTERN int defwSpecialNetOriginal (const char* name); + +/* This routine is for + PATTERN {STEINER | BALANCED | WIREDLOGIC | TRUNK} */ +EXTERN int defwSpecialNetPattern (const char* name); + +/* This routine is for + USE {SIGNAL | POWER | GROUND | CLOCK | TIEOFF | + ANALOG | SCAN | RESET} */ +EXTERN int defwSpecialNetUse (const char* name); + +/* This routine is for + WEIGHT weight */ +EXTERN int defwSpecialNetWeight (double value); + +/* This routine is for + ESTCAP wireCapacitance */ +EXTERN int defwSpecialNetEstCap (double value); + +/* Paths are a special type of option. A path must begin + * with a defwSpecialNetPathStart and end with a defwSpecialNetPathEnd(). + * The individual parts of the path can be entered in + * any order. */ +EXTERN int defwSpecialNetPathStart (const char* typ); + /* SHIELD | NEW */ +EXTERN int defwSpecialNetShieldNetName (const char* name); + +EXTERN int defwSpecialNetPathLayer (const char* name); + +EXTERN int defwSpecialNetPathWidth (int width); + +/* This routine is optional. + * This is a 5.6 syntax. */ +EXTERN int defwSpecialNetPathStyle (int styleNum); + +EXTERN int defwSpecialNetPathShape (const char* shapeType); + /* FOLLOWPIN | IOWIRE | COREWIRE | BLOCKWIRE | FILLWIRE | BLOCKAGEWIR */ + +/* This routine is optional. + This is a 5.8 syntax. + * Returns 0 if successful. */ +EXTERN int defwSpecialNetPathMask (int colorMask); + +/* x and y location of the path */ +EXTERN int defwSpecialNetPathPoint (int numPts, double* pointx, double* pointy); +EXTERN int defwSpecialNetPathVia (const char* name); + +/* This routine is called after defwSpecialNetPath + * This is a 5.4.1 syntax */ +EXTERN int defwSpecialNetPathViaData (int numX, int numY, int stepX, int stepY); + +/* x and y location of the path */ +EXTERN int defwSpecialNetPathPointWithWireExt (int numPts, double* pointx, double* pointy, double* optValue); + +EXTERN int defwSpecialNetPathEnd (); + +/* This is a 5.6 syntax + * This routine can be called multiple times. */ +EXTERN int defwSpecialNetPolygon (const char* layerName, int num_polys, double* xl, double* yl); + +/* This is a 5.6 syntax + * This routine can be called multiple times. */ +EXTERN int defwSpecialNetRect (const char* layerName, int xl, int yl, int xh, int yh); + +EXTERN int defwSpecialNetVia (const char* layerName); + +EXTERN int defwSpecialNetViaWithOrient (const char* layerName, int orient); + +EXTERN int defwSpecialNetViaPoints (int num_points, double* xl, double* yl); + +/* This routine is called at the end of each net */ +EXTERN int defwSpecialNetEndOneNet (); + +/* 5.3 for special net */ +/* Shields are a special type of option. A shield must begin + * with a defwSpecialNetShieldStart and end with a defwSpecialNetShieldEnd(). + * The individual parts of the shield can be entered in + * any order. */ +EXTERN int defwSpecialNetShieldStart (const char* name); + +EXTERN int defwSpecialNetShieldLayer (const char* name); +EXTERN int defwSpecialNetShieldWidth (int width); +EXTERN int defwSpecialNetShieldShape (const char* shapeType); + /* FOLLOWPIN | IOWIRE | COREWIRE | BLOCKWIRE | FILLWIRE | BLOCKAGEWIR */ + +/* x and y location of the path */ +EXTERN int defwSpecialNetShieldPoint (int numPts, double* pointx, double* pointy); +EXTERN int defwSpecialNetShieldVia (const char* name); + +/* A 5.4.1 syntax */ +EXTERN int defwSpecialNetShieldViaData (int numX, int numY, int stepX, int stepY); +EXTERN int defwSpecialNetShieldEnd (); +/* end 5.3 */ + +/* This routine is called at the end of the special net section */ +EXTERN int defwEndSpecialNets (); + +/* Routines to enter a net or nets into the file. + * You must first call defwNets with the number of nets. + * This section is required, even if you do not have any nets. + * For each net you should call defwNet followed by one or + * more defwNetConnection calls. + * After the connections come the options. Options are + * NOT required. + * Each net is completed by calling defwNetEndOneNet(). + * The nets section is finished by calling defwEndNets(). */ +EXTERN int defwStartNets (int count); + +/* This routine must be called after the defwStartNets, it is for - netName */ +EXTERN int defwNet (const char* name); + +/* This routine is for { compName | PIN } pinName [+ SYNTHESIZED] */ +/* It can be called multiple times */ +EXTERN int defwNetConnection (const char* inst, const char* pin, int synthesized); + +/* This routine is for MUSTJOIN, compName, pinName */ +EXTERN int defwNetMustjoinConnection (const char* inst, const char* pin); + +/* This routine is for + VPIN vpinName [LAYER layerName pt pt + * [{ PLACED | FIXED | COVER } pt orient] */ +EXTERN int defwNetVpin (const char* vpinName, const char* layerName, int layerXl, int layerYl, int layerXh, int layerYh, const char* status, int statusX, int statusY, int orient); + +/* This routine is for + VPIN vpinName [LAYER layerName pt pt + * [{ PLACED | FIXED | COVER } pt orient] + * This routine is the same as defwNetVpin, except orient is a char* */ +EXTERN int defwNetVpinStr (const char* vpinName, const char* layerName, int layerXl, int layerYl, int layerXh, int layerYh, const char* status, int statusX, int statusY, const char* orient); + +/* This routine can be called either within net or subnet. + * it is for NONDEFAULTRULE rulename */ +EXTERN int defwNetNondefaultRule (const char* name); + +/* This routine is for + XTALK num */ +EXTERN int defwNetXtalk (int xtalk); + +/* This routine is for + FIXEDBUMP + * This is a 5.4.1 syntax */ +EXTERN int defwNetFixedbump (); + +/* This routine is for + FREQUENCY + * This is a 5.4.1 syntax */ +EXTERN int defwNetFrequency (double frequency); + +/* This routine is for + SOURCE {NETLIST | DIST | USER | TEST | TIMING} */ +EXTERN int defwNetSource (const char* name); + +/* This routine is for + ORIGINAL netname */ +EXTERN int defwNetOriginal (const char* name); + +/* This routine is for + USE {SIGNAL | POWER | GROUND | CLOCK | TIEOFF | + * ANALOG} */ +EXTERN int defwNetUse (const char* name); + +/* This routine is for + PATTERN {STEINER | BALANCED | WIREDLOGIC} */ +EXTERN int defwNetPattern (const char* name); + +/* This routine is for + ESTCAP wireCapacitance */ +EXTERN int defwNetEstCap (double value); + +/* This routine is for + WEIGHT weight */ +EXTERN int defwNetWeight (double value); + +/* 5.3 for net */ +/* This routine is for + SHIELDNET weight */ +EXTERN int defwNetShieldnet (const char* name); + +/* Noshield are a special type of option. A noshield must begin + * with a defwNetNoshieldStart and end with a defwNetNoshieldEnd(). + * The individual parts of the noshield can be entered in + * any order. */ +EXTERN int defwNetNoshieldStart (const char* name); + +/* x and y location of the path */ +EXTERN int defwNetNoshieldPoint (int numPts, const char** pointx, const char** pointy); +EXTERN int defwNetNoshieldVia (const char* name); +EXTERN int defwNetNoshieldEnd (); +/* end 5.3 */ + +/* Subnet are a special type of option. A subnet must begin + * with a defwNetSubnetStart and end with a defwNetSubnetEnd(). + * Routines to call within the subnet are: defwNetSubnetPin, + * defwNetNondefaultRule and defwNetPathStart... */ +EXTERN int defwNetSubnetStart (const char* name); + +/* This routine is called after the defwNetSubnet, it is for + * [({compName | PIN} pinName) | (VPIN vpinName)]... */ +EXTERN int defwNetSubnetPin (const char* compName, const char* pinName); + +EXTERN int defwNetSubnetEnd (); + +/* Paths are a special type of option. A path must begin + * with a defwNetPathStart and end with a defwPathEnd(). + * The individual parts of the path can be entered in + * any order. */ +EXTERN int defwNetPathStart (const char* typ); + /* NOSHIELD | NEW */ +EXTERN int defwNetPathWidth (int w); +EXTERN int defwNetPathLayer (const char* name, int isTaper, const char* rulename); + /*rulename can be assigned */ +/* This routine is optional. + * This is a 5.6 syntax. */ +EXTERN int defwNetPathStyle (int styleNum); + +/* This routine is optional. + * This is a 5.8 syntax. */ +EXTERN int defwNetPathMask (int maskNum); + +EXTERN int defwNetPathRect (int deltaX1, int deltaY1, int deltaX2, int deltaY2); + +EXTERN int defwNetPathVirtual (int x, int y); + +/* x and y location of the path */ +EXTERN int defwNetPathPoint (int numPts, double* pointx, double* pointy); + +EXTERN int defwNetPathPointWithExt (int numPts, double* pointx, double* pointy, double* optValue); + +EXTERN int defwNetPathVia (const char* name); + +EXTERN int defwNetPathViaWithOrient (const char* name, int orient); + +EXTERN int defwNetPathViaWithOrientStr (const char* name, const char* orient); +EXTERN int defwNetPathEnd (); + +/* This routine is called at the end of each net */ +EXTERN int defwNetEndOneNet (); + +/* This routine is called at the end of the net section */ +EXTERN int defwEndNets (); + +/* This section of routines is optional. + * Returns 0 if successful. + * The routine starts the I/O Timing section. All of the iotimings options + * must follow. + * The count is the number of defwIOTiming calls to follow. + * The routine can be called only once. + * This api is obsolete in 5.4. */ +EXTERN int defwStartIOTimings (int count); + +/* This routine can be called after defwStaratIOTiming + * It is for - - {(comp pin) | (PIN name)} + * This api is obsolete in 5.4. */ +EXTERN int defwIOTiming (const char* inst, const char* pin); + +/* This routine is for + { RISE | FALL } VARIABLE min max + * This api is obsolete in 5.4. */ +EXTERN int defwIOTimingVariable (const char* riseFall, int num1, int num2); + +/* This routine is for + { RISE | FALL } SLEWRATE min max + * This api is obsolete in 5.4. */ +EXTERN int defwIOTimingSlewrate (const char* riseFall, int num1, int num2); + +/* This routine is for + DRIVECELL macroName [[FROMPIN pinName] TOPIN pinName] + * [PARALLEL numDrivers] + * This api is obsolete in 5.4. */ +EXTERN int defwIOTimingDrivecell (const char* name, const char* fromPin, const char* toPin, int numDrivers); + +/* This routine is for + CAPACITANCE capacitance + * This api is obsolete in 5.4. */ +EXTERN int defwIOTimingCapacitance (double num); + +/* This api is obsolete in 5.4. */ +EXTERN int defwEndIOTimings (); + +/* Routines to enter scan chains. This section is optional + * The section must start with a defwStartScanchains() call and + * end with a defwEndScanchain() call. + * Each scan chain begins with a defwScanchain() call. + * The rest of the calls follow. */ +EXTERN int defwStartScanchains (int count); + +/* This routine can be called after defwStartScanchains + * It is for - chainName */ +EXTERN int defwScanchain (const char* name); + +/* This routine is for + COMMONSCANPINS [IN pin] [OUT pin] */ +EXTERN int defwScanchainCommonscanpins (const char* inst1, const char* pin1, const char* inst2, const char* pin2); + +/* This routine is for + PARTITION paratitionName [MAXBITS maxBits] */ +/* This is 5.4.1 syntax */ +EXTERN int defwScanchainPartition (const char* name, int maxBits); + +/* This routine is for + START {fixedInComp | PIN } [outPin] */ +EXTERN int defwScanchainStart (const char* inst, const char* pin); + +/* This routine is for + STOP {fixedOutComp | PIN } [inPin] */ +EXTERN int defwScanchainStop (const char* inst, const char* pin); + +/* This routine is for + FLOATING {floatingComp [IN pin] [OUT pin]} + * This is a 5.4.1 syntax */ +EXTERN int defwScanchainFloating (const char* name, const char* inst1, const char* pin1, const char* inst2, const char* pin2); + +/* This routine is for + FLOATING {floatingComp [IN pin] [OUT pin]} + * This is a 5.4.1 syntax. + * This routine is the same as defwScanchainFloating. But also added + * the option BITS. */ +EXTERN int defwScanchainFloatingBits (const char* name, const char* inst1, const char* pin1, const char* inst2, const char* pin2, int bits); + +/* This routine is for + ORDERED {fixedComp [IN pin] [OUT pin] + * fixedComp [IN pin] [OUT pin]. + * When this routine is called for the 1st time within a scanchain, + * both name1 and name2 are required. Only name1 is required is the + * routine is called more than once. */ +EXTERN int defwScanchainOrdered (const char* name1, const char* inst1, const char* pin1, const char* inst2, const char* pin2, const char* name2, const char* inst3, const char* pin3, const char* inst4, const char* pin4); + +/* This routine is for + ORDERED {fixedComp [IN pin] [OUT pin] + * fixedComp [IN pin] [OUT pin]. + * When this routine is called for the 1st time within a scanchain, + * both name1 and name2 are required. Only name1 is required is the + * routine is called more than once. + * This is a 5.4.1 syntax. + * This routine is the same as defwScanchainOrdered. But also added + * the option BITS */ +EXTERN int defwScanchainOrderedBits (const char* name1, const char* inst1, const char* pin1, const char* inst2, const char* pin2, int bits1, const char* name2, const char* inst3, const char* pin3, const char* inst4, const char* pin4, int bits2); + +EXTERN int defwEndScanchain (); + +/* Routines to enter constraints. This section is optional + * The section must start with a defwStartConstrains() call and + * end with a defwEndConstraints() call. + * Each contraint will call the defwConstraint...(). + * This api is obsolete in 5.4. */ +EXTERN int defwStartConstraints (int count); + +/* The following routines are for - {operand [+ RISEMAX time] [+ FALLMAX time] + * [+ RISEMIN time] [+ FALLMIN time] | WIREDLOGIC netName MAXDIST distance };} + * operand - NET netName | PATH comp fromPin comp toPin | SUM (operand, ...) + * The following apis are obsolete in 5.4. */ +EXTERN int defwConstraintOperand (); +EXTERN int defwConstraintOperandNet (const char* netName); +EXTERN int defwConstraintOperandPath (const char* comp1, const char* fromPin, const char* comp2, const char* toPin); +EXTERN int defwConstraintOperandSum (); +EXTERN int defwConstraintOperandSumEnd (); +EXTERN int defwConstraintOperandTime (const char* timeType, int time); +EXTERN int defwConstraintOperandEnd (); + +/* This routine is for - WIRELOGIC netName MAXDIST distance */ +EXTERN int defwConstraintWiredlogic (const char* netName, int distance); + +EXTERN int defwEndConstraints (); + +/* Routines to enter groups. This section is optional + * The section must start with a defwStartGroups() call and + * end with a defwEndGroups() call. + * Each group will call the defwGroup...(). */ +EXTERN int defwStartGroups (int count); + +/* This routine is for - groupName compNameRegExpr ... */ +EXTERN int defwGroup (const char* groupName, int numExpr, const char** groupExpr); + +/* This routine is for + SOFT [MAXHALFPERIMETER value] [MAXX value] + * [MAXY value] */ +EXTERN int defwGroupSoft (const char* type1, double value1, const char* type2, double value2, const char* type3, double value3); + +/* This routine is for + REGION {pt pt | regionName} */ +EXTERN int defwGroupRegion (int xl, int yl, int xh, int yh, const char* regionName); + +EXTERN int defwEndGroups (); + +/* Routines to enter Blockages. This section is optional + * The section must start with a defwStartBlockages() call and + * end with a defwEndBlockages() call. + * Each blockage will call the defwBlockages...(). + * This is a 5.4 syntax. */ +EXTERN int defwStartBlockages (int count); + +/* This routine is for - layerName +* This routine is called per entry within a blockage for layer. +* This is a 5.4 syntax. */ +EXTERN int defwBlockagesLayer (const char* layerName); + +/* This routine is for - slots +* This routine is called per entry within a blockage layer, can't be more then one. +* This is a 5.4 syntax. */ +EXTERN int defwBlockagesLayerSlots (); + +/* This routine is for - fills +* This routine is called per entry within a blockage layer, can't be more then one. +* This is a 5.4 syntax. */ +EXTERN int defwBlockagesLayerFills (); + +/* This routine is for - pushdown +* This routine is called per entry within a blockage layer, can't be more then one. +* This is a 5.4 syntax. */ +EXTERN int defwBlockagesLayerPushdown (); + +/* This routine is for - exceptpgnet +* This routine is called per entry within a blockage layer, can't be more then one. +* This is a 5.7 syntax. */ +EXTERN int defwBlockagesLayerExceptpgnet (); + +/* This routine is for - component +* This routine called per entry within a blockage layer, can't be more than one. +* This is a 5.6 syntax. */ +EXTERN int defwBlockagesLayerComponent (const char* compName); + +/* This routine is for - spacing +* Either this routine or defwBlockagesDesignRuleWidth is called per entry +* within a blockage layer, can't be more than one. +* This is a 5.6 syntax. */ +EXTERN int defwBlockagesLayerSpacing (int minSpacing); + +/* This routine is for - designrulewidth +* Either this routine or defwBlockagesSpacing is called per entry +* within a blockage layer, can't be more than one. +* This is a 5.6 syntax. */ +EXTERN int defwBlockagesLayerDesignRuleWidth (int effectiveWidth); + +/* This routine is for - mask. +* This routine called per entry within a blockage layer, can't be more than one. +* This is a 5.8 syntax. */ +EXTERN int defwBlockagesLayerMask (int maskColor); + +/* This routine is for - layerName & compName + * Either this routine, defBlockageLayerSlots, defBlockageLayerFills, + * or defwBlockagePlacement is called per entry within + * a blockage, can't be more then one. + * This is a 5.4 syntax. */ +EXTERN int defwBlockageLayer (const char* layerName, const char* compName); + +/* This routine is for - layerName & slots + * Either this routine, defBlockageLayer, defBlockageLayerFills, + * defwBlockagePlacement, or defwBlockagePushdown is called per entry within + * a blockage, can't be more then one. + * This is a 5.4 syntax. */ +EXTERN int defwBlockageLayerSlots (const char* layerName); + +/* This routine is for - layerName & fills + * Either this routine, defBlockageLayer, defBlockageLayerSlots, + * defwBlockagePlacement, or defwBlockagePushdown is called per entry within + * a blockage, can't be more then one. + * This is a 5.4 syntax. */ +EXTERN int defwBlockageLayerFills (const char* layerName); + +/* This routine is for - layerName & pushdown + * Either this routine, defBlockageLayer, defBlockageLayerSlots, + * defwBlockagePlacement, or defwBlockageFills is called per entry within + * a blockage, can't be more then one. + * This is a 5.4 syntax. */ +EXTERN int defwBlockageLayerPushdown (const char* layerName); + +/* This routine is for - exceptpgnet + * Either this routine, defBlockageLayer, defBlockageLayerSlots, + * defwBlockagePlacement, or defwBlockageFills is called per entry within + * a blockage, can't be more then one. + * This is a 5.7 syntax. */ +EXTERN int defwBlockageLayerExceptpgnet (const char* layerName); + +/* This routine is for - spacing + * Either this routine or defwBlockageDesignRuleWidth is called per entry + * within a blockage, can't be more than one. + * This is a 5.6 syntax. */ +EXTERN int defwBlockageSpacing (int minSpacing); + +/* This routine is for - designrulewidth + * Either this routine or defwBlockageSpacing is called per entry + * within a blockage, can't be more than one. + * This is a 5.6 syntax. */ +EXTERN int defwBlockageDesignRuleWidth (int effectiveWidth); + +/* This routine is for - placement + * This routine is called per entry within blockage for placement. + * This is a 5.4 syntax. + * 11/25/2002 - bug fix: submitted by Craig Files (cfiles@ftc.agilent.com) + * this routine allows to call blockage without a component. */ +EXTERN int defwBlockagesPlacement (); + +/* This routine is for - component +* This routine is called per entry within blockage placement, can't be more then one. +* This is a 5.4 syntax. */ +EXTERN int defwBlockagesPlacementComponent (const char* compName); + +/* This routine is for - Pushdown +* This routine is called per entry within blockage placement, can't be more then one. +* This is a 5.4 syntax. */ +EXTERN int defwBlockagesPlacementPushdown (); + +/* This routine is for - soft +* Either this routine or defwBlockagesPlacementPartial +* is called per entry within blockage placement, can't be more then one. +* This is a 5.7 syntax. */ +EXTERN int defwBlockagesPlacementSoft (); + +/* This routine is for - Partial +* Either this routine or defwBlockagesPlacementSoft +* is called per entry within blockage placement, can't be more then one. +* This is a 5.7 syntax. */ +EXTERN int defwBlockagesPlacementPartial (double maxDensity); + +/* This routine is for rectangle. +* This routine is optional and can be called multiple time. +* This is a 5.4 syntax. */ +EXTERN int defwBlockagesRect (int xl, int yl, int xh, int yh); + +/* This routine is for polygon. +* This routine is optional and can be called multiple time. +* This is a 5.6 syntax. */ +EXTERN int defwBlockagesPolygon (int num_polys, int* xl, int* yl); + +/* This routine is for - placement +* Either this routine or defBlockageLayer +* is called per entry within blockage, can't be more then one. +* This is a 5.4 syntax. +* 11/25/2002 - bug fix: submitted by Craig Files (cfiles@ftc.agilent.com) +* this routine allows to call blockage without a component. */ +EXTERN int defwBlockagePlacement (); + +/* This routine is for - placement & component + * Either this routine or defwBlockagePlacementPushdown + * is called per entry within blockage, can't be more then one. + * This is a 5.4 syntax. */ +EXTERN int defwBlockagePlacementComponent (const char* compName); + +/* This routine is for - placement & Pushdown + * Either this routine or defwBlockagePlacementComponent + * is called per entry within blockage, can't be more then one. + * This is a 5.4 syntax. */ +EXTERN int defwBlockagePlacementPushdown (); + +/* This routine is for - placement & soft + * Either this routine or defwBlockagePlacementPushdown + * is called per entry within blockage, can't be more then one. + * This is a 5.7 syntax. */ +EXTERN int defwBlockagePlacementSoft (); + +/* This routine is for - placement & Partial + * Either this routine or defwBlockagePlacementComponent + * is called per entry within blockage, can't be more then one. + * This is a 5.7 syntax. */ +EXTERN int defwBlockagePlacementPartial (double maxDensity); + +/* This routine is optional. + * This is a 5.8 syntax. */ +EXTERN int defwBlockageMask (int maskColor); + +/* This routine is for rectangle. + * This is a 5.4 syntax. */ +EXTERN int defwBlockageRect (int xl, int yl, int xh, int yh); + +/* This routine is for polygon. + * This routine is optinal and can be called multiple time. + * This is a 5.6 syntax. */ +EXTERN int defwBlockagePolygon (int num_polys, int* xl, int* yl); + +/* This is a 5.4 syntax. */ +EXTERN int defwEndBlockages (); + +/* Routines to enter Slots. This section is optional + * The section must start with a defwStartSlots() call and + * end with a defwEndSlots() call. + * Each slots will call the defwSlots...(). + * This is a 5.4 syntax. */ +EXTERN int defwStartSlots (int count); + +/* This routine is for - layerName & compName + * Either this routine, defSlots, defSlotsLayerFills, + * or defwSlotsPlacement is called per entry within + * a slot, can't be more then one. + * This is a 5.4 syntax. */ +EXTERN int defwSlotLayer (const char* layerName); + +/* This routine is for rectangle + * This is a 5.4 syntax. */ +EXTERN int defwSlotRect (int xl, int yl, int xh, int yh); + +/* This routine is for rectangle + * This is a 5.6 syntax and can be called multiple time. */ +EXTERN int defwSlotPolygon (int num_polys, double* xl, double* yl); + +/* This is a 5.4 syntax. */ +EXTERN int defwEndSlots (); + +/* Routines to enter Fills. This section is optional + * The section must start with a defwStartFills() call and + * end with a defwEndFills() call. + * Each fills will call the defwFills...(). + * This is a 5.4 syntax. */ +EXTERN int defwStartFills (int count); + +/* This routine is for - layerName & compName + * Either this routine, defFills, defFillsLayerFills, + * or defwFillsPlacement is called per entry within + * a fill, can't be more then one. + * This is a 5.4 syntax. */ +EXTERN int defwFillLayer (const char* layerName); + +/* This routine is optional. + * This is a 5.8 syntax. */ +EXTERN int defwFillLayerMask (int maskColor); + +/* This routine has to be called after defwFillLayer + * This routine is optional. + * This is a 5.7 syntax. */ +EXTERN int defwFillLayerOPC (); + +/* This routine is for rectangle. + * This is a 5.4 syntax. */ +EXTERN int defwFillRect (int xl, int yl, int xh, int yh); + +/* This routine is for polygon. + * This is a 5.6 syntax and can be called multiple time. */ +EXTERN int defwFillPolygon (int num_polys, double* xl, double* yl); + +/* This routine is for via. + * This routine is optional. + * This is a 5.7 syntax and can be called multiple time. */ +EXTERN int defwFillVia (const char* viaName); + +/* This routine is optional. + * This is a 5.8 syntax. */ +EXTERN int defwFillViaMask (int colorMask); + +/* This routine is for via OPC. + * This routine can only be called after defwFillVia. + * This routine is optional. + * This is a 5.7 syntax and can be called multiple time. */ +EXTERN int defwFillViaOPC (); + +/* This routine is for via OPC. + * This routine can only be called after defwFillVia. + * This routine is required following defwFillVia. + * This is a 5.7 syntax and can be called multiple time. */ +EXTERN int defwFillPoints (int num_points, double* xl, double* yl); + +/* This is a 5.4 syntax. */ +EXTERN int defwEndFills (); + +/* Routines to enter NONDEFAULTRULES. This section is required + * The section must start with a defwStartNonDefaultRules() and + * end with defwEndNonDefaultRules() call. + * This is a 5.6 syntax. */ +EXTERN int defwStartNonDefaultRules (int count); + +/* This routine is for Layer within the NONDEFAULTRULES + * This routine can be called multiple times. It is required. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwNonDefaultRule (const char* ruleName, int hardSpacing); + +/* Routines to enter NONDEFAULTRULES. This section is required + * This routine must be called after the defwNonDefaultRule. + * This routine can be called multiple times. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwNonDefaultRuleLayer (const char* layerName, int width, int diagWidth, int spacing, int wireExt); + +/* Routines to enter NONDEFAULTRULES. This section is optional. + * This routine must be called after the defwNonDefaultRule. + * This routine can be called multiple times. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwNonDefaultRuleVia (const char* viaName); + +/* Routines to enter NONDEFAULTRULES. This section is optional. + * This routine must be called after the defwNonDefaultRule. + * This routine can be called multiple times. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwNonDefaultRuleViaRule (const char* viaRuleName); + +/* Routines to enter NONDEFAULTRULES. This section is optional. + * This routine must be called after the defwNonDefaultRule. + * This routine can be called multiple times. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwNonDefaultRuleMinCuts (const char* cutLayerName, int numCutS); + +/* This is a 5.4 syntax. */ +EXTERN int defwEndNonDefaultRules (); + +/* Routines to enter STYLES. This section is required + * The section must start with a defwStartStyles() and + * end with defwEndStyles() call. + * This is a 5.6 syntax. */ +EXTERN int defwStartStyles (int count); + +/* This routine is for Layer within the NONDEFAULTRULES + * This routine can be called multiple times. It is required. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +EXTERN int defwStyles (int styleNums, int num_points, double* xp, double* yp); + +/* This is a 5.4 syntax. */ +EXTERN int defwEndStyles (); + +/* This routine is called after defwInit. + * This routine is optional and it can be called only once. + * Returns 0 if successful. */ +EXTERN int defwStartBeginext (const char* name); + +/* This routine is called after defwBeginext. + * This routine is optional, it can be called only once. + * Returns 0 if successful. */ +EXTERN int defwBeginextCreator (const char* creatorName); + +/* This routine is called after defwBeginext. + * This routine is optional, it can be called only once. + * It gets the current system time and date. + * Returns 0 if successful. */ +EXTERN int defwBeginextDate (); + +/* This routine is called after defwBeginext. + * This routine is optional, it can be called only once. + * Returns 0 if successful. */ +EXTERN int defwBeginextRevision (int vers1, int vers2); + +/* This routine is called after defwBeginext. + * This routine is optional, it can be called many times. + * It allows user to customize their own syntax. + * Returns 0 if successful. */ +EXTERN int defwBeginextSyntax (const char* title, const char* string); + +/* This routine is called after defwInit. + * This routine is optional and it can be called only once. + * Returns 0 if successful. */ +EXTERN int defwEndBeginext (); + +/* End the DEF file. + * This routine IS NOT OPTIONAL. + * The routine must be called LAST. */ +EXTERN int defwEnd (); + +/* General routines that can be called anytime after the Init is called. + */ +EXTERN int defwCurrentLineNumber (); + +/* + * extern void defwError ( const char *, ... ); + * extern void defwWarning ( const char *, ... ); + * extern void defwVError ( const char *, va_list ); + * extern void defwVWarning ( const char *, va_list ); + * extern int defwGetCurrentLineNumber (void); + * extern const char *defwGetCurrentFileName (void); + */ + +/* This routine will print the error message. */ +EXTERN void defwPrintError (int status); + +/* This routine will allow user to write their own comemnt. It will + * automactically add a # infront of the line. + */ +EXTERN void defwAddComment (const char* comment); + +/* This routine will indent 3 blank spaces */ +EXTERN void defwAddIndent (); + +#endif diff --git a/lefdef/src/def/cdef/defwWriterCalls.h b/lefdef/src/def/cdef/defwWriterCalls.h new file mode 100644 index 00000000..fee6d4e2 --- /dev/null +++ b/lefdef/src/def/cdef/defwWriterCalls.h @@ -0,0 +1,207 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2013-2014, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CDEFWWRITERCALLS_H +#define CDEFWWRITERCALLS_H + +#include +#include "defiTypedefs.h" + +/* + * The main writer function. + * The file should already be opened. This requirement allows + * the writer to be used with stdin or a pipe. The file name + * is only used for error messages. The includeSearchPath is + * a colon-delimited list of directories in which to find + * include files. + */ +EXTERN int defwWrite (FILE * file, const char * fileName, defiUserData userData); + +/* + * Set all of the callbacks that have not yet been set to a function + * that will add up how many times a given def data type was ignored + * (ie no callback was done). The statistics can later be printed out. + */ +EXTERN void defwSetRegisterUnusedCallbacks (); +EXTERN void defwPrintUnusedCallbacks (FILE* log); + +/* + * Set/get the client-provided user data. defi doesn't look at + * this data at all, it simply passes the opaque defiUserData pointer + * back to the application with each callback. The client can + * change the data at any time, and it will take effect on the + * next callback. The defi writer and writer maintain separate + * user data pointers. + */ +EXTERN void defwSetUserData (defiUserData p0); +EXTERN defiUserData defwGetUserData (); + +/* + * An enum describing all of the types of writer callbacks. + */ +typedef enum { + defwUnspecifiedCbkType = 0, + defwVersionCbkType = 1, + defwCaseSensitiveCbkType = 2, + defwBusBitCbkType = 3, + defwDividerCbkType = 4, + defwDesignCbkType = 5, + defwTechCbkType = 6, + defwArrayCbkType = 7, + defwFloorPlanCbkType = 8, + defwUnitsCbkType = 9, + defwHistoryCbkType = 10, + defwPropDefCbkType = 11, + defwDieAreaCbkType = 12, + defwRowCbkType = 13, + defwTrackCbkType = 14, + defwGcellGridCbkType = 15, + defwDefaultCapCbkType = 16, + defwCanplaceCbkType = 17, + defwCannotOccupyCbkType = 18, + defwViaCbkType = 19, + defwRegionCbkType = 20, + defwComponentCbkType = 21, + defwPinCbkType = 22, + defwPinPropCbkType = 23, + defwSNetCbkType = 24, + defwNetCbkType = 25, + defwIOTimingCbkType = 26, + defwScanchainCbkType = 27, + defwConstraintCbkType = 28, + defwAssertionCbkType = 29, + defwGroupCbkType = 30, + defwBlockageCbkType = 31, + defwExtCbkType = 32, + defwDesignEndCbkType = 33 + + /* NEW CALLBACKS - each callback has its own type. For each callback + * that you add, you must add an item to this enum. */ + +} defwCallbackType_e; + +/* Declarations of function signatures for each type of callback. + * These declarations are type-safe when compiling with ANSI C + * or C++; you will only be able to register a function pointer + * with the correct signature for a given type of callback. + * + * Each callback function is expected to return 0 if successful. + * A non-zero return code will cause the writer to abort. + * + * The defwDesignStart and defwDesignEnd callback is only called once. + * Other callbacks may be called multiple times, each time with a different + * set of data. + * + * For each callback, the Def API will make the callback to the + * function supplied by the client, which should either make a copy + * of the Def object, or store the data in the client's own data structures. + * The Def API will delete or reuse each object after making the callback, + * so the client should not keep a pointer to it. + * + * All callbacks pass the user data pointer provided in defwRead() + * or defwSetUserData() back to the client; this can be used by the + * client to obtain access to the rest of the client's data structures. + * + * The user data pointer is obtained using defwGetUserData() immediately + * prior to making each callback, so the client is free to change the + * user data on the fly if necessary. + * + * Callbacks with the same signature are passed a callback type + * parameter, which allows an application to write a single callback + * function, register that function for multiple callbacks, then + * switch based on the callback type to handle the appropriate type of + * data. + */ + +/* A declaration of the signature of all callbacks that return nothing. */ +typedef int (*defwVoidCbkFnType) ( defwCallbackType_e, defiUserData ); + +/* Functions to call to register a callback function. + */ +EXTERN void defwSetArrayCbk (defwVoidCbkFnType p0); +EXTERN void defwSetAssertionCbk (defwVoidCbkFnType p0); +EXTERN void defwSetBlockageCbk (defwVoidCbkFnType p0); +EXTERN void defwSetBusBitCbk (defwVoidCbkFnType p0); +EXTERN void defwSetCannotOccupyCbk (defwVoidCbkFnType p0); +EXTERN void defwSetCanplaceCbk (defwVoidCbkFnType p0); +EXTERN void defwSetCaseSensitiveCbk (defwVoidCbkFnType p0); +EXTERN void defwSetComponentCbk (defwVoidCbkFnType p0); +EXTERN void defwSetConstraintCbk (defwVoidCbkFnType p0); +EXTERN void defwSetDefaultCapCbk (defwVoidCbkFnType p0); +EXTERN void defwSetDesignCbk (defwVoidCbkFnType p0); +EXTERN void defwSetDesignEndCbk (defwVoidCbkFnType p0); +EXTERN void defwSetDieAreaCbk (defwVoidCbkFnType p0); +EXTERN void defwSetDividerCbk (defwVoidCbkFnType p0); +EXTERN void defwSetExtCbk (defwVoidCbkFnType p0); +EXTERN void defwSetFloorPlanCbk (defwVoidCbkFnType p0); +EXTERN void defwSetGcellGridCbk (defwVoidCbkFnType p0); +EXTERN void defwSetGroupCbk (defwVoidCbkFnType p0); +EXTERN void defwSetHistoryCbk (defwVoidCbkFnType p0); +EXTERN void defwSetIOTimingCbk (defwVoidCbkFnType p0); +EXTERN void defwSetNetCbk (defwVoidCbkFnType p0); +EXTERN void defwSetPinCbk (defwVoidCbkFnType p0); +EXTERN void defwSetPinPropCbk (defwVoidCbkFnType p0); +EXTERN void defwSetPropDefCbk (defwVoidCbkFnType p0); +EXTERN void defwSetRegionCbk (defwVoidCbkFnType p0); +EXTERN void defwSetRowCbk (defwVoidCbkFnType p0); +EXTERN void defwSetSNetCbk (defwVoidCbkFnType p0); +EXTERN void defwSetScanchainCbk (defwVoidCbkFnType p0); +EXTERN void defwSetTechnologyCbk (defwVoidCbkFnType p0); +EXTERN void defwSetTrackCbk (defwVoidCbkFnType p0); +EXTERN void defwSetUnitsCbk (defwVoidCbkFnType p0); +EXTERN void defwSetVersionCbk (defwVoidCbkFnType p0); +EXTERN void defwSetViaCbk (defwVoidCbkFnType p0); + +/* NEW CALLBACK - each callback must have a function to allow the user + * to set it. Add the function here. */ + +/* + * Set all of the callbacks that have not yet been set to the following + * function. This is especially useful if you want to check to see + * if you forgot anything. + */ +EXTERN void defwSetUnusedCallbacks (defwVoidCbkFnType func); + +/* Routine to set the message logging routine for errors */ + typedef void (*DEFI_LOG_FUNCTION) (const char*); + +EXTERN void defwSetLogFunction (DEFI_LOG_FUNCTION p0); + +/* Routine to set the message logging routine for warnings */ +#ifndef DEFI_WARNING_LOG_FUNCTION + typedef void (*DEFI_WARNING_LOG_FUNCTION)(const char*); +#endif + +EXTERN void defwSetWarningLogFunction (DEFI_WARNING_LOG_FUNCTION p0); + +#endif diff --git a/lefdef/src/def/cdef/xdefiAssertion.cpp b/lefdef/src/def/cdef/xdefiAssertion.cpp new file mode 100644 index 00000000..bd500e97 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiAssertion.cpp @@ -0,0 +1,127 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiAssertion.h" +#include "defiAssertion.hpp" + +// Wrappers definitions. +int defiAssertion_isAssertion (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->isAssertion(); +} + +int defiAssertion_isConstraint (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->isConstraint(); +} + +int defiAssertion_isWiredlogic (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->isWiredlogic(); +} + +int defiAssertion_isDelay (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->isDelay(); +} + +int defiAssertion_isSum (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->isSum(); +} + +int defiAssertion_isDiff (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->isDiff(); +} + +int defiAssertion_hasRiseMin (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->hasRiseMin(); +} + +int defiAssertion_hasRiseMax (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->hasRiseMax(); +} + +int defiAssertion_hasFallMin (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->hasFallMin(); +} + +int defiAssertion_hasFallMax (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->hasFallMax(); +} + +double defiAssertion_riseMin (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->riseMin(); +} + +double defiAssertion_riseMax (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->riseMax(); +} + +double defiAssertion_fallMin (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->fallMin(); +} + +double defiAssertion_fallMax (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->fallMax(); +} + +const char* defiAssertion_netName (const ::defiAssertion* obj) { + return ((const LefDefParser::defiAssertion*)obj)->netName(); +} + +double defiAssertion_distance (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->distance(); +} + +int defiAssertion_numItems (const ::defiAssertion* obj) { + return ((LefDefParser::defiAssertion*)obj)->numItems(); +} + +int defiAssertion_isPath (const ::defiAssertion* obj, int index) { + return ((LefDefParser::defiAssertion*)obj)->isPath(index); +} + +int defiAssertion_isNet (const ::defiAssertion* obj, int index) { + return ((LefDefParser::defiAssertion*)obj)->isNet(index); +} + +void defiAssertion_path (const ::defiAssertion* obj, int index, char** fromInst, char** fromPin, char** toInst, char** toPin) { + ((LefDefParser::defiAssertion*)obj)->path(index, fromInst, fromPin, toInst, toPin); +} + +void defiAssertion_net (const ::defiAssertion* obj, int index, char** netName) { + ((LefDefParser::defiAssertion*)obj)->net(index, netName); +} + +void defiAssertion_print (const ::defiAssertion* obj, FILE* f) { + ((LefDefParser::defiAssertion*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiBlockage.cpp b/lefdef/src/def/cdef/xdefiBlockage.cpp new file mode 100644 index 00000000..a8003558 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiBlockage.cpp @@ -0,0 +1,149 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiBlockage.h" +#include "defiBlockage.hpp" + +// Wrappers definitions. +int defiBlockage_hasLayer (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasLayer(); +} + +int defiBlockage_hasPlacement (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasPlacement(); +} + +int defiBlockage_hasComponent (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasComponent(); +} + +int defiBlockage_hasSlots (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasSlots(); +} + +int defiBlockage_hasFills (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasFills(); +} + +int defiBlockage_hasPushdown (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasPushdown(); +} + +int defiBlockage_hasExceptpgnet (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasExceptpgnet(); +} + +int defiBlockage_hasSoft (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasSoft(); +} + +int defiBlockage_hasPartial (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasPartial(); +} + +int defiBlockage_hasSpacing (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasSpacing(); +} + +int defiBlockage_hasDesignRuleWidth (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasDesignRuleWidth(); +} + +int defiBlockage_hasMask (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->hasMask(); +} + +int defiBlockage_mask (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->mask(); +} + +int defiBlockage_minSpacing (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->minSpacing(); +} + +int defiBlockage_designRuleWidth (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->designRuleWidth(); +} + +double defiBlockage_placementMaxDensity (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->placementMaxDensity(); +} + +const char* defiBlockage_layerName (const ::defiBlockage* obj) { + return ((const LefDefParser::defiBlockage*)obj)->layerName(); +} + +const char* defiBlockage_layerComponentName (const ::defiBlockage* obj) { + return ((const LefDefParser::defiBlockage*)obj)->layerComponentName(); +} + +const char* defiBlockage_placementComponentName (const ::defiBlockage* obj) { + return ((const LefDefParser::defiBlockage*)obj)->placementComponentName(); +} + +int defiBlockage_numRectangles (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->numRectangles(); +} + +int defiBlockage_xl (const ::defiBlockage* obj, int index) { + return ((LefDefParser::defiBlockage*)obj)->xl(index); +} + +int defiBlockage_yl (const ::defiBlockage* obj, int index) { + return ((LefDefParser::defiBlockage*)obj)->yl(index); +} + +int defiBlockage_xh (const ::defiBlockage* obj, int index) { + return ((LefDefParser::defiBlockage*)obj)->xh(index); +} + +int defiBlockage_yh (const ::defiBlockage* obj, int index) { + return ((LefDefParser::defiBlockage*)obj)->yh(index); +} + +int defiBlockage_numPolygons (const ::defiBlockage* obj) { + return ((LefDefParser::defiBlockage*)obj)->numPolygons(); +} + +::defiPoints defiBlockage_getPolygon (const ::defiBlockage* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiBlockage*)obj)->getPolygon(index); + return *((::defiPoints*)&tmp); +} + +void defiBlockage_print (const ::defiBlockage* obj, FILE* f) { + ((LefDefParser::defiBlockage*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiComponent.cpp b/lefdef/src/def/cdef/xdefiComponent.cpp new file mode 100644 index 00000000..a0896de4 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiComponent.cpp @@ -0,0 +1,247 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiComponent.h" +#include "defiComponent.hpp" + +// Wrappers definitions. +int defiComponentMaskShiftLayer_numMaskShiftLayers (const ::defiComponentMaskShiftLayer* obj) { + return ((LefDefParser::defiComponentMaskShiftLayer*)obj)->numMaskShiftLayers(); +} + +const char* defiComponentMaskShiftLayer_maskShiftLayer (const ::defiComponentMaskShiftLayer* obj, int index) { + return ((const LefDefParser::defiComponentMaskShiftLayer*)obj)->maskShiftLayer(index); +} + +const char* defiComponent_id (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->id(); +} + +const char* defiComponent_name (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->name(); +} + +int defiComponent_placementStatus (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->placementStatus(); +} + +int defiComponent_isUnplaced (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->isUnplaced(); +} + +int defiComponent_isPlaced (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->isPlaced(); +} + +int defiComponent_isFixed (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->isFixed(); +} + +int defiComponent_isCover (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->isCover(); +} + +int defiComponent_placementX (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->placementX(); +} + +int defiComponent_placementY (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->placementY(); +} + +int defiComponent_placementOrient (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->placementOrient(); +} + +const char* defiComponent_placementOrientStr (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->placementOrientStr(); +} + +int defiComponent_hasRegionName (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasRegionName(); +} + +int defiComponent_hasRegionBounds (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasRegionBounds(); +} + +int defiComponent_hasEEQ (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasEEQ(); +} + +int defiComponent_hasGenerate (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasGenerate(); +} + +int defiComponent_hasSource (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasSource(); +} + +int defiComponent_hasWeight (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasWeight(); +} + +int defiComponent_weight (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->weight(); +} + +int defiComponent_maskShiftSize (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->maskShiftSize(); +} + +int defiComponent_maskShift (const ::defiComponent* obj, int index) { + return ((LefDefParser::defiComponent*)obj)->maskShift(index); +} + +int defiComponent_hasNets (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasNets(); +} + +int defiComponent_numNets (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->numNets(); +} + +const char* defiComponent_net (const ::defiComponent* obj, int index) { + return ((const LefDefParser::defiComponent*)obj)->net(index); +} + +const char* defiComponent_regionName (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->regionName(); +} + +const char* defiComponent_source (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->source(); +} + +const char* defiComponent_EEQ (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->EEQ(); +} + +const char* defiComponent_generateName (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->generateName(); +} + +const char* defiComponent_macroName (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->macroName(); +} + +int defiComponent_hasHalo (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasHalo(); +} + +int defiComponent_hasHaloSoft (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasHaloSoft(); +} + +int defiComponent_hasRouteHalo (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasRouteHalo(); +} + +int defiComponent_haloDist (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->haloDist(); +} + +const char* defiComponent_minLayer (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->minLayer(); +} + +const char* defiComponent_maxLayer (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->maxLayer(); +} + +void defiComponent_regionBounds (const ::defiComponent* obj, int* size, int** xl, int** yl, int** xh, int** yh) { + ((LefDefParser::defiComponent*)obj)->regionBounds(size, xl, yl, xh, yh); +} + +int defiComponent_hasForeignName (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasForeignName(); +} + +const char* defiComponent_foreignName (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->foreignName(); +} + +int defiComponent_foreignX (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->foreignX(); +} + +int defiComponent_foreignY (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->foreignY(); +} + +const char* defiComponent_foreignOri (const ::defiComponent* obj) { + return ((const LefDefParser::defiComponent*)obj)->foreignOri(); +} + +int defiComponent_foreignOrient (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->foreignOrient(); +} + +int defiComponent_hasFori (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->hasFori(); +} + +int defiComponent_numProps (const ::defiComponent* obj) { + return ((LefDefParser::defiComponent*)obj)->numProps(); +} + +char* defiComponent_propName (const ::defiComponent* obj, int index) { + return ((LefDefParser::defiComponent*)obj)->propName(index); +} + +char* defiComponent_propValue (const ::defiComponent* obj, int index) { + return ((LefDefParser::defiComponent*)obj)->propValue(index); +} + +double defiComponent_propNumber (const ::defiComponent* obj, int index) { + return ((LefDefParser::defiComponent*)obj)->propNumber(index); +} + +char defiComponent_propType (const ::defiComponent* obj, int index) { + return ((LefDefParser::defiComponent*)obj)->propType(index); +} + +int defiComponent_propIsNumber (const ::defiComponent* obj, int index) { + return ((LefDefParser::defiComponent*)obj)->propIsNumber(index); +} + +int defiComponent_propIsString (const ::defiComponent* obj, int index) { + return ((LefDefParser::defiComponent*)obj)->propIsString(index); +} + +void defiComponent_print (const ::defiComponent* obj, FILE* fout) { + ((LefDefParser::defiComponent*)obj)->print(fout); +} + diff --git a/lefdef/src/def/cdef/xdefiDebug.cpp b/lefdef/src/def/cdef/xdefiDebug.cpp new file mode 100644 index 00000000..e1f0b564 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiDebug.cpp @@ -0,0 +1,59 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiDebug.h" +#include "defiDebug.hpp" + +// Wrappers definitions. +void defiSetDebug (int num, int value) { + LefDefParser::defiSetDebug(num, value); +} + +int defiDebug (int num) { + return LefDefParser::defiDebug(num); +} + +void defiError (int check, int msgNum, const char* message) { + LefDefParser::defiError(check, msgNum, message); +} + +const char* upperCase (const char* c) { + return LefDefParser::upperCase(c); +} + +const char* DEFCASE (const char* ch) { + return LefDefParser::DEFCASE(ch); +} + diff --git a/lefdef/src/def/cdef/xdefiFPC.cpp b/lefdef/src/def/cdef/xdefiFPC.cpp new file mode 100644 index 00000000..e6f73fbd --- /dev/null +++ b/lefdef/src/def/cdef/xdefiFPC.cpp @@ -0,0 +1,91 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiFPC.h" +#include "defiFPC.hpp" + +// Wrappers definitions. +const char* defiFPC_name (const ::defiFPC* obj) { + return ((const LefDefParser::defiFPC*)obj)->name(); +} + +int defiFPC_isVertical (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->isVertical(); +} + +int defiFPC_isHorizontal (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->isHorizontal(); +} + +int defiFPC_hasAlign (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->hasAlign(); +} + +int defiFPC_hasMax (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->hasMax(); +} + +int defiFPC_hasMin (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->hasMin(); +} + +int defiFPC_hasEqual (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->hasEqual(); +} + +double defiFPC_alignMax (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->alignMax(); +} + +double defiFPC_alignMin (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->alignMin(); +} + +double defiFPC_equal (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->equal(); +} + +int defiFPC_numParts (const ::defiFPC* obj) { + return ((LefDefParser::defiFPC*)obj)->numParts(); +} + +void defiFPC_getPart (const ::defiFPC* obj, int index, int* corner, int* typ, char** name) { + ((LefDefParser::defiFPC*)obj)->getPart(index, corner, typ, name); +} + +void defiFPC_print (const ::defiFPC* obj, FILE* f) { + ((LefDefParser::defiFPC*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiFill.cpp b/lefdef/src/def/cdef/xdefiFill.cpp new file mode 100644 index 00000000..5556aa49 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiFill.cpp @@ -0,0 +1,123 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiFill.h" +#include "defiFill.hpp" + +// Wrappers definitions. +int defiFill_hasLayer (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->hasLayer(); +} + +const char* defiFill_layerName (const ::defiFill* obj) { + return ((const LefDefParser::defiFill*)obj)->layerName(); +} + +int defiFill_hasLayerOpc (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->hasLayerOpc(); +} + +int defiFill_layerMask (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->layerMask(); +} + +int defiFill_viaTopMask (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->viaTopMask(); +} + +int defiFill_viaCutMask (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->viaCutMask(); +} + +int defiFill_viaBottomMask (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->viaBottomMask(); +} + +int defiFill_numRectangles (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->numRectangles(); +} + +int defiFill_xl (const ::defiFill* obj, int index) { + return ((LefDefParser::defiFill*)obj)->xl(index); +} + +int defiFill_yl (const ::defiFill* obj, int index) { + return ((LefDefParser::defiFill*)obj)->yl(index); +} + +int defiFill_xh (const ::defiFill* obj, int index) { + return ((LefDefParser::defiFill*)obj)->xh(index); +} + +int defiFill_yh (const ::defiFill* obj, int index) { + return ((LefDefParser::defiFill*)obj)->yh(index); +} + +int defiFill_numPolygons (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->numPolygons(); +} + +::defiPoints defiFill_getPolygon (const ::defiFill* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiFill*)obj)->getPolygon(index); + return *((::defiPoints*)&tmp); +} + +int defiFill_hasVia (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->hasVia(); +} + +const char* defiFill_viaName (const ::defiFill* obj) { + return ((const LefDefParser::defiFill*)obj)->viaName(); +} + +int defiFill_hasViaOpc (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->hasViaOpc(); +} + +int defiFill_numViaPts (const ::defiFill* obj) { + return ((LefDefParser::defiFill*)obj)->numViaPts(); +} + +::defiPoints defiFill_getViaPts (const ::defiFill* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiFill*)obj)->getViaPts(index); + return *((::defiPoints*)&tmp); +} + +void defiFill_print (const ::defiFill* obj, FILE* f) { + ((LefDefParser::defiFill*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiGroup.cpp b/lefdef/src/def/cdef/xdefiGroup.cpp new file mode 100644 index 00000000..44be39d8 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiGroup.cpp @@ -0,0 +1,115 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiGroup.h" +#include "defiGroup.hpp" + +// Wrappers definitions. +const char* defiGroup_name (const ::defiGroup* obj) { + return ((const LefDefParser::defiGroup*)obj)->name(); +} + +const char* defiGroup_regionName (const ::defiGroup* obj) { + return ((const LefDefParser::defiGroup*)obj)->regionName(); +} + +int defiGroup_hasRegionBox (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->hasRegionBox(); +} + +int defiGroup_hasRegionName (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->hasRegionName(); +} + +int defiGroup_hasMaxX (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->hasMaxX(); +} + +int defiGroup_hasMaxY (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->hasMaxY(); +} + +int defiGroup_hasPerim (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->hasPerim(); +} + +void defiGroup_regionRects (const ::defiGroup* obj, int* size, int** xl, int** yl, int** xh, int** yh) { + ((LefDefParser::defiGroup*)obj)->regionRects(size, xl, yl, xh, yh); +} + +int defiGroup_maxX (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->maxX(); +} + +int defiGroup_maxY (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->maxY(); +} + +int defiGroup_perim (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->perim(); +} + +int defiGroup_numProps (const ::defiGroup* obj) { + return ((LefDefParser::defiGroup*)obj)->numProps(); +} + +const char* defiGroup_propName (const ::defiGroup* obj, int index) { + return ((const LefDefParser::defiGroup*)obj)->propName(index); +} + +const char* defiGroup_propValue (const ::defiGroup* obj, int index) { + return ((const LefDefParser::defiGroup*)obj)->propValue(index); +} + +double defiGroup_propNumber (const ::defiGroup* obj, int index) { + return ((LefDefParser::defiGroup*)obj)->propNumber(index); +} + +const char defiGroup_propType (const ::defiGroup* obj, int index) { + return ((const LefDefParser::defiGroup*)obj)->propType(index); +} + +int defiGroup_propIsNumber (const ::defiGroup* obj, int index) { + return ((LefDefParser::defiGroup*)obj)->propIsNumber(index); +} + +int defiGroup_propIsString (const ::defiGroup* obj, int index) { + return ((LefDefParser::defiGroup*)obj)->propIsString(index); +} + +void defiGroup_print (const ::defiGroup* obj, FILE* f) { + ((LefDefParser::defiGroup*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiIOTiming.cpp b/lefdef/src/def/cdef/xdefiIOTiming.cpp new file mode 100644 index 00000000..861a6f38 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiIOTiming.cpp @@ -0,0 +1,139 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiIOTiming.h" +#include "defiIOTiming.hpp" + +// Wrappers definitions. +int defiIOTiming_hasVariableRise (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasVariableRise(); +} + +int defiIOTiming_hasVariableFall (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasVariableFall(); +} + +int defiIOTiming_hasSlewRise (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasSlewRise(); +} + +int defiIOTiming_hasSlewFall (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasSlewFall(); +} + +int defiIOTiming_hasCapacitance (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasCapacitance(); +} + +int defiIOTiming_hasDriveCell (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasDriveCell(); +} + +int defiIOTiming_hasFrom (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasFrom(); +} + +int defiIOTiming_hasTo (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasTo(); +} + +int defiIOTiming_hasParallel (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->hasParallel(); +} + +const char* defiIOTiming_inst (const ::defiIOTiming* obj) { + return ((const LefDefParser::defiIOTiming*)obj)->inst(); +} + +const char* defiIOTiming_pin (const ::defiIOTiming* obj) { + return ((const LefDefParser::defiIOTiming*)obj)->pin(); +} + +double defiIOTiming_variableFallMin (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->variableFallMin(); +} + +double defiIOTiming_variableRiseMin (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->variableRiseMin(); +} + +double defiIOTiming_variableFallMax (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->variableFallMax(); +} + +double defiIOTiming_variableRiseMax (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->variableRiseMax(); +} + +double defiIOTiming_slewFallMin (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->slewFallMin(); +} + +double defiIOTiming_slewRiseMin (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->slewRiseMin(); +} + +double defiIOTiming_slewFallMax (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->slewFallMax(); +} + +double defiIOTiming_slewRiseMax (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->slewRiseMax(); +} + +double defiIOTiming_capacitance (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->capacitance(); +} + +const char* defiIOTiming_driveCell (const ::defiIOTiming* obj) { + return ((const LefDefParser::defiIOTiming*)obj)->driveCell(); +} + +const char* defiIOTiming_from (const ::defiIOTiming* obj) { + return ((const LefDefParser::defiIOTiming*)obj)->from(); +} + +const char* defiIOTiming_to (const ::defiIOTiming* obj) { + return ((const LefDefParser::defiIOTiming*)obj)->to(); +} + +double defiIOTiming_parallel (const ::defiIOTiming* obj) { + return ((LefDefParser::defiIOTiming*)obj)->parallel(); +} + +void defiIOTiming_print (const ::defiIOTiming* obj, FILE* f) { + ((LefDefParser::defiIOTiming*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiMisc.cpp b/lefdef/src/def/cdef/xdefiMisc.cpp new file mode 100644 index 00000000..df6f2cb6 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiMisc.cpp @@ -0,0 +1,57 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiMisc.h" +#include "defiMisc.hpp" + +// Wrappers definitions. +int defiGeometries_numPoints (const ::defiGeometries* obj) { + return ((LefDefParser::defiGeometries*)obj)->numPoints(); +} + +void defiGeometries_points (const ::defiGeometries* obj, int index, int* x, int* y) { + ((LefDefParser::defiGeometries*)obj)->points(index, x, y); +} + +int defiStyles_style (const ::defiStyles* obj) { + return ((LefDefParser::defiStyles*)obj)->style(); +} + +::defiPoints defiStyles_getPolygon (const ::defiStyles* obj) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiStyles*)obj)->getPolygon(); + return *((::defiPoints*)&tmp); +} + diff --git a/lefdef/src/def/cdef/xdefiNet.cpp b/lefdef/src/def/cdef/xdefiNet.cpp new file mode 100644 index 00000000..53d5a579 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiNet.cpp @@ -0,0 +1,539 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiNet.h" +#include "defiNet.hpp" + +// Wrappers definitions. +const char* defiWire_wireType (const ::defiWire* obj) { + return ((const LefDefParser::defiWire*)obj)->wireType(); +} + +const char* defiWire_wireShieldNetName (const ::defiWire* obj) { + return ((const LefDefParser::defiWire*)obj)->wireShieldNetName(); +} + +int defiWire_numPaths (const ::defiWire* obj) { + return ((LefDefParser::defiWire*)obj)->numPaths(); +} + +const ::defiPath* defiWire_path (const ::defiWire* obj, int index) { + return (const ::defiPath*) ((const LefDefParser::defiWire*)obj)->path(index); +} + +void defiSubnet_print (const ::defiSubnet* obj, FILE* f) { + ((LefDefParser::defiSubnet*)obj)->print(f); +} + +const char* defiSubnet_name (const ::defiSubnet* obj) { + return ((const LefDefParser::defiSubnet*)obj)->name(); +} + +int defiSubnet_numConnections (const ::defiSubnet* obj) { + return ((LefDefParser::defiSubnet*)obj)->numConnections(); +} + +const char* defiSubnet_instance (const ::defiSubnet* obj, int index) { + return ((const LefDefParser::defiSubnet*)obj)->instance(index); +} + +const char* defiSubnet_pin (const ::defiSubnet* obj, int index) { + return ((const LefDefParser::defiSubnet*)obj)->pin(index); +} + +int defiSubnet_pinIsSynthesized (const ::defiSubnet* obj, int index) { + return ((LefDefParser::defiSubnet*)obj)->pinIsSynthesized(index); +} + +int defiSubnet_pinIsMustJoin (const ::defiSubnet* obj, int index) { + return ((LefDefParser::defiSubnet*)obj)->pinIsMustJoin(index); +} + +int defiSubnet_isFixed (const ::defiSubnet* obj) { + return ((LefDefParser::defiSubnet*)obj)->isFixed(); +} + +int defiSubnet_isRouted (const ::defiSubnet* obj) { + return ((LefDefParser::defiSubnet*)obj)->isRouted(); +} + +int defiSubnet_isCover (const ::defiSubnet* obj) { + return ((LefDefParser::defiSubnet*)obj)->isCover(); +} + +int defiSubnet_hasNonDefaultRule (const ::defiSubnet* obj) { + return ((LefDefParser::defiSubnet*)obj)->hasNonDefaultRule(); +} + +int defiSubnet_numPaths (const ::defiSubnet* obj) { + return ((LefDefParser::defiSubnet*)obj)->numPaths(); +} + +const ::defiPath* defiSubnet_path (const ::defiSubnet* obj, int index) { + return (const ::defiPath*) ((const LefDefParser::defiSubnet*)obj)->path(index); +} + +const char* defiSubnet_nonDefaultRule (const ::defiSubnet* obj) { + return ((const LefDefParser::defiSubnet*)obj)->nonDefaultRule(); +} + +int defiSubnet_numWires (const ::defiSubnet* obj) { + return ((LefDefParser::defiSubnet*)obj)->numWires(); +} + +const ::defiWire* defiSubnet_wire (const ::defiSubnet* obj, int index) { + return (const ::defiWire*) ((const LefDefParser::defiSubnet*)obj)->wire(index); +} + +int defiVpin_xl (const ::defiVpin* obj) { + return ((LefDefParser::defiVpin*)obj)->xl(); +} + +int defiVpin_yl (const ::defiVpin* obj) { + return ((LefDefParser::defiVpin*)obj)->yl(); +} + +int defiVpin_xh (const ::defiVpin* obj) { + return ((LefDefParser::defiVpin*)obj)->xh(); +} + +int defiVpin_yh (const ::defiVpin* obj) { + return ((LefDefParser::defiVpin*)obj)->yh(); +} + +char defiVpin_status (const ::defiVpin* obj) { + return ((LefDefParser::defiVpin*)obj)->status(); +} + +int defiVpin_orient (const ::defiVpin* obj) { + return ((LefDefParser::defiVpin*)obj)->orient(); +} + +const char* defiVpin_orientStr (const ::defiVpin* obj) { + return ((const LefDefParser::defiVpin*)obj)->orientStr(); +} + +int defiVpin_xLoc (const ::defiVpin* obj) { + return ((LefDefParser::defiVpin*)obj)->xLoc(); +} + +int defiVpin_yLoc (const ::defiVpin* obj) { + return ((LefDefParser::defiVpin*)obj)->yLoc(); +} + +const char* defiVpin_name (const ::defiVpin* obj) { + return ((const LefDefParser::defiVpin*)obj)->name(); +} + +const char* defiVpin_layer (const ::defiVpin* obj) { + return ((const LefDefParser::defiVpin*)obj)->layer(); +} + +const char* defiShield_shieldName (const ::defiShield* obj) { + return ((const LefDefParser::defiShield*)obj)->shieldName(); +} + +int defiShield_numPaths (const ::defiShield* obj) { + return ((LefDefParser::defiShield*)obj)->numPaths(); +} + +const ::defiPath* defiShield_path (const ::defiShield* obj, int index) { + return (const ::defiPath*) ((const LefDefParser::defiShield*)obj)->path(index); +} + +const char* defiNet_name (const ::defiNet* obj) { + return ((const LefDefParser::defiNet*)obj)->name(); +} + +int defiNet_weight (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->weight(); +} + +int defiNet_numProps (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numProps(); +} + +const char* defiNet_propName (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->propName(index); +} + +const char* defiNet_propValue (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->propValue(index); +} + +double defiNet_propNumber (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->propNumber(index); +} + +const char defiNet_propType (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->propType(index); +} + +int defiNet_propIsNumber (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->propIsNumber(index); +} + +int defiNet_propIsString (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->propIsString(index); +} + +int defiNet_numConnections (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numConnections(); +} + +const char* defiNet_instance (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->instance(index); +} + +const char* defiNet_pin (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->pin(index); +} + +int defiNet_pinIsMustJoin (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->pinIsMustJoin(index); +} + +int defiNet_pinIsSynthesized (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->pinIsSynthesized(index); +} + +int defiNet_numSubnets (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numSubnets(); +} + +const ::defiSubnet* defiNet_subnet (const ::defiNet* obj, int index) { + return (const ::defiSubnet*) ((const LefDefParser::defiNet*)obj)->subnet(index); +} + +int defiNet_isFixed (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->isFixed(); +} + +int defiNet_isRouted (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->isRouted(); +} + +int defiNet_isCover (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->isCover(); +} + +int defiNet_numWires (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numWires(); +} + +const ::defiWire* defiNet_wire (const ::defiNet* obj, int index) { + return (const ::defiWire*) ((const LefDefParser::defiNet*)obj)->wire(index); +} + +int defiNet_numVpins (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numVpins(); +} + +const ::defiVpin* defiNet_vpin (const ::defiNet* obj, int index) { + return (const ::defiVpin*) ((const LefDefParser::defiNet*)obj)->vpin(index); +} + +int defiNet_hasProps (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasProps(); +} + +int defiNet_hasWeight (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasWeight(); +} + +int defiNet_hasSubnets (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasSubnets(); +} + +int defiNet_hasSource (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasSource(); +} + +int defiNet_hasFixedbump (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasFixedbump(); +} + +int defiNet_hasFrequency (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasFrequency(); +} + +int defiNet_hasPattern (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasPattern(); +} + +int defiNet_hasOriginal (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasOriginal(); +} + +int defiNet_hasCap (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasCap(); +} + +int defiNet_hasUse (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasUse(); +} + +int defiNet_hasStyle (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasStyle(); +} + +int defiNet_hasNonDefaultRule (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasNonDefaultRule(); +} + +int defiNet_hasVoltage (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasVoltage(); +} + +int defiNet_hasSpacingRules (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasSpacingRules(); +} + +int defiNet_hasWidthRules (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasWidthRules(); +} + +int defiNet_hasXTalk (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->hasXTalk(); +} + +int defiNet_numSpacingRules (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numSpacingRules(); +} + +void defiNet_spacingRule (const ::defiNet* obj, int index, char** layer, double* dist, double* left, double* right) { + ((LefDefParser::defiNet*)obj)->spacingRule(index, layer, dist, left, right); +} + +int defiNet_numWidthRules (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numWidthRules(); +} + +void defiNet_widthRule (const ::defiNet* obj, int index, char** layer, double* dist) { + ((LefDefParser::defiNet*)obj)->widthRule(index, layer, dist); +} + +double defiNet_voltage (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->voltage(); +} + +int defiNet_XTalk (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->XTalk(); +} + +const char* defiNet_source (const ::defiNet* obj) { + return ((const LefDefParser::defiNet*)obj)->source(); +} + +double defiNet_frequency (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->frequency(); +} + +const char* defiNet_original (const ::defiNet* obj) { + return ((const LefDefParser::defiNet*)obj)->original(); +} + +const char* defiNet_pattern (const ::defiNet* obj) { + return ((const LefDefParser::defiNet*)obj)->pattern(); +} + +double defiNet_cap (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->cap(); +} + +const char* defiNet_use (const ::defiNet* obj) { + return ((const LefDefParser::defiNet*)obj)->use(); +} + +int defiNet_style (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->style(); +} + +const char* defiNet_nonDefaultRule (const ::defiNet* obj) { + return ((const LefDefParser::defiNet*)obj)->nonDefaultRule(); +} + +int defiNet_numPaths (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numPaths(); +} + +const ::defiPath* defiNet_path (const ::defiNet* obj, int index) { + return (const ::defiPath*) ((const LefDefParser::defiNet*)obj)->path(index); +} + +int defiNet_numShields (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numShields(); +} + +const ::defiShield* defiNet_shield (const ::defiNet* obj, int index) { + return (const ::defiShield*) ((const LefDefParser::defiNet*)obj)->shield(index); +} + +int defiNet_numShieldNets (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numShieldNets(); +} + +const char* defiNet_shieldNet (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->shieldNet(index); +} + +int defiNet_numNoShields (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numNoShields(); +} + +const ::defiShield* defiNet_noShield (const ::defiNet* obj, int index) { + return (const ::defiShield*) ((const LefDefParser::defiNet*)obj)->noShield(index); +} + +int defiNet_numPolygons (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numPolygons(); +} + +const char* defiNet_polygonName (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->polygonName(index); +} + +::defiPoints defiNet_getPolygon (const ::defiNet* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiNet*)obj)->getPolygon(index); + return *((::defiPoints*)&tmp); +} + +int defiNet_polyMask (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->polyMask(index); +} + +const char* defiNet_polyRouteStatus (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->polyRouteStatus(index); +} + +const char* defiNet_polyRouteStatusShieldName (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->polyRouteStatusShieldName(index); +} + +const char* defiNet_polyShapeType (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->polyShapeType(index); +} + +int defiNet_numRectangles (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numRectangles(); +} + +const char* defiNet_rectName (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->rectName(index); +} + +int defiNet_xl (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->xl(index); +} + +int defiNet_yl (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->yl(index); +} + +int defiNet_xh (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->xh(index); +} + +int defiNet_yh (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->yh(index); +} + +int defiNet_rectMask (const ::defiNet* obj, int index) { + return ((LefDefParser::defiNet*)obj)->rectMask(index); +} + +const char* defiNet_rectRouteStatus (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->rectRouteStatus(index); +} + +const char* defiNet_rectRouteStatusShieldName (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->rectRouteStatusShieldName(index); +} + +const char* defiNet_rectShapeType (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->rectShapeType(index); +} + +int defiNet_numViaSpecs (const ::defiNet* obj) { + return ((LefDefParser::defiNet*)obj)->numViaSpecs(); +} + +::defiPoints defiNet_getViaPts (const ::defiNet* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiNet*)obj)->getViaPts(index); + return *((::defiPoints*)&tmp); +} + +const char* defiNet_viaName (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->viaName(index); +} + +const int defiNet_viaOrient (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->viaOrient(index); +} + +const char* defiNet_viaOrientStr (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->viaOrientStr(index); +} + +const int defiNet_topMaskNum (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->topMaskNum(index); +} + +const int defiNet_cutMaskNum (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->cutMaskNum(index); +} + +const int defiNet_bottomMaskNum (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->bottomMaskNum(index); +} + +const char* defiNet_viaRouteStatus (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->viaRouteStatus(index); +} + +const char* defiNet_viaRouteStatusShieldName (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->viaRouteStatusShieldName(index); +} + +const char* defiNet_viaShapeType (const ::defiNet* obj, int index) { + return ((const LefDefParser::defiNet*)obj)->viaShapeType(index); +} + +void defiNet_print (const ::defiNet* obj, FILE* f) { + ((LefDefParser::defiNet*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiNonDefault.cpp b/lefdef/src/def/cdef/xdefiNonDefault.cpp new file mode 100644 index 00000000..95c915f5 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiNonDefault.cpp @@ -0,0 +1,159 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiNonDefault.h" +#include "defiNonDefault.hpp" + +// Wrappers definitions. +const char* defiNonDefault_name (const ::defiNonDefault* obj) { + return ((const LefDefParser::defiNonDefault*)obj)->name(); +} + +int defiNonDefault_hasHardspacing (const ::defiNonDefault* obj) { + return ((LefDefParser::defiNonDefault*)obj)->hasHardspacing(); +} + +int defiNonDefault_numProps (const ::defiNonDefault* obj) { + return ((LefDefParser::defiNonDefault*)obj)->numProps(); +} + +const char* defiNonDefault_propName (const ::defiNonDefault* obj, int index) { + return ((const LefDefParser::defiNonDefault*)obj)->propName(index); +} + +const char* defiNonDefault_propValue (const ::defiNonDefault* obj, int index) { + return ((const LefDefParser::defiNonDefault*)obj)->propValue(index); +} + +double defiNonDefault_propNumber (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->propNumber(index); +} + +const char defiNonDefault_propType (const ::defiNonDefault* obj, int index) { + return ((const LefDefParser::defiNonDefault*)obj)->propType(index); +} + +int defiNonDefault_propIsNumber (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->propIsNumber(index); +} + +int defiNonDefault_propIsString (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->propIsString(index); +} + +int defiNonDefault_numLayers (const ::defiNonDefault* obj) { + return ((LefDefParser::defiNonDefault*)obj)->numLayers(); +} + +const char* defiNonDefault_layerName (const ::defiNonDefault* obj, int index) { + return ((const LefDefParser::defiNonDefault*)obj)->layerName(index); +} + +double defiNonDefault_layerWidth (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->layerWidth(index); +} + +int defiNonDefault_layerWidthVal (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->layerWidthVal(index); +} + +int defiNonDefault_hasLayerDiagWidth (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->hasLayerDiagWidth(index); +} + +double defiNonDefault_layerDiagWidth (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->layerDiagWidth(index); +} + +int defiNonDefault_layerDiagWidthVal (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->layerDiagWidthVal(index); +} + +int defiNonDefault_hasLayerSpacing (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->hasLayerSpacing(index); +} + +double defiNonDefault_layerSpacing (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->layerSpacing(index); +} + +int defiNonDefault_layerSpacingVal (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->layerSpacingVal(index); +} + +int defiNonDefault_hasLayerWireExt (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->hasLayerWireExt(index); +} + +double defiNonDefault_layerWireExt (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->layerWireExt(index); +} + +int defiNonDefault_layerWireExtVal (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->layerWireExtVal(index); +} + +int defiNonDefault_numVias (const ::defiNonDefault* obj) { + return ((LefDefParser::defiNonDefault*)obj)->numVias(); +} + +const char* defiNonDefault_viaName (const ::defiNonDefault* obj, int index) { + return ((const LefDefParser::defiNonDefault*)obj)->viaName(index); +} + +int defiNonDefault_numViaRules (const ::defiNonDefault* obj) { + return ((LefDefParser::defiNonDefault*)obj)->numViaRules(); +} + +const char* defiNonDefault_viaRuleName (const ::defiNonDefault* obj, int index) { + return ((const LefDefParser::defiNonDefault*)obj)->viaRuleName(index); +} + +int defiNonDefault_numMinCuts (const ::defiNonDefault* obj) { + return ((LefDefParser::defiNonDefault*)obj)->numMinCuts(); +} + +const char* defiNonDefault_cutLayerName (const ::defiNonDefault* obj, int index) { + return ((const LefDefParser::defiNonDefault*)obj)->cutLayerName(index); +} + +int defiNonDefault_numCuts (const ::defiNonDefault* obj, int index) { + return ((LefDefParser::defiNonDefault*)obj)->numCuts(index); +} + +void defiNonDefault_print (const ::defiNonDefault* obj, FILE* f) { + ((LefDefParser::defiNonDefault*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiPartition.cpp b/lefdef/src/def/cdef/xdefiPartition.cpp new file mode 100644 index 00000000..daab84d6 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiPartition.cpp @@ -0,0 +1,183 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiPartition.h" +#include "defiPartition.hpp" + +// Wrappers definitions. +const char* defiPartition_name (const ::defiPartition* obj) { + return ((const LefDefParser::defiPartition*)obj)->name(); +} + +char defiPartition_direction (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->direction(); +} + +const char* defiPartition_itemType (const ::defiPartition* obj) { + return ((const LefDefParser::defiPartition*)obj)->itemType(); +} + +const char* defiPartition_pinName (const ::defiPartition* obj) { + return ((const LefDefParser::defiPartition*)obj)->pinName(); +} + +const char* defiPartition_instName (const ::defiPartition* obj) { + return ((const LefDefParser::defiPartition*)obj)->instName(); +} + +int defiPartition_numPins (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->numPins(); +} + +const char* defiPartition_pin (const ::defiPartition* obj, int index) { + return ((const LefDefParser::defiPartition*)obj)->pin(index); +} + +int defiPartition_isSetupRise (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->isSetupRise(); +} + +int defiPartition_isSetupFall (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->isSetupFall(); +} + +int defiPartition_isHoldRise (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->isHoldRise(); +} + +int defiPartition_isHoldFall (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->isHoldFall(); +} + +int defiPartition_hasMin (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasMin(); +} + +int defiPartition_hasMax (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasMax(); +} + +int defiPartition_hasRiseMin (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasRiseMin(); +} + +int defiPartition_hasFallMin (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasFallMin(); +} + +int defiPartition_hasRiseMax (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasRiseMax(); +} + +int defiPartition_hasFallMax (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasFallMax(); +} + +int defiPartition_hasRiseMinRange (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasRiseMinRange(); +} + +int defiPartition_hasFallMinRange (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasFallMinRange(); +} + +int defiPartition_hasRiseMaxRange (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasRiseMaxRange(); +} + +int defiPartition_hasFallMaxRange (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->hasFallMaxRange(); +} + +double defiPartition_partitionMin (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->partitionMin(); +} + +double defiPartition_partitionMax (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->partitionMax(); +} + +double defiPartition_riseMin (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->riseMin(); +} + +double defiPartition_fallMin (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->fallMin(); +} + +double defiPartition_riseMax (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->riseMax(); +} + +double defiPartition_fallMax (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->fallMax(); +} + +double defiPartition_riseMinLeft (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->riseMinLeft(); +} + +double defiPartition_fallMinLeft (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->fallMinLeft(); +} + +double defiPartition_riseMaxLeft (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->riseMaxLeft(); +} + +double defiPartition_fallMaxLeft (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->fallMaxLeft(); +} + +double defiPartition_riseMinRight (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->riseMinRight(); +} + +double defiPartition_fallMinRight (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->fallMinRight(); +} + +double defiPartition_riseMaxRight (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->riseMaxRight(); +} + +double defiPartition_fallMaxRight (const ::defiPartition* obj) { + return ((LefDefParser::defiPartition*)obj)->fallMaxRight(); +} + +void defiPartition_print (const ::defiPartition* obj, FILE* f) { + ((LefDefParser::defiPartition*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiPath.cpp b/lefdef/src/def/cdef/xdefiPath.cpp new file mode 100644 index 00000000..ef904fda --- /dev/null +++ b/lefdef/src/def/cdef/xdefiPath.cpp @@ -0,0 +1,135 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiPath.h" +#include "defiPath.hpp" + +// Wrappers definitions. +void defiPath_initTraverse (const ::defiPath* obj) { + ((LefDefParser::defiPath*)obj)->initTraverse(); +} + +void defiPath_initTraverseBackwards (const ::defiPath* obj) { + ((LefDefParser::defiPath*)obj)->initTraverseBackwards(); +} + +int defiPath_next (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->next(); +} + +int defiPath_prev (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->prev(); +} + +const char* defiPath_getLayer (const ::defiPath* obj) { + return ((const LefDefParser::defiPath*)obj)->getLayer(); +} + +const char* defiPath_getTaperRule (const ::defiPath* obj) { + return ((const LefDefParser::defiPath*)obj)->getTaperRule(); +} + +const char* defiPath_getVia (const ::defiPath* obj) { + return ((const LefDefParser::defiPath*)obj)->getVia(); +} + +const char* defiPath_getShape (const ::defiPath* obj) { + return ((const LefDefParser::defiPath*)obj)->getShape(); +} + +int defiPath_getTaper (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getTaper(); +} + +int defiPath_getStyle (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getStyle(); +} + +int defiPath_getViaRotation (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getViaRotation(); +} + +void defiPath_getViaRect (const ::defiPath* obj, int* deltaX1, int* deltaY1, int* deltaX2, int* deltaY2) { + ((LefDefParser::defiPath*)obj)->getViaRect(deltaX1, deltaY1, deltaX2, deltaY2); +} + +const char* defiPath_getViaRotationStr (const ::defiPath* obj) { + return ((const LefDefParser::defiPath*)obj)->getViaRotationStr(); +} + +void defiPath_getViaData (const ::defiPath* obj, int* numX, int* numY, int* stepX, int* stepY) { + ((LefDefParser::defiPath*)obj)->getViaData(numX, numY, stepX, stepY); +} + +int defiPath_getWidth (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getWidth(); +} + +void defiPath_getPoint (const ::defiPath* obj, int* x, int* y) { + ((LefDefParser::defiPath*)obj)->getPoint(x, y); +} + +void defiPath_getFlushPoint (const ::defiPath* obj, int* x, int* y, int* ext) { + ((LefDefParser::defiPath*)obj)->getFlushPoint(x, y, ext); +} + +void defiPath_getVirtualPoint (const ::defiPath* obj, int* x, int* y) { + ((LefDefParser::defiPath*)obj)->getVirtualPoint(x, y); +} + +int defiPath_getMask (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getMask(); +} + +int defiPath_getViaTopMask (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getViaTopMask(); +} + +int defiPath_getViaCutMask (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getViaCutMask(); +} + +int defiPath_getViaBottomMask (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getViaBottomMask(); +} + +int defiPath_getRectMask (const ::defiPath* obj) { + return ((LefDefParser::defiPath*)obj)->getRectMask(); +} + +void defiPath_print (const ::defiPath* obj, FILE* fout) { + ((LefDefParser::defiPath*)obj)->print(fout); +} + diff --git a/lefdef/src/def/cdef/xdefiPinCap.cpp b/lefdef/src/def/cdef/xdefiPinCap.cpp new file mode 100644 index 00000000..76a0f911 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiPinCap.cpp @@ -0,0 +1,551 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiPinCap.h" +#include "defiPinCap.hpp" + +// Wrappers definitions. +int defiPinCap_pin (const ::defiPinCap* obj) { + return ((LefDefParser::defiPinCap*)obj)->pin(); +} + +double defiPinCap_cap (const ::defiPinCap* obj) { + return ((LefDefParser::defiPinCap*)obj)->cap(); +} + +void defiPinCap_print (const ::defiPinCap* obj, FILE* f) { + ((LefDefParser::defiPinCap*)obj)->print(f); +} + +char* defiPinAntennaModel_antennaOxide (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->antennaOxide(); +} + +int defiPinAntennaModel_hasAPinGateArea (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->hasAPinGateArea(); +} + +int defiPinAntennaModel_numAPinGateArea (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->numAPinGateArea(); +} + +int defiPinAntennaModel_APinGateArea (const ::defiPinAntennaModel* obj, int index) { + return ((LefDefParser::defiPinAntennaModel*)obj)->APinGateArea(index); +} + +int defiPinAntennaModel_hasAPinGateAreaLayer (const ::defiPinAntennaModel* obj, int index) { + return ((LefDefParser::defiPinAntennaModel*)obj)->hasAPinGateAreaLayer(index); +} + +const char* defiPinAntennaModel_APinGateAreaLayer (const ::defiPinAntennaModel* obj, int index) { + return ((const LefDefParser::defiPinAntennaModel*)obj)->APinGateAreaLayer(index); +} + +int defiPinAntennaModel_hasAPinMaxAreaCar (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->hasAPinMaxAreaCar(); +} + +int defiPinAntennaModel_numAPinMaxAreaCar (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->numAPinMaxAreaCar(); +} + +int defiPinAntennaModel_APinMaxAreaCar (const ::defiPinAntennaModel* obj, int index) { + return ((LefDefParser::defiPinAntennaModel*)obj)->APinMaxAreaCar(index); +} + +int defiPinAntennaModel_hasAPinMaxAreaCarLayer (const ::defiPinAntennaModel* obj, int index) { + return ((LefDefParser::defiPinAntennaModel*)obj)->hasAPinMaxAreaCarLayer(index); +} + +const char* defiPinAntennaModel_APinMaxAreaCarLayer (const ::defiPinAntennaModel* obj, int index) { + return ((const LefDefParser::defiPinAntennaModel*)obj)->APinMaxAreaCarLayer(index); +} + +int defiPinAntennaModel_hasAPinMaxSideAreaCar (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->hasAPinMaxSideAreaCar(); +} + +int defiPinAntennaModel_numAPinMaxSideAreaCar (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->numAPinMaxSideAreaCar(); +} + +int defiPinAntennaModel_APinMaxSideAreaCar (const ::defiPinAntennaModel* obj, int index) { + return ((LefDefParser::defiPinAntennaModel*)obj)->APinMaxSideAreaCar(index); +} + +int defiPinAntennaModel_hasAPinMaxSideAreaCarLayer (const ::defiPinAntennaModel* obj, int index) { + return ((LefDefParser::defiPinAntennaModel*)obj)->hasAPinMaxSideAreaCarLayer(index); +} + +const char* defiPinAntennaModel_APinMaxSideAreaCarLayer (const ::defiPinAntennaModel* obj, int index) { + return ((const LefDefParser::defiPinAntennaModel*)obj)->APinMaxSideAreaCarLayer(index); +} + +int defiPinAntennaModel_hasAPinMaxCutCar (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->hasAPinMaxCutCar(); +} + +int defiPinAntennaModel_numAPinMaxCutCar (const ::defiPinAntennaModel* obj) { + return ((LefDefParser::defiPinAntennaModel*)obj)->numAPinMaxCutCar(); +} + +int defiPinAntennaModel_APinMaxCutCar (const ::defiPinAntennaModel* obj, int index) { + return ((LefDefParser::defiPinAntennaModel*)obj)->APinMaxCutCar(index); +} + +int defiPinAntennaModel_hasAPinMaxCutCarLayer (const ::defiPinAntennaModel* obj, int index) { + return ((LefDefParser::defiPinAntennaModel*)obj)->hasAPinMaxCutCarLayer(index); +} + +const char* defiPinAntennaModel_APinMaxCutCarLayer (const ::defiPinAntennaModel* obj, int index) { + return ((const LefDefParser::defiPinAntennaModel*)obj)->APinMaxCutCarLayer(index); +} + +int defiPinPort_numLayer (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->numLayer(); +} + +const char* defiPinPort_layer (const ::defiPinPort* obj, int index) { + return ((const LefDefParser::defiPinPort*)obj)->layer(index); +} + +void defiPinPort_bounds (const ::defiPinPort* obj, int index, int* xl, int* yl, int* xh, int* yh) { + ((LefDefParser::defiPinPort*)obj)->bounds(index, xl, yl, xh, yh); +} + +int defiPinPort_hasLayerSpacing (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->hasLayerSpacing(index); +} + +int defiPinPort_hasLayerDesignRuleWidth (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->hasLayerDesignRuleWidth(index); +} + +int defiPinPort_layerSpacing (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->layerSpacing(index); +} + +int defiPinPort_layerMask (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->layerMask(index); +} + +int defiPinPort_layerDesignRuleWidth (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->layerDesignRuleWidth(index); +} + +int defiPinPort_numPolygons (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->numPolygons(); +} + +const char* defiPinPort_polygonName (const ::defiPinPort* obj, int index) { + return ((const LefDefParser::defiPinPort*)obj)->polygonName(index); +} + +::defiPoints defiPinPort_getPolygon (const ::defiPinPort* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiPinPort*)obj)->getPolygon(index); + return *((::defiPoints*)&tmp); +} + +int defiPinPort_hasPolygonSpacing (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->hasPolygonSpacing(index); +} + +int defiPinPort_hasPolygonDesignRuleWidth (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->hasPolygonDesignRuleWidth(index); +} + +int defiPinPort_polygonSpacing (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->polygonSpacing(index); +} + +int defiPinPort_polygonDesignRuleWidth (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->polygonDesignRuleWidth(index); +} + +int defiPinPort_polygonMask (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->polygonMask(index); +} + +int defiPinPort_numVias (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->numVias(); +} + +const char* defiPinPort_viaName (const ::defiPinPort* obj, int index) { + return ((const LefDefParser::defiPinPort*)obj)->viaName(index); +} + +int defiPinPort_viaPtX (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->viaPtX(index); +} + +int defiPinPort_viaPtY (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->viaPtY(index); +} + +int defiPinPort_viaTopMask (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->viaTopMask(index); +} + +int defiPinPort_viaCutMask (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->viaCutMask(index); +} + +int defiPinPort_viaBottomMask (const ::defiPinPort* obj, int index) { + return ((LefDefParser::defiPinPort*)obj)->viaBottomMask(index); +} + +int defiPinPort_hasPlacement (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->hasPlacement(); +} + +int defiPinPort_isPlaced (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->isPlaced(); +} + +int defiPinPort_isCover (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->isCover(); +} + +int defiPinPort_isFixed (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->isFixed(); +} + +int defiPinPort_placementX (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->placementX(); +} + +int defiPinPort_placementY (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->placementY(); +} + +int defiPinPort_orient (const ::defiPinPort* obj) { + return ((LefDefParser::defiPinPort*)obj)->orient(); +} + +const char* defiPinPort_orientStr (const ::defiPinPort* obj) { + return ((const LefDefParser::defiPinPort*)obj)->orientStr(); +} + +const char* defiPin_pinName (const ::defiPin* obj) { + return ((const LefDefParser::defiPin*)obj)->pinName(); +} + +const char* defiPin_netName (const ::defiPin* obj) { + return ((const LefDefParser::defiPin*)obj)->netName(); +} + +int defiPin_hasDirection (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasDirection(); +} + +int defiPin_hasUse (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasUse(); +} + +int defiPin_hasLayer (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasLayer(); +} + +int defiPin_hasPlacement (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasPlacement(); +} + +int defiPin_isUnplaced (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->isUnplaced(); +} + +int defiPin_isPlaced (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->isPlaced(); +} + +int defiPin_isCover (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->isCover(); +} + +int defiPin_isFixed (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->isFixed(); +} + +int defiPin_placementX (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->placementX(); +} + +int defiPin_placementY (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->placementY(); +} + +const char* defiPin_direction (const ::defiPin* obj) { + return ((const LefDefParser::defiPin*)obj)->direction(); +} + +const char* defiPin_use (const ::defiPin* obj) { + return ((const LefDefParser::defiPin*)obj)->use(); +} + +int defiPin_numLayer (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numLayer(); +} + +const char* defiPin_layer (const ::defiPin* obj, int index) { + return ((const LefDefParser::defiPin*)obj)->layer(index); +} + +void defiPin_bounds (const ::defiPin* obj, int index, int* xl, int* yl, int* xh, int* yh) { + ((LefDefParser::defiPin*)obj)->bounds(index, xl, yl, xh, yh); +} + +int defiPin_layerMask (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->layerMask(index); +} + +int defiPin_hasLayerSpacing (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->hasLayerSpacing(index); +} + +int defiPin_hasLayerDesignRuleWidth (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->hasLayerDesignRuleWidth(index); +} + +int defiPin_layerSpacing (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->layerSpacing(index); +} + +int defiPin_layerDesignRuleWidth (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->layerDesignRuleWidth(index); +} + +int defiPin_numPolygons (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numPolygons(); +} + +const char* defiPin_polygonName (const ::defiPin* obj, int index) { + return ((const LefDefParser::defiPin*)obj)->polygonName(index); +} + +::defiPoints defiPin_getPolygon (const ::defiPin* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiPin*)obj)->getPolygon(index); + return *((::defiPoints*)&tmp); +} + +int defiPin_polygonMask (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->polygonMask(index); +} + +int defiPin_hasPolygonSpacing (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->hasPolygonSpacing(index); +} + +int defiPin_hasPolygonDesignRuleWidth (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->hasPolygonDesignRuleWidth(index); +} + +int defiPin_polygonSpacing (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->polygonSpacing(index); +} + +int defiPin_polygonDesignRuleWidth (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->polygonDesignRuleWidth(index); +} + +int defiPin_hasNetExpr (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasNetExpr(); +} + +int defiPin_hasSupplySensitivity (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasSupplySensitivity(); +} + +int defiPin_hasGroundSensitivity (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasGroundSensitivity(); +} + +const char* defiPin_netExpr (const ::defiPin* obj) { + return ((const LefDefParser::defiPin*)obj)->netExpr(); +} + +const char* defiPin_supplySensitivity (const ::defiPin* obj) { + return ((const LefDefParser::defiPin*)obj)->supplySensitivity(); +} + +const char* defiPin_groundSensitivity (const ::defiPin* obj) { + return ((const LefDefParser::defiPin*)obj)->groundSensitivity(); +} + +int defiPin_orient (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->orient(); +} + +const char* defiPin_orientStr (const ::defiPin* obj) { + return ((const LefDefParser::defiPin*)obj)->orientStr(); +} + +int defiPin_hasSpecial (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasSpecial(); +} + +int defiPin_numVias (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numVias(); +} + +const char* defiPin_viaName (const ::defiPin* obj, int index) { + return ((const LefDefParser::defiPin*)obj)->viaName(index); +} + +int defiPin_viaTopMask (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->viaTopMask(index); +} + +int defiPin_viaCutMask (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->viaCutMask(index); +} + +int defiPin_viaBottomMask (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->viaBottomMask(index); +} + +int defiPin_viaPtX (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->viaPtX(index); +} + +int defiPin_viaPtY (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->viaPtY(index); +} + +int defiPin_hasAPinPartialMetalArea (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasAPinPartialMetalArea(); +} + +int defiPin_numAPinPartialMetalArea (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numAPinPartialMetalArea(); +} + +int defiPin_APinPartialMetalArea (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->APinPartialMetalArea(index); +} + +int defiPin_hasAPinPartialMetalAreaLayer (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->hasAPinPartialMetalAreaLayer(index); +} + +const char* defiPin_APinPartialMetalAreaLayer (const ::defiPin* obj, int index) { + return ((const LefDefParser::defiPin*)obj)->APinPartialMetalAreaLayer(index); +} + +int defiPin_hasAPinPartialMetalSideArea (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasAPinPartialMetalSideArea(); +} + +int defiPin_numAPinPartialMetalSideArea (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numAPinPartialMetalSideArea(); +} + +int defiPin_APinPartialMetalSideArea (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->APinPartialMetalSideArea(index); +} + +int defiPin_hasAPinPartialMetalSideAreaLayer (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->hasAPinPartialMetalSideAreaLayer(index); +} + +const char* defiPin_APinPartialMetalSideAreaLayer (const ::defiPin* obj, int index) { + return ((const LefDefParser::defiPin*)obj)->APinPartialMetalSideAreaLayer(index); +} + +int defiPin_hasAPinDiffArea (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasAPinDiffArea(); +} + +int defiPin_numAPinDiffArea (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numAPinDiffArea(); +} + +int defiPin_APinDiffArea (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->APinDiffArea(index); +} + +int defiPin_hasAPinDiffAreaLayer (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->hasAPinDiffAreaLayer(index); +} + +const char* defiPin_APinDiffAreaLayer (const ::defiPin* obj, int index) { + return ((const LefDefParser::defiPin*)obj)->APinDiffAreaLayer(index); +} + +int defiPin_hasAPinPartialCutArea (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasAPinPartialCutArea(); +} + +int defiPin_numAPinPartialCutArea (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numAPinPartialCutArea(); +} + +int defiPin_APinPartialCutArea (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->APinPartialCutArea(index); +} + +int defiPin_hasAPinPartialCutAreaLayer (const ::defiPin* obj, int index) { + return ((LefDefParser::defiPin*)obj)->hasAPinPartialCutAreaLayer(index); +} + +const char* defiPin_APinPartialCutAreaLayer (const ::defiPin* obj, int index) { + return ((const LefDefParser::defiPin*)obj)->APinPartialCutAreaLayer(index); +} + +int defiPin_numAntennaModel (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numAntennaModel(); +} + +const ::defiPinAntennaModel* defiPin_antennaModel (const ::defiPin* obj, int index) { + return (const ::defiPinAntennaModel*) ((LefDefParser::defiPin*)obj)->antennaModel(index); +} + +int defiPin_hasPort (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->hasPort(); +} + +int defiPin_numPorts (const ::defiPin* obj) { + return ((LefDefParser::defiPin*)obj)->numPorts(); +} + +const ::defiPinPort* defiPin_pinPort (const ::defiPin* obj, int index) { + return (const ::defiPinPort*) ((LefDefParser::defiPin*)obj)->pinPort(index); +} + +void defiPin_print (const ::defiPin* obj, FILE* f) { + ((LefDefParser::defiPin*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiPinProp.cpp b/lefdef/src/def/cdef/xdefiPinProp.cpp new file mode 100644 index 00000000..722765f5 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiPinProp.cpp @@ -0,0 +1,83 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiPinProp.h" +#include "defiPinProp.hpp" + +// Wrappers definitions. +int defiPinProp_isPin (const ::defiPinProp* obj) { + return ((LefDefParser::defiPinProp*)obj)->isPin(); +} + +const char* defiPinProp_instName (const ::defiPinProp* obj) { + return ((const LefDefParser::defiPinProp*)obj)->instName(); +} + +const char* defiPinProp_pinName (const ::defiPinProp* obj) { + return ((const LefDefParser::defiPinProp*)obj)->pinName(); +} + +int defiPinProp_numProps (const ::defiPinProp* obj) { + return ((LefDefParser::defiPinProp*)obj)->numProps(); +} + +const char* defiPinProp_propName (const ::defiPinProp* obj, int index) { + return ((const LefDefParser::defiPinProp*)obj)->propName(index); +} + +const char* defiPinProp_propValue (const ::defiPinProp* obj, int index) { + return ((const LefDefParser::defiPinProp*)obj)->propValue(index); +} + +double defiPinProp_propNumber (const ::defiPinProp* obj, int index) { + return ((LefDefParser::defiPinProp*)obj)->propNumber(index); +} + +const char defiPinProp_propType (const ::defiPinProp* obj, int index) { + return ((const LefDefParser::defiPinProp*)obj)->propType(index); +} + +int defiPinProp_propIsNumber (const ::defiPinProp* obj, int index) { + return ((LefDefParser::defiPinProp*)obj)->propIsNumber(index); +} + +int defiPinProp_propIsString (const ::defiPinProp* obj, int index) { + return ((LefDefParser::defiPinProp*)obj)->propIsString(index); +} + +void defiPinProp_print (const ::defiPinProp* obj, FILE* f) { + ((LefDefParser::defiPinProp*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiProp.cpp b/lefdef/src/def/cdef/xdefiProp.cpp new file mode 100644 index 00000000..8db54574 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiProp.cpp @@ -0,0 +1,87 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiProp.h" +#include "defiProp.hpp" + +// Wrappers definitions. +const char* defiProp_string (const ::defiProp* obj) { + return ((const LefDefParser::defiProp*)obj)->string(); +} + +const char* defiProp_propType (const ::defiProp* obj) { + return ((const LefDefParser::defiProp*)obj)->propType(); +} + +const char* defiProp_propName (const ::defiProp* obj) { + return ((const LefDefParser::defiProp*)obj)->propName(); +} + +char defiProp_dataType (const ::defiProp* obj) { + return ((LefDefParser::defiProp*)obj)->dataType(); +} + +int defiProp_hasNumber (const ::defiProp* obj) { + return ((LefDefParser::defiProp*)obj)->hasNumber(); +} + +int defiProp_hasRange (const ::defiProp* obj) { + return ((LefDefParser::defiProp*)obj)->hasRange(); +} + +int defiProp_hasString (const ::defiProp* obj) { + return ((LefDefParser::defiProp*)obj)->hasString(); +} + +int defiProp_hasNameMapString (const ::defiProp* obj) { + return ((LefDefParser::defiProp*)obj)->hasNameMapString(); +} + +double defiProp_number (const ::defiProp* obj) { + return ((LefDefParser::defiProp*)obj)->number(); +} + +double defiProp_left (const ::defiProp* obj) { + return ((LefDefParser::defiProp*)obj)->left(); +} + +double defiProp_right (const ::defiProp* obj) { + return ((LefDefParser::defiProp*)obj)->right(); +} + +void defiProp_print (const ::defiProp* obj, FILE* f) { + ((LefDefParser::defiProp*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiPropType.cpp b/lefdef/src/def/cdef/xdefiPropType.cpp new file mode 100644 index 00000000..7e0c044e --- /dev/null +++ b/lefdef/src/def/cdef/xdefiPropType.cpp @@ -0,0 +1,43 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiPropType.h" +#include "defiPropType.hpp" + +// Wrappers definitions. +const char defiPropType_propType (const ::defiPropType* obj, char* name) { + return ((const LefDefParser::defiPropType*)obj)->propType(name); +} + diff --git a/lefdef/src/def/cdef/xdefiRegion.cpp b/lefdef/src/def/cdef/xdefiRegion.cpp new file mode 100644 index 00000000..4e4e3cba --- /dev/null +++ b/lefdef/src/def/cdef/xdefiRegion.cpp @@ -0,0 +1,103 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiRegion.h" +#include "defiRegion.hpp" + +// Wrappers definitions. +const char* defiRegion_name (const ::defiRegion* obj) { + return ((const LefDefParser::defiRegion*)obj)->name(); +} + +int defiRegion_numProps (const ::defiRegion* obj) { + return ((LefDefParser::defiRegion*)obj)->numProps(); +} + +const char* defiRegion_propName (const ::defiRegion* obj, int index) { + return ((const LefDefParser::defiRegion*)obj)->propName(index); +} + +const char* defiRegion_propValue (const ::defiRegion* obj, int index) { + return ((const LefDefParser::defiRegion*)obj)->propValue(index); +} + +double defiRegion_propNumber (const ::defiRegion* obj, int index) { + return ((LefDefParser::defiRegion*)obj)->propNumber(index); +} + +const char defiRegion_propType (const ::defiRegion* obj, int index) { + return ((const LefDefParser::defiRegion*)obj)->propType(index); +} + +int defiRegion_propIsNumber (const ::defiRegion* obj, int index) { + return ((LefDefParser::defiRegion*)obj)->propIsNumber(index); +} + +int defiRegion_propIsString (const ::defiRegion* obj, int index) { + return ((LefDefParser::defiRegion*)obj)->propIsString(index); +} + +int defiRegion_hasType (const ::defiRegion* obj) { + return ((LefDefParser::defiRegion*)obj)->hasType(); +} + +const char* defiRegion_type (const ::defiRegion* obj) { + return ((const LefDefParser::defiRegion*)obj)->type(); +} + +int defiRegion_numRectangles (const ::defiRegion* obj) { + return ((LefDefParser::defiRegion*)obj)->numRectangles(); +} + +int defiRegion_xl (const ::defiRegion* obj, int index) { + return ((LefDefParser::defiRegion*)obj)->xl(index); +} + +int defiRegion_yl (const ::defiRegion* obj, int index) { + return ((LefDefParser::defiRegion*)obj)->yl(index); +} + +int defiRegion_xh (const ::defiRegion* obj, int index) { + return ((LefDefParser::defiRegion*)obj)->xh(index); +} + +int defiRegion_yh (const ::defiRegion* obj, int index) { + return ((LefDefParser::defiRegion*)obj)->yh(index); +} + +void defiRegion_print (const ::defiRegion* obj, FILE* f) { + ((LefDefParser::defiRegion*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiRowTrack.cpp b/lefdef/src/def/cdef/xdefiRowTrack.cpp new file mode 100644 index 00000000..66506b3a --- /dev/null +++ b/lefdef/src/def/cdef/xdefiRowTrack.cpp @@ -0,0 +1,175 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiRowTrack.h" +#include "defiRowTrack.hpp" + +// Wrappers definitions. +const char* defiRow_name (const ::defiRow* obj) { + return ((const LefDefParser::defiRow*)obj)->name(); +} + +const char* defiRow_macro (const ::defiRow* obj) { + return ((const LefDefParser::defiRow*)obj)->macro(); +} + +double defiRow_x (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->x(); +} + +double defiRow_y (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->y(); +} + +int defiRow_orient (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->orient(); +} + +const char* defiRow_orientStr (const ::defiRow* obj) { + return ((const LefDefParser::defiRow*)obj)->orientStr(); +} + +int defiRow_hasDo (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->hasDo(); +} + +double defiRow_xNum (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->xNum(); +} + +double defiRow_yNum (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->yNum(); +} + +int defiRow_hasDoStep (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->hasDoStep(); +} + +double defiRow_xStep (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->xStep(); +} + +double defiRow_yStep (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->yStep(); +} + +int defiRow_numProps (const ::defiRow* obj) { + return ((LefDefParser::defiRow*)obj)->numProps(); +} + +const char* defiRow_propName (const ::defiRow* obj, int index) { + return ((const LefDefParser::defiRow*)obj)->propName(index); +} + +const char* defiRow_propValue (const ::defiRow* obj, int index) { + return ((const LefDefParser::defiRow*)obj)->propValue(index); +} + +double defiRow_propNumber (const ::defiRow* obj, int index) { + return ((LefDefParser::defiRow*)obj)->propNumber(index); +} + +const char defiRow_propType (const ::defiRow* obj, int index) { + return ((const LefDefParser::defiRow*)obj)->propType(index); +} + +int defiRow_propIsNumber (const ::defiRow* obj, int index) { + return ((LefDefParser::defiRow*)obj)->propIsNumber(index); +} + +int defiRow_propIsString (const ::defiRow* obj, int index) { + return ((LefDefParser::defiRow*)obj)->propIsString(index); +} + +void defiRow_print (const ::defiRow* obj, FILE* f) { + ((LefDefParser::defiRow*)obj)->print(f); +} + +const char* defiTrack_macro (const ::defiTrack* obj) { + return ((const LefDefParser::defiTrack*)obj)->macro(); +} + +double defiTrack_x (const ::defiTrack* obj) { + return ((LefDefParser::defiTrack*)obj)->x(); +} + +double defiTrack_xNum (const ::defiTrack* obj) { + return ((LefDefParser::defiTrack*)obj)->xNum(); +} + +double defiTrack_xStep (const ::defiTrack* obj) { + return ((LefDefParser::defiTrack*)obj)->xStep(); +} + +int defiTrack_numLayers (const ::defiTrack* obj) { + return ((LefDefParser::defiTrack*)obj)->numLayers(); +} + +const char* defiTrack_layer (const ::defiTrack* obj, int index) { + return ((const LefDefParser::defiTrack*)obj)->layer(index); +} + +int defiTrack_firstTrackMask (const ::defiTrack* obj) { + return ((LefDefParser::defiTrack*)obj)->firstTrackMask(); +} + +int defiTrack_sameMask (const ::defiTrack* obj) { + return ((LefDefParser::defiTrack*)obj)->sameMask(); +} + +void defiTrack_print (const ::defiTrack* obj, FILE* f) { + ((LefDefParser::defiTrack*)obj)->print(f); +} + +const char* defiGcellGrid_macro (const ::defiGcellGrid* obj) { + return ((const LefDefParser::defiGcellGrid*)obj)->macro(); +} + +int defiGcellGrid_x (const ::defiGcellGrid* obj) { + return ((LefDefParser::defiGcellGrid*)obj)->x(); +} + +int defiGcellGrid_xNum (const ::defiGcellGrid* obj) { + return ((LefDefParser::defiGcellGrid*)obj)->xNum(); +} + +double defiGcellGrid_xStep (const ::defiGcellGrid* obj) { + return ((LefDefParser::defiGcellGrid*)obj)->xStep(); +} + +void defiGcellGrid_print (const ::defiGcellGrid* obj, FILE* f) { + ((LefDefParser::defiGcellGrid*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiScanchain.cpp b/lefdef/src/def/cdef/xdefiScanchain.cpp new file mode 100644 index 00000000..53e360c1 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiScanchain.cpp @@ -0,0 +1,135 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiScanchain.h" +#include "defiScanchain.hpp" + +// Wrappers definitions. +int defiOrdered_num (const ::defiOrdered* obj) { + return ((LefDefParser::defiOrdered*)obj)->num(); +} + +char** defiOrdered_inst (const ::defiOrdered* obj) { + return ((LefDefParser::defiOrdered*)obj)->inst(); +} + +char** defiOrdered_in (const ::defiOrdered* obj) { + return ((LefDefParser::defiOrdered*)obj)->in(); +} + +char** defiOrdered_out (const ::defiOrdered* obj) { + return ((LefDefParser::defiOrdered*)obj)->out(); +} + +int* defiOrdered_bits (const ::defiOrdered* obj) { + return ((LefDefParser::defiOrdered*)obj)->bits(); +} + +const char* defiScanchain_name (const ::defiScanchain* obj) { + return ((const LefDefParser::defiScanchain*)obj)->name(); +} + +int defiScanchain_hasStart (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->hasStart(); +} + +int defiScanchain_hasStop (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->hasStop(); +} + +int defiScanchain_hasFloating (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->hasFloating(); +} + +int defiScanchain_hasOrdered (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->hasOrdered(); +} + +int defiScanchain_hasCommonInPin (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->hasCommonInPin(); +} + +int defiScanchain_hasCommonOutPin (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->hasCommonOutPin(); +} + +int defiScanchain_hasPartition (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->hasPartition(); +} + +int defiScanchain_hasPartitionMaxBits (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->hasPartitionMaxBits(); +} + +void defiScanchain_start (const ::defiScanchain* obj, char** inst, char** pin) { + ((LefDefParser::defiScanchain*)obj)->start(inst, pin); +} + +void defiScanchain_stop (const ::defiScanchain* obj, char** inst, char** pin) { + ((LefDefParser::defiScanchain*)obj)->stop(inst, pin); +} + +int defiScanchain_numOrderedLists (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->numOrderedLists(); +} + +void defiScanchain_ordered (const ::defiScanchain* obj, int index, int* size, char*** inst, char*** inPin, char*** outPin, int** bits) { + ((LefDefParser::defiScanchain*)obj)->ordered(index, size, inst, inPin, outPin, bits); +} + +void defiScanchain_floating (const ::defiScanchain* obj, int* size, char*** inst, char*** inPin, char*** outPin, int** bits) { + ((LefDefParser::defiScanchain*)obj)->floating(size, inst, inPin, outPin, bits); +} + +const char* defiScanchain_commonInPin (const ::defiScanchain* obj) { + return ((const LefDefParser::defiScanchain*)obj)->commonInPin(); +} + +const char* defiScanchain_commonOutPin (const ::defiScanchain* obj) { + return ((const LefDefParser::defiScanchain*)obj)->commonOutPin(); +} + +const char* defiScanchain_partitionName (const ::defiScanchain* obj) { + return ((const LefDefParser::defiScanchain*)obj)->partitionName(); +} + +int defiScanchain_partitionMaxBits (const ::defiScanchain* obj) { + return ((LefDefParser::defiScanchain*)obj)->partitionMaxBits(); +} + +void defiScanchain_print (const ::defiScanchain* obj, FILE* f) { + ((LefDefParser::defiScanchain*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiSite.cpp b/lefdef/src/def/cdef/xdefiSite.cpp new file mode 100644 index 00000000..d80664e3 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiSite.cpp @@ -0,0 +1,105 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiSite.h" +#include "defiSite.hpp" + +// Wrappers definitions. +double defiSite_x_num (const ::defiSite* obj) { + return ((LefDefParser::defiSite*)obj)->x_num(); +} + +double defiSite_y_num (const ::defiSite* obj) { + return ((LefDefParser::defiSite*)obj)->y_num(); +} + +double defiSite_x_step (const ::defiSite* obj) { + return ((LefDefParser::defiSite*)obj)->x_step(); +} + +double defiSite_y_step (const ::defiSite* obj) { + return ((LefDefParser::defiSite*)obj)->y_step(); +} + +double defiSite_x_orig (const ::defiSite* obj) { + return ((LefDefParser::defiSite*)obj)->x_orig(); +} + +double defiSite_y_orig (const ::defiSite* obj) { + return ((LefDefParser::defiSite*)obj)->y_orig(); +} + +int defiSite_orient (const ::defiSite* obj) { + return ((LefDefParser::defiSite*)obj)->orient(); +} + +const char* defiSite_orientStr (const ::defiSite* obj) { + return ((const LefDefParser::defiSite*)obj)->orientStr(); +} + +const char* defiSite_name (const ::defiSite* obj) { + return ((const LefDefParser::defiSite*)obj)->name(); +} + +void defiSite_print (const ::defiSite* obj, FILE* f) { + ((LefDefParser::defiSite*)obj)->print(f); +} + +int defiBox_xl (const ::defiBox* obj) { + return ((LefDefParser::defiBox*)obj)->xl(); +} + +int defiBox_yl (const ::defiBox* obj) { + return ((LefDefParser::defiBox*)obj)->yl(); +} + +int defiBox_xh (const ::defiBox* obj) { + return ((LefDefParser::defiBox*)obj)->xh(); +} + +int defiBox_yh (const ::defiBox* obj) { + return ((LefDefParser::defiBox*)obj)->yh(); +} + +::defiPoints defiBox_getPoint (const ::defiBox* obj) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiBox*)obj)->getPoint(); + return *((::defiPoints*)&tmp); +} + +void defiBox_print (const ::defiBox* obj, FILE* f) { + ((LefDefParser::defiBox*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiSlot.cpp b/lefdef/src/def/cdef/xdefiSlot.cpp new file mode 100644 index 00000000..e610b584 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiSlot.cpp @@ -0,0 +1,81 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiSlot.h" +#include "defiSlot.hpp" + +// Wrappers definitions. +int defiSlot_hasLayer (const ::defiSlot* obj) { + return ((LefDefParser::defiSlot*)obj)->hasLayer(); +} + +const char* defiSlot_layerName (const ::defiSlot* obj) { + return ((const LefDefParser::defiSlot*)obj)->layerName(); +} + +int defiSlot_numRectangles (const ::defiSlot* obj) { + return ((LefDefParser::defiSlot*)obj)->numRectangles(); +} + +int defiSlot_xl (const ::defiSlot* obj, int index) { + return ((LefDefParser::defiSlot*)obj)->xl(index); +} + +int defiSlot_yl (const ::defiSlot* obj, int index) { + return ((LefDefParser::defiSlot*)obj)->yl(index); +} + +int defiSlot_xh (const ::defiSlot* obj, int index) { + return ((LefDefParser::defiSlot*)obj)->xh(index); +} + +int defiSlot_yh (const ::defiSlot* obj, int index) { + return ((LefDefParser::defiSlot*)obj)->yh(index); +} + +int defiSlot_numPolygons (const ::defiSlot* obj) { + return ((LefDefParser::defiSlot*)obj)->numPolygons(); +} + +::defiPoints defiSlot_getPolygon (const ::defiSlot* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiSlot*)obj)->getPolygon(index); + return *((::defiPoints*)&tmp); +} + +void defiSlot_print (const ::defiSlot* obj, FILE* f) { + ((LefDefParser::defiSlot*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiTimingDisable.cpp b/lefdef/src/def/cdef/xdefiTimingDisable.cpp new file mode 100644 index 00000000..ae1d0f80 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiTimingDisable.cpp @@ -0,0 +1,91 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiTimingDisable.h" +#include "defiTimingDisable.hpp" + +// Wrappers definitions. +int defiTimingDisable_hasMacroThru (const ::defiTimingDisable* obj) { + return ((LefDefParser::defiTimingDisable*)obj)->hasMacroThru(); +} + +int defiTimingDisable_hasMacroFromTo (const ::defiTimingDisable* obj) { + return ((LefDefParser::defiTimingDisable*)obj)->hasMacroFromTo(); +} + +int defiTimingDisable_hasThru (const ::defiTimingDisable* obj) { + return ((LefDefParser::defiTimingDisable*)obj)->hasThru(); +} + +int defiTimingDisable_hasFromTo (const ::defiTimingDisable* obj) { + return ((LefDefParser::defiTimingDisable*)obj)->hasFromTo(); +} + +int defiTimingDisable_hasReentrantPathsFlag (const ::defiTimingDisable* obj) { + return ((LefDefParser::defiTimingDisable*)obj)->hasReentrantPathsFlag(); +} + +const char* defiTimingDisable_fromPin (const ::defiTimingDisable* obj) { + return ((const LefDefParser::defiTimingDisable*)obj)->fromPin(); +} + +const char* defiTimingDisable_toPin (const ::defiTimingDisable* obj) { + return ((const LefDefParser::defiTimingDisable*)obj)->toPin(); +} + +const char* defiTimingDisable_fromInst (const ::defiTimingDisable* obj) { + return ((const LefDefParser::defiTimingDisable*)obj)->fromInst(); +} + +const char* defiTimingDisable_toInst (const ::defiTimingDisable* obj) { + return ((const LefDefParser::defiTimingDisable*)obj)->toInst(); +} + +const char* defiTimingDisable_macroName (const ::defiTimingDisable* obj) { + return ((const LefDefParser::defiTimingDisable*)obj)->macroName(); +} + +const char* defiTimingDisable_thruPin (const ::defiTimingDisable* obj) { + return ((const LefDefParser::defiTimingDisable*)obj)->thruPin(); +} + +const char* defiTimingDisable_thruInst (const ::defiTimingDisable* obj) { + return ((const LefDefParser::defiTimingDisable*)obj)->thruInst(); +} + +void defiTimingDisable_print (const ::defiTimingDisable* obj, FILE* f) { + ((LefDefParser::defiTimingDisable*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefiVia.cpp b/lefdef/src/def/cdef/xdefiVia.cpp new file mode 100644 index 00000000..bf8ebcb4 --- /dev/null +++ b/lefdef/src/def/cdef/xdefiVia.cpp @@ -0,0 +1,133 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defiVia.h" +#include "defiVia.hpp" + +// Wrappers definitions. +const char* defiVia_name (const ::defiVia* obj) { + return ((const LefDefParser::defiVia*)obj)->name(); +} + +const char* defiVia_pattern (const ::defiVia* obj) { + return ((const LefDefParser::defiVia*)obj)->pattern(); +} + +int defiVia_hasPattern (const ::defiVia* obj) { + return ((LefDefParser::defiVia*)obj)->hasPattern(); +} + +int defiVia_numLayers (const ::defiVia* obj) { + return ((LefDefParser::defiVia*)obj)->numLayers(); +} + +void defiVia_layer (const ::defiVia* obj, int index, char** layer, int* xl, int* yl, int* xh, int* yh) { + ((LefDefParser::defiVia*)obj)->layer(index, layer, xl, yl, xh, yh); +} + +int defiVia_numPolygons (const ::defiVia* obj) { + return ((LefDefParser::defiVia*)obj)->numPolygons(); +} + +const char* defiVia_polygonName (const ::defiVia* obj, int index) { + return ((const LefDefParser::defiVia*)obj)->polygonName(index); +} + +::defiPoints defiVia_getPolygon (const ::defiVia* obj, int index) { + LefDefParser::defiPoints tmp; + tmp = ((LefDefParser::defiVia*)obj)->getPolygon(index); + return *((::defiPoints*)&tmp); +} + +int defiVia_hasViaRule (const ::defiVia* obj) { + return ((LefDefParser::defiVia*)obj)->hasViaRule(); +} + +void defiVia_viaRule (const ::defiVia* obj, char** viaRuleName, int* xSize, int* ySize, char** botLayer, char** cutLayer, char** topLayer, int* xCutSpacing, int* yCutSpacing, int* xBotEnc, int* yBotEnc, int* xTopEnc, int* yTopEnc) { + ((LefDefParser::defiVia*)obj)->viaRule(viaRuleName, xSize, ySize, botLayer, cutLayer, topLayer, xCutSpacing, yCutSpacing, xBotEnc, yBotEnc, xTopEnc, yTopEnc); +} + +int defiVia_hasRowCol (const ::defiVia* obj) { + return ((LefDefParser::defiVia*)obj)->hasRowCol(); +} + +void defiVia_rowCol (const ::defiVia* obj, int* numCutRows, int* numCutCols) { + ((LefDefParser::defiVia*)obj)->rowCol(numCutRows, numCutCols); +} + +int defiVia_hasOrigin (const ::defiVia* obj) { + return ((LefDefParser::defiVia*)obj)->hasOrigin(); +} + +void defiVia_origin (const ::defiVia* obj, int* xOffset, int* yOffset) { + ((LefDefParser::defiVia*)obj)->origin(xOffset, yOffset); +} + +int defiVia_hasOffset (const ::defiVia* obj) { + return ((LefDefParser::defiVia*)obj)->hasOffset(); +} + +void defiVia_offset (const ::defiVia* obj, int* xBotOffset, int* yBotOffset, int* xTopOffset, int* yTopOffset) { + ((LefDefParser::defiVia*)obj)->offset(xBotOffset, yBotOffset, xTopOffset, yTopOffset); +} + +int defiVia_hasCutPattern (const ::defiVia* obj) { + return ((LefDefParser::defiVia*)obj)->hasCutPattern(); +} + +const char* defiVia_cutPattern (const ::defiVia* obj) { + return ((const LefDefParser::defiVia*)obj)->cutPattern(); +} + +int defiVia_hasRectMask (const ::defiVia* obj, int index) { + return ((LefDefParser::defiVia*)obj)->hasRectMask(index); +} + +int defiVia_rectMask (const ::defiVia* obj, int index) { + return ((LefDefParser::defiVia*)obj)->rectMask(index); +} + +int defiVia_hasPolyMask (const ::defiVia* obj, int index) { + return ((LefDefParser::defiVia*)obj)->hasPolyMask(index); +} + +int defiVia_polyMask (const ::defiVia* obj, int index) { + return ((LefDefParser::defiVia*)obj)->polyMask(index); +} + +void defiVia_print (const ::defiVia* obj, FILE* f) { + ((LefDefParser::defiVia*)obj)->print(f); +} + diff --git a/lefdef/src/def/cdef/xdefrReader.cpp b/lefdef/src/def/cdef/xdefrReader.cpp new file mode 100644 index 00000000..fa1faaab --- /dev/null +++ b/lefdef/src/def/cdef/xdefrReader.cpp @@ -0,0 +1,1119 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defrReader.h" +#include "defrReader.hpp" + +// Wrappers definitions. +int defrInit () { + return LefDefParser::defrInit(); +} + +int defrInitSession (int startSession) { + return LefDefParser::defrInitSession(startSession); +} + +int defrReset () { + return LefDefParser::defrReset(); +} + +int defrClear () { + return LefDefParser::defrClear(); +} + +void defrSetCommentChar (char c) { + LefDefParser::defrSetCommentChar(c); +} + +void defrSetAddPathToNet () { + LefDefParser::defrSetAddPathToNet(); +} + +void defrSetAllowComponentNets () { + LefDefParser::defrSetAllowComponentNets(); +} + +int defrGetAllowComponentNets () { + return LefDefParser::defrGetAllowComponentNets(); +} + +void defrSetCaseSensitivity (int caseSense) { + LefDefParser::defrSetCaseSensitivity(caseSense); +} + +void defrSetRegisterUnusedCallbacks () { + LefDefParser::defrSetRegisterUnusedCallbacks(); +} + +void defrPrintUnusedCallbacks (FILE* log) { + LefDefParser::defrPrintUnusedCallbacks(log); +} + +int defrReleaseNResetMemory () { + return LefDefParser::defrReleaseNResetMemory(); +} + +int defrRead (FILE * file, const char * fileName, defiUserData userData, int case_sensitive) { + return LefDefParser::defrRead(file, fileName, userData, case_sensitive); +} + +void defrSetUserData (defiUserData p0) { + LefDefParser::defrSetUserData(p0); +} + +defiUserData defrGetUserData () { + return LefDefParser::defrGetUserData(); +} + +void defrSetArrayNameCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetArrayNameCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetAssertionCbk (::defrAssertionCbkFnType p0) { + LefDefParser::defrSetAssertionCbk((LefDefParser::defrAssertionCbkFnType) p0); +} + +void defrSetAssertionsStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetAssertionsStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetAssertionsEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetAssertionsEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetBlockageCbk (::defrBlockageCbkFnType p0) { + LefDefParser::defrSetBlockageCbk((LefDefParser::defrBlockageCbkFnType) p0); +} + +void defrSetBlockageStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetBlockageStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetBlockageEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetBlockageEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetBusBitCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetBusBitCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetCannotOccupyCbk (::defrSiteCbkFnType p0) { + LefDefParser::defrSetCannotOccupyCbk((LefDefParser::defrSiteCbkFnType) p0); +} + +void defrSetCanplaceCbk (::defrSiteCbkFnType p0) { + LefDefParser::defrSetCanplaceCbk((LefDefParser::defrSiteCbkFnType) p0); +} + +void defrSetCaseSensitiveCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetCaseSensitiveCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetComponentCbk (::defrComponentCbkFnType p0) { + LefDefParser::defrSetComponentCbk((LefDefParser::defrComponentCbkFnType) p0); +} + +void defrSetComponentExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetComponentExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetComponentStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetComponentStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetComponentEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetComponentEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetConstraintCbk (::defrAssertionCbkFnType p0) { + LefDefParser::defrSetConstraintCbk((LefDefParser::defrAssertionCbkFnType) p0); +} + +void defrSetConstraintsStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetConstraintsStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetConstraintsEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetConstraintsEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetDefaultCapCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetDefaultCapCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetDesignCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetDesignCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetDesignEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetDesignEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetDieAreaCbk (::defrBoxCbkFnType p0) { + LefDefParser::defrSetDieAreaCbk((LefDefParser::defrBoxCbkFnType) p0); +} + +void defrSetDividerCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetDividerCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetExtensionCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetExtensionCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetFillCbk (::defrFillCbkFnType p0) { + LefDefParser::defrSetFillCbk((LefDefParser::defrFillCbkFnType) p0); +} + +void defrSetFillStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetFillStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetFillEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetFillEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetFPCCbk (::defrFPCCbkFnType p0) { + LefDefParser::defrSetFPCCbk((LefDefParser::defrFPCCbkFnType) p0); +} + +void defrSetFPCStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetFPCStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetFPCEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetFPCEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetFloorPlanNameCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetFloorPlanNameCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetGcellGridCbk (::defrGcellGridCbkFnType p0) { + LefDefParser::defrSetGcellGridCbk((LefDefParser::defrGcellGridCbkFnType) p0); +} + +void defrSetGroupNameCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetGroupNameCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetGroupMemberCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetGroupMemberCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetComponentMaskShiftLayerCbk (::defrComponentMaskShiftLayerCbkFnType p0) { + LefDefParser::defrSetComponentMaskShiftLayerCbk((LefDefParser::defrComponentMaskShiftLayerCbkFnType) p0); +} + +void defrSetGroupCbk (::defrGroupCbkFnType p0) { + LefDefParser::defrSetGroupCbk((LefDefParser::defrGroupCbkFnType) p0); +} + +void defrSetGroupExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetGroupExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetGroupsStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetGroupsStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetGroupsEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetGroupsEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetHistoryCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetHistoryCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetIOTimingCbk (::defrIOTimingCbkFnType p0) { + LefDefParser::defrSetIOTimingCbk((LefDefParser::defrIOTimingCbkFnType) p0); +} + +void defrSetIOTimingsStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetIOTimingsStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetIOTimingsEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetIOTimingsEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetIoTimingsExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetIoTimingsExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetNetCbk (::defrNetCbkFnType p0) { + LefDefParser::defrSetNetCbk((LefDefParser::defrNetCbkFnType) p0); +} + +void defrSetNetNameCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetNetNameCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetNetNonDefaultRuleCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetNetNonDefaultRuleCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetNetConnectionExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetNetConnectionExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetNetExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetNetExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetNetPartialPathCbk (::defrNetCbkFnType p0) { + LefDefParser::defrSetNetPartialPathCbk((LefDefParser::defrNetCbkFnType) p0); +} + +void defrSetNetSubnetNameCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetNetSubnetNameCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetNetStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetNetStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetNetEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetNetEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetNonDefaultCbk (::defrNonDefaultCbkFnType p0) { + LefDefParser::defrSetNonDefaultCbk((LefDefParser::defrNonDefaultCbkFnType) p0); +} + +void defrSetNonDefaultStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetNonDefaultStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetNonDefaultEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetNonDefaultEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetPartitionCbk (::defrPartitionCbkFnType p0) { + LefDefParser::defrSetPartitionCbk((LefDefParser::defrPartitionCbkFnType) p0); +} + +void defrSetPartitionsExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetPartitionsExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetPartitionsStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetPartitionsStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetPartitionsEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetPartitionsEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetPathCbk (::defrPathCbkFnType p0) { + LefDefParser::defrSetPathCbk((LefDefParser::defrPathCbkFnType) p0); +} + +void defrSetPinCapCbk (::defrPinCapCbkFnType p0) { + LefDefParser::defrSetPinCapCbk((LefDefParser::defrPinCapCbkFnType) p0); +} + +void defrSetPinCbk (::defrPinCbkFnType p0) { + LefDefParser::defrSetPinCbk((LefDefParser::defrPinCbkFnType) p0); +} + +void defrSetPinExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetPinExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetPinPropCbk (::defrPinPropCbkFnType p0) { + LefDefParser::defrSetPinPropCbk((LefDefParser::defrPinPropCbkFnType) p0); +} + +void defrSetPinPropStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetPinPropStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetPinPropEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetPinPropEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetPropCbk (::defrPropCbkFnType p0) { + LefDefParser::defrSetPropCbk((LefDefParser::defrPropCbkFnType) p0); +} + +void defrSetPropDefEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetPropDefEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetPropDefStartCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetPropDefStartCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetRegionCbk (::defrRegionCbkFnType p0) { + LefDefParser::defrSetRegionCbk((LefDefParser::defrRegionCbkFnType) p0); +} + +void defrSetRegionStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetRegionStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetRegionEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetRegionEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetRowCbk (::defrRowCbkFnType p0) { + LefDefParser::defrSetRowCbk((LefDefParser::defrRowCbkFnType) p0); +} + +void defrSetSNetCbk (::defrNetCbkFnType p0) { + LefDefParser::defrSetSNetCbk((LefDefParser::defrNetCbkFnType) p0); +} + +void defrSetSNetStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetSNetStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetSNetEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetSNetEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetSNetPartialPathCbk (::defrNetCbkFnType p0) { + LefDefParser::defrSetSNetPartialPathCbk((LefDefParser::defrNetCbkFnType) p0); +} + +void defrSetSNetWireCbk (::defrNetCbkFnType p0) { + LefDefParser::defrSetSNetWireCbk((LefDefParser::defrNetCbkFnType) p0); +} + +void defrSetScanChainExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetScanChainExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetScanchainCbk (::defrScanchainCbkFnType p0) { + LefDefParser::defrSetScanchainCbk((LefDefParser::defrScanchainCbkFnType) p0); +} + +void defrSetScanchainsStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetScanchainsStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetScanchainsEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetScanchainsEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetSiteCbk (::defrSiteCbkFnType p0) { + LefDefParser::defrSetSiteCbk((LefDefParser::defrSiteCbkFnType) p0); +} + +void defrSetSlotCbk (::defrSlotCbkFnType p0) { + LefDefParser::defrSetSlotCbk((LefDefParser::defrSlotCbkFnType) p0); +} + +void defrSetSlotStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetSlotStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetSlotEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetSlotEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetStartPinsCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetStartPinsCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetStylesCbk (::defrStylesCbkFnType p0) { + LefDefParser::defrSetStylesCbk((LefDefParser::defrStylesCbkFnType) p0); +} + +void defrSetStylesStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetStylesStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetStylesEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetStylesEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetPinEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetPinEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetTechnologyCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetTechnologyCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetTimingDisableCbk (::defrTimingDisableCbkFnType p0) { + LefDefParser::defrSetTimingDisableCbk((LefDefParser::defrTimingDisableCbkFnType) p0); +} + +void defrSetTimingDisablesStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetTimingDisablesStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetTimingDisablesEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetTimingDisablesEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrSetTrackCbk (::defrTrackCbkFnType p0) { + LefDefParser::defrSetTrackCbk((LefDefParser::defrTrackCbkFnType) p0); +} + +void defrSetUnitsCbk (::defrDoubleCbkFnType p0) { + LefDefParser::defrSetUnitsCbk((LefDefParser::defrDoubleCbkFnType) p0); +} + +void defrSetVersionCbk (::defrDoubleCbkFnType p0) { + LefDefParser::defrSetVersionCbk((LefDefParser::defrDoubleCbkFnType) p0); +} + +void defrSetVersionStrCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetVersionStrCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetViaCbk (::defrViaCbkFnType p0) { + LefDefParser::defrSetViaCbk((LefDefParser::defrViaCbkFnType) p0); +} + +void defrSetViaExtCbk (::defrStringCbkFnType p0) { + LefDefParser::defrSetViaExtCbk((LefDefParser::defrStringCbkFnType) p0); +} + +void defrSetViaStartCbk (::defrIntegerCbkFnType p0) { + LefDefParser::defrSetViaStartCbk((LefDefParser::defrIntegerCbkFnType) p0); +} + +void defrSetViaEndCbk (::defrVoidCbkFnType p0) { + LefDefParser::defrSetViaEndCbk((LefDefParser::defrVoidCbkFnType) p0); +} + +void defrUnsetCallbacks () { + LefDefParser::defrUnsetCallbacks(); +} + +void defrUnsetArrayNameCbk () { + LefDefParser::defrUnsetArrayNameCbk(); +} + +void defrUnsetAssertionCbk () { + LefDefParser::defrUnsetAssertionCbk(); +} + +void defrUnsetAssertionsStartCbk () { + LefDefParser::defrUnsetAssertionsStartCbk(); +} + +void defrUnsetAssertionsEndCbk () { + LefDefParser::defrUnsetAssertionsEndCbk(); +} + +void defrUnsetBlockageCbk () { + LefDefParser::defrUnsetBlockageCbk(); +} + +void defrUnsetBlockageStartCbk () { + LefDefParser::defrUnsetBlockageStartCbk(); +} + +void defrUnsetBlockageEndCbk () { + LefDefParser::defrUnsetBlockageEndCbk(); +} + +void defrUnsetBusBitCbk () { + LefDefParser::defrUnsetBusBitCbk(); +} + +void defrUnsetCannotOccupyCbk () { + LefDefParser::defrUnsetCannotOccupyCbk(); +} + +void defrUnsetCanplaceCbk () { + LefDefParser::defrUnsetCanplaceCbk(); +} + +void defrUnsetCaseSensitiveCbk () { + LefDefParser::defrUnsetCaseSensitiveCbk(); +} + +void defrUnsetComponentCbk () { + LefDefParser::defrUnsetComponentCbk(); +} + +void defrUnsetComponentExtCbk () { + LefDefParser::defrUnsetComponentExtCbk(); +} + +void defrUnsetComponentStartCbk () { + LefDefParser::defrUnsetComponentStartCbk(); +} + +void defrUnsetComponentEndCbk () { + LefDefParser::defrUnsetComponentEndCbk(); +} + +void defrUnsetConstraintCbk () { + LefDefParser::defrUnsetConstraintCbk(); +} + +void defrUnsetConstraintsStartCbk () { + LefDefParser::defrUnsetConstraintsStartCbk(); +} + +void defrUnsetConstraintsEndCbk () { + LefDefParser::defrUnsetConstraintsEndCbk(); +} + +void defrUnsetDefaultCapCbk () { + LefDefParser::defrUnsetDefaultCapCbk(); +} + +void defrUnsetDesignCbk () { + LefDefParser::defrUnsetDesignCbk(); +} + +void defrUnsetDesignEndCbk () { + LefDefParser::defrUnsetDesignEndCbk(); +} + +void defrUnsetDieAreaCbk () { + LefDefParser::defrUnsetDieAreaCbk(); +} + +void defrUnsetDividerCbk () { + LefDefParser::defrUnsetDividerCbk(); +} + +void defrUnsetExtensionCbk () { + LefDefParser::defrUnsetExtensionCbk(); +} + +void defrUnsetFillCbk () { + LefDefParser::defrUnsetFillCbk(); +} + +void defrUnsetFillStartCbk () { + LefDefParser::defrUnsetFillStartCbk(); +} + +void defrUnsetFillEndCbk () { + LefDefParser::defrUnsetFillEndCbk(); +} + +void defrUnsetFPCCbk () { + LefDefParser::defrUnsetFPCCbk(); +} + +void defrUnsetFPCStartCbk () { + LefDefParser::defrUnsetFPCStartCbk(); +} + +void defrUnsetFPCEndCbk () { + LefDefParser::defrUnsetFPCEndCbk(); +} + +void defrUnsetFloorPlanNameCbk () { + LefDefParser::defrUnsetFloorPlanNameCbk(); +} + +void defrUnsetGcellGridCbk () { + LefDefParser::defrUnsetGcellGridCbk(); +} + +void defrUnsetGroupCbk () { + LefDefParser::defrUnsetGroupCbk(); +} + +void defrUnsetGroupExtCbk () { + LefDefParser::defrUnsetGroupExtCbk(); +} + +void defrUnsetGroupMemberCbk () { + LefDefParser::defrUnsetGroupMemberCbk(); +} + +void defrUnsetComponentMaskShiftLayerCbk () { + LefDefParser::defrUnsetComponentMaskShiftLayerCbk(); +} + +void defrUnsetGroupNameCbk () { + LefDefParser::defrUnsetGroupNameCbk(); +} + +void defrUnsetGroupsStartCbk () { + LefDefParser::defrUnsetGroupsStartCbk(); +} + +void defrUnsetGroupsEndCbk () { + LefDefParser::defrUnsetGroupsEndCbk(); +} + +void defrUnsetHistoryCbk () { + LefDefParser::defrUnsetHistoryCbk(); +} + +void defrUnsetIOTimingCbk () { + LefDefParser::defrUnsetIOTimingCbk(); +} + +void defrUnsetIOTimingsStartCbk () { + LefDefParser::defrUnsetIOTimingsStartCbk(); +} + +void defrUnsetIOTimingsEndCbk () { + LefDefParser::defrUnsetIOTimingsEndCbk(); +} + +void defrUnsetIOTimingsExtCbk () { + LefDefParser::defrUnsetIOTimingsExtCbk(); +} + +void defrUnsetNetCbk () { + LefDefParser::defrUnsetNetCbk(); +} + +void defrUnsetNetNameCbk () { + LefDefParser::defrUnsetNetNameCbk(); +} + +void defrUnsetNetNonDefaultRuleCbk () { + LefDefParser::defrUnsetNetNonDefaultRuleCbk(); +} + +void defrUnsetNetConnectionExtCbk () { + LefDefParser::defrUnsetNetConnectionExtCbk(); +} + +void defrUnsetNetExtCbk () { + LefDefParser::defrUnsetNetExtCbk(); +} + +void defrUnsetNetPartialPathCbk () { + LefDefParser::defrUnsetNetPartialPathCbk(); +} + +void defrUnsetNetSubnetNameCbk () { + LefDefParser::defrUnsetNetSubnetNameCbk(); +} + +void defrUnsetNetStartCbk () { + LefDefParser::defrUnsetNetStartCbk(); +} + +void defrUnsetNetEndCbk () { + LefDefParser::defrUnsetNetEndCbk(); +} + +void defrUnsetNonDefaultCbk () { + LefDefParser::defrUnsetNonDefaultCbk(); +} + +void defrUnsetNonDefaultStartCbk () { + LefDefParser::defrUnsetNonDefaultStartCbk(); +} + +void defrUnsetNonDefaultEndCbk () { + LefDefParser::defrUnsetNonDefaultEndCbk(); +} + +void defrUnsetPartitionCbk () { + LefDefParser::defrUnsetPartitionCbk(); +} + +void defrUnsetPartitionsExtCbk () { + LefDefParser::defrUnsetPartitionsExtCbk(); +} + +void defrUnsetPartitionsStartCbk () { + LefDefParser::defrUnsetPartitionsStartCbk(); +} + +void defrUnsetPartitionsEndCbk () { + LefDefParser::defrUnsetPartitionsEndCbk(); +} + +void defrUnsetPathCbk () { + LefDefParser::defrUnsetPathCbk(); +} + +void defrUnsetPinCapCbk () { + LefDefParser::defrUnsetPinCapCbk(); +} + +void defrUnsetPinCbk () { + LefDefParser::defrUnsetPinCbk(); +} + +void defrUnsetPinEndCbk () { + LefDefParser::defrUnsetPinEndCbk(); +} + +void defrUnsetPinExtCbk () { + LefDefParser::defrUnsetPinExtCbk(); +} + +void defrUnsetPinPropCbk () { + LefDefParser::defrUnsetPinPropCbk(); +} + +void defrUnsetPinPropStartCbk () { + LefDefParser::defrUnsetPinPropStartCbk(); +} + +void defrUnsetPinPropEndCbk () { + LefDefParser::defrUnsetPinPropEndCbk(); +} + +void defrUnsetPropCbk () { + LefDefParser::defrUnsetPropCbk(); +} + +void defrUnsetPropDefEndCbk () { + LefDefParser::defrUnsetPropDefEndCbk(); +} + +void defrUnsetPropDefStartCbk () { + LefDefParser::defrUnsetPropDefStartCbk(); +} + +void defrUnsetRegionCbk () { + LefDefParser::defrUnsetRegionCbk(); +} + +void defrUnsetRegionStartCbk () { + LefDefParser::defrUnsetRegionStartCbk(); +} + +void defrUnsetRegionEndCbk () { + LefDefParser::defrUnsetRegionEndCbk(); +} + +void defrUnsetRowCbk () { + LefDefParser::defrUnsetRowCbk(); +} + +void defrUnsetScanChainExtCbk () { + LefDefParser::defrUnsetScanChainExtCbk(); +} + +void defrUnsetScanchainCbk () { + LefDefParser::defrUnsetScanchainCbk(); +} + +void defrUnsetScanchainsStartCbk () { + LefDefParser::defrUnsetScanchainsStartCbk(); +} + +void defrUnsetScanchainsEndCbk () { + LefDefParser::defrUnsetScanchainsEndCbk(); +} + +void defrUnsetSiteCbk () { + LefDefParser::defrUnsetSiteCbk(); +} + +void defrUnsetSlotCbk () { + LefDefParser::defrUnsetSlotCbk(); +} + +void defrUnsetSlotStartCbk () { + LefDefParser::defrUnsetSlotStartCbk(); +} + +void defrUnsetSlotEndCbk () { + LefDefParser::defrUnsetSlotEndCbk(); +} + +void defrUnsetSNetWireCbk () { + LefDefParser::defrUnsetSNetWireCbk(); +} + +void defrUnsetSNetCbk () { + LefDefParser::defrUnsetSNetCbk(); +} + +void defrUnsetSNetStartCbk () { + LefDefParser::defrUnsetSNetStartCbk(); +} + +void defrUnsetSNetEndCbk () { + LefDefParser::defrUnsetSNetEndCbk(); +} + +void defrUnsetSNetPartialPathCbk () { + LefDefParser::defrUnsetSNetPartialPathCbk(); +} + +void defrUnsetStartPinsCbk () { + LefDefParser::defrUnsetStartPinsCbk(); +} + +void defrUnsetStylesCbk () { + LefDefParser::defrUnsetStylesCbk(); +} + +void defrUnsetStylesStartCbk () { + LefDefParser::defrUnsetStylesStartCbk(); +} + +void defrUnsetStylesEndCbk () { + LefDefParser::defrUnsetStylesEndCbk(); +} + +void defrUnsetTechnologyCbk () { + LefDefParser::defrUnsetTechnologyCbk(); +} + +void defrUnsetTimingDisableCbk () { + LefDefParser::defrUnsetTimingDisableCbk(); +} + +void defrUnsetTimingDisablesStartCbk () { + LefDefParser::defrUnsetTimingDisablesStartCbk(); +} + +void defrUnsetTimingDisablesEndCbk () { + LefDefParser::defrUnsetTimingDisablesEndCbk(); +} + +void defrUnsetTrackCbk () { + LefDefParser::defrUnsetTrackCbk(); +} + +void defrUnsetUnitsCbk () { + LefDefParser::defrUnsetUnitsCbk(); +} + +void defrUnsetVersionCbk () { + LefDefParser::defrUnsetVersionCbk(); +} + +void defrUnsetVersionStrCbk () { + LefDefParser::defrUnsetVersionStrCbk(); +} + +void defrUnsetViaCbk () { + LefDefParser::defrUnsetViaCbk(); +} + +void defrUnsetViaExtCbk () { + LefDefParser::defrUnsetViaExtCbk(); +} + +void defrUnsetViaStartCbk () { + LefDefParser::defrUnsetViaStartCbk(); +} + +void defrUnsetViaEndCbk () { + LefDefParser::defrUnsetViaEndCbk(); +} + +void defrSetUnusedCallbacks (::defrVoidCbkFnType func) { + LefDefParser::defrSetUnusedCallbacks((LefDefParser::defrVoidCbkFnType ) func); +} + +int defrLineNumber () { + return LefDefParser::defrLineNumber(); +} + +long long defrLongLineNumber () { + return LefDefParser::defrLongLineNumber(); +} + +void defrSetLogFunction (::DEFI_LOG_FUNCTION p0) { + LefDefParser::defrSetLogFunction(p0); +} + +void defrSetWarningLogFunction (::DEFI_WARNING_LOG_FUNCTION p0) { + LefDefParser::defrSetWarningLogFunction(p0); +} + +void defrSetMallocFunction (::DEFI_MALLOC_FUNCTION p0) { + LefDefParser::defrSetMallocFunction(p0); +} + +void defrSetReallocFunction (::DEFI_REALLOC_FUNCTION p0) { + LefDefParser::defrSetReallocFunction(p0); +} + +void defrSetFreeFunction (::DEFI_FREE_FUNCTION p0) { + LefDefParser::defrSetFreeFunction(p0); +} + +void defrSetLineNumberFunction (::DEFI_LINE_NUMBER_FUNCTION p0) { + LefDefParser::defrSetLineNumberFunction(p0); +} + +void defrSetLongLineNumberFunction (::DEFI_LONG_LINE_NUMBER_FUNCTION p0) { + LefDefParser::defrSetLongLineNumberFunction(p0); +} + +void defrSetDeltaNumberLines (int p0) { + LefDefParser::defrSetDeltaNumberLines(p0); +} + +void defrSetReadFunction (::DEFI_READ_FUNCTION p0) { + LefDefParser::defrSetReadFunction(p0); +} + +void defrUnsetReadFunction () { + LefDefParser::defrUnsetReadFunction(); +} + +void defrSetOpenLogFileAppend () { + LefDefParser::defrSetOpenLogFileAppend(); +} + +void defrUnsetOpenLogFileAppend () { + LefDefParser::defrUnsetOpenLogFileAppend(); +} + +void defrSetMagicCommentFoundFunction (::DEFI_MAGIC_COMMENT_FOUND_FUNCTION p0) { + LefDefParser::defrSetMagicCommentFoundFunction(p0); +} + +void defrSetMagicCommentString (char * p0) { + LefDefParser::defrSetMagicCommentString(p0); +} + +void defrDisablePropStrProcess () { + LefDefParser::defrDisablePropStrProcess(); +} + +void defrSetNLines (long long n) { + LefDefParser::defrSetNLines(n); +} + +void defrSetAssertionWarnings (int warn) { + LefDefParser::defrSetAssertionWarnings(warn); +} + +void defrSetBlockageWarnings (int warn) { + LefDefParser::defrSetBlockageWarnings(warn); +} + +void defrSetCaseSensitiveWarnings (int warn) { + LefDefParser::defrSetCaseSensitiveWarnings(warn); +} + +void defrSetComponentWarnings (int warn) { + LefDefParser::defrSetComponentWarnings(warn); +} + +void defrSetConstraintWarnings (int warn) { + LefDefParser::defrSetConstraintWarnings(warn); +} + +void defrSetDefaultCapWarnings (int warn) { + LefDefParser::defrSetDefaultCapWarnings(warn); +} + +void defrSetGcellGridWarnings (int warn) { + LefDefParser::defrSetGcellGridWarnings(warn); +} + +void defrSetIOTimingWarnings (int warn) { + LefDefParser::defrSetIOTimingWarnings(warn); +} + +void defrSetNetWarnings (int warn) { + LefDefParser::defrSetNetWarnings(warn); +} + +void defrSetNonDefaultWarnings (int warn) { + LefDefParser::defrSetNonDefaultWarnings(warn); +} + +void defrSetPinExtWarnings (int warn) { + LefDefParser::defrSetPinExtWarnings(warn); +} + +void defrSetPinWarnings (int warn) { + LefDefParser::defrSetPinWarnings(warn); +} + +void defrSetRegionWarnings (int warn) { + LefDefParser::defrSetRegionWarnings(warn); +} + +void defrSetRowWarnings (int warn) { + LefDefParser::defrSetRowWarnings(warn); +} + +void defrSetScanchainWarnings (int warn) { + LefDefParser::defrSetScanchainWarnings(warn); +} + +void defrSetSNetWarnings (int warn) { + LefDefParser::defrSetSNetWarnings(warn); +} + +void defrSetStylesWarnings (int warn) { + LefDefParser::defrSetStylesWarnings(warn); +} + +void defrSetTrackWarnings (int warn) { + LefDefParser::defrSetTrackWarnings(warn); +} + +void defrSetUnitsWarnings (int warn) { + LefDefParser::defrSetUnitsWarnings(warn); +} + +void defrSetVersionWarnings (int warn) { + LefDefParser::defrSetVersionWarnings(warn); +} + +void defrSetViaWarnings (int warn) { + LefDefParser::defrSetViaWarnings(warn); +} + +void defrDisableParserMsgs (int nMsg, int* msgs) { + LefDefParser::defrDisableParserMsgs(nMsg, msgs); +} + +void defrEnableParserMsgs (int nMsg, int* msgs) { + LefDefParser::defrEnableParserMsgs(nMsg, msgs); +} + +void defrEnableAllMsgs () { + LefDefParser::defrEnableAllMsgs(); +} + +void defrSetTotalMsgLimit (int totNumMsgs) { + LefDefParser::defrSetTotalMsgLimit(totNumMsgs); +} + +void defrSetLimitPerMsg (int msgId, int numMsg) { + LefDefParser::defrSetLimitPerMsg(msgId, numMsg); +} + +void defrAddAlias (const char* key, const char* value, int marked) { + LefDefParser::defrAddAlias(key, value, marked); +} + diff --git a/lefdef/src/def/cdef/xdefwWriter.cpp b/lefdef/src/def/cdef/xdefwWriter.cpp new file mode 100644 index 00000000..c736a7e9 --- /dev/null +++ b/lefdef/src/def/cdef/xdefwWriter.cpp @@ -0,0 +1,1115 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defwWriter.h" +#include "defwWriter.hpp" + +// Wrappers definitions. +int defwNewLine () { + return LefDefParser::defwNewLine(); +} + +int defwInit (FILE* f, int vers1, int version2, const char* caseSensitive, const char* dividerChar, const char* busBitChars, const char* designName, const char* technology, const char* array, const char* floorplan, double units) { + return LefDefParser::defwInit(f, vers1, version2, caseSensitive, dividerChar, busBitChars, designName, technology, array, floorplan, units); +} + +int defwInitCbk (FILE* f) { + return LefDefParser::defwInitCbk(f); +} + +int defwVersion (int vers1, int vers2) { + return LefDefParser::defwVersion(vers1, vers2); +} + +int defwCaseSensitive (const char* caseSensitive) { + return LefDefParser::defwCaseSensitive(caseSensitive); +} + +int defwBusBitChars (const char* busBitChars) { + return LefDefParser::defwBusBitChars(busBitChars); +} + +int defwDividerChar (const char* dividerChar) { + return LefDefParser::defwDividerChar(dividerChar); +} + +int defwDesignName (const char* name) { + return LefDefParser::defwDesignName(name); +} + +int defwTechnology (const char* technology) { + return LefDefParser::defwTechnology(technology); +} + +int defwArray (const char* array) { + return LefDefParser::defwArray(array); +} + +int defwFloorplan (const char* floorplan) { + return LefDefParser::defwFloorplan(floorplan); +} + +int defwUnits (int units) { + return LefDefParser::defwUnits(units); +} + +int defwHistory (const char* string) { + return LefDefParser::defwHistory(string); +} + +int defwStartPropDef () { + return LefDefParser::defwStartPropDef(); +} + +int defwIntPropDef (const char* objType, const char* propName, double leftRange, double rightRange, int propValue) { + return LefDefParser::defwIntPropDef(objType, propName, leftRange, rightRange, propValue); +} + +int defwRealPropDef (const char* objType, const char* propName, double leftRange, double rightRange, double propValue) { + return LefDefParser::defwRealPropDef(objType, propName, leftRange, rightRange, propValue); +} + +int defwStringPropDef (const char* objType, const char* propName, double leftRange, double rightRange, const char* propValue) { + return LefDefParser::defwStringPropDef(objType, propName, leftRange, rightRange, propValue); +} + +int defwEndPropDef () { + return LefDefParser::defwEndPropDef(); +} + +int defwStringProperty (const char* propName, const char* propValue) { + return LefDefParser::defwStringProperty(propName, propValue); +} + +int defwRealProperty (const char* propName, double propValue) { + return LefDefParser::defwRealProperty(propName, propValue); +} + +int defwIntProperty (const char* propName, int propValue) { + return LefDefParser::defwIntProperty(propName, propValue); +} + +int defwDieArea (int xl, int yl, int xh, int yh) { + return LefDefParser::defwDieArea(xl, yl, xh, yh); +} + +int defwDieAreaList (int num_points, int* xl, int* yh) { + return LefDefParser::defwDieAreaList(num_points, xl, yh); +} + +int defwRow (const char* rowName, const char* rowType, int x_orig, int y_orig, int orient, int do_count, int do_increment, int xstep, int ystep) { + return LefDefParser::defwRow(rowName, rowType, x_orig, y_orig, orient, do_count, do_increment, xstep, ystep); +} + +int defwRowStr (const char* rowName, const char* rowType, int x_orig, int y_orig, const char* orient, int do_count, int do_increment, int xstep, int ystep) { + return LefDefParser::defwRowStr(rowName, rowType, x_orig, y_orig, orient, do_count, do_increment, xstep, ystep); +} + +int defwTracks (const char* master, int doStart, int doCount, int doStep, int numLayers, const char** layers, int mask, int sameMask) { + return LefDefParser::defwTracks(master, doStart, doCount, doStep, numLayers, layers, mask, sameMask); +} + +int defwGcellGrid (const char* master, int doStart, int doCount, int doStep) { + return LefDefParser::defwGcellGrid(master, doStart, doCount, doStep); +} + +int defwStartDefaultCap (int count) { + return LefDefParser::defwStartDefaultCap(count); +} + +int defwDefaultCap (int pins, double cap) { + return LefDefParser::defwDefaultCap(pins, cap); +} + +int defwEndDefaultCap () { + return LefDefParser::defwEndDefaultCap(); +} + +int defwCanPlace (const char* master, int xOrig, int yOrig, int orient, int doCnt, int doInc, int xStep, int yStep) { + return LefDefParser::defwCanPlace(master, xOrig, yOrig, orient, doCnt, doInc, xStep, yStep); +} + +int defwCanPlaceStr (const char* master, int xOrig, int yOrig, const char* orient, int doCnt, int doInc, int xStep, int yStep) { + return LefDefParser::defwCanPlaceStr(master, xOrig, yOrig, orient, doCnt, doInc, xStep, yStep); +} + +int defwCannotOccupy (const char* master, int xOrig, int yOrig, int orient, int doCnt, int doInc, int xStep, int yStep) { + return LefDefParser::defwCannotOccupy(master, xOrig, yOrig, orient, doCnt, doInc, xStep, yStep); +} + +int defwCannotOccupyStr (const char* master, int xOrig, int yOrig, const char* orient, int doCnt, int doInc, int xStep, int yStep) { + return LefDefParser::defwCannotOccupyStr(master, xOrig, yOrig, orient, doCnt, doInc, xStep, yStep); +} + +int defwStartVias (int count) { + return LefDefParser::defwStartVias(count); +} + +int defwViaName (const char* name) { + return LefDefParser::defwViaName(name); +} + +int defwViaPattern (const char* patternName) { + return LefDefParser::defwViaPattern(patternName); +} + +int defwViaRect (const char* layerName, int xl, int yl, int xh, int yh, int mask) { + return LefDefParser::defwViaRect(layerName, xl, yl, xh, yh, mask); +} + +int defwViaPolygon (const char* layerName, int num_polys, double* xl, double* yl, int mask) { + return LefDefParser::defwViaPolygon(layerName, num_polys, xl, yl, mask); +} + +int defwViaViarule (const char* viaRuleName, double xCutSize, double yCutSize, const char* botMetalLayer, const char* cutLayer, const char* topMetalLayer, double xCutSpacing, double yCutSpacing, double xBotEnc, double yBotEnc, double xTopEnc, double yTopEnc) { + return LefDefParser::defwViaViarule(viaRuleName, xCutSize, yCutSize, botMetalLayer, cutLayer, topMetalLayer, xCutSpacing, yCutSpacing, xBotEnc, yBotEnc, xTopEnc, yTopEnc); +} + +int defwViaViaruleRowCol (int numCutRows, int numCutCols) { + return LefDefParser::defwViaViaruleRowCol(numCutRows, numCutCols); +} + +int defwViaViaruleOrigin (int xOffset, int yOffset) { + return LefDefParser::defwViaViaruleOrigin(xOffset, yOffset); +} + +int defwViaViaruleOffset (int xBotOffset, int yBotOffset, int xTopOffset, int yTopOffset) { + return LefDefParser::defwViaViaruleOffset(xBotOffset, yBotOffset, xTopOffset, yTopOffset); +} + +int defwViaViarulePattern (const char* cutPattern) { + return LefDefParser::defwViaViarulePattern(cutPattern); +} + +int defwOneViaEnd () { + return LefDefParser::defwOneViaEnd(); +} + +int defwEndVias () { + return LefDefParser::defwEndVias(); +} + +int defwStartRegions (int count) { + return LefDefParser::defwStartRegions(count); +} + +int defwRegionName (const char* name) { + return LefDefParser::defwRegionName(name); +} + +int defwRegionPoints (int xl, int yl, int xh, int yh) { + return LefDefParser::defwRegionPoints(xl, yl, xh, yh); +} + +int defwRegionType (const char* type) { + return LefDefParser::defwRegionType(type); +} + +int defwEndRegions () { + return LefDefParser::defwEndRegions(); +} + +int defwComponentMaskShiftLayers (const char** layerNames, int numLayerName) { + return LefDefParser::defwComponentMaskShiftLayers(layerNames, numLayerName); +} + +int defwStartComponents (int count) { + return LefDefParser::defwStartComponents(count); +} + +int defwComponent (const char* instance, const char* master, int numNetName, const char** netNames, const char* eeq, const char* genName, const char* genParemeters, const char* source, int numForeign, const char** foreigns, int* foreignX, int* foreignY, int* foreignOrients, const char* status, int statusX, int statusY, int statusOrient, double weight, const char* region, int xl, int yl, int xh, int yh) { + return LefDefParser::defwComponent(instance, master, numNetName, netNames, eeq, genName, genParemeters, source, numForeign, foreigns, foreignX, foreignY, foreignOrients, status, statusX, statusY, statusOrient, weight, region, xl, yl, xh, yh); +} + +int defwComponentStr (const char* instance, const char* master, int numNetName, const char** netNames, const char* eeq, const char* genName, const char* genParemeters, const char* source, int numForeign, const char** foreigns, int* foreignX, int* foreignY, const char** foreignOrients, const char* status, int statusX, int statusY, const char* statusOrient, double weight, const char* region, int xl, int yl, int xh, int yh) { + return LefDefParser::defwComponentStr(instance, master, numNetName, netNames, eeq, genName, genParemeters, source, numForeign, foreigns, foreignX, foreignY, foreignOrients, status, statusX, statusY, statusOrient, weight, region, xl, yl, xh, yh); +} + +int defwComponentMaskShift (int shiftLayerMasks) { + return LefDefParser::defwComponentMaskShift(shiftLayerMasks); +} + +int defwComponentHalo (int left, int bottom, int right, int top) { + return LefDefParser::defwComponentHalo(left, bottom, right, top); +} + +int defwComponentHaloSoft (int left, int bottom, int right, int top) { + return LefDefParser::defwComponentHaloSoft(left, bottom, right, top); +} + +int defwComponentRouteHalo (int haloDist, const char* minLayer, const char* maxLayer) { + return LefDefParser::defwComponentRouteHalo(haloDist, minLayer, maxLayer); +} + +int defwEndComponents () { + return LefDefParser::defwEndComponents(); +} + +int defwStartPins (int count) { + return LefDefParser::defwStartPins(count); +} + +int defwPin (const char* name, const char* net, int special, const char* direction, const char* use, const char* status, int statusX, int statusY, int orient, const char* layer, int xl, int yl, int xh, int yh) { + return LefDefParser::defwPin(name, net, special, direction, use, status, statusX, statusY, orient, layer, xl, yl, xh, yh); +} + +int defwPinStr (const char* name, const char* net, int special, const char* direction, const char* use, const char* status, int statusX, int statusY, const char* orient, const char* layer, int xl, int yl, int xh, int yh) { + return LefDefParser::defwPinStr(name, net, special, direction, use, status, statusX, statusY, orient, layer, xl, yl, xh, yh); +} + +int defwPinLayer (const char* layerName, int spacing, int designRuleWidth, int xl, int yl, int xh, int yh, int mask) { + return LefDefParser::defwPinLayer(layerName, spacing, designRuleWidth, xl, yl, xh, yh, mask); +} + +int defwPinPolygon (const char* layerName, int spacing, int designRuleWidth, int num_polys, double* xl, double* yl, int mask) { + return LefDefParser::defwPinPolygon(layerName, spacing, designRuleWidth, num_polys, xl, yl, mask); +} + +int defwPinVia (const char* viaName, int xl, int yl, int mask) { + return LefDefParser::defwPinVia(viaName, xl, yl, mask); +} + +int defwPinPort () { + return LefDefParser::defwPinPort(); +} + +int defwPinPortLayer (const char* layerName, int spacing, int designRuleWidth, int xl, int yl, int xh, int yh, int mask) { + return LefDefParser::defwPinPortLayer(layerName, spacing, designRuleWidth, xl, yl, xh, yh, mask); +} + +int defwPinPortPolygon (const char* layerName, int spacing, int designRuleWidth, int num_polys, double* xl, double* yl, int mask) { + return LefDefParser::defwPinPortPolygon(layerName, spacing, designRuleWidth, num_polys, xl, yl, mask); +} + +int defwPinPortVia (const char* viaName, int xl, int yl, int mask) { + return LefDefParser::defwPinPortVia(viaName, xl, yl, mask); +} + +int defwPinPortLocation (const char* status, int statusX, int statusY, const char* orient) { + return LefDefParser::defwPinPortLocation(status, statusX, statusY, orient); +} + +int defwPinNetExpr (const char* pinExpr) { + return LefDefParser::defwPinNetExpr(pinExpr); +} + +int defwPinSupplySensitivity (const char* pinName) { + return LefDefParser::defwPinSupplySensitivity(pinName); +} + +int defwPinGroundSensitivity (const char* pinName) { + return LefDefParser::defwPinGroundSensitivity(pinName); +} + +int defwPinAntennaPinPartialMetalArea (int value, const char* layerName) { + return LefDefParser::defwPinAntennaPinPartialMetalArea(value, layerName); +} + +int defwPinAntennaPinPartialMetalSideArea (int value, const char* layerName) { + return LefDefParser::defwPinAntennaPinPartialMetalSideArea(value, layerName); +} + +int defwPinAntennaPinPartialCutArea (int value, const char* layerName) { + return LefDefParser::defwPinAntennaPinPartialCutArea(value, layerName); +} + +int defwPinAntennaPinDiffArea (int value, const char* layerName) { + return LefDefParser::defwPinAntennaPinDiffArea(value, layerName); +} + +int defwPinAntennaModel (const char* oxide) { + return LefDefParser::defwPinAntennaModel(oxide); +} + +int defwPinAntennaPinGateArea (int value, const char* layerName) { + return LefDefParser::defwPinAntennaPinGateArea(value, layerName); +} + +int defwPinAntennaPinMaxAreaCar (int value, const char* layerName) { + return LefDefParser::defwPinAntennaPinMaxAreaCar(value, layerName); +} + +int defwPinAntennaPinMaxSideAreaCar (int value, const char* layerName) { + return LefDefParser::defwPinAntennaPinMaxSideAreaCar(value, layerName); +} + +int defwPinAntennaPinMaxCutCar (int value, const char* layerName) { + return LefDefParser::defwPinAntennaPinMaxCutCar(value, layerName); +} + +int defwEndPins () { + return LefDefParser::defwEndPins(); +} + +int defwStartPinProperties (int count) { + return LefDefParser::defwStartPinProperties(count); +} + +int defwPinProperty (const char* name, const char* pinName) { + return LefDefParser::defwPinProperty(name, pinName); +} + +int defwEndPinProperties () { + return LefDefParser::defwEndPinProperties(); +} + +int defwStartSpecialNets (int count) { + return LefDefParser::defwStartSpecialNets(count); +} + +int defwSpecialNet (const char* name) { + return LefDefParser::defwSpecialNet(name); +} + +int defwSpecialNetConnection (const char* inst, const char* pin, int synthesized) { + return LefDefParser::defwSpecialNetConnection(inst, pin, synthesized); +} + +int defwSpecialNetFixedbump () { + return LefDefParser::defwSpecialNetFixedbump(); +} + +int defwSpecialNetVoltage (double v) { + return LefDefParser::defwSpecialNetVoltage(v); +} + +int defwSpecialNetSpacing (const char* layer, int spacing, double minwidth, double maxwidth) { + return LefDefParser::defwSpecialNetSpacing(layer, spacing, minwidth, maxwidth); +} + +int defwSpecialNetWidth (const char* layer, int width) { + return LefDefParser::defwSpecialNetWidth(layer, width); +} + +int defwSpecialNetSource (const char* name) { + return LefDefParser::defwSpecialNetSource(name); +} + +int defwSpecialNetOriginal (const char* name) { + return LefDefParser::defwSpecialNetOriginal(name); +} + +int defwSpecialNetPattern (const char* name) { + return LefDefParser::defwSpecialNetPattern(name); +} + +int defwSpecialNetUse (const char* name) { + return LefDefParser::defwSpecialNetUse(name); +} + +int defwSpecialNetWeight (double value) { + return LefDefParser::defwSpecialNetWeight(value); +} + +int defwSpecialNetEstCap (double value) { + return LefDefParser::defwSpecialNetEstCap(value); +} + +int defwSpecialNetPathStart (const char* typ) { + return LefDefParser::defwSpecialNetPathStart(typ); +} + +int defwSpecialNetShieldNetName (const char* name) { + return LefDefParser::defwSpecialNetShieldNetName(name); +} + +int defwSpecialNetPathLayer (const char* name) { + return LefDefParser::defwSpecialNetPathLayer(name); +} + +int defwSpecialNetPathWidth (int width) { + return LefDefParser::defwSpecialNetPathWidth(width); +} + +int defwSpecialNetPathStyle (int styleNum) { + return LefDefParser::defwSpecialNetPathStyle(styleNum); +} + +int defwSpecialNetPathShape (const char* shapeType) { + return LefDefParser::defwSpecialNetPathShape(shapeType); +} + +int defwSpecialNetPathMask (int colorMask) { + return LefDefParser::defwSpecialNetPathMask(colorMask); +} + +int defwSpecialNetPathPoint (int numPts, double* pointx, double* pointy) { + return LefDefParser::defwSpecialNetPathPoint(numPts, pointx, pointy); +} + +int defwSpecialNetPathVia (const char* name) { + return LefDefParser::defwSpecialNetPathVia(name); +} + +int defwSpecialNetPathViaData (int numX, int numY, int stepX, int stepY) { + return LefDefParser::defwSpecialNetPathViaData(numX, numY, stepX, stepY); +} + +int defwSpecialNetPathPointWithWireExt (int numPts, double* pointx, double* pointy, double* optValue) { + return LefDefParser::defwSpecialNetPathPointWithWireExt(numPts, pointx, pointy, optValue); +} + +int defwSpecialNetPathEnd () { + return LefDefParser::defwSpecialNetPathEnd(); +} + +int defwSpecialNetPolygon (const char* layerName, int num_polys, double* xl, double* yl) { + return LefDefParser::defwSpecialNetPolygon(layerName, num_polys, xl, yl); +} + +int defwSpecialNetRect (const char* layerName, int xl, int yl, int xh, int yh) { + return LefDefParser::defwSpecialNetRect(layerName, xl, yl, xh, yh); +} + +int defwSpecialNetVia (const char* layerName) { + return LefDefParser::defwSpecialNetVia(layerName); +} + +int defwSpecialNetViaWithOrient (const char* layerName, int orient) { + return LefDefParser::defwSpecialNetViaWithOrient(layerName, orient); +} + +int defwSpecialNetViaPoints (int num_points, double* xl, double* yl) { + return LefDefParser::defwSpecialNetViaPoints(num_points, xl, yl); +} + +int defwSpecialNetEndOneNet () { + return LefDefParser::defwSpecialNetEndOneNet(); +} + +int defwSpecialNetShieldStart (const char* name) { + return LefDefParser::defwSpecialNetShieldStart(name); +} + +int defwSpecialNetShieldLayer (const char* name) { + return LefDefParser::defwSpecialNetShieldLayer(name); +} + +int defwSpecialNetShieldWidth (int width) { + return LefDefParser::defwSpecialNetShieldWidth(width); +} + +int defwSpecialNetShieldShape (const char* shapeType) { + return LefDefParser::defwSpecialNetShieldShape(shapeType); +} + +int defwSpecialNetShieldPoint (int numPts, double* pointx, double* pointy) { + return LefDefParser::defwSpecialNetShieldPoint(numPts, pointx, pointy); +} + +int defwSpecialNetShieldVia (const char* name) { + return LefDefParser::defwSpecialNetShieldVia(name); +} + +int defwSpecialNetShieldViaData (int numX, int numY, int stepX, int stepY) { + return LefDefParser::defwSpecialNetShieldViaData(numX, numY, stepX, stepY); +} + +int defwSpecialNetShieldEnd () { + return LefDefParser::defwSpecialNetShieldEnd(); +} + +int defwEndSpecialNets () { + return LefDefParser::defwEndSpecialNets(); +} + +int defwStartNets (int count) { + return LefDefParser::defwStartNets(count); +} + +int defwNet (const char* name) { + return LefDefParser::defwNet(name); +} + +int defwNetConnection (const char* inst, const char* pin, int synthesized) { + return LefDefParser::defwNetConnection(inst, pin, synthesized); +} + +int defwNetMustjoinConnection (const char* inst, const char* pin) { + return LefDefParser::defwNetMustjoinConnection(inst, pin); +} + +int defwNetVpin (const char* vpinName, const char* layerName, int layerXl, int layerYl, int layerXh, int layerYh, const char* status, int statusX, int statusY, int orient) { + return LefDefParser::defwNetVpin(vpinName, layerName, layerXl, layerYl, layerXh, layerYh, status, statusX, statusY, orient); +} + +int defwNetVpinStr (const char* vpinName, const char* layerName, int layerXl, int layerYl, int layerXh, int layerYh, const char* status, int statusX, int statusY, const char* orient) { + return LefDefParser::defwNetVpinStr(vpinName, layerName, layerXl, layerYl, layerXh, layerYh, status, statusX, statusY, orient); +} + +int defwNetNondefaultRule (const char* name) { + return LefDefParser::defwNetNondefaultRule(name); +} + +int defwNetXtalk (int xtalk) { + return LefDefParser::defwNetXtalk(xtalk); +} + +int defwNetFixedbump () { + return LefDefParser::defwNetFixedbump(); +} + +int defwNetFrequency (double frequency) { + return LefDefParser::defwNetFrequency(frequency); +} + +int defwNetSource (const char* name) { + return LefDefParser::defwNetSource(name); +} + +int defwNetOriginal (const char* name) { + return LefDefParser::defwNetOriginal(name); +} + +int defwNetUse (const char* name) { + return LefDefParser::defwNetUse(name); +} + +int defwNetPattern (const char* name) { + return LefDefParser::defwNetPattern(name); +} + +int defwNetEstCap (double value) { + return LefDefParser::defwNetEstCap(value); +} + +int defwNetWeight (double value) { + return LefDefParser::defwNetWeight(value); +} + +int defwNetShieldnet (const char* name) { + return LefDefParser::defwNetShieldnet(name); +} + +int defwNetNoshieldStart (const char* name) { + return LefDefParser::defwNetNoshieldStart(name); +} + +int defwNetNoshieldPoint (int numPts, const char** pointx, const char** pointy) { + return LefDefParser::defwNetNoshieldPoint(numPts, pointx, pointy); +} + +int defwNetNoshieldVia (const char* name) { + return LefDefParser::defwNetNoshieldVia(name); +} + +int defwNetNoshieldEnd () { + return LefDefParser::defwNetNoshieldEnd(); +} + +int defwNetSubnetStart (const char* name) { + return LefDefParser::defwNetSubnetStart(name); +} + +int defwNetSubnetPin (const char* compName, const char* pinName) { + return LefDefParser::defwNetSubnetPin(compName, pinName); +} + +int defwNetSubnetEnd () { + return LefDefParser::defwNetSubnetEnd(); +} + +int defwNetPathStart (const char* typ) { + return LefDefParser::defwNetPathStart(typ); +} + +int defwNetPathWidth (int w) { + return LefDefParser::defwNetPathWidth(w); +} + +int defwNetPathLayer (const char* name, int isTaper, const char* rulename) { + return LefDefParser::defwNetPathLayer(name, isTaper, rulename); +} + +int defwNetPathStyle (int styleNum) { + return LefDefParser::defwNetPathStyle(styleNum); +} + +int defwNetPathMask (int maskNum) { + return LefDefParser::defwNetPathMask(maskNum); +} + +int defwNetPathRect (int deltaX1, int deltaY1, int deltaX2, int deltaY2) { + return LefDefParser::defwNetPathRect(deltaX1, deltaY1, deltaX2, deltaY2); +} + +int defwNetPathVirtual (int x, int y) { + return LefDefParser::defwNetPathVirtual(x, y); +} + +int defwNetPathPoint (int numPts, double* pointx, double* pointy) { + return LefDefParser::defwNetPathPoint(numPts, pointx, pointy); +} + +int defwNetPathPointWithExt (int numPts, double* pointx, double* pointy, double* optValue) { + return LefDefParser::defwNetPathPointWithExt(numPts, pointx, pointy, optValue); +} + +int defwNetPathVia (const char* name) { + return LefDefParser::defwNetPathVia(name); +} + +int defwNetPathViaWithOrient (const char* name, int orient) { + return LefDefParser::defwNetPathViaWithOrient(name, orient); +} + +int defwNetPathViaWithOrientStr (const char* name, const char* orient) { + return LefDefParser::defwNetPathViaWithOrientStr(name, orient); +} + +int defwNetPathEnd () { + return LefDefParser::defwNetPathEnd(); +} + +int defwNetEndOneNet () { + return LefDefParser::defwNetEndOneNet(); +} + +int defwEndNets () { + return LefDefParser::defwEndNets(); +} + +int defwStartIOTimings (int count) { + return LefDefParser::defwStartIOTimings(count); +} + +int defwIOTiming (const char* inst, const char* pin) { + return LefDefParser::defwIOTiming(inst, pin); +} + +int defwIOTimingVariable (const char* riseFall, int num1, int num2) { + return LefDefParser::defwIOTimingVariable(riseFall, num1, num2); +} + +int defwIOTimingSlewrate (const char* riseFall, int num1, int num2) { + return LefDefParser::defwIOTimingSlewrate(riseFall, num1, num2); +} + +int defwIOTimingDrivecell (const char* name, const char* fromPin, const char* toPin, int numDrivers) { + return LefDefParser::defwIOTimingDrivecell(name, fromPin, toPin, numDrivers); +} + +int defwIOTimingCapacitance (double num) { + return LefDefParser::defwIOTimingCapacitance(num); +} + +int defwEndIOTimings () { + return LefDefParser::defwEndIOTimings(); +} + +int defwStartScanchains (int count) { + return LefDefParser::defwStartScanchains(count); +} + +int defwScanchain (const char* name) { + return LefDefParser::defwScanchain(name); +} + +int defwScanchainCommonscanpins (const char* inst1, const char* pin1, const char* inst2, const char* pin2) { + return LefDefParser::defwScanchainCommonscanpins(inst1, pin1, inst2, pin2); +} + +int defwScanchainPartition (const char* name, int maxBits) { + return LefDefParser::defwScanchainPartition(name, maxBits); +} + +int defwScanchainStart (const char* inst, const char* pin) { + return LefDefParser::defwScanchainStart(inst, pin); +} + +int defwScanchainStop (const char* inst, const char* pin) { + return LefDefParser::defwScanchainStop(inst, pin); +} + +int defwScanchainFloating (const char* name, const char* inst1, const char* pin1, const char* inst2, const char* pin2) { + return LefDefParser::defwScanchainFloating(name, inst1, pin1, inst2, pin2); +} + +int defwScanchainFloatingBits (const char* name, const char* inst1, const char* pin1, const char* inst2, const char* pin2, int bits) { + return LefDefParser::defwScanchainFloatingBits(name, inst1, pin1, inst2, pin2, bits); +} + +int defwScanchainOrdered (const char* name1, const char* inst1, const char* pin1, const char* inst2, const char* pin2, const char* name2, const char* inst3, const char* pin3, const char* inst4, const char* pin4) { + return LefDefParser::defwScanchainOrdered(name1, inst1, pin1, inst2, pin2, name2, inst3, pin3, inst4, pin4); +} + +int defwScanchainOrderedBits (const char* name1, const char* inst1, const char* pin1, const char* inst2, const char* pin2, int bits1, const char* name2, const char* inst3, const char* pin3, const char* inst4, const char* pin4, int bits2) { + return LefDefParser::defwScanchainOrderedBits(name1, inst1, pin1, inst2, pin2, bits1, name2, inst3, pin3, inst4, pin4, bits2); +} + +int defwEndScanchain () { + return LefDefParser::defwEndScanchain(); +} + +int defwStartConstraints (int count) { + return LefDefParser::defwStartConstraints(count); +} + +int defwConstraintOperand () { + return LefDefParser::defwConstraintOperand(); +} + +int defwConstraintOperandNet (const char* netName) { + return LefDefParser::defwConstraintOperandNet(netName); +} + +int defwConstraintOperandPath (const char* comp1, const char* fromPin, const char* comp2, const char* toPin) { + return LefDefParser::defwConstraintOperandPath(comp1, fromPin, comp2, toPin); +} + +int defwConstraintOperandSum () { + return LefDefParser::defwConstraintOperandSum(); +} + +int defwConstraintOperandSumEnd () { + return LefDefParser::defwConstraintOperandSumEnd(); +} + +int defwConstraintOperandTime (const char* timeType, int time) { + return LefDefParser::defwConstraintOperandTime(timeType, time); +} + +int defwConstraintOperandEnd () { + return LefDefParser::defwConstraintOperandEnd(); +} + +int defwConstraintWiredlogic (const char* netName, int distance) { + return LefDefParser::defwConstraintWiredlogic(netName, distance); +} + +int defwEndConstraints () { + return LefDefParser::defwEndConstraints(); +} + +int defwStartGroups (int count) { + return LefDefParser::defwStartGroups(count); +} + +int defwGroup (const char* groupName, int numExpr, const char** groupExpr) { + return LefDefParser::defwGroup(groupName, numExpr, groupExpr); +} + +int defwGroupSoft (const char* type1, double value1, const char* type2, double value2, const char* type3, double value3) { + return LefDefParser::defwGroupSoft(type1, value1, type2, value2, type3, value3); +} + +int defwGroupRegion (int xl, int yl, int xh, int yh, const char* regionName) { + return LefDefParser::defwGroupRegion(xl, yl, xh, yh, regionName); +} + +int defwEndGroups () { + return LefDefParser::defwEndGroups(); +} + +int defwStartBlockages (int count) { + return LefDefParser::defwStartBlockages(count); +} + +int defwBlockagesLayer (const char* layerName) { + return LefDefParser::defwBlockagesLayer(layerName); +} + +int defwBlockagesLayerSlots () { + return LefDefParser::defwBlockagesLayerSlots(); +} + +int defwBlockagesLayerFills () { + return LefDefParser::defwBlockagesLayerFills(); +} + +int defwBlockagesLayerPushdown () { + return LefDefParser::defwBlockagesLayerPushdown(); +} + +int defwBlockagesLayerExceptpgnet () { + return LefDefParser::defwBlockagesLayerExceptpgnet(); +} + +int defwBlockagesLayerComponent (const char* compName) { + return LefDefParser::defwBlockagesLayerComponent(compName); +} + +int defwBlockagesLayerSpacing (int minSpacing) { + return LefDefParser::defwBlockagesLayerSpacing(minSpacing); +} + +int defwBlockagesLayerDesignRuleWidth (int effectiveWidth) { + return LefDefParser::defwBlockagesLayerDesignRuleWidth(effectiveWidth); +} + +int defwBlockagesLayerMask (int maskColor) { + return LefDefParser::defwBlockagesLayerMask(maskColor); +} + +int defwBlockageLayer (const char* layerName, const char* compName) { + return LefDefParser::defwBlockageLayer(layerName, compName); +} + +int defwBlockageLayerSlots (const char* layerName) { + return LefDefParser::defwBlockageLayerSlots(layerName); +} + +int defwBlockageLayerFills (const char* layerName) { + return LefDefParser::defwBlockageLayerFills(layerName); +} + +int defwBlockageLayerPushdown (const char* layerName) { + return LefDefParser::defwBlockageLayerPushdown(layerName); +} + +int defwBlockageLayerExceptpgnet (const char* layerName) { + return LefDefParser::defwBlockageLayerExceptpgnet(layerName); +} + +int defwBlockageSpacing (int minSpacing) { + return LefDefParser::defwBlockageSpacing(minSpacing); +} + +int defwBlockageDesignRuleWidth (int effectiveWidth) { + return LefDefParser::defwBlockageDesignRuleWidth(effectiveWidth); +} + +int defwBlockagesPlacement () { + return LefDefParser::defwBlockagesPlacement(); +} + +int defwBlockagesPlacementComponent (const char* compName) { + return LefDefParser::defwBlockagesPlacementComponent(compName); +} + +int defwBlockagesPlacementPushdown () { + return LefDefParser::defwBlockagesPlacementPushdown(); +} + +int defwBlockagesPlacementSoft () { + return LefDefParser::defwBlockagesPlacementSoft(); +} + +int defwBlockagesPlacementPartial (double maxDensity) { + return LefDefParser::defwBlockagesPlacementPartial(maxDensity); +} + +int defwBlockagesRect (int xl, int yl, int xh, int yh) { + return LefDefParser::defwBlockagesRect(xl, yl, xh, yh); +} + +int defwBlockagesPolygon (int num_polys, int* xl, int* yl) { + return LefDefParser::defwBlockagesPolygon(num_polys, xl, yl); +} + +int defwBlockagePlacement () { + return LefDefParser::defwBlockagePlacement(); +} + +int defwBlockagePlacementComponent (const char* compName) { + return LefDefParser::defwBlockagePlacementComponent(compName); +} + +int defwBlockagePlacementPushdown () { + return LefDefParser::defwBlockagePlacementPushdown(); +} + +int defwBlockagePlacementSoft () { + return LefDefParser::defwBlockagePlacementSoft(); +} + +int defwBlockagePlacementPartial (double maxDensity) { + return LefDefParser::defwBlockagePlacementPartial(maxDensity); +} + +int defwBlockageMask (int maskColor) { + return LefDefParser::defwBlockageMask(maskColor); +} + +int defwBlockageRect (int xl, int yl, int xh, int yh) { + return LefDefParser::defwBlockageRect(xl, yl, xh, yh); +} + +int defwBlockagePolygon (int num_polys, int* xl, int* yl) { + return LefDefParser::defwBlockagePolygon(num_polys, xl, yl); +} + +int defwEndBlockages () { + return LefDefParser::defwEndBlockages(); +} + +int defwStartSlots (int count) { + return LefDefParser::defwStartSlots(count); +} + +int defwSlotLayer (const char* layerName) { + return LefDefParser::defwSlotLayer(layerName); +} + +int defwSlotRect (int xl, int yl, int xh, int yh) { + return LefDefParser::defwSlotRect(xl, yl, xh, yh); +} + +int defwSlotPolygon (int num_polys, double* xl, double* yl) { + return LefDefParser::defwSlotPolygon(num_polys, xl, yl); +} + +int defwEndSlots () { + return LefDefParser::defwEndSlots(); +} + +int defwStartFills (int count) { + return LefDefParser::defwStartFills(count); +} + +int defwFillLayer (const char* layerName) { + return LefDefParser::defwFillLayer(layerName); +} + +int defwFillLayerMask (int maskColor) { + return LefDefParser::defwFillLayerMask(maskColor); +} + +int defwFillLayerOPC () { + return LefDefParser::defwFillLayerOPC(); +} + +int defwFillRect (int xl, int yl, int xh, int yh) { + return LefDefParser::defwFillRect(xl, yl, xh, yh); +} + +int defwFillPolygon (int num_polys, double* xl, double* yl) { + return LefDefParser::defwFillPolygon(num_polys, xl, yl); +} + +int defwFillVia (const char* viaName) { + return LefDefParser::defwFillVia(viaName); +} + +int defwFillViaMask (int colorMask) { + return LefDefParser::defwFillViaMask(colorMask); +} + +int defwFillViaOPC () { + return LefDefParser::defwFillViaOPC(); +} + +int defwFillPoints (int num_points, double* xl, double* yl) { + return LefDefParser::defwFillPoints(num_points, xl, yl); +} + +int defwEndFills () { + return LefDefParser::defwEndFills(); +} + +int defwStartNonDefaultRules (int count) { + return LefDefParser::defwStartNonDefaultRules(count); +} + +int defwNonDefaultRule (const char* ruleName, int hardSpacing) { + return LefDefParser::defwNonDefaultRule(ruleName, hardSpacing); +} + +int defwNonDefaultRuleLayer (const char* layerName, int width, int diagWidth, int spacing, int wireExt) { + return LefDefParser::defwNonDefaultRuleLayer(layerName, width, diagWidth, spacing, wireExt); +} + +int defwNonDefaultRuleVia (const char* viaName) { + return LefDefParser::defwNonDefaultRuleVia(viaName); +} + +int defwNonDefaultRuleViaRule (const char* viaRuleName) { + return LefDefParser::defwNonDefaultRuleViaRule(viaRuleName); +} + +int defwNonDefaultRuleMinCuts (const char* cutLayerName, int numCutS) { + return LefDefParser::defwNonDefaultRuleMinCuts(cutLayerName, numCutS); +} + +int defwEndNonDefaultRules () { + return LefDefParser::defwEndNonDefaultRules(); +} + +int defwStartStyles (int count) { + return LefDefParser::defwStartStyles(count); +} + +int defwStyles (int styleNums, int num_points, double* xp, double* yp) { + return LefDefParser::defwStyles(styleNums, num_points, xp, yp); +} + +int defwEndStyles () { + return LefDefParser::defwEndStyles(); +} + +int defwStartBeginext (const char* name) { + return LefDefParser::defwStartBeginext(name); +} + +int defwBeginextCreator (const char* creatorName) { + return LefDefParser::defwBeginextCreator(creatorName); +} + +int defwBeginextDate () { + return LefDefParser::defwBeginextDate(); +} + +int defwBeginextRevision (int vers1, int vers2) { + return LefDefParser::defwBeginextRevision(vers1, vers2); +} + +int defwBeginextSyntax (const char* title, const char* string) { + return LefDefParser::defwBeginextSyntax(title, string); +} + +int defwEndBeginext () { + return LefDefParser::defwEndBeginext(); +} + +int defwEnd () { + return LefDefParser::defwEnd(); +} + +int defwCurrentLineNumber () { + return LefDefParser::defwCurrentLineNumber(); +} + +void defwPrintError (int status) { + LefDefParser::defwPrintError(status); +} + +void defwAddComment (const char* comment) { + LefDefParser::defwAddComment(comment); +} + +void defwAddIndent () { + LefDefParser::defwAddIndent(); +} + diff --git a/lefdef/src/def/cdef/xdefwWriterCalls.cpp b/lefdef/src/def/cdef/xdefwWriterCalls.cpp new file mode 100644 index 00000000..ec61589a --- /dev/null +++ b/lefdef/src/def/cdef/xdefwWriterCalls.cpp @@ -0,0 +1,203 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: xxx $ +// $Revision: xxx $ +// $Date: xxx $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "defwWriterCalls.h" +#include "defwWriterCalls.hpp" + +// Wrappers definitions. +int defwWrite (FILE * file, const char * fileName, defiUserData userData) { + return LefDefParser::defwWrite(file, fileName, userData); +} + +void defwSetRegisterUnusedCallbacks () { + LefDefParser::defwSetRegisterUnusedCallbacks(); +} + +void defwPrintUnusedCallbacks (FILE* log) { + LefDefParser::defwPrintUnusedCallbacks(log); +} + +void defwSetUserData (defiUserData p0) { + LefDefParser::defwSetUserData(p0); +} + +defiUserData defwGetUserData () { + return LefDefParser::defwGetUserData(); +} + +void defwSetArrayCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetArrayCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetAssertionCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetAssertionCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetBlockageCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetBlockageCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetBusBitCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetBusBitCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetCannotOccupyCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetCannotOccupyCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetCanplaceCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetCanplaceCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetCaseSensitiveCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetCaseSensitiveCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetComponentCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetComponentCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetConstraintCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetConstraintCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetDefaultCapCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetDefaultCapCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetDesignCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetDesignCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetDesignEndCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetDesignEndCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetDieAreaCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetDieAreaCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetDividerCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetDividerCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetExtCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetExtCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetFloorPlanCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetFloorPlanCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetGcellGridCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetGcellGridCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetGroupCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetGroupCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetHistoryCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetHistoryCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetIOTimingCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetIOTimingCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetNetCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetNetCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetPinCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetPinCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetPinPropCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetPinPropCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetPropDefCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetPropDefCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetRegionCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetRegionCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetRowCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetRowCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetSNetCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetSNetCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetScanchainCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetScanchainCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetTechnologyCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetTechnologyCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetTrackCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetTrackCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetUnitsCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetUnitsCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetVersionCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetVersionCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetViaCbk (::defwVoidCbkFnType p0) { + LefDefParser::defwSetViaCbk((LefDefParser::defwVoidCbkFnType) p0); +} + +void defwSetUnusedCallbacks (::defwVoidCbkFnType func) { + LefDefParser::defwSetUnusedCallbacks((LefDefParser::defwVoidCbkFnType ) func); +} + +void defwSetLogFunction (::DEFI_LOG_FUNCTION p0) { + LefDefParser::defwSetLogFunction(p0); +} + +void defwSetWarningLogFunction (::DEFI_WARNING_LOG_FUNCTION p0) { + LefDefParser::defwSetWarningLogFunction(p0); +} + diff --git a/lefdef/src/def/cdefzlib/Makefile b/lefdef/src/def/cdefzlib/Makefile new file mode 100644 index 00000000..a1a025f6 --- /dev/null +++ b/lefdef/src/def/cdefzlib/Makefile @@ -0,0 +1,13 @@ +LEF_TABNAME = cdefzlib + +FAKE_ALL: all + +DIRNAME = cdefzlib + +LIBTARGET = libcdefzlib.a + +PUBLIC_HDRS = defzlib.h + +LIBSRCS = cdefzlib.c + +include ../template.mk diff --git a/lefdef/src/def/cdefzlib/cdefzlib.c b/lefdef/src/def/cdefzlib/cdefzlib.c new file mode 100644 index 00000000..0deddf00 --- /dev/null +++ b/lefdef/src/def/cdefzlib/cdefzlib.c @@ -0,0 +1,69 @@ +/******************************************************************************* + ******************************************************************************* + * Copyright 2014, Cadence Design Systems + * + * This file is part of the Cadence LEF/DEF Open Source + * Distribution, Product Version 5.8. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. + * + * For updates, support, or to become part of the LEF/DEF Community, + * check www.openeda.org for details. + ******************************************************************************* + ******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "zlib.h" +#include "defzlib.h" +#include "defrReader.h" + +/* + * Private functions: + */ +size_t defGZip_read(FILE* file, char* buf, size_t len) { + return gzread((gzFile)file, buf, (unsigned int)len); +} + +/* + * Public functions: + */ +defGZFile +defGZipOpen(const char *gzipPath, const char* mode) { + defGZFile fptr; + + if (!gzipPath) + return NULL; + + fptr = gzopen(gzipPath, mode); + + if (fptr) { + /* successfully open the gzip file */ + /* set the read function to read from a compressed file */ + defrSetReadFunction(defGZip_read); + return (defGZFile)fptr; + } else + return NULL; +} + +int defGZipClose(defGZFile filePtr) { + return (gzclose((gzFile)filePtr)); +} + +int defrReadGZip(defGZFile file, const char* gzipFile, defiUserData uData) { + return defrRead((FILE*)file, gzipFile, uData, 1); +} diff --git a/lefdef/src/def/cdefzlib/defzlib.h b/lefdef/src/def/cdefzlib/defzlib.h new file mode 100644 index 00000000..dc5a6899 --- /dev/null +++ b/lefdef/src/def/cdefzlib/defzlib.h @@ -0,0 +1,51 @@ +/******************************************************************************* + ******************************************************************************* + * Copyright 2012, Cadence Design Systems + * + * This file is part of the Cadence LEF/DEF Open Source + * Distribution, Product Version 5.8. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. + * + * For updates, support, or to become part of the LEF/DEF Community, + * check www.openeda.org for details. + ******************************************************************************* + ******************************************************************************/ + +#ifndef CLEFDEFZIP_H +#define CLEFDEFZIP_H + +typedef void* defGZFile; + +/* + * Name: defGZipOpen + * Description: Open a gzip file + * Returns: A file pointer + */ +extern defGZFile defGZipOpen(const char* gzipFile, const char* mode); + +/* + * Name: defGZipClose + * Description: Close a gzip file + * Returns: 0 if no errors + */ +extern int defGZipClose(defGZFile filePtr); + +/* + * Name: defrReadGZip + * Description: Parse a def gzip file + * Returns: 0 if no errors + */ +extern int defrReadGZip(defGZFile file, const char* gzipFile, void* uData); + +#endif diff --git a/lefdef/src/def/def/CMakeLists.txt b/lefdef/src/def/def/CMakeLists.txt new file mode 100644 index 00000000..a382f24a --- /dev/null +++ b/lefdef/src/def/def/CMakeLists.txt @@ -0,0 +1,186 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + include_directories ( ${LEFDEF_SOURCE_DIR}/src/def/def + ${LEFDEF_SOURCE_DIR}/src/def/include + ) + + set ( includes defiAlias.hpp + defiAssertion.hpp + defiBlockage.hpp + defiComponent.hpp + defiDebug.hpp + defiDefs.hpp + defiFPC.hpp + defiFill.hpp + defiGroup.hpp + defiIOTiming.hpp + defiKRDefs.hpp + defiMisc.hpp + defiNet.hpp + defiNonDefault.hpp + defiPartition.hpp + defiPath.hpp + defiPinCap.hpp + defiPinProp.hpp + defiProp.hpp + defiPropType.hpp + defiRegion.hpp + defiRowTrack.hpp + defiScanchain.hpp + defiSite.hpp + defiSlot.hpp + defiTimingDisable.hpp + defiUser.hpp + defiUtil.hpp + defiVia.hpp + defrCallBacks.hpp + defrData.hpp + defrReader.hpp + defrSettings.hpp + defwWriter.hpp + defwWriterCalls.hpp + ) + + set ( cpps def.tab.cpp + def_keywords.cpp + defiAlias.cpp + defiAssertion.cpp + defiBlockage.cpp + defiComponent.cpp + defiDebug.cpp + defiFPC.cpp + defiFill.cpp + defiGroup.cpp + defiIOTiming.cpp + defiMisc.cpp + defiNet.cpp + defiNonDefault.cpp + defiPartition.cpp + defiPath.cpp + defiPinCap.cpp + defiPinProp.cpp + defiProp.cpp + defiPropType.cpp + defiRegion.cpp + defiRowTrack.cpp + defiScanchain.cpp + defiSite.cpp + defiSlot.cpp + defiTimingDisable.cpp + defiUtil.cpp + defiVia.cpp + defrCallbacks.cpp + defrData.cpp + defrReader.cpp + defrSettings.cpp + defwWriter.cpp + defwWriterCalls.cpp + ) + + set ( DefParserGrammar ${LEFDEF_SOURCE_DIR}/src/def/def/def.y ) + add_custom_command ( SOURCE ${DefParserGrammar} + COMMAND ${BISON_EXECUTABLE} + ARGS -v -p defyy -d ${DefParserGrammar} -o def.tab.cpp + COMMAND mv + ARGS def.tab.hpp ${LEFDEF_SOURCE_DIR}/src/def/def/def.tab.h + TARGET DefParser + OUTPUTS def.tab.cpp + ) + set_source_files_properties ( def.tab.cpp GENERATED ) + + add_library ( def ${cpps} ) + set_target_properties ( def PROPERTIES VERSION 5.8 SOVERSION 5 ) + + install ( TARGETS def DESTINATION lib${LIB_SUFFIX} ) + install ( FILES ${includes} DESTINATION include/def ) + +#DEF_TABNAME = def +#DEF_BISON_SRCS = def.y +# +#FAKE_ALL: all +# +#LIBTARGET = libdef.a +# +#HEADERS = \ +# def.tab.h \ +# lex.h \ +# lex.cpph +# +#PUBLIC_HDRS = \ +# defiAlias.hpp \ +# defiAssertion.hpp \ +# defiBlockage.hpp \ +# defiComponent.hpp \ +# defiDebug.hpp \ +# defiDefs.hpp \ +# defiFPC.hpp \ +# defiFill.hpp \ +# defiGroup.hpp \ +# defiIOTiming.hpp \ +# defiKRDefs.hpp \ +# defiMisc.hpp \ +# defiNet.hpp \ +# defiNonDefault.hpp \ +# defiPartition.hpp \ +# defiPath.hpp \ +# defiPinCap.hpp \ +# defiPinProp.hpp \ +# defiProp.hpp \ +# defiPropType.hpp \ +# defiRegion.hpp \ +# defiRowTrack.hpp \ +# defiScanchain.hpp \ +# defiSite.hpp \ +# defiSlot.hpp \ +# defiTimingDisable.hpp \ +# defiUser.hpp \ +# defiUtil.hpp \ +# defiVia.hpp \ +# defrCallBacks.hpp \ +# defrData.hpp \ +# defrReader.hpp \ +# defrSettings.hpp \ +# defwWriter.hpp \ +# defwWriterCalls.hpp +# +#LIBSRCS = \ +# def.tab.cpp \ +# def_keywords.cpp \ +# defiAlias.cpp \ +# defiAssertion.cpp \ +# defiBlockage.cpp \ +# defiComponent.cpp \ +# defiDebug.cpp \ +# defiFPC.cpp \ +# defiFill.cpp \ +# defiGroup.cpp \ +# defiIOTiming.cpp \ +# defiMisc.cpp \ +# defiNet.cpp \ +# defiNonDefault.cpp \ +# defiPartition.cpp \ +# defiPath.cpp \ +# defiPinCap.cpp \ +# defiPinProp.cpp \ +# defiProp.cpp \ +# defiPropType.cpp \ +# defiRegion.cpp \ +# defiRowTrack.cpp \ +# defiScanchain.cpp \ +# defiSite.cpp \ +# defiSlot.cpp \ +# defiTimingDisable.cpp \ +# defiUtil.cpp \ +# defiVia.cpp \ +# defrCallbacks.cpp \ +# defrData.cpp \ +# defrReader.cpp \ +# defrSettings.cpp \ +# defwWriter.cpp \ +# defwWriterCalls.cpp +# +#def.tab.cpp : $(DEF_BISON_SRCS) +# bison -v -p$(DEF_TABNAME)yy -d $(DEF_BISON_SRCS) +# mv $(DEF_TABNAME).tab.c $(DEF_TABNAME).tab.cpp ; +# +#include ../template.mk diff --git a/lefdef/src/def/def/Makefile b/lefdef/src/def/def/Makefile new file mode 100644 index 00000000..e17e5899 --- /dev/null +++ b/lefdef/src/def/def/Makefile @@ -0,0 +1,90 @@ +DEF_TABNAME = def +DEF_BISON_SRCS = def.y + +FAKE_ALL: all + +LIBTARGET = libdef.a + +HEADERS = \ + def.tab.h \ + lex.h \ + lex.cpph + +PUBLIC_HDRS = \ + defiAlias.hpp \ + defiAssertion.hpp \ + defiBlockage.hpp \ + defiComponent.hpp \ + defiDebug.hpp \ + defiDefs.hpp \ + defiFPC.hpp \ + defiFill.hpp \ + defiGroup.hpp \ + defiIOTiming.hpp \ + defiKRDefs.hpp \ + defiMisc.hpp \ + defiNet.hpp \ + defiNonDefault.hpp \ + defiPartition.hpp \ + defiPath.hpp \ + defiPinCap.hpp \ + defiPinProp.hpp \ + defiProp.hpp \ + defiPropType.hpp \ + defiRegion.hpp \ + defiRowTrack.hpp \ + defiScanchain.hpp \ + defiSite.hpp \ + defiSlot.hpp \ + defiTimingDisable.hpp \ + defiUser.hpp \ + defiUtil.hpp \ + defiVia.hpp \ + defrCallBacks.hpp \ + defrData.hpp \ + defrReader.hpp \ + defrSettings.hpp \ + defwWriter.hpp \ + defwWriterCalls.hpp + +LIBSRCS = \ + def.tab.cpp \ + def_keywords.cpp \ + defiAlias.cpp \ + defiAssertion.cpp \ + defiBlockage.cpp \ + defiComponent.cpp \ + defiDebug.cpp \ + defiFPC.cpp \ + defiFill.cpp \ + defiGroup.cpp \ + defiIOTiming.cpp \ + defiMisc.cpp \ + defiNet.cpp \ + defiNonDefault.cpp \ + defiPartition.cpp \ + defiPath.cpp \ + defiPinCap.cpp \ + defiPinProp.cpp \ + defiProp.cpp \ + defiPropType.cpp \ + defiRegion.cpp \ + defiRowTrack.cpp \ + defiScanchain.cpp \ + defiSite.cpp \ + defiSlot.cpp \ + defiTimingDisable.cpp \ + defiUtil.cpp \ + defiVia.cpp \ + defrCallbacks.cpp \ + defrData.cpp \ + defrReader.cpp \ + defrSettings.cpp \ + defwWriter.cpp \ + defwWriterCalls.cpp + +def.tab.cpp : $(DEF_BISON_SRCS) + bison -v -p$(DEF_TABNAME)yy -d $(DEF_BISON_SRCS) + mv $(DEF_TABNAME).tab.c $(DEF_TABNAME).tab.cpp ; + +include ../template.mk diff --git a/lefdef/src/def/def/def.msg b/lefdef/src/def/def/def.msg new file mode 100644 index 00000000..eb58c0d3 --- /dev/null +++ b/lefdef/src/def/def/def.msg @@ -0,0 +1,163 @@ +# Error message number: +# 6000 - out of memory +# 6010 - defiBlockage.cpp +# 6020 - defiComponent.cpp +# 6030 - defiFPC.cpp +# 6040 - defiFill.cpp +# 6050 - defiGroup.cpp +# 6060 - defiIOTiming.cpp +# 6070 - defiMisc.cpp +# 6080 - defiNet.cpp +# 6090 - defiNonDefault.cpp +# 6100 - defiPartition.cpp +# 6110 - defiPinCap.cpp +# 6120 - defiPinProp.cpp +# 6130 - defiRegion.cpp +# 6140 - defiRowTrack.cpp +# 6150 - defiScanchain.cpp +# 6160 - defiSlot.cpp +# 6170 - defiTimingDisable.cpp +# 6180 - defiVia.cpp +# 6200 - defiAssertion.cpp +# 5000 - def reader, defrReader.cpp +# 5500 - lex.cpph, yyerror +# 6000 - def parser, error, lex.cpph, def.y (CALLBACK and CHKERR) +# 6500 - def parser, error, def.y +# 7000 - def parser, warning, lex.cpph +# 7500 - def parser, warning, lef.y +# 8000 - def parser, info, lex.cpph +# 9000 - def writer +# emsMkError DEF -b defMsgTable -m def.msg -e -n +5000 "The 'defrRead' function has been called before the 'defrInit' function.\nThe 'defrInit' function should be called prior to the 'defrRead' function." +5001 "DEF statement found in the def file with no callback set." +6000 "The syntax for an ALIAS statement is \"&ALIAS aliasName = aliasDefinition &ENDALIAS\". '=' is missing after the aliasName." +6001 "End of file is reached while parsing in the middle of an ALIAS statement.\nReview you def file and add '&ENDALIAS' in the ALIAS statement." +6002 "The def file is incomplete." +6003 "The BEGINEXT tag is missing in the DEF file. Include the tag and then try again." +6004 "The BEGINEXT tag is empty. Specify a value for the tag and try again." +6005 "The '\"' is missing within the tag. Specify the '\"' in the tag and then try again." +6006 "The ending '\"' is missing in the tag. Specify the ending '\"' in the tag and then try again." +6007 "The ENDEXT statement is missing in the DEF file. Include the statement and then try again." +6008 "Invalid characters found in \'%s\'.\nThese characters might be using the character types other than English.\nCreate characters by specifying valid characters types." +6010 "An error has been reported in callback." +6011 "Too many syntax errors have been reported." +6030 "Invalid direction specified with FPC name. The valid direction is either 'H' or 'V'. Specify a valid vale and then try again." +6060 "Invalid value specified for IOTIMING rise/fall. The valid value for rise is 'R' and for fall is 'F'. Specify a valid value and then try again." +6080 "An internal error has occurred. The index number for the SUBNET wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information." +6081 "An internal error has occurred. The index number for the NET PATH wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information." +6082 "An internal error has occurred. The index number for the NET SHIELDPATH wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information." +6083 "The index number %d specified for the NET INSTANCE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again." +6084 "The index number %d specified for the NET PIN is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again." +6085 "The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again." +6086 "The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again." +6090 "The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again." +6091 "The index number %d specified for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again." +6100 "The value spefified for PARTITION SETUP is invalid. The valid value for SETUP is 'R' or 'F'. Specify a valid value for SETUP and then try again." +6101 "The value spefified for PARTITION HOLD is invalid. The valid value for HOLD is 'R' or 'F'. Specify a valid value for HOLD and then try again." +6120 "The index number %d specified for the PIN PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again." +6130 "The index number %d specified for the REGION PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again." +6131 "The index number %d specified for the REGION RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again." +6140 "The index number %d specified for the VIA LAYER RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again." +6150 "The START statement in the SCANCHAINS has defined more than one time in the SCANCHAINS statement.\nUpdate the DEF file to only one START statement and then try again." +6151 "The STOP statment in the SCANCHAINS has defined more than one time in the SCANCHAINS statement.\nUpdate the DEF file to only one STOP statement and then try again." +6160 "The index number %d specified for the SLOT RECTANGLE is invalid.\nValid index number is from 0 to %d. Specify a valid index number and then try again." +6170 "The TimingDisable type is invalid. The valid types are FROMPIN, & THRUPIN. Specify the valid type and then try again." +6180 "The index number %d specified for the VIA POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again" +6200 "The ASSERTION statement is invalid because it has an invalid operand rule.\nValid operand rule is either NET or PATH. Specify a valid operand and then try again." +6201 "Unable to process the DEF file. Both WIREDLOGIC and DELAY statements are defined in constraint/assertion.\nUpdate the DEF file to define either a WIREDLOGIC or DELAY statement only." +6202 "Unable to process the DEF file. Both SUM and DIFF statements are defined in constraint/assertion.\nUpdate the DEF file to define either a SUM or DIFF statement only." +6501 "An error has been found while processing the DEF file '%s'\nUnit %d is a 5.6 or later syntax. Define the DEF file as 5.6 and then try again." +6502 "The value %d defined for DEF UNITS DISTANCE MICRON is invalid\n. The valid values are 100, 200, 1000, 2000, 10000, or 20000. Specify a valid value and then try again." +6503 "The execution has been stopped because the DEF parser 5.7 does not support DEF file with version %s.\nUpdate your DEF file to version 5.7 or earlier." +6504 "Def parser version 5.7 and later does not support NAMESCASESENSITIVE OFF.\nEither remove this optional construct or set it to ON." +6505 "The NONDEFAULTRULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g." +6506 "The NETEXPR statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g." +6507 "The SUPPLYSENSITIVITY statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g." +6508 "The GROUNDSENSITIVITY statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g." +6509 "The POLYGON statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g." +6510 "The ANTENNAPINPARTIALMETALAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g." +6511 "The ANTENNAPINPARTIALMETALSIDEAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g" +6512 "The ANTENNAPINGATEAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g" +6513 "The ANTENNAPINDIFFAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g" +6514 "The ANTENNAPINMAXAREACAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g" +6515 "The ANTENNAPINMAXSIDEAREACAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g" +6516 "The ANTENNAPINPARTIALCUTAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g" +6517 "The ANTENNAPINMAXCUTCAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g" +6518 "The ANTENNAMODEL statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g" +6519 "The SPACING statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g" +6520 "The DESIGNRULEWIDTH statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g" +6523 "Invalid ROW statement defined in the DEF file. The DO statement which is required in the ROW statement is not defined.\nUpdate your DEF file with a DO statement." +6524 "Invalid syntax specified. The valid syntax is either \"DO 1 BY num or DO num BY 1\". Specify the valid syntax and try again." +6525 "The DO number %g in TRACK is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again." +6526 "The STEP number %g in TRACK is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again." +6527 "The DO number %g in GCELLGRID is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again." +6528 "The STEP number %g in GCELLGRID is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again." +6529 "The HALO statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g" +6530 "The FIXEDBUMP statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g" +6531 "The layerName which is required in path is missing. Include the layerName in the path and then try again." +6532 "The VIA DO statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g" +6533 "Either the numX or numY in the VIA DO statement has invalid value. The value specified is 0.\nUpdate your DEF file with the correct value and then try again." +6534 "The STYLE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g" +6535 "The POLYGON statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g" +6536 "The RECT statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g" +6537 "The value %s for statement VOLTAGE is invalid. The value can only be integer.\nSpecify a valid value in units of millivolts" +6538 "The PARTITION statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g" +6539 "Invalid BLOCKAGE statement defined in the DEF file. The BLOCKAGE statment has both the LAYER and the PLACEMENT statements defined.\nUpdate your DEF file to have either BLOCKAGE or PLACEMENT statement only." +6540 "The SPACING statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g" +6541 "The SPACING statement is defined in the LAYER statement,\nbut there is already either a SPACING statement or DESIGNRULEWIDTH statement has defined in the LAYER statement.\nUpdate your DEF file to have either SPACING statement or a DESIGNRULEWIDTH statement." +6542 "The defined BLOCKAGES COMPONENT statement has either COMPONENT, SLOTS, FILLS, PUSHDOWN or EXCEPTPGNET defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES COMPONENT statement per layer." +6543 "The defined BLOCKAGES PLACEMENT statement has either COMPONENT, PUSHDOWN, SOFT or PARTIAL defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES PLACEMENT statement." +6544 "A POLYGON statement is defined in the BLOCKAGE statement,\nbut it is not defined in the BLOCKAGE LAYER statement.\nUpdate your DEF file to either remove the POLYGON statement from the BLOCKAGE statement or\ndefine the POLYGON statement in a BLOCKAGE LAYER statement." +6545 "The NONDEFAULTRULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g." +6546 "The STYLES statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g" +6547 "The PLACEMENT SOFT is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6548 "The PARTIAL is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6549 "The EXCEPTPGNET is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6550 "The HALO SOFT is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6551 "The ROUTEHALO is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6552 "The FILLWIREOPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6553 "The LAYER OPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6554 "The VIA OPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6555 "The PORT in PINS is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g." +6556 "The PIN VIA statement is available in version 5.7 and later.\nHowever, your DEF file is defined with version %g." +6557 "The VIARULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", +6558 "The FREQUENCY statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g" +6559 "The ROWCOL statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement." +6560 "The ORIGIN statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement." +6561 " The OFFSET statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement." +6562 "The PATTERN statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement." +6563 "The TYPE statement already exists. It has been defined in the REGION statement." +6564 "POLYGON statement in FILLS LAYER is a version 5.6 and later syntax.\nYour def file is defined with version %g", +7000 "The specified string has exceeded 4096 characters. The extra characters will be truncated. Specify a string less than or equal to 4096 characters." +7010 "The PropName %s is not defined for %s." +7011 "The NAMESCASESENSITIVE statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement." +7012 "No VERSION statement found, using the default value %2g." +7013 "The DEF file is invalid if NAMESCASESENSITIVE is undefined.\nNAMESCASESENSITIVE is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the NAMESCASESENSITIVE statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual." +7014 "The DEF file is invalid if BUSBITCHARS is undefined.\nBUSBITCHARS is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the BUSBITCHARS statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual." +7015 "The DEF file is invalid if DIVIDERCHAR is undefined.\nDIVIDERCHAR is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the DIVIDERCHAR statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual." +7016 "DESIGN is a mandatory statement in the DEF file. Ensure that it exists in the file." +7017 "The DEFAULTCAP statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement." +7018 "The DO statement in the ROW statement with the name %s has invalid syntax.\nThe valid syntax is \"DO numX BY 1 STEP spaceX 0 | DO 1 BY numY STEP 0 spaceY\".\nSpecify the valid syntax and try again." +7019 "The PATTERNNAME statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement." +7020 "The REGION pt pt statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement." +7021 "The FOREIGN statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement." +7022 "In the COMPONENT UNPLACED statement, the point and orient are invalid in version 5.4 and later.\nThe DEF parser will ignore this statement." +7023 "The SPECIAL NET statement, with type %s, does not have any net statement defined.\nThe DEF parser will ignore this statement." +7024 "The ESTCAP statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement." +7025 "The SPECIAL NET SHIELD statement, does not have any shield net statement defined.\nThe DEF parser will ignore this statement." +7026 "The WIDTH statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement." +7027 "The GROUP REGION pt pt statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement." +7028 "The GROUP SOFT MAXX statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement." +7029 "The GROUP SOFT MAXY statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement." +7030 "The GROUP SOFT MAXHALFPERIMETER statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement." +7031 "The ASSERTIONS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement." +7032 "The CONSTRAINTS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement." +7035 "The IOTIMINGS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement." +7500 "Unable to open the file defRWarning.log in %s.\nWarning messages will not be written out in the log file.\nCheck if you have write permission on the directory." +8000 "The data still exists after the END DESIGN statement. The DEF parser will ignore this data." +8500 "Unable to open the file defRWarning.log in %s.\nInfo messages will not be written out in the log file.\nCheck if you have write permission on the directory." +9000 "The DEF writer has detected that the function defwInitCbk has already been called and you are trying to call defwInit.\nOnly defwInitCbk or defwInit can be called but not both.\nUpdate your program and then try again." +9001 "The DEF writer has detected that the function defwInit has already been called and you are trying to call defwInitCbk.\nOnly defwInitCbk or defwInit can be called but not both.\nUpdate your program and then try again." +9010 "The function defwWrite is called before the function defwInitCbk.\nYou need to call defwInitCbk before calling any other functions.\nUpdate your program and then try again." +9011 "You program has called the function defwInit to initialize the writer.\nIf you want to use the callback option you need to use the function defwInitCbk." +9012 "You are calling the function defwPrintUnusedCallbacks but you did call the function defwSetRegisterUnusedCallbacks which is required before you can call defwPrintUnusedCallbacks." diff --git a/lefdef/src/def/def/def.tab.h b/lefdef/src/def/def/def.tab.h new file mode 100644 index 00000000..4e383dea --- /dev/null +++ b/lefdef/src/def/def/def.tab.h @@ -0,0 +1,337 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +#ifndef YY_DEFYY_DEF_TAB_HPP_INCLUDED +# define YY_DEFYY_DEF_TAB_HPP_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int defyydebug; +#endif + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + QSTRING = 258, + T_STRING = 259, + SITE_PATTERN = 260, + NUMBER = 261, + K_HISTORY = 262, + K_NAMESCASESENSITIVE = 263, + K_DESIGN = 264, + K_VIAS = 265, + K_TECH = 266, + K_UNITS = 267, + K_ARRAY = 268, + K_FLOORPLAN = 269, + K_SITE = 270, + K_CANPLACE = 271, + K_CANNOTOCCUPY = 272, + K_DIEAREA = 273, + K_PINS = 274, + K_DEFAULTCAP = 275, + K_MINPINS = 276, + K_WIRECAP = 277, + K_TRACKS = 278, + K_GCELLGRID = 279, + K_DO = 280, + K_BY = 281, + K_STEP = 282, + K_LAYER = 283, + K_ROW = 284, + K_RECT = 285, + K_COMPS = 286, + K_COMP_GEN = 287, + K_SOURCE = 288, + K_WEIGHT = 289, + K_EEQMASTER = 290, + K_FIXED = 291, + K_COVER = 292, + K_UNPLACED = 293, + K_PLACED = 294, + K_FOREIGN = 295, + K_REGION = 296, + K_REGIONS = 297, + K_NETS = 298, + K_START_NET = 299, + K_MUSTJOIN = 300, + K_ORIGINAL = 301, + K_USE = 302, + K_STYLE = 303, + K_PATTERN = 304, + K_PATTERNNAME = 305, + K_ESTCAP = 306, + K_ROUTED = 307, + K_NEW = 308, + K_SNETS = 309, + K_SHAPE = 310, + K_WIDTH = 311, + K_VOLTAGE = 312, + K_SPACING = 313, + K_NONDEFAULTRULE = 314, + K_NONDEFAULTRULES = 315, + K_N = 316, + K_S = 317, + K_E = 318, + K_W = 319, + K_FN = 320, + K_FE = 321, + K_FS = 322, + K_FW = 323, + K_GROUPS = 324, + K_GROUP = 325, + K_SOFT = 326, + K_MAXX = 327, + K_MAXY = 328, + K_MAXHALFPERIMETER = 329, + K_CONSTRAINTS = 330, + K_NET = 331, + K_PATH = 332, + K_SUM = 333, + K_DIFF = 334, + K_SCANCHAINS = 335, + K_START = 336, + K_FLOATING = 337, + K_ORDERED = 338, + K_STOP = 339, + K_IN = 340, + K_OUT = 341, + K_RISEMIN = 342, + K_RISEMAX = 343, + K_FALLMIN = 344, + K_FALLMAX = 345, + K_WIREDLOGIC = 346, + K_MAXDIST = 347, + K_ASSERTIONS = 348, + K_DISTANCE = 349, + K_MICRONS = 350, + K_END = 351, + K_IOTIMINGS = 352, + K_RISE = 353, + K_FALL = 354, + K_VARIABLE = 355, + K_SLEWRATE = 356, + K_CAPACITANCE = 357, + K_DRIVECELL = 358, + K_FROMPIN = 359, + K_TOPIN = 360, + K_PARALLEL = 361, + K_TIMINGDISABLES = 362, + K_THRUPIN = 363, + K_MACRO = 364, + K_PARTITIONS = 365, + K_TURNOFF = 366, + K_FROMCLOCKPIN = 367, + K_FROMCOMPPIN = 368, + K_FROMIOPIN = 369, + K_TOCLOCKPIN = 370, + K_TOCOMPPIN = 371, + K_TOIOPIN = 372, + K_SETUPRISE = 373, + K_SETUPFALL = 374, + K_HOLDRISE = 375, + K_HOLDFALL = 376, + K_VPIN = 377, + K_SUBNET = 378, + K_XTALK = 379, + K_PIN = 380, + K_SYNTHESIZED = 381, + K_DEFINE = 382, + K_DEFINES = 383, + K_DEFINEB = 384, + K_IF = 385, + K_THEN = 386, + K_ELSE = 387, + K_FALSE = 388, + K_TRUE = 389, + K_EQ = 390, + K_NE = 391, + K_LE = 392, + K_LT = 393, + K_GE = 394, + K_GT = 395, + K_OR = 396, + K_AND = 397, + K_NOT = 398, + K_SPECIAL = 399, + K_DIRECTION = 400, + K_RANGE = 401, + K_FPC = 402, + K_HORIZONTAL = 403, + K_VERTICAL = 404, + K_ALIGN = 405, + K_MIN = 406, + K_MAX = 407, + K_EQUAL = 408, + K_BOTTOMLEFT = 409, + K_TOPRIGHT = 410, + K_ROWS = 411, + K_TAPER = 412, + K_TAPERRULE = 413, + K_VERSION = 414, + K_DIVIDERCHAR = 415, + K_BUSBITCHARS = 416, + K_PROPERTYDEFINITIONS = 417, + K_STRING = 418, + K_REAL = 419, + K_INTEGER = 420, + K_PROPERTY = 421, + K_BEGINEXT = 422, + K_ENDEXT = 423, + K_NAMEMAPSTRING = 424, + K_ON = 425, + K_OFF = 426, + K_X = 427, + K_Y = 428, + K_COMPONENT = 429, + K_MASK = 430, + K_MASKSHIFT = 431, + K_COMPSMASKSHIFT = 432, + K_SAMEMASK = 433, + K_PINPROPERTIES = 434, + K_TEST = 435, + K_COMMONSCANPINS = 436, + K_SNET = 437, + K_COMPONENTPIN = 438, + K_REENTRANTPATHS = 439, + K_SHIELD = 440, + K_SHIELDNET = 441, + K_NOSHIELD = 442, + K_VIRTUAL = 443, + K_ANTENNAPINPARTIALMETALAREA = 444, + K_ANTENNAPINPARTIALMETALSIDEAREA = 445, + K_ANTENNAPINGATEAREA = 446, + K_ANTENNAPINDIFFAREA = 447, + K_ANTENNAPINMAXAREACAR = 448, + K_ANTENNAPINMAXSIDEAREACAR = 449, + K_ANTENNAPINPARTIALCUTAREA = 450, + K_ANTENNAPINMAXCUTCAR = 451, + K_SIGNAL = 452, + K_POWER = 453, + K_GROUND = 454, + K_CLOCK = 455, + K_TIEOFF = 456, + K_ANALOG = 457, + K_SCAN = 458, + K_RESET = 459, + K_RING = 460, + K_STRIPE = 461, + K_FOLLOWPIN = 462, + K_IOWIRE = 463, + K_COREWIRE = 464, + K_BLOCKWIRE = 465, + K_FILLWIRE = 466, + K_BLOCKAGEWIRE = 467, + K_PADRING = 468, + K_BLOCKRING = 469, + K_BLOCKAGES = 470, + K_PLACEMENT = 471, + K_SLOTS = 472, + K_FILLS = 473, + K_PUSHDOWN = 474, + K_NETLIST = 475, + K_DIST = 476, + K_USER = 477, + K_TIMING = 478, + K_BALANCED = 479, + K_STEINER = 480, + K_TRUNK = 481, + K_FIXEDBUMP = 482, + K_FENCE = 483, + K_FREQUENCY = 484, + K_GUIDE = 485, + K_MAXBITS = 486, + K_PARTITION = 487, + K_TYPE = 488, + K_ANTENNAMODEL = 489, + K_DRCFILL = 490, + K_OXIDE1 = 491, + K_OXIDE2 = 492, + K_OXIDE3 = 493, + K_OXIDE4 = 494, + K_CUTSIZE = 495, + K_CUTSPACING = 496, + K_DESIGNRULEWIDTH = 497, + K_DIAGWIDTH = 498, + K_ENCLOSURE = 499, + K_HALO = 500, + K_GROUNDSENSITIVITY = 501, + K_HARDSPACING = 502, + K_LAYERS = 503, + K_MINCUTS = 504, + K_NETEXPR = 505, + K_OFFSET = 506, + K_ORIGIN = 507, + K_ROWCOL = 508, + K_STYLES = 509, + K_POLYGON = 510, + K_PORT = 511, + K_SUPPLYSENSITIVITY = 512, + K_VIA = 513, + K_VIARULE = 514, + K_WIREEXT = 515, + K_EXCEPTPGNET = 516, + K_FILLWIREOPC = 517, + K_OPC = 518, + K_PARTIAL = 519, + K_ROUTEHALO = 520 + }; +#endif + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int defyyparse (void *YYPARSE_PARAM); +#else +int defyyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int defyyparse (defrData *defData); +#else +int defyyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + +#endif /* !YY_DEFYY_DEF_TAB_HPP_INCLUDED */ diff --git a/lefdef/src/def/def/def.y b/lefdef/src/def/def/def.y new file mode 100644 index 00000000..992b489a --- /dev/null +++ b/lefdef/src/def/def/def.y @@ -0,0 +1,5189 @@ +//****************************************************************************** +//****************************************************************************** +// Copyright 2013-2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +//****************************************************************************** +// +// $Author: icftcm $ +// $Revision: #2 $ +// $Date: 2017/06/07 $ +// $State: $ +//**************************************************************************** + +// Error message number: +// 5000 - def reader, defrReader.cpp +// 5500 - lex.cpph, yyerror +// 6000 - def parser, error, lex.cpph, def.y (CALLBACK & CHKERR) +// 6010 - defiBlockage.cpp +// 6020 - defiComponent.cpp +// 6030 - defiFPC.cpp +// 6040 - defiFill.cpp +// 6050 - defiGroup.cpp +// 6060 - defiIOTiming.cpp +// 6070 - defiMisc.cpp +// 6080 - defiNet.cpp +// 6090 - defiNonDefault.cpp +// 6100 - defiPartition.cpp +// 6110 - defiPinCap.cpp +// 6120 - defiPinProp.cpp +// 6130 - defiRegion.cpp +// 6140 - defiRowTrack.cpp +// 6150 - defiScanchain.cpp +// 6160 - defiSlot.cpp +// 6170 - defiTimingDisable.cpp +// 6180 - defiVia.cpp +// 6500 - def parser, error, def.y +%pure-parser +%lex-param {defrData *defData} +%parse-param {defrData *defData} + + +%{ +#include +#include +#include "defrReader.hpp" +#include "defiUser.hpp" +#include "defrCallBacks.hpp" +#include "lex.h" + +#define DEF_MAX_INT 2147483647 +#define YYDEBUG 1 // this is temp fix for pcr 755132 +// TX_DIR:TRANSLATION ON + + +#include "defrData.hpp" +#include "defrSettings.hpp" +#include "defrCallBacks.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Macro to describe how we handle a callback. +// If the function was set then call it. +// If the function returns non zero then there was an error +// so call the error routine and exit. +// +#define CALLBACK(func, typ, data) \ + if (!defData->errors) {\ + if (func) { \ + if ((defData->defRetVal = (*func)(typ, data, defData->session->UserData)) == PARSE_OK) { \ + } else if (defData->defRetVal == STOP_PARSE) { \ + return defData->defRetVal; \ + } else { \ + defData->defError(6010, "An error has been reported in callback."); \ + return defData->defRetVal; \ + } \ + } \ + } + +#define CHKERR() \ + if (defData->checkErrors()) { \ + return 1; \ + } + +#define CHKPROPTYPE(propType, propName, name) \ + if (propType == 'N') { \ + defData->warningMsg = (char*)malloc(strlen(propName)+strlen(name)+40); \ + sprintf(defData->warningMsg, "The PropName %s is not defined for %s.", \ + propName, name); \ + defData->defWarning(7010, defData->warningMsg); \ + free(defData->warningMsg); \ + } + +int yylex(YYSTYPE *pYylval, defrData *defData) +{ + return defData->defyylex(pYylval); +} + + +void yyerror(defrData *defData, const char *s) +{ + return defData->defyyerror(s); +} + + + + +#define FIXED 1 +#define COVER 2 +#define PLACED 3 +#define UNPLACED 4 +%} + + + + + + + + + + +%token QSTRING +%token T_STRING SITE_PATTERN +%token NUMBER +%token K_HISTORY K_NAMESCASESENSITIVE +%token K_DESIGN K_VIAS K_TECH K_UNITS K_ARRAY K_FLOORPLAN +%token K_SITE K_CANPLACE K_CANNOTOCCUPY K_DIEAREA +%token K_PINS +%token K_DEFAULTCAP K_MINPINS K_WIRECAP +%token K_TRACKS K_GCELLGRID +%token K_DO K_BY K_STEP K_LAYER K_ROW K_RECT +%token K_COMPS K_COMP_GEN K_SOURCE K_WEIGHT K_EEQMASTER +%token K_FIXED K_COVER K_UNPLACED K_PLACED K_FOREIGN K_REGION +%token K_REGIONS +%token K_NETS K_START_NET K_MUSTJOIN K_ORIGINAL K_USE K_STYLE +%token K_PATTERN K_PATTERNNAME K_ESTCAP K_ROUTED K_NEW +%token K_SNETS K_SHAPE K_WIDTH K_VOLTAGE K_SPACING K_NONDEFAULTRULE +%token K_NONDEFAULTRULES +%token K_N K_S K_E K_W K_FN K_FE K_FS K_FW +%token K_GROUPS K_GROUP K_SOFT K_MAXX K_MAXY K_MAXHALFPERIMETER +%token K_CONSTRAINTS K_NET K_PATH K_SUM K_DIFF +%token K_SCANCHAINS K_START K_FLOATING K_ORDERED K_STOP K_IN K_OUT +%token K_RISEMIN K_RISEMAX K_FALLMIN K_FALLMAX K_WIREDLOGIC +%token K_MAXDIST +%token K_ASSERTIONS +%token K_DISTANCE K_MICRONS +%token K_END +%token K_IOTIMINGS K_RISE K_FALL K_VARIABLE K_SLEWRATE K_CAPACITANCE +%token K_DRIVECELL K_FROMPIN K_TOPIN K_PARALLEL +%token K_TIMINGDISABLES K_THRUPIN K_MACRO +%token K_PARTITIONS K_TURNOFF +%token K_FROMCLOCKPIN K_FROMCOMPPIN K_FROMIOPIN +%token K_TOCLOCKPIN K_TOCOMPPIN K_TOIOPIN +%token K_SETUPRISE K_SETUPFALL K_HOLDRISE K_HOLDFALL +%token K_VPIN K_SUBNET K_XTALK K_PIN K_SYNTHESIZED +%token K_DEFINE K_DEFINES K_DEFINEB K_IF K_THEN K_ELSE K_FALSE K_TRUE +%token K_EQ K_NE K_LE K_LT K_GE K_GT K_OR K_AND K_NOT +%token K_SPECIAL K_DIRECTION K_RANGE +%token K_FPC K_HORIZONTAL K_VERTICAL K_ALIGN K_MIN K_MAX K_EQUAL +%token K_BOTTOMLEFT K_TOPRIGHT K_ROWS K_TAPER K_TAPERRULE +%token K_VERSION K_DIVIDERCHAR K_BUSBITCHARS +%token K_PROPERTYDEFINITIONS K_STRING K_REAL K_INTEGER K_PROPERTY +%token K_BEGINEXT K_ENDEXT K_NAMEMAPSTRING K_ON K_OFF K_X K_Y +%token K_COMPONENT K_MASK K_MASKSHIFT K_COMPSMASKSHIFT K_SAMEMASK +%token K_PINPROPERTIES K_TEST +%token K_COMMONSCANPINS K_SNET K_COMPONENTPIN K_REENTRANTPATHS +%token K_SHIELD K_SHIELDNET K_NOSHIELD K_VIRTUAL +%token K_ANTENNAPINPARTIALMETALAREA K_ANTENNAPINPARTIALMETALSIDEAREA +%token K_ANTENNAPINGATEAREA K_ANTENNAPINDIFFAREA +%token K_ANTENNAPINMAXAREACAR K_ANTENNAPINMAXSIDEAREACAR +%token K_ANTENNAPINPARTIALCUTAREA K_ANTENNAPINMAXCUTCAR +%token K_SIGNAL K_POWER K_GROUND K_CLOCK K_TIEOFF K_ANALOG K_SCAN +%token K_RESET K_RING K_STRIPE K_FOLLOWPIN K_IOWIRE K_COREWIRE +%token K_BLOCKWIRE K_FILLWIRE K_BLOCKAGEWIRE K_PADRING K_BLOCKRING +%token K_BLOCKAGES K_PLACEMENT K_SLOTS K_FILLS K_PUSHDOWN +%token K_NETLIST K_DIST K_USER K_TIMING K_BALANCED K_STEINER K_TRUNK +%token K_FIXEDBUMP K_FENCE K_FREQUENCY K_GUIDE K_MAXBITS +%token K_PARTITION K_TYPE K_ANTENNAMODEL K_DRCFILL +%token K_OXIDE1 K_OXIDE2 K_OXIDE3 K_OXIDE4 +%token K_CUTSIZE K_CUTSPACING K_DESIGNRULEWIDTH K_DIAGWIDTH +%token K_ENCLOSURE K_HALO K_GROUNDSENSITIVITY +%token K_HARDSPACING K_LAYERS K_MINCUTS K_NETEXPR +%token K_OFFSET K_ORIGIN K_ROWCOL K_STYLES +%token K_POLYGON K_PORT K_SUPPLYSENSITIVITY K_VIA K_VIARULE K_WIREEXT +%token K_EXCEPTPGNET K_FILLWIREOPC K_OPC K_PARTIAL K_ROUTEHALO +%type pt opt_paren +%type comp_net_list subnet_opt_syn +%type orient pin_via_mask_opt +%type placement_status +%type net_type subnet_type track_start use_type shape_type source_type +%type pattern_type netsource_type +%type path paths new_path +%type risefall opt_pin opt_pattern pin_layer_opt +%type vpin_status opt_plus track_type region_type +%type h_or_v turnoff_setup turnoff_hold +%type conn_opt partition_maxbits same_mask mask orient_pt + +%% + +def_file: version_stmt case_sens_stmt rules end_design + ; + +version_stmt: // empty + | K_VERSION { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING ';' + { + defData->VersionNum = defrData::convert_defname2num($3); + if (defData->VersionNum > CURRENT_VERSION) { + char temp[300]; + sprintf(temp, + "The execution has been stopped because the DEF parser %.1f does not support DEF file with version %s.\nUpdate your DEF file to version 5.8 or earlier.", + CURRENT_VERSION, $3); + defData->defError(6503, temp); + return 1; + } + if (defData->callbacks->VersionStrCbk) { + CALLBACK(defData->callbacks->VersionStrCbk, defrVersionStrCbkType, $3); + } else if (defData->callbacks->VersionCbk) { + CALLBACK(defData->callbacks->VersionCbk, defrVersionCbkType, defData->VersionNum); + } + if (defData->VersionNum > 5.3 && defData->VersionNum < 5.4) + defData->defIgnoreVersion = 1; + if (defData->VersionNum < 5.6) // default to false before 5.6 + defData->names_case_sensitive = defData->session->reader_case_sensitive; + else + defData->names_case_sensitive = 1; + defData->hasVer = 1; + defData->doneDesign = 0; + } + +case_sens_stmt: // empty + | K_NAMESCASESENSITIVE K_ON ';' + { + if (defData->VersionNum < 5.6) { + defData->names_case_sensitive = 1; + if (defData->callbacks->CaseSensitiveCbk) + CALLBACK(defData->callbacks->CaseSensitiveCbk, defrCaseSensitiveCbkType, + defData->names_case_sensitive); + defData->hasNameCase = 1; + } else + if (defData->callbacks->CaseSensitiveCbk) // write error only if cbk is set + if (defData->caseSensitiveWarnings++ < defData->settings->CaseSensitiveWarnings) + defData->defWarning(7011, "The NAMESCASESENSITIVE statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement."); + } + | K_NAMESCASESENSITIVE K_OFF ';' + { + if (defData->VersionNum < 5.6) { + defData->names_case_sensitive = 0; + if (defData->callbacks->CaseSensitiveCbk) + CALLBACK(defData->callbacks->CaseSensitiveCbk, defrCaseSensitiveCbkType, + defData->names_case_sensitive); + defData->hasNameCase = 1; + } else { + if (defData->callbacks->CaseSensitiveCbk) { // write error only if cbk is set + if (defData->caseSensitiveWarnings++ < defData->settings->CaseSensitiveWarnings) { + defData->defError(6504, "Def parser version 5.7 and later does not support NAMESCASESENSITIVE OFF.\nEither remove this optional construct or set it to ON."); + CHKERR(); + } + } + } + } + +rules: // empty + | rules rule + | error + ; + +rule: design_section | assertions_section | blockage_section | comps_section + | constraint_section | extension_section | fill_section | comps_maskShift_section + | floorplan_contraints_section | groups_section | iotiming_section + | nets_section | nondefaultrule_section | partitions_section + | pin_props_section | regions_section | scanchains_section + | slot_section | snets_section | styles_section | timingdisables_section + | via_section + ; + +design_section: array_name | bus_bit_chars | canplace | cannotoccupy | + design_name | die_area | divider_char | + floorplan_name | gcellgrid | history | + pin_cap_rule | pin_rule | prop_def_section | + row_rule | tech_name | tracks_rule | units + ; + + + +design_name: K_DESIGN {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING ';' + { + if (defData->callbacks->DesignCbk) + CALLBACK(defData->callbacks->DesignCbk, defrDesignStartCbkType, $3); + defData->hasDes = 1; + } + +end_design: K_END K_DESIGN + { + defData->doneDesign = 1; + if (defData->callbacks->DesignEndCbk) + CALLBACK(defData->callbacks->DesignEndCbk, defrDesignEndCbkType, 0); + // 11/16/2001 - pcr 408334 + // Return 1 if there is any defData->errors during parsing + if (defData->errors) + return 1; + + if (!defData->hasVer) { + char temp[300]; + sprintf(temp, "No VERSION statement found, using the default value %2g.", defData->VersionNum); + defData->defWarning(7012, temp); + } + if (!defData->hasNameCase && defData->VersionNum < 5.6) + defData->defWarning(7013, "The DEF file is invalid if NAMESCASESENSITIVE is undefined.\nNAMESCASESENSITIVE is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the NAMESCASESENSITIVE statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual."); + if (!defData->hasBusBit && defData->VersionNum < 5.6) + defData->defWarning(7014, "The DEF file is invalid if BUSBITCHARS is undefined.\nBUSBITCHARS is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the BUSBITCHARS statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual."); + if (!defData->hasDivChar && defData->VersionNum < 5.6) + defData->defWarning(7015, "The DEF file is invalid if DIVIDERCHAR is undefined.\nDIVIDERCHAR is a mandatory statement in the DEF file with version 5.6 and earlier.\nTo define the DIVIDERCHAR statement, refer to the LEF/DEF 5.5 and earlier Language Reference manual."); + if (!defData->hasDes) + defData->defWarning(7016, "DESIGN is a mandatory statement in the DEF file. Ensure that it exists in the file."); + } + +tech_name: K_TECH { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING ';' + { + if (defData->callbacks->TechnologyCbk) + CALLBACK(defData->callbacks->TechnologyCbk, defrTechNameCbkType, $3); + } + +array_name: K_ARRAY {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING ';' + { + if (defData->callbacks->ArrayNameCbk) + CALLBACK(defData->callbacks->ArrayNameCbk, defrArrayNameCbkType, $3); + } + +floorplan_name: K_FLOORPLAN { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING ';' + { + if (defData->callbacks->FloorPlanNameCbk) + CALLBACK(defData->callbacks->FloorPlanNameCbk, defrFloorPlanNameCbkType, $3); + } + +history: K_HISTORY + { + if (defData->callbacks->HistoryCbk) + CALLBACK(defData->callbacks->HistoryCbk, defrHistoryCbkType, &defData->History_text[0]); + } + +prop_def_section: K_PROPERTYDEFINITIONS + { + if (defData->callbacks->PropDefStartCbk) + CALLBACK(defData->callbacks->PropDefStartCbk, defrPropDefStartCbkType, 0); + } + property_defs K_END K_PROPERTYDEFINITIONS + { + if (defData->callbacks->PropDefEndCbk) + CALLBACK(defData->callbacks->PropDefEndCbk, defrPropDefEndCbkType, 0); + defData->real_num = 0; // just want to make sure it is reset + } + +property_defs: // empty + | property_defs property_def + { } + +property_def: K_DESIGN {defData->dumb_mode = 1; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("design", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->DesignProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + | K_NET { defData->dumb_mode = 1 ; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("net", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->NetProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + | K_SNET { defData->dumb_mode = 1 ; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("specialnet", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->SNetProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + | K_REGION { defData->dumb_mode = 1 ; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("region", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->RegionProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + | K_GROUP { defData->dumb_mode = 1 ; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("group", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->GroupProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + | K_COMPONENT { defData->dumb_mode = 1 ; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("component", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->CompProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + | K_ROW { defData->dumb_mode = 1 ; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("row", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->RowProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + + | K_COMPONENTPIN + { defData->dumb_mode = 1 ; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("componentpin", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->CompPinProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + | K_NONDEFAULTRULE + { defData->dumb_mode = 1 ; defData->no_num = 1; defData->Prop.clear(); } + T_STRING property_type_and_val ';' + { + if (defData->VersionNum < 5.6) { + if (defData->nonDefaultWarnings++ < defData->settings->NonDefaultWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The NONDEFAULTRULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6505, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } else { + if (defData->callbacks->PropCbk) { + defData->Prop.setPropType("nondefaultrule", $3); + CALLBACK(defData->callbacks->PropCbk, defrPropCbkType, &defData->Prop); + } + defData->session->NDefProp.setPropType(defData->DEFCASE($3), defData->defPropDefType); + } + } + | error ';' { yyerrok; yyclearin;} + +property_type_and_val: K_INTEGER { defData->real_num = 0; } opt_range opt_num_val + { + if (defData->callbacks->PropCbk) defData->Prop.setPropInteger(); + defData->defPropDefType = 'I'; + } + | K_REAL { defData->real_num = 1; } opt_range opt_num_val + { + if (defData->callbacks->PropCbk) defData->Prop.setPropReal(); + defData->defPropDefType = 'R'; + defData->real_num = 0; + } + | K_STRING + { + if (defData->callbacks->PropCbk) defData->Prop.setPropString(); + defData->defPropDefType = 'S'; + } + | K_STRING QSTRING + { + if (defData->callbacks->PropCbk) defData->Prop.setPropQString($2); + defData->defPropDefType = 'Q'; + } + | K_NAMEMAPSTRING T_STRING + { + if (defData->callbacks->PropCbk) defData->Prop.setPropNameMapString($2); + defData->defPropDefType = 'S'; + } + +opt_num_val: // empty + | NUMBER + { if (defData->callbacks->PropCbk) defData->Prop.setNumber($1); } + +units: K_UNITS K_DISTANCE K_MICRONS NUMBER ';' + { + if (defData->callbacks->UnitsCbk) { + if (defData->defValidNum((int)$4)) + CALLBACK(defData->callbacks->UnitsCbk, defrUnitsCbkType, $4); + } + } + +divider_char: K_DIVIDERCHAR QSTRING ';' + { + if (defData->callbacks->DividerCbk) + CALLBACK(defData->callbacks->DividerCbk, defrDividerCbkType, $2); + defData->hasDivChar = 1; + } + +bus_bit_chars: K_BUSBITCHARS QSTRING ';' + { + if (defData->callbacks->BusBitCbk) + CALLBACK(defData->callbacks->BusBitCbk, defrBusBitCbkType, $2); + defData->hasBusBit = 1; + } + +canplace: K_CANPLACE {defData->dumb_mode = 1;defData->no_num = 1; } T_STRING NUMBER NUMBER + orient K_DO NUMBER K_BY NUMBER K_STEP NUMBER NUMBER ';' + { + if (defData->callbacks->CanplaceCbk) { + defData->Canplace.setName($3); + defData->Canplace.setLocation($4,$5); + defData->Canplace.setOrient($6); + defData->Canplace.setDo($8,$10,$12,$13); + CALLBACK(defData->callbacks->CanplaceCbk, defrCanplaceCbkType, + &(defData->Canplace)); + } + } +cannotoccupy: K_CANNOTOCCUPY {defData->dumb_mode = 1;defData->no_num = 1; } T_STRING NUMBER NUMBER + orient K_DO NUMBER K_BY NUMBER K_STEP NUMBER NUMBER ';' + { + if (defData->callbacks->CannotOccupyCbk) { + defData->CannotOccupy.setName($3); + defData->CannotOccupy.setLocation($4,$5); + defData->CannotOccupy.setOrient($6); + defData->CannotOccupy.setDo($8,$10,$12,$13); + CALLBACK(defData->callbacks->CannotOccupyCbk, defrCannotOccupyCbkType, + &(defData->CannotOccupy)); + } + } + +orient: K_N {$$ = 0;} + | K_W {$$ = 1;} + | K_S {$$ = 2;} + | K_E {$$ = 3;} + | K_FN {$$ = 4;} + | K_FW {$$ = 5;} + | K_FS {$$ = 6;} + | K_FE {$$ = 7;} + +die_area: K_DIEAREA + { + defData->Geometries.Reset(); + } + firstPt nextPt otherPts ';' + { + if (defData->callbacks->DieAreaCbk) { + defData->DieArea.addPoint(&defData->Geometries); + CALLBACK(defData->callbacks->DieAreaCbk, defrDieAreaCbkType, &(defData->DieArea)); + } + } + +// 8/31/2001 - This is obsolete in 5.4 +pin_cap_rule: start_def_cap pin_caps end_def_cap + { } + +start_def_cap: K_DEFAULTCAP NUMBER + { + if (defData->VersionNum < 5.4) { + if (defData->callbacks->DefaultCapCbk) + CALLBACK(defData->callbacks->DefaultCapCbk, defrDefaultCapCbkType, ROUND($2)); + } else { + if (defData->callbacks->DefaultCapCbk) // write error only if cbk is set + if (defData->defaultCapWarnings++ < defData->settings->DefaultCapWarnings) + defData->defWarning(7017, "The DEFAULTCAP statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement."); + } + } + +pin_caps: // empty + | pin_caps pin_cap + ; + +pin_cap: K_MINPINS NUMBER K_WIRECAP NUMBER ';' + { + if (defData->VersionNum < 5.4) { + if (defData->callbacks->PinCapCbk) { + defData->PinCap.setPin(ROUND($2)); + defData->PinCap.setCap($4); + CALLBACK(defData->callbacks->PinCapCbk, defrPinCapCbkType, &(defData->PinCap)); + } + } + } + +end_def_cap: K_END K_DEFAULTCAP + { } + +pin_rule: start_pins pins end_pins + { } + +start_pins: K_PINS NUMBER ';' + { + if (defData->callbacks->StartPinsCbk) + CALLBACK(defData->callbacks->StartPinsCbk, defrStartPinsCbkType, ROUND($2)); + } + +pins: // empty + | pins pin + ; + +pin: '-' {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING '+' K_NET + {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + defData->Pin.Setup($3, $7); + } + defData->hasPort = 0; + } + pin_options ';' + { + if (defData->callbacks->PinCbk) + CALLBACK(defData->callbacks->PinCbk, defrPinCbkType, &defData->Pin); + } + +pin_options: // empty + | pin_options pin_option + +pin_option: '+' K_SPECIAL + { + if (defData->callbacks->PinCbk) + defData->Pin.setSpecial(); + } + + | extension_stmt + { + if (defData->callbacks->PinExtCbk) + CALLBACK(defData->callbacks->PinExtCbk, defrPinExtCbkType, &defData->History_text[0]); + } + + | '+' K_DIRECTION T_STRING + { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.setDirection($3); + } + + | '+' K_NETEXPR QSTRING + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The NETEXPR statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6506, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.setNetExpr($3); + + } + } + + | '+' K_SUPPLYSENSITIVITY { defData->dumb_mode = 1; } T_STRING + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The SUPPLYSENSITIVITY statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6507, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.setSupplySens($4); + } + } + + | '+' K_GROUNDSENSITIVITY { defData->dumb_mode = 1; } T_STRING + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The GROUNDSENSITIVITY statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6508, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.setGroundSens($4); + } + } + + | '+' K_USE use_type + { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) defData->Pin.setUse($3); + } + | '+' K_PORT // 5.7 + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The PORT in PINS is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6555, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addPort(); + defData->hasPort = 1; + } + } + + | '+' K_LAYER { defData->dumb_mode = 1; } T_STRING + { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortLayer($4); + else + defData->Pin.addLayer($4); + } + } + pin_layer_mask_opt pin_layer_spacing_opt pt pt + { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortLayerPts($8.x, $8.y, $9.x, $9.y); + else + defData->Pin.addLayerPts($8.x, $8.y, $9.x, $9.y); + } + } + + | '+' K_POLYGON { defData->dumb_mode = 1; } T_STRING + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The POLYGON statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6509, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortPolygon($4); + else + defData->Pin.addPolygon($4); + } + } + + defData->Geometries.Reset(); + } + pin_poly_mask_opt pin_poly_spacing_opt firstPt nextPt nextPt otherPts + { + if (defData->VersionNum >= 5.6) { // only add if 5.6 or beyond + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortPolygonPts(&defData->Geometries); + else + defData->Pin.addPolygonPts(&defData->Geometries); + } + } + } + | '+' K_VIA { defData->dumb_mode = 1; } T_STRING pin_via_mask_opt '(' NUMBER NUMBER ')' // 5.7 + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The PIN VIA statement is available in version 5.7 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6556, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortVia($4, (int)$7, + (int)$8, $5); + else + defData->Pin.addVia($4, (int)$7, + (int)$8, $5); + } + } + } + + | placement_status pt orient + { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) { + defData->Pin.setPortPlacement($1, $2.x, $2.y, $3); + defData->hasPort = 0; + } else + defData->Pin.setPlacement($1, $2.x, $2.y, $3); + } + } + + // The following is 5.4 syntax + | '+' K_ANTENNAPINPARTIALMETALAREA NUMBER pin_layer_opt + { + if (defData->VersionNum <= 5.3) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAPINPARTIALMETALAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6510, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAPinPartialMetalArea((int)$3, $4); + } + | '+' K_ANTENNAPINPARTIALMETALSIDEAREA NUMBER pin_layer_opt + { + if (defData->VersionNum <= 5.3) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAPINPARTIALMETALSIDEAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6511, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAPinPartialMetalSideArea((int)$3, $4); + } + | '+' K_ANTENNAPINGATEAREA NUMBER pin_layer_opt + { + if (defData->VersionNum <= 5.3) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAPINGATEAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6512, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAPinGateArea((int)$3, $4); + } + | '+' K_ANTENNAPINDIFFAREA NUMBER pin_layer_opt + { + if (defData->VersionNum <= 5.3) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAPINDIFFAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6513, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAPinDiffArea((int)$3, $4); + } + | '+' K_ANTENNAPINMAXAREACAR NUMBER K_LAYER {defData->dumb_mode=1;} T_STRING + { + if (defData->VersionNum <= 5.3) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAPINMAXAREACAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6514, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAPinMaxAreaCar((int)$3, $6); + } + | '+' K_ANTENNAPINMAXSIDEAREACAR NUMBER K_LAYER {defData->dumb_mode=1;} + T_STRING + { + if (defData->VersionNum <= 5.3) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAPINMAXSIDEAREACAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6515, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAPinMaxSideAreaCar((int)$3, $6); + } + | '+' K_ANTENNAPINPARTIALCUTAREA NUMBER pin_layer_opt + { + if (defData->VersionNum <= 5.3) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAPINPARTIALCUTAREA statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6516, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAPinPartialCutArea((int)$3, $4); + } + | '+' K_ANTENNAPINMAXCUTCAR NUMBER K_LAYER {defData->dumb_mode=1;} T_STRING + { + if (defData->VersionNum <= 5.3) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAPINMAXCUTCAR statement is available in version 5.4 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6517, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAPinMaxCutCar((int)$3, $6); + } + | '+' K_ANTENNAMODEL pin_oxide + { // 5.5 syntax + if (defData->VersionNum < 5.5) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The ANTENNAMODEL statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6518, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + } + +pin_layer_mask_opt: // empty + | K_MASK NUMBER + { + if (defData->validateMaskInput((int)$2, defData->pinWarnings, defData->settings->PinWarnings)) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortLayerMask((int)$2); + else + defData->Pin.addLayerMask((int)$2); + } + } + } + +pin_via_mask_opt: + // empty + { $$ = 0; } + | K_MASK NUMBER + { + if (defData->validateMaskInput((int)$2, defData->pinWarnings, defData->settings->PinWarnings)) { + $$ = $2; + } + } + +pin_poly_mask_opt: // empty + | K_MASK NUMBER + { + if (defData->validateMaskInput((int)$2, defData->pinWarnings, defData->settings->PinWarnings)) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortPolyMask((int)$2); + else + defData->Pin.addPolyMask((int)$2); + } + } + } + + +pin_layer_spacing_opt: // empty + | K_SPACING NUMBER + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The SPACING statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6519, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortLayerSpacing((int)$2); + else + defData->Pin.addLayerSpacing((int)$2); + } + } + } + | K_DESIGNRULEWIDTH NUMBER + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "DESIGNRULEWIDTH statement is a version 5.6 and later syntax.\nYour def file is defined with version %g", defData->VersionNum); + defData->defError(6520, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortLayerDesignRuleWidth((int)$2); + else + defData->Pin.addLayerDesignRuleWidth((int)$2); + } + } + } + +pin_poly_spacing_opt: // empty + | K_SPACING NUMBER + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "SPACING statement is a version 5.6 and later syntax.\nYour def file is defined with version %g", defData->VersionNum); + defData->defError(6521, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortPolySpacing((int)$2); + else + defData->Pin.addPolySpacing((int)$2); + } + } + } + | K_DESIGNRULEWIDTH NUMBER + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if ((defData->pinWarnings++ < defData->settings->PinWarnings) && + (defData->pinWarnings++ < defData->settings->PinExtWarnings)) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The DESIGNRULEWIDTH statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6520, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) { + if (defData->hasPort) + defData->Pin.addPortPolyDesignRuleWidth((int)$2); + else + defData->Pin.addPolyDesignRuleWidth((int)$2); + } + } + } + +pin_oxide: K_OXIDE1 + { defData->aOxide = 1; + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAntennaModel(defData->aOxide); + } + | K_OXIDE2 + { defData->aOxide = 2; + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAntennaModel(defData->aOxide); + } + | K_OXIDE3 + { defData->aOxide = 3; + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAntennaModel(defData->aOxide); + } + | K_OXIDE4 + { defData->aOxide = 4; + if (defData->callbacks->PinCbk || defData->callbacks->PinExtCbk) + defData->Pin.addAntennaModel(defData->aOxide); + } + +use_type: K_SIGNAL + { $$ = (char*)"SIGNAL"; } + | K_POWER + { $$ = (char*)"POWER"; } + | K_GROUND + { $$ = (char*)"GROUND"; } + | K_CLOCK + { $$ = (char*)"CLOCK"; } + | K_TIEOFF + { $$ = (char*)"TIEOFF"; } + | K_ANALOG + { $$ = (char*)"ANALOG"; } + | K_SCAN + { $$ = (char*)"SCAN"; } + | K_RESET + { $$ = (char*)"RESET"; } + +pin_layer_opt: + // empty + { $$ = (char*)""; } + | K_LAYER {defData->dumb_mode=1;} T_STRING + { $$ = $3; } + +end_pins: K_END K_PINS + { + if (defData->callbacks->PinEndCbk) + CALLBACK(defData->callbacks->PinEndCbk, defrPinEndCbkType, 0); + } + +row_rule: K_ROW {defData->dumb_mode = 2; defData->no_num = 2; } T_STRING T_STRING NUMBER NUMBER + orient + { + if (defData->callbacks->RowCbk) { + defData->rowName = $3; + defData->Row.setup($3, $4, $5, $6, $7); + } + } + row_do_option + row_options ';' + { + if (defData->callbacks->RowCbk) + CALLBACK(defData->callbacks->RowCbk, defrRowCbkType, &defData->Row); + } + +row_do_option: // empty + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->RowCbk) { + if (defData->rowWarnings++ < defData->settings->RowWarnings) { + defData->defError(6523, "Invalid ROW statement defined in the DEF file. The DO statement which is required in the ROW statement is not defined.\nUpdate your DEF file with a DO statement."); + CHKERR(); + } + } + } + } + | K_DO NUMBER K_BY NUMBER row_step_option + { + // 06/05/2002 - pcr 448455 + // Check for 1 and 0 in the correct position + // 07/26/2002 - Commented out due to pcr 459218 + if (defData->hasDoStep) { + // 04/29/2004 - pcr 695535 + // changed the testing + if ((($4 == 1) && (defData->yStep == 0)) || + (($2 == 1) && (defData->xStep == 0))) { + // do nothing + } else + if (defData->VersionNum < 5.6) { + if (defData->callbacks->RowCbk) { + if (defData->rowWarnings++ < defData->settings->RowWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf(defData->defMsg, + "The DO statement in the ROW statement with the name %s has invalid syntax.\nThe valid syntax is \"DO numX BY 1 STEP spaceX 0 | DO 1 BY numY STEP 0 spaceY\".\nSpecify the valid syntax and try again.", defData->rowName); + defData->defWarning(7018, defData->defMsg); + free(defData->defMsg); + } + } + } + } + // pcr 459218 - Error if at least numX or numY does not equal 1 + if (($2 != 1) && ($4 != 1)) { + if (defData->callbacks->RowCbk) { + if (defData->rowWarnings++ < defData->settings->RowWarnings) { + defData->defError(6524, "Invalid syntax specified. The valid syntax is either \"DO 1 BY num or DO num BY 1\". Specify the valid syntax and try again."); + CHKERR(); + } + } + } + if (defData->callbacks->RowCbk) + defData->Row.setDo(ROUND($2), ROUND($4), defData->xStep, defData->yStep); + } + +row_step_option: // empty + { + defData->hasDoStep = 0; + } + | K_STEP NUMBER NUMBER + { + defData->hasDoStep = 1; + defData->Row.setHasDoStep(); + defData->xStep = $2; + defData->yStep = $3; + } + +row_options: // empty + | row_options row_option + ; + +row_option : '+' K_PROPERTY {defData->dumb_mode = DEF_MAX_INT; } + row_prop_list + { defData->dumb_mode = 0; } + +row_prop_list : // empty + | row_prop_list row_prop + ; + +row_prop : T_STRING NUMBER + { + if (defData->callbacks->RowCbk) { + char propTp; + char* str = defData->ringCopy(" "); + propTp = defData->session->RowProp.propType($1); + CHKPROPTYPE(propTp, $1, "ROW"); + // For backword compatibility, also set the string value + sprintf(str, "%g", $2); + defData->Row.addNumProperty($1, $2, str, propTp); + } + } + | T_STRING QSTRING + { + if (defData->callbacks->RowCbk) { + char propTp; + propTp = defData->session->RowProp.propType($1); + CHKPROPTYPE(propTp, $1, "ROW"); + defData->Row.addProperty($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (defData->callbacks->RowCbk) { + char propTp; + propTp = defData->session->RowProp.propType($1); + CHKPROPTYPE(propTp, $1, "ROW"); + defData->Row.addProperty($1, $2, propTp); + } + } + +tracks_rule: track_start NUMBER + { + if (defData->callbacks->TrackCbk) { + defData->Track.setup($1); + } + } + K_DO NUMBER K_STEP NUMBER track_opts ';' + { + if (($5 <= 0) && (defData->VersionNum >= 5.4)) { + if (defData->callbacks->TrackCbk) + if (defData->trackWarnings++ < defData->settings->TrackWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The DO number %g in TRACK is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again.", $5); + defData->defError(6525, defData->defMsg); + free(defData->defMsg); + } + } + if ($7 < 0) { + if (defData->callbacks->TrackCbk) + if (defData->trackWarnings++ < defData->settings->TrackWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The STEP number %g in TRACK is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again.", $7); + defData->defError(6526, defData->defMsg); + free(defData->defMsg); + } + } + if (defData->callbacks->TrackCbk) { + defData->Track.setDo(ROUND($2), ROUND($5), $7); + CALLBACK(defData->callbacks->TrackCbk, defrTrackCbkType, &defData->Track); + } + } + +track_start: K_TRACKS track_type + { + $$ = $2; + } + +track_type: K_X + { $$ = (char*)"X";} + | K_Y + { $$ = (char*)"Y";} + +track_opts: track_mask_statement track_layer_statement + +track_mask_statement: // empty + | K_MASK NUMBER same_mask + { + if (defData->validateMaskInput((int)$2, defData->trackWarnings, defData->settings->TrackWarnings)) { + if (defData->callbacks->TrackCbk) { + defData->Track.addMask($2, $3); + } + } + } + +same_mask: + // empty + { $$ = 0; } + | K_SAMEMASK + { $$ = 1; } + +track_layer_statement: // empty + | K_LAYER { defData->dumb_mode = 1000; } track_layer track_layers + { defData->dumb_mode = 0; } + +track_layers: // empty + | track_layer track_layers + ; + +track_layer: T_STRING + { + if (defData->callbacks->TrackCbk) + defData->Track.addLayer($1); + } + +gcellgrid: K_GCELLGRID track_type NUMBER + K_DO NUMBER K_STEP NUMBER ';' + { + if ($5 <= 0) { + if (defData->callbacks->GcellGridCbk) + if (defData->gcellGridWarnings++ < defData->settings->GcellGridWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The DO number %g in GCELLGRID is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again.", $5); + defData->defError(6527, defData->defMsg); + free(defData->defMsg); + } + } + if ($7 < 0) { + if (defData->callbacks->GcellGridCbk) + if (defData->gcellGridWarnings++ < defData->settings->GcellGridWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The STEP number %g in GCELLGRID is invalid.\nThe number value has to be greater than 0. Specify the valid syntax and try again.", $7); + defData->defError(6528, defData->defMsg); + free(defData->defMsg); + } + } + if (defData->callbacks->GcellGridCbk) { + defData->GcellGrid.setup($2, ROUND($3), ROUND($5), $7); + CALLBACK(defData->callbacks->GcellGridCbk, defrGcellGridCbkType, &defData->GcellGrid); + } + } + +extension_section: K_BEGINEXT + { + if (defData->callbacks->ExtensionCbk) + CALLBACK(defData->callbacks->ExtensionCbk, defrExtensionCbkType, &defData->History_text[0]); + } + +extension_stmt: '+' K_BEGINEXT + { } + +via_section: via via_declarations via_end + ; + +via: K_VIAS NUMBER ';' + { + if (defData->callbacks->ViaStartCbk) + CALLBACK(defData->callbacks->ViaStartCbk, defrViaStartCbkType, ROUND($2)); + } + +via_declarations: // empty + | via_declarations via_declaration + ; + +via_declaration: '-' {defData->dumb_mode = 1;defData->no_num = 1; } T_STRING + { + if (defData->callbacks->ViaCbk) defData->Via.setup($3); + defData->viaRule = 0; + } + layer_stmts ';' + { + if (defData->callbacks->ViaCbk) + CALLBACK(defData->callbacks->ViaCbk, defrViaCbkType, &defData->Via); + defData->Via.clear(); + } + +layer_stmts: // empty + | layer_stmts layer_stmt + ; + +layer_stmt: '+' K_RECT {defData->dumb_mode = 1;defData->no_num = 1; } T_STRING mask pt pt + { + if (defData->callbacks->ViaCbk) + if (defData->validateMaskInput($5, defData->viaWarnings, defData->settings->ViaWarnings)) { + defData->Via.addLayer($4, $6.x, $6.y, $7.x, $7.y, $5); + } + } + | '+' K_POLYGON { defData->dumb_mode = 1; } T_STRING mask + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->ViaCbk) { + if (defData->viaWarnings++ < defData->settings->ViaWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The POLYGON statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6509, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + + defData->Geometries.Reset(); + + } + firstPt nextPt nextPt otherPts + { + if (defData->VersionNum >= 5.6) { // only add if 5.6 or beyond + if (defData->callbacks->ViaCbk) + if (defData->validateMaskInput($5, defData->viaWarnings, defData->settings->ViaWarnings)) { + defData->Via.addPolygon($4, &defData->Geometries, $5); + } + } + } + | '+' K_PATTERNNAME {defData->dumb_mode = 1;defData->no_num = 1; } T_STRING + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->ViaCbk) + defData->Via.addPattern($4); + } else + if (defData->callbacks->ViaCbk) + if (defData->viaWarnings++ < defData->settings->ViaWarnings) + defData->defWarning(7019, "The PATTERNNAME statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement."); + } + | '+' K_VIARULE {defData->dumb_mode = 1;defData->no_num = 1; } T_STRING + '+' K_CUTSIZE NUMBER NUMBER + '+' K_LAYERS {defData->dumb_mode = 3;defData->no_num = 1; } T_STRING T_STRING T_STRING + '+' K_CUTSPACING NUMBER NUMBER + '+' K_ENCLOSURE NUMBER NUMBER NUMBER NUMBER + { + defData->viaRule = 1; + if (defData->VersionNum < 5.6) { + if (defData->callbacks->ViaCbk) { + if (defData->viaWarnings++ < defData->settings->ViaWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The VIARULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6557, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->ViaCbk) + defData->Via.addViaRule($4, (int)$7, (int)$8, $12, $13, + $14, (int)$17, (int)$18, (int)$21, + (int)$22, (int)$23, (int)$24); + } + } + | layer_viarule_opts + | extension_stmt + { + if (defData->callbacks->ViaExtCbk) + CALLBACK(defData->callbacks->ViaExtCbk, defrViaExtCbkType, &defData->History_text[0]); + } + +layer_viarule_opts: '+' K_ROWCOL NUMBER NUMBER + { + if (!defData->viaRule) { + if (defData->callbacks->ViaCbk) { + if (defData->viaWarnings++ < defData->settings->ViaWarnings) { + defData->defError(6559, "The ROWCOL statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement."); + CHKERR(); + } + } + } else if (defData->callbacks->ViaCbk) + defData->Via.addRowCol((int)$3, (int)$4); + } + | '+' K_ORIGIN NUMBER NUMBER + { + if (!defData->viaRule) { + if (defData->callbacks->ViaCbk) { + if (defData->viaWarnings++ < defData->settings->ViaWarnings) { + defData->defError(6560, "The ORIGIN statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement."); + CHKERR(); + } + } + } else if (defData->callbacks->ViaCbk) + defData->Via.addOrigin((int)$3, (int)$4); + } + | '+' K_OFFSET NUMBER NUMBER NUMBER NUMBER + { + if (!defData->viaRule) { + if (defData->callbacks->ViaCbk) { + if (defData->viaWarnings++ < defData->settings->ViaWarnings) { + defData->defError(6561, "The OFFSET statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement."); + CHKERR(); + } + } + } else if (defData->callbacks->ViaCbk) + defData->Via.addOffset((int)$3, (int)$4, (int)$5, (int)$6); + } + | '+' K_PATTERN {defData->dumb_mode = 1;defData->no_num = 1; } T_STRING + { + if (!defData->viaRule) { + if (defData->callbacks->ViaCbk) { + if (defData->viaWarnings++ < defData->settings->ViaWarnings) { + defData->defError(6562, "The PATTERN statement is missing from the VIARULE statement. Ensure that it exists in the VIARULE statement."); + CHKERR(); + } + } + } else if (defData->callbacks->ViaCbk) + defData->Via.addCutPattern($4); + } + +firstPt: pt + { defData->Geometries.startList($1.x, $1.y); } + +nextPt: pt + { defData->Geometries.addToList($1.x, $1.y); } + +otherPts: // empty + | otherPts nextPt + ; + +pt: '(' NUMBER NUMBER ')' + { + defData->save_x = $2; + defData->save_y = $3; + $$.x = ROUND($2); + $$.y = ROUND($3); + } + | '(' '*' NUMBER ')' + { + defData->save_y = $3; + $$.x = ROUND(defData->save_x); + $$.y = ROUND($3); + } + | '(' NUMBER '*' ')' + { + defData->save_x = $2; + $$.x = ROUND($2); + $$.y = ROUND(defData->save_y); + } + | '(' '*' '*' ')' + { + $$.x = ROUND(defData->save_x); + $$.y = ROUND(defData->save_y); + } + +mask: // empty + { $$ = 0; } + | '+' K_MASK NUMBER + { $$ = $3; } + +via_end: K_END K_VIAS + { + if (defData->callbacks->ViaEndCbk) + CALLBACK(defData->callbacks->ViaEndCbk, defrViaEndCbkType, 0); + } + +regions_section: regions_start regions_stmts K_END K_REGIONS + { + if (defData->callbacks->RegionEndCbk) + CALLBACK(defData->callbacks->RegionEndCbk, defrRegionEndCbkType, 0); + } + +regions_start: K_REGIONS NUMBER ';' + { + if (defData->callbacks->RegionStartCbk) + CALLBACK(defData->callbacks->RegionStartCbk, defrRegionStartCbkType, ROUND($2)); + } + +regions_stmts: // empty + | regions_stmts regions_stmt + {} + +regions_stmt: '-' { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->RegionCbk) + defData->Region.setup($3); + defData->regTypeDef = 0; + } + rect_list region_options ';' + { CALLBACK(defData->callbacks->RegionCbk, defrRegionCbkType, &defData->Region); } + +rect_list : + pt pt + { if (defData->callbacks->RegionCbk) + defData->Region.addRect($1.x, $1.y, $2.x, $2.y); } + | rect_list pt pt + { if (defData->callbacks->RegionCbk) + defData->Region.addRect($2.x, $2.y, $3.x, $3.y); } + ; + +region_options: // empty + | region_options region_option + ; + +region_option : '+' K_PROPERTY {defData->dumb_mode = DEF_MAX_INT; } + region_prop_list + { defData->dumb_mode = 0; } + | '+' K_TYPE region_type // 5.4.1 + { + if (defData->regTypeDef) { + if (defData->callbacks->RegionCbk) { + if (defData->regionWarnings++ < defData->settings->RegionWarnings) { + defData->defError(6563, "The TYPE statement already exists. It has been defined in the REGION statement."); + CHKERR(); + } + } + } + if (defData->callbacks->RegionCbk) defData->Region.setType($3); + defData->regTypeDef = 1; + } + ; + +region_prop_list : // empty + | region_prop_list region_prop + ; + +region_prop : T_STRING NUMBER + { + if (defData->callbacks->RegionCbk) { + char propTp; + char* str = defData->ringCopy(" "); + propTp = defData->session->RegionProp.propType($1); + CHKPROPTYPE(propTp, $1, "REGION"); + // For backword compatibility, also set the string value + // We will use a temporary string to store the number. + // The string space is borrowed from the ring buffer + // in the lexer. + sprintf(str, "%g", $2); + defData->Region.addNumProperty($1, $2, str, propTp); + } + } + | T_STRING QSTRING + { + if (defData->callbacks->RegionCbk) { + char propTp; + propTp = defData->session->RegionProp.propType($1); + CHKPROPTYPE(propTp, $1, "REGION"); + defData->Region.addProperty($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (defData->callbacks->RegionCbk) { + char propTp; + propTp = defData->session->RegionProp.propType($1); + CHKPROPTYPE(propTp, $1, "REGION"); + defData->Region.addProperty($1, $2, propTp); + } + } + +region_type: K_FENCE + { $$ = (char*)"FENCE"; } + | K_GUIDE + { $$ = (char*)"GUIDE"; } + +comps_maskShift_section : K_COMPSMASKSHIFT layer_statement ';' + { + if (defData->VersionNum < 5.8) { + if (defData->componentWarnings++ < defData->settings->ComponentWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The MASKSHIFT statement is available in version 5.8 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(7415, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + if (defData->callbacks->ComponentMaskShiftLayerCbk) { + CALLBACK(defData->callbacks->ComponentMaskShiftLayerCbk, defrComponentMaskShiftLayerCbkType, &defData->ComponentMaskShiftLayer); + } + } + +comps_section: start_comps comps_rule end_comps + ; + +start_comps: K_COMPS NUMBER ';' + { + if (defData->callbacks->ComponentStartCbk) + CALLBACK(defData->callbacks->ComponentStartCbk, defrComponentStartCbkType, + ROUND($2)); + } + +layer_statement : // empty + | layer_statement maskLayer + ; + +maskLayer: T_STRING + { + if (defData->callbacks->ComponentMaskShiftLayerCbk) { + defData->ComponentMaskShiftLayer.addMaskShiftLayer($1); + } + } + +comps_rule: // empty + | comps_rule comp + ; + +comp: comp_start comp_options ';' + { + if (defData->callbacks->ComponentCbk) + CALLBACK(defData->callbacks->ComponentCbk, defrComponentCbkType, &defData->Component); + } + +comp_start: comp_id_and_name comp_net_list + { + defData->dumb_mode = 0; + defData->no_num = 0; + } + +comp_id_and_name: '-' {defData->dumb_mode = DEF_MAX_INT; defData->no_num = DEF_MAX_INT; } + T_STRING T_STRING + { + if (defData->callbacks->ComponentCbk) + defData->Component.IdAndName($3, $4); + } + +comp_net_list: // empty + { } + | comp_net_list '*' + { + if (defData->callbacks->ComponentCbk) + defData->Component.addNet("*"); + } + | comp_net_list T_STRING + { + if (defData->callbacks->ComponentCbk) + defData->Component.addNet($2); + } + +comp_options: // empty + | comp_options comp_option + ; + +comp_option: comp_generate | comp_source | comp_type | weight | maskShift | + comp_foreign | comp_region | comp_eeq | comp_halo | + comp_routehalo | comp_property | comp_extension_stmt + ; + +comp_extension_stmt: extension_stmt + { + if (defData->callbacks->ComponentCbk) + CALLBACK(defData->callbacks->ComponentExtCbk, defrComponentExtCbkType, + &defData->History_text[0]); + } + +comp_eeq: '+' K_EEQMASTER {defData->dumb_mode=1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->ComponentCbk) + defData->Component.setEEQ($4); + } + +comp_generate: '+' K_COMP_GEN { defData->dumb_mode = 2; defData->no_num = 2; } T_STRING + opt_pattern + { + if (defData->callbacks->ComponentCbk) + defData->Component.setGenerate($4, $5); + } +opt_pattern : + // empty + { $$ = (char*)""; } + | T_STRING + { $$ = $1; } + +comp_source: '+' K_SOURCE source_type + { + if (defData->callbacks->ComponentCbk) + defData->Component.setSource($3); + } + +source_type: K_NETLIST + { $$ = (char*)"NETLIST"; } + | K_DIST + { $$ = (char*)"DIST"; } + | K_USER + { $$ = (char*)"USER"; } + | K_TIMING + { $$ = (char*)"TIMING"; } + + +comp_region: + comp_region_start comp_pnt_list + { } + | comp_region_start T_STRING + { + if (defData->callbacks->ComponentCbk) + defData->Component.setRegionName($2); + } + +comp_pnt_list: pt pt + { + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + if (defData->VersionNum < 5.5) { + if (defData->callbacks->ComponentCbk) + defData->Component.setRegionBounds($1.x, $1.y, + $2.x, $2.y); + } + else + defData->defWarning(7020, "The REGION pt pt statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement."); + } + | comp_pnt_list pt pt + { + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + if (defData->VersionNum < 5.5) { + if (defData->callbacks->ComponentCbk) + defData->Component.setRegionBounds($2.x, $2.y, + $3.x, $3.y); + } + else + defData->defWarning(7020, "The REGION pt pt statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement."); + } + +comp_halo: '+' K_HALO // 5.7 + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->ComponentCbk) { + if (defData->componentWarnings++ < defData->settings->ComponentWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The HALO statement is a version 5.6 and later syntax.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6529, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + } + halo_soft NUMBER NUMBER NUMBER NUMBER + { + if (defData->callbacks->ComponentCbk) + defData->Component.setHalo((int)$5, (int)$6, + (int)$7, (int)$8); + } + +halo_soft: // 5.7 + | K_SOFT + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->ComponentCbk) { + if (defData->componentWarnings++ < defData->settings->ComponentWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The HALO SOFT is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6550, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->ComponentCbk) + defData->Component.setHaloSoft(); + } + } + +// 5.7 +comp_routehalo: '+' K_ROUTEHALO NUMBER { defData->dumb_mode = 2; defData->no_num = 2; } T_STRING T_STRING + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->ComponentCbk) { + if (defData->componentWarnings++ < defData->settings->ComponentWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The ROUTEHALO is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6551, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->ComponentCbk) + defData->Component.setRouteHalo( + (int)$3, $5, $6); + } + } + +comp_property: '+' K_PROPERTY { defData->dumb_mode = DEF_MAX_INT; } + comp_prop_list + { defData->dumb_mode = 0; } + +comp_prop_list: comp_prop + | comp_prop_list comp_prop + ; + +comp_prop: T_STRING NUMBER + { + if (defData->callbacks->ComponentCbk) { + char propTp; + char* str = defData->ringCopy(" "); + propTp = defData->session->CompProp.propType($1); + CHKPROPTYPE(propTp, $1, "COMPONENT"); + sprintf(str, "%g", $2); + defData->Component.addNumProperty($1, $2, str, propTp); + } + } + | T_STRING QSTRING + { + if (defData->callbacks->ComponentCbk) { + char propTp; + propTp = defData->session->CompProp.propType($1); + CHKPROPTYPE(propTp, $1, "COMPONENT"); + defData->Component.addProperty($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (defData->callbacks->ComponentCbk) { + char propTp; + propTp = defData->session->CompProp.propType($1); + CHKPROPTYPE(propTp, $1, "COMPONENT"); + defData->Component.addProperty($1, $2, propTp); + } + } + +comp_region_start: '+' K_REGION + { defData->dumb_mode = 1; defData->no_num = 1; } + +comp_foreign: '+' K_FOREIGN { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + opt_paren orient + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->ComponentCbk) { + defData->Component.setForeignName($4); + defData->Component.setForeignLocation($5.x, $5.y, $6); + } + } else + if (defData->callbacks->ComponentCbk) + if (defData->componentWarnings++ < defData->settings->ComponentWarnings) + defData->defWarning(7021, "The FOREIGN statement is obsolete in version 5.6 and later.\nThe DEF parser will ignore this statement."); + } + +opt_paren: + pt + { $$ = $1; } + | NUMBER NUMBER + { $$.x = ROUND($1); $$.y = ROUND($2); } + +comp_type: placement_status pt orient + { + if (defData->callbacks->ComponentCbk) { + defData->Component.setPlacementStatus($1); + defData->Component.setPlacementLocation($2.x, $2.y, $3); + } + } + | '+' K_UNPLACED + { + if (defData->callbacks->ComponentCbk) + defData->Component.setPlacementStatus( + DEFI_COMPONENT_UNPLACED); + defData->Component.setPlacementLocation(-1, -1, -1); + } + | '+' K_UNPLACED pt orient + { + if (defData->VersionNum < 5.4) { // PCR 495463 + if (defData->callbacks->ComponentCbk) { + defData->Component.setPlacementStatus( + DEFI_COMPONENT_UNPLACED); + defData->Component.setPlacementLocation($3.x, $3.y, $4); + } + } else { + if (defData->componentWarnings++ < defData->settings->ComponentWarnings) + defData->defWarning(7022, "In the COMPONENT UNPLACED statement, point and orient are invalid in version 5.4 and later.\nThe DEF parser will ignore this statement."); + } + } + + // Adding 'no_num' modification, otherwise the token will be parsed as number (double). +maskShift: '+' K_MASKSHIFT { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->ComponentCbk) { + if (defData->validateMaskShiftInput($4, defData->componentWarnings, defData->settings->ComponentWarnings)) { + defData->Component.setMaskShift($4); + } + } + } + +placement_status: '+' K_FIXED + { $$ = DEFI_COMPONENT_FIXED; } + | '+' K_COVER + { $$ = DEFI_COMPONENT_COVER; } + | '+' K_PLACED + { $$ = DEFI_COMPONENT_PLACED; } + +weight: '+' K_WEIGHT NUMBER + { + if (defData->callbacks->ComponentCbk) + defData->Component.setWeight(ROUND($3)); + } + +end_comps: K_END K_COMPS + { + if (defData->callbacks->ComponentCbk) + CALLBACK(defData->callbacks->ComponentEndCbk, defrComponentEndCbkType, 0); + } + +nets_section: start_nets net_rules end_nets + ; + +start_nets: K_NETS NUMBER ';' + { + if (defData->callbacks->NetStartCbk) + CALLBACK(defData->callbacks->NetStartCbk, defrNetStartCbkType, ROUND($2)); + defData->netOsnet = 1; + } + +net_rules: // empty + | net_rules one_net + ; + +one_net: net_and_connections net_options ';' + { + if (defData->callbacks->NetCbk) + CALLBACK(defData->callbacks->NetCbk, defrNetCbkType, &defData->Net); + } +/* +** net_and_connections: net_start {defData->dumb_mode = DEF_MAX_INT; no_num = DEF_MAX_INT;} +** net_connections +** wmd -- this can be used to replace +** | '(' K_PIN {defData->dumb_mode = 1; no_num = 1;} T_STRING conn_opt ')' (???) +*/ +net_and_connections: net_start + {defData->dumb_mode = 0; defData->no_num = 0; } + +/* pcr 235555 & 236210 */ +net_start: '-' {defData->dumb_mode = DEF_MAX_INT; defData->no_num = DEF_MAX_INT; defData->nondef_is_keyword = TRUE; defData->mustjoin_is_keyword = TRUE;} net_name + +net_name: T_STRING + { + // 9/22/1999 + // this is shared by both net and special net + if ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || (defData->callbacks->SNetCbk && (defData->netOsnet==2))) + defData->Net.setName($1); + if (defData->callbacks->NetNameCbk) + CALLBACK(defData->callbacks->NetNameCbk, defrNetNameCbkType, $1); + } net_connections + | K_MUSTJOIN '(' T_STRING {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING ')' + { + if ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || (defData->callbacks->SNetCbk && (defData->netOsnet==2))) + defData->Net.addMustPin($3, $5, 0); + defData->dumb_mode = 3; + defData->no_num = 3; + } + +net_connections: // empty + | net_connections net_connection + ; + +net_connection: '(' T_STRING {defData->dumb_mode = DEF_MAX_INT; defData->no_num = DEF_MAX_INT;} + T_STRING conn_opt ')' + { + // 9/22/1999 + // since the code is shared by both net & special net, + // need to check on both flags + if ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || (defData->callbacks->SNetCbk && (defData->netOsnet==2))) + defData->Net.addPin($2, $4, $5); + // 1/14/2000 - pcr 289156 + // reset defData->dumb_mode & defData->no_num to 3 , just in case + // the next statement is another net_connection + defData->dumb_mode = 3; + defData->no_num = 3; + } + | '(' '*' {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING conn_opt ')' + { + if ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || (defData->callbacks->SNetCbk && (defData->netOsnet==2))) + defData->Net.addPin("*", $4, $5); + defData->dumb_mode = 3; + defData->no_num = 3; + } + | '(' K_PIN {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING conn_opt ')' + { + if ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || (defData->callbacks->SNetCbk && (defData->netOsnet==2))) + defData->Net.addPin("PIN", $4, $5); + defData->dumb_mode = 3; + defData->no_num = 3; + } + +conn_opt: // empty + { $$ = 0; } + | extension_stmt + { + if (defData->callbacks->NetConnectionExtCbk) + CALLBACK(defData->callbacks->NetConnectionExtCbk, defrNetConnectionExtCbkType, + &defData->History_text[0]); + $$ = 0; + } + | '+' K_SYNTHESIZED + { $$ = 1; } + + +// These are all the optional fields for a net that go after the '+' +net_options: // empty + | net_options net_option + ; + +net_option: '+' net_type + { + if (defData->callbacks->NetCbk) defData->Net.addWire($2, NULL); + } + paths + { + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->nondef_is_keyword = FALSE; + defData->mustjoin_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->virtual_is_keyword = FALSE; + defData->rect_is_keyword = FALSE; + defData->mask_is_keyword = FALSE; + defData->needNPCbk = 0; + } + + | '+' K_SOURCE netsource_type + { if (defData->callbacks->NetCbk) defData->Net.setSource($3); } + + | '+' K_FIXEDBUMP + { + if (defData->VersionNum < 5.5) { + if (defData->callbacks->NetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The FIXEDBUMP statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6530, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->NetCbk) defData->Net.setFixedbump(); + } + + | '+' K_FREQUENCY { defData->real_num = 1; } NUMBER + { + if (defData->VersionNum < 5.5) { + if (defData->callbacks->NetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The FREQUENCY statement is a version 5.5 and later syntax.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6558, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->NetCbk) defData->Net.setFrequency($4); + defData->real_num = 0; + } + + | '+' K_ORIGINAL {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING + { if (defData->callbacks->NetCbk) defData->Net.setOriginal($4); } + + | '+' K_PATTERN pattern_type + { if (defData->callbacks->NetCbk) defData->Net.setPattern($3); } + + | '+' K_WEIGHT NUMBER + { if (defData->callbacks->NetCbk) defData->Net.setWeight(ROUND($3)); } + + | '+' K_XTALK NUMBER + { if (defData->callbacks->NetCbk) defData->Net.setXTalk(ROUND($3)); } + + | '+' K_ESTCAP NUMBER + { if (defData->callbacks->NetCbk) defData->Net.setCap($3); } + + | '+' K_USE use_type + { if (defData->callbacks->NetCbk) defData->Net.setUse($3); } + + | '+' K_STYLE NUMBER + { if (defData->callbacks->NetCbk) defData->Net.setStyle((int)$3); } + + | '+' K_NONDEFAULTRULE { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->NetCbk && defData->callbacks->NetNonDefaultRuleCbk) { + // User wants a callback on nondefaultrule + CALLBACK(defData->callbacks->NetNonDefaultRuleCbk, + defrNetNonDefaultRuleCbkType, $4); + } + // Still save data in the class + if (defData->callbacks->NetCbk) defData->Net.setNonDefaultRule($4); + } + + | vpin_stmt + + | '+' K_SHIELDNET { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { if (defData->callbacks->NetCbk) defData->Net.addShieldNet($4); } + + | '+' K_NOSHIELD { defData->dumb_mode = 1; defData->no_num = 1; } + { // since the parser still support 5.3 and earlier, can't + // move NOSHIELD in net_type + if (defData->VersionNum < 5.4) { // PCR 445209 + if (defData->callbacks->NetCbk) defData->Net.addNoShield(""); + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->virtual_is_keyword = FALSE; + defData->mask_is_keyword = FALSE; + defData->rect_is_keyword = FALSE; + defData->shield = TRUE; // save the path info in the defData->shield paths + } else + if (defData->callbacks->NetCbk) defData->Net.addWire("NOSHIELD", NULL); + } + paths + { + if (defData->VersionNum < 5.4) { // PCR 445209 + defData->shield = FALSE; + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->nondef_is_keyword = FALSE; + defData->mustjoin_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->virtual_is_keyword = FALSE; + defData->rect_is_keyword = FALSE; + defData->mask_is_keyword = FALSE; + } else { + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->nondef_is_keyword = FALSE; + defData->mustjoin_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->virtual_is_keyword = FALSE; + defData->rect_is_keyword = FALSE; + defData->mask_is_keyword = FALSE; + } + defData->needNPCbk = 0; + } + + | '+' K_SUBNET + { defData->dumb_mode = 1; defData->no_num = 1; + if (defData->callbacks->NetCbk) { + defData->Subnet = new defiSubnet(defData); + } + } + T_STRING { + if (defData->callbacks->NetCbk && defData->callbacks->NetSubnetNameCbk) { + // User wants a callback on Net subnetName + CALLBACK(defData->callbacks->NetSubnetNameCbk, defrNetSubnetNameCbkType, $4); + } + // Still save the subnet name in the class + if (defData->callbacks->NetCbk) { + defData->Subnet->setName($4); + } + } + comp_names { + defData->routed_is_keyword = TRUE; + defData->fixed_is_keyword = TRUE; + defData->cover_is_keyword = TRUE; + } subnet_options { + if (defData->callbacks->NetCbk) { + defData->Net.addSubnet(defData->Subnet); + defData->Subnet = NULL; + defData->routed_is_keyword = FALSE; + defData->fixed_is_keyword = FALSE; + defData->cover_is_keyword = FALSE; + } + } + + | '+' K_PROPERTY {defData->dumb_mode = DEF_MAX_INT; } + net_prop_list + { defData->dumb_mode = 0; } + + | extension_stmt + { + if (defData->callbacks->NetExtCbk) + CALLBACK(defData->callbacks->NetExtCbk, defrNetExtCbkType, &defData->History_text[0]); + } + +net_prop_list: net_prop + | net_prop_list net_prop + ; + +net_prop: T_STRING NUMBER + { + if (defData->callbacks->NetCbk) { + char propTp; + char* str = defData->ringCopy(" "); + propTp = defData->session->NetProp.propType($1); + CHKPROPTYPE(propTp, $1, "NET"); + sprintf(str, "%g", $2); + defData->Net.addNumProp($1, $2, str, propTp); + } + } + | T_STRING QSTRING + { + if (defData->callbacks->NetCbk) { + char propTp; + propTp = defData->session->NetProp.propType($1); + CHKPROPTYPE(propTp, $1, "NET"); + defData->Net.addProp($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (defData->callbacks->NetCbk) { + char propTp; + propTp = defData->session->NetProp.propType($1); + CHKPROPTYPE(propTp, $1, "NET"); + defData->Net.addProp($1, $2, propTp); + } + } + +netsource_type: K_NETLIST + { $$ = (char*)"NETLIST"; } + | K_DIST + { $$ = (char*)"DIST"; } + | K_USER + { $$ = (char*)"USER"; } + | K_TIMING + { $$ = (char*)"TIMING"; } + | K_TEST + { $$ = (char*)"TEST"; } + +vpin_stmt: vpin_begin vpin_layer_opt pt pt + { + // vpin_options may have to deal with orient + defData->orient_is_keyword = TRUE; + } + vpin_options + { if (defData->callbacks->NetCbk) + defData->Net.addVpinBounds($3.x, $3.y, $4.x, $4.y); + defData->orient_is_keyword = FALSE; + } + +vpin_begin: '+' K_VPIN {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING + { if (defData->callbacks->NetCbk) defData->Net.addVpin($4); } + +vpin_layer_opt: // empty + | K_LAYER {defData->dumb_mode=1;} T_STRING + { if (defData->callbacks->NetCbk) defData->Net.addVpinLayer($3); } + +vpin_options: // empty + | vpin_status pt orient + { if (defData->callbacks->NetCbk) defData->Net.addVpinLoc($1, $2.x, $2.y, $3); } + +vpin_status: K_PLACED + { $$ = (char*)"PLACED"; } + | K_FIXED + { $$ = (char*)"FIXED"; } + | K_COVER + { $$ = (char*)"COVER"; } + +net_type: K_FIXED + { $$ = (char*)"FIXED"; defData->dumb_mode = 1; } + | K_COVER + { $$ = (char*)"COVER"; defData->dumb_mode = 1; } + | K_ROUTED + { $$ = (char*)"ROUTED"; defData->dumb_mode = 1; } + +paths: + path // not necessary to do partial callback for net yet + { if (defData->NeedPathData && defData->callbacks->NetCbk) + defData->pathIsDone(defData->shield, 0, defData->netOsnet, &defData->needNPCbk); + } + | paths new_path + { } + +new_path: K_NEW { defData->dumb_mode = 1; } path + { if (defData->NeedPathData && defData->callbacks->NetCbk) + defData->pathIsDone(defData->shield, 0, defData->netOsnet, &defData->needNPCbk); + } + +path: T_STRING + { + if ((strcmp($1, "TAPER") == 0) || (strcmp($1, "TAPERRULE") == 0)) { + if (defData->NeedPathData && defData->callbacks->NetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6531, "The layerName which is required in path is missing. Include the layerName in the path and then try again."); + CHKERR(); + } + } + // Since there is already error, the next token is insignificant + defData->dumb_mode = 1; defData->no_num = 1; + } else { + // CCR 766289 - Do not accummulate the layer information if there + // is not a callback set + if (defData->NeedPathData && defData->callbacks->NetCbk) + defData->PathObj.addLayer($1); + defData->dumb_mode = 0; defData->no_num = 0; + } + } + opt_taper_style_s path_pt + { defData->dumb_mode = DEF_MAX_INT; defData->by_is_keyword = TRUE; defData->do_is_keyword = TRUE; +/* + dumb_mode = 1; by_is_keyword = TRUE; do_is_keyword = TRUE; +*/ + defData->new_is_keyword = TRUE; defData->step_is_keyword = TRUE; + defData->orient_is_keyword = TRUE; defData->virtual_is_keyword = TRUE; + defData->mask_is_keyword = TRUE, defData->rect_is_keyword = TRUE; } + + path_item_list + + { defData->dumb_mode = 0; defData->virtual_is_keyword = FALSE; defData->mask_is_keyword = FALSE, + defData->rect_is_keyword = FALSE; } + +virtual_statement : + K_VIRTUAL virtual_pt + { + if (defData->VersionNum < 5.8) { + if (defData->callbacks->SNetCbk) { + if (defData->sNetWarnings++ < defData->settings->SNetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The VIRTUAL statement is available in version 5.8 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6536, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + } + +rect_statement : + K_RECT rect_pts + { + if (defData->VersionNum < 5.8) { + if (defData->callbacks->SNetCbk) { + if (defData->sNetWarnings++ < defData->settings->SNetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The RECT statement is available in version 5.8 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6536, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + } + + +path_item_list: // empty + | path_item_list path_item + ; + + +path_item: + T_STRING + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) { + if (strcmp($1, "TAPER") == 0) + defData->PathObj.setTaper(); + else { + defData->PathObj.addVia($1); + } + } + } + | K_MASK NUMBER T_STRING + { + if (defData->validateMaskInput((int)$2, defData->sNetWarnings, defData->settings->SNetWarnings)) { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) { + if (strcmp($3, "TAPER") == 0) + defData->PathObj.setTaper(); + else { + defData->PathObj.addViaMask($2); + defData->PathObj.addVia($3); + } + } + } + } + | T_STRING orient + { if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) { + defData->PathObj.addVia($1); + defData->PathObj.addViaRotation($2); + } + } + | K_MASK NUMBER T_STRING orient + { + if (defData->validateMaskInput((int)$2, defData->sNetWarnings, defData->settings->SNetWarnings)) { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) { + defData->PathObj.addViaMask($2); + defData->PathObj.addVia($3); + defData->PathObj.addViaRotation($4); + } + } + } + | K_MASK NUMBER T_STRING K_DO NUMBER K_BY NUMBER K_STEP NUMBER NUMBER + { + if (defData->validateMaskInput((int)$2, defData->sNetWarnings, defData->settings->SNetWarnings)) { + if (($5 == 0) || ($7 == 0)) { + if (defData->NeedPathData && + defData->callbacks->SNetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6533, "Either the numX or numY in the VIA DO statement has the value. The value specified is 0.\nUpdate your DEF file with the correct value and then try again.\n"); + CHKERR(); + } + } + } + if (defData->NeedPathData && (defData->callbacks->SNetCbk && (defData->netOsnet==2))) { + defData->PathObj.addViaMask($2); + defData->PathObj.addVia($3); + defData->PathObj.addViaData((int)$5, (int)$7, (int)$9, (int)$10); + } else if (defData->NeedPathData && (defData->callbacks->NetCbk && (defData->netOsnet==1))) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6567, "The VIA DO statement is defined in the NET statement and is invalid.\nRemove this statement from your DEF file and try again."); + CHKERR(); + } + } + } + } + | T_STRING K_DO NUMBER K_BY NUMBER K_STEP NUMBER NUMBER + { + if (defData->VersionNum < 5.5) { + if (defData->NeedPathData && + defData->callbacks->SNetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The VIA DO statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6532, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (($3 == 0) || ($5 == 0)) { + if (defData->NeedPathData && + defData->callbacks->SNetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6533, "Either the numX or numY in the VIA DO statement has the value. The value specified is 0.\nUpdate your DEF file with the correct value and then try again.\n"); + CHKERR(); + } + } + } + if (defData->NeedPathData && (defData->callbacks->SNetCbk && (defData->netOsnet==2))) { + defData->PathObj.addVia($1); + defData->PathObj.addViaData((int)$3, (int)$5, (int)$7, (int)$8); + } else if (defData->NeedPathData && (defData->callbacks->NetCbk && (defData->netOsnet==1))) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6567, "The VIA DO statement is defined in the NET statement and is invalid.\nRemove this statement from your DEF file and try again."); + CHKERR(); + } + } + } + | T_STRING orient K_DO NUMBER K_BY NUMBER K_STEP NUMBER NUMBER + { + if (defData->VersionNum < 5.5) { + if (defData->NeedPathData && + defData->callbacks->SNetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The VIA DO statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6532, defData->defMsg); + CHKERR(); + } + } + } + if (($4 == 0) || ($6 == 0)) { + if (defData->NeedPathData && + defData->callbacks->SNetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6533, "Either the numX or numY in the VIA DO statement has the value. The value specified is 0.\nUpdate your DEF file with the correct value and then try again.\n"); + CHKERR(); + } + } + } + if (defData->NeedPathData && (defData->callbacks->SNetCbk && (defData->netOsnet==2))) { + defData->PathObj.addVia($1); + defData->PathObj.addViaRotation($2); + defData->PathObj.addViaData((int)$4, (int)$6, (int)$8, (int)$9); + } else if (defData->NeedPathData && (defData->callbacks->NetCbk && (defData->netOsnet==1))) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6567, "The VIA DO statement is defined in the NET statement and is invalid.\nRemove this statement from your DEF file and try again."); + CHKERR(); + } + } + } + | K_MASK NUMBER T_STRING orient K_DO NUMBER K_BY NUMBER K_STEP NUMBER NUMBER + { + if (defData->validateMaskInput((int)$2, defData->sNetWarnings, defData->settings->SNetWarnings)) { + if (($6 == 0) || ($8 == 0)) { + if (defData->NeedPathData && + defData->callbacks->SNetCbk) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6533, "Either the numX or numY in the VIA DO statement has the value. The value specified is 0.\nUpdate your DEF file with the correct value and then try again.\n"); + CHKERR(); + } + } + } + if (defData->NeedPathData && (defData->callbacks->SNetCbk && (defData->netOsnet==2))) { + defData->PathObj.addViaMask($2); + defData->PathObj.addVia($3); + defData->PathObj.addViaRotation($4);; + defData->PathObj.addViaData((int)$6, (int)$8, (int)$10, (int)$11); + } else if (defData->NeedPathData && (defData->callbacks->NetCbk && (defData->netOsnet==1))) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defError(6567, "The VIA DO statement is defined in the NET statement and is invalid.\nRemove this statement from your DEF file and try again."); + CHKERR(); + } + } + } + } + | virtual_statement + | rect_statement + | K_MASK NUMBER K_RECT { defData->dumb_mode = 6; } '(' NUMBER NUMBER NUMBER NUMBER ')' + { + if (defData->validateMaskInput((int)$2, defData->sNetWarnings, defData->settings->SNetWarnings)) { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) { + defData->PathObj.addMask($2); + defData->PathObj.addViaRect($6, $7, $8, $9); + } + } + } + | K_MASK NUMBER + { + if (defData->validateMaskInput((int)$2, defData->sNetWarnings, defData->settings->SNetWarnings)) { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) { + defData->PathObj.addMask($2); + } + } + } + path_pt + | path_pt + { + // reset defData->dumb_mode to 1 just incase the next token is a via of the path + // 2/5/2004 - pcr 686781 + defData->dumb_mode = DEF_MAX_INT; defData->by_is_keyword = TRUE; defData->do_is_keyword = TRUE; + defData->new_is_keyword = TRUE; defData->step_is_keyword = TRUE; + defData->orient_is_keyword = TRUE; + } + + +path_pt : + '(' NUMBER NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addPoint(ROUND($2), ROUND($3)); + defData->save_x = $2; + defData->save_y = $3; + } + | '(' '*' NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addPoint(ROUND(defData->save_x), ROUND($3)); + defData->save_y = $3; + } + | '(' NUMBER '*' ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addPoint(ROUND($2), ROUND(defData->save_y)); + defData->save_x = $2; + } + | '(' '*' '*' ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addPoint(ROUND(defData->save_x), ROUND(defData->save_y)); + } + | '(' NUMBER NUMBER NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addFlushPoint(ROUND($2), ROUND($3), ROUND($4)); + defData->save_x = $2; + defData->save_y = $3; + } + | '(' '*' NUMBER NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addFlushPoint(ROUND(defData->save_x), ROUND($3), + ROUND($4)); + defData->save_y = $3; + } + | '(' NUMBER '*' NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addFlushPoint(ROUND($2), ROUND(defData->save_y), + ROUND($4)); + defData->save_x = $2; + } + | '(' '*' '*' NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addFlushPoint(ROUND(defData->save_x), ROUND(defData->save_y), + ROUND($4)); + } + +virtual_pt : + '(' NUMBER NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addVirtualPoint(ROUND($2), ROUND($3)); + defData->save_x = $2; + defData->save_y = $3; + } + | '(' '*' NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addVirtualPoint(ROUND(defData->save_x), ROUND($3)); + defData->save_y = $3; + } + | '(' NUMBER '*' ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addVirtualPoint(ROUND($2), ROUND(defData->save_y)); + defData->save_x = $2; + } + | '(' '*' '*' ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addVirtualPoint(ROUND(defData->save_x), ROUND(defData->save_y)); + } + +rect_pts : + '(' NUMBER NUMBER NUMBER NUMBER ')' + { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) { + defData->PathObj.addViaRect($2, $3, $4, $5); + } + } + + +opt_taper_style_s: // empty + | opt_taper_style_s opt_taper_style + ; +opt_taper_style: opt_style + | opt_taper + ; + +opt_taper: K_TAPER + { if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.setTaper(); } + | K_TAPERRULE { defData->dumb_mode = 1; } T_STRING + { if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addTaperRule($3); } + +opt_style: K_STYLE NUMBER + { + if (defData->VersionNum < 5.6) { + if (defData->NeedPathData && (defData->callbacks->NetCbk || + defData->callbacks->SNetCbk)) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The STYLE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6534, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addStyle((int)$2); + } + +opt_spaths: // empty + | opt_spaths opt_shape_style + ; + +opt_shape_style: + '+' K_SHAPE shape_type + { if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addShape($3); } + | '+' K_STYLE NUMBER + { if (defData->VersionNum < 5.6) { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) { + if (defData->netWarnings++ < defData->settings->NetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The STYLE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6534, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->NeedPathData && ((defData->callbacks->NetCbk && (defData->netOsnet==1)) || + (defData->callbacks->SNetCbk && (defData->netOsnet==2)))) + defData->PathObj.addStyle((int)$3); + } + } + +end_nets: K_END K_NETS + { + CALLBACK(defData->callbacks->NetEndCbk, defrNetEndCbkType, 0); + defData->netOsnet = 0; + } + +shape_type: K_RING + { $$ = (char*)"RING"; } + | K_STRIPE + { $$ = (char*)"STRIPE"; } + | K_FOLLOWPIN + { $$ = (char*)"FOLLOWPIN"; } + | K_IOWIRE + { $$ = (char*)"IOWIRE"; } + | K_COREWIRE + { $$ = (char*)"COREWIRE"; } + | K_BLOCKWIRE + { $$ = (char*)"BLOCKWIRE"; } + | K_FILLWIRE + { $$ = (char*)"FILLWIRE"; } + | K_FILLWIREOPC // 5.7 + { + if (defData->VersionNum < 5.7) { + if (defData->NeedPathData) { + if (defData->fillWarnings++ < defData->settings->FillWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The FILLWIREOPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6552, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + $$ = (char*)"FILLWIREOPC"; + } + | K_DRCFILL + { $$ = (char*)"DRCFILL"; } + | K_BLOCKAGEWIRE + { $$ = (char*)"BLOCKAGEWIRE"; } + | K_PADRING + { $$ = (char*)"PADRING"; } + | K_BLOCKRING + { $$ = (char*)"BLOCKRING"; } + +snets_section : start_snets snet_rules end_snets + ; + +snet_rules: // empty + | snet_rules snet_rule + ; + +snet_rule: net_and_connections snet_options ';' + { CALLBACK(defData->callbacks->SNetCbk, defrSNetCbkType, &defData->Net); } + +snet_options: // empty + | snet_options snet_option + ; + +snet_option: snet_width | snet_voltage | + snet_spacing | snet_other_option + ; + +snet_other_option: '+' net_type + { + if (defData->VersionNum >= 5.8) { + defData->specialWire_routeStatus = $2; + } else { + if (defData->callbacks->SNetCbk) { // PCR 902306 + defData->defMsg = (char*)malloc(1024); + sprintf(defData->defMsg, "The SPECIAL NET statement, with type %s, does not have any net statement defined.\nThe DEF parser will ignore this statemnet.", $2); + defData->defWarning(7023, defData->defMsg); + free(defData->defMsg); + } + } + } + | '+' net_type + { + if (defData->callbacks->SNetCbk) defData->Net.addWire($2, NULL); + } + spaths + { + // 7/17/2003 - Fix for pcr 604848, add a callback for each wire + if (defData->callbacks->SNetWireCbk) { + CALLBACK(defData->callbacks->SNetWireCbk, defrSNetWireCbkType, &defData->Net); + defData->Net.freeWire(); + } + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->virtual_is_keyword = FALSE; + defData->mask_is_keyword = FALSE; + defData->rect_is_keyword = FALSE; + defData->needSNPCbk = 0; + } + + | '+' K_SHIELD { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { defData->shieldName = $4; + defData->specialWire_routeStatus = (char*)"SHIELD"; + defData->specialWire_routeStatusName = $4; + } + shield_layer + + | '+' K_SHAPE shape_type + { + defData->specialWire_shapeType = $3; + } + | '+' K_MASK NUMBER + { + if (defData->validateMaskInput((int)$3, defData->sNetWarnings, defData->settings->SNetWarnings)) { + defData->specialWire_mask = $3; + } + } + | '+' K_POLYGON { defData->dumb_mode = 1; } T_STRING + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->SNetCbk) { + if (defData->sNetWarnings++ < defData->settings->SNetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The POLYGON statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6535, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + + defData->Geometries.Reset(); + } + firstPt nextPt nextPt otherPts + { + if (defData->VersionNum >= 5.6) { // only add if 5.6 or beyond + if (defData->callbacks->SNetCbk) { + // defData->needSNPCbk will indicate that it has reach the max + // memory and if user has set partialPathCBk, def parser + // will make the callback. + // This will improve performance + // This construct is only in specialnet + defData->Net.addPolygon($4, &defData->Geometries, &defData->needSNPCbk, defData->specialWire_mask, defData->specialWire_routeStatus, defData->specialWire_shapeType, + defData->specialWire_routeStatusName); + defData->specialWire_mask = 0; + defData->specialWire_routeStatus = (char*)"ROUTED"; + defData->specialWire_shapeType = (char*)""; + if (defData->needSNPCbk && defData->callbacks->SNetPartialPathCbk) { + CALLBACK(defData->callbacks->SNetPartialPathCbk, defrSNetPartialPathCbkType, + &defData->Net); + defData->Net.clearRectPolyNPath(); + defData->Net.clearVia(); + } + } + } + } + + | '+' K_RECT { defData->dumb_mode = 1; } T_STRING pt pt + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->SNetCbk) { + if (defData->sNetWarnings++ < defData->settings->SNetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The RECT statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6536, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->SNetCbk) { + // defData->needSNPCbk will indicate that it has reach the max + // memory and if user has set partialPathCBk, def parser + // will make the callback. + // This will improve performance + // This construct is only in specialnet + defData->Net.addRect($4, $5.x, $5.y, $6.x, $6.y, &defData->needSNPCbk, defData->specialWire_mask, defData->specialWire_routeStatus, defData->specialWire_shapeType, defData->specialWire_routeStatusName); + defData->specialWire_mask = 0; + defData->specialWire_routeStatus = (char*)"ROUTED"; + defData->specialWire_shapeType = (char*)""; + defData->specialWire_routeStatusName = (char*)""; + if (defData->needSNPCbk && defData->callbacks->SNetPartialPathCbk) { + CALLBACK(defData->callbacks->SNetPartialPathCbk, defrSNetPartialPathCbkType, + &defData->Net); + defData->Net.clearRectPolyNPath(); + defData->Net.clearVia(); + } + } + } + | '+' K_VIA { defData->dumb_mode = 1; } T_STRING orient_pt + { + if (defData->VersionNum < 5.8) { + if (defData->callbacks->SNetCbk) { + if (defData->sNetWarnings++ < defData->settings->SNetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The VIA statement is available in version 5.8 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6536, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + } + firstPt otherPts + { + if (defData->VersionNum >= 5.8 && defData->callbacks->SNetCbk) { + defData->Net.addPts($4, $5, &defData->Geometries, &defData->needSNPCbk, defData->specialWire_mask, defData->specialWire_routeStatus, defData->specialWire_shapeType, + defData->specialWire_routeStatusName); + defData->specialWire_mask = 0; + defData->specialWire_routeStatus = (char*)"ROUTED"; + defData->specialWire_shapeType = (char*)""; + defData->specialWire_routeStatusName = (char*)""; + if (defData->needSNPCbk && defData->callbacks->SNetPartialPathCbk) { + CALLBACK(defData->callbacks->SNetPartialPathCbk, defrSNetPartialPathCbkType, + &defData->Net); + defData->Net.clearRectPolyNPath(); + defData->Net.clearVia(); + } + } + } + + | '+' K_SOURCE source_type + { if (defData->callbacks->SNetCbk) defData->Net.setSource($3); } + + | '+' K_FIXEDBUMP + { if (defData->callbacks->SNetCbk) defData->Net.setFixedbump(); } + + | '+' K_FREQUENCY NUMBER + { if (defData->callbacks->SNetCbk) defData->Net.setFrequency($3); } + + | '+' K_ORIGINAL {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING + { if (defData->callbacks->SNetCbk) defData->Net.setOriginal($4); } + + | '+' K_PATTERN pattern_type + { if (defData->callbacks->SNetCbk) defData->Net.setPattern($3); } + + | '+' K_WEIGHT NUMBER + { if (defData->callbacks->SNetCbk) defData->Net.setWeight(ROUND($3)); } + + | '+' K_ESTCAP NUMBER + { + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + if (defData->VersionNum < 5.5) { + if (defData->callbacks->SNetCbk) defData->Net.setCap($3); + } else { + defData->defWarning(7024, "The ESTCAP statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement."); + } + } + + | '+' K_USE use_type + { if (defData->callbacks->SNetCbk) defData->Net.setUse($3); } + + | '+' K_STYLE NUMBER + { if (defData->callbacks->SNetCbk) defData->Net.setStyle((int)$3); } + + | '+' K_PROPERTY {defData->dumb_mode = DEF_MAX_INT; } + snet_prop_list + { defData->dumb_mode = 0; } + + | extension_stmt + { CALLBACK(defData->callbacks->NetExtCbk, defrNetExtCbkType, &defData->History_text[0]); } + +orient_pt: // empty + { $$ = 0; } + | K_N {$$ = 0;} + | K_W {$$ = 1;} + | K_S {$$ = 2;} + | K_E {$$ = 3;} + | K_FN {$$ = 4;} + | K_FW {$$ = 5;} + | K_FS {$$ = 6;} + | K_FE {$$ = 7;} + +shield_layer: // PCR 902306 + { + if (defData->callbacks->SNetCbk) { + if (defData->VersionNum < 5.8) { + defData->defMsg = (char*)malloc(1024); + sprintf(defData->defMsg, "The SPECIAL NET SHIELD statement doesn't have routing points definition.\nWill be ignored."); + defData->defWarning(7025, defData->defMsg); + free(defData->defMsg); + } else { // CCR 1244433 + defData->specialWire_routeStatus = (char*)"SHIELD"; + defData->specialWire_routeStatusName = defData->shieldName; + } + } + } + | + { // since the parser still supports 5.3 and earlier, + // can't just move SHIELD in net_type + if (defData->VersionNum < 5.4) { // PCR 445209 + if (defData->callbacks->SNetCbk) defData->Net.addShield(defData->shieldName); + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->virtual_is_keyword = FALSE; + defData->mask_is_keyword = FALSE; + defData->rect_is_keyword = FALSE; + defData->specialWire_routeStatus = (char*)"ROUTED"; + defData->specialWire_routeStatusName = (char*)""; + defData->shield = TRUE; // save the path info in the defData->shield paths + } else + if (defData->callbacks->SNetCbk) defData->Net.addWire("SHIELD", defData->shieldName); + defData->specialWire_routeStatus = (char*)"ROUTED"; + defData->specialWire_routeStatusName = (char*)""; + } + spaths + { + // 7/17/2003 - Fix for pcr 604848, add a callback for each wire + if (defData->callbacks->SNetWireCbk) { + CALLBACK(defData->callbacks->SNetWireCbk, defrSNetWireCbkType, &defData->Net); + if (defData->VersionNum < 5.4) + defData->Net.freeShield(); + else + defData->Net.freeWire(); + } + if (defData->VersionNum < 5.4) { // PCR 445209 + defData->shield = FALSE; + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->nondef_is_keyword = FALSE; + defData->mustjoin_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->virtual_is_keyword = FALSE; + defData->mask_is_keyword = FALSE; + defData->rect_is_keyword = FALSE; + } else { + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->virtual_is_keyword = FALSE; + defData->mask_is_keyword = FALSE; + defData->rect_is_keyword = FALSE; + } + defData->needSNPCbk = 0; + } + +snet_width: '+' K_WIDTH { defData->dumb_mode = 1; } T_STRING NUMBER + { + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + if (defData->VersionNum < 5.5) { + if (defData->callbacks->SNetCbk) defData->Net.setWidth($4, $5); + } else { + defData->defWarning(7026, "The WIDTH statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement."); + } + } + +snet_voltage: '+' K_VOLTAGE { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defrData::numIsInt($4)) { + if (defData->callbacks->SNetCbk) defData->Net.setVoltage(atoi($4)); + } else { + if (defData->callbacks->SNetCbk) { + if (defData->sNetWarnings++ < defData->settings->SNetWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The value %s for statement VOLTAGE is invalid. The value can only be integer.\nSpecify a valid value in units of millivolts", $4); + defData->defError(6537, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + } + +snet_spacing: '+' K_SPACING { defData->dumb_mode = 1; } T_STRING NUMBER + { + if (defData->callbacks->SNetCbk) defData->Net.setSpacing($4,$5); + } + opt_snet_range + { + } + +snet_prop_list: snet_prop + | snet_prop_list snet_prop + ; + +snet_prop: T_STRING NUMBER + { + if (defData->callbacks->SNetCbk) { + char propTp; + char* str = defData->ringCopy(" "); + propTp = defData->session->SNetProp.propType($1); + CHKPROPTYPE(propTp, $1, "SPECIAL NET"); + // For backword compatibility, also set the string value + sprintf(str, "%g", $2); + defData->Net.addNumProp($1, $2, str, propTp); + } + } + | T_STRING QSTRING + { + if (defData->callbacks->SNetCbk) { + char propTp; + propTp = defData->session->SNetProp.propType($1); + CHKPROPTYPE(propTp, $1, "SPECIAL NET"); + defData->Net.addProp($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (defData->callbacks->SNetCbk) { + char propTp; + propTp = defData->session->SNetProp.propType($1); + CHKPROPTYPE(propTp, $1, "SPECIAL NET"); + defData->Net.addProp($1, $2, propTp); + } + } + +opt_snet_range: // nothing + | K_RANGE NUMBER NUMBER + { + if (defData->callbacks->SNetCbk) defData->Net.setRange($2,$3); + } + +opt_range: // nothing + | K_RANGE NUMBER NUMBER + { defData->Prop.setRange($2, $3); } + +pattern_type: K_BALANCED + { $$ = (char*)"BALANCED"; } + | K_STEINER + { $$ = (char*)"STEINER"; } + | K_TRUNK + { $$ = (char*)"TRUNK"; } + | K_WIREDLOGIC + { $$ = (char*)"WIREDLOGIC"; } + +spaths: + spath + { + if (defData->NeedPathData && defData->callbacks->SNetCbk) { + if (defData->needSNPCbk && defData->callbacks->SNetPartialPathCbk) { + // require a callback before proceed because defData->needSNPCbk must be + // set to 1 from the previous pathIsDone and user has registered + // a callback routine. + CALLBACK(defData->callbacks->SNetPartialPathCbk, defrSNetPartialPathCbkType, + &defData->Net); + defData->needSNPCbk = 0; // reset the flag + defData->pathIsDone(defData->shield, 1, defData->netOsnet, &defData->needSNPCbk); + defData->Net.clearRectPolyNPath(); + defData->Net.clearVia(); + } else + defData->pathIsDone(defData->shield, 0, defData->netOsnet, &defData->needSNPCbk); + } + } + | spaths snew_path + { } + +snew_path: K_NEW { defData->dumb_mode = 1; } spath + { if (defData->NeedPathData && defData->callbacks->SNetCbk) { + if (defData->needSNPCbk && defData->callbacks->SNetPartialPathCbk) { + // require a callback before proceed because defData->needSNPCbk must be + // set to 1 from the previous pathIsDone and user has registered + // a callback routine. + CALLBACK(defData->callbacks->SNetPartialPathCbk, defrSNetPartialPathCbkType, + &defData->Net); + defData->needSNPCbk = 0; // reset the flag + defData->pathIsDone(defData->shield, 1, defData->netOsnet, &defData->needSNPCbk); + // reset any poly or rect in special wiring statement + defData->Net.clearRectPolyNPath(); + defData->Net.clearVia(); + } else + defData->pathIsDone(defData->shield, 0, defData->netOsnet, &defData->needSNPCbk); + } + } + +spath: T_STRING + { if (defData->NeedPathData && defData->callbacks->SNetCbk) + defData->PathObj.addLayer($1); + defData->dumb_mode = 0; defData->no_num = 0; + } + width opt_spaths path_pt +/* + { dumb_mode = 1; new_is_keyword = TRUE; } +*/ + { defData->dumb_mode = DEF_MAX_INT; defData->by_is_keyword = TRUE; defData->do_is_keyword = TRUE; + defData->new_is_keyword = TRUE; defData->step_is_keyword = TRUE; + defData->orient_is_keyword = TRUE; defData->rect_is_keyword = TRUE, defData->mask_is_keyword = TRUE; + defData->virtual_is_keyword = TRUE; } + + path_item_list + { defData->dumb_mode = 0; defData->rect_is_keyword = FALSE, defData->mask_is_keyword = FALSE, defData->virtual_is_keyword = FALSE; } + +width: NUMBER + { if (defData->NeedPathData && defData->callbacks->SNetCbk) + defData->PathObj.addWidth(ROUND($1)); + } + +start_snets: K_SNETS NUMBER ';' + { + if (defData->callbacks->SNetStartCbk) + CALLBACK(defData->callbacks->SNetStartCbk, defrSNetStartCbkType, ROUND($2)); + defData->netOsnet = 2; + } + +end_snets: K_END K_SNETS + { + if (defData->callbacks->SNetEndCbk) + CALLBACK(defData->callbacks->SNetEndCbk, defrSNetEndCbkType, 0); + defData->netOsnet = 0; + } + +groups_section: groups_start group_rules groups_end + ; + +groups_start: K_GROUPS NUMBER ';' + { + if (defData->callbacks->GroupsStartCbk) + CALLBACK(defData->callbacks->GroupsStartCbk, defrGroupsStartCbkType, ROUND($2)); + } + +group_rules: // empty + | group_rules group_rule + ; + +group_rule: start_group group_members group_options ';' + { + if (defData->callbacks->GroupCbk) + CALLBACK(defData->callbacks->GroupCbk, defrGroupCbkType, &defData->Group); + } + +start_group: '-' { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + defData->dumb_mode = DEF_MAX_INT; + defData->no_num = DEF_MAX_INT; + /* dumb_mode is automatically turned off at the first + * + in the options or at the ; at the end of the group */ + if (defData->callbacks->GroupCbk) defData->Group.setup($3); + if (defData->callbacks->GroupNameCbk) + CALLBACK(defData->callbacks->GroupNameCbk, defrGroupNameCbkType, $3); + } + +group_members: + | group_members group_member + { } + +group_member: T_STRING + { + // if (defData->callbacks->GroupCbk) defData->Group.addMember($1); + if (defData->callbacks->GroupMemberCbk) + CALLBACK(defData->callbacks->GroupMemberCbk, defrGroupMemberCbkType, $1); + } + +group_options: // empty + | group_options group_option + ; + +group_option: '+' K_SOFT group_soft_options + { } + | '+' K_PROPERTY { defData->dumb_mode = DEF_MAX_INT; } + group_prop_list + { defData->dumb_mode = 0; } + | '+' K_REGION { defData->dumb_mode = 1; defData->no_num = 1; } group_region + { } + | extension_stmt + { + if (defData->callbacks->GroupMemberCbk) + CALLBACK(defData->callbacks->GroupExtCbk, defrGroupExtCbkType, &defData->History_text[0]); + } + +group_region: pt pt + { + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + if (defData->VersionNum < 5.5) { + if (defData->callbacks->GroupCbk) + defData->Group.addRegionRect($1.x, $1.y, $2.x, $2.y); + } + else + defData->defWarning(7027, "The GROUP REGION pt pt statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement."); + } + | T_STRING + { if (defData->callbacks->GroupCbk) + defData->Group.setRegionName($1); + } + +group_prop_list : // empty + | group_prop_list group_prop + ; + +group_prop : T_STRING NUMBER + { + if (defData->callbacks->GroupCbk) { + char propTp; + char* str = defData->ringCopy(" "); + propTp = defData->session->GroupProp.propType($1); + CHKPROPTYPE(propTp, $1, "GROUP"); + sprintf(str, "%g", $2); + defData->Group.addNumProperty($1, $2, str, propTp); + } + } + | T_STRING QSTRING + { + if (defData->callbacks->GroupCbk) { + char propTp; + propTp = defData->session->GroupProp.propType($1); + CHKPROPTYPE(propTp, $1, "GROUP"); + defData->Group.addProperty($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (defData->callbacks->GroupCbk) { + char propTp; + propTp = defData->session->GroupProp.propType($1); + CHKPROPTYPE(propTp, $1, "GROUP"); + defData->Group.addProperty($1, $2, propTp); + } + } + +group_soft_options: // empty + | group_soft_options group_soft_option + { } + +group_soft_option: K_MAXX NUMBER + { + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + if (defData->VersionNum < 5.5) { + if (defData->callbacks->GroupCbk) defData->Group.setMaxX(ROUND($2)); + } else { + defData->defWarning(7028, "The GROUP SOFT MAXX statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement."); + } + } + | K_MAXY NUMBER + { + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + if (defData->VersionNum < 5.5) { + if (defData->callbacks->GroupCbk) defData->Group.setMaxY(ROUND($2)); + } else { + defData->defWarning(7029, "The GROUP SOFT MAXY statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement."); + } + } + | K_MAXHALFPERIMETER NUMBER + { + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + if (defData->VersionNum < 5.5) { + if (defData->callbacks->GroupCbk) defData->Group.setPerim(ROUND($2)); + } else { + defData->defWarning(7030, "The GROUP SOFT MAXHALFPERIMETER statement is obsolete in version 5.5 and later.\nThe DEF parser will ignore this statement."); + } + } + +groups_end: K_END K_GROUPS + { + if (defData->callbacks->GroupsEndCbk) + CALLBACK(defData->callbacks->GroupsEndCbk, defrGroupsEndCbkType, 0); + } + +// 8/31/2001 - This is obsolete in 5.4 +assertions_section: assertions_start constraint_rules assertions_end + ; + +// 8/31/2001 - This is obsolete in 5.4 +constraint_section: constraints_start constraint_rules constraints_end + ; + +assertions_start: K_ASSERTIONS NUMBER ';' + { + if ((defData->VersionNum < 5.4) && (defData->callbacks->AssertionsStartCbk)) { + CALLBACK(defData->callbacks->AssertionsStartCbk, defrAssertionsStartCbkType, + ROUND($2)); + } else { + if (defData->callbacks->AssertionCbk) + if (defData->assertionWarnings++ < defData->settings->AssertionWarnings) + defData->defWarning(7031, "The ASSERTIONS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement."); + } + if (defData->callbacks->AssertionCbk) + defData->Assertion.setAssertionMode(); + } + +constraints_start: K_CONSTRAINTS NUMBER ';' + { + if ((defData->VersionNum < 5.4) && (defData->callbacks->ConstraintsStartCbk)) { + CALLBACK(defData->callbacks->ConstraintsStartCbk, defrConstraintsStartCbkType, + ROUND($2)); + } else { + if (defData->callbacks->ConstraintCbk) + if (defData->constraintWarnings++ < defData->settings->ConstraintWarnings) + defData->defWarning(7032, "The CONSTRAINTS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement."); + } + if (defData->callbacks->ConstraintCbk) + defData->Assertion.setConstraintMode(); + } + +constraint_rules: // empty + | constraint_rules constraint_rule + ; + +constraint_rule: operand_rule + | wiredlogic_rule + { + if ((defData->VersionNum < 5.4) && (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk)) { + if (defData->Assertion.isConstraint()) + CALLBACK(defData->callbacks->ConstraintCbk, defrConstraintCbkType, &defData->Assertion); + if (defData->Assertion.isAssertion()) + CALLBACK(defData->callbacks->AssertionCbk, defrAssertionCbkType, &defData->Assertion); + } + } + +operand_rule: '-' operand delay_specs ';' + { + if ((defData->VersionNum < 5.4) && (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk)) { + if (defData->Assertion.isConstraint()) + CALLBACK(defData->callbacks->ConstraintCbk, defrConstraintCbkType, &defData->Assertion); + if (defData->Assertion.isAssertion()) + CALLBACK(defData->callbacks->AssertionCbk, defrAssertionCbkType, &defData->Assertion); + } + + // reset all the flags and everything + defData->Assertion.clear(); + } + +operand: K_NET { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.addNet($3); + } + | K_PATH {defData->dumb_mode = 4; defData->no_num = 4;} T_STRING T_STRING T_STRING T_STRING + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.addPath($3, $4, $5, $6); + } + | K_SUM '(' operand_list ')' + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.setSum(); + } + | K_DIFF '(' operand_list ')' + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.setDiff(); + } + +operand_list: operand + | operand_list operand + { } + | operand_list ',' operand + +wiredlogic_rule: '-' K_WIREDLOGIC { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + opt_plus K_MAXDIST NUMBER ';' + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.setWiredlogic($4, $7); + } + +opt_plus: + // empty + { $$ = (char*)""; } + | '+' + { $$ = (char*)"+"; } + +delay_specs: // empty + | delay_specs delay_spec + ; + +delay_spec: '+' K_RISEMIN NUMBER + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.setRiseMin($3); + } + | '+' K_RISEMAX NUMBER + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.setRiseMax($3); + } + | '+' K_FALLMIN NUMBER + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.setFallMin($3); + } + | '+' K_FALLMAX NUMBER + { + if (defData->callbacks->ConstraintCbk || defData->callbacks->AssertionCbk) + defData->Assertion.setFallMax($3); + } + +constraints_end: K_END K_CONSTRAINTS + { if ((defData->VersionNum < 5.4) && defData->callbacks->ConstraintsEndCbk) { + CALLBACK(defData->callbacks->ConstraintsEndCbk, defrConstraintsEndCbkType, 0); + } else { + if (defData->callbacks->ConstraintsEndCbk) { + if (defData->constraintWarnings++ < defData->settings->ConstraintWarnings) + defData->defWarning(7032, "The CONSTRAINTS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement."); + } + } + } + +assertions_end: K_END K_ASSERTIONS + { if ((defData->VersionNum < 5.4) && defData->callbacks->AssertionsEndCbk) { + CALLBACK(defData->callbacks->AssertionsEndCbk, defrAssertionsEndCbkType, 0); + } else { + if (defData->callbacks->AssertionsEndCbk) { + if (defData->assertionWarnings++ < defData->settings->AssertionWarnings) + defData->defWarning(7031, "The ASSERTIONS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement."); + } + } + } + +scanchains_section: scanchain_start scanchain_rules scanchain_end + ; + +scanchain_start: K_SCANCHAINS NUMBER ';' + { if (defData->callbacks->ScanchainsStartCbk) + CALLBACK(defData->callbacks->ScanchainsStartCbk, defrScanchainsStartCbkType, + ROUND($2)); + } + +scanchain_rules: // empty + | scanchain_rules scan_rule + {} + +scan_rule: start_scan scan_members ';' + { + if (defData->callbacks->ScanchainCbk) + CALLBACK(defData->callbacks->ScanchainCbk, defrScanchainCbkType, &defData->Scanchain); + } + +start_scan: '-' {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING + { + if (defData->callbacks->ScanchainCbk) + defData->Scanchain.setName($3); + defData->bit_is_keyword = TRUE; + } + +scan_members: + | scan_members scan_member + ; + +opt_pin : + // empty + { $$ = (char*)""; } + | T_STRING + { $$ = $1; } + +scan_member: '+' K_START {defData->dumb_mode = 2; defData->no_num = 2;} T_STRING opt_pin + { if (defData->callbacks->ScanchainCbk) + defData->Scanchain.setStart($4, $5); + } + | '+' K_FLOATING { defData->dumb_mode = 1; defData->no_num = 1; } floating_inst_list + { defData->dumb_mode = 0; defData->no_num = 0; } + | '+' K_ORDERED + { + defData->dumb_mode = 1; + defData->no_num = 1; + if (defData->callbacks->ScanchainCbk) + defData->Scanchain.addOrderedList(); + } + ordered_inst_list + { defData->dumb_mode = 0; defData->no_num = 0; } + | '+' K_STOP {defData->dumb_mode = 2; defData->no_num = 2; } T_STRING opt_pin + { if (defData->callbacks->ScanchainCbk) + defData->Scanchain.setStop($4, $5); + } + | '+' K_COMMONSCANPINS { defData->dumb_mode = 10; defData->no_num = 10; } opt_common_pins + { defData->dumb_mode = 0; defData->no_num = 0; } + | '+' K_PARTITION { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING // 5.5 + partition_maxbits + { + if (defData->VersionNum < 5.5) { + if (defData->callbacks->ScanchainCbk) { + if (defData->scanchainWarnings++ < defData->settings->ScanchainWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The PARTITION statement is available in version 5.5 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6538, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } + if (defData->callbacks->ScanchainCbk) + defData->Scanchain.setPartition($4, $5); + } + | extension_stmt + { + if (defData->callbacks->ScanChainExtCbk) + CALLBACK(defData->callbacks->ScanChainExtCbk, defrScanChainExtCbkType, &defData->History_text[0]); + } + +opt_common_pins: // empty + { } + | '(' T_STRING T_STRING ')' + { + if (defData->callbacks->ScanchainCbk) { + if (strcmp($2, "IN") == 0 || strcmp($2, "in") == 0) + defData->Scanchain.setCommonIn($3); + else if (strcmp($2, "OUT") == 0 || strcmp($2, "out") == 0) + defData->Scanchain.setCommonOut($3); + } + } + | '(' T_STRING T_STRING ')' '(' T_STRING T_STRING ')' + { + if (defData->callbacks->ScanchainCbk) { + if (strcmp($2, "IN") == 0 || strcmp($2, "in") == 0) + defData->Scanchain.setCommonIn($3); + else if (strcmp($2, "OUT") == 0 || strcmp($2, "out") == 0) + defData->Scanchain.setCommonOut($3); + if (strcmp($6, "IN") == 0 || strcmp($6, "in") == 0) + defData->Scanchain.setCommonIn($7); + else if (strcmp($6, "OUT") == 0 || strcmp($6, "out") == 0) + defData->Scanchain.setCommonOut($7); + } + } + +floating_inst_list: // empty + | floating_inst_list one_floating_inst + ; + +one_floating_inst: T_STRING + { + defData->dumb_mode = 1000; + defData->no_num = 1000; + if (defData->callbacks->ScanchainCbk) + defData->Scanchain.addFloatingInst($1); + } + floating_pins + { defData->dumb_mode = 1; defData->no_num = 1; } + +floating_pins: // empty + { } + | '(' T_STRING T_STRING ')' + { + if (defData->callbacks->ScanchainCbk) { + if (strcmp($2, "IN") == 0 || strcmp($2, "in") == 0) + defData->Scanchain.addFloatingIn($3); + else if (strcmp($2, "OUT") == 0 || strcmp($2, "out") == 0) + defData->Scanchain.addFloatingOut($3); + else if (strcmp($2, "BITS") == 0 || strcmp($2, "bits") == 0) { + defData->bitsNum = atoi($3); + defData->Scanchain.setFloatingBits(defData->bitsNum); + } + } + } + | '(' T_STRING T_STRING ')' '(' T_STRING T_STRING ')' + { + if (defData->callbacks->ScanchainCbk) { + if (strcmp($2, "IN") == 0 || strcmp($2, "in") == 0) + defData->Scanchain.addFloatingIn($3); + else if (strcmp($2, "OUT") == 0 || strcmp($2, "out") == 0) + defData->Scanchain.addFloatingOut($3); + else if (strcmp($2, "BITS") == 0 || strcmp($2, "bits") == 0) { + defData->bitsNum = atoi($3); + defData->Scanchain.setFloatingBits(defData->bitsNum); + } + if (strcmp($6, "IN") == 0 || strcmp($6, "in") == 0) + defData->Scanchain.addFloatingIn($7); + else if (strcmp($6, "OUT") == 0 || strcmp($6, "out") == 0) + defData->Scanchain.addFloatingOut($7); + else if (strcmp($6, "BITS") == 0 || strcmp($6, "bits") == 0) { + defData->bitsNum = atoi($7); + defData->Scanchain.setFloatingBits(defData->bitsNum); + } + } + } + | '(' T_STRING T_STRING ')' '(' T_STRING T_STRING ')' '(' T_STRING + T_STRING ')' + { + if (defData->callbacks->ScanchainCbk) { + if (strcmp($2, "IN") == 0 || strcmp($2, "in") == 0) + defData->Scanchain.addFloatingIn($3); + else if (strcmp($2, "OUT") == 0 || strcmp($2, "out") == 0) + defData->Scanchain.addFloatingOut($3); + else if (strcmp($2, "BITS") == 0 || strcmp($2, "bits") == 0) { + defData->bitsNum = atoi($3); + defData->Scanchain.setFloatingBits(defData->bitsNum); + } + if (strcmp($6, "IN") == 0 || strcmp($6, "in") == 0) + defData->Scanchain.addFloatingIn($7); + else if (strcmp($6, "OUT") == 0 || strcmp($6, "out") == 0) + defData->Scanchain.addFloatingOut($7); + else if (strcmp($6, "BITS") == 0 || strcmp($6, "bits") == 0) { + defData->bitsNum = atoi($7); + defData->Scanchain.setFloatingBits(defData->bitsNum); + } + if (strcmp($10, "IN") == 0 || strcmp($10, "in") == 0) + defData->Scanchain.addFloatingIn($11); + else if (strcmp($10, "OUT") == 0 || strcmp($10, "out") == 0) + defData->Scanchain.addFloatingOut($11); + else if (strcmp($10, "BITS") == 0 || strcmp($10, "bits") == 0) { + defData->bitsNum = atoi($11); + defData->Scanchain.setFloatingBits(defData->bitsNum); + } + } + } + +ordered_inst_list: // empty + | ordered_inst_list one_ordered_inst + ; + +one_ordered_inst: T_STRING + { defData->dumb_mode = 1000; defData->no_num = 1000; + if (defData->callbacks->ScanchainCbk) + defData->Scanchain.addOrderedInst($1); + } + ordered_pins + { defData->dumb_mode = 1; defData->no_num = 1; } + +ordered_pins: // empty + { } + | '(' T_STRING T_STRING ')' + { + if (defData->callbacks->ScanchainCbk) { + if (strcmp($2, "IN") == 0 || strcmp($2, "in") == 0) + defData->Scanchain.addOrderedIn($3); + else if (strcmp($2, "OUT") == 0 || strcmp($2, "out") == 0) + defData->Scanchain.addOrderedOut($3); + else if (strcmp($2, "BITS") == 0 || strcmp($2, "bits") == 0) { + defData->bitsNum = atoi($3); + defData->Scanchain.setOrderedBits(defData->bitsNum); + } + } + } + | '(' T_STRING T_STRING ')' '(' T_STRING T_STRING ')' + { + if (defData->callbacks->ScanchainCbk) { + if (strcmp($2, "IN") == 0 || strcmp($2, "in") == 0) + defData->Scanchain.addOrderedIn($3); + else if (strcmp($2, "OUT") == 0 || strcmp($2, "out") == 0) + defData->Scanchain.addOrderedOut($3); + else if (strcmp($2, "BITS") == 0 || strcmp($2, "bits") == 0) { + defData->bitsNum = atoi($3); + defData->Scanchain.setOrderedBits(defData->bitsNum); + } + if (strcmp($6, "IN") == 0 || strcmp($6, "in") == 0) + defData->Scanchain.addOrderedIn($7); + else if (strcmp($6, "OUT") == 0 || strcmp($6, "out") == 0) + defData->Scanchain.addOrderedOut($7); + else if (strcmp($6, "BITS") == 0 || strcmp($6, "bits") == 0) { + defData->bitsNum = atoi($7); + defData->Scanchain.setOrderedBits(defData->bitsNum); + } + } + } + | '(' T_STRING T_STRING ')' '(' T_STRING T_STRING ')' '(' T_STRING + T_STRING ')' + { + if (defData->callbacks->ScanchainCbk) { + if (strcmp($2, "IN") == 0 || strcmp($2, "in") == 0) + defData->Scanchain.addOrderedIn($3); + else if (strcmp($2, "OUT") == 0 || strcmp($2, "out") == 0) + defData->Scanchain.addOrderedOut($3); + else if (strcmp($2, "BITS") == 0 || strcmp($2, "bits") == 0) { + defData->bitsNum = atoi($3); + defData->Scanchain.setOrderedBits(defData->bitsNum); + } + if (strcmp($6, "IN") == 0 || strcmp($6, "in") == 0) + defData->Scanchain.addOrderedIn($7); + else if (strcmp($6, "OUT") == 0 || strcmp($6, "out") == 0) + defData->Scanchain.addOrderedOut($7); + else if (strcmp($6, "BITS") == 0 || strcmp($6, "bits") == 0) { + defData->bitsNum = atoi($7); + defData->Scanchain.setOrderedBits(defData->bitsNum); + } + if (strcmp($10, "IN") == 0 || strcmp($10, "in") == 0) + defData->Scanchain.addOrderedIn($11); + else if (strcmp($10, "OUT") == 0 || strcmp($10, "out") == 0) + defData->Scanchain.addOrderedOut($11); + else if (strcmp($10, "BITS") == 0 || strcmp($10, "bits") == 0) { + defData->bitsNum = atoi($11); + defData->Scanchain.setOrderedBits(defData->bitsNum); + } + } + } + +partition_maxbits: // empty + { $$ = -1; } + | K_MAXBITS NUMBER + { $$ = ROUND($2); } + +scanchain_end: K_END K_SCANCHAINS + { + if (defData->callbacks->ScanchainsEndCbk) + CALLBACK(defData->callbacks->ScanchainsEndCbk, defrScanchainsEndCbkType, 0); + defData->bit_is_keyword = FALSE; + defData->dumb_mode = 0; defData->no_num = 0; + } + +// 8/31/2001 - This is obsolete in 5.4 +iotiming_section: iotiming_start iotiming_rules iotiming_end + ; + +iotiming_start: K_IOTIMINGS NUMBER ';' + { + if (defData->VersionNum < 5.4 && defData->callbacks->IOTimingsStartCbk) { + CALLBACK(defData->callbacks->IOTimingsStartCbk, defrIOTimingsStartCbkType, ROUND($2)); + } else { + if (defData->callbacks->IOTimingsStartCbk) + if (defData->iOTimingWarnings++ < defData->settings->IOTimingWarnings) + defData->defWarning(7035, "The IOTIMINGS statement is obsolete in version 5.4 and later.\nThe DEF parser will ignore this statement."); + } + } + +iotiming_rules: // empty + | iotiming_rules iotiming_rule + { } + +iotiming_rule: start_iotiming iotiming_members ';' + { + if (defData->VersionNum < 5.4 && defData->callbacks->IOTimingCbk) + CALLBACK(defData->callbacks->IOTimingCbk, defrIOTimingCbkType, &defData->IOTiming); + } + +start_iotiming: '-' '(' {defData->dumb_mode = 2; defData->no_num = 2; } T_STRING T_STRING ')' + { + if (defData->callbacks->IOTimingCbk) + defData->IOTiming.setName($4, $5); + } + +iotiming_members: + | iotiming_members iotiming_member + ; + +iotiming_member: + '+' risefall K_VARIABLE NUMBER NUMBER + { + if (defData->callbacks->IOTimingCbk) + defData->IOTiming.setVariable($2, $4, $5); + } + | '+' risefall K_SLEWRATE NUMBER NUMBER + { + if (defData->callbacks->IOTimingCbk) + defData->IOTiming.setSlewRate($2, $4, $5); + } + | '+' K_CAPACITANCE NUMBER + { + if (defData->callbacks->IOTimingCbk) + defData->IOTiming.setCapacitance($3); + } + | '+' K_DRIVECELL {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->IOTimingCbk) + defData->IOTiming.setDriveCell($4); + } iotiming_drivecell_opt + // | '+' K_FROMPIN {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + + // | '+' K_PARALLEL NUMBER + + | extension_stmt + { + if (defData->VersionNum < 5.4 && defData->callbacks->IoTimingsExtCbk) + CALLBACK(defData->callbacks->IoTimingsExtCbk, defrIoTimingsExtCbkType, &defData->History_text[0]); + } + +iotiming_drivecell_opt: iotiming_frompin + K_TOPIN {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->IOTimingCbk) + defData->IOTiming.setTo($4); + } + iotiming_parallel + +iotiming_frompin: // empty + | K_FROMPIN {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->IOTimingCbk) + defData->IOTiming.setFrom($3); + } + +iotiming_parallel: // empty + | K_PARALLEL NUMBER + { + if (defData->callbacks->IOTimingCbk) + defData->IOTiming.setParallel($2); + } + +risefall: K_RISE { $$ = (char*)"RISE"; } | K_FALL { $$ = (char*)"FALL"; } + +iotiming_end: K_END K_IOTIMINGS + { + if (defData->VersionNum < 5.4 && defData->callbacks->IOTimingsEndCbk) + CALLBACK(defData->callbacks->IOTimingsEndCbk, defrIOTimingsEndCbkType, 0); + } + +floorplan_contraints_section: fp_start fp_stmts K_END K_FPC + { + if (defData->callbacks->FPCEndCbk) + CALLBACK(defData->callbacks->FPCEndCbk, defrFPCEndCbkType, 0); + } + +fp_start: K_FPC NUMBER ';' + { + if (defData->callbacks->FPCStartCbk) + CALLBACK(defData->callbacks->FPCStartCbk, defrFPCStartCbkType, ROUND($2)); + } + +fp_stmts: // empty + | fp_stmts fp_stmt + {} + +fp_stmt: '-' { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING h_or_v + { if (defData->callbacks->FPCCbk) defData->FPC.setName($3, $4); } + constraint_type constrain_what_list ';' + { if (defData->callbacks->FPCCbk) CALLBACK(defData->callbacks->FPCCbk, defrFPCCbkType, &defData->FPC); } + +h_or_v: K_HORIZONTAL + { $$ = (char*)"HORIZONTAL"; } + | K_VERTICAL + { $$ = (char*)"VERTICAL"; } + +constraint_type: K_ALIGN + { if (defData->callbacks->FPCCbk) defData->FPC.setAlign(); } + | K_MAX NUMBER + { if (defData->callbacks->FPCCbk) defData->FPC.setMax($2); } + | K_MIN NUMBER + { if (defData->callbacks->FPCCbk) defData->FPC.setMin($2); } + | K_EQUAL NUMBER + { if (defData->callbacks->FPCCbk) defData->FPC.setEqual($2); } + +constrain_what_list: // empty + | constrain_what_list constrain_what + ; + +constrain_what: '+' K_BOTTOMLEFT + { if (defData->callbacks->FPCCbk) defData->FPC.setDoingBottomLeft(); } + row_or_comp_list + | '+' K_TOPRIGHT + { if (defData->callbacks->FPCCbk) defData->FPC.setDoingTopRight(); } + row_or_comp_list + ; + +row_or_comp_list: // empty + | row_or_comp_list row_or_comp + +row_or_comp: '(' K_ROWS {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING ')' + { if (defData->callbacks->FPCCbk) defData->FPC.addRow($4); } + | '(' K_COMPS {defData->dumb_mode = 1; defData->no_num = 1; } T_STRING ')' + { if (defData->callbacks->FPCCbk) defData->FPC.addComps($4); } + +timingdisables_section: timingdisables_start timingdisables_rules + timingdisables_end + ; + +timingdisables_start: K_TIMINGDISABLES NUMBER ';' + { + if (defData->callbacks->TimingDisablesStartCbk) + CALLBACK(defData->callbacks->TimingDisablesStartCbk, defrTimingDisablesStartCbkType, + ROUND($2)); + } + +timingdisables_rules: // empty + | timingdisables_rules timingdisables_rule + {} + +timingdisables_rule: '-' K_FROMPIN { defData->dumb_mode = 2; defData->no_num = 2; } T_STRING + T_STRING K_TOPIN { defData->dumb_mode = 2; defData->no_num = 2; } T_STRING T_STRING ';' + { + if (defData->callbacks->TimingDisableCbk) { + defData->TimingDisable.setFromTo($4, $5, $8, $9); + CALLBACK(defData->callbacks->TimingDisableCbk, defrTimingDisableCbkType, + &defData->TimingDisable); + } + } + | '-' K_THRUPIN {defData->dumb_mode = 2; defData->no_num = 2; } T_STRING T_STRING ';' + { + if (defData->callbacks->TimingDisableCbk) { + defData->TimingDisable.setThru($4, $5); + CALLBACK(defData->callbacks->TimingDisableCbk, defrTimingDisableCbkType, + &defData->TimingDisable); + } + } + | '-' K_MACRO {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING td_macro_option ';' + { + if (defData->callbacks->TimingDisableCbk) { + defData->TimingDisable.setMacro($4); + CALLBACK(defData->callbacks->TimingDisableCbk, defrTimingDisableCbkType, + &defData->TimingDisable); + } + } + | '-' K_REENTRANTPATHS ';' + { if (defData->callbacks->TimingDisableCbk) + defData->TimingDisable.setReentrantPathsFlag(); + } + + +td_macro_option: K_FROMPIN {defData->dumb_mode = 1; defData->no_num = 1;} T_STRING K_TOPIN + {defData->dumb_mode=1; defData->no_num = 1;} T_STRING + { + if (defData->callbacks->TimingDisableCbk) + defData->TimingDisable.setMacroFromTo($3,$6); + } + | K_THRUPIN {defData->dumb_mode=1; defData->no_num = 1;} T_STRING + { + if (defData->callbacks->TimingDisableCbk) + defData->TimingDisable.setMacroThru($3); + } + +timingdisables_end: K_END K_TIMINGDISABLES + { + if (defData->callbacks->TimingDisablesEndCbk) + CALLBACK(defData->callbacks->TimingDisablesEndCbk, defrTimingDisablesEndCbkType, 0); + } + + +partitions_section: partitions_start partition_rules partitions_end + ; + +partitions_start: K_PARTITIONS NUMBER ';' + { + if (defData->callbacks->PartitionsStartCbk) + CALLBACK(defData->callbacks->PartitionsStartCbk, defrPartitionsStartCbkType, + ROUND($2)); + } + +partition_rules: // empty + | partition_rules partition_rule + { } + +partition_rule: start_partition partition_members ';' + { + if (defData->callbacks->PartitionCbk) + CALLBACK(defData->callbacks->PartitionCbk, defrPartitionCbkType, &defData->Partition); + } + +start_partition: '-' { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING turnoff + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setName($3); + } + +turnoff: // empty + | K_TURNOFF turnoff_setup turnoff_hold + { + if (defData->callbacks->PartitionCbk) + defData->Partition.addTurnOff($2, $3); + } + +turnoff_setup: // empty + { $$ = (char*)" "; } + | K_SETUPRISE + { $$ = (char*)"R"; } + | K_SETUPFALL + { $$ = (char*)"F"; } + +turnoff_hold: // empty + { $$ = (char*)" "; } + | K_HOLDRISE + { $$ = (char*)"R"; } + | K_HOLDFALL + { $$ = (char*)"F"; } + +partition_members: // empty + | partition_members partition_member + ; + +partition_member: '+' K_FROMCLOCKPIN {defData->dumb_mode=2; defData->no_num = 2;} + T_STRING T_STRING risefall minmaxpins + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setFromClockPin($4, $5); + } + | '+' K_FROMCOMPPIN {defData->dumb_mode=2; defData->no_num = 2; } + T_STRING T_STRING risefallminmax2_list + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setFromCompPin($4, $5); + } + | '+' K_FROMIOPIN {defData->dumb_mode=1; defData->no_num = 1; } T_STRING + risefallminmax1_list + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setFromIOPin($4); + } + | '+' K_TOCLOCKPIN {defData->dumb_mode=2; defData->no_num = 2; } + T_STRING T_STRING risefall minmaxpins + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setToClockPin($4, $5); + } + | '+' K_TOCOMPPIN {defData->dumb_mode=2; defData->no_num = 2; } + T_STRING T_STRING risefallminmax2_list + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setToCompPin($4, $5); + } + | '+' K_TOIOPIN {defData->dumb_mode=1; defData->no_num = 2; } T_STRING risefallminmax1_list + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setToIOPin($4); + } + | extension_stmt + { + if (defData->callbacks->PartitionsExtCbk) + CALLBACK(defData->callbacks->PartitionsExtCbk, defrPartitionsExtCbkType, + &defData->History_text[0]); + } + +minmaxpins: min_or_max_list K_PINS + { defData->dumb_mode = DEF_MAX_INT; defData->no_num = DEF_MAX_INT; } pin_list + { defData->dumb_mode = 0; defData->no_num = 0; } + +min_or_max_list: // empty + | min_or_max_list min_or_max_member + { } + +min_or_max_member: K_MIN NUMBER NUMBER + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setMin($2, $3); + } + | K_MAX NUMBER NUMBER + { + if (defData->callbacks->PartitionCbk) + defData->Partition.setMax($2, $3); + } + +pin_list: // empty + | pin_list T_STRING + { if (defData->callbacks->PartitionCbk) defData->Partition.addPin($2); } + +risefallminmax1_list: // empty + | risefallminmax1_list risefallminmax1 + +risefallminmax1: K_RISEMIN NUMBER + { if (defData->callbacks->PartitionCbk) defData->Partition.addRiseMin($2); } + | K_FALLMIN NUMBER + { if (defData->callbacks->PartitionCbk) defData->Partition.addFallMin($2); } + | K_RISEMAX NUMBER + { if (defData->callbacks->PartitionCbk) defData->Partition.addRiseMax($2); } + | K_FALLMAX NUMBER + { if (defData->callbacks->PartitionCbk) defData->Partition.addFallMax($2); } + +risefallminmax2_list: + risefallminmax2 + | risefallminmax2_list risefallminmax2 + ; + +risefallminmax2: K_RISEMIN NUMBER NUMBER + { if (defData->callbacks->PartitionCbk) + defData->Partition.addRiseMinRange($2, $3); } + | K_FALLMIN NUMBER NUMBER + { if (defData->callbacks->PartitionCbk) + defData->Partition.addFallMinRange($2, $3); } + | K_RISEMAX NUMBER NUMBER + { if (defData->callbacks->PartitionCbk) + defData->Partition.addRiseMaxRange($2, $3); } + | K_FALLMAX NUMBER NUMBER + { if (defData->callbacks->PartitionCbk) + defData->Partition.addFallMaxRange($2, $3); } + +partitions_end: K_END K_PARTITIONS + { if (defData->callbacks->PartitionsEndCbk) + CALLBACK(defData->callbacks->PartitionsEndCbk, defrPartitionsEndCbkType, 0); } + +comp_names: // empty + | comp_names comp_name + { } + +comp_name: '(' {defData->dumb_mode=2; defData->no_num = 2; } T_STRING + T_STRING subnet_opt_syn ')' + { + // note that the defData->first T_STRING could be the keyword VPIN + if (defData->callbacks->NetCbk) + defData->Subnet->addPin($3, $4, $5); + } + +subnet_opt_syn: // empty + { $$ = 0; } + | '+' K_SYNTHESIZED + { $$ = 1; } + +subnet_options: // empty + | subnet_options subnet_option + +subnet_option: subnet_type + { + if (defData->callbacks->NetCbk) defData->Subnet->addWire($1); + } + paths + { + defData->by_is_keyword = FALSE; + defData->do_is_keyword = FALSE; + defData->new_is_keyword = FALSE; + defData->step_is_keyword = FALSE; + defData->orient_is_keyword = FALSE; + defData->needNPCbk = 0; + } + | K_NONDEFAULTRULE { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { if (defData->callbacks->NetCbk) defData->Subnet->setNonDefault($3); } + +subnet_type: K_FIXED + { $$ = (char*)"FIXED"; defData->dumb_mode = 1; } + | K_COVER + { $$ = (char*)"COVER"; defData->dumb_mode = 1; } + | K_ROUTED + { $$ = (char*)"ROUTED"; defData->dumb_mode = 1; } + | K_NOSHIELD + { $$ = (char*)"NOSHIELD"; defData->dumb_mode = 1; } + +pin_props_section: begin_pin_props pin_prop_list end_pin_props ; + +begin_pin_props: K_PINPROPERTIES NUMBER opt_semi + { if (defData->callbacks->PinPropStartCbk) + CALLBACK(defData->callbacks->PinPropStartCbk, defrPinPropStartCbkType, ROUND($2)); } + +opt_semi: + // empty + { } + | ';' + { } + +end_pin_props: K_END K_PINPROPERTIES + { if (defData->callbacks->PinPropEndCbk) + CALLBACK(defData->callbacks->PinPropEndCbk, defrPinPropEndCbkType, 0); } + +pin_prop_list: // empty + | pin_prop_list pin_prop_terminal + ; + +pin_prop_terminal: '-' { defData->dumb_mode = 2; defData->no_num = 2; } T_STRING T_STRING + { if (defData->callbacks->PinPropCbk) defData->PinProp.setName($3, $4); } + pin_prop_options ';' + { if (defData->callbacks->PinPropCbk) { + CALLBACK(defData->callbacks->PinPropCbk, defrPinPropCbkType, &defData->PinProp); + // reset the property number + defData->PinProp.clear(); + } + } + +pin_prop_options : // empty + | pin_prop_options pin_prop ; + +pin_prop: '+' K_PROPERTY { defData->dumb_mode = DEF_MAX_INT; } + pin_prop_name_value_list + { defData->dumb_mode = 0; } + +pin_prop_name_value_list : // empty + | pin_prop_name_value_list pin_prop_name_value + ; + +pin_prop_name_value : T_STRING NUMBER + { + if (defData->callbacks->PinPropCbk) { + char propTp; + char* str = defData->ringCopy(" "); + propTp = defData->session->CompPinProp.propType($1); + CHKPROPTYPE(propTp, $1, "PINPROPERTIES"); + sprintf(str, "%g", $2); + defData->PinProp.addNumProperty($1, $2, str, propTp); + } + } + | T_STRING QSTRING + { + if (defData->callbacks->PinPropCbk) { + char propTp; + propTp = defData->session->CompPinProp.propType($1); + CHKPROPTYPE(propTp, $1, "PINPROPERTIES"); + defData->PinProp.addProperty($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (defData->callbacks->PinPropCbk) { + char propTp; + propTp = defData->session->CompPinProp.propType($1); + CHKPROPTYPE(propTp, $1, "PINPROPERTIES"); + defData->PinProp.addProperty($1, $2, propTp); + } + } + +blockage_section: blockage_start blockage_defs blockage_end ; + +blockage_start: K_BLOCKAGES NUMBER ';' + { if (defData->callbacks->BlockageStartCbk) + CALLBACK(defData->callbacks->BlockageStartCbk, defrBlockageStartCbkType, ROUND($2)); } + +blockage_end: K_END K_BLOCKAGES + { if (defData->callbacks->BlockageEndCbk) + CALLBACK(defData->callbacks->BlockageEndCbk, defrBlockageEndCbkType, 0); } + +blockage_defs: // empty + | blockage_defs blockage_def + ; + +blockage_def: blockage_rule rectPoly_blockage rectPoly_blockage_rules + ';' + { + if (defData->callbacks->BlockageCbk) { + CALLBACK(defData->callbacks->BlockageCbk, defrBlockageCbkType, &defData->Blockage); + defData->Blockage.clear(); + } + } + +blockage_rule: '-' K_LAYER { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->BlockageCbk) { + if (defData->Blockage.hasPlacement() != 0) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6539, "Invalid BLOCKAGE statement defined in the DEF file. The BLOCKAGE statment has both the LAYER and the PLACEMENT statements defined.\nUpdate your DEF file to have either BLOCKAGE or PLACEMENT statement only."); + CHKERR(); + } + } + defData->Blockage.setLayer($4); + defData->Blockage.clearPoly(); // free poly, if any + } + defData->hasBlkLayerComp = 0; + defData->hasBlkLayerSpac = 0; + defData->hasBlkLayerTypeComp = 0; + } + + layer_blockage_rules + // 10/29/2001 - enhancement + | '-' K_PLACEMENT + { + if (defData->callbacks->BlockageCbk) { + if (defData->Blockage.hasLayer() != 0) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6539, "Invalid BLOCKAGE statement defined in the DEF file. The BLOCKAGE statment has both the LAYER and the PLACEMENT statements defined.\nUpdate your DEF file to have either BLOCKAGE or PLACEMENT statement only."); + CHKERR(); + } + } + defData->Blockage.setPlacement(); + defData->Blockage.clearPoly(); // free poly, if any + } + defData->hasBlkPlaceComp = 0; + defData->hasBlkPlaceTypeComp = 0; + } + placement_comp_rules + +layer_blockage_rules: // empty + | layer_blockage_rules layer_blockage_rule + ; + +layer_blockage_rule: '+' K_SPACING NUMBER + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The SPACING statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6540, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else if (defData->hasBlkLayerSpac) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6541, "The SPACING statement is defined in the LAYER statement,\nbut there is already either a SPACING statement or DESIGNRULEWIDTH statement has defined in the LAYER statement.\nUpdate your DEF file to have either SPACING statement or a DESIGNRULEWIDTH statement."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk) + defData->Blockage.setSpacing((int)$3); + defData->hasBlkLayerSpac = 1; + } + } + | '+' K_DESIGNRULEWIDTH NUMBER + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6541, "The SPACING statement is defined in the LAYER statement,\nbut there is already either a SPACING statement or DESIGNRULEWIDTH statement has defined in the LAYER statement.\nUpdate your DEF file to have either SPACING statement or a DESIGNRULEWIDTH statement."); + CHKERR(); + } + } + } else if (defData->hasBlkLayerSpac) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6541, "The SPACING statement is defined in the LAYER statement,\nbut there is already either a SPACING statement or DESIGNRULEWIDTH statement has defined in the LAYER statement.\nUpdate your DEF file to have either SPACING statement or a DESIGNRULEWIDTH statement."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk) + defData->Blockage.setDesignRuleWidth((int)$3); + defData->hasBlkLayerSpac = 1; + } + } + | mask_blockage_rule + | comp_blockage_rule + +mask_blockage_rule: + '+' K_MASK NUMBER + { + if (defData->validateMaskInput((int)$3, defData->blockageWarnings, defData->settings->BlockageWarnings)) { + defData->Blockage.setMask((int)$3); + } + } + +comp_blockage_rule: + // 06/20/2001 - pcr 383204 = pcr 378102 + '+' K_COMPONENT { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->hasBlkLayerComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6542, "The defined BLOCKAGES COMPONENT statement has either COMPONENT, SLOTS, FILLS, PUSHDOWN or EXCEPTPGNET defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES COMPONENT statement per layer."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk) { + defData->Blockage.setComponent($4); + } + if (defData->VersionNum < 5.8) { + defData->hasBlkLayerComp = 1; + } + } + } + // 8/30/2001 - pcr 394394 + | '+' K_SLOTS + { + if (defData->hasBlkLayerComp || defData->hasBlkLayerTypeComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6542, "The defined BLOCKAGES COMPONENT statement has either COMPONENT, SLOTS, FILLS, PUSHDOWN or EXCEPTPGNET defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES COMPONENT statement per layer."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk) { + defData->Blockage.setSlots(); + } + if (defData->VersionNum < 5.8) { + defData->hasBlkLayerComp = 1; + } + if (defData->VersionNum == 5.8) { + defData->hasBlkLayerTypeComp = 1; + } + } + } + | '+' K_FILLS + { + if (defData->hasBlkLayerComp || defData->hasBlkLayerTypeComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6542, "The defined BLOCKAGES COMPONENT statement has either COMPONENT, SLOTS, FILLS, PUSHDOWN or EXCEPTPGNET defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES COMPONENT statement per layer."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk){ + defData->Blockage.setFills(); + } + if (defData->VersionNum < 5.8) { + defData->hasBlkLayerComp = 1; + } + if (defData->VersionNum == 5.8) { + defData->hasBlkLayerTypeComp = 1; + } + } + } + | '+' K_PUSHDOWN + { + if (defData->hasBlkLayerComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6542, "The defined BLOCKAGES COMPONENT statement has either COMPONENT, SLOTS, FILLS, PUSHDOWN or EXCEPTPGNET defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES COMPONENT statement per layer."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk){ + defData->Blockage.setPushdown(); + } + if (defData->VersionNum < 5.8) { + defData->hasBlkLayerComp = 1; + } + } + } + | '+' K_EXCEPTPGNET // 5.7 + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The EXCEPTPGNET is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6549, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->hasBlkLayerComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6542, "The defined BLOCKAGES COMPONENT statement has either COMPONENT, SLOTS, FILLS, PUSHDOWN or EXCEPTPGNET defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES COMPONENT statement per layer."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk){ + defData->Blockage.setExceptpgnet(); + } + if (defData->VersionNum < 5.8){ + defData->hasBlkLayerComp = 1; + } + } + } + } + +placement_comp_rules: // empty + | placement_comp_rules placement_comp_rule + ; + +placement_comp_rule: // empty + // 10/29/2001 - enhancement + '+' K_COMPONENT { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->hasBlkPlaceComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6543, "The defined BLOCKAGES PLACEMENT statement has either COMPONENT, PUSHDOWN, SOFT or PARTIAL defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES PLACEMENT statement."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk){ + defData->Blockage.setComponent($4); + } + if (defData->VersionNum < 5.8) { + defData->hasBlkPlaceComp = 1; + } + } + } + | '+' K_PUSHDOWN + { + if (defData->hasBlkPlaceComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6543, "The defined BLOCKAGES PLACEMENT statement has either COMPONENT, PUSHDOWN, SOFT or PARTIAL defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES PLACEMENT statement."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk){ + defData->Blockage.setPushdown(); + } + if (defData->VersionNum < 5.8) { + defData->hasBlkPlaceComp = 1; + } + } + } + | '+' K_SOFT // 5.7 + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The PLACEMENT SOFT is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6547, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->hasBlkPlaceComp || defData->hasBlkPlaceTypeComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6543, "The defined BLOCKAGES PLACEMENT statement has either COMPONENT, PUSHDOWN, SOFT or PARTIAL defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES PLACEMENT statement."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk){ + defData->Blockage.setSoft(); + } + if (defData->VersionNum < 5.8) { + defData->hasBlkPlaceComp = 1; + } + if (defData->VersionNum == 5.8) { + defData->hasBlkPlaceTypeComp = 1; + } + } + } + } + | '+' K_PARTIAL NUMBER // 5.7 + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The PARTIAL is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6548, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->hasBlkPlaceComp || defData->hasBlkPlaceTypeComp) { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6543, "The defined BLOCKAGES PLACEMENT statement has either COMPONENT, PUSHDOWN, SOFT or PARTIAL defined.\nOnly one of these statements is allowed per LAYER. Updated the DEF file to define a valid BLOCKAGES PLACEMENT statement."); + CHKERR(); + } + } + } else { + if (defData->callbacks->BlockageCbk){ + defData->Blockage.setPartial($3); + } + if (defData->VersionNum < 5.8) { + defData->hasBlkPlaceComp = 1; + } + if (defData->VersionNum == 5.8) { + defData->hasBlkPlaceTypeComp = 1; + } + } + } + } + + +rectPoly_blockage_rules: // empty + | rectPoly_blockage_rules rectPoly_blockage + ; + +rectPoly_blockage: K_RECT pt pt + { + if (defData->callbacks->BlockageCbk) + defData->Blockage.addRect($2.x, $2.y, $3.x, $3.y); + } + | K_POLYGON + { + if (defData->callbacks->BlockageCbk) { + defData->Geometries.Reset(); + } + } + firstPt nextPt nextPt otherPts + { + if (defData->callbacks->BlockageCbk) { + if (defData->VersionNum >= 5.6) { // only 5.6 and beyond + if (defData->Blockage.hasLayer()) { // only in layer + if (defData->callbacks->BlockageCbk) + defData->Blockage.addPolygon(&defData->Geometries); + } else { + if (defData->callbacks->BlockageCbk) { + if (defData->blockageWarnings++ < defData->settings->BlockageWarnings) { + defData->defError(6544, "A POLYGON statement is defined in the BLOCKAGE statement,\nbut it is not defined in the BLOCKAGE LAYER statement.\nUpdate your DEF file to either remove the POLYGON statement from the BLOCKAGE statement or\ndefine the POLYGON statement in a BLOCKAGE LAYER statement."); + CHKERR(); + } + } + } + } + } + } + +// 8/31/2001 - 5.4 enhancement +slot_section: slot_start slot_defs slot_end ; + +slot_start: K_SLOTS NUMBER ';' + { if (defData->callbacks->SlotStartCbk) + CALLBACK(defData->callbacks->SlotStartCbk, defrSlotStartCbkType, ROUND($2)); } + +slot_end: K_END K_SLOTS + { if (defData->callbacks->SlotEndCbk) + CALLBACK(defData->callbacks->SlotEndCbk, defrSlotEndCbkType, 0); } + +slot_defs: // empty + | slot_defs slot_def + ; + +slot_def: slot_rule geom_slot_rules ';' + { + if (defData->callbacks->SlotCbk) { + CALLBACK(defData->callbacks->SlotCbk, defrSlotCbkType, &defData->Slot); + defData->Slot.clear(); + } + } + +slot_rule: '-' K_LAYER { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->SlotCbk) { + defData->Slot.setLayer($4); + defData->Slot.clearPoly(); // free poly, if any + } + } geom_slot + +geom_slot_rules: // empty + | geom_slot_rules geom_slot + ; + +geom_slot: K_RECT pt pt + { + if (defData->callbacks->SlotCbk) + defData->Slot.addRect($2.x, $2.y, $3.x, $3.y); + } + | K_POLYGON + { + defData->Geometries.Reset(); + } + firstPt nextPt nextPt otherPts + { + if (defData->VersionNum >= 5.6) { // only 5.6 and beyond + if (defData->callbacks->SlotCbk) + defData->Slot.addPolygon(&defData->Geometries); + } + } + +// 8/31/2001 - 5.4 enhancement +fill_section: fill_start fill_defs fill_end ; + +fill_start: K_FILLS NUMBER ';' + { if (defData->callbacks->FillStartCbk) + CALLBACK(defData->callbacks->FillStartCbk, defrFillStartCbkType, ROUND($2)); } + +fill_end: K_END K_FILLS + { if (defData->callbacks->FillEndCbk) + CALLBACK(defData->callbacks->FillEndCbk, defrFillEndCbkType, 0); } + +fill_defs: // empty + | fill_defs fill_def + ; + +fill_def: fill_rule geom_fill_rules ';' + { + if (defData->callbacks->FillCbk) { + CALLBACK(defData->callbacks->FillCbk, defrFillCbkType, &defData->Fill); + defData->Fill.clear(); + } + } + | '-' K_VIA { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING // 5.7 + { + if (defData->callbacks->FillCbk) { + defData->Fill.setVia($4); + defData->Fill.clearPts(); + defData->Geometries.Reset(); + } + } + fill_via_mask_opc_opt fill_via_pt ';' + +fill_rule: '-' K_LAYER { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->FillCbk) { + defData->Fill.setLayer($4); + defData->Fill.clearPoly(); // free poly, if any + } + } + fill_layer_mask_opc_opt geom_fill // 5.7 + +geom_fill_rules: // empty + | geom_fill_rules geom_fill + ; + +geom_fill: K_RECT pt pt + { + if (defData->callbacks->FillCbk) + defData->Fill.addRect($2.x, $2.y, $3.x, $3.y); + } + | K_POLYGON + { + defData->Geometries.Reset(); + } + firstPt nextPt nextPt otherPts + { + if (defData->VersionNum >= 5.6) { // only 5.6 and beyond + if (defData->callbacks->FillCbk) + defData->Fill.addPolygon(&defData->Geometries); + } else { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "POLYGON statement in FILLS LAYER is a version 5.6 and later syntax.\nYour def file is defined with version %g.", defData->VersionNum); + defData->defError(6564, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + +fill_layer_mask_opc_opt: // empty + | fill_layer_mask_opc_opt opt_mask_opc_l + ; +opt_mask_opc_l: fill_layer_opc + | fill_mask + ; + +// 5.7 +fill_layer_opc: + '+' K_OPC + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->FillCbk) { + if (defData->fillWarnings++ < defData->settings->FillWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The LAYER OPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6553, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->FillCbk) + defData->Fill.setLayerOpc(); + } + } + +fill_via_pt: firstPt otherPts + { + if (defData->callbacks->FillCbk) { + defData->Fill.addPts(&defData->Geometries); + CALLBACK(defData->callbacks->FillCbk, defrFillCbkType, &defData->Fill); + defData->Fill.clear(); + } + } + + +fill_via_mask_opc_opt: // empty + | fill_via_mask_opc_opt opt_mask_opc + ; +opt_mask_opc: fill_via_opc + | fill_viaMask + ; + +// 5.7 +fill_via_opc: + '+' K_OPC + { + if (defData->VersionNum < 5.7) { + if (defData->callbacks->FillCbk) { + if (defData->fillWarnings++ < defData->settings->FillWarnings) { + defData->defMsg = (char*)malloc(10000); + sprintf (defData->defMsg, + "The VIA OPC is available in version 5.7 or later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6554, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else { + if (defData->callbacks->FillCbk) + defData->Fill.setViaOpc(); + } + } + +fill_mask: + '+' K_MASK NUMBER + { + if (defData->validateMaskInput((int)$3, defData->fillWarnings, defData->settings->FillWarnings)) { + if (defData->callbacks->FillCbk) { + defData->Fill.setMask((int)$3); + } + } + } + +fill_viaMask: + '+' K_MASK NUMBER + { + if (defData->validateMaskInput((int)$3, defData->fillWarnings, defData->settings->FillWarnings)) { + if (defData->callbacks->FillCbk) { + defData->Fill.setMask((int)$3); + } + } + } + +// 11/17/2003 - 5.6 enhancement +nondefaultrule_section: nondefault_start nondefault_def nondefault_defs + nondefault_end ; + +nondefault_start: K_NONDEFAULTRULES NUMBER ';' + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->NonDefaultStartCbk) { + if (defData->nonDefaultWarnings++ < defData->settings->NonDefaultWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The NONDEFAULTRULE statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g.", defData->VersionNum); + defData->defError(6545, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else if (defData->callbacks->NonDefaultStartCbk) + CALLBACK(defData->callbacks->NonDefaultStartCbk, defrNonDefaultStartCbkType, + ROUND($2)); + } + +nondefault_end: K_END K_NONDEFAULTRULES + { if (defData->callbacks->NonDefaultEndCbk) + CALLBACK(defData->callbacks->NonDefaultEndCbk, defrNonDefaultEndCbkType, 0); } + +nondefault_defs: // empty + | nondefault_defs nondefault_def + ; + +nondefault_def: '-' { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->NonDefaultCbk) { + defData->NonDefault.clear(); + defData->NonDefault.setName($3); + } + } + nondefault_options ';' + { if (defData->callbacks->NonDefaultCbk) + CALLBACK(defData->callbacks->NonDefaultCbk, defrNonDefaultCbkType, &defData->NonDefault); } + +nondefault_options: // empty + | nondefault_options nondefault_option + ; + +nondefault_option: '+' K_HARDSPACING + { + if (defData->callbacks->NonDefaultCbk) + defData->NonDefault.setHardspacing(); + } + | '+' K_LAYER { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + K_WIDTH NUMBER + { + if (defData->callbacks->NonDefaultCbk) { + defData->NonDefault.addLayer($4); + defData->NonDefault.addWidth($6); + } + } + nondefault_layer_options + | '+' K_VIA { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->NonDefaultCbk) { + defData->NonDefault.addVia($4); + } + } + | '+' K_VIARULE { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING + { + if (defData->callbacks->NonDefaultCbk) { + defData->NonDefault.addViaRule($4); + } + } + | '+' K_MINCUTS { defData->dumb_mode = 1; defData->no_num = 1; } T_STRING NUMBER + { + if (defData->callbacks->NonDefaultCbk) { + defData->NonDefault.addMinCuts($4, (int)$5); + } + } + | nondefault_prop_opt + ; + +nondefault_layer_options: // empty + | nondefault_layer_options nondefault_layer_option + +nondefault_layer_option: + K_DIAGWIDTH NUMBER + { + if (defData->callbacks->NonDefaultCbk) { + defData->NonDefault.addDiagWidth($2); + } + } + | K_SPACING NUMBER + { + if (defData->callbacks->NonDefaultCbk) { + defData->NonDefault.addSpacing($2); + } + } + | K_WIREEXT NUMBER + { + if (defData->callbacks->NonDefaultCbk) { + defData->NonDefault.addWireExt($2); + } + } + ; + +nondefault_prop_opt: '+' K_PROPERTY { defData->dumb_mode = DEF_MAX_INT; } + nondefault_prop_list + { defData->dumb_mode = 0; } + +nondefault_prop_list: // empty + | nondefault_prop_list nondefault_prop + ; + +nondefault_prop: T_STRING NUMBER + { + if (defData->callbacks->NonDefaultCbk) { + char propTp; + char* str = defData->ringCopy(" "); + propTp = defData->session->NDefProp.propType($1); + CHKPROPTYPE(propTp, $1, "NONDEFAULTRULE"); + sprintf(str, "%g", $2); + defData->NonDefault.addNumProperty($1, $2, str, propTp); + } + } + | T_STRING QSTRING + { + if (defData->callbacks->NonDefaultCbk) { + char propTp; + propTp = defData->session->NDefProp.propType($1); + CHKPROPTYPE(propTp, $1, "NONDEFAULTRULE"); + defData->NonDefault.addProperty($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (defData->callbacks->NonDefaultCbk) { + char propTp; + propTp = defData->session->NDefProp.propType($1); + CHKPROPTYPE(propTp, $1, "NONDEFAULTRULE"); + defData->NonDefault.addProperty($1, $2, propTp); + } + } + +// 12/2/2003 - 5.6 enhancement +styles_section: styles_start styles_rules styles_end ; + +styles_start: K_STYLES NUMBER ';' + { + if (defData->VersionNum < 5.6) { + if (defData->callbacks->StylesStartCbk) { + if (defData->stylesWarnings++ < defData->settings->StylesWarnings) { + defData->defMsg = (char*)malloc(1000); + sprintf (defData->defMsg, + "The STYLES statement is available in version 5.6 and later.\nHowever, your DEF file is defined with version %g", defData->VersionNum); + defData->defError(6546, defData->defMsg); + free(defData->defMsg); + CHKERR(); + } + } + } else if (defData->callbacks->StylesStartCbk) + CALLBACK(defData->callbacks->StylesStartCbk, defrStylesStartCbkType, ROUND($2)); + } + +styles_end: K_END K_STYLES + { if (defData->callbacks->StylesEndCbk) + CALLBACK(defData->callbacks->StylesEndCbk, defrStylesEndCbkType, 0); } + +styles_rules: // empty + | styles_rules styles_rule + ; + +styles_rule: '-' K_STYLE NUMBER + { + if (defData->callbacks->StylesCbk) defData->Styles.setStyle((int)$3); + defData->Geometries.Reset(); + } + firstPt nextPt otherPts ';' + { + if (defData->VersionNum >= 5.6) { // only 5.6 and beyond will call the callback + if (defData->callbacks->StylesCbk) { + defData->Styles.setPolygon(&defData->Geometries); + CALLBACK(defData->callbacks->StylesCbk, defrStylesCbkType, &defData->Styles); + } + } + } + + +%% + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/def/def/def_keywords.cpp b/lefdef/src/def/def/def_keywords.cpp new file mode 100644 index 00000000..c29880bb --- /dev/null +++ b/lefdef/src/def/def/def_keywords.cpp @@ -0,0 +1,1363 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +/* */ +/* Revision: */ +/* 03-15-2000 Wanda da Rosa - Add code to support 5.4, add keywords */ +/* for PINS + USE, SPECIALNETS + SHAPE */ +/* and other keywords */ + +#include +#include +#include +#include "lex.h" +#include "defiDefs.hpp" +#include "defiDebug.hpp" +#include "defrCallBacks.hpp" +#include "defrData.hpp" +#include "defrSettings.hpp" + +#ifdef WIN32 +# include +#else /* not WIN32 */ +# include +#endif /* WIN32 */ + + +using namespace std; + +BEGIN_LEFDEF_PARSER_NAMESPACE + +#include "def.tab.h" + + +int defrData::defGetKeyword(const char* name, int *result) +{ + map::const_iterator search = settings->Keyword_set.find(name); + + if ( search != settings->Keyword_set.end()) { + *result = search->second; + return TRUE; + } + + return FALSE; +} + +int +defrData::defGetAlias(const string &name, string &result) +{ + map::iterator search = def_alias_set.find(name); + + if ( search != def_alias_set.end()) { + result = search->second; + return TRUE; + } + + return FALSE; +} + +int defrData::defGetDefine(const string &name, string &result) +{ + map::iterator search = def_defines_set.find(name); + + if ( search != def_defines_set.end()) { + result = search->second; + return TRUE; + } + + return FALSE; +} + +// lex.cpph starts here +/* User defined if log file should be in append from the previous run */ +/* User defined if property string value should be process */ +/* Varible from lex.cpph to keep track of invalid nonEnglish character */ +/* in def file */ + +/************Some simple file reading routines since ungetc() proves ****/ +/************to be quite slow, and we don't need multiple chars of pushback */ +#ifndef WIN32 +# include +#endif + +void +defrData::reload_buffer() { + int nb = 0; + + if (first_buffer) { + first_buffer = 0; + if (settings->ReadFunction) { + if ((nb = (*settings->ReadFunction)(File, buffer, 4)) != 4) { + next = NULL; + return; + } + } else { + if ((nb = fread(buffer, 1, 4, File)) != 4) { + next = NULL; + return; + } + } + } + + if (nb == 0) { + if (settings->ReadFunction) + nb = (*settings->ReadFunction)(File, buffer, IN_BUF_SIZE); + else + /* This is a normal file so just read some bytes. */ + nb = fread(buffer, 1, IN_BUF_SIZE, File); + } + + if (nb <= 0) { + next = NULL; + } else { + next = buffer; + last = buffer + nb - 1; + } +} + +int + defrData::GETC() { + // Remove '\r' symbols from Windows streams. + for(;;) { + if (next > last) + reload_buffer(); + if(next == NULL) + return EOF; + + int ch = *next++; + + if (ch != '\r') + return ch; + } +} + +void +defrData::UNGETC(char ch) { + if (next <= buffer) { + defError(6111, "UNGETC: buffer access violation."); + } else { + *(--next) = ch; + } +} + +/* Return a copy of the string allocated from the ring buffer. + * We will keep several strings in the buffer and just reuse them. + * This could cause problems if we need to use more strings than we + * have in the buffer. + */ +char* +defrData::ringCopy(const char* string) +{ + int len = strlen(string) + 1; + if (++(ringPlace) >= RING_SIZE) + ringPlace = 0; + if (len > ringSizes[ringPlace]) { + free(ring[ringPlace]); + ring[ringPlace] = (char*)malloc(len); + ringSizes[ringPlace] = len; + } + strcpy(ring[ringPlace], string); + return ring[ringPlace]; +} + + +int +defrData::DefGetTokenFromStack(char *s) { + const char *ch; /* utility variable */ + char *prS = NULL; /* pointing to the previous char or s */ + + while(input_level >= 0) { + for(ch=stack[input_level].c_str(); *ch != 0; ch++) /* skip white space */ + if (*ch != ' ' && *ch != '\t' && (nl_token || *ch != '\n')) + break; + /* did we find anything? If not, decrement level and try again */ + if (*ch == 0) + input_level--; + else if (*ch == '\n') { + *s++ = *ch; + *s = 0; + return TRUE; + } + else { /* we found something */ + for(; ; ch++) { + if (*ch == ' ' || *ch == '\t' || *ch == '\n' || *ch == 0) { + /* 10/10/2000 - Wanda da Rosa, pcr 341032 + ** Take out the last '"', the 1st will be skip later + */ + if (*prS == '"') { + *prS = '\0'; + } else + *s++ = '\0'; + stack[input_level] = ch; + + return TRUE; + } + /* 10/10/2000 - Wanda da Rosa, pcr 341032 + ** Save the location of the previous s + */ + prS = s; + *s++ = *ch; + } + } + } + return FALSE; /* if we get here, we ran out of input levels */ +} + + void +defrData::print_lines(long long lines) +{ + if (lines % settings->defiDeltaNumberLines) { + return; + } + + if (settings->ContextLineNumberFunction) { + settings->ContextLineNumberFunction(session->UserData, (int)lines); + } else if (settings->ContextLongLineNumberFunction ) { + settings->ContextLongLineNumberFunction(session->UserData, lines); + } + if (settings->LineNumberFunction) { + settings->LineNumberFunction((int)lines); + } else if (settings->LongLineNumberFunction ) { + settings->LongLineNumberFunction(lines); + } +} + +const char * +defrData::lines2str(long long lines) +{ + +#ifdef _WIN32 + sprintf(lineBuffer, "%I64d", lines); +#else + sprintf(lineBuffer, "%lld", lines); +#endif + + return lineBuffer; +} + + +// Increment current position of buffer pointer. +// Double buffer size if curPos is out of boundary. +void +defrData::IncCurPos(char **curPos, char **buffer, int *bufferSize) +{ + (*curPos)++; + if (*curPos - *buffer < *bufferSize) { + return; + } + + long offset = *curPos - *buffer; + + *bufferSize *= 2; + *buffer = (char*) realloc(*buffer, *bufferSize); + *curPos = *buffer + offset; +} + + +int +defrData::DefGetToken(char **buffer, int *bufferSize) +{ + char *s = *buffer; + int ch; + + ntokens++; + defInvalidChar = 0; + + if (input_level >= 0){ /* if we are expanding an alias */ + if(DefGetTokenFromStack(s)) /* try to get a token from it */ + return TRUE; /* if we get one, return it */ + } /* but if not, continue */ + + /* skip blanks and count lines */ + while ((ch = GETC()) != EOF) { + if (ch == '\n') { + print_lines(++nlines); + } + if (ch != ' ' && ch != '\t' && (nl_token || ch != '\n')) + break; + } + + if (ch == EOF) + return FALSE; + + + if (ch == '\n') { + *s = ch; + IncCurPos(&s, buffer, bufferSize); + + *s = '\0'; + return TRUE; + } + + /* now get the token */ + if (ch == '"') { + do { + /* 5/5/2008 - CCR 556818 + ** Check if the ch is a valid ascii character 0 =< ch < 128 + ** If not write out an error + */ + /* 8/7/2008 - CCR 586175 + ** Some files may not end with \n or \0 or EOF as the last character + ** The parser allows this char instead of error out + */ + if ((ch < -1) || (ch > 127)) { + defInvalidChar = 1; + } + + /* 8/22/2000 - Wanda da Rosa, pcr 333334 + ** save the previous char to allow backslash quote within quote + */ + if (!settings->DisPropStrProcess) { + /* 3/4/2008 - CCR 523879 - convert \\ to \, \" to ", \x to x */ + if (ch == '\\') { /* got a \, save the next char only */ + ch = GETC(); + if ((ch == '\n') || (ch == EOF)) { /* senaty check */ + *s = '\0'; + return FALSE; + } + } + } + + *s = ch; + IncCurPos(&s, buffer, bufferSize); + + ch = GETC(); + + if (ch == EOF) { + *s = '\0'; + return FALSE; + } + } while (ch != '"'); + + *s = '\0'; + return TRUE; + } + + if (names_case_sensitive) { + for(; ; ch = GETC()) { + + /* 5/5/2008 - CCR 556818 + ** Check if the ch is a valid ascii character 0 =< ch < 128 + ** If not write out an error + */ + if ((ch < -1) || (ch > 127)) { + defInvalidChar = 1; + } + + if (ch == ' ' || ch == '\t' || ch == '\n' || ch == EOF) + break; + + *s = ch; + IncCurPos(&s, buffer, bufferSize); + } + } + else { /* we are case insensitive, use a different loop */ + for(; ; ch = GETC()) { + + /* 5/5/2008 - CCR 556818 + ** Check if the ch is a valid ascii character 0 =< ch < 128 + ** If not write out an error + */ + if ((ch < -1) || (ch > 127)) { + defInvalidChar = 1; + } + + if (ch == ' ' || ch == '\t' || ch == '\n' || ch == EOF) + break; + + *s = (ch >= 'a' && ch <= 'z')? (ch -'a' + 'A') : ch; + IncCurPos(&s, buffer, bufferSize); + } + } + + /* If we got this far, the last char was whitespace */ + *s = '\0'; + if (ch != EOF) /* shouldn't ungetc an EOF */ + UNGETC((char)ch); + return TRUE; +} + +/* creates an upper case copy of an array */ +void +defrData::uc_array(char *source, char *dest) +{ + for(; *source != 0; ) + *dest++ = toupper(*source++); + *dest = 0; +} + + +void +defrData::StoreAlias() +{ + int tokenSize = TOKEN_SIZE; + char *aname = (char*)malloc(tokenSize); + + DefGetToken(&aname, &tokenSize); + + char *line = (char*)malloc(tokenSize); + + DefGetToken(&line, &tokenSize); + + char *uc_line = (char*)malloc(tokenSize); + + string so_far; /* contains alias contents as we build it */ + + if (strcmp(line,"=") != 0) { + defError(6000, "Expecting '='"); + return; + } + + /* now keep getting lines till we get one that contains &ENDALIAS */ + for(char *p = NULL ;p == NULL;){ + int i; + char *s = line; + for(i=0;i 0, it reads the next token in "dumb mode". + * In this case, it does not do keyword lookup, or attempt to read a token + * as a number; if the token is not punctuation, it's a T_STRING. Each token + * read decrements dumb_mode, so you can instruct the the lexer to read the + * next N tokens in dumb mode by setting "dumb_mode" to that value. + * + * Newlines are in general silently ignored. If the global nl_token is + * true, however, they are returned as the token K_NL. + */ + +int +defrData::defyylex(YYSTYPE *pYylval) { + + int v = sublex(pYylval); + if (defPrintTokens) { + if (v == 0) { + printf("yylex NIL\n"); + } else if (v < 256) { + printf("yylex char %c\n", v); + } else if (v == QSTRING) { + printf("yylex quoted string '%s'\n", pYylval->string); + } else if (v == T_STRING) { + printf("yylex string '%s'\n", pYylval->string); + } else if (v == NUMBER) { + printf("yylex number %f\n", pYylval->dval); + } else { + printf("yylex keyword %s\n", defrData::defkywd(v)); + } + } + + if ((v == 0) && (!doneDesign)) { + defError(6002, "Incomplete def file."); + // Stop printing error messages after the EOF. + hasFatalError = 1; + return (-1); + } + + return v; +} + +int +defrData::sublex(YYSTYPE *pYylval) +{ + char fc; + double numVal; + char* outMsg; + + pv_deftoken = (char*)realloc(pv_deftoken, deftokenLength); + strcpy(pv_deftoken, deftoken); + + /* First, we eat all the things the parser should be unaware of. + * This includes: + * a) Comments + * b) &alias definitions + * c) &alias expansions + */ + for(;;) { + if(!DefGetToken(&deftoken, &deftokenLength)) { /* get a raw token */ + return 0; + } + fc = deftoken[0]; + uc_token = (char*)realloc(uc_token, deftokenLength); + + /* first, check for # comments or &alias statements. # comments + we ignore, and &alias statements are eaten and recorded by the + lexer. */ + if (fc == settings->CommentChar) { + // The code isn't work in correct way, no way to fix it exits + // but keep it for compatibility reasons. + int magic_count = -1; + for(fc = GETC();; fc = GETC()) {/* so skip to the end of line */ + magic_count++; + if ((magic_count < (int)strlen(magic)) && (fc == magic[magic_count])) { + if ((int)strlen(magic) == (magic_count + 1)) { + if (settings->MagicCommentFoundFunction) { + settings->MagicCommentFoundFunction(); + } + } + } + if (fc == EOF) return 0; + if (fc == '\n') { + print_lines(++nlines); + break; + } + } + } + else if (fc == '&') { + /* begins with &. If &alias, read contents and */ + /* store them. Otherwise it's a define, or a macro use. */ + string alias; + uc_array(deftoken, uc_token); + + if (strcmp(uc_token,"&ALIAS") == 0) + StoreAlias(); /* read and store the alias */ + else if (defGetAlias(deftoken, alias)) + stack[++input_level] = alias; + else + break; /* begins with &, but not an &alias defn. or use. */ + } else + break; /* does not begin with commentChar or '&' */ + } + + if (defInvalidChar) { + outMsg = (char*)malloc(500 + strlen(deftoken)); + sprintf(outMsg, "Invalid characters found in \'%s\'.\nThese characters might be using the character types other than English.\nCreate characters by specifying valid characters types.", + deftoken); + defError(6008, outMsg); + free(outMsg); + hasFatalError = 1; + return 0; + } + + if (doneDesign) { + fc = EOF; + defInfo(8000, "There are still data after the END DESIGN statement"); + return 0; + } + + if(fc == '\"') { + pYylval->string = ringCopy(&(deftoken[1])); + + return QSTRING; + } + + /* at this point we've read a token */ + /* printf("Token is %s\n", deftoken); */ + + // Protect the token counting variables form the decrement overflow. + if (dumb_mode >= 0) { + dumb_mode--; + } + + if (no_num >= 0) { + no_num--; + } + + if (isdigit(fc) || fc == '.' || (fc == '-' && deftoken[1] != '\0') ) { + char *ch; + /* 6/12/2003 - The following switching to use strtol first is a fix */ + /* for FE for performance improvement. */ + /* Adding the flag "parsing_property" is for pcr 594214, need to call */ + /* strtod first to handle double number inside PROPERTY. Only */ + /* property has real number (large number) */ + if (!real_num) { + pYylval->dval = strtol(deftoken, &ch, 10); /* try string to long first */ + if (no_num < 0 && *ch == '\0') { /* did we use the whole string? */ + return NUMBER; + } else { /* failed strtol, try double */ + numVal = pYylval->dval = strtod(deftoken, &ch); + if (no_num < 0 && *ch == '\0') { /* did we use the whole string? */ + /* check if the integer has exceed the limit */ + if ((numVal >= lVal) && (numVal <= rVal)) + return NUMBER; /* YES, it's really a number */ + else { + char* str = (char*)malloc(strlen(deftoken) + +strlen(session->FileName)+350); + sprintf(str, + " in %s at line %s\n", + session->FileName, lines2str(nlines)); + fflush(stdout); + defiError(1, 0, str); + free(str); + errors++; + return NUMBER; + } + } else { + pYylval->string = ringCopy(deftoken); /* NO, it's a string */ + return T_STRING; + } + } + } else { /* handling PROPERTY, do strtod first instead of strtol */ + numVal = pYylval->dval = strtod(deftoken, &ch); + if (no_num < 0 && *ch == '\0') { /* did we use the whole string? */ + /* check if the integer has exceed the limit */ + if (real_num) /* this is for PROPERTYDEF with REAL */ + return NUMBER; + if ((numVal >= lVal) && (numVal <= rVal)) + return NUMBER; /* YES, it's really a number */ + else { + char* str = (char*)malloc(strlen(deftoken) + +strlen(session->FileName)+350); + sprintf(str, + " in %s at line %s\n", + session->FileName, lines2str(nlines)); + fflush(stdout); + defiError(1, 0, str); + free(str); + errors++; + return NUMBER; + } + } else { /* failed integer conversion, try floating point */ + pYylval->dval = strtol(deftoken, &ch, 10); + if (no_num < 0 && *ch == '\0') /* did we use the whole string? */ + return NUMBER; + else { + pYylval->string = ringCopy(deftoken); /* NO, it's a string */ + return T_STRING; + } + } + } + } + + /* if we are dumb mode, all we return is punctuation and strings & numbers*/ + /* until we see the next '+' or ';' deftoken */ + if (dumb_mode >= 0) { + if (deftoken[1]=='\0' && (fc=='('||fc==')'||fc=='+'||fc==';'||fc=='*')){ + + if (fc == ';' || fc == '+') { + dumb_mode = 0; + no_num = 0; + } + return (int)fc; + } + if (by_is_keyword && ((strcmp(deftoken,"BY") == 0) || + (strcmp(deftoken, "by") == 0))) { + return K_BY; /* even in dumb mode, we must see the BY deftoken */ + } + if (do_is_keyword && ((strcmp(deftoken,"DO") == 0) || + (strcmp(deftoken, "by") == 0))) { + return K_DO; /* even in dumb mode, we must see the DO deftoken */ + } + if (new_is_keyword && ((strcmp(deftoken,"NEW") == 0) || + (strcmp(deftoken, "new") == 0))) { + return K_NEW; /* even in dumb mode, we must see the NEW deftoken */ + } + if (nondef_is_keyword && ((strcmp(deftoken, "NONDEFAULTRULE") == 0) || + (strcmp(deftoken, "nondefaultrule") == 0))){ + return K_NONDEFAULTRULE; /* even in dumb mode, we must see the */ + /* NONDEFAULTRULE deftoken */ + } + if (mustjoin_is_keyword && ((strcmp(deftoken, "MUSTJOIN") == 0) || + (strcmp(deftoken, "mustjoin") == 0))) { + return K_MUSTJOIN; /* even in dumb mode, we must see the */ + /* MUSTJOIN deftoken */ + } + if (step_is_keyword && ((strcmp(deftoken,"STEP") == 0) || + (strcmp(deftoken, "step") == 0))) { + return K_STEP;/* even in dumb mode, we must see the STEP deftoken */ + } + if (fixed_is_keyword && ((strcmp(deftoken,"FIXED") == 0) || + (strcmp(deftoken, "fixed") == 0))) { + return K_FIXED; /* even in dumb mode, we must see the FIXED deftoken */ + } + if (cover_is_keyword && ((strcmp(deftoken,"COVER") == 0) || + (strcmp(deftoken, "cover") == 0))) { + return K_COVER; /* even in dumb mode, we must see the COVER deftoken */ + } + if (routed_is_keyword && ((strcmp(deftoken,"ROUTED") == 0) || + (strcmp(deftoken, "rounted") == 0))) { + return K_ROUTED; /* even in dumb mode, we must see the */ + /* ROUTED deftoken */ + } + + if (virtual_is_keyword && ((strcmp(deftoken, "VIRTUAL") == 0 ) + || (strcmp(deftoken, "virtual") == 0 ))) { + return K_VIRTUAL; + } + + if (rect_is_keyword && ((strcmp(deftoken, "RECT") == 0 ) + || (strcmp(deftoken, "rect") == 0 ))) { + return K_RECT; + } + + if (virtual_is_keyword && ((strcmp(deftoken, "MASK") == 0 ) + || (strcmp(deftoken, "mask") == 0 ))) { + return K_MASK; + } + + if (orient_is_keyword) { + int result; + uc_array(deftoken, uc_token); + + if (defGetKeyword(uc_token, &result)) { + if (K_N == result) + return K_N; + if (K_W == result) + return K_W; + if (K_S == result) + return K_S; + if (K_E == result) + return K_E; + if (K_FN == result) + return K_FN; + if (K_FW == result) + return K_FW; + if (K_FS == result) + return K_FS; + if (K_FE == result) + if (strcmp(deftoken, "FE") == 0) + return K_FE; + } + } + pYylval->string = ringCopy(deftoken); + return T_STRING; + } + + /* if we get here we are in smart mode. Parse deftoken */ + /* 2/19/2004 - add _ since name can starts with '_' */ + /* 2/23/2004 - add the following characters which a name can starts with */ + /* ! $ | : , @ ~ = < . ? { ' ^ " */ + if (isalpha(fc) || fc == '&' || fc == '_') { + int result; + + History_text.resize(0); + uc_array(deftoken, uc_token); + + if (defGetKeyword(uc_token, &result)) { + if (K_HISTORY == result) { /* history - get up to ';' */ + int c; + int prev; + prev = ' '; + while (1) { + c = GETC(); + + if (c == EOF) { + defError(6015, "Unexpected end of the DEF file."); + break; + } + + if (c == ';' && (prev == ' ' || prev == '\t' || prev == '\n')) + break; + if (c == '\n') { + print_lines(++nlines); + } + prev = c; + History_text.push_back(c); + } + History_text.push_back('\0'); + } else if (K_BEGINEXT == result) { /* extension, get up to end */ + int cc; + int foundTag = 0; + int notEmpTag = 0; + int begQuote = 0; + /* First make sure there is a name after BEGINEXT within quote */ + /* BEGINEXT "name" */ + while (1) { + cc = GETC(); + + if (cc == EOF) { + defError(6015, "Unexpected end of the DEF file."); + break; + } + + if (cc == '\n') { + if (!foundTag) { + defError(6003, "tag is missing for BEGINEXT"); + break; + } + } else { + + History_text.push_back(cc); + if (cc != ' ') { + if (cc == '\"') { /* found a quote */ + if (!begQuote) + begQuote = 1; + else if (notEmpTag) { + foundTag = 1; + break; /* Found the quoted tag */ + } else { + defError(6004, "The BEGINEXT tag is empty. Specify a value for the tag and try again."); + break; + } + } else if (!begQuote) { /* anything but a quote */ + defError(6005, "The '\"' is missing within the tag. Specify the '\"' in the tag and then try again."); + break; + } else /* anything but a quote and there */ + notEmpTag = 1; /* is already a quote */ + } + } + } + if (foundTag) { + /* We have handle with the tag, just read the rest until */ + /* ENDEXT */ + begQuote = 0; + while (1) { + cc = GETC(); + + if (cc == EOF) { + defError(6015, "Unexpected end of the DEF file."); + break; + } + + if (cc == '\n') { + print_lines(++nlines); + } else if (cc == '\"') { + if (!begQuote) + begQuote = 1; + else + begQuote = 0; + } + + History_text.push_back(cc); + + int histTextSize = History_text.size(); + + if (histTextSize >= 6 && memcmp(&History_text[histTextSize - 6 ], "ENDEXT", 6) == 0) { + if (begQuote) + defError(6006, "The ending '\"' is missing in the tag. Specify the ending '\"' in the tag and then try again."); + break; + } else if (histTextSize >= 10 && memcmp(&History_text[histTextSize - 10 ], "END DESIGN", 10) == 0) { + defError(6007, "The ENDEXT statement is missing in the DEF file. Include the statement and then try again."); + nlines--; + break; + } + } + } + History_text.push_back('\0'); + } + return result; /* YES, return its value */ + } else { /* we don't have a keyword. */ + if (fc == '&') + return amper_lookup(pYylval, deftoken); + pYylval->string = ringCopy(deftoken); /* NO, it's a string */ + return T_STRING; + } + } else { /* it should be a punctuation character */ + if (deftoken[1] != '\0') { + if (strcmp(deftoken, ">=") == 0) return K_GE; + if (strcmp(deftoken, "<=") == 0) return K_LE; + if (strcmp(deftoken, "<>") == 0) return K_NE; + + defError(6017, "Odd punctuation found."); + hasFatalError = 1; + } else if (strlen(deftoken) > 2 + || strlen(deftoken) == 0) { + defError(6017, "Odd punctuation found."); + hasFatalError = 1; + } + return (int)deftoken[0]; + } +} + +/* We have found a deftoken beginning with '&'. If it has been previously + defined, substitute the definition. Otherwise return it. */ +int +defrData::amper_lookup(YYSTYPE *pYylval, char *tkn) +{ + string defValue; + + /* printf("Amper_lookup: %s\n", tkn); */ + + /* &defines returns a T_STRING */ + if (defGetDefine(tkn, defValue)) { + int value; + if (defGetKeyword(defValue.c_str(), &value)) + return value; + if (defValue.c_str()[0] == '"') + pYylval->string = ringCopy(defValue.c_str()+1); + else + pYylval->string = ringCopy(defValue.c_str()); + return (defValue.c_str()[0] == '\"' ? QSTRING : T_STRING); + } + /* if none of the above, just return the deftoken. */ + pYylval->string = ringCopy(tkn); + return T_STRING; +} + +void +defrData::defError(int msgNum, const char *s) { + char* str; + const char *curToken = isgraph(deftoken[0]) ? deftoken + : ""; + const char *pvToken = isgraph(pv_deftoken[0]) ? pv_deftoken + : ""; + int len = strlen(curToken)-1; + int pvLen = strlen(pvToken)-1; + + if (hasFatalError) + return; + if ((settings->totalDefMsgLimit > 0) && (defMsgPrinted >= settings->totalDefMsgLimit)) + return; + if (settings->MsgLimit[msgNum-5000] > 0) { + if (msgLimit[msgNum-5000] >= settings->MsgLimit[msgNum-5000]) + return; /* over the limit */ + msgLimit[msgNum-5000] = msgLimit[msgNum-5000] + 1; + } + + /* PCR 690679, probably missing space before a ';' */ + if (strcmp(s, "parse error") == 0) { + if ((len > 1) && (deftoken[len] == ';')) { + str = (char*)malloc(len + strlen(s) + strlen(session->FileName) + 350); + sprintf(str, "ERROR (DEFPARS-%d): %s, file %s at line %s\nLast token was <%s>, space is missing before <;>\n", + msgNum, s, session->FileName, lines2str(nlines), curToken); + } else if ((pvLen > 1) && (pv_deftoken[pvLen] == ';')) { + str = (char*)malloc(pvLen + strlen(s) + strlen(session->FileName) + 350); + sprintf(str, "ERROR (DEFPARS-%d): %s, file %s at line %s\nLast token was <%s>, space is missing before <;>\n", + msgNum, s, session->FileName, lines2str(nlines-1), pvToken); + } else { + str = (char*)malloc(len + strlen(session->FileName) + 350); + sprintf(str, "ERROR (DEFPARS-%d): Def parser has encountered an error in file %s at line %s, on token %s.\nProblem can be syntax error on the def file or an invalid parameter name.\nDouble check the syntax on the def file with the LEFDEF Reference Manual.\n", + msgNum, session->FileName, lines2str(nlines), curToken); + } + } else if (strcmp(s, "syntax error") == 0) { + if ((len > 1) && (deftoken[len] == ';')) { + str = (char*)malloc(len + strlen(s) + strlen(session->FileName) + 350); + sprintf(str, "ERROR (DEFPARS-%d): %s, file %s at line %s\nLast token was <%s>, space is missing before <;>\n", + msgNum, s, session->FileName, lines2str(nlines), curToken); + } else if ((pvLen > 1) && (pv_deftoken[pvLen] == ';')) { + str = (char*)malloc(pvLen + strlen(s) + strlen(session->FileName) + 350); + sprintf(str, "ERROR (DEFPARS-%d): %s, file %s at line %s\nLast token was <%s>, space is missing before <;>\n", + msgNum, s, session->FileName, lines2str(nlines-1), pvToken); + } else { + str = (char*)malloc(len + strlen(session->FileName) + 350); + sprintf(str, "ERROR (DEFPARS-%d): Def parser has encountered an error in file %s at line %s, on token %s.\nProblem can be syntax error on the def file or an invalid parameter name.\nDouble check the syntax on the def file with the LEFDEF Reference Manual.\n", + msgNum, session->FileName, lines2str(nlines), curToken); + } + } else { + str = (char*)malloc(len + strlen(s) + strlen(session->FileName) + 350); + sprintf(str, "ERROR (DEFPARS-%d): %s Error in file %s at line %s, on token %s.\nUpdate the def file before parsing the file again.\n", + msgNum, s, session->FileName, lines2str(nlines), curToken); + } + + fflush(stdout); + defiError(1, msgNum, str); + free(str); + errors++; +} + +/* yydeferror is called by bison.simple */ +void +defrData::defyyerror(const char *s) { + defError(defMsgCnt++, s); +} + +/* All info starts with 8000 */ +/* All info within defInfo starts with 8500 */ +void +defrData::defInfo(int msgNum, const char *s) { + int i; + + for (i = 0; i < settings->nDDMsgs; i++) { /* check if info has been disable */ + if (settings->disableDMsgs[i] == msgNum) + return; /* don't print out any info since msg has been disabled */ + } + + if (settings->ContextWarningLogFunction) { + char* str = (char*)malloc(strlen(deftoken)+strlen(s) + +strlen(session->FileName)+350); + sprintf(str, "INFO (DEFPARS-%d): %s See file %s at line %s.\n", + msgNum, s, session->FileName, lines2str(nlines)); + (*settings->ContextWarningLogFunction)(session->UserData, str); + free(str); + } else if (settings->WarningLogFunction) { + char* str = (char*)malloc(strlen(deftoken)+strlen(s) + +strlen(session->FileName)+350); + sprintf(str, "INFO (DEFPARS-%d): %s See file %s at line %s.\n", + msgNum, s, session->FileName, lines2str(nlines)); + (*settings->WarningLogFunction)(str); + free(str); + } else if (defrLog) { + fprintf(defrLog, "INFO (DEFPARS-%d): %s See file %s at line %s\n", + msgNum, s, session->FileName, lines2str(nlines)); + } else { + if (!hasOpenedDefLogFile) { + if ((defrLog = fopen("defRWarning.log", "w")) == 0) { + printf("WARNING(DEFPARS-8500): Unable to open the file defRWarning.log in %s.\n", + getcwd(NULL, 64)); + printf("Info messages will not be printed.\n"); + } else { + hasOpenedDefLogFile = 1; + fprintf(defrLog, "Info from file: %s\n\n", session->FileName); + fprintf(defrLog, "INFO (DEFPARS-%d): %s See file %s at line %s\n", + msgNum, s, session->FileName, lines2str(nlines)); + } + } else { + if ((defrLog = fopen("defRWarning.log", "a")) == 0) { + printf("WARNING (DEFPARS-8500): Unable to open the file defRWarning.log in %s.\n", + getcwd(NULL, 64)); + printf("Info messages will not be printed.\n"); + } else { + hasOpenedDefLogFile = 1; + fprintf(defrLog, "\nInfo from file: %s\n\n", session->FileName); + fprintf(defrLog, "INFO (DEFPARS-%d): %s See file %s at line %s\n", + msgNum, s, session->FileName, lines2str(nlines)); + } + } + } +} + +/* All warning starts with 7000 */ +/* All warning within defWarning starts with 7500 */ +void +defrData::defWarning(int msgNum, const char *s) { + int i; + + for (i = 0; i nDDMsgs; i++) { /* check if warning has been disable */ + if (settings->disableDMsgs[i] == msgNum) + return; /* don't print out any warning since msg has been disabled */ + } + + if (settings->ContextWarningLogFunction) { + char* str = (char*)malloc(strlen(deftoken)+strlen(s) + +strlen(session->FileName)+350); + sprintf(str, "WARNING (DEFPARS-%d): %s See file %s at line %s.\n", + msgNum, s, session->FileName, lines2str(nlines)); + (*settings->ContextWarningLogFunction)(session->UserData, str); + free(str); + } else if (settings->WarningLogFunction) { + char* str = (char*)malloc(strlen(deftoken)+strlen(s) + +strlen(session->FileName)+350); + sprintf(str, "WARNING (DEFPARS-%d): %s See file %s at line %s.\n", + msgNum, s, session->FileName, lines2str(nlines)); + (*settings->WarningLogFunction)(str); + free(str); + } else if (defrLog) { + fprintf(defrLog, "WARNING (DEFPARS-%d): %s See file %s at line %s\n", + msgNum, s, session->FileName, lines2str(nlines)); + } else { + if (!hasOpenedDefLogFile) { + if ((defrLog = fopen("defRWarning.log", "w")) == 0) { + printf("WARNING (DEFPARS-7500): Unable to open the file defRWarning.log in %s.\n", + getcwd(NULL, 64)); + printf("Warning messages will not be printed.\n"); + } else { + hasOpenedDefLogFile = 1; + fprintf(defrLog, "Warnings from file: %s\n\n", session->FileName); + fprintf(defrLog, "WARNING (DEFPARS-%d): %s See file %s at line %s\n", + msgNum, s, session->FileName, lines2str(nlines)); + } + } else { + if ((defrLog = fopen("defRWarning.log", "a")) == 0) { + printf("WARNING (DEFAPRS-7501): Unable to open the file defRWarning.log in %s.\n", + getcwd(NULL, 64)); + printf("Warning messages will not be printed.\n"); + } else { + hasOpenedDefLogFile = 1; + fprintf(defrLog, "\nWarnings from file: %s\n\n", session->FileName); + fprintf(defrLog, "WARNING (DEFPARS-%d): %s See file %s at line %s\n", + msgNum, s, session->FileName, lines2str(nlines)); + } + } + } + def_warnings++; +} + +const char* +defrData::defkywd(int num) +{ + switch (num) { + case QSTRING: return "QSTRING"; + case T_STRING: return "T_STRING"; + case SITE_PATTERN: return "SITE_PATTERN"; + case NUMBER: return "NUMBER"; + case K_ALIGN: return "ALIGN"; + case K_AND: return "AND"; + case K_ARRAY: return "ARRAY"; + case K_ASSERTIONS: return "ASSERTIONS"; + case K_BEGINEXT: return "BEGINEXT"; + case K_BOTTOMLEFT: return "BOTTOMLEFT"; + case K_BUSBITCHARS: return "BUSBITCHARS"; + case K_BY: return "BY"; + case K_CANNOTOCCUPY: return "CANNOTOCCUPY"; + case K_CANPLACE: return "CANPLACE"; + case K_CAPACITANCE: return "CAPACITANCE"; + case K_COMMONSCANPINS: return "COMMONSCANPINS"; + case K_COMPONENT: return "COMPONENT"; + case K_COMPONENTPIN: return "COMPONENTPIN"; + case K_COMPS: return "COMPS"; + case K_COMP_GEN: return "COMP_GEN"; + case K_CONSTRAINTS: return "CONSTRAINTS"; + case K_COVER: return "COVER"; + case K_CUTSIZE: return "CUTSIZE"; + case K_CUTSPACING: return "CUTSPACING"; + case K_DEFAULTCAP: return "DEFAULTCAP"; + case K_DEFINE: return "DEFINE"; + case K_DEFINES: return "DEFINES"; + case K_DEFINEB: return "DEFINEB"; + case K_DESIGN: return "DESIGN"; + case K_DESIGNRULEWIDTH: return "DESIGNRULEWIDTH"; + case K_DIAGWIDTH: return "DIAGWIDTH"; + case K_DIEAREA: return "DIEAREA"; + case K_DIFF: return "DIFF"; + case K_DIRECTION: return "DIRECTION"; + case K_DIST: return "DIST"; + case K_DISTANCE: return "DISTANCE"; + case K_DIVIDERCHAR: return "DIVIDERCHAR"; + case K_DO: return "DO"; + case K_DRIVECELL: return "DRIVECELL"; + case K_E: return "E"; + case K_EEQMASTER: return "EEQMASTER"; + case K_ELSE: return "ELSE"; + case K_ENCLOSURE: return "ENCLOSURE"; + case K_END: return "END"; + case K_ENDEXT: return "ENDEXT"; + case K_EQ: return "EQ"; + case K_EQUAL: return "EQUAL"; + case K_ESTCAP: return "ESTCAP"; + case K_FE: return "FE"; + case K_FALL: return "FALL"; + case K_FALLMAX: return "FALLMAX"; + case K_FALLMIN: return "FALLMIN"; + case K_FALSE: return "FALSE"; + case K_FIXED: return "FIXED"; + case K_FLOATING: return "FLOATING"; + case K_FLOORPLAN: return "FLOORPLAN"; + case K_FN: return "FN"; + case K_FOREIGN: return "FOREIGN"; + case K_FPC: return "FPC"; + case K_FROMCLOCKPIN: return "FROMCLOCKPIN"; + case K_FROMCOMPPIN: return "FROMCOMPPIN"; + case K_FROMPIN: return "FROMPIN"; + case K_FROMIOPIN: return "FROMIOPIN"; + case K_FS: return "FS"; + case K_FW: return "FW"; + case K_GCELLGRID: return "GCELLGRID"; + case K_GE: return "GE"; + case K_GT: return "GT"; + case K_GROUND: return "GROUND"; + case K_GROUNDSENSITIVITY: return "GROUNDSENSITIVITY"; + case K_GROUP: return "GROUP"; + case K_GROUPS: return "GROUPS"; + case K_HALO: return "HALO"; + case K_HARDSPACING: return "HARDSPACING"; + case K_HISTORY: return "HISTORY"; + case K_HOLDRISE: return "HOLDRISE"; + case K_HOLDFALL: return "HOLDFALL"; + case K_HORIZONTAL: return "HORIZONTAL"; + case K_IF: return "IF"; + case K_IN: return "IN"; + case K_INTEGER: return "INTEGER"; + case K_IOTIMINGS: return "IOTIMINGS"; + case K_LAYER: return "LAYER"; + case K_LAYERS: return "LAYERS"; + case K_LE: return "LE"; + case K_LT: return "LT"; + case K_MACRO: return "MACRO"; + case K_MASK: return "MASK"; + case K_MAX: return "MAX"; + case K_MAXDIST: return "MAXDIST"; + case K_MAXHALFPERIMETER: return "MAXHALFPERIMETER"; + case K_MAXX: return "MAXX"; + case K_MAXY: return "MAXY"; + case K_MICRONS: return "MICRONS"; + case K_MIN: return "MIN"; + case K_MINCUTS: return "MINCUTS"; + case K_MINPINS: return "MINPINS"; + case K_MUSTJOIN: return "MUSTJOIN"; + case K_N: return "N"; + case K_NAMESCASESENSITIVE: return "NAMESCASESENSITIVE"; + case K_NAMEMAPSTRING: return "NAMEMAPSTRING"; + case K_NE: return "NE"; + case K_NET: return "NET"; + case K_NETEXPR: return "NETEXPR"; + case K_NETLIST: return "NETLIST"; + case K_NETS: return "NETS"; + case K_NEW: return "NEW"; + case K_NONDEFAULTRULE: return "NONDEFAULTRULE"; + case K_NOSHIELD: return "NOSHIELD"; + case K_NOT: return "NOT"; + case K_OFF: return "OFF"; + case K_OFFSET: return "OFFSET"; + case K_ON: return "ON"; + case K_OR: return "OR"; + case K_ORDERED: return "ORDERED"; + case K_ORIGIN: return "ORIGIN"; + case K_ORIGINAL: return "ORIGINAL"; + case K_OUT: return "OUT"; + case K_PARALLEL: return "PARALLEL"; + case K_PARTITIONS: return "PARTITIONS"; + case K_PATH: return "PATH"; + case K_PATTERN: return "PATTERN"; + case K_PATTERNNAME: return "PATTERNNAME"; + case K_PINPROPERTIES: return "PINPROPERTIES"; + case K_PINS: return "PINS"; + case K_PLACED: return "PLACED"; + case K_PIN: return "PIN"; + case K_POLYGON: return "POLYGON"; + case K_PROPERTY: return "PROPERTY"; + case K_PROPERTYDEFINITIONS: return "PROPERTYDEFINITIONS"; + case K_RANGE: return "RANGE"; + case K_REAL: return "REAL"; + case K_RECT: return "RECT"; + case K_REENTRANTPATHS: return "REREENTRANTPATHS"; + case K_REGION: return "REGION"; + case K_REGIONS: return "REGIONS"; + case K_RISE: return "RISE"; + case K_RISEMAX: return "RISEMAX"; + case K_RISEMIN: return "RISEMIN"; + case K_ROUTED: return "ROUTED"; + case K_ROW: return "ROW"; + case K_ROWCOL: return "ROWCOL"; + case K_ROWS: return "ROWS"; + case K_S: return "S"; + case K_SCANCHAINS: return "SCANCHAINS"; + case K_SETUPRISE: return "SETUPRISE"; + case K_SETUPFALL: return "SETUPFALL"; + case K_SHAPE: return "SHAPE"; + case K_SITE: return "SITE"; + case K_SLEWRATE: return "SLEWRATE"; + case K_SNET: return "SNET"; + case K_SNETS: return "SNETS"; + case K_SOURCE: return "SOURCE"; + case K_SOFT: return "SOFT"; + case K_SPACING: return "SPACING"; + case K_SPECIAL: return "SPECIAL"; + case K_START: return "START"; + case K_START_NET: return "START_NET"; + case K_STEP: return "STEP"; + case K_STRING: return "STRING"; + case K_STOP: return "STOP"; + case K_SUBNET: return "SUBNET"; + case K_SUM: return "SUM"; + case K_SUPPLYSENSITIVITY: return "SUPPLYSENSITIVITY"; + case K_STYLE: return "STYLE"; + case K_STYLES: return "STYLES"; + case K_SYNTHESIZED: return "SYNTHESIZED"; + case K_TAPER: return "TAPER"; + case K_TAPERRULE: return "TAPERRULE"; + case K_THEN: return "THEN"; + case K_THRUPIN: return "THRUPIN"; + case K_TIMING: return "TIMING"; + case K_TIMINGDISABLES: return "TIMINGDISABLES"; + case K_TOCLOCKPIN: return "TOCLOCKPIN"; + case K_TOCOMPPIN: return "TOCOMPPIN"; + case K_TOIOPIN: return "TOIOPIN"; + case K_TOPIN: return "TOPIN"; + case K_TOPRIGHT: return "TOPRIGHT"; + case K_TRACKS: return "TRACKS"; + case K_TRUE: return "TRUE"; + case K_TURNOFF: return "TURNOFF"; + case K_VARIABLE: return "VARIABLE"; + case K_VIA: return "VIA"; + case K_VIARULE: return "VIARULE"; + case K_VIAS: return "VIAS"; + case K_VOLTAGE: return "VOLTAGE"; + case K_TECH: return "TECH"; + case K_UNITS: return "UNITS"; + case K_UNPLACED: return "UNPLACED"; + case K_USE: return "USE"; + case K_USER: return "USER"; + case K_VERSION: return "VERSION"; + case K_VIRTUAL: return "VIRTUAL"; + case K_VERTICAL: return "VERTICAL"; + case K_VPIN: return "VPIN"; + case K_W: return "W"; + case K_WIRECAP: return "WIRECAP"; + case K_WEIGHT: return "WEIGHT"; + case K_WIDTH: return "WIDTH"; + case K_WIREDLOGIC: return "WIREDLOGIC"; + case K_WIREEXT: return "WIREEXT"; + case K_XTALK: return "XTALK"; + case K_X: return "X"; + case K_Y: return "Y"; + default: return "bogus"; + } +} + +const char* +defrData::DEFCASE(const char* ch) +{ + return names_case_sensitive ? ch : upperCase(ch); +} + +void +defrData::pathIsDone(int shield, int reset, int netOsnet, int *needCbk) +{ + if ((callbacks->NetCbk || callbacks->SNetCbk) && settings->AddPathToNet) { + //PathObj.reverseOrder(); + if (Subnet) { + // if (shield) + // defrSubnet->addShieldPath(defrPath); + // else + Subnet->addWirePath(&PathObj, reset, netOsnet, + needCbk); + } else { + if (shield) + Net.addShieldPath(&PathObj, reset, netOsnet, needCbk); + else + Net.addWirePath(&PathObj, reset, netOsnet, needCbk); + } + } else if (callbacks->PathCbk) { + //defrPath->reverseOrder(); + (*callbacks->PathCbk)(defrPathCbkType, &PathObj, session->UserData); + PathObj.Destroy(); + free((char*) &PathObj); + } + + PathObj.Init(); +} + +END_LEFDEF_PARSER_NAMESPACE + + + + diff --git a/lefdef/src/def/def/def_objs.defs b/lefdef/src/def/def/def_objs.defs new file mode 100755 index 00000000..09c57533 --- /dev/null +++ b/lefdef/src/def/def/def_objs.defs @@ -0,0 +1,44 @@ +############################################################################## +# +# def_objs.defs +# + +DEF_SRCS = \ + $(DEF_SRC_DIR)/DFEF_malloc.cpp \ + $(DEF_SRC_DIR)/DFEF_stringhash.cpp \ + $(DEF_SRC_DIR)/def.tab.cpp \ + $(DEF_SRC_DIR)/def_keywords.cpp \ + $(DEF_SRC_DIR)/defiAlias.cpp \ + $(DEF_SRC_DIR)/defiAssertion.cpp \ + $(DEF_SRC_DIR)/defiBlockage.cpp \ + $(DEF_SRC_DIR)/defiComponent.cpp \ + $(DEF_SRC_DIR)/defiDebug.cpp \ + $(DEF_SRC_DIR)/defiFill.cpp \ + $(DEF_SRC_DIR)/defiFPC.cpp \ + $(DEF_SRC_DIR)/defiGroup.cpp \ + $(DEF_SRC_DIR)/defiIOTiming.cpp \ + $(DEF_SRC_DIR)/defiMisc.cpp \ + $(DEF_SRC_DIR)/defiNet.cpp \ + $(DEF_SRC_DIR)/defiNonDefault.cpp \ + $(DEF_SRC_DIR)/defiPartition.cpp \ + $(DEF_SRC_DIR)/defiPath.cpp \ + $(DEF_SRC_DIR)/defiPinCap.cpp \ + $(DEF_SRC_DIR)/defiPinProp.cpp \ + $(DEF_SRC_DIR)/defiProp.cpp \ + $(DEF_SRC_DIR)/defiPropType.cpp \ + $(DEF_SRC_DIR)/defiRegion.cpp \ + $(DEF_SRC_DIR)/defiRowTrack.cpp \ + $(DEF_SRC_DIR)/defiScanchain.cpp \ + $(DEF_SRC_DIR)/defiSite.cpp \ + $(DEF_SRC_DIR)/defiSlot.cpp \ + $(DEF_SRC_DIR)/defiTimingDisable.cpp \ + $(DEF_SRC_DIR)/defiUtil.cpp \ + $(DEF_SRC_DIR)/defiVia.cpp \ + $(DEF_SRC_DIR)/defrReader.cpp \ + $(DEF_SRC_DIR)/defwWriter.cpp \ + $(DEF_SRC_DIR)/defwWriterCalls.cpp + +DEF_BISON_SRCS = $(DEF_SRC_DIR)/def.y + +DEF_OBJS = $(DEF_SRCS:.cpp=.o) + diff --git a/lefdef/src/def/def/defiAlias.cpp b/lefdef/src/def/def/defiAlias.cpp new file mode 100644 index 00000000..573ee1e9 --- /dev/null +++ b/lefdef/src/def/def/defiAlias.cpp @@ -0,0 +1,114 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include "defiAlias.hpp" +#include "defrData.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +extern defrContext defContext; + +class defAliasIterator { +public: + std::map::iterator me; +}; + +defiAlias_itr::defiAlias_itr(defrData *data) +: first(1), + iterator(NULL), + defData(data ? data : defContext.data) +{ + defiAlias_itr::Init(); +} + + +void defiAlias_itr::Init() { + first = 1; + iterator = new defAliasIterator(); +} + + +void defiAlias_itr::Destroy() { + delete iterator; + iterator = NULL; +} + + +defiAlias_itr::~defiAlias_itr() { + defiAlias_itr::Destroy(); +} + + +int defiAlias_itr::Next() { + if (first) { + first = 0; + iterator->me = defData->def_alias_set.begin(); + } else { + iterator->me++; + } + + if (iterator->me == defData->def_alias_set.end()) { + return 0; + } + + return 1; +} + + +const char* defiAlias_itr::Key() { + if (iterator->me == defData->def_alias_set.end()) { + return NULL; + } + + return iterator->me->first.c_str(); +} + + +const char* defiAlias_itr::Data() { + if (iterator->me == defData->def_alias_set.end()) { + return NULL; + } + + // First char is reserved for 'marked' symbol ('0' or '1') + return iterator->me->second.c_str() + 1; +} + + +int defiAlias_itr::Marked() { + const char *value = iterator->me->second.c_str(); + + if ((value == NULL) || (value[0] == '0')) { + return 0; + }else { + return 1; + } +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiAlias.hpp b/lefdef/src/def/def/defiAlias.hpp new file mode 100644 index 00000000..72a0e68c --- /dev/null +++ b/lefdef/src/def/def/defiAlias.hpp @@ -0,0 +1,63 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiALIAS_h +#define defiALIAS_h + +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defAliasIterator; +class defrData; + +class defiAlias_itr { +public: + defiAlias_itr(defrData *defData = 0); + void Init(); + + void Destroy(); + ~defiAlias_itr(); + + int Next(); + const char* Key(); + const char* Data(); + int Marked(); + +protected: + defAliasIterator *iterator; + int first; + defrData *defData; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiAssertion.cpp b/lefdef/src/def/def/defiAssertion.cpp new file mode 100644 index 00000000..3b7c87d2 --- /dev/null +++ b/lefdef/src/def/def/defiAssertion.cpp @@ -0,0 +1,425 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiAssertion.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +struct defiAssertPath { + char* fromPin_; + char* toPin_; + char* fromInst_; + char* toInst_; +}; + + + +defiAssertion::defiAssertion(defrData *data) + : defData(data) +{ + Init(); +} + + +defiAssertion::~defiAssertion() { + Destroy(); +} + + +void defiAssertion::Init() { + netName_ = (char*)malloc(32); + netNameLength_ = 32; + numItems_ = 0; + clear(); + numItemsAllocated_ = 16; + items_ = (int**)malloc(sizeof(char*)*16); + itemTypes_ = (char*)malloc(16); +} + + +void defiAssertion::Destroy() { + free(netName_); + free((char*)(itemTypes_)); + free((char*)(items_)); +} + + +void defiAssertion::clear() { + int i; + struct defiAssertPath* s; + + if (netName_) + *(netName_) = '\0'; + isSum_ = 0; + isDiff_ = 0; + isAssertion_ = 0; + hasRiseMin_ = 0; + hasRiseMax_ = 0; + hasFallMin_ = 0; + hasFallMax_ = 0; + isDelay_ = 0; + isWiredlogic_ = 0; + + for (i = 0; i < numItems_; i++) { + if (itemTypes_[i] == 'p') { + s = (struct defiAssertPath*)(items_[i]); + free(s->fromPin_); + free(s->toPin_); + free(s->fromInst_); + free(s->toInst_); + free((char*)s); + } else if (itemTypes_[i] == 'n') { + free((char*)(items_[i])); + } else { + defiError(0, 6009, "ERROR (DEFPARSE-6009): An invalid attribute type has encounter while cleanning the memory.", defData); + } + itemTypes_[i] = 'B'; // bogus + items_[i] = 0; + } + + numItems_ = 0; +} + + +void defiAssertion::setConstraintMode() { + isAssertion_ = 0; +} + + +void defiAssertion::setAssertionMode() { + isAssertion_ = 1; +} + + +void defiAssertion::setWiredlogicMode() { + isWiredlogic_ = 1; +} + + +void defiAssertion::setWiredlogic(const char* name, double dist) { + int len = strlen(name) + 1; + if (isDelay_) + defiError(0, 6201, "ERROR (DEFPARS-6201): Unable to process the DEF file. Both WIREDLOGIC and DELAY statements are defined in constraint/assertion.\nUpdate the DEF file to define either a WIREDLOGIC or DELAY statement only.", defData); + isWiredlogic_ = 1; + if (netNameLength_ < len) { + free(netName_); + netName_ = (char*)malloc(len); + netNameLength_ = len; + } + strcpy(netName_, defData->DEFCASE(name)); + fallMax_ = dist; +} + + +void defiAssertion::setDelay() { + if (isWiredlogic_) + defiError(0, 6201, "ERROR (DEFPARS-6201): Unable to process the DEF file. Both WIREDLOGIC and DELAY statements are defined in constraint/assertion.\nUpdate the DEF file to define either a WIREDLOGIC or DELAY statement only.", defData); + isDelay_ = 1; +} + + +void defiAssertion::setSum() { + if (isDiff_) + defiError(0, 6202, "ERROR (DEPPARS-6202): Unable to process the DEF file. Both SUM and DIFF statements are defined in constraint/assertion.\nUpdate the DEF file to define either a SUM or DIFF statement only.", defData); + isSum_ = 1; +} + + +void defiAssertion::unsetSum() { + isSum_ = 0; +} + + +void defiAssertion::setDiff() { + if (isSum_) + defiError(0, 6202, "ERROR (DEPPARS-6202): Unable to process the DEF file. Both SUM and DIFF statements are defined in constraint/assertion.\nUpdate the DEF file to define either a SUM or DIFF statement only.", defData); + isDiff_ = 1; +} + + +const char* defiAssertion::netName() const { + return netName_; +} + + +void defiAssertion::setNetName(const char* name) { + int len = strlen(name) + 1; + clear(); + if (len > netNameLength_) { + free(netName_); + netName_ = (char*)malloc(len); + netNameLength_ = len; + } + strcpy(netName_, defData->DEFCASE(name)); +} + + + +int defiAssertion::isDelay() const { + return isDelay_ ? 1 : 0; +} + + +int defiAssertion::isAssertion() const { + return isAssertion_ ? 1 : 0; +} + + +int defiAssertion::isConstraint() const { + return isAssertion_ ? 0 : 1; +} + + +int defiAssertion::isSum() const { + return isSum_; +} + + +int defiAssertion::isDiff() const { + return isDiff_; +} + + +int defiAssertion::isWiredlogic() const { + return isWiredlogic_; +} + + +int defiAssertion::hasRiseMin() const { + return hasRiseMin_; +} + + +int defiAssertion::hasRiseMax() const { + return hasRiseMax_; +} + + +int defiAssertion::hasFallMin() const { + return hasFallMin_; +} + + +int defiAssertion::hasFallMax() const { + return hasFallMax_; +} + + +double defiAssertion::distance() const { + return fallMax_; // distance is stored here +} + + +double defiAssertion::riseMin() const { + return riseMin_; +} + + +double defiAssertion::riseMax() const { + return riseMax_; +} + + +double defiAssertion::fallMin() const { + return fallMin_; +} + + +double defiAssertion::fallMax() const { + return fallMax_; +} + + +void defiAssertion::setRiseMin(double d) { + riseMin_ = d; + hasRiseMin_ = 1; +} + + +void defiAssertion::setRiseMax(double d) { + riseMax_ = d; + hasRiseMax_ = 1; +} + + +void defiAssertion::setFallMin(double d) { + fallMin_ = d; + hasFallMin_ = 1; +} + + +void defiAssertion::setFallMax(double d) { + fallMax_ = d; + hasFallMax_ = 1; +} + + +int defiAssertion::numItems() const { + return numItems_; +} + + +int defiAssertion::isPath(int index) const { + if (index >= 0 && index < numItems_) { + return (itemTypes_[index] == 'p') ? 1 : 0; + } + return 0; +} + + +int defiAssertion::isNet(int index) const { + if (index >= 0 && index < numItems_) { + return (itemTypes_[index] == 'n') ? 1 : 0; + } + return 0; +} + + +void defiAssertion::path(int index, char** fromInst, char** fromPin, + char** toInst, char** toPin) const { + struct defiAssertPath* ap; + + if (index >= 0 && index < numItems_ && + itemTypes_[index] == 'p') { + ap = (struct defiAssertPath*)(items_[index]); + if (fromInst) *fromInst = ap->fromInst_; + if (fromPin) *fromPin = ap->fromPin_; + if (toInst) *toInst = ap->toInst_; + if (toPin) *toPin = ap->toPin_; + } +} + + +void defiAssertion::net(int index, char** netName) const { + if (index >= 0 && index < numItems_ && + itemTypes_[index] == 'n') { + if (netName) *netName = (char*)(items_[index]); + } +} + + +void defiAssertion::bumpItems() { + int i; + char* newTypes; + int** newItems; + (numItemsAllocated_) *= 2; + newTypes = (char*)malloc(numItemsAllocated_ * sizeof(char)); + newItems = (int**)malloc(numItemsAllocated_ * sizeof(int*)); + for (i = 0; i < numItems_; i++) { + newItems[i] = items_[i]; + newTypes[i] = itemTypes_[i]; + } + free((char*)items_); + free((char*)itemTypes_); + items_ = newItems; + itemTypes_ = newTypes; +} + + +void defiAssertion::addNet(const char* name) { + int i; + char* s, *s1; + + // set wiredlogic to false + isWiredlogic_ = 0; + + // make our own copy + i = strlen(name) + 1; + if (name[i-2] == ',') { + s = (char*)malloc(i-1); + s1 = (char*)malloc(i-1); + strncpy(s1, name, i-2); + s1[i-2] = '\0'; + strcpy(s, defData->DEFCASE(s1)); + free(s1); + } else { + s = (char*)malloc(i); + strcpy(s, defData->DEFCASE(name)); + } + + // make sure there is space in the array + if (numItems_ >= numItemsAllocated_) + bumpItems(); + + // place it + i = numItems_; + items_[i] = (int*)s; + itemTypes_[i] = 'n'; + numItems_ = i + 1; + //strcpy(itemTypes_, "n"); +} + + +void defiAssertion::addPath(const char* fromInst, const char* fromPin, + const char* toInst, const char* toPin) { + int i; + struct defiAssertPath* s; + + // set wiredlogic to false + isWiredlogic_ = 0; + + // make our own copy + s = (struct defiAssertPath*)malloc(sizeof(struct defiAssertPath)); + i = strlen(fromInst) + 1; + s->fromInst_ = (char*)malloc(i); + strcpy(s->fromInst_, defData->DEFCASE(fromInst)); + i = strlen(toInst) + 1; + s->toInst_ = (char*)malloc(i); + strcpy(s->toInst_, defData->DEFCASE(toInst)); + i = strlen(fromPin) + 1; + s->fromPin_ = (char*)malloc(i); + strcpy(s->fromPin_, defData->DEFCASE(fromPin)); + i = strlen(toPin) + 1; + s->toPin_ = (char*)malloc(i); + strcpy(s->toPin_, defData->DEFCASE(toPin)); + + // make sure there is space in the array + if (numItems_ >= numItemsAllocated_) + bumpItems(); + + // place it + i = numItems_; + items_[i] = (int*)s; + itemTypes_[i] = 'p'; + numItems_ = i + 1; + //strcpy(itemTypes_, "p"); +} + + +void defiAssertion::print(FILE* f) const { + fprintf(f, "Assertion %s\n", netName()); +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiAssertion.hpp b/lefdef/src/def/def/defiAssertion.hpp new file mode 100644 index 00000000..6a48d2b2 --- /dev/null +++ b/lefdef/src/def/def/defiAssertion.hpp @@ -0,0 +1,138 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiAssertion_h +#define defiAssertion_h + +#include "defiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Struct holds the data for one assertion/constraint. +// An assertion or constraint is either a net/path rule or a +// wired logic rule. +// +// A net/path rule is an item or list of items plus specifications. +// The specifications are: rise/fall min/max. +// The items are a list of (one or more) net names or paths or a +// combination of both. +// +// A wired logic rule is a netname and a distance. +// +// We will NOT allow the mixing of wired logic rules and net/path delays +// in the same assertion/constraint. +// +// We will allow the rule to be a sum of sums (which will be interpreted +// as just one list). +// +class defrData; + +class defiAssertion { +public: + defiAssertion(defrData *data); + void Init(); + + void Destroy(); + ~defiAssertion(); + + void setConstraintMode(); + void setAssertionMode(); + void setSum(); + void setDiff(); + void setNetName(const char* name); + void setRiseMin(double num); + void setRiseMax(double num); + void setFallMin(double num); + void setFallMax(double num); + void setDelay(); + void setWiredlogicMode(); + void setWiredlogic(const char* net, double dist); + void addNet(const char* name); + void addPath(const char* fromInst, const char* fromPin, + const char* toInst, const char* toPin); + void bumpItems(); + void unsetSum(); + + int isAssertion() const; // Either isAssertion or isConstraint is true + int isConstraint() const; + int isWiredlogic() const; // Either isWiredlogic or isDelay is true + int isDelay() const; + int isSum() const; + int isDiff() const; + int hasRiseMin() const; + int hasRiseMax() const; + int hasFallMin() const; + int hasFallMax() const; + double riseMin() const; + double riseMax() const; + double fallMin() const; + double fallMax() const; + const char* netName() const; // Wired logic net name + double distance() const; // Wired logic distance + int numItems() const; // number of paths or nets + int isPath(int index) const; // is item #index a path? + int isNet(int index) const; // is item #index a net? + void path(int index, char** fromInst, char** fromPin, + char** toInst, char** toPin) const; // Get path data for item #index + void net(int index, char** netName) const; // Get net data for item #index + + void clear(); + void print(FILE* f) const; + + +protected: + char isAssertion_; + char isSum_; + char isDiff_; + char hasRiseMin_; + char hasRiseMax_; + char hasFallMin_; + char hasFallMax_; + char isWiredlogic_; + char isDelay_; + char* netName_; // wired logic net name + int netNameLength_; + double riseMin_; + double riseMax_; + double fallMin_; + double fallMax_; // also used to store the wired logic dist + int numItems_; + int numItemsAllocated_; + char* itemTypes_; + int** items_; // not really integers. + + defrData *defData; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiBlockage.cpp b/lefdef/src/def/def/defiBlockage.cpp new file mode 100644 index 00000000..e64849e0 --- /dev/null +++ b/lefdef/src/def/def/defiBlockage.cpp @@ -0,0 +1,459 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lex.h" +#include "defiBlockage.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiBlockages +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + +defiBlockage::defiBlockage(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiBlockage::Init() { + numPolys_ = 0; + clear(); + layerName_ = 0; + componentName_ = 0; + layerNameLength_ = 0; + componentNameLength_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + rectsAllocated_ = 0; + polysAllocated_ = 0; + polygons_ = 0; +} + + +defiBlockage::~defiBlockage() { + Destroy(); +} + + +void defiBlockage::clear() { + hasLayer_ = 0; + hasPlacement_ = 0; + hasComponent_ = 0; + hasSlots_ = 0; + hasFills_ = 0; + hasPushdown_ = 0; + hasExceptpgnet_ = 0; + hasSoft_ = 0; + maxDensity_ = -1; + minSpacing_ = -1; + width_ = -1; + numRectangles_ = 0; + mask_ = 0; +} + + +void defiBlockage::clearPoly() { + struct defiPoints* p; + int i; + + for (i = 0; i < numPolys_; i++) { + p = polygons_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(polygons_[i])); + } + numPolys_ = 0; +} + +void defiBlockage::Destroy() { + if (layerName_) free(layerName_); + if (componentName_) free(componentName_); + layerName_ = 0; + componentName_ = 0; + if (rectsAllocated_) { + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + rectsAllocated_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + } + clearPoly(); + free((char*)(polygons_)); + polygons_ = 0; + clear(); +} + + +void defiBlockage::setLayer(const char* name) { + int len = strlen(name) + 1; + if (layerNameLength_ < len) { + if (layerName_) free(layerName_); + layerName_ = (char*)malloc(len); + layerNameLength_ = len; + } + strcpy(layerName_, defData->DEFCASE(name)); + hasLayer_ = 1; +} + + +void defiBlockage::setPlacement() { + + /* 10/29/2001 - Wanda da Rosa, new enhancement */ + hasPlacement_ = 1; + return; +} + +void defiBlockage::setComponent(const char* name) { + int len; + + /* 10/29/2001 - Wanda da Rosa, component name is required */ + len = strlen(name) + 1; + if (componentNameLength_ < len) { + if (componentName_) free(componentName_); + componentName_ = (char*)malloc(len); + componentNameLength_ = len; + } + strcpy(componentName_, defData->DEFCASE(name)); + hasComponent_ = 1; +} + +void defiBlockage::setSlots() { + hasSlots_ = 1; +} + +void defiBlockage::setFills() { + hasFills_ = 1; +} + +void defiBlockage::setPushdown() { + hasPushdown_ = 1; +} + +// 5.7 +void defiBlockage::setExceptpgnet() { + hasExceptpgnet_ = 1; +} + +// 5.7 +void defiBlockage::setSoft() { + hasSoft_ = 1; +} + +// 5.7 +void defiBlockage::setPartial(double maxDensity) { + maxDensity_ = maxDensity; +} + +void defiBlockage::setSpacing(int minSpacing) { + minSpacing_ = minSpacing; +} + +void defiBlockage::setDesignRuleWidth(int width) { + width_ = width; +} + +void defiBlockage::setMask(int colorMask) { + mask_ = colorMask; +} + +void defiBlockage::addRect(int xl, int yl, int xh, int yh) { + if (numRectangles_ == rectsAllocated_) { + int i; + int max = rectsAllocated_ = (rectsAllocated_ == 0) ? + 2 : rectsAllocated_ * 2; + int* newxl = (int*)malloc(sizeof(int)*max); + int* newyl = (int*)malloc(sizeof(int)*max); + int* newxh = (int*)malloc(sizeof(int)*max); + int* newyh = (int*)malloc(sizeof(int)*max); + for (i = 0; i < numRectangles_; i++) { + newxl[i] = xl_[i]; + newyl[i] = yl_[i]; + newxh[i] = xh_[i]; + newyh[i] = yh_[i]; + } + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + xl_ = newxl; + yl_ = newyl; + xh_ = newxh; + yh_ = newyh; + } + xl_[numRectangles_] = xl; + yl_[numRectangles_] = yl; + xh_[numRectangles_] = xh; + yh_[numRectangles_] = yh; + numRectangles_ += 1; +} + + +// 5.6 +void defiBlockage::addPolygon(defiGeometries* geom) { + struct defiPoints* p; + int x, y; + int i; + + if (numPolys_ == polysAllocated_) { + struct defiPoints** poly; + polysAllocated_ = (polysAllocated_ == 0) ? + 2 : polysAllocated_ * 2; + poly = (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + polysAllocated_); + for (i = 0; i < numPolys_; i++) + poly[i] = polygons_[i]; + if (polygons_) + free((char*)(polygons_)); + polygons_ = poly; + } + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + polygons_[numPolys_] = p; + numPolys_ += 1; +} + + +int defiBlockage::hasLayer() const { + return hasLayer_; +} + + +int defiBlockage::hasPlacement() const { + return hasPlacement_; +} + + +int defiBlockage::hasComponent() const { + return hasComponent_; +} + + +int defiBlockage::hasSlots() const { + return hasSlots_; +} + + +int defiBlockage::hasFills() const { + return hasFills_; +} + + +int defiBlockage::hasPushdown() const { + return hasPushdown_; +} + +// 5.7 +int defiBlockage::hasExceptpgnet() const { + return hasExceptpgnet_; +} + +// 5.7 +int defiBlockage::hasSoft() const { + return hasSoft_; +} + +// 5.7 +int defiBlockage::hasPartial() const { + if (maxDensity_ == -1) + return 0; + return 1; +} + +// 5.7 +double defiBlockage::placementMaxDensity() const { + return maxDensity_; +} + +int defiBlockage::hasSpacing() const { + if (minSpacing_ == -1) + return 0; + return 1; +} + + +int defiBlockage::hasDesignRuleWidth() const { + if (width_ == -1) + return 0; + return 1; +} + +int defiBlockage::hasMask() const { + return mask_; +} + +int defiBlockage::minSpacing() const { + return minSpacing_; +} + + +int defiBlockage::designRuleWidth() const { + return width_; +} + +int defiBlockage::mask() const { + return mask_; +} + +const char* defiBlockage::layerName() const { + return layerName_; +} + + +const char* defiBlockage::layerComponentName() const { + return componentName_; +} + + +const char* defiBlockage::placementComponentName() const { + return componentName_; +} + + +int defiBlockage::numRectangles() const { + return numRectangles_; +} + + +int defiBlockage::xl(int index) const { + if (index < 0 || index >= numRectangles_) { + defiError(1, 0, "bad index for blockage xl", defData); + return 0; + } + return xl_[index]; +} + + +int defiBlockage::yl(int index) const { + if (index < 0 || index >= numRectangles_) { + defiError(1, 0, "bad index for blockage yl", defData); + return 0; + } + return yl_[index]; +} + + +int defiBlockage::xh(int index) const { + if (index < 0 || index >= numRectangles_) { + defiError(1, 0, "bad index for blockage xh", defData); + return 0; + } + return xh_[index]; +} + + +int defiBlockage::yh(int index) const { + if (index < 0 || index >= numRectangles_) { + defiError(1, 0, "bad index for blockage yh", defData); + return 0; + } + return yh_[index]; +} + + +// 5.6 +int defiBlockage::numPolygons() const { + return numPolys_; +} + + +// 5.6 +struct defiPoints defiBlockage::getPolygon(int index) const { + return *(polygons_[index]); +} + + +void defiBlockage::print(FILE* f) const { + int i, j; + struct defiPoints points; + + if (hasLayer()) { + fprintf(f, "- LAYER %s", layerName()); + if (hasComponent()) + fprintf(f, " + COMPONENT %s", layerComponentName()); + if (hasSlots()) + fprintf(f, " + SLOTS"); + if (hasFills()) + fprintf(f, " + FILLS"); + if (hasPushdown()) + fprintf(f, " + PUSHDOWN"); + if (hasExceptpgnet()) + fprintf(f, " + EXCEPTPGNET"); + fprintf(f, "\n"); + } + if (hasPlacement()) { + fprintf(f, "- PLACEMENT"); + if (hasComponent()) + fprintf(f, " + COMPONENT %s", layerComponentName()); + if (hasPushdown()) + fprintf(f, " + PUSHDOWN"); + if (hasSoft()) + fprintf(f, " + SOFT"); + if (hasPartial()) + fprintf(f, " + PARTIAL %f", placementMaxDensity()); + fprintf(f, "\n"); + } + + for (i = 0; i < numRectangles(); i++) { + fprintf(f, " RECT %d %d %d %d\n", xl(i), yl(i), xh(i), yh(i)); + } + + for (i = 0; i < numPolygons(); i++) { + fprintf(f, " POLYGON "); + points = getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(f, "%d %d ", points.x[j], points.y[j]); + fprintf(f,"\n"); + } + fprintf(f,"\n"); +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiBlockage.hpp b/lefdef/src/def/def/defiBlockage.hpp new file mode 100644 index 00000000..7659673f --- /dev/null +++ b/lefdef/src/def/def/defiBlockage.hpp @@ -0,0 +1,132 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiBLOCKAGES_h +#define defiBLOCKAGES_h + +#include +#include "defiKRDefs.hpp" +#include "defiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE +class defrData; + +class defiBlockage { +public: + defiBlockage(defrData *data); + void Init(); + + void Destroy(); + ~defiBlockage(); + + void clear(); + void clearPoly(); + + void setLayer(const char* name); + void setPlacement(); + void setComponent(const char* name); + void setSlots(); + void setFills(); + void setPushdown(); + void setExceptpgnet(); // 5.7 + void setSoft(); // 5.7 + void setPartial(double maxDensity); // 5.7 + void setSpacing(int minSpacing); + void setDesignRuleWidth(int width); + void setMask(int maskColor); // 5.8 + void addRect(int xl, int yl, int xh, int yh); + void addPolygon(defiGeometries* geom); + + int hasLayer() const; + int hasPlacement() const; + int hasComponent() const; + int hasSlots() const; + int hasFills() const; + int hasPushdown() const; + int hasExceptpgnet() const; // 5.7 + int hasSoft() const; // 5.7 + int hasPartial() const; // 5.7 + int hasSpacing() const; // 5.6 + int hasDesignRuleWidth() const; // 5.6 + int hasMask() const; // 5.8 + int mask() const; // 5.8 + int minSpacing() const; // 5.6 + int designRuleWidth() const; // 5.6 + double placementMaxDensity() const; // 5.7 + const char* layerName() const; + const char* layerComponentName() const; + const char* placementComponentName() const; + + int numRectangles() const; + int xl(int index) const; + int yl(int index) const; + int xh(int index) const; + int yh(int index) const; + + int numPolygons() const; // 5.6 + struct defiPoints getPolygon(int index) const; // 5.6 + + void print(FILE* f) const; + +protected: + int hasLayer_; + char* layerName_; + int layerNameLength_; + int hasPlacement_; + int hasComponent_; + char* componentName_; + int componentNameLength_; + int hasSlots_; + int hasFills_; + int hasPushdown_; // 5.7 + int hasExceptpgnet_ ; // 5.7 + int hasSoft_; // 5.7 + double maxDensity_; // 5.7 + int minSpacing_; + int width_; + int numRectangles_; + int rectsAllocated_; + int mask_; // 5.8 + int* xl_; + int* yl_; + int* xh_; + int* yh_; + int numPolys_; // 5.6 + int polysAllocated_; // 5.6 + struct defiPoints** polygons_; // 5.6 + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiComponent.cpp b/lefdef/src/def/def/defiComponent.cpp new file mode 100644 index 00000000..2922175b --- /dev/null +++ b/lefdef/src/def/def/defiComponent.cpp @@ -0,0 +1,988 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "defiComponent.hpp" +#include "defiDebug.hpp" +#include "lex.h" +#include "defiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/********************************************************* +* class defiComponentMaskShiftLayer +**********************************************************/ +defiComponentMaskShiftLayer::defiComponentMaskShiftLayer(defrData *data) + : defData(data) +{ + Init(); +} + +defiComponentMaskShiftLayer::~defiComponentMaskShiftLayer() { + Destroy(); +} + +void defiComponentMaskShiftLayer::Init() { + layersAllocated_ = 0; + numLayers_ = 0; + layers_ = 0; + + bumpLayers(16); +} + +void defiComponentMaskShiftLayer::Destroy() { + if (numLayers_) { + for (int i = 0; i < numLayers_; i++) { + if (layers_[i]) { + free(layers_[i]); + } + } + free((char*)(layers_)); + } else { + if (layersAllocated_) { + free((char*)(layers_)); + } + } + layersAllocated_ = 0; + numLayers_ = 0; + layers_ = 0; +} + +void defiComponentMaskShiftLayer::addMaskShiftLayer(const char* layer) { + int len = strlen(layer) + 1; + if (numLayers_ == layersAllocated_) + bumpLayers(numLayers_ * 2); + layers_[numLayers_] = (char*)malloc(len); + strcpy(layers_[numLayers_], defData->DEFCASE(layer)); + (numLayers_)++; +} + +void defiComponentMaskShiftLayer::bumpLayers(int size) { + int i; + char** newLayers = (char**)malloc(sizeof(char*)* size); + for (i = 0; i < numLayers_; i++) { + newLayers[i] = layers_[i]; + } + if (layers_) { + free((char*)(layers_)); + } + layers_ = newLayers; + layersAllocated_ = size; +} + +void defiComponentMaskShiftLayer::clear() { + for (int i = 0; i < numLayers_; i++) { + free(layers_[i]); + } + numLayers_ = 0; +} + +int defiComponentMaskShiftLayer::numMaskShiftLayers() const { + return numLayers_; +} + +const char* defiComponentMaskShiftLayer::maskShiftLayer(int index) const { + if (index >= 0 && index < numLayers_) { + return layers_[index]; + } + + return 0; +} + + +/********************************************************* +* class defiComponent +**********************************************************/ +defiComponent::defiComponent(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiComponent::Init() { + id_ = 0; + name_ = 0; + regionName_ = 0; + foreignName_ = 0; + Fori_ = 0; + EEQ_ = 0; + generateName_ = 0; + macroName_ = 0; + generateNameSize_ = 0; + maskShiftSize_ = 0; + maskShift_ = 0; + macroNameSize_ = 0; + minLayerSize_ = 0; + maxLayerSize_ = 0; + minLayer_ = 0; + maxLayer_ = 0; + nets_ = 0; + source_ = 0; + numNets_ = 0; + bumpName(16); + bumpId(16); + bumpRegionName(16); + bumpEEQ(16); + bumpNets(16); + bumpForeignName(16); + bumpMinLayer(16); + bumpMaxLayer(16); + numProps_ = 0; + propsAllocated_ = 2; + names_ = (char**)malloc(sizeof(char*)* 2); + values_ = (char**)malloc(sizeof(char*)* 2); + dvalues_ = (double*)malloc(sizeof(double)* 2); + types_ = (char*)malloc(sizeof(char)* 2); + clear(); + + numRects_ = 0; + rectsAllocated_ = 1; + rectXl_ = (int*)malloc(sizeof(int)*1); + rectYl_ = (int*)malloc(sizeof(int)*1); + rectXh_ = (int*)malloc(sizeof(int)*1); + rectYh_ = (int*)malloc(sizeof(int)*1); +} + + +void defiComponent::Destroy() { + free(name_); + free(regionName_); + free(id_); + free(EEQ_); + free(minLayer_); + free(maxLayer_); + free((char*)(nets_)); + netsAllocated_ = 0; // avoid freeing again later + if (source_) free(source_); + if (foreignName_) free(foreignName_); + if (generateName_) free(generateName_); + if (macroName_) free(macroName_); + if (netsAllocated_) free((char*)(nets_)); + free((char*)(maskShift_)); + free((char*)(names_)); + free((char*)(values_)); + free((char*)(dvalues_)); + free((char*)(types_)); + free((char*)(rectXl_)); + free((char*)(rectYl_)); + free((char*)(rectXh_)); + free((char*)(rectYh_)); +} + + +defiComponent::~defiComponent() { + Destroy(); +} + + +void defiComponent::IdAndName(const char* id, const char* name) { + int len; + + clear(); + + if ((len = strlen(id)+1) > idSize_) + bumpId(len); + strcpy(id_, defData->DEFCASE(id)); + + if ((len = strlen(name)+1) > nameSize_) + bumpName(len); + strcpy(name_, defData->DEFCASE(name)); +} + + +const char* defiComponent::source() const { + return source_; +} + + +int defiComponent::weight() const { + return weight_; +} + + +void defiComponent::setWeight(int w) { + weight_ = w; + hasWeight_ = 1; +} + +int defiComponent::maskShift(int index) const { + if (index < 0 || index >= maskShiftSize_) { + defiError(1, 0, "bad index for component maskShift", defData); + return 0; + } + + return maskShift_[index]; +} + +void defiComponent::setMaskShift(const char *shiftMask) { + int shiftMaskLength = strlen(shiftMask); + + maskShift_ = (int*)malloc(sizeof(int)* shiftMaskLength); + maskShiftSize_ = shiftMaskLength; + + for (int i = 0; i < shiftMaskLength; i++) { + int curShift = shiftMask[i] - '0'; + + // Strip possible error data. + if (curShift > 9 || curShift < 0) { + curShift = 0; + } + + maskShift_[shiftMaskLength - i - 1] = curShift; + } +} + +void defiComponent::setGenerate(const char* newName, const char* macroName) { + int len = strlen(newName) + 1; + + if (generateNameSize_ < len) { + if (generateName_) free(generateName_); + generateName_ = (char*)malloc(len); + generateNameSize_ = len; + } + strcpy(generateName_, defData->DEFCASE(newName)); + + len = strlen(macroName) + 1; + if (macroNameSize_ < len) { + if (macroName_) free(macroName_); + macroName_ = (char*)malloc(len); + macroNameSize_ = len; + } + strcpy(macroName_, defData->DEFCASE(macroName)); + + hasGenerate_ = 1; // Ying Tan fix at 20010918 +} + + +void defiComponent::setSource(const char* name) { + int len = strlen(name) + 1; + source_ = (char*)malloc(len); + strcpy(source_, defData->DEFCASE(name)); +} + + +void defiComponent::setRegionName(const char* name) { + int len; + + if ((len = strlen(name)+1) > regionNameSize_) + bumpRegionName(len); + strcpy(regionName_, defData->DEFCASE(name)); + hasRegionName_ = 1; +} + + +void defiComponent::setEEQ(const char* name) { + int len; + + if ((len = strlen(name)+1) > EEQSize_) + bumpEEQ(len); + strcpy(EEQ_, defData->DEFCASE(name)); + hasEEQ_ = 1; +} + + +void defiComponent::setPlacementStatus(int n) { + status_= n; +} + + +void defiComponent::setPlacementLocation(int x, int y, int orient) { + x_ = x; + y_ = y; + orient_ = orient; +} + + +void defiComponent::setRegionBounds(int xl, int yl, int xh, int yh) { + int i; + i = numRects_; + if (i == rectsAllocated_) { + int max = rectsAllocated_ * 2; + int* nxl = (int*)malloc(sizeof(int)*max); + int* nyl = (int*)malloc(sizeof(int)*max); + int* nxh = (int*)malloc(sizeof(int)*max); + int* nyh = (int*)malloc(sizeof(int)*max); + for (i = 0; i < numRects_; i++) { + nxl[i] = rectXl_[i]; + nyl[i] = rectYl_[i]; + nxh[i] = rectXh_[i]; + nyh[i] = rectYh_[i]; + } + free((char*)(rectXl_)); + free((char*)(rectYl_)); + free((char*)(rectXh_)); + free((char*)(rectYh_)); + rectXl_ = nxl; + rectYl_ = nyl; + rectXh_ = nxh; + rectYh_ = nyh; + rectsAllocated_ = max; + } + rectXl_[i] = xl; + rectYl_[i] = yl; + rectXh_[i] = xh; + rectYh_[i] = yh; + numRects_ += 1; +} + + +// 5.6 +void defiComponent::setHalo(int left, int bottom, int right, int top) { + hasHalo_ = 1; + leftHalo_ = left; + bottomHalo_ = bottom; + rightHalo_ = right; + topHalo_ = top; +} + +// 5.7 +void defiComponent::setHaloSoft() { + hasHaloSoft_ = 1; +} + +// 5.7 +void defiComponent::setRouteHalo(int haloDist, const char* minLayer, + const char* maxLayer) { + int len; + + haloDist_ = haloDist; + if ((len = strlen(minLayer)+1) > minLayerSize_) + bumpMinLayer(len); + strcpy(minLayer_, defData->DEFCASE(minLayer)); + if ((len = strlen(maxLayer)+1) > maxLayerSize_) + bumpMaxLayer(len); + strcpy(maxLayer_, defData->DEFCASE(maxLayer)); +} + +void defiComponent::changeIdAndName(const char* id, const char* name) { + int len; + + if ((len = strlen(id)+1) > idSize_) + bumpId(len); + strcpy(id_, defData->DEFCASE(id)); + + if ((len = strlen(name)+1) > nameSize_) + bumpName(len); + strcpy(name_, defData->DEFCASE(name)); +} + + +const char* defiComponent::id() const { + return id_; +} + + +const char* defiComponent::name() const { + return name_; +} + + +int defiComponent::placementStatus() const { + return status_; +} + + +int defiComponent::placementX() const { + return x_; +} + + +int defiComponent::placementY() const { + return y_; +} + + +int defiComponent::placementOrient() const { + return orient_; +} + + +const char* defiComponent::placementOrientStr() const { + return (defiOrientStr(orient_)); +} + + +const char* defiComponent::regionName() const { + return regionName_; +} + + +const char* defiComponent::EEQ() const { + return EEQ_; +} + + +const char* defiComponent::generateName() const { + return generateName_; +} + + +const char* defiComponent::macroName() const { + return macroName_; +} + + +void defiComponent::regionBounds(int* size, + int** xl, int** yl, int** xh, int** yh) const { + *size = numRects_; + *xl = rectXl_; + *yl = rectYl_; + *xh = rectXh_; + *yh = rectYh_; +} + + +void defiComponent::bumpId(int size) { + if (id_) free(id_); + id_ = (char*)malloc(size); + idSize_ = size; + *(id_) = '\0'; +} + + +void defiComponent::bumpName(int size) { + if (name_) free(name_); + name_ = (char*)malloc(size); + nameSize_ = size; + *(name_) = '\0'; +} + + +void defiComponent::bumpRegionName(int size) { + if (regionName_) free(regionName_); + regionName_ = (char*)malloc(size); + regionNameSize_ = size; + *(regionName_) = '\0'; +} + + +void defiComponent::bumpEEQ(int size) { + if (EEQ_) free(EEQ_); + EEQ_ = (char*)malloc(size); + EEQSize_ = size; + *(EEQ_) = '\0'; +} + + +void defiComponent::bumpMinLayer(int size) { + if (minLayer_) free(minLayer_); + minLayer_ = (char*)malloc(size); + minLayerSize_ = size; + *(minLayer_) = '\0'; +} + + +void defiComponent::bumpMaxLayer(int size) { + if (maxLayer_) free(maxLayer_); + maxLayer_ = (char*)malloc(size); + maxLayerSize_ = size; + *(maxLayer_) = '\0'; +} + +void defiComponent::clear() { + int i; + + if (id_) + *(id_) = '\0'; + if (name_) + *(name_) = '\0'; + if (regionName_) + *(regionName_) = '\0'; + if (foreignName_) + *(foreignName_) = '\0'; + if (EEQ_) + *(EEQ_) = '\0'; + if (minLayer_) + *(minLayer_) = '\0'; + if (maxLayer_) + *(maxLayer_) = '\0'; + Fori_ = 0; + status_ = 0; + hasRegionName_ = 0; + hasForeignName_ = 0; + hasFori_ = 0; + hasEEQ_ = 0; + hasWeight_ = 0; + hasGenerate_ = 0; + if (maskShiftSize_) { + free((int*)(maskShift_)); + } + maskShift_ = 0; + maskShiftSize_ = 0; + weight_ = 0; + if (source_) free(source_); + for (i = 0; i < numNets_; i++) { + free(nets_[i]); + } + numNets_ = 0; + source_ = 0; + hasHalo_ = 0; + hasHaloSoft_ = 0; + haloDist_ = 0; + leftHalo_ = 0; + bottomHalo_ = 0; + rightHalo_ = 0; + topHalo_ = 0; + for (i = 0; i < numProps_; i++) { + free(names_[i]); + free(values_[i]); + dvalues_[i] = 0; + } + numProps_ = 0; + numRects_ = 0; +} + + +int defiComponent::isUnplaced() const { + return status_ == DEFI_COMPONENT_UNPLACED ? 1 : 0 ; +} + + +int defiComponent::isPlaced() const { + return status_ == DEFI_COMPONENT_PLACED ? 1 : 0 ; +} + + +int defiComponent::isFixed() const { + return status_ == DEFI_COMPONENT_FIXED ? 1 : 0 ; +} + + +int defiComponent::isCover() const { + return status_ == DEFI_COMPONENT_COVER ? 1 : 0 ; +} + + +void defiComponent::print(FILE* fout) const { + fprintf(fout, "Component id '%s' name '%s'", + id(), + name()); + if (isPlaced()) { + fprintf(fout, " Placed at %d,%d orient %s", + placementX(), + placementY(), + placementOrientStr()); + } + if (isFixed()) { + fprintf(fout, " Fixed at %d,%d orient %s", + placementX(), + placementY(), + placementOrientStr()); + } + if (isCover()) { + fprintf(fout, " Cover at %d,%d orient %s", + placementX(), + placementY(), + placementOrientStr()); + } + fprintf(fout, "\n"); + + if (hasGenerate()) { + fprintf(fout, " generate %s %s\n", generateName(), + macroName()); + } + if (hasWeight()) { + fprintf(fout, " weight %d\n", weight()); + } + if (maskShiftSize()) { + fprintf(fout, " maskShift "); + + for (int i = 0; i < maskShiftSize(); i++) { + fprintf(fout, " %d", maskShift(i)); + } + fprintf(fout, "\n"); + } + if (hasSource()) { + fprintf(fout, " source '%s'\n", source()); + } + if (hasEEQ()) { + fprintf(fout, " EEQ '%s'\n", EEQ()); + } + + if (hasRegionName()) { + fprintf(fout, " Region '%s'\n", regionName()); + } + if (hasRegionBounds()) { + int size; + int *xl, *yl, *xh, *yh; + int j; + regionBounds(&size, &xl, &yl, &xh, &yh); + for (j = 0; j < size; j++) + fprintf(fout, " Region bounds %d,%d %d,%d\n", xl[j], yl[j], xh[j], yh[j]); + } + if (hasNets()) { + int i; + fprintf(fout, " Net connections:\n"); + for (i = 0; i < numNets(); i++) { + fprintf(fout, " '%s'\n", net(i)); + } + } +} + + +int defiComponent::hasRegionName() const { + return (int)(hasRegionName_); +} + + +int defiComponent::hasGenerate() const { + return (int)(hasGenerate_); +} + + +int defiComponent::hasWeight() const { + return (int)(hasWeight_); +} + +int defiComponent::maskShiftSize() const { + return maskShiftSize_; +} + +int defiComponent::hasSource() const { + return source_ ? 1 : 0; +} + + +int defiComponent::hasRegionBounds() const { + return numRects_ ? 1 : 0 ; +} + + +int defiComponent::hasEEQ() const { + return (int)(hasEEQ_); +} + + +int defiComponent::hasNets() const { + return numNets_ ? 1 : 0; +} + + +int defiComponent::numNets() const { + return numNets_; +} + + +// 5.6 +int defiComponent::hasHalo() const { + return hasHalo_; +} + + +// 5.7 +int defiComponent::hasHaloSoft() const { + return hasHaloSoft_; +} + + +// 5.7 +int defiComponent::hasRouteHalo() const { + return haloDist_; +} + +// 5.7 +int defiComponent::haloDist() const { + return haloDist_; +} + +// 5.7 +const char* defiComponent::minLayer() const { + return minLayer_; +} + +// 5.7 +const char* defiComponent::maxLayer() const { + return maxLayer_; +} + +void defiComponent::haloEdges(int* left, int* bottom, int* right, int* top) { + *left = leftHalo_; + *bottom = bottomHalo_; + *right = rightHalo_; + *top = topHalo_; +} + +void defiComponent::reverseNetOrder() { + // Reverse the order of the items in the nets array. + int one = 0; + int two = numNets_ - 1; + char* t; + while (one < two) { + t = nets_[one]; + nets_[one] = nets_[two]; + nets_[two] = t; + one++; + two--; + } +} + + +char* defiComponent::propName(int index) const { + if (index < 0 || index >= numProps_) { + defiError(1, 0, "bad index for component property", defData); + return 0; + } + return names_[index]; +} + + +char* defiComponent::propValue(int index) const { + if (index < 0 || index >= numProps_) { + defiError(1, 0, "bad index for component property", defData); + return 0; + } + return values_[index]; +} + + +double defiComponent::propNumber(int index) const { + if (index < 0 || index >= numProps_) { + defiError(1, 0, "bad index for component property", defData); + return 0; + } + return dvalues_[index]; +} + + +char defiComponent::propType(int index) const { + if (index < 0 || index >= numProps_) { + defiError(1, 0, "bad index for component property", defData); + return 0; + } + return types_[index]; +} + + +int defiComponent::propIsNumber(int index) const { + if (index < 0 || index >= numProps_) { + defiError(1, 0, "bad index for component property", defData); + return 0; + } + return dvalues_[index] ? 1 : 0; +} + +int defiComponent::propIsString(int index) const { + if (index < 0 || index >= numProps_) { + defiError(1, 0, "bad index for component property", defData); + return 0; + } + return dvalues_[index] ? 0 : 1; +} + +int defiComponent::numProps() const { + return numProps_; +} + + +void defiComponent::addProperty(const char* name, const char* value, + const char type) { + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nd[i] = dvalues_[i]; + nt[i] = types_[i]; + } + free((char*)(names_)); + free((char*)(values_)); + free((char*)(dvalues_)); + free((char*)(types_)); + names_ = nn; + values_ = nv; + dvalues_ = nd; + types_ = nt; + } + names_[numProps_] = (char*)malloc(len); + strcpy(names_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + values_[numProps_] = (char*)malloc(len); + strcpy(values_[numProps_], defData->DEFCASE(value)); + dvalues_[numProps_] = 0; + types_[numProps_] = type; + numProps_ += 1; +} + + +void defiComponent::addNumProperty(const char* name, const double d, + const char* value, const char type) { + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nd[i] = dvalues_[i]; + nt[i] = types_[i]; + } + free((char*)(names_)); + free((char*)(values_)); + free((char*)(dvalues_)); + free((char*)(types_)); + names_ = nn; + values_ = nv; + dvalues_ = nd; + types_ = nt; + } + names_[numProps_] = (char*)malloc(len); + strcpy(names_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + values_[numProps_] = (char*)malloc(len); + strcpy(values_[numProps_], defData->DEFCASE(value)); + dvalues_[numProps_] = d; + types_[numProps_] = type; + numProps_ += 1; +} + + +void defiComponent::addNet(const char* net) { + int len = strlen(net) + 1; + if (numNets_ == netsAllocated_) + bumpNets(numNets_ * 2); + nets_[numNets_] = (char*)malloc(len); + strcpy(nets_[numNets_], defData->DEFCASE(net)); + (numNets_)++; +} + + +void defiComponent::bumpNets(int size) { + int i; + char** newNets = (char**)malloc(sizeof(char*)* size); + for (i = 0; i < numNets_; i++) { + newNets[i] = nets_[i]; + } + free((char*)(nets_)); + nets_ = newNets; + netsAllocated_ = size; +} + + +const char* defiComponent::net(int index) const { + if (index >= 0 && index < numNets_) { + return nets_[index]; + } + return 0; +} + + +void defiComponent::bumpForeignName(int size) { + if (foreignName_) free(foreignName_); + foreignName_ = (char*)malloc(sizeof(char) * size); + foreignNameSize_ = size; + *(foreignName_) = '\0'; +} + + +void defiComponent::setForeignName(const char* name) { + int len; + + if (hasForeignName()) + defiError(1, 0, + "Multiple define of '+ FOREIGN' in COMPONENT is not supported.\n", defData); + if ((len = strlen(name)+1) > foreignNameSize_) + bumpForeignName(len); + strcpy(foreignName_, defData->DEFCASE(name)); + hasForeignName_ = 1; +} + + +void defiComponent::setForeignLocation(int x, int y, int orient) { + Fx_ = x; + Fy_ = y; + Fori_ = orient; + hasFori_ = 1; +} + + +int defiComponent::hasForeignName() const { + return (int)(hasForeignName_); +} + + +const char* defiComponent::foreignName() const { + return foreignName_; +} + + +int defiComponent::foreignX() const { + return Fx_; +} + + +int defiComponent::foreignY() const { + return Fy_; +} + + +int defiComponent::hasFori() const { + return (int)(hasFori_); +} + +const char* defiComponent::foreignOri() const { + switch (Fori_) { + case 0: return ("N"); + case 1: return ("W"); + case 2: return ("S"); + case 3: return ("E"); + case 4: return ("FN"); + case 5: return ("FW"); + case 6: return ("FS"); + case 7: return ("FE"); + } + return 0; +} + +int defiComponent::foreignOrient() const { + return Fori_; +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiComponent.hpp b/lefdef/src/def/def/defiComponent.hpp new file mode 100644 index 00000000..67cd4462 --- /dev/null +++ b/lefdef/src/def/def/defiComponent.hpp @@ -0,0 +1,249 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiComponent_h +#define defiComponent_h + +#include +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +// Placement status for the component. +// Default is 0 +#define DEFI_COMPONENT_UNPLACED 1 +#define DEFI_COMPONENT_PLACED 2 +#define DEFI_COMPONENT_FIXED 3 +#define DEFI_COMPONENT_COVER 4 + + +// Struct holds the data for componentMaskShiftLayers. +class defiComponentMaskShiftLayer { +public: + defiComponentMaskShiftLayer(defrData *data); + ~defiComponentMaskShiftLayer(); + + void Init(); + void Destroy(); + void addMaskShiftLayer(const char* layer); + int numMaskShiftLayers() const; + void bumpLayers(int size); + void clear(); + const char* maskShiftLayer(int index) const; + +protected: + int layersAllocated_; // allocated size of layers_ + int numLayers_; // number of places used in layers_ + char** layers_; + + defrData *defData; +}; + + +// Struct holds the data for one component. +class defiComponent { +public: + defiComponent(defrData *defData); + void Init(); + + void Destroy(); + ~defiComponent(); + + void IdAndName(const char* id, const char* name); + void setGenerate(const char* genName, const char* macroName); + void setPlacementStatus(int n); + void setPlacementLocation(int x, int y, int orient); + void setRegionName(const char* name); + void setRegionBounds(int xl, int yl, int xh, int yh); + void setEEQ(const char* name); + void addNet(const char* netName); + void addProperty(const char* name, const char* value, const char type); + void addNumProperty(const char* name, const double d, + const char* value, const char type); + void reverseNetOrder(); + void setWeight(int w); + void setMaskShift(const char* color); + void setSource(const char* name); + void setForeignName(const char* name); + void setFori(const char* name); + void setForeignLocation(int x, int y, int orient); + void setHalo(int left, int bottom, int right, int top); // 5.6 + void setHaloSoft(); // 5.7 + void setRouteHalo(int haloDist, const char* minLayer, const char* maxLayer); + // 5.7 + void clear(); + + // For OA to modify the Id & Name + void changeIdAndName(const char* id, const char* name); + + const char* id() const; + const char* name() const; + int placementStatus() const; + int isUnplaced() const; + int isPlaced() const; + int isFixed() const; + int isCover() const; + int placementX() const; + int placementY() const; + int placementOrient() const; + const char* placementOrientStr() const; + int hasRegionName() const; + int hasRegionBounds() const; + int hasEEQ() const; + int hasGenerate() const; + int hasSource() const; + int hasWeight() const; + int weight() const; + int maskShiftSize() const; + int maskShift(int index) const; + int hasNets() const; + int numNets() const; + const char* net(int index) const; + const char* regionName() const; + const char* source() const; + const char* EEQ() const; + const char* generateName() const; + const char* macroName() const; + int hasHalo() const; // 5.6 + int hasHaloSoft() const; // 5.7 + void haloEdges(int* left, int* bottom, int* right, int* top); // 5.6 + int hasRouteHalo() const; // 5.7 + int haloDist() const; // 5.7 + const char* minLayer() const; // 5.7 + const char* maxLayer() const; // 5.7 + + // Returns arrays for the ll and ur of the rectangles in the region. + // The number of items in the arrays is given in size. + void regionBounds(int*size, int** xl, int** yl, int** xh, int** yh) const; + + int hasForeignName() const; + const char* foreignName() const; + int foreignX() const; + int foreignY() const; + const char* foreignOri() const; // return the string value of the orient + int foreignOrient() const; // return the enum value of the orient + int hasFori() const; + + int numProps() const; + char* propName(int index) const; + char* propValue(int index) const; + double propNumber(int index) const; + char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + + // Debug printing + void print(FILE* fout) const; + + void bumpId(int size); + void bumpName(int size); + void bumpRegionName(int size); + void bumpEEQ(int size); + void bumpNets(int size); + void bumpForeignName(int size); + void bumpMinLayer(int size); + void bumpMaxLayer(int size); + void bumpFori(int size); + +protected: + char* id_; // instance id + char* name_; // name. + int nameSize_; // allocated size of name. + int idSize_; // allocated size of id. + int ForiSize_; // allocate size of foreign ori + int status_; // placement status + char hasRegionName_; // the file supplied a region name for this comp + char hasEEQ_; // the file supplied an eeq + char hasGenerate_; // the file supplied an generate name and macro name + char hasWeight_; // the file supplied a weight + char hasFori_; // the file supplied a foreign orig name + int orient_; // orientation + int x_, y_; // placement loc + + int numRects_; + int rectsAllocated_; + int* rectXl_; // region points + int* rectYl_; + int* rectXh_; + int* rectYh_; + + char* regionName_; // name. + int regionNameSize_; // allocated size of region name + + char* EEQ_; + int EEQSize_; // allocated size of eeq + + int numNets_; // number of net connections + int netsAllocated_; // allocated size of nets array + char** nets_; // net connections + + int weight_; + int* maskShift_; + int maskShiftSize_; + char* source_; + char hasForeignName_; // the file supplied a foreign name + char* foreignName_; // name + int foreignNameSize_; // allocate size of foreign name + int Fx_, Fy_; // foreign loc + int Fori_; // foreign ori + int generateNameSize_; + char* generateName_; + int macroNameSize_; + char* macroName_; + + int hasHalo_; + int hasHaloSoft_; // 5.7 + int leftHalo_; + int bottomHalo_; + int rightHalo_; + int topHalo_; + int haloDist_; // 5.7 + int minLayerSize_; // 5.7 + char* minLayer_; // 5.7 + int maxLayerSize_; // 5.7 + char* maxLayer_; // 5.7 + + int numProps_; + int propsAllocated_; + char** names_; + char** values_; + double* dvalues_; + char* types_; + + defrData *defData; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiDebug.cpp b/lefdef/src/def/def/defiDebug.cpp new file mode 100644 index 00000000..f229e786 --- /dev/null +++ b/lefdef/src/def/def/defiDebug.cpp @@ -0,0 +1,96 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lex.h" +#include "defiDebug.hpp" + + +#include "defrData.hpp" +#include "defrSettings.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +extern defrContext defContext; + + /******************* + * Debug flags: + * 0 - + * 1 - malloc debug + * 2 - print each history size bump up. + * 3 - print each call to CatchAll + * 4 - + * 5 - + * 6 - + * 7 - + * 8 - + * 9 - + * 10 - + * 11 - lexer debug + * + ******************************/ + +/* Set flag */ +void defiSetDebug(int, int) { +} + +/* Read flag */ +int defiDebug(int) { + return 0; +} + +void defiError(int check, int msgNum, const char* mess, defrData *defData) { + /* check is 1 if the caller function has checked totalMsgLimit, etc. */ + if (!defData) { + defData = defContext.data; + } + + return defData->defiError(check, msgNum, mess); +} + +const char* upperCase(const char* str, defrData *defData) { + if (!defData) { + defData = defContext.data; + } + + return defData->upperCase(str); +} + +const char* DEFCASE(const char* ch, defrData *defData) { + if (!defData) { + defData = defContext.data; + } + + return defData->DEFCASE(ch); +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiDebug.hpp b/lefdef/src/def/def/defiDebug.hpp new file mode 100644 index 00000000..97e5789d --- /dev/null +++ b/lefdef/src/def/def/defiDebug.hpp @@ -0,0 +1,56 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiDebug_h +#define defiDebug_h + +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +/* Set flag */ +extern void defiSetDebug (int num, int value) ; + +/* Read flag */ +extern int defiDebug (int num) ; + +/* Error loggin function */ +extern void defiError(int check, int msgNum, const char* message, defrData *defData = NULL); + +/* for auto upshifting names in case insensitive files */ +extern const char* upperCase(const char* c, defrData *defData = NULL); +extern const char* DEFCASE(const char* ch, defrData *defData = NULL); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiDefs.hpp b/lefdef/src/def/def/defiDefs.hpp new file mode 100644 index 00000000..17b7b89c --- /dev/null +++ b/lefdef/src/def/def/defiDefs.hpp @@ -0,0 +1,182 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +/* Definitions header file for the DEF Interface */ + +#ifndef DEFI_DEFS_H +#define DEFI_DEFS_H + +#include +#include + +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/*=================== General Types and Definitions =================*/ + +#ifndef TRUE +#define TRUE (1) +#endif + +#ifndef FALSE +#define FALSE (0) +#endif + +#ifndef NULL +#define NULL (0) +#endif + +typedef struct defpoint defPOINT; + +struct defpoint { + int x; + int y; + }; + +typedef struct defrect defRECT; + +struct defrect { + defPOINT ll,ur; + }; + +typedef struct deftoken defTOKEN; + +struct deftoken { + defTOKEN *next; + int what; + int data; + defPOINT pt; + }; + +#define START_LIST 10001 +#define POINT_SPEC 10002 +#define VIA_SPEC 10003 +#define WIDTH_SPEC 10004 +#define LAYER_SPEC 10005 +#define SHAPE_SPEC 10006 + +#ifndef MIN +#define MIN(x,y) ((x) < (y)? (x) : (y)) +#endif + +#ifndef MIN +#define MAX(x,y) ((x) > (y)? (x) : (y)) +#endif + +#define ROUND(x) ((x) >= 0 ? (int)((x)+0.5) : (int)((x)-0.5)) + +//defTOKEN *TokenFromRect(); + +/*=================== Enumerated Types ============================*/ +typedef int defiBoolean; + +/* Every type of object has a unique identifier, and each object + * which is created knows its type, by storing the defiObjectType_e + * as the first member in the structure. + * + */ +typedef enum +{ + /* decrease likelihood of accidentally correct values by starting + at an unusual number */ + defiInvalidObject = 41713, + defiUnknownObject /* void * */ +} defiObjectType_e; + + +/* The memory policy controls how an object which refers to or is composed of + * other objects manages those sub-objects, particularly when the parent + * object is copied or deleted. The policy is specified as an argument to the + * constructor or initializer, and it is stored with the parent object. + * + * The memory policy is a generalization of the common distinction between + * deep and shallow copies. When a shallow copy of a parent object is made, + * the copy maintains pointers to the original sub-objects, and the original + * parent remains responsible for deleting those sub-objects. When a deep + * copy of a parent object is made, the copy maintains pointers to new copies + * of each of the sub-objects, and the copy is responsible for deleting the + * new sub-objects. + * + * The defiPrivateSubObjects policy corresponds to a deep copy, while the the + * defiReferencedSubObjects policy corresponds to a shallow copy. Usually an + * initial parent object will be created using defiPrivateSubObjects. When a + * copy is made of that parent object, the copy may either maintain its own + * private versions of each sub-object, or it may refer to the original + * sub-objects. + * + * In certain cases, it is useful to create a deep copy of a parent object, + * even though the new parent object shouldn't be responsible for the new + * sub-objects. In this case, the defiOrphanSubObjects and + * defiAdoptedSubObjects policies may be used. defiOrphanSubObjects is + * specified while creating the deep copy, and then defiAdoptedSubObjects is + * specified while creating another parent which will take on the + * responsibility for the orphans. + * + * An object's memory policy affects only the sub-objects which it directly + * controls. Those sub-objects themselves may have the same memory policy as + * their parents, or they may have a different memory policy. When a copy is + * made of a child sub-object, the memory policy of the child controls + * whether deep or shallow copies are made of the grandchildren. + */ +typedef enum +{ + /* decrease likelihood of accidentally correct values by starting + at an unusual number */ + defiInvalidMemoryPolicy = 23950, + defiPrivateSubObjects, // deep copy + delete + defiReferencedSubObjects, // shallow copy, no delete + defiOrphanSubObjects, // deep copy, no delete + defiAdoptedSubObjects // shallow copy + delete +} defiMemoryPolicy_e; + +/* An opaque pointer for passing user data through from one API + * function to another. + * A handle which a user can set to point to their own data + * on a per-callback basis. (See the comment in defwWriter.h) + */ +#define defiUserData void * +#define defiUserDataHandle void ** + +/* On SunOs 4.1.3 with acc, this is in libansi.a, but isn't properly + * declared anywhere in the header files supplied with the compiler. + */ +#ifdef __SunOS_4_1_3 +extern int strcasecmp(const char*, const char*); +#endif + +#ifdef WIN32 +#define strdup _strdup +#endif + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiFPC.cpp b/lefdef/src/def/def/defiFPC.cpp new file mode 100644 index 00000000..f1088a6f --- /dev/null +++ b/lefdef/src/def/def/defiFPC.cpp @@ -0,0 +1,269 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiFPC.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiFPC +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiFPC::defiFPC(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiFPC::Init() { + name_ = 0; + nameLength_ = 0; + namesAllocated_ = 0; + namesUsed_ = 0; + names_ = 0; + rowOrComp_ = 0; + clear(); +} + + +defiFPC::~defiFPC() { + Destroy(); +} + + +void defiFPC::Destroy() { + + clear(); + + if (name_) free(name_); + name_ = 0; + nameLength_ = 0; + + free((char*)(names_)); + free((char*)(rowOrComp_)); + namesAllocated_ = 0; +} + + +void defiFPC::clear() { + int i; + + direction_ = 0; + hasAlign_ = 0; + hasMin_ = 0; + hasMax_ = 0; + hasEqual_ = 0; + corner_ = 0; + + for (i = 0; i < namesUsed_; i++) { + if (names_[i]) free (names_[i]) ; + } + namesUsed_ = 0; +} + + +void defiFPC::setName(const char* name, const char* direction) { + int len = strlen(name) + 1; + + clear(); + + if (len > nameLength_) { + if (name_) free(name_); + nameLength_ = len; + name_ = (char*)malloc(len); + } + strcpy(name_, defData->DEFCASE(name)); + + if (*direction == 'H') + direction_ = 'H'; + else if (*direction == 'V') + direction_ = 'V'; + else + defiError(0, 6030, "ERROR (DEFPARS-6030): Invalid direction specified with FPC name. The valid direction is either 'H' or 'V'. Specify a valid value and then try again.", defData); + +} + + +void defiFPC::print(FILE* f) const { + fprintf(f, "FPC '%s'\n", name_); +} + + +const char* defiFPC::name() const { + return name_; +} + + +int defiFPC::isVertical() const { + return direction_ == 'V' ? 1 : 0 ; +} + + +int defiFPC::isHorizontal() const { + return direction_ == 'H' ? 1 : 0 ; +} + + +int defiFPC::hasAlign() const { + return (int)(hasAlign_); +} + + +int defiFPC::hasMax() const { + return (int)(hasMax_); +} + + +int defiFPC::hasMin() const { + return (int)(hasMin_); +} + + +int defiFPC::hasEqual() const { + return (int)(hasEqual_); +} + + +double defiFPC::alignMin() const { + return minMaxEqual_; +} + + +double defiFPC::alignMax() const { + return minMaxEqual_; +} + + +double defiFPC::equal() const { + return minMaxEqual_; +} + + +int defiFPC::numParts() const { + return namesUsed_; +} + + +void defiFPC::setAlign() { + hasAlign_ = 0; +} + + +void defiFPC::setMin(double num) { + minMaxEqual_ = num; +} + + +void defiFPC::setMax(double num) { + minMaxEqual_ = num; +} + + +void defiFPC::setEqual(double num) { + minMaxEqual_ = num; +} + + +void defiFPC::setDoingBottomLeft() { + corner_ = 'B'; +} + + +void defiFPC::setDoingTopRight() { + corner_ = 'T'; +} + + +void defiFPC::getPart(int index, int* corner, int* typ, char** name) const { + if (index >= 0 && index <= namesUsed_) { + // 4 for bottom left 0 for topright + // 2 for row 0 for comps + if (corner) *corner = (int)((rowOrComp_[index] & 4) ? 'B' : 'T') ; + if (typ) *typ = (int)((rowOrComp_[index] & 2) ? 'R' : 'C') ; + if (name) *name = names_[index]; + } +} + + +void defiFPC::addRow(const char* name) { + addItem('R', defData->DEFCASE(name)); +} + + +void defiFPC::addComps(const char* name) { + addItem('C', defData->DEFCASE(name)); +} + + +void defiFPC::addItem(char item, const char* name) { + int len = strlen(name) + 1; + + if (namesUsed_ >= namesAllocated_) { + char* newR; + char** newN; + int i; + namesAllocated_ = + namesAllocated_ ? namesAllocated_ * 2 : 8 ; + newN = (char**) malloc(sizeof(char*) * namesAllocated_); + newR = (char*) malloc(sizeof(char) * namesAllocated_); + for (i = 0; i < namesUsed_; i++) { + newN[i] = names_[i]; + newR[i] = rowOrComp_[i]; + } + if (names_) free((char*)(names_)); + if (rowOrComp_) free(rowOrComp_); + names_ = newN; + rowOrComp_ = newR; + } + + names_[namesUsed_] = (char*)malloc(len); + strcpy(names_[namesUsed_], name); + + // 4 for bottomleft + // 2 for row + rowOrComp_[namesUsed_] = + (char)(((corner_ == 'B') ? 4 : 0) | + (item == 'R' ? 2 : 0)); + + namesUsed_ += 1; +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiFPC.hpp b/lefdef/src/def/def/defiFPC.hpp new file mode 100644 index 00000000..712d8632 --- /dev/null +++ b/lefdef/src/def/def/defiFPC.hpp @@ -0,0 +1,107 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiFPC_h +#define defiFPC_h + +#include +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiFPC { +public: + defiFPC(defrData *data); + void Init(); + + void Destroy(); + ~defiFPC(); + + void clear(); + + void setName(const char* name, const char* direction); + void setAlign(); + void setMax(double num); + void setMin(double num); + void setEqual(double num); + void setDoingBottomLeft(); + void setDoingTopRight(); + void addRow(const char* name); + void addComps(const char* name); + void addItem(char typ, const char* name); + + const char* name() const; + int isVertical() const; + int isHorizontal() const; + int hasAlign() const; + int hasMax() const; + int hasMin() const; + int hasEqual() const; + double alignMax() const; + double alignMin() const; + double equal() const; + + int numParts() const; + + // Return the constraint number "index" where index is + // from 0 to numParts() + // The returned corner is 'B' for bottom left 'T' for topright + // The returned typ is 'R' for rows 'C' for comps + // The returned char* points to name of the item. + void getPart(int index, int* corner, int* typ, char** name) const; + + // debug print + void print(FILE* f) const; + +protected: + char* name_; + int nameLength_; + char direction_; // H or V + char hasAlign_; + char hasMin_; + char hasMax_; + char hasEqual_; + char corner_; // Bottomleft or Topright + double minMaxEqual_; + int namesAllocated_; // allocated size of names_ and rowOrComp_ + int namesUsed_; // number of entries used in the arrays + char* rowOrComp_; + char** names_; + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiFill.cpp b/lefdef/src/def/def/defiFill.cpp new file mode 100644 index 00000000..ef7909bc --- /dev/null +++ b/lefdef/src/def/def/defiFill.cpp @@ -0,0 +1,428 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lex.h" +#include "defiFill.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiFill +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + +defiFill::defiFill(defrData *data) +: defData(data) +{ + Init(); +} + + +void defiFill::Init() { + numPolys_ = 0; + numPts_ = 0; + clear(); + layerNameLength_ = 0; + xl_ = (int*)malloc(sizeof(int)*1); + yl_ = (int*)malloc(sizeof(int)*1); + xh_ = (int*)malloc(sizeof(int)*1); + yh_ = (int*)malloc(sizeof(int)*1); + rectsAllocated_ = 1; // At least 1 rectangle will define + polysAllocated_ = 0; + polygons_ = 0; + layerName_ = 0; + viaName_ = 0; + viaNameLength_ = 0; + viaPts_ = 0; + ptsAllocated_ = 0; + viaPts_ = 0; + +} + +defiFill::~defiFill() { + Destroy(); +} + +void defiFill::clear() { + hasLayer_ = 0; + layerOpc_ = 0; + numRectangles_ = 0; + hasVia_ = 0; + viaOpc_ = 0; + mask_ = 0; +} + +void defiFill::clearPoly() { + struct defiPoints* p; + int i; + + for (i = 0; i < numPolys_; i++) { + p = polygons_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(polygons_[i])); + } + numPolys_ = 0; +} + +void defiFill::clearPts() { + struct defiPoints* p; + int i; + + for (i = 0; i < numPts_; i++) { + p = viaPts_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(viaPts_[i])); + } + numPts_ = 0; +} + +void defiFill::Destroy() { + if (layerName_) free(layerName_); + if (viaName_) free(viaName_); + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + rectsAllocated_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + clearPoly(); + if (polygons_) free((char*)(polygons_)); + polygons_ = 0; + clearPts(); + if (viaPts_) free((char*)(viaPts_)); + viaPts_ = 0; + clear(); +} + + +void defiFill::setLayer(const char* name) { + int len = strlen(name) + 1; + if (layerNameLength_ < len) { + if (layerName_) free(layerName_); + layerName_ = (char*)malloc(len); + layerNameLength_ = len; + } + strcpy(layerName_, defData->DEFCASE(name)); + hasLayer_ = 1; +} + +// 5.7 +void defiFill::setLayerOpc() { + layerOpc_ = 1; +} + +void defiFill::addRect(int xl, int yl, int xh, int yh) { + if (numRectangles_ == rectsAllocated_) { + int i; + int max = rectsAllocated_ = rectsAllocated_ * 2; + int* newxl = (int*)malloc(sizeof(int)*max); + int* newyl = (int*)malloc(sizeof(int)*max); + int* newxh = (int*)malloc(sizeof(int)*max); + int* newyh = (int*)malloc(sizeof(int)*max); + for (i = 0; i < numRectangles_; i++) { + newxl[i] = xl_[i]; + newyl[i] = yl_[i]; + newxh[i] = xh_[i]; + newyh[i] = yh_[i]; + } + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + xl_ = newxl; + yl_ = newyl; + xh_ = newxh; + yh_ = newyh; + } + xl_[numRectangles_] = xl; + yl_[numRectangles_] = yl; + xh_[numRectangles_] = xh; + yh_[numRectangles_] = yh; + numRectangles_ += 1; +} + +// 5.6 +void defiFill::addPolygon(defiGeometries* geom) { + struct defiPoints* p; + int x, y; + int i; + + if (numPolys_ == polysAllocated_) { + struct defiPoints** poly; + polysAllocated_ = (polysAllocated_ == 0) ? + 2 : polysAllocated_ * 2; + poly = (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + polysAllocated_); + for (i = 0; i < numPolys_; i++) + poly[i] = polygons_[i]; + if (polygons_) + free((char*)(polygons_)); + polygons_ = poly; + } + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + polygons_[numPolys_] = p; + numPolys_ += 1; +} + +int defiFill::hasLayer() const { + return hasLayer_; +} + +const char* defiFill::layerName() const { + return layerName_; +} + +// 5.7 +int defiFill::hasLayerOpc() const { + return layerOpc_; +} + +int defiFill::numRectangles() const { + return numRectangles_; +} + + +int defiFill::xl(int index) const { + if (index < 0 || index >= numRectangles_) { + defiError(1, 0, "bad index for Fill xl", defData); + return 0; + } + return xl_[index]; +} + + +int defiFill::yl(int index) const { + if (index < 0 || index >= numRectangles_) { + defiError(1, 0, "bad index for Fill yl", defData); + return 0; + } + return yl_[index]; +} + + +int defiFill::xh(int index) const { + if (index < 0 || index >= numRectangles_) { + defiError(1, 0, "bad index for Fill xh", defData); + return 0; + } + return xh_[index]; +} + + +int defiFill::yh(int index) const { + if (index < 0 || index >= numRectangles_) { + defiError(1, 0, "bad index for Fill yh", defData); + return 0; + } + return yh_[index]; +} + +// 5.6 +int defiFill::numPolygons() const { + return numPolys_; +} + + +// 5.6 +struct defiPoints defiFill::getPolygon(int index) const { + return *(polygons_[index]); +} + +// 5.7 +void defiFill::setVia(const char* name) { + int len = strlen(name) + 1; + if (viaNameLength_ < len) { + if (viaName_) free(viaName_); + viaName_ = (char*)malloc(len); + viaNameLength_ = len; + } + strcpy(viaName_, defData->DEFCASE(name)); + hasVia_ = 1; +} + +// 5.7 +void defiFill::setViaOpc() { + viaOpc_ = 1; +} + +// 5.8 +void defiFill::setMask(int colorMask) { + mask_ = colorMask; +} + + +// 5.7 +void defiFill::addPts(defiGeometries* geom) { + struct defiPoints* p; + int x, y; + int i; + + if (numPts_ == ptsAllocated_) { + struct defiPoints** pts; + ptsAllocated_ = (ptsAllocated_ == 0) ? + 2 : ptsAllocated_ * 2; + pts= (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + ptsAllocated_); + for (i = 0; i < numPts_; i++) + pts[i] = viaPts_[i]; + if (viaPts_) + free((char*)(viaPts_)); + viaPts_ = pts; + } + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + viaPts_[numPts_] = p; + numPts_ += 1; +} + +// 5.7 +int defiFill::hasVia() const { + return hasVia_; +} + +// 5.7 +const char* defiFill::viaName() const { + return viaName_; +} + +// 5.7 +int defiFill::hasViaOpc() const { + return viaOpc_; +} + +// 5.7 +int defiFill::numViaPts() const { + return numPts_; +} + +// 5.8 +int defiFill::layerMask() const { + return mask_; +} + +// 5.8 +int defiFill::viaTopMask() const { + return mask_ / 100; +} + +// 5.8 +int defiFill::viaCutMask() const { + return mask_ / 10 % 10; +} + +// 5.8 +int defiFill::viaBottomMask() const { + return mask_ % 10; +} + +// 5.7 +struct defiPoints defiFill::getViaPts(int index) const { + return *(viaPts_[index]); +} + +void defiFill::print(FILE* f) const { + int i, j; + struct defiPoints points; + + if (hasLayer()) + fprintf(f, "- LAYER %s", layerName()); + + if (layerMask()) + fprintf(f, " + Mask %d", layerMask()); + + if (hasLayerOpc()) + fprintf(f, " + OPC"); + fprintf(f, "\n"); + + for (i = 0; i < numRectangles(); i++) { + fprintf(f, " RECT %d %d %d %d\n", xl(i), + yl(i), xh(i), + yh(i)); + } + + for (i = 0; i < numPolygons(); i++) { + fprintf(f, " POLYGON "); + points = getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(f, "%d %d ", points.x[j], points.y[j]); + fprintf(f, "\n"); + } + fprintf(f,"\n"); + + if (hasVia()) + fprintf(f, "- VIA %s", viaName()); + + if (mask_) { + fprintf(f, " + MASK %d%d%d", viaTopMask(), + viaCutMask(), + viaBottomMask()); + } + + if (hasViaOpc()) + fprintf(f, " + OPC"); + fprintf(f, "\n"); + + for (i = 0; i < numViaPts(); i++) { + fprintf(f, " "); + points = getViaPts(i); + for (j = 0; j < points.numPoints; j++) + fprintf(f, "%d %d ", points.x[j], points.y[j]); + fprintf(f, "\n"); + } + fprintf(f,"\n"); +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiFill.hpp b/lefdef/src/def/def/defiFill.hpp new file mode 100644 index 00000000..53c9a23c --- /dev/null +++ b/lefdef/src/def/def/defiFill.hpp @@ -0,0 +1,120 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiFILL_h +#define defiFILL_h + +#include +#include "defiKRDefs.hpp" +#include "defiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiFill { +public: + defiFill(defrData *data); + void Init(); + + void Destroy(); + ~defiFill(); + + void clear(); + void clearPoly(); + void clearPts(); + + void setLayer(const char* name); + void setLayerOpc(); // 5.7 + void addRect(int xl, int yl, int xh, int yh); + void addPolygon(defiGeometries* geom); + void setVia(const char* name); // 5.7 + void setViaOpc(); // 5.7 + void addPts(defiGeometries* geom); // 5.7 + + int hasLayer() const; + const char* layerName() const; + int hasLayerOpc() const; // 5.7 + + void setMask(int colorMask); // 5.8 + int layerMask() const; // 5.8 + int viaTopMask() const; // 5.8 + int viaCutMask() const; // 5.8 + int viaBottomMask() const; // 5.8 + + int numRectangles() const; + int xl(int index) const; + int yl(int index) const; + int xh(int index) const; + int yh(int index) const; + + int numPolygons() const; // 5.6 + struct defiPoints getPolygon(int index) const; // 5.6 + + int hasVia() const; // 5.7 + const char* viaName() const; // 5.7 + int hasViaOpc() const; // 5.7 + + int numViaPts() const; // 5.7 + struct defiPoints getViaPts(int index) const; // 5.7 + + void print(FILE* f) const; + +protected: + int hasLayer_; + char* layerName_; + int layerNameLength_; + int layerOpc_; // 5.7 + int numRectangles_; + int rectsAllocated_; + int* xl_; + int* yl_; + int* xh_; + int* yh_; + int numPolys_; // 5.6 + int polysAllocated_; // 5.6 + struct defiPoints** polygons_; // 5.6 + int hasVia_; // 5.7 + char* viaName_; // 5.7 + int viaNameLength_; // 5.7 + int viaOpc_; // 5.7 + int numPts_; // 5.7 + int ptsAllocated_; // 5.7 + int mask_; // 5.8 + struct defiPoints** viaPts_; // 5.7 + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiGroup.cpp b/lefdef/src/def/def/defiGroup.cpp new file mode 100644 index 00000000..36e25905 --- /dev/null +++ b/lefdef/src/def/def/defiGroup.cpp @@ -0,0 +1,447 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiGroup.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiGroup +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiGroup::defiGroup(defrData *data) +: defData(data) +{ + Init(); +} + + +void defiGroup::Init() { + name_ = 0; + nameLength_ = 0; + region_ = 0; + regionLength_ = 0; + + numRects_ = 0; + rectsAllocated_ = 2; + xl_ = (int*)malloc(sizeof(int)*2); + yl_ = (int*)malloc(sizeof(int)*2); + xh_ = (int*)malloc(sizeof(int)*2); + yh_ = (int*)malloc(sizeof(int)*2); + + numProps_ = 0; + propsAllocated_ = 2; + propNames_ = (char**)malloc(sizeof(char*)*2); + propValues_ = (char**)malloc(sizeof(char*)*2); + propDValues_ = (double*)malloc(sizeof(double)*2); + propTypes_ = (char*)malloc(sizeof(char)*2); +} + + +defiGroup::~defiGroup() { + Destroy(); +} + + +void defiGroup::Destroy() { + + if (name_) free(name_); + if (region_) free(region_); + name_ = 0; + nameLength_ = 0; + region_ = 0; + regionLength_ = 0; + + clear(); + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); +} + + +void defiGroup::clear() { + int i; + hasRegionName_ = 0; + hasPerim_ = 0; + hasMaxX_ = 0; + hasMaxY_ = 0; + for (i = 0; i < numProps_; i++) { + free(propNames_[i]); + free(propValues_[i]); + propDValues_[i] = 0; + } + numProps_ = 0; + numRects_ = 0; +} + + +void defiGroup::setup(const char* name) { + int len = strlen(name) + 1; + if (len > nameLength_) { + if (name_) free(name_); + nameLength_ = len; + name_ = (char*)malloc(len); + } + strcpy(name_, defData->DEFCASE(name)); + clear(); + +} + + +void defiGroup::addRegionRect(int xl, int yl, int xh, int yh) { + int i; + if (numRects_ == rectsAllocated_) { + int max = numRects_ * 2; + int* nxl = (int*)malloc(sizeof(int)*max); + int* nyl = (int*)malloc(sizeof(int)*max); + int* nxh = (int*)malloc(sizeof(int)*max); + int* nyh = (int*)malloc(sizeof(int)*max); + max = numRects_; + for (i = 0; i < max; i++) { + nxl[i] = xl_[i]; + nyl[i] = yl_[i]; + nxh[i] = xh_[i]; + nyh[i] = yh_[i]; + } + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + xl_ = nxl; + yl_ = nyl; + xh_ = nxh; + yh_ = nyh; + rectsAllocated_ *= 2; + } + + i = numRects_; + xl_[i] = xl; + yl_[i] = yl; + xh_[i] = xh; + yh_[i] = yh; + numRects_ += 1; +} + + +void defiGroup::regionRects(int* size, int** xl, + int**yl, int** xh, int** yh) const { + *size = numRects_; + *xl = xl_; + *yl = yl_; + *xh = xh_; + *yh = yh_; +} + + +void defiGroup::setRegionName(const char* region) { + int len = strlen(region) + 1; + if (len > regionLength_) { + if (region_) free(region_); + regionLength_ = len; + region_ = (char*)malloc(len); + } + strcpy(region_, defData->DEFCASE(region)); + hasRegionName_ = 1; + +} + + +void defiGroup::setMaxX(int x) { + hasMaxX_ = 1; + maxX_ = x; +} + + +void defiGroup::setMaxY(int y) { + hasMaxY_ = 1; + maxY_ = y; +} + + +void defiGroup::setPerim(int p) { + hasPerim_ = 1; + perim_ = p; +} + + +void defiGroup::addProperty(const char* name, const char* value, + const char type) { + int len; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = propNames_[i]; + nv[i] = propValues_[i]; + nd[i] = propDValues_[i]; + nt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + propNames_ = nn; + propValues_ = nv; + propDValues_ = nd; + propTypes_ = nt; + } + len = strlen(name) + 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + propDValues_[numProps_] = 0; + propTypes_[numProps_] = type; + numProps_ += 1; +} + + +void defiGroup::addNumProperty(const char* name, const double d, + const char* value, const char type) { + int len; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = propNames_[i]; + nv[i] = propValues_[i]; + nd[i] = propDValues_[i]; + nt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + propNames_ = nn; + propValues_ = nv; + propDValues_ = nd; + propTypes_ = nt; + } + len = strlen(name) + 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + propDValues_[numProps_] = d; + propTypes_[numProps_] = type; + numProps_ += 1; +} + + +int defiGroup::numProps() const { + return numProps_; +} + + +const char* defiGroup::propName(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (LEFPARS-6050): The index number %d given for the GROUP PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + defiError(0, 6050, msg, defData); + return 0; + } + return propNames_[index]; +} + + +const char* defiGroup::propValue(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (LEFPARS-6050): The index number %d given for the GROUP PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + defiError(0, 6050, msg, defData); + return 0; + } + return propValues_[index]; +} + + +double defiGroup::propNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (LEFPARS-6050): The index number %d given for the GROUP PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + defiError(0, 6050, msg, defData); + return 0; + } + return propDValues_[index]; +} + + +const char defiGroup::propType(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (LEFPARS-6050): The index number %d given for the GROUP PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + defiError(0, 6050, msg, defData); + return 0; + } + return propTypes_[index]; +} + + +int defiGroup::propIsNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (LEFPARS-6050): The index number %d given for the GROUP PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + defiError(0, 6050, msg, defData); + return 0; + } + return propDValues_[index] ? 1 : 0; +} + + +int defiGroup::propIsString(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (LEFPARS-6050): The index number %d given for the GROUP PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + defiError(0, 6050, msg, defData); + return 0; + } + return propDValues_[index] ? 0 : 1; +} + + +const char* defiGroup::regionName() const { + return region_; +} + + +const char* defiGroup::name() const { + return name_; +} + + +int defiGroup::perim() const { + return perim_; +} + + +int defiGroup::maxX() const { + return maxX_; +} + + +int defiGroup::maxY() const { + return maxY_; +} + + +int defiGroup::hasMaxX() const { + return hasMaxX_; +} + + +int defiGroup::hasMaxY() const { + return hasMaxY_; +} + + +int defiGroup::hasPerim() const { + return hasPerim_; +} + + +int defiGroup::hasRegionBox() const { + return numRects_ ? 1 : 0 ; +} + + +int defiGroup::hasRegionName() const { + return hasRegionName_; +} + + +void defiGroup::print(FILE* f) const { + int i; + + fprintf(f, "Group '%s'\n", name()); + + if (hasRegionName()) { + fprintf(f, " region name '%s'\n", regionName()); + } + + if (hasRegionBox()) { + int size = numRects_; + int* xl = xl_; + int* yl = yl_; + int* xh = xh_; + int* yh = yh_; + for (i = 0; i < size; i++) + fprintf(f, " region box %d,%d %d,%d\n", xl[i], yl[i], xh[i], yh[i]); + } + + if (hasMaxX()) { + fprintf(f, " max x %d\n", maxX()); + } + + if (hasMaxY()) { + fprintf(f, " max y %d\n", maxY()); + } + + if (hasPerim()) { + fprintf(f, " perim %d\n", perim()); + } + +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiGroup.hpp b/lefdef/src/def/def/defiGroup.hpp new file mode 100644 index 00000000..7c5da2c2 --- /dev/null +++ b/lefdef/src/def/def/defiGroup.hpp @@ -0,0 +1,122 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiGroup_h +#define defiGroup_h + +#include +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +// Struct holds the data for one property. + +class defiGroup { +public: + defiGroup(defrData *data); + void Init(); + + void Destroy(); + ~defiGroup(); + + void clear(); + + void setup(const char* name); + void addProperty(const char* name, const char* value, const char type); + void addNumProperty(const char* name, const double d, + const char* value, const char type); + void addRegionRect(int xl, int yl, int xh, int yh); + void setRegionName(const char* name); + void setMaxX(int x); + void setMaxY(int y); + void setPerim(int p); + + const char* name() const; + const char* regionName() const; + int hasRegionBox() const; + int hasRegionName() const; + int hasMaxX() const; + int hasMaxY() const; + int hasPerim() const; + void regionRects(int* size, int** xl, int**yl, int** xh, int** yh) const; + int maxX() const; + int maxY() const; + int perim() const; + + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + // debug print + void print(FILE* f) const; + +protected: + char* name_; + int nameLength_; + char* region_; + int regionLength_; + + int rectsAllocated_; + int numRects_; + int* xl_; + int* yl_; + int* xh_; + int* yh_; + + int maxX_; + int maxY_; + int perim_; + char hasRegionBox_; + char hasRegionName_; + char hasPerim_; + char hasMaxX_; + char hasMaxY_; + + int numProps_; + int propsAllocated_; + char** propNames_; + char** propValues_; + double* propDValues_; + char* propTypes_; + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiIOTiming.cpp b/lefdef/src/def/def/defiIOTiming.cpp new file mode 100644 index 00000000..fc3b03f6 --- /dev/null +++ b/lefdef/src/def/def/defiIOTiming.cpp @@ -0,0 +1,424 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiIOTiming.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiIOTiming +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiIOTiming::defiIOTiming(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiIOTiming::Init() { + inst_ = 0; + instLength_ = 0; + pin_ = 0; + pinLength_ = 0; + from_ = 0; + fromLength_ = 0; + to_ = 0; + toLength_ = 0; + driveCell_ = 0; + driveCellLength_ = 0; + hasVariableRise_ = 0; + hasVariableFall_ = 0; + hasSlewRise_ = 0; + hasSlewFall_ = 0; + hasCapacitance_ = 0; + hasDriveCell_ = 0; + hasFrom_ = 0; + if (pin_) free(pin_); + pin_ = 0; + pinLength_ = 0; + + hasTo_ = 0; + hasParallel_ = 0; + variableFallMin_ = 0.0; + variableRiseMin_ = 0.0; + variableFallMax_ = 0.0; + variableRiseMax_ = 0.0; + slewFallMin_ = 0.0; + slewRiseMin_ = 0.0; + slewFallMax_ = 0.0; + slewRiseMax_ = 0.0; + capacitance_ = 0.0; + parallel_ = 0.0; +} + + +defiIOTiming::~defiIOTiming() { + Destroy(); +} + + +void defiIOTiming::Destroy() { + + if (inst_) free(inst_); + inst_ = 0; + instLength_ = 0; + + if (pin_) free(pin_); + pin_ = 0; + pinLength_ = 0; + + if (from_) free(from_); + from_ = 0; + fromLength_ = 0; + + if (to_) free(to_); + to_ = 0; + toLength_ = 0; + + if (driveCell_) free(driveCell_); + driveCell_ = 0; + driveCellLength_ = 0; + + clear(); +} + + +void defiIOTiming::clear() { + hasVariableRise_ = 0; + hasVariableFall_ = 0; + hasSlewRise_ = 0; + hasSlewFall_ = 0; + hasCapacitance_ = 0; + hasDriveCell_ = 0; + hasFrom_ = 0; + hasTo_ = 0; + hasParallel_ = 0; + variableFallMin_ = 0.0; + variableRiseMin_ = 0.0; + variableFallMax_ = 0.0; + variableRiseMax_ = 0.0; + slewFallMin_ = 0.0; + slewRiseMin_ = 0.0; + slewFallMax_ = 0.0; + slewRiseMax_ = 0.0; + capacitance_ = 0.0; + parallel_ = 0.0; +} + + +void defiIOTiming::setName(const char* inst, const char* pin) { + int len; + + clear(); + + len = strlen(inst) + 1; + if (len > instLength_) { + if (inst_) free(inst_); + instLength_ = len; + inst_ = (char*)malloc(len); + } + strcpy(inst_, defData->DEFCASE(inst)); + + len = strlen(pin) + 1; + if (len > pinLength_) { + if (pin_) free(pin_); + pinLength_ = len; + pin_ = (char*)malloc(len); + } + strcpy(pin_, defData->DEFCASE(pin)); + +} + + +void defiIOTiming::print(FILE* f) const { + fprintf(f, "IOTiming '%s' '%s'\n", inst_, pin_); + + if (hasSlewRise()) + fprintf(f, " Slew rise %5.2f %5.2f\n", + slewRiseMin(), + slewRiseMax()); + + if (hasSlewFall()) + fprintf(f, " Slew fall %5.2f %5.2f\n", + slewFallMin(), + slewFallMax()); + + if (hasVariableRise()) + fprintf(f, " variable rise %5.2f %5.2f\n", + variableRiseMin(), + variableRiseMax()); + + if (hasVariableFall()) + fprintf(f, " variable fall %5.2f %5.2f\n", + variableFallMin(), + variableFallMax()); + + if (hasCapacitance()) + fprintf(f, " capacitance %5.2f\n", + capacitance()); + + if (hasDriveCell()) + fprintf(f, " drive cell '%s'\n", + driveCell()); + + if (hasFrom()) + fprintf(f, " from pin '%s'\n", + from()); + + if (hasTo()) + fprintf(f, " to pin '%s'\n", + to()); + + if (hasParallel()) + fprintf(f, " parallel %5.2f\n", + parallel()); +} + + + +void defiIOTiming::setVariable(const char* riseFall, double min, double max) { + if (*riseFall == 'R') { + hasVariableRise_ = 1; + variableRiseMin_ = min; + variableRiseMax_ = max; + + } else if (*riseFall == 'F') { + hasVariableFall_ = 1; + variableFallMin_ = min; + variableFallMax_ = max; + + } else { + defiError(0, 6060, "ERROR (DEFPARS-6060): Invalid value specified for IOTIMING rise/fall. The valid value for rise is 'R' and for fall is 'F'. Specify a valid value and then try again.", defData); + } +} + + +void defiIOTiming::setSlewRate(const char* riseFall, double min, double max) { + if (*riseFall == 'R') { + hasSlewRise_ = 1; + slewRiseMin_ = min; + slewRiseMax_ = max; + + } else if (*riseFall == 'F') { + hasSlewFall_ = 1; + slewFallMin_ = min; + slewFallMax_ = max; + + } else { + defiError(0, 6060, "ERROR (DEFPARS-6060): Invalid value specified for IOTIMING rise/fall. The valid value for rise is 'R' and for fall is 'F'. Specify a valid value and then try again.", defData); + } +} + + +void defiIOTiming::setCapacitance(double num) { + hasCapacitance_ = 1; + capacitance_ = num; +} + + +void defiIOTiming::setDriveCell(const char* name) { + int len = strlen(name) + 1; + + if (driveCellLength_ < len) { + if (driveCell_) free(driveCell_); + driveCell_ = (char*) malloc(len); + driveCellLength_ = len; + } + + strcpy(driveCell_, defData->DEFCASE(name)); + hasDriveCell_ = 1; +} + + +void defiIOTiming::setFrom(const char* name) { + int len = strlen(name) + 1; + + if (fromLength_ < len) { + if (from_) free(from_); + from_ = (char*) malloc(len); + fromLength_ = len; + } + + strcpy(from_, defData->DEFCASE(name)); + hasFrom_ = 1; +} + + +void defiIOTiming::setTo(const char* name) { + int len = strlen(name) + 1; + + if (toLength_ < len) { + if (to_) free(to_); + to_ = (char*) malloc(len); + toLength_ = len; + } + + strcpy(to_, defData->DEFCASE(name)); + hasTo_ = 1; +} + + +void defiIOTiming::setParallel(double num) { + hasParallel_ = 1; + parallel_ = num; +} + + +int defiIOTiming::hasVariableRise() const { + return hasVariableRise_; +} + + +int defiIOTiming::hasVariableFall() const { + return hasVariableFall_; +} + + +int defiIOTiming::hasSlewRise() const { + return hasSlewRise_; +} + + +int defiIOTiming::hasSlewFall() const { + return hasSlewFall_; +} + + +int defiIOTiming::hasCapacitance() const { + return hasCapacitance_; +} + + +int defiIOTiming::hasDriveCell() const { + return hasDriveCell_; +} + + +int defiIOTiming::hasFrom() const { + return hasFrom_; +} + + +int defiIOTiming::hasTo() const { + return hasTo_; +} + + +int defiIOTiming::hasParallel() const { + return hasParallel_; +} + + +const char* defiIOTiming::inst() const { + return inst_; +} + + +const char* defiIOTiming::pin() const { + return pin_; +} + + +double defiIOTiming::variableFallMin() const { + return variableFallMin_; +} + + +double defiIOTiming::variableRiseMin() const { + return variableRiseMin_; +} + + +double defiIOTiming::variableFallMax() const { + return variableFallMax_; +} + + +double defiIOTiming::variableRiseMax() const { + return variableRiseMax_; +} + + +double defiIOTiming::slewFallMin() const { + return slewFallMin_; +} + + +double defiIOTiming::slewRiseMin() const { + return slewRiseMin_; +} + + +double defiIOTiming::slewFallMax() const { + return slewFallMax_; +} + + +double defiIOTiming::slewRiseMax() const { + return slewRiseMax_; +} + + +double defiIOTiming::capacitance() const { + return capacitance_; +} + + +const char* defiIOTiming::driveCell() const { + return driveCell_; +} + + +const char* defiIOTiming::from() const { + return from_; +} + + +const char* defiIOTiming::to() const { + return to_; +} + + +double defiIOTiming::parallel() const { + return parallel_; +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiIOTiming.hpp b/lefdef/src/def/def/defiIOTiming.hpp new file mode 100644 index 00000000..81ac6e21 --- /dev/null +++ b/lefdef/src/def/def/defiIOTiming.hpp @@ -0,0 +1,128 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiIOTiming_h +#define defiIOTiming_h + +#include +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiIOTiming { +public: + defiIOTiming(defrData *data); + void Init(); + + void Destroy(); + ~defiIOTiming(); + + void clear(); + + void setName(const char* inst, const char* pin); + void setVariable(const char* riseFall, double min, double max); + void setSlewRate(const char* riseFall, double min, double max); + void setCapacitance(double num); + void setDriveCell(const char* name); + void setFrom(const char* name); + void setTo(const char* name); + void setParallel(double num); + + + int hasVariableRise() const; + int hasVariableFall() const; + int hasSlewRise() const; + int hasSlewFall() const; + int hasCapacitance() const; + int hasDriveCell() const; + int hasFrom() const; + int hasTo() const; + int hasParallel() const; + + const char* inst() const; + const char* pin() const; + double variableFallMin() const; + double variableRiseMin() const; + double variableFallMax() const; + double variableRiseMax() const; + double slewFallMin() const; + double slewRiseMin() const; + double slewFallMax() const; + double slewRiseMax() const; + double capacitance() const; + const char* driveCell() const; + const char* from() const; + const char* to() const; + double parallel() const; + + // debug print + void print(FILE* f) const; + +protected: + char* inst_; + int instLength_; + char* pin_; + int pinLength_; + char* from_; + int fromLength_; + char* to_; + int toLength_; + char* driveCell_; + char driveCellLength_; + char hasVariableRise_; + char hasVariableFall_; + char hasSlewRise_; + char hasSlewFall_; + char hasCapacitance_; + char hasDriveCell_; + char hasFrom_; + char hasTo_; + char hasParallel_; + double variableFallMin_; + double variableRiseMin_; + double variableFallMax_; + double variableRiseMax_; + double slewFallMin_; + double slewRiseMin_; + double slewFallMax_; + double slewRiseMax_; + double capacitance_; + double parallel_; + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiKRDefs.hpp b/lefdef/src/def/def/defiKRDefs.hpp new file mode 100644 index 00000000..19a37120 --- /dev/null +++ b/lefdef/src/def/def/defiKRDefs.hpp @@ -0,0 +1,37 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiKRDEFS_h +#define defiKRDEFS_h + +#define BEGIN_LEFDEF_PARSER_NAMESPACE namespace LefDefParser { +#define END_LEFDEF_PARSER_NAMESPACE } +#define USE_LEFDEF_PARSER_NAMESPACE using namespace LefDefParser; + +#endif /* defiKRDEFS_h */ diff --git a/lefdef/src/def/def/defiMisc.cpp b/lefdef/src/def/def/defiMisc.cpp new file mode 100644 index 00000000..0e31b8f4 --- /dev/null +++ b/lefdef/src/def/def/defiMisc.cpp @@ -0,0 +1,201 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lex.h" +#include "defiDebug.hpp" +#include "defiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +//////////////////////////////////////////////////// +// +// Handle points for a polygon +// +//////////////////////////////////////////////////// +defiGeometries::defiGeometries(defrData *data) + : defData(data) +{ + pointsAllocated_ = 0; + numPoints_ = 0; +} + +void defiGeometries::Init() { + Destroy(); +} + +void defiGeometries::Destroy() { + if (pointsAllocated_) { + free((char*)(x_)); + free((char*)(y_)); + } + pointsAllocated_ = 0; + numPoints_ = 0; +} + +defiGeometries::~defiGeometries() { + Destroy(); +} + +void defiGeometries::Reset() { + numPoints_ = 0; +} + +void defiGeometries::startList(int x, int y) { + if (pointsAllocated_ == 0) { + pointsAllocated_ = 16; + x_ = (int*)malloc(sizeof(int)*16); + y_ = (int*)malloc(sizeof(int)*16); + numPoints_ = 0; + } else // reset the numPoints to 0 + numPoints_ = 0; + addToList(x, y); +} + +void defiGeometries::addToList(int x, int y) { + if (numPoints_ == pointsAllocated_) { + int i; + int* nx; + int* ny; + pointsAllocated_ *= 2; + nx = (int*)malloc(sizeof(int)*pointsAllocated_); + ny = (int*)malloc(sizeof(int)*pointsAllocated_); + for (i = 0; i < numPoints_; i++) { + nx[i] = x_[i]; + ny[i] = y_[i]; + } + free((char*)(x_)); + free((char*)(y_)); + x_ = nx; + y_ = ny; + } + x_[numPoints_] = x; + y_[numPoints_] = y; + numPoints_ += 1; +} + +int defiGeometries::numPoints() const { + return numPoints_; +} + +void defiGeometries::points(int index, int* x, int* y) const { + char msg[160]; + if ((index < 0) || (index >= numPoints_)) { + sprintf (msg, "ERROR (LEFPARS-6070): The index number %d given for GEOMETRY POINTS is invalid.\nValid index is from 0 to %d", index, numPoints_); + defiError(0, 6070, msg, defData); + return; + } + *x = x_[index]; + *y = y_[index]; + return; +} + +//////////////////////////////////////////////////// +// +// defiStyles +// +//////////////////////////////////////////////////// + +defiStyles::defiStyles() { + Init(); +} + +void defiStyles::Init() { + styleNum_ = 0; + polygon_ = 0; +} + +defiStyles::~defiStyles() { + Destroy(); +} + +void defiStyles::Destroy() { + clear(); +} + +void defiStyles::clear() { + struct defiPoints* p; + + p = polygon_; + if (p) { + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(polygon_)); + } + styleNum_ = 0; + polygon_ = 0; +} + +void defiStyles::setStyle(int styleNum) { + styleNum_ = styleNum; +} + +void defiStyles::setPolygon(defiGeometries* geom) { + struct defiPoints* p; + int i, x, y; + + if (polygon_ == 0) { + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + numPointAlloc_ = p->numPoints; // keep track the max number pts + } else if (numPointAlloc_ < geom->numPoints()) { + // the incoming polygon has more number then has been allocated, + // need to reallocate more memory + p = polygon_; + free((char*)(p->x)); + free((char*)(p->y)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + numPointAlloc_ = p->numPoints; // keep track the max number pts + } else { + p = polygon_; + p->numPoints = geom->numPoints(); + } + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + polygon_ = p; +} + +int defiStyles::style() const { + return styleNum_; +} + +struct defiPoints defiStyles::getPolygon() const { + return *(polygon_); +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiMisc.hpp b/lefdef/src/def/def/defiMisc.hpp new file mode 100644 index 00000000..4ffd7cfd --- /dev/null +++ b/lefdef/src/def/def/defiMisc.hpp @@ -0,0 +1,96 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiMisc_h +#define defiMisc_h + +#include +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +struct defiPoints { + int numPoints; + int* x; + int* y; +}; + +class defiGeometries { +public: + defiGeometries(defrData *data); + void Init(); + void Reset(); + + void Destroy(); + ~defiGeometries(); + + void startList(int x, int y); + void addToList(int x, int y); + + int numPoints() const; + void points(int index, int* x, int* y) const; + +protected: + int numPoints_; + int pointsAllocated_; + int* x_; + int* y_; + + defrData *defData; +}; + +class defiStyles { +public: + defiStyles(); + void Init(); + + void Destroy(); + ~defiStyles(); + + void clear(); + + void setStyle(int styleNum); + void setPolygon(defiGeometries* geom); + + int style() const; + struct defiPoints getPolygon() const; + + protected: + int styleNum_; + struct defiPoints* polygon_; + int numPointAlloc_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiNet.cpp b/lefdef/src/def/def/defiNet.cpp new file mode 100644 index 00000000..d50c6b05 --- /dev/null +++ b/lefdef/src/def/def/defiNet.cpp @@ -0,0 +1,3022 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013-2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "defiNet.hpp" +#include "defiPath.hpp" +#include "defiDebug.hpp" +#include "lex.h" +#include "defiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +#define maxLimit 65536 + + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiSubnet +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + + +defiSubnet::defiSubnet(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiSubnet::Init() { + name_ = 0; + bumpName(16); + + instances_ = 0; + pins_ = 0; + musts_ = 0; + synthesized_ = 0; + numPins_ = 0; + bumpPins(16); + + // WMD -- this will be removed by the next release + paths_ = 0; + numPaths_ = 0; + pathsAllocated_ = 0; + + numWires_ = 0; + wiresAllocated_ = 0; + wires_ = 0; + nonDefaultRule_ = 0; + + clear(); +} + + +void defiSubnet::Destroy() { + clear(); + free(name_); + free((char*)(instances_)); + free((char*)(pins_)); + free(musts_); + free(synthesized_); + +} + + +defiSubnet::~defiSubnet() { + Destroy(); +} + + +void defiSubnet::setName(const char* name) { + int len = strlen(name) + 1; + if (len > nameSize_) bumpName(len); + strcpy(name_, defData->DEFCASE(name)); +} + + +void defiSubnet::setNonDefault(const char* name) { + int len = strlen(name) + 1; + nonDefaultRule_ = (char*)malloc(len); + strcpy(nonDefaultRule_, defData->DEFCASE(name)); +} + + +void defiSubnet::addMustPin(const char* instance, const char* pin, int syn) { + addPin(instance, pin, syn); + musts_[numPins_ - 1] = 1; +} + + +void defiSubnet::addPin(const char* instance, const char* pin, int syn) { + int len; + + if (numPins_ == pinsAllocated_) + bumpPins(pinsAllocated_ * 2); + + len = strlen(instance)+ 1; + instances_[numPins_] = (char*)malloc(len); + strcpy(instances_[numPins_], defData->DEFCASE(instance)); + + len = strlen(pin)+ 1; + pins_[numPins_] = (char*)malloc(len); + strcpy(pins_[numPins_], defData->DEFCASE(pin)); + + musts_[numPins_] = 0; + synthesized_[numPins_] = syn; + + (numPins_)++; +} + +// WMD -- this will be removed by the next release +void defiSubnet::setType(const char* typ) { + if (*typ == 'F') { + isFixed_ = 1; + } else if (*typ == 'C') { + isCover_ = 1; + } else if (*typ == 'R') { + isRouted_ = 1; + } else { + // Silently do nothing with bad input. + } + +} + +// WMD -- this will be removed by the next release +void defiSubnet::addPath(defiPath* p, int reset, int netOsnet, int *needCbk) { + int i; + size_t incNumber; + + if (reset) { + for (i = 0; i < numPaths_; i++) { + delete paths_[i]; + } + numPaths_ = 0; + } + + if (numPaths_ >= pathsAllocated_) { + // 6/17/2003 - don't want to allocate too large memory just in case + // a net has many wires with only 1 or 2 paths + if (pathsAllocated_ <= maxLimit) { + incNumber = pathsAllocated_*2; + if (incNumber > maxLimit) { + incNumber = pathsAllocated_ + maxLimit; + } + } else { + incNumber = pathsAllocated_ + maxLimit; + } + + switch (netOsnet) { + case 2: + bumpPaths( + pathsAllocated_ ? incNumber : 1000); + break; + default: + bumpPaths( + pathsAllocated_ ? incNumber : 8); + break; + } + } + + paths_[numPaths_++] = new defiPath(p); + + if (numPaths_ == pathsAllocated_) + *needCbk = 1; // pre-warn the parser it needs to realloc next time +} + + +void defiSubnet::addWire(const char* type) { + defiWire* wire; + if (numWires_ == wiresAllocated_) { + defiWire** array; + int i; + wiresAllocated_ = wiresAllocated_ ? + wiresAllocated_ * 2 : 2 ; + array = (defiWire**)malloc(sizeof(defiWire*)*wiresAllocated_); + for (i = 0; i < numWires_; i++) { + array[i] = wires_[i]; + } + if (wires_) + free((char*)(wires_)); + wires_ = array; + } + wire = wires_[numWires_] = new defiWire(defData); + numWires_ += 1; + wire->Init(type, NULL); +} + + +void defiSubnet::addWirePath(defiPath* p, int reset, int netOsnet, int *needCbk) { + if (numWires_ > 0) + wires_[numWires_-1]->addPath(p, reset, netOsnet, + needCbk); + else + // Something screw up, can't be both be zero. + defiError(0, 6080, "ERROR (DEFPARS-6080): An internal error has occurred. The index number for the SUBNET wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information.", defData); +} + +const char* defiSubnet::name() const { + return name_; +} + + +int defiSubnet::hasNonDefaultRule() const { + return nonDefaultRule_ ? 1 : 0; +} + + +const char* defiSubnet::nonDefaultRule() const { + return nonDefaultRule_; +} + + +int defiSubnet::numConnections() const { + return numPins_; +} + + +const char* defiSubnet::instance(int index) const { + if (index >= 0 && index < numPins_) + return instances_[index]; + return 0; +} + + +const char* defiSubnet::pin(int index) const { + if (index >= 0 && index < numPins_) + return pins_[index]; + return 0; +} + + +int defiSubnet::pinIsMustJoin(int index) const { + if (index >= 0 && index < numPins_) + return (int)(musts_[index]); + return 0; +} + + +int defiSubnet::pinIsSynthesized(int index) const { + if (index >= 0 && index < numPins_) + return (int)(synthesized_[index]); + return 0; +} + +// WMD -- this will be removed by the next release +int defiSubnet::isFixed() const { + return (int)(isFixed_); +} + + +// WMD -- this will be removed by the next release +int defiSubnet::isRouted() const { + return (int)(isRouted_); +} + + +// WMD -- this will be removed by the next release +int defiSubnet::isCover() const { + return (int)(isCover_); +} + + +void defiSubnet::bumpName(int size) { + if (name_) free(name_); + name_ = (char*)malloc(size); + nameSize_ = size; + name_[0] = '\0'; +} + + +void defiSubnet::bumpPins(int size) { + char** newInstances = (char**)malloc(sizeof(char*)*size); + char** newPins = (char**)malloc(sizeof(char*)*size); + char* newMusts = (char*)malloc(size); + char* newSyn = (char*)malloc(size); + int i; + + if (instances_) { + for (i = 0; i < pinsAllocated_; i++) { + newInstances[i] = instances_[i]; + newPins[i] = pins_[i]; + newMusts[i] = musts_[i]; + newSyn[i] = synthesized_[i]; + } + free((char*)(instances_)); + free((char*)(pins_)); + free(musts_); + free(synthesized_); + } + + instances_ = newInstances; + pins_ = newPins; + musts_ = newMusts; + synthesized_ = newSyn; + pinsAllocated_ = size; +} + + +void defiSubnet::clear() { + int i; + + // WMD -- this will be removed by the next release + isFixed_ = 0; + isRouted_ = 0; + isCover_ = 0; + name_[0] = '\0'; + + for (i = 0; i < numPins_; i++) { + free(instances_[i]); + free(pins_[i]); + instances_[i] = 0; + pins_[i] = 0; + musts_[i] = 0; + synthesized_[i] = 0; + } + numPins_ = 0; + + // WMD -- this will be removed by the next release + if (paths_) { + for (i = 0; i < numPaths_; i++) { + delete paths_[i]; + } + delete [] paths_; + paths_ = 0; + numPaths_ = 0; + pathsAllocated_ = 0; + } + + if (nonDefaultRule_) { + free(nonDefaultRule_); + nonDefaultRule_ = 0; + } + + if (numWires_) { + for (i = 0; i < numWires_; i++) { + delete wires_[i]; + wires_[i] = 0; + } + free((char*)(wires_)); + wires_ = 0; + numWires_ = 0; + wiresAllocated_ = 0; + } +} + + +void defiSubnet::print(FILE* f) const { + int i, j; + const defiPath* p; + const defiWire* w; + + fprintf(f, " subnet '%s'", name_); + fprintf(f, "\n"); + + if (hasNonDefaultRule()) + fprintf(f, " nondefault rule %s\n", + nonDefaultRule()); + + if (numConnections()) { + fprintf(f, " Pins:\n"); + for (i = 0; i < numConnections(); i++) { + fprintf(f, " '%s' '%s'%s%s\n", + instance(i), + pin(i), + pinIsMustJoin(i) ? " MUSTJOIN" : "", + pinIsSynthesized(i) ? " SYNTHESIZED" : ""); + } + } + + if (numWires()) { + fprintf(f, " Paths:\n"); + for (i = 0; i < numWires(); i++) { + w = wire(i); + for (j = 0; j < w->numPaths(); j++) { + p = w->path(j); + p->print(f); + } + } + } +} + +int defiSubnet::numWires() const { + return numWires_; +} + + +defiWire* defiSubnet::wire(int index) { + if (index >= 0 && index < numWires_) + return wires_[index]; + return 0; +} + + +const defiWire* defiSubnet::wire(int index) const { + if (index >= 0 && index < numWires_) + return wires_[index]; + return 0; +} + + +// WMD -- this will be removed after the next release +defiPath* defiSubnet::path(int index) { + if (index >= 0 && index < numPaths_) + return paths_[index]; + return 0; +} + +// WMD -- this will be removed after the next release +const defiPath* defiSubnet::path(int index) const { + if (index >= 0 && index < numPaths_) + return paths_[index]; + return 0; +} + +// WMD -- this will be removed after the next release +int defiSubnet::numPaths() const { + return numPaths_; +} + +// WMD -- this will be removed after the next release +void defiSubnet::bumpPaths(int size) { + int i; + defiPath** newPaths = new defiPath*[size]; + + for (i = 0; i < numPaths_; i++) + newPaths[i] = paths_[i]; + + pathsAllocated_ = size; + + delete [] paths_; + paths_ = newPaths; +} + + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiVpin +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + + +defiVpin::defiVpin(defrData *data) + : defData(data) +{ +} + + +void defiVpin::Init(const char* name) { + int len = strlen(name) + 1; + name_ = (char*)malloc(len); + strcpy(name_, defData->DEFCASE(name)); + orient_ = -1; + status_ = ' '; + layer_ = 0; +} + + +defiVpin::~defiVpin() { + Destroy(); +} + + +void defiVpin::Destroy() { + free(name_); + if (layer_) free(layer_); +} + + +void defiVpin::setBounds(int xl, int yl, int xh, int yh) { + xl_ = xl; + yl_ = yl; + xh_ = xh; + yh_ = yh; +} + + +void defiVpin::setLayer(const char* lay) { + int len = strlen(lay)+1; + layer_ = (char*)malloc(len); + strcpy(layer_, lay); +} + + +void defiVpin::setOrient(int orient) { + orient_ = orient; +} + + +void defiVpin::setLoc(int x, int y) { + xLoc_ = x; + yLoc_ = y; +} + + +void defiVpin::setStatus(char st) { + status_ = st; +} + + +int defiVpin::xl() const { + return xl_; +} + + +int defiVpin::yl() const { + return yl_; +} + + +int defiVpin::xh() const { + return xh_; +} + + +int defiVpin::yh() const { + return yh_; +} + + +char defiVpin::status() const { + return status_; +} + + +int defiVpin::orient() const { + return orient_; +} + + +const char* defiVpin::orientStr() const { + return (defiOrientStr(orient_)); +} + + +int defiVpin::xLoc() const { + return xLoc_; +} + + +int defiVpin::yLoc() const { + return yLoc_; +} + + +const char* defiVpin::name() const { + return name_; +} + + +const char* defiVpin::layer() const { + return layer_; +} + + + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiShield +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + + +defiShield::defiShield(defrData *data) + : defData(data) +{ +} + + +void defiShield::Init(const char* name) { + int len = strlen(name) + 1; + name_ = (char*)malloc(len); + strcpy(name_, defData->DEFCASE(name)); + numPaths_ = 0; + pathsAllocated_ = 0; + paths_ = NULL; +} + + +void defiShield::Destroy() { + clear(); +} + + +defiShield::~defiShield() { + Destroy(); +} + + +void defiShield::addPath(defiPath* p, int reset, int netOsnet, int *needCbk) { + int i; + size_t incNumber; + + if (reset) { + for (i = 0; i < numPaths_; i++) { + delete paths_[i]; + } + numPaths_ = 0; + } + if (numPaths_ >= pathsAllocated_) { + // 6/17/2003 - don't want to allocate too large memory just in case + // a net has many wires with only 1 or 2 paths + + if (pathsAllocated_ <= maxLimit) { + incNumber = pathsAllocated_*2; + if (incNumber > maxLimit) { + incNumber = pathsAllocated_ + maxLimit; + } + } else { + incNumber = pathsAllocated_ + maxLimit; + } + + switch (netOsnet) { + case 2: + bumpPaths( + pathsAllocated_ ? incNumber : 1000); + break; + default: + bumpPaths( + pathsAllocated_ ? incNumber : 8); + break; + } + } + paths_[numPaths_++] = new defiPath(p); + if (numPaths_ == pathsAllocated_) + *needCbk = 1; // pre-warn the parser it needs to realloc next time +} + + +void defiShield::clear() { + int i; + + if (name_) { + free(name_); + name_ = 0; + } + + if (paths_) { + for (i = 0; i < numPaths_; i++) { + delete paths_[i]; + } + + delete [] paths_; + + paths_ = 0; + numPaths_ = 0; + pathsAllocated_ = 0; + } +} + + +void defiShield::bumpPaths(int size) { + int i; + + defiPath** newPaths = new defiPath*[size]; + + for (i = 0; i < numPaths_; i++) + newPaths[i] = paths_[i]; + + pathsAllocated_ = size; + + delete [] paths_; + + paths_ = newPaths; +} + + +int defiShield::numPaths() const { + return numPaths_; +} + + +const char* defiShield::shieldName() const { + return name_; +} + +defiPath* defiShield::path(int index) { + if (index >= 0 && index < numPaths_) + return paths_[index]; + return 0; +} + +const defiPath* defiShield::path(int index) const { + if (index >= 0 && index < numPaths_) + return paths_[index]; + return 0; +} + + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiWire +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + + +defiWire::defiWire(defrData *data) + : defData(data) +{ +} + + +void defiWire::Init(const char* type, const char* wireShieldName) { + int len = strlen(type) + 1; + type_ = (char*)malloc(len); + strcpy(type_, defData->DEFCASE(type)); + if (wireShieldName) { + wireShieldName_ = (char*)malloc(strlen(wireShieldName)+1); + strcpy(wireShieldName_, wireShieldName); + } else + wireShieldName_ = 0; + numPaths_ = 0; + pathsAllocated_ = 0; + paths_ = 0; +} + + +void defiWire::Destroy() { + clear(); +} + + +defiWire::~defiWire() { + Destroy(); +} + + +void defiWire::addPath(defiPath* p, int reset, int netOsnet, int *needCbk) { + int i; + size_t incNumber; + + if (reset) { + for (i = 0; i < numPaths_; i++) { + delete paths_[i]; + } + numPaths_ = 0; + } + if (numPaths_ >= pathsAllocated_) { + // 6/17/2003 - don't want to allocate too large memory just in case + // a net has many wires with only 1 or 2 paths + + if (pathsAllocated_ <= maxLimit) { + incNumber = pathsAllocated_*2; + if (incNumber > maxLimit) { + incNumber = pathsAllocated_ + maxLimit; + } + } else { + incNumber = pathsAllocated_ + maxLimit; + } + + switch (netOsnet) { + case 2: + bumpPaths( + pathsAllocated_ ? incNumber : 1000); + break; + default: + bumpPaths( + pathsAllocated_ ? incNumber : 8); + break; + } + } + + paths_[numPaths_++] = new defiPath(p); + + if (numPaths_ == pathsAllocated_) + *needCbk = 1; // pre-warn the parser it needs to realloc next time +} + + +void defiWire::clear() { + int i; + + if (type_) { + free(type_); + type_ = 0; + } + + if (wireShieldName_) { + free(wireShieldName_); + wireShieldName_ = 0; + } + + if (paths_) { + for (i = 0; i < numPaths_; i++) { + delete paths_[i]; + } + + delete [] paths_; + paths_ = 0; + numPaths_ = 0; + pathsAllocated_ = 0; + } +} + + +void defiWire::bumpPaths(int size) { + int i; + defiPath** newPaths = new defiPath*[size]; + + for (i = 0; i < numPaths_; i++) + newPaths[i] = paths_[i]; + + pathsAllocated_ = size; + delete [] paths_; + paths_ = newPaths; +} + + +int defiWire::numPaths() const { + return numPaths_; +} + + +const char* defiWire::wireType() const { + return type_; +} + +const char* defiWire::wireShieldNetName() const { + return wireShieldName_; +} + +defiPath* defiWire::path(int index) { + if (index >= 0 && index < numPaths_) + return paths_[index]; + return 0; +} + + +const defiPath* defiWire::path(int index) const { + if (index >= 0 && index < numPaths_) + return paths_[index]; + return 0; +} + + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiNet +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + + +defiNet::defiNet(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiNet::Init() { + name_ = 0; + instances_ = 0; + numPins_ = 0; + numProps_ = 0; + propNames_ = 0; + subnets_ = 0; + source_ = 0; + pattern_ = 0; + style_ = 0; + shieldNet_ = 0; + original_ = 0; + use_ = 0; + nonDefaultRule_ = 0; + numWires_ = 0; + wiresAllocated_ = 0; + wires_= 0; + + numWidths_ = 0; + widthsAllocated_ = 0; + wlayers_ = 0; + wdist_ = 0; + + numSpacing_ = 0; + spacingAllocated_ = 0; + slayers_ = 0; + sdist_ = 0; + sleft_ = 0; + sright_ = 0; + + vpins_ = 0; + numVpins_ = 0; + vpinsAllocated_ = 0; + + shields_ = 0; + numShields_ = 0; + numNoShields_ = 0; + shieldsAllocated_ = 0; + numShieldNet_ = 0; + shieldNetsAllocated_ = 0; + + bumpProps(2); + bumpName(16); + bumpPins(16); + bumpSubnets(2); + + rectNames_ = 0; + rectRouteStatus_ = 0; + rectRouteStatusShieldNames_=0; + rectShapeTypes_ = 0; + rectMasks_ = 0; + polygonNames_ = 0; + polyRouteStatus_ = 0; + polyShapeTypes_ = 0; + polyRouteStatusShieldNames_ = 0; + numPolys_ = 0; + polysAllocated_ = 0; + polygons_ = 0; + polyMasks_ = 0; + + numSubnets_ = 0; + paths_ = 0; + numPaths_ = 0; + + numPts_ = 0; + viaNames_ = 0; + viaPts_ = 0; + ptsAllocated_=0; + viaMasks_ = 0; + viaOrients_ = 0; + viaRouteStatus_ = 0; + viaShapeTypes_ = 0; + viaRouteStatusShieldNames_ = 0; + + clear(); +} + + +void defiNet::Destroy() { + clear(); + free(name_); + free((char*)(instances_)); + free((char*)(pins_)); + free(musts_); + free(synthesized_); + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + free((char*)(subnets_)); + if (source_) free(source_); + if (pattern_) free(pattern_); + if (shieldNet_) free(shieldNet_); + if (original_) free(original_); + if (use_) free(use_); + if (nonDefaultRule_) free(nonDefaultRule_); + if (wlayers_) free((char*)(wlayers_)); + if (slayers_) free((char*)(slayers_)); + if (sdist_) free((char*)(sdist_)); + if (wdist_) free((char*)(wdist_)); + if (sleft_) free((char*)(sleft_)); + if (sright_) free((char*)(sright_)); +} + + +defiNet::~defiNet() { + Destroy(); +} + + +void defiNet::setName(const char* name) { + int len = strlen(name) + 1; + clear(); + if (len > nameSize_) bumpName(len); + strcpy(name_, defData->DEFCASE(name)); +} + + +void defiNet::addMustPin(const char* instance, const char* pin, int syn) { + clear(); + addPin(instance, pin, syn); + musts_[numPins_ - 1] = 1; +} + + +void defiNet::addPin(const char* instance, const char* pin, int syn) { + int len; + + if (numPins_ == pinsAllocated_) + bumpPins(pinsAllocated_ * 2); + + len = strlen(instance)+ 1; + instances_[numPins_] = (char*)malloc(len); + strcpy(instances_[numPins_], defData->DEFCASE(instance)); + + len = strlen(pin)+ 1; + pins_[numPins_] = (char*)malloc(len); + strcpy(pins_[numPins_], defData->DEFCASE(pin)); + + musts_[numPins_] = 0; + synthesized_[numPins_] = syn; + + (numPins_)++; +} + + +void defiNet::setWeight(int w) { + hasWeight_ = 1; + weight_ = w; +} + + +void defiNet::addProp(const char* name, const char* value, const char type) { + int len; + + if (numProps_ == propsAllocated_) + bumpProps(propsAllocated_ * 2); + + len = strlen(name)+ 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + + len = strlen(value)+ 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + + propDValues_[numProps_] = 0; + propTypes_[numProps_] = type; + + (numProps_)++; +} + + +void defiNet::addNumProp(const char* name, const double d, + const char* value, const char type) { + int len; + + if (numProps_ == propsAllocated_) + bumpProps(propsAllocated_ * 2); + + len = strlen(name)+ 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + + len = strlen(value)+ 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + + propDValues_[numProps_] = d; + propTypes_[numProps_] = type; + + (numProps_)++; +} + + +void defiNet::addSubnet(defiSubnet* subnet) { + + if (numSubnets_ >= subnetsAllocated_) + bumpSubnets(subnetsAllocated_ * 2); + + subnets_[numSubnets_++] = subnet; +} + +// WMD -- will be removed after the next release +void defiNet::setType(const char* typ) { + if (*typ == 'F') { + isFixed_ = 1; + } else if (*typ == 'C') { + isCover_ = 1; + } else if (*typ == 'R') { + isRouted_ = 1; + } else { + // Silently do nothing with bad input. + } +} + +void defiNet::addWire(const char* type, const char* wireShieldName) { + defiWire* wire; + if (numWires_ == wiresAllocated_) { + defiWire** array; + int i; + wiresAllocated_ = wiresAllocated_ ? + wiresAllocated_ * 2 : 2 ; + array = (defiWire**)malloc(sizeof(defiWire*)*wiresAllocated_); + for (i = 0; i < numWires_; i++) + array[i] = wires_[i]; + if (wires_) free((char*)(wires_)); + wires_ = array; + } + wire = wires_[numWires_] = new defiWire(defData); + numWires_ += 1; + wire->Init(type, wireShieldName); +} + + +void defiNet::addWirePath(defiPath* p, int reset, int netOsnet, int *needCbk) { + if (numWires_ > 0) + wires_[numWires_-1]->addPath(p, reset, netOsnet, + needCbk); + else + // Something screw up, can't be both be zero. + defiError(0, 6081, "ERROR (DEFPARS-6081): An internal error has occurred. The index number for the NET PATH wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information.", defData); +} + + +void defiNet::addShield(const char* name) { + defiShield* shield; + if (numShields_ == shieldsAllocated_) { + defiShield** array; + int i; + shieldsAllocated_ = shieldsAllocated_ ? + shieldsAllocated_ * 2 : 2 ; + array = (defiShield**)malloc(sizeof(defiShield*)*shieldsAllocated_); + for (i = 0; i < numShields_; i++) + array[i] = shields_[i]; + if (shields_) free((char*)(shields_)); + shields_ = array; + } + shield = shields_[numShields_] = new defiShield(defData); + numShields_ += 1; + shield->Init(name); +} + + +void defiNet::addShieldPath(defiPath* p, int reset, int netOsnet, int *needCbk) { + // Since shield and noshield share the list shields_, the + // only way to tell whether the list is currently contained + // data for shields_ or noshields_ is from the variables + // numShields_ and numNoShields_. + // Since shield and noshield are mutual exclusive, only one + // numShields_ or numNoShields will be non-zero + // in this method. Whichever is non-zero will be the current + // working list + if (numShields_ > 0) + shields_[numShields_-1]->addPath(p, reset, + netOsnet, needCbk); + else if (numNoShields_ > 0) + shields_[numNoShields_-1]->addPath(p, reset, + netOsnet, needCbk); + else + // Something screw up, can't be both be zero. + defiError(0, 6082, "ERROR (DEFPARS-6082): An internal error has occurred. The index number for the NET SHIELDPATH wires array is less then or equal to 0.\nContact Cadence Customer Support with this error information.", defData); +} + + +void defiNet::addNoShield(const char* name) { + defiShield* shield; + if (numNoShields_ == shieldsAllocated_) { + defiShield** array; + int i; + shieldsAllocated_ = shieldsAllocated_ ? + shieldsAllocated_ * 2 : 2 ; + array = (defiShield**)malloc(sizeof(defiShield*)*shieldsAllocated_); + for (i = 0; i < numNoShields_; i++) + array[i] = shields_[i]; + if (shields_) free((char*)(shields_)); + shields_ = array; + } + shield = shields_[numNoShields_] = new defiShield(defData); + numNoShields_ += 1; + shield->Init(name); +} + + +void defiNet::addShieldNet(const char* name) { + int len; + + if (numShieldNet_ == shieldNetsAllocated_) { + if (shieldNetsAllocated_ == 0) + bumpShieldNets(2); + else + bumpShieldNets(shieldNetsAllocated_ * 2); + + } + + len = strlen(name) + 1; + shieldNet_[numShieldNet_] = (char*)malloc(len); + strcpy(shieldNet_[numShieldNet_], defData->DEFCASE(name)); + (numShieldNet_)++; +} + + +void defiNet::changeNetName(const char* name) { + int len = strlen(name) + 1; + if (len > nameSize_) bumpName(len); + strcpy(name_, defData->DEFCASE(name)); +} + +void defiNet::changeInstance(const char* instance, int index) { + int len; + char errMsg[128]; + + if ((index < 0) || (index > numPins_)) { + sprintf (errMsg, "ERROR (DEFPARS-6083): The index number %d specified for the NET INSTANCE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPins_); + defiError(0, 6083, errMsg, defData); + } + + len = strlen(instance)+ 1; + if (instances_[index]) + free((char*)(instances_[index])); + instances_[index] = (char*)malloc(len); + strcpy(instances_[index], defData->DEFCASE(instance)); + return; +} + +void defiNet::changePin(const char* pin, int index) { + int len; + char errMsg[128]; + + if ((index < 0) || (index > numPins_)) { + sprintf (errMsg, "ERROR (DEFPARS-6084): The index number %d specified for the NET PIN is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPins_); + defiError(0, 6084, errMsg, defData); + } + + len = strlen(pin)+ 1; + if (pins_[index]) + free((char*)(pins_[index])); + pins_[index] = (char*)malloc(len); + strcpy(pins_[index], defData->DEFCASE(pin)); + return; +} + +const char* defiNet::name() const { + return name_; +} + + +int defiNet::weight() const { + return weight_; +} + + +int defiNet::numProps() const { + return numProps_; +} + + +int defiNet::hasProps() const { + return numProps_ ? 1 : 0 ; +} + + +int defiNet::hasWeight() const { + return (int)(hasWeight_); +} + + +const char* defiNet::propName(int index) const { + if (index >= 0 && index < numProps_) + return propNames_[index]; + return 0; +} + + +const char* defiNet::propValue(int index) const { + if (index >= 0 && index < numProps_) + return propValues_[index]; + return 0; +} + + +double defiNet::propNumber(int index) const { + if (index >= 0 && index < numProps_) + return propDValues_[index]; + return 0; +} + + +const char defiNet::propType(int index) const { + if (index >= 0 && index < numProps_) + return propTypes_[index]; + return 0; +} + + +int defiNet::propIsNumber(int index) const { + if (index >= 0 && index < numProps_) + return propDValues_[index] ? 1 : 0; + return 0; +} + + +int defiNet::propIsString(int index) const { + if (index >= 0 && index < numProps_) + return propDValues_[index] ? 0 : 1; + return 0; +} + + +int defiNet::numConnections() const { + return numPins_; +} + + +int defiNet::numShieldNets() const { + return numShieldNet_; +} + + +const char* defiNet::instance(int index) const { + if (index >= 0 && index < numPins_) + return instances_[index]; + return 0; +} + + +const char* defiNet::pin(int index) const { + if (index >= 0 && index < numPins_) + return pins_[index]; + return 0; +} + + +int defiNet::pinIsMustJoin(int index) const { + if (index >= 0 && index < numPins_) + return (int)(musts_[index]); + return 0; +} + + +int defiNet::pinIsSynthesized(int index) const { + if (index >= 0 && index < numPins_) + return (int)(synthesized_[index]); + return 0; +} + + +int defiNet::hasSubnets() const { + return numSubnets_ ? 1 : 0 ; +} + + +int defiNet::numSubnets() const { + return numSubnets_; +} + + +defiSubnet* defiNet::subnet(int index) { + if (index >= 0 && index < numSubnets_) + return subnets_[index]; + return 0; +} + + +const defiSubnet* defiNet::subnet(int index) const { + if (index >= 0 && index < numSubnets_) + return subnets_[index]; + return 0; +} + + +int defiNet::isFixed() const { + return (int)(isFixed_); +} + + +int defiNet::isRouted() const { + return (int)(isRouted_); +} + + +int defiNet::isCover() const { + return (int)(isCover_); +} + + +// this method will only call if the callback defrSNetWireCbk is set +// which will callback every wire. Therefore, only one wire should be here +void defiNet::freeWire() { + int i; + + if (numWires_) { + for (i = 0; i < numWires_; i++) { + wires_[i]->Destroy(); + free((char*)(wires_[i])); + wires_[i] = 0; + } + free((char*)(wires_)); + wires_ = 0; + numWires_ = 0; + wiresAllocated_ = 0; + } + + clearRectPoly(); + clearVia(); +} + + +void defiNet::freeShield() { + int i; + + if (numShields_) { + for (i = 0; i < numShields_; i++) { + shields_[i]->Destroy(); + free((char*)(shields_[i])); + shields_[i] = 0; + } + numShields_ = 0; + shieldsAllocated_ = 0; + } +} + + +void defiNet::print(FILE* f) const { + int i, j, x, y, newLayer; + int numX, numY, stepX, stepY; + const defiPath* p; + const defiSubnet* s; + const defiVpin* vp; + const defiWire* w; + int path; + + fprintf(f, "Net '%s'", name_); + fprintf(f, "\n"); + + if (hasWeight()) + fprintf(f, " weight=%d\n", weight()); + + if (hasFixedbump()) + fprintf(f, " fixedbump\n"); + + if (hasFrequency()) + fprintf(f, " frequency=%f\n", frequency()); + + if (hasCap()) + fprintf(f, " cap=%f\n", cap()); + + if (hasSource()) + fprintf(f, " source='%s'\n", source()); + + if (hasPattern()) + fprintf(f, " pattern='%s'\n", pattern()); + + if (hasOriginal()) + fprintf(f, " original='%s'\n", original()); + + if (hasUse()) + fprintf(f, " use='%s'\n", use()); + + if (hasNonDefaultRule()) + fprintf(f, " nonDefaultRule='%s'\n", nonDefaultRule()); + + if (hasXTalk()) + fprintf(f, " xtalk=%d\n", XTalk()); + + if (hasStyle()) + fprintf(f, " style='%d'\n", style()); + + if (hasProps()) { + fprintf(f, " Props:\n"); + for (i = 0; i < numProps(); i++) { + fprintf(f, " '%s' '%s'\n", propName(i), + propValue(i)); + } + } + + if (numConnections()) { + fprintf(f, " Pins:\n"); + for (i = 0; i < numConnections(); i++) { + fprintf(f, " '%s' '%s'%s%s\n", + instance(i), + pin(i), + pinIsMustJoin(i) ? " MUSTJOIN" : "", + pinIsSynthesized(i) ? " SYNTHESIZED" : ""); + } + } + + for (i = 0; i < numVpins_; i++) { + vp = vpin(i); + fprintf(f, + " VPIN %s status '%c' layer %s %d,%d orient %s bounds %d,%d to %d,%d\n", + vp->name(), + vp->status(), + vp->layer() ? vp->layer() : "", + vp->xLoc(), + vp->yLoc(), + vp->orientStr(), + vp->xl(), + vp->yl(), + vp->xh(), + vp->yh()); + } + + for (i = 0; i < numWires_; i++) { + newLayer = 0; + w = wire(i); + fprintf(f, "+ %s ", w->wireType()); + for (j = 0; j < w->numPaths(); j++) { + p = w->path(j); + p->initTraverse(); + while ((path = (int)(p->next())) != DEFIPATH_DONE) { + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(f, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(f, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(f, "%s\n", p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(f, "%d\n", p->getViaRotation()); + break; + case DEFIPATH_VIADATA: + p->getViaData(&numX, &numY, &stepX, &stepY); + fprintf(f, "%d %d %d %d\n", numX, numY, stepX, stepY); + break; + case DEFIPATH_WIDTH: + fprintf(f, "%d\n", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(f, "( %d %d )\n", x, y); + break; + case DEFIPATH_TAPER: + fprintf(f, "TAPER\n"); + break; + } + } + } + } + + if (hasSubnets()) { + fprintf(f, " Subnets:\n"); + for (i = 0; i < numSubnets(); i++) { + s = subnet(i); + s->print(f); + } + } + +} + + +void defiNet::bumpName(int size) { + if (name_) free(name_); + name_ = (char*)malloc(size); + nameSize_ = size; + name_[0] = '\0'; +} + + +void defiNet::bumpPins(int size) { + char** newInstances = (char**)malloc(sizeof(char*)*size); + char** newPins = (char**)malloc(sizeof(char*)*size); + char* newMusts = (char*)malloc(size); + char* newSyn = (char*)malloc(size); + int i; + + if (instances_) { + for (i = 0; i < pinsAllocated_; i++) { + newInstances[i] = instances_[i]; + newPins[i] = pins_[i]; + newMusts[i] = musts_[i]; + newSyn[i] = synthesized_[i]; + } + free((char*)(instances_)); + free((char*)(pins_)); + free(musts_); + free(synthesized_); + } + + instances_ = newInstances; + pins_ = newPins; + musts_ = newMusts; + synthesized_ = newSyn; + pinsAllocated_ = size; +} + + +void defiNet::bumpProps(int size) { + char** newNames = (char**)malloc(sizeof(char*)*size); + char** newValues = (char**)malloc(sizeof(char*)*size); + double* newDValues = (double*)malloc(sizeof(double)*size); + char* newTypes = (char*)malloc(sizeof(char)*size); + int i; + + if (propNames_) { + for (i = 0; i < numProps_; i++) { + newNames[i] = propNames_[i]; + newValues[i] = propValues_[i]; + newDValues[i] = propDValues_[i]; + newTypes[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + } + + propNames_ = newNames; + propValues_ = newValues; + propDValues_ = newDValues; + propTypes_ = newTypes; + propsAllocated_ = size; +} + + +void defiNet::bumpSubnets(int size) { + defiSubnet** newSubnets = (defiSubnet**)malloc(sizeof(defiSubnet*)*size); + int i; + if (subnets_) { + for (i = 0; i < numSubnets_; i++) { + newSubnets[i] = subnets_[i]; + } + free((char*)(subnets_)); + } + + subnets_ = newSubnets; + subnetsAllocated_ = size; +} + + +void defiNet::clear() { + int i; + + // WMD -- this will be removed by the next release + isFixed_ = 0; + isRouted_ = 0; + isCover_ = 0; + + hasWeight_ = 0; + hasCap_ = 0; + hasFrequency_ = 0; + hasVoltage_ = 0; + xTalk_ = -1; + + if (vpins_) { + for (i = 0; i < numVpins_; i++) { + delete vpins_[i]; + } + free((char*)vpins_); + vpins_ = 0; + numVpins_ = 0; + vpinsAllocated_ = 0; + } + + for (i = 0; i < numProps_; i++) { + free(propNames_[i]); + free(propValues_[i]); + propNames_[i] = 0; + propValues_[i] = 0; + propDValues_[i] = 0; + } + numProps_ = 0; + + for (i = 0; i < numPins_; i++) { + free(instances_[i]); + free(pins_[i]); + instances_[i] = 0; + pins_[i] = 0; + musts_[i] = 0; + synthesized_[i] = 0; + } + numPins_ = 0; + + for (i = 0; i < numSubnets_; i++) { + delete subnets_[i]; + subnets_[i] = 0; + } + numSubnets_ = 0; + + if (name_) + name_[0] = '\0'; + + // WMD -- this will be removed by the next release + if (paths_) { + for (i = 0; i < numPaths_; i++) { + delete paths_[i]; + } + + delete [] paths_; + paths_ = 0; + numPaths_ = 0; + pathsAllocated_ = 0; + } + + // 5.4.1 + fixedbump_ = 0; + + if (source_) { free(source_); source_ = 0; } + if (pattern_) { free(pattern_); pattern_ = 0; } + if (original_) { free(original_); original_ = 0; } + if (use_) { free(use_); use_ = 0; } + if (nonDefaultRule_) { free(nonDefaultRule_); + nonDefaultRule_ = 0; } + style_ = 0; + + if (numWires_) { + for (i = 0; i < numWires_; i++) { + delete wires_[i]; + wires_[i] = 0; + } + free((char*)(wires_)); + wires_ = 0; + numWires_ = 0; + wiresAllocated_ = 0; + } + + if (numShields_) { + for (i = 0; i < numShields_; i++) { + delete shields_[i]; + shields_[i] = 0; + } + numShields_ = 0; + shieldsAllocated_ = 0; + } + + if (numNoShields_) { + for (i = 0; i < numNoShields_; i++) { + delete shields_[i]; + shields_[i] = 0; + } + numNoShields_ = 0; + shieldsAllocated_ = 0; + } + if (shields_) + free((char*)(shields_)); + + shields_ = 0; + + if (numWidths_) { + for (i = 0; i < numWidths_; i++) + free(wlayers_[i]); + numWidths_ = 0; + } + + if (numSpacing_) { + for (i = 0; i < numSpacing_; i++) + free(slayers_[i]); + numSpacing_ = 0; + } + + if (numShieldNet_) { + for (i = 0; i < numShieldNet_; i++) + free(shieldNet_[i]); + numShieldNet_ = 0; + } + + if (polygonNames_) { + struct defiPoints* p; + for (i = 0; i < numPolys_; i++) { + if (polygonNames_[i]){ + free((char*)(polygonNames_[i])); + } + if (polyRouteStatus_[i]) { + free((char*)(polyRouteStatus_[i])); + } + if (polyShapeTypes_[i]) { + free((char*)(polyShapeTypes_[i])); + } + if (polyRouteStatusShieldNames_[i]) { + free((char*)(polyRouteStatusShieldNames_[i])); + } + p = polygons_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(polygons_[i])); + } + free((char*)(polygonNames_)); + free((char*)(polygons_)); + free((char*)(polyMasks_)); + free((char*)(polyRouteStatus_)); + free((char*)(polyShapeTypes_)); + free((char*)(polyRouteStatusShieldNames_)); + polygonNames_ = 0; + polygons_ = 0; + polyMasks_ = 0; + polyRouteStatus_ = 0; + polyShapeTypes_ = 0; + polyRouteStatusShieldNames_ = 0; + } + numPolys_ = 0; + polysAllocated_ = 0; + + if (rectNames_) { + for (i = 0; i < numRects_; i++) { + if (rectNames_[i]) { + free ((char*)(rectNames_[i])); + } + if (rectRouteStatus_[i]) { + free ((char*)(rectRouteStatus_[i])); + } + if (rectRouteStatusShieldNames_[i]) { + free ((char*)(rectRouteStatusShieldNames_[i])); + } + if (rectShapeTypes_[i]) { + free ((char*)(rectShapeTypes_[i])); + } + } + free((char*)(rectNames_)); + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + free((char*)(rectMasks_)); + free((char*)(rectRouteStatus_)); + free((char*)(rectRouteStatusShieldNames_)); + free((char*)(rectShapeTypes_)); + } + rectNames_ = 0; + rectRouteStatus_ = 0; + rectShapeTypes_ = 0; + rectRouteStatusShieldNames_ = 0; + numRects_ = 0; + rectsAllocated_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + rectMasks_ = 0; + + if (viaNames_) { + struct defiPoints* p; + + for (i = 0; i < numPts_; i++) { + p = viaPts_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(viaPts_[i])); + if (viaNames_[i]) { + free ((char*)(viaNames_[i])); + } + if (viaRouteStatus_[i]) { + free ((char*)(viaRouteStatus_[i])); + } + if (viaShapeTypes_[i]) { + free ((char*)(viaShapeTypes_[i])); + } + if (viaRouteStatusShieldNames_[i]) { + free ((char*)(viaRouteStatusShieldNames_[i])); + } + } + free((char*)(viaNames_)); + free((char*)(viaPts_)); + free((char*)(viaMasks_)); + free((char*)(viaOrients_)); + free((char*)(viaRouteStatus_)); + free((char*)(viaShapeTypes_)); + free((char*)(viaRouteStatusShieldNames_)); + viaNames_ = 0; + viaPts_ = 0; + viaRouteStatus_ = 0; + viaShapeTypes_ = 0; + viaRouteStatusShieldNames_ = 0 ; + } + numPts_ = 0; + ptsAllocated_ = 0; + viaOrients_ = 0; + viaMasks_ = 0; +} + +void defiNet::clearRectPolyNPath() { + int i; + + if (paths_) { + for (i = 0; i < numPaths_; i++) { + delete paths_[i]; + } + numPaths_ = 0; + } + + clearRectPoly(); + +} + +void defiNet::clearRectPoly() { + int i; + + if (polygonNames_) { + struct defiPoints* p; + for (i = 0; i < numPolys_; i++) { + if (polygonNames_[i]){ + free((char*)(polygonNames_[i])); + } + if (polyRouteStatus_[i]) { + free((char*)(polyRouteStatus_[i])); + } + if (polyShapeTypes_[i]) { + free((char*)(polyShapeTypes_[i])); + } + if (polyRouteStatusShieldNames_[i]) { + free((char*)(polyRouteStatusShieldNames_[i])); + } + p = polygons_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(polygons_[i])); + } + free((char*)(polyMasks_)); + free((char*)(polygonNames_)); + free((char*)(polygons_)); + free((char*)(polyRouteStatus_)); + free((char*)(polyShapeTypes_)); + free((char*)(polyRouteStatusShieldNames_)); + } + numPolys_ = 0; + polysAllocated_ = 0; + polyMasks_ = 0; + polygonNames_ = 0; + polyRouteStatus_= 0; + polyShapeTypes_= 0; + polyRouteStatusShieldNames_ = 0; + polygons_ = 0; + + if (rectNames_) { + for (i = 0; i < numRects_; i++) { + if (rectNames_[i]){ + free((char*)(rectNames_[i])); + } + if (rectRouteStatus_[i]){ + free((char*)(rectRouteStatus_[i])); + } + if (rectShapeTypes_[i]) { + free((char*)(rectShapeTypes_[i])); + } + if (rectRouteStatusShieldNames_[i]) { + free((char*)(rectRouteStatusShieldNames_[i])); + } + } + free((char*)(rectMasks_)); + free((char*)(rectNames_)); + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + free((char*)(rectShapeTypes_)); + free((char*)(rectRouteStatus_)); + free((char*)(rectRouteStatusShieldNames_)); + } + rectNames_ = 0; + rectsAllocated_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + numRects_ = 0; + rectMasks_ = 0; + rectRouteStatus_ = 0; + rectShapeTypes_ = 0; + rectRouteStatusShieldNames_=0; +} + +int defiNet::hasSource() const { + return source_ ? 1 : 0; +} + + +int defiNet::hasFixedbump() const { + return fixedbump_ ? 1 : 0; +} + + +int defiNet::hasFrequency() const { + return (int)(hasFrequency_); +} + + +int defiNet::hasPattern() const { + return pattern_ ? 1 : 0; +} + + +int defiNet::hasOriginal() const { + return original_ ? 1 : 0; +} + + +int defiNet::hasCap() const { + return (int)(hasCap_); +} + + +int defiNet::hasUse() const { + return use_ ? 1 : 0; +} + + +int defiNet::hasStyle() const { + return style_ ? 1 : 0; +} + + +int defiNet::hasXTalk() const { + return (xTalk_ != -1) ? 1 : 0; +} + + +int defiNet::hasNonDefaultRule() const { + return nonDefaultRule_ ? 1 : 0; +} + + +void defiNet::setSource(const char* typ) { + int len; + if (source_) free(source_); + len = strlen(typ) + 1; + source_ = (char*)malloc(len); + strcpy(source_, defData->DEFCASE(typ)); +} + + +void defiNet::setFixedbump() { + fixedbump_ = 1; +} + + +void defiNet::setFrequency(double frequency) { + frequency_ = frequency; + hasFrequency_ = 1; +} + + +void defiNet::setOriginal(const char* typ) { + int len; + if (original_) free(original_); + len = strlen(typ) + 1; + original_ = (char*)malloc(len); + strcpy(original_, defData->DEFCASE(typ)); +} + + +void defiNet::setPattern(const char* typ) { + int len; + if (pattern_) free(pattern_); + len = strlen(typ) + 1; + pattern_ = (char*)malloc(len); + strcpy(pattern_, defData->DEFCASE(typ)); +} + + +void defiNet::setCap(double w) { + cap_ = w; + hasCap_ = 1; +} + + +void defiNet::setUse(const char* typ) { + int len; + if (use_) free(use_); + len = strlen(typ) + 1; + use_ = (char*)malloc(len); + strcpy(use_, defData->DEFCASE(typ)); +} + + +void defiNet::setStyle(int style) { + style_ = style; +} + + +void defiNet::setNonDefaultRule(const char* typ) { + int len; + if (nonDefaultRule_) free(nonDefaultRule_); + len = strlen(typ) + 1; + nonDefaultRule_ = (char*)malloc(len); + strcpy(nonDefaultRule_, defData->DEFCASE(typ)); +} + + +const char* defiNet::source() const { + return source_; +} + + +const char* defiNet::original() const { + return original_; +} + + +const char* defiNet::pattern() const { + return pattern_; +} + + +double defiNet::cap() const { + return (hasCap_ ? cap_ : 0.0); +} + + +double defiNet::frequency() const { + return (hasFrequency_ ? frequency_ : 0.0); +} + + +const char* defiNet::use() const { + return use_; +} + + +int defiNet::style() const { + return style_; +} + + +const char* defiNet::shieldNet(int index) const { + return shieldNet_[index]; +} + + +const char* defiNet::nonDefaultRule() const { + return nonDefaultRule_; +} + +// WMD -- this will be removed by the next release +void defiNet::bumpPaths(int size) { + int i; + + defiPath** newPaths = new defiPath*[size]; + + for (i = 0; i < numPaths_; i++) + newPaths[i] = paths_[i]; + + delete [] paths_; + pathsAllocated_ = size; + paths_ = newPaths; +} + +// WMD -- this will be removed by the next release +int defiNet::numPaths() const { + return numPaths_; +} + + +// WMD -- this will be removed by the next release +defiPath* defiNet::path(int index) { + if (index >= 0 && index < numPaths_) + return paths_[index]; + return 0; +} + + +const defiPath* defiNet::path(int index) const { + if (index >= 0 && index < numPaths_) + return paths_[index]; + return 0; +} + + +int defiNet::numWires() const { + return numWires_; +} + + +defiWire* defiNet::wire(int index) { + if (index >= 0 && index < numWires_) + return wires_[index]; + return 0; +} + + +const defiWire* defiNet::wire(int index) const { + if (index >= 0 && index < numWires_) + return wires_[index]; + return 0; +} + + +void defiNet::bumpShieldNets(int size) { + char** newShieldNets = (char**)malloc(sizeof(char*)*size); + int i; + + if (shieldNet_) { + for (i = 0; i < shieldNetsAllocated_; i++) { + newShieldNets[i] = shieldNet_[i]; + } + free((char*)(shieldNet_)); + } + + shieldNet_ = newShieldNets; + shieldNetsAllocated_ = size; +} + + +int defiNet::numShields() const { + return numShields_; +} + + +defiShield* defiNet::shield(int index) { + if (index >= 0 && index < numShields_) + return shields_[index]; + return 0; +} + + +const defiShield* defiNet::shield(int index) const { + if (index >= 0 && index < numShields_) + return shields_[index]; + return 0; +} + +int defiNet::numNoShields() const { + return numNoShields_; +} + + +defiShield* defiNet::noShield(int index) { + if (index >= 0 && index < numNoShields_) + return shields_[index]; + return 0; +} + +const defiShield* defiNet::noShield(int index) const { + if (index >= 0 && index < numNoShields_) + return shields_[index]; + return 0; +} + +int defiNet::hasVoltage() const { + return (int)(hasVoltage_); +} + + +double defiNet::voltage() const { + return voltage_; +} + + +int defiNet::numWidthRules() const { + return numWidths_; +} + + +int defiNet::numSpacingRules() const { + return numSpacing_; +} + + +int defiNet::hasWidthRules() const { + return numWidths_; +} + + +int defiNet::hasSpacingRules() const { + return numSpacing_; +} + + +void defiNet::setXTalk(int i) { + xTalk_ = i; +} + + +int defiNet::XTalk() const { + return xTalk_; +} + + +void defiNet::addVpin(const char* name) { + defiVpin* vp; + if (numVpins_ == vpinsAllocated_) { + defiVpin** array; + int i; + vpinsAllocated_ = vpinsAllocated_ ? + vpinsAllocated_ * 2 : 2 ; + array = (defiVpin**)malloc(sizeof(defiVpin*)*vpinsAllocated_); + for (i = 0; i < numVpins_; i++) + array[i] = vpins_[i]; + if (vpins_) free((char*)(vpins_)); + vpins_ = array; + } + vp = vpins_[numVpins_] = new defiVpin(defData); + numVpins_ += 1; + vp->Init(name); +} + + +void defiNet::addVpinLayer(const char* name) { + defiVpin* vp = vpins_[numVpins_-1]; + vp->setLayer(name); +} + + +void defiNet::addVpinLoc(const char* status, int x, int y, int orient) { + defiVpin* vp = vpins_[numVpins_-1]; + vp->setStatus(*status); + vp->setLoc(x,y); + vp->setOrient(orient); +} + + +void defiNet::addVpinBounds(int xl, int yl, int xh, int yh) { + defiVpin* vp = vpins_[numVpins_-1]; + vp->setBounds(xl, yl, xh, yh); +} + + +int defiNet::numVpins() const { + return numVpins_; +} + + +defiVpin* defiNet::vpin(int index) { + if (index < 0 || index >= numVpins_) return 0; + return vpins_[index]; +} + + +const defiVpin* defiNet::vpin(int index) const { + if (index < 0 || index >= numVpins_) return 0; + return vpins_[index]; +} + +void defiNet::spacingRule(int index, char** layer, double* dist, + double* left, double* right) const { + if (index >= 0 && index < numSpacing_) { + if (layer) *layer = slayers_[index]; + if (dist) *dist = sdist_[index]; + if (left) *left = sleft_[index]; + if (right) *right = sright_[index]; + } +} + + +void defiNet::widthRule(int index, char** layer, double* dist) const { + if (index >= 0 && index < numWidths_) { + if (layer) *layer = wlayers_[index]; + if (dist) *dist = wdist_[index]; + } +} + + +void defiNet::setVoltage(double v) { + voltage_ = v; + hasVoltage_ = 1; +} + + +void defiNet::setWidth(const char* layer, double d) { + int len = strlen(layer) + 1; + char* l = (char*)malloc(len); + strcpy(l, defData->DEFCASE(layer)); + + if (numWidths_ >= widthsAllocated_) { + int i; + char** nl; + double* nd; + widthsAllocated_ = widthsAllocated_ ? + widthsAllocated_ * 2 : 4 ; + nl = (char**)malloc(sizeof(char*) * widthsAllocated_); + nd = (double*)malloc(sizeof(double) * widthsAllocated_); + for (i = 0; i < numWidths_; i++) { + nl[i] = wlayers_[i]; + nd[i] = wdist_[i]; + } + free((char*)(wlayers_)); + free((char*)(wdist_)); + wlayers_ = nl; + wdist_ = nd; + } + + wlayers_[numWidths_] = l; + wdist_[numWidths_] = d; + (numWidths_)++; +} + + +void defiNet::setSpacing(const char* layer, double d) { + int len = strlen(layer) + 1; + char* l = (char*)malloc(len); + strcpy(l, defData->DEFCASE(layer)); + + if (numSpacing_ >= spacingAllocated_) { + int i; + char** nl; + double* nd; + double* n1; + double* n2; + spacingAllocated_ = spacingAllocated_ ? + spacingAllocated_ * 2 : 4 ; + nl = (char**)malloc(sizeof(char*) * spacingAllocated_); + nd = (double*)malloc(sizeof(double) * spacingAllocated_); + n1 = (double*)malloc(sizeof(double) * spacingAllocated_); + n2 = (double*)malloc(sizeof(double) * spacingAllocated_); + for (i = 0; i < numSpacing_; i++) { + nl[i] = slayers_[i]; + nd[i] = sdist_[i]; + n1[i] = sleft_[i]; + n2[i] = sright_[i]; + } + free((char*)(slayers_)); + free((char*)(sdist_)); + free((char*)(sleft_)); + free((char*)(sright_)); + slayers_ = nl; + sdist_ = nd; + sleft_ = n1; + sright_ = n2; + } + + slayers_[numSpacing_] = l; + sdist_[numSpacing_] = d; + sleft_[numSpacing_] = d; + sright_[numSpacing_] = d; + (numSpacing_)++; +} + + +void defiNet::setRange(double left, double right) { + // This is always called right after setSpacing. + sleft_[numSpacing_-1] = left; + sright_[numSpacing_-1] = right; +} + +// 5.6 +void defiNet::addPolygon(const char* layerName, defiGeometries* geom, + int *needCbk, int colorMask, + const char* routeStatus, + const char* shapeType, + const char* routeStatusShieldName) { + struct defiPoints* p; + int x, y; + int i; + + // This method will only call by specialnet, need to change if net also + // calls it. + *needCbk = 0; + if (numPolys_ == polysAllocated_) { + char** newn; + char** newRS; + char** newST; + char** newRSN; + int* maskn; + struct defiPoints** poly; + polysAllocated_ = (polysAllocated_ == 0) ? + 1000 : polysAllocated_ * 2; + newn = (char**)malloc(sizeof(char*) * polysAllocated_); + newRS = (char**)malloc(sizeof(char*) * polysAllocated_); + newST = (char**)malloc(sizeof(char*) * polysAllocated_); + newRSN = (char**)malloc(sizeof(char*) * polysAllocated_); + maskn = (int*)malloc(sizeof(int) * polysAllocated_); + poly = (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + polysAllocated_); + for (i = 0; i < numPolys_; i++) { + newn[i] = polygonNames_[i]; + poly[i] = polygons_[i]; + maskn[i] = polyMasks_[i]; + newRS[i] = polyRouteStatus_[i]; + newST[i] = polyShapeTypes_[i]; + newRSN[i] = polyRouteStatusShieldNames_[i]; + + } + if (polygons_) + free((char*)(polygons_)); + if (polygonNames_) + free((char*)(polygonNames_)); + if (polyMasks_) + free((char*)(polyMasks_)); + if (polyRouteStatus_) + free((char*)(polyRouteStatus_)); + if (polyShapeTypes_) + free((char*)(polyShapeTypes_)); + if (polyRouteStatusShieldNames_) + free((char*)(polyRouteStatusShieldNames_)); + polygonNames_ = newn; + polygons_ = poly; + polyMasks_ = maskn; + polyShapeTypes_ = newST; + polyRouteStatus_= newRS; + polyRouteStatusShieldNames_ = newRSN; + } + polygonNames_[numPolys_] = strdup(layerName); + polyRouteStatus_[numPolys_] = strdup(routeStatus); + polyShapeTypes_[numPolys_] = strdup(shapeType); + polyRouteStatusShieldNames_[numPolys_] = strdup(routeStatusShieldName); + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + polyMasks_[numPolys_] = colorMask; + polygons_[numPolys_] = p; + numPolys_ += 1; + if (numPolys_ == 1000) // Want to invoke the partial callback if set + *needCbk = 1; +} + + +// 5.6 +int defiNet::numPolygons() const { + return numPolys_; +} + + +// 5.6 +const char* defiNet::polygonName(int index) const { + char errMsg[128]; + if (index < 0 || index > numPolys_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPolys_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return polygonNames_[index]; +} + +const char* defiNet::polyRouteStatus(int index) const { + char errMsg[128]; + if (index < 0 || index > numPolys_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPolys_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return polyRouteStatus_[index]; +} + +const char* defiNet::polyRouteStatusShieldName(int index) const { + char errMsg[128]; + if (index < 0 || index > numPolys_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPolys_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return polyRouteStatusShieldNames_[index]; +} + +const char* defiNet::polyShapeType(int index) const { + char errMsg[128]; + if (index < 0 || index > numPolys_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPolys_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return polyShapeTypes_[index]; +} + +int defiNet::polyMask(int index) const { + char errMsg[128]; + if (index < 0 || index > numPolys_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPolys_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return polyMasks_[index]; +} + +// 5.6 +struct defiPoints defiNet::getPolygon(int index) const { + return *(polygons_[index]); +} + +// 5.6 +void defiNet::addRect(const char* layerName, int xl, int yl, int xh, int yh, + int *needCbk, + int colorMask, + const char* routeStatus, + const char* shapeType, + const char* routeStatusName) { + // This method will only call by specialnet, need to change if net also + // calls it. + *needCbk = 0; + if (numRects_ == rectsAllocated_) { + int i; + int max; + char** newn; + int* newxl; + int* newyl; + int* newxh; + int* newyh; + int* newMask; + char** newRS; + char** newST; + char** newRSN; + + max = rectsAllocated_ = (rectsAllocated_ == 0) ? 1000 : + rectsAllocated_ * 2; + newn = (char**)malloc(sizeof(char*)*max); + newRS = (char**)malloc(sizeof(char*)*max); + newST = (char**)malloc(sizeof(char*)*max); + newRSN = (char**)malloc(sizeof(char*)*max); + newxl = (int*)malloc(sizeof(int)*max); + newyl = (int*)malloc(sizeof(int)*max); + newxh = (int*)malloc(sizeof(int)*max); + newyh = (int*)malloc(sizeof(int)*max); + newMask = (int*)malloc(sizeof(int)*max); + for (i = 0; i < numRects_; i++) { + newn[i] = rectNames_[i]; + newxl[i] = xl_[i]; + newyl[i] = yl_[i]; + newxh[i] = xh_[i]; + newyh[i] = yh_[i]; + newMask[i] = rectMasks_[i]; + newRS[i] = rectRouteStatus_[i]; + newST[i] = rectShapeTypes_[i]; + newRSN[i] = rectRouteStatusShieldNames_[i]; + } + if (rectNames_) + free((char*)(rectNames_)); + if (rectRouteStatus_) + free((char*)(rectRouteStatus_)); + if (rectShapeTypes_) + free((char*)(rectShapeTypes_)); + if (rectRouteStatusShieldNames_) + free((char*)(rectRouteStatusShieldNames_)); + if (xl_) { + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + free((char*)(rectMasks_)); + } + rectNames_ = newn; + xl_ = newxl; + yl_ = newyl; + xh_ = newxh; + yh_ = newyh; + rectMasks_ = newMask; + rectRouteStatus_ = newRS; + rectShapeTypes_ = newST; + rectRouteStatusShieldNames_ = newRSN; + } + rectNames_[numRects_] = strdup(layerName); + xl_[numRects_] = xl; + yl_[numRects_] = yl; + xh_[numRects_] = xh; + yh_[numRects_] = yh; + rectMasks_[numRects_] = colorMask; + rectRouteStatus_[numRects_] = strdup(routeStatus); + rectShapeTypes_[numRects_] = strdup(shapeType); + rectRouteStatusShieldNames_[numRects_] = strdup(routeStatusName); + numRects_ += 1; + if (numRects_ == 1000) // Want to invoke the partial callback if set + *needCbk = 1; +} + +// 5.6 +int defiNet::numRectangles() const { + return numRects_; +} + +// 5.6 +const char* defiNet::rectName(int index) const { + char errMsg[128]; + if (index < 0 || index > numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return rectNames_[index]; +} + +const char* defiNet::rectRouteStatus(int index) const { + char errMsg[128]; + if (index < 0 || index > numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return rectRouteStatus_[index]; +} + +const char* defiNet::rectRouteStatusShieldName(int index) const { + char errMsg[128]; + if (index < 0 || index > numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return rectRouteStatusShieldNames_[index]; +} + +const char* defiNet::rectShapeType(int index) const { + char errMsg[128]; + if (index < 0 || index > numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return rectShapeTypes_[index]; +} + +// 5.6 +int defiNet::xl(int index) const { + char errMsg[128]; + if (index < 0 || index >= numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return xl_[index]; +} + +// 5.6 +int defiNet::yl(int index) const { + char errMsg[128]; + if (index < 0 || index >= numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return yl_[index]; +} + +// 5.6 +int defiNet::xh(int index) const { + char errMsg[128]; + if (index < 0 || index >= numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return xh_[index]; +} + +// 5.6 +int defiNet::yh(int index) const { + char errMsg[128]; + if (index < 0 || index >= numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return yh_[index]; +} + +int defiNet::rectMask(int index) const { + char errMsg[128]; + if (index < 0 || index >= numRects_) { + sprintf (errMsg, "ERROR (DEFPARS-6086): The index number %d specified for the NET RECTANGLE is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numRects_); + defiError(0, 6086, errMsg, defData); + return 0; + } + return rectMasks_[index]; +} + + +void defiNet::addPts(const char* viaName, int o, defiGeometries* geom, + int *needCbk, int colorMask, + const char* routeStatus, + const char* shapeType, + const char* routeStatusShieldName) { + struct defiPoints* p; + int x, y; + int i; + + *needCbk = 0; + if (numPts_ == ptsAllocated_) { + struct defiPoints** pts; + char** newn; + char** newRS; + char** newST; + char** newRSN; + int* orientn; + int* maskn; + + ptsAllocated_ = (ptsAllocated_ == 0) ? + 1000 : ptsAllocated_ * 2; + newn = (char**)malloc(sizeof(char*) *ptsAllocated_); + newRS = (char**)malloc(sizeof(char*) *ptsAllocated_); + newST = (char**)malloc(sizeof(char*) *ptsAllocated_); + newRSN = (char**)malloc(sizeof(char*) *ptsAllocated_); + orientn = (int*)malloc(sizeof(int) *ptsAllocated_); + pts= (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + ptsAllocated_); + maskn = (int*)malloc(sizeof(int) *ptsAllocated_); + for (i = 0; i < numPts_; i++) { + pts[i] = viaPts_[i]; + newn[i] = viaNames_[i]; + newRS[i] = viaRouteStatus_[i]; + newST[i] = viaShapeTypes_[i]; + newRSN[i] = viaRouteStatusShieldNames_[i]; + orientn[i] = viaOrients_[i]; + maskn[i] = viaMasks_[i]; + } + if (viaPts_) + free((char*)(viaPts_)); + if (viaNames_) + free((char*)(viaNames_)); + if (viaOrients_) + free((char*)(viaOrients_)); + if (viaMasks_) + free((char*)(viaMasks_)); + if (viaRouteStatus_) + free((char*)(viaRouteStatus_)); + if (viaShapeTypes_) + free((char*)(viaShapeTypes_)); + if (viaRouteStatusShieldNames_) + free((char*)(viaRouteStatusShieldNames_)); + + viaPts_ = pts; + viaNames_ = newn; + viaOrients_ = orientn; + viaMasks_ = maskn; + viaShapeTypes_= newST; + viaRouteStatus_ = newRS; + viaRouteStatusShieldNames_ = newRSN; + } + viaNames_[numPts_] = strdup(viaName); + viaShapeTypes_[numPts_] = strdup(shapeType); + viaRouteStatus_[numPts_] = strdup(routeStatus); + viaRouteStatusShieldNames_[numPts_] = strdup(routeStatusShieldName); + viaOrients_[numPts_] = o; + viaMasks_[numPts_] = colorMask; + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + viaPts_[numPts_] = p; + numPts_ += 1; + if (numPts_ == 1000) // Want to invoke the partial callback if set + *needCbk = 1; +} + +int defiNet::numViaSpecs() const { + return numPts_; +} + +const char* defiNet::viaName(int index) const { + char errMsg[128]; + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return viaNames_[index]; +} + +const char* defiNet::viaRouteStatus(int index) const { + char errMsg[128]; + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return viaRouteStatus_[index]; +} + +const char* defiNet::viaRouteStatusShieldName(int index) const { + char errMsg[128]; + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return viaRouteStatusShieldNames_[index]; +} + +const char* defiNet::viaShapeType(int index) const { + char errMsg[128]; + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return viaShapeTypes_[index]; +} + +const int defiNet::viaOrient(int index) const { + char errMsg[128]; + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return viaOrients_[index]; +} + +const char* defiNet::viaOrientStr(int index) const { + char errMsg[128]; + + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + return (defiOrientStr(viaOrients_[index])); +} + +const int defiNet::topMaskNum(int index) const { + char errMsg[128]; + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + + return viaMasks_[index] / 100; +} + +const int defiNet::cutMaskNum(int index) const { + char errMsg[128]; + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + + return viaMasks_[index] / 10 % 10; +} + +const int defiNet::bottomMaskNum(int index) const { + char errMsg[128]; + if (index < 0 || index > numPts_) { + sprintf (errMsg, "ERROR (DEFPARS-6085): The index number %d specified for the NET POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numPts_); + defiError(0, 6085, errMsg, defData); + return 0; + } + + return viaMasks_[index] % 10; +} + +struct defiPoints defiNet::getViaPts(int index)const { + return *(viaPts_[index]); +} + +void defiNet::clearVia() { + if (viaNames_) { + struct defiPoints* p; + for (int i = 0; i < numPts_; i++) { + if (viaNames_[i]) { + free((char*)(viaNames_[i])); + } + if (viaRouteStatus_[i]) { + free ((char*)(viaRouteStatus_[i])); + } + if (viaShapeTypes_[i]) { + free ((char*)(viaShapeTypes_[i])); + } + if (viaRouteStatusShieldNames_[i]) { + free ((char*)(viaRouteStatusShieldNames_[i])); + } + p = viaPts_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(viaPts_[i])); + } + if (viaMasks_) { + free((char*)(viaMasks_)); + } + if (viaOrients_) { + free((char*)(viaOrients_)); + } + if (viaNames_) { + free((char*)(viaNames_)); + } + if (viaRouteStatus_) { + free((char*)(viaRouteStatus_)); + } + if (viaShapeTypes_) { + free((char*)(viaShapeTypes_)); + } + if (viaRouteStatusShieldNames_) { + free((char*)(viaRouteStatusShieldNames_)); + } + if (viaPts_) { + free((char*)(viaPts_)); + } + } + + viaMasks_ = 0; + viaOrients_ = 0; + numPts_ = 0; + ptsAllocated_ = 0; + viaPts_ = 0; + viaRouteStatus_ = 0; + viaShapeTypes_ = 0; + viaRouteStatusShieldNames_ = 0; + viaNames_ = 0; +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiNet.hpp b/lefdef/src/def/def/defiNet.hpp new file mode 100644 index 00000000..5c09d1a7 --- /dev/null +++ b/lefdef/src/def/def/defiNet.hpp @@ -0,0 +1,569 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiNet_h +#define defiNet_h + +#include +#include "defiKRDefs.hpp" +#include "defiPath.hpp" +#include "defiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +/* Return codes for defiNet::viaOrient + DEF_ORIENT_N 0 + DEF_ORIENT_W 1 + DEF_ORIENT_S 2 + DEF_ORIENT_E 3 + DEF_ORIENT_FN 4 + DEF_ORIENT_FW 5 + DEF_ORIENT_FS 6 + DEF_ORIENT_FE 7 +*/ + +class defiWire { +public: + defiWire(defrData *data); + ~defiWire(); + + void Init(const char* type, const char* wireShieldName); + void Destroy(); + void clear(); + void addPath(defiPath *p, int reset, int netOsnet, int *needCbk); + + const char* wireType() const; + const char* wireShieldNetName() const; + int numPaths() const; + + defiPath* path(int index); + const defiPath* path(int index) const; + + void bumpPaths(int size); + +protected: + char* type_; + char* wireShieldName_; // It only set from specialnet SHIELD, 5.4 + int numPaths_; + int pathsAllocated_; + defiPath** paths_; + + defrData *defData; +}; + + + +class defiSubnet { +public: + defiSubnet(defrData *data); + void Init(); + + void Destroy(); + ~defiSubnet(); + + void setName(const char* name); + void setNonDefault(const char* name); + void addPin(const char* instance, const char* pin, int syn); + void addMustPin(const char* instance, const char* pin, int syn); + + // WMD -- the following will be removed by the next release + void setType(const char* typ); // Either FIXED COVER ROUTED + void addPath(defiPath* p, int reset, int netOsnet, int *needCbk); + + // NEW: a net can have more than 1 wire + void addWire(const char *typ); + void addWirePath(defiPath *p, int reset, int netOsnet, int *needCbk); + + // Debug printing + void print(FILE* f) const; + + const char* name() const; + int numConnections() const; + const char* instance(int index) const; + const char* pin(int index) const; + int pinIsSynthesized(int index) const; + int pinIsMustJoin(int index) const; + + // WMD -- the following will be removed by the next release + int isFixed() const; + int isRouted() const; + int isCover() const; + + int hasNonDefaultRule() const; + + // WMD -- the following will be removed by the next release + int numPaths() const; + defiPath* path(int index); + const defiPath* path(int index) const; + + const char* nonDefaultRule() const; + + int numWires() const; + defiWire* wire(int index); + const defiWire* wire(int index) const; + + void bumpName(int size); + void bumpPins(int size); + void bumpPaths(int size); + void clear(); + +protected: + char* name_; // name. + int nameSize_; // allocated size of name. + int numPins_; // number of pins used in array. + int pinsAllocated_; // number of pins allocated in array. + char** instances_; // instance names for connections + char** pins_; // pin names for connections + char* synthesized_; // synthesized flags for pins + char* musts_; // must-join flags + + // WMD -- the following will be removed by the next release + char isFixed_; // net type + char isRouted_; + char isCover_; + defiPath** paths_; // paths for this subnet + int numPaths_; // number of paths used + int pathsAllocated_; // allocated size of paths array + + int numWires_; // number of wires defined in the subnet + int wiresAllocated_; // number of wires allocated in the subnet + defiWire** wires_; // this replace the paths + char* nonDefaultRule_; + + defrData *defData; +}; + + + +class defiVpin { +public: + defiVpin(defrData *data); + ~defiVpin(); + + void Init(const char* name); + void Destroy(); + void setLayer(const char* name); + void setBounds(int xl, int yl, int xh, int yh); + void setOrient(int orient); + void setLoc(int x, int y); + void setStatus(char st); + + int xl() const ; + int yl() const ; + int xh() const ; + int yh() const ; + char status() const; /* P-placed, F-fixed, C-cover, ' ' - not set */ + int orient() const ; + const char* orientStr() const ; + int xLoc() const; + int yLoc() const; + const char* name() const; + const char* layer() const; + +protected: + int xl_; + int yl_; + int xh_; + int yh_; + int orient_; /* 0-7 -1 is no orient */ + char status_; /* P-placed F-fixed C-cover ' '- none */ + int xLoc_; + int yLoc_; + char* name_; + char* layer_; + + defrData *defData; +}; + + + +// Pre 5.4 +class defiShield { +public: + defiShield(defrData *data); + ~defiShield(); + + void Init(const char* name); + void Destroy(); + void clear(); + void addPath(defiPath *p, int reset, int netOsnet, int *needCbk); + + const char* shieldName() const; + int numPaths() const; + + defiPath* path(int index); + const defiPath* path(int index) const; + + void bumpPaths(int size); + +protected: + char* name_; + int numPaths_; + int pathsAllocated_; + defiPath** paths_; + + defrData *defData; +}; + + + + +// Struct holds the data for one component. +class defiNet { +public: + defiNet(defrData *data); + void Init(); + + void Destroy(); + ~defiNet(); + + // Routines used by YACC to set the fields in the net. + void setName(const char* name); + void addPin(const char* instance, const char* pin, int syn); + void addMustPin(const char* instance, const char* pin, int syn); + void setWeight(int w); + + // WMD -- the following will be removed by the next release + void setType(const char* typ); // Either FIXED COVER ROUTED + + void addProp(const char* name, const char* value, const char type); + void addNumProp(const char* name, const double d, + const char* value, const char type); + void addSubnet(defiSubnet* subnet); + // NEW: a net can have more than 1 wire + void addWire(const char *typ, const char* wireShieldName); + void addWirePath(defiPath* p, int reset, int netOsnet, int *needCbk); + void addShape(const char *shapeType); // 5.8 + void setSource(const char* typ); + void setFixedbump(); // 5.4.1 + void setFrequency(double frequency); // 5.4.1 + void setOriginal(const char* typ); + void setPattern(const char* typ); + void setCap(double w); + void setUse(const char* typ); + void setNonDefaultRule(const char* typ); + void setStyle(int style); + void addShield(const char* shieldNetName); // pre 5.4 + void addNoShield(const char* shieldNetName); // pre 5.4 + void addShieldNet(const char* shieldNetName); + + void addShieldPath(defiPath* p, int reset, int netOsnet, int *needCbk); + void clear(); + void setWidth(const char* layer, double dist); + void setSpacing(const char* layer, double dist); + void setVoltage(double num); + void setRange(double left, double right); + void setXTalk(int num); + void addVpin(const char* name); + void addVpinLayer(const char* name); + void addVpinLoc(const char* status, int x, int y, int orient); + void addVpinBounds(int xl, int yl, int xh, int yh); + // 5.6 + void addPolygon(const char* layerName, defiGeometries* geom, int *needCbk, + int mask, const char* routeStatus, + const char* shapeType, + const char* shieldNetName); + void addRect(const char* layerName, int xl, int yl, int xh, int yh, + int *needCbk, int mask, const char* routeStatus, + const char* shapeType, + const char* shieldNetName); // 5.6 + void addPts(const char* viaName, int o, defiGeometries* geom, + int *needCbk, int mask, const char* routeStatus, + const char* shapeType, + const char* shieldNetName); //VIA 5.8 + + // For OA to modify the netName, id & pinName + void changeNetName(const char* name); + void changeInstance(const char* name, int index); + void changePin(const char* name, int index); + + // Routines to return the value of net data. + const char* name() const; + int weight() const; + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + int numConnections() const; + const char* instance(int index) const; + const char* pin(int index) const; + int pinIsMustJoin(int index) const; + int pinIsSynthesized(int index) const; + int numSubnets() const; + + defiSubnet* subnet(int index); + const defiSubnet* subnet(int index) const; + + // WMD -- the following will be removed by the next release + int isFixed() const; + int isRouted() const; + int isCover() const; + + /* The following routines are for wiring */ + int numWires() const; + + defiWire* wire(int index); + const defiWire* wire(int index) const; + + /* Routines to get the information about Virtual Pins. */ + int numVpins() const; + + defiVpin* vpin(int index); + const defiVpin* vpin(int index) const; + + int hasProps() const; + int hasWeight() const; + int hasSubnets() const; + int hasSource() const; + int hasFixedbump() const; // 5.4.1 + int hasFrequency() const; // 5.4.1 + int hasPattern() const; + int hasOriginal() const; + int hasCap() const; + int hasUse() const; + int hasStyle() const; + int hasNonDefaultRule() const; + int hasVoltage() const; + int hasSpacingRules() const; + int hasWidthRules() const; + int hasXTalk() const; + + int numSpacingRules() const; + void spacingRule(int index, char** layer, double* dist, double* left, + double* right) const; + int numWidthRules() const; + void widthRule(int index, char** layer, double* dist) const; + double voltage() const; + + int XTalk() const; + const char* source() const; + double frequency() const; + const char* original() const; + const char* pattern() const; + double cap() const; + const char* use() const; + int style() const; + const char* nonDefaultRule() const; + + // WMD -- the following will be removed by the next release + int numPaths() const; + + defiPath* path(int index); + const defiPath* path(int index) const; + + int numShields() const; // pre 5.4 + + defiShield* shield(int index); // pre 5.4 + const defiShield* shield(int index) const ; // pre 5.4 + + int numShieldNets() const; + const char* shieldNet(int index) const; + int numNoShields() const; // pre 5.4 + + defiShield* noShield(int index); // pre 5.4 + const defiShield* noShield(int index) const; // pre 5.4 + + // 5.6 + int numPolygons() const; // 5.6 + const char* polygonName(int index) const; // 5.6 + struct defiPoints getPolygon(int index) const; // 5.6 + int polyMask(int index) const; + const char* polyRouteStatus(int index) const; + const char* polyRouteStatusShieldName(int index) const; + const char* polyShapeType(int index) const; + + + int numRectangles() const; // 5.6 + const char* rectName(int index) const; // 5.6 + int xl(int index)const; // 5.6 + int yl(int index)const; // 5.6 + int xh(int index)const; // 5.6 + int yh(int index)const; // 5.6 + int rectMask(int index)const; + const char* rectRouteStatus(int index) const; + const char* rectRouteStatusShieldName(int index) const; + const char* rectShapeType(int index) const; + + + // 5.8 + int numViaSpecs() const; + struct defiPoints getViaPts(int index) const; + const char* viaName(int index) const; + const int viaOrient(int index) const; + const char* viaOrientStr(int index) const; + const int topMaskNum(int index) const; + const int cutMaskNum(int index) const; + const int bottomMaskNum(int index) const; + const char* viaRouteStatus(int index) const; + const char* viaRouteStatusShieldName(int index) const; + const char* viaShapeType(int index) const; + + // Debug printing + void print(FILE* f) const; + + + void bumpName(int size); + void bumpPins(int size); + void bumpProps(int size); + void bumpSubnets(int size); + void bumpPaths(int size); + void bumpShieldNets(int size); + + // The method freeWire() is added is user select to have a callback + // per wire within a net This is an internal method and is not public + void freeWire(); + void freeShield(); + + // Clear the rectangles & polygons data if partial path callback is set + void clearRectPolyNPath(); + void clearRectPoly(); + void clearVia(); + +protected: + char* name_; // name. + int nameSize_; // allocated size of name. + int numPins_; // number of pins used in array. + int pinsAllocated_; // number of pins allocated in array. + char** instances_; // instance names for connections + char** pins_; // pin names for connections + char* musts_; // must-join flags for pins + char* synthesized_; // synthesized flags for pins + int weight_; // net weight + char hasWeight_; // flag for optional weight + + // WMD -- the following will be removed by the nex release + char isFixed_; // net type + char isRouted_; + char isCover_; + + char hasCap_; // file supplied a capacitance value + char hasFrequency_; // file supplied a frequency value + char hasVoltage_; + int numProps_; // num of props in array + char** propNames_; // Prop names + char** propValues_; // Prop values All in strings! + double* propDValues_; // Prop values in numbers! + char* propTypes_; // Prop types, 'I' - Integer, 'R' - Real, 'S' - String + int propsAllocated_; // allocated size of props array + int numSubnets_; // num of subnets in array + defiSubnet** subnets_; // Prop names + int subnetsAllocated_; // allocated size of props array + double cap_; // cap value + char* source_; + int fixedbump_; // 5.4.1 + double frequency_; // 5.4.1 + char* pattern_; + char* original_; + char* use_; + char* nonDefaultRule_; + int style_; + + // WMD -- the following will be removed by the nex release + defiPath** paths_; // paths for this subnet + int numPaths_; // number of paths used + int pathsAllocated_; // allocated size of paths array + + double voltage_; + + int numWires_; // number of wires defined in the net + int wiresAllocated_; // allocated size of wire paths array + defiWire** wires_; // this replace the paths + + int widthsAllocated_; + int numWidths_; + char** wlayers_; + double* wdist_; + + int spacingAllocated_; + int numSpacing_; + char** slayers_; + double* sdist_; + double* sleft_; + double* sright_; + int xTalk_; + + int numVpins_; + int vpinsAllocated_; + defiVpin** vpins_; + + int numShields_; // number of SHIELD paths used + int shieldsAllocated_; // allocated size of SHIELD paths array + defiShield** shields_; // SHIELD data + int numNoShields_; // number of NOSHIELD paths used + + int numShieldNet_; // number of SHIELDNETS used in array. + int shieldNetsAllocated_; // number of SHIELDNETS allocated in array. + char** shieldNet_; // name of the SHIELDNET + + int numPolys_; // 5.6 + char** polygonNames_; // 5.6 layerName for POLYGON + int polysAllocated_; // 5.6 + struct defiPoints** polygons_; // 5.6 + int* polyMasks_; + char** polyRouteStatus_; + char** polyShapeTypes_; + char** polyRouteStatusShieldNames_; + + int numRects_; // 5.6 + int rectsAllocated_; // 5.6 + char** rectNames_; // 5.6 + int* xl_; + int* yl_; + int* xh_; + int* yh_; + int* rectMasks_; + char** rectRouteStatus_; + char** rectRouteStatusShieldNames_; + char** rectShapeTypes_; + + + struct defiPoints** viaPts_; // 5.8 + char** viaNames_; + int numPts_; + int ptsAllocated_; + int* viaOrients_; + int* viaMasks_; + char** viaRouteStatus_; + char** viaRouteStatusShieldNames_; + char** viaShapeTypes_; + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiNonDefault.cpp b/lefdef/src/def/def/defiNonDefault.cpp new file mode 100644 index 00000000..e6738e08 --- /dev/null +++ b/lefdef/src/def/def/defiNonDefault.cpp @@ -0,0 +1,707 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiNonDefault.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +///////////////////////////////////////// +///////////////////////////////////////// +// +// defiNonDefault +// +///////////////////////////////////////// +///////////////////////////////////////// + +defiNonDefault::defiNonDefault(defrData *data) +: defData(data) { + Init(); +} + +void defiNonDefault::Init() { + name_ = 0; + hardSpacing_ = 0; + numLayers_ = 0; + width_ = 0; + hasDiagWidth_ = 0; + hasSpacing_ = 0; + hasWireExt_ = 0; + numVias_ = 0; + viasAllocated_ = 0; + viaNames_ = 0; + numViaRules_ = 0; + viaRulesAllocated_ = 0; + viaRuleNames_ = 0; + numMinCuts_ = 0; + minCutsAllocated_ = 0; + cutLayerName_ = 0; + numCuts_ = 0; + numProps_ = 0; + propsAllocated_ = 0; + names_ = 0; + values_ = 0; + dvalues_ = 0; + types_ = 0; + layersAllocated_ = 0; + layerName_ = 0; + width_ = 0; + hasDiagWidth_ = 0; + diagWidth_ = 0; + hasSpacing_ = 0; + spacing_ = 0; + hasWireExt_ = 0; + wireExt_ = 0; +} + +defiNonDefault::~defiNonDefault() { + Destroy(); +} + +void defiNonDefault::Destroy() { + clear(); + if (propsAllocated_) { + free((char*)(names_)); + free((char*)(values_)); + free((char*)(dvalues_)); + free((char*)(types_)); + } + if (layersAllocated_) { + free((char*)(layerName_)); + free((char*)(width_)); + free((char*)(hasDiagWidth_)); + free((char*)(diagWidth_)); + free((char*)(hasSpacing_)); + free((char*)(spacing_)); + free((char*)(hasWireExt_)); + free((char*)(wireExt_)); + } + if (viasAllocated_) + free((char*)(viaNames_)); + if (viaRulesAllocated_) + free((char*)(viaRuleNames_)); + if (minCutsAllocated_) { + free((char*)(cutLayerName_)); + free((char*)(numCuts_)); + } +} + +void defiNonDefault::clear() { + int i; + + if (name_) + free(name_); + hardSpacing_ = 0; + for (i = 0; i < numProps_; i++) { + free(names_[i]); + free(values_[i]); + dvalues_[i] = 0; + } + numProps_ = 0; + for (i = 0; i < numLayers_; i++) + free(layerName_[i]); + numLayers_ = 0; + for (i = 0; i < numVias_; i++) + free((char*)(viaNames_[i])); + numVias_ = 0; + for (i = 0; i < numViaRules_; i++) + free((char*)(viaRuleNames_[i])); + numViaRules_ = 0; + for (i = 0; i < numMinCuts_; i++) + free((char*)(cutLayerName_[i])); + numMinCuts_ = 0; +} + +void defiNonDefault::setName(const char* name) { + name_ = (char*)malloc(strlen(name)+1); + strcpy(name_, defData->DEFCASE(name)); +} + +void defiNonDefault::setHardspacing() { + hardSpacing_ = 1; +} + +void defiNonDefault::addLayer(const char* name) { + int len = strlen(name) + 1; + if (numLayers_ == layersAllocated_) { + int i; + char** newl; + double* neww; + double* newd; + double* news; + double* newe; + char* newhd; + char* newhs; + char* newhe; + + if (layersAllocated_ == 0) + layersAllocated_ = 2; + else + layersAllocated_ *= 2; + newl = (char**)malloc(sizeof(char*) * layersAllocated_); + newe = (double*)malloc(sizeof(double) * layersAllocated_); + neww = (double*)malloc(sizeof(double) * layersAllocated_); + newd = (double*)malloc(sizeof(double) * layersAllocated_); + news = (double*)malloc(sizeof(double) * layersAllocated_); + newhe = (char*)malloc(sizeof(char) * layersAllocated_); + newhd = (char*)malloc(sizeof(char) * layersAllocated_); + newhs = (char*)malloc(sizeof(char) * layersAllocated_); + for (i = 0; i < numLayers_; i++) { + newl[i] = layerName_[i]; + neww[i] = width_[i]; + newd[i] = diagWidth_[i]; + news[i] = spacing_[i]; + newe[i] = wireExt_[i]; + newhe[i] = hasWireExt_[i]; + newhd[i] = hasDiagWidth_[i]; + newhs[i] = hasSpacing_[i]; + } + if (layersAllocated_ > 2) { + free((char*)(layerName_)); + free((char*)(width_)); + free((char*)(diagWidth_)); + free((char*)(spacing_)); + free((char*)(wireExt_)); + free((char*)(hasWireExt_)); + free((char*)(hasDiagWidth_)); + free((char*)(hasSpacing_)); + } + layerName_ = newl; + width_ = neww; + diagWidth_ = newd; + spacing_ = news; + wireExt_ = newe; + hasDiagWidth_ = newhd; + hasSpacing_ = newhs; + hasWireExt_ = newhe; + } + layerName_[numLayers_] = (char*)malloc(len); + strcpy(layerName_[numLayers_], defData->DEFCASE(name)); + width_[numLayers_] = 0.0; + diagWidth_[numLayers_] = 0.0; + spacing_[numLayers_] = 0.0; + wireExt_[numLayers_] = 0.0; + hasDiagWidth_[numLayers_] = '\0'; + hasSpacing_[numLayers_] = '\0'; + hasWireExt_[numLayers_] = '\0'; + numLayers_ += 1; +} + +void defiNonDefault::addWidth(double num) { + width_[numLayers_-1] = num; +} + +void defiNonDefault::addDiagWidth(double num) { + diagWidth_[numLayers_-1] = num; + hasDiagWidth_[numLayers_-1] = 1; +} + +void defiNonDefault::addSpacing(double num) { + spacing_[numLayers_-1] = num; + hasSpacing_[numLayers_-1] = 1; +} + +void defiNonDefault::addWireExt(double num) { + wireExt_[numLayers_-1] = num; + hasWireExt_[numLayers_-1] = 1; +} + +void defiNonDefault::addVia(const char* name) { + if (numVias_ == viasAllocated_) { + int i; + char** vn; + + if (viasAllocated_ == 0) + viasAllocated_ = 2; + else + viasAllocated_ *= 2; + vn = (char**)malloc(sizeof(char*)* viasAllocated_); + for (i = 0; i < numVias_; i++) { + vn[i] = viaNames_[i]; + } + free((char*)(viaNames_)); + viaNames_ = vn; + } + viaNames_[numVias_] = (char*)malloc(strlen(name)+1); + strcpy(viaNames_[numVias_], defData->DEFCASE(name)); + numVias_ += 1; +} + +void defiNonDefault::addViaRule(const char* name) { + if (numViaRules_ == viaRulesAllocated_) { + int i; + char** vn; + + if (viaRulesAllocated_ == 0) + viaRulesAllocated_ = 2; + else + viaRulesAllocated_ *= 2; + vn = (char**)malloc(sizeof(char*)* viaRulesAllocated_); + for (i = 0; i < numViaRules_; i++) { + vn[i] = viaRuleNames_[i]; + } + free((char*)(viaRuleNames_)); + viaRuleNames_ = vn; + } + viaRuleNames_[numViaRules_] = (char*)malloc(strlen(name)+1); + strcpy(viaRuleNames_[numViaRules_], defData->DEFCASE(name)); + numViaRules_ += 1; +} + +void defiNonDefault::addMinCuts(const char* name, int numCuts) { + if (numMinCuts_ == minCutsAllocated_) { + int i; + char** cln; + int* nc; + + if (minCutsAllocated_ == 0) + minCutsAllocated_ = 2; + else + minCutsAllocated_ *= 2; + cln = (char**)malloc(sizeof(char*)* minCutsAllocated_); + nc = (int*)malloc(sizeof(int)* minCutsAllocated_); + for (i = 0; i < numMinCuts_; i++) { + cln[i] = cutLayerName_[i]; + nc[i] = numCuts_[i]; + } + if (minCutsAllocated_ > 2) { + free((char*)(cutLayerName_)); + free((char*)(numCuts_)); + } + cutLayerName_ = cln; + numCuts_ = nc; + } + cutLayerName_[numMinCuts_] = (char*)malloc(strlen(name)+1); + strcpy(cutLayerName_[numMinCuts_], defData->DEFCASE(name)); + numCuts_[numMinCuts_] = numCuts; + numMinCuts_ += 1; +} + +const char* defiNonDefault::name() const { + return name_; +} + +int defiNonDefault::hasHardspacing() const { + return hardSpacing_; +} + +int defiNonDefault::numLayers() const { + return numLayers_; +} + +const char* defiNonDefault::layerName(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return layerName_[index]; +} + +// Will be obsoleted in 5.7 +double defiNonDefault::layerWidth(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return width_[index]; +} + +int defiNonDefault::layerWidthVal(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return (int)width_[index]; +} + +int defiNonDefault::hasLayerDiagWidth(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return hasDiagWidth_[index]; +} + +// Will be obsoleted in 5.7 +double defiNonDefault::layerDiagWidth(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return diagWidth_[index]; +} + +int defiNonDefault::layerDiagWidthVal(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return (int)diagWidth_[index]; +} + +int defiNonDefault::hasLayerWireExt(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return hasWireExt_[index]; +} + +int defiNonDefault::hasLayerSpacing(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return hasSpacing_[index]; +} + +// Will be obsoleted in 5.7 +double defiNonDefault::layerWireExt(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return wireExt_[index]; +} + +int defiNonDefault::layerWireExtVal(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return (int)wireExt_[index]; +} + +// Will be obsoleted in 5.7 +double defiNonDefault::layerSpacing(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return spacing_[index]; +} + +int defiNonDefault::layerSpacingVal(int index) const { + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return (int)spacing_[index]; +} + +int defiNonDefault::numVias() const { + return numVias_; +} + +const char* defiNonDefault::viaName(int index) const { + char msg[160]; + if (index < 0 || index >= numVias_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return viaNames_[index]; +} + +int defiNonDefault::numViaRules() const { + return numViaRules_; +} + +const char* defiNonDefault::viaRuleName(int index) const { + char msg[160]; + if (index < 0 || index >= numViaRules_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return viaRuleNames_[index]; +} + +int defiNonDefault::numMinCuts() const { + return numMinCuts_; +} + +const char* defiNonDefault::cutLayerName(int index) const { + char msg[160]; + if (index < 0 || index >= numMinCuts_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return cutLayerName_[index]; +} + +int defiNonDefault::numCuts(int index) const { + char msg[160]; + if (index < 0 || index >= numMinCuts_) { + sprintf (msg, "ERROR (DEFPARS-6090): The index number %d specified for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numLayers_); + defiError(0, 6090, msg, defData); + return 0; + } + return numCuts_[index]; +} + +void defiNonDefault::print(FILE* f) const { + int i; + + fprintf(f, "nondefaultrule %s\n", name()); + + fprintf(f, "%d layers %d vias %d viarules %d mincuts\n", + numLayers(), + numVias(), + numViaRules(), + numMinCuts()); + + for (i = 0; i < numLayers(); i++) { + fprintf(f, " Layer %s\n", layerName(i)); + fprintf(f, " WIDTH %g\n", layerWidth(i)); + if (hasLayerDiagWidth(i)) + fprintf(f, " DIAGWIDTH %g\n", layerDiagWidth(i)); + if (hasLayerSpacing(i)) + fprintf(f, " SPACING %g\n", layerSpacing(i)); + if (hasLayerWireExt(i)) + fprintf(f, " WIREEXT %g\n", + layerWireExt(i)); + } + for (i = 0; i < numVias(); i++) { + fprintf(f, " VIA %s\n", viaName(i)); + } + for (i = 0; i < numViaRules(); i++) { + fprintf(f, " VIARULE %s\n", viaRuleName(i)); + } + for (i = 0; i < numMinCuts(); i++) { + fprintf(f, " MINCUTS %s %d\n", cutLayerName(i), + numCuts(i)); + } +} + +int defiNonDefault::numProps() const { + return numProps_; +} + +void defiNonDefault::addProperty(const char* name, const char* value, + const char type) { + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + int max; + int lim = numProps_; + char** nn; + char** nv; + double* nd; + char* nt; + + if (propsAllocated_ == 0) + max = propsAllocated_ = 2; + else + max = propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*) * max); + nv = (char**)malloc(sizeof(char*) * max); + nd = (double*)malloc(sizeof(double) * max); + nt = (char*)malloc(sizeof(char) * max); + for (i = 0; i < lim; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nd[i] = dvalues_[i]; + nt[i] = types_[i]; + } + free((char*)(names_)); + free((char*)(values_)); + free((char*)(dvalues_)); + free((char*)(types_)); + names_ = nn; + values_ = nv; + dvalues_ = nd; + types_ = nt; + } + names_[numProps_] = (char*)malloc(sizeof(char)*len); + strcpy(names_[numProps_],name); + len = strlen(value) + 1; + values_[numProps_] = (char*)malloc(sizeof(char) * len); + strcpy(values_[numProps_],value); + dvalues_[numProps_] = 0; + types_[numProps_] = type; + numProps_ += 1; +} + +void defiNonDefault::addNumProperty(const char* name, const double d, + const char* value, const char type) { + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + int max; + int lim = numProps_; + char** nn; + char** nv; + double* nd; + char* nt; + + if (propsAllocated_ == 0) + max = propsAllocated_ = 2; + else + max = propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*) * max); + nv = (char**)malloc(sizeof(char*) * max); + nd = (double*)malloc(sizeof(double) * max); + nt = (char*)malloc(sizeof(char) * max); + for (i = 0; i < lim; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nd[i] = dvalues_[i]; + nt[i] = types_[i]; + } + free((char*)(names_)); + free((char*)(values_)); + free((char*)(dvalues_)); + free((char*)(types_)); + names_ = nn; + values_ = nv; + dvalues_ = nd; + types_ = nt; + } + names_[numProps_] = (char*)malloc(sizeof(char) * len); + strcpy(names_[numProps_],name); + len = strlen(value) + 1; + values_[numProps_] = (char*)malloc(sizeof(char) * len); + strcpy(values_[numProps_],value); + dvalues_[numProps_] = d; + types_[numProps_] = type; + numProps_ += 1; +} + +const char* defiNonDefault::propName(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6091): The index number %d specified for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6091, msg, defData); + return 0; + } + return names_[index]; +} + +const char* defiNonDefault::propValue(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6091): The index number %d specified for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6091, msg, defData); + return 0; + } + return values_[index]; +} + +double defiNonDefault::propNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6091): The index number %d specified for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6091, msg, defData); + return 0; + } + return dvalues_[index]; +} + +const char defiNonDefault::propType(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6091): The index number %d specified for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6091, msg, defData); + return 0; + } + return types_[index]; +} + +int defiNonDefault::propIsNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6091): The index number %d specified for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6091, msg, defData); + return 0; + } + return dvalues_[index] ? 1 : 0; +} + +int defiNonDefault::propIsString(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6091): The index number %d specified for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6091, msg, defData); + return 0; + } + return dvalues_[index] ? 0 : 1; +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiNonDefault.hpp b/lefdef/src/def/def/defiNonDefault.hpp new file mode 100644 index 00000000..520780c9 --- /dev/null +++ b/lefdef/src/def/def/defiNonDefault.hpp @@ -0,0 +1,141 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiNonDefault_h +#define defiNonDefault_h + +#include +#include "defiKRDefs.hpp" +#include "defiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defiNonDefault { +public: + defiNonDefault(defrData *data); + void Init(); + + void Destroy(); + ~defiNonDefault(); + + void clear(); + void setName(const char* name); + void setHardspacing(); + void addLayer(const char* name); + void addWidth(double num); + void addDiagWidth(double num); + void addSpacing(double num); + void addWireExt(double num); + void addVia(const char* name); + void addViaRule(const char* name); + void addMinCuts(const char* name, int numCuts); + void addProperty(const char* name, const char* value, const char type); + void addNumProperty(const char* name, const double d, + const char* value, const char type); + void end(); + + const char* name() const; + int hasHardspacing() const; + + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + // A non default rule can have one or more layers. + // The layer information is kept in an array. + int numLayers() const ; + const char* layerName(int index) const ; + double layerWidth(int index) const ; // Will be obsoleted in 5.7 + int layerWidthVal(int index) const ; + int hasLayerDiagWidth(int index) const; + double layerDiagWidth(int index) const; // Will be obsoleted in 5.7 + int layerDiagWidthVal(int index) const; + int hasLayerSpacing(int index) const ; + double layerSpacing(int index) const ; // Will be obsoleted in 5.7 + int layerSpacingVal(int index) const ; + int hasLayerWireExt(int index) const ; + double layerWireExt(int index) const ; // Will be obsoleted in 5.7 + int layerWireExtVal(int index) const ; + int numVias() const ; + const char* viaName(int index) const ; + int numViaRules() const ; + const char* viaRuleName(int index) const ; + int numMinCuts() const; + const char* cutLayerName(int index) const; + int numCuts(int index) const; + + // Debug print + void print(FILE* f) const; + +protected: + char* name_; + char hardSpacing_; + + // Layer information + int numLayers_; + int layersAllocated_; + char** layerName_; + double* width_; + char* hasDiagWidth_; + double* diagWidth_; + char* hasSpacing_; + double* spacing_; + char* hasWireExt_; + double* wireExt_; + + int numVias_; + int viasAllocated_; + char** viaNames_; + int numViaRules_; + int viaRulesAllocated_; + char** viaRuleNames_; + int numMinCuts_; + int minCutsAllocated_; + char** cutLayerName_; + int* numCuts_; + + int numProps_; + int propsAllocated_; + char** names_; + char** values_; + double* dvalues_; + char* types_; + + defrData *defData; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiPartition.cpp b/lefdef/src/def/def/defiPartition.cpp new file mode 100644 index 00000000..ce1b1afc --- /dev/null +++ b/lefdef/src/def/def/defiPartition.cpp @@ -0,0 +1,551 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiPartition.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiPartition +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiPartition::defiPartition(defrData *data) +: defData(data) +{ + Init(); +} + + +void defiPartition::Init() { + name_ = 0; + nameLength_ = 0; + pin_ = 0; + pinLength_ = 0; + inst_ = 0; + instLength_ = 0; + + pinsAllocated_ = 0; + numPins_ = 0; + pins_ = 0; + + clear(); +} + + +defiPartition::~defiPartition() { + Destroy(); +} + + +void defiPartition::Destroy() { + + if (name_) free(name_); + name_ = 0; + nameLength_ = 0; + if (pin_) free(pin_); + pin_ = 0; + pinLength_ = 0; + if (inst_) free(inst_); + inst_ = 0; + instLength_ = 0; + + clear(); + + if (pins_) free((char*)(pins_)); + pins_ = 0; + pinsAllocated_ = 0; +} + + +void defiPartition::clear() { + int i; + + setup_ = ' '; + hold_ = ' '; + direction_ = ' '; + type_ = ' '; + if (name_) *(name_) = '\0'; + if (pin_) *(pin_) = '\0'; + if (inst_) *(inst_) = '\0'; + hasMin_ = 0; + hasMax_ = 0; + + if (numPins_) { + for (i = 0; i < numPins_; i++) { + free(pins_[i]); + pins_[i] = 0; + } + numPins_ = 0; + } + hasRiseMin_ = 0; + hasFallMin_ = 0; + hasRiseMax_ = 0; + hasFallMax_ = 0; + hasRiseMinRange_ = 0; + hasFallMinRange_ = 0; + hasRiseMaxRange_ = 0; + hasFallMaxRange_ = 0; +} + + +void defiPartition::setName(const char* name) { + int len = strlen(name) + 1; + + clear(); + + if (len > nameLength_) { + if (name_) free(name_); + nameLength_ = len; + name_ = (char*)malloc(len); + } + strcpy(name_, defData->DEFCASE(name)); + +} + + +void defiPartition::print(FILE* f) const { + int i; + + fprintf(f, "Partition '%s' %c\n", + name(), direction()); + fprintf(f, " inst %s pin %s type %s\n", + instName(), pinName(), + itemType()); + + for (i = 0; i < numPins(); i++) + fprintf(f, " %s\n", pin(i)); + + if (isSetupRise()) + fprintf(f, " SETUP RISE\n"); + + if (isSetupFall()) + fprintf(f, " SETUP FALL\n"); + + if (isHoldRise()) + fprintf(f, " HOLD RISE\n"); + + if (isHoldFall()) + fprintf(f, " HOLD FALL\n"); + + if (hasMin()) + fprintf(f, " MIN %g\n", partitionMin()); + + if (hasMax()) + fprintf(f, " MAX %g\n", partitionMax()); + + if (hasRiseMin()) + fprintf(f, " RISE MIN %g\n", riseMin()); + + if (hasFallMin()) + fprintf(f, " FALL MIN %g\n", fallMin()); + + if (hasRiseMax()) + fprintf(f, " RISE MAX %g\n", riseMax()); + + if (hasFallMax()) + fprintf(f, " FALL MAX %g\n", fallMax()); + + if (hasFallMinRange()) + fprintf(f, " FALL MIN %g %g\n", fallMinLeft(), + fallMinRight()); + + if (hasRiseMinRange()) + fprintf(f, " RISE MIN %g %g\n", riseMinLeft(), + riseMinRight()); + + if (hasFallMaxRange()) + fprintf(f, " FALL MAX %g %g\n", fallMaxLeft(), + fallMaxRight()); + + if (hasRiseMaxRange()) + fprintf(f, " RISE MAX %g %g\n", riseMaxLeft(), + riseMaxRight()); +} + + +const char* defiPartition::name() const { + return name_; +} + + +void defiPartition::setFromIOPin(const char* pin) { + set('F', 'I', "", pin); +} + + +char defiPartition::direction() const { + return direction_; +} + + +const char* defiPartition::instName() const { + return inst_; +} + + +const char* defiPartition::pinName() const { + return pin_; +} + + +static char* ad(const char* in) { + return (char*)in; +} + + +const char* defiPartition::itemType() const { + char* c; + if (type_ == 'L') c = ad("CLOCK"); + else if (type_ == 'I') c = ad("IO"); + else if (type_ == 'C') c = ad("COMP"); + else c = ad("BOGUS"); + return c; +} + + +const char* defiPartition::pin(int index) const { + return pins_[index]; +} + + +int defiPartition::numPins() const { + return numPins_; +} + + +int defiPartition::isSetupRise() const { + return setup_ == 'R' ? 1 : 0 ; +} + + +int defiPartition::isSetupFall() const { + return setup_ == 'F' ? 1 : 0 ; +} + + +int defiPartition::isHoldRise() const { + return hold_ == 'R' ? 1 : 0 ; +} + + +int defiPartition::isHoldFall() const { + return hold_ == 'F' ? 1 : 0 ; +} + + +void defiPartition::addTurnOff(const char* setup, const char* hold) { + if (*setup == ' ') { + setup_ = *setup; + } else if (*setup == 'R') { + setup_ = *setup; + } else if (*setup == 'F') { + setup_ = *setup; + } else { + defiError(0, 6100, "ERROR (DEFPARS-6100): The value spefified for PARTITION SETUP is invalid. The valid value for SETUP is 'R' or 'F'. Specify a valid value for SETUP and then try again.", defData); + } + + if (*hold == ' ') { + hold_ = *hold; + } else if (*hold == 'R') { + hold_ = *hold; + } else if (*hold == 'F') { + hold_ = *hold; + } else { + defiError(0, 6101, "ERROR (DEFPARS-6101): The value spefified for PARTITION HOLD is invalid. The valid value for HOLD is 'R' or 'F'. Specify a valid value for HOLD and then try again.", defData); + } + +} + + +void defiPartition::setFromClockPin(const char* inst, const char* pin) { + set('F', 'L', inst, pin); +} + + +void defiPartition::setToClockPin(const char* inst, const char* pin) { + set('T', 'L', inst, pin); +} + + +void defiPartition::set(char dir, char typ, const char* inst, const char* pin) { + int len = strlen(pin) + 1; + direction_ = dir; + type_ = typ; + + if (pinLength_ <= len) { + if (pin_) free(pin_); + pin_ = (char*)malloc(len); + pinLength_ = len; + } + + strcpy(pin_, defData->DEFCASE(pin)); + + len = strlen(inst) + 1; + if (instLength_ <= len) { + if (inst_) free(inst_); + inst_ = (char*)malloc(len); + instLength_ = len; + } + + strcpy(inst_, defData->DEFCASE(inst)); +} + + +void defiPartition::setMin(double min, double max) { + min_ = min; + max_ = max; + hasMin_ = 1; +} + + +void defiPartition::setFromCompPin(const char* inst, const char* pin) { + set('F', 'C', inst, pin); +} + + +void defiPartition::setMax(double min, double max) { + min_ = min; + max_ = max; + hasMax_ = 1; +} + + +void defiPartition::setToIOPin(const char* pin) { + set('T', 'I', "", pin); +} + + +void defiPartition::setToCompPin(const char* inst, const char* pin) { + set('T', 'C', inst, pin); +} + + +void defiPartition::addPin(const char* name) { + int len; + int i; + char** newp; + + if (numPins_ >= pinsAllocated_) { + pinsAllocated_ = pinsAllocated_ ? 2 * pinsAllocated_ : 8; + newp = (char**) malloc(sizeof(char*) * pinsAllocated_); + for (i = 0; i < numPins_; i++) + newp[i] = pins_[i]; + if (pins_) free((char*)(pins_)); + pins_ = newp; + } + + len = strlen(name) + 1; + pins_[numPins_] = (char*)malloc(len); + strcpy(pins_[numPins_], defData->DEFCASE(name)); + numPins_ += 1; +} + + +int defiPartition::hasMin() const { + return(int)(hasMin_); +} + + +int defiPartition::hasMax() const { + return(int)(hasMax_); +} + + +double defiPartition::partitionMin() const { + return(min_); +} + + +double defiPartition::partitionMax() const { + return(max_); +} + +int defiPartition::hasRiseMin() const { + return (int)(hasRiseMin_); +} + + +int defiPartition::hasFallMin() const { + return (int)(hasFallMin_); +} + + +int defiPartition::hasRiseMax() const { + return (int)(hasRiseMax_); +} + + +int defiPartition::hasFallMax() const { + return (int)(hasFallMax_); +} + + +int defiPartition::hasRiseMinRange() const { + return (int)(hasRiseMinRange_); +} + + +int defiPartition::hasFallMinRange() const { + return (int)(hasFallMinRange_); +} + + +int defiPartition::hasRiseMaxRange() const { + return (int)(hasRiseMaxRange_); +} + + +int defiPartition::hasFallMaxRange() const { + return (int)(hasFallMaxRange_); +} + + +double defiPartition::riseMin() const { + return riseMin_; +} + + +double defiPartition::fallMin() const { + return fallMin_; +} + + +double defiPartition::riseMax() const { + return riseMax_; +} + + +double defiPartition::fallMax() const { + return fallMax_; +} + + +double defiPartition::riseMinLeft() const { + return riseMinLeft_; +} + + +double defiPartition::fallMinLeft() const { + return fallMinLeft_; +} + + +double defiPartition::riseMaxLeft() const { + return riseMaxLeft_; +} + + +double defiPartition::fallMaxLeft() const { + return fallMaxLeft_; +} + + +double defiPartition::riseMinRight() const { + return riseMinRight_; +} + + +double defiPartition::fallMinRight() const { + return fallMinRight_; +} + + +double defiPartition::riseMaxRight() const { + return riseMaxRight_; +} + + +double defiPartition::fallMaxRight() const { + return fallMaxRight_; +} + + +void defiPartition::addRiseMin(double d) { + hasRiseMin_ = 1; + riseMin_ = d; +} + + +void defiPartition::addRiseMax(double d) { + hasRiseMax_ = 1; + riseMax_ = d; +} + + +void defiPartition::addFallMin(double d) { + hasFallMin_ = 1; + fallMin_ = d; +} + + +void defiPartition::addFallMax(double d) { + hasFallMax_ = 1; + fallMax_ = d; +} + + +void defiPartition::addRiseMinRange(double l, double h) { + hasRiseMinRange_ = 1; + riseMinLeft_ = l; + riseMinRight_ = h; +} + + +void defiPartition::addRiseMaxRange(double l, double h) { + hasRiseMaxRange_ = 1; + riseMaxLeft_ = l; + riseMaxRight_ = h; +} + + +void defiPartition::addFallMinRange(double l, double h) { + hasFallMinRange_ = 1; + fallMinLeft_ = l; + fallMinRight_ = h; +} + + +void defiPartition::addFallMaxRange(double l, double h) { + hasFallMaxRange_ = 1; + fallMaxLeft_ = l; + fallMaxRight_ = h; +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiPartition.hpp b/lefdef/src/def/def/defiPartition.hpp new file mode 100644 index 00000000..cab976e6 --- /dev/null +++ b/lefdef/src/def/def/defiPartition.hpp @@ -0,0 +1,163 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiPartition_h +#define defiPartition_h + +#include +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiPartition { +public: + defiPartition(defrData *data); + void Init(); + + void Destroy(); + ~defiPartition(); + + void clear(); + + void setName(const char* name); + void addTurnOff(const char* setup, const char* hold); + void setFromClockPin(const char* inst, const char* pin); + void setFromCompPin(const char* inst, const char* pin); + void setFromIOPin(const char* inst); + void setToClockPin(const char* inst, const char* pin); + void setToCompPin(const char* inst, const char* pin); + void set(char dir, char typ, const char* inst, const char* pin); + void setToIOPin(const char* inst); + void setMin(double min, double max); + void setMax(double min, double max); + void addPin(const char* name); + void addRiseMin(double d); + void addRiseMax(double d); + void addFallMin(double d); + void addFallMax(double d); + void addRiseMinRange(double l, double h); + void addRiseMaxRange(double l, double h); + void addFallMinRange(double l, double h); + void addFallMaxRange(double l, double h); + + const char* name() const; + char direction() const; + const char* itemType() const; // "CLOCK" or "IO" or "COMP" + const char* pinName() const; + const char* instName() const; + + int numPins() const; + const char* pin(int index) const; + + int isSetupRise() const; + int isSetupFall() const; + int isHoldRise() const; + int isHoldFall() const; + int hasMin() const; + int hasMax() const; + int hasRiseMin() const; + int hasFallMin() const; + int hasRiseMax() const; + int hasFallMax() const; + int hasRiseMinRange() const; + int hasFallMinRange() const; + int hasRiseMaxRange() const; + int hasFallMaxRange() const; + + double partitionMin() const; + double partitionMax() const; + + double riseMin() const; + double fallMin() const; + double riseMax() const; + double fallMax() const; + + double riseMinLeft() const; + double fallMinLeft() const; + double riseMaxLeft() const; + double fallMaxLeft() const; + double riseMinRight() const; + double fallMinRight() const; + double riseMaxRight() const; + double fallMaxRight() const; + + // debug print + void print(FILE* f) const; + +protected: + char* name_; + int nameLength_; + char setup_; + char hold_; + char hasMin_; + char hasMax_; + char direction_; // 'F' or 'T' + char type_; // 'L'-clock 'I'-IO 'C'-comp + char* inst_; + int instLength_; + char* pin_; + int pinLength_; + double min_, max_; + + int numPins_; + int pinsAllocated_; + char** pins_; + + char hasRiseMin_; + char hasFallMin_; + char hasRiseMax_; + char hasFallMax_; + char hasRiseMinRange_; + char hasFallMinRange_; + char hasRiseMaxRange_; + char hasFallMaxRange_; + double riseMin_; + double fallMin_; + double riseMax_; + double fallMax_; + double riseMinLeft_; + double fallMinLeft_; + double riseMaxLeft_; + double fallMaxLeft_; + double riseMinRight_; + double fallMinRight_; + double riseMaxRight_; + double fallMaxRight_; + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiPath.cpp b/lefdef/src/def/def/defiPath.cpp new file mode 100644 index 00000000..586c40e7 --- /dev/null +++ b/lefdef/src/def/def/defiPath.cpp @@ -0,0 +1,563 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "defiPath.hpp" +#include "defiDebug.hpp" +#include "lex.h" +#include "defiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +defiPath::defiPath(defrData *data) +: defData(data), +keys_(NULL), +data_(NULL), +pointer_(NULL), +numUsed_(0), +numAllocated_(0), +numX_(0), +numY_(0), +stepX_(0), +stepY_(0), +deltaX_(0), +deltaY_(0), +mask_(0) +{} + + +defiPath::defiPath(defiPath *defiPathRef) +{ + *this = *defiPathRef; + + defiPathRef->pointer_ = NULL; + defiPathRef->keys_ = NULL; + defiPathRef->data_ = NULL; +} + + +defiPath::~defiPath() { + Destroy(); +} + + +void defiPath::Init() { + // Should do nothing in constructor case. + Destroy(); + + numUsed_ = 0; + numAllocated_ = 0; + pointer_ = new int; + *pointer_ = -1; + + numX_ = 0; + numY_ = 0; + stepX_ = 0; + stepY_ = 0; + deltaX_ = 0; + deltaY_ = 0; + mask_ = 0; + + bumpSize(16); +} + + +void defiPath::clear() { + int i; + + for (i = 0; i < numUsed_; i++) { + free(data_[i]); + data_[i] = NULL; + } + + numUsed_ = 0; + + delete pointer_; + pointer_ = NULL; +} + + +void defiPath::Destroy() { + + if (keys_) + free((char*)(keys_)); + keys_ = NULL; + if (data_) { + clear(); + free((char*)(data_)); + data_ = NULL; + } +} + + +void defiPath::reverseOrder() { + int one = 0; + int two = numUsed_ - 1; + int t; + void *tptr; + while (one < two) { + t = keys_[one]; + keys_[one] = keys_[two]; + keys_[two] = t; + tptr = data_[one]; + data_[one] = data_[two]; + data_[two] = tptr; + one++; + two--; + } +} + + +void defiPath::initTraverse() const { + *(pointer_) = -1; +} + + +void defiPath::initTraverseBackwards() const { + *(pointer_) = numUsed_; +} + + +int +defiPath::currentType() const +{ + if (*(pointer_) >= 0 && *(pointer_) < numUsed_) { + switch (keys_[*(pointer_)]) { + case 'L': return DEFIPATH_LAYER; + case 'V': return DEFIPATH_VIA; + case 'W': return DEFIPATH_WIDTH; + case 'P': return DEFIPATH_POINT; + case 'F': return DEFIPATH_FLUSHPOINT; + case 'T': return DEFIPATH_TAPER; + case 'R': return DEFIPATH_TAPERRULE; + case 'S': return DEFIPATH_SHAPE; + case 'Y': return DEFIPATH_STYLE; + case 'O': return DEFIPATH_VIAROTATION; + case 'E': return DEFIPATH_RECT; + case 'D': return DEFIPATH_VIADATA; + case 'U': return DEFIPATH_VIRTUALPOINT; + case 'M': return DEFIPATH_MASK; + case 'C': return DEFIPATH_VIAMASK; + default : return DEFIPATH_DONE; + } + } + + return DEFIPATH_DONE; +} + +int defiPath::next() const +{ + (*(pointer_))++; + + return currentType(); +} + + +int defiPath::prev() const{ + (*(pointer_))--; + + return currentType(); +} + +int defiPath::getTaper() const { + if (keys_[*(pointer_)] != 'T') return 0; + return 1; +} + +const char* defiPath::getTaperRule() const { + if (keys_[*(pointer_)] != 'R') return 0; + return (char*)(data_[*(pointer_)]); +} + +const char* defiPath::getLayer() const { + if (keys_[*(pointer_)] != 'L') return 0; + return (char*)(data_[*(pointer_)]); +} + + +const char* defiPath::getVia() const { + if (keys_[*(pointer_)] != 'V') return 0; + return (char*)(data_[*(pointer_)]); +} + + +const char* defiPath::getShape() const { + if (keys_[*(pointer_)] != 'S') return 0; + return (char*)(data_[*(pointer_)]); +} + + +int defiPath::getStyle() const { + int *style; + if (keys_[*(pointer_)] != 'Y') return 0; + style = (int*)(data_[*(pointer_)]); + return *style; +} + + +int defiPath::getWidth() const { + int *wptr; + if (keys_[*(pointer_)] != 'W') return 0; + wptr = (int*)(data_[*(pointer_)]); + return *wptr; +} + +int defiPath::getViaRotation() const { + int *wptr; + if (keys_[*(pointer_)] != 'O') return 0; + wptr = (int*)(data_[*(pointer_)]); + return *wptr; +} + +int defiPath::getMask() const { + int *wptr; + if (keys_[*(pointer_)] != 'M') return 0; + wptr = (int*)(data_[*(pointer_)]); + return *wptr; +} + +int defiPath::getViaBottomMask() const { + int *wptr; + if (keys_[*(pointer_)] != 'C') return 0; + wptr = (int*)(data_[*(pointer_)]); + + int viaMask = *wptr; + + return viaMask % 10; +} + +int defiPath::getViaCutMask() const { + int *wptr; + if (keys_[*(pointer_)] != 'C') return 0; + wptr = (int*)(data_[*(pointer_)]); + + int viaMask = *wptr; + + return viaMask / 10 % 10; +} + +int defiPath::getViaTopMask() const { + int *wptr; + if (keys_[*(pointer_)] != 'C') return 0; + wptr = (int*)(data_[*(pointer_)]); + + int viaMask = *wptr; + + return viaMask / 100; +} + +const char* defiPath::getViaRotationStr() const { + int *wptr; + if (keys_[*(pointer_)] != 'O') return 0; + wptr = (int*)(data_[*(pointer_)]); + return defiOrientStr(*wptr); +} + +void defiPath::getViaRect(int* deltaX1, int* deltaY1, int* deltaX2, int* deltaY2) const { + if (keys_[*(pointer_)] != 'E') return ; + *deltaX1 = ((struct defiViaRect*)(data_[*(pointer_)]))->deltaX1; + *deltaY1 = ((struct defiViaRect*)(data_[*(pointer_)]))->deltaY1; + *deltaX2 = ((struct defiViaRect*)(data_[*(pointer_)]))->deltaX2; + *deltaY2 = ((struct defiViaRect*)(data_[*(pointer_)]))->deltaY2; +} + +void defiPath::getViaData(int* numX, int* numY, int* stepX, int* stepY) const { + if (keys_[*(pointer_)] != 'D') return ; + *numX = ((struct defiViaData*)(data_[*(pointer_)]))->numX; + *numY = ((struct defiViaData*)(data_[*(pointer_)]))->numY; + *stepX = ((struct defiViaData*)(data_[*(pointer_)]))->stepX; + *stepY = ((struct defiViaData*)(data_[*(pointer_)]))->stepY; +} + + +void defiPath::getFlushPoint(int* x, int* y, int* ext) const { + if (keys_[*(pointer_)] != 'F') return ; + *x = ((struct defiPnt*)(data_[*(pointer_)]))->x; + *y = ((struct defiPnt*)(data_[*(pointer_)]))->y; + *ext = ((struct defiPnt*)(data_[*(pointer_)]))->ext; +} + +void defiPath::getVirtualPoint(int* x, int* y) const { + if (keys_[*(pointer_)] != 'U') return ; + *x = ((struct defiPnt*)(data_[*(pointer_)]))->x; + *y = ((struct defiPnt*)(data_[*(pointer_)]))->y; +} + +void defiPath::getPoint(int* x, int* y) const { + if (keys_[*(pointer_)] != 'P') return ; + *x = ((struct defiPnt*)(data_[*(pointer_)]))->x; + *y = ((struct defiPnt*)(data_[*(pointer_)]))->y; +} + + +void defiPath::addWidth(int w) { + int * wValue; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + wValue = (int*)malloc(sizeof(int)); + *wValue = w; + keys_[numUsed_] = 'W'; + data_[numUsed_] = wValue; + (numUsed_)++; +} + + +void defiPath::addVia(const char* l) { + int len = strlen(l)+1; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'V'; + data_[numUsed_] = malloc(len); + strcpy((char*)(data_[numUsed_]), defData->DEFCASE(l)); + (numUsed_)++; +} + + +void defiPath::addViaRotation(int o) { + int * orient; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + orient = (int*)malloc(sizeof(int)); + *orient = o; + keys_[numUsed_] = 'O'; + data_[numUsed_] = orient; + (numUsed_)++; +} + + +void defiPath::addViaRect(int deltaX1, int deltaY1, int deltaX2, int deltaY2) { + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'E'; // RECT + data_[numUsed_] = malloc(sizeof(struct defiViaRect)); + ((struct defiViaRect*)(data_[numUsed_]))->deltaX1 = deltaX1; + ((struct defiViaRect*)(data_[numUsed_]))->deltaY1 = deltaY1; + ((struct defiViaRect*)(data_[numUsed_]))->deltaX2 = deltaX2; + ((struct defiViaRect*)(data_[numUsed_]))->deltaY2 = deltaY2; + (numUsed_)++; +} + + +void defiPath::addViaData(int numX, int numY, int stepX, int stepY) { + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'D'; + data_[numUsed_] = malloc(sizeof(struct defiViaData)); + ((struct defiViaData*)(data_[numUsed_]))->numX = numX; + ((struct defiViaData*)(data_[numUsed_]))->numY = numY; + ((struct defiViaData*)(data_[numUsed_]))->stepX = stepX; + ((struct defiViaData*)(data_[numUsed_]))->stepY = stepY; + (numUsed_)++; +} + + +void defiPath::addLayer(const char* l) { + int len = strlen(l)+1; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'L' ; + data_[numUsed_] = malloc(len); + strcpy((char*)(data_[numUsed_]), defData->DEFCASE(l)); + (numUsed_)++; +} + + +void defiPath::addTaperRule(const char* l) { + int len = strlen(l)+1; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'R' ; + data_[numUsed_] = malloc(len); + strcpy((char*)(data_[numUsed_]), defData->DEFCASE(l)); + (numUsed_)++; +} + + +void defiPath::addPoint(int x, int y) { + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'P'; + data_[numUsed_] = malloc(sizeof(struct defiPnt)); + ((struct defiPnt*)(data_[numUsed_])) -> x = x; + ((struct defiPnt*)(data_[numUsed_])) -> y = y; + (numUsed_)++; +} + +void defiPath::addMask(int colorMask) { + int* mask; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + mask = (int*)malloc(sizeof(int)); + *mask = colorMask; + keys_[numUsed_] = 'M'; //Mask for points + data_[numUsed_] = mask; + (numUsed_)++; +} + +void defiPath::addViaMask(int colorMask) { + int* mask; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + mask = (int*)malloc(sizeof(int)); + *mask = colorMask; + keys_[numUsed_] = 'C'; //viaMask + data_[numUsed_] = mask; + (numUsed_)++; +} + +void defiPath::addFlushPoint(int x, int y, int ext) { + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'F'; + data_[numUsed_] = malloc(sizeof(struct defiPnt)); + ((struct defiPnt*)(data_[numUsed_])) -> x = x; + ((struct defiPnt*)(data_[numUsed_])) -> y = y; + ((struct defiPnt*)(data_[numUsed_])) -> ext = ext; + (numUsed_)++; +} + +void defiPath::addVirtualPoint(int x, int y) { + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'U'; + data_[numUsed_] = malloc(sizeof(struct defiPnt)); + ((struct defiPnt*)(data_[numUsed_])) -> x = x; + ((struct defiPnt*)(data_[numUsed_])) -> y = y; + (numUsed_)++; +} + +void defiPath::setTaper() { + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'T'; + data_[numUsed_] = 0; + (numUsed_)++; +} + + +void defiPath::addShape(const char* l) { + int len = strlen(l)+1; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + keys_[numUsed_] = 'S' ; + data_[numUsed_] = malloc(len); + strcpy((char*)(data_[numUsed_]), defData->DEFCASE(l)); + (numUsed_)++; +} + +void defiPath::addStyle(int s) { + int *style; + if (numUsed_ == numAllocated_) + bumpSize(numAllocated_ * 2); + style = (int*)malloc(sizeof(int)); + *style = s; + keys_[numUsed_] = 'Y' ; + data_[numUsed_] = style; + (numUsed_)++; +} + + +void defiPath::print(FILE* fout) const { + int i; + int *wptr; + if (fout == 0) fout = stdout; + fprintf(fout, "Path:\n"); + for (i = 0; i < numUsed_; i++) { + if (keys_[i] == 'L') { + fprintf(fout, " layer %s\n", (char*)(data_[i])); + } else if (keys_[i] == 'R') { + fprintf(fout, " taperrule %s\n", data_[i] ? (char*)(data_[i]) : "" ); + } else if (keys_[i] == 'T') { + fprintf(fout, " taper %s\n", data_[i] ? (char*)(data_[i]) : "" ); + } else if (keys_[i] == 'S') { + fprintf(fout, " shape %s\n", data_[i] ? (char*)(data_[i]) : "" ); + } else if (keys_[i] == 'V') { + fprintf(fout, " via %s\n", data_[i] ? (char*)(data_[i]) : "" ); + } else if (keys_[i] == 'O') { + fprintf(fout, " via rotation %s\n", + data_[i] ? (char*)(data_[i]) : "" ); + } else if (keys_[i] == 'M') { + fprintf(fout, " mask %d\n", getMask() ); + } else if (keys_[i] == 'E') { + fprintf(fout, " rect %d,%d,%d,%d\n", + ((struct defiViaRect*)(data_[i]))->deltaX1, + ((struct defiViaRect*)(data_[i]))->deltaY1, + ((struct defiViaRect*)(data_[i]))->deltaX2, + ((struct defiViaRect*)(data_[i]))->deltaY2); + } else if (keys_[i] == 'W') { + wptr = (int*)(data_[i]); + fprintf(fout, " width %d\n", *wptr); + } else if (keys_[i] == 'P') { + fprintf(fout, " point %d,%d\n", + ((struct defiPnt*)(data_[i]))->x, + ((struct defiPnt*)(data_[i]))->y); + } else if (keys_[i] == 'F') { + fprintf(fout, " flushpoint %d,%d,%d\n", + ((struct defiPnt*)(data_[i]))->x, + ((struct defiPnt*)(data_[i]))->y, + ((struct defiPnt*)(data_[i]))->ext); + } else if (keys_[i] == 'U') { + fprintf(fout, " virtualpoint %d,%d\n", + ((struct defiPnt*)(data_[i]))->x, + ((struct defiPnt*)(data_[i]))->y); + } else if (keys_[i] == 'D') { + fprintf(fout, " DO %d BY %d STEP %d %d\n", + ((struct defiViaData*)(data_[i]))->numX, + ((struct defiViaData*)(data_[i]))->numY, + ((struct defiViaData*)(data_[i]))->stepX, + ((struct defiViaData*)(data_[i]))->stepY); + } else { + fprintf(fout, " ERROR\n"); + } + } +} + + +void defiPath::bumpSize(int size) { + int i; + int* newKeys = (int*)malloc(size * sizeof(int*)); + void** newData = (void**)malloc(size * sizeof(void*)); + + for (i = 0; i < numUsed_; i++) { + newKeys[i] = keys_[i]; + newData[i] = data_[i]; + } + + if (keys_) free((char*)(keys_)); + if (data_) free((char*)(data_)); + + keys_ = newKeys; + data_ = newData; + numAllocated_ = size; +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiPath.hpp b/lefdef/src/def/def/defiPath.hpp new file mode 100644 index 00000000..73b44253 --- /dev/null +++ b/lefdef/src/def/def/defiPath.hpp @@ -0,0 +1,170 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013-2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiPath_h +#define defiPath_h + +#include +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// TX_DIR:TRANSLATION ON + +class defrData; + +struct defiPnt { + int x; + int y; + int ext; +}; + +// 5.4.1 1-D & 2-D Arrays of Vias in SPECIALNET Section +struct defiViaData { + int numX; + int numY; + int stepX; + int stepY; +}; + +struct defiViaRect { + int deltaX1; + int deltaY1; + int deltaX2; + int deltaY2; +}; + +// value returned by the next() routine. +enum defiPath_e { + DEFIPATH_DONE = 0, + DEFIPATH_LAYER, + DEFIPATH_VIA, + DEFIPATH_VIAROTATION, + DEFIPATH_WIDTH, + DEFIPATH_POINT, + DEFIPATH_FLUSHPOINT, + DEFIPATH_TAPER, + DEFIPATH_SHAPE, + DEFIPATH_STYLE, + DEFIPATH_TAPERRULE, + DEFIPATH_VIADATA, + DEFIPATH_RECT, + DEFIPATH_VIRTUALPOINT, + DEFIPATH_MASK, + DEFIPATH_VIAMASK + } ; + + +class defiPath { +public: + defiPath(defrData *data); + // This is 'data ownership transfer' constructor. + defiPath(defiPath *defiPathRef); + + void Init(); + + void Destroy(); + ~defiPath(); + + void clear(); + void reverseOrder(); + + // To traverse the path and get the parts. + void initTraverse() const; // Initialize the traverse. + void initTraverseBackwards() const; // Initialize the traverse in reverse. + int next() const; // Get the next element. + int prev() const; // Get the next element in reverse. + const char* getLayer() const;// Get the layer. + const char* getTaperRule() const;// Get the rule. + const char* getVia() const; // Get the via. + const char* getShape() const;// Get the shape. + int getTaper() const;// Get the taper. + int getStyle() const;// Get the style. + int getViaRotation() const; // Get the via rotation. + void getViaRect(int* deltaX1, int* deltaY1, int* deltaX2, int* deltaY2) const; + const char* getViaRotationStr() const; // Return via rotation in string format + void getViaData(int* numX, int* numY, int* stepX, int* stepY) const; // 5.4.1 + int getWidth() const; // Get the width. + void getPoint(int* x, int* y) const;// Get the point. + void getFlushPoint(int* x, int* y, int* ext) const;// Get the point. + void getVirtualPoint(int* x, int* y) const; + int getMask() const; + int getViaTopMask() const; + int getViaCutMask() const; + int getViaBottomMask() const; + int getRectMask() const; + + + // These routines are called by the parser to fill the path. + void addWidth(int w); + void addPoint(int x, int y); + void addFlushPoint(int x, int y, int ext); + void addVirtualPoint(int x, int y); + void addLayer(const char* layer); + void addVia(const char* name); + void addViaRotation(int orient); + void addViaRect(int deltaX1, int deltaY1, int deltaX2, int deltaY2); + void addMask(int colorMask); + void addViaMask(int colorMask); + void addViaData(int numX, int numY, int stepX, int stepY); // 5.4.1 + void setTaper(); + void addTaperRule(const char* rule); + void addShape(const char* shape); + void addStyle(int style); + + // debug printing + void print(FILE* fout) const; + + void bumpSize(int size); + +protected: + int currentType() const; + + int* keys_; // type of item in path + void** data_; // extra data + int numUsed_; // number of items used in array + int numAllocated_; // allocated size of keys and data + int* pointer_; // traversal pointer, allocated because used + // as iterator in const traversal functions. + int numX_; + int numY_; + int stepX_; + int stepY_; + int deltaX_; + int deltaY_; + int mask_; + + defrData *defData; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiPinCap.cpp b/lefdef/src/def/def/defiPinCap.cpp new file mode 100644 index 00000000..323e30fc --- /dev/null +++ b/lefdef/src/def/def/defiPinCap.cpp @@ -0,0 +1,2152 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "defiPinCap.hpp" +#include "defiComponent.hpp" +#include "defiDebug.hpp" +#include "lex.h" +#include "defiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/////////////////////////////////////////////// +/////////////////////////////////////////////// +// +// defiPinCap +// +/////////////////////////////////////////////// +/////////////////////////////////////////////// + + +void defiPinCap::setPin(int p) { + pin_ = p; +} + + +void defiPinCap::setCap(double d) { + cap_ = d; +} + + +int defiPinCap::pin() const { + return pin_; +} + + +double defiPinCap::cap() const { + return cap_; +} + + +void defiPinCap::print(FILE* f) const { + fprintf(f, "PinCap %d %5.2f\n", pin_, cap_); +} + + +/////////////////////////////////////////////// +/////////////////////////////////////////////// +// +// defiPinAntennaModel +// +/////////////////////////////////////////////// +/////////////////////////////////////////////// + +defiPinAntennaModel::defiPinAntennaModel(defrData *data) + : oxide_(0), + defData(data) +{ + Init(); +} + + +void defiPinAntennaModel::Init() { + numAPinGateArea_ = 0; // 5.4 + APinGateAreaAllocated_ = 0; // 5.4 + APinGateArea_ = 0; + APinGateAreaLayer_ = 0; + numAPinMaxAreaCar_ = 0; // 5.4 + APinMaxAreaCarAllocated_ = 0; // 5.4 + APinMaxAreaCar_ = 0; + APinMaxAreaCarLayer_ = 0; + numAPinMaxSideAreaCar_ = 0; // 5.4 + APinMaxSideAreaCarAllocated_ = 0; // 5.4 + APinMaxSideAreaCar_ = 0; + APinMaxSideAreaCarLayer_ = 0; + numAPinMaxCutCar_ = 0; // 5.4 + APinMaxCutCarAllocated_ = 0; // 5.4 + APinMaxCutCar_ = 0; + APinMaxCutCarLayer_ = 0; +} + +defiPinAntennaModel::~defiPinAntennaModel() { + Destroy(); +} + + +void defiPinAntennaModel::clear() { + int i; + + if (oxide_) + free((char*)(oxide_)); + oxide_ = 0; + + for (i = 0; i < numAPinGateArea_; i++) { + if (APinGateAreaLayer_[i]) + free(APinGateAreaLayer_[i]); + } + numAPinGateArea_ = 0; + + for (i = 0; i < numAPinMaxAreaCar_; i++) { + if (APinMaxAreaCarLayer_[i]) + free(APinMaxAreaCarLayer_[i]); + } + numAPinMaxAreaCar_ = 0; + + for (i = 0; i < numAPinMaxSideAreaCar_; i++) { + if (APinMaxSideAreaCarLayer_[i]) + free(APinMaxSideAreaCarLayer_[i]); + } + numAPinMaxSideAreaCar_ = 0; + + for (i = 0; i < numAPinMaxCutCar_; i++) { + if (APinMaxCutCarLayer_[i]) + free(APinMaxCutCarLayer_[i]); + } + numAPinMaxCutCar_ = 0; +} + +void defiPinAntennaModel::Destroy() { + clear(); + if (APinGateArea_) + free((char*)(APinGateArea_)); + if (APinGateAreaLayer_) + free((char*)(APinGateAreaLayer_)); + if (APinMaxAreaCar_) + free((char*)(APinMaxAreaCar_)); + if (APinMaxAreaCarLayer_) + free((char*)(APinMaxAreaCarLayer_)); + if (APinMaxSideAreaCar_) + free((char*)(APinMaxSideAreaCar_)); + if (APinMaxSideAreaCarLayer_) + free((char*)(APinMaxSideAreaCarLayer_)); + if (APinMaxCutCar_) + free((char*)(APinMaxCutCar_)); + if (APinMaxCutCarLayer_) + free((char*)(APinMaxCutCarLayer_)); +} + +// 5.5 +void defiPinAntennaModel::setAntennaModel(int aOxide) { + switch (aOxide) { + case 2: + oxide_ = strdup("OXIDE2"); + break; + case 3: + oxide_ = strdup("OXIDE3"); + break; + case 4: + oxide_ = strdup("OXIDE4"); + break; + default: + oxide_ = strdup("OXIDE1"); + break; + } +} + +void defiPinAntennaModel::addAPinGateArea(int value, const char* layer) { + if (numAPinGateArea_ == APinGateAreaAllocated_) { + int i; + int max; + int lim = numAPinGateArea_; + int* nd; + char** nl; + + if (APinGateAreaAllocated_ == 0) + max = APinGateAreaAllocated_ = 2; + else + max = APinGateAreaAllocated_ *= 2; + nd = (int*)malloc(sizeof(int)*max); + nl = (char**)malloc(sizeof(char*)*max); + for (i = 0; i < lim; i++) { + nd[i] = APinGateArea_[i]; + nl[i] = APinGateAreaLayer_[i]; + } + free((char*)(APinGateArea_)); + free((char*)(APinGateAreaLayer_)); + APinGateArea_ = nd; + APinGateAreaLayer_ = nl; + + } + APinGateArea_[numAPinGateArea_] = value; + if (layer) { + APinGateAreaLayer_[numAPinGateArea_] = + (char*)malloc(strlen(layer)+1); + strcpy(APinGateAreaLayer_[numAPinGateArea_], + defData->DEFCASE(layer)); + } else + APinGateAreaLayer_[numAPinGateArea_] = NULL; + numAPinGateArea_ += 1; +} + +void defiPinAntennaModel::addAPinMaxAreaCar(int value, const char* layer) { + if (numAPinMaxAreaCar_ == APinMaxAreaCarAllocated_) { + int i; + int max; + int lim = numAPinMaxAreaCar_; + int* nd; + char** nl; + + if (APinMaxAreaCarAllocated_ == 0) + max = APinMaxAreaCarAllocated_ = 2; + else + max = APinMaxAreaCarAllocated_ *= 2; + nd = (int*)malloc(sizeof(int)*max); + nl = (char**)malloc(sizeof(char*)*max); + for (i = 0; i < lim; i++) { + nd[i] = APinMaxAreaCar_[i]; + nl[i] = APinMaxAreaCarLayer_[i]; + } + free((char*)(APinMaxAreaCar_)); + free((char*)(APinMaxAreaCarLayer_)); + APinMaxAreaCar_ = nd; + APinMaxAreaCarLayer_ = nl; + + } + APinMaxAreaCar_[numAPinMaxAreaCar_] = value; + if (layer) { + APinMaxAreaCarLayer_[numAPinMaxAreaCar_] = + (char*)malloc(strlen(layer)+1); + strcpy(APinMaxAreaCarLayer_[numAPinMaxAreaCar_], + defData->DEFCASE(layer)); + } else + APinMaxAreaCarLayer_[numAPinMaxAreaCar_] = NULL; + numAPinMaxAreaCar_ += 1; +} + +void defiPinAntennaModel::addAPinMaxSideAreaCar(int value, const char* layer) { + if (numAPinMaxSideAreaCar_ == APinMaxSideAreaCarAllocated_) { + int i; + int max; + int lim = numAPinMaxSideAreaCar_; + int* nd; + char** nl; + + if (APinMaxSideAreaCarAllocated_ == 0) + max = APinMaxSideAreaCarAllocated_ = 2; + else + max = APinMaxSideAreaCarAllocated_ *= 2; + nd = (int*)malloc(sizeof(int)*max); + nl = (char**)malloc(sizeof(char*)*max); + for (i = 0; i < lim; i++) { + nd[i] = APinMaxSideAreaCar_[i]; + nl[i] = APinMaxSideAreaCarLayer_[i]; + } + free((char*)(APinMaxSideAreaCar_)); + free((char*)(APinMaxSideAreaCarLayer_)); + APinMaxSideAreaCar_ = nd; + APinMaxSideAreaCarLayer_ = nl; + + } + APinMaxSideAreaCar_[numAPinMaxSideAreaCar_] = value; + if (layer) { + APinMaxSideAreaCarLayer_[numAPinMaxSideAreaCar_] = + (char*)malloc(strlen(layer)+1); + strcpy(APinMaxSideAreaCarLayer_[numAPinMaxSideAreaCar_], + defData->DEFCASE(layer)); + } else + APinMaxSideAreaCarLayer_[numAPinMaxSideAreaCar_] = NULL; + numAPinMaxSideAreaCar_ += 1; +} + +void defiPinAntennaModel::addAPinMaxCutCar(int value, const char* layer) { + if (numAPinMaxCutCar_ == APinMaxCutCarAllocated_) { + int i; + int max; + int lim = numAPinMaxCutCar_; + int* nd; + char** nl; + + if (APinMaxCutCarAllocated_ == 0) + max = APinMaxCutCarAllocated_ = 2; + else + max = APinMaxCutCarAllocated_ *= 2; + nd = (int*)malloc(sizeof(int)*max); + nl = (char**)malloc(sizeof(char*)*max); + for (i = 0; i < lim; i++) { + nd[i] = APinMaxCutCar_[i]; + nl[i] = APinMaxCutCarLayer_[i]; + } + free((char*)(APinMaxCutCar_)); + free((char*)(APinMaxCutCarLayer_)); + APinMaxCutCar_ = nd; + APinMaxCutCarLayer_ = nl; + + } + APinMaxCutCar_[numAPinMaxCutCar_] = value; + if (layer) { + APinMaxCutCarLayer_[numAPinMaxCutCar_] = + (char*)malloc(strlen(layer)+1); + strcpy(APinMaxCutCarLayer_[numAPinMaxCutCar_], + defData->DEFCASE(layer)); + } else + APinMaxCutCarLayer_[numAPinMaxCutCar_] = NULL; + numAPinMaxCutCar_ += 1; +} + +// 5.5 +char* defiPinAntennaModel::antennaOxide() const { + return oxide_; +} + +int defiPinAntennaModel::hasAPinGateArea() const { + return numAPinGateArea_ ? 1 : 0 ; +} + +int defiPinAntennaModel::hasAPinMaxAreaCar() const { + return numAPinMaxAreaCar_ ? 1 : 0 ; +} + +int defiPinAntennaModel::hasAPinMaxSideAreaCar() const { + return numAPinMaxSideAreaCar_ ? 1 : 0 ; +} + +int defiPinAntennaModel::hasAPinMaxCutCar() const { + return numAPinMaxCutCar_ ? 1 : 0 ; +} + +int defiPinAntennaModel::numAPinGateArea() const { + return numAPinGateArea_; +} + +int defiPinAntennaModel::numAPinMaxAreaCar() const { + return numAPinMaxAreaCar_; +} + +int defiPinAntennaModel::numAPinMaxSideAreaCar() const { + return numAPinMaxSideAreaCar_; +} + +int defiPinAntennaModel::numAPinMaxCutCar() const { + return numAPinMaxCutCar_; +} + +int defiPinAntennaModel::APinGateArea(int i) const { + return APinGateArea_[i]; +} + +int defiPinAntennaModel::hasAPinGateAreaLayer(int i) const { + return (APinGateAreaLayer_[i] && *(APinGateAreaLayer_[i])) ? + 1 : 0; +} + +const char* defiPinAntennaModel::APinGateAreaLayer(int i) const { + return APinGateAreaLayer_[i]; +} + +int defiPinAntennaModel::APinMaxAreaCar(int i) const { + return APinMaxAreaCar_[i]; +} + +int defiPinAntennaModel::hasAPinMaxAreaCarLayer(int i) const { + return (APinMaxAreaCarLayer_[i] && *(APinMaxAreaCarLayer_[i])) ? + 1 : 0; +} + +const char* defiPinAntennaModel::APinMaxAreaCarLayer(int i) const { + return APinMaxAreaCarLayer_[i]; +} + +int defiPinAntennaModel::APinMaxSideAreaCar(int i) const { + return APinMaxSideAreaCar_[i]; +} + +int defiPinAntennaModel::hasAPinMaxSideAreaCarLayer(int i) const { + return (APinMaxSideAreaCarLayer_[i] && + *(APinMaxSideAreaCarLayer_[i])) ? 1 : 0; +} + +const char* defiPinAntennaModel::APinMaxSideAreaCarLayer(int i) const { + return APinMaxSideAreaCarLayer_[i]; +} + +int defiPinAntennaModel::APinMaxCutCar(int i) const { + return APinMaxCutCar_[i]; +} + +int defiPinAntennaModel::hasAPinMaxCutCarLayer(int i) const { + return (APinMaxCutCarLayer_[i] && + *(APinMaxCutCarLayer_[i])) ? 1 : 0; +} + +const char* defiPinAntennaModel::APinMaxCutCarLayer(int i) const { + return APinMaxCutCarLayer_[i]; +} + + +/////////////////////////////////////////////// +/////////////////////////////////////////////// +// +// defiPinPort +// +/////////////////////////////////////////////// +/////////////////////////////////////////////// + +defiPinPort::defiPinPort(defrData *data) +: defData(data) +{ + Init(); +} + +void defiPinPort::Init() { + layersAllocated_ = 0; + numLayers_ = 0; + layers_ = 0; + layerMinSpacing_ = 0; + layerMask_ = 0; + layerEffectiveWidth_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + polysAllocated_ = 0; + numPolys_ = 0; + polygonNames_ = 0; + polyMinSpacing_ = 0; + polyMask_ = 0; + polyEffectiveWidth_ = 0; + polygons_ = 0; + viasAllocated_ = 0; + numVias_ = 0; + viaNames_ = 0; + viaX_ = 0; + viaY_ = 0; + viaMask_ = 0; + placeType_ = 0; + x_ = 0; + y_ = 0; + orient_ = 0; +} + +defiPinPort::~defiPinPort() { + clear(); +} + +void defiPinPort::clear() { + int i; + + placeType_ = 0; + orient_ = 0; + x_ = 0; + y_ = 0; + + if (layers_) { + for (i = 0; i < numLayers_; i++) + if (layers_[i]) free(layers_[i]); + free((char*)(layers_)); + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + free((char*)(layerMinSpacing_)); + free((char*)(layerMask_)); + free((char*)(layerEffectiveWidth_)); + } + layers_ = 0; + layerMinSpacing_ = 0; + layerEffectiveWidth_ = 0; + layerMask_ = 0; + numLayers_ = 0; + layersAllocated_ = 0; + if (polygonNames_) { + struct defiPoints* p; + for (i = 0; i < numPolys_; i++) { + if (polygonNames_[i]) free((char*)(polygonNames_[i])); + p = polygons_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(polygons_[i])); + } + free((char*)(polygonNames_)); + free((char*)(polygons_)); + free((char*)(polyMinSpacing_)); + free((char*)(polyMask_)); + free((char*)(polyEffectiveWidth_)); + polygonNames_ = 0; + polygons_ = 0; + polyMinSpacing_ = 0; + polyEffectiveWidth_ = 0; + polyMask_ = 0; + } + numPolys_ = 0; + polysAllocated_ = 0; + if (viaNames_) { + for (i = 0; i < numVias_; i++) + if (viaNames_[i]) free(viaNames_[i]); + free((char*)(viaNames_)); + free((char*)(viaX_)); + free((char*)(viaY_)); + free((char*)(viaMask_)); + } + viaNames_ = 0; + numVias_ = 0; + viasAllocated_ = 0; + viaMask_ = 0; +} + +void defiPinPort::addLayer(const char* layer) { + if (numLayers_ >= layersAllocated_) { + int i; + char** newl; + int *nxl, *nyl, *nxh, *nyh; + int *lms, *lew, *lm; + + layersAllocated_ = layersAllocated_ ? + layersAllocated_ * 2 : 8; + newl = (char**)malloc(layersAllocated_ * sizeof(char*)); + nxl = (int*)malloc(layersAllocated_ * sizeof(int)); + nyl = (int*)malloc(layersAllocated_ * sizeof(int)); + nxh = (int*)malloc(layersAllocated_ * sizeof(int)); + nyh = (int*)malloc(layersAllocated_ * sizeof(int)); + lms = (int*)malloc(layersAllocated_ * sizeof(int)); + lew = (int*)malloc(layersAllocated_ * sizeof(int)); + lm = (int*)malloc(layersAllocated_ * sizeof(int)); + + for (i = 0; i < numLayers_; i++) { + newl[i] = layers_[i]; + nxl[i] = xl_[i]; + nyl[i] = yl_[i]; + nxh[i] = xh_[i]; + nyh[i] = yh_[i]; + lms[i] = layerMinSpacing_[i]; + lew[i] = layerEffectiveWidth_[i]; + lm[i] = layerMask_[i]; + } + if (numLayers_ > 0) { + free((char*)layers_); + free((char*)xl_); + free((char*)yl_); + free((char*)xh_); + free((char*)yh_); + free((char*)layerMinSpacing_); + free((char*)layerEffectiveWidth_); + free((char*)layerMask_); + } + layers_ = newl; + xl_ = nxl; + yl_ = nyl; + xh_ = nxh; + yh_ = nyh; + layerMinSpacing_ = lms; + layerEffectiveWidth_ = lew; + layerMask_ = lm; + } + layers_[numLayers_] = (char*)malloc(strlen(layer)+1); + strcpy(layers_[numLayers_], defData->DEFCASE(layer)); + xl_[numLayers_] = 0; + yl_[numLayers_] = 0; + xh_[numLayers_] = 0; + yh_[numLayers_] = 0; + layerMinSpacing_[numLayers_] = -1; + layerEffectiveWidth_[numLayers_] = -1; + layerMask_[numLayers_] = 0; + numLayers_ += 1; +} + +void defiPinPort::addLayerSpacing(int minSpacing) { + layerMinSpacing_[numLayers_-1] = minSpacing; +} + +void defiPinPort::addLayerMask(int mask) { + layerMask_[numLayers_-1] = mask; +} + +void defiPinPort::addLayerDesignRuleWidth(int effectiveWidth) { + layerEffectiveWidth_[numLayers_-1] = effectiveWidth; +} + +void defiPinPort::addLayerPts(int xl, int yl, int xh, int yh) { + xl_[numLayers_-1] = xl; + yl_[numLayers_-1] = yl; + xh_[numLayers_-1] = xh; + yh_[numLayers_-1] = yh; +} + +void defiPinPort::addPolygon(const char* layerName) { + int *pms, *pdw, *pm; + int i; + + if (numPolys_ == polysAllocated_) { + char** newn; + struct defiPoints** poly; + polysAllocated_ = (polysAllocated_ == 0) ? + 2 : polysAllocated_ * 2; + newn = (char**)malloc(sizeof(char*) * polysAllocated_); + poly = (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + polysAllocated_); + pms = (int*)malloc(polysAllocated_ * sizeof(int)); + pdw = (int*)malloc(polysAllocated_ * sizeof(int)); + pm = (int*)malloc(polysAllocated_ * sizeof(int)); + + for (i = 0; i < numPolys_; i++) { + newn[i] = polygonNames_[i]; + poly[i] = polygons_[i]; + pms[i] = polyMinSpacing_[i]; + pdw[i] = polyEffectiveWidth_[i]; + pm[i] = polyMask_[i]; + } + if (numPolys_ > 0) { + free((char*)(polygons_)); + free((char*)(polygonNames_)); + free((char*)(polyMinSpacing_)); + free((char*)(polyEffectiveWidth_)); + free((char*)(polyMask_)); + } + polygonNames_ = newn; + polygons_ = poly; + polyMinSpacing_ = pms; + polyEffectiveWidth_ = pdw; + polyMask_ = pm; + } + polygonNames_[numPolys_] = strdup(layerName); + polygons_[numPolys_] = 0; + polyMinSpacing_[numPolys_] = -1; + polyEffectiveWidth_[numPolys_] = -1; + polyMask_[numPolys_] = 0; + numPolys_ += 1; +} + +void defiPinPort::addPolySpacing(int minSpacing) { + polyMinSpacing_[numPolys_-1] = minSpacing; +} + +void defiPinPort::addPolyMask(int color) { + polyMask_[numPolys_-1] = color; +} + +void defiPinPort::addPolyDesignRuleWidth(int effectiveWidth) { + polyEffectiveWidth_[numPolys_-1] = effectiveWidth; +} + +void defiPinPort::addPolygonPts(defiGeometries* geom) { + struct defiPoints* p; + int x, y; + int i; + + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + polygons_[numPolys_-1] = p; +} + + +void defiPinPort::addVia(const char* viaName, int ptX, int ptY, int color) { + if (numVias_ >= viasAllocated_) { + int i; + char** newl; + int *nx, *ny, *nm; + + viasAllocated_ = viasAllocated_ ? + viasAllocated_ * 2 : 8; + newl = (char**)malloc(viasAllocated_ * sizeof(char*)); + nx = (int*)malloc(viasAllocated_ * sizeof(int)); + ny = (int*)malloc(viasAllocated_ * sizeof(int)); + nm = (int*)malloc(viasAllocated_ * sizeof(int)); + for (i = 0; i < numVias_; i++) { + newl[i] = viaNames_[i]; + nx[i] = viaX_[i]; + ny[i] = viaY_[i]; + nm[i] = viaMask_[i]; + } + if (numVias_ > 0) { + free((char*)viaNames_); + free((char*)viaX_); + free((char*)viaY_); + free((char*)viaMask_); + } + viaNames_ = newl; + viaX_ = nx; + viaY_ = ny; + viaMask_ = nm; + } + viaNames_[numVias_] = (char*)malloc(strlen(viaName)+1); + strcpy(viaNames_[numVias_], defData->DEFCASE(viaName)); + viaX_[numVias_] = ptX; + viaY_[numVias_] = ptY; + viaMask_[numVias_] = color; + numVias_ += 1; +} + +void defiPinPort::setPlacement(int typ, int x, int y, int orient) { + x_ = x; + y_ = y; + orient_ = orient; + placeType_ = typ; +} + +int defiPinPort::numLayer() const { + return numLayers_; +} + +const char* defiPinPort::layer(int index) const { + return layers_[index]; +} + +void defiPinPort::bounds(int index, int* xl, int* yl, int* xh, int* yh) const { + if (xl) *xl = xl_[index]; + if (yl) *yl = yl_[index]; + if (xh) *xh = xh_[index]; + if (yh) *yh = yh_[index]; +} + +int defiPinPort::hasLayerSpacing(int index) const{ + if (layerMinSpacing_[index] == -1) + return 0; + return 1; +} + +int defiPinPort::hasLayerDesignRuleWidth(int index) const{ + if (layerEffectiveWidth_[index] == -1) + return 0; + return 1; +} + +int defiPinPort::layerSpacing(int index) const { + return layerMinSpacing_[index]; +} + +int defiPinPort::layerMask(int index) const { + return layerMask_[index]; +} + +int defiPinPort::layerDesignRuleWidth(int index) const { + return layerEffectiveWidth_[index]; +} + +int defiPinPort::numPolygons() const { + return numPolys_; +} + +const char* defiPinPort::polygonName(int index) const { + if (index < 0 || index > numPolys_) { + defiError(1, 0, "index out of bounds", defData); + return 0; + } + return polygonNames_[index]; +} + +struct defiPoints defiPinPort::getPolygon(int index) const { + return *(polygons_[index]); +} + +int defiPinPort::hasPolygonSpacing(int index) const{ + if (polyMinSpacing_[index] == -1) + return 0; + return 1; +} + +int defiPinPort::hasPolygonDesignRuleWidth(int index) const{ + if (polyEffectiveWidth_[index] == -1) + return 0; + return 1; +} + +int defiPinPort::polygonSpacing(int index) const { + return polyMinSpacing_[index]; +} + +int defiPinPort::polygonMask(int index) const { + return polyMask_[index]; +} + +int defiPinPort::polygonDesignRuleWidth(int index) const { + return polyEffectiveWidth_[index]; +} + +int defiPinPort::numVias() const { + return numVias_; +} + +const char* defiPinPort::viaName(int index) const { + if (index < 0 || index > numVias_) { + defiError(1, 0, "index out of bounds", defData); + return 0; + } + return viaNames_[index]; +} + +int defiPinPort::viaPtX(int index) const { + return viaX_[index]; +} + +int defiPinPort::viaPtY(int index) const { + return viaY_[index]; +} + +int defiPinPort::viaBottomMask(int index) const { + return viaMask_[index] % 10; +} + +int defiPinPort::viaTopMask(int index) const { + return viaMask_[index] / 100; +} + +int defiPinPort::viaCutMask(int index) const { + return viaMask_[index] / 10 % 10; +} + +int defiPinPort::hasPlacement() const { + return placeType_ == 0 ? 0 : 1 ; +} + +int defiPinPort::isPlaced() const { + return placeType_ == DEFI_COMPONENT_PLACED ? 1 : 0 ; +} + +int defiPinPort::isCover() const { + return placeType_ == DEFI_COMPONENT_COVER ? 1 : 0 ; +} + +int defiPinPort::isFixed() const { + return placeType_ == DEFI_COMPONENT_FIXED ? 1 : 0 ; +} + +int defiPinPort::placementX() const { + return x_; +} + +int defiPinPort::placementY() const { + return y_; +} + +int defiPinPort::orient() const { + return orient_; +} + +const char* defiPinPort::orientStr() const { + return (defiOrientStr(orient_)); +} + +/////////////////////////////////////////////// +/////////////////////////////////////////////// +// +// defiPin +// +/////////////////////////////////////////////// +/////////////////////////////////////////////// + +defiPin::defiPin(defrData *data) +: defData(data) +{ + Init(); +} + + +void defiPin::Init() { + pinNameLength_ = 0; + pinName_ = 0; + netNameLength_ = 0; + netName_ = 0; + useLength_ = 0; + use_ = 0; + directionLength_ = 0; + direction_ = 0; + hasDirection_ = 0; + hasUse_ = 0; + placeType_ = 0; + orient_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + x_ = 0; + y_ = 0; + netExprLength_ = 0; // 5.6 + netExpr_ = 0; // 5.6 + hasNetExpr_ = 0; // 5.6 + supplySensLength_ = 0; // 5.6 + supplySens_ = 0; // 5.6 + hasSupplySens_ = 0; // 5.6 + groundSensLength_ = 0; // 5.6 + groundSens_ = 0; // 5.6 + hasGroundSens_ = 0; // 5.6 + layers_ = 0; // 5.6 + layersAllocated_ = 0; // 5.6 + numLayers_ = 0; // 5.6 + polygonNames_ = 0; // 5.6 + numPolys_ = 0; // 5.6 + polysAllocated_ = 0; // 5.6 + polygons_ = 0; // 5.6 + numAPinPartialMetalArea_ = 0; // 5.4 + APinPartialMetalAreaAllocated_ = 0; // 5.4 + APinPartialMetalArea_ = 0; + APinPartialMetalAreaLayer_ = 0; + numAPinPartialMetalSideArea_ = 0; // 5.4 + APinPartialMetalSideAreaAllocated_ = 0; // 5.4 + APinPartialMetalSideArea_ = 0; + APinPartialMetalSideAreaLayer_ = 0; + numAPinDiffArea_ = 0; // 5.4 + APinDiffAreaAllocated_ = 0; // 5.4 + APinDiffArea_ = 0; + APinDiffAreaLayer_ = 0; + numAPinPartialCutArea_ = 0; // 5.4 + APinPartialCutAreaAllocated_ = 0; // 5.4 + APinPartialCutArea_ = 0; + APinPartialCutAreaLayer_ = 0; + antennaModel_ = 0; + viaNames_ = 0; // 5.7 + viasAllocated_ = 0; // 5.7 + numVias_ = 0; // 5.7 + viaX_ = 0; // 5.7 + viaY_ = 0; // 5.7 + numPorts_ = 0; // 5.7 + pinPort_ = 0; // 5.7 + numAntennaModel_ = 0; + antennaModelAllocated_ = 0; +} + + +defiPin::~defiPin() { + Destroy(); +} + + +void defiPin::clear() { + int i; + + hasDirection_ = 0; + hasNetExpr_ = 0; + hasSupplySens_ = 0; + hasGroundSens_ = 0; + hasUse_ = 0; + hasSpecial_ = 0; + placeType_ = 0; + orient_ = 0; + x_ = 0; + y_ = 0; + + if (layers_) { + for (i = 0; i < numLayers_; i++) + if (layers_[i]) free(layers_[i]); + free((char*)(layers_)); + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + free((char*)(layerMinSpacing_)); + free((char*)(layerMask_)); + free((char*)(layerEffectiveWidth_)); + } + layers_ = 0; + layerMinSpacing_ = 0; + layerMask_ = 0; + layerEffectiveWidth_ = 0; + numLayers_ = 0; + layersAllocated_ = 0; + // 5.6 + if (polygonNames_) { + struct defiPoints* p; + for (i = 0; i < numPolys_; i++) { + if (polygonNames_[i]) free((char*)(polygonNames_[i])); + p = polygons_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(polygons_[i])); + } + free((char*)(polygonNames_)); + free((char*)(polygons_)); + free((char*)(polyMinSpacing_)); + free((char*)(polyMask_)); + free((char*)(polyEffectiveWidth_)); + polygonNames_ = 0; + polygons_ = 0; + polyMinSpacing_ = 0; + polyMask_ = 0; + polyEffectiveWidth_ = 0; + } + numPolys_ = 0; + polysAllocated_ = 0; + // 5.7 + if (viaNames_) { + for (i = 0; i < numVias_; i++) + if (viaNames_[i]) free(viaNames_[i]); + free((char*)(viaNames_)); + free((char*)(viaX_)); + free((char*)(viaY_)); + free((char*)(viaMask_)); + } + viaNames_ = 0; + numVias_ = 0; + viaMask_ = 0; + viasAllocated_ = 0; + // 5.7 + if (pinPort_) { + for (i = 0; i < numPorts_; i++) { + if (pinPort_[i]) { + pinPort_[i]->clear(); + delete pinPort_[i]; + } + } + free(pinPort_); + } + pinPort_ = 0; + numPorts_ = 0; + portsAllocated_ = 0; + + for (i = 0; i < numAPinPartialMetalArea_; i++) { + if (APinPartialMetalAreaLayer_[i]) + free(APinPartialMetalAreaLayer_[i]); + } + numAPinPartialMetalArea_ = 0; + + for (i = 0; i < numAPinPartialMetalSideArea_; i++) { + if (APinPartialMetalSideAreaLayer_[i]) + free(APinPartialMetalSideAreaLayer_[i]); + } + numAPinPartialMetalSideArea_ = 0; + + for (i = 0; i < numAPinDiffArea_; i++) { + if (APinDiffAreaLayer_[i]) + free(APinDiffAreaLayer_[i]); + } + numAPinDiffArea_ = 0; + + for (i = 0; i < numAPinPartialCutArea_; i++) { + if (APinPartialCutAreaLayer_[i]) + free(APinPartialCutAreaLayer_[i]); + } + numAPinPartialCutArea_ = 0; + + for (i = 0; i < antennaModelAllocated_; i++) { // 5.5 + delete antennaModel_[i]; + } + + numAntennaModel_ = 0; + antennaModelAllocated_ = 0; +} + + +void defiPin::Destroy() { + if (pinName_) free(pinName_); + if (netName_) free(netName_); + if (use_) free(use_); + if (direction_) free(direction_); + if (netExpr_) free(netExpr_); + if (supplySens_) free(supplySens_); + if (groundSens_) free(groundSens_); + pinName_ = 0; + netName_ = 0; + use_ = 0; + direction_ = 0; + netExpr_ = 0; + supplySens_ = 0; + groundSens_ = 0; + pinNameLength_ = 0; + netNameLength_ = 0; + useLength_ = 0; + directionLength_ = 0; + netExprLength_ = 0; + supplySensLength_ = 0; + groundSensLength_ = 0; + layersAllocated_ = 0; + clear(); + + // 5.4 + if (APinPartialMetalArea_) + free((char*)(APinPartialMetalArea_)); + if (APinPartialMetalAreaLayer_) + free((char*)(APinPartialMetalAreaLayer_)); + if (APinPartialMetalSideArea_) + free((char*)(APinPartialMetalSideArea_)); + if (APinPartialMetalSideAreaLayer_) + free((char*)(APinPartialMetalSideAreaLayer_)); + if (APinDiffArea_) + free((char*)(APinDiffArea_)); + if (APinDiffAreaLayer_) + free((char*)(APinDiffAreaLayer_)); + if (APinPartialCutArea_) + free((char*)(APinPartialCutArea_)); + if (APinPartialCutAreaLayer_) + free((char*)(APinPartialCutAreaLayer_)); + if (antennaModel_) + free((char*)(antennaModel_)); +} + + +void defiPin::Setup(const char* pinName, const char* netName) { + int len = strlen(pinName) + 1; + if (pinNameLength_ < len) { + if (pinName_) free(pinName_); + pinName_ = (char*)malloc(len); + pinNameLength_ = len; + } + strcpy(pinName_, defData->DEFCASE(pinName)); + + len = strlen(netName) + 1; + if (netNameLength_ < len) { + if (netName_) free(netName_); + netName_ = (char*)malloc(len); + netNameLength_ = len; + } + strcpy(netName_, defData->DEFCASE(netName)); + + clear(); + +} + + +void defiPin::setDirection(const char* dir) { + int len = strlen(dir) + 1; + if (directionLength_ < len) { + if (direction_) free(direction_); + direction_ = (char*)malloc(len); + directionLength_ = len; + } + strcpy(direction_, defData->DEFCASE(dir)); + hasDirection_ = 1; +} + + +void defiPin::setNetExpr(const char* name) { + int len = strlen(name) + 1; + if (netExprLength_ < len) { + if (netExpr_) free(netExpr_); + netExpr_ = (char*)malloc(len); + netExprLength_ = len; + } + strcpy(netExpr_, defData->DEFCASE(name)); + hasNetExpr_ = 1; +} + + +void defiPin::setSupplySens(const char* name) { + int len = strlen(name) + 1; + if (supplySensLength_ < len) { + if (supplySens_) free(supplySens_); + supplySens_ = (char*)malloc(len); + supplySensLength_ = len; + } + strcpy(supplySens_, defData->DEFCASE(name)); + hasSupplySens_ = 1; +} + + +void defiPin::setGroundSens(const char* name) { + int len = strlen(name) + 1; + if (groundSensLength_ < len) { + if (groundSens_) free(groundSens_); + groundSens_ = (char*)malloc(len); + groundSensLength_ = len; + } + strcpy(groundSens_, defData->DEFCASE(name)); + hasGroundSens_ = 1; +} + + +void defiPin::setUse(const char* use) { + int len = strlen(use) + 1; + if (useLength_ < len) { + if (use_) free(use_); + use_ = (char*)malloc(len); + useLength_ = len; + } + strcpy(use_, defData->DEFCASE(use)); + hasUse_ = 1; +} + + +// 5.6, renamed from setLayer to addLayer for multiple layers allowed +void defiPin::addLayer(const char* layer) { + + if (numLayers_ >= layersAllocated_) { + int i; + char** newl; + int *nxl, *nyl, *nxh, *nyh; + int *lms, *lew, *lm; + + layersAllocated_ = layersAllocated_ ? + layersAllocated_ * 2 : 8; + newl = (char**)malloc(layersAllocated_ * sizeof(char*)); + nxl = (int*)malloc(layersAllocated_ * sizeof(int)); + nyl = (int*)malloc(layersAllocated_ * sizeof(int)); + nxh = (int*)malloc(layersAllocated_ * sizeof(int)); + nyh = (int*)malloc(layersAllocated_ * sizeof(int)); + lms = (int*)malloc(layersAllocated_ * sizeof(int)); + lew = (int*)malloc(layersAllocated_ * sizeof(int)); + lm = (int*)malloc(layersAllocated_ * sizeof(int)); + + for (i = 0; i < numLayers_; i++) { + newl[i] = layers_[i]; + nxl[i] = xl_[i]; + nyl[i] = yl_[i]; + nxh[i] = xh_[i]; + nyh[i] = yh_[i]; + lms[i] = layerMinSpacing_[i]; + lew[i] = layerEffectiveWidth_[i]; + lm[i] = layerMask_[i]; + } + if (numLayers_ > 0) { + free((char*)layers_); + free((char*)xl_); + free((char*)yl_); + free((char*)xh_); + free((char*)yh_); + free((char*)layerMinSpacing_); + free((char*)layerMask_); + free((char*)layerEffectiveWidth_); + } + layers_ = newl; + xl_ = nxl; + yl_ = nyl; + xh_ = nxh; + yh_ = nyh; + layerMinSpacing_ = lms; + layerEffectiveWidth_ = lew; + layerMask_ = lm; + } + layers_[numLayers_] = (char*)malloc(strlen(layer)+1); + strcpy(layers_[numLayers_], defData->DEFCASE(layer)); + xl_[numLayers_] = 0; + yl_[numLayers_] = 0; + xh_[numLayers_] = 0; + yh_[numLayers_] = 0; + layerMinSpacing_[numLayers_] = -1; + layerMask_[numLayers_] = 0; + layerEffectiveWidth_[numLayers_] = -1; + numLayers_ += 1; +} + +// 5.6 +void defiPin::addLayerPts(int xl, int yl, int xh, int yh) { + xl_[numLayers_-1] = xl; + yl_[numLayers_-1] = yl; + xh_[numLayers_-1] = xh; + yh_[numLayers_-1] = yh; +} + +// 5.6 +void defiPin::addLayerSpacing(int minSpacing) { + layerMinSpacing_[numLayers_-1] = minSpacing; +} + +void defiPin::addLayerMask(int mask) { + layerMask_[numLayers_-1] = mask; +} + +// 5.6 +void defiPin::addLayerDesignRuleWidth(int effectiveWidth) { + layerEffectiveWidth_[numLayers_-1] = effectiveWidth; +} + + +void defiPin::setPlacement(int typ, int x, int y, int orient) { + x_ = x; + y_ = y; + orient_ = orient; + placeType_ = typ; +} + + +const char* defiPin::pinName() const { + return pinName_; +} + + +const char* defiPin::netName() const { + return netName_; +} + + +void defiPin::changePinName(const char* pinName) { + int len = strlen(pinName) + 1; + if (pinNameLength_ < len) { + if (pinName_) free(pinName_); + pinName_ = (char*)malloc(len); + pinNameLength_ = len; + } + strcpy(pinName_, defData->DEFCASE(pinName)); +} + + +int defiPin::hasDirection() const { + return (int)(hasDirection_); +} + + +int defiPin::hasUse() const { + return (int)(hasUse_); +} + + +int defiPin::hasLayer() const { + if (numLayers_ || numPolys_) // 5.6, either layer or polygon is + return 1; // non-zero + else + return 0; +} + + +int defiPin::hasPlacement() const { + return placeType_ == 0 ? 0 : 1 ; +} + + +int defiPin::isUnplaced() const { + return placeType_ == DEFI_COMPONENT_UNPLACED ? 1 : 0 ; +} + + +int defiPin::isPlaced() const { + return placeType_ == DEFI_COMPONENT_PLACED ? 1 : 0 ; +} + + +int defiPin::isCover() const { + return placeType_ == DEFI_COMPONENT_COVER ? 1 : 0 ; +} + + +int defiPin::isFixed() const { + return placeType_ == DEFI_COMPONENT_FIXED ? 1 : 0 ; +} + + +int defiPin::placementX() const { + return x_; +} + + +int defiPin::placementY() const { + return y_; +} + + +const char* defiPin::direction() const { + return direction_; +} + + +const char* defiPin::use() const { + return use_; +} + + +int defiPin::numLayer() const { + return numLayers_; +} + +const char* defiPin::layer(int index) const { + return layers_[index]; +} + + +void defiPin::bounds(int index, int* xl, int* yl, int* xh, int* yh) const { + if (xl) *xl = xl_[index]; + if (yl) *yl = yl_[index]; + if (xh) *xh = xh_[index]; + if (yh) *yh = yh_[index]; +} + +// 5.6 +int defiPin::hasLayerSpacing(int index) const{ + if (layerMinSpacing_[index] == -1) + return 0; + return 1; +} + +// 5.6 +int defiPin::hasLayerDesignRuleWidth(int index) const{ + if (layerEffectiveWidth_[index] == -1) + return 0; + return 1; +} + +// 5.6 +int defiPin::layerSpacing(int index) const { + return layerMinSpacing_[index]; +} + +int defiPin::layerMask(int index) const { + return layerMask_[index]; +} + +// 5.6 +int defiPin::layerDesignRuleWidth(int index) const { + return layerEffectiveWidth_[index]; +} + +int defiPin::orient() const { + return orient_; +} + +const char* defiPin::orientStr() const { + return (defiOrientStr(orient_)); +} + + +void defiPin::setSpecial() { + hasSpecial_ = 1; +} + +// 5.5 +void defiPin::addAntennaModel(int oxide) { + // For version 5.5 only OXIDE1, OXIDE2, OXIDE3, & OXIDE4 + // are defined within a pin + defiPinAntennaModel* amo; + int i; + + if (numAntennaModel_ == 0) { // does not have antennaModel + if (!antennaModel_) // only need to malloc if it is nill + antennaModel_ = (defiPinAntennaModel**) + malloc(sizeof(defiPinAntennaModel*)*4); + antennaModelAllocated_ = 4; + for (i = 0; i < 4; i++) { + antennaModel_[i] = new defiPinAntennaModel(defData); + } + numAntennaModel_++; + antennaModelAllocated_ = 4; + amo = antennaModel_[0]; + } else { + amo = antennaModel_[numAntennaModel_]; + numAntennaModel_++; + } + amo->Init(); + amo->setAntennaModel(oxide); + return; +} + +// 5.5 +int defiPin::numAntennaModel() const { + return numAntennaModel_; +} + +// 5.5 +defiPinAntennaModel* defiPin::antennaModel(int index) const { + return antennaModel_[index]; +} + +void defiPin::addAPinPartialMetalArea(int value, const char* layer) { + if (numAPinPartialMetalArea_ == APinPartialMetalAreaAllocated_) { + int i; + int max; + int lim = numAPinPartialMetalArea_; + int* nd; + char** nl; + + if (APinPartialMetalAreaAllocated_ == 0) + max = APinPartialMetalAreaAllocated_ = 2; + else + max = APinPartialMetalAreaAllocated_ *= 2; + nd = (int*)malloc(sizeof(int)*max); + nl = (char**)malloc(sizeof(char*)*max); + for (i = 0; i < lim; i++) { + nd[i] = APinPartialMetalArea_[i]; + nl[i] = APinPartialMetalAreaLayer_[i]; + } + free((char*)(APinPartialMetalArea_)); + free((char*)(APinPartialMetalAreaLayer_)); + APinPartialMetalArea_ = nd; + APinPartialMetalAreaLayer_ = nl; + + } + APinPartialMetalArea_[numAPinPartialMetalArea_] = value; + if (layer) { + APinPartialMetalAreaLayer_[numAPinPartialMetalArea_] = + (char*)malloc(strlen(layer)+1); + strcpy(APinPartialMetalAreaLayer_[numAPinPartialMetalArea_], + defData->DEFCASE(layer)); + } else + APinPartialMetalAreaLayer_[numAPinPartialMetalArea_] = NULL; + numAPinPartialMetalArea_ += 1; +} + + +void defiPin::addAPinPartialMetalSideArea(int value, const char* layer) { + if (numAPinPartialMetalSideArea_ == APinPartialMetalSideAreaAllocated_) { + int i; + int max; + int lim = numAPinPartialMetalSideArea_; + int* nd; + char** nl; + + if (APinPartialMetalSideAreaAllocated_ == 0) + max = APinPartialMetalSideAreaAllocated_ = 2; + else + max = APinPartialMetalSideAreaAllocated_ *= 2; + nd = (int*)malloc(sizeof(int)*max); + nl = (char**)malloc(sizeof(char*)*max); + for (i = 0; i < lim; i++) { + nd[i] = APinPartialMetalSideArea_[i]; + nl[i] = APinPartialMetalSideAreaLayer_[i]; + } + free((char*)(APinPartialMetalSideArea_)); + free((char*)(APinPartialMetalSideAreaLayer_)); + APinPartialMetalSideArea_ = nd; + APinPartialMetalSideAreaLayer_ = nl; + + } + APinPartialMetalSideArea_[numAPinPartialMetalSideArea_] = value; + if (layer) { + APinPartialMetalSideAreaLayer_[numAPinPartialMetalSideArea_] = + (char*)malloc(strlen(layer)+1); + strcpy(APinPartialMetalSideAreaLayer_[numAPinPartialMetalSideArea_], + defData->DEFCASE(layer)); + } else + APinPartialMetalSideAreaLayer_[numAPinPartialMetalSideArea_] = NULL; + numAPinPartialMetalSideArea_ += 1; +} + + +void defiPin::addAPinGateArea(int value, const char* layer) { + if (numAntennaModel_ == 0) // haven't created any antennaModel yet + addAntennaModel(1); + antennaModel_[numAntennaModel_-1]->addAPinGateArea(value, layer); +} + + +void defiPin::addAPinDiffArea(int value, const char* layer) { + if (numAPinDiffArea_ == APinDiffAreaAllocated_) { + int i; + int max; + int lim = numAPinDiffArea_; + int* nd; + char** nl; + + if (APinDiffAreaAllocated_ == 0) + max = APinDiffAreaAllocated_ = 2; + else + max = APinDiffAreaAllocated_ *= 2; + nd = (int*)malloc(sizeof(int)*max); + nl = (char**)malloc(sizeof(char*)*max); + for (i = 0; i < lim; i++) { + nd[i] = APinDiffArea_[i]; + nl[i] = APinDiffAreaLayer_[i]; + } + free((char*)(APinDiffArea_)); + free((char*)(APinDiffAreaLayer_)); + APinDiffArea_ = nd; + APinDiffAreaLayer_ = nl; + + } + APinDiffArea_[numAPinDiffArea_] = value; + if (layer) { + APinDiffAreaLayer_[numAPinDiffArea_] = + (char*)malloc(strlen(layer)+1); + strcpy(APinDiffAreaLayer_[numAPinDiffArea_], + defData->DEFCASE(layer)); + } else + APinDiffAreaLayer_[numAPinDiffArea_] = NULL; + numAPinDiffArea_ += 1; +} + + +void defiPin::addAPinMaxAreaCar(int value, const char* layer) { + if (numAntennaModel_ == 0) // haven't created any antennaModel yet + addAntennaModel(1); + antennaModel_[numAntennaModel_-1]->addAPinMaxAreaCar(value, layer); +} + + +void defiPin::addAPinMaxSideAreaCar(int value, const char* layer) { + if (numAntennaModel_ == 0) // haven't created any antennaModel yet + addAntennaModel(1); + antennaModel_[numAntennaModel_-1]->addAPinMaxSideAreaCar(value, layer); +} + + +void defiPin::addAPinPartialCutArea(int value, const char* layer) { + if (numAPinPartialCutArea_ == APinPartialCutAreaAllocated_) { + int i; + int max; + int lim = numAPinPartialCutArea_; + int* nd; + char** nl; + + if (APinPartialCutAreaAllocated_ == 0) + max = APinPartialCutAreaAllocated_ = 2; + else + max = APinPartialCutAreaAllocated_ *= 2; + nd = (int*)malloc(sizeof(int)*max); + nl = (char**)malloc(sizeof(char*)*max); + for (i = 0; i < lim; i++) { + nd[i] = APinPartialCutArea_[i]; + nl[i] = APinPartialCutAreaLayer_[i]; + } + free((char*)(APinPartialCutArea_)); + free((char*)(APinPartialCutAreaLayer_)); + APinPartialCutArea_ = nd; + APinPartialCutAreaLayer_ = nl; + + } + APinPartialCutArea_[numAPinPartialCutArea_] = value; + if (layer) { + APinPartialCutAreaLayer_[numAPinPartialCutArea_] = + (char*)malloc(strlen(layer)+1); + strcpy(APinPartialCutAreaLayer_[numAPinPartialCutArea_], + defData->DEFCASE(layer)); + } else + APinPartialCutAreaLayer_[numAPinPartialCutArea_] = NULL; + numAPinPartialCutArea_ += 1; +} + + +void defiPin::addAPinMaxCutCar(int value, const char* layer) { + if (numAntennaModel_ == 0) // haven't created any antennaModel yet + addAntennaModel(1); + antennaModel_[numAntennaModel_-1]->addAPinMaxCutCar(value, layer); +} + + +int defiPin::hasSpecial() const { + return (int)hasSpecial_; +} + + +int defiPin::hasAPinPartialMetalArea() const { + return numAPinPartialMetalArea_ ? 1 : 0 ; +} + + +int defiPin::hasAPinPartialMetalSideArea() const { + return numAPinPartialMetalSideArea_ ? 1 : 0 ; +} + + +int defiPin::hasAPinDiffArea() const { + return numAPinDiffArea_ ? 1 : 0 ; +} + + +int defiPin::hasAPinPartialCutArea() const { + return numAPinPartialCutArea_ ? 1 : 0 ; +} + + +int defiPin::numAPinPartialMetalArea() const { + return numAPinPartialMetalArea_; +} + + +int defiPin::numAPinPartialMetalSideArea() const { + return numAPinPartialMetalSideArea_; +} + + +int defiPin::numAPinDiffArea() const { + return numAPinDiffArea_; +} + + +int defiPin::numAPinPartialCutArea() const { + return numAPinPartialCutArea_; +} + + +int defiPin::APinPartialMetalArea(int i) const { + return APinPartialMetalArea_[i]; +} + + +int defiPin::hasAPinPartialMetalAreaLayer(int i) const { + return (APinPartialMetalAreaLayer_[i] && + *(APinPartialMetalAreaLayer_[i])) ? 1 : 0 ; +} + + +const char* defiPin::APinPartialMetalAreaLayer(int i) const { + return APinPartialMetalAreaLayer_[i]; +} + + +int defiPin::APinPartialMetalSideArea(int i) const { + return APinPartialMetalSideArea_[i]; +} + + +int defiPin::hasAPinPartialMetalSideAreaLayer(int i) const { + return (APinPartialMetalSideAreaLayer_[i] && + *(APinPartialMetalSideAreaLayer_[i])) ? 1 : 0 ; +} + + +const char* defiPin::APinPartialMetalSideAreaLayer(int i) const { + return APinPartialMetalSideAreaLayer_[i]; +} + + +int defiPin::APinDiffArea(int i) const { + return APinDiffArea_[i]; +} + + +int defiPin::hasAPinDiffAreaLayer(int i) const { + return (APinDiffAreaLayer_[i] && *(APinDiffAreaLayer_[i])) ? + 1 : 0 ; +} + + +const char* defiPin::APinDiffAreaLayer(int i) const { + return APinDiffAreaLayer_[i]; +} + + +int defiPin::APinPartialCutArea(int i) const { + return APinPartialCutArea_[i]; +} + + +int defiPin::hasAPinPartialCutAreaLayer(int i) const { + return (APinPartialCutAreaLayer_[i] && + *(APinPartialCutAreaLayer_[i])) ? 1 : 0 ; +} + + +const char* defiPin::APinPartialCutAreaLayer(int i) const { + return APinPartialCutAreaLayer_[i]; +} + + +// 5.6 +void defiPin::addPolygon(const char* layerName) { + int *pms, *pdw, *pm; + int i; + + if (numPolys_ == polysAllocated_) { + char** newn; + struct defiPoints** poly; + polysAllocated_ = (polysAllocated_ == 0) ? + 2 : polysAllocated_ * 2; + newn = (char**)malloc(sizeof(char*) * polysAllocated_); + poly = (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + polysAllocated_); + pms = (int*)malloc(polysAllocated_ * sizeof(int)); + pdw = (int*)malloc(polysAllocated_ * sizeof(int)); + pm = (int*)malloc(polysAllocated_ * sizeof(int)); + + for (i = 0; i < numPolys_; i++) { + newn[i] = polygonNames_[i]; + poly[i] = polygons_[i]; + pms[i] = polyMinSpacing_[i]; + pdw[i] = polyEffectiveWidth_[i]; + pm[i] = polyMask_[i]; + } + if (numPolys_ > 0) { + free((char*)(polygons_)); + free((char*)(polygonNames_)); + free((char*)(polyMinSpacing_)); + free((char*)(polyEffectiveWidth_)); + free((char*)(polyMask_)); + } + polygonNames_ = newn; + polygons_ = poly; + polyMinSpacing_ = pms; + polyEffectiveWidth_ = pdw; + polyMask_= pm; + } + polygonNames_[numPolys_] = strdup(layerName); + polygons_[numPolys_] = 0; + polyMinSpacing_[numPolys_] = -1; + polyEffectiveWidth_[numPolys_] = -1; + polyMask_[numPolys_] = 0; + numPolys_ += 1; +} + + +// 5.6 +void defiPin::addPolygonPts(defiGeometries* geom) { + struct defiPoints* p; + int x, y; + int i; + + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + polygons_[numPolys_-1] = p; +} + + +// 5.6 +void defiPin::addPolySpacing(int minSpacing) { + polyMinSpacing_[numPolys_-1] = minSpacing; +} + +void defiPin::addPolyMask(int color) { + polyMask_[numPolys_-1] = color; +} + +// 5.6 +void defiPin::addPolyDesignRuleWidth(int effectiveWidth) { + polyEffectiveWidth_[numPolys_-1] = effectiveWidth; +} + + +// 5.6 +int defiPin::numPolygons() const { + return numPolys_; +} + + +// 5.6 +const char* defiPin::polygonName(int index) const { + if (index < 0 || index > numPolys_) { + defiError(1, 0, "index out of bounds", defData); + return 0; + } + return polygonNames_[index]; +} + +// 5.6 +struct defiPoints defiPin::getPolygon(int index) const { + return *(polygons_[index]); +} + +// 5.6 +int defiPin::hasPolygonSpacing(int index) const{ + if (polyMinSpacing_[index] == -1) + return 0; + return 1; +} + +// 5.6 +int defiPin::hasPolygonDesignRuleWidth(int index) const{ + if (polyEffectiveWidth_[index] == -1) + return 0; + return 1; +} + +// 5.6 +int defiPin::polygonSpacing(int index) const { + return polyMinSpacing_[index]; +} + +int defiPin::polygonMask(int index) const { + return polyMask_[index]; +} + +// 5.6 +int defiPin::polygonDesignRuleWidth(int index) const { + return polyEffectiveWidth_[index]; +} + +// 5.6 +int defiPin::hasNetExpr() const { + return (int)(hasNetExpr_); +} + +// 5.6 +const char* defiPin::netExpr() const { + return netExpr_; +} + +// 5.6 +int defiPin::hasSupplySensitivity() const { + return (int)(hasSupplySens_); +} + +// 5.6 +const char* defiPin::supplySensitivity() const { + return supplySens_; +} + +// 5.6 +int defiPin::hasGroundSensitivity() const { + return (int)(hasGroundSens_); +} + +// 5.6 +const char* defiPin::groundSensitivity() const { + return groundSens_; +} + +// 5.7 +void defiPin::addVia(const char* viaName, int ptX, int ptY, int color) { + + if (numVias_ >= viasAllocated_) { + int i; + char** newl; + int *nx, *ny, *nm; + + viasAllocated_ = viasAllocated_ ? + viasAllocated_ * 2 : 8; + newl = (char**)malloc(viasAllocated_ * sizeof(char*)); + nx = (int*)malloc(viasAllocated_ * sizeof(int)); + ny = (int*)malloc(viasAllocated_ * sizeof(int)); + nm = (int*)malloc(viasAllocated_ * sizeof(int)); + + for (i = 0; i < numVias_; i++) { + newl[i] = viaNames_[i]; + nx[i] = viaX_[i]; + ny[i] = viaY_[i]; + nm[i] = viaMask_[i]; + } + if (numVias_ > 0) { + free((char*)viaNames_); + free((char*)viaX_); + free((char*)viaY_); + free((char*)viaMask_); + } + viaNames_ = newl; + viaX_ = nx; + viaY_ = ny; + viaMask_ = nm; + } + viaNames_[numVias_] = (char*)malloc(strlen(viaName)+1); + strcpy(viaNames_[numVias_], defData->DEFCASE(viaName)); + viaX_[numVias_] = ptX; + viaY_[numVias_] = ptY; + viaMask_[numVias_] = color; + numVias_ += 1; +} + +// 5.7 +int defiPin::numVias() const { + return numVias_; +} + +// 5.7 +const char* defiPin::viaName(int index) const { + if (index < 0 || index > numVias_) { + defiError(1, 0, "index out of bounds", defData); + return 0; + } + return viaNames_[index]; +} + +// 5.7 +int defiPin::viaPtX(int index) const { + return viaX_[index]; +} + +// 5.7 +int defiPin::viaPtY(int index) const { + return viaY_[index]; +} + +int defiPin::viaTopMask(int index) const { + int cutMaskNum = viaMask_[index] / 10; + + if (cutMaskNum) { + return cutMaskNum /= 10; + } else { + return 0; + } +} + +int defiPin::viaCutMask(int index) const { + int cutMaskNum = viaMask_[index] / 10; + + if (cutMaskNum) { + return cutMaskNum % 10; + } else { + return 0; + } +} + +int defiPin::viaBottomMask(int index) const { + return viaMask_[index] % 10; +} +// 5.7 +void defiPin::addPort() { + defiPinPort** pp; + defiPinPort* pv; + int i; + + if (numPorts_ >= portsAllocated_) { + if (portsAllocated_ == 0) { + pinPort_ = (defiPinPort**) malloc(sizeof(defiPinPort*)*4); + portsAllocated_ = 4; + } else { + portsAllocated_ = portsAllocated_ * 2; + pp = (defiPinPort**) malloc(sizeof(defiPinPort*) * + portsAllocated_); + for (i = 0; i < numPorts_; i++) + pp[i] = pinPort_[i]; + free((char*)(pinPort_)); + pinPort_ = pp; + } + } + pv = new defiPinPort(defData); + pv->Init(); + pinPort_[numPorts_] = pv; + numPorts_ += 1; +} + +// 5.7 +void defiPin::addPortLayer(const char* layer) { + int i = numPorts_ - 1; + pinPort_[i]->addLayer(layer); +} + +// 5.7 +void defiPin::addPortLayerSpacing(int minSpacing) { + int i = numPorts_ - 1; + pinPort_[i]->addLayerSpacing(minSpacing); +} + +void defiPin::addPortLayerMask(int color) { + int i = numPorts_ - 1; + pinPort_[i]->addLayerMask(color); +} + +// 5.7 +void defiPin::addPortLayerDesignRuleWidth(int effectiveWidth) { + int i = numPorts_ - 1; + pinPort_[i]->addLayerDesignRuleWidth(effectiveWidth); +} + +// 5.7 +void defiPin::addPortLayerPts(int xl, int yl, int xh, int yh) { + int i = numPorts_ - 1; + pinPort_[i]->addLayerPts(xl, yl, xh, yh); +} + +// 5.7 +void defiPin::addPortPolygon(const char* layerName) { + int i = numPorts_ - 1; + pinPort_[i]->addPolygon(layerName); +} + +// 5.7 +void defiPin::addPortPolySpacing(int minSpacing) { + int i = numPorts_ - 1; + pinPort_[i]->addPolySpacing(minSpacing); +} + +void defiPin::addPortPolyMask(int color) { + int i = numPorts_ - 1; + pinPort_[i]->addPolyMask(color); +} + +// 5.7 +void defiPin::addPortPolyDesignRuleWidth(int effectiveWidth) { + int i = numPorts_ - 1; + pinPort_[i]->addPolyDesignRuleWidth( effectiveWidth); +} + +// 5.7 +void defiPin::addPortPolygonPts(defiGeometries* geom) { + int i = numPorts_ - 1; + pinPort_[i]->addPolygonPts(geom); +} + +// 5.7 +void defiPin::addPortVia(const char* via, int viaX, int viaY, int color) { + int i = numPorts_ - 1; + pinPort_[i]->addVia(via, viaX, viaY, color); +} + +// 5.7 +void defiPin::setPortPlacement(int typ, int x, int y, int orient) { + int i = numPorts_ - 1; + pinPort_[i]->setPlacement(typ, x, y, orient); +} + +// 5.7 +int defiPin::hasPort() const { + return numPorts_; +} + +// 5.7 +int defiPin::numPorts() const { + return numPorts_; +} + +// 5.7 +defiPinPort* defiPin::pinPort(int index) const { + if (index < 0 || index > numPorts_) { + defiError(1, 0, "index out of bounds", defData); + return 0; + } + return pinPort_[index]; +} + +void defiPin::print(FILE* f) const { + int xl, yl, xh,yh; + int i; + + fprintf(f, "PINS '%s' on net '%s'\n", pinName(), + netName()); + if (hasDirection()) + fprintf(f, "+ DIRECTION '%s'\n", direction()); + if (hasNetExpr()) + fprintf(f, "+ NETEXPR '%s'\n", netExpr()); + if (hasSupplySensitivity()) + fprintf(f, "+ SUPPLYSENSITIVITY '%s'\n", + supplySensitivity()); + if (hasGroundSensitivity()) + fprintf(f, "+ GROUNDSENSITIVITY '%s'\n", + groundSensitivity()); + if (hasUse()) + fprintf(f, "+ USE '%s'\n", use()); + if (hasLayer()) { + for (i = 0; i < numLayer(); i++) { + bounds(i, &xl, &yl, &xh, &yh); + fprintf(f, "+ LAYER '%s' %d %d %d %d\n", + layer(i), xl, yl, xh, yh); + } + } + for (i = 0; i < numPolygons(); i++) { + fprintf(f, "+ POLYGON %s", polygonName(i)); + if (hasPolygonSpacing(i)) { + fprintf(f, " SPACING %d", polygonSpacing(i)); + } + if (hasPolygonDesignRuleWidth(i)) { + fprintf(f, " DESIGNRULEWIDTH %d", + polygonDesignRuleWidth(i)); + } + fprintf(f, "\n"); + } + for (i = 0; i < numVias(); i++) { + fprintf(f, "+ VIA %s %d %d\n", viaName(i), + viaPtX(i), viaPtY(i)); + } + if (hasPlacement()) + fprintf(f, " PLACED %s%s%d %d\n", + isFixed() ? " FIXED" : "", + isCover() ? " COVER" : "", + placementX(), + placementY()); + if (hasSpecial()) + fprintf(f, "+ SPECIAL\n"); +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiPinCap.hpp b/lefdef/src/def/def/defiPinCap.hpp new file mode 100644 index 00000000..ae65a055 --- /dev/null +++ b/lefdef/src/def/def/defiPinCap.hpp @@ -0,0 +1,430 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiPinCap_h +#define defiPinCap_h + + +#include "defiKRDefs.hpp" +#include "defiMisc.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiPinCap { +public: + + void setPin(int p); + void setCap(double d); + + int pin() const; + double cap() const; + + void print(FILE* f) const; + +protected: + int pin_; // pin num + double cap_; // capacitance +}; + + +// 5.5 +class defiPinAntennaModel { +public: + defiPinAntennaModel(defrData *data); + void Init(); + + ~defiPinAntennaModel(); + void clear(); + void Destroy(); + + void setAntennaModel(int oxide); + void addAPinGateArea(int value, const char* layer); + void addAPinMaxAreaCar(int value, const char* layer); + void addAPinMaxSideAreaCar(int value, const char* layer); + void addAPinMaxCutCar(int value, const char* layer); + + char* antennaOxide() const; + + int hasAPinGateArea() const; // ANTENNAPINGATEAREA + int numAPinGateArea() const; + int APinGateArea(int index) const; + int hasAPinGateAreaLayer(int index) const; + const char* APinGateAreaLayer(int index) const; + + int hasAPinMaxAreaCar() const; // ANTENNAPINMAXAREACAR + int numAPinMaxAreaCar() const; + int APinMaxAreaCar(int index) const; + int hasAPinMaxAreaCarLayer(int index) const; + const char* APinMaxAreaCarLayer(int index) const; + + int hasAPinMaxSideAreaCar() const; // ANTENNAPINMAXSIDEAREACAR + int numAPinMaxSideAreaCar() const; + int APinMaxSideAreaCar(int index) const; + int hasAPinMaxSideAreaCarLayer(int index) const; + const char* APinMaxSideAreaCarLayer(int index) const; + + int hasAPinMaxCutCar() const; // ANTENNAPINMAXCUTCAR + int numAPinMaxCutCar() const; + int APinMaxCutCar(int index) const; + int hasAPinMaxCutCarLayer(int index) const; + const char* APinMaxCutCarLayer(int index) const; + +protected: + char* oxide_; + + int numAPinGateArea_; // 5.4 + int APinGateAreaAllocated_; + int* APinGateArea_; // 5.4 AntennaPinGateArea + char** APinGateAreaLayer_; // 5.4 Layer + + int numAPinMaxAreaCar_; // 5.4 + int APinMaxAreaCarAllocated_; + int* APinMaxAreaCar_; // 5.4 AntennaPinMaxAreaCar + char** APinMaxAreaCarLayer_; // 5.4 Layer + + int numAPinMaxSideAreaCar_; // 5.4 + int APinMaxSideAreaCarAllocated_; + int* APinMaxSideAreaCar_; // 5.4 AntennaPinMaxSideAreaCar + char** APinMaxSideAreaCarLayer_; // 5.4 Layer + + int numAPinMaxCutCar_; // 5.4 + int APinMaxCutCarAllocated_; + int* APinMaxCutCar_; // 5.4 AntennaPinMaxCutCar + char** APinMaxCutCarLayer_; // 5.4 Layer + + defrData *defData; +}; + +class defiPinPort { // 5.7 +public: + defiPinPort(defrData *data); + void Init(); + + ~defiPinPort(); + + void clear(); + + void addLayer(const char* layer); + void addLayerSpacing(int minSpacing); + void addLayerMask(int mask); + void addLayerDesignRuleWidth(int effectiveWidth); + void addLayerPts(int xl, int yl, int xh, int yh); + void addPolygon(const char* layerName); + void addPolySpacing(int minSpacing); + void addPolyMask(int mask); + void addPolyDesignRuleWidth(int effectiveWidth); + void addPolygonPts(defiGeometries* geom); + void addVia(const char* via, int viaX, int viaY, int color = 0); + void setPlacement(int typ, int x, int y, int orient); + + int numLayer() const; + const char* layer(int index) const; + void bounds(int index, int* xl, int* yl, int* xh, int* yh) const; + int hasLayerSpacing(int index) const; + int hasLayerDesignRuleWidth(int index) const; + int layerSpacing(int index) const; + int layerMask(int index) const; + int layerDesignRuleWidth(int index) const; + int numPolygons() const; + const char* polygonName(int index) const; + defiPoints getPolygon(int index) const; + int hasPolygonSpacing(int index) const; + int hasPolygonDesignRuleWidth(int index) const; + int polygonSpacing(int index) const; + int polygonDesignRuleWidth(int index) const; + int polygonMask(int index) const; + int numVias() const; + const char* viaName(int index) const; + int viaPtX (int index) const; + int viaPtY (int index) const; + int viaTopMask (int index) const; + int viaCutMask (int index) const; + int viaBottomMask (int index) const; + int hasPlacement() const; + int isPlaced() const; + int isCover() const; + int isFixed() const; + int placementX() const; + int placementY() const; + int orient() const; + const char* orientStr() const; + +protected: + int layersAllocated_; + int numLayers_; + char** layers_; + int *layerMinSpacing_; + int *layerEffectiveWidth_; + int *xl_, *yl_, *xh_, *yh_; + int *layerMask_; + int polysAllocated_; + int numPolys_; + char** polygonNames_; + int *polyMinSpacing_; + int *polyMask_; + int *polyEffectiveWidth_; + defiPoints** polygons_; + int viasAllocated_; + int numVias_; + char** viaNames_; + int *viaX_; + int *viaY_; + int *viaMask_; + char placeType_; + int x_, y_; + char orient_; + + defrData *defData; +}; + +class defiPin { +public: + defiPin(defrData *data); + void Init(); + + ~defiPin(); + void Destroy(); + + void Setup(const char* pinName, const char* netName); + void setDirection(const char* dir); + void setUse(const char* use); + // 5.6 setLayer is changed to addLayer due to multiple LAYER are allowed + // in 5.6 + void addLayer(const char* layer); + void addLayerMask(int mask); // 5.8 + void addLayerSpacing(int minSpacing); // 5.6 + void addLayerDesignRuleWidth(int effectiveWidth); // 5.6 + void addLayerPts(int xl, int yl, int xh, int yh); + void addPolygon(const char* layerName); // 5.6 + void addPolyMask(int mask); // 5.8 + void addPolySpacing(int minSpacing); // 5.6 + void addPolyDesignRuleWidth(int effectiveWidth); // 5.6 + void addPolygonPts(defiGeometries* geom); // 5.6 + void setNetExpr(const char* netExpr); // 5.6 + void setSupplySens(const char* pinName); // 5.6 + void setGroundSens(const char* pinName); // 5.6 + void setPlacement(int typ, int x, int y, int orient); + void setSpecial(); + void addAntennaModel(int oxide); // 5.5 + void addAPinPartialMetalArea(int value, const char* layer); + void addAPinPartialMetalSideArea(int value, const char* layer); + void addAPinGateArea(int value, const char* layer); + void addAPinDiffArea(int value, const char* layer); + void addAPinMaxAreaCar(int value, const char* layer); + void addAPinMaxSideAreaCar(int value, const char* layer); + void addAPinPartialCutArea(int value, const char* layer); + void addAPinMaxCutCar(int value, const char* layer); + void addVia(const char* via, int viaX, int viaY, int color = 0); // 5.7 + // 5.7 port statements, which may have LAYER, POLYGON, &| VIA + void addPort(); // 5.7 + void addPortLayer(const char* layer); // 5.7 + void addPortLayerSpacing(int minSpacing); // 5.7 + void addPortLayerDesignRuleWidth(int effectiveWidth); // 5.7 + void addPortLayerPts(int xl, int yl, int xh, int yh); // 5.7 + void addPortLayerMask(int color); // 5.8 + void addPortPolygon(const char* layerName); // 5.7 + void addPortPolySpacing(int minSpacing); // 5.7 + void addPortPolyDesignRuleWidth(int effectiveWidth); // 5.7 + void addPortPolygonPts(defiGeometries* geom); // 5.7 + void addPortPolyMask(int color); // 5.8 + void addPortVia(const char* via, int viaX, int viaY, int color = 0); // 5.7 + void setPortPlacement(int typ, int x, int y, int orient); // 5.7 - 5.8 + + void clear(); + + void changePinName(const char* pinName); // For OA to modify the pinName + + const char* pinName() const; + const char* netName() const; + // optional parts + int hasDirection() const; + int hasUse() const; + int hasLayer() const; + int hasPlacement() const; + int isUnplaced() const; + int isPlaced() const; + int isCover() const; + int isFixed() const; + int placementX() const; + int placementY() const; + const char* direction() const; + const char* use() const; + int numLayer() const; + const char* layer(int index) const; + void bounds(int index, int* xl, int* yl, int* xh, int* yh) const; + int layerMask(int index) const; // 5.8 + int hasLayerSpacing(int index) const; // 5.6 + int hasLayerDesignRuleWidth(int index) const; // 5.6 + int layerSpacing(int index) const; // 5.6 + int layerDesignRuleWidth(int index) const; // 5.6 + int numPolygons() const; // 5.6 + const char* polygonName(int index) const; // 5.6 + defiPoints getPolygon(int index) const; // 5.6 + int polygonMask(int index) const; // 5.8 + int hasPolygonSpacing(int index) const; // 5.6 + int hasPolygonDesignRuleWidth(int index) const; // 5.6 + int polygonSpacing(int index) const; // 5.6 + int polygonDesignRuleWidth(int index) const; // 5.6 + int hasNetExpr() const; // 5.6 + int hasSupplySensitivity() const; // 5.6 + int hasGroundSensitivity() const; // 5.6 + const char* netExpr() const; // 5.6 + const char* supplySensitivity() const; // 5.6 + const char* groundSensitivity() const; // 5.6 + int orient() const; + const char* orientStr() const; + int hasSpecial() const; + int numVias() const; // 5.7 + const char* viaName(int index) const; // 5.7 + int viaTopMask(int index) const; // 5.8 + int viaCutMask(int index) const; // 5.8 + int viaBottomMask(int index) const; // 5.8 + int viaPtX (int index) const; // 5.7 + int viaPtY (int index) const; // 5.7 + + // 5.4 + int hasAPinPartialMetalArea() const; // ANTENNAPINPARTIALMETALAREA + int numAPinPartialMetalArea() const; + int APinPartialMetalArea(int index) const; + int hasAPinPartialMetalAreaLayer(int index) const; + const char* APinPartialMetalAreaLayer(int index) const; + + int hasAPinPartialMetalSideArea() const; // ANTENNAPINPARTIALMETALSIDEAREA + int numAPinPartialMetalSideArea() const; + int APinPartialMetalSideArea(int index) const; + int hasAPinPartialMetalSideAreaLayer(int index) const; + const char* APinPartialMetalSideAreaLayer(int index) const; + + int hasAPinDiffArea() const; // ANTENNAPINDIFFAREA + int numAPinDiffArea() const; + int APinDiffArea(int index) const; + int hasAPinDiffAreaLayer(int index) const; + const char* APinDiffAreaLayer(int index) const; + + int hasAPinPartialCutArea() const; // ANTENNAPINPARTIALCUTAREA + int numAPinPartialCutArea() const; + int APinPartialCutArea(int index) const; + int hasAPinPartialCutAreaLayer(int index) const; + const char* APinPartialCutAreaLayer(int index) const; + + // 5.5 + int numAntennaModel() const; + defiPinAntennaModel* antennaModel(int index) const; + + // 5.7 + int hasPort() const; + int numPorts() const; + defiPinPort* pinPort(int index) const; + void print(FILE* f) const; + +protected: + int pinNameLength_; // allocated size of pin name + char* pinName_; + int netNameLength_; // allocated size of net name + char* netName_; + char hasDirection_; + char hasUse_; + char placeType_; + char orient_; // orient 0-7 + int useLength_; // allocated size of length + char* use_; + int directionLength_; // allocated size of direction + char* direction_; + char** layers_; // 5.6, changed to array + int *xl_, *yl_, *xh_, *yh_; // 5.6, changed to arrays + int *layerMinSpacing_; // 5.6, SPACING in LAYER + int *layerEffectiveWidth_; // 5.6, DESIGNRULEWIDTH in LAYER + int layersAllocated_; // 5.6 + int numLayers_; // 5.6 + int *layerMask_; // 5.8 + char** polygonNames_; // 5.6 layerName for POLYGON + int *polyMinSpacing_; // 5.6, SPACING in POLYGON + int *polyEffectiveWidth_; // 5.6, DESIGNRULEWIDTH in POLYGON + int *polyMask_; // 5.8 + int numPolys_; // 5.6 + int polysAllocated_; // 5.6 + defiPoints** polygons_; // 5.6 + int x_, y_; // placement + int hasSpecial_; + int numVias_; // 5.7 + int viasAllocated_; // 5.7 + char** viaNames_; // 5.7 + int *viaX_; // 5.7 + int *viaY_; // 5.7 + int *viaMask_; // 5.8 + int numPorts_; // 5.7 + int portsAllocated_; // 5.7 + defiPinPort ** pinPort_; // 5.7 + + // 5.5 AntennaModel + int numAntennaModel_; + int antennaModelAllocated_; + defiPinAntennaModel** antennaModel_; + + int numAPinPartialMetalArea_; // 5.4 + int APinPartialMetalAreaAllocated_; + int* APinPartialMetalArea_; // 5.4 AntennaPinPartialMetalArea + char** APinPartialMetalAreaLayer_; // 5.4 Layer + + int numAPinPartialMetalSideArea_; // 5.4 + int APinPartialMetalSideAreaAllocated_; + int* APinPartialMetalSideArea_; // 5.4 AntennaPinPartialMetalSideArea + char** APinPartialMetalSideAreaLayer_; // 5.4 Layer + + int numAPinDiffArea_; // 5.4 + int APinDiffAreaAllocated_; + int* APinDiffArea_; // 5.4 AntennaPinDiffArea + char** APinDiffAreaLayer_; // 5.4 Layer + + int numAPinPartialCutArea_; // 5.4 + int APinPartialCutAreaAllocated_; + int* APinPartialCutArea_; // 5.4 AntennaPinPartialCutArea + char** APinPartialCutAreaLayer_; // 5.4 Layer + + int netExprLength_; // 5.6 + char hasNetExpr_; // 5.6 + char* netExpr_; // 5.6 + int supplySensLength_; // 5.6 + char hasSupplySens_; // 5.6 + char* supplySens_; // 5.6 + int groundSensLength_; // 5.6 + char hasGroundSens_; // 5.6 + char* groundSens_; // 5.6 + + defrData *defData; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiPinProp.cpp b/lefdef/src/def/def/defiPinProp.cpp new file mode 100644 index 00000000..63b5fa0e --- /dev/null +++ b/lefdef/src/def/def/defiPinProp.cpp @@ -0,0 +1,314 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiDebug.hpp" +#include "defiPinProp.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiPinProp +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + + + +defiPinProp::defiPinProp(defrData *data) +: defData(data) +{ + Init(); +} + + +void defiPinProp::Init() { + instName_ = (char*)malloc(16); + pinName_ = (char*)malloc(16); + pinNameSize_ = 16; + instNameSize_ = 16; + isPin_ = 0; + numProps_ = 0; + propsAllocated_ = 2; + propNames_ = (char**)malloc(sizeof(char*)*2); + propValues_ = (char**)malloc(sizeof(char*)*2); + propDValues_ = (double*)malloc(sizeof(double)*2); + propTypes_ = (char*)malloc(sizeof(char)*2); +} + + +defiPinProp::~defiPinProp() { + Destroy(); +} + + +void defiPinProp::Destroy() { + clear(); + free(instName_); + free(pinName_); + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); +} + + +void defiPinProp::clear() { + int i; + for (i = 0; i < numProps_; i++) { + free(propNames_[i]); + free(propValues_[i]); + propDValues_[i] = 0; + } + numProps_ = 0; + isPin_ = 0; +} + + +void defiPinProp::setName(const char* inst, const char* pin) { + int len = strlen(inst) + 1; + + if ((strcmp(inst, "PIN") == 0) || (strcmp(inst,"pin") == 0)) { + isPin_ = 1; + instName_[0] = '\0'; /* make sure to clear any prev inst */ + } else { + if (instNameSize_ < len) { + instNameSize_ = len; + free(instName_); + instName_ = (char*)malloc(len); + } + strcpy(instName_, defData->DEFCASE(inst)); + } + + len = strlen(pin) + 1; + if (pinNameSize_ < len) { + pinNameSize_ = len; + free(pinName_); + pinName_ = (char*)malloc(len); + } + strcpy(pinName_, defData->DEFCASE(pin)); +} + + +int defiPinProp::isPin() const { + return isPin_ ? 1 : 0; +} + + +const char* defiPinProp::instName() const { + return instName_; +} + + +const char* defiPinProp::pinName() const { + return pinName_; +} + + +void defiPinProp::addProperty(const char* name, const char* value, + const char type) { + int len; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = propNames_[i]; + nv[i] = propValues_[i]; + nd[i] = propDValues_[i]; + nt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + propNames_ = nn; + propValues_ = nv; + propDValues_ = nd; + propTypes_ = nt; + } + len = strlen(name) + 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + propDValues_[numProps_] = 0; + propTypes_[numProps_] = type; + numProps_ += 1; +} + + +void defiPinProp::addNumProperty(const char* name, const double d, + const char* value, const char type) { + int len; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = propNames_[i]; + nv[i] = propValues_[i]; + nd[i] = propDValues_[i]; + nt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + propNames_ = nn; + propValues_ = nv; + propDValues_ = nd; + propTypes_ = nt; + } + len = strlen(name) + 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + propDValues_[numProps_] = d; + propTypes_[numProps_] = type; + numProps_ += 1; +} + + +int defiPinProp::numProps() const { + return numProps_; +} + + +const char* defiPinProp::propName(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6120): The index number %d specified for the PIN PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6120, msg, defData); + return 0; + } + return propNames_[index]; +} + + +const char* defiPinProp::propValue(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6120): The index number %d specified for the PIN PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6120, msg, defData); + return 0; + } + return propValues_[index]; +} + + +double defiPinProp::propNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6120): The index number %d specified for the PIN PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6120, msg, defData); + return 0; + } + return propDValues_[index]; +} + + +const char defiPinProp::propType(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6120): The index number %d specified for the PIN PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6120, msg, defData); + return 0; + } + return propTypes_[index]; +} + + +int defiPinProp::propIsNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6120): The index number %d specified for the PIN PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6120, msg, defData); + return 0; + } + return propDValues_[index] ? 1 : 0; +} + + +int defiPinProp::propIsString(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6120): The index number %d specified for the PIN PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6120, msg, defData); + return 0; + } + return propDValues_[index] ? 0 : 1; +} + + +void defiPinProp::print(FILE* f) const { + int i; + + fprintf(f, "PinProp %s %s\n", instName(), + pinName()); + + for (i = 0; i < numProps(); i++) { + fprintf(f, " %s %s\n", propName(i), + propValue(i)); + } +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiPinProp.hpp b/lefdef/src/def/def/defiPinProp.hpp new file mode 100644 index 00000000..41bad741 --- /dev/null +++ b/lefdef/src/def/def/defiPinProp.hpp @@ -0,0 +1,91 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiPinProp_h +#define defiPinProp_h + +#include "defiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiPinProp { +public: + defiPinProp(defrData *data); + void Init(); + + ~defiPinProp(); + void Destroy(); + + void clear(); + + void setName(const char* inst, const char* pin); + void addProperty(const char* name, const char* value, const char type); + void addNumProperty(const char* name, const double d, + const char* value, const char type); + + int isPin() const; + const char* instName() const; + const char* pinName() const; + + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + void print(FILE* f) const; + +protected: + char isPin_; + int instNameSize_; + char* instName_; + int pinNameSize_; + char* pinName_; + + int numProps_; + int propsAllocated_; + char** propNames_; + char** propValues_; + double* propDValues_; + char* propTypes_; + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiProp.cpp b/lefdef/src/def/def/defiProp.cpp new file mode 100644 index 00000000..74309138 --- /dev/null +++ b/lefdef/src/def/def/defiProp.cpp @@ -0,0 +1,223 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiProp.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +defiProp::defiProp(defrData *data) +: defData(data) +{ + Init(); +} + + +void defiProp::Init() { + stringLength_ = 16; + stringData_ = (char*)malloc(16); + nameSize_ = 16; + propName_ = (char*)malloc(16); + clear(); +} + + +void defiProp::Destroy() { + free(stringData_); + free(propName_); +} + + +defiProp::~defiProp() { + Destroy(); +} + + +void defiProp::setPropType(const char* typ, const char* string) { + int len; + propType_ = (char*)typ; + if ((len = strlen(string)+1) > nameSize_) + bumpName(len); + strcpy(propName_, defData->DEFCASE(string)); +} + + +void defiProp::setRange(double left, double right) { + hasRange_ = 1; + left_ = left; + right_ = right; +} + + +void defiProp::setNumber(double d) { + hasNumber_ = 1; + d_ = d; +} + + +void defiProp::setPropInteger() { + dataType_ = 'I'; +} + + +void defiProp::setPropReal() { + dataType_ = 'R'; +} + + +void defiProp::setPropString() { + dataType_ = 'S'; +} + + +void defiProp::setPropNameMapString(const char* string) { + int len; + dataType_ = 'N'; + hasNameMapString_ = 1; + if ((len = strlen(string)+1) > stringLength_) + bumpSize(len); + strcpy(stringData_, defData->DEFCASE(string)); +} + + +void defiProp::setPropQString(const char* string) { + int len; + dataType_ = 'Q'; + if ((len = strlen(string)+1) > stringLength_) + bumpSize(len); + strcpy(stringData_, defData->DEFCASE(string)); +} + + +const char* defiProp::string() const { + return stringData_; +} + + +const char* defiProp::propType() const { + return propType_; +} + + +int defiProp::hasNameMapString() const { + return (int)(hasNameMapString_); +} + + +int defiProp::hasNumber() const { + return (int)(hasNumber_); +} + + +int defiProp::hasRange() const { + return (int)(hasRange_); +} + + +double defiProp::number() const { + return d_; +} + + +double defiProp::left() const { + return left_; +} + + +double defiProp::right() const { + return right_; +} + + +void defiProp::bumpSize(int size) { + free(stringData_); + stringData_ = (char*)malloc(size); + stringLength_ = size; + *(stringData_) = '\0'; +} + + +void defiProp::bumpName(int size) { + free(propName_); + propName_ = (char*)malloc(size); + nameSize_ = size; + *(propName_) = '\0'; +} + + + +void defiProp::clear() { + if (stringData_) + *(stringData_) = '\0'; + if (propName_) + *(propName_) = '\0'; + propType_ = 0; + hasRange_ = 0; + hasNumber_ = 0; + hasNameMapString_ = 0; + dataType_ = 'B'; /* bogus */ + d_ = left_ = right_ = 0.0; +} + + +int defiProp::hasString() const { + return *(stringData_) ? 1 : 0 ; +} + + +const char* defiProp::propName() const { + return (propName_); +} + + +char defiProp::dataType() const { + return (dataType_); +} + + +void defiProp::print(FILE* f) const { + fprintf(f, "Prop type '%s'\n", propType()); + if (hasString()) { + fprintf(f, " string '%s'\n", string()); + } + if (hasNumber()) { + fprintf(f, " number %5.2f\n", number()); + } + if (hasRange()) { + fprintf(f, " range %5.2f - %5.2f\n", + left(), right()); + } +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiProp.hpp b/lefdef/src/def/def/defiProp.hpp new file mode 100644 index 00000000..83b4cd45 --- /dev/null +++ b/lefdef/src/def/def/defiProp.hpp @@ -0,0 +1,99 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiProp_h +#define defiProp_h + +#include "defiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +// Struct holds the data for one property. +class defiProp { +public: + defiProp(defrData *data); + void Init(); + + void Destroy(); + ~defiProp(); + + void setPropType(const char* typ, const char* string); + void setRange(double left, double right); + void setNumber(double num); + void setPropInteger(); + void setPropReal(); + void setPropString(); + void setPropQString(const char* string); + void setPropNameMapString(const char* string); + void clear(); + + const char* string() const; + const char* propType() const; + const char* propName() const; + char dataType() const; + // either I:integer R:real S:string Q:quotedstring N:nameMapString + int hasNumber() const; + int hasRange() const; + int hasString() const; + int hasNameMapString() const; + double number() const; + double left() const; + double right() const; + + void bumpSize(int size); + void bumpName(int size); + + void print(FILE* f) const; + +protected: + char* propType_; // "design" ... + char* propName_; // name. + int nameSize_; // allocated size of name. + char hasRange_; // either 0:NO or 1:YES. + char hasNumber_; // either 0:NO or 1:YES. + char hasNameMapString_; + char dataType_; // either I:integer R:real S:string Q:quotedstring. + // N:nameMapString + char* stringData_; // if it is a string the data is here. + int stringLength_; // allocated size of stringData. + double left_, right_; // if it has a range the numbers are here. + double d_; // if it is a real or int the number is here. + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiPropType.cpp b/lefdef/src/def/def/defiPropType.cpp new file mode 100644 index 00000000..40a285c8 --- /dev/null +++ b/lefdef/src/def/def/defiPropType.cpp @@ -0,0 +1,131 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiPropType.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + + +defiPropType::defiPropType() { + Init(); +} + + +void defiPropType::Init() { + numProperties_ = 0; + propertiesAllocated_ = 0; + propNames_ = 0; + propTypes_ = 0; +} + + +void defiPropType::Clear() { + int i; + + for (i = 0; i < numProperties_; i++) { + free(propNames_[i]); + } + numProperties_ = 0; + propertiesAllocated_ = 0; +} + + +void defiPropType::Destroy() { + Clear(); + if (propNames_) + free(propNames_); + if (propTypes_) + free(propTypes_); +} + + +defiPropType::~defiPropType() { + Destroy(); +} + + +void defiPropType::setPropType(const char* name, const char type) { + int len; + + if (numProperties_ == propertiesAllocated_) + bumpProps(); + len = strlen(name) + 1; + propNames_[numProperties_] = (char*)malloc(len); + strcpy(propNames_[numProperties_], name); + propTypes_[numProperties_] = type; + numProperties_ += 1; +} + + +void defiPropType::bumpProps() { + int lim = propertiesAllocated_; + int news ; + char** newpn; + char* newt; + + news = lim ? lim + lim : 2; + + newpn = (char**)malloc(sizeof(char*)*news); + newt = (char*)malloc(sizeof(char)*news); + + lim = propertiesAllocated_ = news; + + if (lim > 2) { + int i; + for (i = 0; i < numProperties_; i++) { + newpn[i] = propNames_[i]; + newt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propTypes_)); + } + propNames_ = newpn; + propTypes_ = newt; +} + + +const char defiPropType::propType(char* name) const { + int i; + + // Name is NULL, error + if (!name) + return('N'); + + for (i = 0; i < numProperties_; i++) { + if (strcmp(name, propNames_[i]) == 0) + return(propTypes_[i]); // found the prop name + } + return('N'); // Can't found the name +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiPropType.hpp b/lefdef/src/def/def/defiPropType.hpp new file mode 100644 index 00000000..becd62ee --- /dev/null +++ b/lefdef/src/def/def/defiPropType.hpp @@ -0,0 +1,66 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiPropType_h +#define defiPropType_h + +#include "defiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Struct holds the data type for one property, if the property is +// either REAL or INTEGER. +class defiPropType { +public: + defiPropType(); + void Init(); + + void Destroy(); + ~defiPropType(); + + void setPropType(const char* name, const char type); + void Clear(); + + const char propType(char* name) const; + void bumpProps(); + +protected: + int numProperties_; + int propertiesAllocated_; + char** propNames_; // name. + char* propTypes_; // 'R' == "REAL", 'I' == "INTEGER" +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiRegion.cpp b/lefdef/src/def/def/defiRegion.cpp new file mode 100644 index 00000000..0fdda45f --- /dev/null +++ b/lefdef/src/def/def/defiRegion.cpp @@ -0,0 +1,409 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiRegion.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiRegion +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiRegion::defiRegion(defrData *data) +: defData(data) +{ + Init(); +} + + +void defiRegion::Init() { + name_ = 0; + nameLength_ = 0; + type_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + numProps_ = 0; + propsAllocated_ = 2; + propNames_ = (char**)malloc(sizeof(char*)*2); + propValues_ = (char**)malloc(sizeof(char*)*2); + propDValues_ = (double*)malloc(sizeof(double)*2); + propTypes_ = (char*)malloc(sizeof(char)*2); + clear(); + numRectangles_ = 0; + rectanglesAllocated_ = 1; + xl_ = (int*)malloc(sizeof(int)*1); + yl_ = (int*)malloc(sizeof(int)*1); + xh_ = (int*)malloc(sizeof(int)*1); + yh_ = (int*)malloc(sizeof(int)*1); +} + + +defiRegion::~defiRegion() { + Destroy(); +} + + +void defiRegion::clear() { + int i; + for (i = 0; i < numProps_; i++) { + free(propNames_[i]); + free(propValues_[i]); + propDValues_[i] = 0; + } + numProps_ = 0; + numRectangles_ = 0; + if (type_) free(type_); + type_ = 0; +} + + +void defiRegion::Destroy() { + if (name_) free(name_); + clear(); + name_ = 0; + nameLength_ = 0; + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); +} + + +void defiRegion::addRect(int xl, int yl, int xh, int yh) { + if (numRectangles_ == rectanglesAllocated_) { + int i; + int max = rectanglesAllocated_ = rectanglesAllocated_ * 2; + int* newxl = (int*)malloc(sizeof(int)*max); + int* newyl = (int*)malloc(sizeof(int)*max); + int* newxh = (int*)malloc(sizeof(int)*max); + int* newyh = (int*)malloc(sizeof(int)*max); + for (i = 0; i < numRectangles_; i++) { + newxl[i] = xl_[i]; + newyl[i] = yl_[i]; + newxh[i] = xh_[i]; + newyh[i] = yh_[i]; + } + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + xl_ = newxl; + yl_ = newyl; + xh_ = newxh; + yh_ = newyh; + } + xl_[numRectangles_] = xl; + yl_[numRectangles_] = yl; + xh_[numRectangles_] = xh; + yh_[numRectangles_] = yh; + numRectangles_ += 1; +} + + +void defiRegion::setup(const char* name) { + int len = strlen(name) + 1; + + clear(); + + if (len > nameLength_) { + if (name_) free(name_); + nameLength_ = len; + name_ = (char*)malloc(len); + } + + strcpy(name_, defData->DEFCASE(name)); + +} + +void defiRegion::addProperty(const char* name, const char* value, + const char type) { + int len; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = propNames_[i]; + nv[i] = propValues_[i]; + nd[i] = propDValues_[i]; + nt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + propNames_ = nn; + propValues_ = nv; + propDValues_ = nd; + propTypes_ = nt; + } + len = strlen(name) + 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + propDValues_[numProps_] = 0; + propTypes_[numProps_] = type; + numProps_ += 1; +} + +void defiRegion::addNumProperty(const char* name, const double d, + const char* value, const char type) { + int len; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = propNames_[i]; + nv[i] = propValues_[i]; + nd[i] = propDValues_[i]; + nt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + propNames_ = nn; + propValues_ = nv; + propDValues_ = nd; + propTypes_ = nt; + } + len = strlen(name) + 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + propDValues_[numProps_] = d; + propTypes_[numProps_] = type; + numProps_ += 1; +} + + +void defiRegion::setType(const char* type) { + int len; + if (type_) free(type_); + len = strlen(type) + 1; + type_ = (char*)malloc(len); + strcpy(type_, defData->DEFCASE(type)); +} + + +int defiRegion::hasType() const { + return type_ ? 1 : 0; +} + + +const char* defiRegion::type() const { + return type_; +} + + +int defiRegion::numRectangles() const { + return numRectangles_; +} + + +int defiRegion::numProps() const { + return numProps_; +} + + +const char* defiRegion::propName(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6130): The index number %d specified for the REGION PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6130, msg, defData); + return 0; + } + return propNames_[index]; +} + + +const char* defiRegion::propValue(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6130): The index number %d specified for the REGION PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6130, msg, defData); + return 0; + } + return propValues_[index]; +} + + +double defiRegion::propNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6130): The index number %d specified for the REGION PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6130, msg, defData); + return 0; + } + return propDValues_[index]; +} + + +const char defiRegion::propType(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6130): The index number %d specified for the REGION PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6130, msg, defData); + return 0; + } + return propTypes_[index]; +} + +int defiRegion::propIsNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6130): The index number %d specified for the REGION PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6130, msg, defData); + return 0; + } + return propDValues_[index] ? 1 : 0; +} + +int defiRegion::propIsString(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6130): The index number %d specified for the REGION PROPERTY is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6130, msg, defData); + return 0; + } + return propDValues_[index] ? 0 : 1; +} + +const char* defiRegion::name() const { + return name_; +} + + +int defiRegion::xl(int index) const { + char msg[160]; + if (index < 0 || index >= numRectangles_) { + sprintf (msg, "ERROR (DEFPARS-6131): The index number %d specified for the REGION RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numRectangles_); + defiError(0, 6131, msg, defData); + return 0; + } + return xl_[index]; +} + + +int defiRegion::yl(int index) const { + char msg[160]; + if (index < 0 || index >= numRectangles_) { + sprintf (msg, "ERROR (DEFPARS-6131): The index number %d specified for the REGION RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numRectangles_); + defiError(0, 6131, msg, defData); + return 0; + } + return yl_[index]; +} + + +int defiRegion::xh(int index) const { + char msg[160]; + if (index < 0 || index >= numRectangles_) { + sprintf (msg, "ERROR (DEFPARS-6131): The index number %d specified for the REGION RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numRectangles_); + defiError(0, 6131, msg, defData); + return 0; + } + return xh_[index]; +} + + +int defiRegion::yh(int index) const { + char msg[160]; + if (index < 0 || index >= numRectangles_) { + sprintf (msg, "ERROR (DEFPARS-6131): The index number %d specified for the REGION RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numRectangles_); + defiError(0, 6131, msg, defData); + return 0; + } + return yh_[index]; +} + + +void defiRegion::print(FILE* f) const { + int i; + fprintf(f, "Region '%s'", name()); + for (i = 0; i < numRectangles(); i++) { + fprintf(f, " %d %d %d %d", + xl(i), + yl(i), + xh(i), + yh(i)); + } + fprintf(f, "\n"); +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiRegion.hpp b/lefdef/src/def/def/defiRegion.hpp new file mode 100644 index 00000000..3fe21508 --- /dev/null +++ b/lefdef/src/def/def/defiRegion.hpp @@ -0,0 +1,107 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiRegion_h +#define defiRegion_h + +#include "defiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +// Struct holds the data for one property. +class defiRegion { +public: + defiRegion(defrData *data); + void Init(); + + void Destroy(); + ~defiRegion(); + + void clear(); + void setup(const char* name); + void addRect(int xl, int yl, int xh, int yh); + void addProperty(const char* name, const char* value, const char type); + void addNumProperty(const char* name, const double d, + const char* value, const char type); + void setType(const char* type); // 5.4.1 + + const char* name() const; + + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + int hasType() const; // 5.4.1 + const char* type() const; // 5.4.1 + + int numRectangles() const; + int xl(int index) const; + int yl(int index) const; + int xh(int index) const; + int yh(int index) const; + + void print(FILE* f) const; + +protected: + char* name_; + int nameLength_; + + int numRectangles_; + int rectanglesAllocated_; + int* xl_; + int* yl_; + int* xh_; + int* yh_; + + int numProps_; + int propsAllocated_; + char** propNames_; + char** propValues_; + double* propDValues_; + char* propTypes_; + + char* type_; + + defrData *defData; +}; + + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiRowTrack.cpp b/lefdef/src/def/def/defiRowTrack.cpp new file mode 100644 index 00000000..85ee0314 --- /dev/null +++ b/lefdef/src/def/def/defiRowTrack.cpp @@ -0,0 +1,626 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "defiRowTrack.hpp" +#include "defiDebug.hpp" +#include "lex.h" +#include "defiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiRow +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiRow::defiRow(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiRow::Init() { + nameLength_ = 0; + name_ = 0; + macroLength_ = 0; + macro_ = 0; + orient_ = 0; + x_ = 0.0; + y_ = 0.0; + xStep_ = 0.0; + yStep_ = 0.0; + xNum_ = 0.0; + yNum_ = 0.0; + hasDo_ = 0; + hasDoStep_ = 0; + numProps_ = 0; + propsAllocated_ = 2; + propNames_ = (char**)malloc(sizeof(char*)*2); + propValues_ = (char**)malloc(sizeof(char*)*2); + propDValues_ = (double*)malloc(sizeof(double)*2); + propTypes_ = (char*)malloc(sizeof(char)*2); +} + + +defiRow::~defiRow() { + Destroy(); +} + + +void defiRow::Destroy() { + clear(); + if (name_) free(name_); + if (macro_) free(macro_); + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); +} + + +void defiRow::clear() { + int i; + for (i = 0; i < numProps_; i++) { + free(propNames_[i]); + free(propValues_[i]); + propDValues_[i] = 0; + } + hasDo_ = 0; + hasDoStep_ = 0; + numProps_ = 0; +} + + +void defiRow::setup(const char* name, const char* macro, double x, double y, + int orient) { + int len = strlen(name) + 1; + + clear(); + + if (len > nameLength_) { + if (name_) free(name_); + nameLength_ = len; + name_ = (char*)malloc(len); + } + strcpy(name_, defData->DEFCASE(name)); + + len = strlen(macro) + 1; + if (len > macroLength_) { + if (macro_) free(macro_); + macroLength_ = len; + macro_ = (char*)malloc(len); + } + strcpy(macro_, defData->DEFCASE(macro)); + + x_ = x; + y_ = y; + xStep_ = 0.0; + yStep_ = 0.0; + xNum_ = 0.0; + yNum_ = 0.0; + orient_ = orient; + +} + + +void defiRow::setDo(double x_num, double y_num, + double x_step, double y_step) { + xStep_ = x_step; + yStep_ = y_step; + xNum_ = x_num; + yNum_ = y_num; + hasDo_ = 1; +} + + +void defiRow::setHasDoStep() { + hasDoStep_ = 1; +} + + +void defiRow::addProperty(const char* name, const char* value, const char type) +{ + int len; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = propNames_[i]; + nv[i] = propValues_[i]; + nd[i] = propDValues_[i]; + nt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + propNames_ = nn; + propValues_ = nv; + propDValues_ = nd; + propTypes_ = nt; + } + len = strlen(name) + 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + propDValues_[numProps_] = 0; + propTypes_[numProps_] = type; + numProps_ += 1; +} + + +void defiRow::addNumProperty(const char* name, const double d, + const char* value, const char type) +{ + int len; + if (numProps_ == propsAllocated_) { + int i; + char** nn; + char** nv; + double* nd; + char* nt; + propsAllocated_ *= 2; + nn = (char**)malloc(sizeof(char*)*propsAllocated_); + nv = (char**)malloc(sizeof(char*)*propsAllocated_); + nd = (double*)malloc(sizeof(double)*propsAllocated_); + nt = (char*)malloc(sizeof(char)*propsAllocated_); + for (i = 0; i < numProps_; i++) { + nn[i] = propNames_[i]; + nv[i] = propValues_[i]; + nd[i] = propDValues_[i]; + nt[i] = propTypes_[i]; + } + free((char*)(propNames_)); + free((char*)(propValues_)); + free((char*)(propDValues_)); + free((char*)(propTypes_)); + propNames_ = nn; + propValues_ = nv; + propDValues_ = nd; + propTypes_ = nt; + } + len = strlen(name) + 1; + propNames_[numProps_] = (char*)malloc(len); + strcpy(propNames_[numProps_], defData->DEFCASE(name)); + len = strlen(value) + 1; + propValues_[numProps_] = (char*)malloc(len); + strcpy(propValues_[numProps_], defData->DEFCASE(value)); + propDValues_[numProps_] = d; + propTypes_[numProps_] = type; + numProps_ += 1; +} + + +int defiRow::numProps() const { + return numProps_; +} + + +const char* defiRow::propName(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6140): The index number %d specified for the VIA LAYER RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6140, msg, defData); + return 0; + } + return propNames_[index]; +} + + +const char* defiRow::propValue(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6140): The index number %d specified for the VIA LAYER RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6140, msg, defData); + return 0; + } + return propValues_[index]; +} + +double defiRow::propNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6140): The index number %d specified for the VIA LAYER RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6140, msg, defData); + return 0; + } + return propDValues_[index]; +} + +const char defiRow::propType(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6140): The index number %d specified for the VIA LAYER RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6140, msg, defData); + return 0; + } + return propTypes_[index]; +} + +int defiRow::propIsNumber(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6140): The index number %d specified for the VIA LAYER RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6140, msg, defData); + return 0; + } + return propDValues_[index] ? 1 : 0; +} + +int defiRow::propIsString(int index) const { + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf (msg, "ERROR (DEFPARS-6140): The index number %d specified for the VIA LAYER RECTANGLE is invalide.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numProps_); + defiError(0, 6140, msg, defData); + return 0; + } + return propDValues_[index] ? 0 : 1; +} + +const char* defiRow::name() const { + return name_; +} + + +const char* defiRow::macro() const { + return macro_; +} + + +double defiRow::x() const { + return x_; +} + + +double defiRow::y() const { + return y_; +} + + +double defiRow::xNum() const { + return xNum_; +} + + +double defiRow::yNum() const { + return yNum_; +} + + +int defiRow::orient() const { + return orient_; +} + + +const char* defiRow::orientStr() const { + return (defiOrientStr(orient_)); +} + + +int defiRow::hasDo() const { + return hasDo_; +} + + +int defiRow::hasDoStep() const { + return hasDoStep_; +} + + +double defiRow::xStep() const { + return xStep_; +} + + +double defiRow::yStep() const { + return yStep_; +} + + +void defiRow::print(FILE* f) const { + fprintf(f, "Row '%s' '%s' %g,%g orient %s\n", + name(), macro(), + x(), y(), orientStr()); + fprintf(f, " DO X %g STEP %g\n", xNum(), + xStep()); + fprintf(f, " DO Y %g STEP %g\n", yNum(), + yStep()); +} + + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiTrack +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiTrack::defiTrack(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiTrack::Init() { + macro_ = 0; + macroLength_ = 0; + x_ = 0.0; + xNum_ = 0.0; + xStep_ = 0.0; + layersLength_ = 0; + numLayers_ = 0; + layers_ = 0; + firstTrackMask_=0; + samemask_ = 0; +} + +defiTrack::~defiTrack() { + Destroy(); +} + + +void defiTrack::Destroy() { + int i; + + if (macro_) free(macro_); + + if (layers_) { + for (i = 0; i < numLayers_; i++) + if (layers_[i]) free(layers_[i]); + free((char*)(layers_)); + } +} + + +void defiTrack::setup(const char* macro) { + int i; + int len = strlen(macro) + 1; + + if (len > macroLength_) { + if (macro_) free(macro_); + macroLength_ = len; + macro_ = (char*)malloc(len); + } + strcpy(macro_, defData->DEFCASE(macro)); + + if (layers_) { + for (i = 0; i < numLayers_; i++) + if (layers_[i]) { + free(layers_[i]); + layers_[i] = 0; + } + } + numLayers_ = 0; + x_ = 0.0; + xStep_ = 0.0; + xNum_ = 0.0; + + firstTrackMask_=0; + samemask_=0; +} + + +void defiTrack::setDo(double x, double x_num, double x_step) { + x_ = x; + xStep_ = x_step; + xNum_ = x_num; +} + + +void defiTrack::addLayer(const char* layer) { + char* l; + int len; + + if (numLayers_ >= layersLength_) { + int i; + char** newl; + layersLength_ = layersLength_ ? 2 * layersLength_ : 8; + newl = (char**)malloc(layersLength_* sizeof(char*)); + for (i = 0; i < numLayers_; i++) + newl[i] = layers_[i]; + if (layers_) free((char*)(layers_)); + layers_ = newl; + } + + len = strlen(layer) + 1; + l = (char*)malloc(len); + strcpy(l, defData->DEFCASE(layer)); + layers_[numLayers_++] = l; +} + +void defiTrack::addMask(int colorMask, int sameMask) { + samemask_=sameMask; + firstTrackMask_= colorMask; +} + + +const char* defiTrack::macro() const { + return macro_; +} + + +double defiTrack::x() const { + return x_; +} + + +double defiTrack::xNum() const { + return xNum_; +} + + +double defiTrack::xStep() const { + return xStep_; +} + + +int defiTrack::numLayers() const { + return numLayers_; +} + + +const char* defiTrack::layer(int index) const { + if (index >= 0 && index < numLayers_) { + return layers_[index]; + } + + return 0; +} + +int defiTrack::firstTrackMask() const { + return firstTrackMask_; +} + +int defiTrack::sameMask() const { + return samemask_; +} + +void defiTrack::print(FILE* f) const { + int i; + + fprintf(f, "Track '%s'\n", macro()); + fprintf(f, " DO %g %g STEP %g\n", + x(), + xNum(), + xStep()); + fprintf(f, " %d layers ", numLayers()); + for (i = 0; i < numLayers(); i++) { + fprintf(f, " '%s'", layer(i)); + } + fprintf(f, "\n"); +} + + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiGcellGrid +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiGcellGrid::defiGcellGrid(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiGcellGrid::Init() { + macro_ = 0; + macroLength_ = 0; + x_ = 0; + xNum_ = 0; + xStep_ = 0; +} + + +defiGcellGrid::~defiGcellGrid() { + Destroy(); +} + + +void defiGcellGrid::Destroy() { + if (macro_) free(macro_); +} + + +void defiGcellGrid::setup(const char* macro, int x, int xNum, double xStep) { + int len = strlen(macro) + 1; + if (len > macroLength_) { + if (macro_) free(macro_); + macroLength_ = len; + macro_ = (char*)malloc(len); + } + strcpy(macro_, defData->DEFCASE(macro)); + + x_ = x; + xNum_ = xNum; + xStep_ = xStep; +} + + +int defiGcellGrid::x() const { + return x_; +} + + +int defiGcellGrid::xNum() const { + return xNum_; +} + + +double defiGcellGrid::xStep() const { + return xStep_; +} + + +const char* defiGcellGrid::macro() const { + return macro_; +} + + +void defiGcellGrid::print(FILE* f) const { + fprintf(f, "GcellGrid '%s'\n", macro()); + fprintf(f, " DO %d %d STEP %5.1f\n", + x(), + xNum(), + xStep()); +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiRowTrack.hpp b/lefdef/src/def/def/defiRowTrack.hpp new file mode 100644 index 00000000..e05ebb07 --- /dev/null +++ b/lefdef/src/def/def/defiRowTrack.hpp @@ -0,0 +1,184 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiRowTrack_h +#define defiRowTrack_h + +#include "defiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiRow{ +public: + + defiRow(defrData *data); + void Init(); + + ~defiRow(); + void Destroy(); + void clear(); + + void setup(const char* name, const char* macro, + double x, double y, int orient); + void setDo(double x_num, double y_num, + double x_step, double y_step); + void setHasDoStep(); + void addProperty(const char* name, const char* value, const char type); + void addNumProperty(const char* name, const double d, + const char* value, const char type); + + const char* name() const; + const char* macro() const; + double x() const; + double y() const; + int orient() const; + const char* orientStr() const; + int hasDo() const; // 5.6, DO is optional + double xNum() const; + double yNum() const; + int hasDoStep() const; // 5.6, STEP is optional in DO + double xStep() const; + double yStep() const; + + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + void print(FILE* f) const; + +protected: + int nameLength_; + char* name_; + int macroLength_; + char* macro_; + double x_; + double y_; + double xNum_; + double yNum_; + int orient_; + double xStep_; + double yStep_; + int hasDo_; + int hasDoStep_; + + int numProps_; + int propsAllocated_; + char** propNames_; + char** propValues_; + double* propDValues_; + char* propTypes_; + + defrData *defData; +}; + + + +class defiTrack{ +public: + + defiTrack(defrData *data); + void Init(); + + ~defiTrack(); + void Destroy(); + + void setup(const char* macro); + void setDo(double x, double x_num, double x_step); + void addLayer(const char* layer); + void addMask(int colorMask, int sameMask); + + const char* macro() const; + double x() const; + double xNum() const; + double xStep() const; + int numLayers() const; + const char* layer(int index) const; + int firstTrackMask() const; + int sameMask() const; + + void print(FILE* f) const; + +protected: + int macroLength_; // allocated size of macro_; + char* macro_; + double x_; + double xNum_; + double xStep_; + int layersLength_; // allocated size of layers_ + int numLayers_; // number of places used in layers_ + char** layers_; + int firstTrackMask_; + int samemask_; + + defrData *defData; +}; + + + +class defiGcellGrid { +public: + + defiGcellGrid(defrData *data); + void Init(); + + ~defiGcellGrid(); + void Destroy(); + + void setup(const char* macro, int x, int xNum, double xStep); + + const char* macro() const; + int x() const; + int xNum() const; + double xStep() const; + + void print(FILE* f) const; + +protected: + int macroLength_; + char* macro_; + int x_; + int xNum_; + double xStep_; + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiScanchain.cpp b/lefdef/src/def/def/defiScanchain.cpp new file mode 100644 index 00000000..2f089e70 --- /dev/null +++ b/lefdef/src/def/def/defiScanchain.cpp @@ -0,0 +1,590 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lex.h" +#include "defiScanchain.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +defiOrdered::defiOrdered(defrData *data) +: defData(data) +{} + +defiOrdered::~defiOrdered() +{ + Destroy(); +} + +void defiOrdered::clear() { + int i; + for (i = 0; i < num_; i++) { + free((char*)(inst_[i])); + if (in_[i]) free((char*)(in_[i])); + if (out_[i]) free((char*)(out_[i])); + } + num_ = 0; +} + + +void defiOrdered::Destroy() { + int i; + for (i = 0; i < num_; i++) { + free((char*)(inst_[i])); + free((char*)(in_[i])); + free((char*)(out_[i])); + } + free((char*)(inst_)); + free((char*)(in_)); + free((char*)(out_)); + free((char*)(bits_)); +} + + +void defiOrdered::Init() { + num_ = 0; + allocated_ = 32; + inst_ = (char**)malloc(sizeof(char*)*32); + in_ = (char**)malloc(sizeof(char*)*32); + out_ = (char**)malloc(sizeof(char*)*32); + bits_ = (int*)malloc(sizeof(int)*32); +} + + +void defiOrdered::bump() { + int max = allocated_ * 2; + int i; + char** nin = (char**)malloc(sizeof(char*)*max); + char** nout = (char**)malloc(sizeof(char*)*max); + char** ninst = (char**)malloc(sizeof(char*)*max); + int* nbits = (int*)malloc(sizeof(int)*max); + + for (i = 0; i < num_; i++) { + nin[i] = in_[i]; + nout[i] = out_[i]; + ninst[i] = inst_[i]; + nbits[i] = bits_[i]; + } + free((char*)(inst_)); + free((char*)(in_)); + free((char*)(out_)); + free((char*)(bits_)); + allocated_ = max; + inst_ = ninst; + in_ = nin; + out_ = nout; + bits_ = nbits; +} + + +void defiOrdered::addOrdered(const char* inst) { + if (num_ == allocated_) bump(); + inst_[num_] = (char*)malloc(strlen(inst)+1); + strcpy(inst_[num_], defData->DEFCASE(inst)); + in_[num_] = 0; + out_[num_] = 0; + bits_[num_] = -1; + num_ += 1; +} + + +void defiOrdered::addIn(const char* pin) { + in_[num_-1] = (char*)malloc(strlen(pin)+1); + strcpy(in_[num_-1], defData->DEFCASE(pin)); +} + + +void defiOrdered::addOut(const char* pin) { + out_[num_-1] = (char*)malloc(strlen(pin)+1); + strcpy(out_[num_-1], defData->DEFCASE(pin)); +} + + +void defiOrdered::setOrderedBits(int bits) { + bits_[num_-1] = bits; +} + + +int defiOrdered::num() const { + return num_; +} + + +char** defiOrdered::inst() const { + return inst_; +} + + +char** defiOrdered::in() const { + return in_; +} + + +char** defiOrdered::out() const { + return out_; +} + + +int* defiOrdered::bits() const { + return bits_; +} + + +defiScanchain::defiScanchain(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiScanchain::Init() { + name_ = (char*)malloc(32); + nameLength_ = 32; + + numOrdered_ = 0; + numOrderedAllocated_ = 4; + ordered_ = (defiOrdered**)malloc(sizeof(defiOrdered*)*4); + + numFloating_ = 0; + numFloatingAllocated_ = 4; + floatInst_ = (char**)malloc(sizeof(char*)*4); + floatIn_ = (char**)malloc(sizeof(char*)*4); + floatOut_ = (char**)malloc(sizeof(char*)*4); + floatBits_ = (int*)malloc(sizeof(int)*4); + + stopInst_ = 0; + stopPin_ = 0; + startInst_ = 0; + startPin_ = 0; + hasStart_ = 0; + hasStop_ = 0; + commonInPin_ = 0; + commonOutPin_ = 0; + hasPartition_ = 0; + partName_ = 0; + maxBits_ = -1; +} + + +void defiScanchain::clear() { + int i; + + for (i = 0; i < numOrdered_; i++) { + delete ordered_[i]; + ordered_[i] = 0; + } + + numOrdered_ = 0; + + for (i = 0; i < numFloating_; i++) { + if (floatIn_[i]) free(floatIn_[i]); + if (floatOut_[i]) free(floatOut_[i]); + free(floatInst_[i]); + floatInst_[i] = 0; + floatBits_[i] = -1; + } + numFloating_ = 0; + + if (stopInst_) free(stopInst_); + if (stopPin_) free(stopPin_); + if (startInst_) free(startInst_); + if (startPin_) free(startPin_); + if (commonInPin_) free(commonInPin_); + if (commonOutPin_) free(commonOutPin_); + + stopInst_ = 0; + stopPin_ = 0; + startInst_ = 0; + startPin_ = 0; + hasStart_ = 0; + hasStop_ = 0; + commonInPin_ = 0; + commonOutPin_ = 0; + hasPartition_ = 0; + if (partName_) + free((char*)(partName_)); + partName_ = 0; + maxBits_ = -1; +} + + +void defiScanchain::Destroy() { + clear(); + free(name_); + free((char*)(ordered_)); + free((char*)(floatInst_)); + free((char*)(floatIn_)); + free((char*)(floatOut_)); + free((char*)(floatBits_)); +} + + +defiScanchain::~defiScanchain() { + Destroy(); +} + + +void defiScanchain::setName(const char* name) { + int len = strlen(name) + 1; + + clear(); + + if (len > nameLength_) { + free(name_); + name_ = (char*)malloc(len); + nameLength_ = len; + } + strcpy(name_, defData->DEFCASE(name)); +} + + +const char* defiScanchain::name() const { + return name_; +} + + +void defiScanchain::addFloatingInst(const char* name) { + + if (numFloating_ >= numFloatingAllocated_) { + int max = 2 * numFloatingAllocated_; + int i; + char** ninst = (char**)malloc(sizeof(char*)*max); + char** nin = (char**)malloc(sizeof(char*)*max); + char** nout = (char**)malloc(sizeof(char*)*max); + int* nbits = (int*)malloc(sizeof(int)*max); + for (i = 0; i < numFloating_; i++) { + ninst[i] = floatInst_[i]; + nin[i] = floatIn_[i]; + nout[i] = floatOut_[i]; + nbits[i] = floatBits_[i]; + } + free((char*)(floatInst_)); + free((char*)(floatIn_)); + free((char*)(floatOut_)); + free((char*)(floatBits_)); + floatInst_ = ninst; + floatOut_ = nout; + floatIn_ = nin; + floatBits_ = nbits; + numFloatingAllocated_ = max; + } + + floatInst_[numFloating_] = + (char*)malloc(strlen(name) + 1); + strcpy(floatInst_[numFloating_], defData->DEFCASE(name)); + floatIn_[numFloating_] = 0; + floatOut_[numFloating_] = 0; + floatBits_[numFloating_] = -1; + numFloating_ += 1; +} + + +void defiScanchain::addFloatingIn(const char* name) { + int len = strlen(name) + 1; + floatIn_[numFloating_-1] = (char*)malloc(len); + strcpy(floatIn_[numFloating_-1], defData->DEFCASE(name)); +} + + +void defiScanchain::addFloatingOut(const char* name) { + int len = strlen(name) + 1; + floatOut_[numFloating_-1] = (char*)malloc(len); + strcpy(floatOut_[numFloating_-1], defData->DEFCASE(name)); +} + + +void defiScanchain::setFloatingBits(int bits) { + floatBits_[numFloating_-1] = bits; +} + + +void defiScanchain::addOrderedIn(const char* name) { + defiOrdered* o = ordered_[numOrdered_-1]; + o->addIn(name); +} + + +void defiScanchain::addOrderedOut(const char* name) { + defiOrdered* o = ordered_[numOrdered_-1]; + o->addOut(name); +} + + +void defiScanchain::addOrderedInst(const char* name) { + defiOrdered* o = ordered_[numOrdered_-1]; + o->addOrdered(name); +} + + +void defiScanchain::setOrderedBits(int bits) { + defiOrdered* o = ordered_[numOrdered_-1]; + o->setOrderedBits(bits); +} + + +void defiScanchain::addOrderedList() { + defiOrdered* o; + + if (numOrdered_ == numOrderedAllocated_) { + int max = 2 * numOrderedAllocated_; + int i; + defiOrdered** no = (defiOrdered**)malloc(sizeof(defiOrdered*)*max); + for (i = 0; i < numOrdered_; i++) { + no[i] = ordered_[i]; + } + free((char*)(ordered_)); + ordered_ = no; + numOrderedAllocated_ = max; + } + + o = new defiOrdered(defData); + ordered_[numOrdered_] = o; + o->Init(); + numOrdered_ += 1; +} + + +void defiScanchain::setStart(const char* inst, const char* pin) { + int len; + if (startInst_) + defiError(0, 6150, "ERROR (DEFPARS-6150): The START statement in the SCANCHAINS has defined more than one time in the SCANCHAINS statement.\nUpdate the DEF file to only one START statement and then try again.", defData); + len = strlen(inst) + 1; + startInst_ = (char*)malloc(len); + strcpy(startInst_, defData->DEFCASE(inst)); + len = strlen(pin) + 1; + startPin_ = (char*)malloc(len); + strcpy(startPin_, defData->DEFCASE(pin)); + hasStart_ = 1; +} + + +void defiScanchain::setStop(const char* inst, const char* pin) { + int len; + if (stopInst_) + defiError(0, 6151, "ERROR (DEFPARS-6151): The STOP statment in the SCANCHAINS has defined more than one time in the SCANCHAINS statement.\nUpdate the DEF file to only one STOP statement and then try again.", defData); + len = strlen(inst) + 1; + stopInst_ = (char*)malloc(len); + strcpy(stopInst_, defData->DEFCASE(inst)); + len = strlen(pin) + 1; + stopPin_ = (char*)malloc(len); + strcpy(stopPin_, defData->DEFCASE(pin)); + hasStop_ = 1; +} + + +// 5.4.1 +void defiScanchain::setPartition(const char* partName, int maxBits) { + if (partName_) + free(partName_); + partName_ = (char*)malloc(strlen(partName) + 1); + strcpy(partName_, defData->DEFCASE(partName)); + maxBits_ = maxBits; + hasPartition_ = 1; +} + + +int defiScanchain::hasStart() const { + return (int)(hasStart_); +} + + +int defiScanchain::hasStop() const { + return (int)(hasStop_); +} + + +int defiScanchain::hasFloating() const { + return numFloating_ ? 1 : 0 ; +} + + +int defiScanchain::hasOrdered() const { + return numOrdered_ ? 1 : 0 ; +} + + +// 5.4.1 +int defiScanchain::hasPartition() const { + return hasPartition_; +} + + +// 5.4.1 +int defiScanchain::hasPartitionMaxBits() const { + return (maxBits_ != -1) ? 1 : 0; +} + + +// 5.4.1 +const char* defiScanchain::partitionName() const { + return partName_; +} + + +// 5.4.1 +int defiScanchain::partitionMaxBits() const { + return maxBits_; +} + + +void defiScanchain::start(char** inst, char** pin) const { + if (inst) *inst = startInst_; + if (pin) *pin = startPin_; +} + + +void defiScanchain::stop(char** inst, char** pin) const { + if (inst) *inst = stopInst_; + if (pin) *pin = stopPin_; +} + + +int defiScanchain::numOrderedLists() const { + return numOrdered_; +} + + +void defiScanchain::ordered(int index, int* size, char*** inst, + char*** inPin, char*** outPin, int** bits) const { + defiOrdered* o; + if (index >= 0 && index <= numOrdered_) { + o = ordered_[index]; + *size = o->num(); + *inst = o->inst(); + *inPin = o->in(); + *outPin = o->out(); + *bits = o->bits(); + } else { + *size = 10; + *inst = 0; + } +} + + +void defiScanchain::floating(int* size, char*** inst, + char*** inPin, char*** outPin, int** bits) const { + *size = numFloating_; + *inst = floatInst_; + *inPin = floatIn_; + *outPin = floatOut_; + *bits = floatBits_; +} + + +void defiScanchain::setCommonOut(const char* pin) { + int len = strlen(pin) + 1; + commonOutPin_ = (char*)malloc(len); + strcpy(commonOutPin_, defData->DEFCASE(pin)); +} + + +void defiScanchain::setCommonIn(const char* pin) { + int len = strlen(pin) + 1; + commonInPin_ = (char*)malloc(len); + strcpy(commonInPin_, defData->DEFCASE(pin)); +} + + +int defiScanchain::hasCommonInPin() const { + return commonInPin_ ? 1 : 0; +} + + +int defiScanchain::hasCommonOutPin() const { + return commonOutPin_ ? 1 : 0; +} + + +const char* defiScanchain::commonInPin() const { + return commonInPin_; +} + + +const char* defiScanchain::commonOutPin() const { + return commonOutPin_; +} + + +void defiScanchain::print(FILE* f) const { + char* a; + char* b; + + char** inst; + char** in; + char** out; + int* bits; + int num; + int i; + int h; + + fprintf(f, "Scan chain '%s' %d things\n", + name(), + hasStart() + + hasStop() + + numFloating_ + + numOrderedLists()); + + if (hasStart()) { + start(&a, &b); + fprintf(f, " start inst '%s' pin '%s'\n", a, b); + } + + if (hasStop()) { + stop(&a, &b); + fprintf(f, " stop inst '%s' pin '%s'\n", a, b); + } + + floating(&num, &inst, &in, &out, &bits); + for (i = 0; i < num; i++) { + fprintf(f, " floating '%s' IN=%s OUT=%s BITS=%d\n", inst[i], + in[i]?in[i]:"NIL", out[i]?out[i]:"NIL", bits[i]?bits[i]:0); + } + + for (i = 0; i < numOrderedLists(); i++) { + ordered(i, &num, &inst, &in, &out, &bits); + fprintf(f, " %d ordered\n", i); + for (h = 0; h < num; h++) { + fprintf(f, " '%s' IN=%s OUT=%s BITS=%d\n", inst[h], + in[h]?in[h]:"NIL", out[h]?out[h]:"NIL", bits[h]?bits[h]:0); + } + } + + if (hasCommonInPin()) + fprintf(f, " common in pin %s\n", commonInPin()); + + if (hasCommonOutPin()) + fprintf(f, " common out pin %s\n", commonOutPin()); +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiScanchain.hpp b/lefdef/src/def/def/defiScanchain.hpp new file mode 100644 index 00000000..e46e4765 --- /dev/null +++ b/lefdef/src/def/def/defiScanchain.hpp @@ -0,0 +1,186 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiScanchain_h +#define defiScanchain_h + +#include "defiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiOrdered { +public: + defiOrdered(defrData *data); + ~defiOrdered(); + + void addOrdered(const char* inst); + void addIn(const char* pin); + void addOut(const char* pin); + void setOrderedBits(int bits); // 5.4.1 + void bump(); + void Init(); + void Destroy(); + void clear(); + + int num() const; + char** inst() const; + char** in() const; + char** out() const; + int* bits() const; // 5.4.1 + +protected: + int num_; + int allocated_; + char** inst_; + char** in_; + char** out_; + int* bits_; // 5.4.1 + + defrData *defData; +}; + + +// Struct holds the data for one Scan chain. +// +class defiScanchain { +public: + defiScanchain(defrData *data); + void Init(); + + void Destroy(); + ~defiScanchain(); + + void setName(const char* name); + void clear(); + + void addOrderedList(); + void addOrderedInst(const char* inst); + void addOrderedIn(const char* inPin); + void addOrderedOut(const char* outPin); + void setOrderedBits(int bits); // 5.4.1 + + void addFloatingInst(const char* inst); + void addFloatingIn(const char* inPin); + void addFloatingOut(const char* outPin); + void setFloatingBits(int bits); // 5.4.1 + + void setStart(const char* inst, const char* pin); + void setStop(const char* inst, const char* pin); + void setCommonIn(const char* pin); + void setCommonOut(const char* pin); + void setPartition(const char* partName, int maxBits); // 5.4.1 + + const char* name() const; + int hasStart() const; + int hasStop() const; + int hasFloating() const; + int hasOrdered() const; + int hasCommonInPin() const; + int hasCommonOutPin() const; + int hasPartition() const; // 5.4.1 + int hasPartitionMaxBits() const; // 5.4.1 + + // If the pin part of these routines were not supplied in the DEF + // then a NULL pointer will be returned. + void start(char** inst, char** pin) const; + void stop(char** inst, char** pin) const; + + // There could be many ORDERED constructs in the DEF. The data in + // each ORDERED construct is stored in its own array. The numOrderedLists() + // routine tells how many lists there are. + int numOrderedLists() const; + + // This routine will return an array of instances and + // an array of in and out pins. + // The number if things in the arrays is returned in size. + // The inPin and outPin entry is optional for each instance. + // If an entry is not given, then that char* is NULL. + // For example if the second instance has + // instnam= "FOO" and IN="A", but no OUT given, then inst[1] points + // to "FOO" inPin[1] points to "A" and outPin[1] is a NULL pointer. + void ordered(int index, int* size, char*** inst, char*** inPin, + char*** outPin, int** bits) const; + + // All of the floating constructs in the scan chain are + // stored in this one array. + // If the IN or OUT of an entry is not supplied then the array will have + // a NULL pointer in that place. + void floating(int* size, char*** inst, char*** inPin, char*** outPin, + int** bits) const; + + const char* commonInPin() const; + const char* commonOutPin() const; + + const char* partitionName() const; // 5.4.1 + int partitionMaxBits() const; // 5.4.1 + + void print(FILE* f) const; + +protected: + char* name_; + char hasStart_; + char hasStop_; + int nameLength_; + + int numOrderedAllocated_; + int numOrdered_; + defiOrdered** ordered_; + + int numFloatingAllocated_; + int numFloating_; + char** floatInst_; // Array of floating names + char** floatIn_; + char** floatOut_; + int* floatBits_; // 5.4.1 + + char* stopInst_; + char* stopPin_; + + char* startInst_; + char* startPin_; + + char* commonInPin_; + char* commonOutPin_; + + char hasPartition_; // 5.4.1 + char* partName_; // 5.4.1 + int maxBits_; // 5.4.1 + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiSite.cpp b/lefdef/src/def/def/defiSite.cpp new file mode 100644 index 00000000..cdb4cd93 --- /dev/null +++ b/lefdef/src/def/def/defiSite.cpp @@ -0,0 +1,281 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "defiSite.hpp" +#include "defiDebug.hpp" +#include "lex.h" +#include "defiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiSite +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiSite::defiSite(defrData *data) + : defData(data) +{ + Init(); +} + + +defiSite::~defiSite() { + Destroy(); +} + + +void defiSite::Init() { + siteName_ = (char*)malloc(32); + nameSize_ = 32; + clear(); +} + + +void defiSite::Destroy() { + free(siteName_); +} + + +void defiSite::clear() { + if (siteName_) + *siteName_ = '\0'; + x_num_ = 0.0; + y_num_ = 0.0; + x_step_ = 0.0; + y_step_ = 0.0; + orient_ = 0; +} + + +void defiSite::setName(const char* name) { + int len = 1; + char* from = (char*)name; + clear(); + while (*from++) len++; + if (nameSize_ < len) bumpName(len); + strcpy(siteName_, defData->DEFCASE(name)); +} + + +void defiSite::setLocation(double xorg, double yorg) { + x_orig_ = xorg; + y_orig_ = yorg; +} + + +void defiSite::setOrient(int orient) { + orient_ = orient; +} + + +void defiSite::setDo(double x_num, double y_num, double x_step, double y_step) { + x_num_ = x_num; + y_num_ = y_num; + x_step_ = x_step; + y_step_ = y_step; +} + + +double defiSite::x_num() const { + return x_num_; +} + + +double defiSite::y_num() const { + return y_num_; +} + + +double defiSite::x_step() const { + return x_step_; +} + + +double defiSite::y_step() const { + return y_step_; +} + + +double defiSite::x_orig() const { + return x_orig_; +} + + +double defiSite::y_orig() const { + return y_orig_; +} + + +int defiSite::orient() const { + return orient_; +} + + +const char* defiSite::orientStr() const { + return (defiOrientStr(orient_)); +} + + +const char* defiSite::name() const { + return siteName_; +} + + +void defiSite::bumpName(int size) { + free(siteName_); + siteName_ = (char*)malloc(size); + nameSize_ = size; + *siteName_ = '\0'; +} + + +void defiSite::print(FILE* f) const { + fprintf(f, "Site '%p' %s\n", name(), + orientStr()); + fprintf(f, " DO X %g %g BY %g\n", + x_orig(), + x_num(), + x_step()); + fprintf(f, " DO Y %g %g BY %g\n", + y_orig(), + y_num(), + y_step()); + +} + + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiBox +// +////////////////////////////////////////////// +////////////////////////////////////////////// + +defiBox::defiBox() { + Init(); +} + +void defiBox::Init() { + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + points_ = 0; +} + +defiBox::~defiBox() { + Destroy(); +} + +void defiBox::Destroy() { + struct defiPoints* p; + + p = points_; + if (p) { + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(points_)); + } +} + +void defiBox::addPoint(defiGeometries* geom) { + struct defiPoints* p; + struct defiPoints* tp; + int x, y; + int i; + + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + // for backward compatibility assign the first 2 points to xl, yl, xh & yh + if (i == 0) { + xl_ = x; + yl_ = y; + } else if (i == 1) { + xh_ = x; + yh_ = y; + } + } + if (points_) { + tp = points_; + free((char*)(tp->x)); + free((char*)(tp->y)); + free((char*)(tp)); + } + points_ = p; +} + +int defiBox::xl() const { + return xl_; +} + + +int defiBox::yl() const { + return yl_; +} + + +int defiBox::xh() const { + return xh_; +} + + +int defiBox::yh() const { + return yh_; +} + + +struct defiPoints defiBox::getPoint() const { + return *(points_); +} + +void defiBox::print(FILE* f) const { + fprintf(f, "Box %d,%d %d %d\n", + xl(), + yl(), + xh(), + yh()); +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiSite.hpp b/lefdef/src/def/def/defiSite.hpp new file mode 100644 index 00000000..c31b15f5 --- /dev/null +++ b/lefdef/src/def/def/defiSite.hpp @@ -0,0 +1,123 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiSite_h +#define defiSite_h + +#include "defiKRDefs.hpp" +#include "defiMisc.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +/* + * Struct holds the data for one site. + * It is also used for a canplace and cannotoccupy. + */ +class defiSite { +public: + defiSite(defrData *data); + void Init(); + + ~defiSite(); + void Destroy(); + + void clear(); + + void setName(const char* name); + void setLocation(double xorg, double yorg); + void setOrient(int orient); + void setDo(double x_num, double y_num, double x_step, double y_step); + + double x_num() const; + double y_num() const; + double x_step() const; + double y_step() const; + double x_orig() const; + double y_orig() const; + int orient() const; + const char* orientStr() const; + const char* name() const; + + void print(FILE* f) const; + + void bumpName(int size); + +protected: + char* siteName_; // Name of this. + int nameSize_; // allocated size of siteName_ + double x_orig_, y_orig_; // Origin + double x_step_, y_step_; // Array step size. + double x_num_, y_num_; + int orient_; // orientation + + defrData *defData; +}; + + + +/* Struct holds the data for a Box */ +class defiBox { +public: + // Use the default destructor and constructor. + // 5.6 changed to use it own constructor & destructor + + defiBox(); + void Init(); + void Destroy(); + ~defiBox(); + + // NOTE: 5.6 + // The following methods are still here for backward compatibility + // For new reader they should use numPoints & getPoint to get the + // data. + int xl() const; + int yl() const; + int xh() const; + int yh() const; + + void addPoint(defiGeometries* geom); + defiPoints getPoint() const; + + void print(FILE* f) const; + +protected: + int xl_, yl_; + int xh_, yh_; + defiPoints* points_; // 5.6 +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiSlot.cpp b/lefdef/src/def/def/defiSlot.cpp new file mode 100644 index 00000000..c9ec6354 --- /dev/null +++ b/lefdef/src/def/def/defiSlot.cpp @@ -0,0 +1,276 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lex.h" +#include "defiSlot.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +// +// defiSlot +// +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// + +defiSlot::defiSlot(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiSlot::Init() { + numPolys_ = 0; + clear(); + layerNameLength_ = 0; + xl_ = (int*)malloc(sizeof(int)*1); + yl_ = (int*)malloc(sizeof(int)*1); + xh_ = (int*)malloc(sizeof(int)*1); + yh_ = (int*)malloc(sizeof(int)*1); + rectsAllocated_ = 1; // At least 1 rectangle will define + polysAllocated_ = 0; + polygons_ = 0; + layerName_ = 0; +} + +defiSlot::~defiSlot() { + Destroy(); +} + +void defiSlot::clear() { + hasLayer_ = 0; + numRectangles_ = 0; +} + +void defiSlot::clearPoly() { + struct defiPoints* p; + int i; + + for (i = 0; i < numPolys_; i++) { + p = polygons_[i]; + free((char*)(p->x)); + free((char*)(p->y)); + free((char*)(polygons_[i])); + } + numPolys_ = 0; +} + +void defiSlot::Destroy() { + if (layerName_) free(layerName_); + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + rectsAllocated_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + clearPoly(); + if (polygons_) free((char*)(polygons_)); + polygons_ = 0; + clear(); +} + + +void defiSlot::setLayer(const char* name) { + int len = strlen(name) + 1; + if (layerNameLength_ < len) { + if (layerName_) free(layerName_); + layerName_ = (char*)malloc(len); + layerNameLength_ = len; + } + strcpy(layerName_, defData->DEFCASE(name)); + hasLayer_ = 1; +} + + +void defiSlot::addRect(int xl, int yl, int xh, int yh) { + if (numRectangles_ == rectsAllocated_) { + int i; + int max = rectsAllocated_ = rectsAllocated_ * 2; + int* newxl = (int*)malloc(sizeof(int)*max); + int* newyl = (int*)malloc(sizeof(int)*max); + int* newxh = (int*)malloc(sizeof(int)*max); + int* newyh = (int*)malloc(sizeof(int)*max); + for (i = 0; i < numRectangles_; i++) { + newxl[i] = xl_[i]; + newyl[i] = yl_[i]; + newxh[i] = xh_[i]; + newyh[i] = yh_[i]; + } + free((char*)(xl_)); + free((char*)(yl_)); + free((char*)(xh_)); + free((char*)(yh_)); + xl_ = newxl; + yl_ = newyl; + xh_ = newxh; + yh_ = newyh; + } + xl_[numRectangles_] = xl; + yl_[numRectangles_] = yl; + xh_[numRectangles_] = xh; + yh_[numRectangles_] = yh; + numRectangles_ += 1; +} + +// 5.6 +void defiSlot::addPolygon(defiGeometries* geom) { + struct defiPoints* p; + int x, y; + int i; + + if (numPolys_ == polysAllocated_) { + struct defiPoints** poly; + polysAllocated_ = (polysAllocated_ == 0) ? + 2 : polysAllocated_ * 2; + poly = (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + polysAllocated_); + for (i = 0; i < numPolys_; i++) + poly[i] = polygons_[i]; + if (polygons_) + free((char*)(polygons_)); + polygons_ = poly; + } + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + polygons_[numPolys_] = p; + numPolys_ += 1; +} + +int defiSlot::hasLayer() const { + return hasLayer_; +} + + +const char* defiSlot::layerName() const { + return layerName_; +} + + +int defiSlot::numRectangles() const { + return numRectangles_; +} + + +int defiSlot::xl(int index) const { + char msg[160]; + if (index < 0 || index >= numRectangles_) { + sprintf (msg, "ERROR (DEFPARS-6160): The index number %d specified for the SLOT RECTANGLE is invalid.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numRectangles_); + defiError(0, 6160, msg, defData); + return 0; + } + return xl_[index]; +} + + +int defiSlot::yl(int index) const { + char msg[160]; + if (index < 0 || index >= numRectangles_) { + sprintf (msg, "ERROR (DEFPARS-6160): The index number %d specified for the SLOT RECTANGLE is invalid.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numRectangles_); + defiError(0, 6160, msg, defData); + return 0; + } + return yl_[index]; +} + + +int defiSlot::xh(int index) const { + char msg[160]; + if (index < 0 || index >= numRectangles_) { + sprintf (msg, "ERROR (DEFPARS-6160): The index number %d specified for the SLOT RECTANGLE is invalid.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numRectangles_); + defiError(0, 6160, msg, defData); + return 0; + } + return xh_[index]; +} + + +int defiSlot::yh(int index) const { + char msg[160]; + if (index < 0 || index >= numRectangles_) { + sprintf (msg, "ERROR (DEFPARS-6160): The index number %d specified for the SLOT RECTANGLE is invalid.\nValid index number is from 0 to %d. Specify a valid index number and then try again.", + index, numRectangles_); + defiError(0, 6160, msg, defData); + return 0; + } + return yh_[index]; +} + +// 5.6 +int defiSlot::numPolygons() const { + return numPolys_; +} + +// 5.6 +struct defiPoints defiSlot::getPolygon(int index) const { + return *(polygons_[index]); +} + +void defiSlot::print(FILE* f) const { + int i, j; + struct defiPoints points; + + if (hasLayer()) + fprintf(f, "- LAYER %s\n", layerName()); + + for (i = 0; i < numRectangles(); i++) { + fprintf(f, " RECT %d %d %d %d\n", xl(i), + yl(i), xh(i), + yh(i)); + } + + for (i = 0; i < numPolygons(); i++) { + fprintf(f, " POLYGON "); + points = getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(f, "%d %d ", points.x[j], points.y[j]); + fprintf(f, "\n"); + } + fprintf(f,"\n"); +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiSlot.hpp b/lefdef/src/def/def/defiSlot.hpp new file mode 100644 index 00000000..783ab0f6 --- /dev/null +++ b/lefdef/src/def/def/defiSlot.hpp @@ -0,0 +1,92 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiSLOT_h +#define defiSLOT_h + +#include +#include "defiKRDefs.hpp" +#include "defiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +class defiSlot { +public: + defiSlot(defrData *data); + void Init(); + + void Destroy(); + ~defiSlot(); + + void clear(); + void clearPoly(); + + void setLayer(const char* name); + void addRect(int xl, int yl, int xh, int yh); + void addPolygon(defiGeometries* geom); + + int hasLayer() const; + const char* layerName() const; + + int numRectangles() const; + int xl(int index) const; + int yl(int index) const; + int xh(int index) const; + int yh(int index) const; + + int numPolygons() const; // 5.6 + defiPoints getPolygon(int index) const; // 5.6 + + void print(FILE* f) const; + +protected: + int hasLayer_; + char* layerName_; + int layerNameLength_; + int numRectangles_; + int rectsAllocated_; + int* xl_; + int* yl_; + int* xh_; + int* yh_; + int numPolys_; // 5.6 + int polysAllocated_; // 5.6 + defiPoints** polygons_; // 5.6 + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiTimingDisable.cpp b/lefdef/src/def/def/defiTimingDisable.cpp new file mode 100644 index 00000000..cc3ee82e --- /dev/null +++ b/lefdef/src/def/def/defiTimingDisable.cpp @@ -0,0 +1,320 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiTimingDisable.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiTimingDisable +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiTimingDisable::defiTimingDisable(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiTimingDisable::Init() { + fromInst_ = 0; + fromInstLength_ = 0; + toInst_ = 0; + toInstLength_ = 0; + toPin_ = 0; + toPinLength_ = 0; + fromPin_ = 0; + fromPinLength_ = 0; +} + + +defiTimingDisable::~defiTimingDisable() { + Destroy(); +} + + +void defiTimingDisable::Destroy() { + + clear(); + + if (fromInst_) free(fromInst_); + fromInst_ = 0; + fromInstLength_ = 0; + + if (toInst_) free(toInst_); + toInst_ = 0; + toInstLength_ = 0; + + if (toPin_) free(toPin_); + toPin_ = 0; + toPinLength_ = 0; + + if (fromPin_) free(fromPin_); + fromPin_ = 0; + fromPinLength_ = 0; + +} + + +void defiTimingDisable::clear() { + hasFromTo_ = 0; + hasThru_ = 0; + hasMacro_ = 0; + hasReentrantPathsFlag_ = 0; +} + + +void defiTimingDisable::setReentrantPathsFlag() { + hasReentrantPathsFlag_ = 1; +} + + +void defiTimingDisable::setFromTo(const char* fromInst, const char* fromPin, + const char* toInst, const char* toPin) { + int len; + + clear(); + hasFromTo_ = 1; + + len = strlen(fromInst) + 1; + if (len > fromInstLength_) { + if (fromInst_) free(fromInst_); + fromInstLength_ = len; + fromInst_ = (char*)malloc(len); + } + strcpy(fromInst_,defData->DEFCASE(fromInst)); + + len = strlen(fromPin) + 1; + if (len > fromPinLength_) { + if (fromPin_) free(fromPin_); + fromPinLength_ = len; + fromPin_ = (char*)malloc(len); + } + strcpy(fromPin_,defData->DEFCASE(fromPin)); + + len = strlen(toInst) + 1; + if (len > toInstLength_) { + if (toInst_) free(toInst_); + toInstLength_ = len; + toInst_ = (char*)malloc(len); + } + strcpy(toInst_, toInst); + + len = strlen(toPin) + 1; + if (len > toPinLength_) { + if (toPin_) free(toPin_); + toPinLength_ = len; + toPin_ = (char*)malloc(len); + } + strcpy(toPin_, toPin); + +} + + +void defiTimingDisable::setThru(const char* fromInst, const char* fromPin) { + int len; + + clear(); + hasThru_ = 1; + + len = strlen(fromInst) + 1; + if (len > fromInstLength_) { + if (fromInst_) free(fromInst_); + fromInstLength_ = len; + fromInst_ = (char*)malloc(len); + } + strcpy(fromInst_,defData->DEFCASE(fromInst)); + + len = strlen(fromPin) + 1; + if (len > fromPinLength_) { + if (fromPin_) free(fromPin_); + fromPinLength_ = len; + fromPin_ = (char*)malloc(len); + } + strcpy(fromPin_,defData->DEFCASE(fromPin)); + +} + + +void defiTimingDisable::setMacroFromTo(const char* fromPin, const char* toPin) { + int len; + + clear(); + hasFromTo_ = 1; + + len = strlen(fromPin) + 1; + if (len > fromPinLength_) { + if (fromPin_) free(fromPin_); + fromPinLength_ = len; + fromPin_ = (char*)malloc(len); + } + strcpy(fromPin_,defData->DEFCASE(fromPin)); + + len = strlen(toPin) + 1; + if (len > toPinLength_) { + if (toPin_) free(toPin_); + toPinLength_ = len; + toPin_ = (char*)malloc(len); + } + strcpy(toPin_,defData->DEFCASE(toPin)); + +} + + +void defiTimingDisable::setMacroThru(const char* thru) { + int len; + + clear(); + + hasThru_ = 1; + + len = strlen(thru) + 1; + if (len > fromPinLength_) { + if (fromPin_) free(fromPin_); + fromPinLength_ = len; + fromPin_ = (char*)malloc(len); + } + strcpy(fromPin_,defData->DEFCASE(thru)); + +} + + +void defiTimingDisable::setMacro(const char* name) { + int len; + + // hasThru_ or hasFromTo_ was already set. + // clear() was already called. + hasMacro_ = 1; + + len = strlen(name) + 1; + if (len > fromInstLength_) { + if (fromInst_) free(fromInst_); + fromInstLength_ = len; + fromInst_ = (char*)malloc(len); + } + strcpy(fromInst_,defData->DEFCASE(name)); +} + + +void defiTimingDisable::print(FILE* f) const { + + if (hasMacroFromTo()) { + fprintf(f, "TimingDisable macro '%s' thru '%s'\n", + fromInst_, fromPin_); + + } else if (hasMacroThru()) { + fprintf(f, "TimingDisable macro '%s' from '%s' to '%s'\n", + fromInst_, fromPin_, toPin_); + + } else if (hasFromTo()) { + fprintf(f, "TimingDisable from '%s' '%s' to '%s' '%s'\n", + fromInst_, fromPin_, toInst_, toPin_); + + } else if (hasThru()) { + fprintf(f, "TimingDisable thru '%s' '%s'\n", + fromInst_, fromPin_); + + } else { + defiError(0, 6170, "ERROR (DEFPARS-6170): The TimingDisable type is invalid. The valid types are FROMPIN, & THRUPIN. Specify the valid type and then try again.", defData); + } +} + + +int defiTimingDisable::hasReentrantPathsFlag() const { + return hasReentrantPathsFlag_; +} + + +int defiTimingDisable::hasMacroFromTo() const { + return (hasMacro_ && hasFromTo_) ? 1 : 0; +} + + +int defiTimingDisable::hasMacroThru() const { + return (hasMacro_ && hasThru_) ? 1 : 0; +} + + +int defiTimingDisable::hasThru() const { + return (hasMacro_ == 0 && hasThru_) ? 1 : 0; +} + + +int defiTimingDisable::hasFromTo() const { + return (hasMacro_ == 0 && hasFromTo_) ? 1 : 0; +} + + +const char* defiTimingDisable::toPin() const { + return toPin_; +} + + +const char* defiTimingDisable::fromPin() const { + return fromPin_; +} + + +const char* defiTimingDisable::toInst() const { + return toInst_; +} + + +const char* defiTimingDisable::fromInst() const { + return fromInst_; +} + + +const char* defiTimingDisable::macroName() const { + return fromInst_; +} + + +const char* defiTimingDisable::thruPin() const { + return fromPin_; +} + + +const char* defiTimingDisable::thruInst() const { + return fromInst_; +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiTimingDisable.hpp b/lefdef/src/def/def/defiTimingDisable.hpp new file mode 100644 index 00000000..c3a1a57c --- /dev/null +++ b/lefdef/src/def/def/defiTimingDisable.hpp @@ -0,0 +1,101 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiTimingDisable_h +#define defiTimingDisable_h + +#include +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// A Timing disable can be a from-to or a thru or a macro. +// A macro is either a fromto macro or a thru macro. +class defrData; + + +class defiTimingDisable { +public: + defiTimingDisable(defrData *data); + void Init(); + + void Destroy(); + ~defiTimingDisable(); + + void clear(); + + void setFromTo(const char* fromInst, const char* fromPin, + const char* toInst, const char* toPin); + void setThru(const char* fromInst, const char* fromPin); + void setMacro(const char* name); + void setMacroThru(const char* thru); + void setMacroFromTo(const char* fromPin, const char* toPin); + void setReentrantPathsFlag(); + + int hasMacroThru() const; + int hasMacroFromTo() const; + int hasThru() const; + int hasFromTo() const; + int hasReentrantPathsFlag() const; + + const char* fromPin() const; + const char* toPin() const; + const char* fromInst() const; + const char* toInst() const; + const char* macroName() const; + const char* thruPin() const; // Also macro thru + const char* thruInst() const; + + // debug print + void print(FILE* f) const; + +protected: + char* fromInst_; // also macro name and thru inst + int fromInstLength_; + char* toInst_; + int toInstLength_; + char* fromPin_; // also macro thru and thru pin + int fromPinLength_; + char* toPin_; + int toPinLength_; + + int hasFromTo_; + int hasThru_; + int hasMacro_; + int hasReentrantPathsFlag_; + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiUser.hpp b/lefdef/src/def/def/defiUser.hpp new file mode 100644 index 00000000..218635e1 --- /dev/null +++ b/lefdef/src/def/def/defiUser.hpp @@ -0,0 +1,87 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +/* + * User header file for the DEF Interface. This includes + * all of the header files which are relevant to both the + * reader and the writer. + * + * defrReader.h and defwWriter.h include this file, so that + * an application only needs to include either defwReader.h + * or defwWriter.h. + */ + +#ifndef DEFI_USER_H +#define DEFI_USER_H + +/* General utilities. */ +/* #include "defiMalloc.hpp" */ +/* #include "defiUtils.hpp" */ + +/* + * API objects + */ +#include "defiDebug.hpp" +#include "defiProp.hpp" +#include "defiSite.hpp" +#include "defiComponent.hpp" +#include "defiNet.hpp" +#include "defiPath.hpp" +#include "defiPinCap.hpp" +#include "defiRowTrack.hpp" +#include "defiVia.hpp" +#include "defiRegion.hpp" +#include "defiGroup.hpp" +#include "defiAssertion.hpp" +#include "defiScanchain.hpp" +#include "defiIOTiming.hpp" +#include "defiFPC.hpp" +#include "defiTimingDisable.hpp" +#include "defiPartition.hpp" +#include "defiPinProp.hpp" +#include "defiBlockage.hpp" +#include "defiSlot.hpp" +#include "defiFill.hpp" +#include "defiNonDefault.hpp" +#include "defiPropType.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/* NEW CALLBACK - If you are creating a new .cpp and .hpp file to + * describe a new class of object in the parser, then add a reference + * to the .hpp here. + * + * You must also add an entry for the .h and the .hpp in the package_list + * file of the ../../../release directory. */ + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defiUtil.cpp b/lefdef/src/def/def/defiUtil.cpp new file mode 100644 index 00000000..1d5ef642 --- /dev/null +++ b/lefdef/src/def/def/defiUtil.cpp @@ -0,0 +1,121 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#ifdef WIN32 +# include +#else /* not WIN32 */ +# include +#endif +#if ibmrs +#include +#endif + + +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/* Not needed +time_t defiCalcTime() { + * Calculate the number for the given date + * The date is 5/1/99 + + * Used to calculate the UTC for a time bomb date in libcai.a + * see caiInitWork() function + * + struct tm ts; + + ts.tm_sec = 0; + ts.tm_min = 0; + ts.tm_hour = 0; + ts.tm_mday = 1; + ts.tm_mon = 5; + ts.tm_year = 1999 - 1900; + ts.tm_wday = 0; + ts.tm_yday = 0; + ts.tm_isdst = 0; + +* + printf("May 1, 1999 in UTC is %d\n", mktime(&ts)); + ts.tm_mday = 2; + printf("May 2, 1999 in UTC is %d\n", mktime(&ts)); + + printf("Right now is %d\n", time(0)); +* + return(mktime(&ts)); +} +*/ + +//////////////////////////////////////////////////// +// +// defiTimeBomb +// +//////////////////////////////////////////////////// + +// Check the current date against the date given +/* +int defiValidTime() { + time_t bombTime = defiCalcTime(); + time_t curTime; + + curTime = time((time_t *)NULL); + if (curTime == -1 || curTime > bombTime) + { + (void)printf("The demonstration version of this code is no longer\n" + "available. Please contact your Lef/Def Parser\n" + "software provider for up to date code.\n"); + return(0); + } + return (1); +} +*/ + +//////////////////////////////////////////////////// +// +// Convert the orient from integer to string +// +//////////////////////////////////////////////////// +const char* defiOrientStr(int orient) { + switch (orient) { + case 0: return ((char*)"N"); + case 1: return ((char*)"W"); + case 2: return ((char*)"S"); + case 3: return ((char*)"E"); + case 4: return ((char*)"FN"); + case 5: return ((char*)"FW"); + case 6: return ((char*)"FS"); + case 7: return ((char*)"FE"); + }; + return ((char*)""); +} + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/def/def/defiUtil.hpp b/lefdef/src/def/def/defiUtil.hpp new file mode 100644 index 00000000..b99b858a --- /dev/null +++ b/lefdef/src/def/def/defiUtil.hpp @@ -0,0 +1,52 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiUtil_h +#define defiUtil_h + +#include "defiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/* Return codes Orient and Rotation */ +#define DEF_ORIENT_N 0 +#define DEF_ORIENT_W 1 +#define DEF_ORIENT_S 2 +#define DEF_ORIENT_E 3 +#define DEF_ORIENT_FN 4 +#define DEF_ORIENT_FW 5 +#define DEF_ORIENT_FS 6 +#define DEF_ORIENT_FE 7 + +const char* defiOrientStr(int orient); + +END_LEFDEF_PARSER_NAMESPACE + +#endif + diff --git a/lefdef/src/def/def/defiVia.cpp b/lefdef/src/def/def/defiVia.cpp new file mode 100644 index 00000000..06ecc165 --- /dev/null +++ b/lefdef/src/def/def/defiVia.cpp @@ -0,0 +1,608 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "defiVia.hpp" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + + +////////////////////////////////////////////// +////////////////////////////////////////////// +// +// defiVia +// +////////////////////////////////////////////// +////////////////////////////////////////////// + + +defiVia::defiVia(defrData *data) + : defData(data) +{ + Init(); +} + + +void defiVia::Init() { + name_ = 0; + nameLength_ = 0; + pattern_ = 0; + patternLength_ = 0; + xl_ = 0; + yl_ = 0; + xh_ = 0; + yh_ = 0; + layersLength_ = 0; + layers_ = 0; + viaRule_ = 0; + viaRuleLength_ = 0; + xSize_ = 0; + ySize_ = 0; + botLayer_ = 0; + cutLayer_ = 0; + topLayer_ = 0; + botLayerLength_ = 0; + cutLayerLength_ = 0; + topLayerLength_ = 0; + xCutSpacing_ = 0; + yCutSpacing_ = 0; + xBotEnc_ = 0; + yBotEnc_ = 0; + xTopEnc_ = 0; + yTopEnc_ = 0; + cutPattern_ = 0; + cutPatternLength_ = 0; + numLayers_ = 0; + numPolys_ = 0; + polygons_ = 0; + polysAllocated_ = 0; + polygonNames_ = 0; + rectMask_ = 0; + polyMask_ = 0; + clear(); +} + +void defiVia::clear() { + int i; + + hasPattern_ = 0; + hasViaRule_ = 0; + rows_ = 0; + cols_ = 0; + xOffset_ = 0; + yOffset_ = 0; + xBotOffset_ = 0; + yBotOffset_ = 0; + xTopOffset_ = 0; + yTopOffset_ = 0; + hasCutPattern_ = 0; + + if (polygonNames_) { + struct defiPoints* p; + for (i = 0; i < numPolys_; i++) { + free(polygonNames_[i]); + + p = polygons_[i]; + free(p->x); + free(p->y); + free(p); + } + + free(polygonNames_); + free(polygons_); + free(polyMask_); + + polygonNames_ = NULL; + polygons_ = NULL; + polyMask_ = NULL; + } + + numPolys_ = 0; + polysAllocated_ = 0; +} + +defiVia::~defiVia() { + Destroy(); +} + + +void defiVia::Destroy() { + int i; + + free(name_); + name_ = NULL; + + free(pattern_); + pattern_ = NULL; + + if (layers_) { + for (i = 0; i < numLayers_; i++) { + free(layers_[i]); + } + + free(layers_); + layers_ = NULL; + + free(xl_); + xl_ = NULL; + + free(yl_); + yl_ = NULL; + + free(xh_); + xh_ = NULL; + + free(yh_); + yh_ = NULL; + + free(rectMask_); + rectMask_ = NULL; + + free(polyMask_); + polyMask_ = NULL; + } + + free(viaRule_); + viaRule_ = NULL; + + free(botLayer_); + botLayer_ = NULL; + + free(cutLayer_); + cutLayer_ = NULL; + + free(topLayer_); + topLayer_ = NULL; + + free(cutPattern_); + cutPattern_ = NULL; + + clear(); +} + + +void defiVia::setup(const char* name) { + int i; + int len = strlen(name) + 1; + if (len > nameLength_) { + nameLength_ = len; + name_ = (char*)realloc(name_, len); + } + strcpy(name_, defData->DEFCASE(name)); + if (pattern_) *(pattern_) = 0; + if (layers_) { + for (i = 0; i < numLayers_; i++) { + free(layers_[i]); + layers_[i] = 0; + } + } + + numLayers_ = 0; +} + + +void defiVia::addPattern(const char* pattern) { + int len = strlen(pattern) + 1; + if (len > patternLength_) { + patternLength_ = len; + pattern_ = (char*)realloc(pattern_, len); + } + strcpy(pattern_, defData->DEFCASE(pattern)); + hasPattern_ = 1; +} + + +void defiVia::addLayer(const char* layer, int xl, int yl, int xh, int yh, int colorMask) { + char* l; + int len; + + if (numLayers_ >= layersLength_) { + int i; + char** newl; + int* ints; + layersLength_ = layersLength_ ? 2 * layersLength_ : 8; + + newl = (char**)malloc(layersLength_ * sizeof(char*)); + for (i = 0; i < numLayers_; i++) + newl[i] = layers_[i]; + if (layers_) free((char*)(layers_)); + layers_ = newl; + + ints = (int*)malloc(layersLength_ * sizeof(int)); + for (i = 0; i < numLayers_; i++) + ints[i] = xl_[i]; + if (xl_) free((char*)(xl_)); + xl_ = ints; + + ints = (int*)malloc(layersLength_ * sizeof(int)); + for (i = 0; i < numLayers_; i++) + ints[i] = yl_[i]; + if (yl_) free((char*)(yl_)); + yl_ = ints; + + ints = (int*)malloc(layersLength_ * sizeof(int)); + for (i = 0; i < numLayers_; i++) + ints[i] = xh_[i]; + if (xh_) free((char*)(xh_)); + xh_ = ints; + + ints = (int*)malloc(layersLength_ * sizeof(int)); + for (i = 0; i < numLayers_; i++) + ints[i] = yh_[i]; + if (yh_) free((char*)(yh_)); + yh_ = ints; + + ints = (int*)malloc(layersLength_ * sizeof(int)); + for (i = 0; i < numLayers_; i++) + ints[i] = rectMask_[i]; + if (rectMask_) free((char*)(rectMask_)); + rectMask_ = ints; + } + + len = strlen(layer) + 1; + l = (char*)malloc(len); + strcpy(l, defData->DEFCASE(layer)); + layers_[numLayers_] = l; + xl_[numLayers_] = xl; + yl_[numLayers_] = yl; + xh_[numLayers_] = xh; + yh_[numLayers_] = yh; + rectMask_[numLayers_] = colorMask; + numLayers_++; +} + +// 5.6 +void defiVia::addPolygon(const char* layer, defiGeometries* geom, int colorMask) { + struct defiPoints* p; + int x, y; + int i; + + if (numPolys_ == polysAllocated_) { + char** newn; + int* masks; + struct defiPoints** poly; + polysAllocated_ = (polysAllocated_ == 0) ? + 2 : polysAllocated_ * 2; + newn = (char**)malloc(sizeof(char*) * polysAllocated_); + poly = (struct defiPoints**)malloc(sizeof(struct defiPoints*) * + polysAllocated_); + masks = (int*)malloc(polysAllocated_ * sizeof(int)); + for (i = 0; i < numPolys_; i++) { + newn[i] = polygonNames_[i]; + poly[i] = polygons_[i]; + masks[i] = polyMask_[i]; + } + if (polygons_) + free((char*)(polygons_)); + if (polygonNames_) + free((char*)(polygonNames_)); + if (polyMask_) + free((char*)(polyMask_)); + polygonNames_ = newn; + polygons_ = poly; + polyMask_ = masks; + } + polygonNames_[numPolys_] = strdup(layer); + p = (struct defiPoints*)malloc(sizeof(struct defiPoints)); + p->numPoints = geom->numPoints(); + p->x = (int*)malloc(sizeof(int)*p->numPoints); + p->y = (int*)malloc(sizeof(int)*p->numPoints); + for (i = 0; i < p->numPoints; i++) { + geom->points(i, &x, &y); + p->x[i] = x; + p->y[i] = y; + } + polygons_[numPolys_] = p; + polyMask_[numPolys_] = colorMask; + numPolys_ += 1; +} + +void defiVia::addViaRule(char* viaRuleName, int xSize, int ySize, + char* botLayer, char* cutLayer, char* topLayer, + int xSpacing, int ySpacing, int xBotEnc, int yBotEnc, + int xTopEnc, int yTopEnc) { + int len; + + len = strlen(viaRuleName) + 1; + if (len > viaRuleLength_) { + if (viaRule_) + free(viaRule_); + viaRule_ = (char*)malloc(strlen(viaRuleName)+1); + } + strcpy(viaRule_, defData->DEFCASE(viaRuleName)); + xSize_ = xSize; + ySize_ = ySize; + len = strlen(botLayer) + 1; + if (len > botLayerLength_) { + if (botLayer_) + free(botLayer_); + botLayer_ = (char*)malloc(strlen(botLayer)+1); + botLayerLength_ = len; + } + strcpy(botLayer_, defData->DEFCASE(botLayer)); + len = strlen(cutLayer) + 1; + if (len > cutLayerLength_) { + if (cutLayer_) + free(cutLayer_); + cutLayer_ = (char*)malloc(strlen(cutLayer)+1); + cutLayerLength_ = len; + } + strcpy(cutLayer_, defData->DEFCASE(cutLayer)); + len = strlen(topLayer) + 1; + if (len > topLayerLength_) { + if (topLayer_) + free(topLayer_); + topLayer_ = (char*)malloc(strlen(topLayer)+1); + topLayerLength_ = len; + } + strcpy(topLayer_, defData->DEFCASE(topLayer)); + xCutSpacing_ = xSpacing; + yCutSpacing_ = ySpacing; + xBotEnc_ = xBotEnc; + yBotEnc_ = yBotEnc; + xTopEnc_ = xTopEnc; + yTopEnc_ = yTopEnc; + hasViaRule_ = 1; +} + +void defiVia::addRowCol(int numCutRows, int numCutCols) { + rows_ = numCutRows; + cols_ = numCutCols; +} + +void defiVia::addOrigin(int xOffset, int yOffset) { + xOffset_ = xOffset; + yOffset_ = yOffset; +} + +void defiVia::addOffset(int xBotOs, int yBotOs, int xTopOs, int yTopOs) { + xBotOffset_ = xBotOs; + yBotOffset_ = yBotOs; + xTopOffset_ = xTopOs; + yTopOffset_ = yTopOs; +} + +void defiVia::addCutPattern(char* cutPattern) { + int len; + + len = strlen(cutPattern) + 1; + if (len > cutPatternLength_) { + if (cutPattern_) + free(cutPattern_); + cutPattern_ = (char*)malloc(strlen(cutPattern)+1); + cutPatternLength_ = len; + } + strcpy(cutPattern_, defData->DEFCASE(cutPattern)); + hasCutPattern_ = 1; +} + +int defiVia::hasPattern() const { + return hasPattern_; +} + + +const char* defiVia::pattern() const { + return pattern_; +} + + +const char* defiVia::name() const { + return name_; +} + + +int defiVia::numLayers() const { + return numLayers_; +} + +int defiVia::rectMask(int index) const { + if (index >= 0 && index < numLayers_) { + return rectMask_[index]; + } + + return 0; +} + +int defiVia::polyMask(int index) const { + if (index >= 0 && index < numPolys_) { + return polyMask_[index]; + } + + return 0; +} + +void defiVia::layer(int index, char** layer, int* xl, int* yl, + int* xh, int* yh) const { + if (index >= 0 && index < numLayers_) { + if (layer) *layer = layers_[index]; + if (xl) *xl = xl_[index]; + if (yl) *yl = yl_[index]; + if (xh) *xh = xh_[index]; + if (yh) *yh = yh_[index]; + } +} + +// The following code is for 5.6 + +int defiVia::numPolygons() const { + return numPolys_; +} + +const char* defiVia::polygonName(int index) const { + char msg[160]; + if (index < 0 || index > numPolys_) { + sprintf (msg, "ERROR (DEFPARS-6180): The index number %d specified for the VIA POLYGON is invalid.\nValid index is from 0 to %d. Specify a valid index number and then try again", + index, numPolys_); + defiError(0, 6180, msg, defData); + return 0; + } + return polygonNames_[index]; +} + +struct defiPoints defiVia::getPolygon(int index) const { + return *(polygons_[index]); +} + +int defiVia::hasViaRule() const { + return hasViaRule_; +} + +void defiVia::viaRule(char** viaRuleName, int* xSize, int* ySize, + char** botLayer, char** cutLayer, char** topLayer, + int* xCutSpacing, int* yCutSpacing, int* xBotEnc, + int* yBotEnc, int* xTopEnc, int* yTopEnc) const { + *viaRuleName = viaRule_; + *xSize = xSize_; + *ySize = ySize_; + *botLayer = botLayer_; + *cutLayer = cutLayer_; + *topLayer = topLayer_; + *xCutSpacing = xCutSpacing_; + *yCutSpacing = yCutSpacing_; + *xBotEnc = xBotEnc_; + *yBotEnc = yBotEnc_; + *xTopEnc = xTopEnc_; + *yTopEnc = yTopEnc_; +} + +int defiVia::hasRowCol() const { + if (rows_) + return rows_; + else + return cols_; +} + +void defiVia::rowCol(int* numCutRows, int* numCutCols) const { + *numCutRows = rows_; + *numCutCols = cols_; +} + +int defiVia::hasOrigin() const { + if (xOffset_) + return xOffset_; + else + return yOffset_; +} + +void defiVia::origin(int* xOffset, int* yOffset) const { + *xOffset = xOffset_; + *yOffset = yOffset_; +} + +int defiVia::hasOffset() const { + if (xBotOffset_) + return xBotOffset_; + else if (yBotOffset_) + return yBotOffset_; + else if (xTopOffset_) + return xTopOffset_; + else + return yTopOffset_; +} + +void defiVia::offset(int* xBotOffset, int* yBotOffset, int* xTopOffset, + int* yTopOffset) const { + *xBotOffset = xBotOffset_; + *yBotOffset = yBotOffset_; + *xTopOffset = xTopOffset_; + *yTopOffset = yTopOffset_; +} + +int defiVia::hasCutPattern() const { + return hasCutPattern_; +} + +int defiVia::hasRectMask(int index) const { + if (index > 0 || index < numLayers_) { + return rectMask_[index]; + } + + return 0; +} + +int defiVia::hasPolyMask(int index) const { + if (index > 0 || index < numPolys_) { + return polyMask_[index]; + } + + return 0; +} + +const char* defiVia::cutPattern() const { + return cutPattern_; +} + +void defiVia::print(FILE* f) const { + int i; + int xl, yl, xh, yh; + char* c; + char* vrn; + char *bl, *cl, *tl; + int xs, ys, xcs, ycs, xbe, ybe, xte, yte; + int cr, cc, xo, yo, xbo, ybo, xto, yto; + + fprintf(f, "via '%s'\n", name()); + + if (hasPattern()) + fprintf(f, " pattern '%s'\n", pattern()); + + for (i = 0; i < numLayers(); i++) { + layer(i, &c, &xl, &yl, &xh, &yh); + fprintf(f, " layer '%s' %d,%d %d,%d\n", c, xl, yl, xh, yh); + } + + if (hasViaRule()) { + viaRule(&vrn, &xs, &ys, &bl, &cl, &tl, &xcs, &ycs, + &xbe, &ybe, &xte, &yte); + fprintf(f, " viarule '%s'\n", vrn); + fprintf(f, " cutsize %d %d\n", xs, ys); + fprintf(f, " layers %s %s %s\n", bl, cl, tl); + fprintf(f, " cutspacing %d %d\n", xcs, ycs); + fprintf(f, " enclosure %d %d %d %d\n", xbe, ybe, xte, yte); + if (hasRowCol()) { + rowCol(&cr, &cc); + fprintf(f, " rowcol %d %d\n", cr, cc); + } + if (hasOrigin()) { + origin(&xo, &yo); + fprintf(f, " origin %d %d\n", xo, yo); + } + if (hasOffset()) { + offset(&xbo, &ybo, &xto, &yto); + fprintf(f, " offset %d %d %d %d\n", xbo, ybo, xto, yto); + } + if (hasCutPattern()) + fprintf(f, " pattern '%s'\n", cutPattern()); + } +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defiVia.hpp b/lefdef/src/def/def/defiVia.hpp new file mode 100644 index 00000000..7ae57bca --- /dev/null +++ b/lefdef/src/def/def/defiVia.hpp @@ -0,0 +1,149 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defiVia_h +#define defiVia_h + +#include "defiKRDefs.hpp" +#include +#include "defiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrData; + +// Struct holds the data for one property. +class defiVia { +public: + defiVia(defrData *data); + void Init(); + + void clear(); + void Destroy(); + ~defiVia(); + + void setup(const char* name); + void addPattern(const char* patt); + void addLayer(const char* layer, int xl, int yl, int xh, int yh, int colorMask = 0); + // 5.6 + void addPolygon(const char* layer, defiGeometries* geom, int colorMask = 0); + void addViaRule(char* viaRuleName, int xSize, int ySize, char* botLayer, + char* cutLayer, char* topLayer, int xSpacing, int ySpacing, + int xBotEnc, int yBotEnc, int xTopEnc, int yTopEnc); + void addRowCol(int numCutRows, int numCutCols); + void addOrigin(int xOffset, int yOffset); + void addOffset(int xBotOs, int yBotOs, int xTopOs, int yTopOs); + void addCutPattern(char* cutPattern); + + const char* name() const; + const char* pattern() const; + int hasPattern() const; + int numLayers() const; + void layer(int index, char** layer, int* xl, int* yl, int* xh, int* yh) const; + int numPolygons() const; // 5.6 + const char* polygonName(int index) const; // 5.6 + defiPoints getPolygon(int index) const; // 5.6 + int hasViaRule() const; + void viaRule(char** viaRuleName, int* xSize, int* ySize, char** botLayer, + char** cutLayer, char** topLayer, int* xCutSpacing, + int* yCutSpacing, int* xBotEnc, int* yBotEnc, int* xTopEnc, + int* yTopEnc) const; + int hasRowCol() const; + void rowCol(int* numCutRows, int* numCutCols) const; + int hasOrigin() const; + void origin(int* xOffset, int* yOffset) const; + int hasOffset() const; + void offset(int* xBotOffset, int* yBotOffset, int* xTopOffset, + int* yTopOffset) const; + int hasCutPattern() const; + const char* cutPattern() const; + int hasRectMask(int index) const; + int rectMask(int index) const; + int hasPolyMask(int index) const; + int polyMask(int index) const; + + void print(FILE* f) const; + +protected: + char* name_; + int nameLength_; + char* pattern_; + int patternLength_; + char** layers_; + int hasPattern_; + int* xl_; + int* yl_; + int* xh_; + int* yh_; + int layersLength_; + int numLayers_; + int numPolys_; // 5.6 + char** polygonNames_; // 5.6 layerName for POLYGON + int polysAllocated_; // 5.6 + defiPoints** polygons_; // 5.6 + char* viaRule_; // 5.6 + int viaRuleLength_; // 5.6 + int hasViaRule_; // 5.6 + int xSize_; // 5.6 + int ySize_; // 5.6 + char* botLayer_; // 5.6 + char* cutLayer_; // 5.6 + char* topLayer_; // 5.6 + int botLayerLength_; // 5.6 + int cutLayerLength_; // 5.6 + int topLayerLength_; // 5.6 + int xCutSpacing_; // 5.6 + int yCutSpacing_; // 5.6 + int xBotEnc_; // 5.6 + int yBotEnc_; // 5.6 + int xTopEnc_; // 5.6 + int yTopEnc_; // 5.6 + int rows_; // 5.6 + int cols_; // 5.6 + int xOffset_; // 5.6 + int yOffset_; // 5.6 + int xBotOffset_; // 5.6 + int yBotOffset_; // 5.6 + int xTopOffset_; // 5.6 + int yTopOffset_; // 5.6 + char* cutPattern_; // 5.6 + int cutPatternLength_; // 5.6 + int hasCutPattern_; // 5.6 + int* rectMask_; // 5.8 + int* polyMask_; // 5.8 + + defrData *defData; +}; + + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defrCallBacks.hpp b/lefdef/src/def/def/defrCallBacks.hpp new file mode 100644 index 00000000..355aa996 --- /dev/null +++ b/lefdef/src/def/def/defrCallBacks.hpp @@ -0,0 +1,159 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef DEFRCALLBACKS_H +#define DEFRCALLBACKS_H 1 + +#include "defiKRDefs.hpp" + +#include "defrReader.hpp" + +#include "defrReader.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class defrCallbacks { +public: + defrCallbacks(); + + void SetUnusedCallbacks(defrVoidCbkFnType f); + + defrStringCbkFnType DesignCbk; + defrStringCbkFnType TechnologyCbk; + defrVoidCbkFnType DesignEndCbk; + defrPropCbkFnType PropCbk; + defrVoidCbkFnType PropDefEndCbk; + defrVoidCbkFnType PropDefStartCbk; + defrStringCbkFnType ArrayNameCbk; + defrStringCbkFnType FloorPlanNameCbk; + defrDoubleCbkFnType UnitsCbk; + defrStringCbkFnType DividerCbk; + defrStringCbkFnType BusBitCbk; + defrSiteCbkFnType SiteCbk; + defrSiteCbkFnType CanplaceCbk; + defrSiteCbkFnType CannotOccupyCbk; + defrIntegerCbkFnType ComponentStartCbk; + defrVoidCbkFnType ComponentEndCbk; + defrComponentCbkFnType ComponentCbk; + defrComponentMaskShiftLayerCbkFnType ComponentMaskShiftLayerCbk; + defrIntegerCbkFnType NetStartCbk; + defrVoidCbkFnType NetEndCbk; + defrNetCbkFnType NetCbk; + defrStringCbkFnType NetNameCbk; + defrStringCbkFnType NetSubnetNameCbk; + defrStringCbkFnType NetNonDefaultRuleCbk; + defrNetCbkFnType NetPartialPathCbk; + defrPathCbkFnType PathCbk; + defrDoubleCbkFnType VersionCbk; + defrStringCbkFnType VersionStrCbk; + defrStringCbkFnType PinExtCbk; + defrStringCbkFnType ComponentExtCbk; + defrStringCbkFnType ViaExtCbk; + defrStringCbkFnType NetConnectionExtCbk; + defrStringCbkFnType NetExtCbk; + defrStringCbkFnType GroupExtCbk; + defrStringCbkFnType ScanChainExtCbk; + defrStringCbkFnType IoTimingsExtCbk; + defrStringCbkFnType PartitionsExtCbk; + defrStringCbkFnType HistoryCbk; + defrBoxCbkFnType DieAreaCbk; + defrPinCapCbkFnType PinCapCbk; + defrPinCbkFnType PinCbk; + defrIntegerCbkFnType StartPinsCbk; + defrVoidCbkFnType PinEndCbk; + defrIntegerCbkFnType DefaultCapCbk; + defrRowCbkFnType RowCbk; + defrTrackCbkFnType TrackCbk; + defrGcellGridCbkFnType GcellGridCbk; + defrIntegerCbkFnType ViaStartCbk; + defrVoidCbkFnType ViaEndCbk; + defrViaCbkFnType ViaCbk; + defrIntegerCbkFnType RegionStartCbk; + defrVoidCbkFnType RegionEndCbk; + defrRegionCbkFnType RegionCbk; + defrIntegerCbkFnType SNetStartCbk; + defrVoidCbkFnType SNetEndCbk; + defrNetCbkFnType SNetCbk; + defrNetCbkFnType SNetPartialPathCbk; + defrNetCbkFnType SNetWireCbk; + defrIntegerCbkFnType GroupsStartCbk; + defrVoidCbkFnType GroupsEndCbk; + defrStringCbkFnType GroupNameCbk; + defrStringCbkFnType GroupMemberCbk; + defrGroupCbkFnType GroupCbk; + defrIntegerCbkFnType AssertionsStartCbk; + defrVoidCbkFnType AssertionsEndCbk; + defrAssertionCbkFnType AssertionCbk; + defrIntegerCbkFnType ConstraintsStartCbk; + defrVoidCbkFnType ConstraintsEndCbk; + defrAssertionCbkFnType ConstraintCbk; + defrIntegerCbkFnType ScanchainsStartCbk; + defrVoidCbkFnType ScanchainsEndCbk; + defrScanchainCbkFnType ScanchainCbk; + defrIntegerCbkFnType IOTimingsStartCbk; + defrVoidCbkFnType IOTimingsEndCbk; + defrIOTimingCbkFnType IOTimingCbk; + defrIntegerCbkFnType FPCStartCbk; + defrVoidCbkFnType FPCEndCbk; + defrFPCCbkFnType FPCCbk; + defrIntegerCbkFnType TimingDisablesStartCbk; + defrVoidCbkFnType TimingDisablesEndCbk; + defrTimingDisableCbkFnType TimingDisableCbk; + defrIntegerCbkFnType PartitionsStartCbk; + defrVoidCbkFnType PartitionsEndCbk; + defrPartitionCbkFnType PartitionCbk; + defrIntegerCbkFnType PinPropStartCbk; + defrVoidCbkFnType PinPropEndCbk; + defrPinPropCbkFnType PinPropCbk; + defrIntegerCbkFnType CaseSensitiveCbk; + defrIntegerCbkFnType BlockageStartCbk; + defrVoidCbkFnType BlockageEndCbk; + defrBlockageCbkFnType BlockageCbk; + defrIntegerCbkFnType SlotStartCbk; + defrVoidCbkFnType SlotEndCbk; + defrSlotCbkFnType SlotCbk; + defrIntegerCbkFnType FillStartCbk; + defrVoidCbkFnType FillEndCbk; + defrFillCbkFnType FillCbk; + defrIntegerCbkFnType NonDefaultStartCbk; + defrVoidCbkFnType NonDefaultEndCbk; + defrNonDefaultCbkFnType NonDefaultCbk; + defrIntegerCbkFnType StylesStartCbk; + defrVoidCbkFnType StylesEndCbk; + defrStylesCbkFnType StylesCbk; + defrStringCbkFnType ExtensionCbk; + + +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defrCallbacks.cpp b/lefdef/src/def/def/defrCallbacks.cpp new file mode 100644 index 00000000..d630fba8 --- /dev/null +++ b/lefdef/src/def/def/defrCallbacks.cpp @@ -0,0 +1,351 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #5 $ +// $Date: 2013/03/13 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include "defrCallBacks.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +defrCallbacks::defrCallbacks() +: DesignCbk(NULL), + TechnologyCbk(NULL), + DesignEndCbk(NULL), + PropCbk(NULL), + PropDefEndCbk(NULL), + PropDefStartCbk(NULL), + ArrayNameCbk(NULL), + FloorPlanNameCbk(NULL), + UnitsCbk(NULL), + DividerCbk(NULL), + BusBitCbk(NULL), + SiteCbk(NULL), + CanplaceCbk(NULL), + CannotOccupyCbk(NULL), + ComponentStartCbk(NULL), + ComponentEndCbk(NULL), + ComponentCbk(NULL), + NetStartCbk(NULL), + NetEndCbk(NULL), + NetCbk(NULL), + NetNameCbk(NULL), + NetSubnetNameCbk(NULL), + NetNonDefaultRuleCbk(NULL), + NetPartialPathCbk(NULL), + PathCbk(NULL), + VersionCbk(NULL), + VersionStrCbk(NULL), + PinExtCbk(NULL), + ComponentExtCbk(NULL), + ViaExtCbk(NULL), + NetConnectionExtCbk(NULL), + NetExtCbk(NULL), + GroupExtCbk(NULL), + ScanChainExtCbk(NULL), + IoTimingsExtCbk(NULL), + PartitionsExtCbk(NULL), + HistoryCbk(NULL), + DieAreaCbk(NULL), + PinCapCbk(NULL), + PinCbk(NULL), + StartPinsCbk(NULL), + PinEndCbk(NULL), + DefaultCapCbk(NULL), + RowCbk(NULL), + TrackCbk(NULL), + GcellGridCbk(NULL), + ViaStartCbk(NULL), + ViaEndCbk(NULL), + ViaCbk(NULL), + RegionStartCbk(NULL), + RegionEndCbk(NULL), + RegionCbk(NULL), + SNetStartCbk(NULL), + SNetEndCbk(NULL), + SNetCbk(NULL), + SNetPartialPathCbk(NULL), + SNetWireCbk(NULL), + GroupsStartCbk(NULL), + GroupsEndCbk(NULL), + GroupNameCbk(NULL), + GroupMemberCbk(NULL), + ComponentMaskShiftLayerCbk(NULL), + GroupCbk(NULL), + AssertionsStartCbk(NULL), + AssertionsEndCbk(NULL), + AssertionCbk(NULL), + ConstraintsStartCbk(NULL), + ConstraintsEndCbk(NULL), + ConstraintCbk(NULL), + ScanchainsStartCbk(NULL), + ScanchainsEndCbk(NULL), + ScanchainCbk(NULL), + IOTimingsStartCbk(NULL), + IOTimingsEndCbk(NULL), + IOTimingCbk(NULL), + FPCStartCbk(NULL), + FPCEndCbk(NULL), + FPCCbk(NULL), + TimingDisablesStartCbk(NULL), + TimingDisablesEndCbk(NULL), + TimingDisableCbk(NULL), + PartitionsStartCbk(NULL), + PartitionsEndCbk(NULL), + PartitionCbk(NULL), + PinPropStartCbk(NULL), + PinPropEndCbk(NULL), + PinPropCbk(NULL), + CaseSensitiveCbk(NULL), + BlockageStartCbk(NULL), + BlockageEndCbk(NULL), + BlockageCbk(NULL), + SlotStartCbk(NULL), + SlotEndCbk(NULL), + SlotCbk(NULL), + FillStartCbk(NULL), + FillEndCbk(NULL), + FillCbk(NULL), + NonDefaultStartCbk(NULL), + NonDefaultEndCbk(NULL), + NonDefaultCbk(NULL), + StylesStartCbk(NULL), + StylesEndCbk(NULL), + StylesCbk(NULL), + ExtensionCbk(NULL) +{ +} + + +void +defrCallbacks::SetUnusedCallbacks(defrVoidCbkFnType f) +{ + if (!DesignCbk) + DesignCbk = (defrStringCbkFnType) f; + if (!TechnologyCbk) + TechnologyCbk = (defrStringCbkFnType) f; + if (!DesignEndCbk) + DesignEndCbk = (defrVoidCbkFnType) f; + if (!PropCbk) + PropCbk = (defrPropCbkFnType) f; + if (!PropDefEndCbk) + PropDefEndCbk = (defrVoidCbkFnType) f; + if (!PropDefStartCbk) + PropDefStartCbk = (defrVoidCbkFnType) f; + if (!ArrayNameCbk) + ArrayNameCbk = (defrStringCbkFnType) f; + if (!FloorPlanNameCbk) + FloorPlanNameCbk = (defrStringCbkFnType) f; + if (!UnitsCbk) + UnitsCbk = (defrDoubleCbkFnType) f; + if (!DividerCbk) + DividerCbk = (defrStringCbkFnType) f; + if (!BusBitCbk) + BusBitCbk = (defrStringCbkFnType) f; + if (!SiteCbk) + SiteCbk = (defrSiteCbkFnType) f; + if (!CanplaceCbk) + CanplaceCbk = (defrSiteCbkFnType) f; + if (!CannotOccupyCbk) + CannotOccupyCbk = (defrSiteCbkFnType) f; + if (!ComponentStartCbk) + ComponentStartCbk = (defrIntegerCbkFnType) f; + if (!ComponentEndCbk) + ComponentEndCbk = (defrVoidCbkFnType) f; + if (!ComponentCbk) + ComponentCbk = (defrComponentCbkFnType) f; + if (!NetStartCbk) + NetStartCbk = (defrIntegerCbkFnType) f; + if (!NetEndCbk) + NetEndCbk = (defrVoidCbkFnType) f; + if (!NetCbk) + NetCbk = (defrNetCbkFnType) f; + // if (! defrNetPartialPathCbk) defrNetPartialPathCbk = (defrNetCbkFnType)f; + if (!PathCbk) + PathCbk = (defrPathCbkFnType) f; + if ((!VersionCbk) && (!VersionStrCbk)) { + // both version callbacks weren't set, if either one is set, it is ok + VersionCbk = (defrDoubleCbkFnType) f; + VersionStrCbk = (defrStringCbkFnType) f; + } + if (!PinExtCbk) + PinExtCbk = (defrStringCbkFnType) f; + if (!ComponentExtCbk) + ComponentExtCbk = (defrStringCbkFnType) f; + if (!ViaExtCbk) + ViaExtCbk = (defrStringCbkFnType) f; + if (!NetConnectionExtCbk) + NetConnectionExtCbk = (defrStringCbkFnType) f; + if (!NetExtCbk) + NetExtCbk = (defrStringCbkFnType) f; + if (!GroupExtCbk) + GroupExtCbk = (defrStringCbkFnType) f; + if (!ScanChainExtCbk) + ScanChainExtCbk = (defrStringCbkFnType) f; + if (!IoTimingsExtCbk) + IoTimingsExtCbk = (defrStringCbkFnType) f; + if (!PartitionsExtCbk) + PartitionsExtCbk = (defrStringCbkFnType) f; + if (!HistoryCbk) + HistoryCbk = (defrStringCbkFnType) f; + if (!DieAreaCbk) + DieAreaCbk = (defrBoxCbkFnType) f; + if (!PinCapCbk) + PinCapCbk = (defrPinCapCbkFnType) f; + if (!PinCbk) + PinCbk = (defrPinCbkFnType) f; + if (!StartPinsCbk) + StartPinsCbk = (defrIntegerCbkFnType) f; + if (!PinEndCbk) + PinEndCbk = (defrVoidCbkFnType) f; + if (!DefaultCapCbk) + DefaultCapCbk = (defrIntegerCbkFnType) f; + if (!RowCbk) + RowCbk = (defrRowCbkFnType) f; + if (!TrackCbk) + TrackCbk = (defrTrackCbkFnType) f; + if (!GcellGridCbk) + GcellGridCbk = (defrGcellGridCbkFnType) f; + if (!ViaStartCbk) + ViaStartCbk = (defrIntegerCbkFnType) f; + if (!ViaEndCbk) + ViaEndCbk = (defrVoidCbkFnType) f; + if (!ViaCbk) + ViaCbk = (defrViaCbkFnType) f; + if (!RegionStartCbk) + RegionStartCbk = (defrIntegerCbkFnType) f; + if (!RegionEndCbk) + RegionEndCbk = (defrVoidCbkFnType) f; + if (!RegionCbk) + RegionCbk = (defrRegionCbkFnType) f; + if (!SNetStartCbk) + SNetStartCbk = (defrIntegerCbkFnType) f; + if (!SNetEndCbk) + SNetEndCbk = (defrVoidCbkFnType) f; + if (!SNetCbk) + SNetCbk = (defrNetCbkFnType) f; + // if(! defrSNetPartialPathCbk) defrSNetPartialPathCbk = (defrNetCbkFnType)f; + // if(! defrSNetWireCbk) defrSNetWireCbk = (defrNetCbkFnType)f; + if (!GroupsStartCbk) + GroupsStartCbk = (defrIntegerCbkFnType) f; + if (!GroupsEndCbk) + GroupsEndCbk = (defrVoidCbkFnType) f; + if (!GroupNameCbk) + GroupNameCbk = (defrStringCbkFnType) f; + if (!GroupMemberCbk) + GroupMemberCbk = (defrStringCbkFnType) f; + if (!ComponentMaskShiftLayerCbk) + ComponentMaskShiftLayerCbk = (defrComponentMaskShiftLayerCbkFnType) f; + if (!GroupCbk) + GroupCbk = (defrGroupCbkFnType) f; + if (!AssertionsStartCbk) + AssertionsStartCbk = (defrIntegerCbkFnType) f; + if (!AssertionsEndCbk) + AssertionsEndCbk = (defrVoidCbkFnType) f; + if (!AssertionCbk) + AssertionCbk = (defrAssertionCbkFnType) f; + if (!ConstraintsStartCbk) + ConstraintsStartCbk = (defrIntegerCbkFnType) f; + if (!ConstraintsEndCbk) + ConstraintsEndCbk = (defrVoidCbkFnType) f; + if (!ConstraintCbk) + ConstraintCbk = (defrAssertionCbkFnType) f; + if (!ScanchainsStartCbk) + ScanchainsStartCbk = (defrIntegerCbkFnType) f; + if (!ScanchainsEndCbk) + ScanchainsEndCbk = (defrVoidCbkFnType) f; + if (!ScanchainCbk) + ScanchainCbk = (defrScanchainCbkFnType) f; + if (!IOTimingsStartCbk) + IOTimingsStartCbk = (defrIntegerCbkFnType) f; + if (!IOTimingsEndCbk) + IOTimingsEndCbk = (defrVoidCbkFnType) f; + if (!IOTimingCbk) + IOTimingCbk = (defrIOTimingCbkFnType) f; + if (!FPCStartCbk) + FPCStartCbk = (defrIntegerCbkFnType) f; + if (!FPCEndCbk) + FPCEndCbk = (defrVoidCbkFnType) f; + if (!FPCCbk) + FPCCbk = (defrFPCCbkFnType) f; + if (!TimingDisablesStartCbk) + TimingDisablesStartCbk = (defrIntegerCbkFnType) f; + if (!TimingDisablesEndCbk) + TimingDisablesEndCbk = (defrVoidCbkFnType) f; + if (!TimingDisableCbk) + TimingDisableCbk = (defrTimingDisableCbkFnType) f; + if (!PartitionsStartCbk) + PartitionsStartCbk = (defrIntegerCbkFnType) f; + if (!PartitionsEndCbk) + PartitionsEndCbk = (defrVoidCbkFnType) f; + if (!PartitionCbk) + PartitionCbk = (defrPartitionCbkFnType) f; + if (!PinPropStartCbk) + PinPropStartCbk = (defrIntegerCbkFnType) f; + if (!PinPropEndCbk) + PinPropEndCbk = (defrVoidCbkFnType) f; + if (!PinPropCbk) + PinPropCbk = (defrPinPropCbkFnType) f; + if (!CaseSensitiveCbk) + CaseSensitiveCbk = (defrIntegerCbkFnType) f; + if (!BlockageStartCbk) + BlockageStartCbk = (defrIntegerCbkFnType) f; + if (!BlockageEndCbk) + BlockageEndCbk = (defrVoidCbkFnType) f; + if (!BlockageCbk) + BlockageCbk = (defrBlockageCbkFnType) f; + if (!SlotStartCbk) + SlotStartCbk = (defrIntegerCbkFnType) f; + if (!SlotEndCbk) + SlotEndCbk = (defrVoidCbkFnType) f; + if (!SlotCbk) + SlotCbk = (defrSlotCbkFnType) f; + if (!FillStartCbk) + FillStartCbk = (defrIntegerCbkFnType) f; + if (!FillEndCbk) + FillEndCbk = (defrVoidCbkFnType) f; + if (!FillCbk) + FillCbk = (defrFillCbkFnType) f; + if (!NonDefaultStartCbk) + NonDefaultStartCbk = (defrIntegerCbkFnType) f; + if (!NonDefaultEndCbk) + NonDefaultEndCbk = (defrVoidCbkFnType) f; + if (!NonDefaultCbk) + NonDefaultCbk = (defrNonDefaultCbkFnType) f; + if (!StylesStartCbk) + StylesStartCbk = (defrIntegerCbkFnType) f; + if (!StylesEndCbk) + StylesEndCbk = (defrVoidCbkFnType) f; + if (!StylesCbk) + StylesCbk = (defrStylesCbkFnType) f; + if (!ExtensionCbk) + ExtensionCbk = (defrStringCbkFnType) f; + + /* NEW CALLBACK - Each new callback must have an entry here. */ +} + + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/def/def/defrData.cpp b/lefdef/src/def/def/defrData.cpp new file mode 100644 index 00000000..135245ee --- /dev/null +++ b/lefdef/src/def/def/defrData.cpp @@ -0,0 +1,506 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013-2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #6 $ +// $Date: 2013/08/09 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include + +#include "defrData.hpp" +#include "defrSettings.hpp" + +using namespace std; + +BEGIN_LEFDEF_PARSER_NAMESPACE + +defrData::defrData(const defrCallbacks *pCallbacks, + const defrSettings *pSettings, + defrSession *pSession) +: callbacks(pCallbacks), + settings(pSettings), + session(pSession), + Subnet(0), + aOxide(0), + assertionWarnings(0), + bit_is_keyword(0), + bitsNum(0), + blockageWarnings(0), + by_is_keyword(0), + caseSensitiveWarnings(0), + ch(NULL), + componentWarnings(0), + constraintWarnings(0), + cover_is_keyword(0), + defIgnoreVersion(0), + defInvalidChar(0), + defMsg(NULL), + defMsgCnt(5500), + defMsgPrinted(0), + defPrintTokens(0), + defPropDefType('\0'), + defRetVal(0), + def_warnings(0), + defaultCapWarnings(0), + defrLog(0), + do_is_keyword(0), + dumb_mode(0), + errors(0), + fillWarnings(0), + first_buffer(0), + fixed_is_keyword(0), + gcellGridWarnings(0), + hasBlkLayerComp(0), + hasBlkLayerSpac(0), + hasBlkLayerTypeComp(0), + hasBlkPlaceComp(0), + hasBlkPlaceTypeComp(0), + hasBusBit(0), + hasDes(0), + hasDivChar(0), + hasDoStep(0), + hasNameCase(0), + hasOpenedDefLogFile(0), + hasPort(0), + hasVer(0), + hasFatalError(0), + iOTimingWarnings(0), + input_level(-1), + last(NULL), + magic((char*)malloc(1)), + mask_is_keyword(0), + mustjoin_is_keyword(0), + names_case_sensitive(1), + needNPCbk(0), + needSNPCbk(0), + netOsnet(0), + netWarnings(0), + new_is_keyword(0), + next(NULL), + nlines(1), + nl_token(FALSE), + no_num(0), + nonDefaultWarnings(0), + nondef_is_keyword(0), + ntokens(0), + orient_is_keyword(0), + pinExtWarnings(0), + pinWarnings(0), + real_num(0), + rect_is_keyword(0), + regTypeDef(0), + regionWarnings(0), + ringPlace(0), + routed_is_keyword(0), + rowName(NULL), + rowWarnings(0), + sNetWarnings(0), + save_x(0.0), + save_y(0.0), + scanchainWarnings(0), + shield(FALSE), + shieldName(NULL), + shiftBuf(0), + shiftBufLength(0), + specialWire_mask(0), + step_is_keyword(0), + stylesWarnings(0), + trackWarnings(0), + unitsWarnings(0), + versionWarnings(0), + viaRule(0), + viaWarnings(0), + virtual_is_keyword(0), + deftokenLength(TOKEN_SIZE), + warningMsg(NULL), + specialWire_routeStatus((char*) "ROUTED"), + specialWire_routeStatusName((char *)""), + specialWire_shapeType((char*)""), + VersionNum(5.7), + xStep(0), + yStep(0), + lVal(0.0), + rVal(0.0), + // defrReader vars + PathObj(this), + Prop(this), + Site(this), + Component(this), + ComponentMaskShiftLayer(this), + Net(this), + PinCap(), + CannotOccupy(this), + Canplace(this), + DieArea(), + Pin(this), + Row(this), + Track(this), + GcellGrid(this), + Via(this), + Region(this), + Group(this), + Assertion(this), + Scanchain(this), + IOTiming(this), + FPC(this), + TimingDisable(this), + Partition(this), + PinProp(this), + Blockage(this), + Slot(this), + Fill(this), + NonDefault(this), + Styles(), + Geometries(this), + doneDesign(0), + NeedPathData(0), + deftoken((char*)malloc(TOKEN_SIZE)), + uc_token((char*)malloc(TOKEN_SIZE)), + pv_deftoken((char*)malloc(TOKEN_SIZE)), + File(0) +{ + magic[0] = '\0'; + deftoken[0] = '\0'; + History_text.push_back('\0'); + + memset(msgLimit, 0, DEF_MSGS * sizeof(int)); + memset(buffer, 0, IN_BUF_SIZE * sizeof(char)); + memset(ring, 0, RING_SIZE * sizeof(char*)); + memset(ringSizes, 0, RING_SIZE * sizeof(int)); + memset(lineBuffer, 0, MSG_SIZE * sizeof(char)); + + // initRingBuffer + int i; + ringPlace = 0; + for (i = 0; i < RING_SIZE; i++) { + ring[i] = (char*)malloc(TOKEN_SIZE); + ringSizes[i] = TOKEN_SIZE; + } + + nlines = 1; + last = buffer-1; + next = buffer; + first_buffer = 1; + + lVal = strtod("-2147483648", &ch); + rVal = strtod("2147483647", &ch); +} + + +defrData::~defrData() +{ + // lex_un_init. + /* Close the file */ + if (defrLog) { + fclose(defrLog); + defrLog = 0; + } + + free(deftoken); + free(uc_token); + free(pv_deftoken); + free(magic); + + // freeRingBuffer. + int i; + + ringPlace = 0; + for (i = 0; i < RING_SIZE; i++) { + free(ring[i]); + } +} + +void +defrData::defiError(int check, int msgNum, const char* mess) +{ + /* check is 1 if the caller function has checked totalMsgLimit, etc. */ + + if (!check) { + if ((settings->totalDefMsgLimit > 0) && (defMsgPrinted >= settings->totalDefMsgLimit)) + return; + if (settings->MsgLimit[msgNum-5000] > 0) { + if (msgLimit[msgNum-5000] >= settings->MsgLimit[msgNum-5000]) + return; /*over the limit*/ + msgLimit[msgNum-5000] = msgLimit[msgNum-5000] + 1; + } + defMsgPrinted++; + } + + + if (settings->ContextErrorLogFunction) { + (*(settings->ContextErrorLogFunction))(session->UserData, mess); + } else if (settings->ErrorLogFunction) { + (*(settings->ErrorLogFunction))(mess); + } else { + fprintf(stderr, mess); + } +} + +const char* +defrData::upperCase(const char* str) +{ + const static char defiShift [] = { + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + ' ', '!', '"', '#', '$', '%', '&', '\'', + '(', ')', '*', '+', ',', '-', '.', '/', + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', + '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', + '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'l', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', '{', '|', '}', '~', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' + }; + + char* place = (char*)str; + char* to; + int len = strlen(str) + 1; + + if (len > shiftBufLength) { + if (shiftBuf == 0) { + len = len < 64 ? 64 : len; + shiftBuf = (char*)malloc(len); + shiftBufLength = len; + } else { + free(shiftBuf); + shiftBuf = (char*)malloc(len); + shiftBufLength = len; + } + } + + to = shiftBuf; + while (*place) { + int i = (int)*place; + place++; + *to++ = defiShift[i]; + } + *to = '\0'; + + return shiftBuf; +} + +int +defrData::validateMaskInput(int input, int warningIndex, int getWarningsIndex) +{ + if (VersionNum < 5.8 && input > 0) { + if (warningIndex++ < getWarningsIndex) { + defMsg = (char*)malloc(1000); + sprintf (defMsg, + "The MASK statement is available in version 5.8 and later.\nHowever, your DEF file is defined with version %g", VersionNum); + defError(7415, defMsg); + free(defMsg); + if (checkErrors()) { + return 1; + } + return 0; + } + } + + return 1; +} + +int +defrData::validateMaskShiftInput(const char* shiftMask, int warningIndex, int getWarningsIndex) +{ + int shiftMaskLength = strlen(shiftMask); + int hasShiftData = 0; + int hasError = 0; + + // Verification of the mask string + for (int i = 0; i < shiftMaskLength; i++) { + int curShift = shiftMask[i]; + + if (curShift < '0' || curShift > '9') { + hasError = 1; + } + + if (curShift > '0') { + hasShiftData = 1; + } + } + + if (hasError) { + char *msg = (char*)malloc(1000); + + sprintf(msg, + "The MASKSHIFT value '%s' is not valid. The value should be a string consisting of decimal digits ('0' - '9').", + shiftMask); + defError(7416, msg); + free(msg); + + if (checkErrors()) { + return 1; + } + + return 0; + } + + if (VersionNum < 5.8 && hasShiftData) { + if (warningIndex++ < getWarningsIndex) { + char *msg = (char*)malloc(1000); + + sprintf (msg, + "The MASKSHIFT statement can be used only in DEF version 5.8 and later. This DEF file version is '%g'.", + VersionNum); + defError(7417, msg); + free(msg); + if (checkErrors()) { + return 1; + } + } + + return 0; + } + + return 1; +} + +double +defrData::convert_defname2num(char *versionName) +{ + char majorNm[80]; + char minorNm[80]; + char *subMinorNm = NULL; + char *versionNm = strdup(versionName); + + double major = 0, minor = 0, subMinor = 0; + double version; + + sscanf(versionNm, "%[^.].%s", majorNm, minorNm); + + char *p1 = strchr(minorNm, '.'); + if (p1) { + subMinorNm = p1+1; + *p1 = '\0'; + } + major = atof(majorNm); + minor = atof(minorNm); + if (subMinorNm) + subMinor = atof(subMinorNm); + + version = major; + + if (minor > 0) + version = major + minor/10; + + if (subMinor > 0) + version = version + subMinor/1000; + + free(versionNm); + return version; +} + +int +defrData::numIsInt (char* volt) { + if (strchr(volt, '.')) // a floating point + return 0; + else + return 1; +} + +int +defrData::defValidNum(int values) { + char *outMsg; + switch (values) { + case 100: + case 200: + case 1000: + case 2000: + return 1; + case 400: + case 800: + case 4000: + case 8000: + case 10000: + case 20000: + if (VersionNum < 5.6) { + if (callbacks->UnitsCbk) { + if (unitsWarnings++ < settings->UnitsWarnings) { + outMsg = (char*)malloc(1000); + sprintf (outMsg, + "An error has been found while processing the DEF file '%s'\nUnit %d is a 5.6 or later syntax. Define the DEF file as 5.6 and then try again.", + session->FileName, values); + defError(6501, outMsg); + free(outMsg); + } + } + + return 0; + } else { + return 1; + } + } + if (callbacks->UnitsCbk) { + if (unitsWarnings++ < settings->UnitsWarnings) { + outMsg = (char*)malloc(10000); + sprintf (outMsg, + "The value %d defined for DEF UNITS DISTANCE MICRON is invalid\n. The valid values are 100, 200, 400, 800, 1000, 2000, 4000, 8000, 10000, or 20000. Specify a valid value and then try again.", values); + defError(6502, outMsg); + free(outMsg); + if (checkErrors()) { + return 1; + } + } + } + return 0; +} + +defrContext::defrContext(int ownConf) +: callbacks(0), +settings(0), +session(0), +data(0), +ownConfig(ownConf), +init_call_func(0) +{ +} + +defrContext defContext; + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/def/def/defrData.hpp b/lefdef/src/def/def/defrData.hpp new file mode 100644 index 00000000..1a7f5d15 --- /dev/null +++ b/lefdef/src/def/def/defrData.hpp @@ -0,0 +1,307 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #6 $ +// $Date: 2013/08/09 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include + +#include "defrReader.hpp" +#include "defrCallBacks.hpp" +#include "defrSettings.hpp" + +#ifndef defrData_h +#define defrData_h + +#define CURRENT_VERSION 5.8 +#define RING_SIZE 10 +#define IN_BUF_SIZE 16384 +#define TOKEN_SIZE 4096 +#define MSG_SIZE 100 + + +BEGIN_LEFDEF_PARSER_NAMESPACE + +struct defCompareStrings +{ + bool operator()(const std::string &lhs, const std::string &rhs) const { + return std::strcmp(lhs.c_str(), rhs.c_str()) < 0; + } +}; + +typedef std::map defAliasMap; +typedef std::map defDefineMap; + +typedef union { + double dval ; + int integer ; + char * string ; + int keyword ; // really just a nop + struct defpoint pt; + defTOKEN *tk; +} YYSTYPE; + +#define YYSTYPE_IS_DECLARED + +class defrData { + +public: + defrData(const defrCallbacks *pCallbacks, + const defrSettings *pSettings, + defrSession *pSession); + ~defrData(); + + inline int defGetKeyword(const char* name, int *result); + inline int defGetAlias(const std::string &name, std::string &result); + inline int defGetDefine(const std::string &name, std::string &result); + void reload_buffer(); + int GETC(); + + void UNGETC(char ch); + char* ringCopy(const char* string); + int DefGetTokenFromStack(char *s); + inline void print_lines(long long lines); + const char * lines2str(long long lines); + static inline void IncCurPos(char **curPos, char **buffer, int *bufferSize); + int DefGetToken(char **buffer, int *bufferSize); + static void uc_array(char *source, char *dest); + void StoreAlias(); + int defyylex(YYSTYPE *pYylval); + int sublex(YYSTYPE *pYylval); + int amper_lookup(YYSTYPE *pYylval, char *tkn); + void defError(int msgNum, const char *s); + void defyyerror(const char *s); + void defInfo(int msgNum, const char *s); + void defWarning(int msgNum, const char *s); + + void defiError(int check, int msgNum, const char* mess); + const char *DEFCASE(const char* ch); + void pathIsDone(int shield, int reset, int netOsnet, int *needCbk); + const char *upperCase(const char* str); + + inline int checkErrors(); + int validateMaskInput(int input, int warningIndex, int getWarningsIndex); + int validateMaskShiftInput(const char* shiftMask, int warningIndex, int getWarningsIndex); + + static double convert_defname2num(char *versionName); + + static int numIsInt (char* volt); + int defValidNum(int values); + + inline static const char *defkywd(int num); + + FILE* defrLog; + char defPropDefType; // save the current type of the property + char* ch; + char* defMsg; + char* deftoken; + char* uc_token; + char* last; + char* magic; + char* next; + char* pv_deftoken; + char* rowName; // to hold the rowName for message + char* shieldName; // to hold the shieldNetName + char* shiftBuf; + char* warningMsg; + double save_x; + double save_y; + double lVal; + double rVal; + int aOxide; // keep track for oxide + int assertionWarnings; + int bit_is_keyword; + int bitsNum; // Scanchain Bits value + int blockageWarnings; + int by_is_keyword; + int caseSensitiveWarnings; + int componentWarnings; + int constraintWarnings; + int cover_is_keyword; + int defIgnoreVersion; // ignore checking version number + int defInvalidChar; + int defMsgCnt; + int defMsgPrinted; // number of msgs output so far + int defPrintTokens; + int defRetVal; + int def_warnings; + int defaultCapWarnings; + int do_is_keyword; + int dumb_mode; + int errors; + int fillWarnings; + int first_buffer; + int fixed_is_keyword; + int gcellGridWarnings; + int hasBlkLayerComp; // only 1 BLOCKAGE/LAYER/COMP + int hasBlkLayerSpac; // only 1 BLOCKAGE/LAYER/SPACING + int hasBlkLayerTypeComp; // SLOTS or FILLS + int hasBlkPlaceComp; // only 1 BLOCKAGE/PLACEMENT/COMP + int hasBlkPlaceTypeComp; // SOFT or PARTIAL + int hasBusBit; // keep track BUSBITCHARS is in the file + int hasDes; // keep track DESIGN is in the file + int hasDivChar; // keep track DIVIDERCHAR is in the file + int hasDoStep; + int hasNameCase; // keep track NAMESCASESENSITIVE is in the file + int hasOpenedDefLogFile; + int hasPort; // keep track is port defined in a Pin + int hasVer; // keep track VERSION is in the file + int hasFatalError; // don't report errors after the file end. + int iOTimingWarnings; + int input_level; + int mask_is_keyword; + int mustjoin_is_keyword; + int names_case_sensitive; // always true in 5.6 + int needNPCbk; // if cbk for net path is needed + int needSNPCbk; // if cbk for snet path is needed + int netOsnet; // net = 1 & snet = 2 + int netWarnings; + int new_is_keyword; + int nl_token; + int no_num; + int nonDefaultWarnings; + int nondef_is_keyword; + int ntokens; + int orient_is_keyword; + int pinExtWarnings; + int pinWarnings; + int real_num; + int rect_is_keyword; + int regTypeDef; // keep track that region type is defined + int regionWarnings; + int ringPlace; + int routed_is_keyword; + int rowWarnings; + int sNetWarnings; + int scanchainWarnings; + int shield; // To identify if the path is shield for 5.3 + int shiftBufLength; + int specialWire_mask; + int step_is_keyword; + int stylesWarnings; + int trackWarnings; + int unitsWarnings; + int versionWarnings; + int viaRule; // keep track the viarule has called first + int viaWarnings; + int virtual_is_keyword; + int deftokenLength; + long long nlines; + + std::vector History_text; + defAliasMap def_alias_set; + defDefineMap def_defines_set; + + char* specialWire_routeStatus; + char* specialWire_routeStatusName; + char* specialWire_shapeType; + double VersionNum; + double xStep; + double yStep; + + //defrParser vars. + defiPath PathObj; + defiProp Prop; + defiSite Site; + defiComponent Component; + defiComponentMaskShiftLayer ComponentMaskShiftLayer; + defiNet Net; + defiPinCap PinCap; + defiSite CannotOccupy; + defiSite Canplace; + defiBox DieArea; + defiPin Pin; + defiRow Row; + defiTrack Track; + defiGcellGrid GcellGrid; + defiVia Via; + defiRegion Region; + defiGroup Group; + defiAssertion Assertion; + defiScanchain Scanchain; + defiIOTiming IOTiming; + defiFPC FPC; + defiTimingDisable TimingDisable; + defiPartition Partition; + defiPinProp PinProp; + defiBlockage Blockage; + defiSlot Slot; + defiFill Fill; + defiNonDefault NonDefault; + defiStyles Styles; + defiGeometries Geometries; + int doneDesign; // keep track if the Design is done parsing + + // Flags to control what happens + int NeedPathData; + + defiSubnet* Subnet; + int msgLimit[DEF_MSGS]; + char buffer[IN_BUF_SIZE]; + char* ring[RING_SIZE]; + int ringSizes[RING_SIZE]; + std::string stack[20]; /* the stack itself */ + + YYSTYPE yylval; + const defrCallbacks *callbacks; + const defrSettings *settings; + defrSession *session; + char lineBuffer[MSG_SIZE]; + + FILE* File; +}; + +class defrContext { +public: + defrContext(int ownConf = 0); + + defrSettings *settings; + defrCallbacks *callbacks; + defrSession *session; + defrData *data; + int ownConfig; + const char *init_call_func; +}; + +int +defrData::checkErrors() +{ + if (errors > 20) { + defError(6011, "Too many syntax errors have been reported."); + errors = 0; + return 1; + } + + return 0; +} + +END_LEFDEF_PARSER_NAMESPACE + +#endif + diff --git a/lefdef/src/def/def/defrReader.cpp b/lefdef/src/def/def/defrReader.cpp new file mode 100644 index 00000000..c525576b --- /dev/null +++ b/lefdef/src/def/def/defrReader.cpp @@ -0,0 +1,2538 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: icftcm $ +// $Revision: #2 $ +// $Date: 2017/06/07 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include "defrReader.hpp" +#include "defiProp.hpp" +#include "defiPropType.hpp" +#include "defrCallBacks.hpp" +#include "defiDebug.hpp" +#include "defiMisc.hpp" +#include "defrData.hpp" +#include "defrSettings.hpp" + +#include +#include +#include +#include "lex.h" +#include "defiUtil.hpp" +#include "defrCallBacks.hpp" + +#define NODEFMSG 4013 // (9012 + 1) - 5000, def msg starts at 5000 + +# define DEF_INIT def_init(__FUNCTION__) + + +BEGIN_LEFDEF_PARSER_NAMESPACE + +extern defrContext defContext; + +void +def_init(const char *func) +{ + // Need for debugging config re-owning; + if (defContext.ownConfig) { + return; + } + + + if (defContext.settings == NULL) { + defContext.settings = new defrSettings(); + defContext.init_call_func = func; + } + + if (defContext.callbacks == NULL) { + defContext.callbacks = new defrCallbacks(); + defContext.init_call_func = func; + } + + if (defContext.session == NULL) { + defContext.session = new defrSession(); + defContext.init_call_func = func; + } +} + + +int +defrCountUnused(defrCallbackType_e e, + void *v, + defiUserData d) +{ + DEF_INIT; + int i; + if (defiDebug(23)) + printf("Count %d, 0x%p, 0x%p\n", (int) e, v, d); + i = (int) e; + if (i <= 0 || i >= CBMAX) { + return 1; + } + + defContext.settings->UnusedCallbacks[i] += 1; + + return 0; +} + + +const char * +typeToString(defrCallbackType_e num) +{ + switch ((int) num) { + + case defrUnspecifiedCbkType: + return "Unspecified"; + case defrDesignStartCbkType: + return "Design Start"; + case defrTechNameCbkType: + return "Tech Name"; + case defrPropCbkType: + return "Property"; + case defrPropDefEndCbkType: + return "Property Definitions Section End"; + case defrPropDefStartCbkType: + return "Property Definitions Section Start"; + case defrFloorPlanNameCbkType: + return "FloorPlanName"; + case defrArrayNameCbkType: + return "Array Name"; + case defrUnitsCbkType: + return "Units"; + case defrDividerCbkType: + return "Divider"; + case defrBusBitCbkType: + return "BusBit Character"; + case defrSiteCbkType: + return "Site"; + case defrComponentMaskShiftLayerCbkType: + return "ComponentMaskShiftLayer"; + case defrComponentStartCbkType: + return "Components Section Start"; + case defrComponentCbkType: + return "Component"; + case defrComponentEndCbkType: + return "Components Section End"; + case defrNetStartCbkType: + return "Nets Section Start"; + case defrNetCbkType: + return "Net"; + case defrNetNameCbkType: + return "Net Name"; + case defrNetNonDefaultRuleCbkType: + return "Net Nondefaultrule"; + case defrNetSubnetNameCbkType: + return "Net Subnet Name"; + case defrNetEndCbkType: + return "Nets Section End"; + case defrPathCbkType: + return "Path"; + case defrVersionCbkType: + return "Version"; + case defrVersionStrCbkType: + return "Version"; + case defrComponentExtCbkType: + return "Component User Extention"; + case defrPinExtCbkType: + return "Pin User Extension"; + case defrViaExtCbkType: + return "Via User Extension"; + case defrNetConnectionExtCbkType: + return "NetConnection User Extention"; + case defrNetExtCbkType: + return "Net User Extension"; + case defrGroupExtCbkType: + return "Group User Extension"; + case defrScanChainExtCbkType: + return "ScanChain User Extension"; + case defrIoTimingsExtCbkType: + return "IoTimings User Extension"; + case defrPartitionsExtCbkType: + return "Partitions User Extension"; + case defrHistoryCbkType: + return "History"; + case defrDieAreaCbkType: + return "DieArea"; + case defrCanplaceCbkType: + return "Canplace"; + case defrCannotOccupyCbkType: + return "CannotOccupy"; + case defrPinCapCbkType: + return "PinCap"; + case defrDefaultCapCbkType: + return "DefaultCap"; + case defrStartPinsCbkType: + return "Start Pins Section"; + case defrPinCbkType: + return "Pin"; + case defrPinEndCbkType: + return "End Pins Section"; + case defrRowCbkType: + return "Row"; + case defrTrackCbkType: + return "Track"; + case defrGcellGridCbkType: + return "GcellGrid"; + case defrViaStartCbkType: + return "Start Vias Section"; + case defrViaCbkType: + return "Via"; + case defrViaEndCbkType: + return "End Vias Section"; + case defrRegionStartCbkType: + return "Region Section Start"; + case defrRegionCbkType: + return "Region"; + case defrRegionEndCbkType: + return "Region Section End"; + case defrSNetStartCbkType: + return "Special Net Section Start"; + case defrSNetCbkType: + return "Special Net"; + case defrSNetEndCbkType: + return "Special Net Section End"; + case defrGroupsStartCbkType: + return "Groups Section Start"; + case defrGroupNameCbkType: + return "Group Name"; + case defrGroupMemberCbkType: + return "Group Member"; + case defrGroupCbkType: + return "Group"; + case defrGroupsEndCbkType: + return "Groups Section End"; + case defrAssertionsStartCbkType: + return "Assertions Section Start"; + case defrAssertionCbkType: + return "Assertion"; + case defrAssertionsEndCbkType: + return "Assertions Section End"; + case defrConstraintsStartCbkType: + return "Constraints Section Start"; + case defrConstraintCbkType: + return "Constraint"; + case defrConstraintsEndCbkType: + return "Constraints Section End"; + case defrScanchainsStartCbkType: + return "Scanchains Section Start"; + case defrScanchainCbkType: + return "Scanchain"; + case defrScanchainsEndCbkType: + return "Scanchains Section End"; + case defrIOTimingsStartCbkType: + return "IOTimings Section Start"; + case defrIOTimingCbkType: + return "IOTiming"; + case defrIOTimingsEndCbkType: + return "IOTimings Section End"; + case defrFPCStartCbkType: + return "Floor Plan Constraints Section Start"; + case defrFPCCbkType: + return "Floor Plan Constraint"; + case defrFPCEndCbkType: + return "Floor Plan Constraints Section End"; + case defrTimingDisablesStartCbkType: + return "TimingDisables Section Start"; + case defrTimingDisableCbkType: + return "TimingDisable"; + case defrTimingDisablesEndCbkType: + return "TimingDisables Section End"; + case defrPartitionsStartCbkType: + return "Partitions Section Start"; + case defrPartitionCbkType: + return "Partition"; + case defrPartitionsEndCbkType: + return "Partitions Section End"; + case defrPinPropStartCbkType: + return "PinProp Section Start"; + case defrPinPropCbkType: + return "PinProp"; + case defrPinPropEndCbkType: + return "PinProp Section End"; + case defrCaseSensitiveCbkType: + return "CaseSensitive"; + case defrBlockageStartCbkType: + return "Blockage Section Start"; + case defrBlockageCbkType: + return "Blockage"; + case defrBlockageEndCbkType: + return "Blockage Section End"; + case defrSlotStartCbkType: + return "Slots Section Start"; + case defrSlotCbkType: + return "Slots"; + case defrSlotEndCbkType: + return "Slots Section End"; + case defrFillStartCbkType: + return "Fills Section Start"; + case defrFillCbkType: + return "Fills"; + case defrFillEndCbkType: + return "Fills Section End"; + case defrNonDefaultStartCbkType: + return "NonDefaultRule Section Start"; + case defrNonDefaultCbkType: + return "NonDefault"; + case defrNonDefaultEndCbkType: + return "NonDefaultRule Section End"; + case defrStylesStartCbkType: + return "Styles Section Start"; + case defrStylesCbkType: + return "Styles"; + case defrStylesEndCbkType: + return "Styles Section End"; + case defrExtensionCbkType: + return "Extension"; + + // NEW CALLBACK - If you created a new callback then add the + // type enums that you created here for debug printing. + + case defrDesignEndCbkType: + return "DesignEnd"; + default: + break; + } + return "BOGUS"; +} + +int +defrCatchAll(defrCallbackType_e typ, void*, defiUserData) +{ + DEF_INIT; + + if ((int) typ >= 0 && (int) typ < CBMAX) { + defContext.settings->UnusedCallbacks[(int) typ] += 1; + } else { + defContext.settings->UnusedCallbacks[0] += 1; + return 1; + } + + return 0; +} + +// ***************************************************************** +// Wrapper functions. +// +// These functions provide access to the class member functions +// for compatibility with previous parser kits. Returns non-zero +// status if the initialization is failed. +// ***************************************************************** +int +defrInit() +{ + return defrInitSession(0); +} + +int +defrInitSession(int startSession) +{ + if (startSession) { + if (defContext.init_call_func != NULL) { + fprintf(stderr, "ERROR: Attempt to call configuration function '%s' in DEF parser before defrInit() call in session-based mode.\n", defContext.init_call_func); + return 1; + } + + delete defContext.settings; + defContext.settings = new defrSettings(); + + delete defContext.callbacks; + defContext.callbacks = new defrCallbacks(); + + delete defContext.session; + defContext.session = new defrSession(); + } else { + if (defContext.callbacks == NULL) { + defContext.callbacks = new defrCallbacks(); + } + + if (defContext.settings == NULL) { + defContext.settings = new defrSettings(); + } + + if (defContext.session == NULL) { + defContext.session = new defrSession(); + } else { + memset(defContext.settings->UnusedCallbacks, 0, CBMAX * sizeof(int)); + } + } + + defContext.ownConfig = 0; + defContext.init_call_func = 0; + + return 0; +} + +// obsoleted now +int +defrReset() +{ + return 0; +} + +int +defrClear() +{ + delete defContext.callbacks; + defContext.callbacks = NULL; + + delete defContext.settings; + defContext.settings = NULL; + + delete defContext.session; + defContext.session = NULL; + + delete defContext.data; + defContext.data = NULL; + + defContext.init_call_func = NULL; + defContext.ownConfig = 0; + + return 0; +} + + +void +defrSetRegisterUnusedCallbacks() +{ + DEF_INIT; + defrSetUnusedCallbacks(defrCountUnused); +} + +void +defrSetUnusedCallbacks(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SetUnusedCallbacks(f); +} + +void +defrUnsetCallbacks() +{ + DEF_INIT; + delete defContext.callbacks; + defContext.callbacks = new defrCallbacks(); +} + +void +defrPrintUnusedCallbacks(FILE *log) +{ + int i; + int first = 1; + + for (i = 0; i < CBMAX; i++) { + if (defContext.settings->UnusedCallbacks[i]) { + if (first) { + fprintf(log, + "WARNING (DEFPARS-5001): DEF statement found in the def file with no callback set.\n"); + first = 0; + } + fprintf(log, "%5d %s\n", defContext.settings->UnusedCallbacks[i], + typeToString((defrCallbackType_e) i)); + } + } +} + +// obsoleted +int +defrReleaseNResetMemory() +{ + return 0; +} + +void +defrUnsetArrayNameCbk() +{ + DEF_INIT; + defContext.callbacks->ArrayNameCbk = NULL; +} + +void +defrUnsetAssertionCbk() +{ + DEF_INIT; + defContext.callbacks->AssertionCbk = NULL; +} + +void +defrUnsetAssertionsStartCbk() +{ + DEF_INIT; + defContext.callbacks->AssertionsStartCbk = NULL; +} + +void +defrUnsetAssertionsEndCbk() +{ + DEF_INIT; + defContext.callbacks->AssertionsEndCbk = NULL; +} + +void +defrUnsetBlockageCbk() +{ + DEF_INIT; + defContext.callbacks->BlockageCbk = NULL; +} + +void +defrUnsetBlockageStartCbk() +{ + DEF_INIT; + defContext.callbacks->BlockageStartCbk = NULL; +} + +void +defrUnsetBlockageEndCbk() +{ + DEF_INIT; + defContext.callbacks->BlockageEndCbk = NULL; +} + +void +defrUnsetBusBitCbk() +{ + DEF_INIT; + defContext.callbacks->BusBitCbk = NULL; +} + +void +defrUnsetCannotOccupyCbk() +{ + DEF_INIT; + defContext.callbacks->CannotOccupyCbk = NULL; +} + +void +defrUnsetCanplaceCbk() +{ + DEF_INIT; + defContext.callbacks->CanplaceCbk = NULL; +} + +void +defrUnsetCaseSensitiveCbk() +{ + DEF_INIT; + defContext.callbacks->CaseSensitiveCbk = NULL; +} + +void +defrUnsetComponentCbk() +{ + DEF_INIT; + defContext.callbacks->ComponentCbk = NULL; +} + +void +defrUnsetComponentExtCbk() +{ + DEF_INIT; + defContext.callbacks->ComponentExtCbk = NULL; +} + +void +defrUnsetComponentStartCbk() +{ + DEF_INIT; + defContext.callbacks->ComponentStartCbk = NULL; +} + +void +defrUnsetComponentEndCbk() +{ + DEF_INIT; + defContext.callbacks->ComponentEndCbk = NULL; +} + +void +defrUnsetConstraintCbk() +{ + DEF_INIT; + defContext.callbacks->ConstraintCbk = NULL; +} + +void +defrUnsetConstraintsStartCbk() +{ + DEF_INIT; + defContext.callbacks->ConstraintsStartCbk = NULL; +} + +void +defrUnsetConstraintsEndCbk() +{ + DEF_INIT; + defContext.callbacks->ConstraintsEndCbk = NULL; +} + +void +defrUnsetDefaultCapCbk() +{ + DEF_INIT; + defContext.callbacks->DefaultCapCbk = NULL; +} + +void +defrUnsetDesignCbk() +{ + DEF_INIT; + defContext.callbacks->DesignCbk = NULL; +} + +void +defrUnsetDesignEndCbk() +{ + DEF_INIT; + defContext.callbacks->DesignEndCbk = NULL; +} + +void +defrUnsetDieAreaCbk() +{ + DEF_INIT; + defContext.callbacks->DieAreaCbk = NULL; +} + +void +defrUnsetDividerCbk() +{ + DEF_INIT; + defContext.callbacks->DividerCbk = NULL; +} + +void +defrUnsetExtensionCbk() +{ + DEF_INIT; + defContext.callbacks->ExtensionCbk = NULL; +} + +void +defrUnsetFillCbk() +{ + DEF_INIT; + defContext.callbacks->FillCbk = NULL; +} + +void +defrUnsetFillStartCbk() +{ + DEF_INIT; + defContext.callbacks->FillStartCbk = NULL; +} + +void +defrUnsetFillEndCbk() +{ + DEF_INIT; + defContext.callbacks->FillEndCbk = NULL; +} + +void +defrUnsetFPCCbk() +{ + DEF_INIT; + defContext.callbacks->FPCCbk = NULL; +} + +void +defrUnsetFPCStartCbk() +{ + DEF_INIT; + defContext.callbacks->FPCStartCbk = NULL; +} + +void +defrUnsetFPCEndCbk() +{ + DEF_INIT; + defContext.callbacks->FPCEndCbk = NULL; +} + +void +defrUnsetFloorPlanNameCbk() +{ + DEF_INIT; + defContext.callbacks->FloorPlanNameCbk = NULL; +} + +void +defrUnsetGcellGridCbk() +{ + DEF_INIT; + defContext.callbacks->GcellGridCbk = NULL; +} + +void +defrUnsetGroupCbk() +{ + DEF_INIT; + defContext.callbacks->GroupCbk = NULL; +} + +void +defrUnsetGroupExtCbk() +{ + DEF_INIT; + defContext.callbacks->GroupExtCbk = NULL; +} + +void +defrUnsetGroupMemberCbk() +{ + DEF_INIT; + defContext.callbacks->GroupMemberCbk = NULL; +} + +void +defrUnsetComponentMaskShiftLayerCbk() +{ + DEF_INIT; + defContext.callbacks->ComponentMaskShiftLayerCbk = NULL; +} + +void +defrUnsetGroupNameCbk() +{ + DEF_INIT; + defContext.callbacks->GroupNameCbk = NULL; +} + +void +defrUnsetGroupsStartCbk() +{ + DEF_INIT; + defContext.callbacks->GroupsStartCbk = NULL; +} + +void +defrUnsetGroupsEndCbk() +{ + DEF_INIT; + defContext.callbacks->GroupsEndCbk = NULL; +} + +void +defrUnsetHistoryCbk() +{ + DEF_INIT; + defContext.callbacks->HistoryCbk = NULL; +} + +void +defrUnsetIOTimingCbk() +{ + DEF_INIT; + defContext.callbacks->IOTimingCbk = NULL; +} + +void +defrUnsetIOTimingsStartCbk() +{ + DEF_INIT; + defContext.callbacks->IOTimingsStartCbk = NULL; +} + +void +defrUnsetIOTimingsEndCbk() +{ + DEF_INIT; + defContext.callbacks->IOTimingsEndCbk = NULL; +} + +void +defrUnsetIOTimingsExtCbk() +{ + DEF_INIT; + defContext.callbacks->IoTimingsExtCbk = NULL; +} + +void +defrUnsetNetCbk() +{ + DEF_INIT; + defContext.callbacks->NetCbk = NULL; +} + +void +defrUnsetNetNameCbk() +{ + DEF_INIT; + defContext.callbacks->NetNameCbk = NULL; +} + +void +defrUnsetNetNonDefaultRuleCbk() +{ + DEF_INIT; + defContext.callbacks->NetNonDefaultRuleCbk = NULL; +} + +void +defrUnsetNetConnectionExtCbk() +{ + DEF_INIT; + defContext.callbacks->NetConnectionExtCbk = NULL; +} + +void +defrUnsetNetExtCbk() +{ + DEF_INIT; + defContext.callbacks->NetExtCbk = NULL; +} + +void +defrUnsetNetPartialPathCbk() +{ + DEF_INIT; + defContext.callbacks->NetPartialPathCbk = NULL; +} + +void +defrUnsetNetSubnetNameCbk() +{ + DEF_INIT; + defContext.callbacks->NetSubnetNameCbk = NULL; +} + +void +defrUnsetNetStartCbk() +{ + DEF_INIT; + defContext.callbacks->NetStartCbk = NULL; +} + +void +defrUnsetNetEndCbk() +{ + DEF_INIT; + defContext.callbacks->NetEndCbk = NULL; +} + +void +defrUnsetNonDefaultCbk() +{ + DEF_INIT; + defContext.callbacks->NonDefaultCbk = NULL; +} + +void +defrUnsetNonDefaultStartCbk() +{ + DEF_INIT; + defContext.callbacks->NonDefaultStartCbk = NULL; +} + +void +defrUnsetNonDefaultEndCbk() +{ + DEF_INIT; + defContext.callbacks->NonDefaultEndCbk = NULL; +} + +void +defrUnsetPartitionCbk() +{ + DEF_INIT; + defContext.callbacks->PartitionCbk = NULL; +} + +void +defrUnsetPartitionsExtCbk() +{ + DEF_INIT; + defContext.callbacks->PartitionsExtCbk = NULL; +} + +void +defrUnsetPartitionsStartCbk() +{ + DEF_INIT; + defContext.callbacks->PartitionsStartCbk = NULL; +} + +void +defrUnsetPartitionsEndCbk() +{ + DEF_INIT; + defContext.callbacks->PartitionsEndCbk = NULL; +} + +void +defrUnsetPathCbk() +{ + DEF_INIT; + defContext.callbacks->PathCbk = NULL; +} + +void +defrUnsetPinCapCbk() +{ + DEF_INIT; + defContext.callbacks->PinCapCbk = NULL; +} + +void +defrUnsetPinCbk() +{ + DEF_INIT; + defContext.callbacks->PinCbk = NULL; +} + +void +defrUnsetPinEndCbk() +{ + DEF_INIT; + defContext.callbacks->PinEndCbk = NULL; +} + +void +defrUnsetPinExtCbk() +{ + DEF_INIT; + defContext.callbacks->PinExtCbk = NULL; +} + +void +defrUnsetPinPropCbk() +{ + DEF_INIT; + defContext.callbacks->PinPropCbk = NULL; +} + +void +defrUnsetPinPropStartCbk() +{ + DEF_INIT; + defContext.callbacks->PinPropStartCbk = NULL; +} + +void +defrUnsetPinPropEndCbk() +{ + DEF_INIT; + defContext.callbacks->PinPropEndCbk = NULL; +} + +void +defrUnsetPropCbk() +{ + DEF_INIT; + defContext.callbacks->PropCbk = NULL; +} + +void +defrUnsetPropDefEndCbk() +{ + DEF_INIT; + defContext.callbacks->PropDefEndCbk = NULL; +} + +void +defrUnsetPropDefStartCbk() +{ + DEF_INIT; + defContext.callbacks->PropDefStartCbk = NULL; +} + +void +defrUnsetRegionCbk() +{ + DEF_INIT; + defContext.callbacks->RegionCbk = NULL; +} + +void +defrUnsetRegionStartCbk() +{ + DEF_INIT; + defContext.callbacks->RegionStartCbk = NULL; +} + +void +defrUnsetRegionEndCbk() +{ + DEF_INIT; + defContext.callbacks->RegionEndCbk = NULL; +} + +void +defrUnsetRowCbk() +{ + DEF_INIT; + defContext.callbacks->RowCbk = NULL; +} + +void +defrUnsetScanChainExtCbk() +{ + DEF_INIT; + defContext.callbacks->ScanChainExtCbk = NULL; +} + +void +defrUnsetScanchainCbk() +{ + DEF_INIT; + defContext.callbacks->ScanchainCbk = NULL; +} + +void +defrUnsetScanchainsStartCbk() +{ + DEF_INIT; + defContext.callbacks->ScanchainsStartCbk = NULL; +} + +void +defrUnsetScanchainsEndCbk() +{ + DEF_INIT; + defContext.callbacks->ScanchainsEndCbk = NULL; +} + +void +defrUnsetSiteCbk() +{ + DEF_INIT; + defContext.callbacks->SiteCbk = NULL; +} + +void +defrUnsetSlotCbk() +{ + DEF_INIT; + defContext.callbacks->SlotCbk = NULL; +} + +void +defrUnsetSlotStartCbk() +{ + DEF_INIT; + defContext.callbacks->SlotStartCbk = NULL; +} + +void +defrUnsetSlotEndCbk() +{ + DEF_INIT; + defContext.callbacks->SlotEndCbk = NULL; +} + +void +defrUnsetSNetWireCbk() +{ + DEF_INIT; + defContext.callbacks->SNetWireCbk = NULL; +} + +void +defrUnsetSNetCbk() +{ + DEF_INIT; + defContext.callbacks->SNetCbk = NULL; +} + +void +defrUnsetSNetStartCbk() +{ + DEF_INIT; + defContext.callbacks->SNetStartCbk = NULL; +} + +void +defrUnsetSNetEndCbk() +{ + DEF_INIT; + defContext.callbacks->SNetEndCbk = NULL; +} + +void +defrUnsetSNetPartialPathCbk() +{ + DEF_INIT; + defContext.callbacks->SNetPartialPathCbk = NULL; +} + +void +defrUnsetStartPinsCbk() +{ + DEF_INIT; + defContext.callbacks->StartPinsCbk = NULL; +} + +void +defrUnsetStylesCbk() +{ + DEF_INIT; + defContext.callbacks->StylesCbk = NULL; +} + +void +defrUnsetStylesStartCbk() +{ + DEF_INIT; + defContext.callbacks->StylesStartCbk = NULL; +} + +void +defrUnsetStylesEndCbk() +{ + DEF_INIT; + defContext.callbacks->StylesEndCbk = NULL; +} + +void +defrUnsetTechnologyCbk() +{ + DEF_INIT; + defContext.callbacks->TechnologyCbk = NULL; +} + +void +defrUnsetTimingDisableCbk() +{ + DEF_INIT; + defContext.callbacks->TimingDisableCbk = NULL; +} + +void +defrUnsetTimingDisablesStartCbk() +{ + DEF_INIT; + defContext.callbacks->TimingDisablesStartCbk = NULL; +} + +void +defrUnsetTimingDisablesEndCbk() +{ + DEF_INIT; + defContext.callbacks->TimingDisablesEndCbk = NULL; +} + +void +defrUnsetTrackCbk() +{ + DEF_INIT; + defContext.callbacks->TrackCbk = NULL; +} + +void +defrUnsetUnitsCbk() +{ + DEF_INIT; + defContext.callbacks->UnitsCbk = NULL; +} + +void +defrUnsetVersionCbk() +{ + DEF_INIT; + defContext.callbacks->VersionCbk = NULL; +} + +void +defrUnsetVersionStrCbk() +{ + DEF_INIT; + defContext.callbacks->VersionStrCbk = NULL; +} + +void +defrUnsetViaCbk() +{ + DEF_INIT; + defContext.callbacks->ViaCbk = NULL; +} + +void +defrUnsetViaExtCbk() +{ + DEF_INIT; + defContext.callbacks->ViaExtCbk = NULL; +} + +void +defrUnsetViaStartCbk() +{ + DEF_INIT; + defContext.callbacks->ViaStartCbk = NULL; +} + + +void +defrUnsetViaEndCbk() +{ + DEF_INIT; + defContext.callbacks->ViaEndCbk = NULL; +} + +int * +defUnusedCallbackCount() +{ + DEF_INIT; + return defContext.settings->UnusedCallbacks; +} + + +const char * +defrFName() +{ + DEF_INIT; + return NULL; +} + +void +defrClearSession() +{ + if (defContext.session) { + delete defContext.session; + defContext.session = new defrSession(); + } +} + +int +defrRead(FILE *f, + const char *fName, + defiUserData uData, + int case_sensitive) +{ + + int status; + + delete defContext.data; + + defrData *defData = new defrData(defContext.callbacks, + defContext.settings, + defContext.session); + + defContext.data = defData; + + // lex_init + struct stat statbuf; + + /* 4/11/2003 - Remove file lefrRWarning.log from directory if it exist */ + /* pcr 569729 */ + if (stat("defRWarning.log", &statbuf) != -1) { + /* file exist, remove it */ + if (!defContext.settings->LogFileAppend) { + remove("defRWarning.log"); + } + } + + // Propagate Settings parameter to Data. + if (defData->settings->reader_case_sensitive_set) { + defData->names_case_sensitive = defData->session->reader_case_sensitive; + } else if (defData->VersionNum > 5.5) { + defData->names_case_sensitive = true; + } + + defData->session->FileName = (char*) fName; + defData->File = f; + defData->session->UserData = uData; + defData->session->reader_case_sensitive = case_sensitive; + + // Create a path pointer that is all ready to go just in case + // we need it later. + + defData->NeedPathData = ( + ((defData->callbacks->NetCbk || defData->callbacks->SNetCbk) && defData->settings->AddPathToNet) || defData->callbacks->PathCbk) ? 1 : 0; + if (defData->NeedPathData) { + defData->PathObj.Init(); + } + + status = defyyparse(defData); + + return status; +} + +void +defrSetUserData(defiUserData ud) +{ + DEF_INIT; + defContext.session->UserData = ud; +} + + +defiUserData +defrGetUserData() +{ + return defContext.session->UserData; +} + + +void +defrSetDesignCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->DesignCbk = f; +} + + +void +defrSetTechnologyCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->TechnologyCbk = f; +} + + +void +defrSetDesignEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->DesignEndCbk = f; +} + + +void +defrSetPropCbk(defrPropCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PropCbk = f; +} + + +void +defrSetPropDefEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PropDefEndCbk = f; +} + + +void +defrSetPropDefStartCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PropDefStartCbk = f; +} + + +void +defrSetArrayNameCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ArrayNameCbk = f; +} + + +void +defrSetFloorPlanNameCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->FloorPlanNameCbk = f; +} + + +void +defrSetUnitsCbk(defrDoubleCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->UnitsCbk = f; +} + + +void +defrSetVersionCbk(defrDoubleCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->VersionCbk = f; +} + + +void +defrSetVersionStrCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->VersionStrCbk = f; +} + + +void +defrSetDividerCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->DividerCbk = f; +} + + +void +defrSetBusBitCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->BusBitCbk = f; +} + + +void +defrSetSiteCbk(defrSiteCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SiteCbk = f; +} + + +void +defrSetCanplaceCbk(defrSiteCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->CanplaceCbk = f; +} + + +void +defrSetCannotOccupyCbk(defrSiteCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->CannotOccupyCbk = f; +} + + +void +defrSetComponentStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ComponentStartCbk = f; +} + + +void +defrSetComponentEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ComponentEndCbk = f; +} + +void +defrSetComponentCbk(defrComponentCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ComponentCbk = f; +} + +void +defrSetNetStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetStartCbk = f; +} + +void +defrSetNetEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetEndCbk = f; +} + +void +defrSetNetCbk(defrNetCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetCbk = f; +} + +void +defrSetNetNameCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetNameCbk = f; +} + +void +defrSetNetSubnetNameCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetSubnetNameCbk = f; +} + +void +defrSetNetNonDefaultRuleCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetNonDefaultRuleCbk = f; +} + +void +defrSetNetPartialPathCbk(defrNetCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetPartialPathCbk = f; +} + +void +defrSetSNetStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SNetStartCbk = f; +} + +void +defrSetSNetEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SNetEndCbk = f; +} + +void +defrSetSNetCbk(defrNetCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SNetCbk = f; +} + +void +defrSetSNetPartialPathCbk(defrNetCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SNetPartialPathCbk = f; +} + +void +defrSetSNetWireCbk(defrNetCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SNetWireCbk = f; +} + +void +defrSetPathCbk(defrPathCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PathCbk = f; +} + +void +defrSetAddPathToNet() +{ + DEF_INIT; + defContext.settings->AddPathToNet = 1; +} + +void +defrSetAllowComponentNets() +{ + DEF_INIT; + defContext.settings->AllowComponentNets = 1; +} + +int +defrGetAllowComponentNets() +{ + DEF_INIT; + return defContext.settings->AllowComponentNets; +} + + +void +defrSetComponentExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ComponentExtCbk = f; +} + +void +defrSetPinExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PinExtCbk = f; +} + +void +defrSetViaExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ViaExtCbk = f; +} + +void +defrSetNetConnectionExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetConnectionExtCbk = f; +} + +void +defrSetNetExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NetExtCbk = f; +} + +void +defrSetGroupExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->GroupExtCbk = f; +} + +void +defrSetScanChainExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ScanChainExtCbk = f; +} + +void +defrSetIoTimingsExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->IoTimingsExtCbk = f; +} + +void +defrSetPartitionsExtCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PartitionsExtCbk = f; +} + +void +defrSetHistoryCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->HistoryCbk = f; +} + +void +defrSetDieAreaCbk(defrBoxCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->DieAreaCbk = f; +} + +void +defrSetPinCapCbk(defrPinCapCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PinCapCbk = f; +} + +void +defrSetPinEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PinEndCbk = f; +} + +void +defrSetStartPinsCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->StartPinsCbk = f; +} + +void +defrSetDefaultCapCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->DefaultCapCbk = f; +} + +void +defrSetPinCbk(defrPinCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PinCbk = f; +} + +void +defrSetRowCbk(defrRowCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->RowCbk = f; +} + +void +defrSetTrackCbk(defrTrackCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->TrackCbk = f; +} + +void +defrSetGcellGridCbk(defrGcellGridCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->GcellGridCbk = f; +} + +void +defrSetViaStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ViaStartCbk = f; +} + +void +defrSetViaEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ViaEndCbk = f; +} + +void +defrSetViaCbk(defrViaCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ViaCbk = f; +} + +void +defrSetRegionStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->RegionStartCbk = f; +} + +void +defrSetRegionEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->RegionEndCbk = f; +} + +void +defrSetRegionCbk(defrRegionCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->RegionCbk = f; +} + +void +defrSetGroupsStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->GroupsStartCbk = f; +} + +void +defrSetGroupsEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->GroupsEndCbk = f; +} + +void +defrSetGroupNameCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->GroupNameCbk = f; +} + +void +defrSetGroupMemberCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->GroupMemberCbk = f; +} + +void +defrSetComponentMaskShiftLayerCbk(defrComponentMaskShiftLayerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ComponentMaskShiftLayerCbk = f; +} + +void +defrSetGroupCbk(defrGroupCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->GroupCbk = f; +} + +void +defrSetAssertionsStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->AssertionsStartCbk = f; +} + +void +defrSetAssertionsEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->AssertionsEndCbk = f; +} + +void +defrSetAssertionCbk(defrAssertionCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->AssertionCbk = f; +} + +void +defrSetConstraintsStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ConstraintsStartCbk = f; +} + +void +defrSetConstraintsEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ConstraintsEndCbk = f; +} + +void +defrSetConstraintCbk(defrAssertionCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ConstraintCbk = f; +} + +void +defrSetScanchainsStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ScanchainsStartCbk = f; +} + +void +defrSetScanchainsEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ScanchainsEndCbk = f; +} + +void +defrSetScanchainCbk(defrScanchainCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ScanchainCbk = f; +} + +void +defrSetIOTimingsStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->IOTimingsStartCbk = f; +} + +void +defrSetIOTimingsEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->IOTimingsEndCbk = f; +} + +void +defrSetIOTimingCbk(defrIOTimingCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->IOTimingCbk = f; +} + +void +defrSetFPCStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->FPCStartCbk = f; +} + +void +defrSetFPCEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->FPCEndCbk = f; +} + +void +defrSetFPCCbk(defrFPCCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->FPCCbk = f; +} + +void +defrSetTimingDisablesStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->TimingDisablesStartCbk = f; +} + +void +defrSetTimingDisablesEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->TimingDisablesEndCbk = f; +} + +void +defrSetTimingDisableCbk(defrTimingDisableCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->TimingDisableCbk = f; +} + +void +defrSetPartitionsStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PartitionsStartCbk = f; +} + +void +defrSetPartitionsEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PartitionsEndCbk = f; +} + +void +defrSetPartitionCbk(defrPartitionCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PartitionCbk = f; +} + +void +defrSetPinPropStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PinPropStartCbk = f; +} + +void +defrSetPinPropEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PinPropEndCbk = f; +} + +void +defrSetPinPropCbk(defrPinPropCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->PinPropCbk = f; +} + +void +defrSetCaseSensitiveCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->CaseSensitiveCbk = f; +} + +void +defrSetBlockageStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->BlockageStartCbk = f; +} + +void +defrSetBlockageEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->BlockageEndCbk = f; +} + +void +defrSetBlockageCbk(defrBlockageCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->BlockageCbk = f; +} + +void +defrSetSlotStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SlotStartCbk = f; +} + +void +defrSetSlotEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SlotEndCbk = f; +} + +void +defrSetSlotCbk(defrSlotCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->SlotCbk = f; +} + +void +defrSetFillStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->FillStartCbk = f; +} + +void +defrSetFillEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->FillEndCbk = f; +} + +void +defrSetFillCbk(defrFillCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->FillCbk = f; +} + +void +defrSetNonDefaultStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NonDefaultStartCbk = f; +} + +void +defrSetNonDefaultEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NonDefaultEndCbk = f; +} + +void +defrSetNonDefaultCbk(defrNonDefaultCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->NonDefaultCbk = f; +} + +void +defrSetStylesStartCbk(defrIntegerCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->StylesStartCbk = f; +} + +void +defrSetStylesEndCbk(defrVoidCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->StylesEndCbk = f; +} + +void +defrSetStylesCbk(defrStylesCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->StylesCbk = f; +} + +void +defrSetExtensionCbk(defrStringCbkFnType f) +{ + DEF_INIT; + defContext.callbacks->ExtensionCbk = f; +} + +// NEW CALLBACK - Put the set functions for the new callbacks here. + +void +defrSetAssertionWarnings(int warn) +{ + DEF_INIT; + defContext.settings->AssertionWarnings = warn; +} + + +void +defrSetBlockageWarnings(int warn) +{ + DEF_INIT; + defContext.settings->BlockageWarnings = warn; +} + + +void +defrSetCaseSensitiveWarnings(int warn) +{ + DEF_INIT; + defContext.settings->CaseSensitiveWarnings = warn; +} + + +void +defrSetComponentWarnings(int warn) +{ + DEF_INIT; + defContext.settings->ComponentWarnings = warn; +} + + +void +defrSetConstraintWarnings(int warn) +{ + DEF_INIT; + defContext.settings->ConstraintWarnings = warn; +} + + +void +defrSetDefaultCapWarnings(int warn) +{ + DEF_INIT; + defContext.settings->DefaultCapWarnings = warn; +} + + +void +defrSetGcellGridWarnings(int warn) +{ + DEF_INIT; + defContext.settings->GcellGridWarnings = warn; +} + + +void +defrSetIOTimingWarnings(int warn) +{ + DEF_INIT; + defContext.settings->IOTimingWarnings = warn; +} + + +void +defrSetNetWarnings(int warn) +{ + DEF_INIT; + defContext.settings->NetWarnings = warn; +} + + +void +defrSetNonDefaultWarnings(int warn) +{ + DEF_INIT; + defContext.settings->NonDefaultWarnings = warn; +} + + +void +defrSetPinExtWarnings(int warn) +{ + DEF_INIT; + defContext.settings->PinExtWarnings = warn; +} + + +void +defrSetPinWarnings(int warn) +{ + DEF_INIT; + defContext.settings->PinWarnings = warn; +} + + +void +defrSetRegionWarnings(int warn) +{ + DEF_INIT; + defContext.settings->RegionWarnings = warn; +} + + +void +defrSetRowWarnings(int warn) +{ + DEF_INIT; + defContext.settings->RowWarnings = warn; +} + + +void +defrSetScanchainWarnings(int warn) +{ + DEF_INIT; + defContext.settings->ScanchainWarnings = warn; +} + + +void +defrSetSNetWarnings(int warn) +{ + DEF_INIT; + defContext.settings->SNetWarnings = warn; +} + + +void +defrSetStylesWarnings(int warn) +{ + DEF_INIT; + defContext.settings->StylesWarnings = warn; +} + + +void +defrSetTrackWarnings(int warn) +{ + DEF_INIT; + defContext.settings->TrackWarnings = warn; +} + + +void +defrSetUnitsWarnings(int warn) +{ + DEF_INIT; + defContext.settings->UnitsWarnings = warn; +} + + +void +defrSetVersionWarnings(int warn) +{ + DEF_INIT; + defContext.settings->VersionWarnings = warn; +} + + +void +defrSetViaWarnings(int warn) +{ + DEF_INIT; + defContext.settings->ViaWarnings = warn; +} + + +void +defrDisableParserMsgs(int nMsg, + int *msgs) +{ + DEF_INIT; + int i, j; + int *tmp; + + if (defContext.settings->nDDMsgs == 0) { + defContext.settings->nDDMsgs = nMsg; + defContext.settings->disableDMsgs = (int*) malloc(sizeof(int) * nMsg); + for (i = 0; i < nMsg; i++) + defContext.settings->disableDMsgs[i] = msgs[i]; + } else { // add the list to the existing list + // 1st check if the msgId is already on the list before adding it on + tmp = (int*) malloc(sizeof(int) * (nMsg + defContext.settings->nDDMsgs)); + for (i = 0; i < defContext.settings->nDDMsgs; i++) // copy the existing to the new list + tmp[i] = defContext.settings->disableDMsgs[i]; + free((int*) (defContext.settings->disableDMsgs)); + defContext.settings->disableDMsgs = tmp; // set disableDMsgs to the new list + for (i = 0; i < nMsg; i++) { // merge the new list with the existing + for (j = 0; j < defContext.settings->nDDMsgs; j++) { + if (defContext.settings->disableDMsgs[j] == msgs[i]) + break; // msgId already on the list + } + if (j == defContext.settings->nDDMsgs) // msgId not on the list, add it on + defContext.settings->disableDMsgs[defContext.settings->nDDMsgs++] = msgs[i]; + } + } + return; +} + + +void +defrEnableParserMsgs(int nMsg, + int *msgs) +{ + DEF_INIT; + int i, j; + + if (defContext.settings->nDDMsgs == 0) + return; // list is empty, nothing to remove + + for (i = 0; i < nMsg; i++) { // loop through the given list + for (j = 0; j < defContext.settings->nDDMsgs; j++) { + if (defContext.settings->disableDMsgs[j] == msgs[i]) { + defContext.settings->disableDMsgs[j] = -1; // temp assign a -1 on that slot + break; + } + } + } + // fill up the empty slot with the next non -1 msgId + for (i = 0; i < defContext.settings->nDDMsgs; i++) { + if (defContext.settings->disableDMsgs[i] == -1) { + j = i + 1; + while (j < defContext.settings->nDDMsgs) { + if (defContext.settings->disableDMsgs[j] != -1) + defContext.settings->disableDMsgs[i++] = defContext.settings->disableDMsgs[j++]; + } + break; // break out the for loop, the list should all moved + } + } + // Count how many messageId left and change all -1 to 0 + for (j = i; j < defContext.settings->nDDMsgs; j++) { + defContext.settings->disableDMsgs[j] = 0; // set to 0 + } + defContext.settings->nDDMsgs = i; + return; +} + + +void +defrEnableAllMsgs() +{ + DEF_INIT; + defContext.settings->nDDMsgs = 0; + free((int*) (defContext.settings->disableDMsgs)); +} + + +void +defrSetTotalMsgLimit(int totNumMsgs) +{ + DEF_INIT; + defContext.settings->totalDefMsgLimit = totNumMsgs; +} + + +void +defrSetLimitPerMsg(int msgId, + int numMsg) +{ + DEF_INIT; + char msgStr[10]; + + if ((msgId <= 0) || ((msgId - 5000) >= NODEFMSG)) { // Def starts at 5000 + sprintf(msgStr, "%d", msgId); + return; + } + defContext.settings->MsgLimit[msgId - 5000] = numMsg; + return; +} + + +// ***************************************************************** +// Utility functions +// +// These are utility functions. Note: this part still contains some +// global variables. Ideally they would be part of the main class. +// ***************************************************************** + +void +defrSetMagicCommentFoundFunction(DEFI_MAGIC_COMMENT_FOUND_FUNCTION f) +{ + DEF_INIT; + defContext.settings->MagicCommentFoundFunction = f; +} + + +void +defrSetMagicCommentString(char *s) +{ + DEF_INIT; + + free(defContext.data->magic); + defContext.data->magic = strdup(s); +} + +void +defrSetLogFunction(DEFI_LOG_FUNCTION f) +{ + DEF_INIT; + defContext.settings->ErrorLogFunction = f; +} + +void +defrSetWarningLogFunction(DEFI_WARNING_LOG_FUNCTION f) +{ + DEF_INIT; + defContext.settings->WarningLogFunction = f; +} + +void +defrSetContextLogFunction(DEFI_CONTEXT_LOG_FUNCTION f) +{ + DEF_INIT; + defContext.settings->ContextErrorLogFunction = f; +} + +void +defrSetContextWarningLogFunction(DEFI_CONTEXT_WARNING_LOG_FUNCTION f) +{ + DEF_INIT; + defContext.settings->ContextWarningLogFunction = f; +} + + +void +defrSetMallocFunction(DEFI_MALLOC_FUNCTION f) +{ + DEF_INIT; + defContext.settings->MallocFunction = f; +} + +void +defrSetReallocFunction(DEFI_REALLOC_FUNCTION f) +{ + DEF_INIT; + defContext.settings->ReallocFunction = f; +} + +void +defrSetFreeFunction(DEFI_FREE_FUNCTION f) +{ + DEF_INIT; + defContext.settings->FreeFunction = f; +} + +void +defrSetLineNumberFunction(DEFI_LINE_NUMBER_FUNCTION f) +{ + DEF_INIT; + defContext.settings->LineNumberFunction = f; +} + +void +defrSetLongLineNumberFunction(DEFI_LONG_LINE_NUMBER_FUNCTION f) +{ + DEF_INIT; + defContext.settings->LongLineNumberFunction = f; +} + + +void +defrSetDeltaNumberLines(int numLines) +{ + DEF_INIT; + defContext.settings->defiDeltaNumberLines = numLines; +} + + +void +defrSetCommentChar(char c) +{ + DEF_INIT; + defContext.settings->CommentChar = c; +} + +void +defrSetCaseSensitivity(int caseSense) +{ + DEF_INIT; + + defContext.settings->reader_case_sensitive_set = 1; + defContext.session->reader_case_sensitive = caseSense; + if (defContext.data) { + defContext.data->names_case_sensitive = caseSense; + } +} + + +void +defrAddAlias(const char *key, + const char *value, + int marked) +{ + // Since the alias data is stored in the hash table, the hash table + // only takes the key and the data, the marked data will be stored + // at the end of the value data + + defrData *defData = defContext.data ; + + char *k1; + char *v1; + int len = strlen(key) + 1; + k1 = (char*) malloc(len); + strcpy(k1, key); + len = strlen(value) + 1 + 1; // 1 for the marked + v1 = (char*) malloc(len); + //strcpy(v1, value); + if (marked != 0) + marked = 1; // make sure only 1 digit + sprintf(v1, "%d%s", marked, value); + + defData->def_alias_set[k1] = v1; +} + +void +defrSetOpenLogFileAppend() +{ + DEF_INIT; + defContext.settings->LogFileAppend = TRUE; +} + +void +defrUnsetOpenLogFileAppend() +{ + DEF_INIT; + defContext.settings->LogFileAppend = FALSE; +} + + +void +defrSetReadFunction(DEFI_READ_FUNCTION f) +{ + DEF_INIT; + defContext.settings->ReadFunction = f; +} + +void +defrUnsetReadFunction() +{ + DEF_INIT; + defContext.settings->ReadFunction = 0; +} + +void +defrDisablePropStrProcess() +{ + DEF_INIT; + defContext.settings->DisPropStrProcess = 1; +} + +void +defrSetNLines(long long n) +{ + defrData *defData = defContext.data; + + defData->nlines = n; +} + +int defrLineNumber() +{ + // Compatibility feature: in old versions the translators, + // the function can be called before defData initialization. + if (defContext.data) { + return (int)defContext.data->nlines; + } + + return 0; +} + +long long defrLongLineNumber() { + // Compatibility feature: in old versions the translators, + // the function can be called before defData initialization. + + if (defContext.data) { + return defContext.data->nlines; + } + + return (long long) 0; +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defrReader.hpp b/lefdef/src/def/def/defrReader.hpp new file mode 100644 index 00000000..bf80b204 --- /dev/null +++ b/lefdef/src/def/def/defrReader.hpp @@ -0,0 +1,723 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013-2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef DEFRREADER_H +#define DEFRREADER_H + +#include + +#include "defiKRDefs.hpp" +#include "defiDefs.hpp" +#include "defiUser.hpp" + +#define DEF_MSGS 4013 +#define CBMAX 150 // Number of callbacks. + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// An enum describing all of the types of reader callbacks. +typedef enum { + defrUnspecifiedCbkType = 0, + defrDesignStartCbkType, + defrTechNameCbkType, + defrPropCbkType, + defrPropDefEndCbkType, + defrPropDefStartCbkType, + defrFloorPlanNameCbkType, + defrArrayNameCbkType, + defrUnitsCbkType, + defrDividerCbkType, + defrBusBitCbkType, + defrSiteCbkType, + defrComponentStartCbkType, + defrComponentCbkType, + defrComponentEndCbkType, + defrNetStartCbkType, + defrNetCbkType, + defrNetNameCbkType, + defrNetNonDefaultRuleCbkType, + defrNetSubnetNameCbkType, + defrNetEndCbkType, + defrPathCbkType, + defrVersionCbkType, + defrVersionStrCbkType, + defrComponentExtCbkType, + defrPinExtCbkType, + defrViaExtCbkType, + defrNetConnectionExtCbkType, + defrNetExtCbkType, + defrGroupExtCbkType, + defrScanChainExtCbkType, + defrIoTimingsExtCbkType, + defrPartitionsExtCbkType, + defrHistoryCbkType, + defrDieAreaCbkType, + defrCanplaceCbkType, + defrCannotOccupyCbkType, + defrPinCapCbkType, + defrDefaultCapCbkType, + defrStartPinsCbkType, + defrPinCbkType, + defrPinEndCbkType, + defrRowCbkType, + defrTrackCbkType, + defrGcellGridCbkType, + defrViaStartCbkType, + defrViaCbkType, + defrViaEndCbkType, + defrRegionStartCbkType, + defrRegionCbkType, + defrRegionEndCbkType, + defrSNetStartCbkType, + defrSNetCbkType, + defrSNetPartialPathCbkType, + defrSNetWireCbkType, + defrSNetEndCbkType, + defrGroupsStartCbkType, + defrGroupNameCbkType, + defrGroupMemberCbkType, + defrGroupCbkType, + defrGroupsEndCbkType, + defrAssertionsStartCbkType, + defrAssertionCbkType, + defrAssertionsEndCbkType, + defrConstraintsStartCbkType, + defrConstraintCbkType, + defrConstraintsEndCbkType, + defrScanchainsStartCbkType, + defrScanchainCbkType, + defrScanchainsEndCbkType, + defrIOTimingsStartCbkType, + defrIOTimingCbkType, + defrIOTimingsEndCbkType, + defrFPCStartCbkType, + defrFPCCbkType, + defrFPCEndCbkType, + defrTimingDisablesStartCbkType, + defrTimingDisableCbkType, + defrTimingDisablesEndCbkType, + defrPartitionsStartCbkType, + defrPartitionCbkType, + defrPartitionsEndCbkType, + defrPinPropStartCbkType, + defrPinPropCbkType, + defrPinPropEndCbkType, + defrBlockageStartCbkType, + defrBlockageCbkType, + defrBlockageEndCbkType, + defrSlotStartCbkType, + defrSlotCbkType, + defrSlotEndCbkType, + defrFillStartCbkType, + defrFillCbkType, + defrFillEndCbkType, + defrCaseSensitiveCbkType, + defrNonDefaultStartCbkType, + defrNonDefaultCbkType, + defrNonDefaultEndCbkType, + defrStylesStartCbkType, + defrStylesCbkType, + defrStylesEndCbkType, + defrExtensionCbkType, + + // NEW CALLBACK - If you are creating a new callback, you must add + // a unique item to this enum for each callback routine. When the + // callback is called in def.y you have to supply this enum item + // as an argument in the call. + + defrComponentMaskShiftLayerCbkType, + defrDesignEndCbkType +} defrCallbackType_e; + + +// Declarations of function signatures for each type of callback. +// These declarations are type-safe when compiling with ANSI C +// or C++; you will only be able to register a function pointer +// with the correct signature for a given type of callback. +// +// Each callback function is expected to return 0 if successful. +// A non-zero return code will cause the reader to abort. +// +// The defrDesignStart and defrDesignEnd callback is only called once. +// Other callbacks may be called multiple times, each time with a different +// set of data. +// +// For each callback, the Def API will make the callback to the +// function supplied by the client, which should either make a copy +// of the Def object, or store the data in the client's own data structures. +// The Def API will delete or reuse each object after making the callback, +// so the client should not keep a pointer to it. +// +// All callbacks pass the user data pointer provided in defrRead() +// or defrSetUserData() back to the client; this can be used by the +// client to obtain access to the rest of the client's data structures. +// +// The user data pointer is obtained using defrGetUserData() immediately +// prior to making each callback, so the client is free to change the +// user data on the fly if necessary. +// +// Callbacks with the same signature are passed a callback type +// parameter, which allows an application to write a single callback +// function, register that function for multiple callbacks, then +// switch based on the callback type to handle the appropriate type of +// data. + + +// A declaration of the signature of all callbacks that return nothing. +typedef int (*defrVoidCbkFnType) (defrCallbackType_e, void* v, defiUserData); + +// A declaration of the signature of all callbacks that return a string. +typedef int (*defrStringCbkFnType) (defrCallbackType_e, const char *string, defiUserData); + +// A declaration of the signature of all callbacks that return a integer. +typedef int (*defrIntegerCbkFnType) (defrCallbackType_e, int number, defiUserData); + +// A declaration of the signature of all callbacks that return a double. +typedef int (*defrDoubleCbkFnType) (defrCallbackType_e, double number, defiUserData); + +// A declaration of the signature of all callbacks that return a defiProp. +typedef int (*defrPropCbkFnType) (defrCallbackType_e, defiProp *prop, defiUserData); + +// A declaration of the signature of all callbacks that return a defiSite. +typedef int (*defrSiteCbkFnType) (defrCallbackType_e, defiSite *site, defiUserData); + +// A declaration of the signature of all callbacks that return a defComponent. +typedef int (*defrComponentCbkFnType) (defrCallbackType_e, defiComponent *comp, defiUserData); + +// A declaration of the signature of all callbacks that return a defComponentMaskShiftLayer. +typedef int (*defrComponentMaskShiftLayerCbkFnType) (defrCallbackType_e, defiComponentMaskShiftLayer *comp, defiUserData); + +// A declaration of the signature of all callbacks that return a defNet. +typedef int (*defrNetCbkFnType) (defrCallbackType_e, defiNet *net, defiUserData); + +// A declaration of the signature of all callbacks that return a defPath. +typedef int (*defrPathCbkFnType) (defrCallbackType_e, defiPath *path, defiUserData); + +// A declaration of the signature of all callbacks that return a defiBox. +typedef int (*defrBoxCbkFnType) (defrCallbackType_e, defiBox *box, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiPinCap. +typedef int (*defrPinCapCbkFnType) (defrCallbackType_e, defiPinCap *pincap, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiPin. +typedef int (*defrPinCbkFnType) (defrCallbackType_e, defiPin *pin, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiRow. +typedef int (*defrRowCbkFnType) (defrCallbackType_e, defiRow *row, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiTrack. +typedef int (*defrTrackCbkFnType) (defrCallbackType_e, defiTrack *track, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiGcellGrid. +typedef int (*defrGcellGridCbkFnType) (defrCallbackType_e, defiGcellGrid *grid, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiVia. +typedef int (*defrViaCbkFnType) (defrCallbackType_e, defiVia *, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiRegion. +typedef int (*defrRegionCbkFnType) (defrCallbackType_e, defiRegion *, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiGroup. +typedef int (*defrGroupCbkFnType) (defrCallbackType_e, defiGroup *, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiAssertion. +typedef int (*defrAssertionCbkFnType) (defrCallbackType_e, defiAssertion *, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiScanChain. +typedef int (*defrScanchainCbkFnType) (defrCallbackType_e, defiScanchain *, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiIOTiming. +typedef int (*defrIOTimingCbkFnType) (defrCallbackType_e, defiIOTiming *, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiFPC. +typedef int (*defrFPCCbkFnType) (defrCallbackType_e, defiFPC *, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiTimingDisable. +typedef int (*defrTimingDisableCbkFnType) (defrCallbackType_e, defiTimingDisable *, defiUserData); + + +// A declaration of the signature of all callbacks that return a defiPartition. +typedef int (*defrPartitionCbkFnType) (defrCallbackType_e, defiPartition *, defiUserData); + +// A declaration of the signature of all callbacks that return a defiPinProp. +typedef int (*defrPinPropCbkFnType) (defrCallbackType_e, defiPinProp *, defiUserData); + +// A declaration of the signature of all callbacks that return a defiBlockage. +typedef int (*defrBlockageCbkFnType) (defrCallbackType_e, defiBlockage *, defiUserData); + +// A declaration of the signature of all callbacks that return a defiSlot. +typedef int (*defrSlotCbkFnType) (defrCallbackType_e, defiSlot *, defiUserData); + +// A declaration of the signature of all callbacks that return a defiFill. +typedef int (*defrFillCbkFnType) (defrCallbackType_e, defiFill *, defiUserData); + +// A declaration of the signature of all callbacks that return a defiNonDefault. +typedef int (*defrNonDefaultCbkFnType) (defrCallbackType_e, defiNonDefault *, defiUserData); + +// A declaration of the signature of all callbacks that return a defiStyles. +typedef int (*defrStylesCbkFnType) (defrCallbackType_e, defiStyles *, defiUserData); + +// NEW CALLBACK - Each callback must return user data, enum, and +// OUR-DATA item. We must define a callback function type for +// each type of OUR-DATA. Some routines return a string, some +// return an integer, and some return a pointer to a class. +// If you create a new class, then you must create a new function +// type here to return that class to the user. + +// The reader initialization. Must be called before defrRead(). +extern int defrInit (); +extern int defrInitSession (int startSession = 1); + +// obsoleted now. +extern int defrReset (); + +//Sets all parser memory into init state. +extern int defrClear(); + +// Change the comment character in the DEF file. The default +// is '#' +extern void defrSetCommentChar (char c); + +// Functions to call to set specific actions in the parser. +extern void defrSetAddPathToNet (); +extern void defrSetAllowComponentNets (); +extern int defrGetAllowComponentNets (); +extern void defrSetCaseSensitivity (int caseSense); + +// Functions to keep track of callbacks that the user did not +// supply. Normally all parts of the DEF file that the user +// does not supply a callback for will be ignored. These +// routines tell the parser count the DEF constructs that are +// present in the input file, but did not trigger a callback. +// This should help you find any "important" DEF constructs that +// you are ignoring. +extern void defrSetRegisterUnusedCallbacks (); +extern void defrPrintUnusedCallbacks (FILE* log); +// Obsoleted now. +extern int defrReleaseNResetMemory (); + +// This function clear session data. +extern void defrClearSession(); + +// The main reader function. +// The file should already be opened. This requirement allows +// the reader to be used with stdin or a pipe. The file name +// is only used for error messages. +extern int defrRead (FILE *file, + const char *fileName, + defiUserData userData, + int case_sensitive); + +// Set/get the client-provided user data. defi doesn't look at +// this data at all, it simply passes the opaque defiUserData pointer +// back to the application with each callback. The client can +// change the data at any time, and it will take effect on the +// next callback. The defi reader and writer maintain separate +// user data pointers. +extern void defrSetUserData (defiUserData); +extern defiUserData defrGetUserData (); + + +// Functions to call to register a callback function or get the function +//pointer after it has been registered. +// + +// Register one function for all callbacks with the same signature +extern void defrSetArrayNameCbk (defrStringCbkFnType); +extern void defrSetAssertionCbk (defrAssertionCbkFnType); +extern void defrSetAssertionsStartCbk (defrIntegerCbkFnType); +extern void defrSetAssertionsEndCbk (defrVoidCbkFnType); +extern void defrSetBlockageCbk (defrBlockageCbkFnType); +extern void defrSetBlockageStartCbk (defrIntegerCbkFnType); +extern void defrSetBlockageEndCbk (defrVoidCbkFnType); +extern void defrSetBusBitCbk (defrStringCbkFnType); +extern void defrSetCannotOccupyCbk (defrSiteCbkFnType); +extern void defrSetCanplaceCbk (defrSiteCbkFnType); +extern void defrSetCaseSensitiveCbk (defrIntegerCbkFnType); +extern void defrSetComponentCbk (defrComponentCbkFnType); +extern void defrSetComponentExtCbk (defrStringCbkFnType); +extern void defrSetComponentStartCbk (defrIntegerCbkFnType); +extern void defrSetComponentEndCbk (defrVoidCbkFnType); +extern void defrSetConstraintCbk (defrAssertionCbkFnType); +extern void defrSetConstraintsStartCbk (defrIntegerCbkFnType); +extern void defrSetConstraintsEndCbk (defrVoidCbkFnType); +extern void defrSetDefaultCapCbk (defrIntegerCbkFnType); +extern void defrSetDesignCbk (defrStringCbkFnType); +extern void defrSetDesignEndCbk (defrVoidCbkFnType); +extern void defrSetDieAreaCbk (defrBoxCbkFnType); +extern void defrSetDividerCbk (defrStringCbkFnType); +extern void defrSetExtensionCbk (defrStringCbkFnType); +extern void defrSetFillCbk (defrFillCbkFnType); +extern void defrSetFillStartCbk (defrIntegerCbkFnType); +extern void defrSetFillEndCbk (defrVoidCbkFnType); +extern void defrSetFPCCbk (defrFPCCbkFnType); +extern void defrSetFPCStartCbk (defrIntegerCbkFnType); +extern void defrSetFPCEndCbk (defrVoidCbkFnType); +extern void defrSetFloorPlanNameCbk (defrStringCbkFnType); +extern void defrSetGcellGridCbk (defrGcellGridCbkFnType); +extern void defrSetGroupNameCbk (defrStringCbkFnType); +extern void defrSetGroupMemberCbk (defrStringCbkFnType); +extern void defrSetComponentMaskShiftLayerCbk (defrComponentMaskShiftLayerCbkFnType); +extern void defrSetGroupCbk (defrGroupCbkFnType); +extern void defrSetGroupExtCbk (defrStringCbkFnType); +extern void defrSetGroupsStartCbk (defrIntegerCbkFnType); +extern void defrSetGroupsEndCbk (defrVoidCbkFnType); +extern void defrSetHistoryCbk (defrStringCbkFnType); +extern void defrSetIOTimingCbk (defrIOTimingCbkFnType); +extern void defrSetIOTimingsStartCbk (defrIntegerCbkFnType); +extern void defrSetIOTimingsEndCbk (defrVoidCbkFnType); +extern void defrSetIoTimingsExtCbk (defrStringCbkFnType); +extern void defrSetNetCbk (defrNetCbkFnType); +extern void defrSetNetNameCbk (defrStringCbkFnType); +extern void defrSetNetNonDefaultRuleCbk (defrStringCbkFnType); +extern void defrSetNetConnectionExtCbk (defrStringCbkFnType); +extern void defrSetNetExtCbk (defrStringCbkFnType); +extern void defrSetNetPartialPathCbk (defrNetCbkFnType); +extern void defrSetNetSubnetNameCbk (defrStringCbkFnType); +extern void defrSetNetStartCbk (defrIntegerCbkFnType); +extern void defrSetNetEndCbk (defrVoidCbkFnType); +extern void defrSetNonDefaultCbk (defrNonDefaultCbkFnType); +extern void defrSetNonDefaultStartCbk (defrIntegerCbkFnType); +extern void defrSetNonDefaultEndCbk (defrVoidCbkFnType); +extern void defrSetPartitionCbk (defrPartitionCbkFnType); +extern void defrSetPartitionsExtCbk (defrStringCbkFnType); +extern void defrSetPartitionsStartCbk (defrIntegerCbkFnType); +extern void defrSetPartitionsEndCbk (defrVoidCbkFnType); +extern void defrSetPathCbk (defrPathCbkFnType); +extern void defrSetPinCapCbk (defrPinCapCbkFnType); +extern void defrSetPinCbk (defrPinCbkFnType); +extern void defrSetPinExtCbk (defrStringCbkFnType); +extern void defrSetPinPropCbk (defrPinPropCbkFnType); +extern void defrSetPinPropStartCbk (defrIntegerCbkFnType); +extern void defrSetPinPropEndCbk (defrVoidCbkFnType); +extern void defrSetPropCbk (defrPropCbkFnType); +extern void defrSetPropDefEndCbk (defrVoidCbkFnType); +extern void defrSetPropDefStartCbk (defrVoidCbkFnType); +extern void defrSetRegionCbk (defrRegionCbkFnType); +extern void defrSetRegionStartCbk (defrIntegerCbkFnType); +extern void defrSetRegionEndCbk (defrVoidCbkFnType); +extern void defrSetRowCbk (defrRowCbkFnType); +extern void defrSetSNetCbk (defrNetCbkFnType); +extern void defrSetSNetStartCbk (defrIntegerCbkFnType); +extern void defrSetSNetEndCbk (defrVoidCbkFnType); +extern void defrSetSNetPartialPathCbk (defrNetCbkFnType); +extern void defrSetSNetWireCbk (defrNetCbkFnType); +extern void defrSetScanChainExtCbk (defrStringCbkFnType); +extern void defrSetScanchainCbk (defrScanchainCbkFnType); +extern void defrSetScanchainsStartCbk (defrIntegerCbkFnType); +extern void defrSetScanchainsEndCbk (defrVoidCbkFnType); +extern void defrSetSiteCbk (defrSiteCbkFnType); +extern void defrSetSlotCbk (defrSlotCbkFnType); +extern void defrSetSlotStartCbk (defrIntegerCbkFnType); +extern void defrSetSlotEndCbk (defrVoidCbkFnType); +extern void defrSetStartPinsCbk (defrIntegerCbkFnType); +extern void defrSetStylesCbk (defrStylesCbkFnType); +extern void defrSetStylesStartCbk (defrIntegerCbkFnType); +extern void defrSetStylesEndCbk (defrVoidCbkFnType); +extern void defrSetPinEndCbk (defrVoidCbkFnType); +extern void defrSetTechnologyCbk (defrStringCbkFnType); +extern void defrSetTimingDisableCbk (defrTimingDisableCbkFnType); +extern void defrSetTimingDisablesStartCbk (defrIntegerCbkFnType); +extern void defrSetTimingDisablesEndCbk (defrVoidCbkFnType); +extern void defrSetTrackCbk (defrTrackCbkFnType); +extern void defrSetUnitsCbk (defrDoubleCbkFnType); +extern void defrSetVersionCbk (defrDoubleCbkFnType); +extern void defrSetVersionStrCbk (defrStringCbkFnType); +extern void defrSetViaCbk (defrViaCbkFnType); +extern void defrSetViaExtCbk (defrStringCbkFnType); +extern void defrSetViaStartCbk (defrIntegerCbkFnType); +extern void defrSetViaEndCbk (defrVoidCbkFnType); + +// NEW CALLBACK - For each new callback you create, you must +// create a routine that allows the user to set it. Add the +// setting routines here. + +//Set all of the callbacks that have not yet been set to the following +//function. This is especially useful if you want to check to see +//if you forgot anything. +extern void defrUnsetCallbacks (); + +// Functions to call to unregister a callback function. +extern void defrUnsetArrayNameCbk (); +extern void defrUnsetAssertionCbk (); +extern void defrUnsetAssertionsStartCbk (); +extern void defrUnsetAssertionsEndCbk (); +extern void defrUnsetBlockageCbk (); +extern void defrUnsetBlockageStartCbk (); +extern void defrUnsetBlockageEndCbk (); +extern void defrUnsetBusBitCbk (); +extern void defrUnsetCannotOccupyCbk (); +extern void defrUnsetCanplaceCbk (); +extern void defrUnsetCaseSensitiveCbk (); +extern void defrUnsetComponentCbk (); +extern void defrUnsetComponentExtCbk (); +extern void defrUnsetComponentStartCbk (); +extern void defrUnsetComponentEndCbk (); +extern void defrUnsetConstraintCbk (); +extern void defrUnsetConstraintsStartCbk (); +extern void defrUnsetConstraintsEndCbk (); +extern void defrUnsetDefaultCapCbk (); +extern void defrUnsetDesignCbk (); +extern void defrUnsetDesignEndCbk (); +extern void defrUnsetDieAreaCbk (); +extern void defrUnsetDividerCbk (); +extern void defrUnsetExtensionCbk (); +extern void defrUnsetFillCbk (); +extern void defrUnsetFillStartCbk (); +extern void defrUnsetFillEndCbk (); +extern void defrUnsetFPCCbk (); +extern void defrUnsetFPCStartCbk (); +extern void defrUnsetFPCEndCbk (); +extern void defrUnsetFloorPlanNameCbk (); +extern void defrUnsetGcellGridCbk (); +extern void defrUnsetGroupCbk (); +extern void defrUnsetGroupExtCbk (); +extern void defrUnsetGroupMemberCbk (); +extern void defrUnsetComponentMaskShiftLayerCbk (); +extern void defrUnsetGroupNameCbk (); +extern void defrUnsetGroupsStartCbk (); +extern void defrUnsetGroupsEndCbk (); +extern void defrUnsetHistoryCbk (); +extern void defrUnsetIOTimingCbk (); +extern void defrUnsetIOTimingsStartCbk (); +extern void defrUnsetIOTimingsEndCbk (); +extern void defrUnsetIOTimingsExtCbk (); +extern void defrUnsetNetCbk (); +extern void defrUnsetNetNameCbk (); +extern void defrUnsetNetNonDefaultRuleCbk (); +extern void defrUnsetNetConnectionExtCbk (); +extern void defrUnsetNetExtCbk (); +extern void defrUnsetNetPartialPathCbk (); +extern void defrUnsetNetSubnetNameCbk (); +extern void defrUnsetNetStartCbk (); +extern void defrUnsetNetEndCbk (); +extern void defrUnsetNonDefaultCbk (); +extern void defrUnsetNonDefaultStartCbk (); +extern void defrUnsetNonDefaultEndCbk (); +extern void defrUnsetPartitionCbk (); +extern void defrUnsetPartitionsExtCbk (); +extern void defrUnsetPartitionsStartCbk (); +extern void defrUnsetPartitionsEndCbk (); +extern void defrUnsetPathCbk (); +extern void defrUnsetPinCapCbk (); +extern void defrUnsetPinCbk (); +extern void defrUnsetPinEndCbk (); +extern void defrUnsetPinExtCbk (); +extern void defrUnsetPinPropCbk (); +extern void defrUnsetPinPropStartCbk (); +extern void defrUnsetPinPropEndCbk (); +extern void defrUnsetPropCbk (); +extern void defrUnsetPropDefEndCbk (); +extern void defrUnsetPropDefStartCbk (); +extern void defrUnsetRegionCbk (); +extern void defrUnsetRegionStartCbk (); +extern void defrUnsetRegionEndCbk (); +extern void defrUnsetRowCbk (); +extern void defrUnsetScanChainExtCbk (); +extern void defrUnsetScanchainCbk (); +extern void defrUnsetScanchainsStartCbk (); +extern void defrUnsetScanchainsEndCbk (); +extern void defrUnsetSiteCbk (); +extern void defrUnsetSlotCbk (); +extern void defrUnsetSlotStartCbk (); +extern void defrUnsetSlotEndCbk (); +extern void defrUnsetSNetWireCbk (); +extern void defrUnsetSNetCbk (); +extern void defrUnsetSNetStartCbk (); +extern void defrUnsetSNetEndCbk (); +extern void defrUnsetSNetPartialPathCbk (); +extern void defrUnsetStartPinsCbk (); +extern void defrUnsetStylesCbk (); +extern void defrUnsetStylesStartCbk (); +extern void defrUnsetStylesEndCbk (); +extern void defrUnsetTechnologyCbk (); +extern void defrUnsetTimingDisableCbk (); +extern void defrUnsetTimingDisablesStartCbk (); +extern void defrUnsetTimingDisablesEndCbk (); +extern void defrUnsetTrackCbk (); +extern void defrUnsetUnitsCbk (); +extern void defrUnsetVersionCbk (); +extern void defrUnsetVersionStrCbk (); +extern void defrUnsetViaCbk (); +extern void defrUnsetViaExtCbk (); +extern void defrUnsetViaStartCbk (); +extern void defrUnsetViaEndCbk (); + +// Routine to set all unused callbacks. This is useful for checking +//to see if you missed something. +extern void defrSetUnusedCallbacks (defrVoidCbkFnType func); + +// Return the current line number in the input file. +extern int defrLineNumber (); +extern long long defrLongLineNumber (); + +// Routine to set the message logging routine for errors +#ifndef DEFI_LOG_FUNCTION + typedef void (*DEFI_LOG_FUNCTION) (const char*); +#endif +extern void defrSetLogFunction(DEFI_LOG_FUNCTION); + +// Routine to set the message logging routine for warnings +#ifndef DEFI_WARNING_LOG_FUNCTION + typedef void (*DEFI_WARNING_LOG_FUNCTION) (const char*); +#endif +extern void defrSetWarningLogFunction(DEFI_WARNING_LOG_FUNCTION); + +// Routine to set the message logging routine for errors +// Used in re-enterable environment. +#ifndef DEFI_LOG_FUNCTION + typedef void (*DEFI_CONTEXT_LOG_FUNCTION) (defiUserData userData, const char*); +#endif +extern void defrSetContextLogFunction(DEFI_CONTEXT_LOG_FUNCTION); + +// Routine to set the message logging routine for warnings +// Used in re-enterable environment. +#ifndef DEFI_WARNING_LOG_FUNCTION + typedef void (*DEFI_CONTEXT_WARNING_LOG_FUNCTION) (defiUserData userData, const char*); +#endif +extern void defrSetContextWarningLogFunction(DEFI_CONTEXT_WARNING_LOG_FUNCTION); + +// Routine to set the user defined malloc routine +typedef void* (*DEFI_MALLOC_FUNCTION) (size_t); +extern void defrSetMallocFunction(DEFI_MALLOC_FUNCTION); + +// Routine to set the user defined realloc routine +typedef void* (*DEFI_REALLOC_FUNCTION) (void*, size_t); +extern void defrSetReallocFunction(DEFI_REALLOC_FUNCTION); + +// Routine to set the user defined free routine +typedef void (*DEFI_FREE_FUNCTION) (void *); +extern void defrSetFreeFunction(DEFI_FREE_FUNCTION); + +// Routine to set the line number of the file that is parsing routine (takes int) +typedef void (*DEFI_LINE_NUMBER_FUNCTION) (int); +extern void defrSetLineNumberFunction(DEFI_LINE_NUMBER_FUNCTION); + +// Routine to set the line number of the file that is parsing routine (takes long long) +typedef void (*DEFI_LONG_LINE_NUMBER_FUNCTION) (long long); +extern void defrSetLongLineNumberFunction(DEFI_LONG_LINE_NUMBER_FUNCTION); + +// Routine to set the line number of the file that is parsing routine (takes int) +// Used in re-enterable environment. +typedef void (*DEFI_CONTEXT_LINE_NUMBER_FUNCTION) (defiUserData userData, int); +extern void defrSetContextLineNumberFunction(DEFI_CONTEXT_LINE_NUMBER_FUNCTION); + +// Routine to set the line number of the file that is parsing routine (takes long long +// Used in re-enterable environment. +typedef void (*DEFI_CONTEXT_LONG_LINE_NUMBER_FUNCTION) (defiUserData userData, long long); +extern void defrSetContextLongLineNumberFunction(DEFI_CONTEXT_LONG_LINE_NUMBER_FUNCTION); + +// Set the number of lines before calling the line function callback routine +// Default is 10000 +extern void defrSetDeltaNumberLines (int); + +// Routine to set the read function +typedef size_t (*DEFI_READ_FUNCTION) (FILE*, char*, size_t); +extern void defrSetReadFunction(DEFI_READ_FUNCTION); +extern void defrUnsetReadFunction (); + +// Routine to set the defrWarning.log to open as append instead for write +// New in 5.7 +extern void defrSetOpenLogFileAppend (); +extern void defrUnsetOpenLogFileAppend (); + +// Routine to set the magic comment found routine +typedef void (*DEFI_MAGIC_COMMENT_FOUND_FUNCTION) (); +extern void defrSetMagicCommentFoundFunction(DEFI_MAGIC_COMMENT_FOUND_FUNCTION); + +// Routine to set the magic comment string +extern void defrSetMagicCommentString(char *); + +// Routine to disable string property value process, default it will process +// the value string +extern void defrDisablePropStrProcess (); + +// Testing purposes only +extern void defrSetNLines(long long n); + +// Routine to set the max number of warnings for a perticular section + +extern void defrSetAssertionWarnings(int warn); +extern void defrSetBlockageWarnings(int warn); +extern void defrSetCaseSensitiveWarnings(int warn); +extern void defrSetComponentWarnings(int warn); +extern void defrSetConstraintWarnings(int warn); +extern void defrSetDefaultCapWarnings(int warn); +extern void defrSetGcellGridWarnings(int warn); +extern void defrSetIOTimingWarnings(int warn); +extern void defrSetNetWarnings(int warn); +extern void defrSetNonDefaultWarnings(int warn); +extern void defrSetPinExtWarnings(int warn); +extern void defrSetPinWarnings(int warn); +extern void defrSetRegionWarnings(int warn); +extern void defrSetRowWarnings(int warn); +extern void defrSetScanchainWarnings(int warn); +extern void defrSetSNetWarnings(int warn); +extern void defrSetStylesWarnings(int warn); +extern void defrSetTrackWarnings(int warn); +extern void defrSetUnitsWarnings(int warn); +extern void defrSetVersionWarnings(int warn); +extern void defrSetViaWarnings(int warn); + +// Handling output messages +extern void defrDisableParserMsgs(int nMsg, int* msgs); +extern void defrEnableParserMsgs(int nMsg, int* msgs); +extern void defrEnableAllMsgs(); +extern void defrSetTotalMsgLimit(int totNumMsgs); +extern void defrSetLimitPerMsg(int msgId, int numMsg); + +// Return codes for the user callbacks. +//The user should return one of these values. +#define PARSE_OK 0 // continue parsing +#define STOP_PARSE 1 // stop parsing with no error message +#define PARSE_ERROR 2 // stop parsing, print an error message + +// Add this alias to the list for the parser +extern void defrAddAlias (const char* key, + const char* value, + int marked); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defrSettings.cpp b/lefdef/src/def/def/defrSettings.cpp new file mode 100644 index 00000000..656891b4 --- /dev/null +++ b/lefdef/src/def/def/defrSettings.cpp @@ -0,0 +1,343 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013 - 2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #6 $ +// $Date: 2013/08/09 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** +#include "defrSettings.hpp" +#include "def.tab.h" + +using namespace std; + +BEGIN_LEFDEF_PARSER_NAMESPACE + +defrSettings *defSettings = NULL; + +defrSettings::defrSettings() +: defiDeltaNumberLines(10000), + AssertionWarnings(999), + BlockageWarnings(999), + CaseSensitiveWarnings(999), + ComponentWarnings(999), + ConstraintWarnings(999), + DefaultCapWarnings(999), + FillWarnings(999), + GcellGridWarnings(999), + IOTimingWarnings(999), + NetWarnings(999), + NonDefaultWarnings(999), + PinExtWarnings(999), + PinWarnings(999), + RegionWarnings(999), + RowWarnings(999), + TrackWarnings(999), + ScanchainWarnings(999), + SNetWarnings(999), + StylesWarnings(999), + UnitsWarnings(999), + VersionWarnings(999), + ViaWarnings(999), + nDDMsgs(0), + disableDMsgs(NULL), + reader_case_sensitive_set(0), + totalDefMsgLimit(0), + AddPathToNet(0), + AllowComponentNets(0), + CommentChar('#'), + DisPropStrProcess(0), + LogFileAppend(0), + ReadFunction(NULL), + ErrorLogFunction(NULL), + WarningLogFunction(NULL), + ContextErrorLogFunction(NULL), + ContextWarningLogFunction(NULL), + MagicCommentFoundFunction(NULL), + MallocFunction(NULL), + ReallocFunction(NULL), + FreeFunction(NULL), + LineNumberFunction(NULL), + LongLineNumberFunction(NULL), + ContextLineNumberFunction(NULL), + ContextLongLineNumberFunction(NULL) +{ + memset(MsgLimit, 0, DEF_MSGS * sizeof(int)); + memset(UnusedCallbacks, 0, CBMAX * sizeof(int)); + + init_symbol_table(); +} + + +void +defrSettings::init_symbol_table() +{ + Keyword_set["ALIGN"] = K_ALIGN; + Keyword_set["ANALOG"] = K_ANALOG; + Keyword_set["ANTENNAMODEL"] = K_ANTENNAMODEL; + Keyword_set["ANTENNAPINGATEAREA"] = K_ANTENNAPINGATEAREA; + Keyword_set["ANTENNAPINDIFFAREA"] = K_ANTENNAPINDIFFAREA; + Keyword_set["ANTENNAPINMAXAREACAR"] = K_ANTENNAPINMAXAREACAR; + Keyword_set["ANTENNAPINMAXCUTCAR"] = K_ANTENNAPINMAXCUTCAR; + Keyword_set["ANTENNAPINMAXSIDEAREACAR"] = K_ANTENNAPINMAXSIDEAREACAR; + Keyword_set["ANTENNAPINPARTIALCUTAREA"] = K_ANTENNAPINPARTIALCUTAREA; + Keyword_set["ANTENNAPINPARTIALMETALAREA"] = K_ANTENNAPINPARTIALMETALAREA; + Keyword_set["ANTENNAPINPARTIALMETALSIDEAREA"] = K_ANTENNAPINPARTIALMETALSIDEAREA; + Keyword_set["ARRAY"] = K_ARRAY; + Keyword_set["ASSERTIONS"] = K_ASSERTIONS; + Keyword_set["BALANCED"] = K_BALANCED; + Keyword_set["BEGINEXT"] = K_BEGINEXT; + Keyword_set["BLOCKAGES"] = K_BLOCKAGES; + Keyword_set["BLOCKAGEWIRE"] = K_BLOCKAGEWIRE; + Keyword_set["BLOCKRING"] = K_BLOCKRING; + Keyword_set["BLOCKWIRE"] = K_BLOCKWIRE; + Keyword_set["BOTTOMLEFT"] = K_BOTTOMLEFT; + Keyword_set["BUSBITCHARS"] = K_BUSBITCHARS; + Keyword_set["BY"] = K_BY; + Keyword_set["CANNOTOCCUPY"] = K_CANNOTOCCUPY; + Keyword_set["CANPLACE"] = K_CANPLACE; + Keyword_set["CAPACITANCE"] = K_CAPACITANCE; + Keyword_set["CLOCK"] = K_CLOCK; + Keyword_set["COMMONSCANPINS"] = K_COMMONSCANPINS; + Keyword_set["COMPONENT"] = K_COMPONENT; + Keyword_set["COMPONENTPIN"] = K_COMPONENTPIN; + Keyword_set["COMPONENTS"] = K_COMPS; + Keyword_set["COMPONENTMASKSHIFT"] = K_COMPSMASKSHIFT; + Keyword_set["CONSTRAINTS"] = K_CONSTRAINTS; + Keyword_set["COREWIRE"] = K_COREWIRE; + Keyword_set["COVER"] = K_COVER; + Keyword_set["CUTSIZE"] = K_CUTSIZE; + Keyword_set["CUTSPACING"] = K_CUTSPACING; + Keyword_set["DEFAULTCAP"] = K_DEFAULTCAP; + Keyword_set["DESIGN"] = K_DESIGN; + Keyword_set["DESIGNRULEWIDTH"] = K_DESIGNRULEWIDTH; + Keyword_set["DIAGWIDTH"] = K_DIAGWIDTH; + Keyword_set["DIEAREA"] = K_DIEAREA; + Keyword_set["DIFF"] = K_DIFF; + Keyword_set["DIRECTION"] = K_DIRECTION; + Keyword_set["DIST"] = K_DIST; + Keyword_set["DISTANCE"] = K_DISTANCE; + Keyword_set["DIVIDERCHAR"] = K_DIVIDERCHAR; + Keyword_set["DO"] = K_DO; + Keyword_set["DRCFILL"] = K_DRCFILL; + Keyword_set["DRIVECELL"] = K_DRIVECELL; + Keyword_set["E"] = K_E; + Keyword_set["EEQMASTER"] = K_EEQMASTER; + Keyword_set["ENCLOSURE"] = K_ENCLOSURE; + Keyword_set["END"] = K_END; + Keyword_set["ENDEXT"] = K_ENDEXT; + Keyword_set["EQUAL"] = K_EQUAL; + Keyword_set["EXCEPTPGNET"] = K_EXCEPTPGNET; + Keyword_set["ESTCAP"] = K_ESTCAP; + Keyword_set["FALL"] = K_FALL; + Keyword_set["FALLMAX"] = K_FALLMAX; + Keyword_set["FALLMIN"] = K_FALLMIN; + Keyword_set["FE"] = K_FE; + Keyword_set["FENCE"] = K_FENCE; + Keyword_set["FILLS"] = K_FILLS; + Keyword_set["FILLWIRE"] = K_FILLWIRE; + Keyword_set["FILLWIREOPC"] = K_FILLWIREOPC; + Keyword_set["FIXED"] = K_FIXED; + Keyword_set["FIXEDBUMP"] = K_FIXEDBUMP; + Keyword_set["FLOATING"] = K_FLOATING; + Keyword_set["FLOORPLANCONSTRAINTS"] = K_FPC; + Keyword_set["FN"] = K_FN; + Keyword_set["FOLLOWPIN"] = K_FOLLOWPIN; + Keyword_set["FOREIGN"] = K_FOREIGN; + Keyword_set["FREQUENCY"] = K_FREQUENCY; + Keyword_set["FROMCLOCKPIN"] = K_FROMCLOCKPIN; + Keyword_set["FROMCOMPPIN"] = K_FROMCOMPPIN; + Keyword_set["FROMIOPIN"] = K_FROMIOPIN; + Keyword_set["FROMPIN"] = K_FROMPIN; + Keyword_set["FS"] = K_FS; + Keyword_set["FW"] = K_FW; + Keyword_set["GCELLGRID"] = K_GCELLGRID; + Keyword_set["GENERATE"] = K_COMP_GEN; + Keyword_set["GUIDE"] = K_GUIDE; + Keyword_set["GROUND"] = K_GROUND; + Keyword_set["GROUNDSENSITIVITY"] = K_GROUNDSENSITIVITY; + Keyword_set["GROUP"] = K_GROUP; + Keyword_set["GROUPS"] = K_GROUPS; + Keyword_set["FLOORPLAN"] = K_FLOORPLAN; + Keyword_set["HALO"] = K_HALO; + Keyword_set["HARDSPACING"] = K_HARDSPACING; + Keyword_set["HISTORY"] = K_HISTORY; + Keyword_set["HOLDRISE"] = K_HOLDRISE; + Keyword_set["HOLDFALL"] = K_HOLDFALL; + Keyword_set["HORIZONTAL"] = K_HORIZONTAL; + Keyword_set["IN"] = K_IN; + Keyword_set["INTEGER"] = K_INTEGER; + Keyword_set["IOTIMINGS"] = K_IOTIMINGS; + Keyword_set["IOWIRE"] = K_IOWIRE; + Keyword_set["LAYER"] = K_LAYER; + Keyword_set["LAYERS"] = K_LAYERS; + Keyword_set["MASK"] = K_MASK; + Keyword_set["MASKSHIFT"] = K_MASKSHIFT; + Keyword_set["MAX"] = K_MAX; + Keyword_set["MAXBITS"] = K_MAXBITS; + Keyword_set["MAXDIST"] = K_MAXDIST; + Keyword_set["MAXHALFPERIMETER"] = K_MAXHALFPERIMETER; + Keyword_set["MAXX"] = K_MAXX; + Keyword_set["MAXY"] = K_MAXY; + Keyword_set["MICRONS"] = K_MICRONS; + Keyword_set["MIN"] = K_MIN; + Keyword_set["MINCUTS"] = K_MINCUTS; + Keyword_set["MINPINS"] = K_MINPINS; + Keyword_set["MUSTJOIN"] = K_MUSTJOIN; + Keyword_set["N"] = K_N; + Keyword_set["NAMESCASESENSITIVE"] = K_NAMESCASESENSITIVE; + Keyword_set["NAMEMAPSTRING"] = K_NAMEMAPSTRING; + Keyword_set["NET"] = K_NET; + Keyword_set["NETEXPR"] = K_NETEXPR; + Keyword_set["NETS"] = K_NETS; + Keyword_set["NETLIST"] = K_NETLIST; + Keyword_set["NEW"] = K_NEW; + Keyword_set["NONDEFAULTRULE"] = K_NONDEFAULTRULE; + Keyword_set["NONDEFAULTRULES"] = K_NONDEFAULTRULES; + Keyword_set["NOSHIELD"] = K_NOSHIELD; + Keyword_set["ON"] = K_ON; + Keyword_set["OFF"] = K_OFF; + Keyword_set["OFFSET"] = K_OFFSET; + Keyword_set["OPC"] = K_OPC; + Keyword_set["ORDERED"] = K_ORDERED; + Keyword_set["ORIGIN"] = K_ORIGIN; + Keyword_set["ORIGINAL"] = K_ORIGINAL; + Keyword_set["OUT"] = K_OUT; + Keyword_set["OXIDE1"] = K_OXIDE1; + Keyword_set["OXIDE2"] = K_OXIDE2; + Keyword_set["OXIDE3"] = K_OXIDE3; + Keyword_set["OXIDE4"] = K_OXIDE4; + Keyword_set["PADRING"] = K_PADRING; + Keyword_set["PARTIAL"] = K_PARTIAL; + Keyword_set["PARTITION"] = K_PARTITION; + Keyword_set["PARALLEL"] = K_PARALLEL; + Keyword_set["PARTITIONS"] = K_PARTITIONS; + Keyword_set["PATH"] = K_PATH; + Keyword_set["PATTERN"] = K_PATTERN; + Keyword_set["PATTERNNAME"] = K_PATTERNNAME; + Keyword_set["PIN"] = K_PIN; + Keyword_set["PINPROPERTIES"] = K_PINPROPERTIES; + Keyword_set["PINS"] = K_PINS; + Keyword_set["PLACED"] = K_PLACED; + Keyword_set["PLACEMENT"] = K_PLACEMENT; + Keyword_set["POLYGON"] = K_POLYGON; + Keyword_set["PORT"] = K_PORT; + Keyword_set["POWER"] = K_POWER; + Keyword_set["PROPERTY"] = K_PROPERTY; + Keyword_set["PROPERTYDEFINITIONS"] = K_PROPERTYDEFINITIONS; + Keyword_set["PUSHDOWN"] = K_PUSHDOWN; + Keyword_set["RANGE"] = K_RANGE; + Keyword_set["REAL"] = K_REAL; + Keyword_set["RECT"] = K_RECT; + Keyword_set["REENTRANTPATHS"] = K_REENTRANTPATHS; + Keyword_set["REGION"] = K_REGION; + Keyword_set["REGIONS"] = K_REGIONS; + Keyword_set["RESET"] = K_RESET; + Keyword_set["RING"] = K_RING; + Keyword_set["RISE"] = K_RISE; + Keyword_set["RISEMAX"] = K_RISEMAX; + Keyword_set["RISEMIN"] = K_RISEMIN; + Keyword_set["ROUTED"] = K_ROUTED; + Keyword_set["ROUTEHALO"] = K_ROUTEHALO; + Keyword_set["ROW"] = K_ROW; + Keyword_set["ROWCOL"] = K_ROWCOL; + Keyword_set["ROWS"] = K_ROWS; + Keyword_set["S"] = K_S; + Keyword_set["SAMEMASK"] = K_SAMEMASK; + Keyword_set["SCAN"] = K_SCAN; + Keyword_set["SCANCHAINS"] = K_SCANCHAINS; + Keyword_set["SETUPFALL"] = K_SETUPFALL; + Keyword_set["SETUPRISE"] = K_SETUPRISE; + Keyword_set["SHAPE"] = K_SHAPE; + Keyword_set["SHIELD"] = K_SHIELD; + Keyword_set["SHIELDNET"] = K_SHIELDNET; + Keyword_set["SIGNAL"] = K_SIGNAL; + Keyword_set["SITE"] = K_SITE; + Keyword_set["SLEWRATE"] = K_SLEWRATE; + Keyword_set["SLOTS"] = K_SLOTS; + Keyword_set["SOFT"] = K_SOFT; + Keyword_set["SOURCE"] = K_SOURCE; + Keyword_set["SPACING"] = K_SPACING; + Keyword_set["SPECIAL"] = K_SPECIAL; + Keyword_set["SPECIALNET"] = K_SNET; + Keyword_set["SPECIALNETS"] = K_SNETS; + Keyword_set["START"] = K_START; + Keyword_set["STEINER"] = K_STEINER; + Keyword_set["STEP"] = K_STEP; + Keyword_set["STOP"] = K_STOP; + Keyword_set["STRING"] = K_STRING; + Keyword_set["STRIPE"] = K_STRIPE; + Keyword_set["STYLE"] = K_STYLE; + Keyword_set["STYLES"] = K_STYLES; + Keyword_set["SUBNET"] = K_SUBNET; + Keyword_set["SUM"] = K_SUM; + Keyword_set["SUPPLYSENSITIVITY"] = K_SUPPLYSENSITIVITY; + Keyword_set["SYNTHESIZED"] = K_SYNTHESIZED; + Keyword_set["TAPER"] = K_TAPER; + Keyword_set["TAPERRULE"] = K_TAPERRULE; + Keyword_set["TECHNOLOGY"] = K_TECH; + Keyword_set["TEST"] = K_TEST; + Keyword_set["TIEOFF"] = K_TIEOFF; + Keyword_set["TIMING"] = K_TIMING; + Keyword_set["TIMINGDISABLES"] = K_TIMINGDISABLES; + Keyword_set["TOCLOCKPIN"] = K_TOCLOCKPIN; + Keyword_set["TOCOMPPIN"] = K_TOCOMPPIN; + Keyword_set["TOIOPIN"] = K_TOIOPIN; + Keyword_set["TOPIN"] = K_TOPIN; + Keyword_set["TOPRIGHT"] = K_TOPRIGHT; + Keyword_set["TRACKS"] = K_TRACKS; + Keyword_set["TRUNK"] = K_TRUNK; + Keyword_set["TURNOFF"] = K_TURNOFF; + Keyword_set["TYPE"] = K_TYPE; + Keyword_set["UNITS"] = K_UNITS; + Keyword_set["UNPLACED"] = K_UNPLACED; + Keyword_set["USE"] = K_USE; + Keyword_set["USER"] = K_USER; + Keyword_set["VARIABLE"] = K_VARIABLE; + Keyword_set["VERSION"] = K_VERSION; + Keyword_set["VERTICAL"] = K_VERTICAL; + Keyword_set["VIA"] = K_VIA; + Keyword_set["VIARULE"] = K_VIARULE; + Keyword_set["VIAS"] = K_VIAS; + Keyword_set["VIRTUAL"] = K_VIRTUAL; + Keyword_set["VOLTAGE"] = K_VOLTAGE; + Keyword_set["VPIN"] = K_VPIN; + Keyword_set["W"] = K_W; + Keyword_set["WEIGHT"] = K_WEIGHT; + Keyword_set["WIDTH"] = K_WIDTH; + Keyword_set["WIRECAP"] = K_WIRECAP; + Keyword_set["WIREEXT"] = K_WIREEXT; + Keyword_set["WIREDLOGIC"] = K_WIREDLOGIC; + Keyword_set["X"] = K_X; + Keyword_set["XTALK"] = K_XTALK; + Keyword_set["Y"] = K_Y; +} + +defrSession::defrSession() +: reader_case_sensitive(0), + FileName(0), + UserData(NULL) +{ +} + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/def/def/defrSettings.hpp b/lefdef/src/def/def/defrSettings.hpp new file mode 100644 index 00000000..dca7831e --- /dev/null +++ b/lefdef/src/def/def/defrSettings.hpp @@ -0,0 +1,142 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013-2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #6 $ +// $Date: 2013/08/09 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef defrSettings_h +#define defrSettings_h + +#include "defrReader.hpp" + +#include +#include +#include + +#define DEF_DEBUG_IDS 100 + +BEGIN_LEFDEF_PARSER_NAMESPACE + +struct defCompareCStrings +{ + bool operator()(const char* lhs, const char* rhs) const { + return std::strcmp(lhs, rhs) < 0; + } +}; + +typedef std::map defKeywordMap; + +class defrSettings { +public: + defrSettings(); + + void init_symbol_table(); + + defKeywordMap Keyword_set; + + int defiDeltaNumberLines; + + //////////////////////////////////// + // + // Flags to control number of warnings to print out, max will be 999 + // + //////////////////////////////////// + + int AssertionWarnings; + int BlockageWarnings; + int CaseSensitiveWarnings; + int ComponentWarnings; + int ConstraintWarnings; + int DefaultCapWarnings; + int FillWarnings; + int GcellGridWarnings; + int IOTimingWarnings; + int LogFileAppend; + int NetWarnings; + int NonDefaultWarnings; + int PinExtWarnings; + int PinWarnings; + int RegionWarnings; + int RowWarnings; + int TrackWarnings; + int ScanchainWarnings; + int SNetWarnings; + int StylesWarnings; + int UnitsWarnings; + int VersionWarnings; + int ViaWarnings; + + int nDDMsgs; + int* disableDMsgs; + int totalDefMsgLimit; // to save the user set total msg limit to output + int AddPathToNet; + int AllowComponentNets; + char CommentChar; + int DisPropStrProcess; + + int reader_case_sensitive_set; + + DEFI_READ_FUNCTION ReadFunction; + DEFI_LOG_FUNCTION ErrorLogFunction; + DEFI_WARNING_LOG_FUNCTION WarningLogFunction; + DEFI_CONTEXT_LOG_FUNCTION ContextErrorLogFunction; + DEFI_CONTEXT_WARNING_LOG_FUNCTION ContextWarningLogFunction; + DEFI_MAGIC_COMMENT_FOUND_FUNCTION MagicCommentFoundFunction; + DEFI_MALLOC_FUNCTION MallocFunction; + DEFI_REALLOC_FUNCTION ReallocFunction; + DEFI_FREE_FUNCTION FreeFunction; + DEFI_LINE_NUMBER_FUNCTION LineNumberFunction; + DEFI_LONG_LINE_NUMBER_FUNCTION LongLineNumberFunction; + DEFI_CONTEXT_LINE_NUMBER_FUNCTION ContextLineNumberFunction; + DEFI_CONTEXT_LONG_LINE_NUMBER_FUNCTION ContextLongLineNumberFunction; + + int UnusedCallbacks[CBMAX]; + int MsgLimit[DEF_MSGS]; +}; + + +class defrSession { +public: + defrSession(); + + char* FileName; + int reader_case_sensitive; + defiUserData UserData; + + defiPropType CompProp; + defiPropType CompPinProp; + defiPropType DesignProp; + defiPropType GroupProp; + defiPropType NDefProp; + defiPropType NetProp; + defiPropType RegionProp; + defiPropType RowProp; + defiPropType SNetProp; +}; + +END_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defwWriter.cpp b/lefdef/src/def/def/defwWriter.cpp new file mode 100644 index 00000000..e6276b5b --- /dev/null +++ b/lefdef/src/def/def/defwWriter.cpp @@ -0,0 +1,6918 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + + +// This file contains code for implementing the defwriter 5.3 +// It has all the functions user can call in their callbacks or +// just their writer to write out the correct lef syntax. +// +// Author: Wanda da Rosa +// Date: Summer, 1998 +// +// Revisions: 11/25/2002 - bug fix: submitted by Craig Files +// (cfiles@ftc.agilent.com) +// Changed all (!name && !*name) to +// (!name || !*name) + +#include "defwWriter.hpp" +#include +#include +#include +#include "defiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// States of the writer. +#define DEFW_UNINIT 0 +#define DEFW_INIT 1 +#define DEFW_VERSION 2 +#define DEFW_CASESENSITIVE 3 +#define DEFW_DIVIDER 4 +#define DEFW_BUSBIT 5 +#define DEFW_DESIGN 6 +#define DEFW_TECHNOLOGY 7 +#define DEFW_ARRAY 8 +#define DEFW_FLOORPLAN 9 +#define DEFW_UNITS 10 +#define DEFW_HISTORY 11 +#define DEFW_PROP_START 12 +#define DEFW_PROP 13 +#define DEFW_PROP_END 14 +#define DEFW_DIE_AREA 15 +#define DEFW_ROW 16 +#define DEFW_TRACKS 17 +#define DEFW_GCELL_GRID 18 +#define DEFW_DEFAULTCAP_START 19 +#define DEFW_DEFAULTCAP 20 +#define DEFW_DEFAULTCAP_END 21 +#define DEFW_CANPLACE 22 +#define DEFW_CANNOTOCCUPY 23 +#define DEFW_VIA_START 24 +#define DEFW_VIA 25 +#define DEFW_VIAVIARULE 26 +#define DEFW_VIAONE_END 27 +#define DEFW_VIA_END 28 +#define DEFW_REGION_START 29 +#define DEFW_REGION 30 +#define DEFW_REGION_END 31 +#define DEFW_COMPONENT_MASKSHIFTLAYERS 32 +#define DEFW_COMPONENT_START 33 +#define DEFW_COMPONENT 34 +#define DEFW_COMPONENT_END 35 +#define DEFW_PIN_START 36 +#define DEFW_PIN 37 +#define DEFW_PIN_PORT 38 +#define DEFW_PIN_END 39 +#define DEFW_PINPROP_START 40 +#define DEFW_PINPROP 41 +#define DEFW_PINPROP_END 42 +#define DEFW_BLOCKAGE_START 43 +#define DEFW_BLOCKAGE_LAYER 44 +#define DEFW_BLOCKAGE_PLACE 45 +#define DEFW_BLOCKAGE_RECT 46 +#define DEFW_BLOCKAGE_POLYGON 47 +#define DEFW_BLOCKAGE_END 48 +#define DEFW_SNET_START 49 +#define DEFW_SNET 50 +#define DEFW_SNET_OPTIONS 51 +#define DEFW_SNET_ENDNET 52 +#define DEFW_SNET_END 53 +#define DEFW_PATH_START 54 +#define DEFW_PATH 55 +#define DEFW_SHIELD 56 +#define DEFW_NET_START 57 +#define DEFW_NET 58 +#define DEFW_NET_OPTIONS 59 +#define DEFW_NET_ENDNET 60 +#define DEFW_NET_END 61 +#define DEFW_SUBNET 62 +#define DEFW_NOSHIELD 63 +#define DEFW_IOTIMING_START 64 +#define DEFW_IOTIMING 65 +#define DEFW_IOTIMING_END 66 +#define DEFW_SCANCHAIN_START 67 +#define DEFW_SCANCHAIN 68 +#define DEFW_SCAN_FLOATING 69 +#define DEFW_SCAN_ORDERED 70 +#define DEFW_SCANCHAIN_END 71 +#define DEFW_FPC_START 72 +#define DEFW_FPC 73 +#define DEFW_FPC_OPER 74 +#define DEFW_FPC_OPER_SUM 75 +#define DEFW_FPC_END 76 +#define DEFW_GROUP_START 77 +#define DEFW_GROUP 78 +#define DEFW_GROUP_END 79 +#define DEFW_SLOT_START 80 +#define DEFW_SLOT_LAYER 81 +#define DEFW_SLOT_RECT 82 +#define DEFW_SLOT_END 83 +#define DEFW_FILL_START 84 +#define DEFW_FILL_LAYER 85 +#define DEFW_FILL_VIA 86 +#define DEFW_FILL_OPC 87 +#define DEFW_FILL_RECT 88 +#define DEFW_FILL_END 89 +#define DEFW_NDR_START 90 +#define DEFW_NDR 91 +#define DEFW_NDR_END 92 +#define DEFW_STYLES_START 93 +#define DEFW_STYLES 94 +#define DEFW_STYLES_END 95 +#define DEFW_BEGINEXT_START 96 +#define DEFW_BEGINEXT 97 +#define DEFW_BEGINEXT_END 98 +#define DEFW_FILL_LAYERMASK 99 +#define DEFW_FILL_VIAMASK 100 +#define DEFW_BLOCKAGE_MASK 101 + +#define DEFW_END 102 + +#define DEFW_DONE 999 + +#define MAXSYN 103 + + +// ***************************************************************************** +// Global Variables +// ***************************************************************************** +FILE *defwFile = 0; // File to write to. +int defwLines = 0; // number of lines written +int defwState = DEFW_UNINIT; // Current state of writer +int defwFunc = DEFW_UNINIT; // Current function of writer +int defwDidNets = 0; // required section +int defwDidComponents = 0; // required section +int defwDidInit = 0; // required section +int defwCounter = 0; // number of nets, components in section +int defwLineItemCounter = 0; // number of items on current line +int defwFPC = 0; // Current number of items in constraints/operand/sum +int defwHasInit = 0; // for defwInit has called +int defwHasInitCbk = 0; // for defwInitCbk has called +int defwSpNetShield = 0; // for special net shieldNetName +static double defVersionNum = 5.7; // default to 5.7 +static int defwObsoleteNum = -1; // keep track the obsolete syntax for error +static int defwViaHasVal = 0; // keep track only ViaRule|Pattern +static int defwBlockageHasSD = 0;// keep track only Spacing|Designrulewidth +static int defwBlockageHasSF = 0;// keep track only SLOTS|FILLS +static int defwBlockageHasSP = 0;// keep track only SOFT|PARTIAL + +char defwStateStr[MAXSYN] [80] = { + "UNINITIALIZE", // 0 + "INITIALIZE", // 1 + "VERSION", // 2 + "CASESENSITIVE", // 3 + "BUSBIT", // 4 + "DIVIDER", // 5 + "DESIGN", // 6 + "TECHNOLOGY", // 7 + "ARRAY", // 8 + "FLOORPLAN", // 9 + "UNITS", // 10 + "HISTORY", // 11 + "PROPERTYDEFINITIONS", // 12 + "PROPERTYDEFINITIONS", // 13 + "PROPERTYDEFINITIONS", // 14 + "DIEAREA", // 15 + "ROW", // 16 + "TRACKS", // 17 + "GCELLGRID", // 18 + "DEFAULTCAP", // 19 + "DEFAULTCAP", // 20 + "DEFAULTCAP", // 21 + "CANPLACE", // 22 + "CANNOTOCCUPY", // 23 + "VIA", // 24 + "VIA", // 25 + "VIA", // 26 + "VIA", // 27 + "VIA", // 28 + "REGION", // 29 + "REGION", // 30 + "REGION", // 31 + "COMPONENT", // 32 + "COMPONENT", // 33 + "COMPONENT", // 34 + "COMPONENT", // 35 + "PIN", // 36 + "PIN", // 37 + "PIN", // 38 + "PIN", // 39 + "PINPROPERTY", // 40 + "PINPROPERTY", // 41 + "PINPROPERTY", // 42 + "SNET", // 43 + "SNET", // 44 + "SNET", // 45 + "SNET", // 46 + "SNET", // 47 + "PATH", // 48 + "PATH", // 49 + "SHIELD", // 50 + "NET", // 51 + "NET", // 52 + "NET", // 53 + "NET", // 54 + "NET", // 55 + "SUBNET", // 56 + "NOSHIELD", // 57 + "IOTIMING", // 58 + "IOTIMING", // 59 + "IOTIMING", // 60 + "SCANCHAIN", // 61 + "SCANCHAIN", // 62 + "SCAN FLOATING", // 63 + "SCAN ORDERED", // 64 + "SCANCHAIN", // 65 + "CONSTRAINTS", // 66 + "CONSTRAINTS", // 67 + "CONSTRAINTS", // 68 + "CONSTRAINTS", // 69 + "CONSTRAINTS", // 70 + "GROUP", // 71 + "GROUP", // 71 + "GROUP", // 72 + "BLOCKAGE", // 73 + "BLOCKAGE LAYER", // 74 + "BLOCKAGE PLACEMENT", // 75 + "BLOCKAGE RECT", // 76 + "BLOCKAGE POLYGON", // 77 + "BLOCKAGE", // 78 + "SLOT", // 79 + "SLOT", // 80 + "SLOT", // 81 + "SLOT", // 82 + "FILL", // 83 + "FILL", // 84 + "FILL", // 85 + "FILL", // 86 + "FILL", // 87 + "FILL", // 88 + "NDR", // 89 + "NDR", // 90 + "NDR", // 91 + "STYLES", // 92 + "STYLES", // 93 + "STYLES", // 94 + "BEGINEXT", // 95 + "BEGINEXT", // 96 + "BEGINEXT", // 97 + "DESIGN END", // 98 + "FILL_LAYERMASK", // 99 + "FILL_VIAMASK", // 100 + "BLOCKAGE_MASK" // 101 + +}; + + +static int printPointsNum = 0; +static void printPoints(FILE *file, double x, double y, + const char* prefix, const char* suffix) +{ + static double x_old = 0; + static double y_old = 0; + + fprintf(file, "%s", prefix); + + if (printPointsNum++ == 0) { + fprintf(file, "( %.11g %.11g )", x, y); + } else if (x_old == x) { + if (y_old == y) { + fprintf(file, "( * * )"); + } else { + fprintf(file, "( * %.11g )", y); + } + } else if (y_old == y) { + fprintf(file, "( %.11g * )", x); + } else { + fprintf(file, "( %.11g %.11g )", x, y); + } + + fprintf(file, "%s", suffix); + + x_old = x; + y_old = y; +} + + + +int +defwNewLine() +{ + if (!defwFile) + return DEFW_BAD_ORDER; + fprintf(defwFile, "\n"); + return DEFW_OK; +} + + +// this function is required to be called first to initialize the required +// sections. +// Either this function or defwInitCbk can be called, cannot be both +int +defwInit(FILE *f, + int vers1, + int vers2, + const char *caseSensitive, + const char *dividerChar, + const char *busBitChars, + const char *designName, + const char *technology, // optional + const char *array, // optional + const char *floorplan, // optional + double units // optional (set to -1 to ignore) + ) +{ + + //if (defwFile) return DEFW_BAD_ORDER; + defwFile = f; + if (defwHasInitCbk == 1) { // defwInitCbk has already called, issue an error + fprintf(stderr, + "ERROR (DEFWRIT-9000): The DEF writer has detected that the function defwInitCbk has already been called and you are trying to call defwInit.\nOnly defwInitCbk or defwInit can be called but not both.\nUpdate your program and then try again.\n"); + fprintf(stderr, "Writer Exit.\n"); + exit(DEFW_BAD_ORDER); + } + + defwState = DEFW_UNINIT; // Current state of writer + defwFunc = DEFW_UNINIT; // Current function of writer + defwDidNets = 0; // required section + defwDidComponents = 0; // required section + defwDidInit = 0; // required section + + if (vers1) { // optional in 5.6 on + fprintf(defwFile, "VERSION %d.%d ;\n", vers1, vers2); + defwLines++; + } + + if ((vers1 == 5) && (vers2 < 6)) { // For version before 5.6 + if (caseSensitive == 0 || *caseSensitive == 0) + return DEFW_BAD_DATA; + fprintf(defwFile, "NAMESCASESENSITIVE %s ;\n", caseSensitive); + } + + if (dividerChar) { // optional in 5.6 on + fprintf(defwFile, "DIVIDERCHAR \"%s\" ;\n", dividerChar); + defwLines++; + } + + if (busBitChars) { // optional in 5.6 on + fprintf(defwFile, "BUSBITCHARS \"%s\" ;\n", busBitChars); + defwLines++; + } + + if (designName == 0 || *designName == 0) + return DEFW_BAD_DATA; + fprintf(defwFile, "DESIGN %s ;\n", designName); + defwLines++; + + if (technology) { + fprintf(defwFile, "TECHNOLOGY %s ;\n", technology); + defwLines++; + } + + if (array) { + fprintf(defwFile, "ARRAY %s ;\n", array); + defwLines++; + } + + if (floorplan) { + fprintf(defwFile, "FLOORPLAN %s ;\n", floorplan); + defwLines++; + } + + if (units != -1.0) { + int unitsVal = (int) units; + switch (unitsVal) { + case 100: + case 200: + case 1000: + case 2000: + case 4000: + case 8000: + case 10000: + case 16000: + case 20000: + fprintf(defwFile, "UNITS DISTANCE MICRONS %d ;\n", ROUND(units)); + defwLines++; + break; + default: + return DEFW_BAD_DATA; + } + } + + defwDidInit = 1; + defwState = DEFW_DESIGN; + defwHasInit = 1; + return DEFW_OK; +} + + +// this function is required to be called first to initialize the variables +// Either this function or defwInit can be called, cannot be both +int +defwInitCbk(FILE *f) +{ + + defwFile = f; + if (defwHasInit == 1) { // defwInit has already called, issue an error + fprintf(stderr, + "ERROR (DEFWRIT-9001): The DEF writer has detected that the function defwInit has already been called and you are trying to call defwInitCbk.\nOnly defwInitCbk or defwInit can be called but not both.\nUpdate your program and then try again.\n"); + fprintf(stderr, "Writer Exit.\n"); + exit(DEFW_BAD_ORDER); + } + + defwState = DEFW_UNINIT; // Current state of writer + defwFunc = DEFW_UNINIT; // Current function of writer + defwDidNets = 0; // required section + defwDidComponents = 0; // required section + defwDidInit = 0; // required section + + defwDidInit = 1; + defwState = DEFW_INIT; + defwHasInitCbk = 1; + return DEFW_OK; +} + +int +defwVersion(int vers1, + int vers2) +{ + defwFunc = DEFW_VERSION; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState != DEFW_INIT) // version follows init + return DEFW_BAD_ORDER; + fprintf(defwFile, "VERSION %d.%d ;\n", vers1, vers2); + if (vers2 >= 10) + defVersionNum = vers1 + (vers2 / 100.0); + else + defVersionNum = vers1 + (vers2 / 10.0); + defwLines++; + + defwState = DEFW_VERSION; + return DEFW_OK; +} + +int +defwCaseSensitive(const char *caseSensitive) +{ + defwObsoleteNum = DEFW_CASESENSITIVE; + defwFunc = DEFW_CASESENSITIVE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defVersionNum >= 5.6) + return DEFW_OBSOLETE; + // Check for repeated casesensitive + if (defwState == DEFW_CASESENSITIVE) + return DEFW_BAD_ORDER; + if (strcmp(caseSensitive, "ON") && strcmp(caseSensitive, "OFF")) + return DEFW_BAD_DATA; // has to be either ON or OFF + fprintf(defwFile, "NAMESCASESENSITIVE %s ;\n", caseSensitive); + defwLines++; + + defwState = DEFW_CASESENSITIVE; + return DEFW_OK; +} + +int +defwBusBitChars(const char *busBitChars) +{ + defwFunc = DEFW_BUSBIT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + // Check for repeated casesensitive + if (defwState == DEFW_BUSBIT) + return DEFW_BAD_ORDER; + if (busBitChars && busBitChars != 0 && *busBitChars != 0) { + fprintf(defwFile, "BUSBITCHARS \"%s\" ;\n", busBitChars); + defwLines++; + } + + defwState = DEFW_BUSBIT; + return DEFW_OK; +} + +int +defwDividerChar(const char *dividerChar) +{ + defwFunc = DEFW_DIVIDER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + // Check for repeated busbit + if (defwState == DEFW_DIVIDER) + return DEFW_BAD_ORDER; + if (dividerChar && dividerChar != 0 && *dividerChar != 0) { + fprintf(defwFile, "DIVIDERCHAR \"%s\" ;\n", dividerChar); + defwLines++; + } + + defwState = DEFW_DIVIDER; + return DEFW_OK; +} + +int +defwDesignName(const char *name) +{ + defwFunc = DEFW_DESIGN; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + // Check for repeated design + if (defwState == DEFW_DESIGN) + return DEFW_BAD_ORDER; + if (name && name != 0 && *name != 0) { + fprintf(defwFile, "DESIGN %s ;\n", name); + defwLines++; + } + + defwState = DEFW_DESIGN; + return DEFW_OK; +} + +int +defwTechnology(const char *technology) +{ + defwFunc = DEFW_TECHNOLOGY; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (technology && technology != 0 && *technology != 0) { + fprintf(defwFile, "TECHNOLOGY %s ;\n", technology); + defwLines++; + } + + defwState = DEFW_TECHNOLOGY; + return DEFW_OK; +} + +int +defwArray(const char *array) +{ + defwFunc = DEFW_ARRAY; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState == DEFW_ARRAY) + return DEFW_BAD_ORDER; // check for repeated array + if (array && array != 0 && *array != 0) { + fprintf(defwFile, "ARRAY %s ;\n", array); + defwLines++; + } + + defwState = DEFW_ARRAY; + return DEFW_OK; +} + +int +defwFloorplan(const char *floorplan) +{ + defwFunc = DEFW_FLOORPLAN; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState == DEFW_FLOORPLAN) + return DEFW_BAD_ORDER; // Check for repeated floorplan + if (floorplan && floorplan != 0 && *floorplan != 0) { + fprintf(defwFile, "FLOORPLAN %s ;\n", floorplan); + defwLines++; + } + + defwState = DEFW_FLOORPLAN; + return DEFW_OK; +} + +int +defwUnits(int units) +{ + defwFunc = DEFW_UNITS; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState == DEFW_UNITS) + return DEFW_BAD_ORDER; // Check for repeated units + if (units != 0) { + switch (units) { + case 100: + case 200: + case 1000: + case 2000: + case 10000: + case 20000: + fprintf(defwFile, "UNITS DISTANCE MICRONS %d ;\n", units); + defwLines++; + break; + default: + return DEFW_BAD_DATA; + } + } + + defwState = DEFW_UNITS; + return DEFW_OK; +} + +int +defwHistory(const char *string) +{ + char *c; + defwFunc = DEFW_HISTORY; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (string == 0 || *string == 0) + return DEFW_BAD_DATA; + + for (c = (char*) string; *c; c++) + if (*c == '\n') + defwLines++; + + fprintf(defwFile, "HISTORY %s ;\n", string); + defwLines++; + + defwState = DEFW_HISTORY; + return DEFW_OK; +} + +int +defwStartPropDef() +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if ((defwState >= DEFW_PROP_START) && (defwState <= DEFW_PROP_END)) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "PROPERTYDEFINITIONS\n"); + defwLines++; + + defwState = DEFW_PROP_START; + return DEFW_OK; +} + + +int +defwIsPropObjType(const char *objType) +{ + if (strcmp(objType, "DESIGN") && strcmp(objType, "COMPONENT") && + strcmp(objType, "NET") && strcmp(objType, "SPECIALNET") && + strcmp(objType, "GROUP") && strcmp(objType, "ROW") && + strcmp(objType, "COMPONENTPIN") && strcmp(objType, "REGION") && + strcmp(objType, "NONDEFAULTRULE")) + return 0; + return 1; +} + +int +defwIntPropDef(const char *objType, + const char *propName, + double leftRange, + double rightRange, // optional + int propValue // optional + ) +{ + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PROP_START && + defwState != DEFW_PROP) + return DEFW_BAD_ORDER; + if ((!objType || !*objType) || (!propName || !*propName)) // require + return DEFW_BAD_DATA; + + if (!defwIsPropObjType(objType)) + return DEFW_BAD_DATA; + + fprintf(defwFile, " %s %s INTEGER ", objType, propName); + if (leftRange || rightRange) + fprintf(defwFile, "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + fprintf(defwFile, "%d ", propValue); + + fprintf(defwFile, ";\n"); + + defwLines++; + defwState = DEFW_PROP; + return DEFW_OK; +} + + +int +defwRealPropDef(const char *objType, + const char *propName, + double leftRange, + double rightRange, // optional + double propValue // optional + ) +{ + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PROP_START && + defwState != DEFW_PROP) + return DEFW_BAD_ORDER; + if ((!objType || !*objType) || (!propName || !*propName)) // require + return DEFW_BAD_DATA; + + if (!defwIsPropObjType(objType)) + return DEFW_BAD_DATA; + + fprintf(defwFile, " %s %s REAL ", objType, propName); + if (leftRange || rightRange) + fprintf(defwFile, "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + fprintf(defwFile, "%.11g ", propValue); + + fprintf(defwFile, ";\n"); + + defwLines++; + defwState = DEFW_PROP; + return DEFW_OK; +} + + +int +defwStringPropDef(const char *objType, + const char *propName, + double leftRange, + double rightRange, // optional + const char *propValue // optional + ) +{ + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PROP_START && + defwState != DEFW_PROP) + return DEFW_BAD_ORDER; + if ((!objType || !*objType) || (!propName || !*propName)) + return DEFW_BAD_DATA; + + if (!defwIsPropObjType(objType)) + return DEFW_BAD_DATA; + + fprintf(defwFile, " %s %s STRING ", objType, propName); + if (leftRange || rightRange) + fprintf(defwFile, "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + fprintf(defwFile, "\"%s\" ", propValue); // string, set quotes + + fprintf(defwFile, ";\n"); + + defwLines++; + defwState = DEFW_PROP; + return DEFW_OK; +} + + +int +defwEndPropDef() +{ + defwFunc = DEFW_PROP_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PROP_START && + defwState != DEFW_PROP) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "END PROPERTYDEFINITIONS\n\n"); + defwLines++; + + defwState = DEFW_PROP_END; + return DEFW_OK; +} + +int +defwIsPropState() +{ + if ((defwState != DEFW_ROW) && (defwState != DEFW_REGION) && + (defwState != DEFW_COMPONENT) && (defwState != DEFW_PIN) && + (defwState != DEFW_SNET) && (defwState != DEFW_NET) && + (defwState != DEFW_GROUP) && (defwState != DEFW_PINPROP) && + (defwState != DEFW_SNET_OPTIONS) && (defwState != DEFW_NET_OPTIONS) && + (defwState != DEFW_NDR) && (defwState != DEFW_BEGINEXT)) + return 0; + return 1; +} + +int +defwStringProperty(const char *propName, + const char *propValue) +{ + if (!defwIsPropState()) + return DEFW_BAD_ORDER; + + // new line for the defwRow of the previous line + // do not end with newline, may have more than on properties + fprintf(defwFile, "\n + PROPERTY %s \"%s\" ", propName, propValue); + defwLines++; + return DEFW_OK; +} + + +int +defwRealProperty(const char *propName, + double propValue) +{ + if (!defwIsPropState()) + return DEFW_BAD_ORDER; + + // new line for the defwRow of the previous line + // do not end with newline, may have more than on properties + fprintf(defwFile, "\n + PROPERTY %s %.11g ", propName, propValue); + defwLines++; + return DEFW_OK; +} + + +int +defwIntProperty(const char *propName, + int propValue) +{ + if (!defwIsPropState()) + return DEFW_BAD_ORDER; + + // new line for the defwRow of the previous line + // do not end with newline, may have more than on properties + fprintf(defwFile, "\n + PROPERTY %s %d ", propName, propValue); + defwLines++; + return DEFW_OK; +} + + +int +defwDieArea(int xl, + int yl, + int xh, + int yh) +{ + defwFunc = DEFW_DIE_AREA; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState == DEFW_DIE_AREA) + return DEFW_BAD_ORDER; + if (xl > xh || yl > yh) + return DEFW_BAD_DATA; + + fprintf(defwFile, "DIEAREA ( %d %d ) ( %d %d ) ;\n", xl, yl, xh, yh); + defwLines++; + + defwState = DEFW_DIE_AREA; + return DEFW_OK; +} + + +int +defwDieAreaList(int num_points, + int *xl, + int *yl) +{ + int i; + + defwFunc = DEFW_DIE_AREA; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState == DEFW_DIE_AREA) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + if (num_points < 4) + return DEFW_BAD_DATA; + + fprintf(defwFile, "DIEAREA "); + for (i = 0; i < num_points; i++) { + if (i == 0) + fprintf(defwFile, "( %d %d ) ", *xl++, *yl++); + else { + if ((i % 5) == 0) { + fprintf(defwFile, "\n ( %d %d ) ", *xl++, *yl++); + defwLines++; + } else + fprintf(defwFile, "( %d %d ) ", *xl++, *yl++); + } + } + fprintf(defwFile, ";\n"); + defwLines++; + + defwState = DEFW_DIE_AREA; + return DEFW_OK; +} + + +char * +defwAddr(const char *x) +{ + return (char*) x; +} + + +char * +defwOrient(int num) +{ + switch (num) { + case 0: + return defwAddr("N"); + case 1: + return defwAddr("W"); + case 2: + return defwAddr("S"); + case 3: + return defwAddr("E"); + case 4: + return defwAddr("FN"); + case 5: + return defwAddr("FW"); + case 6: + return defwAddr("FS"); + case 7: + return defwAddr("FE"); + }; + return defwAddr("BOGUS "); +} + + +int +defwRow(const char *rowName, + const char *rowType, + int x_orig, + int y_orig, + int orient, + int do_count, + int do_increment, + int do_x, + int do_y) +{ + defwFunc = DEFW_ROW; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n");// add the ; and newline for the previous row. + + // required + if ((rowName == 0) || (*rowName == 0) || (rowType == 0) || (*rowType == 0)) + return DEFW_BAD_DATA; + + // do not have ; because the row may have properties + // do not end with newline, if there is no property, ; need to be concat. + fprintf(defwFile, "ROW %s %s %d %d %s ", rowName, rowType, x_orig, y_orig, + defwOrient(orient)); + if ((do_count != 0) || (do_increment != 0)) { + fprintf(defwFile, "DO %d BY %d ", do_count, do_increment); + if ((do_x != 0) || (do_y != 0)) + fprintf(defwFile, "STEP %d %d ", do_x, do_y); + } + defwLines++; + + defwState = DEFW_ROW; + return DEFW_OK; +} + + +int +defwRowStr(const char *rowName, + const char *rowType, + int x_orig, + int y_orig, + const char *orient, + int do_count, + int do_increment, + int do_x, + int do_y) +{ + defwFunc = DEFW_ROW; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n");// add the ; and newline for the previous row. + + if ((!rowName || !*rowName) || (!rowType || !*rowType)) // required + return DEFW_BAD_DATA; + + // do not have ; because the row may have properties + // do not end with newline, if there is no property, ; need to be concat. + fprintf(defwFile, "ROW %s %s %d %d %s ", rowName, rowType, x_orig, y_orig, + orient); + if ((do_count != 0) || (do_increment != 0)) { + fprintf(defwFile, "DO %d BY %d ", do_count, do_increment); + if ((do_x != 0) || (do_y != 0)) + fprintf(defwFile, "STEP %d %d ", do_x, do_y); + } + defwLines++; + + defwState = DEFW_ROW; + return DEFW_OK; +} + + +int +defwTracks(const char *master, + int do_start, + int do_cnt, + int do_step, + int num_layers, + const char **layers, + int mask, + int sameMask) +{ + int i; + + defwFunc = DEFW_TRACKS; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row + + if (!master || !*master) // required + return DEFW_BAD_DATA; + if (strcmp(master, "X") && strcmp(master, "Y")) + return DEFW_BAD_DATA; + + + if (mask) { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + if (sameMask) { + fprintf(defwFile, "TRACKS %s %d DO %d STEP %d MASK %d SAMEMASK LAYER", + master, do_start, do_cnt, do_step, mask); + } else { + fprintf(defwFile, "TRACKS %s %d DO %d STEP %d MASK %d LAYER", + master, do_start, do_cnt, do_step, mask); + } + } else { + fprintf(defwFile, "TRACKS %s %d DO %d STEP %d LAYER", + master, do_start, do_cnt, do_step); + } + + for (i = 0; i < num_layers; i++) { + fprintf(defwFile, " %s", layers[i]); + } + fprintf(defwFile, " ;\n"); + defwLines++; + + defwState = DEFW_TRACKS; + return DEFW_OK; +} + + +int +defwGcellGrid(const char *master, + int do_start, + int do_cnt, + int do_step) +{ + defwFunc = DEFW_GCELL_GRID; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row. + + if (!master || !*master) // required + return DEFW_BAD_DATA; + if (strcmp(master, "X") && strcmp(master, "Y")) + return DEFW_BAD_DATA; + + fprintf(defwFile, "GCELLGRID %s %d DO %d STEP %d ;\n", master, do_start, + do_cnt, do_step); + defwLines++; + + defwState = DEFW_GCELL_GRID; + return DEFW_OK; +} + + +int +defwStartDefaultCap(int count) +{ + defwObsoleteNum = DEFW_DEFAULTCAP_START; + defwFunc = DEFW_DEFAULTCAP_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if ((defwState >= DEFW_DEFAULTCAP_START) && + (defwState <= DEFW_DEFAULTCAP_END)) + return DEFW_BAD_ORDER; + if (defVersionNum >= 5.4) + return DEFW_OBSOLETE; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row. + + fprintf(defwFile, "DEFAULTCAP %d\n", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_DEFAULTCAP_START; + return DEFW_OK; +} + + +int +defwDefaultCap(int pins, + double cap) +{ + defwFunc = DEFW_DEFAULTCAP; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_DEFAULTCAP_START && + defwState != DEFW_DEFAULTCAP) + return DEFW_BAD_ORDER; + + fprintf(defwFile, " MINPINS %d WIRECAP %f ;\n", pins, cap); + defwLines++; + defwCounter--; + + defwState = DEFW_DEFAULTCAP; + return DEFW_OK; +} + + +int +defwEndDefaultCap() +{ + defwFunc = DEFW_DEFAULTCAP_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_DEFAULTCAP_START && + defwState != DEFW_DEFAULTCAP) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, "END DEFAULTCAP\n\n"); + defwLines++; + + defwState = DEFW_DEFAULTCAP_END; + return DEFW_OK; +} + + +int +defwCanPlace(const char *master, + int xOrig, + int yOrig, + int orient, + int doCnt, + int doInc, + int xStep, + int yStep) +{ + defwFunc = DEFW_CANPLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row. + + if ((master == 0) || (*master == 0)) // required + return DEFW_BAD_DATA; + fprintf(defwFile, "CANPLACE %s %d %d %s DO %d BY %d STEP %d %d ;\n", + master, xOrig, yOrig, defwOrient(orient), + doCnt, doInc, xStep, yStep); + defwLines++; + + defwState = DEFW_CANPLACE; + return DEFW_OK; +} + + +int +defwCanPlaceStr(const char *master, + int xOrig, + int yOrig, + const char *orient, + int doCnt, + int doInc, + int xStep, + int yStep) +{ + defwFunc = DEFW_CANPLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row. + + if (!master || !*master) // required + return DEFW_BAD_DATA; + fprintf(defwFile, "CANPLACE %s %d %d %s DO %d BY %d STEP %d %d ;\n", + master, xOrig, yOrig, orient, + doCnt, doInc, xStep, yStep); + defwLines++; + + defwState = DEFW_CANPLACE; + return DEFW_OK; +} + + +int +defwCannotOccupy(const char *master, + int xOrig, + int yOrig, + int orient, + int doCnt, + int doInc, + int xStep, + int yStep) +{ + defwFunc = DEFW_CANNOTOCCUPY; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + + if ((master == 0) || (*master == 0)) // required + return DEFW_BAD_DATA; + fprintf(defwFile, "CANNOTOCCUPY %s %d %d %s DO %d BY %d STEP %d %d ;\n", + master, xOrig, yOrig, defwOrient(orient), + doCnt, doInc, xStep, yStep); + defwLines++; + + defwState = DEFW_CANNOTOCCUPY; + return DEFW_OK; +} + + +int +defwCannotOccupyStr(const char *master, + int xOrig, + int yOrig, + const char *orient, + int doCnt, + int doInc, + int xStep, + int yStep) +{ + defwFunc = DEFW_CANNOTOCCUPY; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + + if (!master || !*master) // required + return DEFW_BAD_DATA; + fprintf(defwFile, "CANNOTOCCUPY %s %d %d %s DO %d BY %d STEP %d %d ;\n", + master, xOrig, yOrig, orient, + doCnt, doInc, xStep, yStep); + defwLines++; + + defwState = DEFW_CANNOTOCCUPY; + return DEFW_OK; +} + + +int +defwStartVias(int count) +{ + defwFunc = DEFW_VIA_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if ((defwState >= DEFW_VIA_START) && (defwState <= DEFW_VIA_END)) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row. + + fprintf(defwFile, "VIAS %d ;\n", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_VIA_START; + return DEFW_OK; +} + + +int +defwViaName(const char *name) +{ + defwFunc = DEFW_VIA; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIA_START && + defwState != DEFW_VIAONE_END) + return DEFW_BAD_ORDER; + defwCounter--; + + if (!name || !*name) // required + return DEFW_BAD_DATA; + fprintf(defwFile, " - %s", name); + + defwState = DEFW_VIA; + defwViaHasVal = 0; + return DEFW_OK; +} + + +int +defwViaPattern(const char *pattern) +{ + defwFunc = DEFW_VIA; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIA) + return DEFW_BAD_ORDER; // after defwViaName + + if (defwViaHasVal) + return DEFW_ALREADY_DEFINED; // either PatternName or + // ViaRule has defined + if (!pattern || !*pattern) // required + return DEFW_BAD_DATA; + fprintf(defwFile, " + PATTERNNAME %s", pattern); + + defwState = DEFW_VIA; + defwViaHasVal = 1; + return DEFW_OK; +} + + +int +defwViaRect(const char *layerNames, + int xl, + int yl, + int xh, + int yh, + int mask) +{ + defwFunc = DEFW_VIA; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIA) + return DEFW_BAD_ORDER; + + if (!layerNames || !*layerNames) // required + return DEFW_BAD_DATA; + if (!mask) { + fprintf(defwFile, "\n + RECT %s ( %d %d ) ( %d %d )", layerNames, + xl, yl, xh, yh); + } else { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + fprintf(defwFile, "\n + RECT %s + MASK %d ( %d %d ) ( %d %d )", + layerNames, mask, xl, yl, xh, yh); + } + defwLines++; + + + defwState = DEFW_VIA; + return DEFW_OK; +} + +int +defwViaPolygon(const char *layerName, + int num_polys, + double *xl, + double *yl, + int mask) +{ + int i; + + defwFunc = DEFW_VIA; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIA) + return DEFW_BAD_ORDER; + + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + + if (!mask) { + fprintf(defwFile, "\n + POLYGON %s ", layerName); + } else { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + fprintf(defwFile, "\n + POLYGON %s + MASK %d ", layerName, mask); + } + + printPointsNum = 0; + for (i = 0; i < num_polys; i++) { + if ((i == 0) || ((i % 5) != 0)) + printPoints(defwFile, *xl++, *yl++, "", " "); + else { + printPoints(defwFile, *xl++, *yl++, "\n ", " "); + defwLines++; + } + } + defwLines++; + return DEFW_OK; +} + +int +defwViaViarule(const char *viaRuleName, + double xCutSize, + double yCutSize, + const char *botMetalLayer, + const char *cutLayer, + const char *topMetalLayer, + double xCutSpacing, + double yCutSpacing, + double xBotEnc, + double yBotEnc, + double xTopEnc, + double yTopEnc) +{ + defwFunc = DEFW_VIA; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIA) + return DEFW_BAD_ORDER; + if (defwViaHasVal) + return DEFW_ALREADY_DEFINED; // either PatternName or + // ViaRule has defined + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, " + VIARULE %s\n", viaRuleName); + fprintf(defwFile, " + CUTSIZE %.11g %.11g\n", xCutSize, yCutSize); + fprintf(defwFile, " + LAYERS %s %s %s\n", botMetalLayer, + cutLayer, topMetalLayer); + fprintf(defwFile, " + CUTSPACING %.11g %.11g\n", + xCutSpacing, yCutSpacing); + fprintf(defwFile, " + ENCLOSURE %.11g %.11g %.11g %.11g", + xBotEnc, yBotEnc, xTopEnc, yTopEnc); + defwLines += 5; + defwState = DEFW_VIAVIARULE; + defwViaHasVal = 1; + return DEFW_OK; +} + +int +defwViaViaruleRowCol(int numCutRows, + int numCutCols) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIAVIARULE) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + ROWCOL %d %d", numCutRows, numCutCols); + defwLines++; + return DEFW_OK; +} + +int +defwViaViaruleOrigin(int xOffset, + int yOffset) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIAVIARULE) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + ORIGIN %d %d", xOffset, yOffset); + defwLines++; + return DEFW_OK; +} + +int +defwViaViaruleOffset(int xBotOffset, + int yBotOffset, + int xTopOffset, + int yTopOffset) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIAVIARULE) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + OFFSET %d %d %d %d", + xBotOffset, yBotOffset, xTopOffset, yTopOffset); + defwLines++; + return DEFW_OK; +} + +int +defwViaViarulePattern(const char *cutPattern) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIAVIARULE) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + PATTERN %s", cutPattern); + defwLines++; + return DEFW_OK; +} + +int +defwOneViaEnd() +{ + defwFunc = DEFW_VIA; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState != DEFW_VIA) && (defwState != DEFW_VIAVIARULE)) + return DEFW_BAD_ORDER; + + fprintf(defwFile, " ;\n"); + defwLines++; + + defwState = DEFW_VIAONE_END; + return DEFW_OK; +} + + +int +defwEndVias() +{ + defwFunc = DEFW_VIA_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_VIA_START && + defwState != DEFW_VIAONE_END) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, "END VIAS\n\n"); + defwLines++; + + defwState = DEFW_VIA_END; + return DEFW_OK; +} + + +int +defwStartRegions(int count) +{ + defwFunc = DEFW_REGION_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if ((defwState >= DEFW_REGION_START) && (defwState <= DEFW_REGION_END)) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row. + + fprintf(defwFile, "REGIONS %d ;\n", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_REGION_START; + return DEFW_OK; +} + + +int +defwRegionName(const char *name) +{ + defwFunc = DEFW_REGION; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_REGION_START && + defwState != DEFW_REGION) + return DEFW_BAD_ORDER; + defwCounter--; + + if (defwState == DEFW_REGION) + fprintf(defwFile, ";\n"); // add the ; and \n for the previous row. + + if (!name || !*name) // required + return DEFW_BAD_DATA; + fprintf(defwFile, " - %s ", name); + defwState = DEFW_REGION; + return DEFW_OK; +} + + +int +defwRegionPoints(int xl, + int yl, + int xh, + int yh) +{ + defwFunc = DEFW_REGION; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_REGION) + return DEFW_BAD_ORDER; // after RegionName + + fprintf(defwFile, " ( %d %d ) ( %d %d ) ", xl, yl, xh, yh); + + defwState = DEFW_REGION; + return DEFW_OK; +} + + +int +defwRegionType(const char *type) +{ + defwFunc = DEFW_REGION; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_REGION) + return DEFW_BAD_ORDER; // after RegionName + + if (!type || !*type) // required + return DEFW_BAD_DATA; + if (strcmp(type, "FENCE") && strcmp(type, "GUIDE")) + return DEFW_BAD_DATA; + + fprintf(defwFile, " + TYPE %s ", type); + + defwState = DEFW_REGION; + return DEFW_OK; +} + + +int +defwEndRegions() +{ + defwFunc = DEFW_REGION_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_REGION_START && + defwState != DEFW_REGION) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + if (defwState == DEFW_REGION) + fprintf(defwFile, ";\nEND REGIONS\n\n"); // ; for the previous statement + else + fprintf(defwFile, "END REGIONS\n\n"); // ; for the previous statement + defwLines++; + + defwState = DEFW_REGION_END; + return DEFW_OK; +} + + +int +defwComponentMaskShiftLayers(const char **layerNames, + int numLayerName) +{ + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + defwFunc = DEFW_COMPONENT_MASKSHIFTLAYERS; + + if (!defwFile) + return DEFW_UNINITIALIZED; + + if (defwState == DEFW_COMPONENT_MASKSHIFTLAYERS) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "COMPONENTMASKSHIFT "); + + if (numLayerName) { + for (int i = 0; i < numLayerName; i++) + fprintf(defwFile, "%s ", layerNames[i]); + } + + fprintf(defwFile, ";\n\n"); + + defwLines++; + + defwState = DEFW_COMPONENT_MASKSHIFTLAYERS; + return DEFW_OK; +} + + +int +defwStartComponents(int count) +{ + defwFunc = DEFW_COMPONENT_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if ((defwState >= DEFW_COMPONENT_START) && (defwState <= DEFW_COMPONENT_END)) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row. + + fprintf(defwFile, "COMPONENTS %d ;\n", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_COMPONENT_START; + return DEFW_OK; +} + + +int +defwComponent(const char *instance, + const char *master, + int numNetName, + const char **netNames, + const char *eeq, + const char *genName, + const char *genParemeters, + const char *source, + int numForeign, + const char **foreigns, + int *foreignX, + int *foreignY, + int *foreignOrients, + const char *status, + int statusX, + int statusY, + int statusOrient, + double weight, + const char *region, + int xl, + int yl, + int xh, + int yh) +{ + + int i; + int uplace = 0; + + defwFunc = DEFW_COMPONENT; // Current function of writer + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_COMPONENT_START && + defwState != DEFW_COMPONENT) + return DEFW_BAD_ORDER; + + defwCounter--; + + // required + if ((instance == 0) || (*instance == 0) || (master == 0) || (*master == 0)) + return DEFW_BAD_DATA; + + if (source && strcmp(source, "NETLIST") && strcmp(source, "DIST") && + strcmp(source, "USER") && strcmp(source, "TIMING")) + return DEFW_BAD_DATA; + + if (status) { + if (strcmp(status, "UNPLACED") == 0) { + uplace = 1; + } else if (strcmp(status, "COVER") && strcmp(status, "FIXED") && + strcmp(status, "PLACED")) + return DEFW_BAD_DATA; + } + + // only either region or xl, yl, xh, yh + if (region && (xl || yl || xh || yh)) + return DEFW_BAD_DATA; + + if (defwState == DEFW_COMPONENT) + fprintf(defwFile, ";\n"); // newline for the previous component + + fprintf(defwFile, " - %s %s ", instance, master); + if (numNetName) { + for (i = 0; i < numNetName; i++) + fprintf(defwFile, "%s ", netNames[i]); + } + defwLines++; + // since the rest is optionals, new line is placed before the options + if (eeq) { + fprintf(defwFile, "\n + EEQMASTER %s ", eeq); + defwLines++; + } + if (genName) { + fprintf(defwFile, "\n + GENERATE %s ", genName); + if (genParemeters) + fprintf(defwFile, " %s ", genParemeters); + defwLines++; + } + if (source) { + fprintf(defwFile, "\n + SOURCE %s ", source); + defwLines++; + } + if (numForeign) { + for (i = 0; i < numForeign; i++) { + fprintf(defwFile, "\n + FOREIGN %s ( %d %d ) %s ", foreigns[i], + foreignX[i], foreignY[i], defwOrient(foreignOrients[i])); + defwLines++; + } + } + if (status && (uplace == 0)) { + fprintf(defwFile, "\n + %s ( %d %d ) %s ", status, statusX, statusY, + defwOrient(statusOrient)); + } else if (uplace) { + fprintf(defwFile, "\n + %s ", status); + } + defwLines++; + if (weight) { + fprintf(defwFile, "\n + WEIGHT %.11g ", weight); + defwLines++; + } + if (region) { + fprintf(defwFile, "\n + REGION %s ", region); + defwLines++; + } else if (xl || yl || xh || yh) { + fprintf(defwFile, "\n + REGION ( %d %d ) ( %d %d ) ", + xl, yl, xh, yh); + defwLines++; + } + + defwState = DEFW_COMPONENT; + return DEFW_OK; +} + + +int +defwComponentStr(const char *instance, + const char *master, + int numNetName, + const char **netNames, + const char *eeq, + const char *genName, + const char *genParemeters, + const char *source, + int numForeign, + const char **foreigns, + int *foreignX, + int *foreignY, + const char **foreignOrients, + const char *status, + int statusX, + int statusY, + const char *statusOrient, + double weight, + const char *region, + int xl, + int yl, + int xh, + int yh) +{ + + int i; + int uplace = 0; + + defwFunc = DEFW_COMPONENT; // Current function of writer + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_COMPONENT_START && + defwState != DEFW_COMPONENT) + return DEFW_BAD_ORDER; + + defwCounter--; + + if ((!instance || !*instance) || (!master || !*master)) // required + return DEFW_BAD_DATA; + + if (source && strcmp(source, "NETLIST") && strcmp(source, "DIST") && + strcmp(source, "USER") && strcmp(source, "TIMING")) + return DEFW_BAD_DATA; + + if (status) { + if (strcmp(status, "UNPLACED") == 0) { + uplace = 1; + } else if (strcmp(status, "COVER") && strcmp(status, "FIXED") && + strcmp(status, "PLACED")) + return DEFW_BAD_DATA; + } + + // only either region or xl, yl, xh, yh + if (region && (xl || yl || xh || yh)) + return DEFW_BAD_DATA; + + if (defwState == DEFW_COMPONENT) + fprintf(defwFile, ";\n"); // newline for the previous component + + fprintf(defwFile, " - %s %s ", instance, master); + if (numNetName) { + for (i = 0; i < numNetName; i++) + fprintf(defwFile, "%s ", netNames[i]); + } + defwLines++; + // since the rest is optionals, new line is placed before the options + if (eeq) { + fprintf(defwFile, "\n + EEQMASTER %s ", eeq); + defwLines++; + } + if (genName) { + fprintf(defwFile, "\n + GENERATE %s ", genName); + if (genParemeters) + fprintf(defwFile, " %s ", genParemeters); + defwLines++; + } + if (source) { + fprintf(defwFile, "\n + SOURCE %s ", source); + defwLines++; + } + if (numForeign) { + for (i = 0; i < numForeign; i++) { + fprintf(defwFile, "\n + FOREIGN %s ( %d %d ) %s ", foreigns[i], + foreignX[i], foreignY[i], foreignOrients[i]); + defwLines++; + } + } + if (status && (uplace == 0)) { + fprintf(defwFile, "\n + %s ( %d %d ) %s ", status, statusX, statusY, + statusOrient); + } else if (uplace) { + fprintf(defwFile, "\n + %s ", status); + } + defwLines++; + if (weight) { + fprintf(defwFile, "\n + WEIGHT %.11g ", weight); + defwLines++; + } + if (region) { + fprintf(defwFile, "\n + REGION %s ", region); + defwLines++; + } else if (xl || yl || xh || yh) { + fprintf(defwFile, "\n + REGION ( %d %d ) ( %d %d ) ", + xl, yl, xh, yh); + defwLines++; + } + + defwState = DEFW_COMPONENT; + return DEFW_OK; +} + +int +defwComponentMaskShift(int shiftLayerMasks) +{ + defwFunc = DEFW_COMPONENT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + if (defwState != DEFW_COMPONENT) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + MASKSHIFT %d ", shiftLayerMasks); + defwLines++; + return DEFW_OK; +} + +int +defwComponentHalo(int left, + int bottom, + int right, + int top) +{ + defwFunc = DEFW_COMPONENT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + if (defwState != DEFW_COMPONENT) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + HALO %d %d %d %d ", left, bottom, right, top); + defwLines++; + return DEFW_OK; +} + +// 5.7 +int +defwComponentHaloSoft(int left, + int bottom, + int right, + int top) +{ + defwFunc = DEFW_COMPONENT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defVersionNum < 5.7) + return DEFW_WRONG_VERSION; + if (defwState != DEFW_COMPONENT) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + HALO SOFT %d %d %d %d ", left, bottom, + right, top); + defwLines++; + return DEFW_OK; +} + +// 5.7 +int +defwComponentRouteHalo(int haloDist, + const char *minLayer, + const char *maxLayer) +{ + defwFunc = DEFW_COMPONENT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defVersionNum < 5.7) + return DEFW_WRONG_VERSION; + if (defwState != DEFW_COMPONENT) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + ROUTEHALO %d %s %s ", haloDist, minLayer, + maxLayer); + defwLines++; + return DEFW_OK; +} + + +int +defwEndComponents() +{ + defwFunc = DEFW_COMPONENT_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_COMPONENT_START && + defwState != DEFW_COMPONENT) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + defwDidComponents = 1; + + if (defwState == DEFW_COMPONENT) + fprintf(defwFile, ";\nEND COMPONENTS\n\n"); + else + fprintf(defwFile, "END COMPONENTS\n\n"); + defwLines++; + + defwState = DEFW_COMPONENT_END; + return DEFW_OK; +} + + +int +defwStartPins(int count) +{ + defwFunc = DEFW_PIN_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidComponents) + return DEFW_BAD_ORDER; + if ((defwState >= DEFW_PIN_START) && (defwState <= DEFW_PIN_END)) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "PINS %d", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_PIN_START; + return DEFW_OK; +} + + +int +defwPin(const char *name, + const char *net, + int special, // optional 0-ignore 1-special + const char *direction, // optional + const char *use, // optional + const char *status, + int xo, + int yo, + int orient, // optional + const char *layer, + int xl, + int yl, + int xh, + int yh // optional + ) +{ + + defwFunc = DEFW_PIN; // Current function of writer + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN_START && defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + + defwCounter--; + + fprintf(defwFile, " ;\n - %s + NET %s", name, net); + + if (special) + fprintf(defwFile, "\n + SPECIAL"); + if (direction) { + if (strcmp(direction, "INPUT") && strcmp(direction, "OUTPUT") && + strcmp(direction, "INOUT") && strcmp(direction, "FEEDTHRU")) + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + DIRECTION %s", direction); + } + if (use) { + if (strcmp(use, "SIGNAL") && strcmp(use, "POWER") && + strcmp(use, "GROUND") && strcmp(use, "CLOCK") && + strcmp(use, "TIEOFF") && strcmp(use, "ANALOG") && + strcmp(use, "SCAN") && strcmp(use, "RESET")) + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + USE %s", use); + } + if (status) { + if (strcmp(status, "FIXED") && strcmp(status, "PLACED") && + strcmp(status, "COVER")) + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + %s ( %d %d ) %s", status, xo, yo, + defwOrient(orient)); + } + // In 5.6, user should use defPinLayer to write out layer construct + if (layer) { + fprintf(defwFile, "\n + LAYER %s ( %d %d ) ( %d %d )", + layer, xl, yl, xh, yh); + } + + defwLines++; + + defwState = DEFW_PIN; + return DEFW_OK; +} + + +int +defwPinStr(const char *name, + const char *net, + int special, // optional 0-ignore 1-special + const char *direction, // optional + const char *use, // optional + const char *status, + int xo, + int yo, + const char *orient, // optional + const char *layer, + int xl, + int yl, + int xh, + int yh // optional + ) +{ + + defwFunc = DEFW_PIN; // Current function of writer + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN_START && defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + + defwCounter--; + + fprintf(defwFile, " ;\n - %s + NET %s", name, net); + + if (special) + fprintf(defwFile, "\n + SPECIAL"); + if (direction) { + if (strcmp(direction, "INPUT") && strcmp(direction, "OUTPUT") && + strcmp(direction, "INOUT") && strcmp(direction, "FEEDTHRU")) + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + DIRECTION %s", direction); + } + if (use) { + if (strcmp(use, "SIGNAL") && strcmp(use, "POWER") && + strcmp(use, "GROUND") && strcmp(use, "CLOCK") && + strcmp(use, "TIEOFF") && strcmp(use, "ANALOG") && + strcmp(use, "SCAN") && strcmp(use, "RESET")) + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + USE %s", use); + } + if (status) { + if (strcmp(status, "FIXED") && strcmp(status, "PLACED") && + strcmp(status, "COVER")) + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + %s ( %d %d ) %s", status, xo, yo, + orient); + } + // In 5.6, user should use defPinLayer to write out layer construct + if (layer) { + fprintf(defwFile, "\n + LAYER %s ( %d %d ) ( %d %d )", + layer, xl, yl, xh, yh); + } + + defwLines++; + + defwState = DEFW_PIN; + return DEFW_OK; +} + +int +defwPinLayer(const char *layerName, + int spacing, + int designRuleWidth, + int xl, + int yl, + int xh, + int yh, + int mask) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + if (spacing && designRuleWidth) + return DEFW_BAD_DATA; // only one, spacing + // or designRuleWidth can be defined, not both + + fprintf(defwFile, "\n + LAYER %s ", layerName); + + if (mask) { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + fprintf(defwFile, "\n MASK %d", mask); + } + + if (spacing) + fprintf(defwFile, "\n SPACING %d", spacing); + else if (designRuleWidth) // can be both 0 + fprintf(defwFile, "\n DESIGNRULEWIDTH %d", designRuleWidth); + fprintf(defwFile, "\n ( %d %d ) ( %d %d )", xl, yl, xh, yh); + + defwState = DEFW_PIN; + defwLines++; + return DEFW_OK; +} + +int +defwPinPolygon(const char *layerName, + int spacing, + int designRuleWidth, + int num_polys, + double *xl, + double *yl, + int mask) +{ + int i; + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + if (spacing && designRuleWidth) + return DEFW_BAD_DATA; // only one, spacing + // or designRuleWidth can be defined, not both + + fprintf(defwFile, "\n + POLYGON %s ", layerName); + + if (mask) { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + fprintf(defwFile, "\n MASK %d", mask); + } + + if (spacing) + fprintf(defwFile, "\n SPACING %d", spacing); + else if (designRuleWidth) // can be both 0 + fprintf(defwFile, "\n DESIGNRULEWIDTH %d", designRuleWidth); + + printPointsNum = 0; + + for (i = 0; i < num_polys; i++) { + if ((i == 0) || ((i % 5) == 0)) { + printPoints(defwFile, *xl++, *yl++, "\n ", " "); + defwLines++; + } else + printPoints(defwFile, *xl++, *yl++, "", " "); + } + + defwState = DEFW_PIN; + defwLines++; + return DEFW_OK; +} + +// 5.7 +int +defwPinVia(const char *viaName, + int xl, + int yl, + int mask) +{ + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.7) + return DEFW_WRONG_VERSION; + + if (mask) { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + fprintf(defwFile, "\n + VIA %s MASK %d ( %d %d ) ", viaName, mask, xl, yl); + } else { + fprintf(defwFile, "\n + VIA %s ( %d %d ) ", viaName, xl, yl); + } + + defwLines++; + defwState = DEFW_PIN; + return DEFW_OK; +} + + +// 5.7 +int +defwPinPort() +{ + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.7) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + PORT"); + + defwLines++; + defwState = DEFW_PIN_PORT; + return DEFW_OK; +} + +// 5.7 +int +defwPinPortLayer(const char *layerName, + int spacing, + int designRuleWidth, + int xl, + int yl, + int xh, + int yh, + int mask) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN && defwState != DEFW_PIN_PORT) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.7) + return DEFW_WRONG_VERSION; + if (spacing && designRuleWidth) + return DEFW_BAD_DATA; // only one, spacing + // or designRuleWidth can be defined, not both + + fprintf(defwFile, "\n + LAYER %s ", layerName); + + if (mask) { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + fprintf(defwFile, "\n MASK %d", mask); + } + + if (spacing) + fprintf(defwFile, "\n SPACING %d", spacing); + else if (designRuleWidth) // can be both 0 + fprintf(defwFile, "\n DESIGNRULEWIDTH %d", designRuleWidth); + + fprintf(defwFile, "\n ( %d %d ) ( %d %d )", xl, yl, xh, yh); + + defwState = DEFW_PIN; + defwLines++; + return DEFW_OK; +} + +// 5.7 +int +defwPinPortPolygon(const char *layerName, + int spacing, + int designRuleWidth, + int num_polys, + double *xl, + double *yl, + int mask) +{ + int i; + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN && defwState != DEFW_PIN_PORT) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.7) + return DEFW_WRONG_VERSION; + if (spacing && designRuleWidth) + return DEFW_BAD_DATA; // only one, spacing + // or designRuleWidth can be defined, not both + + fprintf(defwFile, "\n + POLYGON %s ", layerName); + + if (mask) { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + fprintf(defwFile, "\n MASK %d", mask); + } + + if (spacing) + fprintf(defwFile, "\n SPACING %d", spacing); + else if (designRuleWidth) // can be both 0 + fprintf(defwFile, "\n DESIGNRULEWIDTH %d", designRuleWidth); + + printPointsNum = 0; + for (i = 0; i < num_polys; i++) { + if ((i == 0) || ((i % 5) == 0)) { + printPoints(defwFile, *xl++, *yl++, "\n ", " "); + defwLines++; + } else + printPoints(defwFile, *xl++, *yl++, "", " "); + } + + defwState = DEFW_PIN; + defwLines++; + return DEFW_OK; +} + +// 5.7 +int +defwPinPortVia(const char *viaName, + int xl, + int yl, + int mask) +{ + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN && defwState != DEFW_PIN_PORT) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.7) + return DEFW_WRONG_VERSION; + + if (mask) { + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + fprintf(defwFile, "\n + VIA %s MASK %d ( %d %d ) ", viaName, mask, xl, yl); + } else { + fprintf(defwFile, "\n + VIA %s ( %d %d ) ", viaName, xl, yl); + } + + defwLines++; + defwState = DEFW_PIN; + return DEFW_OK; +} + +// 5.7 +int +defwPinPortLocation(const char *status, + int statusX, + int statusY, + const char *orient) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN && defwState != DEFW_PIN_PORT) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.7) + return DEFW_WRONG_VERSION; + + if (strcmp(status, "FIXED") && strcmp(status, "PLACED") && + strcmp(status, "COVER")) + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + %s ( %d %d ) %s ", status, statusX, statusY, + orient); + defwState = DEFW_PIN; + defwLines++; + return DEFW_OK; +} + +int +defwPinNetExpr(const char *pinExpr) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + if (pinExpr && pinExpr != 0 && *pinExpr != 0) + fprintf(defwFile, "\n + NETEXPR \"%s\"", pinExpr); + + defwLines++; + return DEFW_OK; +} + + +int +defwPinSupplySensitivity(const char *pinName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + if (pinName && pinName != 0 && *pinName != 0) + fprintf(defwFile, "\n + SUPPLYSENSITIVITY %s", pinName); + + defwLines++; + return DEFW_OK; +} + + +int +defwPinGroundSensitivity(const char *pinName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + if (pinName && pinName != 0 && *pinName != 0) + fprintf(defwFile, "\n + GROUNDSENSITIVITY %s", pinName); + + defwLines++; + return DEFW_OK; +} + + +int +defwPinAntennaPinPartialMetalArea(int value, + const char *layerName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAPINPARTIALMETALAREA %d", value); + if (layerName) + fprintf(defwFile, " LAYER %s", layerName); + defwLines++; + + return DEFW_OK; +} + + +int +defwPinAntennaPinPartialMetalSideArea(int value, + const char *layerName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAPINPARTIALMETALSIDEAREA %d", value); + if (layerName) + fprintf(defwFile, " LAYER %s", layerName); + defwLines++; + + return DEFW_OK; +} + + +int +defwPinAntennaPinPartialCutArea(int value, + const char *layerName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAPINPARTIALCUTAREA %d", value); + if (layerName) + fprintf(defwFile, " LAYER %s", layerName); + defwLines++; + + return DEFW_OK; +} + + +int +defwPinAntennaModel(const char *oxide) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAMODEL %s", oxide); + defwLines++; + + return DEFW_OK; +} + + +int +defwPinAntennaPinDiffArea(int value, + const char *layerName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAPINDIFFAREA %d", value); + if (layerName) + fprintf(defwFile, " LAYER %s", layerName); + defwLines++; + + return DEFW_OK; +} + + +int +defwPinAntennaPinGateArea(int value, + const char *layerName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAPINGATEAREA %d", value); + if (layerName) + fprintf(defwFile, " LAYER %s", layerName); + defwLines++; + + return DEFW_OK; +} + + +int +defwPinAntennaPinMaxAreaCar(int value, + const char *layerName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAPINMAXAREACAR %d", value); + if (!layerName) + return DEFW_BAD_DATA; // layerName is required + + fprintf(defwFile, " LAYER %s", layerName); + defwLines++; + + return DEFW_OK; +} + + +int +defwPinAntennaPinMaxSideAreaCar(int value, + const char *layerName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAPINMAXSIDEAREACAR %d", value); + if (!layerName) + return DEFW_BAD_DATA; // layerName is required + + fprintf(defwFile, " LAYER %s", layerName); + defwLines++; + + return DEFW_OK; +} + + +int +defwPinAntennaPinMaxCutCar(int value, + const char *layerName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + ANTENNAPINMAXCUTCAR %d", value); + if (!layerName) + return DEFW_BAD_DATA; + + fprintf(defwFile, " LAYER %s", layerName); + defwLines++; + + return DEFW_OK; +} + + +int +defwEndPins() +{ + defwFunc = DEFW_PIN_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PIN_START && defwState != DEFW_PIN) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, " ;\nEND PINS\n\n"); + defwLines++; + + defwState = DEFW_PIN_END; + return DEFW_OK; +} + + +int +defwStartPinProperties(int count) +{ + defwFunc = DEFW_PINPROP_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_PINPROP_START) && (defwState <= DEFW_PINPROP_END)) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "PINPROPERTIES %d ;\n", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_PINPROP_START; + return DEFW_OK; +} + + +int +defwPinProperty(const char *name, + const char *pinName) +{ + + defwFunc = DEFW_PINPROP; // Current function of writer + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PINPROP_START && + defwState != DEFW_PINPROP) + return DEFW_BAD_ORDER; + + defwCounter--; + if ((!name || !*name) || (!pinName || !*pinName)) // required + return DEFW_BAD_DATA; + + if (defwState == DEFW_PINPROP) + fprintf(defwFile, ";\n"); + + fprintf(defwFile, " - %s %s ", name, pinName); + defwLines++; + + defwState = DEFW_PINPROP; + return DEFW_OK; +} + + +int +defwEndPinProperties() +{ + defwFunc = DEFW_PIN_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PINPROP_START && + defwState != DEFW_PINPROP) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + if (defwState == DEFW_PINPROP_START) + fprintf(defwFile, "END PINPROPERTIES\n\n"); + else + fprintf(defwFile, ";\nEND PINPROPERTIES\n\n"); + defwLines++; + + defwState = DEFW_PINPROP_END; + return DEFW_OK; +} + + +int +defwStartSpecialNets(int count) +{ + defwFunc = DEFW_SNET_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_SNET_START) && (defwState <= DEFW_SNET_END)) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "SPECIALNETS %d ;\n", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_SNET_START; + return DEFW_OK; +} + + +int +defwSpecialNetOptions() +{ + defwFunc = DEFW_SNET; // Current function of writer + if (defwState == DEFW_SNET) { + defwState = DEFW_SNET_OPTIONS; + return 1; + } + if (defwState == DEFW_SNET_OPTIONS) + return 1; + return 0; +} + + +int +defwSpecialNet(const char *name) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SNET_START && + defwState != DEFW_SNET_ENDNET) + return DEFW_BAD_ORDER; + defwState = DEFW_SNET; + + fprintf(defwFile, " - %s", name); + defwLineItemCounter = 0; + defwCounter--; + + return DEFW_OK; +} + + +int +defwSpecialNetConnection(const char *inst, + const char *pin, + int synthesized) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SNET) + return DEFW_BAD_ORDER; + + if ((++defwLineItemCounter & 3) == 0) { // since a net can have more than + fprintf(defwFile, "\n "); // one inst pin connection, don't print + defwLines++; // newline until the line is certain length + } + fprintf(defwFile, " ( %s %s ", inst, pin); + if (synthesized) + fprintf(defwFile, " + SYNTHESIZED "); + fprintf(defwFile, ") "); + return DEFW_OK; +} + + +int +defwSpecialNetFixedbump() +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + FIXEDBUMP"); + defwLines++; + return DEFW_OK; +} + +int +defwSpecialNetVoltage(double d) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + int v = (int)(d * 1000); + + fprintf(defwFile, "\n + VOLTAGE %d", v); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetSpacing(const char *layer, + int spacing, + double minwidth, + double maxwidth) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + SPACING %s %d", layer, spacing); + if (minwidth || maxwidth) + fprintf(defwFile, " RANGE %.11g %.11g", minwidth, maxwidth); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetWidth(const char *layer, + int w) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + WIDTH %s %d", layer, w); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetSource(const char *name) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + SOURCE %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetOriginal(const char *name) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + ORIGINAL %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetPattern(const char *name) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + PATTERN %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetUse(const char *name) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + if (strcmp(name, "SIGNAL") && strcmp(name, "POWER") && + strcmp(name, "GROUND") && strcmp(name, "CLOCK") && + strcmp(name, "TIEOFF") && strcmp(name, "ANALOG") && + strcmp(name, "SCAN") && strcmp(name, "RESET")) + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + USE %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetWeight(double d) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + WEIGHT %.11g", d); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetEstCap(double d) +{ + defwFunc = DEFW_SNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + ESTCAP %.11g", d); + defwLines++; + return DEFW_OK; +} + +int +defwSpecialNetPathStart(const char *typ) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions() && + (defwState != DEFW_SUBNET) && // path in subnet + (defwState != DEFW_PATH)) // NEW in the path, path hasn't end yet + return DEFW_BAD_ORDER; + + if (strcmp(typ, "NEW") && strcmp(typ, "FIXED") && strcmp(typ, "COVER") && + strcmp(typ, "ROUTED") && strcmp(typ, "SHIELD")) + return DEFW_BAD_DATA; + + defwSpNetShield = 0; + + // The second time around for a path on this net, we + // must start it with a new instead of a fixed... + if (strcmp(typ, "NEW") == 0) { + if (defwState != DEFW_PATH) + return DEFW_BAD_DATA; + fprintf(defwFile, " NEW"); + } else if (strcmp(typ, "SHIELD") == 0) { + fprintf(defwFile, "\n + %s", typ); + defwSpNetShield = 1; + } else + fprintf(defwFile, "\n + %s", typ); + + defwState = DEFW_PATH_START; + defwLineItemCounter = 0; + return DEFW_OK; +} + + +int +defwSpecialNetShieldNetName(const char *name) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH_START) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + if (defwSpNetShield) + fprintf(defwFile, " %s", name); + else + return DEFW_BAD_ORDER; + return DEFW_OK; +} + + +int +defwSpecialNetPathWidth(int w) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %d", w); + return DEFW_OK; +} + + +int +defwSpecialNetPathLayer(const char *name) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH_START) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %s", name); + defwState = DEFW_PATH; + return DEFW_OK; +} + + +int +defwSpecialNetPathStyle(int styleNum) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, "\n + STYLE %d", styleNum); + defwState = DEFW_PATH; + defwLineItemCounter = 0; + return DEFW_OK; +} + + +int +defwSpecialNetPathShape(const char *typ) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + + if (strcmp(typ, "RING") && strcmp(typ, "STRIPE") && strcmp(typ, "FOLLOWPIN") && + strcmp(typ, "IOWIRE") && strcmp(typ, "COREWIRE") && + strcmp(typ, "BLOCKWIRE") && strcmp(typ, "FILLWIRE") && + strcmp(typ, "BLOCKAGEWIRE") && strcmp(typ, "PADRING") && + strcmp(typ, "BLOCKRING") && strcmp(typ, "DRCFILL") && + strcmp(typ, "FILLWIREOPC")) // 5.7 + return DEFW_BAD_DATA; + + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, "\n + SHAPE %s", typ); + + defwState = DEFW_PATH; + defwLineItemCounter = 0; + return DEFW_OK; +} + +int +defwSpecialNetPathMask(int colorMask) +{ + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + defwFunc = DEFW_PATH; // Current function of writer + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " MASK %d", colorMask); + return DEFW_OK; +} + +int +defwSpecialNetPathPoint(int numPts, + double *pointx, + double *pointy) +{ + int i; + + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + + printPointsNum = 0; + for (i = 0; i < numPts; i++) { + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + + printPoints(defwFile, pointx[i], pointy[i], " ", ""); + } + return DEFW_OK; +} + + +int +defwSpecialNetPathVia(const char *name) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %s", name); + return DEFW_OK; +} + + +int +defwSpecialNetPathViaData(int numX, + int numY, + int stepX, + int stepY) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " DO %d BY %d STEP %d %d", numX, numY, stepX, stepY); + return DEFW_OK; +} + + +int +defwSpecialNetPathPointWithWireExt(int numPts, + double *pointx, + double *pointy, + double *optValue) +{ + int i; + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + for (i = 0; i < numPts; i++) { + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " ( %.11g %.11g ", pointx[i], pointy[i]); + if (optValue[i]) + fprintf(defwFile, "%.11g ", optValue[i]); + fprintf(defwFile, ")"); + } + return DEFW_OK; +} + + +int +defwSpecialNetPathEnd() +{ + defwFunc = DEFW_SNET_OPTIONS; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + defwState = DEFW_SNET_OPTIONS; + return DEFW_OK; +} + + +int +defwSpecialNetPolygon(const char* layerName, + int num_polys, + double* xl, double* yl) { + int i; + + defwFunc = DEFW_SNET_OPTIONS; // Current function of writer + if (! defwSpecialNetOptions() && + (defwState != DEFW_PATH)) // not inside a path + return DEFW_BAD_ORDER; + + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + POLYGON %s ", layerName); + + printPointsNum = 0; + for (i = 0; i < num_polys; i++) { + if ((i == 0) || ((i % 5) != 0)) + printPoints(defwFile, *xl++, *yl++, "", " "); + else { + printPoints(defwFile, *xl++, *yl++, "\n ", " "); + defwLines++; + } + } + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetRect(const char *layerName, + int xl, + int yl, + int xh, + int yh) +{ + defwFunc = DEFW_SNET_OPTIONS; // Current function of writer + if (!defwSpecialNetOptions() && + (defwState != DEFW_PATH)) // not inside a path + return DEFW_BAD_ORDER; + + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + RECT %s ( %d %d ) ( %d %d ) ", layerName, + xl, yl, xh, yh); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetVia(const char *layerName) +{ + defwFunc = DEFW_SNET_OPTIONS; // Current function of writer + if (!defwSpecialNetOptions() && + (defwState != DEFW_PATH)) // not inside a path + return DEFW_BAD_ORDER; + + if (defVersionNum < 5.8) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + VIA %s ", layerName); + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetViaWithOrient(const char *layerName, + int orient) +{ + defwFunc = DEFW_SNET_OPTIONS; // Current function of writer + if (!defwSpecialNetOptions() && + (defwState != DEFW_PATH)) // not inside a path + return DEFW_BAD_ORDER; + + if (defVersionNum < 5.8) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "\n + VIA %s %s", layerName, defwOrient(orient)); + + defwLines++; + return DEFW_OK; +} + + +int +defwSpecialNetViaPoints(int num_points, + double *xl, + double *yl) +{ + defwFunc = DEFW_SNET_OPTIONS; // Current function of writer + if (!defwSpecialNetOptions() && + (defwState != DEFW_PATH)) // not inside a path + return DEFW_BAD_ORDER; + + if (defVersionNum < 5.8) + return DEFW_WRONG_VERSION; + + + printPointsNum = 0; + for (int i = 0; i < num_points; i++) { + if ((i == 0) || ((i % 5) != 0)) + printPoints(defwFile, *xl++, *yl++, "", " "); + else { + printPoints(defwFile, *xl++, *yl++, "\n ", " "); + defwLines++; + } + } + + defwLines++; + return DEFW_OK; + +} + + +int +defwSpecialNetShieldStart(const char *name) +{ + defwFunc = DEFW_SHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + // The second time around for a shield on this net, we + // must start it with a new instead of the name ... + if (strcmp(name, "NEW") == 0) { + if (defwState != DEFW_SHIELD) + return DEFW_BAD_DATA; + fprintf(defwFile, " NEW"); + } else + fprintf(defwFile, "\n + SHIELD %s", name); + + defwState = DEFW_SHIELD; + defwLineItemCounter = 0; + return DEFW_OK; +} + + +int +defwSpecialNetShieldWidth(int w) +{ + defwFunc = DEFW_SHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SHIELD) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %d", w); + return DEFW_OK; +} + + +int +defwSpecialNetShieldLayer(const char *name) +{ + defwFunc = DEFW_SHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SHIELD) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %s", name); + return DEFW_OK; +} + + +int +defwSpecialNetShieldShape(const char *typ) +{ + defwFunc = DEFW_SHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SHIELD) + return DEFW_BAD_ORDER; + + if (strcmp(typ, "RING") && strcmp(typ, "STRIPE") && strcmp(typ, "FOLLOWPIN") && + strcmp(typ, "IOWIRE") && strcmp(typ, "COREWIRE") && + strcmp(typ, "BLOCKWIRE") && strcmp(typ, "FILLWIRE") && + strcmp(typ, "BLOCKAGEWIRE") && strcmp(typ, "DRCFILL")) + return DEFW_BAD_DATA; + + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, "\n + SHAPE %s", typ); + + defwState = DEFW_SHIELD; + defwLineItemCounter = 0; + return DEFW_OK; +} + + +int +defwSpecialNetShieldPoint(int numPts, + double *pointx, + double *pointy) +{ + int i; + + defwFunc = DEFW_SHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SHIELD) + return DEFW_BAD_ORDER; + + printPointsNum = 0; + for (i = 0; i < numPts; i++) { + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + printPoints(defwFile, pointx[i], pointy[i], " ", ""); + } + return DEFW_OK; +} + + +int +defwSpecialNetShieldVia(const char *name) +{ + defwFunc = DEFW_SHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SHIELD) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %s", name); + return DEFW_OK; +} + + +int +defwSpecialNetShieldViaData(int numX, + int numY, + int stepX, + int stepY) +{ + defwFunc = DEFW_SHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SHIELD) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " DO %d BY %d STEP %d %d", numX, numY, stepX, stepY); + return DEFW_OK; +} + +int +defwSpecialNetShieldEnd() +{ + defwFunc = DEFW_SNET_OPTIONS; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SHIELD) + return DEFW_BAD_ORDER; + defwState = DEFW_SNET_OPTIONS; + return DEFW_OK; +} + + +int +defwSpecialNetEndOneNet() +{ + defwFunc = DEFW_SNET_ENDNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwSpecialNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, " ;\n"); + defwLines++; + defwState = DEFW_SNET_ENDNET; + + return DEFW_OK; +} + + +int +defwEndSpecialNets() +{ + defwFunc = DEFW_SNET_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SNET_START && defwState != DEFW_SNET_OPTIONS && + defwState != DEFW_SNET_ENDNET && // last state is special net + defwState != DEFW_SNET) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, "END SPECIALNETS\n\n"); + defwLines++; + + defwState = DEFW_SNET_END; + return DEFW_OK; +} + + +int +defwStartNets(int count) +{ + defwFunc = DEFW_NET_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_NET_START) && (defwState <= DEFW_NET_END)) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "NETS %d ;\n", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_NET_START; + return DEFW_OK; +} + + +int +defwNetOptions() +{ + defwFunc = DEFW_NET; // Current function of writer + if (defwState == DEFW_NET) { + defwState = DEFW_NET_OPTIONS; + return 1; + } + if (defwState == DEFW_NET_OPTIONS) + return 1; + return 0; +} + + +int +defwNet(const char *name) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_NET_START && + defwState != DEFW_NET_ENDNET) + return DEFW_BAD_ORDER; + defwState = DEFW_NET; + + fprintf(defwFile, " - %s", name); + defwLineItemCounter = 0; + defwCounter--; + + return DEFW_OK; +} + + +int +defwNetConnection(const char *inst, + const char *pin, + int synthesized) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_NET) + return DEFW_BAD_ORDER; + + if ((++defwLineItemCounter & 3) == 0) { // since there is more than one + fprintf(defwFile, "\n"); // inst & pin connection, don't print newline + defwLines++; // until the line is certain length long + } + fprintf(defwFile, " ( %s %s", inst, pin); + if (synthesized) + fprintf(defwFile, " + SYNTHESIZED ) "); + else + fprintf(defwFile, " ) "); + return DEFW_OK; +} + + +int +defwNetMustjoinConnection(const char *inst, + const char *pin) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_NET_ENDNET) + return DEFW_BAD_ORDER; + + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " - MUSTJOIN ( %s %s )", inst, pin); + + defwState = DEFW_NET; + + defwCounter--; + + return DEFW_OK; +} + + +int +defwNetFixedbump() +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + FIXEDBUMP"); + defwLines++; + return DEFW_OK; +} + + +int +defwNetFrequency(double frequency) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + FREQUENCY %.11g", frequency); + defwLines++; + return DEFW_OK; +} + + +int +defwNetSource(const char *name) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + SOURCE %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwNetXtalk(int xtalk) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + XTALK %d", xtalk); + defwLines++; + return DEFW_OK; +} + + +int +defwNetVpin(const char *vpinName, + const char *layerName, + int layerXl, + int layerYl, + int layerXh, + int layerYh, + const char *status, + int statusX, + int statusY, + int orient) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + if ((vpinName == 0) || (*vpinName == 0)) // required + return DEFW_BAD_DATA; + + if (status && strcmp(status, "PLACED") && strcmp(status, "FIXED") && + strcmp(status, "COVER")) + return DEFW_BAD_DATA; + if (status && (orient == 1)) // require if status is set + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + VPIN %s", vpinName); + if (layerName) + fprintf(defwFile, " LAYER %s", layerName); + fprintf(defwFile, " ( %d %d ) ( %d %d )\n", layerXl, layerYl, layerXh, + layerYh); + defwLines++; + + if (status) + fprintf(defwFile, " %s ( %d %d ) %s", status, statusX, statusY, + defwOrient(orient)); + defwLines++; + return DEFW_OK; +} + + +int +defwNetVpinStr(const char *vpinName, + const char *layerName, + int layerXl, + int layerYl, + int layerXh, + int layerYh, + const char *status, + int statusX, + int statusY, + const char *orient) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + if (!vpinName || !*vpinName) // required + return DEFW_BAD_DATA; + + if (status && strcmp(status, "PLACED") && strcmp(status, "FIXED") && + strcmp(status, "COVER")) + return DEFW_BAD_DATA; + if (status && orient && *orient == '\0') // require if status is set + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + VPIN %s", vpinName); + if (layerName) + fprintf(defwFile, " LAYER %s", layerName); + fprintf(defwFile, " ( %d %d ) ( %d %d )\n", layerXl, layerYl, layerXh, + layerYh); + defwLines++; + + if (status) + fprintf(defwFile, " %s ( %d %d ) %s", status, statusX, statusY, + orient); + defwLines++; + return DEFW_OK; +} + + +int +defwNetOriginal(const char *name) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + ORIGINAL %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwNetPattern(const char *name) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + PATTERN %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwNetUse(const char *name) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + if (strcmp(name, "SIGNAL") && strcmp(name, "POWER") && + strcmp(name, "GROUND") && strcmp(name, "CLOCK") && + strcmp(name, "TIEOFF") && strcmp(name, "ANALOG") && + strcmp(name, "SCAN") && strcmp(name, "RESET")) + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + USE %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwNetNondefaultRule(const char *name) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState != DEFW_NET) && (defwState != DEFW_NET_OPTIONS) && + (defwState != DEFW_SUBNET)) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_SUBNET) + fprintf(defwFile, "\n NONDEFAULTRULE %s", name); + else + fprintf(defwFile, "\n + NONDEFAULTRULE %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwNetWeight(double d) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + WEIGHT %.11g", d); + defwLines++; + return DEFW_OK; +} + + +int +defwNetEstCap(double d) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + ESTCAP %.11g", d); + defwLines++; + return DEFW_OK; +} + + +int +defwNetShieldnet(const char *name) +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "\n + SHIELDNET %s", name); + defwLines++; + return DEFW_OK; +} + + +int +defwNetNoshieldStart(const char *name) +{ + defwFunc = DEFW_NOSHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + fprintf(defwFile, "\n + NOSHIELD %s", name); + + defwState = DEFW_NOSHIELD; + defwLineItemCounter = 0; + return DEFW_OK; +} + + +int +defwNetNoshieldPoint(int numPts, + const char **pointx, + const char **pointy) +{ + int i; + + defwFunc = DEFW_NOSHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_NOSHIELD) + return DEFW_BAD_ORDER; + for (i = 0; i < numPts; i++) { + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " ( %s %s )", pointx[i], pointy[i]); + } + return DEFW_OK; +} + + +int +defwNetNoshieldVia(const char *name) +{ + defwFunc = DEFW_NOSHIELD; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_NOSHIELD) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %s", name); + return DEFW_OK; +} + + +int +defwNetNoshieldEnd() +{ + defwFunc = DEFW_NET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_NOSHIELD) + return DEFW_BAD_ORDER; + defwState = DEFW_NET; + return DEFW_OK; +} + + +int +defwNetSubnetStart(const char *name) +{ + defwFunc = DEFW_SUBNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + if (!name || !*name) // required + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + SUBNET %s", name); + defwLines++; + defwState = DEFW_SUBNET; + defwLineItemCounter = 0; + return DEFW_OK; +} + + +int +defwNetSubnetPin(const char *compName, + const char *pinName) +{ + defwFunc = DEFW_SUBNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SUBNET) + return DEFW_BAD_ORDER; + if ((!compName || !*compName) || (!pinName || !*pinName)) // required + return DEFW_BAD_DATA; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " ( %s %s )", compName, pinName); + defwLines++; + return DEFW_OK; +} + + +int +defwNetSubnetEnd() +{ + defwFunc = DEFW_SUBNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState != DEFW_SUBNET) && // subnet does not have path + (defwState != DEFW_NET_OPTIONS)) // subnet has path and path just ended + return DEFW_BAD_ORDER; + defwState = DEFW_NET_OPTIONS; + return DEFW_OK; +} + + +int +defwNetPathStart(const char *typ) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions() && (defwState != DEFW_SUBNET) && // path in subnet + (defwState != DEFW_PATH)) // NEW in the path, path hasn't end yet + return DEFW_BAD_ORDER; + + if (strcmp(typ, "NEW") && strcmp(typ, "FIXED") && strcmp(typ, "COVER") && + strcmp(typ, "ROUTED") && strcmp(typ, "NOSHIELD")) + return DEFW_BAD_DATA; + + // The second time around for a path on this net, we + // must start it with a new instead of a fixed... + if (strcmp(typ, "NEW") == 0) { + if (defwState != DEFW_PATH) + return DEFW_BAD_DATA; + fprintf(defwFile, "\n NEW"); + } else { + if (defwState == DEFW_SUBNET) + fprintf(defwFile, "\n %s", typ); + else + fprintf(defwFile, "\n + %s", typ); + } + + defwState = DEFW_PATH_START; + defwLineItemCounter = 0; + return DEFW_OK; +} + + +int +defwNetPathWidth(int w) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %d", w); + return DEFW_OK; +} + + +int +defwNetPathLayer(const char *name, + int isTaper, + const char *ruleName) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH_START) + return DEFW_BAD_ORDER; + + // only one, either isTaper or ruleName can be set + if (isTaper && ruleName) + return DEFW_BAD_DATA; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " %s", name); + if (isTaper) + fprintf(defwFile, " TAPER"); + else if (ruleName) + fprintf(defwFile, " TAPERRULE %s", ruleName); + defwState = DEFW_PATH; + return DEFW_OK; +} + + +int +defwNetPathStyle(int styleNum) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + + fprintf(defwFile, " STYLE %d", styleNum); + return DEFW_OK; +} + + +int +defwNetPathPoint(int numPts, + double *pointx, + double *pointy) +{ + int i; + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + + printPointsNum = 0; + for (i = 0; i < numPts; i++) { + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + printPoints(defwFile, pointx[i], pointy[i], " ", ""); + } + return DEFW_OK; +} + +int +defwNetPathPointWithExt(int numPts, + double *pointx, + double *pointy, + double *optValue) +{ + int i; + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + for (i = 0; i < numPts; i++) { + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " ( %.11g %.11g %.11g )", pointx[i], pointy[i], optValue[i]); + } + return DEFW_OK; +} + +int +defwNetPathVia(const char *name) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + if (!name || !*name) // required + return DEFW_BAD_DATA; + + fprintf(defwFile, " %s", name); + return DEFW_OK; +} + + +int +defwNetPathViaWithOrient(const char *name, + int orient) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + + if (!name || !*name) // required + return DEFW_BAD_DATA; + + if (orient == -1) + fprintf(defwFile, " %s", name); + else if (orient >= 0 && orient <= 7) + fprintf(defwFile, " %s %s", name, defwOrient(orient)); + else + return DEFW_BAD_DATA; + return DEFW_OK; +} + + +int +defwNetPathViaWithOrientStr(const char *name, + const char *orient) +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + + if (!name || !*name) // required + return DEFW_BAD_DATA; + + if (!orient || !*orient) + fprintf(defwFile, " %s", name); + else + fprintf(defwFile, " %s %s", name, orient); + return DEFW_OK; +} + +int +defwNetPathMask(int colorMask) +{ + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " MASK %d", colorMask); + return DEFW_OK; +} + +int +defwNetPathRect(int deltaX1, + int deltaY1, + int deltaX2, + int deltaY2) +{ + if (defVersionNum < 5.8) + return DEFW_WRONG_VERSION; + + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + + fprintf(defwFile, " RECT ( %d %d %d %d )", deltaX1, deltaY1, deltaX2, deltaY2); + + return DEFW_OK; +} + +int +defwNetPathVirtual(int x, + int y) +{ + if (defVersionNum < 5.8) + return DEFW_WRONG_VERSION; + + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + if ((++defwLineItemCounter & 3) == 0) { + fprintf(defwFile, "\n "); + defwLines++; + } + fprintf(defwFile, " VIRTUAL ( %d %d )", x, y); + return DEFW_OK; +} + +int +defwNetPathEnd() +{ + defwFunc = DEFW_PATH; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_PATH) + return DEFW_BAD_ORDER; + defwState = DEFW_NET_OPTIONS; + return DEFW_OK; +} + + +int +defwNetEndOneNet() +{ + defwFunc = DEFW_NET_ENDNET; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwNetOptions()) + return DEFW_BAD_ORDER; + + fprintf(defwFile, " ;\n"); + defwLines++; + defwState = DEFW_NET_ENDNET; + + return DEFW_OK; +} + + +int +defwEndNets() +{ + defwFunc = DEFW_NET_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_NET_START && defwState != DEFW_NET_OPTIONS && + defwState != DEFW_NET && + defwState != DEFW_NET_ENDNET) // last state is a net + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, "END NETS\n\n"); + defwLines++; + + defwState = DEFW_NET_END; + defwDidNets = 1; + return DEFW_OK; +} + + +int +defwStartIOTimings(int count) +{ + defwObsoleteNum = DEFW_IOTIMING_START; + defwFunc = DEFW_IOTIMING_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidNets) + return DEFW_BAD_ORDER; + if ((defwState >= DEFW_IOTIMING_START) && + (defwState >= DEFW_IOTIMING_END)) + return DEFW_BAD_ORDER; + if (defVersionNum >= 5.4) + return DEFW_OBSOLETE; + + fprintf(defwFile, "IOTIMINGS %d ;\n", count); + defwLines++; + + defwCounter = count; + defwState = DEFW_IOTIMING_START; + return DEFW_OK; +} + + +int +defwIOTiming(const char *instance, + const char *pin) +{ + defwFunc = DEFW_IOTIMING; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_IOTIMING_START && + defwState != DEFW_IOTIMING) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_IOTIMING) + fprintf(defwFile, " ;\n"); // from previous statement + fprintf(defwFile, " - ( %s %s )\n", instance, pin); + defwLines++; + + defwCounter--; + defwState = DEFW_IOTIMING; + return DEFW_OK; +} + +int +defwIOTimingVariable(const char *riseFall, + int num1, + int num2) +{ + defwFunc = DEFW_IOTIMING; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_IOTIMING) + return DEFW_BAD_ORDER; + + if (strcmp(riseFall, "RISE") && + strcmp(riseFall, "FALL")) + return DEFW_BAD_DATA; + + fprintf(defwFile, " + %s VARIABLE %d %d\n", riseFall, + num1, num2); + defwLines++; + + return DEFW_OK; +} + +int +defwIOTimingSlewrate(const char *riseFall, + int num1, + int num2) +{ + defwFunc = DEFW_IOTIMING; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_IOTIMING) + return DEFW_BAD_ORDER; + + if (strcmp(riseFall, "RISE") && + strcmp(riseFall, "FALL")) + return DEFW_BAD_DATA; + + fprintf(defwFile, " + %s SLEWRATE %d %d\n", riseFall, + num1, num2); + defwLines++; + + return DEFW_OK; +} + +int +defwIOTimingDrivecell(const char *name, + const char *fromPin, + const char *toPin, + int numDrivers) +{ + defwFunc = DEFW_IOTIMING; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_IOTIMING) + return DEFW_BAD_ORDER; + if (!name || !*name) // required + return DEFW_BAD_DATA; + + fprintf(defwFile, " + DRIVECELL %s ", name); + if (fromPin && (!toPin || !*toPin)) // if have fromPin, toPin is required + return DEFW_BAD_DATA; + if (fromPin) + fprintf(defwFile, "FROMPIN %s ", fromPin); + if (toPin) + fprintf(defwFile, "TOPIN %s ", toPin); + if (numDrivers) + fprintf(defwFile, "PARALLEL %d ", numDrivers); + defwLines++; + + return DEFW_OK; +} + + +int +defwIOTimingCapacitance(double num) +{ + defwFunc = DEFW_IOTIMING; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_IOTIMING) + return DEFW_BAD_ORDER; + + fprintf(defwFile, " + CAPACITANCE %.11g", num); + defwLines++; + + return DEFW_OK; +} + +int +defwEndIOTimings() +{ + defwFunc = DEFW_IOTIMING_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_IOTIMING_START && defwState != DEFW_IOTIMING) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + if (defwState == DEFW_IOTIMING) + fprintf(defwFile, " ;\n"); // from previous statement + fprintf(defwFile, "END IOTIMINGS\n\n"); + defwLines++; + + defwState = DEFW_IOTIMING_END; + return DEFW_OK; +} + + +int +defwStartScanchains(int count) +{ + defwFunc = DEFW_SCANCHAIN_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidNets) + return DEFW_BAD_ORDER; + if ((defwState >= DEFW_SCANCHAIN_START) && + (defwState <= DEFW_SCANCHAIN_END)) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "SCANCHAINS %d ;\n", count); + defwLines++; + + defwState = DEFW_SCANCHAIN_START; + defwCounter = count; + return DEFW_OK; +} + +int +defwScanchain(const char *name) +{ + defwFunc = DEFW_SCANCHAIN; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_SCANCHAIN || defwState == DEFW_SCAN_FLOATING || + defwState == DEFW_SCAN_ORDERED) // put a ; for the previous scanchain + fprintf(defwFile, " ;\n"); + + fprintf(defwFile, " - %s", name); + defwLines++; + + defwCounter--; + defwState = DEFW_SCANCHAIN; + return DEFW_OK; +} + +int +defwScanchainCommonscanpins(const char *inst1, + const char *pin1, + const char *inst2, + const char *pin2) +{ + defwFunc = DEFW_SCANCHAIN; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (!inst1) { // if inst1 is null, nothing will be written + defwState = DEFW_SCANCHAIN; + return DEFW_OK; + } + + if (inst1 && strcmp(inst1, "IN") && strcmp(inst1, "OUT")) // IN | OUT + return DEFW_BAD_DATA; + + if (inst1 && !pin1) // pin1 can't be NULL if inst1 is not + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + COMMONSCANPINS ( %s %s )", inst1, pin1); + + if (inst2 && !pin2) // pin2 can't be NULL if inst2 is not + return DEFW_BAD_DATA; + + if (inst2 && strcmp(inst2, "IN") && strcmp(inst2, "OUT")) // IN | OUT + return DEFW_BAD_DATA; + + if (inst2) + fprintf(defwFile, " ( %s %s )", inst2, pin2); + + defwLines++; + + defwState = DEFW_SCANCHAIN; + return DEFW_OK; +} + +int +defwScanchainPartition(const char *name, + int maxBits) +{ + defwFunc = DEFW_SCANCHAIN; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (!name || !*name) // require + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + PARTITION %s", name); + if (maxBits != -1) + fprintf(defwFile, " MAXBITS %d", maxBits); + defwLines++; + + defwState = DEFW_SCANCHAIN; + return DEFW_OK; +} + +int +defwScanchainStart(const char *inst, + const char *pin) +{ + defwFunc = DEFW_SCANCHAIN; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (!inst || !*inst) // require + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + START %s", inst); + if (pin) + fprintf(defwFile, " %s", pin); + defwLines++; + + defwState = DEFW_SCANCHAIN; + return DEFW_OK; +} + + +int +defwScanchainStop(const char *inst, + const char *pin) +{ + defwFunc = DEFW_SCANCHAIN; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (!inst || !*inst) // require + return DEFW_BAD_DATA; + + fprintf(defwFile, "\n + STOP %s", inst); + if (pin) + fprintf(defwFile, " %s", pin); + defwLines++; + + defwState = DEFW_SCANCHAIN; + return DEFW_OK; +} + +int +defwScanchainFloating(const char *name, + const char *inst1, + const char *pin1, + const char *inst2, + const char *pin2) +{ + defwFunc = DEFW_SCAN_FLOATING; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (!name || !*name) // require + return DEFW_BAD_DATA; + if (inst1 && strcmp(inst1, "IN") && strcmp(inst1, "OUT")) + return DEFW_BAD_DATA; + if (inst2 && strcmp(inst2, "IN") && strcmp(inst2, "OUT")) + return DEFW_BAD_DATA; + if (inst1 && !pin1) + return DEFW_BAD_DATA; + if (inst2 && !pin2) + return DEFW_BAD_DATA; + + if (defwState != DEFW_SCAN_FLOATING) + fprintf(defwFile, "\n + FLOATING"); + else + fprintf(defwFile, "\n "); + + fprintf(defwFile, " %s", name); + if (inst1) + fprintf(defwFile, " ( %s %s )", inst1, pin1); + if (inst2) + fprintf(defwFile, " ( %s %s )", inst2, pin2); + + defwState = DEFW_SCAN_FLOATING; + defwLines++; + + return DEFW_OK; +} + +int +defwScanchainFloatingBits(const char *name, + const char *inst1, + const char *pin1, + const char *inst2, + const char *pin2, + int bits) +{ + defwFunc = DEFW_SCAN_FLOATING; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (!name || !*name) // require + return DEFW_BAD_DATA; + if (inst1 && strcmp(inst1, "IN") && strcmp(inst1, "OUT")) + return DEFW_BAD_DATA; + if (inst2 && strcmp(inst2, "IN") && strcmp(inst2, "OUT")) + return DEFW_BAD_DATA; + if (inst1 && !pin1) + return DEFW_BAD_DATA; + if (inst2 && !pin2) + return DEFW_BAD_DATA; + + if (defwState != DEFW_SCAN_FLOATING) + fprintf(defwFile, "\n + FLOATING"); + else + fprintf(defwFile, "\n "); + + fprintf(defwFile, " %s", name); + if (inst1) + fprintf(defwFile, " ( %s %s )", inst1, pin1); + if (inst2) + fprintf(defwFile, " ( %s %s )", inst2, pin2); + if (bits != -1) + fprintf(defwFile, " ( BITS %d )", bits); + + defwState = DEFW_SCAN_FLOATING; + defwLines++; + + return DEFW_OK; +} +int +defwScanchainOrdered(const char *name1, + const char *inst1, + const char *pin1, + const char *inst2, + const char *pin2, + const char *name2, + const char *inst3, + const char *pin3, + const char *inst4, + const char *pin4) +{ + defwFunc = DEFW_SCAN_ORDERED; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (!name1 || !*name1) // require + return DEFW_BAD_DATA; + if (inst1 && strcmp(inst1, "IN") && strcmp(inst1, "OUT")) + return DEFW_BAD_DATA; + if (inst2 && strcmp(inst2, "IN") && strcmp(inst2, "OUT")) + return DEFW_BAD_DATA; + if (inst1 && !pin1) + return DEFW_BAD_DATA; + if (inst2 && !pin2) + return DEFW_BAD_DATA; + if (defwState != DEFW_SCAN_ORDERED) { // 1st time require both name1 & name2 + if (!name2 || !*name2) // require + return DEFW_BAD_DATA; + if (inst3 && strcmp(inst3, "IN") && strcmp(inst3, "OUT")) + return DEFW_BAD_DATA; + if (inst4 && strcmp(inst4, "IN") && strcmp(inst4, "OUT")) + return DEFW_BAD_DATA; + if (inst3 && !pin3) + return DEFW_BAD_DATA; + if (inst4 && !pin4) + return DEFW_BAD_DATA; + } + + if (defwState != DEFW_SCAN_ORDERED) + fprintf(defwFile, "\n + ORDERED"); + else + fprintf(defwFile, "\n "); + + fprintf(defwFile, " %s", name1); + if (inst1) + fprintf(defwFile, " ( %s %s )", inst1, pin1); + if (inst2) + fprintf(defwFile, " ( %s %s )", inst2, pin2); + defwLines++; + + if (name2) { + fprintf(defwFile, "\n %s", name2); + if (inst3) + fprintf(defwFile, " ( %s %s )", inst3, pin3); + if (inst4) + fprintf(defwFile, " ( %s %s )", inst4, pin4); + defwLines++; + } + + defwState = DEFW_SCAN_ORDERED; + + return DEFW_OK; +} + +int +defwScanchainOrderedBits(const char *name1, + const char *inst1, + const char *pin1, + const char *inst2, + const char *pin2, + int bits1, + const char *name2, + const char *inst3, + const char *pin3, + const char *inst4, + const char *pin4, + int bits2) +{ + defwFunc = DEFW_SCAN_ORDERED; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCANCHAIN && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCAN_ORDERED) + return DEFW_BAD_ORDER; + + if (!name1 || !*name1) // require + return DEFW_BAD_DATA; + if (inst1 && strcmp(inst1, "IN") && strcmp(inst1, "OUT")) + return DEFW_BAD_DATA; + if (inst2 && strcmp(inst2, "IN") && strcmp(inst2, "OUT")) + return DEFW_BAD_DATA; + if (inst1 && !pin1) + return DEFW_BAD_DATA; + if (inst2 && !pin2) + return DEFW_BAD_DATA; + if (defwState != DEFW_SCAN_ORDERED) { // 1st time require both name1 & name2 + if (!name2 || !*name2) // require + return DEFW_BAD_DATA; + if (inst3 && strcmp(inst3, "IN") && strcmp(inst3, "OUT")) + return DEFW_BAD_DATA; + if (inst4 && strcmp(inst4, "IN") && strcmp(inst4, "OUT")) + return DEFW_BAD_DATA; + if (inst3 && !pin3) + return DEFW_BAD_DATA; + if (inst4 && !pin4) + return DEFW_BAD_DATA; + } + + if (defwState != DEFW_SCAN_ORDERED) + fprintf(defwFile, "\n + ORDERED"); + else + fprintf(defwFile, "\n "); + + fprintf(defwFile, " %s", name1); + if (inst1) + fprintf(defwFile, " ( %s %s )", inst1, pin1); + if (inst2) + fprintf(defwFile, " ( %s %s )", inst2, pin2); + if (bits1 != -1) + fprintf(defwFile, " ( BITS %d )", bits1); + defwLines++; + + if (name2) { + fprintf(defwFile, "\n %s", name2); + if (inst3) + fprintf(defwFile, " ( %s %s )", inst3, pin3); + if (inst4) + fprintf(defwFile, " ( %s %s )", inst4, pin4); + if (bits2 != -1) + fprintf(defwFile, " ( BITS %d )", bits2); + defwLines++; + } + + defwState = DEFW_SCAN_ORDERED; + + return DEFW_OK; +} + +int +defwEndScanchain() +{ + defwFunc = DEFW_SCANCHAIN_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SCANCHAIN_START && defwState != DEFW_SCAN_ORDERED && + defwState != DEFW_SCAN_FLOATING && defwState != DEFW_SCANCHAIN) + return DEFW_BAD_ORDER; + + if (defwState != DEFW_SCANCHAIN_START) // from previous statement + fprintf(defwFile, " ;\n"); + + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, "END SCANCHAINS\n\n"); + defwLines++; + + defwState = DEFW_SCANCHAIN_END; + return DEFW_OK; +} + +int +defwStartConstraints(int count) +{ + defwObsoleteNum = DEFW_FPC_START; + defwFunc = DEFW_FPC_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_FPC_START) && (defwState <= DEFW_FPC_END)) + return DEFW_BAD_ORDER; + if (defVersionNum >= 5.4) + return DEFW_OBSOLETE; + + fprintf(defwFile, "CONSTRAINTS %d ;\n", count); + defwLines++; + + defwState = DEFW_FPC_START; + defwCounter = count; + return DEFW_OK; +} + +int +defwConstraintOperand() +{ + defwFunc = DEFW_FPC_OPER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_START && defwState != DEFW_FPC) + return DEFW_BAD_ORDER; + + fprintf(defwFile, " -"); + defwCounter--; + defwFPC = 0; + defwState = DEFW_FPC_OPER; + return DEFW_OK; +} + +int +defwConstraintOperandNet(const char *netName) +{ + defwFunc = DEFW_FPC_OPER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_OPER && defwState != DEFW_FPC_OPER_SUM) + return DEFW_BAD_ORDER; // net can be within SUM + + if (!netName || !*netName) // require + return DEFW_BAD_DATA; + if (defwFPC > 0) + fprintf(defwFile, " ,"); + if (defwState == DEFW_FPC_OPER_SUM) + defwFPC++; + fprintf(defwFile, " NET %s", netName); + return DEFW_OK; +} + +int +defwConstraintOperandPath(const char *comp1, + const char *fromPin, + const char *comp2, + const char *toPin) +{ + defwFunc = DEFW_FPC_OPER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_OPER && defwState != DEFW_FPC_OPER_SUM) + return DEFW_BAD_ORDER; // path can be within SUM + + if ((comp1 == 0) || (*comp1 == 0) || (fromPin == 0) || (*fromPin == 0) || + (comp2 == 0) || (*comp2 == 0) || (toPin == 0) || (*toPin == 0)) // require + return DEFW_BAD_DATA; + if (defwFPC > 0) + fprintf(defwFile, " ,"); + if (defwState == DEFW_FPC_OPER_SUM) + defwFPC++; + fprintf(defwFile, " PATH %s %s %s %s", comp1, fromPin, comp2, toPin); + return DEFW_OK; +} + +int +defwConstraintOperandSum() +{ + defwFunc = DEFW_FPC_OPER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_OPER && defwState != DEFW_FPC_OPER_SUM) + return DEFW_BAD_ORDER; // sum can be within SUM + + fprintf(defwFile, " SUM ("); + defwState = DEFW_FPC_OPER_SUM; + defwFPC = 0; + return DEFW_OK; +} + +int +defwConstraintOperandSumEnd() +{ + defwFunc = DEFW_FPC_OPER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_OPER_SUM) + return DEFW_BAD_ORDER; + fprintf(defwFile, " )"); + defwState = DEFW_FPC_OPER; + defwFPC = 0; + return DEFW_OK; +} + +int +defwConstraintOperandTime(const char *timeType, + int time) +{ + defwFunc = DEFW_FPC_OPER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_OPER) + return DEFW_BAD_ORDER; + if (timeType && strcmp(timeType, "RISEMAX") && strcmp(timeType, "FALLMAX") && + strcmp(timeType, "RISEMIN") && strcmp(timeType, "FALLMIN")) + return DEFW_BAD_DATA; + fprintf(defwFile, " + %s %d", timeType, time); + return DEFW_OK; +} + +int +defwConstraintOperandEnd() +{ + defwFunc = DEFW_FPC_OPER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_OPER) + return DEFW_BAD_ORDER; + fprintf(defwFile, " ;\n"); + defwState = DEFW_FPC; + return DEFW_OK; +} + +int +defwConstraintWiredlogic(const char *netName, + int distance) +{ + defwFunc = DEFW_FPC; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_START && defwState != DEFW_FPC) + return DEFW_BAD_ORDER; + + if (!netName || !*netName) // require + return DEFW_BAD_DATA; + fprintf(defwFile, " - WIREDLOGIC %s MAXDIST %d ;\n", netName, distance); + defwCounter--; + defwState = DEFW_FPC; + defwLines++; + return DEFW_OK; +} + +int +defwEndConstraints() +{ + defwFunc = DEFW_FPC_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FPC_START && defwState != DEFW_FPC) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, "END CONSTRAINTS\n\n"); + defwLines++; + + defwState = DEFW_FPC_END; + return DEFW_OK; +} + +int +defwStartGroups(int count) +{ + defwFunc = DEFW_GROUP_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_GROUP_START) && (defwState <= DEFW_GROUP_END)) + return DEFW_BAD_ORDER; + + fprintf(defwFile, "GROUPS %d ;\n", count); + defwLines++; + + defwState = DEFW_GROUP_START; + defwCounter = count; + return DEFW_OK; +} + +int +defwGroup(const char *groupName, + int numExpr, + const char **groupExpr) +{ + int i; + + defwFunc = DEFW_GROUP; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_GROUP_START && defwState != DEFW_GROUP) + return DEFW_BAD_ORDER; + + if ((groupName == 0) || (*groupName == 0) || (groupExpr == 0) || + (*groupExpr == 0)) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_GROUP) + fprintf(defwFile, " ;\n"); // add ; for the previous group + fprintf(defwFile, " - %s", groupName); + if (numExpr) { + for (i = 0; i < numExpr; i++) + fprintf(defwFile, " %s", groupExpr[i]); + } + defwCounter--; + defwLines++; + defwState = DEFW_GROUP; + return DEFW_OK; +} + + +int +defwGroupSoft(const char *type1, + double value1, + const char *type2, + double value2, + const char *type3, + double value3) +{ + defwFunc = DEFW_GROUP; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_GROUP) + return DEFW_BAD_ORDER; + + if (type1 && strcmp(type1, "MAXHALFPERIMETER") && strcmp(type1, "MAXX") && + strcmp(type1, "MAXY")) + return DEFW_BAD_DATA; + if (type2 && strcmp(type2, "MAXHALFPERIMETER") && strcmp(type2, "MAXX") && + strcmp(type2, "MAXY")) + return DEFW_BAD_DATA; + if (type3 && strcmp(type3, "MAXHALFPERIMETER") && strcmp(type3, "MAXX") && + strcmp(type3, "MAXY")) + return DEFW_BAD_DATA; + if (type1) + fprintf(defwFile, "\n + SOFT %s %.11g", type1, value1); + if (type2) + fprintf(defwFile, " %s %.11g", type2, value2); + if (type3) + fprintf(defwFile, " %s %.11g", type3, value3); + defwLines++; + return DEFW_OK; +} + +int +defwGroupRegion(int xl, + int yl, + int xh, + int yh, + const char *regionName) +{ + defwFunc = DEFW_GROUP; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_GROUP) + return DEFW_BAD_ORDER; + + if ((xl || yl || xh || yh) && (regionName)) // ether pts or regionName + return DEFW_BAD_DATA; + + if (regionName) + fprintf(defwFile, "\n + REGION %s", regionName); + else + fprintf(defwFile, "\n + REGION ( %d %d ) ( %d %d )", + xl, yl, xh, yh); + defwLines++; + return DEFW_OK; +} + +int +defwEndGroups() +{ + defwFunc = DEFW_GROUP_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_GROUP_START && defwState != DEFW_GROUP) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + if (defwState != DEFW_GROUP_START) + fprintf(defwFile, " ;\n"); + + fprintf(defwFile, "END GROUPS\n\n"); + defwLines++; + + defwState = DEFW_GROUP_END; + return DEFW_OK; +} + + +int +defwStartBlockages(int count) +{ + defwFunc = DEFW_BLOCKAGE_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_BLOCKAGE_START) && (defwState <= DEFW_BLOCKAGE_END)) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "BLOCKAGES %d ;\n", count); + defwLines++; + + defwState = DEFW_BLOCKAGE_START; + defwCounter = count; + return DEFW_OK; +} + +int +defwBlockagesLayer(const char *layerName) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_PLACE) + || (defwState == DEFW_BLOCKAGE_LAYER))) + return DEFW_BAD_ORDER; + + if (!layerName || !*layerName) // require + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + + fprintf(defwFile, " - LAYER %s", layerName); + fprintf(defwFile, "\n"); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + defwBlockageHasSD = 0; + defwBlockageHasSF = 0; + return DEFW_OK; +} + +int +defwBlockagesLayerSlots() +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if (defwBlockageHasSF) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " + SLOTS\n"); + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + defwBlockageHasSF = 1; + return DEFW_OK; +} + +int +defwBlockagesLayerFills() +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if (defwBlockageHasSF) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + + fprintf(defwFile, " + FILLS\n"); + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + defwBlockageHasSF = 1; + return DEFW_OK; +} + +int +defwBlockagesLayerComponent(const char *compName) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if ((compName == 0) || (*compName == 0)) // require + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " + COMPONENT %s\n", compName); + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +int +defwBlockagesLayerPushdown() +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + + fprintf(defwFile, " + PUSHDOWN\n"); + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +// 5.7 +int +defwBlockagesLayerExceptpgnet() +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + + fprintf(defwFile, " + EXCEPTPGNET\n"); + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +int +defwBlockagesLayerSpacing(int minSpacing) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + if (defwBlockageHasSD) // Either spacing or designrulewidth has defined + return DEFW_BAD_DATA; + + fprintf(defwFile, " + SPACING %d\n", minSpacing); + defwLines++; + defwBlockageHasSD = 1; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +int +defwBlockagesLayerDesignRuleWidth(int effectiveWidth) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + if (defwBlockageHasSD) // Either spacing or designrulewidth has defined + return DEFW_BAD_DATA; + + fprintf(defwFile, " + DESIGNRULEWIDTH %d\n", effectiveWidth); + defwLines++; + defwBlockageHasSD = 1; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +int +defwBlockagesLayerMask(int colorMask) +{ + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + defwFunc = DEFW_BLOCKAGE_MASK; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " + MASK %d", colorMask); + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +//To be removed, replaced by defwBlockagesLayer +int +defwBlockageLayer(const char *layerName, + const char *compName) +{ // optional(NULL) + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define component or layer slots or fills + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_PLACE) + || (defwState == DEFW_BLOCKAGE_LAYER))) + return DEFW_BAD_DATA; + + if (!layerName || !*layerName) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - LAYER %s ", layerName); + if (compName && *compName != 0) // optional + fprintf(defwFile, "+ COMPONENT %s ", compName); + fprintf(defwFile, "\n"); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + defwBlockageHasSD = 0; + return DEFW_OK; +} + +//To be removed, replaced by defwBlockagesLayerSlots +int +defwBlockageLayerSlots(const char *layerName) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define component or layer or layer fills + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_PLACE) + || (defwState == DEFW_BLOCKAGE_LAYER))) + return DEFW_BAD_DATA; + + if (!layerName || !*layerName) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - LAYER %s + SLOTS\n", layerName); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + defwBlockageHasSD = 0; + return DEFW_OK; +} + +//To be removed, replaced by defwBlockagesLayerFills +int +defwBlockageLayerFills(const char *layerName) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define component or layer or layer slots + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_PLACE) + || (defwState == DEFW_BLOCKAGE_LAYER))) + return DEFW_BAD_DATA; + + if (!layerName || !*layerName) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - LAYER %s + FILLS\n", layerName); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + defwBlockageHasSD = 0; + return DEFW_OK; +} + +//To be removed, replaced by defwBlockagesLayerPushdown +int +defwBlockageLayerPushdown(const char *layerName) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define component or layer or layer slots + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_PLACE) + || (defwState == DEFW_BLOCKAGE_LAYER))) + return DEFW_BAD_DATA; + + if ((layerName == 0) || (*layerName == 0)) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - LAYER %s + PUSHDOWN\n", layerName); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + defwBlockageHasSD = 0; + return DEFW_OK; +} + +//To be removed, replaced by defwBlockagesLayerExceptpgnet +int +defwBlockageLayerExceptpgnet(const char *layerName) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define component or layer or layer slots + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_PLACE) + || (defwState == DEFW_BLOCKAGE_LAYER))) + return DEFW_BAD_DATA; + + if ((layerName == 0) || (*layerName == 0)) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - LAYER %s + EXCEPTPGNET\n", layerName); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + defwBlockageHasSD = 0; + return DEFW_OK; +} + +//To be removed, replaced by defwBlockagesLayerSpacing +int +defwBlockageSpacing(int minSpacing) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // Checked if defwBlockageDesignRuleWidth has already called + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_DATA; + if (defwBlockageHasSD) // Either spacing or designrulewidth has defined + return DEFW_BAD_DATA; + + fprintf(defwFile, " + SPACING %d\n", minSpacing); + defwLines++; + defwBlockageHasSD = 1; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +//To be removed, replaced by defwBlockagesLayerDesignRuleWidth +int +defwBlockageDesignRuleWidth(int effectiveWidth) +{ + defwFunc = DEFW_BLOCKAGE_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // Checked if defwBlockageDesignRuleWidth has already called + if ((defwState != DEFW_BLOCKAGE_LAYER) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_DATA; + if (defwBlockageHasSD) // Either spacing or designrulewidth has defined + return DEFW_BAD_DATA; + + fprintf(defwFile, " + DESIGNRULEWIDTH %d\n", effectiveWidth); + defwLines++; + defwBlockageHasSD = 1; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +int +defwBlockagesPlacement() +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_LAYER) + || (defwState == DEFW_BLOCKAGE_PLACE))) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + + fprintf(defwFile, " - PLACEMENT\n"); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + defwBlockageHasSP = 0; + return DEFW_OK; +} + + +int +defwBlockagesPlacementComponent(const char *compName) +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_PLACE) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if ((compName == 0) || (*compName == 0)) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " + COMPONENT %s\n", compName); + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + return DEFW_OK; +} + + +int +defwBlockagesPlacementPushdown() +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_PLACE) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " + PUSHDOWN\n"); + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + return DEFW_OK; +} + +// 5.7 +int +defwBlockagesPlacementSoft() +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_PLACE) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if (defwBlockageHasSP) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " + SOFT\n"); + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + defwBlockageHasSP = 1; + return DEFW_OK; +} + +// 5.7 +int +defwBlockagesPlacementPartial(double maxDensity) +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + + if ((defwState != DEFW_BLOCKAGE_PLACE) && (defwState != DEFW_BLOCKAGE_RECT)) + return DEFW_BAD_ORDER; + + if (defwBlockageHasSP) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " + PARTIAL %.11g\n", maxDensity); + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + defwBlockageHasSP = 1; + return DEFW_OK; +} + +int +defwBlockagesRect(int xl, + int yl, + int xh, + int yh) +{ + defwFunc = DEFW_BLOCKAGE_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_PLACE && defwState != DEFW_BLOCKAGE_LAYER && + defwState != DEFW_BLOCKAGE_RECT) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " RECT ( %d %d ) ( %d %d )", xl, yl, xh, yh); + defwLines++; + defwState = DEFW_BLOCKAGE_RECT; + return DEFW_OK; +} + + +int +defwBlockagesPolygon(int num_polys, + int *xl, + int *yl) +{ + int i; + + defwFunc = DEFW_BLOCKAGE_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_LAYER && defwState != DEFW_BLOCKAGE_RECT) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " POLYGON "); + for (i = 0; i < num_polys; i++) { + if ((i == 0) || ((i % 5) != 0)) + fprintf(defwFile, "( %d %d ) ", *xl++, *yl++); + else { + fprintf(defwFile, "\n ( %d %d ) ", *xl++, *yl++); + defwLines++; + } + } + defwLines++; + defwState = DEFW_BLOCKAGE_RECT; // use rect flag. It works the same for poly + return DEFW_OK; +} + +// To be removed. Will replace by defwBlcokagesPlacement +// bug fix: submitted by Craig Files (cfiles@ftc.agilent.com) +int +defwBlockagePlacement() +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_LAYER) + || (defwState == DEFW_BLOCKAGE_PLACE))) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - PLACEMENT\n"); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + return DEFW_OK; +} + +// To be removed. Will replace by defwBlcokagesPlacementComponent +int +defwBlockagePlacementComponent(const char *compName) +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_LAYER) + || (defwState == DEFW_BLOCKAGE_PLACE))) + return DEFW_BAD_DATA; + + if ((compName == 0) || (*compName == 0)) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - PLACEMENT + COMPONENT %s\n", compName); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + return DEFW_OK; +} + +// To be removed. Will replace by defwBlcokagesPlacementPushdown +int +defwBlockagePlacementPushdown() +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_LAYER) + || (defwState == DEFW_BLOCKAGE_PLACE))) + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - PLACEMENT + PUSHDOWN\n"); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + return DEFW_OK; +} + +// To be removed. Will replace by defwBlcokagesPlacementSoft +int +defwBlockagePlacementSoft() +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_LAYER) + || (defwState == DEFW_BLOCKAGE_PLACE))) + return DEFW_BAD_DATA; + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - PLACEMENT + SOFT\n"); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + return DEFW_OK; +} + +// To be removed. Will replace by defwBlcokagesPlacementPartial +int +defwBlockagePlacementPartial(double maxDensity) +{ + defwFunc = DEFW_BLOCKAGE_PLACE; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_START && ((defwState == DEFW_BLOCKAGE_LAYER) + || (defwState == DEFW_BLOCKAGE_PLACE))) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - PLACEMENT + PARTIAL %.11g\n", maxDensity); + defwCounter--; + defwLines++; + defwState = DEFW_BLOCKAGE_PLACE; + return DEFW_OK; +} + +// To be removed. Will replace by defwBlockagesLayerMask +int +defwBlockageMask(int colorMask) +{ + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + defwFunc = DEFW_BLOCKAGE_MASK; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_PLACE && defwState != DEFW_BLOCKAGE_LAYER && + defwState != DEFW_BLOCKAGE_RECT) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " + MASK %d", colorMask); + defwLines++; + defwState = DEFW_BLOCKAGE_LAYER; + return DEFW_OK; +} + +// Tobe removed. Will be replaced by defwBlockagesRect. +int +defwBlockageRect(int xl, + int yl, + int xh, + int yh) +{ + defwFunc = DEFW_BLOCKAGE_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_PLACE && defwState != DEFW_BLOCKAGE_LAYER && + defwState != DEFW_BLOCKAGE_RECT && defwState != DEFW_BLOCKAGE_MASK) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " RECT ( %d %d ) ( %d %d )", xl, yl, xh, yh); + defwLines++; + defwState = DEFW_BLOCKAGE_RECT; + return DEFW_OK; +} + +// Tobe removed. Will be replaced by defwBlockagesPolygon. +int +defwBlockagePolygon(int num_polys, + int *xl, + int *yl) +{ + int i; + + defwFunc = DEFW_BLOCKAGE_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_BLOCKAGE_LAYER && defwState != DEFW_BLOCKAGE_RECT + && defwState != DEFW_BLOCKAGE_MASK) + return DEFW_BAD_DATA; + + if (defwState == DEFW_BLOCKAGE_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " POLYGON "); + for (i = 0; i < num_polys; i++) { + if ((i == 0) || ((i % 5) != 0)) + fprintf(defwFile, "( %d %d ) ", *xl++, *yl++); + else { + fprintf(defwFile, "\n ( %d %d ) ", *xl++, *yl++); + defwLines++; + } + } + defwLines++; + defwState = DEFW_BLOCKAGE_RECT; // use rect flag. It works the same for poly + return DEFW_OK; +} + + +int +defwEndBlockages() +{ + defwFunc = DEFW_BLOCKAGE_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_BLOCKAGE_RECT) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, " ;\n"); + + fprintf(defwFile, "END BLOCKAGES\n\n"); + defwLines++; + + defwState = DEFW_BLOCKAGE_END; + return DEFW_OK; +} + + +int +defwStartSlots(int count) +{ + defwFunc = DEFW_SLOT_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_SLOT_START) && (defwState <= DEFW_SLOT_END)) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "SLOTS %d ;\n", count); + defwLines++; + + defwState = DEFW_SLOT_START; + defwCounter = count; + return DEFW_OK; +} + +int +defwSlotLayer(const char *layerName) +{ + defwFunc = DEFW_SLOT_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_SLOT_START && defwState == DEFW_SLOT_LAYER) + return DEFW_BAD_DATA; + + if (!layerName || !*layerName) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_SLOT_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - LAYER %s \n", layerName); + defwCounter--; + defwLines++; + defwState = DEFW_SLOT_LAYER; + return DEFW_OK; +} + + +int +defwSlotRect(int xl, + int yl, + int xh, + int yh) +{ + defwFunc = DEFW_SLOT_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_SLOT_LAYER && defwState != DEFW_SLOT_RECT) + return DEFW_BAD_DATA; + + if (defwState == DEFW_SLOT_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " RECT ( %d %d ) ( %d %d )", xl, yl, xh, yh); + defwLines++; + defwState = DEFW_SLOT_RECT; + return DEFW_OK; +} + + +int +defwSlotPolygon(int num_polys, + double *xl, + double *yl) +{ + int i; + + defwFunc = DEFW_SLOT_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_SLOT_LAYER && defwState != DEFW_SLOT_RECT) + return DEFW_BAD_DATA; + + if (defwState == DEFW_SLOT_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " POLYGON "); + + printPointsNum = 0; + for (i = 0; i < num_polys; i++) { + if ((i == 0) || ((i % 5) != 0)) + printPoints(defwFile, *xl++, *yl++, "", " "); + else { + printPoints(defwFile, *xl++, *yl++, "\n ", " "); + defwLines++; + } + } + defwLines++; + defwState = DEFW_SLOT_RECT; + return DEFW_OK; +} + + +int +defwEndSlots() +{ + defwFunc = DEFW_SLOT_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_SLOT_RECT) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, " ;\n"); + + fprintf(defwFile, "END SLOTS\n\n"); + defwLines++; + + defwState = DEFW_SLOT_END; + return DEFW_OK; +} + + +int +defwStartFills(int count) +{ + defwFunc = DEFW_FILL_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_FILL_START) && (defwState <= DEFW_FILL_END)) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.4) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "FILLS %d ;\n", count); + defwLines++; + + defwState = DEFW_FILL_START; + defwCounter = count; + return DEFW_OK; +} + +int +defwFillLayer(const char *layerName) +{ + defwFunc = DEFW_FILL_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_START && defwState == DEFW_FILL_LAYER) + return DEFW_BAD_DATA; + + if (!layerName || !*layerName) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_FILL_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - LAYER %s \n", layerName); + defwCounter--; + defwLines++; + defwState = DEFW_FILL_LAYER; + return DEFW_OK; +} + +int +defwFillLayerMask(int colorMask) +{ + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + defwFunc = DEFW_FILL_LAYERMASK; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_LAYER) + return DEFW_BAD_DATA; + + fprintf(defwFile, " + MASK %d", colorMask); + defwLines++; + defwState = DEFW_FILL_LAYERMASK; + return DEFW_OK; +} + + +// 5.71 +int +defwFillLayerOPC() +{ + defwFunc = DEFW_FILL_OPC; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_LAYER && defwState != DEFW_FILL_LAYERMASK) + return DEFW_BAD_DATA; + + fprintf(defwFile, " + OPC"); + defwLines++; + defwState = DEFW_FILL_OPC; + return DEFW_OK; +} + +int +defwFillRect(int xl, + int yl, + int xh, + int yh) +{ + defwFunc = DEFW_FILL_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_LAYER && defwState != DEFW_FILL_RECT && + defwState != DEFW_FILL_OPC && defwState != DEFW_FILL_LAYERMASK) + return DEFW_BAD_DATA; + + if (defwState == DEFW_FILL_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " RECT ( %d %d ) ( %d %d )", xl, yl, xh, yh); + defwLines++; + defwState = DEFW_FILL_RECT; + return DEFW_OK; +} + + +int +defwFillPolygon(int num_polys, + double *xl, + double *yl) +{ + int i; + + defwFunc = DEFW_FILL_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_LAYER && defwState != DEFW_FILL_RECT && + defwState != DEFW_FILL_OPC && defwState != DEFW_FILL_LAYERMASK) + return DEFW_BAD_DATA; + + if (defwState == DEFW_FILL_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " POLYGON "); + printPointsNum = 0; + for (i = 0; i < num_polys; i++) { + if ((i == 0) || ((i % 5) != 0)) + printPoints(defwFile, *xl++, *yl++, "", " "); + else { + printPoints(defwFile, *xl++, *yl++, "\n ", " "); + defwLines++; + } + } + defwLines++; + defwState = DEFW_FILL_RECT; + return DEFW_OK; +} + +// 5.7 +int +defwFillVia(const char *viaName) +{ + defwFunc = DEFW_FILL_LAYER; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_START && defwState == DEFW_FILL_LAYER) + return DEFW_BAD_DATA; + + if (!viaName || !*viaName) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_FILL_RECT) + fprintf(defwFile, " ;\n"); // end the previous rectangle + fprintf(defwFile, " - VIA %s \n", viaName); + defwCounter--; + defwLines++; + defwState = DEFW_FILL_VIA; + return DEFW_OK; +} + +int +defwFillViaMask(int maskColor) +{ + if (defVersionNum < 5.8) { + return DEFW_WRONG_VERSION; + } + + defwFunc = DEFW_FILL_VIAMASK; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_VIA) + return DEFW_BAD_DATA; + + fprintf(defwFile, " + MASK %d", maskColor); + defwLines++; + defwState = DEFW_FILL_VIAMASK; + return DEFW_OK; +} + + +// 5.71 +int +defwFillViaOPC() +{ + defwFunc = DEFW_FILL_OPC; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_VIA && defwState != DEFW_FILL_VIAMASK) + return DEFW_BAD_DATA; + + fprintf(defwFile, " + OPC"); + defwLines++; + defwState = DEFW_FILL_OPC; + return DEFW_OK; +} + + +int +defwFillPoints(int num_points, + double *xl, + double *yl) +{ + int i; + + defwFunc = DEFW_FILL_RECT; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_FILL_VIA && defwState != DEFW_FILL_RECT && + defwState != DEFW_FILL_OPC && defwState != DEFW_FILL_VIAMASK) + return DEFW_BAD_DATA; + + if (defwState == DEFW_FILL_RECT) + fprintf(defwFile, "\n"); // set a newline for the previous rectangle + + fprintf(defwFile, " "); + printPointsNum = 0; + + for (i = 0; i < num_points; i++) { + if ((i == 0) || ((i % 5) != 0)) + printPoints(defwFile, *xl++, *yl++, "", " "); + else { + printPoints(defwFile, *xl++, *yl++, "\n ", " "); + defwLines++; + } + } + + defwLines++; + defwState = DEFW_FILL_RECT; + return DEFW_OK; +} + + +int +defwEndFills() +{ + defwFunc = DEFW_FILL_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_FILL_RECT && defwState != DEFW_FILL_OPC) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, " ;\n"); + + fprintf(defwFile, "END FILLS\n\n"); + defwLines++; + + defwState = DEFW_FILL_END; + return DEFW_OK; +} + + +int +defwStartNonDefaultRules(int count) +{ + defwFunc = DEFW_NDR_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_NDR_START) && (defwState <= DEFW_NDR_END)) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "NONDEFAULTRULES %d ;\n", count); + defwLines++; + + defwState = DEFW_NDR_START; + defwCounter = count; + return DEFW_OK; +} + +int +defwNonDefaultRule(const char *ruleName, + int hardSpacing) +{ + defwFunc = DEFW_NDR; + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_NDR_START && defwState != DEFW_NDR) + return DEFW_BAD_ORDER; + + if (!ruleName || !*ruleName) // require + return DEFW_BAD_DATA; + if (defwState == DEFW_NDR) + fprintf(defwFile, ";\n"); + fprintf(defwFile, " - %s", ruleName); + if (hardSpacing) + fprintf(defwFile, "\n + HARDSPACING"); + defwCounter--; + defwLines++; + defwState = DEFW_NDR; + return DEFW_OK; +} + + +int +defwNonDefaultRuleLayer(const char *layerName, + int width, + int diagWidth, + int spacing, + int wireExt) +{ + defwFunc = DEFW_NDR; + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_NDR) + return DEFW_BAD_ORDER; + + if (!layerName || !*layerName) // require + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + LAYER %s ", layerName); + fprintf(defwFile, " WIDTH %d ", width); + if (diagWidth) + fprintf(defwFile, " DIAGWIDTH %d ", diagWidth); + if (spacing) + fprintf(defwFile, " SPACING %d ", spacing); + if (wireExt) + fprintf(defwFile, " WIREEXT %d ", wireExt); + defwLines++; + defwState = DEFW_NDR; + return DEFW_OK; +} + +int +defwNonDefaultRuleVia(const char *viaName) +{ + defwFunc = DEFW_NDR; + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_NDR) + return DEFW_BAD_ORDER; + + if (!viaName || !*viaName) // require + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + VIA %s ", viaName); + defwLines++; + defwState = DEFW_NDR; + return DEFW_OK; +} + +int +defwNonDefaultRuleViaRule(const char *viaRuleName) +{ + defwFunc = DEFW_NDR; + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_NDR) + return DEFW_BAD_ORDER; + + if ((viaRuleName == 0) || (*viaRuleName == 0)) // require + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + VIARULE %s ", viaRuleName); + defwLines++; + defwState = DEFW_NDR; + return DEFW_OK; +} + +int +defwNonDefaultRuleMinCuts(const char *cutLayerName, + int numCuts) +{ + defwFunc = DEFW_NDR; + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_NDR) + return DEFW_BAD_ORDER; + + if ((cutLayerName == 0) || (*cutLayerName == 0)) // require + return DEFW_BAD_DATA; + fprintf(defwFile, "\n + MINCUTS %s %d ", cutLayerName, numCuts); + defwLines++; + defwState = DEFW_NDR; + return DEFW_OK; +} + +int +defwEndNonDefaultRules() +{ + defwFunc = DEFW_NDR_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_NDR) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, ";\nEND NONDEFAULTRULES\n\n"); + defwLines++; + + defwState = DEFW_NDR_END; + return DEFW_OK; +} + + +int +defwStartStyles(int count) +{ + defwFunc = DEFW_STYLES_START; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if ((defwState >= DEFW_STYLES_START) && (defwState <= DEFW_STYLES_END)) + return DEFW_BAD_ORDER; + if (defVersionNum < 5.6) + return DEFW_WRONG_VERSION; + + fprintf(defwFile, "STYLES %d ;\n", count); + defwLines++; + + defwState = DEFW_STYLES_START; + defwCounter = count; + return DEFW_OK; +} + +int +defwStyles(int styleNums, + int num_points, + double *xp, + double *yp) +{ + int i; + + defwFunc = DEFW_STYLES; + if (!defwFile) + return DEFW_UNINITIALIZED; + // May be user already define layer + if (defwState != DEFW_STYLES_START && defwState != DEFW_STYLES) + return DEFW_BAD_ORDER; + + if (styleNums < 0) // require + return DEFW_BAD_DATA; + fprintf(defwFile, " - STYLE %d ", styleNums); + + printPointsNum = 0; + for (i = 0; i < num_points; i++) { + if ((i == 0) || ((i % 5) != 0)) + printPoints(defwFile, *xp++, *yp++, "", " "); + else { + printPoints(defwFile, *xp++, *yp++, "\n ", " "); + defwLines++; + } + } + + defwCounter--; + defwLines++; + fprintf(defwFile, ";\n"); + defwState = DEFW_STYLES; + return DEFW_OK; +} + +int +defwEndStyles() +{ + defwFunc = DEFW_STYLES_END; // Current function of writer + if (!defwFile) + return DEFW_UNINITIALIZED; + if (defwState != DEFW_STYLES) + return DEFW_BAD_ORDER; + if (defwCounter > 0) + return DEFW_BAD_DATA; + else if (defwCounter < 0) + return DEFW_TOO_MANY_STMS; + + fprintf(defwFile, "END STYLES\n\n"); + defwLines++; + + defwState = DEFW_STYLES_END; + return DEFW_OK; +} + + +int +defwStartBeginext(const char *name) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState == DEFW_BEGINEXT_START || + defwState == DEFW_BEGINEXT) + return DEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return DEFW_BAD_DATA; + fprintf(defwFile, "BEGINEXT \"%s\"\n", name); + + defwState = DEFW_BEGINEXT_START; + defwLines++; + return DEFW_OK; +} + +int +defwBeginextCreator(const char *creatorName) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState != DEFW_BEGINEXT_START && + defwState != DEFW_BEGINEXT) + return DEFW_BAD_ORDER; + if (!creatorName || creatorName == 0 || *creatorName == 0) + return DEFW_BAD_DATA; + fprintf(defwFile, " CREATOR \"%s\"\n", creatorName); + + defwState = DEFW_BEGINEXT; + defwLines++; + return DEFW_OK; +} + + +int +defwBeginextDate() +{ + time_t todayTime; + char *rettime; + + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState != DEFW_BEGINEXT_START && + defwState != DEFW_BEGINEXT) + return DEFW_BAD_ORDER; + + todayTime = time(NULL); // time in UTC + rettime = ctime(&todayTime); // convert to string + rettime[strlen(rettime) - 1] = '\0'; // replace \n with \0 + fprintf(defwFile, " DATE \"%s\"", rettime); + + defwState = DEFW_BEGINEXT; + defwLines++; + return DEFW_OK; +} + + +int +defwBeginextRevision(int vers1, + int vers2) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState != DEFW_BEGINEXT_START && + defwState != DEFW_BEGINEXT) + return DEFW_BAD_ORDER; + fprintf(defwFile, "\n REVISION %d.%d", vers1, vers2); + + defwState = DEFW_BEGINEXT; + defwLines++; + return DEFW_OK; +} + + +int +defwBeginextSyntax(const char *title, + const char *string) +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState != DEFW_BEGINEXT_START && + defwState != DEFW_BEGINEXT) + return DEFW_BAD_ORDER; + fprintf(defwFile, "\n - %s %s", title, string); + + defwState = DEFW_BEGINEXT; + defwLines++; + return DEFW_OK; +} + + +int +defwEndBeginext() +{ + if (!defwFile) + return DEFW_UNINITIALIZED; + if (!defwDidInit) + return DEFW_BAD_ORDER; + if (defwState != DEFW_BEGINEXT_START && + defwState != DEFW_BEGINEXT) + return DEFW_BAD_ORDER; + fprintf(defwFile, ";\nENDEXT\n\n"); + + defwState = DEFW_BEGINEXT_END; + defwLines++; + return DEFW_OK; +} + + +int +defwEnd() +{ + defwFunc = DEFW_END; // Current function of writer + if (!defwFile) + return 1; + + if (defwState == DEFW_ROW) + fprintf(defwFile, ";\n\n"); // add the ; and \n for the previous row. + + fprintf(defwFile, "END DESIGN\n\n"); + defwLines++; + //defwFile = 0; + defwState = DEFW_DONE; + return DEFW_OK; +} + + +int +defwCurrentLineNumber() +{ + return defwLines; +} + + +void +defwPrintError(int status) +{ + switch (status) { + case DEFW_OK: + fprintf(defwFile, "No Error.\n"); + break; + case DEFW_UNINITIALIZED: + printf("Need to call defwInit first.\n"); + break; + case DEFW_BAD_ORDER: + fprintf(defwFile, "%s - Incorrect order of data.\n", + defwStateStr[defwFunc]); + break; + case DEFW_BAD_DATA: + fprintf(defwFile, "%s - Invalid data.\n", + defwStateStr[defwFunc]); + break; + case DEFW_ALREADY_DEFINED: + fprintf(defwFile, "%s - Section is allowed to define only once.\n", + defwStateStr[defwFunc]); + break; + case DEFW_WRONG_VERSION: + fprintf(defwFile, "%s - Version number is set before 5.6, but 5.6 API is used.\n", + defwStateStr[defwFunc]); + break; + case DEFW_OBSOLETE: + fprintf(defwFile, "%s - is no longer valid in 5.6.\n", + defwStateStr[defwObsoleteNum]); + break; + } + return; +} + + +void +defwAddComment(const char *comment) +{ + if (comment) + fprintf(defwFile, "# %s\n", comment); + return; +} + + +void +defwAddIndent() +{ + fprintf(defwFile, " "); + return; +} + + +//*************************** +// Questions: +// - Is only one row rule allowed +// - Is only one tracks rule allowed +// - In the die area is a zero area allowed? overlaps? +// - What type of checking is needed for the rows and tracks do loop? +// - Can you have a default prop with a number AND a range? +// - What is the pin properties section mentioned in the 5.1 spec? +// ***************************** + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defwWriter.hpp b/lefdef/src/def/def/defwWriter.hpp new file mode 100644 index 00000000..13af43a9 --- /dev/null +++ b/lefdef/src/def/def/defwWriter.hpp @@ -0,0 +1,1752 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef DEFW_WRITER_H +#define DEFW_WRITER_H + +#include +#include + +#include "defiKRDefs.hpp" +#include "defiDefs.hpp" +#include "defiUser.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/* Return codes for writing functions: */ +#define DEFW_OK 0 +#define DEFW_UNINITIALIZED 1 +#define DEFW_BAD_ORDER 2 +#define DEFW_BAD_DATA 3 +#define DEFW_ALREADY_DEFINED 4 +#define DEFW_WRONG_VERSION 5 +#define DEFW_OBSOLETE 6 +#define DEFW_TOO_MANY_STMS 7 // the number defined at the beginning of the + // section is smaller than the actual number + // of statements defined in that section + +/* orient + 0 = N + 1 = W + 2 = S + 3 = E + 4 = FN + 5 = FW + 6 = FS + 7 = FE +*/ + +/* This routine will write a new line */ +extern int defwNewLine(); + +/* The DEF writer initialization. Must be called first. + * Either this routine or defwInitCbk should be call only. + * Can't call both routines in one program. + * This routine is for user who does not want to use the callback machanism. + * Returns 0 if successful. */ +extern int defwInit ( FILE* f, int vers1, int version2, + const char* caseSensitive, /* NAMESCASESENSITIVE */ + const char* dividerChar, /* DIVIDERCHAR */ + const char* busBitChars, /* BUSBITCHARS */ + const char* designName, /* DESIGN */ + const char* technology, /* optional(NULL) - TECHNOLOGY */ + const char* array, /* optional(NULL) - ARRAYNAME */ + const char* floorplan, /* optional(NULL) - FLOORPLAN */ + double units ); /* optional (set to -1 to ignore) */ + +/* The DEF writer initialization. Must be called first. + * Either this routine or defwInit should be call only. + * Can't call both routines in one program. + * This routine is for user who choose to use the callback machanism. + * If user uses the callback for the writer, they need to provide + * callbacks for Version, NamesCaseSensitive, BusBitChars and DividerChar. + * These sections are required by the def. If any of these callbacks + * are missing, defaults will be used. + * Returns 0 if successful. */ +extern int defwInitCbk (FILE* f); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwVersion (int vers1, int vers2); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwCaseSensitive ( const char* caseSensitive ); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwBusBitChars ( const char* busBitChars ); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwDividerChar ( const char* dividerChar ); + +/* This routine must be called after the defwInit. + * This routine is required. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwDesignName ( const char* name ); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwTechnology ( const char* technology ); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwArray ( const char* array ); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwFloorplan ( const char* floorplan ); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwUnits ( int units ); + +/* This routine must be called after the defwInit. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called 0 to many times. */ +extern int defwHistory ( const char* string ); + +/* This routine must be called after the history routines (if any). + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwStartPropDef ( void ); + +/* This routine must be called after defwStartPropDef. + * This routine can be called multiple times. + * It adds integer property definition to the statement. + * Returns 0 if successfull. + * The objType can be LIBRARY or VIA or MACRO or PIN. */ +extern int defwIntPropDef( + const char* objType, // LIBRARY | LAYER | VIA | VIARULE | + // NONDEFAULTRULE | MACRO | PIN + const char* propName, + double leftRange, /* optional(0) - RANGE */ + double rightRange, /* optional(0) */ + int propValue); /* optional(NULL) */ + +/* This routine must be called after defwStartPropDef. + * This routine can be called multiple times. + * It adds real property definition to the statement. + * Returns 0 if successfull. + * The objType can be LIBRARY or VIA or MACRO or PIN. */ +extern int defwRealPropDef( + const char* objType, // LIBRARY | LAYER | VIA | VIARULE | + // NONDEFAULTRULE | MACRO | PIN + const char* propName, + double leftRange, /* optional(0) - RANGE */ + double rightRange, /* optional(0) */ + double propValue); /* optional(NULL) */ + +/* This routine must be called after defwStartPropDef. + * This routine can be called multiple times. + * It adds string property definition to the statement. + * Returns 0 if successfull. + * The objType can be LIBRARY or VIA or MACRO or PIN. */ +extern int defwStringPropDef( + const char* objType, // LIBRARY | LAYER | VIA | VIARULE | + // NONDEFAULTRULE | MACRO | PIN + const char* propName, + double leftRange, /* optional(0) - RANGE */ + double rightRange, /* optional(0) */ + const char* propValue); /* optional(NULL) */ + +/* This routine must be called after all the properties have been + * added to the file. + * If you called defwPropertyDefinitions then this routine is NOT optional. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwEndPropDef ( void ); + +/* This routine can be called after defwRow, defwRegion, defwComponent, + * defwPin, defwSpecialNet, defwNet, and defwGroup + * This routine is optional, it adds string property to the statement. + * Returns 0 if successful. + * This routine can be called 0 to many times */ +extern int defwStringProperty(const char* propName, const char* propValue); + +/* This routine can be called after defwRow, defwRegion, defwComponent, + * defwPin, defwSpecialNet, defwNet, and defwGroup + * This routine is optional, it adds real property to the statement. + * Returns 0 if successful. + * This routine can be called 0 to many times */ +extern int defwRealProperty(const char* propName, double propValue); + +/* This routine can be called after defwRow, defwRegion, defwComponent, + * defwPin, defwSpecialNet, defwNet, and defwGroup + * This routine is optional, it adds int property to the statement. + * Returns 0 if successful. + * This routine can be called 0 to many times */ +extern int defwIntProperty(const char* propName, int propValue); + +/* This routine must be called after the property definitions (if any). + * This routine is optional. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwDieArea ( int xl, /* point1 - x */ + int yl, /* point1 - y */ + int xh, /* point2 - x */ + int yh ); /* point2 - y */ + +/* This routine must be called after the property definitions (if any). + * This routine is optional. + * This routine is the same as defwDieArea, but accept more than 2 points + * This is a 5.6 syntax + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwDieAreaList ( int num_points, /* number of points on list */ + int* xl, /* all the x points */ + int* yh); /* all the y points */ + +/* This routine must be called after the Die Area (if any). + * This routine is optional. + * Returns 0 if successful. + * The integer "orient" and operation of the do is explained in + * the documentation. + * In 5.6, the DO syntax is optional and the STEP syntax is optional in DO */ +extern int defwRow ( const char* rowName, const char* rowType, + int x_orig, int y_orig, int orient, + int do_count, /* optional (0) */ + int do_increment, /* optional (0) */ + int xstep, /* optional (0) */ + int ystep); /* optional (0) */ + +/* This routine must be called after the Die Area (if any). + * This routine is optional. + * Returns 0 if successful. + * This routine is the same as defwRow, excpet orient is a char* */ +extern int defwRowStr ( const char* rowName, const char* rowType, + int x_orig, int y_orig, const char* orient, + int do_count, /* optional (0) */ + int do_increment, /* optional (0) */ + int xstep, /* optional (0) */ + int ystep); /* optional (0) */ + +/* This routine must be called after the defwRow (if any). + * This routine is optional. + * Returns 0 if successful. + * The operation of the do is explained in the documentation. */ +extern int defwTracks ( const char* master, /* X | Y */ + int doStart, /* start */ + int doCount, /* numTracks */ + int doStep, /* space */ + int numLayers, /* number of layers */ + const char** layers, /* list of layers */ + int mask = 0, /* optional */ + int sameMask = 0); /* optional */ + +/* This routine must be called after the defwTracks (if any). + * This routine is optional. + * Returns 0 if successful. + * The operation of the do is explained in the documentation. */ +extern int defwGcellGrid ( const char* master, /* X | Y */ + int doStart, /* start */ + int doCount, /* numColumns | numRows */ + int doStep); /* space */ + +/* This routine must be called after the defwTracks (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the default capacitance section. All of the + * capacitances must follow. + * The count is the number of defwDefaultCap calls to follow. + * The routine can be called only once. + * This api is obsolete in 5.4. */ +extern int defwStartDefaultCap ( int count ); + +/* This routine is called once for each default cap. The calls must + * be preceeded by a call to defwStartDefaultCap and must be + * terminated by a call to defwEndDefaultCap. + * Returns 0 if successful. + * This api is obsolete in 5.4. */ +extern int defwDefaultCap ( int pins, /* MINPINS */ + double cap); /* WIRECAP */ + +/* This routine must be called after the defwDefaultCap calls (if any). + * Returns 0 if successful. + * If the count in StartDefaultCap is not the same as the number of + * calls to DefaultCap then DEFW_BAD_DATA will return returned. + * The routine can be called only once. + * This api is obsolete in 5.4. */ +extern int defwEndDefaultCap ( void ); + +/* This routine must be called after the defwDefaultCap calls (if any). + * The operation of the do is explained in the documentation. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. */ +extern int defwCanPlace(const char* master, /* sitename */ + int xOrig, + int yOrig, + int orient, /* 0 to 7 */ + int doCnt, /* numX */ + int doInc, /* numY */ + int xStep, /* spaceX */ + int yStep); /* spaceY */ + +/* This routine must be called after the defwDefaultCap calls (if any). + * The operation of the do is explained in the documentation. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. + * This routine is the same as defwCanPlace, except orient is a char* */ +extern int defwCanPlaceStr(const char* master, /* sitename */ + int xOrig, + int yOrig, + const char* orient, /* 0 to 7 */ + int doCnt, /* numX */ + int doInc, /* numY */ + int xStep, /* spaceX */ + int yStep); /* spaceY */ + +/* This routine must be called after the defwCanPlace calls (if any). + * The operation of the do is explained in the documentation. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. */ +extern int defwCannotOccupy(const char* master, /* sitename */ + int xOrig, + int yOrig, + int orient, /* 0 to 7 */ + int doCnt, /* numX */ + int doInc, /* numY */ + int xStep, /* spaceX */ + int yStep); /* spaceY */ + +/* This routine must be called after the defwCanPlace calls (if any). + * The operation of the do is explained in the documentation. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. + * This routine is the same as defwCannotOccupy, except orient is a char* */ +extern int defwCannotOccupyStr(const char* master, /* sitename */ + int xOrig, + int yOrig, + const char* orient, /* 0 to 7 */ + int doCnt, /* numX */ + int doInc, /* numY */ + int xStep, /* spaceX */ + int yStep); /* spaceY */ + +/* This routine must be called after defwCannotOccupy (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the via section. All of the vias must follow. + * The count is the number of defwVia calls to follow. + * The routine can be called only once. */ +extern int defwStartVias( int count ); + +/* These routines enter each via into the file. + * These routines must be called after the defwStartVias call. + * defwViaName should be called first, follow either by defwViaPattern or + * defwViaLayer. At the end of each via, defwOneViaEnd should be called + * These routines are for [- viaName [+ PATTERNNAME patternName + RECT layerName + * pt pt]...;]... + * Returns 0 if successful. + * The routines can be called many times. */ +extern int defwViaName(const char* name); + +extern int defwViaPattern(const char* patternName); + +/* This routine can be called multiple times. */ +/* mask is 5.8 syntax */ +extern int defwViaRect(const char* layerName, + int xl, /* xl from the RECT */ + int yl, /* yl from the RECT */ + int xh, /* xh from the RECT */ + int yh, /* yh from the RECT */ + int mask = 0); /* optional */ + +/* This is a 5.6 syntax + * This routine can be called multiple times. */ +/* mask is 5.8 syntax */ +extern int defwViaPolygon(const char* layerName, + int num_polys, + double* xl, + double* yl, + int mask = 0); + +/* These routine must be called after defwViaName. + * Either this routine or defwViaPattern can be called after each + * defwViaName is called. + * This is a 5.6 syntax + * Returns 0 if successful + * The routine can be called only once per defwViaName called. */ +extern int defwViaViarule(const char* viaRuleName, + double xCutSize, double yCutSize, + const char* botMetalLayer, const char* cutLayer, + const char* topMetalLayer, + double xCutSpacing, double yCutSpacing, + double xBotEnc, double yBotEnc, + double xTopEnc, double yTopEnc); + +/* This routine can call only after defwViaViarule. + * It can only be called once. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwViaViaruleRowCol(int numCutRows, int numCutCols); + +/* This routine can call only after defwViaViarule. + * It can only be called once. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwViaViaruleOrigin(int xOffset, int yOffset); + +/* This routine can call only after defwViaViarule. + * It can only be called once. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwViaViaruleOffset(int xBotOffset, int yBotOffset, + int xTopOffset, int yTopOffset); + +/* This routine can call only after defwViaViarule. + * It can only be called once. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwViaViarulePattern(const char* cutPattern); + +extern int defwOneViaEnd(); + +/* This routine must be called after the defwVia calls. + * Returns 0 if successful. + * If the count in StartVias is not the same as the number of + * calls to Via or ViaPattern then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +extern int defwEndVias( void ); + +/* This routine must be called after via section (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the region section. All of the regions must follow. + * The count is the number of defwRegion calls to follow. + * The routine can be called only once. */ +extern int defwStartRegions( int count ); + +/* This routine enter each region into the file. + * This routine must be called after the defwStartRegions call. + * Returns 0 if successful. + * The routine can be called many times. */ +extern int defwRegionName(const char* name); + +/* This routine enter the region point to the region name. + * This routine must be called after the defwRegionName call. + * Returns 0 if successful. + * The routine can be called many times. */ +extern int defwRegionPoints(int xl, int yl, int xh, int yh); + +/* This routine enter the region type, FENCE | GUIDE. + * This routine must be called after the defwRegionName call. + * This is a 5.4.1 syntax. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwRegionType(const char* type); /* FENCE | GUIDE */ + +/* This routine must be called after the defwRegion calls. + * Returns 0 if successful. + * If the count in StartRegions is not the same as the number of + * calls to Region or RegionPattern then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +extern int defwEndRegions( void ); + +/* This is a 5.8 syntax. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwComponentMaskShiftLayers(const char** layerNames, + int numLayerName); + +/* This routine must be called after the regions section (if any). + * This section of routines is NOT optional. + * Returns 0 if successful. + * The routine starts the components section. All of the components + * must follow. + * The count is the number of defwComponent calls to follow. + * The routine can be called only once. */ +extern int defwStartComponents( int count ); + +/* This routine enter each component into the file. + * This routine must be called after the defwStartComponents call. + * The optional fields will be ignored if they are set to zero + * (except for weight which must be set to -1.0). + * Returns 0 if successful. + * The routine can be called many times. */ +extern int defwComponent(const char* instance, /* compName */ + const char* master, /* modelName */ + int numNetName, // optional(0) - # netNames defined + + const char** netNames, /* optional(NULL) - list */ + const char* eeq, /* optional(NULL) - EEQMASTER */ + const char* genName, /* optional(NULL) - GENERATE */ + const char* genParemeters, /* optional(NULL) - parameters */ + const char* source, // optional(NULL) - NETLIST | DIST | + // USER | TIMING + int numForeign, // optional(0) - # foreigns, + // foreignx, foreigny & orients + const char** foreigns, /* optional(NULL) - list */ + int* foreignX, int* foreignY, /* optional(0) - list foreign pts */ + int* foreignOrients, /* optional(-1) - 0 to 7 */ + const char* status, // optional(NULL) - FIXED | COVER | + // PLACED | UNPLACED + int statusX, int statusY, /* optional(0) - status pt */ + int statusOrient, /* optional(-1) - 0 to 7 */ + double weight, /* optional(0) */ + const char* region, // optional(NULL) - either xl, yl, + // xh, yh or region + int xl, int yl, /* optional(0) - region pt1 */ + int xh, int yh); /* optional(0) - region pt2 */ + + +/* This routine enter each component into the file. + * This routine must be called after the defwStartComponents call. + * The optional fields will be ignored if they are set to zero + * (except for weight which must be set to -1.0). + * Returns 0 if successful. + * The routine can be called many times. + * This routine is the same as defwComponent, except orient is a char** */ +extern int defwComponentStr(const char* instance, /* compName */ + const char* master, /* modelName */ + int numNetName, // optional(0) - # netNames defined + // + const char** netNames, /* optional(NULL) - list */ + const char* eeq, /* optional(NULL) - EEQMASTER */ + const char* genName, /* optional(NULL) - GENERATE */ + const char* genParemeters, /* optional(NULL) - parameters */ + const char* source, // optional(NULL) - NETLIST | DIST | + // USER | TIMING + int numForeign, // optional(0) - # foreigns, + // foreignx, foreigny & orients + const char** foreigns, /* optional(NULL) - list */ + int* foreignX, int* foreignY, /* optional(0) - list foreign pts */ + const char** foreignOrients, /* optional(NULL) */ + const char* status, // optional(NULL) - FIXED | COVER | + // PLACED | UNPLACED + int statusX, int statusY, /* optional(0) - status pt */ + const char* statusOrient, /* optional(NULL) */ + double weight, /* optional(0) */ + const char* region, // optional(NULL) - either xl, yl, + // xh, yh or region + int xl, int yl, /* optional(0) - region pt1 */ + int xh, int yh); /* optional(0) - region pt2 */ + +/* This is a 5.8 syntax. + * Returns 0 if successful. + * The routine can be called only once. */ +extern int defwComponentMaskShift(int shiftLayerMasks); + +/* This routine must be called after either the defwComponent or + * defwComponentStr. + * This routine can only called once per component. + * Either this routine or defwComponentHaloSoft can be called, but not both + * This routine is optional. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwComponentHalo(int left, int bottom, int right, int top); + +/* This routine must be called after either the defwComponent or + * defwComponentStr. + * This routine can only called once per component. + * This routine is just like defwComponentHalo, except it writes the option SOFT + * Either this routine or defwComponentHalo can be called, but not both + * This routine is optional. + * This is a 5.7 syntax. + * Returns 0 if successful. */ +extern int defwComponentHaloSoft(int left, int bottom, int right, int top); + +/* This routine must be called after either the defwComponent or + * defwComponentStr. + * This routine can only called once per component. + * This routine is optional. + * This is a 5.7 syntax. + * Returns 0 if successful. */ +extern int defwComponentRouteHalo(int haloDist, const char* minLayer, + const char* maxLayer); + +/* This routine must be called after the defwComponent calls. + * Returns 0 if successful. + * If the count in StartComponents is not the same as the number of + * calls to Component then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +extern int defwEndComponents( void ); + +/* This routine must be called after the components section (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the pins section. All of the pins must follow. + * The count is the number of defwPin calls to follow. + * The routine can be called only once. */ +extern int defwStartPins( int count ); + +/* This routine enter each pin into the file. + * This routine must be called after the defwStartPins call. + * The optional fields will be ignored if they are set to zero. + * Returns 0 if successful. + * The routine can be called many times. + * NOTE: Use defwPinLayer to write out layer with SPACING or DESIGNRULEWIDTH */ +extern int defwPin(const char* name, /* pinName */ + const char* net, /* netName */ + int special, /* 0 - ignore, 1 - special */ + const char* direction, // optional(NULL) - INPUT | OUTPUT | + // INOUT | FEEDTHRU + const char* use, // optional(NULL) - SIGNAL | POWER | + // GROUND | CLOCK | TIEOFF | ANALOG + const char* status, // optional(NULL) - FIXED | PLACED | + // COVER + int statusX, int statusY, /* optional(0) - status point */ + int orient, /* optional(-1) - status orient */ + const char* layer, /* optional(NULL) - layerName */ + int xl, int yl, /* optional(0) - layer point1 */ + int xh, int yh); /* optional(0) - layer point2 */ + +/* This routine enter each pin into the file. + * This routine must be called after the defwStartPins call. + * The optional fields will be ignored if they are set to zero. + * Returns 0 if successful. + * The routine can be called many times. + * This routine is the same as defwPin, except orient is a char* + * NOTE: Use defwPinLayer to write out layer with SPACING or DESIGNRULEWIDTH */ +extern int defwPinStr(const char* name, /* pinName */ + const char* net, /* netName */ + int special, /* 0 - ignore, 1 - special */ + const char* direction, // optional(NULL) - INPUT | OUTPUT | + // INOUT | FEEDTHRU + const char* use, // optional(NULL) - SIGNAL | POWER | + // GROUND | CLOCK | TIEOFF | ANALOG + const char* status, // optional(NULL) - FIXED | PLACED | + // COVER + int statusX, int statusY, /* optional(0) - status point */ + const char* orient, /* optional(NULL) */ + const char* layer, /* optional(NULL) - layerName */ + int xl, int yl, /* optional(0) - layer point1 */ + int xh, int yh); /* optional(0) - layer point2 */ + +/* This routine should be called if the layer has either SPACING or + * DESIGNRULEWIDTH. If this routine is used and the pin has only one + * layer, the layer in defwPin or defwPinStr has to be null, otherwise + * the layer will be written out twice. + * This routine must be called after defwPin or defwPinStr. + * This is a 5.6 syntax. + * This routine is optional. + * Returns 0 if successful. + * This routine can be called multiple times within a pin. */ +extern int defwPinLayer(const char* layerName, + int spacing, /* optional(0) - SPACING & DESIGNRULEWIDTH */ + int designRuleWidth, /* are mutually exclusive */ + int xl, int yl, + int xh, int yh, + int mask = 0); + +/* This routine must be called after defwPin or defwPinStr. + * This routine is to write out layer with polygon. + * This is a 5.6 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +extern int defwPinPolygon(const char* layerName, + int spacing, /* optional(0) - SPACING & DESIGNRULEWIDTH */ + int designRuleWidth, /* are mutually exclusive */ + int num_polys, double* xl, double* yl, + int mask = 0); + +/* This routine must be called after defwPin or defwPinStr. + * This routine is to write out layer with via. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +extern int defwPinVia(const char* viaName, int xl, int yl, int mask = 0); + +/* This routine must be called after defwPin or defwPinStr. + * This routine is to write out pin with port. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +extern int defwPinPort(); + +/* This routine is called after defwPinPort. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * This routine can be called multiple times within a pin. */ +extern int defwPinPortLayer(const char* layerName, + int spacing, /* optional(0) - SPACING & DESIGNRULEWIDTH */ + int designRuleWidth, /* are mutually exclusive */ + int xl, int yl, + int xh, int yh, + int mask = 0); + +/* This routine must be called after defwPinPort. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +extern int defwPinPortPolygon(const char* layerName, + int spacing, /* optional(0) - SPACING & DESIGNRULEWIDTH */ + int designRuleWidth, /* are mutually exclusive */ + int num_polys, double* xl, double* yl, + int mask = 0); + +/* This routine must be called after defwPinPort. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called multiple times within a pin. */ +extern int defwPinPortVia(const char* viaName, int xl, int yl, int mask = 0); + +/* This routine must be called after defwPinPort. + * This is a 5.7 syntax. + * This routine is optional. + * Returns 0 if successful. + * The routine can be called many times. + * NOTE: Use defwPinLayer to write out layer with SPACING or DESIGNRULEWIDTH */ +extern int defwPinPortLocation( + const char* status, /* FIXED | PLACED | COVER */ + int statusX, int statusY, /* status point */ + const char* orient); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.6 syntax. + * The routine can be called only once per pin. */ +extern int defwPinNetExpr(const char* pinExpr); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.6 syntax. + * The routine can be called only once per pin. */ +extern int defwPinSupplySensitivity(const char* pinName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.6 syntax. + * The routine can be called only once per pin. */ +extern int defwPinGroundSensitivity(const char* pinName); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +extern int defwPinAntennaPinPartialMetalArea(int value, + const char* layerName); /* optional(NULL) */ + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +extern int defwPinAntennaPinPartialMetalSideArea(int value, + const char* layerName); /* optional(NULL) */ + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +extern int defwPinAntennaPinPartialCutArea(int value, + const char* layerName); /* optional(NULL) */ + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +extern int defwPinAntennaPinDiffArea(int value, + const char* layerName); /* optional(NULL) */ + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.5 syntax. + * The oxide can be either OXIDE1, OXIDE2, OXIDE3, or OXIDE4. + * Each oxide value can be called only once after defwPin. */ +extern int defwPinAntennaModel(const char* oxide); + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +extern int defwPinAntennaPinGateArea(int value, + const char* layerName); /* optional(NULL) */ + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +extern int defwPinAntennaPinMaxAreaCar(int value, + const char* layerName); /* optional(NULL) */ + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +extern int defwPinAntennaPinMaxSideAreaCar(int value, + const char* layerName); /* optional(NULL) */ + +/* This routine must be called after defwPin. + * Returns 0 if successful. + * This is a 5.4 syntax. + * The routine can be called multiple times. */ +extern int defwPinAntennaPinMaxCutCar(int value, + const char* layerName); /* optional(NULL) */ + +/* This routine must be called after the defwPin calls. + * Returns 0 if successful. + * If the count in StartPins is not the same as the number of + * calls to Pin then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +extern int defwEndPins( void ); + +/* This routine must be called after the pin section (if any). + * This section of routines is optional. + * Returns 0 if successful. + * The routine starts the pinproperties section. All of the pinproperties + * must follow. + * The count is the number of defwPinProp calls to follow. + * The routine can be called only once. */ +extern int defwStartPinProperties( int count ); + +/* This routine enter each pinproperty into the file. + * This routine must be called after the defwStartPinProperties call. + * The optional fields will be ignored if they are set to zero. + * Returns 0 if successful. + * The routine can be called many times. */ +extern int defwPinProperty(const char* name, /* compName | PIN */ + const char* pinName); /* pinName */ + +/* This routine must be called after the defwPinProperty calls. + * Returns 0 if successful. + * If the count in StartPins is not the same as the number of + * calls to Pin then DEFW_BAD_DATA will return returned. + * The routine can be called only once. */ +extern int defwEndPinProperties( void ); + +/* Routines to enter a special net or nets into the file. + * You must first call defwStartSpecialNets with the number of + * nets. This section is required, even if you do not have any nets. + * For each net you should call defwSpecialNet followed by + * one or more defwSpecialNetConnection calls. + * After the connections come the options. Options are + * NOT required. + * Each net is completed by calling defwSpecialNetEndOneNet(). + * The nets section is finished by calling defwEndNets(). */ +extern int defwStartSpecialNets(int count); + +/* This routine must be called after the defwStartSpecialNets it is for + * - netName */ +extern int defwSpecialNet(const char* name); /* netName */ + +/* This routine is for compNameRegExpr, pinName, and SYNTHESIZED */ +/* It can be called multiple times */ +extern int defwSpecialNetConnection(const char* inst, /* compNameRegExpr */ + const char* pin, /* pinName */ + int synthesized); /* 0 - ignore, 1 - SYNTHESIZED */ + +/* This routine is for + FIXEDBUMP + * This is a 5.4.1 syntax */ +extern int defwSpecialNetFixedbump(); + +/* This routine is for + VOLTAGE volts */ +extern int defwSpecialNetVoltage(double v); + +/* This routine is for + SPACING layerName spacing [RANGE minwidth maxwidth */ +extern int defwSpecialNetSpacing(const char* layer, /* layerName */ + int spacing, /* spacing */ + double minwidth, /* optional(0) - minwidth */ + double maxwidth); /* optional(0) - maxwidth */ + +/* This routine is for + WIDTH layerName width */ +extern int defwSpecialNetWidth(const char* layer, /* layerName */ + int width); /* width */ + +/* This routine is for + SOURCE {NETLIST | DIST | USER | TIMING} */ +extern int defwSpecialNetSource(const char* name); + +/* This routine is for + ORIGINAL netName */ +extern int defwSpecialNetOriginal(const char* name); /* netName */ + +/* This routine is for + PATTERN {STEINER | BALANCED | WIREDLOGIC | TRUNK} */ +extern int defwSpecialNetPattern(const char* name); + +/* This routine is for + USE {SIGNAL | POWER | GROUND | CLOCK | TIEOFF | + ANALOG | SCAN | RESET} */ +extern int defwSpecialNetUse(const char* name); + +/* This routine is for + WEIGHT weight */ +extern int defwSpecialNetWeight(double value); + +/* This routine is for + ESTCAP wireCapacitance */ +extern int defwSpecialNetEstCap(double value); + +/* Paths are a special type of option. A path must begin + * with a defwSpecialNetPathStart and end with a defwSpecialNetPathEnd(). + * The individual parts of the path can be entered in + * any order. */ +extern int defwSpecialNetPathStart(const char* typ); // ROUTED | FIXED | COVER | + // SHIELD | NEW +extern int defwSpecialNetShieldNetName(const char* name); /* shieldNetName */ + +extern int defwSpecialNetPathLayer(const char* name); /* layerName */ + +extern int defwSpecialNetPathWidth(int width); + +/* This routine is optional. + * This is a 5.6 syntax. */ +extern int defwSpecialNetPathStyle(int styleNum); + +extern int defwSpecialNetPathShape(const char* shapeType); // RING | STRIPE | + // FOLLOWPIN | IOWIRE | COREWIRE | BLOCKWIRE | FILLWIRE | BLOCKAGEWIRE + + +/* This routine is optional. + This is a 5.8 syntax. + * Returns 0 if successful. */ +extern int defwSpecialNetPathMask(int colorMask); + +/* x and y location of the path */ +extern int defwSpecialNetPathPoint(int numPts, /* number of connected points */ + double* pointx, /* point x list */ + double* pointy); /* point y list */ +extern int defwSpecialNetPathVia(const char* name); /* viaName */ + +/* This routine is called after defwSpecialNetPath + * This is a 5.4.1 syntax */ +extern int defwSpecialNetPathViaData(int numX, int numY, int stepX, int stepY); + +/* x and y location of the path */ +extern int defwSpecialNetPathPointWithWireExt( + int numPts, /* number of connected points */ + double* pointx, /* point x list */ + double* pointy, /* point y list */ + double* optValue); /* optional(NULL) value */ + +extern int defwSpecialNetPathEnd(); + +/* This is a 5.6 syntax + * This routine can be called multiple times. */ +extern int defwSpecialNetPolygon(const char* layerName, + int num_polys, double* xl, double* yl); + +/* This is a 5.6 syntax + * This routine can be called multiple times. */ +extern int defwSpecialNetRect(const char* layerName, + int xl, int yl, int xh, int yh); + +extern int defwSpecialNetVia(const char* layerName); + +extern int defwSpecialNetViaWithOrient(const char* layerName, int orient); + +extern int defwSpecialNetViaPoints(int num_points, double* xl, double* yl); + +/* This routine is called at the end of each net */ +extern int defwSpecialNetEndOneNet(); + +/* 5.3 for special net */ +/* Shields are a special type of option. A shield must begin + * with a defwSpecialNetShieldStart and end with a defwSpecialNetShieldEnd(). + * The individual parts of the shield can be entered in + * any order. */ +extern int defwSpecialNetShieldStart(const char* name); + +extern int defwSpecialNetShieldLayer(const char* name); /* layerName */ +extern int defwSpecialNetShieldWidth(int width); /* width */ +extern int defwSpecialNetShieldShape(const char* shapeType); // RING | STRIPE | + // FOLLOWPIN | IOWIRE | COREWIRE | BLOCKWIRE | FILLWIRE | BLOCKAGEWIRE + +/* x and y location of the path */ +extern int defwSpecialNetShieldPoint(int numPts, /* # of connected points */ + double* pointx, /* point x list */ + double* pointy); /* point y list */ +extern int defwSpecialNetShieldVia(const char* name); /* viaName */ + +/* A 5.4.1 syntax */ +extern int defwSpecialNetShieldViaData(int numX, int numY, int stepX, int stepY); +extern int defwSpecialNetShieldEnd(); +/* end 5.3 */ + +/* This routine is called at the end of the special net section */ +extern int defwEndSpecialNets(); + +/* Routines to enter a net or nets into the file. + * You must first call defwNets with the number of nets. + * This section is required, even if you do not have any nets. + * For each net you should call defwNet followed by one or + * more defwNetConnection calls. + * After the connections come the options. Options are + * NOT required. + * Each net is completed by calling defwNetEndOneNet(). + * The nets section is finished by calling defwEndNets(). */ +extern int defwStartNets(int count); + +/* This routine must be called after the defwStartNets, it is for - netName */ +extern int defwNet(const char* name); + +/* This routine is for { compName | PIN } pinName [+ SYNTHESIZED] */ +/* It can be called multiple times */ +extern int defwNetConnection(const char* inst, /* compName */ + const char* pin, /* pinName */ + int synthesized); /* 0 - ignore, 1 - SYNTHESIZED */ + +/* This routine is for MUSTJOIN, compName, pinName */ +extern int defwNetMustjoinConnection(const char* inst, /* compName */ + const char* pin); /* pinName */ + +/* This routine is for + VPIN vpinName [LAYER layerName pt pt + * [{ PLACED | FIXED | COVER } pt orient] */ +extern int defwNetVpin(const char* vpinName, + const char* layerName, /* optional(NULL) */ + int layerXl, int layerYl, /* layer point1 */ + int layerXh, int layerYh, /* layer point2 */ + const char* status, /* optional(NULL) */ + int statusX, int statusY, /* optional(0) - status point */ + int orient); /* optional(-1) */ + +/* This routine is for + VPIN vpinName [LAYER layerName pt pt + * [{ PLACED | FIXED | COVER } pt orient] + * This routine is the same as defwNetVpin, except orient is a char* */ +extern int defwNetVpinStr(const char* vpinName, + const char* layerName, /* optional(NULL) */ + int layerXl, int layerYl, /* layer point1 */ + int layerXh, int layerYh, /* layer point2 */ + const char* status, /* optional(NULL) */ + int statusX, int statusY, /* optional(0) - status point */ + const char* orient); /* optional(NULL) */ + +/* This routine can be called either within net or subnet. + * it is for NONDEFAULTRULE rulename */ +extern int defwNetNondefaultRule(const char* name); + +/* This routine is for + XTALK num */ +extern int defwNetXtalk(int xtalk); + +/* This routine is for + FIXEDBUMP + * This is a 5.4.1 syntax */ +extern int defwNetFixedbump(); + +/* This routine is for + FREQUENCY + * This is a 5.4.1 syntax */ +extern int defwNetFrequency(double frequency); + +/* This routine is for + SOURCE {NETLIST | DIST | USER | TEST | TIMING} */ +extern int defwNetSource(const char* name); + +/* This routine is for + ORIGINAL netname */ +extern int defwNetOriginal(const char* name); + +/* This routine is for + USE {SIGNAL | POWER | GROUND | CLOCK | TIEOFF | + * ANALOG} */ +extern int defwNetUse(const char* name); + +/* This routine is for + PATTERN {STEINER | BALANCED | WIREDLOGIC} */ +extern int defwNetPattern(const char* name); + +/* This routine is for + ESTCAP wireCapacitance */ +extern int defwNetEstCap(double value); + +/* This routine is for + WEIGHT weight */ +extern int defwNetWeight(double value); + +/* 5.3 for net */ +/* This routine is for + SHIELDNET weight */ +extern int defwNetShieldnet(const char* name); + +/* Noshield are a special type of option. A noshield must begin + * with a defwNetNoshieldStart and end with a defwNetNoshieldEnd(). + * The individual parts of the noshield can be entered in + * any order. */ +extern int defwNetNoshieldStart(const char* name); + +/* x and y location of the path */ +extern int defwNetNoshieldPoint(int numPts, /* number of connected points */ + const char** pointx, /* point x list */ + const char** pointy); /* point y list */ +extern int defwNetNoshieldVia(const char* name); /* viaName */ +extern int defwNetNoshieldEnd(); +/* end 5.3 */ + +/* Subnet are a special type of option. A subnet must begin + * with a defwNetSubnetStart and end with a defwNetSubnetEnd(). + * Routines to call within the subnet are: defwNetSubnetPin, + * defwNetNondefaultRule and defwNetPathStart... */ +extern int defwNetSubnetStart(const char* name); + +/* This routine is called after the defwNetSubnet, it is for + * [({compName | PIN} pinName) | (VPIN vpinName)]... */ +extern int defwNetSubnetPin(const char* compName, /* compName | PIN | VPIN */ + const char* pinName); /* pinName | vpinName */ + +extern int defwNetSubnetEnd(); + +/* Paths are a special type of option. A path must begin + * with a defwNetPathStart and end with a defwPathEnd(). + * The individual parts of the path can be entered in + * any order. */ +extern int defwNetPathStart(const char* typ); // ROUTED | FIXED | COVER | + // NOSHIELD | NEW +extern int defwNetPathWidth(int w); /* width */ +extern int defwNetPathLayer(const char* name, /* layerName */ + int isTaper, /* 0 - ignore, 1 - TAPER */ + const char* rulename); /* only one, isTaper or */ + /*rulename can be assigned */ +/* This routine is optional. + * This is a 5.6 syntax. */ +extern int defwNetPathStyle(int styleNum); + +/* This routine is optional. + * This is a 5.8 syntax. */ +extern int defwNetPathMask(int maskNum); + +extern int defwNetPathRect(int deltaX1, int deltaY1, int deltaX2, int deltaY2); + +extern int defwNetPathVirtual(int x, int y); + +/* x and y location of the path */ +extern int defwNetPathPoint(int numPts, /* number of connected points */ + double* pointx, /* point x list */ + double* pointy); /* point y list */ + +extern int defwNetPathPointWithExt(int numPts, + double* pointx, + double* pointy, + double* optValue); + +extern int defwNetPathVia(const char* name); /* viaName */ + +extern int defwNetPathViaWithOrient(const char* name, + int orient); /* optional(-1) */ + +extern int defwNetPathViaWithOrientStr(const char* name, + const char* orient); /* optional(Null) */ +extern int defwNetPathEnd(); + +/* This routine is called at the end of each net */ +extern int defwNetEndOneNet(); + +/* This routine is called at the end of the net section */ +extern int defwEndNets(); + +/* This section of routines is optional. + * Returns 0 if successful. + * The routine starts the I/O Timing section. All of the iotimings options + * must follow. + * The count is the number of defwIOTiming calls to follow. + * The routine can be called only once. + * This api is obsolete in 5.4. */ +extern int defwStartIOTimings(int count); + +/* This routine can be called after defwStaratIOTiming + * It is for - - {(comp pin) | (PIN name)} + * This api is obsolete in 5.4. */ +extern int defwIOTiming(const char* inst, /* compName | PIN */ + const char* pin); /* pinName */ + +/* This routine is for + { RISE | FALL } VARIABLE min max + * This api is obsolete in 5.4. */ +extern int defwIOTimingVariable(const char* riseFall, /* RISE | FALL */ + int num1, /* min */ + int num2); /* max */ + +/* This routine is for + { RISE | FALL } SLEWRATE min max + * This api is obsolete in 5.4. */ +extern int defwIOTimingSlewrate(const char* riseFall, /* RISE | FALL */ + int num1, /* min */ + int num2); /* max */ + +/* This routine is for + DRIVECELL macroName [[FROMPIN pinName] TOPIN pinName] + * [PARALLEL numDrivers] + * This api is obsolete in 5.4. */ +extern int defwIOTimingDrivecell(const char* name, /* macroName*/ + const char* fromPin, /* optional(NULL) */ + const char* toPin, /* optional(NULL) */ + int numDrivers); /* optional(0) */ + +/* This routine is for + CAPACITANCE capacitance + * This api is obsolete in 5.4. */ +extern int defwIOTimingCapacitance(double num); + +/* This api is obsolete in 5.4. */ +extern int defwEndIOTimings(); + +/* Routines to enter scan chains. This section is optional + * The section must start with a defwStartScanchains() call and + * end with a defwEndScanchain() call. + * Each scan chain begins with a defwScanchain() call. + * The rest of the calls follow. */ +extern int defwStartScanchains(int count); + +/* This routine can be called after defwStartScanchains + * It is for - chainName */ +extern int defwScanchain(const char* name); + +/* This routine is for + COMMONSCANPINS [IN pin] [OUT pin] */ +extern int defwScanchainCommonscanpins( + const char* inst1, /* optional(NULL) - IN | OUT*/ + const char* pin1, /* can't be null if inst1 is set */ + const char* inst2, /* optional(NULL) - IN | OUT */ + const char* pin2); /* can't be null if inst2 is set */ + + +/* This routine is for + PARTITION paratitionName [MAXBITS maxBits] */ +/* This is 5.4.1 syntax */ +extern int defwScanchainPartition(const char* name, + int maxBits); /* optional(-1) */ + +/* This routine is for + START {fixedInComp | PIN } [outPin] */ +extern int defwScanchainStart(const char* inst, /* fixedInComp | PIN */ + const char* pin); /* outPin */ + +/* This routine is for + STOP {fixedOutComp | PIN } [inPin] */ +extern int defwScanchainStop(const char* inst, /* fixedOutComp | PIN */ + const char* pin); /* inPin */ + +/* This routine is for + FLOATING {floatingComp [IN pin] [OUT pin]} + * This is a 5.4.1 syntax */ +extern int defwScanchainFloating(const char* name, /* floatingComp */ + const char* inst1, /* optional(NULL) - IN | OUT */ + const char* pin1, /* can't be null if inst1 is set */ + const char* inst2, /* optional(NULL) - IN | OUT */ + const char* pin2); /* can't be null if inst2 is set */ + +/* This routine is for + FLOATING {floatingComp [IN pin] [OUT pin]} + * This is a 5.4.1 syntax. + * This routine is the same as defwScanchainFloating. But also added + * the option BITS. */ +extern int defwScanchainFloatingBits(const char* name, /* floatingComp */ + const char* inst1, /* optional(NULL) - IN | OUT */ + const char* pin1, /* can't be null if inst1 is set */ + const char* inst2, /* optional(NULL) - IN | OUT */ + const char* pin2, /* can't be null if inst2 is set */ + int bits); /* optional (-1) */ + +/* This routine is for + ORDERED {fixedComp [IN pin] [OUT pin] + * fixedComp [IN pin] [OUT pin]. + * When this routine is called for the 1st time within a scanchain, + * both name1 and name2 are required. Only name1 is required is the + * routine is called more than once. */ +extern int defwScanchainOrdered(const char* name1, + const char* inst1, /* optional(NULL) - IN | OUT */ + const char* pin1, /* can't be null if inst1 is set */ + const char* inst2, /* optional(NULL) - IN | OUT */ + const char* pin2, /* can't be null if inst2 is set */ + const char* name2, + const char* inst3, /* optional(NULL) - IN | OUT */ + const char* pin3, /* can't be null if inst3 is set */ + const char* inst4, /* optional(NULL) - IN | OUT */ + const char* pin4); /* can't be null if inst4 is set */ + +/* This routine is for + ORDERED {fixedComp [IN pin] [OUT pin] + * fixedComp [IN pin] [OUT pin]. + * When this routine is called for the 1st time within a scanchain, + * both name1 and name2 are required. Only name1 is required is the + * routine is called more than once. + * This is a 5.4.1 syntax. + * This routine is the same as defwScanchainOrdered. But also added + * the option BITS */ +extern int defwScanchainOrderedBits(const char* name1, + const char* inst1, /* optional(NULL) - IN | OUT */ + const char* pin1, /* can't be null if inst1 is set */ + const char* inst2, /* optional(NULL) - IN | OUT */ + const char* pin2, /* can't be null if inst2 is set */ + int bits1, /* optional(-1) */ + const char* name2, + const char* inst3, /* optional(NULL) - IN | OUT */ + const char* pin3, /* can't be null if inst3 is set */ + const char* inst4, /* optional(NULL) - IN | OUT */ + const char* pin4, /* can't be null if inst4 is set */ + int bits2); /* optional(-1) */ + +extern int defwEndScanchain(); + +/* Routines to enter constraints. This section is optional + * The section must start with a defwStartConstrains() call and + * end with a defwEndConstraints() call. + * Each contraint will call the defwConstraint...(). + * This api is obsolete in 5.4. */ +extern int defwStartConstraints (int count); /* optional */ + +/* The following routines are for - {operand [+ RISEMAX time] [+ FALLMAX time] + * [+ RISEMIN time] [+ FALLMIN time] | WIREDLOGIC netName MAXDIST distance };} + * operand - NET netName | PATH comp fromPin comp toPin | SUM (operand, ...) + * The following apis are obsolete in 5.4. */ +extern int defwConstraintOperand(); /* begin an operand */ +extern int defwConstraintOperandNet(const char* netName); /* NET */ +extern int defwConstraintOperandPath(const char* comp1, /* PATH - comp|PIN */ + const char* fromPin, + const char* comp2, + const char* toPin); +extern int defwConstraintOperandSum(); /* SUM */ +extern int defwConstraintOperandSumEnd(); /* mark the end of SUM */ +extern int defwConstraintOperandTime(const char* timeType, // RISEMAX | FALLMAX | RISEMIN | FALLMIN + int time); +extern int defwConstraintOperandEnd(); /* mark the end of operand */ + +/* This routine is for - WIRELOGIC netName MAXDIST distance */ +extern int defwConstraintWiredlogic(const char* netName, + int distance); + +extern int defwEndConstraints (); + +/* Routines to enter groups. This section is optional + * The section must start with a defwStartGroups() call and + * end with a defwEndGroups() call. + * Each group will call the defwGroup...(). */ +extern int defwStartGroups (int count); /* optional */ + +/* This routine is for - groupName compNameRegExpr ... */ +extern int defwGroup(const char* groupName, + int numExpr, + const char** groupExpr); + +/* This routine is for + SOFT [MAXHALFPERIMETER value] [MAXX value] + * [MAXY value] */ +extern int defwGroupSoft(const char* type1, /* MAXHALFPERIMETER | MAXX | MAXY */ + double value1, + const char* type2, + double value2, + const char* type3, + double value3); + +/* This routine is for + REGION {pt pt | regionName} */ +extern int defwGroupRegion(int xl, int yl, /* either the x & y or */ + int xh, int yh, /* regionName only, can't */ + const char* regionName); /* be both */ + +extern int defwEndGroups(); + +/* Routines to enter Blockages. This section is optional + * The section must start with a defwStartBlockages() call and + * end with a defwEndBlockages() call. + * Each blockage will call the defwBlockages...(). + * This is a 5.4 syntax. */ +extern int defwStartBlockages(int count); /* count = numBlockages */ + +/* This routine is for - layerName +* This routine is called per entry within a blockage for layer. +* This is a 5.4 syntax. */ +extern int defwBlockagesLayer(const char* layerName); + +/* This routine is for - slots +* This routine is called per entry within a blockage layer, can't be more then one. +* This is a 5.4 syntax. */ +extern int defwBlockagesLayerSlots(); + +/* This routine is for - fills +* This routine is called per entry within a blockage layer, can't be more then one. +* This is a 5.4 syntax. */ +extern int defwBlockagesLayerFills(); + +/* This routine is for - pushdown +* This routine is called per entry within a blockage layer, can't be more then one. +* This is a 5.4 syntax. */ +extern int defwBlockagesLayerPushdown(); + +/* This routine is for - exceptpgnet +* This routine is called per entry within a blockage layer, can't be more then one. +* This is a 5.7 syntax. */ +extern int defwBlockagesLayerExceptpgnet(); + +/* This routine is for - component +* This routine called per entry within a blockage layer, can't be more than one. +* This is a 5.6 syntax. */ +extern int defwBlockagesLayerComponent(const char* compName); + +/* This routine is for - spacing +* Either this routine or defwBlockagesDesignRuleWidth is called per entry +* within a blockage layer, can't be more than one. +* This is a 5.6 syntax. */ +extern int defwBlockagesLayerSpacing(int minSpacing); + +/* This routine is for - designrulewidth +* Either this routine or defwBlockagesSpacing is called per entry +* within a blockage layer, can't be more than one. +* This is a 5.6 syntax. */ +extern int defwBlockagesLayerDesignRuleWidth(int effectiveWidth); + +/* This routine is for - mask. +* This routine called per entry within a blockage layer, can't be more than one. +* This is a 5.8 syntax. */ +extern int defwBlockagesLayerMask(int maskColor); + +/* This routine is for - layerName & compName + * Either this routine, defBlockageLayerSlots, defBlockageLayerFills, + * or defwBlockagePlacement is called per entry within + * a blockage, can't be more then one. + * This is a 5.4 syntax. */ +extern int defwBlockageLayer(const char* layerName, + const char* compName); /* optional(NULL) */ + +/* This routine is for - layerName & slots + * Either this routine, defBlockageLayer, defBlockageLayerFills, + * defwBlockagePlacement, or defwBlockagePushdown is called per entry within + * a blockage, can't be more then one. + * This is a 5.4 syntax. */ +extern int defwBlockageLayerSlots(const char* layerName); + +/* This routine is for - layerName & fills + * Either this routine, defBlockageLayer, defBlockageLayerSlots, + * defwBlockagePlacement, or defwBlockagePushdown is called per entry within + * a blockage, can't be more then one. + * This is a 5.4 syntax. */ +extern int defwBlockageLayerFills(const char* layerName); + +/* This routine is for - layerName & pushdown + * Either this routine, defBlockageLayer, defBlockageLayerSlots, + * defwBlockagePlacement, or defwBlockageFills is called per entry within + * a blockage, can't be more then one. + * This is a 5.4 syntax. */ +extern int defwBlockageLayerPushdown(const char* layerName); + +/* This routine is for - exceptpgnet + * Either this routine, defBlockageLayer, defBlockageLayerSlots, + * defwBlockagePlacement, or defwBlockageFills is called per entry within + * a blockage, can't be more then one. + * This is a 5.7 syntax. */ +extern int defwBlockageLayerExceptpgnet(const char* layerName); + +/* This routine is for - spacing + * Either this routine or defwBlockageDesignRuleWidth is called per entry + * within a blockage, can't be more than one. + * This is a 5.6 syntax. */ +extern int defwBlockageSpacing(int minSpacing); + +/* This routine is for - designrulewidth + * Either this routine or defwBlockageSpacing is called per entry + * within a blockage, can't be more than one. + * This is a 5.6 syntax. */ +extern int defwBlockageDesignRuleWidth(int effectiveWidth); + +/* This routine is for - placement + * This routine is called per entry within blockage for placement. + * This is a 5.4 syntax. + * 11/25/2002 - bug fix: submitted by Craig Files (cfiles@ftc.agilent.com) + * this routine allows to call blockage without a component. */ +extern int defwBlockagesPlacement(); + +/* This routine is for - component +* This routine is called per entry within blockage placement, can't be more then one. +* This is a 5.4 syntax. */ +extern int defwBlockagesPlacementComponent(const char* compName); + +/* This routine is for - Pushdown +* This routine is called per entry within blockage placement, can't be more then one. +* This is a 5.4 syntax. */ +extern int defwBlockagesPlacementPushdown(); + +/* This routine is for - soft +* Either this routine or defwBlockagesPlacementPartial +* is called per entry within blockage placement, can't be more then one. +* This is a 5.7 syntax. */ +extern int defwBlockagesPlacementSoft(); + +/* This routine is for - Partial +* Either this routine or defwBlockagesPlacementSoft +* is called per entry within blockage placement, can't be more then one. +* This is a 5.7 syntax. */ +extern int defwBlockagesPlacementPartial(double maxDensity); + +/* This routine is for rectangle. +* This routine is optional and can be called multiple time. +* This is a 5.4 syntax. */ +extern int defwBlockagesRect(int xl, int yl, int xh, int yh); + +/* This routine is for polygon. +* This routine is optional and can be called multiple time. +* This is a 5.6 syntax. */ +extern int defwBlockagesPolygon(int num_polys, int* xl, int* yl); + +/* This routine is for - placement +* Either this routine or defBlockageLayer +* is called per entry within blockage, can't be more then one. +* This is a 5.4 syntax. +* 11/25/2002 - bug fix: submitted by Craig Files (cfiles@ftc.agilent.com) +* this routine allows to call blockage without a component. */ +extern int defwBlockagePlacement(); + +/* This routine is for - placement & component + * Either this routine or defwBlockagePlacementPushdown + * is called per entry within blockage, can't be more then one. + * This is a 5.4 syntax. */ +extern int defwBlockagePlacementComponent(const char* compName); + +/* This routine is for - placement & Pushdown + * Either this routine or defwBlockagePlacementComponent + * is called per entry within blockage, can't be more then one. + * This is a 5.4 syntax. */ +extern int defwBlockagePlacementPushdown(); + +/* This routine is for - placement & soft + * Either this routine or defwBlockagePlacementPushdown + * is called per entry within blockage, can't be more then one. + * This is a 5.7 syntax. */ +extern int defwBlockagePlacementSoft(); + +/* This routine is for - placement & Partial + * Either this routine or defwBlockagePlacementComponent + * is called per entry within blockage, can't be more then one. + * This is a 5.7 syntax. */ +extern int defwBlockagePlacementPartial(double maxDensity); + +/* This routine is optional. + * This is a 5.8 syntax. */ +extern int defwBlockageMask(int maskColor); + +/* This routine is for rectangle. + * This is a 5.4 syntax. */ +extern int defwBlockageRect(int xl, int yl, int xh, int yh); + +/* This routine is for polygon. + * This routine is optinal and can be called multiple time. + * This is a 5.6 syntax. */ +extern int defwBlockagePolygon(int num_polys, int* xl, int* yl); + +/* This is a 5.4 syntax. */ +extern int defwEndBlockages(); + +/* Routines to enter Slots. This section is optional + * The section must start with a defwStartSlots() call and + * end with a defwEndSlots() call. + * Each slots will call the defwSlots...(). + * This is a 5.4 syntax. */ +extern int defwStartSlots(int count); /* count = numSlots */ + +/* This routine is for - layerName & compName + * Either this routine, defSlots, defSlotsLayerFills, + * or defwSlotsPlacement is called per entry within + * a slot, can't be more then one. + * This is a 5.4 syntax. */ +extern int defwSlotLayer(const char* layerName); + +/* This routine is for rectangle + * This is a 5.4 syntax. */ +extern int defwSlotRect(int xl, int yl, int xh, int yh); + +/* This routine is for rectangle + * This is a 5.6 syntax and can be called multiple time. */ +extern int defwSlotPolygon(int num_polys, double* xl, double* yl); + +/* This is a 5.4 syntax. */ +extern int defwEndSlots(); + +/* Routines to enter Fills. This section is optional + * The section must start with a defwStartFills() call and + * end with a defwEndFills() call. + * Each fills will call the defwFills...(). + * This is a 5.4 syntax. */ +extern int defwStartFills(int count); /* count = numFills */ + +/* This routine is for - layerName & compName + * Either this routine, defFills, defFillsLayerFills, + * or defwFillsPlacement is called per entry within + * a fill, can't be more then one. + * This is a 5.4 syntax. */ +extern int defwFillLayer(const char* layerName); + +/* This routine is optional. + * This is a 5.8 syntax. */ +extern int defwFillLayerMask(int maskColor); + +/* This routine has to be called after defwFillLayer + * This routine is optional. + * This is a 5.7 syntax. */ +extern int defwFillLayerOPC(); + +/* This routine is for rectangle. + * This is a 5.4 syntax. */ +extern int defwFillRect(int xl, int yl, int xh, int yh); + +/* This routine is for polygon. + * This is a 5.6 syntax and can be called multiple time. */ +extern int defwFillPolygon(int num_polys, double* xl, double* yl); + +/* This routine is for via. + * This routine is optional. + * This is a 5.7 syntax and can be called multiple time. */ +extern int defwFillVia(const char* viaName); + +/* This routine is optional. + * This is a 5.8 syntax. */ +extern int defwFillViaMask(int colorMask); + +/* This routine is for via OPC. + * This routine can only be called after defwFillVia. + * This routine is optional. + * This is a 5.7 syntax and can be called multiple time. */ +extern int defwFillViaOPC(); + +/* This routine is for via OPC. + * This routine can only be called after defwFillVia. + * This routine is required following defwFillVia. + * This is a 5.7 syntax and can be called multiple time. */ +extern int defwFillPoints(int num_points, double* xl, double* yl); + +/* This is a 5.4 syntax. */ +extern int defwEndFills(); + +/* Routines to enter NONDEFAULTRULES. This section is required + * The section must start with a defwStartNonDefaultRules() and + * end with defwEndNonDefaultRules() call. + * This is a 5.6 syntax. */ +extern int defwStartNonDefaultRules(int count); + +/* This routine is for Layer within the NONDEFAULTRULES + * This routine can be called multiple times. It is required. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwNonDefaultRule(const char* ruleName, + int hardSpacing); /* optional(0) */ + +/* Routines to enter NONDEFAULTRULES. This section is required + * This routine must be called after the defwNonDefaultRule. + * This routine can be called multiple times. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwNonDefaultRuleLayer(const char* layerName, + int width, + int diagWidth, /* optional(0) */ + int spacing, /* optional(0) */ + int wireExt); /* optional(0) */ + +/* Routines to enter NONDEFAULTRULES. This section is optional. + * This routine must be called after the defwNonDefaultRule. + * This routine can be called multiple times. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwNonDefaultRuleVia(const char* viaName); + +/* Routines to enter NONDEFAULTRULES. This section is optional. + * This routine must be called after the defwNonDefaultRule. + * This routine can be called multiple times. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwNonDefaultRuleViaRule(const char* viaRuleName); + +/* Routines to enter NONDEFAULTRULES. This section is optional. + * This routine must be called after the defwNonDefaultRule. + * This routine can be called multiple times. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwNonDefaultRuleMinCuts(const char* cutLayerName, int numCutS); + +/* This is a 5.4 syntax. */ +extern int defwEndNonDefaultRules(); + +/* Routines to enter STYLES. This section is required + * The section must start with a defwStartStyles() and + * end with defwEndStyles() call. + * This is a 5.6 syntax. */ +extern int defwStartStyles(int count); + +/* This routine is for Layer within the NONDEFAULTRULES + * This routine can be called multiple times. It is required. + * This is a 5.6 syntax. + * Returns 0 if successful. */ +extern int defwStyles(int styleNums, int num_points, double* xp, double* yp); + +/* This is a 5.4 syntax. */ +extern int defwEndStyles(); + +/* This routine is called after defwInit. + * This routine is optional and it can be called only once. + * Returns 0 if successful. */ +extern int defwStartBeginext(const char* name); + +/* This routine is called after defwBeginext. + * This routine is optional, it can be called only once. + * Returns 0 if successful. */ +extern int defwBeginextCreator (const char* creatorName); + +/* This routine is called after defwBeginext. + * This routine is optional, it can be called only once. + * It gets the current system time and date. + * Returns 0 if successful. */ +extern int defwBeginextDate (); + +/* This routine is called after defwBeginext. + * This routine is optional, it can be called only once. + * Returns 0 if successful. */ +extern int defwBeginextRevision (int vers1, int vers2); /* vers1.vers2 */ + +/* This routine is called after defwBeginext. + * This routine is optional, it can be called many times. + * It allows user to customize their own syntax. + * Returns 0 if successful. */ +extern int defwBeginextSyntax (const char* title, const char* string); + +/* This routine is called after defwInit. + * This routine is optional and it can be called only once. + * Returns 0 if successful. */ +extern int defwEndBeginext(); + +/* End the DEF file. + * This routine IS NOT OPTIONAL. + * The routine must be called LAST. */ +extern int defwEnd ( void ); + +/* General routines that can be called anytime after the Init is called. + */ +extern int defwCurrentLineNumber ( void ); + +/* + * extern void defwError ( const char *, ... ); + * extern void defwWarning ( const char *, ... ); + * extern void defwVError ( const char *, va_list ); + * extern void defwVWarning ( const char *, va_list ); + * extern int defwGetCurrentLineNumber (void); + * extern const char *defwGetCurrentFileName (void); + */ + +/* This routine will print the error message. */ +extern void defwPrintError(int status); + +/* This routine will allow user to write their own comemnt. It will + * automactically add a # infront of the line. + */ +extern void defwAddComment(const char* comment); + +/* This routine will indent 3 blank spaces */ +extern void defwAddIndent(); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/defwWriterCalls.cpp b/lefdef/src/def/def/defwWriterCalls.cpp new file mode 100644 index 00000000..386db620 --- /dev/null +++ b/lefdef/src/def/def/defwWriterCalls.cpp @@ -0,0 +1,613 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + + +// This file contains code for implementing the defwriter 5.3 +// It has functions to set the user callback functions. If functions +// are set, the defwriter will call the user callback functions when +// it comes to the section. If the section is required, but user +// does not set any callback functions, a warning will be printed +// both on stderr and on the output file if there is one. +// Def writer provides default callback routines for some but not all +// required sections. +// Sections the writer provides default callbacks are: +// Version -- default to 5.3 +// NamesCaseSensitive -- default to OFF +// BusBitChars -- default to "[]" +// DividerChar -- default to "/"; // +// Author: Wanda da Rosa +// Date: 05/14/99 +// +// Revisions: + +#include "defwWriterCalls.hpp" +#include "defwWriter.hpp" +#include +#include +#include "lex.h" +#include "defiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +#define MAXCBS 33 + +#define defwVersionCbk 0 +#define defwCaseSensitiveCbk 1 +#define defwDividerCbk 2 +#define defwBusBitCbk 3 +#define defwDesignCbk 4 +#define defwTechCbk 5 +#define defwArrayCbk 6 +#define defwFloorPlanCbk 7 +#define defwUnitsCbk 8 +#define defwHistoryCbk 9 +#define defwPropDefCbk 10 +#define defwDieAreaCbk 11 +#define defwRowCbk 12 +#define defwTrackCbk 13 +#define defwGcellGridCbk 14 +#define defwDefaultCapCbk 15 +#define defwCanplaceCbk 16 +#define defwCannotOccupyCbk 17 +#define defwViaCbk 18 +#define defwRegionCbk 19 +#define defwComponentCbk 20 +#define defwPinCbk 21 +#define defwPinPropCbk 22 +#define defwSNetCbk 23 +#define defwNetCbk 24 +#define defwIOTimingCbk 25 +#define defwScanchainCbk 26 +#define defwConstraintCbk 27 +#define defwAssertionCbk 28 /* pre 5.2 */ +#define defwGroupCbk 29 +#define defwBlockageCbk 30 +#define defwExtCbk 31 +#define defwDesignEndCbk 32 + +/* NEW CALLBACK - then place it here. */ + +int defWRetVal; +extern int defwHasInit; +extern int defwHasInitCbk; + +DEFI_LOG_FUNCTION defwErrorLogFunction; +DEFI_WARNING_LOG_FUNCTION defwWarningLogFunction; + +#define WRITER_CALLBACK(func, type) \ + if ((defWRetVal = (*func)(type, defwUserData)) == 0) { \ + } else { \ + return defWRetVal; \ + } + +#define CHECK_DEF_STATUS(status) \ + if (status) { \ + defwPrintError(status); \ + return(status); \ + } + +//////////////////////////////////// +// +// Global variables +// +///////////////////////////////////// + +defiUserData defwUserData = 0; +static char* defwFileName = 0; +static int defwRegisterUnused = 0; + +extern FILE* defwFile; + +//////////////////////////////////// +// +// List of call back routines +// These are filled in by the user. See the +// "set" routines at the end of the file +// +///////////////////////////////////// +// The callback routines +defwVoidCbkFnType defwCallbacksSeq[MAXCBS] = {0, // defwVersionCbk + 0, // defwCaseSensitiveCbk + 0, // defwDividerCbk + 0, // defwBusBitCbk + 0, // defwDesignCbk + 0, // defwTechCbk + 0, // defwArrayCbk + 0, // defwFloorPlanCbk + 0, // defwUnitsCbk + 0, // defwHistoryCbk + 0, // defwPropDefCbk + 0, // defwDieAreaCbk + 0, // defwRowCbk + 0, // defwTrackCbk + 0, // defwGcellGridCbk + 0, // defwDefaultCapCbk + 0, // defwCanplaceCbk + 0, // defwCannotOccupyCbk + 0, // defwViaCbk + 0, // defwRegionCbk + 0, // defwComponentCbk + 0, // defwPinCbk + 0, // defwPinPropCbk + 0, // defwSNetCbk + 0, // defwNetCbk + 0, // defwIOTimingCbk + 0, // defwScanchainCbk + 0, // defwConstraintCbk + 0, // defwAssertionCbk pre 5.2 + 0, // defwGroupCbk + 0, // defwBlockageCbk 5.4 + 0, // defwExtCbk + 0, // defwDesignEndCbk + // Add NEW CALLBACK here + }; + +// the optional and required callbacks and +// if default routines are available +int defwCallbacksReq[MAXCBS][2] = {{0, 0}, // Version + {0, 0}, // CaseSensitive + {0, 0}, // Divider + {0, 0}, // BusBit + {1, 0}, // Design + {0, 0}, // Tech + {0, 0}, // Array + {0, 0}, // FloorPlan + {0, 0}, // Units + {0, 0}, // History + {0, 0}, // PropDef + {0, 0}, // DieArea + {0, 0}, // Row + {0, 0}, // Track + {0, 0}, // GcellGrid + {0, 0}, // DefaultCap + {0, 0}, // Canplace + {0, 0}, // CannotOccupy + {0, 0}, // Via + {0, 0}, // Region + {0, 0}, // Component + {0, 0}, // Pin + {0, 0}, // PinProp + {0, 0}, // SNet + {0, 0}, // Net + {0, 0}, // IOTiming + {0, 0}, // Scanchain + {0, 0}, // Constraint + {0, 0}, // Assertion pre 5.2 + {0, 0}, // Group + {0, 0}, // Blockage + {0, 0}, // Ext + {1, 0}, // DesignEnd + // Add NEW CALLBACK here + }; + +// The section names +char defwSectionNames[MAXCBS] [80] = {"Version", + "CaseSensitive", + "Divider", + "BusBit", + "Design", + "Tech", + "Array", + "FloorPlan", + "Units", + "History", + "PropertyDefinition", + "DieArea", + "Row", + "Track", + "GcellGrid", + "DefaultCap", + "Canplace", + "CannotOccupy", + "Via", + "Region", + "Component", + "Pin", + "PinProp", + "SpecialNet", + "Net", + "IOTiming", + "Scanchain", + "Constraint", + "Assertion", // pre 5.2 + "Group", + "Blockage", + "Extension", + "DesignEnd" + // Add NEW CALLBACK here + }; + +// the call back types from the defwCallbackType_e +defwCallbackType_e defwCallbacksType[MAXCBS] = {defwVersionCbkType, + defwCaseSensitiveCbkType, + defwDividerCbkType, + defwBusBitCbkType, + defwDesignCbkType, + defwTechCbkType, + defwArrayCbkType, + defwFloorPlanCbkType, + defwUnitsCbkType, + defwHistoryCbkType, + defwPropDefCbkType, + defwDieAreaCbkType, + defwRowCbkType, + defwTrackCbkType, + defwGcellGridCbkType, + defwDefaultCapCbkType, + defwCanplaceCbkType, + defwCannotOccupyCbkType, + defwViaCbkType, + defwRegionCbkType, + defwComponentCbkType, + defwPinCbkType, + defwPinPropCbkType, + defwSNetCbkType, + defwNetCbkType, + defwIOTimingCbkType, + defwScanchainCbkType, + defwConstraintCbkType, + defwAssertionCbkType, // pre 5.2 + defwGroupCbkType, + defwBlockageCbkType, // 5.4 + defwExtCbkType, + defwDesignEndCbkType + // Add NEW TYPES here + }; + + +//////////////////////////////////// +// +// Routines for the callbacks +// +///////////////////////////////////// +const char* defwFName() { + return defwFileName; +} + + +int defwWrite(FILE* f, const char* fName, defiUserData uData) { + int i; + + if (defwHasInit == 0 && defwHasInitCbk == 0) { + fprintf(stderr, "ERROR DEFWRIT-9010): The function defwWrite is called before the function defwInitCbk.\nYou need to call defwInitCbk before calling any other functions.\nUpdate your program and then try again."); + return -1; + } + + if (defwHasInit) { + fprintf(stderr, "ERROR DEFWRIT-9011): You program has called the function defwInit to initialize the writer.\nIf you want to use the callback option you need to use the function defwInitCbk."); + } + + defwFileName = (char*)fName; + defwFile = f; + defwUserData = uData; + + // Loop through the list of callbacks and call the user define + // callback routines if any are set + + for (i = 0; i < MAXCBS; i++) { + if (defwCallbacksSeq[i] != 0) { // user has set a callback function + WRITER_CALLBACK(defwCallbacksSeq[i], defwCallbacksType[i]); + } else if ((defwCallbacksReq[i][0]) && (defwCallbacksReq[i][1] == 0)) { + // it is required but user hasn't set up callback and there isn't a + // default routine + fprintf(f, + "# WARNING: Callback for %s is required, but is not defined\n\n", + defwSectionNames[i]); + fprintf(stderr, + "WARNING: Callback for %s is required, but is not defined\n\n", + defwSectionNames[i]); + } + } + return 0; +} + + +void defwSetUnusedCallbacks(defwVoidCbkFnType func) { + // Set all of the callbacks that have not been set yet to + // the given function. + int i; + + for (i = 0; i < MAXCBS; i++) { + if (defwCallbacksSeq[i] == 0) + defwCallbacksSeq[i] = (defwVoidCbkFnType)func; + } +} + + +/* These count up the number of times an unset callback is called... */ +static int defwUnusedCount[100]; + + +int defwCountFunc(defwCallbackType_e e, defiUserData d) { + int i = (int)e; + if (defiDebug(23)) printf("count %d 0x%p\n", (int)e, d); + if (i >= 0 && i < 100) { + defwUnusedCount[i] += 1; + return 0; + } + return 1; +} + + +void defwSetRegisterUnusedCallbacks() { + int i; + defwRegisterUnused = 1; + defwSetUnusedCallbacks(defwCountFunc); + for (i = 0; i < 100; i++) + defwUnusedCount[i] = 0; +} + + +void defwPrintUnusedCallbacks(FILE* f) { + int i; + int first = 1; + + if (defwRegisterUnused == 0) { + fprintf(f, + "ERROR DEFWRIT-9012): You are calling the function defwPrintUnusedCallbacks but you did call the function defwSetRegisterUnusedCallbacks which is required before you can call defwPrintUnusedCallbacks."); + return; + } + + for (i = 0; i < 100; i++) { + if (defwUnusedCount[i]) { + if (first) + fprintf(f, + "DEF items that were present but ignored because of no callback:\n"); + first = 0; + switch ((defwCallbackType_e) i) { + case defwVersionCbkType: fprintf(f, "Version"); break; + case defwCaseSensitiveCbkType: fprintf(f, "CaseSensitive"); break; + case defwDividerCbkType: fprintf(f, "Divider"); break; + case defwBusBitCbkType: fprintf(f, "BusBit"); break; + case defwDesignCbkType: fprintf(f, "Design"); break; + case defwTechCbkType: fprintf(f, "Technology"); break; + case defwArrayCbkType: fprintf(f, "Array"); break; + case defwFloorPlanCbkType: fprintf(f, "FloorPlan"); break; + case defwUnitsCbkType: fprintf(f, "Units"); break; + case defwHistoryCbkType: fprintf(f, "History"); break; + case defwPropDefCbkType: fprintf(f, "PropertyDefinition"); break; + case defwDieAreaCbkType: fprintf(f, "DieArea"); break; + case defwRowCbkType: fprintf(f, "Row"); break; + case defwTrackCbkType: fprintf(f, "Track"); break; + case defwGcellGridCbkType: fprintf(f, "GcellGrid"); break; + case defwDefaultCapCbkType: fprintf(f, "DefaultCap"); break; + case defwCanplaceCbkType: fprintf(f, "Canplace"); break; + case defwCannotOccupyCbkType: fprintf(f, "CannotOccupy"); break; + case defwViaCbkType: fprintf(f, "Via"); break; + case defwRegionCbkType: fprintf(f, "Region"); break; + case defwComponentCbkType: fprintf(f, "Component"); break; + case defwPinCbkType: fprintf(f, "Pin"); break; + case defwPinPropCbkType: fprintf(f, "PinProperty"); break; + case defwSNetCbkType: fprintf(f, "SpecialNet"); break; + case defwNetCbkType: fprintf(f, "Net"); break; + case defwIOTimingCbkType: fprintf(f, "IOTiming"); break; + case defwScanchainCbkType: fprintf(f, "Scanchain"); break; + case defwConstraintCbkType: fprintf(f, "Constraint"); break; + case defwAssertionCbkType: fprintf(f, "Assertion"); break; + case defwGroupCbkType: fprintf(f, "Group"); break; + case defwBlockageCbkType: fprintf(f, "Blockages"); break; + case defwExtCbkType: fprintf(f, "Extension"); break; + case defwDesignEndCbkType: fprintf(f, "DesignEnd"); break; + /* NEW CALLBACK add the print here */ + default: fprintf(f, "BOGUS ENTRY"); break; + } + fprintf(f, " %d\n", defwUnusedCount[i]); + } + } +} + + +void defwSetUserData(defiUserData d) { + defwUserData = d; +} + + +defiUserData defwGetUserData() { + return defwUserData; +} + + +void defwSetArrayCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwArrayCbk] = f; +} + + +void defwSetAssertionCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwAssertionCbk] = f; +} + + +void defwSetBlockageCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwBlockageCbk] = f; +} + + +void defwSetBusBitCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwBusBitCbk] = f; +} + + +void defwSetCannotOccupyCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwCannotOccupyCbk] = f; +} + + +void defwSetCanplaceCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwCanplaceCbk] = f; +} + + +void defwSetCaseSensitiveCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwCaseSensitiveCbk] = f; +} + + +void defwSetComponentCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwComponentCbk] = f; +} + + +void defwSetConstraintCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwConstraintCbk] = f; +} + + +void defwSetDefaultCapCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwDefaultCapCbk] = f; +} + + +void defwSetDesignCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwDesignCbk] = f; +} + + +void defwSetDesignEndCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwDesignEndCbk] = f; +} + + +void defwSetDieAreaCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwDieAreaCbk] = f; +} + + +void defwSetDividerCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwDividerCbk] = f; +} + + +void defwSetExtCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwExtCbk] = f; +} + + +void defwSetFloorPlanCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwFloorPlanCbk] = f; +} + + +void defwSetGcellGridCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwGcellGridCbk] = f; +} + + +void defwSetGroupCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwGroupCbk] = f; +} + + +void defwSetHistoryCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwHistoryCbk] = f; +} + + +void defwSetIOTimingCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwIOTimingCbk] = f; +} + + +void defwSetNetCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwNetCbk] = f; +} + + +void defwSetPinCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwPinCbk] = f; +} + + +void defwSetPinPropCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwPinPropCbk] = f; +} + + +void defwSetPropDefCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwPropDefCbk] = f; +} + + +void defwSetRegionCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwRegionCbk] = f; +} + + +void defwSetRowCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwRowCbk] = f; +} + + +void defwSetSNetCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwSNetCbk] = f; +} + + +void defwSetScanchainCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwScanchainCbk] = f; +} + + +void defwSetTechnologyCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwTechCbk] = f; +} + + +void defwSetTrackCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwTrackCbk] = f; +} + + +void defwSetUnitsCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwUnitsCbk] = f; +} + + +void defwSetVersionCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwVersionCbk] = f; +} + + +void defwSetViaCbk(defwVoidCbkFnType f) { + defwCallbacksSeq[defwViaCbk] = f; +} + + +/* NEW CALLBACK - Each callback routine must have a routine that allows + * the user to set it. The set routines go here. */ + + +void defwSetLogFunction(DEFI_LOG_FUNCTION f) { + defwErrorLogFunction = f; +} + +void defwSetWarningLogFunction(DEFI_WARNING_LOG_FUNCTION f) { + defwWarningLogFunction = f; +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/def/def/defwWriterCalls.hpp b/lefdef/src/def/def/defwWriterCalls.hpp new file mode 100644 index 00000000..b80c45fc --- /dev/null +++ b/lefdef/src/def/def/defwWriterCalls.hpp @@ -0,0 +1,220 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2013-2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef DEFI_WRITER_H +#define DEFI_WRITER_H + +#include +#include + +#include "defiKRDefs.hpp" +#include "defiDefs.hpp" +#include "defiUser.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/* + * The main writer function. + * The file should already be opened. This requirement allows + * the writer to be used with stdin or a pipe. The file name + * is only used for error messages. The includeSearchPath is + * a colon-delimited list of directories in which to find + * include files. + */ +extern int defwWrite ( FILE *file, + const char *fileName, + defiUserData userData ); + +/* + * Set all of the callbacks that have not yet been set to a function + * that will add up how many times a given def data type was ignored + * (ie no callback was done). The statistics can later be printed out. + */ +extern void defwSetRegisterUnusedCallbacks (void); +extern void defwPrintUnusedCallbacks (FILE* log); + +/* + * Set/get the client-provided user data. defi doesn't look at + * this data at all, it simply passes the opaque defiUserData pointer + * back to the application with each callback. The client can + * change the data at any time, and it will take effect on the + * next callback. The defi writer and writer maintain separate + * user data pointers. + */ +extern void defwSetUserData ( defiUserData ); +extern defiUserData defwGetUserData ( void ); + +/* + * An enum describing all of the types of writer callbacks. + */ +typedef enum { + defwUnspecifiedCbkType = 0, + defwVersionCbkType, + defwCaseSensitiveCbkType, + defwBusBitCbkType, + defwDividerCbkType, + defwDesignCbkType, + defwTechCbkType, + defwArrayCbkType, + defwFloorPlanCbkType, + defwUnitsCbkType, + defwHistoryCbkType, + defwPropDefCbkType, + defwDieAreaCbkType, + defwRowCbkType, + defwTrackCbkType, + defwGcellGridCbkType, + defwDefaultCapCbkType, + defwCanplaceCbkType, + defwCannotOccupyCbkType, + defwViaCbkType, + defwRegionCbkType, + defwComponentCbkType, + defwPinCbkType, + defwPinPropCbkType, + defwSNetCbkType, + defwNetCbkType, + defwIOTimingCbkType, + defwScanchainCbkType, + defwConstraintCbkType, + defwAssertionCbkType, // pre 5.2 + defwGroupCbkType, + defwBlockageCbkType, // 5.4 + defwExtCbkType, + defwDesignEndCbkType + + /* NEW CALLBACKS - each callback has its own type. For each callback + * that you add, you must add an item to this enum. */ + +} defwCallbackType_e; + + +/* Declarations of function signatures for each type of callback. + * These declarations are type-safe when compiling with ANSI C + * or C++; you will only be able to register a function pointer + * with the correct signature for a given type of callback. + * + * Each callback function is expected to return 0 if successful. + * A non-zero return code will cause the writer to abort. + * + * The defwDesignStart and defwDesignEnd callback is only called once. + * Other callbacks may be called multiple times, each time with a different + * set of data. + * + * For each callback, the Def API will make the callback to the + * function supplied by the client, which should either make a copy + * of the Def object, or store the data in the client's own data structures. + * The Def API will delete or reuse each object after making the callback, + * so the client should not keep a pointer to it. + * + * All callbacks pass the user data pointer provided in defwRead() + * or defwSetUserData() back to the client; this can be used by the + * client to obtain access to the rest of the client's data structures. + * + * The user data pointer is obtained using defwGetUserData() immediately + * prior to making each callback, so the client is free to change the + * user data on the fly if necessary. + * + * Callbacks with the same signature are passed a callback type + * parameter, which allows an application to write a single callback + * function, register that function for multiple callbacks, then + * switch based on the callback type to handle the appropriate type of + * data. + */ + + +/* A declaration of the signature of all callbacks that return nothing. */ +typedef int (*defwVoidCbkFnType) ( defwCallbackType_e, defiUserData ); + +/* Functions to call to register a callback function. + */ +extern void defwSetArrayCbk (defwVoidCbkFnType); +extern void defwSetAssertionCbk (defwVoidCbkFnType); +extern void defwSetBlockageCbk (defwVoidCbkFnType); +extern void defwSetBusBitCbk (defwVoidCbkFnType); +extern void defwSetCannotOccupyCbk (defwVoidCbkFnType); +extern void defwSetCanplaceCbk (defwVoidCbkFnType); +extern void defwSetCaseSensitiveCbk (defwVoidCbkFnType); +extern void defwSetComponentCbk (defwVoidCbkFnType); +extern void defwSetConstraintCbk (defwVoidCbkFnType); +extern void defwSetDefaultCapCbk (defwVoidCbkFnType); +extern void defwSetDesignCbk (defwVoidCbkFnType); +extern void defwSetDesignEndCbk (defwVoidCbkFnType); +extern void defwSetDieAreaCbk (defwVoidCbkFnType); +extern void defwSetDividerCbk (defwVoidCbkFnType); +extern void defwSetExtCbk (defwVoidCbkFnType); +extern void defwSetFloorPlanCbk (defwVoidCbkFnType); +extern void defwSetGcellGridCbk (defwVoidCbkFnType); +extern void defwSetGroupCbk (defwVoidCbkFnType); +extern void defwSetHistoryCbk (defwVoidCbkFnType); +extern void defwSetIOTimingCbk (defwVoidCbkFnType); +extern void defwSetNetCbk (defwVoidCbkFnType); +extern void defwSetPinCbk (defwVoidCbkFnType); +extern void defwSetPinPropCbk (defwVoidCbkFnType); +extern void defwSetPropDefCbk (defwVoidCbkFnType); +extern void defwSetRegionCbk (defwVoidCbkFnType); +extern void defwSetRowCbk (defwVoidCbkFnType); +extern void defwSetSNetCbk (defwVoidCbkFnType); +extern void defwSetScanchainCbk (defwVoidCbkFnType); +extern void defwSetTechnologyCbk (defwVoidCbkFnType); +extern void defwSetTrackCbk (defwVoidCbkFnType); +extern void defwSetUnitsCbk (defwVoidCbkFnType); +extern void defwSetVersionCbk (defwVoidCbkFnType); +extern void defwSetViaCbk (defwVoidCbkFnType); + +/* NEW CALLBACK - each callback must have a function to allow the user + * to set it. Add the function here. */ + + +/* + * Set all of the callbacks that have not yet been set to the following + * function. This is especially useful if you want to check to see + * if you forgot anything. + */ +extern void defwSetUnusedCallbacks (defwVoidCbkFnType func); + +/* Routine to set the message logging routine for errors */ +#ifndef DEFI_LOG_FUNCTION + typedef void (*DEFI_LOG_FUNCTION) (const char*); +#endif + +extern void defwSetLogFunction ( DEFI_LOG_FUNCTION ); + +/* Routine to set the message logging routine for warnings */ +#ifndef DEFI_WARNING_LOG_FUNCTION + typedef void (*DEFI_WARNING_LOG_FUNCTION)(const char*); +#endif + +extern void defwSetWarningLogFunction( DEFI_WARNING_LOG_FUNCTION ); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/def/def/lex.h b/lefdef/src/def/def/lex.h new file mode 100644 index 00000000..cb4820a0 --- /dev/null +++ b/lefdef/src/def/def/lex.h @@ -0,0 +1,46 @@ +/******************************************************************************* + ******************************************************************************* + * Copyright 2014, Cadence Design Systems + * + * This file is part of the Cadence LEF/DEF Open Source + * Distribution, Product Version 5.8. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. + * + * For updates, support, or to become part of the LEF/DEF Community, + * check www.openeda.org for details. + ******************************************************************************* + * + * $Author: dell $ + * $Revision: #1 $ + * $Date: 2017/06/06 $ + * $State: $ + ******************************************************************************/ + +#include "defiKRDefs.hpp" +#include "defrData.hpp" + + +BEGIN_LEFDEF_PARSER_NAMESPACE + +extern void lex_init(); +extern void lex_un_init(); +extern int defyyparse(defrData *data); + +void AddStringDefine(char *token, char *string); +void AddBooleanDefine(char *token, int val); +void AddNumDefine(char *token, double val); + +int fake_ftell(); + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/def/defdiff/CMakeLists.txt b/lefdef/src/def/defdiff/CMakeLists.txt new file mode 100644 index 00000000..929acb51 --- /dev/null +++ b/lefdef/src/def/defdiff/CMakeLists.txt @@ -0,0 +1,13 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + include_directories ( ${LEFDEF_SOURCE_DIR}/src/def/def + ) + + set ( cpps diffDefRW.cpp + differDef.cpp + ) + + add_executable ( defdiff ${cpps} ) + target_link_libraries ( defdiff def ) + + install ( TARGETS defdiff DESTINATION bin ) diff --git a/lefdef/src/def/defdiff/Makefile b/lefdef/src/def/defdiff/Makefile new file mode 100644 index 00000000..49f2d3c6 --- /dev/null +++ b/lefdef/src/def/defdiff/Makefile @@ -0,0 +1,16 @@ +FAKE_ALL: all + +BINTARGET = defdiff + +HEADERS = \ + diffDefRW.hpp + +PUBLIC_HDRS = + +LDLIBS = ../lib/libdef.a + +BINSRCS = \ + diffDefRW.cpp \ + differDef.cpp + +include ../template.mk diff --git a/lefdef/src/def/defdiff/diffDefRW.cpp b/lefdef/src/def/defdiff/diffDefRW.cpp new file mode 100644 index 00000000..1beb088b --- /dev/null +++ b/lefdef/src/def/defdiff/diffDefRW.cpp @@ -0,0 +1,2253 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2014 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +// This program is the diffDef core program. It has all the callback +// routines and write it out to a temporary file. + +#include +#include +#include +#include +#ifndef WIN32 +# include +#endif /* not WIN32 */ +#include "defrReader.hpp" + + +char defaultName[64]; +char defaultOut[64]; +static int ignorePE = 0; +static int ignoreRN = 0; +static int ignoreVN = 0; +static int netSeCmp = 0; + +// Global variables +FILE* fout; +void *userData; +int numObjs; +int isSumSet; // to keep track if within SUM +int isProp = 0; // for PROPDEF +int begOperand; // to keep track for constraint, to print - as the 1st char +static double curVer = 5.7; + +// TX_DIR:TRANSLATION ON + +void dataError() { + fprintf(fout, "ERROR: returned user data is not correct!\n"); +} + + +void checkType(defrCallbackType_e c) { + if (c >= 0 && c <= defrDesignEndCbkType) { + // OK + } else { + fprintf(fout, "ERROR: callback type is out of bounds!\n"); + } +} + +// 05/24/2001 - Wanda da Rosa. PCR 373170 +// This function is added due to the rounding between machines are +// different. For a 5, solaries will round down while hppa will roundup. +// This function will make sure it round up for all the machine +double checkDouble(double num) { + long tempNum; + if ((num > 1000004) || (num < -1000004)) { + tempNum = (long)num; + if ((tempNum%5) == 0) + return num + 3; + } + return num; +} + +int compMSL(defrCallbackType_e c, defiComponentMaskShiftLayer* co, defiUserData ud) { + int i; + + checkType(c); + if (ud != userData) dataError(); + + if (co->numMaskShiftLayers()) { + fprintf(fout, "\nCOMPONENTMASKSHIFT "); + + for (i = 0; i < co->numMaskShiftLayers(); i++) { + fprintf(fout, "%s ", co->maskShiftLayer(i)); + } + fprintf(fout, ";\n"); + } + + return 0; +} + + +// Component +int compf(defrCallbackType_e c, defiComponent* co, defiUserData ud) { + int i; + + checkType(c); + if (ud != userData) dataError(); +// missing GENERATE, FOREIGN + fprintf(fout, "COMP %s %s", co->id(), co->name()); + if (co->hasNets()) { + for (i = 0; i < co->numNets(); i++) + fprintf(fout, " %s", co->net(i)); + fprintf(fout,"\n"); + } else + fprintf(fout,"\n"); + if (co->isFixed()) + fprintf(fout, "COMP %s FIXED ( %d %d ) %s\n", co->id(), + co->placementX(), co->placementY(), co->placementOrientStr()); + if (co->isCover()) + fprintf(fout, "COMP %s COVER ( %d %d ) %s\n", co->id(), + co->placementX(), co->placementY(), co->placementOrientStr()); + if (co->isPlaced()) + fprintf(fout,"COMP %s PLACED ( %d %d ) %s\n", co->id(), + co->placementX(), co->placementY(), co->placementOrientStr()); + if (co->isUnplaced()) + fprintf(fout,"COMP %s UNPLACED\n", co->id()); + if (co->hasSource()) + fprintf(fout, "COMP %s SOURCE %s\n", co->id(), co->source()); + if (co->hasGenerate()) + fprintf(fout, "COMP %s GENERATE %s %s\n", co->id(), + co->generateName(), co->macroName()); + if (co->hasHalo()) { + int left, bottom, right, top; + (void) co->haloEdges(&left, &bottom, &right, &top); + fprintf(fout, "COMP %s HALO", co->id()); + if (co->hasHaloSoft()) + fprintf(fout, " SOFT"); + fprintf(fout, " %d %d %d %d\n", left, bottom, right, top); + + } + if (co->hasRouteHalo()) { + fprintf(fout, "COMP %s ROUTEHALO %d %s %s\n", co->id(), + co->haloDist(), co->minLayer(), co->maxLayer()); + } + if (co->hasForeignName()) + fprintf(fout, "COMP %s FOREIGN %s %d %d %s\n", co->id(), + co->foreignName(), co->foreignX(), co->foreignY(), + co->foreignOri()); + if (co->hasWeight()) + fprintf(fout, "COMP %s WEIGHT %d\n", co->id(), co->weight()); + if (co->hasEEQ()) + fprintf(fout, "COMP %s EEQMASTER %s\n", co->id(), co->EEQ()); + if (co->hasRegionName()) + fprintf(fout, "COMP %s REGION %s\n", co->id(), co->regionName()); + if (co->hasRegionBounds()) { + int *xl, *yl, *xh, *yh; + int size; + co->regionBounds(&size, &xl, &yl, &xh, &yh); + for (i = 0; i < size; i++) { + fprintf(fout, "COMP %s REGION ( %d %d ) ( %d %d )\n", co->id(), + xl[i], yl[i], xh[i], yh[i]); + } + } + if (co->maskShiftSize()) { + fprintf(fout, "MASKSHIFT "); + + for (int i = co->maskShiftSize()-1; i >= 0; i--) { + fprintf(fout, "%d", co->maskShift(i)); + } + fprintf(fout, "\n"); + } + if (co->numProps()) { + for (i = 0; i < co->numProps(); i++) { + fprintf(fout, "COMP %s PROP %s %s ", co->id(), + co->propName(i), + co->propValue(i)); + switch (co->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INT "); + break; + case 'S': fprintf(fout, "STR "); + break; + case 'Q': fprintf(fout, "QSTR "); + break; + case 'N': fprintf(fout, "NUM "); + break; + } + fprintf(fout, "\n"); + } + } + + --numObjs; + return 0; +} + +// Net +int netf(defrCallbackType_e c, defiNet* net, defiUserData ud) { + // For net and special net. + int i, j, k, w, x, y, z, px, py, pz; + defiPath* p; + defiSubnet* s; + int path; + defiVpin *vpin; + defiShield* noShield; + defiWire* wire; + int nline; + const char* layerName = "N/A"; + + checkType(c); + if (ud != userData) dataError(); + if (c != defrNetCbkType) + fprintf(fout, "BOGUS NET TYPE "); + if (net->pinIsMustJoin(0)) + fprintf(fout, "NET MUSTJOIN "); + else + fprintf(fout, "NET %s ", net->name()); + + // compName & pinName + for (i = 0; i < net->numConnections(); i++) { + fprintf(fout, "\nNET %s ( %s %s ) ", net->name(), net->instance(i), + net->pin(i)); + } + + if (net->hasNonDefaultRule()) + fprintf(fout, "\nNET %s NONDEFAULTRULE %s", net->name(), + net->nonDefaultRule()); + + for (i = 0; i < net->numVpins(); i++) { + vpin = net->vpin(i); + fprintf(fout, "\nNET %s %s", net->name(), vpin->name()); + if (vpin->layer()) + fprintf(fout, " %s", vpin->layer()); + fprintf(fout, " %d %d %d %d", vpin->xl(), vpin->yl(), vpin->xh(), + vpin->yh()); + if (vpin->status() != ' ') { + switch (vpin->status()) { + case 'P': + case 'p': + fprintf(fout, " PLACED"); + break; + case 'F': + case 'f': + fprintf(fout, " FIXED"); + break; + case 'C': + case 'c': + fprintf(fout, " COVER"); + break; + } + fprintf(fout, " %d %d", vpin->xLoc(), vpin->yLoc()); + if (vpin->orient() != -1) + fprintf(fout, " %s", vpin->orientStr()); + } + } + + // regularWiring + if (net->numWires()) { + for (i = 0; i < net->numWires(); i++) { + wire = net->wire(i); + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->initTraverse(); + fprintf(fout, "\nNET %s %s", net->name(), wire->wireType()); + nline = 0; + while ((path = (int)p->next()) != DEFIPATH_DONE) { + switch (path) { + case DEFIPATH_LAYER: + if (!netSeCmp) + fprintf(fout, " %s", p->getLayer()); + layerName = p->getLayer(); + px = py = pz = -99; // reset the 1 set of point to 0 + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_VIA: + if (!netSeCmp) { + if (!ignoreVN) + fprintf(fout, " %s", p->getVia()); + } else { + if (nline) { + if (!ignoreVN) + fprintf(fout, "\nNET %s %s ( %d %d ) %s", net->name(), + wire->wireType(), px, py, p->getVia()); + else + fprintf(fout, "\nNET %s %s ( %d %d )", net->name(), + wire->wireType(), px, py); + } else { + if (!ignoreVN) + fprintf(fout, " ( %d %d ) %s", px, py, p->getVia()); + else + fprintf(fout, " ( %d %d )", px, py); + } + px = py = pz = -99; // reset the 1 set of point to 0 + } + nline = 1; + break; + case DEFIPATH_RECT: + p->getViaRect(&w, &x, &y, &z); + fprintf(fout, "RECT ( %d %d %d %d ) ", w, x, y, z); + break; + case DEFIPATH_VIRTUALPOINT: + p->getVirtualPoint(&x, &y); + fprintf(fout, "VIRTUAL ( %d %d ) ", x, y); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%d ",p->getViaRotation()); + nline = 1; + break; + case DEFIPATH_WIDTH: + fprintf(fout, " %d ", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + if (!netSeCmp) { + if (!nline) { + fprintf(fout, " ( %d %d )", x, y); + nline = 1; + } else { + fprintf(fout, "\nNET %s %s %s ( %d %d )", net->name(), + wire->wireType(), layerName, x, y); + } + } else { + if ((px == -99) && (py == -99)) { + px = x; + py = y; + } else { + if (nline) + fprintf(fout, "\nNET %s %s %s", net->name(), + wire->wireType(), layerName); + if (px < x) { + fprintf (fout, " ( %d %d ) ( %d %d )", px, py, x, y); + } else if (px == x) { + if (py < y) + fprintf (fout, " ( %d %d ) ( %d %d )", + px, py, x, y); + else + fprintf (fout, " ( %d %d ) ( %d %d )", + x, y, px, py); + } else { // px > x + fprintf (fout, " ( %d %d ) ( %d %d )", x, y, px, py); + } + px = x; + py = y; + nline = 1; + } + } + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + if (!netSeCmp) { + if (!nline) { + fprintf(fout, " ( %d %d %d )", x, y, z); + } else { + fprintf(fout, "\nNET %s %s %s ( %d %d %d )", net->name(), + wire->wireType(), layerName, x, y, z); + } + } else { + if ((px == -99) && (py == -99) && (pz == -99)) { + px = x; + py = y; + pz = z; + } else { + if (nline) + fprintf(fout, "\nNET %s %s %s", net->name(), + wire->wireType(), layerName); + if (px < x) { + if (pz != -99) + fprintf (fout, " ( %d %d %d ) ( %d %d %d )", + px, py, pz, x, y, z); + else + fprintf (fout, " ( %d %d ) ( %d %d %d )", + px, py, x, y, z); + } else if (px == x) { + if (py < y) { + if (pz != -99) + fprintf (fout, " ( %d %d %d ) ( %d %d %d )", + px, py, pz, x, y, z); + else + fprintf (fout, " ( %d %d ) ( %d %d %d )", + px, py, x, y, z); + } else { + if (pz != -99) + fprintf (fout, " ( %d %d %d ) ( %d %d %d )", + x, y, z, px, py, pz); + else + fprintf (fout, " ( %d %d %d ) ( %d %d )", + x, y, z, px, py); + } + } else { // px > x + if (pz != -99) + fprintf (fout, " ( %d %d %d ) ( %d %d %d )", + x, y, z, px, py, pz); + else + fprintf (fout, " ( %d %d %d ) ( %d %d )", + x, y, z, px, py); + } + px = x; + py = y; + pz = z; + nline = 1; + } + } + break; + case DEFIPATH_TAPER: + fprintf(fout, " TAPER"); + break; + case DEFIPATH_TAPERRULE: + fprintf(fout, " TAPERRULE %s",p->getTaperRule()); + break; + } + } + } + } + } + + // shieldnet + if (net->numShieldNets()) { + for (i = 0; i < net->numShieldNets(); i++) + fprintf(fout, "\nNET %s SHIELDNET %s ", net->name(), + net->shieldNet(i)); + } + if (net->numNoShields()) { + for (i = 0; i < net->numNoShields(); i++) { + noShield = net->noShield(i); + for (j = 0; j < noShield->numPaths(); j++) { + p = noShield->path(j); + p->initTraverse(); + fprintf(fout, "\nNET %s NOSHIELD", net->name()); + nline = 0; + while ((path = (int)p->next()) != DEFIPATH_DONE) { + switch (path) { + case DEFIPATH_LAYER: + fprintf(fout, " %s", p->getLayer()); + layerName = p->getLayer(); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_VIA: + if (!ignoreVN) + fprintf(fout, " %s", p->getVia()); + nline = 1; + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, " %d", p->getViaRotation()); + nline = 1; + break; + case DEFIPATH_WIDTH: + fprintf(fout, " %d", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + if (!nline) { + fprintf(fout, " ( %d %d )", x, y); + nline = 1; + } else { + fprintf(fout, "\nNET %s %s ( %d %d )", + net->name(), layerName, x, y); + nline = 1; + } + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + if (!nline) { + fprintf(fout, " ( %d %d )", x, y); + nline = 1; + } else { + fprintf(fout, "\nNET %s %s ( %d %d )", + net->name(), layerName, x, y); + nline = 1; + } + case DEFIPATH_TAPER: + fprintf(fout, " TAPER"); + break; + case DEFIPATH_TAPERRULE: + fprintf(fout, " TAPERRULE %s", + p->getTaperRule()); + break; + } + } + } + } + } + + if (net->hasSubnets()) { + for (i = 0; i < net->numSubnets(); i++) { + s = net->subnet(i); + + if (s->numConnections()) { + for (j = 0; j < s->numConnections(); j++) { + if (s->pinIsMustJoin(0)) + fprintf(fout, "\nNET MUSTJOIN"); + else + fprintf(fout, "\nNET %s", s->name()); + fprintf(fout, " ( %s %s )", s->instance(j), s->pin(j)); + } + } + + for (j = 0; j < s->numWires(); j++) { + wire = s->wire(j); + if (s->numPaths()) { + for (k = 0; k < wire->numPaths(); k++) { + int elem; + p = wire->path(k); + p->initTraverse(); + fprintf(fout, "\nNET %s %s", s->name(), wire->wireType()); + nline = 0; + elem = p->next(); + while (elem) { + switch (elem) { + case DEFIPATH_LAYER: + fprintf(fout, " LAYER %s", p->getLayer()); + layerName = p->getLayer(); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_VIA: + if (!ignoreVN) + fprintf(fout, " VIA %s", p->getVia()); + nline = 1; + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, " VIAROTATION %d", p->getViaRotation()); + nline = 1; + break; + case DEFIPATH_WIDTH: + fprintf(fout, " WIDTH %d", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + if (!nline) { + fprintf(fout, " POINT %d %d", x, y); + nline = 1; + } else { + fprintf(fout, "\nNET %s %s %s POINT %d %d", + s->name(), wire->wireType(), layerName, x, y); + nline = 1; + } + break; + //case DEFIPATH_FLUSHPOINT: + //l = 0; + //p->getFlushPoint(i1, i2, ext); + //while (i1[l] && i2[l] && ext[l]) { + //fprintf(fout, "NET %s FLUSHPOINT %d %d %d\n", + //s->name(), i1[l], i2[l], ext[l]); + //l++; + //} + //break; + case DEFIPATH_TAPERRULE: + fprintf(fout, " TAPERRULE %s", p->getTaperRule()); + break; + case DEFIPATH_SHAPE: + fprintf(fout, " SHAPE %s", p->getShape()); + break; + case DEFIPATH_STYLE: + fprintf(fout, " STYLE %d", p->getStyle()); + break; + } + elem = p->next(); + } + } + } + } + } + } + + /* Put the following all in one line */ + if (net->hasWeight() || net->hasCap() || net->hasSource() || + net->hasPattern() || net->hasOriginal() || net->hasUse()) { + fprintf(fout, "\nNET %s ", net->name()); + + if (net->hasWeight()) + fprintf(fout, "WEIGHT %d ", net->weight()); + if (net->hasCap()) + fprintf(fout, "ESTCAP %g ", checkDouble(net->cap())); + if (net->hasSource()) + fprintf(fout, "SOURCE %s ", net->source()); + if (net->hasFixedbump()) + fprintf(fout, "FIXEDBUMP "); + if (net->hasFrequency()) + fprintf(fout, "FREQUENCY %g ", net->frequency()); + if (net->hasPattern()) + fprintf(fout, "PATTERN %s ", net->pattern()); + if (net->hasOriginal()) + fprintf(fout, "ORIGINAL %s ", net->original()); + if (net->hasUse()) + fprintf(fout, "USE %s ", net->use()); + } + + fprintf (fout, "\n"); + --numObjs; + return 0; +} + + +// Special Net +int snetf(defrCallbackType_e c, defiNet* net, defiUserData ud) { + // For net and special net. + int i, j, x, y, z; + char *layerName; + double dist, left, right; + defiPath *p; + defiSubnet *s; + int path; + defiShield* shield; + defiWire *wire; + int nline; + const char* sNLayerName = "N/A"; + int numX, numY, stepX, stepY; + + checkType(c); + if (ud != userData) dataError(); + if (c != defrSNetCbkType) + fprintf(fout, "BOGUS NET TYPE "); + + // compName & pinName + if (net->numConnections() > 0) { + for (i = 0; i < net->numConnections(); i++) + fprintf (fout, "SNET %s ( %s %s )\n", net->name(), net->instance(i), + net->pin(i)); + } + + if (net->numRectangles()) { // 5.6 + + for (i = 0; i < net->numRectangles(); i++) { + if (curVer >= 5.8 ) { + fprintf (fout, "\nSNET %s ", net->name()); + if (strcmp(net->rectRouteStatus(i), "") != 0) { + fprintf(fout, "%s ", net->rectRouteStatus(i)); + if (strcmp(net->rectRouteStatus(i), "SHIELD") == 0) { + fprintf(fout, "%s ", net->rectRouteStatusShieldName(i)); + } + } + if (strcmp(net->rectShapeType(i), "") != 0) { + fprintf(fout, "SHAPE %s ", net->rectShapeType(i)); + } + } + if (net->rectMask(i)) { + fprintf(fout, "MASK %d RECT %s %d %d %d %d", + net->rectMask(i), net->rectName(i), + net->xl(i), net->yl(i), net->xh(i), + net->yh(i)); + } else { + fprintf(fout, "RECT %s %d %d %d %d", net->name(), + net->xl(i), net->yl(i), net->xh(i), + net->yh(i)); + } + } + } + + if (net->numPolygons()) { + struct defiPoints points; + + for (i = 0; i < net->numPolygons(); i++) { + fprintf (fout, "\nSNET %s ", net->name()); + if (curVer >= 5.8 ) { + if (strcmp(net->polyRouteStatus(i), "") != 0) { + fprintf(fout, "%s ", net->polyRouteStatus(i)); + if (strcmp(net->polyRouteStatus(i), "SHIELD") == 0) { + fprintf(fout, "%s ", net->polyRouteStatusShieldName(i)); + } + } + if (strcmp(net->polyShapeType(i), "") != 0) { + fprintf(fout, "SHAPE %s ", net->polyShapeType(i)); + } + } + if (net->polyMask(i)) { + fprintf(fout, "MASK %d POLYGON % s ", + net->polyMask(i), + net->polygonName(i)); + } else { + fprintf(fout, "POLYGON %s", net->polygonName(i)); + } + + points = net->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, " %d %d", points.x[j], points.y[j]); + } + } + + if (curVer >= 5.8 && net->numViaSpecs()) { + for (i = 0; i < net->numViaSpecs(); i++) { + fprintf (fout, "\nSNET %s ", net->name()); + if (strcmp(net->viaRouteStatus(i), "") != 0) { + fprintf(fout, "%s ", net->viaRouteStatus(i)); + if (strcmp(net->viaRouteStatus(i), "SHIELD") == 0) { + fprintf(fout, "%s ", net->viaRouteStatusShieldName(i)); + } + } + if (strcmp(net->viaShapeType(i), "") != 0) { + fprintf(fout, "SHAPE %s ", net->viaShapeType(i)); + } + if (net->topMaskNum(i) || net->cutMaskNum(i) || net->bottomMaskNum(i)) { + fprintf(fout, "MASK %d%d%d VIA %s ", net->topMaskNum(i), + net->cutMaskNum(i), + net->bottomMaskNum(i), + net->viaName(i)); + } else { + fprintf(fout, "\n VIA %s ", net->viaName(i)); + } + fprintf(fout, " %s", net->viaOrientStr(i)); + + defiPoints points = net->getViaPts(i); + + for (int j = 0; j < points.numPoints; j++) { + fprintf(fout, " %d %d", points.x[j], points.y[j]); + } + fprintf(fout, ";\n"); + } + } + + + // specialWiring + if (net->numWires()) { + for (i = 0; i < net->numWires(); i++) { + wire = net->wire(i); + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + fprintf(fout, "\nSNET %s %s", net->name(), wire->wireType()); + nline = 0; + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + switch (path) { + case DEFIPATH_LAYER: + fprintf(fout, " %s", p->getLayer()); + sNLayerName = p->getLayer(); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_VIA: + if (!ignoreVN) + fprintf(fout, " %s", p->getVia()); + nline = 1; + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, " %d", p->getViaRotation()); + nline = 1; + break; + case DEFIPATH_VIADATA: + p->getViaData(&numX, &numY, &stepX, &stepY); + fprintf(fout, " DO %d BY %d STEP %d %d", numX, numY, + stepX, stepY); + nline = 1; + break; + case DEFIPATH_WIDTH: + fprintf(fout, " %d", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + if (!nline) { + fprintf(fout, " ( %d %d ) ", x, y); + nline = 1; + } else { + fprintf(fout, "\nSNET %s %s %s ( %d %d )", net->name(), + wire->wireType(), sNLayerName, x, y); + nline = 1; + } + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + nline = 1; + break; + case DEFIPATH_TAPER: + fprintf(fout, " TAPER"); + break; + case DEFIPATH_SHAPE: + fprintf(fout, " + SHAPE %s", p->getShape()); + break; + case DEFIPATH_STYLE: + fprintf(fout, " + STYLE %d", p->getStyle()); + break; + } + } + } + } + } + + if (net->hasSubnets()) { + for (i = 0; i < net->numSubnets(); i++) { + s = net->subnet(i); + if (s->numConnections()) { + if (s->pinIsMustJoin(0)) + fprintf(fout, "\nSNET %s MUSTJOIN", net->name()); + else + fprintf(fout, "\nSNET %s", net->name()); + for (j = 0; j < s->numConnections(); j++) { + fprintf(fout, "( %s %s ) ", s->instance(j), s->pin(j)); + } + } + + // regularWiring + if (s->numWires()) { + for (i = 0; i < s->numWires(); i++) { + wire = s->wire(i); + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->initTraverse(); + fprintf(fout, "\nSNET %s %s", net->name(), wire->wireType()); + nline = 0; + while ((path = (int)p->next()) != DEFIPATH_DONE) { + switch (path) { + case DEFIPATH_LAYER: + fprintf(fout, " %s", p->getLayer()); + sNLayerName = p->getLayer(); + break; + case DEFIPATH_VIA: + if (!ignoreVN) + fprintf(fout, " %s", p->getVia()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + + case DEFIPATH_VIAROTATION: + fprintf(fout, " %d", p->getViaRotation()); + break; + case DEFIPATH_WIDTH: + fprintf(fout, " %d", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + if (!nline) { + fprintf(fout, "( %d %d ) ", x, y); + nline = 1; + } else { + fprintf(fout, "\nSNET %s %s %s ( %d %d ) ", + net->name(), wire->wireType(), sNLayerName, + x, y); + nline = 1; + } + break; + case DEFIPATH_TAPER: + fprintf(fout, " TAPER"); + break; + } + } + } + } + } + } + } + + if (net->numProps()) { + for (i = 0; i < net->numProps(); i++) { + fprintf(fout, "\nSNET %s PROP %s %s ", net->name(), + net->propName(i), net->propValue(i)); + switch (net->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INT "); + break; + case 'S': fprintf(fout, "STR "); + break; + case 'Q': fprintf(fout, "QSTR "); + break; + case 'N': fprintf(fout, "NUM "); + break; + } + } + } + + // SHIELD + // testing the SHIELD for 5.3 + if (net->numShields()) { + for (i = 0; i < net->numShields(); i++) { + shield = net->shield(i); + for (j = 0; j < shield->numPaths(); j++) { + p = shield->path(j); + fprintf(fout, "\nSNET %s SHIELD %s", net->name(), + shield->shieldName()); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + switch (path) { + case DEFIPATH_LAYER: + fprintf(fout, " %s", p->getLayer()); + sNLayerName = p->getLayer(); + break; + case DEFIPATH_VIA: + if (!ignoreVN) + fprintf(fout, " %s", p->getVia()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, " %d", p->getViaRotation()); + break; + case DEFIPATH_WIDTH: + fprintf(fout, " %d", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + if (!nline) { + fprintf(fout, "( %d %d ) ", x, y); + nline = 1; + } else { + fprintf(fout, "\nSNET %s SHIELD %s %s ( %d %d )", + net->name(), shield->shieldName(), sNLayerName, + x, y); + } + break; + case DEFIPATH_TAPER: + fprintf(fout, " TAPER"); + break; + } + } + } + } + } + + // layerName width + if (net->hasWidthRules()) { + fprintf(fout, "\nSNET %s", net->name()); + for (i = 0; i < net->numWidthRules(); i++) { + net->widthRule(i, &layerName, &dist); + fprintf (fout, " WIDTH %s %g ", layerName, checkDouble(dist)); + } + } + + // layerName spacing + if (net->hasSpacingRules()) { + fprintf(fout, "\nSNET %s", net->name()); + for (i = 0; i < net->numSpacingRules(); i++) { + net->spacingRule(i, &layerName, &dist, &left, &right); + if (left == right) + fprintf (fout, " SPACING %s %g ", layerName, checkDouble(dist)); + else + fprintf (fout, " SPACING %s %g RANGE %g %g ", + layerName, checkDouble(dist), checkDouble(left), + checkDouble(right)); + } + } + + if (net->hasVoltage() || net->hasWeight() || net->hasCap() || + net->hasSource() || net->hasPattern() || net->hasOriginal() || + net->hasUse()) { + fprintf(fout, "\nSNET %s", net->name()); + if (net->hasVoltage()) + fprintf(fout, " VOLTAGE %g", checkDouble(net->voltage())); + if (net->hasWeight()) + fprintf(fout, " WEIGHT %d", net->weight()); + if (net->hasCap()) + fprintf(fout, " ESTCAP %g", checkDouble(net->cap())); + if (net->hasSource()) + fprintf(fout, " SOURCE %s", net->source()); + if (net->hasPattern()) + fprintf(fout, " PATTERN %s", net->pattern()); + if (net->hasOriginal()) + fprintf(fout, " ORIGINAL %s", net->original()); + if (net->hasUse()) + fprintf(fout, " USE %s", net->use()); + } + + fprintf(fout,"\n"); + --numObjs; + return 0; +} + +int ndr(defrCallbackType_e c, defiNonDefault* nd, defiUserData ud) { + // For nondefaultrule + int i; + + checkType(c); + if (ud != userData) dataError(); + if (c != defrNonDefaultCbkType) + fprintf(fout, "BOGUS NONDEFAULTRULE TYPE "); + fprintf(fout, "NDR %s", nd->name()); + if (nd->hasHardspacing()) + fprintf(fout, " HARDSPACING\n"); + fprintf(fout, "\n"); + for (i = 0; i < nd->numLayers(); i++) { + fprintf(fout, "NDR %s LAYER %s", nd->name(), nd->layerName(i)); + fprintf(fout, " WIDTH %d", nd->layerWidthVal(i)); + if (nd->hasLayerDiagWidth(i)) + fprintf(fout, " DIAGWIDTH %d", + nd->layerDiagWidthVal(i)); + if (nd->hasLayerSpacing(i)) + fprintf(fout, " SPACING %d", nd->layerSpacingVal(i)); + if (nd->hasLayerWireExt(i)) + fprintf(fout, " WIREEXT %d", nd->layerWireExtVal(i)); + fprintf(fout, "\n"); + } + for (i = 0; i < nd->numVias(); i++) + fprintf(fout, "NDR %s VIA %s\n", nd->name(), nd->viaName(i)); + for (i = 0; i < nd->numViaRules(); i++) + fprintf(fout, "NDR %s VIARULE %s\n", nd->name(), nd->viaRuleName(i)); + for (i = 0; i < nd->numMinCuts(); i++) + fprintf(fout, "NDR %s MINCUTS %s %d\n", nd->name(), nd->cutLayerName(i), + nd->numCuts(i)); + for (i = 0; i < nd->numProps(); i++) + fprintf(fout, "NDR %s PROPERTY %s %s\n", nd->name(), nd->propName(i), + nd->propValue(i)); + --numObjs; + return 0; +} + +// Technology +int tname(defrCallbackType_e c, const char* string, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "TECHNOLOGY %s\n", string); + return 0; +} + +// Design +int dname(defrCallbackType_e c, const char* string, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "DESIGN %s\n", string); + + return 0; +} + + +char* address(const char* in) { + return ((char*)in); +} + +// Assertion or Constraints +void operand(defrCallbackType_e c, defiAssertion* a, int ind) { + int i, first = 1; + char* netName; + char* fromInst, * fromPin, * toInst, * toPin; + + if (a->isSum()) { + // Sum in operand, recursively call operand + fprintf(fout, "ASSERTIONS/CONSTRAINTS SUM ( "); + a->unsetSum(); + isSumSet = 1; + begOperand = 0; + operand (c, a, ind); + fprintf(fout, ") "); + } else { + // operand + if (ind >= a->numItems()) { + fprintf(fout, "ERROR: when writing out SUM in Constraints.\n"); + return; + } + if (begOperand) { + fprintf(fout, "ASSRT/CONSTR "); + begOperand = 0; + } + for (i = ind; i < a->numItems(); i++) { + if (a->isNet(i)) { + a->net(i, &netName); + if (!first) + fprintf(fout, ", "); // print , as separator + fprintf(fout, "NET %s ", netName); + } else if (a->isPath(i)) { + a->path(i, &fromInst, &fromPin, &toInst, + &toPin); + if (!first) + fprintf(fout, ", "); + fprintf(fout, "PATH %s %s %s %s ", fromInst, fromPin, toInst, + toPin); + } else if (isSumSet) { + // SUM within SUM, reset the flag + a->setSum(); + operand(c, a, i); + } + first = 0; + } + + } +} + +// Assertion or Constraints +int constraint(defrCallbackType_e c, defiAssertion* a, defiUserData ud) { + // Handles both constraints and assertions + + checkType(c); + if (ud != userData) dataError(); + if (a->isWiredlogic()) + // Wirelogic + fprintf(fout, "ASSRT/CONSTR WIREDLOGIC %s + MAXDIST %g\n", + a->netName(), checkDouble(a->fallMax())); + else { + // Call the operand function + isSumSet = 0; // reset the global variable + begOperand = 1; + operand (c, a, 0); + // Get the Rise and Fall + if (a->hasRiseMax()) + fprintf(fout, " RISEMAX %g ", checkDouble(a->riseMax())); + if (a->hasFallMax()) + fprintf(fout, " FALLMAX %g ", checkDouble(a->fallMax())); + if (a->hasRiseMin()) + fprintf(fout, " RISEMIN %g ", checkDouble(a->riseMin())); + if (a->hasFallMin()) + fprintf(fout, " FALLMIN %g ", checkDouble(a->fallMin())); + fprintf(fout, "\n"); + } + --numObjs; + return 0; +} + + +// Property definitions +int prop(defrCallbackType_e c, defiProp* p, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + if (strcmp(p->propType(), "design") == 0) + fprintf(fout, "PROPDEF DESIGN %s ", p->propName()); + else if (strcmp(p->propType(), "net") == 0) + fprintf(fout, "PROPDEF NET %s ", p->propName()); + else if (strcmp(p->propType(), "component") == 0) + fprintf(fout, "PROPDEF COMP %s ", p->propName()); + else if (strcmp(p->propType(), "specialnet") == 0) + fprintf(fout, "PROPDEF SNET %s ", p->propName()); + else if (strcmp(p->propType(), "group") == 0) + fprintf(fout, "PROPDEF GROUP %s ", p->propName()); + else if (strcmp(p->propType(), "row") == 0) + fprintf(fout, "PROPDEF ROW %s ", p->propName()); + else if (strcmp(p->propType(), "componentpin") == 0) + fprintf(fout, "PROPDEF COMPPIN %s ", p->propName()); + else if (strcmp(p->propType(), "region") == 0) + fprintf(fout, "PROPDEF REGION %s ", p->propName()); + else if (strcmp(p->propType(), "nondefaultrule") == 0) + fprintf(fout, "PROPDEF NONDEFAULTRULE %s ", p->propName()); + if (p->dataType() == 'I') + fprintf(fout, "INT "); + if (p->dataType() == 'R') + fprintf(fout, "REAL "); + if (p->dataType() == 'S') + fprintf(fout, "STR "); + if (p->dataType() == 'Q') + fprintf(fout, "STR "); + if (p->hasRange()) { + fprintf(fout, "RANGE %g %g ", checkDouble(p->left()), + checkDouble(p->right())); + } + if (p->hasNumber()) + fprintf(fout, "%g ", checkDouble(p->number())); + if (p->hasString()) + fprintf(fout, "\"%s\" ", p->string()); + fprintf(fout, "\n"); + + return 0; +} + + +// History +int hist(defrCallbackType_e c, const char* h, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "HIST %s\n", h); + return 0; +} + + +// Busbitchars +int bbn(defrCallbackType_e c, const char* h, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "BUSBITCHARS \"%s\" \n", h); + return 0; +} + + +// Version +int vers(defrCallbackType_e c, double d, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "VERSION %g\n", d); + + curVer = d; + return 0; +} + + +// Units +int units(defrCallbackType_e c, double d, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "UNITS DISTANCE MICRONS %g\n", checkDouble(d)); + return 0; +} + + +// Casesensitive +int casesens(defrCallbackType_e c, int d, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + if (d == 1) + fprintf(fout, "NAMESCASESENSITIVE OFF\n", d); + else + fprintf(fout, "NAMESCASESENSITIVE ON\n", d); + return 0; +} + + +// Site, Canplace, Cannotoccupy, Diearea, Pin, Pincap, DefaultCap, +// Row, Gcellgrid, Track, Via, Scanchain, IOtiming, Flooplan, +// Region, Group, TiminDisable, Pin property +int cls(defrCallbackType_e c, void* cl, defiUserData ud) { + defiSite* site; // Site and Canplace and CannotOccupy + defiBox* box; // DieArea and + defiPinCap* pc; + defiPin* pin; + int i, j, k; + defiRow* row; + defiTrack* track; + defiGcellGrid* gcg; + defiVia* via; + defiRegion* re; + defiGroup* group; + defiComponentMaskShiftLayer* maskShiftLayer = NULL; + defiScanchain* sc; + defiIOTiming* iot; + defiFPC* fpc; + defiTimingDisable* td; + defiPartition* part; + defiPinProp* pprop; + defiBlockage* block; + defiSlot* slot; + defiFill* fill; + defiStyles* styles; + int xl, yl, xh, yh; + char *name, *a1, *b1; + char **inst, **inPin, **outPin; + int *bits; + int size; + int corner, typ; + const char *itemT; + char dir; + defiPinAntennaModel* aModel; + char *tmpPinName = NULL; + char *extraPinName = NULL; + char *pName = NULL; + char *tmpName = NULL; + struct defiPoints points; + + checkType(c); + if (ud != userData) dataError(); + switch (c) { + + case defrSiteCbkType : + site = (defiSite*)cl; + fprintf(fout, "SITE %s %g %g %s ", site->name(), + checkDouble(site->x_orig()), checkDouble(site->y_orig()), + site->orientStr()); + fprintf(fout, "DO %g BY %g STEP %g %g\n", + checkDouble(site->x_num()), checkDouble(site->y_num()), + checkDouble(site->x_step()), checkDouble(site->y_step())); + break; + case defrCanplaceCbkType : + site = (defiSite*)cl; + fprintf(fout, "CANPLACE %s %g %g %s ", site->name(), + checkDouble(site->x_orig()), checkDouble(site->y_orig()), + site->orientStr()); + fprintf(fout, "DO %g BY %g STEP %g %g\n", + checkDouble(site->x_num()), checkDouble(site->y_num()), + checkDouble(site->x_step()), checkDouble(site->y_step())); + break; + case defrCannotOccupyCbkType : + site = (defiSite*)cl; + fprintf(fout, "CANNOTOCCUPY %s %g %g %s ", + site->name(), checkDouble(site->x_orig()), + checkDouble(site->y_orig()), site->orientStr()); + fprintf(fout, "DO %g BY %g STEP %g %g\n", + checkDouble(site->x_num()), checkDouble(site->y_num()), + checkDouble(site->x_step()), checkDouble(site->y_step())); + break; + case defrDieAreaCbkType : + box = (defiBox*)cl; + fprintf(fout, "DIEAREA"); + points = box->getPoint(); + for (i = 0; i < points.numPoints; i++) + fprintf(fout, " %d %d", points.x[i], points.y[i]); + fprintf(fout, "\n"); + break; + case defrPinCapCbkType : + pc = (defiPinCap*)cl; + fprintf(fout, "DEFCAP MINPINS %d WIRECAP %g\n", pc->pin(), + checkDouble(pc->cap())); + --numObjs; + break; + case defrPinCbkType : + pin = (defiPin*)cl; + pName = strdup((char*)pin->pinName()); // get the pinName + // check if there has .extra in the pName and ignorePE + // is set to 1 + if (ignorePE) { + // check if .extra is in the name, if it is, ignore it + if ((extraPinName = strstr(pName, ".extra")) == NULL) + tmpPinName = pName; + else { + // make sure name ends with .extraNNN + tmpName = extraPinName; + extraPinName = extraPinName + 6; + *tmpName = '\0'; + tmpPinName = pName; + if (extraPinName != NULL) { + while (*extraPinName != '\0' && *extraPinName != '\n') { + if (isdigit(*extraPinName++)) + continue; + else { // Name does not end only .extraNNN + tmpPinName = strdup(pin->pinName()); + break; + } + } + } + } + } else + tmpPinName = pName; + fprintf(fout, "PIN %s + NET %s ", tmpPinName, + pin->netName()); + if (pin->hasDirection()) + fprintf(fout, "+ DIRECTION %s ", pin->direction()); + if (pin->hasUse()) + fprintf(fout, "+ USE %s ", pin->use()); + if (pin->hasNetExpr()) + fprintf(fout, "+ NETEXPR %s", pin->netExpr()); + if (pin->hasSupplySensitivity()) + fprintf(fout, "+ SUPPLYSENSITIVITY %s ", pin->supplySensitivity()); + if (pin->hasGroundSensitivity()) + fprintf(fout, "+ GROUNDSENSITIVITY %s ", pin->groundSensitivity()); + if (pin->hasLayer()) { + for (i = 0; i < pin->numLayer(); i++) { + fprintf(fout, "+ LAYER %s ", pin->layer(i)); + if (pin->layerMask(i)) + fprintf(fout, "MASK %d ", + pin->layerMask(i)); + if (pin->hasLayerSpacing(i)) + fprintf(fout, "SPACING %d ", + pin->layerSpacing(i)); + if (pin->hasLayerDesignRuleWidth(i)) + fprintf(fout, "DESIGNRULEWIDTH %d ", + pin->layerDesignRuleWidth(i)); + pin->bounds(i, &xl, &yl, &xh, &yh); + fprintf(fout, "( %d %d ) ( %d %d ) ", xl, yl, xh, yh); + } + for (i = 0; i < pin->numPolygons(); i++) { + fprintf(fout, "+ POLYGON %s", pin->polygonName(i)); + if (pin->polygonMask(i)) + fprintf(fout, "MASK %d ", + pin->polygonMask(i)); + if (pin->hasPolygonSpacing(i)) + fprintf(fout, "SPACING %d ", + pin->polygonSpacing(i)); + if (pin->hasPolygonDesignRuleWidth(i)) + fprintf(fout, "DESIGNRULEWIDTH %d ", + pin->polygonDesignRuleWidth(i)); + points = pin->getPolygon(i); + for (k = 0; k < points.numPoints; k++) + fprintf(fout, " %d %d", points.x[k], points.y[k]); + } + for (i = 0; i < pin->numVias(); i++) { + if (pin->viaTopMask(i) || pin->viaCutMask(i) || pin->viaBottomMask(i)) { + fprintf(fout, "\nVIA %s MASK %d%d%d %d %d ", + pin->viaName(i), + pin->viaTopMask(i), + pin->viaCutMask(i), + pin->viaBottomMask(i), + pin->viaPtX(i), + pin->viaPtY(i)); + } else { + fprintf(fout, "\nVIA %s %d %d ", pin->viaName(i), + pin->viaPtX(i), pin->viaPtY(i)); + } + } + } + if (pin->hasPlacement()) { + if (pin->isPlaced()) + fprintf(fout, " PLACED "); + if (pin->isCover()) + fprintf(fout, " COVER "); + if (pin->isFixed()) + fprintf(fout, " FIXED "); + fprintf(fout, "( %d %d ) %s ", pin->placementX(), + pin->placementY(), pin->orientStr()); + } + if (pin->hasSpecial()) + fprintf(fout, " SPECIAL "); + fprintf(fout, "\n"); + + if (pin->hasPort()) { + struct defiPoints points; + defiPinPort* port; + for (j = 0; j < pin->numPorts(); j++) { + fprintf(fout, "PIN %s", tmpPinName); + port = pin->pinPort(j); + fprintf(fout, " + PORT"); + for (i = 0; i < port->numLayer(); i++) { + fprintf(fout, "+ LAYER %s", port->layer(i)); + if (port->layerMask(i)) + fprintf(fout, "MASK %d ", + port->layerMask(i)); + if (port->hasLayerSpacing(i)) + fprintf(fout, " SPACING %d", port->layerSpacing(i)); + if (port->hasLayerDesignRuleWidth(i)) + fprintf(fout, " DESIGNRULEWIDTH %d", + port->layerDesignRuleWidth(i)); + port->bounds(i, &xl, &yl, &xh, &yh); + fprintf(fout, " %d %d %d %d", xl, yl, xh, yh); + } + for (i = 0; i < port->numPolygons(); i++) { + fprintf(fout, " + POLYGON %s", port->polygonName(i)); + if (port->polygonMask(i)) + fprintf(fout, "MASK %d ", + port->polygonMask(i)); + if (port->hasPolygonSpacing(i)) + fprintf(fout, " SPACING %d", port->polygonSpacing(i)); + if (port->hasPolygonDesignRuleWidth(i)) + fprintf(fout, " DESIGNRULEWIDTH %d", + port->polygonDesignRuleWidth(i)); + points = port->getPolygon(i); + for (k = 0; k < points.numPoints; k++) + fprintf(fout, " %d %d", points.x[k], points.y[k]); + } + for (i = 0; i < port->numVias(); i++) { + if (port->viaTopMask(i) || port->viaCutMask(i) + || port->viaBottomMask(i)) { + fprintf(fout, "\n VIA %s MASK %d%d%d ( %d %d ) ", + port->viaName(i), + port->viaTopMask(i), + port->viaCutMask(i), + port->viaBottomMask(i), + port->viaPtX(i), + port->viaPtY(i)); + } else { + fprintf(fout, " VIA %s ( %d %d ) ", port->viaName(i), + port->viaPtX(i), port->viaPtY(i)); + } + } + if (port->hasPlacement()) { + if (port->isPlaced()) { + fprintf(fout, " + PLACED"); + fprintf(fout, " %d %d %d ", port->placementX(), + port->placementY(), port->orient()); + } + if (port->isCover()) { + fprintf(fout, " + COVER"); + fprintf(fout, " %d %d %d ", port->placementX(), + port->placementY(), port->orient()); + } + if (port->isFixed()) { + fprintf(fout, " + FIXED"); + fprintf(fout, " %d %d %d", port->placementX(), + port->placementY(), port->orient()); + } + } + fprintf(fout,"\n"); + } + } + if (pin->hasAPinPartialMetalArea()) { + fprintf(fout, "PIN %s + NET %s ", tmpPinName, + pin->netName()); + for (i = 0; i < pin->numAPinPartialMetalArea(); i++) { + fprintf(fout, " ANTPINPARTIALMETALAREA %d ", + pin->APinPartialMetalArea(i)); + if (*(pin->APinPartialMetalAreaLayer(i))) + fprintf(fout, " %s ", pin->APinPartialMetalAreaLayer(i)); + } + fprintf(fout, "\n"); + } + if (pin->hasAPinPartialMetalSideArea()) { + fprintf(fout, "PIN %s + NET %s ", tmpPinName, + pin->netName()); + for (i = 0; i < pin->numAPinPartialMetalSideArea(); i++) { + fprintf(fout, "ANTPINPARTIALMETALSIDEAREA %d", + pin->APinPartialMetalSideArea(i)); + if (*(pin->APinPartialMetalSideAreaLayer(i))) + fprintf(fout, " %s", pin->APinPartialMetalSideAreaLayer(i)); + } + fprintf(fout, "\n"); + } + if (pin->hasAPinPartialCutArea()) { + fprintf(fout, "PIN %s + NET %s ", tmpPinName, + pin->netName()); + for (i = 0; i < pin->numAPinPartialCutArea(); i++) { + fprintf(fout, "ANTPINPARTIALCUTAREA %d", + pin->APinPartialCutArea(i)); + if (*(pin->APinPartialCutAreaLayer(i))) + fprintf(fout, " %s", pin->APinPartialCutAreaLayer(i)); + } + fprintf(fout, "\n"); + } + if (pin->hasAPinDiffArea()) { + fprintf(fout, "PIN %s + NET %s ", tmpPinName, + pin->netName()); + for (i = 0; i < pin->numAPinDiffArea(); i++) { + fprintf(fout, "ANTPINDIFFAREA %d", pin->APinDiffArea(i)); + if (*(pin->APinDiffAreaLayer(i))) + fprintf(fout, " %s", pin->APinDiffAreaLayer(i)); + } + fprintf(fout, "\n"); + } + + for (j = 0; j < pin->numAntennaModel(); j++) { + aModel = pin->antennaModel(j); + + if (aModel->hasAPinGateArea()) { + fprintf(fout, "PIN %s + NET %s %s ", tmpPinName, + pin->netName(), aModel->antennaOxide()); + for (i = 0; i < aModel->numAPinGateArea(); + i++) { + fprintf(fout, "ANTPINGATEAREA %d", aModel->APinGateArea(i)); + if (*(aModel->APinGateAreaLayer(i))) + fprintf(fout, " %s", aModel->APinGateAreaLayer(i)); + } + fprintf(fout, "\n"); + } + if (aModel->hasAPinMaxAreaCar()) { + fprintf(fout, "PIN %s + NET %s %s ", tmpPinName, + pin->netName(), aModel->antennaOxide()); + for (i = 0; i < + aModel->numAPinMaxAreaCar(); i++) { + fprintf(fout, "ANTPINMAXAREACAR %d", + aModel->APinMaxAreaCar(i)); + if (*(aModel->APinMaxAreaCarLayer(i))) + fprintf(fout, " %s", aModel->APinMaxAreaCarLayer(i)); + } + fprintf(fout, "\n"); + } + if (aModel->hasAPinMaxSideAreaCar()) { + fprintf(fout, "PIN %s + NET %s %s ", tmpPinName, + pin->netName(), aModel->antennaOxide()); + for (i = 0; + i < aModel->numAPinMaxSideAreaCar(); + i++) { + fprintf(fout, "ANTPINMAXSIDEAREACAR %d", + aModel->APinMaxSideAreaCar(i)); + if (*(aModel->APinMaxSideAreaCarLayer(i))) + fprintf(fout, " %s", aModel->APinMaxSideAreaCarLayer(i)); + } + fprintf(fout, "\n"); + } + if (aModel->hasAPinMaxCutCar()) { + fprintf(fout, "PIN %s + NET %s %s ", tmpPinName, + pin->netName(), aModel->antennaOxide()); + for (i = 0; i < aModel->numAPinMaxCutCar(); + i++) { + fprintf(fout, "ANTPINMAXCUTCAR %d", + aModel->APinMaxCutCar(i)); + if (*(aModel->APinMaxCutCarLayer(i))) + fprintf(fout, " %s", aModel->APinMaxCutCarLayer(i)); + } + fprintf(fout, "\n"); + } + } + if (tmpPinName) + free(tmpPinName); + --numObjs; + break; + case defrDefaultCapCbkType : + i = (long)cl; + fprintf(fout, "DEFAULTCAP %d\n", i); + numObjs = i; + break; + case defrRowCbkType : + row = (defiRow*)cl; + if (ignoreRN) // PCR 716759, if flag is set don't bother with name + fprintf(fout, "ROW %s %g %g %d", + row->macro(), checkDouble(row->x()), checkDouble(row->y()), + row->orient()); + else + fprintf(fout, "ROW %s %s %g %g %d", row->name(), + row->macro(), checkDouble(row->x()), checkDouble(row->y()), + row->orient()); + if (row->hasDo()) { + fprintf(fout, " DO %g BY %g", + checkDouble(row->xNum()), checkDouble(row->yNum())); + if (row->hasDoStep()) + fprintf(fout, " STEP %g %g\n", + checkDouble(row->xStep()), checkDouble(row->yStep())); + } + fprintf(fout, "\n"); + if (row->numProps() > 0) { + if (ignoreRN) { + for (i = 0; i < row->numProps(); i++) + fprintf(fout, "ROW PROP %s %s\n", + row->propName(i), row->propValue(i)); + } else { + for (i = 0; i < row->numProps(); i++) + fprintf(fout, "ROW %s PROP %s %s\n", row->name(), + row->propName(i), row->propValue(i)); + } + } + break; + case defrTrackCbkType : + track = (defiTrack*)cl; + /*if (track->firstTrackMask()) { + if (track->sameMask()) { + fprintf(fout, "TRACKS %s %g DO %g STEP %g MASK %d SAMEMASK LAYER ", + track->macro(), track->x(), + track->xNum(), track->xStep(), + track->firstTrackMask()); + } else { + fprintf(fout, "TRACKS %s %g DO %g STEP %g MASK %d LAYER ", + track->macro(), track->x(), + track->xNum(), track->xStep(), + track->firstTrackMask()); + } + } else { + fprintf(fout, "TRACKS %s %g DO %g STEP %g LAYER ", + track->macro(), track->x(), + track->xNum(), track->xStep()); + } */ + for (i = 0; i < track->numLayers(); i++) { + if (track->firstTrackMask()) { + if (track->sameMask()) { + fprintf(fout, "TRACKS %s %g DO %g STEP %g MASK %d SAMEMASK LAYER %s\n", + track->macro(), track->x(), + track->xNum(), track->xStep(), + track->firstTrackMask(), track->layer(i)); + } else { + fprintf(fout, "TRACKS %s %g DO %g STEP %g MASK %d LAYER %s\n", + track->macro(), track->x(), + track->xNum(), track->xStep(), + track->firstTrackMask(), + track->layer(i)); + } + } else { + fprintf(fout, "TRACKS %s %g DO %g STEP %g LAYER %s\n", + track->macro(), track->x(), + track->xNum(), track->xStep(), + track->layer(i)); + } + } + break; + case defrGcellGridCbkType : + gcg = (defiGcellGrid*)cl; + fprintf(fout, "GCELLGRID %s %d DO %d STEP %g\n", + gcg->macro(), gcg->x(), + gcg->xNum(), + checkDouble(gcg->xStep())); + break; + case defrViaCbkType : + via = (defiVia*)cl; + fprintf(fout, "VIA %s ", via->name()); + if (via->hasPattern()) + fprintf(fout, " PATTERNNAME %s\n", via->pattern()); + else + fprintf(fout, "\n"); + for (i = 0; i < via->numLayers(); i++) { + via->layer(i, &name, &xl, &yl, &xh, &yh); + int rectMask = via->rectMask(i); + + if (rectMask) { + fprintf(fout, "VIA %s RECT %s MASK %d ( %d %d ) ( %d %d ) \n", + via->name(), name, rectMask, xl, yl, xh, yh); + } else { + fprintf(fout, "VIA %s RECT %s ( %d %d ) ( %d %d ) \n", via->name(), + name, xl, yl, xh, yh); + } + } + // POLYGON + if (via->numPolygons()) { + struct defiPoints points; + for (i = 0; i < via->numPolygons(); i++) { + int polyMask = via->polyMask(i); + + if (polyMask) { + fprintf(fout, "\n POLYGON %s MASK %d ", + via->polygonName(i), polyMask); + } else { + fprintf(fout, "\n POLYGON %s ", via->polygonName(i)); + } + points = via->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + } + fprintf(fout, " \n"); + } + + if (via->hasViaRule()) { + char *vrn, *bl, *cl, *tl; + int xs, ys, xcs, ycs, xbe, ybe, xte, yte; + int cr, cc, xo, yo, xbo, ybo, xto, yto; + (void)via->viaRule(&vrn, &xs, &ys, &bl, &cl, &tl, &xcs, + &ycs, &xbe, &ybe, &xte, &yte); + fprintf(fout, "VIA %s VIARULE %s CUTSIZE %d %d LAYERS %s %s %s", + via->name(), vrn, xs, ys, bl, cl, tl); + fprintf(fout, " CUTSPACING %d %d ENCLOSURE %d %d %d %d", xcs, ycs, + xbe, ybe, xte, yte); + if (via->hasRowCol()) { + (void)via->rowCol(&cr, &cc); + fprintf(fout, " ROWCOL %d %d", cr, cc); + } + if (via->hasOrigin()) { + (void)via->origin(&xo, &yo); + fprintf(fout, " ORIGIN %d %d", xo, yo); + } + if (via->hasOffset()) { + (void)via->offset(&xbo, &ybo, &xto, &yto); + fprintf(fout, " OFFSET %d %d %d %d", xbo, ybo, xto, yto); + } + if (via->hasCutPattern()) + fprintf(fout, " PATTERN %s", via->cutPattern()); + fprintf(fout, "\n"); + } + --numObjs; + break; + case defrRegionCbkType : + re = (defiRegion*)cl; + for (i = 0; i < re->numRectangles(); i++) + fprintf(fout, "REGION %s ( %d %d ) ( %d %d )\n",re->name(), + re->xl(i), re->yl(i), re->xh(i), re->yh(i)); + if (re->hasType()) + fprintf(fout, "REGION %s TYPE %s\n",re->name(), re->type()); + --numObjs; + break; + case defrGroupCbkType : + group = (defiGroup*)cl; + fprintf(fout, "GROUP %s ", group->name()); + if (group->hasMaxX() | group->hasMaxY() + | group->hasPerim()) { + fprintf(fout, "SOFT "); + if (group->hasPerim()) + fprintf(fout, "MAXHALFPERIMETER %d ", + group->perim()); + if (group->hasMaxX()) + fprintf(fout, "MAXX %d ", group->maxX()); + if (group->hasMaxY()) + fprintf(fout, "MAXY %d ", group->maxY()); + } + if (group->hasRegionName()) + fprintf(fout, "REGION %s ", group->regionName()); + if (group->hasRegionBox()) { + int *gxl, *gyl, *gxh, *gyh; + int size; + group->regionRects(&size, &gxl, &gyl, &gxh, &gyh); + for (i = 0; i < size; i++) + fprintf(fout, "REGION (%d %d) (%d %d) ", gxl[i], gyl[i], + gxh[i], gyh[i]); + } + fprintf(fout, "\n"); + --numObjs; + break; + case defrComponentMaskShiftLayerCbkType : + fprintf(fout, "COMPONENTMASKSHIFT "); + + for (i = 0; i < maskShiftLayer->numMaskShiftLayers(); i++) { + fprintf(fout, "%s ", maskShiftLayer->maskShiftLayer(i)); + } + fprintf(fout, ";\n"); + break; + case defrScanchainCbkType : + sc = (defiScanchain*)cl; + fprintf(fout, "SCANCHAINS %s", sc->name()); + if (sc->hasStart()) { + sc->start(&a1, &b1); + fprintf(fout, " START %s %s", sc->name(), a1, b1); + } + if (sc->hasStop()) { + sc->stop(&a1, &b1); + fprintf(fout, " STOP %s %s", sc->name(), a1, b1); + } + if (sc->hasCommonInPin() || + sc->hasCommonOutPin()) { + fprintf(fout, " COMMONSCANPINS ", sc->name()); + if (sc->hasCommonInPin()) + fprintf(fout, " ( IN %s )", sc->commonInPin()); + if (sc->hasCommonOutPin()) + fprintf(fout, " ( OUT %s )",sc->commonOutPin()); + } + fprintf(fout, "\n"); + if (sc->hasFloating()) { + sc->floating(&size, &inst, &inPin, &outPin, &bits); + for (i = 0; i < size; i++) { + fprintf(fout, "SCANCHAINS %s FLOATING %s", sc->name(), inst[i]); + if (inPin[i]) + fprintf(fout, " IN %s", inPin[i]); + if (outPin[i]) + fprintf(fout, " OUT %s", outPin[i]); + if (bits[i] != -1) + fprintf(fout, " BITS %d", bits[i]); + fprintf(fout, "\n"); + } + } + + if (sc->hasOrdered()) { + for (i = 0; i < sc->numOrderedLists(); i++) { + sc->ordered(i, &size, &inst, &inPin, &outPin, &bits); + for (j = 0; j < size; j++) { + fprintf(fout, "SCANCHAINS %s ORDERED %s", sc->name(), + inst[j]); + if (inPin[j]) + fprintf(fout, " IN %s", inPin[j]); + if (outPin[j]) + fprintf(fout, " OUT %s", outPin[j]); + if (bits[j] != -1) + fprintf(fout, " BITS %d", bits[j]); + fprintf(fout, "\n"); + } + } + } + + if (sc->hasPartition()) { + fprintf(fout, "SCANCHAINS %s PARTITION %s", sc->name(), + sc->partitionName()); + if (sc->hasPartitionMaxBits()) + fprintf(fout, " MAXBITS %d", sc->partitionMaxBits()); + } + fprintf(fout, "\n"); + --numObjs; + break; + case defrIOTimingCbkType : + iot = (defiIOTiming*)cl; + fprintf(fout, "IOTIMING ( %s %s )\n", iot->inst(), iot->pin()); + if (iot->hasSlewRise()) + fprintf(fout, "IOTIMING %s RISE SLEWRATE %g %g\n", iot->inst(), + checkDouble(iot->slewRiseMin()), + checkDouble(iot->slewRiseMax())); + if (iot->hasSlewFall()) + fprintf(fout, "IOTIMING %s FALL SLEWRATE %g %g\n", iot->inst(), + checkDouble(iot->slewFallMin()), + checkDouble(iot->slewFallMax())); + if (iot->hasVariableRise()) + fprintf(fout, "IOTIMING %s RISE VARIABLE %g %g\n", iot->inst(), + checkDouble(iot->variableRiseMin()), + checkDouble(iot->variableRiseMax())); + if (iot->hasVariableFall()) + fprintf(fout, "IOTIMING %s FALL VARIABLE %g %g\n", iot->inst(), + checkDouble(iot->variableFallMin()), + checkDouble(iot->variableFallMax())); + if (iot->hasCapacitance()) + fprintf(fout, "IOTIMING %s CAPACITANCE %g\n", iot->inst(), + checkDouble(iot->capacitance())); + if (iot->hasDriveCell()) { + fprintf(fout, "IOTIMING %s DRIVECELL %s ", iot->inst(), + iot->driveCell()); + if (iot->hasFrom()) + fprintf(fout, " FROMPIN %s ", + iot->from()); + if (iot->hasTo()) + fprintf(fout, " TOPIN %s ", + iot->to()); + if (iot->hasParallel()) + fprintf(fout, "PARALLEL %g", checkDouble(iot->parallel())); + fprintf(fout, "\n"); + } + --numObjs; + break; + case defrFPCCbkType : + fpc = (defiFPC*)cl; + fprintf(fout, "FLOORPLAN %s ", fpc->name()); + if (fpc->isVertical()) + fprintf(fout, "VERTICAL "); + if (fpc->isHorizontal()) + fprintf(fout, "HORIZONTAL "); + if (fpc->hasAlign()) + fprintf(fout, "ALIGN "); + if (fpc->hasMax()) + fprintf(fout, "%g ", checkDouble(fpc->alignMax())); + if (fpc->hasMin()) + fprintf(fout, "%g ", checkDouble(fpc->alignMin())); + if (fpc->hasEqual()) + fprintf(fout, "%g ", checkDouble(fpc->equal())); + for (i = 0; i < fpc->numParts(); i++) { + fpc->getPart(i, &corner, &typ, &name); + if (corner == 'B') + fprintf(fout, "BOTTOMLEFT "); + else + fprintf(fout, "TOPRIGHT "); + if (typ == 'R') + fprintf(fout, "ROWS %s ", name); + else + fprintf(fout, "COMPS %s ", name); + } + fprintf(fout, "\n"); + --numObjs; + break; + case defrTimingDisableCbkType : + td = (defiTimingDisable*)cl; + if (td->hasFromTo()) fprintf(fout, "TIMINGDISABLE FROMPIN %s %s ", td->fromInst(), td->fromPin(), td->toInst(), td->toPin()); if (td->hasThru()) + fprintf(fout, " THRUPIN %s %s ", td->thruInst(), td->thruPin()); + if (td->hasMacroFromTo()) + fprintf(fout, " MACRO %s FROMPIN %s %s ", td->macroName(), + td->fromPin(), td->toPin()); + if (td->hasMacroThru()) + fprintf(fout, " MACRO %s THRUPIN %s %s ", td->macroName(), + td->fromPin()); + fprintf(fout, "\n"); + break; + case defrPartitionCbkType : + part = (defiPartition*)cl; + fprintf(fout, "PARTITION %s ", part->name()); + if (part->isSetupRise() | part->isSetupFall() | part->isHoldRise() | + part->isHoldFall()) { + // has turnoff + fprintf(fout, "TURNOFF "); + if (part->isSetupRise()) + fprintf(fout, "SETUPRISE "); + if (part->isSetupFall()) + fprintf(fout, "SETUPFALL "); + if (part->isHoldRise()) + fprintf(fout, "HOLDRISE "); + if (part->isHoldFall()) + fprintf(fout, "HOLDFALL "); + } + itemT = part->itemType(); + dir = part->direction(); + if (strcmp(itemT, "CLOCK") == 0) { + if (dir == 'T') // toclockpin + fprintf(fout, " TOCLOCKPIN %s %s ", part->instName(), + part->pinName()); + if (dir == 'F') // fromclockpin + fprintf(fout, " FROMCLOCKPIN %s %s ", part->instName(), + part->pinName()); + if (part->hasMin()) + fprintf(fout, "MIN %g %g ", + checkDouble(part->partitionMin()), + checkDouble(part->partitionMax())); + if (part->hasMax()) + fprintf(fout, "MAX %g %g ", + checkDouble(part->partitionMin()), + checkDouble(part->partitionMax())); + fprintf(fout, "PINS "); + for (i = 0; i < part->numPins(); i++) + fprintf(fout, "%s ", part->pin(i)); + } else if (strcmp(itemT, "IO") == 0) { + if (dir == 'T') // toiopin + fprintf(fout, " TOIOPIN %s %s ", part->instName(), + part->pinName()); + if (dir == 'F') // fromiopin + fprintf(fout, " FROMIOPIN %s %s ", part->instName(), + part->pinName()); + } else if (strcmp(itemT, "COMP") == 0) { + if (dir == 'T') // tocomppin + fprintf(fout, " TOCOMPPIN %s %s ", part->instName(), + part->pinName()); + if (dir == 'F') // fromcomppin + fprintf(fout, " FROMCOMPPIN %s %s ", part->instName(), + part->pinName()); + } + fprintf(fout, "\n"); + --numObjs; + break; + + case defrPinPropCbkType : + pprop = (defiPinProp*)cl; + if (pprop->isPin()) + fprintf(fout, "PINPROP PIN %s ", pprop->pinName()); + else + fprintf(fout, "PINPROP %s %s ", pprop->instName(), + pprop->pinName()); + fprintf(fout, "\n"); + if (pprop->numProps() > 0) { + for (i = 0; i < pprop->numProps(); i++) { + fprintf(fout, "PINPROP PIN %s PROP %s %s\n", + pprop->pinName(), pprop->propName(i), + pprop->propValue(i)); + } + } + --numObjs; + break; + + case defrBlockageCbkType : + block = (defiBlockage*)cl; + if (block->hasLayer()) { + fprintf(fout, "BLOCKAGE LAYER %s", block->layerName()); + if (block->hasComponent()) + fprintf(fout, " COMP %s", block->layerComponentName()); + if (block->hasSlots()) + fprintf(fout, " SLOTS"); + if (block->hasFills()) + fprintf(fout, " FILLS"); + if (block->hasPushdown()) + fprintf(fout, " PUSHDOWN"); + if (block->hasExceptpgnet()) + fprintf(fout, " EXCEPTPGNET"); + if (block->hasMask()) + fprintf(fout, " MASK %d", block->mask()); + if (block->hasSpacing()) + fprintf(fout, " SPACING %d", + block->minSpacing()); + if (block->hasDesignRuleWidth()) + fprintf(fout, " DESIGNRULEWIDTH %d", block->designRuleWidth()); + fprintf(fout, "\n"); + for (i = 0; i < block->numRectangles(); i++) { + fprintf(fout, "BLOCKAGE LAYER %s RECT %d %d %d %d\n", + block->layerName(), block->xl(i), block->yl(i), + block->xh(i), block->yh(i)); + } + for (i = 0; i < block->numPolygons(); i++) { + fprintf(fout, "BLOCKAGE LAYER %s POLYGON", block->layerName()); + points = block->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + fprintf(fout, "\n"); + } + } + else if (block->hasPlacement()) { + fprintf(fout, "BLOCKAGE PLACEMENT"); + if (block->hasSoft()) + fprintf(fout, " SOFT"); + if (block->hasPartial()) + fprintf(fout, " PARTIAL %g", block->placementMaxDensity()); + if (block->hasComponent()) + fprintf(fout, " COMP %s", block->layerComponentName()); + if (block->hasPushdown()) + fprintf(fout, " PUSHDOWN"); + fprintf(fout, "\n"); + for (i = 0; i < block->numRectangles(); i++) { + fprintf(fout, "BLOCKAGE PLACEMENT RECT %d %d %d %d\n", + block->xl(i), block->yl(i), + block->xh(i), block->yh(i)); + } + } + --numObjs; + break; + + case defrSlotCbkType : + slot = (defiSlot*)cl; + for (i = 0; i < slot->numRectangles(); i++) { + fprintf(fout, "SLOT LAYER %s", slot->layerName()); + fprintf(fout, " RECT %d %d %d %d\n", + slot->xl(i), slot->yl(i), + slot->xh(i), slot->yh(i)); + } + for (i = 0; i < slot->numPolygons(); i++) { + fprintf(fout, "SLOT LAYER %s POLYGON"); + points = slot->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, " %d %d", points.x[j], points.y[j]); + fprintf(fout, "\n"); + } + --numObjs; + break; + + case defrFillCbkType : + fill = (defiFill*)cl; + for (i = 0; i < fill->numRectangles(); i++) { + fprintf(fout, "FILL LAYER %s", fill->layerName()); + if (fill->layerMask()) { + fprintf(fout, " MASK %d", fill->layerMask()); + } + if (fill->hasLayerOpc()) + fprintf(fout, " OPC"); + fprintf(fout, " RECT %d %d %d %d\n", + fill->xl(i), fill->yl(i), + fill->xh(i), fill->yh(i)); + } + for (i = 0; i < fill->numPolygons(); i++) { + fprintf(fout, "FILL LAYER %s POLYGON", fill->layerName()); + points = fill->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, " %d %d", points.x[j], points.y[j]); + fprintf(fout, "\n"); + } + if (fill->hasVia()) { + fprintf(fout, "FILL VIA %s", fill->viaName()); + if (fill->viaTopMask() || fill->viaCutMask() + || fill->viaBottomMask()) { + fprintf(fout, " MASK %d%d%d", + fill->viaTopMask(), + fill->viaCutMask(), + fill->viaBottomMask()); + } + if (fill->hasViaOpc()) + fprintf(fout, " OPC\n"); + for (i = 0; i < fill->numViaPts(); i++) { + points = fill->getViaPts(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, " %d %d", points.x[j], points.y[j]); + } + fprintf(fout, "\n"); + } + --numObjs; + break; + + case defrStylesCbkType : + struct defiPoints points; + styles = (defiStyles*)cl; + fprintf(fout, "STYLE %d", styles->style()); + points = styles->getPolygon(); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, " %d %d", points.x[j], points.y[j]); + fprintf(fout, "\n"); + --numObjs; + break; + + default: fprintf(fout, "BOGUS callback to cls.\n"); return 1; + } + return 0; +} + + +int dn(defrCallbackType_e c, const char* h, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "DIVIDERCHAR \"%s\" \n",h); + return 0; +} + + +int ext(defrCallbackType_e t, const char* c, defiUserData ud) { + char* name; + + checkType(t); + if (ud != userData) dataError(); + + switch (t) { + case defrNetExtCbkType : name = address("net"); break; + case defrComponentExtCbkType : name = address("component"); break; + case defrPinExtCbkType : name = address("pin"); break; + case defrViaExtCbkType : name = address("via"); break; + case defrNetConnectionExtCbkType : name = address("net connection"); break; + case defrGroupExtCbkType : name = address("group"); break; + case defrScanChainExtCbkType : name = address("scanchain"); break; + case defrIoTimingsExtCbkType : name = address("io timing"); break; + case defrPartitionsExtCbkType : name = address("partition"); break; + default: name = address("BOGUS"); return 1; + } + fprintf(fout, "EXTENSION %s %s\n", name, c); + return 0; +} + +//======== + +int diffDefReadFile(char* inFile, char* outFile, char* ignorePinExtra, + char* ignoreRowName, char* ignoreViaName, char* netSegComp) { + FILE* f; + int res; + + userData = (void*)0x01020304; + defrInit(); + + defrSetDesignCbk(dname); + defrSetTechnologyCbk(tname); + defrSetPropCbk(prop); + defrSetNetCbk(netf); + defrSetSNetCbk(snetf); + defrSetComponentMaskShiftLayerCbk(compMSL); + defrSetComponentCbk(compf); + defrSetAddPathToNet(); + defrSetHistoryCbk(hist); + defrSetConstraintCbk(constraint); + defrSetAssertionCbk(constraint); + defrSetDividerCbk(dn); + defrSetBusBitCbk(bbn); + defrSetNonDefaultCbk(ndr); + + // All of the extensions point to the same function. + defrSetNetExtCbk(ext); + defrSetComponentExtCbk(ext); + defrSetPinExtCbk(ext); + defrSetViaExtCbk(ext); + defrSetNetConnectionExtCbk(ext); + defrSetGroupExtCbk(ext); + defrSetScanChainExtCbk(ext); + defrSetIoTimingsExtCbk(ext); + defrSetPartitionsExtCbk(ext); + + defrSetUnitsCbk(units); + defrSetVersionCbk(vers); + defrSetCaseSensitiveCbk(casesens); + + // The following calls are an example of using one function "cls" + // to be the callback for many DIFFERENT types of constructs. + // We have to cast the function type to meet the requirements + // of each different set function. + defrSetSiteCbk((defrSiteCbkFnType)cls); + defrSetCanplaceCbk((defrSiteCbkFnType)cls); + defrSetCannotOccupyCbk((defrSiteCbkFnType)cls); + defrSetDieAreaCbk((defrBoxCbkFnType)cls); + defrSetPinCapCbk((defrPinCapCbkFnType)cls); + defrSetPinCbk((defrPinCbkFnType)cls); + defrSetPinPropCbk((defrPinPropCbkFnType)cls); + defrSetDefaultCapCbk((defrIntegerCbkFnType)cls); + defrSetRowCbk((defrRowCbkFnType)cls); + defrSetTrackCbk((defrTrackCbkFnType)cls); + defrSetGcellGridCbk((defrGcellGridCbkFnType)cls); + defrSetViaCbk((defrViaCbkFnType)cls); + defrSetRegionCbk((defrRegionCbkFnType)cls); + defrSetGroupCbk((defrGroupCbkFnType)cls); + defrSetScanchainCbk((defrScanchainCbkFnType)cls); + defrSetIOTimingCbk((defrIOTimingCbkFnType)cls); + defrSetFPCCbk((defrFPCCbkFnType)cls); + defrSetTimingDisableCbk((defrTimingDisableCbkFnType)cls); + defrSetPartitionCbk((defrPartitionCbkFnType)cls); + defrSetBlockageCbk((defrBlockageCbkFnType)cls); + defrSetSlotCbk((defrSlotCbkFnType)cls); + defrSetFillCbk((defrFillCbkFnType)cls); + + if (strcmp(ignorePinExtra, "0") != 0) + ignorePE = 1; + + if (strcmp(ignoreRowName, "0") != 0) + ignoreRN = 1; + + if (strcmp(ignoreViaName, "0") != 0) + ignoreVN = 1; + + if (strcmp(netSegComp, "0") != 0) + netSeCmp = 1; + + if ((f = fopen(inFile,"r")) == 0) { + fprintf(stderr,"Couldn't open input file '%s'\n", inFile); + return(2); + } + + if ((fout = fopen(outFile, "w")) == 0) { + fprintf(stderr, "Couldn't open output file '%s'\n", outFile); + fclose(f); + return(2); + } + + res = defrRead(f, inFile, userData, 1); + + fclose(f); + fclose(fout); + + return 0; +} diff --git a/lefdef/src/def/defdiff/diffDefRW.hpp b/lefdef/src/def/defdiff/diffDefRW.hpp new file mode 100644 index 00000000..e2305ed2 --- /dev/null +++ b/lefdef/src/def/defdiff/diffDefRW.hpp @@ -0,0 +1,39 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef DIFFDEFRW_H +#define DIFFDEFRW_H + +#include +#include + +int diffDefReadFile(char* inFile, char* outFile, char* ignorePinExtra, + char* ignoreRowName, char* ignoreViaName, char* netSegComp); + +#endif diff --git a/lefdef/src/def/defdiff/differDef.cpp b/lefdef/src/def/defdiff/differDef.cpp new file mode 100644 index 00000000..5ed9c136 --- /dev/null +++ b/lefdef/src/def/defdiff/differDef.cpp @@ -0,0 +1,99 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + + +// This program will diff two lef files or two def files and list the +// different between the two files. This problem is not intend to +// diff a real design. If user runs this program will a big design, +// they may experience long execution time and may even ran out of +// memory. +// +// This program is to give user a feel of whether they are using the +// parser correctly. After they read the lef/def file in, and +// write them back out in lef/def format. +// +// This program support lef/def 5.6. + +#include +#include +#include +#ifdef ibmrs +# include +#endif +#ifndef WIN32 +# include +extern char VersionIdent[]; +#else +char* VersionIdent = "N/A"; +#endif /* not WIN32 */ +#include "defrReader.hpp" +#include "diffDefRW.hpp" + +char * exeName; // use to save the executable name + +// This program requires 3 input, the type of the file, lef or def +// fileName1 and fileName2 +void diffUsage() { + printf("Usage: lefdefdiff -lef|-def fileName1 fileName2 [-o outputFileName]\n"); +} + +int main(int argc, char** argv) { + char *fileName1, *fileName2; // For the filenames to compare + char *defOut1, *defOut2; // For the tmp output files + +#ifdef WIN32 + // Enable two-digit exponent format + _set_output_format(_TWO_DIGIT_EXPONENT); +#endif + + exeName = argv[0]; + + if (argc != 9) { // If pass in from lefdefdiff, argc is + diffUsage(); // always 9: defdiff file1 file2 out1 out2 + return(1); // ignorePinExtra ignoreRowName ignoreViaName + } // newSegCmp + + fileName1 = argv[1]; + fileName2 = argv[2]; + + // Temporary output files, to whole the def file information as + // they are read in. Later these files will be sorted for compare + defOut1 = argv[3]; + defOut2 = argv[4]; + + // def files + printf("Reading file: %s\n", fileName1); + if (diffDefReadFile(fileName1, defOut1, argv[5], argv[6], argv[7], argv[8]) != 0) + return(1); + printf("Reading file: %s\n", fileName2); + if (diffDefReadFile(fileName2, defOut2, argv[5], argv[6], argv[7], argv[8]) != 0) + return(1); + + return (0); +} diff --git a/lefdef/src/def/defrw/CMakeLists.txt b/lefdef/src/def/defrw/CMakeLists.txt new file mode 100644 index 00000000..2696ff76 --- /dev/null +++ b/lefdef/src/def/defrw/CMakeLists.txt @@ -0,0 +1,12 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + include_directories ( ${LEFDEF_SOURCE_DIR}/src/def/def + ) + + set ( cpps defrw.cpp + ) + + add_executable ( defrw ${cpps} ) + target_link_libraries ( defrw def ) + + install ( TARGETS defrw DESTINATION bin ) diff --git a/lefdef/src/def/defrw/Makefile b/lefdef/src/def/defrw/Makefile new file mode 100644 index 00000000..64662515 --- /dev/null +++ b/lefdef/src/def/defrw/Makefile @@ -0,0 +1,14 @@ +FAKE_ALL: all + +BINTARGET = defrw + +HEADERS = + +PUBLIC_HDRS = + +LDLIBS = ../lib/libdef.a + +BINSRCS = \ + defrw.cpp + +include ../template.mk diff --git a/lefdef/src/def/defrw/defrw.cpp b/lefdef/src/def/defrw/defrw.cpp new file mode 100644 index 00000000..ff08749f --- /dev/null +++ b/lefdef/src/def/defrw/defrw.cpp @@ -0,0 +1,3395 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include +#ifndef WIN32 +# include +#endif /* not WIN32 */ +#include "defrReader.hpp" +#include "defiAlias.hpp" + +char defaultName[64]; +char defaultOut[64]; + +// Global variables +FILE* fout; +void* userData; +int numObjs; +int isSumSet; // to keep track if within SUM +int isProp = 0; // for PROPERTYDEFINITIONS +int begOperand; // to keep track for constraint, to print - as the 1st char +static double curVer = 0; +static int setSNetWireCbk = 0; +static int isSessionless = 0; +static int ignoreRowNames = 0; +static int ignoreViaNames = 0; +static int testDebugPrint = 0; // test for ccr1488696 + +// TX_DIR:TRANSLATION ON + +void myLogFunction(const char* errMsg){ + fprintf(fout, "ERROR: found error: %s\n", errMsg); +} + +void myWarningLogFunction(const char* errMsg){ + fprintf(fout, "WARNING: found error: %s\n", errMsg); +} + +void dataError() { + fprintf(fout, "ERROR: returned user data is not correct!\n"); +} + +void checkType(defrCallbackType_e c) { + if (c >= 0 && c <= defrDesignEndCbkType) { + // OK + } else { + fprintf(fout, "ERROR: callback type is out of bounds!\n"); + } +} + + +int done(defrCallbackType_e c, void*, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "END DESIGN\n"); + return 0; +} + +int endfunc(defrCallbackType_e c, void*, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + return 0; +} + + +char* orientStr(int orient) { + switch (orient) { + case 0: return ((char*)"N"); + case 1: return ((char*)"W"); + case 2: return ((char*)"S"); + case 3: return ((char*)"E"); + case 4: return ((char*)"FN"); + case 5: return ((char*)"FW"); + case 6: return ((char*)"FS"); + case 7: return ((char*)"FE"); + }; + return ((char*)"BOGUS"); +} + +int compMSL(defrCallbackType_e c, defiComponentMaskShiftLayer* co, defiUserData ud) { + int i; + + checkType(c); + if (ud != userData) dataError(); + + if (co->numMaskShiftLayers()) { + fprintf(fout, "\nCOMPONENTMASKSHIFT "); + + for (i = 0; i < co->numMaskShiftLayers(); i++) { + fprintf(fout, "%s ", co->maskShiftLayer(i)); + } + fprintf(fout, ";\n"); + } + + return 0; +} + +int compf(defrCallbackType_e c, defiComponent* co, defiUserData ud) { + if (testDebugPrint) { + co->print(fout); + } else { + int i; + + checkType(c); + if (ud != userData) dataError(); + // missing GENERATE, FOREIGN + fprintf(fout, "- %s %s ", co->id(), + co->name()); + // co->changeIdAndName("idName", "modelName"); + // fprintf(fout, "%s %s ", co->id(), + // co->name()); + if (co->hasNets()) { + for (i = 0; i < co->numNets(); i++) + fprintf(fout, "%s ", co->net(i)); + } + if (co->isFixed()) + fprintf(fout, "+ FIXED %d %d %s ", + co->placementX(), + co->placementY(), + //orientStr(co->placementOrient())); + co->placementOrientStr()); + if (co->isCover()) + fprintf(fout, "+ COVER %d %d %s ", + co->placementX(), + co->placementY(), + orientStr(co->placementOrient())); + if (co->isPlaced()) + fprintf(fout,"+ PLACED %d %d %s ", + co->placementX(), + co->placementY(), + orientStr(co->placementOrient())); + if (co->isUnplaced()) { + fprintf(fout,"+ UNPLACED "); + if ((co->placementX() != -1) || + (co->placementY() != -1)) + fprintf(fout,"%d %d %s ", + co->placementX(), + co->placementY(), + orientStr(co->placementOrient())); + } + if (co->hasSource()) + fprintf(fout, "+ SOURCE %s ", co->source()); + if (co->hasGenerate()) { + fprintf(fout, "+ GENERATE %s ", co->generateName()); + if (co->macroName() && + *(co->macroName())) + fprintf(fout, "%s ", co->macroName()); + } + if (co->hasWeight()) + fprintf(fout, "+ WEIGHT %d ", co->weight()); + if (co->hasEEQ()) + fprintf(fout, "+ EEQMASTER %s ", co->EEQ()); + if (co->hasRegionName()) + fprintf(fout, "+ REGION %s ", co->regionName()); + if (co->hasRegionBounds()) { + int *xl, *yl, *xh, *yh; + int size; + co->regionBounds(&size, &xl, &yl, &xh, &yh); + for (i = 0; i < size; i++) { + fprintf(fout, "+ REGION %d %d %d %d \n", + xl[i], yl[i], xh[i], yh[i]); + } + } + if (co->maskShiftSize()) { + fprintf(fout, "+ MASKSHIFT "); + + for (int i = co->maskShiftSize()-1; i >= 0; i--) { + fprintf(fout, "%d", co->maskShift(i)); + } + fprintf(fout, "\n"); + } + if (co->hasHalo()) { + int left, bottom, right, top; + (void) co->haloEdges(&left, &bottom, &right, &top); + fprintf(fout, "+ HALO "); + if (co->hasHaloSoft()) + fprintf(fout, "SOFT "); + fprintf(fout, "%d %d %d %d\n", left, bottom, right, top); + } + if (co->hasRouteHalo()) { + fprintf(fout, "+ ROUTEHALO %d %s %s\n", co->haloDist(), + co->minLayer(), co->maxLayer()); + } + if (co->hasForeignName()) { + fprintf(fout, "+ FOREIGN %s %d %d %s %d ", + co->foreignName(), co->foreignX(), + co->foreignY(), co->foreignOri(), + co->foreignOrient()); + } + if (co->numProps()) { + for (i = 0; i < co->numProps(); i++) { + fprintf(fout, "+ PROPERTY %s %s ", co->propName(i), + co->propValue(i)); + switch (co->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END COMPONENTS\n"); + } + + return 0; +} + + +int netpath(defrCallbackType_e, defiNet*, defiUserData) { + fprintf(fout, "\n"); + + fprintf (fout, "Callback of partial path for net\n"); + + return 0; +} + + +int netNamef(defrCallbackType_e c, const char* netName, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "- %s ", netName); + return 0; +} + +int subnetNamef(defrCallbackType_e c, const char* subnetName, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + if (curVer >= 5.6) + fprintf(fout, " + SUBNET CBK %s ", subnetName); + return 0; +} + +int nondefRulef(defrCallbackType_e c, const char* ruleName, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + if (curVer >= 5.6) + fprintf(fout, " + NONDEFAULTRULE CBK %s ", ruleName); + return 0; +} + +int netf(defrCallbackType_e c, defiNet* net, defiUserData ud) { + // For net and special net. + int i, j, k, w, x, y, z, count, newLayer; + defiPath* p; + defiSubnet *s; + int path; + defiVpin *vpin; + // defiShield *noShield; + defiWire *wire; + + checkType(c); + if (ud != userData) dataError(); + if (c != defrNetCbkType) + fprintf(fout, "BOGUS NET TYPE "); + if (net->pinIsMustJoin(0)) + fprintf(fout, "- MUSTJOIN "); +// 5/6/2004 - don't need since I have a callback for the name +// else +// fprintf(fout, "- %s ", net->name()); + +// net->changeNetName("newNetName"); +// fprintf(fout, "%s ", net->name()); + count = 0; + // compName & pinName + for (i = 0; i < net->numConnections(); i++) { + // set the limit of only 5 items per line + count++; + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + fprintf(fout, "( %s %s ) ", net->instance(i), + net->pin(i)); +// net->changeInstance("newInstance", i); +// net->changePin("newPin", i); +// fprintf(fout, "( %s %s ) ", net->instance(i), +// net->pin(i)); + if (net->pinIsSynthesized(i)) + fprintf(fout, "+ SYNTHESIZED "); + } + + if (net->hasNonDefaultRule()) + fprintf(fout, "+ NONDEFAULTRULE %s\n", net->nonDefaultRule()); + + for (i = 0; i < net->numVpins(); i++) { + vpin = net->vpin(i); + fprintf(fout, " + %s", vpin->name()); + if (vpin->layer()) + fprintf(fout, " %s", vpin->layer()); + fprintf(fout, " %d %d %d %d", vpin->xl(), vpin->yl(), vpin->xh(), + vpin->yh()); + if (vpin->status() != ' ') { + fprintf(fout, " %c", vpin->status()); + fprintf(fout, " %d %d", vpin->xLoc(), vpin->yLoc()); + if (vpin->orient() != -1) + fprintf(fout, " %s", orientStr(vpin->orient())); + } + fprintf(fout, "\n"); + } + + // regularWiring + if (net->numWires()) { + for (i = 0; i < net->numWires(); i++) { + newLayer = 0; + wire = net->wire(i); + fprintf(fout, "\n + %s ", wire->wireType()); + count = 0; + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", ignoreViaNames ? "XXX" : p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%s ", + orientStr(p->getViaRotation())); + break; + case DEFIPATH_RECT: + p->getViaRect(&w, &x, &y, &z); + fprintf(fout, "RECT ( %d %d %d %d ) ", w, x, y, z); + break; + case DEFIPATH_VIRTUALPOINT: + p->getVirtualPoint(&x, &y); + fprintf(fout, "VIRTUAL ( %d %d ) ", x, y); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_TAPERRULE: + fprintf(fout, "TAPERRULE %s ",p->getTaperRule()); + break; + case DEFIPATH_STYLE: + fprintf(fout, "STYLE %d ",p->getStyle()); + break; + } + } + } + fprintf(fout, "\n"); + count = 0; + } + } + + // SHIELDNET + if (net->numShieldNets()) { + for (i = 0; i < net->numShieldNets(); i++) + fprintf(fout, "\n + SHIELDNET %s", net->shieldNet(i)); + } +/* obsolete in 5.4 + if (net->numNoShields()) { + for (i = 0; i < net->numNoShields(); i++) { + noShield = net->noShield(i); + fprintf(fout, "\n + NOSHIELD "); + newLayer = 0; + for (j = 0; j < noShield->numPaths(); j++) { + p = noShield->path(j); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%s ", + orientStr(p->getViaRotation())); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_TAPERRULE: + fprintf(fout, "TAPERRULE %s ", + p->getTaperRule()); + break; + } + } + } + } + } +*/ + + if (net->hasSubnets()) { + for (i = 0; i < net->numSubnets(); i++) { + s = net->subnet(i); + fprintf(fout, "\n"); + + if (s->numConnections()) { + if (s->pinIsMustJoin(0)) + fprintf(fout, "- MUSTJOIN "); + else + fprintf(fout, " + SUBNET %s ", s->name()); + for (j = 0; j < s->numConnections(); j++) + fprintf(fout, " ( %s %s )\n", s->instance(j), + s->pin(j)); + + // regularWiring + if (s->numWires()) { + for (k = 0; k < s->numWires(); k++) { + newLayer = 0; + wire = s->wire(k); + fprintf(fout, " %s ", wire->wireType()); + count = 0; + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", + p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", ignoreViaNames ? "XXX" : p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%s ", + p->getViaRotationStr()); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_TAPERRULE: + fprintf(fout, "TAPERRULE %s ", + p->getTaperRule()); + break; + case DEFIPATH_STYLE: + fprintf(fout, "STYLE %d ", + p->getStyle()); + break; + } + } + } + } + } + } + } + } + + if (net->numProps()) { + for (i = 0; i < net->numProps(); i++) { + fprintf(fout, " + PROPERTY %s ", net->propName(i)); + switch (net->propType(i)) { + case 'R': fprintf(fout, "%g REAL ", net->propNumber(i)); + break; + case 'I': fprintf(fout, "%g INTEGER ", net->propNumber(i)); + break; + case 'S': fprintf(fout, "%s STRING ", net->propValue(i)); + break; + case 'Q': fprintf(fout, "%s QUOTESTRING ", net->propValue(i)); + break; + case 'N': fprintf(fout, "%g NUMBER ", net->propNumber(i)); + break; + } + fprintf(fout, "\n"); + } + } + + if (net->hasWeight()) + fprintf(fout, "+ WEIGHT %d ", net->weight()); + if (net->hasCap()) + fprintf(fout, "+ ESTCAP %g ", net->cap()); + if (net->hasSource()) + fprintf(fout, "+ SOURCE %s ", net->source()); + if (net->hasFixedbump()) + fprintf(fout, "+ FIXEDBUMP "); + if (net->hasFrequency()) + fprintf(fout, "+ FREQUENCY %g ", net->frequency()); + if (net->hasPattern()) + fprintf(fout, "+ PATTERN %s ", net->pattern()); + if (net->hasOriginal()) + fprintf(fout, "+ ORIGINAL %s ", net->original()); + if (net->hasUse()) + fprintf(fout, "+ USE %s ", net->use()); + + fprintf (fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END NETS\n"); + return 0; +} + + +int snetpath(defrCallbackType_e c, defiNet* ppath, defiUserData ud) { + int i, j, x, y, z, count, newLayer; + char* layerName; + double dist, left, right; + defiPath* p; + defiSubnet *s; + int path; + defiShield* shield; + defiWire* wire; + int numX, numY, stepX, stepY; + + if (c != defrSNetPartialPathCbkType) + return 1; + if (ud != userData) dataError(); + + fprintf (fout, "SPECIALNET partial data\n"); + + fprintf(fout, "- %s ", ppath->name()); + + count = 0; + // compName & pinName + for (i = 0; i < ppath->numConnections(); i++) { + // set the limit of only 5 items print out in one line + count++; + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + fprintf (fout, "( %s %s ) ", ppath->instance(i), + ppath->pin(i)); + if (ppath->pinIsSynthesized(i)) + fprintf(fout, "+ SYNTHESIZED "); + } + + // specialWiring + // POLYGON + if (ppath->numPolygons()) { + struct defiPoints points; + for (i = 0; i < ppath->numPolygons(); i++) { + fprintf(fout, "\n + POLYGON %s ", ppath->polygonName(i)); + points = ppath->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + } + } + // RECT + if (ppath->numRectangles()) { + for (i = 0; i < ppath->numRectangles(); i++) { + fprintf(fout, "\n + RECT %s %d %d %d %d", ppath->rectName(i), + ppath->xl(i), ppath->yl(i), + ppath->xh(i), ppath->yh(i)); + } + } + + // COVER, FIXED, ROUTED or SHIELD + if (ppath->numWires()) { + newLayer = 0; + for (i = 0; i < ppath->numWires(); i++) { + newLayer = 0; + wire = ppath->wire(i); + fprintf(fout, "\n + %s ", wire->wireType()); + if (strcmp (wire->wireType(), "SHIELD") == 0) + fprintf(fout, "%s ", wire->wireShieldNetName()); + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", ignoreViaNames ? "XXX" : p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%s ", + orientStr(p->getViaRotation())); + break; + case DEFIPATH_VIADATA: + p->getViaData(&numX, &numY, &stepX, &stepY); + fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY, + stepX, stepY); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_SHAPE: + fprintf(fout, "+ SHAPE %s ", p->getShape()); + break; + case DEFIPATH_STYLE: + fprintf(fout, "+ STYLE %d ", p->getStyle()); + break; + } + } + } + fprintf(fout, "\n"); + count = 0; + } + } + + if (ppath->hasSubnets()) { + for (i = 0; i < ppath->numSubnets(); i++) { + s = ppath->subnet(i); + if (s->numConnections()) { + if (s->pinIsMustJoin(0)) + fprintf(fout, "- MUSTJOIN "); + else + fprintf(fout, "- %s ", s->name()); + for (j = 0; j < s->numConnections(); j++) { + fprintf(fout, " ( %s %s )\n", s->instance(j), + s->pin(j)); + } + } + + // regularWiring + if (s->numWires()) { + for (i = 0; i < s->numWires(); i++) { + wire = s->wire(i); + fprintf(fout, " + %s ", wire->wireType()); + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->print(fout); + } + } + } + } + } + + if (ppath->numProps()) { + for (i = 0; i < ppath->numProps(); i++) { + if (ppath->propIsString(i)) + fprintf(fout, " + PROPERTY %s %s ", ppath->propName(i), + ppath->propValue(i)); + if (ppath->propIsNumber(i)) + fprintf(fout, " + PROPERTY %s %g ", ppath->propName(i), + ppath->propNumber(i)); + switch (ppath->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + fprintf(fout, "\n"); + } + } + + // SHIELD + count = 0; + // testing the SHIELD for 5.3, obsolete in 5.4 + if (ppath->numShields()) { + for (i = 0; i < ppath->numShields(); i++) { + shield = ppath->shield(i); + fprintf(fout, "\n + SHIELD %s ", shield->shieldName()); + newLayer = 0; + for (j = 0; j < shield->numPaths(); j++) { + p = shield->path(j); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", ignoreViaNames ? "XXX" : p->getVia()); + break; + case DEFIPATH_VIAROTATION: + if (newLayer) + fprintf(fout, "%s ", + orientStr(p->getViaRotation())); + else + fprintf(fout, "Str %s ", + p->getViaRotationStr()); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_SHAPE: + fprintf(fout, "+ SHAPE %s ", p->getShape()); + break; + case DEFIPATH_STYLE: + fprintf(fout, "+ STYLE %d ", p->getStyle()); + } + } + } + } + } + + // layerName width + if (ppath->hasWidthRules()) { + for (i = 0; i < ppath->numWidthRules(); i++) { + ppath->widthRule(i, &layerName, &dist); + fprintf (fout, "\n + WIDTH %s %g ", layerName, dist); + } + } + + // layerName spacing + if (ppath->hasSpacingRules()) { + for (i = 0; i < ppath->numSpacingRules(); i++) { + ppath->spacingRule(i, &layerName, &dist, &left, &right); + if (left == right) + fprintf (fout, "\n + SPACING %s %g ", layerName, dist); + else + fprintf (fout, "\n + SPACING %s %g RANGE %g %g ", + layerName, dist, left, right); + } + } + + if (ppath->hasFixedbump()) + fprintf(fout, "\n + FIXEDBUMP "); + if (ppath->hasFrequency()) + fprintf(fout, "\n + FREQUENCY %g ", ppath->frequency()); + if (ppath->hasVoltage()) + fprintf(fout, "\n + VOLTAGE %g ", ppath->voltage()); + if (ppath->hasWeight()) + fprintf(fout, "\n + WEIGHT %d ", ppath->weight()); + if (ppath->hasCap()) + fprintf(fout, "\n + ESTCAP %g ", ppath->cap()); + if (ppath->hasSource()) + fprintf(fout, "\n + SOURCE %s ", ppath->source()); + if (ppath->hasPattern()) + fprintf(fout, "\n + PATTERN %s ", ppath->pattern()); + if (ppath->hasOriginal()) + fprintf(fout, "\n + ORIGINAL %s ", ppath->original()); + if (ppath->hasUse()) + fprintf(fout, "\n + USE %s ", ppath->use()); + + fprintf(fout, "\n"); + + return 0; +} + + +int snetwire(defrCallbackType_e c, defiNet* ppath, defiUserData ud) { + int i, j, x, y, z, count = 0, newLayer; + defiPath* p; + int path; + defiWire* wire; + defiShield* shield; + int numX, numY, stepX, stepY; + + if (c != defrSNetWireCbkType) + return 1; + if (ud != userData) dataError(); + + fprintf (fout, "SPECIALNET wire data\n"); + + fprintf(fout, "- %s ", ppath->name()); + + // POLYGON + if (ppath->numPolygons()) { + struct defiPoints points; + for (i = 0; i < ppath->numPolygons(); i++) { + fprintf(fout, "\n + POLYGON %s ", ppath->polygonName(i)); + + points = ppath->getPolygon(i); + + for (j = 0; j < points.numPoints; j++) { + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + } + } + // RECT + } + if (ppath->numRectangles()) { + for (i = 0; i < ppath->numRectangles(); i++) { + fprintf(fout, "\n + RECT %s %d %d %d %d", ppath->rectName(i), + ppath->xl(i), ppath->yl(i), + ppath->xh(i), ppath->yh(i)); + } + } + // VIA + if (ppath->numViaSpecs()) { + for (i = 0; i < ppath->numViaSpecs(); i++) { + fprintf(fout, "\n + VIA %s ", ppath->viaName(i)), + fprintf(fout, " %s", ppath->viaOrientStr(i)); + + defiPoints points = ppath->getViaPts(i); + + for (int j = 0; j < points.numPoints; j++) { + fprintf(fout, " %d %d", points.x[j], points.y[j]); + } + } + } + + // specialWiring + if (ppath->numWires()) { + newLayer = 0; + for (i = 0; i < ppath->numWires(); i++) { + newLayer = 0; + wire = ppath->wire(i); + fprintf(fout, "\n + %s ", wire->wireType()); + if (strcmp (wire->wireType(), "SHIELD") == 0) + fprintf(fout, "%s ", wire->wireShieldNetName()); + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", ignoreViaNames ? "XXX" : p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%s ", + orientStr(p->getViaRotation())); + break; + case DEFIPATH_VIADATA: + p->getViaData(&numX, &numY, &stepX, &stepY); + fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY, + stepX, stepY); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_SHAPE: + fprintf(fout, "+ SHAPE %s ", p->getShape()); + break; + case DEFIPATH_STYLE: + fprintf(fout, "+ STYLE %d ", p->getStyle()); + break; + } + } + } + fprintf(fout, "\n"); + count = 0; + } + } else if (ppath->numShields()) { + for (i = 0; i < ppath->numShields(); i++) { + shield = ppath->shield(i); + fprintf(fout, "\n + SHIELD %s ", shield->shieldName()); + newLayer = 0; + for (j = 0; j < shield->numPaths(); j++) { + p = shield->path(j); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", ignoreViaNames ? "XXX" : p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%s ", + orientStr(p->getViaRotation())); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_SHAPE: + fprintf(fout, "+ SHAPE %s ", p->getShape()); + break; + case DEFIPATH_STYLE: + fprintf(fout, "+ STYLE %d ", p->getStyle()); + break; + } + } + } + } + } + + fprintf(fout, "\n"); + + return 0; +} + +int snetf(defrCallbackType_e c, defiNet* net, defiUserData ud) { + // For net and special net. + int i, j, x, y, z, count, newLayer; + char* layerName; + double dist, left, right; + defiPath* p; + defiSubnet *s; + int path; + defiShield* shield; + defiWire* wire; + int numX, numY, stepX, stepY; + + checkType(c); + if (ud != userData) dataError(); + if (c != defrSNetCbkType) + fprintf(fout, "BOGUS NET TYPE "); + +// 5/6/2004 - don't need since I have a callback for the name +// fprintf(fout, "- %s ", net->name()); + + count = 0; + // compName & pinName + for (i = 0; i < net->numConnections(); i++) { + // set the limit of only 5 items print out in one line + count++; + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + fprintf (fout, "( %s %s ) ", net->instance(i), + net->pin(i)); + if (net->pinIsSynthesized(i)) + fprintf(fout, "+ SYNTHESIZED "); + } + + // specialWiring + if (net->numWires()) { + newLayer = 0; + for (i = 0; i < net->numWires(); i++) { + newLayer = 0; + wire = net->wire(i); + fprintf(fout, "\n + %s ", wire->wireType()); + if (strcmp (wire->wireType(), "SHIELD") == 0) + fprintf(fout, "%s ", wire->wireShieldNetName()); + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->initTraverse(); + if (testDebugPrint) { + p->print(fout); + } else { + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", ignoreViaNames ? "XXX" : p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%s ", + orientStr(p->getViaRotation())); + break; + case DEFIPATH_VIADATA: + p->getViaData(&numX, &numY, &stepX, &stepY); + fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY, + stepX, stepY); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_SHAPE: + fprintf(fout, "+ SHAPE %s ", p->getShape()); + break; + case DEFIPATH_STYLE: + fprintf(fout, "+ STYLE %d ", p->getStyle()); + break; + } + } + } + } + fprintf(fout, "\n"); + count = 0; + } + } + + // POLYGON + if (net->numPolygons()) { + struct defiPoints points; + + for (i = 0; i < net->numPolygons(); i++) { + if (curVer >= 5.8 ) { + if (strcmp(net->polyRouteStatus(i), "") != 0) { + fprintf(fout, "\n + %s ", net->polyRouteStatus(i)); + if (strcmp(net->polyRouteStatus(i), "SHIELD") == 0) { + fprintf(fout, "\n + %s ", net->polyRouteStatusShieldName(i)); + } + } + if (strcmp(net->polyShapeType(i), "") != 0) { + fprintf(fout, "\n + SHAPE %s ", net->polyShapeType(i)); + } + } + if (net->polyMask(i)) { + fprintf(fout, "\n + MASK %d + POLYGON % s ", net->polyMask(i), + net->polygonName(i)); + } else { + fprintf(fout, "\n + POLYGON %s ", net->polygonName(i)); + } + points = net->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + } + } + // RECT + if (net->numRectangles()) { + + for (i = 0; i < net->numRectangles(); i++) { + if (curVer >= 5.8 ) { + if (strcmp(net->rectRouteStatus(i), "") != 0) { + fprintf(fout, "\n + %s ", net->rectRouteStatus(i)); + if (strcmp(net->rectRouteStatus(i), "SHIELD") == 0) { + fprintf(fout, "\n + %s ", net->rectRouteStatusShieldName(i)); + } + } + if (strcmp(net->rectShapeType(i), "") != 0) { + fprintf(fout, "\n + SHAPE %s ", net->rectShapeType(i)); + } + } + if (net->rectMask(i)) { + fprintf(fout, "\n + MASK %d + RECT %s %d %d %d %d", + net->rectMask(i), net->rectName(i), + net->xl(i), net->yl(i), net->xh(i), + net->yh(i)); + } else { + fprintf(fout, "\n + RECT %s %d %d %d %d", + net->rectName(i), + net->xl(i), + net->yl(i), + net->xh(i), + net->yh(i)); + } + } + } + // VIA + if (curVer >= 5.8 && net->numViaSpecs()) { + for (i = 0; i < net->numViaSpecs(); i++) { + if (strcmp(net->viaRouteStatus(i), "") != 0) { + fprintf(fout, "\n + %s ", net->viaRouteStatus(i)); + if (strcmp(net->viaRouteStatus(i), "SHIELD") == 0) { + fprintf(fout, "\n + %s ", net->viaRouteStatusShieldName(i)); + } + } + if (strcmp(net->viaShapeType(i), "") != 0) { + fprintf(fout, "\n + SHAPE %s ", net->viaShapeType(i)); + } + if (net->topMaskNum(i) || net->cutMaskNum(i) || net->bottomMaskNum(i)) { + fprintf(fout, "\n + MASK %d%d%d + VIA %s ", net->topMaskNum(i), + net->cutMaskNum(i), + net->bottomMaskNum(i), + net->viaName(i)); + } else { + fprintf(fout, "\n + VIA %s ", net->viaName(i)); + } + fprintf(fout, " %s", net->viaOrientStr(i)); + + defiPoints points = net->getViaPts(i); + + for (int j = 0; j < points.numPoints; j++) { + fprintf(fout, " %d %d", points.x[j], points.y[j]); + } + fprintf(fout, ";\n"); + + } + } + + if (net->hasSubnets()) { + for (i = 0; i < net->numSubnets(); i++) { + s = net->subnet(i); + if (s->numConnections()) { + if (s->pinIsMustJoin(0)) + fprintf(fout, "- MUSTJOIN "); + else + fprintf(fout, "- %s ", s->name()); + for (j = 0; j < s->numConnections(); j++) { + fprintf(fout, " ( %s %s )\n", s->instance(j), + s->pin(j)); + } + } + + // regularWiring + if (s->numWires()) { + for (i = 0; i < s->numWires(); i++) { + wire = s->wire(i); + fprintf(fout, " + %s ", wire->wireType()); + for (j = 0; j < wire->numPaths(); j++) { + p = wire->path(j); + p->print(fout); + } + } + } + } + } + + if (net->numProps()) { + for (i = 0; i < net->numProps(); i++) { + if (net->propIsString(i)) + fprintf(fout, " + PROPERTY %s %s ", net->propName(i), + net->propValue(i)); + if (net->propIsNumber(i)) + fprintf(fout, " + PROPERTY %s %g ", net->propName(i), + net->propNumber(i)); + switch (net->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + fprintf(fout, "\n"); + } + } + + // SHIELD + count = 0; + // testing the SHIELD for 5.3, obsolete in 5.4 + if (net->numShields()) { + for (i = 0; i < net->numShields(); i++) { + shield = net->shield(i); + fprintf(fout, "\n + SHIELD %s ", shield->shieldName()); + newLayer = 0; + for (j = 0; j < shield->numPaths(); j++) { + p = shield->path(j); + p->initTraverse(); + while ((path = (int)p->next()) != DEFIPATH_DONE) { + count++; + // Don't want the line to be too long + if (count >= 5) { + fprintf(fout, "\n"); + count = 0; + } + switch (path) { + case DEFIPATH_LAYER: + if (newLayer == 0) { + fprintf(fout, "%s ", p->getLayer()); + newLayer = 1; + } else + fprintf(fout, "NEW %s ", p->getLayer()); + break; + case DEFIPATH_VIA: + fprintf(fout, "%s ", ignoreViaNames ? "XXX" : p->getVia()); + break; + case DEFIPATH_VIAROTATION: + fprintf(fout, "%s ", + orientStr(p->getViaRotation())); + break; + case DEFIPATH_WIDTH: + fprintf(fout, "%d ", p->getWidth()); + break; + case DEFIPATH_MASK: + fprintf(fout, "MASK %d ", p->getMask()); + break; + case DEFIPATH_VIAMASK: + fprintf(fout, "MASK %d%d%d ", + p->getViaTopMask(), + p->getViaCutMask(), + p->getViaBottomMask()); + break; + case DEFIPATH_POINT: + p->getPoint(&x, &y); + fprintf(fout, "( %d %d ) ", x, y); + break; + case DEFIPATH_FLUSHPOINT: + p->getFlushPoint(&x, &y, &z); + fprintf(fout, "( %d %d %d ) ", x, y, z); + break; + case DEFIPATH_TAPER: + fprintf(fout, "TAPER "); + break; + case DEFIPATH_SHAPE: + fprintf(fout, "+ SHAPE %s ", p->getShape()); + break; + case DEFIPATH_STYLE: + fprintf(fout, "+ STYLE %d ", p->getStyle()); + break; + } + } + } + } + } + + // layerName width + if (net->hasWidthRules()) { + for (i = 0; i < net->numWidthRules(); i++) { + net->widthRule(i, &layerName, &dist); + fprintf (fout, "\n + WIDTH %s %g ", layerName, dist); + } + } + + // layerName spacing + if (net->hasSpacingRules()) { + for (i = 0; i < net->numSpacingRules(); i++) { + net->spacingRule(i, &layerName, &dist, &left, &right); + if (left == right) + fprintf (fout, "\n + SPACING %s %g ", layerName, dist); + else + fprintf (fout, "\n + SPACING %s %g RANGE %g %g ", + layerName, dist, left, right); + } + } + + if (net->hasFixedbump()) + fprintf(fout, "\n + FIXEDBUMP "); + if (net->hasFrequency()) + fprintf(fout, "\n + FREQUENCY %g ", net->frequency()); + if (net->hasVoltage()) + fprintf(fout, "\n + VOLTAGE %g ", net->voltage()); + if (net->hasWeight()) + fprintf(fout, "\n + WEIGHT %d ", net->weight()); + if (net->hasCap()) + fprintf(fout, "\n + ESTCAP %g ", net->cap()); + if (net->hasSource()) + fprintf(fout, "\n + SOURCE %s ", net->source()); + if (net->hasPattern()) + fprintf(fout, "\n + PATTERN %s ", net->pattern()); + if (net->hasOriginal()) + fprintf(fout, "\n + ORIGINAL %s ", net->original()); + if (net->hasUse()) + fprintf(fout, "\n + USE %s ", net->use()); + + fprintf (fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END SPECIALNETS\n"); + return 0; +} + + +int ndr(defrCallbackType_e c, defiNonDefault* nd, defiUserData ud) { + // For nondefaultrule + int i; + + checkType(c); + if (ud != userData) dataError(); + if (c != defrNonDefaultCbkType) + fprintf(fout, "BOGUS NONDEFAULTRULE TYPE "); + fprintf(fout, "- %s\n", nd->name()); + if (nd->hasHardspacing()) + fprintf(fout, " + HARDSPACING\n"); + for (i = 0; i < nd->numLayers(); i++) { + fprintf(fout, " + LAYER %s", nd->layerName(i)); + fprintf(fout, " WIDTH %d", nd->layerWidthVal(i)); + if (nd->hasLayerDiagWidth(i)) + fprintf(fout, " DIAGWIDTH %d", + nd->layerDiagWidthVal(i)); + if (nd->hasLayerSpacing(i)) + fprintf(fout, " SPACING %d", nd->layerSpacingVal(i)); + if (nd->hasLayerWireExt(i)) + fprintf(fout, " WIREEXT %d", nd->layerWireExtVal(i)); + fprintf(fout, "\n"); + } + for (i = 0; i < nd->numVias(); i++) + fprintf(fout, " + VIA %s\n", nd->viaName(i)); + for (i = 0; i < nd->numViaRules(); i++) + fprintf(fout, " + VIARULE %s\n", ignoreViaNames ? "XXX" : nd->viaRuleName(i)); + for (i = 0; i < nd->numMinCuts(); i++) + fprintf(fout, " + MINCUTS %s %d\n", nd->cutLayerName(i), + nd->numCuts(i)); + for (i = 0; i < nd->numProps(); i++) { + fprintf(fout, " + PROPERTY %s %s ", nd->propName(i), + nd->propValue(i)); + switch (nd->propType(i)) { + case 'R': fprintf(fout, "REAL\n"); + break; + case 'I': fprintf(fout, "INTEGER\n"); + break; + case 'S': fprintf(fout, "STRING\n"); + break; + case 'Q': fprintf(fout, "QUOTESTRING\n"); + break; + case 'N': fprintf(fout, "NUMBER\n"); + break; + } + } + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END NONDEFAULTRULES\n"); + return 0; +} + +int tname(defrCallbackType_e c, const char* string, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "TECHNOLOGY %s ;\n", string); + return 0; +} + +int dname(defrCallbackType_e c, const char* string, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "DESIGN %s ;\n", string); + + return 0; +} + + +char* address(const char* in) { + return ((char*)in); +} + +int cs(defrCallbackType_e c, int num, defiUserData ud) { + char* name; + + checkType(c); + + if (ud != userData) dataError(); + + switch (c) { + case defrComponentStartCbkType : name = address("COMPONENTS"); break; + case defrNetStartCbkType : name = address("NETS"); break; + case defrStartPinsCbkType : name = address("PINS"); break; + case defrViaStartCbkType : name = address("VIAS"); break; + case defrRegionStartCbkType : name = address("REGIONS"); break; + case defrSNetStartCbkType : name = address("SPECIALNETS"); break; + case defrGroupsStartCbkType : name = address("GROUPS"); break; + case defrScanchainsStartCbkType : name = address("SCANCHAINS"); break; + case defrIOTimingsStartCbkType : name = address("IOTIMINGS"); break; + case defrFPCStartCbkType : name = address("FLOORPLANCONSTRAINTS"); break; + case defrTimingDisablesStartCbkType : name = address("TIMING DISABLES"); break; + case defrPartitionsStartCbkType : name = address("PARTITIONS"); break; + case defrPinPropStartCbkType : name = address("PINPROPERTIES"); break; + case defrBlockageStartCbkType : name = address("BLOCKAGES"); break; + case defrSlotStartCbkType : name = address("SLOTS"); break; + case defrFillStartCbkType : name = address("FILLS"); break; + case defrNonDefaultStartCbkType : name = address("NONDEFAULTRULES"); break; + case defrStylesStartCbkType : name = address("STYLES"); break; + default : name = address("BOGUS"); return 1; + } + fprintf(fout, "\n%s %d ;\n", name, num); + numObjs = num; + return 0; +} + +int constraintst(defrCallbackType_e c, int num, defiUserData ud) { + // Handles both constraints and assertions + checkType(c); + if (ud != userData) dataError(); + if (c == defrConstraintsStartCbkType) + fprintf(fout, "\nCONSTRAINTS %d ;\n\n", num); + else + fprintf(fout, "\nASSERTIONS %d ;\n\n", num); + numObjs = num; + return 0; +} + +void operand(defrCallbackType_e c, defiAssertion* a, int ind) { + int i, first = 1; + char* netName; + char* fromInst, * fromPin, * toInst, * toPin; + + if (a->isSum()) { + // Sum in operand, recursively call operand + fprintf(fout, "- SUM ( "); + a->unsetSum(); + isSumSet = 1; + begOperand = 0; + operand (c, a, ind); + fprintf(fout, ") "); + } else { + // operand + if (ind >= a->numItems()) { + fprintf(fout, "ERROR: when writing out SUM in Constraints.\n"); + return; + } + if (begOperand) { + fprintf(fout, "- "); + begOperand = 0; + } + for (i = ind; i < a->numItems(); i++) { + if (a->isNet(i)) { + a->net(i, &netName); + if (!first) + fprintf(fout, ", "); // print , as separator + fprintf(fout, "NET %s ", netName); + } else if (a->isPath(i)) { + a->path(i, &fromInst, &fromPin, &toInst, + &toPin); + if (!first) + fprintf(fout, ", "); + fprintf(fout, "PATH %s %s %s %s ", fromInst, fromPin, toInst, + toPin); + } else if (isSumSet) { + // SUM within SUM, reset the flag + a->setSum(); + operand(c, a, i); + } + first = 0; + } + + } +} + +int constraint(defrCallbackType_e c, defiAssertion* a, defiUserData ud) { + // Handles both constraints and assertions + + checkType(c); + if (ud != userData) dataError(); + if (a->isWiredlogic()) + // Wirelogic + fprintf(fout, "- WIREDLOGIC %s + MAXDIST %g ;\n", +// Wiredlogic dist is also store in fallMax +// a->netName(), a->distance()); + a->netName(), a->fallMax()); + else { + // Call the operand function + isSumSet = 0; // reset the global variable + begOperand = 1; + operand (c, a, 0); + // Get the Rise and Fall + if (a->hasRiseMax()) + fprintf(fout, "+ RISEMAX %g ", a->riseMax()); + if (a->hasFallMax()) + fprintf(fout, "+ FALLMAX %g ", a->fallMax()); + if (a->hasRiseMin()) + fprintf(fout, "+ RISEMIN %g ", a->riseMin()); + if (a->hasFallMin()) + fprintf(fout, "+ FALLMIN %g ", a->fallMin()); + fprintf(fout, ";\n"); + } + --numObjs; + if (numObjs <= 0) { + if (c == defrConstraintCbkType) + fprintf(fout, "END CONSTRAINTS\n"); + else + fprintf(fout, "END ASSERTIONS\n"); + } + return 0; +} + + +int propstart(defrCallbackType_e c, void*, defiUserData) { + checkType(c); + fprintf(fout, "\nPROPERTYDEFINITIONS\n"); + isProp = 1; + + return 0; +} + + +int prop(defrCallbackType_e c, defiProp* p, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + if (strcmp(p->propType(), "design") == 0) + fprintf(fout, "DESIGN %s ", p->propName()); + else if (strcmp(p->propType(), "net") == 0) + fprintf(fout, "NET %s ", p->propName()); + else if (strcmp(p->propType(), "component") == 0) + fprintf(fout, "COMPONENT %s ", p->propName()); + else if (strcmp(p->propType(), "specialnet") == 0) + fprintf(fout, "SPECIALNET %s ", p->propName()); + else if (strcmp(p->propType(), "group") == 0) + fprintf(fout, "GROUP %s ", p->propName()); + else if (strcmp(p->propType(), "row") == 0) + fprintf(fout, "ROW %s ", p->propName()); + else if (strcmp(p->propType(), "componentpin") == 0) + fprintf(fout, "COMPONENTPIN %s ", p->propName()); + else if (strcmp(p->propType(), "region") == 0) + fprintf(fout, "REGION %s ", p->propName()); + else if (strcmp(p->propType(), "nondefaultrule") == 0) + fprintf(fout, "NONDEFAULTRULE %s ", p->propName()); + if (p->dataType() == 'I') + fprintf(fout, "INTEGER "); + if (p->dataType() == 'R') + fprintf(fout, "REAL "); + if (p->dataType() == 'S') + fprintf(fout, "STRING "); + if (p->dataType() == 'Q') + fprintf(fout, "STRING "); + if (p->hasRange()) { + fprintf(fout, "RANGE %g %g ", p->left(), + p->right()); + } + if (p->hasNumber()) + fprintf(fout, "%g ", p->number()); + if (p->hasString()) + fprintf(fout, "\"%s\" ", p->string()); + fprintf(fout, ";\n"); + + return 0; +} + + +int propend(defrCallbackType_e c, void*, defiUserData) { + checkType(c); + if (isProp) { + fprintf(fout, "END PROPERTYDEFINITIONS\n\n"); + isProp = 0; + } + + return 0; +} + + +int hist(defrCallbackType_e c, const char* h, defiUserData ud) { + checkType(c); + defrSetCaseSensitivity(0); + if (ud != userData) dataError(); + fprintf(fout, "HISTORY %s ;\n", h); + defrSetCaseSensitivity(1); + return 0; +} + + +int an(defrCallbackType_e c, const char* h, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "ARRAY %s ;\n", h); + return 0; +} + + +int fn(defrCallbackType_e c, const char* h, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "FLOORPLAN %s ;\n", h); + return 0; +} + + +int bbn(defrCallbackType_e c, const char* h, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "BUSBITCHARS \"%s\" ;\n", h); + return 0; +} + + +int vers(defrCallbackType_e c, double d, defiUserData ud) { + checkType(c); + if (ud != userData) + dataError(); + fprintf(fout, "VERSION %g ;\n", d); + curVer = d; + + fprintf(fout, "ALIAS alias1 aliasValue1 1 ;\n"); + fprintf(fout, "ALIAS alias2 aliasValue2 0 ;\n"); + + return 0; +} + + +int versStr(defrCallbackType_e c, const char* versionName, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "VERSION %s ;\n", versionName); + return 0; +} + + +int units(defrCallbackType_e c, double d, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "UNITS DISTANCE MICRONS %g ;\n", d); + return 0; +} + + +int casesens(defrCallbackType_e c, int d, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + if (d == 1) + fprintf(fout, "NAMESCASESENSITIVE ON ;\n", d); + else + fprintf(fout, "NAMESCASESENSITIVE OFF ;\n", d); + return 0; +} + + +int cls(defrCallbackType_e c, void* cl, defiUserData ud) { + defiSite* site; // Site and Canplace and CannotOccupy + defiBox* box; // DieArea and + defiPinCap* pc; + defiPin* pin; + int i, j, k; + defiRow* row; + defiTrack* track; + defiGcellGrid* gcg; + defiVia* via; + defiRegion* re; + defiGroup* group; + defiComponentMaskShiftLayer* maskShiftLayer = NULL; + defiScanchain* sc; + defiIOTiming* iot; + defiFPC* fpc; + defiTimingDisable* td; + defiPartition* part; + defiPinProp* pprop; + defiBlockage* block; + defiSlot* slots; + defiFill* fills; + defiStyles* styles; + int xl, yl, xh, yh; + char *name, *a1, *b1; + char **inst, **inPin, **outPin; + int *bits; + int size; + int corner, typ; + const char *itemT; + char dir; + defiPinAntennaModel* aModel; + struct defiPoints points; + + checkType(c); + if (ud != userData) dataError(); + switch (c) { + + case defrSiteCbkType : + site = (defiSite*)cl; + fprintf(fout, "SITE %s %g %g %s ", site->name(), + site->x_orig(), site->y_orig(), + orientStr(site->orient())); + fprintf(fout, "DO %g BY %g STEP %g %g ;\n", + site->x_num(), site->y_num(), + site->x_step(), site->y_step()); + break; + case defrCanplaceCbkType : + site = (defiSite*)cl; + fprintf(fout, "CANPLACE %s %g %g %s ", site->name(), + site->x_orig(), site->y_orig(), + orientStr(site->orient())); + fprintf(fout, "DO %g BY %g STEP %g %g ;\n", + site->x_num(), site->y_num(), + site->x_step(), site->y_step()); + break; + case defrCannotOccupyCbkType : + site = (defiSite*)cl; + fprintf(fout, "CANNOTOCCUPY %s %g %g %s ", + site->name(), site->x_orig(), + site->y_orig(), orientStr(site->orient())); + fprintf(fout, "DO %g BY %g STEP %g %g ;\n", + site->x_num(), site->y_num(), + site->x_step(), site->y_step()); + break; + case defrDieAreaCbkType : + box = (defiBox*)cl; + fprintf(fout, "DIEAREA %d %d %d %d ;\n", + box->xl(), box->yl(), box->xh(), + box->yh()); + fprintf(fout, "DIEAREA "); + points = box->getPoint(); + for (i = 0; i < points.numPoints; i++) + fprintf(fout, "%d %d ", points.x[i], points.y[i]); + fprintf(fout, ";\n"); + break; + case defrPinCapCbkType : + pc = (defiPinCap*)cl; + if (testDebugPrint) { + pc->print(fout); + } else { + fprintf(fout, "MINPINS %d WIRECAP %g ;\n", + pc->pin(), pc->cap()); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END DEFAULTCAP\n"); + } + break; + case defrPinCbkType : + pin = (defiPin*)cl; + if (testDebugPrint) { + pin->print(fout); + } else { + fprintf(fout, "- %s + NET %s ", pin->pinName(), + pin->netName()); + // pin->changePinName("pinName"); + // fprintf(fout, "%s ", pin->pinName()); + if (pin->hasDirection()) + fprintf(fout, "+ DIRECTION %s ", pin->direction()); + if (pin->hasUse()) + fprintf(fout, "+ USE %s ", pin->use()); + if (pin->hasNetExpr()) + fprintf(fout, "+ NETEXPR \"%s\" ", pin->netExpr()); + if (pin->hasSupplySensitivity()) + fprintf(fout, "+ SUPPLYSENSITIVITY %s ", + pin->supplySensitivity()); + if (pin->hasGroundSensitivity()) + fprintf(fout, "+ GROUNDSENSITIVITY %s ", + pin->groundSensitivity()); + if (pin->hasLayer()) { + struct defiPoints points; + for (i = 0; i < pin->numLayer(); i++) { + fprintf(fout, "\n + LAYER %s ", pin->layer(i)); + if (pin->layerMask(i)) + fprintf(fout, "MASK %d ", + pin->layerMask(i)); + if (pin->hasLayerSpacing(i)) + fprintf(fout, "SPACING %d ", + pin->layerSpacing(i)); + if (pin->hasLayerDesignRuleWidth(i)) + fprintf(fout, "DESIGNRULEWIDTH %d ", + pin->layerDesignRuleWidth(i)); + pin->bounds(i, &xl, &yl, &xh, &yh); + fprintf(fout, "%d %d %d %d ", xl, yl, xh, yh); + } + for (i = 0; i < pin->numPolygons(); i++) { + fprintf(fout, "\n + POLYGON %s ", + pin->polygonName(i)); + if (pin->polygonMask(i)) + fprintf(fout, "MASK %d ", + pin->polygonMask(i)); + if (pin->hasPolygonSpacing(i)) + fprintf(fout, "SPACING %d ", + pin->polygonSpacing(i)); + if (pin->hasPolygonDesignRuleWidth(i)) + fprintf(fout, "DESIGNRULEWIDTH %d ", + pin->polygonDesignRuleWidth(i)); + points = pin->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + } + for (i = 0; i < pin->numVias(); i++) { + if (pin->viaTopMask(i) || pin->viaCutMask(i) || pin->viaBottomMask(i)) { + fprintf(fout, "\n + VIA %s MASK %d%d%d %d %d ", + pin->viaName(i), + pin->viaTopMask(i), + pin->viaCutMask(i), + pin->viaBottomMask(i), + pin->viaPtX(i), + pin->viaPtY(i)); + } else { + fprintf(fout, "\n + VIA %s %d %d ", pin->viaName(i), + pin->viaPtX(i), pin->viaPtY(i)); + } + } + } + if (pin->hasPort()) { + struct defiPoints points; + defiPinPort* port; + for (j = 0; j < pin->numPorts(); j++) { + port = pin->pinPort(j); + fprintf(fout, "\n + PORT"); + for (i = 0; i < port->numLayer(); i++) { + fprintf(fout, "\n + LAYER %s ", + port->layer(i)); + if (port->layerMask(i)) + fprintf(fout, "MASK %d ", + port->layerMask(i)); + if (port->hasLayerSpacing(i)) + fprintf(fout, "SPACING %d ", + port->layerSpacing(i)); + if (port->hasLayerDesignRuleWidth(i)) + fprintf(fout, "DESIGNRULEWIDTH %d ", + port->layerDesignRuleWidth(i)); + port->bounds(i, &xl, &yl, &xh, &yh); + fprintf(fout, "%d %d %d %d ", xl, yl, xh, yh); + } + for (i = 0; i < port->numPolygons(); i++) { + fprintf(fout, "\n + POLYGON %s ", + port->polygonName(i)); + if (port->polygonMask(i)) + fprintf(fout, "MASK %d ", + port->polygonMask(i)); + if (port->hasPolygonSpacing(i)) + fprintf(fout, "SPACING %d ", + port->polygonSpacing(i)); + if (port->hasPolygonDesignRuleWidth(i)) + fprintf(fout, "DESIGNRULEWIDTH %d ", + port->polygonDesignRuleWidth(i)); + points = port->getPolygon(i); + for (k = 0; k < points.numPoints; k++) + fprintf(fout, "( %d %d ) ", points.x[k], points.y[k]); + } + for (i = 0; i < port->numVias(); i++) { + if (port->viaTopMask(i) || port->viaCutMask(i) + || port->viaBottomMask(i)) { + fprintf(fout, "\n + VIA %s MASK %d%d%d ( %d %d ) ", + port->viaName(i), + port->viaTopMask(i), + port->viaCutMask(i), + port->viaBottomMask(i), + port->viaPtX(i), + port->viaPtY(i)); + } else { + fprintf(fout, "\n + VIA %s ( %d %d ) ", + port->viaName(i), + port->viaPtX(i), + port->viaPtY(i)); + } + } + if (port->hasPlacement()) { + if (port->isPlaced()) { + fprintf(fout, "\n + PLACED "); + fprintf(fout, "( %d %d ) %s ", + port->placementX(), + port->placementY(), + orientStr(port->orient())); + } + if (port->isCover()) { + fprintf(fout, "\n + COVER "); + fprintf(fout, "( %d %d ) %s ", + port->placementX(), + port->placementY(), + orientStr(port->orient())); + } + if (port->isFixed()) { + fprintf(fout, "\n + FIXED "); + fprintf(fout, "( %d %d ) %s ", + port->placementX(), + port->placementY(), + orientStr(port->orient())); + } + } + } + } + if (pin->hasPlacement()) { + if (pin->isPlaced()) { + fprintf(fout, "+ PLACED "); + fprintf(fout, "( %d %d ) %s ", pin->placementX(), + pin->placementY(), + orientStr(pin->orient())); + } + if (pin->isCover()) { + fprintf(fout, "+ COVER "); + fprintf(fout, "( %d %d ) %s ", pin->placementX(), + pin->placementY(), + orientStr(pin->orient())); + } + if (pin->isFixed()) { + fprintf(fout, "+ FIXED "); + fprintf(fout, "( %d %d ) %s ", pin->placementX(), + pin->placementY(), + orientStr(pin->orient())); + } + if (pin->isUnplaced()) + fprintf(fout, "+ UNPLACED "); + } + if (pin->hasSpecial()) { + fprintf(fout, "+ SPECIAL "); + } + if (pin->hasAPinPartialMetalArea()) { + for (i = 0; i < pin->numAPinPartialMetalArea(); i++) { + fprintf(fout, "ANTENNAPINPARTIALMETALAREA %d", + pin->APinPartialMetalArea(i)); + if (*(pin->APinPartialMetalAreaLayer(i))) + fprintf(fout, " LAYER %s", + pin->APinPartialMetalAreaLayer(i)); + fprintf(fout, "\n"); + } + } + if (pin->hasAPinPartialMetalSideArea()) { + for (i = 0; i < pin->numAPinPartialMetalSideArea(); i++) { + fprintf(fout, "ANTENNAPINPARTIALMETALSIDEAREA %d", + pin->APinPartialMetalSideArea(i)); + if (*(pin->APinPartialMetalSideAreaLayer(i))) + fprintf(fout, " LAYER %s", + pin->APinPartialMetalSideAreaLayer(i)); + fprintf(fout, "\n"); + } + } + if (pin->hasAPinDiffArea()) { + for (i = 0; i < pin->numAPinDiffArea(); i++) { + fprintf(fout, "ANTENNAPINDIFFAREA %d", pin->APinDiffArea(i)); + if (*(pin->APinDiffAreaLayer(i))) + fprintf(fout, " LAYER %s", pin->APinDiffAreaLayer(i)); + fprintf(fout, "\n"); + } + } + if (pin->hasAPinPartialCutArea()) { + for (i = 0; i < pin->numAPinPartialCutArea(); i++) { + fprintf(fout, "ANTENNAPINPARTIALCUTAREA %d", + pin->APinPartialCutArea(i)); + if (*(pin->APinPartialCutAreaLayer(i))) + fprintf(fout, " LAYER %s", pin->APinPartialCutAreaLayer(i)); + fprintf(fout, "\n"); + } + } + + for (j = 0; j < pin->numAntennaModel(); j++) { + aModel = pin->antennaModel(j); + + fprintf(fout, "ANTENNAMODEL %s\n", + aModel->antennaOxide()); + + if (aModel->hasAPinGateArea()) { + for (i = 0; i < aModel->numAPinGateArea(); + i++) { + fprintf(fout, "ANTENNAPINGATEAREA %d", + aModel->APinGateArea(i)); + if (aModel->hasAPinGateAreaLayer(i)) + fprintf(fout, " LAYER %s", aModel->APinGateAreaLayer(i)); + fprintf(fout, "\n"); + } + } + if (aModel->hasAPinMaxAreaCar()) { + for (i = 0; + i < aModel->numAPinMaxAreaCar(); i++) { + fprintf(fout, "ANTENNAPINMAXAREACAR %d", + aModel->APinMaxAreaCar(i)); + if (aModel->hasAPinMaxAreaCarLayer(i)) + fprintf(fout, + " LAYER %s", aModel->APinMaxAreaCarLayer(i)); + fprintf(fout, "\n"); + } + } + if (aModel->hasAPinMaxSideAreaCar()) { + for (i = 0; + i < aModel->numAPinMaxSideAreaCar(); + i++) { + fprintf(fout, "ANTENNAPINMAXSIDEAREACAR %d", + aModel->APinMaxSideAreaCar(i)); + if (aModel->hasAPinMaxSideAreaCarLayer(i)) + fprintf(fout, + " LAYER %s", aModel->APinMaxSideAreaCarLayer(i)); + fprintf(fout, "\n"); + } + } + if (aModel->hasAPinMaxCutCar()) { + for (i = 0; i < aModel->numAPinMaxCutCar(); + i++) { + fprintf(fout, "ANTENNAPINMAXCUTCAR %d", + aModel->APinMaxCutCar(i)); + if (aModel->hasAPinMaxCutCarLayer(i)) + fprintf(fout, " LAYER %s", + aModel->APinMaxCutCarLayer(i)); + fprintf(fout, "\n"); + } + } + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END PINS\n"); + } + break; + case defrDefaultCapCbkType : + i = (long)cl; + fprintf(fout, "DEFAULTCAP %d\n", i); + numObjs = i; + break; + case defrRowCbkType : + row = (defiRow*)cl; + fprintf(fout, "ROW %s %s %g %g %s ", ignoreRowNames ? "XXX" : row->name(), + row->macro(), row->x(), row->y(), + orientStr(row->orient())); + if (row->hasDo()) { + fprintf(fout, "DO %g BY %g ", + row->xNum(), row->yNum()); + if (row->hasDoStep()) + fprintf(fout, "STEP %g %g ;\n", + row->xStep(), row->yStep()); + else + fprintf(fout, ";\n"); + } else + fprintf(fout, ";\n"); + if (row->numProps() > 0) { + for (i = 0; i < row->numProps(); i++) { + fprintf(fout, " + PROPERTY %s %s ", + row->propName(i), + row->propValue(i)); + switch (row->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + fprintf(fout, ";\n"); + } + break; + case defrTrackCbkType : + track = (defiTrack*)cl; + if (track->firstTrackMask()) { + if (track->sameMask()) { + fprintf(fout, "TRACKS %s %g DO %g STEP %g MASK %d SAMEMASK LAYER ", + track->macro(), track->x(), + track->xNum(), track->xStep(), + track->firstTrackMask()); + } else { + fprintf(fout, "TRACKS %s %g DO %g STEP %g MASK %d LAYER ", + track->macro(), track->x(), + track->xNum(), track->xStep(), + track->firstTrackMask()); + } + } else { + fprintf(fout, "TRACKS %s %g DO %g STEP %g LAYER ", + track->macro(), track->x(), + track->xNum(), track->xStep()); + } + for (i = 0; i < track->numLayers(); i++) + fprintf(fout, "%s ", track->layer(i)); + fprintf(fout, ";\n"); + break; + case defrGcellGridCbkType : + gcg = (defiGcellGrid*)cl; + fprintf(fout, "GCELLGRID %s %d DO %d STEP %g ;\n", + gcg->macro(), gcg->x(), + gcg->xNum(), gcg->xStep()); + break; + case defrViaCbkType : + via = (defiVia*)cl; + if (testDebugPrint) { + via->print(fout); + } else { + fprintf(fout, "- %s ", via->name()); + if (via->hasPattern()) + fprintf(fout, "+ PATTERNNAME %s ", via->pattern()); + for (i = 0; i < via->numLayers(); i++) { + via->layer(i, &name, &xl, &yl, &xh, &yh); + int rectMask = via->rectMask(i); + + if (rectMask) { + fprintf(fout, "+ RECT %s + MASK %d %d %d %d %d \n", + name, rectMask, xl, yl, xh, yh); + } else { + fprintf(fout, "+ RECT %s %d %d %d %d \n", + name, xl, yl, xh, yh); + } + } + // POLYGON + if (via->numPolygons()) { + struct defiPoints points; + for (i = 0; i < via->numPolygons(); i++) { + int polyMask = via->polyMask(i); + + if (polyMask) { + fprintf(fout, "\n + POLYGON %s + MASK %d ", + via->polygonName(i), polyMask); + } else { + fprintf(fout, "\n + POLYGON %s ", via->polygonName(i)); + } + points = via->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + } + } + fprintf(fout, " ;\n"); + if (via->hasViaRule()) { + char *vrn, *bl, *cl, *tl; + int xs, ys, xcs, ycs, xbe, ybe, xte, yte; + int cr, cc, xo, yo, xbo, ybo, xto, yto; + (void)via->viaRule(&vrn, &xs, &ys, &bl, &cl, &tl, &xcs, + &ycs, &xbe, &ybe, &xte, &yte); + fprintf(fout, "+ VIARULE '%s'\n", ignoreViaNames ? "XXX" : vrn); + fprintf(fout, " + CUTSIZE %d %d\n", xs, ys); + fprintf(fout, " + LAYERS %s %s %s\n", bl, cl, tl); + fprintf(fout, " + CUTSPACING %d %d\n", xcs, ycs); + fprintf(fout, " + ENCLOSURE %d %d %d %d\n", xbe, ybe, xte, yte); + if (via->hasRowCol()) { + (void)via->rowCol(&cr, &cc); + fprintf(fout, " + ROWCOL %d %d\n", cr, cc); + } + if (via->hasOrigin()) { + (void)via->origin(&xo, &yo); + fprintf(fout, " + ORIGIN %d %d\n", xo, yo); + } + if (via->hasOffset()) { + (void)via->offset(&xbo, &ybo, &xto, &yto); + fprintf(fout, " + OFFSET %d %d %d %d\n", xbo, ybo, xto, yto); + } + if (via->hasCutPattern()) + fprintf(fout, " + PATTERN '%s'\n", via->cutPattern()); + } + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END VIAS\n"); + } + break; + case defrRegionCbkType : + re = (defiRegion*)cl; + fprintf(fout, "- %s ", re->name()); + for (i = 0; i < re->numRectangles(); i++) + fprintf(fout, "%d %d %d %d \n", re->xl(i), + re->yl(i), re->xh(i), + re->yh(i)); + if (re->hasType()) + fprintf(fout, "+ TYPE %s\n", re->type()); + if (re->numProps()) { + for (i = 0; i < re->numProps(); i++) { + fprintf(fout, "+ PROPERTY %s %s ", re->propName(i), + re->propValue(i)); + switch (re->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) { + fprintf(fout, "END REGIONS\n"); + } + break; + case defrGroupNameCbkType : + if ((char*)cl) { + fprintf(fout, "- %s", (char*)cl); + } + break; + case defrGroupMemberCbkType : + if ((char*)cl) { + fprintf(fout, " %s", (char*)cl); + } + break; + case defrComponentMaskShiftLayerCbkType : + fprintf(fout, "COMPONENTMASKSHIFT "); + + for (i = 0; i < maskShiftLayer->numMaskShiftLayers(); i++) { + fprintf(fout, "%s ", maskShiftLayer->maskShiftLayer(i)); + } + fprintf(fout, ";\n"); + break; + case defrGroupCbkType : + group = (defiGroup*)cl; + if (group->hasMaxX() | group->hasMaxY() + | group->hasPerim()) { + fprintf(fout, "\n + SOFT "); + if (group->hasPerim()) + fprintf(fout, "MAXHALFPERIMETER %d ", + group->perim()); + if (group->hasMaxX()) + fprintf(fout, "MAXX %d ", group->maxX()); + if (group->hasMaxY()) + fprintf(fout, "MAXY %d ", group->maxY()); + } + if (group->hasRegionName()) + fprintf(fout, "\n + REGION %s ", group->regionName()); + if (group->hasRegionBox()) { + int *gxl, *gyl, *gxh, *gyh; + int size; + group->regionRects(&size, &gxl, &gyl, &gxh, &gyh); + for (i = 0; i < size; i++) + fprintf(fout, "REGION %d %d %d %d ", gxl[i], gyl[i], + gxh[i], gyh[i]); + } + if (group->numProps()) { + for (i = 0; i < group->numProps(); i++) { + fprintf(fout, "\n + PROPERTY %s %s ", + group->propName(i), + group->propValue(i)); + switch (group->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + } + fprintf(fout, " ;\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END GROUPS\n"); + break; + case defrScanchainCbkType : + sc = (defiScanchain*)cl; + fprintf(fout, "- %s\n", sc->name()); + if (sc->hasStart()) { + sc->start(&a1, &b1); + fprintf(fout, " + START %s %s\n", a1, b1); + } + if (sc->hasStop()) { + sc->stop(&a1, &b1); + fprintf(fout, " + STOP %s %s\n", a1, b1); + } + if (sc->hasCommonInPin() || + sc->hasCommonOutPin()) { + fprintf(fout, " + COMMONSCANPINS "); + if (sc->hasCommonInPin()) + fprintf(fout, " ( IN %s ) ", sc->commonInPin()); + if (sc->hasCommonOutPin()) + fprintf(fout, " ( OUT %s ) ",sc->commonOutPin()); + fprintf(fout, "\n"); + } + if (sc->hasFloating()) { + sc->floating(&size, &inst, &inPin, &outPin, &bits); + if (size > 0) + fprintf(fout, " + FLOATING\n"); + for (i = 0; i < size; i++) { + fprintf(fout, " %s ", inst[i]); + if (inPin[i]) + fprintf(fout, "( IN %s ) ", inPin[i]); + if (outPin[i]) + fprintf(fout, "( OUT %s ) ", outPin[i]); + if (bits[i] != -1) + fprintf(fout, "( BITS %d ) ", bits[i]); + fprintf(fout, "\n"); + } + } + + if (sc->hasOrdered()) { + for (i = 0; i < sc->numOrderedLists(); i++) { + sc->ordered(i, &size, &inst, &inPin, &outPin, + &bits); + if (size > 0) + fprintf(fout, " + ORDERED\n"); + for (j = 0; j < size; j++) { + fprintf(fout, " %s ", inst[j]); + if (inPin[j]) + fprintf(fout, "( IN %s ) ", inPin[j]); + if (outPin[j]) + fprintf(fout, "( OUT %s ) ", outPin[j]); + if (bits[j] != -1) + fprintf(fout, "( BITS %d ) ", bits[j]); + fprintf(fout, "\n"); + } + } + } + + if (sc->hasPartition()) { + fprintf(fout, " + PARTITION %s ", + sc->partitionName()); + if (sc->hasPartitionMaxBits()) + fprintf(fout, "MAXBITS %d ", + sc->partitionMaxBits()); + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END SCANCHAINS\n"); + break; + case defrIOTimingCbkType : + iot = (defiIOTiming*)cl; + fprintf(fout, "- ( %s %s )\n", iot->inst(), + iot->pin()); + if (iot->hasSlewRise()) + fprintf(fout, " + RISE SLEWRATE %g %g\n", + iot->slewRiseMin(), + iot->slewRiseMax()); + if (iot->hasSlewFall()) + fprintf(fout, " + FALL SLEWRATE %g %g\n", + iot->slewFallMin(), + iot->slewFallMax()); + if (iot->hasVariableRise()) + fprintf(fout, " + RISE VARIABLE %g %g\n", + iot->variableRiseMin(), + iot->variableRiseMax()); + if (iot->hasVariableFall()) + fprintf(fout, " + FALL VARIABLE %g %g\n", + iot->variableFallMin(), + iot->variableFallMax()); + if (iot->hasCapacitance()) + fprintf(fout, " + CAPACITANCE %g\n", + iot->capacitance()); + if (iot->hasDriveCell()) { + fprintf(fout, " + DRIVECELL %s ", + iot->driveCell()); + if (iot->hasFrom()) + fprintf(fout, " FROMPIN %s ", + iot->from()); + if (iot->hasTo()) + fprintf(fout, " TOPIN %s ", + iot->to()); + if (iot->hasParallel()) + fprintf(fout, "PARALLEL %g", + iot->parallel()); + fprintf(fout, "\n"); + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END IOTIMINGS\n"); + break; + case defrFPCCbkType : + fpc = (defiFPC*)cl; + fprintf(fout, "- %s ", fpc->name()); + if (fpc->isVertical()) + fprintf(fout, "VERTICAL "); + if (fpc->isHorizontal()) + fprintf(fout, "HORIZONTAL "); + if (fpc->hasAlign()) + fprintf(fout, "ALIGN "); + if (fpc->hasMax()) + fprintf(fout, "%g ", fpc->alignMax()); + if (fpc->hasMin()) + fprintf(fout, "%g ", fpc->alignMin()); + if (fpc->hasEqual()) + fprintf(fout, "%g ", fpc->equal()); + for (i = 0; i < fpc->numParts(); i++) { + fpc->getPart(i, &corner, &typ, &name); + if (corner == 'B') + fprintf(fout, "BOTTOMLEFT "); + else + fprintf(fout, "TOPRIGHT "); + if (typ == 'R') + fprintf(fout, "ROWS %s ", name); + else + fprintf(fout, "COMPS %s ", name); + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END FLOORPLANCONSTRAINTS\n"); + break; + case defrTimingDisableCbkType : + td = (defiTimingDisable*)cl; + if (td->hasFromTo()) + fprintf(fout, "- FROMPIN %s %s ", + td->fromInst(), + td->fromPin(), + td->toInst(), + td->toPin()); + if (td->hasThru()) + fprintf(fout, "- THRUPIN %s %s ", + td->thruInst(), + td->thruPin()); + if (td->hasMacroFromTo()) + fprintf(fout, "- MACRO %s FROMPIN %s %s ", + td->macroName(), + td->fromPin(), + td->toPin()); + if (td->hasMacroThru()) + fprintf(fout, "- MACRO %s THRUPIN %s %s ", + td->macroName(), + td->fromPin()); + fprintf(fout, ";\n"); + break; + case defrPartitionCbkType : + part = (defiPartition*)cl; + fprintf(fout, "- %s ", part->name()); + if (part->isSetupRise() | + part->isSetupFall() | + part->isHoldRise() | + part->isHoldFall()) { + // has turnoff + fprintf(fout, "TURNOFF "); + if (part->isSetupRise()) + fprintf(fout, "SETUPRISE "); + if (part->isSetupFall()) + fprintf(fout, "SETUPFALL "); + if (part->isHoldRise()) + fprintf(fout, "HOLDRISE "); + if (part->isHoldFall()) + fprintf(fout, "HOLDFALL "); + } + itemT = part->itemType(); + dir = part->direction(); + if (strcmp(itemT, "CLOCK") == 0) { + if (dir == 'T') // toclockpin + fprintf(fout, "+ TOCLOCKPIN %s %s ", + part->instName(), + part->pinName()); + if (dir == 'F') // fromclockpin + fprintf(fout, "+ FROMCLOCKPIN %s %s ", + part->instName(), + part->pinName()); + if (part->hasMin()) + fprintf(fout, "MIN %g %g ", + part->partitionMin(), + part->partitionMax()); + if (part->hasMax()) + fprintf(fout, "MAX %g %g ", + part->partitionMin(), + part->partitionMax()); + fprintf(fout, "PINS "); + for (i = 0; i < part->numPins(); i++) + fprintf(fout, "%s ", part->pin(i)); + } else if (strcmp(itemT, "IO") == 0) { + if (dir == 'T') // toiopin + fprintf(fout, "+ TOIOPIN %s %s ", + part->instName(), + part->pinName()); + if (dir == 'F') // fromiopin + fprintf(fout, "+ FROMIOPIN %s %s ", + part->instName(), + part->pinName()); + } else if (strcmp(itemT, "COMP") == 0) { + if (dir == 'T') // tocomppin + fprintf(fout, "+ TOCOMPPIN %s %s ", + part->instName(), + part->pinName()); + if (dir == 'F') // fromcomppin + fprintf(fout, "+ FROMCOMPPIN %s %s ", + part->instName(), + part->pinName()); + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END PARTITIONS\n"); + break; + + case defrPinPropCbkType : + pprop = (defiPinProp*)cl; + if (pprop->isPin()) + fprintf(fout, "- PIN %s ", pprop->pinName()); + else + fprintf(fout, "- %s %s ", + pprop->instName(), + pprop->pinName()); + fprintf(fout, ";\n"); + if (pprop->numProps() > 0) { + for (i = 0; i < pprop->numProps(); i++) { + fprintf(fout, " + PROPERTY %s %s ", + pprop->propName(i), + pprop->propValue(i)); + switch (pprop->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + fprintf(fout, ";\n"); + } + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END PINPROPERTIES\n"); + break; + case defrBlockageCbkType : + block = (defiBlockage*)cl; + if (testDebugPrint) { + block->print(fout); + } else { + if (block->hasLayer()) { + fprintf(fout, "- LAYER %s\n", block->layerName()); + if (block->hasComponent()) + fprintf(fout, " + COMPONENT %s\n", + block->layerComponentName()); + if (block->hasSlots()) + fprintf(fout, " + SLOTS\n"); + if (block->hasFills()) + fprintf(fout, " + FILLS\n"); + if (block->hasPushdown()) + fprintf(fout, " + PUSHDOWN\n"); + if (block->hasExceptpgnet()) + fprintf(fout, " + EXCEPTPGNET\n"); + if (block->hasMask()) + fprintf(fout, " + MASK %d\n", block->mask()); + if (block->hasSpacing()) + fprintf(fout, " + SPACING %d\n", + block->minSpacing()); + if (block->hasDesignRuleWidth()) + fprintf(fout, " + DESIGNRULEWIDTH %d\n", + block->designRuleWidth()); + } + else if (block->hasPlacement()) { + fprintf(fout, "- PLACEMENT\n"); + if (block->hasSoft()) + fprintf(fout, " + SOFT\n"); + if (block->hasPartial()) + fprintf(fout, " + PARTIAL %g\n", + block->placementMaxDensity()); + if (block->hasComponent()) + fprintf(fout, " + COMPONENT %s\n", + block->placementComponentName()); + if (block->hasPushdown()) + fprintf(fout, " + PUSHDOWN\n"); + } + + for (i = 0; i < block->numRectangles(); i++) { + fprintf(fout, " RECT %d %d %d %d\n", + block->xl(i), block->yl(i), + block->xh(i), block->yh(i)); + } + + for (i = 0; i < block->numPolygons(); i++) { + fprintf(fout, " POLYGON "); + points = block->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + fprintf(fout, "\n"); + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END BLOCKAGES\n"); + } + break; + case defrSlotCbkType : + slots = (defiSlot*)cl; + if (slots->hasLayer()) + fprintf(fout, "- LAYER %s\n", slots->layerName()); + + for (i = 0; i < slots->numRectangles(); i++) { + fprintf(fout, " RECT %d %d %d %d\n", + slots->xl(i), slots->yl(i), + slots->xh(i), slots->yh(i)); + } + for (i = 0; i < slots->numPolygons(); i++) { + fprintf(fout, " POLYGON "); + points = slots->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + fprintf(fout, ";\n"); + } + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END SLOTS\n"); + break; + case defrFillCbkType : + fills = (defiFill*)cl; + if (testDebugPrint) { + fills->print(fout); + } else { + if (fills->hasLayer()) { + fprintf(fout, "- LAYER %s", fills->layerName()); + if (fills->layerMask()) { + fprintf(fout, " + MASK %d", fills->layerMask()); + } + if (fills->hasLayerOpc()) + fprintf(fout, " + OPC"); + fprintf(fout, "\n"); + + for (i = 0; i < fills->numRectangles(); i++) { + fprintf(fout, " RECT %d %d %d %d\n", + fills->xl(i), fills->yl(i), + fills->xh(i), fills->yh(i)); + } + for (i = 0; i < fills->numPolygons(); i++) { + fprintf(fout, " POLYGON "); + points = fills->getPolygon(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + fprintf(fout, ";\n"); + } + fprintf(fout, ";\n"); + } + --numObjs; + if (fills->hasVia()) { + fprintf(fout, "- VIA %s", fills->viaName()); + if (fills->viaTopMask() || fills->viaCutMask() + || fills->viaBottomMask()) { + fprintf(fout, " + MASK %d%d%d", + fills->viaTopMask(), + fills->viaCutMask(), + fills->viaBottomMask()); + } + if (fills->hasViaOpc()) + fprintf(fout, " + OPC"); + fprintf(fout, "\n"); + + for (i = 0; i < fills->numViaPts(); i++) { + points = fills->getViaPts(i); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, " %d %d", points.x[j], points.y[j]); + fprintf(fout, ";\n"); + } + fprintf(fout, ";\n"); + } + if (numObjs <= 0) + fprintf(fout, "END FILLS\n"); + } + break; + case defrStylesCbkType : + struct defiPoints points; + styles = (defiStyles*)cl; + fprintf(fout, "- STYLE %d ", styles->style()); + points = styles->getPolygon(); + for (j = 0; j < points.numPoints; j++) + fprintf(fout, "%d %d ", points.x[j], points.y[j]); + fprintf(fout, ";\n"); + --numObjs; + if (numObjs <= 0) + fprintf(fout, "END STYLES\n"); + break; + + default: fprintf(fout, "BOGUS callback to cls.\n"); return 1; + } + return 0; +} + + +int dn(defrCallbackType_e c, const char* h, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "DIVIDERCHAR \"%s\" ;\n",h); + return 0; +} + + +int ext(defrCallbackType_e t, const char* c, defiUserData ud) { + char* name; + + checkType(t); + if (ud != userData) dataError(); + + switch (t) { + case defrNetExtCbkType : name = address("net"); break; + case defrComponentExtCbkType : name = address("component"); break; + case defrPinExtCbkType : name = address("pin"); break; + case defrViaExtCbkType : name = address("via"); break; + case defrNetConnectionExtCbkType : name = address("net connection"); break; + case defrGroupExtCbkType : name = address("group"); break; + case defrScanChainExtCbkType : name = address("scanchain"); break; + case defrIoTimingsExtCbkType : name = address("io timing"); break; + case defrPartitionsExtCbkType : name = address("partition"); break; + default: name = address("BOGUS"); return 1; + } + fprintf(fout, " %s extension %s\n", name, c); + return 0; +} + +int extension(defrCallbackType_e c, const char* extsn, defiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "BEGINEXT %s\n", extsn); + return 0; +} + +void* mallocCB(size_t size) { + return malloc(size); +} + +void* reallocCB(void* name, size_t size) { + return realloc(name, size); +} + +void freeCB(void* name) { + free(name); + return; +} + + +BEGIN_LEFDEF_PARSER_NAMESPACE +extern long long nlines; +END_LEFDEF_PARSER_NAMESPACE +static int ccr1131444 = 0; + +void lineNumberCB(long long lineNo) { + + // The CCR 1131444 tests ability of the DEF parser to count + // input line numbers out of 32-bit int range. On the first callback + // call 10G lines will be added to line counter. It should be + // reflected in output. + if (ccr1131444) { + lineNo += 10000000000LL; + defrSetNLines(lineNo); + ccr1131444 = 0; + } + +#ifdef _WIN32 + fprintf(fout, "Parsed %I64d number of lines!!\n", lineNo); +#else + fprintf(fout, "Parsed %lld number of lines!!\n", lineNo); +#endif +} + +int unUsedCB(defrCallbackType_e, void*, defiUserData) { + fprintf(fout, "This callback is not used.\n"); + return 0; +} + +void printWarning(const char *str) +{ + fprintf(stderr, "%s\n", str); +} + +int main(int argc, char** argv) { + int num = 99; + char* inFile[6]; + char* outFile; + FILE* f; + int res; + int noCalls = 0; +// long start_mem; + int retStr = 0; + int numInFile = 0; + int fileCt = 0; + int test1 = 0; + int test2 = 0; + int noNetCb = 0; + int ccr749853 = 0; + int line_num_print_interval = 50; + +#ifdef WIN32 + // Enable two-digit exponent format + _set_output_format(_TWO_DIGIT_EXPONENT); +#endif + +// start_mem = (long)sbrk(0); + + strcpy(defaultName, "def.in"); + strcpy(defaultOut, "list"); + inFile[0] = defaultName; + outFile = defaultOut; + fout = stdout; + userData = (void*) 0x01020304; + argc--; + argv++; + + if (argc == 0) { + fprintf(stderr, "Type 'defrw --help' for the help.\n"); + return 2; + } + + while (argc--) { + if (strcmp(*argv, "-d") == 0) { + argv++; + argc--; + sscanf(*argv, "%d", &num); + defiSetDebug(num, 1); + } else if (strcmp(*argv, "-nc") == 0) { + noCalls = 1; + } else if (strcmp(*argv, "-o") == 0) { + argv++; + argc--; + outFile = *argv; + if ((fout = fopen(outFile, "w")) == 0) { + fprintf(stderr, "ERROR: could not open output file\n"); + return 2; + } + } else if (strcmp(*argv, "-verStr") == 0) { + /* New to set the version callback routine to return a string */ + /* instead of double. */ + retStr = 1; + } else if (strcmp(*argv, "-i") == 0) { + argv++; + argc--; + line_num_print_interval = atoi(*argv); + } else if (strcmp(*argv, "-test1") == 0) { + test1 = 1; + } else if (strcmp(*argv, "-test2") == 0) { + test2 = 1; + } else if (strcmp(*argv, "-noNet") == 0) { + noNetCb = 1; + } else if (strcmp(*argv, "-ccr749853") == 0) { + ccr749853 = 1; + } else if (strcmp(*argv, "-ccr1131444") == 0) { + ccr1131444 = 1; + } else if (strcmp(*argv, "-testDebugPrint") == 0) { + testDebugPrint = 1; + } else if (strcmp(*argv, "-sessionless") == 0) { + isSessionless = 1; + } else if (strcmp(*argv, "-ignoreRowNames") == 0) { + ignoreRowNames = 1; + } else if (strcmp(*argv, "-ignoreViaNames") == 0) { + ignoreViaNames = 1; + } else if (argv[0][0] != '-') { + if (numInFile >= 6) { + fprintf(stderr, "ERROR: too many input files, max = 6.\n"); + return 2; + } + inFile[numInFile++] = *argv; + } else if ((strcmp(*argv, "-h") == 0) || (strcmp(*argv, "--help") == 0)) { + fprintf(stderr, "Usage: defrw (> endobj 5617 0 obj <> endobj 5618 0 obj <> endobj 5619 0 obj <> endobj 5620 0 obj <> endobj 5621 0 obj <> endobj 5622 0 obj <> endobj 5623 0 obj <> endobj 5624 0 obj <> endobj 5625 0 obj <> endobj 5626 0 obj <> endobj 5627 0 obj <> endobj 5628 0 obj <> endobj 5629 0 obj <> endobj 5630 0 obj <> endobj 5631 0 obj <> endobj 5632 0 obj <> endobj 5633 0 obj <> endobj 5634 0 obj <> endobj 5635 0 obj <> endobj 5636 0 obj <> endobj 5637 0 obj <> endobj 5638 0 obj <> endobj 5639 0 obj <> endobj 5640 0 obj <> endobj 5641 0 obj <> endobj 5642 0 obj <> endobj 5643 0 obj <> endobj 5644 0 obj <> endobj 5645 0 obj <> endobj 5646 0 obj <> endobj 5647 0 obj <> endobj 5648 0 obj <> endobj 5649 0 obj <> endobj 5650 0 obj <> endobj 5651 0 obj <> endobj 5652 0 obj <> endobj 5653 0 obj <> endobj 5654 0 obj <> endobj 5655 0 obj <> endobj 5656 0 obj <> endobj 5657 0 obj <> endobj 5658 0 obj <> endobj 5659 0 obj <> endobj 5660 0 obj <> endobj 5661 0 obj <> endobj 5662 0 obj <> endobj 5663 0 obj <> endobj 5664 0 obj <> endobj 5665 0 obj <> endobj 5666 0 obj <> endobj 5667 0 obj <> endobj 5668 0 obj <> endobj 5669 0 obj <> endobj 5670 0 obj <> endobj 5671 0 obj <> endobj 5672 0 obj <> endobj 5673 0 obj <> endobj 5674 0 obj <> endobj 5675 0 obj <> endobj 5676 0 obj <> endobj 5677 0 obj <> endobj 5678 0 obj <> endobj 5679 0 obj <> endobj 5680 0 obj <> endobj 5681 0 obj <> endobj 5682 0 obj <> endobj 5683 0 obj <> endobj 5684 0 obj <> endobj 5685 0 obj <> endobj 5686 0 obj <> endobj 5687 0 obj <> endobj 5688 0 obj <> endobj 5689 0 obj <> endobj 5690 0 obj <> endobj 5691 0 obj <> endobj 5692 0 obj <> endobj 5693 0 obj <> endobj 5694 0 obj <> endobj 5695 0 obj <> endobj 5696 0 obj <> endobj 5697 0 obj <> endobj 5698 0 obj <> endobj 5699 0 obj <> endobj 5700 0 obj <> endobj 5701 0 obj <> endobj 5702 0 obj <> endobj 5703 0 obj <> endobj 5704 0 obj <> endobj 5705 0 obj <> endobj 5706 0 obj <> endobj 5707 0 obj <> endobj 5708 0 obj <> endobj 5709 0 obj <> endobj 5710 0 obj <> endobj 5711 0 obj <> endobj 5712 0 obj <> endobj 5713 0 obj <> endobj 5714 0 obj <> endobj 5715 0 obj <> endobj 5716 0 obj <> endobj 5717 0 obj <> endobj 5718 0 obj <> endobj 5719 0 obj <> endobj 5720 0 obj <> endobj 5721 0 obj <> endobj 5722 0 obj <> endobj 5723 0 obj <> endobj 5724 0 obj <> endobj 5725 0 obj <> endobj 5726 0 obj <> endobj 5727 0 obj <> endobj 5728 0 obj <> endobj 5729 0 obj <> endobj 5730 0 obj <> endobj 5731 0 obj <> endobj 5732 0 obj <> endobj 5733 0 obj <> endobj 5734 0 obj <> endobj 5735 0 obj <> endobj 5736 0 obj <> endobj 5737 0 obj <> endobj 5738 0 obj <> endobj 5739 0 obj <> endobj 5740 0 obj <> endobj 5741 0 obj <> endobj 5742 0 obj <> endobj 5743 0 obj <> endobj 5744 0 obj <> endobj 5745 0 obj <> endobj 5746 0 obj <> endobj 5747 0 obj <> endobj 5748 0 obj <> endobj 5749 0 obj <> endobj 5750 0 obj <> endobj 5751 0 obj <> endobj 5752 0 obj <> endobj 5753 0 obj <> endobj 5754 0 obj <> endobj 5755 0 obj <> endobj 5756 0 obj <> endobj 5757 0 obj <> endobj 5758 0 obj <> endobj 5759 0 obj <> endobj 5760 0 obj <> endobj 5761 0 obj <> endobj 5762 0 obj <> endobj 5763 0 obj <> endobj 5764 0 obj <> endobj 5765 0 obj <> endobj 5766 0 obj <> endobj 5767 0 obj <> endobj 5768 0 obj <> endobj 5769 0 obj <> endobj 5770 0 obj <> endobj 5771 0 obj <> endobj 5772 0 obj <> endobj 5773 0 obj <> endobj 5774 0 obj <> endobj 5775 0 obj <> endobj 5776 0 obj <> endobj 5777 0 obj <> endobj 5778 0 obj <> endobj 5779 0 obj <> endobj 5780 0 obj <> endobj 5781 0 obj <> endobj 5782 0 obj <> endobj 5783 0 obj <> endobj 5784 0 obj <> endobj 5785 0 obj <> endobj 5786 0 obj <> endobj 5787 0 obj <> endobj 5788 0 obj <> endobj 5789 0 obj <> endobj 5790 0 obj <> endobj 5791 0 obj <> endobj 5792 0 obj <> endobj 5793 0 obj <> endobj 5794 0 obj <> endobj 5795 0 obj <> endobj 5796 0 obj <> endobj 5797 0 obj <> endobj 5798 0 obj <> endobj 5799 0 obj <> endobj 5800 0 obj <> endobj 5801 0 obj <> endobj 5802 0 obj <> endobj 5803 0 obj <> endobj 5804 0 obj <> endobj 5805 0 obj <> endobj 5806 0 obj <> endobj 5807 0 obj <> endobj 5808 0 obj <> endobj 5809 0 obj <> endobj 5810 0 obj <> endobj 5811 0 obj <> endobj 5812 0 obj <> endobj 5813 0 obj <> endobj 5814 0 obj <> endobj 5815 0 obj <> endobj 5816 0 obj <> endobj 5817 0 obj <> endobj 5818 0 obj <> endobj 5819 0 obj <> endobj 5820 0 obj <> endobj 5821 0 obj <> endobj 5822 0 obj <> endobj 5823 0 obj <> endobj 5824 0 obj <> endobj 5825 0 obj <> endobj 5826 0 obj <> endobj 5827 0 obj <> endobj 5828 0 obj <> endobj 5829 0 obj <> endobj 5830 0 obj <> endobj 5831 0 obj <> endobj 5832 0 obj <> endobj 5833 0 obj <> endobj 5834 0 obj <> endobj 5835 0 obj <> endobj 5836 0 obj <> endobj 5837 0 obj <> endobj 5838 0 obj <> endobj 5839 0 obj <> endobj 5840 0 obj <> endobj 5841 0 obj <> endobj 5842 0 obj <> endobj 5843 0 obj <> endobj 5844 0 obj <> endobj 5845 0 obj <> endobj 5846 0 obj <> endobj 5847 0 obj <> endobj 5848 0 obj <> endobj 5849 0 obj <> endobj 5850 0 obj <> endobj 5851 0 obj <> endobj 5852 0 obj <> endobj 5853 0 obj <> endobj 5854 0 obj <> endobj 5855 0 obj <> endobj 5856 0 obj <> endobj 5857 0 obj <> endobj 5858 0 obj <> endobj 5859 0 obj <> endobj 5860 0 obj <> endobj 5861 0 obj <> endobj 5862 0 obj <> endobj 5863 0 obj <> endobj 5864 0 obj <> endobj 5865 0 obj <> endobj 5866 0 obj <> endobj 5867 0 obj <> endobj 5868 0 obj <> endobj 5869 0 obj <> endobj 5870 0 obj <> endobj 5871 0 obj <> endobj 5872 0 obj <> endobj 5873 0 obj <> endobj 5874 0 obj <> endobj 5875 0 obj <> endobj 5876 0 obj <> endobj 5877 0 obj <> endobj 5878 0 obj <> endobj 5879 0 obj <> endobj 5880 0 obj <> endobj 5881 0 obj <> endobj 5882 0 obj <> endobj 5883 0 obj <> endobj 5884 0 obj <> endobj 5885 0 obj <> endobj 5886 0 obj <> endobj 5887 0 obj <> endobj 5888 0 obj <> endobj 5889 0 obj <> endobj 5890 0 obj <> endobj 5891 0 obj <> endobj 5892 0 obj <> endobj 5893 0 obj <> endobj 5894 0 obj <> endobj 5895 0 obj <> endobj 5896 0 obj <> endobj 5897 0 obj <> endobj 5898 0 obj <> endobj 5899 0 obj <> endobj 5900 0 obj <> endobj 5901 0 obj <> endobj 5902 0 obj <> endobj 5903 0 obj <> endobj 5904 0 obj <> endobj 5905 0 obj <> endobj 5906 0 obj <> endobj 5907 0 obj <> endobj 5908 0 obj <> endobj 5909 0 obj <> endobj 5910 0 obj <> endobj 5911 0 obj <> endobj 5912 0 obj <> endobj 5913 0 obj <> endobj 5914 0 obj <> endobj 5915 0 obj <> endobj 5916 0 obj <> endobj 5917 0 obj <> endobj 5918 0 obj <> endobj 5919 0 obj <> endobj 5920 0 obj <> endobj 5921 0 obj <> endobj 5922 0 obj <> endobj 5923 0 obj <> endobj 5924 0 obj <> endobj 5925 0 obj <> endobj 5926 0 obj <> endobj 5927 0 obj <> endobj 5928 0 obj <> endobj 5929 0 obj <> endobj 5930 0 obj <> endobj 5931 0 obj <> endobj 5932 0 obj <> endobj 5933 0 obj <> endobj 5934 0 obj <> endobj 5935 0 obj <> endobj 5936 0 obj <> endobj 5937 0 obj <> endobj 5938 0 obj <> endobj 5939 0 obj <> endobj 5940 0 obj <> endobj 5941 0 obj <> endobj 5942 0 obj <> endobj 5943 0 obj <> endobj 5944 0 obj <> endobj 5945 0 obj <> endobj 5946 0 obj <> endobj 5947 0 obj <> endobj 5948 0 obj <> endobj 5949 0 obj <> endobj 5950 0 obj <> endobj 5951 0 obj <> endobj 5952 0 obj <> endobj 5953 0 obj <> endobj 5954 0 obj <> endobj 5955 0 obj <> endobj 5956 0 obj <> endobj 5957 0 obj <> endobj 5958 0 obj <> endobj 5959 0 obj <> endobj 5960 0 obj <> endobj 5961 0 obj <> endobj 5962 0 obj <> endobj 5963 0 obj <> endobj 5964 0 obj <> endobj 5965 0 obj <> endobj 5966 0 obj <> endobj 5967 0 obj <> endobj 5968 0 obj <> endobj 5969 0 obj <> endobj 5970 0 obj <> endobj 5971 0 obj <> endobj 5972 0 obj <> endobj 5973 0 obj <> endobj 5974 0 obj <> endobj 5975 0 obj <> endobj 5976 0 obj <> endobj 5977 0 obj <> endobj 5978 0 obj <> endobj 5979 0 obj <> endobj 5980 0 obj <> endobj 5981 0 obj <> endobj 5982 0 obj <> endobj 5983 0 obj <> endobj 5984 0 obj <> endobj 5985 0 obj <> endobj 5986 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/XObject<>>> endobj 5987 0 obj [/Indexed/DeviceRGB 212 5993 0 R] endobj 5988 0 obj <> endobj 5989 0 obj <>stream +hÞTOSƒ0ÅïùïvÙ\í§NuD=X ¥È¨ǯoBlµ“»óvï-„š…7O„z`QDœR$Jp‚„²s%q¬Øž}2BƒóX¬O3Áyèõ +H2É…‚&‰ÀÔ“bp Â<·séY¶,\·„EÏÍ&œ6¤‰È8EàYœeˆg©‹¤ÕIŠRÍ3ýO"»<µñ¤B+á”뜅+!ß3¹0ܬ֩õËÛÉ<àBØ®d¶H³7o±\aÎg3<}J¹öúúX´mÓÕXwcuÜeÿ=¿5Œ€x¤‘/Šaëݪ›¦¬ºÁ®]€¶þ´KÊæ±á\õ{Kjæ´Ígx¤l4K¶–l@’¸ôúÝW9âÅW^å†m,Ìò†©iú1OÿBJr1ÏŸN·ÔM1Œx>슱ڡépWK.ýÄû€O¤eÎ~V…4 +endstream endobj 5990 0 obj <> endobj 5991 0 obj <> endobj 5992 0 obj <>stream +hÞ\W XeÞew¾]Vdèß…ÙMð† ‚¨(¨ˆx ï‚©ÉM@ä.,˜XZ–Ü4/…R((&š71/¹y ­TB²~¯eš¥Ò™õ¬Oÿ™Eëz†ž™ùΙsyß÷;£T¨J¥ÒcÊä “'FõŸ˜¼¤ yiZb|@DÖ’$ù‰dPJîjÉËÙGaá“מÌæ¼2-.°º;ìèÑìåvÕMá TVÖÍÊ.ÊMKI]jê›ØÏ8rÊujífèfîvÎYíü¦óIç_\z¹ÌsÉwi×yéRu§º{wë~ÑUçãºÌõ˜ë“á¶@ýOšõÈïvLüB¾æ‚tCpV´±’äÕ)“ +´±šS•WÁMÿ;š4:|‚1O"ÌÊ=à«‚¯0Iˆ~2 Q‰0´§èË kÀ9zœsÜDgñoC@–ÕÖ\á[äO£õ˜8 £ÐS|È~×k´`ŽæÀ CSœF5¨ÝàuPó é|ZÀXºËøŒµ†nÆA,¨1âP­¡”Ê ·ò,ø©`1ô¦\Ð{ƒ£Ö5fåb¸§‚³Ö|šŸ®áÀ‘é +A-U€Z¹ |a!…¸ ~°¢µ +¡í … +¨ †bhj°B_ˆª½põjíxŒÂ¨üq¡¡ù!JÔÕHÅ÷¡;¥º +Lª R±#mÅ`²ÎE ›½&e f¦+W)œ”»Á æÑB%½"+_ÛqßкsÖ¼ÐØt`¤2ªW¿¢•ŠÀ¿dï7¶ìúù¼ö¿ÛOƒN¾¨¸Š^Ñ8ÒŒ¯Šrùb¨ZÛÁ ]ÁãÄÎêÀ—ÿ™¿ipVà?÷óÛ~as“g¬üï>cy9‡Þ saâò¯Àç×» —á{s7ˆþî››¿Ñƒö8âÁáþø/a©‹s +Å’ +îÎ;5nŽÕg%®3nÆ“BÿyI±_9ÙvóDãñC–Ì@{ï¿W%ô ¤:ëÁ¶†­AW:YLŽÇ‚å¸W ¾ìøDÀ¢ÖKZ{ŒyIö¨Uz*œ©e©e»¤BÌ’ÃMÇ?9Ó¼7mVlú¢™Fþ!”`Šp'¹yÂnêÀ©uǾÔßyû «_ºLÚ¹àó,‘ˆŠ¸²€½ßìFÈ„©0Ý2¢ïjanVtDTRsk[KãgßÕO‰“ J¬lèívüøxëÿ©Ã/”6©ÿ&ÒÇÔï¾ßéfåGÖQ*(„¾|Èc_†1\oMàp ÃMO8bð’t\¨`7q/‡QdLÀ‡™àBˆqu»Bl#)!ýñã_ñ€S úì¯;pиoﶧô_/½8¸Qä¥U–†‡úK À#Eü¯­·3ÿøĉ¼èˆøô#F3i±Â/µ6M>oéT#FÒë +ÁCz<”‡ @e —ÌBçÁÐÓ 8{¡;®ÃrðFò' ÚiD?6¸hÚ¼ò±D|^é<ò ¸n±°Òh_ZL=¾}à4ù¤¨Ï2Xù%ä’ryÅA¾eÄ‹”º +Ô鳿-ÃTtJÀî¨3bo¦Ë+¦Ð¯?ð²•ô›5A°Õ=Mš€·õ¤gLJÐ_êÁt¡Tê“´x¨}1I] +p\ {OÉ`ãÓ¹'× .€j*l–²…%p¨°-R LÇP†½– ÃŠÅ†^¦ÏˆÑ¿^úÃÈÿ»ó³À,#yø•ÊâƒÙ|«•T›X=¾$"cD¾PG‚ìA}•z}`7 d ZŸÜoÌúEï¦aD5K¯,«¬}zíÔz‘üõ¶­íúÓ©ð"ÎñOšò£¹ñÁŒäÈäì‘F]^!ÁúzÁ~b㿨Ruôß…4è[þæ~È‚š±?Tìj‚•x ß6‘oñŸræW~®?×Zs +<+G§¯£}‘Ý(JÖ¥â…øb(:´Ùƶ"Ž¿y¥èÄòúÑaË"ÑÓ|å@©(C\ºAµ†Weõ ñ2×$ +¶v½‘Ûñ‡Yù º^¦±Q†@€-ƒÇÇùŽ›vè(-¢ëlMÅتiû_ÑFž½ÿêyLÖÓŒrdT[Up"äær8„Á[²Fù0X#kÖ ÂÛú2˜%© Hùþ“^*Ú´@m«]`1@Ðy2í Ñ>·Ð10~nZ¾±„éÈ7\µOSòøÖ“p³…ܼ ‘/–€Ær~ëâ¹uµ3קj¡'ƒ+PÜ7Ì€ÃI–ÃQ}˜trÌùN¾cüG ²ÇbûÔpDF 7–°Ýùñ-tô Ähì}Md9]óÅnc<ѯ͑ÒúagûÍ_¶ –:&(0÷þ‘âTƒÇmyØQn%Çòœ ƒABòë‰æ$roÜ:ð¶QRÖ1x{í‰Åù…Y  ~·;›À}¯ˆÃ„‹÷474ŸÌ²ÑH{7Q(òÁUrz]ž¾ÌR¤pûÁ v¨¼êˆ¸8VþZay‚¡L<:ŽêÓf‹šæC1£àgþ0‹Û +¨ˆ2íàï:¾#¬D³gY¢¥ïóT§üî?ìÙp«±¢„‹Ò II ñúöí«EârëA; PµîÉK¹ÆÆa-9W˾cß5‘7Ÿ&–¬«­F;óÃéõáfå9êé|Yœ?•Ô8ŽøÒgtLÒ+Eb lD“¬Ñ`aGšN߬˜”$â9zyC‘Ì×ÀCþtñ¼@ÛÙRƒ†³äqÅ„2}i!.µU÷×RH¦µh²}Ïæf—‹¹¨ÞÃþ8[ F#?ÈZû–ö@×Þ¡¢Ù1L°|A[o!a gA;L’€p†‘¸€“^èŠôï­®ËÊŽù©Ë\9ãG>àäv–RÝõs÷â[¬_=Ï{hÒÔœ"ñTJêŽQ†€¤é©Eo¾ã;ÔËÉAAËRsøüeÑ Dü–î|£9SwøâÁ=9aÏêú×;ž•oþ»ª½cÒi–e|Ûs ßüÊœþ]lÚ$Cô²<@ÌDáúÐ! Æ™8„ÁàC‡pfŠèë1Á€ +T˜nmýèg‚•â£€ ¤î8¥f;Ûì;Mo\N´ï dƒðãÖ.ºÛéŸv©«QÿÔLËvT°Ìö̾ÿœñ4w‘> in|åðÜ·\{¬+d ¥æÊÀ5'[pø +¸/r¡ÕŸh0V`=}™™Í 0œÙ}¢áör•±q“BºKÃðIªáÈp7ï6ËâÛÎ`'ûÏG­ Ü\UVR)BOMùªUå« CÓçÌÊ”›ôÓÔ“Êvþ©ÈýÕýOÅŠqÆ?‹ÏïtÛI»aðRš§Lü]¢F™Äð{]ë} 8bnŸ‘Fþ.¾ ×¾ +Ò›—¥Ž¥á}pVc3 ë {®Ïxp1\¿ògÉ]ˆÅÿNùA¿õ݆+T±+•)iëeXÝ ?>P~/ƒ.×"K•ïØ>ßà6¾v>¸ˆ²ÚÚòòZc§¦tåÊÒU†é¥•¡éúƒà®Žû<’HîäR¿lÇL“$øóŸœ3áËï/Â5º~¨A¯+1/}¾ëÔ.‘ô®0(ë2"ž—Y¹YÚ®’ȆýHl^ò€æ yÉ[+Ì°5È“™îzA«ÀWù®µLe}W^ìËBln´6TrãðEn¿‘/ú1ð“í|Ù5éúš¼f{A¾¿8› `‹YY%mU ¶ 0¶p8œ Æ0ÃQ "p NÂmŒdw øs0†éž‰ò]©^%}"¿¾/CeW¬ìY¬±¶Ï¸ˆYoÆ^[U^Nß™jMéGÛJ«  û°âÎÓ§eµ5¡ã·€%ƒm•à´ñ)Û¤kÆyþéìNN`êVŽ»['ÿ`c…h× +endstream endobj 5993 0 obj <>stream +hÞ€ý¿¿¿ÿÿÿ +++@@@·tvâ–™¦¦¦©©©­­­®®®Æ-3¸¸¸ÉÉÉÏÏÏ···ÈÈȵµµ›››333¬¬¬èèèóóóÆÆÆæææyyywwwïïïòòò<<<ÌÌÌðÊË⻽ş ³ŒŽ¯ˆŠ°‰‹ñññoooåååýýý???þþþðððÔÔÔÀÀÀ½½½ÂÂÂÙÙÙôôô\\\ÅÅÅäääûûûùùùîîîçççSSSÝÝÝúúú¶¶¶ßßßPPP``` pppŸŸŸõõõ{{{000MMM]]]üüünnn€€€WWWööögggøøø¡¡¡ììì•••´´´ÑÑÑ ¥¥¥÷÷÷‹‹‹ÚÚÚ ÍÍÍ>>>444ÊÊÊYYYŠŠŠ£££¨¨¨UUUuuu + + +HHH___TTTÞÞÞbbb¯¯¯III„„„ÓÓÓ}}}’’’ZZZííí°°°ºººËËË===AAA†††ˆˆˆ²²²¾¾¾êêê***---ÐÐБ‘‘ªªª±±±¼¼¼¹¹¹«««ÜÜÜááá   ààà(((ãããqqqØØØ“““‡‡‡éééaaa¢¢¢³³³×××rrrzzzRRRÒÒÒÁÁÁÛÛÛsssÖÖÖ)))âââ[[[|||»»»ÕÕÕÄÄÄdddÎÎÎVVVÇÇÇJJJ§§§~~~¤¤¤...žžžLLLKKKÃÃÃëëë^^^™™™iii888mmmfff"""BBB‰‰‰NNNhhh999,,,666XXXŒŒŒ………;;;:::555777!!! žmf3 +endstream endobj 5994 0 obj <>stream +hÞì™[SUÇ· +¶5ÇP¸ ›ëÅ ]î`@ì…ínˆàÔšI“ Ö¤‰¢Aj +šÃA 2\¸¢ -ò%S+3_ʲ7³÷—?¨ÝsßÎ}ö<>ˆO~Ÿ‡m÷wÎùÏ=÷œßù‹B1›”'¥âîÐ|dÎÈL+Õ}÷sº/óŽ+ƒdÎÌRk`iµì/ðñ,º®–úUµ©O-)È…è‡HZ¸7­V@؆,ÈÌjÝ}ñ˜ÕÙQ…œ…)åèçH‹s®!M#sn~¨ÂbÒË£ -¥˜Í&$|èáG–=Ji™Ö\(ªPDzyÌ‚bÈ\¨øV˜qkI©QYy…4óã•vÇüaFœ® £*«CšÙí!æ3‚AÂf¯g>ólºó̾êå*UR`Q¬PÕúDíëTŠ•5>)f#é¥VÉ«­,bU-ö…ëjUªåuFØæ+R©TE¾ôÌÆjs\ê'˜YPËø#i\ ¬kž3×­¤Z<€ïÞ}× +£L5ÝD¹aº^ˆ§aÖ¯ k-*©rÒ6¨£§üpO*˜!ÅLHЭ«Çe’•§ƒ¼¥QÃØ×7D6Å3Yf#ƒ¬ÈllBÅÌÏšQ\zØxÌ0Üs¸L‚•Â%χCð:¡´¡Ù!ÇLµ|ÁíŽlÌm±2Ì›^|©µ® möÙnÀýµoÙҮΠP²µcùµº3ÄcN9ww/[¸Á릲µˆ»§ë•íõô\¦;Áã|u&ͬ-#YêÝÞìÞ&fÃëlèëUæ/ØC–í5°m©n^kíÞ'gðÜ­Ñ~0ßµû0sLÝã  šø÷ßõúÐp¶÷@y=4™wäŽäL}d¬Bf0̱¬Ñ‘æp<^ÀŒŽŽÅ- ®C °7AÀë#ÒÚØ~CÀ¼œ¼îˆöw?³ÏšbîÎOÆßCX–Ç¿ÿ·4ýMñ¸g‚àî£kÔ®z›,|§“d+÷°º7iuN‚]n`05Tý ÇÉ©zx¾«1äßÌ Pq¨ÌB4€UØgå1ç$Q¢ŠŠ>ž“‘Q¥%;ƹ‡în,A1Xþ ‡3¨Õž5\{¢ÄNŽ9¤™£§B°¯ÑÓy˜pwU}´¤¨<…ugP)fPëȨa.ÞšYf3y(?UYÀ\Äi16y2—ÐóÌ.»M’›ÒÇL“bÖêQþþL…¡½Û¤˜ADœ…@¦eVÒK%$Ú£9µ\ò̬'z ÀDnkÚ-Ŭi6Ý.æ.oÜ™Žù¬ãÏg†Ïëâ!DÀ Ún^`D$c]L6š(ùÈlÌÈËZþ|þœ´]lÉ£½ ¡4{JÛY^ÜÌÓ˜¬ë/.]Å ÊÍzŸè Ï|…¼¼ªçÏ3#dsQ*¼|9F™¿:Ý€ ™A<ÉØ=î`™ ˜àY¤gÖ€ëž*8ÛF¾&mßL`é™édñzÔÖ]ÍK»3ª-!³q yýmo…hœû©Të@êZY]w+Ì8àS|—Õ¯¬Õ3Õ¿¶+§R]AV†¹™ æ?°¡eêp!¼§°k¯ ÊŸ/BöŨsvf¤•kà­§Göò›¿L.Š¸˜:›:ý”m--·=¯q•‹7Î2ïÏäì7¦Øì5 sà:Û ÃN§èø¥ œ›Ž±ÜÙjâ'ºÎÍI&±pƒÑF™í(¥¼ÌÌe<bÿ™µÿ2m ÌÎŒ„Ø¡ÙÇ.ÇÉ_Y7û¶WÈ1ãþ¬=äËÒ®š>fâÕçnÆýv¶*xáïd2Å“Iîƒëþ¼JJ6Þ84]À0ë# ÄzÀvùûB,…–)n²¹ÿ![D²¸; ­ºhŠO–øå˜> endobj 5996 0 obj <> endobj 5997 0 obj <> endobj 5998 0 obj <> endobj 5999 0 obj <> endobj 6000 0 obj <> endobj 6001 0 obj <> endobj 6002 0 obj <> endobj 6003 0 obj <> endobj 6004 0 obj <> endobj 6005 0 obj <> endobj 6006 0 obj <> endobj 6007 0 obj <> endobj 6008 0 obj <> endobj 6009 0 obj <> endobj 6010 0 obj <> endobj 6011 0 obj <> endobj 6012 0 obj <> endobj 6013 0 obj <> endobj 6014 0 obj <> endobj 6015 0 obj <> endobj 6016 0 obj <> endobj 6017 0 obj <> endobj 6018 0 obj <> endobj 6019 0 obj <> endobj 6020 0 obj <> endobj 6021 0 obj <> endobj 6022 0 obj <> endobj 6023 0 obj <> endobj 6024 0 obj <> endobj 6025 0 obj <> endobj 6026 0 obj <> endobj 6027 0 obj <> endobj 6028 0 obj <> endobj 6029 0 obj <> endobj 6030 0 obj <> endobj 6031 0 obj <> endobj 6032 0 obj <> endobj 6033 0 obj <> endobj 6034 0 obj <> endobj 6035 0 obj <> endobj 6036 0 obj <> endobj 6037 0 obj <> endobj 6038 0 obj <> endobj 6039 0 obj <> endobj 6040 0 obj <> endobj 6041 0 obj <> endobj 6042 0 obj <> endobj 6043 0 obj <> endobj 6044 0 obj <> endobj 6045 0 obj <> endobj 6046 0 obj <> endobj 6047 0 obj <> endobj 6048 0 obj <> endobj 6049 0 obj <> endobj 6050 0 obj <> endobj 6051 0 obj <> endobj 6052 0 obj <> endobj 6053 0 obj <> endobj 6054 0 obj <> endobj 6055 0 obj <> endobj 6056 0 obj <> endobj 6057 0 obj <> endobj 6058 0 obj <> endobj 6059 0 obj <> endobj 6060 0 obj <> endobj 6061 0 obj <> endobj 6062 0 obj <> endobj 6063 0 obj <> endobj 6064 0 obj <> endobj 6065 0 obj <> endobj 6066 0 obj <> endobj 6067 0 obj <> endobj 6068 0 obj <> endobj 6069 0 obj <> endobj 6070 0 obj <> endobj 6071 0 obj <> endobj 6072 0 obj <> endobj 6073 0 obj <> endobj 6074 0 obj <> endobj 6075 0 obj <> endobj 6076 0 obj <> endobj 6077 0 obj <> endobj 6078 0 obj <> endobj 6079 0 obj <> endobj 6080 0 obj <> endobj 6081 0 obj <> endobj 6082 0 obj <> endobj 6083 0 obj <> endobj 6084 0 obj <> endobj 6085 0 obj <> endobj 6086 0 obj <> endobj 6087 0 obj <> endobj 6088 0 obj <> endobj 6089 0 obj <> endobj 6090 0 obj <> endobj 6091 0 obj <> endobj 6092 0 obj <> endobj 6093 0 obj <> endobj 6094 0 obj <> endobj 6095 0 obj <> endobj 6096 0 obj <> endobj 6097 0 obj <> endobj 6098 0 obj <> endobj 6099 0 obj <> endobj 6100 0 obj <> endobj 6101 0 obj <> endobj 6102 0 obj <> endobj 6103 0 obj <> endobj 6104 0 obj <> endobj 6105 0 obj <> endobj 6106 0 obj <> endobj 6107 0 obj <> endobj 6108 0 obj <> endobj 6109 0 obj <> endobj 6110 0 obj <> endobj 6111 0 obj <> endobj 6112 0 obj <> endobj 6113 0 obj <> endobj 6114 0 obj <> endobj 6115 0 obj <> endobj 6116 0 obj <> endobj 6117 0 obj <> endobj 6118 0 obj <> endobj 6119 0 obj <> endobj 6120 0 obj <> endobj 6121 0 obj <> endobj 6122 0 obj <> endobj 6123 0 obj <> endobj 6124 0 obj <> endobj 6125 0 obj <> endobj 6126 0 obj <> endobj 6127 0 obj <> endobj 6128 0 obj <> endobj 6129 0 obj <> endobj 6130 0 obj <> endobj 6131 0 obj <> endobj 6132 0 obj <> endobj 6133 0 obj <> endobj 6134 0 obj <> endobj 6135 0 obj <> endobj 6136 0 obj <> endobj 6137 0 obj <> endobj 6138 0 obj <> endobj 6139 0 obj <> endobj 6140 0 obj <> endobj 6141 0 obj <> endobj 6142 0 obj <> endobj 6143 0 obj <> endobj 6144 0 obj <> endobj 6145 0 obj <> endobj 6146 0 obj <> endobj 6147 0 obj <> endobj 6148 0 obj <> endobj 6149 0 obj <> endobj 6150 0 obj <> endobj 6151 0 obj <> endobj 6152 0 obj <> endobj 6153 0 obj <> endobj 6154 0 obj <> endobj 6155 0 obj <> endobj 6156 0 obj <> endobj 6157 0 obj <> endobj 6158 0 obj <> endobj 6159 0 obj <> endobj 6160 0 obj <> endobj 6161 0 obj <> endobj 6162 0 obj <> endobj 6163 0 obj <> endobj 6164 0 obj <> endobj 6165 0 obj <> endobj 6166 0 obj <> endobj 6167 0 obj <> endobj 6168 0 obj <> endobj 6169 0 obj <> endobj 6170 0 obj <> endobj 6171 0 obj <> endobj 6172 0 obj <> endobj 6173 0 obj <> endobj 6174 0 obj <> endobj 6175 0 obj <> endobj 6176 0 obj <> endobj 6177 0 obj <> endobj 6178 0 obj <> endobj 6179 0 obj <> endobj 6180 0 obj <> endobj 6181 0 obj <> endobj 6182 0 obj <> endobj 6183 0 obj <> endobj 6184 0 obj <> endobj 6185 0 obj <> endobj 6186 0 obj <> endobj 6187 0 obj <> endobj 6188 0 obj <> endobj 6189 0 obj <> endobj 6190 0 obj <> endobj 6191 0 obj <> endobj 6192 0 obj <> endobj 6193 0 obj <> endobj 6194 0 obj <> endobj 6195 0 obj <> endobj 6196 0 obj <> endobj 6197 0 obj <> endobj 6198 0 obj <> endobj 6199 0 obj <> endobj 6200 0 obj <> endobj 6201 0 obj <> endobj 6202 0 obj <> endobj 6203 0 obj <> endobj 6204 0 obj <> endobj 6205 0 obj <> endobj 6206 0 obj <> endobj 6207 0 obj <> endobj 6208 0 obj <> endobj 6209 0 obj <> endobj 6210 0 obj <> endobj 6211 0 obj <> endobj 6212 0 obj <> endobj 6213 0 obj <> endobj 6214 0 obj <> endobj 6215 0 obj <> endobj 6216 0 obj <> endobj 6217 0 obj <> endobj 6218 0 obj <> endobj 6219 0 obj <> endobj 6220 0 obj <> endobj 6221 0 obj <> endobj 6222 0 obj <> endobj 6223 0 obj <> endobj 6224 0 obj <> endobj 6225 0 obj <> endobj 6226 0 obj <> endobj 6227 0 obj <> endobj 6228 0 obj <> endobj 6229 0 obj <> endobj 6230 0 obj <> endobj 6231 0 obj <> endobj 6232 0 obj <> endobj 6233 0 obj <> endobj 6234 0 obj <> endobj 6235 0 obj <> endobj 6236 0 obj <> endobj 6237 0 obj <> endobj 6238 0 obj <> endobj 6239 0 obj <> endobj 6240 0 obj <> endobj 6241 0 obj <> endobj 6242 0 obj <> endobj 6243 0 obj <> endobj 6244 0 obj <> endobj 6245 0 obj <> endobj 6246 0 obj <> endobj 6247 0 obj <> endobj 6248 0 obj <> endobj 6249 0 obj <> endobj 6250 0 obj <> endobj 6251 0 obj <> endobj 6252 0 obj <> endobj 6253 0 obj <> endobj 6254 0 obj <> endobj 6255 0 obj <> endobj 6256 0 obj <> endobj 6257 0 obj <> endobj 6258 0 obj <> endobj 6259 0 obj <> endobj 6260 0 obj <> endobj 6261 0 obj <> endobj 6262 0 obj <> endobj 6263 0 obj <> endobj 6264 0 obj <> endobj 6265 0 obj <> endobj 6266 0 obj <> endobj 6267 0 obj <> endobj 6268 0 obj <> endobj 6269 0 obj <> endobj 6270 0 obj <> endobj 6271 0 obj <> endobj 6272 0 obj <> endobj 6273 0 obj <> endobj 6274 0 obj <> endobj 6275 0 obj <> endobj 6276 0 obj <> endobj 6277 0 obj <> endobj 6278 0 obj <> endobj 6279 0 obj <> endobj 6280 0 obj <> endobj 6281 0 obj <> endobj 6282 0 obj <> endobj 6283 0 obj <> endobj 6284 0 obj <> endobj 6285 0 obj <> endobj 6286 0 obj <> endobj 6287 0 obj <> endobj 6288 0 obj <> endobj 6289 0 obj <> endobj 6290 0 obj <> endobj 6291 0 obj <> endobj 6292 0 obj <> endobj 6293 0 obj <> endobj 6294 0 obj <> endobj 6295 0 obj <> endobj 6296 0 obj <> endobj 6297 0 obj <> endobj 6298 0 obj <> endobj 6299 0 obj <> endobj 6300 0 obj <> endobj 6301 0 obj <> endobj 6302 0 obj <> endobj 6303 0 obj <> endobj 6304 0 obj <> endobj 6305 0 obj <> endobj 6306 0 obj <> endobj 6307 0 obj <> endobj 6308 0 obj <> endobj 6309 0 obj <> endobj 6310 0 obj <> endobj 6311 0 obj <> endobj 6312 0 obj <> endobj 6313 0 obj <> endobj 6314 0 obj <> endobj 6315 0 obj <> endobj 6316 0 obj <> endobj 6317 0 obj <> endobj 6318 0 obj <> endobj 6319 0 obj <> endobj 6320 0 obj <> endobj 6321 0 obj <> endobj 6322 0 obj <> endobj 6323 0 obj <> endobj 6324 0 obj <> endobj 6325 0 obj <> endobj 6326 0 obj <> endobj 6327 0 obj <> endobj 6328 0 obj <> endobj 6329 0 obj <> endobj 6330 0 obj <> endobj 6331 0 obj <> endobj 6332 0 obj <> endobj 6333 0 obj <> endobj 6334 0 obj <> endobj 6335 0 obj <> endobj 6336 0 obj <> endobj 6337 0 obj <> endobj 6338 0 obj <> endobj 6339 0 obj <> endobj 6340 0 obj <> endobj 6341 0 obj <> endobj 6342 0 obj <> endobj 6343 0 obj <> endobj 6344 0 obj <> endobj 6345 0 obj <> endobj 6346 0 obj <> endobj 6347 0 obj <> endobj 6348 0 obj <> endobj 6349 0 obj <> endobj 6350 0 obj <> endobj 6351 0 obj <> endobj 6352 0 obj <> endobj 6353 0 obj <> endobj 6354 0 obj <> endobj 6355 0 obj <> endobj 6356 0 obj <> endobj 6357 0 obj <> endobj 6358 0 obj <> endobj 6359 0 obj <> endobj 6360 0 obj <> endobj 6361 0 obj <> endobj 6362 0 obj <> endobj 6363 0 obj <> endobj 6364 0 obj <> endobj 6365 0 obj <> endobj 6366 0 obj <> endobj 6367 0 obj <> endobj 6368 0 obj <> endobj 6369 0 obj <> endobj 6370 0 obj <> endobj 6371 0 obj <> endobj 6372 0 obj <> endobj 6373 0 obj <> endobj 6374 0 obj <> endobj 6375 0 obj <> endobj 6376 0 obj <> endobj 6377 0 obj <> endobj 6378 0 obj <> endobj 1 0 obj <> endobj 2 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 3 0 obj <>stream +hÞŒZK“ÛF®ÚãüŠ>’[’"6ßÎÉkÇ©ì%.{|röÀ!i‰¶D2$åÉägì/^š¤4v²å²Å~¡Ñh<> ýÃÏïsïþu÷Ãksÿé.ßå‰ÙÓùH­IƒpFæþ|·7ú{_ò?wÞ?üûÏ´.ĺ]–¼ðþõÝn¿·9ÏÛÒW˜ñäž òÜv©—oé'ñì>fb^U-ŸmY›×õØZi›xïŸÆ £gì"oܘ_üp—y-·C¯Ü™—§“šƒÌ:¢w’)£¿ wgÙ±ÆÐX£ùƒ ^alçÿçþßĶœ…zì>ÊôD!è£÷vùMË;ä^]™†¹ÍÀ-:…+”µÿCÛøm6ù[«{fØÓzæýTHûjY÷L÷Iš—çZ÷- ð¸göò=]±÷Ñ#ʲšd¸l; “Ú,H°|7 ÊS~‘Ϭ”;imLˢؼk¾‚Þé›_Áë—Ѽ-ÀÒæô±xR¢ï1¡5ÿîÆzµÑ«—&Õ Œäwc>¼)‡ùáM%ÒS… „²ò¨º}ôîýŒïmð’7aŸ‹á‹ïb ¾ oâR©ªj&»(ËfÕ cUÍ,KáÀî‰Qf)é˜tHË/ŸÜÒ)èÈE‹!9ëÑÖF4ò•NÓÕÔËàíZ¾Zâ‘/4Y"n£•ÞÏäºxj}¦NKÇ b:߆¯!ñÈxŒ®.€,à·1ùQ^~óMÙÉW jEƒqÑ[3¥ÑŒØ‚ºÑûˆÅEJ«~:Ú:óÊ˹–¦'Ö iѱYÑä[»&f<õ0ÅBÛ>ø–\‹wAg ­ ËB¯¥ç±Á„£ñÉÞŽåï~ ŸÀëzÝD·×Õ4o|:?৘~㇠/‘# <çw™p©•<êõA +îšöÀcϘý¯ïéÐ*ÞûŠÑòÎ’ —ùñl/]ûl–%Vš»H~b´ì7\ K6œ%k!Ù_‰i„!XÇnr<ñ^ù!¦˜9ÉÿczMž×Šš³gpÔü|#g%©°<¢‰öÑRlñÞg3~::ª&ÏNmfk^ºmµžåÇÄÎ+i +ý¥[ˆ¼™žaèŽùî0u¨Æ°Mú%w×ñ\³Èzí’YÖ1d=À¯X¤ò¼m¤½•ºe ‘‘sµ¡œ*ò*ñq¡è_`]ÄQÒî¿öЮÖ<öt6ŽËÑ=Ö£ÇrôGOq ‘·¹ZPî°ó$NñŠ¿#téþ€)Í„¾ +*Ë¡;v·ëü‘1‚ã‹øÊ:¥‰áÌò‚!!â‚£7õ8ß·›±’ºñûõ*Ö‘oáËØç«xy!FÁ(þVÔùÑß²ý5PÕé(û£ì)rëÙç)ºtl:Œ¶>µ¾cvñ¬ +6f<Ö!Þ‡ƒæßGØAº†¦ÚôèéúÚÍ SÈ;ñžæxê¦7ƒúù-\µ½'}Ôå%1¸a%I $‰Î3G„ËS5o'`L‚ïî¯ÁJ© â½bÞwõ8 M9Õ ùí@¸Ñ¼õÃ½à‰¯–Ù„xeïÛl€? Jä±rïpÄr‚B2µâ ‘»` +ém]lâÆ ¬;rDbq7úA5‚ÕšøóösèZ~´€'©õL+{¹Ð‹\³ H„&½ªOì»hßÖb†l\OækÓ +Eb :+»^'@ŸœC£2ñ(;aéfA}׆ 3+ÅxÅl« =3¤SÞGß2Ï;óÓŠöúiÙ”GÑ1ÀÕk h`8M­Û\¡Aˆ +á@.X„²ª V &˜¥ a³«¬AFÎWª)g@,-pî2ðœ"‡ªÆ‘*±¦gIèܹjƺ…¢y`°Ó7تÂÀ†tõC·ºHCD‘{Ï-›v JîÕ~gb/½ôê!Æ£˜<§RŒŸº«ç!½½!»’¬5Q-pÑ…nà”ñ¬_J¥¸¡ b;€ÀèV"À£S,ÁŠYäJH+Y/ØÂÄFâ[¤iwMâçáZ4‚9+N›%’5­Æ6Iˆ:M·6FÚÅ"@ðœp‘Ÿ²ÃkÑyÚ,á·Åâ¶ìÎg c„Ç¡ltò|s(v;õÝX?B¾î"ß0ù.Ì·*àÀÉ àX<‰ l°Ü0,DLOÄ-†HÚ ¦=cžxÚº¯S†5bAk›• °zÕš÷3x/¹/›ˆØ­Uù¸ÔbY‘ƒñ­‘÷ˆ‚[ggý f7{w÷j®K…Õ+V,Ãà<Œb*c&oε8MÃèaE5ǹ³º¹‘ó= E©oáìI¼éG! Ð$·åÍ¥ÚHõ0F½H«E.eŸÅ, ¼È‡…Î6ÎøQ¹”e×`|.LLÝ-MËF«´x𠦛 öH­â¸,â:vË-ø“ï1óV‚PáÓ|þ€T̬¥}æ\`pà-2çM*Ç'zÆã¥<²76ã‘kBµÿ—J’¸ +e¼T(#õ##êe¤Ñ:‹s- êçz=_}»|¸µ^Rðn•Ž³9<Îù:æOÎ÷Jö#äñÓ­r|ìP:×GŽå‘î¼T#èƒpz“oR~´ìm…<]eü¯Ùg,5½³lÎZxðïÅu–IðÍÚ|)G³¹…Š~‘i+i09¤Hç‘K0‡ÐB™]9m«™¹Ä—/­újî5W†T|[£ZÈ°‚;>û 9+PæÝMy,°Á¡^öœkÃÝEIG.ckWUkåV—«åàg­–n-x“ýµàqâ¬bUk®ÇºÕB“R좆NQµ>P +@Îâ hæ4XAõ\R§.ÀáÂÁa +2;€a `­ž³J- —ºsÆd¾^/±™ÖÝEŠ±µ¤©NEÛ¼²ÔoÅÍJˆ2z;‚Õ?̧›ýîaXtó~†ùKšR¯y˜ •aOW×j¾RvíJý“fOBmØŸ¿T6x~p– 8KU ±{„,¤S"šE\OI$òZ—IÂ!oŠ5•µé†UIFß&¥AV ³ÆnàŒÞSl—rNî,ÁöÄ’½ä©=ðN>-’ •‡Ï(øä¢=gžh²ÄäaÑY¶[ °vw-¹@ÍÁ…ÐsÏ´?ÓÊÃFè6¶Žµu¿çåEÊV}ÿä³,EDÄyäž„&ÖìJ’.c$뤸€A­Æ(¹§9ÿ7*tDþy¤@æÒùzUhÀ+j~MöªJ ~BÈÒ11\Ò³³Å¡+ÍHýaò£õb.ÌóSa+RyXo•W>óÌ5CÞÐûƒ¹K<¼}‘6©¤»kõI·n;L59çG´¦E´-¨H©G“ŠT þ(”À: ÙJ]ÞÚ®_õÉ Ü-ŽóŒÕ‚=bæ­§Õ."j¦ð©8~Íîu¤ãèK›8í±< 8”Ò¬>à¤î±±ÅYž¾™™[›./¤B½{¿r/]bª…äÊøn-S.j®Þ« ˆ‰Éƒ‹²â!ÖÄ@€H1^gú~¢3àŠKÐ?÷'¼‘Møiñ3jâN¢±Á’¸Ï"›©jhù‡Œê¢ž2pÑ¢„žéËŽl!Å­Õvâe/+‡ÙbdçW»y<Ý©’hBt¾Š!±«©pšDú&^¬ËMêOôˆ×þ$˜mÀ†ÎSs%¼êÈP‘£1V=“êîÌ+~½à¤%„Ê’W©:Ò”‹*¦Lv6Ëí,йŽ¿wšB×,—Ì¢Ÿ±{Ñ 9“ÀÔî“ys+›'^‰ÆQ‹hR ŸDò&®qh„ n)]àÌÄœy[Eµ,¼Ç†à03N4Ù²ÇlÚC-˜kÈP™^Þs3©^mCÉ¿!Þp¿Ë’ôÊ]ÓFÁò’§„}R J(ÈÄøÚ˜ǹ”Æ2äxÀ•žb/ç5' +¸r®l·O’Õ¹\P4(<4§fâúJhñÏŽq0Uq.5¿Ab)Gc+ÞS“oå¿T( -ŒQOIßéÕ­&óÆzÎ/M[a©\$ÇÁT¤4ÔãåD~s`ÎåbܱJ®2Ž£[土­>>‹[Õ»g›W¥ÀU!ßü6HÕ~ûe)ŸA¾#;W.ÿ"ŸÝH^UNˆlJä +ß¡!ÉìúS6¸FËûRš¯Ê(ŠH­Ä•*¼ÖôÏߛ܌n]Ð0UCκ/Èôk ŠÄÕ[´R›Ÿ;ôS~šh°]*b(±Q.žyøÜïÅ™ªÒ‚æ‚®¤¤ÑœBXõOF±é8]CÍröUâ¯G…žæÖ¹­P÷Ñù-2¶0Ïþö­|]ÐzÃÿ«)ö^J æ],oÓÖJ+ÝJ–HS`]e^¿ñÓŒW½³7+RinñCZ¹lTëKõüê=Ö¿K×N¯ªC6J¨†E'Ceyõ¤=òö$»UÝæ§û»ÿ 0û™j0 +endstream endobj 4 0 obj <> endobj 5 0 obj <>stream +hÞbd`ab`ddäóóu÷õôÖ®ÌMÊω¨þaü!ÎòC–Gì·Çï¿®ýjc•É¬áýîÆÿÝ[໿àŒìB ÌŒŒü©ÙÉù•E™é%Å©E™iÎ0ž‚F²¦‚¡¥…©ˆ4“– ÒÒ@Á1%?)U!¸²¸$5·XÁ3/9¿¨ ¿(±$5EOAÁ1'GbžBQ*ÐÌ2 (Ôe@ÀÈØÎÀ¤pd7 û¦ï}|@ôsUÍæÏ¿ß\þ}3ã¾ÍßyN}Ÿ¸à»îfæ Ìí¨­i«ìO™b·ÖÔ÷7¯É¢ß…ß5S¾ f»°|EÃ\‰úƸ´¼&ß>Éß¼r¾{^{¹nÇᙇJ¶U,ˆì/æ˜ÏÖþ]„õOãïÑßÁßõ~ë}B½ï`ÈÓû „@ñßÁr›Å¾Û|—Bý[ö· Âi¸_ÕœŸ¦ÓGÍ`{ÎõŠ À±¤1 +endstream endobj 6 0 obj <> endobj 7 0 obj <>stream +hÞTPËŠÃ0 ¼û+tléÁIn…Xº,äÐM»w×V²†F6ŠsÈß×N³-=h@# 3’ÜÕß5ÙòÄN7 µd7²F¸ag òŒÕaéfÔ½ò £¸™†€}M­ƒ²ò‡Cà V?Å&[ƒ<²A¶ÔÁê’_#ÑŒÞß±G +AUÁVÈÝ^ùƒêd’½¹Ë䊹ÏcgpðJ#+êʬ¨ž€d>gÿŠ[«ÿ‹e3ûÚV"î.lR¥S^ôȳÍ÷Î’¹%|½Ä;Ÿ¼R‰‡…‡h^ +endstream endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <> endobj 21 0 obj <> endobj 22 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 25 0 obj <> endobj 26 0 obj <> endobj 27 0 obj <> endobj 28 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 37 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 38 0 obj <>stream +hÞäZÙrãÆ}çWô#`1½/ÍRãŠmEÃÉܯsÜãIU¬ÃÙàÖ%eš©¤>íûú¤ýõçú$¶”©tÉ$3N°k©ÀÝKØ…1ö»pÚúáº"OÍXRÔCêyve= âo—¸–smÈê•_·”ÍPîà?„9—.m&·ä”…]ERé„f;óä§>ßÁÛ¯h;a2†–£íDË>V³ïÿ»Ô—Û-¹ÚÜM ’:e@ƹ*Å>] +äÛ/)ðc±ÎzÎeUæ‚—+ÅÀk[wónѹ4W‘s/k§¾†oþî.÷ÅMÊq)‘÷úËDÆ4Ñ,6g¨Ì»ñ;+ æð¤çµzàΗE’‘é¿tõÓÂfÖ©Î +T5C¨G F¨¯vA;c„p½ñŽïâÓä Æ$ -àRhEÁ¨–VäÑØI^ý;•29€•ò( + ³É—Ø”gÐKp’iXŠ±l4•± NøÉë!ŒÂ’éÛÇ9mæ䳶€åG€è±ÄM½Ö®GÖ¢|Uló*•ÈŠ”Ãçš¼Ú]?ÜE¿”áð!²‰¯3–0ª2A2圳C6Ñp/p®FmLÒ"jjaP–ٳض&bÇëb-Älb\Ü ç1.Û+£Ð6Ë"£.˜ƒ©cóú5°0Ô*eœ_Ó%háýî6eøuŸøÌï?o®I^®Éû¯e•ÿJ.veêO”°)Êj³+lVS9ÐøqSqMá°2´µ“<µ +¬I¦c2cT‡p{w3a6H«æþ"¦™««Á>%xÍ@Ú +PÂpº!p†lFéïuNGÅ؉Â'õíw˜*îјÔaäp²Ó zˆŸ³—Îäò¸\°2öHÀŸÆ\¦•*°ÐQ°`&Š?úøŠ„ù€€ Ù@ pðK*¤µ*¤ÂûHÁ†0gOà:¬YËöGD qÌøÇGûG–ÎÐô|L¨eî¥ôÂtaÁ¦[Ë›®Ø¹*òu±'SŽ‰ú.…=yÈ“~uÒ V=ßïÖE¬7Ò0T°‡ÌÀ™ØÒð8:ˆ^°óvåJfÄåG?n>°‘À»ú–¸ C^ìîîó£K6(¤>T›í¦úc¨@Ë H6¦£Dñ€ãRéSÑ–hsžœ§°x¾ +b{ +Ò ®°D|_ä6Àê7›-¶Uj ÕÅRd ûãhc…<ÊA7Úå6Vn‡ñÔù(©#Íè2}´ççu£wæqÑErbÑÅ\-Ï”T=Å° ¯m-ÑÓ6Ù@’c4„ä¤' ©€¹Î쯕Ãã’³X†¨mfQûGGwšÌ«â\!$3¼£³°¾d’7œÌø?‘]OãXûßÕýO8!Ó„DêôÝCµ)cPC9-¸/ÅGËd!7a^zp’ÉÜ[¸ñ|È Í<á¬M¾µê%¼g¸m öÉ^^¾Ãû ß°¬.¨,$ +-ø´BÃq!ù$Å,³gKãÖ¯N$Zw,^7ûw妪™ePJ 6 ¨¾¦¤3íù7Xû5/“ewÿËÚ¿#ªü #üÆâŸó6w™ã}ͧ`¿‡ÀØU.ˆ9ÕhpãfQ’³ Ò6Nóùœ¾Øðµsë|2¯ðørÇjHÆd,og&ÈLÎ+8z…åS5²¸¡,QÆ€lx] +"Ê£ªeƒez@ùOƒ­˜Ð‰! øp(ö¯ò*V¾dæSÕ¶¡xœ«sM@"ÿ¸& eêu¼¡NQ§]@s øÛAÀ6ò ‰šŒ…P}Ãq.é©d¨®¦Æ> endobj 40 0 obj <> endobj 41 0 obj <> endobj 42 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 71 0 obj <> endobj 72 0 obj <> endobj 73 0 obj <> endobj 74 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 75 0 obj <>stream +hÞäZÛŽÛF}×Wô#‰@í¾_“±‹$Ì(~ ‚€Öpd­5Ò@Ò$ñ'å/SÕ¼Kb“òfmyÇM5›§O:U$'‹É«7÷œ,v#‰eŽ(gˆdd›O'ßÍ&¯n8ádö8á‚0ø_ÜY*±’Q&ÈìiÂ`Ê”—d6‡Æ™ý>ù9¹~}C4uäêÕÕ7ßÛmÊ•Éf±Ížž–ëù×zŸo³yžþ2û÷äõlëÀeHVÁ]k²X…‹ðÎR®ºö®)^<éâêßg»=I§†Úä§ç‡ D²ÏŠ²ÄoŸ¬Sª“ò´Ê“¶ó÷åI¢øf\§S®¸õp²‚CÇ$ÞÂ!̱ݧ=¼Ì÷ämjåI^Nµ+¯³Y—@Âí2¿ÂX2»ëVªº&‹;ø“pïÓ©£*ñSÁxq¨Ij¨I©¾Ç}ñS¿ÞÉë?q拉wŽU{'köñ’}ÿÛ¥~»Z‘»åhj‘Ô)2îÈ]¾Ë·éT"ß~K…„ÿÌh\ZypCµ!THï=¡ÊíŠ 3‚ZSCôQ¡:ãeh·}†+Z B„B°ypšÆñ*6ÓD¦³ÿàBðˆ$’ ÔÁZLÏDÚãE`®*.‚À0ÞÌ]ž=ä[r•­Vï²yÊ=Ä؇t +BCî6/ûå:ßU„ aëÊS€ÁÃT¢¹r­p’K +áØ\¯66¡dèÞ¥§Jì(W[v)ŒƒSL¹M„ KŸ‚ÒÃ@/¬Öå˜-Á¶˜´…€L>›—õ|¿Ù¹IñçÉ&…`‡°ÐS*à¯lßFhãáð×¢6Å€ Ç „€wõÆ4w(JúƒØq¼…¡;Å€”2ÝSÕ6^ÈhA.uË€¹â æ¦ÂÜa®óYʃ£À?“<×y ÂÁÀ)ŽXE…‹€«5ŽÁ»È¶(ÀZ‘ bꨕÉr@× W+Ùô»¿îîÂF·I)½¼ ñ_¯³}Vj"Éu‚T€!5ŒµU¨U dª4)½<Õ÷} Ú·î³–"1‚£¸x°>²EPY¯Ä?Á´Þ¨Ö­ ²;®ä¶§^ÜÕt¼v¼äöOLÈu:U@h0Fð »ÐZ;;¯U„ΰ^íÌ Px;nPýþ?v@"ôÿ­ºìH¶~ ÷ù~fúD²ÓD [QÙ%)Ƶeõ.1¬ÞJŒÕøÁ¼YäÛˆH,Ê\Xì9ÇÆ%,a Q ýøŽ¢r—¢°ŠŸ“¼~Ìc.Iq€¹KÃqiLÌxZ3Êx +{aÆSÉCãÙj–nÖ×ùcœuö²jzøʆÀWÁÕGlgèH° - s–qdiCå6 Jõw[Ý’ÒÛTâãÌlÿ¾¦8 )<Ó8U„ŸÇ%ì`S¿7?}ïXD öœÜI'o€ül¤µè—+¬iÍþírÝ5ò]”¹D pñúUãƒ,sXŸjæ/Øb)Ýc±ºøÞn7Ï Ê‚Ai{›$LḀÍ`‚ñhò²||u`þ–Ça‡»u®·:j˜Ì$ˆALÜ€n¸€Ô5ÐÓ3göô.ǘs|À]¾XnÖ1`4W>Þ/« +ã|C±ö˜½RgÔ¯òRP¶•õn“‚û·Éï}J>Mapž­£¾/ƒá3ðì4–ÂìQ +ë/îçÙzþ>[F [†Ê mœÁP> ƒÑ¦¸C’ÀìÈž_7}‘‚Õ+XïW›}¤^Åî¼ MhçâMh\Æ +¬ªÆt /­p§ë€æݘ6÷EÅ&Ëõ¢ÅIy€+>+ }AMùž†?Y²Jçà*`݇õó@=Ò^»íÅd*Fà~ÿq•ï"qŽý¾Ðq²"ôp¾aæU=Õ]Á€ß]¹X5|µ¨…kÕèÛ¦6¼€Õ›áù¤È êœá87"æ·ôÀó©£.ìÅ -"$>ôo—YÄàC)P…²äê…¢äâJQoÿ‡Õ]ܧ[ۇ턷©Åv¦ÓÔ>l'paŠÒ!<ò‹¼ qœ ;ÐN0£Ú þ+h'hk'DßtAUpí]xÿ‹.\ÆqÕðO{ÕE늓 0(„±= +endstream endobj 76 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <> endobj 79 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 86 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 91 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 95 0 obj <> endobj 96 0 obj <> endobj 97 0 obj <> endobj 98 0 obj <> endobj 99 0 obj <> endobj 100 0 obj <> endobj 101 0 obj <> endobj 102 0 obj <> endobj 103 0 obj <> endobj 104 0 obj <> endobj 105 0 obj <> endobj 106 0 obj <> endobj 107 0 obj <> endobj 108 0 obj <> endobj 109 0 obj <> endobj 110 0 obj <> endobj 111 0 obj <> endobj 112 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 113 0 obj <>stream +hÞäš[sÛ¸†ïõ+pIÎŽœ—»Î&ÓÎfë±ÕÞìô‚kѶ™ÌHònó“ö_öûÀDI½“ÖQ3™‰˜€ðÅ‹/rò0{óþ–“‡íÌHb™#Ê"Ù”³ûÙ‹Ù›wœp²¸ŸqAüî,•‚XÉ(dñ4cpÊ”—dqŒ+²ø}öKööÇwDSG®Þ\}÷¹ÞäÜQ™Õ›âéiU=¿T»rs_Ü•ù?ý¸˜A=°Ò„ZpÕB6µð¡žÀYÊuÏžÃ3…À‡‡#Ý<ý§b»#ùÜP›ýýÓ²À#‘íÊes@Vøë³*§:kOûО´¹{lOÍ/ã:ŸsÅ­‡“ñÐ1‰‡×p÷ØÔÍiËç»ùGnåYÙÞjÛ>§®Ú‡€ áuk…0–,Þ†z+Õ½“ÍüA¸÷ùÜQ•ù¹`¼9Ô$7Ôd„t¿Ó^ýÔ˽yÿOl;i)Ç–c]ÛÉÞ}¼uß·ªß¯×äfõ6µh꜃·ä¦Ü–›|.Ño¿åB–KÚu.#¨5ÐÅ Õ†P!½÷„*ÆkºYèÿ¡:j¯°í™`mßtNÃí +¡ƒB_ tpØ3ã]×d¨ CI2•/þê'@GŽ~P1'n¤=>jùÂl¸!âå¦,–å†\­‹í¶ÜFOÐÐDŽp*L=\$†gô(RR5~Œîš2£$ýêà-7´Ý·íÈnšë¥Ôƒ˜èª 7%¯‰LÛÐÎsÉ©[¬ÖýýÔÐ ÝM¤ZÕU¤˜Æ‚hx MâŽÈÅ…Ærþ÷®×‹ãÍ UЗ~[¬¥Ãˇ·ý?\ñ‘à8µCáU±^ÿZÜåÜC÷ýHnwŸ×e;þåDÏ¢Q›ÎsAîTk8‡æ¡³õ/1ï;HÓ$^ÎIÚ¶ ôH| vð[¦ÑÖS¥‡¶á}¥Ôyi{y!'ô3*ùÀpysÛ›rìãx¸*s¸Èe¿aȸ)?•Åo‹]ëÌu ¤±ÈFj‹™a‚a¹aªM<ƒïY¯´µv’ù=å\¿¢w-d7xWeE·¡½|›âpLáøn«ÓNPõŠÜ~®vÅ¿Éý¦~"ïšGÚj§©;ðƒ;íb¡–ks"¦ôÆSƒ“¥È΃EñAÚ¡?œ·/ +k±¾GÌoÏ銖å4Ò•á+ ŽÅ›˜®2n$Ñr j+c§†QËe±’X®-Û7änX uÖm?Ô[s¤€rÔ$ À…Çr­e 9ê|(¹ÃÎB§@4oý"ÿ‰ÏŒxb *4gä¦~ +ÇMK¡5 >pð9œ«c<ôªËÈè6#“Dä’á…Ùã`˜2²ñLûFH0”´c·ê&M-ËûÕë:$},Ê€c„K¦o +gú}<ô»a*³SØ`ŒþBpøŸ#ÙðÓdˆ[.è]çBg{$f É }O~” ,ÂÄ84ÖdSc1Dð/‹GÑëϘûå”èsûJÈa‚‚_ÕOŸêª¬v‹•“ØäÐv2!8Œ¸¤b&è‘7Â|f5Rë½<&Ÿ9#_ãT!Ž:ÝQðJ˜ÑGK lK9#z$›ÈÜ‘§{‰?Û·«ûÝO¦c›}F´Ø¬Ìá¯Mäye Î=Œ¤2Û”Âre\7û’šÕS’š–¯›Œ>N†ÁžïVëuäL*²@Q#ÖäËDŠnqt™­/§'£/ vP‘ O¡ñëû»r½~ßÌä$Ì8æ`ÃlÛ-Â4³Š“Í C«*)V*ö›†ÒIéØ^îhÙXå/ë§f"m!v¬ÂÂ"d¶H~Ž+úpã¤ú&Ìé·"&«^Èd®/ Êö(”»…™x|¿©Ÿ? ˆ‘Þ!b`FlRê‚©¡\1v"n;5nìÁE¾$ +%s’NëqÚ`û:ÿ\FCb·p¤YÄL€<¬RJHì_ÕZçë„: óQS7ù¹®Þ–÷9ØPfÅózáCøh¶ðöX.!S'Öƒ´™’2¤OÕ¦±{½¯n+';Hþ· Ì´Ëedrˆ€Lq ¡1ÄÁ©>‰:$­Æ¦œéô/"Y5Ö[ŒÂôu®8®ÕïcKcšÆ¨AujŠ¨ XÂp&VN];fV_úÎI§óL;_¯ªÈÊ\3¤IÏÁ!°@9î‘W‹©òú‹gµÕ)V¸B_íʪ*>ÔË2šíoÂÎO-1y ç9€ë÷ ¶{”=³µÀ~&yÍ (Û®w +h~t½3FêºÎ5ÆåÒ³ÂM·xÜÖ#$´ ›ï§“ÇráX‹‰SŠj? ÈÒ]r¾ƒ,mýxêyYxùzSGqZÀ4fŠ<óTx‚I#vj3ÅÙi›)F]ô@èÁc¼h\ï³zUíây¢PºÊ°3S(V:ˆ4BÛ©SÏ/} +ãR ¦c\ïûÈ„ÉC…ÂÓÑ#|´!ðþnlðoî³#jŸoʇá+œs +†á”¥¡’¸k•â·eb¿•»hwÀ< ð1Jnꜳì÷ˆ"Ü«°3+i—Cü‰p å"KG‘q4“¿Í`Ÿ¯JEí;üö®¨î‹8nC«!U¬Nº\(æ8‘?`ÊhÕÙ˜_û¬Ü%–Sùx5ûöÀuìr¯asÃ#“–ù¸ùÖ×øœKøÙü¼Ú•‘•ˆæCÓÓø{5¸âMdæ#Ÿv4ÉIói.$.5VŽI²®£5V.Lˆ&ƒò.¡¼°Ñ|ç›U;¹ÆjFjã¤ÛHo†ŒbON/–sH1‡SèÓ¥IIP\:V<{Á0ùüko!øð-=As& âe•ôÉ”8xái°ÕDüßÕ%ª +endstream endobj 114 0 obj <> endobj 115 0 obj <> endobj 116 0 obj <> endobj 117 0 obj <> endobj 118 0 obj <> endobj 119 0 obj <> endobj 120 0 obj <> endobj 121 0 obj <> endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <> endobj 127 0 obj <> endobj 128 0 obj <> endobj 129 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 135 0 obj <> endobj 136 0 obj <> endobj 137 0 obj <> endobj 138 0 obj <> endobj 139 0 obj <> endobj 140 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <> endobj 145 0 obj <> endobj 146 0 obj <> endobj 147 0 obj <> endobj 148 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 149 0 obj <>stream +hÞÜZÛrÛ¶}×Wà‘œŽlÜñØÚΙžI;™DM:}P,ÆUcKY®ÛOê_vo€¤HŠ¢hÇ­’ŽgDZ pY{aí ìjòâo]ÝM¬bNx¦½eJ°M1ù8ùn6yñ°ÙÇ H&ð/àW’9%¸lv3Ø :(6»ÄšÍ&?gç/™áž½8ûæöz“ƒç*[_mæ77ËÕû~µ-6ç—EþËìÿ“‹ÙçAÓP6Î|c*Í"ÄI†Oi_=Å1¥¤ÁãI£¿šßmY>µÜe?Ý.æt'³m±H7lI×­rn²ò±ʇ6—¿–Ét`ò)hp¶xë…¢Û×x‹}lÖé±Åýå–½ËçeWwå8ëU9—+þVJëØì<Î[ëjB¥üÅ „|ê¹ÎÂT +H·†å–ÛŒ±ê:þròG¿ÞÎëÉvÊq ˉÊvªf”ìûg§úíõ5{³¼Bš:"uHÆ;ö¦¸+6ùTß~Ï¥Â/‹¯6—Ñ7¸åÆ2.Uqí‘vi“YÉ­Úq÷q©[íåÖDn‡´;-h^5âÝɃf½iHC¤´'€DÂfQ|\Îr‚6HN+˜çøq™CÀ˧j±#ŽdÚq#·BôŽÒSûnÔjE5¢¯¢Epÿy‰[“³¡¿8:Î#˜dÞcÏ~› ª©òézàjÑì`Zθ5õÁߣÉ,@œ÷TPQZ41ñß6ñÖ¡Eoá7¸ù|ÜZR»5P.² ø´MeCN8;Š¼çV—Ìu/ðxZ>¯uº;:Aè-ƒN c¬þ~Gë(µª£)ïnDe¹jJˆ’QBÅ,¢©Ý*Ý”Ó3ý$Z¢ˆm¢¿_nŠËÁpç ëAš#ÖDs°tA¬“67áÖú¾fˆ1˜xŠgßÅÓ5Ʀ—Ú)®Ä¨8>ÅC®·Õ‘ñ5ƒugj’¿ßP0‹`/1üfgóëëóè{mö‰½Yßo—«â®ÚA±?Œ˜TÛÞ¸µQ•PD“rìl=ËUúâ”~Ø ¹vþ] ¡^âíJQ¸?#¥]-#$F±#YªR…ˆ¼¼_]n—¿¿ÌQ…0Éñ!”õé&—øß|Û„KQÎèZIpn‚¨Ý(7(óHæq:í #zµvܾH®ÍA7ûóñÍE`ã|ƒ/)¦#ÛÂVxÛ=¼5â"Cý™O‘‘·ECË &¨åNs9¤/ÆP»‘bOËkï—ÀurŒujD$Hè9¿½:%aö¯Ÿê+}×WÖ² un %è?aªÀÎó©F¤1íÅO WH  é\&ôÁŒh„,5ü0ƒÃÈ@ÅÓ·»å©‚•'¨ze‚þsiÇæ«{[l·T*é‘eí5éL@gªoiµSƶç\m$§ˆ@ÃÂ~Œ9%½Ã¾ÏÔÚ—ükøL»ó™3G|²ô™>PÖÛë35ªyC,*[a0×u›*¹Í>ƒH´54fw´E¨n¦»#¶½YÆÆðígíŸHvPËw—ZY ƒŸD†GüØ÷·‘âgëÕv³¾n)4É<˜@BvP€¤”Ô®…-ìŸì듹K,•ë„Ûºn?|¿Znwá¶òqSiàjH§&lW¾Ú*˜ôx˜Ì“j"_¨ )6û¨ž}øÔÖ ÊÖ%&ϸbšƒíÊÉáD]ÉqþÏ„gÊÓÿue¡TŸ:¥¿ˆöÅjÑ@Ú¤Æö~ˆÂŽÚ•1{]mÊÓG¡c?O°qvë^ÉØ|v¿Ù«í+tQ?Þß|(6 È13q” n债P»Rn/ÂKH‹Ñý\éz§q,!Ié4àêÍG\ZÁöc‘KÊñ¸F8¬€Êw¨F~˜¥&ÖЕ„ýPKïôV¸ì8=•7Ý%£Ø‡€0Cr`Ûrðíbq¶¾¹A²6(*bÍ.øZ€{kv.Dº7ÏkÖJéDäxÃKÑ©/=¦.ñynÐ9 +c ÜMèéÌÄtÔÚDXúX©sGt×DÝ•Þ65 ;Ï(»£ò÷Ÿ%uçxëá5»Žûl¹Ú^lè€CÚlÓi©ž†8‚?ÂÑHë< Ïz”ìÖí"^–Ò‹‹?æ7·×˜¤íxDEe¡Ã“ØÑ4 +U¨+ öN¶,èÔŸ*|ž>> endobj 151 0 obj <> endobj 152 0 obj <> endobj 153 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <> endobj 156 0 obj <> endobj 157 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 160 0 obj <> endobj 161 0 obj <> endobj 162 0 obj <> endobj 163 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> endobj 166 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <> endobj 177 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 180 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 183 0 obj <> endobj 184 0 obj <> endobj 185 0 obj <> endobj 186 0 obj <> endobj 187 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 188 0 obj <>stream +hÞÜšÉrãȆï|Š:1ÁêÚ—ãôæ%zŠíË„ ŠRÓC‘$åŽy$¿¥3«°(€’{¨vè@ˆ…¯2ÿ\ +œ<ÌÞüé–“‡ãÌHb™#Ê"9¬g÷³·‹Ù›œp²¸ŸqAüÁw–JA¬d” ²xœ1¸ +eÊK²XÁãŠ,¾Í~ÍÞøH4uäÝ›w?ýDn9wTfû‡Ãòñq³{ ÙÖ‡ûåjÿsñ×هŠæÓ&Ì‚»Æ,dœ…“ðÎR®¼÷î)Þ<éx÷OËã‰äsCmö÷¯wK<Ùi}È?}¶Ë©ÎŠÓ~)N:¬¾'‰øɸÎç\qëád ‡ŽI<¼C¸ÆaO»{ZÈ?rë(ÏÖÅ¥ŽÅ}ö»â&$<.#ð[!Œ%‹÷aÞJ•OÀd|‚ÿî}>wTe~.‡šä†šŒòsúÇÕOýq/^ý‹k'-å¸r¬\;YY/¬ïûNõçí–|Þ<€™Z4꜃1Éçõq}Èçííß¹ðåúŽ–Îeµ\ÜPmÒ{O¨r`xÑÍ‚ÿ‡Ap>*Tk°ðL0mÓpEËApÐZ'Æé†2‹vȇE4wëûoo·ûUÎ=Lþ·åÃúÓ21Ùïñ+ðE]vø¸ÙnåôÃu%u ?BSN¨a¬w¢9‡p^ù–(Ö¼‘Že„&ÿÂíÁ×ëµfº9–:£cWXükæ¨ó+ð‘ƒÖÎE˜É\À¥ÀÆ@;šZqA‹l“•ì1¢•­ŒhmZc¨S„KžDË¢5—¾…658Õ 8¯SžÁã,PÞ<¿Üís®á»o»&Så!øqí)ø›ws}Hƒa£yñ(TUbᕹj€Ÿ4×pkGE§$«ÊGñF¸R6½šˆ#Œt9©ézêÅ™©ê%ÐM{Õ²Žu²Î¾¹k‘–"ƒÑˆzÐz•AÔR5…¡z>Uƒ6vf©t͹’ÿ fŒ”-µî…Õä`Â=dMÃzMk"X•n·ûSK1Ìã"$¬–ÃÀ¹i\X>Q(»¾°ª”°ªs1ˆ8o¶·>®w§;í:|ÔÐatACû¡ôyÐŽ½ÔÀ Ñy!©‚_&bOˆ:r€n\6'&Ûœi<¼(ñ‰gàKó +´€•®ÁÓXVÝgÞNÌ­Dåai\Çë¿»^Ú„^¦é'à³>¸·ÈÏ„‡ê >ùÁ„jçî‹=XÚŒÆw½Ðãº(Å¥vx»¿oƅͬ U |R°2²ºëGoG9©d‰Ød|CUa;kMƒ¬­!†4èÒªp£Ò¡ÄviŒ1*›ª®ÍÄêZ^½ºv)Y´cã&‡p+³ýö÷‡}Ë›1oæØ×É¡¾U5þ[k–Oo­ÖKdZ9±Âúê4>Ñ2çõŒ*ì2ר{,¦Mv†ªdôr!“XS+X`o¤i`µb:VsýÒÚ§ªDyN5æGŸ×«¦K¯ÀÇ}¨Û†MÓsçš6À6?­q»fܤð朵>A iZî´”á’ö&kI-¬Ê赿0E:v1[4€éÐ!a—ÿë˜ÞW +¡ Ž–B®i£åöaÜþšÔ¯@%¥Ü1!èªÅóœ¿,¿5Wð؆s˜r KJ‘ƒ³y#ΰiMG½úC›"‚w›"“«ùÛ¯ËÕf÷Є¥$fsìHô‚qìÛ&w…Ì»Bú„®%îMœ©,/—ROøöéHÞnNäÝ—å!‡([®N`ƒ:ìUW[…’HaP@v]"µâǸ…odº“ÕCäp¯q$•øRçô õôÙ½°•"ÄY+EôtR¢õ>8ò>â “eýÛ¿ÆkCJ G]4Ê&¬^'‡3Êä«$êx‹¨ Z BVuðJ˜`«ªPG°VO±”¢€l¢Üiª§¬žV hÙ¾ÄåÅÀ^‘  6 ¾=-c»Ïd§ÆÔ",¬Ž5„Oî~0Fñ\ zÑØîìb­§'»J½Nm*ã ?ìîÎlñA ‹ŸC!‘J¿¼Æq¡ýHOÀ„Î,†îÿñu‹…À¯ná×ì‚o¥¥"x œ)ÏÛ¢u”² ëƒé1J‰×¬¨²£ŠÚ‚z{:4¸ +K‘¶I'ƒMBÆP:õ9èÒk‚‘N©r?XM›„B7 õí?/·ûnf£p|É*!ǃ¤Ýi¨¿@C]_¿À\XùšjÕS¿Œ¿ã\?»òu©Ê7Å;t+æܳ°e/ñÖD™¥pÈW´åywÁj B6‰µ´ÝÐý]Š,7©Èj3ú¼:­Û†Ém|ï¢lì¾x·º'¬ÇpäíÔÝùëæD¾òbgûÚ€á ãf³÷ëãæaGþ¶|\×¹(×ØŽH¦ aœk;îÃ㑼HGíÿ(½Zk[²Övm¦‘y9š§Ä÷ì ¯7©êlÓ  óó:Ê(sQØoyïÔ0sµ&¡,û’2ßÉK¹jËõ¯ÙûM訌ü|X/ (ðýa|‡.…êZÄ,$ĨhجgËT»ÉR)^Þ—Ò#¹Ö $V¦úXF  LkÃeá];ÈL.™¸ò8ÎÙùËvgP§È„QSx´÷ð¯ó@nÏV—ë¥ûisl„wç&´Þ¿ý/¤(]û¿ ½îZ2 +endstream endobj 189 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <> endobj 195 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 203 0 obj <> endobj 204 0 obj <> endobj 205 0 obj <> endobj 206 0 obj <> endobj 207 0 obj <> endobj 208 0 obj <> endobj 209 0 obj <> endobj 210 0 obj <> endobj 211 0 obj <> endobj 212 0 obj <> endobj 213 0 obj <> endobj 214 0 obj <> endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 220 0 obj <> endobj 221 0 obj <> endobj 222 0 obj <> endobj 223 0 obj <> endobj 224 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 227 0 obj <>stream +hÞä[Ër7Ýó+°ì®a¼ËD’=3•Ì¸dM6©Y°Ä¶ÂEºÈ¶cÒüeîE¿ÐÍ&ØT4%1S^6úž{pî¹0'³7ï>pò°ŸI,sD9C$#»böqöÃÝìÍ[N8¹û8ã‚0øÜY*±’Q&ÈÝãŒÁS(S^’»{ø¸"w¿Ï~É®oÞM¹zsõÝwäý.çŽÊlû°[<>®6äØ}\Üùîþ1»¹›ÁwTe~.¯¾j’j2BšÏé/~éå>¼ý+ÆNZÊ1r¬‰lÙÇköýo§úýzMnW@S‹¤Î9qOn‹}±Ëçùö%þ±XÒfqiåaª ¡Bzï UhW-2#¨5Í8¬>*To¼^šÀm_­NÃma…vòà81NGÒ(­ †Ød׫‚|¿+äæëâñÓºÈï~Ãù…û$u‚xø0IÃØè ¸µ8Þ½$¼€×âƒÿØh\„žø⌊.žø4˜éÑ;`Æ0ÇšõŠ­ãÆáM¦™·¯æ=z(íàR„ÉÎ¥¤ÌkT…„»ne£–@[ ðêËjYìÈÕ¯ _ˆp¶¸Émñ4ÆP§ˆ—Ôö8âÚà¸1Cˆ×¯qÖ…íÀ Š}|«_Æ«ÁÌRë:°ÛÅÆô™w‡›Tón{ñ!î²Â]xêE…»hŸQ{Y|ü½=`Þ1[yH„ÎQ#Õ°øÜÌÆã¸ÚVÈ<(b#È‘Út2·%ÐäÏ‘õN»ÆȺºCW +ªÕÔ¦E÷—ìækYlö«í&Ÿ+Á}Ld¸¤CÂ)" ŽãFªX:ä¡tŸMÀÖ´'ê`û#ë8°–çWÀÁÍóvD³NÞP‹¥°8Æiü¡þΕœËŠ‡Õ¦ÈÁð©ìkÙ Ž´æ×€îå8¯!kÀ¸á˜\J°3ç6ïáñZ%[Õ䪑ìõ›Í²ÛöÁÖÞ†xA}k‰ã°Öh°éð‚Ðé×,ªLµèXr»‹…g‚vpâÐ@ÞÀµòÀuÌ,Êœi ë8)ê†WæL*›6:©;«û8×ÏHeÑÏ裠{ýzQ1âFÝ0è&\¶8®®uc`ïÄyja/A-tJ-ÔQŒ `|[û² +)2B[YÎm0õGÑyq,Rì¶ÌNg·×c¾KOÈx ˜ž*=ôìt«SäðRêÉÇxL&>|Û”‹¯1Š0€*Á 'Pt[áZQ«DFÕ‰G'J±uú’dB— ¡Ž8¹9–µPVÌX ¬ #ü¹DÍ@üIÆ5”§hŒE@»s" /*&U&FõÊÛÕz½¯«l© ;9Ap§(^èݳŒ +o1Q!ŒŠLÆ JÙ}€Eí'ùïîòÖþäO=¢z‚áÝ”&´mŸ* +,Š Å× î˜ÛvYY¥#¾²…Ç +\GÁžðÑ]â¸Dþ¤Õ܈÷éàÔź”\­ÛDµî7jŽËÞæTdCè±-õ¢E-9½r8®Œ­ox'úJdô4öv¡_)ÎG +wiýã"”ý[Î!±gE약6,ôVʦ(n'Q\ÿµ(AoB/+è%@ÿ¯÷W1úh°õšÀÞZ¢ÚMŸKWÉ‹<¯3%ô¿{ÕÝŽ››Úïse€àÛÕ¦ìé ”˜z¨ÑeJO´ÂqÅ˳]ãÕªIW¡/˜è.Et7Bô½È¶ëo½*Hz…-XÈ’ ä¡.Up¥9콺êîtÝÙQܾæFŠK4RD¿³èÞ÷e×Ö–P¡;ìXS‘ÌÇ%ø˜1íàQWûDç¤1'öš¨/Äg?}'ñþyµˆà6 ' C[ä8Ü2lÒIÃOT@FÙIp+9æ˜ÅÓ o@µ¢žÐø> uk†¨ËˆåXcRìàV²R B2`\B!“Ò ÆÏÔ öŠEC±ñ ›º°­æªê<õ.ÇŠþ +J€ã[¯É;¨t8n%¬–ÑŽ&là@á›â6˜—àV†]X5`qóæ4̸LFËzý„òóE6tš@Œlèp1Èïî PXÈŒëuˆ€ÄrK‘-ã4É|°(`Ó“Åค8¦-Š¶|ŠEaö‚=J…âëŠÚ^BšE:‹ =ÑA@"ÄV—¤:§`X€­iv‹[ï?NaÇ‚{ÿ©Ø0å'ôE*…ëâð‰÷Žõ¹ø‰EPI»ðyk`¼KÄìÝnûùSÔì@qé“í\Ž.µ 7ƃuÞÔõSw‹…~††×³‰ÖS{êªißÉHü2ŽŸKÜì:ÕµÙÛV—ÊÊ:&ñµ C,­> *0.´NW‚Z~Ö¹È'¯7ÓŠ„=ØśͲÇq„Sqt0:ݾ2a_^€ÍK8¬ëÏr0Z¾f“ÂÕöq  F˜ +58i2nÂ=Ž p5r¤7"¦W=—kÃÔ;.zR8Àü¶xÀ¢yfë]c“nSá¸`Ø”NQý_TòÈÎO­ï[íñì:w“}‹ì7ÉÅ=MjÆpœûôͦ€þ¥ÃƒÜ>1Ö¿¥gb#B+U%F‹/ë’W‰q<6À{<Óƒ]–Ú§øÑ‹‚Ët«5'b3¡4Òæb{,ª;§¢âKÿlPöÏ¢Œì V4³`R\\ÐŽ˜X[䘶Lö„Ò¼ì&èŸZ3]å +è7¹„+]QÞŒc±Ç6?mV† DÔ—xnÖ†S†ÉbO(ž¬D§5ËÙ%¢&Ñ\n1Zµ¨þ §2ÕîZÃ8’z­€‘]8ÜíœÐ\)¼ÇkOÐŽÀfÒ*ì¯>E8ÄÂÙáÁÙè”ò‰aR?“y|™>—ö¹FOÅ58ÿôy_þ¶]m®¶›Mq_öL¤ÃC´\ù䎅 ÇÁõâ&Ti'&Tÿ¢ÚFUÿ`‹óàC +endstream endobj 228 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 235 0 obj <> endobj 236 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <> endobj 242 0 obj <> endobj 243 0 obj <> endobj 244 0 obj <> endobj 245 0 obj <> endobj 246 0 obj <> endobj 247 0 obj <> endobj 248 0 obj <> endobj 249 0 obj <> endobj 250 0 obj <> endobj 251 0 obj <> endobj 252 0 obj <> endobj 253 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 257 0 obj <> endobj 258 0 obj <> endobj 259 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <> endobj 262 0 obj <> endobj 263 0 obj <> endobj 264 0 obj <> endobj 265 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 266 0 obj <>stream +hÞä›Û’Û¸†ïõ¸$kK4·ËÝñ8•”wíòhíTmí…2CËJf8I“]?Ò¾eº@‰„(W’‘*å Ñ%‚~üènÀŒ¬f¯þtÃÈj;Ó‚j‰´šJ6åìóì‡ÅìÕFY|ž1N(üfM!81‚”“Å̯T:A·pA™$‹ßf¿d¯¯ßUXrõêê»ïÈûMÎl!²ÇÕfùð°®VäÏÕ®Ü|^Þ–ù¯‹¿Ì®3èvChß f£^ˆÐ ç;áÜ%móì9<“s|¸¿Ráéo—ÛÉçº0ÙÏOwK¼âÙ®¼ dŸ.«òBeõm?Ö7mn¿Ô7ñðI™ÊçL2ãàf—– +¼|—ð›ÇpÛÝóíŽ|Ì-XVÖ?µ­ŸóXÕ þu)ïr® Y¼öý–²y*ÂüA˜ƒ§ÙBfnÎ) —ŠäºÐ!Íçô¿õr¼ý+Ž0Ñ£Í؉V}¬Vß·«ßßß“ëÈÔ ¨sbÜ’å¶ÜäszûWÎücyW4“KóÂh˜âºPš\8çH!-/L3?ÿ}#L¾‚Ë^c=3AÚ.LNÍdÑ4ÂíÜÁ2¢­ŠœÁ+Úk›"šì®üüÛOå{W•p‘/þŽÝóß…^hK +MéàР½{ +>€µ“§6˜nFq𛂤ÿx>®p¼Nªj'£Úwyô«Ðuèk-„úþZ©o†ï1ÐJ÷HÝ<Ò…þ~œ‡‡0i|¯çÞ)t‰Â{=û걪ÊÛÝú±Šhk]X ´e¡eŠ¶Âv­-ŽwMÛ´¯ÙÑÖÒ@×Rý²Ñ½q³\»KŒötÎ;ÌÝh³‰ßB o7ŠºÆm48n‡›Âœ¸y_+}iowW˧ˆ´t° +‚¸pV0ïìg-±]+V¿ÖÞ.l¤kVØŒd’´-ŒR;ÑŽÝ ÚžxÛ¼îhÀ+Rxƒ–Àµ­–A`”ñ§xËö—î›õï¹Pàz°Â‚]dw`~<ûáùá©1:$.xpYp›Ö6´k!#'Ô¶™ mu™Ú¶ m‹þ¹TÀbSþó¹¬n¿ÆÐ4X€q¡M†Ú5ƒeÊ6Ðû¢ *÷~R¤¡kwiÔáí÷©ûwKý§Ç +®roœ-Ÿïwžï˽rb’BŒƒçDJ`.´ÞÒ½4o±+¼+›¶fÊ¡%Sá×Q„>»èXôÚG¾ 9ÙLº€‘ÃO±ƒuÐw©EøB#ÆÁqÖ«|.ñ³ZÞÇ adÀ3ÀTÂ1`ÑTp«¨ cÌ¢•9Ñ¢•9g‹vûÍ{ó¦¯Õ÷¹ÄÁYîvr泬ˆ3,t`0€*µ +ä¬Uí}‰™Ž³„ &+NmÅ9r/ΊFœ'„u7ÏÈžÛ@CeY†Az-Çv%]¬c§‚=OO!{Âý¼±‚Kƒ3h,Œs)B»‚Ð#òÙ eZžvXßU[ˆú}é䥩3V!¢Áh“Ó ÞV7˜Ÿ´¯»Hi_öù‰bµ/c^=ÆŸÖQ:¢˜ÀÇjƒ3>Ùb»‚ì32vYKžÇSÞ!’Ê€Fú0áO9¬‰.+׫/»È|¥Óè´pÉT„a»L[¯6§Z/¸Îù„L„90ˆ¿î–÷ÿèÔ+C‹0´Ð2c‰u,KLWµ&í«ˆ.ÉБ;°DnÑfR]>ahÝ•Ëë õC¹z¾_nȧ5ÆÉXV\çT«¶€(ˆ”XÏÇ2x½ÄÈNJ“L347Gjsõh«.w´'º6„Î./w_nvKH÷ü3Nœð!ÞèÀìÀ:m»CÓù >nºƒK~0!&ŒÈa™ô›Üÿô2©²eRÞJé0iAî×Õ]Œ›1Ÿ«€àS¶¶í²ËhÉÔA5Ö·äÊí9CcÊL?Nc¹º ó4Z¦â q¸ñâqc®ØÖ¥8¦7ÀX$×9f%¶s)RÇ Œ:~Ü@Š‹î*Û†ë)•m..·°­uªªºŸ½´…TÈK` ^‡S4²=E³JfÂTégŒaÜ`²Â±3ôž¹ ¤+ +O cø‹f+z<[Ù/nÀ²WƒE›aJûˆC‘TÖYã>eéÙGÛ œGSðQ3JàÄî¥Jp­îOo1á|èàÒóßùÍEgêÌs8¾5q1Ó梂4slYD®Zäo—9„*ûš3üß%þ×8ƒfÜ‘Çá ÉZ…ßVa7aU«”™¤ÚýÄã [“­eØÍò×ÕÕó®7×i8ö©D‘8uĬ^þhÿþ¹½Aœñ“6{éºCrw´-Ì~­Ò6g8S[{—A;xAªÔlsZö¬^¼Ô`ÿ`Ó¹a +endstream endobj 267 0 obj <> endobj 268 0 obj <> endobj 269 0 obj <> endobj 270 0 obj <> endobj 271 0 obj <> endobj 272 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 275 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> endobj 280 0 obj <> endobj 281 0 obj <> endobj 282 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <> endobj 286 0 obj <> endobj 287 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <> endobj 290 0 obj <> endobj 291 0 obj <> endobj 292 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 295 0 obj <> endobj 296 0 obj <> endobj 297 0 obj <> endobj 298 0 obj <> endobj 299 0 obj <> endobj 300 0 obj <> endobj 301 0 obj <> endobj 302 0 obj <> endobj 303 0 obj <> endobj 304 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 305 0 obj <>stream +hÞÔšÛnÛH†ïõ}Ia ¦«Ï}™‰=Á,&#öæf°‚M{´%C–g’GڷܪnžE5©dÛ)!E6¿þë¯êj»›½y ìîqf$³Ü1å “œíŠÙíìç«Ù›_€»º`ÿà8›KÁ¬ä9ìê~Æñ*9W^²«küÂA±«¿gdgç¿0;öîÍ»Ÿ~b»9¸\fÛ»Ýòþ~µ¹c¿nöÅîvy]Ìÿsõ¯ÙùÕ ÇAÃ&Œ\k2ŽÂ‡Ax†g)WÝ{÷@7ßL¼ûoËÇ=›/Ln³?Ü,édûâ&~a+útÙfž›¬<íCyÒîúÏò$?9èù¤çôàøÝZís•]ì¶ñŒ›§ë=û4·.YQ^å±¼ÅvS^Y„'ål¹Ʋ«³0d¥ªÁsÿ?ÞÏïá‚CüªÙÜÐpYõ9ýãÙO}½¯ÿIs'm4s¼š;Œ„rî@ǹû¾C}»^³«;T¨E­íçëì‘},‹Ý|!MæBâ7yWZyŒm“kÃr!½÷,Weãˈܚê8^.Tçx•¨mӀʫƒœ38`Æé–+I@<²¹)nÿþ}»9+nçÂbl,ŸÖûOëâÓjIՀÅdîÐl4äF°Üp>xK!onKw¬½€—ND(šËþ ÷Æ(ã:N.¯/t‘,g©?ó«ÿâ¥Ô2⃗_hÉß“§d`|ƽÕYM>¡HVgµ9”$³‹Õæ‘pnŒA£Q#—ê8+œZ^aòém®Už‰ƒ»D¼‚fȺÊSUÀüŽ·ð#)ˆøE}[ÓÓñå~‰!§PÙ>LGK¼ÊcÞ³*WqÎ LhMÇ *ñוâ½í˜ò <à³å½ð¹}åôØŸo0k̲}ðhèÆ“W ÐœŽ©JÓèº1 «íËШýÜE×Á¢áu„]z¡M7'ý§DŽžd(e`fr‡ýàÌA6É@éIîÑóänèh¨m¼Ò¶TÍÈ^îw \íÑô˜¶AÆGÙÊ’QåÉħì´Ä'‡,VœŽªþ}¸’ûJÖ'IÙš eÑHYös§>þ—›ÍòÃö¦X·ÈcXPÝ!x¢èàtž©8¬¦Šc4ÁEMSìñî`§¹ÀaNm\ˆË´*­k¬.ñᥒ_˜Ž9üv¶º½}»+–-~F‘-€JkWˆ ]mtÛŒ¢§ß|\À–?k ëá@ïnß/÷E!>1Ô)|xªêSàÈQ'ÓþÙ·ÌA&‘û[R>„÷aù™Ø½[¶½“ŠgŒ` ibx’‘R«0Õè}ÃÑÓ Óm™çLãf8çöîißÅ2.F¤LPSX㹪 Û®åi/&diŸ•”ý±]®nŠÁ)o(^½Në “- nu¬A+fm¢Ð/¥¦ÜàúËŒŒøD'Ѹj)$Sü";Ý°“@KÈ:Õ«Ñ;ì.æ’ÚKj·Q£Ÿ"ÛÏ?VË5j1X`SÈ+ëCcj2å’† IǯIƲs|ÕÄå Nø +œ•{ÀHÞˆ@uõz_¹^Ê…Qžžxú’'Dž@±Q$b Nd«¢~)ÁH&„"K°a¿üø$È –ÊŽn隉ï2)ýÚ÷téïéN~!§š˜ø­)¡°àA+áí„D·‰+<,¸C7jyô I1½,|þ½^gözûµvý¢M el†vQ†Ò™.v E’çtjº¶Öz:D¥†„5a¤ˆ×Ðß“¢k(vÕè²NÅ6¼éè(^cÁàëµðÌ`u·`0CõÚiËD)_pÄï€È¾„zv,£K²ã:3¶¸ÓKuäšÞMH×Ðq —q\à+dûü±ßì9Iî‰RŠ+Û-ÝjÔ-;+nW›­²Û)$½ð\çª3ŒËË/!_ 'v9Ô –¯ŸÞÀ«Ór&êô’tK­"¼¦íuÊf)iBÈjÞ´¤ÚµÇoòˆWÒJJnLõÚþ”âJÜuÙLJFoÀÔ–|¹Ñnû¥-ÚžhO†]¿àø:$=Ø¥ hÝìÐ:z³‘¶õ“í~IÇÿXo"nªœÔ›€Ü›ð¼ +ùÿ 0¦ï› +endstream endobj 306 0 obj <> endobj 307 0 obj <> endobj 308 0 obj <> endobj 309 0 obj <> endobj 310 0 obj <> endobj 311 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 314 0 obj <> endobj 315 0 obj <> endobj 316 0 obj <> endobj 317 0 obj <> endobj 318 0 obj <> endobj 319 0 obj <> endobj 320 0 obj <> endobj 321 0 obj <> endobj 322 0 obj <> endobj 323 0 obj <> endobj 324 0 obj <> endobj 325 0 obj <> endobj 326 0 obj <> endobj 327 0 obj <> endobj 328 0 obj <> endobj 329 0 obj <> endobj 330 0 obj <> endobj 331 0 obj <> endobj 332 0 obj <> endobj 333 0 obj <> endobj 334 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <> endobj 337 0 obj <> endobj 338 0 obj <> endobj 339 0 obj <> endobj 340 0 obj <> endobj 341 0 obj <> endobj 342 0 obj <> endobj 343 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 344 0 obj <>stream +hÞÜ[ÛnãÈ}×Wô#……8]}ïÇì\‚ÉîÀÖæe‘Á¦½ZX’a+™Ì'å/SÕÍK‹"[Ôx[ CÉM±[§NŸ:U仟½ûó5°û癑ÌrÇ”3LröTÍîf?.gï>¶¼›`_xgK)˜•¼ä‚-73ŽW)¹ò’-oð Å–_f¿>~bºtìý»÷?üÀ>?ÍÁ•²ØÝ?­6›õöžýe»¯žîV7ÕüŸË¿Î>.g¸Z†4aà’Uȸ +ឥ\3÷ç@“‡w&Îþ·ÕóžÍ¦´Å/·+zžºoØšŽ®ØÎKSÔ§ý½>ééæ·ú$ô|Òsú€ï­Õ¾TÅç§]<ãö_7{ö¹u¥(ªú*Ïõ»m}}Ä"üRÎP +a,[~KVªY<—qñÿeàý|áp¿â[Í憖˚ãôëŸz¹o?Rì¤-"Ç›ØáN¨c:Æîÿ»Ô?=<°«õ=2Ô"×ös(uñÌ®ªçêi¾¦ôÅ¿çBâ«Û²ÙWF”Öàî6¥6¬Ò{ÏJåxq‡…­qß•B Ö›©íã¾4 Êf÷f' ˜q:…ÀhOøðÍmu÷åªÂm¦p¸{?TñÃ]³ÖpY:Á¼¤KÃùàl`w3†ÙT­A¼ âÄ'(Ù©WXðR Ý…—·ºBï¾ÌF¯3_þ>ÃǪ̃·rMŒ3¾f2ÍðñG ~mPTÀó°ð…D&xMÒ¢ˆ‰Z=9@ÿz4:Œê$ñ°½a8€AÝR 8GõÎïð\Gl@üs€ß`º°Et[™bÞ$’¨†™Ðv¸ DúÔpußÕÀ㯾_!øPƒ´q{Ñ^L.åWÊ´K•À¯î¿2}½]ï×»í3ûøŸÕæñ¡Jƒ < Z—À0²Þ»Üñxª†zšMŸ´¢‹Ç´]œÜ®4F­AÏSÌñÁlw¤ÍcšRZ´”¦ÍØQšÒ»óz¿ÚW›j»nUO¢M¤$À}–ÈV‘¥ª…äP>LÉêÁõ à¡p _eÛˆ«F\e‹+qÈVÑ +4g Ä2fš…ÀÃ×”¡ Kë˜SÄýQŠ‚Ñ4ns“kÚJœë€Öä–Øt¡6æ’ Ž >L„ ‹²8W{‡¤ôš2÷8¶ÖÐ8;—µ>/ +{Y P~‡XAö‚@)ŽôCÙ2™PÒ¸ÆC§ ©P£L…¸W.2ªñL(û騇x"Þ‰PE2XqÙŒÎÅi\£Ü$: €]¬SÒ “–­Ç»ª8•-­äe)P¤À.:ÔÅUuO‚f9O+‹Â¡$¡0.<¨±V¾EJ#E|…‚M+õ óÔÏиçSþé›|‰¾nñS€7 Ó¯#è/G [º`#"«È^[ì›$„Å=@õKÖ¹‘tÓ©âDõb(Rgˆ·”¥ÝúH»{:²œ@ÿ¸½=$;A ’¶šf ƒ5}ÆÂ5JCboÎqx Þ²ÅÓþ£ÛT ÍŸV›ªT!Áv—ç.Ž«Dg‡l‡?ÏvH¸,Ûar¶Cu=ëÏse0J»uR¦èÖÁ0%¯] ¢ni\áôyÉÐâ<ɸ°~‡ÉH†„}9’\|}L}…¢¶–/.tÅFQ7>4ÆŒ,_lB÷3…Z¼a1i+ñÆ€´Æ­“EÍÿ¤‹ã]<¥ì±.ÿÑw¶«ßërèÇÕn$_ÒÖ†"“‚®7(Ç(¼>ô?T{«f˜Úeˆb +ʾT¾×Üù6wÖºMñÍqrm^ñ +&Í1±6Û´ À»:"˜“&Õ "URåÑdh.É7àÉâ¨8éµéȾOkÓñA0Äùm:>¹RëñF3ï·ƒÛ.Z¬‘ÀÒö%ú2N°£„ê½Ã^zE;Uªô(C8.QeŽrf² •¢§QÇ+½³W*)}‹¸?*)›»¦iƒZC‚N÷fT±™ üËaQ.ÑŒ ²Ø¶±:œ;é‚Ä“âS§Eî&}#õ˜•ô›ôà–dZð掌(µê;ÛdÏðó‹ë›Õ–½ÿmµNKxiB+ÃØPÃç4Ç¥¤ªéÕÞ^=ÛZ^²¢´°*Š9jÖ¼)öƒ›‚„àJÒí¬/! :Ugá·â„¢'éÕ«¡M>­ ‘Ä­_Ô¡Ç 2m°¨¦ O k}ŸÄò#4M]Û4ÄÎy—8Ë7éðÓÎNÇÏêÁ.’9ÓšVRrߌßÐßh[¤§´?Z¨¤yh‰âµdN„‘~LOÇ€eÎa¼ž|à I“¹)píûÝfƒµ ~|< ´  +ð ÐB£ˆá©ª½ÛËrœbÎN´ÿ½ø~&áÜ&¾à¢ßÄïoüÐ>=ìVûõö>Ëê "Ö~£{j?A} qâîµå'rX¢úÕ;É‚Ë# í5)†1üq½Oi‡Œ¢;9{K·m„öGeEÝÙ´“øhÐ^7uËLêÖ#¼ûùé¶zªn¸=B—274.”Ì×a!ëL¬‰Ý«óMåR¶>&ÜÏQ.´>Š\aí1Q¨°£±–’"GFCãt8ÞÑ-¬Ón)µBø:ŒÔ}FŠÑÞn ê繤䳊ÏLèbîIL¥àA¡§R”w'„ñÂxjOZ˦­QWÅ>A<•–€xBÖc:Ÿ5˜Î0èÎ]’¿´¹{c ýz¿{ì¶>Xí<íé˜Ìý Ô”ÅñlÝný¶Ü]$…·Aämà—ö@ úNrP.qPIâªø[æ MЀ|Óí(Žƒ¶ôÁ‹êÃ[å¶iŸݤ¸~¬nÖ«öSµOú, ©}el6§Q›ERê;³Óú¶Ú_t“ÅçE5ÖcAé®ðOT\„'Ó‘ùî¹74ë‰N[†´Üð3´ÜÚ7ÐlñÓœ5[ ;Éà:J/Êܲ÷@ãõs?߯Һ Á€ìƒò®OÞÇð?\q3_à¿÷„ºŽÏt2ëãÀ(G«rðtöÀ³¯VÃyϾڷÙ·¤¨ÿ 0—'±) +endstream endobj 345 0 obj <> endobj 346 0 obj <> endobj 347 0 obj <> endobj 348 0 obj <> endobj 349 0 obj <> endobj 350 0 obj <> endobj 351 0 obj <> endobj 352 0 obj <> endobj 353 0 obj <> endobj 354 0 obj <> endobj 355 0 obj <> endobj 356 0 obj <> endobj 357 0 obj <> endobj 358 0 obj <> endobj 359 0 obj <> endobj 360 0 obj <> endobj 361 0 obj <> endobj 362 0 obj <> endobj 363 0 obj <> endobj 364 0 obj <> endobj 365 0 obj <> endobj 366 0 obj <> endobj 367 0 obj <> endobj 368 0 obj <> endobj 369 0 obj <> endobj 370 0 obj <> endobj 371 0 obj <> endobj 372 0 obj <> endobj 373 0 obj <> endobj 374 0 obj <> endobj 375 0 obj <> endobj 376 0 obj <> endobj 377 0 obj <> endobj 378 0 obj <> endobj 379 0 obj <> endobj 380 0 obj <> endobj 381 0 obj <> endobj 382 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 383 0 obj <>stream +hÞÔZÛrÛ8}×Wà‘¬”4îxœIœ­ÝšIÅšÉCjT–"kJ–\²²I>iÿrºÁ‹@™‚¨\¬L¹Ê¢ RºOŸ> °Åèù¿®-FV1'<ÓÞ2%Øv>z?úy2zþ +°ÉûH&ð?À;®$sJp!Ùän$ð[¸ÐA±É Ðlòqô®xyõŠîÙ‹ç/ž=c¯·%x®ŠÍb;½»[®ìßëÝ|û~z3/ÿœügt5áIVŸL9ýøOpή‹×ÛMuÆìÃÍŽýQ:Ïe1¯¿å¡¾Åf]?bŸT°1p)­c“—qÊZ7“ªšüÿ„PŽ=Þ#Œ¥€êаÒÒtYó9üãâ§þs¿¼ý“ÖN9´r¢Y;Ì„zíÀTk÷}§úÓjÅÞ,¡cmW7Å{3˜o˱²<ÿ+¥ÂÎg¼É+£æ¶åÆ2.Uqí1ìªü²’;ÛŒcâq©;ãuVbl‡*1-hÞ brî™Á³Þ$¬C:· lŠÙüýÇëûùÍrºúu¾»ZÏ~[Ïñ œüEÓŒ—+î‘b´áÁ3n…è½&ïoo)àe³Q’Ò—g~"6žûz)E›gÊóã„‘Ë”ÙÇ5ûÑ…Aöú1xYHqc¸rD +šbèå Ø^lÖëùÍn¹Y'¸Yd¸éhÏó´t³Á B,pÑ<õe ƒCÈdûu¶Eì]Y9Ö˜47å×A÷°{1½o2ƒ ÓkHÉ-‚g0;|xBѸ5P?ðݨ°Y®ûàS'ÐhÑt"Ä4€˜ˆ6˜ú|$œ¸˜Å5ßCŠ_…ñ׆ïBðÕòS‰+`‘d~þp×A>&0RP65[¥ûØ L` Ç‹&°<¾?}ŒF_Gão[ôçb¹®†§«N0ÜQtâH.8IfYˆ¤Øsœ<ey Ía‘iäå#Sæ"3t"“À ÛPcûºT¤Ã¦%龕GéppÀk‚¹yt%¡+D.é­8'éÝmL…ƒœ¿Þ|Ø¢ToKŽñ3ÁC t<Ó ‰g«:Ó"¨Ï@æ|iÕ#JQ¦ +ýþ0OÃÐê˜åBgk ÜÁqcMçt'×ÊÏJ‡íFÁØÁí¿éܪö£ÈC‡º³¾¶»”0ðÚtålÓ2žà\bI‹]¡ŽÍ§öâvçb›†·Ø”økµ›.:+È!¨à  Î)€sÈÀþd`ÎVoK<ë?µÏØìR qm"1ž…yƒ‘VÊÓ‚CÒŒeø‘”Ý5† A|`WŸ¦w÷«”UAE*@Q°n!x؇(øNœQðÓg×ç¡Wá¸6ß? !ýéM¯¾´òí’d”¤ ǘ\Ed옳¹Šš½§ÕÞ´v.fÝS*ÛG­ò|YÚ^ß<ýéÚv)Ý©¥¨XÖá2¸V×u¸ +®Ÿd]$Y—Š/EâK»ÛëÝ”Ü ªJ)Sh"S(ÕJè£ +Œs×(8’fAÈuŠvCMì `WîPùŸÉÃú÷•ýA„QŒa¼ZÏRôȸ¡bå Äã色¶ª&‹ƒN© íÈA¸`½ŠÓ”à÷,+•«ˆ£%-âøË´D‚±ÅçBSĶ)²šú) 7-–ŽÆµvߤíéA¿KHúŒçdúcÒĘ4iLÂÒ –¯KCä†þZ®;Ù]-`/³0×ív±춱D ŠQÌ“¤w8žÞ_åÛåî+ÛüêSUÊz)DUU¬Šû¢ÖÖ’}â»HÊ<ß+X_ÃYäÀÃKC¹)Ö r¹MHÒC·X* ƒò .{œ½4±5!¨©ÎÜNïS9¯ù&€e*©pX› >ãøK¤2ç)Qéþ¼ê@Š\g5Ø|Vã¸Â +*«‡×ì§ÈéÇøÉ®ãô¾ŒítûÇrš‚gEkçåÀ#?Á³pÒГî CïÒÝ‘Ì:Íî‘g’‹K6žòrºë@¬¥¼˜‡„‘fp\a¿’ë=µ$ø[«ôÉ3Þ¹UŠØ/³Dº2óír¶»M!•¶JyŸÇBÄW·×Ó§X¶)¬yRM$åWn*]ß.ç«ü:­ïJ‰©Ã›(Ã)õ­ã2¢ö4®@¤©ßò¦M:{ÈîJ)’^²Ýªõ•[‡3þÂFÒÓôRdƒìwðOó©&>ÝŸ®>/6Õ©‹/ƒŒ¦å"KªŽÆ%J‚fï(­š3hU_žV³^þ)+úÍü&Õ—Ò™˜ì"ç–àŒ%ê!ó;¡gZú}8Ú,Ž]ÙÙ>m”¸¹+«ëú¬hŠÊcàïãZµjÕ„Äç#sÊõ›S®2§\±^´¶_»ñ•2°ô‘ bRÿ&dšy§‡K*{ñf^î}uØÌï_êª1LxÓ±øh£?¾€õPç{0§÷zR9Ú‰™á˜½h'fŽ«ŠAXl×ô« µXVˆáy(£üa™kYy óO+ÃL¦u=C‡Uöž®ì=Raø+µ÷ ˆè +Xr2!éhBï fƒµ¬ÿÁb°÷ ³¤:Bª;FkÊ’³.8Õ¼ðSo]‡#ïû –ÎtÓ;ñKõà÷Ï.k¯Øo’Ô×·u÷zOÝl*ÀD&_Á¤Š¯U€qmšWaö­´ºdksMìu¨k¸Tûz´Á|~ƒ)#d í¥•Uð$þ³t_é?·˜(ô6¤³]dºezUÚá,ÝÁ&I­; +¨~%ràÎ)\nç³ÖCîé¡CDõ&ŸÎnìKIû ì°ýõÇÙK²¥;U~’5â…}õ_Žðñm= Ù ÄÐU +|úš®ìáÐM¤‹"ç›Øù[€Þ-Ræ +endstream endobj 384 0 obj <> endobj 385 0 obj <> endobj 386 0 obj <> endobj 387 0 obj <> endobj 388 0 obj <> endobj 389 0 obj <> endobj 390 0 obj <> endobj 391 0 obj <> endobj 392 0 obj <> endobj 393 0 obj <> endobj 394 0 obj <> endobj 395 0 obj <> endobj 396 0 obj <> endobj 397 0 obj <> endobj 398 0 obj <> endobj 399 0 obj <> endobj 400 0 obj <> endobj 401 0 obj <> endobj 402 0 obj <> endobj 403 0 obj <> endobj 404 0 obj <> endobj 405 0 obj <> endobj 406 0 obj <> endobj 407 0 obj <> endobj 408 0 obj <> endobj 409 0 obj <> endobj 410 0 obj <> endobj 411 0 obj <> endobj 412 0 obj <> endobj 413 0 obj <> endobj 414 0 obj <> endobj 415 0 obj <> endobj 416 0 obj <> endobj 417 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 418 0 obj <>stream +hÞìZÛŽ¹}×Wð± Ñ,Þù˜x½A‚Mv`kýbäA˜é™ìXZŒä8þ¤üåV‘}¡zZTk1Á\ØPKþ°Ož*ØÍâÍ_>»Ù-¬bNx¦½eJ°ûfq½øójñæ`ÀV× Là?<€w\Iæ”àB²Õç…À»p¡ƒb«Kü"@³Õ×ŧêûw?0Ã={ûæíwß±‹ûÊgè@w8‰½³ãÎYÎÃöðêŽéÙ.½Aáâ%¯FÈÓK,eàA&èåa¤3äßmpöÑ86À®ΓNѼŠ! ÁO¢®©ÝháÛãî uîÄ8À¹Ê˜W…|"}IÎyüÇu­ È·Z +<45ý¸Ï£ $ÑÚŽ¤@~KíVéIA²™ Í +‚ð/8JLÓýE­I¶5~Ü}»ÙnrÔÁP7¼çNÈoµ[ÀÎ?”w€z8)ª-ú€DfPõsy?Â'-wb8d¿ðçßà|Ô¨ËA¿Õû±ª­žE«‡—¿l¶wÛ›o}RŒ"ŠâŽ6%ëAé4ª8¦½I=Fyç|ý3O:GàŒf?€¬¥ËÅë‘Ñr@ù¬Üq:'N@몃ŒÜÖSJ†é»/Q›òN‹çöû à3EÙèç,ʪe¬$R市„ ÖNzªZãAŠêª_éT»ŒÄšœˆæmÆSFÄa«Æ÷!æóX¾*¢Žû?øÄq‰#ÞÖ5~\Ö€¦Œ‚‚Ím‰¦Š›GÎM!( µk«2a™Òsóôüå˹&Q5¡Âry1"¡ZÇh„ê×{÷Ÿõçßîš< š"¼æà ñ@ˆíZ»’G´þL9²þ9Ë‘ž–£46~ÞÜæ[-cÝO" Rƒ†é~qèh¹VÍ—m^[ÁV™qÁVóŠy ˆÉ˜¢´È˜Õ¥²RÔ®QÓOH †a–´€y$qy7cZš£Ï¹Ÿ×Ç?6õÒ*ÊÒkTô%^{‹Ÿ¢ÚÆ¿o²yWL*ñ“[[ˆƒÔ®Ð¶KÿçO»ò1¦ÝG#ö ÉâtÚ@à›JÕ¾Uªv<`N¢'k¹iþX{¢ks¿»=¨!ª´`ú-ti¾µÔ®Ð0eÚ¤òÌ>&³ExJ?Qºj¾†Ì©úx»Îd_a‚„ÏÃ4HÐõ–š•…LqTV–•§æÌ–Ú=­Ú÷Ú¦æ<1ÝÁÂÐånPõËÁ u˜ÛsåôDNÕ×½lµñÈè®Uf4×%é1†ÚŽ§Â"EZ¡;Ét°/¸2c •€©5:ôÕsi£Ä„X¢9º v…FiJb²Òºq3ƨ—\s…µ¡$ç·ë¬?7ƒ¹Q"Ðc‘ÙV—™í +½õ 5¥õ¬u·ÞU¾lsßNàþ´i_¢s¯ ’² [F×:j—ho–™'ÖÚœ±g­µiÿŒ!7«Xþ©#îE×Ø·ãåLé é„7\ùr½ Û%ú!§@ö šç•¿žu¾éÇ0Om—è@>\Ï”ÆÇrmÜ~XpyžÚ¥ ùbL¸¼à*~ZƒÝ¬¢í³ÆŽDÿÇ"#^û%n†8(™H*»2/hî/ˆP»ÔªGÚLèD¬àòÙ¦2å³ä°³‘Ã!ã°™¡-ДT|‰[ š÷Ûš¶=T_ßnïrÌe\¨MôQÔ¥ˆi½DKÒ©ÇÑüž6ëV³`´Ið‰“CÝí'Á[A¡›ƒê T‰ þD¿1¬noh›„YĆ’|„¸ K +gÊ<€›Õ°ì‰<1Ok&o{£ûù!…Ò•é:8(ÙŒWe‹J¢‡•ã‰ …P`8P0ãúz×ì3ü!žà]†Û! î9ÃÛ¹ùxÛWøÔÎ\º}”nbÿE·t®ãÏýž¶Kˆ;ܳ¸¸QÀ÷{‚Âdµƒ3‡îdr „3ÆÀä7O_ºeœ‡®ýL…‘…éçléû:H¿šÐûÚèúíšÇ³”¸]hQßÿ»f‹;"ø»ñà +endstream endobj 419 0 obj <> endobj 420 0 obj <> endobj 421 0 obj <> endobj 422 0 obj <> endobj 423 0 obj <> endobj 424 0 obj <> endobj 425 0 obj <> endobj 426 0 obj <> endobj 427 0 obj <> endobj 428 0 obj <> endobj 429 0 obj <> endobj 430 0 obj <> endobj 431 0 obj <> endobj 432 0 obj <> endobj 433 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 434 0 obj <>stream +hÞìWÛŽÛ6}÷WðQB .gxL7»A‹ ¶N 4胱–]¾Arzù¤þe†usvíÝA‘¢ðƒ(“â Ïœ93¶ž]½þغ™ɬpL9ä`u9[;šÏ®n›¯f€LÐà,—Ȭ\ ›og‚váByÉæ÷4 ØüÙ»ìÕÍ-Óܱë«ë/Ø›:Çe¶_׋í¶Ú­Ù×»cY¯÷eþËü›ÙÍ|F~7¤‰^€y![/|tÂ3Z¥\g» ›Áx™Öú·‹æÈòÂp›½=,aÙ±\¶V…§Ëv97YZö]ZTßÿšaû ó¤á­Õž«ìM½oW,ßßÙ¹u³2íÒ$û]ÚŸ°ˆ'¬Žh,›¿Š.+Õ9/dëüß ¼Ï G6|Ú¡f¹ î²îùôÇ¿¾ôËݼ ±“–CˆœèbG™bºÝçuõåfÃîª51Ô׎9p5ì®lÊ:/¤á>û=GI–KÞå•VžrÛpmGé½g\9¢]›_¹5Ý<%G5™OYIÜömbP¼›¤ä¤<ÊàBV]ZŠŒ˜d6Ÿÿ ¬ç¤!Q;¸#_Ì#Q‚‘Ú+æ…í´%fw”–ëýöP—MS.Ùmµ)ÙÝþý±Ú•ÍÈ–¦h9†9ÙÓ68ëõL%§:5¨’A£š1~á¬z#fèx—]ø¸‡¤¨tŒYŽ;âé„Õºß0 +l¶,W¯®ßÊ]:*an(ôN1K jÕ=pNЄñ×GáLgŒ„Í íì¹#F§H¼>=^B—À±ÜºökÑ)ž~æ×ÓèØKðh Å´ž{ŒÐ* Å¬ ßë;)Gƒ§Rfe(}g VaÞ ô<ꊢ0=ØV‡.¢ú?‹¶оùs±=lÆ@ ä™"µ#¤c©FæP© @êâÙ£MíÊù·x‡„Ó\ëwÊ.'?¥‡LˆÞ xþÇGç¸(„¸‰ç˜ˆ¨=Æv¬ÄnPGmô Ä'â8ÙD©¤S``èò¢þ=^P•U 5=oÕ¦:þÕ¡¸“ŒzŒÀIÇOÕ¿-º(ȃÝihÍL[#êÿ²¯Ñg¿ _íÆ#Ï¢¥½¦ Ø–öB-‰òÝ¢ À¦\‘À,«Õj ¼F §4—g´ Mkªí£`DT:ëxîñËæ¹í•EÚç‹á2’tåq”£®haÿ•¶ûXT”ñ‰‚#Z¿tE²RçV¥ÜX¹ñä +wåbYÖl±[²Ÿ‚°õ³ŠîŒ,Ŷi‹¢À’¨ EJý,ÍõI!Õzëyh;¢ì È’ +ýc`-ÕG I(wVJo°®ïqS.‡Ó¢E¨u5ª­’ð›©Ù¦yE¤>­’S>kn—›ÜHªò¤5y²¨~š›Îsÿ8Ð} ÒC,¹ðm ‚ CíÊ ®U‘_H#âWûW#]¹{èGL.P„çê,öæ•ðcÁž^+"ö†ŠÅs°wŸˆäç+l‡Ó8ô™• +endstream endobj 435 0 obj <> endobj 436 0 obj <>/Border[0 0 0]/Rect[63 287.22 242.88 300.72]/Subtype/Link/Type/Annot>> endobj 437 0 obj <>/Border[0 0 0]/Rect[85.68 468.24 378.48 481.74]/Subtype/Link/Type/Annot>> endobj 438 0 obj <>/Border[0 0 0]/Rect[85.68 428.28 376.5 441.78]/Subtype/Link/Type/Annot>> endobj 439 0 obj <>/Border[0 0 0]/Rect[477.18 402.24 549 415.74]/Subtype/Link/Type/Annot>> endobj 440 0 obj <>/Border[0 0 0]/Rect[63 388.26 130.98 402.24]/Subtype/Link/Type/Annot>> endobj 441 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 442 0 obj <>stream +hÞÔXM“ÛƽóẄEóÌà˜ìJ©¤—#ÑÖÁÎKb¹HHp€Zíßð¿È%¿1¯{f@K9rªR©”]Ä`Ìôt¿÷ú¤Ø.^ÿþƒÛaQjas'Œ+…ÎEß,î¿[-^¿•BŠÕýB*‘ã?\¤³™VÂê<Ë•Xí9fÉrSi±ZcK#VO‹“Û7oE‘9qóúæ›oÄw}*]¦“ö¯÷û¶ÛŠ?tcÓß×ë&ýËê‹7«â 0tÉQH7‹Bû(*¢x˸¸ök*I‹ó¨ô«¿«‡Q¤Ë2³É÷›šF2›ˆ–®.éÒ¬LÂk +/õë‡ð’ò×\éRê*§[[T™I¾ëþÍq=ŠRë2•4a–!,qèÂüÈï4K™)UZ±ºå‰ÁçÚÿ!«*]:¬Q-U.ý°iIáŠxýúËÿüÕÿßɧ[ª¶™¤Êå±v`B¨,|íþ»¡þv·ïÛ-jµ1•Y‘ â}34}ºÔeV%ŸR¥ñÇf“]ðÊ*æU 3±þŽ­ '¥3ühé9÷ñ7¢Jm¥2’Þ_bÌOð€Þ/Ï)šûJ[eI‚’†üôÏó•Œúu+)su%ÔáêJsɧ¤¸ÐäÊœäJV– +—SÍÀã†uhõדԜ_®¤Eð5³Ô¥SAéVí öu—Ê5:Ö;±i†uOBÚ¶wÍ Æ‡Æ#H"\SxÑ\Å„?ר» Å|ìÛTR!TÒš«íų…xúùTæfx„„‡ØœŸ¯¿OAûÇ¡Ùˆñ€dÕ^æÉÇè’v á-•É  ‰’e1ͪNɺ©7Mç“Ue¥d\¥”¢°˜Ëç¯'ÿ¤wfúð +«§DN›Ï#yn›¡ÝvâÍçõCÝmñ6U6}H9 K¥(¸R:Fñ5™ŸRqßîš!•ÍüÃl‹gÉÖÓ6P´T*I )¥_Ê ŠëH:òƒzÇ3¡uÉâJš£b¿Ï©¬çÃQ ‡ãn#îä8f̨fI‚YÎ`Ô¤šVüœâç‘ø,©m´”m Bú3Xh ͰЀ¾(èþ>Äw\à»’ +½z~ïBÞ%ságßîÚºOíø nßð½jöù$zeo¹b)j…4Ó¥Áe=û&•h}( êr²ΣÃ1ËdIÈ ¦vÍÄLJzü9-%ÂÒ%)á·˜—íS˜ñoI:"Öbº´!æÆ´lÒƒPœ‚xYÊ*‚¶@Z‹.ŽÿŸ…F:Þ“MžÌÀN7KOŒÞ¨^”ÎãyƒuX Èùo¡KsþS˜Êëë3þ-«À™x~Ìï0ôdhDˆ†ïÚÊð*Rgå –»ˇ‚ÀzhB^3WE"™**`T-”‡ +^¢#)”èçÔ”\)ƒ_®TÁmž6¡ß˜áEìac~¦h0O6ÑY í·yæ”Ph¥Yɱ¼0Œ'4h˜3ªɵN{Íh£KUfÊ"%*“öœ'ÅB2f eØœ0ï3%cÆ\ÅŒÊ9 hà}á‘,O0ˆR.ØY@æ2G`í!çi~‚Ð[lì-y˜A +øp¤w ùР*ÿÏ¡áù1€¡Qù†NU—!Õøeh ïΡÉDNÉÒ`|ÏÛõS14üÂï¼*倴dóUø(éXcôÑGà¸ìŠÄU£fð ãg‚G¼çî¥|÷R_‡;ǯªË +õ¢÷°¼õÉ#Å'~ݧš–8‘\T:™àgVo.¤ÏXÉ‚ÚÔÄòˆÂBɹ +€«p¹-£"û&znrCü´’~/ҦѺ’Á[Ñ’“}áŒ&~c¯±)ªfç Ûh%-óï +Ñ{ñâi™ËÚ^oFÚTA)κ‡¼ä}³«q˜·‡õqßtãðeï¨åÙD'Ëã¢ylf¢ø+Ô~׌\Gèï•›ñ~fLàGÖð{ðwÁ8`bGž!Ù“+­ÇØ…Šê䓦þž‡^yae°ŒS[÷…eÑ°gF×I4idÑ`¸ˆ+QjUûCߺàO9sÅ‘šDusz΃©&y _}w8Ž¾½¾°‘¡×ƒ:PQ{*j2’~BÿÌ-NÇrÿdî6ÅðÜõgO"6÷sE¤Fàô™ß3U9…Ø-Þ!Äc(ß7\Þ’˜Z&=ÛìÀ*I¹ +‚&qȲ_{eà\ 2,øµ¸W†ŽVþ‹“ÈQeôÍ%ÉÔ3óÿ‘þ9çñ¡]36>pNÄÍ¡K ½ó Ì@ù†_phJž–›¬Sè¼ÓÑj×ãt¤"±ŸŽTk,¥HŽ¨ŸáÒtÑå× ÙÔÇ9,bCv:¿Ut~ËBÄE(§ŸÀ¢'ŽùLŽÍçñ‚û™.¯€ÔÙ@¥h“ÍÜ ´þùj†äâªûÅö‡î0<^žT‹LWÅéléÕÉTr½_nšû¶cÀ³ÊTÁ*h¡ôZ(ƒÞ²ˆ/À¡´ë‡©à¹½8ÇÊK~öu<vG®:3ˆ¨]½oÈêÔ"p7€ãÎu—•òYŸWjž¹î—Y8W˜„ɇÇfÝÞ·œÐ©¯nèºßr/Nã_ âgT½ +endstream endobj 443 0 obj <> endobj 444 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 445 0 obj <>stream +hÞÔVËŽÛ6Ýû+îRDjII¤´ÌäQ´H qÛE…F¦m5¶dHrƒAÓê_ö\‘²=ƒÁ ›¢( ˆ”EÞǹç\RÓvqóýGMÛaaSrª ¬°”*êýb³¸]-nÞjÒ´Ú,´!…]8™r©’ÊÐê°P°"UV¦´ª1Q:£Õ×ŧäõ›·”Ë‚^ݼzñ‚Þ÷B2Mºm_M»¥ÚÑ÷›ªöâóêGxJƒ§Bê"§¥–Úæ´z½X²Éœm«`÷}ïÅ2—y²©Æ0[x³ZäY‰,¬Ì-I“–eI2+”ÊB>ÖHgçïHTšìÁwàÀ0¤ÓGäyF¡œr/ ³bN™ã2šãšf6÷®FK+]òóq]ñL'£_‡ 5<I+¤Mⲟ⢾ÞÅE&ŒÈZ,uZ*~ÑsçòRf  +Ö§z¤_„+¤I|´2D]í£<Š15ƺÔ,›ƒWiþ/Òe)–|”K£t˜æ$,‡Kóøχÿ|éÿ×øù•k—:©¹rj®kÇÒàÚý»¡¾ÜïéC³C¸6 +ÖÝ@üà{±L­,“ß…Iñ§_ËYŒQNÎLr²h—®bw,´Î>è(Í'íé V¿]z„6*=£¡f&§y”áÇîàéP½¯†ÁTW-ÝyZûMÓúu@UçÐC~6“:6ºÞӸήEoÑ +*’ô’†±ýÁ·cؾŒû¶*eαDUÁÒßÛ¦èk3îÂnTT_ù6Å”è¸óÔ¬á¢Ù4€vÊ9 9ç2Óa=š­-f/eëŒèa'5Ò^ƒ”Î[²Xï=*ØŽU4} §5µ!á“ÀãpçûK²s_v×¹"ènx÷ûÆŽ8c5Eî¤Íç€/%RªŒ°4õi_õ¡BÙ%4Þ·ÅTÆLò š‘Tš–({:!-í…üù,7Î-Z›àø'‘cqn äÛzß ž|Uïˆqï5´ÌÊ+#.žmf¢HrÅ­@©flºVRät*1š ©KÈßž8ÎT,-:¼ei R¥žùKÊü`eò‡en”ɽXòû¬‚Šö î/,èÀø|Š˜ñÌ™©Òwúºk  {†%OºÓÔpÁ%¶#e[®uW·º®åN…)åugz^’ݸÜŒPPœ1 0,pØ +endstream endobj 446 0 obj <> endobj 447 0 obj <> endobj 448 0 obj <> endobj 449 0 obj <> endobj 450 0 obj <> endobj 451 0 obj <> endobj 452 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 453 0 obj <>stream +hÞÔXQ“¤¶®Êãü +=Bl8$ ¿9{w©KÅñå<Ž+uçv†Åf`Œ7ë”—üÆ|Ý’fwö¼ç*—+µUÀ‚¤nuýõ§‘b·zñço¤Ø«<ERŠ¬ÌEšˆ¡^ݬþ´^½x-…뛕T"Án²,âT‰"MâD‰õ~•`•8ÉL*Ö<$2ë»Õûàå«×BÇ¥¸zqõÙgâíÊ2Nƒ~7Tû}ÓíÄ›nª‡›jS‡ß¯ÿ²zµ^Ár#ÍÙ Y.¼H­†0£²ÒÛŽ`SI2ÎO¹µþ×jœDåq|{ØVô$ƒ©ÞÚÑн º0Î7ì+7hØܺAÊÞ©ÃH¦&¡dç¢Ð&΂·CoGl›Iü#,ÊXµ[et&úέXðNÉX©¼ë—ìr–yç“Ô:ÿ! £6L¤iµsrWøûóo¿ûÐÿßÅOÿRîÒ"–”¹Äç•àr'µÍÝoëê—m+Þ5; ´Ö¦PÆ:Å»z¬‡0JóØ?…*ÅËz?¨«Bq]å¨áG嚣ÊÂM+Cu牯¯„v˜Ðæ® ÿ…5A‹æYK‘­Øïþ(: /ŒŠg²ᙿàƒó%WÊOóuž¸/´ bìLHÄ_ÿ¾°©Mùklê2y¦6Ùe›‘Ê82¸‘sIáH/N¤Ñ˜÷xŒ¹M=ñ@ÓwøiÍÔI¦²Ì­àëÝ¡‡ã»¾mF±¹­`F±é»©jºQLu ºÕz^’;ºõ„w[‹›0Uà‰>Ä¥mûPj<Ü@1îX³{ãÎÁ±*mž‰•ÈIÅ‘âüŸrÿòâ¦Êb1ž·Rظ|ÍHLFf +ü©©CiðæÎ#“æâM¬tŠXc–´ÿ”ƒÙ»9–Í^ÙxñS1÷§wuµE¨¿ Ué7¿#`?†‘ ÛWý¶.g¼.¤NÁŸàs¡O ó9AdzÓƧÛXï¯úý¡²¾š Ñe¾š¶™î—Ži\*aŠ-&΂Ù3Õò“²??‡49™äèPc½ñ×M‹`ZáÉ ¥_)°þÀÇÙŒü©BÏMÍMßE ‡j‡¬ŠŒšuˆà˜_@{F³Ÿ½Y;8r:ǯ+Á¯)¤¦îˆŠ:*&~!®zûðRª¤WÙÓAeJß g˜NóÇHaEúÍ{WÚÅJÚxZêG‰¦²¥‚-|½æ®Z/ÓYªõ2!>"*wB† m_u!ò—Ç0ÊàTÕ +ì~CÁ"ºj®kpè«:ÚfSMlÜ¥ÊG|Gk;yÙÐV‡~GKSÕ´2°U— «ËPñëM->_¾}cWÙu—pUŽ>„bèSÓÁ)ð)ˆ×}¼!¦ð¯˜cs&4…+™e ‘¢¥IçÉ\Ÿv f„]v:(_àÌÄŽèKRŠ4#v9±Û™üg _éi63ƒ>\é@ð²›]'^ý­¤ÛÕâu¨4µ§D½W{ TŸ\Fy–¢¶#U"‡ºEX6(侫» ýƒëã©‚J¥ù$¦›ÇŸµÍ4óôÀ<ýq³ÊèOâ­yüy•>õ«Ä…ª`ÊeXDêqr—Þ¥Ø'ã›ûqª÷c(3œ >G ßpÚÄâh‰L¹Èĉܤ² Ú*럌qΧ ºªmï-üà*‰“I]œÌîšéÖV¥FUޣј¦¾oÉ2NÑU·õh†è-.£™ãåµÍHQˆé±x‚­Æn«k*PŒÇá'E`õ+¹3@.PlꜞPÞ81}Î.@_¨\? Îò×!i0 .“¨Ú±ç]Œ¢®lòdÐ6¼V9#Þņƒ;}@‰Îo™=¿A)‰þæ´ÄËòfä˜t<òOdZ’¦8ŠMÕ!É5ó…à”¿mï3–/©ýZv©Íqoû‰v‚ŸN±ôà&dzGpë]ca;Ýz4”ţؽ?Køå΂¬oIÑôTþ=àåσ]T£h{#î„‚:y߸ˆýšþ'¿$f½l:àÑâ}[ê¥5‰¢_˜ëPT@éÇ +ˆæ¤ÑkÑÕ„}ƒ™RrÎqaÅ=N>ò¼¤ý¼‡R8JCá0R[¥ÖsK9ë§ú qÆ;)Ž —HÖkw*W?“Œð5’ÙÁ[v" uá àÈ%C¡u0ÛöVh•±R—)Þ«¦®§’áX@¬„)õê{`ÿ05{k—vìÖHäègD”¦B¼Ç)þˆò@9kÊRzA–ç 7[ø3üx.Å/ë °áØŸiýµsÍö®È»~”ÁÚE`Sž²äO &'-Ê™)\®&7QìÉq_„»fõíf¢ò½xyÐ@¦Ó2u]W¤†éµeàøª¡#±ÝÔóZÛb‚ïmN‰ÏŽ²W‚Ñ‚„ôÙÃþ¼Á Øo(÷‘çA D‚µ›+}¡Œ•K)›¢“­s€¸ºÚZ8B.?¨$úŒÚm¯"d m‡‘X F#už-HiñÌu}[‘ ‹:ÒÔºcaY{FÞ aò´¨†Zžu†Íé@ O`¸éš©©ÚægVôÛ vЦB»TÀ'¹(›®m}3¼Áü˜g™Ë/ô5e Ô¹ýá8Nì#ËK{púŸcþ{ +endstream endobj 454 0 obj <> endobj 455 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 456 0 obj <>stream +hÞÔY]sÛ¸é£~ÁY !~æ-ëd;î´YO¢tÚqú@KÍ EjIj]÷õ_ö^\€"):MÚN'3mÀý8÷ÜsÉV¯~ÿQ²‡n•h–†‹²„éµfµ_ý¸Y½úI2É6û•T,„ð!³ThÅRŠP±ÍaÂ."ŒrÍ6[xeÄ6O«;þöÝO,»~uýÃì¶ d&4oÚâp(ëvS÷¦Ý[ümó8IÓI©P[K!“˜mÞ®Ö°cáÖ!nËaUÛìNÛ¾lê`óËêÝfG9Øžˆ8aBé<Ï™ˆ2\d½H”Hÿ=¸'T4ù¼Gçµý¼|Ï­Ç9ƒ/£Ì;Šæ(‰æا„\ýcÑõ,X'"城»Ÿ$ïÍŽX‰Ÿ¯‘p÷ÚŸÜKíöѽ¤è3”q°–:ñ™ÁsšÆ¹ˆømÛÐè<ûsfBqãvéÜMíö‡ÀÛ°†J¥’ÔÇ2Š¼ñ¡&ãÿÉdžë ÎÈ×*”ô³ As™ÿüöÿù«ÿ¿›¿bît*$f.ô¹ƒ²s¹“1åî?kꛪbÊ@(%ï)bÞ±¦3m°Ö‰ÈùoÒðG³Öb(FWN©²å”aøz:SH–²$M&ô. E%É·Îô=ðDÇŠzÇʺìË¢*ÿÈoÀ¨™þÑ°cÑ‚=l[TÕ}±µfH`¨ø¶Ð3ð›Ýù ü™õåÁг`ܯmŽè_¤€­úÒt¬©·†í̾¬ Â_ÅÄWk:íÌXÄS·~¾}÷aóW`Á›÷7››ŸßDºhNJ¡ó±‘±7Ò¦–³ÎXŽëØS i¸7¬¨ºf0÷’JäÑ‚›.~`)Ä„u§ûÎüz2uÏöee Å® d„;OR2)yBœ‡ÄD甡}7õa’Qzùl <)L1ÚòÑt8³¾/:0þÐì [C´ËÎ>SÒ"‘%ç€ÈÜ-…ˆãC&0ß[H‡]‰,sïßqsìY³ýž”Š\B¤ô™5L@7‚Å`]µÖR@áͺ[b-ÀdüÊž×´;ÀŽ,É—PÈqn—ß/À:o%¸³/Nmé˜q‹w@áMƒ7ÞÜÞ00¬ë[lP—%€?âÛþµKŸkÑë\ÄQùcå9o…˜&n†==Ô^JÞ‘€ü°åUÖPP® +­¡¯Ù5lZàzN;ÓÉØöŠ×!à3ÿLMPå/Ç +ÓßõY 0-t\òyùL¼8+¹?jƒ£‹´¾(ÄmïYqFCNšdh£gº +s—S(ð? ©uزùÜVMgëäÀ:`èlÏm‘Æ›j7Ù }"VCx·ƒëð6œtÅÊ=öª‘­ã*‘\†ÆýÑ(Dg/“ +˜·°üKÄë,5~1Æ!Èà/'ûjÕ—G ŸmAŽƒ +›ˆšß'.—9¤á ÃF`Zê6¾ÆÔbþ}yAEż8»Ö5—P•@8â…úÞÂêý©&æ’¤%ÕÎ,”|ûõ‹¦háo‹¾Õøkö¶a¤gÁ­(Z ÄÈ?ƒØÂZ”f?PÐy•Q1¡&Ç.€]¥´ô5)*Pèúå¢úuøµ¢²ävǵ†úL#<x†Q‹¼y\w/¡sVGו)j +Âà[ºÔcX áxa»É”ß´ˆ.Ïm/"G/4×I8ó`Ÿysć¢úŠŸJE˜Å3Òå¥ +6èçp8ЃmöCï#y$_aVOO;ÄâÀQݹ‡ÚM ÒÅVA­Ÿyzèžz(¶QçŒ3 œ)%"3¾”Ç£ÙQ/µ¶Ï]²û8¾õyF³q5×åÓuÃaÒ© ðÝĵ`宩 »'Þ~Ö^R"•#Mÿ½_Ðzi¶ˆêïïvû´$H`J ø.–«%XÅb|ô´¢,e]&Sù9ùâõ®FiÑk… +ãߪ^`ðX]àâû¥ï„2.jÜÔÝ%´æP ž…r‘#FýÊ€ùE^#ÚS"Ô 5—jWòVuÿ¼E.,G‘ô»¤‹)õɵõYÝÀ`£VÚÊvýÈPÍû Ý“p yÀ¢Å4„úéÑ€9”Ç<úšŠi]_˦&mÁ0CGÓ&SE®Ûn.`dú®_ꦊùõT¶†=cGNxs¢½¡l²d©Uùb=e)ÊÏfÔÏ;/p}Ô`´|f§šÚ¼í=‹˜Ûß ñq£ßø“¼ðÏ– +Mº6 +æÀrnÈÞœ’X´”E!ä3Ðz=§ªGÒÀÇç`ÄÿrÉdɉ3ÂÎð]R{à¼oئ `‡„?u£\C +ŒU‚Ó~„+ øUÑ5Õà/¾’ÆãùM|0ÀHûsÍ€x"Âd6d[Ÿ¤t`0{Ì‘%†mOE4@×î‘ÊùL¤ø”iO1;V8¿cô{[Ôì—S×êÀœ¿lýÈš/ä%÷ÇcUni¨ƒ(¢&%h.”õe¸ù`ؘˆª†’°SȲ3|¦Þ Rj,æmàÇg keÇN@ôÕÀ£îBå)8f6üpîj‘D/ë{¯â¨tÛŽà÷}Y•PÛç‰Y ,ɤ=ª ñe­'{ NœCa3KýnÐóñ[èËάcaA‚Êþ +ó™Á$û€Þ¦ ¨×ð=äüDovê}>€%½Üû¾{Üõœ©Ô·Ž»á7LºÉèÒÐvXÁ¦b[‡BÓ”˘Ҡݫï›Þ¼f“í4€s^;wüúÔ¶¦î«ç Ǫ¸ò™w·3á¢ø”¶8ø ¶Øî ;u$6ŠÊ‰ÏIÍ %ý\1œGEÖaÝ·ÆÙ±3N…ÆBås%í±)§  êu÷˜£ØaáÃmogÊÊ*[Ê„jŠYÐ’ ôÖ㸑ò¢îª¢‡™-(*¼ž{&+|©ŒçÁÈÿïŠ7‰¢6) WDï‚/æ"‚ÊÈ눳8œ½Öåÿ{$÷bìiHx‡ƒñk,ÿ¶ì€÷>õ6Ë/Üâf +7¶xÙIýc%K†–VZÒF> KSÉ·gŸÜÙO¬öÊ짩ŒÅbIíJè%c{#Á-á°sÅMuÄÞ¡ðrºU*âÄ~£ßé²oïðʼ ðeÿ +œV€F›¿x|Ç}×Á¸˜ŸZÈwñ`üŒë®‡œçz©OzŠ†^Ö•€›º§‘Z™,Lìõ·ß§Ü±|r˜u¥;dÖC‹P¼9_*€JàW0Ap· 0ê×&‘SwïYUÏ`¿å§d{}í<ƒ*Ö£*öŽé¡}wÐÅÃvñ¾mÖL;ékiùZFû+@°aÄ'–ÑÜÚLdñÂ`©•Ó“Ot;+yÙãðtÂÛC¿ÁäÊ+óWÑ™C‘ƒ8î•MPìU@ĺ”`™ú@`n0xÖ$EÑpío†¢p)/¢«k¸êÓû›¿Ì/‰RuY7ó¢ÞZ*§Y½ScÞïªl/é4gã"DŒG°“XG×ØAïÝfõ/‚ð â +endstream endobj 457 0 obj <> endobj 458 0 obj <>/Border[0 0 0]/Rect[373.98 503.28 448.44 516.78]/Subtype/Link/Type/Annot>> endobj 459 0 obj <>/Border[0 0 0]/Rect[322.38 477.24 500.94 490.74]/Subtype/Link/Type/Annot>> endobj 460 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/XObject<>>> endobj 461 0 obj <>stream +hÞÔYÛ’Û¸}×Wà‘ÌZ0¼T*^Û“8•xm¯?dóÀ‘( ³9&9™šýä'ò—9 IIÔØ•ŒJí–.°ÑÝçôé†,Ønñü·? +¶ë‰bi”±8K˜ŠX[.¶‹ïW‹çW‚ ¶Ú.„dþÛÈR®$KUÄ#ÉV‡E+<ŠsÅVk|ˆDÌV÷‹¿¯^_1Í3öòùËï¾cïÚPd\Í®-‡ªÞ±7u_¶Ûb]†]ý'){RÊeÆ–‚‹D³Õ«Å£˜LGd6ÀSm³¹[÷US‡«¿-^¯‰äiï®Æ¥Êóœñ8£ÇL&4³ˆè¸ŒRÖù1‘㜠gäK ûQ³0!w™ÿò·ÿùÖÿ_ãÃWÂN¥\r‘ÇUç°Úb÷u]}±ß³Õ EM}(¸:ö¡ìÊ6\ª„çÁßC©ðÇrÃǨEWN©4å”@/|= +‚õ$M&êaè(œ|@„Llß—ëâ®+YS2’’mµ/Ùº9Ü8]Hоêˆït°ÐH•3©åÒZ»ë«}Õ?°ûPÔGâ…ì@Ë‚Ÿ;VÕë¶<”uoÌå3Aš§—JqD2§]õK(bœ^Mi¶&;£gë¢f·m³.;çâM&ÁŒþ8ñºãuÃöÕ¡ê RUÎ~ׄ‚tå>4y.Cwlm¾Ñ—6Œ3¼= ‰×˜˜³Èù3H)ØìJç)¹yS„20ã­$LR³ •œ`$ £CH*êµÏÉ#›(/nZ:¤Ú²ë=¸„R˜vÑQÎÒ€£ó°]Y[ `tü[÷#ç£ûZ9{Çó§"®ôe½)7¬©Aˆ¾ÒœëIžµË³Ö®VMú´IŸ6ÔCG‚w¯ÛCb; ¤/Þy‡¢£|zôt,¬Õ7¿Æþ¢‡_\X*yo¥pFôN¡˜À°Ø”XS£È—‚Q…I2uCž6‘Û¡'³MÙU»šm÷ ÚH”¼q×åý<‘Y5ÈH t.H +Ž+×¼„7€³CºI®ˆ<äÒ0.ÉŠN¼!:ìVN>ڲؔ­-¢í¬”L,omÂsžgÓHSŸðÄÁh@ª"Z}Ø +4Šh² ñÂ6 ëš0¦?HúTÌÈÑ¢¹WµMZžx"ÜhaqÍPî°ø¡=Q-R,öÁØðy("rãŸCr$Tw¯ƒ.Xíé"“*ž§GGÏqÉÁ„%†!jȳ%;'³±Ê™Õž¨FÖ‚Ú +ŠosðÔzDcãÈX™dù[ìèfƒ ¢'J­5Mm…Cw74&ÙqÎDÕŒ#=GO§µƒj·“üIP€J§i}ß=n‘ÒG&mñÎød$ˆ„c¹EyÜéäiW0±„Š4CÄc?qF»®H™WWe/XR%¡.h’¹F@¦n"”ôkÛqT;Ÿ@04ä Í™ØO^™)ó݆¦k„(:ÆÑ4-Äíanö)fs:DyÚs\Ý!…mIdÆCmU&{Š«ôL­<«„«æœf¨èªžg ©)OM婃½4æߘ…žQZ?àSz¶Õîðv7Í74¯ÏÙµO²Îõ£z=¸z¨ÚvÌŽplˆÓà={}'¢ÞÛ6.l7¤Ùr0qJ;0•Åú§ù«Lâ/>Ÿ&’W²žÝ6hŠ×¡Á>”AiÑM°õô\:›Ã¬z­ü„+fÅÌO6PM k K8Ê!äòã¯XSÓËÊ\A—ølV°@Tv`JpljÍmTY™ÜšL°ˆ††÷s‘]Ö̃zgnÏ°®™”ÙÌ£èƒYóû“˜>i½ÂtcKn:¥¦Ök_Í–÷>t… Iâ÷-O6šèÿãì|Z8{@-ò¶Ý÷ÅÖ‡Åó7É^5ðèý“À!1ú\‚îͦTÂâ$¥§`Г—€ÖspH’¸/€Ãí³Ù±–O††#r–²X¨§ÄB`öº„­]Êè°æ3z”NctDÈñgêBhùe@Dé·­ wà´.â§Ä"I/Ba–f*Tt”Ði6ñÔ%üüÒ,|80_„ÝömjáÈ%›~ý”éwjŽé—Ìó.¡™¢N%ÇTóºS{zëç´vÄ­Ïwwð¹°Mz…Ô)Okv›¢{ üê€9eIž¾OÌb×.âzÅÈ…f1ÈdÑòH·ø nÛ7äÈ) Húä5‡Yº‡©±>ÎUjŠqÍ"q&SZg\%LÇôÿ‰:G¥[]Úåÿ:ç±MxÌƳmª³§Jõü¿Ãæ¸ñeLÆd#'¿¼5wBÅ5†x2‰á;ø‘þ–Ð(Žk€™Çƒ×æ.‡é[£abö`®ÁÕ[û]¨+ИÃÍß²œ-é7³éïŽÁÕôeO¸zíþ‘v.æ c×.°.*ª›?æY3Yœ§Ðê1ÞÐòW$ÎätËœüë2G¤1EÔQÙu>:ÀÞ/þ-ÀÜr%* +endstream endobj 462 0 obj <>stream +hÞb``ø £`Œ@`Ûëü +endstream endobj 463 0 obj <>stream +hÞì–Û +ƒ0Dûÿ]¨ÚD÷’QÕ}QÇÌÎ^Ð쉻 Ñ¿ÀH´Â¯OÕÁëj¥]Ì/Q-Í•Eói5×xº¤Y#e [o=¿g +yÛ Ïðg‡ð„/ùNcg>§ë'„ ù…§¿Éaˆ$fÚŽˆ'!ô‡Ë—ï&:žÙ*ÿ9æ¿;Q|¸¾õÊ«‚/—ò‹¡§ñI#ÏÊßàÕþéVe6F1ÑÛÒ:—ƒþ=•üUÿ'×Ï&——A7Û +endstream endobj 464 0 obj <>stream +hÞì–Q„ D›¹ÿ¡MAmÝí05±?D:¯Ð*ÀgŸ=ËŒväd†[yÓòOã±2_Âx¤eð@Láãywr?êY|0Oã{‚ÇwH>’ïÁa‘i÷G¿ÿjÿ‘ûŸÞ¿ÕÿG6€A `д-À•ë‹ù‹õÏÿÞ÷Ë{Þbÿ{©-Y–LפÛdûBX¢©ž¢¬“nÈòÎGñó^I¾-í7¾=¯_­‘›¬®îÚ9ñ ÿ?ÆÅÀû0 0ù¸Å +endstream endobj 465 0 obj <>stream +hÞì–ÁÄ D_üÿÞnbºYKE.Ρ—f€míà \éJîOŸ …úUíü²€±þI! +@§ðÉóQø—y·§ü ú·ð¥þé-‰íÏòüÙùÝ|‰3ýˆ|'ô"ßý›k€÷4$æØ^.YÿÝ“\î¼ýçi‘g ÌêpþX¿åû5h¯üL|RgŽÁŃ¥;x©Âc¢cüøÖÛƒî=*?ñý¸ƒ¯¼¿håïσ4> ÍÉ +endstream endobj 466 0 obj <>stream +hÞì–Ñ EOîÿ´ÌŽhÝy@ãšl$¥§-…’¯8?Û,xa\â)Ï3l\sDzvOÊC†›zsÕ‡á7*+úüëþÓý¯ï}ÿMƒâð>stream +hÞì–É! CŸòÿÝEtञU‡90rˆˆØØø;p†Iwpÿ,âs€‹ËÇJýÿÉbÀOlñ²†ËŸ#ø†þViá×ø‹ýKÉðìIŒÏÅ ¹2÷‰~„Âá·äÆùÇ4”ÿóÞÁªßSäOü'ßÿ²å(‹C‰ŠC®´ºöó×v~jZ´Ÿò_O1•Œ½vŒ®ä,—ß/oÓZ¿»e_ýxYÜŽ'Œí1°ùÅ숵OÐ+N r[Ñ +endstream endobj 468 0 obj <>stream +hÞì–ဠ„ïÿÐý‘%z5èV‹-Ûì>TRõ·ße’þÔUñGB!Sç±´‡Ú Ä)¨kùYžä'}–r~ ò¼G.ðŽYÁ÷Pêü +;¿dý!ëYÉÿ‡(Å‹R¼(Å‹R¼¨.õOÇOçŸ^ÿÜ_>pÿ`ëßÛÌâ³Ök[ì{'Ã@ÿj—`~ÖÄyëìý·¹x?ÿ±:ïS¶§Êf!‡ù#ίßòt{߸ó7ÓÍ +endstream endobj 469 0 obj <>stream +hÞì–у Eoîÿô2  [(§.>ШĖ{ÐZû©&­Å~ô©.Çò#½›!½ŽÆåzu¶ÐHÿñ¶à¹ë©™Ñ÷‡Uè± þ:¾ô-ÿ5Gí¦§¬Ÿ5«-Û”ÊXD?í è™d@f™d@f€;LJïó¿?¬?XÿpþÁùYòÖ¿µß¼ S¿@f€d} 3€Ìùú@lúݳØû¿í_¶m›µ—Á¼Ï +endstream endobj 470 0 obj <>stream +hÞì”[ƒ@ G¹ÿ¡+U¥ÚÍ‘ªõ7“M쳩ÿM<‹šø¥qÄÉUÿε¿ÜÍÖ?JØ¿H­ƒ=_3ô+jŒp§É HXýnáBêñÕÄ{ÃÏq; +ÛÅI Ác +ÿ"ÊÃ}*ñ.Žýã¯ã›#>…'sAC>áûk}I]ËÁülÿÌ>¹ÿWðëéôOÉGå·‡Ðq‹Üûkâe‰ÏËó‹!È<'`SS·ë!ÀÒ +× +endstream endobj 471 0 obj <> endobj 472 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 473 0 obj <>stream +hÞÔTKoÔ0¾çWÌ1Q×ÄN8@»EE€ª6pA¢¬7 Ê&+'…ßÄ¿dÆyìvÀ!´OÖão¾ùæ! .ß<¨‡@+0<ƒ$Ó 88ì‚×Epy#@@± „Ž? -™ÑË=¦Çdò쳧䕿ÄìÖÜsŸqx™dK¢DG +¢ã-=¥ú®FˆbÍLøñ°-Éáh·“ YØEL‡³ÛûÙÉU³“œN.Ò(*çô!9ÚƤ9KÂ;×O”<|ŠLÆdhg”aÑw3> +ïeå$¥”Ú,Z&ÉBž«‰üyÅÆÈcÉÅd¦i¢ ËùçÇ?wýÁ×Oª2LPåøR;»¹v"j÷w©¾j[¸ojìPÊpŒKÃîí`]+Íòð[$þi·Ì3ÆaœÇÉH?NÆ/v :j¡ŸíÅÕqØ?ô£}4æëzPŒ‹IjáU²HâÑBÛW%­¨ä—Ò˜tÐ 0ú»Êð{$¤ŸœŽÐMz ÅNÕæb^h¸=vkw#T=æ.%]gô;êìðÔŽM7ÁpfÒ˜cÑ„Oª†¡-ô±ö”[ÊŒ<ñ?èäè;ÛPîp]úhô&VŠaО\G›xzÂr&¼oœ#ºÂàj •[v[pý8©Sº…®ÎÎé’á[,´Pmƒ†Û‘Tœª‘LÕÐ,IÒ¥¸†×Êuýø¬lØ:ÉyŽ³áûx<­Û¬ª§.q5õÂTÈ3e1T³>¨›v •m[æ5’EEyóti˜U\9OBÝÞÈ^Â.À47øö +F_"âB^½nŽûÕxøs,…^›ßbÂÚ,ÓóS€®à¦U +endstream endobj 474 0 obj <> endobj 475 0 obj <> endobj 476 0 obj <> endobj 477 0 obj <> endobj 478 0 obj <> endobj 479 0 obj <> endobj 480 0 obj <> endobj 481 0 obj <> endobj 482 0 obj <> endobj 483 0 obj <> endobj 484 0 obj <> endobj 485 0 obj <> endobj 486 0 obj <> endobj 487 0 obj <> endobj 488 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 489 0 obj <>stream +hÞÔXKsÛ6žéQ¿G²1xƒ8¦r’I§í¸ŽÒ’h –ÙДKÒMÛÔKcwð!Y¶ä>¦ÓñŒ@Kì~ûø+F6³ç¯ß2²igZCs"sM%›];XΞ¿b„‘åÕŒqBá–›LpbÍ('Ë›…S2*­ ËP2¹™È÷ ¼š%kwÕ¼ˆGâB1c±8€f´&™ö€{>œ”¨Ö“3ÏxÖa'à˜Ûb9ÄpNŽRùåtPƒü˜Ì¨·®m! l +.9ð ÞÐƦ5îï}/rSpê’ócØ€zN„÷Bµ¨\ÑLðHyŽpÂÿTœ ^ž”|ƒüÈ£6„ F1ùND´{&?‘pq ‹Èó'åÜ(¿èjïà¢qVtÅIÀ<9—CŠä@2÷Ç£±™™CˆÌ)ˆ 4O‡„=3`y}‹†fC,}œŒÁýxìn×´‡òMý‰ßË£°¤xRÒò#9¼ï#õb½>O%ÃÎÕ]/SÇ$Ûo\×_ ý Ó‘‹G‚Ç)Çý=u¦¿“<Æãx¡?)1ù11G¼¾ÿQðó§Åöæv[»º´í.ô:HU¦.Ã…;-ìÚþHnMä¤SaNßØìë¨ååo¦Tƃ 7ŒûÊŽ‡õ`ƒWÊ'ž¼±GŸXy×ÓÎÀ ™ m\’LYkóƒ™+pª`Èß ô¡‚• WÇ@*&žròÆ^/nS¶óa’Ó ™ +áWcz«/’‹¢ª.‹^aUòq'ôÐ[0ÇßzÇØCŽÑ÷ï5þŽr€Ê$þþ‘Bÿ<êþ„ªŽÂû™~.­îÔsKݘ}˜=p¹/òL>Òb9L1’ïè>šøGQSõÔÄŸ¼1º?àhmr‡ßEl“‹í]=erLt¬3 $ìàÍwôžV:bïÌÉ9âfšïÞ"cÒv¼ñ¿83N¼‡]‡ÀHqŸô¦Ÿaâ1aâÉH„8_ ®8ÁµÃø½Âñ{[’Æjaû…EãœÒÏK8«8¦©0|ª¤(ýÛ&ròòþ\Y…©Ï$UŠM×…9Ë!üá—˜?,»¼q +endstream endobj 490 0 obj <> endobj 491 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 492 0 obj <>stream +hÞÔWMÛ6½ûWÌQDV ?$RBÑC²IŠ- ȺŠ¤­MoÔØ’!ÉÝlÿQÿegHJ²×»Az(ŠÂ€%KœápæÍ{c ·‹ç?\K¸íFƒd…- s‹Íâårñü ËÍB*øÁ‹,,× +¬\(Xî½p‘•–+¼2ƒåÝâCòêõÈy—Ï/Ÿ=ƒw“×I{ÛU»]ÝÜÂU3¸nS­ûmù#î¤ÃN¼Ð9¤’K“ÃòÕ"E´ÏÊß©‚|{×ï]µv\»á°‡ªaËߥ·dFVr´ÒÒ[­á²m†®ÝÂûö0ÔëÉèõr‘g%ÞðÜWº,KàY!DÒ`·f|ùá*;yé£ìiÿÓ3%¯ô)+_fŘ)Š)2eB®~ªúXj¸M~Þ¯+º“ÉàÖájºIøIâ²·qQ·ú©p2g©Ô¥  +Jkó’gÉ»® +Ö‡Õ¿0[p•¸è¥[´Mô•óuT ¥Œ‹‘ecðB‡àÿY–,-p2UB†Û˜¡pa¼~ûå?_úÿu>ý¤ÚiË%UNŒµÓS#É<Ôîß õÅ{­¾E„ZÄÚÀ$Ï“;·wKµáeòSº5÷c3Æv²Ê·“AÆ9'#ÍË"ð‘¿ÃåÆfÜ÷˜ð0¡ñݦ»jêÚ}â™™ÑÈ<³œ,vÁ¶ŒT&"•]5,Í0Úz¨«mý'“öŒcøÕC4Þâ™”ÂkSmÏEk*ZÓQ’5žŸùÅ7L üµuä†Oá©¢¶Îçmrj'¦²Ùç>–ë„ïLj›´ØáMr`ӇޡϺŽ/ò™U¬|Hn܆i$æΡsäã<ä)UHÛE ä‰„9Í.‘ñIv±e>oæbY†íCà }U5>ävø„”ëC Rq“yRégh¡wúØnoª“¨ÉgØšÕP·MïÏ)}äÈŽEŽ ¡´T”%Ÿ¼1† ÄLÇ´È1-%7(Q©æ*5Âd\ß7Cõŧb¹TaiÉK¤€nm9‚U{í¤rxÝü Ž`í˜IV?&Ù鎠>×…ÌL`¿v}çó¹°àGN—£ ]µ¨E"z¨³€x5Éì«Î£¤þQz×°Ú¶ø“TXæ¸èÚí:TOI”Êü‘òÉ å’þ.‚nlg%ŸŒL¬U½vï¢ ëš ´i¬;uɶ~5BðJX.ó§Ç‹R'­¡H~=Ñ %ÅQ›~µ)âB“>b Z3”fx~ž2„ξŽ§ø˜i  +xi4›¼ŠýP¡E7­þä 1¤‹™4MØ÷zas{عf裱 Æ8M(®u +›•ÞëTuOà•ksž|*TÏ˶ݺ +qpµ,rÓ6©ggT¿1Öf¤¡™C§"³L&°Ç)”)¬±çïd×#`œ‡ùèÖs 2²ÆèÙ›¥ù¨ Qz€N¼Eq·™ #š#ôÓ›ªwkصk÷] Â»cÀ–*“ Œ†¼!P"ÉwÕ<“EzÅŒ w5Êp݉—!ñ¢Q2D¼FFæ±9½D9Xµ»=ñ¦ÞÖÃ=P©°BâH[¤ ÛÓ\À“oZR¸Ì‹¡Âëg–â7ùvL³|ñªÕ°½‡Š(ç Å&çúî9ó?ÇØ1ÓÌíE=ñ‚qÚ‡0¬²–²±[<2U\"úº§)Vefj÷·6jø{‡Æž6±<Yu] ÕD­¡æ8T«X¶&ÂÐÍ ¼x«‚‘?ÒAvdÒ64¯.‚jzšxäì¼íñ¹ÏÓÍó“nK> endobj 494 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 495 0 obj <>stream +hÞÔXmoÛ6þî_q©¶fù"QÒÇ®I‹ì¥+w؃b3±Gr%¹Yöö/wGR’;]b†¡‘wLJwÏsŒ„ëÙó×ç®Û™ÑŠ âÌ€ÐØÙÕì›Åìù+ W3©@à2K¹VjÁ…‚ÅíL .â\Ãb‰BÆ°¸›]°“ÓWð ^>ùô)¼m"™qÍê릸½-«k8«:Û\Kýºø=iï‰g:¹äÒ$°8™ÍÑ"ùYº'•‘mgú-V¶sÛí¶PTÑâ÷YîÖ +ZF«d¿JK·j/ëªkê ¼«w]YÙ–.fFñÔàö O p¥ó<gBćûˆðpO>"z4A»ˆÎ€]îË?ÆY”ÛĘ2ªï‹¶ƒhnxÊÞoW=IÖÙ•€’ÆŒU7,Lû!Lj–ë0IùQÈ$šK zQŸÓ4ÉyÌÞ6µŸ±Ú-;ø)J3®˜ VÚࢮ‚}<8w,‚ŽB)“ögÇ}ðBûàÿ™çÑõÿk|x¥³Ó)—tr¢?;=Ô‘LüÙý»¡¾Ø`©•×˜¡)æZIž° ·µM4׆çìS¤4þÑ®¸‹k1”Sª\9$œC.Ò<Ï<¹'œnÒ˜§# ‘ÐN…/{{ÕYP±,3ò­ŽS$0ZÞçu@É­?ßÚeyUÚºµ¢ž«rc¡'œÞ‘¦úÒèjŒ¾XqxQEKŠÝòØl.‹e$q-»A›nãRð}CÉ`(œÓºè`]DJ XˆYL˜EsàÒÚ +ZÛAÑX´Þ›Ë“äadD8Êmi³±+¸jê[¸+»uYáÎÊÖíh®%™'`Wóbò‚5ž6#i4ƒ³+‰ƒc[4-B„ö|ŠËcȀ̪lÓÔMë¡x†¦p“%¾Æîq:Ë›Ž‘ömt*‚ò4¨ ˜a +c ÒÌüø,ëjUv%2ܲ^Yç&w^Ë`w® ×é¾öLÎT« Ð;‘Ž™ç‡þ¤c&ZEÒÄ™QL#Ò)Us5Š[:¦êù}Õ¸D],”ŸžóÜx%¡ÌÖÄ`²¸l¥uÉzÁʪƒ• ó¹þyà3œ\ÌØ«³ïOŸ@ð{šº™øì»`t¬(ì™hæï™Ý aF-[b$ë¢yýÚà +y@©üˆ+r´±oh(níË°î¸K,ðò}K›oNŠ®8pŠr¤ÒôÀ©ÓYÖÎÂücÎΞHŒŸ­x,Üã&ÀP´¼ßüPµX8–Ÿìo9—ºÏfWkìCäÈ#L§#MO/°±Ò(¸×»[[umÈ53äšâZ‡lv÷ç:åB®ÍKò̧üÈ€lë’ú6@j+*,Râ·û±0X’«·ÈTÎ;IÂ8,¨ö°ÄëH±Ýy†uLÒ„št6ÇŠÁfœdÃÞE)C ‹Q*v æX ,þB;¬ÊöÆ“TÝø@5×É‘ ÇI`'Úg¹EŽl;Üßmiã1†1¼¡Íjß+ݳÑÇ]ÙØAÒ© +¤#±!éQbë[ênÔÜë@Ž\C7¨À]‰¼yi‡žäC°ÞüÀìΰ ÁŠÐ‰Þ‘ªHV’Ñ…;¡§þCÑzƒPœèÿ8ͽ¹Ï+—€>ÿâ<¹Žä ÖúgS1žÜ)&‰øþÍÙÏîT+4»–®¶$kˆ±Ö{%zð\6,ëÛíÆv” øÖØMÑ•% j¿…¹·0 Å]Š ÿmyÕú –‰ ŸÁá–÷û䦮»=ÑŸ6´ºû­¥bÉQ9â9éÑ6£sâ#ä"â!â /Áœ„i‚ùÝÚ: C4j9jñÀI.±r¿‡‚Š…œƒw¡x Fx{4„¸äæ¡>iï”I¸É¨œèù»;¼"ÿ;ò¼ÉS:à «·ñ º‚²£õÍ·(ߘXgå + ‰àçÐ÷6™<Æ¡­f‹Ð'6þŠºª¼ªËö–—æ¾!ßÔõ `•»¾„œ>ƒKª÷”í"üÕ!=¶Ôh!ù†®%æ"Ÿ6lB½->îlªdÔù}¡ ºyˆ[Úóø¤r ÃÈ4»!5 àŠív +Ãq°‡ É>߇+,Ò[,×ûœˆ&9ü‚ºfè?;üäÉ­nÆV-2¯ôf—뢺¶Ã‰ú +Bh‹†»r šò0À…qÈä!|6ßò‡ëîø¾ŒÐëjz +Kg0,¿~ÄrÆó|Ò$„f¡2ÿ·DÊIËZk§N:2æ®aÆÁµÆZQM­í ñ“ÔO¦ÙÁö€¦» iýSÆ>[Ó•ÍjPW>é~æ˜`ˆà×uÌoÂ:è£ï?Õ%Ö5¶Ó#}¬wþêFóA秸Y|Øùá%øo’§” +endstream endobj 496 0 obj <> endobj 497 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 498 0 obj <>stream +hÞÔXÛŽÛ6}÷Wð‘Bb†]7W¤hƒ`×iQ$}P,®­Ö+¹’œíöú—=CR²åÍe¢(Š,J"‡œ™sÎŒV±ÍâÉ«+Å6ý"5,“9‹ó”É:»¸^<]-ž¼TL±ÕõBi&ñ‡‹Ê3a4ËŒR³ÕÍBŠqaØjT1[Ý.Þóç/^²DäìÙ“g±·]¤rax»éÊ››ºÙ°×Í`»ërm£_Vßa'ãw¹IØR •&lõ|±„EÚgíF:'ÛÎô¥-+Û±+;ö¬l¢Õ¯‹Â­•´ŒV©q•QnUÅžµÍе;vÙ†º±=-z±Z$qçS‘¤LhSq.eìÃj‘¥ã{ÄGèxöá£è÷ᙂW¸ /ã|Œ”ób:™N}¬¾/ûEËTdüݾ*i¤ø`+?`5]sÞD"åaÚaR·Þ†IÚ_¥J¢¥2…¤cœeI!bþ¶kýŒê°ØQ– Ím°Ò‡-Ú&ØGæ\^$åBë4“Çãá¥ñ‡ÿ‹©¢ˆ–9ö(–Z*?LX”ÒqÙx}øå?Ÿúÿ5>ÝRîL&eNŽ¹3‘Tâs÷ïõb®Õ 4Ö†H‰„÷`no»hiRQðO‘6xh+áN 2:eÚÑ)…â|EŒ01ÍÒ!r¸LÉKé¼€îÀqs¸±ÍЭI½!€[ c¯ -ãU9”¤ “ )LI1ôbDƒ«½]××µíÙ°µìß–{PMAüS]ÙŠ‘Iv]0¢È½nDŽÈL¤9©ÖÍQ¾¤W.{ݽ²Ã;Ø~~ÿx'ÁHòQ•gGUAf.í€ÀÃ!ÍkAÁsJ@Œ‹ðó Ø +oIz;/½¤æ4™küú²aí¾üý`Yp7ñ‡¤­’ ÍræWýY§?r‡çK“#=¾,LB$Ms2Vœ}[SM‰â ö˜Ýnëõ–ÝEªÀm{`½à•žùá(ùt¶î«/„;E‘LhHÆÈ +ö3pF ÇFk„6k;¶Þ–Í&DCIaò“µRùµcÐ]”Y9P5CìS~ç×-izVU¼wÏœHx .ÝXvëGu„Ÿaë²:w™5'6s¨=À÷Óø«<¼:ÛH U|y£W +²D_âwÒ„h·Óº$s¾Ûõ‘Š@Á^8(£¤‘¶h¼»;™õÑÊ5¡AóßNÀKuÕ½ìZjˆŠ:oC’©òù6ä$iXK¤¦÷;é`Âa~ØÖ]ÅÊÎë‘ðnQXúåK#ôqÓ첫»f(ÿpKV+í×¢H}ŸAj5²B˜8ˆˆvˆ¥Ü›Í‚ÇCùˆ¾)Q±) Q£@å“mBÌEà¯"MÍF¤©Û+#C¿]E9lp4 +—7v˜÷|3 ‹ÁÇQÐCÚÂ/ªªgûˆvAZ—°r±Ú;]âÑŒu9!Ò©å`Y†z]ûikgŠ­KBK0SœÏ)ýãq<˜€©î‰ÀÕ㣑]Ù÷G:,5zfy®_ñtª "½Sç á;P§·B-«›ëpN)x1^yÐÆüW\Ê¡FÏF;ÑÞ.8´Ò +üÐüÌÍ'#~º;”–îLGÿF´êxtÛy¢xƒ2"oû¡ô)„´Î"=Å(ö=·%”³ªEulÚÖ~?Ô°êEµ*>çXJ–š~Ô²ªj:}¹›è㸟ò³Ú*ÿ!ƒŒNè gΠOm2H +h¯Þ"Ö«Xþ€"Š`×Õ¤s8“ú" Ø‘D.§W-u-¿¥û”?kéªùÍ> äÃ6þnxã—Ù©¿ù¯t’‡,Ÿ0+÷Q~½iÚ9Z·Ø¢¡”ŠôðÉ)"`”ö‰Gà¥>Wv²˜eÞ$2%ðÁub„@êJgPüìSj(z—ö1&3Æ7¹iÙ®Eíü®3Ȩ,°‡(ØÓ;7ÿò°<'g]˾¥ +Aœ<‡NüöÌ0BÞ5ŠÎ¨$÷åxhÛu­k9àæî)ÒùoÌQœÉÏ÷/¡äk¹2"îW3P5¤×#¾Bÿ2çë[Š’;3cŠó~õ´ç§Ãù ÄÔº 3VÂzKøòâøéZ—s^–­“ÊâÞ—}~ÒªÏX­Äê‡Z%ô/‹©³þ¥ÁºÛ °x j÷ܬ[A·Ñ¤…ÒYýÊ[&ŸrNö}2ý.o¾NÙBNŒ=~Øœ„ÿ2ˆ38!¹i›åŸ´Y µžm1±-æ;´åõ5°>&7ÎïÉ8<¿ÇÜÒ¹‘8YRTÇ 8ãgÛß }[ci +endstream endobj 499 0 obj <> endobj 500 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 501 0 obj <>stream +hÞÔWÑnÛ6}÷WØ‹´Â II¤ôØ¥IÑ­‚Æ04{P-ÚÖâHž$·ë'í/w.IÉvҥ݊aD¤D^^Þsνג­ggϯ%[÷30#r–æš%‚uv¶š}·˜]J&Ùb5“Š üá!sÃÅL"¸Plq7°ÂEZ$l±Ä@È”->ÌÞFÏ..YÆsv~vþä »êb™ó$j×]ywW7kö¢l·*—6þeñ=NJüIT/Ë~`ñ\s½ÙU%d4ØÊXMÏ¿üñŸ/ýÿŸ¦„]b¸$äĈ]2éHf»×Õ§[H­^ƒ¡\bɳ¨‡p{ÛÅóDó"z«/mÅÇÐb“QNN ç‘\„…Úè£<äxiè–ÂIþúc3”¿“ÌÏ å·¼Ð^š4 ™æIJ&H’.½êf`•u´êžÛ7i?œ·w»¶±Íð#^Û¡¿‰nâ»FÏ^äÞ97"ã¡È)9ó"óæ+»êº`ò¡pJTˆG3œoÊî4!ž\7Ë‹pÝùd- OìnÖ¶gÃƲ%Y2ˆn¹D¢eûÞVlhYÝTµ;@f<-äSþº^–ÒC†œÍ–pÓ6~2ô0ü̲gñ<Åà"FÖ¸d«ÚO·6–)ÞðÓÍý¡tãCvÿ»xe(=ðzßÖ«˜)°ÖGó&BŽÔQÙyUÀpkxš™Ü‡@™hyz45´ÿNXÓ·O’0-hïÏSÔ»yp½'?úí7#«*ž$ÙýƒóD #4"Ô‹ë]Ö«zÚßuÜpp“üÈŠν°"NQÌ’"”°^ÆŠÞ•ûíÀêž•l×õõºñœ{»‡-øÝDþYˆ_2Öã蛓 ò£Û¹Ë!¼ü4¾¥”ŠR…dN„ôÚ®ëzÓÄR íÝ•@ùór»}‡€(‘ÝöH+ÉÕ±´Æ\™Žuî‡8•°líaº +–è:¢[Ö®Nòx„#ÃÔ]‡FÊEvÄ52-7í»l.Vv–5íÀzß\šìÄlÜ0äìg ÍIÔîqrC:‡! ×ù&‡4K¾dä:yîs‚u0EVÊ÷]æ”vIüÄ%©õZ¶M;s¢i„nâÈó:„¢“û­ÇÒƒÞÊ{¾¡Õ»ý€œ±µì!”7üCæm] Ü!¥¤^¯mÐ/©Jf÷Åá¼TÞryŒ€‰n9˜xôšJÕ"ØáÞHý÷»Í)©'ým_ã~h4‘²è#+«Gsž?ô'd&wѺmÊ-¢3¦‚O&Foåë£*’ÕTkþ"5¤B%¯ƒDnQÐhé5•e‰1(Q”xÕÕqBu,F‚C ëåh«›{=º£(åã¢T*Ÿyè<…®<=R*Ö½“ßðÚI/(Ë3òUÇHM}ø¤¦Sž•±²+7¥Ÿ¢kIñ°ôb /è”’m eP iÏ)ÆÕPëäDü÷¬âì+ ËÜ|--¤.>G àÖ žž xíqùâåÅ·÷ §’\›ÔŒ¿´²±©ÙÒ/Œh=®þH^Ü«²•R‰â^äÿ¸šrï \Y?ZQÍÔ ¢¢R c"‹"‡~ØÔËÍD¤ÏÐȲ½c>¨Cm×- ðÝQlç¨$òõ¿ +0Ü„¥< +endstream endobj 502 0 obj <> endobj 503 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 504 0 obj <>stream +hÞÔWÛŽÛ6}÷WL  61—¤îXô¡ÝK±EÚ‰Ó—uKòªkK®$'›ù‰üEÿ²gHÉë‹´-ŠbE‘gfÎÌÒšV“Óo_jZu“ȧX%$ùŠÚbRN¾™ON¯4iš—mHáÄÒ7ûJ*CóÍDEª õi¾Ä@é€æo'7ââòŠB™Ðùéù“'ô¼õt"}ѬÚl³©ê]×}Ñ–Ù²ð~žK¾³$?¤™–: +i~1™‘í,íÈ$Œm¡_Y^´ô²èw[ÊjoþË$µ{oã]zÜåk»+§ó¦îÛfM/š]_ÕEÇ›.ç“0H|$ȤñÓ4%$JŽ†ÈÈ8¿ƒi‚GßA³çÛ gO^j)K ƒddÊF±÷ÌDŽ«gYד7‹d,^móŒGZôEîTñ3µ'#1,û~XÔ.o‡EÆ=•½™öSÅ/&Â8ŽÃTâyÛ¸ùnÙÓO^œH#Š¥L4õ€ÌÙ¼(Î…1Q<&#Fç•ïœÿtšz³6Ò™QÚ Cò"v—ÆçßüçKÿ¿àûWÎKÍ™Scîü}#éÐåîßuõë5z­Z¡BcÔZïiŠÛ­7ó#™Š7žñ1YäÒzŒfÚ)6¶"(αù2MœÙ–Gq ã5R2Dª\yQ¶¯jO+ÜuE~ž­×¯³¥géî¼ÙÕýc zP;†bÈ›ÃvìʼnÃ}íA &FgjÖß„‘;¼n^Cš’–{câŽZkGR…Båïq‡Žä €YOY Ô¦§®è%Íy¦êœëO]šABl‡,ïå2Ž´ÃkÞfžF{3÷…‡´lê®G0Ú SˆÎa#8‰pY÷ + âAéÙÃWµ ½ª·»žÊj]ÐkçàΛ!-¢‡ÿŽ篖‰>?u(àH³NÝÑàG$ªÕ +•þÁ¡Wu}ær•È48y¯¨Úú$ŠMQ÷”7ˆ™¹k‹_wî„Ðñ1ïÊx¯@5ŽÁ÷w”åyÕWM­G.R™š£Ãé°Ò²vµcˇ!‡²êZêK>æQ¼|W÷Ù={w:Ÿ·†"wzðEFàÓ!ŸÖqæ½?¡Ü‹„­ïƒÊæšÆtÝ/Ä›¦ÊÞc?þ¤Bä+J˜FkAkgáò>Ûl×^€ŸiþÃe`6$ÔÖ‡2;Gq”žopÐ4\©X¯®A-ÞòM ðp™ÐâÞ›á,¨»@(0ÛÑ~b(úPúþQÑó`P¶¾AA"ÙºzÏÙ@¡Û*mí½Á f$širˆŸa?ˆýOÙWcésc‚kÜB†[ÅB,<úÍBFRéDÛTñàb"®®Ÿ]žPyÆùžŸL,Á©nœ¹¦Îö"ë3úŠÔ= (­ŒòUpf‘y«”’÷تÒ:°uu#NO‰»ÇŠÝµ#»«÷‡Ñ»fÂ4 ÊM€8¸&åé²j;¨ÍÁ `ôŸµ”a9ʳó* ìgXÇÌ:O9¼V<85ÆšWc|@‚E…J' ÏgÜÁî'qý¸-œÒ‚u†+ŸÊ¦=ˆŒƒÀ4¿;jKk®©e´…˜ ®Y»® ]?d›bútÚNÚT|þ÷ õz#¶-V.OÑwë¼þ؃;Att¢¤?~Ù}\,êé Ú6Õl¦±æÀúH€]ÑòS[t3~˜»a&ña¨¡m×õ›æÎ¥›µ¶ZÛCØà¤ðÜ<¥)V8Ç9!ëë ²4V篎\†ûb¤ Þüc|•·^µäBí8YMEÛ6-óõÒ!ÊåºéСåP¼ì¶ƒ$uöaø9ð‡Ð!Ø +endstream endobj 505 0 obj <> endobj 506 0 obj <> endobj 507 0 obj <> endobj 508 0 obj <> endobj 509 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 510 0 obj <>stream +hÞÔX]oãÆú¨_qÉf5ž~ç-»¶‹)²ÝÕ&»Á‚+dÆ©Tÿ¤¾ô7öÜ™!EÑv›(ŠÂ€‡²fîœûqν´¢ÝâêOïíºEQ&sŠó”"I­Yl¯W‹«[EŠVÛ…Ò$ñƒE噈4e‘RÓê°°"d\D´ZãAª˜V‹ÁõÍ-%"§7Wo¾úŠÞ¶¡ÊE4»¶<ªzG®{Ón˵ \ýeq³ZÈR‹Bå‘CQXaWœw/q§V|¹}JÝíß–]Oá2Yðá¸)ùI½Ù¸ªx̓:ià·ýÕoj×w~“v«TI¸TQ!ùƒÎðœeI!âàmÛ¸›Óº§ïÃ,:0ÞJç¯hjo±°žJZ*¡ušÑêÚBŽã¼Œø*Šp™ãŽb©¥r …)Ã¥aýõËÿ|ëÿ¯ññ#ç.Ê„âÌÉ!w`‚ÏJ\îþ»P¿Ùïé]µC…f¨µ>T" :zg:Ó†Ë(Eð÷PGø£Ùˆ¯2my•‚ÃOè Î1³°$º`^§©ø%ÙCÉÎQ¸ú‰-þ ›±Ñ4–¢p²±tŒýáTc{VhræÛ–x¶ßà %Õz86ð\úoØ VxFŠ7Ùoÿ6¹3)òßsg’ËîLŠøù;"ÛÈ`ap2ó¢'¤Â 'x2; Þ;SnLKoÊýþK¹µDÒîé]sê«Út6#£š5•1ı7m… ñ¶µ­ª`ug`scj¨%RP—/^U”àp.r/Æc²þÉ;'º#8ùüž³ôxݤkÓU»šn~Yß•õÎÐm¨8Ñ°R¢Æ¸88`ÅRöô‰½þ"`Öoë ÊDP#Gä™#Ê]²Fx:Â/Zû@©RyO­5‰,™žFÚzæ£Iw¦¦ +2G—‘:giU£°º(Ú‹µ»˜avTÕÔ# åñØ6Ç–õ„©ÊÞбdñÇž]Lï‘yî]8$½Ýfk-rl«½ U +v +zß µ ×™Q"S¿Æò±ç +Q1ûŠºÓúŽÊÎZݸŒÔ%ŒY;K‹¤H¬³iò4L“(ûØfÁý+*[cãm6ÔÔ{‡M¼pˆ>ø3êK%Ø.è;\Ý:ðW\Ã)+avE7Å]›~Ì/—¢*ž¦5‹—®Ëš¾Œ  »ÜÊ™¿||lù‘÷·GÁz¸‹¡ÛêiI\ Ī:B¥1‹Ðº©û²ªÞã•e8¤k1àâ6Œ˜ Gì÷ Ç.PB Ï8Y÷USw_{æg~Ža¹qÆO3I4cïÂ3R‘gÃ楗‡ÉkЛsÎ#ðéöT[`1b1ÐȲ‹5>•ýÐ'¬i…‰MAƒÑØDj£|n/¢ŸÌ‚¿Êqÿ³qøÇU¨ £qð.Õ#x_Özoúž#|!­Þ mÕP±ªÇs/Î@4äߟÁLˆ2‚ì GŠÙ£óÿ”@ ‡EþB0ÊÀ‡nÒEŸuU‚¬H$Zþ;W!`ø~vé¼væNG±wzxȽœì”þ´LzáعÄîCfn0©Æ¦=øº{¾FÑ`ýcðÍe›àHl½¡ŽNÝ HIñœ²Ž±‚4²u£’Î|å:Ú†à„g²ks©ks)â¤äjµÒ/¤?‚{í¿ºM}¼”ˆ£"šRâ|¶ª÷`ÿš_g>ÌëÑ .Äîør8q1ïþÜÏy¿¡Uêãlë< Wâ +ÐÎK—ˆ®oØØígûôå ÉKFÇ[ªŒR5…:†Ù«]¬öºìËY˜2HôrŽiŽÅ_…tË<žbù¾@bd†Q¥ÜI¦4ž4ô›Ýð*/»Óñ¸¯ÐÔf•ÌýÕU0ú¾ž÷ÔÉäâZÕ±ì:XéïZƒ¦Ý¦îmwN|Ã;Ó5…g¬}bÀÐt(Óñ +™Ì8+­ê&ã ºÔÇBx6 +*‡Îæç(¨³òØê—øƒ¢Ðã» ÚÎ)¯}™_Mª˜L]CÃÏ2ßðÇpdJÚWxåÇ$f±æ"K“y<ù°öÞ6_~BsæIcìØùíÙÂŽÃÙ,öוtª«ŸOlBÖ›àâ×á „IÁ„f‘ø-é“ùlœw¼FZ9JAtÈpµLêƒß¶ms°Ú…É”ßñbF¢ùÙÙÅ:]²–ñÅh”Z=½'ÿYxèèÑ Û͉ú†‹Óšïx¸œã®ß8ÙÌYó t=”³°©¶8Aö8*ý#÷mä†'ä X:¾œþK€ÆIF +endstream endobj 511 0 obj <> endobj 512 0 obj <> endobj 513 0 obj <> endobj 514 0 obj <> endobj 515 0 obj <> endobj 516 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 517 0 obj <>stream +hÞÔYÛŽã¸òè¯à£”sDŠÔeß2·`‚M°˜ñ&v‚…Ú–ÝJÛ’!ÉÓéïÈþÄþeNñ¢›Ý½ÉCŒe‹,²N:Ud vX½þýgÁÝ*‰YeLe ‹#Ö–«ýêÍfõúƒ`‚mö+!Y„øYÊcÉÒ8â‘d›Ó*‚©5—¾ªËÎ}¿Yi•Ã±„ë„qçyθÊÈ q1‘|¥ØÅ)¹ÈÇ9éb'´Ýw«¿;٧ꆦàZ +®ƒIÙ•m¸Žž_CãÇrÇ}2ºtJ¥I§jr-41Ï3«5æ ÓTñtTš2O#r’„à§wE_„›¿2ŠÍV)'ý8Ylhj°¹/™¡Ü ž+ %ÆfFÉŒÈü®5fG+ÌTJñ|„>òi“}}Ñ.§²îÙ™)4û®‘9Õ®ìXåɤ¤\Ezb-qÖt–YkݹÜVûªÜ±»PF°ò[ÙÙŽò§‚Î Ö?±L[öÄB¦[_M6k¯1M*+·ƒ +DK%_¬“Cp• ñŸ]$6–ã€íC|KƒÆ¼be±½_Ìæìý?ŠÓùèT»Ò¹öð»åM°Œ¬ÙW­WøR´<¬!ݬÈÏ°,ô;]¿«z{¼ì|ĵ àZfTÆuF;Ï#“BÁ¶©¡ÝÛû¢ýíŒ`ÉlÃr¤ã«ù"\ëéƒ]s¹;–3SÈl|ãû¯™©ê~Îwž(ŽÆ‡8u[*êÝÜžäSsvç»r_¡Šœg†ádÊÌÌ—aGLÎ6¡@ødð +”’ aç¦"èû†ÕM_~ë²&µörž'¶pÒ’0R’›Ü¶ò›g’9K'ãgygr†6´ñ™å¹ÜBi]+|&,s†Z›…Šgñ-_½šVy2”f¢ ìÌîÃX’ó´Nʛܔ28V»ª +sÊÙ¯Á‘ÆÿvðˆÜîöãž=Ñ.»+\˜ Q%DçÁz_RÛQžIz5hR:ᔥø?"Ó1Å…@<]Bü‡\9öUI?°‚mA)´Š™ir¹ê¹ÃáyÍ×@4ÉHNO«A§€åTö²îëH»uÐ} é-ñφlVybSÕèóÔ:¨¤õ ÑÚ‰þ ù JaUð_ÚµÞ$xê²?Í-ß6 +Ÿ[U_ž–˜ëÊÞÈ7¡(¬ð_¬x +Xžåhê )gõX‘:sö'd¤5i¦¢*Mc¬‡èQö©Ñnm£m Fs/ †‡B+—‡ξ¨j¨u}|ÂV1<‡^˜{kHºTŽÂï;¤ÖŒA îŸP«Ù÷em} +4ÖJÌoÅE+é †áeWj»6:µ($³ãº]3ÁjkS(õBÎûe âR³»Ò×·pK§b¢.¯@§ð»½Òɨh’Ö{xnœoKVîÈhÊ+lûÊh ¾: Q„ó†‡=\::dìplîŠ#sã RM[µÊ´m…!¨PšÐª`më2&D(sky}›žo6׊º¿ÔØ"Š§Gƒ¢Ö´`=Ó¢¶MÑë«V¥ôà̈–1Ñ,ÉJœdË5€, 6µ¾Z­+ª#|1–!‰ƒ'ZðuŽzðx_ÚÂ@lßWGŠ^kà3!I½ÂÚ"è¤ö®<€é5bkƒ2 +(#ÏI uïLjE³¼]JìÄÝ îÞ•FP ¹`Ã(¿4ÊWWÝŤšø–ŽÌ‹Ÿ-{îTÏió:Î8νÀ/Ú&jìF’œ|ËÝ „lôIØFú¯óm)"†—ÚpaÖœü¤€æ¦Z@è,‰GÐpŒM¯@›ä™ôäcUÏl§¨Ô¤]s©V°šˆçj`ôú½¬N®4™º§ÑUY{þ"=GŒæ€ ?Ò¶3¦©}¥fìsÙ÷ä×ì®âv‹Õl=¯Ñ‘Óv‹¬¶tKñp!yp\›a«‡Œˆ44ÊóH[‘b”¨ÍhÐKÜ8’D™òß_(ižì¹®Äiä•gºžJÞÐÞçîŽ]Ÿ/¬`Ö¥_Áã|©½¾%./oÅ9¨üÙƒŽ ÔvPrWµÉ"?À4ˆIpÂ'©‡aM5œìởQÎŽ|ËézÊ⌓ÞÙêj ]]Çø(z’>c¢ _`.DÛPÂùm‰ÉCj­Ø{òÂá$üÌÝX¤®„#™ 9ž•½lênh* ²òɽnJ§›C:cMå;’~š‘à…Ä÷ã±!ÉÁ£É[*,æg8‡«®ïœÔúÚß"‡R–¡ýX|ë°óÓ³OåÛ˜ ¬6ýL¸º®ÙVˆÏn™$®öQ|U±HIùS«40ý 5?æüéέŽÔ'ËFì´5ýÊ–(E7,Õ§$1L] <ˆ¸+Ñuý1§+­þ“4ðýf¥²½"“)5Ç<1Qõ—0£ò¨,¥æP¦±‹ûi€í¾£n$’¬BϤαðÄ¢ðÕTÌUÔ•ƒåu®1‘yÂÑà¡Ôåyvc-A÷¢r¶Þ«ŸÝî‡QÆdLÇ°ç-&†«WÌÅ8áÔC éæóJŠ4¦Jä@)9»Ê¢ñÑ3—1Òqî#I˜îWNFµÀ¡r(΢´X _°°·:ÝZpÐzÙ>„D“¨£¤%î‰Z®ó²|­Ýr0Jiï® å›cã8uW-ÚH´7ÔZÕðgv}‘gî_›jwÓeOsh~ ­Lk~{÷0™±lêƒ/fý‘âP¶û¡Þ:zÞ `\eBÅt{ø,ë%˜š(C=Ð0ø’©ØtØ°/—§Å—Ûõ¸ÆÙœ-*㈳²8Ï»D bôL±x.P›–Î7l õe¶ïgPC ÂÙÇf.^€ ]&G·ó0WÉ$r¨òùH‚‰8-60Yž´C)ô‚Lå]þ Ò@ûw ¼²÷îWÙä ]˜/†ýâз þK€ ×zP +endstream endobj 518 0 obj <> endobj 519 0 obj <> endobj 520 0 obj <> endobj 521 0 obj <> endobj 522 0 obj <> endobj 523 0 obj <> endobj 524 0 obj <> endobj 525 0 obj <> endobj 526 0 obj <> endobj 527 0 obj <> endobj 528 0 obj <> endobj 529 0 obj <> endobj 530 0 obj <> endobj 531 0 obj <> endobj 532 0 obj <> endobj 533 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 534 0 obj <>stream +hÞÔXÛrÛ6}×Wà‘lFî ã[&¤ã±Õ¼´}`$Zfm“’NâOÊ_vq!EI¤ÄÄÍt:ž1aX,Ξ]€¢õìõÛkŠÖõLq¤I‚D¢'¨Êf7³“ÅìõE-nf”!?ð¡‰Æœ!Í & -f¬`" G‹%4hñeöGtv~$NÐéëÓW¯ÐeÓó¨\WéÃC^¬Ñ»¢Éª›t™Å-~…•¸_‰a#%šSL•D‹³ÙLl³ží«,]e:Mïï?¥Ë˜¬¢;tU>5y‘ÕÎèùb¦Ö +¶¦°T3nŒAX$Ö¤Û¤Û·ë„­c°ßïdìî:aç.Æ¡atŠ¤ÁzʨõÔµ”wõ}Z7(ž+¬£ßW©mѨÉV¾rûM¢"ïðaPµ¼ ƒ˜ÿ*ã9å†Ø?˜¶ÖÒ`]V¥±zZ6èc¬Ì¢,X©Ãeìá8tˆE™1¥[˜…h'Ü;ÿ Që$°†™3B}S¢XYwQûþùχþwÚ³ãS{r¤=;ÉpvTú³û¹®¾¹¿GWùªkML±ŒjˆÉ:«â9WØDŸcÆáŸÙ +·±ÂI3N +Ĥ§¼(èiÙŽ*ÿÄïëä¾l£=]g5Úp¹§„å,:/VñâoéÅ\gÐlG7ès™¯¶k„8L£UvS]g]×®6O?ÝÙñ‹_º`aºÁt_‹çÇ̲û– BHj…“2†9ÈŒ"ÌlÀ´5…Ñ Ë ¯Îzl œ‰ÀðqÛÁvýNXçvaÀe.0}‹SVïÑÉSNò¦†0YàOoÓ*¶'›.A¹ë Û»ÈêmÏBãK€¹Åò©†uŒ½•6pº5¦×M cU©@µDrP• ïɪ 褀Ѻ£ÖUŽ•ÙñoPm]R³3£Óòá±,²¢©wé´±y’­ó¢€ý¼„˜¢OÌnÕë&­šn²7mÆ]gÕÔåu*86‡€4à* É|Ÿž“qzî¹9¡a¯ÛÐîàFZˆÅÓºy#dc»dëO€I$ÌñM&ö㢘ÀÄ)ÁÆ–S|€o›1¶õWá~’v þ¨ + +ÎwUp?¦?(ß<~cdú±¤Ò.!L[j¯zÒú½OcHJ4z¶‰‡Bie «£ØVÄA];ZvXÛ×·ùMó>}vq9$¼»¼Ü›4€27Žž ªCr€¥‚R‹2Å,W‰kyˆ©{þì€ÆØÆRgrJYÔ \ €QšÛ#Èæ‚ùÁ—P (žá·ˆnGàWò(þÀãË´¹Ý»‹…ð0d]äšJa.·SNÏôÁ§» Ÿeu¾.^˜XŽ%f¿È2ߟ™9ñ %dæ±z§… ¶.Ý;tVì|m"=d*¹åmO é8ÆTŠ}Þz€mq-U×Þ×ÃÑ¡œ¸ÅÞVåÓc}L7P×ØEôo®!LM†ê¡PwHD{îNÓÐ ˜î•è¿eÍK²6L?FÑ©ˆÂ…eúu:‡nÓƒBйº“nƒ)´M‡a¦'øÙùÅ(Uì ðZù®¸‰ÁˆŽÊ~UiãЧT(/§Æ¾;‡bwaÉ-qðH ªƒêwÃ;t÷øl3äZÄŠ@ãÙŸøcïš#e¯‚ + CœØÚÇóöZ a3|èÂBw »NjoÚ]çÖÓµ4£F%ÜPáp†º“c³¸!c³¸2£]\X: u1%Æf1fÆfQ#=üG€ÉaÑ\ +endstream endobj 535 0 obj <> endobj 536 0 obj <> endobj 537 0 obj <> endobj 538 0 obj <> endobj 539 0 obj <> endobj 540 0 obj <> endobj 541 0 obj <> endobj 542 0 obj <> endobj 543 0 obj <> endobj 544 0 obj <> endobj 545 0 obj <> endobj 546 0 obj <> endobj 547 0 obj <> endobj 548 0 obj <> endobj 549 0 obj <> endobj 550 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 551 0 obj <>stream +hÞÔX[s£6~çWèºcEwÐc׉Ýít;™„æ¥í±‰—ÆÁ »›ŸÔÙ# 0ŽK§ÓÉL ‘øÎѧï\$Š6ÞÉò’¢Mé)ŽB!)Ä *RïÆû{' Š(Šo<ÊxÐ(Äœ¡LŠï<(˜ÍQ¼‚BŠ¿y¿û§g $q„æ'óÐyÐs·)’»»,ß Oy•7É* þŒKÜYbXK‰fS%Q|êÍ’ˆ›u°/Òdhžl·×É* +ÿ]ìª,OK z{RhX˜ÂR!̸Öa@»DÅp¨šqX;Ýq Æ0Ãí ,½%F[:4‚A5,W5®Ú7å|ý%)+Ìýßî׉y£~•®Ý ÊÌ3òóܯ§}®'«/õ$æž„Ê`F¹&æNà= ¥ÆÂ?/vnÆúaU¡« Œ0óÓ¥¬MìòvÅÒC ÍŒ©°áYˆÆyÂó#ªu0‹À†ž1BÝ«D2î¢æ9ýñŸOýÿ‚·š½ã!¦fçH³w“õÞQéöîßuõÇí]dPhZ«Š¥_BP–i̸ÂÚÿ0ÿL׸ Æ:œBfÃIA6iâiŸ_ @n9Œ*¢Ìâˆ[×Ù÷*ÍËl—3ž”{-×)£ÖïÊóM!ô⿼ø‡VÕðßù.ÏÓUe`ìd!]æe1‰æÜ€;õë.[[Ò›’üuzS\¦ØÙƒ‚óëÚªC¹Ý#´±Vûò‡ƒ¨ +H‰óëÛE?Þ§fº¡KBzB.‹NCÈNrXÔË ˜µÜYüÀ€q¬´D°­uÖºìûmãC›”g h]Í$f{ »)÷CZ{çYå‡Ä²:×›—oõÔ4ÃçÎÁÞá­F¦° +¿ùdR¥¥®Ó¬íÖÕa.¡ÒÑW‘ÉB»ÈËU’£ù—$ËË1RÉž–a5³®š °Å}Jö+ÄKxW¼ +>¥#<1(^—½þ:;L·À$z9ÝÕ^eIùõÂ÷ï¥^¡¢éêJ¿T½­«SÕëÂ{‘m·åÓÕí‘?¦›,ÏaQϲØô{D±hl\VI1H${J¤i47i1À$禥‚c=&P n•\`ÉŽ¹$#\v~%O¸"‡VÚv툧ãàíòRÏè!…ëÈF­qnŒ”PBã³uOÔ +9R¬Ý®ÁQØI5]ŒŸåë·Ä¤ˆÉAyßp¦¸ ɉ”)q’-cƒ2ržN‘áG5ý ¨"ËÀ¤¸9œ …O¡}[B§F¡Õò³u}ÙH8.W€´,²õäpì~ÑÇ#‹l@J+ÁA"98I3ÝëA»æ§†cd¿^»‡ûòI@MÎná`SöWagn(ÕMÉm,ÔF’ÓR‹–fForª¾‡NN-¾ý|5ïÉ]ú–Jañ H}S -ªqZÿ„5öq8Vl»~¾ƒ"ýÏéÝ5ÂÞQ…q4INà’jÙiZž¡’‚*åË:ÁCW_«Å×ÔZûõ3*kæô£ˆ™Éeu;§{™aæ~Š*Ú+2YWdF'–ܱ¸|aÍ}..Ëþª;­ÖR&»ýÉ`ÿëŠ-ej¬?ŽÉrr½í)~ÊÊjgî@TÛÇñÂ:Ò™8˜Çw9.h2=ð4(c)lïìž,zH–ë²ýÖEíéÙbðpi&Õ—Ÿò›PBÀ¯â.±W73JÔ7¸ªÌ}r}ók ¯m$> endobj 553 0 obj <> endobj 554 0 obj <> endobj 555 0 obj <> endobj 556 0 obj <> endobj 557 0 obj <> endobj 558 0 obj <> endobj 559 0 obj <> endobj 560 0 obj <> endobj 561 0 obj <> endobj 562 0 obj <> endobj 563 0 obj <> endobj 564 0 obj <> endobj 565 0 obj <> endobj 566 0 obj <> endobj 567 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 568 0 obj <>stream +hÞÔXÛnÛF}×Wì#Ù@ë½/÷±ñ¥HцÍæ%éƒ"Qªj™2$:E>©ÙÙ /¢–Â)Š&•ÎåÌÌÙÙ¥h5¹ø鞢Õ~¢8Ò$C"Sˆ´+&ËÉÛ|rqCEùrB"ð4Ó˜3¤9Á„¡üqB@ &Âp”Ïá…Pò¿&“«ë$q†./.ß¼A·»”f˜'ÛÕnöø¸.Wè]Y»ål^¤¿ç?ƒ%î-1l¤DSŠ©’(¿šLA%A7ëè¾+f‹b‡.g›ÍçÙ<¥«äÝmŸ«uYìÒë|¢Ö +BSX*„7Æ ,2«Òéâv‹:ýÝE@Æ +p·‘7¸‡†A°(²ë)£ÖS÷¦¼«¿ÌöJ§ +ëä·§Å̾Ѥ*þ­í3Kʼb¿¡Ýü Äü“P™N)7ÄþàÞµ–‹äv·õ‹çy…>¤:Ã,)‚–}0±-ƒ~HŠC‡X”Sº†YˆÚy½ó#jL:ÍÀ†™2Bý«D©²î¢ú9þñŸ‹þ•7?mî¸ÆÔfŽÔ¹ƒ– ¹£Òçîu]ýq³AwëT¨†Z«RŠe²‡žÜ»tÊ6É—”qøÏbë^ í¤™k'dR÷SK/ +€ZÚ® +Õ8‡Vò¾¨öiþ§/Þ@ÉÛbµ.K »rq#=“€Ÿ ^ˆ„"±/ íËv½@‹b¹»/*Ð|_ÍvÕå燾oúSb%-m­ŠHÝ”ùקÂÊÚØ$ Ä$1ð˜àØ“H ›,#3àšaà&8•|J­*Ž‰é;íÂwÆ;>Ö¶âœ2†9$ + JÝÇí·5j=lÈ¡‰¦ñû¸œÄKDà±{T`WÀŠ4Ìzˆ‡Ò8 EÄú€H,º€t ~>††ò¬¬^—‹xéèC„>:d€F –´Á÷£†UýwžðÉ>Bb–à÷©zÑ6XVM_´øœ™˜«5PÞµ“X±*êc|¿-áã”sØ>fÏ› +uë÷Rr÷¼)öÈêÎèà}ª%Á254µÖ/¯ŽǶ¼*–Ö—n‹6Á€åIr`ÎÚ!X†zXÀf +{=´§­ÚÐÅÊÓND¼?1ñ€¯t¤zW8æªülxÃùÆ´ñùêW…K׉ZÓVŸûÐw¬–¥Oæ!÷P*u ¢$–cRa0ò·Iã pŒêõË€C¯Ð3œ:x|Ï ’Ndðíç¤u4PÏqNž•”¶9¢tÒÁ”ÝÞ]o MaþLosÒ9z¾ïGÐíëòhVÇPã’pvck'²E¶±Œž¸¡ÃÔs4@pÃ"”sz‚è:<ÍÃØäŸà‹0t\ð±è¥rÝÞèð¸À¥Žôy3.èfZðöÎwó™Ê3.Œ›4A{ÛµGÃû3Nž½ô¨Ôÿ.Å{–³~bK ŽÇb/0ÂÜ6Ò9W˜ab`ÎéÌ2ç¹á¨ZÏñÃa­š#4MR}8_8ŒØÿ×åºZoËþùíUù<Ë|Ñ)µs© ÜtSq†£© 0g ¥b8ý~É¢Á`c Ò%âGeJä©£rç*áˆ#è!fpB—¦FÁC~u}3XV(ܾ+—)(ÑÉ6…?»Ç™…-R;Kóð¨ì-x¸¯v “‘óŠTÍUs¸o®Â!øäå©‚jJ¾Bj´ž:wâ©Œû£®¿ ±Wùõu¸ÂB–°Ð ÒnÑÝÑ4‹é’»‰,¦”S°'¢K4#ѯþ`Á2Á˜ +endstream endobj 569 0 obj <> endobj 570 0 obj <> endobj 571 0 obj <> endobj 572 0 obj <> endobj 573 0 obj <> endobj 574 0 obj <> endobj 575 0 obj <> endobj 576 0 obj <> endobj 577 0 obj <> endobj 578 0 obj <> endobj 579 0 obj <> endobj 580 0 obj <> endobj 581 0 obj <> endobj 582 0 obj <> endobj 583 0 obj <> endobj 584 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 585 0 obj <>stream +hÞÔXÛrÛ6}×Wà‘lF0î _:é´Œ­æ%éƒ"ÑŠj›òHL<ù¤þeIñP´ëN§£‘€ÝÅÁÙƒ(ÚÌÎ~º¡hs˜)Ž4ÉÈâíóÙíìíbvvEE‹ÛeˆÀ4Ó˜3¤9Á„¡ÅÃŒ€L„áh±‚BZ<Í>&—WHâ Ÿ¿yƒÞïSšažì6ûåÃöؠwE™ïo—«<ýcñ3xâÞÃFJ4§˜*‰³9˜$¢²ÍZ¶¯óå:ߣóåýýçå*¥«ä]ï¾–Û"?8£—‹™&¦°T3nŒAXdÖ ›¢bX«ºæŽÁA» ±Èp×So€1ƒ Qd5 +6TFm¨îMùXYJ”ÎÖÉïë¥}£I™¯ý ÚÚg–)„_uûµê´_}©:1ÿ$T¦sÊ ±?8üIµ–‹äý~ç{¬¿®Jô!ÕfI^Y9T.vEeVÅÁC,ÌŒ)]ã,D<á>ø¿5&gàÃÌ¡þU¢TÙpQýœþøÏ»þ7?íÚq©]9R¯ädµvTúµûwCýñþ]o7ÀP \+SŠer€¤<äûtÎ6É·”qø3_ã:«tÒÌ¥“5©óé¨/ +@[ºYEŒñó²?Z'¤")¿£#—’‘\ä·Ûb[nwÅ!]ü9[üÐ —ÅÚþyv%½ôÀ¼˜D s>â„'ù¶Û®Ñ:¿Ýßä¥ ̃‘óÏwÖN;jò)±}?À èrU,¾?涣EB‚òƒì1p º#A²"LKÐWè *åA±ÁJ­)3Ñwfîˆàó[{ÝÓ ó=B¸mÓ„ŒŽÁ¢4Α ÓNbѦSËÝTéº:Ô.â›Õ²@ç_–Û6¼ñ^¾œP±†¡Œ 6š +Ië{å\µ¬/}D›Ì±®Rµ(¼^Õ ¼ °n\Ö†O•¶qÔ£4IÒ&–˜Ô±¾ÔµG„àSÜ’S:£èqJ0¨ WbHNŠMTéÚÎ_ŸªGéóŽêß4–²0KƒŠØšç)YäT¨( 9×D“ºî*Æq ¥v$¡aÈ8Í|‡ܸôœVoR,SC–5%§>&£wyšXûÈQŠ=s?u´q†¯‡ÁxÂRÒÙºOÜ>P"ÇN4Qjõó•vaµºiê¡~Ó¿¸¼ŠÖ#¶Su3ù®¸MÁˆNv)|í–ö’'S«ã<¤J{É\]»“Qå²s=á¡ +ÞO¨æ"·ºtnnš‰ä-RìJ¾§Px¨äñxå¬8Röü§0ıÕÞ”ûûfh‚ Æž}ºÝ5R{àn[7ÕI5*@$`u‚MÜåCMœ¨Ø(»­EF1®baÀ4ø·ül°3 +endstream endobj 586 0 obj <> endobj 587 0 obj <> endobj 588 0 obj <> endobj 589 0 obj <> endobj 590 0 obj <> endobj 591 0 obj <> endobj 592 0 obj <> endobj 593 0 obj <> endobj 594 0 obj <> endobj 595 0 obj <> endobj 596 0 obj <> endobj 597 0 obj <> endobj 598 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 599 0 obj <>stream +hÞÔXÛnã6}÷WðQÚ…ÞE¡èC7—b‹m±Øhó²éƒÖ–7ŽlÈÊ&A¿¨Ù’’o’âEQE€ˆ‡3ÃÃ93Cq2ý|ÍÉ|32’$Ìe ‘ŒTÅh6z—ή8á$›¸ þàÁmB¥ ‰d” ’=Œh¡L¥’d0®Hö4ú]\^M-9?;û–|¬bn©ŒVó*xX”sò¾¬‹j–OŠø÷ì°$½%AS­É˜Sn4É.FcPÉTÐ-vt*òiQ‘ó|¹üšObžRÝ“O«ÇzQ§ô2A[3TB…LÓ”PeQ¥Û¤Û·›„­Sп; È €t“°ó—Ô¡‘˜T¶==u#ã]ýoj M¢ÏëiŽ#ÕÅÔÈŸ6*cð>ˆý„ªÉ]þɸŽÇ\¦ H ã$Ñ)UÑÇjå%¦“šÜĉ¥"*‚–M0±*ƒ~8‡C”…0I³RóLzçÿ"Rnàú`áöÿDÆØŠî–asïËáXÈÈ7ÜHVeLÝ9y0™òï`šLÅw3mëíið…êøÅ[bHF:r*ÈöÎåƒô $o¤#8…Ðb¯ ½@¬{õ¢í¼T² u˜ŠC¹Kê½*÷¢úÄ*'õNžHM7‹|ó»©Wcs‘ïvO}쥤puq§•âý­”¢‹Äl("·>ž’-j}5PvðZSà$:ö.¬¯|\S>Ô@sdHcåó}ÿîþ5UGIÌ›<•ƒ]Ó#÷ýywËtµ½‘rØ< ô•ý]”СömÛ¨´¿kß1bm'•tÌaÅ÷уK¯”-zž«p{ìÝZ¸¤áýì}9‹AKeþUy äÆC¥TFTwçpsó×`os'15X‘.ƒ¦ýž>ýµßû LàÞ™Å._ÑK<ÆOë’+©2Ða1•ø½²ùæg”B@ÃUI©n’c¡h'÷¾ê´W©ÖÓa甾Ù;žRÖö)TZö)TÜö)”ýÛ–ª×C«Ý³ÿPêæþ`['í +endstream endobj 600 0 obj <> endobj 601 0 obj <> endobj 602 0 obj <> endobj 603 0 obj <> endobj 604 0 obj <> endobj 605 0 obj <> endobj 606 0 obj <> endobj 607 0 obj <> endobj 608 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 609 0 obj <>stream +hÞÔWÝnÛ6vé§à Û˜!©?jC.Ö¤)2´]‘ª»™w¡Ø´£E‘ Ii— {‰¾ÅÞrIÉ–íÖn€ à ¤ùsÎù¾óÃ#A£“oY4£È'1W$Pñ9©õh>z–ŽN.$„$„Š™/IìsÆ%IïFRŸ¤SL¸Húaô³wþü‚„L‘³“³§OÉ›š +Å|¯ZÔÙÝ]^.ÈeÙêzžM5ý%ýš|§I²$ ÉX0…$=!’l9}¥³™®ÉYV×Ù”Š„EÞ-¹ªîÛ¼Ôú<…A` #¤Ÿ$ a2-ÄH²8ê÷AÁpÔf|» è+bKGB°¨žcªÆT;‹œ­/³¦%t±Ø{·œef&¼VÏÜ„äfT^Ia~wìUw¨žÞt‡¤¹éXø 7?üó8xoêʘÝO[ò“žî¤4ŠªìäÃ+–nh–2Š{žƒ 7žûÎø¿ˆH:VБŒ%nsI?~ùðŸýÿ +_ý4¾óc&Œçxï;ädç;:ßý»¦~_ä*_ BcÄZK ½IÙ蚎ýˆ%Þ{*},ê등K§XÚtŠPMV…&M¥Ëÿ„%‘K.3AU‰¢ùÁºÒpi+ w ONÔB$ +~Yæmžùïš´7²³<]3’Þä ©]i 7YƒeÒVdŠÚAæyÝ´lÜdô9dÏô¼†Ln'Þ„~ןñ™AèÎ@ÿ[üƨ¼z+é–ÔX–£OˆÇ]:×M¾(Ï®o'X´ÓgŠu§1}²q8ÕÓ›²*ªÅƒ½ÐšŸF‘]yÖ›¹uÉix^ÎJ°l>w5eiO/1Ñuûp®çXÞ{Gzö–ë‡nñs÷^ëÖ^(1ÏxŒ1šþÚÎU°ÍÚ•^ä Þw%hŸÙw« ~ÃYCÆᬗº´Þ‡· +Þ/4™W51» 6|Vöæs±ÞÜxú fâAÂe¹¼o/Lúuv§Žê£ PrzJ8ìüáR±m´¬ó²CÐYu_ÌÊ-©–&dK’±Îºß4'cõÑ1Y[4PÞiÞŒ¯Öí} +¥aDŽw à&‘¼?Í&.¬RËuY¾¯ îÖåÒ2«Mb¯”׺!§Ä¦×¼6/1¨9&½I&VVƒ¸÷U>{2¡fbγ6ÛK.DÇ|íX;L™éœY†b¶!YIt]W5ûùp&´üÆØ°v 8Ø€5ŸU£'¶‡c«Õ«³ˆðï¬Êu³¥\³¥L{!UhÞca +àF/ÄcWß5ƒ.HJôX·Ô´OÞf/´j°Ö­œ‘Ž^«,{ÁÒ ¶E³ÑÓ6G瀒1­MÃbŸ_Ãû&*æTƦ± øWè,¼x +”g:¼®à6ßvÄŸªðÆ_¢—tùª¶{_9RvÌVñÆ5)®8<+ª¾¤c4+ÙB£¾\”)’cõa©û÷ÈJâLáéÁ€”E–êþUZë”Âv½Ûz…ÜrUKh¤c©8¨òÃCعb‰zöÁ ‹=`¯(€„Þo@z=l¸%܆Íc+"8ží=°…RfGåºÉMvpÇiN)€èv&à‹aw‡·½}VÝ-«R—í à;D>šÝ=.sRõöîA„‘ÿÈÈÞèñ¬¯²æöíM>o_fÆß±÷`>FÇõ€ ³3FEؤ#&ä¥ íçN˜˜¯¢]>|!ÍþŽAqÿ-¶KJlŒðãC¤ø˜©GP²:¿íüóêþšZ‡ûr\øÊ»0Qì«OÍþ¦ºÃ1 ÁEéè øÜ؆ŒgµØÕ”`’à{6Ø—Õ¾ÙßVsjrjâcò¤ƒ h´úbª‹â…{r"/Ÿ @[ û/|a¾ö”peö*÷qÀ{ù 0Z} 8 +endstream endobj 610 0 obj <> endobj 611 0 obj <>/Border[0 0 0]/Rect[213.12 208.26 268.2 221.76]/Subtype/Link/Type/Annot>> endobj 612 0 obj <> endobj 613 0 obj <> endobj 614 0 obj <> endobj 615 0 obj <> endobj 616 0 obj <> endobj 617 0 obj <> endobj 618 0 obj <> endobj 619 0 obj <> endobj 620 0 obj <> endobj 621 0 obj <> endobj 622 0 obj <> endobj 623 0 obj <> endobj 624 0 obj <> endobj 625 0 obj <> endobj 626 0 obj <> endobj 627 0 obj <> endobj 628 0 obj <> endobj 629 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 630 0 obj <>stream +hÞÔYÛnÛFú¨¯ØG²Ö{¿<&¾mÓ4°•¼$EAK´¬Z– ŠnêOê_vf—7Ñ6i¡-Š"€I{‡;særvvÂÉrrôö‚“ånb$±Ìå ‘Œùäjòf69:ã„“ÙÕ„ Âà<¸³T +b%£LÙí„Á.”)/Él/Œ+2û:ùœœœžM9>:þî;ò¡H¹£2Ù.‹ìövµY’ï7e^\eó<ýeöh’Q“ ^k2å”Mf'“)lÉTµ·èì}žg‹¼ ÇÙz}™ÍSî©InÈùö¾\mò]Øôt61‚ZÐ Õ†P!½÷„*‡[wXèöï.‚gP@†E@ÞøÅox‹ÊÕN@KGKÛ‰¦¾Ëv%I§†ÚäãÝ"Ã7ž”ù"¾>]²IÁúJì§J¨˜_WB">×é”KÏð‰ïÖjOUò¡ØF‰Åý¼$ŸRë¨Hòj—]¥b»©ö‡ ï0ô²ÆÖnVª6žÉhüŸ„{ŸNèðSÁx|Õ$5h.©Ÿ/üç¢ÿßÍ›_1vÒRŽ‘cuì $«Øqc÷ïšúz½&ç«%d¨…\+SNu²ƒšÜåE:•†úä÷THøc¾ u-VådE('dÒòŒÕï©7±¶ð„5ža’!¾ä›tö[Ë-?9Ûù&ä²Æ>'‹üªx[lïïŽ/oÎ6³”s æ=ÜåµyáKEpWTÖPÙê€JÀõVª1udUù*î.[B ++¡l«˜îY¬ZR¤ºÛ—âlä[’Œ8‘[—yQ# BÖCª9u +º@ŒÏ#Õ¸¾¯‰‹ŠŽ™}„Ô1HÅÇÂór˜Q¸ñ}^áÎï$ÕÀúî t(Ö» +l}Ò<†f=§’cИmöEèù~²¾ßnNò«TXHÓì~ÝEû(o!L˜·ŠáãùhÂ^°ÞS9 +Y@ÖNRï^¹•ú] ùC +Ô!’¬¼î€=°ÚÁ™îÌJ × \ßW6žº£` ?i®ÔæjÓÁgûøàL‡Ô…ÂBç4®wŒÆQA“î Ômåûµ ¡'¹¨O ÆŒ…3b¨Bg¸ÞÓô÷‘Á”±ü#¤#0¹Œ¹ûÏçsUâú¾šñ\5#0•? š•pày¾\m7•‡ÁAâ¡—$xÖ;JÆáÙ1xÆ”¯­|¿ Ï·)t6ù:P–ÊòÚ‰˟朾–Ñ\E©ôA¹ÚÊý¢Ey1Ï6óël|\¥R!a¡Áây B¨Î}]íåÇ?«à2¢Rh Ý`!@…ûgçÅz[ôyJpÌYh㜈¦s¸ÞUñ!dì°ÄmäÛ”ªp–^!àJÝ «ì–pœ„ÆVP3„&Xoõ %®A)¡=>$q[ù>]”ë|7ÀAÒêµÀ¶C€ Ö{ŠFcª1¦c-­Ôtî•ð´¹7DœœJŠÔÂÏ,…a°¡’›t + ;P}h2ÚS9_ƒë•úàj1WòƒR¸•ïsï§U6ÀºRxLܪz¾RC7ÔS2F½ã ¡Q>(ƒù~cû)µØØnW‹ÆVš5ȽÜãئ¯ll}q©'z¡-[†7€+à„3¦¾ÏŠr„ðf½ Éh“› Hêb ÔƒOÐÁáÏ2m;åù„ŸP‘j.\uñIWÝšÏó@i2Y¥S[K†“|cÉŽàM'eF®Ší-)¯ñ·œTªt¥ +ªÃÄÉH'loÞý|üãë·§{áƒ+D;Caõ Eaè‚weVæ·ù¦$« ¨Ë N¯Vëû—Ш¼ EgWƒò!ÉÇ]>Ίå=n†&@3QÙå %yøæW«M¾@½(>•§“ûsÑnˆÐæ±/  ºã Œä +#yƒ©Ñõœ÷=s*?Ì×ÙnGÊ-¤cF\Ap0ü² 8Y™Qr—·ÑE˸uQ3-®&Ù=lÊìÀ®¼¾ƒ K8Íná ¬„^”d—Ûû²‰Æ>à)œìÆÅr3ØŒ;œÒëŽyº®&ÝO„Wd—ç¤.˜îçËvä,  ª« T³Ö” IÆQ”‡:Æ÷…i3ñNêô‹F«h´¬¦|#Ïx5v>=;Bï¼Ë6Ë{°ŽœÇQ¤Žš‹|Ó¼ãÝÃêGuC£ÊŠ50 HM%íx>pOrÄg3ñ ¥r-©¬ŸêXAy-òÔ$‘d05#—‹|I⼓â}çÕ î''gkø çÿ7(ük“þ¦ÂÄ©’æ‚ŸtôkR>Üí› Þ×ÖuëäU(:ˆ$Ô°é*îØ]ÕXlþ¶§ÜQ%¬íéþœ\®±P&>° +ÃG)PæÜø'M1J ™,¦'P|/4%üw°iÏè™S]¾¤häö_ ¬1Ç] +endstream endobj 631 0 obj <> endobj 632 0 obj <>/Border[0 0 0]/Rect[220.32 95.22 288.3 108.72]/Subtype/Link/Type/Annot>> endobj 633 0 obj <>/Border[0 0 0]/Rect[145.02 450.24 191.64 463.74]/Subtype/Link/Type/Annot>> endobj 634 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[234 233.22 337.02 246.72]/Subtype/Link/Type/Annot>> endobj 635 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 588.24 431.7 601.74]/Subtype/Link/Type/Annot>> endobj 636 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 637 0 obj <>stream +hÞìXÛŽÛF}×Wô#™Xmö|Ïe‘…“ce_’`Á‘(™ñHˆÔÚþ¤ýË=Õݤ(Žf&v± 0l’Í®ê:U§NK°ÍìõßÞ ¶igV1—åLç–©Œí«Ùzöf1{}#˜`‹õLH–á‘;®$s*ã™d‹í,Ã*<Ó…b‹%™Ðlñiösru}à ÏÙåëËo¿eïö©È¹JšÍ¾Ünë݆}·ëªýº\V鯋¿Ã’ +–$/ŒasÁ…5lq5›cÉLǵåhíÛª\U{vYÞßß•ËTÜ&Ùmsèê]ÕúE¯3£ lÌrc—ª( +ÆuN ú-ZÉíßcïÆò/±õ!0…GÁðRç}ÈU)ÈU?²Á×·eÛ±tn¹K~zX•4IW­Â€ÕtÍ“] +÷ã´ïã¤ýòCœ$Ã5& Udt£,ÆΙ‚ëäݾ 3V‡eÇþ‘ºœË¤Š«´ÑD³‹ëžŒÂ,¥u}œµîÏTpþßLE:Ïa£˜ËL„¡a©%wYýý—ÿûÔ?ïâÃ-a§„\Öc‡šŒØ °ûߺzqÏnë 2Ô!׺Tp“´(ʶڧsey‘ü+• +«ï‹1–““¾œ,Øä¢ÁDëìˆd|^ZÚe6xNQHÇÍa[íº6òˆ !¹%WÊsÏ }–t_ÒÅoG®˜a!ÌT ¡•.X¸­º¶#AyT¡;ì>T,Z2aÕ6aïX²ªÖû7÷Íòc¹©.ï>.¾ fÆq2ú@µãÃÞvpAyÒ9þ/ápÐ`OŽ¬Æv“Ê‚ÈÔ¿ß³-†FU Œˆ)$½! Õ»uª¤_ÿ¶e²MéQÙÕÍîk«Šõ!prW_I²Àþ53EÆs” +H™q› } u,$…׊æÊXLÞ%×»S¡=<øR Ó­àÔ¥á‰þ¨¬bÐË®|ð¾·H•OסýµÌG zØ#c‘þ6ù‚8ë„Ò¾Y³ÈeNAñž¡ö• ÆE$m »jÅÈ+Î~Âw~Èꈡ7ë®ÚõˆùuN …˜´Uro”ˆTN«ª­7»°zØtO_Šy¼ÄL†pRØcIôE4‘*û¦¡m»ä3È"%ʼÙ-R“c@»Ï“‡‰D:áH 2ÖÏú&`s9™RZ`™ºJú=ñ²ñò€nÚ—õ¾Ùž¡6‘qeÆU掀_}w}q{}q‚¹>X6x2ÔØ‹ˆTæM‘ˆ[×÷ðÃ&„QUr“ŸÉ´‚°Nå¿-÷‘ô}ÒqÑSÿ)¹„šV£›PEóù©MðžØò¾l[Â"ê"ŠP*Šh jGãiÈŸx7)d2Do¿µ\Ž¶64ì,†hÏÚ/»®ü̈àùˆ¤§‡9]ø‚Ú·ÿ¬&e¯U¿°u@rAƒ‹`ãÆ»N^ùl f,Px#Ã#—ûÚ±É7»h¸Á¬µáƒ»s?‡©/Ú†ärÊî&~Vlb¤þ£j³?ke/5Å‹Án^œ(L³Žö(1u˜6JL4aB¯1-iÌz†kjå~ +=÷ù`Ñ èYftþ¦ŽŸBPb'w/ÉÓA{6Ô¿òX³$;Á[Rѯ: +±O»tŠÞKÕ+êq!›zù7œ¤¬mJ"å‘êD£5æ/ÕùµªS ¥Ú<}øÝcá©“ËfûÐìÀYAxŠ^x + +©Ãg•§ 6;Òa|Î +u">‰Ÿà’J¤‘ªp˜~A{ž(Áê—?~ÿîÇ®X¼?ÁÇå‘p J¼(A=²ÀâÑéF¹"€Ô'Y¦ß Í™ßD8T%§ +5,4­¿G|ï½£ÂçO¢‚s‚> endobj 639 0 obj <>/Border[0 0 0]/Rect[479.7 330.24 549 343.74]/Subtype/Link/Type/Annot>> endobj 640 0 obj <>/Border[0 0 0]/Rect[63 316.26 123 330.24]/Subtype/Link/Type/Annot>> endobj 641 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 494.28 444.6 507.78]/Subtype/Link/Type/Annot>> endobj 642 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 643 0 obj <>stream +hÞÔXÝr£È½×Sô%dGmú¸œxÆÉ&3»S¶67³©#!™X uôÉKä-s¾n@€íñ¤’T’r•A¢ùú|ç;-Áv‹«ßÜ ¶kV±8J˜N,S«óÅvñëÕâêF0ÁVÛ…,Â."‰¹’,V$[¬ðH§Š­Ö¸‰„f«ÇÅçàÝûfx®¯®¿ûŽ}ªC‘pT»:;ŠrǾ/Û¼Þfë<üãêwØIù$OaKÁ…5lõn±„ÉHw¶åÈömžmòš]gûý—lŠ”ÛàÝV§¶(óÆ}¿ZXÉc ×,7–q©Ò4e\'dÒ9éüvá:‡ýñCD†(÷žqI]4R†‡:éƒ@H¥ ¤îÎz¨²¦eáÒò8øé¸ÉèNm¾ñ7¬ k”!ÐwË>v‹êõ}·Húk$L¸*胊qÇ&å:øTW~Åæ´nÙÂ8á2È;+M·EUvö‘ˆ¢,¥û0k݃”ÿw&Ò4\&Ø#]ÊHø[ÃBKpYýöË}éÿ¯ñá#åNÅ\Pæ¢>whÉ.wÂøÜýg¡¾ÝïÙm±C…ƨµ6Ü z²Éëp©,Oƒ_B©ðe¾á}/víK×NdòžÁBÛǸºŒÉˈ îÎe›ý%\ýyqµZIÿzÊSë[“nÈ„±\i2A-é(êsP”-Ûä¡ ¶õuu8Ve^¶×_nÊÕùH_ÿøó8¨G"jòwxs“ã•l5Ä9´þO9ëÌv.®UšøÔðÈD–v ÚóqŠU€èânYä–¼¡hp®RpÖhãv (<î_ÍvOy¤"1Ûüs°&‚G¿xÀ ¹ý Á­J¾†á§†"U¿ËÚl!ãø Ç}A›½ +áçÐêÙ’0‰«W Ý·˜, +¬´;fŠ'¹R¦Ã2ÉD?qVØK'Eªë¤N¸NºÍÛªZbðQÇ(ôö~H»ñV MÅÞ ”§+•Qu¹Úšl‹HFÛö“#6Ý{Ãï‹õ=+ÊM±ÎÚœvÍÚËÖ ®æ“R 4à¬{l}”1åcqyè!:u–ɥ͓zÉôWi»©Ýc¹ÄÑR5öÍر*H°¶Â‡iHÑÄ ³hª†èCt' b§£—DÚKÙÑbÓ´HœÂ%þ¯[\ nPG˜—y(4.,†ïØM(écå–ÖìPukG9ˆÅ< ²ç™m¨$Þÿ¼ç28„ôUÖUù†5yΦ¾t\)Sx¯™N1ºY"hn ].äÒ +%-M†Öˆ{§» +fþÇl—J?TÑ,ÓH¾”é ºü«™î…ƒTÉ<ÕÚk›†¹XØ :ÕìK( nϪ¨°«-;ar,)‘ ì)äÒÒv½QæF¨8Õî– Ò±UmÛ¼ìÓãìLÓ#œ2 š¼õE7ª@ê­MÞ»Ò[Ÿ‘ò ‹ »;äGÒ!†ˆùI*$zÈìǬ i >ÜÝÛ·Ú0”‘ „pzªÄ¢Ð$Xzv/g +yBˆ*I†éc¤µr@•.ƒ"• yl¨º‘ +®m]žá1q­Íœ}\ÿøñÓ?¼ÿaõñíÝïï~ûýÍjZÑ´÷|$©†æ‘OSÊisRòÛbŸSE¨€³¾s•¢¨ç4j•Ê"}³¤K6¼ê3,]ñS†ãyµÐøöÉ ë®$A»(I×ꪙl*„œ*úöìÙ½ÉE +ú êUÒ““{Ë30ˆÔÕiÊ»,{ÎëTX{Êö¬ÛÿXC¡Ô6ìb€·°óÌÚ×¥)ˆ”T€†ÙäÇcÇ(tö%8”©1ŽLÄð´¾ö$ß¼?ȧüåtí|ÂrÏc¬qÊ‹½Jo,û‚͆4Ïê Ħþ=ef¸Î×Q•y‚ýëЃŒ ]5± S„]”»ZW8OÙ•z Y‘kÐõEãZóÀ\Oÿ­³î^I8Ä^6,äØr4½Œ÷¡èòê<×ÞsÕ3¢N͈k>¼¿¹¢ÈÊÝ ,¾ ‘ jwü«ór~ÈƈKc3]Sª£Ž£(7i¦íümº[ZY¯Ën +žçCbÃs^:œý³*|.Ã%ñŽ|"CIýA‡æߪ„5·ôî·©ñÁò…ôñ\ƒhô úG¨Âäâ°tpëf,ëø)H‰UÒüïÉuú±(’DÈÿºfŸªgà‰<çiÊu¢úAsKÃC¹¡ªOü‰“ïô¹aaª“(xfú._`¥‰ Ÿ$úR´Sˆ8Ç#žR¾Ñ˜O£ŸÿkIYè$óêÞM¨}åùú±agÿKWu"½âæ3þù!¡ý€¬:³Ç¢½œ{E•˜‹¢ê)Þô£™tÙ±®vt,0F?!e!Ýús ¶®ê:_·‰•˜Ëž…͞˹ƒ¿zÂè¸-h†ð6Ïhϧ„zQ€¾rÖˆíìøV¼í)(=„µªê¦?ÇùA‘’Q›½´ÿ‡> q +endstream endobj 644 0 obj <> endobj 645 0 obj <>/Border[0 0 0]/Rect[63 480.24 102.66 493.74]/Subtype/Link/Type/Annot>> endobj 646 0 obj <>/Border[0 0 0]/Rect[473.28 494.28 500.58 507.78]/Subtype/Link/Type/Annot>> endobj 647 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[330.6 672.24 549 685.74]/Subtype/Link/Type/Annot>> endobj 648 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 658.26 254.7 672.24]/Subtype/Link/Type/Annot>> endobj 649 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 650 0 obj <>stream +hÞÔXÛrã¸}×WàÜq€À¼m|IMjv²ekü2›JÑåQ,‘.’ZÇŸ”¿Ìi¼Ê³—‡T*å*‘楻qºûô{\½ÿË­`íJ+fËR«™JXS®v«?oVï¯l³[ Éüá ¬‰•dF%q"Ùæ¸J`%NÒ\±ÍN‘²ÍËê ¿¼ºfYlÙÅû‹ï¿g?5‘°±âõcSûê‘}¨º²Ùeô÷Í_áIyO2γŒ­E,tÆ6—«5L&i°-'¶oÊb[6ì¢8Hä±æOì¦>uûªlÑ«Í*Ks,LÇ™f±Tyž³8µdÐ-QËØèþ>ÖÃÁô> !d”»‰¥À䎜áfj{(T)(Tw¦}¬‹¶cÑZdž~Þt&xWný ÛÓÑò*Bøá±ÃCÍÃ×ðôÇDdÑZ¨<¡”Ź1Y§ü§¦öOlO»‹Œ%/ƒ•6¸¨«`Yqð$³”Úô8§i|¢|ðÿf"Ï£µ…|-áO3i +—õÇßøŸ?úÿk|ø—r§L,(sIŸ;ôdÈÈ|îþ»¡þp8°›ý#*Ô ÖºHÄoÑ”mÙDk¥ãœÿI…‹å6î›1´“‘®4ؤ六_¤Ä/Úè ¿¸’:+ ,p¬›’í«]¤@¼ŽðßÈðcD—Šn_WïX[–´<ÎÓ±Ä1VâmmËÝþ¢>>×UYu?íÓí×ý®ûXDà9Ã_‰^ : +?M¿…[X…Ic ZÔ*V–Å:Èc¶,ðcœÐÏtaa=®×8£þÜüsµ&ÔfHd2 õ¹x,i™’ëH¡™jÏŸk!cðÕ¿*¼ÑË|[tÙŸ0­ž€Ñ·¾Ä*|ùDë<ÓH~Sv'lêyªesÍëSÃî#‘áô5ZãvW¶¬Þ±ª`MºØ° Œ–$,eÈ£Ô!U¹e]Ì>ã=wÊö-;Ö Îzו•Ï˜*ƒpK8’åmÙ±®f{®÷4VèŸîkɶe»¬¼q¿ö~ž!ÖçÆ¡*3ƒ ¢)1aˆMk£‰RTÕe}Âj©Òe¤@©÷O×Õ&ÒŠ¿>/æؘz²É`ØÝúBàªá{XEõSçd8”ýÓz@vM}tk +n²à5(3n2ÄÌ?ú°¹e[- ßÍ(ãK¯¨¶Ì?õµ!å™Ñ»«›Ûû43›Æò-ÃT°d¸íŠ®<¢¥\YPø4ºÉÏÆš#ò ìö@Xh,?f¼µ‹¤SªEšcGä@¡É{Ó¾JЕYºhŸ‘;Dpà0mBa pEÓdE•W^"A4RP>mý¶8º ‡ª—tçäÞêÜmˆ +LAí;‚"ƒxI/w§âÀ‚ÿ焉ŠÝ2äDÎHgfc‘±/„5:Çl'ÐvÛò¹¬¶¤¬@$38”›f"¢ œèñÆK&ßÆq¯ äL€ Ã% ìpMÄh‰t-oXûZuÅ¿ƒ%úË@u„4­éàȘ÷ð6¼–¡Rþh)Ï•á7*yŠ¤>«g¶(h“Ÿ!O‚"+:x–¿Ã¤1Ü͘ÏÕ¾„gjT,!¨s,ŠÅâ òÓ¾1²%KÚ@ËÅо`oZÓ‚u0 ÖƒFðs¼‡tJ 5!»*¨ÁiàzâMNɽ‹=§Þ#ëŽsiI/{ˆ5O2w̲Ø_™Þ\`Ǫî21‚F¹Fk*÷~t¨x\…¢U(¿ŠŒ¨©&!SàtDºtëHÃåg³‘þ!(4í·VtB[/ki臾p‰Åj«ti¾kh$J?‡1ƒæ^ÇDô´»Ih{v†8öŠx‰¶‹Oôð?†a´†pªòAªdž,x÷ú<µ–;a*°µ) ”ʉãIÔ[êwíófn‘5¡ÔÂ+’€Ý?ïéPzÕ9†Õ"2s‚´ù·"€"ƒÄBÍ%æÏw‹8°µ“ÆœÅáö¬¼+€›N#ø9šk¬©R^g!# á?4®§üñäuNâEìTÃö™EiÝs²î·¯£rU¤\ §.„‘ÔÝà*Ù ¬?¨¾ó$}\ˆ`y9læŸ!ÂLí…«³1®Cˉ@=ÌÛ^ë(é´~‡Úwá …… ‡»/ cp³ê·Zg›…ý¦¶ä3E5ÈW#ÿ $îµ\îÁè ¯ei¡1\ ¤ïüÇP\‡¨‡h¥ë`¬Aâ}öMÞ¾£ iR–bË<³%烮‡/¯îÎÔ-ˆ +endstream endobj 651 0 obj <> endobj 652 0 obj <>/Border[0 0 0]/Rect[85.68 276.06 106.98 289.56]/Subtype/Link/Type/Annot>> endobj 653 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 654 0 obj <>stream +hÞÔXÛnäÆ}Ÿ¯è0@ÚšV_ؼÀȃ­K°ÁÆ1¤±ò° +j†1;ÃHŽ´‹À”¿Ì©î&‡¤ä8~0Œìb»»ºêTÕ©jJ¶]œÿéV²m»ˆ5KDÊ¢4fZ°¦X”‹ïV‹ókÉ$[• ©˜Ào;.cž?>mrÉ +6nÀ*z¦AB{¿ì/~Q³~ô‹”{ +iÂ¥Ô™ :Ã8ILÆ£à‡æàVlŽëŽÝ…IÊUPx)­?âP{ùpŠEGÊJÅIsõÊ í”ÿ7“ÎIqF¶TBº¡aaLê²þù¿?~÷¥ÿ¿Â‡Ÿä;pIž½ï’ÞwÒ8ßý¶ª~»Û±›j‹Mk](¹ Zäd[4áRÇ< žC¥ñ²Øð>}:%ʦS 29ñL<ç,Ä +ž¤'Ž1d¢ ë‚MÞåáêŸ'ÚÀR¤©xÅR:4nŸŠuUVEËÊP+Xp Œ;6ì!T£Ïá‘ÝaþP²#¬XnŠÒ*.5OôHòáP’TÛléÃÙØg‡¬jY[tl ä‡žK'eFk'ŸY-ƒCÙ5ë,gO‡ŠøÑnN…ŸWë»Ç‚mŠ¶ÚÖNçn$.)/5W§£GX^}Ê÷O;PæOƒë*¥T{@W8PJxäcÀ4»Ý!”~¿½¡Ê0þ’Í=µýŠpám C×¹CÆ(는;o`ù,ß8–g/U÷hï>?Ì3D„ÐƉôAS”Í]B<ÔWØ2 !1à,èôÀÁ¸Z)7sbÇû4@|ØBÕnoK“Õø¡cÏEîœïؽ=·/S¨Qtð?œÊg.™9¹’ÈXP5¹´Ékÿ…q?b›Ãñ>C¼…èï{·}õÕÛŠ²¢€¼Ì;¼ÍmPcœß‡ì_Ó}çç´ïâ±XdUy³ÂÛ6[š¦XwÓ]X‰ùûÀ.ýÃÙ ]¼î~}˜Wò©På}ðÅÊžÔ²š¶uì ÅÁC* iÈ;ïäWÒr쨷üþ¾þâ>üæÍ5MÑ›šÉaÖNþd³sð@&àÚÁ`2!âøü­©p6¢Î¢qÏNGV÷ <ix¤d2õ#Ì$4¬¥wW7·ïþú=ûrKjž‘N^ +\Ùk¬‹H‡WÑõC"¬š‰o~ò‘Þ7gšg©ãM;¢–EC›Ø‡¦Œ\h¶!åÝuµÃ3 v!80_׫0Ö=éÅ&l¬EÂS/ñ”žÒ·97Eâ—R«‚hAS0x!ýh/–Íaï œæ*(X™Q½~÷þýí$Gõ/|SÈÚ²/€Um¡6±¬vÐÀ€â¹;”tŒçtê8)c÷æÍöH²Z›HÄñ^¨ÓÇôÜ +ÓWýj<ªTØ ¼w3~f’Þ€õ.o[âÿÆ¡™@kBSÀM@3£ æDäXÆ·EçÚÍœq(ƒÉH°—Ü°ösÝåŸ`ƒ-´ÜÊÁ)ŠªáO<òŽb:èœyÊpÿ +Oƒ%IõÜSgNü’ÂÕ•Çd +âÐImQ0ÒÖ)t)|š2…^×àc<¶^웊ÑsFkQ=RòóÞµè`êØh¦~„ CßÒg¾¥¿º>'dÞçõö˜o ´=Õ ÞÁŸ¦¨ç—*zÉkÔæuZòx^§[‰n­÷~¡)ì—™7+HbѲ!ø\º5?W||½Â*Y}½òõš„ò´GÉ8oQ1˜j J5ÓªzÖ÷C:K&<7ÒÙ' iðÕìàú¦rvÄÝ& 4³‹‡ãÔ"^Ÿ‚obó_N P §‚9×W •$¯4°w» ËQƒûpâö ÉÊW5u +Ñ^ø·¸>k¤­ç¤©B¶Wã{…&Ž"GHk)XWjÝçä 1ÑõQ*Áta¯íï–…»Dðwã>™Î;·SÃ5‰¹y¿%ÇUOÄ®­=c/ÕúÙ¹©Ö9uæÝcîh œ¾óm5HÀÌx£ÿ¡¼eë|Ò;¾„’nÁyˆ?-£ÉþŠ²{¢Ï¬¢ÏÀT æ|îN*‰4ÓÑ2U.ש 6ÅûÚõ Ë‹çÈgj‹£qôÕ¿o!l‰z‹±Ì„±ò¾×˜9Žoåð>‘òŒ•"ä΀—Z:}æÙðEƬ¸ì¿qàidBÝÿm½ú•Ž‹¸éž:9­5ì.ŒéB ™`wDãUßsp-L5õ6ÚIß úï8±‰¹Jí{ÿ¡g˜ÑÕŠùÌÛl: +endstream endobj 655 0 obj <> endobj 656 0 obj <>/Border[0 0 0]/Rect[213.12 520.26 269.22 533.76]/Subtype/Link/Type/Annot>> endobj 657 0 obj <>/Border[0 0 0]/Rect[145.02 165.24 184.32 178.74]/Subtype/Link/Type/Annot>> endobj 658 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 658.26 397.92 671.76]/Subtype/Link/Type/Annot>> endobj 659 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 303.24 432.78 316.74]/Subtype/Link/Type/Annot>> endobj 660 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 661 0 obj <>stream +hÞÔX]sÛ¸}ׯÀ#Ù|“xÜÚ±g;î4ã(}Évv‰’ÕÈ’‡¤7ÍOê¿ì¹(‘”œd;Ûv:ž).ι÷ÜK¶™½¾}'Ù¦9Í +Q2S:¦kêÙzöÇÅìõd’-Ö3©˜À.²,¸V¬Ð‚ Å3Y¸0^³Å7B¶ø<û]¿¹a–—ìêõÕ?°·M.K®³Ã¦©·û ûißÕͺZÖùßÂJ:®¤¸·–Í%—βÅõlŽ)…Is«ÁÜ÷uµªvUív«e.=wÙ'vxî¶ûº “¾Y̬ñؘãÖ1®´÷žqSÒ„a‹NñÂõϱwŽ†Ï !£ÃClýŒpx†‡¦ìQ P•¤P˱ÞUmÇò¹ãEöþiUÑ̺zoØ–®e¶Ï~öç4¨Y>¤A*^…´ù\j/苸/ +ë¹ÉÞ6‡8bõ¼ìØ_ó¢ä*«Ó,mZâ°Oóƒ• ˜•rE³1}ðBÇàÿɤ÷ù¼Ä~®„Œ·–åŽÂeýõû/ÿó¡ÿ¿“¿wºà’˜=w¨ÉÄ´‘»ÿl¨?îvì~»A†ȵ.—Üf-Š²­›|®÷Ù¯¹Òø±^ñ¾S9*”“ƒšœ„ÆM…]áF"ci‹‚v—­·»]¾øûP7Ü á’`™°ÈçÞ” +áÜ×Ý3"T6¢3ºbO‡-©ëø’ôȦ€ +…S‹Óú«z½=‹Á@îÂ@bá(ÕCÛaa)Ís®P™KDRçLf<7Tç7¹¦‡ð¸a‡¦ŽáÌ¥á…<ÓEÙëbÚæv¿¦~ºÙ/r'‘&ÀG¦§I[Õ¥µª'¾R—©Ý¡¾(Ëu†®cЃ´ ! ;R£þg3à¶nØ}«§'¸qgw{õæîîöþ§ëQVXnˆõ8›AÉU]ýXï;¶ÝôÈ9 nQvè‚YÊI ñRƒyÊ~S¾kƒîðrÕlži²HVéŽÅ~„ÁèÈpjŒ놼ЖÌŸ~Õ€ÂÂcúì4ïƒøÉáòöVâ„-wUÛRÂ5‘Ô\¶­seáˆ\ê1ÁBŠCŠ~9D€/ÕIÚ’9hXûeßUÿ`$;P’Zà1§ÚŽºÃª0fGÆ›¤áªœÔŒû6õÚ é¥PO™’w{¸Ø-m¾ÌZ¯|(ä´E¨= ¿Ä¸…K,/Ÿrn cCu…¦Ô+|½¬Ï±¦‰ajNtÆÛåwon^wÕ~ó ­D÷ 8Z"ÃfM½Ÿšct?jFÙX(Ë(¿æš«S—(ÂÈw«0|±Pq拺äuuæÜ4 Ðh-èÿ^¯;Í‚©Ûý÷=nt§¿ŸÇ½TFÿm“«^Τž%§·!H6ÏO½ËU !ÿu“+=±%M8pÏd +åØéJ¨¼”¦Ãǯd©4>Ûˆ^rº\®vj:“á¹ÿËû·ïF)“ô°&OÑõ«–ÄñËØ .YùþÕ¡!žzÝ‘“=ßÆnÈ™³ƒ©›èLü_roÄZù‚Q-¸"‚k¸ssÁªês«:N0á/¸Ö$)s¨è[eô­ò;|++äù¿.²—Ê9K‡˜¼³¡³©%[z›þ‘b,)’tmVCt¢mõDL–†ú¬„– ÓyÔZâÿ)_0¯'ãZN»äE÷ +> endobj 663 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 494.28 415.92 507.78]/Subtype/Link/Type/Annot>> endobj 664 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 665 0 obj <>stream +hÞÔXÛnÛF}×Wìã²±6{á.ÉÇĉƒ 8J_œ¢ %Ja-QIÕõ'õ/{fwI]bîCÌ•¸œ™™sæPŠ­&/ß}TlÕMœa™ÌYš;f$k«Éròz6yy¥˜b³åDi&ñ‡‹Ê3a4ËŒR³Ùf"aEÈ´0l6ÇBª”Íî'7üÍÛ+fEÎ._^¾xÁ>´‰Ê…áÛU[n6u³b?7}Õ.Ëy•ü>ûžLð¤Ea-›*¡œe³7“)LÊ4ÚÖG¶¯«rQµì²\¯oËy¢ +áø»Þîûº©:oôílâ´ÈŽæ„uLhSiN&ý!ý¹ýM]ÀþñMd†6'óRøl 7Ó|HEªEêW.„úkÙõ,™:‘ñO»EI+Åûj¬¦kΛÑÇmïã¦vþ%nÒá*•M¦Ê’>¤ +ë,³…Hù‡vv,öóžý–d¹Ð¼ŠVºèbÛDû(ŠÏŽ¤,kí²!Íi:/Mþ¦Š"™æðQLµTaiYâ(\6\Ÿùá[ÿ¿ÆÇT;“ E•“CíÉX;eCí¾o¨¯Ökv]¯Ð¡z­O”°¼&»ªM¦Æ‰‚ÿ•hƒ/«…°á”i'2ùÏ`£ËÜÇø¾Ìè”’È?>4}ùw2ûsòr6ÓáñB.@“dÂ:aR2AôuÃë¦g‹*q|Ù¾k·ûÝåíÝU3{ØUŸyH®€À! ÝoðÈ¢Z¶`-”üÎ)¨„‹§´ÑAÂPÔynЩ,ÜWʤÙonI›@§ž+£bÜìRæQ§?Té3^S÷ÉäÏ›ƒR„¡LyÎϲDTI--d$„5Ó°¥<ù Âî)‹û÷ñ<·§º(Ž†×ë­ÏCÊï0¹»S„x2{NW’ô=ð±/Ûþ1: Ï’gzœ_n7»mãÇoûÚC€ú°í¹†³ˆ_Õëõ“ÖçýÐÞsô«œä©H¡‰ðâK8ÍQ/¤Îîñwþ` f³ +endstream endobj 666 0 obj <> endobj 667 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 668 0 obj <>stream +hÞÔX[sâ6~çWèÑžk­‹eë1KHš–œ}éôÁCÜ8vL;û“ú/{$ù!°¥Óéd&6Òѹ~çb´|¾_´Ù C¾ Ä\´ëÁ—pðùŽ ‚Âõ€PäÂÕé$ š4…Fô Ê; p ÚEFÙè*ó¬lÿú¢Âß›ÒA(†L­=âÒ>šçq±í¨Ò.…WQ¡â9*¨Ëa)Rë[•Z@”€YYügÚ Â°¼–¯¬Mnéö•*nkÅsŒ–Mqò 8íwà †f唼zÅ®® àÍqmƒÆÒÊmø—¦¹M­¬$VVyßç‚(Á>kD?ï·ùþmgüéÕþô½¾?­U¼ÞâEm‹áÓKøý-îÂ1'Á®@.#g'qqZ«Eé¹ü»Á¦ñÚ$πͨ +ê>-Ð|Ÿ–}á]ñ¼ñ‡Ö!Ïnãµ:üÏT™%4ÀüM§†I‡*xЧÑN«Ã©`ü'ßu·f­y*ªsù +Íwo’<;,†ú"õýªßûÚ …ìás”| ³>ul©O]$\'…µH󳱪h/H3ÅX‹·x™D):•-c.MߘQ|W¨?/R†ø€ö-‰N Ù’.[Yàu‘V–Ãjä»…*sÕ¬§‹y¶Óuö›-Ì%°Éa'ÝÇP»c¥žuÃß5¿¤¹®ÌÜz‰6u&ŠTß1¸‡ž£ò¶g|ì˶Ke…_Y¶âDõ¥´Êâ_»ŠÕ‘®°ûe<þrs?Ztdx˜·$øuѽÍB»"*â×8+Ô!‡Xò^¨ZÙ1Ì_ßò ˆK3ŽÍ*£ù®§ ‘^Kq¬a¤ôHLçë aÕ[€N¿Î¦“Ñ$\ [˜ÃåAB[=Ó|ìõMÓ=غKÒô<ƒZ”×1èîa<î† ¾cäA–)®ôh¼Øa¼ÞiÎÇMã•imR^Ùð¶mV×阱~UkpuÌzL@{?Ÿ>κ.€éæ|xðíudd0Ì›yÌz¯²½!+5à*ªN=§}W=€µU…ý³KL±Çj§S·¹öÈ⛑ÅÌ¡ÌÚÛ°¥,R¬3›q犟L'P„oÇáüqÜ+NAí•'y÷˜šÞCí„î÷îè(jü„Ž³‡Él>æáCÏýV@*O“w`Ï¢SO<'qß]÷`éµq/îIò8ªk+;´uÃà—@º çùèþaÚ³cz~è@6¿pn=1\ÔU‡Úgê ãüØg'õÚ#F¬f ÏúpÄX o&ßnú±ç§0su5y¯cµÆçzq‹ò:uj1ž†×îÅÝ È#£ûÇ¥èÚÍ©Í~1 nÆ=ª?O5—“òˆåÍDØà ÷õel'¼­ë”ÞHX¡-\(Ð0à#3Ç«êêG0$†¹@œQDÔݱ¹…uO`¨ùj½¼¢­v8 °¨v¸Û:ÃD Ï¨[Ù6/Æ &z¹ÍêoééNö +endstream endobj 669 0 obj <> endobj 670 0 obj <>/Border[0 0 0]/Rect[63 451.44 130.32 464.94]/Subtype/Link/Type/Annot>> endobj 671 0 obj <>/Border[0 0 0]/Rect[490.98 465.48 515.64 478.98]/Subtype/Link/Type/Annot>> endobj 672 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[234 153.66 335.34 167.16]/Subtype/Link/Type/Annot>> endobj 673 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 674 0 obj <>stream +hÞìXÝnÛȾ×SÌ%Ù 'óÃá—©c)ÒEkÙ¢ %J«F¢ ’êÖÔ·ìwæ‡"i¯»EQ +æH3<ÿç;ßH²ýêíïî%Û÷«B3+J–—Ó‚uÍj·úízõöN2ÉÖ»•TLàYZ®³Zp¡Øú´ÂE^i¶Þ`!dÎÖ?¯¾&ïoï˜á%»y{óÝwìS—Ê’ëä¼ïêÓéÐîÙ‡vhº]½iÒ?­MÚkR¼2†e’Ë°õûU‘"²ÕDöç¦Þ6»©Ç‡z“ÊŠÉ7öù|mÓ;¡·ëU¡¸-àZÁMÁ¸ÒUU1ž—$Ò9éüv›pCþt‘¡ÚmÂó1.•‹FÅ°™—1d©’d©[ÞÔu?°4+¸M~xÜÖ´’ÉÐlý‚èY&m +ëñ?„CÝæ§pHù§&ͤ®}È5ÖÖšŠçɧîìOl/›}ImÉUÒ)}Pqnƒ|$ÅEGP”•*l sžGã…öÆÿɪJ³:ªL é—†¥™Ëâó×?þëGÿw…)wÚrI™1whÉ;i|îþ³¦¾;ÙçÃjQkC*¹Izôdßti¦ ^%M•Æ—Í–Ç^ íd•k§`rÅ™b‰38h* @)äe 9)È¿d[uºþË8¤âhTñ 3¤ôñ¸l6‡Ý¡éÙ.Õ +>œ©ç.{H•Àê)ÍPÛöÏ;vÙ¶Ù9Ó¥æVO$=3ÉàÍ–‘=œý€÷Ü’zÖ7;©ýagæ¥,€íš5gerÞ Mˆ3«Ùãù@é^¶Ü–¯€óÃO Û6ýaßzK|h"zk^•>°nE±EŽJ]¡ÝC\¿&ðºû¾n¾Ýµë´H%B#¡ÇTÏ“%*€Iý²¥òR?7 +CJÑ¡I5€‡ +Ä8œ¢½Ú®;Ÿœ/A“ šרkq­ïo×÷³P<¿†)FÉÚÐu»]ÈUØÄuR^÷Ÿno>¼ûøLFE55Äùä÷Íf8œ[W@äM©Ýá‹Ä•†û¶îö—SÓ½·%S’ëÒÕ…}ɤÃÕסõqqƘhŒš–…¥·Ü ÈßÌêœËhõî²ä ß뾧ªë04Lâ2åó$(K9r$_b´_㕘3©É-¶z¹®EÎdÑJñ¯cýS;ÔƒO»TÙñë4S +¥pšbÉê ô1š‹ª@ ÿ«E± ¡(¦A…neþí¢RǪê¡q O¥IÞ J†üŒ %¯õd^”Lå¼K)\‹Gl¼v™‘†9N¢Ó¨Ñ^õ'ÈÒ^ñÆ`}ôÊq‚Øø‹É‰ÈŽÕý¢j‰ìa?7&4¹Ó]Œd'(Ÿi(b5ž¯9º½{KyýX·ûK½o0@8W¨8üëšvIeÎ+k¢H_g>9œÍ0/£éƒòÈ4WfÑ"÷®üÜñõZùó¯ +ÏêhA¬¯BZóhÊ!äW@ý˜M‹d‚‘O͉ŸÊœ™X• Zø> )(*Þ –úÿyD·8ô$ÏuUF§Œk2<=ÎM›8\%oâdÑXîDñÄäˆEò›…^Ãsi쨶(ü -ù7ø£ÿT7ÊÆjóŠjÀÄuïîKýà’ÊÚ…Ûx‹ø/faF¶(ó©?¦ó)7Gš d^¨_“w¸„h ùÀska˜Ö&X3KÁ/qŒxç‰|SîB0†¨¥·k5ƒBþz`„¥ø²¦ÂXHKÀΑ¾´cëɆ¢[Ȫƒäæ±i·tm:ûÛ̯=¿ö„‘âe,¨†|( 2(Ζ³5d¹–ÓÂ:9Ï€),~&»lB*É[öТ‹•ÈÝÄÌG(«¸(¦‘ô-Ú.ÆÒ2œOr›/ãYP/D5‰ñ¨·¬FЦüh"ˆ˜xxl`y8Eø.Utù:û¨^X5ÀA¿ÜÓqGè{8RâyJé»ÚŸ܇Cxµ}3¨yi¤`ô4G&®Í•ä\úJð `,Ñ}÷9œ++iÝîá ö¬FT¤L¨¶Gà2¥ BÂ1y–ù¶"Ï[çÿ$ýW’ô Œ²ËÝžõjàÃÓ±é}ÇK¿ŽÀ¼r1LÚËizTGˆ/ó)3‰¤/y‘Oêñ$)^ÿñãíœç ì'ª(0H‰Žs Üž8'BYÎáÒKÿr¨_qÊD—®ÇÆÆ5ù’j óŠKœ¶gp:šðáÝ’(ê)K~ÝÁ Ñ@’§hu©¯US.fñš‚èt‰>*\®x.M‡s(Ð9×q?Дå(RN:k´+òÉe_M®rÄ;f¾fî…˜+ª,Iâ +FTíî—ÂåT¸.¹fî¡1æñ(µ )æƒÐ»~¡‹§IPâäxiÐïãOzš%ÆxøUŽú&þ”Ww%¢ïÃo}ã:[¼¸£ + /SŽVš‰SäBÜÁH¹1öPÜ\¿´÷çâU +endstream endobj 675 0 obj <> endobj 676 0 obj <>/Border[0 0 0]/Rect[283.62 615.24 385.2 628.74]/Subtype/Link/Type/Annot>> endobj 677 0 obj <>/Border[0 0 0]/Rect[490.98 220.26 515.64 233.76]/Subtype/Link/Type/Annot>> endobj 678 0 obj <>/Border[0 0 0]/Rect[63 206.22 130.32 219.72]/Subtype/Link/Type/Annot>> endobj 679 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 384.24 442.26 397.74]/Subtype/Link/Type/Annot>> endobj 680 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 681 0 obj <>stream +hÞÔXÙ’ÛÆ}çWô# -ô‚¥•YRNM”©*y].ˆ9ˆHp +­è;’Ÿð_úÜî€3#ÙNÊI±ŠØݧïrî¹l»xý§{Á¶í"U,‹s¦ó”©˜5åb³øãrñúZ0Á–›…,Æ‘g\I–©˜Ç’-÷‹³ðXÅ–+œÄB³å§Åûàòêš%ÄÖÃkÃðP罪՞¥ëMÑv,ŒRžï׉ +×î„Ut̃:|?ì/~P³zðƒ¤;Æ" #¡LLZã<ËÃupÛ܈õqÕ±¿…YÎePúYZ¿Ä¡öóÃ+Ö<1™YÊ4ëí¬u>VüOLF9Ö0‘Œ…;MX˜\Ö¿þð»ýÿ|¸$ß©Œ ò\Üû9é}'ç»ÿ.Ô7»»«¶ˆÐ ±Ö…‚'A‹¤lË&ŒTÊMðc(n–kÞ'£O§LÚtJÁ&çD£¸É×Ø3 O3ͳÓÄqF;Ý&×å¦y{¨/ËMqÜ…@ˆ:‚‹¯ëeˆüVÁçÇŜȌf×'~Ù/|Ø{#úì½+;ìG¤MU†J`>ì+Á¡ é¢eë¢+ئ9ìY÷P2¿RâWŠy*“““Üüzðö¯oAcoÞÝ,ïÞÝ\݇ËœæܘñkIÏ­Ò¾ÊÚ®èÊ}Yw¬ªí²Dˆ4ƒáF_<…pûÙT;œ½kKûrÑl4YëÐGÒ€ÔàŒŽ3™©Áò Úu`ºqO>Æ¡Oû¦÷u³m«~Û±_Î/ÆV»¢mYw@ÄX‡Hçë rE`A/¸ƒ—ù©ÆvP¸ ¯É—28„ôß°ösÝÿÄ^6¡R§ûa$‰9÷!Ý+º +Z|@…9혠nNë•(<Ö fö‘\fgqñµ!1rç)^±¶,Ù¿`Y8”r”ìËîŽ;TC¡qý*4tûß}:Ê\!<‘‡ÏQØcX,g<‡ò‡Ä<åŠÊNƒÍP÷ûZ‘¸ ìÁ¢Öµêk“ …Ñ¿¹º~Ma{SÔÛc±u/Rìå£Ð‹û,´["Oã¯)ë¹jH8ÑÞ‰ ­9¹Çâ©%rƒ"ø2™†upoÝoG/—Ò G*¥®ÊÓ ˜"Ñ)‡pL!íïƒ +9¸.Ã4ÑPçØçó#n—ߎ¯9%/Õۘå§.¨ "ó㈰ê4)œ¦°$O&EePª®ªWGï`¼bŸªÕrz]­À0}i€†Ó3yÞKÿØÍî¡pYl”96²ÔMCÜñÛ@5T}‚¥{î÷_ˆøŸB–P0=îEÆà¨Hb»Ù¹·œµâÄ8œ‘eÒ~?=ˆ‘Ñ9&$9`ÝE< +É®±|Áõ2TŠ¹ÇAÙo*„Ö¦ïä@ûdIÔX2ÂÿªÃ‘‡à…mJ"|pg"vJº<Ø¡ ÛüØòäU%žsªôQkk#ú%Lƒ?g…ÒH·litè´«“Û‡‚cHŸ ’¤TpФ€Xm½OÕzŽ±ù8Gûý£?¢f™:s?¸ÌõŒÿI'¼àÿ¾Ýÿ“Ü»,WÕ¦B>Xc¤dŒ486ìEg|†‰!Bñü°aGháˆâŸ A kó|öVK9ý:lœ¬¬ZØ´ƒÃ¨…ô|ý5óÔLä‡MWÖ.ûФ—áüo%TÙVÛÚ!™Rç¹2WqÂSíÅ@¯ÆoÉïšÒmÁƒâIöE!š§iÿÃB\Ÿ ñAŒxÐM¹=îŠæïÍO"£²ÍL½‚E×'O‰û&°¢^OµªÞhI÷iɖ¨ ,”ÁÎ-L{õ¥5çžf­‹Ç•MÀv*Á’¾†Ë‘ÛE6ê@®–÷³,˜ÐÎ [ôsGhC3uVF™v{uñí››³¥ÒY1êw–©t®lm.õMδqõÚj4Wkg˜77/6,$”ÔO6åéÛ¢{˜àGKzÞ¡Ñê2™t,Ž`a¦\ÌÍ$†2㶳¼Œ^Á÷89Îë’¾ðØfZ“d°#úfÇ]òþsŽwlC°ÄùÐóÄô(ÄߤåAÂö·C*œ´É'ZÛfNí–ò|ܲ=Yú—ÄÕ(u~E@ ‰Pg±„Ø \¡z[vÃWBmb≽ƒ#Q,Ó +S",ëII4H4ºyW6IäÈù®Š;#€€0Î9hÕ~^}vqCz.E<Õ­Ñhá/4bfï{á³NŒÚ-T7Cí–yªÝ‚º0Ù©éÐyÏEŸ€òßÐt‰ä.•Ÿn»(5û†ë¾ÛX x˜w9)ðæâ¬Ëy¤&‡˜çëú,ð…tâü÷ê³È? 0Ìv›S +endstream endobj 682 0 obj <> endobj 683 0 obj <>/Border[0 0 0]/Rect[85.68 450.24 108.96 463.74]/Subtype/Link/Type/Annot>> endobj 684 0 obj <>/Border[0 0 0]/Rect[241.86 95.22 317.7 108.72]/Subtype/Link/Type/Annot>> endobj 685 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 588.24 406.8 601.74]/Subtype/Link/Type/Annot>> endobj 686 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[234 233.22 334.02 246.72]/Subtype/Link/Type/Annot>> endobj 687 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 688 0 obj <>stream +hÞìXÛŽÛF}×Wô#¹1Ûì;ù˜Ø3 N"Œ•}Ù-QnF”@QqüIû—{ª›¤(JšØŒ Àb€a‹}«>ÕuêÛÌ^þó`›ÃÌ*æÒŒéÌ2•²¦œ­gß,f/ïl±ž ÉRüá!2Ç•dN¥<•l±¥X…§:Wl±D#š->Ìþ½¾»g†gìÕËW_}ÅæM,2®¢Ý¦)¶ÛªÞ°7u[6ëbYÆ?/¾ÅN*ì$yn KÖ°ÅëY‚%SÝ­-Gk?”ŪlØ«âéé}±ŒEÎmô+{ØÛª.~Ñ»ÅÌJî,Žf¹±ŒK•ç9ã:£%ý!ý¹}'ŽÎ±þ¸ÈÐå;qò—Ü£‘3tê¬,•‚,õ-L}[Z'–»èÇýª –ˆÚr¬¢gÕ1¬ï†}× j–Ý ž©0q"TžÒMmçLÎu4ovaÄê¸lÙ¿b—q•Ý*‡n‹]Ý­§xtRBYJëz˜µîOU0þ¿LäyœdØ#Od*BÓ°Ø’¹¬~úã/ú÷]|øI¾SŽ ò\Úû!ÙùN˜à»/kê×OOì¡Úà†:ܵ6ÜDÄä¡lâDYžG¿ÅRáe¹â},váä¤' 2y†g0Ð:;â/-2 ü”¢p7ÇmY·‡ŽFlX—[r¥<…ðÔд¨ý¸ÿ9QÀ{‚Pô ¦ºÛÿ'”…@ÂÿöˆƒI¢°Úÿ>°ö±dݦ&,h¸¹$Uƒ±Ñª\7ó¢}|õþ×ÅÇ}yfFÆóÜŒ¦‰žHEçÈ–fL_°Õò‘UõªZmIFíÉ’Dh®í}ªán„÷°„-OÄé@œb!Ð(bü;øÎÞs¦IìØpDZô9xƒïºzxË€©Ã}ÿil[°ý®¢¼ÀÚ~œ£›ó\t8¥gÈVóéÖy' z;VË:@-ö)=ƹ„!@1ñXãÞÇŠ:v¾»aÛ]3B؉ „eŸ dØ¢ª×´X7Æ¿pJmczU´Õ®~Áeɼñ±þíc'2ÇQ53yÊ3Ä +¢ˆq›Y ñr +…nMce*Þכ㺃ü÷Ŧ$;ÈÝNO]‹XUî–kWE[<ëZ=¹²ïöå²ZW¸ŸK0ØèØ°÷±LÑúˆÒÝßÝšÁ ð!¢šƒ¿ºY[®ÙÃ٘盬:Í^¢T ;“°Ê5%ƒ•ÑnÝ–u¸hý­£ÉŽ»ì0žÂmUªM, Ðô ¦xžïøx̤Àœ|3XÑ1˜g…ª)Ü׋ØÒ52†û‰*:ãE Z¹[ðÜvˆ+ºÞ´LUÆJ€¬ÀÅÆ3™ðÌåA[7»íCXXyfó7ß¿;»’ëuR"6CùµI¨­«'ll#v"Ãìº ‹DðªŸY4¯û !¯wK+LoŽÙE8º ?Tõ„Dϸ#ã—OÅá@÷¡ º Gæ!`¿(Ü A)ÉÚp4I›^Þ¸žyvøX·ÅïŒø”0âéù!¡‡'V¼‡”@œ8Éxú<'MHjä­!j”áb5¢w +î!ÖœšªÊ ·¨Œ?88DfªÄª)2¤´ÑCVïì æœùW‡(tžÒùÀk]†~{wÿ’Ðy[Ô›#ø Äãêà)ükÊzZ^€¾sw‰Üy '¡(X‚óLîTôÎûÏ^,ä˜l(¨ACŽ;£»•>@)%´¸Ê±F1ÄþS'‚!AžREñºcT7˜AyÚë†_†híxÁ¤U>$;’ì tA¦§5ìèEO”*G8Ž6™ÜÇŽþ1ÙJG7lkm˜°¯bÊå~èî:Ò)óÌÖ ,×¼F M÷G"›³¨tŠ¬Î-@J3=¶à§øœ´Çôª¨ˆÛŽ4Ë-©©¯IM}’Øh;ïsôI‘Äô*ìšÂ”ùpŽ^WúÛtEVª1ÉÙa¿|•^Êï½ò±pŠ&aÿ!Vx<Æ”µ«¥½é_Öþå*ü8ÉÏ0/<Â>y+ž—±BZäËÓ^_PÈžbßл'­;Œï ”[b·óËgŠ]é ó‡ +endstream endobj 689 0 obj <> endobj 690 0 obj <>/Border[0 0 0]/Rect[332.4 356.22 437.52 369.72]/Subtype/Link/Type/Annot>> endobj 691 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 125.22 407.94 138.72]/Subtype/Link/Type/Annot>> endobj 692 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 494.28 425.28 507.78]/Subtype/Link/Type/Annot>> endobj 693 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 694 0 obj <>stream +hÞìXÛnÛF|×Wì#ÙFkî•äcj[EŠ41l¥@‘-Q2›(ª©?©Ù9»K‰”lçm€Â€´"—{æÜæ -Ørtòã•`ËÍÈ*–&Ó™e*aM9ZŒ~˜ŽN&‚ 6]Œ„d þð%²”+ÉR•ðD²éÝ(Á)<ѹbÓ‰Ðlúaô6:;Ÿ0Ã3vzrúý÷좉EÆU´Z6ÅÝ]U/Ù‹º-›E1+ãߦ?Á’ò–$ÏacÁ…5lz6ãÈD‡³eïì˲˜— ;-no¯‹Y,rn£÷ìrµm«ºÜ¸Cϧ#£s8f¹±ŒK•ç9ã:£‹VòÔv÷á;‡þ}„†"£ÜM¸¾ Lî‘3ÜÔY‚*Au+ë±¾,6-‹Ç–§Ñ›õ¼ •ˆÚrï,ªcÀÛ~›šÙMØ$ýw"L<*O臶X§©É¹Ž.š•ß1ßÎZöKœf\Fe8eL¬êp>²â“P˜¥´ig­;ð‰òàÿf"ÏãqùX&Â/ ‹-ÁeÝ÷§ýë[¿ÝÃw?)w*å‚2—t¹CO†Ü ãs÷u¡>¿½e—Õš¢ÖÚXpmД›²‰ÇÊò<ú3– +Ë9ïš1´S*];Y°ÉDƒ6µ=’qu™’— 9]Ý×mñW<ýct2JÿxÎsë[“t„±\i:‚ZÒqÔÛ¨ª[6/c-š‹ªFó¬O¯ßOêéýº|ùðò¨=êï3<4/ ÈOß¼§Í¿—,— è×*Ï|VxbK£ö~=„)@riØ–¸-Ïhz›«ŒÔ3܃ ðAþîÀvÊ3iÔ¡éõ‘e•¤òØrÎ…’æ Ão6°æ¬h‹CË ™¦–ñÑXÔ~óä6ÉtÁ»Øa|°LæòïrÎ}ŽQ¢ÀBËí]Y·›!pšäJ™€eþnÄì°ûÎÝäRô.ã±Æ¨â³Ý¢ž%®ÚýÞ°öf—vã4\÷:1Qû¥¢Ù—ÕÌIÂÓÜôbáð¤¡[Ú.lôŒ}¸©f7¬ªçÕ¬hK‚P´ÃX`hÙ£i‚KI༮j¶jP-Ñ™í=›í§§Áôü êã"vÍL7»îÝxì£weïïúÉHû ÒB„H—>¼)PÃhÁÖ«Š¤kWø1 4ºZ˜Þyfé*Dz£=ï?’vR¢‹ò¦mhb.ncäwDˆºÁ’.³I ±éB·v·jÊ}ì8 ½è «z+¨z>¼·"º‹éRÑV«úÛ”%ëãt)sø«™Î1½Á–Ägò|/Cö­¢è>x5Ïvírä)ÀºX–„ ‡_ø8H­Ôˆïc©£óŸLn'ÒDpüj]ΪE…ru°mvË«{ô“Ž¨œW ¶ÅÜ#Ú;U½“wš +Ž¼9#<œ–·dÕql‘’[LqÊAvöSÒ¡ŒV‹¶¬}©uuG£²'`?uÔ¼ÜTËÚ#R˜ân + 5nE2%e³0ˆzá ä1b"£nņ +’ú ŽÔ¨²,LG‡ÌîZŠêYàñªŒøž±q|&¹h-šÕÝLB²Ò<Ìe—¯/Î/§¿B|¿xõbúâõ««a=àøA«É Q§¼ˆ³ÁdÞ¶‹´µ¦›¡£?Ù^ê/ª["B’Kø÷XBõgžýÒ£ Î(š0+\—Qñt†Îcø©÷ˆåU4Ïö˜Ug¯ lv[l6TUÍG²áËÈUòÄß^¹ë Û8uÈ=Üô ×Ѽ$áïb(O¬¸Æ;Ïž‘’£šW»W’ÔW/lRX½GÁyÔ©6‡Tý‰?de2gvï©îâ`QR*òe÷Ú¦@š)“!Î"1к ²ñ˜ú4´°!L†Ja¼{aŒúw2ÑÁã.ƒ ؽ³/Ï'']pÆJsÙ'xÚ»«Ðν—E½Ü‚W!~‘«”$/ÍϦ¬ßmÑ]"?*°!uŒý¦±âÒ ‡Ö§ ^IïçšëQÉûMé]¼ÙÚèHì¢ÌE&Ž$çšg7AŸ’œÞ|²³ÿAÑ+I’~ã¢÷Å›ñ|0#Äh¢×@="{÷ä/4×ö£ÿ+êI^} y­—¼ô>[6ù2É{8¾¢èýœ±$v¢%ÉR7Al·Ÿ¢Óº¤Gy¬éMRjÆ>‡ZWóT˜å[ÄnFZ/ bW:±›‰Ýc¥+°;cZs«§{…ûS£ßÇôån&Žä®òõó¿ÞýB½‹Ìý#ÀqÊ)Á +endstream endobj 695 0 obj <> endobj 696 0 obj <>/Border[0 0 0]/Rect[145.02 615.24 189 628.74]/Subtype/Link/Type/Annot>> endobj 697 0 obj <>/Border[0 0 0]/Rect[85.68 260.22 115.62 273.72]/Subtype/Link/Type/Annot>> endobj 698 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 398.28 420.6 411.78]/Subtype/Link/Type/Annot>> endobj 699 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 700 0 obj <>stream +hÞÔW[“Û4}ϯУ kU[²¡í20å2Û +ø‰“†n’ÛKèOâ_r>Ivlï¥:;ËkYßýœcŶ‹'_½TlÛ.¬aN,+,3’5õb³ør¹xr©˜bËÍBi&ñ‡‹*œ0š9#…Ôl¹_Hœ"dV¶\a!UÆ–§Åkþìù%ËEÁž>yúùçì‡&Q…0ü¸mªý~wز¯]ÝlªUü²ü–L°¤E™ç,UBÙœ-Ÿ-R)³x¶}UWëºaO«ëë7Õ*Q¥°ü»:Þv»CÝúCŸ/V gš¹eB›²,™È +:ÒéãöºÀùã‡È m0þ!"òRúl” ³¢OyªyêW6¸ú¢j;–¤V8þêf]ÑJñ®^‡Ûѵà‡ÞÇmßÆMÍêmܤÃUªÜR팊*'ûÚa$cíTj÷ïºúÅõ5»ÚmÑ¡½Ö%Jä¼ÅL¶u“¤ÆŠ’ÿžhƒÖkÑÏb'§ý8Y€É]œ1¢,Ôø¶[— w)}¤2¹®7ÍU½ÝOß¼»<,“ÜÁ»÷73P9Ø9Aˆ²§tÙB‡“®êž+…IÙÕ‰ÁdP¹$ºiÙºê*¶iŽ{Ö½­Y4GRÀÖPé'ùÕó¯¾þþ»—Éò·³C™PeÜ.cálëÖvUWïëCÇvoŠÐn³»†– ö*`›Ò"/FûÙµ.Oíß­ší-÷ë €qÝ:õ?Õh(ãaw€™Ÿc —Cž'aä¢,ÇQÏ9€­®«¶eÝ•öéwøôJàÒ‹Ê"½øñ.Q‚» O}”…È£›¼aíûCWý¨6‰AJð^šácšn÷¸âRupUoÀCJgÌ…Sã’} ýÏ<€£È‘›$v~qJ/‘XxG›fÀÆ”ÈLYôiÊCZy÷þfꥂBqÅ(t~áÛˆeJLßÈðÈë8Að63 ÕºœYFw‡óíEØ<8ÆízÕR~šg¨¹)TD;wÇ”W&¼«f¦4Ú°ÈƱþœLJyøÐQ>£Ük‹Àà@Ÿ&¨¥]‹,v(}EŒ¼K•géê½äÇMWB_õMF/;áŠGÀ~/"êv·=O¦HuWZ¨"ÒË(¯QW¢³Àrü¥%>%%4Á˜ºÔ`grp¿ Æ{jgZÓE­i‚Ö4^kškM«ïQ*ßÿ4•)Zd#Üü8qJ­è›y–é8Êûié½ÈÏ ìŠ|&-Ý Ž§‡äñÈ÷»bÒçÏ'ù+ d÷ÈIó€œ:O÷èI@´LJ”._M>Z£HŠu…fÞ‹ôóôÌ‘{uy<õҲȩÃ5z¿¹„+EĤ±7‹µÞX¬?JVàö˜ªÔ®×ü¨Ê⃢’0îˆJ-Ñ0çñ¼OVOŸŽ¦ÄèX>Wy9*?«<Û Ê#öžfï!Ûà6gòÿŸÊTè²øä„f6š¾Çî¨L9F¾l"-‰¡–ƒyj™b"/å@?1tÀþ4ÈJ-ƒ¨°AKM% ä/ ß ó +endstream endobj 701 0 obj <> endobj 702 0 obj <>/Border[0 0 0]/Rect[220.32 520.26 288.3 533.76]/Subtype/Link/Type/Annot>> endobj 703 0 obj <>/Border[0 0 0]/Rect[85.68 165.24 112.32 178.74]/Subtype/Link/Type/Annot>> endobj 704 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[234 658.26 340.5 671.76]/Subtype/Link/Type/Annot>> endobj 705 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 303.24 438.6 316.74]/Subtype/Link/Type/Annot>> endobj 706 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 707 0 obj <>stream +hÞÜXMsã6½ëWàH&# ø8N<ãl¶&Ù”­ä2ÙJq$JfÆ¢\$Ç?iÿe^$EÒ²½sHRI¹JIÝxÝýúÁ‚í¯¿¾l×,´b&±,µš©„ÕÅb»øjµx})˜`«íBH–àa W’•ðD²Õ~‘`ž¤N±ÕƒD¤lu¿ø½}wÉ2nÙÅë‹/¿dß×±°\E‡]ï÷eµcßTmQoóuÿwõoXRÁ’ä.ËØRp¡3¶z»XbÉ$íÖ–£µ¯Š|SÔì"¿½ý˜¯cḎ>±«Ã±-«¢ñ‹¾[-²Ôacšgšq©œsŒ§–ô[Ô’Ý¿ÇÞ9 ŒßBFù—ØúŒóp8†—©íQ W¥ WýH_ßçMËâ¥æ&úán“ÓHDm± VÒÕFU ÷»ißv“êõM7I†k"²x)”Kè&µ“9žFßׇ0cs\·ìÇØX.£¢[¥éLªn}DÅÓÌRjÓ㜦½ó‰ +Îÿ ç⥅ ·”‰ÌŚÜeýõÿ¿üåSÿ¾‹·;e¸ È%}ìP“]ìDb÷Ǻúæö–]•;d¨A®µ±àYÔ (›¢Ž—JsýK…‡Å†÷ÅØ•“‘¾œ4ØäD4zN4˜¨žLF[LhwQ}¸W¿œhCHŽ*ÐHt‡Fj:ʸ*Ú#<“ΣØR8›³»CI,ÄÚn:Ê‚ “ÝäduSlË«™å”Ë“]1ص®‹BÓÖT´0{Œ—.k8RÄ"…P˜—±¤2>„ 5Û÷£‚•Unc%ÂzŽX\÷1=ËÃŒÖߔݧի°!2mÍœPeO¨2xÙ ›‹è!ºïC&UÊ´N¸MYª8¸ëd Gî/i ½×àTâëýÀ#ëÁ¤Ç4t—ï + +…CC°)ï€ï2¤khˆ¨òO¿ÉÛüÙÈ÷½Bˆ`ðú®X—Û²h ”@æ@T{¬ÙÇX&=Ñ„ܰÖ‘¾Ká]rFV¨]ø½Dè3Fþpö¾óCV6¬)ZDX~.Ã*„¿™Â¿œŒÛ¶¨Bö)Ißnì3ö1¿½¡¸5å® +Ždú¦­¸³!<~„ŠÊ€¹Ön™Ö”ÚuŒiÑõ:•/’%Õ4:«D¹ wáU£ä«‹Ÿ.«UœY"=¿›õòI1g™|œN ÕIU‚PFeC[¢—"ÆO°ÝÖ‡½ßò´TE³1N£l¹¾xóÝÅ¿Þ|óÝõ$g2î\¾+”Š6o‹}Qµ¨?o‘Ƕ¼ f6*ú!œÖ“MäóÁ–×»#Y&e1úb@Hã¿ S¯@Ê)Ÿ7 +Á˜×­èE–êpóÞQÁ«hŽ +¤&ˆò¶mä!î†hLw»D¯!º˜ÖÙgeÂ¥9J„WŒ8’°c^CËA‚DÐ{3¸‹bÕ† +gšöGZh`Ìõå؃cg³K¹àgüT=r©æ']¶¾wùšyŸW»#¨]Øc©)"ÔDª¹ÈFóq&{”Sú .ŽIèPòÔ8 ÍŽ®}ÌüìÕJö Óé Ši@ÂXgÄÌk¤Ï(JØi£ŸÕC"y¸£Ç?EAÞPixyš¾~ÛÄ>æÞÿDór¾Wè€ÊÙ«,`µwS_=µúýG¯z®V'‚‘á‘ï]ñÀƒà÷3ëŽ' +1™oÖsÛ*™Tfoy¤ Vž¶ Ríú-Šknªýwf_ÑI"BÃô“ЉªF.üO;ǘ¸• +;¥ë‡è t +swôÜ5u'yܽ‡ <Ñ·QÛU¼L‰ÖОU´ +ßœiOÍœÂÖ›d›Ïµ‰/bF³V þkéh#½b÷7åúeº)×9 ‡NhŽ”?«´–#=ÒÞäÄâïRÃÖ§S¬Å)ö>†GÝ?áe¯¢G2Éã÷„Jê’îYu> endobj 709 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 494.28 403.26 507.78]/Subtype/Link/Type/Annot>> endobj 710 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 711 0 obj <>stream +hÞÔX[oÛ6~÷¯à#µÆ /%=6·aC‰»—v[v´Ø²!ÉKó“ö/÷’’/q³ØÐ "Ê"ÏýûΑ[ŒÎ¿¿SlÑŽ¬a©ÌXœYf$kÊÑ|t1ß(¦Ød>RšIüᢲTÍR#…Ôl²IH2Î ›L±*f“§ÑG~u}ѱËóË7oØû&R™0|½hŠÕªª쇺+›y1-£_&?B“ñš´È“„•P6a“«Ñ"edë=Ù·e1+vY,—÷Å4R¹°ü‘Ý®·]U—­z=Y-R ׬H,ÚäyÎDœ‘Hç¤óÛ=„ëò÷"2´Á¸‡ð|ˆK3<Œ³>d©Vd©[Yo껢íX4¶"å6³‚VŠwåÌ/XE׌׬Û~ +›šéCؤýUª$+“Kº‰s¬Ó4ÉEÌß7k¿c¶vìç(Í„æeÒë:ÈGR\t$EYk›öaŽãÞxi¼ñ0•COùXKå— ‹,™Ëúë×_¾ùÖÿ¯ðá–rgR¡(s²Ï r§Ÿ»×Ô·Ë%»­¨ÐµÖEJ$¼&Û²‰ÆÆŠœÿiƒË™è±à”j' 2y…g°Ñ¦vc\]¦ä¥$ùÝsÝŸ£Éo£óÉDûã¹È­‡&-HDb…‰IAÒQÔG^Õ›•‘åóæn¹î.ïoêÉó¦üÄ}l…„~†$p_áĬœ7 !®y¤Í¿–,— ¦+›<ó)2‘–´ñîysh£Á¥a›t[Îh€-L®ÚS¼g3,¨`,,è¾;RŒ ©LéýÈ[ Ã=¿yP¯…•YÜïòùs6dÂj›¼ð½úÐR¸š«¢+Žµƒtš¾ÐwÅ+Ú½óŸ"ž“d.û.óAî[ôZlWeݵ‡¶€Ñ´0& ¶Ä¿ï/þldÞw–< ¬*•‘ü¶ì¶(e¢”ÁÎ +ÕÝ=” âÊH%¸?ë‘ÁhojO²Ù•*•ÏA¥Z$…ÊÆ9úD yz¨¦¬ªgÕ´èJÒ^t>KЄV½k‘zåÍ'[hbÓöø)‚mAm¦u{\Á+ÄξŒ w„XLî9kC¥˜Ǚþwq´Çê ¶YWÔýY·ÆÍQapšìUÈBªÿCb±‹›:/bãmh»†²‰n#ŒMa ’êä"Š©±ÞD†¬ÝㆭÖM@õXÅ"U/æÕWKp³ªç$!‡üón*¾Šè§¢«ÖõkË’ Æ"Ô9ø)fqŽ¾Ìb7H‰“ÉnÀØÁÀÇeqž PH{+Òà(Zû¦X”¤>GƒÏòãÔ‚‰©bN§vT¿’Ú~öR©U˜åî6å´šW¨MKQ°|Û°ûHK¬ž£1òMµ»ž³-:Ãp–Áž8ßÓ1ä“I˜àfŒì ÔÓ¸%«Z³C’ÚF¤æ8E»>èìåëyWÖ¾Ðúª£Ã©8à`wÀ =[ E³²­5Û§'(#É#9nE# øÀf¡Éø:”>VüÈ`øºëüµ"&©ž"N9ÑÁÁ|@&ËB<ð.é»<àEE®Ñ„«2ÂPžQã00ÿá_ËfÕ|¡,ñCÆd`—w×N-¼Ir"AÁMÈÃ1y­ØI¤‹¥ªñ.D ÁÙL/Y‡ñÒ3ƒB(ßÈo±Q¡JAT†*ìÙ“n[¬J"0ZDmÑ“mDÿ»€VX"3Öô°p{’§ÄBR(–½‘›/ +H.(Ç&;& /ˆ¬rÑL‰9SòìaE²u=+7%o3€ É'f¥ÛÆ¿†P§HA6„<Þ](¤±×:6Bïª÷ïÎ7 +@Ú_žoº¦êËíÔ„£äf™®k{ + ŠæxÊÀ©uþrÆéhÊ€‹tYÍ€§JÒf JLöÚ õÆ+`øOÏ<®³&{¯y»m¨G§®GӤ㇎ch®qðP×ôò<¨PAò)|ì%&}Ïu2Žø¼ov*tuô‘Ùb#× +ü‰ìJ9©$hÖ©Ù} °÷.:²GX„j7"¹§9;Š}t ’@ÿËdBKð.ÅÉEr™Ü½agÙ R÷óCzéŶe%Í“»Dრ†÷£Á(&¢øâ| QM˜/æ˱?I¦Ða~å:›ßòÙ®Í8±~ó]W4_#ûÄÇ~¹^mÖ5µžëÏhÅ-¦¢¿Ö½ók8ŽÓ{ЧØÅ"Æ •äŒ 3|Òî…¶î÷ðÍÇ=ùS€ÃNgS +endstream endobj 712 0 obj <> endobj 713 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 714 0 obj <>stream +hÞÜX]o›H}÷¯˜GPÅt>axl7õj›F6vUíÁ‡­#Àmó“ö_îf0Æ¡­íjwÕU$C€¹_çÞ3(ZŽ^^Í)ZV££ˆ($Tˆ8A¥Ý.’ÑË×Q”Ü(Cþà@U„9C'˜0”¬G¬`"bŽ’ N(ù<úà]N^#‰¿¿xnJŸ*̽ͲL×ë¼X¢iQëò>Í´ÿGò xâÖñ”( ˜†%—£Lál³=Û3.t‰Æéju—f>qè}D³Í¶Î ]5F'ÉHŠ ± f<Žc„…2›C†£°½¹cp°Jc*Û›ú®0qSŽÁM¡Ú*˜P5¡6g¡õ×´ª‘„8òÞ?.RsF½Z/ì ÊÍQy…á»ÇÞº‡ÊìÁ=Äì‘Pé”ÇÄü# œG‘Œ±ðnÊ}b±ÍjtëG +3O;+•s±)œ}@¥)1ef,ŒÚ: ÑO¸ þ/DãØøˆF¨=•ÈM¸¨=øÏýyïþ5ØñSƒi±ƒ™tØQi±ûgC}µZ¡Y¾„ ×jŸbéU0”•.ý€‡8ö>ùŒÃE½Àí0ºqŠX3N!°IG4á!ј¹‹$¦jŸdLŽÄ¤çUu ,â'vÔA†I= i–|ð’i‚Çz ²B+ôA”NS~à:Ø Ly…Mè”âHt¥&ݘP[jý¨‹…!5˜±ü¬VŸÂØzŸ“:½ó1—Mœ0è¨z€ûæÊgÀAuë |qººtLJœ—y±¨Ðæ~°8¸` A™vDAø.ÚÈ1rþ)oèø!¦ZõÒ øÝq»t ̤ Æ‚¸Ð÷¥[9¾û˜<=ê ]•R;ÏQ»4Ž½«r³}D“/µ.ª|SØåÏÝuAwŽ›¥°òXÏmé˜ìжwxaÒÞdo 7³' >…CÕ7ljlÜØ[ûÿ`RYV +endstream endobj 715 0 obj <> endobj 716 0 obj <>/Border[0 0 0]/Rect[145.02 412.68 187.62 426.18]/Subtype/Link/Type/Annot>> endobj 717 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 195.66 415.26 209.16]/Subtype/Link/Type/Annot>> endobj 718 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 719 0 obj <>stream +hÞÜXërã¶ý¯§ÀO²Yb € Ÿ©WNÓq½;¶âifÓéÐ%³+Q’ÊÆÏѾDß²çHŠ¤½nšéešñŒ@·óÝÎw(Áv‹·ßÜ +¶k©bYlXbR¦bV‹íâ·«ÅÛKÁ[mB²„ɸ’,S1%[1Náqb[­ñ‹„­>/>ï–—LsÃ.Þ^|õûP‡Âpwu~8”ÕŽ}[µE½Í×Eø§Õïq“ò7Inµf‘à"ÕlõnáÈ8éΖ£³oŠ|SÔì"ßïïóu(,OƒOìæxj˪hÜ¡ËÕ"•‚⼓—¥L³ÞÍIÒƒ•ÿw&¬ #ƒ;l$cá5 S‚Ëúñçÿó¥ÿ¿‡_)v*ã‚"÷±CIv±ÚÇî? õëýžÝ”;dh†\kCÁuР&›¢#•rüJ…Þ×bWN™t唂LÎ<“Îy µL¹2gŽÑdbLÖ›¼ÍÃÕ_δ!$G™ÆÏCïÛÇb]nË¢aÛPIXp¤Š;Õì>”1žžÂ™Ýbþ¸e'XmŠ­.ÏÔèä¡Â’ €m6Œðpöö¹GV6¬)Zv8RñgäO™ÑÚ9fepܶEÅÚ#ËÙã±$~t›3ž™W`}ûP°MÑ”»Ê#ñ®é¹[qk¼[Ý‘V&yì:Òö[·åÁŸ‹µÛ×»+Š­Ë…îØ©Š!M|cw’ÑØí?±GsûÜžQ—eë}Þ4”3µw3º³ss wÃÍ †"ćÏ—¦—~öèÓ[r#Gè£‘š5OU›ÿ³\åhì‹ ¸LÒ×F y[¢Ãä÷追Wç‘Ô<-ñ? bWÊ/e¸xV<=PÙâú¥W°¿v΄õMh3 ˜(Ѥ^@Â'è€!m¬=7ø©ÞIiiÊJqww:ty†`ˆ¹³"é¬ð66Ò£ +»Z^¾%ç\åÕî”ï +æ6”q‚[‹j.‰`‚ÍÆŽ ¦ICä).ÏîÉÜÂ[;·zµ’~¹å6õú…Hßh0L_¿ÒeXO!˜qà°Ào?œÈ‡äCLúç_OR  Æ>ÑÚ?5¥lT6¸E{7íÓã €ìÏÛûÆs(´œÕ“{§€©€€3»MJJ;»™r’ˆ,ô«ðdªÅ bÈCó +°ÔïPgsPN2ËžAp’0@7›"@NÆ&#ø!œ²ú˜¥Qè”ÔÆ ú1øª[¿;Šš‚þCÓTžI(†ÌãcòÎPø@(Õ DvCd@Lá³=)̯Ü÷†…»âàZ‹š9¯ LxnA”HSH¸ÞÌYš¬Ûü†}~(×(ÈM¹Î©Ÿ·y;g„{Ó9 «¡¡öL‚ËÙúüb‘áÅâsè:XN\Ú¸É^Ù ¼™{Õ[屜3{ÚÒ¡€Z7Æ.¨s,ˆˆ^ÜN-Ì|ky<9ú_j3qC Óõ•àŠ` $h ¤j$í/P:ubr±/¹¸«:´k&Ô„ðáSh%ô/×I<‰ÐvÌ--X k ¥DaŽ»í Ü­hž^a¦Å‘õ`²ÎB4®G01¡ `ÛxX´Ñ ürdŸiQÉ_S¢ˆ«M Ÿ_®I!&ûoÔ¤ÙG’FÈLcYI'û½Ò×ítÐåO¸«Að'm´— è£Ù¨ÂçQìfn^R_lÓzÒ¦},—\-¯o¿}=«eõ œ#½µgIéŒD²Xå8ÆL™“^Óºü¿]ç»x€ ¤ƒK*o¿ÿ‡÷‚7íWä_ òU(\–”ôë‡ê¸?îž¾h³5¾AýÊëü0¥SÃå/´yΑ«åÅï®ß_½ÿæûW¥øë棠…˜oäÈú;DÚb>>ǧDD&&uÿW3å4r„M?5åÈõép7î©’ä¥7O½Î'€‰Ôxý9»‚»åͳ$HœY?; Œ“®“$8ÿDæKÿ®Ì%¥?Rä>ùшÍL’t½RDwµ¦Îã:}Eíý.Ô)ˆrCûS0ü¢©X +¹—¤x‹7<5LЫLÿcfŠmÒôSÝžý¤NÌ&ÿ!À©¾ +endstream endobj 720 0 obj <> endobj 721 0 obj <>/Border[0 0 0]/Rect[145.02 615.24 179.4 628.74]/Subtype/Link/Type/Annot>> endobj 722 0 obj <>/Border[0 0 0]/Rect[85.68 260.22 108.96 273.72]/Subtype/Link/Type/Annot>> endobj 723 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 398.28 410.82 411.78]/Subtype/Link/Type/Annot>> endobj 724 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 725 0 obj <>stream +hÞÔXÛŽÛF}×Wô#™˜í¾Ýä£3ö,’8€1Vüâ-Q2wFÒ€äØñ'í_P"5#gƒ vƒDJìîª:Uuêp$Û.žÿã­dÛ~a4³¢dyi˜¬k›ÅwËÅókÉ$[nR1?\di¹VÌjÁ…bËÝBà.òJ³å +7Bælùyñ>yùêš¼dWϯ¾ý–½éRYr¶]½Ûµû-û~?4ݦ^5é¯Ë`I{KŠWEÁ2É¥)Øòå"Ñ"g«“³ošzÝt쪾»ûP¯RYq“ܲ›ÃÃÐî›Þúj¹(ò +^Æ•®ªŠñ¼¤]ˆFqkâsÄÎaàô9 !d´{ˆÐG`*GÅð0/# +䪒䪻3Þ××u?°43Ü&?߯kº“ÉЬý kéZ&ûî‡e?…EÝêcX¤üUÈ"ͤ®})𣴶¨xž¼é~Åúa5°w©-¹JšpJLöá|dÅÁ#f¥Œ8çyt^hïü¿˜¬ª4+a£Ê”þ¶`©!wY¼þñËÿ|éß÷ðñ+åN[.)s"æ=r' Ÿ»¿ÖÕwwì¦Ý¢B-jmH%/’MÙ7]šiëäSª4~lÖ<6ch'«\;°É9Ñh^•žkÜ–›s{d!\¤Â¹n6Ý2µU«¥é™À&·Wn¯÷ËÔHTþzf“ûÕI¬ä–Ïì¡ü˜Z†.¾i²@Ç´Mª%¨ ñ¸4)}éÙºj¶é;6|lX°TK‚¢8& LCH–7/®~|›.ÿyt °U§«Go(t—Ú~¨‡f×ìÖî=0¢3Yñ"?Ý«BUq립ƒËà€„³ŸûÆí®»í†(š ès†‘!¡&÷ì<’†0ÇXh÷²«W·“p€R ‡Ê³ Ž¬îê¾gÃEà°µ[á±Í¶rŸ8W_ήýóƒsL*^ª“`GѱþË~¨G8›Tc´`#N”T-JáºÃ—zhÁŽõ ˆæ<ƒ·2!¾’<ã—Îñ{†N-ô| ™8ÐByù|Æú¦aËTÂ`7"õí8Ðd^Ðà5€ ±k T2nÄ8²ÐL'ÃÚb:`mfuÄÆÛ ù\.U2f<ÁÄ´å•™Íàׯ®ŸN¯ëýö¡Þ6èýMª,¸¡¡YÖ5ûùh—¹ïí)„Ü£'c‰á„’eš«#Z–V'o]*ÝêåRù富Åtƒ6. Ê#¶±ró>iÑ'ë&5 ¸‚ªÓs×ûæ—Ä“)‹†¡ iþ2ð +¤öº¸¥Å¿à˜GLj¸(|V“áËýÔI IcOOž¹ÊÃé +úãÄð‰Ó¡—àÁêö›™e0°ÅÌð{°pà©ýÜêÑ€i +yî@ÅËÒ‹­'ìƒ`¿{‰Ö›» ¬=sÁ œd¨g(”h™ŸzðK:Éû„‹i:Äj ç¾@+h´Bà©©/2Šk]_&Y8’=×æN5"2üÑä-©1 J?gÀ™‰axÆkŠŠdbd\Ž&GCÏØçíê#ÚnÝ®Ðöd§ö¼3¸†·Ç)æÍgÔ9òT‡<Ñq«£¦ ŸSI¯öÐÃ8€G¸2Åf>¢~u·HD¶SØ Á–ÃhÍî-©{"÷z†`å"™"øÕ™á ¾ +„ èç±NRšÊ+¸¹F·<Õ44®iL[0>}vlwèš'N—sJV‘ß  #º9ŇQa`ÐOn^xªvî#kÂ-²ôÖ»|”Ém¤mU!ðœåë¤F¡!Ï0¢Éµ©þÿ5ýiÔ¹zy÷ý‹©v»G ä­T¤†ôI–ô"=Ãxd‰äë:Óy1ÊLˆ¾r.3íTfä‰ëPu§"ó²ÆtÀ¿ê?טc͉ò©ì)a(G]þ´Â¼œ£k$ëYPŸ—ó¾‘1;žM¢1ÀÙÓPUYPm+Ô.>!ʧ™JŠ’t—2yÈõλ΅þLòE%Gaiã}YXZ–ö)ai‹¯*K¼ +Ê?¯,!¸¸>¶è#Úrìû¿²¤ö1É\ÔáCGQg‚øúÔbí\Ò=eúÉêÿCQ)ÑÔUùWëJÿ ªC5ß½8–Á§—J¥S˜™cíÇ$fnçƒø¨5})Í’^Ÿ$©K’óS[¶<ûÇ«žõæ›à‘ 0A +&¹ +endstream endobj 726 0 obj <> endobj 727 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[234 658.26 334.02 671.76]/Subtype/Link/Type/Annot>> endobj 728 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 729 0 obj <>stream +hÞÔXÛnÛF}×Wìã2‰6Ü]’K>&v´h‚ÀVüâ-Qk‰H*©?©Ù3{¡.qR¹@QÂ¥¸;—33gf-ÙÝäåÛ+ÉîúI¦™‰s–äÓ1ëªÉròz6yy!™d³åD*ã27B+ft,bÅfëI )"N +Ífs,b™°Ù×É ?sÁR‘³³—gÏŸ³]$s¡y{וëuÝܱŸš¡ê–弊~ý MÚiR¢HS6•Bf)›O¦'^¶Ú“}Y•‹ªcgåju[Î#YˆŒß³Ëv;ÔMÕ[¡of“L “ÁµL¤JEÁD’“Hë¤õÛ~„ëò÷?Ú íGx>âRX4 +†I@ K•$Kí*s¦þRö‹¦™0üãfQÒJò¡Z¸«é™ó&‚õ~Û;¿©›ö›”{Æ2¦R1½¤kcÒB$üC׺‹í|`בɅ╗Ò{mãå#(˜PV*3æ$ ÆÇÚÿ'“EMsè(¦*–n™²(#sYxžþøÏ·þ…¯;m„¤ÈÅ!v(I;™ºØý»¦¾Z­Øe}‡ 5ȵ!’"å=j²¯ºhª3Qð/‘Òø±ZˆP‹¾œŒ²å”Lv<“ó 6f&;à˜”\ŒÉ;þ¥.£Ùï;ÖJ JG4âÌ£‘Ï—Õ°…eÊÀx[cK¶ik"!6´xñ4”:`n¼Óº¨–õõ‘æD¨^9êÍ …~è¨h¡vMS<æ0¤Šd "0/"Eeܺ [‡UÅêÆ-—‘–n ýGr<×ýVºƒ}©ýÑæ…sˆTçæ˜OÓÀ§6Wx_UlÏ7„Jé„eY,òì'2Pg´ˆ€íâ¤LLß3-ÑôÚ)0Añ0€}6å]E(ÀA…oxp™Ð°kŠ@jkèA¼åð〇!¥Sxµ©æõ²®zäi‰a·» æ2÷¬]²-²v +¬IÌè=É#£ÃY2ÝeÁÈÁ>âœ]²ºg}5 pDö°sê¤ì#½Æ»µFòv9TK¾‰tÖ“ÿ@?öŸ)^}}×8C2¡UkQä.:v…BJ9b„àŒfÄ&8Ý]GhéèÈŸœ×‹³Ûû‹f¥T)›£î|PŸiªÆ€ß4l·’ß•”÷D÷½5¸j„5µn Y_͇Ú!žˆØÇ’d¥>˜mÓSÁd\°$RQ1(<×xR5 ¤Å"DZ:çÒ¥x,¨:óuØAr +/ÂY®¾F’x¬Œ0êüÁyÑ—koŠ^¸T*P×øoðå¦Ì£³‹].~R‚ÊU°pÓa^A)H©3roŽª 6MP7e„ÿ°š×ˆ˜áHáEµº4T¡ÌHþC½vn"ƒ ± Š†¢óé2uZADjg³ÙUÞÕC3”Ø ›ÍT Ç"s-hB‚éÄ'˜²“à +e€e¸«»nC^!£>q×Âe4 1ÍPç>1Ïát÷´ù·Š…Ëé"0¥Žêùð°9´QbŽ ud)œ¿…© Œ„{ŠG›ùØùŒ¹ròú@Ð2IÔÝð/eGs/oW¾DFÍ©P2+¾Õœ‹\Ký¨bëz :ëÝ9²âÙ‘×»”1ßXaçIj<´Õƒ¹÷,ørÄ~'D´ë½¾yÃ_aZ×(¦»íé×ÚKÒ#üߣçp9ƒå®kjÇƶc©¾¨àãlW6Û‘£Ú¦{(i•ìµ^/ù±RØ»øŠÍÑÊ8*Øл¤g2t‡Åñhj%š¯V-••æ_É.ÃI%9ÐCcÃn+Ôupѧˆ£²ƒj´ ¹§9?B‰¸’²Ä)&ýœÏ"4eE¼Ì,„|HÐv¨Ïsœ½î¡=—¾^µsâ-ÉïÑ{òA‚ËÞ4‹ÃH¦{áS3PG2è4¡ª©L‚?•öR|×÷´ë`gízÓ6H,§Ö=Aëxìµ»d¯büÜvÌ¿Ñ©uº3'* W¾‹zµò ë…kJ߇w§ŠNè7A}‹´ÞœË#ÝÑS!=œëøûjxžW8q¢.96Néq}ßB¦Û„WvûnÝûj`—aI9­ôÚAï>@‰:­À°Z¦X ÌSO͆ÃkÄ ®' +¿á婇ÚÏoéSy†äAÆ?KÎsÌ#æh˜s5”ã†'ÛE‡‡=ËèÏMšéÍ:ÇHd˜¤ëkø3“VRhû3zN>ü%ÀW’y +endstream endobj 730 0 obj <> endobj 731 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 732 0 obj <>stream +hÞÔWÛnã6}÷Wð‘êÆ ï’»v²h‘£Ý—¢ŠM;jÉå]ä“ö/;¼É×-EQˆh^fÏÌ’ ­FןZmFZ ”fHf Š:3ZŽ>£ë[†*–#Æ…?ø°,%‚£TPB9*^G¬*sŠ94(“¨ø6úOon‘"š\O>|@]Â2"p»êÊ×תY¡_šÞtËrn’?Š_Á“ðž8É•BcF˜V¨˜ŽÆ`’Ê`›ïÙž™ra:4)ëú©œ','¿ Y»í«ÆlœÑ›b¤dÓDiD¸Èó™Yƒn‹š“TÇqØ;ûã@eF¸AØú@LîèÈ Ê,²`¡rf¡º–öXïÊM’±&)þ¼^”¶Åpo¾*ûÍp“ü0í·0©›?‡IÜ)Sɘ‰œÚJB;MUN$~èZ?c±÷èK’f„c¬l‚‹¶ ö!*Žjiæ\§‘g)#x*<øïˆåy2ÎÀG>æ”ù¦B‰¶pQü^þùϧþ?mìDJ˜±ƒš ±cÊÇîß…ús]£Yµ‚ M!×ú„…7P”Ó%c¡IŽ¿&\@§YXŒ¡œRîÊIƒšì„F LTT’4Û— Ôî-»ª|ªMRü¹SÆ ë@ +åÇ =3ýr j.Ì‹²/Qÿ\öKè*mg« &U°³ ˜fÖ¦q;a‚èLíyQAžh`~aõ Ê­6h¾Ó'ú´Ý¨€gjlíôîu å2ᶢ[ÀÂq]ä +³n^ªf±AíÒoc^6èÉ­¨ÍÛª£FmŠ\hÜXX· ¨º7ð¯C#˜7ñ±nç §—råÛ=¥OÚ×uÛ˜¦vZüt–Œ©ÙT«æd–<¾SÝVuíRDû,•»,…5gaêÚíúmôF©Ws• ¢xÞ·0a¬À¹Y&—[ÿ»îÑ,6-CÂã§ØG+‚"mÿþŠ¿NAù +endstream endobj 733 0 obj <> endobj 734 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 735 0 obj <>stream +hÞÔWÛŽÛ6}÷WL6—]ô¡ÙÝ-Ú"H”ô![ŒE{Õµ%C’sAÓê_v†¤eÙÙ4E‹ Íîƒhr8îù'*t·ÚmL3øÍÎi³ó Oâ≜cÚ“Q¹šä˜Yvþt¹-ßnÍ/æ8ãøѶ؉Áœ_‚%x–Yn‡7º;;ò2É,Bá8ÌìúsÐMuìO²ä4ÇG¬5eßåi] NG\n”¥tã+Rw˜QƒÎ³§¤>5¤êæø€ù¦¥ØÅ#¸>"û?0àgîŠQzÒÃ)Ñ.ÑÉ¢m°h,À™Ë×õÆÏ(ÏÐÆÇ66[‰Ô¸á·ý¡%YÌ«õy~Ž÷ˆEKöÁ³ÀkÝÃV÷=öbiÖÍÌ,ÿÁ§v;;ŠáÒ¢x:軇‹—·{,6$âŠGBõU0¸¬—{_Na7ù"G4„mƒ÷Gëo;¤tyÜ'+R‹†bN Y<ŽÜ9Üé%/Sz0pGùÏØusÿ:|h'¤xK‹Å”4J{7 :3ìºÄÃß­D½oê5I¾BÑ32¬jÍõße3¢8låäbq'c÷¦ðîÜ;«h“ö]§ËqÞКUÎóZ÷¥ºÕTo±0D|(Œ‹C~K5M»=x;¨ðÇD`*›ˆ¢™ÿJ3›½ªÛ‰&Ü-ÿ@%îªDÜ´ØJÇx"uu¯U'³ˆmWMut)ÃÉ,ÏǼ—‡§W:>qé¹p©]iÚ?jñnœ+ã[]‘#.ÇÇlšà+6·ýþµ;Ž(¼Ô½?ò§½TÜj +endstream endobj 736 0 obj <> endobj 737 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 738 0 obj <>stream +hÞÔVmoÛ6þî_q ЀJ,†¤$JBÖ©“Ú"ÈÔ|‰‡Aµi[‹-’œ&öƒö/wGQ~I“a_†aÈ‹è#ùÜÝsw,aÚ;ùð³„iÝÓÄ"0ѨLoÒ{—õNÞKMzRÀ|È$æ‚8\(È=(\„iÙB†}ëݱ‹Ë÷ñ'ƒãc¸®<™ð€-§U¾Xå®ÊÆT“|d¼_²ŸÐSÐzR<"ð%—:‚ì¢ç#¤¶ÚÁ¾1ùØT0Èçó¯ùÈ“)×ìn–ë¦(MmA/³^¦˜˜æ‘®‚4M‡ Úµâ±îö1wŽv÷‘b&°›˜ú†˜ÔÒ‘n†IÇ…ª$…jWºõc^7àùšÇìËjœÓJ²ÆŒÛôLXéaøîØ'w¨ÍÜ!Õ>…Œ<_© ‘ÆuG)ÙuµlOŒ×£n½8ኇR;ËÒácU,=‚hVJÇÏaØ/‚6ø?A¦©ç'è#õ•í2OS¸Ð=ÿùã??úÿß|¤Ú1—T9ÑÕgÒÕNFmíþÝPÏçs¸)¦Ø¡1öZãI±‡²6•çš§ìÁS͘wÃèÆ)Vvœ4ªÉFh²LµóŸòT·ÃE T­#„[¥Ê*h“\UEÙL†ÌÓìàöêÞŒ‡Ãò åzq[ä5š‡Þi×튇Acv>YešuU‚8ýÃË~ÛÊÐVð0`-µ;˯#7"ÙÌÀÄ ÃŒØ|¾ôdľ‘Â/짔å‹ÕÜ@=k÷õ\ø §04„¢ó><áßã Ÿ3´žnÐÑÑŒÜWpTæ óýܱ“ÌÌÈ£Wg1±EIAQÃhIW+3jv^ûL€æ‹Ù?¼" |½G3µÑ&—M@VEtS{9g%9kvh£å¿.äy(¯h8 }7èÏϸ —8á.‘€kFm"ß HÝ +ˆ«šý3boˆB²#%¯qá®ùg³¼¾ÎüŠƒæ²½ü÷T\ŸgÙåÍçÏh>ÿtù<ÿ í+ Y,É6koQÏ €Ý]4ãu”Äù“©jºÛÇÇ^x¹D¯sºƒ }2}8¤Æ;¤Î;|¤¶£³×øßIñæra^d~3†î×)6µ(Aí75¢¾P·×ô_2 0F…ç +endstream endobj 739 0 obj <> endobj 740 0 obj <> endobj 741 0 obj <> endobj 742 0 obj <> endobj 743 0 obj <> endobj 744 0 obj <> endobj 745 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 746 0 obj <>stream +hÞÔXÛŽãÆò¨¯èGÒ^qÙMö…ÎS2—ÀFسrŒ`íZ¢$f$R+RÏ'å%ßèS}!)öfÀ‚†ÍéfÕ©Û©êál3{ý·7œmº™Ê˜N ËbYÊŽÕl=ûëböúž3Îë,ÅÜè$Lgi’ +¶ØÏRHIÒ¼ÈØb‰EÊs¶xš½nïî™L »y}óå—ìÛcÌM’EíæXî÷u³a_7}u\—Ë*þiñÍìn1‚‘)‹‚› ŠÌ¡(,ˆ‚áTn‚î9t +NÊíJ9í/»žÅs•èèûê¤új嬦§‰š8Q‘?öè¸ÜúCÂ=S.ã9ÏŠ”^¤ÆZkY$yôí±u'V§eÏþk“ˆ¨òR:¯¢m¼|øÂZš²9O„Pš-n-ä<àÓÌÿãEÏ ts‘r·”,V—…ç§?þçGÿ…¯»L'œ"—†Ø¡|ì¸t±ûc¡þe·cõª‘k}Ìuì¡êªc<ÏTRD¿Ä"ëUrQWZغR¨á嚣ÊÂCŠ‚êZ©4ÔWJ¦d\”Ç‹“ÄwY3ªò4)mÌ]Åþðkp\"A:“¶9Öv‹"|ê<õ;d1,cœÙÝï&:ea~NiÒ÷è”E~]'\$rë<\ª=é%)/d {è(/m‰ÊY"‹¢˜²ýûå4’_¢ ÿø®tSîv?—ËTôÈÞôϻʷ"r›Š& ÉŠ‡C,\ø8µzã§8n> endobj 748 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 749 0 obj <>stream +hÞÔWÛŽãÆ}×WÔ‹rFêe7ïëÄÀfv7p`ƒ±b °‚€#µF4(R!©µÃ_áüDþ2§ú"i´³‰$‚ˆÍVuuÕ©ªS%IO“W¿ûFÒÓ0ÉbÊ£‚’"£8¢^OÖ“ßÎ'¯ÞK’4_O¤¢xÈ"±¢<ŽD¤h¾DÐ"¢¤Œi¾Ä"’ ͘|¼}÷žRQÐÝ«»Û[ºïCYˆ8èžúj»­Û'ú²u¿®–:üÓü÷¸)¶7¥B–)ͤYJó·“TF^·ŠY·Qý «•î鮩†AáüûÉ»ù$MJ¸‘‰4#¡â²,I$E%Ö¡L‰<óßÃS¡’gßÆ!6_ÂÑ ¥q¾$|™Þg6LI6̬2ëõWÕ0R8ËDüa·ªx%ƒQ¯ì‚j~AŠ,pb_;¡~¹qBÊ>#™†3—¿¤Öyž–" îûÎJ¬öË‘¾ óB¨@;-ƒ»¢k~ÄÀ 1¨Je¹G5I¼ñQlÿ;ɲ gî(g*’v™R˜±¹äŸ¿üñ?ýÿU~zåØŹ¹ÈÇèb'S»ÿ®©oš†ê'dhŽ\C)Ò`@ ºgq&ÊàC¨blê•0£]9åÊ”Sîø˜V +K+—V–«ËÚ:=ôØ×:”)’ú3ȃÞéjäÂÛj¬žSÉ™´X{¢X©ä+LÁæVë×UÊ*á üdTußëå8вkǪna7.2ºeÂHÏqˆLc„?Õõ4ìô²^×KXÇÌý…?ùÀ¹šëÚ.‚æMKËf4nª·÷½v]»²I0S©ˆókjL=J&‚±Ãa„åE?*p›'’K'J¯£´6ÕíJ‡¸MœYQÕƒ½^«´/ƒ#ukÒÞêvdc-41¬sZÒŽ]¤Õ +—=ÒÑj…ÅH›=À‘CRâÑáç‹ ÖL‡ð‡V®G!…2(äî*e0ˆœía‚4CÎÅž“%ÅÅ!?êa¬x»1"G„_‹’§Hõ ÜÂ÷Â*ÿc(hÐíi 0÷ÀÙ™õê}j“ÍE]†Ú˜¬»ž‘?§¦(^@Ê·NjºnGë¾ÛBÈF”¥ŒÆÞ`²µˆGB]pBt†!xDkDŒêQoŸzEµKä»Õwk7GlÓà ЙÍlD3rS}ùB&×qvÍÑ:j£4ã€&xhÓöžÇbÙ…™C<*-nŒöƒþË ‡lt>¨Ët‹Of¸Xõ!ÏgT¹ÈðôÞnt!ö¤íë!dÙí®Ñ¯m8çse#UŠ2³íŸ ’€Ï@#n 9¥‚¼êß„Y}Nõ¯éÍì‹•^×ßÖÕë×íÛÛ¯ª£î‡E°!p{»éGGð‚iŽtćåC]Ñì ðopRÒðq\1¥_a»­¶«ƒÄÇ‘?›)¶ñ²aýFïüšv}ÝŽëE€/¾¥‡wwsúl ÏVöŸ`±X´›ë$Öx”ØŸT’Qç’ü%ÞN²R¤žVm:¸…u_¶¾£oŽ ¡òšGÁ,@dy2´»ÿ„¹“øR¿ç;eùŽYó“`‹9YQ +, pqJI’ˆØv•SmØ8´h®YruËy®s”XívásÌU»¾{âžQ"Çr|V!>ìP[›¡6Tf{©i¼¹ÿÒ+§º$ÝêÙÍœ§\03.ŸzÁc7nó0Ãu¾!ã×\YÂWhl¨ýY‰ªÄµƒÁ ªzÒ­fósÐ#˜Áš'òè#Za=±ÓÃj`ÉÐíû¥¶;Å×i¯Ywۑפ¢—|V~\^ïÛ%cZ5´ª×k&hÐDoÂi€!(9 èl»s43åÙN |oÝT€Oë––½6^r¤ÝàÙ³HÓkêÁJæ.uõ~Õ¹:ë,¥e ´–5 ã±1&&ÖDÑ»C…¨[«=Qú’ë2w®?Á”¡fÊA/A#6ݾY‘n«ÇP1i6 (€qv¸”×ÜëÙÒÉžÆ?ОÐ5öàô~9q˜A»®ªÚú¯&ÅË-ïT_çœYÛ¾‰ŽÍ}³i:ó8á}×@¾¦–@öÄI˜9Ñò7‹ŸG†sB¦þÅÁ`6pcVü³ŒGƒÄñ.ÔU‰UpA$Üf?ÍÞqTŠ"yÆÞ¬Åágæ/r|Ë¿Ÿ‚_¦gÇø¬ðso ªÜTýaO&w2ûŸŸøJnW(âö$ŠýKi”8!u±{%x-Õî·:w•K!Ù$‚Û¶tõŠš +ⶇà47ýÔ–° Û77dúË”)æ† Üe°>6SzÖ¥¬ìÆâVaÜ4füô/c*ñ#\v(¿ù£ÜFõ—ÅTf F“–g=Ù"‹ØKºñ±]„«OµÞE`äÖè“ái jó­pv:Vž þÄ]F,ïxËÿÐqvÂâ8tqÕ¿{~»ýC€u'_² +endstream endobj 750 0 obj <> endobj 751 0 obj <> endobj 752 0 obj <> endobj 753 0 obj <> endobj 754 0 obj <> endobj 755 0 obj <> endobj 756 0 obj <> endobj 757 0 obj <> endobj 758 0 obj <> endobj 759 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 760 0 obj <>stream +hÞÔWÛŽÓF¾ÏSÌ¥½m†9{Ü^AVTl…/½€ +™ÄÙ¸ëØ‘íûH}Ë~3c;ÁÒ^TU)Ï>ÿæänöäê 'wÝÌH’0K”5D2Ò³õìY6{ò‚N²õŒ ÂðÃۄJAÉ($ÛθP¦RI²%Œ+’}ž½‹.Ÿ¿ šZ²x²øáòº¹¥2jîÚ|»-ë;ò²î‹v/‹ø÷ìH’A’¦<ÕdÎ)7šd—³9X²‘·Ž·g}Sä«¢%‹*ﺢ‹³?fϳ™410ÄPm2MSB•eL“¼•C©P'@øÁ!H„“Ro{JTv4Ùé%¸ÓËŸL0úUÞõ$žšD·»UîN<ê‹U8Ò=mTÇÔDÚõ€Ô.7’OÆu<ç2eîE§8'‰N©Š^·MÀXí—=y'–Š¨¸tƒˆ¦ø#ÞÁÌùT“ŒNUjTžÉ üŸ„§c!# ÆÃQ“Ø8uÉøüûÿõÿË|zu±“ å.rlŒ +pˆ×!vÿ®ªO«ŠÜ”wÈйÖÇœê¨C vEÏ¥¡iô)—ÅŠzQ‹C9%—“A똺J–‰Pì)MM(.w¶IÐ]Ô¡­øŠ_âÅYÖ=Y±‰ÖåÛ2ÿPï·¯ò‡¢í‚“(ƒ —äÌUé%ðßGdÙÔ] +Ðy"rAúMÙ‘÷ñÏžj>‘¥ *x²OM¹"+’•òÏeüHFfŽi¼e½*¾}+»˜EËMÞ’‹ /épë/¾ðÓ÷~ +Þœ7Î4ÜLõлá`-çÝCWõ'ü›m +² m³ï˺ »¶é›þaWtd‹½¤‰ñ׳¸ &=d$Ócû²¯§¯_’õ¾^ö%àåÉ9•&Ámöõ +n!ŽpKlBŸSxTUsÃg77ÖeUt? CcO6˜h‰RÛa4Ì.¾:;ÈM0·û¶Ï¤8a(†L¼æ¶Aa1*lƒÂ}þ1 oêÆF©Ê®ï¼K¯wxð +:6?rªusZ‚,ïI¾ÛU¤oHï´N¨=Ž„8ïëä¬.ëIKü¡p…+æmì®r¢Pºs¡¨Ôú v˜Àü¨ ]š?m1Ð +?…Æã!NQÃÝ›d K݈ê¯M}Yø ö¾ê)À2µj£`nöUáúÍaX%gó?^´M×eÍ‹yuï¸)¤Ø-ny<©¨GNI‡êY¾Œ¹C¾ïbàÈÈÓ+™‚›cẋ¥v8—A¡yà7iåuiCÅ*Á˜t|´kãù\G=¬ÐGŠ ¦ìïabPk¯QË#ÁŽÁ$™M®øübÈE„‰/±c@ ZG8×V¤žë«<–Á,‚æ­•‡ÞÖe¡zt;šÈ¹»o»``(mª}¯ó%öÅFˆà£%·}Y6×e·ôh) îÖTÆ{J™=M¿^í”/‘ÆBÀã¾ØLÔn}òb4aÝÃû%ªLE@ôå}º\ú¼²RŸv­!­ŸUÏ ÝçwèsδaxuÚžÇ'àKD")F–%B¯•qÒµC„Æ„œºˆ +>^4Û]S5â0O•Õ4Dfº>“¤‘Ä¢w~[Ò€‰ŒÖ•íöÈÒCŠ‡}yĵn¥Wð¦ú._T;vf~Ú^ß*}w÷o6åºwéç2äÁ¹.Á’êæÇ™Ih7ÂnàCû¸ÿ:£èwÑ‹²ª\Œ¤LF§¹«3æL:æÒïc¼¹•ï©ÝùM‹‡ä¸ZØ®\ÅaUˆÊ•K…˜‡:»Zì¡&@OÔàV85 ¶÷ÇMäø€9ñîq۽œØ9“ñ ¦‡æéï΄î„!SŒý^4¹²G)ùHŠpü˯dˆ›Ž®SDáa±Ö¹I9‚>²°û  á{Ìÿ`ÇJW[ +endstream endobj 761 0 obj <> endobj 762 0 obj <> endobj 763 0 obj <> endobj 764 0 obj <> endobj 765 0 obj <> endobj 766 0 obj <> endobj 767 0 obj <> endobj 768 0 obj <> endobj 769 0 obj <> endobj 770 0 obj <> endobj 771 0 obj <> endobj 772 0 obj <> endobj 773 0 obj <> endobj 774 0 obj <> endobj 775 0 obj <> endobj 776 0 obj <> endobj 777 0 obj <> endobj 778 0 obj <> endobj 779 0 obj <> endobj 780 0 obj <> endobj 781 0 obj <> endobj 782 0 obj <> endobj 783 0 obj <> endobj 784 0 obj <> endobj 785 0 obj <> endobj 786 0 obj <> endobj 787 0 obj <> endobj 788 0 obj <> endobj 789 0 obj <> endobj 790 0 obj <> endobj 791 0 obj <> endobj 792 0 obj <> endobj 793 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 794 0 obj <>stream +hÞÔXMoÛF½ëWì‘D@z¿w‰ž; R4©a+é!é‘h›­LÝ$?©ÿ²o?(‘´-ùRµ“W3oÞ̼Ù%#׋“·—Œ\oZC-‘VAIW-®¯–‹“7Œ0²¼Z0N(~qaÖä‚#hN9YÞ.(¬äT‚,W¸¡L’å·Åçäìõ¢rKNON_¼ ç]Êl.’öº+ooëæš¼kúª»*WUúûògxÁ“ÊY¡HÆr¦Yž-2˜¤ƒm.œmoú¢*×UGN7åv[mÓå‹×Ë…’ÂйÒ$ç¢( +’KK© iž=¥Ææ<©¢•mtÑ6Ñ>r঎TεX•rOEÿ7aE‘f>ŠŒSnIµƒK†ëó/ÿùÒÿ¯ñÝ¿.wÂäÌeŽ¹CÆÜ1r÷ïB}¹Ù‹újPk}Êr•lу۪K3¡ó"ù+åVëÜ#F3Æv2Ü·“†v ý´WR抻Š* q}¨ú­kZ(˜_WWõ”:¾Ñ—:£¥pª +Kr…æ·8Œk¡^¡“½?ߟ½ñóT2\ö73ë¼È…$ð¡Žg˜mK0ݵwQ§†…*‡¢È\Ë£6)$í{£—÷_›ªŸš¥Ì¡ ÓAMwúöˆ]eíˆ&öD|ºK3ÀKêfJ„‚þsKÙGP+#GL°èßꮚ@VF8&ÄÁÔ¡V”#ƒb'¾&ÖJÛÀ|* óIy¿éÉÅý&ŒôPûö¡fTa(/£ +ª«mÎ`ƒƒ=oc½â +Á-ôa À°Ê­çuãK™S…&ò%ñ€]ÜaåZ%ó4”Ä`ê%&jÓ”ïÛuµ™ÒËüÌfìh)*Çq x¾BõjŸßG©VŒMî„ _öô8qÖ½’uÉ8.5¦zf­qåALø’–;šùÊ9„ÃXÌÿEu]·>3LÚAd‡3gpío¬§}Å¥Ò†ü?Nž”fßù‡P£ ”ÑE›¢ZmòÍAæZïzÈ×ÇÝÄ¥LŒ†íuÀy£É·™aÆ]A¡aÙQË؆™/öÒU÷S…õ%åw–‡hf¬ZT»Ã¸»\• 9½)}».§Ú;üµÃŽ[±I(Âx=ÓâxR…˙ܕPˆNWÎç4$oר?‘ó™86­Ÿ}¼À¸ +eé>šá—N‘žÁ+ÒÊîªU]nH˜¶…‚==¶z>l÷:e¶]\JíƒÑ;ïÐÀÔÄSdž/ž+Z`ò¢×Zî[a˜õ +ç÷!ÚN}èàã}½]U›MÙTí½|hÄWmÊNcßgµ—/Qôȱi“S¯>—8ƒ¢(2h}pæVûr[µ·Uß¹(t¨ö»ÿyº™rJg]±> endobj 796 0 obj <>/Border[0 0 0]/Rect[260.4 629.28 323.52 642.78]/Subtype/Link/Type/Annot>> endobj 797 0 obj <>/Border[0 0 0]/Rect[226.02 153.24 280.68 166.74]/Subtype/Link/Type/Annot>> endobj 798 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 799 0 obj <>stream +hÞÔWÍnã6¾û)x”v+†?)¢§lì,¶MZ#qÛCÓƒÖ¦m5²Hr×Aѧè¾Dß²ÃÙVbÇéEQijf8ÿó‘¢Åàìý-E‹f 8’$Eq*'¨ÖƒùàÝdpvIE“ù€2DàšJÌ’œ`ÂÐd5 “Xq4™Â†ÐM> ~†£K”à]œ]¼}‹ÆuHS̃jQg«U^.Ї²Õõ<›êð—É7pw7%˜ªES‘ ÉpHÒÉfÜȶ¢ot6Ó5º(²¦ÑM8ùu0š ÃR€!'aÆ•RÇ)!±3ÉZi?‚¡˜Å½àCÀíG°sëemW>Æig²Ñ‹Q£—Ý gôUÖ´(Œ–Á³ÌìhÐê™Û Ü¬iP†XžìÚÕÓ¥'bn%4 #Ê1?…½”‰Âq0®+G1[O[ôc(SÌí¥4þŠªôò!ÖÁÄø”1!;§Æq§<áNù¿U*ŒR¸CEŒP·MP(Œº¨[_¿üç¤ÿ_áÛŸ&v\bj"GºØAúØÑÄÅîßUõ¼(ÐM¾€ •kmHq4P‚®Ãˆ ¬‚ßBÆáPÏ°ÕjÑ—“d¶œ´Žç]…c•ºÆbw@.dŒå®­èI`)qFÎô<WTÓh%÷YH)døâIÙõ*#/–Ðœœ@ç2ê³ýF· 8_aw¥¯‹ˆ+:ăc–‡«·6Ü–y2aŽ[aPÔN,³H ¦¸Õ~„:1~dMÍE]iÝ+`r¿»ÎcÍNbFß°«Ärv™5¡€‰÷¨ë»à.DÓªlÚ¯-ÛäMf\À˜7!=AwQ­ªò4ÝmQµÍ šË¼(NÑŒ×ÍrV}*O6SýÐ>,J½§œÖ­šŸRœÕmž§Œ|Ȧ€“NP u“/Ê›u¡ÊgíÒQÃù@]¯;ÓFìs™@ +ç;ê½ šUë…F]”¯³ÍP—MÞ>‡å6 Õ¿Ìç‘=´ +/³ú *L2}—­´¿Îû¢ßf œîñ¾È¸ÕÕ2›k`ˆ`Ã11¥?ô*×+`¸ÑÓª¾ÐÍ–]½8– ÛxÕvú™ÞñýãëÈ6Ë×I;F†^¶l\ ®,Éþ÷?|G="¨J±¾á Òv¨6½YÔC +TÒŽ£CWqÊzX¦ŒC 0† ^°¸Ûü8‰bž<á®ñ?ŒÎoFç=µbûÚ‘':òÙŒDÕ¼öN…“ÞM|Ë*=«ƒ ÀŒ.CxÅIƒd:pf£x ¸¼¶¦F,¶ïµþ³íA7£`d==Ï0ÌzÃðˆ;Ø‹¬x3³Ÿâ…a®Ñy­³ÏþMoóR¥ ¼„Jb“$¨ ¥ÄÀ-šjd„~1RP[zõR7+ƒÔ?E +`Öß ðžÛÄ +endstream endobj 800 0 obj <> endobj 801 0 obj <>/Border[0 0 0]/Rect[267.6 499.26 343.62 512.76]/Subtype/Link/Type/Annot>> endobj 802 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[345 294.6 515.76 308.1]/Subtype/Link/Type/Annot>> endobj 803 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 804 0 obj <>stream +hÞÔVÛnÛ6¾÷Sü—R[Ó$ER"vµ¦I·¡M²XÝÍ.4›v4ØR ÉmŠaOѽÄÞr?ò!©0 ƒ‹?þüOßG2˜F¯Ç æí@%Ò D¦ ¡Ð˜Álð2Œ.0ÈgÆâ,KIÂ!M(¡ò倢B…N Ÿà€2ùÇÁûèÕùH’ÁÙèìùs¸nb–‘$ªçM±\–Õ¾­:ÓÌŠ‰‰É¿Ã¿“$LK2”„üÕ`ˆ&io›'Ö¶3}cŠ©iàlQ´­iãü·Áy>BcŠH„'Zk "£Tø€'©êç1RÂÅÎ<&Âæ!q“è: Ú¯'EÖÇlãÌ:æFÊGý¦h;ˆ‡Š¤Ñ»ûiaG,êÌÔ ´Ï,ªb¢¢{@Íä.€¸R&ã!K4µ/ +?²4•šˆèº©=bºštðCœf„G&XiÃuìc \†©M*ç*í³*DïÄ<ÁfJœÇHÆ@§”;:)ÔŽ²‚@•ª-IÙðÞÑ+uÄ·J2þTuŃ%ü(Ϲ·£‰Vž£v`mIEamÕðfI'V4`jfåËúÁÒ$úݧ™PtÅÒ„Zž¿BG¾¬:xXÜF±Šnc˜ÔUÛ}åäÏÂ짃³w×~iÙʉ  ºñ>j»ÆraÖëë×µ07ÙÅ›å=íSœù,»&G +ATFYHu½ôÞY>«—XO¬ã=–ØŠˆAó;ú¼S2ÉÒP²rIåÆtØŒ£ð—&Æ##µ}"ðabüÃ]³¦^Bwg ì$ÃN”ˆMÇSiSßWo¯¯.Ï/ó±kƒÍÑ¡ñèp+ì‚^›eÆEÚ®èÌC‚²rÚƒdV.ü„ûi.·vÔ½$„CàÂÁ¢:¶R ­kE46‹yºþñEG˘ã[Ñ•¨ÄůõªóáÙÉÄ5KwÏ·­>ï}óá…|`ù„ü§ ® íDÃed+!/ 5>cùï]ÍÛ?ÉŠªCHÊHš'(Q.¹=™7 ‘ˆ„(Ž`n­o +µŽMøMC"ÄÖ—Mhµ{¤FoÎ/F6oŠj¾*æ~á#¿³í{‚]ºÉˆm=Wi;MF©ž^4¬vÒ@óÉ "Þ£À›¡ŸG2p¹·N'ë‘À¶Iøq=ZàUrt‡ ²ÿ®hžA9½ý’Â> endobj 806 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 807 0 obj <>stream +hÞÔWmoÛ6þî_q 0@JbFõb!ë€5I·]W4j±¡Æ¢m-²dHtëvèÚ¿Ü)É/±³~†%Dîõ¹ãÝ…Ãlpñý-‡Y3ˆÄÞ‚QƒZ ¦ƒ§éàâétÀ}ðð|3áC,<æù.ja^H'xðxé‡Á;çúæ„lWWggðªvùˆ §šÕr±ÈË <ÄÊDgt׊¸óª|Z­Ê¬Sß䟬¬ŠSXÝé#yÒ“çÛäygÆ8¾ûYU«|V¾” µé߃gº'‹ô}üɲ‘»ÈùËÁíòüú%yl-ÿ\ç–›jà¡Ò>Âü ì¢.Uê%·)W ÁF½lþ¡@'Æ×%r#³E‰äe¦Ö‡áÚ‘x+‹Õ®ÒD‘U«»B‘²%YY-î¨^;!$¯Á‰v`I¡WËôãrϱ#p¢~²ò¼Ù7²Fò|{™[]ÓbpÄ3Ø•Z˜ÄÝßÎó©¾Í?™êº<ÎrÄûÏíòñ`Í¡E äԈ̄ © 97k¹XvÛè“þ­e…óvYÜv­t®`ê +Ž]7î7NQT.ðýÅ«\ÛŸ³viéqŒhæ‡; Ú€„‰4ÎrÔ 6£ÀîFæä[{Eq''.OpøßC2/|Èõ4z¢1•ÐFvQ3O„V¥é´N¦¦õUµXV%ÖûÕÝ=å'hŽÑŒ¶æ‘‡ñ EÂx`W¸~Ùð6ËF‹Ê•ìýŒ6~6ˆ”#¥¢©>ê± Ý ü~Hìº~«e}ØÄ6 ¡èÇF È2+ÒÚú#“æ½Õ48¼±ï=ˆgþ®øÚ­¦MB^P5Ñ8ä˜>²@à¥õ#îxææZ&ÔkºÂ~Š½Æ$jérbüûÝÖܹݽ˜‡í`§gƒýq£î„?¨&7¹G*é>EK‹åórZošÒ1Á7¸G]“}-aEg<`—úóáx±]ì’@0/.àj®¨ÝC>Ý\—¼±‘Ö5Âvhîi ®Œ¿Fæ«'ÐWpE›°±Û{³Ç[¶žŽ“´5[’¬†‡„z> endobj 809 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 810 0 obj <>stream +hÞÔW{oâFÿߟb)©àÍú•^¤í]’‚ï¥?,¼€[°‘í¡Õ} ~ËÎxm¹#•ª*FÂëٙ߼vÆcFÊéUÏ€Q¦8¸¼vËC*”¡òÚWNÛàÃŽ?¼ —Y&¸gܪpDaÜö,ð¸à† þ\¹S/[m¨³4O›''p›jFƒYj2Jƒé4ŠGЉs‘ƒÐîý_P“%5Õ™áÕA7˜áÔÁ¿Tt„ä¶ivÝA(RhN‚,™æÿ®´|¥n{è†Ãê0Óò<˜ÝàÜ–9&sj=e¦½± 8XÅ&:º ƒW8ïnÚÊg2Ì4È°båH¯ßYšî0W}? Zj.B¹€ˆî 5Ö˜£–lïJ¦t0.™LyçF]Ó ËãôàظvݺÇlõ6M$Gø0Èáƒæ6˜©Š%+U$q‰9("Ì)¨¦é¸UTm»2ž[Òø¿Áð´ºè1‘w¹Žôóãú-É…ù‡¾“‡¼†¸}{ä¦Ìÿf(ë¥M/#ã ë%éÉ¢¿Wú{7ï»Í"9ûöÐgEÅ+ö×þQP7rÔ|?í[«7~¡}«äæ…ôñ3|oµ~#æâäÿH5ò¾»èù-$ãñßòèm?Õ]1Š$Ç×ÁtÏÐw[W›ëÝ¡OéÉܳ¬x<Äa&ᯖ pü8©Áñ‚þÇ5¢/ÆgO²gÑŸb÷î¦å êGª4ሤjpDªŽ¤ÓØÆ[^•pÃ$|MÀ+àgÁϨɨ¢““'=Úx÷Èø"™B~SÛT`wÑ} òö½º”×ã ã´zÊò¯ÏzMaÊÚI*ȹÑZªŸðoÍ·öMKçºx_e•sk§éRÃàWØ{v®!½BPö»Í×A‰ùù_b?[?Ï&³9ŽkC§ÁB­"·5îÔÓSžÙ½q4Ì/Ò4XÜñ{˜#5ÂA(˜ÌƒE†ÓLþÆSb?ÊašàøF£(¯eÄÌÅZÖ%v0™$s”0ÁÏúâäM‡ž%L£\nvÉñSÆ*üÊÌõz¢+«©5ö°Ê<㧀*sm°Ç‘l3´J:¶«_{o:mÿ hpËù© a1?­ +gcvY­ÒŠÎÈãÎ_Q‰éúòÔœålŽe«‰.¤‰ŽÞ/[®Ñ\·f˜¾óDfÕ­Iô©Äõíc³„[&A-O?+5òåÈ*QpþG€Zì¨ +endstream endobj 811 0 obj <> endobj 812 0 obj <>/Border[0 0 0]/Rect[479.7 617.28 549 630.78]/Subtype/Link/Type/Annot>> endobj 813 0 obj <>/Border[0 0 0]/Rect[63 603.24 123 617.28]/Subtype/Link/Type/Annot>> endobj 814 0 obj <>/Border[0 0 0]/Rect[211.62 343.26 240.96 356.76]/Subtype/Link/Type/Annot>> endobj 815 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 816 0 obj <>stream +hÞÔ—ÍrÛ6€ïz +‰¤‚ñC‚d}Jm«MjÇ›Í¥î¡ ™­DyH:µÛi_¢}‰¾ewõÓøLÛñŒH‹ýÃî·² óÑÑ×7‚Ì›‘V$æ M'µÍF_e££‰ ‚d³‘„Ó ¢L^ì ÕÅ’îÉEDÇB¥¿h|ã(eapU¯œÄô¡hÉ;'LÆki¼‰UåõÃØsÌ©”:î’†ó\9çÿ""Mé8éXrá^#B5ºKºçóÿºèÿWyÿïNÅLàÍñîî ý݉ÈÝÝçuõÕbA®Ë9Th µÖRÁ¢ lLMÇJ³4ø@¥‚E3eÖcèEßN±´í¤»TQ,MXìˆë8dñ+˜‘räÔÌJB™Ÿ¬–÷«ÊTíEÞütsWÎÚóœJ|y¢B@Õƒ_ª¬ù…6€…Fz¶ØTú¾6-DeÕ”†*Z!º†â—†Ló6'³zµ$í!ÞRä-q¦e´¾*§ßœ\^\]¾={›]¼ºùöæ›×“ ¹µv’³8Ý<ª=ö¸°ÇIÓæ­YBؤ„ö†£zC¸g÷Fß”³rŽGpIÌù:–1 %K&zð¾¢dâŽO( @Bá£&ÍSÕæ`wF•ì—)ª’Á’âRÞ–@üýê¡%í­Ü™Ô'Lu7ÜÊͤ1†üÑ—ñ³!ŒS¨,-R˜I:eŠ°ÆÚòÃá±oûæV±e÷g7xð sÂ4ï‡Ê@±›šya‘ .ÕÖ“ 7Ћ3 +wHá£6Õö\!KcŸAk9`Îïű”V`¬˜Ü¼6ͱ»&å7¶ìá,“îtÊRí¦$¾@6¢¦}×c²Wã[¬À©M°·;™ê›ù F;̯àWÇ?Æ!{8¿8àS_3÷ïeñ%z²#°@];f°ê Ü·ôØêÏ^€üïSØùGÖÆ{ì}X•SøQâe»¥Ún¢?M[¯žöíæh}º3k¯XUö)îòúYØUzLÖ‡K(ðêa Ró !¬¯ª¦Ý¶öþ6–÷$*iÊ_Ì®[Å“’oçª@¥V»õk90 «NeYMÍ#za]øíØäaø«$a:éÀl[Ü2R.ClöªÒÂwÔgÆ9_ãjòúüüfàÒ&×ÂŽÛžÄCposYw\Fwˆîg`OäÑ›‰ ß-[" Kät‡Èžþ{â~b÷ø—lß°õ¶!™âã` +ÃH‰ýxÆ+m:zJˆ\K¢ÂˆÅ ‘)’ÃBTì¨ 92F…«æ¿ÇQü“qTBK¨cÓùQ`:ZÜå th4ß{Û2çm¾4^Ö‡ò[:/j× º6E é^˜æ àãâ6@î@d(öô<±Ç»çi{ž˜ âjµxšÃîÞ€òø¯îæjÇ27­=d‘|ûQ3.¥ïÊü9—ô¡Ì7®¨Â“õí¹ Ž¿Cg'Ù:J¿j›=⛃ïP´ö0Ž¯ƒÁBëÿ-À|¾ +ð +endstream endobj 817 0 obj <> endobj 818 0 obj <>/Border[0 0 0]/Rect[260.4 544.26 324.54 557.76]/Subtype/Link/Type/Annot>> endobj 819 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 820 0 obj <>stream +hÞÔWmoÛ6þî_q+€j#†/e¡Ø€ÕIŒ iW$ê¾ÔàH´£Å– InRýÛŸØ¿Ü‘”d;q€bÀ0¬"Šº;ÞËsÏÑ£“é5‡E3R"6†`¬@2¨õh>z“ŒNÎ9pHæ#.€á|ðqD¥€H2Ê$«C+”±„$Ãã$÷£äôìB:†ÉÉäÕ+x_{|L%©uºZå.ÊV×ó4ÓÞ¯ÉOx’t'…”Ç!øœrBr:òÑ$ëm il[ÓW:Íu “eÚ4ºñ’ßGgÉ( b CÑP2Žc Á˜±À¤Tÿ#¥"ØûŽ‰0yö#:¤!¶ÁÇ€ƒq³qLpã˜])õeÚ´àùŠFäÃ:OÍŠ“Vçn…yŽIéQE:±·PÝvBÂ==ŸË˜™¥pEaLò¾®œD¾ÉZøÅ‹ÆTÝYiº#ª²³5°f&©B¨¨ÏjôÎ3éœÿ x{þψ}Á¸[†à)ã.ôÏoüç¢ÿ_ãë©Œ(7•c}í°»ÚñÐÕîßuõÇ宊"4B¬µ§!i°]{¾T4&Ÿ‘[RÈR××hAî4ÎP‡Èhý&Í<Ž` wPc¯¥†û¢½µ@m?¯ŸP2Ü¢ëÞrd=Ôurs— Ò>UrǶý4µÌzl»ÀÀOn bÿ®DÒ2·þ8 íQƒ²ŠÛƒmž'olŸ=ºìšãy|Ë@š{ø.¾´ŸxÄä Ìl&&©Mé]‚û˜ˆß\#Ý\$ì?Ou«}Ÿy‰'àÛE9¯Ž· >¤õo§f¦àî¦[#Š¿ìk¡ÏF«· ÃgNNŒÉ­Îî ˜oQPànã1Ó`u­³öÐà·ÌþŒX¥ï¾‡-:p{ §žuñ¬ktq>#/{jee. ðe¸‰ü]ƒ¿pÍ­9…Íð}·Ö)ÞÓËÊÓÙ¬|ÑßZüC²;žÔºÝÔ%ð,ìǯ)ò†~£’s}˜IpÔÀnç&q§?ÃQ×ÉÙ{8ZGŽÍ1Cyý†;~.¹Ûšï¨=8ÜßÝ|·±|÷øŒÞú, ùÇp r0b6|qÍñµû½÷·%Z| +endstream endobj 821 0 obj <> endobj 822 0 obj <>/Border[0 0 0]/Rect[258.42 629.28 323.46 642.78]/Subtype/Link/Type/Annot>> endobj 823 0 obj <>/Border[0 0 0]/Rect[326.58 629.28 357.84 642.78]/Subtype/Link/Type/Annot>> endobj 824 0 obj <>/Border[0 0 0]/Rect[360.96 629.28 395.52 642.78]/Subtype/Link/Type/Annot>> endobj 825 0 obj <>/Border[0 0 0]/Rect[421.8 629.28 456.42 642.78]/Subtype/Link/Type/Annot>> endobj 826 0 obj <>/Border[0 0 0]/Rect[218.82 451.26 266.16 464.76]/Subtype/Link/Type/Annot>> endobj 827 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 828 0 obj <>stream +hÞÔXÍnÛF¾ë)öH:ÖzÿI"§Ä±´ŽcØJÐ"é–(™ E +$Ø-úîKô-;³Ë?1RœC‹¢À].ggvþ¾™'«ÉÑÙ5'«jb$ XHThˆd¤L&ËÉËÙäè”NfË „ÁT +HF™ ³õ„ÊT$ÉlÆ™}™|ð^œMCr|tüì¹,}Ré«2^¯Ó|E^çuR.ãyâÿ2û$I'ISi2å”Mf¯&S`ÉZÞB"oËú*‰IIŽ³¸ª’ÊŸý:9™MŒ E Õ†P!£("T…Œ)§’ÕÒ~E©P[ÁH íGг³Bdu|Ta«2žKp<—§ôy\ÕÄŸxï6‹gÜ«“…›ÇÐË}j¼†ìMCTÎo"áFƵ?å2bøb˜Ž¨ò.ËÂQ,îæ5yï!^Òp©EÞðX3´©&hªT{x&Ýáÿ"<Šüi2¢©`ÜM5ñ —´ã÷ÿ9éÿ—y÷Š¾“åè9Öú°ñ×ÎwÿîQ_d¹JW¡ÄZísª½ +R°JJ* ¼Ï¾°˜,¨=1äb“N°éd:¾FI£Ð‹¹  zXaL£¦Ì¦ý"Y¦gI±Nê2u)ß¡FOÈCHÈ´9Ê%w¦º‚ýMN&¾¤ÁÓî@áKEVNˆ?¨ÚƒY¹ˆë˜,ËbMêÛ„4˜¥éš2©{÷0ÓúåùÛã_œ\oWS4=Ü;$Ž¤aJµj(˜ý|úúü|›‰pÖkcb“!‹“Ù˜…ìYp‡®‡$ÎÛlUA ¹>;â$Çê#CÑÔRÕq¬“¼®H±ì-8•piѾåÞaAÔW’ešw4¸ƒ’SŠOä>úd^äUýÜî›Ñç"]MDŽ7¥ù"¹?„¡†åâ¦äá£ÿüÆRûñÜDMØb³MØK_0èWŠ»ÍÈÜChW&jÚNkÑ® Šp ÛT)ÄvYØŽ9Þ Ú¿ ãŒ>€±°÷îÙÕÛw—#Àƒ`>ïzAAÏ1ˆë€,²8f¥C +†m[3á8ÐqÀ3>B9éÖØ€7é°Ä7Å]=€V¨h‘ÒÛØ*:,ªbŒl– ¶ÊÎNÍÍÀJ}iõ¨ÝÀíY >0p-º€k@ˆy.i÷› û_£0ÐÔB?®†OëuÓy]9‰yÝ!ÕV=ꀡ--6×xç¼Á(1;s°e—IØAÃòe½„TËÈÓYöýŽ„·¹Mæ´·qy@òxìÌù]™¬ ¼.:jXm@P¸+øpei_÷;é.ö '|ßÿô4ÉÏO\&eºÓ¸ gÖD Ò• PãÑ®’yw¤JÃes€wY;{Ȇ˷Ýò-,¤4ŽpgZƒç·_-÷}¿Nhºw)}Ãpµïe±©v«ßläô lqËúO î{gwÍF[7vo\w7Y‚VÖÝú&)ûúËOJ³Âf›ö9,ï–e­VbÛ¼®Æ¢î­·¾½çŠj¾Ú³‡Œ«Þ°`qéŒÀÓ€—m<¼“ûx½ÉF—ëÀáßÁè/•€œír¥ër/Ë +슥÷ÿR±Oz÷ÐÕž@ªÛ–.j°Z‘yœe7±m€¥÷‰xÔiƒE@d Òâi ¶­ÆõÊw4@¹u=+-aàß|B×l_ÒøÓ–© )ÜtGÿÿ¸ R'àM‚.Ü)BBµâ´+zûn5šé'tÙ%$Âæ|tÛi&è%JŽ{«¯L¬ÐÄj`bÒ¶É 0«œ¯ +endstream endobj 829 0 obj <> endobj 830 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 831 0 obj <>stream +hÞÔVmoÛ6þî_q+@lk†¤Þ1l@ê8m†¦ µHPƒbÓ¶V[6$yëÐíí_äس¯Ý2,"úx¼ç^>²„Içø嵄IÙ \E^€+ ÐqçEÒ9>“ !w¤|È(䮂Ð\(HæQ¸ðb’!.„ô ù¥óÞ9íŸÏ#è÷ž=ƒË‚Ɉ»ÎbR¤óy–Oà<¯t1N‡šý|‡H®Eò¹Œ}èJ.’ÓNCŠ&¶r)¶ }¥Ó‘. 7KËR—,ù©ÓO:¾c÷àÊ㸠áÙ‚ÅàÙÇJ¹ò6ö±Ô×lb¡mbS| ¸éEMÍ”˜’”˜Y¶ê×iYëëJ7ô%ˆp†~Ì=ç²XXÑjXÁ;F\9ºŽRÖ‹¼Ž30ÔT¥‚°éªç5É ×&ÿÈ8fÝ1â®Ò.}`¥ ÍóðÇîúÿ Þ~¥Ù¹!—49ÑÌo`=;éÛÙý»©žÌfp•M¡!r­b’ûN‰w°Ô뺟™rѨGÜdŒ—±¾N¡2×)@íXËŠ¿-+è„Á=I1¼4U +sçGz\¼,«ey]¥EÕ»ûüºÔtï[é.jǺGÍÝTaÝ¡4A-65¾B•Y°2³ ×ÏG;Á$Q¨Ìa:Û ¹®là + e6ÏfiÕª©Í\6ç#Ãé|9Ó0f.fí,Ù‹­ôº +µÖÛ­†ë4ßeéþ–Hî6Y™2½¨[aÛN(eÝ6ï+^•nŠ—6h–›"ñ”zXe‹œ›SI¢ì±˜Ç•RZÐÈ=ÅQnq䵸×u½w²¼‚IÁG§sÝ{“T/ÍîОMZ?j¨ðñÜ^.J$s‚túÔ\ óÇ‚f…ÃEŽ"=œ¦h-ž…·ç“§{N pö¹~JÀU ++ZãbÀàS#®Š{«2¨ÇÇЛê!z€llºBYBV"8¡ØŸ{ª¼‘.@—~Ì™¯¾–ŒhCÍ°#°;óe œ'I ›lµŽÔ†A3zà«_Êi¥wGKñµ’Oø`?°¯wúºZ9Èv×lþNh]1+tµ‰Q”ØQIQŸS–Íþ±qŸÂ‹vGY¿ÛÎ=®'вi“Hs=¿ÓÅ}*¡}v÷TjÉ„Öiz™Z:NwÒ©=‹DB/âÒ‘ÐZ2á üšKí©‡ta»ðåj¡Ùø<>‹ áOM*û³ùƒB,=ÿþlŠÑíŸÁš¿é F¦ž®ÎóñâÖ´òCd!ÿGåË?À”:Ð…#MEBï~;MË‹ôã ‰ üF16ì·Ö;ÑÖž—ºÈæVŸhcýÓúv[®¿?K`oE˜íýT Í Ö>Z´á/Nn^¼FóÙeÿêü¢Ÿô¯àhx)jzaØå:ùƒr vYNšÂ ¡yD$³Èi^wýpÔÛ¿‡z»õv õ Ž\é þhyC¿ š7QócöOL­ +endstream endobj 832 0 obj <> endobj 833 0 obj <>/Border[0 0 0]/Rect[177.12 472.26 209.76 485.76]/Subtype/Link/Type/Annot>> endobj 834 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 221.58 152.94 233.58]/Subtype/Link/Type/Annot>> endobj 835 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 137.58 140.94 149.58]/Subtype/Link/Type/Annot>> endobj 836 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 101.58 140.94 113.58]/Subtype/Link/Type/Annot>> endobj 837 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 838 0 obj <>stream +hÞÔWÛnÛF}×W $ mk½»¼ÃmƱ‰Èlú`å–V ‰4HÊ‘[ä+ÚŸè_vfw)QŠ§EQ'àe9÷Ë™‘€iïôõ€iÝ =ˆx ~‚Ç¡R½IïeÚ;½ ô„Žÿð&âˆy"3.!]ô8JaÜO¦@˜SL¥ £6¨¾ßÏ=cü_ Ô£Ž¤/¹0¸!™ íýÛoÿ9éÿWøú•rçELPæx›;l@›;˜Üý»¦þ8ŸÃ Ÿb…FXk+XàÔØ‚µªÜ¾²Äyp¥‡‡jÌ´ÅØ‹¶"©Û)DèX£JšJÓì KBÓ\ô€Fˆ.þVtÇðÅ:©ÿ\´è¾Ê‹f2tž .^_ýt Ïk:~vÓª\Þ÷¨Ô4/‹ël¡ðxè Ý¡{ÖéNüÊŠÌ' ‰,ë,«šûe‰Ç+à ¿kîôhÛ 4Ž¦«ù ^õ•Xfúuvv¥ÎSû¿n™?P£¦Ö¦½ Žx¡U½Ðªð_gúuÖz·+nRV0trøøäðjÆcTùññÐÝËC;á¥ãçãÍŠój~‹ÇùG||œßêûjF÷CBÑLüܱTŸ~&è^S£^¤6ª‡ÃâÙ~UªA‚eU CŸíähg”Ç’ØŒ)ý„ňˆ…1TPé4`;c5ɯQj^ÏÍ„#˜OÚé¦{Ì6[[”¨¦"lvl}„^SýÓǶ Øœ&ƒIU. ™Ñ›kk`µq*sÝÏ|]àÎõEz³e”d–h=ÑŒHÚ u“5j¡° ò) Á8ÉçÊ!ÎZ—®'hèºt­Œ ôh£š$ŠÈH¬‹&[¡´‰ëi6ý”‘³À«“5X’Ý•Ëf­lÛ«¾ Xd†wdåÕ+’¸Ý„¦Þ8uµRð&ªþÓÎwˆ„àG>‹bð$ q„‡:¯-¸lò(yBÛ€T m„í*u6rÆ@ßèµA÷“xwH¾½¸<%ÏßfÅt™M¢ KâÈU.^*Uìn4Âg Fe7Ų̀´ÅÛÇ}JrŒÇäÎÞ£÷ ‡6©#Í|G©€±ðq‘A§×JblýŽhiÛ´'8ݨ2d-îŽÊך6Þ,«Ž @T%T}ÞiP‚¶OŠ:x:kRËRàs_ï¥ÙÑv„×Z#1kx«Õ·ñ}ÈæKËHXu€q\.ïæŠ(´®åâNUVrèð„6­,}¼o,ðx¿.úŒÄ¤ëªÞUµ"¬‚ç¦Ahž~ÇL8Áí„Û„ü¼, +œ(ØÅÀãùÞÁ¸Íß2,휅¼èØŠgÁ^ÿtÌ®êw˺ySv™Ä¿ËD-1S4"ÇOÚ· ÇÍò®@lÙ[ƒÔøÄàœ° î'Râ/ ¸‡'ôãa³Ólw $HÄCšðÖ9‚Z«[û…¢É>£7u.b}„FŽüëÄåõ%îŠÛ—åuº ñ‰ž¿¤^»ž×çDó@e÷…À]í&N¿ä•ªŸPOñB:rª-áÅ-?2ÑÂ_ñ¡€ùœh„/LÀ0^ŸPíVéœæõ} Ï;dë,‰o±é(·][¹ìÚ*»3e¿­¼“܇Ý:'4é˜pÐl\6!Úõ·OÔ• +endstream endobj 839 0 obj <> endobj 840 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 265.56 140.94 277.56]/Subtype/Link/Type/Annot>> endobj 841 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 229.56 152.94 241.56]/Subtype/Link/Type/Annot>> endobj 842 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 843 0 obj <>stream +hÞÔVQs£6~çWì#ä‚" 0}j“K§6Í$Ü]g.} Ûô0¸€söOê¿ìJ€cˆmÜÎt:? KŸv¿]í·ƒ¹qõý#ƒym|€p(TÒ˜ßEÆÕ-ÑÌ`(þðß8|‡Ê!Z­ê†D (s!új|6oÞß‚G¸¾º~÷î+‹Ä1Ëy/—Y1‡ŠFV³8‘ÖoÑèÉi=y„…ØŒ0áAtcØh’ö¶¹£lkÓ2Ne×y\ײ¶¢ß÷‘á¹!†!ˆ'€p' C n@©Û$8ñE¿Ž‘îÖ1*Ž^Ä@wiuð!à¢ô1+bœ)bz$Ú¨Šë,[ßü°Jc5bf#Óv™úfaav°Ÿ;P•,:o¿”y–Íœª?>űï{!qÍûªlé:ià£å„›²³Rw.Ê¢³g 3LUR9~ŸU×íÉS§%ÿ'°0´ì}„6§¬z` EúïùŸÿúÿ5¾û«ÎÎñ S'Gû³CvgǼöìþ]ªßæ9×rØ;vm%Šx«ö„¢—`>¶÷µ¯hÉ'øG™ ,âÚæ'‰lš'óÉ‚¤,ê曽§J¤7øãú¹M=ÆGCT¹®9ºÍ62}^/WS¸Jþ±–E²ÀÝÇ 6ÂbõK•Í³"Î'`×ñ­õT€Í6ŸÂÜ•ÅœÅë¼yXïÀ8 ÿ±Ì›x>éy'x5(“¯G…ó‡ÑŸ²´Y ±‡¿Fqþå@©pâR¬º]©ëå4‰Q‰½”Y +õ +×w»ž´±¬Hå§/!YÄÕÅäñVV—–ëgœÎå¤YÝ\vÇJCË +¨P¹œ5í¶÷áD¥+ßjéØv¾Æ2‘"Mþk†À¶G‰ ó-õ\âtK½§€¦lMBK´ÁËÞã=dËüž°ñ˜Tb¾LˆZ¯@‚PEê‘fqþ­Ù@”#b¸££3òQŽÄ‡óƒ<Žà«‘¢ü–SÒiö\6ë +®›­.®ƒ€‘b aœ=["زo*êêÖk{úà¼T×ï WÎ2Ü©Ü÷W6|.õžt}ª×˜†Áä=Á\ªÐ\„xWP¦n‹ÝMaêü/ö*YÕ)>m—ÌqŽÊ~‘É<ýgQá^%Í<ÝËá*.|°é¸ÎÊã:(ÇyÔgŒªÖwq)‡›]„²€kmlwÇ.À±¢ztë §»4¬¸ÖÃ]y$7È‘*¼ÇýXÔµ‘¾Ær¼êÊ|;G˯?¬Ú]wñRw7¥E8OÝTêE­ú¡ªÕ}×0—öŒ³e1(«ùxIócwıBtOp?!l° é39Íc{l³8ÃRþK€8v±ˆ +endstream endobj 844 0 obj <> endobj 845 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 846 0 obj <>stream +hÞÔWënÛ6þï§8 °AjbFÔÕZÖm.[†6 µÛ0…"Ó–Y2$ºIPôö–;‡¤äKí¶û1 s‹&Ïõ;7ŠÃlpüà ‡Y;=ˆœø£<1˜ž'ƒã ’逻àà>ø(bž ‘ç0Ç…d>pP +sü؃$Ã…Ã}Hî¿[gç°œŸÂucóó¬zÖ¤óyQÍಒ¢™¦™°ÿH~BMžÖ00䌇$gƒ!Št:Ù®G²•èW"ˆNË´mEk'ΓAè²(DGB„À\/Žc`þÈq|í’òR¢£Ìõ7"ðÔ!úÙ£+ßcÀCÔ¹Lv¹œìR«P;ý"m%ØÃEÖëÅ$¥·¤˜èôY•ÍB˽4DM–"W?ØCîÅýˆ8®£(ˆ™o]7µ¦˜,3 oìhÄ\K)­QQWF>†@즮F¨¾ßïxÚø¿€Ç±=¡Žxè:\/°C2ºç—?þsÒÿ¯ðþ'Å΋§È9]ì°Mìx c÷ïšú¬,áU1à 0פÍY`µX‚­h졲Øzg»nŠ Sc-šrŠ\UN!¶Ž¾«$‰«‹=fq¨‹‹ØB»‹¿j+ªâ3ü¡œ,* ùزCµ,ª‰xÛÕU+Oֲܡ2=3 ‹ºDúÇ—i{7ÞbÃýž3ybè‘á¾übzY/pŸÈ¯–óMÜ_³­çÈ–òrÜÖÄ!ëùÇVõLý¨cc‚(&LU±¨uþÎ¥nœ}ïEôܾۥ™K€R’\ÀÔv#ê06~•ems÷ÔÒ…íÑúÁb–(ùÐæH&Í“&…,U–â®Ãû”vÓ„Êò6Íl#ñ4õR•€ûBæ Q·|\0ŽÆQÎb¬gsX¨Œ±&bÚÜ\ yz{— 熳#V\]'w]mƒÓ´3 Q*‡^ÀbG§¾:«6kVct« + ¨Ðjö™3ǘ±iòL›v“¿ñš¿zôXVЄF²‹í~—äój²S®Ã¢Nî†_ä«RÐ`8‹yQ¦èL­t =Ÿ¡Û[Óz5 "äºÊXå7¹¡ð‰ ŸñÙ„;žó‰ ¾)ÒOä}1@AЖøý(ñxÍ® »õ˜¼Áº´‡>vBo”­ÈdQW¬Ë!G¥ëd«$â]¡­Æ,T˜ù³º*»¢ +±¨†µ«2Ä ŠL#d£K ¯îš±¡1¶ËÔB)ð©yûø6~Á"Åžî»(LB=UnLR™Â´©çê×Vùyxù[Ó1Ú@²À|ÛÀÏW×;g³ÃP:ü2ºÐÙÜÇú×£dß´ ÛXÌÍ´Ø5)Ú +{#Öþs« š‚ƘâþB¼Õåx¤',£nÌÐ;Ô+ãÌ+ä%M‚i}´êÒ;¨_ãt<#ä–¸kÖØ°ßwƒÊe¾ƒ~ôƒj½8‚‡#x<‚JÜ¿Hi|‰fç€Ëò´y²â+S$¼Jçbm~Lêå-&NoYÑÊ#(Å¿›wgùú´!ïSš69Ê…ÅÖ Z³q‘Ê|‹ñ&'¢œ JyÏ“]¾Ãi®†ìÓU_Ä„W#¶Á ,w9«™’cüS<_=…¾Çã¾.رÝü›Eƒ^LÇÖAb4V¤QÂÖ )È|OI¥Iø]QÖ0໚±ñ˜Òí`lŸì$Çš\6ðþT~ Úøž¬žÓ‚ ßÀ¢¨hµ‘iݼÀSpN €ï0mäð{²g9?­«Jw Q³ñüð´? +;[ðuKÿH‰äãêàH‹-ð²‘V™@…JŽÙF+q‡ ßôv¡‚^¤å/ª™}.ÄZ[{Q<ˆ ™þù ^\þz~F¦®Ea…³1gÍ,ê@æÅ­ §5lË9@Þ•øeiµãšÁNwùîmQ‹E¨b±ÓZŒ×v°(7«0éÛÝû½é·@{dÓ·â}é§È)v…LšôhZ*T¥i/ý}^`ß R#ùðÔdY%Ç6ŠªÄƒ4aâ¾”_^?K~|{öóÕùÞXuŸ¯tY$›¼Ï?Ë@Ÿ,mœán§êųßÎ_}Û½qü-ÀÇÔ § +endstream endobj 847 0 obj <> endobj 848 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 849 0 obj <>stream +hÞÔWmoÛ6þ®_q °‚š+†Ô»Ü¦@»‹‡,5-Á0 ƒbÓ¶<Ç1$µiPäí_îHJ¶òâÄq7Sˆ:Ï=Ç;ž9ŒÝŸN9Œ Ãw `!¸¡ƒ\#ãÇØØ}ÏC<2¸ ÿðÅÀ:6£Ì†øÒ`h…27r à€qâkãwÒ龆p°{ÐjA?7yHr5ÎÓËËl>†Þ¼ù(óøgÜÉÑ;y”GXœr߃¸cXh’Õ¶mGÚV¦OD:9ÌÒ¢…Onlxn„nøÔóÚNE@Ý1W;äÛ4ðëyô”Úîy$Bòà¨IttIC¤œ'Ý°öY³¹¦F¾öú(-J0-Ÿä×Å0•#NJ1ÔÈä;$s“ú¤Rû¥RÊ“JÉÖoÆ=ÓâNÄäG€B^D]Òϯ´Æðã „33©MDe¥¨¶¸šWö1Ša&Iµm?¨YuÝÈ'ÓvP(†T!Æd¬Ò)°U:ùX;–e%Žmí|\r€5Ä°¼¸«º¢R~€•“ê1ýzÔx2”ŽLF !sq}”Þ`uØÛ–˜ð¥‘Lfpç[•t‘gór”ï Øy ëÊÇ¢TÆ’˜‰ùF™ŽØÌà +ð WÞJ©˜âE-‘wÏA¡—rt`+ô(ÍEú—Vç6–ûЖlF £†l’AZÀ²ÜëïLJžõöÛ²"[ Õ͈_Èî“Ž˜ÏPž¥/}‘£ôqÌÎc˜Ï{øðß@=\¡>—¨‡åd{Ü–C¿Cu½øÁZÌC†W,¿çWÿCï8në*RÛÚÜ+åFÿ +}KȫϯáÕÍƇ¦IJByÁLFdgÐÖÍ·¢$ÞïwO¶¦¤öIY-“¨é…³•§‡૽eF—©­îé$]ˆíOí:íÛµ³ëg–•,IækÉ^.'ÚfñRewWªœöºG»‹õL)ŠRö£åD€Ö’ÒÑUŽÝ«£ØÔ•'MòËYX_ÁU×ԅSZïæ/O'™˜ Íœ©[<¢o«a¥ŠÒÃKMîš ¯ö2x‹†Dxß6εZ8±¼Ú#®PúhJC© ù§‚Ú¤»…| \QRç΂ÞCŽ¡es»½§—Ïž«Æ%ÉÖkiª¦šª©¿­vonâvÉë§å¤¢nÚj=É›bÍ®qe‘Êz>Uì?}Ú1•²yVÆyŠÒO"/”çO¯¹žd3~%d!W•‚Ãòk¢¹¹ø\®ÎÖw{«bÐùpÜ}Ö+ ë¬Ä¾l“”+›,’Ï@âiÖŸ£ýßê*ºiWRåJ£9S4ʦíË‹ ÁƒæìkÚ›†t‹­’Þ¾¼Iƒš¤X²±ì ¶væbuÕ`+þ¿ë\ +endstream endobj 850 0 obj <> endobj 851 0 obj <>/Border[0 0 0]/Rect[336.96 175.26 438.54 188.76]/Subtype/Link/Type/Annot>> endobj 852 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 853 0 obj <>stream +hÞÔWÛn7}×W $ؽ4ɽ7MÕ—Ä…«ò&yˆŠb#Qò6ÒÊØ]µ1‚|EûýËr/’Çp.E[Û0¹äpæœ!g84ï<=4/{K!È‹r9ª7ëýôN Jf=!‰ãˆBæJ +]θ¤dÙãи»”LÐá£ä÷Þkëèø„|ÑáÁáÞ [D̵Vó"].³|N§y¥ŠY:QöÏÉ°äÖ–|&bŸÁDàSrÔs ’·º¥«uÕ#•NUA‡‹´,Ui'¿öŽ“^ Y€HÀü€˜tã8&æEœ{5%ÃÒL‚(“ÞÎ$ü \3 žbÃ=&LzQKYã’Bã2½ &}––ÙNÀBëÅå4Õ=aUjZw(Ómdå6 ¬Fì§F¨˜\4B²n¹ðmG¸1ס‹~ú1ó¬a±ª%¦ëIE/í0bÒR–²1±ÊýØã`®}*e¶Nõ¼èÛÚé¦7»x¿ÑÒ‡[ql¶fœcüVÜ7kêF­Z ä[uÎmîúƒZ¤Wª¤K¥/[«¼L'¨lÚëvCûµ•Íhlåªrž\¤åy-7Z/`V•uˆ ïëÃð±ÙhÐÎVTfô˜ø#Êè{ʆa _/7j혀ÌÞ¬¼ÿ¤S º²]‰Ñ…‚~JGý)Ƴ²Ò£j¦›·Bu›¯ s-LS‘éÔ¢Üm/χîžžòïý9ö¡¦a¼Á4žÛ¨E©¾Ìúƒ§ÇèhéÆøba‘ê䢶´ö—¾Õc7œÁN¤PDÖEŽoŶjS«»,ŽêrÝôp­J$‹ âB_¬ºà ̲©šeƒU~¤fézQÕ:Üëõ>V‹©DnV·ÅGˆè5Çr¤*ÔB îÌ”íâØêzÀ7e©þ(išV)ÍŠÕ’ª EMÅï7¶8sQÆðÝjßœxkð|€ìÖq–Œ^œŸï`ŒXo/ë`…Q-e•Vj©òŠ²ÜÖ‡Y¶*”Å£ÏË6þT^åUú²3[†Ý°í °Ö-š´ÊtimÂTÄnž*]QÍýö¥bê2+}³ZWé~CŹÜBï}6imÅ»ÎtŸJ¥èl+vWÓ,½¹dr ĵoÇzø϶Psu‡J/xNpw±˜DW²m΃çFÌ÷ $͉rº#åt˜¬Öå5z¯Fï¶È½8Øð=;>9hÝ㸓;@-ìwÊýö•Ï×é\¡5,QyÚøW¨üú{§KĵY¾1Év"Æ©…p ËkoNc34Kô+öÜœ³öÓ5¬À‹Í•M°ÈNMskLôƒ•vCo+÷ti7™²Êñ²œ \¤ÅCÊ‘Ytf'3¾•KÊW 䞥ŴIçI}´ûþ·,2}' +endstream endobj 854 0 obj <> endobj 855 0 obj <>/Border[0 0 0]/Rect[422.52 376.26 498.48 389.76]/Subtype/Link/Type/Annot>> endobj 856 0 obj <>/Border[0 0 0]/Rect[206.28 148.26 281.58 161.76]/Subtype/Link/Type/Annot>> endobj 857 0 obj <>/Border[0 0 0]/Rect[308.28 148.26 340.92 161.76]/Subtype/Link/Type/Annot>> endobj 858 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 859 0 obj <>stream +hÞÔXÛnã6}÷WðQJ× /¢$¢O©ã´)²Ù vwº}PlÚQaË$o³(úÛŸè_v†¤.Ží$ ´(Š"™"çp†3ç —“åàôû 'ËjK’°”DiL$#¥,ßM§œp2] ¸ þÁƒ§ •‚$’Q&Èt=``…²HK2Á ã™þ6ø98_ES2:}ó ¹)CžRl–e¶^çÅ’\µ)ÙÌ„¿L$éåZ‘!§‚IÖØm[Ó·&››’ŒVYU™*œþ:O*ÒàFLUL¨ZkB£”±È9 šÄÍwð”Šhç;ã íGp´ ƒ¶Îk£´ñ7&8n̾ÅÎ뫬ªI8Œiüô0Ïðµ™»’ã3 ŠÆŸöÖO*g÷~’pOÆU8äR3ü‘Dðž$JÓ(¸)7nÆ|;«Éû0I©Œ·RyˆMáíÃØ3 ªqÒD5ŠšÍ3é6ÿáZ‡Ã0ôP0î^ cÜ.iž¯üçSÿ¿ÆÛŸxv2¡OŽ5gèÏŽ+wvÿîVÏV+r›/!Cȵ:äTÔ`eÊp(cªƒO¡0hæÔîŠÑ—S"l9ÅÀ-­L§ÂU»¦:vÅ…/À!qôu¼bK~?¬“yQ“b»c¬‡êcð1$³MQÕßöRœažÃlû…Ì`ö}VžXr­ÍGk&‡ábnw-LO¯{Ÿ­¶~! çGÎ7Û»•Ák»¾3¥Gƒ0ü"š›~~h6YÀða,ü “ë²z +õÃ/­™Ô%Ððsk œ‚F Ɔ³ þUöÙ”_ý®éÂÿLñó}V58çy¶üÏëû¯]8yÈf=ŸdoÙ‡¼4ãÇúUË\8ÞçÙ^0%Ò§<ëåß+-ßnWæµÖqnƒÃþ\Ÿuùm^Œ¶õa€O›|NÖ¶P܈yzróm}Õë‚FOw»¶ÓƒxoZ Iuêº û†¢*8­°¢),x(&³Èß•¡` A ô ¡;}Bב dëÈw#m·`¹Ñ‹ò­©¦85ÌM(9ô!@W +&Ä™guFåfMê{C<’òHŒÆB9îe-ïnÏÇ·ãsì<ÚMETtÍ:Žæv©ê¬6kcOßÙÅ'¡q¬zËU‡5]~8»¼žìÀ)ªµ:œ…q³°ˆØ:-òø }A@«C:Ÿº®+qÕ{Bƒ]DJR}.êìv½EÒ‡C!@ Öð„GVçÐsdw›mÝ"= $ô%ûq<â[Üó«=Pôp'oHe ù2™eÝgyQýé[Áö¦‘Ð%)Iê Áoe¨K¡HChe¢1'­üø–Ó!îX䶈Â't¯WÅ68n÷Ê}G8¾8ÅX\eÅr›- ¨¦b ÉJS> endobj 861 0 obj <>/Border[0 0 0]/Rect[177.12 266.22 208.44 279.72]/Subtype/Link/Type/Annot>> endobj 862 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 863 0 obj <>stream +hÞÔWÛnã6}÷Wð‘ÊÆ I](¡OÍÅÅÙÀH”í.º}`mÚV×– ‰Î:Xô+ÚŸè_v†”Û±“E¢(X”x8sf†s‰ ÓÞÙw‚L›^ÅS¥ 9©MoÒ;Ï{gAÉ'=! ‡?xˆT±PrÆ%É=R²ä#Xp‘üKïgzy5 1KÉÅÙÅ›7dX"e!­¦µ^,ŠrJÞ–ÖÔ=2Á/ù )ôšb&²˜ôILòË^DòN¶ Q¶}kôØÔäb®›Æ4Aþ[ï*ï%’© IXœ&Ã,Ë‹RÎ#o’³Òm‚¡LF;›à„nìÜx!s¶g6£´3yI¼Ü*ñF_ëÆ’ Ÿ0Eï—c+A­û)ð™Ò2` maïZP=šµ éŸ\ÄA_„Ç…k¥âŒEtXW1^,y¨”IjZ)M«¢*[ùç`Ž>•2QS£¨#ÏCOþ/"²,觠#ëK.ü2&A‚tI÷üöÇýÿ +ß¼bìBÅFŽw±ƒlc'b»—ê÷ó9¹-¦pCÜ5ÓR°1uЖч@†ðÑŒ™c ¹Ø¦“’.(/T&*Ùª(OiïÒK¹¼ÇBr÷XZ½Æ|?Ëséåd,K|ŽâeÅ #”Õ /¦MÒÖ 26“b¨í ó„~õ~f¸`žpLôK`âÑOÁw><ùÉ̹}þ¢ëq_÷ñEiIiÖ°cm-k[û[£ª„3‚­™®OÈÔØkýhjc/ár½4õíjîˆÃ÷—¥¾/ôëªïf ÓÁv¹Ã îìãÜ2Íoƒ†ÛÊj[T垈ƒl:¬\ïp¾Ÿ¢Ãz©-M'¤\->œÂgÒ½}<õËÆ"zùáéuùñˆ?c;;®pX´U·öâPáãÛá æ«f¶{jÃð±åcÖö›wºù|Ôå`|^-_ƒ\¬ìkóÊÚj±A à­=Éù½mâ‡;T®iºŒŽ1éÕZ/–sßµ7”Üjú¡ð=_¦>ÐôBN±Þ„”h÷BZ­±— YœúÉñ¬K^Ú¥ùŽ®ˆ)2ø³ù¢›]ˆ `¾QtôafqdÇÓH‚þÆbgæèvv©‰ˆ¥ê ·pæ.5¹ElSç½PñÓ€ù3»C–¥Þãn…N‚%]äÑž? NmëÜ —LŒ6bÝ„“¤mñ¼5¶Æ¹„ Q´k?®8´ybj5™ÔÕü€oÏ|Á±6ïûbøöæn‡”d-h»(ÙE¨z`®cëp +' +j?ed„ÎkÏA`…ßR…ò×X@Ú$Ý1¼kRÑüRW{ˆþµZÙ²]«úîÇöàúšY.¾ª»xmt;£NÝ ûÕüÙζ0þÁ@d’ÂP¦IÂŽG»¾úFÉar‹ˆTœ9DLï<º¹¢ŽWäy…³#˜™»K—µSíÕà -¾Öåt¥§:?8IBÛ7üԦܟâá¾g*~äÝkÛÇÿ!pؙܛõÿIÓ—â­}¥íå7tý½>´,ʽpàÖòã]«4öÚÕ¹ˆgPå êLãþeQûäÞz:ñDnûÄ}cö±›"í›éàÌpÿ„á¥;Š+š{À•KŽ_@ õæ0Õà ¤Šf€CÔú¹H‚¿ß𔾠+endstream endobj 864 0 obj <> endobj 865 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[351 373.56 521.76 387.06]/Subtype/Link/Type/Annot>> endobj 866 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 867 0 obj <>stream +hÞÔVÛŽ£F}÷WÔ#Ì®{hî(O“¹¬Ín¬1Ùì*“‡nÛD,ÀÏw$?‘¿L ¶a°A‘¢(òC·›ºœ:ÕUÕV“ës«bâZà>ؾ –¹œ,'߆“ëÂå„›`àî{Ì2Á³ f˜n&Za†XF¸1¸ áï“Ÿµ»ûp˜·×·ïÞÁ,×¹Ï,-[åb³‰Ó|—–2_ŠH꿄ߣ'Kyr˜rÆ]»ÉMmÓ"Û•é')2‡ÛD…,ôð·É}8qìÃp™ã3­ €Ù¾aØ* ×džÛ|ÇH™i·¾#ăU}Ä@4UðàGÛob&`&'`ÕÎUQ?Š¢}ê2Oûq»´ãZ)j1­¾–êÌÕj±µP­k!S­wô)·ƒþx.î=Ï ˜­ÍòLI,vQ ŸuÏg¦&k+Eí"Kkû˜ƒŠaƒH5M×kXµí¼a)ð}ê£`j\mÐ]‚ Í:~ùÏEÿ¿Æ)w–Ç8eÎhr‡XçŽ;*wÿ.Ô›$§x…7ÔûVêœ9Z5XÈ\ŸZ. ´Ý´ðP.X…‹±.'ϬÊÉÅÞqh+ahªjXàªâ¢ ö×ÃöbûJUòþ©‚ŒÓ¶‰Ð]-’™–_žµg¢,-ÊoN.¹AUz×#ÿµ+^¡Tõ"”Z‹ü +q.£2ÎÒZÏ/Êï +Ùk–œ§» Š=ŠW™q(AҌӅÄã}ÒK/àWµKÅQ|ÿ—¯`ŸTû+xm6dkÝ®ÏÀ]‹¢;ߊÛtcÑÁ°Ú,âUú´KäOñ‚°¬OðÔ¡­a£äŸ¨ÇCJmäŽÖõØ—–Y–¼®ðë˜Ìl•ì'±‘Ï{(ÊœsEÙ2žeè±€•,+xJ7+@¨(­¶xÁã‹d¶4OÉ!ÂèŽ@_[êø+‰¯U4¡lÓóÚá“dÁÎËü\Û?¹~[Å"é>&³ Dy>ªÑ|ŽE10©:`^bÑ´šÁTðåxSdx~VüëEñžXTì7³8‰¼Äø?ÊR$79)ñÜíÓ=“X‘1l å)1ªÏ_„üضûQþm‹ÌTh‡÷h>çqÕcUˆÿ”Ó~#ƒ¼¢ê¦Û¯É3´mT—u)# V°ZöÞ Áa’ïâå²EHÕÉGÛ¯ØKæQ´÷sŽÀF­ ðòÅî!ìh€ðÛ[}:ä±ûþ-À¥¡a× +endstream endobj 868 0 obj <> endobj 869 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 577.62 206.94 589.62]/Subtype/Link/Type/Annot>> endobj 870 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 871 0 obj <>stream +hÞÔWmoÛ6þî_q+ÐBJcFÔ»Pl@ê¸C†6 ¥ÀPkɶY2$¹M0ôí_dË/Yöa–5MÞïyî…WóÁÙ·æõÀw °BpC ªt0¼gï8pˆgnƒ…¿øÁÀ96ŽÅ,âåÀB+Ìr#â).,îBüuðɸ¿…0:½~ וÉCæå¼ËeVÌá²hÒj&¦©ùküÞ䨛<Æ#†œq߃øb0D“VkÛvȶ4}“Š$­`”‹ºNk3þ}0Ž¾ÍøÌóÙNEÀÜв\I¢”‡”Ùnïy G"ÎŽ…HbÝ°…L~Ùœü’+_~/êÌ¡Ïãn•Zq£Iµ€Œ>C£0™oh±Z¨š.´­>-î™CîD} \1׸®J%‘¬§ |4ƒÙFª­ÔúŠ²Ðö1’`‹8µm?hIuÝÖyËQÎÿ <ŠÌaˆwDCÛâjéé“»Ð~>ÿã?ýÿï¾R윀qŠœÕÆ PÇŽ{*vÿ®«çy7Ù34À\kLÎ<£Æ¬ÓÊ:>‹Œ/¦íàfš0é1Ö¢.§À–åäcëèºJÛªØ#ùª¸h-Ä÷=減¶"+~Š_$Ȭh`!jÓ7ί³âZTM&òѺ9¯R11p{b´,êæ lå¼EE{¡Õ‹õòêR;>Ñ:(‡{ +x„ÛIúpDs!’ƒ·½Ç]ñ˜VÒHÏl‘FaŠ» Q@ß™&c{–È­læZHñ.؃‹B|(“4Ÿ{.ì𗤳 ØÑkãÑó°aÿåÜaõV»ë­ÔE{±¶±­¡ŒrïOÆ 2KT·õØÁƒ ÅCΙëDá>2$%ëë²j&;=HJ/IºžJ€ h’9F@š–¾‘³Çß‹GH«¢¾?ú«2Ç“ÇyYìéìµÓù’à¸\í_ƒû‡üR˜AÿPãmÙ4岯„Ûøßô[¾75ÐÓéxgùàxTÔÆøA,W¹z¼»÷_æêÖÛϹ~û®š@¼Haf:›¾ƒ8.y^šÜÅï_i®HM3Ìx0i†0ä P/Z sèân ¦B:ËÑ‚³é¬jÔ+[Ý—çŸÅÔä¾¥÷P•ë&+Røš5 hГæq•‚Fíµ¨™…X¥IÙ¸(‡*Ì¡ÑçûÅ{pq& +·n÷»BOQ F‚|ö¥j%½qÑU ŽÇh\8†ëØÝ%eƒå¶Á„€êCˆ°0£HÃß&4 õ˜ežì\‡ŒyƦ}ÚÆErðKNŠÝ=í8zQ{O…‘Ï–Y.g)¡jÆl…»C&o‡LGû))P‰äèD’‰¨Äs¾> ¹O°ö1’¸#¤9[`Tô5SR®#ʶw3 í>ƒ"K£³e:+$!¨ u:m²²`R÷ÈÛ,cN“?Öð¡wy%{áè-L¤S#!ë†|¢ø›Ê²S5Î0 [B¯ƒú1åèºçÊf{Y̨WžnúѾìÎ!¢°®e¿¥5ö¤?ö?Õ¶ÞÒaçFÔ½dðìŒ,éô²Ù¦@_mZÔ„« +{ + +êÑ8¿Rõ»ï¡k¸/51;wQ­*ôr61^ÄòÞŠ’Þdè·Àÿ>ÑÓ•¢Ia%pô/æl2)^LÌ7íVi³® +àÝ©<üFd ì=½·´óâe Wã^Öhͼ8Õa)‡?àâJ,S=<¶å¥ŒïÆ@‘6Wô² bdÇñ–ÇN§¿‹L²ï˜²Jéi..oÆ£øògܾR0¶1$ØJ•À³ÀŒ{ÞÝw·ãƒÌ­ëç#Öžäøï“àýù/㼕¶·ïÌ•9JË‘Nøs¹.‰^=àv~ +¯韇­Gµ»œI@ÿáv¢@d„l<.ú><™‰ÈIŸëœrfš.Ó¢™l“‚cè_ Û2ö +endstream endobj 872 0 obj <> endobj 873 0 obj <>/Border[0 0 0]/Rect[320.4 448.26 351.72 461.76]/Subtype/Link/Type/Annot>> endobj 874 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 875 0 obj <>stream +hÞÔVënÛ6þï§8(0@jcF$%JB€™cœÕH¼¢Ã¼šM;l9”.ŧØ^bo¹sH]l×vœð$)’çö+‡Eçüý‡EÑQB/?R =ÈugÞùnÜ9pà0žw¸qáQȤ€PzÌ0^u<äÂŒïüì\õ°zç½wï`”»éëÀjYài ù6 ¼¨¹¼×†bcʦ³Oƒì ù!ضðÊ +Œ?¦ìFƒ½¡²Þû¬8“Ú[œH­ u^B±÷X¶SÁ€û(aW¿­õÄã“`³t•‘4½:à*Ç1‡çzfÿG€7þu +endstream endobj 876 0 obj <> endobj 877 0 obj <>/Border[0 0 0]/Rect[260.4 629.28 291.72 642.78]/Subtype/Link/Type/Annot>> endobj 878 0 obj <>/Border[0 0 0]/Rect[316.32 117.24 399.06 130.74]/Subtype/Link/Type/Annot>> endobj 879 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 880 0 obj <>stream +hÞÔXÛnÛ6¾÷SðRjgF¤$JB¯Ö†=ŽÖµXv¡Ù´£Í– Ii }Ší%ö–û~’ò1N¼‹a +X +õŸ+Ø|pöݵ`óv B–)‹RÅ€5z0¼ÌgW‚ –ÏB²ÿðiÂCÉ’0àdùr@ +¢,dù/ˆXþyð“wqyÅbž²ó³óçÏÙ¨ñEÊC¯ž7ÅrYVsöªêt3+&Úÿ9ÿšB«)æ"‹ÙPp¡b–_ †ô²eH²è±.¦ºaç‹¢muëç¿.ó’~ÖÞW]ñg¤ª?ö‡’³ôé¨èJtñK}×ÙòJÉ1Îh¦&»#ÕŒ®ÄÌÔΩ¦IzvÛH"+Ѷ½ÊÍáÀøë¹ÐŒsË´žàa昂žÞÎíMD¾a­Öìä²ýÓÍn©!c;?(qc~oÆð&­2<¡ì†”WcYÖoˆÌõ…õ¡65sõ9¯ú FY²³X0¿/¯Î( +¯‹j~WÌ5j|æ#¶ J?®ö÷JÂÔpï­©TÛˆ¸:†¦‡!—ñÑЖ¼6Ù5¼y.-sÆ3e½ üb´HhV¯3ÜŠq%8¡…ÈúF©³Ž¼ßíA©J³Zd}[•(Ñêné+ì¯{ÝÜx7>›ÔUÛ½0lù3’K³ hn‹æ[XÂÒ÷TãøËLôù¶h{Á׫b‚Õß³áxªO`»Ðm9¯Æw ýc9íÈ‚âcì°„*Á€ã'xvõ‘2?¡Ï†oT/îçøzJW–öm±ÔdŽkh»†v½ [CcËæº3úpZWOGÄÔY¸ŸÌ¸2§{(ø°'Îâð@3¸(âÇ4o¸öRB9|Òa›’÷eqR:>•EŸŠ'k´‘î;°çGÉ?žFîâ½4¦Qys¬\Ëv:"›>BsNåñéHS[’+*€/HY-Èk·“¨>¥ªª›c~í%Ä ¼îzë©{zZÉ£3ƒl·ßío{¡6MV¶†Ýܯµnœ?Ry½:ÔG8Êq~×ýCŽ—u×ÕË]¦‘ûõÅW·–ŽC+Û‘RnoXXµAT/ºžùÒ[=‚¦€˜E¿w×ÀÇ‚)¬e § ŠÚ`¡}PåT8˜!®ä6ÎØ`>£ñ»Ñå8uy½ƒ3°•³m¦¸¿€Æ{`ÃbY‘ (Œ¢…ô’X,üR=üR„³Ôüê üŠ¿¨"þrÈ+å©Šw Wš8¡­q×NDÔ¨8==(HcéàÐÈ wòzeŠ€†ÆÆ­:ÅÝfeÒˆÉp×æÀ e”©Mô7Uk\Fx„Ü6Ï]dfT¬Á™²¼ÂÝ®ÁÅ`ˆô$Ñöÿk¼uipŽÐ=~€p(i± X-zCþ`xUS +endstream endobj 881 0 obj <> endobj 882 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 883 0 obj <>stream +hÞÔWmoÛ6þî_q+P@jbšõŠ¬V'2l‘¨†y›v´Ú²!ÉKŠ"?hÿrw$eËŽœìË0¬ý`ŠäÝ=÷Ü#`Þ|-`^õB ÁCJÕ›õÞ§½ÁÒYOxÀñ?þˆ8bÒƒHrÆ=H—=ŽZ÷ é\øÞ÷~uÎ/>@Àb†''0*]3é¬æe¶\æÅ.‹Z•³l¢ÜßÒÐ’4–&’ú‚‰0€ô¼×G•¼ÑíIÒ­U_©lªJ.²ªR•›þÑ»H{Ÿ ! B`žL’˜sî‡BEasŽž2Ïß;G"ˆ©ÑÑ- ‰v><ôãÆgæ ¦W¡ñúǬªÁí‡,r>­§­„S«©Y@N¿±S¸,t쵟ì¥rrg/yæ—‹Àí ™púˆ9®£(H˜ïŒÊ•¹1ÝLj¸q£˜yŽ²Z*kbUXýÍ0'R=/ŒV}¿Ï¥ÿˆ$qû1ÚHúf€\h~ÿùÏ~õÿ«|ûI±“9ÞÄ+ÐÆN&vÿ.Ôï ¸Ê瘡æZí +8Ö`¥J·/C–8ºžÄM5e1£-§ÈÓåbïx¦­àÅ0 +[-eW÷º¼"]øÔI®¿uö@?HSÏèIXš¥é +B&}Òe»†Qc‹tBM¦j–ò«iM¥â|5T3Žp¨T8Õú9‚Ñ2yQC^ÜWcgìÂdUTõ™–IßRú† ^¸ËÊ7ã×Çl©š»¸ÿÜõu^´oW¸oocÝzÌçè‚18ŠÍÏ xu…·¡?µ‚"ÆŒv·‹©zxÙ’»É+¨I蜮6· E7´­ÍòV•ÖJàö‹Ö´±ô˺IÌuÛ¢c¼L¶.«CS¸ý’Ìu]â$:”9ƒG;’º²”rÓJ§g@yå\|¤ÈÂFq­ÇCÃyÿNh3žÇî1¿¡-þÑåGx]¤S½¿‹`ÿʆ&÷ dµ 1­ºüت]mµ¯õØlaµ/«þÙ„iÁÂÝ-²NXM`÷\Á'ÈBÑ<Þ?ÛÙªDfsx ü røIÖº¬"<ÀK''G…À7dÀèêçÑÅn§¿@›ƒ÷-ï»gÊ ¼´¸Ù“n+ô/ä×öµèØŒägöÌ¿iU½³ +endstream endobj 884 0 obj <> endobj 885 0 obj <>/Border[0 0 0]/Rect[422.4 467.28 534.72 480.78]/Subtype/Link/Type/Annot>> endobj 886 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 887 0 obj <>stream +hÞÔXÝnãƾ×SœËáÆÏ9$½Wé®·p±u[)P4E@K#™Y‰RI*»F§H_¢o™sf†I+ÝEQ¬yæÌùýÎ7’°™]þñA¦™ ©È Î hµ­gXÌ.ßI°XϤø!³”k©\(XìfµpçK\Ãâãìoìíõ;Hxo.ß|ñÜՑ̸fûM]ìveµ›ªµõºXÚèï‹?áIÚŸ”p™'0—\šogsT):ÝJ“n§úÞ+[ÛmÑ4¶‰ßÏ®3£xjÐÃ\é<ÏÇ™±wÉyé^¢£\Å£—Ðî%úÙG!w¾ç€/ã¬s™ìR’ìr+ã~_4-DsÃSöÍaUÐJ²Ö®üJúÌXqÂ؟ƒP½| +BÊ +™Ds©sA_2‰ë4Mr³»zï%VÇe ‰ÒŒ+fƒ–&±¯‚~L ° ˜*eÒ.¨qÜ/´7þ_ ó<šgxF>WBúe‘!s¡ûüÏ?þ_åýWÊN¹¤Ì‰.wØ€!w2ñ¹ûßšúåv ÷å+4ÅZk#ÉÖ` 6¶ŽæÚðœý)íŠ;‹±C;¥Êµ“Aèx‰*šç™·Bq“Æ<=ÁŠ9y*¼“+».£-¸‹tÊö‘Â˪mÆrÂ*Ò§N¤”õýŠÝí4ÞÛ==(m¤uÈÄ l(úÒ@Û{z¿†ÃžÎò‘‚gqâ"®#…½a#¢øöy³¯(+hŸ,h­Ë-ê5ŒC09bôÍ5WÉö¼¤÷Hž«¶øDxw¹X(¿=ç¹ñE ô:ÉkMðZéM[#jD˜S +æwéG_e\`Ì%ÁÜ[”Æ·Pw(î%_;ÁÅ+ÿê|zMš&ŸéáOcÏd:‘ÊgšÒáêÙ''…¢Ðïÿ&­q“šÖ>NÒLÒš†´jŸVíÒª1­«¢-`]ïw.7á¤$œ$¸QÉ©ÛÄ)€ìîþ«»ëûÅ_1›7·7‹›¯n\.z+Q}>Ü+Ý6hÚ¢µ;‹ñìËöå\$Aš„c†¾P~9¼#bª*ü_Có%¸ *ðvÏñµH_ÌÌÞM®|PÊ +«3ÅvÞÓøÁøà—˜í°‹ +Ú'Fñ¸?¶}±N‚"¹INÿÛCÑÛqŠÅ4ÖÂϘq: +ǘFÎt¤Qì71ÙÛ>Ã[¬•ª$»›v˜+ÅcˆMŽ¼Cb}!NòIÀi–Ÿª(ш4N©¤2r]Le0´¬p†².Ê9×räÐP-mÖ—P|çÆôysÓÚ úýõ»KŠñû¢Ú‹E,]Gš<ÃASžm5eF2ö=4‚Æ)æs,Cø¡¸ì¼HkaF,0±kŒ”€Ó¡81„6Jù¡îã›P|Ëêðû +yGóB«Õ¶=úZÊYeWð)ÝûÍñSL¨µ>VKWb“¢R|Ô,ÙÉ/4Y⨠pÀŒ¤ãqTìkàà8·?œ6WØnq2Ía@ýá»3gf<œ);¯9|9 XL[<ä¾!´‰]2izýÌHôœýRå^k¡LÎŽþÛ="»-ªî®# +.V +BB‚« øøT.Ÿ ¨-táÇÄ­ÌY—‚Ü¥@²¾ÍeŽœ¥Ö>磦9òÎAÙ±§¢¹=’y£@!&K'ÆÌy2R«Œ¾(fT}ïüjÆ6Ía“i—ªçbÙ‹-º³çîöh˜.äÚ¼À”PÆãê5§ê]èŒ]”fRºs…÷ˆPL}ËÉ“+ÕËi·¡{‡6˜ËQTèjròÔå†míºéQ'\í›Æ±BGjPå™`'â[a52º©æ¾Ú=° Šòìä¿''Z‹)9!5¡³–t¡ƒ®%éÃ~…ž^bnZX"çx*êWà{ø[ömî >=¸I¨Íd5óâù`»ø¼i‡{Ntfãm±;·ÑQ¢%J¬"š±Åð”"ïŠb—^^‚-±Üj¸¹BQäQvcë ¸¿ªm±½€‡«;×.|!R¼ÞŽlC5__ýã¸o­3Ë#*Þ^Uh"^5 ;lD”õm>0xÄô‚kØÏÈûH?˜ØçWÎ>E9ÌÍS'A´ÁßW–…Ç>Ô §$Ö­Ûn‹e„C!e FæWV>b:Ük±T§çUNÈÀmìÚšº©ÙC[Ôí›ÇTñcV8'<ôÜêá•wãþ‡}¹‚W¿ÆF.k}šÈk–…÷Ë_|wÞbˆÕy’FÆ®ð *f©G»)«ªôL*ôÐÑd\=UG-Ü +A|¼VS}°³E‚ì¦O«þE€Þ®‚ +endstream endobj 888 0 obj <> endobj 889 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 890 0 obj <>stream +hÞÔWÛnÛF}×WL  i½Ë«ˆ Y1T$²*1-Šª(hj%3‘H‚¤ãE~"Ñ¿ìÌ.Iɲ㋚¶¨üÀÕìræÌÙ™3²€Uçøt&`Uv<|Þ§ïÍ¡eçeØ9~%@@¸ì 8þáCô}f[àÛœq ÂM‡£ÆÀ†0Æ„W_Œ“á+pYǃ§OaR˜¢Ïl#[Ñf“¤+¥•,–Q,Í_Ãï1’­#¹L.ôž áI§‡.yã۲ɷr=•ÑB0XGe)K3|×†× 0 ¹0Ë‚˜ÓçÜÑ yó½f3e–sm‰ lµ‰‰¶4*ùpÓé790K0µòtÖ¯£²³ç1ßx›/"Z £’ ½€„ž}#5™gÔÇÞÔ‡Šø¢>dé'®ÙvÀéKÂ÷Ý€9ƤÈô‰Åe\Á¦ßg–!k/e"KkÿxŠaN¤Z–ç7¬:NžÛüŸ ‚Àìõ1Fг¸ÐKLàBó|øã??úÿuÞ~¥»³}&èæxswØõÝ WßÝ? õÅz Ód…êc­U¦`®Qb–²0{¶ÇãƒiÙh” ¦c3Öíä[ª<ÔŽVVÂÐÒÝ°ÀÓÍE <íù(/ÎVWTËÇøE%™¤ä…éY~"—³**ªÁK˜ ¹,Ú×ëó(~~Ìåo*|t5ŒcxªN |¢øRÓkVúó!KOȺ¸Ül>ê·Ã'_<“·¥DkqU\"!´˜›ðGÓus8&×F=>&/ƒ ¿‡d Õ…FŠÚà¥É ˆ³¢qµÓµ×Pã;xrn¨—¾yN +”dÍ5)犃Å~yL.çÆQ¨—fh®v\5~Ь\uáN*PÊQÔ£J’5P…Ò›ÏÓ£¹ùìÖ Y])ˆvWm~"o"J<ªN¦g“á4ü¥4¡9g·F@׸OÞù³OׇËvŒa©¹V3ÂT‰zÆØB×Zˆ÷²4mµr‹c ‹+3…ƒß¯h~IÓ¢5~7iVÑ&_K(/šfÏAk đ Ѓ½m`=ÒÔÊÒñTéš"@É~EvY%©„«¤ºØVHŒÛ$øíj—ª?Œæúêë'2ÛÔû,èoÃïekt!J*½D-=…ÛqÁݶ˜¦.hÿ5‹¹®»“ŸG§ QBˆ®Aqh 7°k«'ƒðË1Ž4ßáBe”[»a¶3¬ÀW JÕ¹T.äoÐòQÀ2¸È(¾À"×ÂY v]µ’jõµ«%F]`f¹R9­|ØΖñQ5~šTI–j½»CÒè—þ¦À:»[Îv”Lg_·Þ㕬aý ä¤LY>J—ÙZVëiZoѱö½G©WûÖ—4k+0kU]ì] ä[ºK­v +͇hÔž¬#)Äå¢ÉÎß!šB»$bhCSU×Oé˪ˆ7ùÜÈë«ì}Wß«"Θ›]8ZÈ2Y‘òçÏãêN:O†³Ñé¾-É|Ô…ç¸G¢“œß G®KÚ#xûØ(×ÚöT)2b{°ñ0$T‰fÉ>*å“XùÛ¨âŒR̳T¦Õ6}‚ßì°åàìÍäl<‡dÖp¯cEs·ÁzË?u™Ó˜“h¬>”ÒÙd8½xÌ’ù´DÄ>ÚÙ])‡—ùCáNÏÞN,4w©Wn^»j„¯®È®QŒÓ³ŸþõbÌ“ô¡ðÚ*œ y4¾yµZ'¾ÞÕrEª•=átxŠ¿Ô‘™Fý¶o,p"©6º(þçÑçûŒÆáðt8­™~¾?ͯáèÀf÷ºŸ…ÓÑøôà?<:þÿö—•Ä… +endstream endobj 891 0 obj <> endobj 892 0 obj <>/Border[0 0 0]/Rect[226.02 322.26 277.98 335.76]/Subtype/Link/Type/Annot>> endobj 893 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 894 0 obj <>stream +hÞÔWÛnÛF}×WLY:ÖšÜåA $¾.R7™¼TEAKK‰D +$•ØòíOô/;³»¤.–ãô¡(*ær¹sŸ93ëÁlpòúÚƒY3%Dn ~‚t¡Vƒ|ð*œ\xàAš<.þáË#.DÒ宀t9p‘ wýDB:Á…ëù~üÂÎÎ/ à1œžœ>okÇ‹¹dլΖˢœÁeÙª:Ï&Êù5ý%I#)à^ÀÐã^@z6"K·ã-$ñÖ¬G*›ªNYÓ¨ÆIœ§ƒPð(DCB„À…L’¸»®oLÒVêh(þÎGôú#ÚÙ{!Ѷ'€ý¸3™ôé¥W¡1úMÖ´à C±w«iF+µjjPÐ3f¥ÃCfýdÕ“¹=$ÌÓõgèÉÄ¥—Xâ:Š‚„ûìm]™Óõ¤…÷NsÁ”åÒXUiùc´ƒ]ò©aÔ9Õ÷;å]i”ÿ ¼$q†1ÊH†ÂõÌ2'$u¡{~ûã??úÿeÞ¿RìdÄ=ŠœÛÅ ÐÆÎ Lìþ]U_.0*f˜¡æZëx<` –`£jg(Cž°Ž¸©¦\kŒµhË)ºœB„ŽUÒT˜bOxšâ¢BH!ºøXÑ?Ák$@‘£NlÌVuµº,ójøþ¢¶£ÉÆnj1,[® +šywÂú¸Û@“L+à!¹)<Ó‰ôJy‹ÅM6q¼¡öÔÕº-JŸŠv-jÒÞ­XK‚ÎîÊ`‹¥è3œMU^#¼¯ÎT~^NOo>¤HOI³åÄ[@@´ “Ï %*áï÷Ní–•S0|:-xâ[%ÜÎ$ %ìcULáhG(Vv²­qçs׶zé¼hÐe½3’-g,3 ÔÛcíEÊhçb+Þæu#„a[åú89„pÆÇæÎÚ;83C̽C: MÌò¢,Ú¢*hÔ„\[ôòPN¹Ò"Ï>ê`òwoãò +Æ:T§h0î£Í:P¿™xÌîRü m~äî#˜®qw¹¼;þ*Ê Ôâ¡nÈβ6ƒ5®iу^OzrB¤§s5ù@•ß'#UdCH7©ê]s#ôÑヌMBâöVNÞ—·©Ö@YQMÃýÌÆmrpvMµ±û«^Á&†ÍŸöv€Ó/…L +ŸG1U>5vt£É&Ä'L )zèÄŒ‘e=kÔó;œ$Õ +Ò(Ú¹µàåàüâ„"ñ§•u6S8@å:+ÂÁµ*÷/CÔ”v¼b²‚ïäòPâŒOw&ÉEp¿Q‰HÓÐ%ìZ‡ò ÄA“Ë$.ö~3¡ëlêƒ.ìóaÀ³áž`Z˜`iγúÊl©hX½ÿ¢›Ô÷ûQ€ç¤ ÄhœÞFÕ=þ4Ý\iÄFÏSu»ËACƺ÷Ùbm q»x€pZ­ophÀZ–¸´4¤ÀíG¥iaF-n–ezAèê²Ùu«'Ó¯Ó\ÛéìašÎǹÿ‰ïÛÇc;Â情°P˜Hnzï­Ø%ÀÚþ[€3s +endstream endobj 895 0 obj <> endobj 896 0 obj <>/Border[0 0 0]/Rect[169.92 238.26 207.9 251.76]/Subtype/Link/Type/Annot>> endobj 897 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[332.94 107.58 503.76 121.08]/Subtype/Link/Type/Annot>> endobj 898 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 899 0 obj <>stream +hÞÔXÛnãF}×WTX€œ±ÚÝÍ;œ øÌbvx”ìÃh±àH”ÄŒD$½c#˜¯ÈþÄþåžênRKž¼,‚X†ÙjvwUª:UmEËÑù÷ï-ÛQP"S +Ó˜IM1ZŒ¾›ŒÎo)š,FJ“Ä•&"ДRHM“ÍHâ!Ã, É ©Bš|½÷®®o()]ž_¾zE?6¾JEàÕË&ßlÊjIoª®hù¬ðÿ9ù+$VR$TÑX G4¹q¤ìÏÖŸmŽ¾-òyÑÐå:oÛ¢õ'¿Œ®'£(Ì`F,¢˜„²,#¦R†Ö X‹$îßÃR¡Ã½÷‚qÌK:Àã3ÂË0ímfÅ´bÅÌ(¶V¿ÍÛŽüq,炙yÎ#åuÅܨägêU¾ˆ=·ìonQ3[¹EÚ>¥Šü± +2É_Òã$‰2z?6µ]1¿Ÿuô³Ÿ¤B{…;¥u"êÊ„%ƒªuœô¨†a¯¼ ¬òÿ%•eþ8…Œl¬¥²Ãˆü˜Õ¥þùûøÒ?ïáÃWö]Åž“½ïÎw*²¾ûÿªúízM·åš Ö:_‰Èk‘ƒmÑøã ™÷o_˜,æÂhŒdté”h“N1¸c •ÉDÛlÏDÛäâ8$N@/á–WLÊÏðÅYV=®§ž›aYÍ‹‡©O³ºj»‹(—œ¦WnÃÃê¹ “—ý¹§–}võ„ +a\ÌðolE¬¨wýoîÖ–‘RƒVz—Дr„(kØdUЀDnƒ½õºöUˆïŸ˜, _!ïÁgbôŒjWý +b¶¥œf¹QVá„`-–?ÍH[yëõ‡|æ« üð‘šú¾+«‚>•ÝŠ:hÒ=Þ䬎z«… "{¤q†7/Ím±,ëêòÃÇ vìY¬¤nãÕ`#ˆ×Œv±åøŒdϤaè ¹Ì%³­’-ä LøÓ<£nF;è!Šv×åMwTûÀT¡aû œƒòj~ þ ¢CÈ^Wó£âà÷l .²@…Rèä°nYÛ•œ¼A,”›rŽÚ Rø(Ï1‡ øÛF‹-æè +1×âƒå÷þ\æ§!R"èuî²Ol¶ø˜åfÏWßИïYdê?Õ×™y×@ñÅÔ{1q2+ÞØÑ&âÕh.Ñfæ]ñ bDw9¦j)¦Ó +Ó/¦þÅÑåMÑÝ7©á­yù™£æ!ž_Ô ošz%}Cò‚Júš¬ 1Í^¿®î7·€*¯–(¦î@4•¯^MýSð‚ð—9¹_LÏ} ÓêÅmƒeüú¯P.Ë©FÏâ°Ý„ÙñëÇ~ÓÎaxñšKé;Øóh÷ì@Ë9hSÐá*/>Û¤We©­²f„ Ôi â”éÅä å›@ÊÛúÓ>mìiŸ«Ø½Ò‘@àZÞÛ¢C£´W‚3w1èa|.¦s¤-šzcÂü€.¥³]¶¼ýáûòÅNñ˜'Ü݈Ú‘¹)L¯aÎç+Í¢\C4· Ëàµ-ç`î=TÙ=°¡ö±êò·Wý1˜KyŸû/g®£üJé tß°±FC‘îÔf¹Åùy‡ÃU€ÁÂ3lA¿ÁCíÜ5MÅ VMõ-I í|,¢Œïk}‹¸u –xµ¨‘Îÿ}ñslZH«bhU úúâè~½ƒìíõÍ9ðIxŸ/ t³ºÂ@WT‡WSn¶’Ý2mq{±;æ‹1 „Žž‚ƒrÎ[øFüÎ8ì …G!샽º3$Ï{oÆw_ráÏ·=ï×ãÆÕ*Óγ÷*w,6~Ú ¬Û䳦>²pG“y}ÿ=ƃYÅŠé<žX°SL름`ÄÍŽDìP2Eœ„\ê»ÎVŒ|=¾©ùºÙ˜Ø>Ã4¢Í«µHÓ(ÚÅ»O°DÀŽGÐpW3„ØþÞ{¿ýÀTNÀ+qJXI›Q—õ¼@p»{ÏpZR2©&›¬ýÒ(„I¼Uc¿Ûð²î8TUæ:éPÄ*Œö‹Åû(}×5PFîÉåg•·˜¿únþûýæ˜#aûÿÍe]X +endstream endobj 900 0 obj <> endobj 901 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 902 0 obj <>stream +hÞÔWmoÛ6þî_q 0@Jc†¤Þl@j§C†­(µ_âa`l:Öbˆ$Ï †þ ýËÝ‘’,;6ÚŠÙDï•w÷-à¡wþÓ­€‡²zñü8C¡{ÓÞë´wþF€€tÚ8~ñ!âˆy"3.!]ô8jaÜO‡›ì+4ÂZ«\Á§Ä,uáö½%Ο®ô¨'ÌxŒ½X·S$M;…-ª¤©´Íž°$´ÍE „0Btñ·°b:ÞFZwØd¹¾Ÿkx~»^Œœ‘KUyY]tÊœSŸñňdy3Uº¡3\ÞVzeä:2ééO-çžäÞzqŒ ÝÌçÔ®ùzn`¯Ê}/v<¿³Ê`ŒÜ3UœÂ +EÞª…5’ó‰~zÇA¹j¾®‘œ¬CBck½¸×Em %üIkÆXú¼jœÌ‘|Øm#3Ùº.÷M=!ùS2·U3äˆÌÇz¢¼˜]XŽ¨º ìTZÎÕ“Z¬æv„´SÈä¯3„¨''l2Ó™†©ë ,}DcZÎ|¾t…ïšnÚ•XÓΓK“Ì1 œ5nßGj +&™UhÅr]ቑç’3M·ÝN.ã4pɸ†uIFŒÕ|~¯Æ®Hp¶>¢£ a<±âÔA‘™™¤]Ã&«fP¡ï¦ lÈ ¹½Ñîä5Œ©œÃL_¢·ƒûGÊóΑ ΢¸ãtØ8é3PùĘÓÈÞµƒJZQ¾c/»YnvŒà±ù–Ñafã”ШöJBJv #¶ˆ&Ô=ÚúÈ5°‡ø˜"£úݞΙ…^Ʊpv:ìÇ50 µ—§”IÔ‰TuO—gÛÂ}Éÿqs¨*…i$WÌ«÷¯—Ðq真Ã`¦©Ã!›ns—•XíH- +=®Cj ÇH|÷lSH~ÖYl-ï{»Â«¦#ç$­ æd°‚…b~ñ:‡;Ui8»ù¬TAÅËF#‡“‘{q½ÐÕºÈA´»fó#%½eE Ãë«Ë›«Kø~B?$›99«S£ú?LÌ x;´gK8š¯Vvf ÔZYCkB° ¼“Œù)ÞÂ’w–$ν$n‘)iî»»hƒDhCbІ`§F¼Ž BÜê€aÀ T›¢!ÕhC8Ò Žç4˜ç5s«‹4’œ9'6¾O¬Ò½«¼¿ (Ø:‡Àÿ*t±¤½g ùmÀDú>þë!?^À‰I›Áë}0y^Qo!˜Ë ¢R¿ØIyѶÏW‡›H$1¤lK°„|ø 8é É‰¹ük4Á«ê? ë1®Ù +endstream endobj 903 0 obj <> endobj 904 0 obj <>/Border[0 0 0]/Rect[267.6 453.24 343.62 466.74]/Subtype/Link/Type/Annot>> endobj 905 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 906 0 obj <>stream +hÞÔÛnÛ6ôÝ_q0 €”Ä u£$d+Ð:É–¡M [ëPÔ{PeÚÑK†$·éŠ~ÅöûËCR²ì&u1l–yxîw–ƒÓï§,ëð äø‘C%‹Áódpzé€Ébà¸Àñ~œ(dž ¡Çw!Y 8raÜ=H2†qe;ó¬rY¥«U^,áªhdµH3iÿ’üˆ’<-)`NÀÐaŽ 9 ‘%oy»ñV¬'2Ë +Fwi]ËÚN~\$ƒÀÑ ÁÌõâ8æGœûÚ á²P´ïh)sýwtùÁShhç†X>úQk3)æ:¤˜: mõ‹´nÀ +Z?­ç)«‘s}€œ¾‘UØLXí¥Aª²[ƒäê/w{èx1§K$ð†AÌ|k\•c¾Éxe‡s-i¸ÔFDYþåaNNu]¶^õýVyîiåÿ'Žía„2â¡Ë} À¤.´ß¯ÿüç¨ÿ_æÝ•bç…Ì¡Èñ6vX&vN c÷ïªúìî&ù34Ä\kl‡V5XËÊz‚ÅÖ;Ûõ(çLiŒÅhÊ)tU9 ì][IWW{Ìb¡‹‹Žë²Øb‹ñ·½E•}†eèºÊ‹f1³¾™Üü OjõßÖÒæWÎS¶Ð§Žz•fXkÂÒäø¾½ã“}èIHŽ¾À²¬rY ´!‚™}Öé„þAbŽ~èt"ßrªÁÎèó2òùkü%ÖÓäb¬¬^Îf…±›LVZ^oV=­:‡Íþ (Énûdkô´‘kÃOXF¼ÔÚñ€kó̬ŽI±Y•ÛÖ5ÑÁSàøûñk³(+ä”ÃwÀÏ ‡owܯùj¦øŠÇÇã‡âÑ9ÏãÉ ‚Ç“äµN¨Ï}¹Fæ×*rtÀ£\ÍŸ1¡šòUz·Ñ¤­£ö‰?µPüDã¬C©dƒ(›ª@Ã?™aÙŽeÅ‘žÌêD*Ž˜T<ÛÉùÆšËE>ÍÒÊÊl‡cMßÒ9Í‹Ýñ»ôÄ+t £À7#b"¬xÇÅQžK—€*ßÇ´ñ§†yÚ¤°¨Ê4· óÀ0çÌßö0tUmMGÏ®G?<»ºž’é½e Æe@QA;mƒÈ1M¯nÒF®dÑ@^(´,ò;½T ¼Ø zã–gÌapIF8ViÓð„úCѤ÷Èla»a¶‡x‰­•íâ-mrœ­éÛrÓ˜†âªè¡•Em¡²°UNÛg‚Aóƒ¿ë‘]1´Œ!ÙÖ#'PK ¿SÔat‹®ÿ0[N†;N€›.r‚ö8&”{Û½ÍÏ÷˜À„fÝS²Dgœ¯¥ïkU}c\8?»k’õââò”œñ"-–›t© ‡®`^¤w¿°¥ z"UTJµÀªdñùîHãPIåDg1­©–¡~Ç>ã>'ZV§* í#“ŠÖÄÈgž*´nB USºf´—B[vùŸö1ëãýØX˜•®–ûmZA;¹@Á{{ܦ5âM›´jâ”ë(—w%æu±<€vSáÎ-ç°FåjUWÅ8/¶˜?ëí¡oçÃÙͦéÓѤìÓmçJG7FäT”Ôêð^¦÷ÏóF „÷(P†Ëün¿+ó9(Õ•“3 +ÊæzÅ…Û:ñ¾FuwäîiºåBaØc’Ò,}„I_2‡Ü(Qe…X'Wq.ïOðC¾<‚:ÿM*É(VéAà>Ý¿]ör‹Vª0W2 oÉ£;=4Ï•‚‹;ò…É7dÐédò¾ïºÑ€ÔjýƒZõ»WvÙ^þ~–#;¢¢Ý&1éþxT÷ˆ×m†êUC-`_H, +.’PüöóúÌlØíÿ`PfÞ +endstream endobj 907 0 obj <> endobj 908 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 909 0 obj <>stream +hÞÔWÛnÛF}×WL8 ck½Ë;‘Æ€#Û‹Ä2l&/QP0%±‘H¤“4M>¨Ù³»¤()¦-ŠZ\ÎîÌœ™93K šõ_\ š•=Ï&ŸäÙœŠ¤7í=z‡g‚EÓž°ˆã‡‡|f[äÛœq‹¢eà +ãNhS4Æ‚ ‡¢O½·ÆÉé¹, Áá`Ÿ. SÌ6òY/—i6£ó¬JŠi#3™gÔÇ^Õ‡Šñ¼>dé'®ÙvÈåKàcíûnÈã²Èõ‰É͸¢7¦0ËHj+eí"Ïjû(J0—9µ,Ïo’ê8 xnkð’C³ÀGØ·¸ÐK—LOÂ¥æùãÿüèÿ×øúUÖÎö™•ãMíЀuí„«k÷ïB=^,è*¡>¸V™‚¹F‰,“ÂìÛ ¦eC˜L˜BŒ^¬ÛÉ·T;ywLô|oc¢(^º2J®Zþôs¼\-t£¯g8mmÎ !ê9a •hžÐÔ´¢g0ZŒÅ"7…ƒ÷Or%¦býÙ”óÆP¨œ7'̾iI1c•€»­‚Kjei‹ÅûxlŠ}÷Šü¦J³„>¥Õœ* ©~_%TO;·É㶫Mê@'É´¸ÇÙx§Ùàý‡J[A DlPAb0É3};dÂÑÓsÝç¼íó:+ƒxÓkq–È”åC’ËéTt"¶¥í6V[£-èåuÕ­¸Ì Ý N3ÝÕÍaPœMHkÔ>ûV€¹¾y+Üæð4›ÜêÎav¨½­ñ¶ojž.ÓEŒ˜såWƒ¿ 0l†:25‰‰PHê€*š9`è(™&éSì$=,v¹Ó†ñ&»&AK”»­¶¿]lÕÆw ew×yã·+o\ÝÄ­Weß×IK3ÅhS™Œ«4ϘRŽ"Kk£­<}mÊÚÛ pý{²½ë{¼Žþ­‘f•cÓ3Ò?§‘¦x*åc…îWÍÇ=ÇØW—wò‰êÏôšþ`&U TÚ~Oµ›ólšk[Ñ“;´_cÆHUL7rÅȤ?šKÕbG„ +Áá! æ‰ôõÒiÛAiIãÒ¢@®6nã-èPÀ‘~Jç§g´¦w ¾®ÒÈ\ûßE¾*ÌéÈxÕn3é¶¢ï‡ +ÄMkïÁg>Ðâ*¡UŒï‰lÆ$®Qöhd>½U¡Hª›"#±ÞU›ß$!êìle ¡¥qî•ÒðASÈuaúGY¼L ³qÚ˜èÌÛVaûGó¸„Xõ”6Ó‘²µ²’ ¤ÎãXÐã÷¢+êu®ñ~_E´qirƒš¨¤…-mbÖÖ†^Ö{õPðÃK@–â ø _.sH.ÓL⧯_þ¦î𦪕ïg;ÞÃW¯†×Rýøâòüâš:é +໨!–ÎwPÌ^üÖ1Óbt~Ñr¨[^k7Øêw}<í?w3Q]ãl åðu$å{¥ÆØqÓî=$Ú%ËÙ"ñ2{Ó§‹\ e¥ö¸L¿$à;>ªy+`‡$×AÜÉèÒñîìmmŸÎ^B<<ŽÎ/^Ü5§yã)=#þ”RúßIð²¿ßåŽ7ªûL’±½Mßu¹«“ 2ruð®»­-X ù…[5k[÷8Óé}·!ä àÚ×Ú„äÇþºÈ¶uðÛßä)þ]ùK€ 5 +endstream endobj 910 0 obj <> endobj 911 0 obj <>/Border[0 0 0]/Rect[308.16 388.26 383.46 401.76]/Subtype/Link/Type/Annot>> endobj 912 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 279.6 140.94 291.6]/Subtype/Link/Type/Annot>> endobj 913 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 914 0 obj <>stream +hÞÔWmOä6þ¾¿b„Ô“ÄÄv^Õö¤+,¹~aïCn×ÙMµ›EIh¹V÷+Ú?ÑÙ;ÉfYàP¥ªê"aÇvæåÏ3óÑÑ÷7æõ(Ty1øqʃJòÑwéèèT€€4 þá âˆ+ ‘ò¸'!]<”Â=?QNqâ Ò_G·ìd| +áøèøà®*GÄ\±õ¼ÊV«¢œÃYÙè*ϦÚùþ€š”Õp‘à +.ÂÒ“‘‹"½N¶T$Ûˆ¾ÖÙLWp¼ÌêZ×NúóhœŽ?A7B„À¥J’¸{žo +%Ân=åÒßÚG e6ÑцÄ8Ÿnúqç3&ff¡õú<«pÜGìýÝ,£™`žÙ 4ƬtxÈÚc?¶‡ªé¢=$íè‰Àq…J´N9ÚÄ&¬žfåt‘åY™¯Ý·‹¬ÆåË +IAÏ&lâLø}pñ=ÊÜ“V†qA¾®` +ø¼¯¡€o žâò–Øò~E2qÅžuS“l<}pÐ+H÷·ÅÒoÛ:\}»îL+áM]ü¦qÀõ¢¬œåUQ>+îÍú¾Á¨ùÙ#ˆ ‚‚rá-xçÙsô»«Š²É'lÏ,ÀåõÉøz|2™”{/©x„.#d¨ñËpì*øª†½C ÿo‹/©í½3 Ýh¾àà@.ïMœ]B4ÒèÈy…^ >.ßþÅ—ïÓf# 7ÊW¸Üã…a1²^8ÿùɧW‡r‡B™„•´£Ò ¾q_•ðÏmî:Å“Ø6fFµQ)šúH5% ¼e37‹B/g$¸¯ò›~‚Þà +g{‰¾ÖfkKêµnd„ÀZVhG ì"l´C5̲&ƒ¼Z¯ Yhhí ZMe°aNk—ávs5>>{w~1No¶¬Ã!¾"Ûöƒ&øÔMÖè•.¼IF%5$9‰@mrWMbëL±D£$J§öP[;ø¯‚úSÙd(0w”4Ë®OŽ+éq…#YSPa']qß·­’©éD–¦°ì#Þ³Þ0ëZйIkž÷Â+}`v`8„ZkøãæNO‹l º©ÿl;2åÅØÉv1<Š!¨Q„è‹Áæ*¨XqŸÎ +ºPx¶”]¡³˜[xº`ûÖ`eÍ¥v44×ï||zDœgåü>›k†+yÃ&“^uæZç‹åÌG—»]*Þ ŽŒ[àÚäpí¾«¸ vñ“‘ÁÚâuóî35‘R‘PËmóCöbÚô˜R ›<£¶Y&Vh…V¿Ö½éI¨Ö-²jjóÞE¶ÒTÛÌ:° `%Ä«¬YÔö˜9›Cdn“Ô®À‚.cŒ¼~Äê¶å0ôÛž +ߣ3oÂæ“ü½eûp‡'Æ‚¢œé"¬=&£!HßÇûcln?d«»¥ýTè㈽|i(a/›l³õ³Py”„J1ÈÌÃ#~Á¬ŒŸf—g¨/àɹˆŽ!Úï&ÐÄ {p\ìçÍÄ ;$ +ÀÏÊ5ÊíÝs=b@ŸÇÑNΓu˜¨[¦ù\v 4¸®Jµé®§Ä>Û7ý‰2 ð{$â¯aR4úùb øÛ·{@MÖÈGå hËA`ËA`ÊA°U²ÒHæì¬?Öë¥nžÂ&Ùåót¼e¡äêɘ ÑƬŦ†u¾)E9]Bü-ÀØ"|ø +endstream endobj 915 0 obj <> endobj 916 0 obj <>/Border[0 0 0]/Rect[211.62 113.22 246.3 126.72]/Subtype/Link/Type/Annot>> endobj 917 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[309 556.62 479.82 570.12]/Subtype/Link/Type/Annot>> endobj 918 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 919 0 obj <>stream +hÞÔXýnÛ6ÿßOq+Bjc†¤¾l@ë$C‡l buÀÐ bÓŽ[2$yMPô)º—Ø[,Ùùhÿ†%€DQÇû¾ß,`>8øq,`^B"ƒ‡àq¨Ô`6x›NHg!ã?ÞD1OBäqÆ%¤ËG.Œû‰é\ø~|pŽŽO `1ŒF¯_Ãy劘yN9¯²å2/æð®hT5Ë&Êý=ý %yFRÀDÀP0 †È’·¼¥G¼5ë •MU£EVתvÓ?Çé ”, +Ñ!0é%IÌ9÷IÚJý eÒßz‰~ O¿D;7^H´í àK?nM&½¤ ½ô*4FŸfuî0d‘ó~5Íh%œFMÍrºÇNá²Ð±d?[¢jrc‰¤¹s¸Cá%œâ×Q$ÌwΫÒPLד~u£˜IGY.µQ–?†@;˜“O¥ £Ö©¾ß*Ï=£üß ”£Œd(¹0ËÜÔ…öþí·ÿœôÿË|óH±ó"&(r¼ Lìþ]Uß,p‘Ï1C#̵Æ,pj,ÁZUîÐ YâüéJ7Õ”i±m9ER—SˆÐñ ª a…=DéÊ^—W¤ëž€d|_4ÙÕûAšJÃ'aIhj”Ä+™ç/ †-Ò aLÕ,ç¢:q>?3ŽºPp*ô#¤–ëë…‚»«b½¼t.]M=)‹º9ÔGÒWÑý·Ý]ÕZ}Õ·PÝ]•U>ÿ:¯g¨¸qI^4€Tn訢Ѥ† OľŒG \5yYd‹!’ÁIYA^ÌÊj™Ñî>ÔŠNk¾’#®Š¤ïI<¯cÖÂ|z'„ÜÆë¸ÿà|9«þ°}ä˜z騅¨œªú¯6ã4'„Hì@‚û,–Àì?•1¾ðˆºÓb“5Ú= ¨U6Wˆ@V =ɤÀv¹•*Úc0A/ÜdÕ+r'ê9n*ëNÜßÏ}‘-UÏóŸm[|¬Tü$Þø* 5ã»l¹Z˜>¸ñ1B¾ì·Q!¬_=aüšÞ(˜¹žÀúÅ–‚×Y,JWøøü‘Z´r%úǹs©;ZÔ7-…;ôq·† &™VV ¯©®|©¬IÞbqM\‘`o¡*×M^(ø˜77Р&ÍýJµ:h­fÜ K +¬Új”«£ëÛ-{c–$–Ø"£ï·™Óþ,ñ;ö›p›ÇLp3‰DÛ&µJes6™¬W÷»ŠÁ¼¤Ï×a_,¥áàÑO=S”5Õd£FoáÒŠÕN¼Mïq¥®ŒÛöŸ‚/0nhVÌ«ñòŽ2rVîwùõ{„ø£¬É`»v9ú©)$ó9š …!DŒn%ô-ä³.¦ymÒ¿ªÔ¤é #[Zâ$Ápô™ï¾‡M¨qßD¿| )ú¸ö"„»t~£úî‰U…Þž]:/R«qA7°“o˜B¸=Å·Í“nƒ-ñ¸ÛæÈþåeñâÒ=|Ìw©‚ó1Nʵ(Œu†³]1g;<žv¥šuU€èÓ`ÍgÊG+K•nFþèÍ/ç§oFÇ°WÃÞœØîÍiýbßä&Ïð¢¶Èµo‚Ñò{.»óÔÃp×4¨>ãû­Oz»³t·Íq³Ogéÿpû|ßÊ£3Ø›ÂÛßè:Nqûø\Û9‡Còõ~¿VH]ÛãŸÖ¨oBAeó<}ßµ6`õнŒÁXã; +7Ð5<†­B7½B¤AÌ®ՊÐòñsúñMÇð{Ït-dv¤ºP µhjι¢ŽâÑDàM¹ô€ãȬ*—v`˜³P>ÄáñéY:ÞR©ß]|Û̸ýÞ„‡µÄ ã\¢…Ðgâ,_ ±Ì%Û¶'Rq›—,Å~ˆ— +j=mÒ ãâÔn»C|ÎÒ•ød&‘ìÛYgÚlw¿cåÆ6ýyLÓØŽ'p®ˆ¶dz>0_Ãá4„)øB‘Ä©È|K48Ķ#è[ÜóY µÝíTÔÅYú86#idcs$ÜŒá¾hýkÔò·Ô¢_6ôÜΧÇ'ŒÓ¬˜¯iŽºPÚŸ4/â¥RÅî¯4aD3‚Y£þ`qPüô +endstream endobj 920 0 obj <> endobj 921 0 obj <>/Border[0 0 0]/Rect[218.82 439.26 261.42 452.76]/Subtype/Link/Type/Annot>> endobj 922 0 obj <>/Border[0 0 0]/Rect[320.4 275.22 353.04 288.72]/Subtype/Link/Type/Annot>> endobj 923 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 924 0 obj <>stream +hÞÔWÝnÛ6¾÷SðRlkFü)aWk~†m$ê€aÙ…jÓŽY*,¹M6ì)Ö—Ø[î’’e'N‚bÃ0ˆ(êðüñ|ß9æd99úናe;Ñ’˜8%*ÕDÆdm'‹Éë|rtÆ 'ùb‰á<5L +bdÌbAòÕ$-,V™$ù 1W$ÿ2ù9:9=# KÉñÑñË—äbMyÊdÔ,×ÅjUÖKò¦îìzQÌ,ý% –¤·”0ž%dÊ× ÉO&SP÷º…DÝNõ¥-ævMŽ«¢mmKó_'§ù$Q„¡Y¢ 2Ë2ÂTÇʤ3ºÿ‘2¡v¾C"0Ò}„@‡4d.øŒÀG•ö1£c‚£cn¥}Ô#tª™‰>|š¸âQgç~AJ|¦QM™Ž‚Øû ´žÝ!áŸ1Oè”Ë,Æ—,†µ1IÆTt±n¼Ä|3ëÈÔ¤LD6hiƒ‰¦úá\†cLªÚôYUªw>–Þù¿Ï2:MÁF61÷Ë„Pî’þùüÇ.úÿU>¼âÝIÃ8Þ\Üß 0ÜOüÝý»®~_Uä²\B…¨µŽr–D-`°µk:•šeÑg*$lÚ9sœŒppÒÀÐ +j£G”²Å½ƒ—qÀG&¹º«»â”çÂëÉX¦=FqºͤB]5¼šÒ’™ÛEyU5®Ñï>Ï,_'1ýBZ‡3P´ Rú=:&ZQ] ý¥øØlºmTS‘°LùÞ=41Dä&„Ú^ s&¹ópäz”¥mߺ÷+ÒZKþ —ÊáÊ£W43ðøÚÓ’€9$NRx¨ftñž¶÷/4g +eVQ_I?ôÔë“M§ +°NϽß8 éÁmf…Ó³#¼ wùM±´À§kp(rºT´¶õþx!¹Êî³å‹…ùl…êŸJpúÂT2±7C} —J@ÌDOs©Kú3Ù´í}JŸCñ§¡/À¬oþö<ô7kÛ†¾Èv®½\+¹} o<ô Bß< }9.j3‚þ‡×ç§ù.”‹÷˜‘é!ìïÚ3ÀËcò[{÷ŒAD;ƶ‘§O O tFÎ|>LÄÀ%& œ’ñˆÂ÷¥± áÚà„ìp°¢Š}ÒA“{9å@@ßã.¨ïSʹíÚ¯ág”"ÂøyƒxU‡D&€”ÍðC1 d ”·×_šóñòð?4îsÄlõŽ3«²dÄÀH0 “`&ÑKÂp ‘ñ³øïÿ±ˆ‡4Ÿ”'¨Å!õÔ²7„ÕÛùëþ(ã'“㦮aê*Ãprx +á­€„… ç97„>ñ©ÜW`Ï€Í7-¦ëƶåovþˆúñ‰÷›¶{ÛŒ Àö}ñ²=ÃiíõHCÙ^"¥nºGeŽQæóÑw;Ÿ7õ‰]›ª»ÜT¾€ž¿‘lõ + +endstream endobj 925 0 obj <> endobj 926 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 625.62 140.94 637.62]/Subtype/Link/Type/Annot>> endobj 927 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 589.62 140.94 601.62]/Subtype/Link/Type/Annot>> endobj 928 0 obj <>/Border[0 0 0]/Rect[218.82 508.26 261.24 521.76]/Subtype/Link/Type/Annot>> endobj 929 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 930 0 obj <>stream +hÞÔWmoÛ6þî_q+P€JbZ$õŠ¬Ú¼ÝÒ.HÔ C= ŒMÙšm9äÕEÑ_±ý‰ýËII–U§í> ÃÀ¢©ãñî¹»çÎ fƒÑ‹[³rݼ(áB¡éày2]2`¤ÆÁÅ|°(¤‚C(\êrHVµP׋$\¸ÌƒäÝà-9¿¸ŸFp6:;>†ëÂad=+äj•å3x™WªHåD9¿$ßáMÂÞäSû0d”>$çƒ!ªtÝ\hÝFõ’SUÀÙR–¥*ä·ÁE28 t$ ~”‹8Žz‘ëzÖ%ã¥y‰ŽRîí½D´€0/ÑÏ…Øø¾ô¢ÆemgÚ.³ +¬ÓW²¬À4$oî§R¯©ÔÔ. Óψä H-öª*&óZˆÛ§Ë|gÈDìê/1Ãuú1õÈu±¶Óͤ‚0¢œ¨ZKY_±Îký°«1å<P=¯1ÞÖø¿€Å±3ŒðŽxÈ]f—>86šç×?þsÑÿ¯òö«Ž)Ó‘s›ØaÖ±c¾Ý¿kê³ån²fhˆ¹V9Œú¤Ä,Uá E@cò»Ãnª)5c-ÖårSNRGË*IÂm±Ç4lqéRH"»x;Z1?Á/ÆÉ,¯`.K' ·óL-§c2v`²ÎËê´“ã®.Òóâ¯UÕ?‘íɽ^Äýžp¾Yá浬æe_áèÒ·®¡°6ßÙ[2Ui†òxjÞࣽåH‰Hº!÷©è3 1ÏÕÒk ZÈÜ£Iccb–OÕvìœjbz4bBìƒcl†‰¶HG¯ós•ÊͲºÙ,î>ˆ”uþ§¬PÿÄy”ÇSªã¼ó®óaG_뼋¾óoÑûwhSÏû€|¬-k™ xéef…êû‚‘Ëj}nÇêÄ cLxLr„ŽÈ‰ÃÐ ²ØïX»Þ¨•ñ î‹†YÛ:å‘MáUimÕeÊÁ&éÒÁ!6øQÂTVÒb½‚j®`VæÒ€íXûuS$¹yvöý­ŽvkÖ#vÒVšµÍŠÅ5g”•¬ÔJÀÌuº±¦Æ_»IííŒÑгjÜFƒÇ­†KG0²v°ï@ù>¯ä¥ŽvÏò¬Ad•a?’wëMµójÈ}Œ¥mõmSâjGc°…‘ˆ\èwÌ9ìyÐAiÇ•¬ï÷ ”JÁ‰Ã¸ŽÎ(RGb²(ÿl²•ãèqðÿ3–SôŸ¨šµ»K0=Yøˆ[µ‰ÔŒkl àÖl¯6Û­‡©¨ß›¯..G::W2ŸmäL!ù"мɛBåýAŠy4ÞCÊ& +µWÖå0õô¼%(ï[&¡9£¸[_søâÔã–ÎOÝÂÔjêáh¢g50uUÈÉB(äƒmpÔEä:üT§@¤VrR¬SçŽézs·T°5Rú‚>…5¯7«/ÊÜVêþ¡NG²„x%ß«¢<Èš=/–ZrÇS¸½}€jSCšeeàz%ËÅçšR)µj_ì´O]®Èf®òM9]låê~i'ê6—°±òN•ºaYQWT‚©œ:<Ô¾ƒË%€‹w8*¢Ç}Cv‚l!¥æ +(ç­æ_ˆä'kÊAjfêr½ö¾º&r¹¼³|È,Y®°TsSWÕûûOÈ“ÓXìêÓ3±0ОÝ-<°çrLý¨cAÐXÀÍÏr2Ÿ¶%¬g Oôµø»ª³©o/h‰Ì÷ýþ ¤­Ž=c¤xôè +‘ã/ÁÛžÖôH'•Î)íôsÎ,–‹÷…_-z'‡ SOšæÏ êUkñQ«úež®OvÙyèÄÏu«ÃÝM½Æ¤ý° +íÕ§²v¼CêuÑCcÈhgs¥ËjYº {VbîãnQ¨Iuh.4šS0CŽ9ñÍØånÛtøԜډûíJÇäQR_—ëë*èçÓ‰–ƹøsûÍÃxàß½Ä_nùŒŽÇ9n?Ò£Ë!ñBU›"Ö¾5/?êdèÓبµÙ Kx<ƒóðSëºM.®õÆÕ³Ÿ/nàÑ <UÇÔª¨£;|Š\¬16tü`¬;ò[+ˆûÝÍš…-Rý†y÷€Hצl¦eŸ€{ +|ÛQ†»O‘Šw<ŒÇÇc§iâ 0G¾ ' +endstream endobj 931 0 obj <> endobj 932 0 obj <>/Border[0 0 0]/Rect[177.12 556.26 208.44 569.76]/Subtype/Link/Type/Annot>> endobj 933 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 934 0 obj <>stream +hÞÔWénÛFþ¯§(@:Öz—7 @|¤Há4†ÍäOU´´’XS¤@®|4ÈS´/Ñ·ìÌî’:,ùSµi5ú8Ç7;‡Ì'?Þ˜µƒÈ‡˜'$ø9˜N³ÁÉ;²é@xÀñßD3߃ØçŒ{-µ0¤>dc8½‚ѨzE0l!C óXÀÑK¶.m§‘jÕTÀß|%äº3ú,MLsÔ'Œ8â‚E UWÐGàLä´ø\äFƒ¿Û[ñÙ0l_ÕɵYŽÛ^®¥j¨)8Xåּωx:qÌõ›ÐQ9L›zjNŸ$ØþZkœøÕ‰¯ýúüþíÍ–SÈ€õí݈=ÛÛ¡U¹’ Y)(*4$Zò´(¥+"ìò Þ¹¾ vïÒkc|@‚0¢µiÒ(b£±}ªTþˆÚ¦®¯s0N/vøêäªÀv–ßÖ+ÕÛŽjè…,6c#¶ú_ŒJw½¸›X¼ŽéZ)áOÌSû—,Øz±! '@¡yÀB0ë!±N£Ç±mNéBØT꜎/ãV`Üò;ªœXÝ@Ií@¹xwBñ^æÕl•Ï$RäaÅI_YíNP°¹ØM1Ûº¶Cšß4h}æíÌYm]§Å¡É}£3£>P¶tmñÊãÜ4ÞëÕØ[;¦! öîÓXr¾tE‰tm¥-óq]á¥zžçÍTùBŽœ‘ Znê9;zŽ[æ +WŠª‡¢|åóœ¤W;À]TµZ ê’šH»t_(s™>£ë`"aŒž øèt:F¹:‚Ç(¦óž÷·$mÁsûÔÓœLãckëÃýY¯êòi†à Ÿá0[ü³&·¨ˆ,ľg[ÕЮ ÊâU6[˜I¥-j7Xè|¿{¼׫R¦õžˆ²b©¼×Ï X’·§7ÅrƒVóñ³VÓm­.M^pÛB3$¯Ö2Pö@ÕK+ÛŠ­ž­ÔÍ2ã»a{KX)­âñ´VÕ¸ËåiM “`WcV/×8ºRF°ÍÏ¡ÄR¯ë‡³º<ÌiCÆ D[Áë‚.ãS(n­e#CL‹ZP¾¡È¬Ž‚?³û±)fų:âÛnjjª +6QœN[‰­–Äš #8P‘Öœ ³ž"È@ŒL~†¨_'BíÚ¦Ù‹…ùÔô”üoKòúRËÙ)Ìñz«ôŒ4’¾Pòön·ô6ëñXît·^ÀÃW;GÄž½DD¡gv=*BêñÎÅc¾X–æ÷W?€8-P¢ÿ!„³¾0í=Ãù7¥ý ÅA?Ä|NYâÄDZå<Ð/Céz8WœG—ƹ£ @;ï¸ø ´…ƹY+Pƒ¿1ÖûéC{Ù+Ë[\EŠ?†î°Vª¨$<j®'±zZ>Û‘<Æýõ5{[ƒëFå:»½Ëð™íÇ_²1rí´=<0…À=wk^š4™îgìœÂH>Ë)*Imø7ãóñþºµ$wvDÐæI¿¾{°Ôà?á^NXÜ%Wú¬r¼*_ºÕþžù , +endstream endobj 935 0 obj <> endobj 936 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 937 0 obj <>stream +hÞÜWëNãFþŸ§8Ey f|·èVbC¶¢ÚE¼üiªjHœÄÝÄA¶ÃEU¨oÙsf|I²°—VmÕÇgÎœû÷ÙH˜õŽ¿¿–0+{ ¡ˆÀ‹pioÚ{ôŽßHL{Ò?x“QÈ]BWpá@²ì ´Â…»Œq!¤ÉCïGëlø|Áàxpt—“w­Õ¬PËe–Ïà<¯ÒbªÆ)û)ù=¹Æ“Ïeìƒ-¹ |HÎz6šmÇ%ÛÚôUª&iƒ…*Ë´dÉ/½aÒ ˜HÀý¸ãÆq Ü‹„ðLJ:K½‰‰rÇÛÚÄ:‚«71϶ +±Î=Üô¢&eŠË‘—^&é·ª¬€Ù­÷wE+iUéÄ, £{dåŒV­ö®V*ÆóZÉ1w!}fK7ô»¸C?æžuY¬ŒÆd=®à†…w¬´¶RÖ.Vym[  ,¨¦Ž„MQ=¯ ^¸&øßAÆ1³#ôÛŽfé (\hî_~û×Uÿ»ÆÛGêrIMï€uï¤oz÷÷†zºXÀU6à qÖ*&¹o•Á2-˜í<¶î™ã¢0p1b±†Sèh8H-«$‰cÀó80à¢RH"»x­hÄñA'y| ƒy:fõ²)T󪧻²Æ+”E:®6¦]\Ïð *¬‘U=¡êó +&é´¸ÉÔu¥Šj€ÒÛ Z±ƒ_MÍÑy°må®Èòj:²ö’Úi¾ªðè¶-cˆÄHoHtªJ{2’;â5Ÿ¡2ò½;ѪöǺV‘Vë"yBLgœ *Y¿ÑfrØÕ­‹}ìÝœŸ^Ãþ„\õ!_/1f—[<áßãïó“NeÙ”öè‚¡aþ¥Ý‡¶š¶ƒÇ9Šéaþ¥=èÒ½*í>Š'LXHvõoÍyèL[ßží´»öÙ-øâv®i³ -7n}ºn‘£+q“üÒã0Ÿ<ÇRpùUéDÿ•0%z–$ÉÑ.O¢œ<Oâu¿Ê&‡pW/äG’t]îpä?BtCBWSâ¿Æum«ˆëv¾H>‡«æzw+ø *| Køíˆß]Ë3 ”ш²h=ùÜsd¸'z# +Ú€!~rþ!À˜t +endstream endobj 938 0 obj <> endobj 939 0 obj <>/Border[0 0 0]/Rect[370.74 629.28 446.04 642.78]/Subtype/Link/Type/Annot>> endobj 940 0 obj <>/Border[0 0 0]/Rect[320.4 427.26 353.04 440.76]/Subtype/Link/Type/Annot>> endobj 941 0 obj <>/Border[0 0 0]/Rect[233.28 127.26 265.98 140.76]/Subtype/Link/Type/Annot>> endobj 942 0 obj <>/Border[0 0 0]/Rect[292.62 127.26 367.92 140.76]/Subtype/Link/Type/Annot>> endobj 943 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 944 0 obj <>stream +hÞÔ—ÛnÛF@ßõûH&ázïä"O©/E +'0bÖIÐô•V2 ‰2H:Qä+ÚŸè_vöBJ¤,Ź´E!@¼ÍîÌÎÎœ™¥h19úþ’¢E3Q¥$C"SˆT›É|ò]>9:£ˆ¢|>¡ øÁ…f)æ ¥œ`ÂP¾š˜¡9ʧpC¨@ùo“Ÿ¢“Ó3$q†ŽŽ?FuL3Ì£õ¢.V«²Z çUkêy15ñÏù ‰{MS-QB1Uå'“¦$Ý܌۹ÝÔ¯L135:^Mcš8ÿuršO¤Ð° …¥B˜q­5Â"#Dø)†SÕ}‡•b&ßÁÖÜ}„…önÐnñÁG‘uk¶†1j swʯú¼hZ' +§Ñ7³ÂÞѨ53ƒJ{Í¢*Æ* +b/‚P=½BÌ_ •qB¹&öA ¸OS©±ˆ.êµ—˜ÝN[t§f‘ ³4Aź +óÃ8ëTÆTÚyUˆÎx½ñ!ªuœd C'ŒP+Q¬¬¹¨»>üòŸ‹þ'ïíÞñS»s¤Û;ÈÀ°wTú½ûgM}¶\¢Wå"4…XkcŠeÔ@6¦Ž®°ŽÞÇŒÃK3ÃÎbHÆN)s餀»XáXgž,îÄU*pºá +(ÁJ‰_äÌÌËX@˜_•ÅIÑCtl eç)PÉNä"œ‚Ø;Ó+Ó‚å”Á\¥‰fn.&†¿½/ TÔuœÂSáîÐ t¢y½^¡öÚ  ]í+ W¿EDö†G—§ÇÏŸ¿<Í/-©z‹Dƒ!›]ufF¨i‹Ö¬LÕ¢²ò:axŠ·CÁë±’ðÎË¥‰©„ ÁèÌZ/£u 5jøàmOX†µr°í©@Dç©ÔOWVó˜J;ŠÀið ¢UÌà©hKàLñËú¶uÖYÕ#¯P¬Å×9¥g,U#§,ßE@‹w1š®«¦¡äîà××Çîý:½. â-‹ö¶y·o‚u]‚Ö½îMAf{d…Aò²­ƒ0¼¿Çàsû~ºWãÝï#}U±2‘[w¦ÞTÑÇOR™ÂéK©_}w÷Úr„EeÌmÒ› •ºË¡¯Ä²ÚÅrŸ`µYÜ.‹úuYÃÉuÀ8 ‰mv¤;B2¯ëÄ’üHG㻘è†JSÇÃõ|·@3õ™e`ÿ” œF25>¢Ac7&þ´MÀí^Vùª"û’à÷ê Ðvo»=Š¯<¶ž mI‚?_O¨«'ú!õªùlWŠ£ÛGÎÌУRø¥'‡0väK[‘³è ,k»‚…sãÀî ²ª«aéþ^™)i3˜KØp#ý*ïíÊ™† +É:U‡Ûr®RÛ6Té.8uXghJÜÉ­Û³Ý>]uÃÄ¡Z ‰F¿}©„uÿ-À|§{1 +endstream endobj 945 0 obj <> endobj 946 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 604.62 140.94 616.62]/Subtype/Link/Type/Annot>> endobj 947 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 948 0 obj <>stream +hÞÔTËnÔ0Ýç+îÒn‰«+è ªÚ‹‹hâ™ šÉTIJ[U|ɵ´´Ä!”…¯íãs_9WÀ*™½º°ê­Àð²Bƒâйd™¼,“Ù‰å28~¸ˆÂ0%Á(θ„r›pda<³ +Ê\dPÞ$—äèørVÀáìpÎ:* +¦ÈnÕUÛmÓ®àu;¸nY-ýT¾AO*zÊ™°9¤‚ Cy”¤HÉ'n©wUí:8ÜT}ïzZ~NŽËDKf4&¢Y®Ie­–œg1¥e¸ÄD™Ìž\b<@…KÌó¡ +6än/³bJÙÇ%…+X:&ý¶ê ©f†¼¿ª+o 2¸:Ðøµ -ešŒ°w#¨[¬GŒ+9M…²Üo¬·É-ËÈY·‹ˆúz1Àj +&‰YúÑÅ®ù±¡ÀÜ×TJm¦¢fÙl*¹ˆfTûpaZÿ|ùçÐÿ—üaë{§ ¾s|ê +pìÈcïþn¨/68oVø‡ü×*XNz”`ï:š*Í,ùB¥ÂCW³1jq”“‘ANGÇo¦ +µÑ?L”GÙy™ {?H.îÚ¡ºõzŸ•¥Œ<–Y5ê Ï•k¦2Ï5H3ŠtágÔnÙ|l:çuBîcÇX¼N¸úFìZ”õ‚j²®º=¸ÁWåÝ•›“9¼Ãó~8 åÞÏáëÆmêS7œâiµ}xúä]ÓÐ^oqV ëþ9fv’ÇtìÓ +ú½$>Ä{oSéqkŽcç¹aÖO9cíã<ûUáDÆ=Zóâyñ.É\aLócÓÖîvNÐå×Éåw¹éZ‚ +endstream endobj 949 0 obj <> endobj 950 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 951 0 obj <>stream +hÞÔTKÔ0 ¾çWøØhUOœwŽ0»‹@ ­v Ä¡šfÊ y v€ßÄ¿Äéc%n\B=Ø©­ÏßgÇ!èÅæÕA? +o ¨6z0 +†,öâe#6÷Í^ÅŠ†`* ÍI(FAe“fÇŽ" Íñ±º½»‡¶›íÍ < ’"šêÒíét8÷ðú|ÍþÝeù©yÕÌ\É!%5!yÍ­¨R­ØÚì ú1·]`{lÇ1²ù"îálbÔ&¥h£Rvä5¿ÆY)jû[œQú`¦ }nCšÄ'à «æBLS!6y~Vý¶¯ k¡zÿµk‹GÕ5w³‡bcu–è«%íÝ’4ì>/Iz¶Šœ¬É$Uɳ‚Kh«‡á2gtßvWø CD]åe\J\Î >Ï`ê°*MÕÚ‡µ«Ö®ä•™ÉÿJIÖ‘k¤Z+š]Òº°Ú?7ÿ<õÿ>–Ù™€T&§ÖÙñ.³#7ÏîïR}q<Âã¡çø®]%¡«FÞÁ1²6Sõ]jÃ?s‡c^Æe‚žÖÉóÛ1íÓ/Þ"〠+endstream endobj 952 0 obj <> endobj 953 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 954 0 obj <>stream +hÞÔWÛŽÛ6}÷WðQL*†wJÉn’¦htã$(6}PlÚVã•6’w?©/ýÆΔ,o.( +EaÀ”(jxæÌ™JíâÑóW‚lû…UÄñ‚èÂÅIç›Å“åâÑ3AYnB?DᘒÄ)θ$Ë›+ŒëR‘å +.¸Ðdy\\g—OŸà +rñèâáCò²£¢`*k·]usS7[ò¢|·©Vžþºüañt¹CÙ€B3*¢(ˆ’À*]Œ{ç°§¸y¸²q÷«~ 4·Ìe¯o×^‰lðëxAj‹¬¡ÌfiÙOiQ·Ú¥E2Ž\š Ur¼)\;gJ¦³—]W¬«¼¡®`2óÉJŸ¶h›d¸žr’ &¥udy k=‚ç*‚ÿƒˆ²¤y{”¹ä"^B-Â%ãø÷‡ÿ|éÿ×øt‹±SŽ Œc™b'LŒÝ¿ õñ~O®ê-(ÔÖ*˜Ézrå{ßÑ\YVfŸ¨T0é×ì^^9òÊB–Þs˜Y0Yb^[ËÇüâè!Gç2C—¿¡Å`³&hÔjÎÊX6ò˜±o–»R23î–Ãux+åøÚ˜ç<=A'°€gDà¢ðôçÙž¦,þÉž¦à_ÙÓ”úË{ERf`@pÜ¥¢Ç¸(M*xP6§‚÷¶«¡ª‘‹j¿_­ äeÈU{êÆ÷!S-;UTD u2œ'ƒQT³`ú*4¬=UÕCïÉ°ó°ÍÚ7©€–,ÆG ¬ÂjôÃ?1†§Í%7 ¨ºÀŽÊTÌÉ¥ïëmCžþ¾ÚUÍÖ“g€ÎZ + =é@7TÂ]5wÈÅ;JŽKxR£°L–§äq©ÜaÇzØk‰µÅÒ¼ ÷ß‘¶‹I˜K¨³XDÅTB#c³,¼C#_h˜´YˆRÄÄ™„·&PÜ%SÒES›C³j(ãàXE†úÆSaP̯<½ŸK&¬™Œ˜©¤'@ow¾!•Òr Ã!Äq洹紧‡]Di˜Ö %ZÊŽL +I¾‰Ñ·Uç«Á÷€e¹©÷>¹+˜K!8‰â:«› ¨Þ< ¢H¿k©°Ù‘ʬ!éa" +2þ™¿rÌ‘H£JbóCOe¶ß·ÈY‘±ñÕ{*9Üí)ÂõñÁR²Ü%Wð.¸Ríû–¬v>p Õ“ã®^íì*ÊJ +fg²ŠêE1$}Að€ˆÎCZ<Ô_“ 7FõNã‰f®5Ñ$#‘ˆ×eŒ¼ØÄ€:”Ùº%M;$Ž,Ì™DN`n»6øDsPQ½ö£™ˆ Àsϼꄻ÷£„€ÎAêLýF•ÑT’aròÚeèoÓ# +´î”˜Ê}¦17eª“5`AHìU(ªÞGIÈ ‰<#P‰ ȩЕö ‰ òÀÒ}&¦´ØN‘ž5q®GõŽqn ¢B +5ÄwTŸß÷Õ6bSúO4ÇÐ$G>ϳ"eØ« +Á¨kÓUTŒl<]pì1S˜Ñ»,»ô›1¨Üüœ]¶¸Îƒš$à…|œ> endobj 956 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 957 0 obj <>stream +hÞÔWÁrÛ6½ë+p$› +@‚IlgÚi;›iI§CKÍD"U’ŠëOê_ö-R”âfzét:ž1)»x»ûÞb)ÙýââÍ­d÷ý"KX. KMÆÁ:»Ø,^•‹‹kÉ$+7 ©˜À.Òä±MðÒ³ƒï%Rp]Ó-²Ká±X6è÷r…Nm_Q£ŠÈ˜®{{CÎÒ‰·d}—K¤XeZÎñL19`õ»ÞXwY Õ¤¹Ï"×W£¡:C€Ü +“Î|ˆ ‘n /ãÜ%šŽ“,$Zè±ÌúŒr$)cƒèO±Âÿ½ý +ÕT‘“InF§úE%hã1é`ˆŠë9f¢æ«P#ÿf2&CÍ96€D™Ðªîþ°³ GݳŠmkD통wíjèÁ×jðÙ•)OôÌS>y +ÇÀªm†ªnÈË¡©?XÖvw8‚«¾¯ï·‡ó´$ÉË¿=Ëe®“Iæe10[­æ +ÌH]»sšÚW5•4Ç2ÉŽ•ˆÈÅS‘Æhg%¸’ú<³£ì±gOäá -tí%ÛW;;ßÛ`ïÎO^Ά$k€2Dè7¢ó©F³¦´®70K FÊÊ€šõ”u_ÖàsúW¨”™pê3n Š ŒŽ‘.Nˆpʵ#ÍÄñ@mŠØF0θqZC·¼ñð4Ðëž$Ògà8çÀ'¦²§•ËtJ™îíÀíŠx?K®ŸáíñàzôcžòcÞD¾¶Ù>QÙ¦Jn¾äZÜ3©KºCàL]ðˆy×:5 ¶™4°‚T½›,øA D›ŠíÛšÆXúAüY[’cËÍ,43:IÌ ë[Ÿ¤ÚNšzž±fR‡š »#!ô½]‡àÚ‘…Ë€ÙUÂëÆQXÒYĽ&m%˜ÎÎ’·È3˜BkØ4àƒL³¤ð÷Ó̘ë/‹76xÀàßîÝàGq(%€,Mf4î›Ø‰*øž~“ÿò›çÙu»·«ºÚ²Ÿì?fàçñÁ>h~ŠÉ›HU¤(15kiÁb`I"ZO•háD>‚Ò¾¥B¬*—$M“Ý„!Ÿa%7xƒjìi;™+|fVœ›I¤]ýnötˆãM!1È™•<·JÏ¿;.=/¯|i&!]?ùÞjCØ4™/S?B[òÓú†n­*(ˆÄPÝn3Ùßu‡ï7h"×F:r¸fS¶ƒ;èÄ kSåÃ}ù<Á$„$#|±$E„!#MÃÊVdX±ã<‰f—™„§øNýgÖS´·>ûÆiž>óà/’‚x +endstream endobj 958 0 obj <> endobj 959 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 960 0 obj <>stream +hÞÔXÛnã6}÷WÌ#……‘ºòqã\ºE[Yuû°ÛÅ–5ŠdHJÒ|Rÿ²3$%Ë—:jê¢(D²Å93g.‡”¬&gן¬šIèAäÆàÇ!x.ÔÙd99O&gW$ˉàâ^DqOBä¹Ü•Ä,ÑO?Ä,ô9R:3 +ð¡w ¡¨¥ ¨õ]hÂþ!mZp¦!ØÏëEJw‚µÙÂÜ@Nט•R°Ë~´‹êù½]$ÍÕÒ÷”K”¢TDBÖ7ueV,žæ-|q¢˜K–Y”ƺ¨J‹ÒÙq)ãR†Q—rßï‚w=ü ÈOŒ>ÔTºÂÜà„.t×ñ—ÿ|éÿ¼ÿHµó".¨rnW;O[;˜Úý»¡~, +¸ÍWØ¡öZë°n³&ÃõB®Ø³#=ü2[ðní8ERSˆÂ²¯9±Ñœ˜F+Œäp¶Œ"¸†]?ûg_Ðœ$N€BÅ^úr5– øœµ-iÏ–2ôÒ³9rèKò#È«öÙ¤ŠÈDrŸÁÒ‘ä¥rð_QTŽðæ…\´éùT`><–A‘7m-]\j¿S"LÕ¾²+x1z=›[NB§ic¯1pc,¹ï›š»~žâ§I“Ë´iªyž¢Ö ‘Q)M MeÀ•¿+»Â$¹}]£Š¡ÆÁÈ#ÆmòlµP¶a*y({sÝ…Z«QkltFô*ãv›†´9ýT.©Œe4bõcÚæUé Ü ®{l§|‘`":T·=&¿í9ŒzMövšÇÕ̓ÿ¨uˆ'Þi©u†±g½ÆyQé|úì!]õF1Šø^™ì Æø\å XdˤF(d?»{Ø ÝúÆhå4Á%We‚~sh¥@Mä@/ ÑBZ¶ÏCr%ûjÛÈt^ØùSçy;ÄôE7r÷iíÐd§sìÖŒ·÷oÙ±–û¬ŸôƒQð4ï‰o…ÏC“P¶0_[·<†™Ö­Åv¶…s¥Â˜”ö¨¨pñ.­³ÜE4ÇB›²Yõ¸®Ê¬l›-}ƒn‹ÞêpŽÆõÅ ø ~ˆ<"þõ‹¬ÉWåaoÜØn‘Ùуwt{:®×ÝÍÑLigÆ.ËÅRGf×Ø£ùÉ‹4DY$ÑŸÝ„Ý .r­Ýx&þXgé1}:V¸<#ë ßQ:chö¸c›04M˜?ç > endobj 962 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 963 0 obj <>stream +hÞÔWÍnã6¾ë)æHb!†?’H[gSlÑ£u»=heÚQãH¬]#´oÙ¡DÉvãuÕÔEQiþ|3ßÌp8°®~¸°Þ‰Í D&Å¡±Á*ø> ®nÈVÀñ‡0š) ZqÆ%dGÆ£TAV`‡‹²]ð\¿½˜˜]ÍÞ¼Û† +é×MþøXVkxWµ¶Yå…¥¿e?¢$ÕKRLÆ1„‚‰$†ì:’G[`ÿÚÐPh‘q`–o6Ÿò‚ʈ%ä†8óús[VvÛ x›q”"É„Å 0©Ò4ÞÑM$ÓÉ0v`(ìpÍ䬤ºI4Ãh¤´3M +8™Á"Nm)Ú]/îõþ)߶@Äiòþi™»ž$­]ö(]›’Š²˜øe?ûEMqïɾå"Fþ*‘îà~Й$Ò)î¿Å.b5u?³ü\´° Ú0A¬‡Üzyuå…¡»:[qg)=8 Š&\õL¾‚HS´sJ.ún 4Aû íôæ?_úÿÿ:ß)Í„ó|§Æ(> +ÿ]U¿Ûl`^®1\µ n*0·0·[‹V¹xûB¥ÂA»dÃÉôgKËîl%˜f†ÃµO< N`Ò9>b> endobj 965 0 obj <> endobj 966 0 obj <> endobj 967 0 obj <> endobj 968 0 obj <> endobj 969 0 obj <> endobj 970 0 obj <> endobj 971 0 obj <> endobj 972 0 obj <> endobj 973 0 obj <> endobj 974 0 obj <> endobj 975 0 obj <> endobj 976 0 obj <> endobj 977 0 obj <> endobj 978 0 obj <> endobj 979 0 obj <> endobj 980 0 obj <> endobj 981 0 obj <> endobj 982 0 obj <> endobj 983 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 984 0 obj <>stream +hÞÔX]s£È}ׯèGÈ–zú‹mIö(ñÊŠ$ïdk6XÂ2‰ ^@;»ùGyÉoÌ½Ý BÈ»#eJ¥\e@@ßsîǹ·ád;øp»äd[ ´$!‹ˆŠ4‘Œ”éàip½|¸á„“ÕÓ€ Âà< +©$”Œ2AV/«P¦bIVk8a\‘Õ—Ágo<¹!ÈèÃè›oȼôyD¥WlËäå%Ë·dš×iù”¬Sÿ¯«?&«à@R<ê El@ÄžRQc{6…@ãæ,°Öï’ª&þPÓÐ{xÝ$x&¼:ÝØ’á1örŸž{ì[÷P¹~v {d<ð‡\jœÙ9üª0†÷çp +k•…½³Ù¯kòF”{©[²röŠÜÇÚŒÀ»Bè¬Æ¿R &-“Çþ0¢Ê‹‡‚q{_SíÒÏ?üÏýÿ]¼½ÄØÉrŒkb'Û,ä. ÿ»P¯v;²È¶®!&·Ï!+²H«´ô‡óí'_Hø1ÝÐ^‘…™†‚>©u(@,38"Æ"ך5ÅÆ!CržöWÄ53‚‹jÅhl5dhË÷ÓH‡± ÎhmçæÜpX´ÍkMÑ3wI 3Âñ!s÷Ï›Aý'6ƒˆýŠÍ VoÛ e<ÇB§€”qx̪‹sPü>•(Yû:ËÓ +ÝÕ*ÙAOѤRn%S÷ÍR"²Iô½Ïˆ„WìÉ:ÉɾJIýœ’Q²Is§ž1µ1Ã#¨ +t "9ncö/q°-˜¦ªo^7L´ËáqZeÛœL~^?'ù6%7>h¿ò +þA¢‰rñÅp•Ôä¤þƒO¾”¡S‡ +aM“FÜ<ã Ò9ˆÔY—iR§$!—cTHÞêc O8x¯e±õ93X¸á"'Xûu_W°"†ä)Û¥>`R%+ð!þHAÊá Æ œ*ÑGm΄Ý"^e™V¯E¾Aðƹ äܾz ‰áªÒuyEŠ'>CPrª•!¨ƒÖo{Y|è¤ òØ ÏÀôsòŠ€7iµFÚMöˆ^„Å[€61eÐá7!v­z—UÐÉcº+ЕÜûZÂ=ëÁ_|xŸcöå)A¦VFÅ È <]¹ö +4déKtˆÍè\2 +ú4¼Ñý·óûÙd¶êG(¾Œ€Þ»<ºâ5ù¹Nó +ÕÛtùnµKÆP½À5@'ˆã8:ƒã'e2ùËj2[Nïgï^&wA#ÚuJ\ÀNRs#!`„ Ì´àRË»™ÞÝc–TEØm®ì Ê•Å­.ávWy)l>n±áè•m:qˆ¨ñùu. e6dz1÷nG“»»ÛÅtüÎ}ÅÚÎLL¯ÝxHlä2¾$2êÔ¹w»¸˜/ßG¥\î„1­À­NQ¿t=αod}~! vá~œ.W÷‹ïßI‘ZA²Þ¥ÝvÆcìÊ0Î\Ðx¬»hg“^ƒéì×*ÚkìðýÈmºéÖ ©Ÿ2;Æ +˜¶`>ôòmã÷à…ؘñ#Ð)õ+D ™úTt„­´{±4ö:rªYðÖÖ„÷˜’,wÛ¨Ö©ÚÌ·ÌeTœßåKQ¡ÞjEvñåþ1Ok{ôX m¦^0Êð ;xˇk€ü…u©K.õH3Ž +þ¦C Wäײk;ÆôɇBŽ¼d¿«Éb¿;šÄ¹ÄA#æo O±Aˆ÷¹”ÇÀ²è õIÞx³ûlp®îV‹‡»ÞàõúÝWhË7ú]'æYÞ•Žß90ç0Ã÷»ùtö{T@]5™—Å«ù f?²Á¾´à(X1ÎP×áù9 ‘=jw°š/îç“ÅjÚ‹HØÛtÿ¦"#4üLm]ÁA":Žßy 6¼¥ts ’&&{óß ¶ßfc +endstream endobj 985 0 obj <> endobj 986 0 obj <> endobj 987 0 obj <> endobj 988 0 obj <> endobj 989 0 obj <> endobj 990 0 obj <> endobj 991 0 obj <> endobj 992 0 obj <> endobj 993 0 obj <> endobj 994 0 obj <> endobj 995 0 obj <> endobj 996 0 obj <> endobj 997 0 obj <> endobj 998 0 obj <> endobj 999 0 obj <> endobj 1000 0 obj <> endobj 1001 0 obj <> endobj 1002 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1003 0 obj <>stream +hÞÔYÛnÛH}×Wô#‰YuúF²ùèU”Œv=¶!) ‚Á>Ð-q#Q†HÇó»?19U}¡HJN”…ƒA€èBª.§Nª¦9Y Þ¼Ÿq²ª±$ ÓDé˜HFöùàað÷ùàÍ;N8™? ¸ þÁ × •‚$’Q&È|;``…2•J2_ÀÆ™? ~ÞŽß‘ˆj2z3úár·¹¦2Ø­öÙv[”+2)ë|ÿ-òð_ó€'i=ET’!§<ŽÈüí`Ñ;“GÓŸöá'T˜!ÓÝ¡.ʼ2¶ÆóA¤RÈ'¦QL¨išª4cÊf šÄþ:¤L…ê\Di.BÆ ©A!%pQiŸbídB9VŽùÚɆ…ܱðÿêÕfC¦Å +èŠX‡ÈX‘i^åÐœùöK($|™/©ïL×[‰0½ƒ¢œŠ¶b£±ÏDÊ‘‹¼Ým,rZŠÕ£³¼><’¬\’Ñ®¬êDÁÛlÓš£¤¡—øèÅxH¼‡Äz˜¯s‚^ž¬ì$VvªÆÙÂç‚šà½rɦ—„5ƒ!í6dïäŠeQÙ¦ø-ä +Œæ!üGjðµÏ½Á´mû°¸µ—-! +ô‘ÕfwŸm`®ú,DM0Ñò Q!²ûP0xÝ€çzÕ–FCÜöE7r¡sîÈö99Tù’#QðQ»jÌC±ÉCÁW”|A­öÙ† ¼9 þ•ó‡7õSBG¢û|U”$kŒ’§¢^“þƒTÑ›+cäÊ(©fÎCS ÍËüáià†óK®hKÑdèÀôe!»sŽ†RQž§¤ S×åèþKÇ+ ‘–~@xo´p(N€NñsÐåPä>(gÐÐ æmt“n|ãrÙC„§íÛ}Õ¿%6þΤa²£RJQ{Ž\rFÑÔ6䢕н§S^?…È–[ E|!Û|±ÎÊ¢ÚR'1QƒˆŽr¶öÿ»ýî× …šW?“·ùƒö»²9¤Ä°ÿ(i:€Á¾FpRÑ­…(êW@H 3,VŠF¢am«€wÓÛ»ñtþPžÜLæ“Û›Y·–œÊôÜôe"µ\ªê¬Î·yY[¾ƒ’¥FÏ“#ß}—u’ªÂTgÞD'S×ëÐ¥Ú6¦º QÜEw)ë&Ú›f‰O®½,ñ~jF†P\~’[|t1…E«eåS`SP¦‘.N —‚iî`:~REEŸçîLyZè˜øswù9˜â@Â=µ¡4øA»´¸8îHónÜ·ŸºLêìRIC#y6h8„~•DÁì1_€b›¼n!E)F›GG³6iZÚìn<š\]ߌ糯lhT =áö?q'ŸÏ§UN€Á VÕ \ùʤŒD0>L‰±'úͯ^HO¦.=ʔ֭âWÆ'ª«6Ö±Æ$Îe+ݘEçæ ï¥KÌ"n¡ŠüoµiÊ!IŒªq‡36Ç3¶ýƒ +\‚Jií/¹?ºø‹¢HÏ]ûC€Jâ ² +endstream endobj 1004 0 obj <> endobj 1005 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1006 0 obj <>stream +hÞÔXÑr›F}×Wìã’DkvhŸ[NÕqœŒE’é$}@ÒÊ"•ÀÇŸÔ¿ì½»€ÉI:ušéd& öž=÷Üs›ÑÉ‹'7åHI¸!ñBE¤K +=ZžÇ£“ N8‰W#.ˆ ÿàÂÀIAé2Wx;raæz‘$ñn\î‘ønôžžO.ˆÏBrvröô)y]8aA ³°wr¿ô»Âó€ šÂ2ä:ßUi¦K³Ö$)Á;RÌW„ Ea^躞ݛٮùvÌ„×ûÁ¤ù6ÜÒ"_za³w&ZˆÂ·/“²"ÎX±€¾¹]&x'h¥—ö†¤xhæ0ŸÖ½¬*ëú!a¯.÷a«R üÀ]ûG‰»÷‚Þ ·°V‘Ûo–»EEÞ:AÈ8Õõ’e/Ïê`C•‹\ ¡‚†lÏ’ýáQäŒCæÑh,\no}â(¦(!ÍõÛ/?üÑÿïâíGÌ Ç̹Mîd«B^«ðûB=ÝlÈuzrÅ:¬b,ɵ.5Ô¦D½}r„„?ê%k +³®­@˜ÚR`(_ðxPªã3F—îÒÅ ÒÙ}V%Ÿøãè$Ž…}=b‘²uŠ7¸„¯˜ôp ¬OcSïišUd©EWwÓ,­Èj9e.ÄÅšp±ÂÏGôbz9yBLˆ e#H¦¸ç[Þ™ë» +—¤«t£ûHSnèÙç\óÌ3|KRˆ¨¥fpõ‚ æ¹fCÝ`ïé']”PÊ”[÷lcJ&üè0¤Ï” +ƒÇ )þuÈ÷t‘gà àOHÝêøågIK=ËΌ§Ñ*ýd>0E…ü(î³Ñ<ª¥ñ)]Åš7MŠ(Upë#x<&#èT‡g¾3,=·ìœ­ iEùÃð,µÁ“Þà%»J¶ÇÒXxüÉæã¡© šÅ:ÃK¾É ªû…d‚ÉIî+JùǸ ëÇïjcxÈ ŽÛM’ €À˜Hÿ(àÞq?Yæ»ùF÷-Åc‚«ÃøF«`¿F"_³•Ž]òX›ÀfoúC½ö)Lœ&•›ÝVgUÙçæÁ¤ôk<}oFQ¨‚ºù`ß¹Õ‹t•ê’TkM²d«I¾"¾ 9âžl×vm;†gqtÅ@¤ÊɢРÞð)ëã Á|iAZŒ^¤ fÀ6vÌŸ¼ˆ‡`¼è cþn.Öº´ÍZ;8E–) ‰°™ËÉÅ ‚MK2×8¯ïJhãY!Êpß ÷Ù€ë¡Âtv³iô1 0ÈüÁÁ¼ÏEh—=º·ÉǼ ò‚‚à¿í&/€»!@àÂó(ØcCÙØYj€"Í¢ˆZÑa2CˆíɦŲH ©aCƒf¦oSÉ\É­°¯òÊñ [‚þÔ?:Á™Çín¡å…2qH¼nÊÒoÞŠ÷I±p®N_NÎNg“Ùäj6§o'}u¾£NÙÎœ6FY¦±âP9ù¼Ì7ºÒ?“¦ûò “í¶>Ìûu²ÜB¯‰ƒc^hCööp¼4‡½Ôl;oòAý’ÈÉàH +ë¬ïJcþ%‰éˆd™B_ÇžFý%c€¨^ÞKÍ¡ÔʤÎßØ Ú[8Ÿ¾žO®Ï~9½î€ñºÉú¾|)%¶Wë¤shÁùMÈ–A€ìÙ‘³Sg­>x}ÔÃGcmÁôF?;cðÏ[`±$ëÄ0mà| +‡h›äάlô2Ñ·f¹Ö™±=´ILVðí­%d•a×ü›”ª v®U‘oIŽ +!ˤJæP8¥3K…·{‡:èîà "ð÷|6•4ŠÛ"]Š¢Sè¡sMt¶ØäÈFšìgŽÀï6ºaÓ.9€ÛmcîrÈê61º€5þR! +¢>4 ++¬nkêéq¾ƒ¹g:˜çÐc+˜NE½³Õ>¬Ê òlàù›ÙóiŒÒœ ´éGDzíFChʼnïw=#jKµþ­¨Q¯36ˆÜ&ö.-°YÎ… £ér¯×—aB™bþKÒ(Ú–È}-à"¶èúlcKÞ9æ<;O+l”"nëÊNdúj £=µ*Ø óý½D9·@¬¸Õ@Üíæ¶f§SÕª­!ÙÅöLÁBrv¡F@ÎC…L…JÚÔÕ?SèRäS¾þþ=ŸÌ¦/®=¼¯Íæ7I!¿E›½n°Yi&vÈ[9VËS{¤†¸è¨}uyaýîó —pL# +Oî¿?ñäì—«W—¯^üÖ‹å³èh™sõ • U{ô¤9¶V®¨- æW¢¾s”´¥·&Ž|U†îàDñ䛫iÜ·FÑçŒË/PetǺ ‡ ÕÝÉ\ç8` +zgÎ y†…+¨ØÅŸÙ<°+´&tÌîõ(†”óÎIÄRÄ=Úþ0÷·Ä…™½ +endstream endobj 1007 0 obj <> endobj 1008 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1009 0 obj <>stream +hÞÔWÛŽÛ6ú诘G©ñ"JlŸ’ͦØ" ‚“>dû µi¯YJuÉ6ý£þegHJ²7ë¤APÅmRÙ3gÎÌrØ-þø’î[h Y’ƒÊ5ÈZ»Ø.¯Ÿrà°Ú.¸€ÿðÁóŒI™LX"`µ_$h…%ÊHX­q‘p«ÛÅ›èÉùSHYgϾû^´1Ï™Œš][ì÷e½ƒ‹º·í¶XÛø×ÕOx“ô7¥LÂ’3®SX=Y,Ñ ]³ö+9›þ¥—>+ºâ¥fYôêݦ •ˆz»ñ (éi¢:fiŽýµë›pHøgÂSŒUjA_xâT¾Ê ¾ÿ—h«müÎfX÷ð:ÎrÆ#Lvᾦ—afV -„ÎF´•º‹ö_À‰—9S‘YŠ„ûe +±f:ŸÿüñŸýÿŸ¾RîdÆ8e.s''òÀÂ×ÕGU—åéJ…ØÇÉØÁ¥í,§$¾½…Ä톕j+®¶4*ÊÇb#™É½Þ¸×™bÙ¬6I’R¤ mìöö¢.û³ë·ñê·YIfÍ"*C‘" ŽÚ&Å÷@=ª:,….C‰¶Ê©Ê?c®¨:èo,òÜzå1NyâTà.ó Awe>§#QÓ-Úßòª³h¦ì õzå>ÄÜ ˜îv ps·¨{è›`ÖÛÄt΀…uQU×Åš^Í¢·°·ë›¢.»=ƒ‹­÷e‰jΔNµíQ òÇÝFÍ ÏžÅ<ÅñR@Íçöq†‹d‹ô-D­ÌAÔÙØü";ù½EF] ƪr¯#M­ÉÇj/ro !_òqÁOêÁÅîûÐ92ŸoÃŒöúL Ê9Ÿ{ÔÄ–o> endobj 1011 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1012 0 obj <>stream +hÞÔW]oÛ6}÷¯¸À^¨fø%Rzì’vèÐAëmÍKv´ÙR&ÉͲ´¹{IJrœ´(V à ¢)ò~Ãs) ÛÅÙwï%lû…ÕàD&³ tÕb³øvµ8{%AÂj³ +þáCfŽkN .¬ö V¸0¹†ÕBXÝ->°‹—¯ 土?—]"3®Y»íŠý¾n¶ðºªnS¬«ä—Õ÷èIO)×°”\ÚV‹%$7ë0ҳ韻d)W¬F3ð®= uSõÞÖËÕÂ*î,fdyj+ç9p“ aBn>]ÿ3æÊ[­TØ…AØ j4À"¥ª´¥"Q(^Ó?°º ¬˨ؾÌWì*yèÿ ÔR“Ô|$2Ø"Ä^”åy»ß#Ix†¥°/4ÃgKIU÷S]C›‰ò„$l©BŽÝõpŸÈGí†*j0±~ë·&—äTÙ\ùа.L´…á¦ê0*•ãîxé‰ózGÜc<ÎýP !Å!¤“Sz‚èž\¶ûb¨×Ån‡à–%‘Ž\.±µfê´ Nt ÑÞ¶‡¦„þ~ÝîàŠ}s•@ ýºÚÖMS“%ÌÌ;§ˆ¥ß†}·ÝøeT +u +š{fÌt2Jÿ˜I&E\ͧ™I€ž¯XÐ3.¤O[ ꮸ|Ý6ØF׸þ¦èžA¤ˆ Qt”ÊÇ Saƒ‹5õA††é1Òj +Ó`ÏÇàü&/$DäãğూÛlb`ê·EÓ-x OQW;KVƽꔽ‰–x þŽèP7%tdÄLªëD!1Ø}²¤Ë†nQÃOßX™NhÓ}„ÌwU5n#˼Žõ·xéê‰.QÀru¬Cã£z"ÖG”šÉãiªðòaNiêFóªÊfvÁc)ôU<ËÒÓ3ËL)x½| …Ù©fµ0Xý:kaè¦û9¿ö0}‘*‹¢= +«Ð³^vhóe×LŠµÝgtP‰—nR¡H';µ›Ø4.C³gï¡êªá€“Š&ñºi˜gÔ¡Ÿ  îÒ)ð‘Fs›õa>{ÀqýiUÃ[G7ÞÆ8pŠŽ%'_ŽÌH]B)ŽàùØÖ%”ÏQaÛîSãÑ yEMQ܈Ü>Ò*ÉÉ¡?‘DwZÿ´œã'µŠð?Tü8ÒÍÈé2‡WtLU§!$“{/ÃÙ¡Æ=*ÀÔªD”‚÷·ÕºÞÔU`EÓ6ÒY¢O<Àøñ@½¯ÚbÃœZ¤<ÂØ…@g29ÖTeÐí%ɱ©qÞºðiæí-ƒÁY,¦ãEn¦ )ƒ÷Å¿ €d4 +endstream endobj 1013 0 obj <> endobj 1014 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1015 0 obj <>stream +hÞÔWëŽãH–ø™§(µ„TÞT\årÙf4? § ØÕl¡i~¸§ÛLb_È6h_bÞ‚·ä;uqœ™Þa…„ju\¶Ëçòï\J²‡Åê×ßIöÐ/L²8g:7,‰YW-v‹_­«[É$[ïR±¸È<‰bY‹X±õaCŠˆu‘°õ‹Xj¶>-Þó×7·,9»^]ý5û¶‹d.Þ>tåáP7ìM3TÝ®ÜTџ׿¦ÄiJE–RH“²õëÅIÍÆ­’³è?vÑRfBñbØ»vê¦ê­¬›õ"Õü1"5L¨¤( +&tÇÚyf”ÈLx—…Òï’Ø—ðx£°( /uœ'ËÔd£JoË~`ÑÒˆŒÿþ¸-i¥øPmÝ‚Õt-x‰”ûm¿õ›ºÍ£ß¤Ü5–)|MŒ¢»‡†Ü×Yï¿Å²ºÖ½ÙŽ›ý!Êr!yåEö^_ÛxeˆŒÅ*&°•2Y@[ëOÑþ'“E-s¡y±T±tË”EFÎX¸þôËÿ|ëÿ¯ðé–b—dBRäâ»db¡ô,üïšúËýž½«@WJÄ!’ cÏÞU}…äLˆo‹T‚‡ÕV„Ìô¹•)›[åób“ˆ"wõÆ®°ÝdZdçjÇ&xšÎÓïªa<²›ïËTƒùǽ¯Se9×0¨3-’h©ž†â•;iëÇŠí¢DÁvd•Æe¿o#™bq¢âUE¨)ÿ>Zâ·<2Ö?†6ݲ¡e}50Ø7X“d!2Ô‰)nR’ú÷JOTÖ(s©¬Eš0 Öt+ñ?œ¢”ÒØ@Æ"ËgrbÜÎ X"¨’¬5ü©'KÆb ‰Š¨•²$W¤-ºS°Å^ˆ5É´T9ÿ…‡5s°¢0®,Ò‚ •çÖ)ügÑú/ÏE!Ïf[ÏQxÏÿIM¶#Û” ØpÉðf°ÎW{öÏ¡ûNT7ì)æ;†¨$Ãæ¯cÕ  !V† xˆâFˆ;•tWû¨%"»ÐóY_B#:”HUŽÊ‹b¤¨=–ëÛCåWhrÅ%àg*'kò‘ÂN0T[v_NâY XºPáþ…3K33P2_ î±›ðŠ¬¨!_á1‡ÙuƒÆÀ÷OUN¤7`uÔ@x @Sa9P›SÐ6}}_Sþ|_OD·CIùSð‘Ò®!Ñ]Àe†Hš?Û÷ýâ´à!R¬îÙ¦íºj3¼`e³e–#D2D+S3ûŒ ¼}P×AHÝËŸ×0Ø¥%ñBsñoئŜÝ6G¾Dñóþ ÎèÔsÆ‘='²Ÿf# ù}¹!Ôr€·¤y`âÄ.R}CëX`§Š}pH‘ ŠŒ¯U¹y ^;ܦ¼¢éÁŽQ›2ÈJô<ÐÉdµgç~ß»œÊlNcíƒg;‘y>¾µÒçU–X~r2gŠñ}Ù#HW,G,ºÚ£ kÍä¨.¼’kß ÞÞÜ®¨¸½-›‡±|¨Ð,^šrRóÎfûegÆŸÒš S:ÁÞìXÀ#þM4ºT Z‘ ¤šœÍLzÉf©=-j’½mYÓìØÙ>!Ñ+—‡-*ýPé )>Uü9†2OC­- Ôxç1N]ŒO5Ò¥îû‘ô„¼VŸ·’jÌÔGŒí#ø¡&@`6tƒ^hÁ± DÀ”lëÐÆîq?CEè H +ÇE­ƒ2{f´š›ÜDŠ@RÔ’%Õ“•ü\EŽN¾þ[W>µ³Ì+…p-*þ¬º{ŒÁÎG¸v¨úžU’ ³Q‹Î"„ˆ‚ÝÏ(Y­Ø7Ǫ!Y„(Êv5pÛµ# 6,.è¥vu¶£Þ1xÀw˜Æù+|9wü +"¾‡ã8Üâ1Dý®¬=⃪a­•ë üøóþãÝž7W/&ÿ/E¥B+fo> Ó‚]wÑ„«S‡9¾ƒب.ßb”üÁfÜh©'Š&nv$ÄW+òïMSu¹¯ÿ^ùzR“òª£qš*¸OÿDz·à·nÖÜÕ]?|)Z×Øå¢5R7ý@Ô*ѲvÄi¿¾ÿ€èí)bøA{Šhµƒ5€±§ÜAëÅøEŒ?祸ä¨Fš_M +¬ô "Ï6ñÕm¦ûزø%ÉŒçÊf³Ô?2K!¹elσŸÚbýŸÚÎåi~¾p5h^€R_€R>cÿ%Àa S +endstream endobj 1016 0 obj <> endobj 1017 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1018 0 obj <>stream +hÞÔVÍnÛF¾ë)¦ +ŽµZþˆøËvá"i›mU¹”YKKa—´ë} ¿Eß²3»¤~Ú*qEQûÀáîü~ó͈,ãon=XêA@̧N#8(1(çé`|åi9ð|àøo³À‡8àŒû®½0&¤9 +Ü !}üè\\^Á„Ma6ž½z”ëMYàÔK•­×•\µl„*³\¸?¥ßb¤ÀFš°Fó¢ ¤ƒ:¤0¹•‚ëÊy1ó +ÝÀMÝ6•ÚøºL‘Ïâ+ŠØ$æI’ §œ‡¶6S®¹ÄŠ™\" ¤˜K,x Gb@H/Ãi_;%æoSô'6Å·™nÀE,v¾ßI¾ÓˆÂ +PÑ3q¤Ë&N§ö®SRù]§äÛ'÷&Xjùôâq{Sõaœ ýÑ—ªíMÑæ üàÆSæ9¢s©»xµì‚ac Tœ°öý(îÁÃ?ƒý;xI⎦,t’‘Ï=+NÀXäôÏ—?þsÕÿ¯óí+õ.ˆ™Gã}ï‚- ½Ž…ÿnªoV+¸©–HWšÃÆõŒn„8›ñíÁõ<ë³›­Ø7³áBÙîš4õí +HXÙI#µ£wN¸[6Ü7ˆÛ"+Ù€nä4í¦ÛsgîÂ'‹ã„XÎif/ *øwuo/O |môÒ“þ¦’ä %ôÑ»‹¼Èš ΀ÿ‚C9Üç­Á¨‹0Ï '»¨Œ¡";–×x ï7‚"@s' %”ÕJ@Y+hðÏ•YwMm¥]vU X´Sbkœ3´@?sgˆ.޷ͦm®ð]}—­Åðtø8œ»Ðæ>w)Ü*¦´Qˆn‰žfu»*äsõ „„Úøµ >­Ÿçs<—ÃÓmý‡®&,ô½¸ce—Pj}^sw‹v×Y%šVa¨èÞæç77ýyh> )Жññ˜ê»–USe«êWa%ì¨ +Å ½«4(˸˴¿†èä¸ 2GeÕÎH»£cV¢ÌÚU3Ë6Ö +oÀî踕®–²·0òg°Ú—²Ø3°Õ^ÖñkùPßÛAÜdŠ~,Žtø€ä‰‚HñS³=®%­¡½åqŠy=ÔUqbZ¿ê1+}R_™Õ÷‚½GŸšÝ<¢]H2¥j5ŸË¡ ¸ƒ ßYfauXzÿ'ëë`Jg«Z‹nT©YvZi­fÔnSªn7¢‹¶,ü¥n•Äv +¹·X:UŸ…š»ïŽˆ¶uW8pS5ÿKÁf¥Ûªñ3à;µè +endstream endobj 1019 0 obj <> endobj 1020 0 obj <>/Border[0 0 0]/Rect[213.12 296.22 276.18 309.72]/Subtype/Link/Type/Annot>> endobj 1021 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1022 0 obj <>stream +hÞÔW[oÛ6~÷¯8ë^ȵfDRW{h§ÛšaEânñP(6íx±å@R–CÅö'ö/wIÝréŠðˆQ<×ï|ü$a=:xu.a]b IB˜Æ (Íh5:šN$H˜­FRA€¿x‘i"´‚D"P0Û´"‚0Ó0[àM C˜Ý.Øñô"‘Âä`òü9¼)¹L…fûu™ïv›b ßµ)WùÂðŸgß¡'í/žaëšwóöæZ ò:‡+A7ý£h±l€¹PR«; dÎzF/˜2.·X~Úeð”ËN}¥ŽS"¥ž[V¼`GÛý ¬ëœÓeíµP7¬}vÕªoƒøΓ‡'WgŽ´ÅuŽ–ò«°ŒVuE¤º bC>‘¡Pòº¤ŽN˜¼~ùjz>`|YGÂÊ•ª;¹3EÝ1_ëµ¼ó9†;jó=¸ t¹yU(-³&O2òþ¦Þì‹| 9rù"/àÒà Ñv‰Š8ê'²%ÿÌUÕ ùÛøgˆ.|ýV›­á&à„ktŽGý-ý¡¢Eœôóˆš<ü1U}(êü=\qE­Ù“¦Ä>)…×^ñ’SÐ_býés¿qc<¨“Òûuï¢WÛP¿7€ +ñÈãYD¨ú£‘ +SDä©,„p^El øP(Ô8:|‰„UèzŠU­[¸„þˆk ñ3 i¦oÉéôä€jqšë[ +Å ‰ +T.†“¤6Åýïx–D½SÏUG8E" +Þ«¡{9„°ÈÂCò™0›ö‡÷k ;ž`mo9ö5=/mì™Ò~ÄV*Ú¨k‹bR%w›úªW:fJ“ð¤88G5uÖ’ÄP"éã·‡¼ Œuˆéu#×GR}Ü4²Ò Ò—¡á(.Iì+N/I½Ål‹j¡ç {NÛq©zÕr³†×C9F¶qÄ­HÁ¾4õ§(c,Ô*3pœ c—†»µIˆ^{‡ì«(ŠFõŠzÑVI–¾±êflHiâ7+Ë9‰ê5©OöI‚—YÇîí]3Î~= ‡ +rR‡èÂ$~ò§ö>AÐ÷à$g8$2TÇ1IçàÜRÙߨH‰ +X«{*²ÕU÷a‰"âQebw¸ØbçˆôB7˜ÜP^°Åþ¶ÀofæNåõÕ9䳿•–ž +endstream endobj 1023 0 obj <> endobj 1024 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1025 0 obj <>stream +hÞìWÛŽÛ6}÷Wð‘B`†‰"û¶Y;Ûm·i°«4Id™¶Õz%Ã’³ÙOê_vx‘dyS'Z-ÖÎœ™9sÄÐzòüꎡu3‘¥T¡XI$(Ú›Éjò"›<ÉCÙjÂ8¢ðƒS)¥‚ÊQv?¡`…ÐX ”pBYŒ²‡É;<›¿D Qèòùå³gèõ>bŠ\¯÷ùý}Y­ÑuÕšý*/Lôköì$üN hÊ“ Êf“)´ÛþL ¦ßî£)K Ç%˜A·õ¡-+Ó8[ól"9I%D$I"áBkH¬(}l.\÷"&<=@ìáBÀ=Ú <ŒU»uŒ÷.òÄ»x“7-Š¦’¤øÍn™Û3Ž[³ô'¨´G«ˆ$8,û),Ú›°ˆû#e „*$·Œú›ÚF§Þ §`k_û'ËCÑ¢_¢T†M0Ù„ýê*l‰qPQ‹5ç2íÀŽãS°ÿ@LÃnŠÄXO9eþ4A‘$#Ô¿üð¯/ýïï/mîDJ˜Íír'ú*d¡ +ÿYW/¶[t[®¡\m¶ƒblЭi ô¦°õö!ânš%é3ôVÊ]oI ”3\ e*xÆÕ¥´QRàЊ€r\îMÕ6J¤7Å͉ŽHMìk¸¨Ue¿ „#ô,õk,t¦B¨w%P×ÝÎåª4 j7Uc°ñ!²ÿ÷ à zå¶gšHoö­Ô¥cq†·ÇuqŠÏ×`miV@]KTVÎpˆ! `@{êdÈñQôøÅÍÏ—?^\ÍïFñv/8 x<åP-êˆYC‡Ãó¦Í[cá#Èêò ˆV>î ²‘hAR›ŒÞ“wܘWË[Îï–Î-@ ^ÃÆ1͘çGYNdbwÃÓÞ/K¦Ž‚0X÷˜{÷21ðÖQ˜ç!‰Ot\í&F£ø§HŽ¦®>ü.°øî±jón]–q¿P-ýd°'6 +3Rœ¸ð8•U ©Ž$îáréßG™¿Æ=–)‘q0Èâøu ¨ ¢teG€ûí™?4庺=lýÅÛrÙ‰Æt&'±ÐG9a!%a(¸é«ììmP~R²`9Iždf6¿»¾zuûæfþöz–}?ÊúõýdÄ´Š¸j5´Ãû¡Y·èX.„¡l-,,@ +ÚŽÁ?À ª\ëE Æ &h^‚©ý“8áìiw¯/.¯_]ü‡Rì#`Cy±A½bË—§LVâS±#¾ 2EôˆÒ4å'5Š¼B ƒš}_®ŽÞJº·Ay‚[Ò‚Cï‚¢ˆá`¡Ù;µFÌÀœZb÷h&=š  ™=á0¨ÂÓäoŠTv>ëÓHËÕ»¶¬«|ëcã䄉™'¯–.‡â­«í£c *š僚bÒ¡º*Œ-ÄÔ¢«C“›ùê4Ö>àô©Œ…œ/ÌOéiækAßY}žõÌL€Fçé¤ð›½ª[3Ú‡÷D<¤u:”âwP™Õ¡*lnÐC ²aaŠúÞîk¢½÷2Œ_ƒêESoMÛƒR™ˆ'øcëÀ§Ÿªç€0Úå{P# 1¶&oº¦¶¸Ñ›æI¡rNTr®P;ÎuÔ}“?šýÌtÜjiu3BšêÁ=žzä˪iM¾<ÅÝ-îÇÍÐÕǃ}fòp­‰ˆ-Š£Ùã݆Ùã=û ·7ïqД„ûÛoj¿pf7¶¼£²KwL»B„féd€Y­ì׆$ÛÃ0m‡ñ‘ÏLð‘@8ÒÇSˆÇº—©ßÉk>Ñi>tNôÅÚ¹ç¼Ï>|"IšÐ¿0¿ è>®•mócÝ—·®~æ:d¡uus›Ü?í»1 @ vcЈ'îBºe2’e_árÿéªÞÑwêé[„I¹;XQÐà]Ý€›'Š¨aüò0t›]^X6+òmqØæ¶o›ˆÙ!F>«U˜„Õ— GrýX²('YR,) äd¢Ó,)†Æò Ý#¼ßga…/_7V¡êà?hu^Ó0ÓDzß¾©šoªæ›ªù«šy6ùS€öÔß +endstream endobj 1026 0 obj <> endobj 1027 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1028 0 obj <>stream +hÞÔY]s›H}ׯèÇf&jÓÝÐÀ¾9¶3;»;e+›ÚJö $kGàxü“ö_îé`¬Ä®™ÚJ•À’è¾}ï¹çž£p²™ütÃɦž)I"?&A¬ˆôI•ÏÖ³·ËÙÉ;N8Y®g\ÿpáqĤ ‘ô™/Èònæcæ‰$Ë 7>Èòaö‰ž_¼#!‹ÉÙÉÙ?’÷•Çc&i¹©Ò»»m±!?M^­Ó,÷þµüv’v§I2猫,Ïgs,¨·Éì<,ý±òæĉ»|$& Á‡AÜ^G&ºEhc\¤uC¼¹bý°_¥úNÐ&_Ù²Õׄ ©ûÚ/îKUvë¾$ìÕç!Î*•ÐpîÞÔǢϿÇ-ÖªJûÉê>kÈ?¼(fœænÉÚíWn3TÆäÊ×ÉBEm¶ƒ`œíÿž$ÞÑU¾~x»ó-³_ÓM^/ÒǼ:Ïëí¦¸¾ÇÛ»üãvÕÜ~¦.ÙÌG@ºY|Ýúç3º-»ñ;e÷,ðÍÎø”ù¡¯ìFùz­ÛfnBúëê+Ö¶Ì׋›KЇyÞ×ÏÒÏžÝ`21zý»^F>ÑS¬Énîïò¢©‰cVZ]0)C^˜ðLtˆì«=­ÝN¶ñøIx@—Ïí.`‘` +pz³Ï³íz›×¤¹M¼ää‹'|Ô}‡úã eæqš“ÛÔ~P¸ä^HJôƤ\•L`FÁ«Bk‡µ'ÁýL O• y¯ÑŠÔÐ}Y#Ì6’˜ÅI[L_¸©VïÓLO¯,Ýe÷»´Ù–EíñÝÀ\øm­$Kb[.s‡Š…èëX ¹èpÜ¢ùB†"ú«‡oÒÔ‹XL7`wßP¹~o‘Úo^¶ X4à[áêlÛjÐûYZ/ù¡gÀÅB7LéᥲàUƽÃù-êš.O³Û!m`PCw(ÇÊ"r; ‹A`þ~sôÎövquö÷ÓŸ.nF•ö£Ž Ÿ“9DîÜ"2ëu§fd©ãè'²(è¥Ì–æ90£Œƒüí>®ŸÓb5\] …ÿgô¢Új'#v£T9)÷P­ þ!éwyZ·ÓzQ»Üõ8»s!X†£^ê½UE>ÈtÑ€~„êºâdÌoÐÅIWÈÉ¥ÏÚ4ÜC1žô¶° ŽäÔMžÂÖ J)}&u€K„CnèÛ•o¸ Z”jäV´ÙXå°%‡¨MПé´;ù „I†GnÓꇑp‚_"ybUvú'ªÓŒ‹PC‡²8¨úÆ4*xÎÇLÁý¸^.ö×D’é3(Tœ¾L"¸J¾×*ÁH@[á} ®Ö/­_:n— õ"CÈ΄´Œƒ~ZŒIRBF‹”äWrhwáC¹s“îÏÛ-ª)íÔ GÌEl,«rЈYì›ÂÌÓØí|‰j{Áò©³•Î|0 ÀypŸ^í5Ûh&o•´‘…vÜ›4óŠ)†´ìA·FˆvBÐ*Ã6;¤ÃYød ´CÑw֩˃#R ×ï3bKô8V Áä$½ü°XŒØ8[ä6(͈|»)ÊJDz­»ä ycÂ+ò0è¼âܹŽ±Y´C,Ó?¬úDp ˆF# ^œf?xô4 çÇ<"ÇJTgLeß>ï _e ;_xÔšI8ó éÓ×ü˜1ÓÕ MuO {§ÕA®½ý„0„±~Éižæ¯ss™á5¥½Ÿ÷߶ ßá5â—­1é3â—Ø Î"ñ$ÓÏX‹xž‘Âìù ŸÅòy©Œ êLÔ¡Ò¦Cµag_£gÿB8c8%6¨kUd|DE*–¨Wžª9f*¢—ÉþÑã~Q•{ý\Äü~à#—Ó>¤»+†‘âtÂNï’ØÜõ•ºV:ºò©NGÓJ“`é,Y;X þÝ2]NZV!&uúÅrö_è†V +endstream endobj 1029 0 obj <> endobj 1030 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1031 0 obj <>stream +hÞÔWÑrÛ¸}×Wàì® A²o‰£¤ÛõÚžXÙm'Û†¢e52©é:þ¤þåž €¤HËŽ“î¶ÓɌɈäÅÅ9÷ž{ Ùzöâí¥dëff4K”E©a:dûrv5{µœ½x#™dË«™T,Ä?\dš­X¢C*¶¼™…ˆ"Â(ÓlYà&”[ÞÍ>ð׋7,);yqòÝwìbÈTh^¯÷ùÍͦZ³ª¶Ü_åEücùW¬¤ÝJ±Ðl.…41[¾žÍ–)ÜBÿ²æ2Šo†½«oÛMU66Öb93J$;2"6L(eQ†‘ۛݮ}ˆ zAÛ‡ØpGfAÈFi·wJLõ)ªØ¥xš7- æF$üýn•Óâm¹r7lC׌Wˆ¹í'ÿÒ¾¸ö/)w eŒ­j£è?Rº%í>J2|[ÄÚ×îÉê¶hÙÏA’ +ÉK²ñëÕ•_ ÄX¨BÂZ)“t`GÑì3™eÁ<Ïæ*”î6f†3Ö]ŸùŸ¿úÿ¼ÿ/q§!‰¹°ãN÷U(}þ±©¾ÜnÙ»ÍåJ}ØÅØ°weS¢75ÕÛ¿¥ñc¹]cúÞJ”í-AyBkð¢IÌÎغLh—!m_ÞWmþ9Xþsöb¹TîóLdÆõ)ÝPˆØQêO+Sø¦jÙª ¿º{µ­‹OùºlNóûrÿ+wàŠ Ps„Ôê¯ñIQWèéß\çû?1/[Æ­ +”Ê"ŒCã–ÙRSó{Äð³üÆ‹]Ÿ,ú0ѱû,¤Oø¯ÝÎq0(ìCÁ/ðºªÑëÛ›²j›qRèn%´Ž]RQf{9!›‹]¨×Ý4:LäƒÕ%¥~¹+‹ÍÕ¦lX{]2ìHK~¨ê"ùžASî®7Å5kk»º$Üã Ô¢Ÿ ”±­Éb_æmiƒí­l¯ÙÇ@Aòù6Pø[Ž+qHƒ;á·Õa¢E–:Xì‰Ñ fg(‘|UZŠQ‘€© )”Rhˆ¦¢@ A¼ûù>ˆQ´åþ$˜G¼p³sßÕ•»ãñ¸ñË°KAv:jŒß·X$X Ë»ú‰]-Ry¿«ïÓ—_¼ѤÝ; Çþê¿J2àJƒŸœÿtq~¶8[NhÖY|ðnŸfÒÑÓ´`‡Š åÔ$W4X]º¼ +™ÌˆüȈn-® ÅX"m0#©9Ü)%Òb Ó4u±A+v·i¯ÝÂs­lâg`|m)Ó%RÔ7»ºBö‚½¬ï{”hÉê+[qcÔQ?@àÙ¨ ïEø÷øãxÔÃϧ-ñß=Ê–Jôý9k¿ùáôôrD¹nùš —§ç˧‚˱ÀGvÐ \½Gÿê°ï/ÿòúü—³QäH$]E:xæ:$ŠÄuïK\KØ˾LVäûX²ÆëÔŠ]*!¯àÏÞWn$Ât`Ñ×K™C·FµÙÚ¨vé³DÄÖgHì†leo*WY‡Û)õIG: ^žŸüøòíâòɶìÌ´²qД‚-§kQo(yØߤ _,Åhº! D4IZ¸Þµú8êjâ0uð×U¾eyµê¼m@^]m©c‹4bg†h4 qÄ• õøiAùU,¯©å5õš”Ž™i‚qþᛩë6ùÁF“óGhÀƒ¹¢âq™…¹ÁÚ_anN ŽøÙ +äïkt +:}`\žÑå˜ÏQÒdÏõ9šdå?ö94 +ŽØ9bËV‹i +¹r#h°;IÓ3×,äýdqz’ 3Ù¯OnxuÎh˜j¶âlIf(I/}MfÞðù²áQðÅÆЪ–y©:žÂÕý§@cçA‚¸äzÈ·Ñ/0=öù}€B$+4§6 "¾ ó¤âŸ ûZ¹kqMùŽ~þ•ûú)¤¢¬·AbF&Ù ímP5é¾HDòÖxè‡ÅßNË‹·g‹±2áŸM E”=t3 +hkYG~ÅÚNg:*Ô>'0‘Ê#⥙ NL®78ãD„Se­1¹Ÿ{g{Êh‚Ë÷p¶ ÷åÐ fe ûTMel:ï¬ëkG»Úé<–î2‡t>ò¼spèw=Å·?1òf³&M®Ê¶‡ˆôyU#Ùªn wDèã‘Øy8kæmÊ%`óùÄv5¹yÍï¨à´õÞ4žáÖ´÷¨,Lí[,H ôà$+0Ž>QÁ踒ØM68ýÀ‰ünvëKNé¿áÙLÿ—ÖaK†‘~¼}{ŽÊ×¥ƒ>¤YïlØž:z©üwÚËñÔךá*58‚îd¢Í1ƒzÝéúÝ z‡ÞˆžðxLý!îæéÃß3`Ì2Jåd:ôÀž ÖËÁ'…‰Žhé¬Úã-!ƒ–ttt"£¦£Ñó¤ŽwfÙÈFSð8à8Œ¿Ñš¹FsE!ú|z¾pýó˜Y³Ã#ÜãÃÏ궜´­RÇŽ ¡Ý8ÿ3èþW·UA À"l·€Π+«ã°ÿ¼sÒW0ôýcSo˶‡³XÅüsw®Ž’#ÂzÙ.ß7PÇ}¹-óÆúŒ>ÛŠ9{ßL±ž+%Ò8>¦¼ñÎd ærñ¹€YØÁ!´#P`•t6½|Olà1Ë|%èÕÅrö›ú0°› +endstream endobj 1032 0 obj <> endobj 1033 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1034 0 obj <>stream +hÞìXÛrÜ6}Ÿ¯À#˜x`\^öM–GÎE–TÖx“”³43âzDN‘Td}Òþåv ‡äŒ$;©T²U[ªB$Ñhœî>}@A6³—o®Ù4³H‘˜'$L"¢8©Íl={µœ½<Dåz&$áð‘ÄLI+θ$ËÛ+Œ‡©"Ë\„dy?û@_/Έf 9}yúí·äªD­6uv{[”ò}Ùšzå&ø×òXI¹•4Sd.˜ˆ4Y¾žÍÁ .“»‘Ú›þ©æ"f’`†¼«îÚ¢4µµXÎt˜Â~"¦#¤JÓ”°0á ÿ\WO¶[ò®Ø@ºb!¶€dlÈ;Ó(N…ùö[ Ü4+ÖU¦¯­XÚÚŠ€Qž x1Š£ÑؼŒq—7H¯Ê6û,ÿ={¹\J7=eiäêhBGL…hëÓòÔZ”-Y™ ¢ëûWÛ*ÿ”mÌyö`êÅçÜìàv»Û”¦ý•:¤o°R8Öýk˜ŸW%xoÞdõ7Ä“Xä\8¤L]`× \ŒûÓ(Zð.BùÚ ‘KqQÛ¡°çA‡jHVv9¢¡…Bïk—ë}V/~>]\-¯Þ\,–£¨@¿J‡é«¥¢M €bØÉ: ­lX²ºˆ­CÖâŠAsÁ‚ÄWú­$©3ŽaÚPÌ!`eJ~à îðSa —OŸ MŸ4v9t°DNÛ{<íMÖÚÄøˆ) À鹓.zªó|ûðØs¿¤ld‚oO´)6e¶%ߢ¬\‘UΖU‹¸ƒ…Ž]‡¨X +±ÛŒµHç€õçÙU˜²ŠÞXGX!ð 5R“M ì8P¨…î`At '¶Øô½¸«á3Ê;ÊÈIN€bmÁ'—à(Òö›öÉuzùöêòbq1N-Íd¼¯WÛGè â^ñ6™Ö#nº>¿\^ŒHW’_aãìûóóÇlØŽö%F®Þ_÷úò§‹‘ ÌÈ.ø¡ þ ŒÅȦ`±ücÅH­Al{ȱÏäx_¬ É>š¾TVX¾1fG`“ÆårÈøY_ò&ƒÔ7æßB®…˜Š8-f:>RÖ\Ú|r•T”.}†`hÌÁ£ÉóêüòôÇ“7‹ëIò¨TOê e@MŒ,§kÍ•dRöu°S:áªTr@‰ECª][TXò™ƒºK8æR 7ÊÒG宀X²©ÊÜ ™Õ‘,Q$Ž¦Bq4FÀ´ÚÆH{¾Ò}< ¤³ ÈA#kñh@ªÚÞ( S8ª¬IhFJ›À¬r’Å_!¼T"PF<+¼š^yÁíÝß_y)%¼&ý¿øêÄ—„Cu”àZ6ÚB“_`5¢Ÿ<dªÔ`ÎÆÞfßY·æ Ç°S&ô O¸-¶ÛdmždRiˆócØCÕP”yI6)#Øʨ±¸L?lQjJ:=±êé… ì?L ”˜•ºï7ƒ“¶å‡ØòC§gâ^©a´öM⨃%Mm:&xÄzO%ËÅÒSÓ­i תmB zñvÛ,‡ãY°`}€JÅ‹ì£LÏO~Y¼›¶òô9M&£ª;4âÁ¦“yRLÔ6'~Ÿ(™yJ}‘Á¾‘7ñ#ØÎCÎø¨¡ö‰ª´ÐaÃ%£Ec&FWNÄÌ1-£¬4îºe§»Úñvjr¨h'ï%ÝÞ¢eœš ©Ë÷™VH÷˜%‰6/—žR1ph Èõ êbÄ!<žpÈX¶ìU‰ep¿$ï?û8 T‹R^µŒö<J9Ñcɱÿä*“Žš|0ü>‹ÈIß­ ;HdøŒLÁ^ ¤ Íuìô/ªÖLÀ—ò˜&vÉLÿ±Ô×weŽ¸“{ G€<¯n-è“‚™Ѐ¨?6ÕÖ´=,¥ ¤¦ŸÝG„”…ñ‘)ïôê.«àÜÚlMÖ'.5%ï›)ÆÈð‰3<ì k¶{au†?Vp`NŸì(,“­NZ,gÿ`«C $ +endstream endobj 1035 0 obj <> endobj 1036 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1037 0 obj <>stream +hÞÔXÛrÛÈ}çWÌã »cf0¸äM–ig³ZIeÑÙ¤ì<Àäb *ŠVŸ”¿Ì™ @¦nëÍeËU& zºOwŸÓN¶³Wï®8Ù6³X’$LI”ÆD†¤Ö³Íìõröê-'œ,73.Hˆøái¤ ‰ Y(Èr? a……Q&Ér…‹Gdy7ûHß,ÞÅRrúêô»ïÈeð”IZmë|¿ß•[òCÙêz“¯tð÷埱“t;)&Éœ3+²|3›Ã Ùfå®äÁôÏu0ç t3ä}uÛîJÝX[‹å,,‰QÌTL˜Y–¥a¹Øl¸ö!"f"= f´pGfAÈFi»qLô. +å\<Ë›–ó˜%ôÃÍ:7W‚¶zí.ÈÎüf´ ˜¢~ÙO~Q½ºö‹„û ¹B¨2æÎÝMi¢’ ï_â¶êÊ=Yß®Zò— I§Ú›lü~Ué7Cb,T¡ÁZˆ8éÀŽ¢)Øÿ"<Ë‚yÊ"šÍEÈÝ¥"AÌbJH÷ûüŸÿùÒ߯ñþO“;™0n2v¹“}r_…ÿYWOŠ‚¼ßmQ®¦Û€£ò^7½)M½ý37õšué{+¶·bÊ#\ƒ…qxÆÖeb¢ M€ôê¾ló_‚å?f¯–Ká^ÏX»>5Æ„Š™ŒŒ ÓŸ–¦>Ò]Ù’µbº¹{]T«/ùVŸå÷º~»+Š·?Q‡1 á‡é‘Ðtü¼¹ªJ´ö +k®óúijWì6Bd.%,Taìv+LoÓ{ƒKLÏó½ç¼Þg´c"•{-4¯ÐOê8&ÆìÞá78½J´åöv¯Ë¶;…&LJ圊2Ûâð þX_ìF=ý¦‘:”TÈ=«›ØŠBÂæöêF¯v›nH{­ "„"dô>àÀÄc‰€oî®w«kÒVdUë¼Õvñç@˜µª$U­Ü;&W¸bÞÿ.xɲÔÅo¯BñÇ¢¾$>Òµ¶)u¶­inLƒ$9ˆO‚6g¹»}vDÒÝâ] ŒWE3V¤öŠ‡Ý®4ž'­ ¥FŽ’we¡œ ¸­†éuÕûö‡³³«úr€|4ÒSJšð™ì~ï1E Fò°YmÕoKŒ-˜ˆ™Ì›AUZ7?ˆ9°ç=ô «ºÖd¯ÛÜ:Ÿ±(î +y ÁÒ-ÈÆt +YåeYµä³¶›Ï¥`…6ð´ ÅÓÒMÙ_3rRg½G¡hRmlqŒ‘ã!ü? wvò·ÅûzÈ^¦z—­Çô{â–xsLòpĈO¼'Ò¦¶éèéÅO—ç‹óå¤DòB'¾®á +þ6®Î.–Ù˜»"}ÚÈ凫?½¹øù|d'bÉÕ;c§ªÇ¦æë|æ“q »t-þzº¸\^¾;_,ÉÈ>Tl`ÿPhÜl_÷¶ØL¥5žyÖdˆõS¡˜1å¸Òá ‡É’ý@ã)Lçhž®e,%hó*B9pEõ®¸Ñ-BAÎl·ìÊ#Õ +: Õ´P\ü¯Ï.N,íD‡-à n· RU•…ió•FÒ¤4)CÂF©°PÎEÄÒT=x@zCÞRKc©§±ôÑÄdñ¯ÌË1%cFF:=çPZ4ôDL2÷‚‰{?kbiú‘·›OfhxJ8á‹Soš{Ó^2WÓ/DGäA14²B4ͨ¦}‰F6ƒ9†À:ˆÜD ÍvÙõº2¬žÐ;s;Åça5•h_7Ýý&‚ú-lþ÷õEª'ô¸õÝÌ…‘êdÐшƒ”‡”/fÏ2yƒ3knn›kt‘šr­œt]Ÿ†-ùË ^ö–éšÄo”Ð/ÎjÊ’äx¬馮öÖ@[ÝåÀÍhÁ]\áöC‹×‰©y­›Ý¶dd±Ã_µIë0/)K³g$õ÷¢ósé0=pÙo¡÷}§×ü§‡ø…’ÏûÊŠäêÏû™3|–âÔ±¬ ôþ¨Ü'æR€ÿŽ‹´|$=wc+¥úXpœ• +Œûu¬=ªcx\7¢ÃüÐá¦RÏhdªÙ£}ãâ7pšP¿šÔPj½ùKŽ z¦V:yÖäkÕÐ ä.žæÎò_ìø/ò´?’!˜Š^š*ó£:>–qĈc2ŽÍƒ: QçU«''ÄÃ3'ý#Ò @7·åÊ@Jî Ù(íUµ·BáÊuÜÝæ×wŽFŸ›ªÐmG© ûþÒvµäë†>ä&¯pm­ 7ö„­pÂFlŠ’ÍÜ9ÐMÕWØ`’礪Ãr qZWwå³Ovà"G iu¾žÀíÖ~ÛÐĉ¡É€÷¬=Ög܆ÛÿÏßz¸þ3Ìéƒèʇ?øàvôƒOê>ø¤æƒO:úàÓ}æ9:£°àÈÒþÃ࿃ū +endstream endobj 1038 0 obj <> endobj 1039 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1040 0 obj <>stream +hÞÔX[sÚF~çWì£Ô”ö¦•‰MÒ´ÄfŒÒ´“ôAi°Ä®ëŸÔÙsvWWÀÆI“¶ãKH»ç~¾óiYôž¿š0²ØöBAt…Dd“õæ½IïùKFIæ=ÆIpa‘¦‚-p’ÜôB ’Lá&`’$w½÷Þùð%Q4"gÏÏž=#ãÏ"*¼b±Ion–ù‚¼ÎwÙfžN3ÿ·äGÐ$¬&Eé3ÊBE’ó^¢š©½µèw¿Ï4åÞÄ«âv·Ì³­‘5LzJÆàOHUH(q*£ Ö³S–ïÁeÊeë=D"ÌKð¸ŠGl¢x)£Òy´ŒW6rem¥Ûñû!ÕÞÛõ,Å;îí²™½!K¼Æ^îSå¹eoÜ¢ÍôÚ-âö0¾ŠãÆìC‰îKÃþ1Ü‚¬MaßÌn§;ò³¯#ʼ̉Ü:}Eî”AfL¬ 6ç¡.£-e7ÚÇ~?¢Ò‹û<`öV?¤¡GHy=ýò¯/ýÿ +¯~b 3”¹U2W…_×ÔÁjE®– (WlÄÏ ·ä*ÛfÐœëíŸ x˜ÍhÙ™®·47½¢ìƒ qdñÆÜÁòPKª› (t5°^βùÝ‹”¿3¦>‹½Oéš‚Ñ:{c;Jññ=Ø M±ßn¯gvyá£ï.oÃP x¨]j@8Tobë€Îµ‡¢ahKRâ¤(+$+eóTöz£Á¯Ã+?ù½Ö&ì@óÔí¦<ªs„(À¿üp~ùb7Õ”]d»KwÙM–ï¾'w×Ëé5`!R’ÝufÔûœ«†"U9·n ¶.ÈGŸËÆMyÆ®錤[ò1Ã5kl6³QèsE9¸h®[¶áO“7~¡'Ë|Wƒ>⃕ÏQ<¼Od¨†Âb˦‘Ò¸isc¶ïŠ5Ye>̦KOÂ%óáߊsë°•ÕTf³²)Û.9%ƒÜgwOŠäȽú|1º<ûiðj8郈›Ý%*á¡$q¸Q)ìçßã1‘,·FG_*“IPŒûŠõnYä銤ù¬ÌÛíÖ#0\µ§²AŒ ¯E¾Bˆ˜f6Ã3¬!ÃUâLN`)ÞîrÜ_ª6IÕ.©ú¤FTiÕ ØS2[â&—ÝÄÚm¬Eºa6Ô¡Óµ²É}¾Kÿ4[’„Û=Ñ¡åÇxcS Ÿ +èíQiâ‡nï`ù¡g†ö…ñ|o§2<žwùÏ2ŠSj€|ûvO‹ˆõÖ]§›ïÊð„u)ò¸„eÃóÞ[!³öî‘•„ÞEzã>9*Ë ë6Æ|ð[áh±1Ä,ÇJƒ  é-n ´í– ¡Ö,›$€U`‘±¦°¨5èxYt®h¿sd~ÞÄ¡‹åà#Œ½(”Òƒ4À÷íԷÕã +¬µÈÕZdkmR|êQgøq*&á.”.§ŒíÓ0œÜ0s?ùHR»ÉŒK° +Ÿ3+ÀT|ÔGKáEäMðC®¨âwˆ‰H5âÿÅll$‰ýÂä#t*­pÚ`‡¢š7ÄDeÛEÖLƒåܤ‚»Tp›Š»ël“b`Œ:°Wñ;Ø̨ɋ¢ÖzÓ3ê°©ØׂL!ì¤[BUl0LMD•å§Àùƒ¿ë' „àŽ—艺?“¹´…|uQêÉã­I`)ŽÍÕLŸ4ë=šÈ:üå} q¸…%}PÎû=žbºk;tµžÆS>o¤•c™‹Ç¹ +ö…fÝo’S€ sÕá-aœ×Œ,™]Å4:$Fæ>‰h˜Éâ¦Ð8õÁ/‚†/6a°¿Œ0pÍN$ †/LÌ ½ÿ2Yàµ8².} ºPŽÃ€7éÅ¢ ±¥ 1Ò…¸E +2Ýdêš8Ķö˜«=sÆ’á‹O Lñš4Øfè’ÇF|´ÕÞ€QØ ck¤(ƒOý%Õç_Ødîc¼€ïó‚ñhp6|³?}d·;P‘rŠâëU œAÔ9­aŽ8O÷ŽAL¤C’zdw1”û.8æÇ£Ÿÿ}aúòà™Â1¡â¡SŠCßz_p8ÑϤë8Ëxø8áë«\%¯£ŽvÞ=̨YÛa*p¼|””‰zìy“Ë—rÀ[H¢u+ÏO”€‹%X¯êŠæÌH£¤ðQõ=<©d•¢ŠÚj!ºHIyôü·úð.” +endstream endobj 1041 0 obj <> endobj 1042 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1043 0 obj <>stream +hÞäYÛrÛ6}×Wì#Ù„nɾ9Ž“^Ûc3̓Óš¢,¶éé:ù¤þeï–d;—f:̘ `»ç,׳o.\W3%  !ÈP °Éf‹ÙËxöâ5ñbÆ8Pü‡Dp%”C¼žQœ…P ˆSlP&!¾›]:¯Ž^ƒOB8|qøìœm\á”×›d½Î‹kø¹¨³Í"I3÷÷ø´$¬%ŸðaʇøÕÌà µ™Ô¶D?õûë±€p'Çi༼­ó"«Ì\GñLq(\‘"¾ÂEE@dH©´k3Ë5qÅ„ËÑGDwæ#.¸ƒ#2 D€eØ®];Æ;¹o])óq©Bqýƒ1ûR¿ +dáø3lâ\›Ò~™ß¦5üæ!aNÖLY5öÊ¢1†c ¢kÎUЂ-åì¿E‘ë…D:‘Ç)³M\E”Ð>ÿøî]ÿ»“w?õÞ‰€0½s´Ý;ÑE!k¢ðÛºz°ZÁy~áªó°vcçY•an +o¹\àËlNÚÄlr+à&·J›\=Åàw¨½˜%éµQ½,'^fàÆ gø–3xUºŸsv|pxôöè$¶ýzn‰üA_ÙP– uª:©³uVÔWPÞÔyY$+HŠ9¤IWÜVz>¦sô™Z̳9”ÅêþI3X¸< ¡SºøgY’.áf…œgŒL=üõàÍÑÅ.tÖw4AØQxŒᣣœ° +z['eÌp$–[¢#núÿña^Ü©îr §«,-×c G7¼s2hP†òª*WYÝaRd.÷µÁ&"rÔo7ºÙ#¸I6¥{«,©2—ù¥ÄÅ¥!¿«¦{œ“Ð÷·ê’]ü<[ܽ\•©Þ¤ê¬ÝáLMñÐqÓ_^Tu–̧ ›Qž ¼·ôv/>uòÑ ‰cnÇD6P¨t“ÉWbR'Sc.E¬Ç®r¬ÓÏœn³zÖ9…67MKψA«B½)fN‹ïe‡†/†«‹üä\£8éXÆÍA>@3ýQî˨ÍýáÆ7jdd?Ô¢_A2Ù&ôÎoB†öí¢9¯ A<‡»eŽY‹KÓã1®ä4u̸Ⱥ§kô«ÏqLe LeO¯ß@ƒ?5â.SØ"pPØ–f ŒêÅ–Çc!¥£/Ø–å»VȃÞU«Îó1o„×CP9“ÑÝüÎáéÛ³Ó“-„uú¦œ½»øéÕéû“Ñ8Ioÿ)âa}ú2°eSÔ9;8>8žøÄäË:V”–žC¹Oì‰P¨îcéê\†‹Ó×1Œ,†$j-^:]`W­¦U7Yš/r”-#VJ‹•²be¢¹QEÓ\¡6Ü—ãH§HŸ+SXÑò÷ˆ–Ç%RÈ=Nµ;ð nyÃìS¼É¾tA|Ïb@¨øõ·ž[¦š;Ä)À#à×Åýñé³W«Ì´žÀcß½ÊjRÓ;û¯¡#n“׶Û_ë»?¾ °Uƒ t„VÓÊ|Kª¿ ÊÑçÝ 6@× lW `TÐ-WÿÃ[ñÐ-A_PŒ® B⸔{o Lç/»%`÷žwgú¶îÊ1ææÖ]½ë½çºkœÿàØKIB±Ò—ÊT_‘ë#GZ¢Ïbße²ù¡Mõ Á£6Q}RzŒë)g}s¢ɺù?‚ÎyGÖJl˜b ˆË;Šgÿ0D¾8 +endstream endobj 1044 0 obj <> endobj 1045 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1046 0 obj <>stream +hÞÜXMsÛ6½ëWàH6B$HôæØNšÖ±5¶Ò’h ²ØR¤‡¤kç'õ_v)’’lO’N'Ϙ0?»owß>˜‘›ÉË7WŒÜÔ)H$$L$©ôd5y5Ÿ¼|Í#óÕ„qÀ\XSÁI,p2ßL°BƒP 2_À"`!™ßO>z'§¯IDrüòøÅ 2«|–Pá•7UºÙdÅ y[4ºZ¥ íÿ>ÿvv§ˆ +2e”ɈÌO&S0ˆÛ,ìJlM¨ü)‹)÷20C.Ë»&+tmlÎ'Q¨ I#I(J)BÃ$B™ä4–ís™òpðA@„ywx(ƒ‚"ð0LÚàÑ3ÞùÈ#ëãYZ7ÄŸJ{ïo—)®¸×è¥] ¯Ê+|yîµwî¥j±v/q{ X± +ÉñÆìM‰á‡±‚ïg°[UiŸ,ï ùÍÊ<íLÖn¿²p›Af V‚͹Œ[´ÃpŒöß„)åOzjÊf—ñ%•!íõù—ÿüÕï×x÷'æNÄ”aæ‚6w¢«Bæªðßuõ(ÏÉevåŠØø Š±&—ºÖÐœëí/Ÿ ¸©—´íL×[17½%Q!xQƲG4¦.%FØ€W”ãÍÝFMí¸DZCPÜœ +a˜)Ê”¶·(7·çéFûó?ú´ÃT´E2èØÌá]“QïêV/²U¦kÒ¬5A[e;“û¬Y“ûu¶0.pN¡‘Œ¹ ËIlm­IS’´®ËE–6Ú˜¹ö9órŸ{åÂç÷gz£}&=J\<-0‚ªÄbcVOS™ ›ë8ë³Ô«ûW9Ød + «@ VÚX¼z–ó å â ,JA”€˜Ñã6ÀZƒ EI; +¦ÔíO;ò04 I×$mɬˆ!Šz ¯½ÙÙÑñé»Óóù(?NH…¹ïlP;ÞñÅ»ÙÅùÁ :[rSf3R7 ôG“¼5Ì24 ¨”ý‚..ûáG¯0Ýæ'LaÐæPøÐ=̵zÊC*¡Äp¶udk±îM®,–¶ Òm…QrTø,‚núLà)W¦t†‚ìùò¤Ç&ë?ŽÐ¢ Zª¿óNž’C‡Ö¥”ºÙ?vËp‹ˆÆ:á»7{õóÉŇóÆê ïPTô6zÒŸC®x³£ËùÛ£³Ñþ¬·?m=‡¦ßÀ•²šc4æϯˆ'šv»zW¯‡ŸóíçE<½V“EZkmö˜‚’l£—LG¼µ£Û%Yù<ÆÎòáWEt +½:ê> ÝǺ擶ù²bO›Àc%Æ ·È¼:»8þõèÍéÕ!d0íã€(™¯õ1˜ˆ=Üï¿°.§0ãU8fÇÛg˜„°M‚ùL²š”·MViNÒbÙæä®°Ñ$¨k¡z–X7È–EŽT´Ð67 +s£äF™Ü(—5 FPãÉ8ÿ¬-á‰É£?…ð¼Òƒß©ðCyìOƒ­hOvj?sƒ/Ì:`v¾-Ðx»×Õç¢IÌó9·Ÿ@Òžp†ˆáÁ Æ$nhÂè˜8¾ôì FT`,;äàv7~?yVòÑÉàäL,ÊN xyV?¡Â*äª-ÜÈV~zÆ„”Bæ£Îw `&U¿*?ù<ó? #­q[em‚LJ²"CzüR¯Ë»|Ù’É–/{Ã$j½huVQ6HtdSV˜i`¾a&ÝÀÃúŒ¶­¾INtQgÍçAÄ’†ƒ2» Û¸ouµo‘öœr»¶`cìˆQXb„„;†d¾‡N-÷FȽp/À[,Ó +Ø\çyí³îRû‘GN¡tÕâ”`ŠFœ» 3ÿD<_>)߶ªòq…ô¤âß/ø÷)j¿•l|\¡õÝx†zD¥píÑ_¡j¾DmÅL8f“V½ìÑ‹®“x/p7=ž/#ñà…¼?ß‘’S.P~ :IbI2¦IDCž ]dOÊ4VHC¶GЄÂ1¾s}ó$A®HvƒwÄQüïѸ3gðI >‰Ã'yDfK«¾PewÿJ`ã³:Š3Zk”»í–Ýë¼lô¸ øžÙfàƒ÷‚,è«»b°ƒ‚Ès@$…QŘ`@š=ô~]—¹n:L +íóÈ{°£MÑ0ºSvL¤U $]é\§µ¶ç}êO ¿¯w‹Ò팻^ð­Ú*ËYZ)1¨Æ­Üw1Ï@\êt9Fܼûuz˜µ> endobj 1048 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1049 0 obj <>stream +hÞäX]wÛ¸}ׯÀ#Ø]!@€ä¾9Ž³Ý6‰ube÷!ÛZ‚l¶éCRuò“ú/;€AI^ïºß=>Ǥ$rˆ¹3÷Î9¹›½úþ†“»v¦%IãŒ$™&2&™mf¯—³Wo9ád¹™qAbøƒÏR&IeÌbA–»Y QXœä’,Wpó„,gŸé›«·D±Œ\¾ºüæ²h"ž1I뻦ØíÊêŽüPu¦Ù+ýiùx’tORL’9g\+²|3›C@|ÌÊÉC蟚hÎS&h aÈÇzß••im¬«åL –jÈH3¥ 2ÏsÂ’,Ž—›M×þ3‘? x´?B¹!'ðc’õ¹ãÂÄ°D¡ÜßmG¢¹f)ýô°.ðLÐÎ¬Ý )ñ˜Ó*bŠúËÞû‹šÕ½¿H¸c̤*µÀœ»/SÌ>Is¸§«©Ý/ëýª#?FiÆ85>dëŸWWþaP UŒX ¡Óì$™‚ý7Âó<šg,¡ù\ÄÜ*i¦)!ýñù‡û¥ÿ½Á‡X;™2Ž•‹ûÚÉ¡ ¹ïÂîR/¶[ò±¼ƒvEv‡flÉGÓà¦Ä~ûk$$|iÖ¬'¦çV*,·4ÊZêTtÆö¥Æ,c—àÈŠ„v¼ÛïLÕµ^J´ Í-˜”VHP¡ÞHwÅ—7¦jËîk´üóAw8\ªXÆI/gÜ=éæÁ¬ÊMiZÒÝAÊ]” +ûþíÈÚ…$q_øívo×ÃljYûÈB»È&â1¤À"ÿÉ¢—UÙ•Å–Ÿ¢C &cür>àãg {ÌÐ(ì߉”`ÌÞtyZ@Ê Ò"9I Ôš¹° +^E N ýJêªçØ ­Õ”+ƒ-pªEý‚]ƾC€jÙtqqØBŠ‰t€Ôƒ~†dJ´;È·Ü=ħ§zÚ}4<Ÿ~ü!£³ky°ÔéRŽ ¡—×ï×~*ú9  zj-Ü%~sý6¼]Ëà=ÛãIJVT7aÔ9(ÍQÛ<£~5l‹O7¿sýÓ‡I-Ó€mÜOŸlƒÈ´dä¾5ƒÊ¬aÀ÷J“Ž#¥ý¸ö’ÓS€FÄÆ’VZÒJOZiI‹Ü’”Ù‘jéLhq(I=Äù9A%SEÕ± +%5ñ20$KÊ–Ô]YW  }î.S>Ê´‰ôÃôp Ê°EyX7n3Ô•ì/Š¡ù »@øp¨Ì•y 2§neåÔ$ ¤>-'¯ß]_þñâû«›s­4îî\Ò¡X0²çhü€å`A„ +‹îvó$ú‹½g¹î¦Ü- ö‚x‚ÛÁ8Ç]±›ñBº_,kiêF=fz˜éðõ¢hpnýLälKˆ7—ÀÚu½¿ÝšÐ–Aßp÷Y*‡Êgºƒ‘MaágaY<‡UƒÁá“íç(´/cç U†Æ;‡þAÏ1ÜÿÇ~;ý±ÛZ½Üo/÷/´Ù"ɘNz“­&&[Äh±a¿l-6ŠZìœö¾½_טCN#tÙÕ¦ZŽ¹÷ôsÿÊËya­G¶ß“”êc+=JòéñxÎÙ¨ß6û¶ivÎ}jø*ͶÌdÊe®yD¨ÞE #_é ]$“³2UÞp?ä0^uØ!ÑÇ +hØÕO5*Ù4õî0(à¶4™è=> ó èê²5‘ÄÈ„²+ü°í ѳRÃB]˜µiË»Š‘«niŽj SêùÅ»™Ó†3É^âìæI|üúôÅfóeÁO÷göŸ²àýlyÎâ‚.ˆwXÐ Ë܃¯Ð”œŒÕûZ5uz§]­BµVήõ¬á‡†ÅG^VY‹¦<ñÔ †¸>žµÏòg~9²eÎ'‡[ +КtÔÏ/ÚIÈgõa`Å“4ªä/9jí Ö ÷l_âøáyÖ=KàAð—ÞFs[#ájd+Ö×èXž¸PG={®@I O“òLl3¬"ƒáÞÍ9ØÜ>Ô™î'Å „-ëáúï ú€ìf_­[g®nͪÞaÎ÷÷å‹sÛÖ[Ó }ZÁ€Wô‹{y”³$*<žô#ð¡hZöÆlMÑÚm›r¯H%ŸÚãÍì‚ÔÑ€%ßûŽÐñ;ñX…68æÇà¶($Ñv¦XÛÊÕröwÁnŒ +endstream endobj 1050 0 obj <> endobj 1051 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1052 0 obj <>stream +hÞìY]w›F}ׯØG8 ›ý`è›ã8iZ'ö‰•ö!í‘MƒÁGà:é?ê¿ìÌî‚!E®“´=íñ9F03;sçÎÝ5'—³ÇÏ/8¹¬gZ’ˆÅ$Œ5‘Œ¬³Ùjöd>{üŒNæ«„Á|ð8¢RH2Ê™_ÏX¡,L$™/à‚ñÌïfo½§'ψ¢19~|üÍ7ä|íó˜J¯º\§××yyI^”M¶^¥‹Ìÿeþ=x’Ö“¢’œr­Èüé,ƒèfa¯äÆôOk?à^fÈëê¶Éˬ6¶Næ3&°M•&TÈ$I cÆB»2-h¤ÛïaÉT„ƒï!#˜i¾„wùHL_†q»xŒLt1 +ec–MúÁŸÿ:{<Ÿ ûzBmû/ЄÒT†hûÓðÔ[//²Ì|í­îžÕâ}z™ÀF×YÙœÃíÛújYÝ•?{?ûŽ Úè$Mb ¹BÒ3î\0e],3kÛÌ{ŸúP-ïZ•ÑúR@vêGãÎç!ܽ+‡Œ8H‡Š—ŽÀq­)¸ÐÚÜÐ"ö'ÐbMRâL)k +¶ha›žŸŸ¼5£å~÷ÿ0á¤IJоX¬6™Ò +ý0xG á. ƒ»B¥Ô¤Øܯg¾ÆÔ<@Ýh‚®AEoå®ÍÜp mžv Má Ô%ó-qÀ¶tÞ—ÊЧŸ²/ï—ï²–w“°CÕÑßP: m¢*TÛ r:Bâ¦v¸qÛœ¨¹ c·äð{°œ‰ÚŽê¿"»€¥MÆ*b$"`sˆ€m¹:Õl½ªšlÜ3bB`;íå} €”¯nË&ÜåEù^T×&ãl@±øµûÇê]]YÓ%¥= ¼Ûy†ÑĬeí–ü&]×@éë¬È`XØ]2õ,ySo#UÐx»™ÃÍâ[™2T@F’ôS‚~6ÃGXò€ÔM–.Çù6Ï>L´ 'ÝyÍ!GBpÂ>H±ñ8‰‘fs»_~QµqsP+€êCeWtŒuñ¿v»¯v‹¶#žnÊ +·ÞqÐH¸)nªnMf‡0”ŸôXt£fÛe&! ³ú‡lœâ­g#4g……‡ú üßJÒ×fG¥`÷>¶êŒAÆÆ}št{àN$î8j +©Š>xèâz‰©‡)ù@½Æ>›^“ŸS¯±©Ø3“*mú” Oƒ’¤×°}öÔÍ/z Z$cYVïÐeÉF—Eá7ðx·DC.pÌ%nŸÃFÓp5­ÑðpHýWEÚÔÿfÿ‰*íd>ûS€à³*¥ +endstream endobj 1053 0 obj <> endobj 1054 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1055 0 obj <>stream +hÞìX]oÛ6}÷¯à#µÎŒHŠ¤¸·4u»4 uE‘ƒbÓŽVYÊ,yI~Òþå.II–ä&-¶Û° @EKÔý8¼÷Ü£P´š¼º hUM$G*ŒQKÄC´1“åäy29xIEÉrB +á\h¬gHñ„ %ëIVHiŽ’9,B¡ävr‰_Ì^"Abttpôì:Û4&—«Mº^gÅ +}WÔf³Lç&ø)ùÏËù‡teª³ØhmŠn_”Ëú=~4äԆƉŽ}tne­SÀ"©µï£ÞÁÂxËÕÐ.`º”ÂÊ hð,ˆBˆÁ”‘ç¡ø~áUY q‡ˆu‡;æ†r›Nu”[B¬PŠ+Â[p…ð¥îð;;=~÷êôÄØú‹Û•TÈ»’r/ ªNk‡A³¬¾êOîõÆQLt´ïè|v” ¼0ùMÖ‰hpá½”{faêÏįک4 +eÚØ÷äΰ{¡ã?&Ý+æ×m¶1 t ÙŽƒšrK¸q¥F‘¾›ââ]¾®Mñ×C[D1ƽcao¾>;=™ ¡ŒIÜÏ€ï‚xÐ… ¿üîøøbt*®¼û–“ú=ǧɞ¥Áyù´]Lp¸‹”(ÖO]öÎ÷ÍÅ·/NߎXi±Sîfrm†€žâOUÕ œµ)ðmÄÅXœˆ¶À|z»›§º2h[Añ¬Ë±6(#RîåÚ,a××ðZYÌ Z EÀdÒù5¬íiMhÔ3Ñ5MËÚpRh…®÷掖= ËCe¸1#‚hhó#‡ðüøôè‡ÃW³áƒN{$*Ç9žÚAC¼¡†SA‚°¦ºÂÇ'emFõÄ>JKMU}‡½Üó:•s›Álº2órí`÷á쪶=3å3¨¼ªÊÜÔ6дÀwux¤Æ€÷ðF7éF ²Ü¤• ¨ ‰evÐvoª1ÐS”/öê¨×¶íèðC©ÌïíLèƒùhݡ)ßYQÕ&] ñ6»§ÜrÕ€ûC}bŠFQluÿpŠúHa\ú`›XßãF ÛV`†V.¿˜¸©ëƒ“ÝÛº#¡ðew‰‹íúgªø¦ÌíåÞëú]t _¥êq@Ÿ©@ž2¥hß/Zn¯róDÚž†l{=¦¼£f!]ø.¢A {ÀŒnŠ¿äïþ¾»@‰ôu +¸rb¤ Êcx_\4Æjk{®ÅáºqaDÚM=;@p;=LôN \ºOÆc|qcæÙ2Ýáš' oŠ×WÐåÝøº@U¶€O4j»cÌÔ»p‰™]}6‡±|v:KdWK}`»Æiß”K—N¬iØK'EcùØå‘uH6]î}¥òVŽÕ%Z™´°‰ÔÆZ V¦\›Úªdà5Ð}ZÃâ 瑺ÏÍ]b;ÚZ#fô€ÖµrLAøÇÚ™„äï¦U—¹É½iP™¡àµÇv‡Ò» Žæ+”vsó~p³ ЙéT-Ý)¸fYW|@Ú‘˜ºå´¯ÆfeƒƒVwÏø{(-VyÀÝ ø¬×]‰<¬¼Y¤‰íÇHtÇŸ=í 0ÆÀ¬(¬U«ÂCpaïT ÂA{`àð(ðýãÒ›±'ÝýïÓݾCž„÷ÿDx«'Ýý7êî}Eø™b2º/?ú'•'Eøeá,™ü!ÀØ–dù +endstream endobj 1056 0 obj <> endobj 1057 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1058 0 obj <>stream +hÞìX[s›F~ׯØG˜„ »ËÛ7ÇQÒ´òelÒL¦ét0ZÉ´$ÕöOê¿ìÙ hÁŠâ´Ót2õxÆ``Ïõ;ß9Ç-'Ï^]´l&1CI˜¢( ÑFN“çÙäÙK‚ÊBQ?p!i‚E qHQ¶ž„ ‡‘`(+à&$Ên&?{/¦/Ç):~vüä :ßø$ÅÌ«—›|½.«%z]µr³È éÿ’ýš˜ÑÄ1CÁ$æ({1 @ RS˜;¶ývã$ÁÔ+A º¨·mYÉFËšf ð'ÆŒ“Ø!ËDy€WðÊr»–UÛ K&±‘覘1M%Š£4¶½j»þõC½ºküì7—xÒˆ›X†}m¡f(K½Ë²(¥lP{-Qåâm}â­¯€êR2—PaM9&"ÜÃCk£Â5‰÷®x·+c·AÜ&è—VŽÍ;+À»[ \éÏve¬½¡IÒ»“ +:î䨑·²*¤ñ£ìCI)N9w¤uc=´5ZÊ +2žàÔË[ º@,e½–­Â|ÜùBÀ'ØBñà×[éJfáí„Èù,\û,pˆj½‚/òyšûðkµ’+#šbÄ8ÚP•¶[”ß–žXð)²ï­ZÌÀ>":d@oЖÖ”·~P¿#èÛ¹Oá·\*뀗õ3iž¡¼Z®|¦@û=F:ìëÔÀ_ßApNp¢ +@ùBìÏåâæùª.|" Ï—Ѐ̵*î]È¢¶ÖA]qªåƒX tݼmNusMUkUØ°R,0áwëÄ ÷bzœ 0Hq´ƒ¦¢<Ô´€U±MKHÀF©qáŸb9°#ÉAULð}Ê œ UgƒÁ +^>à +»ÔVž`{c` u«÷©¡3œÈ€£¡·í¡ªî¾žªÛë¯çÕgU½÷LtT$¶”×v+RÔ­H‡6$îæñm":ËwœÌÝXÿ=Í×ûw Ý2Çúõ‡‡©úgÔpŸË‘lHŠºÞÌË*7Ã5g|W†Äîp¶&%B¶Ð„-<3˜ CØî*DÌ*ôÙŸÒÇq7üó}Ã? A,_ÄSó¿êfÕh>³ÐR§ÿÇéÿqúÿ¦ÿäqøÿÚÿS_ÿßéšMþ`CÈìI +endstream endobj 1059 0 obj <> endobj 1060 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1061 0 obj <>stream +hÞÔWËrÛ6Ýë+°&ŒAréøU·Nš±”fátASÌF"=$]GŸÔ¿ìŃi«±šLÓéxƤà>Ï98ZMŽ.f­š‰–(f R‰F’¡ÚL–“×óÉÑ9GÍ—.ƒ?xð$¦R X2Êšo& ¬P¦R‰æ9¼0®ÐüqrƒOÏÎQDtrtòêzWžP‰«Um6E¹B—ekêe–òÛü'ð$½§ˆJ4å”ëÍO'S0hÝäþMîL¨É”ÇTàÌ ëê¡-JÓ8[gó‰4Ö‘¦‘FTÈ4MU cÊçæÒuƒ1j4±¤„„ûr¤®)‚A•t¹ÛÀD¢ˆ|ˆWYÓ"2Õ4Æïï™}¸5 ÿ‚ +ûLqIh„ô7aRß…IÂ? U©…ýÁÃGn³Wq +ëßÁ+ت+?²xÈ[ô+‰ʱ &›à¯*ƒ3hŒ+³µBÇ]±•zZì?OS2M¨ÂéT0î_#D4Õ¡îyøã?Ÿúÿ5Þÿ´½“1å¶s¬ëìQÈ +ÿÝP×kt]¬®–‡-áÆ]›Æ7¥ÅÛDHøh´#fàV,·4Ê´&êXtÆá2¶Y2› žmË6ûLæ¿OŽæsá—§4Õž§öÅšˆ4•Êš°üt2uƒ‹²E C4^>¾^Wù§lešk“·±¯-eàßrƒY¦ŸNÜçè\{?‚*æ<Á(eÓÖ0þ¼Géd.!˜Å܌섩¤1½xèƒ;ÔÕöû¹ú|÷ý²zÑÕGâÍìƒK3Ûh‡í;} ;ÅZ=lLÙ6a· 1€þ *eb¶ð<êzç@wñ{rØÚ(Æ«C™¿ÎsX+÷­ušôv€ˆ%v/žÝ›¼X¦AíAÙmS­ZƒòªªE™µ®T¶íD†ñÞ öa}µt&n‰`Àú5±ûQ•X›bK-´2ÕÆ´VlK[’ÚzÑ5RÒ4ñ½to¶ŒS­u™ê‰ƒÆ·óAb¼‚}к7DÐ7W™Û©ßdͧñAc„«7}‚,õ¾ÂQƒÛ£F3NÏÇ™®3"™së¾b·f¨éºªÑ‚x’4PR±;ëüSqS<²Ç±—Åí*Û†*hü"wƒm"pÀ'ÕÚ>ªÚ'Õ‡ Ç G‡’Vjeûý¼õa©Ô!ÃEub =bÄ¢zž “ý ùœÖšï‰ E U¤°-v ûÐ +°‰ñ'"aûÈL=híIÍ~›ÝgyAl™åê h:Œ‡ƒ· 5ñXÍP°"†m @{w|rùöbT5EÅ€ó*¸°ðt5kÚ¬5¶/hI€Ò2UЬzGíé¡=´£¸jLÑYóêgñqm¹Àö²ao<N—=s…[ƒ*çb¨©‚Š¤/L9=›]^¼½~uöáòtþãÈ<9ž)ðT¦4p?¹¤t×æTï +”g%º5¨ àZ8#\¸ÅO2Üž–DÄöºDàŸM¢vœ”ÖÞI¬ ••}e%TvõRTAY “>¤–]Ë…ò¥Ü%T€Þß·EUfk”•>Ÿ©€KŠöÞÜú~ÜàP‹‡ÊP•ë-üˇPbsM W“åwƒtI‰G’ù&^h‹Òamœ«Êg}õËÉÏÇg³' ù&ý NËQs4Ué ªE{N1`®ØØ(~Ž¼æ9ó¨;Τüï%ãßšö‘p2mŒE ýÖ˶å\0{ Zøg¥¥^Œ·ÞÁ”+Hî¢ÁnP9íë ÞÜe÷À^¢ßß’þ`Rû˜ +endstream endobj 1062 0 obj <> endobj 1063 0 obj <>/Border[0 0 0]/Rect[274.8 610.26 382.68 623.76]/Subtype/Link/Type/Annot>> endobj 1064 0 obj <>/Border[0 0 0]/Rect[205.62 166.26 281.58 179.76]/Subtype/Link/Type/Annot>> endobj 1065 0 obj <> endobj 1066 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1067 0 obj <>stream +hÞÔXÛ’ÛÆ}çWÌ##ÌÀ£vµr”’%Õ.m?ìæK¹ˆIb €Þè;âŸÈ_¦{.¸‘TdWR©”J zºOwŸ>3Œl¯¾»cdÛ.´ Yš™k"RÒ˜Åfqµ\¼zË#ËÍ‚q’Â?¸°<£‚“L¤4åd¹_¤`…¦²d¹‚›”I²|YÜGonÞEsrýêú›oȧ&f9Q½mÊý¾:lÉ»CgšM¹2ñ_—•„[IQAF™Vdùf‘€A\fåîÄ`ú§&NXFyTr[»ê`Zkëf¹P²€x4UšP.Š¢ Tæi*]dšÓL‡ß!dÊåäw@öGˆ¸Ç£°(~”y=ã½\9ß—mGâDÓ,úáy]â:³v7¤Âkbª"ÿØ÷þ¡fõäâîš2± +Íñó_r _f¼ÿ nÁVS»_ÖÇUG~Œ³œ²Èx“­_¯>øÅ 3«Áæ\gm)çhÿ“°¢ˆ“œÊ¨HxÊÜ­"±¦:"$\¿þò?ôÿ×xÿs'2Ê0siÈè«ù*üïºúz·#·Õʱ‹cKnMk 9ÖÛ¯1ð¥YÓЙ¾·2n{K£œ’MîÈ&Ç>Ó7Z*=ÍpO3WÇ–\U¹~*›r\3 ¨²ÊÀ_hRr´ÄЮµ©=l ©.Ÿ Ž3¨xk½%£òâH#µ¤$HJ~Qå-h®ÔžTá:).]ýpwõnyýç×·wñòoƒ£@IÅø\ã…ÏhÛ•Ù›CG º9]*¢øà ¦ø4°üœÈxSÍ™¸÷F2çMï ©ó˱jÌš”‡5Y•òhȱ…Ïõa÷þxªçŒÊTlˆ¡h«ƒÇsSí æSE”¼a䨨FÆlHûùЕ‡'71Ïú¯ã„s¸îá +—²«€ïÊGH˜ƒ)qKcP=ߥ¢gîÌÕ¨6—%« …üe2MO2ù-i!ÿ˜U\á+î·Ð:<“0O¡eh––f4Ï ,RÀê\äœj|\ÏO*Ý·…vžK¬ó‡úð¼¶Ï¿¿yû +Áy_¶Çrë^LxAµÕ +¾9 tÝŸ%c³d§CkT„ÔÚu_C.Ç5¨¨Ð«ÕДéŽX¸˜­í¬ArZ°ÑB.…é$qT²ÖW‡£lCÚãjeÚvsÜQ÷bà- µÅßÞÕ(!h†èÏŠfm6/nÈ6&»¬?á*•ªQþ˜ÝOf«ò@@Ó@Á¥N"½\¬ã å,ë#Ιœ0èHX%” ʆåîl—Úw–Kî^*h¡ŒÂTR¥ö q ø}T¥¬M¬£ N‘|HV¸¤(ÃÞÀó«úzk/Às +XèÀŠœó"Tµr]p=A E`/¸^?9zRAg‹ó!ž¦}œ/Qd^ýv½†©$`„lb;õ.Å +bÚ9àÜùêw&L4È5OÉ ð@ŒcÜ=›Uµ© 8°ÅŸËª!õ†¬»hÏ.ÖæW ›BkʲwW“ÖZúLcžÂ›Çþ´ä±êZòòdž]!ÄŒ½{VºÊ=lcȾ|~v+Ô¥DéìpðímšzOjˆ§! ªá 5cæ¹>èÊDz…“à39ê–~n&0¢E1 „Qì3˜È>f܆žHH$Ô 7 ²]íd@c?tØù^…0k×õÑb(£¨%ò˱îÜ Ú—AQü'0ú,#ê=u ØRéK1@„ ¼ÛÀˆ5˜aÌ6¬ÂÀYæÒä’žÛXœ»0ós°¹á]@05P|Ã0Æ´‘Ò2 ’³71¦ÙlؘíqW6¡è„C3ÆŽ¾Å)EäsŒYˆê£ÃX8Œ3ÄøèÁ…ª³öhs‘ÇrsýÜîÊö‰¶öršsõ¥ôDcÊ5˜ÂFü ä«x:«™1ü炇A†›ä‘Û9å—ÝÎκm“eëmÕ–ÃÚìª}Õg‚zB:§¿9ÔC>0ûu½†rC2»8»ØHxÌ`¹ûu’!×Î+jEù}{ýñûO?Ü|XNÐÃæPkVØ}^L5Ÿ>™žÖÎ|RŸ½y”Ƕk@ð\]<á@°áµú_*wS%m 2…6bêU9–Ûs!­)sBVÇÆ€¿ ¦³Þ©¬ß«·{=É_»ÁL œñ»R˜R=Ö‹ç¡ž~C+(—A:iâ:G½œ)”T[ÌNå2Ïaó +ªZƒ*ÉÝÖ0P ÿ*¥Z‘{b:QÊ^g(‚³s"ØÞÊÇiÍ9% ›iVÌ¥°Í}tR·|žÆ¯­…¡JÖ²±Âa¯‹AB¾%~ÕÙº4ðÿ¥êž’úTÓTÌS7(ß;0Õ]byð*ìSpÁI”‰PTòy)¡õ›Ãú’íÔ¢xF]¤¹>pÎ^ÜuâÇ*Xs­’Ò,uà°ô‚À ˸ "¬R¿Àên­‚òìòÌÑòã!1¶æZ3q+·ÜL€yÁOŠBfY/BbóCÐÀÕát£ñäùÈ™‘|¿½ùîÝÇÓ¢‘3uÉ,?ÝÖžV„%Õ!VÕ¯£æëÌ+æ>µÛÕîá¦+žµVÝè(!‘ö0ÁÀ†šÏ™9è"æÕõ¾nL`AKèÈí7%° +ÄO‚¨ê&~=âý)ŬRAL9 GBs*5ÉAñEâZci$æ=1[¤õ\ꟲö¤ÝÜ^4(¡ äÌpP`e÷³3„;¥/Ø‘3ǦBÕÖÀœƒ Ð+`Dýÿ`ÿãÒ† +endstream endobj 1068 0 obj <> endobj 1069 0 obj <> endobj 1070 0 obj <> endobj 1071 0 obj <> endobj 1072 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1073 0 obj <>stream +hÞÔXÛnÛF}×Wì#‰Fî…KnßœØ)Z´‰a« Š¤(j%³°H•¤âø;ÚŸè_vf/¼Hv’-Š"@D‹»³s9ç̬Ù.ž~uÍȶ[(A²$'2WD$¤5‹ÍâÙjñô#Œ¬6 ÆIÿàƒåœd"¡ '«Ý"+4‘ZU  “du·x_¼ )ÍÉó§Ï¿ø‚\¶1Ë©ˆšm[ìvU½%_×½i7EiâŸVßÀI”RA–Œ2•’Õùb ñ˜Ò=‰Ñôë6^²Œò¨3äª9ôUm:këbµPœf +"R4U„r¡µ&TæI"]l6\û"¦\Î^BBp°/!à!Ú&Ax)ó;:Æyê\ü¶èz/Í¢ï÷ëŸxÔ›µ{ ~ꨎiùeßùEmyãq÷™°BŠãÌ)0z™iØ `«mÜ›õ¡ìÉq–So²óç5µ? +cS•`®9WYH¶”ÇÉþƒ0­ãeNe¤—¨ãÖ‹üÇ22¤ ¾¤ÎŠ¤)øiÍLrpyõêòâjõãì@ÈÃC,Ë=‡º¾èÍjC61ÏhŽØË{²2Ôí ¹w`6ÒÑ^6ØózÚÈ.¶@;ÄK ЂFqè dÑèîÛf’ˆ¼þÞ…¶DÌ1Û³1;h±õͼ3ýPSDÆÔ*ç£ROÜbCRÞDs°)R èˆÌ‰·kZCªz n¿„HX8ØÁ'ò±¯šúÉœ9RjìÌ +Ä ¦ æšsþ ø…"(¡yÔBÔJÀ¥O@ +éAÛaƒµ­)L"GáéÕ•Ñu(vçéb +¤ŠJ¨úW¬‚÷£U‹»vÃkñiÚ1€™âÇævùí´ xÈF§¸Æ=@ƨ°±Ø(Ú0X4u1‚¼èX?˜îp,oæ„‚qBœ*™1‰ªc™O†™gCºCYš®ÛnéL'5¹‹Þ>AÒÓ4Ç|¹Ê39ëÚlî®ûF…EÔ{…oó¨v/»ù`9«}*Ø×aâU´]Œ9 ÇÈ£mÑSŠ§c>ž¿úîòÕË‹—«ëYb€FaÇ@> K»Ìt¦Dª‹'´ŸT“¥ <ˉ;ëú¾î‹vËjÅݸ²C*>àœšq×]¹pª@ËÖ&V&²hû±û¼õe XÜΆ Nºç »Ç¹§‚NËD«Tš(g»l5̘‘ë½£g…žà'zÏ!0-ä a*äMŸÁB@Q¶GPWïN‚ÀÂ{cO@WúYPvÕX‡“yézoÊjSWõ:Õä Óøÿî\3@Ÿ),„2[šrlç€V Ú´Ò!ɺ“Ž;ƒ¤'ŸÒ”`G¸} FpK=rkÖ +[õuõQ|„I‚I¨Ç8†ºÓ %NÉ?.¦ì¢ø 7G–e.ª¯7SøÍôŽžœ‚+Óa) ‚‡­ò\+R +«B´`މ׌ss„2*&}š ÷©:R7½ ¨+v0ùtîÈœ¦Ùí€H–û±×e(n®…ŵ˜ãzD¦LæéÍ1ò1Ž!„YÍôɆ•ˆ à +Ì<ë'n†v§Jñ8¤waã¤QIlT*êŽ|ÒiÊÏ/^¼þùÙÙùÏçg«³¹ê&€“–Q”ødøó˜íÄãìØ6Èïû¦ZÃ÷ Ž.¦ÇI %U2Ø)ÞãU™q–Ét*¯¶áÆÿ:tÕª‡:@´2ÌÁ@j§‚@6>ÉŸ¿›¢÷ªggÚ …èêi>‚t(3s;{JV7“RWG2ņ +"ãe 5¿ª¸WÔkR5LÁN`\•izücÒ-·aè¦Ùþ67uiÔjlúï6ý$øì•+d2hWþÀävò«¨Ø}Ì¥½€ÀäÉ Ïýದÿʤ6¦$hŒ½è(œõÌúŒŒÍµÄÃ¥h&çË O×¢õ=/èÿèCiöý‘ÃD9Ep9\½3ÕöæXƒóé5æÆ+< +‰‰96êû;+ðz²­¡®kŠW|ÓØFÞ¹#Q?ø_pÄ®…ÃÞ4•ùGðæss3¹õ×@:Œ"Ö?RL¨Ãi1áŒäèÒ,Ý¢ˆúûÆŸ V®Ê +endstream endobj 1074 0 obj <> endobj 1075 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1076 0 obj <>stream +hÞÔXÛrœF}߯˜Ç!ñŽæ~s$9å”»äµã””Ì¢]R,È\¢è“ò—éžXIv¹T)U-¬úrN÷éA6‹£ß +²©"†‡D‡QœTéâjñÃjqôRAVW ! ‡?8ˆÐ0%‰QœqIV»+ŒëH‘U'\h²ºY\ГӗÄg!9>:þþ{ò¦òDÈ-7U¼Ûeņ¼*š´ºŠ“Ôû}õxRΓÏY +&Ÿ¬NK0ˆnw¦ö¦­¼¥0LÒ Ìó²m²"­­­ÓÕÂ×ä0? Lª(ŠÓ!çÚeHf‚þwH™I=ùA@”ý2ðˆ, +uØ'‘É!Fé»Ïâº!Þ2`†¾»^Çx&i“®Ý ÉðÑÂc>í.û¹»¨J¶ÝEÒ¹ð!WHü"ºjL_›î§`«*Ý/ë6iÈ{Ï„Lд3YwþÊ¢sÌX¬8‚-e`z´µž£ý7Qä-C¦i´”\¸SŸx (!ýñËO~éÿ×øð¹S† dŽ÷Ü©¡ +EW…ß6ÔyNγ ”+6bã (Æšœ§u +Í©°Þþô¤‚¦kÖwf×[FÚÞ +@Q¸00ÁHhl]Ì’c‚ôímÑÄy«?G«•t·G, +\Ÿâ šð¦4šÀþ´:uA³¢!ëÔ èÕÍq¹».‹´h.©Ã•qð}Á±ËOàê¤, ¸|Wß‘N²ç’—2r40îóÀy(°Ÿé®Ó·!<Éjw5Ç+é3Œ±P 5v;Šöküï¬ÿºA  Õ, +Å"á›Ã(H¯b/ŒÔúÿ4ó‚å›ð.D?žûU‘¶U‚‡ôÉP¨ô7­åä°l ¿÷,™æ¶òçžcë»­?ÌÜjÐ|j÷™µŠÓÂøÑØõWxüíãDý—<_Û‚ÏÒÍ,ÃBéß—´à°-èiÖë²ý˜§Ó4“"8$ùÆÖX¶Áö9$y{œ{ˆ"î?b©U¶á6™-üâR¥é¹üîR`ÙUÇJoçâls +–€M»Ù¬§aÁJ!™R~–u¦ŸœÕ;`jŒ…^VÑ__7YYÄ9‰+g4Û¸!õušdWhsßß=>z4KkwO³MIÒk;ù˜âÖéhv&ök&ïv×~åY§W°M®I½-Û| ·’4O“WNX8›/4§‡!†½©[€ã<¿%é§6ƒ!¨aÆ|ä6£ò€É ò"÷ãí6Ö_ÖG,»9Icr Ì+3—Ó¬lkðn½ÀÎƢȟoÕC¼PBè«Ïy@ =‡lœ¢é{Ç¥ÇÈ[ËËm×~ßZãtÉüòîìl’ 4òȸ+Ä&Ûe•}Y=T›6àRfà–q¥Aߢ…,Þ°Œ)Fã<†G•Žn؉CÔ%ãê'%E¼KIyEb²³8JûÄ3 ø‚–ë4'=xYaoͳ•g`ñ‰q’prë êGÙ”ø¥´ yØ12 á¾¾™øÚíC“ €J¼ÛàÓÎ,n¼Guéw b ‚|æaÈäf›%[‚$èk‘X@¦)xÀðï*Þ»‰× 1!UƒüÊŒ §U +rV<†‚di§!á=Í9Læ%`{‹Ûv ÏU“þê¬a™q<¾0S9qi`‘8hÑE¯%‘˜7Ú²Óô;zÛA])Úzð“!‡|`h):êDÇŽ?Àäÿ«^Wˆ¯úLj^±–ð úZ¢ø¤“à»:xʵãï°]|8ÌÛú¾&žÞõoÄ?˼íbð8—‚}ä=ñ{¼1‹±j•ðyÐã* •/’>Ýë‘°WNu¯`dï ÃÁå}ïðSg Ïfy›>Ÿ¾gQ({Ê÷ï/ú‰Ò§ 0` *Wž ÁX z`2‡#¾\¸X`*›çsHàQÇØv–bÈñë÷§çDB¦„?W©á}ÊDØìhwÂ&Ä(‡ÐÍÌyÛÐs3ß];«Û ËZÈ®íó2‰±†@òÖVùÈ5J¸†LhÓÔ(“šÚ¹®á¡>*²‹“ªô@Â4 +¦NÉ«†ì_²sÀ7ïô!‰‹¢Ä …ì¬éÀ™Æç•%z€ ăéÀYÂW·M¹ƒ8¨”2¯IYýôåÀe·ˆdø¦Íì Mš¬·Xí ×ÚøÍt¤€Q3¯è—¯>œž<=’úþî‡u蜥A`x'€3ÄÁ IEÑŒ1Pàìœ+ëßz¶¶K眜Iìß’¦7g/ŽŸŒ's°põ‚ÝÓôÌñ`B(tÕ¡8faæ$'Þ/4{¶ò6b0|‹n-Ûf ‡fÿRê“eñ +endstream endobj 1077 0 obj <> endobj 1078 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[425.58 591.24 549 604.74]/Subtype/Link/Type/Annot>> endobj 1079 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 577.26 254.7 591.24]/Subtype/Link/Type/Annot>> endobj 1080 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1081 0 obj <>stream +hÞÔYÛŽÜÆ}߯èG^¶ØݼúMY­ ²$H#'Á:ôLÏ,c9 9Ù(¿ÿ„ÿ2§º›×]9H‚ @r‡du]N:M v¸zñÝ'ÁÝU¢Xf,ʦBÖê«ýÕï6W/^ &Øf%$ ñ'‘¥\I–ª‡’mŽW!¬ð0ÊÛlqŠˆm®î¼W·¯YÌ3vóâæ›o؇ÖW^sh‹ã±¬ìMÝëv_lµÿçÍï±’²+Å\±@p‘Älóê*€AZfk¯Ôdú­ˆ”K¯„ö±9÷e­;cëvs•Hž&ˆ(áq¸Tyž3eaÙØL¸æ&"æ2ZÜDBèen"à1¹IBÎp3ʆØÉ19º(cëâÛ¢ë™$<õ>Ÿv]I¯×;{ÁJ:ç^íóØs}ïj·÷î!iÏ¡ˆªJ$ý!ÜôS¥9Þÿ€KØj{gwÞöì?͸ð´3Ù¹õšÚ-†Â˜T…”k)“tHv­“ý+yî¼<¡°—1óžxŒ çß~úŸ?úÿk|ü“j§R.¨ráP;5¢P8þw]}YUìcy\©{_Œû¨;ÞT„·¿úRáG½ãCcºÞJ¥é­„2qM²æ<˜HÉólÎ3 R|^×ý¹{ß–ºîýÍ_&IyšÇ61ág4@$óÐ{ê˦.*V´‡óX_ô¬;ém¹7Þ‚]9e×Ò]äÖR©;¼£YCL$‰‰`¥ «¬Ù›;Æ Z—‡q¼&512†1çm›ã©©a³OƇ/̆Ûrcd +Éf ‹¸ÑËö‘qºHÌ£¬oXy¨›V÷²ãæÖBd-"ärá-ržeãŠwÞ~öðÀV¹:ëo—ü`“¹ŸÞ2 âZsÓ žódr|ËÖˆ9¸>æ¦X@ñ 1Ì—ƒe}ffâkƒ´´êC\]š¤®­-8|!!íã@ŽLèå„Gê7ãäzĉL×#wÜ¡ØUîËí=Ûéžä +yèi ÁÊ=+Î}s)lÙ©²|apÅkB FF¹ó°‘1Á}¯'0pó³TçžÖ§¹°¦V¾ÅCPÙR °Z­í +,_2T2`Õ2”KùÎQZSó%CÉ ?S÷|]/ƒFëC4uõÅåð›õä”j3‘yuQ“ûsÅîu½,Ù³iÆ$\ÔÚ¬|ç*¤wÇ⬛:ø»,:¨´ “ÌÓ ™¶ÖV™ž68÷…¸$$V#œ°g¶°êŠ£fzU Í°¹Ú­â‹0ס"»Yë¾ç×D s,9Æ·½`N÷VÅ®ÆJÆ…M/¶g{€ ³û³nv3ùÌŸiã:h¢Å’Ò&ÍY›¡V÷ækPHé+\mÍè»_mhÀ!³†£X¶Šõëó»o_ÞܾZx ' ˜ñƒŽ“vËWЈ³zQ,Þl¢ðæ ·kðjÝô¶=í‹+, d>ã%šØ–—"bT¢˜¸}tCª/ã¼zói³ˆ5™xæ‚:¾ónæÄ\°Ó½¯Ḇ/]¹%ém:OLe¿ûÝl‚ýhd95‘ ~½fe?´5²ÊÃ@j2sòÀŒšmS×zkçê©¡Ì(x_Qbvp؆;ÇÆI=Ÿ]J¸m;;δ¹#¹Ñœë†lßýè_³î EPt“{&õ ^e¶/«J·l««ª³c ˆãBÏTUЧŽôÝͬÀÊ;½mΧŠ>ˆnÍd`]ÚdØ^¤ëÒ¾»Ý¼ýZuWH^·%„t¼àQô¨¬Áì«Çü“HâP’ôCþª²#M<$.ŠVû¡lý…Ô0li©ÜGo’Ç”²sÕ3 >¨ÎÆ0’—?©Ôï ýÀ|Ö&»%õ©;$Ç¢ŽL/µeqÅJ!R˜ÐtD¯àÃ3‘9#`èšÑ·h@@Ï÷`_¯ÛæÍ÷oÞ}÷lÙ–"yÝ“Us@3º±”¯7­ÁCÅZ‰ÄN“˜,j×Ó颧/e$\}Sô¶xû © ©p®ð×&Ûk­F2Õúˉ–CÎ0WP$v½BÌEZú‰tZî}¬&ƒ¶n™»jèç·`H+¼úV£2ô–ûnƒ³ø’´ÆiÓšßñÔ’É,ý¢Y_šÿ·¿­XSËtÉuö æÄ;G’E×´]WÿT>ºýø,PÖÌ»@ÊAךxÐM;ö“m‘/ƒ\•s]1¢?›µ: +eR,LŠ±Í¥¯e]s·3ÆÈ;-'KÉF`¥ØŽµºèhz!¤ÛÍÕ?,ÓOZ +endstream endobj 1082 0 obj <> endobj 1083 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1084 0 obj <>stream +hÞÔXÛ²œ¸}ï¯Ð£˜1²$„€y›ø’rÊc»ì');˜V÷!iàè9s>iþ2{ëBݧƓ²“JõÐHÚ÷µ×FÃæñŸß r6:!ωÊ5I8éÍf¿ùÓvóø¹ ‚l÷! ‡\Dž±D’,áŒK²m6Na\ ÙVpÃ…"Û»ÍúôÙs’²œ9Khwè˦©ÛyÑŽ¦ß—•‰þ±ý HJœ¤”%$Lè”lŸnb8ÅTî.9ý×>ŠEÆ$­áò¶;uk{Ö³í&UØ£Yª “IQ„©œså,Ó’e:¼“™T‹÷àtHb_‚Å“? +ë…‚ÀK•ãQ39é(S§ãËrIk–ÑŸow%ÞI:š»!5^ ÚF,¥~ÙO~Q_ÝøEÒ]¹HÁÖDK|þO櫬€ýoàÎê;÷fwªFò>Êr&¨ñG^^×zaë+ŽÎ–RgÁÛJ­½ýEÅ9S´ˆ%î6%‘fš®_~ùŸ/ýÿ=|zÄØ%9b—LY(|~[U<ÉÛú銅8F’q oÍ` 8Ì·_"™ÀŸfÇBeúÚʤ­- ˆŠëŒ1ð^gz†/!­q¢ð‰9–ÿŠ¤‚d†,W€-)É0".HxªAŒÐÔí0šrGº=)[x²šÀ’¹¤ÕS2óB_QZ!§áoxYËH™º˜• +uh/uúµDÿýšèØoûVî|Ý×6ŒíxM:p´\\1°,Cm®Z¾ëNŸŽfi¼šyp¦Ë•]ðX·¶Ýïúz¶÷¶FµÍàv-O“dšYû1Z@Þ‚\(l +Ã=ü=⮢¾½,UâØ“$5¨ÙÏ ¬EΡ—tÀwÚ×ëæ…L ;ž‚yšÎÚЊÆÑÚ n4#Rtvs”‹ª;âÜZ¸o+ÄïÌXÌŽ 7Ýé¸CbbŽ¦rd‰Ö•c4‚%é•Îlû¢¥5Çã=Aô ò®‚–Ø¡Ö¢î"Šúj ¾p+ælYã- øHKr QO°HNëî4ïC#…Ö_¬©ÓY_i™Ädóä1”œ³¹‰YšÙ#FÞ…†kÕLC~)uÉj^ýüòåõ†» ¬Þ&Š^rÔ |2ä[Ô[ ä'—ÍS©QÚÀ` uIbò"] ödÒúF6‘kêLsÙdH[6Æ’bÒX¯J;Ñó%ûû@»9’àJËF 9ÖŸú(X"Ñ—pT‡CR¶Lƒè!ÒËúq¶  +UÑ"¤:µ)¸²‹»3œæùkÕBûr±ÂþRÀJT™ÜÝÔÕ {;š#7‡¬Ø$ ÐéµT¾ˆy–ÐUdgH¥­3æp`k¿žÔÆ#Jþ@){’½N[iÜNl1Ëjó§aµes}R‘-ÁÅ™Iâ\‹"²b]v±G÷;Û¨5W Ð_œçFH4‡ûY].ˆ0¸)ýC•9Ï4 crÀ¯XjᲬ+ù ªØÅï¡"Fêp*âeÀ}ýüw#o«$>ŒA!ðgÛ1}œA¶ÂDIpô< f-æ‹€0Ì8.ù~Õ™>-f%•ç“Äô}¤a‚Ãœt<™–ŸÄŒsÄÏŸçB{ V‚°Ð)0wÂ`ÓŽ^Ç#\ñÛÙxZd{øaíÉtf«YŠ‹!üý³· ‡ä0ù¥kš>.pÍöy‡kBÌlÈ]Åî¦ÄOžÏâÚ©DÏÔ?nH_ôÇ®*1ƒ~Ÿ@Ç“[p†Ð1x¡ê$µ=^á8«`¶mʪï"0i‚–SòÂÏÝ|]-*„ÛÃCU¶m‡t…4›¥íÙÚ}·QèH$ùlÄ>]ŠV(Ýq ]ïm¿³Sáâ¯@UJ¹«±Ç¢‹°qˆ>Oßžþ-ÀÔ˜a¯ +endstream endobj 1085 0 obj <> endobj 1086 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1087 0 obj <>stream +hÞÔYÛnãF}×Wôc{Øݼæ-;ã ¼pœÁX“ÉÂÙ†jÉÜP¤ÀK ïí_nU_(’’íl‚`1€IIìêªS§NUs8Ù¯Þ|Çɾ[Å’$AJÂ4&2 ­ZíV۬޼焓ÍnÅ à\xš0)H"²9¬°Â‚0“dSÀMÀC²y\ÝÓwWïIÄRòöÍÛo¾!Z§LÒfßæ‡CYïÉuÝ«v—Êûçæï°“4;ELŸ3GdónåƒAܦ0wòdúsëùÉë-)òºnzò«"Æh’â-ùÕäü Ôr}:P¢ŒRçê”ľi*Ýpמ¤h†ÓÁã´ÇÝÈÁl¥7³ºÒ‘#xÎwa}/ñ­ŠÇ‘i¹aZéüEDR‡´Ç^o“äèÁ|²LÓ‡›ïÞþey:W^×:\šÖ& @E'-Šc“°ä$g´–r™­*÷$ÃO¸¤ÍÐ „¯àx*1æ§Û?Î9‹“3`· ,E?_® Lô ½Á.DՆ秞ptH´R¦Kò¼»¾ÛÌbOúta¬¾§o§zž“ãƒ'èO]YàÌ®%|—ÏÇ~?é|¿èyLÒ¯IÙ;]7F881©-ZÝ¢Š¦®Uaúñ±1yÇv!I[|`;ü´çInß=Ž'‚¢öCŸiP˜ZõÝ/ÞštLywrÏuø䙡òžîʪR-)TUu¦™­anKél +ª*¿ÏŽø»ƒ–¶­*šáXaIú4°ÌlìŽ%g²p{µ¹y-¹ "ÏrÛ“FYë音0<˪?yã2}Ý}s_âÀðUe‡£½Ã- —ç¨tùzvƒÝª4ãVAk–zªF̆ª'¨¼ãÕ -zÙÊ9áU¦9 þ±·ÄšÃ©0gy<Ò5¨ÝÔÖæÜã‹Éã„QFAÏ(¼tzîÁ{‚/Âjzv{=q›ë®o¿1oóÙzY“U³‡b4£ä ”QDm i=˜±%Pˆ +‡PÐfSÓɬ¦Oˆ$ç#£yŸI X¼WX„˜7›øµ{I ÅáSýtÄÝ Cœ;õš3Æ\”%Ýc2è1ðÇÌr0“·ÄÞ5øu  PH3°ÿæ÷­‚Ìàª5qJ£K#±kiM«Ï‰‡c«E&5ò uLúRÿ§ ¾Àwhfb‰~S{~L÷À# +há=óåWPåÓÝÕlj²TÞSöªVH˜Ez=.éyrc®˜â#ûÓI­C¦4Ä\C §c wÍa<i#—Ç;Í¢ JNe[Òª¼Ãæ]mVÿ``OeÁ +endstream endobj 1088 0 obj <> endobj 1089 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1090 0 obj <>stream +hÞìW[s›F~ׯØÇebÖ{SÇnÒIâLLÛ»!™V à$þIý—={–];M§—ÉxF¬Ìî¹í9ß÷‰¡õâøû †ÖíB ÑÉX#AQS,V‹ïÒÅñC ¥«ãˆÂiò¾ ÖFã(6`!°Ó-\.äð±SUuçÌMS0Õ‘ê`£Ü3½õª› 0Qãô¬ÐÀÄO¹ÇŒÐï +á³KÀ·U—}vûÓ”»PíØÜ,”Ô ÁL¬uré£ 4x…=ü + bè“1ðbK?ÇgzhKjÝÀ[B•C-¼)|†C0œhË~Ÿ÷ŽÜ¨)ð³/póWwð=®·îV‡g£ý3‡P–ˆ/rØX6ÐÀs\%÷æ§u}I!»z7­#È ÅÆp¯‚I›LÈ@ê^Ãî›å?¥*`R×7f`Ú¾Ÿ}  —`Œ…òLï³oz¸Îq ÓTÈ> ûÖÜÜÏø¼ q¢oÁ½›àO8ß—q8rÀ»`1F¹h,#y¤¹Øy¹*1 še[ùÎ.¯ /€ãø³CIdôOuEµlѪ©·Ö€)òrÅòã,L‘… ÈÍh!0\FCŽ,–Cº¨X®!ÆzeM¿†ŸÛ,ý,)l$‡ÏþÞï×$B è\¾”A³Q +8¡ç GâpŸ–‚Öó͸›ìx›pŽ càGéŸy±3Í”užx…´¢lJ¼=ß–Ê6m>™*šû·U¼Ë±‘¥§¹À¸S¹ÃcÐTNRx3žDEÔ“t#ž'Ü£ÙŸE¤‡ßŸr®ò¼âq:oˆf"ôœNÂF–;vހʩQ9ÈÄKl5èaUÁ\âxé1Ò ½XÇ㙼5öºQ>Qv€_£'ùA­!b%Ajp ªs¦4 å- Pä +ÿÁÁ€1(78÷Mr> endobj 1092 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1093 0 obj <>stream +hÞìXÛnÛF}×WLû´LÌõ^xQô!±“¦…‹‰Ò ì¢`¨•ÄF¢ ’ªmô‹ú—Ù]’¢¤´A/( +T̹œË™™³3’°œœñF²™$R1…hš€P›Ébòt69.AÂl1‘ +þáENS®¤Zp¡`¶™”ÂE”i˜¸2‚ÙÝäš]>{1ŸÂÅùÅãÇðªä”k¶]ÖùfSVKø²jM½È ü0û +5i§)æBÉeÃìr¢@RS¸•D[¡L¹b%Š×Û][V¦±²žÍ&‰âi‚%Y¯áu¹Ät¥:l‰ÉØÀkÓ¬MMùös 4Þ4sÞ¦¯­TÙÚJPŽ¹FólêèÆ®p{’F<ÈFˆ˜<ä$››ÅÝÅvs»­LÕ˜ùzÌ~8e`/’¥HW$,ôle1K’Äaf‰…R‰¥<=ÅN”æS5 .’ÁŽ×/ßΞ½xrõr¤é,‹÷^èÕ¥^4mÞš ÚÎa¶2êÐTÿ}ÒëKÑù}P6°½mË­U™òLì½(eKæ^¬ò5äÕŠ¼‚wv™Ã¶Z?8‹C…T䘻çÑ ÊSɶ* ,ä̶þ«ÁäÅ +Š.|¼sߧÒ“æj8 ÒÁý7U›ßƒu~6SnƳÄq4-0Ø1&Ž¶Ç”7£@3Jô}n‚„Lœ„Ý0W_ˆ½²ü(ˆí/'öE‡vâô) «Ÿr»ð\³É vY6tiS½•1W2ɺ·¼YìÌŠÆRB¢÷Õ^³b[áiR i«¼~Ôa”t)¢”ÊŽlØå³êŠNö€ùa„ÓoÕKtIcÑíéßCîOb-¸ÿxCn‡±ö;Ôš§Sç|<òÞUvaW9äìÓ•'@冰Øé?bXç¦ÕC ^Œ½]1*hç@s2âÙÖ¯±Ÿ¡–néP6ö›1»Büˆ7H#*Åõ–:¨ÚãxÈËQùAˆs J);P\á k<³ë VhR¨©à»r×Ùa3ã¤ÁÀqÍG¶æ“®æ±uˆ°æ1ÒêGÑûaþ¿ÔGé~ZÞ<ÝC’Ç c—ó£®±#17›³¾çkàÙ}¾¹]›*¶]Ø;;dçŒöÈÐñµ C.£LÄ °5Q ž;ìŽ3"‡îi,—Ì*€fÕí Ü•ŒÀ(½ z E÷ãI¯º6í®®@~ÖýŒñ›³ÒC +endstream endobj 1094 0 obj <> endobj 1095 0 obj <>/Border[0 0 0]/Rect[63 165.24 108.3 178.74]/Subtype/Link/Type/Annot>> endobj 1096 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1097 0 obj <>stream +hÞÔWÛnÛF}×W øD:Öz/¼"ȃ+ɉSÅ5l¦MC­dé’TÈW´?Ñ¿ì ¹Ô5M•EQHÐR{9sÝá³ÞÉÓk³ªç+xnèƒâPêÞ´÷MÜ;9 žö„ŽD0%!Pœq ñ¢Ç…q7R§øÀ… ñûÞ{8:…08zàøÌ·ºñðá?ßúÿ_ý¥Ø©€ Šïb§VY(Lþ»ªžÎçp•Í0]é"ÖŽÀd¬àJW/§¢|ûÕ‘ +'õ„u7ÓÜ­@6wËÇŠ²*6q,Û±Èoo=`eñ,:îºÚpÙTNF’Vðщ6¹ÌéfÛ¦Eéø¶ÎfyOàÆN‹¯ez›ÐôÑѳHæó"½±«ì7]LqÃm‚+%®‰çq£u|´‡öªAËòºƒÀù \ø€×ø®Ìt^o àü®1Wö€J¬•Á'0ÑÓ÷×uRÖƒbqWäg󺺱åÞ‘Á³.¾ýéjt}c#ÀçA ª`[?â´ +O¹°ŽÁž)ù1\àôËñÖ¿ˆXÖ\× Xh¯ÖñÀ¸=ºyn æ“Öåøt0ZǤŸ½Hƒçrò Žf[,n¾Šp"„æ6ñ “ywÃñÌF¾áoÑCU]N–w蜞M*™' m}.áÚc}ó¿Ï©ö´iÓnT‡†/¥Ãó9EÍ<{áŸ~Uø¬ø¼8¿xŠÇÅ1)Õ8¤ñ¾ùóêÓfõõæÖÖ„½¤¬h£ ÒE½ÿ4J[«¤ŸeE.¬u¼)´8ý°”¿®Kd6—eq§Éßõ=ù.%¯Å·Yø­oÉ•w÷0ϪÚzè-CÕÊ#a8meùD@‘ÑC‘¯t2ï ©‚Ø•DFW>{”OVù…³Xn¾qÚRãYªÚT²»ŒzÃqáí8|ë«Ã·¾>|+æ2-P¹Þs9hYæÀ4L¹ãäaËÉC¢£HáXrAïȆ¼†ŽË yIu…ràË Ð»rÅ·×ÌQD´ƒÒ +¥L Œo5¬²åÜ𞘸l™x ;7šzF†Ë<äÅ Oáë÷pt}þôbKÅüv ðP˜Z[ÕI­è'¤È¶bC‡Éð"oMš¸êÄxrW ]ÙRÿ²ÌJ=$Ÿ´û2d¡»Ñ¥l*ë+£lšäðNò£E>¿ÇŸTC–M³«y¿l(/4ì{®=‘ÍàÌÁž ;(J¨îó:ù€xSG«i§/±·±8âÔXå y‡Âʳë/„ýÒ¨l«…»þ:†J1}…~¼Ý^.\ ú½Í£?HCJ?k Cê1HÔ¶uäp£åØGâÖûÏLõº|ï˜/zmvúnÓaµ–»Æž.Ç\¤—]·cÂ6P|ÆI>[&3tvê(‰t·Ár±å»=+1 +ö=ÉȲ¾ŒÜ ™XõX{Ê6¯‡î>á•_R T¼é«À…,{ÂøVĶ¦V6Ê–0gS¨–iª«jºœ3ãÿ¿ £Ô+ +endstream endobj 1098 0 obj <> endobj 1099 0 obj <>/Border[0 0 0]/Rect[145.02 405.24 199.62 418.74]/Subtype/Link/Type/Annot>> endobj 1100 0 obj <> endobj 1101 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1102 0 obj <>stream +hÞÔWÛnÛF}×WÌ#ÙDë½p—ÜG7²©cØl‹Âé#­deˆTlGúýËÎ^x“íÔÚ…sE.gvÎÌ93d°š½½b°ª'J@J3H2‚ÂÎL–“ïóÉÑ)ùrÂ8Püà ËR"8¤‚Ê!ßL(Z!4Ñò9.(K ¿›\G³“S$ƒ7Go^½‚‹]Ì2"¢íjWl6eµ‚³ª1»e17ñoùèIxO’˜2”„|6™¢AëfîW¢7ýË.ž²”ð¨D3p¹Ý7eejgë$Ÿ(NR…)".´Ö@’ŒÒÄÇæÂu1b“ÑCÄnî!ÜÁ¡ða’µ±Ûƒñîˆ\ú#¾+êâ©"iôÓí¢°+5fáPÚ«Žª˜È(lû1lÚÍoÂ&I U(n0áo2}’j|ÿ—hk·õOûy?ÇiFXd‚É:øÛVÁ&ÆAE-Öœ«´;IÁþ˜Öñ4#I¤§œ2¿”+¢"€öúò˾õÿk¼ûis'RÂlæh›;ÑU! Uøïõx½†Ër…åjyØÄ ‹±†KS䦰õö)æoši‰¸•rÇ-…‚òXkÑ™—·Âí*MHÚ‹e*FJmÑÂ,ïf¦.WÕy±1qþ{¯%½jYIJì{PP«PäNM2«%5Iz+x)=Ê´w;;¹:{{>r'ˆê“AUðÀ•ÛuS4fcª†ø—B´ˆDóSA¸”Án¿z¨šâÞíÌsî·j¢•W »Àd†’ªlHÖà먬X˜XECX>D¾dE0,å©°nŸo+Tª9î¿)vßµ¡+ïóʹöA*}L×Qe¥*ÚåîÎlj¢Y2@*úbåCŠ,t®ëèû„@}Yí-Tõø8¨Vœ!Ãqœ‹ê0é|”W(Õ‡¶W·f^.KLt¬Qô£Â]¥7dÝaWI¸lƒv's/.cž¢tncü·ƒæÆ Ì_Ò‚ÖFŠ×Un¢”­áQ”}QÌJÇ;S<_µ‰¾ÏZ†3{ϵÂ5^ÚnaíÀÎ÷A«¶ŸÜ¹âö­«»gxe\爻Ȟ(ô³“ãË“ãÑ´°,×&f3²Ë°êÊ7|Û/¹·w£Û, +=xµå¯ÿqfýjãÔä6Ù¼`V¸Æë&Æ{EãÜdDò®¬tç&ÂP¡øˆ9vågêá +¸fŽýëÙ‹³èéê¬M±¯ö,~¾p»¼†ÚøÜòÖ‚•ùDZr'4%™ 'Ql@­Ü&J­‰²{õPtËÒŽ¹i°Õ$ØVºzJ‚ð¶dMtÚ¾ªåÝÉé‘Åé]Q­öÅÊ`{ +<6ŽÇ¦:@YâÛϸ:hÛ| Uˆ¥­<´9Jd¨ý³e—[F€ +Ûeõ¸±0J4æKôþ..ß_œ\æ¿¢•³ó³üìýùÕX$º×¨þê%¯ÝiÆž•Ž¿–€½þˆ‰›8ö1ìÐëH(|?{®Š‚$w’ŠiÑz½õœ»ƒu)%{½Ýlw–Ÿ#Fa­"¬‘¢y‚£¨9~²dò°E5ÞîUÙÖ™<èîžžHŒ$éƒØŸQìw†–$Â6õgIbÛ~šI82R*ïb·½íf¯æffYV¥Å¥ÿ0 +vœKF%Á6õ<3S,ôdàu@ÇôvÏ ‚`©"l`®ïv‘z$1‰·–¨,ÓžtÚµãŽsOÀå7Ø BóCÇÍÞ׆ô_XõA!`ƒ`ÊŸŽò="D÷MäeÊ%ÔûùÜÔõr¿ÏsOL¯Ç4¥lº|ÞäÁðZš/Ï\±îjvý;¦Ó¶½q~8¼ÂxzůÌvzí^N{O/c9Å©Žwø<5Èzˆà¹1ÖíõSíˆýDL®Ñýz|$5e|Ø_{æ’”a÷xèÎõRWßÎÕýÍ·‹ê ®zcàç~T‡¿’ç +endstream endobj 1103 0 obj <> endobj 1104 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1105 0 obj <>stream +hÞÔXÛŽÛF}×WÔæ©™ŒzØÝd“„±“™É Y °•Ýkp¤–ĵD +$•™A¾(¹U}!)Y^o‚ÅÚ°H‰ÝÕU§ªÎ)ZÀvvûí;Ûn¦dqI®AÅКÙföõbvû‹ÍLHˆñ/^Džq%!S1%,³­ð8),Vx‹ϳ÷ìáñHy÷·÷_}?µ‘ȹbͶ-‡ªÞÂ÷uoÚM¹2Ñ??àIÊ”rsÁ…Nañ0›£A:fåîÔhúm4—¬B3ð¶9õUm:këq1K“ãÑ<ÕÀ¥*Šx’Çqâ"Ó’g:<ǹLΞ#"ˆ²1â¢P>LòØÌäŒÃw{Ž%K ðà/xtb¿ÍÒ–(•øíK™4Ëå%L.® œ(ïÆ°â2µ´'k<+®9í×Ðõ’ fë„7tÆÜYjdÚd¡=Cê8¸¦¼¢x‘;j±wÈ.)r¨ÖÄ.Cƒ¸R[›ÍóCeîÐÊU×_ÄŸÒ8÷üdy׀ϜRrQ:(Á“Sꬠ g-îÎ}øþñîíãÝÙyˆò%Š4h8C¤ÊÞù!Fex­ö§5õ,šÀŠÍÕ„|ãš–ÅÖèmf3$#Gb”øŒqÊ¥bÁa‘ +RØÓò¢âëï^ë¾|q/Òm*x¡ÝÐD747%§ü[Ä¥Eü½G;Òl|éOW–)ƒ3C\‡À—:öç<ÏÅ•Àó<]àx—2ë¾ 6#ã9Ö“ˆÎãÝ¿nq¼µM€zHÜDøA›aQ"úÉ)ö„ ,§X98—áuÆ÷Ì(™HêšA/¤/³„šyBÍFåË&ñ݃ ò—yù›*Û8—_£p¥¼C£^Ñ8ã@Â×é%ê#‘Cù@‘»T®‘{'ŽM²p©lÚ)Û…t9®§Å;°w€zou¦p:S ÎàǨrí’´ÊNÂc]xñ*XH­;í<·2´‹Ÿ¨>#søÑFIfEŽ¤nˆËªWîÕ+Õk—ô•qÉÍìªÂ uù9Ý’RNt+9ìêÂãKy8"šŸ/Q ´'éò#ÐbgçJOñÅ2Eˆmy¶Ï¼‰$áýB/Ÿ‚Ùƒ(|¿‚fÁHõVeà,¡®¢Í†Íúþ© ýâ6ð\õ;‹Lÿz4Š“j¬F=íû§ Ür:vf>¥2þ­Žh’ +ôL­H€ÖV­(W÷_cûÓÉ÷¥ Ç:úçôͧd ÜŸH‡;¬ðMõ3¾;=”=þZÂÉÝ—Øâ¿ +G+‰ݾÖtoaHžÄôŽ¬ßÞ’õûY}€j3ÂH®wQÌè„Þ!&ÿpæîÁ•Kf7ýå¯0ÂKîy„?vÎulÑËÍ’}±°gvP7øsW’DbÝ›öPÕ8Êc)Od˜£á¹­¨ãp%_.ë/–Ñ›°,/ºÃÁ­éOm âMxåü·îWƒ’ +endstream endobj 1106 0 obj <> endobj 1107 0 obj <>/Border[0 0 0]/Rect[417 93.24 483.66 106.74]/Subtype/Link/Type/Annot>> endobj 1108 0 obj <>/Border[0 0 0]/Rect[247.5 537.24 348.66 550.74]/Subtype/Link/Type/Annot>> endobj 1109 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1110 0 obj <>stream +hÞÔXÛrãÆ}çWÌ#`/fg3¸”+‰+Ù8.‰qRµL¥ ¤“  €ÞÝEüùËœžÜ(­wSI*©J€€AO_NŸ>€dûÅËßÜI¶oIÌR‘1%,¬)»Å¯W‹—¯%“lµ[HÅ~qYÊcÅÒXp¡Ø기…Îc¶ÚàDHÍVïoƒëåkfxÆ®^^}ù%û¶ eÆãà´oŠã±ª÷ì¦îÊfWlÊð/«ßb§ØídxÌ"ÉebØêzÁ m³qgñhúOMÉ”« ‚v{:wU]¶ÖÖrµHOD”p“0®â<Ï×™ÚÅfõ71Wzv ¡±½‰€‡tä6 9ÃMõ±“cjpQç⛢íX%< þø¸-èL]¹u'¬¢cÔ!7_ö{¿¨Ù<øEÊ…45Ný#cw1¦èušãùoq +[ÍÉÝÙž7û.L3.ƒÒ›lý~§Úo†ÂØT ʵRIÚ'[ëËdÿƒÉ<£Œë ”îÔ°0áIÀXüüÃÿ|éÿ¯ñá_ª]œrI•}íâ…Ò£ð¿ëê«ÃÝV{À•ú° %Àز۲-Ñ›1áíÇPŸXnyߘ¾·Re{+¡ \³Z)G9Ï×itbIRpŽÉF(K6‚‚$¯ØOáêoË‚:óÚÆÎ`» áè¯Ø¶Ü½»®ÊWMY¬ƒHæ—ñxD {‚køÁå`ü¬Ã¯¬Ï«/¼­«¯—¸{õ»¿Þ.ïÖ,?YÑ”Vœ›š‰¯~ò¬Öógæø3#î0yÆs˶ό'NGÁuõcµ¥]=M±¹Ql=ŽDL†’™!9”_¹ò¯J65J…¢X£¬±JÁãÔŒ‰wFä΄ãUöαmBlÛ²‚ûM_4BÝhÈŒº¾ùîæzy{õõ«ÛY,àß|úH|À?È”äúIÈh?XUûîªCJƒáìuˆj‚ „†µê®x•»P¥Ãå0R +Ç#Ž8]:/îQ!WŠÈm=J Éyt4X‚ò¢p’'‰™dòÓI´q¥ã~,Ö Ö–%ûû xè_‡»Ÿ{"P1C•@Û ršy>ŽÛë±Îà%3ZzÑA‘%$Hg7€C;Wcç(É’ÐÊú¼Y¾~I¹SÔûs±wÏE­=ÒþA3ÉÜmé QÚB”õSÕ2 ß%‘[»î2Ê5…ټߩK ]¾ÑÀ!g*4mfÕA{Q.t¼|‚{1+Ô¬NOšªÚ±ö¼Ù”m»;¸{°g©˜èÄæÜž‘ÎIO2Ÿr¡Ç-£ÚÛ +”¤tû¢YjòÁ{qaU\Ö³Êó‘ùDJ1Õ~> ³émP6¶%Â,OëÀÍn"„ù¼ÚœjHÆ À²/ú\$#Û©¼Gµq4ý6Ø’® `Ü666 cá¨}ô:RqŠÎu8¯û´^±ÒÃDñÛ¼Âäˆ!úögÊ`;wM¾ãØÌúž= ø2£GÝÏ›ÔÓHáU‚$êÝc¹©v€Aí½q,’øée‰×M°Œ‹üɳPó,ÞXI쪃÷a ˜Ý-{¨J2¨‘.nepö½{(ëq¶Að,›ê0ƒº8b›’‹ÇGø‚MN Û5§#;u±Ô\e}Á¦³Ùóå¢Ø]q_´)˜2pSÎFŠtKªwÅšûÔ‹ÑeÁ9Ä`  +Lu8Q®À’[k)ç©4ÏuŠýÄ¿š>8”ì‡ó©ssæXP§*dé{$QpYcÓu‘3:ÅÁÔ9_Ú›­¤GƧòqR‹ÆÓŒ‹NÔ¼ªÁ0D©–Ä¡7õ/©‰‚¦)÷çCÑxÖ¯…9íÙ¹—ÐxÆy½/ÜfB¥ítŽèpfG»ðli»#ŒbÇûbJzMû¾=ô¡=+¸·_Ñ>°u°^¯CÔÏNœ€³IhŸ1`nÇdx]”Õ 9 žš !MN•#UC6)‡PÅ¨È ógä‹™oP‹ñŠ^Þ!ò) n&vôR?ñÒôu˜=rÆ/Þ7Pö1´Ôu&|NÑ™ÛòPéU?„nH=îž—×Òh¯Š…/ßweÝÄíLJ”Tzª¤G´e£’ìôúu²X¹ˆÒ¾ø¸.™†Çæ¦,œvãhj-,ArbúPÖÄæ"® ¹²#±Ð]Šb Aù¼_þyµüæîæßÜÍ’`Ðæ³æ¦Ά¾™Ì±§6¥}½"%n2Û¥–Iÿ#Þ*•\ŠPRì§G¢®â0(vWL²ž§µVÆóÔ]?*v¯³3š÷›ºœ:½¸Ï¬¸Wtr"^ž‰{ô]&«§º.5’•ƒ öx&ù»g²)2óoåsR*¿¨¾×ôc+ýL† ã5rúØ–$$Ñ^²óTÂë,¦û9h:¡ŽÏ‹a/ç£ö^ªúId¤ç2¾13hz-⾂ÿ“Z =¼õoP(¢øŸ ”óx +endstream endobj 1111 0 obj <> endobj 1112 0 obj <> endobj 1113 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1114 0 obj <>stream +hÞÔWÛrÛ6}×WàlJ7‚Äcâ(™tZ'c³·IúÀH¬ŽEyH*v¾£ý‰þeweÙmz™NÇ3&%{9{öìJõìé«KAÖíÌ(’ó‚èÂÅIãf«Ùóröô¥ ‚”«™„Ã\D‘3%I®8ã’”Û+Œk«H¹€.4)ogïè‹ùK’±‚œ=={ò„¼mQ0Ewë¦Ún7õš¼®;׬ª…K~*¿O*xʘ"©`Âd¤|1KÁ ºY„;5šþ¾IR‘3I7`†\ìöݦv­·5/g™¶a™!L*k-aºà\‡ÌŒd¹éŸCÊLêÉs@Qþ!d<àa= +–ÀC]ôÉcdrˆQf!Ư«¶#IjXN¿½YVx'iç–á†lðji°ŒÆ×¾‰/5‹«ø’ W.2ÈU‰„ +_jL_çο…[°Õì“å~Ñ‘ï’¼`‚ºh²þvut•ñXq[J“÷hk}ŒöoDX›¤ÓÔ¦’‹p›‘Ä0C é¯þòŸ¿úÿ5>|ÄÚ©œ ¬ïk§ŠÈÂ7Ôg××äb³ºb#v‰2¶äµšS!ß>&RÁ—nÉúÎŒ½•Kß[¥o®Qcà¹É;x:Ú(0Ò†Ü~L„¡ »=Ù&Ý'ðºnß:Ò]9…% Â’3˳+îõŠ£)ºt«ÛË®jºçn *r×%åÏ£" ΄'ѽ×7JªzIÂ{Ñ„>Š¯fçõò¤Ñ‚Y{*g‚ù&*évdѸªsàqê0•¥øH-³1¯ùåüüòõ›óˉïìÈ·î•»'MÛ»­«;FÈ&€,$Üí“TCÿÎDH*`K`zç!šù¡ƒQ‹à¡su»ÙÕ-ùàºÛDVPçêP°†É©èdœ+PY¨o„~»R ¨B©d"Ùwô%Æ +R˜ f†È-DžyªíÍ5@¾[yþ gy~LæM£A_¦¥k8’$ ¹Í·$W®q ž¤_&0oUçÈ/}(ó˜XÅ,Ì© ÆTq¢ÉGЧ¥ó»ÑùO Žnú³èFð‚™Giøõ~øH£_£±þ9ÚÒØ[Ò’Y9 9ÆJ™À(º©ÖŽÀ`cè U£Ãâ°Y Çd5'‰¨h›hD·qÝð—°àT…o¦íÓPÝÙ§Æ'ÁÌq‘GÏ0²W¤Ý/®mWûköëT°Éû;°ÌX–cö1åèñÝ 6~}±Ôk¤ j?Æ4ØHØÕ´›îF…Ì /m1à;Œmi|ÀŒÐ´kO衆êöÙgéÆÐXØ6à3ªÆ›z ³$ULŽeÍGg—Ÿê®ºóGÊR†3¯Zxã·-Å™0C_ì;Ô ÄÐ#õ~OÃxd\xu”—µpbÒ‘¹ªš/z@L? ¤”¶Ï/ã&x©q-£Û¸¦!‚òBŠ¾O¦œ8,–V*Ž3Ÿ~4ý –bõYï¶vÇVP*‹áxuµu“’Èž²S¥‹R »žõÈÑ˷ج6.4Ùu‡ó2 +ñ¦…oXËÃäVT·èÙ­ŽØ=ÌõúØ;Áåj¤¹úD?N[‹! ¬ý ®Jؼ•Æj<ÄÖƒ¥à=Òæà– ¼¦,Šh±Žêahí«—QØ3ŒÓ3> +`òÂÃn×<¿„2qÌ÷ôñµÄÿØ­~lµ¤:Rðw¿góg囋£JÈãÁŽ^rsï(Oìo¸ |¾5¸ÉÝ Ìú›è_]û}n+Ö‡ äæÓõ'ø·ˆq¤ÂÂ/ÉÌo[ùTÇ°ÈÞ6ÔøÞ’&™ÖYfO,@ê£ÿ¦Ì + šz˜·=iÏpÝ5ÿ¬Îâöd(ÆË®9?-»°çïÞû² ëÉï ¶¯Ð“ +endstream endobj 1115 0 obj <> endobj 1116 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1117 0 obj <>stream +hÞäW[oÛ6~÷¯à#µÎ,/âí±mҡÖ‰Ö H÷ Ú´«Á– +INÓý£ýË^,Kvš´Ý†a X´Ežëw¾sÈÐzöø»+†ÖÝL ¤©A¹QHPÔºÙjö´˜=~ÎCÅjÆ8¢ð3šŽ´ „rTlg¤š[Š,(ËQñavÏΟ#I zöøÙ£GèU›1CnÖm¹ÝVõ½¨{׮ʅË~-¾M"j’D 9#LITœÍæ ЫYÄ•8ˆþ¹ÍæLŽ+ƒ.›]_Õ® ²Î‹™âD+ðH©áÂZ‹Hn(Í£oÁÝð<&<Ÿ¼„€ø "¼‡‡pØ‹àenö¾{Ãø`"—ÑÄÊ®GÙ\z¿,ýŠãÞ-ãUþiq‰Ó¶Ó¦vñ.mâñI™W…âþñOÿ—ε…ó¯` ²Ú&¾Yî=ziCvId—ô5uR‰ ¡¢>Öœ+½vžûĬÍæ†äØÎ9eq)Q¦ˆÂퟟÿø×·þw…?}î„&ÌgŽîs'²„ÂÖÔ'› º¬ÖW_‡}ÆŒºtƒÚo7ð§[’}a¦ÚÒ<Ô–B¹‡k`£ÒjÄ3—Ê{I£ƒO€VÀq½Ûººï•¨(À͉HÎDÄé8Ý@Ïük” Ådëq„IÞ’<—GÜ™jø€Ø.cPoÖѬ§“ÊäÖ§ vÚã +¾Å’X{ÂÇ^O~?%ÆÈ¿ˆd¡ÂÌü ’/ÝMå‘öÇO( âÔ›@þL´O ÌBmªPBeÌØ5¾qmƒfmƒeÞ ;Êþ6dºŒ2z¬i°ó‹Uò‡TB¡Ž#<©#AóQíEN“OÖ Þ6É~ÈÝ;=ŸzE¤vävÃ'bÌa×æúxDðÍi<tø«ŒÜ짃1oŠ9rÿ5nƒÖeP#GP :cþ×.ƒ¯í[¸ôÄIdÁ,0Ž<<+ph>wM +~‰L(ý¬ ˆ‰0‡•Æ·÷Ð §´Ä9dzsÓ&ÍkËe»ë›mõ{ýËÀpýÙê›à¶¿Ý­ªMh¾{:¶ Z9 #wOUZ¥ÀÅ{à'zfLĶiäVG¡ó$õÿ@Dp‹¼›ˆ6S"ŠÂ>EC×xÑÔp½]À™weû šV¤ï6ÜžDï߸S‚P’’8œs')}]ï h«Ú?Ö'VX&õ)OÁ•åO¯µðJ +endstream endobj 1118 0 obj <> endobj 1119 0 obj <>/Border[0 0 0]/Rect[63 154.26 92.28 167.76]/Subtype/Link/Type/Annot>> endobj 1120 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1121 0 obj <>stream +hÞÔWÛnë6}÷Wpò$Mc†¤î8˜‡Ç™¶“vböa<(›v4Ç‘In úíOÌ_vm’R,»ôŠ¢ Ó¹/k¯}¡dÛÉÅß’mÛI°D¤,LcÖèÉfò6Ÿ\\K&Y¾™HÅ~ñ!Ó„Š%àB±üa" …‹0 X¾ÂBÈåO“yWókñ”Í.f}ÄÞ5¾LyàÕÛ¦xx(«-û¤êt³)VÚÿwþ)4VSÄ6•\Æ˯&S$5+» +^EÙøS™på•Ãnë}WVº5²æù$ +3øó(f\Y–1¦B„Ö³Xñ$îßÃe®ÂÑ{ B€æ%<ðÈ +ÃË0í'ËÔ`£Š¬7EÛ1óÄ{ÿ¸.h¥¼N¯í‚•ô™y•Ï#ÏmûÌmjV÷n“²ŸBFð5ˆ}‘}“ûa’áü;,!«©í›õ~Õ±/ü$åÒÓNdëôÕ•S†È¬­Tœôh‡á1Úÿc2ËüiÊC/›*!í2b~Ìc±þó§üá[ÿ¼Â‡¯» á’"'úØ ¥cáïkêånÇnË-èJ‰ØùdlÙ­n5’3 ¾}í«õš÷™ér+Q&·bT”ÿSl°1NâƒBcx“—Â:x‰º€ŽÛýƒ®ºÖÕ’Ø +¹SI¸ˆè˜×•ÝNûù^+N€ +Y¹+6Þ9³[œ EÃŽ0³[Ú®AIJyt qÅ£^•›VT¾<õ^ð ±(|üÛíuË^|™a]Óƒ=«tÜ+8ÏR‹YD"áq*$DÚäÁÒê?wÚ§8T¨!Ъ©bÄøÊæÏÅÃãÎ<<*Ä£(Di_"œSßk¶ñªB¡ðìvµ/C|¢Z¯}•aýLj¥G5kïûþ4ÄÓ–lU$$@ƒCÊêÛíîŠ!•xXck?{*»{ÖÁ’îåQ3çLÔ;ÃEdÃo­7OÀev÷!Çö£0éÀ‘ôʃÄä,¿/[Ãiñ(ŒL¿ +(º¨k„™5Ð ¤œ§Hßëj÷bˆðxÕã÷m±Å† këçÚ\óŠŽV›}µêÊÑlô®@a]ÍŒÖÔh¥¾ƒÈcžzŽQy®¬¿Ml-(ÚaÌÑü,TpneÕ1ýìǽÄÙ[¶4PÎ +ÄÏ‹•Áó+…s[§¸‹¨ÏêšW¦.™?îWø˜ò=Jljé + 5KŸý×ÈÉÿêN +w²Ñ훾) +Ø?È¿¸ ù³{½úÀÊÍ+3J›ÿf¯ +ƒÝÒû­.^ §ŠgûÏ<Ÿßž³³Í¾i^`3^ü:- Ó+Þ5õ#:#0y–¢i¶¤„2¶9û=üXÌ/oHê޷eÅèyM¼ÿòòæöýbPi©/ÅõTù¤ÉÈŒyµî-Yz _âJTo¾9ê}®ñ™®§dÜ÷#afVïºÜíÚQ%õ0™¾8¹R˜³}+i‘xhUÊÞ.ЗèÂqÔP$‡vâÊ£wýÉÍÍb<[”í¬/Ûæ‚䱶Cäij¡Ž¢ÝÀáÄcžR?]¼kõnØ8O¨~¤s † èÀ¢x@Á¶6j"ÅãɸbwÚu9Ì +It|+ëÛœJ-‚(×kÛØêj…ªW9Ü6%æ-I³kÛ +1ÝàNâš[8nn'½¾£‹gÈÀ{ !.’Âpç=ø4ã¡aÀvVÜ!€¦Òÿ@Ä0Tˆè‚jPÏY«{xOƒƒ!€»s®Dë‡Þµ&`ßõS0Ñ1Â=,eŒ€ ¶~~åm¦èµŒÌzvÂqI¹ƒàîî ™ÌfŸðÈŸ0‹'ÛùõAuSTÛ= ·zã+Œ“˜Zð¯ÑÕñýœF¶ôEnPÍ‹ñ!OâÞÔØìÌûàÒ=ä*‰~f: c–så€ð¾ÉÝ=Ñ ·ðÖ¶x܇Gì?Æ°¥B;“ÃH9¦RÆEvjîÐSOë&ÊìPuØ«v¹JúF€©2õÊ©ƒ™µZŸÊÇEp$¿ŸÏû0…ÍNÜÜÜÜ6¦ä¬2Â*#¬îl¸QÞDplð!qÌ´V!ãït÷dnƒZq÷)ÃäbÁ›Ê5-:f‡Kr²Ç³éÝâJ’¸¡žàQåÓ“q$Óà4b¼¼x4åµûÕJ·íf¿34Fz~/ÀÞ†! +endstream endobj 1122 0 obj <> endobj 1123 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1124 0 obj <>stream +hÞÔWÛnÛF}×WÌ#ÙTî•ÜÇ4±‹nØj‹ÂéC­$6•’T]Rÿ²3»IQ¶sŠ¢0 .ÍåìÌ™3g†Ö³çßÞpX73#!M2P™™@íf«Ù7‹ÙóK«à^x–2) • K,v³­°DY ‹ W°¸›ÝF¯..A³ ^>ù켩cž1í×u¾Û•Õ^W­«WyáâßßáI2œ¤™„9gÜhX¼šÍÑ S„•LÿRÇsž2•h®÷‡¶¬\ãm],fF°Ô`D†iLHk-0•%‰ +±ùpýCŒ˜ uò¡ Ò?Ä€{8¬Á>TÙ1vrLô. +\¼Ê›â¹aiôÓ‡eN+µnPÒÕFUÌtÔmû¾ÛT›n“ׄk UA7\†¦½J-¾ÿ—h«Þ‡'ËCÑÂÏqš1¹ÎdÓ·¯ºÃ01ª„°¤G°•š‚ý7pkãyÆTdç"áa©!6ÌDÇë§_þó­ÿ_ãý-åN¦ŒSæ’cîdÏBÞ±ðßuõÅv ×åéJuØÆÉØÀµkÖ¦$¾ý ‰ÿtKv,Ì®¶RákË  œkd6 rãW¸Ý¤Š¥ƒØ$‰¡H“äÒ­înÚœô€8ß^–Ûms**ƒ|‘1•¢^‘5OóžðÂ{Á¢«¢¶¬J…+è ê`P’¼xà“Þ“èòõÕÕM¼ø}8WÉTLd~74mÞº«Zá¥.~*PsÉ„40Ž¹¹¯Úü/ÿÊb!Â;–Yĉ¤ÎPm I'zm¾Êª…¥‹M H½›X‚ð$¤m¯f~wpÌ„CS‰íÂf‰I¸Šý¡BUAxˆzŸ(;)zŸÄy’-³®ŸÌûüÞF/°kHD} œŽIíÜAíLJݹã _ÚÓ G—GÉæiW!(g™”Ø™n>¸¢\•®vã Š9ǃ1ýîÞa‹Ù¯üñÜ2óPVƒ\F°"L嶣%”•·<긓1‘ øSüÌÚ‘÷üØbí”A§Àž2èvÖÑaT=¾x.ªe¨™ñÑ'ÙQJŒ³slõ"ÄŒï7ça*ì+ŸY"êhW=ÉòÅõ!3̹z¼>Ž˜¼%ÖÚ=Ž®Tr„nŒ²dâ*E‚üº'F¥jããÒ$¹á|Lw׈ýēѼƒªt¦GVë3´¯^üzqý(Ú“,Žõh1M&!®$íù#Òžœ“˜É9P6¨þÊ+…LX–ÙÑ!}ü<°Š% :8çhÔù\^l|½A^-¡È+xçàÐ1g.PçqŒ¤i²ŸoøP°]Üík‡ìÍɪÀ‰lN£×¾ +·…£QM ¦À[†n~ËMß>Bs.ÈxÏóÏ`·@BÊÇÉhyïêÇ´ŸD½Â¶À훼þ +N•—Ø ìY#ØÒÝS÷7ÑùÎM©ÔŸÚ¸E·Qí‹{‚²^QÐ1tÊ;4Î º£ôTÊiaûÖ`Ž1ÓÖ€aâÇOF„Å°=Tp· "e:©öÀ8ßs¢YÛ¦Ý[$T¹P(2^,G#P§5è“ Z#Qk~|óò ¹±8£™á§ô¦šð^1ÍGà =°ŸÎ<é$,7±þ;ñØß}t± Ÿïïbä=~(ÖKÀ‚§Î¼éA}V{†©T?\|p.Kæ¤oË~˜ÔàטFÊPãsNxÂŒM¤Œ…çÇ_¤H,ñºñwy¸Ë×þzuÍ&ÿ€x¢oh=ýÚÕyâ7ßI$ ®PìëÚm¹ïò¾IñÀ8¢Ó¬cƲ(è;9&%‰ðË{—7ïaí*,T.¼—hMÀEËÙYof†^BN0N‡T{'º‰vqŠ ‡PUP¥‹|»E~ç0Åÿ4¸ì€Áï„hdÁ +endstream endobj 1125 0 obj <> endobj 1126 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1127 0 obj <>stream +hÞäXínÛ6ý笠?©ubø!~èg–&E‡l ¯C‘ ƒjˉYÊ,»io¹KR²%9iŠnÃ0 LÚïÏ=‡ ‡»ÉÑ›kwÍDK0ÌBb5H«|²˜|7qà0]L¸†8pk¨`$£LÀt9ah…²$•0á„ñ¦Ÿ&7äõé(jáäèäÕ+¸\EÜRIê»U¶\Õ¼­Öùj‘Íòè—é÷èIOŠJˆ9åZÁôõ$FƒÎÍ,ÌäÞôÏ«(æ† +R ¸ª7ë¢Êoët:QIŠùhª4P!Ó4šXÆ’™Ôèî9¦LE2xŽq‘þ!f¼«Gê«>Ll—¼‹Lìb*Äxž5kˆbM ùéaž¹™ ë|&P¸1%UDi_û¡}i5»o_ad\a®R ÷…Ëð£ué'&Åõ—8E[«:<™ofkxK9É[“M믮Zg¸3¾VÌ[mºj'ɸÚOÓ(¶4!i,S‘¦štã—ÿú«ÿ]㻯n嵐ÜíëöNîPÈ[þ³¡—%\wW׈ëˆ#¸Ê››S:¼}Œ„Äó9í:³í-#|oid”®¹öƒÏµÑ=~ÙÓ€›´¹­BÏG±Lh$ð¦÷Eí(¤Ôb9|‘Üj¾«wvÔ뢮²²j³¬‚9Ñô· gTJµ¯/K:Ž KË2ŸC]•[ü˜å-­ïsp‹ÎTË=+̯›ç‹OgEYžg[¬”·e?CMÚwhZ‡Â´±®†¶ci©°cÂTnÕÐÕ»"8Bêë;â]q„ŽéT„E)Mu`U7q;Ï$EæÅwy{U¹A÷k˜ç‘&½Â]\žÜ’Ûh—4µG~†•–Ô´öx0ª%(Hey% ­FÍP‹ˆTR9ƒhǧ¥[)D±¯ØõC>+EÞx”ù7h·am؃\Ê]ÚG@Ëa18•Ìˆgüi„SÉßö3þ<Œ\{úÂñ'JZ{ÐP7äŠ[ænãpÜ Ã@0$ÓE’úðeí6)ŽFiŸ=Ù¯UĽd¹Ïå¤å Ò>AÿÌ´ýV/ºFÀÓÂW£âÅ}1ï$o{,85IH@µuÜcù‘Ö?ÿ°‚ö„ð·lJ<³ý\ÚTümÀº»@sÀ±™:ä¶Ë‹ó÷o.~”<¡âù‚÷Éõ´ÀÚx6ï‹1Â9éó³}Éhýˆ/½Ø<'öãL®NO¦ÃHOO!ÆYxQpëð‚`9þ*ã;…tÂñ “£¼‰ÀüfÖùñûÓ«A\r•¿oا´+í¡¡¢€ú’rvêÈô:õЫ’w‡-gû ³' “^¼6Ít¡ÇûUä.b!øX˜®6Z=³y6»‡JÕáÉQS™ŽÚ—íÏ£=OÓñ!×­IÇØðqìN½¤°ð‚Är¼jJ±kùNdÛn×®×ëÒõ÷ߨ°¥¶cÅ›€6êYE}åÿ#åL~¥ÀªNa“žÂ–ÛftµIŸWwTyãÿ£!¤}BcÂz} Úéa ÊeƒòIv·Ä?üAÓ +endstream endobj 1128 0 obj <> endobj 1129 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1130 0 obj <>stream +hÞÔX]oÛ6}÷¯à#µÆ¬HŠ”ô˜¥IÑ!kƒÄëP¤{ÐlÚÖ`K©$7ñOê¿Ü¡HÉ–ãli‡u X´DÞÏsï¹2'‹ÑË×7œ,ê‘–$%šÈTf4ý8½¼à„“É|Ä ñÁ…'1“‚Ä2d¡ “õ(„F©$“)!Èä~tK__ÅröòìÅ rUÏMM2R›OSL )çä®Ì‹¦vY‚%JíIë’"»‚jJ²0b³„f°»rµ] 8¦\›ÆFO ¢Û M±…9ÁhL§j¯9zéVædiz!f¶€…ë€Ãº ÆD¡ýŽYåîf¾V+³r¢9bœÀ.’Þâ +Hö×Ð@NÚ;ÛÁ²ê,måYCãÎNÞCÓÓCÖÀïHgfp줕A$ŠÅÊ8Î)ó´ÐdiâpÑ®,4˜éÄJ^·*ô33¿¿ÈW«k3m†‰ÞÇ–J:k óNû,µü’Xv±ÙöÆx¨Á‚.ÅáNéõùÙd L°èXPu»›Ô r¿6EÃÈyŽ`VVÍ> –Fµ\½»üðúÝÛ"d¸ƒwèÞ¶å•$\ñWÛ¯;~w€ä5ªøÓ&¯ÌŒÜÃè»< R žøp~íA!"ÀA P!ZQt/ÇSõÑ 1U¦êH Û¬‚=°ÕŠ@…íC?ö^zÓ²bF¦Ya‹gSãĺ¬ ;ö,j)ŠŽÕz¢Òvˆy l©—¶è*b²é’ÌN’>4’3«ƒ±Gôî¢íH@Í qJïdž^¼¹¼¼ÄE&°•"Ðñ¥††aåŽ%ÊËÆî›mÑdíÆÉD¸)Kµ‰ìÂNE©´Ã¡+HÑ&á–¢7’™ 4ÝÕäGꌅ¨D;„vžz5j÷7"¦»æíœèZoúwÈÅ~(Nì¸s4±= ½]ÏUµý~ª–ßÏ«¿Uõ1€bÐ8#ŒÎiÒ5N'ò–ž‚\$J~±±˜ª=V½4Q£rŸƒþ‚ƒ3'$®º®û¦ôdÅ"Ú@*&úŽ¹›%¸¢–B±!–e5Ë£›sõ4q™¥$Lö´í#Œ 3õ˜)¥L˜Žú|‰ÇDù>ÏžæIÉýtóî !ÖzŸ*‘ù'È2Ù Çص¸{߬Èû7§Å×±žGé!ëx²è,SõíÚzÏb}ŒãÊ»&/‹lEŽ²‚g9¥:lå¼çN¾ëç +#4d”nUc|ãeé0òe+;¹iº +ðû±›ÌæóªH¾&;ŠôD×z˜Ííûs³´¼è^¢n b°3þp +ã‘{Ü°ã̯` 8JÑnOð ùMÜ¢^ +Œ´Sl^fÕdØkð6"DzÐònégûL³·ö=›®ýß½•SZËçv@û/HêgÏoëþX‹`Í°ú˜Ô‡c…Ÿíºi¿À¡® @Æ ¹_æ,ú±_uÓ5™Ay(:”ÛWƒÊ2DÆ?ˆ¨ärS¯¶íq ãò7‰š*3;Ã4~f‹)>œðÜ´ßþaƒÚ³£è¥_ÖPM®yáÅðO¿u2” +endstream endobj 1131 0 obj <> endobj 1132 0 obj <>/Border[0 0 0]/Rect[213.12 456.24 269.04 469.74]/Subtype/Link/Type/Annot>> endobj 1133 0 obj <> endobj 1134 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1135 0 obj <>stream +hÞÔXÝrÛº¾×Sàì‰ â2ub[wš±Õô"îCA2‰tIê¸yŽö%ú–ÝÀ_É9çtN§ÓÉLH™à.ðí·ßî’“ýêíÍ'ûv•J¢ãŒ$YJdL»Ú­~»Y½½æ„“Ínʼná\x¦™D˘łlŽ«¬°81’l +¸‰yB6/«Ïôý‡k¢XF®Þ^ýðùØDۢܕ^›9(Ääõ^ ´þu„)ï:'í“{äEÌvçö‹óg€µ±;•õçZË„e^ôõÙ…Îü{.)ꦱEW‚ŠmO-úTƒ T”cÞ~%{[ûàIFóÎoðšî?íMƒ¾;Ó`‘ÍS ûòe„ÀmýŒ~òC€ÎÔ „ê!Ì«-)òŠÔÕáùbáþp°[’ï°<Íã·š™X-ËœºHéY$¡`5pÊaDñKBò¬ýÄd4­ÝʇoU—ÿÝ­Þl„_n˜I}Qà µJc&]– WÔ¡ª#[¥tšiô1 +ë7d­KYÕÙ„"Ù«’ã½¹² 7M¹}=Y“¬ÛÀ„æB„\Ýôv7`AY†À•&ÑŒØÜÇ`IíÍý»«ß?ÌÐjL°ç³}~·Ìž”ef)î¿$Ѓ4Èe-$G,#šž°Úù]$ñ@LM`·‚›¬?BÖ9ÞÇn{#å~¦ö¨„¡lëÆöŒOÑpꯡÁ>F~ý4á!’É9u¿µ2gÍÀ„y ¢ÿ#ð[¦¨= Ìp0$"k_%·r' "öêÍ}§˜ºAÕå’æ(¾1-àsúq:Œo½ ç4ì;î’È3¸óTþgØtÿÌ›Á÷3-Ù¸ë qxÆÜRú\&M‡dY–ñ‰¬Í‹Æv'`åg¿vÍŒ~–1ñ,‚³\j@,‚rìH{* +Û¶»ÓÍZƒ }µT€P_í'ÌùìZWa#l…oP~Ñ¥ûµ]hÉ´pK¡&…›0ä¤ÅÎúŠ;?9lIýgÕvœ½³³j;ï “êboäý¬ &.&_ïfX©ÒX Ààã'ƒ÷°ôĤ€åOyó›†tì„ée^yA¡À A8ŽÐægØä:¼5q3ìÎmÎÃ\–Ä&=s±­:´ž7ÝÂ|ÂTÚÏ;£Ý7¾ÅH±Ì\ÿWøÍ‚ž*çøìTáµ_åTöyaø6Yß›}Œæ”™q›g¤I}œT›Ïô ${BÒµó€Æ(Rª¾n{?xt<ö”Õs2é»ÆÏ^:”&˜³•Déxã™PIá„u +ÿ?~y£ÞAQö]—Áülªå‚Ãé…»n"Ó‰¿ÔØÆ)úÒömȸ^Ì=(Ã4?q-@2ué až ­^9í,‹“a*Åãjüh8?.d7ì$ÁٯɇpÒŒÅéYDƒ"Ì©…/¦µo_ö¾ÿÏppx¤8Á:3†©øÒ¤—ð¾A(Ûj.ÐÕ™Ù• &s@†z˜kµ(ø£PË`§n * Ò’¾ÃŒŸˆŸëùùÐF-¦µÏô‹íðÛµvdƒã‚@èNU ŒçŠ_xþ-Àø/î +endstream endobj 1136 0 obj <> endobj 1137 0 obj <>/Border[0 0 0]/Rect[145.02 260.22 184.32 273.72]/Subtype/Link/Type/Annot>> endobj 1138 0 obj <> endobj 1139 0 obj <> endobj 1140 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1141 0 obj <>stream +hÞÔXÛrãÆ}çWLöi`‹#Ìàî-?ÄZ­rYÇ*‰ëxKJ¹ pH1Ë[ µJÊ_‘üDþ2§çäuR©hkI˜éîéË9Ýl99½¸–lÙLÒˆeaÎâvQ—…Òeá×Ôß®×ìjµDºR¶D26ìJ7µQ¾ý¨7õ\øÂtµ•)S[)¥ÇštŒ5X˜fégèŒ!oPcP5ûkR ”mç‘Ðgs”H³åz¯«Õb¥ÖÞk6_Õš¶gÂíqiﶸ¨Úêf·0[ZàX+«@ªødž-e çxmV™ÓÊPÉ‘-Ò N•¼\ïîÊ5«]€°e@¸…5ÉWsH*[+j +ìL’1.fqC'IpzŒ/m%e|]ZSí¡Ëº2:AÇÝ (ð%xŽ³d aâõäVÏ÷A +è„|¬ú+f½úÈv[ ?™%½S•!]b’%ÆqÊ8NñõßV°¨¾]~åò¼'¡H¹Í s…ôH’D¤)¥Çq´]þó‹J#E/jøòüS¹Ù¯õ(YŽ-QÑÍn鬜µ3clD( McmŒßDe:P®?Kn±æÞ¯¦1î6¬dUi¢£Äˆ:Èu\¯ï_²@ð>šôµ±‡U{oSðq¯½g’.푯V¤­¹^<˜ãÓéÏî>ΰixxiiwTd=žÍ”}Ž¥–îè‚æDüÖÕÊØ|ƒ0µlY)‡¦%iú†ÝÝg%ûeeTÿhÍ>±À%Bøœˆ'$}c€Êü©¿ÂĬÞKÞ˜¶dºÆÅmÀþnä̾p;a…ÛYëæµÏa%â¦wòOOIþÙ½®>²Õ¢wå +w› ä¬ÚÕµ®Ú#b؇=XyËͦß|Ízãvïå§æ¹ƒíkع¸å¯fFkö;ÜnÙÓPá6|Å€ +è”ÊV{q‰ˆÕ¥© ‡z…¼Xb­¸½Ý¾º ^ûe¡ÿNu­ÛC½e²[bþLfflëhé×C{`î¸ýê„…'L†øHÃðH—Ý{ö»srí¼:¿¾åôd,À +2"|ýó¨¬]M›‚Ž”rxßWâ ¿êfT}‡}3l5¬ +ÚL³9B.‚Ü(é+ù¢&1¾®8ÒeB$Š”šËQuÅ"-ŽJÅVØÅÕwï/¯5‰g¹G¥. M‹`nô¶lv?®abó~·üŒ¢d@-jÌY½*J´Ýž( TSnçŽPXäž!Ðû>t-|Un٦›Û×ð2wë¼´XPfŽñ€ßGPõc‡ko ðsîÕš5ÛÖu½Ÿ Ö^-ˆ—Ì"¢Ä¦*¾ p¯´µ .TÏð* +ù‹Øº¼CtM‰›pß9?ÅŽ ò×9™ÔÓdrÌžmçÏ;ÇŸ°Fûd£ÝÔüÄ %·Ât’³ÉDjà{ ã1+&´UiìŽè2:õÚLNq +†i8Œá±3Üón „uóïÎßž’KÞ•Ûå¡\j´kp8ìÁ¬€ZoÇ‘Ø•«ÞgÂz1 ó„ðöe·Üð`Cjw¶ ¨ÚÔ>`HºÓKÂèÌD˜ýB`){5þ—OƒšýÇå)}²G£’!‚0™MñÙ‚u‰¾qEÜk 7G’Œë¾gá붬Û> :krQGnmo¼J lïßnŽQ °(`ÞÄôÎ^žjéu‘KË©M@5a‡ã}¢]º3æWùLÃrpÐx4sšÜšCUé¦YÖb@¯1:Ö JÝPÁèüžcUÿJäz¯-iV #LæSÉÌ«˜„Z«„ÛX'¼ èsU¡7Éðnþp¯Ézî7Z‘ÇY22îÃ/—uçO;ë*oÒýÎR]ÆWæ…Õ߈‡#[GG?³ºý{» 0Ø`ê +endstream endobj 1142 0 obj <> endobj 1143 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1144 0 obj <>stream +hÞÔWÛnÛF}×WÌ#Ù„›½“û˜ÆŽÑ¢ÃVÚ»ŒDÉ,,J%©Æý¤þegv—¢$[N ( +æJÚË™9g––“7×–ÝÄ*Èyº° 8´Õd1ùv:yó^€€éb"$püÇ(r¦$äŠ3.aºšp´Â¸v +¦3\p¡aúir“œ¿à +x÷æÝ«WpÙ¦¢`*Y/Ûrµª›%|×ôU»(gUúÛô{ô¤‚'Ãd‚ k`z6ÉÐ ¹™…•MÿÚ¦™È™Lj4Wëm_7UçmO'F;ÌÇ2cI圦 ÎuÈÌJ–ÛáwL™I}ð;"B€(ÿ#f¼ÃÃyຒ§Èä.FiBŒ?”]ifYž|ØÌKZɤ¯æa5=]Ò¤Ì$qÛqS;»‹›dxra0We%}:|))};<‰K´Õ®Ã/óí¬‡_Ò¼`"©¢É.ú[7ÑVÆcÅ l)m> ­õ1Úƒp.Í +¦—I.ÂÒ@j™M†ç—?þó­ÿ_ã»T;•3A•ãCíÔ® EìÂ7Ô·÷÷pU/±]‰ˆ}*°;¸ªº +É©¨ßþL¥Â/«9˜¹•KÏ-‹ŠòXlsEпÂí6×,Õ†sC™òä¼Z|ºîK„‚â¸hSɱE‘?o7Ý¡ÄŒbF–uŽêE¦}Ïïº_Ú`<F¨uÒwÐßU™`L3ãL(ßÅ”\\ýüáò:þ>zUÌŽ•B©üHº¾ì«UÕô ±’M ƒL1iFIÌGW×5}ùàÏL§2rÌÙ U´À,Mâk)Kré¥ú&©›æUj“â¶F¬n“Ð\Œ#@$œ¤îlâ·‡Ðlð"™æ.&Ÿá6˜­· Š öƒjeà†Ý1ˆä6=L÷ 6FqÈø¤£ý·8J–c¹%¸†ÚƘPÏ$SÊĘ¼ +¨?¨…„ÆÊXt‘Ç¢oªY½¨«Pð&ýmSú¿úˆãf½ð^vÙ˜qòØ:°¤ƒ"iS…ÿ [„{cjuóD+9V/ê¤Äc—!Å\~<4}0ÉØU‡(?f˜6†Y;$ ˜uÞÌ¡T ”ú ¡´ÌÉäP´áZ ý4IÐZd‘gG")_Î!;˜¶Ç:dPÎ +=|)k”uϲÆC8s›FHN#¬¤‹ +#¾Â L¢©g€U\ìkbÓ›6Þˆ ݈:(Á«0v:~F*ÜaãŽ(u¡ýp‡“{¨ŠÁ®ÁnWö±q}åºHŽ9õ7§‹G*éjÁ+ƒ‹ õDQnöìŽñÆ{LïêÚpsZVlëí–ÍfeâËðÚ£°tGý×M_Îl;<¹Z·$ž]7³ŠhVve«¿B¯æÂéfx©Ôfl·¯’k‰­¢$åvªõ|ß’jÒ௟3ÜzW¶ßÀ¡Fâ°Ft{Ù’jSññS¹ªŽô¯Œ¹Ú‡.yíå+c@ï0êû—f»:'¿Åë#ßY<ö”ãl§[H£žO÷œü~.]äøÉQ%ŒÞ'çËG•v¾Å0, ɇsb`e£¦8X%Ì֫ͺAÐPqòµ§(‘ÁsõÖšãîŽ 2w_#ž¨‡¦ºRm¨ ¬ÛÁ^ ŽÝ þMÒVËí}ÙB•â+cž<¤ŽM[u]o#‹TáËN²ã˜Ì÷ÃÊ^)[¯j‡‘ù T¶™Ì"´O hèaöMþ̽@°ˆ'¯xšâG¦cü‚^³`¸÷(lïfPéT(™O»9^šÿ`¶j‘p +endstream endobj 1145 0 obj <> endobj 1146 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1147 0 obj <>stream +hÞÔWÛrÛ6}×Wló8L¼ˆ“ÉCb»nzI36Ó>X™ MQŠÔTl·Óê_v )‘vÒL3m§ÉŒ ‘‹½Ý³€„ÕäøüRªžøgîÌí@•N–“Ñäøk ¢åD*pð?>ä,ZA á(ˆ6µÇ 5D .éBt3¹b§g_ƒ'fpr|òø1¼®¸œ ÍÊUo6Y±‚—E“VË8IùÛè[´¤­%Oh˜J!}¢ÓÉ’™Ä®ô^õÏŸÊ@(–¡¸(wMV¤µÑuM|%#ò…çƒP: CîÌq\› ×|Ĉ…r1!$ ÍG ¸OGh’~tg]ìä˜ê]Tžuñû¸n€O}°7ÛEL+ÅštaÑ3dkÅ~h…ªdÝ +)ût¤‡¡j_ÑéÚ—š¢wƒ÷¿Æ%êªJûe±Kø‰3!YÚª¬[{eÑC`LªʵR~Ð%ÛuÇÉþdòéL¸,œ*GÚ¥Ü>螟ÿøÏEÿ¿ÊûŸ„„$äœ;ÝW¡l«ðŸuõyžÃE¶Âr¥>l¸Äb¬á"­SìMMõö+/Ó…è³í­@™Þò‘Pö\ã¹ýÀˆgŠ»ÍÙí¶âÑ/{þJ`ãšœ ¸£KÉå6M²e–ÖЬS(¸Äúg;N7×È$åÒfW:"8È­#{EÊ*JÊͶ,Ò¢©!+Œ²ÇM؈\Q«í¶\{¸-¿uLªE8³šňr…ØÛq¬‰Eº¼9GâÄϤï"]ee1¤Ëa²œ€T¢¦iKÄÆe_úVŸáLê^äÌbhUyV•3mvö)¾8;ùã«A†µðòâwFt›¨›¸I7˜Xr µ’ãŸjŸ"üÁ§ ++cŒ‰{! Zgu›z_¸Žw`Ãëm´œ´7{Êmƒi‰sˆ‹$q×)ìêta•MÅågJ0šVe‘ßAY$)l±Œ›ÚºiRE¼I =ÆT åµiÃŒ]ÞM|k2EÊ +…"ôíì "å!äZØueŠúŠeÑ"å>#Ü{ÄçÌö» Ú#¾vhúœNŒ¸…¦m…‰ ûê÷,8ì6z#…vLÝرÆÙ£ +ƒ $þ†™»O˜q¬‰XØ;ñ¹­ÿˆ¾Ì qDÇ€]ÇÕQ×o­M$M¥Â‘Í+VÑÐfˆ;=ŠWñ†ží!©÷.Ê•‡¹s|€\"ãž:CÏ‘Y46ãjGTòF"ÕÖ774ˆ®Q9¾¢VøåvÛ[úAÊÅíIJ1l1TEÜö»ø7+wu~gÀ2<и?ÎLu¬Ö#"à›u–¬ƒ†Õ@Mßm,Òœl{~ÅC$!šUDRØäš>Nƒ©‡o¹&?NÖiò²å>Ûd͆Z+j؃»â ܃’sf6}õ ö(àk Äý Úà·F³œ³G‘±Xc›àëÆH>!i¼ãoLÃvª ‘ƒ9qÞT–Ì +åÄ|^<šó>7NwêÍVi³« +½ˆùø;UDï!æEmúàÂÜÎñuŒ¯«££9ß æe2guökZbxgGä*ür¤Ì[uY¶é¹lâª1ñÕx®óÙ}ñ“oΔïÞ]œ]Αvê{‡þ]9oQsÝT‹ÝÖ(|”¤y®ú$àëOÿŽ0Ý +endstream endobj 1148 0 obj <> endobj 1149 0 obj <>/Border[0 0 0]/Rect[198.72 237.24 236.4 250.74]/Subtype/Link/Type/Annot>> endobj 1150 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1151 0 obj <>stream +hÞÔWÛrÛ6}×Wìè‰L-ï“ɃëÈqZÙõÈL“Ž•é0$«#‘’ªí‡~Pÿ²»A]œ¤¹µŽeÅîÙ Î +˜÷Ž_\ ˜×½ÐƒˆÇàÇ!x*Õ›õ¾O{Çg¤³žÀñ"Ž˜'!ò8ãÒU£Æýă4Ç>¤w½çùð ÃéñéwßÁU劘yN9¯²ÕjQÌáeѨj–åÊ}›þ€'y椀y0L„¤Ï{HÇäfämE¿®Üˆ˜t(Æå¦YªÖ²†i/ð´'dALzI’ócÎ}cY(YÚ÷h2“þÞ{D„ñôK´¸Ã#Ñ($€/ýØOšÉNGGYÝ€;Yä¼ZO3I§QS3€=§pYà´Ë.ÚEU~Û.’æÉE€¶z¡¤Â7“>™ïG î¿Â!ʪJófºÉøÙb&ÕŠ¬ÛóÊ¢= =£±â¶”adÑöýC´ÿ‘$î f¾“ $f€²Ð°ÏOüçKÿ¿Â»Ÿä;/b‚<Ç­ï¼. +E…ÿ¬ª'Ë%Œs WJÄÆŒ5ŒU­09=Š·ß]éᤚ2›™mnERçVˆ¥+6i*M HXšL£V–0¢ão« —ºÚpk$À£?t6ëáýººoáÔM5ݬ'N÷sµ\zý‰ût'æ9eðóv{…¥ zS5»{Q•´±?§'N‹þÈ#Ð?I¾•“>iwŸžqÙé¿Ž‡×e=Z1«®Pgâä·YõdâvÒnðû¹;Äãm«ù¢,4üºO¿Òó‚ù[öιn*,æWU¹FŸ‡Nó@¸Í«5BÖ¿¿ÿjñxIÙ$˜ô­SEîøZÁc•-­dœE­WÙ}V© …,üñ{Èߢÿ >Û‰;‰ºˆ;îþ.Š„þçú›Æ—8ýj4úZè“®ËYƒö_àôÉ›ó“ÑÙÕpüòb˜Lj„ÏI +ß‹“7oúF ~deJæs¼°MA¸DŽÀ•8…uêr_¿ªñ™J‹©Ö³F<¿©/&.¾9X~|ŒUÖy]!¿ +uKd8ÑîRÝpÅéV©†‚·*€?ý£%d–úņúÅÄzd³D3Í"ªÂ7Îù¢nJâc™ÅÃ>ŸÛ2GÚîm:ªÑ^Wé­+Ì“xq<¸"H•¡wpgH_@¤¯FTˆ¶Çíq>R»À\‰¼»#œó—×éOã_Üô·­f>I°½<¹%°RóÓ7kÔJ ÒËìmÁûNîî¾ÑQ°¨¡\7˜oÙRŸ8@žíŇŒ8°\[oÏŠ)äYïlj5…UY)hnq¦,r‹¢EjFEÂLz‹g³ ‹À†œI'êƤ>H.L^ñ(µøž'Xx涅Ó`Ì Þ乪ëÙfÉÌF[f<ª \=Âjý C‚–i'l‘¢r×þÑ’#üÈ:G´Æ·}î c[Jö-E‚O­"rÇbiñ•jÈžµØB <`à1ùÞ ¿Ö©¦·|€£iqL¸ÇbL^¬!Sºg,@Ä›t³À8²G|ó²À5ÇÅtYÂm…“‰ ­ÀöS7Ø?:Èùè17[: 5D;°áUD6`ný%ÀïBÞ, +endstream endobj 1152 0 obj <> endobj 1153 0 obj <>/Border[0 0 0]/Rect[501 287.22 533.64 300.72]/Subtype/Link/Type/Annot>> endobj 1154 0 obj <> endobj 1155 0 obj <> endobj 1156 0 obj <> endobj 1157 0 obj <> endobj 1158 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1159 0 obj <>stream +hÞÔYkoÜÆý®_1ͧa£qfø„Ѷ,7iÄÖ +«¨]®Äx—+,¹–„"¿¢ùý—=w|íF6EcD»"‡÷Þ¹sÎP’ÝžœýùJ²Ûæ$Ñ, 3e Ó!Û•'«“Wó“³7’I6_HÅBüÇÌR¡Ku(BÅ曓VDåšÍøʈÍN>ð×oX,2v~vþõ×ìÝ.™Ð|{»+6›ª¾eßÖm¹[‹2øÇü/𤭧Xh6“B&1›¿>™Á ¹YØoº7ýã.˜ÉT(^Á »ÜîÛª.cëb~’(‘&ØQ"â„ ¥óÁüçr$V%}C?) ÄsÕ´ +Ø>·„; +.«E±Fð‹ínÉŠà­ +îey<°{k™+J{W²eÙT·µ`Å⎭\¬ª—°Ø– Ûâ7cjælMà0ò@+­½.ªt•`/ë@ƨÔkË€ðÇ–Y¼•€ŒQ˜Æ\¬÷KBç‚5å¦Zl)Q©È£ÁR©\Ôoxf T¹æ/®¶(jvƒàñÌLæxÊ„žŽSa*Ç«š<¡1˜-ElK • ‚2¥FúërU;‡E‹D:ŠßgEúᬨ—cÓ +8çû8.Ëv¿«G–µHŽØõÙfË-«·-2Š”+Jù&PÈlU£xŒjëj‰|P9¨ÞmÓb5µ¬ß¿ëý™íÅ™*î"†Éù7®ÔTÒ‹Çbs¿ž°§iùA³PÔ¶V.ü9\š|ƒ#Öëm@Áòª{(Ž?§Hn<°æίf®Ò(, +ÛF° ÙÒ{¸ˆ×ë›b Rþ‘í,K³‡ª½3©jŸî]¾º2!¡îë„\-ËÕƒÝøÓùÍÇ9Oo(ÒlPW.Ìíù\ÙûØNby›¾Rb%…ŽR(±&â(_‹ñný¼BG“ßóÂn áÆñO6äS‹¿‚Fø3$5ðÚà­ù/Hü7 úªz@|]´¸Z°½ý^`Zþi¬ÌÿèžCî¹]Ù¼ðì ¤ vgý쌬Ÿß•‹¬ZõI4¡!g˜|Œ;`÷Qtx+¯¹yèb}rqÙç÷08·©{`g»ºæ_ÍÏ“€Ë-;R¢„ŸÒŒlÌ\xc±ˆá¤‡]Õ'\\_×_]/ü²Ð³WçxgÆ”Én‰¹ù Uº‹i£¥Ã==!TˆEºü©„ +RA_]ÙGÏ¿¹ ¬þõ§Ë‹«kC+VP á‹_\Çz¾Ê,_eÔ\ZcPŒ6ì¥+ÿ¾5g@q:ô 'HgNÑÃ~r$ “)1M½CR“ù‘"Êqîû‹ùÕ(4ÖÊÓžòØ¡æwÓ!…ò¿ÛEœO]P'mïmÏBJ¨#ì©y¢„ 8wG6¨¥ƒ\b85¡K»4nëõ¨uALë·ªŸ@°˜ ö†ø1&âÇŽ5Oµ…7pAO ‰ÌFnmñƒ«À0žŽ8ÑŸø(Zê:+hZT FþÃtž‚»Kö/jœ_½îŠAð*ËqÓˆ +çÄp¾_}CÆZÓ}•K§ +L[JïÍ;C]Òs*ØX¢¨Bké4ûŠÜžE’¸-“2K:Úp4õöâÍeêmQßî‹Ûª¬Eù,‰ƒå²žž¥£^ ÷©N’@µBÈC¦£Pù˱TY2$”ÏTÂOléƒÆÞ)fuà΃¸¾31g"Ó}[e:s¹2]âÿŽ!§s—P㌶“Žå‘¯_æhÙÊ£‘mðn|Ø…äá¢^ØOF")ïÌ{•ä‹„ƒ¤ØfÁiôPÐv—:j ƒEM°· úüÝ”†OkLüMÙ>ËÒÍj$b9œUe™ÒØ”£€2î”7‰îO•ÄiÚµdŸ1¹--÷…‰Š‚ÒØÓ> …ä«jÏ;“ÚMÓ¹=?úNæ¸ÄÒr7«i:,†©Š0‘Àª‹·;¶{v¡§|Š4"Š4s_gØÿnß´?o«ú|[×P€®1oaÄò>G™wjŒDuÇÓQ9DoýP—Óå"ÎûZØuC¬×ádˆ»b…ÒÑ—s’¸ôb„•ö7ˆZ¯iÁ7VZÖÝ»ËÞ]\ÎÿþÌñ?Iõ¡l}¨˜Þ8ø±3"M+ó;(u2-µ2-u2Ív&â,ž¼»˜àA'è&Ô$ƒ€ +Cô7“‘üü )š7tB¤†gß¡ÊaÛey»GÙ™­;uV*Š¸+¾ñéìŸ)zù(P™yéÒ;=Ýš/ÙD– =Ýà‡0"YÖNŒ„û"7:ɧNœzµ¿©-§³¹·©SzàKl£\ ð0ùâø"œ&ñ™³Ì`ë‰î s6’Ö­O Έ¸ð9 +Iº-UÞ ÷cü¿ÛmïÍZóÖö‰]ù‘éÿzâ,‘OÒ¡á7Ê4¡¿´ ½éŸnY|>o23ïs¶1!„>‹¹¶<‚0åT¨^Oº!¥á×¼ hRí[Èšþs —€©úP‡# éàÉë/N¯[šýbQ6Íj¿.ÿ`D/g +endstream endobj 1160 0 obj <> endobj 1161 0 obj <> endobj 1162 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1163 0 obj <>stream +hÞÔXÛrÛ6飾`!¸ ú–&N'™ÆÍÄjûô•(™‹òˆT]Rÿ²»xm§Nf:mÇc—‹½œ=» »Å³ï.Ùµ £ˆåÑ…!Š“cµØ.¾]-ž½DÕv!$áð7QX¦$±Š3.Éj¿à …qíY­aÁ…&«›ÅúòìÉYA^<{ñä ywÌDÁ=ìŽå~_7;òºéªã¶\WÙ/«7°“ +;åL‘¥`Âädõr±…¸Í:¬Ô¨úçc¶–IZƒòþpêê¦j½®³Õ"×ü1,7„Iåœ#Lœëà™‘Ìšþ9¸Ì¤NžCD0 Ê?‡x8Gà¡.zçÑ29Ø(ó`ã÷eÛ‘li˜¥?^oJ\IÚU›° 5Þm2–Ó(ö6 +×—QH†;9øªŒÄB‡/ º¯­ƒ÷ßÁtáÉæ´îÈO™-˜ UTÙÆýMÜ 2ãcÅ1ØRÛG[ëy´ÿ$¹lY0MÝRr–9É 3”þþøÛ¿.úÿU>|ÄÜ)ËfŽ÷¹S +EDá?kêó«+ò¾Þ\±»L[ò¾j+(N…xû=“ +¾¬6¬¯ÌX[VúÚ2À(wÉF1W¾ñ+7V3;² ªOyprSmo.º2‚£ÝyÕµ)©Œô…º´¾BeåÞ¥ ê‚*®¦]K (5¬HT˜… + ÄdžÐó³ÕE¶úmÜV2„p1ԕ߇’¶+»j_5#ÏIx/j7žþîQŸh¬SH22‘Ïü žì3Ë +zÊàœÔvÞ`‡<¿Ç:%Âû´Ò‘²Ù +þoêîr’š¡Gkû¤„lLí¶Ìºqg©C4p“$˜œç¾ 쟓ΚÍýÀêŨå)‹ª#À–^d©˜›Œõ‚·MWþá…W+¤s&ð>.@9€QùÞ‡ø¾÷ÖèM•:qû# uÊ8 y–c×x¹ðÂÁ"3 …;Ó[#DPéúpj€¯iHÙhZî&¡³ÄÁï¹ôUÔã=ª~ Y°w'ÄH_/Ñè +’)­ñ; )]Š?1#‚†:Âlù:º®Öõ¶®ZÒ]V¤É„€íN^÷¿BÏ>lý¦‚3í&2È\`4HˆìÚû†ÔW–¥`VæŸQŒ÷Uý´ÓHÞå"çÌè˜~®þI6´´ÓlôS“ôÍ–Âëí]5tèÏup¦øÓlcA6CÑ&tÃó/¡›môH6Ê<–jøãX¦˜GçÛ~‚nœžÿºQ€·OÑM4ê#’@ˆØÃØU°kìzÇ@ÁÕEëq?ëd"é˜Øð±cbÉ‚qí;2¶úº«aòì‹7I+˜&íg—ï?7‡#gåú21ÁŸÀ„@7Š‰1_`E`æ>à +• +ŽÎYÀ§Çeà¯Ô¥,X‘çsÙ@ó8k&ܬ,ØÀ|‡c +Q`N}§ÝoOm÷æP7/MS­1èiV5sÓ*}•÷ž>Õ_Êù¼ž’­…?4ÕÜ?8ž¸ir©gWM…=fÒÙ{[D> endobj 1165 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1166 0 obj <>stream +hÞäXÝnÛ6¾÷SœKiYñG¤tÙµébMƒÆÝ.š]h6¨ˆ¥À’—eo´·Ü9$%K²›eŠaŠF´Ežÿï;‡æp={ùÃ%‡ëf¦%˜$•i líl=û~1{ù–‡ÅzÆ$ø<3L +02a‰€Åf– –¨\Âb‰‹„+XÜÏ>GoNßBÊ2xýòõ‹p±yÆdT_o‹Í¦¬®á¬jív],müËâj’^SÊ$Ì9ã:…śْš¥_ɽ蟷ñœ&¢ÅÀÇz×–•mœ¬ÓÅL f4z¤Yª ™ç90•%‰ò¾9wÝKô˜ 5z‰¡ Ò½D‡ûpä.9àK•u¾“a¢7Q¤ÞÄ‹¦…x®™‰>Ý­ +Z‰¨µ+¿€’žyTÅ,¶÷aÓvy6 ÿLxŠ®J-èWþKCÞ+“ãù \¢¬mí߬vË~ŠMÆxdƒÈ&è««  ãB•P¬…Ц ¶RÓ`ÿ <ÏãyÆT”ÏEÂý2…X3tϧ?þõ­ÿ]áýGÊ4ŒSæ’.w²¯BªðÛšúêö>–×X®„Ã6æXŒ |´ElJª·ßb!ñK»b0¶ŒpØÒH(‡\#Yžyºq+Ü®bfO6I’’§ 9­ìúþܶïwMû¥.«×uUÙe[ÖU¼ø²§•=‘8e±Hž V ®PïŽX2¢• +ä”z)hOšú€'{ Þº\¼ûpv>R¨X¶ÏŒ·—™;M[´vc«Ê +Ú þlPc˜Ö‡jÎO—#‚©Šž'œË¨l +Û,·$‚#a$AíAÏByG„MLXßafU„|†2}fuÔÂ}ÙÞøð̱$>¢m3fmo¹Å­HÒ#‘ ÍÐÇ.“ ŠÞÈÞÆ`"ÔÛØD“¡¡*E­“wÔ‰by¾Œî”b3 !'PT+°øß»?ôÛÉ4#ͧÕêCe§."ƒçûL¸ E,€˜KÜ„éšK&ö]Ѹ­—U[üî¶/¢™kß©hõž"|¤kÖ¤ÂY†)®¨ bƒ~‘¹ +á•,AàP§H¨ï½ÁÓ˺‚Xâ¾›bû]—ÝÕ¯¢bê£Hg°ùD›»sz{âOõvcS2rT.ØûX’k54`àÇs,¹£~Uç…3ÈNìP8`Ô’‘¢è*geÄ()!*ë¥Só +‡‰Ð¹Þ›±iØz“Ò+Q¹«TtáñšTžõ.ø +9 ¶YL§} 9ªA«½Ù¨€ž‡ÚÎíu¶B+Ëu‰ÄG”DŒQ pÇ<òU¿Æ‚>=8—8U×AíãÊäS¡¹³Ërý@s_]Y¨×P¶  ‘MŒ§ ú³kè¥ç“ ðŸ„É,€‚…Ò°Ž+tÕ!%º1ÇbŠXˆø׋9rm@†OÛ0;J½òcðžæ»‰ç)‚{ò¥™5íèµãþ1…‰=7w”üH ù1|Ì¿ÚæÇæ;Ÿ;Átv,w}œC#Àkÿt€Žk–ÈÁá,Ø |› MâýÏ¥b4¦LF}sI?à²äãŽWOTL{xV/f¢+A)¾}3ðÈ&gwùü> ±Ú¥z´ôv]!áý-|D†ðÉ(}î|ìÂKºzÄHwo<£ÛÞIom‰ðÒæñDdY¸øÙ5Ýòzzò´RÚAéF\ÌP^%ƒÅMÙÀÖ_0aY ùYd+Ô¹©·MÁoêjiaK:Š¶`;ÈJÓÄõcFÓZül.Ó +ÎòAùɧAÏít&ŸNƒ®£¢ËzJÈ{ƒ™úIÕ$T*ú䯧=´®¢ÿÅ,qhˆà:?bNïQtÌÃQƒÇ͉ ÿXwƒy"µ7¶¡Gù‡]MÔãÑ(óf.Ì3g™ô±a¦G<“úÞ¤ SÈeÀt@9uvœ¾œõ9¥ÝtQàòzw[lfŵ·„ña3íz™‡Ÿ©¼Ÿ08[ÃCÌsô³ÞuÈÍY¦}Š¤äþl½)[<‹ô€]…‡ŠÿÜîb˜ŽÜ¢¢““á¶ð­›±Ô Y÷³Ö½ŒÿYkø©92+`¿È/Š“«(]Eû{T  7àý/*9«C +endstream endobj 1167 0 obj <> endobj 1168 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1169 0 obj <>stream +hÞÔXÛrÛ6}×Wì#9Âdß[nÝiœÔR’¦N ’ÙJ¤*RuÜ?ê_vqáU¶ãN¦ÓédF„I{;çì2Ö““ogÖÕDD Ãx" +a¯&«ÉËùää‚…ùjB„ø/4‘$b £„ æÛIˆ§§Ì¸)‡ùÝäÆ;Ÿ^@L8;9{ñÞì}šÈ+×ûl»Í‹5\µÚ¯²…ò™–"k)&”PÃü|àÚÌ®¢îè÷{? ’0/Çcàº<Ôy¡*sÖt>‰yŠñ ,JÓOÂÛÈ#R4Ï1dÂøà9fD'$21â6©ÉB +ø'MðÚ3ÖúÈbëãYUƒ"½·»e¦WÌ«ÕÒ. ××Ô+|{îµWî¥ýâÖ½Äì5¤1Æ ¦ÿ ÜÞLtø\¦¸ÿ .ñ¬}iŸ,‹Þù2!ÔSîÈÊÙ+ g +crêd3&d“mÎÇÙþ hšúAB¸—,¤vƒ/ˆðšëó/ÿù«ÿßÃÛ?uí"I¨®\ØÔ.jQH +ÿ]WO7¸Î×WMÄÚ§Æ +®U¥œ‘ÆÛ>‹ð¦Z’†™Ž[’n T”NlÄXlðE!ÅCBêø¼]^\e[åÏí„2‚ÄmsR§K¡Ñ%o¶S‹|•« +ê[î†rú„”$io_Úè3û².O^Z„²Ð¯ÇD"×Û÷ikG˜÷íñª&Ö9ZÀ$Ie :…ÓÅ]DÕ}«üOTŠ§¢êô&1û^ïê¼,² dûõa«Šígµ‰‹†„sçép«Sêm¦µ”’ÄûÍfE™U°Ó÷¹¾_ëeÐ:çÓ ®–‡³0’íØ%Ä*¢W-0…‹Û,/Øи ÍH•ÇɸñÞù5ÚË´JnêöŠˆDiWÔÆe7ÛJßc¹L‰u`+Ÿ™&„H¼Í¯w>&×ÞԞßt½ˆ¤‰Å¢Y!c, Ôhl#´u[ªÕÝ•ª§U}–íF•ë¡™§©>÷Ì4.3¾öÙt5í"vµ +0aΡ؞Š®’ag{:›Ÿ¾EÒ¥=p†¨£Ò;a¨ê¬V(昙¡–þîäÙ­->¶yeƒTc2%‚u%lÝ”nkV,Aãæ“‚C…x+‹.èÂ9`99;B^ÒPשàÊâû#G0ïAe‹[ÍM@œ×GÁ'dÀëžÜ\Mç³A舛´Ç¬Fhj% Ë±Ýå`¥ù"4_"m©qZvvfȳì³Ù3Ÿ3» q#ìô¡JÌ bŠÌxyƒ ®a©|áõÐøѳ݂h)ÓÝ>Ô³Ë9b¶<|Ú('ŒŠ–T±-æ R$^¾×ㄧnÖúÆqŽ +Y—ÞGñ€*zÇÆÂ)ˆÎV½*WÑJ„ÌF"L°ÞúsL¶V&Rg‘0UÕù+´}”‘JÖIe0ДFT»l‘יƠÁ•D\áϾüœ°ØiŸMô¹d²™4å pôKã¸Ê©éH혲)³¥ ª¾…*ßú{õÁÇŸM¦©ˬά“(ã¡|ˆ»ICÀº„µ*°ŸK¬ æÊÐfQUín!â*›n &0®-ØÓ;rj :¡ÃÌ£àK;ÅK/ÇI£î©6™‘wïÓÔˆ5þjòEif Ò*Ñùµêœô‰“ç‹ü³NbëzyØî†ÝdR#_˜=,p_5&3”ŠTs'Õ£ª£SÑ‘P_\þ4=ùöÕ°ä1áT€> ž¦¥çÅ2_à[À°ø²v{b·k×>ù,DáC $Þv§µ(k”¬ªòuXÁ2g°ÌW¦‰§öÚÜδj[J­Ó#üõ€l:ˆ‰É…ÏÆ={tì¾k­tŽ®+Ò"æzC°_ÌÛ¨a`ï—Zé›ÙÙl€©€1Š¯ÕeŠ0Œž”eD¡ÅßG­“_‚5åº[4 6Ioá¼W¿T±¸|à (i½£A±ÏDqrTIåëéo§Wgž,gkN>sìiü5ö¨³'){tô0&q +†w“‡ž!ÌzXrs~wý?oÀë4®l{„аcØ5 {9ve:‹p©MA÷¥qÚLü!²¹Ü믭>¡=•ñÈ}Ò@IïíçAú¨Òõ?Lz3ñìÃÕü»éìòçéùÐÔ#£û ÏMøÑø·»P½ +endstream endobj 1170 0 obj <> endobj 1171 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1172 0 obj <>stream +hÞÔWËrÛ6Ýë+°$› +ƃÉ¥›Ø™t\%ã(í"邦 ™‰LI*‰ûGýËž €zæÕi:ŽgHX$Î}žsAÉV“‹§/%[õ£Y&r–ä†iÁ:;YN~˜O.®%“l¾œHÅþp“yƵb™\(6ßLP¸H +ÍæB&lþ~ò:zruÍRž³Ç=b/ºXæ\Gíª+7›ºY±gÍ`»eYÙø×ù°¤½¥”k6•\š”ÍŸL¦$3•_é=ô/]<•WQ vÛn‡º±½ÃºšOŒâ™AD†§†q¥‹¢`<É…H|l.\÷s•=DBèí"à]: +—„‚áa’±“cjç¢J½‹7e?°xjx½z»(i¥¢Á.ü‚Õt/¢&æi^û)¼ÔU÷á%åïB¦UEÿÈÄÿXPôIV`ÿ ,ÕµþÉb[ ìç8˹Œl€ìƒ½¶ ÆP—*A¹VÊdc²“ä4Ù2YÀZΓ¨˜*!ý2e±á&bl¼ýí?õÿ ¾û—j§3.©rb¬Þu¡ ]øïºz¹^³Ûz…v%±D3öìÖöÜÔÔoïb¥ñ£]ð‘˜[™rÜ2”Ïh ^4™9Ð×—E)(ÀèåC3”âùo“‹ù\ùí/Œç)-"5\'Aüt2õ:ª›-ll¢åû™®;ûûÖ6ÕÛȧ– ˜'j"ú“I´h·wkËœ©kã-%\ISøüs‘ +ã¡— X@º(ݼÈíœÿL–ú­‚¶EobýÑ$ôÆGŒ\BO5x¸Únl3ôACƒc`µâZ§Þ±¤pœŽ–cÞÐNoó$Ý÷[ˆ†F‰|½|k«zYÛeWY ÷–V¹Ø#ú†„ sˆ%C?&"Ì„vÉhwc‡ïYÝ°{×(hc4`²ä‡û³°_gA‹þàlŽý{»h°S¥ŒqYo­÷ƒæBè÷cäxŠd¬îÙ¶· v+%"Í%÷: Ì”¡eÕ}Ûöé.Ô¡wfxÆãÑÖªí: ýmb)PmŒËæ`ˆü]]²j;ô£“ïxֹǢëÎ-c­hlÆӲݱ’­ê´m\"½s°fN«8¥.€¬l\¤‚çˆtJ¡:˜¹´ŠÖõ¢j ˆ¡m׳%?€ÌÇü!=eÈ( 3n"çQS>—Hf9¸Œúˆa@ïÆO ã´¹ŒͧǀÈ"¤ étLmúzx`dÒ±%ŸQqôdÙY¶± éƒäæžAnE»H¹1AD²‘…u0k¬Êíz¸Ý®íGŽÈ˜˜|$£ ÎßÝ‘$§ ÜbÁ¡ÔCÀ‹ôïÞôìù g™ËW7óÛW7WG61d’_ŒirDŠX?”ƒ%æ{BøÁÄXlM¾Òœ.ÒQÊ„:5Ã@–ö-õG¹v­D›§ +<ËNh¦w3Hú¬TeÃZÛ¬p©,õµv}-q¥¶F+sv\DȘæ*=–ƒ¿!üˆèKÂ\ôO©?‚hœç*l»/»ïرÜRÂÕù趤ük;£[¹±g#`?=¾<4DúŸ€AÎÈ•ãîæúP;vùÐÖ{ýßñÅr]ð¾öœ×Hë(’FíûÈ3#Z9–VE7-XYA%ô ýB÷NÃΓ£:ú4}ðeÁW¹-˜FT¿  )inŠ¬£ÈK|,hÎÜ\]Ç2øýË2¡ðé`r¢öfßÏGBñ¼«W5xði‰P:Å¡ÅcLC&)”Ì¥‚òæÄ¢9Q‹j~®ÏoŸ=}6»¼92 ÿˆî«4ïL)Žì`ôžÍÛÏÚÊŠôTZÈšV§ÖÎãLÂLËä~&ŒçQ&PÈ.£J|[‘¨·þ¬FŒõþ¶êÐзY4Ìè«/:‡Ÿ¦pîLp‚þK€…£¥ý +endstream endobj 1173 0 obj <> endobj 1174 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1175 0 obj <>stream +hÞÔWÍrÛ6¾ë)p“ +!$ssl%ãÖu<2’ +’™H¤‡¤êºoÔ·ì.R¢ü÷ÐI;š!Øßo¿]p²š¼zwÉɪhIâ0!Q¢‰ Ic&ËÉ›lòê-'œdË $„ÊvÄÄ^‚-±×BÚr€xb$»6Zb†ÕõÏÕÈAM|¨†”-©o€¼Z"¯ dÛ(êj}_ÅŠ:š:@…º¯Å2€SÛ$m V•[l’vÌ{ŇR‘L¨1jk—wU—ÿa=Ë2ᶧ,Õ®âÛ! @ +gÍ'Z‚k hê@àÒÿ™:ò‚0 +Û|Bl¥'°½¨+è™ì¿Î›d\ËÀ0B¤=p•#¬&p‹nü1Øh “h/Kôs0ñ>ì"(ÃìzÑÏ¡oã•'HeW¹¸P.®#Niì³ZèPÔi,ÔÞaÕ'Ø3R‡+b W7CX¬,±Îd¾âk™õ‘ŒœYS/{jLö‹öCe˜Pˆ,°úzk^+2·Ï ;>ò–ç‚v`Ée VC‹‘kxâXràªÕk2Fã#DÄtÔsŒ¼Ï1—õ¶ D „¸¦æ ¢á)t§ÙÏS®Üç™ÇX&U÷ëÿòýÕüx6J¿dúò÷-å>ÉØ£jögêP©:ä2ÌEt äÅXA˜â=5Ó>ô‚3Sü£ÿÿp€ÇwøR˜L?êŒú4 \ÆSÖ~úæèìèüxv2JtÂÂø6ýPqÕºñnVå¦ü›?L]–ÚoOí/®àq맴²"]¹qM~c¶½kdwEàÃá TŠu]€ú­Ÿ:(×ËÔš"buˆçlvz>›?åggÎõ ‡QœZÖ¦Zu×Ï6 ›_ÿò”ú{7Ïô'¨?¡Czg‰9³ß6dµ®¿¸ÉÏf϶òãé|vröþÝéñw±»€:K!ɳã30­-WUkç˺ª Ü¡ÛÜl» ÂÃ)s¨gÙ™GU˜2cÚv_k|S‚È/Æ"*½Ùõ0ÐÓõsSö LzfòјMAÄŽr0$‚—„¿r!Óh +endstream endobj 1176 0 obj <> endobj 1177 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1178 0 obj <>stream +hÞÔX]“Û4}ϯ¸2lTK²e›·Ò]:…vÛÙMËC˃ë(Yƒcgl‡¥?‰ɽ’ü•–m†¦3±²‘î×9÷èºö«GOo컕V„)D©BkV»Õ·›Õ£ïØìVBBˆÿð!Ò„+ ‰ +y(asX…h…‡Q¦`Sà"lîWoÙåÕwóž4¦ï­DÚÞÒ((h nÔ‰žéŒå¥¦,C—àc”…tÜŸ¦î;/%ÚBrK®”ÆtŒÕùÁ›Ÿ'½¸EO5 ÅÈ«cìöhŠrWšú;]sjéx³(v§B¯{®_Xa ÙÙ½µé98_‘óµvÇ&yCÝLÓY:oÉP ° ÕÉ|³ÔFÅCí½.t‘äÇÂí‚ýM=F± dŠÆDMVø$E¸$Ig½ÿ¼‹¡øŠg©«¿]‘Æ’k+wËê³­ÙÝ_›þuw^Ñ~JÆ¿µ¿\ÈZ»­Œ“  ŒwÑÄCÂY4«²sûúöjé§3üF‰÷]Ÿ÷†èÁaƒYz@æN‡eü—$‹g~ôè':÷eͱ/­§„Çj~N çRZSçäõŠ¼†÷NÙ"€¡XXüì&À D¬ZB¶–ˆekÅåtg&S&·ê>ÿÍ&³ÙHw&ã™v—-'©5W±ßÂ,m˜o‘!=lM Ù€ô;æ´‡‡ˆ/Ý!Ý„—¸µhj¼ò +Ü{—·_Á²±ÌRfucW½·Øx±ƒÆèoa:ž½ Ÿ’)ôÀ¯Áîß— áì g©F²d8:°;l¬=޻ıÉD63"‘ZH¼<Qn¾T Í#õ߉x`MW¨ðÂ1nÖœ—Ïn7‹B&€eGïhÈ4Ý´¹ú FÓl–-0:æ4pâ8ŒC(6ˆ`¤k9tx£wyYsø÷N¿6Ï^<»~úgQ,Õ Ù6†ÖQ½¬8äP5{T%2•’Éì¨G³‚6 ¹Í­Üb±Z’”Úªýe¡jÞÆYµ§·4á¦N<¿7$4žjž >Œ)éÆT7fôŽä +Ïíðåå,þÇ‘ø-{Oª±p· 1“ð«†þL£JQ5E pÂ`¿¬ûÖÒ0$ê "éÛ^òQ1òpl­|¤ÌÒ>e˜eiÿ¡©GõHÓó +É3­ššF=ÒšahsP_ÄÌq"¼ù WºTdx˜œQÈøVÍS5;]öìñõãç/Ï阊O6….LÖ™ãdIGñeMÏ_V†~ÅÍͺr_;‰âËàP_q¶+á‹9DöäùË'?<Øt‡yÚL‘ ÌHØ/óv* YZxžåéÍË××—úNðÏ<ïÛáòäçP|äs–í«—?~þèq‘¬<Ïõh§){óO·k;¥/Å0½€† +endstream endobj 1179 0 obj <> endobj 1180 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[425.58 163.26 549 176.76]/Subtype/Link/Type/Annot>> endobj 1181 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 149.22 254.7 163.26]/Subtype/Link/Type/Annot>> endobj 1182 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1183 0 obj <>stream +hÞÔXÛrÛ6}×Wàl"W^úæ:vÆ×ÉØŠ›ŒÓV¢%v$ÒCRvýíOô/» €7YqÜ$m¦ã2ÁÝÅîÙ³»d9yñêBe= ‰xLtÅI•M®'?Ì&/Ždv=’pøƒEÄS’DŠ3.Él3á …q(2›Ã† Mfw“+úò蘓ÇϞ‘7U b¦h¹¬ÒÍ&/–ä¤h²ê:gÁ/³A“rš Sd*˜ ™½œLA ª™»êEÿ\S1IsCÎËm“YmeÍ&F'pŸ™0©’$!LÇœkw³P²(lŸÃ•™Ô£çàtˆ²áÆ?ë…„ÀC·—GËdg£4ÎÆÓ´nH0 YDßÞ,RÜIÚd ·!9® -f¨?ö“?TÍWþt+îªB‰_p«Äëë(÷ßÀdU¥{²ØÎrD14ó"k¯¯,¼2ˆŒõGgKF­·µÞõö_D$I0™¦ÉTrᶆ! )!íúôå›ýÿ +ï¾bìTÄFŽ·±S +…Gá¿kêÁzMÎó%À± €±&çYAr*ÄÛm ü3[°63}nEÒæVŒòlKbÇ7vÇMhXsÑç!^–ã=é"»¾;˚˛¼f¿õdÒÓÊP±§,ë¡°ó•',Ë(1Ü ¥&)ñ¼dœ(°DçjÞ+¾|sr6Ò(™v‡FÄKŽºI›l“ #³U¶£œÈÿ‰ +›¤¢Õ%»:H^“ò¦É­–ˆ™ákqûšŽÜke‘®IZ,È<-ȯÙÖÀUø"0Œ2ƒ7;~0­ÂMYe¤YÁ{e1÷—š*Å ‘Ê;n‘]ˆÝ«×”‘ˆZâR´§n›!¥)Ú0ï! `+Åd_¢ÞM÷E“þn5›Iw*¨Fän•ÏWÜæØ“¸>î éºR%4 Å`è«|醲@Ö`L €°)#Öºû'•ð³·§§Ÿèpc{6Jš’äËÂÕT¨à­SØSðGöŽã¡z¥6(@¶ö%Ó¡rÔÄбLÖã­ëû"•`ZÞoÇêËíX\€Ø?)v®¼¢„7+’:ŸCð—Y¹É\àEÒG¤mS¸ï 9ú”ûzR^…³TƒÍJd(a㌙Jƒ‡©æ3äò¸iÅ¥3¦mð¢X8k>™.MÛYT¾¯w‹”OžÒMÑš¢)Ê_Ù|ÑÝõÚ¤q²ÇY#ýX›øÃ,0FÏTŒ¯ÎdÏ`OÊí½¬YdÝ&89Ž;c®èe_L¡‚ä]o³ïÇ?:@ƒîã7°)™Ëa2ÞµZµ£X>&èhÅnˆ>*± ¼nFŽÀ¡€~?+×xçtÑÊþr"A°"5ÐûUÀõ¹ÇÁ\w&{u–‘?^#$p¼Ë {‡‹Ãr‘Õ¶cœFXÇbÏ"X¸Fc¡µºçúZcd‚sœ¡ðù!Î^^¿ò#¶— -PÆàêg.½I—¾ß Ô C‚hA?ÀäùÑÅÑläïˆÅÂ웦p<„7ÞÂDRœ+˜jRdÍXßÔI@èhH XøâðàìQ;#û@c“Ø“òx ðäÕÙÁé£*©¶Šù2ÇãÏkÚ@ö׈°<4 èS=fÓìäèõññ§Ý0`îÞ MžMWùrEÊÊî×%–à˜Þ9C<ÿ`Œ²© +endstream endobj 1184 0 obj <> endobj 1185 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1186 0 obj <>stream +hÞÔXÛrÛ6}×Wà‘L,„HÌ[j;wRÇc+®3NŠ’ØJ¤†„ìè“ú—ÝÀ«ä4Í$ét<#’&°—³»gdd9yñó #Ëz" ½ˆø‘$Â#U6YL~šM^¼f„‘ÙbÂ8ñà., +©à$õ8™m&H¡ž 2KáÆc>™=Nî³ó×$ 9}qúü9¹ª\Qá”Ë*ÙlòbI. +•U‹$ÍÜßg¿€&a4T)£Ldv6™‚@T“š;щþ­r§,¤ÜÉA ¹.w*/²ZË:ŸM$§¡$ $¡\ÄqL¨yžo|Óîê—à1åþà%‚ „~ ·pÄ„˜ÀK?j|GÃxk"Œ‰o’Zw*iè¼ÛμãŽÊææ†äxÂ¥c—ýjUéÊ.âæê±\’ãÞãU ÷~Ãþ+¸YUiÞÌw©"·nQædVdmõ•…UÑPyˆ5ç2lÀöý1ØÇî4¢¾O¹ÇÌm@\I¥CHsýò˾ôÿ+¼}Ä؉2Œœ×ÄN´YÈl~_S_­×ä:_Bºb*—A2Öä:«3¨MùöàrÿÌæ´)L[[!×µ%P:®‘c®…2”#žA=tÏ©U¢vµ;û£cÆ)”­wH<Ò[ÞnU^Éš$Õr·É +EÔ*Q¤Þfi¾È³š 4æSÉzBº’`ZˆZed»æÒj…{€EÐÛtf¢‘¤\܆K§ÊÕŽ²œåŒÝCŽ(d§.;0{›”Ühk÷Äg`\‡ªƯÓ}ùîÍ›@œúC+aQ%É—EYe`c^·ØPc.óhd89| +×{çÖ•’FNâÂÏz—½´îIYdÆP`ÿð8B÷ŽEgá +éDæÃe½.]ÀÍ#´‹—·6I€‰h(Ä€†ĶÙ¼¸3~[t@ ôàqˆymÅQ›4Ô˜eE¼@¡`fTmRJ'’§Ýmiz¤áV§Áh˜Pë2MPæ g¬¨.gl:ÚÄ”ýœÁÊS¦)´9s± {0c€.Èpvm€†¸¢ Àx²Ø¢àX±5­ãt²2¢Ü‘ÂÍó£V¤çymóc +e£Í³ KX\qëC3è G†õÎA¡G¥wZ]Æ!óx™©[z£ª‘[=¾°®mä?ïWë*>À‰ç‡ºÈ uÀC£x‚¹ApÐÛ«‹ËÏP\SrÜ”Á<Î »Íì*396õòn/k²¯)¯‰‰95Ödƥƀ‚ñð˜èHÙ‡q&ŠøÀð|ûå )ÛæíÅ>éœ`p}@.W+[G§ž’ïÛŠD“3f÷Ðù”fÛÍ r9¢aÜÒ€óÎì²Ê½1t‹-ä¨UZ­mÝœÇUž®ˆJþD20 2øÅP× +c(£%P~|ÀÚ›7p†È‹ZeÉ]H +xRÙf†C  g£`€dÙç-Dé3É$âþ1õ=ÊåA š| ZÊ4”yV¶}¢˜“¬ý˜µÃ†<æ§æ#ôsWgs²1$ûÊ"µ2.‡Ÿ +Ð+25*ä©<”wö\½Ù*ù¤Í¸Ùœ*Ío |}{{~= ìÞãþÙÜý©*Qfò†¡h•`j'oäh”êõX×l3W 3WA‡±ý3Õ§•ϼ>\2{èé‡fE6IZ•®ô8Éá—\(ìE©t‹Ð-]‹5›f8av4Þ”f ÓúcÐ?sòûlììÝ©QvªÜ€‹)LåšR¥›f³yŒg·ØIUÞ Ý¢ÞDõŽmi¹ÙTzæí$i75‘€Ýæ|föúâîüìÇÌk''‹P‡*b%)ü61@È;ÄG¿Ù¹0C0fÏÆ'¨ÝÈÅHj#+ŽÏüì§Áf¼9)7hÃRÒ÷ŽŸÓôñ«7¯NÿÒ`|0û"POÀx}þÞáWJu<ähDá |b¾3l±­/{@Cãå¸roVê³?—j¿ý-ÀkóN™ +endstream endobj 1187 0 obj <> endobj 1188 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1189 0 obj <>stream +hÞÔXÛnÛF}×Wì㲉6{!—dÞRÇN]¸N`+q§ŒDI,$Ñ©¸ú¤þegö›dÇAÐ…“6—Ù3sÎÌ® ‹Ñ‹7ׂ,ª‘V$æ M'Û|4ý<½8DÉ|$$áð‘ÄLI+θ$“õˆƒÆÃT‘Én¸Éä~tK_Ÿž‘ˆ%ääÅɳgäÝ6 S´\l³õºØ,Èù¦Î·ólš¿O~…/)û¥ˆ)2LèˆL^Æ`?3µwª5}³ Æ"f’`†\•»ºØ䕱u:Ea +ñhi¤JÓ”°0á<´‘iÉbíŸCÈL†½ç€¢ÌCˆ¸Á#5(¤†‰=“2²>^dUM‚±f1}7ËðNÒ:ŸÙRà5¥›€EÔ-ûÍ-ÚN—n‘´W."ˆUi‰à=^C ?ŒSxÿÜ‚­miŸÌvÓš|â„ š;“•û^¹qƒÌ¬8‚-¥Ž=Úa8Dû/"Ò4',¤éXrao#h¦)!þúô˾ôÿk¼ùs§b&0sÜçN5U(\þ³®¾Z­ÈU±€rE"Ö€b¬ÈU^å@N…õö5 +þ™Ï˜g¦ãV, ·4(Ê#b u¬;BcêRc”Üø +tEA9.vë|SWNK´5Å-™RFIP¢LiÓU¶Ï·—Ù:&tu' £ÊVtdâ âÈÓ·wuQn²ɶö£¤^f5©îòi1/òÊæF‚„É®=g¥^æd• ž Ý"…KÀ¯-jÞ/‹é’à’¯"hQ…$ÝÁá±™‰ì9‹€Ÿ¹+6dÎ"‚—¹6Þí‰Ã'²1ƒ}î|ä ¦ôòýÅEÉB» K5ò .u¢°5êš‚ËŽé¦Üšg9Äd€C¸*³ÿüìsóîÆbýŽÉ"ígRµîšt~\Y]`!‹Ân`<óØÙdÚǵñéÀÄ£"oÂ9ãüXþ¸ËøcÅÄñŽˆ7Žæ×MñañÜ-]}UÅÊf‘—ë¼6¨UDÚä’û–Í]ËÆš·}€I*çRÄžQcŸ‰M)B}ä)BÄúij³Tn  J/2KuëŒp…'ÂzóM¢¡w6¬ˆ¥¼K6ßÃbåhWÚi!¤èE†vûáá#ô° ÏÓÍÚîóM´5Ìêæ4¯_=sª—Oiè ”*I±öâT ÌšâàYd=‹àIÒ‘ÆQ£0U€¬vùËþ ¥×ÇjÓ…ÀdìžÒËžçmÑZ·éóÁ‹‘îZ½é¿Éo½ÝîzðzÒévOyÿô¨ïO~ý¬;ŒJßkàf`@|·…ë¡…ÂSX™a l•Û¾9`¬<ø³Ó¾a´Œ<{»ä¥°eW=ÄÛcò ¬Ù.vÈXÃ-0btl»c 2Êii߉ڀÐIÏh\jºFØ!ÇšÝÒ£]Öpÿx¿„¹W}G»we͉ìãÜ Ðí‡÷?~fkÃlø…ÄvØîa†pŠ[­ø8T …¦y $Œf°i€.EW«g…ˆÞÃÞì%j;g±B4#÷{°+?Òö¬‰O=!)â €ÃÒªlm™Šâ&ãí+Mw³Ôðõ+kUN{íÀgÁÏ@ó»ƒoŒ©mŒi[=çs²3è‚ ºkÔÇ¿Ór>Â:Å’äè|ê·iω›'ËY1Üì°>ªšt"¯òvŠL†ôž®7 £Ý3àˆ r#9Ôþ úòíJ—èhçóàì±¹0NúŠ¶_þ +‰8˜ñ;ÊÅ}qÄ. ¼h +ÂÕ•ˆZ¸:è  +‰ð¥€1Íòy±É‘\iƒßè(–&v¯cî`»#RÆ·;*:Ú‚û˼¾ ò5‡mWÝoè½m“…Htvmõ}Â3§' ž€ 2©ÌX1LåÍéù›_&ƒ’ÔCºùÔ¢Ða’12qÌêî<ä¿¥“Öh8ø--yØ̬&æ÷ǼÙ"™§Ù†|ÉÉ®Êg š+”Ωc?žlõØo¤·9Þr<Ç;¦æÌEÁö-#{›£(Zr {QÅd+êqg„ÜÃLú§ {2‘v9NÛÃ&¼„B](éêÂ:sK {–šÚÊ05ñ™Ú³Æ¡ðl‡ãILq³r÷e•÷•8•Õ͆ ²;ë[z‘`…áÅWYã”O{#Þç ?q4u(a< #Øž›³2zòöÃéU/»)<:–]—¤.+³Ú*7j™aÑ6Êí“Í;)lpÍ]fy©,/ÛMÍÔt»Ï'B¸ä®iÆò1…Ú’u6Ý–ŠŒIøMÎk¥´)k¬&+­ÆÌ …{ú '­ëÒ +‚ù~ŠG)‘/Ø4RØ~Qg³]]®!Ä)¨H¹ªp²+ðÌ´=ÅÞŸÒi]x¤=Íë(zw;0-×k€Ê¨©l”Èåll3û»¨3zž<}ýï$¬¡§o>-ªˆ•F¤ð 1€?ÄÇ<Ù ÁŒÉOÃN™4¦½]̤0q¶í¹ÌØÑ°…ô“–G–’Ì´ÓšÓRýÝÅ«“o@ û“@}Λùm‡'ÊõñrÐ>[ú¡"D f;»_ÖOê[ Wd–ìíJ3;jº«›Ó½¿É®O +endstream endobj 1190 0 obj <> endobj 1191 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1192 0 obj <>stream +hÞÔXÛ’Û¸}×Wà‘ôŽ`à5û4;¶S›½Ô–­uœZ§R +Ò0¦È)Zy’/Ú¿ÜÓH‘šqv^R©ØU‡ݧOŸnH°ýêåŸß ¶V©bY”³8O™ŠX¯W»Õ7›ÕË7‚ ¶Ù­„dþãKäW’e*â‘d›Ã*‚Å…b› +‘ˆÙæ´ú%xõú KxÎn^Þ|õû©EÎUÐíûòp¨Û=û¶5ºß••ÿ¾ù vRn§„+¶\¤ Û¼Z­a¶©Ü•:›þk®EÆePà {ÛMÝêÁÚz½Y¥’g)"Jy’2.UQŒÇyÅ.6®}ˆˆ¹Œ-Pö!žà(,ÃÃ8c'Çää¢Lœ‹ß—ƒaá:åYðóý¶¤+½u¬¦ï"hCž~Ù~Q_ÝùEÒ}G"A¨*•ô]Ó7ÝÊâ¬Àû?á¶úÎ=Ù+ÃÞ‡YÎE ½ÉÁï×µ~3$ÆBÖR¦Ùv_‚ýE®sÅZFÂ]&,Ly06~?ÿë¾ôÿ×øô'åNe\Pæ¢1wjb¡ð,üïºzÝ4ìm½]©M(@ƽՃFm*âÛ¯¡T¸©·|,L_[™´µ•BPþƒÖ`aš¥3±¼L)ÊÈx YQ ãþxЭ¼”¤ÎÈ-¹RVHH¡è½à¤á± 7ÿ©‰Kºw$šxD‹|rŸL`€Ûk`£ ƒìQŽEäs\·Ûº*ÍqiÆŒzØ.T’ô“’ÞOYν'^-Aé“l͉ªlÙ­fõ¾ízT‚ mA +|R”S®òd–«)U.H‚†é‘À:1‡"K’b–1aÕ<`ÃŒÊ>Lz+çQúdz}®(°äØl)Ók µe-ÑFRñʦy‹‚r‰›²ßkÓºàYvÉÀx¼ý“UÔTêjê 7AûÆ#/y.±Ñ_x>“§fôîÝ•ý™Žaö¨õ¿ï4ÑÌà2à,/©2V‹kíÁŒ¶ò]–¹…Ñ+Δ¼ŸD^‹ß„J€@üñ¸jì8èP¤ÁnÀ“ÚŽFU×pePT‹çÉœØçž½Ð>Vöšíu ñÍÀRJ+‘-CóÑA›»n{æ™›¢\fÜ» ¨àˆ/Q½ä7Íä™é»¦!/g@çfÌÅÂÍK¹C%Ð[§PP¯ÀtãkÒ:@Ä°ŠpÑÑxÔÛüÜjš§œûn›§E?·ôz86Î0Á+IH]RRÕ˜ôw¤´y¸Gí` 0‰y0£ŠÇc[¿åçú‚7VÎÉøÁ…»ð<Ÿ¦ˆ®XÙnÏAD"yrÒ¥$x"·aåvë,zºZ¸,“!'#òÈÎÂÙ±¾¢Ìr–€Wì^÷º$i:¸ŠÂgù:ÏØÙ,:ÒôP$H=exlÒŠ¹ëÓöŠFâ4£^ƒV}Ù¥·zwúQ›¦lB¬>-GþEÃUAö`eÑ;§c…ûs•´º¼è°ž9ÏÄ4).ϼËÎa¼{hMùÙ®Þl¤[ŽŒ¤îèCöhd.ÕÒ‚GÔ°­Ó`Jö§›T©-Ú“FDç&tfZëöàü¢<1qâ´SÌeȩ¤NîGôcÝ΃%%tý‘gã¦Ù.úéaW7šTQÜ£;7/蜑ç3é{¦‰g×Q ú§¥ô¡2ÒÅ ·D‰ËÌ?ý2È#i„C†bZN‰êqÆd-«æ±šË(½Tó‰™Á4ë¿þ\îIJ6få'²ÆȱÃ4L:aòHÊ +ö Çâ,nšŽvœhÂÐt*‚Ïô‡ìnÔ²ý +Ç{êUéÊ ÔS¢>Î…Ms[V¡À@|b½ûÉÈYì€ùp¯/Ú J=R šúVvsûiƒå‹Øs®òsCÍÆÍ•ë(ÔG ôöD¢ž|™nã‘JÓ¤(zªH¼íbPxä´æ8”{{\:Fz¦ÖbfsxöǶ¢¾3àÞ؉왚ŗå_ÄØ^ºÄN ÏQ4£ ˜›o „×Mi'Äp_ÿÃA}õtk £¤ýÚHŸêŸÝ¿*M‰ É€½þ²[ (:÷vvï`òûzùc+a‚¬p`/^T]׸ÂîÒõßž±þ}‰òÅݯǟ2~`_£@ +endstream endobj 1193 0 obj <> endobj 1194 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1195 0 obj <>stream +hÞÔVÛrÛ6}çWlù: €7qëƒÓ÷ÀfPJcf¼ ­=™Á0üàÂû>µø6£L@¸4¢Pæ6„ nw ¼4ÎÉîp\Ú‡ÁÖàÕ+8.-Þ§6)æe¼\¦ùöóZ–³8‘Ö§ð=F²›H.µ¡Ç)÷\wª0I³³¯ *­÷© )ÂÀ¨XÕi.+5 × °ºPaAÔé3æ4•y‚ú^w%SáܸGF!¶¾ÄŠ×|š…ðÒéwÅ«ÌÄ:Gá69~ˆ«¬žG}2¹˜Æj'H-§ÍRµ$·¨KZ³ƒÖ¨L­‘hVÆ]¬Õö„ú¡öjõTùŽ ÿ1n«,š›é*©áÄòû”ÙBVm¼"oƒáËh®˜"[ÏïØvœÛlÿ <¬^Ÿ:$è Æ›­ –G=Э_þuÓÿ/øú§z;Û§\½ëÞÎ^w!o»ðeSÝÉ2¥slW5ˆµÅ±+ÉJâpÚªß~µ„‡rJ»ÉlgËz¶ŠŽs¥6Lhµa]‘[[˜,dòÒÔ õ× ‰sæ‘Êb’¢,eR_kz¦Fx·õG´Œˆvúá5LåìòPÖƒŸ¿àqˆ‡‘¿kçp£uÑl¸(Ó¼žEÄ u¼ +òëkêbj‰Ç%J_\7’ç¡€:üf*—eŠ:6GKE¹YÛÚ´wŸíµJY¯Êøv—¡¾üà +Qµ +ê0äqíT¢N¢SS与Ëó¬"bGžo?DÑàÝPQüãçÑpé²»'DR(ÊS ‘¤ÈQ “E\nlèË8ËŠ$"Uú›,:}¥o6Ük ·hAÏžº~»ê$ÎVò&œ:VˆwáðF#ÞwƒQ$»aùõs.kS5Õmë‰|oPä96oª’Î|Ÿ››`îà{ô7“=ÿñ™à‹wñ*Sc1ZeCŒ&†Ü|ðñ"•Ù™ÖÓkžŒÇÏz× = êèhwÿ°6 ”ª¼’Œ×j\×¼T:yHQƒÄS²ï†íœ}ÂU]NWÆŽÇŒ™9œÝr°µƒã<ìqzÎo…`ß qÓaü¦1ß蘆™c<-P]#"6byÚ,gÏ3U]å—O£ç€æÓ£\¶íøxÀï©t£)“qøþhÍoèä?W€Df™£4àx‡7*p÷Ñþk䜞r݈Oúöhf>Úýæ*jÞ¾úêöø¯Ó_ 8Iæ +endstream endobj 1196 0 obj <> endobj 1197 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1198 0 obj <>stream +hÞÜVmOÛHþî_1Ê'»Å›}±×¶ªûBÚ£¥4Jš–Tȵ7Á§`#Ûiï/Ý¿¼Y¿ÈA)=ª¾É;™}æ}+£ÿbÊ`UR€G}p| ‚B¡Œ¥±ýç „Kƒq ø‡ó="8x‚Ê!¼0(¢ê Ê?§æÁè9¸Ä‡aøô)Œ ‹ùD˜ùªˆ..Òl‡Y¥Še+ëCø5‰F“KØŒ0éBx`بÕÄ %® ß–Í<ÂÍa`’oª4Se5 + ɉ'Ñ#I\ „‹ €8>¥Nã[ín}‰îܸĀhQ_¢ÃÛpuÀKÇï|׆ñ­‰ÜmL<ŠÊ +,[Ïœ]&‘¦¸Y©¤! Õg`fqÍVìu+TÄç­oNÊ\tUH®hZŸžöÞñ|?F±Š¼¹I6q'–çfª²lõåY« S‡ŠêXs.½.ØŽ³ì€eûÄ1›SÖ.X’H ;¿þøᢿ.øö§ÎðÓ™£]îĶ +Y[…ß×ÔÁz “t…åªû°²c U*ìM¡ëí“Å2UBºÆl{ËãuoI(ÛY†¼ dÓišÀÁ"=œ9ÎÕ°¡¼6´s`øçÈ’æðÕÙd4]˜…*Ö³kNu»´²x‹²ð$jùùXUÃ<ËT\¥9r³…Ù{/üe½=è½ÀíÂ'÷éÚJìj8¹L5ðÉÙÙ³}q6Ÿ3Jüxvt´¶@¶šÐ_ý©ñB…d;X6wh€-\ËöÆGƒá衘¸qèpÎôšåö­@ßäÉtó1Ão!·¨Ð§élŸµî<(Pµ!Ä +ÿ2fTÞ´®ß‡Aêïèâr­`™ã„G(µÚ¬£Þ¦…^ q”ÁG¥Í[æ›,4ƒê\]™€“›/´/u¦³¦íV3'Ryw…Œ£ê|”% sa!ÿÎÂzx8óòî}aÆ=ÜìÝ)«õÚÑCp<`ÍüoÒ~¶àtsèq›ôÖýà>æ~¸Uƒøî~Ö×m6|q}¹u› Ù¿ÛrÓ1«•·K­Ûh:[5õ^ƒÆ:(·iüâ +»Ó<üì_©~J€ +endstream endobj 1199 0 obj <> endobj 1200 0 obj <>/Border[0 0 0]/Rect[85.68 511.26 118.32 524.76]/Subtype/Link/Type/Annot>> endobj 1201 0 obj <> endobj 1202 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1203 0 obj <>stream +hÞÔX]oã6úè_ÁG©­9â—(µèC7“ÙvwÚ$Þö¡SŠM'.9äÍôaÅîŸè¿ì¹$õe'ƒv‹¢L$[Ô%ïá¹çZ°ÛÅ‹¿^ vÛ.rÅlV0]äLe¬q‹íâ/«Å‹W‚ ¶Ú.„dþá" +Ë•dVe<“lu¿È…gºTlµÆM&4[=.~H^^¾b†ìâÅÅ'Ÿ°7M* +®’ÃmSÝßïê[öuݹf[­]úãêo˜I…™ Wl)¸È [½\,¦Y‡;5†þ¾I—Âr™ì†]ŽÝ®v­u¹Z]"Ÿœ›œq©Ê²d\Y¦Cf¹ä6ïŸ#e.õì9!@”ˆŒôÏ|øH{§,´sY¿wj`¡ˆ,ü}—úå~Ï®v· +b— +±eW®u(NE|ûW*¾tÞWf¬-+}måP”AlV+4 äe*n ,¹…èèQm2éÕ&ë“dÒ¦XÑlã¶ßºîúxS»î²ÞàÛ·ÉÛôó Û3ªÝ—ñÅ‹¯.1äâï?]]^¿M¦»úø©Ðˆˆèírö!:Œ865Ë>ÿwT½^_‹ ¯I‹"•^^|ŽYR¾É•»=}¿k £éêçQ¡0kÇ k=9[ݹ3$åÿŽ¤˜L¬úLÌ9’ØìÃíuµgU½ñ zÀ€Uu®ä:=otQ¾?4Žö¥f‡zíˆnCLŸWac^ÙSòíåêzFuÉõdíy?.O×ÎÙ«fE꨷¿Ô]õ3ûiEÆ­4“H}µi#ù=ËéíÜ“ƒÜKºTžýÕ J +99F¾dž —v^Ø÷¦¤JsÊZŠ,N“ú´§$ì’õ  <³ÑˆIë§icÿ!Íú/M. Õ¶ŠÛ‚Ó9ÌEmÎÄí‘i“¬'Š$½ÃKhó(ëCd¥Yœ‰×—¯^D¯«úöXÝ:tŠmJE›‚?«OÍ MkÇb—#xÜOK»a¨&å”u~Xòå|a¼ÔC #b‘5©Fãr(s™„’ÀRRÝdXÒî=â3²e€dV2÷)ŠrŸ.5¨3ˆGMÔÖA³#QÒùârøÿ¸ëî&èµ!ìiÅ Mýt¸KäŽûÌšÞcÿ,¶Š|©,ª ‹ŠdÑCeþ´]¨KlŒx¢ÀG¤!?$Ñ5èÆup$:qnh_ÒŽ´±}Ï‚3™-N%<Ö‘ðªC<²gÒž‰<ðB2È· ŸÞ¥Kˆ{uÿ°GS=lý¦Ñƒ¼œí÷¡)à¬{L¨߹ƥôfòiJ¸0_½Rt ÀIM[_¿ä@J +y^¾ ++`ZSC1ä•E,'Žâ¬e]¾ó© ³÷ýìB–ÔTŸ"ÊÉé óO½—£aŒ¨éTù|¼¢u–ò)±!ʤ/=/Jy¢Îeâü\IMvÎSÀDó,Šž9}÷ÛÕëýqÓw@Qžw¤ˆv°à¨‘¤D¯}Ô– y²ßRaðù‘Ç‘Ä…:ëñ°‰4ª]ãׯë³P›ö)M'Öl<²»ðÑLF¤ ;ßc»Ä`¦š‹òyQ|Bg ·rÀ(1ЖÔnˆý\ÊæS.½/q踬>oŽm÷óaW_ê:¸Ø¹‘Fã)Gù]1úòãFùHfGœsµ'å˜É}þžÕŸ- +>ž¦q— ',OªH U-žWû@I¢¶JÚ”ÚŽát èw|sjü„:7~Ùl <°ƙaH¶ðËëµkÛíqÏËýK<ªþ KÞØ®)úç¾ãQš$¶T¨A‘t'þdzÞ’²§Žm2v‡vt-«‚/81õŠ~˜ú?zúÁƒE͘Úâ>äwÈI*.ÍÜI†m¸ö®Ù¿òÌ1ÈWÐpB§סÃáÜ;÷'o“ð%ç‡òõ¡†YZ㻪ù¸Ç'SB¥ +Ó•Egÿ%]æÉCtÃῲBO(…S{ì:¿ 0h"Ù +endstream endobj 1204 0 obj <> endobj 1205 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1206 0 obj <>stream +hÞÔWÛrÛ6}×WàL#$ò–ÆN›Ž›dl&i'é#Á2;é’T]}Rÿ²IQ²cg&í´͈ìåìîÙ… «Ù“ï.Yµ3­HÊ3gš(N;»œ}›Ïž¼Dür&$áøà!²”)IRÅ—$ßÌ8¤0Eò\Ä$¿™} '§/HÂ2òüÉóo¾!ošHdLÑzÕ›MY­È˪³Íe±°Ñ/ùФ‚¦„)2Lè„ä'³9:5‹°R{Ñï›h.R&i 1ä¼Þvee[/ë4ŸiÉR 4K4aRc‹3Îãà›w׿„ÇLÆ/ˆÛ üK8<Âa<†àeœ ¾;Ãäh¢L‚‰gEÛ‘h®YJß^/ ·’´³Ë° ¥{ZE,¡ý¶ûMÍâªß$Ó‹®*-Ý·vOã¼Sƒóo°„¬¦o–ÛEGÞEiƵ½È¶×WW½2ÆCÅÖRêt;ŽÁþ“m‹©™K.Â2!‘fš2<¿üñ¯oýÿ +ºØ©” 9>ÄNY(ú,ügM}¶^“ór…tuuØEÉØ’sÛZÔ¦rùö{$þ´K6f_[©ôµ¥A(÷p 6êTOxÆç¥v^òàà3ЊB:®¶mO%:BrK¦”'ÆwŒv»kå¿îùF`‹rM4\\ÛEyYÚ–tWÆ®¶ë¢!7¥£Á2ZF΃ϼdáÊ‘ÞŽx´c$40e–MxiÔ"EíãàzkŸ²¡bçn[çÇ8˜·#ueI}ém¼Œda5â‘ë:uãíñ>¬àVÌdq¿rä&¦=Á9¥ÉÄÜ¥½¼ye»7‘l´è®N«å¡ÅÑSYÖGo`ß"¤§Š³Õ­|4xœp3QÞƒÿ¾Ç^xìA¢«C ›b_|$4©½VÒvEg]º° ·Ça.8ËÐ{“ûÖ“ŽêéÅ®êŠ?ü‘<—áŒaF‡žàÎai˜Š{ä¤÷÷@ïÈÒFšìjéÇèÁ@ÈÌ \ôE7 Bæ‚pVD’£Îv‘på÷ùH´F.ƒÈù “lïÛjæšjKŠ!S’!MÒ'#ßãröìçÓóƒ’RôB>Ÿäcä{ù`™ìÏŠût ð&¹C?2)[TíoÛ²±K¯Î°ÌLúÓ¢Z’EQ‘O–l[lÜÔEjâwd.S_‡®ŒÇNêblùè­ KÊêvB'¾öûŒŽMò¹ŒNÁÒ“èß–Ñ‚¥iò•)-ƒêÁŒ>+v¶ùHCcb¹æ îƤXÔæ¡N\Í#rÈÓ.îÒìk^%k7Ñk&š¾*6ý 8Z +ÞLÕ4éc,T7:ž0šî- é!‘bnô-åe›{õ×C1jcLZœÜË}M/MÌ×ûÞlòµ­Üã.×¥Ðfê:Èdúƒ’"F,÷%?(ù’æ9d­Ï9„á𡸧…ª±…fwµP„U 4ã,…ÕýhH©èbÞ”Ù´ºo67WåâŠt‘c@ hÔº® ùPÁ㌲CúšC¬ˆ+¦ÒäˆÅž¿~wÄ0)Ó{„P·}):ïP˜Ð[½:Ãâ ‰ ÞŒüRÕ£˜ëÉn8JœûtI>ERNCṽ£kÐxÁ +m å )¶]½)ºráå˜íÑ ¸‘º#á~¥ø£ˆðµèJè±²d¬Æ'Ì´¨7b‹ ǹ¤G½`îáÁÑ€$}ñò§Ó“ÿ6~Ù€Ÿ "“(©€œtÈ=v"9ÖÛȶCoX #¬ìrx¹ÃÔ–õ:óGA‹ɹW3À¸˜1hÓdÙè­t=Dx’«ç¯ßæ÷Ý·&¬|žß»o:x .cnÄRL0¢éËáïî˜~怯Ðÿú(¨ø¨gê¡M‹»c‡Ä>{»º^{lbŸ‚îÊñD@çÕë‹ï_žž=ŒÏ¾ußÎ÷÷0-L;ÌpØ5Ý›riIkW~ÈèGoßÜ‘£ÔÛ_ª}RÐÊú¹Ä¥s{UÚõ7$7¤¿— à +endstream endobj 1207 0 obj <> endobj 1208 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1209 0 obj <>stream +hÞÔX]“›F}ׯèÇ&1mºÈ›;[Þr¼S¶'åÙ¬A‰&y¢ýGû/÷ÜîÒÌŽR©ÔT 4¢ï÷=÷\$Û,žÿã½d›ýÂh–F‹3ÃtÄÚr±^|»\<ÿ^2É–ë…T,Â.2K…V,Õ‘ˆ[Þ."HQœk¶\á&’1[Þ/>ò—¯¾g‰ÈØwÏ¿ûúkvÕ2š7›¶¸½­ê {]we».Veðïå?¡I;M‰Ð,”Bš„-_.B$5+w§O¢?´A(S¡x1ì]s誺Ü[Y¯–‹$Îá‰aBé<Ï™ˆ³(ŠgF‰Ôô¿Ãe¡âÉïˆDÛáñÜF!gø1ÎzçÉ25بgã›bß± 4"å?ÞÝt§xWÞ¸VÑ5çu îûÁ?Ô®¶þ!宑Là«6Š¾HãÿIîÇiŽóW¸…¬¶q¿ÜVû)H3!yéEî½¾¦öÊ«ˆ‚­”IûhÇñ<Úÿe2σ01ÏCIw›°ÀÃë¯O¿üåþ}…_)w:’2õ¹ÓCJ_…®©/v;ö®Ú \©»@¢÷ì]¹/Ñœšêís 4þYÞˆ¾3}o¥Êö–¢œÀÆÌÁšÔ\šˆüãÕ~YÜAÙò×€H%иÑ9z¨Ìžù×]W5u±cE»9Ü–uǺmV… ‰8NFgÇ4e\8ïè=Εì·@æè†2P8Ë÷”¸6í ó°–8«2‘('8:™¿|qõêÝÄx}R®z@}>c÷[´1’¯ ·0¡¹Ó*`@óìÔ¹²¿+WÕº²Öu¡.€yÆÿèت©»jshHe,’|ÙK˼8v_µ%Û—ÈjÏVmYåØaOï,óbȲô,´$“$‘%7å:Ð +ñ+»Žõ±>øÏ® (;\œPkìfÒKËœ´ŸpçÁëîP~ÃÞ[¿¬©KÖ¬­\è4å¤dý"sÖÊxH¾ÛáÓðûÓ¦Þ|Ó§Ö—+E>Õðµ5‰ª4>¥¹=ìÊ·Åmùh™Ê¡LóÇÊt”?[±±Èò‘=€ŸÂÓ$§Ó$»ì I‚¤SXùƒIí¶V³ÂØ×Æ<å`ë «›šr«RÊIŸ[…/› Á's(”Q«\s=séhëËaN„œTpÖw´·ò:TA÷ÑV!>©L¦ÍŸ`adÒÛß¼™èBå>Ö5¬ÚÔ "ÞmÔ>¯‚½^³c Ð$(¶.‡S<¨Dgµ÷.ØûŽ>²‚M"ŸÒs¡ë qÊæÕè•9ì9Ð@Ømâ™Ëù¾/ÈãÜ© ‹&*ŨüeÚ#-šO[$%À3¼¥"v·³îÓC ò‡'B;¶‰Û€…`UÐ~Šñà>2ä¤ôTX‹Ü^QÀ:Ç;Nf¡Ã†ç]Ó>³M Þ#s=Ö5²À´‚™Û¢ýê«YR‘©DŸ™pGÛL—ŸÏÍIznb”ÆòO3㗿̌ϴ‹s:³@™D ât`ˆN ph4†z4óÒ_´°3æ^÷S‹ÀíÔ˜HY T xpB•ÁW¤oØQéEEÂßø.Xè9&—ä·Ÿ€œÊ»¦²ÚÁÞ“\@ÏNa%u¿B1hPÑžK„ÊæHæ§lÉîÐìš[´½&}ª)sžN½£~úÙ=›\v”O[Jœ %9‰øe+dY&—v"·ãÏ¢t&~)2æl À&Añ£Ç­›Vé>‹Ì=Gù +` Z7Jë(PŸ *³§lp¦ßjŸÀýúbÆ*{Žd^¬/n›|rÓïH¯R$Ò»µRË9“!‘ãè&EÀÒhÌ)Ç'Ì·Þ™û1Üï\`œôZôøÜ;²Ž¯. 6ÄÎTA2šæ=ÑWJ®xÆîççg7Á +låš:¼ B4•?>¡éÓ@»ìh¦ô-°¡ L,iC£…€HFmƒ™ùûÙÁò[:Od“²ÔÊ÷ñ5ÿO Ñd¼lOÕ/°MãÙÑsÕSGæìÜ¥2"Zw: 3~èX½bG܇ŽfÝh’ UÕs¼×Ö ×Š—U„Vìép&ÉǽGýàÖ05{‘¹×½Î0ÄX/¼ÍHã/{›q®Üï=V¶Š~Ïúª”!§EÙÓaå‹r¼•À“ÿ·– ùÊ0ºÍDc4è£Ô-&¬$OÚ¼.À{(3 ^SÉÎ÷’WËÅÿÿd, +endstream endobj 1210 0 obj <> endobj 1211 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1212 0 obj <>stream +hÞÔ—ÛnÛF†ïõ{¹lªÍ¸KîešC‘"uƒXMP$½`¤•ÅB&’²ë×è[ô-;³»<ˆ–´@QLÚ$‡3ÿÌ|3äjñôûKA®Ú…Q$ã9IsC'[lß­O_ "Èj»’pøƒÈ3¦$Ég\’Õõ‚ƒÆS«Èj '\¤du»øH_¼|E4ËÉó§ÏŸ> endobj 1214 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[425.58 520.26 549 533.76]/Subtype/Link/Type/Annot>> endobj 1215 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 506.28 254.7 520.26]/Subtype/Link/Type/Annot>> endobj 1216 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1217 0 obj <>stream +hÞÔXËnÛFÝë+f9lÍñ<ùè.Mì¢Eš¶/œ.i$³‘Hƒ¢bç;ÚŸè_öÞ™!EÒNb-‚@€H‘œûšsÏ=” ëÙñ/‚¬w³D‘”gDg Qœ4v¶šý<ŸŸ +"È|5’pøÀAd)S’¤Š3.É|;ã`…q+2_À šÌogWôÅÉ)1,#ÏŸÿø#9k"‘1EëuSl·eµ&¿V­mVÅÂFÌOÊ{2L‘X0‘21‹Á ºYø3u0}ÙD±H™¤%˜!çõ¾-+»s¶Næ3£sÈ'a&!Lª<Ï ÓçÚg–H–&Ý}H™I=ºÁ‚(w2îë‘»*änê¬K#“}ŒÒø_»–DqÂRúæfYà™¤­]úRâ1§UÄ ýj×á!é\ÈU%ˆÄ_”˜¾NsX§`«©ýå~Ñ’·Qš1Am0¹ þê*8ƒqµâXl)“´«¶ÖÓjÿCDžGqÆ4ÍcÉ…?5$JXB éŽ?|óG¿_ãýOÜ;•2;Ç»½S= +E@áÿê³Í†œ—k€+6b ㎜ۅæTˆ·‘TpÑ.Y×™¡·Réz+FùÙÀƒIš ˆÆá2Å,9&H/>UmqG¢ùŸ³ãù\úõ9Ëߨx‚6L”FØ Ž¨®èÒ®n_Ù(¡íYÑ^¿-‹Ë²½~Ý”¶jßÑP`Æ!lŽíþV-ê +úzË®‹æ¸+ñŽ¡ +Ræ~?7<ñž*llº Dׇ)YÂ3Ý=â¢G.™8g™jè›–UëíÜI¦¹Ët쮆ÐaÕN*–÷Ïsçì]ä >Tx“»Š*~EŸ‰+ ñõ~ UÚM²*‘L)ÂqªÒv.TŸtŸ1øLÌ+ò׋»(W¥Û92m¯­;3ôcY°‰Ã9ŸÞ p~ŒÚmäȵbYnÍâ½If©¸ï=àÓy‡à8˜sÓFP´Z´e]õÁho8FN®4D“e}8Wôm”åR@tÊfoO=@Zb†;vÚøÛ8 ÜMÊG) ‹iBïkÕõ~[w13‚)1pâ+•~Ö¢è,v#‘ÓHA†´Žð»!Ûº±¤¬V‘Rîj¬pE±Äy´õcÉUëÈG"8ùÁîCvÖ’¿^c­‘_ÊN»‚“çõÒîþîxDKÃLFŒ„YžÁ5ƒn`Ò¦õÎFàà +Õ]z* õÂáˆÖc´Æ˜ Ë}°ô¦X[˜ŒdÜAÎóêÎP($9K²@>¾G&<µg‘ÂÕÀåÄ€x²…‹©…A z]¡Ü"`«nÆæD/!˜<=ùª:Fƒ:ôTÑ¢pÎýX ~.“»b{³3ˆyH×<0ê€o‚¤Â¹êæVŠs+¥›Mº$¥·¨ÞE7 68\¹H+ê<ú¡·»îŸ…|i 0¸"Ó¦©è^Dö;”Ë0çwõØW lqv蟩‚r6ŸPrKlÚ0(A>y¥‘‚Òp*Õ( à3‡¥ º= ,cÛ /1]LV„\áÒMÖµ¢-„Ü .¦I¢QÙñ $ &A)l6ï‹E$ðŸ¹Céghÿ'È¿ ¿ì* +endstream endobj 1218 0 obj <> endobj 1219 0 obj <>/Border[0 0 0]/Rect[257.76 249.24 290.46 262.74]/Subtype/Link/Type/Annot>> endobj 1220 0 obj <> endobj 1221 0 obj <> endobj 1222 0 obj <> endobj 1223 0 obj <> endobj 1224 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1225 0 obj <>stream +hÞÔXénÜFþ?OQð/RÑ´ûâ#?ly¼›]E1¤Qà +j¦çØq«‹<ÅîKä-SÕÝäs‚`±6lrÈ꺺¾¯ª)`9zù—Ëj+Hx +:Aq(Íh1z3½|'@Àt18þÅ‹H¦$$Š3.aú0⨅q)˜Îð† ӧѧàíäD,…‹—ß|ïËP¤LÛe™?<¬‹%|WÔ¦\ä3þ<ýZRÎRÄŒqÓ·£1*$33w§vª?”áX$LkT×Û¦^¦²º&ÓQ,YcD1‹b`ReYL§œk› ׾Ĉ™Ôƒ—˜Pö%Ü¥#³IÈ_ê´“‹2r.^æU á8fIpû8ÏéNµ™»XÓ5 ŠEûÞ •³•’îÊE„¡ªXÒ»‡Š¢×I†ëßã-ê*·îͼ™Õðc˜¤LÆ«¬¼½mááÆØTqʵ”qÒ&[ëýdÿ"ËÂqÊt%î6‚0fqÐ^ŸùŸ‹þÿ*ï~ÒÞ©„ Ú9ÞîêªPø*üs]}½ÙÀõz‰åJ8¬CÅXÁµ© bSQ½ý+” +š9k鱕H‹­ ¥ãšéT: +ÈX;¤Ñ JÇ rŽÞ‘ —–l¸ r]ÔP˜0ê‹7pÌÍâé"ßlîóÙ?§Ÿñ¹ùÅ@ýùÑœ»´1ŽV©ì9ø­M“ýÚ¬o1†·yCS‘{¿­†é™_ƒ–ÝšÒT¯†¯fÛ_!ÌVy gg³í¶üéoð)Ý|†üù¦¡¸^µP•LsÌúl×0ÆÂé?<†Á ?äØ·ËÓ•©ßçõê¦ÎKr÷.xq5ùðâ.Üóàâ¯|{ñ÷_®'7wj88¦õ2ÿŒ»mµ~/^œƒ8‡«ÛË˯Ў£DùÓ'þ3š¨êrÞ<¢V©9>æ/NÉÜ—O%>Öüô +›V·Š\=å†8âƼŠŸ¡d·sÇ'8–å÷[Wjw<_J¶Šè‚Ï}­|EÖ%U˜¹CÕTygw¡Uéy¦èÇç‹RNŸ­õˆè±ÌLŠ9.=’ë/…¾‡ž¬Z;”ë¦,€¿úÍO'픺9(%ZR‚³Ìζ_FÄIÁMs_àzÔÜ4»á Ét°¨›š—MWœ(ýHO4éHœpÒ¼CQ«›EÈö]À®eÆàæöÍÕd:pÙ8ëKÇ­yo+8¯ÍƒAJ}Z­g+X4h]K¤û:Óe…Ó1$y–#ïÖ ^ïû”2)¾Æ%n3ôzŒÝ-ÃÀv£`—-Ô)¥Nvî®+Ø>Öëm‘o /æ0Ë ¸w³¥ÐLö¢–"öÁ6•™ÃöÄö°Bñm13Èé‡9¬×eÅ®÷ËÍ ܦA~#ï°H¢ý3xâ[K4¼eÒýÆlãÖ”õ(È)2çÖXâ ã¦Î ¿ÇšÁX Єìó1àÐ'{I>é¾î9/|qp;Ñ÷\?‡ÊøB°ú/­Ç¾.£„&n –JP8~‹­Ž¶¿ïP 3Î4Éb+–dåÁ9ÕfŒlá6PÎ;í+ÅùF‡¨×ÿ/'ï^R¼—y±lò¥Á ÄgÒØLšbÿŒ‘%ƒšc®æpfQÄ¢›‡»’ã†BcAÛB :hBü;÷½YRñ`íüw¬ˆuþ@ÄGʳ½M€§u½ê%ÉÛIY÷+°W­ž6¿¸q`@S|ç¡=ÊÄÎ"E401Vš¥Q›;ýN9²ò@u2Ôì`Ñ;-ud‡¹Å-cà’¹$Ça–Çô +óìØpÄs)ª§Y¶š¥'ëO…›S?…¸i`ŒR‚•Úw*i—úÆÔVfà™BÏ: ÆÒVJïœ*ºñÛŒxF€Æã÷ë×pŒ'³üáqƒ º]Ø$#.܃d÷víÁ²îÜT³®%Ü#ƒ!%›Vç!/pèl'nEçÆ[Vd‘I#52.ˆ‘©ÐC< Ó¿Eæ02éªÐ·¨É¯6 OÝbk(MéûÀIKššD<°ÔCEË*Ô3|×È—Rúž¶ÛšºrF}$–Às¨—xÌPÑìu ;[ Áwìù|mY¸Þv¨K†`ó»Ôuîv§’v§,«­ÝW +,FžcÛ®›Ù;‡Ï¡ÈÚ2jlc[³M3?: p}Hó?\!?¾¾½œ^ß^N`€Ì±¢ŠÛï³íAR+¹ßgó>·éÞJçæÒ,›M^~X»4DÁÚž‹åñ8ÉûPl?BhÇzŸöiïH“N™Ö_A¯mƒÖBkÐ2Ú5h;(P—V²ß¥Û¥št„-Æf593÷ôеë=šACÕÒo‰“JØZCx{.¿Ús×íâ o6õu³1-ð%ç„¡lKHêtOV’¾& °DíÐ#üœÕ¢†â͘„ÎÎa[îXFãî&ikL[쟲¥% +˜’>+×fIT¯©¯Æ´Õ£mõÄAáÞ/;Û^Ÿ5MŸÄN›Ž8•‰?úÖÉ©V¥ãÓ*#&£=•ƒývêÍa;f Û§ç+ìdCEéîˆÒo4»™Ä-}‰ñD¹QARÑI¦q5ªè[#>ÙP‡ á¼ à²gç´TÍlfªjÑl˜ÏÞ ñw>¯ +endstream endobj 1226 0 obj <> endobj 1227 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1228 0 obj <>stream +hÞÔWÉ’Û6½ë+úHÆ;ˆ£—qÊ©Ä5塃'Z¢f˜‘S$åå“ò—i,â&OÆÎR®”ªDHݯ_?4\¯Î~¼dpÝ­´C3™A¡-W»ÕÓ|uö‚ƒ|·b(~ðÁ2C#(¡òýŠ¢B¥op@™„üãê]òüü(’Á³³gÁE›²Œˆ¤¹n‹ý¾ª¯áeÝ—í®Ø”éoùO¸“;)"`ÍÓ +òç«5tÛlÂHŒ¦mÓ53„'š×Í¡¯ê²ó¶Îó•’ãÑDi \XkÈŒR"Óœ}|!.gïˆð/1âëQ°€/ev Þyƹ +>þ\t=¤kMLòæn[¸OúrP¹§Mꔨ$Nû%Nj77qOÊÆ*4w?˜J¾4×_àmµMx³=lzx›šŒ°¤Œ&»¸_SÇÍ03+êÀæ\›#ÚR.Ñþ˜µé:#2±kNY*H5Ñ Àñùõï>õÿk|øér' a.sô˜;1°Eþ·®>¹½…×Õ5ÒÕbŸ2$c¯Ë®ÄâŽoR.ðÏrKŽ•kËp_[åTl±YÐ?ÂéÚHbFµq•Š‘Òä¶Ü}|Uö—‡÷5~÷…S§5ý\YF s¥!ÎÈ~ ºŽl3ˆ0šé €hJS‚ªîtp$¹|óôÕyžæ¿{ +¢Ã4· ;nbã&ÐõE_î˺'ßT]üí÷b…pÈìd- kqàŠæ®¯šº¸…¢Þ¦ðK-BMÖžWÃû]¹…¦¾ýŒ_›ªú$Jtw[F‰!^ÎbäD†I(døÿZR‚"è4ÜÌÝOÆpƒ˜oÔ á–'?ùòsÝŸüÄ<ça¦%V vL£B^ 9éõ¾K*„f[¦:YТ¿JBÝŠ$pºGŠ?Ç%›¦F¹Þàš›¢ýሃ»"¹9·Ç<*ªÃ6µÓëdϯÁGN4Íä¶ä*…;ã¡âžâGFÓOð´(²×‡V7wáâ˜áèß¡.ÐiNÎÐS.ïÊMµ«Êú›Ü|hv~Üy|Ì}<-A©Ñ2B85¯¼óz»ða§äæ$N—2í9…K}‘ùåC ;!qö@)«•ædÐúpñÜ‘˜©/±/nô5Ú:¬¦ y帒y?Ð‚Û Ðú苪¾hAYšy< F°iöwMíDd— +lËR–´ž @šGb¿¤ÙÏ–à‘kC¯†êåÌ0F¤T_P:Jcò7Š—WžÅ#ãËÐ÷M[bxX± +Oª:]»öª©ÃO§~éZŽ/–Bh cߤö#ë‘ä÷²‹Õ°ÈB(BÞƒVlYaq¶¡pC Éìçam,j 0…&C +[1ì¡’"ůÛÃI¡3’MÌq5òïâ嫹Ü3ÑÚAjc±¶sŸT÷¤vÞ.mŽ=D¬ëZ :‰~ðÄ㧵gñNÇãmF(S‹W½$z„r®`£ÉUwØùS³ÚÁÌC¼^™ j÷¦^6„TDô\ XöÐ7så €§9ɳž !ïEÔHéî»CG6Ü©£ŸUhÙ3ìšqb–PpgAÏèŽwË¿´d1RÖ +ï +Cè3bÊ1/Lü%ƒ„iŒ'^8þ`,¦× +endstream endobj 1229 0 obj <> endobj 1230 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1231 0 obj <>stream +hÞÔV[oâF~çWåÉΆÉ\|UÔ‡„°Û´ÙC“†(òšÜÙC³QÕÔÙ33š[E£]UMæ0sÎwî0˜¶?\2˜Ö­@@H#ð¢…J¶&­“¤uøžƒdÒb(þãÁ¢¡ „rH-Š(„z±€$C2’ûÖsÚ}>‰ sØy÷z•Ë""œrZ¥‹E^Lá¬P²š¤™to“Г°ž|" Í |HN[mÔn2+‰-ôÏ•Ûf!áNŽ0Ð/W*/dm°ºI+à$ 0£€ø.â8âE”z67“®yÄŒ ÷=bA´‚0˜ð¦±)B øèEëÜu`|"÷mˆçi­Àm$tËqª%î(9¶äúŒÂ%¾Ó¨}l”ªlÖ(q{Ræcª"àú 쥾 +½0FûŠˆU•öe¼Ê Ý0"Ì‘ dÝø+‹Æ6Æ”ŠêZs„ëb{ÞÓbÿ ,ŽÝvD<'nsʬèƒÀXŸ»ÿ¹êÿ|óQ÷N„„éÎÑuïÄf +Y3…ß6ÔãùúùÇUï¡rc }YKÜM¡çí7— ¼”c²^Ìf·Bnv+@ByÎ5‚Ä‘¥#¡zz$Ü’ ¥AC6Ôs¹úTHÝ/éb9—nòë–O¶Ì¥q¼h“…ð ©W5œ•Ì$L\ÁqÀq›/]Fñó½æ,é +-qÛød|AYÌ ž¡–¯µ°AÍLÂxF¾ímœEÌú’°ªÓ)L .èwUd*/‹+b1 oÛ]ÆÖѱE˜§H( J¨múy) @ ™åµ’6p¿}C©›%§aS>6±è¼„É+lòB€eŠ}ôI¥£T—ß÷·QQÑÅÂê`²t>ÿ”f.Óõ*Kк–¾c§á0I¸íQLâÀR«tŸ°óÂ|»è Í7 µèy¡Þ Õ9‘3–“ûŽõô9yXâ½¼“ –òÀî¡ØyÍqT3ö©Ù óçšyÈ8°§©J±!ÀÈ#~7É~cƒž­M%ë£ÇOYYà~6K+ØßÏʲº:@oµ|½ƒþ0¯t^Gk^ÆîS¬Æll!z®éód0Øw:—û ©ì2\ªo+5rö.'ìîêŠQº7rŸ„Òù¾‹jïúÝË‘ƒPÏ4^†ïå:ÿEDÇÔß;€½ß}Ø;»ÐØûuxÿuòè¥j†Eª”õÔÿitO¿ðyú€$h€?2L€býÁy—½ÅŽ‡nåÕ ½E/µªÆ«%ûÅkï…b4×O ¯T¯103øد÷^7¸ºa<ì£æf†Ÿ‡Ãž„ïŽ1ºœŸïPö^i·täðh¶Ð, >ð¾Y³7ô`Réå”#„ÖK»?r <kGÕëÝUmÞº6·;ÇÁvãÕ—j9ÌSl^c6<;füßîßIëýt‹1†øÂؼ•<ÐŒÀ+Á<¢Ö5ŽšUU=úcýKå/ü> ¨ +endstream endobj 1232 0 obj <> endobj 1233 0 obj <>/Border[0 0 0]/Rect[434.52 610.26 533.76 623.76]/Subtype/Link/Type/Annot>> endobj 1234 0 obj <> endobj 1235 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1236 0 obj <>stream +hÞÔXÛnãƾ×SÌ%‰D³œ‡œÞm³Þ¢…›¶¶Eáô‚+Q^eˆTœ}Žä%ú–ýþ™áYé:)Š¢0lÑùÏü‡ï0ìiõæ‚=5+£X–äL熩„ËÕ~õûÍêÍ{ÁÛìWB²?xyÆ•d™Jx"Ùæ¸J…'Ú*¶Ùâ"šm^VÑ»›÷,å9ûæÍ7_}ÅîαȹŠNOçâx¬ê'öǺ-Ïûb[Æßü +)¿RÊ[ .LÊ6ïVk¤e¶þJ ¡ÿzŽ×"ã2ª†ÝŸ.mU—‹u³Y¥Ú"ÃSøTÖZÆuž$Úgf$ÏL÷9RæRO>GE¨ Ê}ˆŒûzXWËð¡Î»äig²ß£Lýo‹¦eñÚð,úð¼+èJFm¹ó¬¢WÕ1O£pÛŸÃMçí§p“ô¯‰H‘«2’þÆ¿i(}Y<‡KÄ:Ÿü'»Ë¶e‰³œ‹¨ !›°Þ©‹¡3®V [J“uÕÖz^í2am¼Î¹ŽìZ&Â_¦,6ÜDŒu¯¯ùŸßúÿ¼ÿ—z§2.¨sI×;ÕO¡SøßÝêÛÃÝWOWb cÃî˦8ÍÛ±Tx³Üñ™[™tØ2`”%Ùäžlr™ÉähA)Fßžê]¹/.‡–Ý_`€Í?2h‹"iI…s¡L`¬DøbùP±’oÐSŒ‰.1Þ9” £,2²K¦ôD¡æž‰Ø =-=A±‚g¦Ký怢4Åqšø¤¾û÷¿ýp»¹ÿp{ó0É)çÖŽë²Æ=Êš¶hËcY·œm>•Ì?–\KÐk>ç×ÿpáÄÎfUÃNÏmuª‹E°\ët^°Q YQïض¨ÙÇ’]šrÇNõá3þléa!¸1ã§Å¬k%«êPß}u(c‘bî8{C¡@x11£¯üït‰Òïù¢çw#mæ6Ÿë¶øQ÷±¤¹F0h¼Æ?ytŒ©¥%ÇŠPÖ¢ÈËæ +Ím—tòºúÚù,àJÉ°©¡º_³¦,YDzÿ”è ++MîŸú)Œ4”#ŒüÜQ+ÍSI(äYάuB˜B.É ”*Å3|ˆÛ·Nþxhí4È>u#TáæZ.ûRrÞ¡_…—¼3HbÞRvŒS\hÒ`šÖí>!Û!Ýú†œf£Ö!¨ÄïKÕ~r9Ƶ°ˆ5|=”3òòÐçóòγé2Õ\Ù®3‰Ôv§E‚X }Xæ¦ÞýÛE¶ïÿ0^‰êªv.ô·.ÕÃ2ïí2xUݳ{桦Tó<3bVÕ›ó\ž¢C˜±ZРg™{ƒ4¯%êBtìk‡ËöúÕ+kêES2¼!HOÃîiq‰aÏæÔæ– æì¦Ø~¤vÕÕîRŒ³°ÈÂE¡ÈÙP±Ž:´êr÷B&÷­HÉ0p +WH˜ö#WxÍ΢¾2Šè`V™|覛µYë“¥¢¹®O[>íxBÜ3€Óã²7T÷\¹YésTøNmù;6 ¦Àˆ£ dÝÝg Bbüñ +!c¯ÐSÈh:Ì)ãîþ»»›ûÍß&kb€FK¦<å ”»¶¥´x +IêQšód=ÑÕÇhh¹ÛM³g"¯x&úš}ŽrƒðŽ/n@¿ †°BRñ»V^S1ìbú{Ì%ӟϧggé`8£ös?Ĭ:] ˳$½Rw¿Óè]…"@Ô¤†ú§XP7^è8¸$-mÄu{ôŠ‰3¯’S‰I0p@ˆ`¤u–aMÌrfÇÓ¹œÊ2«“žkS° Ôüñ–A;Ë`¼eðÚýSï…SáN 8ÅåðÃt æÆ…[ª/¤€§t@áÜ}Åü=Fw¡Sš–D§ºák†5}¿¦HðòË‹Jãüâ°è ?SÍ°»ç5IH/8Ïa8:ç^R`­žIÙ…UA£aÃœBg ƒÔ·”Î"]W5±´±‰öâ;¡è´wæ.\¨¥OK&ÅÍkV†áÙ³æ²Ý–M³¿¦äå’KÞ]Ñ÷9c‚yò’üP'ÂÝy4Õb$#£ ×7*Ïú’ö“ÙÍ…«hÛ†ž"f•Pô¥HWˆ×ŸÆž\ÌK.Ï €›L§dá—|pÖÛ=³ÙÈŽ¬ñ_»Ð%*súÊWPºvtÅ‹³…‰ù>ò§eN™¾íHè»›w+Àµ êa:ýÒ‰5]Z©G×c´=]j²ªÞ• ;£,ìX¹¾§Ý·GfY0Íp1µgb=]öÛIhæIÅÝnÜ +´•v¦xrq(ÕÉ:?¯s›$ÑÃs¹­öH›˜¶&æÕþ`{üX†’Èyš.¤W™^êá­öVH;+Ô9Ÿª¾JãÚ¦¿a®|I]ƒ½VÍý«7é¿0jW_9Bžé½É—鸋 -œzÌa|m'–°•¿êø[‘…9_Dû´H®B릴v `aàƒ¬üK€Ã_' +endstream endobj 1237 0 obj <> endobj 1238 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1239 0 obj <>stream +hÞÔXÛ’ãD}÷WÔc pM]¤’ô8Ë4MÑí „-»M¸¥YI¦§?cƒý þ’“U¥›Ý–Ù ‚èÙ–T•y2ÏÉS­Ønñâó;Åví–ʌřeF²¦\lÿX-^|¦˜b«íBi&ñ‡‹ÊRa4KR³ÕÃBb!ãÜ°Õ¤ŠÙêqñ–¿ºúŒ%"cŸ¾øôãÙWM¤2ax½kŠ‡‡}µc_T]Ùl‹u}¿ú'v2~§D¶TBÙ„­^-–X¶YûOf\ú›&ZªTh¾Ç2ì¶>vûªlÝZW«…Õ"µÈÈŠÄ2¡MžçLÄ™”±ÏÍ¥ën"c¡ãÙMBw pä„œáfœõ¹S`zQ'>Äë¢íX´´"åoÞm +ú¤yWnü¶§kΫH$<<öex¨Y߇‡´¿J• Uc5}QÖÿ˜Röqšãý¯ðk5µ¿³9®;öu”fBñ2,Ù†ýê*l†Â8¨$a­µM{°ãøì_˜Êóh™‰˜çK-•ÿ˜°È +Ëë¯üò—?ú÷]|øJµ3©PT9Ù×Î ]¨BþC}y8°ÛýíJ<ì"…flÙmٖড~û)Ò?–Ñ3p+ÕŽ[‚r®5Fä™—÷ Û4é(6H2•”$ß”ÛÇ›ºzUn‹ã¡»=Êhõã¨'£rÑ:q +©¢…fºBÀ\w]á#Ïxײ‚Uu…Õ#!=Zœ‘æÐÝ#rÕüP2ÜÞWûÎe‡h/Æ¡«EæÂÜו`«û}˯UŒ>–ÿ:îŠWI‘ÇÉXK¥‚œåc+7l":xž€Û +‹õý#Áíbô±H§ C4g©R&jšIQmغ¨üëK‹X9”AÚ‘Ì]B?”ìØ"ª‡º)YwWëj¬*|)™¯A2T4ÍÆܤ«wóújþòÍõêöÍõÕݬt™Èó $Úº7XÛ]ùPVðO‡¶Yjh~š°¥zœé¸ÕÝSÕï}d«•öoå"·^ÕéZ$A«ZD»H߆‹,Ÿ¶Ùw<ðPHt騤©ð +ϯë +ò¿Æ ÷Eó Îú-A­ó¾6‰Ç9BšQ‰ºa,&B+;¼"㟸t–J‹Ø€*“ ø¾êB¾xFºdçû"BšJüî ¾Æl>Ù:ƒQã_”nÛï¢ô3Ž%è«ÜMDZoùKÌðƒïŽT¹öŒ!-Œñ‘Ź›A`Óž@ç÷=!û~LƒØ!ü ÓÜ •r½ßîËÖµb…5ˆ;0Ѧ#z–äXmÒ—g}‹¿å\F÷äò¦C6øJ£\¯Ý>D!0óe!C0§‘¬‚‹›;=Çš„ÞaÒÉ7W«9SÞ ·Q?ÚrÝA}Øã}Ù”Rehrã®—‹ÄN€ˆO  Ø)1@ ëï1]Âæ©ôÄÃ%ýŠ™_±8jB/á&nDŊ覇NñâŒÝ-¿Ch™^S´È&ðL‰e†P|Ò7¼¯”ƒ¿«QÍ~ a „Âœ°gIœZ\*Y€& Ð8m߈ A”D³"Ïó€áM§‘],qüLt4Ñ×XÌ¿„IW&ñäJzv%ã.Ä}ðÞq~ºZ|:ŒÆñ¡³k ©ä¯ßѶÅg6M‚Žµ{že:9 ¿§œGoU„F´ü ﻘ: §®Ãnè·ÃÑ1ºèúN‹…UÏ6š 33 ¿.©Æ€þ‡9ü©Ð³¶¸~ùíÕí ‹0ÓùœœB÷E㷯߬¾¸ùü¤Ýô)|%ùžÿ¥WÄ¢é{^çL5zþôç‹Ÿ©tÿq}¦‘â‘JÐi-º¬íÊbÃêí`ÈÊs’Á üÜÖÛ®_Ëøµ ­Q(\DÔ?œyU}:0™9ë^9CØшø±å·«¼s åpyç"Ž§œ$™÷Ý5ŸøÏE‡d³Þàͦ÷tt_õ$ŠÙŸ’NP£a~5#ãpà]p b({Ýy”NF8’wœ£„øÔJ{Ö5½z÷n§aËØÍ°²w~øqPeM~ÎÍ%˽žžˆ dMŽýþ;1Œ­¢uzÎ`_Á­¹y$/ªN8ïµ3ŒÖ öN–æk9‡ëÒ7UúS*Lm°!2L†1Ãñâ‚øj:œèÒeL‡R»lP ÎBòƒ ªF‹›?âO¯‹§²ù›ÔƒóˆO4¢-¿yÎ¥f©I.¹T‘ÛxæR7õñ‡C9[ñÌê{?ÒžûMG—û“} ÒKæV%ÅÍ?¹«óÆûbG—o.쎬mz1kèo›?»Kb^¸0ά9DßJ}aç ç¡T}Ü ý ‰_½ï~cãß?(rЖˆòÁ§‚uõ3Ç‚,Nž;|«ñl MÆÿ=? Á&…9 ¥ûw™r²ãŽü$Bþ+=Iž_ŠÞÏè™?ÊzHÆÓ5ü)ßG {ÆëcËÑ;÷N('æ&¦,Dt?úi«!Ûsh¡ÔŒb*&ç2Éé©fâµØC”âÔâŽ0q1øVDâ÷'š9¡,F œ PAN®V‹_÷`+Ÿ +endstream endobj 1240 0 obj <> endobj 1241 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1242 0 obj <>stream +hÞÔX]oÛ8}÷¯à#µ³fÅQ"æ)“f]¤™"q;X´û Ú´£…-g%yÒü¤ù—{/IÉ¢ì$Ó‹EJ±$ò~œ{νäd3{óË'›v¦%ÉÓ‚¨B™’ÆÎÖ³Ÿ³7?sÂÉb=イð.¼È™$—)KYìf)¬ÂRe$Y,á&åŠ,gŸéÛ«ŸIÆ +rùæò‡ȇ&á“t¿iÊÝ®ª7ä]ÝÙf].mòÅß`'éwʘ$sθÎÈâíl â6K'KÿÖ$sž3A+X†Üî]UÛÖ­uµ˜eÊ€?šeš0!1„©"M•÷L –ëþ9¸Ì„ŠžCD0 Ò=‡xCà¡*zçÑ21Ø(2oãuÙv$™k–Ó«ïíìÊß +¯†Ö Ëhxí}x©YÞ‡—„¿¦<_¥ø×þÇÝW¹ï?À-¬Õìý“ÕaÙ‘OI^0NmX² ûíë°dÆÅ*Å` ¡ó>ÚJM£ýáÆ$ó‚)jæ"åþ6#‰fšÒ_ÿüåþêÿïâߘ;™3Ž™KûÜÉ…< ð¿kêÅvKn« À ±K8€±%·¶µPœñö{"$ühW¬¯ÌP[¹pµ¥QŽd£§d/ê\GD“¡‹)zG«UwŸ,þy$É ü†p¤=%¥:D [Hð¿{°Ëj]Ù–t÷,øסjìŠì*g¦Hç~´h(†ºÚ%=$œîˆÛŸ”Ûí>áš>&9øIÖ‰((ü@ˆ­÷*eÀ‘nÑÈ‹mùd››rg#O >e622ÿ8,6W`"ø:LÊ̯©Œ+]ºªÊÍo'¡ÕIlaåCp´P)ýõ¡«öu¹%e³9ìlÝAˆÊŽ´1ç7,aλ‚~cXÑ·’D&,ì‘ò¦Á™sÁ²,1ÿ÷Åh²ìÓm¼%%÷¶&*›¯ì&ø+ÚXÈ6j…ÛÞ0cFß»@P¦ª%‡0K#,@ì@ªz$È£aíC¹½ÌS,SÙy€ òìeTë¾JŠü¢Ò  ÷P59”Ý!ÿv$˜ä‘#"ò3ˆìïï¡)RF`Í54Q>ÕÙ|^_üýê6&ÿ¿f"Ó»—ïn~™DZ¼„„}¯Æ™ŠªT +«/.~º¾Š¶0UpEóìl/Ês´²kȦàµ}L8g-èî +ú?=?}Ï´´m[‚t8žxJæØA­”«){x„@A#„y—žDê…<è©0€N?à8ü·=€ékÏ`¶uº€€õ^s–ÊgÉVž<¶P3ДBÁÔn™(ÅÆ1öëp@NÙr.,z\CѺ^Ø©ÒÖb[®žzYCqQYF(2!cž¥1ôðXÞ}кDaGŸñ`C+á²äA1e¹gŽ·Üƒšx«ô¿£øçîÛÚ/Ä&†Öû9Z{Ï®¾u¯ÑšÑšN_¡µ£pµ]Y/-ùš@L)(Iµ¼'¸)Ò°õaÌYÁ³ ó¡Äƒ +Y,&C¿œ9 õ +ð;þ^•XÖ+˜áÙÒ$8¾ëé.°ÝYõRqkóªx©¾TòA»Æ’ä€ -Ò‘vcüêÙâôLá=w‡3•4L»¹j¨-$¨Ç›}ýÖ®Ëö»=líûª¾Ûbh߆Ýé0¯Wd 4ôÕº–†ì|æÊêÀ3<¶‰§TßF‡›Ã2ÐI×8Ö„‚Û}…žczs§b%}ˇN¶£±•£sE£Ùµ¬ñáÊö5Óö\±\Æ›2#Åz)AÅi~d¼gîTÁ©ãº±µuàКq€æzf׋¥0=#ÙK¯Tܯµ®¾% +çr\ñKâIÐq™A.3´ :æÙj(Ÿö̽ºsŸtÍ7Fß ÝáŒcü_m̨[ìµT„#Rr_"Æ4uí§†4à© +4[ëN£ˆ»n(í#-¾dÓæÜc ð3„æUiæ™`ZõÒ<‚ø©>È<¯Í<5Å Íã–¥æçdÙd§}ó§wñ^¬x¶y‰DÒé–F hÄ€ÛK£‹Ç¯CÞ!BG¥ÓãÔ+L¶†Ô'@¯šž“y,OñfG-¤?J?‘vü2wÃñd¢bœÊ¿“<ü:xZôa*¼Ç“N!è¿ÀC>ˆ—ðúïkPaÎœ¸…z‰SÁ(rÒ<Û#¤LÉ“ ½Ô˜s`÷ظEÀo®³ 0ÃÚÖ +endstream endobj 1243 0 obj <> endobj 1244 0 obj <>/Border[0 0 0]/Rect[502.2 198.24 533.52 211.74]/Subtype/Link/Type/Annot>> endobj 1245 0 obj <> endobj 1246 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1247 0 obj <>stream +hÞÔXÝnÛ8¾÷Sð’Ú3")QÒe¶ItÒ"q»é^¨¶âh`K,7ís̼ľå~‡¤dIvÚ À`0Q2uþÏ÷J²õìì—[ÉÖ»™Ñ, S¥†é5Åì~öïÅììJ2É÷3©Xˆ?\dš­X¢C*¶ØÎBHa”i¶Xbʈ-žfwüâòŠÅ"e¯Î^ýô{×2š×ë&ßnËjÍ^WmÑÜçË"øïâWhÒNS,4›K!M̳9’š¥[éƒèÿ4Á\&BñbØM½o˪ØYY—‹™Q"1ðȈØ0¡t–eLDiFÎ7ë®ý ~D@hƒ¶?Âá>™ BÆðc”v¾“aª7QÅÎÄ7ù®eÁ܈„¿\å´R¼-VnÁJºf¼ +DÌý¶ßü¦fùà7)w e WµQt#{˜‘÷Q’áýwXBVS»_VûeË>I*$/¼È×WW^cCR¬•2Iì(šûLfЖŠˆgsJ·ŒY`„áŒu×—_þö­ÿ\áý-åN'BRæÂ.wº¯Bé«ð¯5õ|³a7ååJ}ØŸc7Å®@ojª·ÏÒxX¬Dט¾·e{ËP¾5Øh3À[— y’ƒüökÕæ_X°ø}v¶X(÷~&2ã•$#6BG$ƒÔâÔ_÷O×u`xuQÜçûM{³ßÊü#÷Ñ!, î©×/ðʲ®ÐÔK¼ó7ÿb·ŒÓŠ(•¹dˆ0Só™:ç×ÔÜ|ë±®75Á@ûRH/ðuæt,Hèv„;~XÕ€Õõ~[Tínbº[ ­cg“‡h˜s`ŠÕ£{C¢øPIa澎âÕüö±X–÷e±c9{lŠ4 ÍsüTÖûÝæ+C`Ä+öæÒ£”ˆÃ¡håE;ÙüŠÕ #@‡Y¬­Ù~W°§²}`íC¹³™ËH˜l@ +ÈÌ¡îx³µðM 3àÖ\ø t!Ô"K]í +ŒQ•&%lI¸\ùŠ˜”]Ø(T£”DYWžsO}¶Siœm–¥/ÁR2oZìDi‘dƒä»šþðúüæ=‚7ND°×¢¼¶kó¶  +lñPL´ “a’ïé’ÙQ)XmÉTC†êǶ¬«|ÃòjÅ–yÅ>”ÃÛÖM$â‰5g.3äÏf±'Ô…/3ïH]- vhÔ ¯‰VäËVÕ²¨(9ŒÂJ›ö´ *+¨š:.c‘Mq~_¿½FÉ¿³ ÷oGþ§"ëü'¸°ÓÌ0£þœ«H¤Ø>×Bŧ"ü2„ŠPÚ¼¡èò‘ãù_T7{ºlŠg ”ƒ©ã¥€¥=èŽì¸Ã,rû·`Ï·d.i\€½g€+³À%ëjRH + ×ÕÄK;•{Ôð"„êzÿry}ys¾˜¾—žèð$;`´pH%Ç“!¹w\9ÇŸà8/É[Ð3fL‹¦M½§›6ÀÔL¿c +·ø„6 + xR2悽¾G˱ÏvSÎjz©±!K904žðøQoîØÎuhîydÛ;gëSÝ=RX%c¤ˆ¼"åOø×óå¾û5Ûä”Uÿ‚ +pqµ+C3©1)˜°¬·ŸÊ*'û™P¤"œæÂä¨k‘±´¹²4tHßw +âùBòö ¦88k& BãP‚2JÐ6H°°w€ ß_\kÐ)†Â˜ŠX÷ x8‘i_nH+i•tÜ ØoÇqõ™MDK7ìÊÖ68qHii¥Ü>’_±…‚ÑQߦ\–-š·¬ +ç—åÚÕtð€¥æ¨ìËweµ{žé•4n +í"êÙo±ÆŸ>Ù“5 @ ]ሔ"<€'©|}=&@߈|MWöfJCŽè‡•AÀ~ RßU¡{&*:v§·A¼ñ7ì:9X°¢†Œ¦úÌ«”IÚñ>RhÉ¿¬|äîË jP°«@ÑDqí¾V®³1>L’Æ U݈¾@¨[¡J%êàƒ¤J¥¸nzæ÷¶ö¦¬Ý$˜ÓSSØæŸPv9Î9NJæ²búEÓ©ëg¶+ +ö•ëŸÝ±*_…¡Hƒ“èKgôÕ£;^Š9F«Æ´Y‘ ²kÕÇÏ+¤¨uCÆ\gB 0ÙÞD.ÚÎåÈ—ùÁebp3&³;‚=£@½É«õ>_82ZZ È-D¼)ªég!pB–…Q¸óbŒ)sàȬ;ü|ž©ó‰,D§&ßHM¾„™ afB˜‰ç‡Ét€W©öõÝÚæ(ðï6ÓQÂâ!0Ðìw ¡í(%‡Q¤ç};{IÑdzÁ”w\¤á²ZÉG,!Èzñ]UtXK£7}y¡²xtF°„òÆуG(Dô$ÑÅÞÒâÈ覯Ož¶%ÆðS(Õõ\ûЇ¬¢°“?f£¡a »¤ƒCY­Ê,ÒCQö·>—«}n"›Ô4¥s`tl]Ö¦§·9@©Ä’SÃ…ñ}n8Ϋ2‡7@MK’»wÆå=cd눠싃Åz2ÌH—¢i9¼zûÛ»·×—׋qCćÃЉ1lJí” NF/¾èÄw‡ð{g#!JHøfSS$4ôÒÁ#q†ý4aM Öp¡TFDÓŒ¹ìŽÛƒkYÙã&‘¸"±\¡ˆ+h¤aôO¼¿8Àƒf“ú¨ÅbîÁ¾Ãym":Qeöó¶] +cËèæµI¾,ôi(ï2èMª·uEg02ÉJw¯Xé&!Ä}V|¤í—x‡©zYÝïVmú–¨ŒTM-M»¼¤®ÖóGb ©”ðJþ/Àsȸ0 +endstream endobj 1248 0 obj <> endobj 1249 0 obj <> endobj 1250 0 obj <> endobj 1251 0 obj <> endobj 1252 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1253 0 obj <>stream +hÞÔXínÛ6ýï§àOjYñSâþeM:tغ ñV é0¨6h°eO’›ö9¶—Ø[î^’’%Ûi»bÃ0°äˆ"/ϽçÜCsr7yúõ 'wÍÄH’¥9Q¹!2%µ›,'_Í&OŸsÂÉl9ႤðžgL +’É”¥‚ÌÖ“fa©²’Ìæp“rEf“[zqùœh–“gOŸ=yB®ê„çLÒÍ]]¬×euG^T­«—ÅÜ%?Ͼ•dXI3I¦œq£Éìb2… q™y¸“û©_ÕÉ”gLЦ!×›][V®ñs]Î&ZYØaÚ&¤µ–0•§© +;3‚e¦{[fBž"ˆôaÇ=Ö£` D3ÁÍȈ„êÀšîÖü9 ôOòÉ.¬#ƒË–Å +/gÝ!æ/`Vò +endstream endobj 1254 0 obj <> endobj 1255 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[425.58 323.22 549 336.72]/Subtype/Link/Type/Annot>> endobj 1256 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 309.24 254.7 323.22]/Subtype/Link/Type/Annot>> endobj 1257 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1258 0 obj <>stream +hÞÔXÛ’›F}×WÌ#Øa<†‹ßœ½$›rì­µÖNÊÉ…feR¨Åñw$?‘¿L÷\ íÚqÙ•Jé$f¦OwŸ>݈“õâÉw¯8Yw‹D’”e$Î"iõânñírñä’N–w .ƒ\x–R)H*e‚,· §Pç’,K¸a<&Ë÷‹·ÁùÅ%Q4#gOÎ?&×mÈ3*ƒfÝÛmU¯ÉUÝëö®(uøëò°$­%E%‰8å‰"ËóE¢™ÒÞÉÃÑoÚ0â)AÇ›fßWµîÌYËE"hš€G U ¡BæyNhœ1[ߌ»æ!xLEYíËž¼ÓŒò@»#;g¯©1HŒ ÃX ‘¤>Øq<öß„çye4òH0no š„øë§_þó¥ÿßǯ˜;™RŽ™c>wr`!w,üºPŸm6ä¦Z]±û;r£; µ)‘o¿‡BÂzE}aºÚJ…©­eКåRX ÈižØJÖ$͉bÄf,›j­ “à]Ñ>"NN{ "·1¢L±7¾ VXA«K¼ôUSãõ»uÀ¹ÍX" þü`ûóÌî;´£¿¾¡®GCE¿ÇK7·ƒðAÌ&†@ƒ–¿-"Îišåâ$Ž ª{³j0-hÌL¢æ¦ c|ßýt2¨nÛ²ñóW³Ñ´ÊgP÷³Ó%͇õ6z¿„öÀ£f AViŽÄ5ŠêN~½P‚†®÷[]÷Ý4¡ È‚J©,š87z |®žCÒ¢r ĈEðr‡‹‹ )Zk…ôt;]Vwx`J´ƒ íÛU¥;آɮªIÿa§C® mPòÊœðÁ³P9 ŒfbÄTfðâöùó ^ˆôÈb:ôL‹™ô¥!6ºT¦€Á9ft-¨ÖuÓjÀWuƒƒÔ%5¶¦–0zY6Ò‰×am/€6 jµÙë§ÓÁ’(Ï‚ÑнÝh©w½©5iîLtîB‘Áa H¹+¶Û÷¡À¹¤^?kAŒzÆ©m¹Ãàd#VëþE±ÕM²‹ƒEäSU6m«»]Sƒ¸a†±±Â͇æà‚¬Â,Œ„€YÙöIhÐzÔòÌÒÓc?@ÇrR¹ùtŽÙÇIŠ^7bšð¹x“Y/ÐógAô!x(dF +xBœŒ<“©ÍGdÏD~¥>ÝüàÉ@qã‹òìP¾\lÍG|ê+wÄ@çO jÓTÉþù´Iù€g[ó0`¼49P]¹¼ÄÒ X‰Ó§’Õwzk± ä2”à¢)Ùb\ªÒ$ͯ‘ÄDq”ÝÚ‰Ödò‹†çñÙè´&¾DàhRAÆÁ@†³f¥»¿üˆ<–ßN8‹A”hb@ûQä àJÀ ‚kS/âÞ5™ºXáLmX²¥f™<eh°+Öj:é@‘­”©ðd¨û,LêÂW÷T°¨OÔ„á5.þnñ`$¸êKf®`#5µ[lDêé–æ®×Ü£Õ +nÑKI“ø¨aÁ]ƜLJ†U@µp>ÄC³Ší^ÀûÊô„VsFŸ–†H€œ$Gýêþ‚ûwú@“/"㹎û@O“¦P¥ïiÒô4izÚ,˜:™:’†Y$¥6ƒ«iäp¨€@:˜añùåÅÅùòû›ÛÉvè©rœù¡¦DbŒ]㌂ŒY7@÷²Ùî6¦VrCÒaŸa°|óeÛt®kê͆¡R)=U3·®^\ß.Ä6„˜O¡e©w}G:Hy±éLgct´S Í)8‚ïê<ØVµ½Y£,róç2Uj¾ön™óÆ~AŸ&Žº˜JuW/ï÷jâ”t¼ÜZ¡â‘A¯z +¢‹ÆvJª³²wcD€4ûÞSîTbÊùn8?–OaÉ1ÂZµKƒÏ‚k-ªÊñ6X7øç”®W +f ƒÔ véñÿS8Ýë ÌR°%©šG~*é˜ó½à­Á‰#h…ÕÕÌî?•_~Úʤkä6Xol>süW EtJ"Iód>À»™éúâìêÙtÚ‡ æG™A¦ÛNHð%NÅÃmИÿ`KC¸Ö +endstream endobj 1259 0 obj <> endobj 1260 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1261 0 obj <>stream +hÞÔXÉrãF ½ë+úØLÌž^¸ÎÍñVNÛek–”+EKÌH¤‹¤âø“ò—º›«d}˜JRS%qLxxÐd9{wv+ȲžŠ„<"^ÅI•Íîg?ÍgïNd~?’pø_" +™’$TœqIæ›+Œ{±"ó.¸ðÈüqvGON‰Ï"rôîèÇÉu刈)Z.«d³É‹%9/š¬ºOÒÌù}þ3xRÆ“ÏqOæÇ3 ¢›Ô\©Þô§ÊqEÈ$ÍÁ ¹)·M^dµ¶u2Ÿù^ ñÌ“*Žc¼ˆsÏDHí}™IotAB”¾ w|Äš…˜ÀM/jƒGd²Ã(}ƒñ"©â¸ 采E‚W’6ÙÂ\¿cZ8̧ö±_íCUº²IóÍ…±ª@âDhþ(1|/Œáýk¸[Uiî,¶iC>:aÄͬÉÚú+ ë 2£¹âH¶”AزíyS¶ÿ&"Ž7b]É…¹ô‰°€Ò~¿þë_ôÿk¼û/æN…L`æx›;ÕU¡°Uø}¡®×ä&_B¹b#6Ž€b¬ÉMVgÐœ +ëíOG*øc¶`mgÚÞ +¥î­¥›`*6ð`¡Á9†Gë&i¶µ3ÿ£—!´mÇ–‘À†‘«‡&/‹dM’j¹ÝdECšUÒú!Kóû<«I£‘ +ÊjÛ"óÚÐ*#k/mà !å=Xƒ¿ç3)r­^Ñ:P&„[í÷‰˜ |Pæ[ߥ—..FaJæM±¡öh饤)I¾,Ê*4yÝEʬÏØp}ûZhyQÔ!»£T‚‚*Ar×ÛìýX¨paAŽD¥P—^ZYd-1÷ŽŒÀX •&×ðêôèHÔñbùžX¶\á3O"DŸ…–=;h†ðyDžÇ|oDžÚÚdA‹Ù×w‰ßFìB5‹aîÍ“;•S›ÒÁWg±7|¥†FDim¹hFU³.Óm¶ô %ךÚ7ìê;¿'OŽˆ!Iå–´.Ɔ,ŽF?Û9ŠEѾ‚×åŠ.Œ³mh´€nø¨2¯ÎÚÊ, +Få5,ü;Ú±èH“Š™!v;ŽÂæ4‚œSÊGÈY°‡xi§×¨]ïz3¿° ÐiáI2â‚–¨ê¶uö¢âôéç¿)8º~@&Ĩ™´Ä@ƒpÈîc«*ºü/ÙÏ“kìtœóö+%Dˆ7Ij›ûc >P@ÈTATÜǬ:ÞÌËÏɇÒò¡ZùPZ>ÔH>Ú¥U™â‡Q¢¯`š0x8MظÙýãuîx`©¸mª1ÐÑ@œ£101J·çÙ½÷p]—8pê±ìéÜ-²:Å¥U‹. +Õ}?J"ä0† +fx}~y;I Š‡ µH:Æ.ÏLÚæ˜ÅÊlÉÆT–¿+Yø¾oßÏk®N6Ð5õ¤‘Nü¨¡²aõ˜4Ï5v=Îd8Õ8Ѷ® ×õéd9¦ä1oV=8Šì +õ` ÏéCíý#̧iö0Û‰N*îïʲʿ‰PÆ—aÛ8–ó¶SÈã*OkòUSø¨{îU?<…Õª2fŽ5Í¡È= +礼¨›,Y ì¤Øé÷ËÙÙ7ÉÂÑÕÇ“›êy²l¿é õÉ(ˆX(û6õÇsždµÑM²¤X Hé$ë'9'§Dh ìE¸Ñ1’´ÄŒ+ܽ–·Šl’8P7 +G…Öìó†¤IQ” ùbÓ9ÿašÞƒí²¶ÑJ꛸’/èħOº4H²mÊ D’uâ(®o<[A ‚–kØí*xGòþþü$Â}“ËØ6sÃ(ƒ1M›\cˆin6À—D1e“Ôštu³ù R{zþùäø;¤¶?g‡ƒÔ&ãä>›Ù¶{¹ÍlŸšMiZ¸ |aˆŒ5‘bH¾fÚÐq€I†›öÑ-’×tY¬%àgŸ|~êè;äâúâðèÉ“’ß›)×z„Gmà|2Ù]¶…9€w°ØjAÁñ8)r¬HŽ¾­ÞÛ`NµÑB ‡—‡Wg£@£þ0 +´à×ý£[IÜS1š + +)Y—K ½(2ÌBÞ<91î±S(ÆÅ>â.®Ž~yN·‚ÏÀ NpR`Û=¤_I‘5;¸Â7à:»¹úpyü°®¹vàèµ±t¾Í¤ »xÕmžpEÃÚIWùƒ»ÎPµBSý!ÍÖýÎåÞã§þ½ÀÏÒçÀ¹YÁË-´ù"7£ñ¹ƒõˆmüÔrT=â9@À”tÐUL¿¾ž¨ë«O“õ_ã©ÛH•Ï%…'.ýØaz4õ\…š+e¸Rš+5æJµ\…oáêæäödþ†Þ‘ºRÁÁ§Ñ?KŒŽÊ/x¼=:¼|Ña;bÌ/MS‡5êÑ›üŸÀ¼TêÅr¨²åvT»í ëú+ºÌÏO®NO_Œ¹=$ñx .Èyæ®òå +W¼^ë‘ÀñM3aûG€ä¸—Ï +endstream endobj 1262 0 obj <> endobj 1263 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1264 0 obj <>stream +hÞÔXÛrÛ6}×WàlB„xÍ[Û­;©ã±å¤§,ÉìH¤JRqüIýËîàÕ²œ¤N;Ì„ ìž½]“ÕìÅ—œ¬êY(IäÅÄC"=R©Ùröý|öâ„NæËăðàqĤ ‘ô˜'È|3ó@ +óüD’y ûd~;»¦GÇ'$`1yýâõ³gä¼rxÌ$-WUºÙäÅŠœª–i¦œßæ?&i4L—3d~4sA ªÉÌJö¢ßWŽË#&hbÈE¹kòBÕZÖñ| +…`QÈ‚0!“$!Ì=Ï7¶isõK°˜ ô‚¤~ wîH´/ý¸µ‰¢ Ä7iÝÇ YD¯¶‹W‚6ja$ÇgB ‡ÔnûÙnª²»I˜§Ç0U†ðÈüQ¢õ~”ÀùsX‚¬ª4o»¬!ïœ(fœ*+²¶úÊÂ*ƒÀhWyèk!¨u¶ïOýáIâ¸1óiâ +›e@œ…”öùùÿ|ëÿWx÷c'#Æ1r^;Ùe!·Yøm¡¾Z¯ÉE¾‚tÅ:lÉX“ U+¨M‰ùöÑþ¨¬-L[[‘е¡´ÅÕS ¼£p@/:ûÄLŒq9È +Tù€aä8ÍnÈ6/ÈBÕY¥õqñ8èäñÎAÂÊØ69ÅƉíÎÿ lë&EÀ½´!·ysC,E†¢æ‹Ð…z(.Ôòö¦º]{ìéŒ]h¯WF+Öì^µöðÓ©ÝÕ¨G}{EuƒŠÒf‡zªÏ‡Irý~,9‹âDüÃXB¢Ö]ýË—Æò+tüúïäKYéôT:Oš‰: DCw~pFÜ4êE~Ù^Ôsñ5}­„AhµCn«Ç `¬LÊÀ€òÝ» ‡!uîéêQ†,º7hþ{«›Sº&ie´ ]C{‚ÚË—(xÁ°Ot3¸ínª†#JwÅæn«ÀìÇÈ¥–p7ikÐ-cqîϮ޼9@÷QG÷3iJ“š8­Ž:‘7iBùª0º_k`Û"üÎp<²^ŒãÕ5}ç„0ÃRà>=Ö;õr|‹Ç„ƒ¦Û7%Û÷;”ÐsË¥öÒÒ1+aŽ‘kxâì|ë¼d«—“ÄsÁ™¾@ 9 Ã.Ô²w]¡€œ7êÑh[‡Hm̲²ªT½- `> 5Žé‡&¸Qá@i/ .˜6 Ÿ&”MàãdOò´Ç^VP;ÍCÐ÷vúƒéŠfi;|ò©¸ˆh:Ö.G#Bª´¥#Þ_pB«Úœf&"®‘ÙgZ'×øõn<ÜÈÉlóXž‹v]šïMàQþº™pȾ6‹¬ßÙ  L¿¥g#è¬#`ƒ›>Ÿ †)Hßâ±ÓcÏ]NŽÇƒÉçœ?Þ‹ý³ŸŒm‡:ùRï'øK¸œJø€·¤, C>‡üž Ú,ºÏ»'ÇãÆŠ„ŠjÇkàA-"šQ¡µ|1f¤‰=E¦¸P$ôä'Ü…zrÁPèXƒSRÔj÷€4Vi2€™ñÒö¶%¶=@,ù–h‚¹ëIú÷z!¬bÏZÜ÷ +–X(økƒßõA¿Ÿ`D¾íNrRE{÷S+|Ý &­zjöÅŒ{¤Ë§ê’rÜËtI©»¤l»¤Ô]Rê.9ñ¥`atÿ9q¤´£-=;Ç(À<©ßŸÍ¼¸‡.-‡ï>ØÛò9N?˜0«²=+7Ûµ.•Dçh_§zs£Öw$ͪ²¶mX­×ì*ÁçQ01ëôìüj~[çb>†–f™Ú65©!âéZ€4œ]£´ŸWÁü”Çé&/Ìb…ß¹þ¶è"Õ?»ÍZc~ M£ÙÏ…(F2xÀª·[52JÚ¼éÌZ`'‘4ÿèˆ2DiµîˆÅñ´êíÜ å®iSn_ |Æù.œ Ma’c€?£˜0´Q0㤰×Ë5]•øíZ倫Âo&ÀåˆÔ"fkWŽíä€óÔƒ¦ÀŒ@Ðý Ÿ:~LÑ0¦ßÄá:b©˜Â°ÆBë9žÏþ` { +endstream endobj 1265 0 obj <> endobj 1266 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1267 0 obj <>stream +hÞÔXÛr£F}×WÌ#dW³söÍ‘e—ÇvÙÚKÊ•VÂ2Y \€âò'å/Ó=3\ÙÚõÃV’r•@úrúôéÆœ¬'ïNo8YדHÅbÄ‘ŒTÙänòóbòî„Nw.ƒ?8ðXQ)ˆ’Œ2AÛ +”‰$‹%œ0ÅãäÖ;žŸÆdönöæ ¹ª|Sé•ë*ÝnóbMΊ&«îÒeæÿ±øú¨„ªÅÝì²÷®PKÀÂFéˆ4J¡¦^›[Yd-0w¾ˆÁX L“8¢:=úu¼X¿'Ö…%”‡4cHU£4C|vÐ h8èÙ´­Mµ1‡úª1ñ»/°™koîÜcNm¨ƒrF“`øH; ˆzµÅ¢qX³)—)ÚláAKSkê¹8@WSììŽ<ù<"•;Òºp!T4‰„_ìIãø9Âk¾¢Ë·ÆY„ζ>4Zäí|ø¨2H¯ÎZæsG/2ÿÖëPôƒIEÍ»q³°5¡¦Ã’2'r=¼°ÓË錮÷ ½©À/,Þ˜x¤ŒLAKät»:;¨8}#Äúþo +ŽæÈwšIK 4ƒê>¶ªB ÁÿŠ’çqš;æ¬ûÒò‹%‡5Ä•´áHº| ~±€È¤OYv°™‡_R©ÕC¶ê!µzHG=Â.: °à£nÈo·ØÄ„¡×L$&¬™ÃÈ…DÛ=ˆj ìWóÙÙ‘‹x@yÐmlÊl€rWT½ ÂŒ Ä(‘ÙåÇùµã#¡JîIW·–ZTõ˜CZ¡˜*Ñ£ºbîä>­{¹J‹2QË•~p$Vjô*’‡p °Ó¬fJ–P=XõqAàùðQ‘mº„-6`ðô@7æYC–iQ” ùb•eñÓ 5½ì؉¼Õ훸t/è$ôž`„Ášîšr ,É&õ%Ó8.Ððò„/70À+xF°þ™~Iæjo©`²$Çw˜†dO¼e“ë/ƒD·[ÀK«MâÑEM¹ÀºoƒÒžœ}žÿ€Òö/SjPÚÔ-î‹•mÛƒÙÊö¥Ùê‚&^›øÊ™h ù|´ã-.Ú[w^ÓUy0{ÀÏsNðþ±£P‹«ó£Ù7Š!F”¶c¬ßšÐcLV;ý2Œ"8"9TC‚ïg«‡3l^m¶èÑÅÑùå©“hܯyî °:}ÕO%h)pÁl* Rº)×zQdX…¼yò\VÆ¡Ï?;¿œýz0œnÏŠ^Ga8 +ÂYêØîÊûJŠ¬Ù‹K½"®ÓëËÇ/Ö5×^8zxa,oó²Á)vñ(«[¯yÂ9ŒÜYÞçÓM†ª¥ û•—múM‹ w“h”´äYûp87{V¹ƒ6_åuƒßñM-÷±xÓÎÇO-Õ#.{Ü+ÛQøõûººü4Pÿ5œº½CÚ…ñ¡D p¯ÀÍ;L¦+¥±’+©±’.V²ÅJ½«ëùÍ|ñŠÞs@]©`»mô»§»>¼ìñfvtqÐa;bÌ¿ÆkÔ£Wù;;½íD#:ȃt¨²õn“VûíË;Ô½…[œÍ/ON&8«ðí8ë&Ϧ÷ùúw<ßè™Á’®¡°ÿæøG€j` +endstream endobj 1268 0 obj <> endobj 1269 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1270 0 obj <>stream +hÞÔXÙnÛH}×WÔc±;ª°V’󦉕†‰8êHæ#Q62iT'þ¤þË>µP\$™n æZ·îrâänñò‡œÜµ #I§D¥†È˜4Åb¿øçfñò5'œlö .HŒ?xš0)H"c ²yXÄ°Âb•I²Ùâ$æŠl>/>Ò«õk¢YJ^½|õý÷ä}ñ”IZß5ùÃCYÝ‘ëª+š}¾-¢m~ÄNÒ酪$KθÑdsµX ÝfëÏä`ú—&Zò„ Z ¹­]Y­³µÞ,Œ`‰AD†iC˜Y–¦Ò8V>6®{ˆˆ™P“‡Hˆ}Aº‡ø”ŽÌ%!#x¨Ò>vë˜8¹(´wñMÞv$Z–Пw¹=´+vþ„”ö˜Ñ*bš†×Þ†—ší}xIøcÌ5B•FØ žø›öV¢’ ëß㶚Ú?Ù·ù9JRÆiL¶a¿º +›¡0.U±Íµ&é“­Ô<ÙžeÑ2eŠfKsªId˜¡„ôÇo?üÏ_ýÿ5~º´µ“ ã¶rq_;yB!(üﺺ:Èmy¸Ú>ì"0¶ä¶h ô¦´xû=7‹ë3ôV"\oÊ9×H–¥žnÜ^7‰bÉ@6q¬m¤± ’îŠýç÷eµTUþ¶Þ‡hóÛ@(uYC*WYK.M2$LÙ° s¬by +¬Ò’¼"œ´·¥˜Bj]ÂãÁƒÕÍf}s³zûîjýf²5Ò2T'î;K™|uÚ.¢êÙܳ½àhzÚêë»ðLŸö¹`”-©»²®òbÚ‘-ûwØo)À™£Ü øôÚ“Ôm}l‹y¨›‚t÷XZW[,† 3F"”'ü¹eeEròˆÿ(QY•Öæ=•^zKÉÄÀöÉØOU—qK6á×d,3ž†í Jª é&‘¥_çÂGlÝa×ÈÐ3l|¢¾yX DXò‹-•_aͶ®ÀÙ[,ºÏ›ïúj˜S)…È|¬,Ö±ñûÔ_À§´Ü…!vòÍGH¡Ÿ¢IèTjá€PÙÛ^adJPíÝѱúâLÊàŽÛ¡þbý#Ãå5¸<£< •§Rb|x,¶å¾ä;à°Ž$òB¿Dvºî +Ty#ûH¤¸QGöYãÓ#õ³IM­5€‘u¾½w1Œs}¡)zÌø½z€bÁ’gN œ:Mmp{ç!ù!pÈ#(CŸ"¬3v¢gii+!iŠ’ë= Ïë#ñFžÎ›< ²¿ÐìÔû¾2ÙHÊ„C ÒAߣ/lku„©1·s$™Óñ ùÞåÝŽr{kÛ•@»3OÕ<£_XmÖ«Ûõjânʲl‡p¢:vð¯ÓK”ؾ8Äqž‹ï^­n'¶1FéS‰õœ™Z‹ª¢¶B¨!/8ºy̲ä¿X YKÈØ>’Ðz0€BKz8ŸןIÙ‘cÕ•_êÄ–ÚT£Nf„'á g˜˜¨áR3M ˆYÿí! ã3>Ì¿J…¼s…æÕü¨4=í÷‘þ07 ²D?*ÿ˜êhœ{I§A0‘„§ôݯ×Wk>#3@í~1[®')ð6ÄeNš|³ù¼Ñ%å€sõ¬4œ%â¬2άšn,²…†äJîY÷¦î"…nt–P ,þjBÓq>çaèìŒõ¾Övãf¼ ½Î3æ¦çÁ>F÷öØ4€Ùá‰Ôn·„%é³N›Ž5ô²œ‰OæyS(Ë›žWû–1£Í8bÜò}C¥ë§zo[½ £¥EËÒàfêÍaê%æ+é²,ÑÕõ<æM‹™åçJ*G+ND+ܬ£6Áå] Ó‚¦*ä‚Þ” +ÀKƒ¦à|Ôu^mF6x++"i‡ ´TÆU ®¶×+;f0#q‘Ú äºt‚¥Éô—£ÿ”ÒÉÅ*Ç‚ôY9ª'ÃÔœÑÑû뛫ëׯÏØÌšdC‹Ÿq‘×£SÖ›"Rþg{—&½º³m­Pu³¢D +}‰£]M½*½$i­]O=8?Vž«Y'U§T³s’GˆÓÐX:o»aˆ¶Ø^м¨Rÿ]Ñ+Pù-š7àr…ÛM‘?'~ÝZï¦é HÅ™9Ó»¿ç‡£U¼Å‹™à]†#£#×þŠ´>ØßCè“ý–4ô&˜Kl ¿Dêo•Ø<åh2Û]£6 ;(ì‹[¶þ9…=¡Œ%vÏö9¶€ùDw%(ðSŠöŠZ2®/q¹N‚d,rù|_BQ÷z }ƒWÀ TŽbvNNZˆ÷} »ÔöH´°éÉþB—8Â’ /e'bÓ¤,9rbÆŸ*éÍCŽr¹Rs„B©‹_‰"9%ÉÓw§†n|E¼&¶³ÃÏ…ŒÅɨà£/!·ö€#[ÉlãH…¤äCAS +EC?²o~z3Uo€õœ¹–ضÅQ /öKõ(Û³Hý샨TsKכş –6óœ +endstream endobj 1271 0 obj <> endobj 1272 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1273 0 obj <>stream +hÞäW]oÛ6}÷¯à#µÖ,?DR|ôÒ´ØÐdA¢nÒ=¨2ãh°å@–›ö'í_î^R’%»ÛÚ¡Ý0 "É"ïǹ÷žC ²š={y#Èj73ŠXž‘43DqÒøÙÝìÛ|öì… ‚äw3! ‡?¸ˆÌ2%‰UœqIòÍŒƒÆS§H^ )Ég·ôùù ¢YFΞ=yB®šDdLÑíª)6›ª^‘ïêÖ7wEé“_òïÁ“Šž4Sd.˜0šäÏgs0ˆnÊx§¦j’¹°LÒ +Ìëí¾­j¿ ¶Îó™Näc˜6„Iåœ#,Í8OcfF2kú÷2“éä= ‚€¨ð2ðpGàešõÉcdrˆQêã«b×’dn˜¥¯–ÞIÚúe¼!^­¦i·ì¢[Ô”÷Ý"¯\hÈU‰ÂÆ ¦ŸZû¯àl5Ûøf¹/[òcb3&¨ïLî:Ûºs• Xq[Jc{´Óôí߈p.™g,¥n.¹ˆ·š$†JHýôË¿¾ô¿k|xÄÚ)ËVŽ÷µSCŠ® ¿n¨‹õš\W+hWÄ6ÐŒ;ríw†Sa¿½K¤‚ý’õ“ÙÍ–•a¶ 0Ê)Ù(æ²È7á–›2{`.fÊc’K÷xU%)te½¨ÛDAl¾®‹«ª~Yt‹ÆS¢9PÚO-p:èuTÖ @ š ‰fGŠštft4“2 `%àfŒ..óóËËÅÕw—/ùùâú|‘ä¿Žà̺¸yÄ=d×­ßøºe$¿÷$îè|ÊrìK}ž¯ñVÛ¥ˆä:qKª]p:W +x^.¶]ŒÂ…ÅÛ‡¶ÚÖÅú) ±$%@òÖ“ýÎ/ɶ.=)î‘}QÞO£þÏÜÇ£ÄâaÝ.¶K¿ž†/˜êÃÇ­¢ïs%bøMäRÕ¤˜zÕ¬ÛÇ‰}ÉÒ¸ˆv¹wfúX‡4Z ;_bú,èZhT1©§ðÒ›u[¼ ó\Æ•Ž9Uo õ´áL…ÖÃ. ÜÒ + +±ô‰¡c\b?ûü Ýü†F`ZIœ£$A +¸7g†ìxpÐÓ±Eoé»b½1 þiìè!Äy·adtZ¹­AÙJâ¾h¾é§Á:TºWk”6úiÁÐËbã<‚Y5®}“Lð kê²~R{ 8^(˜ÿÕ{x7 +Š#™Rº *ØÇäý¤Býø´ØcAáÌ2¥é̓/«» +¸ …ù\AAHå í–<ÞWep-á€ÁÇÖQc~KïÃîèW˜7€´†® +ý hÁé +ðJ„CîJà_“Cʦ™Í¥fNë˜_L/ué¡Ñ×`ðg +h§'4‚³CªF¦œþÐ :$… ‹–ì„Çí¨j£CÃ!ÌF@.’C&É EIòßÂX !ƒËׯ^}|Ts6ﺉª&X¦,Ó#öâé&”“V«zÛxàï³cdÚs§2¤àðkL7«p\þˆ :׋â= +ÏYÑü‰ö(ÃáéK!…kœÿH}Ró—Šp±øálq}LªÎH:—ÝþDŒ&¾áôñÅ\»Áµ8v½Î•f†ŸP²|tP(æß'÷EÄi‚cïk¨“ÔÉ~eq’NŸ¨M¡ÙáçÐïÿ_u’Ð\âå‘(l~;V(β#Úï«Mbá¾ÇÏÍ )÷£ÇuÑVpLOñ˜¾F‹XQñJxpð´U3¨éÓ…‘Âø¶ghI1Î#º½¥ß¡|ë×ÛDú˜À'.(÷MƒƒŽjµf¬Zˆ„ŸæcÀ>Oô&‚,Æš§i§àuA)¥Ã°àÁ2¸ 6¿ 0*¾' +endstream endobj 1274 0 obj <> endobj 1275 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1276 0 obj <>stream +hÞäWÛnÛ6¾÷Sð’\k–gJ—ž›– HÔm@º Mf ¶ÈòÚ<ÒÞr?’%;éZlÃ6 LR"ÿóÿ}Gw³Wß\st·›‰,ËÊ ’ µnv;ûº˜½zÃGÅíŒ ÄàÏ,•YÉ(¨ØÌH¡LåLW¨ø0»Á¯ÏÞ M3´|µ|ñ]¶„gTâí][n6us‡Þ6koËÊ‘ŸŠoA“Œš4•hÎ)7¯gsèÕTq&¢hÉœ[*p bÐÕvßÕÛYgÅÌj xd¨6ˆ +™ç9¢*cLEß‚»á%xL…š¼„€ø 2¼‡‡pä!9‚—*ë}÷†‰ÁD¡£‰ß•»‘¹¡¿{X•~&pçVq‚j?æ¸!Tã´íÖBÛ[©ã`ÿ†xž“yFÎç‚ñ8Õˆj0BýøùÃ?¾õ¿+|XúÜIK¹Ïës'‡*ä© +ÿ^Së5ºªï \}v„C1îЕÛ9èMéëíW"$R¨J*ô4bøú±é ýÆ¢qgNs9ÅO µaT†:ôu‚rƒkHÉʃÇq‰Õ½ÜÃc_ÛïqÄÊ  =¦3ÏPàƒ?­3ƒ{,h áÓ±ênð¯åzÜ€ÝËX߃ót`$td[µm€è*°â¾l¿ê{ÊTä'ªÖžéð£G ƒ/Ê;Òädå8Qø=™xÒº*Ïú¾‘¾Á ¸lH¸lÜí}9‚ô*¥NVÞ{7©‚A6½ƒ¤¼dÌ$*½~pU}[6tФ›òc½!–fxOàoƒªýh¹.»:°¨ÄH|Ö·~Åp*ÀTGü= ŒGà•€5DO,¨;"5¬_ÿzÎߪ¼ Õ¾‹.Ϲ¢ÐG•;4°ºÊ֕дë-áP|øà¸ÄIPÛzŽ7$]šz¸†ôVú‹‹þ +9 xoø$‚Áàˆ_€qþ¢Ò÷<¹H¸Ñ“zŽË§˜ÅôÌ’M™²_¯ÜË8|Šh¤aËÈä£2vL4àâsT£&T£žÁüë·¯ÏWg‹àWS¾±½~›ˆî„q&ê!íIK|©úI[G|UŒ +{„¯¼ï³ )qM0Š ÉN?²ÔJŸb¤‰<ìŸæ¤—û™MŸCcVŠÍ Í›™)¹®5øˆ¹h66-–ÎSÔuÂìVzŠŠ®> endobj 1278 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1279 0 obj <>stream +hÞìXÝnœF½ß§˜Ë¡ÉŽç¸Ü:NåÊvV6i/â^ÛT»`[×Ô·ì÷Í Øn’FQUµ²´Ì.Ì÷Î,Èíâè‡+An›…U$äÑ‘%Š“:_Ü,¾OGo$¹YI8üÁED!S’„Š3.I²[p°Â¸ŽI2Xp¡Iò°ø@ßœ¼%†EäøèøÕ+²®1E«Û:ÝíŠò–œ–m^ߤYü’üž”÷d˜"KÁ„5$y³X‚At“ù•:˜þ¹–"d’`†\Vû¶(óÆÙ:IFÇeÆ&UÇ„éˆsí3³’…¶¿)3©'÷¡"XånBÆC=bW…˜ÀMõÉcdrˆQãYÚ´$XZÒ÷÷›W’¶ùÆ/Hט–3´{ì¼{¨Î¤¿ra We%~¡ÿ1ÂôuÃþ5,ÁV]ù;›}Ö’Ÿ‚0b‚æɦóW•3茫ÇbKiþÚZÏ«ýq,#¦i¼”\ø¥!e–Ò_?ÿò?úï5>|ÅÞ© ìï{§†)Ý~ÛPWÛ-¹,na\ˆm `r™79€Sá¼ýH?æÖ#³ÃV(¶,0ÊS²Q,Ž<߸²oò ÙUuNÚ;ØP•YNŠ’¤ÄGØe(‹Ô(Eß! +i]M2‘‡D&ÁJ,iò #d~S7†K1+ÉR1i¦-ð1^=–mú»(I¤ß³Øz‘ÀŒÉUN(ÑŸ‹ï- .›<°g¶×´n ø9Ýv³yM=Ò‡D¦æ¨;o΂Öö)jî\Ã]Æ ·ÞÓoévŒOó×~6†@—݆‘ÑQ€YU‚|eÊ]Z×Ï•íçJJ?qµEý¢ˆ}K/Ò]>ó’ªÉ8]“‚O g ·qÔC¯÷±‚c„ßîq¶ši\ eÐhÕ…å<`úùd\7“ :H…6î òó˜^ÝçYqS¬[Ö=2ò-2È–dû–¤Ðž×äáÎÅ,'ÅȬÌz«Ev‡@H?V0À?À‹@h ÏðádûºF´ÜÃC!átÒÇ@ÄýCµïÁ0#fȳ=ò\1V”M±ÉÉ5­j'#ür¸yÜ­fPø@1†]šÕ@ PæCˆ|†Ñ:0.lZô¥”Ì@IG¥×ñˆè¶)L„›†q`´y¦^\†C¬Ôœ¾¨£ö=G>hIÝqq@x<ÍÔèÜrèf# É!‰hLCQâ›ü8ãM€î`2¸xv6cý );ì ™´•§IèpdF4ɇƒ•gZÜ–žßp0ºì™"â©*8[Ûñ‰°ÏÉ`ìePãùo$ƒº—A7ÄF´ô<‡U›nݾž$C,hœáó¯äQY>hcW|5ÆeÑ|¶,žŸ$«³§Êd˜‰§Cìh|¦†c©€“+ÜŒÞ-¾Â#Åçü‚ν$dšÕ œÅ¡3±û–Rô¥>¥tŸ:*xuûR;ÏaöþÛJ'Aé¸Äƹ֙ϻùx‹p÷sJ§¥×¹vÇ+]/säšþß3¨a'tPÕ FSÔ°Ø>´ +ˆŸ½âëž»Ý?œ½sjˆXÂïE‰Ûc&£9ùzÔà¡óÑ«nœÛˆó„sz=¼$€Ö  E´H‹À½Ož±™ôãüJ„Å?‹Uá +endstream endobj 1280 0 obj <> endobj 1281 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1282 0 obj <>stream +hÞÔXÝnÛ6¾÷SœKj­‘”DéÒkÒÂCâ±Úahv¡Ú´£Á–In–×Ø[ì-wHŠ²$'iWl†m‰‡çç;ßwdÛÉÙ»%ƒm=‰H?† Ž@øP©Éfòc:9{Ë€Aº™0>þá…Å’ +RøÔçî'>Z¡~HW¸ðYéÃä9¿x !áÍÙ›W¯àºòXL)·U¶ßçÅæE£ªM¶RÞ¯éOx’°'…TÀ”Q…žO¦hP³²+q4ýsåM™¤œähnÊC“ª6¶.ÒIÄ©Œ0¢ˆ†P.’$ľØØL¸æ&FLy0¸‰ ÑsîÒ‘˜$$€7ƒØÅ®ã‹<´.^fuÞ4¢’|¸_gzÅI£Öv¹¾&¤ðhHÚǮڇªÕ]û·WŸ…ªˆ¸þÀ¤ý2ÑÑ2Áý׸D[Uiשׂ>z2¦Œ¨ÖdÝžWíaX“*_çšóHºdÁ8ÙKð´˜$™rŸÙe^D#à®ß~ùÏýÿï>êÚ I™®œïj':²…ÿ®«³Ýnò-ÂU÷aã1c 7ªVØ›Bãí‹Ç~©ÖÔ5fÛ[’›ÞŠPN¹FÐ$¶tcVøx$*dc8f…Lkµy¸Î=|‚³¢ñpQE‘]çŵ'º–Y®¤É3¼“‡¾RfÝd;³w©Ûˆ‘|­f•Ê†¤t¤?íL ‘ï´7&Õ-íµÝbh)Ö¤TCV@k&´fbeºzù¢‹‚ÌéÅb1»ž/®g7é|vyu‘Î.—óó‹ÙÍÅÌKë9#i’X+ÚsEÌX‚ºÉµWEC!½S`÷¶L9§¡†•ÿœÆJØfÂR`ÏÈk(,²q'¡’÷6ºú6€¬Xà +s÷YÁ¡VkØ—•‚æNg÷N¹¤’%"rgG¶ e±R°ñÇ:—ºØ¨lu÷yøŸ +“ÐØï†õ‚™XÂæT$á(ýzO2ξÝÕ‚zÊ8å0E4–ÇS–E“ýnv¤)wN%‘½@à…‘O…žŽÔøø‰ä˜ßµò"¢›@ãßA?«š¿ÎvW +!¾lq}K,wPÁ¬¹ß×Jv>1v¬Ç‘‹3ð&ÐЦøù’í¨!D½¶)ìܶzF{n®Êq…ÝeÕ.ýíQHœ''Gí´"’GÍ&Yd{5:ELŠ¶¾ÞBn½AÒm$±ëYwÀ ‡àØtÁê¡S(Xj¶Nû:x5@ƒ)èÑ׆|Q)cD`H–÷j•or¤„ò^ÓQÀ5í`¯‹¨ÏúlŽ š„O´”ãóµ‚áÜB2=9 ÿfXÓ×ðp—#¸±Í0Í…Záœa3¬QÄá¸[’ÖU´í²Æù@Óf…{wДè(ú¨‰ægï±mŒ¹ùkL_ÚŒ´l,ì]c^Ô8¸%e8š™Ý 'ÆAt¼Û߆§÷ÜzPnŒ}¶ªJ( JL# +s­‰ 5\Ezà õâ¥òB-OtXcóú…’£¶ }yýš#î‚ð‰<ø\v•xà“÷Žô²ÊBLÓX5ÂÁf$¡¾ì¡§7uá‚ñ†ÑpcaHc‚€EÕã •%EŒ`ñáòrD_AÏuÙ¹.,}aé-Ë4ûÙÁ›äÛÂò2¢Î…GaØ~§B.„FŽÂzºãT¼xWa (Ù8Ìjî>ë¥B,5ù—¼éB}J•…`ôØá/©ò(aèZøŒ(¿»yÿaq¾¼X,çéüã<ýe¨>ec<›ê…oãiµÒ +$Q2'?º¬C'‚Sü}zBû¾¦ÿ1B?fw¸Ÿ¼ úVóƒAÓÄŽÚÚ©e¬úeD„2®÷bv¢¨¯ÏÃêZ¥× G:šè)ÂDø'À~6ÕÁØe÷º7ÊôPìõ¾¯h=|Eìy€oÂu ÷í°ì”rØ·žÖöïSß{ýÎHŠ…áíÅQ6ŠÄ·j¯ÆŒÓ^Ù×^á´^ßöÇt©8!ctd€«á0i¸X†B498ßXê2@©;6ᘻ_4HO\‘%3Àñ +‘4bá³S0‚sº+=¦%èÁÈûš‹>µ…î \ØsoI}@Hgõ°•¬Uô°àb|öŸ‡°Ë ýÑ‹y+(ønDò]¹½õ^CŽòtWvØŒ¥SmÁŸˆ¯•ÔX(TÓ©Ž*R¾ð¶aç–ÑØ‹n¼þÆÂ;ñlÛ²?ÙÎÄÏ¿@eß +endstream endobj 1283 0 obj <> endobj 1284 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1285 0 obj <>stream +hÞÔXÉ’Û6½ë+p$ ÆòèÄJÊ)g<5V¶Šs`$jII¤Š¤<£OÊ_¦7i{*K¥ìr†zA¿÷ºÉÉzòòÛ÷œ¬ë‰‘IJ„¨ÄÉH•OV“¯æ“—ßpÂÉ|5á‚0øžX*±’Q&È|?a° e*•d¾€Æ™ßN~^Ͼ!š&äë—_ù%¹®bžP•ë*Ûï·Åš¼)š¼Ze‹<þmþX’Þ’¦’L9åF“ùëÉ6D3 'û­ªâ)·TD[؆ܔÇf[äµÛk6Ÿh•B<†jC¨išªÆ”ÌjMûB¦BžCF0!Ò=„ˆ»|¤. )‡*iƒGÏDç£ÐÞÇ·YÝxj¨~8,3¼Q“/ý Ùâ5Š˜ê(¼ö}x©ZlÂKÂ_׫4áIø#†¯l +ë¯áöªJÿdy\4äÇØ&”GyزöÊ"ƒ“q¹b˜l!Œm³­Ôy¶ÿ$[ºBÁ;jIXj’‘°‹ö»€CZûŒ³Îƒèí«_f7ñüÞšìO…Ù°½°áPê&kò}^4d ‹¬à +Œ¶ÿÍ&÷v9¤TèÁ^ý sgùúÍÕû~?Jf[X‹;yo‚×°H>ÓkÙñ€po“òb[A…½LÆõ»·¿|ûîj´±¢Â¿¹¦2ZÖŽèó  b]¸<õiZdù='õ!_¸´¤4e%i— +á—nWÛ|é³+0»¢Í.%ó6·] eâsÏ´=¥ÔÅ¡nkRšmYd»à­äCo»@e»6+–mŒÇß—Upr +:+ŒH⨠+dˆ·ÙÀê²Xäsâbæ.è<[l.ªª¯ A!Ù55 +\P5p¿a|aôåçWO¹×ÉTR¡ÇXðfÞŸŠ&»sKæsá×ÀÁ¯±x@Õ†Q逊]M¶xM?åÕ‡ÈÓ!en”3†âü^\”¨ðÞÜdÕmðÆÛ‚Ò"õQ¦ý±üíP†£R˜‰®²}èO:A9­Ôí²àSôÂ×5Kzm¡$|bL—N–š Ãõ![ MhŽÎL*èSŒ|À$ЬÕé³,.s×Dëâ/Ç]þ“s`ÙàesæEJm"ùC ÊSà˜Ïw#ºÛk€SɸxÀŽ¤–³g™9ý;fî6ÿN4˜qPŽ>Ä#4ŽäOɤվ¶^Aƒ.¡¯[Éõ*Ð% +*eà•: +¤JB†døPŠ ïÈjK@s £÷@çHÔµc¦ÊµðkøÎK@ÅAÌè`áGåiqK ,äsü.BF»:õö¿­»²'l,NZ ùÚ·à¬ÕŠE¬ò ëYã #p.NÍ…(uJ øvÃì³ÝÇ(KG”¥=ñ©¶ŽåûÅú|žð~“l·j×½ÛظÎ*èX罞ž)xHýïysC/`q.PÐrä( + W(¨AYsO¤tm„ïA$ˆÄз¶]b!°öäêMvÈѹ4¢äÍŠ¸„™ãòtj»©iØòlÎk…EÛÐø\µL–Ádù4¼ð{Ü“ž×MgéLç4µâBçب +¨éBm?ÑVÁ +F+a#ìjYt&#С%-:U:Ð7dW`VdU`ÔÍÈpé$ž¨'èYŒ:W|—ó€˜Ó¸ ƒ{Ô’>Vb_!䉕ë?.8”J¸¬!V¨¢¬Ü³KÄ=¨¡§€·2ÿwÀîÖ~£s0r¨Q®ÏØãy9ê›<žN!ŸgÊõ¾×í¾Š}{ë–t`ØdØúߢO¤\‰SÔð{¿MàMÚŽ"£€î£¬#–´ÎÑ¡¬sØÝ{§©¬ûœÒ¶—ÙnqÜe1œLE-ÖÞ—×Çg~×a›-TàÁ‘C±QÃ=û¤ÌA芲~쎎#Tôë ¦Heå¡ XW€eâ14ƒ<ØOG³ ©”z€fùš§\S#ðé'Õcûh”„£¹±Šrþéþ_|Ô–‡W±mÝÓÑY¢$1ÂÞ ”Ðuu9¥rH!ãªè)D[©O[«S=^:¤çY^·¶×%¸³Ütì“.Æ­Æaƒ-Fê-À‰¬órŸ7R¼ûz0…Ÿ~vñòÒCØ`„³aêêz½ÜmK9Kìb +aÐ@èbR(8-P±îyWxô ЄÙgðÁ£ýÞq•7³»CEÆ)öyÜþ}ß8®fóÙÏ×7÷õ}Ï‚¦Ì=ß9€ñ´§'}ï—Žá· +}Ï8þÄPzñµbðMÄMüÃ’C%xF|ãï8g¿ïçA‹üzíe+*;µê†~\ U:ú¤ôÄ7¾e±;uã½íõä‰é¨Ì~F"‡ªÈÓÇg{a°ÝpÿÈtOžï9”8H8pÀ5þ!Àåošñnì-fwx9TŒÛÃYj6Ÿü%À×Ìj +endstream endobj 1286 0 obj <> endobj 1287 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1288 0 obj <>stream +hÞÔXÛŽÛÈ}×Wô#¹;j³/l’ÎzvãÀ±ce OÐu $R ©ŒõIùËœênR$5ãËAè!YÕuªêÔ) ¶™½øå½`›ffK¢”éÔ0±º˜­gZÌ^ü,˜`‹õLHá¾Dšp%Y¢"I¶8Ì"Xá‘Î[,q ͳÁ«ÛŸYÌSöÓ‹Ÿ~ü‘ÝÕ¡H¹ +ªM»rÃ^—mQ¯óeþ}ñxRÎSÌ› .L̯fs$7Kw¥.¦«Ã¹H¸ v0Ãî«S»+‹ÆÚº]ÌŒä‰AD†Ç†q©²,c\§Q¤]l6\{s©G7= ìMÜÑY2†›:íb§ƒÉþˆ2vG|“7- ç†'Áߎ«œ®dÐ+wÁvôeÈãÀ?öWÿP½Üú‡¤ûŽDŒP•‘ô‘º? +Š^'Þ¿Ã%lÕ•»³:-[ök˜¤\…7ÙxUé!1ªˆ°–Ò$ØZOÁþ7YÎS®ƒl.#á.cnƺï¯ÿúŸ?úÿk¼ÿ/åN%\Pæ¢.wª¯Bá«ð¿{Ô—û=»ßmP®Ô‡m(PŒ »/š½©¨ÞþJ…?+Þ5¦ï­DÚÞ2 ”Ïp 4‰ðŒ­Ë„¢Œ\€/A+ +´²9Š²m˜çã,¡º%WÊ2IOQÁqWÞ~:ÖáâŸÖÑ<ÖñÉ(îÈLz cŒTðþX,wë]Ñ°œ•EËŠLŸÂ9>uÑ4;tÙ±®Ž@N#%7flš,¶gV懂=Íi¹eyÃŽU(ÈÔc(É‚¸¡¬ª]Ts¡yŠCŽÉQŸse2g˜Ìh`ÿXÔò!äìõz‚ +nºãp¦…ò9T† ˜ÎUœxTy»ÜŽ¡Ð +sÅ\Šz‹Š)º˜2î#²yÚct:²]ÉÚmAæ÷;0êC°¦HMÎ\EA~8î‹P˜à&œƒ4­]Aô?<ºè-ûé»àHªQà ò‡J&xRák_mnد~õæ†àw,Ê—Ë%âyoºd8—d—Ô§v[¸SBú®qÙÆ åûSŽ¡à¢’18´ê©ØWa^®¬Ý¦Z·¶J’ ñQÎ@§A#±»:cX±”â¹óm2h}¡­Øãv‡šÄŲ*Ëó¤Ýâì(Î\t­ªx–ºnµWhØ8Ʊ¨_©8Õ UWÅúñnjTAyj:|µ1Âã༡Á4’#ˆ¥µ££a+b¸Õ™Õß«¢ÞlìÌÂŽôE—Ú¿{÷æ÷_Þ½Ô¾|""î¡i‘9"†Š” ¹VA ”TW¸c÷H™×î_¿}?ò-¹~¢íDßv½oÎnw-uS>q”ò4½˜_o^þ~{?q–eƒªqç®"Õµ} Mõm0®îtDjëºî,ÛF–‚ ´Ë¼dQïà\zôIw4-|W£ÌWHˆD' !øðéàlq•Œ”Ë¡­äKˆ!LN”újÄ+ƒz@§TÇvGo£¸ã+ô’Í$äX¾gÔÔ'=o:b4¿²:, §ÁY1‰ˆçt²ðÒíPÚ-ŒWå²p¸¤„K +\Š-þ|¥Æ¨Ôø[K5íeð• qtOal+ã§Rðþ\¶ù'÷Òb!Ý[ÏŒ“àtA*HiÏ6ÒBÖ ÑLµ'jyð, 8Ís¼É÷Wxü†©²ÄÃÛ¼þa2(¡j¤¼ÌJW¦‚=QKp&b7Á[Ìp÷VJhëD ¡Ãd¢¤"£ÌèáúScµ!ÓeæÊysÌ—äÔÄ-†µ1êÚ-f\gßçuUØ "Ø”÷ôuÚ¿ÙC¬ZúÚNN’ñ$Uâ 03™~ßQÊÓáäôˆáAih®Ñ7IÜ÷‘·~ãú-Ÿ`ÄŽJ`U>î‹PW:)Jõ0öÁ§ý¸&1G£D>ãÏ@¡Gñwù;ÆŸ÷!ÏäáäT2éƦë®o•Ì–aQò(w[êÃÞ­½œd°4Òš)mš½L$ƒÞl;‡2‚î`¡nð hë)»·Ð^‘lŠG<f!rw=ÎÇaÌ¡ºIK +f$ÿ½PQ =³D=ùä¿Ž‚wàuGÚµƒØµµó‰btz_ŒUX:™QˆÃ®ÜBÚ›N!>¬ñ +Nš«=dø»‚;7Ë÷{ÈüØn ÆnX^—»¸ꉌôúácÑ©ÇÂi+WÀ³ã(/iI‚3«Ú^«£hÒkMÝëÌAmƒÙ°f› :\ØíãB›eAuò8;51÷&'c¬û"NŒc+AûÉf:Àr0Ü8Û†l˜þ~Óöž®†Ú¨u\-D£*à—]Mv㬫‚54žLhYPÑ´{±²¥]ïêl0Ɉ;Á›Ä™àËíȘr¸v:îà^¡#=Ý0,澧Ξ/{iÛk Ç OÇÕËò‹âGdmHuP…húqÊòbE ”Umï‘p7,úx*wG¸ûöÝÒšv#º;ñ„ZþFjißœR}¹9=ÓÑo†ò2.Uì‹}¥o†mNKÓ#‰Uk—,×F<)½zûaÛzéewÕt4&YSÀº;]ÌͨÉú_U;éï `™ï—§}N7´ï']¯I}ÙEN]Ÿ9«=-xÚó`ß‘ÃÙ«‡ýáL™ A0»õjÚYu°?YŽÐvm§_“l+k×Êèu^žëÏvs¡õõݬ<”*t³z¦›çGӣ拿8=âÉÆÕͤæÉŽÅJ!¾þüWC1 qˆd8‘ŠíêžrI#ÁȧƺsH‚Š†hóÙÙ>Ô íéd²cd¤L‡˜h?˜Y³CÍ ÕAÿàG®´Œ +endstream endobj 1289 0 obj <> endobj 1290 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1291 0 obj <>stream +hÞÔX]³Û4}ϯУLÕ’,Ùz,´tÊ\Ú;·†¹åÁMœÄLbÛá6?‰É®$( ý  ÓNâ[»ÚÕ9{vÍÉföäÅN6íLK’ÆI2MdLšb¶ž}½˜=ù–Në$†ðų”IAR³XÅ~ƒ'F’Å.bžÅÃìž>{þ-Q,#ß<ùæÑ#rÛDveU´ÖÖóÅL%âÑLi„4Æ–dqœ¸È´`©îïCÈL$Á}È&DÚ›ñc³`ÜL²>xÜ™ö(”ÛãMÞv$šk–Ò«¯튕» %~ZELQÿØ÷þ¡f¹õ ÷s±J-𞹆Ÿ¤ÖßÂ%Øjjwgu\väÇ(ͧ…7ÙzuåÁÉØ\Řl!tÚg;IγýáÆDóŒ%ÔÌEÌÝ¥"‘fšÒú×þèÿ×øð'žLÇ“‹û³“ +¹Gá?»Õ§»¹+7W$bqcKrJÄÛï‘ðc±b=3=·Ra¹¥¡¢ŒÅFŸxP§:(4 +CŒ1:ú~-~…eÊ/ƒÊaSã#À*{ÓÛdÚÝóèɯ•gk-ðµOc’ùZ¤ÉŒäôÍ¡X–ë²hINÚâ·cQ- R¯É¡.«®%]m£Ä³‰9éÍ)î­mŠ +2Ä¡ +Ѽ+ÀÖ¡ÞìÒžW×vbÜÒ x‰XGðÑn[CY1‰¹à,t­‚ú 4³ÀEàÍ« ijÇídôÍ8J(]ïà‰¼q¿æ|ìvÅÎ9áp"æ<>¼Èœõ®¶»zOò÷eñÂ|l9¿Ôß³³‡[NÝ~ ûÈ;HS¢æ«bqx’6$®Ú슖sÊ" ŸÄkI¯Z’™ÌaÉ^!œâ”é íï­X¥œîéªX?Ü–‘¢Õm”0W[` +ÀSe½ö»µûÖ\;›V¦°^‚L!j¼)Yɲ)f¬o_ß-p +–L²Ý§F Òv€¢}Qu )°ÊG(ˆ«²"ðs:†Æ™ºtýòÕ›¸¢úÜ5#‹ 'f©>7<5øPá•-©]YWùÎ~ÕCÞ0®BøXÐÐe^!Œm±"ûº) ðKœ…¤ä$¬ œÅ„zd\K‹4ê<1(þÎñ4-n¤íX ¿‘LŒäœ8zsªºü½[³X·È0£]߈9À0ô&Á²ïžB"«"Ò1\ÝÖM÷–¾>ʇD’ž ‰³å‰€4E*p`¿£4pÝM‰ðuŠ2h/Á´ù?iÐÓ9?bý‰ü0WtóôççwÁyȾ¸ôà’_¡‡À¦¨Žl¹ð–"ŽFg`ÄaО?¹À-tªéµZ›Kr¢ÒbÛ}9üyœBe†ÉZRó—AŒ3¯—˜Ja‡n €Ãî!ÌÂb‚èÂqbÊœI‡þqº8ÐNÚ·¢"!Ó˜4‚?µ¢–LcS4šÆÿ”†¼ëQk—dLãKßÁzÌô 4ðd›c§ý€ûÇ—ç•šRœÈßN@:P¯/$¶õ“8 ÊþÝŶeûÁCÝÚ—)žØŸ-»3fßHÇ´þEÒŸ yN<³ +endstream endobj 1292 0 obj <> endobj 1293 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[425.58 102.24 549 115.74]/Subtype/Link/Type/Annot>> endobj 1294 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 88.26 254.7 102.24]/Subtype/Link/Type/Annot>> endobj 1295 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1296 0 obj <>stream +hÞÔXÛ’Û¸}×WàØÂÄ•ä¾9c;5)o<5V¼ÞšÍW¢4LIäIÅžïH~"™n¼Jc;›ÚJ¥¦Šäˆ@wãàt÷Ù¯^üñ½ ûveIâ”èÔ“¦XíVX¯^¼Dõn%$‰án"M¸’$Q1%YW1Xá±ÎYoà!š¬?­îé«×oˆá)¹~qýý÷ä¶a"åŠÖû&?ËjOnª®hvù¦`]ÿ <)ïÉpE"Á…5dýjAt³ñOj4ýSÃ"‘pIK0CîêSWVEël½^¯¬ä‰…Yn,áReYF¸NãXûµ¹åº—°b.õì%‚”{ àÈ—:í׎É!Di|ˆoó¶#,²<¡yÜæø$iWlý)ñžÑŠqCðàfóI…¥*+ñ‘ú®^'Ì¿…G°ÕÔþÍö´éÈ–¤\Ð"˜lƒ¿º +Î`cT1b-¥Mz°µ^‚ý/"²ŒE)×4‹d,ü£!ÌrK éïß~ûŸýÿ5>ü‹{§.pçâ~ïÔÀBXøû†úòp wåèŠyØ1dlÉ]Ñ› +ùöw&üXlyŸ˜!·érËBAé“k,1R,16±“ã(iBé³ì‰ Ì€úDÚÇbSîžH(&¶/&Òz|°B%8;Æ™t[´å¾º;ŠŸÊm÷ÀÖ+PÆmFT…X¶+ò„µ,C·G&0÷N,‚lƒŒ_„a¼Å*L°1Ä3¯|Ô×;ؼS°6¦h³XV¨¦fR&¹G†¶ùjëÌ°æfºš°—Ü”“÷}ÀnŠé§À¢¿-ÜKš’®&oݤ{([’7ûÓ±¨:îM «ÜJI®ÔtÞÝçÃ,$`Ä$"Jf–Fì< OÿÉ\“™ùìÏÿ…ç9•†¹3˜D’†ôd‘±¡~Ê¢¸ +òøÀ ¹¦ô©-7ùì‹úXt˜Q²ì ˜&5$ ©/d̵œò }¤ÁGãm–y¬ÑH‰hø¢ ®·žb‘0<¶ŽYI`£öäžr¦4Ä ´Mf,国RP ~+ø-•çw øo féÚñùêÛ7$©tò+F1ù +ælê +zÈ&=äÍw‹¢=VÊl(7¥ÎO él!QNxóúw ˜.L2eè•Û€R¨ÔN½¡»ÈgENrgö‚çÜù>µn¡åX;I5ÉÔ¡‰É¦®ƒÇŸ¿àqºÐsg“-ú-pc²´,*¼u_…û6ãÚ¬x)<2't»§/ᔤ úvÙ.BŠg½Rg¾å&§vÞu`Ô—Úó¢Ýà æÊñ<Éúâ;ñ¼‘z×wŸL‘ŸöܹM†^ôY‹UÁåp*~äR µÂ­Žˆ‰¹˜ã½wêZê¢65ƒžeè'Ð=?œé¤˜' +…’áÉ›šàöq¡{ÌL§}¥Ù{?Ï°Úˆ©‰¯£~eÁ¡¯ÝþŽëïÛElCqŸ"³%*±ƒ:0}NGÁî™`Œ'›ºèZi:C_ÒÀÐÕƒ–ðtbp™H`³-é×2ˆÅPXÓ³ø¬SÈçôöÖ $\÷EŽëOïhe¡1q;‡öÈŒ²lT?eÔÀ@à¯qüE †žK¨èö}z± µù¼ò÷» Òª?Á”ž7nДçâÀ~]ÃÑëŸýid+7)±ÆÏ5xÓ„[õù±ÐÈ %f軸®‰ðƒ•ô)R-+­ÓgSÖáÆ>\ú˜ï Tžo€¿)_4¾(Ä2'.ñ<ëónÐâ9ÊÒ>õöA«ñ$X8æ1wªU1æŽJÀƾÏØXŠP?{õ8¯ÀýØí|ÓÀ™yÌž!È ôÀ¼ªêŽüªpäÌ,ªùp ÞÔÑùϼÿ üÃeK~ePs3wL”䧮>Â7@ãúТØ-ñ³KS8cÓ•½2~‘Ã÷¨xš›úx¨\-‘ÃÁ#ìYäwfOv킪ÿÝ6,Ú]@hD±²ˆ~ AŒ ŸããÞœ˜ cýݲƒ§ƒéÞ.0 ¶ÝÙÑ=ØBöM·G†’ÌÌqáë`†#Âùg ©Y~Cü&P¯ x×ÊOøU´»L»hˆ3 ´B#Û“¯ùPªýh8ÂJùäGºÎ Í«¾Pý[€ÓUk +endstream endobj 1297 0 obj <> endobj 1298 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1299 0 obj <>stream +hÞìXÛŽÛÈ}×Wô#¹;l÷Ý䣳ž]8pìÁŒbcá Z¢4 $R©ë“ò—©ê o“l‚E€`€ERUÕUuΩnN¶‹W?=p²mZÃ2¢2M$#Çr±Yüa¹xõ#'œ,7 .ƒ?øà™¡R#e‚,÷ V(S¹$Ë\0®Èòiñ9zsû#IiF~xõÃ÷ß“»cÌ3*£f{,öûªÞ’·uW7ŪŒÿ²ü#x’ÎSJ%I8å:%Ë7‹ ¢›•»’ƒéOÇ8ᆊ¨3ä¾9uU]¶ÖÖír‘ªÖ£iª 2ÏsBUƘr+Ó‚žÃ’©P“çLˆ´aÅ}>r›…œÀC•…Åcd¢Q¤.ÆwEÛ‘8ÑÔD>¬ ¼QW®Ý©ð3꘦‘íOþ¥ãêÑ¿$Ü'ã)¬Uj_xæn*\¾29üþ.ÁÖ±qOÖ§UG>Æ&£<*½ÉÖûkjï *csÅ0ÙBh²­Ô<Ûÿ <Ïã$£*ÊÁ¸»LI¬©Ž Ÿ/ÿøÝ_ýß5ÞÅÚIC9VŽ…Úɾ ¹ïÂÿn¨¯w;r_m¡]ˆ]Ì¡[r_¶%€Sb¿ý 7Ë5 ÈôØ2ÂbK£\’¤yæøÆ^ÁëÚ(j¶a,Å•2·Èu¹yº«ê»X1lq$† ã 7v1бçmSO¹f`5t¡ ÐúH<‹ÙT­—OήBÂiIA¼©Ô™’Ôä©«ëC‹î>¼ûù§ïãåߧŠŠ¡bœ÷nr_±¶+ºr_ÖÙÄÂb6NÉÇ —šf&L1íLq+çüíûr÷á~9qŸÚ‡_™ ¯”ÜVÝcyé.£ZŒÝeÃ2ß½þùöþfâª>Éœ}ìsÀŒ}áù\ñ‰Œ8³.oHsœš„æÓûðÊÇ·¯ÉÄZ"¡- e(/=ß1Ùóp¹ +°*jò¥$í¡\U›ª\cE gc3M•›yþ±¦ÆÙÁªš°#•À@r—UKŽN­HåôŠó!YIßÜþBšCW5u±#E½†A\»DSlPú&IH„²iÔå"@¤9v“”èÁ3õBQoÒ£1qï$’ŠtV²‡sÝ_ÝëË¥pïç4×N&ñ€•jF¥º°éþUÞuë¨ë®Ù!B‰·Q°Dmb¨´oà'«¦I]Áo‹ãw¡;µó +$DV’ºb|Žv¨©ÑùHG6ú`Aœô©mcP[Êr­ÆôÁÛØ]Š¼s`f=uÞŠú…igæ‹™¹p p7iþÛ¼®K+öѶ¾ÇÓ®üdƒXwøñ8‹$§&“|èç놸,ÀŸÈÆñ¼8Œú´ÿ+:<ýb ÚËÌk“^qŒ85|Zþusú²+¿ƒòÏJ¯hÆ¥ìÐ6€èënÚ–œJfÄ„”¥¿Éßùþ\‰‰'¸šˆJYP‡­ÏÑk˜˜%LÌÛrQ; æ6A¥L]*·rí­nÛ| r(£ì üØÅó݃§·–ï@ŒòˆÎ±`v€äV|j4Ê!O%üŸ…“86¦’‘€(˜r{ªfÜ&N˜QMªXô¡ç½£ËDXt=Û§úB–¼²Z6·«‚GµqJ9ÅðoO\; }A¼ã)ÞÅM€o›˜§0É<ÁäƒóŒ[ÞùLO‚¢Ë ­_Êî)æ8¡Ã4®0§5Ä4Þ‹rQgÙ½¨ÑOIcUØIÅ–´Å¡t(y»!ç˜ç8œ|6ÎdçÇ{§ JÂO1EŸ +…©P˜ +·ÈgS¡Í½›˜N¯Aœ:$Fu9õ°I©žê ”wËDTB_ÍÛâRcùÂFrbƒ¼œ†|\ö8ñ,¦.Ê(€Ròâ‹%Ô‚¿0øçö¡é!5ÇÒÕ3t)ðcC\óø¯fðøÂ… Í…†ŒooÒc&mâ)ðU§‘ÅË0­ ¦Dî;¼¡¿èBcÚŸÀÄ'GÎCc ?ß„ÉFBë>8?aü¤Ù\T5£yþlUÿõ ˜^,ìP&¡Ÿ(6¢ýp‚¸ì¤vhÚò=Ž“Óê´+0emÌü¢ÉÙ¹š¢9Œb,FÒ Üõk…ñºï÷wœÏŽR,43÷½£’“Ý\E&蘰˦´™¹Æìó¶ Üþ{CÄB<§œÎ!Î,0¯À¬2Ý1eBÅ{¡ÒBf3  +çP í¿ƒC÷ÜhKÚ +ºH<¢³ì:#õ¶·a¶9ò™m•ž—4%ý ~k3v¸Bé~5YÎÌh5iË¿ŸÊzUºeT8ˆtnû¡G{‡¾$"ósÙ–ui‡0Fàñn‰|2 ×ðIcŸxÜ‚ :(4S9Çbð ¥8쬄ÛY•½ír½…è­Še(s"vr‡âèîxo·sÌS·žX§™sQî°µ0¸¯¤øZÙêÝØïçÑw´34 ãy¯E>hØ·]¬Ã •&ör œ¶]í½Ò݃‘`»ƒ™ o€<¢þûî¹~\ÂSCu†]j7]\^œ–Ä(ìxdÂq?ëÎRUÔ}¬Šo‘p{:göÚá„äÚùHž^lÑg šÍ©~¶ÉÉȈòç¾ÌpjàG oœ†ÈÉÎÛí +ž? £Èø~}öÄCòâ$ˆñ ‰ÂѺ”WÏ>&[«ç†² ‹ÿÿäúÈírñO¦¼×h +endstream endobj 1300 0 obj <> endobj 1301 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1302 0 obj <>stream +hÞÔXÙnÛF}×WÜÇaŽg!g†i–ÂEã"°ûÀP”ÄB"‘Š£ßè_ô/{g†”HÙŽã EQØ0×¹ë9÷ Ía9¹øeÆaÙL”Í DFd°+&‹ÉÏéäâ ébÂ0üÁ7šJZ2ʤ› C+”E‰„4ÇÆ#Ho'×äÕë7S//^>{Ó]À •¤^î²Í¦¬–pYµÅn‘åEðGú+z’ÞSL%„œrCúj¢Aë&÷gòdú÷]rM)Ñ ¼¯÷mY³õ:(AµÂŒP!“$Æ"Ÿ›K×=ÄŒ©ˆF± öébÂÇr$® àÃÈô¹ÛÀÄ1DûßfM A¨¨&¶óÌž Òs¥=&¤ +hLº×~ë^Úå«î%áŒÇ˜ªTÂ^pãoÚ[:Ò ®Ÿâ)ÚÚÕþÉ|Ÿ·phC9):“M篮:gØW*fk-„Ò}±£è¼ØO’ 44"I(÷§1Š*пýðŸ¿úÿ5~¼´½“šrÛ9Ö÷NQÈ;þ»¡¾X¯á}¹D¸Z¶G06ð¾h +䦴xû‰7‹9í‰ÙqK Ç-…å+³_TZ æŒÃ¥¶Y2› ™ª6ûAúçä"M…_ŸÐDy¢Úk#VTFÖ†%¨›Sפ¬Z˜"‹ÛiYMë]{Uf7ÄW–2ôn™Á,Ï_áëy]!¡s|•í~‚nf)ïÓ"ñ ,fÊ»ølYG²w–ØdÓ͹c˜N ®[ÔÅEž»dBΩ6É(±Ë´w+hÄ\ªC·äËz\N%s%½Ï¤šãØÿ7‡¯¸aî›À›¹¯­±q==õóš¼@…¨Ëý¦¨Úæ¬Ä8¨•2öAtjƒÆêbeÙû¡R â@Jx:̶E^.Ê¢vU.†Ê®æŠPH»;Î-¢M|b“½%®½)»6ÆYºð‚c•‚á)‚>ÂCao碨g §9”•7vöÏt.îÔ±—س¦©ó2C့(z‹rÁ×;Œ¿l\—Ð’Iž„Èœ´Ò.ÃHÐÔzWàz† Ó< îB@'‹}•·% +Gç0œ*9Œø˜gë5’}ŒŸÐwdØ¿Ø#•Ã?Ô»>Šn )Ï÷Q·µÅjÖÂíªÌ]1pÅñ¸÷Œ;#«cÏ1‘¶ÆrÀv»c´=L%MŒGª;³ZkªL7?¸<¦{M°±8=‚§a5Ûo·ë·$19ÌŠ;ŒòŽUŠHã.ÊÁÝ–Ÿï}F‰Ž;,—E‡N”ÝîÇؽOYo%öV0ìøv»yùa:}ûqöúÝì2½¼ºL?Ž«Ï(Oâ1˜œŠ4-"в„4©-¶wèy‹Æ_[Úq¶òdjP52½|7ùŦܪ.Wá›~rïYê×v~Ba(ÓŽú¤ÜûfÉ™o ›zk™¹É—ÐhDÓ“×3²jyVYœí¤o]­ø§Ç©RƒÅgÍ-°ÌR`‘Ë\dùêá:‡ÒÞèxO¥£óûíëY¡Gœí:Ô +qšUOaIûÝ0áŽ?={7US"GÊöpCàGjñÖiqõ Zü¸x‰DØÉð=ú5–/ìêùÂPF¸ê±á'òµýZбԣQˆ#°\xMp@ñŸA<¡LMéѬcUäV[pfЖ6uüŽ$Ø–ùEE¸Â_¿Ôê‚߯j䀅#1‘~é iöå¬38Â. g¶ÿëº}-0Ù«ÀÔZNÜ÷ )×õò&xe ͪޯ‘„µ¯³ðcwÄ–y±uéØ:XŠ5VÜ«Â]ûôð›IßÑëÁ”± +´:ß6™¾úOë¸è+Þ±»zì}L«x‚[sc äˆ6ŒÑ“­Âmî™æ Í‚Føåß/;ƒ>^]¾{£æ>Dšû•FZ¥‘+¸ëø‘Ù÷±#å©™ýÏâ!q*áwU†jv.cñ`«1Ô’ßÂ᯸ë@½@(õÅ¢Ðrý#ÀÇš +endstream endobj 1303 0 obj <> endobj 1304 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1305 0 obj <>stream +hÞÔWÝnÛ6¾÷SœåŠZc†%JB±‹Öu·nY$JwQ…"˱VG2$¹I0ôö–;‡¤d;uÛ­À0¬),š"Ïÿù¾c 7£“ï/%Ü´#­ 1±% )F‹ÑóttòR‚„t1’>üÇŒ#®|ˆ”à‡ôv$P +A¢ Íq!déÝè {1} !ar2yòÎOÆ\±ú¦ÉnoËê^U]Ñ,²¼ð~KDMÊj +¹‚±äR‡¾Q ©ÉíJmEÿÚxcqŸ•(.êMWVEkdMÓQ$èæ¡î«$I€±õLû<Òý{t™ûÁÞ{ŒD™—èñÄD!|Ľód™?Øè‡ÖÆÓ¬íÀk±«õ<£•ÏºbnPÒ3a•ÇCæŽýì5ùÒòíSÈ}UÚ§/2¶›šÜ¢ïŸãe5µ}3ßä¼ö¢˜KV8‘­ÓWWNfÆÄJP°}_G}´ƒàq´ÿ™$Þ8æKƾv‚§¹fýóï?þó£ÿ_áÃWÊŠ¸¤Ì‰>wj¨Béªðß5õÙjå –+5bçI,Æ.Š¶ÀæTToï=_áf1ç}gºÞŠ|Ó[å3`ƒu¤w€ÆÔeD^ +r]>T]v^úûè$M}{?ቶJ ’j®’A j€ê +«æ…§Ùâ^—ٌ٨rš©+õø <š×6sŽg—Yó-8ÀÒVºîû‰M¡ÐVü{ê8–QS³[rƒ‰"æ.9›Ø±qd,%âdÏc­ñ²Wëó@7wÕ²ûÕ~($W„óÅ#‰˜ÿj>£F˜3ÏŠ9”Ò06ùÜæò {†ô n6·EÕµBŒ ås¥Bk„£Œ0F#kô¨^WzÇÔ¡}Û +—ë"/eÑB·,/CE·¥fR·cÔ¢!Qn»J¨^’Œ¬(º·^„8ºñð‹c™y¾À%|€‚¶áº(*¬±2ÓÊÊŠ;ùH.ìéÓt.#³¶­ó2CÒ€Sd¼E¹Bãëí/[“%”';†nI(Þ%]CKžñ˜ÕM÷!h~°ëæø¥1•,6UÞ•HNáØ—\«]ÛŶólµÂF߯Ÿ±ÍÈnþB[©ä§r×[áÀLÛ^ßK຦ZÍ:¸[–¹ ¢Oîç^HÃal9äéj ¬W8z ÖöeªxÛJ5+âù0â:vØ!·1rSBGëaLïÍ3»]¯4{Å ƒ“±Oº´+iåQ%.»:=í?ÅñŽHl7843¼1–Û3æ?^>¦D‹ìø‡–N«9aƾJ+¥B<ýàz¶‡5‡iÐ0˜PBWGÁÚA¯H£Ÿkõ«×4Êê³®t?¯ãš$ÒƒØ R[@³­¬{Y=Ú´Xxæ§\D?庈´aBðŒXØ9Ǽ]ür>½H_M/÷Pyî)†ýïh;ìš3,ñï늸ˆ>bÅ/kŒ’]êa–-Áýè Ñ›iÝÍèƒ9ÔÁõšø6[AVÍÄ+¢*‹äׇ麧ŽM‹ƒB]­ð#/hÞ°±¤ÀC" A祇ô£‘Zð£ÖNÏee†ƒ~óÇn=B:–þÏ®1YÐÏð 0ÑuÁ¶ +endstream endobj 1306 0 obj <> endobj 1307 0 obj <>/Border[0 0 0]/Rect[289.2 672.24 373.02 685.74]/Subtype/Link/Type/Annot>> endobj 1308 0 obj <> endobj 1309 0 obj <> endobj 1310 0 obj <> endobj 1311 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1312 0 obj <>stream +hÞÔXÛnÉ}çWôã Öl÷½{òæ]Ëg#HÜ],¼ÁbL¥ ġ®¬ïÈþDþ2U}™)KNashötuÕ9uªª9¹Y¼þã5'7íÂHb™#Ê"9T‹íâÛÕâõ;N8Ym\àƒ;K¥ V2ÊYí v¡L’¬ÖðÀ¸"«‡ÅÇìíÅ;¢©#ß½þî›oÈå!çŽÊls(w»º¹!ï›®:lËu•ÿuõ'°$ƒ%M%YrÊ&«·‹%lˆfÖáI[ÿtÈ—ÜR‘Õ° ¹Ú»º©Z¿×Åjaµ<2TB…,Š‚PåSÁ7ï®ÿ<¦BM~„€àé‡ûp>•K¾ãÁDD¡Ã?”mGò¥¡6ûá~Sâ“ȺjHŸEÖäTgqÙŸã¢Ãú6.á“q ®J#ð wá?-z¯lï_Â#ìu؇_6ÇuG~Ì­£<«â–m´·o¢1ƇŠa¬…06[©y°ÿIxQäKGUV,ãáQ“ÜP“’>_þñ?_úÿ»yÿ±“–rDŽ%ìdÏBYøß=ê›»;rUß]1»œ[rUµä¦D¾ý– ÿYmhJ̘[VøÜ2 ()¹‰ß5#yItŒ)fѹ¬»­ +A¾ú¨‡ê!i¡tˆó«.ßyõ—Ë‹«Õû‹ë°4 +¥¶ÐCðïƒgbðÚ®ìª]Õt¯H[Uä—u:¶¿G÷”€ôêêªý=y&\AáìVQ'ˆ“ø/5¬•‰‡ÒJtoðÒŸÀôz •hzŽ­¢‡áȨ¸×g.Þ½Æ8|(››cy–/…£Nê‘’²àÔUµÍ…ELPzUsª¿ÈžSÞ ›†ß–àz¯LGÙOÂ÷sÎa$» шá§êüñÆ,eölä…÷»l6¤‚¿å)¾¶Çvý€ÝȈž*ô]òPw·£@GSKÁ©³gkQ°¼©¶×]yè€ȇɸ¤¼B¥`E€ÑÓ‰Qb<á/¹h6_0ÚÊc &4>¤ÚȤ$%¡" Ä<DBÆ`!)!¯=NK`Šâ>à.í¿Tp>+íî!ÇÚSUžÄmE~O‰²ãó¥Ó… GÇupÜ‹r}ÛAi€‚"{ ç » +Øu´©5#uWCíóîJtW¢»À€pf›E”$&CÏíeF9%ÁÎã7Cf–ß49gPRƒF.Ã[˜ds‹ð¤¬ ¯¾ß’$€Ûú®"ë}Ó•uÓž¸[»Qp;IiÆ@pÒ{¶¢Q§NÑçËÄôzÎõ¯aÝû©ç&zƒžls‰_÷øõînŸs @l©êŽ’w9ô¨¸`©PêJƒ2O)­f)³Û*_¯”-˜ ˆ‚ÉírßJO§òÀ×Ã0 »¢jì—/‹û€6õ©ìcðz]zÝq>Û,Ö¦T…°²G´VC;å…jè~ÝÙ*ᇥP4]*B~Ÿðœ~Û°Ôï +5rõÉmc¸á°¯Wëì÷¸Uÿó N¨€ÓóÍå"#Ä=–=n +šJßIþœwOŽ±…ΙTáÛç| U½ÜÝß‚íC†a´ƒÄ0jíXÜ!Ej×ÊLý©ÚÛêàÓ€ÊQh­,ê+ˆ†ÎþY¬`M¡`é Ý#õ1›µ&:ˆðÅgïË`.îæ8HŒHO‡ñIöfÆŸž?µÒ +brê§ñsŽ†¬ˆ3çòÛùêSp4IŽ¥÷û}WýL º*~¦ +ˆ(š+P†C(€”U³êD6Ά'½F±Ÿ'6Õ¤Íè»T&NÌ+–Eë8W¨œ¯‚Ù‚27ènOÖD­ÇŽÍcÁ†–4ô Eðuu%È7g{Z}?ia{=‰ ™`ŸÐÇT·êÝ®ÚÔàÖÝcp*Šd”adXe8æŸÖ èXz¹ûú"šúMææ5õÿ¶ ÿ·5t í}µ®·10RŒL‚à°dNSîâû£ª1®µül0i\4ȾhH_4l(3¹æ;>åîÙ\âá¢Âw»1£¼Wˆçu"\;X‰¯¢Î +úõÌ$½™ùSö÷ ž?²©‡ðĽ¦m8›§!ƒ|s¶~²êó +‡Ï=xhèr,‡pŠî˜âÞ 3ö9Ê¥>Él6á5Og4ô[Ò×ëªm·Ç»©dq_ª¼÷þ /Š@üŠ…020Í BxWcD.ýº¨bÒ=¶Âc[Ç ®¡ùÏ̸4*”ýEŽˆ ¶$v1ô‰55ŽÄšðµãóh éÅŽ’©–CÒkDU¢@Mô9º~„þõ³gµ᥂&ܸáz(h“èïÁº‹ƒKn²³Ó˜É~ÉÂm Åño»Þݽ]øÃ!MjÃ+LòI°>fëý01Yh†ã¡+ňIÙ/ù” cp„ÅTAAû@ã*ºÊnŽCÆöb˜RÆâÆ}Ê<=˼4Tc–©˜e‡â¹,ã÷™ê€ð÷¥ìÛž^&(Tù÷ê"MÜáFv’d0N( Ò¬ûà .Ÿa °WÂ<ܱÛh$²Æã:ñE÷­Ñv#’&Ü,)†WB³ +«'7 YÝ’fæ­ +6)!Îø²£Æœ\(Ä÷mX_®»cy‡Ü‡i'H×SJׂò˜¾ÔOµo« GÛ¼šß-A_lô¬Íš]+|Õµ&œ"5FP ó¥†4Ç‚mcãç›öDóMq~n‡±ö§_¿}óö×·oVožMÒeßmÔêàŠ! ›=v—*ý¥^á=T?ÖÐI• vd6{Lm)Ç´ž1Ä’º<$ …¹Xdýó¿›ç;G +endstream endobj 1313 0 obj <> endobj 1314 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1315 0 obj <>stream +hÞÔWÉŽÛF½ë+::5m«§®0rð,N&‹-Œèä`-µ$f4”Br" A>(™× µŒ5†#bb³Ù]Ë«ªW5‚Ì{gߌ™7½X‘„§$Lc¢8©uoÖ;Ï{g/$Ÿõ„$ÿñi”$‰âŒK’ßõ8¤0fŠä,¸I¾é½¥—W/IÄRrqvñô)ÖH™¢«y]ÜÝ•Õœ\W­®gÅD¿äßA“rš"¦È@0G$¿ì Ш™¸•Ú‹þ¹"a’–CnV÷mYéÆʺÊ{Q˜ÁŸ˜E1aReYFX˜r:ÏbÉ’¸û—™ ¾ˆ²áñÌ¢| ÓÎyc™ÜÙ(#gãEÓ’`³„¾YO ³’´ÕS· ¥yf´ +XDý±ý¡z²ð‡¤{rÁWKó"R·™÷Ã$Ãý!–U¯Ü—éý¤%?IÊÕ^dãõ­*¯ ‘±Xq¶”qÒ¡†Ñþ‹ˆ, ) i6\¸eD‚˜Å”îùùÿüèÿWøîÕÄN%L˜Èñ.vj—…Âgá¿kê‹å’Ü”s¤«)Ä6HƆÜèF£8•É·ß©°©§¬«L_[‰´µƒQ>A68'ñÑؼLŒ—Ü8HGÛª->ù¯½³<—îzƲØÕ©YQÌThD˜ú´<õ––UK¦:ˆélsUM‡e5¬Wk]·¥nÆ0;¦«r:<7u†)–¥Î6»2²H¹ðÒ…tÒ§z¶–Aß+C}1Ké*ø]ë@;$^[¼%t{ÌGDiæ°Î‹]ˆ¥ ñ¹ž—UC +²¶ƒP¢ðÛ-¼›•UÙ–«Š¹| =íÓ…‡G”MóEÙÚ1)1KýÛ}Yë))ª)™ à,B&“C!ÂÞ}¯É}ƒ£w«Z“vëj) ³áy9ß`1@g(ÞrŽ‹ãðúÕðæõðê&¿¾¹ó‹„%Ù¡ºØÛ,c{‘4mÑê;]µÌ]ó¡¸{Åd´WóYé!Z þGÓeŸ+Û1u…ÈL4 ‘rÓ.q~²ªÀÿ\Xõâãw>I)3çã‘óÉÜ7Ó»µ}TpÉÝÚY +ÎNTÔ]ó¦Ñg_ôƳ8ür+Ö¥Uÿª°Æè6 £c`Ä=¦Ð"9þ(wÃ(<Ì]¯á +B¡…ÌïMÜšc«Ð$S*rV…™ÍQ8X,$‡¹@Â=»ÒѱûÁ‰>˜ÐÑZOÊj›è²]``ÀRÇ̆¦ÊÀÔ †’våK%eY5ïÄú~ˆ<'³@š‚ÔIÚ™GÖÈøªl"FdVµ7@é…òä\ã‡#ØHº DZÐäxl70,±ª§]ð¢ÎõXÚ·+£#€pס¾:<È(IPÅÇP»|‚¯ŒGr¤©ˆ½¶·€«¯Ï^x. MQ2êH'S§8G8§­œ-¤€pÐ-Bpcàgy¯A!Ë-Ù,tõ sNèN¤ï„GsåDªpåèËÐ]£[ÿC¶ +÷–ËèS8ïHÊÅ1èJf,îzÏ<(܃Š1³ÍGêuÑ,JÓ<mðNÉÕ‡ân½D‘T¢(.ŒN_ƒBxUÊ«Ê&›• Á;Ê`¹Db‡xߘ1™b¤ÌŒ)¨ÑˆÂYt'Ðm°kºÏ¤pᆄÃp«Ý4é“|¹|_LL’'ôv×l6(J›Hív­d:bÍJè»æjIøâýmŽ+ÇÁà,I?Æã„/S¤÷ ¾‚M[½8'c«ö¢pöÇÔê}ç,~öX î_w+Û”ß`>º,Zì¦išu1ÈVJþÄ߃þ^­›çÝ°Í寧é =¹%ål¡1½ 85Õµž´Ãþ‘u¸ƒ“cj/}õ5Ùc‹íÞóN­kX9Ó~nu6¤2×Zr"B†ñ—þôC¿î„E`E3X²ÞÔVª9N²ñ¸êƒçÝ1Þ ³;ŵnï늈ÝûñOè @sÉy7j‹ºõÆa·ùd§ïHß^¿ws5SH;°í„†ã!¦ý‰^.EÿéÏEÿ£»ÿPú¨ès§À€ ýéú¼l‚/£‹eg½ÍŒ~}°èÜfß ÁDÿ·àMÕ +endstream endobj 1316 0 obj <> endobj 1317 0 obj <>/Border[0 0 0]/Rect[466.32 489.24 549 502.74]/Subtype/Link/Type/Annot>> endobj 1318 0 obj <>/Border[0 0 0]/Rect[63 475.26 118.98 489.24]/Subtype/Link/Type/Annot>> endobj 1319 0 obj <> endobj 1320 0 obj <> endobj 1321 0 obj <> endobj 1322 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1323 0 obj <>stream +hÞÔXÛ’ÛÆ}çWté ˆÅæ†K¹òH«hÅÚÚ¥“ReS.,9¤" jµþ +û'ü—îž p¹R,Åår©D€Ä {ºO÷é3Ëa3{ö—+›n–JÈ’Tž‚L 5³õìÏ‹Ù³—8,Ö3. ÁxáyƤ€L&,°ØÍ´ÂUHX,ñ&á +w³E/Î^‚f9<öü«¯à¢yÎdÔlÚr·«ê œ×½i×åÒÄÿ^ü=IçI3 sÎxªañb6GƒäféîäÁô?ÛxÎ3&¢ +ÍÀe³ï«ÚtÖÖÙb– +–¥QÊt +LÈ¢(€©ìcŽÅØÁ¥é ö¦¤z{ ‰?š é{+¶·R$”k á( `Eê:nXÒ 9GÈ&–l’$ÀóWgq=ÿÛw—gW×QkºëøëQ'Ô®/üZ|Šká°2뻋ª¾h›[Óö÷×þüdi¶[ñä)Ÿ¸¨ôd?L‘vQç¢ÓÀÊø4&A6@t$ NJ褄ŽÅ%g™˜âBFVTÖHÂ(%n'ƒ“,Ð –­tÉɦ9öÊ›ìܘþ.F$°úŒ-äÎLö—G,è¡ÄÆå¡´ßÐùz b:X6HS™òhFpYÉöìÔWçW‹7—o'ÙTŒOªDÏ¡¸ÇLbKdâ.¥Íÿ¥>‡Åƒ1°!hÉ€Ù\J&ôéÂô(Û÷ÃØn7î êiFmâG ;?H5ëXdÃÈò™ey2RÅ3÷$¨’ü󟄪™VpÌÓèi,#Kà? ŒMÚUÌ%1¶$-ú(Å*Œ@ãRíÅC‰zúªêú†M±ïÜ[ÎAFcøq©f¨Á.l,Ñ~ ­-Ek>bª`bdiJZ"wô(Ü­s¥Cc-`Ú©}²ìêIÁ*‚‚€Å)÷íC<ÇÃh¹»ÝbS7®Á(õN~àÀÀ¼l +ØV¦[’f#}YÝ .ygZD¤ÂS[5Sä$•1ÚNÇ#'q‡xþ—z2yдÓa>gl@ƒÏ`Çúä8’ùGÀÜ˱Ó!ˆ†5Öà'ÍQ&¥ÇA„L +9 ê€ÔLÿ‘…ûµn©¾øäx*:+ôC+Y +èbE à©bº»¦V?êäœqùP$“îeé)…ç<£hYC·_.M×­÷[æ^ çI¹° ²w(—* Tùþä£ö ã5œ[è,ãʘNv0>~xöLDövLJgZÒ‰£ÇAB9Rǹ¿‰ê„éÑ‘õ¿V± +›)/FÉ·UNuÓ#zÿÝWÈÖeMüxe»Ù“=œ§ÚOÓ!Ù4¤q†ÂœæÅ)b¾"µÿÁFðÈ93I'=<î¼@ýßcûãát*€®£÷MµºŽÎª1çZxÌgp<1/,Äs"O`Ì…z ñŽgþ°„»CGOþ`æÿ|‡WyþàLw +V˧ˆ+?Ñ3<;®}E3‘éšYÈ¡ ~˜f$þ®ó³I®-× +endstream endobj 1324 0 obj <> endobj 1325 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1326 0 obj <>stream +hÞÔX]“›Æ}ׯ˜GH¢13Ü7Ç–]›ZkUZ6©[ö}ÀÒ’’`ƒýIù—9=3 Á*ñæãV*µU ¦?OŸî^Á¶“ooÛ&Z±8HX˜h¦Ö“ÍäÛlòâ`‚e›‰,À."‰¹’,V$Ëö“Rx¦Še+Ü"dÙçÉ{ïõì ‹xÂ^½xõõ×lÑø"áÊ«·M¾ß—Õ–]UmÑlòUáÿ/ûš”ÕqŦ‚ ±ìõd +¤feïÔIô?1—^ 1lYÛ²*FÖ,›Da +44ãR¥iÊx˜Ah=ӒǺ{—¹ Ï +ˆ2áqÔD!ex&ód™ìm”‘µñ:?´ÌŸj{wëœî¤×k{ÃJº¦^åóÈs¯½s/5«{÷’´×@DðUiI_Dê~$÷Ã8Åùn!«©í“õqÕ²ïý8áÂ+œÈƒÓWWN2cbP°¥Ôqí0Gû&R(Mxè¥S{1_sí1Ö]ŸùÇ_ý÷ +ï¿RîTÌe.èr§z +‡Âÿ¯©/w;¶,·€+bë €ñÀ–Å¡@q*ÂÛ'_*üX¬yW™®¶bijKƒQ~‡lð¢ŽõÑ\Æäe@z·U›ÿìg?N^d™´ÇSžj[§tC""ÍUH"¨> O½÷ʪeëÂ×Þæó¬Z/šúáu±ùà}ªËõßQRgâibM2w$R I œP0§º.6ŸÁk ; Èj_¢RHðãFIê4ÎE.…ÚeÐñ\D™MY•F™E'\ªª­Ð¶¬+βûòÀËœ¬´Ü ÒHûƒœƒQý@Gò X³¬øX°£=!Ч,èõ8î(Öl_7kïq¦®V…EîTIˆÏ÷Äh×@¤QŠ±œ™Ì¾‰\Øx’Ž²0X,o³eö_4†«ùUvu3¿µ'»€ ®ÜQ:)ºV•šÓìÐæm±/ª–ÛS.ïà\.6Åç©ýQðE@ +Éo‚ÏÀÅÏV5 bå€zÌk¼¾ª+4“Þ¿Ï›¯˜“¶QzRöÎE6Œï½ú#ˆÞû1{¤Ëƒk²½™!:Œ;%Íû†ü˜"Pq’ÔŸ™ýgìxhÈ€úaN—|?6$âRèô‚!¨…Z»dˆ·®w…‡î<: :S¿#µÅ¦¥Ë2¯¶æëGl²“PýeL Mj¯…tÝŽÀ,"qшXašùû2ò‰æ ow[˜ëHôUâüüà³AQ ¸+ÄLwÆ]NÁKÌz +Ä·=RM†Faà\©Èjqc#Ð +¤¥ƒ¢•T8Áp ¤ª•–[nŠU¹)ÁŠí=ÇY½aT`þÙø ˜ Œ†}¾/W÷ìÑ)ýv4 fø²èi4”Ô Í!^âÎê°·ºŸIau’ô,ðÞûÞ×@‡¨BÂúŸ!Ù+Ãågy’—ô0ÖÞ^½b ¸>%Ä¢bt<ŠÂ_ݼ[ÜÌgól &"; Ï4Ÿ Eô»g‹8u2ïv1{uõòz,ëü~®ko—7w‹dXþ1Ë›F^Å_0•1ÒS«…yq5LF²ô‹~£:´Ñ¾™£w½¼»Î–w׳DlMéYXE·g)Ób!¼nÆm²ó)8õªåì-ºâ€­¦XáP䦻j´ÖPM̉«¯£~OHÆõ˜³cUþtÍ(v^0­ÿ$§kÆtcf +šQ¿ˆ{Jõ‹ÅƸ+lªs_Dø™‰e*ÑÔĈ]ÂSvèÔŠA°€ÃðRu:¡§ò³hn@ãçRz4§nœ9[[퉛~rjÒ0ÔÒqP»Ög`‰ì4²+÷e;óè嘟OúA‡‚ÀMhnT4 bè1}æ>>ÀGPXÓ(e/ZÂU4‚3$*7°\׬ñÁiä¨ÐÍŠyK3¢ˆ€8J”DP!ÐaÝȩجI®tèö¾ N>`Jô- ‘[QEûô¤Èi—·³bÊŸŽ›3Ûˆ?ç`_›[88HÞÑ0s£ô«'é?Ѭñn4¤ywWÖ*:‹F=v%x·7ylÍÐkñoIó0Ó7ÒÞib ,Çš¤=i@¹/h:k,4Ӛʃá嶲ó:–¸d)íãr4±Dƒz;óïSNÆÛ¹ µAÈÓB1uÂ=«˜’ ‡0 »2pÿtÊYE€Ò>ö…]žB¯Änª½•- M½:į0Ñ +šˆFƒhy†gx¼ð)ðÄÙ +ð¬ÈÏﮯG+¼à„ -æÎÓ€ ­‹ bO·R¡ÁÝ¢kìfZL—E¾³›©ðê/,¥B¥$s¼”©¸¸•b‡G↩?%Ò´qLGuÖ-¤A÷b{½°—ö;¦:áµû•Î¼iCuªÓKšEàÆÈãáé’ŠÝÓ¦_Âp9fö³ü6Tž¨§ÐߺœÎ²É¯ Ý1þ +endstream endobj 1327 0 obj <> endobj 1328 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1329 0 obj <>stream +hÞìX[s›F~ׯØGhª » ô-ÕŒ;®¬‘q3¤DF2 ¹€’ú'õ_ö;»€´Ø¹õ2mg2ž1+XÎýûÎYÛLž¾¸lÓL´bq°0ÑL¬.&ëÉ·Ùäéw‚ –­'B²¸ˆ$æJ²X<,ÛMHáA˜*–­°DȲw“WÞÙì;ñ„=úüɶ¨}‘påí7u¾Û•Õ†WmQ¯óUáÿœ}MÊjŠ¸bSÁ…ŽXv6™B ©YÙ•:Š~YûSsé•ÖûC[VEcdͲ‰–<ÖðHóH3.Uš¦Œ‡I„Ö7ã®y¹ ‡mPæ!‘š ¤ ä÷ “ƒ‰2²&^äMËü©æ±w}w“ÓJzmqc¬¤kêU>¼nÛݦzuÛm’öˆ®*-é‡HíMAÞ‡qŠ÷XBV½·On«–ýèÇ ^щl:}ûªS†Ä˜Pk)uÜ; ÇÁþ‰JzéTÂ.#æk®=Æúë§_þõ­ÿ_áÃOÊŠ¹ Ì}îÔP…¢«ÂÖÔgÛ-[–”+á°õŠ±aË¢)€MEõöÖ— +7‹Þ³ÃV, ¶4å\ƒ:Ö'B + ˆé7î@0ëhì†iÕ‰áfý¸ïbõo%ê´-ߜͮÎ_Ì(ßÒè˜1[6®,ENi?¿üaq9ŸÍ3G`˜œpù§šÏ\‚ëOa‚™=W‹Ùóógcqˆjüצ2ä)ü?fÇZöbyy½p„¡ägº·¼|9r/–Ÿç^èÆ{qîæ ôss7¿œcú|v}‘-¯/fŽ4ŒEGÕ2êКV ±ûÚ•|ôæ¤À–³ç—s‡Ñ¦ +yHF¨µŽvæDè‚m4 tÉ·9;T寄‘×ÞAŽ8¥è¢…™-*hÎeLƒ¥O¨!‚Žˆ|á6w ˆJçú“ô ·x[´ j«AÚvùˆ“£sBtŒãå][î«|ËòºcAØ–·& ó4|P%”³îä²-we‹¹¯W>vkïàãßî è¥äMÂ#G„îíO­ˆ!œh7÷ cP>Î}üAÁ–=boMA‰¶µœâ2U7~7]¶nXíƒä(B{œeäN ¶ŒP[w(‰ B ßšô)®Å#´§dWHûÎDÒX +êD{S° y ÎöéI‘Óá +‘«¨|‹_Ig¶OfÇ|NÃÿœÆ61ÍrÎâ1å„ŠÎà)µdW7l[45ŠÞE×>Q_Ø;X<¶ÆµÄZüž:Ó8Ž‚i†ùÂÈéK½Þ{:ʈJG׃šp Â`x¹©öuA nŠc1SÖÇ°4¾D®Nü{›Ó´ñÑö~Ò@È"¨ØÃ`)t«¬‡RÐA)wTØC{è•8,hoe‘¡©w‡vpÐD(„B…gø„÷uöu7 +zw ø¤Èϯ/.FÍ)|dБ–Œœ4”ÍîeŠ§‰ËÌŠ> 15d{ð°R»‘³Ï»«¶.«Í@ pR7ÇwpqÆ<™Ð÷ru7œÎí4f%vŸC}!boZº!éÎb¸T›åí-™ ¬çúwB +€˜N×ö‹ lŒ~tÜ,ìކ퇂FiÂ›×ΆŽrY­Š=4SùÃ!Q©­ÈŠHÒm™Iz’'uÌûby¹˜-³ŸÐ›Ïççzè•[ì‚«ô°¾—‰ŽUšD÷0§Är@â']æsŸU ÞúìËàËùóËùó¿}þœe“?h×2 +endstream endobj 1330 0 obj <> endobj 1331 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1332 0 obj <>stream +hÞÔXÝr붾×SlÏÙX0ð·™^8²râÖ±=2\uÎÐ$1–(…¤âx2y ¾ew"esÜi:Úýùv÷Öƒó÷÷–Õ ”y1øqÒƒR ƒoÒÁù·8¤‹àá/>x1) ’󤛇R˜ç'Ò<îCú<øà\Ž¿…€Å0:}õÜ•.™t¶Ë2Ûlòb WE­ÊE6Sî?Ò¿¡&i4LÂ3^†(ÔÌÌHDÿXºC1áä(&Û}ªÒ²Æé ðô'dALÈ$I€ù±çùƳP°(lÞ£ËLø½÷ˆ"õKô¸Å#Ñ($€/ý¸qž,­"06^gU î0d‘ó°›g4N­æf9=§pYàØeßÛEåle óôx€¾ÊPО˜IAîûQ‚ûïpˆ²Ê­y3ßÏjøÁbÆeEVV߶°Ê02+À"Œ´}ÿíOPiÌ|' +›anÈB y¾ýñ?_úÿ+¼ýJ±“ã9¯‰l³Û,üïšz±^Ã$_bºR!Ö.Çd¬`¢*…Å))ß~q…ÄI5gMeÚÚŠ„®­å3dƒ Ã(ìÎ˼ôŒƒÈ+Óq¹ß¨¢®,—„F&·`Rj&i)ÊÙ>þ”¾ì”›þt`Žë†rGaÔÜïÔ,_䪂z¥ Æí°]JRXk W +;[?Jx^å³¼¸<¡¹=̲æjì»r»#h|Ap¡4—û¸ˆY«ýÖê–ÿÐê8î¸ûƒbå:È(a½W铧dîÓnxÚW0^æ5‘}‹zõþ¦‡dfýwÎŽ¶AOøèöû»Û›ñMÚ0wRò-‚nÆ}œ…o¡ãè5÷wãÑÕÅõ±8D¬ñû­®½ŸÜ>Üõ„`„Å¿'crûã‘WÑ$ EļD‡?:óÝU?`XþÉýêfµoо½Áôâá:<\{ñ„N:°òæL—ú(@áÛ²/ÿà“×f©3¿¿ºµ¦ÚJb» ¤)Ǧ5T7Ùæóå´gR|\ì‹üç}¯¸§~Ñ…rx7M¸õ‡š ÔŒõ‹¸'T¿xˆê·…Muîò§YŸX†Âg?bÿ€ÀZ-êIV,Õqú§ª3lª3n‚é'&¡K$ׂðHGµŸè’âÄøv»«óm‘­!+-9¢kY ë|“×PÕmÿ„´;ÅÒ0îK¼[t¥aú!1Ø ½û†Ž|ÃG¨c‹!©lxææ Z±mb[{IréF$\äDm R²2·Üx¦ãÑêÁÔ½iO_«Ú.©r‘n2— íÀ£‚¥Ë=l}J²^:*£Æ!)(«ÕÏ{„ +? +´‘Û%äà aŽ‹GxYS²bkUU_RÎ9£v²ŸFó'Ã; FZuUS1/ýò•,‰‰ë¼ž¸æ@0‰J씼jÎyÛrØ€¢ù²Ø–Š"W©CúQ@_W’)õn%uÜü%Ãh–¤Uï7ùô*íMÖ›$ñðêôò¹ms«¥ÌVõN6£Áì 0÷¸N=$ :ê92OkÒÜÈïf‹ȸ󉟆××GG¢5ÚaºxçUë63"š– +#›®Jè#úÔX±N…eF¼¯ HQW=E„œ +— +{¤×Üõœ"w},#B»‚ñ¯™Km؆j+rvë£[]¯¥“ID6 f7 )K«:]Ê’kJ"s8ëõÖ$Ï3]•+ÿJ·îdTÕªYATÄĬ¥4y"cZZ¯³µk‘ó¥¹HÂs^¯½žu&hsГ½²Áþîùñ=>½î.‘vºué˜à¤©0ïÑÐÜ,i@áå ÓÜÄFh‹?89æò.wC§}S­s”iãI#ΫÆÜ3s;`T’t»óè®z©oúÇÕ¼nJ°U¿Ìj> endobj 1334 0 obj <> endobj 1335 0 obj <> endobj 1336 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1337 0 obj <>stream +hÞÔWÛnÛF}×Wì#™Dî•$‚>¤Ž“^]CVSvQÐÒJV ‘ªDÕñC¿¢ý‰þegö›e×hQA€pe.Ï\vΙYF–£—ï.YîGZ4ɈÌ4 Ù™Ñbôùtôò-#ŒL#ÆIÿàÁ²” +NR‘Є“éf” +Md.Èt‹„I2½]FoNßE3ròòäùsr¾‹YFET-wÅf³*—ä˲6»E13ñOÓ¯À’p–dÌ(ÓŠLߌƈffn%Zèvñ˜¥”G+€!“êP¯J³·X§Ó‘æ4Õ‘¦JÊEžç„Ê,I¤‹Í†k_BÄ”ËÞKHnö%ܤ#·IÈ ¼”Yˆã‹\9¿)ö5‰Çš¦Ñ÷Ûy+Õfîd…Ï<*cª"¿í[¿i7»ñ›¸{&LA¨BsüÁr÷GÑË4‡ïÏa X»Ê½™f5y§e‘ñ{o¯*½18›ªs͹NC²¥&ûOÂr0šQåcž0·T$ÖTG„„çÓÿûÖO¼ù‰g'RÊðä’pv¢©Bæ«ð¿uõõzM&«%”+ò°ŽãžLÌÞ7ÖÛ¯1ðG3§˜ž[)·ÜÒ (ÖL§ÜI@Ns혆 ‚æÈVlnÅ& AÙÇàÑgdn·§åü|WmߘÅUtÃß_uj=Aæ¾ñŸ|q +¯O¾þyrzqÈUìöNŸ5À5ì8ìJ’¼úÍ+UÐÄÌib†z YBs« HÖ„C?Î6ÕÖ8ÝÒQ}G.ê¢6SÖû¾¶j È* È–•*È,wÈÓC0ZÄ•’ÝÃ%;/ŒäÖÙU¨—Ä›SÞ¸rÛÔQ¢›ìFç“ïÎO'Óãé‡Ö?IÓ¼»_zŸmDö­ýÛS’ÃÞÌI±@¡®Á]‡å1/z(ùiëžè¤º8À„w€úþ½è㢶·Ú¬9(³\UeMѼŽ8§îElñNªÍ¶*!ÖdÚfèabÒ€¯ÊAœü© A²[$Wõ]1£Ùß96:¢IòÅÖÌVÅúÌÔhñObÂ41?õ,ڠϪH_Öõä°6=T gšµ±0­ÛåÀBµëa4åWÛZ|”ÚêGvÜiGÌëSà`Ì$Í"êØ7Œj¨Ë1§¬é¾áÐîã·1 Zиcìðĸ_ã14÷b³]±«…%±Ài:LµÐhÅ`nö3ÔÙêÈycv&Æ/£1ŒN@acÈïA´ŽQ\aª2U0Rµ“Q«X<„yJÁ'ÕbA¡’¡:ýhãiLk’©•¹F[£3ûÏ +›=Qâú 8Œ4‹â­”ô¬SÝÓ…Áµ:åjßq~à×)Í„:mW–¾Ð±kèż“¸|mü™3*˜SÉ–¿Y ›/xÛù6ÕÎGáÛªœYšñˆög ˜M@tö¿‹»².>Ú@˜ð®U÷W5n:Bª×Àt_|ݸvp¹é‘âÑ›ˆfU —–|pSìž…*С£qÎóæÜŒpm¡p4$é ÅÆŸ\㨢œé¼+ù/lò@y¤€‚ïØo·~»ƒõ¶as’ë#¶«-š}_¬ñq¸o<Ói¯ßÀ4Ø£_—‚%~¯áÞ*€mËCwNÓÍ©AÚ…r~hX#èÖ¦¢×ìù Tyd9²-u±²ì;”«_†lVƒJëÅ1î +T´cdó 4Enƪ®?˜YMûþŽaO…:浫5´ Ù<<î{ൻëv}o 9œÕ=Bv\·¤Ïô’Bœbðß±(M+Ê¿3¾^ú‘¯X;ÕTaÇËqý˜Z²L7RÙ\‰µîª%TÅCz)ÿí0«T? ›Ð°@J¨úþÛ\ Õ˜N}DC¡ë‰'i¨<æ óuzOC„*qïú`#ð·rODýÄ­¹¶ovnL ³GÅSÁÈr\<•çÇS5“Aщ=¤š®p>ÙœW‡ëµé+§ìuÍ£ÙV=ø|ªzÂ(õ—>£< +endstream endobj 1338 0 obj <> endobj 1339 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1340 0 obj <>stream +hÞÔW]oÛ6}÷¯¸ÈÕÕ¬(J”„bm’î» µÅÐ …jÓ±ZGò$yN0ìí_î\Q²•,+¶ÃаhŠ÷ûÜsiE—“G_+ºl&FSì'&†´Oµ,'O³É£gŠeˉ +ÈÇ?*‰¥(Ö¾ôÊ®&>´H?L5es,|R¶›¼'§Ï(’ ?:þâ :«=•H-ªË:¿º*ÊKú¦lm½ÌçÖû)û–´³IMS%•‰(;™L¡ÍÌÝJT¿®½©Še +¨¡Yµm‹Ò6®Ól…)â122$¦)É0ñýÐEf›á=B–Axë=2 ÑÝKD¼ÏGÚe!%¼ “!xö,ØûDÎÇïó¦%ojd,^n9¯ÑÚ…[PÁÏT”žŒDì‡þP=_õ‡÷ôU„Xµ ø‹JÝfÈá‡q +ù3,¡«®Ü›ÅvÞÒ+/N¤¶WÙôöª²7†Êt¹ò9ÙA`â!Ûax7Û¿“Ja4‘¡H§¯Ü2"ÏH#ˆ†çßüïG?_åû¯\;KÅ•ó‡Úé= +UÂÿÖÕ'ë5ÍŠKÀ•±õÀØÐÌ6Í©o¿xƦ]È¡3ûÞŠƒ®· å#dƒƒ&6#¢épi8Jßø¼¢ÇËí•-Û¦çãÜÔºc¦¨ÚbSW›çù•õ²÷ÚQ8h™ôõ>“lGœoì¼X¶¡œ¶eñóÖ«AœP¢”Ôqä„ý}÷ôho¨„1ZzA"*O‰šÚ•¥êÝ{;oåm§HV wïñº ·sýU¾Þ~Ü÷ +”óaì}mó5¡,¡LDÞ™O„Nzä6lÀeHv÷y=”KË4qëV(Z^2†‹Ö«Ü×ka—»ó¶ÆÀD|T®Ëâú¹= n!Š:LûÓEh”qj_;!OŽ²×9=Z&zT—˳ً³ÓYöã­T"+÷€ÀqßNM›·–‘F»¢]ÁPÓ²e@€,0غäÆH.>¸TÊÇBz˜9‚²Uѹ¦BÌ›ho +Ôî 4# ECÕ¦-ªËËÍó’ÞYÚ6váâc¸(túq™ôƒxà﫪¶¨¦ ד¥*Ý7L_aãNIÑ8Z•ñ!mç7e›_wI˲ÀOejÜdäGÔ_‡}ýƒ.oD˜Ö3‮}{s!I•æqäóp=ȼ*1EçYåõºÝ-àœ HäFŽÞ G0ဪçüà6ï„ö¾"ZeÒÄC†kj wdäû§8òªs„‘pד„›}äÉ…çÀhîÄÜ\]J?3&ût" > endobj 1342 0 obj <>/Border[0 0 0]/Rect[145.02 610.26 196.98 623.76]/Subtype/Link/Type/Annot>> endobj 1343 0 obj <> endobj 1344 0 obj <> endobj 1345 0 obj <> endobj 1346 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1347 0 obj <>stream +hÞÔXÛnãF}×Wôcõ°/l²÷͉í`Ù‰a+Î" %ÊæB"½$¿#ûû—©ê o’=,‹Å`LJ¤ª»ërΩâä~ñþûNîÛ…–$3¢2MdLšb±]|»Z¼¿ä„“ÕvÁ‰á\x–2)H*c ²Ú/b°Âbe$Y­á&抬ž·ôüâ’$,#ß½ÿî›oÈUñŒIZß7ù~_V÷äCÕÍ6_ÑßW…•¤[)a’,9ã:!«óÅ â2kw'Ó?7Ñ’§LÐÌëúЕUÑZ[«…,Õp"ÍM˜ÆÂTÇÊÍ×>„3¡&Á!ø‚´áÀ½;Œu‚!ðPeáì¸1ÑoQ$n‹?ämG¢¥f)ýéq“ã ]±q7¤Ä«¡UÄê_û›©Y?ø—„»Æ<£J-ð7îKü*U©ß_Á-Øjj÷dsXwäS”fŒÓ›lýzuåƒÀXWÅèk!tœ­ÔÜÙÿ&ÜÀ¢SÔ,EÌÝmB"Í4%$\ß~ùŸ¿úÿk¼ÿˆ±“)ã¹8ÄNöYÈ}þw·z¶Û‘ëòÒë°‹8$cK®‹¶€Ú”˜o¿GB—ņ…Âôµ• +[[åk2‡5Ö™NŸÐâãéèuq_ÖU­þ1 Ç€Sø[%ð' Ø÷¹ K[ÿ¬ +âÍÆCyBdã€,$'6¢¿Hˆâܶsñý‡?ÞL¶£˜Â§ay“ùð´]Þû¢êÁ­L—ðš¯^…s9·MÊ–Ô2ß¹%–Þ™˜ÃlðØ;'¯6dWä® ‡¶ØºÚ=ßuAÊÊûe[îŠÜ‘Ræ,Æ ˆÑpæÄ ¸xÁÚ ¬RpiHû\uùg°¸¤°ðëh)R¸î#ü*ï¬éŒ%cgò>×…u äwCÒ'mЬ¼3{äx_Ù—\ÊM2r>µÖ–Ò0‘$Öqé G¤½ßß‘¶(È>¿þ…°T‚Ä ™ÏÒŒ$€Ü@P ðÓ@3#²5PEP\â%¤±âvA žÙ@¹øüDb6=7ÏM—ïÑA?äÕý!¿Ç°Þ7ÀH$E5'e®˜I“£ddÖ)Â0àü¥˜$Ó<î¿D\!>Ô²0¶ 4p丧rÉ“²8}%˜üÏ£›~}5òîrV0Ñ$0óþvä©ÄL…»ð±{4¯ÓŒi=N-9ìbSlŸnº¼éNapwÈ1t”rÁÄSNΆHšŒ5Ñ`ú¢Úœ2 ¹n’ŽLµ¯ìë" ,Ô®‹ŽqÑᘠÌ,SºÊF½wTAhU¥Îjh ŒÐx<½+º§ˆƒº@¢XF ›¦N¢Á÷ÙØX`®4õÐXLö˜Á/òõƒ7> ˜H‡bì}¿E÷_•~p2  )‰'ƒp;šJm˜!Àùça“ú(³Ðñ§¼”8:î‹NM}Žp©¨ãÃ%À¥ÒóÒ˜ ý°í! ñ–¬k€Ì<œO…» ™ï÷Ó‡³iµ6Ú¯&Üjd„_ª$ጙ™Ú›@tRq\çJ +µCJ[íœm$00µ­ÂÝ®Ž |z"¡íëŒ\FÂôo5d_;k¯Ð¥PL'sšS=}Ú"õÛh¤í©GYêÑ@='hež#FÍÏø¢ãå„TF"{”í õÄ$“„ÒÀr¶Bòx‘/$Ô +ô"‰ÍÙ>•yë‰(¼ëì‚NÙ+†Al&#»Ž§ù§oÚ!²Àчö)sI^DfPŸŽd`ÜVJz‚ ôH\ $°)ܧÏœæûÇh»ÚÕz; ZšÎ±›yfÅÜ€ßlŠví$¡¤å¡‡¢2†_Òw%)… û4è¤%xiù]ÛÝžrkŒÍ'4Ïžß"²ôâ³ÝzïiÿkÜ8_¿d]AþCUÖG¨B׿ó†Ý*‘aÆ ö8:nRæÒŸ"‹™’¶ ObËqr~¬»â/dR2ípp-_»+ «§ +üqÂ=…€8á>-T…Íþ¯®¼º¸^ý2ƒ­lŽ£±ÆHW[ÑpÃå• Ú;òqƒO^CòŠSª8öêh*‰@mƒ‹¬Mýh;*|§{Ø–Xù0€Û¤"¤“†}OSî÷Ŧ% MY¸x4=à j@UnÁ–k¸y‚Üæ'5݉ÖDª£óÌéqâÔ„s$’–#žð½w[p‡?ˆíMº„ÔµÒ‚5Vå®p±híÀÓûˆ[¿÷ +aù?|þã( 鋹¯5>VÐQŽR[·ôj•ÀPÝ„\SÞŽ]’ÇríÅ5yªqŠ5,z¢~ûw¬Á×ñ€g±}izˆ)ŽëW:è…=B¹ÎDŠpÆ@66$m„уŻƒ£R”ÒøÍ\3sy,UâIÊLôÔ/Â7=[ÒÖë¢m·‡Ýh\·dmïp–nÒaGézÛKôÅ s7’ 8kL*A«vÖ +' R™1Í´Ô-u†% +ŠôºHÍ]!1~_?L8¢ÌÑ,a +»)fÜ (9%Ünln±Z‰Ð™íFxçPV¹I +.i£ôˆ B¤é´Ëù•ºùÃÎ ç‹1NKÏö}·7ÝKÑØèÐ%N5ßÒu}€þKSÇÑþð ã‘ý5š~¡âiÇ ÙÚDŠÞ†šì÷cŠãÀíÅÚÇt³“ý†GçÆn‹u¹-r5+l€”í9@RÞ `zÐÊœÐBº`†&ʶ/ 9&-~ž1ã°%0k–&/M½"Î]LòuwÈw˜ßÈÑDxŸÞóþžóWzè°þ—‡ý°k¤ìP{Ô²ŸÝö´ƒÊ¥ÂÃsÚÎ6´eÆãÓ]¡Û4y?ÿöíÙùoçg«³ÉÞ@[ž¬ØŸã<Œ¬Æ»Ù԰˪v˜‡Õ:Þ ‚¦øç¡‘“W8"Ðô™äM*Dšö3ô?(:b! +endstream endobj 1348 0 obj <> endobj 1349 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1350 0 obj <>stream +hÞÔWÍrÛ6¾ë)p› +ÆÇ4¶;í´ͶӉ{`(JbG"]’JâGê[v)Rµ¸™¦ÓÑ ìÏ·»ß.Ù,ξ½dÓ-Œ" OIœ¢8iËÅzñM¶8»Dl½’pøÁ"Ò„)IÅ—$Û/8Ha<¶Šdl¸ˆIö~ñ†ž_\ÍRòêìÕ‹äªDÊm6m¾ßWõ†|W÷e»Î‹2ú-û4)¯I3E–‚ £Iv¾X‚@TSø:Šþ¥–"a’V †\7‡¾ªËÎɺÈ:¶àaÚ&•µ–°8å<öžÉ3¼—™ŒgïD¹—àñˆ‡u(X/ãtp-“£R{È»žDKÃúÓÝ*Ǥ}¹òRáji1Mñá¶Ø†CÒ¯\hðU‰Âú? º'î_Ádµ³:=ù9JR&hDvA_Se‡G°¥4É€vŸ¢ý'”¦,¦v)¹ð[M"à %dX?}ùÏþ…;•0‘ãCìÔ˜…"dá¿kêËÝŽ\WHW,Ä>Œ¹.»ŠSa¾½‹¤‚?Ë*3ÔV"]m`”'ÈšÄLˆÆåe‚^rtÞÜ×}þ!Ê~_œe™ô×-³Æ×)nP„6LÅ(ëÓñÔZÕ=Y•‘¡ë÷õêºÜTMÝÝÒwMµº% ö(fSo’Û¡H¤\¡Âx¡«rýEE±«µ×yÓý Áͼө½B—øÐÝô9¢˜Ð¾#9€„‚Å]áˆV‘¤w=üÇH¶­œ +°ÎŸ sÚ ;Òzš$ûÎJz€ˆI +<õ¶$E¾Û9)–ÅÊ áчûåŠôÛ’Ô‘x•îßó6kÒ{õ@ï@~£z1Ü–.Rû²#Ý]YTë +äTµåw©=0K%˜ÚGö鈫c°]D¥Ñò·ÕumõÄn„ÿšÉd´M»÷Es¨û™€D‹É㸴“¼ÝöeÝ3)$3T!YºËÃÕçf¨†t‚nóh†z‡_çûò–úÒg•Bø86¢s8^"=)àü6o¿"!é‚ûPŸRÚòµÅþ@A6.(ׯ£µÐ%e,¦ÐBL!˜etl†zuHE/[̸˜z»¹qЃ$SJ{ãbëãÓŽ>Ï‚$$"uŒ’³<öx‡ë|®‚Kp;a6ž†v˜UÐ<¸Sº,†ã^ç<ÀT¿² TLMC°g €®"Ç‚M$Á÷êèøCT >nð+°y>˜9Ö•=}× Tòry…CÕÄ Ÿ’Ã`3‰J }hãȸ-ÿ8Tm(å4žÀ5Œ‰0#äõ +8£Fê8tð¼oÚÒ«\J‹⼌d”:Èû-Ümê¢$}Y¾FòñçŸY[‚¥>VZWÇÇŠËŸÑ Ä“[sROôÃnn ðw1+çk<þ$p˜hmûTU÷_NÕ‡í—ó꣪ž¢)ToÊÿ|ô4ŽCc+žh,fÞVîŸswlY£æíghÞΈ£'ÊSB)˜+$L”´†®&¡ô4À¹£$ÈçyÜ)b9œ¼ÐSö„TöÌ"°”Þãç¦wOÍQBÀÄeŽ¡†@uîc1ÅOEœ¥‚=t}«§ƒƒ§–ì׫‹œ°4©ülÐõy_ºá¦±“¹{ïF¡žÔ¢ìßfãÇØD2vãÀ|çÈå@L¿<¸ÇÞ8åë¦ÞÝ{¾ÃxcCôM¬O¿¾'|; 1Lò 0ï±õ +endstream endobj 1351 0 obj <> endobj 1352 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1353 0 obj <>stream +hÞÔWmsÛÆþÎ_±Õ' O¸;¼ÆÓ‰$§é‹ã‘èôƒÙÉ@à‘BM¬¬éôõ_öÙ»DÊršI¦ÓÖöÇÃݾ<»ûìBÒfvñí­¤M?K5eQNqž’Ž¨3³õì›Åìâµ$I‹õL*Šð™gB+Êt$"E‹Ý,‚Å…¦E…E$cZ<ÌÞWׯ)9]^\~ù%½íB™ ´›®ÜíêfCß5ƒéÖee¿,~MÚiJ„¦¹2Mhq5›C «©ÜJ?‰þsÎe&TPC Ý´‡¡nLoe]/f©Y +R‘¤$”.Š‚DœGQì|³îÚ—ðX¨øä%áÚ¾„Ã…¡ ¼ŒóÑw6LM&ªÄ™øDz(œ§" ÞíW%¯T0˜•[PÍÏ"hB‘þØŸü¡®º÷‡”{F2«:UüCn3cïã¬Àý·XBV׺7«C5Ða– /²÷úÚÆ+C`,Tc­Tš`Çñs°ÿI²€Ò\ÄA1W‘tË„ÂT¤ÑøüùÿúÑÿ_áÓOŽÎ„äÈEcìô”…ÒgáÖÔ¯·[º©7HW®Ã!”HÆžnLoP›šóío¡ÒØ4+1¦¯­LÙÚJA(?Á58˜féÏؼÌØˈ n›¡ü.þ:»X,”»^ˆ"uuÊ ‘¤BÇ,‚ëÓÒÔû nZ™0 Ö7fS·Íâqo–VDPÎ…q™_áxÕ6¨ç +çïËî ò”•:ð^©ÂÅADI”:Ã#j-Ø{~›ìS"òØŽød° ­/ûÏÒvÎq/÷kP©F n;Ó ý©-(h%´N¼-Vþל=™0Z‹\™’Æ7(¢ˆs ²¾Ý›ª^צ§áÞ PŒYi2»ˆ‡xDœûÄÝh +y>Åê}ðC˜‚vвe{0_?Pǽɬ'FUÞ,gÍ#µ¡vmMZ‡*‡°©‘Û–íRÁC¨¸/4›¯FGdµ(r®]1ÉgZ¤¹OŽ(ö=Œ¡Fz¹Ìèéúc¹ÛoO1<‰’ŽÇ,µ@J/FKgúšª™¥AÒ  ³¶ÆøýÀ­Ð„ +É|d"—ÕEýýx"œÇØí©¤ª´þHHÐOe鉲=TÛí]Y…ñ>PçZ#=Ôý8“ŒÎˆH'SNÂõ• ãòîÃâyÉHÈü8…Å¿©A­>Sƒ× Uó -­ÖËÒšÿû¬÷Ggðùç*“ÜŸ0WQ¿]•CÉ»¿^†ôw+dñ…¿ýþZgúWc?T"Ž`ô$üâ‚…_Þ›êÕë'kìöaPÕv©†£~zbîàäÒV!ýæ·ô„,‹uà~j›wißÁÈõ28[X•=5-¶ú$<ç|“F«r0£¬DÄJf¾~º‰°ÁA±\6gËðÕx,»Å¤·3ákHNGìËp”_€ðñ%çÛíPvƒ¯ë¸5½Îåï®…?üxs}» çȪd;±oʨú ÛŽ’ÔÙ'·~‘Ü·mÍ|Ê6Ç(¦s¿Ä.$þçý_©æv@87o»v‰0>‹¾:ìÎÎé Ìzׇw÷«ý¹nV>Kî.iðêy½ä¥dD &‰qžåb~}ýæòú¤ÞA²Éᨑ&í˜ðP£?–M…VQö}½iÌŠà d€ O˜ +çQCÈd[àqßVø쇟ÍþÉøU‘ºÝ…àª$80)bÚè΀>ñ1’«í¡¯1rð³}¤ý_+6­^™ã6"wâ‹çê»öЬJþ¸hVè}!èVà4äoZj!¨ƒPGÅ‘ÐÅ‘ƒ¾EOXt†JËõöC™1¦!gÀÜ]f‡§ñ;z¿­=Ád<sÖ;ª#9·¡Œ,™ØØ1ø·ï¾»ú_‰b꽂»|½í°]qè¦ñE|WÇŽXÄclžCášMõ<|Kú[t*†ßæ “g=0“–c@’2ùlÞùIzßtpN=Ó ÄY‘ç᜷ÀÊäa4\‘»0Ãv :ô½Í—'tÁ>ý®õíïJNµÒr W¬…s‘úCuÀ8Y…ˆòä¨ÛÁÃEæ¡FÚmM³AÃ/„°¶Ü66îÚKÎú&P• µÎ»±”:®ö_‘<Î#õ0Môÿ`<àÜÝ +endstream endobj 1354 0 obj <> endobj 1355 0 obj <>/Border[0 0 0]/Rect[85.68 549.24 123.48 562.74]/Subtype/Link/Type/Annot>> endobj 1356 0 obj <> endobj 1357 0 obj <> endobj 1358 0 obj <> endobj 1359 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1360 0 obj <>stream +hÞÔXÛ’ÛÆ}çWÌ#‹#̘øI‘VŽÙÚâ2q\RÊ‘ … °Ðô>ø+ìŸÈ_¦{.¸\Y–l§\*-@r¦ï}úÌ0²=þ⎑m;Ó‚¤IFd¦‰HHSÌ6³¿,gŸ3ÂÈr3cœ$ð,K©à$ M8Yîg H¡‰4‚,Wð’0I–§ÙëèÙÍs¢hFž>~úÙg䶉YFETo›|¿/«-yQuE³ÉWEüïåß@“pšdÎ(ÓŠ,ŸÍæ լܛDÝÄs–R• †,êcWVEkeÝ,gJðGS¥ åÂC¨Ì’D:Ï4§©¿ƒË”ËÉï ˆ°?‚Ç}<Œ‚!ð£Ì‚óhïmäÊÙø2o;Ï5M£Ö9¾ñ¨+Öî…”ø4QSùe_úEÍê_ÄÝ3a +|šãfÜ—º/Sûoád5µûe}\uäŸqšQ^dëõÕ•W™±±J0Øœë4D[Êóhÿ—0J3*#3ç s¯ŠÄšêˆðüðÇÿ}éWxÿs'RÊ0sIÈè«ù*ümM}²Û‘E¹…rÅFìbÅØ’EÑÐœëí»˜ ø²XÓЙ¾·Rn{K¢ô`³\r‡†í: _Yt + #´I¸E›$8IÈÓ¿ÞÄ:zú÷o7wo¢¦hßÄŸ‡çT& ‚äÖ6EkME’Ïðèp.s8—a‹k–PcÛ܆4E•¯£E3ÞŸÚ)p  [U6Þš¤!/Â÷Ôò]AP ]t"G/rr –"¨‘œ Îy%Ê+hf.áIhñêë»xùŸÁðØ-Bå,(ϘWÛå]±/ªŽ4dªRɆ’bâ½j„Qƒ"éì\)[R¬¢†…ŒbcÜ®®¬«|GòjMVyEÞzç¢þs³!:¶Åšìë¦ Ý;Ø\W«‚”Z É”Å}\¯ØG|Sî +ÌŒ‰(yÜ،_I{_uù÷Îg3¤I?þÐVV›˜§P'°WGWø £}Œ¥“£‹$ i3‹ky@—’ç>#¸Á£ø?"¸o.$5gd~‹/̶(ÈX™ItŠYÔþú6SÒª£'€<¡:é'&´ïˆ"@ÏK\+zŠ"­œ]eeýv¾Hç‹…$5÷Ë›ç1>/ój{Ì·Ð6… ,€ +ÎΦ¨Î'S5 +^D­ó`â"ÀK§³oÚšöbÓg뀬jHyYµPÎÚ!AÄó ={qódqód’$Iùµªãæ"GCL¼M3óQ½ÈôÐñQÑ9\3îÀM ŠH€4À¯»]øtBb"ûåØÜô«è,'­ MÉ%…0œ5åoÖ `¼/ÜlîM˜@kÓ#nÌÐÙGÄ–}(u¡Á)N(ΈÀDPÈìJ© ! +LÍþj>+ ò¤)r´ÑÊöP¶ÔØS +—B\á£*ûÉ ëXaØlï‘e(ŸÚÃu’¹J„<°Ã˜`Ô…ÔOÅ9Ô€¶Àa˜rɨ¿ª»âÏä¬eAx]R…#JÀy Æ¿6;Æ&'ÆòÂá7-I¥#´ß.^ÝÞ,–ßœUAz‰Œh׳iRœ¶@œñ±fðx#‡ˆÈ} Q„…G²qÇw´›bÜ«2”>…ÿX‚*îð©–<¥ÐsÝÜÀAýæ.€X˜¶å~_¬Kpjw.eà³ÍÀ—‰Ñªë¦Ü¢Ö)Å<šKP²:K•ßü®*ñÊ(ªº ¦_?V +Õ ˆóiJ×õ·+TZ+|œ«ŽÃôasÇ=?Iuiý]5øÀ†½fw¸ºVYËBšO³áû¶³1?ü~i¾ÿP•oâ):A•i<ß!šîGœ æJvËh{æjoKB¨pÔ³¼ÌVd¿›€ª:#Ãk àBf’èÕ!\4N'žý;ÒŠU¹)uâ€éyñ±³÷@*ä})»4Ú¿…ƒÐ6»[ŸñÏ4qܯêÝq§ÄÑÁv +ñ¦£§jÓ;OCóÆF‹E9ǾCÞuÈP8³÷ðŽawÖ—û³éŒYÜ$vÇ¢ˆt5)·•».)Û>€tRDs¬Œ+—¹¸Ç&‚²Ón¢;=#á!ƒ22tK=”AG¬%ÍÒ+h©=òÜgÐ`MÈ`_“ÄdAŒL{ꊬˆDŸFLÞlæÈ_‘Œû3oíZb‘[ø»¤_Å™ÀÇ$‘ÉŸO"ðÏÿ 0žàï +endstream endobj 1361 0 obj <> endobj 1362 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[425.28 658.26 549 671.76]/Subtype/Link/Type/Annot>> endobj 1363 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 644.28 254.7 658.26]/Subtype/Link/Type/Annot>> endobj 1364 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1365 0 obj <>stream +hÞÜXÛrãÆ}çWÌã gçŒßì])•Tìu‰´7©µË“ ÅDY®¾#ù‰ü¥»g B¶vå$•”ªPôõôén²½úýBm=³Š¤<#:³DqR³ÍìËåìÕ ‚,73! ‡?¸ˆ,eJ’TqÆ%Yîg¤0®"ËÜp¡Éò4{Oß\ßÃ2òúÕëÏ>#ßT‰È˜¢‡m•ï÷»rKþP6EµÉWEòÃò IM†)2LXC–ofsˆjVáNE¿«’¹H™¤;CnÍ®,j/ëz9³’¥<²ÌX¤rΦ3ÎuðÍ»ë™Ôƒ! x@ùÁá.ÎÁøQg­ïh˜ìL”&˜ø§¼nH2·,¥ß×9ÞIÚëpCvxu´L˜¡ñØWñPµº‹‡d¸raÀUe%~.üÓ¡÷:uðü7p ²ªCøeý°jÈwIš1A‹(²ŽúeT‰ñ¡âk)mÚ[ëq°ÿE„mÓÔÍ%áÖÄ2K i¯Ï¿ü×þï +ï¾bîTÊfŽ·¹S +EDá¿×Ô/îïÉín pÅ:l`¬ÉmQP› +ñö÷D*øg±fmaÆÚJ¥¯- „ræ;æ8hS;âô‘£{ôP튲I–=³‡ ʶ‹oI‰ÛűXí6»¢&Í]ACE9y³ƒò8l¼¥B°Ô™ž t\$ïk ŸšìJ/ +PpvJ¬€ Kæ@B”DzÓÁÀy”|¦8ð)Ë:§ÞÓï ÕI ¨÷ÅçC~TŒÛža˜io˜ÌD4Œ“æ@RFn‰ô´ŸÙªyG÷Òÿo“(<öb²ö;¸äMÕõ©X!ÖPÄìŠÔEAþñƒ)Àòs0_ÖEýÏ6õZ&3b-gDƒk¦›-ïx@pνãSàm8/!Dˆïoën½EJCs G£B`Óaþ=/ûóô˜o à³€ۦă²¥T›‘ÐÍ̪Ãéë|_<…3Þ!ÃLa Qa鉔 ‚l™A¼¤£¹ÛÕí‰I)‹iž0jÚ¦åã±øEì§mCŽ©Z`bSÚ·ÑE#hj4QIìÓ᧪w +5Oâûé`š³ÙuSÿŒ6-œ¥éÅÄõSÃŒëÀçÅx ¸}–0…¾šiæ²4–j>£õ1_áóSÑ@(ðE àÐÇÑrPŒV‡û‡}Y“¼\ǘ:zª0ÄQFQS «ér+T?P!ž| 6Å|²å+Èïn[" €­è.¨ùP¬yjPvà +ýð#Pð–<úËSXìBЖÈýaø")Æ¥aj²žKºÍLÌìéÚ?±ÙU0ny÷ÈØ0Àj;ïÚqV@Óø;?ÐÁ9?Ôuª"!¯‹Íéö€QÊèiÑTC>t+mtìVóˆ ®HV_Üמla¶;![fa|(ŒÒ 0—Ù¾}ûn1ˆ²dúÉŒCU ˜aF–lüŒì+ U*{]DŒú¤ï‚Ö8Z +`ÆÃ×<’‡ÿ2´f|waxˆài`;ävŠ«"X£­p®"ÓœvÍ]¯Ð yY;&|ÓK\‘À’bè‡UqŒ½ýütthÿç§OÙÔd¡Xæ¦h‚ËvˆõtENw»šÿ-é!Ìq[*Ô²6£æ!"DüDá—fWÝåk4<ÇêhŠ-ŒV:÷‘sÏ…ƒ˜†,¡%ðþ,—2<䘳aŸÁÜw  hCH&BÙ@=&–ú úÉ÷4LŸ ñÛÇ]è'6°—¬àð]^ýî"ÎRJבyàé÷ak¡Ð`ñ²»`g#Ì*,ëõ‡+tÂQ™¨ïÙü;–x9þvøÐ º”+wöB5²(j +jjêÎ÷µZ¦„S/Súø*ý´ˆGýE‰—æÒ +aÒÉ€ ‹š!ø'ú¾>ü¸B¥‡‡IÝÀϺKÝ)³2ðͧ‡Tã*NË•÷éyÊ„”eÒLá3©´{!Þ€T<Ê/b.Í„ÛÐEm–¾mÏUù}ĉ‰æ*Œ$[ľ7êAW­è⚶ãÌ||4ÁøÆîÙ2$ð±ÿ©¨êýÓ–ie&dh7Ý §Ÿ(PÈõp³ìO^±³ç•—€6&AÉ1oÜØ¥ðo¤°á?5†ÂJf?~ +íí_ƒ)f’6‚l¸‘Iè÷rrøŒ””ŸnÊÓÑÚÞæP§çjùTÛ• ë½Véb¨mìõõ`|õ9t˜C×æ0ˆáLôÇ׬£ÓnÊÁGÂôß&³ƒ/Sr]$}lw[Ît6™Z\÷yL‡[×óÓ^î>;àƒeñÿçõMú²·7ƒ}7æ…É–1èדÙ`Òôjô ´ìwÇüµ§Û]Œï¡X=çùë'‘ô¬Ço†¾‹þ¦ð<ïFÄGKXŒ%ôb ZXª°i]‡âD·]õêë暌ÊÃzµ—ïxþ£¯œ®—³ŸXø| +endstream endobj 1366 0 obj <> endobj 1367 0 obj <>/Border[0 0 0]/Rect[220.32 90.24 296.28 103.74]/Subtype/Link/Type/Annot>> endobj 1368 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1369 0 obj <>stream +hÞÔXïnÛ6ÿù“´Ú IýG±“¬Ýº¦ˆÝuÃ<ŠMÛZmÉ”9ÁЧØ^bo¹;’²eÅ[Wð¨òx÷»ÿÇXöξ XV½ÐƒˆÇàÇ!xJÕ[ô¾œôÎ.˜,zBÇüˆ8bž„ÈãŒK˜lz¹0î'Lf¸à‡ɮ÷£s~q ‹at6zò^—®ˆ™çË2Ýl²| /òZ•‹t¦ÜŸ&_£$ÏH +˜CÁDÀä¼7D†$ffVÞõÛÒŠˆI'C6p]ÜÕY®*ÍëbÒ üõ Y“^’$Àü˜sßhJ…Í9ªÌ¤tŽ!ƒxú5ÞÛ#ÑVHý¸QžÉ=FŒ/Óªw²Èy³§´’N­æf}'wYàX²o-Q9[Y"i¾\¨«JúEr»IêûQ‚÷_ãy•…9™ßÍjøÎb&eYVV^‘[aèm+NÆ–2Œkû~×Ú€Hw3ßI†’ ³ À Yè4ßþùÏIÿ¿Ì÷¿’( òo|çí£PØ(üw¡>[¯á:[b¸R"Ö®À`¬àZU +“Ó£xûÅ•nª9k2ÓæV$un…XQÅ&ì$ £ðT¡á¤†ünò°UîäçC’aâîm£¦.Ic’1BÃتY¶ÈTõ +“ÄǨ°”@]À]¥`áz’Ê•9*[T˜f‹”³sCæ%mÛ*fUxäyº1`WµÚ~o@†ÞcX74fNdÈNŸZn,Hì©e£9üp¤v‡ƒ~Œ5¶‡Æ¸ÁÞÃÂk+k¬ÊìÁÚ1Ðô&Ù˜½œ-ó¢TÝݘDKŽÖñ¦ G´Ýé'á‘*ÎýMQfKxП¿ŠÈ#³Ò +/ŽÛ¡ëb–’Ÿ 3Æœ+¬ÝÈ qɸ¥’ß„uhTZæP,ôEVbëÑÁlyÆ&dývMo÷X›ŒÓ+Lº Dò˜ðmzmaÜ +».ÈN1z +.îÓÍvÝiâGx±Í`KMxÂðš¬t¶QÃl 0ŒÖëÂÀŽ‚L¹2Áõ=59áhaP­ +JJE'…Yjb9x]×7cÉ[¯oÓ™+tó;´Œž`—Õ+mªËÉãpã­pCÍÕbw]ìF·ïUÌ ¸ÈLŸN&Ò£&¡™!hAÆ¡œó­¥‹y†¹‰>C‡¾„©7J5nˆûêÆ ˜>À¨¸Qç4•œëº¯ÿ¹ºfc -²7X”ÏÓ:ÅêF ôzꯚÃäs{%Û;¥ªž6‚d>§po8#<¤*Õãô!nÇùß¡ë¤Ý»ê#ZtGÎΈûh¥fï [<›ánårfEYªYmJÕ)ZØ‚¸L}õ³/ààwÜ&%ã³jmKº˜:ý‰–ZANî¬á8rP+2$ÎÃimRˆš/:Pve†QŠ”K6æý©kž$>€(U}Wæ ž6õá{ŠÈNE{Ò¥½–þúêíMÒÐvtu}Ñ ¬(ò$§n !\H„€8ámLS?ˆlÁ‘É1uq Ëo4Al¼XFÏ/ÈyßÜ\_Œ§fU‹ìV•®_—ÅV•õƒvWí¹Vù²^!à€³àÑý”0®ÑK#ƒÜø€2t•}•nÊè_åkÜèª |5šLÜîgó{ä/>•ïÁ‚÷q{`ü)´C¬øÕîÔË< ¸4•‡ü¨À8Dŵû0˜†'(>ódüQfSÀò§ï;ʶ'Ý›D ¨KÙvÒiíÎx–æ0Z¥Y^uzp«# ÙbáÑÛ§iD‡ëMk¨0û\ç|zibŸ¡Çg§Aà;R>žGÆ£g¯FÏŸ½x5>Bv›8aˆlc…ªÆJ@“ƒÉªÛ‰pÞ­ÛÁeá4ÕLŽÃöèáEIWžÚšùŸ{z//.ÏÈ/Ó|y—.¾àôó'Á±ž< òîihöŠöOÆR ¬b +0ˆÃPH +endstream endobj 1370 0 obj <> endobj 1371 0 obj <> endobj 1372 0 obj <> endobj 1373 0 obj <> endobj 1374 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1375 0 obj <>stream +hÞÔXínÛÊý¯§ØŸ$n¸Ùï%ûÏ×vÚ½©a«½¸HŠ F¢leˆT|ÅÜIK9fŽÅÜÉ¡ +y¨Âÿ®«äv{åŠ8ìsÅØ‘Û¦k›ëí¹ðc³¦˜[V8l ”®‘bྱfB/®uà—ˆ°_r®ÐâþHv¹…‹#‚ P÷¹¹ß¶>D–²I|â#p¬nפ¿š £äË¿ iOCaÃÌ=|wyñáòï?Üù_™ÉþU¤@¿=éúºovMÛ“çmÿ@ú‡&5RR47®—£µu³y¾ëëC·ªÛÕC½m»Ä,çTVzâdæ¶.£|N îØî°‰u ubݾn×/™…í£Ù GCä_®€](ñɱ>9ȳc1;°?×…PT wôÍØÈfÜï8uÔ€£×õêabƒtOÍÊ»&iÉõ+¾m7ÛUÝoRÝ Çúƒ¬Cý+ü)$¾&¡Çé!yBŸ˜Kùù°ãN<1C³Qiøs®š=Ö +)©‚(DÒKG¿ö]:CŽ-„4þÛ—¼€îQïž›Žì7®rц £ÖÎë†ÆèB–»6h-û¹Y“‡æîÁÊìMŽå@º¦!ÿŒ¬ ±·•ÄFKA$­ i64ä„$x7B†³€ŠÙ¼tÙ¼þâ΀±D+q¥³Â¹ÛàE; +2(ÌÄŽ‡Ù¿ÂfÃíïpY)8ž˜»\FB+=[@%=Õ÷ ¬¤>ûA| *5–v%<òä”+>ìûæw$)I!cŠl4e}Ž–P± ÕXÿ‘g/¥,J©“ZU(’æ¥zsûç›ëÛå/‰ME§PV398!ÃM.€Œ(9W[@Ùûö ùšó +ïIÄ ç0ÈBH‰ÿT°n ûtØ?¹N„Ïô_#Khª+=—˜r€”Myœš=Ò×ãã!f3`! ¨Ø4X–Vzö·0-ËÔh—È!:»ý¡!Û6 Y^€K +ØV™ã 7)žÓ´"º ¥©A—çJ“U±.5ÖeÂ2ú&Æ;:Äñ.&²Í…MÐ÷_^´¨!ÅÐþƒÅIQEd |Û{ òÂتŠ»%|$ä€+×%D¼:×ièc™ƒ¯¤ƒsÔiOK„…€ò'o¡H]ŽÍÜì>G>ü’ syÊþ,)jæ|?ô06¤;®VM×mŽ”$\©JwZJ3hu& öÇA`ôKðqª3’y,‘e +ˆ?†yh­"”®ßMbiö;s&©NÀüª¶‚"NVDNñ}oB)³ Ðh4¤Zb›M80˜ûÚöõ·d¹~M……æÆ;¼À³â¼**„Ë>67T0¹ÉNÔ٧̋rŠ‡*†#âÕÂ-ñÞo @Ë*5”öéý˜­ödž³Ì7ÙÑ1xÄÌ{>\ÙÈ—w ›@5>ñ­oõNóí>Ã|”µƒ²'Eà6 +”>Õ{^+®ÿΔˆ(e²ývM•2à34UòQ¿TVg°%J ØB`º2á¡LFKA»B…(²ÿõuŒ ]¬Ÿç3Ø·;% +Œß0²ÌPœ`êý&-\Éô ý'è=-I“¶Y–E܆b3›Œ^ÃQ^Š.¿(æ2kù±Ï [%-Ÿl;Òî{çWWï@ùláæ'š +׫2(\Q¯úcýè …šC`8gEõ+S€;^r:{ª¯œûf6ƒ¡Z;S&•O\.‡ö|†ãÂʼÐàoïuogm¬¤Â†ž VÜNZ (ûU‘o{ØM€ÈpÚ›(ˆO“C÷Ï¿þxqõëÕÅòâüQ³™ÆɉŸ#öïãtn!‰/Sz2÷~B¢õþ¿ŒÒܨ(Ôˆ~·On³‡\d˜È—ñΙœRvÌ‘ŒÂyh«Ûj=V‡1Ô}0ÖªÉ;ù™,C¢]‰£nGòÏ+™‘c±Y”çXZÆá×Õ·öõ­‡úî·;(¿ÝAt£0žPL*¨ÇWžÙ ß{=ò[ߌ ,6¼qÀ—Ö/´;¨/unîðM*#õÁ·R$ë3b +endstream endobj 1376 0 obj <> endobj 1377 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1378 0 obj <>stream +hÞÔXÛnÛF}×Wìã² ×Ü+ɾ¥NR¸Hì VÚ§¬DÙ,$R ©¤þ¤þego¼Ir¤&EP0)‰œË™3g†¤è~vñó-E÷ÍLqG ‰B[Í~šÏ.^SDÑ|5£ EðšÄ„3óˆD Í7³¬H¤ÍpQæŸgwøå«×H’]^\>{†ÞÕMÇÕ}m6Ey®Ê6¯WÙ"~Ÿÿž¸õ$ G!%TI49 Á v³°g¼7ý[„4& `½¯vmQæ±õj>“"…|‘ +ÆÓ4ED$Q$lfŠ‘Xùß!eÂÄèw@DÂÍq‡GjPHü(Ÿ¼ŽŒu12ic|“5- +BEbüa»ÌôÃm¾´'¨ÐÇ—‘Ø]öÖ]T/ÜEÌ#*!W®˜þÀ"û%Óé‹8…ûßÁ)ت+ûËr·hѯAœŠsg²qþªÒ9ƒÊ¬" 6c*öh 1EûoDÓ4"p²ˆÚS‰EFÈO?|÷Kÿ¿Æ»ºv<&TW.òµã ©cáê‹õ½/Û€ô>orhN®ùö)`¾Ì—Äw¦ë­˜™ÞR (Oˆ \¨b5ÃËXgéñícÙfó?gó9³·§$U¶Oõ‰6!áB›Ðýitêe‹–y ðêóí"+YQ~ÄWoÝ‘îò—põ¢*¡pùCVÿ€œd)ë’g,µe ‘Œ”õ`ÚƒY}¸Î6Nèº8¡c.ím‘¾ L&‡qÐf7çàh*‡V¼ßmò²mÆAAc3¹´A‰Ô´56išXŒ#î®|ü@žN”y›/ŠU‘7¨}ÈQ w£jeÎ@›d9'ibƒ7g¿¶ª>ÚÕð/óA .«ÍÈC\>•ÚǶ(›ñ˜a#iä S7…œv™)‘èÑ Ì—MZ™ÂouyóöíÍõíå‹ëwW×·#˜@öú^‹Rç)2ó£¦ÍÚ\‚ 9@cï”=C·ŠÝñTvUaS7¨hPµm‹ªÌÖ(+—ÆcÈb’ƃuŠ@-"ºbäh×äKT•ëGø·ÈÑ*à\Žk”g‹‡aa=j´ã'¬Îç6£œÔŒš•®>|mðm»Ó¶eÓÒIWBrJÒaW>7ÀÒ6„dèwÿ¿ `«G2.§þQQ"ú²sƒ­nJNù·Kž=‘üžó}¾*qvRât\9Äú5š(} ›i ¨þώɣߋìmVoº&¬WÐƬE‘Mm "’^júÖ€…G#¦ CxÓzaQš–6ç|k¢oìB}‡a FF+©„åÏ Ñ¦Ʋo]“ú(iÓäÝHèWpæ Ÿ,ÒJñ h¡Ç½„Cè&)÷Mf¾Yïò‰CZ<Þá«ëqÈP=c‹­"VõXl)bßä͇ùĦJ›“!q +›K:Ú8Ž°;8ÙK¼ÏÆž:FŽãc8F°j°½ xf2@ÖùDQ?8M”~*…_èZì€'à×ÃÇ\#1ŸÔ'x”a¯á?Ç;s¹°ÛàCàDdŽ÷ºÊEUV¾ƒ +˜TÐíû„(*Oå²8HfÇ _‚ìªó8ÆC;ÚÃãúÛ7#'ìàvúg!i+TÜ—º ð@wÖ¹ƒÁ"8}æ£q‡óò¯ÝÞÕä½ÖT3…Œ»<´’5T;银Z*AµTUºAªûû_3XÀyˆÂ‘0Q+‘cAó*eeÒË·œ/åNsU]çͶ;ŸŽÃú±€œT¿G‰ôD¢tˤ>éšU¯Y#댰#|JƆñÞ %ò âánLb9%”ð#Ǻ´t¬€„³ôÍ1‰“q-y÷9§ðt3 Aº¨Ð~Sfá–Æ.îªÍD“ÈÓ)(û æľʺº‰)ºve»Y€&ÐäŸ"«v§Ò2áOžÒ§+blLî76üÞ?†¶A»pûEdÛ`Ë^·ög ÚfE­·(âÕ +=ÂÔ1ÛÿÎIîãdÈ„4÷ç)HéhOW3/¡‚˜' ˼1®‚ˆø\Qz-P{kÁY½ÚuŽ‚zxi<`ÛÒøBya¢×i”­›ê„°=s)Ï#tôi äÌN´k£WÅÁr º§¯C`àÿ>ÅBí̧+§åè>¶ú’#4žúè×õÄ€›bÙ·º +V¨~ ÒÏawÐ•…^hè›­¦ +;áßi­¬E‰[‹ü˸0ŸÅX¿‹ðtLÁ”:s1ÿÂ6wˆ÷ÓñÇžl©þù"Qß´° Z/6A wšŽMÛQ?Óóݯ7°>¹qï¿Ò÷MeÞ*>ÄæÅüû2¹¡óÄyì¼¢ÇÁ:l’5Éϯæ³ð´Ê + +endstream endobj 1379 0 obj <> endobj 1380 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1381 0 obj <>stream +hÞìXÛŽÛÈ}×Wôc3;j³ïì¼ùº˜À±9yØÍ#Q##r Rëø“ò—©ên^%5Þ‹“‘u9}êTusr¿xñã'÷ÍÂHbÓŒ¨Ì™’C±Ø.^­/ÞqÂÉj»à‚¤ð.<³L +beÊRAVûE +VXªœ$«5ܤ\‘Õ—ÅÏôÍÛwD³Œ¼~ñú‡ÈO‡„gLÒúþï÷euOn«¶8lóu‘ümõ'ð$ƒ'Í$YrÆ&«7‹%D7ëp'Ó=$Kn™ %˜!Ÿêc[VEãm½]-Œ`Ö@F†iC˜Î9ÂT–¦*äæÓõ?BÆL¨É¾ ýp‡ó 8?ª¬Ë}ˆB‡ßçMK’¥a–~~Üäx'h[l )ñêh•0MãkŽ/Ö»ø’×”kHU" ”˜½²¾ÿ nÁÖ¡¿lŽë–ü%±ã´ˆ&›è¯®¢3XUŠX al¶Rs°ÿE¸sÉ2cŠº¥Hy¸Õ$1ÌPBºëõ—ßýÕÿ]ãý#®´ŒãÊ¥ÝÚÉž…<²ð¿êˇò©¼ºb¶ 26äSÑP›ùök"$ü±Ø°®0cmYákË€ œjd. rãïàuc³ƒØ`¥B¦iHrSl¿Ü­ójXºKÍËêÝCƒÜO¥e14©,C3ûXG{ÎM°êõ™úÒœDS:˜‚À Ò=òi +}÷þãËÕ퇓Õ?¯ŠeÃ¥¶óƒâ—¨ió¶ØUËÈjWÌüÀÛÁÏeÖéÞ rnš” ©Û²®òïÀ15 +ŠwA¿Ì« HÉß rlŠ ÙׇÚ…¼¡F{ÕˆRå/ºnwðq]­ ²M„×}`‡¤RäëiÐôz ÅbºqéAŽ$zŠVHüîkÕæÿôi¯V"¼î˜3A’ñUO¤ïJ1–5ÄRBþ›"14Òd7"È/4”¢æ¥0Åuy_­ë +| Ÿíòúe1ݲ!\@¥:5ÁÓöÔ•‚e¼€õ×þqÿˆ—›`¡¨•q7¢ôHnÉ5³Ä(˜Q.ßUY¡ÿ¦å³i£ù8‚›A +¡ý'xÄîC«¹ÁLš©îíèÞË$—¿}IºäÅ¸*ù_ +›ŸQ,e5ÊaT¬ÎþK¬$ÈÔý ½™Æõ$˜”Á‰rþ`iàþkdæXFìDFYðrëe!Y*óŸ¦wźܖ Œ-hVg‘¬Ád]¡àTù¾HLGÙ4¤eðâãÒ«¡ÊË +yêƒê•v"´4­1ÝEÍx b’VÆ4§Þûå䇤• _BØÆœ'Ñ ¬>ý¯>ù²òj (yç xRà¨XÁvðïåŒvgÓm§ÖÚ`½qÒz–I5Íø8y8ôЫ{LÙKü.OÇN }:áÔÇëŸrxz8Î;‡äÒIKºý0ñ Ù kÑFçY7“Ô‡¹I&ÜI/ýøy53kF}4” Z!lkß‘|ç ¿1_Ä·È2 6Yœ”ÛKØ¥0N^Ѓq܆þ <{è3X³du×zGÉž@(ÎŒ ±¹Ç%™RWà7À't ´è’úöBQh_BÒ£¿‡\„£‘¹BCÏ?KÜ!¬ªnc]”00@U´sð3føÕÜU# @è‘»X‰@ÐÑ >¿?q"&3ë²éŠ¤­Iy_áŠb1c)wu,ËìÓhüL‹ò?z‹84Å 3 GªÌUÊ +ö›Tte*ŠÐ=žÐD3%9|=布Àp•7aКH;êx³ðRçR²ñ¾#ÕÝÖ_&ŒÔ5ÚÂáP4 jò`‰ƒŽ72 8ÚãàôU‚tkþ~zr„øvµø·5¾ºM +endstream endobj 1382 0 obj <> endobj 1383 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1384 0 obj <>stream +hÞÜYÛ’›F}×WÌ#$Öxî@Þï&å”c§våäÁÉ–DJ‚ °vö“ò—é¹Zy½.—+)W-H‚žî3§Ow)Ú-žþxMÑ®](Ž’"‘*Ä jŠÅvñýjñôŠ(Zm”!ÿàBÓs†N0ahu\°‚‰È8Z­á†PVo£‹ËÄ)zþôù·ß¢_š˜¦˜Gõ®ÉDzڡUW4Û|]Ĭ~‚•¸]IbŽ–S%Ñêb±ƒz™µ½ãƒéßšxI̢̠«ú¶+«¢5¶.W )2ˆGa©f<Ë2„EJˆ°‘)†å‡1Á„›!âÌ !øQ¤>xíë}dÒúø2o;/N¢77›\ß±¨+6ö•úšEUŒeäûÙ=Ô¬÷î!f¯„Jˆ•+¦?0b¿:|‘dðþ/p ¶šÚþ²¹]wè×8I1 +g²uëÕ•[ vÆ`E4ØŒ©Ä£-ÄíͲx™beKF¨½•(VXEùëÃ/_ýÑÿ®ñþ£Þ;ž`ªwŽø½ã= ©cá—uõÙီÊÐU'bS c‹®Š¶€ääšoïcÆáËbƒ}fºÜJ˜É-ŠÒ‹ÍjŬd8S6Óô (‹J@tÄ 6„µ!6Èu]A®­cíóæäôDY[àc™ÅI”~ñmt£"ª¨}¸_™aERáŸvËDOP¼ús±ÌpÊ©Q'Ftú_GïÊ®5}ÓßcgmVa€JkÏѪóùº³»=U׆q‚Š1̹´KˆÌº²=Ô9T…Ýóúxc×â–$“CÚÚKž«] ’‚A¡“ÑõM±.·eÑ¢n_ o­Ád]#¨ÊE ;”E8ôiiW1Ž9ˆzΘmG­O²ß|9Þúk,½ÃÎŒ±À‚¨R,é8*ûÜë›®¬«ü€òÆA‘ä~¼Vj†ƒ«¸†ÖDgb/+”W…ÝÀâhs¦+ +@…¦1Ï–ή®â}Y!Üaœ$‰ÏZ!F+ÿꈸ\„Ïpã'qÓ+dÎ{1ZçÚç1£Z@bwͧ>n{¤§#ÎÈ`–~ñ*X‚¶Ä­O½òÖÍÔ$ö©H†€^¿YM̪t$èf ±•–ô°*é×MÌÀ 7?F–¶`wMî@×€ ¸zϹŰ)ŽyY霘D+±˜E;Ã|HúÊ4ÁqŠP,ÄðcÒšù ÞC‹ÅDt€¿<º5÷ Ë"Ç\&1ɦí§ol[Uݹ¼(‹ÎŠn +~Š}0yňDC£›Xü&`tí21D/4äÕ›—/ƒE˜ßc9óÑø,éjTî*½£:™u*ûÙ¹QêðIêœôÌaâI?†ǻ8ÕÎïjAIP‰“›¡‰9ÆÐ#€†Ãèßõ½ ÄlÌ2ÚÊÛ;oÑM^6À Ü}±EwPÛ¢ú¶ovf€LœOgøÛwªpG>Ý#Aþu¡¬C‹äÄ2„ؘ<&Åï/—j(—ýfˆìá)ÎÆCt<•Óš(|¦º†ù.à•FQï‹Òû¢'”Úú`aš +Ò‡Ÿ• žlTÅô¬ôxÔ¨~Â<úù<šèÓñ¥îŽµm³3¶•¯.Žé «å±<äö˜KAÏû 8g\ž@Ó¢ðR³—êoîç/©U>¢;§œ1ë¡Xê:1ßoa«XésM6’%ûÄŒÀ£’—ô xœÌMs"MŸ0¨ODÆI­M+)Ç8…T :üîäºc€†ÃøEi˜ÓÌóÚÁt,,³SËlöfƒI.å—à¶ÄŒ„UöÁìÏ1£fPèãqá•áÂÌÖ¸“ãœöÃz“ï|Òµƒ®Á9Óì|Üa©&]߶Å_·` cà :Õ:è%ò +Ê4wèKéT}*»Þk½‡ ‡âL'vø‰,]Ò3Y:ÌlÂn™í–j葺}ÙÃCxÎÂq–Ú£s§8bR`%4°ÇEoØ•ÌM±ýp #à:ÖÇyûX4C8¯=²hc¾(šböFÁicðnjí÷ýîÏ—ÍI~ªÏñÁçj"_br¨‘Œôæêâòêò"@H Sù©Ù µ]Þ¹}ff9–}ÆRaq ècÏ]‚•Ü@)·ÑH¢C zdkõèmô†“ÔžùÄ‹ª!šéoug3j?e?LðÇÇçK¾ŸM‡ø€kuŸ{ÐZj·ßYpuŠ{uý×Ñž©«µÓ7ÓÝ'ºCÊ×{·íì!–ädÜdÈ-ž$B/o +Cgt}WuùßáÉdxÎ L¥‚¸sæÑ «>øܱŠ\&ì ÿÍVýÙƒxL€éŸ}.\éÿͧ_ë\ØLŸs`v*>÷âÿy"ÿ¥gŸøåjñ¯­ÁËÐ +endstream endobj 1385 0 obj <> endobj 1386 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1387 0 obj <>stream +hÞÔYÛnãÈ}×Wô#9kõôM2o;ko0Ádfak³yàJ”Å@"’ÚYRþ2U}I]Æ^'X,J"ëzêTU‹“ÇÙÛ??pòØÍ´$)ˈÊ4‘Œ´ål={·˜½ý‘Në„Á¼ð,¥RT2ÊYìf ¤P¦rIK¸`\‘Å×Ù—èöîG’ÐŒüðö‡ï¾#?µ1ϨŒšÇ¶Øíªú‘¼¯û²]Ë2þçâ/ IZM •dÎ)× YÜÎæ Õ,í•<Šþ{ÏyJETrßúª.;#ën1Ó‚¦<Ò4Ñ„ +™ç9¡*cLYߌ»æKð˜ +5ú‚7Hó%8‘› ä¾T™÷ ÁD‘X?]O⹦iôy¿*ðJD}¹²¤Â×<ªcšDº›ÚåÆÝ$ì+ã ¸*µÀ7‚Ùñ£T¥9<ÿ\‚¬¶±ß¬Ëžü-N3ʣ҉윾¦vÊ 1&T c-„N}°•šûß„çy<ϨŠò¹`Ü^&$ÖTG„ø×ç¿üá·þÿ +o1w2¥3Ç|îd@!w(üßšúývKî«G€+ÖascGîË®„Ú”ˆ·_c!áÃrE}aºÚJ…©- „¸f±–ršk[ixÄ¢Sàu$& Ù0ë䲩¡Ö–±Ž6Eû†ÔÅ®7t3¬ÕÛÓïh«\"·Á¤,a5|‰ª +&êziï6J*tÂýíΠè†Ä‹Íæœd¯W¾Ç²ê©nA5ËÔÝ9Í$—ÿ=ÇÕ踺â83zŽQï™6KrŽ1\æä~]H{=veÝwc[-‚J™X[Tž¸†ÆL1Eˆ+nÑeuJ¯“JâÁxàOmáù°/—Õº*;ÒoJ²®~‹¡u5¯È²Ùí› ©Æ®¨µ¡ YîMp=unâÁÖ<"ÿ4¼odƒ%<:ÄðÞµOä—¦ßL‚>wzŽm–²$”utä"ä|hUh¸‘¢^û€ö‰"$u,Y\‘̻±,žCƒ\W-xÔ(„€<Å‘ºÔõMÀÆ\S&“ i»êƳˆŽ0—œj•Ø’H^éz',™ +³5=D“|l“‘ ^"AŸ>/×ó*Ô(4ãÉ1sGpë§}_5u±%Eë8Sôø0p¥Öòâ£bB–60£sD-Tš¹0“=xeMæfê µ¸XÇ"ökbø×¹‚ ¯(Ë+ÐÚðÝœ2}ƒ„^¡ ĉºÂA2ö‘l9•­†Â…îJýgˆ’ Ôm6 ‘ûèMX(0¯¨ÈrFǼ-bm!20Dód¬¹ï?Ž;KÓÀšÒšÚ´d„BN•JNd~ú¼˜Õé¨ö¾bí™|cšL`{Œ¨¸Ñ—¥ku AtH–I”®à“2òíTæ.Q˜V“,;^*x)‘#¹MY[î€÷p¿ç '<;c¡‚Quæ§iÌØX*´þç¤,;™º¦NêÆ·ë +øª¼?©¾ì8¼¨øüF õ‰ ž¨a­LÓ‹ÃÀÙ +<)Àá¾xÌ*RJ”"°u=Œ{NâG}–ŸðãçF:UÓþ>Ô-­z¬›¶°Æ<6ýDš5†±+}ÇT4UɤÑóÁq´Z0;`áR}29™ao8'Zž*75á»Æs:<-&O'yò¢çå«´+2 w:ê&VÊxÅ¡ sQÆ–dZš¤šO;ša[;(^haØU#Hs¿åµmÙA³Z™ îläÙ…ysÁapÊ’€Q`|ŽŒøM€ZÏ7 ®ñ/½ +^9êy ARæñ‹£ ŽŠ±;¥s ¢NÚûñ¤Æ}ò£ +Ô8šYÛù¹EG«àcÓÇØEô§ñ±@‚]ÝÎt ñt¨“döv W˜§x}3 ð`úf~mãé”슔ÀŠý"Á%é—’:àÜ¢#û– Œææ}Gòi%Ì©YnQ¸¯»³ IÌcÇÌËg£DdN‘_…Ö€‘Fx°Â¦¬ÄéÅVÏ¿=<¡7©sçÆ®9™Ý'S¸€u2ÃHÛ®¹à%´V.^Èá<¨Ö¾ôÖ1¬  «@¸ñÔÁš¼8ÿ¶n0ˆ锪ÏÂ礟T»j[øóæmŒf>Å9Æéçe<Ï]"w1L™|ÑâgTþºy1› Š†Cꫨ°«üHÆ/úý\ÎÅ9dq1€–WÝÀûL~r l9a`ÿü3Êþ¤aKš«KÃÍu(ÈÑ^ëO˜¤í2ŒØ+-‰@’͘9l +ƒþ—hU®¿>à"u$£ LA2‚ÑôS‹†ŽV惲-Wïªp%Ïcá.L°p–åQáài~ÉðWŽõsÀf<™î '÷·w÷w·#÷aŠ?ùAËo,]_ô%R©mÙË¦î ¿ƒŽpžŸÀòÝûÅÕ‘îøû‰§ƒª™¶ˆQ¥¶³Wà^M‡{jhÌizZg×úÙÑW3™HÈv:šLTæωÂ\ñoÚæ”l+@64dœtˆ9‹ ÍøÔf( Éšü˜•øb_ÁŒ¶ï+£v~f!U~¿±0`¡Í¾5Z +–°nñä›?Ìípl@ê%ÖªHµZËÍ ôd(1r&O€³ßL.üF€eÂþ.ikОJã!vOVe¬#WŠS€+[uðqßýÙßR(2Õ«Ï­kü /ÂӲˇævƹ¹p^>0þ5§öü§öw‹ÙÅVäM +endstream endobj 1388 0 obj <> endobj 1389 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1390 0 obj <>stream +hÞÔYÙŽÛÈ}×WÔ#éi–k'™·ÉØ8p<[NLò@«©nÙ©Lú“ò—¹·6.ZÜ=À H”EÝõÜsO±9¹[½þÃ'Nîú•‘$gQ…!’‘C½Ú®~¿^½þ‘NÖÛ„Á?xãEN¥ ¹d” ²Þ¯X¡L•’¬7pÁ¸"ë_W¿$oÞþH4-ȯøî;òó!å•Iww¨öû¦½#ïÚ¡>l«Mþ}ýGð$'M%É8åF“õ›UÑÍÆ]ÉÑô_iÆs*’ÌÝqhÚº·¶Þ®WZ•¡Ú*dY–„ª‚1å23‚æ&|)S¡fßCE° Ò~ Çz”¶ +%/U’ÇÈDŒQhãûªHšš'Ÿn+¼ÉPߺ Òà{™´)Õ‰¿íOþ¦ÃæÞß$Ü;ãr•FàÁÜL_å%üþg¸[‡Î}s{Ü äÏi^PžÔÞdïýu­w±µbXl!Lª­Ô²Úÿ!¼,Ó¬ *)3Á¸»Ô$5Ô$„„÷§¿}ó[ÿÇØ;™SŽc¡w2¢{þoCý~·#›;€+ârcO>Ö} Ã)oÿJ…„ÿ¬oi˜L?[¹°³e€Q"Ù¬×Âq@IKã& /€YL¤£F¶a² sInºfm“šä¾:¼"žOŒ³‘ QºQ¦™Áþ’<à@$-w7GÏ‚V¨p·w“ÜtýUVÒBrËN‚áø¿ù¾›}÷ƒX8—TÍ/8ç ªx¹sŸ¸xYâÃ`¿‹îUÌvmîîK3ôèŸæª}p̹²ž45¦È§žb0'é¶Õ¾7ÖîúÕ [!¿a+ä·Ä ú†‰«+‰OAqšóÙsq(¾†Ã¿¥Î܉ðÒÒ’#Ùåèí~ºFÂ:¼;îëvèçéÃrTJíc±öµÜ¹ÐcÓæùP]ê˜M´ Ü=^3TóxÜàÆ䧇zÓl›º'Ã}M¶Í¿SPo nɦÛ?t-DÓdc犚àК(½¬c^ÖíAdÁM<¡)$W&ä¯PŸ»#Ù§\ÀÕ1…EoÝ>’/Ýp¿FæýŒJÏgg)}Z$¹,Ræƒñr˦˜ª½]â@ˆYÝFËâŠeîÓ~BÁÒ $Ú¶9@FWA ÈcÊKÌxSív6³’ÊÉ"f2¶@¸ø†û¦'§Rɯ |lI姪 Påi%¢ôê7U»¹¯š–’w[뤛wLº¶Aºf’Eĸ7t´‘Ó"ïûãÎ]ãÂýü §]MÂMÐcˆÑßt~™fðŠA£ÃÌyĨó]_ÀYä7¶`t×îI[ê†.bc n(“úBÛ.ÂM u?“œ¥ÝüM‡§¶zÙø¡ñ æô÷ò7ý^•Ñ€šÕ‚\­°°s¾~zš®­v¤:x‚ÔTþ¸Ü˜éHñÙ '±CHØÍ  Sf¯Èä‰{m-Žm&Î@î0±METÙ¥ðr°v#ýXNQŽS@X®á»28eæ2& ½B8Ñê +SD˸ßf¶åÒ¶šÁ¸ó±ÎP%_˜ÙbYœXl¯Óï+PË*q|ƒÕ±«”%»c,‡‡ áø2.Üwf±ÂpO"Í#cJjw 3rª”>±ùÓçõ¨ÉÇU㲦®_óšêlÇŠŠ«}^»@P×€ñMÇfÙF à +¾£°Jeé…mµÍr‡o5ò#w-;Ô{à<|¼1ï*'£ŸÜ±8Áèºg9ìØÜ*•æ)-+ÎTAæ~¡“¶ «ºn†)N¦¯EÁ³†/œG¥9I!µ(ç…ÀÙ <ÀéÓŠ±«H)PŠÀµõi¾ot8h²ò´€>¿?ó šr¹Û§a5wmw¨¬)×°¢I·Å2öuØ–ŠæJ/–<ŸœaǨ³âj!—›æŒšžo3ÖÅSVüZ,~­Ký¬ßËyW‹2ç³-âŒÌÅ+ +ÞWW‘]e’¾Üd–e8¼°ºpzŠ¶f“Ÿ—áÙÂáP÷°¤n­j;;eqa4^]S,è¥ð&ÑÀô™p«RÏ6ªÖæ—_­œ +yé/<  ¸Eùg^ÜÂÞi&€9ÔÉZŸz©¡>›<9øØù¹Óœ¢ÿC7¤¸ùDò»ùÓ`€»ªûÏlñ•v¨“Åã€özŽVÐK¸¾Zx¢¸ÝM¾'srÇ" Ç"ØF_jrìk«ž> endobj 1392 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1393 0 obj <>stream +hÞÔXÛ’›F}×Wôã[ã¹À¾¦6•Ø[^%©”,±É +e½Ÿ”¿L÷Ì€€Õ¦ì8©Tj«$ ïçôA¶‹'__IØv £!Ä™- -׋g«Å“W$¬®RÀ?<È,åZAª +Vû…@+\ņÕO„Œau»xÇ^¼| Ïàù“çÁeÉŒkÖlÛb¿¯ê-\Ô¶l¯‹uý¼ú=iï)á–’K“ÀêÅb‰ÉÍÚŸé“éÛh)S®X…fàms´U]vÎÖËÕÂ(žÌÈðÄW:Ïsàq&Dìss麋˜1Wñä"„nÐî"&<”#wEÈ/ÆYŸ;¦†UâCü¶è,DKÃSöýaSЙb¶Üø¨è˜³:â ·}nj×»p“òG!LUE”ð_¦”}œæøü%ž¢­¶ñW6ǵ…¢4ã’•Ádü5up†q¥Tk¥LÚ;ŽçÅþdžGËŒÇ,_*!ýi‘á†ôÇO?üç·þ©w:å’:'úÞéa +e˜Â7Ô§77ð¶Úâ¸m$q;x[v%bSÓ¼ý)_–Þ3`+U[ å>×hžgžnÜÞnÒ˜§=àe)|‚›òúöj]ÔkÑC0¬¨êËH¥è·À8”f¶Š4§CSO¹æÄjä#N‘ÆÈÉ2°˜«¥1Æ»r„C£„ÓAÁTâMiž©S'„bd—Oß®.Vo^G«_&4—'£wip-l¹/kËaµ+gî0T™|‰?ü¥˜üÌT4¬–s™ò\Œ”r¨K(ê `àC Ç®Ü@SßÜùˆ— +)Ê3úÀ1bXŽb•Ö%Ø°™ÈáXÚŽl­wØH>‹0HWš«ÓfHOi_ÝÕ¶øèî^­”¿=ç¹ñ”M'ØãçH»­ETíÂxÇ*LySF†…Q"¿—Ek+70†½gnXråèRù¿À'×M,³ÇvEûUß"Ó·H)•ûÊq‘øQ¹Ù>l½!TÅÈb·pö˜rYæ<ÓRÝ‘»À}yLo$.ã©Ë}ññ9­l7óãIJŒ¼¾&Ÿ $‘’ðÒ[Š›]#,¶GžnZl˜âZ‡€œ‡ºÀäÇ£‰©Ïzëæ2Zæq&qg]Êuu]9ðÚH€1Òz Pb³ÀÙ– ’÷_ûž(ÉûÚ†&ËO½•˜î³§ç¡èºf]„ò²XïÂKÅQMç8XˆÓ`ÒÍÜVv7Š1÷1æ!ÆmÛÊ'ÉÃí®Z;û2ƹ´çò8zj‡Cj‰Y±ížÔØ]Yµ°nö‡ÂVª›Êö° öfJÊ„âª@2×Ä“1k"ü×"÷1¡ ¤Ó>DJàå»hIœßEè˜ÝFÒà¡8èŸ"3;Ãh®L䬼qôÒ!KX|ž¨õIŒfÊš2ÙsxNõëúœÁiR÷e‘a>nÉ„fU„bq!Ñ1Øv½ÃÈÂÇ)w®Åq烙¹¹éÀÑAeÖq*e.Ñ µì»Dó™²›²Ï/OÇJŽöÛ6’‚Ñ174 ãS|ÑX¢N,qzü8„{|n ˜4À–‘°7DÿŽØ[kìOa¡ ìA÷ÖDo(˼!7šØ†Õ>ÊØ1’l* 7e½Ep8kvWž:mÎîˆ 'lÑf ¢` +ôFá Š…Æÿ´Fð.g6çòzÔ,9í§\‡)çà©ån6(9×é8A?#K9©)óh;|g.šmÂ> endobj 1395 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1396 0 obj <>stream +hÞÔWYoÛF~ׯ˜æ‰L¢õ<ä!±Ö½bØL‹"*†¢,6©’T£èê¿ìÌ)ÇnP (jæšÜã›oŽp5;úòRÀU7‹Ä< ‰@qhËÙjö2›½ [Í„Ž¿øIÌ”„XqÆ%d›G)Œ©‚¬Àd7³·ÞÉé+YÇGÇOžÀyë‹„)¯¹jóͦª¯à¬îËv•¥ÿsö5jRFSÈÌQÙÉlŽIMaVj/úÇÖŸ‹˜I¯B1pÑìúª.;-ë4›…AŠþD,Œ€I•¦)° á<0žE’Å‘ûŽ.3L¾#"ˆÒÑãT£~ ç =»í;»©-Öv“4O.BôUE’þ‘ܼLÈý Nñü9.QVÛ˜/Ë]ÑÃ~œ0á•Vdgõ5µU†‘ÑXq[Ê(vhÁ!Ú‚HSž°ÀKç’ ³ ÁXä¸çç?þó­ÿ_áÿ;3A‘ã.vj`¡°,üwM}q} ÕÒ•±÷’±ƒ‹²+19ñí7_*|Y.™ËL›[±Ô¹aEqɵ¯1Rª1QjŒ¦d`‹ Å:¯jèúiÙw÷×pvô¶Uýn}‘¢±Í΀&˜1.œ@[µ6¾h÷ÎÇ?˜Àݶ,ªÕ-ôëÒI„:ß”wFÜ\Ë;(X®JAÆúD‡™Ÿý2ªªŠ¥‰qZ¯—H +Eäóà.7–-ËÕÍe‘×…{k_zèøeßl§Õs!Ê +Ó€i>X‹lJëâ™PéD¸ÀŠ´$ B|Pï]f¯ÏíV‚=‚ñÀcŠH_nʺg¡÷æ¤U€\‘áþ¬PjQix¨Ç:4ÑU‡DúuWµåR«KY’Ž¦ÎÀTÌë% –ð¾„]‡'šúúÿ%ô>>—X!1¤‘]ŒŒ v„°#ašŒÓcyUL†Lòð¶îózO–I³)eid -(pHXHíó[¯B'—¥y–kK€…gŠãu*æœZÓ %GS#… <²ÎÛÇ.ÌÑ> +Ò"Äxh<#-Øùfó`¢dO‚+¼§%DY 5V;²øŸèßR£Â¶8Uí-Œ·Ù*ð>LÓiLþ Lùì8ƒ(¬W;bL7µ#…dS¡µG+¨Ðþ ±6¨h„‚ã/VWŠ +ŠÒ½D~m œ 1fqâXd³¥YéC$Âþ-F‡bwHÚÒþzÑHµÓTv¥*w…)Ñyv@`§Ú5ˆ¢Ùl›šˆÊš¦J ­¤é£iµU¨~Jœ$DˆÛŸŠ¦]” üʃ»uãüìû)‚,ùDÙ°Rò n %Üf”Ó\¢5Ÿ;Ñ2úpÿ}êàx¸¹Ä¾áCçÏC=HBîÁÖ,¡¦÷9¾!BÁÙJw¯q]%ŒÇ!ÞϬ‘¶kËêfÚQ°™èEó¬N'+f3DzÛxaµêFg­¸ +KØÊ— Z#¼ŠÁ¨)ïœ÷Aj¥m68jÚ¡¬Îv=íÚ”ŽûVGò5Ì‹8'k¡¦ãpòp7Ö6¢NéN;à8¶8œÖûº±Åd€ÑØÐñsZ°Â{Á¾'iGµŽ?Àùº†Óùf{]>І%é|Û‹‡f,ŒHê+_Ñ #|ˆb¯¯Œº)•>r>õ>Ò˜/<­ºµÛüÄ·ÔÇ‹Ü`ˆÔ§z¦sáúú}^Pbï´ææ7U¿Ö ö·Ûò0·%ãjŸÛ¦ñí»Ðñûšæ0¸ý‚ýMÏ“aŠ3ŸAé ëuÔBœ®—°ÐÚstƒÞZù;cøÓûz!˜?r+ü¡îýgÕÓç4 ´'¸À¾ò»–“=¶'©›“mÙ=s'8?È?:"ùÇë²øÕjf…o;*&EÓ¶eÑ.^ûð î\xúÐÏa28à|×<ëضE;W ïQ¦µvXoðuwƒ…¯+À›3^Åq‚râBHaGk¸i+dÆîe‹Eýhá?sÛ¸»\ ªÛ²ßµ5ˆa‹þø‡ÎF *A¸÷–nœn’)Xg±rôd)ŠÔÆv O8½÷õø«Sý›w§— ’5²ó­ ™ø|ŠÂD1]—ïô¿î»W0^bþ`Dü ž +endstream endobj 1397 0 obj <> endobj 1398 0 obj <>/Border[0 0 0]/Rect[227.46 381.24 302.82 394.74]/Subtype/Link/Type/Annot>> endobj 1399 0 obj <> endobj 1400 0 obj <> endobj 1401 0 obj <> endobj 1402 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1403 0 obj <>stream +hÞÔXÝnÛȾ×S rEv­ g†¿XôÂuä6[71,¥‹". +FË,$J©ur±O±}‰¾e¿3?)ÙŽ7mQCŠœ9ÿç;ßP°åèõ蓼-›QªXå,ÎS¦"¶Ó£»Ñïf£×—‚ 6» É"üÃEäW’e*â‘d³õ(‚Å…b³9n"³ÙÃècðfrÉž³‹×ß}Ç®w¡È¹ +6Ë]¹^Wõ’½­[½»+ç:üëìhRVS .Ò„ÍÞŒÆHjæöNDÿ¸ Ç"ã2¨ †ÝlömUëÆÈšÌF©äY +Rž¤ŒKUãqE±õ͸k^Âc.ãÁK„(ówá(L +†—qî}'Ãdg¢L¬‰WeÓ²pœò,ø°]”t'ƒV/ì «èZuÈ“À-û“[´›ß»EÒ^#‘ÀU•Jú!#û° ïã¬ÀþkÜBÖncß,öó–ý9Ìr.íD6Nߦvʪˆb-ešù`Çñq°ÿÉDm9ƒb,#ao¦< ó×—_þçKÿ…w?)w*ã‚2ùÜ©® +…«Âÿ®©ç«»©–(WêÃ6(ƆÝèF£7ÕÛO¡Tx¨Ü7¦ë­LšÞJ(ÖÌfÒB@Á‹ÔvÝXÒ ˜À&’l"ï$ƒ&„E¿e }÷0—õü¾¬ê‹ÍO×›ºÁ“mU7·Á«·ï^±W×x~.èîý‡™yp._݆½žˆ¨Ãß8ñ˜`ÃÅÿv3™ÞPv~oÖÎ~ó¬Ó¶ÄÓ] ½×V±³„t¥Á‘ŒoײÁÓ-”ÌõjÜùÉ¿[à©Þé…S!I…ñÏ¡+ÂÝ»WW=ažR$0 XNûlÀ±ÇÅ\øg~'» +—XzÕ³±—ïouårE¡*1+–ð…’ÑÙ…ç®6ÈŸ§ ‚Ó}×\Ñü[æMêEg!žÞ/OŠUò8BŸ¸bÝév¿ÃÚšEßÿìF«â¹â¹`±ä…bìtÁt«çU¹bïtÛ„³¿Æó 1‘z™£})lçF4{°“;¥ÉÍJFÃÜÙ™8 yrÀµ(éº=˜^O.Þž_½›Ì¦»0Ë‹þ–nŒØ´4mÙêµ®[Îf÷úH% Ôo^¢,}DÀøX•Õ2V O²ä+´&¨¶Ù¶Õ¦FÄÊzÁPì“fûF/ئ^‘Bñ,煮̪þ‚•sͪÚö®Zéñ,Î.Cp6p€Èk¾ÔÆ8¤0‰N‚Ýc2mùòîB™É7DX?‰]ÁW\J²™•Ÿ_Ö"²§ uÉûøuÉÎ$TÚvˆïk´f¿ôëì$ ƒFJê\¦rÅsÐUÐJÁÔóçPË*’´Jå‰#µÃz–±Õ‹°’ƒÖÖØÚª¬Ä€“ÞPºš\¾¦@\•õr_.5Æ¢ ¡6!Ôõ1ñ1/²ÄK³Õ¬‘²1F=:ÑQ³ïÏ1.мˆORùâ(ç>ñùI¯C”‰ öá8æyf‹W¨@H´¦X5þªöÞhØÎ`I_Ñaxœ!«u)<ÅPÛâ—Ò8pœèFöH…yt}JzijAß»È÷=`¡";«³šðl戠hØFBoö½L}8* •a .ÐÕíCÏâ@ëÚîÎnºnF,ݳ#ÆŠ{L±RcŠK=ÜŸ”ó{Tí¢ú©Zì˾M@ØžÉ/íøï×&«Ò@5éîr1Hǘú|ÂÍ ÜÏ›CM(÷µ>VI;=ê°ÙiôowQ/öâÞ±pÙ‚­¶¿>‡cÊÊõv…1¸¹3a#%¶~P‹Ùq—øü10£s¡›9MO {ªO¨¤{°²vg!X<ôd[Üe2/pW!O# D°e!œ;ëa{3¦[°A¸öÚaòÙøÕ©vòŒjPOëŽcàâPw¯f< ûUFbL8ý´ÀDÐÑþÄ™Ã)Ý Ì­-³D†-Ð"²ùqr}1Ú!¼Å°[,*3õÚM7ÀhÒ>”{Ç|ÌüÀ˜oô¼­hO>ç>ؽ7õûŠ@±Ù>P®š ÄÌWû…ë8$¿È#>‘#­öö¾l™B)Õejæ8†$渤ã\é[8öS/erè±î+›qM~¬,¡ËP£ËáLQŠ’GøŠÊŠ“C-^žÐ²$;¥e×7ï¯'7³¿ šƒ©S¤òS·†p[ ‰Í(ePuÌb¸›g¾ùsŠöè3°-h‹„"Eªä« ˆ²NQÝ*몵ˤŸ ¶÷b×{>ìqPáä ¿ô½çE‘Ò,%~R«HÁ¼ÖGšÎ¿ÿºý"‹ˆoõ8ŠK¯Û2“m$™‚~¿,J2Cè‡a:jêÁõn³5_ ìW‰1°/lêK¡ûFØÉ"µ""Xys´YüL ºÉWÑIå1ùøŒ‡P‰BY`’ç꘺C›ç,DR\ÙR©¨  cš +öPH ­è›#ž û,çBöY4h°Á™çH3¨ñköó¹nš»ýŠÛ¢³…;yš;©XRóAgÈ?v„0¤V‹ƒ/ÒåþAT ³§c$*j–¶y„­ÄGTø[œ=ÆÒƒW"ÿ`ûTxg +endstream endobj 1404 0 obj <> endobj 1405 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1406 0 obj <>stream +hÞÔWÛnÜ6}߯à£ÔT4/"%>:±S¤HÝ V›§Ô]­­Â«5VÚºý¤þeg8”VÚ‹ë4Š"ˆE-©¹ž93”ìvvöݵd·íÌj–‰œ¥¹eZ°M5[Î^³³×’IV,gR1ÿà!óŒkÅ2-¸P¬XÍHá"ušsX™²âqv]\¾f†çìÕÙ«/Ø»M,s®£õí¦\­êæ–½iºj³,çUüKñ=hÒ¤ÉpÍÉ¥5¬¸˜% ÕÌi¥w¢?lâDf\E5ˆaï×Û®nªÖ˺,f&uàåÆ2®´sŽñ4"%Ϭâ™í÷Áe®ÒÉ>D¢ý&x<ÄÃù(8›iÞ;–©ÁFeÈÆ·eÛ±8±<‹~zX”¸RQW-hÁj|º¨‰¹‰Â±¡Íü.RôÒ€¯Ú*|Q2üˆî§™ƒïßÁdmÖ´³ØÎ;ösœå\FUÙ}ë&(ƒÌøX ¶R6룦ûÑþ‹Içâ$çiä%$- ‹-·cýóùÿüèÿWøðŠ¹Ó—˜9ÑçN(”…_×Ôóû{ö¾¾¸b!v±0¶ì}ÕVPœñö{¬4üX-x_™¡¶2åkË£Æ$î¨ã(mE¹ç@¢jïv»ªš® ÄlJV\klñòÑŽTè^׃ÁcjÍ0> ˺jYwW±&–à~´ñïêW Úõ’‘^ÜA$áÂùÄP4Yá„0/›¬n¼P²Ç= ÉÙ1¾%÷Ýå«7ço¯.‹ë‰€½‘⯔õ_±¶+» +ħÁÕÜå_¿‚§Í… ÐzÐ}Ñ—ÍâkàKðÆ?ïchbWôÛ}$}©ëq»Ë ®²ÐA6Å8ÈñH¹äsâp aöfɦhñƉVHÕ!`³G¢-1j¤% ÆçwêŒá¦ÿ˜ÄcP÷«m +Ohdn§o§¥nY³îH~Äu„˜Éz [:‡mËUÅJ +n9ï¶ÃX +HØ6†?=Œ§¦JÃ奃‘aŒ™ˆlݬ·qb#æ´^ÈjÓ ¿·Ÿ{3¾ÀD¿sé<ÝÐ4CïÀ]øX ¢ü'íž ¸—‚e{ÓSºË.ÌM>½<¿øtq^œO|Êxæ̘™¦µ“Ð~âÁÐ ö4ü<–Ä¡ñ$S¡íøx‘\;]»Ú:nmIà*i“ÚÔioË@€Jº@€Oß¼r¨oV¼‰ÉÀÚvŽc§ÏêCWB¡$ïÖ g—åün" gÀ)ô@\f>¿êÈÌ·ûEÏV1ÜÈÝ:‚Y´íâêëHp—Æ<+bò²Y° +þ?ÖÝÝ”»ÿZCÚóÊ•¤DÚ¨e"\ÁTjNW$ æǦ:È2вÛÉ&$³)”Áim¾Ë +€§Ó¡i›'+OM8"4“9œ¿+7ßì‘3LSJ¹ƒ±†Š+¼'D«jo¸Há2æ=sºðxÿ×ÓE¸íE` XrbÂØÕC€Âz:` W¯—(ÊYkëC ð硈ºu˜(ÔmÄÿ‘*¤#ª0§PzRã¨I X²h5r.Ùy7tõ)m D0V»QÛ0}Û ÷ˆYpXöýÂD@ò&êÂ\ܨ€S<âŽ´]ã=’:Þ''üâ8Ü龬Jž —Âè n›Lw*÷e<´êd/§IÎŒ{ì0]*u„æ2 chí9±œwî¾fdþ&¢í#‰—æŽMùm¹Œ§úkñòÉÈ÷sѹ#¼Q߆kÖß é¥/ +endstream endobj 1407 0 obj <> endobj 1408 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1409 0 obj <>stream +hÞÔXÛnÛF}×Wìã2©Ö{á.ɾ¹¶Ò¦HÃfS´viui%R ©&éõ/;³KR$-n‹¢(ˆ´ÄË™™3‡d=¹øúNu51ŠD<&alˆâ¤´“Õä«trñJAÒÕDHÂá\D1%I¤8ã’¤û +Œ‡‰"én¸IúarO¯g¯ˆf1¹º¸zù’Ü”ˆ™¢ÅºÌöûm¾&¯óÚ–«laƒŸÓoÁ“òž4Sd*˜0š¤×“)D7 §N¦(ƒ©ˆ˜¤[0Cn‹c½ÍmålÍÒ‰‘,2‘aÚ&U’$„…1ç¡ÏÍ¥ë~„Œ™ ? ø€r?B‰!!ðc·¹c`² Qj⛬ªI05,¢ß–ÞIZÛ¥¿![¼&4˜¦Ícß5•‹MóôW.4¤ªŒÄ?¤ð_ +Ì>Œ8·`«,ü/Ëã¢&ï‚(f‚ÚÆdÕø+òÆÆAÅk)MÔ‚†c°ÿ "I‚iÌBšL%þV“À0C i¯Ï¿üçþwbíTÄVŽ·µS]Š¦ ÿÝP/w;r»]C»âÖ€f¬È­­,̦Â~û- +¾´KÖf3[‘t³e€P>Ã5ð ‰Lg\_F˜%Çéݧ¼Î>é/“‹4•þxÂãçoЄ6L…hçÓÑÔ=Ýæ5YÚÀÐÕ‡»ƒ]l³ÝÜÖ³|ù6·süº~ AÃLm\Š%±ÍÝ¡i@Ä\4ƹFãtiûF¯Š<·‹z[ä.ΖçYê8é²lǯ)¡3´ÚÚŠÔK*o–¶9Éò%YûC‘[Hf›¯ü +èˈîE³Ú¥ ‹š>AË¢k“Øû€ØÈ*Èp>˳ÜStÂD¢OVFÍFkFÒͶ"¥§b·˜ðEdŽœÞ±Ì)™¸ÃÅ_.©,'ï­;œº›«éÃ>VvIŠ|÷ >3ˆ€ÚŠ>Jb³ÅÆωà,6=;ºYTÜeOOY"ˆ.q_(í 6cºé¹›ÙÕëË7óYz7((l“çÆt)º…HIUgµÝC­˜?×´ÕT…°  Ťî¹yNkkè?XSÏhí¶ áë" ž@‡öÃÀq]ÃÙE‘ÃÞZÀS›¬|Aš0-Rʤíí3Ä3°Sèþ0ÇK¶··xµë^>Ê/¼‘. (G¨’¤00¾Q`›#£~@½¬þNd\{4Ÿg.@;ŽD3)Lr&é#<ˆC×ׯñ óÄ<ò]AýÐíD \¶¿Ãîºú† Þ Tcÿ! ƒöðDʆ'N-vO/A[)ØÉë#vW5„6¼dJiï%L{Rä9Ö +ê51öJ~õ);ñZ€Ê +q†f0N€’¢„c¥]wYé25ê^Ü&ón%èÇ€ÓCi« +YªÞdµ¯ýä¤Öº§¹?Tõ«`¦‹U%1„*š²QM}ÖC¬|E€kªÏb5‘›D£mŸùªÇªž™BÆcý±H oÅ}áY Êå¿(JÀ2ZV-ÞÐH7G­"÷Æê™éÀ`äúèEtD·@ûŠæk–@E<"Ìiǘ + 0ö:¬÷.Ùî˜!}·:#‹UŸGŒOÛp¶(óO[è/ÚÄ`/Fã塆yu Už}Võc ÎtäL+0Ýb.õ°»]«ùþzH(m(Ÿd¢†õA‚K'A§! ÛˆÐss€ …QÁ~Zhš3xsiÎËÌÆÉT;•£rúáCëO/ðËvèÛ!í´> âé‘ñY_ÒëIü¿ ß“#˜KÉø©çé7³»×?Í®ÿ‰$‡×Ó?ô} +endstream endobj 1410 0 obj <> endobj 1411 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1412 0 obj <>stream +hÞÔWÛrÛ6}×Wàl* [θ“:›i;“ô!!™‰ÒT|Rÿ²‹ )êâÄIÚétaQøƒK)A å([M(X!4Öe,(‹Qö8y‡/gW(!)º8»xñÝ6K‰ÀëE“¯VU½@×ugšy^˜è÷ì'ð$¼§„4e„Ée—“)´n +¿;Ó¿6Ñ”)ÂqfÐÝzÛUµi­Y6Ib û‘$‘ˆp¡µF$N)ýÎ$'JöÏaË„Ç{Ï!#6!Â=„ùÐ. ÁÃ8í7o#ãCŒ<ñ1¾ÎÛESI~»)s»â¸3¥_ ÊÞ5®#’àðÚÏᥦx/q§,½ +Éí?œù¹Ý~¬4| K°Õ¬ý“r[tè—H¥„aL¶ÁߺΠ2.WÔ&›s©úlÇña¶ÿBLëhš’ë)§Ì/I"1Býýù·ÿüÕÿ¯ñá_[;¡³•£}íÄ€BPøï†z¾\¢»jpµDì"`lÑi SX¼ýq?š’ôÌ ÜRÜqK‚¢|FlàE©äHh.•Ý%µÄ÷Ÿê.ÿeLβŒûÏ5ÑÒóÔ.¬‰D[–ŸN§ÞáªîPi"‰ç÷STùòÆt³¶»È7ï±O/¡‚¥µd¿œàr½ý°4ȹ»’Þ[L8“Ú׀ЄJoþh†«ÆòƒI¯qCˆ1åþ#j?Àï#oõd +¬Ñ•ß{0r*€…‹íÊÔ]$4„œæDˆÄ‡”?B46çFônˆ}ì#¡õðÁ.1óÊ´¨{0È´]µÊAÂ5eíÀçqœìðGÅ <à¯È7yQuy]4/^GpiœÉÚt…à“%šl²]±g÷ÙÅùíÞ\:çÑg +J©“ä°ôÊ–‚ø»èŠ¼F Z®óÒíª{@mµŠ`{Áe™w(f™w¹’%„ªñ†å`2t½n¦ü+¨$ËnëºíÂO€»Ög"†LLcpÓxãÓ`}µ…« +v+Û4§¥ïz +WÀ¬ú©©Ñ2  ü)bÚvØ.ÛŽ„´ö€D§Sn°J¨&*°ÂWŽz_¥sâªú1 í% ¢-_nWÀn³ß¹÷0§Ìº °e}ê¥ ©wíÛöhß-Ê@ Hʳì1puýÛìòåÛŸ÷aCƒ—…õî”8l;(†å +à.ïPU—U¿øªRÂÄDöCâôÐÿq`xµD×õºs*¢O»Õ,¸tåm[-jÀ@#ìS‘äˆd¢²šÏ#nábò¦ªM¦"&©>öˆ"ÙC/O=ˆVc~<•¿ø‹yz”¼ªEë%E¾Dy]¢À m û[×ËOpqDçjGt“À+'G‡ªvIÝ/9´¡›Œ”þvvq}þúf–Ýï….w +°#¹%ŽËå(v²'°Sÿà˜ïÜ}mcÐ7Ïh,#Kè+ ò_b¥H"Óž–.„|ÓT‹ + +p ä#ò ž†žéà1Ô“©=ò‰@¾ú 1‰åXT}FÞÜ]¿º¾9½çÐ8Ê}ß?x"‘CPvTr_Æ•S_ô¥Ž+m½ þõ8õlâ kÌNõ=õÇo3àY¦×0à°gšÅÐŽ²ø4ŒG}xˆAÃœZ¨|†ybO\ϘØIüÔ€Õv:TÀ;yóÚŸK`HäüxTªÝÔÝØã^™£’Ï•8…Êm¿{^‚ÂÞä+óÔ¼túdº?1­‡3ªËœÃÊ&·³±Ÿ—Á­=¿ú&$f©4¨0€Ù7‘¢1v°XE¶ƒŠÆË®Ú,ݬÑF€;Œì³~®ð¦Oiëp`…šËmiæ6òbÛ¸Îc´ýl+ãœÈ^GÍèp¸µ]AâÜŽ)îàØ^f€Ðñ?2?Œ¨w{že³»›Má'Eöâ—ô‹²ä܈ÁúÆêª ó" @fí©Ÿ­Y0à‰äëEk/{”ËS²g¿¿]QÎ +endstream endobj 1413 0 obj <> endobj 1414 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1415 0 obj <>stream +hÞÔXMsÛ6½ëWàH6L$HææØJÆ­ëxl:9Ø=0$3¡H IÕµÿQÿewðKQÝt¦™¶“™ÅîÛ·o—fd=;~wÃȺ™IAB/"~$‰ðH­f«Ù›dvü–F’ÕŒqâÁ?¸°(¤‚“PxÔã$ÙÌ<°B=?$ÉàÆc>IgwÎÙâ- hDNO_½"WµË"*œj]§›M^®ÉyÙªz•fÊý%ùN椀 +2g”É€$g³9Äc2s'ÓkwÎBÊÌëj×æ¥j´­E2“œ†"’4„rÇ1¡~äy¾‰M‡«_BÄ”û“—.ú%ÜÃkb/ý¨‹㽋<0.^¤MKܹ¤¡s»]¦xÇV-Í Éñ;¥KÇ.ûÙ.ª³»ˆ›«ÇUHŽœ™Fï‡1ì¿‚[°UWæÍr—µäƒF”9ÊšlìyUiƒÄh¨<Äšsv`ûþ>Ø¿Çî<¢¾ϹÇÌm@\I¥CHwýöË¿¾ôÿk¼Ä܉2Ìœ×åNô,d–…ß×Õ“¢ ×ùèŠuغ ÈØkÕ(¨M|ûÕå~TKÚ¦­­ëÚ’ (/h ,”¡éŒæeˆQz sóT¶éonòyvœ$Üli,Mâ š$>šÀúÔ2uçäeK–Ê•Îêñf«²<-.U{•¶ &å½cð¥ø€õáaµŸÁ®¬*¡¬3ØöÖ?«\Ò p›tP/ð¤9©Äºv6Væz79•^ä›Õ®tî]ÈaÐÚÆÄo힀¢ +¨Äõn£Ê¶™úuÍ©õEÛ/SpBŸ º¨}ŒÎâM`ÀE\V¹jHû H­vM¶i‹F˜GCкasÐÉ?7Ôk‘<„ì‘Û5jIV®àðPá/µ6[ª–v8úÆ­¹µ=th/QÔgýÎùàJ0€Þ;õzÚB q2èòuU!˜Ž‹˜ÀžHU*R­†#i;‚¾Žl,àèÊå‘vY^p…öá<ºàòštQté4ŽLõ6hR.k»K5fßMµ«]îAJ÷{â„ +Bz˜ÅÜ*µn‰6Ƥ;A‡I#¶Ùúy{}º˜BÐ1%Dß ¸Á®iÓV!á(I³5 +àÏâ1w|÷÷!yCªm›WeZ´\êó£cÕòˤޞ¥%¤¶x"Ÿ”a]UfÆÓ9-~°?_ô“‹ÅQ³4„TÏ}˜Xj¢Òì4&OHX’—š»S„Ñ-q ü«ÅéùÉÅå"¹™` '8÷]—Ë}œ'¢ù…i"”ü]Eä8ÃùÜ_k"²2SÿAIä"üþ’ØsËóhbƒ ÛCûãÌ÷ÓT2*Ì tú¬Nç̶Jæ†Ô*ð¾Îõ*ƵŠñNŸV1nTlÊi@L†Aåó±íÍÉÅÉåéâl‚! ž£âf„pÏúuÛà s¾CÚŠlrSfe¾ÉŸ1}!N­ø²ù‚Ÿ øÈb¸<šu®>» >$Œ¥µÙ²T…y‘º÷<5±4Ŭky˜zÇ +0 uQexªt¾`â—ùpO÷ÀÑ‚¥0دùdq~¹¸~ÃØù yŠ0-I²Ñ†¸#–uñ} þÓ¢T¨rÝ>ìû‹àCè“ÉõíåO/¹¸§Iw{>>PÀ‰Àësc ð™>,µ"uAçioXÕ'#­éà+¤áCÅ“( €ç׋³‹÷ïÎO_Š¢+ ΣQÀ¡Åé¸Ýäë²!Öù€6†ýFÛ r»RÁçÌBÛ]k:në½{¤ê¢ï> 7.ØwÈP”ÛÏx±ÍáøO +XŠ£RUksð¡<A;î #8ÒÚÞ;×Kñà°Ó¾e ëw­6)d g78ÌeX/_SYw”Ž IÎÎo’ º!õ¢C­á‚õ—J÷l=0ªfW´Äè#çÓ” _ Iér©ýz@^`¹æðÀ@ª7 z}—·aeÕf Ê:OîaBKñ`Î9‚,i 0F +¾_rC‹íwë½z`ЈšmcHyØh²øo+ƒã£ m_ bA“«ºãäáÀeʵ‹3®ƒ2þMd> endobj 1417 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1418 0 obj <>stream +hÞÔWËrÛ6Ýë+°›&>³smÙãÖ‘=,œ.Š’ØP¤†¤ªú“ú—½_²ã*‹N§O‘Ä}œ{î¹ 'ëÉÙõ‚“u=ñ$ñí€8G¤Mªt²šüMή8á$ZM¸ 6üƒ |&ñ¥ÍlA¢íÄ+ÌvBI¢6wHt˜<ÑËÙqY@.Î.Þ½#÷•Å&i¹®âí6+Öä¦hÒj'©õ[ô x’Ú“Ë$™rÆ=—D—“)D7‰^ÉÞôçÊšrŸ šòPHkekM\'„|<æz„ †!aN`ÛŽÎÌÌ÷Úç2Îè9 ‚€Hõ2îð +!‡NÐ&‘‰.Fáêoãº!ÖÔc>}Ü-c\ Ú¤K½ ^CZXÌ¥æµæ¥*Ù˜—„¾ÚÜ…\¥'ð‡àú¦ƒé;~ûïa ¶ªR?Y|²ü€qš“µñWÆTFae#ØBx~‹¶ã£ýáahMæÐp*l®—.±<æQBÚëé—ÿüÕÿ¯ñî'ÖNúŒcåì¶v²c!7,üwC=Ïsò­®ØˆÅŒ5yHëšS"ßþ°„„›é’µiz˪·R¤xAš—ÐøþKô÷³‹›óÛù,ZŒ0r0êMxÇ5л í¦Üa¼L%} þÀÝsÑĪ=Q$ô¦…ž +¸À¡L•’ =ª¡øD3¨Ç2µÄ btÀ<ñWÖ4iAàXˆ˜µIŒÙsÉp³Ã³å*ËUp.eG¥Òè£;·o§hö5ê×G5ÚÅ8'aŠÃìpŠ ŠI 2œlâ¬`ä÷š*ÑÍÇ›ùõ÷¢QWŸ T Uº«`ZCSƒÛ¼\gIŒ&(ợQ礲ر"6€U`bì6–Ä;Ï5ìÏ{°ÑÆAúÃ¥ž‡f±NIS¶T{oˆ`ÂèƒR‹·šMÍó]A½c5¨áeUÝ£ÚòV'Lk|µ„ \Û#ÿV+K"ñ ³*ñvæ’¼L,‚N¿M›**à®÷ÝDÕöÅÇIYa:ÙvW) ¨b}@!ËL}ø”-µ©1B}• æe¢¾VSÀ× À\žÄÌîñð&=&¿#†–ÒªU6žÆø),Âî d_Ü^VéùüüönLÇyîk®ÙøˆeUÅŒá0R®I­ ­@lì[Ùéò4Pµ~/nï.~ýŽÛ¡ŠØF¾{·ªè@I¿i§cx_z¦{ýp÷8¿|+ÝÎñKÏkä—OQÍðyü?)€AÚ÷wŸjüÚC§»R ÜNòp>ÇÏÐêÜÒ‡Ùb½tÏãð¨¾(8Íiu•ƒ³×Åùü­ÚpàÕô$wÂ.n®Áo9ì5Ý9\€m€¸?Àß¡ãèfvwuuR¦œ3©ÉÒé¾Çj¬s£@‡¾²ðö·“œ× +endstream endobj 1419 0 obj <> endobj 1420 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1421 0 obj <>stream +hÞäXÍrÛ6¾ë)öN"„<º¶“¦“¦™˜I´ý´銔?Rß²»H‰’œ&3ít:ψ îï·ß.,`>zñêFÀ¼iœA’P1lìh6ú®½x)@@1 1þáEd)WRóXB±Å(…ÇI® ˜à" »ÑGvuý4ÏàòÅå³gðn‰Œ+VÏ7åz½¬æðºjífVNlôKñjR^“æ +Æ‚ £¡¸Q ©™ø•Ú‹¾ÝDc‘rÉ–(Þ×ÛvYÙÆɺ.FFòÔ G†k\ª<Ï'Y'Þ7ç®{‰s™ ^b@hƒr/Ñá>¹ Bø2É:ßÉ0Ù›(µ7ñMÙ´ OÙÏ÷Ó’V’µvê°¤kΪˆk¶ý6m&‹°Iúk,4ºªŒ¤)üCz”&iŽß¿Ã%ÊÚÔþÍt;iáC”f\0D6A_]e˜ª˜b-¥I»`'Éq°ÿ‘çÑ8ã ËÇ2~©!2Ü0€îúõ—}ëWxK¹S)”¹¸ËêQ( +ÿYS/V+x¿œ#\©ÛH xo‹µ©o‘TøÐNyW˜¡¶RéjË ¡œrâyæéÆ­p»IžîÉ$OcïäÔÎv7÷v²,Womû!B‚JƒDWm ÁæX"ˆsvÄ5{V#IŠ4FJÆÅ\,1^#‚>N%QÚ‹R<“>qoûðÓ›ââÕuTüº×™p¹ÏXÜkIƒhÚ²µk[µŠ…=Ò‚bj¿]êÕ¤Çj`Ù@}ß.ëª\AYMaRVpgaÛØ)ÔÕê&ÁŽ±È‘KµãgǨ@³HI÷i~¶œ, ñiÊ¢ž +Ú‡0+FztóîúòõÅ›·×ÅÍÀ+„Ý™àÅÒï0vþ«(J›3[q¹ï*éºÇª-?»oŠBúržO÷´@|hÄ r4ºˆ~dK àÔF† X#ìæöóeŠ9“ŽfcjW#6­·w+Œ„³Ñôù&÷ÎñXÇÆË@ºf(Ž.¾¹í-$oòƒÐ±OÑÀíºµtµÐ݉¿À®¬Òó-E-(èLÂÞ ¹RÁ"§áMi¸ÅœAš‹/áÂ…e¶Ä’¡ì#!$%øコH¦Ý“ÛC`q– ŠÔÂs—­«¯B8µvŽY‘=†gêp§îÍÈ<4¶Õ²E Ï€ ëB?– båNƒbâ0Ä8{Y'¹.获ä ^F8 yì¿pý¹\߯l$4>}6!)ÂCðU&ÌA×ëÁ"´¿o±RÚ„ŽcªœrP©óiyš“ËÈhzßÏrãm¤$EKòØ|Ñ~±'ÃuÈ„Oñ`®Oëùöúõ«ï‹p?y\Êžݧ= ö°ø+:×Ç„AAOŽ”œ ‰!nJÒå"Àž Hʼn>ž`ûÙøÿB– +©’¯!Ë[K8ü;¸rG$‰ÒèÒ!û€,ó87_Ë–2aÊøv¾ÔÞ¬ÄQ Û9÷¾H™"d)ç(sÑ$e#ü!QÄa%y ,¥d/O˜Nž $vIFo£1‹ Óx]—ír«2’9¾{ŒÜhS»-[¿ƒº„!#…/VÞbÅ·›û°:qÝ€àl9B¿îH5óö4‹$‘8¶Ö}e«y» ‚vrrn:!I’Ï ì–í +ŒŒ ‘ÓÒ!ŠBãèY¾1W±>¦Ofÿ«ªºõE7{$£òÀçΟÁ²ƒ +ÔéÎHwæÓ²*7ÔŽÚrðlsže'E+â!&ãZ0†ÂçPo lšå¼:ušZƺÞØsª1ÉÆPÝM°Ð BõEç9»·› ±å‚ 1U‰UM¶ ‰äLŸY|ЧLZI=±þ{Kb»^:,œƒZõí©ïOÂÇ‹:R,Š<±w¯jGÎvô¯K ÏÙgꃂ9E€  ;ˆ”Ga%” žnVQú]9‰;)û 6þ_§¦öñþ„É%–ç>/è¼kÔèùåÝoîøù@¸˜hÕ‡$¶/ß}0wÉqî²M^,-’¼Gìzç]sÐø#€ÇæégÛД†oêupCàÀ¦ÎX˜šØl[M¨—6x¶[a“™Dº›Ã žÿ`q¯M; +endstream endobj 1422 0 obj <> endobj 1423 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1424 0 obj <>stream +hÞÔWÛnã6}÷WLýDecš¤dÉ¢»v6MÛ\`+I‹¨X(2m««P†D7ý þegtq’],Ð6n‹&‘œ3÷CYª7<žKXU=ß…@ŒÁûà +(uoÙ{õ†ï$Hˆ–=©@à?>ä8ஂÀ\(ˆîzQ¸ðB¢!=ˆî{7lzôF| “áäÕ+¸(9æ.+Verw—™œ«Ëe’jç§è[´ä6–FÜ…äÒA4í ̤ä>B_—Î@\± a`VlmftUcE½‘b<>ùÀ•†!po,„×Dæ+øÝ>†Ì•÷l3B qëMŒx—°ÎB¸é»àÉ3µóQ¿O* ÎÀç»Ü,’³zÑÑ3dÆá#Ö;m•éº=¤š§#ŒÕõ½(Ù,ú¾„¨"b•E³³Ø¦®œ`Ì%Ó-dÕÚ+Lk +SçJP²•òƒ.Ûž÷i¶†Î`Ì=”8Çç>èžþñŸýÿ‚ï^©vnÀ%UNtµsw](Û.üg]}“ç0ËVØ®4ˆÖ‘ØŒÌt¥q8]ê·_åâ¢^ðn2ÛÙ +T=[>2ÊŽl¢H5òÐo&<íH:Þ#ÛU³h‚ÌŒ…Ê8>Óvòb¶ÐËûI’ç·Iú!zÀõ~¯Á>lôa“7.Ð,õ½ )žÖyªÿ¿‘!»Ä(¦‰M`‹«­;ðk ´Jh»U*uõúù^ZSHé:)áà -Šò‡Cp•ä›óƒÖ—Kéý y²ÖéÈ–`×M Hê†øe©Sû¥˜P'f¨A‰¯¾¦ îçg˜£[ÌJ½ú<œM‰Á,c†;ý¨6T)l«×¤·VÕ‡€œ‹$žXÝ©+î ä˦éîË ÙxÅãØôcg—jÌú+µÝ–äk'ú™vÄ®šì7Zrë“ÅÀhv%¿AÝ +Ú`lRÚùF§è[–äZ3Õ´ Ÿ–yòÍžŸ|÷~v4 퉇7]%)ó­ÄoÀcÖÇe£­ì¦ò·A'a,cV´ê<—ýCè_áútŠ’ØŸ±kj…]£S2¢ÄÁ¯(’Ü&+3—«ýÏ©W“ê‰ß‡x) \Ç¹Ç æĶL1†~trzrv¼ÇZŸ—Ô¨+œ›ᯰºûþ¬êfý‹óë£Ù¯uíôÛß}y¢-rÌê¢,6šra¨ã C´F=_á@ÓŒ½Ô ~Z66ÈÑYfˆ/_Š;ÓIÞ“›¬—|̵YÙ5Á+.ÝØÁ}åþˆîŹÑ5û쯦 “]Íçÿ‘ãúÙ_$²ÏøŸqÎébø©‡tw¿1 ?&w›\~èÖ¾uäpQßAš¸Õ°,èJ7 ØšþvÀ‹õ¹[ XZ§[ÑM‹“PÞ}8?qÔZñç,¬@Ø +endstream endobj 1425 0 obj <> endobj 1426 0 obj <>/Border[0 0 0]/Rect[227.46 427.26 302.82 440.76]/Subtype/Link/Type/Annot>> endobj 1427 0 obj <> endobj 1428 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1429 0 obj <>stream +hÞÔXÝ®;¾ÏSXçÊsNã=¶çWG\”Ý +¥T;^œÐ4q²%“(3a·<¼oÉ·lÏoRQ +¡j7“‰gyyy}?Év³»_,%ÛÕ³D³4ÌX”%L‡ìlfÛÙÏW³»×’I¶ÚΤb!þáCf©ÐŠ¥:¡b«Ã,DF¹f«5.B±Õóì'þjñšÅ"c÷w÷?üÀÞŸ™ Í»sq8”ÕŽ½©sÞküaõ+̤ÝL±Ðl.…Lb¶z5›# M³vWºýáÌe*/†=/MY™ÚÆZ¬f‰i‚%"N˜P:Ïs&¢, #·6»\û#V,T4ú¡ÚþˆwåÈmr†£¬];%¦ºUìR|[Ô æ‰HùïN›‚®oÌÆ]°’>s^"æ~Øoü óúÉRî3”1–ªE_”t7SZ}”æxþ=.ë|t¿l.ë†ý>H3!¹ñ!k?ß±ò“acl©BªµRIÚ;Š¦Åþ;“yÌ3ñ|®Bé.c$"ጵŸ_ÿñ?úÿ¼ûJ{§S!içÂvït×…Òwá7Õ—û={(whWÂaH4cÍLm€MMýöç@iÜ4ÑÓc+U[ ¥ãšÕJ9 +ÈEž8¤Ñˆ%IÁ9QO6¡²d¶‹dìî9ñ—3ŸŠÃio:}y2ëw‹ý;Ó°åSiö¶.*öÑÐàíñRmþ@Í“À!$p¿EvO›'š« î®›òX¹¥id•°¹QˆœíÓgS³Ÿ±Ù>ÛL( <Ó¼/0VõÈ¿[®oÞ-¾{ ~´1æ>È4…û_.ðàý¯ÿø°X>RØöÕ÷~îaÄt¶fAw›ûâôÈe^=õíq+ÜÝü¶2¸~äÿnÜEµ¨þÆ F\Î ü‹—”V¼2'^w*‘[ònIÎC†š‰ûD؇òŒ]Vê…©—@¢ÿt%öQâ–þÛ8Ï%É”ÀÀ´ÎÙkÛ*Å­#‰†)vÀ'iBÁü"?»R;¨wbëû¿vs}("¦œ2i*Њ;ž£.ÝÄC¨nŠÆLÕ +EÓ¡„¢„£‡¯Öz©‹æH{‰e–n.Ûµ¸ÊEM>ñ!•öÞah •™G š3ûxlžlÝ0SÔÖ-+ÓÔŒ0VPá¾z2ÓÊAïÚÂÅ°8×… "‘q›±$?ñϪwÙª«ê•5;žˆ°÷”¨/¤-‘/€!ƽÅñE=ÏTJx‚9UÁœ Á±r_׆ DÔÿÐuKÜ2¨”.ã°[/_¾_Ü¿yùöÝb5êëXäùpy‹§«ìuÛ—RǦؕúsÕŸXYÙFnoÛFÖ®‘5/¨¬øˆ½³AÖmœë\ÆBúŠ¤ã"Oó^Ž‡}%.}â´Çx¬ÏûØÚ°¿¶˜iÕ£H#…Ä#ø<´eš±æv1±ÁZ]êq¯A„ 5`?é¬_äæ-+»R—«oÂtãA¾]¼¾£Š¼-ªÝ¥Øˆ§'cIÁTS{Œ^ÏÓx°·h|L4‡È­þ ºÊ69ÎDäQÜÁLÄ€Më+þè¬>ïÛŸÚ½¬ÖûËÆô4穲㸛¾³˜` S¢fg}Ý {cQòìtÜÞ«îûñÜvû\÷:¾yZèÄO¨ã¸Eœ²jl2ë³A¾v(G›—Ùp…² ’º ©&Ø™Dq´#ÏàÀh@B¸` ‡ÎÂ]?±“ྻ|ì0<”}9¢q+ýÄ}Ò‡€,÷+B±©±Á‚XZ–1ø{FÛº Íh(5è:Ê<áf‚C)’d¸É®{ÆÂïò´ÄìÍXµHó[ú:}á6I÷ˆŸLáÐ1Ë¡ýzBøƒ‰÷À§‡sÏSmÃQ§Ð&¼ÙzIÚ¼è 2ñ¤ «tØ;ͤO£ÇÄÔ`+¢[`h[e ‡@’&]¨ìÎA +<<6¸nž­6ÆÆx;0OÖáüª0“”ô  -]}®c:º÷kî£ÆÎÎ⦓}mVÉ%ϹsÂs÷QQ×}Òû «9 Ϋ̸oŸ€ +É­m¯ 0-B 7é-ujq‰g6¦^;¿¡yù¥“˜€žä/…ÿÿ·GMéŒi%‰ó5ñæ—)Ÿú$ÂØÖîueh¹èöƒÒÁ§Ä¼’\ÏÂGº¹Ûxvni‘úåÙ£8a6˜} æ­‚uc¾b5Q"Ñæƒxs/—nW½nB¯O¤E +üê´EÓVŽµ¥7ΡwAtôý@ý®yc“1¿)ÀŽÞwàθÑ3Ûøʬ„£FÉ´ú™!¸[V_ÖkS×ÛË^¸eGM¹wÿö +Ö]Å]F›xèI×3ã„|HŠsbm:Ù:æÃ5½Æj&ª<<(˜‰P¹ nÑ!úÅ8¬4ƒŽ&¶UÓ ¬o÷ûrP°¤e(91Fªêä*–t˜Oã~â•Gøò%Ò{)’29’²| eŠÅùÄöî;½kJ_ùô¯°”þE&%ùŠÿúe_Û8ÇFKEzŒÓ“êA—Ú¡Kë»íð/¼3AJ´¹ö=î^—[6 Kz÷q£$tô~äíË ©Æï!Ö°`ðwôTœ¿Ÿ¨iŠr¨¼?d%nºæ3ùŒ“w°]ªÄ¬7°°'³00&[t +endstream endobj 1430 0 obj <> endobj 1431 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1432 0 obj <>stream +hÞÔX]s›F}ׯØGhª » ô-M”Ô7ÉØjÒNÚ‚V2 R„êú'õ_öÜݬ$Ng:N&p?Î=÷Ü»l3{üâZ°Í~¦K£ŒÅ™f*b­™­gß.gŸ &Ør=’Eø‡‘¥\I–ªˆG’-w³VxçŠ-K\D"fËÛÙ»àÙâ9KxÆž>~úè{݆"ã*h6m±ÛUõ†]Ôi×EiÂ_—ßÓrž®Ø\p¡¶|6›Ã ¹)Ý•:š~Û†s‘rT0îšCWÕfom-–³$Αæ‰f\ª<ϳ(Š]fZòT÷÷‘2—ñä>!@”½‰ŒEû/&ò<œg<ò¹Œ„»LX¨¹ë?þñŸ?úÿ5>üJµS)T¹¨¯X(< ÿÝPŸl·ìªÚ€®Ôˆ](@Æ=»2{ƒæTÄ·?B©ð¥Yñ¾3}o¥Òö–†¢|Blð NõHh,/5e¹Ÿ@Wè¸9ìLÝí½–hgä–\)«$)Y:ì†^«ú­/Åš†¥´§€uÓwh!Ðv`妟|ÎìÀ Fû©ú>”Äõ«˜ñ2uèš]­MåîCyq¬;t$©Ý .Bü(»Ê:ÏßtѨ{£Ñ*R6»fàN>mϹÃï¥ÿÌÏ/~Z<û?À<¨•RÙÝØ¢‹ýüÖØÁJû5~°ûçíbƒU±W™º±Ã©¹Òg +,}]­Òs¥ª!è÷Ôc¼6]½úqù™²è¾,úce¹­È@Ƴ±2Ûʧ.z[[_Œ¾šê@>E’È2·ÖN†GIØšTB&£J€à]Ól-&ñ—brýÝÅâòÓ˜ô'g¡}}ΠÒöè”ôÞÐ\Ã^TÕ=㢼R7n*³]ÑNÓšMîâS};—‰LŽ™¼\¼}PÃ.êUUn•ªM(èvKçK¤c6~Þø£ùß aJ¬ü +endstream endobj 1433 0 obj <> endobj 1434 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1435 0 obj <>stream +hÞÔXÛrÛ6}×Wà‘L*7äc;vÒŒÇQ›xœ>0$±#Q.IÅñ'õ/» €IÉç6™ŽgDH$ör°{ÎÒœ¬&Ï~yÃɪžhI K‰J5‘ŒTv²œü<›<{É '³å„ Âà.<5T +b$£LÙvÂÀ +e*“d6‡ãŠÌn'×ÑÙùK’Д¼xöâéSrQÅ<¥2Ú­ª|»-ÊùµllµÌç6þköx’ÞSB%™rÊuBfg“)D7s¿’Óo«xÊ QfÈånߥ­­óÙD j4d¤i¢ 2Ë2BUʘò¹¹tÝMȘ +5¸ €àÒÝ„„;82BFà¦JÛÜ10Ñ…(⫼nH<ÕÔDÜ,r\‰¨± ¿ ^³¨Œi…Ç~UóuxHø+ã ¤*µÀ/‚û3Ì^™ ö_ÀlU;g±Ÿ7äÏؤ”G6˜¬ƒ¿]œÁÁ8¨b-„6-ØJÁþ—ð ¼¥TEÙT0î— ‰5Õ!íõñ—þèÿ×x÷ÏNÊñäX{v²«Bªðû†ú|³!—Å +Êû°‰9cM.mm¡7%ÖÛÇXHøÑ.hÛ˜¡·Œp½¥PàxPÝãW—³d>Áç@+ÊqµßÚ²©•hoŠ[P)‘ C¹ÒŽ6ù­^ç[Ïþ>Ї'õJvhî=½¹±óbYØš4kh+NÉ&utó .6†Êp]–ôì%-; +o:ñv]Ì×hÜ•%°spÑF‹‡¤Yê!q+D…ªS m;é2@²°Ë[l¾ym›‹Xè÷9ÂDÍú"V1p…OEÙ Ùw€}’¶ßáRðˆDgv‰Œë˜[$sH¡„õnW-Š2oàÞnIe”c\ŒwV@Ü–øÅã™y<3ÄhÔùàÔ¬I8ñOƒm” 3DÛá1†#oÖ¯°†‡/©Q½Ãê¤ÌY äüBzͺ¨]À˜æ®"ÞFˆ3r®ûÜ_ìõ·`ñ-œúù§f‰`P7ã²Á•uC0ûÏö<ò")e©·À(¼z~u~9ð$OyIÒà¥nàü°¥~"y¹ ó¼ô^¦’SeÆ­^Bûí,Ù×ß®ÜÜÁÇÜ’e,tÌ.†ŠØ|>>Gè?ÑëþPè‚fƒÞ’í¹ ‡àIQ"ÆÏí`µÝÒù匪ì`F´dßN7H[5vTGÛ1Çá’Þ +AÓÄÇ>貎ø#gê·xõP.GóÌ0¯=½‰yÒ è~ù”,¥Zù¡âK4³ÏÞ÷˧ùÌÂkB;L$N§˜ÀqêD8J/ªHÈnb°±äѧ˜Á{EY ¡0n%66{ë‹SV=å=Pe˜îA¡OÊ0‡wµ»åd¿„¹f +o!išŒ íÞ‚Nu¢£R9© +Ë!ñC ™>¹Š/îû­ÇŠ·p“Î#Åû(€ìq8¥×}×ðšÆ?S®ÓÖE:ÒŸV¬qg +¯u}\xwB™ÛU’J;î”Þ(ƳT; ‰¶b:=7¨çæ´žƒ°/ÕóÑì}$èX[>ÅìäÑ·ïà^ÍÝ¿ °mW}¡PÄ”Zêk•šC¿Ë‘Pû +á95¢yÚâë€Sº oüºm4æÓ9dnÌ@/{á_íî‡q,Ûß4Œ«ÆGü·òQB'ý·éC€wäÿÙK›. +endstream endobj 1436 0 obj <> endobj 1437 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1438 0 obj <>stream +hÞÔW[s›F~ׯØÇ¥‰6{úæØNêVµ=2‰›Iú@$,ѱÀÇ?©ÿ²g/ @Jg¦ít4#Ø={.ßùÎC«É‹×W ­ê‰(¤’‘F‚¢*›ÜL^&“¯b(¹™0Ž(|ࢎBA å(ÙL(X!TÆ% ¸¡L¢ä~òŸœ¾BŠDèøÅñ³gè² +XD.WUºÙäÅ +MVݤ‹,ø=ùNî$Eš2´BÉÉd +Í1 w'v¦¯«`ÊBÂqfмÜ6y‘ÕÖÖi2Q2†x4Q.â8FDF”J™æ$Ôís™p9x1 ö!DÜå#¶Yˆ<”Q¼ñŒw>rå|œ¥uƒ‚©&!~s·LÍÇM¶t7(7×QØ/ûÕ/ªk¿ˆ»+e +bš›¼ýÓ„/Ãö_Â-تJ÷d¹]4èmF„áÌ›¬ýyeáƒÊØ\Q“lÎuØf[Êq¶ÿB,ŽƒiD$Ž§œ2w«P ‰Æµ×o¿üçKÿ¿Æ»Ÿ¦v"$ÌTŽ¶µ +™Gá?ëêÑí-šç+€«iÄ&`Æͳ:ƒæoŸ.àÏlIÚÎô½rÛ[å+d u¨{Dcq©M”Ôx¼"Ž«í&+šÚs‰v†Üœa™ÄP”…6.¶›Ë27‹“?ú¼IåRiÎ`f)´ŽÐ±ÏäÕ]¶Èoò¬†à¹P¸YgæNRhb„…·ùÞ|:²n0MX¸³È=?R_šòÝY7P^ c¬Ëfú• ã˜rNLI‡ÑtYÀÖÎo.å¶Å>j£Fî±·Ht똲O­…wƒ„œË82Œ¾ËKZ”eµÌ‹´Ffê@@°1öñôÜpÑ|Jo·ÙÈ®v(§Â;£YçKÅ|¹¸kò²HoQZ9@€Oiƒê]éŒIö FÞ Š"gÑD’nÊ-øp +<Sat¿¶B¢ãÞþ–25µ`Áùbm“qŸWÊk›z[C¥ìl Û´†î¸,€iªñg8CÂŒ(–ÙÝ™ùaŒÀO[*Híû®<¬ÜÜ1¨2›êleÂ'µhFIÈûèp‰?3› òΉìv#ÎŒšÒG¦ˆÜÚ¢#ÜådU”f ùh«CÜimÛâ"×ùöš_A©tdšq3éŒúÎ_f7÷6ºôöoÖ&¬"8nG5;zw:zTÏQZ,4(­¨zÚ¡ÂóÈ"-ÐÇ mk€|YÜ>À×"C7©0\¡,…f–€IÂÄ®ßï¨aÞtHŒšD¢’]2j‡µë¼õ:8 äì—A·çéq¹x7É‘†Õ-½u±\=MúÙ®Lî–Æ$ÖNzš_h §®-¸ ð=6$±Ì‘ºf€¿³Øé&Üê>jTì‰)CYÝ,`Ñ:­~@C¶6äÝ0P.¾÷¸62›6ƒKòж[ç4LÔP fЇ`Øðý†¡è5d{ÆwŒ÷Út¾u§_#Ûºç‹í­Ð%¼›©clÛ ¾Ü°9äåÎd¯È¦½@Ìü¹fWi ++ÒìÔÂ6€þ"ì{¥bñh·ÊN7ä°Ó†i†kŒI[/Ùåe7ddõHóm •£I˜i0fR$”@R ¾ñoÇ&žŸ¿><+ˆW øùh³ð&¾<:Ù3"I/Íâ[¬¼œ]ÿ²gGõ×#vv +_%ó³1«§öêb6»¸¾<;¢KSx¿S^!hµ³wvq}6{¥‹O†ãÑ/æ§{¦$  p¨–ô.ñ{Ö”ÕuYdël6;àTô¤øäÎ¥£×û1Â{Ò¼š‚j€7¨]Ê;I…Ëj4"í’žç'ócãüc†ËˆhÙ*æxí€xÑN¼DF¼4·úŠzá†*¼.šúoY‚iÝ—0Àœ_1|_Ã$ïf5L_üqƽè£‘yxñ¡êiöukŸë±ýƒâe(€|bõDùÒFÄB1>Ñ #Mì9S/¶|’Ö̓ÚÜõ_‡å '_Pxû^7yØ¿#eZEÉå#R†B†zRf—ᾨA¨­"x'÷[]ãšÅß/¶?>`tXÍX4ÈÔƒÆz_À€£]²ó­¹löô gík^_¿œ&“¿ÆúÙ= +endstream endobj 1439 0 obj <> endobj 1440 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1441 0 obj <>stream +hÞÔWÛ’›F}×WÌ#ÄfÌ\GÇ»N%å¸\»Ší­8$R¨íÚŸ”¿L÷Ì€€•×N'•Úªe3}9Ý}º‡‘ÍâÉ׌lÚ…$‰S"SMDL³X/¾_.ž}LÍRV»‚ȪLÐ;Àíc +ðÝYóÝKÓ½ +y¨çHrIÐm_—ù´aLÒEi…âmº¸ZÐÒÛ>ŽÛm™“u( …,h,­ÓHîJl,KHá Ú¸ÄeŠ&cdå œûôX"ëB¤l}E<Î)6œê“ª> œVk·»¼g>œPdé8L.ú/žÞ\^MÃ9Ò‘ô:¸§oH°¼3XI^­H‘WNM$ÐQÀ±yy¨Þrl!7ë +²¹® +ƒ`q`ý:„ 1y±ÙÊ8å#_ÙCörÈì1.b -{àd1ä‚bÏê“Tø³XÑú¤ÇðMÙÀt1Ñe(Ç8R›oMÔkñéAQ+ð'èÕ[§ìúcÕåì™å’»C÷Ú ¸À2\pŸâÜz‰EßA„:˜$ynû]àˆÆÍؘc3.àTQW0Opl›7ßÍhØ—ó¬EÅÚiºÅ¦ä/q®ö~̬•0üh1&wáƒI]IÉ}]EžŠ}eϾgÉ·”ul{À–qx u„î­?U‰e„zV·]M;IÞÙ 1F5Ž35ŸÄ°¸w!¶¡<äØ¡:r¨Kû¢²/:R¯C‰ƒXg[ûÖØj6!̘* Ÿe3‘HªeOgâa:KiGgy÷¥ ©ÇП†áÔÉÖHb@j¥€p+Þv%(Þ582üqR)Œ„ð¯A$]¼À%Õnó¤  Ä±o},VŽ°&Í•¤÷Z¨+—.ÛçI0ô¤1Å"±¨cXÛ§`ðÁèÎn ƒÝŽÅ‚Íâ9u¢Üe¯)ÁŒ§ÝT©¯¢´!‡Ï³ð'X6A–Mγ,g§–ò%-Á7v‘Þ¿TÍê$x˜t$¾%鲯%\®c*$Fê‹)÷^Cý}ŠyíÙ ÐãLÏÈ6¨Žû·Sã8Õq*ÇüúØÆBŠ”u –þe7ÿ–2˜ù:sÀòvÖ@0RÙ9•Z§É?£òæs*jYp=þ;ýÊÏBjÖ¡©¾77èÉ“iœN,1»Ýµ‚§ãKRmT —¼ +À¬ü‹lÏZÌa69C5ž® Û°ˆQÒk¡ž2YìI ‰n+eã¦ú6dÐÆ^§ûQŠº¯ˆÔ!1Ìg!‘¼ò·1s¸™ÝNø½©Ù¼¿‰Élv³<g€]J]oK¨ç{[ÖOºÝ½ÌS¹žh1x|ÂÏä&fhRl62Á! þÀe÷O¨¯yŠ +endstream endobj 1442 0 obj <> endobj 1443 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1444 0 obj <>stream +hÞÔWÛnÛF}×WÌ#Ù„kî•ä£;—Âu ›­$}`¤•ÄB¦R’®ëOê_vöBŠ¤dGA…sErçröÌ™!…ÕìäÍ …U3S’8‘*à1Ôz¶œý˜ÏN^S /g”AŒx¡iB8ƒ„Ç$fßÍb´Bb‘qÈ縈©€üaö18; ’¤ðêäÕ‹pU‡4%<Ø®êâVð®ju½,æ:ü-ÿ =qçI%TIÈÏf4nænÅw¦oë0¢ aA‰fàz{ß–•n¬­ó|&E†ù("Ƴ,"Ò8.3ÅH¢ºç˜2abô1€pû3îñÈ, +àC‘vÉ›ÈX#“.Æ‹¢i!ŒI‚_¾, +³bA«n¥¹fAø×~ö/Õ󵉹kL%æÊ3?˜¿ÉLú"Épÿ.ÑV½uO÷ó~ “”Ð@{“÷·­¼3<‹UlÀfL%ÚBLÑþh–…QJDE,¦n)!TDÝõøËþêÿ×xÿÓœO5'wgÇ{RÏÂïêéf×å +éj +± )’±kÝh,NnøögÈ8ÞÔ ÒU¦¯­„ÙÚR¨(ûbÃI–:½±+|]%‚$;µ±Üœã›äB/n¾èyYl.u{²„¤AaŠBíú¶\´ë±ÆìÔ̘ Ê—±mó*æ¹oU&5Ó@ÞŠtV06)øqMpûî,æ¿ï¼ñÝÅH2k?€¦-Z}§«–@¾Öàöyûˆ)“»½ô9Œd™<à‡Ný@Ù àÜ—µ^ÀCÙ®MZC¯µ1=èõâôÃùõ³^U—šx} Eµ°~"Ž›¤Uø¤GÎnöŒ|Öpß`|Ûjóˆÿæ–!ÇÞÒ ]Ìד“ ‚P¾;Šƒ±u +PV=ÊíS$íL›.§vx4Žr·eílä õQ… qÛ<ï 6+7â„É].7U[üeßÌsæ^ÍFb{‘Y ‹%·ýØç5G,KÌh¡CŒê£p5·×Ÿ'$$ÆZ0 6mílfwŽ`ÀÈbëÒâ ]Jƒc(BKî@úøLÙ 6‚Oá(ÕQJfËÜW`gú'Žfuojü‰ûp°m1¹Æzx°u><¤2WÓc#ŠeYbm·k씈`Ö ò E$AÆá¿ïÕnJ¡”¤j–¯c«A¢3°)BNƒÇÅØ} aïÅ×Û˜º‘3Ù×Ãnàq‡?Ñ6<»‹âåu”''Éo6Ï€Àñ}QRyÎĶïOüݬK½YàⲸÓl(h¯ŸN0ì*sìb Ú틬֫ûMaÁ€ÒCåI]µTº…vkD¡±áh§$XdÃËÜ1|FÜQöéc]ú2µf,ö)‰ùpçd¼ >k3ž"8P.Œ.£d:éŠ §r0Žòå.ÜÚM¢#-—cͳÃÒÝyß¼}w~q6V."÷µ½‹Ü6yôÕ“ÌÓ¸td“-Ýu”§ØuÓu»Ç®lÂy'ÖtÉîÔ] £òþz®öõÜ—÷’;Ĩb¿&¹Œ™$×îNçqŒør ®Žß® ð¶­©§qÛVø17*]Ô?L2£ËöÔ¸2_Ážˆ1#*NűjÌœ‡˜áõ·ë± +r5Õ ŒcpDݤeØoYF™H)’÷°dôtfÔ–áSzá…å€l¯ "‹S¢R—ú׆Lo…a0¹›; 3’Ýbµ­ž6)&8÷_›Wï/>¼y9ÂYv°ëíœçØðãy2¦$ûŽž¨\Çy9¶CäHälQ=/Íúj·#« X8=~ Ûz2£’„íGx}þ*Ÿð„S:"?1 Û–/MË—¨Jûˆ!ɤ9[±œj'$žLÅo˜;ÅR‰òõ0ý6±ÁÔèÜçA³#Á“‚åkÐQ‡5Û(©é«Ãîø]Æeü†üG€à\® +endstream endobj 1445 0 obj <> endobj 1446 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1447 0 obj <>stream +hÞÜW[oÛ6~÷¯à#ÕÖ /)>vmZlèÒ ñVé0¨2ck°¥T’—ø'í_îð¢›S§A‡vØ@b,‘çöï|bh5;y}ÉЪ™IMQœJ$(ªÍìzöÃbvòŠ!†×3Æ…?¸±TÁ‘”PŽÛ…Sµ@‹”Åhq;»Â/O_¡„¤èÅÉ‹§OÑy±”\­êl»-Êú±lM}å&úmñXÞRBš3Âd‚/gs8КÉýJ G¿«£9S„ãŽAÕ®-JÓ¸³N3ɉ’‘$‰D„ ­5"qJiìcsẇ1áñä!$ľ ÜC¸O‡vIÐÆi»uŒ÷.òÄ»ø&kZÍ%Qø—›efW·f騰wˈ$8¼ösx©Î×á%îï”%ªÜþÃÃÂF+ ûÏa gÕ•²Üå-ú5R)aØ„#›`¯*ƒ1(ŒKµ¹æ\ª.Ùq|˜ì¿Ó:š§$ÆzÎ)óËE’HŒPwüí_õ¿{xÿ¯­P„ÙÊÑ®v¢G! (ü¶®>ßlÐE±¸Ú>l#`lÐ…i ô¦°xû3â~4KÒ5fè-Å]oI ”¸^”JŽxÆáRÙ(© _îË6»CÑâÙÉbÁý~M´ôjöŒDÛ3lƒ:žºÂKs}{yIlò"Ûœ™ö¼ÚìWUù‡ì +Øî ¶×_–¼*¡©sسÎê'(ð–ôV!œk_ B*½™íj¼·‘ø,Û¶ë…FT"é¶ïð34=¡ZÆc/pQ¶>ÞÎ0'1uO —»íïÖæMµq4÷ KuÌpJ¸Rlý²Ú}ܘ'ýAä1I™½Ò9€ï6Óª0"¨âGìI@2Mþ‘½ýö¨{ãCäóö9˜%ŠZ| øºÂÏab ˜X«ÝÖ”msà''B$Þ‰X;Ú„jC¥]•¥~¤¥q2´©Ÿgv¡C—B8ô‹À—7€ÆëÂ4¨]Ø)›â}Ä4ÜL—‡ß®30þ’®„´§íÐúE¾Fm…V¦ì¥8k;óÆ£œL£™C›Æ܇4‰È·™Å’ÝØ «·ÎÆ¥ñ”cx1¼ý#»ºîœAM±„ÑÍ|è–71Ît2xö*é >®ö´IÈÐ c´t¡ô{§zc¨OšjÀæ(ž 5æÓΔ¹ñ@[:ß9'L‹ô‡…Â4CY ~®0YŸ‰•©¶¦µôÉáÙ>š;}`vdÀ’mĆtØÙ>bÒÓ ¢SÜsØ.Rï/A‹7È,WýÖ¹¾³êñ#<ÎB4›ÙØm½ï‚ç–½ã*t¿÷{VÖJvWX€fyæöîÑø—ªF™Ï¯&à×à,ëœ ¢R'ó¥YEŒZMq¸Èp¹Ú{šŒžXO*¢SOne%ô—%76ÆÀó££›&ïY|†Y„î™…uÚŠÛc­»NÄZ9"Öb*ø ŽŒím_œ¾XLŒýò!; ªKHÓÂ,ƒtZ@fë{fÒ#Což¿?½8°¤õh`Œø»?Š$ã>rDŠÏß¾yÿúíÙ䨘°ÑQLt^k§9}Áš{,tü†£ £³{¤qÍ3‚ŠÔǧ]Q›%ºŽ¸Ų,k2àO_ÐÝš~“¨<®BW{<¼+üg‰Âög”{ÛCÓ´ÎØÊL=.¦y@{>‘ý(¦<+mC*7{¸GAtfˆ.ãઅްÃdÔ¥±–ƒKC|ØÄ7€ïdºÉ.3ãcNÆïÜï› Â“½G :Aa0IÏÙ¾üˆ¹Ïj)vLK ¢päW˜Ù3wëïÍf¾,AŽgXöøªp2Éä—E¡¥¨}Ä©ûÂ÷|åTa‘{]˜NäÌ0kÃLpÂ0¯M§ kè”ã²—ˆ@ÚßVŒ=jo2{2†Ó×Y^? »i­øP’„IzP¼ªêeQfv‚ƒ씹äÁÏ+ÜÞ‚ðµìëubã*µFÀXEé+PÝÜT h€Nêq6ï)½[G[@>À僀tïUPáþkûo.3‰ +endstream endobj 1448 0 obj <> endobj 1449 0 obj <>/Border[0 0 0]/Rect[145.02 116.22 212.34 129.72]/Subtype/Link/Type/Annot>> endobj 1450 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1451 0 obj <>stream +hÞÔXÛnÛF¾×S |EºÑxfxF±­-ï¦ë´†­41¢ `¤‘Ä­D +$µŽ[ôú–ý~Î"å8 .Šµaq<œùþóI’­Fgÿ¼•lUBE"f~2O°R–£o§£³KÉ$›.GR1_¼¦QâõzÜgy껆 ]ŸËfÎB/ïÏ ©Ÿ§ØßéŸ4«vú… %èP5©PPb¿hB§ùqC³BöŽ}‘Ö)Ûc×®g.ûµ˜žÚK m/•ºúzøn^S¨ óuZ²ÓÓyQ”o_`]Zß™ócËÇ¥ˆý?U‚²/çüs|ƒ0±ðâúÞ†Æ÷º¾N±[¯oë´¬gÎÉͯ§“‹“™{Ääù¿&8wþïŸn&·3XN|ÿ*}Ð%ð_ÉçÇ~“-êõÌQxvèÛuºÓ`ûåo^ÞLþÖaAœ(ß‚Â æÌ­OOg.ö·ð¿b>sªì],q€^5oN½§ îžêí;ñhU].ö;ˆœ4ž {tX'Ø~ZO«Û'O +utüôsœ¼}§‡•ÿ'Øê °?ï×Bxæx/˜ Ï9A#8ŸÝå&ùböX«Kd{d.¼i Ûð“´GM×&E/ä?}éîÑ¥AžxŠ’|ÿ…LÝ 6')7¡î‚œâ¾@¦î¥%ÊŒû2gâëßlÛßÖ|[ð›j/ÕUæC;š˜B¿Îôf"gZþÕÓ%^†ÕV¢^y¯Z$StVmñ©PøULþØA…S +…s‹'õä¶tž]ú–dØ•uš‚ânˆv‰ Ø‘ _/ÛJ5·c +å2›§Ô˜›~;%E±¹x¨Ù˜#ú਌Áq»AýR£ø^JÅ7g¨é0=]£¥Q6Q9…¢ ‹£.A³—Ò tÊ Ž‡$«wŒÎÁY4³P«§ÁPx¬¨CŸ+?¡)jMŠVÄL‚éæéžÄÉÁ|š/ªØ¥„ú#ä›Cƒ4hº¢ kÜp¹Èçº×Z]†u¸Ç#3sÝ^OÎ_~sõýd:°[À“¤£ít#?±=}U£ËÛê*¿¤Ô'Oõ’Uy~¦<}¤¤Eò"ƒÔø¹¤ÛÒúybüöjïÈ¡mËy5¹<#-]¥ùjO]ünô‹é‡»ÔùñWè—“h Þ† ¯({öœÎë"ÐÚîΕ>MÅžmÝ‹=)h>è¹!|ZãïQºÂ¤’á‘šŸ-]aò¨×=åY¯S£ôŒ-Ú„Ò«Ž&Ç7mê0½CaIË{g#u@C…|Ï1?EExHŃŠ:*ä6×Ø)¦«4¥H‡3˜ÂkâˆLAߺì1jI²E;ôþ!À·Â±2 +endstream endobj 1452 0 obj <> endobj 1453 0 obj <> endobj 1454 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1455 0 obj <>stream +hÞÔWÛŽÜD}÷WÔc›àN_ìnû1$ +í ´áÁñôÎÍxÛ“Í~üIõÍc› ŠP„VZ{ìîSÕU§N•9l’Ç__qØ ‰’ Y y©@2èMr“|µJ?çÀau“p ÿðÂKM¥-eVû„! +ey%aÕà ã9¬î’kòìâ9´„§Ÿ>z/û”—T’æ¯÷û¶ÛÀ7Ýhú›º1鯫oÑ’ô– +*!㔫VÏ’ ­™ÆßÉôÏ}šqMi.DZíÌà°.V‰T+<‘¢…*dUU@ó’±ÜŸÍ×½ÄS‘/^b@ìé^â§pT.à˼Œg·Ž‰ÉEQx_ÔÃi¦¨&?Þ®k{'ÈhÖþZ{­H—Ò‚„eß…E}³ ‹„¿2^àQ¥ö‡í#ë +÷¿Ä[ÄêþÍúØŒðSªKʉ C°wè‚1LŒ ³±BéìÙíà²Ý ]mŽ)G2piƒµ)-ßÞ¤BâC³¦±0CmiájK¡ Äâ:I ¾WZÍä%Ò±™ôà.!ksƒ5:1l[³[›5ôN6ðÚŒéê·„ËSp˜Šúx}—rŽD6¦ƒq‹>‡Í¨!<ÇçV[ã‘ïà®ÉÜVÜûTã¾cŠÿ°ö_Ÿ¥ ˶ø‡¤Á™(m×ìŽ=wŽÑ1òXxy¬¨æÞ f!X ÅÝÕ­iÚz÷½?ù$§X«³L1Úm„º[ƒ_ðªÁ„ /ºõ9GÖTWÅ ›Ç#ñÀ½y<+BC4P–ðЙ |Ò®üŽç)6©Ôªÿëmš¡ÕûÛ†øpãBb‘}RÕúü|Ôù⣊{Öfhl¯Ø}Ú×â­éMjw’/SlcàHPie¶DæØ»$­°}Ø=Êx*ÑAl +uA2áŽD®"1/Y.Þº“Ø@Z[ÀÚâ9§ò=ÖrÍ©ŠÆfÉÿ3€Å÷ö;×…í|s¿Ëèwéyâ¶Þ˜/Ÿõ8 téÜÖjQT•6æûdJóX2Ó‡ãj¬1†~\öþ…ª à<ÔËÔz”@)f"àP+lés~æñˆn>!>ƒõí¦mê±=t¶äÛ!ò¼‚ÐjÁòIE| pùáÖî­w®–šº³•ÐC·»ÇGÊP qh°: §òu¥è€ÆA3u³õ~!fgÆp°e°oK*Nz¢O|¸ºïÆú­[½Z‰¨È7»Ø;¾`Î|ú­.c¶\Ft"Uä¡œáãº_ßz(Ã$ÙÑÙAÈJbsèPõ\¶­û/¢j©¨BˆÊ‡‘²ÂGñštvä!û0NÞ +ªX™ÏTŽ¼J—$œó$Ï‹9Oôœ71àdsÜ›n–î0«?RÁg¢«÷f¡oèÅÌ…¨ÚNÙÒ¬ÊK}åéc<OɇÆv‘`ùÝå#±Õ©2Oþ.U÷y@)^8¹ˆ„Ì«y$NÓ€«‚{Ï+Åb•´(ÞS'‡‡ +e‘Ì#|!EŨÌ'ùJ^tøxýÊrãC![(TàÈC~Q§‚aùMØÎÖ’ôïÑ)…Í„ÏÂ÷‹»Œ}Í}ªØ¡?U¨Ï:º¤å\aø)p/žürqyÆÉ¥ÅË8¬Ã0Ö£±”÷óËÒŒ³‰ˆËcª ¦D™Ÿ›+šæ÷cÛ#§ÜDáz3¶#=G(&gC=,–·ø97Í +ª:)æ‰qÞ° “R¦™ÛLŠ“éI3ÌøTÑäH#ùñE*)roúϪ™8ü-ÀïÇ·” +endstream endobj 1456 0 obj <> endobj 1457 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1458 0 obj <>stream +hÞÔXÛrÛ6}×WàL"$ûæØNêÆ=›<$}`(ÊbG"U‘ªãOê_vq£H*nåf2Ú3&$‹Ý³gÏ.ÍÐÝäå›9CwÍD Ñ…±B‚¢]1YN^¥“—¯b(]NG~áÂ∎"A å(ÝL(X!4LJsXP¢ô~ò_\¾F’Äèüåùóçèv°˜\ßí²Í¦¬îÐUÕ»e–Á¯éOp’°'I"Д¦$J/&S0¨ÉíJLØSŽK0ƒfõ¾-«¢1¶.Ó‰ ˆG©á"ID˜ÒÐF¦8‰”¿!î"anBĉA!Ap3Œ}ðÚ3ÞùÈ¥õñ:kZL‰ð/ÛE¦W·ÅÂ.P©¯ ®"±{ìg÷Ð._¹‡¸½R&!V¡¸þÀÝ—J‡F ì¿…%ØÚÕöÎbŸ·è}Å„á™lÜyuåƒÌ¬¨›sy´ÃpŒöŸˆ%I0Iˆ“)§Ì.% +Q!=ýòŸ?úÿ5Þ}Ô¹a:sÔçNt,dŽ…ß×Õ³õÍÊ; «.Ä6`@ÆÍŠ¦€âšo\À—Å‚øÊtµqS[ +åoÄT‘ê á¥ÒQRàèŠ:Þí7EÕ6NK”5äæD£$„J½ WÙ¦Òß‚É: HYÇþÐ#'<‚0æÛ"/—eÑ v•B¡u€&ø!` \¬š0ÉPöÌF^#ku‡ ïWe¾Ò¦Ð}¹+Ð ,‘$. ‡ Il!1+ +ˆŠµ·›‰+Õ’E±¼7žfëwE;_•Åzq@:B\Z(ʪjîp{e÷0@¨¡1?mk°Ö zéã°ñs‹.|!–ðxÖ®PY™‡ë#ªŠ5ÆK»Wh9>@'½^Y JWeƒvVò,ëm[֘ʪʳʖÇô€×Í$z$øsöM±@›Ю`k]åà&8a¸$Ú-.ü•ˆe–ËÛÔìŸBLi«ë#®öè+ +ûšê\ +vÏSSR/´=è*‚%¢VÏã¼® æàÛ*Û={††u‘˜KqäÂV74ÃV¸|9vƒÉèØ ÆH²ïæÆÃ?ºñ)`P[¡ýÚr€?›Ï0eA•»z/+¿/b«'~¤ÎÉ€€ºNc9 +Sy÷­!sì{úà n˜E¼ç´;]ö´[Иµåu½[”UÖ– »q¯ x™^×y¦¥¥AË€ÇZ>A¹ìi³XLž Ø ŸDù:¶šfUàkj=_eÛa“°HÐÄS¨›;9 ïÆe3'f.ÖŠcˆØ –žî²GÝrN•~<»½2«—à°;Ž9ˆ›@Ô¼Õ²\ŒŽ€Eþû#Ôøˆc­÷݆ª!¸›]AнÄ×Õú¡Swß!ÂŽ^7°‹±#°4„³ÏʃÌÓo”{4a××Oüù +¾º<&øcÑ;Ò<Îyr¤y~Ñfõ%}Ø#كׇHÈSeÅê›4Ïd|Œ/}ê€'á‘î™f=*0XD ³3×} u¬óëǶdD$û„uúǪÈ5û`dý}Ûë@°<†!ß~´(u4U‚’–°Õ„Cñ‰ ; üàÄqoÀ{(ˆCUCQ¯÷ÅÃi( ©qýÞÕ$á‘»‹gWïÞŒfá°›w¸mª£ÍrPÏøöìâȈNï•ä+¯®oÎßÙ‘$<ÙŽÁÖ`„çéìj,/D&òi½¾¹¾¾ùp{õî‰.éf¦M`í]Ý|¸š½ROÄéüfvyd:ש¡ +ÐB~dKñd ®®¯÷É¢ÿÏ°µôÕ»1h”p5ÆÌʦqôìM7¼Bþ%À%ŽJ© +endstream endobj 1459 0 obj <> endobj 1460 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1461 0 obj <>stream +hÞÔWÛrÛ6}×Wì#ØT.$<¦qÒ¦Óv2±šË$}`DÈbÇ"U’ŠãOê_vqáE²8Ó´ŽgLˆörv÷ì‚ÃÅâá÷ç.º…’3 ©V ´v±Y|·Z<|ÊÃj³àþáƒëœJ¹d” Xí ¥P– «5.OauµxKΞ<…Œjxüðñƒð¼M¸¦’4m±ÛUõ<«{ÛnŠµM~[ýˆšdДQ KN¹Ê`u¶X¢@§fVrýªM–<§‚T(^4‡¾ªmçe=Y-” ¹BÍP!1@SÍX|óîúè1éÑGÄmþ#:<Âa<ðcªßab4QdÁÄŸŠ®‡d©hN~Ý—…[ ÒÛ2, rOCê„f$nû9nj×Û¸I„'ãº*•p?D|™;ïÓÜàùç¸DYm¾”‡u/“\SNlÙE}M•a`È»äÈ÷£tÉ„ÏBtÄãE?Â~&‘/;[÷ݱ9ˆ .‚Þ¯ÁeÒQJ¢7³‡13.µ6"§z–”.ý\Zö ì/±sBÑ „@¤æy4Å^îè¥ëI]”V¾跰nš¶¬ê¢· Ï°1ÐèÉݵˆÅBUËÒÏâYÑ¢Stq†îIξ%[‹¶a=ÖP´ˆ9öuR$8|ääš ì±0Ý«„s|Øÿµ¤.V˜¤Z`nœP¸ª÷:ؘ 6R¡Ç ¹/ËHš›yZy™Ki¨6·Î4³€GZpAÐdrÌ‚O§•y´µ7ñS$v KŠŸ¦È¬ÏOô€„—#ŒMÀ²˜SÅIz,EJØߣ +‰õåTáòê.ºð§ClÔPn)3ê„!H}ؽ>6î&7|냘¡ŠÀ°ƒŽÑÖ/PöæßRö–t½Ý;ö{}B~.Ræ6•Jéüë¨|ó9•Ÿ¢[¡ô× Û!°CAt;«ÌQÀDÅÙq¤&²Î†6Í‚AnŽ:?!çYˆpTؽÇ‹|ã‰é:°4£Ùmè'²öLUí%}ôâ %›á¡T]_CYµvíFƒ.á)Îcô•¥DÉ4ÙÌ»P˜.VÇù¾¢€$'á¥IÂrlj±G\ÈR£Ýíã4'éú‘O`¸œ¦r.k KÛÙˆÒM(Œ'ÐÏu1žcFhgãî>嫪ì·ww1žbÉŠ mïÀ¾IÇA]u§Êw³a~±×ó1OƼzv¶úá$GÆaè—‘# ˜H®NÜÈiOTá¥AÎ4É/Q¥£*¡ÓSU®?µö¢ôA:•Êo›o%‹÷¼U5õåõ4 ÆÁVSeNÛéŠëalP˜a1ŠLSm¼yü%ÀĘóÍ +endstream endobj 1462 0 obj <> endobj 1463 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1464 0 obj <>stream +hÞÔVÛnÛF}çW ò´t¬õ^È%‰ ‰/½%aѱ +0Xi%±‘H¤* ý¢þeg¹KÙò%u8E!@ gçÌœ¹¬8L¼½û&µ§$D,† V TÚ{ïRotìq ?øàqD¥€H2ʤs¡Ê‚DB:DñÒ•wI ¤1ìïí¿~ Ç•Ïc*I9©²ù8£j8uFÂ>1W©„ù!œ26éQ‚çQD_Uiߌ–Ã>ùQL9ÑÎeíðÊÂaeZ®˜![ulÁ]¶ÿž$~/¦Iz‚q+†à+ª@÷|úã?7ýÿ:ßü4µ“å¦r¬«Üt!w]ø²¡¾Íà$Ÿ`»šAl|ŽÍXÉ®5§4ýö‡/$*õˆv“éf+íl)Ü(_Y6h¨"ukÑ´}™,™Iô×E“]ûéïÞ^š +{<¡‰²sjã"TTÆ…™ÏvO]’¼h`¤}EÆ«þBólöQ7ýi®g£³Õ£f: –fÊ03&Ì ýמm1”…4`-(¾¥,dÊb¬òQƒãF¦vÅm"”T„‰µfÆ’ |ëîAŒ·¹ÍÜù}‹ËTâ N–s]4µ[ .œhA¥ ],­ÈÔBÈ›ºx݆5mwmƒk"#-7ã\׶å lÞt6ç¶E3Åâ†ê®c¡.æ.aI“ØæÜJ˜vˆÝ­”+»‰mÝÛBé‘[ü8¼Îæ‹™ÞÊq‹Æ³ Òy“&qt:Õ0ö%^ ¤ôñk6+}nb^aã­e´W^D®ý*Z0(‹ÙêéÆ–ãwGTHyr‹([”Dnˆ‚eMÐÍêrŽ,‹a“—E#ѱò'"ŽìÑY† 4%b;*GC^XøžˆiÄo]¤[÷¨pµÊ ¶­…n(¤Ó¼6ib§cšøe³Då"³ã£Ï˜l’”[I®„û€™™4o¡À0›Í~ˆ>Opƒ|qkà"ôÎœÜ›ä º7ÉÌ"™‘¬ œ[Ý쿃éñjßB}Iר_è+ Íz¡wê¶é¡ÝpVBù)n²ƒ¬É`‰Z'|ø³u‘î¸CˆíUº~³ýnXš ð¯ÀpšU°³3,Ëê|ÔùâMw »bö‹9H)5ÍÌîLj îáÖîB­i‡~“UÍ€¼š¯¯ðWÿNHû?¢åþ¯W'‡ýNg}ÏâŸÞgk]!ÂñÞÏòv÷&쾑R´¨Î/Ùg¨›j´\` <à¨fìÕc.î@u<~âü’oCÈÕâkÛvÐõÿ’œã»m@Ä.¸Nêúè +ñ)ÏÚ"_¥§'ŸSéqe.X= bÚgà·A#×O4½xÈô‘?Ìç#õJ¶Õz \O¬ÿŽàWÏ›´ïÊ¿˜™±'Ø7õÿ·°Bÿ`y  +endstream endobj 1465 0 obj <> endobj 1466 0 obj <>/Border[0 0 0]/Rect[63 537.24 97.62 550.74]/Subtype/Link/Type/Annot>> endobj 1467 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1468 0 obj <>stream +hÞÔWMãD½çWÔÑÖ’÷‡Ûn­8ÀÎ  °Ú8ìpð&ŒQâŒb‡aü +øüKªºÛŽíÌ°»„Ðjcgì®®~õÞ« +‡Íì⋇M3Ó²$•k ìl=û¼˜]\sàP¬g\@‚ÿðÂóŒI™LX" ØÍŒÂe$K¼I¸‚âaö6º¼º†”åðêâÕ‹ðúóœÉh¿9”»]Uoà˺µ‡u¹´ñÅW¸“ô;¥LÂœ3®S(.gs HÛ,ý<…þáÏyÆDTax³?¶Um몘iÁ2'Ò,ÕÀ„4ÆSy’(6w\÷OÌ„=D@èéâ{8ŒÁ>TywvJLô)ŠÔ§xS6-ÄsͲè»ûUIw"jíÊß@EWÕ1K£ðÚ×á¥Ãò.¼$ü5á)UjA_Dø£¡Ó«Ìàú×x‹±{ÿdu\¶ð}œåŒG6„lÂ~û:l†…qP%„µ:ëÀVj +öÀ î–3™¹H¸¿M!ÖLGÝõÃ/ÿù«ÿßàýWªÌ§Ê%]ídÏBXøï¦úÙv oª Ò•tØÆÉØÀÛXÔ¦$¾ý ‰´+Ö 3h+N[ ¥÷š¢Þ 3Ú+nÐXt†ž£Nf“g6IwHÀ MŒ} ++»~XÜÛeUn¿±íâÿZÙíêª^ÝF·ñËé’ðåÌ-gŒÅÅOô@0•à¦ø  Übˆã¡†äå¯Á©:O̽'æä©É™qžà´£)¿h±Ý· îÝí䣴FÖ¨Î@¹?—[ ‡àlð@†‡é‘áA ä!Ÿ4Äæ,W©§CÒã-n¾-£$¤‡öäc¤Û4‚¦-[»³uË ¸³à×… °ÊâÃßp 3 Uûû–bm‡KdOb·¤Ú×åÊz˲†w>¥¹LštÚ(ò°›È=‚ÇÆ®`_oñci¡ªnëjkcž i\Ç’nö1ù¤G”+–=™u"ŠÛ<Ömù Æ[ǘH†‹ç +{H`^ѯx)[ÌÊwX@hË'*–2žücû{‚'—Sx¸ˆæ·å,"âØï}×DNJÃrR1-€¥Ø7OíïD^“ÑãTñ~Àû”è¶'šA™¬{;t˜›«ë 禬7ÇrcÑBÖ±ÈXãÇÁÖÓ!+dò3Üœ†±E±%à}Ws Eg„²ù=D>›ATÞÅË£cŒÔô)Sät>X=•6®%‹ÌPÍ­ã¶ÅÿU{çq‘ë‘õyâ)ÃáúöÜ]r'ŠŽ*BùjPüñ±QÇé4$:äy@ì0fÈÏÈÓKáì§ÏÔו•`§CvÎssí¢qžF€IL`¨iLÀ+O²dÀuãa¾Õ>ÄhqŠHŽb…á. +wqqæ>q`à™Ž)£°Þ+¸‰Qú™þ‘ÄLYÖDÁIIp´’ç²MFÐ1ý¼ƒ BÖЗKÛ4ëã–ù…][‘žÛ(4wGÃ&ÉÑõ¿À¡^ÆÜ,¬#äDL0ìi$įÍD6Ãî£pþv7ÁêÐ~m $€ÔISößèó=Og©æ’‰ôDÔ…3^÷Þ3ÓÍí +u Z~R µÈ2låCñÜF~bäÙ€ÞöÙèN2n,ÌLý)ÞFËý±ÆgKŸem†º¹Ç5Bàèò¨áð€ìÄŸL1ß ®”!!7ªH™†„Ü&”M;žuBwÓ€}j‚á¯<7D73­+œ3ÈêãîþªÚ¯§ ˧w$D> endobj 1470 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1471 0 obj <>stream +hÞÔXÙnÛF}×WÌ#™D“Ù9|L'há&†Í¶’¢`¤±ÌB"]’ª­Oê_öÎÂM”'EQ~ Åå®çžsiŠ6‹ço®(Ú4 ÅQB4Z!NPm׋ï²Åó×Q”]/(Cþà@u‚9C '˜0”í¬`"RŽ²œ*Pv·ø½:{$Öèåó—OŸ¢‹:¦ó¨ÚÔùnW”ô}Ùšú:_™ø×ìðĽ'‰9ZRL•DÙ«Å Z7+ÆÓ¿Ôñ’&˜E˜A—Õ¾-JÓ8[gÙBŠòQX*„OÓa¡ >3Åp¢ºû2fbr*b ÂÝMȸ¯Gêª"¸)t—¼Œõ12éc<Ï›ÅK…“è§ÛunÏXÔšµ?A…=¦Qc…Ç~ Õ«›ðóGB%äʳ?mú"Iáý 8[uåï¬÷«ý'ÓÈ“MðW•ÁtÆÕŠØb3¦’®ÚBWû/DÓ4^j,¢tÉõ§Å +«¡îøøÃþèÿ×xÿÓöŽ'˜ÚΑ®w¼G! (üwC}±Ý¢ËbpµƒØÆÀØ KÓNnñögÌ8\4kÜMf˜­„¹ÙRÀ(s²á8ÕžoÜ<®“m A›)ñI®ÍõÝÕ¶jÏó˜¦×!¦ù먞²ËÀcÖ¨H€¸¬UW²À_õŽ_´e—å(X‘Þ +D%¥/;éãˆÎ_¼?»Œ³ßo|h éè‘9ûjÚ¼5;S¶e7ù÷‚}¨&“ûôs>NSy èý ¢Rÿ±/j³F×1Œ*—%XMlhk#ª‘ÉW7¨Ê¢¼\£U^¢Oíx߆°d Ö‰#ëž=èÀÕ»ª6¨½n“€‘2^Zb«Jÿse,ŠáÆq¥SLé¬ÐWçﲫ ­z&Ç•öï”-)³Æ—3XÛ‡²Íï݃Yƺ Rå‰ßžp$ ‘;ñ ]A¢”xmbu`<˜úcäÛÂX¢%V6^ÁÓ«ª}XÁã7yý¤ËZ ýg©Ï éSúm­@D;\*z›ï‚röq§'|ŒËèc^€Ns ÷ÍÞV¬™ÆbÁ0ç>,‘:¥€¨ "͸#‹CŠX’4àr`@<ºº5«âº€1ka GØ,´á&¶3 xAw7« –‰ìJf£KúWbÛ +­jMw-~§?Á/BJ¬Dè(3r‰…–ö"–Tª˜G[['qr¸°±ºú0ј”¡Ôý® ¤qMêv? –sÂpÌ;V×èÖC5Å>4©Œð4š¥w1’H9ÌChLjg£Ðšƥí¥ÏöJ8ÀôÙè”’Q69j€÷Œm—FÑW’1¬åL¦áŒwk0héÆ”°rÀ®YIÍû:lLµ3­ÝôÕ!N­`co>W™öËa0nMZìl˜õÜÅ@$ŠíÄö" ®Û¼öWs»l·fë-S…Izbß%ºØvïå÷tÉêö3wå0¹RÕ] ÎÞ@?“¥¢û_F0ì˵Ù*໺6P‰r³51¼O{$<¼`PÁ°ÒàÝWË¥YµÓþŽƒB¼©£_è·,)ûjÝí•LèùêÍ>I“Gùàó¯—ûìw‹ýñ0 Ãz²÷Œª°aÎ%°8ßyXÊÔLxt§€÷¡Ä@ ¡´úË‚¨}uøáTÄ>ûRzê»>ÿ`Ï{Ÿ +endstream endobj 1472 0 obj <> endobj 1473 0 obj <>/Border[0 0 0]/Rect[63 437.28 103.62 450.78]/Subtype/Link/Type/Annot>> endobj 1474 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1475 0 obj <>stream +hÞÔWÛnÛF}×WÌã‰Ö{ã’û˜&vÑ›mQ8}`¤•ÌB"‘ªíïH¢ÙÙ )’6§ES†Å•¸;—3g.Ëa»8ûöšÃ¶]h ËAå$ƒƒ]lß‹³ ŠÍ‚ `ø‡žgT +È$£L@±_0”B™2Š.WPÜ-nÈ›ó Hi¯Ï^¿xo Ï©$ÍöPî÷U½…ïêÎ6åÊ&¿ߣ&4¥TÂ’S®S(Þ,–(ЩY…•<‰þù,yF©P \5Ç®ªmëe -h¦Ñ#MS THc P•3¦‚oÞ]ÿ=¦BM^" nƒô/ÑáãA0€/UÞûî ƒ‰" &^–mÉRÓŒüøa]º• ]‡TîiHДÄm?ÄM‡ÕmÜ$“ñ]•Z¸/B†¹ó^eÏ¿Å%Ê:4áÍú¸êà§$Ë)'6Šl£¾¦ŽÊ00*æ°Bg=ØJÍÁþ¸1É2§Š˜¥`<,SH4Õ >ÿñŸoýÿ +¾ºØÉŒr9ÖÇN,ä‘…ÿ®©¯v;¸ª¶HW—‡]‘Œ-\ÙÖbnJÇ·ß!ñG»¦}bÆÜÊ„Ï-åµ7êLêŒçeæ¼dÎArýPwå}Rü¶8+ +ŽjtÈS·p"RM¥r"\~ú2uCªºƒµM4ÙÜ]ïšîÊ®ºw$ÀJªviÁ\’¿Yø½^Ç…*UÌ+Á·”¥L;™ä~75„Sɼ/¸‹ù/݆¥¤ÇR;Ò0Øõ\U_OÕýí×ó곪Þ%AÌSLI3æbì)¢C_aÓ‘X¬¶Ç½­»66šh–>A¥Lƒ ʤ±1Ÿ;MxØÁý-D«úþ„I§ÒS΅椨‘Hés×ìªÚT¶…»bJº[ëVŠ‘UÓÖU]v¡çq¬ÂùH”î-àAR ÍÜé +[Ûìmç2K`ò=$Æ g¢S="y@$÷= +·„ÜYF¿†¼évξ±c0•žz{0,?Ħ w®#˜®C ®=G³Ò^6f`:Šd4£øåòüzb…¤z„ˆéñ3¶Cì\,)U2í#Ä—kð ŒC`I©Qó(ûþž{¹Í‡®jêre½†UYCÈœ:P¢_²GQ:€÷Þ±µkhêÝ~¬,TumSíl‚¬pq½HpÂR¤é™’ò‘9r(ôqØ:@ëK!ÊÚ$Î <ˆãÙ'Žë¤tFCùãæy5 ¦ÊØçü30¦&9 @#D_Bkí€OªÒÙxÇO¼¼!¯“¥ÂŽ œ`\Wùcì›ÒàX©Õ¨öéÒ÷јʤ{¯HÜ“I˜˜¨ˆ{wëÔ2`¡¢w}mR&ëÅyèòüâÌ벬·Çrk±ámD9C[䶞´5Œò\žp¥•ÁqñÌ|DóÈñç„ä4ļÑ|Ÿd4'Ç?pPÅßÞfÌú<í}I¾¸‘ÎóÝâÿ]ÕÝËñg4 ž®-6ZÔÒ…Ú1±;§Æœ”Š˜ëNÓDøRrš«Qz$Ÿ×ë'äbL&xÌ3q(` Fh¨¥ËplŒSƱXæÝðÏ; +IÒ& +ÃTìŽ}ÚÕŽ³,CˆäãJÈ&†O*ÔL3Òvíqµ²m»9îè´!ÊÀ4L¿r·©¨Îãô3šn†`íÎI×·„)sÇ=A²l܆‹Bg…S©"]ûD}Q'z~I…žé7‰ïx-á.n’ŠSØÍŠð™aQ(¼¥*ÆgãbÀ +ÇÅÁÿpZ¼ÁaàXãe çfÒ`’³ß> endobj 1477 0 obj <>/Border[0 0 0]/Rect[220.32 101.22 288.84 114.72]/Subtype/Link/Type/Annot>> endobj 1478 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1479 0 obj <>stream +hÞÔXÛŽãÆ}×WôcÓ^õô•—GgwÖI°Y;J c6¸RKØ"’ÊŽòñOø/SÕŠ”fì QY]—S§N· »ÅÍ×w‚ìúEªHÆs¢ó”(N:»Ø.~·ZܼDÕv!$áð"Ϙ’$SœqIVû+ŒëB‘Õ.¸ÐdõyqOßܾ%†åäõÍë/¿$ßv‰È™¢í®+÷ûªÙ‘?4ƒí¶åÚ&]ýVR~%ÃY +&RCVoK0ˆË¬ý•:›þ®K–"c’V`†|hCÕØÞÙº]-Œ. ž”™”0©Š¢ LçœkY*Y–Æß!d&õìwÈ&D¹!â1…ËBAàGÇàÑ39ú(÷ñ]Ù$Y¦,£>lJ¼’t°A*ü,h“0CÃc +uë‡ðôŸ\ˆU¥¿HåoJ _g¼ÿ-\‚­®õ¿lŽëü%Ér&¨ &û°^Û„Å 2.W“-ešÅlk}™íŸˆ(Šd™3M‹¥äÂ_’¤,¥„ÄÏ—üÏýÿ5>~ÅÚ©Œ ¬µS# +E@á×Õ¯êš|¨vWlÄ!Æž|°½…æTˆ·&RÁM»a±3CoeÒõV +Œò3d¦Y:!‡Ë £ä ½;5CùH’Õß7«•ôï¬H}£âÚ0)Sm`ƒ:¢º§»ý|Û$)ÝÜ §ÚöéÇ$PQôC±"÷®¸+´$ ðœ‹`‹;[Δ7â=‰\6 ÄäEÄa]F¾xc·H`¤$=ZJ„¼±D"?¬ªžtžâ^Ú«Î9 þ@­øHA.5vCÊfCÖeC>Yrìáû¾E÷gZ›3jFW„±³dx€·Úf «5ðņ°Œ+gÆL× ¥X}ÿîön¿b©Œ:K•³Ì8véS ì‡r°{Û ÌvRLž'«ü ‹n 5Àà×E¿ è¾â¡†Ž<È‘ÕÁݪBÈ©·.™æE†qÃSoK|Jíû#~ìýü9;,›f&¾¼ ¯|6r&³Lüªu›ãþo¸à¡E^§Íp¹0L6‘‹g.`åé˜öø©¶_@fHh‚àf¹Pjô uÐÇÃ<û‚)žÉgÖˆJn~Óz§ŸYÏa›wŠœYëéQ¬œQtO¿I¢@’쎼þ€ždJï‡.tÀ)çý +=Å9”yÖPŽ†aîªLŽÝÀç´tŸ†ŽžC§Ãrò2àŸÑ1Áßm/s$” et¤B†9´}5TÀÍ–ÄìDtý€ì  èRNm‰Ëùµp#›È³H9¢¢ÏGG€ Êš -øò‘þ B¤¶k?&¯%U!×B3$Ÿ³»*šƒEœ9ÇZ`¥³ÛDf [lÿ:‹Ì„´ä²@ꩇÞæœc²@p<˜ ¤†2r[a8À€‘ïlC6X)Ô§ÞEºpê¢'lÈè>É`ÎøWÕ¡Nõ xR@àBÛªC18+í2˜>'“y"þ…úNI#q‹P]tF£3 í‡ôk¸1)@Ù è4=—VM[|£®[û3 rMǜш“Øü:8ú&õ|€•”—"?Ö^g¡HýC{¬7DƒÊ ¬¥†:í?ÙP±n›Þ®Æ€ŒúJ!èËfDà 7¼áÖ#½$Cù)‘0$®\+ÔmûÃñ‡f€”38C”ÌçøÈl°Ò{b˾ªOIQ¸ž¾¨¸Ääh%¦pRqätàsäòiS†OEbõøi§E¨ùÝÁ®«m…äbLn¨×Æ6œ†¼áLÛ˜ s¦j²Òn‰_=Žü@N@ÞWHÉPaN rH˜ Q-U_A`4ÅγmÊ󣀊ïÎ "#D`/“‚Ós +@=õ8~8伟scžÀ…Šû¨ãÎ6 ]3¨PŠ#Êú´ƒ=Óζ{; ¨E’Žåø™S˜ <{NW˜H/WÖm×ÙþÐ6›!SºD ¡Ot4Õ]·m·©ôæP‚äÓØ­¯˜apöÇõ)/ôJ®¯ÔÙã,¯,5Sav.‡Œj‚œ½`&*ÆUŠ…^6Lò'5¦6’¤/Ð ˆüpw ZaÛ Úÿ,‚%f!¯%æALWDlä ?&~p`~y<—{KYZúFàLÌ¥³ õÑbfñ½Cg%`'ÃiÕû+/X*Í|&>ŸïÙ8’Æçå¬ +â¬Ï'ÁŸž·("jâ®Ä —ƲíÚ½ ¥öqg,ÕO´UØ8 ªõÃÂ7öÎ$aøçg 00²gF#' +¿=&K7MCsÀhÍÍ“':“§ëØÍyŸ`kxΗaÁCÙù»e‚œ]ÛšÄ=/. +ò'46FÿHÊÇÊÍå,ÌåÓìN;jgo„ô¹÷Ô m– "I€˜4;ǓЖŠºñºOÐñ xþ„g" MLU·½3.çØ Sö,˜”WPàOöïÒ˜ +?ó¸;0Òy¾ëaÓëv¼"…¤ßñž›J–¤Ž…jçtuI铦M[·»™Ÿë͹-Ò‰Q=¶ozFÄ +¬r0 ¢/¥ë‡`6îƒ?{ÑxˆÄjnN"gçå>×gpuûú÷ï¿y÷Í×ß_–¢¸êT7q/óFÕ5Ç|ÁŒ e~Ó‚b\°¸\0€S– +ó G¤$v{ª¶~y +Ð6µ=Še!÷ ãn¿œÈb·1!o±¯sÔˆ9JÿÔ B<Ì#¯jœ¾4ø®qû <ÎØ#J ´¸GÊOPNÄ0Kå)E]Ñê ÓûL^•íKþí¡œaõc<Ÿ’p_Á.“+øÏQ*±ÔU&žS‘,óg­à&Ôn1Å}ŸÏQt89ëèì’€ßݾ½Á*¼n9–;K>ÀþZfºÿ¹è.Øld×3ƒùc—”e…“k“}Y²ÙSg‡#– k玨{r5ŸÅ ié©)Ù¢|YÛ¾ßkç&äþ? ‰ä¹ì +endstream endobj 1480 0 obj <> endobj 1481 0 obj <>/Border[0 0 0]/Rect[145.02 405.24 179.28 418.74]/Subtype/Link/Type/Annot>> endobj 1482 0 obj <> endobj 1483 0 obj <> endobj 1484 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1485 0 obj <>stream +hÞÔXÛrÛF}çWÌã 1ÇsÌ£W–²ÙÕÆ. »©-'0RX“  +WÖw$?‘¿ÜîHËQmn•r +ƒîéÓ}N÷XÍâåW·‚lÚ…UÄñ”èÔÅIS.Ö‹¿d‹—W‚’­Bÿà&RÇ”$NqÆ%Év V×^‘¬€.4ÉïèëË+bXJ.^^|ù%yÛ$"eŠî7M¾ÛUõ†|]we³Î‹2ù>ûxRÑ“aŠ,Öìõb ÑMŸÔÑô·M²ŽIZr³?tU]¶ÁÖe¶°’9 Yf,aRyï Ó)ç:Æ /!b&õì%‚ Tx pø‚'ðR§Cì¸19nQš¸Åë¼íH²´ÌÑÞ¯r|’´+WñTx÷´N˜¡ý²ô‹šâ®_$ã ¡*+ñ‡Tñ +£×ÎÃ÷oál5ûøfu(:ò¯Ä¥Lв7Ùöþöuï  âˆµ”Ö `k} +öODxŸ,S¦©_J.â£!‰e–2ÜŸû×þy?1wÊ1™ãCîÔX…¢¯Âßv«¯¶[rSm \‘‡]" [rS¶%pSa½ý7‘ +þX®Ø@Ìž[NnY”s­Q̧QnÂ,·N3wÎFÊc«rý%&Ö»‚k‘€DÑ»DµÞo÷›Ç¹ÄÅ Mkê…¶p½ˆõµD&E‰iINz+&Z½Áçãnhvyñ×oÞ\¿ùêßIöŸ£K{Ì·£V¥¤¤íò®Ü•uÇâ7=K<,“Æôn`ùícÝåÃÊ,“q)¬´Q›ð¢2)ˆ­Å¨ÐOæw´ª;²*K¯²¸‹Ð|Gc11x p”¶×°¼Ø× a¬¿Ë›/†èmô—ÒǨ71¨w p /lã í㽇Ü-è®Ôbý.™E>KQißiŽè½£¯ Ÿ(СÍkç›UƒÜ+7§½ Nº1æyj.àOwLc ëz{_Õº +Åp´Fê|W’u"Ké>ìDxæäÔèЛ éîJHF[mjRÕñWÞåïó¶L„…fP¾Ž¨Àô¼¤ÐÖ"="0©˜0"ƒ²M%…†â°çÆ>À_ñÞ~†Z Fù€C¯%l1K„´IRš‰äôCKšØyÉRETÁ=§‹ÐLë#_*7¯.þ~;Ë…bS¢ø‘(â”(w?5cAŠs6þÿ.HÕ’ý}Wíë|Kòz¼-eÊRää|@³Û>E^“÷%9´åŠìëí#\ŠÓYWÛ!É$Mz²«8M`3–ÑÞU‚~ißàÒ¢ÄÁl|Z'0’…E%Kéá¾KàoyܤÀ»IìbìÁ …PIþÒª1dp +põ,„Í@(Qƒšrâ4Û ‘‡ Gä_¶ ¥iDÂÊ 8¥¡àÆF¢ Ê‚æÀ:I”F™ a e2´Â $aºå~*%~Ø˜,5t®r(_Ý5HöãÆûl__^½D´®ózsÈ7%tÀ Ú\š²>q ¡ÃÍ¡d±ÂàC‡ú%Æ™Œg²€ýz=¦k‰€RwyU‡5M™ˆˆŸ:ºyóíiû´¡>~åÝ'¸1W7˜À' +õY´Õ …¡žÄÐoâÑÆÆ£M/°I`à ØŽ^È*(˜Ce +Dãã“DPZà´£¬X '}ãðÔôaäظ ƒœ¸ÏPL9PŸÁpìê?bØh¦õŒíÁœ‡l>nï$O¤”Ü#É„O{ “ Œ™¤÷(nvÐP¨Ù…£)ã¯ÉŠ%ßÝo¡kí#«ï¨Êœ9÷‰.†‚o ƒ¡ñA›­ÞƒÜß•M‰Eé U¡Ï3…g¸4dÃÄaíi,`‡ 1J«©fq ¢…-Ci€&¾×IùòcˆëX$½¹à:Õ †ˆ'}kìÖrâ{¢CVÇ5Áàçóªáì¯Ïb1£¬¥óÜJó˜[Ϭ<Šáä|ÝUÇÙ£)»Cd¬‰Gêö„ž)óçß±r6¨qg±5’jMÚCQ”m»>lçcú'Ž+ÒÁùÈb®¦È '‡½‹•%äË }íÓ3™Ôþ×;ŸüÜD4ÌRžÍ\óÓ €=œNÆDzçS„çLÉÔ•&/>´¿î!e‡³4“pViN'›0nz8yJ{©‚#ëÄû¸ã°áˆŽ;*÷öÌójÛ¡Ó¼éNÜjf¬UçnawÆÿR¯8:ÒCýûz±–÷çëçN•ðê—9­»ëðcLn{âÛ°Ô:sî;eÒÅõÌ÷iY*:ÛÉ6Ù#þWˆ¥íÏY<ƒ¬þO€q­×x +endstream endobj 1486 0 obj <> endobj 1487 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1488 0 obj <>stream +hÞÔXÛ’Ô6}Ÿ¯Px²£µ$_ƤòËæ +) + b(Êx4»ÎÎØ[¶‡eIåƒò—9-ɞ˲›ä!I +[cµ[}úrºd§“£oŸKvÚMÍÒpÆ¢YÂtÈZ3YNæ“£o$“,_N¤b!þâ&g©ÐŠ¥:¡bùzB‹£L³¼Ä"”Ë/'o‚G'ß°XÌØñÑñ—_²§-—3¡ƒæ´-Öëª>eß×½i—EiøÛüœ¤ÝI±Ðl*…Lb–?šL¡Ž)ÝJoUÿÜò©L… +*¨aÏšM_Õ¦³ºNòIeÀ“ˆ8aBé,˘ˆfa9d‰i2ì²PÑÞ>MD¼¸X´RAonÁ*ºgAÍEx±'^¨-ϼr÷PÆÀªE?”v#‚¥ÞŠ%tµÛYlÊž½äéLÈÀx•?¯©ýaˆŒõUHÎV*IoGÑ¡·g2Ëøt&¢ ›ªPºeÌx"’€±áþ×oÿ¹èÿWùø“b§S!)rá;=f¡ôYøÏšú`µbϪS¤+bÏ%’±cÏLgPœšòíWÍB •ék+U¶¶0Ê-dÁ$MvˆÆæeB(CðxE#O7kS÷ç’Ä)Br+¡µe’‘¢‚EsÜlêžç¿lY'qoʱ<›¡l҃禬–•éXfXÍeœŽËú=˜¨Y²¾å)~%—îçlXÙš¢7\Æx"öÍœºÓ÷m1ÂÞç½¹Ø3WB494w´öÀÄo³î¢(+Òsw¦k;˜àå÷¦¿äR‚«©­‹G{<x¸Œp?D¡”@D-Š=‡oQm+Œ¢?ÀQ6M»¨jò¢Ã‘$×B†@Q ½¬Zð +Máó>G^WßäôUqeÚîÏ­¥…¯µ}k[Û‘NÙªàh•³àŠœ7 \·ƒ{¥Ü5^È•SÖvlÓ™[r•‚®ŽK»F꣑úh¤ŸÃ¥7ã[£=¡JoÀ·g’L>‡oQµ¦ì+4˜h;»CRlÅC~ ¸v‚$83öPâàœ-Ì[æÁDŒÓº K¼Ã/y’"ꦫ¹Ïög +-t¶66¸aRqÀ®XS›1{SL×Õ +÷‹K®pETï3vànäy;¬‹¶®®7ëÇ׳ x`œý˜„“¨ÏÕæ†Óu`J6çþLÏGµñaCR’¨úŠ«ÈÙò6Ì‹iU!ñœb뀘‚fiֆʾCYGâCÖ Ì­E6sämW4De©Hì¬DödCÍx¾ÉyJIÜr~â”GD˜'‹õÅê`4Üë :P o`@=(¶AÔ4a,Š1 +Ù(Fø}I>0\7¤ÑIö0Ö ”,ÑÊ +VίРo«×ÕêýX‘¾ö »¬ú3W³WfȘx¬¶PûHy†4Ë˼-Êóã÷ç9^ØKÔÇlFv7ÏÕ°%n6¥¹'…Ž¼Û•vÜXÕ¶èÈÓçÇÙÜy\XÛÏs<ǩ÷Ü„!¨piB iÞ}d' +û‡'~E%û ÿQÑôtã×sÎ~µ:ò»þ-œîßjM÷Õþ^ÙÔØ'”gE{÷.sôûÕ0¢¢ìBà 8:¢£ŽÏLyΪåÖÅ)áa}-ÑÓΈ»ï@rØ—¾øšm]ÇÎû×í÷¨/ZY΃;¹=±cuƒÇ=; ß=’Ç®]Ëòªb)™ú¿l+êóy}gÎG¯„Ãø6Ûš~ÓÖLŽ"vó7Jƒ©“FS‰â-JšÁB¢1çMö5"G;/C'=çk„¿)çAW}2 `áãùÑbç® º!  ²Ðü&| å]ß.6p̉ǻhÞ Q' ;Þî üêŽu”F)ÝcþIE—{ÄRHHh¿¦èø»Šþïž<ŸP{MbÙ²l ƹ†Î9vÄo¢þ×HlHüs8è`òõ¿ã&ñÛüd.ƒ¬ð–Û¡¨o•Ì:®>z‰^´3µ;Ïl?"=_/ªuбļ }™FHMúPHqïùÔöÖ²XÙ¡ÍN5ÉØ_¼ES{ 1G*täùú6k†æ ®sÖÐ#(}õÉqS÷»& ƒ#¾\þ`ì2¼ +endstream endobj 1489 0 obj <> endobj 1490 0 obj <>/Border[0 0 0]/Rect[145.02 203.22 192.66 216.72]/Subtype/Link/Type/Annot>> endobj 1491 0 obj <>/Border[0 0 0]/Rect[63 549.24 98.28 562.74]/Subtype/Link/Type/Annot>> endobj 1492 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1493 0 obj <>stream +hÞÔWÛnÛF}×WÌã©Ö{åyJ»Më¦-»vQ0¥°°©”¤êæ¡_‘þDÿ²3»KŠ¤/ISA`À\‘˹œ™9g)a3;øæL¦™Å‘‚IcÐêb¶ž}½˜K°XϤx‘iµ‚D .,nf­pa2 ‹%.„4°¸]²çGÇ`y +‡‡OžÀ«:’)×l»©ó››²ÚÀ‹ª-êu¾,¢Ÿß¡'í=Y®a.¹Œ-,žÏæhÜ,ýJïMÿTGs™pÅJ4§Û][VEãl-f±âIŒÅÜÆÀ•Î² ¸I…0>7—®{ˆseFÚ ÝCL¸‡#s d€MÚåN©>De}ˆ'yÓB4yÂÎß®rZ)Ö+¿€’®«"nYØöCØT/ß„MÊ_…´˜ªŽýPÚߤ[‰I2|ÿ.ÑV½õOV»e Q’rÉŠ`² þ¶Up†…qP ÂZ©8éÀ6f +öß ³,š§Ü°l®„ôK QÌcÐ]?þòÙ·~¹ÆûŸT;pI•]ítß…2táÿê³ëk8-7Ø®4‡m$±8-šgSS¿ý)7‹ï3ÌV¢ÜlÅH(=×,ÊS@ƳØO-Xâ9ÇìÉF(G6¢KàðÛ£(f‡ßÿrztvÅꢹŠžv ®¸hAò{ë¢Å½»ºñôÏ@>Í¥žæRñX +ž¹1ß³;¯Ê¶‰¿î kOøŽMGïÈP)3ëâMÎÔž±à–xLá¬"5q[Êš§ÚWYôi³ó—/g£@ô¾DÒuã@jÚ¼-nŠªå@AŒ]`'¥ö_ºèˆBŠxêʶoÛr[å×W+Xæ•÷8W §îœ0|´CS¯ Ø5Å +¶Õõ;ü·, ¬6ëòºˆ¤E +âp¡ +¶u¦ñž•ƒøt? AjhÞUmþÚZG_Ĉ?¥Ù ^ñ’SØ¿Æò@{(¬2dïD>–âYfÙ.I7œ¸¾‚¦@Gøî\#“›) += Ã®¢q ‡Ð&2w0ý ­8òl³#„‚ƒ.§-Z‡hœ‡Ý*;üö1t]íR)‘ego‹e¹.±Â4~Ëm)Iâ‰Ò‰Õ7(®€ƒ•²<’lÙnkdGŠBDâû8¦sÚn½A~ФáQ\´ŽRW%ö‘¬‹>5¦­­g¢Äg¸§|A·n})·prÇDÇψ«Š-RõúÍ`öÇ]DVÐÙU"9;SM„‰2"æ +¨ôÄdGW]´¤{Q*‘å‘Ÿ4‹ÑâHˆ‰»b$¯»B|qtzöâÇ—£¢#AßG+*™Žœ×b÷j/ÅJ}‚¾ðéÄiq]ü¶+kì¯1Ø ƒÂîC }OPu¢ýBœt…Æï;%¼KæäÚ¢êΩ §rLèv ô›ˆnå­3r;LVö}èyz¬Ø®pCHñ»SãJ?¬Ì†#ËlN²½÷Û4|RŽQïú-ʼn£^ëõZjU@¸ðÙ$<6^²å=’-3Eª¢¨?«`ÏùpJ©êNµSžàÙ‘d{Ë¥ÛÒªÀݾtÂ}¡2¸Oi*dí[¾ñ¿°¦’Äsý^Rþ³¬˜ÆÇè©´cßý#ÀT{ +endstream endobj 1494 0 obj <> endobj 1495 0 obj <>/Border[0 0 0]/Rect[502.2 447.24 533.52 460.74]/Subtype/Link/Type/Annot>> endobj 1496 0 obj <> endobj 1497 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1498 0 obj <>stream +hÞÔXÍrÛ6¾ë)öHN"˜H€8¦‰ÝI'm3±ê’h ’™±(HÙÎs4/Ñ·ì.þIŠ7Óét2)Ü]|ûí· sXMÎ~¼ä°ª'J‚NrHs2­,'?Ì&g8Ì–. Áxá¹fR€– KÌÖ“­°$5fs¼Ix +³‡ÉûèÕùd,‡—g/Ÿ=ƒ·Û˜çLF›Õ¶X¯Ëj¯«Æn—ÅÜÆÌ~BOÒ{ʘ„)g\e0{5™¢Ar3÷w²7ýû6žrÍDT¢x·Ù5eekgë|6ÉRƒûQ,SÀ„4ÆKó$IýΔ`ZµÏqËL¤£çˆ"ÝCÜq‡‡q(À‡iÞnž"]Œ"ó1¾)êâ©b:úínQЈ»ð7PÒÕDU̲(,û9,ÚÎoÂ"ᯠÏp¯R ú"¤ÿQÑöSmðý·x‹¶¶ÿd±›7pëœñÈ“uð·©‚3ÌŒÃ*!°…PºE;M÷Ñþ ¸1ñ4gid¦"áþ6ƒX1´×o¿üçKÿ¿Æ»¯”;©§Ì%mîdÇBXøï†úâöÞ•+¤+bs$c ïlm±8%ñí>´ ÖVf¨--\m)T”bƒ •V¡q¼Ô´Ë„6]~ªšâ1ž}œœÍf¿n˜Q¾Né†LdŠÉ”LP}:z•U «hùpe±>6ՇȣÊôLU‘P¿š¸¥ÎÅ…òK矲$K”7yv°º"î­ H2‘¿:¡•Ñs²6͘R¹zêÂ{²Kñ5—boîÄ™qà8lƒÝ(׫|µ[Ûª©ƒD‡XP3“2ó±¤Æ)† QäÞO§æÜd=A“¬—<£Ïsê —wv^.K[Csƒ²•’0®‹›-T»õuøeg/ ÆM½Ö(*Ï’š8Z_;üdh€Ý« Ê…“G,DÓ‚›{ps×'ÐI .ïCº*‹zÎ(#©Ê<ã}H’k½ÛÐëàÁµ@j€PõÄF,r–Š~ƒ|P6W¯_\Ž¼#p#0tð,thP7Ec‰ fÂØ +‘Ìtû¢—ô„áû> ¬asה΋fG`>õèŠ ƒÆ¦*n¡¨0/*¸¶°«íÂÇ7Å!%G)Ü›'L°ÀuÞZ¸ý›jn¡¬”ËòÖÆ9‚\»ˆÝlbüØBý©rƱ>ÒËU»›vþi°c‰GhÔß-c‰)A;Sü‚¹9^×1ýÖ6îK¹ñß*¿ l×ù07²õD”%OÅ52ÂQó¨Óê›23οê J÷sójkáO¢âçnÜJCAO Ëà&±1åߊ{OïLbGÀź½àŽ0ÃÒh> ,ê°0IQGÅ4°¾ß0©€ê'X~s~qF0½)ªÕ®XYlW˜p;‰I£­­ögRž2“Úl$s*=åsêôgÀ3Wí‘+uȈÊòWJ¤‹^¤Ö1F´‹ñƒ&M_)R÷•"”_¡v¬‰_®N,þ(›G™1]0zȃˆ.ìòáM5Ò¥™6·.ÔÈyoç̃^ÐÛ>¯–q@7CöFn™3¡ʺӬÜø·Bcþ$¦ŠÆ•{RP¬9$O)2 äÉ“_ ¼:ëÙßï•ÀvñEãŒAÏŽÖ?á`ÿR¬íÞÇPh½Oig<Øýµ²h³y‚#IwXlñíÌ\®ÂÞÑA¾WV¾®ZÍ¥—/bÔyCúŒ‡ °þÛ#ª,ŠõÝ-vÊÍÒ!CN|ZÄt§¬Ó×]¶žSƒ%¦”ט÷»Å–€oâü†ÈÈë`+’Ng9Ȍμ’&Ï/* Ä±Jd¦»É ?>æÝxç.|‘´o‘-OjlšH:ÚƒÄƺd,%!>aK³,?-öN¸#-È^W¡ØÚ4ßÄžPm碊 ™'ñÅjŒ©€0ŠfG ŽÈ:Ú“©ü輑Œ7¢² + öÆB\B½›Ïm]/w· Ƴ±ôj»ww8 “ À‡„ŸBjUÑý1"Pq‚ú9ê½.2œð„d»E´;t·¢}ÙŠ6ŠA …oM{(Hú+Ƈ.Ñ +‡ð@ ƺS…™ƒ)#Æ¢ó„sk˜üò±«k&ß}ðšovn\h¾çÄ3ª"È?> +¹Žæ¢iöf{&ÕáÛ©ßø|QÅ4¹c[ O:d |µª•š#ª%¤Ï¥ëmm—*«Ãf€ó&a:±¥PÍ>_‚’ü-À˜<™ +endstream endobj 1499 0 obj <> endobj 1500 0 obj <> endobj 1501 0 obj <> endobj 1502 0 obj <> endobj 1503 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1504 0 obj <>stream +hÞìXÛn7ú¨¯à#·©˜åeo}sb§HÑK`«ÉƒS›ÕJÞÂZÚUœ|Rÿ²gHîM¶b§hQ´(lH”–œgÎ9”dëÙÓï.$[7³X³$L™Ic¦C¶+g«Ù³Åìé É$[¬fR±x“i"´b‰E¨Øb3 aE„&ÓlQ`J÷³K~zö‚E"eÏŸ>ò„½Ú2šo×»|³©ê5{Y·ån•eðëâ{xÒÎS$4›K!ãˆ-Ngs$7…éÁô›]0—‰P¼‚v¾Ý·U]6ÖÖÙb+‘ÄØQ,¢˜ ¥³,c¤ahÜÞìvíCìX(3yˆ„ÐmbÃ}:2›„Œá¡I»½S`ªQE.Äò¦eÁ< ÿåf™ÓHñ¶\º«è=ãu "î§ýè'íŠ+?I¹÷PFتŽ}PÚ}™ÐîM’aý+ ak·uO–û¢e¯ƒ$’—Þdãýmkï cSR®•Š“.ÙÆ&ûw&³,˜§Âðl®Bé† bsƺ÷Ç¿ýãSÿ½Æûtv:’N.ìÎN÷U(}þ½¡ž\_³ójr¥>l‰blØyÙ”èMMõö!P_–KÑ5¦ï­DÙÞŠ(w±F‹,upcG˜'F$Ø„aL; i“|Y®nÏêåë*o‚Åo ELŒ" ]i[¬R¶Æ9–7¬½*™39á’Þ^¿<¹˜¸Q¸I¦°¦ÍÛrSÖ­°Ñp±bs%dßeaÒØ%/W#÷qg8ê Gƒÿb»¯ÛIZ¨h¨—HÌMYT«ª\²ªžî/Q4^i¦9½hó]{'«‰H²Ñ"ÙyK}Áh o€HœÕ¤ˆ·´3°&ß”,w‰Î‹vŸÓ·×Í dÈ÷AÈ7ïíÔ]ôÛ®˜gï\fBrC4 ñþ7“ó“U³ò1ï¶{xõ%œòªvŸÊ†í›ÒÛxý±»ÏUC«ˆrÜgTqë öQô +ØNKšƒMÈHy$ë µ7ïžœ¾;=Yœ˺ð|È…?Mß5s•‰é˜Ûz˜Ô¿øT·ùG;}±Pn~&²ØÑ Ð"‘?ÛñQ 7UݲeļﱷüöZ¾ ü¶Ž÷l¦"N½=ª²çÎ(0à&wP¬I¥WÇÒÕ'`ÆBOÃrö¡Ê)T2ÎÓãënmä¼)H=(è‘ꦭÀŠè Û€“³Bá˜/ëÀ—ÔÎòâÊw¯)EG½—‡¸†#OêÐÛRq*BéÑØìþËë¥sJ%©C4 Qæ ªÄF‰Ù·U{5Å +ê(ˆ/ìºñhíeÅVïßÉ7Ùÿ¹.áxÐéaH´4q[\ mŠì$`¢= .¤ç½?‡L$zä’”>@ôþÒXhÉ?ZUV$AÕΧRX¡çI÷dl÷8k« 0eäQš=æKˆê¨ÏšÉÀ}s§ÈN»÷Rh=)´Ï‚|:Ê +–Æ”²ÐEDGǘ¬¯ö"§®*®÷Ë’m‘‚sX‘=­Í=I=RÖ)á«@%$V¼\_o`fÆo¹tqð'Ú|ë«'9h&´PdUCŸÇ¯ŽhTÍ0Èg‡Xù« ’ÐÍÛëOëm݉»HQ²R\[R&b»¥AÑ M§²ës!ùyCw᜗…­„Æ=˜k/f1Œ.n‘¡çÞä$ùÚC*ŠÝäkpšJ \6Òr¬£´¿>&ÇÃü»)Æ?¡2¥ l¾.G‰ÖQ,RØ $ŽoIÀóÁÍ´{Êm4ƒ'\§|6·Üu—º>ŠPUÓ&”Ç)Õãæ[îô¼ mB÷±n—§˜[lk€UÉWùîë.ã®K•RY¯ò»ä5Ý#yG­}x +9KÇtÆÁác1!_Eس)ÊK~‚¼ÆÍo½'¶i¦±„ „/ƒ^E ”@„6ÿ U/<0:…H« 4h <±ÿR:8CdÏÎùïJ¶.k\;à"ã Ä%{¨ãOPaP˜¨Ýú§‡š½äùÍ ¨ð%?ù|E¿0PV4ؾ4La|Ð¥'! X>"œµ±’ÞµUŽráŹ‹Ñš<à’>S#”Üî– ën¯*`.©ìñŽÉO±+)âA­&#”G§ýÙý~ö”‹Tf ÝoFÅ.^{Áê$š_ Jés⋈bÄW’_ƒ +0êÏ(±^d?öÂ׸éeÍDi`‹Ã²^’iúùå@”É;?yý¯ÊþJU–ügE¸ñQð÷ +endstream endobj 1505 0 obj <> endobj 1506 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1507 0 obj <>stream +hÞÔXÛnÛF}×Wìã2‰ÖÜ —ÜÇ4q‚ibØŠ‹". +FZI,$Ò©Øú¤þegvIŠÔÅVà¶A`@¤x™™3sfæÈœÌgo¯8™•-I&D%šÈ¬ì`:øi48{à '£é€ Âx3)H,C +2ZB°ÂBe$á$䊌îŸéëó7$b yuöêùsr± +xÂ$-f«t¹Ìòy—Wv5MÇ6ø}ô3x’ÞSÄ$rÆuDF¯C0ˆnÆþLnMÿº +†d"ÝM@Üæø,7UÒ€ÇÈD£ˆ|ŒïÓ²"ÁP³˜~º¤x&he'þ„dx44XDëÇ~©ZçõCÂCV©~Ò_L¾Š ¼§`kUø;“õ¸"×Aœ0Nmm²¬ýyí *ãrb²…Ðq“m¥v³ý7áÆÄ)j†"äþ4"fšÒO?|÷G\ãíW¬ŒÇÊ…MídËB^³ð¿ õåbA.³Ð± +8±$—¶´Ðœùö5.Ú k:³î­X¸ÞÒ0Q6ð ŽugÐ8^ƈ2D€ôj“Wé}0úsp6 ÿºaFû>Å4i&šÀþtsê3ÍòŠLl éôîcn¯³ô<ŸÜЛ žFM(’™ÄGãÎÐìIÈk{˜i´7±Ó»ë,P,¡éE °!‹E*¦›Y‘÷‡\a”˜¡«\=Fëæsc.Á!W’”ÔV"o"Š"_ýp›’‹ï{ûñƒËIãO1±eI¨k¡©IRVie—22 ¤€æ†I¢ À+pù5KI–“ʹæ0ô“Ž¥¨™ù¹ž[rýîåÕÖ#çY5·hÇÇ5ø™æß9«÷}Ñ7Å¢^èåù«QÏ‚`"iMpÙtˆr kŪopm•$nµC±K9@xùéýùN”ÜDÇóÒIð8ÍÉKÊ[;F P)»oò¶ƒµ/N6Íìê"bdT€sÞW…‘ä»ÏˆdÇ£yíGÜÐNð݈³Òå'bFu^Ž;´¸­²"O$Í'>:%°¿wÖxÒ¸¤a]¶e±²¤šÃËE>¶ª@¨°·ˆMÇó–ƒ{x¹{x‘ƒ;P¨ª‰Cí@e5êÞ +˜g† %Ñ!"œ4{¢P \::{`ð\ œ7´žê iƒ[9Dñž9ˆ‰1¼0OWÏšhï’%„iùîþL¨&è'±¦Òe-³ÚHAÄ óÚÐêæ±ÁB£U7 +´Ïn³:´}Çùzùú¼…ñ‡”ûŽu|ÌqÂDó>úI±þ²°Ïýr˜µ\Ê6í ÷‹~I8“a,ŽøÓ°AÃèIþ6øó# –J—W½á¯x„{¥þM_‚Z–0‡gkäeÙ$pJú(”qt†rC©]™»Ä‡\«î<è¨:ÔB¢¼‚Y„S¦t ¼‘œn‚xäÐ(Ýì‡%Úé¢=Q~7Ï U«‚Ìl¬‹qVfÕ­ç7ë£ +Á8ç°D=0¾½Gøjù ¢zen%;xò€sº$Ë/°‡Ši)³ ü^àÝ Ì»èÆm£ªÙÕ &'¾ÒýaÛæè2¥½|6‹ øßÂI ;pRRÚ¿Ö‡¤ÃYúÚ@.“(:PÙTçx]àz±´*6X•Pycàæ ã$Ц;Êkëh÷OcÄNfá2€Íž@ºA> +3 fümºòWÓ> »hùšÝ¸@±l÷$½Ï < +ú‚Ô7½‹u€ÎL/>X 53d½Daǧh3C·Š†îtø´3Œ¶ª»fý5Xg³E ÝŽ‹—=* …†L©­,ä-g:ÚPÑôÒŽ«Ä 8¼™EÐCǗᎄE¬q÷•àþæLÅߺ…e¯{éãš1é /'N8Ç¥£ÞÚóÊð |ìl«“ô#üâÞÕ>?´~<Ù ·ù×O¨ˆÇ=‰á»Ý+"Æ÷Õ Çò‚©C_6Lën¦IXÚá列?*"´ÚåÁQ +÷Ÿ.%CäÄ“”$WæÁ_± $q¶ÜÐï¥"ý +|qL@nµ×iJò ãbß—d1“'¹Ú<àjO3îû;Ñüq³9ÉÍMàlÿ0 ™ó +endstream endobj 1508 0 obj <> endobj 1509 0 obj <> endobj 1510 0 obj <> endobj 1511 0 obj <> endobj 1512 0 obj <> endobj 1513 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1514 0 obj <>stream +hÞÔXÝrÛ6žÙK=.Á­…?ÈÞ¥ŽÛÉŽ›dl5Nº´ÉÜ¡I EÅVߨoÙsÛ±“îdwì(<¿ßùÎ9ÙÌ^ütÉÉf7Ó’˜8%*ÕDƤ±³õì‡ÅìÅœp²Xϸ 1üÁÂSä FÆ,dq3‹A +‹U&Éb 1Wdq;û@_ýH–’Ó§ß}GÞ5O™¤õ¦ÉonŠjC^W­mÖùÒFÿ^ü 4I¯)a’Ì9ã:!‹W³9D5K%Ñ¿6Ñœ&hbÈE½o‹Ê³ÅL f4x¤Y¢ 2Ë2ÂTÇÊûæÜu7Ác&Ôè&7Hwîѹ dnª´ó ½‰"ñ&žç»–DsÍ ýe»ÊñJÐÖ®ü)pÍh±„†m?‡MÍò:l~y®J-ð‹þÇ ½W&ƒçßÁ%Èjjgµ_¶ä}dRÆ© "wA_]eªc-„6]°•šûOÂ3Ж2E³¹ˆ¹¿LH¤™¦„tëÓ—o¾õÿWxÿs' 㘹¸ËìQÈ +ÿ»¦¾,KrQl®X‡mÄŒ;rawjS"Þ>FBÂvź µe„«- „ò×ÀFmôÏ8\jô2ö¾Z‘ÇÍþÆVí.P‰ö‚Ü‚IéˆÊA›–ùÁ6oò-þ3Їze,C(Mb¼¦Ë­]ëÂîH{mI™G@€†"žÁb#øh”×íu±¼v[œ-`\ +”àäƽÈEN6¶¾±-ÆK€0 ƒ²,4«“#‹t÷¸ÊüãÌ% h +u.a+Œ¹&ͦ|Ú•8 ÇKZGÂÀSu3L;!Eµ,÷+äjüi¹oƒÛÚ» j¼Š¹”Méš‹Ô‹ovìIé ÉK€©· ê*1üvˆæHu¨Yýö˜Õ#e`'u4ä;ÎlzOì"KïJr(ÉÝ59\?šdÞ=ÆC_±kl"]†ØBx¸3•S²Ž¤@*s2­˜RÉA¬—½ øYÝ(Ž¾¢_”,@ê¶.Ñ.d>—AÃLîHúHømÑ^CIá-iëÞŒ&ªƒTÀZVû˜+ZlŠŠA_&754¯e¾³.qšž YŠÂ:{PÚÓ·8éÛG:’ž8é¤ðÁ]ZlþN ´©´7©ç­zÝ+»ª÷•áUqKè]‡ˆŽ/$ËROî +X#nÔY£Ç»# º²ëÛ÷Eÿ;œ2Àí$<ƧçlIh‡nîHŸ,I¼PŸ»×ùþõË‹_ÎÏFÊÓÒÆ‹PÙd×æ­EFóhS€¶¹rÅ™»˜@${àõÚ9gÊܧýr¤ÄÝÃs¦Gš9(YÔèZR–`nUïÞžÿöÓÛ7Gy6@ÎQðÀH"KFA£g§‹‰Åâ"½ÅÊcÿ„ÔÍXà\¦SÊ3ŸKGoå€bT&&Qª¨È•%X_®¤bGCJqñ ÜêËÒ1lO.‰ÌUù8…é`Gü<‹;”Ši±äðÉdœ7á Fëm[ÔU^’¼Z9ßp+ô"–~RÙªÓh¢°ßkuUàci=Vû6bsh„ƒ†o‘<­º³Õ®Îp8bd Ø*$?5†ôõš"‘¸z¢{âyóöA”†ˆ80lŒi½wa©·žä5“Ù}…ë£îc áäZQ˜˜ÕƒÉ +ý7 £,ëˆC²èm„S=_0l÷}¡ñ¡ÉX¦ý/ðL"e?+õýÇ$—š£ý|8¦H7THºÇUÚ g˜¡·§uÙsN +‡Dr$_¦ÝP7èqŠ÷Ç:¹èh:â¯È6ßÀ¹E¤1wTü9§ã å>Ýé~×¥îs:E§8ýÖ·/ ü R0¬Õ±ïà”I Ç0‰‡}‡ÞŸ¨î‰,Ÿ8; ÎóÏ8/Á†'{6üÔmŽngèöz½³í‘§2ų<: +çûG…ûÇšL‡usŸ“æ)Njõ,Xûûitê)w æ.Ãï" †æîk‹c NÍ)=Î3¾Æ_´x ã Þ xbÄx qö¥@c’‰ŽÅÀåËCÕæw¾Õ-â¡h RïŨ¦#M»ÉçwÎ8¦»w1¾Ñx{—u…Ól¾Î›’ñô £¹Y׌O€x’‰æ übKißà« zÞìô¶Âmº ¥7.L8MÊÌèc[èªÞ_•64wÝON\jÁj<Ý·¸\LU'£§&ª3¬d¾TóáoÕüeñ¿Âw?´ýÙº%/Ï]:îk31zQÊ2 -ùj‹– +í¹CÂÁ6ω +Œ’Ùß`Dë²}vXüzòPDƒ¿ Û|‰+4÷GJĽÒ1£Àp¨®¿Ú–Ãÿ-..?ÔΖ³j9±A±DÇâœ@ï5†UÝ~ ÅÎãL”ßÄã')öð{„R¡þ%Àjþx +endstream endobj 1515 0 obj <> endobj 1516 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1517 0 obj <>stream +hÞÔXÍrÛ6¾ë)pÛ!$§§Ôu;í¸?#+É!é‘ ™­Hª$Û}£¾ew$%YÛét:ɘ”Dîï·ßî‚“íìå7·œlÛ™’$ S¥ŠÈ4z¶™}¹œ½üšN–›$„pái¤ ‰ Y(Ȳœ… ……Q&Ér7!Èò~öŽ~uý5‰YJ®^^}þ9ù© xÊ$­·M^–Eµ%ßVn6ùJ?/¿MÒjŠ™$sθŠÉò«Ù¢š•½“ƒè·M0ç ´1dQº¢Ò­‘u½œÅQþ(+„̲Œ°( ÃÈz¦KTÿ;¸ÌD4ù"‚‘æGðØÇ#3QÈü¥½óh™ð6ŠØÚx“· æŠ%ôõ~ã ^ÛRà5£UÀbêûÞ=Ô¬îÜCÂ^Cƒ¯R ü "÷%º%¼ÿÜ‚¬¦¶¿¬«Ž¼ ’”qªÈÖé«+§ 2cbb°…PIí(:Žö„gY0OYD³¹¹½I ˜¢„ô×O¿üçþ…û˜;™0Ž™ ûÜIBîPøïšúj·#‹b pÅBì`lÉB·ŠS"Þ>B—zÍúÊtµ•S[ +åÙÀƒ*Q#¢1¸LÐËÐ:ø +xE¯l¥®º–82QV [0) • GÅø&ýXä‹ÃNÿ—:Xþ2P„3Šm4Q ¸ f0²HÒÛ½^›B·¤»Ó¤1¤Þ˜û &gAì|IYêd†ÞlúæÛW‹×7×íC&GÊ•SÞÝåÙ75”·^ç¢%à³ú +Sðs`Îi è¬³êzÃX¦Æ†]¶ÉÑ1Iz“Ê)ýy—Øîƒ&ù‘ûK²çyO§f"5ÛþázñjyüZ: +š·0ÎBˆÁF!Œó.;ý):²Ê«ªî\ôDÈxf£ç‰»~æX°Ñ›@ +$Ô˜6¤«Ï¸*â‘-É_ù‹ +‡Çc§Í¶Jî‹îzj‡#bq| +§Ë¡ñpB§2˜_›þÀ\ï§uã +ÕWÐú·&ø  ‚Ï3¸è§² Jàò"ðפȶv4ê&= ¸–c%J+Q¢D c¤³¤+¡‚‘##Ž_#$d_$Ð ZÏàs"2Ï;"T¬ËeÊôÌn¬^~6­ÇÌ‘ã¾Ñ;ýþõ¡Ý=’µÞÀH¾&EåPÉ-* ëÀßÆ>QÉŽ Ñ2ijutE]zÖè ãt‰œ•¢)ÚXæÝêÎdÏF µH1)(óaG=S0D“Õ…ÚŒÌG¡­ÈÚ6ù1>¡¢Òlz<Î…ICú’6žR6•9—›tZ‘ý†©öù +r=)¢ÑôòW¥8âݱ yIXQ|©tL’LݦÔ8·ÃŠá`þá5†Òº{3\j]aµ˜Œ+ˆŽ`l +­¸£Ê‰GCa/ F¤RçíÍÁî ý¢F˜C‡âÁ%l`uå¤Ã0©ÔÀ¶{X¶z½ÕØ÷Í̧±vbúБþ'äÕø„W…^§C¨u/ëîºZ·øè9Ýó¼ˆg‘òòÞÿS3Æ"ä3`UP'þ'²1¾Ä°ÄÝD`ÑöHtµÚÕ˜qòy-£¹ÉH˜>3Oôg»¨ÚWæÚ‘Óˆßî2ßÛ½éqâܳp‰é ¾3½—;,{C-ì<ѨB”³Ï1ܬml#².Zhç+M6Í`žñD—NL?&äM$&:¶aMÐm}èË!™ì/óa"¶¯àVb}q¶õâ¹éB! ‡¡/Œ~Å“,Kí–gîð´E$Xz°èùQÞ•30ñý›"‡ÿ é¢FJHèýU½#Ó³£Éâ(ÃÐ… ô¹¶ÛAs„„gE¶ÏóÒ“ºßlÑ.~|{õãÍé°ãN¦y¿ˆôC|uWÔ¾ŸL•Á(+ÿþöÀ¹w­‡ €Ùœ÷sæÜîŠËÅ0ýŸ.hg=Tgà)¥:õæ¥=6kÀévÂâ ã'ëž»… ¶26-T{]ÁQ”#w£38OCŸÇÅîl$1¡üìÆ};qH°è\GÊî_Þfßâ=¡Ã`âç·½3Ùº}¬ºüÁrår)ì[ÀYÊžâ `SÖed±‰J ^z ŠXG”¿§î¼‡aœð¼.ÄÓG؉‹ª›Ò2xf5ÛD½£Õ¡¼ +抺^ê{{P:X¨XÌS>Œ$¶/¼°Œ²L$É?Tl.õî’bÛ%Þ“ˆOjÚ`§ýï¡U + øå)=g ±R®Ð§£Íõt:é ApGGgHÀ‘@i0Ê&´ü Ü8G›Ú®k._¸3¨“SÛ*¦âVõîPV­åæ2ÿÇàÇ`tû¡fæNžï“ýR&Ãìƒ|ž‚~¹J7[¤Ä ¤?ÚûS€Úæ¬ +endstream endobj 1518 0 obj <> endobj 1519 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1520 0 obj <>stream +hÞìX[oÛ6~÷¯à#…F,/"%=&mRdèÖ"Q»‡tª-;)°ä5þIû—;‡¤nv’&]‡bÃ@¢%ñÜÏw>IÕìå›KAVÍÌ(ó„D‰!Š“M1[ÎN²ÙË3AÉ–3! ‡?8‰$fJ’XqÆ%Énf¤0¥ŠdsXp‘ìË슾>=#š%äÕËW/^÷›@$LÑzµÉonÊjEΫ¶Ø,óyü–ýš”Ó¤™"¡`Âh’½ž… ÕÌÝJ ¢Ý¡ˆ™¤%ˆ!õ¶-«¢±²N³™‘,6à‘aÚ&Uš¦„E ç‘óͺko‚ÇLF“›|@Ù›àpŽÔ!%p3J:ßÑ0Ù›(µ3ñmÞ´$ ‹é‡ÛEŽ+IÛbá¤ÄsJ«€iêûÙ?´™_û‡¤;s¡ÁUe$þ‘»(Ðû(Naÿ{X‚¬Míî,¶ó–| â„ Zx‘×WW^$ƆŠc¬¥4qì(ÚöŸD¤i&,¢i(¹pKMà %¤;?ýôÃý÷ +ïbîTÌfŽw¹S} +_…ÿ¬©Çë5¹(WP®Ø‡m  rQ4ô¦Âzû# +. Ö5¦ï­XÚÞ2(‡X£Xš8¸±+xÜÄ‹°á\£§¤‹bùåc™Ãÿf».ÞmÊU Užý>@Ê^(*Š­P– ”-_ëT„”†äñȤ˜ˆiˆkm@ËÞ†wçoΙ(¿ÓñÓ~ jŸÖNÜ šØɧÈq ù pXo]àe¾ƒæ +^jŒñ€éâÁ\šœ¼;CqQ  ÎòéûË`”áß›iœ]žfÿy¦ñt/ŸÄ4î{™üŸj|ª!ñs@„J¿B6l¯|²qR·8údà•HÄœ#a©Œãoã?Jñ]VßþŸ£øëdKº"y6ÓÒÕr à¶eX”>‡m=$å1zh3o DèÙRzK:v{RÔc…B³HŽQmÆ~ª>‡v”ÂD ;Šù\·m}ã¸M}ëÇý8›Û ó{Ââç·¾‡ÃzŸ dÃG&œàÈAÀR?¿ ™NoguÊÇ(-'{Eu‰³.Aëð¸­ä»h”Õ¢¸-àPµë]âc¬7¥‹ÐÒ,k¶H=ñ8ÙøAÍÑÞV9°Ã˜n׌Úxm ƒã"I'ï!ÃMîaO"ñ,Â1]ùÓů¬Ý GX¡é$d§KœORÂT²OÐ÷&VÇj÷‰ªey|`¡‘QÄ+º)‚PÃ[e‡ni™­b> endobj 1522 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1523 0 obj <>stream +hÞÔWmÛ6þî_1Í'ª‰¹"©Wý°q¶mÚ¦]x•‡ø02½«‹W6$9›Åá~PÿegHJ–œÍõ‡K°¢^Èyyfæ™±€ëÙÙ×W®ÛY¢ 3ˆ²T™mfO‹ÙÙW›™â\D–r%!U!%·³¥ð0Ê%Þ„"‚ânöš=»ø +bžÁâlñø1\6ȸb»ëFßÞVõ5<¯;Ólti‚ߢ&å4Å\Á\p‘ÄP<›ÍQ ©)Ý:Šþ© æ"å’U(–»CWÕ¦µ².ŠYåèOÂã¸Tyž²0Œœg‰äiÒG—¹Œ&ßDÙèñ€GnQÈ?FYï ÿ^SÏ·[XVט®Tˆ] 0[XšÖ`q*Ê·÷TøÒ¬y_™¾¶Rik+AFé‹ëÈ1Râ˜$MFcÝòz÷ô~ÌcÌü=±AÆ*MÔ1„l{0ôªÅÏl>ïnì|8»O;IOp\8 9 /Q%j`OwÝ›Mkº øט£²øˆºCÅ$uëvẔ̌·Á<Âå`ZèvàLÀg¸5v·[g ñYØoL~"÷·:PX²ì>!.& ‡Þší.Tìw$ò@EP:xx+\žsd t½¶ûÀ%á"@¦Øíÿ+2k»ù˜3G£ Ŧ‡Ä %'%B +ðz)ÜÖú"È÷Èq1Q è·ˆBì2/¢×cdl÷».*„Ä'Ì%ÅÄ;ßw= bæ’ÒÞaÞ&aÊ“Œlºµ.¦"¯ÙÚlî^U&ž»¸õak.%± ü›;V Ó¶wL~Tg}s'½§ãŸ|ªwžî¥ÄN +Z{üÃc¨.Ï‹âbùÃ$P—Ç v¢æesŒAÛéÎÜšºƒª&%ö¤×‘ðLuàîWÏÏ—/¿¿8/òQ‰|ÜÂG*6L1 wÖ•˜§ãsY?T« +ã ï+Í¡ ”[s™þÏÓžQäGž·VÃ\E<')yìö™=¶ÛwծƤ¤B*uÕHg3žÊ±7j g?#Á¡5kØÕÛ{¼”ÆA‘"xi\l3žäDÊÕ3º¼!D(NÝ)&ÉT½PG`0fWT$Wù¨rûœs…;‚…»S¾@æ8’Ę s$“xŠ©Ósu_wúƒ3«(¤;…嚸AŠn(ß±¨pØr%%­™C5%TMÚ‘¶…³òUª¥^BšÅžá‘rWãÐUâ™Ý|~ÂdØ¢¤Ì&sHâ™D¬»Ôvé¨s%8–Ù£ƒÅ襌Ä(½Ø*˜1)ß(NGåëàxÍÎqV8_ÇöÄ:œÃ0ÊÓ~”[¦Eã:ïõ$X > +Ö$­°­ÄÛW{SV›ŠxÖÓà^;'¥?HòÙ8ÉŽ# +;S—»5&ªFÆ©m0G$Ð3³#OÑçW‹çÏ1kÜž³ + _°úšÿ:Ã*4<Éz~Í{S"W ˜ -\|зû­™`2‰€JĘ@Î:b uEˆ}¦æImáŽ~š˜@RKù@t-˜ÕíM¿Ã5"ßR;øP‚z¨Ì©`ËÞ¾Õ%µ©”½ƒÆýT»ª»±Qéî÷æ„Çq §$ëªA/Þ¾+pûÄsŒs6NMþ+Õ¦"œ®¢“j«ñÞÛj[<…•U·ÐÖnRˆïÍgé“O¸T/q|¦;,Gìý*€[ Åçþ jögÓ~áæ/^q!¢ø(þìŒv.nLùªÍ<²»ÅaÊ]Ó˜²û”‰xfÅ:ç|ö%œ€š°Á:<Œ19¼oÐÒÍŠ=*¬Êê5|*ä Pu% â"cÞL…I…ªŸïš +óᚯVõ£UðENØðªé87ˆa‹ýøפŒ¦ð~­!´àü½êtÓQ‘»Lô?ÐÅ7¸oñÝ›åÅÕŠ¤Œ,|ÝŒÀüAß  ¾~s¾\žÿãÑG‡~¿Ø%†žðõ˜G¡¿¸¿¿Në¿]à é5Ä¡¿¸¿?«áÇÚ ’‹z½býFü½õ‹æ}"C +endstream endobj 1524 0 obj <> endobj 1525 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1526 0 obj <>stream +hÞÔTÍnÛ0 ¾û)x”VXÑŸ% Å[’î(R­;,ÃÄJæ¡qÛmO{ ½å(ËN·z†ÁR&õ‘ERÀ>›½¸°ï2£Àòti@qhC¶Ëžûlv!@€ßeBÇ…(-S¬âŒKð‡Œ# +ãÚ)ð[T¸Ðàï³d±¼€‚•0ŸÍÏÎಥ¢dŠ÷íæp¨›=¼júÐî6Û@?ù×I¥HS &L~‘åÃl“¦ ?´4–IR# ¬Ž·}Ý„nÀZúÌHf 22¬0À¤rÎÓ%ç:qèFd̤þ͈‰j0"áS9ÜPhÔåÄ=&&O)Ê"¥øvÓõ@sÃ,yÿ­ÚDM’>TI:JGÊ +2º½Úí—ÑI&ÉET•‘ñ uú©"{mÞ¿D±Úc²T·Û®©-™ a„ìÆxÇf †3”ŠÇZKiìTl­ÿ,öÎѼdš¸\r‘Ô¨a†Lòñ⟻þ¿à§c|;e™ˆ/ǧ·S§.cþÝTŸÝÜÀªÞc»Æ9ì©Àfì`º€³©b¿ÝQ©ðg¨Ø4˜ãlY9Ì–Á…rÚ5ÞË´s&MZTp±‹;G?,.‡eÃ'’ó—KjÈüÍçÕòjMÚЭéù/ Îã¸.F_´¢/<…*ìî—Mu]oº5™.ø'€”LsLm¬»‰y GÛ6ÀÏ¿Sÿ5Rý)Àŵs +endstream endobj 1527 0 obj <> endobj 1528 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1529 0 obj <>stream +hÞÔTKoÔ@ ¾Ï¯ðqFU¼ó~é @ª–´‡U6›FêfQ’Âoâ_âÉcœz©ÊÁž±óÙþl‚†mÞ~RÐ Ì2‚Œ„¾fvY²Í­å) ’>*4‚‘(5”G& ¥MÊŠ©,”?Ø~}s #\m®..à®*¢á§¦ßm×À»n¬ûîªÅ×ò=E2s$‡ +…Ê;(¯YA€9L5kæ7ôç^* æ-ÁÀöô<¶]=LX7%s6Q=Ô&¥h£”v®Ìk ~µSɨívb$b&#U|æ#M,$ £kñ93}ÎQ»9Ç»aQx üþÛ~—5ÍÇz?+Ðf™x'ÐñÅíãâÔW‹“ž¥TŽj5^烶ó¥ÍåÛèÿ;R «?Í–ýs5ƒ¯Èa‰wê–`Ô™‰+™ÉÖÚ‡•mkÿfû'¨”DÑòTh©fÕðè9À*_.þ¹ëÿ ~>æÞ™€*wN®½3ç)T˾nªožž`Û64®yG¡hØÖCMËiò¼}ÚÐe½Çu3—Ý +zÚ-O/Ê´\¿¢¡è- +endstream endobj 1530 0 obj <> endobj 1531 0 obj <> endobj 1532 0 obj <> endobj 1533 0 obj <> endobj 1534 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1535 0 obj <>stream +hÞÔX[ÛD–x̯˜Çqif=7{¬>•ínU¢´$vy0É$1Jì`;lÛ¿‚~#çÌű÷RJB¨ÒŽÏœëw¾s¦œlfgÏ_s²éf™$yjˆ2‘)iíl=ûl1;»ä„“ÅzÆIá,ÜäL +’Ë”¥‚,ö³¤°T’,–ðrE7³+úìâ’hfÈùÙù§Ÿ’—m “´Ù´å~_Õò¢îm».—6ùañùìb1;Ð ™9+¸Y!½…3¢ °K™¨{:…@åîI{í_”]O’yÆrúÍaUâ“ ½]ùRáZÐ:aš†m_†Mír6 ¿¦\'s.3/Bùñ§\åœ «mü—ÕqÙ“o“Ü0NmÙ}M”A`œÛ)³Bd9Y¼bîdÎ8f.¹“ +y@á¿kêÓÝŽ¼ª6×ÁpcG^ÙζÉ\"Þ~I„„íŠÝ*²\¸"Ë  ïÔ: –,ZXäY–ÆbKÑãy²ø %þ 2+‚B3•²ÂsÈÜ—ïwH ÛóB0€3j›Ã³û‚-™ñX,ú4|A'À3Âq“ûúõH§.ÌÇèÔ&}@§.Ôý:!DB¹ÈÀ‚Æ¥y`@–òBöÅà ù7ûCk»Î®Èeµ³äUsì«Úv·ÒNÄŠº• +"D™žÓèbkÉy¹²5P&ˆ(˜Ï®\j8l˜ Œ<$éÜ9"oA1·õœ(' °}f»jS“‹7ËmYo,¹L„Ä5 ülAÂÝà +KÙ“kt÷:@u­/ž³Œj#僒Ð@˜\;Î*«•íH.®‘#U&ðg· {nœPÃË<νLì+m³öVÍ¥`¹BÎåŽq¯hs°5ž*ëY—§Äa×¼.á +Ä0ï3Y8iZ`1²Gä.æ[(À“ek &Áø}h¬ßvDùUÝõ5Ò¬ïÚCð\øC£„®Ñà ‚¤ßCÝá¹,˜¡‡™Ž†¹ØStq¢Ð­‚ùtÎÛ©`¦‹;ÑF7]éÉÅ~ @?Kq)4µñY‡ƒ(—¹îÀÙwe;¶ðÑ6Ô§îì2C–§><à(PÈaâôÉUfòÑþØf!8+»~þ}uø*DxÍíäXR–9E®U”.F'@—ÁW]ÿPn`¹, ¥ÿÊ£¬@âùp†ýÎ#1öè<æ5¸”¬ Œo8Ä=ìU–â÷“ÜÊ1•ÿ ¯üæy(péâM¹?ìÆÞ(œ0tÃ÷9#%~â†:Ú_ÀP&TìS¯D÷÷„¤ ,†„ËÁ‘«ïia”HXy÷‘½Ì‹1 Åí¹¡ôq!'ÊÈ d O·ši5b"ãeX·4NÔMÕoIÝÛ¶MëJÌÐÇ­¹w4–ë0Ë{1ý¶êb¹C€û#ö¸àüœS4òÐT8Ζ…oZœXÖQPEŠ Æe §=çW»d®àÍ¢Y’²i`J–L tæÑàñóúmÝ—oˆ ñì$$MÆä;ßBº.“Œb€FÕMýpÇÐRÎS¼j`«X6@Öd G¶eû(²Ræu› QDŽ×ØIQËæÌû´:\ºeçï:'K54´¬‘<}ìXœC—‘‘‘þ‘écÈo'àô-TQCkòèuòÄ—%¿·Â ý04 †§pÓÐ7ǽ­ûnjdP0)µ×£ +×K :™j7m;šñØvÒaž >cèëƒ]Vë* £qhïxv+0s/xl‡>áh߬¦f7^EÄe±÷eƒ%…2éÈ’­›T½Aýq’#§ËAðŒèJÚî|1)é¡&ýF;Òm›ãnE~ôóÜKqÆ›NÃ,éËÏé†óeç†6 ÂÝÛ'¤÷c¥)lúW0Ü´6V`'4ú 0+ð:Ò¹X¼a×ÙÝ)æ×ö·)ï³Óxä»#SÞebGëÆã08¶Ó°¦®÷gÔ¾‡‡y +f6Âó0ʇKœë w 6æbí¸8±] ¹œÜ ®è)á€GIqæôOk6¾@úàëMå„j}šùíy}Êë€sàõ{9›»ÿódi¿ó;­{…Y\á:Üÿ`}ñ +endstream endobj 1536 0 obj <> endobj 1537 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1538 0 obj <>stream +hÞÔVÛŽÛ6}÷W ²k.II”„tÒ½¤[¤èbãô¡«<(–´QkKEç‚"?‘ä'ú—!)ÛÚm‹ö¡( +?æeæÌ™3C ¸›<{!àn˜©RžAœ)ˆ8èzÖ̾YÌN.X43!ã‘¥,’Fœq ‹õŒ£Æã<‚Å'\Ä°x7» Î/.!aœœÁµEÆ¢ ¿ÓåzÝvwpÕ™Z7å²_-¾CO‘ó$Y¦˜ &pXœÏæh’'dÛÎ22nmŸõ뮇¡®à²]ÕpÓoMÛÕC¸øyv±˜%qŽ)–(`2ÊóXœq»Ø”d©÷1h&ãÉ>rB”DvcÞ1’[rÀÍ8Ã'dRŽeâx^¹biðrS•4“©+7–Æ<èB–þØ÷þ^¾ñ‡¤¹H¹ˆ”¤?2v‹ +—Ò8Íñþ5NÑ–îÝNµ]ø1L3&‚Ú›¼¿¾óÎ07–yNdK©Ò‘í8Þ±¹H~‘çá|‡„x¬›htÃ"µW;)Gò¦^¶M[P¦o©sƒéÁ¼A.ÐŽ@¦²ƒëÑîºÓàrߪÉ;]]Ý¡H°±`#«cäË3¼aü Ê])ŸE!v¸ .Þ—ëÍ*Œ‘‰{ÏÉ„ÀD𱮤®KFU]”,­V=TÁ;z®ê_<¼ç¸EÞjØHˆåÀ¹L¼Ë˜IGßËÔê§Ýü°©» óXEÄMAPv¸ãÉø:ʽí½Y+Þ‰]l y²“—Ξöo$e G(;s NŠï®ñ(ŸHòƒ¸—P¢)ÜÓøƒ2ŒñEŠä¤ }1}Õauµ¦pUàŸ&WŠ¶›^Cee«êÌÀ)ð'Ö=οÆ~tÛõUGßãòÑQâ:üj­IsÄ!ÚõU­±Yá™Úúunqëäl²ð:¥ø büø U«dÂDÛº.+lyt¸·ö†ÚQ#nBx +:(°!Zr~ëð¾:†ÏúK"§§tžãÌ,ã©œ€o6šúQgš" º×Çðè¬ß®*Býɸ ·ÝfkØO¸üÕð©(ºGÇ`}{Ǹn^M¢×µÙâªFr—ŽùVàÁGR^;è­ÈÞ‹ÚPË3ÔÝКö­-}îiL© ¼kÍBßRbÓëV•×ákóáœøiÚ¯÷Ý$=˜êÞZCæ;„? <*{\V”Ë«ç‹°AoDÛ>|â½Þö-]ÀX×ú¼4å1ˆ‘”©mJµÕ +ì¤çóÍN'Ä°îx]VÄ„ÙŒÌÝ—in(1¸q/ŒpŽ +ª +ö¡TqõÒfßW'¿¯R#òÏ_3Q#¥=‘×;ÿËé©ÎÊÕê5®–Ë_¼…me¼8Pf*’Æ=*˜Z˜ríx"Æø“ã'Äï Š +endstream endobj 1539 0 obj <> endobj 1540 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1541 0 obj <>stream +hÞÔX[ÜD~ï_Q6Ä5®‹]6odЮeCBa´2ÝîC·ÝØîLF ?h_ö7òª²ÛvO ZiµB‰º|)Ÿëw¾sjÛ¯n>ÿZ°}·J3qÆt–2³¶\íVŸ­W7·‚ ¶Þ­„d1þa™áJ2£bK¶>®bHá±Î[op ÍÖ«7Á‹—·,á{~óüãÙ«6WA³o‹ã±ª÷ìou_¶»bS†w뿯^®W°ƒÌP©µBd+”³"·Fä »t6莠SJRn¯§ý‹¢ëY¥Üßœ¶]É /·î‚U´æAò$ðÛ¾ô›Úͽß$Ý‹$Œ„J%ÝHí<2Úäøþ.!«mÜ›íyÓ³oC“q”^dçõ5µW†ÀX·c†o¥L [¿°ök=x+çÉ¿™Èó0ʸòHÆÂ]&,Ly06¬¾üß·þu…·”;e¸ ÌÅCîÔˆBáQø¿5õÓý®ö€«!p‡`ìØë²+Û0R„··¡TxXnù¢ÈŒ´E–¢ ¯jHe†%‘9yšÆC±ÅäaLÎY¸þ‰$þ™#¡©Žyî8$råûÝG¬Æv“K8“¶×ö ^x[R)‡Ï†¢ýr‚èž1A›ìÛLt&yößèL²ø=:“\?­!’ÚF Ï€<ø±_llpˆün«CÉž7ÇSÑV*ÿ›¾:Tý#…md´ ¯’j­½D[ÿ‰é(-XßCZ±-k0&DäÜ¥‰V¡|œñÌò˜£ÿÐÎ wkÄ$[ê¹0NêQû¢ìª}Í^¾ÛÜõ¾d·¡L¸&Ä …|éàˆKѳÈÛBÄ Öµ®6„á9Œ²¥A’/•‘;'Ð¥ n|â§Ú–ëáà.”îñ¿‡ƒßóJÚ„¦qv1œïó:#©y‚`QÅȧ±½“NóÆfœ-ÑŽH&åj‡\u¡Ð fNŽ©Àɼ4@EP°q´W¶!ö©€ÝõC¹ÛâµÛ½?×:]$`Âø3‘‡P +<û66íÅTVÔ[|ˆµH.,4ôßSC,€f f°ÑG¡Hàâ#³ÆIƒë²%DuìÇÚ¨5•eM©8:ʈœti²Ì¦R>¦Ÿ•›âÜ•ÖL²ìb§³H¹`A _xÛ5Ô³·„2ê™ÈŸ…1Øcˆv(Ú}IXÁ3×m-Z|Š?p£.apåó‡ IxžO7º%=FG´=8¸‚=\*‹Í=Û4u×Óc¢^êø‚èúKŠa2BéY¹»¶9² +#¼€%zÌ ‘°‚Œ w|béø¥9÷§soc̪Úúæc´å7¡ƒ›þxšE`ÌËŒp„Ï*PÒ–›ÞâH¢<†9Í;<¤F|4 ÁS +K¹àÆL=È ·6O¢˜Q;vî¨$ÇäR@Sãêðga7º„`6„rÂK’)©$(È^B½ŠƒOJx¸²"É“…}їDzîe“Íì°:!Z:¢¸ ß¾_/Á)—˜ûЋú\jÖNµ´|'ÁcÝE9—±—3­Ç¢à­îº€€_!®+èÊÄy™«VŠ>·E «Ú¸¸ñsDÁ3ׇœã8eÄç×ÌÑß;ž(mkÀ'h AS®)â’OýóÏñ¡¤÷Ø1;: XÓ"{8«\éÆ<‹“'™åf£ÍŠÍæŒAAj’`óÈšÝÓ¬l¦hy"‚*ŸL +cŽ áùÐw䀂oêº7Ó@’›Ye«øÂÁWM_~ÂJs½$'\¥±Ü¿G(iòhÎìZŠ§1GÊîTn*„¥£bR‚b¢?¼ÿÀåaþJd,¤ :t/Ñm¯›Q®mgÁ36/r}Ñ•o<Ó†©«C{ŒåÔðéÏ1ýQå6ý‹Ë~Å.FûÍ›èú#J± …ü6ŒÒI¦…M«pŸŒÆ!ÝF›«¶1ÊŒü†‰ªC~˜Ž'Eû€o¢f‰cç—~Á mÁ D”嫪~ù®o‹»aëìíëæLº›È¹¿óø]€å'¨g +endstream endobj 1542 0 obj <> endobj 1543 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1544 0 obj <>stream +hÞÔXkÛ¸ýî_A`¿H]˜I=¨`Q ;3Y¤&ÁŒÓ‚~PlzF­-y%¹Îû‡ö_ö\’zXž$ÅEQ$Ñ”D^Þsî¹÷J°‡Å‹Ÿî{h©bY¤Y¬S¦"Ö˜Åvñãjñâµ`‚­¶ !Y„¸q%Y¦"I¶Ú/"¬Â£8WlµÆ 1[ƒë›×,áš]½¸úþ{ö¾ …æ*¨šb¿/«ö¦êL³-Ö&üûêØI¹Ïâ„-iÂV׋%-IKÓ RãÚ¯Ë —IÀ®jºìE.…ʶ®ìü‡®Ü•Ý“]þfµHâGLy’2.UžçŒÇ:ŠbwØTò,íïà \Æg÷á$ò‘²7á„ÁE¹uLÎp3Ö½?ÈV){«e⬾-ÚŽ…Ë”gÁ‡Ã¦ ‘ :³qVÒ5ªÃx÷ØŸüCÍúÑ?$Ý5 «RI?dì&5¦²8Ëñþ{ ±VS»;›ãºc3ÍE`ü’­ß¯®üfËú*"ïK™f½ûãxîÿ_™Èóp©yäK 7LX˜ò4`¬¿þç—ÿù£ÿ¿‹? ;•qAÈE=vj`¡ð,üïšúj·cwåèš¹C2¶ìδÑ©ˆoÿ +¥Â¤Ùð>2}leÒÆV +‘ùŠþàÁ4K'Úcy™Ò)#wÀW:>÷¦êZ//‰[ä–\)+-½,7áê£þ€ú£÷"+j"âZKO}ö¡5- E”§IÐ=7Œ‚‡ +DÑ‘o(2]†ý¬‘Á¦Ün϶•<žlÛƒ¦û€c‡Ê +ÉuP„ø³g]ÍÖ5©žaÖ Ú•,’ÉBÚ/”Á¹v¡-T³eÛPͶ×\'ñÂ͸]Ú +©{,x{fO'F øõU k»¢3VXYY¸VÅÞ9Ä]i]ä>­U.’)C©:¢ +ÇÆjˆ·%mU0c5iK2G*žpÛÁuWŸÞÒÏÑRùÔ¦t°)˜®R­ƒ5rê HLœ¬Ã짦§Öôs#%2€¼ÀóîÝ_fQ§g ~2KsH”J.ЉÅKÇZqðdJ8 ÊgØ9‰²uà%TYæÓçÂÏcçUÔ®Ffýá’I¦òf%`çµô2Ý›qnßÄTøœẫP¡xŠgÜ;q.ÔèTçÝ̺ܖÒmÙ *½…Éu3°ŽlJ/lr[ŒlŒr˜Ž–ɯZÖ7 +Cn³–ÍìÂ)ÓÌ.‘¶ú}!"?“Ôx*»ÇÉ9ûÃéáp“ gó 1VïÁÌ~aKèðÙéÐ0ä³Øö‡JbMŒ¶À’†=…2B¨ÈÄuÝŸ*ÑÏ(WŸ=É(ÿÉœg웘š$U9΃1Ô +XÿrÞßjñl4¤NìæÇ'â é³|wÔ$ù#¶ëƘŠ;ÇÔÆžñçÐQ{HBd–Z“1“;Té¡ H“³ZéÜ*¨Ô¤8+®¨LÑzRåzm3ªcF2(¡¨m7$™²êL³ÔÏHZÏW|Å(É×fS"M8©gp~lØ'„î=¡`„æ_Ö\K!x&&PFß,ºÒ9xcy0_^õyŠÈô€YO:£ŽpˆMÙ˜5œA΃ëžÂ<·…ڌʮ8-ñ~§3Š|UÏ/‡þä^ÌvT^€Ò bve4ÿñ6 ¥Ýñ°’¤òi®ÉHØb^ßL©ûó±\ÿó 5“cKJاûÈ÷o:F zɤÝ|*¦ã^ŸžiÙòük Úžê%ØÎM¡sCVË\ïv0EHQC <—qÊ“ÌKrnË»K­ê3gáz +éÖAÛ!»LÊ÷1¬çNßJ£MÒ®›¶#4Ô2&:QC=težF7Ÿ‹ýaÆ– g$:ëÈ¥°oŸåå¾z´­%šÚ%ŸÝ®¦ZL'Jd&”9ÆŸé‹N‚í7ýt0¤+6Ôg „šk‚MÓžlµÕOW-Œ*`ë™/ªD@FÉom½>ŽaoqH‚­­Ö WÒáÕsý˜ÍïÌ7(’ÍðÝɱ¦›—ÞðÕJ:3rž§î$ tÆ„FÝ$‰¸L©&`~GPTE˜{3äÔîäÖǬ Ñî±èØÉØÂdÀ4jÿ­Æ~L(SÑ©@4ó¡Y«ßaö÷ ð fÍtú»{[ÄÓ4Õñ»²%`ŽÕNº¦Ù¡ »ï¶Æ<Ç´ÛbË>ÒªîH?jLÓfËÇå¯Ýû¸õrœüýxûîê˜|õÓ »}õ·›;¶WìîæjÅbÌ¢yˆ“˜)ˆ—Σo¾wûnuÿ§böúÍíí}ÿeëß …. +endstream endobj 1545 0 obj <> endobj 1546 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1547 0 obj <>stream +hÞÔUÛŽÛ6}×W ©¹%QÒ¢ •µŽ[¯lØr‚¢) +Õ¦½jmÉälÈå/;$åK.n¶H‹¢0`‡sÎ ‡‡” kãj0³aÝÜŸà +µ0VÆMf\ÝÚ`C¶2l8ØO¾C em Š,„º¡Ù j»=?›ýä<@|?“Ú²â˜ÕºÎ·Û¢\ðlE½ÊÂú%û39:“C|׃žMlîAÖ7z’RRKƒ:'îÛb#¬žgB\Éa»Ëk«gfÑT¥òÏÛbS´Š>É ÎˆÏq“œxsÂ0┺z»ªj›@˜ûÑ"öH8j{pìP¨ú.ºÁ¡²TÆE3O=Ê›¬'¾9ß-si1³Km@!ÇÐ,-‚µë°».¨^ÜwALÔöp¯grÂ\í Ñå»~ˆø šÈUWze¹_´ðÊòb›¢£lº|UÙ%óR­¢²ùŒqÿÐ}×ý´ýÀ1[@\3ì1jkÓ‹nƧÿyèÿ—ü8•gçøÄ–'GgçUhw*üwK6˜k”«/ÅmÙ(Ʀ¢x9©··sÐ)–äp1»»å3u·8¾1Çç'˘~Br}Ó¤øÀ}|†ÜÓûC™z¨Þä÷p3Ç?ZÜŒ Œ¢Ÿ’)l]˜&q.z=\Ï¥„ô${rÙ¹ Læ³—ý1z_§ +”}w9ö¯’}7Eqr—¤Ù) /6B¾ܼþ*J—†Þñyi‹AŒ^/:pùÈ?9ýGÀ¨Âw‡gñ}^®–oòÇF‚UÙæEÙ@ûPáš6oÅV”ms-—Û{¡\h*/ä +U ±Û‰¼Ö³Š’,ÅJœN–ê“íô‘—K@¶rH6E…^͆TÕ¾•\ä Ñ;ø¬·ñøn"ëx_Ø0OUƒúçëýd6àz +Ûý‡³×ëYÙï:æÅYÌBl6'ô…”i’A)›ÒbÊY³8Jáõyìëd8x™Éïýl<ŸÆèM Þ ÓŒ§ÃÁ0FðJjªÿ9íŠq4m"ÁS˜Dz³dšÂM4ŠRlK—Ejiâ][ç¿.ê¢Ù=ªtèÆ.Ⱦº•oÈt*ýÙL)A¢à`S4xs`_.E ‘ꧢ°ªÐ«Ôn-ømßBYµ ä‡î“jdá‘_Rû ÃdKߘ0¦Ð,òr‡ð7ÖQ¹¡‡ì CÛzˆØ„Ï🠖µS +endstream endobj 1548 0 obj <> endobj 1549 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1550 0 obj <>stream +hÞÔTKÓ@ ¾Ï¯ðqF«¸ó~¡»E V»Y.ˆCÔ¦!R›®’â'ñ/ñäQ'.¡ì±ÏžÏö(hØæÕ£‚f`Þ@lô`$ô5;²—%Ûì((Liô‘P1 ÑŒD©¡<3I((m2PîI‘ÊBù•}à·w;pa»ÙÞÜÀ}/TDÃ/M_Ïm×Àën¬ûcµ¯ÅÇò e2s&ƒÁ:(*ï ¼eE†ÌÐY‘æ'ö®=Õ¢p¶—,ÎÏU/ +y;\ºÉþ4¶§vü6Áß•ÌÙDWôè< 6)%@¥´óe½ÆàW?±€Úþâ'’2Gfr WŠÒDLrÚ¸ò‘kÕz­Z»¹ê·Õ0‚(<þô|¨²¦ùXfÚ,ïRñsØ»%¨ßZ‚ô,¥rtYãu>h·ÉlHôÿ=©„Õ_fÏáó~„÷"DT¼^ ‡%ߥ[’Q³&®df_kVú­ýÿï REDËS¡¥šU£ç«üsñÏCÿ_ðë1÷ÎT¹srí¹N¡Z¦ðï–úât‚‡¶¡q y¸…¢aà¡jÚN“çí‹Ð†Œõ×Í\v+èi·<=2Órý`FGì÷ +endstream endobj 1551 0 obj <> endobj 1552 0 obj <> endobj 1553 0 obj <> endobj 1554 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1555 0 obj <>stream +hÞÔVÛnÛFú¨¯¤/¤S®v—w¨-àú¨Hl×fbN(q%m"‘ +IÅþ¥¾ô;C.)Y‘Š @QT´+ÎìÌ™ÛY +˜†¯îÌ«AàBÈ#ð¢\¥Ì¿$ƒá¥Él $püâ"¢¹B—3.!Y 8ZaÜ‹]H¦¸áƒäqð`_\‚Ï"8ž½| 7¥-"æZżLW+Ïaœ×ªœ¥SeH~\$ÄA0Ü A!¢n‹"n@Ä€Z^ÔùvЧ”ä¼Ùù­÷×iUƒí,´Þ®³”vÒªUÖn@Ó[¹Í|˨½1Jåta”d»ráÛŽpI¤ß>ø(ôÂÏßàm•E+É6ÓÞÙaÄ„¥ŒÉÊø+rã Ó„ÍÏJ„œ7ø=¯‹„»m$€ˆcÛ‰˜gÅŽä¢Ýú`,°ºõÛ—ÿ\õÿk¼ÿKµsC&¨r¼«Ûw¡0]øïB=].áVϱ]Cjn[`3Vp«*UÚŽKýöÅ–.>TÛ²P6Cà@5ë8€4f¸øx‡<x7lœ"äœuj'Éâg´©ŒgqË!N;¾÷'£zK†íLÞÜ7,”ݱn蹑PDRj¤¿íøôãèŸøô#~ħ{‡}bŠ¤×dÇCÀŒ <Ѳo*ßß­J3UBšgp_j$;¸xJW륪(s=©m©•¼{ž1ÚQÀ3NMº‚t½Vy¦Ÿ`Zäuªó +”lZO¶ƒ Ûº€bõBÁbÈ ÇƬ­,­®ôð×÷"ï û'ÁÛ¢r]Á‚h¶õ¹ªô<Çx¦‹4Ÿ+¸´]a¶°°ñdh­l„QÃ{JÃ{Ø$¢Áà`±Ý˜XOôœ'L”†ð(ahHDeÍö¥Õ¶ïð24÷U¨7”6îñÝ‘Ga§Ü$x{oDûu3Å2]Þœ£ëLœ=˜Çñîu šyýEù-è¶ú À¾¯D«ÚŽGÓO)’¸Ã$µJ[âÍÐ7ßØ”TfÁc†÷ sô«=H¾E@y “áÕµNçŠêc¯¹"45éÞ¢ÖLÔí‰>ßD ý¿Éð0I䱊˜¹^Çí“ø`}¯óércV¦àǪΖzÂ?oïUŸ²w~@Q^ròµ¸Ä·“ãòZ¯Ôžt–g +¥3¸_¹rG‚„­s”ài:ºÉ5:~˜&y†*0DÚ*êÖœ {‘©YÙf-ÖëǵôéR§ÕV ‚\ŽEn‚c[B†Új–n–õUºR÷at w{ª×›ú™æŽÑá^- Ôœ¤Kø’–:×훤¦šV¸¿¾8Y±©GÔ‡)¬ÎkØTä³> endobj 1557 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1558 0 obj <>stream +hÞÔUÛnÛF}çWL 4 kµË;Õº€kɆGd¦.M.e&i,©¤Fê_v†K)’"£M€"(ô°ËÙ¹œ9s‘€™Ñ?¿0« ߀‡à†>8”4rã—ØèŸ 熰ã̱!p8ã6Ä ƒ£ÆÝÈ8Å .ÄŒ×æpt á´úì¼T–™cV3•,E9ƒ‹²‘*ORiýÿŠ‘ÉfŽ=Á„ïA<4zè‘â¤íÍÉwëz"“L*HÊ n”¿5"ÆÑ„“iÚ­f1`ôg²¸ŸËš´F±á¹æê3Ïf;QsCÎ]µo³À_½#Ìv·Þ‘-"Ëi‘5WQËPøè†+bz”¾§©¹L꬞ÏóÕ}–ÐÍ6™é tFfi1ÏìÔ^tJ*½ë”l}ráY=áø6}Øžâ›Ü Bû—xE_ªÒ/Ù2mà7+™0eç²îâUe «ÖÖ„SlÛV…pÝU&ÜÑ™ü"Š¬^È\3êÙ\è«–Ï|`uþû㻫þ¯?©vNÀUŽ¯j笻Pt]øßB=™ÏaRÌ°]jnK`3Ö8µµTVÏ¡~{oÙ +eÆZÄ8™Ýlv;[>n›õ"Šc[E¾ž4º ¶àBr?o"n·›ˆë$û}ˆcùæðb2ˆ''ãëË“øâj WãU;Œc$¤éµù¾*2X öÃe5;[–iSTåÔL«6Eù]¢A*õ¢žM­Ÿ§Äã¾ö€4ä÷ +5‹²É§f^-›#8M&W“ä(¯–¸±ÐC¥ðC=–G QÞùü±õþÔ0?ÑÎÚĸÎoìM¢J\©[˜QÞÁþFÌ7'“ñÅø|€rÈ÷ &¹üFÔ'M2"‡SsjÁ~Xˆª@Í=L*¢¬YªRf°Ä–‚ ÝAQ©W˜t¥”L›'„ôëᵕ–é»øá^NÍLæê4™Ïo’·Â7ÒGQ9hú-nÂÏÇتOŸB +?y⋬‹Y9*³Ó[bå ¶Õ€~ŸØ½z¾)ýrŽÒZî*ç÷Ô>ûú@hàï Á@D*ï*‡[*j½KE"~¾`ËežÅ]²ŠHß&J³D©BzDê!dËÅâáI@q^¼Âª ©hËìQ&S,ŠrœÂ ”›> endobj 1560 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1561 0 obj <>stream +hÞÔVmoÛ6þ®_q5P@Š#š¢Þe@ëØE‡,1¹íPƒ&ÑŽ:[2(¹ëÐæí_îHInìÄY²buwϽ±ø6%”A´Ô(z!Ô mˆ8N[ µëJþ+ 3 ŽšŒZõÑÃ#žÐ>þøßMŸ®óÍ«ìíKvŽ¶½³7Sh5Søï¦úb±€‹lŽãêËá6,Æ—¶äÂ0m9o f£§DeŒ‹Ùì–ÏÔnyxÙlî¡(bõõ’Ы7MÐÚóñ>r¾^D”©‹ˆ¶E‚ÊLOâ’ë£Çj-r˜êS=¹ŠQ!¦Fç²35Ž¾½K=ÉÛ.ÜÞnàÑÁ-”³5:»æî…½½æí…]Þó÷¶jCÔõ‘¼F#-70…yyþj²ÊŽè׈ü:ĵ«½§U·ÞëY^AR ¯åj6ÕS>ƒx±ø5N~‹þXq”ÿÂ!9Tdƒb¹*ržW(FP-àdÄU 2¡tjÀç;û)ã A¶é¶M(Z£M®x‚ZëÙ7Ù ëE»©¾(òùÔX§ðìÖMRa@Š§¡…@fvyŸ­$i˜ +–:+ÖÕ!tLx^âWVÔ9Ä¢Ìïo–ŠâªßÏRéëðŽÖ‡mŠ‘£~?—\âne‘Í$ËÜ VõQÞ¿ŠË3^•5²!s7謈Ïàèdð]ÝÁ]oý|½Dqë -»Ý©±· +dç&5Šäf‡·Þy…9lÕ§<]ߘӿ+6+GÙ'ž6ÅÞ]ëj»a]¡üõ»á V6NÏ•qÍŽò~ô-)ž ¹€*ºøƒ™•ƒâ#ëÕåço†O°Wm§„²¾ÍI_îÂ]z4¯céåK€¼ŽOQþbð$—à¿#v’¯nRûùaÜNÎP>>Uìvöíœú)Ú‰ŒŠÛ¬bÜg¨86¨Ž¿føöåKû¿ë/ÈÙn— +endstream endobj 1562 0 obj <> endobj 1563 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1564 0 obj <>stream +hÞÔWíNãFý笠E"²!1ãØ1t+±`KvSºÚì7ž$®;²ÍnhµÔ·ì½ãq à ­ªBÄLîÌœ{æÜ&Ê^w`À$W \Ö»ã€Å ãÊXy({'ŒÃ†¿8W·Lp-¦3‚¹ÂEg¶gA0 3l¾*ŸÔcÿÚzŽöŽvwá}¦ÝRÓIÎçq2³¤àÙ8qísð3z²JO¦nYÐ2tÃiCp¬´‘üŒÄÌ춀îó0â„IW™ü®x:Ã#ŒÑNSìŒÑøËp¾˜ñœvùÒ¶=¼«£·ÐMËó<ÐícvykÇÔ]§ZG9tÓ^[GµH,K,¢+­<¡¸hw*aZ’Š¤ß.¥9ó´–£»êå" +ifªÊ Ä4zj¢émUn{'7e£©Üd–#3ÚZË°“¾˜íÒh£Éµ]Ï¿Ç)bei¹] +øEs;º¡r ™Ki"aÔDLÅÁ4· +„mW7aVy“¿Àð<­ÕÑmÕk™Ì(§mÐÝQªñùþõÿ ¾úJ±³\ݠȱ*vÖ* ™…ÿ.ÕÃÙ úñÓÕ¥äÖ LÆ«6ç™Ö²(ß¾h¦…Fé‚1V¦¬-×µå`·Y5¢ 0ËþàéžSVMp·ãbC²o;3E'bÕ%A0““¡:J[?E|¥óEŠö„'Åþþb†hŽÓCu¨Á¸ðFc*ÀPj·ÕÐf zw¼Èâ¤Õqz]4·¶ÑÁ6~rØjŠÓÁÎC2òG2BsIjš‹_‰Ô?€óñY8iãÉÈîéEh¿£WOl&\´“V¼ýF=wå+&rPƒ¹O Ó0¤×ÙˆÕ•è÷i® [»@<{—ý#¿»R!Fóò° y°þ$¯.Ox’üùLn]´û~ÿ0Xg‡æ»Nö'žçá\z9¨uðD»@™‡£,­ÎC£±1Î;ëh—<Ö6Æ^íëê?Âì•)rű©ß•"W†³îi@%¹1E¾®€_”"¾ÿá»HùDêûÃAà÷ï&i¶–øE¤ú|§É­òÏäÖ'nݳÞÅ£5•Ip´nÈÙgò{›^'Q.k WêË 9ÂÎrÖ„ú³œ6ɼs3=ظ=ÿàõ«õŒ²5: :.œ4ÈmƒÜ6Ð-ΦuѨäL3¼r o€@ ?" ´#ˆww©yÀƼ ´S0d$¢êCz6 ‡ÉÓXÎ>ÅŸÅ-nÄ –S1ÜÐðÈ5¾½¦HOÃYúh¯¤èÌø/ù[Zé\\6£lB‘.ê) Õ/i!濸PåãúÑ„Sèf¢Œ¬Qá7Z,NÑÃÆè=(†S´ž÷`ë-YJ1HÇu¬ú†:è›Þ?€‰AMX&‰HJ`ê亮¿² ÷Ñ)2Èõ¥wø§$hù~´Y´7¡þUƒÂzçÅÓï.·ç©%Uiÿlž‡7<+Ïãþú[ÍÃåj[­:ø~ú·‚1Äz +endstream endobj 1565 0 obj <> endobj 1566 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1567 0 obj <>stream +hÞÔVkoÛ6ý®_q ¨ÔD IÉz$Ý€6Q‚ íÚJ·¢Ŧµ¶$HòºbÈê¿ì%%ù')ºÃœ¢/Ϲ/^™ÁT;<2˜–šcK=°=, +…Ðbíu¨ž1`Æã@ñÌs‰ÅÁµ(¡¹F‘…PÛ· ã‚2ÂÏÚý48ƒñàäðdú…Á> endobj 1569 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1570 0 obj <>stream +hÞÜ–ÿOÛFÀ÷_ñ†´Éâã|vÎqQ+‡jš§ÉØ—à’ؑ픲©Pÿ˽ç/)Atbê¦j?Üå}½÷¹wÏØ03vÞ\Ú0+ å€'†à8 +mL½ÀØ9´Á†`jØþáb=îHðÁ…„`aŒÂ…ë;ĸ¶ Áñ‹y0:„ÂþÎþö6œÌrÇÌgE´X¤Ù Ž²JÓ(Öì×à39M&É,›ÛjÁaaDÊ×;9¤Øuè %º€(Kà]Á‚÷†Ïºr"KY[¦˜F£År®K²ÆÀõ±VÅ +¸t|ßî…p›ª•äžêôˆƒKwC´–S+‘Æš•_ò•î°cµGi?hÐœDeÌRÜ3'Ë$¢4+4HiõÍŒñÙš¶FE|ÓÉfö€Y¶£$ýƒF¨P乞þç¸ÅXEÞh’U\Áó†Ü6u²lóåY› o­¾A÷ ¥òº‹pÝ®á4•|Û÷™5ä®é[RØÍvLqetëó—ïnúß ¾þIwçxܦ›ÝÝ9ë.´Û.üwúz>‡‹t†íêQs3›±ÄW[ê‚YõÛ&ê„×'Æ—Ù¾-OÖoKá´Y¢ Í|𹯚—F´V$÷Ë$²žD¢)2Í*È4Sf5Žzš‰žûÑ|~Å·Êï—ú7 qâ<ÃWßDEÅèT{ôÒ žú¥QÁ* üñå „"ÆÄ3¾Ñ1ZÝ44ãíÖfA¯Ö¦SMT‡æ<Ïf![%ðÃKXQhŒK + îFE‘¡ùÈ`ºD› Â*¦ùªêÖ?–°ÕpÞG^…®Vä•XËá1?Ñ4Ä.liwS³F×P+Éñº »åq]ã&8âSôÐïú!;”6ø¾+»”Î!âUq…_„W/ñÓ¤B¶iD­kN—›ˆQºMòËÉÞxÀþÞÛ†9Õ‰âoÂþõ,§ Èíb5ÿ;Ô 4Я(ý0ŸñSÿzr\LNF {ªŒ “n «ùŸƒ_ŠÇC‚£¼¦NpǺêÑsÃ_$ž>«½wvà­ó‚<ëÿZÊ¥ŽÓh©øy< S-Hûð¾·}ø؇{÷©üß©V"Ów'Ñ=NUen` £¢ì<ªnz˧t—õS…^¹ûõìKôÊ÷j™f¨î}ÀuC•¶\.oR=O —åÍî©0ïÒBS˜;\w;rëûù‹&} øÛºµóŽ‰-úQà=ï_7iŸÓ´{go&—ÄÆDðóù`ë+Yºõªm¥/àQyŠâUYçiš"dÏJiÁi28>;odkú¨ßñ׃6¯ï‡xæ‹%½ø 0?íºðŸ ÓMôS +endstream endobj 1571 0 obj <> endobj 1572 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1573 0 obj <>stream +hÞÔV[OãF~÷¯8‹„Önˆßc(H[ȶT”"0»jë>Xñ$1rÆ‘ípÙÕþ þËž3c›d“ÐìCU5H™É¹Ÿï\ &Úá·L*Íw `p>8 J®µ"íð½DcͲáÖ 0‡™Ì†h¦1´b27t á…Y.DÚúùð=xæÎÏz=¸. k`:z1)“Ù,¸5/ÇɈF?£'Gy²MǾeZ¾ѹÖG‹äg$oö€lKÓ7JvAf¬BÅk¨§òl–ÕPŒ‰\ˆü<Àõ3«`Ž;(Ï’Õ®‹¾[¶0*¢îõŽ7°²1ÄŠ§'àu±¬JÑ1ž—™¨Ç±>.õìÅ12Ä&±EAY%D6|Ù@[ó Ã~E üÆÀö:T R¤e¢ª1âˆ}ll „>kšóLH¥ÍñKX–uHò½¨nŸ–¢Ê>ñ´1°#`=¢ßþvý4¼½ø}xËØ¡Æz<°“a_6= !ÇË4©® +qÎÇÉ"¯oHÎ9µQ–þY‹®~½B:>qïî.£›»Ë!âÇ‚¦BObÉ ù ~í jc´ZG»À½jûÿØú¨€&W +AÕ{h«w¼Cô`éæGŠ˜]2kpÛZ{%˜'ϼT’°c•U¿v®–,ìë~*cM ¦Ë{ÚYzÊÉ òZ³$4¿~ú4•„W¦ Qœî” ÉèÑ#‚µ"õþ)}GH~žó×ÚåÕ·K-¼X¿W˜Ü#&ô8} +˜À¨\'Ô-ÓfåÝ¿‚ +~æhMÅ(mÐ,’™yRã¸Þ·âÿ0 0Ú]-Å +endstream endobj 1574 0 obj <> endobj 1575 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1576 0 obj <>stream +hÞÔVmOãFþî_1Eâj—dY¿Û NJ/¡¤J! + èÔT•/Ù$nƒÙËWÝê¿ìÌÚ†ƒÞAz(­Hv3;/Ï<3;Ž sc÷‡S楸ò¼(—C!™ñ½0vm°AÌ ÛŽ¸ØQÈ\B—348zaÜ‹]ÜpÛqmülv{‡à³Þì¾ÙÙaaÙsÍ|^$——i6‡~¦d1K&ÒúEüˆ‘Ü*’Ã\Ú6³D×h£GŠ3Ñ;'"ßÚõH&SY@’MᢰÄoFÌ8šp2"MGk¦z7Éåj)KÒê Ã÷bÌ5`~Ìqã8æEœ{UÖà9G:˜ã=8G¶ˆ,W"w\Åš¡ðЋbÚ5”¾_Q3HJV;`¡y¶š&´sL%§ÕRZc3³˜oÖj?ÕJÅdQ+9ÕÊmßjÛnàÐǯ„ŠB/ŒÑ~ˆ[ôUäÕÉôj¢àÜ +#f›²vYÖñò¬†UÓ5áTÇ Â¦ž×dÂÝ*“?ÁŽc«1ό۷«­VÀ Y×_þsÕÿ¯ó»¯T;7d6UŽ7µsïºÐ®»p³P;Ë%ŒÒ9¶kHÍmÙØŒ%ÞÚRVÛ¥~{o9. +å”iÄx3ë»:ún8mî‘N5bÕM£ j!$ï~qGO"Þ$ YµYµ_§YªD‘¼—E)Q<6ÇÖþ}·û< ÂÛ]/Ò¥Ô5W‰ZÀhË4Sc ]Nå,¢|o/#—7ŠœŽ-øæpRõ‡qôkNŽ{(ýCGßý-¾&ùU¦vvöŸPÙÝ…nž}«à:ÉP¬@-$,ÓL‚Êá}椽̳ù^Òf££Áë’ûÏ £×lU`ʳ±‰òY~¥Z°5g[ _6¬iÖøSºá‰Ãò:U“T% þŸýBá.Ò©Zt= 6‡}xÒ?k`×4Ó\¼‡8Ìéa¾ºi‘ú«Ûµ`~†ƒ± HþãÂä㦷›Lúppvzô‚Ì—Wå‚Ò§D4˜>¾?¼˜‚mê"¢f¡6I„è ×zb|²6…­£ z/@H椮‡ÌùN7N‰d%‹ÑÕRnzLžŠ·M"øKð/ŠÒ-¤ +endstream endobj 1577 0 obj <> endobj 1578 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1579 0 obj <>stream +hÞÔVOÛHýߟb©’}eý#vÚJ-„+(jÌU§óéd’MpH6‘í”"ÔÔoy3»Ž‰s†Ð“N§ H^Ï®ß̼y3¶ ccÿ—¾ ãÜð]x¼Ž.‡L#ã}dìÛ`C42l8þáÅîÌu p9ãD3ƒ# +ã^èB4À·=ˆîŒßÍ£Þ1´Y÷wwá2³ìsÍù8Kf³TŽáD"%aý¢'W{r˜ëBËf¶ß†èÈh!"ù¨•Ó!lýI$C‘A"‡ð9³¢‰2ŽpzˆN:êdŠ> ÷5™-¦"§S½Èðø˜­ÏÚ>0Ç Ã˜×áÜÓy+*Ô&²Á¯¶‰dÑWm"U¡"(Üô:+^Ze$eômÍÌY’`µ|˜W‹aB+Ç,ÄP/ ¥khJ‹µÍòØyy(Ü”‡}åvÛjÙ®ïÐÓÖÆM„øü%.+›ëárPÀ¯VÐa¶)Jȼô7—¥3,š* §28Ž¬êày«L¸«3ùvˆÞ:Ì3ÖÃm½lƒå3ßX]_~ùÏþÁ«[ª0›*ÇWµs+Ú¥ +ÿÝPßM§ð)£\·e£slÚ\dVË%½}±bÈTÄؘeoŽê-‡M5‡¢ÈÑã!d¡¯;xÚpyƒˆ;jñU’ "+Õo´ÈR‰æb›£ù²Øƒ~ôÛY^ aí{‹ÖÛ¡¥—IqÓíŽEÑ/Ðz?±[±uðØ mîÇO»ºÎDr‹fýLôsÓÑoOí5o4[UNk ű¤TVÑnÌ—²€7À«í•K“úN-1K—q,F™åþ>ôàÃIïìè¢52‘Ž 6ñ…æñBÝ®\Îú7)šÅtˆ†\s áðĹ|}øóèãE¯R ~ý%ÀŸƒ(N +endstream endobj 1580 0 obj <> endobj 1581 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1582 0 obj <>stream +hÞÔVmOãFþî_1B‚Ú…lv×ï NJPR¥…tª«Êo·ÁŽl§Wõõ_vÖ/ÐÐösiNu"íæÙÙÙyž™‡ÁLë~{Í`–kŽ .õÀò0)dR›jß­{΀˜jŒÅÌs‰ÉÁ5)¡ĽFÑ ¡–o‚˜à„2 ăöƒ~Ö?›xð¶ûöðF™Á“á/'¯¬ ÛA¯eý¼¼Wûˆ¿Hº"¥·qøª”.¥ñ•è!,W—[b÷ºt7’¨ëT£$ã´‹8M½.²Ý t78[Ð%ú—¬ßÅvµÓ] .EKZëÑKuÉG) ôƒGpðØšÁßÞ:ºZØÔ›, +†~w+Ìùðæúbt…ðV:_¬òùšJGÊúàãVÅZÓKõ^ƒêðq·Â‰Þ¨õëõ%'¸rƒìvûøáaKÆ7Ã>|ÎÛïÚ¡—2¯ò‹¼ý®Å»Fü›ý§ öG± +endstream endobj 1583 0 obj <> endobj 1584 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1585 0 obj <>stream +hÞÔV]oâF}÷¯¸ŠÅ.Ëdfll m¥„8)«„°Æl•>80oÁ¸¶ÙlTíê¿ìÛœâª]U%3>s}î¹s3åøbÀ`–(¦m‚Ñ4A§ eªœzÊñ9ÞTa(þášÑ9X:%”ƒ·P(²jØ:xcÜPf€÷ ü¢ž9çÐ Mèwj5èÇk]]Îb±ÂtÃTÄS,´_½÷èIÏ=q¢ëPg„™ ðΔ:2J?ãlÇ›’;£v…?1øánbÍû¤Ø„â+T¾$-yf p¾ø‹h.iåxŠÉ‰eb´&i˜@¸nÛ6£I©‘Ç¥";Äln”1YÒ@Ï1›TÙY‚lÀC£¹ÎK½PR¨o䙹ô“´ºI,uM|¹ãj*&ù¹Új¨‘†Z˜]Fñø¾0âùJYC«3Ýäò›9Ȳ ËÆ÷û¸E®x™ŸLVã>jV“0U”IáoΰhYI¨,禵®ƒa¬#¡zÉŸÀl[«7‰¡ÚuNY¾m€fSX¯Õ—ÿÜôÿK¾y”µÓ-Âdåèºvú¦ YÑ…ßVêÉ|n0Ãvµdsk ›1ÁK›ˆX«ë²ß>k\GPLH¦/fq·,žÝ-‡ÍfyÏǃMl3¿irƒÖ¦…óÈxD”gƒˆ®ƒ„LY±)ÿ +xÅA˜NGêt¹JßÁÁqïöÒ8œÀÁ»§»Ð ¦Lg5Öõ/ªÿ8Ó °ŸÞ·Z3‘Òǹ©#m¤µ3vﻊ¤w±ð«ôÎ×7Þ°Øw¼ólÇÁkðË p4cŽuBgë$S©hŠ4ObO¤­V¸Zôqž™j”ä9„?v”h*­bäà mà{ȹ/Óå\m),¨Õ6œÏ#yÞ*5‰÷Ýë¾ãz·p˜`Ãd>~’¡ƒž¿Y4Áîº'A:¾GÁOK¥ƒ÷!C°ò+û‰€#÷¨•kExKîá \çäR65š—Ó*= Ú[-îD<Ú§²ôË:áö~AÝ‚º=Ϲp\i^¤nK“¬¦îÛhìДÀÀs»½ iþRRŒè2úèÏWâ(ÂA¬›l3£ðÃûbÉDÊíÑ|µÊ½Ô+oDY¯<‘FÃkÏ)´£p‰†Yÿ<+3ŠGø¥þ7ffÅ´öv–º7¼:uÜ}iýw+ýµÒÂ<Øò§Âz$å¥é´8ÝûɚݧùtÚ5›²Þ. ©ÁÓ½øI~}ò/O)G·Z"Ø—bÞ©¦ãKG[R6éxU¶Oçñ>`½^S0ö£¿ã~°\I/cQYÁàzèvw¶†iIA²\møª‰8¾Èk0¹[-¢Ê:λ?;gˆŸ¯úØ$U]ÅáßW"?Vwå:†2ä^çöyÞåH–ÜÓXl³¶×ÿ3ý%Àý-ü +endstream endobj 1586 0 obj <> endobj 1587 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1588 0 obj <>stream +hÞÔVÛnÛF}×WL ¤ -q½Ë«hÇ\Y \¸¶aÓMƒ°(hr%Ñ¡HaIÅq‹~Pÿ²3KJ–\9ÈKQ²Ë™Ù3·3# ˜öÞݘÖ=߀ÁúàpP²7éýõÞ +MzÂŽÿðÀ96g܆hÞãˆÂ¸:¥xáÂ…è¡÷Ñ8¿ at0ê÷áJ™bÈ£šªd>ÏË)œ•T“$•æ¯ÑèÉi=ÙÌqÀLøD§= ÉOªoö°5ôµL2© )3x¯Ìè¾2ŽO8="K[[æèÆ_’ù¢5Y£žç†˜«Ï<˜í„aÌrî¶Yû6 ü•ËÁlwKÕ¢b9Z‰ÕX×*Ô +•îpU« ¥ ßkKsžÔ ˜–Ïãv‘%t³Ffír:C£4™gtf?uF*uFv{rá™–p|›>l¿¢Nnâû+¼"–ªZM¶LøÙ †L²ƒ¬;UÙ9îéžpêƒmûÁª®»Ê„;m&CÓ2×-›‹öêé3ßXß~üç¦ÿ_ðõ'õÎ ˜ ÎñUïœ5 EÇÂ7Ô“¢€ë|Št ˆÜ¦@2Ö8µµT¦åß>›¶ƒB™11Nf7[­gËÇm³^DQd·û!d¡ßN]ÐÚp!¹O›ˆÛzñU’ùbÃôR6Ö›LNò ÙÎ’ú*iPŒ ¢ŒØŒÍ'Î{ܧ²Ñk€É­T^6“ؘTËf{¸ÎN¢hŒòë xUÃÞ6Ð ôðp‘4OÐG;Úÿz@—*Gñ4/“b#¢îÕ \^Ÿ½;CùÅÉù?"A1!W*ßÀü¶PnkJ㛣¸½Ã+”×&7žUñ–¤‘›î±Êã«2O:wD…5ìQ—{/¶úbY%ÁÎ/ïîëÝ)-µ^žqÔ —›YŒ/NJ6Žn6w”lÈŸ*¯åœxfüI?+žË<1«ŸÍÁz€ºÔ@BÌb‹¢FIQÜ%é§å ù›„t]µöaAFÛV„P§I“yÏbþØYòcú]rø9€û|Àã€Ä¿ ­–eCy8O¥ÚÊ-% +­ö»Ç\$s¹e”UË;4*dk”å5ÂrÒhH±Y³mÁ£‡lFÀ‹]Ê›å2`ÿY ·“¡Âí|=Ëe‘íC­Ï]ïs%Éùž_ó€\ùe@ÿÐÉÔ\à7¶ùº.wG²”øþÝ1ùS7ؽ«D5yRtyî>EØß7‹¦! Y%v’86ŠªœÆæ2#/ËŽ ¤0!ÃÛX©JÑ`ís×TÝ\Gg'ç-Ó±¶:` ¶ƒõOë÷V·fˆ¥Ô™9/‘3mØÏ÷ ±Ö"¯Æçy5 E‹j¾ æÁ÷°ÈKºmES)ÐEÉ5äð§¥FlÆr>ªÊR¦M^Qðµ.äýþz|¶7ú®‘†ÍLB‘Ïóª ‰«²xðOÈy zYá-¤T%—rœµ~ÿh‡J÷UëáÍ1x/ÄÓ®Ùííǔʺ?øcù·€YÖ– +endstream endobj 1589 0 obj <> endobj 1590 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1591 0 obj <>stream +hÞÔWmoâFþî_1É.ñÆoØ8×Dºr¡J¾K¯Ç©²ðŽÀ¶lçZÝê¿ìÌ® „3ôzRU5‰Øõì¼=3ÏŽ‰ 3åôÍÈ„Y¡¸6xFœŽ ¶9W¦Êrze‚ ÁT1-0ð³ã1ÛÏ6˜aA°T ô Ƿ!˜àÆ0ž”j·wmÖËÓËV ¹fv˜­¦³<\.ãdý¤äù4œpícðF²e$‹Ù6è&3Ý6]EGg"vV‡| ×CF<‡0‰à>ׂÅgšdDš–ÐŒ1ôžÃe¶àiõŵ˜ç"Z—µ]`–íû>0§cŽÄ-J!±Ìr^b±HÁ‡XŒu©|Q ðÐéÔuÑ«LªìÛ²27aQ‚¦»ÌSßfQH;K-y$7Ó꫉ÆÚj¥ös¥”Oæ•’%WÃlkºi»=X®Ú(òÏGûnÑWžÊ“èqRÂ;Íë0Så•Ë¢Š—&U0lšh‰Am°,׫ûà85ÖHþÓ÷5½ÃÕ×-ÔÛ6h.sU€zýúå?Wýÿ:_?Rïl™Ô9£î½f¡Y±ðßMõõbÃx†tõˆÜš‰d,ðÒ<×t›øöI³lòˆ‰ŒñbVw˳ÄÝrqجçPXr<øÌwåM£ j»Î#g3ˆ K "£ "3±™¤I ç`¼Úð»m¸T¢-ÍÏâ0ø~[6Íò8)§0V§écyGcŽ r{\ÀXƒ£Ȳ°œëŸÆ(¿ååÙYœe˜LøXÇÚIƒ[¨Œ³8vcíUƒeL¹lY ”£U¿­’r΋øwU.öÄ®`­QµH>z\÷Fý_{]ʼnŽŸi‚bÙlf˜–Y×íô¨ŸÄáâ>F—³Æú¢ÞõînÞ¿¹»ÝÎH€!;x’Ç%¤‹Õ,MŠ±JHà,ºÌi®‘Ý E@d)Õw;µ›¦(Î1Z,h1üPÕå/˨(QµÕjˆ¾EŽ 7Æ €(å@b%’Ô A±~‘Iç·á’èq&±œ×ì˜ñrSa×d5M ߃Ä÷@øÐ Õ¨`ùÄBÓÈŠ]4ÇÉñ“köüáá#>P.ây…Ï/‰RQe‹5UäÀíz—ÁW€´ù¯Ñ _à{(0¥Lšº*Šý›p…âÚÛ¡¾Bccñ C@]ŲT(Ž^NŠ‰Ò³c®;ýO§ÀóBš­Ï¨žÕâÛ\θœïòQºÚíf=¶®ö%]íw½á \õéuO`x÷6À"{3ºî÷nºcá@óïiÒå{ûNäO7á +¿ã­§ú·Ðâ^Aùß0’ñ¤ÆúÚÜÙíÂÓÉÞk l£ƒV5>È\¿ ÏÅ«ŒËª4;E-Ê|²Ìp#Mñ@XW¦BvåHà†s„´÷MñEv4vÒÍcŽâE„h%á÷ç÷Å”z¢2‘'ªõCNá°Dñ¼ºªC\Go2áCr_¤Ø µ/2Ô/â$.ƒ<üÄó‚0ˆxûÔŸæñ‚cöøF×T`uÆZ&ccÚsÌŸ<=—y¿;ü·¥?x\ÿÖ¥»rÛ[ƒÁï> 0Ø­H¸ +endstream endobj 1592 0 obj <> endobj 1593 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1594 0 obj <>stream +hÞÔVmoâFþî_1ŠDj7°Y¯_å$î Uš ð%A¥ª|Ø€[°‘½4ÉU÷ƒú/;ã—Üå”&>"Z•·fggžyfv@‡¹røÃH‡y¦XØÜÓ±Àà†ÊLyë)‡§:èàÍ]Ç'.ºc3C€mpÆx+…£ÆM×oŠ×Mðn•ŸÕnïÚÌw‡ï`jºÃ 5™§þjÅsèÇ2Lgþ4Ô~ñ~ÄHFI0À–Ît« ^Wi¡GŠ3Í%áïÜõ0ôƒ0?à:ռߗq<ÂéYŠÜ2ÂлóWëe˜‘UÏSÚ¦‹¹Z¬m†ëºÀL‡s³ÈÚ̶ª}¤ƒ óÑ>²Edù&²ñÀ•›3änšNEL«„RÂoÔœû™­e1[}¿|’„*à ¢ÕUcµÕÒì§Ò(.J#Q¬\ok-Ý°}V¡4Qe›¶‹ç(¢¯4)v‚ÍT•f;LWÃÒeVÆKâ2V-¯ §:aÙU!L³Ê„E&îºZËa¦ê¶× ± šÅ, Zë/ÿ¹éÿ×ùÃWªa3*Ç«Ú]¨—]¸[¨å†ÑÛÕ¦æÖtlÆ om¦ZË ~ûC*Àåˆñf–wËùݲpÚ< "ÏÅ|p™k7´¶lHæçIÄE>‰x•$äÈJ`šlbyppü¹ÃÛÜ"’ž°=<„n'áÖQ-A.BXFq2ô™õ2‰ç¹;ïû§¼D3˜¨yXxsBúöDƒ?Ÿ9@Ù:b9›¨¨Ÿ%Ù„½É$Þ›hÇ/,š?gû陽ì6’Ó¢^ûrúñNý,œÊýª;ÞÙ¯çqoxôÔŠâ6¼=÷ïqVŸœ¯AOŪ+¢J–ì5É|Ýz„³h€)ÍC‰þ)N:Át^¦±|<‚zSŸ \ftjë .z×Ð ”ÈWYPæhjgñ! ýßQ}üm¼êwj”/ïRÂô5ÿ›Hø‚ÿ«Èÿ@/½Ž×¿¼xøz…+ÕI…±I,HY*Ô™ó0‘¾ŒhNÄEú;& ÛñêT.K³åQº¾Ä"íØÍê¦ û¸ŒqÉd¸¾Am)Žkåð¿ÝKhðv ÔWaäõ¤Ã¶ †Ã›\[!rˆM¨oKŠ¯û]ïlËî +þáj\G\Pwä³vwØ—ý o»æ$8£°5îšd¾¿mLÔ²Ú8äqù¸kÂý.“>=?:{Eæ§ËM¶ ô)‘œLß_MAƒú€ˆ(YhÂÇ]áuµ~“Ÿ€œ…½]¢aŒ£êŸàß òP&Ø +endstream endobj 1595 0 obj <> endobj 1596 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1597 0 obj <>stream +hÞÔUmoâFþî_1ŠÉ.ñ²^¿ÐëIiŽë%º\Ñáë©*U僅8¶e›¦§ê~Pÿegvm 釪* y=3ûÌ<ó†K£ÿÃÄeeø.</ôÁåPJca|ý×8/ GÇ/>œ0`®€ÀåŒ ˆ×Gƽȅx†îxß¿˜¯F¯aÀB¸è_ôz0.-'d®™/Ëd½N³%\fµ,ÉLZ¿ÆWèÉÕžs]°æøˆ_6"’Ÿ™:‰°ô{™Ìe I6‡¥ßãx…Ó%²Ê2E0ú#Y+Y‘Õ(6|ÁÙúlànEÀ¼sOóV©PJÌÞŽ“E®Rb2¶©ŠT‚"@¥¶y±›Hšè:3o“ªËöY`~(æ „Y˹>@JÏÈÌ,60³ëƨœÝ4FB?¹3°lÇõ½_ IxA„÷ÇxD¬2ךùfVÃOV2Ç” dÕø˳ÆM•„S„ðƒ¶ž×2á®fò8QdÙ!óÌÈÜÑÇX>óM€öùüÇnúÿß¾RíÜ€9T9ÞÖÎÝv¡Ótá¿êùjïÓ%¶k@Ím9ØŒm%KËv©ß~·„‹B9g*bÌf¶¡fËÇe³ÝCq,ôzˆXäëI£Zûî#ï~q¡oI‚Š¬9l?‹¢L3׋©¹È7õœô`òæ|<‚ÓŠÌOΠ°_Îå"'õÍp¸”d=¹I +95§ÖÔúö~Fܧ4w{ûTÊä3Šõø›ý¦³¤’€«írŒâóøÍo“øç·£áÁ;ÈÐe8 SYí9èä9¾véö+öK›T¦Óì]AÎòMVÃwÀ·êÖ%n{ý¦ŽX)—q쩦Ré¦&"¦D'笇Û¤š xó)“u¥³vÔz‘£e‰8© +Rxå÷Ùf=Ñxă˜@ÚëmqwUõ8&+ô´?ŠM¥¯h_è–h¬/ò,“³:ͳ]6O«ôƒšd8,Ò첺ÞTõUžfS“ÆØ)ʱ‚6\˜ÄW?^¾Ãjvöš\UòŸâžVÔÛÛ˜QÜPOÖG:{‘SÝnuÝn±n”ãGù£ä¡x'hÜYº¡¢/ +64ÝöHë/ͪ:¡¢Í0öÛ©uv|(u?@)¨H·ÝÔ÷ Ý׶¿w&¤Qöû¸†—›UR~L‘×òÐÞënC¼+4 .ɃQ¢qyR"ÂÕ±9Ò‡;t‹€MH(n‘HÑ9M{ÊxFò€^Óstß~y§ƒ‰¿G飆Cù‹„"£ô=¯iG?»× +laPÜ"ÑQmph]?üO@ñPñÕt]ìØòÝÕîäÇ+ÿòÿ`˜kÝ +endstream endobj 1598 0 obj <> endobj 1599 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1600 0 obj <>stream +hÞÔWoÛ6ý_Ÿâ`ˆ4Ç õÛJ—iã¦Rǵ•Ã< ŠMÛÊdIä¦Åдo¹;RrâÀöº-Å0'©ãñ½»ãñY1a®_ŽL˜—šgƒÏ;àt<°9B›i/Cíøµ &„3Í´€ãfÇg¶¾Í· \jQw N¸é@x¯ý¬_t_ƒË:ðêøU«ƒÂ0;ÌÖ³y-—q:‡^Z‰bM„ñKø2ÙŠÉb¶ m“™ž á…ÖFDâ™È™Õ!l =ÑT¥Sø±0Â;-`·pÚDž–ôŒ‘º£ežˆ’¼º¡æ:æê1×fÙAs:œ;*kÏb¾×¬c9˜ål¬cµ¨X¶\Äj¬kÈ +€‹N§)L»¥ßU¥¹ŠÊ +Œ¶Ç|ý&ŸF4³ôJLÕb=5˜«×nok§b²¨,5rÓ5Ú¦íYô`yʈƒé;~€û8E¬"S+ÓÕ¤‚÷†ßa¦.jȲæËÒš OMž §s°,ÏoÂqšL¸­2ùÌ 0ÚæèAÛ⦚º`xÌÓšñˇÿÜõÿ ¾~¤³³}fÒÉñæììušu~ÝPÏ“†ñÛÕ§æ6LlÆom) +£mS¿}0,bÊdÄx3ë»å[òny¨6k! +CKéCÀOÝ4š ·ç£ 9JÄ-©D¼I2žÁX7<=Ï£jÑ>›ŠYÜÕÉIºZÐ\dy9ÖÇÆ؀ߺÞåŽöÌ2òC”N¿€¾…†öMÀ ЯÕZ£†ßÕ`TŸ&ªÍÐ~r’#B¯UJ$R\[÷SX9:U³±>ËVÕH;*íðzІ?Á·%ý’ùÈà:<Í?WÉ÷£¥DG»xšO €æ x%+B@;Eûâ¤Û_-oEñ éο~ºM¬hwç[ÞÇÕd±‘3mX£„ŸrQ绣Að3‰J‡ÃÕ;š¥?ìž_ÁÁ.þÏm!¢ß¨#÷õ¶õúa÷²;$®}›n´n{ýËçÍìÝvªw7×aWò¡ý™)ûÛ)û7o_ªZþkªÏ[­OoÉxœÈ›¹‘ÞŸé]H=È)ŠžÍ8 +n-zÇÇ0ÂmozÝ«‹­ª8ÉV25©ˆ#ÁtµEYÑK^µ0’(ŠºÌ>‚ì¶ÌQ ˆSpÑÌðÆ:Qöˆ6ŵˆE2Ý”íu!¾\­G +†ÊCڧץtEÀ-÷Y­ÉÛ¼õ¤¶‰\h5•!•>R¤6*]œBGk2UʵSrRq}·ݧ²#£¢Ü©¢ÜaQ™*yBˆ…AóÓ,UYîö|¡L" ª€‚AsƒD¥BÆݽž·Ïâ4®Â"ú ŠRÈßí}¿ˆ) ¨"0Ò*N«±‘+n +©3ëîøæðß…Þà<|óëÅ5.ô»û4WuvÕjí¹ŸØâYzXÁ}”R¯Ë.OâT@•Á-ýÍÈ;ÉÒùnÙá’ ÎNÉîîkó+í÷û/ÅDÑàÁ¯Å_¶þ`Þ¸H@ +endstream endobj 1601 0 obj <> endobj 1602 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1603 0 obj <>stream +hÞÔVmoÛ6þ®_q°@j"†¤d½¤è¯q^bØl‚¢Í¢mmŽlHJS·ÈÚ¿Ü‘’´qÅ…1Ì/ }o|ž»ãÉ &ÆѯC“ÂððinàC!—ÆØøEG§ ˆ±Á8P|ãŸ8|‡ÊA\£ê†ˆn(sAÜÍ“Î)´HoÞ@?·X@s>Éãëë4›@7+e>ŽGÒú]¼Ã“œê$NlF˜×qbØQ3Ò;¨Ø:ô@ƉÌ!θÊ-ñ—Š.T9)K®-S<:ŸãëÅLʪ# ßC¶iy@¸†!7 Ô­xëTh%fƒp÷%&K8Z‰ÉX§*Ô +•n°Ê‹]#©Ñ·ªÌôâ¢Ëöˆo¾_$±Úq³”IµT­¡™Y¤eÖf¿ÕFùhZñj¥¬eÙÌñ¸úÁ½Jè£Èwýýû¸ÅXù¼Ò$7£.-? Ì”uÈ¢>ožÕ‡aÑtI¨*çž¿ªƒë®˜P§bò°0´ì€¸fhsʪm ,x&Àjm¾üç¦ÿßà럪vŽO˜ª]ÕÎYw!«»p·PÛ³ Ò ¶«¯šÛbØŒ^ÚBæ–í¨~ûdq…2!1^Ìúnù\ß-‡Íz Á«ñ’ЫnšÚ µçãTæûË&iÝ@>2ùãkUrjÆ\î¨L§½÷óíYŸÎnŠ©¦ŽâŠýþ¿_~”>~TDKµ‚¢_v”Ñî7yúm«=ónp Ï0üV¸@û>ù|Nã…ÜáõŠ½­Ñ+ߺA_.gÏ£¿{Du·ú÷¯5 +j +endstream endobj 1604 0 obj <> endobj 1605 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1606 0 obj <>stream +hÞÔVmsÚFþ®_±“g¤ÚœO'¡—´Î Á2¡ã` +"n§ôƒŠ¬*‰8™N~PÿewOF‰B'NáƒN{»Ï>û +&,´óÞØ„E®9¸ÜÛsÀâIm®½ +µó+Lçš)€ã¦ç2K€kqÆ„+# +ã¶oA8Ã7mﵟõËà +Ú̃îy÷ô†™azÌÒ׋,Z­’tý´Ù<šIã—ð{ôd•ž³,h™ÌtÚ^j-D$?3ua+è‘Œb™A”Æp›áošÏ8šp2"M¡4ôÁûhµYÊœ´‚PkÛ>Æê°¶LX¾ï³=Îí2jG0שï1LØ{Ì%ËR—˜]®|•!ðÒöêÄ´**ýv™šë(/Àh9ÌÕ'›8¢“Ð —Hèéë©ÁÚz¥ö¦RÊfw•’(ŸÜl-Ór½§z(rm×Gû!+[—7ñvVÀ[Ãõ˜©Ë +2¯ü­ÓÊVMÕ„S„pܺ¶]G­2’?Áô}£å1[÷[‚›å± †Ã ~þøÏUÿ¿à»Wªå2“*ÇëÚY».4«.üw©v–K% lW—šÛ0±sœÚ\fFË¢~{g …2fŠ1Nf5[®P³åà¶Ù-¢0å~ð™ï”“FÔv\\HöÃ&âBm"^ Š™zºÍJ‹ºüH[!ü†^Ô,ÆMa’ÙŸŸÃí£2D+ ÷I\Ü}†EšÉ¦:ªn6Qq×zËy2Å‹wQ~‹b²mqMõ©15à‚®K–ó5êdˆÀðo!ï DBùXº]Ý–H(®ÀPùôôsÄ2nø”Î}‚⊠z;ƒçË*8”K|“¼@ÐGÁæ›,I +t¾Þgðl:MÕÅ)Üö/Ã×p’ÃÉž5’vŸ`þ³Ôç›h†?Ç&LbeùUÒ?®X8úî¸ä +ªæ³_’¯êTÎñÒçŽÒ“EQ±“.\\@¥ù¨¢ +´YA’S©‚ãa§ÛôT Q¾0¸®*Ù(#^N%߃=”ͲRà?õô8:d× Ã`4hòÙï›Møð¾¹QNI-#E†£~¯?è\7X5~EÖ;h“ª Šóýªá¿¦¿dFi  +endstream endobj 1607 0 obj <> endobj 1608 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1609 0 obj <>stream +hÞÔVmoâFþί˜Fªj¼Y¿à—¤DJ×K•¦ÑÅiz:W'/àkmŽäNýAý—Ù5DBû¥ªJ$¼ÌÌÎ<3óÌ86Œ[G?ÞØ0®Z¾ Á }p9Hѵ~ˆ[Gol°!µl8þáÃæ:¸œqâY‹£ƽȅxˆn{/[Œþà tYçGçí6\KÓ™kÌÇ2Íòb E-ä( +ó÷ø'ŒäêHs]°lfû]ˆû- =Rœ¡:9!ùV®ß‰4Ò"ƒ;iÆ­ˆq¼ÂéY:Ê2Ç0xLgåTTd5ˆ[¾Ã³õY×æ¸QóBÎ=·*…Rb5˜ãm(±Xdà*%c]ªH(Tzáª.Vƒ¤AßÕ•¹L«LËgq[f)£™>@NÏÈ(LÖ5³Ÿ#9œ4FŽ~r»kZ¶ë;ôÃñµ0BQàÞ¿Æ#ú’s­ÉÃ~5ƒÙ†h\VM¼yÑæ©–pjƒãøÁªž·Ê„»:“?ÁŽ0ZÈ<#²nëcLŸùÀêùÏÿ¹éÿ×ùú'õÎ ˜Mã«Þ¹kÚ ÿ]¨gÓ)¼ËÇH×€ÈmÚHÆ +‡¶Ò´\âÛgÓqQ(2¦ã`6³8j¶|\6ë=ÇŽ^‹|=it@k?À}ä=/"î¨EÄWIŒJÓ7d^Ô£ÄÍu’¤hÃ-*nðm(Ë´žX§™å(¾õññ¢‰‘˜‰y²—q„…5%×£R’é–フy|¨¬¤¨ ~ò~ŠQþTŠ† èˆûSA1f£E·Xó~Z§@0²Ä„¯/`NŠcªFªOÞ‡ˆUÙ”«TÜAXkÅ~”?€b‘΄mnù9:‚ŠìÅ0O§X|ï¦T“u¹íy1»C1"­ô|5”lÜSëˆ[Ä1|}÷Vƒó¬¡z.Ñy®´Ã÷z~Q¾GQY ]»½#˜æL±'ž¶P¥ííZz0ó­2­/RÝ·×)ÚMñéºuJßÍ<'/k¾v¦ŠZÕr8+ñ ¯¢BÝn®)Þ^ .ûšY=L©!í¶7x‰åÛ°hæP<Í0Û+E‹×ñTctc°1Ë\M…®õC5wŠ'Šh·§1´+ЛF£|hîS#0ÔkHè¢ušyËô³•P¸Ç|9ɧÑ'j0¨º€ÕIÌRǦՆøÉÓcÝ'ÿ#½¸>‹ß~ì£â—«Á¾dð£Vi»}²Çg¬?/¾«a™Ò0ÔPOLóB@=‡{úž“5­“=^Yôâ>푼û7È6òï5|Sÿ%À[Êéª +endstream endobj 1610 0 obj <> endobj 1611 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1612 0 obj <>stream +hÞÔVoâFýߟbt‘ÝÀf½6þ‘(•¸ƒ4œ¸Á^TªÊÅ ø +ÙK“\u¨ß²³k“»œr©ˆV5D»ÌÎî¼÷fvfÆÑOCf¹á9àÓÜÀ‡B&Œ©ñšGg6ØÀ§†Í€â;ð‰ÃÀw(¡ øÒ x +¡nèŸà„Ú.ð[ãg³Ý9ƒ& àÍÑ›ÃCèg–Ç\Ͳh¹LÒtS)²i4Ö/ü-FrŠHŒ84lb{Màm£'ª8=c:[=Q,2ˆÒ®3‹0BBq U›”'Óž Æ€Î]´\/D®¼:Ühº!rõHÓÂœ0 ¸¥nÁÚcÄ÷¶ë(aî£uTK‰åèETãA«P+.ºÁV˜F ¥„ß,¤éE¹«áß|¿Ž#5c¦q1D¡™Z¤i–nïJ§l2/X1R»i5lÇcêóK#š|×q§xV¶*VâÍD•åÄ6Eyd^Æ[¥e0̚ΠUy`Ìó·‰pÝ-êLþ; ­F@\3l0jÓ&XñL€íX}øÏ]ÿ¿‡?üT¹s|b«ÌÑm*´Ë*Ü/ÔÖbƒd†åê«â¶l,Æom.2«á¨zûÃbEL4b¼™åÝò™¾[v›‡FÄ9+úCHB¯¸ij‚Þž Éý܉(ÓˆnI‚FVNŠg²Ú¤N•™ž|.õ&õ”ZOlú¤øO­å·‰œÌal®#9GûØ‚?ŸqÇèQ.[X·æ?ÿµ×uÇÏîÑO2Å()ÚÅm/ºÇÆvz +ôÃ=IŸõÞÏ_Àül±É犾"¢@úø÷ñÅÔT(!JêðqŸBðV¿Ò;ù Èz+"ß#ºá9ÆØ Ý!èÍϾ4‡óh-öýþòQowjsYßà ï8àÿ— 0‘Ó;Ÿ +endstream endobj 1613 0 obj <> endobj 1614 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1615 0 obj <>stream +hÞÔVmoâFþî_1TÕ.Dz»6~IšHéÁ5T)AÄMT•ªòᜂl縪Êê¿ìì® ¡’¦Šª)^ffgžyæÅ0˜­ï®L õÁ£>8¾ 6…\ãÛÐh}`À œŒÅ?|0ß#6Ϧ„rE/„: á”9®ŒŸÍN÷´‰ï[ï äó‰mfÓ¥ŽÎ[Q¡”ÈáΖÉ’¶R"kªEP¨tüš—f…¤BßÖÌ\FE VÓ%žùã2Žä‰›¥ˆõù ÌÔ"m³2û¡2Êdzʈë'em«Él—Ë/ÜÓB†"Ïñ¼?À#úÊ3­‰ïÇ%ÜXžO˜)*—E/K«`X4U*ËÀ¹ëÕupœ:jëLþVÓ'Ž49eúØË%® P?_þøÏMÿ¿Î×_eíl0Y9Z×Î^w!«ºðm¡žÏç0L¦Ø®žln‹a38´…È­¦-ûí“ÅmŠ˜(Ä8˜Õly\Í–‹Ëf½‡ÂëõÀÕ“&híz¸œÍ"¢\-"Z' +YuX>æ"ú Å'›NoSW’µã΃2 +¿~¢Û­Ø-,ó$-'#s’Ý—ïàh4JP1²Nvš³û´„S ku—XeübŽÆ…€d#s¹ŒÊYó,“¤/P^§÷‹ëY"æq1ÂH# þØ6ÉÐ.Ç»‰ + |Ú Ê+O[n$b‰’Fã©;½P¦èpÅÚ“Öa¼=yï`I)p}Ñë^vàËŽÞé(ŽuºœöŽÒyÜBg¼3J*V—ÑïøfxÌïŒL’r§I¹CRÐ3Ê1Èv@$ÅL³Ð´Üí§?Kt¨ÐnP\{’TaÄ}í€w›gIš”a}yÙh€Õ,™ L»cXeÔŽ¬¥Ž-Acâ³ì”ª;¾8|µöçáů+Tô»²ªK“ý­t²ô«VQZJq90OReåÿLZϳtºß‰jo=g§RÞ> Kµöº“P¾¹ý”=NI~½vš>À~]±JÊñ 4÷#K*‚G8šx#÷—ç?u‡Ç‡qÖ´¤²ãëvFØÏ3³&HÎþÖ´éá’òÇ=2¥t/­ÌÔ“Ï0`Ï_’묯ÅÞïÞÊå€r™Âßð£Ty)~õz8ùG5»é?_1Ý”(~¹,åÌ7Iô¶p‡WáyØ»êÿ Ø/*V%ÎòD¤åu‰E¨ËƒòGÙ³2*“,­Þ1o–úm¯^¼.éxO­n“X®o ùðÚx=êÁU¯×?•þ`¶ÿ1 +endstream endobj 1616 0 obj <> endobj 1617 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1618 0 obj <>stream +hÞÔVëNãFþï§8]i‘’a|‰/ V¢,T,ˆé­«•±'‰wÛÛeêÔ·ì™±H7¡+TT3>ç;÷‹£Ã\9x3Õa^*¶ uÁrm0)p¦Ì”}å`¬ƒþLÑ  ø‹‡î:Ä4À1)¡øK…¢B-Ï? Õ-ðï”÷êéh CâÂÉÁÉþ>L¸¦»ÄTó9—Ë$›ÃyV1> #¦ýæÿ„–ÌÆ’AL:Ñí!ø§Ê5 +;‘¼®Ð-U_±0fÂ,†w\ó?*¡(B…@™  }—EÊJùÊÐò0V› m †éyË¥Ôj¢¶ âØÓA kƒÙÉ2%³±Î•'3ä2-·KÌ u¥uؤæ",+Ð6qÔë"ÅÍP+7HÄé©™F†j {Û‚x´hAFsR}¨ tÓ6ăá4DäéŽåx(?Á+êâyÉ먂_4Ç%ºÊZ•ek/ÏZcX5Y*ê`¶Ó²ºH¨ÙDò'螧 \b©ÞÀ zs‚f[èÎo?þsèÿWùúQÔÎtˆ.*G»Ú™ë.ÔÛ.|YWÓ®’9¶«#š[Ó±KœÚ’qm`Š~û]3L$²˜Hq2ÛÙr 9[6n›õ"ò}£ÙñìfÒÄѶƒ ÉzØDÔ›ˆvA‚ô¬½t?Åà‡˜ÍœLÂjqx8gÕ$O²*P÷>÷|ohGS0¤¶HäN}³‚£4’g:Ë몯^Çâhð +9}ª€Ê׊ýÞn}·œ…Ÿž„EaÉáùäÉþÙ‡ñÅõôlòóù¥øê·„?Nër!s€ä& {+ü»ÿwŸ +?B#&¡/ÃïÃý eÀ?žŒ®Ÿã¬”DŸ_Ư骖_û eáu)à˜À¦pUCêt,À¿”÷þÍų½²mìð¾Z¥ÿš÷ì`m¥¯‰-¿4òŠSoŠ¨zJeÕ£²¿w gU(žýzyP±–Ô¯´¯7Ö{e† +˜0ƒ©â'ašÞ†Ñ'U0¤`õAäð’U=ÈX%—• \ãb= «êgíËÖÕupc„ç\HʯNeÁ¢$L¡1JÇ"œyT¤»Fò}¢¼ÎÐ~Æî.Â㉈!GT¯Nà2\² Pœ×·JYŠ“Õ¥lÖÅñåQmâ1LdˆöŠ‹mÌi}+bƒ^yôD0ªØ*½HX÷ ”ç6Ä»„3aüϧ,dõò×¾ø#ƒ)+Và³8nÖ±Ñ`Ñ‚E”•Ôh×Û'™A Ê æÙ<Ðê¾ûê¶øÍ¢ñ6â<çb®Žº—ë_ €å«ý +endstream endobj 1619 0 obj <> endobj 1620 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1621 0 obj <>stream +hÞÔVënâFþÏSœFjk—àø†“&Òn`7©Òl¼]¥¥ª¼f€ÉÂز'˦U¨oÙsfl‚!û§ª +’g8÷ó‹q`Ú:x;t`Z¶B»~/φ‚µ&­×qëàÄ“–ã‚_<œ^hy.„žmÙ.Ä‹–V,Û<ˆS¼ØŽñ²õ›Ñ¼®ÕƒÓƒÓv® +ÓéYž‘M‹d±àb +çB²b’¤Ìü=þ =yÚ“kytË º÷[´H~Rus{d[™¾fɘˆ1|(Ìø¶Y6ªØ¤D’®’äè_’E>g%I âVàZa€ÙV7Ëõ¢(ËïÙ¶¯óVP(&¢a¹þÁ"O1ŒT‘(dú½—NI}W#s‘”ÌN`…Æû|œÐÍ5$ë p:#C˜VרÄ~®„ŠtV ¹ú´®Ùq¼À¥n¨‰’B?ŒPÿ +¯h«È4g|—JøÅ {–c°ÊdYùËDå ‹¦JbS\7ë:ø~‰íéLþ'ŠÌNÏò¨ãÚŽ¾vÁ ¬À¨Ï¯?þsÑÿ¯ñÕOªZUήk筺Щºðß õÕ|×|ŠíRs›6c‰C[²ÂìxÔoŸM×C"[*bÌj¶BWÍV€Ëfµ‡âØÕë!²¢@O]P:qù‹ÈvÕ"²ë$ùF†©iðÍ1ŒÙ¤^2yúñS|Ÿ3äŒÌÇvïÚ!FŠ R2&yÁ…œŒŒIv'÷aïõ»·ï‡H‡ËA ñÍÕ`odÕ&<ËƸ+iv'PTÂ1ØGN E‰l‘_& ßAÎÝ”püƒ’™d22¸²~ÁdçSA:ÇdÅÝâ4‚¥’g¢Tâðv{dÂ_OÍUy¡ç’I3s¾à² ‘31¿‡.àÞ\” R‡ Éw¸€L°` æ(UÙn5°TNŽ¡»%:žc=!C¬àÝTÐVWè® <4Ð*ðè€o .|F¶·¿‚q¥ÚrQÊD¤ 02÷·D¢>ªXM¥Õœ扎R ŒÏËá½ÀÊ”üO6® |%dm¢o.ã³Áðü×Až¢‡ô|Þ§Ô ¨—³”'ó-N»µž¥õ˜±õPɬ¤¦k¨/ [^$÷ø2n(u1öøfƒ#ý™í−ÜÞÚTˆíÞ´Äm!w£bDWˆ7«mv¨PŒ6õ6©wNè#÷‹F¤Ù˜‚³”EºÈñ¢U‘¡´+Ut1<;\ô÷Ô¢‚cLhk/lD‡ôça gœ2TZ4»â›¨¢Üê¢ÜbQ–Ôd‰£j¨²\%É3]¸ÝQüähMG£lЙ<‘3tµ}Ò!ïœpÁe\$ŸYQ²zÃm_Îøœaô#ƒL£S½A…™¹öaÏ0~²ôEV‹ïüoy~õ*>û£Œw—ƒ]ÉÔ¨yïÕ"8]ýL|/a™è·Þ¹¸KeéIæY5uÍVÖ¶(Ñ»/D¶Ö´úV»c¡®¥¥Q³wÉ>ìà•K.Óè +èöÝoš”Lãd*ÁÅ«›Áõá ¡Öج-5&/ÂS£D»o}rôØýi³L™Dûä§x:7ø×噇„ +endstream endobj 1622 0 obj <> endobj 1623 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1624 0 obj <>stream +hÞÔVmoâFþî_1ŠDd_ðfwmü’¨•¸ƒ\8¥ ‚½$¨T•‹×àld›»ä¤ûAý—µMÒœò‘Ҫ¼h‡Ù™gž™Ì`ª¾2˜æšcK=°=, +™Ô"í­ÐO0‘Æ8P|ãÂ<—X\‹ÊA,4Š§jûˆ +”Ù >k?ëî ´ˆïß@?3˜G,=fÁb'Sè%…Ì¢`"_ÄŒdU‘8±,0aN DG3ñDgRJÜSg—GdÊ ‚$„«Ì¿k>¡èB•“²ä¥eŒ1 {,–s™+«®ÐZ¶¹:¤åá–ïû@lR»ÊÚáÄuÖûHáöƒ}dK‘e•›ÈÆW~ɸi{kbÌJ ¿UQsä¦C\ýã2 ”ÄõB†•±Z}=1HK¯Í~ª²É¬6âÕJYË0™åpõƒ»•ÒF•k»>ú÷Qij²´Ú W“. ×#L—õ‘y/Mê`Xµ²&TÕsÇ]¶יP«ÊäO`¾o˜±ußä”Ub ‡8:ÀzÝ|ùÏMÿ¿‡ßýTµ³\ÂTåèºvÖ]²º w µ=ŸÃ žb»ºª¹ †Í˜ã­Íef˜–ê·O·P)CR"Æ›Yß-——wËÁis7ˆ„àÕ|ð‰ïT7M hí¸8ìûIDy9‰è:I(‘ÕƒW‚jùù,¸Åñ°ãû¦oQGñö´ûWó\¹—>âÍ ‘"T/³8)¢±¥«¢ {çÝ+h¨#`¯ KóÇPFq?(fGGS‰Ú¢„5ÖÇÆØ8~9Èo™ þ@õó¦“ —€Ã³×Gu[œþzÙk½|x¤ +L÷èù¶"áyqÿèÁ…h‹ÞÅùkÀoV¹Zf±LŠa©k…ú¿'=H‹ ˆSÔ&Uþ;f Ó›”®‹ê‡êVi_]-®›°Ë—¼ËkÔÖâh£!¸sÞŽ úР: E·¯tøAê1n\—¨ù]…(!6asx[R|ÕëˆÓ-Û+|ân\Åa1SÝú]bï_ôÎÅvÍÑOqHakÜ4•ùþí¶0Öëj å€|Ü4áv—IŸœ}ž¾"ó“ù*Ÿ©ôU"%˜>~¿¼š‚†êEDÍB¾ì’ÑîwÛunéŠÈwˆnxŠ1¶Cw¥ó³ÿšÃY°”»þŠÑÙö9(çº'žÈ¡¸ÿ³9|}jïñǵÑ70ãq²÷Ì ›¤«¤ÀÇ*z¼~ºûK€+$ +endstream endobj 1625 0 obj <> endobj 1626 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1627 0 obj <>stream +hÞÔVmOÛHþî_1Bªd_ð²^;v m¥;J+PÜV§¦|‰%NäuЩ?èþåÍìnÜ$8¼T:Î v=ï3ÏÌÆÖÁ‡kÆÒ +}ˆx‚^>‡*³rë·Ä:xïIny8þàáõ"æ ˆ|θ€dfq´Âxû ñ½’[ë«ýîä=tYŽŽ;èWŽ×c¾=WélV”c8-ë¬ÊÓaæ|KÎГ¯= æûàzÌ »¼³\´H~†ê&zd[™¾ÊÒQVAZŽàKå$+fU8)‘¤P’ú€“»t¶˜f’¤N+, +1ÛuC`ÂãXÐã<Ðy«R(&Vƒ‰`ƒ‰Å"_1±M©bU ôVuqM$&ú®®ÌÇTÖà¸!‹ìO‹QJ7a×ÙH_  3¶K‡um#vn„ªáúä^×q=?ô""M$RD1ê÷ñŠ¶ª¹æŒ–Ã>;QyvfLJão^gš‚„ B„Ñ +‡ XeÂ}ÉßàűãöX`Ç®àž¾vÁ Yh¬Îçÿ¹èÿ×xóJØùó9¾ÂÎoºÐ3]øï†úët +WÅÛ5¢æv°óù²Þ‡½Á è ú:Mx%ao_»AòB›¾Hg†AµX]è<ÞhµqVÿ¨ƒÒjÓÉç”ÙDg6ÁÌš*0•YDeÒ¢ÅÙÊäÕˆèø£×ñ°»¯“oø‚dý~ïkÁØMè—-è¯Pïä8yîWÙBOË1~MÚ‘‡œâhCé[¶”!ÂXÙz Oh¸Âà M,‰ù%G+lùÖ Âû­Õ6Ïš*å{xx7ÕJk²‡œûmҵǻ›Ÿpt³Ýk3¼†Ž³Ï¸'<šçݘݤòzù‡&o¶¾^6†hpe ¡ÖŒJ\"™Ôw΋ÊCjí "}9;ž—%"Xì\:MiØе]å©<_Êú çd`s²ñ8-‡tì:Î?]'g—§Ø­áÓ‘MeöR»z51›*aêª_w-$ ÛÖ‚¡ÂoÕŠGM°^?³tvqG¨èKM› jPª ‘³á¯(%Ž6R‡ûä‰0lúleeA Mv§þ½…ÚÐ8}ñ¿G=5ÍWqMW_•—Ó´úR`–ãõ"ªdOta¾½%Òà‚†ž·Õs‹nÑ  É+KÄØ9R-Xî}?‰¦ñHß}{«ƒIîOô܃®Cúkc„"£òPzHžõÓú¦¥áðßù'?J +endstream endobj 1628 0 obj <> endobj 1629 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1630 0 obj <>stream +hÞÔVmÚFþî_1:©Š]`Y¯ß¹¶R’#Wª !àKT•~ðá5˜‚A¶é5ªúƒú/;»k;p1§D½¨ªAòzvç™™g^l–Zÿzf²Ð\ <êƒí»`Qȹ–h/B­ÿÊÂD3PüáÍô=b1ð,J(ƒp«QD!Ô,¸ ¦ á½ö‹~5|ñáeÿe§“Ü0}bé»em·i¶„QVò<‰Üø5ü -YÊ#–=“˜®á•ÖCDag!WÌØzÊ£˜çe1¼Ïp­„¢ +Jâ$“'S´Ã?¢í~à qjjŽ`¬.q\ Ì +‚ˆíSj«¨]F<·ÞG:³Oö‘-A–%7‘†«@2nÚ~ML¯r¥rßQÔÜDE FÏ%ž~»#±bzÉcµ€TÜ=3ˆ£WÇ^W‡òŪ:ÄÔšŽÑ3-—‰æ)¡‹"ÏöÔŸà±òÚ‰‹ÞžOLWEeo—UÆ0k2'Tä1׫aÛu$ÔR‘ü f=ŸØzÐcÔTK —¸:@}ÿüÛ~ôÿ Þ<ŠÜY1Eæh;«©B³ªÂ¯ëêóͦéËÕÅm˜XŒvmÁs£g‰zûÝ` +yL¤ÇØ™UoyLö–‹Ó¦DaÈÔ|HàªN <íz8쓈29‰h$HϪÀ¾‡û4ç½bŽâ$}ƒÁ>*Ws}=7.?–¾C]Á^ˆÐNÒ * P<ØçiVÎõdw(k„ðÛOÿjßi72])âèRr‰îY„šÌ¬ýK˜ë¨–ñR¹6æå`¶ì|Wßs}nÌ øóLt‰8•#FŠôÐKHá;PX(?…SX—ÂÉ´Ói0F%=:uG8‚ú£bV"_K4&|:ÇV"IM«]¸r|‘LßL†Óðgø¦!îT‡SS{ö8Úri¦{6'ÕU©ËŠ¨öï¢Í×nºúå:>lïxþ.¿n G~âƹ.îÓr±:‰VTG…~Ø×\) ¼QÁáÙôÙ@Eâ£À§Ãç7pñX5×]ΣßΦ¤14j74‡ÃëáTØz ã‹ÍÍÚÍÍÂéh|ý´‘½m7õööM8”öPþÄ&Çí&Ç·¯_(.ÿµ©öùø°?æóìâ´J‘õë÷a†j?Ž†7W­Sp±;ÈÐä<ö5KQèE)¾[ˇ™D©§¦C¬.ìîŠÝ†—Ò ìUûå숞­R¾‰O‡tCÃçÎfÄ©AÃðÈt.äQ„û¤“ÕŽìãÖµ$CntjNÄLî*(ŽºrM¡£t«y%¢mµ’ñû›è~º?LEãÆN²V„¬‘¢&ñÔ Ò‚bñž®ÞZë#Rð‹ã`¾( +endstream endobj 1631 0 obj <> endobj 1632 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1633 0 obj <>stream +hÞÔVmoâFþî_1Ejj¼Y¿à¢D¢i¨Ò/QUW•/à+±‘½9’«îõ_vvm“\zÊ U%$»~vvö™gfÇ1`¦ÿ86`V(Ž.õÀö°(äL™*?Êñ¹SÅ0â†çË×¢„šÜ)½jûœPÆ`¥üªöúçÐ&¼9~ÓlÂ0× Xj6Ë£»»$Á å,ŸF¦ýü„'YåI&±,Ð b8mzŠŽÅ993=á[º±(f9Di ·¹¼W|Bq ›„¥)-<úÑÝrÁ +aÕÇ$®ƒÑ:¤í1-ß÷Ø¥v·”B.¢Ä´?[D±„%QŒµT¾È\´½Z½bR±o—Ê\FMwˆ«¾]Æ‘˜™*gq9DŒ¾šj¤­Vf?WFùd^™åH¶¦–cŠÓ-A ×v}Ü?Ä)úʳr%¾Ÿp¸Ñ\*«\ÕyYZ†I“)¡" ¦é¸ul»Ž„Ze$áûšî[õu“å´ šC wþsÓÿ¯óõ£ÈåCdŽÖ¹³ÖUhTUxXªÝÅFÉ ËÕÅ­XŒ^Ú‚åšn‰zû ™‚,&’1^Ìên¹¦¼[6›u +³l>ñò¦‰ Z;.ö#û©QS6"Z ’™œ,áŠy±~³i‚ðX>v:ˈÏCõ}¨<•~›:B½—Nô³$MxGX^°PE¼Þ|ÿÒz5O B5TÅ x¾´ORjË’ÄñN'eˆs4ÔB ¾9lqƒa7¸ø½w W}DÿÜp~&Ù}ʛ͓ÍÇÇÐËÒï8¬¢” ˜Ï,’”Ïàø› ëE–Î6;I¦È_žg§oo§%>ÓeŽáNCuŠxvÏ[Ðô±Y²ç!¡`á-¦Ÿ`óZ±Jød¥ö¡&¶’D«„Gµ¿ìþÒu¶ó¬eIâ«Ëè_8§HûueÖ!\kT +ômüyÌî…uY'';ùÿŒ¯oúlQ°}¹_õoù#.BxÁQIdWþïrýqò¯rv3辞±²(þ‡æ‚°ÀŸ8ß$Ña鎮ƒn0¸¾ú +Ú;%«‚³”¦óË·ã‹ý£>_Üsº¬'ýÑ#þ~üÚðñ+_½¢Dø-øx ‚îp—×ÀÈÊÐ8¯ñºß‹WäÞ­z<–l·ÿÈý-ÀqY% +endstream endobj 1634 0 obj <> endobj 1635 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1636 0 obj <>stream +hÞÔVÛnÛF}×W 8 +i½¼ˆ». È´­ÀqU‰¶TEÁˆK‰­n%©$FÐê_vf—”¬Är, EQùËÙÙ™3çÌmÀ¤v|90`’× \îí9`qÈD-©½ +kÇ&5ÃŽø0<—Y&¸gÜ„p^ã…qÛ· ã‚6„j¿hçÁ´˜ãN½½L7ÒnÐkwº7—R=´Ot®I w¤îÝDÌrñ­÷Û7—u‘l¤¯N…ÍÛNCä’¿,¥˜ÓgwÞW›é"ýH:ÅïÖó•ê¤=2YQCQÕo +U|ÝŸƒóW·ozhÜåsâŒîúŸk±ß?H¼mà'óõƒŸnƒ›ÎÛòjÊèhÞ$H2Q…FóÃx/ª»%ÝÏ"šˆÃ0ÝáÆ×a[É\!Š©Ä2øûålöy`†¢Rû ,Cܺ—W!}§¶Pºyj^ŠtôyH:e; F@ðÓîí2²…1ŽV‡`,iFeã•2·ýN@7ò1ùr½ zZý‹òüœ+‰ +endstream endobj 1637 0 obj <> endobj 1638 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1639 0 obj <>stream +hÞÔWÛnÛF}×WL  c“^^DŠJR@‘h[…* e7‹‚æEf*QÂ’Jý þeg–¤.Žì*5Š¢ö׳»gÎœ¹Ö`Ö8¿œh0Ë–6kÙ²À`ÀãFÒxï5Î/4ÐÀKš ñ¡µlÕÐÁ6˜Êtð †(*3¼L3Áû­ñQê¹ÐT[Ð=ˆËZK5¤åŒ‹EšÍ Ÿ1O‚0–ö~@OFéIW MÕ¬&x½†‚ˆä'+½EØzQÌ!È"¸å²÷©á¨ ¯0ºD'uq2Eà>‹Õ<Îé”ë5,]µ-ŒÖR›¨ºá8¨f‹1³Œ[H!6Q U7÷6Q,:`ˆMc#•#r7ÍV­‹R1©Ø7KeA^€¬Xª-MWQ@+]*â¨\@JOGÊdµ)UÇ~¬ñð¾:¤—O¦5eE3,þÐíÒè É6mïp‰X|YîDë°€Ùn©šWyåo™UÎ0i"%ŒÒ ë–]çÁ4ëH˜QFò'hzk©¦ä(:ÓÊedKµ$€úyüã??úÿßüI¹3lU£Ì±:wƦ +µª +ÿ]ªùÆé ËÕ¦â–5,Æ›6¹¬ToŸeÝ@c©‚16fÕ[¶.zËÂa³™Cž§—ãÁQ«ì4ZàiËÆydnÓÅ bui¾$[RÊ÷Qœ¤Ã¸h·ïƒ|hÆùù’/ûò¶æ›Ì"Ùè6@²ÂS<ÍŠÄ—’åº8ƒßÏp¤áFÇóÜñ^åpr• 4W^VA±Å#x¯ŸguÍS4ÏÒ,˜ïЪn=Çæ7ÆýËþ°3Ø£ƒæ~ÉÓ]`K:ŽÒ4§¾Í7&î¾.„HŠ·Ûë<ÞÕE7T¦éZ­z²* .l€ß òÉν4)J¶Æ ‹ë»Oùá ÖbÞ¾ö8 +*Y‰\îÆá{0AûÈíö;ƒ¡ëMvýWwy\[žÛØUŸô½k¥©6µ–V¿“De~”Ðd”îK( ïóù]þê}YÅ¿DžÐk™õâ$XÏ‹×Ä1‹J3&„÷‚"€5ø2ü~P”ós¸Àý%‡l™E%_Ïã=} +žI÷Q#„÷qˆ»‚˜/…O©_‹ìKóe6óåuß½ƒuŲ¤áÊå|É)ñSÊL¢{¤È6ð.îÜ•ŽIÛûëË)¥ †×CüJèLÞx:pÁû0rÉ S¸-µ †‚eKÉ>+5¯JwèÝ&s°ˆŸkë÷°™®å« Ä/ Cu0( ŽBûUgÜ›Œ:Ýþðò@1&˜h‘„°Èß@ +o¡æö]*Ø ƒà NbKÊE> ==ÝÔÑsí-¨ :hÿàŽQ'êîm¬hÞø˜“ƒ¡‰ +ì+©Ãßö{Þ…ñ*Ú‡&\4o¡oÓ¨¸¿¡aö|šPÂý¹@»lBƒ^ÌÖŽÉI¯ß¹D{I˜Ø¸ÕÏ.1w$ªüÓ`,ÃyA,“º°R1ÞŒ„J +íXUðXõ¯*> endobj 1641 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1642 0 obj <>stream +hÞÜWÛnÛF}×WL!ms½¼ˆ;.àHŒ«B¦‰rQDEA“+‰±D +¼8 Š~Pÿ²3¼È²«´nê¢hí.gvÏÌ9;3¦UXtŽ/&*,òŽ©ƒÅm0lt™èÌ;oüÎñ[TðçUŽ¿øPm‹éX:g\ÝáˆÂ¸áèà‡¸àªþÇÎ{©ï¾….³¡wÜ;<„«LVm¦Ké" Öë8YÀ )D6B!ÿà‹‘ô:’Æt•©fü~GADŠV+Í&ì +z,‚Hd$|—Éþ‡ŽÃ8átˆvjÕÎc€ûS°Þ¬DN»\¿Ó5äj²® LÓÇfØœ5kSc–ÙúQ¦ü¨‰¥WNTc«•S)ä: »FiRiÒïÖÒ ƒ¼Y1™%M7Q@+M*DT/ ¦§#%2ëJͶËfS.›MZýäjWVTÝÔèE³#š,Ãrðü.+KkOT†\Ë–ÍTI4y/Mš`xkÕpºM3­ö" £eÂõšÉ¯ :Ž¬ØÌEãj½ì‚l2ShŸOüë[ÿ»àÛWº;Ýb*ÝoïNßV¡ÚTá?›êùjãxåjQqË*cŽ]›‹LVtª·;YÓÑ("VeŒÙô–¥U½eâ´Ù"ß×êùà0Ǭ;¸Û´p ÷“ˆkÕ$â-I€ùF6¥,NŠùLš§eq/Ðz×´Ÿ§C^æ³Yòâ’Hù:s´Ç^šôÅ<(WÅÉÉ]ŒËZ…¬ÅLŠgòL>½o’.7Ig +7O3T@Â=pübxÝ¢ÆhßEMÊõeœôJ4ùLBDˆgr…ëüIö—”½×›úÌ^F÷ÐNÑvC…eÖaðId[GãÐÅ5‹6ßÍÛ|{%eºC¿9þ×X_eé&¯¶o9ÃÏOc}5FûèÊûßW´sø<é N=SÚ|9aØ\«Rì£ ¤:)Â%̤?@ð?mZ€Ç,« ðjüêIo£½"=vχt³¿ ¾“=ýÜd"¸=ý,ú`?úÀóÝ wü &ûLüñÀ»xüwûñßMG¾»+Ž·?Ž7½|ó%:UŽ_èã~i—tTQjýõèæCþ3žcA¡;…|ð[ê SÁõúà<´ã÷ÑùtèÓd›ìÉ9ÎìÔÖÎifJUz8ÑtÆqø6_RÕ8}/a,(ªlj'¬õ¬¬V7AxKŽö„G¦ ~Ü„Ë ;€¼¨“\õÆg?(¬Œ¶Ýðx‚†KâŽÛºoÂGÉ·â̤Uš,frÁWgP6Ðä!•›eiV ˜s +¯–”Ý‘Íw{ßx£áèíÕL9­'i^PæÏ&]ô?”®ïNjF°W¶]Aäø|ú3ZóLô@±”ñ­Â³½Ô(M*má lçAn$):'¢h…Âô¥»4Ž&zZk“~kü&Àœô- +endstream endobj 1643 0 obj <> endobj 1644 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1645 0 obj <>stream +hÞÔV[o£V~÷¯˜FZ ²19\Ì¥Õ>8¾•ÖdãTÕºª;ll°w»ªöí¿ìÌ;qn奪*8Ì™ùæ;s㨰î\Næ*¬ËŽ©ƒÅl0ltï¬:Waçr¬‚ +᪣jÀðÁ—j[Š®¥3…in; Qf8:„1.˜j@ø¹óQŽÆÐSl\Þ¿‡ U[Ñ¥|]DÛmš­ÁÍ*^¬¢˜Ë¿…?¡'½ö¤)º]UQÍ„ÃNÉO,VšMØzÆ£„e üRÈ᧎£04adDššÐLÑŒþŒ¶» /IkvLM±L<­©ôLP4ÝqP ›1£>·…ØÄh(šq²‰Á"]lb0Ž¡rD€ÀMÃ>Ä¥Û0iØ÷êÈL£²¹k*–´Ø%­4©âI½€”ÞŽ”ÉJOjÔ®¥"¾k”´úÍÔžÜUuS£Í®…*Š,ÃrÐ>À%by½“ìã +ndËVT‰7eã/Ïg˜4‘FiÐ4Ó:äÁ0'az}’o :ŽÜµCrºSëedS1%€Ã»ýë?Wýÿ‚?)wº¥¨”9vÈ~¬Bµ©Â—j³YºÆrµ¨¸e‹±Ä¦-y!wuª·?dMG!OÁ³é-K½eâ°9Ρ0Ôêñà(ŽYw-PÛÄvÖ‡AÄ41ˆØá¯ö²)°ʺÇLŠ #Ué+ JOµÕÃÑ3k¨ø.*Î!J’‚—åRŠó¬îâf#Í–²øüë%/O¹,¥em·”É°fž?!¤+ ƒð˜ÏG)Í*ˆKDYJ _ƒh³¹âûðËŽÿÎ1øR|¤“í·€é‚BnJèŠ`Ÿ É牱AµsÈ¢-?FJ0PtxŒ:ÂòÄ›vÓKÛäÙz)ïøîìÑ=ù¦ \Š"/0§Öåç´"öw _c•µ@=ßîòŒgÕ¼ŠŠj€â[Á ¾g€"Y(ù:ø×ï¼p~†®)R·îOH<†÷x\£’ø¸FõP>j ßÆ`Aš•5 ñz åëµ¼I£oPîöÛàÍø:ͳ#$ŠŸ!E‚Ïf£‰ë·b9?ãÇž£ÛŸzÃIÕö*ô¤È÷»²áÉÌ_­øÆQ†½€yÀ(¼PVÔÅ5ñù ï ~ì7)#”·ñ]?LéþS¶«ZTw¯]oÒP~ß@ƒ51FùÔ÷gÁ¹cÃòç(m šþ0-£[¼S‘Ñ#‡Go¤ýà°> ]Jsÿj:j“‰aÓ +K²e&‚þ,tÃCYþs&°ƒ"ßâ…âð…úA±w½`æ#t1j‰µÉãûh͇ÁùÄᓃ«©?ø¹?9F†*à­2ÝämÛjê·šOãt³i‡8v§Ó6ˆ^ž ù*Úoªv ô|oöýÅ4œ-¦4WÛÕ/T†­†À<üõõÒC07Èöë+²¨é?Ž?qõhæâŸÝ@­vEŠ6YµZJ«|_]ÀÙr™½+á]T8øqv!|\ÐúÉŸ%>…O%2À“Íg×™ÓKÞ¢þ`ÓŽ–4 +endstream endobj 1646 0 obj <> endobj 1647 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1648 0 obj <>stream +hÞÔVmOãFþž_1wR+’eý;&å$ +¹–ª(1í‡KU{|Mìh½ž*~Pÿegv“Gw_ªª€äõ¼Ï3Ϭq`Þ9ùaâÀ¼ê„|þ ƒYçû¸sòÞâYÇqã/>œAÈ<B3îB¼ìpŒÂ¸y§xàŽñSç£u9z}6€‹“‹ãc¸•¶3`žUÎe²\æÅ® +%ä,I…ý[üfòL&—yôæ}ˆ/;=ŒHyR}r[‡‹$’"ƒ_¥êDŒ£ ''²tµeŽ9`ôg²\-DEV£¸Ó÷#ì5`ý˜ëEQÌpî›®—…ÁFp0×ßÑ#Z–§•ˆFƒU¤Š•þ`L¯.¥.¿o ù9©ؽ€…ÖÝ*KèäZJdæ9=#«°YߪÍ>ÔF2}¨\óäNßî9^àÒ‹;0BÔ9¡Fè‹GŒ%K£ÉÖ©‚_ìpÀKÔ!«:_YÔÉpjz&œæàºA¸„ïo:ážéäop¢Èî ˜oE=—;æØ;`°y~ýã?7ýÿo^iv^ÈšßÌÎkXèÔ,üwK=_,`œÏ‘®!‘ÛvŒnm%¤Ýóˆo¶ë¡PdLWŒ›YïVèêÝ +ð¶i.¢8vÍý±(0›F´pc=ÿå&⮾‰¸i2/¤¥XE¥d‚o•šZ™˜É‹d±¸Gy’þ^‰ß¤] ëb½DqÐ(¿Ãj/•À:›Úؘõ×Ëbôy@ØŽ''ð#…*2¼eà¾T˜Ó$¤ÌªÒ×TRa4•£B‰´oú R4ÒEL­tj·µù ¦ª§Ö¢,æS{Á›3X×e‘† O#)K9µx§6·àì tßeƒj&*‘êâÞd··}AÔš­$šÎ¦Ö¬\«.¼N‹‹›kòŒÇçW×ñ¾É`ˆRü{Û%Äo« Œ$• «÷‹Ï'TŒÆñÕÍõ«¸*vâR$ÌtƒòûOœÑËŽR +µF¥,€7rNÄ°ž©¡Ç82¬þ\hÎ|´Ë<¢ËJHœÙUˆ'(o¨Bô87EqYAbø“Ä•v¢­ó.Ìr‰ß€3p†»dH$ê ê:YŠvåL–Ë+œbÌùV³ŒÞT¹‘«ò6'І›:šn·‰‘ôÞmõQ§§¹fB\:ØF=B¤=ZbSP¸º@Štß”G±ø )"§•f;¾‚_=˜Ü}@9Ö‡œØwí²_ôš:­„ªënsÊ+TNÄ>äµþ^ÌoLhÁÛ,ê±0œ¾žuÖžjÙö^'ϸºäà݈k¬­æ†wgÐ ¡cÕ`à"\)±¬Ì ʶôx]èåãñÍøžDO2Wô­ÃZÑ\hÔÍýRU1ZÏvèAK(‹Víó¡Þ^&Ñðo/ð>kP~¸Ž/·­šY) jtA¸‡Ãw8Ê_³'0jÌÑòøøpéf÷¶9L¾õî] ü:å[›·ïN?­Þ…öí·æî E<<˜¦7ú"j½úaë§\ã¢1×ÌÒ·tTà^TP‰U"UÊÍWýÉ‚w +endstream endobj 1649 0 obj <> endobj 1650 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1651 0 obj <>stream +hÞÔV{OÜFÿÿ>Å)•|fý8?ˆ¨Dá WAœ)•âªZ|ë;§>ûdûòPÄÊ·ìÌú\Í#‰ªª€äÝÙyþf~»0ìO ˜—Ç—y`{X +1ˆ¿ƒ# âaÃ_üž«[&¸Ó™ ÁrÀЋÎlß‚ Â3l>Þ)‡ã#éìloÃy¡žn)ù¼àËe’Ía’U¢ˆy$Ô?‚_1’UG2uË‚¡¡Î‚ÃÁ=RœH®L|KׂÏD<›ÁU¡ï¾ÎЄ‘išR3Á0þÄ—«T”¤5Ž©»Vëè#tÓò}tÛcÌ®ë–PÈCDC7í{‡)XòÁè ò%@>à¡íµ¸ ›LšìG52'¼¬@:º«\®fœV¦R‰Y½€„¾¾’©úHiÔN¥"Z4JfýeÆH–cÒÆôj¡…"×v}´?Ç%ú*òúd¶Ž*øMu=ÝPDã²lâåY ›&[¨ ¦é¸ml»­„Yu%_Áð}uèé¶âMfÔ˨Žî(í÷ùŸÿ\õÿë¼ÛRï,W7¨s¬íÕM¡ÑLá¿›ê~šÂE2Çqui¸U‡±DÒ–¢P‡ÍÛÕ´P(fºÌ‰ÙpË5%·¼lº{(Ìúzðuß©™F Ôv\¼ìÛ‹ˆ™ò"bm‘ 3kñªH²*•8_W(×`ëlÀ˶4ÈDuÆ—Å¡únI0bá¸áîDZ +Hb>üyFvq²_b‰U’g»»IyΫE¨ < ÕP…/Òeðª/1é¡1Gqía%í ~Š‹|9AyVVÍî<ÉpUå­ôßwî‹Ñý`µXË_ÄIQV¡úD”^ÂÖÖ­Çý÷´ä|?xC=éþPŒŽ$ª\„à™õS±dóp>w{š”ÓõåSQ=Ñ»˜^žÂǤZHÿ´ÓpxKQAµ§Åóoí>šc¡ò8|ùJø +†J¤…ÑT†oÈ#%> — †=`}†7Ð +[¾¥õî¦Y2¢"wHKgÈßæ-–Œ|§`—!Êëq-8îB‹.xš^óåŸWâOXÉ&¯€×ÂK”R‡õ¬kÌ&O±%oP Á‡®ój¡ë¸”@UÊÿxKÖ²uÒåMN¢…èÒB|[L7cÉi¡KCIólªë¼ØƒµL´âò6®ÆE‘ÿhgk}wÚûÅWI!fi>O"²ì% ÖJZR©çø¿\C¸š\ ||xòöxr@ôÚ†Óýß'Ó€fáå^‡a¶¥}ë¼6×'å©‘lTc«QzÊ?ÕÅÜ‚˜G!¾ô—Hc"ÙÔ ¼,mEä¹ÇB²©+'º!)ŠoI9OókžÂN$ü:=^®ÅümnŒ>f´ÙÔüÓ€õ3£7/¼ašŽžä»7å|(ßÝ]ð’ì;"óFÏ·I~1™Ž±ÏÔà- zŸ¬BúFi_ƒž“ô]Éퟜ<‘\,}ÿ@r9|î¾¹ÉÙ“ÈÕ¯Ë w/9ü—èo}ìC® +endstream endobj 1652 0 obj <> endobj 1653 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1654 0 obj <>stream +hÞÔVÛnÛF}çWL  ms½¼ˆ¥* Ê²¡Â–‰nP„EA“+…‰D$•4(úAýËÎ,)EVôP‚B\ÎõÌ™™¥ X*×ws–•âXàrlÏ‹C)”…òs \ß`@°P 8þðax.³Lp-θ ÁZá…qÛ· ˆñÀ ‚Êõfx æÁàzpy ÓR3¯G‡;Äð^¢Ã$¯Â0; 5Ô4nÁ…‚ÆÓe„GrÔõlƒêõäé]µ³!Eº€P¥´©ƒ{ÀC þÚ·i³JÓz=HÄ¢äYU—ɳzðô>øT„ð¥Û1V†(ßÀ`2ž³þhÌ› +^ñ«JÀiqûóùpŒ0úAØVJQ+e|g©³ª´BömÖ1§£çûNŸÏé·èzIKükqÿý+À²¸g– +endstream endobj 1655 0 obj <> endobj 1656 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1657 0 obj <>stream +hÞÔVmo£Fþί˜ZŠrñf0/ŽR)MHä*uRLZUGUq°¶¹³±8½èÔÔÙ™rv®—ZQOUmK»ž}fæ™0ÓŽ¯&f•æXàrlÏ‹C)µ©ö]¤_ +M5aÇ/.Âs™e‚kqÆMˆ–GÆmß‚(Å 6D¿koô‹à̃óãóׯá¶4„Ç,}5+“å2/f0*jYN“T¿Fߣ%«±d2Ë‚¾`Â@t¡õ‘ì¤jgz„­ C™d²„¤ÈàçÒˆÞi>ãx…Ó%Ò4•fŽ6 ø,× Y‘ViŽÉ\£uØÀfZ¾ï³=Îí&nE…:D6˜iï"Y¤`©C$ã‘*_äÚ^ÇK¿õ¤õ~Ð0sT5}‡¹úÝ:KhgêµÌš ä´úza°ÞªýÐ*•é¼U2›•‹Ñ–cÒÓk„$rm×Çû·¸E¬rÕœd›´†Ÿ ×cB—-dÕÚ[­1LšJ §4˜¦ãvy°í.n5‘ü Â÷¾ÇlÝï›\4Ûst€nÝùÏUÿ¿à)w–ËeŽw¹³«P´Uøu]=[, ÌgX®.·!°+lÚJ–Fߢz»7L …2cÊcl̶·\Sõ–ƒÃæqE‘ÙŒŸùNÓi´AmÇÅydDÜTƒˆwA‚òLŸ®Ë¼¨§±>]mê#è…ÁÕèåc8¨ wëþ·™œæ·åj=Dñp›q²”±±qò©!Ü!N Z.*‰ºO!Ö«ºL—ëXï€ð€°Pô°V@h·XáAÉfQ—›…ìÅœžGql(3ÑásŽoÆÊ/Ïðî:Ø +Å] ;(ì“mpå2Š·ÃfI «„B·È­W£W{y5GÁʃz/5îg* ήIþb;“ýìL¢p4FùÕË#úñ«Xš'U˜³ÎÚú¸mgã+ª8˜Ño§äÉÂp¸ÓZUéß AûyÚ&%¶x½Ý#x •ÿ Gí?Ä0Þ,ßR es}”ÛäÌT88T°ÄwÝxÎö¤.sêÃÙÞ¶ã¸wPÅ1ÕÝÓq1¬jjö¼CÛñ€pÈÒÔI½­™b1.LÑ •RÖ‚+€>u86]±‹b› „'º5öÞèè5¬‰ŽÕZY¬£›åy²X¼MÒ÷Ñq!“Áý*Ï!Û,—ŠTŠçÇó2l²Ç²z:õÒ¹LQÿ}3ÔÒ/0žWÄÍžµŒ/€fxs„Ñ/øz7¢ÑÍx‚TQf·ÛEjÌÀiGÖVùuÌv~xc"ëó¤’YTyßçõC¬‹­ù4ÜÏò&öLÃœ2_ÕOs€  º§¤«_ÓyRÂüˆúw²ðL¬ü˃X_¬°ˆMߜ¦õBé· ,Wª[Oº'ö_ )êÿ& +endstream endobj 1658 0 obj <> endobj 1659 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1660 0 obj <>stream +hÞÜVÿnÛF þ_OÁ(pJ£ËÝé7Šp§õ5­dª¡P¤“­Í–IÎÚ{ ½åHIv×Àlź!@Žâ‘É<&Æ髹„Ecx6ø"'ðÀPk#7Î"ãôB‚„(7¤?xÈÀç¶ß\(ˆÖ†@.œÐ†(EAH¢Ÿ·ì|r.`|:~þ®kSÜfÕ¢NÖë¢\À´lu'©6ˆ¾ÁHvIqÛKré¹"Rœ´“T@ØôL'™®!)3ø®6£ täD–ª³,0LÞ'ëû•nÈj®b­w=àÊøáôU{ŠûÞöéàÊyrlYvw‰lì¸ +;†BÀK'Øc © é»=5—IÓ‚iyÜg7÷YB’b­Îz +:CVšÜeƒÙ·ƒQ.#ÕŸBº¦%mOч +z¥‡*ßñCô¿F±êª¿É6i ·¦pÉôÙ ñªr†]ëz"¨Jyþ¶Ž³­DØ}%¿ CÓ +¸ÃBK Ù‹.˜÷ÀöüëÇ¿núßß}RïlŸKêœØöÎÞM¡¦ðó¦:Z­`V,p\}nSâ06øj]›–Móö`*•:ã]Æø2‡·å«îmy¸mv‹(ŠT¿BzýK#­=’󸉄ê6‘Ø™ß×…é±²Íc–W›öŽ^OçÑÕì{x†úÆ ^ÄqytËØ|ñ8ù®ðˆ<ÂÈt^£í\·ã¤Ñs]6E[<퇘IÔoÝ¢ãκÖíµu b§”û•V‚;Ü•Ü®ª.ß·¬([\gÇ(Þ8Y­î’ô§èý~§‘U–ž@Z•¸:ÒeRÃòóBu^Ü ©çI›À&‹Møå` éR§hÜÁÅ,ÝK¹È!f]èUU.bs“ÁW/a3àv%B†Ò¤®«:Þ/øÅ£Ùl„7”÷>»Ÿ¦üÿBÓÅåÕÕìúrôõÄÖ?OÕÝ…<Ä…<ÀªõÉÕÙÍül_P?›C=kð×gà츩›¤9DZVmîV2š-$‹öÈÇ×íd6Ÿ^½é¶Üâ[.ÛsÅÄ:¢nñ_¥—í6 Ínà§p”e£U‘4˜êQB‚D@Ô÷·Éj£I#ÿd‘~£>!ØË”¸&o2zW´5wöó¶"PýÄ–n¨-t©±®®™EïŠzô>ŽÍ5ö¶JcÖu…Ì Ã¿ €&{)<µ¾ž–EûØ üö»YÆ– +endstream endobj 1661 0 obj <> endobj 1662 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1663 0 obj <>stream +hÞÔVmoÛ6þ®_q+@rcš”d½4È×qoDJö¡E¢­ŠdPrš`èÚ¿Ü^\'MH±Î6Bêx|Ž÷Üˬ´Ñ/€U¥9¸ÜÛsÀâ ¤¶ÔÞ†ÚèX€€p© 8~qžË,\‹3nBx«qDaÜö-œpaCøQ{¯ÍŽaÌ<˜Ž¦¯_Ù2„Ç,½\©øö6+V0/j©–q"?Â_1’ÕF2™eÁP0áŒ!<Ò†ˆHq’ffz„Ý@ŸË8• +â"…ß•þ©ùŒãN›ÈÓl<3Œ³ûøvËŠ¼f¡æ˜Ìu0[‡`¦åû>0ÛãÜnón¨h‘ fÚ‘,r°šE$cK•ßä.Ú^ÏË°;IwúqËÌ»¸ªÁ:ÌÕ/ÖiL3S¯eÚN £Ñ× ƒõÎí¤sRÉMçd¶#cc(,ǤÓk.š\ÛõqÿNK•íJºIj¸4\ ]vU¯,º`X´¦$œÊ`šŽÛ×Á¶ûL¸Õfò7ß7†³uhrÑNÇ`8ÌÑúñßÿ¹ëÿ|ûHµ³\&¨r¼¯µU¡èTø}:És8ÏV(W—Ämc…—¶’ÊZ¤·;ôÐ(SÖœ/fw·\³¹[6›m +C³m>óö¦Ñ½û‘ý¹q³iD¼OòãM–Ž.!Òã<‹« .•þœÊe6A;™®²Z½y³÷u¤GFdÀ_Ÿõ?æQHHøY⎵ʊzéËrSïëɻù$À¤õ½ +è—ÂA¯ö¡‰†öÝ€]4´bÀßäÅÛo‚…ƒ>aÁî§;6š¿B4Åuü2H'±ú Ó–…ƒ 1>õÎy©¤Dß]>w¼ÉCÉzC9À·vNUÑ?k³±ðDß«›Š½×‘W¸#h…¨*Òñ|jçùuœ|ˆzy%!Ù‡¤,°ƒ&7±PŽw›XY,â[¹”Ôñ.ñ›ô«Mnd‚Žˆ½–‘ž> endobj 1665 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1666 0 obj <>stream +hÞÔUmoÛF þî_Á( ©¶¢7ë%E4‰dXQ#ÖZó0(ÒY¾F–„Ó¹I¶_´9ò$93pÝŠð8éãCùðxr¡œœ^¯\(»IèCäÄÄ!ø6ÙLÎÓÉé• .¤›‰ëƒnÙ¾‘ïØŽénâ`Û ÒÇ }˜ül\.®`nÇpqzñò%,…éƶo4¥Èv;^—pSK&6YÎÌ_Òp'¿ßɳ}f®í†sH/'3ŒHûäJóbŠ­Bß²¬`²º€ÂL?MÛA‡œé)$Ç=`ñ˜íÚŠu„Z¤“y`­¡=Áöü$IÀbÇ úªCÏŽÂÑŽtØ^pdG¶ˆ,_‘W‰b(4ñHÌlHeHÞSócÖI0g¡?µEFšgHVô +p’‰Q›öÜ`oÈ·Èë¥ãÎÍ™ë‡ýðâ~…Q‚þKT1–hzK±Ï%¼7£Øv 6„ì†ýšzØ »¦zâP·Ï¦çã"+l•1Næ0[‘§f+ÄÛæp¥©×߉„ý¤‘‚è0 )x¾‰OÝDÎXdÁ6Ü %¯-hyýêùhÏØ!¯q CƒOáSH­¿:ß6ˆæAgKE–ß[ Ièì×9«ªkÁ ʼÔ!ÞóÌ‚Ï<ÓîÌJÞ`æ‚ic‹fßb\:û*Ïê|›Qé]®ܼK9ÝÆðFêWË 6­Ö¹w½ä]vW1d Ð–™\ªZTµ^/Eƒu´- +â¼jòû¬ÄMîHÓ–Z5«Äg§­ƒW‚O­y%ŸðþJ!†£ñXMá ¿[”Û#2,VíجÌÅÇ«ÇX¼îäTI¬›\nör9Íãm1—Ú„ ã¿1!oDÍÄäÓ1—ySwh–*°ðÕ¸Kµ9\|¡Moð]×ÙÛ¦`È&J\FõÝI±§,¤ò[6˜U­¸|?ßvp¾‡ñË·,Gã}úÔ²µ‘¯Í/LéÖâÖFÕÔåÚÜðÝkØã•r™ÉŒ &¨-„hÄÚÃŒ‰=pI‰mAm¿ëSÉ:¦H`±BŽ.îTVp¦ÍÔµGJ‡Xx¡©jr´T>ù19ÏøM+’ÍÚØ`ó§p²º¡‰ZÀ‹^”꿃“)†¥–±Ù÷cس3:e= æT{ü£œ”']m½óã¯à%qC±‰£ØOʬ(þÇèˆdµ\I¡à‡½†Hh¥àµ¤HôùJ.ßÑ:Öþ‘ž«t±ì ¡åWëu}ò-E×ûÝ¡fjïq̓׿%v'Yû7„’y t$_u +0MÀÉ: +endstream endobj 1667 0 obj <> endobj 1668 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1669 0 obj <>stream +hÞìWmoÚHþî_1BŠd'ñfý‚_H¯ZqJ +ÎUU©NŽ1Ä-Ëv®á'õ_ÞÌzM) ‰®:t€ðz^wžyv0Ì”“÷#f…âXàrlÏ‹C+Så,PNÞ`@0U 8¾ñbx.³Lp-θ ÁBá…qÛ· ˆpÁ ‚ïÊgµÛ{MæAç¤stÃ\3æZðUñGNNdi +Ës@ï.\dó¸ «^ 8&s¬ÖaM˜iù¾Ìö8·«ºB‰h0ÓÞP"Xd` %‚±†Êù€JÛ«qÑåNäî›2çaQ‚¦;ÌU¯²IH+S-ãIµ€„®¾šj¬©J³Ò(n¤‘Y]¹ÑÔtÃrLº1½Jè£Èµ]ý‡¸ÄXù²ÒLn£þÐ\j,C2ß2•É°i¢%œÚ`šŽ[÷Á¶ëJ¸UUò ³yÌV}ÝäFµl‚æ0G¨¯û_þuÓÿnðõ-õÎr™Aãuï¬5 ÉÂ_»Õö|—É éê¹5ÉXà¡-â\Ó-âÛ_ši¡0ž0±c<˜òl¹¦8[›õ +³>óê¤Ñ­ç‘}?ˆ¸)¯‹±3Z\çqøíôžÚMî:d…ELF“xšwÂ4›ãXê\ V™·„Sp¸°Àé¿ÁXE·d„7‡(kÑüôçöÓ,OÒr:V§ËÛò6ÊÃóv§Ìħ€Š5®ŠúÛ:z«•¢"\ÄcLrüóõkí‰bé|÷ç2Of—Ԩ؈½j*àùèh§å¨Ì…ùö.QKÁÓ’"Ñ{O8º$GÎ>Ñ÷(è +LH|:§×Þ.Ö5S37k–ZøËceœ=(©% ;Ax@J©Ûâbº,/¢è6[!QL”„üJB.‚‹Nçjøéž”(&^¾£´¦k¥DÅ„îù*üW½æ’r“‘(–¤üŸ‘ÿ#»IÜF9ÉeÇp¼^Þ­©x¶¼;D¢b_&vû(ïµ/{m8˜Üs”? ;æ®êF1æF`æ(«-aYyÜì1‡»yÚ'ªlìtÊ–èS –ö8‹Ë!))箌Ë{ 7?…Þµ_dH4á] âèH Š]Õnï›ÆèGãXnÝ}N¾gëûÞïCÝÖWrr˜¤0«)¹ƒY´¦ceÿÂÙø¡/~¬ûƒþ±Ùë´‡r6î3 +²¨¢ÊÚGù[­,I+öU:TÔ{kµ¢0{’JºŽý»¸þZìÐ'S,VšÀlÿîîn×JòFoÐü›Õ¾:°NªO̤W÷ç™æ$éÃî¼pXèò÷é½@<@SDý-ŠeDö`ãÙ 8ÿ`½œ@ +endstream endobj 1670 0 obj <> endobj 1671 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1672 0 obj <>stream +hÞÔWínêFýÏSŒRÙ6þÂƤ­”_JE “4 +ùáÂBŒÀX¶Iƒª>Pß²3kBóA.ä**‰¼ËìîÌ™Ùsv +ÓÂi³¯Â4.˜:XJ Œš º/L +?»…Ó/*¨àN +ª +þa£Ö,¦k`é +S4p½0Å°upGØQTÜ? ·RÃùUVƒ‹Ó‹R º‘¬Ö˜.-§‘·XøÁZA£‰7âòû+FÒÓHÓu¨¨L5«à6 +ôHqF¢§ÕÈ·pÝãÞ˜Gàc¸ŽdwV°™‚KZD351ÓÇ൶Ȭ*eÓ~Ë&E£ûl’–¶ŠZ•+ªnjôE³3#š,òq}»è+Z¦#ãÕ(+Ùª1Uâ™Ë8‹· ²`¸kbOÚM3­|# #ÏDÑÓLþÕÆ 5fHvESÔ´[Ùd¦·ïo>}êÿ×ùæ+ín1•vNÉ÷Nß°PÍXøm¡žÏçÐó§HW‹È-«HÆUóH®èÄ·YÓÑÈÇL FefÚ²4¡-O›ÍAäºZz>ØÌ6S¥Qg›HÆö$R4q)y’ eñ ý òÓ˜O|4wý ^xÒñ|( å¡|¶å~U1©|»^ü ¥ Zöú½7üˆ¤~„÷û0LÂÈ’ÉPš,WI™ìÅ4Z=çÂm]và$†b™¦ï©É=Z·Î^ñ*ÀAÌ‚6è;¨Ô+šsP«˜†¥Ãç1ŒÂÓq\ç÷n†ÃâIŒ(â@YV$Ø­n+lÃ|-Æþ* çë>b?ñ|r¶>pÐí¶oúN§ßr[W-Í7iE_w´CV4o²Š·¨Øú°üšÑrŒ? ¿fïrÐi|P~Ó-ª#ók{kžm=üõ:’8‰èV‹—hÆüb—Ôœ½Qˆe„a}ø”3 ¤ðÃé·Z yg•Jo#Ù­/Ú±ÄP€´ÏoœUí)æ±æmòߨTöyR°'RÎ Ö½‘¨Â4s¶g7ˆÑ.HÅ~÷ü¢ÕiÂÉø]4!w2XÐì¶XŽI¬Á£¦Ao5ç×þ8¹?8Á†Óo5;½AÛ¹n5Ðìþr|® ŽæØï휷<^ëõ?H>1®-Ãws|3¨}¼ÇÇú~ŸÃˆ¹mþÓ«‰“Sò¹ÇåßÇk¨»œ¯§Ë þu/Û7Mºe©Útg¼s×BÂ÷Z˜‚êCéÝá~f >£ûçH/Ë Ít-¾,¹WùýéòÛæKGÄ MiÅe4~æzÊJŸŽzkó÷ŠO(bFŠQ‘Ÿ3…ÀP ]ìѵŸÁŒtðõÅÛÈ8Ì]±ÇÛÙ]9²¾¡õî[kúÊ÷>DÏW­sºOˆtybOÂÑ«@ýÁ÷:¹FËù@Q +endstream endobj 1673 0 obj <> endobj 1674 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1675 0 obj <>stream +hÞÔWmsÚFþ®_±ãw¤çÓ 2Mg\C:Äf°b×òAEäI#‰ÔL'?¨ÿ2»wŒ_ÀIh›bžÛ{öåv÷Î:Œ•£³Kƹb›àðX LY¨Œ”_=åè:x#E7€ã>ô†ÃL“3n€7S8²0n¹&xCpÝïOåƒÚj¿:kÀéÑi¥½LÓÌT“qæÏfQ<†N\„ÙȆÚGï7ÔdJM3M¨éL·ëൔ2’ž¡ âÔýРü8€ëLón—q\ÂiIB2Bоógé4ÌIªí)¶Á½µYÝf˜®ë³œ[Òo +1‰Ñ`†µ1‰Á"SLb0V¡rE€\ÀI«±ŒK­´¤´¾.#Óõó´šÍõ}ø42Ô" ä"zºj¬±ºZŠ½+…²á¤2ä“ëu­¦›¶A/†+A!Çr\\ßÃ!re‰œ æî4§Át5,)óR_—ÊpÓÄ–pÚðå>XÖÒnJOþÝE¥ f©nÍàºÖA³™­,Ÿ/üç¢ÿ_òÕ+íé0vŽ/÷Î\e¡^fá?kêÉt +ýhŒéêPrk:&cŽE›‡™V3)ß>i†‰`0a1fY[Ž!jËÆf³êCžgÈöà2×–•F”¶ìGÖºqC4"¾t„eåàþ'Žk¿á(êEñññ§Èï¿TÂZ6gFh­¹®‘:·)̵}2Þ«SÏÀÑê†RÄ'~ÞK²b ’Røëé¥ôÉ‹Œª[¬MŽâ"‡4¡GóùU¥*RñŠà[ÄGI†FÞÂkàM¸%üçqŠç3„‰/'›QªRÙn8íŠ#'2!|,•–¡F±'Í­$£4CgGuDîÏ‹* 1>}ï`çráZD®!ÞÔ8vbòõ¯,êá ¾ /»þ"̤‹QñÝ^®m$oÐ̵@fvOnp¢Ý‡Ãª»¨` oÚ( Dx* ¼—­[Ødò%â©0»”ûÈv™úC<»KÒÝ +w‰r´r÷²wrÚ9?ƒÃ€Ä¿ÊÍ'ü¤ +™>¶lOî¶Â<Çýù4¼Ž‚b"víÛ=oµ/;gçý÷Ý6â×–÷ƒ°¿lKš'/ FIŠðý8ü‘Ìã —í° +?ÝMñgA?w!:y÷ N¯¾ˆT¸‰š˜;Y?﵌{Ét1NbÙ¬ˆ)ª|%÷.(…nÎ.Î÷TË©´òÜŸ…ûIqÁùCÖtú¤m´Ÿ{òúÙjùÁJ;}d.íÁ×·¸ üúã°(‹@pî.éò (é Ê‹´0ª' +±¸tÈ“ÿ›â)›v†tÉÆî>Ü~¬.õ ºÀ÷·S\E~¾<ï+â>ò]âªsBòØ!ÇøÝC›À+ìªEì…M^ˆ÷Fvó¢¬Ý¾mË +Gˆ?ªð©?¤ƒlÆ›wfüÿâ‹Á„ò› +endstream endobj 1676 0 obj <> endobj 1677 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1678 0 obj <>stream +hÞìVÛnÓ@}÷WŒ*Ù´ÞîÅ× !•4AEED­)E˜+vR£ÄŽl·TBý þ’Ùµ6¥! µˆ:‘¼™™=»3çÌnŒµÝ×Ç Æ¥æp©–瀠P$ÚH{h»} ‚‘Æ8Püà‹y.\A åL5Š(„Z¾€`ˆÊ,¾jŸôý^lâAw·»½ ƒÂ`z>.¢é4ÍÆpUI1Š†‰ñ9xƒ+‰z%N„“æØìk&"Êu†jÄ=‰­ ’(N +ˆ²>FðEó Å)TN’‘\E¦¸ô.£él’”2ªh¶åc®± \ø¾Äò(µê¬N\§õc9·üX-Y,¡œXy­|U!ÐiymaÌf+Íöíº4‡QYa:ÄÕßÏâHŽ¸^%q=€T¾}=3ˆ­7ao› bxÖñúM™m˜L8\þà~mDs-×Çù"V‘מø|XÁ‰áz„éIY6ëåY³²¦8¡’η%²ÚL¨¨3ùÌÇE=bé¾É)«‡6qt€ö½þëÁCÿ]ðùOÉp “ÌÑ–;1W!kTøw·º7™ÀQ:F¹ºRÜC1–صeR¦z»0¸@cµcì̦·\®zËÁÓf~¯ÏŸøNÝir€ÑŽ‹’u}Q®N"Ú& jgÍ yÒ„ú,/Ð^™/ãd”ÒlU§“–ƒ šñ\ŠC=4B¾]7ƒMYÏe°øŒfEŠæ¬…ú(?¯vàYfʵ-ã‡{ÝÞ> +6x¾)š[±ü††œ°U³5ð™¡S¼•ï¬ÉvšdÕ©Ìø¡}Ü-Gs‘â¤ãªPÌ´Àho±sP“²Fù®VüR]¹£‹¤XÐÀædݤ¾ûî¤wôÄücg¾/ë~y«ûïÇ|ÿàô©çžùåÞ%ž%æZ>i6¯Cí³oŽ¦ «µ³ˆ!/„Q—ÏO7ÏÒ|¥Rj™H^”RðöºÌ³oèL‰ ;Õa!Wä;BÇfêQh¾ 2W ÚV£(5Ȧ­³°«¹šV‹åjsZºùÚwÁ¬¬{öÿ¿¤ü+ýôò^½²î¹ü8YÁ?Ì?_å“. +endstream endobj 1679 0 obj <> endobj 1680 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1681 0 obj <>stream +hÞÔVmoâFþî_1B:É>ŽÍ¾¿$íI.8AœVUé Ûœ+0Èvú¢ê~PÿegwmMIÓBÚžù°ëÙÙ™gfžÃ`e\}9g°ª G€K=°=…252ã‹È¸ºeÀ Ê Æâæ¹Dpp%”C´1(Z!ÔöDKÜPfCô“ñ9 o¡O<\ º]˜–óˆ0·«2Þlòb£¢NË,^¦Ö÷ÑWèIhOœ=F˜Ó‡hhôТô³T;îIÛÊô,“´„¸Hà›ÒŠ~0|Bñ +•—¤&Wš9ú€ðçx³[§•Ô +#ÃáÄu0Z‡ô \ø¾Äö(µuÜ*ê³A¸}tˆÉ’ +Bb2ö©òU‚|ÀCÛkóÒk4èû:3㸪Áê9Ä5ïwI,wܬÓDo —«oé›Ú]£T.?4J\¯”õ­—/Ü×B"×v}¼?Å-Ú*·ú$yXÖðµåz„™ic²jüm‹ÆM•„Ê2pî¸ml»„ +ÉoÀ|têÛô{œ2½íƒåÇh×—/ÿ¹ê§k|ÿ*k'\Âdåh[;±g!kXøºPƒõfù +éêJr[ ÉXaÓViiõ„äÛ(L¢cc6½årÕ[›ýŠ"®ÇƒO|GwšÜ ¶ãâ<²ƒˆr5ˆh$(dÍfÿlË<-P\Ïëraîò¢÷>I³|š××[”Ëãza.,ù»9´CŸ:2£O T:ÑÛ?9Ê3xäåÊK^Ý»5Ž¿D»9}_>ٮ̋:[˜Ê·õ;ètá~2ƒpã“û'`C’xP~ý!®æ»t™Çk ~= êH¢‘r4Ÿ†ƒQ0>bÏåqY#”»´Ž×A™Æ/À´-ÑLŸ½™hø ŽK[ïå8x”«j“(œL‚éh2 fÑHzß…Q0fao’λç Ü<; ?(9)syÊ–Jæ[O]_äÿš®C‰3Ë.?;‡¬*B*þŸÃÉáèöVŽ¸vVfÄQÿQ-Þ¶ZM»žÏ"T?mÈ!ñI ±ÁCýjßÕ½m•ë‹N­Á}tö7UÃÓýóÆTèªÞP ÿÓþ.À|Ç–’ +endstream endobj 1682 0 obj <> endobj 1683 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1684 0 obj <>stream +hÞÔVÛnÛF}çW  ks½\R¼D©VV –#Èl›¢ì!R +‰(ºuQäƒú—á.%ÊwÇ.šØ\]îÌœsf$ fÚÑ饳æÚàqß›C™iSí‡H;zoÑT³püLJå{ÌàÙœqÑRãx ãN`C4Á·ˆþÔ~ÓOï¡Ë|èõ`T–Ïl}5+“å2/fpVTY9M&™ñ{ô#F²e$ÁlL‹Yn¢ÍÄ)Τ^ Ÿî®¯gIš•)üRÑ\ ÇW8½D'E}2Ç0¸N–ëE¶¡SƒHë:Öê²® LØAs|ÎYµ+˜ç6ûHÎÞ>²EdÙõ&²±å*¨ +7¿!ÆT©¨ô»’šódSaºÌÓZ§ ­„^e©\@NÏ@/ ÖÕÕ±¡:TN>©CB>¹Õ5LËv}„<Ç ðý.ñ®r%wÒ«I?žÏ,=SWnT¼U¡‚¡jµ&œtÂõ!§©„Û²’À +0¨Ï=0·ä² †Ë\ y>ýñ¿ýv/ß~$ílY¤o´³·.´” ÿÛTÃÅÆù íꑹ ͸Á®Ýd¥aÚä·? a#˜¥¬Î;Sõ–'êÞrqÚlQ 9¸²Óh§]’³›D\Ô“ˆ7EB™Z4Óu™ÂÓXŸ®®ªCèÀyøë` o6C:¾Î ó8åÅ()«£ ö7X{"î›3"C[F¾Ä¡½5sý½õÚ~VŽFxo ++G“–ÛŽ¾$¥Zy‘«Ÿ¦ö=â¯aý˳“ÁëØŸFx[ÌK[ V á­é¾–6ØY‰²»=Óñgè¿ {Ôm, +endstream endobj 1685 0 obj <> endobj 1686 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1687 0 obj <>stream +hÞÔVmoÚHþî_1ŠTÉnðfý‚C[‰©z"çzÕù>8°·`#Û\‚NýA÷/ofm“‹öt: ¼ÌÌÎÌ3/0`®œ}0ÏÇ—·Àn9`qH…2SÞûÊÙ…ø3Å0ãFËe– ®Å7Á_*½0n{ø¥šÿEñÇ+œ.‘¥)-#Œý‡p¹ZˆŒ¬ú¾â˜Ìu­Ãš0Óò<˜ÝâÜ.pËRH%Vƒ™öŽ‹E–Tb1¶¥òd<@¥Ýªê¢—™”Ù7‹Ê Â,Mw˜«Þ¬¦!L5Óâ==5ÖXS-Í.K£trW™Å“MM7,Ǥ¦WIäÚ®‡÷GxD_iRh¦ëI?kn‹ª(]fe¼$.ƒaÓdK8µÁ4·êƒmWH¸U ù ƒ¶˜­zºÉâØÍaŽ +P=üç¦ÿ_çÛŸÔ;ËeuŽW½³¶Sh”Søï¦ÚY,à:šã¸º4ܚØáÒf"Õt‹æíwÍ´P(¦LfŒ‹Yî–kÊÝrl¶<äûfAóœbÓè€ÖŽ‹|d?7%ñ +$ÈÌÊCùš­Ò(Îg(ÔY²ÎpñI µ¿ÉªÝ‹.¾I3ÿõßµõšh^&S±ÐßÝ…(Ï:£(¾ ºë¼¦hÔ:‰')z‰à-p”·5Žlo r;³h¡&î ¹Æq!??×ËJŸ‡kïE9ŸžLéårv†~8ìŒ>/)ò/Ý¿Û¹†WÓ“Æ!oôÂÄQ,1=+¡£Bν¬wåç.Ü©7ŠÓA¸ä’ü“âD1AÝâ„AçsqQ;ÿ´¥ô˜OûŠþt†ën~÷èÖˆËðÛØí  ¹«¯ë8…W·_²½ìWiopÀ÷õd7:ÉOúÃà¸÷á6á×Ý$ÌépuÒž˜…ë6cÕ½ýêoP¼p^“.î` .’xh“Eû¸"õú(¿èÜ pF¸ ”k¢Út«r¼…è‡]'÷I=Œ4¹—@ˆ9Ðú5‚Aűx®¯Pþ ^eò3—Ÿ mWr_ºE +—"PåîØ’í=Ë«Ëp’&DWR‡ŠÊíC|”¤‘ˆóqžÊÚMWêPž¬\Û 9´;WQ~ŽTÓKóù CÜ»¢¾ÿLßÇЉ -é¤*Èp½ÜÖO0mJÕ^†ØTµ@çbUÜߟ×#,”s2öû£r>'¨°Çq%$O;óP¥Šìvm3ÎiVQŠE&¾D{/³|ÛïôÙæPöû{y²Fi²Ê!¼#Ž, ÿ=ý%À«¹' +endstream endobj 1688 0 obj <> endobj 1689 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1690 0 obj <>stream +hÞÔWÛnÛF}çW !ck½¼ˆå´€b3‚[YV¨‹ êCR2£+Húù þeg–eË’ì¸0ŠÊ€¹:3{fvöÌ€Òa¤µû:Œ2Å6Áá °6˜ÒX*ï…rôAÄPÑ àø‡½á0ÓÇäŒ ¦ +GÆ-×â‚ëˆ[åOõÔûuÖ€“£“ƒ襚Þ`¦:¥ÁtšÌFp6Ëãt„±ö—ø #™E$ƒ™&Ôt¦Ûu§J )N(WFƒ¸%µQœB0‹àT_—qÜÂiyÒ3ÁàÝÓÅ$ÎÈËJÝrñ¬6«ÛÀ Óu]`Vƒs«8µm0Ç^ڱ̰رZT,S±U­\Y!Ðh5–…©•©”é׋Òt‚,­f3Gý´ˆZjGÅzºêLcuµt;/Òðªt2Š'×ëZM7mƒ¾nÚ9–ãâþ.‘+–è:ÌáRsLWã’2+ãÍge0¼5y'œîÁ0lgy–µ< 7‹“ü º‹AÌRÝšÁõbYÍf¶ +°|>ÿñŸ»þÉ«¯tw¦Ãtº9¾¼;³R¡^ªðuSmM&à'#”«CâÖtc†]›Å©V3Io7ša"GLfŒYö–cÈÞ²qÚTƒH£˜.sí¢ÓhÞ¶ƒÉZM"nÈIÄ—‡™Y¹ÎS¨ üüÂßA:¿­ýÅÃÄŸß6›³ëiát¾Èê@C¯ƒƒßWQç6õ·ä_¤É,Ôáñëüöpúù=ÏŸa?#÷ý ö%¡x»™gùI‰æ~z L¬Lc„ñí_Ð\“k„cɃ'ÝÉ”Ý&yx…µÛH%¾-ªŒªbíH* ²Þø¿iÞ¯™,˜ï!ÞêÀÞS9­>ü%ƒññóbŸmŽ}ÖE\xmÏÝðýÍáûqÿ¬Û~Ýè7Gÿø ñ áõÅë§ÐÝœB—R8ÿJåÿ±ÕºÝ²–!â{ǃÁl{z[¨§G… vR*Ò Ÿ|S#As3CN>8¹*õí@|üv …“-©¬WWPǵN~ïÓÚÁéýï j¸-;­ÏTú'†ŠL„&ÂE"ãfs„éœ&æ!ÚÑPºTö;²!þî»îõtI aºŸ“û‚\¶^ËÚä9Mùõ,qú#Ü ¾Åéýñÿ3êÃ}u¢.ÊÑlNˆw÷¸]¿2Ô¤Üà%Âj‡ñdÒN“¨Íûmú…£J]Å6ªPýŒÂÚ'ˆ{NÛ?;•"‹¤È"rGI‘ÉöyB˜KQ<„«#<*§•¢…Ò^Æ¿ÚˆdöˆžøIm»¥¶ûF.“à‰F¿I‚ê"Лê†ç^AðB„HTœYdî3|sØ™z2ĸ¶QE¯‚¬äøSjVlÞ^ۇɾ‡o?-!<¿Ûm{òÕGN®®¥·¨#WAžÛÇ7ˆ? ¦&ñnx…Ã×Ì_Îqs +endstream endobj 1691 0 obj <> endobj 1692 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1693 0 obj <>stream +hÞÔWmoÚHþî_1BŠkpü†›^¥%ˆ8©zu?¸Æ&ŽÀŽl'òƒî_ÞÌîBŽÈ•ötº„°ãÙÝÙyžyä0•N.. ˜–’c«·Án;`éPÄR"ýêK'çà'’a‚Ž¿8mW³Lp-]ÓMðç’ŽQ4Ýö,ð#4tÃÿ«ôIy×=‡–Ö†ÎI§^‡Q¡mÍRòiÎçi6…^VÅEF±úÙ'Yü$S³,hšá´À'51"1ËlSlz‡“¸€0›À‡Bõo%OÓq‹N›h¥ÉV¦xtáün—´ªëKŽ©¹¢u´–šiyžšÝÖu›ãfT°IdC3íI$‹XlÉXSå1‚<ÀI»½â¥)2Ù·83ý°¬@m:š«\ÝMB²L¥Š'Ü€”FOÉT­¥ˆe¿‰EEt#™|Ô–Ú4,ǤÓãN]®íz¸„&Æ*r>3¹*¸Vݶf(±YŠóòL†—Æ®D§k0MÇ]݃m¯èGò'ÚÖlÅkšºÁͨŽæ(«ñŸÿùÒÿoðõ#ÝåjÝœ¾º;k]…†¨Â7Õ³Ù ÆéËÕ¥âV ,Æ›¶Œ µiQ½=¨¦…Îx¢±Œ±1Eo¹&ë-Åf­C¾oryð4ÏáF®v\Ô#ûIˆt“ ‘¾ ,3aÀC6ßNâ$½NÃ×è~= —q(iä,œÇ8,fèÇq9£‡²nõô©%ZºC¬>žÜiV%’ä÷Uƒüµ:Œ»ŽJ8šð¹Ñ‚¬Ö`1ýã-¡V?,'r/0ʈzÊçÙÞÇíî“ û/†ƒíóiòŒ›ì~>ÊgËiž•¨ +ìʸ¬ +’Ú=ÊÓ ÝU whUåé®=I^à©)üú)¤ð†ü9ðÐý”.¬×÷%²õl€úŠºݱª‹ï8Ê’(8“ØÓÝGp`˜8íF÷Ûi\ ¦Ú¼g+}ËAß’ÿ§1´œ1tßÎ}òwœÄwj¼ÆjUDt/>Ý~^?/ñaOvßUS›6{áÝß“ÿ`Ò°§Q +endstream endobj 1694 0 obj <> endobj 1695 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1696 0 obj <>stream +hÞÔVënÚHþï§8ŠÕñd<6¾$éJiâ"V-¡fšUµÞŽ1à ²aÛªÊí[î™±@ I*5«f8—ï\ç  •“VÏ€a¡Ø&8Ô˵Á¤'Ê@yÕ“·ÀŠÁ€â7ÃuˆÉÀ1)¡ øD¡ˆB¨å™Àc-9ýE<‡Íq‰¡&dQÙ›f•1¬š¬ u`Ìv–…°¬e$Ô,#ù ºÄR=Q£<6A³‰­,÷§oÿ¹èÿ|õSÔÎtˆ!*G—µ3W]hT]øk]½!H‡Ø®ŽhnÍÀf,ðÖI®é¦è·¿5f"1éé1ÞÌên9LÞ-§ÍjqÎÊùàÏ.oš8 ´íà@²Ö“ˆ29‰è2Hž‰ƒ®g‹ÉõíçâlÝÞMj‹ m +¦ÕJÎ_ 5©Á¶ÅÌò4›Bu0]ÌýÀï\ÁMû¢†ÙA¨ÕëÞæIôeƒGE"xýdÉ0f—·_ø÷Y§õy¯ÑS”OKù#¤‡Z<ÞarÓU8Ðý°€ƒc„Ò[ã ùô4‹&Iˆp;#Ls´ž¢ô R8‡é8²˜"¨xeCœÁ…g¦ô°«¯Hëq±octG¦àx7ørɈÆZÿ»ÐGeä!c {$yHÿIìRg2eÏmTé¨7Š +Ñe!ž•²ðO]‹*_ˆôû1Í×À¶úL¿°°Ý|:+J}ø±Çµ6ôó­vC4$߬:dêfÐH/[ÿi×]?àŸ0ðí]0CcÙâé“úEÖõaÏ ˜$GãE²¿ÂËU|MçñHdµ#Y&},³Õs^!9xuúàŽH÷/ÞÁÁ£~­VE~8 ö[o×Xo#½Ãý–¼€½zHçA»Ózûjì@úÇkî÷^ʉNáÄû7¿¬w»Ù;XwO{ ÎÂP\Vá5Ôkl½éõãkë)GÆg¿çßj_wö?éw?óÒ·òéB¢ò±3a×{/ƒ ÕxåGâ™dî> DÇ¡ˆÓpbOmï9ŽÿÎþ`›ï48 +endstream endobj 1697 0 obj <> endobj 1698 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1699 0 obj <>stream +hÞÔV{sÚFÿ_ŸbÇ3q$çÓ ÙmgS:Æfd5µ'ä¡„×HÐà4þ@ý–Ý=I’年¤œðº¨µ£vA|ÐѺÎm礧?£ñ¬ßQû“ù¬Lô=x•ì•aCÃñn·±>í¸¿_'?ˆB)ˆ#$øA‰ˆ$>•D.Å*¿¤2HÇÓÑÑ HZÁâó¢ÁWÒŒ+®% RƒÅ qíŽ÷+¬Y@òJ¼-âhDÂßñNg P‚«Ë3EÙÞ éëþ¯9@»µlº!“4+Ã^ëäúדó³vÝk¶ê„²º¯z°W.Ö”?!’ד/Ýš +*BîÖs#Ë‹WT˜ÝA]§Ql¯ûU#õÅþÝd•Žƒ78xó˜ƒ÷ðŒŽðDMÆÁHHÄÛ…°ßZ¯Þh^^àÐ   =|€Âņ­q<Áß7“Å +âm†ÞÂA¸–ñ÷Ér³Èãà¸X.‰¾ˆ–­¦z¢;K:ê~B£á‹(þta?¼“¿ ¤äqP¶þ$ÆDD8ýø1*ø)u +¢RéMר'¿Hîi\ÍA·¾>àz7Ä Ú>½ÝƒL”ÖÝèüÞbç£v<™&O¦[õ€HÞP™e±HïŽ> endobj 1701 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1702 0 obj <>stream +hÞÔVÛr›H}ç+º\"3žÄÅNRåȲK©X(Þ}0y@d T€ö’M>hÿr{¸HÖ®À²·R[+=ÌpfºûœîžsáôzÂ`ž º +5A3uP)¤ +ïáôŠ'˜ÿ80Ó ª†J UÀY +½ªY*8>N(ÓÀùU¸/ûWÐ%&ôN{ŒR‰™D“yê-—Q<‡AœièùôÉy‘Ô2’BTdF˜ÞçRÑ#ã3Åä¾ ×ãÀ›)xñ ~N%ç³`Š&”ñJ±3ÂÐÿÍ[®AÆwõ¡«Y¨U']ˆ¢Z–D3)ÕJÕºB ½^ÇtEÛYÇlñd©Å"fc“+«È¸¨™ubäŠJE¿[¦æƒ—å É:1ÄÛÕÌã3ẼY9ˆ–K¤+VÛnªM©_mRÊ‘²®$3UWøƒJ+!C3,´á}¥I¹2[û9ü$&abP¹ÌªxI\ê5¡¼Š¢u!4­VBÕRÉŸÀ,K’M¢‰–¬PVN» éDêñðá?ßúÿu¾yäµS Âxåh];uÓ…¬êÂKõb±€q4Çv5xsK ›1ÃS›©$«¼ß~‘Á`F +Æx2«³e(ÅÙÒñ¶Ù\DŽ£”÷ƒE,½> endobj 1704 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1705 0 obj <>stream +hÞÔWmOãFþî_1tÈ>âe×vì89Nâ%צ:B¾¶æƒIœ°9â ۴מøAý—Ùµ9 :UUáƒ73»³Ï<3ó805ö~<0- ß…€·ÁkûàrÈScbFÆÞ¢‰!àøјë@àrƈæÇ(Œ{¡ Ñ\xýa\˜Ç½Ðbm8Ú;ÚÝ…an‰6sÍÅ4Oæs™M¡Ÿ•i>IF©uýŒ7¹ú&‡¹.Ø‚ ¿ѱacDºg¤VN›b«Ðgi2NsH²1üš[ÑÌÇ#œÑNGí”xô¾$óÛ›´ ]½Èðø˜­ÏZ>0Ç Ã˜×æÜÓy+*”Ù`Ž·âD²hƒ«œHÆ’ªP:½vÍ‹]!©Ð·43“¢ËöY`~º'´rÌ2ëHz†ff±–Ym;©6å£ëj“£Ÿ\´,[¸¾C\®M„x~ˆKŒ•/´g|7*á+h3a¦UÈ¢ºo‘U—aÑTI8•Áqü ®ƒçÕ™pWgò7ˆ0´ì6óÌÐv¸ÐËX>óM€ú¹ýã?ßúÿ ¾üHµs&¨r¼®»ìBQuá¿ õàæÎäÛ5 æ¶6cC[¤¹e»Ôo¿[Ž‹ÆtÌbÌj¶GÍ–b³Ô¡(r´<„,ôõ¤Ñwûê‘÷ DÜQBÄë$A!«Õßä6—Y9AslNwe± §Ÿ"xS@lA=M‹›€¾¡Ì.äeluf¢Å}¢õÙèr±y%ËâB¢ý~ØDZ¥Go_‰è°Û1ABO£ :ðͺ€U4 +…v-Î/»Þs_gí2.ñ4m•o1²ßÓ‰<%Ùí׉Ì:ë¤8ÍQ£ÓqlÆ–Îáëf'‹CJØÞIöw°rŠŽæNv7¯.ø(‹² [ºFîîâm__¤è!"šë EW6iûN!ÿJ›°#³¢T!5Ã¥nŒæ¦²ÂzóÎÅBÔj© Fðžì|s/UåGódÙL»pzvÜ;ëSmh†‡2̨ hïÒ4Ì+Hº0Û‚áµH€¦ ›YqY”3êgØK!3´ÓHÒ¡mØGh®§¡¬þ€0–B’Õ!»ÛÁXÜQí¾‡–Ú¯Tzó +$Uá‘m¥f=-7èSµ5"¥8Ûáy¦ØÛ4Úý÷iÒk%i˜ä¥,å"#¹Ð°(=(*%FjL#5<8‹úQÿt [z#EQôHÊ:·šÙ ™§Z.׳öM‚ìQ‚4]'É—C©•ñÅÆXI^~Ð89ø­~ý4¶Ñ9ÂC­“>M: _Ó}©¶OÌßÐßèÆ1¥·¾·l›^W³b_QXmwû/ËêêídoôÇp~t08úé ?8×m®dòÙ Wyš|^ñ’‚Ú®¼IúEttõ9úóV™;kP/JÔãX‘¬O Ó·±5ºénÇœ­TϤ~Ußuz“c7¡g8›v:ôÚ«¦¤YGûG€›ˆ1[ +endstream endobj 1706 0 obj <> endobj 1707 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1708 0 obj <>stream +hÞÔVÛnÛF}çW  ãp½»¤x±› +M +d[Xç¡ìM­&%²“¢èõ/;»$•¨µìX”QÔ~àjvxöœ3³#1˜i§ïÆ f¥æXàRlÏ‹B!´©ö6ÒN{ DSq øæ¹ÄâàZ”PÑB£ˆB¨í[¥¸ Ì†è‹ö«~ö C<Nƒ“óˆ¥/gE²Xdù úùZÓ$ÆoÑ{<ɪNâIJÀd„9ˆ.4å9©ZqOb+è‘H&¢€$ŸÀ‡Âˆ>i>¡ø +•/ÉL®23<¯Éb5¥Ì +#­cû¨Õ!·|ßb{”Ú•j‡×iöÑÂí­}tKše©Mtc㕯ò7m¯1Ƭ©Ôô;•5ƒ¤\ƒa:ÄÕYM¹âúZLªdòéë¹A:zvY'éÇ:‰WOÊ:†É,‡Ë­‚¸Ç\Ûõñý!.«XV;“»t 7†ë¦‹²¬Ï[æõaX5U*ëÀ¹ã6…°íF µ*%ó}Ãôˆ­û&§¬ZvÀpˆ£4Ïüç©ÿ_ðÍGY;Ë%LVŽ6µ³6]Èê.|YªÝùFÙ ÛÕ•Ím0lÆom) +ôd¿ÝÜ ˜Åof}·\®î–ƒÓf3ˆ¢ˆWóÁ'¾SÝ4¹ÀlÇÅd›D”«ID‘ ˜Õ õ—-×æÏ1Í0Ü¿Ž29ŽÎÎVYë±çßš¿Céß6L6…Xß`HŒW“r<_FY)*,½z€ÈtUdùzëÓåÝúµŒœÀ¨?a<?ŒºQ(Ógp<‹ãüèõn¬-anxU¤JÅÃ¥¸¬4*ùú½]ÿ{Ú¥^2ŸïéR¯;¼€K½Ãóù!\j Z¹t“Yr;ØOnÕR7ÝQ¿ûvp ³î1©PrkÝVÿ„;ˆiØ^±M‡½˜i²õhš‚keZ¬’4['9þsô== ºÃnкWAˆ^Iœ6v¥Š†«Ú.Šì^¢6’•<[ÛŨ!6Åq GÞ[×DÑ‘÷¹绡¶•m}_¡²^±\> endobj 1710 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1711 0 obj <>stream +hÞÔV[oâF~÷¯8Š´{OÆlL6•„Š`äÌf¥Ö}p`L¼ v:6ín«þ þËžñ…4ÙB7”ª*<ÌðÍ9ß¹aÀ\9¹¼1`ž+Ž.mƒÝvÀ¢ ¸+çL9`‹ÃŠ_<Œ¶K,\‹j[*Yµ= Ø/Ô°ý¬|¯^ôÐ"mèôŽŽ`"4£M,5›‹h¹LÒ9 Ó‚‹8šríö-Z²*K&±,Ð b8-`ŠŽŒÒδ¼™mÉ]R<šqQ:ƒ÷BcPT¡RIJš¥d‚6 ÿ)Z>,x.¥úLqLâ:­CZÓò<ˆÝ¦Ô®â.SQ>b6ˆi?yÄdI«|Äd¬Så• òív“½ö¤ö¾UefåhºC\õÝÃ,’7S-ø¬º@"OOM5ÒRk±ëZHLïk!³:©ÑÒtÃrLùâh!äÚ®‡ú¼"—Ȫ—ÙjZÀ­æ¶‰¡òš2¯íeim ‹V–„Ê2˜¦ã6u°í&jU‘ü†çiz›Øª§›Ô¨®-Ðâ¨ÍùõÇ.úÿ%_ÿ”µ³\bÈÊѦvÖº º ÿ]W»‹ÉÛÕ•Í­ØŒ9mÎ…¦[²ß~ÒL A>#¥Ç8˜õl¹f9[.›õb̬փG<§š4yAiÇÅ}d?."j–‹ˆ6AB陼Ä"I‹8TãlUÃ.ñW9ãÓTÿfÆãd0éu:§Ñ’‡j¨…Úéã,´¨#Óù”5‰ÿ¬x'Éo¹(’i´¨XJöæ™.|á•Änûöº#8hÌ¡¹ÉêU&’_²´ØÉî• ¿óÇlË÷QÞ]$ót«ÝÑðr¼‹ÁëèÓæ^ÍŸ\Òu"éýšñÅ®$é¾]i_êJÿÇÕNÅßà ¤ÛàIœ t%3 §À[ˆ2Oéj9‰Dp.™Pêè(Ôà×mþ= lÎ IvŽáõ4)¥Û¯‹Ïˆ”ãºÉAhÒUéÁÙ™ÄÏ·eèi–¯vƹϘ=êØ–Ž•¾Èù‹Ù™? †—WÇ]ƒc$p ¾K$ÿþªí‡ÙC˜ï?žž=y4‚ð–*ý¶¡»ž-íÓ0”ëys‚tÛÍ¿ûoœZÞbÓ¾pNúã Œ|?˜Œºãž?¾aÝá˜Ý„á¿î>>y›F˜R|Ã>,‘ÿ‰/’<º[ðÞÂÙç¿&+f8n¡*'¤ÖD¼R~jÓŶ؋Y5Z¥"âÕŽÜ‘-Yªˆ¿xƒè0°àñ¬xYôí e èŒl¾u 3±m´¦y!—Æ>¸&ÕNýGTE†ð^œ*™&_³æ·VŒÝ‹U¸K±ØUðn_Å*î«ýä¥âz–ü{ø‡;0o‰ +endstream endobj 1712 0 obj <> endobj 1713 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1714 0 obj <>stream +hÞÔVín£FýÏS\EZ-l–Éða0Y¥RêØMZ'¶œIû£ôÁàÐØ`n»jû@}ËÞ;öZã|lÕ®‰áÎ3gÎý,˜iGß\[0«4ÏŸwÁízàp(-Õ¾ÚÑÀ DªY6püÇÕõ™cƒïpÆm # +ãnà€ˆqÀ-įÚúYÖ…ÞQïðÆ¥au™£³2Z,²|y”i'ÆOâ[ÜÉQ;ÙÌqÀ´˜åu@œi&"Ò>±Ù]–Г$š&%Dù~( ñ³0ŽK8-"O[zf¸ô‹ËyR‘W_h7À³z¬ã³ €¹]Î]ujÏf¾×ΣÌv·æQ-Ë‘“¨ÆZ«@*NºÝV³¡ÒÐï(i†QUƒazÌ×o–ÓˆF¶^'S5€Œžž¬£7n—Sß5N¶zr«c˜–ãÙôâpetÑä»~€ëÇ8D¬²P3ÓU\Ã÷†ße–ž4U³_‘7›aÔdL8ÅÁ¶=¿ „ë¶'áŽ:É_`av™«¦Í-5ì€á1OhŸOüç®_.øú•bçøÌ¢Èñ6vÎ: ­& ÿ]ª§ó9L²¦«OÉmX˜ŒVm•”†éP¾ýbØ“)“Œ±2›ÚòmY[v›u#ÂVý!`§*èíùØÜM'â¶ìD¼=$Hf4ÈRõzj~5MÒLdØ…Ð>;˪èvžßEÕe—Å Ds±E¨‡FhlJ¡Ã=Rs”~é²Ìò: õ´XÕïÉ~`Âåio2‚7 &£ËñÅ™ñ ÿÞKLñî¨ö'i¢¹eº¡¹ˆÐŒ4¯¢EB _–ª³Ž³üÕPuæ(4>< õĈ;4—«Oð ©Çuç“›/C÷rm>„!Nä;Ü–It¿5GUBs(x9ŽÊ:«³"ïÝÞ‹KbÇ-ÑN0X(¹í´ô]hÄó'Ò5É.…—x*ê†fÉãø8oÔ|ž}MTB¡ùÅ’‘}Šü¹£zëd!°ì¤Gó—Ô¡ˆÜŽ0ÍÊO1²1Ex³ILæxk$U]Æ‹e¨Ë}Uô†£Þwx289þx¹IIæÞ +´¿EU†uÏ‹ø~‰Úså=1’$ð²‚7”1ןz_Éf¢äØ´×FÒ:¯êg\X{ÐðtWûúõ?tlé”–Å¢QŠn²ˆEŸS­\Ï»Ûÿ¿Zí*úRŸ2³Ûïä¿\ZÀê +endstream endobj 1715 0 obj <> endobj 1716 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1717 0 obj <>stream +hÞÔVénÛFþϧ0BFázwIñ“®BE%6{eÐ¥0t›¢èõ-;³$í*°¤Øp˜6´ËÙÙ9¾ùv‡ÖÚñw×ÖµæXàrlÏ‹C•h+íÛP;¾ \iBÇ?„ç2K‚kqÆ%„™ÆÑ +ã¶oA¸À 6„h¿êç—0bœŸ ‡T†ð˜¥ë*β4_Ã$o’j/ã·ð{ôdµž$³,0ÎÂsÍD‹äg¡fÒ#ÛÊôU/“ +â| ?WFøAóÇ-œ6‘¦Tš)ú€‹OqVn’š´.BÍ‘Ìu0[‡`Òò}˜íqn·y+(Ô"¢Á¤½µˆ`‘‚¥Œ;¨|¸h{=.fIý¨E懸nÀ0æê?–˘fRo’e;”F_Ï 6Ò;µi§T-ÞwJ²¹¦°I/o…$rm×ÇýNÑVU´+ËÛE?®Ç„žt&ëÎ_‘wΰhª$œÊ ¥ãöu°í>nµ™üÂ÷ Óc¶î›’‹v:ÃaŽÐ_>|uÕ—küî•jg¹LPåx_;뎅¢cáÿêéfWééê¹ d¬ñÐÖIe˜ñíwCZ(L–LEŒ³;[®TgËÁËæî +CÙ^>óö¤Ñµï#ûþ"âR]D¼OTdÝD=«²Jófé+”·ÍL'38ZÓÿàÍ=÷GÜ!ø¶Ò?%Šãª1¿Y&«4ÀYÚ¤E>£¸ìߦié‘Ñš_?‡ÅøYŒŒ“Ý6ÓDj‡²„òÿ{× \ÀŸ½‘=„Øé/Ûˆ=OZ_¨ûô(7’‚Éìûwâ›Â;à'xg£ü-”Ÿ‡CxaDùm¤yM‘ îpxðûP¾j?ªêÞŠ·s. ¹TÕrgÔC²©“–uS-20¢™…è`2Ç„á惮üu€ZË´"íW!Ê_á|Ž¡)Òƒy4¡†Î'ó€b G(® ®?¹÷fgÉ3+Í{c‡_ÐåB«ªÈžŠÑåÕ|Ú£DêŠ/¢T<›OƒžŒíý„\x*EV>•‘ÈËGû ùtˆ’=L(¦ÓûRIù°x»=Àà$Šp!ßÝLïûù͇zǺ*E§oÕ}û¨æt1;‡àô*œ„“ùì:Š(\Øáí¦Jâ'ýWŸ¢ÿ¬YÄuBZˆW… *¨Šòìæcøg™ÐæñO¡²D}ìÈ+Â÷£E¯#c±Ù—»ÚØU‰z–r<§uÐöÿ=x|V ”L躵ÇÖ2Šû”å¶úÔ4÷@ÝIs½Ewü†ýW€ÚÚ‹o +endstream endobj 1718 0 obj <> endobj 1719 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1720 0 obj <>stream +hÞÔVmo›HþίEŠ +MØ,/ãô*5 Éùä`×&­ªó} ;4K«ê~ÐýË›a!oµ\¢ètø˳³Ï<3³;k ÒÞÉDƒE)Yؼ f׃CIséÀ—öŽ5ÐÀŸKšøÒº63t° θþRâȸéà‡8àš þµô»|äC‡uápïpgF…¢u™!g‹"X.ãtý´ŠŠyFÊþoèÉžtf jL³:àI*2’Ÿ°é]⮩ÇQ0‹ +Ò|.ÿ«ä0ŽK8-"K½¶ŒÑ¸ß‚ežD%Y¹¾Ô1ŒÕb ˜n8ŽÌìrnŠ¨-ÙV;é`ºyo³EÉ2êIÌÆM®œ:Cà¤Ùm£6Rù‘šAPV ¨³å³|ÐH—«h&ÓÛ‘S…uäÆì´1*‹ÆHo®uU3,> .@ !Û´\?Â!r™˜™]…|Rì.Ó䨡,YÚ8êÕ5áT]·ì¶¦ÙF Éß 9Ž¢v™);ªÎ51ì€b1KhßOýç¦ÿ_ò›Oªa3*ÇÛÚ7»PkváëJý$0Ž¸]mÚÜŠ†›±ÄS[F…¢´ßþTtÁhÆjÅx2›³eëõÙ²°ÛÜ4"ß×Ep˜c‰“F´¶llHæm'âz݉x$ÔÊšAûäy‘å*ÂïgÑ<Åé¿{½8-+/@xM婲{{ :Ü¢Lþ[Âô݉ÿú¼Õ<’pzðJéÿkíìú™ +§¶¡­¡RUl1Ãó¯å¦¾×˜À;ìXSe},÷E¾åzG0ê{Mï黓ÇíÏù¢ÊÐïâ ÉÂË`ž_ÒÉ&¸·†‡,±ÅNej ´qZúvª„ɦhë•¢›$ÔDj½ÞEP‚ïQ!.–ÍmxEyT|ø‚;h»¤:íÖIRë©u“ÐuˆnD_ÝÜèEüê=Ì–y–Òm˜V‚kÓF¼+qqoàÅq8< =×óaa!ÿ)g…!®P¨Ci·¡âÄó£$Y…7%âÏt2ú“Çè 2Žã$y™Œãþ`ðb£«òbF¸NŸ_úÑÙä×£ágÄÔ=_û-Œò +á|‘Fww#þýG€6&y¥ +endstream endobj 1721 0 obj <> endobj 1722 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1723 0 obj <>stream +hÞÔVënÚHþÏS!E²—x2¾`ã$[‰€C³KÀg³«ÒŽ‰±‘íl­ú@}ËžšK¡-éjµ$ÒŒ¿9sÎw®¶ +aí¨7V!Ìk¦mÑ2A§±Ú¼væÕŽÎUPÁ›×T (þᢶ,¢k`é”P ¼e¢B [o†ªà}¨½“ºÎ94I :GFÜLV[D—Ò0ó—Ë( á")X6÷gL~ïý†–ôÒ’Ft•¨f¼nMAÜÎLì´×-T˜° ü$€ëLö5›P¼Bù%.© Ém€sï/W1˹”ãÕLX&zk’¦ DÓmÛb´(5J¿E(Ä!FƒhÆ“C ÐÅ!c*[È<4Zë¸(“Š}³ŒLßÏ “XÒÕ*ðùN“ +”ˆøjK‰LšR%vY e³›JH+Wª6eEÕM?è´-„,òñ¾‹[Ô•¥åIp7+àÙjUb•Ê¼²—&•1LšH åiÐ4ÓZçÁ0ÖžP½ô䨶-+-bH¶¢QµÜ6A6‰)¬×ï_þsÑÿ¯òÍ#Ïn•gŽ®s§oªP­ªðߥڎcE!–«Å‹[V±slÚœe²¢ózû[ÖtY@cl̪·,Mô–‰Ãf3‡> endobj 1725 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1726 0 obj <>stream +hÞÔVmoÚHþî_1BŠd7ñfý‚_B®R/!U+ñÝ©ªûÁC Æ ›ÜUýA÷/of׆˜‡T:ŽDòzföÙ™gf0`¬œ¿¿3`œ+Ž.÷Àö°8d±2R~ ”ó FŠaÇ?|žË,\‹3nB0S8¢0nû\pÆà/å‹zݾ&óàêüêôz™fxÌRçã,šÍ&é>¤Ë8EƒXû|Ä“,y’É, tƒN‚kEGD:g V¦GغGÃ8ƒ(™LŸqÜÂiEš"r‚g@û)š-’8§¨v 4mkuXÓfZ¾ï³=ÎmYµc2×)ýH3íŠÙ"²,áD6Ö\ù‚!Ði{%1z‘J‘~SRÓ‰ò%hºÃ\õ·Å0¢•©.ã¡\À„ž¾šj¬©aŸŠ lðP™òɦ¦–cÒ‹Å¥ÑC“k»>îïá±²¹ô Kø]s=f¨q™çÍÓâ0ìšè §>˜¦ã–°í²nÉJþÃ÷5Ýc¶êë&7ä² šÃ |ÿøÏCÿ¿àëWêå2ƒ:ÇËÞYë)4Š)üwS}—$ПŒq\]nÍÀaÌñÖæq¦éÍÛŸši¡12‘1ÞÌân¹¦¸[ªÍZˆ‚À”úà3ß‘7í¸(HöF‰¸)”ˆ—E‚ÈŒy2_æð „ê0Mîð íoBm´6óÞäQVÝ9á&±]+÷¢}¾¼¸xˆòN´Š³P µP(Á›­Íø-²Iº…êhþ¸<#{C‡Î»Ïí>œäa˜6ÎDrh_@è Aߢ5šÅò„u¢ã†iìf:šg˜ê«ä-˜À%ähž8ᦳ>šãÁ2JÇ(Œ„ѧ§¡ß_ b5hí·¯8®ÿÑ,+;ÈJù‘Ä¢ùYŠO VjÄ‹ º’ÿŠœ„¯ýøCøC ^Ò½ÿã@MǒߣS“Õxžî¡þÈùAk¯Ûùü¾{ ƒ‰âg1Ç4õ‚4ëoÇñ²'4Þ+ë™Êz¦d¿,ðU!V-2O)ÿšVTòGû4ä˜àx€Ohþ2ýº~_áKmn»”´hÞ7í@Ϫ8‚Ž]ÇÚ»÷Óü€_hE—H]3ÕÓÉÞhß^Ã]§ÜÕVsŸÅÑ·Šoå1ùpÒ²›I’\Ý V‹.Ô!1¤ U1Ü_—Ø%§ù†.I’lkàë¦x£‚8 ¼¼ª”R)ÑŒä*¬»“»¢½)3ì.„!.wp/Ý +endstream endobj 1727 0 obj <> endobj 1728 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1729 0 obj <>stream +hÞÔVën£VþÏSŒ,­I890;]i7—UVéÆÚTUˆ*‚±ƒ±x›¨Êõ-;sol7«ªªºY‰ã93ßܾ0V?] Šm‚Ã]°\Ly¬Œ”¾rx&@€?R„ÿð!\‡™8&gܦpDaÜòLð#RÍ öx;½;hœ<ÝNQz÷wQn7®™hµ{þ‘Ž® Ö–ÍóŽy©G +Ž°„»*´î”äÓ/'pv~qqµÓù}‡kwQXÄt‡ʯÊ'üX8¾ðŸ1ô^‡(ʜޥD9ÙÒ‚ÄUúm‹´T²B/D®¸Ø ´(m±Ù(+Î>ʯü_/N‰È +TâözRLÄGykV4oAÎæéÓÅó,hÇyIøŠíd±FøŠí2˜¡d:tVÔ~¬¨ý’êí<߬ò/v°âM»ürSöîÍäÜ\„Ø6[Zö¶ÒCùÇËO×WHå4½£(祴jX3Øy\.ó ÄöËN¥‰ÄÏã:RDKÔå«(9½VU©…–ë +W4Ûò•{«b@0¤$)žבÐýSzÑDó ¿~£I˜ïÁäS¢Í–\ãwÁIX†°¶®éhG¨,á5j +ˆ 0À“þ +endstream endobj 1730 0 obj <> endobj 1731 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1732 0 obj <>stream +hÞÔVmoÛ6þ®_q P@Jc–”d½´è‡ÆqÓ [$J6  +E¢­6ePršmØÚ¿Üõâ$M§À0 ,êx|îî¹ãc ˜[/OÌk+ð äøQ-­™µŸX/Þ +Ì,áÇ>D2Ï…Ð㌻,-Ž(Œû±IŽ .|H>[ìƒé[³&/&ϟñvDÄ<»šël¹,ÕŽT#õ,Ë¥ókò=FòÚH.ó< &‚1$Ö)NnVnDØúDf…Ô©~ÖNò›3ŽG8"O×x–¦×Ùrµ5yMkìÇXkÀÆ0׋ã˜qî·U. ƒ~é`®kÙ"²<³‰l \ņ¡pÓzbF]*]úã–š²ºg°Ð>[­\»‘E»€’ž±­6¶;·;'_vNnûäb쌄¸ôâ‰Îˆ¦Ðc<ŒKÄÒU»S¬óÎ0b–dÝÅ«T »fz©®„}#|¿¯„{m%ƒˆcg1ߎG.ír NÀ nÿøÏ]ÿ¿àÃ+õÎ ™ Îñ¾wÞ0…¢›Â7Õ7‹œ”s׆Û8Œ5ÞÚZjgäѼ]9®‡FY0“1ÞÌîn…®¹[ªÍ DIâ¶ú³8ho-Ð;Qüq×(ï‹,gÚN`§ö¢RóÔYðÝkXcY“ц®¦ZW:Å·W›áó€ø#˜ÙJ—謚YjϪu³;GçGÓ“É;´¿94ÝyVã¼JSµ³wÙ#%»@ËfŽZìœ2µÿ"aÂx>‹Hôfªø`—ªy›Ô.äLO²Åâ"Ë?%¿¯äG‰vÀTòJ¡¢ä—™Þ…| +4ËYyÖÕëküóÞ²è zï‚Ê–r¨ÜcÉ\dŽ.&bŠi<@зól¢‰§þ\6è_‚ öPÞYmŠ'JÞËfzÝL.L†ð’ÌT ¼†¬(´¬ëÔÞQ’@w0*\h™}ºÕš›`“j¹ª”T$š[ÔÛh&Ô¼wîÑþìãR=šèªTÛ%z^f‚]•Ùv`Há¤RJæMYaŽ4nòÍ7ø¤©3'Ð\©-‚êj½ÚäLæ—_æ<§K‚Ž[žæ™š\f=«_ïUÎ99o׫£*)éJ½ vYAc¼·œƒL7%1Ý‚÷—ë8a›‰è½;pºÜwÀ”½^4_J°ÿÓáÙ©9N*„$†ãxÚèO‡tÌ<«Q‚JHÕ˜̡™P(>æn;Ü~¢Ü "s¯ÚIê¶æuMø(Iä6šgô ¬Õ1Ñé<"}7u-¿#×ß(gÓ¸?=ÙO ™uù‡|M¨öPj·îOhØ/j·µÑp }žF’Úídá)ö>!ü‡ðœd:ø +endstream endobj 1733 0 obj <> endobj 1734 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1735 0 obj <>stream +hÞÔT[o£F~çWœµ´8a2ÌEUºN²JµM£ mBX*Œ-ÀÙ­ªýAý—=gÀvpm©RUUÌœóûwFÀºxÿ `ÑZ¾‚€‡à…>(¶ +ë]l]Ü–Àñߦ$Š3.!^Z½0îE +â \x¶í«ë˜±æó³3¸o2e¯Mº\–õnëN7Ešiç)þ#©>’dJ+˜ðg_Y.z¤8™9É|×ušëÒ:‡_'þÕŠGNF„”Yb ¸þ’.וn u[¾dÕúlæ“*Š"`^ȹ××mZa”Ø &½‘›Ee”ØŒ]«"Ó Pé…Û¾¸C&Cö³¾3Ò¶ÇõY`ÿ´ÎS:I»Óy€’þ‘];lf°P“= Ùÿ¹˜9®P¾¤‹½"ð‚íïñˆ¾šU¯É7Y?;AÈ„­—íoUÁphf$œÆ ¥lçàyÛJ¸ê+ùD9nÈ<;r%ýqŽÏ|`ûÿû¿ÿúÿu¾»ÒìTÀMŽog§v, ÿÝT¿«*øX.®‘ÛHÆ—¶Õã*âÛ‹# +uÎLƸ˜ÃnÒì–ÍîŠcÙ?‹ü~Óè€h?À÷ÈÛ.§*¹Yý¯´îÈaÅ8z^óH=Ú/«2‡ÂñíFëù»ÄܧP§K8ðûžý3î“%5«@($vúÖ€â©Ñ5ºÛ³z'5yŒSÇr¨Ð¬¬õÝfùI7”IYwP¡åw«Óɬ›uW$v±Útç0¹O›Vçð6G9ÔƬ +ã«}ó&Ij”OÎÍÿóü)ÓejòïÓN›EvÙsÚL§Èï/'+ ª`³„KòF ‘ÔNvSVúÑ:®ÆÒI?RÞÜ~¸6Êb$6º=&®Wó´ªZÌ…·êºæ”‹¸5yž¨›w{íkV¬íš aëß;×Eº©º;$o(ge=ÙNì°5ýÑС*ÛŽ&~0iê'Š±¥ü óym£¾ÒdMI{¿# ñŽ¸v‰9ä«å†öÜ·¯Ò.¥²¿pÁ%WÜ;^?1Ñ®{¼F"ªÏÎF!>?—´=bZ溯¹¶g,A±nê#"©]ËubOÉ'¶ÉÍ'´Ô\b–'É +æu3„>Hb¯É¶Ù5m›¥u±ø6Ç%Dù7HšƒÙ ØîòAwWúÓf‘·ÎA$*Ž÷à+YéªÕXåA‰¨0UÖÙä°F|oÿ`=õP +endstream endobj 1736 0 obj <> endobj 1737 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1738 0 obj <>stream +hÞÔVmOãFþž_1Eª° ^vmÇŽ¹ã¤BEÕ^OÁô>>{ÜsìhíN?¨ÿ²3kç…$ä自j@ÚͼìÌ<ûÌlŒ;'?] WÏŸ÷Áí{àpP²“v~ ;'—„iGØÀñÑ÷™cƒïpÆm'Ž§0î„1n¸p!|ì܃Kè±>œŸœw»ðI™¢Ï£«h2ÉŠ1\µTiKó.ü#9M$›9X‚ ¯áEÇÂ)N¬wvŸÎÖGe”HQ‘Àge†tÆÑ…“YÚÚ2Ã0xŠ&Ó\Vd5;=7ÀZ=Öó€ÙNÀÜ>çnSµg3ß[èf»/ôˆåh%¢±Ä*ЀJ·¿ÆjSiÓï5ÐüU5˜–Ç|ãfšD´³Z&Í2Z£0YÏhÍ~mTüÐÙÍÊEÏ´„ãÙôÅuÂwýý?áÏRe£Ifq ¿›~Ÿ C¶GVm¼²hƒá­é;át¶íù‹‹pÝE%Üi*ù D˜VŸ¹F`Ù\4Û˜ó €Åúöå?7ýÿ¾üJwçøLÐÍñÅÝ9KŠ–…ÿnª?ä9 ³1ÒÕ'r›ÉXa×VR™–C|››¶ƒB™01vfÛ[¾­{ËÃi³Dah7ó!`×tmÐÚóq ¹«IÄm=‰ø¢HЙEyåyg Þ-Øí0Ž1 Æî™ìd^IÈRU­âÉtdEjŒŠù1XåÁÈ„³3à¸ü¹j’÷VÇèpè3ïv›Háц&¶¬]šrV_f¹Ä)ä|—‰Nld¤hŠfi9•ÅýP£]1ÅGÌp3G›¹Öz¢éTeER•8F:ðáð·á)Äå,O (k óQ nŠS 1a™›¡d=SØïhºZ;"-s~»øG¸Ï¥º®Õø¨Ø‹?ÀÉ|”P—PÉêIb<§ÊpÐÅÈ…û(þª/+$Y¶ÅDPÕ(UôLáçèdÇMèYQÕøA™BRÎîQœK›m½OúJÌ‹ÞfìëÐmnùþ“ü»38´¿ÅTíXÌ&W…&߇3ðÖñÝLjq겄IT|E\.dNŒ©ŽQø„exŒÈƒâ5þlÜri[û¼«tÊ·Ëä»]]÷îþy˶ºûe¼íÚoªåcy +‰LÕ#ܾǕR¡¶‰&òÃÜZ%¼oè2Ó )´b£‘ּà +@¦_”õçLÉóû/ Ôû +zi¿bÚŽ˜oÃc0¢œ¸p•çrå8L&ú‘F•S—•Óð¿¯7÷õF0š¼hÚlOðHÑm,ï:ã §ei0׈ýÓ=‘T¸º–õ >eQÑ@ž—Yr¤áv¶ÊXy\È*ˆôÈHˆ»ZaeÊø¡(órüU{P?‘ÓÁS- šoÚA>ÑdkßLjP$M^%…YÁGùošàf +endstream endobj 1739 0 obj <> endobj 1740 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1741 0 obj <>stream +hÞÔVÍrÛ6¾ó)p$› &§X²’tW#1É¡Î"!™ j*i©oÙARvÆ‚•C'ÓÑÀâûvû'R´ó®^¯)Úi/f(!)ŠÒ1‚”ð¶Þuî]-(¢(ßz4D~°Ð4Á,D #˜„(ß{´`e ålPþÍûËŸß,Чhv5{ñ-U@SÌüf§ø~_Éz+[¡¶¼Á§üw°Ä¬¥3†&ÓxŠò¹7ÆNÑíÂÔèîT¯/…B\–è£ +òÏ^† Pˆ!dØ!+°nþæûC-´AÝä^â$†×Æx#²,ËŽRB"ûî.Ý%D‡Ñ£K–°î‚1†*ë”!¸ŒÒ!.“Þ“Þû©Ì\·(˜Ä8ñßJnv¡ßŠÒnPeÖÌ—žú=ì]RÅ} +íJè4˜P‡æÀ¨2%Q’ [Ð¥{S‹}’S_ô*uo¯‘½1HZ—bÒ†q2ä!Š†—f_ò¢YLRùÙ$$Ôn§(ˆqì#4¬—/¿úÿU>MîX‚©ÉrÇÆ*¤}þ·®¾ªk´ªvP®‰)î€B1jhZ-T0a¦Þ¾!¡(qç14fß[IØõV ÃfœCyÚñá,¶f6€Ž˜GÑi‘°Ddx$B¥b«Ö¢]ªæ0ÛuËU;Û|ñ™6‚»àå©ì§$6‘{J-k ä¿3t#K‹9H„,œ[Ñv`)Ú­vË÷b€Þ‚ŽÏ1 îðcÝ®Ž ®{z#K±]ëçèëãFfA T=Jž¡.!²¯—¼½Ÿ¸÷úGo=ÄB?Œõc iOš¨¶A°Ô•ê"> endobj 1743 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1744 0 obj <>stream +hÞÔVKs£F¾ó+:{‚liÌK *§]Yv9µë¸,v÷å0FƒL Ê€dû'å_¦{ä'{H¥Rúñõ»VÖÉù܃UmEÄîÂI JX¹õ1µNÎ<ð Í-Ï|y“˜>ÄË\Òµå" +sÃ$€4Ãë…ÞY¿Û§³3³ LO¦ïßÕr¼ ìj¥øz]È\ÈF¨œgÂù#ý-Æ’Ï‚Fó¢1¤§ÖÉN¦Oþ„°5ôµàK¡€Ë%|SNú§•0U\R"I_Khf÷|½)EMR³Ô‡ ƱqÌ’$N\74QG>‹£Žé`~xÄÇlQ²ÍÄlô¹Jt†@f8é3j]iÝ›Ô|âuÎ(b±ýe³ätòíF,Í +z'¶tØØnÅ>·B*»m…|óv½±3ò‚ȧÀ3ÄIq'¨…GÄR•á,·Y_xÂ<[´uk¯’­1¬š®‰Kuðý(î +†]$n`"ù¼$qFÚÉÈw=sƒ±ÈèÞÃ_ÿ¹èÿ¼ÿ¤Ú1ó¨rnW» ïB¯íÂ×Õe ×Å +Û5¦æv ΋*-è&ª‡gK_P FÉÇA‹õ.¦®o;5ÇP +¬¡;§Ò3©Á?­¸°¶ +endstream endobj 1745 0 obj <> endobj 1746 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1747 0 obj <>stream +hÞÔWK“Ú8¾ûWôÑN +!KÆÚS†G*[É„œä°ìÁØ‚ñŽ±)Ùäñ“ö_nK~Œ™0 >¤¶R,Ýýµô©»vÆøíʆ]i¸<êƒã»À)Hal›Ð/l°!Ü6Š|ؾG8SB„{ƒ" ¡NÀ!ŒqAmÂoÆ_æl¾€ ña:ž¾~ KiÙ>áf±“Ñ~Ÿæ;x—WBn£XX‡b&^gb„sÙÄv'ÎŒ2ª<±^1_qkê;%BB”'ðEZá?F@(†P¤<™öL1Ì¿GûC&Jå5 —ÏÅÓºdâa< ŽO©SŸ[K¡¨aΉÅR\QŒNª@ ¿ÕeÔì¤Ùý¤Væ}TV`\♟I¤V̬DR/ UÏÀÌ-21·“Œï'V?©=±F6w™záv *Ès¼ã—¸D.YÔ–äWðÙò|b›¢¡,›|EÞ$ÃKÓWBÕ50æzí=8N{Êë“ü vX#Ÿ8f0bÔ®—°\âšíóúÇÿîúû’w¯êî¸Glus´½;ÞU¡ÝTá¯Ýê›,ƒ»t‡åê©â¶l,Æ›¶ÒqUo_-Æ Ñ;ÆÆlzËcº·\6Ý +CV‡€nÝijÞ®‡óÈyD”éADÛC$ÂrÍ­\‰jGy|¥ùtó°6×f‚–¼Èï­8+×Ö­0¡®Ró)é»aªZËYz¨¦D>Ä{”á«Ÿ˜ËiG²•ø††^üåà:Ý,-£M&¦„;¦ÓÎe$«´J‹'zõáózáºÉŠø!Ú‰S™zèÕ2­²¢êé´ÊР‘ëµH³¬/sŠ\¾ª~àWI vB†®z8¡XÎgªçM‰¡´,çyÒ^›È“í1¯©¾i±?¹È+þ€ðOág1Å|•ÄŠ¯tZ„7×ÄÝŠ&OãŒøE¬á_êÿVÇCù‚øKGh³$ØЃw-ráZτ݉Æ :ÏêÉÖ! vö¶LóA +œ r®Ü{ÑC?§Ñ0±Ó|)‹C£s½£> endobj 1749 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1750 0 obj <>stream +hÞÔVÛnÛF}çW ´&ck½¼ˆ‘æ!‘/uѸ†L;fq)oC-…åÊŽôƒú—áE¶dÇÖKQÌÕìÌœ™3Ò…™uprᬶB">‚`‚ÏA «°>$ÖÁ± .$…åzÀñî(b¾‘Ï÷ ™[½0Ä>$SïíÁ¹vÜóíj¦³ù\ªœ*#t‘M…ó9ù ‘üÉc¾—¹á’Ck€ gÚœ¼ùn\OD– ™Êá“v’?­˜q4ádDš^£)Ž¾eóE)jÒ:J¬ac®!†ÀõÛ­ãù(9k"ÆÉìf+òšÙ +qÛ¬Q’xí~ˆY¶“FÔ#\HÁÃ&â^³‰xŸ$@.œÐ.ô…0ïk„7²RŸ2­¤Bñ¬Nm?uÞ>4ü‡Ä٦釲š~Íf¢µœ¡ø±eòæ‰Á8«Å…Pµ4ò­PܾfUÍ•Ê<ᳪ6:“ Šþ‚É¡(²e‰.ÖL^B9™Š²<Ñ2ß:®Ó?I‹~kÂÎD—ôkžÏ*Õe°uøçR}{ä寨oÊDÌVÝ´…ßIu·ß‹i¦¦7™T[Ó}±I^üXÙÜãûpë°M¿>rŽò´/•4õÖÚW_@’ò‹±\Éìy +Qï/zÃãûŒãîè†8…FãSŒ*Ý ¤¨44ˆ…,ÅØÀ;ào¡;£üPËù©:FA/ÞCñ^êÀ÷—í¹§p²ÀkH ÁŠj!TjËáš ŒÏû;z'u儼ù¾î‡¶¬],4N}‘ÚµÁO!½¿3®–%Êsµk€\ƒT‹¥i"'ØÝŸêÝ4U;ûÐ!4; â“@-ÌRc€Þ:ÍÑ+݃òŽµ)î<¨û¥G.L…«ÿÕ&ÓÙ'±Tð«¬M¥ïágü6Ä`©FæçZb¡°!ÖÃi!4± +ÒC—­khJ±FR©Þôqˆ·‰69^÷Ô"ù·•ÌߤΒ „>ÌL¶î£w@Ó>îCMû¢!<ŽÕóuoø‚ÍŠÀ΄Âj¾T[2kø’åÄ¥»¬ÙF=¨|ë±ÙÌ@á£f:”é9^ªe-ò1!•åœU¢Zš¿×6¼LD)°tgÔ¶ØG1ÇÒ<ô/¾›ÿ`ßå¡ +endstream endobj 1751 0 obj <> endobj 1752 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1753 0 obj <>stream +hÞÔU[oÛ6~ׯ8h_$7¦)RWxÐ¥N—µkƒFmVÄÅ H”£B¦ JJRûAû—;¤$;Þœt/Ã0ù‡<÷ï\ìÂÊš½6<'ÝbJ´Š)‰T3ßÍÄ`‰j?¶q°Û“Q¿'#šøÃŽ43ã ’î–Ø…º¿ Œ¥‡3õ=Npï ¹ý,/í§¥Ì*j.໦ͫòŠ\ÿ`N&øeý[ávþ ¿¹@~§o8»ÇÁ²—9¨¯•;Y¢ù}e!ó²@˜M@Ömo&³ÃþŸä¢¸ía!כ͓Qª4DxÛpigש‚•E‘vUû¶k/]}šSq6ƒ—¦ ®Ò +nRU¦Wú?bPÓ LNN_/& ûd>¡÷ìïvŸbÇ?-Ž_ývžËö¼UËÃd’ÕµÒþÀçZ}ü¦ô‡´êÄ£R+Uw›ÅÝFLòî¬F²AŸ_zj>î÷?¹íxŽ +endstream endobj 1754 0 obj <> endobj 1755 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1756 0 obj <>stream +hÞÔUÛnÛF}çW !ms½\R¼Øu[VZ÷æÓÓj)1¡HaIZ1Œ|Pÿ²3$u±ê´Aᢨô°Ë™3g綳LµÃï¯-˜VškƒÇ}p|lJj©vj‡¯-° L5KÇ?.–ï1[€gsÆ„s# ãN`C˜à†[„KíV?¿†!óat8Ú߇KeX>³õrªâù<+¦pQÔR¥q"»ðG<ÉîN̶Á´˜å!<×Ld¤s’v'|ân©¯d<‘ +âb¿)#ü Œ£ '#BŠ™á0þϹ¬5µ¡`¬.ºÀ„0ÇçÜé¢vóÜ•ÓÁ„óDÙ¢dÙ­³±ÎUÐf(T:þ*1fïJïþ°KÍÏqUƒaºÌÓo“˜vB¯å¤Û@Fk ê=ì—¤’YÝÊ­¡aZ¶+èö:¡"Ïñ´¿Ä-r©²ÓLš¤†·†ç3K—=eÕŸWýaXµ¶&œê „ë­ +á8«H¸ÝEò;XA`˜>sôÀÜê¶C0\æê«õë—ÿúÿ%_RílYT9¾ª½îB«ïÂ×ÕÓ<‡«lŠíêQs6c…·¶’Ê0mê·{CØ(”ÖzŒ7³¿[žhï–‹Óf=ˆÂPtó!`ÛÝ4Ú Úõp 9›IÄE;‰ø*ÈIÙ¼7\=—°÷éòö.7Ý=ä.%ˆ“Þ5áÞ†ƒÌ!FóªÊ¦Ô3 ™ÆM^·&LU«1‹‡HïµošúøÁPžƒÈ8Þ6(›:%:u“'˜AˆA@Uc å_8«)9bšO˜PzÒýý'Òå,ËQ*!ÒÉÌ4#·øË\G Å8_Dú±alf‰:Œ NN€“)´¹BG¨hjH1º"žËJ ˜Z—vüÙÖ%;¬u”¸.k­σ²ýtJ Ór!‹HGMoŒÎ/Ññµëdóø,þÒ…ÊŠ:¥øñ¹Q$Œ¯®Þ\AR6ùŠ²ÊžÒF߇ETu”‰ZɺQˆçŸw¤ŸI*óJváa9Š¾¨hK‚5™ @< ¬­JRα’°ÌêIÍÙ­Ìwϼ1 n¨ÿã©<¢V]*|SáÖ,á[jŽ¾ÈßÝ¡hFœQ„â?5üš½Ú:þbx_éÕå].ò\N㜢œÇŠ'g…„rQgeq¯¾©^¡”*rÐõÍßx·)Éʹî®õØ>ã[ý«÷œ)6ã8·p¦tƒ!¦;ÜTÝ5_^Y=zÿ±íM”×+?¶gÙ~PÿÓ»ëð4¼¹¦¨ãº©vÜÞe+ñ-ÇW<Ò‡mŸz;øÆzžÝg˜òÑ,V”D}p4xÞ³¦:Ãl mÕñÞÞ½ ñ¹¤Yý+ve{ëóæãˇ2™e^N^˜øT©9I©$ÊßÅô½¦Æ‡ñ3ÌÌ[ +endstream endobj 1757 0 obj <> endobj 1758 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1759 0 obj <>stream +hÞÔVÛnÛF}çW ôD6Òz//(úàÊ´£Ô‘‰jRT…Á’K™­H +K*vóGùËÎ’”¬¤  42ŠÂv5;;çì™ È`m\Ü,¬+ÃàRlÏAAI#5~ ‹k ÂÔ`(þáÂ<—® „rsƒbBm_@ã†2ÂãWó*¸†!ñ`t1zñfÊbf¹VQžgÅÆE-UÅÒú-|…H¢EâD0Âœ!„WÆ#jœ¸ÙqOÇnBÏe”HQ‘Àe…>¡x…êKÚ“7žb@ðåÛ¬´W'®ƒ¯uÈÐÂ…ïû@lR»}w#EsˆjntˆbiÑ¢©üF ðÐööº :&ûa«ÌmTÕ` âšËmé7k™´Èôê›…E†fçöºsRñ}çÄÛ•²¡5`Âáú‡`­ÑG“k»>ÞŸác©²=Ivq ?[®G˜)»U‡W&­I ÕiàÜq÷y°íýK¨h_ò˜h±MÀ)k·C°â˜ûõôå?wýÿ?üÔ¹.a:stŸ;q¨BÖUáóR½Ül`ž­±\]]ÜÃb¬°i+©¬ÐõöÎâ2! clÌ®·\Þô–ƒÃæ0‡Â·ãÁ'¾ÓvšÞ ·ãâ<²ŸåÍ ¢ûGŽ^#Ë1º[„—ár±2«:ªwÕÊúþ©È‡ÔÑ:iw}Šî» +~€D¦×›²TÛMT¬ÌÚqò\.oÃÞþzøÝ) ק±—EVW+“Qúuá³ åé8_\àÌpLŒm²÷ò¤wMäÃmVÈ•ùÍÐ÷èžUu©þ: øeë‹rŽJ´+%c}°ƒ¤¥‚ùô šïüf²GI‚ghºc­P¦°‡Œ¦ó€ÁÝã­LÄXY:U_Êð¿ËÕí¹D{^¾Cb“é¤+ˆùò6ÐSUæPßK(d oßbjµuÏê,Us$ –>*ÖȤ*s ±Ä¦+U¦ x++‹ê¼ØßX5ì¨lfè?ŸÎ‚yø j8žŒÃñt²8©„u¤ê™*·Wú¥éײé¼t$ôºL’Q™ç²¨QQmÓu§Ë² +~W埲€¬¨K:—ªÜÕ(AÕ﨨¦õÖ-´w"~ühÚKý¦Öµ?j6hþB°ê ²͘e,Îàeìõ¡WÅ»¼×׌i¿ù‡³T€&Þ²[™h?Œ¥þ Ãš;ȳ jM:HÝÕÇ‘’®ºÇú5χùeoæÓåLƒ®×j{þW~ªë®ÂOØ^„f>|6U€yôØêzT;Ï%êhúz6“°) Xí><§¬fE"?‹‰# 0> endobj 1761 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1762 0 obj <>stream +hÞÔ–[oëDÇßý)F~²9'Û½ø*ÄC›ºÅpš„dËP„L¼I'Z»´‡oÄ·dÖ—¤)<¡º%ÒnfÇûÛùÏÎ8 ÖÖÙõ‚Áº²!À‹´²VÖ…´Î®0+‹q øÁE!BA å ·Å]õbr‰Ê<ÖOÎer>‰`|6~÷fÚeÎn­³í¶(×–µÒ«l©ÜŸå7H-‰!`Ä |—Öw4œe3ã‘Ù»Ùz®²\iÈÊ>jWþfÅ„â#Ôž×GBEÉŸÀâØEÄs⧬úà$púñó‡ÿÜõÿ»ùá§É 3™£}îÄá²î{ÔóÍæůkh.·Ëð2VXµ•ÒîH˜ûö»ËUNšcevµò¦¶ì6‡F$%oûCLâ ­43Aï Ćä;åM'¢}㯓±8ßþ²çòvqçTuV?Twî—ÇKîÓÀèdÜÍ*º?Tðäjõˆ}f3Ó»ý¥Z¡ùαÇÓ›Ùt’L¤ýìªøCÙh´ýöÛÊ/>Þy½dbkìwÚíIÒÀ²Mm÷ 4¿kQkìÆ ͆Øã6Ø¥&Ùv€øþ¦iOT庾obDûëñþ!ÆÅ,§ç:ðr‡ö²þ´Wö°™<Åen"LÜSæ6{ÚJ*óe²H¯'†[õæä*Ù«•Òö :¹{]ìtQzŽfÞ0J©÷»Ç_‹õóä2ÿÒ ƒO?6™-ʾ€ –C¥” ™ß½*tÛ+ŒöÃVPG,ò§×ï…/Y‡V?K›¬æûÍër§•Tz{ŒÔäÁu©3ŒÈ/ö|QÔöÀ]ù%W›ô¶>JcE½á»Ëj:O¦3‰öô&ýñ\¦ÓÉ[éÚ@Ók´w§y~£Â¼#¯æÉw·ÉdüÛ¿9 íüß‘ñOÞ_ wt˜¶ +endstream endobj 1763 0 obj <> endobj 1764 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1765 0 obj <>stream +hÞÔVÛnÛF}çW ôD:Òj/ä’D‘UVÚ´ŠeÈtü!­det÷ò—™YR–â0jݸ- +àrö왳³³‡°rú?]X•ŽVòüHƒâPgéü˜8ýW$KGHàø‡…LIg\B²q8²0îÇ +’9¸ð!¹sÞ¹§£W°†ýá‹p^x"bÊÝ®Št³Éò¼Î+S,Ó¹ñÞ'¿`&Ug’L)è &tÉ©ÓCFÊ3·#·¥žšta +Hó\^ò›3ŽK8-"¤´È sÀècº¹Y›’P£ÄÑ’…w«Y IÇ10?âܯ÷mKa'±Lú_Lb± ì$ã¡T±-P 8éG»ºô%ú ®Ì8-+ðzš…îåÍ"¥‘t+³¨Ñ3vsn{Ó€Šùu’õ“‹Àë ¥%½¨&(0úaŒëÏqˆ\ŶžYÜÎ+xë…®i(Ë&ß6o’á¡Ù#át Rêpw¾¿Û WõN>ˆc¯1ß{’‹z€§™vvÏ¿þøÏ¡ÿ_ò‡W:;2A'Çwg§ºP4]øÏJ¬×0ÍVØ®!5·'°K¼´¥)¼ž¢~ûÝ“ +ƒfÁ¬b¼˜ÍÝ +¥½[ÍæÁ‡’DÖö³X×7ˆÖ!ú‘¿7".­ñÝ&Ë*­<íÞ–ðfywQè>çÅöæÃf9s;g“3t”Áå8™^ŽG.Æ¡“/n#:]àõ?FgžÇÝö—#àšêKi†?†ˆøõÃE2H./f.å½-g^ ONZÅ Z%$ã_)A¶Jä^É#Ò¿—ýsÝ䦵åÆx]µÏͨ<þ×%øøÆDC$áYŒòÅaýŸÆ‰- Rìz ßê©×£Át4hí’çÛŒ¶T‘€™›åÕÉÌÛ¤ëõvŽì8“ýa¶K;1óNô#=÷ßµzŸûmüôß0¨# í€IÿC;à€A 8ÂÐ8`ð  0´„GÚûð43ƒÂ¤ã¬¬ìMÐ]› º– Onϵ,Œ±œ3w~Ø1 óŸâî¿ÄíÚ}×Ë÷pfîÆYnfîÁ‚§XdÛuš"~‚ž{ÕJø•ŸlïÐD¦“«1ÚÇp2%ÁŸC¡’h= !d€c¬q,ÈQ¬Ÿ(ýìÎj + +ߣ$ü½»6ùªºF-g~G´û ™öß2:º¢¢\ˬ(«³tcÈ>'ôùXßwž¶/ü`®¯ëà +endstream endobj 1766 0 obj <> endobj 1767 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1768 0 obj <>stream +hÞÔVÛnÛH }×W~Ò¤ñx.ºbѯâx»uÃV¶ ê"¤±ë]ù‚‘²iöö/ËÑÅMÓ¤MŒEáËŒIŠçCrÌaaõ†S‹Âò$ø,'ð@2ÐÊš[¿ÇVxnq _¸ðÀ§R€/eâ•ÅÐ eN(!Nqøñ•õÞ>ƒKˆzÑ‹0Ö„TÚ›…NV«åz¯Ö¥Òó$UäCü'"ÉIP)¡Ë)÷\ˆ¬.z48iµñ]¹ž¨$S’uo5‰ÿ¶BÊðf2–¢²\" >%«m® +c5ˆ-× 1VºP!Ã0êŒ9uÔž ¾×ê1T8_é1[&Y²Rb6v¹ +« …€J'hÓm¨4ôÝ:5£¤(t=êÛgÛ,1;a—*«7°4kh¯ uíÆìMc¤Ó‘¨WÆ]ÒåÒæ‡l„¸pßñC|~Œ[ô¥7µ&»LKø‹øå¶j\ ÞfÝ€á©UgÂÌ9áùíA8N “u$ÿCÒ ¨c‡]Áx½uxÔ³ÚõáËO7ýuï~š³“>åæäX{vrW…¼©Âç¥ÚÏs˜,X®¾)n± ìÚBiÒ•¦Þþ%B¢Pe´bŒÙô–/ªÞòpÚìQ‹z>„4ôêN3´ö|HΗIÄD5‰XdQ&%ñìË^B¦æW8wÆz³Uº¼FñÌî,³OCà3òÛ—ªw™ggžþDhøúb÷ã³éÌ6/‹Ö<>¸e²¹š–½ONߢü‚3ÄèD§“ÇM—‡Œ¡˜™-ÇvBÝñ‰aqˆRàF€o±[0OD†ïAæɨÔ<.¸@ù7<Å-Y#›·¡òLÙÊFCaŸ\`IIʸàmMõz£ý¤½žÞYtyr­Ð@Î3;ݬñÂH?&úà`FV¨Hò|“"Ìò?µ™£QÍÈjø-j;OïÙtV”:»ÜbðoxgFPñÝTÅ:Iÿ)Ðú]§Š^VùpðÃ…ù:„ܹVºØëhæZ©ª w!ä•3äúÐ0ÄcÂ8¯Ãp«08~ê(Ð9ŠŸ?ˆû,P°'êj´\+|ì±ôÌ4Æ?==VÝí£Áh4œ¼:úä0Uy>ÔË “†òwUýף੆Ò-ˆóN}"Ua9O„±gæÚ~½Ñ®Æ¼2õ£Á {9JÖãÿÜ⤩o™l‹:.æÏÁ‰b +Ê¥[5‘ oÜ?ûQ¼ß £ü&¸4¸(>$Ìþý‘·ß½™:9O£èl|ÞÞퟫôìõ +endstream endobj 1769 0 obj <> endobj 1770 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1771 0 obj <>stream +hÞìVm›8þίñÉ´ÁñTõC.ÍÞm¯{]%ìVUsª(8iª„D@voÒý˃“n«~èIé«š`l?f<óx8,½áï3ËÆÓb–€J4HµñÞo™7<ãÀ![x\Ã?v<‰©KF™€lã1ÔB™J%dWÝz¯È“ÉD4ñpüð!\ÖO¨$Ûeo6«j çUkêE^˜àïì)Z’½%A¥„S®#Èžx!j´vŠn$«»S=5yijÈ«^ÔAöÎK)ÃG˜}ÈJŠNr…6`òO¾Ù­Mc¥&™§5z«i¤ +™¦)P•0¦z¿»Pt‹ *Ô‹,+ »E Æ1Ti pQ%‡¸„n'n÷Q™gyÓBj“«]™Û‘ ­)û¬lŸ’* qbN¨.Þ:!Ñ÷ŒGAÈ¥v"(ŠUœâó—8D]õ¶_)÷E ×AœPNŒSÙ8{ÛÊCÒ:J˜¥AxPêà “½'ÿOÓ L¨"i(jpè?¿ûæ¢?®òãÔr'cÊ-sìÀ<žBîNá—Ýêh½†éj‰Ç5¶‡;àxLÚÆÔA(íy» „DД´Û1&¦Ë­Xt¹¥±ØëP–‰¾<¤4Õ}¦ÙJëë‘z_ˆ˜è +;8Ù´yh²oà1”fq;ΫjÛ>/Šýá»Y[ω_îüDj +›øÌΣ„°“óàÑûœˆ˜¶aµÚÇLÆ(þçëY6Ê®fsbÍí›{â’2tĉ‡˜}šœfŸÔöñ^gm^·×«¼™“ñƒÖìÁçØvRëDuåƒN_Ÿ#>z=šNG/ýSé¾Ì[,¹Õœ î_òPÉ(Œ” ÏŸò³ÙɬLMÑ¢ÜZ@¨˜»õm ~RK×_ÍÒ…p–"æn};•¥ç•Ac“ªœ“nþGŠÿbû'g{s‡øUÕ¼]-ðëñ“1ŽW½_›¾Šlîl¼pŠq¬kƒ¿1m¾æúžå¿‡ÚÉ= нÜàÃÂXßñ²ww~b'¦ooÇÛõœˆ{o’ï—Ö›â¹ø2dÞôT +¿ ºFòÞØø´Ïò;S G¦ Zÿ/ýv»;jÑÝeÓx0b™åÈïa¯ø­ñŸÐÑ +endstream endobj 1772 0 obj <> endobj 1773 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1774 0 obj <>stream +hÞÔUÙNÛ@}÷W\åÉ<Ìæ±­ŠB -%"†>¹ñ$u•Ù Kÿ¨Ù;^B¤¥(UUÅñLî¹û¹3a0´vßu sK ði2P (dÚXo#k÷ƒh`1?¸°À'‚ƒ/(¡¢±EÑ ¡2õqC™„èÖº´Z‡à‘š»Íímhg ˆ°§Ã,ÓÉŽ&3 â¾v®¢cŒ$ÊHœ.#LyX.z4qúÅŽÆwáúLljΠž$ð9s¢oVH(šPcd4y¡™b hÝÅãë‘ÎV+²<b­Šx +a‘¥²¬Zqâ«Çv.áØ-Ó,Q€ØE¯Â¢C! (ƒº1n•J•¾W¶æcœÏÀqñíóë$6;nÏtRn 5khOâÙ•ÚI¥”õ¿VJ¼\)ó— ÅÍQ %Š|é‡hßÆ-úʦ%’Ìû3¸pü€0[W.ó*ÞtRCÖ +N¨áså×DHYWBEYÉ`a踑vèrÊÊ­Ž"ʨח/ÿ\õÿu¾øi¸>a†9Zs'SȪ)ü»©îFp–q\}3ÜÃaÌñÔæ:s\aæíÆá…:!EÆx2«³åóâl)¼mQñò~I¨Ê“f6¨­|¼äÃMDyqѺÈæûVÓQö‡^'ÚÎ;];ŸÅ³yÞuÞ< ¹G•é“Q7(ªÏs؃Dn/ÒŸl>Ò§(ÎÒa:éڌ}D[/‰Tiý:À`ëY×Fÿøp†c6©âx†w#ÖÒà½CÚÃWÐc=”ûAc#uN4FkM’®ýÇ )‚Pä=)Ÿâ±ÆäoRSŠh¬£óÕj×ýAy£Í])<דÂ=:f‡Æ¦˜?Ó}d»qÂM$[ÒêU~7Åü&¹¸kêC×N¦ó/#½ÕuÆñh4í£aú=ÔX×ÙR똹¥Ÿ*ë»ö%E¥+¬Ðå„=Âî—0Fèª[Ø­ZÕ[5áðL¤z&XXÑU+±.¿ßºÜØ쵧£ûá´šðã'w0ëLa£ó-7;ßKä3J×q¿ +-QÏŸZ­ƒ–ØO­ž@ø7öS€ ‘­’ +endstream endobj 1775 0 obj <> endobj 1776 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1777 0 obj <>stream +hÞÔUÛNÛ@}÷WŒòdÓx³7¯m¡>Ð(m(1ô ÊŠàŠ8È6—|Rÿ²³¾$-I ETmiw½çÌ}fÃ`jt‡ ¦¹¡¸Ôé)²Ø˜ï£sÀ€A01Š?ܘçÁÁ”PÁÌ ¨…Pé Æx LBpo\˜û½pˆÝN÷Íègóˆ0çÓ,œÍ’t +Gig“p[—Á´$*Kœ6#L9ì6jÔvÆå‰{Zw©z‡QœA˜Fð9³‚¯†O(ŠP-¤™¼d&hzáìæ:Î5«ŠWa´Š8 +¾ï‘¥²Š»LE b6—?˜,M%ˆÉX¦Ê/ä‚ÒkòbמÔÞ;Uf>…y–­ˆkžÝD¡>q³ˆ£ê‰Þ}3µˆcÖ´ãš”¯j¯vÊËfBqý!êK}åJ×Gù>QW6¯èv\À¹åz„™q­2¯íÍÓÚ­, Õeà\¹M¤l"¡¢Šä0ß·lHÓ·9eÕÑKe4û¯oúÿ*_~êÚ —0]9ÚÔN,»Õ]øg]Ý»¾†A2Åvuus[ ›1Ç¡Íã̲…î·;‹ ¼Œ#RzŒƒYÏ–ËËÙRøØ,ß¡ àÕóà_U“¦ÈV.¾GrõQ^>D´ ò¡!,e^Â[”î®:Û¡J'Gs8ÁN#.kÈy-¶C(åÔZ—ÚåEX t›#Å“ûó$ìϯÓy:2ñ¾uì´Ú Ú¨½jFÖ.ü(Ý}ßë"ëã—a°œ G¦Vw›#í)§iŒfzi42G»¿¡Ó(eœ5yÄ°i"×kœUÖX ‰õ¬mƒPŠo)Þbm¨PSr¶.%¶Û’Û=”[âÚPדpÌÖ]‚÷¡ÓzT¤—•r­]¶‹óï´KÍšdqŒ,T`Ž¯Âlgd=ôŸ¥,úÏ8†.¡c¹vë%-Ütg§¤÷NO†û÷±áafÅ ž&ó¯Ñþ*Ŭ4Vm¢‹™•ß¬õŠÊûó$-*Ÿm6T«Ð‹6J_§gÖ¬•fÊG¯\_b ÿ0¾ 0f[à +endstream endobj 1778 0 obj <> endobj 1779 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1780 0 obj <>stream +hÞÔVÛrâF}×WtéIba˜‹4’*•Cv/¦Œœ+©”"KÊH”$g³ûGû—éI\Ö®ÄIp.@1£žžÓ—ÓÝ `m ?Ÿ XW–Vð¼PƒâPfÖÊú,¶†â•%$p|ã"€) âŒKˆ·GƽHAœâ† â·Ö÷Îåx> a4½x³Ò!SN±.“ív“¯áU^gå*I3÷‡ø ´¤K’)Á„ö!¾´ˆHvR³“!aè›,Yf%$ù¾.Ýøg+b¯pºDšÒhnÐŒM¶»»¬"­qlù^„±jæk`REQÌ 9÷š¨µdîÎ1Lz'ç˜-J–2‡˜}®"“¡ðÐ »Ä ZWZ÷ý&5WIUƒ;Ð,pnwË„vÒ©³e³ ­‘“»ÌwZµ×­R™¾i•d³rỡ´¤Õ +5Š/ˆðþ ·ˆUÍÉò>­á+7™p²²jíyk Y3œpâAJtDx^ WM$@D‘;™çDÉE³õÁÕL;Ýúôå_Wýÿ‚ï‰;0AÌñŽ;µ¯BÑVáóºzqw7›5–k@Åí +,Æ +»¶ÊJw ¨Þ~q¥Ba¶dÆcì̶·izKã´Ù¢8–Í|ˆX¤›N£ jë’w˜D\šIÄ» «:©]íÜWð),³ÕÛ›l½)òøÝ.[8(·'ãéhl/ÜO5ïsMi£Û£—ãj}ùã<¾ˆoç ‡àî«N=î=jc^—8âfe±ËP\ÖïŽ]¥÷[»6¶Y]ìl”ò×Lá5vÐA:všÑ`EKÒçÏc!)³ññ'_g1Ñp2M¶-'¥y–öÁgÅ&'qµp +šX Ï×ü©„PiMæM9M˜iâx.r$‘ƒõ£qQç&ç¨_üÿD¿ø‚˜‘è@¤ÿé~Á?n¿ 0"·o+ +endstream endobj 1781 0 obj <> endobj 1782 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1783 0 obj <>stream +hÞÔV[sÚF~ׯØÑ“” õ^tNà˜Ž=!“ÑÀBè€ä‘ä¦ùCù—={˜¤6—ÖíÔtöìÙsùÎeMÑÂ:{;¢hQY!G‰‘‡ˆT +kn½I­³sŠ(JçeˆÀ^4Ž0g(â†ÒµE@ &~ÂQ:‚P¥_¬N·wŽ£ÎYçõktUº4ÆÜ)e¶^/óêçµ(çÙT¸Ó_À×–æyÓ0@i×ò@£´3U‹¥n¥úZd3Q¢,Ÿ¡÷¥›þf%˜À"II¦$—`õþÈÖ÷+QI©^j… G!Dâ D˜ñ$IöcB|·‚Bm˜ù;›–àjÀØ@•(€›~ÜàâOŒ÷FfU5r½GÎø~–IŠ9µ˜i-å;qrŽ»4Båô³búMhàz”‡L.¸aFÀŠü(óW@‚®²Ð;³‡inÜ(ÆÔFeeì¹1IS)!2 Œ…Q“ßo"!\Gò Ñ$q½ûNâ1B5 7Ä¡ƒPó>üõŸ‹þ•o–2w<ÂTfŽ4¹ã›*¤¦ +_ÖÕöj…®— (×H·K¡+hÚJ”®Çe½ýî2L1ÃÊchLÓ[S½°ÙÌ¡4ez<$8 u§I¤Ãæ‘¿D„©ADš «:«ÝÐy¨ÐÏh&æ_:Åú¾ÈE^Oø_—Än!»?¼ùôÒBÃ1°Í´åZ.6\µÜöG@B ±´„†Øù#Àn¹ÄÙèÚþÂÎã%Q\*)e'}µG½Œ£‹e‘S»Q!`O\0ûÓc5‹^6~ý4JÛéx4q$@ÕÄÝ‘zµ‹ Ø«bTÌ@J´¥¾ ø„|§æokRDOMÑ^èÉŒ=^ Ú^,Q%¸@‰Žý$3Û½^S±Z)Ä:—a[#ö]™Ù ‘‹R¦².Jû(Ĥ…ñ¨wÝd¢Q*#ÜÁÏ>ïßö€ÛÕ’ô¸4ÊØ8<Á¶7¤ô ÇžÎüJ ŽBlØKýQºšQ² šŒâÝ‚—²£ðj!ºpg4xÖ¼(H-yõ|Īºœ=ÜT‹ð+–gka?yèVòBž¸Û+ñ®\Br´?6“üe2™ö/û÷2=-å©ÄGÕ¾YÜn(àÞ¨xl}H‡ ž«‘cÚ‡ùGV‚~ìí¥ð˜ý÷Îu!Ùµ¸ÈV…¹쵨³•ôÅnÜ>­K!kaŸéç¬|5qÌ¡*àr £j–ÿ[5;ªËÆy9kÎßÛÏôý ý}þªCÆß}[éþŽìC‹`¤ŽÁÙy¾é<ÞÞT^3ÝL;îξÛ¯«g(Û¶ž2ðCëÝ©ÑwZïªý€m.}šöƒÿQÿ`:È{© +endstream endobj 1784 0 obj <> endobj 1785 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1786 0 obj <>stream +hÞÔVmoÛ6þ®_qð')¾H”„¡2Ç]ºf­Q+ë†(4‰v4È’!)kÒ´Ù£D¹NŽ‘`›ßHÞ=÷yw<™ÁÒ:ùiÎ`ÙXR€Op ‚B­¬…õcd¼aÀ ZXŒÅ7,ð‰àà J(‡heQd!Ô D)N(s!úl]ÙgÓ7à‘&'“W¯`V;, ®–u²ZååÞ–­ªIªœëègô$zOœcF˜ô :³ÆȨý¤ÝŒš»£þ¨’LÕ”|ªè/+$M¨6ÒHÞ!sôÓ»dµ.T£QÓÈòÜÏ*‰'p†!7 ÔíO-9ñå Çpî>Ðc´t°D§Ählbv +•n0fl¶b¶ïõ¡¹Hšœ±$¾}¹Î=ãv«²~¹C»tˆgØ/T§7Äû‘2Ï3!¹^# Pä»~ˆö3œ"W]õšì6máWdz•¡lŒ¿ª4Î0k]N¨ÎçÒáºÃI¨èOò°0tÆqípÌ)ë§8’H`÷þuèÿ—|³Ô¹>a:stÈØT!3Uø²[=- +ø˜/±\}]ÜÃblðÖ6ªvÆB×Ûß(TévŒ7ÓÜ-ŸwwKb·Ù4¢(â}I(û›¦'ˆ–>6$÷['¢¼ëDt8$t;3“/†bz £O£cÐc­–yUòŠ;ùÄÎß®ƒG¥Ž¨&žœO'}÷Ç<:.ç±Ý´I{Û ðè¨Ci!¢nx ™Z|žT«uUª²=OP\TójÑÆ6£½3¿\o‹~Gs˜³y[c«ÕÕZ¡¸nïc{”¦xÜQt“7€ ¿QVë{(ò¦=‹_ìíSôˆbtš—™ºC¿á³Ðcï/ ?Šõ¡šü‹BzŸÏâ`“$¤Fy“&eªŠ‚éÈMÎ߉Óѱ.)LÖûË‹‹­_”ËmþÝ5øÅñw\(Þ^Žf§“éJGºHèžì¦Âý-ú®ÎÌæéK‹ÿ7‚å?5XòEƒ5-³!^(n›Ø>ˆvQ+ÕݬØNo’ú(vU­òeÙ\ÑëØAÕ¾pö$ø¾Ûøm_àïû?Ôy²'`ì‚r€;Èlë!ŧ˜y`ÜÍàµ.¦ØΪÛ? …Ö«¤(ª“œAªƒ.vŽä®Ïý<æ w³+Š k¬HNØÕýnZ1£­v©ÐŠ•ûØj— +­„Qy­v©ÐÊ5*9¨ðOÅW±X } +endstream endobj 1787 0 obj <> endobj 1788 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1789 0 obj <>stream +hÞÔVÝŽÚV¾÷SŒ|e7øp~ìc[U/(°é6,A‹7©´D•†RA¶·Ë>RÞ23ö1 ›HI%èªFâŒçÌÌ7ÿ²€•Õ}=°*-­ äø‘šȬ¥õkbu¯H––Àñ‡‡ˆB¦$„Š3.!ÙZ­0îÇ +’9\ø²ßü9MzÉÝtæþCùLê¹Q´7sìržæû5òs»vžUOŽäõxr‡ì_Çw£QûWÈÅOÖ—PWÕæáµGvÇåðs9?ÙmžV;Œùö6«Òq]àºé€n“å\¨ã¬öEƒºß=f…€wƒ°ÏX“ý:çv‡òø¼ ‰aOû½±ýEIŽÙ}ñªL«¢‰€º„_5²ë0À¾N‡5quýr‡ƒF†Ä¦öwýLJâ$ÿÛX:—ì-yôÎïÀ¢8gWÒ§Œò¶E>¡)D xƒç!ÑŽ±> endobj 1791 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1792 0 obj <>stream +hÞÔVÛŽâF}÷W”üdgqOß|S”–a&l`„³‰´¬" âˆ1È6³ƒ”Ú¿Üjw&šH»&Q©««ËuºnÇ0ØZ7÷ ÛÚ +„4 (T¹µ±Þ&ÖÍÉÆb(~qaQH‡PPB9$E/„ÊX@²F2 Égë£s;¾ŸD0º½yóÊeÎ~[¥E¹…IÙäÕ&]çî§ä" ĉà1Â’[ËC +gÝJvy­¬Æ‰åËc ˆá"Žc 2¢Tê¨N ;Çt.ÿvŽÙRÉí!f㜫¸ÍP x(£.1ž¹Š¹¾¯S3Më\/ ¡³mrc ê¯㙓ϯƒ>³Šý1yx»\|Tó GÂþKïÛ&ÄŽ2/|Ùjï&¿o¿M‘ÒGÂâ Õž´—„"tDLø×ñ ŽAÓ#Þ#Ú7AE­ß$ÿîð+‚Þ›ù“pÅA{Õümåì— ð_ÚW§ºˆ( +endstream endobj 1793 0 obj <> endobj 1794 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1795 0 obj <>stream +hÞÔVmoÛ6þ®_qÐ'iµ¾H”„u\Ûͼ9ŽËé€:Kñ<$J 9k +ôí_¶ÛÐ °;Ì1 ãñtï¹çèX{'§sëÎÓ +RžAœiPÚÚ»ö^ÞÉkŠkOHàø‡‘¥LIHg\BqëqÌÂxœ+(VhpCñÎ{ G¯!a N/^À¬ EÆTp·nËÛÛM³†q³­ÛërU‡Wň¤,’dJA$˜Ð C/ÂŒ„³2–Ì(·I}Q—UÝBÙT𦠋߼œq|…ÓK)Mä1`ôXÞÞßÔE +OK–j¬V³D“*Ïs`qÆylë6T˜MdƒÉø“M$‹”ÙD2öT冠p3Îv¼Dî$îô‰efRv[#ÍÒ`q_•dÉ`[WÖ€ =ó  Y¸°3Ô®~uAÒ>¹HÂH(-i¡”u +t¥qšãû341W{gwª‡Õ.Ã4c"¨]ÊÎáÝ5 ›fZ© Rêtׇ8ÞU•­äyF‹ƒ<’\X3P3ìžÏüç¡ÿßäû%õN¥LPçø®wj¯BáTxÜ£öonàb³F¹¦$îP ;Ú®nÃH‘Þ~¥Bg]1sbL7[©4³¥ñ²ÙßCE!íõ³\ÛI#£uŠ÷Qütqi."¾+rðÃhêà§_æE¿XÌ—A·-·Ý2üöIä ×Ä…Ó.†?tðTõõ»Ù¦éãEÕ4åºïªúføç?‡#áïrß<ÉEý3À Ý›æ´ÜÖý¶.—êv$”³ò‘@e» 4áHýÇ‚šoªz—öP"! nð°5HvIâÆA‘>—‚<ºøN ‡.åoä`°$õèëè÷Ð_EÜ*â€RG Œ§¯ó—èçßû˜ÿƒ]›…+m<- +Ú›O§ý‰o½³I0ââ#0÷¨3Ü'Š“Hnj°ÓJ¹é«½*>TE“ò}\ù$r‡#ðÿx€4E‹9CÿKa9´»²€ó1‹èÐbp~9ºø2‰Ry݆M;N©)9‰O8›šÈà´ÞŽï†vÝTN§Cÿ€ý¹m#œE"OÏm;Ð=;CM€éb2qeR"á\_êŽãݽÀxt”Qÿ-e¾¢³ÚÕ•íˆ?F÷磉sIÒzÞhb™psnŸ”¶Éü¸‚ŠdÒ³‡0GHþ%þÏõ§qº]( +endstream endobj 1796 0 obj <> endobj 1797 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1798 0 obj <>stream +hÞìVmoÛ6þ®_qð'±h¾H”„a[Ù¼9‰`+逹(KvU8v@)mý“ö/w”¨8Ml-\jàéx|ò¹ãYÖÎð—9‡uí( !‹ÀHºtVÎYæ Ï9pÈVÀð‹B*„’Q& »u¢PæDz%Œû}pþtÇÉ94‚Ñpôò%¤šðˆJw·Öùímµ]ÃdÛ”z•/Kò:û ™dÇ$¨”àqÊUÙØñÑð,[KD»…ž•yQjÈ·¼Ò${çÄ”áf™HÑFVÈÉÇüönSÖ&*ÉœÀñ¬Š +¨qõ#ÆüîÔJÐPõó(þ'ó¨–K¶“¨ÆƒVq«P 8éG½0žÝŠÝ~ÐI3Í눧hè^ß¹±„Û”Eg@eÆØݸ6ìÂéå[$º‘ñ€x\*a¤ìœ8ÇC?Œq}Š&bé]7SÜ/¸!aD¹[ZÈÚòí¶– ³Öæ„™<¡Â>¾ßŸ„Éî$câEÔwcO0Þ™E• Ðÿ}øî¡ÿ_ð‡G“;Rn2ÇúÜɇ*ä¶ +¿íVO7˜Uk,×Ð7áXŒ5ÞÚºÔÄ“¦ÞÞ!ÑY´Ý1ÞL{·BÑÞ-…Ýæ¡e™èúCLcÕÝ4c`´ +±!ù‡NÄDÛ‰XȺÉ¢Üû~†¢\}H«í4ß—zá.Ð/'ÀÚŸÇ»‘3tŸ@,ÈO‡{0e¤4ˆ£_“†üþfžf×ó…k(îë><{ñïM•#ëû*G?·Ä"x²î«Ñúf‡;BŠ±“Ëtv•&³l’ÌÿóéùæM®#/¾*)÷®ÔMUâiÅÑÒ¦wtßžc°,7S.ƒôŒ§ºçÆ·ê–ÅÔc³G–âî¬j Ë‘8ð{cÏnàž=IŠ~ÿ˸ðÿo[(´ +endstream endobj 1799 0 obj <> endobj 1800 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1801 0 obj <>stream +hÞÔVKsÛ6¾óWìèD6„’ÓéÁ••Tmìh,Ø>T‡„iv(RÂIü“ú/»àÃnÒÚåNG¬‹ïÃ>A…·x»cP´žÑÂX‚ `´wç}¯¼Å ÔÇ8PüáÂ∑ „rP" +¡a"@e(P‚úèý쟯ßÀ’Ä°Z¬^½‚­ XL„ß&=ʺ€Mmµ¹K3ü¢~D&Ñ3q"Ìar êÜ›#¢ãÉ:‰Ç»ƒ¾Òi® ¤u·&P¿y ¡x„ºCÎ’w–%rÀúSz8VºuVkåIN"‰ÞJ²”@¸H’HSö~w¡è61„‡Ÿmb°œè61O¡Jº%€›a<Æe>Üd¸ý²Ì»´µÌ%‰üëcž:‰ûVç½¥[¿ÈÒÌ.#“ÝF¼_)[s&$w„蕸°(Œ<¿E±LÓïä™…› Š óõÙ|M=aÒº”P—Îe4æ! GO¨è=ùX’ó˜„~2ç”õâI¤0®ùÏMÿ¿àO]îDD˜Ës'žª UxÚ«žU\•–käŠ;`XŒ-6m«M0®Þ>\ R礻16æÐ[ïzKâ°yšCJñ~<$$‘}§9­e„ó(|D”wƒˆŽN¶6µôZør}÷q[Ö[Óµ±¨Þû³LWŸ½†Ù‡<ŸíƒoŸkI¥ ŸCYý°^¡ùO¿îÔ™ºÞí}ûÐŽæꛯráˆûœ+?nŠº1Zis@JþÅùDz®óÑ)T[êvïÿ3dtWÊ8ý],`‡öÛõjsöîr­v_Ê—7ÙÙÔØÝQgeŠêêR[¼I4‰“=ªƒÜû¨ŸÕÚ²ÙÄÈîpS×:³eS•Á\e þæü%úŒüÅÅ‹3†'e¼Eu™Û{$»pùãô” ._br†µÊ¦…Þû‚ð‰Ñ]oÓ ?Ãþ£×ø˜£WÎè ›“¡73µ¹Ø\¾ºyß»ÙWeVÈá +kb‚kT·îþÛ÷·ë«Ù *Jã{‰ãML|k0¿ÏÏ£뽦¶GíºÍ¤“pýå¡+ëIØ$àø¥_ è¨vnÒO•® {ï88a‘ øñ‡R“B_ +endstream endobj 1802 0 obj <> endobj 1803 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1804 0 obj <>stream +hÞÔVÛnÛF}çW ôD*Ñz/¼¢èƒ+3©[Ç6,ʘAA+‰E +KªIóGùËÎ’”RÅVê–‹B;š9{ÎÌììJ æÆÑÛ ƒym¸<êƒí» ((iÌŒŸ"ãè ÑÌ`(~pa¾GOPB9DKƒ" ¡v JѠ̆èƒqož„oÀ!>ŒÆ¯^Á¥²˜O„YÍU²\æåNËFªY’Jë}ô *‰N‰!`ÄsˆNŒ2j´µ¸¯¹[ê+™dRARfp£¬èw# ·P½I#y‹ÌQÂÉrUÈZ£ÂÈpìku‰ãá" ¶O©ÝUírâ¹›8¶ƒp{'ŽÝÒÍm»±íUÐv( Úþ¦1£>•>}§kÍYR7`\â™ÓU–h‹›Ì:r½fiÇìaïzJ=ˆw+eŽ5bÂåú‹ÓF—g{î¿D¹TÕE²uÚÀµåù„™²§¬{½ªìÅðÔÚ3¡ú8w½ÍAØö¦*ºJ> käÛ Fœ²ÎtÀr‰klÖ§/ÿ9ôÿK¾ýªÏNx„é“£›³Û)dý6Õ㢀«|Žãêéá¶c·¶–Ê =oX\ Sf¤Íof·<ÞÞ-_›íCE¼{¸ÝMÓ¢]$ûËKDyûÑM‘ãŸÃ±åš¿þ6‰Ž£é$6ë&iÖulýðeÈêê>i¸Ž"|]ÃÉÙ‡ÉJ¦yRœË&Dw™]”íØÜì†OQéQûÉcýƒëÉdðÌÄzsU–2mòªŒÍA*‹‚ ^ÃýoÏOÐb/ Èwé (Š¯Ñ>hSt×¥&ããóç’Kt'ÍbÒ$ +'qpu1“‰œ%J…"ïØnò¬YÄ&w躴HVú N/nN¯Âï+"­*…¨[Ԉʹ*ñÿ@ºHÔp[ËEQ¥¸5ÿ$«t(¶†#Ý=ÑuR¬å×dèoù’u‘¡ØSÞ=}\u£²õ +;æ ödÿŽí¶ÙuàóéÙÙãšl—‹k2 <.¼ ~SwËÑ/ö%z{ÏwÁö7³àÿ" þ çAÿ8×U^67¹¾,J†»ŸñºUºí–;½ègNµº‡¹Ka™}çOéLI©§ØÜNu›;Ç“€wâ?¿ƒÃQ– +endstream endobj 1805 0 obj <> endobj 1806 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1807 0 obj <>stream +hÞÔVÛnÛ0 }÷Wy²³F¥.‘m {ØÚ쾡hÜ®ESF¬$rƒíìòIûËQ²Ó-Ý2´Å² ü Š:"E’ ‡±·ÿ¬Ïa\zZBˆ¨HƒD(Œ7òž$ÞþS’‘Ç }´ð(dR@(‘¡€dæ!Ya¨b Éä +’Þ…Ø{ +]ÁÁþÁƒpTÉVà +Nƒ0bÜ7ɲñ·˜7Έ4G Z„Ðᚥ֑ ¬#ù<ŽƒNÄ”wòZìB ™öÖëí—¿ý_o-w2dÜ2‡kîäuò¦ +wûÔÇÓ)çc*×ÐwÀ©KjÚÒAGÚzûIJ“1÷bj̦·BázKÓ°¹žCI"êñ³X×fBëæ‘ú6ˆP¸A„ë G…1öô 'iÑÃÅ¢8»à—ƒàá·:©Ú~ãü»IûÀÓtº2xiOnçwÄ‹»áo Ë*­¹*ádfô±¿4Ã<¾5UŸÔ“ÜL³~•ÕÀoÍ>_ÍMÕt°aãàyï€t¯®úÉãä¤?ð­ÑUywO¯ÓϦ OoDëÆåßæâ]žU“ã®ô'éÒP ýäøÅQïÞÙ²|êŒÊ‡|•U‘­–d•+ŽHúÖÏáç7àR ¥H­mæù¦y‹_šß„·[wÏÏÑ"ŸS5‰=gôlôN:ß!§yêJê*99~{¿ºÚ69ðvsàüGàzÛ·äUhéxÂûÀÿ4üj‡mM>ÓŠüpÜ.(ê·Aü·I +±õã ßB}û ¼7ÏþÎ&ìÆïÿ>uô×á«@T +endstream endobj 1808 0 obj <> endobj 1809 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1810 0 obj <>stream +hÞÔVÛNÛ@}÷WŒòd§dÙ›×^U} !´´@Qbn"Yñ&¸ +Nd;¥ý¤þegm'ˆ¶T)Zä‡ÏŸÙ=3; ƒ‰³ùnÀ`R8J@@C¡A!7ÎØy9›; Dc‡q øà€ „rˆ®Š,„J- ¡A™„èÆ9w·{;à“º›ÝW¯à0÷XH„;›äñõušM`7+M>ŽGÆ»ˆ>`&QgâDè0”ѶÓAF›gTY<´ÜußĉÉ!Î8ɽ賣 ÅO¨ýÈ"y…L1ô¾Æ×ó©),ª9¾ÔxVE|„ ­5R*ëS+NµŒ£„Ë;qTËŠ%ª ª±ÒJW +iÀ  —Âtš­4Û÷kiö⢯£HàÍ“ØZÜ-MRÚU»™G|·í7 |tÕ€x½Ræ{&·/BÔN…®@¿?D¹òYI£Ž½ $Ì5 eÑä›eM2¬ZUjëÀ¹ +–…ry*ê“|¦µ× ‰tu‡SV›>xŠ(`¹®¿üsèË%_½ÚÚ‰€0[9º¬Xu!kºði·º5B?`»¶¹=†ÍXà­-Lîu„í·/è4 ©vŒ7³¹[¯î–Âi³DQÄëù ‰VõM³¢U€IÞN"Ê«ID—‡ì¾ïu=å~¼D[ÑÑ`èe\.Š¡÷ú¶É}ª¬Nn£_ð3¾ÌÍ(§¦ û*5Ód/þfò¡ÛÚç­%KÔ^'WƒZ#ÅIš”WCWÓ%çÆ jˆÏè*ÎÛCo4›å§çôb-àÙºÀÓs¶.ã/@ëF ÝÊP”y²˜£¦L2JÑßú=üì'¸\JôÓÖ}ôì.½ÐüôwáíÖß—îp–fåÐåééú+ëì©zå8«f¼ŒŽú­ÿ¤aî)o{ͺr%ª:ч€=wØåC³ÉÏ%¥-K°VÚ/Aü^– ÝG&?Dw\â_Ç UD½Ýƒ^ÿ±G}ÝEÙQhœxO@ž%Ÿ2ƒöÕyÄžÄ_ö ¤"‹ +endstream endobj 1811 0 obj <> endobj 1812 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1813 0 obj <>stream +hÞÔUÛNÛ@}÷WŒòd^öb¯mU} I ´@#bn"¨²ìÍ¥JœÈvJù¤þegm'¤hŠˆP•‡]ïž9³s;a00vº ¹!xÔÇ— (dÊèBcwŸƒ°o0¸0ß#‚ƒ'(¡‰A‘…P'Ƹ¡ÌðÖ¸6[í}p‰ÍÝæö6t2‹ùD˜ÓAM&£t‡i¡²~+ë&ü„žDå‰!Àf„I–a#£ö—;îkî’úTE‰Ê J¸È¬ð›Š&Ti$/‘#ôíÑd6V¹FµCCrâIŒVWá" ŽO©SÅ]¦¢¼Älîüv‰ÉÒQ^b2–© +Ê€—Ž¿È‹]¿¤~½[eæ(Ê °lI<ól–DzÇÍB%ÕFz ÌÔ"®YÃŽkPk¯VÊ\ËfBrý!Duèá‘çxÚwp‹\Ù´ºIæqç–çfªš2¯ýMÓÚ­, Õeà\z‹:8Î"*ªH~ Ëö‰c6§¬Úº`I"M€ÅºþòæÐÿ—|ù©k'<Âtåè¢vbÙ…¬îÂÍ>uo<†ÓÑÛÕÓÍm1lƇ6W™e Ýoß-.ðP%¤|1f=[/gK¢Ø,u( y% d5izƒhé¡9÷BDy)Dtd?SÊ’fñ0ʶzV—6Ç]­‰Óó¹ŠÃü"/'ý°ÏU0ž™¯Áü× w¦£Û]씼—¸è¡CxQÊŸ’º®ìÐu…Œ­Ëø¦Òø@SNڔ㠋 ÷6,&½ÖËõ䉉·wu4ðïü—¬Þˆ +endstream endobj 1814 0 obj <> endobj 1815 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1816 0 obj <>stream +hÞÜUÛNÛ@}÷WŒòdC½ìÅ^Ûªú!PÊ-JLTYñæR%Nd;¥ý¤þeg} MŠJ„ˆ*ª<ìxöì™Ý3—0{Ç]ÃÌ<êƒãKRe ŒƒÐØ;bÀ ŒÅ.Ì÷ˆàà J(‡pjPd!Ô „}4(s |0îÌÃָćæ^swÚ©Å|"ÌÙ0¦Óq2„“$Wé ê+ë>ü„‘D‰!Àf„IÂCÃFF§_XÜ×ÜuGE±J!Jb¸N­ð«ŠG¨>¤‘¼@Ž1´¾GÓùDeÕ + × ð­’¸Aq|JòÕ’OÖû(áÎÊ>ª¥ÅÅ&ª±Ô*( +7¿Æ®®R]ß-¥9‹²,[ϼšÇ‘¶¸™«¸4`¬×ÀL,âšì¼¥ýQâåJ™kÙLH®?„(>º<Ç ð|MäJgåN¼èçðÙò|ÂLUQfU¼YRì9¡:œK¯N„ãÔ/¡¢|ÉO`A`Ù>qÌÀ攕¦ –$Ò¨×Í—}»äËO;á¦3Gë܉e²ª +·{ÕýÉ:ã!–«§‹ÛbXŒvm¦R˺޾Y\ SŤ¸1vfÕ[/zKâ´Y¢0äå|H ËNÓ¢¥‡ÉyœD”“ˆÖìÏf©%ÍÛ;z ËÓx1ï™ &\Ú@ÏzÿXì.•Z¯ßŽÝܱ•cÞÌE£>î¬FY…ï¬ã²<Ê·È«ÁCw®úãhr¡ò6º£|Ôž“¼gòwå .èGëv¨ù±ÕÄÓ/Ýp?¼êöLͼÈÖPƒT)ýHüõGQºÓ³ +VÔb#àí¦@-Ó†ŒŸ•¤›G)JÒ¸h]7^¤Â³΢*Åç|K®Çq>¬zôEüËb\­aÛqñ¾¸ñt)þ½àשßt?®•Ä=ó•©[èNâËD¡ýêä=S«ß<»lžn©&ë¶ê\^…­Ã·ÞY”nI¥Q4Wø€‰ÎÉÅñ=ôÿÌâm ücÿ%Àý´• +endstream endobj 1817 0 obj <> endobj 1818 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1819 0 obj <>stream +hÞÔUÛnÚ@}÷WŒx²“z³{m«êC +¤MKÎ…¨²ðr©À Û4í'õ/;kÒÐV ¨¨E<ìxöì™Ý3ŒŒ“w]£Ì<êƒãKRe ·¡qrÆ€A84Š?\˜ïÁÁ”PáÌ ÈB¨hPæ@øhÜ›æ¸Ä‡úIýøÚ©Å|"Ìù(f³I2‚ó$Wé0(ë!ü€‘D‰!Àf„I†a#£Ž3(,îk£¢X¥%1ܦVøÙÅ#TÒH^ 'š_£Ùbª2j††äÄ“øZI\ „‹ €8>¥NùîBŠbÕ Üy¶‰bi€(6QŒµTA!P¸éø+]ìê&ÕíÝR™V”å`Ù’xæõ"Ž´ÅÍ\Å¥½fb׬`(Œ+/WÊ\ËfBrý!Dé Ðå9^€çÛh"W:/wâå ‡Ëó 3UE™UñæI “V¤„ê4p.½Ugõ*Ê—|`4Ÿ8f`sÊJÓKi¬ÖÝ—=\òõ§ÎðÓ™£«Ü‰u²ª +÷{ÕÓé:“–«§‹ÛbXŒ6m¦R˺޾X\ SŤ¸16fÕ[/zKâ°YÏ¡0äåxH ËNÓ¢¥‡óÈyD”ƒˆ®9˜ÏSKšw÷ìÞ@–§ñrÑ7k†pÑ_ë[¯ŸªÝ¥R öÓ¹Þƹ£õð¨Àey”#n™!*VÃÇîB &ÑôRåmtGù¸=Ÿ$yßä¯ +Ê;\ÐVoƒ¨þ¾YÇŸºáixÝ훚y™m †©Rˆêão0ŽÒ£¾U°ÞÓ‡€½]Z¯n•¤›G)JR»lÞÖ^¤ÂÖ­è›J1ÂßS€ÛIœ1«}ÿº*é³ê²ï‹¿÷6ÀL¸´¦òê-¿IþÕùÖpÍ$î›™º‰î$¾JÚ/$?ìþ웺Bnêõ=uͪñ;W×a³qè½OéžTG …htêgç­VíP' þ¥ÿ`Ƴí +endstream endobj 1820 0 obj <> endobj 1821 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1822 0 obj <>stream +hÞÔV]s“@}çWÜá jÙî,0ŽÚR­Úši¨µÓt„M‚ÓÌBjýIþKï©Zu;ŽÃÃ^îž=‡ûµ ƒ‰µó|È`R[R@H#ð# ‚‚VÖØz–Z;û ¤c‹q øࢡ „rHgEBýX@š£A™é'ëÜÙKö! ìîì>zí²ˆg>ÑÙlVV8¨¥ÇY®Ü‹ô%*‰N‰!Àc„ÉÒ=ËCF£“· wK}¬²BiȪNµ›~´bBñ5‡ ’·È5 ¹Îf‹KUT’Zc¬’qñ#Jý.jÉI(Wû˜Âýö1[&Y¢ÝÄlÜä*n3núÑ*1^ÿ)ýç]j^gu®'Ièœ,ŠÌXÜiTÑPš5v*—N;ìA:Ÿö Þ­”®Ç„äæEø½]¡Æx~€&réy·S,óÞºaD˜£zʺכW½V­­ 5uà\†«Bøþ**ºH¾‹c׋ˆïħ¬3p%‘Àj]ùçÐÿ—üæÕÔN„„™ÊÑUíÄM²¾ 7û©O//Ḝ`»†¦¹]†ÍXãÔÖJ»ž0ývårNUö‹q2ûÙ +y;[o››‹(Myw?Ä$–ݤÑ2Ä ÉÿvQÞÞDtd>ŸkW:gçìž@Ýèb¹9ö–=rkó€J“)s n²,k„jüi¸Py™]©f€î¬™æeÕŒ¾Ýr¿Ãýh­Ó­–h÷E²‹;¯ÞÓ§éÉpäæe} 5ÖJ!j„O>ÍôÖÈmYÏéÅZÀ³uï0k2þ¼3%Ã&Ó˜û(9µï•…;^gŸ•F…C¾!Ó²h¦XÕn†8Í +¦Çƒä~Aô½lšãû^öüùpãWà³[`&j›ªÿ†úÇ1ñqôÛ¿†ÿ~ªÖMËÃÓrIUŒœ¦NÐ]o*…ö=ÉÿïK`䘩ØCO¦9<¯*•7å¼ÂîÙÛ€BFnè†å +]^)Íìmôƒ]VAòÃr¶ÈPL„æe±Ù}t—ת0 +>·~Žßœ¤ÉÞ¶þø*ÀŒ5 + +endstream endobj 1823 0 obj <> endobj 1824 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1825 0 obj <>stream +hÞÔU]oÓJ}÷¯åÉ.x»_^ÛB<@Hï-5.mU#äko>®;²ZøGüKfm§@B¤P¨ÊÃŽçœ9³;³³a0±ÿ1˜T–àÓd @P(µ5¶žGÖáÑØb(þpaO_PB9D ‹¢ +¡2¥hP&!º±®íƒ#ðHýÃþ£G0,a“2Y,fùŽóZ—ã$Õλè%fm&N„—¦<ˆ^X.*š›Ïál6Áëê›Ëí0¼Œm¥KÇæ¾}p¸@§ÎH³cÌn¶|ÞÌ–ÂÇæîŠ"Þ>! U;iÆ@¶òñ=’_"Ê›‡ˆ®YÕIí({UÁSÈôøf´Ôé,™¿ÑõÝI==I>ê2¶{¯y/vž|½ùU¦xF£ÿï äWïGѳè|ÛFtU­éÑÁ~™.fY=mNéFäoÒM“¥Æ“Ÿœ\Ÿ N¿ß»W²´(Jd]^Ów˜®ªËlµDiWz¨‡ÀÈWd&<ÚCÿ.iö[bÓ=ô÷~L¿Ú ô~¶<Ãb–×XþÇä%.èGëêaº1ȳØþÍÒtçÙi®Ñ¾§ø¸ÔÚôé4)b§©¶n/âÕ¾DÓÞ=÷$^î'÷Í Bñé†xwUcÛ\»·£{°àÝ•™ÍáéÅàì~#y;„§È‚ØΊÕs^$óy‘"ö ]Œ×Xì¨ð¿~;¼¦H23È ÛPÞ aë ±µ Â(ÞAr;j„Q¢ƒ¼í¨]FÉRÛQ» Œò:ÈߎڂðÏí‹´qê +endstream endobj 1826 0 obj <> endobj 1827 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1828 0 obj <>stream +hÞÔVÛNÛ@}÷WŒòä¼Ù‹½¶Uõ‚é¦Ä©MUYö&¤JœÈ6>©ÙY_méJ¨ªXÚñìì9³ss8L­þ“‡ii) > À H…¶&Ö^lõ8pˆ'Àð‡ |*ø’Q& ^X Q(sC qŠã.ÄçÖ{{?:0趷aXPi/§E²XÌò)<Ë+]L’T“ñsd’ “ R‚Ã)WÄû–ƒˆ†'­%ìúH'™. É38)HüÉ +)Ã#Ì2–¢¶œ!DÉb5×¥±ŠbËsC¼«¢ž*d†@Ý€1·¹µÔWÝ>†ƒ +÷›}Œ– –¬71ëX…u„BÀM7èã´®´î{Mh^&eÄQÔ·WYb$aW:k˜™5´sB=»5{Õéik$š•q8\*a^¤Û(qû®âù!ŠˆU,›ì,­à-ñÊmÝB–-ß2oÉ0kuN˜ÉƒÊïáºÝM˜lnòx' ®:‚ñFô€(ªl€nýó埛þ¿àëW“;éSn2ǺÜÉuò¶ +7ëêî|G³)–«oŠ›p,Æ»¶Ôq¤©·ÏDHTêŒÖcg¶½å‹º·N›õ ŠcÑ̇†ªé4# µòq ¹W“ˆ‰z±î’e•TDÙg%<†LOÎG+Î’ù¡®†¨^Î/§Ë|l÷ºJæ¼·îÞÀ¾îÀåpL]u‚Ç” ¦Á<hôâã(ÞGcÛœ•y¼u'fus õ·„G¨ÖiuÕê9ÃU0¶YJ”¼~6G¡:Ï^çå±}'ðI¡5Zái;=MŠ­1¹þÖä‡t}ïb”g—&*UyïLgᬵï÷Á@Eñè—¡©’¢:¬ù8êŽĻn/×ï nÜä`™çX.3Ó¦+ÞÉ`—™:í½1źi&ù`LÞ&˜¢¶ìQ}ëÊÇá&)ÃaÛ·Ÿæ[\Ï÷ýŒÄ‚”êy=ŸzýzL™V#„m(%†M<(›Ü[TVƒd5Æ¿ʾ§ÙŠ¨'¿âUƒz;Lü¢`±;ÿ +endstream endobj 1829 0 obj <> endobj 1830 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1831 0 obj <>stream +hÞÔVÝr›F¾ç)Îè +k½?°Àtz¡ÈrêVQ4r)ƒV2 uAuœ7Ê[æ, »uÚIœ¡ÓéÈò.ç¾ó»Ÿ–ÁÖ:}µd°­,)À§¸AA+kc½Œ¬Ós ¢Å8PüàŸ¾ „rˆvEBÝP@”â†2¢;ëûlz `r:yñÚav¹ÕÉn—[¸(j¥7Iªœ_£Ñ“h=q"ŒaÒƒèÌ!¢ñ“6;ìúR%k¥!)Öð³v¢ß¬P|…š—Œ%o,3ôÓ÷ÉnŸ«ÊXM#KrâKÌVOá" C n@©ÛæÝ”¢Qb5wÿ¢ÄbÑ(±¥ +›…€J78ÖeÔEÒEﵕ™%U ÎHß^í׉Ùq»Vëv™YC»pˆgwf¯;#ÞvF¼])󜒛á¶B"ßõC|[ÄÒe«YÒ®? ÌVdÕù+‹Î6­i 5mà\úÇ>¸î1*ÚL> Cg×Gœ²vë#‰´Žë×/ÿ¹éÿüáÑôNø„™ÎÑcïÄòn +ÿÝPÇy—ÙÇÕ7Ãí0Æ +m¥´3fÞþp¸@¡Z“&b<˜ÝÙòys¶$’ÍEoé!$¡lOšÙ µô‘ÜG"¢¼!"zL²ª“Ú‘ö¡‚ïa­6wsU_í³"¶ †òÁ ÌW³Ù ÐÇ?Ã`1O¦g¨öÜøE©ˆï†G¥©®q2ùa:AýO7Ëh­–±m¼ª£y4ü§P¦ÅúM¡æ +Åul?±ÿ*!Å*uAü )‹B¥u†âÒ”3Uyîb½‹±À…¢ÝRû9)=Ïo¼1Ú¿·ë:ÉßŶhaûÁ|£³mV$¹´ê}­“›TgÕþ~З‹eyЩBt”¯–ÓËÞ€W•A]^¼Bù|<ë ÷\«ßªHQ|ÛŒÒ^€ñf±Ðå^éú¾-v’×8#Âï}Yk¼¾4PŒ>ÐAŽ¿èód§Ì@®Šw(/Ê»¢Ÿ2áE'ïÒiË4ÈU±­oÑ£„±¾z±Hj¼,áÙ2¬ør<Ï ÿõ…n8+×¢/š“;cøßõZ†5ìŠOåç× ñrÑ01ãF6ï-’Ï(¾sÙ‘>Ó²Ôhø±–ÞìÒÛD‡±³KP‘çeŠ ÙUnÐÀ¨bgèý‰Wžr‡øöÛ»T: «$?¨§`(oð>k5CïË…ÄIÜÝßàï‹ii_ÝyÊófHcCñÏs÷‰O z©4« +endstream endobj 1832 0 obj <> endobj 1833 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1834 0 obj <>stream +hÞÔUÛnÚ@}÷WŒx²Ó°Ù›×¶ª>¤àôFÒ )-Qeá…P;²MÛ|Rÿ²³¶!JÒ4¢ª*$f˜={溃¹uðjÀ`^XJ€G}¾A!×ÖÌzYG D3‹q øAÁ|ž „rˆ.-Š,„Ê@@4E…2 Ñ7ë“Ý À%>t:ÏžÁiî0Ÿ;›çñåå"Û´Ôù,žjça¶n(‹Æ_–6ΰkUO¨éçÊ[7BÊu&TÔ™üNÛ'ÒÚœ²ZuÁQDÙkùxñÏ¡ÿ/ùæ§éð3£ëމͲf +ÿn¨‡Ë%ôsWÏ ·Ãp |µ…ζ0óöÕá:!UÄø2›·åñêm)Ü6›EE¼Þ TýÒŒ‚håáB’7›ˆòjÑu’E—Ž²W¼€DϾ貓¥©ž– 4géÄn½µö¡õ¿èÄy~3ü.U¦~†¦ó:ì þÝçAt Ûð®Š5<ÚÛæì$KQ‹Wh^–ýÕR£Ãþ°²Ö»Oö0,*Îp€ö0Úíàb¡—IªÑ\"ÿh0økÔÝîΨOãòbPÆyCÝ?ŒÂݲ÷âkxŽìÇÜŒÌ>œ {=¼ ;Ìàz‰fì+RèÓ,3øð‰ž#qQæÉê +ãeW7Ú[÷ÃÇwàB2)ÑN·àGñr¥ë;¦÷GÀnQŠÒÚ·p½÷ cö°cþ(ªñ÷¹¤¿Í™ßëzK3O³EZ£Ø¯h>ÔbŒÂ¬ ,¯HŸÔèY®Í0Nð3½ˆó½‰S9À¦< +8þ¸%‰Ñ"žØftÒ„Þ2ÞÚå`bÍ úcAŸÖöôf#{,#;ÿã zžmÊÿÑ?fè  +endstream endobj 1835 0 obj <> endobj 1836 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1837 0 obj <>stream +hÞÔUÛNÛ@}÷WŒòdYö–µ­ªBKÒˆ8DPeÅ›Kd;¥Hý¡þegm'HÒ4µU¤ìxöøÌ ­ýwÃÔR\êô +‰¶Öa`í3` ,Æâæ¹Dpp%”CpcQd!Tú‚>”Iî¬+û¨q 5âA}¿¾» íÄaöt˜„77ãx'q¦“AØ×Îuð#‰"'B@•¦jYUd4qú¹Å=ÃSŸé0Ò „qŸ'øjù„â+Ô¼dE{ˆG?­,ÇŸ‡“™.Þ1÷_~öôH†Ëã?ï¬Ë–Æ]¡g{:ŽÑõl¾—Ó\Ë%.èG+'ÝJëA¢M9ôð×…ÉNÏÉ 0/7-7dd›2òMŸW݈£žý¼Â¶n†Ö4õ$Bw' “Ìô¯¼dO0ɨ©òÊfM!$“rMS<­x†-·–þ75¿^S×ÏŠÚо‚þyj_ŠÉ>ź¥‹¦D<ü-ÎiA(ãlÍ F-œ´»ô£Æ•U3~ëÔ§q¬ûÙØŒØD›oAåÿè?¡~D 0`Øëm +endstream endobj 1838 0 obj <> endobj 1839 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1840 0 obj <>stream +hÞÔVÛnÓ@}÷WŒòdÓx»7¯mQ’4”–4»T%¨2‰‚§²Ê?Ä_2ëKZ*Š%…&ÒîxvvfÏ™™µL݃!ƒif(.õ@z +…46®Œv`ì¾bÀ ¸2Šœ˜çÁÁ”PÁ è…Pé Æ(P&!¸1Þ™ûÝWà:»¤óˆ0—Ó4Z,fÉ“à¢ôjbìê(Õñ’š^”å`ÙŠ¸fx=‰´ÄÍ<ž”Ìô웉E³2;®ŒÒñÇʈ—3eŽe3¡¸~²T*T¹ÒõqÿEô•.Ë•ÉjœÃ™åz„™qå2«â-“*f­È Õyà\¹u"¤¬‘PQ"ùÌ÷-Û#ÒômNY):`)¢L€zþý韛>]çëG;á¦3Gë܉u²ª +·{ÔÖ|§³)–««‹ÛbXŒvm§–-t½}¶¸@eÀÒI´CÔ÷ØãÑtñßÑôk–ŽÃapt‚úÃþö9Çó¹Ô, ZLó„ú‘eQóéÕù9£´Qœ{Ë\]¯EMÖAYR¸°ž~I> endobj 1842 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1843 0 obj <>stream +hÞìUÛNÛ@}÷WŒòd§dÙ‹½¶UõBhiD‰‚Bn¼I\ÙNi?©ÙYÛ -P­Tåa&³gçzfÍ`jl¿í1˜f†àRlO‚ *cbìÆö>ÁÄ`(þP0Ï%‚ƒ+(¡‚Kƒ¢Bm_@0F…2‚kãÌÜkíƒC>¡x…êKÉ dŒ1 õ%¼¼š«L£Z!9q%V+‰#páû>Û£Ô.ë.ZQb7·:Äfi€(±ëVùEƒ|ÀCÛ[õ¥QeReï”i‡YVC×ì_E¡Ö¸™«¨T ÖÒ7‹8f;¬@éxVx))s¬’ë?Â..š\Ûõñ~Uô•.Ê“h9Îa`¹a¦ª\fU¼ERá#¡z œKw5Û^UBEYÉ7`¾o5i¸>Eø2ƒ7©Éõ‘Ê{ˉÊ;1š“‘YtŽj[P\ôú»ìb8D;£´¶òÔ7‰[¡î× óY/S4ç®{ÜZ{Ô{;üªÐœ¢÷C†¥P¬¦Ûo·ØÓ¢LR¥Ýð7ž…i}d‹txFÏ7žn +ž±M=þÔfꤰYžFË+,ß±©MÑ^»~z .¨ Àá|©n]y®ëùZ¿7 v+ ÿ÷YWŽúíö&„è,⤤ß*Ü KqŠí¨Nÿjv¬š¯Ož›M÷´q‡#S&‰Øà`‡ñ§íÓ=\­oHÒúó°Ó‘Ü{pUØ#²øÏÎaç šã|vœÆ*Ñß–’§\ÔоòqÄöwƒ¿  +endstream endobj 1844 0 obj <> endobj 1845 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1846 0 obj <>stream +hÞäU]SÚ@}ϯ¸ÃS‚fÝd“L§ŠhmÑ2(T&%éHp’PÛŸÔÙ»I@Eq¨ƒít:<ìæî¹çîý؃±¶wÜb0N5)À¡.X®A!‰´‘vàk{G ø#q øÃ…¹A åàO5Š,„ZžˆÊ,ðoµ ý°~6q¡¶WÛÙfb0—}6N‚étá$΢d #ãÒ‘D‰!Àd„IüCÍDFg˜ï¸«¸sêó(£‚8„O‰áÕp.E#,k‘ E&?yžaºÄÒ=“SVlm0$‘:ÀbÝ|ùëЗ|ù©z'ÂTçè¢wb9…¬œÂ×½êþõ5œOÆ8®Žnƒá0¦øjÓ(1L¡æí›Á£ä7Æ—Y¾-‡çoK¢Ú,…È÷y¡ñdñÒÔÑÒAA²î”ˆò\‰è"Éál–Rï^ÐKx i–„ó›¾^©VúÆ›»1·©T•ºçÐ[q̦íK?¿zÞ ®çQárÖn4ž‚t/ØFÛfòÆÞ +¼úldödä4 2„ÌS< £ÑíY”5ƒìª9›ÄhÎú:ßÍiºÅÒÃí¸ËIWâÕÞÕkxúaÐò÷ýv«¯+öyº‚%Q„¨>þ†WARíy,ÍFÀÞ¦@UÍ ×”¥‡}]¼$ï'8[ó/q”ÕU©‘x»¬-ela¥Õ>àƒn—QZÙnŒæÍ1Fø,Ü}**»P9~­æÉ™ +Дé }›©þ¶² )ƾrþ±í×·ÊÞ~¨éKý”a*t7/ +±F´˜t¹‹vºV2â¥jÖÒÅYïn(H«Â%­ ”ó¿Ó¯EñëÍÓ»Î$ÈõçupÊó1àÿõ/] J +endstream endobj 1847 0 obj <> endobj 1848 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1849 0 obj <>stream +hÞÔVÙn›@}ç+®x‚4žÌ¨êCš¸k+`×i\YÔŒªGîòIýËÞì4î7rUU<ÌåΙ»Ï3kïyÌ`VZR@@CðB ‚‚VÖÔzšX{Ï0H¦ã@ñÁ……A å\[­êE’ +”y|².œÃî3ðI{AO»,$™Ïtz}3xYTJOÓ‰rß%¯Ð“h•¦bß<_;¸³:ì|¤W µ† Q¿/«´Bõ¢D`¦¦ŸNTÕK«ËÞ;í'ÝíZ?J¿˜!¬o‰©Ý…“þÑу\üŠ–Âp–îâ×ÙˆK,áOXæ7¤ôøð‚mÄuçk8Žƒ÷FÁîâ^jä[§ÆÏT¿Š€mû“Øæ\‰Ÿ‡š+qÖÇÇÜÞî”G¾¼3åøõÿ&ÀŠ§"Þ +endstream endobj 1850 0 obj <> endobj 1851 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1852 0 obj <>stream +hÞÔVÛnÚ@}÷WŒx²“°Ù‹½¶Uõ!!¤MKR†…¹x!T`"Û4í'õ/;kRh’Òˆ¦ªxØaöì9sÙ`06ß´ŒSC +p©¶'APH”12Žãð”ƒ`d0?¸0Ï%‚ƒ+(¡‚™A‘…PÛ Ѡ̆àθ2Oê§àj‡µý}h&óˆ0çã$œÍ&ñÎâL%£p¨¬ëà*‰B‰! Ê“'FµÎ0·¸§¹sê– +#•@Gð1±‚φO(¡úFò9A ¨ g·S•jT=0ÛÇ\%q$.|ßb{”ÚEÖ’W.÷±„ÛkûX-],‘ob5Vµòó +ù€›¶·,Lµ ¥ ß)JÓÓ ¬ª$®Ù¹Bmq3SQaÀD¯¾[Ä1KØy J†7%ˆ+eŽUeBrýE8¥]®íúx¾‰&r%ób'Z 3èZ®G˜©Jʴԛǥv-ï Õ}à\ºËFØö2*ŠL¾ó}«êÛô«œ²ÂtÀ’DšËuûåŸCÿ_òÕWÝ;á¦;G—½«[ÈÊ[øwC=šN¡5ãuuõå¶^Æ_mª«*ô}ûbqN‘> endobj 1854 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1855 0 obj <>stream +hÞÜUÛnÓ@}÷WŒòäMñvo^ÛB<”4…B©¢Ö ­’Y±“å&Û¡üɬ/©š^°PùaƳÇgvfϬ9L­ýw禙¥%xÌåk ÒÄšXoCkÿˆ‡pbq 4Ü÷¨àIF™€pa1d¡LÂ1:Œ+o¬}Ø=—úÐÙïìíA/%ܧÒ^MÓh±˜-§p¼Ì“t2 +?`&YfTJp8åÚ…ðÐrÑäžð wA}–Dq’B´ŒásJ¯V@~ÂÌG) +ä s@÷{´XÏ“Ì º¡¥õ4V«©« +På3¦Êº‹V‹Ø *ÔEl–Èb›±mUP4(\T~ݧÚIµ{·ìÌI”å@M=ûbGÆvžÄ¥3c{I¨kW°O(_W QZÆ]âp©…y‘näò”à÷=t‘+]•+ñfœCŸx>åvRQfU¾Õ²J†‡V 3Ç „öêsPª®„ɲ’Àƒ€8>UvàÆK×¢©¶jÛÜ<;ôå’o_ÍÙIrsr¬>;¹U!¯Tøw·z0ŸÃÙlŠrõŒ¸ G1f8´Y’G½}#Bb0‰i±cÌj¶> endobj 1857 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1858 0 obj <>stream +hÞÔUÛNÛ@}÷WŒòd‡zÙ‹½öªê ¡…RI‰ª¬xRå‚l§ô—ú—õ%JHÚ!”‡Ïœ¹ÏNŒ¬Ýg F™%4/” (¤ÚZï#k÷€ƒhh1HXÁ!”PÑÔ¢è…PO ˆÈPæAtk]ÚûíðI­ÝÖÎtR‡…DØóQO§ãÙg¹N‡ñ@;WÑFe$N„—&}ˆö-=š8ƒ‚ã¡ñ]¸>Õq¢Sˆg |I蛥EjŒ ’È1Æ€öxz3Ñ™Aµ#Ë÷Ö*‰/p¡”â…”zeÕ’“@ÖzláÞ==vË4KJìƲWªèTzaÝ·J¥Jß/[sg98®$}~“Ćãv®“’±¡Êž9Ä·+Øç +”®+/)e¾ã2!¹ù~)D ¼@¡}Yô•ÎKM²äÐu‚0[W.³*Þ|Vé3¡fœË „çÕ•PQVò˜RŽÏV.§¬d}p$‘6@M7'/}½Î—Ÿfv" ÌLŽÖ³Ë-dÕ>oª{“ œŽG¸®Yn‡á2føj3:®0ûöÝá…:!EÆø2«·ðâmI¼6ËCE¼¼Š(Y¾4à Zx¼»KDyq‰h]ä0ÕÚ‘vƒë8möÁ|ž^\²«¾óönÏ}*M«V[ô~³ˆšO»ñd¡l4÷ñYç(]dð=¼=Ñy'ί»ã¸o£¼1KX÷p‹Æ»ÖÇv õŸ¾žE{ÑùYß6ŽÙ”‰¨‹Kz…þ³Þ¤°Î|> endobj 1860 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1861 0 obj <>stream +hÞìUYOÛ@~÷¯åÉNñ²‡½öªê ¡W@1—BVì„T!Ak§´?©ÿ²³>B‰šÖ@µªò0“ÙoçüvÌ`bm¿0˜d–мP‚  Skl½Œ¬í= ¢±Å8Pü¡`a@‡@PB9D×E/„zJ@4B…2¢[ëÜÞíîOBèlwž=ƒ¾vXH„½˜èøúz:ŸÀ›yžêqLã$ÕÏ8ÑNôÞR„âj.$/SŒÝñõÍ,Í ªY’“@bµ’øJ) ^H©WÖ]´¢8ÄnîÝ;Äf€(±«V©¢A +ðР뾸U&Uö~Ù™^œåฒöÑMÛyš” +LTöÜ!¾]Áö+]U ^JÊ|ÇeBróGø¥Q )ð…÷û¨¢/½(O’å(‡c' ³ÓÊeVÅ[Ì«`8´b$ÔŒsÔsð¼º*ÊJ>SÊqCâÙÊ唕ªŽ$Ò¨esñÇ¡¯óÕ_3;f&GëÙ‰ YÅÂ_›êÎl‡Ó Ò50äv’1ÃG›¥Úq…áÛ‡ 4¦ )2ƇY½­€oKâ²Yí¡(âåzPDÉò¥Ñ2À}äÝ-"Ê‹EDë";¯»GÚï.ÑNt4ÚYçËlè<¿#¹O¥é“ ðÓsz/ Ëu²¼Ú­v«¾µ¿Æ­á8îEŠö ðãx¶L×®| nrDó2C`’ŽoÒ¼çWýÅtŽæ|h³­Âåi)ÎP µ"Àš³t Buš"jˆ¿ÑU¬ÛC§€É6ž5Ö-0'Šä±.‹ntOZ*nƒë^üÉd¨Ñõ¾hmvõà¨×{Tˆ Äñ}&¿Cˆuþæ?”?áføé9kÈâû8á5È‚=Åüdñ¦ XÓ ØC2`ÍßÑñ4ÚfJûüÙþ3IÎ<І,o?‘Þÿ×ãokÓžðƒûë¿å_1×s +endstream endobj 1862 0 obj <> endobj 1863 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1864 0 obj <>stream +hÞÜUÛNÛ@}÷WŒòd§xÙ‹½¶Uõ! ¡7H#b(ˆ dÙ›*±‘í”þRÿ²³¶.MÚ€@U«<ìzæì™Ù™³c÷ÝÁ¤0¤úàø…\cãmhìî3`Ž Æâæ{Dpð%”C87(²êÂ7”9Þçæ^o\âCw·ûê r‹ùD˜Ù$æói:i©òq+ë"üˆ‘D‰!Àf„IÂ=ÃFF'®vÜ×Üõ‘Š•C”&ð%·Â¯F@(¡úFò +9ÅÐûͯgªÐ¨^h¸N€w•Ä•@¸‚ˆãSêÔ·–œxréÇrîÜócµt±DåÄj¬jT +Ž¿,ŒÝ¤Ò¤ïÖ¥9ˆŠ,[Ï<¾N"½ãf©’zS½fj×l`‡ (¯¯WÊ\ËfBrý!ÜÚè És¼Ïp‹\yV{’E\‰åù„™ª¡,šxYÚîU=¡ºœKoÙÇYÞ„Šú&?€eûÄ1›SVo]°$‘&ÀrÝ~ùëЗ|õ©{'<Âtçè²wb¥BÖ¨ðeSíÌfp4 \=-n‹¡ |µ…Ê-[h½}³¸@£JH•1¾Ìæmy¼z[§Íj…!¯çC@Y¿4½A´ôp 9·“ˆòjÑå%ã,Ë-ižD³…:§ðúǯoîR©‹t{zÎ4®(ódq=2[íÖȪ„í»¸³8á¹”¢}¼NÝO¡eT"dQ 3Q㛾*Qy5Ȧ)šË‘Éw*šÓz9Ãí¸«HÄë¾ïuÑûérvÂãáÈÔì‹âjœ+…¨þâ«(o¬*Öh+àÙ¶@]Í-n(ËÉ4™ºÐ‡üòP´žtýU¯é–½ÞwGg+¬ßhb}üûbu9Úé–škÿYl+ì:mþÇÂ[¶B{^Z¨¿Ë€­Éà…½º—&õsq"ßçTõU­’DZâÜ„â|oæîz”ë°Ûéc б~Z?9õn–¦*.§ZÈ)*â(ÕlÆZ;аê™ì{®Jm +Ç«pç7Ìy¬0ÚÃÞ0|¤Šðø§4þú +endstream endobj 1865 0 obj <> endobj 1866 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1867 0 obj <>stream +hÞäUÛNÛ@}÷WŒüdYöb¯mU}€` -„ˆ˜[ ª,{Rl§´ŸÔ¿ì¬í„rSQ€^TEÊNfÏœ¹oŒÕ­ƒqiHõÁñ% +…2FÆzd¬n2` Æâæ{Dpð%”CtiPd!Ô D +”9]§ÖF¸ .ñ¡»Ú]^†~a3Ÿ+ñåå$û¬RÅ(N”}½GO¢ñĉÐa„I¢ £ƒŒÚORKÜ×Ü5õ¾ŠSU@œ¥pTØÑg# M¨6ÒH^#'è¯ñåÕ…*5*Œ ɉ'1[I\ „‹ €8>¥N“w]Šú«A¸së‹¥¢¾ÄbÌKÔ +/V—NI½ÛTf'.+°;’xÖÁUk‰[•J&ú ¬Ì&®ÕÂv[P‘œ· Þœ”¹v‡ Éõá6J­ò/@û>ŠÈUäÍM:M*8´=Ÿ0Kµ”eë/ÏZgØ´º%T·séÍúà8³L¨h2ù,ìŽO+èpÊÑ[iÌΧúï’ÏêÞ 0Ý9:ë˜O!k§ðuC]»¸€ýÉÇÕÓÃm3Æ—¶T…ÝzÞ¾Ø\ R¥¤Ž³Ý-×»%ñ±™¿CQÄ›ç! l6M ˆ–¾GÎÍCDyýÑY’eW¶´¦%¼…T®{ª +³t/S=…êjh í77ãîR©+¦ »Ûa> ¢µè`0´4Ó´ü .Å[ø~†–Y©²ZŸ¢~l.è'ZzŒ¾›g™Jª ªó }}þuÍ0·ð‹m¼¸Åñ²žÄoóÄ^ÃS?®ÎU\4C`îïDá†yÇîYì;ñ7=b²ïêè +ôvvr‘乎ôø”ž¡“²*Òéò2îûõŒšœÜ1p}Ô?†?Œ/¦ª±Ñ±>%Í~>Éš"²•šæ¸9NðÐmÌ‹št¡´G…Ò%Ä%µ’ó¸XÚµ ðIÀ“ûÀG’8œÄC õæVm³#ü˜/Ù§¥'·‡×ý¼×žÿ¦ö|ñÚÿzÉ{áÑ«m¸x¥ gÓ ëÒçŽÐ_¶áøÿC€#~s +endstream endobj 1868 0 obj <> endobj 1869 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1870 0 obj <>stream +hÞìUÛNÛ@}÷WŒòd^öæ]¯ª>Рm@1DPeÅNH•›l§´ŸÔ¿ì¬í„AK)¨B­ò0ãÙ3—9;a0r¶÷» F¹£h‚  +Yê 7‘³½Ç€A4tŠ?,ÔDpЂÊ!š:£*€h€ +e¢kçÂÝmíA@Bhn777¡“y,$²x:ÏFðvV¤Ù0¤Þeô3‰*'B€ÏSD»ŽmžA©ñÐÆ.C§q’fÏèe^ôÑ1„¢ µNÉKäs@ës<]LÒÜ¢Z‘HƒwU$P@¸0Æ‘!¥²ºµâD«Õ9¶ƒpùÃ9vË6K”‡Øu¯LÙ!x(ÃUcüº”ºü jM;Î ð|E´{²Hb«q·H“J±•Æy$pkØa ÊW5ˆW’²Àó™PÜ~ˆ 2*4i© úwPÅXÙ¼:I–ƒN=æ¦uȼÎ7ŸÕÉpjåL¨çJ¯!åê&TT7ù +ÌωtÏ)«Ô> endobj 1872 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1873 0 obj <>stream +hÞÔVÛnÓ@}÷WŒòd—f³{m ñPBJ %DÄm©BÆÞ¤FÙNÛ_â/™]Û)D-½(B–²ãÙ3gvnë0˜Y½·c³Ò’|€H +eM­×‘ÕÛgÀ šZŒÅøDpð%”C4·(²ê†¢Ê\ˆ®¬/ö›Á>x$€~¯ÿ⌠+‡DØ‹YÏçY>ƒÃ¼RÅ4N”ó5z‡žDí‰! Ë“Do¬.2j?‰‘x ¹ õ'§ª€8Oá´p¢VH(šPm¤‘Ü 3ôƒëx¾¼P¥F "KrâKŒVOá" C n@©[ÇmRa61„»lb²4@˜MLÆ:U¡IP¸ém^ºÍIšÓ{ufŽâ²§+‰o/ÓXKÜ®TZ é5´s‡xvûЀŠä¼ñz¥ÌsºLH®_„W+}Tù®¢ýEä*õNºJ*8qü€0[5”eão‘7ΰh¦$T—sé·upÝ6*êH~ C§×»œ²ZôÀ‘DÚíúðåŸCÿ_òõ«®ð Ó•£míĺ YÓ…Ï{Ô½‹ ø”Í°]}ÝÜÃf,qhKU8]¡ûíÒá•*%æÄ8˜ÍlùÜÌ–ÄËf}E¯¯‡„²ž4- Zúx¹7åæ"¢mÓB)GÚ|’ó¸Ø™8ÉbQ|þB¿Nœ—7}îQ©Su·ÅÙoÑŽ–U\!pUÂ+HÕôj¨ªQ\ŸdñÄF}çí :à§ì”u6 ûƒ>ÞG{Ññxbk¦U¹Ò^¥ŠʪHWˉÝaÌåê9íÜnp¶a°sî$¾X©;<>:zHh£E–£ºšØl×Ð|®—3\P’!}R¸÷ê¯À'ÖG<½>wÐòÔÐo‹ù>æj¨ê¼o3µËëƒP”JÊ8k'ê–¨°/ó›¼oŽà““Õ_ä¹JªL7cŽ>F‡ÃÎ.hW»@·U‘M'i‘]ªB»èd9þ¢þÙ|}_Í—±q¥¥¥ÖçÛŒm?»V)R£z9y¾†GÐÞÛNÈŽ>Ê›ã>²Z-¼×ƒ1Âû{ÃþÁÞáðVÊÍ3Œ«¸¨ÆIœã?4iÇYŽÇq·’¾š±ú:çê›y]~9 0—Lêä +endstream endobj 1874 0 obj <> endobj 1875 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1876 0 obj <>stream +hÞÔWÛnÛF}çW ôD6Ñz/¼¢èƒ#ÛmZ7Q"ºKR2[‰HºI>©ٙݥ.nS8©ì"6¬žÝ9s-`áœ|;°èœPAÄcðㇶræγÔ9¹ ;BÇ_\D1%!Rœq éÊáx ã~¢ -Pà‡ôóÖ=;¿€€Å09™F‹‚¥ô&Fc«DG(Üôã!0cKÅÒLh.ó®o²È½Ú”9IÒí«ÒPÓš¸Çתýh•ÚâÆ*I³rxc¡BI*0`ŒPäG žŸ¢ˆwµk³SÞ=üäE1ne¯ì¬½ucaÖtN8åAÊ0áûƒ'\Oþ‘$Þ8f¾›Œ%F À Yè ëý—ÿ]õ˽|ûH¹S”9>äNm«PØ*|Xª§Ë%¼®X®·'°;ìÚ®j½±¢zûÓ +Áªdš1v¦í­HêÞ +qÚlQšJ3–„¦ÓH@í0Âäï&—zñÁÉÉwç/tÈféiz5»v»>ïo»kïë]‘<¤8‘:í¢úmß@YÍßÍŠ¼)nòº™¬^­ÖM‡È¦nºkwôüÅè)ŒŸž +’^^¥´LOåèÚCؘH¿º«õQû3‚ó¶G³Sc×!ûw.9†©õ-Õréï\:¦‘—-Â8«ÒÚ‘d‡> endobj 1878 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1879 0 obj <>stream +hÞÔWYsâF~ׯ˜âIòša¡£Ryð'Ä&FÎQË¥•V‰@ÔHdÙýGù—éI`¼v²ë› +¦F­žžþúÌÉÜê]Ž9™—–'‰Ïâ‘ŒheͬÓÈê]pÂI4³¸ þàÁŸJA|É($ZX ´P憒D Œ»$zo½¶Ï¤OrÖ;{õŠŒ´Ã*íb®ãÅ"[ÎÉÕ²Rz'Êy}H²FTJÒå”{}[]Ј8‰¡D€ºê[§J“x™’_´ýn…”Á†‡PRÉ 0È`/V¹*QjYž ¾Þz´ï*d†„ºcní· …Ù„hPáîmB°P@šMÆ6T¡ PH`Ó Ú¸tKëûud†qY§ëQß¾[¥1R®TZ$Ãgh/Ú·±!¼k„Dýd¼ït¹ô¾È~Í å»~çG@‚.]Ô;é:©ÈÏŽPn«FeÙàË ’fRÂ0 Bx~›×m=a²öä/ÂC@ ¨k‡]ÁxMö‰ãQÏ&¤}~þã?ýÿ*ß¾bî¤O9fŽµ¹“Û*äM¾¬©'yNn³9”«Åíp(Æš¶TÚéJ¬·?!©Rj,†Ælz˦·<6Û9E¢! ½ºÓiχyäîf±ÖɲŠ+dz×%ù–¤jö~œÄËä]œ-o4°a„¨ô4«Ê‰Ýy›É¼·XÃ;Ǥsuë .7wÀúv¼ë>ó0ȈELbÿ³Çn¡f3`‹Òø|ê'Xº|â|cТ#röÝà ~˜Ž£“èn<±ÑÃuù@êI·ÁQàÒ&h‡ìa[WY•ˆÖ` 'À?,ÔÙ±®vÙ[iU&q®Ð„éÕM/Ÿ•zªÕóykÂEì"®àJÛY‘®øų…Ò¥A› a÷úb¶ì×ô[#ì[B®{ï58¬1OõWZ?‡ÚÏ÷ µßþ}ŒÏè«.?&;Œ4òý.>…¸-ÂoØÅ_Ùañò‹¯é°é¾bµó$u݆«jšbãužSè0X%ep4ƒõ¡ ƒeÚZl˜2÷îMä/ÄéõÈ%ˆßÞÜÆê›ë¯‡Õ`³Ò`ËÄNŠ%ü˜Côð&Î"Î!”}TÅl‚“V×;GâߋỄpb‹g¥ë¾‰¯ÙÐ]V:]cšÌKž øäÉ3ü±3ò“3­7†ÃVöž86ªÞg93ÓJ™XÔ„(nõoŸÞ'ÿ$Ï‘Ô‰[5‡«Ë¨ax×7ߎnùü@7f¥aRt±2×Uõ£7×+l×Íæ0ð_–íÆ¡N™¥ +3óeÚá×Ùß ’l… +endstream endobj 1880 0 obj <> endobj 1881 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1882 0 obj <>stream +hÞÔVmÚFþî_1â“}9–}±×¶ª|àˆï’†KøÚHGT¹xñь֦Çõõ_vÖ/¤ ¦ÍUU…`×óÌ33;³3†Af nf ²Ò’|€H´²–ÖUl ®0ˆ—ã@ñƒ |"8ø‚Ê!^[­ê†ân(s!~´îíWÑ5x$€Ñ`ôâL´Ã"ì"ÓÉz½ÚdðfS)½LÊù‹žDã‰! Ï“į¬>Z4~õŽÆvmzª’TiH6)ü øg+$)ÔŒ&¯5Wè¢}²Þæª4ZQlynˆg•Ä“@¸ÃˆPê6§–œø²Ã1„»Ÿà˜-“,Qƒ˜C®Â:C! è]búm(mø^“šqRVàô%ñí»mš˜·+•6X™5´7ñìVí¶UÒ‹‡V‰7+ežÓgBró d+D‘ïú!ò'¸E[ºht·¨à{dzUk²lý›ÖV­® 5uà\ú]!\·; ÍI~†N? ®ö9eÍÖGitë—/ÿ¹êÿ×øáÑÔNø„™ÊÑ®vâp Y{ ÿÝP‡yÓU†×Õ7—ÛaxKìÚRi§/Ì}ûÕá…*%uÄØ™moù¼î-‰Óæ0ˆâ˜7ó!$¡l:ÍlP[ú8Ü“ˆòzÑîe•TŽ´w%¼„T-qpä]l•6⧹Ý['ûD«¤w‰óJÎo>^~J“?cfô:¡þÛgñ0¾›ÍmcwWvêñE­•éb‡ZÛh¿Õ÷ôº,+î¶èer•ç¬‡ø3ç8À´a-Ž±ËÚtm÷Èå—¶ÔJ¡Ö?‹‡D_̃=ŒÓ Ÿê6¨©ÊVŦ6C1¦úKë_³Gù»»ñø…wìnVi|GÔeB±®L™²Lo1½di†ºQP°Lò¼÷,.ëΊe…®P~;|ÿz8¾žDÓ7·QMѳ‹âú¼=ß÷šÓÓK” +é³DmÒ:+å ð¼¥þ çïÔãxµQsûï[EŠÝÚ¶Ê`W¨>þnôvxÍ>ÛNû ¼4‰›Ûi±û)WåKY,Ðøê7Ó*ŲÃæÎ…ÑÓ×Ñ÷“{ŠJ¦?9aG–ÏBÈb-$NYç dñrOYç d‰òNYç d¹-$OYç dy-䟲ÎAÈ’-œ²N ãKrÚñ‰®®°‚¿$(Î6ã_7Œ]4Ö35NžÌ Ñfô33QÅzËžgŠt>¦ÊÌ{œ%Âõ$ŽOx—øÏš6sÒÅMgß{0¾SÀÀ +endstream endobj 1883 0 obj <> endobj 1884 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1885 0 obj <>stream +hÞÜVÍn›@¾ó#Ÿ 1›ýcU=$ŽÓ¿T²lÒêªBfí¸Ån’Gê[vv7=DÊÁn•iw˜oç›Ù+çøíŒÁªv”€F #‚B¥¥sš8Çç $K‡q øàÄ¢¡ „rH6E/„ÊX@²@2 É­óÅ=ŸC@"ŽŽ`Ry,"Â-WUºÙ¬‹¼/]-Ó…ö¾&I´Hœ>#Lœ9>z48 +ñÈø¶®§:Íti‘ÁUå%ߘPÜBÍ&cÉ­å1`|—nnr]«qâ(NB…Ñ*( \Äq DF”Ê6nK…]D6—-"YÆ@ØE$cGUl ŠeÔóâw'éN´Ì\¤už¯Hè^Þd©‘¸Ûè¬`mæØ-<¸Ù§Î¨Z\wF¼) <Ÿ ÅÍ‹P­’¡*”aŒû'(¢¯ªlW²í¢Ï^æêÎeÝá•E†I³)¡& œ«°Ïƒ”}$T´‘üÇžéÆ>§¬ðQ.@??}úï¦Ï×ùîÕäN„„™ÌÑ>wbW…¬«ÂÃõ$Ïaº^a¹†¦¸=†ÅX㥭uåùÂÔÛO TêŒØãÅìîVÈíÝRØlv}(IxÛb«ö¦­UˆýHþiD”ÛFDû GïÆ#O¹¿Í’“är6wë&m¶õÜ{ý§Èª OÆܬ¢ù¶†7éåíi^.~¤+=Õ T7sW”AÙ1°#ê^‰Þcòê)¸Õcp“2Gõýª,æn8„»Éî'CPAØQ†,Êì(iGY°wÊòÕ ½ÑE3*77eÂÜløõ‡‰L>ˆ,ê#“ûŽlõZL‰úýb]¤÷¨Ö•!N †°_ï³›#üüÏ]v0šÄƒJS«·ž©Y^6µ¡Köêÿ X”»^Óm®¯ÖYsýr8;_ç¹å,¼„p&Ûú:+o ‘zÖýƒïÎcm:<\›Þwø‹ò[€&£L= +endstream endobj 1886 0 obj <> endobj 1887 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1888 0 obj <>stream +hÞÔVÛnÓ@}÷WŒx²K³Ù›×¶¥M¹°BÆޤǎl‡¦üɬ/½@ +U‘¼ã=sÙ33;ƒ™5|:f0«,%À£>H_ Pjkj=‰¬á!ÑÔb(þpa¾GOPB9D ‹¢Be JP LBtf½·F‡àö‡ûBX:Ì'Â.fe¼XÌó<Ïk]NãD;¢I´‘8Œ0åBt` У‰“4÷ïÆõ±ŽS]Bœ§ð®t¢ÏV@(šPcd4y£9Ç0ZÇ‹e¦+£5Š,WÈUWá" Ò§T¶¬'žêqLáòŽÙ2É ˆÙ¸ÈUÐd(¥ß'fÐ¥;¾Û¦æ(®jpŠxöÉ2ÄíZ§­s³vî×îÔ^uJerÚ)ñv¥ÌuL(n^„j7cžô´QD_eÑ"é*©á­ãù„ÙºsYuñŠ¼ †UkjBM8W^_){&T´L¾ gàiNY+ºà(¢l€~ýóå¿«Þ_篦vÂ#ÌTŽöµ]Ⱥ.¼Û£îeÏgØ®žin‡a3Vxk+]:aúí«Ãnê”4'Æ›ÙÝ-7wKá´¹DQÄÛù@µ7ͨ­<HòrQÞL"Ú“¬ê¸v”½ªà1¤zzö$+’/ñL‡YŒÛ‰^è¼WÕiZœå{â<ºì}—*“>ãeÿÙhÕ_~G{ÑÉxb·«ªWv~ëX'¸]OlWgdóTÍ÷]n8ú·pW©]RÚŠëÿÈd\LïŒÍU~ÏFÞ%›0.ëyœÁÄÆoÝ}#u-Þ‘!u®ËÑ:ÑËz9Ë5Æ~°ÐµÙÏ؃­’/›âä·Ýâ™á1+p +ˆ]X‡»pn%Â(Oû ¸]m©‡_ë³£y®ÿÒÛ´Ôæ0hm'§q¹3qÖáoU.óãQŠºÃ!ŒQ÷èM4þéø\‡ðqìö´X}Ê4:[Ä&7ÿ†ˆ.¦=6qv¼G9ÿ7óuøž¢ÒÌ'ì†çZ±·­6AhÅ;HÞ¶Ú¡•è ÷¶Õ&­d©ÂÏèneâÙ +endstream endobj 1889 0 obj <> endobj 1890 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1891 0 obj <>stream +hÞÔUÛNÛ@}÷WŒxZÙìÅ^Ûªx ZÚPEÄ´Un¼ ©’ÙNþQÿ²³ö¢¨UT¡HÙÉœ33;—p˜8Ý7C“ÒQ‚* +íŒ×±Ó=áÀ!;\Ã< ¨HF™€xî0ôB™IˆG(0îA|ë\’ãÞ ø4„£îÑÞ +—‡T’|R¤óùt1ÓE¥‹q:ÒîUü#É&’ RB‡S®|ˆz4qFµ$Bã»v}®ÓL.2øT¸ñW'¢ M˜12LQ3§zwéüf¦KÃêÅŽ4P˜­¢¾*dE@½1¯É».E b5¨ðV@,–!ÈÄb<”*ª ‚^ØÖ¥coboï7•é§enGÑ€\Üd©‘©tÖ05gD.õ‰¥YR1º¶$ÑœŒûn‡K%Ì©¥DUàÚPD_EÞ ÙrTÁG7)'Úº,m¼|aƒaÓê–0Ó!TÐöÁóÚL˜l2ù<ŠÜNH=uã胫¨"íùçǧ¾\ç?Mïd@¹ék{'¦Û)|Þ«Îfp>à¸f¸]ŽÃXâ£-uáv¤™·o®¨Ô­oŒÓ¾­@ÔoKá²yØCq,šõÑH5/ÍÈVî#ïq1Q/"Ö&y?¸ô\E®àå¯'ÛgÊÇpî—¾å-'ÞmÍ7Ah¥,®[m‚Ê*­Z–ˆez|;¬Ò¢ÎòªLêEâ®ÐÞöŽPýþó0>Œ/† 1öËò kÍ)úë§÷ºHÈêÏz1ßÙšãA>»Ÿä T'$ØÇ2ìc¾Ïâ]nÝû¹U á õŒíƒ`æ›ûæÛCÙDÝn(±JK¨Õ©;/±3¿Ž˜Úêˆõ™}Ê[q÷Aßö§ ý—ÞÆ…ÖuŽ ]§ÅnâÞ ~Ky,.II.a»$»]8Aîi¿?Ü°DáqHH–/¿Ì4:›§³Y>ÂëM¿#¢óq‹%înðä*÷ÿfŽË˜Ù+Ö—ñ&­¸…äºÕ&­„…¼u«5ÿÙ~ +0k·* +endstream endobj 1892 0 obj <> endobj 1893 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1894 0 obj <>stream +hÞÔUÛNÛ@}÷WŒú´.xÙûzUõ†Ð¨1íA••˜4U.È6…|Rÿ²³¾„$©‰*É;ž3sÆsÙ ‡qpô¾Ïa\F‚e1¨Ø€dgÁMð. ŽN9pHn.€á[*XÉ(̆,”)'!¢À¸‚ä>¸"'ÝSÐ4†ÎQçàzyÈc*Ébœ§³Ùd>†ó2ËoÒa^'Ÿ0’¬# *%Dœr£!9 "dôq†•$bÏ]Q_dé(Ë!à[&?Gº0ïä-Ee9ÁÐ}Hg·Ó¬ðVÝ$ÐÊa®†jTHçP3¦ê¬ Ö´8–ƒ +µcµ|±db5VµrU… ¨â¶0Qó)Íçëº4giQBjÉåí(õ’ e6ª˜øÓ‘yH5iÌΣ|ø£1õɸ#.ð/ÒÔJ…*«¬CÿŠÈ•/jdt7,ákhcÊIÖPM¼Å¼ †]«zÂ|„0¶m„Rm&LÖ™üî\ÅT ÆkQCh¨!íùïÇ7}¹ä«Wß;i)÷cmïäj +y3…ûýÔãé.&cWë‡;ä8ŒÞÚ"ËÃHúyû +‰ÊlD«/Æ›ÙÜ-+ª»epÛ¬Q’ˆz?8êL}Ó¼€ÖÆâBR›ˆ‰j±6ɇޕ ¹†·¸Žø›ÇÉÖÌøâx›å_l’×­»j ³-Ÿ‡ÐK7}êõ„^¦â§^ÏAE™–݈²›û~™æåéd:-õzn˜w>t;¨þü½Ÿ'—ýñþwÅ–Õ6©ç;K—Y> ¯PÞMø«_dÃr@8C=c‡ ˜ríŸ +eTï,To1]ŽsOIô!VüK»ãDÄf"bï‰Ø=%"7‘{IdsªÄ‹œª­PJ?†2z¯¡ìZVn¿Y¹µ¬8^ýBÆyÝìœ}m‚gY™Nw¸+ê/=Twûilu1ª¶V×¢õÆã? Ê5ç +endstream endobj 1895 0 obj <> endobj 1896 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1897 0 obj <>stream +hÞÔUÛNÛ@}÷WŒx²löb¯mU<ÐzƒbCªÜx\9 ²ý£þegí5¨„¨´ ªªHÙÍž9gfgg& &V÷Í€Á¤´¤Ÿà…BYcëulu0ˆÇã@ñƒ |"8ø‚Ê!žZUuCñ7”¹ßZöAÿ<@¯ÛÛÙ¨pX@„=ŸÉtšÍ&ðnV©bœŒ”s¿GO¢ñĉÐa„I⫃ŠÚϨÞñ@k×Ò§*IUÉ,…O…µBB‘B5I[òÚ2CÐ_&Óë\•Úª[’_âm%ñ$.Â0┺ͽëTÔ fƒp÷'“¥ D b2îSÖ +A7hóÒ1‘˜è½&3GIYÓ‘Ä·Ï®ÓDï¸]©´Ù@¦×О9ijٱ1*FWƈ7+ežÓaBrýCÈæPù®"?Â-jóI£ +Î? ÌVF²4þæ3ã ­~ªŸsé·ïàºíM¨hnòX:€¸vØá”5[I¤ ЮÏ_þ¹éÿ+~ÿS¿ð Ó/GÛ·÷UÈL¾l¨ûy§ÙËÕ×Åí0,Æ›¶T…ÓºÞn.ðP¥¤ŽÓô–ÏëÞ’8lîçPóf<„$”M§é ZKç‘û0ˆ(¯m/Ù{Ûï9ÒþðyïÇgƒ¡]VIµ(‡Î«‡"÷¨ÔyÒæEóE {ªñía–ç§jT mAñœî§ø%<ür)meâíç83VOù8Ï’¡½u“áyƒ­MêžD½¡çÓŒæÙ¬*kM¶ ËhI„Üz‰ ÅFƒîÏR­Ò‘û¨n²™úCµq¡”~jüŒ®’b{è,£_š<$»AÊ8kÛ¡Û…ă'ÛeÁâ0´ÓùâK®Pmšäù|„ñeßQóq‹ mÿQ,wG_Fº)/1uœ°GÊk!d1‰UÖ:YÜ@î*k„,a o•µB–k ¹ÊZ!Ë3¿ÊZ!K(Xe­ƒWí JŠjÏM‡ñ´‚Ö;JîTÏû1ûÍy€*?•Ú“ +endstream endobj 1898 0 obj <> endobj 1899 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1900 0 obj <>stream +hÞÔVÉnÛ0½ë+9Q‰Ms‘(Eiâts\ÃVÚC]ªE;.d9ä&ù¤þe‡Z²´é‚ÖnQ0GÃá{|Ãá€Nïé„âp”„€…à… +$ƒÜ8sçIäôN8pˆæÀð‡*’Q& Z9 Q(ó´„h†ãD—Î[rÜ?Ÿ†pÔ;:8€QîòJ²^äñjµÌð<+M>gÆ}½@&Y3 *%t9åʇèØé"¢å™U–-v=6qbrˆ³ÞänôÑÑ”áfÙHQE.‘úWñê"5…êGŽïiÔª¨¯€ +©µê…Œyµj%h ÚyLÞ½yÌ–M–¬&17¹ÒU†4श‰é6[i¶ïשÄE nWÑ€œ]$±µ)MR°´£&™K}Ò„6Aùì¼ õȸïv¹TÂ~HU;qàh\?B±òu=“lf%¼vƒrbÈ¢á[g žZu&Ìžƒ*hÂóZ%LÖJ>×Úí†Ô#º+¯M\EhÇ_þyèÿ ~óiÏN”Û“cíÙÉ›*äMîv«‡i +ãåË5°Åír,Æomar·+m½}r…D§Ihµc¼™ÍÝ +Du·v››FE¢îšjUß4k`´ +°!y·ˆ‰ª±VdQÆ¥«È¦€Ç˜ùå$]—c3+§„3ô3ÖÁì?÷í¿‡6º§î£Û;à3eÓhÑŽžõpúåûItM¦ÄÂoŠ6<Úÿ.çh^/Ö™Å&~®F¸}µî÷ÑkEâ¾"ñ¢?¦º+$Ø‘y_ˆÜ‰A|mò)ÙCÿi?{[Öð+åµm*Ï¿¥RþN©‚;ªônUé;ª8ÖýŸ”ó]tµUô~–X‚bº´Íå`™™ßD›çÆT§dvçûS÷jôÓÛD`—•”a¿oºl¯CŒ}5Ä—ÞáÙ Ÿ ú“ûñ79/ã¼®³c3Gw¼IËñŸ~Sâm'KrkÝ)æk/Yo>¤frOYË…þ=,ÓÝе-keÊ8åÈ#Ðßq{5:Àþ­ø7´ò´øvø"Àx²&m +endstream endobj 1901 0 obj <> endobj 1902 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1903 0 obj <>stream +hÞÔ–Ko›@€ïüŠQNКÍ>`U=¤ŽÓW’F6IM!³v¨G NâŸÔÙYNªšJ1QeK»Ìóí<ƒ¥µÿ~Æ`YYR@@CðB ‚‚VÖÂz[ûG Ä ‹q øÃ……A åE+„z‘€xŽÊ<ˆï¬oöáä|Âxüú5œi‡…DØ«¥NŠ"+—𱬕^$så|?!I´$N„—&}ˆ--μÙñÐØnLOU’* I™ÂWíÄ?¬ˆP|…š—Œ&o43dÀä>)nrU­IlIN‰ÞJâK \DQÄ )õZ¿›P4‡ ½ß1XFA4‡Œm¨¢&@à¡öqq»›t·÷ÛÈ'U Ž+I`Ÿß¤‰Ùq»Vi»Ì¬‘]:Ä·;µ“NIϯ;%Þ®”ùŽË„äæAÈV (ð‚ß?Ã-ÚÒ«ö$]Ïk¸p‚0[u&«Ž·*;&­I 5ià\}<¯÷„ŠÖ“ŸÀ¢ÈqCâÙ‘Ë)k·>8’H _Ÿ¾¼¸êÿk|ûhr'ÂLæhŸ;±­BÖUán¯zç0Í–X®)n‡a1VØ´•ÒŽ+L½Ý:\ P¥¤¹16f×[ozKâ°ÙΡ8æíxˆH$ÛN3Ô–Î#ïaQÞ "Ú;9þ0;Òþ|5‹âóÙ¥]ÕI½®.7EîSiâdÔÍ)ª¯+x ©ZÜ®ÊCµHÖy=5â\]Ú{ùêNit%Cåç—´÷F@{‹ñ«§p;­¿âŽ“ÒÈ,Tä 9å#‡Ú@Gæï€åˆõ{,Ã+ŒÀ+c[ow䓬¯ë +ÁóuÍŒ»(ç°¸Ø)ËDr3ÅÍ€õÉÉØõùX1ö"K¦}:o³„qÝÊ÷Áqñ¬8üpËÏôêFi#ÞJVæª\Öצá)Á‘†Ï@šÕ?4ŠumX‹LWõiR˜–ØûR¢<ß<_ø=Û¹µA1¢²ô!l‡­=^WõªèåCõøã©Ì†ëñÀŠÁ°Øtý}5ÇÌ¢|U°,NüŒú%ÀBUŒv +endstream endobj 1904 0 obj <> endobj 1905 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1906 0 obj <>stream +hÞÔU[oÓ0~ϯ8Ú“½-®/‰“ñ[Çm jÍ@h™PhÜRÔ JR¶òø—çÒŠv ŠõÁ®Ïw¾ïÜì9'}£ÂÑ +‚jPrã DZÓ9 :BÇ." ˜’(θ„xêpdaÜ‹ÄÜpáA|ã\‘Óîø,„“ÎÉÑôr*B¦È|”§Óéx6‚g³ÒäÃt`èuü•T­$™Rà +&´ñ©ã"£ÕT;ZîŠú¤™É!eð&§ñG'b]¸u²HY!ǨÝÛtúib +‹êÆŽïE˜«f¾&UEÀ¼s¯ÎZKèÖŽå`ÒûÎŽÕ²ÅR•«±ªUTU(4za[· ¥ ߯Ksž%PW³€\~ÊR»“¤4Y½±]#2£Ì' ìeʬW.|ê +¥¥ý£t}âQàú÷p‹\ù¼¶d‹A ¯i2ALCY4zóY#†]«zÂm¤ÔAÛÏk3áªÎä+ˆ(¢nÈ<¹’‹zëÕL€výùå¯Cÿ_òÕ_Û;0a;ÇÛÞ©ÕŠf +ÿl¨&¸p\;ÜTà0xk “SWÙyûL¥ÂC“±*b¼™ÍÝ +du·4¾6«‡(Žeý>D,ÒõM³Dë$oýqY½D¼M²(Ó’j²(à!dfxój>;5Ãt1)/ìñļ§ 9˜.?S!ß ……ϧò ¡Ö÷ÀçÚ–Ò2ž<íž äÅ»~ü(¾ì'ÄJ,ŠÞ[Wªµ®8Ø ú³rr?rÝYÖ*â1Š¢b‘ý¤bnÎÇ3s_6l›b\HÑö­Ó>âã·çÝþÝî—i^öË¥ývh’õKéÜöà!¢ !Ù|ñ~b:M'“ùñã/h1óakKè¡Þp_þžûmïŠ#èSR|ƒxe|ÓGÜmY®-jËG6wÛIîtR­ÓvtjgtÞn'oGèåïŽÏßA¸=Ëj®Å1h> endobj 1908 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1909 0 obj <>stream +hÞÔV[oâF~÷¯8âÉÞ Ã\ì±­*„x·Ù¦) +“n¥°ª\<°T`¢±ià'õ_öŒ/Ð@P³QªªâÁÃœïœï\¾›ÁÌé}1˜ŽÒüH‚ `´3u.”ÓûÀ€š:ŒÅ>XÁ!”PjéPŒB¨ P\PæƒztîÝËä$‚Aoðþ= Ç""ÜÕ̤Ëå<ŸÁU^j3M'Úû¢>!“¨™8ºŒ0€ºtºÑòLªlì*ô­N3m Í3øl<õ»Š.Ô:Y$¯sä€d“.º°¨D9’“Pbµ’qñ#Jýºîª•»A¸ÿĈͲQ±»VÅUƒb@£µ}é6™4Ùug®Ó¢¯+IèÞ=d©]q·ÔY½€¹}Ænî‘Àm`?6 3ùÚ€xý¤,ðºLHnÿYoƸúaŒþC\b,³ª-ÙzRÂÏ^æê&dÑð­ò† ‡V„Ú1p.Ãv¾ßVBE]ÉŸÀbd‹ˆïÆ]NY½ À“Dºíóåÿúÿ ¾ûkg'BÂìäh;;±S!kTøï¦Ú_,àv>C¹†VÜC1xh m¼®°zûÃã7uFªŒñ`6g+äÕÙ’xÙìî!¥x}=Ä$–õI³ DËï#Q^]D´-r;¼çžt¿À9^lßí…Pi{c!›á½h Ý£ÞµÞ­‰=µ “Úig:ö +N˜¶3‰#/ù|Û½å§ð ð½Sx"‰¢LK4­ ´ezú8*·xqŽ]qîŸyÔÅÀgbì=q|Ÿ ðï#ÕWw£±k#­‹Ôaø$ÏZ†±‡†W„œ­…ÜÉ×Ô¼{›á?BŽÒ?LìF?^ÏsmÓú–œPY‚PÆY+­^.Ÿ|¼ºI~QϪï¸å©)/ô éq{SŽÝN™Î:¯ê· ˆ¨Ç~–]å™ÎË£‚ÙkâM90–=-WùýËäftÞdæ-Ãh›ãv™nà'¥’ÛÎt¦kc¶;¬· •¿4†fõ`‹1å©Rcf–i‘â§A絪{IQ£¤m™&«u1Ç—+î¯àsÿúönÔy«ÓÓòÖòþV­ú$`;%D ¿y¨Ú„¾¨Õ|³^þ†duüÎ%‰Ûö¨Õ¦Ó„ó)Œ]Ä.vX8?ŠlÞ 0íQ’³ +endstream endobj 1910 0 obj <> endobj 1911 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1912 0 obj <>stream +hÞÔTKÓ0¾çWŒöd³Äõ+vÌž`·‹@ V%Àr‰ÓµéÊI ?ˆÉ8®¸qAˆöà‰çó¼ç°IÏß +Øt‰Q`y:7 8Ÿ4ɳ"YÜ +P4‰Àñ‡È-S¬âŒK( G+Œk§ ¨PàBCñ-ùHn–·±®×——p¨È™"ÇM(‡]»mïCSVž~*^¢'5z’L)H&ƒâ&IÑbôS ’Ì£íÁôÊ—µP¶5|´ø’8Æñ "RÈú€å÷òp¿÷]D-‹$Ós5,3À¤rÎÓ9çzÌÚHfͬÇr0©Ócµb±Ô Äjœkå† +9@¥Îç¤S(SøÙXšWe×M ³äÝ}]FI’Þ×£»x:ÒR–‘ öz…j;äxr‘ÑT(#ㇲÓ%^Ym¾¿Cm…㨩OUï©Í™ ~2ÙMþŽíä »6ô„Ç>HiìÜ­çL¸3ù Â9šæL—J.F1j˜!óùçÇ?‡þ¿ÆÏŸ±wÊ2;ÇçÞ©óŠi +ÿn¨O÷{Xí68®678ŒnmçMUœ·¯T*¼ô5"ÆÍœvËÊa· ²Í™ˆŠBŽüà˜3ã¦EÑÆ"!é&âr`">'‰¿†rvm߬I×#m„Çp±\­Þàýê ´Ç~i[vðÙ{\CÒ [¯Û‹5½š—A1Ž!a=£Ù¦Ú×ù5iŽ§~†mðý)Zi_=ìRÆM|Îc|äÇDG¿5'E +endstream endobj 1913 0 obj <> endobj 1914 0 obj <> endobj 1915 0 obj <>stream +hÞ¬XyXײŸvèndÚÆd†tƒ ^Å‚ ‹Š"("T4n `Üd‰KŒ1""h¢T"¨WcŒp_P1ú"\Pœ 2L‚!ŽâÆ­3Öxï;¹Iîû^¾÷ÏûàëÓ}¦Nu:¿ª_U3 +›N +†aœ"&„Lîš°(=!m~\¬u²'Ñ2¤» qqpF?\úzùëa¬ËâŠ.°Ìö8uqþD­èÄ0%c’’³Ræ0/Íõoq}]½|}†ô·^‡µ_}­W_O×ÑñIºר¬Ô´„ÄT×°ÅqI)ÉI)±i ñ]]G/ZäÚ®!Õ5%!5!%Îþn‹ëüT×X×´”Øø„ÄØ”…®Is]Ãç/NJËJNpâ»8~PRŠë|º6u©.u~üüØ”ù ©¬W(ú§°Q(l;)º*$…¢‡£ÂÛV1‚QŒÒ*æ+ +Å^…â€BE½AyÅRE‰¢ŽéÊ f¦0‹˜˜íLc'¶ÓìNJ'e¬ò¦òÍ'6ÏX5;†g‹8%÷—Çãjù`~1¿†?É?¶UÚN°]a[Õ¹sç%ŸÚÙÛÙ%Ú³{n/Û‡ØÇÚl¿Åþ;‡ñß:ü£Kt—#]«âUEª +qìïèXäX×Õ­ë²®µN2¾qúU­VOVoU7 öBŒ°»›o·k/ý‡¹× Ç5æ+’£$oÁ\ñ·åÛ‹+†ìo·ûa.Ê-ƹ,výÓC/nu8ÉÄÿ¾µÎ^o—§ßVoÑ*NíU–ù$6»µ©+^Æœ"…’ +BDE7ýÄ©ŸH3øú»+ë4Ozò*|é¯Ge07[”ð±y‰ˆ +=0Hƒo¢ÓKô”¾çüÁk¨ÀWkÎ?n„ÁÒë  EùãDPÀÀJèA˜N=ÁSŠä~D¯Ë¨B_ ®‰ñŠtkI:,ªa`K¶Àq!ÕÀ":ôÈQaŸÓÏÚ˜¦—Ê&ç +nƪi±ÙÒL¾8ÿápùÍjXþ3sr”pã9Öu¹í‹ ªî¶§ÛKëT^ºy]ó!T)á¬y©Æáú7ëØœ*SO*õLi œiQ’ð«ˆA3ÝÜÝg¶An{öì´I-Îà qΊDžèŽîGp!Ì‚YG`!¸Kª’t’] ê‡/©Ñ%Žå’Ÿ± +¹OlƒÁÇ’Ý«rH™^½÷©Ÿµuð™*–ç]ámí‹oƒ¢M^Ô<ÚÐaë›C[„á ¤AX¸mC¡Vx~åå*´ó öÂîË~º¾Nöä>ó+ñ»¯³Í:trå-„Ü%ð-Óφì’óxáײ‚ '~ÖüÃï>ºà„XzI®|ãæçà¤}õ÷±±ÞaÉ!²ðdù² –ËtÿPKfÐý7•¤ÄÚ^dF ÷,“Ø!pŒÀ{YÌÃ;˜NÝ^ Õzèk`ˆuX0y*ÂyƒEÁM±t©ÍfO<½ç¼¶éV´»÷¤@Ïáß>XMíE¯"°›ûH ɇaÄ}èD.|NzZb»®ê!HÏ”5Ãùf%É%…"ô\üI?-Ά)8pPÁãaòˆsu©µOï;V*Ÿ½°ó GÍwC<¦¿Ÿ°TÊÉcïî‡jÍœ°UÂýX!6œ©6spÈ„þ“ÆõšU¯ý¸Ÿ˜Rò¡²”ZNºs¨E/솛Rq²­‰;7`8¤U×ØÖY>ä­¶í®…ÅzuYKp3lhÛ"¼LdÙ)>ˆxŠž8|:†~ÿJš$¼8+zˆf~nÀIÒìKw?>¢¿;À[‘q¿ÿQY0ØñýgáÅa´øãõØþØidÚxT%=¼Tuºê)•X_+ŽSnA¸Ü¦nz)”ü‡ÂRhó{H¶Gw‡P÷ÿ=ÀÏ—p™®mëéÆ«\¯±†9Bò•ä8ш–ü@’Ï¡hÓq£J¥ L00ÛÌÝ”d $ˆ·1mã°Ð¬c±‡»ßèØVî$°_Dàá›Çµá-V•šÛ›ô°¤A}×÷Má&꙳£Aœ@@q,!Ô{RÒ@Çpý,ïŠp•£¿{7š¨ +GŸƒ3vÊÑ—]?£y2¶5ÞâLA„(*¦ÿ)ÃÝ?&Æ]Æ8Nu Ó@ê ÌÉV¥y(Y/‚à +àq‚Pp î‡Án0ì"$Àž£òý “®Å±ÁFÀ{¯ƒó­Wi¨Þ'«ÐdRÞÀÔ›ˆk«²ÞŽr°ªâaÄ!=p¢Œ'9“a¼Õà‰aæû7TËI•k€5H60“’X ¢%Öw –w ™Œ4XŠßèÈ>NåOý©ÿ·Œ½¯ øŠÊô2X>}£3qª¦Ì†9ép±Š ê³­$¡Y('oÃEÒ¸‘ËƇO“b§¼—ý£Þ‡~à‘m/@Ô¿Z‚N䆤cßZÔhq¥NÃ1ùèzÊ”^™ŽÚ'?Ÿ¼Y. Ëwd¯‘nx“zd4À¹ ¦ÎDì©é§‰¯h±‡sý¨1`$öh4™uý¬Ø*I7ë2˜fjw¤Y'ök7£2Ì=2˜¢fH5)‹`™ć–¢ ø› Ó).‘’~–}|pÊd¯P݃tŽ·Bʪ§–ê ›D`)½mD j¯QpN°¨áð>cá™õ54ËÌ¿-éx5‰µ&6ôÈ%Y;úáF-b'´A§¶gVÉÐg>+üvI‡SGiz¡]Vð ·2šÞ<¹Ð‚‰•ÑÒâo.ÄQ–¦nz÷ Œ.øÒÀ]²P‡±gØØ/æWj€yQTYÿh*7IÖÈ1;ø¤Üfv!ûƒÉìÙËíyÀ,g0zá)„ORŒX¦óèÙG÷îàþ'h¹DbúYRyÔ4`W˜ ÓÑò DæR0涒Á›y%ÛÄvÈl§©í¬™Ž¡Hû,4$™¯{)ÉBòH¤Xò±œ…Éx–‡ßCÝ£šx°‡Œf‘ãP‡OPOXd9Øc¡sÇiÌøçÈ ³›\U’Fš"8AN±-û‡Þn9Ëú‘«üÖq™™â ZÆ™×±aítsÛ\t›½\ЉV°A0ñu?œ4úÐé“K*”¤‚þtÎR1·–Ç ÚÜ`sn†ºê|ÌK¡T…¤†òÍîІ+6Kgx¿Ì´ˆ‘š¾/yÕòšjÒ·Fýmó¸zøÔ(BO¢~¶­²UÛp41zjÊ'é92öÎb…cèžµ²÷l×͈ÇÏ+Ζ’„Eqùq÷µÅ…ŸmÜ.ÿÀç|¼*çmÖª-»d¸ÈƒûÄ¢è3²%¸‡ãE’é߰Ň._¿Uxâ3 ˜m»6oÛj«Z^QIzè!4Cý_F8HS®°Üœ…òª<~ñ—¥1?iaìð'è38”åˆõSS¢ms`›7',£ã‰ ì…räg öˆ\ +rã6x‰êqùÅP™¦ÊåµôÌ×-V*m›×LmÅw´8zÍCÑ£ •Ðœ‡Î [ä¡œÿò˜Ù‘Zì²”?ÿrø%0wÄo•©©qédv»©‡›¡ÌHÙ!›âÝ·s9kدÓã¾ï¯Ey8rØ. ?Œ=eÇí29Ú9¦Ê-©¥7>\@؆ï EyðÜ(YMÀKT;ŒªO½úh 5k^_ðã×Mï£u¹ŒLÔL èñŸ¦Kyx¨xÇùúÉ=wóÿnKIDë¸WO œå·Inç2¥ÔzÆ`TÂv2E¬ñ®âoÛY¶uÛúõ[%=¿aÅÊ +µC¦}0\öxÇ2ÅH¦Ð¦$¹Þ¢Þûa<µ¬…zèþ×Û …  Š>œP?:‡ÿß|R}ú`énycÞR~B>í¢ú§ûå6,“¼éÑA—¯ja툼g­Á;|ÍT!ŸVá¡oïƒ~ÃfO]"åÀ—ÞotF(£ÁÝãwÏ ’ðW£5èÊâ à[Õ7ŒÝa)½-ÅFNð$ÿ¤ÕZ«w« ÎÕSòüO¡&.råÚ©RV—SX°¾@ ΧdÁÓü-]çÝÇhåÜÝ 3˜Ö.­^„0•E—â– úF×Óùšë0 ‹X`¹v{¬¹ãuû +\¨ÕVú´îÏêTº½dë7Šyçö õ0~s®ªhÊl ÿi„;|uyõÝ{»¦‘°Ùÿä¡Ûþ(¿yLŸ-}µ<ñòí€YI™ruù]^õ'½ùFáÔ~óšNÅ$*Vwׇ:ÊxáTû« {gzJxúnE-éUËPp_nV†í"jkÑŸ-¸´à†þè€n¨•š«÷ÒJN ê½è¼iå§^ÎÕ´‘ŽH‡èßPÓÖõ´‹þXìÍŽ¸ü#`¥a–HÑÛ󸹻O/¨þß?.21ݺ=“u{Ö|¸s«éþŸ˜ËÃíFn‰ÿÀëŸQlmÿ©ó"õÃ[ÔuF¡”6 —ÅÚ ?<6sykÖnX¥ ›©‹˜g5åV“Õ…|Gfé]«þ¦1¤2ƒŒíÄEìĽ+A‰½úOE~ÌÙ¹5YÒóJÉ÷2÷¯ˆÕ¼7)%»~týØ:i(ž¿6&qZ°û© +·Ž"³r±÷.6¤(ù‹šªº-û@Y½`ƒD£xM-qªahW +_XCx¸{£{Pàm|‡ïœÞ´åïó¿‘n-â³æå“á¾#¿ê2Ô7Cá d’ΤØÑÓXЕ“fï7HÐêmqàÑé—¹uO}SY*ÑJÈ °n0×DFf0›I¦6˜¬4íBF²½9ˆ²³´ê}Ÿ³ÖBlàF:ØeÐŽe¼^“¾”¥Û,}ÙfúSoÎÍ2ˆ²ro2ˆí˹·ß÷¡÷xPMÍÁ'Òáó f+IUÂ÷°K„`øÜZ` Ç.Þγcðsú´‹%GÑ7 œq 6V¸@?-Ýœ˜¡ÞJRènj·W¦ööá`ŠåÕ»våLmjÖ¦«d!ÙŸJ³·}‘]¨vKÌko@À¨„Û~V}¹5¤K s€ŒS’9dªxÇÒ7NòxÓâÄŽ%ãjð®õ£Íï´[Fi·ÒJ½Ç„@¸òWÔ+„¢oÛ_°2UÖñ‰kï˘ó•ÖÏ\ÑBÉÞ¿úÌ%¬_·¿øv:ó¹ÚK¦kÌŠZz&Ü¢y\I¸Ltƒ! ‘Ž´„‰Ç Œ‰˜t„x+ -C¬O…ТCh¤E àhÔ‚ÆI™(Ör´é{½ËÑê.šýasù¡ûCLY/ ý,¡×9ȱíÏüéò'‡NËŽ’­f=¼×X­zRKÂÿ_-"ãƒÄ¨Õ3ãõžQ÷þåÜí–k§?ˆ.opÏW ÿÎC‹.>}ñmìÞÔ\Ý»út§¬ÊÜiÖíÄÛ¡ßvvo…®ßt.䥒1YÝÿåйÖÎhO*º™CÄÿ`;kiô +endstream endobj 1916 0 obj <> endobj 1917 0 obj <> endobj 1918 0 obj <> endobj 1919 0 obj <>stream +hÞ|W XMÙÛߧÓÞ;ɉ³˜gWîºÐDT¦¡Œ;Émb**D©$—†RM*rEÊH5±k›cB Ê¥ÔH†iL>Ì»gÞóŒÿÚÅüÍ÷|Ï÷œž³ÎÞk­w­÷·~ïoýRQæf”J¥ê1mêx¿1ã}#c£—†D;û/_¢tyÉz•ÜÃ|£•™ÜËÊ&3þ´øó[Ú£zfÈ¡ìû}üºýwšÛ›¢ÒÿîÖ×íT¯n>ZÊL¥š¾Ð7råÚè¥aKVÙ \4ÈÎÕc¤‡ùöÚþíj7fqdpˆÝ̵1«BVÄØMŒX½22:hUÈb»1Ë—ÛµO±‹‰ ‰^M^þï-R*ò¡:STŠÒª©>4ålN¹™Q#ÔÔhŠòyN2¤Ì(55ŠšCÅS—TTª‹fnf1fF³¿Õ ê“êWæžæ©æ7hGºqc"™s¬=»˜]Í>´˜`q²SÏNáÊ,,c,s,ïwÝyYç;VöVK¬.wqê«Ñk5ùšŸ¬­Ó¬/Y?×häqª×ªî ÔY5XÈ:p Œš²ð`ómÊŽ 8–®;‡fg+=›ÉBW`¤5hT0F¨ahtcp}y hMš(ߌSÁW’îþi¦[Êà\×Aà^G›öâ8Avq«ŒÊ–´%8jœ+rÏnØp-rpœ±ážÁ°™>YXtîšíËá ØiâØ%/2|$±?ý’]Vñ(lˆÿªÀ°e,Ń´&^‚/EX%iå®ÆX#×´¼WWxʘS®çžÝ2ú}4#À‰Ž²\KÓí Qãý†ùÍÌ>2ŸèÈëgâ~Ô¿úµÌæý0öÏ=;´°üªmˈJç sV„Ï3­>eNT5H'©å˜©s‘}G1˜aò¤g@8!ºåäï³KÏ\±½5§í X"îDœ¶´RæOrU\¡¼A¾¬ã®®N‹ONÊHO1œø8ôËÉz´Äïc ºÿ†}`zmɲ |D 6oÚòôØǺ€-ø@§-/îÌEómüÙ,šÛ¿édÊWÇl 2s2Š,äPQ]%xR©†®¢ÎS€S Œ«{3Q݈xü^hTÆ\ÎA8£°_ÜTõïBb/—øSE`÷g’·ÈZÝY&&Цxá¡)ÔM`¸¿ä$˜ø “„ïÑx¤î5F„a zé4Aù£©ÞFSgGD|ïߣÉÐ]Ø“þW|†àž"œê€® R¶‘‚Nr¡Òt8a6.`Vü =ºOƒž@Ä?jŸòÜ#ÐTùõë@æÚ»ÈpµóÉ«Gÿ†Ü_]ß|"Ï=n®ÉÉÿ‡*Dö-˜ƒ$*H±ÈuX(<7…öäMÌH£ç1Ÿ¢@ã7r(´ÓIÞ(ÁÏ„…_Ê»uõ"z2hƒÍhÍ4z +õ¦PoÖ‹}åÐí 8™,èlÒÈôvSh_¥Ã›Ñl¸8_‰£ýE‚‰[Ó¨VĘ1ÜÓ’T–¬÷£„û ·Æê.Àç"šÉa„¦g Ât„®'؉ò碪¬Rî[©–P¤ç¡Ð=Ñs(öGgt~ŒýÁ<Cp6˜æÛwº‚8\ ˆpÈù“ÆüÉKNa|(BÁÂC‚¢*5xM™B‡ P"â`ø ,ÌÚvg—C7ÃãQÞ6``ªî-°n ÚòhÓ·E"„‘8 +ŒjЈºĉC`Ñ̳ÅØݬÄaL쉥Ðch¹E:{7ë¦ñWÛü Àb?^šêz2¯¶•8{ñØS!ËÊÕr©”—§}P²Ê—_S. Ôë× ”‘;œÀ-N¸ïëv„g…/³NŽJŽ6ˆ[hîHBaÆŽ½»õÛ$¦lãcK+KôO>æ C«=Î;x.—òÝîžÓl[WæîÙkŸ.?`Ø•¹$=¢"£'·ƒÚ|›æ²Rïþz× îó„E„d‡¢S6­OÐ'­Ý±…Ï Ü¨Ç¾ûM@W˜•t$•¯Mº›ü¾mT¢Ž4-ô_úh#ÿ†>Û¦†$P0Q‚‰í¿º”ËùL™u¸¡|Ë^˜Iƒ)» +pNÄ®„}>Ì^œY¾Öl(’Em2D`„ü# ‚«!Â]LŽë#„g N1%ÒI N•éçÊ«+ |bÊ¥ï1ÊÜ÷ŠnˆªðƒxðSËÉ´Rý„ߘi³T²íK“yšBBü®tŸfîu ˜‘nBl3Ò]÷¦´‡a% +¤ÆH»’«ÿ†D½ÌÀHŒ ¹Ÿqn¥g÷¢îîN;(Ï3œ[i®žð4‚¾$¢@D 8 0•n$Ïo+.I:‚Z¾­”¨ Ô1è„YèYt2¯šI(‘’y‹Œba +HôuFƒÝ*Tir«»™Ë­¦V†\Wa"LµßUB•ÄÅËKáºîpâ ô;eMŒ¿!{>}èÌåƒWôW/ÇúòKÙÌ ×Ázodç9ð\¹{ÃìææÚo¿=càâ½Á^teÚt\¹ðsFë§Ï*:›wð¸äVoJ*ã;{"½¦’”SwO ´ÀH𪒋ß/WëZ³hS>)ð^,WÞ”Îú¾rW–Ï@`;¨µ£&‡~̧Â1hy«ÉYçâí5`GÓÓ¶¦[Ï_T¶7(ðRRœöZ%´•põòRyª.2ysb’>9ekú>wޢݟèÑ +-Gàì –nÀÕ7œ”®ðѧèé ãÉÕÄMn©`vçvøˆ,þì6š;³éTjNÊa‹#éG¶åþ›ËgJ.$—3•ðJÁOku¸:•ý.xrñ(=j &‚À•£Å3Tåگϟ6¤3\¼ôÝå£ã· 40ÿÔ½ª®{ñ¼Éwà‘ƒxßmiÏÇ]„¾’êÚ™2ªå£Otáã|WNÖ÷q9ÿÇ^ÆlÍÞºç íõID<Ñ5yiÜÀúañ¢›Ó‡0W÷óÞÚóOõ­÷\”âƒ&œ¤ qZˆ–ˆGÉ“5:ˆ "17v<=]‘´¹ØÀÕçJ4×’é7~çJru¬˜5š÷AJ +›H#w!ÃY ºJÀJpS “%®UŽ%Ñî‹ØëýT†k¼¾|\ñ=Z B ·ùÍ,oUžª(áÓG1}§¬þpܼ‡| çÒñ[Öõ0´àÁ=Þd +tënÿÒRííì6vìßmí¬¾Y|DEÀ$ºJŒ¥¨#´‰Ý!‹9[y±´Jïà|cÜ•Ò»Øbn¡åøIK‚fàKȳMx’E¿ÁA V*8Jât•½ÉeëHÒ› È."Ž—5,¨ÍÁjZµg*¯y3%õïíƒ÷âvÖ–aØ;0hûŽ`ÃgýYEÙ&I®ùmõ¼ìøÎüöÅ^S;Þì^ }$bp–¡'r²|š„Ãe‚D´ +yZ¶U6™!(%‘§”Lf/–Ñıùà8:@€@q8ƒ°˜ædú±"¯Í:¿ábG>G Myÿ$ÓδLáMÚ伪%®üuïÅ5Ê%@LZùÓ)Çg/ Z¶ÒP²nqA°>84jÅžk,%br›|˜+úú„Böx^ѱ|ý¹CË]x¦?ÿ¥àÏc1ÐâTöŸÅ@­WŸ§àv›:NL¹Å³ØÿçÐFOZ2ïBŶ£°U—+áorÍŸ€P @ËfªwKÙŠ|,Boƒi„ t®«zõªnvFÕèIöö£¯‚Ê@ÎQü•FeO¿¶‹OëN…¯¦õdá¯Et†™é̬ӵAwÞjIÿù™l ¤n­C"Rò§¸âÿ wè„V" Þ:®qô¿5á]AàÓq&:+p'áåõ÷EÖ¤Dçßתh›^F|«¿‡*¸ššv2ZæêÙJÄVe¡ËùÜb}þ‘ «2ùŠí´1)8wÞk‚¼x®(‚©¸jµÊXœX¥ÿ¬ [AtÖ„ žËwʶë¦í··ó¾¿ýh•Ï¶v |" +0Y ®¹â‹ÁU¾ ãjPÿ‘p3Yû†°·ë¾Ê¿dH*§ö™›¸Pï’÷?<,…}"îcÉ=Û!ØM¢ö¥‡‰ÕÌQ kÆ‚SÿëÂï׫Š¿9jàÖLle öî“ÜÊ +Á³æO× ++»ÄC «IüÚDí®vËQßa9`¢îCTt‚Ü“®U\Æc‡cÌà0h£)¯n1šD ÖÔžUÉä¿š/ÀG u5Ì]8N\Ä]¢S78Oû3nxžüv„Gô}¥³„é €6à4˜Kdd.i÷1:â3Æ¢/í+Àq} /8`_z²ò<†AðU|ÆBË>W¨dˆûµFk°¦¿Wž‰¡& –׋ª, ÑŠ5Ê'rYñ>Õ ~„U8ªhQı$+ðÇ¿Æ ŽFªˆ“íØ™ +ÌDEu[±.Tîza±Ð¿Ó…¦^ØSl†V³ö€|ñºìÏ}Yi lÞÙœeJJc 9¾k{¼¶ê$YJåÖîÿ`7³* +endstream endobj 1920 0 obj <> endobj 1921 0 obj <> endobj 1922 0 obj <>stream +hÞ„X TG·žaènDqšF3cºÝ7܈Š‚†7TD1Š0€¸€,‚F‚E@ÜjDT$jC'cÐàÅ‚ŠKL4Ä—D½mîü¿zÐÄœóÎ{NwWuÕ­{oÝïë¯F«±µÑhµÚöS&›2u¬‹OÔ²˜ˆÐµ«‡bÒ*m•ÎÎQ˜õÒîåqêm&Ûk{˜Ú¡¬³óƒÆF«:Ó'j銘ˆðq]úÌïÛÅÕ}„{rul½ºvñú(*$´Ëô±q¡Kb»Lˆœ³4*&8.ô£]¼/îbÛ%&464&žt¾öA£%[ÆN§ig§é¤Ñt3jFk4Þ5M‚F3‰¸®±Ñè4›4Åš&­^;N¬ÕæhK´ÏmL6a6§mZt=u º›¶m×Ù6RµºB=§GÑëèãt 3†ÉenØ­¶»Ù&¿Í=ûžöÁöemÙ¶´]Û¶¨m¥Cw‡t‡Çífµ;Ðî…>D_®¿Ó¾KûäöÅŽƒ¿ìЦÃâG ¢!ßpŸíÊ.aÏ91N®N©N;œ~ç:r^z=L“ “dhÑOÖH--MÖë r½õ¯{™½ªqÛ!†[‰f/£ (öÌS©½¢)‘NÂhªËÏh#’ ¥W#øs/ñ鎡$ZµòÂúÌ^®ôâ^XGt¡õÊé-DÀp”+§9/L¢NÑÏ ‰Ò¿´!/v×êãKnÒ tA½õ§Ðåì ¾šö] 8‚³œ«Áñ;Ðñ­3 +ju†îì/§ÀôFÐûƒË¤_ø@ú;ÔU£#:Ñ9ýÌPþLжh’5't`§ÌâÀ%¤ê+Ýç»è\y èÁ¥â㯱÷Œp¥fÐ9芽͔m!I T·sAÿ¦Û°Ò¬ýCáu@7CáÍŒ>µ°ºéæW^¸`AxlhèáØC‡–¯Û¯;À:eÂË6žÿϘ²x8ÿr ¥O””2IûÜ %fÝs8Åa‡Bœ žàY3Ɍр£pT4`Þì|;ŒØí8v°ë*œˆNè´ +&Þãõë%å2YäKY7H2#h tÝ n ”eŽ Ç2ê¨<Ùp_†}æ@‰}rÉ™mVºC7q–ÐìØk¨Ã%¿þÞølØ5l3aÌ‚™óù÷eæÇ_ò*«ï…ò +_Èc~A<—á3 âdƒâh^ff›Rvp%eæü*ûäŠ9Èïýi³ú â>†m¾u5Ø}Ô8¿¡~ÓóŠæ "uáXÂuÓó_ëÀöÚìscv ì““ûJªÎ›‡× ÿÁ’E³Õ€H ++i¯É ë”t˜Î T|Fјeñ ¦AqäE8$ |ÐÌX‰ƒe +KeZXZŸ¯|+ioJpJÒÝTþäÐ$Ý…S Š–o©¦)2õš 8"² C•ûa$ˆ0žƒÚ¬–ö³^"„IÓi W¶R#BOgZ¨B¥î4Ô’±ø 4¡²iÕb”¢d€Ž2”›W˜ÙgÐQↈpýÅ ×ïLÿÊós!“a•oó*Ž5^ùà"vá±\ü‰–lW0iÑT¿¹cLcž-DAW†}V .é¨E Úo!èWÈJš”˜p(ÁPQ£‡ÙZ¶DIRÎpìùøŒ„Ä´Ô¬ÌtþÐÌ°Ï|Mh}ÞÁ tû »ÃÔúk‡*O ‘åTøì)‹ß5awOhFð†6—šÿü!m7 +'r(öóÕ‡Ó¿Üo,ÎÎÏ:h-ª0I Ž2<¨Ñ£ÄyˆPFÃØ‹ÐúÂtÔ5a¿›Ô†Òg¡m0úb4öL˜, éÍ”t•a¤ôcuP5ûkQÖ*îã)K¢ø“%la”¿”T˜ð!ŠoQxŠ„>ÒK‚Y¢ŽòÒUÿXÓ¾¶¦ûÆŠ$|ëߣÉÐ-dûþeŸ&y ÊZSW\£8ËÁ‡ÙûÐë9úcG&aV@â4ºMN@Áøõöèkýz¶fæû73ÃÖÏ!]÷þr¡žR>A`ïß®Ëß{N€w«%æ ÷µ2”œj%ÎS„`É“ø_‚Q­ÏJX£„Áb#ŠXbë3ýz#öɺ߃Š0ΆãD¥?µc‰uRË$m‹¦—JîÚ~ɲ€¯uì\üŽÁ61Ózõ˜ôµ9_zj6½#©Åu×—|o‚;¾-áC«“Ö… 2øÀ‡:%EÙÊ–ðC²Ã¸³)ÈþI„Ö-ƒi a®Þ[ròf¿UâALõ£C~^p]öð¸½`o™ã ì)ò©êÝN‘"`‘õ'·nØÍŸt²*à= Ö“\¸Ëp|¾Ü‰S–°a"”KØÞž€mÐ¥øÄbè€^îixÛxºöæâÁ³>öB£€Î´y)õø)>^© VïØCÊ®‰ÜªÄ˜¤hSllîÖ¥¹5:jK¸iåÇé©«…ÌÖÜ;¶~f·.'g]® †X=þw4;7»Öa[h»péâÈEáqu*:ºÿ³*SIQJr‘ÀJÙS”|Àtpÿ¶‚ƒ‚e†âÄý¿ñΗ œÄ«—¡Ø¬½Ä W+fÌA?™[ê^Nvà ¥—Š€Žƒ«ì2™9—Í¿÷&ƒ=y<#ÞVYŃ~¾éÝØè”ØYÀN*Ž—’à唄½ †»åqf8Ó¢˜¬ii¹–¬1³ÉìGÉWà.wQ΢…Ƙ´è´^ZK±EÉ%Y¹;¶š6íJIß(,«¨I)7=ê$؇Ûä +l¡Æg“[þmcCã±'¾ÿdñ.~gtö‚ÌÈê¬Nl®fÍUŠÍIÎ(ØztË!;v]ò|‚ÿ‚ä˜ôÕ+“M©+¶f­òBƒ¶™°Ç„žãÑR‹2„úÔiï£S†àž¸Ðs\ŽU«2ou[3(Yd˜`}r¡TXVÑcRÕÚ0ouG¾–Б Ä›ÞÓ«6R¯ðN¾äu+sa‡L„'ÙLjF`x8úTÅi=^g°óÍ÷UÉpótæáz½Úÿ”Ñ'TR$CDb¤ò #!’­#Z ””å9 #Å'4N²¤P©4NVR¨§j×Y>´R7iuî[/IÚtðƒDðÓ)§É´ + ýÄßè)­³´ÊHʇÜ,#Ik1ñ»úúý±Ð@ƒ yMlC^7¼Â½¡–¢H蛑ܗ²_«ghA¨Šý§ájé—ºÑà‹À QÝÔö4§ÁŠm$xŒ¤¾“PTÙŠÇÉÈÃdª‰´_3K!ˆ²ü5ˆ:åªJE¢Ø@cÌÁþC5¨ó.Ò0eB ¯3£˜2uᵉf ®Iºfuº¿D¾‚ þf™OÍRFCˆˆï`•ÔqF饞`7ÙŸ)~ê_ê +Ðë?‘àE€Ü¡Z»^y¨Ã¶ÊÃjËCšè©p &JÀH†oj Vf•¸À¤ü‰c&-õçóæP»ùâ¬éü™e>B“ìº9Ää‰Ììn[åvmÆíÛõÇãÙDOè*¹2³ql•È»Œ6M 8xbÏwa`áÅÕ©•BëbäMªZƒnÉÐ2<¯a?W.rs(Ë^B‹¶êV&ãwäRè Ø?-رïC4Œò ›"dÀ~]’)eƒe7Ðsdï¾î·?ºuåéŸGwåU…øBNM0|_ÊÙF%B™ÌE¥­II5¥¥oÈ\+Ξ¿õC: ýpìoƒý`¯–Ï +1eÔT÷y‰Dð¾ÍuÀþxl~¸ºhxŽpb#Å[]–‘Ÿ^`W”Y´±ÿ'–OÕXÜI,Çj๚?Q©ç0>ƒù&Ä·t” }ûe«Ðî jÁþ‡ú£'ð™4›è%7åƒ1‰›DŠ ˜Š/¹çþ|z˧Oo÷}{{Þh¶Æã&AYûý)EcÖ)ûp‹Æú,õ5uxòÅZAJoÈÛ°í ã…‰„Ã=°=ê[ãÒö?]Ûð2oy¹ŸwÔŸ|lzxsÖ@• +à–ýå¤ÄÈDîQôD¸Éô¥ÜâÇGªS×”òlc¡L±ÍÙ~ã6/%cIÀhÁ5"hð¹)íÈpRo®202\–Âe5M2ûPYF¬Ý‘°ó;4ÛtañØÒñ&´ë=ˆ¤Üù7W°¿RSV].dŽ¢{LŠoììÍ»½ùUTâéæÍ&\|÷¦`iK¸Ÿ®þÒ|ÑsÀ1c ô¹ôÈJïjÂר ž¬!É$,O‡½Ä‘²‰–Ü ‡>Qsº¢Ötó‹9Þƺ©@[˜s±WÐ~ÜÄÁ3xØÅâÙ(>È¡^åAVŽŠ'..$¼ñ¢2PÂqŠž-8ŒBk¤ÊòW£QÖýn¼0k‡âÛAÁ›rCøOEêÓêÊÕ² \÷>j—7æ[kÑä¾òÞÝe¢„¢±Šr„˜Ã…¢L˜J1ªNf‰*$ö¨_æt%9€7Ž¥f‰$ £1>¢X†iu_eŠ›¶¯j±5ž}¤-{þÆZiÙâ«°É~]”a˜úïÔ™mRʨùªÇ“̘¼ |)_þñGÅ!¦°è%˶©‚PÓU¼å-B äMð %Ì=÷ï5}½{ñ@¿ üá »™Ã…‡K÷›N~&ú X +”4™ù{1Щ›Å6îQóvoµî˜ª}r˜ÿcÓFO\0ûCRŠuL+°µgjàˆ8:aôFûÛ¤ªÞ„²ù³ÿ Þæ-ámCíóç S°-jGOìÚuôyÐòd¥_ÉÉBõéW+ù<ܬ֫e%Yø¨„`z&p¤>ø‡×ÜCÂÿ›~>áIQ?l@BRMÊ'¸ä! 7h¥„‡„<9¶iô¿9áMB2q:Pp#æ••w$Æ¢Zg›Þ$ž}¨rÂ+/$vW³uuÖbt •Ë‰Šƒ„³ DÍ,íN–šö%Åe Õ›(sjHá\ÓÈñsß)°u !9•ââ•>RZ‚áçòEf¨*1³{Ø­Ê0skö¬Ý»Ç˜—•—ý9Ïî—MÅd¤¦Ù±*;;EØ97:W4ù íÂ!¨‡~)µëvÿ½ŒÚO§'õ_î7rhqãj~6‘@9Q™K£ŒË2â×Äóìþª4j_fζͦìYB´¹4¥ÖtÚ—<R9ã³voÿì¡[._ÝóíÕ{qÞ­ø@Á×®2 ¥àªœâØ:4½/^Âl¦ëµð»W¾ÜûŸZEÍë˜2Ï42tÏDÀN w2d‚‰i%ì[’á™ D ç«)»é$O½.ˆ¿_¨-ýjÏ.Ÿ`%e=vï7¸CæL5 +¯üN€rFŸrI†-VÓØ*`àóî +MXt¼Ò‰ªW5Ë}‡á#*Æ¡ðˆº§v]¡õ)2,¯?$iÓÈñw;xë O +WG߀D“ÜÀT ¶Ä‘æÞäŒà‚÷¨ zœ¤üé!x’<»À=êŽú²œn-C9eM@B#ä>—h‘|ˆåˆjƒ>”9ƒIiè= ö |Õ¶Þ࣪–A0ˆ"@±†&ú­=¶‡öÔ·j›CH++%mŒUhí%9£*©‹4¾µ8 j)IÂ1$*ðÇ¿¼£Ð]„Z¢«[=Ó‚’¤{TÊ…)½À$Ń Ü‚ß©Kgì$݆|«T¹ äWjeÂK©€Ðaöaƒæ¥ñ¡ÌWi• FÒ1ìd(P¼ÄxeåŸ3p<®(¤€¯(((:®6ÏUæ×gìeý•øŠü0‹“ÿJœE¿¹Žzþ®\æê3*ã}Äs +b*âø¸¸˜9jÓ7(Þ+ƒ"ÑË~ S]™÷U6_ÆÌËÊ«6’ŽÊâõÐIëÉ׳;4±AJW"ÌÞ¡ÙügÖëp5$‘fkã‘Ø 8ýjdëÏz°Ù:²µ¡_±K9½ î9ëiX³ùvŽ%u=Ãçû¬èØâÐF¶—Û*þ+À˜”rì +endstream endobj 1923 0 obj <> endobj 1924 0 obj <> endobj 1925 0 obj <>stream +hÞtU XTU¿—˽tcnw,ïT$^‹ +ˆ"¢²"R¸<,cg`Lˆ— Ðâ£ÕD@° AÀ-Y[µÅ ÒOJÜuË’L +¥Yt˜¢Üè#WØÿÏ{fp·o_ßÌwîyüÏïÿû?M¹ºP4M?š°~MBblÀZCŽÉP”•¡ Ú ÏÉÚVlp.CÍqÝ©pA^ +5^†‹ï•ß c¥Vú~µÔJyû¤ÜwΫ¼WÞ'³àølè÷èðš¹HE¹ÐtÃɘü‚2cÖs[‹´eøiE„/ tŒaÎ1Â1F„h£3óõmRYa‘!·P——‘o,È7êŠ ™kµÑ99Z'B¡Öh(4Md÷_TµY…Z¶È¨Ë4äêŒÏkó·hã³òò‹Ê + Úè5Z]^fp¾Q›Eîë ³2³tÆ,Cáãÿm*E“åFQ +ššMSŠZÀPþDQÁµˆ¢B)j E…ÑÔ +ŠZéF­w¥’x*€8r¡êqê)ÊHí¦ŽP]ôLz-O¤Ûè‹ô.A.õ..ff>Æ\r]èšãz•õguì—ÜÃ\8—Àä¾æƒù*¾ËÍßíi·f·?¸sî«Ý)•veÀ«Þ“ªî»©‰Bk7B¢‚ê沪6¤ì–žáÍG_ôü~>¯,j5AN u} ÔÁ;"Î] ¹8§rÈ6&ÃJN‰}Ïÿ0IÜeFÔÝÜ3»ÒtÒf¾¥öf3x91ª‡4ItÌ÷¾Ë)kL¶}%ô ÐÃÀ[±Ç᪩}ì5ŽHÂåIÕÈ]¡õ'iáWè°ëƒ‹À—ZÙB¿7ÎØ–¢*Û€Çë5Ø€U8oÃ'a±7„]‚‚x½Câpd6¦sã5xõPÃÏáɉï@}}¢«ÚdW=Œº†ióÒŽ3f5tp°«2a d`æá 2~ !ŽƒG†CpŽ‹x «dœÈ)?ª¶À Xh˃ìÑ {Ð\‹}. ',ö–)=j㔈‡þ)ë`H„ ž 2 ,ö—¦ôcœ²ÕdӗУä8Ѧý{©Õ›¢„ ›ÑÓ›Hg±STƒ„@¢n#Õmu$Vr£AóSúÛh°†C´}Ú¦"< ?CÍ0!ߌ¶Ù"¤q_~œâŸøübÿ’ w!—·H ~TÆND[3œ†}Ã*ëÜûÙ¸0ëáŠ;9[ÃêÄ‚ZL7¦Ë0³™Ë=²·©ªã%P?R1®MÄM˜8ßvéíIOÄ3:ñ ßr Úf»Â^î‚ù7˜ñ^Q¶JÆÅN7Ù16…SŠ1›*,ö/®žD¨„n±ñ X'Öêb1ÅAÓ”žýùØô,¦ ݯ«Áé`6Ý|oƒžG߈5„Û¿aïpð$ÒrØÓnf Âdf½ÉgzåIVó8Ø@àîçc÷éjÔÍ nì!¾oïNã•©å}kz‘_Ÿê÷£¿0ÃKV¡S8 ó%v¼Òxe\3Ü‘»1ŸÛT)cŸ2VèÄ Ëvø¤{.ú,á»;ÝÚÏHBNFmCÆŸ5-‡_9Ð$_å+_ÜU¹[S¶«î˜ —xðÄ :,†oÂôãu¢Ð™—wæò§×¿ûŠtã±WëÝ“„+hÞ¬-QýÉ +§G….¡¼ÕBWO Ÿ÷Z{êWX}"Á|—‡e9¡*ÅhØèV ¡œP>¥ç‘+4‹BæŸ]´¸ä[0‰àxÄâZY©- *è7I‚mƒqqtOÊ8ž«ÁÑ?Ç"^ŠF0¾ô¸×ÉK¹ÈòÔôD žU Ì×ß¾uèoëbëeÕ JwR}kÎZ….TAÒ97q•{Ø7Mj°¼sØ{\Ä‘°úƒš??+מ1üÐew'L¯¼@hÄs—byñ–¤€gG€—ð°¢B†T·¡Ã6*L 3÷mZ®Y˜ú Ð2Rq°>8àßÉKºy¦¥ùuùÓ÷^¿Qû†›}&È¢ùj¿Y&þ~fŲ—eR—(¹TC´ÅÊ@JûB{øwž­o¬ªª—†øýÛwìß¡Y’öÜryQÌÊ/ìÉV”L2ôÁ#Ä}W×b£pÚ*˜aÎÿ7C#á8,†s‚9º’ÿ_>é=ºý¸| ¦˜__‹•8д¬zø×R( í˜õÂÇØ»û‰»[8›î±B­•A;‰àçszYXzJ¶Qª„×B§ôV8KºÙw¾¸Ù²y•„ÿjåɃ@n¶”?®ºfÁ¨E µ·X9!ýHzïx¨ï´Œ£O]#ÎvÄ ‘Š39t:,%* ÿ‡½H"ªJæYO½ßs$9]Â?Zá ¾·«÷Fÿ±M1µÂ<øzŸLZ¶õ¹MéÒoËs/i‚žMÈ/•+‰n„óÓÆ<®µ +ç~2fÑ&"'¹Áá„%œå…sN]–›C$ÜO JÝ>€ Ð$ç.2oA“ˆ5Ø›ÔDäxƒ4Qà#qdöÆiTÝ{‚¼*PÀêØØmXM^Õ6P÷’à &Øø šÓåf†yð¢8]2ÓõòS!IaöDÑ +M5Ü–ãç³{ÿ£3sM Çâ6bbâÐòÛªA«ÐpY¸xõ/ÒéQ®fÏÞý»4q›õ [â×G†òΪôPºµæ”ÞZeú„A”„fˆ'v€„7,LÁ|Ì…-}eÒ#+|Õ_zr»ÎóɧŒñø¡Ÿvî“–rñµMX˜ñUPŸ:0Ý& ƒ¡ÇØ5G +½ëÙ3X×LÃÆìý’rÏòè£o‘xr$, Å W­üÏÇÝ4R÷ÆÚSÒõ¾lku§ ßò:“¾Dõ™*IÈ„R´]ZBq'‰PT¶fžJ?i‘`<Ô®à±Ç·[ož;u¥]ª©d…Ò(b^õz¢„~•2°ÌÑç½Ð¬Iöö6O£6`ú t…k&˜QB7ÚÖ1pù‘>?i÷cG9$B¡œ·=˜ôuÌúq s_2à €@rJ-yß5ÁÁº2ð!!:< ÇãYÏb–ƒ|¬Ž±Àp$?Ò@ÓXp%÷qöPšÉ–[¢ªGF¼—teB×—ƒdû¤Û»c³¦°ìå»d¡ ’Ú+UÖ[×[‡åkõD](7NYzÔ¦?Š³›À¿‰ƒãõðÐ)÷üÔS6ç¾Â}`†u&üîatWü‡øØpi +endstream endobj 1926 0 obj <> endobj 1927 0 obj <>stream +hÞTP±ŠÃ0 Ýý{tp(]B ô(d¸»Ò´·»¶’34²Qœ!_;M{tÐ=éñž$÷õgM6€<²Ó h-ÆÁ¬®ØY‚¼cuXºu¯<È(n¦!`_Së ,…<Åáx‚Õa»Î>@þ°A¶ÔÁêœ_~#ÑŒÞß°G +AUÁVÈý—òߪGIöÏ'PÌ}¾;ƒƒWYQ‡PfEõ$ó>{*®­þS,›Åf—U"î.lR¥S^ôȳÍ÷Î’¹%|½Ä;Ÿ¼R‰»ŒÌhf +endstream endobj 1928 0 obj <> endobj 1929 0 obj <>stream +hÞbd`ab`ddñóu÷wr׎J,HsÉÌKOJ,)‰«üaü!ÎòC–G¬ë·ò¯ÌŸ'XeÒ"x¿Ïàÿ>WàûBÁ)ß +1032²¬Ù‘hnìœ_PY”™žQ¢ ‘¬©`hiaª"ÍÁ¤˜´TpLÉOJU®,.IÍ-VðÌKÎ/*È/J,IMÑSPpÌÉQ›P¬P”ZœZTõ qV¹Kæ0…Ìb…D |z&ÐŒ¢Ô…’¢Ä”ÔÜÄ¢l…ü4 ‰@Á¼Ä’Ìü¼Ä…Ê‚Ô´ÄäTg¨5@a=_#c;“BØ#ìrßWñÑÏÞîÍ?~lf\÷Óùg–ØO¿î=Øùjgþô˜ñû÷ 6€ÏÐn2 +endstream endobj 1930 0 obj <> endobj 1931 0 obj [/Indexed/DeviceRGB 255 462 0 R] endobj 1932 0 obj <> endobj 1933 0 obj <> endobj 1934 0 obj <>stream +hÞ¬zy`TEòU¿7G&×d2ä$d&“‹LB¸B É„$\  á@„kE¨¨uñ(¨+ ðSÖkUD&5 +®ìz¬¬7î®îÝÕ¬º¢ßݯ$ïûéž™P¿úÇ÷Uª»_ŸÕUÕÕUoBLDÑÔJÕ\2µphlþÌ;Qó°¡qù¼ãþ41žèËf"þeãê•®'bšœ(ûˆ,®X´¼Ý1b(‘õe"ÓŸ-»f¡žå}‹hè‡Dm¿mnš·àíOÍK‰¾E;hF…í)±1;ñžÙ¼|åÕ»âÄûQ¢ä…Ë.oœgþmÞ¢çÆG—Ï»zEÜDK!Æ?†þ®_Ì[ÞT•þ×Z¢EéÛW\Þ²tãùêsÙ¾âʦ‡vnJ'ÊÍ'²µ“Ðñf2‘ÕtŸi¨N æÚ=È>q\Š^£.ÎЩç&cƒ±ÝØA1tFKë~Ñb,ǨiÔ@«è:PÐJ÷Ó1®cÄaã6ÐTÖѳôöê¤7ƒ.Eï_Ò6ÚOÏÓëô':Å̱œË­ü6¿c¢î£=G‰Æ|ãrª¢‹©†ZÑšÆY\.fj3µÝÚ{ÝŸô|h Àܵ´š®¦kim¦]ôý™ÞgMØD­˜¦í¦TC3i>¸y7hzœ^¡låá\Â~¾™Ÿ«u­û(tG§~ààÅý;i;xúí¡£ô½‰9¿O5Nf/OãÙ|=¯ç;øWü?ÉOñgPœ?išvƒþ{ý³žã†Í¸Ïxë¦RèÆ@Hf$]y£`yœÏeü–ðŠ|õ¨îžžaÆxcñ;ã=òPúŽ¡Jìy2ÍÕ×ÐMt~±Çèô)ý¸¤±à…‹=|)OåU b7ÁÝ"ò)–‰ñŽæÕŽé3ô§º÷õôëéèù¢Ç0vãEã5%ßX§˜C+¨EIìi¬ó;:I§o°†™ÓAë®Æ~·aþ|êdkÅ“ÂÐÆh›µWôd}[ÏÅ=Ë{¶õì5†“¡[NX2 ”@›¦Q=æ¾Ü|ˆž€döB{ŽÓ?9‰ð`žÈÓ¹Ž¸™/ç|_Ë׫ó>>ÈÇù}þ§Ð…YôŸ¼¢QÜ(îûÄQq\œÔH›ªÕiWh×jwkû´7´¿év=_¬OÖôkô5&2iæëkgÏ.ïžß}_÷‹=ƒz*{–ölèy¡çxÏÇF¤qØ8Ef ëih¼û¿™î  O€Æè4}™ÿ ¼Ð8‚S@qº’[èž Êgp=/4óð¿•wqâ#ü¿Âà·øþB0¨S0M,Äî»D@üðø–­åkCµaZ©Ö€Ýܢ݊ýlÕ>ÐNéBï§ѧêëô—Lšii‹i»é¨éeÓ?Ìvó¬8gAðh¯‰ôRmí¤¡iÿo _/¾ã߈4~«¥i5Z¨£IðAhùrrZ¶›Ýf·p’ÝÒ ç÷Šm†ž­EÑJœ73ÅÍ¢åCô˜M[­;Å\m»~—^ÊïÑ:¬I"š¿¥r*çRÈîmº*Ðöè”3š¬ÚYÓrmÜ¢Ÿ6 ·>†…ö*Ïä.® àÖhqyðnç.äqÿ ÍßÏ3h¤þ¡¶QLï£nÝÍ/`i™8ÈB.#q¯äÞ¡ ¡µ|¸1Š–ˆ_Q†X!2 ÏÓèk¾‘ûáä~ÙdŠ…¤kÑ¢‘Þõúìƒx-ôt9mà6Êçn>B¯‰;i7iÏŸMîÎ|¶‹Ûµ ÔÎßé¯è¯3½n†õðCC‚˜†“éÖ²¡5#É$ò¡ÿs`/¢8ñ _'–ÑbÞ¦ýåt 5i-boéùF/׆c`M*Ì£¬dò™Òôáøi*…6.ÂÓ¬Ÿ0Ý(ËÚÛÚ£Þp÷Ì5Åô|@kÀ °np–&Ð_8/ã)º!ªuØN»Äý#‘£ØMo8a=O³3 _aDòhøeæÇ»ïÕ7èëõUúu¸›¾ƒÕ¼™î¢ûè·¸Mƽ•>^nΆíYŒ;b0 ¥"ì®”ÆÂ*MD[ M‡=m€•\H¿ +`yÿ=Ií¸¡ªÁË0n!-A} n¨ki-Îÿ-´6` =JoŠ'Äš[Ü*~'V‹Åôú‹ö’æçéôŽ~›¾Ž¦R&Máx¬\ )¥cÜFãm¬6Raý‡ã”BïÏŒãÆcݯc¾GAû]æ±ô™¹‚réþVOa“¿¼Ö_V:Æ7ºdÔÈâ¢áÆ\8¨ ß›707';+Ó“áv¥H럚’œ”˜ÐÏÇÆDGEÚ"¬³I×S~•g\ƒ+Ýг=&ÈwÏ`ʲ{\mß4ÀÓõùù5óB5æ,û7$‹ROzU íárÀë äåI±T@¦ ±T½ä¯î‹=+ì.d`Õ€·óêK +Á~·[ +xC§Ÿæã%Ð:¥.øî¢ù©ä/ôÖDƒl9né7M¶´†[z‡7x ÉûH!ýÖìÞ¿X{B|UsI€þ—æ¦`{õTOõ”™u®ª¶†o«kÏ{ ¶ìm •ñuZª•Dª¦Z¡”³{;Ë—º¨€ž…?³Rê+´RÕ°k\ÀÞ0!˜ÖÛÜîŸ9¨ÓøRŽRÙ¹a!2%ÞóßGŸ÷~yQmÖ³Euí̶6Ûymã`ÚÚÆy\ãÚÚæu­ó=.»§m?ì¶U a‰v6¤Æm¬Ç&š¹Ú*hl»‡oÒîç[§Î¬ÛoG°skm]\›Š†±õí™h«Ûï"ò«ZÑ[+ß\òªšÞÏQ6¥î÷µªV]U¨÷ÆN&Ug ×15vŠ`]Õá)²—÷¼ˆc†ÅxKÿNiÃyn~LÞŸ²‡Lù3¶Á«= ìáÄ. i3{q÷ƒ/} +-»èEø{GÙ(é4Çó1‰¬‰~…[è=Ä3pçÜèåD4K1b<ÆVJ¢AÔŒ;¸-ûwL%;eáfl¤wÅú1ñI¬~ñHF¬Åˆ÷àcN£çh5ýàÑ܉¶V´¾Ž;lÆÛ„8°‹ïçö+ô‰S‘\Zi*f:»0.B g ìœÅžÐ&¾\Q­Øߺ ë8@ërÌ4Ÿ~œIò""ø }Ÿ?ñ‡QÁ§üöynöƒX¿´4)ššº‘ç^x"Ýœ…y¶ƒòFpÞBKE-bÂxøJÇÀç1—Œý$Ö{AhV0UÁx(¹ÀAÜÎx4¿îMÇšûÁ™w©KøŒnº³ßƒõ + ½^˜¤1$q)—ë1§ì½û”¸Ö8%ŽbÍÍ +ïÇ{7VoUØŠ™Ã8|“Ø ®ÕaœD9Ï&HDâTpQ"¨P¸;”‘äÓœŠ¸õ ºÖ8…8,ûˆ·C(SøƒMt/bî4© ˆÉÒdÄðïà)pí>‡û Y‡Á«0?[Cü ó4ÈÏ5½¼ cô]Êô=µ¾WC+p*e}ÑýòÑ­ > +ý")UX¡ÙJ~ã,öSn|KyÆ;ˆäImŠïªSZnÈ3z7èX½9 +±B¼ÊS(͇Ô6 šÁ:ƒ÷ ZÄBSÊá_Nâ*Ðþ*èžVÑ*ÎEéNà*¥Éëû•ïB¼N¨¹ +þE´“¨~õ•ðGsÑâKCT¬ùŠŽzx´:@Ên´;ônï®…^ÍDîÄ[ àj/x)V_ª,É£ ÿ*ìs2#7 ³? +;“n¨;0ZÚ“ç`öÑ0ãŸØÕ±+oà BÍ"‹'!‚(2ùYÀ6Þ†RµÈ# ÕÛ„OÛ€Øë5èöýˆ¢|b²»¨™[ «}tVc=Î_Ä3GÀõÿ¦ÿOÒïàÿ¿†Ès ­Gëaú/È÷oèÒOÄUà—Ä7„gn‚¥=7ïz5§œ±w>¾ +Ù‡š'Eo„Ï’É/ñKˆEq¨_o~À_å÷ùϼ–í ¯ãZ.F„fáÚ‚ÞŸŠIü&ÍÑœÃqì¹ó÷ª€§/4~F„¸œ/EÝžÏ н,Õ%’̪§tÈg38¯¿2’ Ÿ'`)¿¤­À/Ñë~œ(‘v:X¿•oâwAùcü*ú§AÞÞ<\þ?x@ûuÃ9qÊmôph+4ÿâ+:•±@9´?~™Ù»×p]h¯ßËïç)$šƒ¼éÍ/|¢Bü åœùöÉü…öWù>œwÙnEä(óîPõ=Ðjùþ5h•ö£öò­Vï‹pFo¤_ÓX H†´¡4.GÞ‡nDC'æ‹Lë€w!›Ð*WÙA;øü ƒó½”Ÿæ3ü g‹Fp-€sSNÙü!j>áò ˜ñ%pá~¬õü†?Ò1^Â+Aá1:¤¾„ßC·AãèŸÐöC€—Y¯â›yàyÀ!¾Oœãv/¤¦ÜÒ +¹Ûñ€:úþ¿!/ù-EÚSØMÐp/NíQþü4w?{q2’ø2®Ô®§—Õøø9~„_TgÜ« WÑ GÁ¾ïç`,z{ïÏŸ‹}ïŽÂS°JòÎß?/¼9úb£ò;‚(iküÈ.d'}„-„}vÂŽ^­p)`>ÆK¬f„m•÷ÝXÐŒ¹ yOàÀ +®R§HjbX/8E?7ÿÑÓö§ðq+p{ŸúcxáÉý‰ü½ûS¹<Ña4”_²š¡Sþ½_RzÈUÆsýBÜ+A‹qËÜI- +vC ½ð:â, oÊ/š ´ò1a9Þº™m¤Ýа}êw”fø‰·¨ì§_À³kU-¶Ìï-=ŽhÒXÎœ( ¿á6døFˆÚ¸[ĈÄ[~®¡5bn”CH}¸§É»@õئÀÇ;y ãÉ\ÏEìÇ»ÑRÄ@2v+ÃÙÍ>Œ~y @®‘¥%«¹‚3œ>7›Ü«þ¿£ÖtËÙÔÈ\ù›r0.ß~.oOð~QÖ;:s1»UŽƒV½‹ƒ÷Û~6t€rð6˜k8›ykÄ›àÂhÜEÁ]BƒÇÛ%õ;ëPÜÕRÖ!‡~Dq+KÉuex½‘È‹*f¿ZsH•öaÜ.út'ï%8ç[à—Rö3NF\°€å¯)ȯÁ‰LCD!WJt%€粒çÄNåèu˜s¸ìÑ"š‹ygÐBur³h8Nèfus%Âï—¹ çhηŒà6ÁîFä-f‚­’xª÷¾ó žXÙ#‰Ò¹¤÷ÉÓ'Ïn>5B®ó"ø ×—>7ÀãÊÇ©£œI`®•8vìHžê)°ƒ6u^ŠO  ¾J5€¤¾ÉŸx Ò“ÀG´‰ô19y:¯…QCÁÛzï»ð¶ ïÄ_"J)Hÿ•¯ Y‹° Ú±]2Òÿþ'òì湨ö|”Š´ Òú„±ï7‰IЊ0†¿!ôý–Ð÷*[YÐk‰ú~g¸Ãß.üþÐíЉáYz,¥• +§8 ãG¢n3ö:ÿèó©F*÷ó<€ ÀãD4Ÿ‚UØ¢ÐvÁ§8©·wö9fà¨qTÝM}Œ•€Tœ±óŒÏ逵€TÃ"iW4‚ù‹«šw†ŠËWýÔj/?gí> OŒÝãpFG€ÐË>s‹,U>.,°SqW~®”ß ÐléåÀ«™7äHx4°n¹}è Ïé¹° +÷BWÃü¦˜ ûVBŸÊoˆgĹ9 {|–x4Ö?Æ´°ù$ìi "Ù+IÄ„æ‘Z:ñG4Q~E°™žeÆ9zVJÞ^ò·ü]Ð6g*î?J7¥é ( ·¼±º0*€¶mx[Š¶4Øœè8¢ï8N€5NTÑùBxâßq"½C_ÁSrÀ2\Ä#ØÑôWuÊ5zKýÇÅ`Øë! ¶<6|4,º˜Öјë"è÷7YOÝðÌ]¸åj`çQ'k†Èš>Ÿ‡]ð«næ»øŒƒ¸ðy‘ß>׆ŸŠ†Ý€? ¾Î´ PäÊz{It´ ð|Çâ” jÅÉ}<¸ZÛ9¤²üï&ò²$lƒÖî‡-»Š·Ñˆ?VQÅ1èÂ_@çÿUÑ7Vù•Æß?êÕ‡=õ òp<~a\þ=Ï:ì‰_mî½ç‘Ê};î»zh{]ÌÉð9 ~æIhßtt-$Ûû•¼@éb;t© ýgB&k!ƒ‘˜Û¢¾?¶côFhÇ(ŽE<„4x +5b0¯̇wìƒüŽÂ³zõN莓kùb¥=8Ñú7|…‚á\!5‹?‡†SþC6´¯2•÷â:Ü +XÌ„¨ \hÙØè[/=öçp:ò`ËcÕ]$=ˆZä±(I¾KÁAõÅ.lÛå=Œ››g^  _œ]ì]žÕ•è¿¾Iòµ—ªÿ»9¬n`t{-ÿž?DäáS^[+î©V^üŠÎWs3léÕ€VÎÂÕªn•U¸‘›Ás¥€üàzÀg + ÃTkÑŽtLæïDV¢²½1™C[e­òŽˆaeå…ÚZÜ|¨Ó\¤ëB5¥#-ÊÚMª}§vÀ#À7€²æj æj ¦Lë$ÖžÕžéÈLÇÒûö&gý¢C›Þ14ýpyƒ6 SïQéN­é&•ÎUé%*]§Zשòåª|¹*—©rY¨,ÓÂ>iºJceª]ªM…7—®MÑ&©¼F«‚>¤k—à]æÃW“ùdm¼Ê/B=, V~ä“4åSjñ^‰|Þe>^×Q™>¸|Þç¢M`=Y_ *AS%˜$k6wO¨š¹H×_jª'k•€ +@¹VŽ~ÌáG‹Ÿ4Í(”j¥hƒ¾cú5ŸÚ£½|XÉ^ù0³âñA<>²h>¤.­ˆýÀ`¾³–qù ++äkð¸Ó5·Ø¯6]s…òt±AúñÚ±¡c@º¿Ü´RY°Å)ÊD™v‰¸DÓ¡Ý÷ú|CU>lD0ïŸÌ£R†Æ–_© ›Ò@ $ɱÕð[:P@urè0ðuà  dx˜‘fä`ƒ9Ÿ£z™U¿/€Pƒå`þóû˜Ôèt`aŸYdm.jrñ–‹1¹è›‹ÚHYí5ÀMÀᶠ¥ÌJ930W¨-DZ¦J±HÓµŒÛ þrIly1ø~ âvpóvðív©!BâB´”…zlîš´ý€€@. ภ6ÒÛ Ø¸p;`#`¤áÜã=ìs‹./ZW´©è¢=E‡‹,Å<@ƒhðÛ(!–ØgM)· fS4ÿ·Jw«ôJ•úUšèO™}rvô˳£ï}ÏìèºÙÑÏŽ7;ºpvt'Ï÷'z£ß÷FoöFO÷FðFy£‡y£z£Ëã΀cò¼JǪt¨J3TšÆ3:¢)âÏ"·Ï9ûÜ7¤ŸrwêÜ‘~“»ÓŠìÆàÛ¬`6ZV>“>ؽ(=?X“Ì2ÝÏ阦ñ“da¯?ßòŠe®Åoed)°äZr,KºÅiuXíÖk”ÕfµZÍVÝ*¬duvú½Òÿwší23ë2ÕUÙ.=[éÞJOXÀÃ¥Iˆ×ªEõÔ±\8ÒHÕó]o§z:Ù6efÀäËG5U׎M +{«;-Æ¥‘Þê@Dͬºvæ;êñ·v2ÕÖu²!«Ö§Ê%ÚOÌùëoO åõõrL]»Î·ß^O «Ë’Ê¥q£ÆUþ@ÒJ½çž$oßP’ØR=µ.ðDZ}`¨,iõÕàœüÏ£ýb¤QU¹_ˬ¾n¿­UŒ¬ºTÖÛZ+ëÏõ#ê+÷“[fª¹d?r]Ðo€(–ý²dì7@õp^¿ö1îªÊv·;ÜgŒê3æü>‹Îï³HõYê£û¸ûô±|HnÕÇmùð{}üŒ>Y?ا7›Æzÿ—‡÷Ó$>Þ^±FþÛVƒ§ª ØØ°º9)Ð:ßåÚO|<ô]Ù ó›e>¯©“{š*žJWû¤5ßo¬‘Í“<•í´¦ª¶®}¿©²c’R•g^eýÞñóòvŸ·ÜmáåÚóæýÀdóädyr­ñ» y·l/×Ú-×Ú-×ï¯ÖRZµ´ÒØúŠÙÁ|¯ˆ´ARÝõcì+J•6v'­M= ?F‘Þú@”gl (› +Ê ÊeN™lŠ‘ÿjJZ;Úz€ 5ÙQçKIU‹+ñ×Ò*üÌ¿–––•—µ\Ö"sõײrPŠI~Ì\IØAy”ºßÒa¥mÞܨl´ÖÒR¿’”L[V‘œm¥LÎMÞ[Z…™¹¥¯PË…Ô /Óµ¬bô’W…Ô¦Eþä…iHšEýø¹ˆH_d’Q…Ƶ›-µO0™tYÐÈf6¡ðŒ¦‰”‹¬{†)ÙzɵIÞ‹íg|“»}Û¿õM¶wÑðuû$<,ΗåŽs/Òé¬K;rÖo¢ïÈ¥}ûÌøX|l2!2L§Kü±Ç#OE +«ÅFvŽ_™‚éŸõÇGSJdÂSöR¶•¦=ÓmaË!1‘\ˆn/¦$¯ýÛ9]'OÚOž¤²².{Ç9FáoÈ`+šÙìÉÈÎѲ‹†64¡ŸSS©ÙƒZT‰g³Ebœ#Qd‰BgPSŽwLižLô»ºgºRR\âѤȌAƒ<¶³Ö1Þ|ߘ¼Ÿ´É6ñíý-õ}¾¡=ÆÔ)nöÛØ“m{/â€x˜"Åóþ(WÜá¸×ãNÄ}gŠ;À $Äó{­üuŠ‡Ÿl½wÁ!q/|¯¸&¸3]önìæLxç³ûÀOlÃÚŹÖgv%'»Ì¼H“R\&ý­ž”ìôôlþ4˜C’µzœi,âîj®ö«‰¯éÿ€óÔ=Î=){R-ãiBvÖÄrq~ÁˆYýñEŸ2zˆàjOæ$k„#­ü¬IÆ‘ŽŒ"•e³4•=“X4é™ÄèÄv³¨¨­Kõ1íäÊþ; \;3yV5ÍšàŸU\6kdiñð ë‡;l³â"fÅ•:üy[†;üEB +±Esìè5þ‚ɃfÌ‘5kbæ¬IE¥#†O^3‰' OåÜœ´3IôŸUãÜìÜéÔœ¥ñ Á‰©ìñ›ãwÆkñ‡ÄWtø8EòñÌïçsºæØ»P:sæsäA@=žÏUñÌ™³áê“A¨§ÂB{·ìÑí“]¥ª®o2‡{ÕHJ$'»¨(>\*ŽªÖ°aç +#F KLègÑú”‚ÃÝm˜ærüz@Jʀ߸¡ŠqÉîç]"ÉîHf×Yû´cGzJJúƒîPåsªW +»÷ÊÖž¯Ÿ‹^œìùwb||bOþ€$=6%–ÿx®$ëÙªÒwÒ’u{’½gè¹’õo¸—¿éNý;Š¤DòR1nŒ±þê—“ÙœÁK­Á÷æ ŒHw¹3<™YÙ9¹’&§{Nx„ÇS¤eL¶'¿‘,’“µÑÅEFyqa¿b͈-Žˆ*ŽÅy0ÅæN>í·W(5ç–Ž,ŽÍç|£´xh§øúÙÊ*ŒlÜ•äÅÑeû·]Ý8É…*½«»K¢cTᜮ8•âl'ŽJÄÙ®¸Æ_[PÁ‰¾á¥¹T2bd.û£4vJv«#—blQ¹ìÔQJ(6:—G#)RžKHâ,±¹‰$ÞÔ/— õÞªá 7ÀéJ˜ZÈš2³Î1¶Iÿ„þ1ý}å Žñ9ù‘ÛNãäÈðSOWÌa§9¤C,ó=æ~΄aCG˜LÁúâÅYA£d1k?ÒW|ºuñ’-[–,Ùâk™2¥E"_töÛKdœÅäÐl1V +é[—,ÞŠN[Ç„;iÿ^¶mÛ²e[·.›ºråTàݺ#Êf3›Cy}ÙÖmKe§Ú–•S/]µÖ¢Ç8¡õè#ÔïißúK®³\qݨWù5—itÞôÁ‹<‹ +¯µü²ô¶òÇ-–¾XjË,è/*,ñÏÉžVbÎÛ’‡]WUç6Þãì—ìˆrFzú§.,+ßÔ³©ek’#:Áúøœé‰ñŽ$as^;­éŽµø#ÄaŸé§q ôÛMÏ ê)q=µÉj¨«e2Eœ»"OvC]»ú^'ɫÄ[D?ÝýužÛ‡ Äœž³ÚÌ™J5þœQyvaJŒ‰·9Ìf“=1!¾_i¼irDDüΘL";Ô&¹ÿ«ØDIœ¬d2gr·€«áòDZ•R5J™ÍáGqXåE?§#Qñ.#'[d‹9¾'r¢bÉ–_\vÙ/,ÉŽ˜¨¬Çüü¯|©'2)ÎõjOçÃôt¾–Ffð¤p  ç¬X¢v`„ˆHJÑ%Åsb‚Ýdµ6ˆ½±p1¥¤=|€'‡éýVÒ{+rÏ£Ö)„%|TEÃENP% bÝRûUKѳ;#*Ô¾Â~„'¼ +jáCô<jécaÑ>µ<Ü“³¿ÝãïÿMÊ¿3MÉ·Ä·:µôÔôÌ‹2µ¼Ì†èñË3_KüÚq&õËLk~^†F¹6gŒÕéväçåÄÚLzdfe:³²23a“=™ýSýû§¦¦¤öOÉŒw8ããVk¦#Îù?œ{ xÕö93³»3{›ÛîìÌîÎì}6{Ï&Ù\ a'"^P ¶ +b Q[µ( +©Ô[mZE…ŠÚ +*ØŠŠÖª\C±­V«µâݪ­èˆVZJ¡’ÍÎì&Ô>ýÿœ9svv¿Ëû½ïwÎ +ŸKÄcA ¨ó‹ÏXÜtLŽ‰~’4Þ&tÓ4°Å'ÂÂ6à†î~¸Â`i#0IÛÐs©ÃuôÃÃ1¥nvQ§äŸMÁžI¦·Ûý +·×/s{{ö♌̉/å]å6ÌÆÌLÄ?T-ºór†þÊ„B`>·±Ñôžcoô`Då«,ŽO '¥e8‚’ÞjIÔ2×G´Ê(] /Ú9™÷W>_Ë)¼ä]»Öë~meŸÂˬC$—®°•¦[ž•èé{|.AQ?ùDU—oÏ9´—å+ãËÀxªƒš„‚¨Û(*Ý¡@JþA®›zf»†¾ºi_7ÏËÝGÃn›~¯Þ J˜îZ€J\ŽÚ ý˜fC¥ÃL–Á]æ{8?ùj-à#Õ‚~Ó‘*Ò?Ão«²Ãœk¾Å¹xN„*çšk÷›åþ—&¼ÌÀsŒ™ÊëÄ+0¡Ñ^;Á~$‡6QðŸÄoÁ«¬-d#lOÂ_;¸ ª£ˆQØk¦BÖÌ Ÿ†|å­€®ÄH˜|»!¦ØØ6„‰yH3ø 'xe™…P(\Ù'£z¾&á?ä”(ñȃļ«¯F¯é¥¡Iþ\ ˆØó:ÚA½íPÜ—m«ènVâXÊ~V¼µëŒ<ücJë˜Éøýÿ»‡¦‘ŸZ.C€t™1†a$¨0d+hcN‚§2Ý̥̕ðjf½ˆ¹ÞŬk™M`|þ‘y0á!Æç` £>¿‘tŒÝL?\‡^T7½­@Bò-¾n}âI“Z¢šS³K_O1LsM`ì<—ðŠø•ÃãæKü?g'Öéµ<äs+¬ÐGè}ï±àÏà£ëÂúCÖåè¢_€º¡ 9ôo ¡ïп7ÝŒ›vC‡ÓøbêÎáßH}aÄR– ;äŽ +—ÑZPy˜´¸¢1w¤CÈvX‹Ååï@jãO›Šñ·Rß´"àËÖŠ'âYˆwal&ZßVÅ>D®Î!òœ.+>ER¼ŠG±Xƒ5 BÊšÔëô”žÖ)«Ãiw2NÚisZ¬¤åã‹~f¬ 䨂clÄ€ º3k€<†Qv•F_™`˜4ÁÖ£¿R6¼¼&*eÆûÊ<$MÊÑþ¡/ M’ž †‡…EƒÏ]Žá!é‘\h†ÒƒžGj‚£œ³£AÂ3Õ£DðùÌð¡ ëñ…ðo…Ê„ãÇùð¿¦Ë‚_ötèåLœIê:&ýœYÌ|úF¤-‰þÅ¢„ñú×Ø ”È= .\1ñú¼:õ¡Ùi?Ék'rÒ™ãÓJ]ÛÉ·¬Ÿ‘ëÚNY²šxwGå÷^7¶¹­cê; ‡çÑÛڧλꥎ˜«ì|zËUîˆ*qygÛ.$Î÷P‡PÕ{b@ú‡,o40]BW€bØb-p•Ã9,÷CxÅ‚Vh±ð)ºöÁN›ð ož¸x3°0´S!<[‰HÙúˆ?vp1ÏË‘ç¶s@Üÿ\ ¬ºÛ9ÄÐM±ZÞ[åæ`„aýëÀ3ÇÜëAéåa Á·Q>L,ƒaŒ[ƒ³L$ WöyV±Ó +uèËs1ù‘ÑGÕOÅHí¢±Ú~Yâ-”K®JÑÍGÆB!ªÙ»7ÚžŽ¨¡Hy°ZG[PNýÍÈâM§°×ºoLÞXwcêºR[ÒŒK°K%gkšJÅÒZÆ“Ôêbˆ‡áHq}*ì•þ# JT=lÉ÷6× iÙw!`u@µî cwúûáá æÿ½v#YE uú¾#Ñé"fƒÒÝ@CÏw—,üÙpVrà¤D†>DiQàöšAÕŒ(;ƒ¡¸ K‰°îÈc¼}!…8jÙµ`AÕÞè ôÁ¾Ìô–H­ ‚P8Þ2Ž(™:Ãf­UÎ~Y­6`$nÀ…åÈë|Ñwfè7?¼üaÅÊ89Þ7sËù÷|¨w_Yy{àÌvÒ®Û½oö÷¦ÔÍzàÇ=²ÍîãêïŸñÎâ1ç_1·òÞ}8V?ô!… ã×ÏjED¡VcCC‰?5>11¾õûÀ:/rcëÔòÒ­kJ´n|/Š/z^ò½+þÕ÷™øßPÇ¿·ÑEŽãû‘ƒh’¢YG¦Ž' è…ÈÀ E ×éY¹~}8,dûá-ëõŽFÄgnÙ(tXcÍýÐeؽd0ØFúÇ ‚Ä‚Í¥­Ñbu}6çWå(†È]»&s»‘í'q¸'ƒ½1¸ Ýb5ŠáÒ yLVª l*Å¢‡²$šb•Œ—tËP+Kˆ½‚ôd&ÓÚÓ× +Zû T¥/úµDšùE¯‰AŸygzi8GªN"Ź×þ«Öž<ëã8ÏÊGo{öüM=š_QNé[¾âºi·e9ÞÁËÓ®Y±êO4m¼àçŸ[Ï œÌ^±yÎi˾s .îž±¬½ÉÃø¸ºŽ³¶ÿôÌ;Qmzçb¨*ˆ€W ªçaB‹XÔPPBfݽIUŸ’X¯ÐÏ3·û)o8¹˜ S&‰H(Œ ¿™$)KDsih¾¸QñAõJ â4‹Ö$/ÙO\o°Ðâ¾XUC€Õ Jm€¸D`·á@9•(Ey¨Z½ŠÜqGߤÁƒ=}¸3ØÎaæ„y'·ÏäRf»l°o³ ‚iŠ=œ8ÿz½}øÊëû`¤ùa>1<©Q#ÏÇ I¾_{ì$L O2ÇÊóx¼'[™{Ï'“Gþ„mWù×0Á^âýÁŠógpœ#ËeÁߌ¨#À£LJ#[r©ÓS½©ËS¿HýQyWþ»L+8ˆ%Ä"šÂ1ÚÃ…ãRÈCjlƒøc_oPÁ]£vP”è ±þƒñuØýœ Úˆ@Š˜µ=óâD¼þu3§ä”}8„Gm†è&²QµŸ‚I&}•*)o3ãØŒ^YZ˜ Õo™ACÀªP¡}£‘‹R8“ééƒü0T`åv\äÆ¢¶{­éâyoê¸÷ý®º|²¡Ë/þ|Ýò§˜ýõa’Q1„P·U. …þ¶ñùC¥DKDá–?>xë£8Y"r‡| +Ⱥ~„"1P6œù¨'ÞÕ2ZDÓ†0ô¡á.QcéñÔiôYÔ9´5 ¼Ù7\»FÍk¬)Þ?ôºaÇè~;N»úÑoΣ(ŠöPZ§t:-ŽO»ÅKÄkÄ›Äâ[Åñwïw‰h¡ma«®°ñp"raø;‘k"×Ô]Q˜S¿>º5ý¦óCûn§pHÇ aÑòj’êS8Ùq—3áÐí°¾@䳨Š¤l™´Ågu»âE”#k6æ:H’ ôÿR¨ÃcIv0.ùkHsépº>M¥·/‡qà$Øí¨GBM)n…­pÁ¥ëÁ n°Ç”ú¨€`_ïªöÃ}5%…a*‘ G(‘cyV`I«ÓåpÖ,•6`XŒöÃ_^ Û—KÄëh´˜±ä aCøL¸’HÙ’¨9®Ýdr×úÌ‚c²¥jéÉÀÑP1#•+µØ‰E׃èÓhèÀY“×\x㎧¼l[óørýê7®;³U–x—êø}e»¢ÿjöœU«/<ÿœvB¼âò÷ï¿óð7?úê½7Í\ua”UŸÝSyâãÈ+›î~lÉõ¿þv ÊÊ׆*ä›(+½`þ ‰ ·AWš°ZIâ)Æér]ì¯x™pú^' 9H\ì°ó,g§8§ce"$Úàcé³£èó®I&ñ)›ÀƒpÇl6™É„tlµÝt\݆¥HÕ%4ÀN.|c IV~CKnA¶R³t3-VÝøåó~^æìBá‘føØÔ P„ …£/€}`Ÿ“òSª7“›–¹°8Ü”p{äÅòíp½Â±<¹*swn-üUr#±Ý>àȼd!#^×Dˆ¢'‡˜Íº`LëúëºúX~`è¯HlÚÀÓuuq¼–®‹ }CŸ®KF#˜ ™:ƒŽu¤RVµC´:¬®X?ü‹Á¥R§wø;ÊÒ‰úá^ÃÑîà>Èv0JÃq²ãîÄ£CÑn3Pqœš¡YŸ+B¼—¢5!l€ áPÞ†4C½•Ñ)àECŽ. ˆƨ˜À…õ«JôÀž>Ð7og†ö¬Gj½‘=ë‘HÀW£i‹Œî,2šA<ƒ²¹æq–½2zº¯yñš¯# ¦Ôo³c˜Ùe²Y[ŽjâŠGÍIqæ¥;W¯Þyé%ç¦Ç¼qçÏ_“rÝ÷ƒ¹÷­ºòªU¾_ÏŸÿëGçÍ{”¸¹ñÁóîxç;zl*µqÁâ—_^|AטOf­¼û’ –/¯Øfßÿåßè!„‹"ÂEŠ‹h„]FÎFSi[äŽÄ­:ÉX n .·ÖÐ䌢¡AjÌ&³^ÌÄØîâGÂáØ?Óò–í1JâßêÇN—ÿ? ÈN9ô[VÏÆâ3Å×ŠÔ ÚºÛ™tÔ1i¤þÐÌ¥£ÅÆSv Æ3Ã^@€ftH.}a–‹xÀ°Ç;XÉÿ­#»x4Bw`­ƒ(4>ÕhØUÞ[kµW2™Æ(¯ËítVÑ‘óp”Õ’H3(Fê(F’zÔÇH%Â<…Å&B‹n4ĸZßrÖÂv^ 'ƒ«Ž`š›I:Ü6ýj²å£j(5%õQ÷¶4“Û;×Ϙö«ó¶¯þþ“MãÛôåçþø¦sÚü2ïô%߀ žÒ=3/ýå//{Ec„øÃs¿ûÛKV ÞºðÑÖ]Ùug¡ådÞçaãÇé·_\¾á–Eë #ƒülöJÈ € i¾¢Á°ë$½X…­PB˜@Ai£Ã¡(ÁÑæIû$®ª"Ìžï1-ñ›*£yAWËØÉøgpéH—…€­Ci˜¯BgüÓîî·¹îO¸ýîÜ͇HÊÃëëYÈöC¿Á ×Çþ“û­DõCÉp9šÜ¯²”ÞQ€µö*AštÕ6Ø^4­ö]yydd*‰3­SºZÐpƹ®|äUx9l=ê¥þ©R4¯SĺãÐIµQ“Ž½ÞО°Bšaâzcx§6x4§OwCü²½›ïdàÃÀŸDöN¤‡4|ru ì'AñŒþ¦"€) ä~CôJ)@Ù,¹»öîEß@9 ïU84,¤kN:/›ü¦DXCkÕïr‰äà•è‘ƒ$Ux‡Dœ ÿãTxE¬tUºD4q">~!\LÍ$¦ß[ÖÙâèµ2Þ8ëPü*5E€è› +BY %XÛ„ïA$ïŠ_6;þ5¥]•ÇÜQÅ#¦Ö&oÇãQsb3f^f«ñ5ÜD4‰ÜŽ¬z©iÕèvë+Î/œä1Ö<ÚÊݼiYdáN²,¶*¶nͲ¨¬>b8Á–‚Z‘a»~ˆ 9Ú°ƒ»þÃŽ6à`-+©KÌ5-KÚü»fÙŠÕ´,|>>lYj;uHƒ<ÜddšyT¼ã²-¹“…Sý§gOÊu ]R¯¿7Û•;”f3 Îæ!Aäì\?q¿!¹–ºV¹ˆ÷]Еâ].ŽWí¼Ká‡ÜºÞ˜ÖõTZ¥³ i.Y­&åP"§ˆæ’$M$ITEà£A¼tJ„懖…È!JB¡`@üþl:­üž@À/ð¼FäÚÊÅc1;²7Ô2l>”'òyFÉeu¿¨ûÂ?ÏY8Îð¤õ€Á2eÀC6 +ì ìPˆbf7Õ:ŸÓ…8ðCO¯çíeo¨sè¹,?…ÿœâ)ä¾ìú„YÈ1Õ†O‚LÜœ¨NÍÎÖ`ææ¬yØ‘¡…S€-DNZø£c7Ýzú +ž9nî¿5Û†þ©¶¥Éã$¬ ç<î’Œ‘äßî3÷Ú+Àc'¼âÙgz®è4—ŸÃRoõò=¡àÂÊKÃüÿ—¿‘| ‰ï ÞƒÏÇLC14ÅP$A¼ÈØöXú‘ÌìÏ:Þ²[–¦gî ¯L¬Êü&aýa|^âŠÌrKíK=7Ç—&賸 ¹yö9Ü~Ž0G´M OŠœ?-s£ÛÒÀŽ ‰ŒI”Óc3Ø“9š)(á`$¤…›ÎÐ×pOÆŸ+'…OM\¾1¼¸þŽðšðÆ0¥‘HÏ JmÉ@¨Òõa7«s7„“jJ—’:­©Z±¡A¢ ‰Ž%XgÈYp–Sœ½ÎÙN›³^o¤r Às<ÁòËø§ùüN~?oåýMÉ:$Óñvß~ ƒ¯©ÆÎÓ¾Ú™ŸSžcNŒüeŠN®Ú'©5•ãfA×âYÁcwˆz&‘öär0aå`VHå@Ü¡ç åvx÷§¯¯¯}%øØQf“ª[±5G‹‘†–fSMDm®6S"ô™[$Ü=Ï®¹þÚ®5çšÛ'ÏÂTo¿ª²®=ãêqÓï½¹òê™Uwo¼vEoáîgÞ|v9Ñ ^Ò2å†#Ò)—´WÃ'ȇާN§­à}ãêœ@L¤EòJS}z¾+ÍÌÏñ\!Í‘7øì-Áæú‰ÒÄæn_wéß÷J7ï*Ø‹l8…€¤Ý’¯¥!ÓX GlCFH´8n¦´D¦…¤ˆ ãÖéó"ºîÐÙb¨X(–‹TQi[x”&á}ðIƒƒØüåá/5UÛƒõµa.…J,8íqÇ·O{<~Æ9ˆ‘@؉¾:ôÙFIòeiø&Ï(Ó‡û†5—4¥þ‡–€Ézj¬×µ:£1 ¡ÑD\g±aÃ,ÁúóYMƒaäm(¹­° Ò£ +|40ùBI`Xþ·Ö8Ê…¦pÚîu³.ÖÉ:Xʪ'’‰ºD*AYEÁ#ÖH"mçaØËÛÉèÊ×Z3x#¥ÖîEüèüÀØo¶Q$4³³Ö¤™ªy>sÉcù))õû7|ç'•v¼²/ÙÒ£ÄOˆ/9£òr-)Îní½dÒ̹ ¾8看;ã“;¦weOEùp6òGù£Ãßšmg%y‡;#ª# •b15H2VTgÖ³Z_,«”­S T=~_FUS8QÌ”Jj>™ÃÝ"Ñu5ꇳŒv?uG,®ûK@Oh8ü„ƒŽêl~ +ÁNR ìbV3;˜Ì~Æ”t=r\ŽÈõ£Š(%ˆžhÌ·Ä‚ð¹°“¦æ‰³åšçöâs^x†À«§Ò¾š V›‹ø¡×^$è{^o™ÔͼÍd†YÇn¾ó#ÝÆa/ñÃMÑçÔVàYÄØìGÎÇé31Œ¼¯ >ÍÎò‚L”*!³ŽU6ŒV«Êûxå¥Êi½æ#ûðØ‹¼´ +yi.òRø‡1ã< dg†ãT&ÐJѨẖõ¡z¢>ÓÔ¤æPiÆeDP¼žW= R\ŠHe 5éJHÄuäF!º)‘Kè Ëe»²dÛ;ÇÔ¹¨áÑXØaòKà[|˜ƒ€›Ï-ãös§”nÁy4RRñ¹š?p{·ZÛG}q¼õÁÑ^èù'Àžãwžj.hùï>¸»º%U û€uhä=Øðƒ?:Ö Çð—ýë]€|0UŽPåh‡ºÑº$¼"L¸27…#OužŸêèqN?àx þ¤uÀÉP1_Lw&cz¼9nmmË@[P›K XllhÎ74òjÉN‡’\N„šOFå)ל© ´ëͽù¢R‰# 7‰èßL#ìñˆD:A1ÚEù|NƒøÇ%u–Ñ­t,œ}\Y1órfKÑÄ3Ìöv–—¶Ú9 ³ùu ÌõTq®zƒéúQ•§Ó8Ts,C@vèSB?uCŸnŒKQ)&£3eõAW–õ¬YÞÚså]¯ ×ÁäbúD—dC½eÕl”Uãáï §pŸô›Âzi{ªJ‡+SSþ°Éü9ª™ˆª†#ª?Û`.,¤ …†F5Û~^âØr¨L”3ãËåÆ«íUá°fj2¢*"Rª¦!2 óï°u°.¯«KÄÕÌØ^Zak¦©µµÔ¤ŽE5!£4èÙl&¬ûz&SÕ ícÇÚ‘ hÔâMZ|¼ 5­ÿØxbéø÷Çãû‰­F`‚ E"¼VOÄ2‚œBì –è%f$ñ$±œˆ?„P=|‹2·Ý‚Ð÷1d7|a\÷cržx­g±„\*.ö’h†px^rqíaÛÇÜGž$+Å]Ämâ6y¨ZÇJH`…•Pð]YVC6Vp8¨pˆšÊ> ¥†‹/ÃÉ•w8ýþ:ö"·FÓ6ü€ ?0ßmJòž-ðZ¹Ccì®É5‰]ûôÄ^|±€°õë¤S”“«Wò ‘·°uY«M$}9ÈYK„«’Cœz™tM@õÔ—%kgÊH¼÷‚õÒq–%ÛuoïæY¸°ÁI?Ÿø­S[º+›qÀU;è¿kç´ïÀf3|¿8ùä:íÖ3ˆÝGõ‰¦#D¼ Yùâ»Fœ“›ýñÆRcKóÉ‘î΋#³:¯Š\×¹ØXÜy—±²ó±Î­/6Š,hnœÐ8­‰b£™æ“š:KS‹Ï”o<ÝI¢âÌèÌâíMåÖ6ï‰În¶7œ@q8š3ÇD³a°1Œ:¬*éz³aÎ-Ëõ9˜Ë-+ærõE5]ÕXw ´4îDxªážŠáû.ÕCz½Nê™(®7j*él2š©ò Ñ"€‰z"‘(ˆ£TÖë阞N¥”b4Fù‚F&Z[ôqå2MsºÁРŸ¸vC$"3 ýðìÍáN(‚ô†øˆ×>£«x^qN‘E£ØU$w÷#NÜÙ²ž   › þÄHçàà~œzã'À3GEˆ)ÉÛÛî€PF·}~||ƒ®_1±w¯\öï5ay°Ý(æéÃv¼£n–õ…ù >¥CkGÑlAƒÒ€_ žºrõœüô…–UkÊG÷i +ÿ±îðôôýWж¹¹ööêÁž- :´s½oÂJnº¢—0Ä)Q¿ ²#à ClˆOm ŸÞŽzN]in÷¯åÚð<¼²’8ñ\|ý7^ŠV.¾©?o¦ù©ŒŸnX_¨,þ*Ð ~IXFü;éÏíÜo¹˜ùrÚd€(;ÎFÙ³ŒV$’JX$a +Ž°%€DÒ»5MTšˆÐ,sX2~Ħ5QP¢k®9êãV»{;®6üG9ðW˜1>Z:z˜ôëíß òæÉŸóð›}þyÓ + *œŒ UeÆq  +ŒÞÏÓèý´Iċên8 Ll}ì¯Á·ƒ¯¨ÁAxPµ'@RMjzëÉÁiÁ‡´-Úëàuøºú)Ü£ºÎÖ ÓÌ™Ûí7OÄàU, «9Ž/åÁêšðù½ö*-ÃmÛ…?ª6×-?âžÉÈßL­úþÿøYŸY׿8}ŒÁØ7Ò,¿ñˆNŒ¸÷¼Ê6n¥Yx^ÀãÉ%<þŽƒm69UõÔ΋Z¥®€çϳÄëÇÒ)òSœ•yÅ PgálC¢ È• ñÐ@)@9x3ÈÜ)ÁíæQÆ&2Õ`B¤;•­«ËdÕ„2Ÿbk$m6ŠD”ßcÞû2(W<(™ã¾FÕHDSÕx€€Ôªg÷aˆ=‘Ðôx¦k7<:Êü švè°Û!­5ˆÄ™ k$JlvJ¶7;;»4û~Öšõç Røé¢Ð+ΗŠûEŠ¡¨äÆ\:"êúp§ƒ«v©0ÕØ]%kí5²V=™njºZ`!zø ¸€¹>Ýlíÿ?»¯’r¾#1øÍÁp<”SĬÁ;ªXý¢yLËÄê÷ˆY+1:U9ÉÉ”ïHÇqýûÉgGy ¾‡xà÷ +w1†þÈ>«Âni·|˜;,(Ö礿pÞ”Þ’?á>l~Î/x%I¦žþÃÉ{˜;œ÷k-k™û/X_ éë‰%–[èùÎEâ"ïíÄJ Ýbm¡™vç®Qh”ÆÈtšÈ8 \BHHy,a{’ÝέÖ‰ë¼KÛå…~”ý ·Fø¥ø+ïýÒcòà +=Mˆž([q㾶@}ï¦Ï½Xy–^\´oÑYû¶=ñ%´­Ù¶8é¡Ê«átè†,<{uåõ/Á“*|ïÓÊ[pŽ­õIº’Ä@ì7dÊOl‰!””[2ö´ìÚgp?ðÿÔO$é4½ÜGˆ8žÏ~½+ŽÐÓ¬©Åb@Kl¼'âqI²T‚EØ_È!ŠÈ)ùƒ£ÃíiÜÆꢘ7íãH£ÁÁb<½öÙíÿ]®ásƸý m¶á6'j{3±|üøþb{}÷ä†ÓºÆL­†ÿ—s/l¢Lûß™Üç$™“k29¦9Ú$m’6mJ3P(*hQA(A@\ð(xáµR×/PDe½º‹xá-G×—Ý?aUÖ]ÐÅc]QôCךþßw&ICQÿß·hÞ™yg’&ïû¿çy~®°fÂ3¿*—Ÿ¨ÑXvæ¯BY§eòÙWµÍ}TÒi“¨ÓqÐßfÝ»%y{úØêôSá'¢ÇUæ…õ R„¦†Œ¹jè]ǃӒíéöÆS›'´‚ÓCçÔ’g§¦¤§6ÍhžÙ2/6¯þ‚ôì¦ç“kÒ½M/'7¥úÒ뛶´¼{#éOêš´ojÑ$UA|z´¯^•ÂÂÚÓÕ¨"u‘æL8m©ki>58>vWðŽšc7ÅoJ.k|(øPÍÊØŠøªäêƵà‰Ø;±4ÿü.ý]ã-îƦæY:•$ky?D$à§(ܘtþsú´ó•p™`!Cö,Ô ¡ˆ=BÔ†ùµ`úàavŽL"„Ó°¾Údmo­¼vI&Ä39¤áÒrê»ÁC8­—Oଊ?Ë@[9ôjŸšJǺ1;м ¿Ü1l +Ã}PâW VƘÏóšó±0âØB4zÑÆC#îÓHã¡Ñ‹žkÄ}i<4â>4b4Rx8BK»`A®,‘m*u&‘c*¡J]_<‘Áú‹µØR¥ÁÄ¥‹Înœ6¥•kïÖ™íëiÙÆè}ãêO9­69ìÛžü +)7Rðâž¿TÔ››lòÙf»Å¨uø˜FÉ$wÐ4ukžöVøâSů‹ßŸ$æU«=!V@^AZ_šào¶nh‡p†k‹ÑvGÛŒÌüú+êIe¬¥þ´úéÎiõ—û.¯½*sWfmô™úÝü>öß~_ÝW¼ÉÈ«ëDZÜUµ7³·×ÞÃþ–]W»Ó÷÷ILïÝ6ô=PãZˆØÜ°…`}ѧð×ÕØ8h,E£uÀ›ˆc¥c}ÇU(Ðå£QœÏa·×€:¢WÐôC¼T*ä<ä‘xm\ê^îFx†Ñ=?œäïõïññËüMÔŠ ˜ìiX.,>T8Tû[Å®#oˆ¼dˆËAhuµøkv²`Âzs)§ÜÇê|[‡Ž¢•?º!¦ËØXäŸúÒ¾zäkÊ|ÀRJ7Iü|Ȩ´†Rƒ5åä8ñø#ïÞüðôž»|µèáuÝÅo?¾¤ÿ̧¯.î"4ÅÓN4[oþrúc™¶‡¿Bû+™É“.ÊN~áÏ-‘ÐÈz¢£R]©Bj‰íÛ­Îe®;›WÑœêëM`‘xzôScöÙ?±kWºð´81¡¼+&DF圣œ°ÉÐ ñ4®*›´ ßÚš6…ÚµwÈâwÔ¤C\;)Cn‡‹ËM¡YÞn/áuvÐ!¡žðÂèîÈÒÈòÈc‘"ò3î‘­­b:Œ€¢Ô;+UœË%çA“Ø!‘%z¹X#¨Obn&›8GT“%òœ—À¥Ê5ªL“-ñîJüà¾Â6'WJHÎl‡ò57Ýñx|âìùëFOíúä¿þr#^VéζGÝÜ1.ùàÛ3g¾óÜzY›ïΟ½¸À|ËòóÎJ±&·§æösWìZ–Ä·>õç™àV¹ÿÂÎþ-õ6äEç;¢ˆuRIë$æ*Í£åbÅ~1G*f/öŸ¹ÆÏáå;1EZü+–j¸¤¸L<Ðï>Éãuèw'¡p#ÓÃ}ßÇRn܆èBHÏ¿ÄuHñ‰ûsößÄ·Šo]ß³Ç|j-!S@—–½ÙõBavH‘»•²Öcµ:YJÇ@¬‹€ºº$ðDM©NQëõµÇ$åÜÆó©R®-‰,S€D¼YÛM„áX?ç…°í a`n$ŒDÌÁÐC@‚„^‡Û ’€¤×jCOØÞ>@\)x<€´ò¤LUÃsNü¿Ïgáõ +^¯#à+°äá +€A‹^v3e #D3ŒnL3= t¦¯I3¼` ³áYá¥áåáÇ»Ã_…UámÄÕÚü¶ÛÐÛlB½Ð[m‚3c´}%¶ELÛ@|!¶«ûä>ëËèÏÑ€DZë+KÃWiHó”y§|¹|·\&Ý€qbvžDÂ<ŒDôK†:ä¤cƒ‹1Lv|ÂPƒ‹ŽÃo½pÝuP_‚Š}+Uâp‚PÌô©0CSŽô£r2LÙDŸF¦óŽÄyò„¤3Öó˜E0ÛLôN»Óæ,A° ë1ôE¡² yÑF•!Né +]\ó6Gä,–”Å2bŽ|÷¦/ÿqÓu¬h:³Øƒíèþû ÿ¸øuÉ–â –Ìÿ¬­RKõ“‰ão“«²¢“¦õà*>‘V™3°…Ë2í‚®ÓÖ=S7ËVˆŸ™=Ow‰í’øyÙGã+²OúÌÜ@z }§y'·3½³ý=ðEú«üáö¯á×”ß>¶šÛMæöåP\:Õ¹tºÝl6{¹4Íqé†e¦¼°†°@8›â¼Æ›yŽ÷ñÎ1|;Ÿæ3|®žoà}ÄU‚átÊ©ÊQâ«4Lóííùl6Äã5íš›ó£å¡\§“{<:›Íñ´É(OÈóH®fÉårç¸>€f7ÖÌ÷ ¿„ïk:‘Îu{H3väEJ›Uò›ÌéGÈÔb6öžÌé‡ær¶™Á[ŽoŠs º¨LJÀP‹‡«,€8dôR¸¨Dᢅ‹J”ßìÍS½ :º +v•,¹X»7ííGï1 #z›xDï4ãÜz³xÞ}'~„ý ¹ø9©¡¯‹Áž7Mî¼InÅeÍãÜ’`ASœÝlÇå0ÒÒç£c:nFG“Åt°:•ÔGRŽGL4¢‰‘5¨‘Äj¸\ʆ|ƒÇ[Šk‹Oß"^ÅÔ”¼½x›(ãc‰>Ž…cÎÅgŸà91up°ÂQ~¥8F:7ØÈ0~Z©Fàš*™Ÿ‹dþHæàøÀöi¿Íû†>2&¿ÉÕu`4(¦›ÏµÍòLçd*nžÿ>ÿZ¿ì_Ü÷BÁ©VŽ ÈÊÉ«L)4•ø.ú +Ù…óÇêÑL?‡ñâ5AÛ×7xb  ÄfJA,cÙJ<Ž\>z¦B’EÎSM,PS x¢¿R~ uCÀRÏÇ‚|,êã£NÎl9-„øI °a€Ø¾YuÞD¡3ÁÈñÀÜi^ŽÉ©j|xúa±Wö(ÎJ¹/± *2Z[ËM•¡ûö³wpTýTÙóGÂX\A‘,ƒÌb™Å~à09JÜÅàÇ‚Õÿ¿,­¬†Ý_\Þ€¯>ÅÃÙ°¦ÎªÈMAÇVäæ%"^•ø~5sbdÉ +òŒBóÕ$4Ÿ§>Ï:Û¶H³X»È¦ ?#>3’*½Œ,i7†‰™%òd'¹”\b¼’ZFÜF% UŸSrø)Šb'i›)#Ašdr¯AO˜QèUFÁ—1 +ôbÜi#/ÃÕ#aþn N—‰×öAØ »áRxÊ ãD»*¥P¤ŠMVëéƒØ5ŠÐ(_êÖ¬nÎÙ©9a½µâŸŒCß¼HÊ\4Ì ÚHÒŒ'½?ê/7Û y‚4²­’%(p\f¸ÛÓÄY¡µ\x%‹Çß%ž|Y‰}ƒç7áÕ½†|Yù/1îš°äø5 ás‰QÅAr•ìS`oÒ¾ A‹"Îo¯Pi5”Ê `PMi’šIRØϺš€“ÿ± +pYŽLÍDsPJÃÊîýa;þFòÏÅÆk´ë:“üT~0‚‰Õa-“F6ò=ANÔjF} \ ’àÎ ŠÓá Õìt`†úå„Þ¥on»p§Wwz >zxà†¤’èrT©m¶k4ŒÉm, ƒK>æ‡i6 Å„äO[µr£°µ8HÜ'®E›à¹”Ö¬Öa^ìÑ’VáxyF®|˜y[Ò&"¿«šAô‚|4f¾ü FÇèÁànÙ‹ ú ÊP+K$@⤾*ÙªckÄ,° 3¸»¢8XâèsÈpŽpæ3ÊÇÙgâ$¯ ±9Ùå–%Î+]=ôÍÎ{éUÎuÊ^úqçó‰Ê— /Òœ[¼» Gë­ÈÀ($mºÏI\¿=þPüúøëõûê?®W…ýÄó‚3”àB!?ç›={¤‘H¦têÚÆxP˜o MŠ#µj'†Õ’µ‘œN¦¦8ßПï4r0Áå¹Nn÷÷·;À©8gÖ¾<É)ðýnÅcŠíŠ +™‚iŠn6Ÿ0vúà'% +“´ôåôDá0ŽµÅŽßJ^¨ÙÔ<–ìV»í@9ô=Hôb†Žö›UqU‰ŠÀa‰HJ£G·/zÄ2ô*¾³¸€”/SêÈÅÉ£R_y)&—Èe yñ^©s“œ¶yÏÏ|·å¶Îžž9/úÔ”]c˜ûð¤Çúam|=wÓ©›/8cÉ¥o›{õ¯Ww_³ÉHÝ6n~³Æa6iŒÎè#s÷Š½ßš¨ÎÜY1u®HÔ¡½ŸŠ¤Ö Â0ø"œž´TB šüz· _[˜„•alV¿Û«$¡ÖÇë +Ú8w#Ï©}Âns…(éF¶W©Öz8#ZyBáŒ&ÏJãö.#ÝM ‘QŠœ{wõvàM8T.ö k€ƒäËT;TbìþŒGB+¬+m†0y¡&µÉàøð9áyá§ýkƒ›áíKÞM5;ä»T{e¨É?W™l²zØ ¥m‡ÚS½çÀ)ò‚² çË/Ò^A\«¹Ö{5»Ì»•}Ù¿1dCVäHŸ– + }þ¢W$üŠ µ.hB{¬4ÀyÀÀˆÔ,¬ê¤†Ñ߀Šâ¿6~°òõ*~ü£ûï½w?~É>|çâ·¯í(yc-öm²6‘Ú²ó±¿þõ1ô*q' ÍŒ‚#9ÖˆËß µèäMë¡÷k²¹†>¯Q­5¶±¾ÓC§×LñBÓk2 BË /³Ð]–s¬†æ×|ç”+œ euF¨ˆ9ä¼zˆºß±Ê¹Öº=àÍ&#C»ÄžÆm—2³à6Qjûe +÷oí\@kÈ©ºzY¸‚}•%Xg-Íñx“{yˆ)h+x’gb;ªöi›ÈÒFÎ÷ãƪvøP‰›=Üö#%aq¶ +Ó‘ý-§aÕiX[u7OÀ2ij _‰€b'â…û¶½öçgæì:ËJ™ìç¯Ù¹«x jwýŽÔ»±–¼Â:í®ñ=Ÿ?°fï)“h»)6æBH¾¹ ê°.\V{Ò/Zï7ýE”À¸ïy‰€—¡Ÿ_åuà)Ê•°»\»ß«±ùÃê‚©A˜CëÔÁççh/Ðii%ŠÙ¡Uûz 4Bµ!®‡‚Ô¼³?í)÷-..­.>´Š RÈ3BÿÅzðÓɾúä„õ¶’ôTf61Ãz±DQìê£kpB”GØ9  +2UqµŒ¢’"j°—EÙR%Ê2B21÷~xéÛW_ýöeÜ/^/zoÕýï½wÿª÷dŸ»Û–'w^}pÉU®Ù ÷K’ÜûÁ½X’ ±§ $™>°GX ±­¶ Äâ,b.ññ†å÷Ì~ó~æ×ß³?ØôŒ;êNYïi®‰ìL×t¶Ûu{½ëN×j÷jïf¹ñ +ÛV÷r‡ù-÷[^…êu“ÓçCØäáìJgÒê&;s½.B4?ì~_æziØMo§w#S$£.úl•ˆž~Xl=,ö.·ž`dúl´™„ .šõC_TL=‚À³ÙF´™I’ ”ù_Vwü)ÛÇOŸû§Ñå ’ßÞð^ñ4îüÔLeö­\¹× Yóf[ÊȘLTÃTèzk3²ÿsÃÏ?{Æ8ï¢(h:’Ì4Ø%„Ý$yüFÝ õ½º>݆Øk±½1]eTëvR”_ŽƒzˆÂÙ&üq@  8!’Ü`ØB…çÀìcâu…Z¥ñ#Y4 úœ»EÑ\%èVÁºÈºÇ*³2™+¶À?”xÀ§‹­G­Ô'büÑŠÁêà!Ñ[žØ=YÁ6Dc.´¡µ,ˆ¹",ÄIÕnøÉ~t"5J—Ë-¢ ZËx0E;:ØÇ]›ð¸éÙ»—Üš²:h•å_\². ­~p|9j ¶`y\ºða›Êf6ÛIûEã–Jø‘¿,^/»If HA¯P?Ž^Dpà…ŽqGƒŠ #×ÍMÌM]£¿.²8ug¤'õHäžÔºHoj«×@¨°5˜#µ\®Rû àÕ;|”݇öÒà]YÏù41¬ä•ª¡€ +öø O£¡Ô½êõjÒ¨ÆÔ»Õrµ3çz+½õÙöÀîÀÁÀ‘€,À¤£ç ¬¢µÀ|J´@æa“š/w´60UR¼ ¸†ŽçÐѾ¨ªa`èû>¯ +`n@­*‰] +OÖÙÃ%É’ cä3Þ­4ÒvÙ±èg°!2isª¡Út7H¾/èX4ót±ÅèëÓ–ÔØnÝ÷ܱcÏí»u×]wýþ÷wݵ‹ØùkÑbl™<¦öÜ°Ø»2ñÔèèã[ ܸ‚â„ûþðÇ•÷ýñH¦ ]¸éB^*Ô­vó2h…óW(VÀûˆ^ø8±öšµŠ'”ä•o(ßSp**“]´ÛFš¥ z¦ƒ¦í¿)’OíÌdmm"éPÉÞë¡~¦XìñS~Õ†f–ðk¶_2‰úL¦¡ÞŸ…¸yS ‡ÑvgLIiTjsÀ‘ŸX#h[ç«ßžÜ$’ðŸýÍãÏ«t«KÁ|ë`Ùä‹%SsóBT;ñV™(‡^íwqDt°Ïä,1’‘BRN—\©¹ä J·¤’H'«jÕ[€bèèFŸŽ¥%ôÓ%GMbkÓ0F­¨®„c•?U´†gMZ9cβ™ç¢àƒ-~%¦‡n¼bæèÄEÕÝg¢f#\tlêøqË;ÿUÑ_rÆ5u¾%ƒ_”'$¨„´÷e$ 6¹ Á.¢~¦˜³˜¹ÌåÌMŒÒ¢§¦ÑÇ*têir¹_gs3«¬Ç’¯ð¾Mn…^§pÄå9…!™Lî³vÒf·I&ók¥,´ +çdÆg¶l+½¸ì;K0IzYÞçñtÊ Œñn…áÛÀ1\’›¡ÊeßÁCùï‡;G\Ë"ˆ97Ü/:ÜÎ+ohÌ®»¡¨Çibü´i£&¿@}áMø×5î…+êXQñï¼iùv´¯+‘–gˆ- ‚ÄئÏGpo.­B§Y›¿Àò„…Ø‘†Q:ŠG¢ép¦9˜ŠäÓ é…í| X-DŒîŒ¼z?ýEè‹ô±Ð±´ª%Ô’^\˜YG¯ (‚™@Hf\[±án¬ô YÿQ•ÇGBÈ›`YÀ”h-’ÉŽt2™JûëÒ“Vü CBc0h5~æy£J"y;V‹,o¿‹¶Ôòx~|$23‰ð!m( +}™4ɤ´Ålñ @X2AZ€þœÛm͹|®6•«««­%´9³ ¨rÐÐ8„Vw`àסà”ÌVØ BhF¿(Ý“&|édzvšLckäi² ß¼Ï"uš Ô>u`?¤P3Ûà# G*ã 7iPØF->|ôp)ïX®ÓˆÍS%&®½ùVY\Ê[†öö{[1Mro¿»I:2 ÒÑ^'û†Û3 îϸÕPbtÿ|ô§³—#ŸE¦,ñ³–¡ƒýÎ`š¹Ÿ¦´›GtÄ_ªKÌ® #èBд*´uèíWÝó‰ž@OM*=õ}ˆIû²¥”(`bbð0®©dE¹JVô¤¤üKUÁâëðü˜¨+zl8Î+ÀÇÎÉ=Gðl®ø¼²x{Uèø¬Å柿,vU’¦—!Ú†4ŠFå!=Çz™õF+ºi3"”8 #D³ÃºÊdò;†úLÕIm§HŠaª­!6„?cÒÞs¢ýûÛ¿rèPeÔÑwµ¢ïºa²"*´›ŒYC³±ÅØjeŒíÆqj3¯kÔmpõÕÊj`#$¦¸ç(ç¸/W^î–7*Üã”ãÜS”ò¤ªi”¨ŸZ`KG[K˨6“Õˆ§¼>3œdÞc>h>b–3e̤¹Ã`6 ~kˆðS~ÂßáõûY¯?Ô˜”&STŠHu$R©dÂßØ!àÉó´ÃöŽ|{»÷×%^>^ö¸Pmr CåH'§V“ʦÆÆPȪÑ|v›Àf’¶a;Î{¼¾_ó=<Áo _¾ '²@Ûö¶Ýmd3>úœ£*g‚Nb­•C¥}µÔÎX®˜›ÁЇZ8¹á©¬5 +l…E01T”P…/q0L® Ed5,”+…ay”…£ ±á# „5 +7\ÃíÖš¡/ ½”CûÑßÚÀË;eì ‹ÆE‰¿³M1 ñ7éCG %µ-V1£&F±Ã% "“a`‰TF*ég^4z—½¬eFãøñ"ëåŒT|þèñ´³¾®vT»8ý‘ÈãOÉ9S.×Ñ1.7qúàF,ÍÄÂäqç¾#žßÓ>Õ™'] #HÊ/BR>IyÞ*4íSìS;;TÄUŸ¢OE.Vö(‰¹Êyªy.ò!×Zq-Û7¤›]ÈÊ«2K¹£•µÖ‘Àä7Ä´’K24t”¼’„i)¢BÄ`«ÏtHÀ¶!—UÀ­ð ðÁ¹‚ÅÃÉ”ãšÍ&Zãs` ƒ +%ÂÛÉ^oŒm‡!S ÙJÂ9x9‹ÿ{ôÿ×Ò.·\¥T)T„Â-GçRy$l±­«ÂäÑ[ÿö¢‹–Äk1Îìáþhm,ž'IljRt¼:íî®ÙÙ¢<|(¶}üê⳯Y\nK²²´klÄ{Ç©ƒ_ £Û®kÛoüz„€ xÏÐY+’-°ÃS„¬Ù&³Ñvù|K»ø‹ü¯Ê}ZÅ…Ê&â|â|ÙÕÍBýE¦ó-óí*+G95©U+uÀúbdòâÑ`‚ÞšY ’`6‚˜Ä­‚ÃÌ)ô˜B@Ït+¶+v+*Ž(äŠøQ¿™ rÜ‚œÛáÁÂb2àÄ-¶;b©­™6„@é¡£(Ú@Û·}„<îGýz¯É;OÄ’"®²km¸i‡Æƒ §7-Fo^K£A¥Aƒhþ ÁƒŸ’ÖšÑM4Øh“½Æƒ…Æï¡‚h4¬©ð ¼`¹‘¢ò¯ âÜm9?Såj-~mGñKhÞñ´Lù°·÷Cü‚/¼Z<MÛ_…¦â‘ß=ú·<|ðÎœ¯µ7êa¯×›kÐ+Sw&œBôó ÚÅ…úËáµÑKãÚÿR¼ªy_ù¾zÍûõŸ(>Ö¨²–¼Vy'¹š|–TØÜ¢Ê2 ø=~›ä¥´æ'¸¤ÑþDÉA}$aÌYÝ9$©†§ÕD8¸R¦l.¤à9£ +ªœ©Z`ðy‰5!ó0 ÕÉwÚ•Sï‡[ÅÂå~žÜ\ ë’8ÍzÄ»^?ô×k•=w§v­¥ RL¢ÿ¤JKŸðì×ý÷eÅÁ—?¼SªvW¥ÔyçÁÕ{÷®~`/9gõŒ™—ï¾tcqhsQ!1m®È‰€hÁ=»÷¬¸gÏnœD{÷ Ú»HÀ‰[@lè»>cs _ÖØüøà^ü"ÞZwðØëå…?l†p㦡â„{vï¾çž={p­çHÉ%ÈÚ[ú:¬Uwjš¯6/3߯xÄ¢tKivg)zsY·Ï£`GÔ¥ ,ÂOt†Ï†Ã¡ ?¦5Ð:-Ú¹R-€6Pš`(b +MžBÎÅb8$siŒÊ#JB鬴/h L +H ¼#E€©¼{Ø!JmÐR4®‚´ŠµT舭ùÛTð³N휩´s-´Áfv—TIëªiíÊŸJÀÄãkÆM¸±h –@šizh;¼\„îã(~—ØÈHÎÙ{ß”óFi 8§­+¦ÅÍ1›ìÄK%|³{èYDZ6~-ÜFçÝ£ óDÐŒ}Ö÷lÓo²°¼5æo–?ÛþÜö—1ÿ´J6æ¸åhúû1f­Ea“·©Ç°«ÍÚæs‡Uz›Q;Õ2=» »0wMöúܲì²ÜZºÖÜÛÈgªb‘_/ŒjM;FƒÒªké†d@o4t¤&&7jgâÚ50³ôa‚¼_pórÊ)Í\§·^gGýä@.båì%mÈ +]ÝaƵ+I¯á´ç–TN¤A)/c¸?©Òq€÷¸0ÜnÐ\Õp Õ½šqµ –lӳϲ„ìmVä\Í,lò¡Á<]ÚòØm£Z<­Ë8s­Y¶‘ôh“¥1°’†ÑKÄ8åÝߣÓ÷KCŸ;ÒÞ±HmÛè&¤½ý~[«{8¯+x$ÊYùX5 +;r4²Øã:(+ºBÃXìbÇÒÈ©Ž¥µÆ¼ZüÐf ,hy¾Ÿ68½Ï!ñµÆÙdþš±g$¾ô/Z/ZŠ£Î{ÚÊáþjð–<æ‚z—ÓE<®Ù¨yMóŽæF~¥áÃ*Æ7´Ö*ì*¨ÄD/¬*™L©òCŠV[MFÊd¦åŒ.2×&o.Tæ  +ÇhéÛdði®­U©}<÷pSnŸ{‘{»[ŽÀÇýu8ÐCBtH,³ËQ"ýð°T( ^':a\_qº4Z­SÍKÇ©¾"–« °¬á&zd‰ŠÏœXo±YÜß):×싧¼ÑDë)‡Þ÷ÿØ·è8ªë|ß›Ù_íhggvgÿ´«ÙÙ•V²lI^­l™ÖØ2øÙÆ?±Áþ•-£µe 4$œ¤˜BÀ‰MHÛ&!`ŽM1Ù†ö᧔&)5M4q]ÅŠ©K!Zõ¾™Y!Û@HO›““3»ç{ïΛ7³oß}ïÎ{wî÷_Ûî:`„ü“)ƒ[Ç&÷È?Î]×¢ +Ñ€_Huݶƒ6±Â÷X%Ö+±¯àÖA-±ÏËVhBbn¿Ç°À¾&·Ïçqk~óEjE|õ"5›bÇ“ C2—ª™LJÕ²DñÕT²Þp¤PLúÝž‚èwS\…ª„¶ñÔ‹ÕýCq1{ÝùövFKé8]Ž—³¬>íã°lnu/Ñ™±UÏq£K2ïtÔÈ| $gÐìysÊÖ4|B8ý\ I£'­7†FHv\÷º™úáa9þã–Ÿ¿Q_bz‚züÃ~C oÛˆïí\±ƒ& e|yñæÇMÑô#3ðix'ê MVë“÷“ýÒƒ2§zÕ +Õ§ +j¥êWqçV mÒEòFº)ÐìKÄJÈ’^M¼"SDHAšNX1 y’ùÅ[MƹA=œ±øq:WQ§“£š‡ÓíÙ1ýž ÆÜžJˆ*‚¸ ¦T9”å ,ðZθXðr¯Ç™.‡Èf½B¦…¦@Gà`€ %›A&]Ð%Ò,¥}Ò$^z‚Ä1SCRV:.„NÜ‹Ó0Ž?ÓÑþ‰´‹óƒÈ?"bü#"È™'Ðä]œãÔk9¿„>ô•Ò}Ÿ1Ü^–ÞNò5¤ñKFA;{#²Œ˜þ uÎ6÷e_XÛè(7j²Ž›¨§NɆoáP¾¢G”GÂn "ýœr‡rPùåçJIqï£ÑRÎÍ»C>ª£õ|](nãÛBsø9¡åüòàŠÐŠèŠºäj¾7´)¼)º©îF~ghòõðwé~þ{¡}áÃô?z(üXô±º¿Sž ¿ªÿR7T(q¥6( á]Ñ]u*Ç”gÏ_SÞ o„ߣ(ï…f Q¥8Dd2/è·fdÔŒžáÞfÒ¾Ì2ÜÖÌç3”Q1h&³×àahã€^¿Ú IqŒ±Ðýå! Jg¯¡©Y” •‰D“ÁÇÐÔhd·ÁǧçÊ| uŒ¡Žãc¨ãøªÅÇø[r·Ûƒ8šN0W$9¡§yXJ·”÷f ©XA• ‚³àK©ª øœÅ‰<%ì5z-ÜÕ›[£z]C>ª×d1I$1‰Æ0ñòÑ‚¾¦ŽÔ#÷DŒÛõ°²Œê“§å)«GY=ª‹<"÷é‚C]"¡§ƒü]Á‚ƒ¹ºš[Yv¨mZÞ8l0ñgŒï`äx½‘ãÍX®KJ8ïÐC­ŸsÜá Œ·AO“P?nÆœíî{vŸfÜŒnFÝÀψAÜè.7Þ=ÅNBä\>SÇ»íâ0~gêÆNþîîmÛ.,»°ÐŠ‚-{×¹£n^üpACR.ŽËrçŧf”˸[{ õ¨ ?¾z÷¡ CwlfÞéSlÑ[GhÕÈ07C7ÒàÈ›ôžñ³´íífœ¥ôN}wu Z¢R[`y€Æ™¥Z[C®‘Š©bzMçÓäiñÒR/¦_Ì=•ªÓï†ìѸ¢aÔ Õ¤^” Õ¤dÐ)ø h(å‚THÔBlr!WÈÒ… 3 …ÖB¾PÐË´‹lcc¶ã +G~ˆ4>¢vÞÓ!²—EqF¿H¥ŸÏ +aŒ{üŽ"Ø%9<(}OV2ê¥îÉ^áO4YnG":Ëëy'8 ÎSG‰Ë¤ÜŽ[3FT<—‰ÑÍ(ŒŽaÐ.1ètD.ó0¬<‘óXFâØÕX&V¼p±âA‹Xqö”fùIæÛÂügÇÛ§_@ÍÐÓâFæ˜8Fæðâeb’1(’ŒÑ¡]5FÇ0ý‡ÁŸo}ãaÌ͇¿ùÈbjœÔ=REG Y!u`­“ú<^%<=€Ìé3’RaIçÔª@aIçÔ¸ˆ&,T›°$åM¨Óó~LrÁh|ºÈÖÝ9¶ÐÆ\²òΡÑïƒÌóý}]@!ÝŽIŠ%¤á‚Œ-ƉÉüû$ê‡öqáúÎ4ÝGn® úq—þ›·—Ž”Ž°Ò[ɘ_®%7—ÈÈxþìy¶ÄIb›B¿`g3ä™Ò.E°^GM+=gú:Å…Ó9nã óѼEæ¬ò)nœU»K7ñ{pVåÈ㸘€ˆÑ„T¸•´ +zøù¿µ +<_ž§õ’ÞÀNy§v«|«v$ð„|T{Vû±V‰SSÊIœl®i’‚Ð4¶˜‰kÉÏ'Ir¯–LjZ\K3îÇG›½aØ"h 9Ùc:{Í@XÐxä„›Ã$Ü$‡ÃAY‹É9Æ9 _“Í6mBZ“s95­Ói-€ÓH$HOHî¤Cò°¥O<,Äb8£)[úd +&&TBrQ’nMžH¾Ív¦ùEŒx':TÇVÇ ÇÛ§#Ú2á¨aÅ Ðp÷6ñš¿²“aÜâÇŠ´Üån4Þ´î2räwXñ|Üéò¡x~m—[lw·›ÔTk0}Âð:ï=hŠn)ÝMÆ„bp@¶‘ådñ6‹Y$GÞü‚1öªŒ%” m³$„<†q^HÿÚB8¸>ô1}€û5Ž¦0üR÷V21qWzé£gA}¼À³ýˆ«‰s¹xNó*Æ™%7ùeYôkJ%¡U…Ê  T +>ZIúH¥_…0®zÕ +Ÿ—tó¿·Ã[dþº¨Ò]ô_4²cœ‹®ËŠw£zXQ°Ì#€¦Ž&…š/Í){Œ£¹2r´X˜ÿäa´WeùDŽÛÞ“")kwçJµ’2磕ûç‘Ûi›o1t`䬹¹›?rñ ëÒççÓ§˜ð²»4Â]Ä¿“aÏá—¥—5êB#ûX²UѪ´|e=ˆBZË4$‘ó;&®Ô;p7D#‡Au¯Ôý(é)Pc=Þè;Î;2¸æ?kj̤Rêqˆ‰1‹æÞ?B>;gh„›é°8 Ѧ&\Db§£˜ucN¬ða2ÌÞ)n# +{å4¼ VÐ`k ÏÜ\øç§2r{¾¼óŽ/ÖtÒ)9)4[¹KÖ“Þ©óyN Ê +ÇÏŸJz¯úlD’|^Î1ojiOGÊX _þ uÇS‹.TÉCÆåŽVZì—ö®¶±GqÇhý±^Eøïïbï¸M-Ž\rwé7Ü4C/ëòÜ ½ ýJãÐHÕÄšIù>õJ&Õ, KÃIùª‡å +SS +…$»€—‚5æw$»”.P]¨3?ñ›:kX©3íé Sg–¢bcªC+*{œ> +-ä˜A ÁAmiËÌ.T槙ÞÊjâ‚m€Ô–õ•­µb?Mm2eZ +£Hʤ{Z¨>Õ#D£‹ò³;[âápjµ¤CÝá+Y#¼ƒgOúðÇuÉדôlÆsûÍf¼Ëâ’Îb2¾-Äê®qÒWZz5’ %=tÕOK¯EJÒ‹ I×%ƒB˜´6Ójè—éß-¹HO„?ÁƹøG‰çI +“3~ZM)îÎúy |ûI€ÙŽ‘n³/N3·.®hRc?|”J?Ž×FÓÿúÈOré¨×åOÿ¹ â|F½cÂñ€ëD Àý €çJ€ +ÜlTð彈G„5þ¿±Ž„ƒXþ @h +€r7@äE€(æq<—À<‰æ$ù,@õ—p\…8õ!Òjjj¿ P‡×׿Ѐ÷ž”h²æŸäf´®˜‚emؾ‹ðº‹gL? +0£  s'À%"À¥n€ÙÌý +ÀeXoᛋ±íKnXŠ«²¥_X&ZXdbùe+~på +€•ø¿Va\…ÿg5þÿuØkëð·Öl¶m: °ùy€-X¿ÿ€­Ø†`û÷®Åë¯Ûp}à†_Ü„ÿûf¬÷Elߟn¸å^ÞûÖU6ÇÆÿ ^¸m•…§lØ°aÆ 6lØ°aÆ 6lØ°aÆ 6lØ°aÆ 6lØ°aÆ 6lØ°aÆ ( +Äà±caT5'üÖÇ;œàöx+|B¥_ Hr0¤„#ÑX¼*‘¬VS™šÚl]ý„†‰“›š'çZò­S¦¶M»¨Ð~ñôf¬K.=gî¼ù—u-X¸èòÅK–.ûÌòW\¹rU÷U«×¬ýˆ_|ôÐ#ð{üðЋ©"ö‹Ò0ºa5ÜwÂÝjT­R££x^…˜åk±ü®rùè¿•¿õÄ·N|ãÄ7¬^þÈ®ü­m©„cõ6]ã‚gñ¨|ßVÒlÉ„H%ó(ß`ÉN”ï°d¬'ßfç=ìžÔeÉ&Ðm–L¡’~Ó’9,¿ß’y”ÿÉ’(X2¶‡ËÂýØ'9hÆoJK±{0ï‚"ô#ázØj”tâÑÊ,]‹å}FF<3¶àW…ÅX¶ ¯„íÆQæ=XûZL7`Mv‡xÜg”ª°óë0ï3ê¯E ÷Þ€å×`>WcY6þ/ÚÅîÚoÜѼnõák‰ +KPZk™¿Ü¥MÆTãÞ½V ×-î7ÚÕgÔn¼_Í57·©K{{Ô®bqðú­=jgq`kq`í`_±¿Q±e‹º¸oSïàvuqÏöžk{64.èš½pÎì†Î⎾ž=×-ZÒµôÓZG*ª}ÛÕµêàÀÚ =׬¸Z-nüئ¨}ýê ž[Öß7سA]2¸v°/îßÐTP‹xf@]_ÜÑ?ˆ·ÞÞø{ ð®³a!ÌÁ´á¼Aa‰E¨ .l»vžÝb †OÝÿGÍ?ŠÁ˸¶à{ˆh0¾´"^º Mп:–£0Ÿ-Žªúg þ[«ýíÿéö¸ óóW5—&þ™?¿<;êzÿ«üî> endobj 1936 0 obj <> endobj 1937 0 obj <>stream +hÞ”Z `SUÖ>群IÛ„¼¶)]Ó$¤iKÓR ÚÒÒÐ…­B i€J*» Šˆ:â‘Ž:ê¨3¢Î¸á’‚#aQq™Q¦Š"è8 +ƒtGÜió÷¥Å‚Îÿûçæ¼{ß½çnç~çÜsÒ‘™V‘Bµ5“óÿëØΗPóÈ?ëêƦ'2W=CÔ¼‰ˆïžµl©c͹Û2Q.!Š8<·iÞÕŸ-Ï«$2ZAÃç]uÝÜA-ú’¨ÿ-DégçÏiœ}ð_Þ$ºþŒ7t>*L­t†H­Å{úü«—._xý¼/%Š½ïªE³yüʳD–¹³®n\Þd¶D Fÿð;6^=ç’TC_¢kêˆtï7-j^7Þ d{Ó’9Mi‹°~— 뻆„n?·’žŒúûõù”Æ6-¯Ui®ˆÕë…A)„>R§;JQ!/-¯À(RT7¾Â’#tNw¢kÆzRÌóï>ò ‘r¹îN9)ºXÅ”‚@%”Žòº -s¨”™gˆ::FH ÅÂì,“v‘%ôý‘ h:½ÃYT$Ë¡.rcÜÉô0½I×òõºÏCïÑö*/éœM#è]EÊ¡ÊÅ\'ìºG1cùi9ߨÌTþº+tŽ"¨Ô˜CÛh?G’àwu&•|t›ÑÃFKèú ý•:¸ûx F´ÓCt­.^#vwÝÚ 9åÓ8º¶rÒ¡óë)ôgÔåÐ j¢€»[èz€^EŸCöÐwd dìn­£çi?½Ïù\ÈE|)‹cʵÊ~åD¨†’0“›ª4Ù-£›±ŠStŽ:9šc¹?góSb ˜,Z”iÊ3:§n¬n²n®îs½¥óX׋¡ÛC›C£‘è½’ÖÒ=´™‚¬ç$ηq§X¬”CJ&]™îfÈ×B 4—–c†»èQÚ‹½ƒYñt>€ô‘8¬ÌÔét#t¯…F‡æ…>$#ÖåLÓ*¦K°¾ùt]O÷Ò´ZuçwŒ3ØËU<Ž§ñnæg ½%¦‰ûE›Ø­[­Û¬{½ëÛPb¨0tcc­åÉO ¨i=H[i'½Õ|T$Búu<“ýüþ#?Î(“•Vå+u¶vèÚØõÏP;°Ì@Í@*ÄX5TOÓ¨r»žn¤õôGz–Þƾþ~M]lçËø¾ñQþFxÄL¤5¢E‘xÛ©§økå 8Â'ø{E.e)F`b4Up"9”í<§ïâH8Q¿™w…ŸÑN¦ÍÊxšEíŠóÿ‰o fq=bá¨Ïi&¿Ë7+> òKZÍËE:Û ó½ÊLñnÞ$E.×R!%þÃW‹Û Ï›x¡²/dïCÃîTìú ¡Õ°’ÝçºÏ9Ê%J¥¨í„½åI]7Ð÷!þÝ<šQJo)s­r¥(çXøו?œ»¯óe}‘r§8ο¥"݉þþÃ+J¿Ð•Fª ~”Ö%x|èze©¾K) ¡ºYÐï©öí ìík`l%lL'©ÀÐ`:ÅÏÑ_x>t#ÖÅ ËjçBè…ƒˆz Ïݸ6ÇË‹‡(Šßãj Ë¤Kþ§sÏÑ*¥€¯ä¡‡uw*›Äú®+èiòaý‹ÅËô¯®»Åzqè‡üP¤â§gعöç:ñ­ +ÝB+C·ƒßÀlÄýtÔ[ayïˆ(WÑ¡‘TÃ_ë’Y¯¼ëï«Ÿz锺ɓ&ÖÖL3ºlDiÉðâ¢ÂaC +ò˜7 7Ç“Ý?+3ÃîêçtØÓl©)ÉI‰ }ã­q±1ª¥Ùi4DèuŠ`Ê©rò;þ€.Ã5fL®|w5¢¢±W…?à@Õ¨ y¿Ææ¸Ó ιqzÃœÞóœ¬:J¨$7ÇQåröWºAž6±å •.Ÿ#С•Çke]†öbÆ‹Ó‰ŽªÄù•ŽûUQËæ·Tù+1^[tT…«bNTnµEE£R ÁÕÔÆ #X+ˆ„ªâ6AF3VHvUV’\•r Å]Õ8;P;±¾ª2Åéôåæ¸b–ëò¹ÊÆBÚ4ˆŠ€A›Æ±@n‡Ö;Úrö´ÜTér¿Ç4Û5»qF}@iôÉ9b<˜·2pýñÄ_1xlEýšÞ­)JKUâ‡|miYãlšXß»Õ)Ÿ>Æ@_áåo…©o—RLÌÃBäòåV›šãª’5þ+HW¹k~Ë~HrK€&]çÜ’œìÝ:JÉUŽ–ºz—3P–âò5V¦¶Y©eÒu[“¼Ž¤ [rsÚÔ˜°4ÛúXº &sïÂœómZIc—¥êIçÅÉrE®±€AÀ1Ë•Ô»°‘Bù˜SH-³ +Á†Ñ+0Ç° YáoQ‹e½ìлU—£å+±»:N_XÓØ]áV¿"Y”à80´÷”O ;[âÂPƒÄGhïCrs–Åï\MªÄGµõèæ+΃ÌNyªëƒ^º/UëÃïºd³3t §÷$ßÀ“¸‘óBºF;piܧ ™Sš¼¿UJ!½]$åv?Þ/Ãìïk´#÷P#ä&é]È­’’„qpž•%AŠ m|I~m廵 …Tï¥wCË8Ž7P_ðË»I>ªMô[zœôDè Äj6ù SOâ…Mr‡ßþ[ù¿'1¦É³ ²tÓ³8› Rĉ­BÝUô[•I¥+Ä^h„|†Ïгü…&§ÉõHI’”k5»’¤œ¤W¡ Ïëé¥óò\M­š<{dªÉ“þÝ#Ëó2ý:'Ïôˆ6 +7ŠæŠ+e}Évàë4F™†xÿZº1Ú}ü€x™e¯E4ƒ¥_#Ÿ¤JM]ˆuÔ´t=i:ú;¬£zºç™ýT© +–3JëD Ê^úš×Ð:¶‹4èÀTj£/yÖ~Ç£õeꢹ¥c 1þË O´ÝK[E&Ôlò¯ÕV0­ Л‘H`¡XAx§ ‰§!ÙzÄC‘…´;BŸMO …wµþéàH¥§h"R ÙµþǨÖâ{úNt7ìD3}®õ߈ö™ôâÞqèÕ„ÞßC^Åú® bŒÒ„V[jßäÅé,„,vs_MûÎðÍHóy¾bçÑÊû¹YÜ-Êu¿á §·é1NæFj¥Âµ<@Á6ì‚¥4q¶(àtŽ§vžÇ‚Wó\ð.¬ž`/¢Êj1„¯&ÂÓyý©máô¶–ºGæçùvÀßw›-ÇÔFàïú+4öPèu:ÂY4XÓ¡fÌ·z÷LèfÍo¤è0‚¼™¸Q»hŸpsμ’‡ÁŠeàŒ¾‚†N·ÂÂ>]:L'é÷ôŸÐ7¸3OÐþŽb(–ÆÃ"LJ>ÅŽÒB]X3d!jÎÛ™iŽfÓ¤Ý:)Kº•fAcÂ}e[?ÈCZ³‹O³ç$z[8ÐùSé¾=PW£Il)àBô;Ý=ÊAM~®Þ§¬Ö9Ú ­BïÁZï‡~<€Ò>Ø€çéCºåƒðRüœè7I/¶êßhUÄÁÚÜ‹”zóÕ`ÄÇÐÿAÈä÷x6ò:ú€=8Ó;p.õ°óèv.`yJ?p”öÛ¯k>»j­á <–üe:éÿŽcè ܱ‡i|¡áZú=Ûiî’ÔÐIèp$oá­üß ‹„6›à¬íT â0’WäCâOÑF®PŠá}Œä°wy#îüÃЮ…|R˜9Ä7‰iü¤ÌŸñqnýaC¢y'|}«ùYâø¥J±øþB¡&=ÍûÀX˜ñ{Q®(˜ÿø«9{ÞÁ¥ü(î‹Õ"sZy ëâ±@S?ÎÃÍÉ¿â›`]ï…'ø <¿åœ,nÑ£b$Ö)0ò‘(tT¿Ř焑Oâ ^ C¥Â«ê„ý^«Â/C‹!…3ÜÁo+ñØ]"×ÓKgtg¿ èˆ> åMø¡ +/*•P.犣‡¥ÏF¿¼?¥¯è4/DMôPù.,Þ `g$p4‘æÂg:B>rC·ì¸]ràãÐdÜ @Û•XÙAÌtŒ­Ø?皇³|èã?k½»0úxQ†0:SlÃé®îj©³}€;f:4dü¾U¨ÐbŒŸM Ô_ó-OcÝ1ã´¶ÿ,îÞ4êЬ‡ž·Ö`-F—aö³ò—p1ì¼Ií“Z$íˆì±¸8‰ŽÄ¾$õhÅ&p< ­è&ipOÚqÿ¶c„éô$]±÷aÏDÐÚ×èSø£‡x©È§§ØɈ(ïãWy¡XšqÜG¬cy€{e/·‰}b9?(¾‡ù: ~P2D%R±(Ÿ‰'D¥¶Þ° “ôŽ¤'y1ýÔ¶„Ô\à5õ¦°­Þ«YŸžÔÛ'•äÐþ†¦µ·¯Ú›ä™Iêñ_{ù±Óy¿6¤ïöouî½ü²,º¤? ö_»¤•êñƒ%5ÁŠœ@Ý.ìu÷E©²;•ƒ<”ÇCLt¼K®uÝEéÈæ 'Þú‰´ ’^ëÛÓî„ë•VÃÆ•Ãzbl¦ ìÏ*Ì–ü\˜ªè¦Ð9øËr- s·ô ¥gßP+£)Òü¾ÿ¯=þ_{ù%sÿÌè•blÐ6X¼Ì^cû©X‰_‰%"–èmÞ+µ…uGXo‰ÇăbØy \V–òqŽ[i>ÝÃç#J~¯õÈÚ*™”BEÎõ=›”»9KY§Å¬óTÌ(ÿBù?Ì7A¯Úø Ⴕ½Ÿû Ÿhoñ^~“cá¿÷²çó‹Ü.EœÆüï@½Q5¢”Ùôté%¤Cˆ²p <€`}"ä½C;ËOiÏ„µù8ÇqýQŸ ·ö9-JîævÂBH‹Ø Ž·É/¶PÆLðoæ êÿ£Ð †Õ^ÄK°ÂUü‰ˆã?ð}"]Øám~Ô}ܻ݉÷ó§|FLäÇa÷¢í?ü ¨uF‘ÄÀûW~·‰OðÜÙó.næÍ 'ùRìêøßXãúwä;ô7ØýHÚŒy!¼{èhù¸e+à­ÁºÁ +§ÂÓ^ Ï{[èüšvpÊHu?ˆ»ôŒŒsi(jŽÀ +\ƒû}+= àêå[hoècDUƒCŸ@7ƒo?ø~…Y^ws¨ƒ¶ÐG¸NA#:ÀsƒÖ=k¹•^Àêp+n®AŸò[üv;´GÆ…bˆØ„<ˆÕàbÈä÷Ê^Øέ¨=Ø÷”„w‹Kù4Îü;[u:Ïá_ÁÅjNsòź´†ÓÝé"}Å©¼Ì§‘zÐû*n„™ˆ¶Špæ¿ÓbÎàeΤn¡TÜ‘2ɽÍ.]…{èjìR³¢b‘˜""žo?Ï +¼T¸×beëà[u@C·kvy=P(µç$-A:,ö‹Ób%nI/ߊ›°‘þ ¿äo|'Pó:?<´ó6þ«ðÂÖìä­|sþ“¾¦Ï-­׊g$"ÅóâmÑ®-¾XËÈ4e6¶“‡g¨¤O?¨´¤#»2\*že  …V)s·Föì *s·Xn¼]™)Vl™m·ì«‰•Ë¼®gÛÛmíÎö~íéíyí5í3Ú¿4¶÷mOk··gµ{ÚG·ïmòPoŒ±ÝµèþÚö‰í“ÚëÚ,#‡(S1Ù¥˜v*9ç!ד¥”V‚=§Õæ)S°¨)h™‚Eù•:j ô«£ /¨ÔÓ² +Ô +Ú +(u^ST™(SjD¢‹ÍYŠÅ—f‚6‚vƒôä+iH m¥ö¶t¤Ã•°‚V‚Yð”o5 ™ÝµÏŽ‚ ZKYw«¿»V`5ŽœbŶ<[“}((Ⱦ-iMöí\ÏŸx³›ì{k›ìãòšìƒ\Mö~h°ƒdŠD j¤„¸±1FïÈ>b²è Ì™E¬|òX홦=“½É³ÌGf™_Ÿe~y–yÃ,sÝ,óäYæI³ÌÙ³ÌAžîMžj>9ÕÇiÏAÚ³Ÿö´sý3EyÖÑwÙwñ -6Ë?õÊ׸½l:~ÁþåèöΠ,ΰͳ×ØPÜb÷8µ,+œ¹då6û”‚È‚Èa­;E$×Ê;½C ­Z/3´Z‡ZZûZ3 ­†V·¡Õa°cª±ÑdŒ2FQÉh †Žz=òGZk„*³|ê´²*Hû/í7\ÁF{ˆSªEõär®ì™EÕ—;_Ov9jâ´€ÞUÎØjª®+O óT ¡IBOu ²vz}ó>¼ÄÚ S]}C²êÖù§Éí8«Ì[7¤Èü¦[7ø|ÔwYYbY수¢Q•?óðw?=?~=½?Õµ×í&»H‚lì¼Y{>åík° ö§ ö ûƒ½Ô`/0ØzõšŒ^­Z¯V­W«Ö«5`h}ÚÐ:ÁÐ:ÆÐZjh-0´öî•h ÜS=¹>ð”Í, !›¯:p|²cö5ZL®ªÜÔ!óÕo£htÕ$­~T¥ÏW£Ôø`î4¾ºn¾(¯˜"ùÄ”(oo>JC}åvrÊLã£4m¼´‹øl¢Nò¥Ë,ÌgÓølÝ|F¯­ÖYUÙætj<ðËk5žÚxÒx”0³á(95§áèOxl¿€'ýgyzÜœrÏÿò©Z ‘W[ßf¤r_ÅŒpÞWm¡¡È\3âþ”tP9EÑ_ ÊUˆv•SYY¢G-á¼S UäîL\‘²CGü„ÆmBµ¹»)wdîHÙ]M}äßä»›W w¦ìà'º›TTÇ`ŽÑPµ 2üm^zMóÒf,r—f÷ìÒ6ûž£¶y)>äiFí­¢~î‘™ÄK}ù“¿ÑÍÓ ¶(?ÆãvÆ8çéèœCÙsΫÇmèÐíº,êzOiáIÙ[Ÿ Ö9s Ϧ? X›?E>uÕ‡Øÿ×g;(¯Dí4ØÉ®~C +†!žŠíjÌp÷M‰ä‡'[câ0ûý›.ÿ“‘²y…·OfV\‘Ó—TæpX‹"‚¡=[3<zä[2‡èº_enskÕ[mZî­IH*(vŒsŽÍ¼[}!u‡3âúÌ_GÝoÊþ´3˜ùû‡öŽ¬ÈŒ~\”56kzÖY+²n‹ºÍ¾Ùù‚ý þ0ósõtÌ©¬ïcÎežËŠ±Æ'¦ŵÛìc"zÁ„²w˜}Lvjª¶ÛRSS<ÖxcÿìlቄµòdÁ†e¤ÇÚMlòZ 6"OÎÈ )ÑkJõÄâSQ óäÞHbfOÔ#aKÔˆ¬aq…Ô%†Ò,e$7–ηõ5—‘ay澎ã Àî‘ü^ÕäI-3yÕ<Àb’r²XË4ÎñÚÐ{¨¬¤³D- ?×èxnT÷aÚA©a17,c ƒ“ǧÔÐ|çà¾ñVƒ!"Âár†«P7tØСÆ Rárr¿ƒ£R­N'¿òè!sRÊ“,XÑU*+àA•Í åKb‘]íuÊ©˜kÚñ]ƒK—®þzÆðXÕš–3zðsSîËt>¼‡´ßÂIwç_*j½Å™jjLY¦1-¶,Þh-Ê2ZŠ´ÿ”ËE”GU‡ê´g¨5GÍU¨yê@u:XÍΧÊÇ Q»‘‘$Q‚ÅeI·¸ÓEztº)7Pô S§2ºÆ41z¦É?·ÿJÓòøÕÑÛlÖäÌJ®HZ—y(SŸ]ZRâéÀg”ÅÚ†å–Ú ò=(n›mÏ7Gơ쵪êTP\\”Õn¶ÆÛR“ 4‰—}LFf¦Í–fE›L6¡X…P²˜mÖx«Õï\7 (6þ);»¿†Å^si)‘93ÞcËJú âò& aõ˜²ÌF눬x«ší-õx%KDÉq7凾õF[ŠùóE>ŽOn726ºÌã5÷-ÓÞYŠÞÀ¹VÉcÕ‡Y­bH—ýÛ´äXSdL×óïaè:bO’uû»ªg¢ÕlŒéú—Ì#UØbĵ¤_ -(ºçcý¼`èÛ-–"SÖ¦nXÇË3ò P;°¶pYúVý71ߤG”ǯs=åÚåÚïҿƯ¥ WR:¹ÓÓ92Ò"qc2MUM&‹%JµGª1"Ò¨¡W¯/d½^ˆ(¶9=)1>6F•è5ÛǤ©j °“t¾PDÙj¶Èd½Qn[‘11-È£¼II®OVR¢`QõDfEjqVŒªºvp!%‰»·ôó$C«¶f /HÖlš[Ë·¸‡h™=œ¥†³d-óš,q{’9ùèðžÂ ÆÈódÊz«%²Œ2ý™G2•ÌÌáŜÑô=&ªLÕÀj*S½j|øÍ"ÙU¿Ú¤®R÷¨zì­a[±ª&¨ÅQßnçÔ jiKñ)Q¿*ÑÀÜàÁí¥v6tß±x9oE=@n‡Ì; –ÌÒ¤oP;Î[ÕŸ"÷§5¸r*ív¬$¾é¾®¤øjÈ•hüÑúþbԊ̹ì íJéØK#Ò€N öÆŸGlŒŸöËÀ +´6­K€Öãµk>»Ž¢pƒÛ(Çžf·Ûv§½ŸÝeOï› Ùb-J †ÏoÞáÑE¢ïJÁ©&VSL¶¬z1-e™hŽû îÛ¸omÆ,[VN!sAJaê8.O“:ßv-:Ë›â.èÓ­ Úy£Ý'&6N»«G»Ói¶T‰áhûh2pt”A§¼?oC ¬a+‰üoÑ +)¬¯Å>5¼båÇêìcrˆR™l©6+®}¡Vl±qÖØظ¼³°²|zÒ<éVO2Ô-%%Yèb<ÑÑQQpŠŒ©±¹Y¶Ô¸X5årá‰ãWȶnÄo¼})UMjª#u`ª?µ)5‘úÆ€¤ì§8x +ñŠ§&¶)VÄ&å¦&Ä&`”¨[Âö·Û‡iE¶¤ã¸ú™Ú)Á©ÁSâSaZ» ÒÊ®1ðè»m¬±ÇÆ6hHmмi)ÒâB’~€æˆÈW±òNè#ó32O †ë‘Ÿ”ïÚéöIû&ðL}Üàt±’ÿóàÍç Œ—K§\Õµtÿ^ÿ"Ÿ£6Éìo¼!\ËCµZ]Â¹Ò úà åU™ËZâвÎvݯº\d¡B¯Õˆh\gÖ3¹"#cæä}’ä[Ú~Bn”WQ¿¥ÝÈ‹}%ã!%(c‚ÔF,·{qº¢®îk‰v:uw¥Fšúu¶Ôhkš!JN¿uWèˆÎ¯¬‚wRÄy§ø˜o3Üc·¾6ŠDñçA RìÂ^U¶Hö";C}ì8æk­5ˆ¨ÝëŒëõë‡=¨p˜Á”[ÄŒè׬Ó+C‹8—(§†;]"Ñbc&Js§[ÝîtSMnPqlÍsFEI8Û­YeQŠ½èKv×ðÃ95Ô©D' L\–àu•%y×ç´Ü îâ(ÓâÜ öÚŠ¹‘¾t›kÒv{£cËjÜ3Ý‹ÜϹuîäáš•†Õr8ÉAŽ÷Æç;#4ƈ™‹"”ˆ¤ât·Z¾?QÖƒñŸI„ÂœŽÿö­ºêLß;£×Œ^#iô´4š‘lË–,[v,Å + +ÄŽmˆ£G )^ÇILpüŠ“PX^B(aÀJÓ4é#äY'P`—„ +Ý–SÚRJ7)M›b“Š­ýïÌÈ!Y =íÙž={$ç¿÷νw&£{ÿÿûÿï¿6ÐÑÑÑS9QãØÉX¬q¤1srDÍXÍØY0U_]i"zαd2ZÅ©›Ë÷Û[89œÿ ((AGDâÞµÀ|†äLð®N-a¸méZ^¼–3§U ¥DÒd%5Ý$”‡Cz¥/5¹¥ªòÒò˜“wM‚À—¾ÊûËWn½ýú-ï­x0@W_¼¢ëE7k¶}oî¦ÍºU2Æ.Øüâš/w.¾î?Ö®yøúw,º!x»Õ:%œÈèíV‡à¯Ëù¼c¯…Åß:¦/¸dö¼.‚ƒ&½š”Âú>ÜVŠ|‘,ÄÿÎ+RÛ“‡Ý’/ºH/G }¦>3óUÕVÕ¥ën¯|¸v»pÆ÷ûZFÝ)=+=Ò˜³¬­1hÆæ=À3îÊò]Pª2ñHõz.Ç¢  û¬,f‰2#YXÊHþWâd÷•ˆõPß”uù’(‚#¹HgdSäDDñ5ø¥¢tn˜ƒj¸*WÓY³©æD¦Æ;yÕžbí#D dZÑ>Ú1*»ÌùgBCysêæþòï !ÿäË¿SØ`r+žØ }Á±©»¥+ìˆ:®ÓÈÃSp©Yf2ÚœàÐ*õXq +gç~mík·~ëë _ïöÚ,v¾eüÔ½;Ô½õův=@›ÓF›\Ü3AÕtƒ¡©öÒÕטּe[˼ÍÂ;/ë}þ‘Õ¯=БãýIþ¸Ö¤9 þ-†ß;„øükû`Á {P7dè`o‚‚'P Z)ÊИ&Uv…) Fkc™Çœnrö°”•­w^$^Ê79³e‹ùÅeëÙ Ñ­Æ-ü±f]4#6JMÆ¥x)ûqcÄ°2z§m›e·å{ÒÎÒ]Ñ §ÍO[ž’—ýHü%ú>Ãþ\v6êp:ù0Ë°FÆ5ÁY¿¢€ÀŒàHi°ÕÉ#Öè0Ia6Ræ¤QLŠ¬[] #`ăׂ‰¦ƒ®\E!v˜–²Ý8Wa`XA219Ë%‡WU Ì1 ù%„™JI´f­³¬ô{VÜií³®·n³î¶j­Þ*ìÆU,†¹XÄY< k ñ{Xs/~Ÿ ì‹3—> ²v&÷fÇÀ öÔÈÁ¨Ñ Ì^qMl-÷ÛB7ø89ê"`A'åH¬@#d‡OdHI§áÁ·¸ŒåÆ#tNïö²ìÙ›{+x Jï¼¢™”€ÅÑA+$Z&ÜYX…{)ÀGÁ“ẋ)ˆCSkúH†‚JŸ>õà±Ç±áæ7–/é÷;CÒ8Z°íæYÛoÜ3~z»æôŸ¯#(°ãØËß܈ïƒ_ þyÆå7>yõºo¿µoÃâ2~¸ðàB,qÝ!dmãf‡•Ð‡X{ˆ˜“[ŒU„ø¿‘%WFru#4‚ä +1ȈLÃ9“ÈŠ&Ñ"riæ£r“Æû•rÊõļUå9w´aF4ŠfZ«Ñ4,ñdÊÛ=—ÚËgÓ³4³øYÎÙ®å™m)ûŽ÷-͇n^9†©tDÿˆq©NrK¥½˜CU≤F!'ô ÷ +Ç­à«ŒTá*Zʹ:]Ç]´Ë[1åK +„´ž$Ò~rT†Ž1!²›N§ÏÛÇýa>Ä3‡ó£Èwo¯…ÝÜïõò&Íp~´¡abGÏÝqiòg„C’)j˜p)@;¦ÍÏ2›¼­ãõ™n‹ÙÎU¿sÏðñ…þxÍw_™«½rþý÷~<?äîØ;µÞê°Ú¹ÚÎ׿ÝwtÓÕ?z´Þ|çü+wmopbë+k’èT¶Õoð¦}²XÓL‰®jKl{ì™’gb:äDu¨ÂVYÒPr0ú|ôgÑQUá¤Ýæã’v¯«öÄ«pµÇÀ˜¬œM Ï%³ìÞb,p> y>°ð²\p˜²ÁJ)€íIÁS­ãR>Ž ù&ã£U9ßQàM)VæUÄãrîç0çM¦Œø>T€~b¥í£c°{oM¦vHD5fιü˜>„ý à/¢:“dvãvɃ!eõjl¦~~?–Mm¬”/ÝTKÜ?ÞÔwÓd[У·ßwÍÀ=–|‡ŸŽ6µHê1·õ˶òŒÝìh÷uMë ,tÍý||¶l.Šð¶bqŽÁ¿ a–tÔ’"A +{È(ZBÂÊø­ ?‹êRƵM tu²-ª]Y[¿)þ@ÃsACm0OTïï¯~©Nä(»…Å×BȧÄVXw k4 +æAÀu_”­fsÖy›G°Ûm–àî˜$'I•z!]¹ÄãÆ\NÀ9a¡°IØ-h„§¨Óh +r‚™¹J¥ñçÏ¥°5•Kõ¥Ö§ÞKiSÃøY&-¸…4;å 5íH6mŒÐ‰‘“1aG`³ÓmÌŒœ¼Í¢à PºGGM›«ä*÷ÚÊêQìªó#¶¸¿ÖžÉ¿‰Øü»( ¾!ÿ¦j‰èÜ´C(žÝ[Ë—<“?‹ü0+ +‚òg 3:À4Á(­Sp˜°$„¬±Ù’ô`šXÎð€æLž¤jC˜Öé-TXU71ÓÉ*X =£5é(‰ç¥þ}¶DèÎ…3ß%šó‡–[Ó¢%µûµÍÏ-¹çÀµ?ß0ïë/dÕŽñ¡Ž=,«Ç'‡®¸´zaÄnuqëŒè¥Ÿzþ¡eGo›ÿÉ™é+ž˜·rëøÇÛ×>:t!MPkC4ðGç!¤ª6qÁÛYŒ†qz5^çÛN­ÉÌ9x§bœf£Ój¯­™È%ÚàB«”¼!…÷Ðh˜öeÍ~ÎdfùÉ ROãÍ€·u@f7gýäMhrNmŽäï,/‡òB£\ÛüJ­*Ïe=äͲ|šÏ:ÒˆïçŸäOðÞàSÿ©Ä÷rp¯|H¾¤ý”÷ÕSØ#§J>i̜͌}*½¬Dzž‰ÝÆù3{h—ì_açôáÉŽ ì^*Ø=ýDõ ÕáoáËdóöÈ,ð²û?$^TkûկƯøäýó-™ÄÐG`Í@Mº?k®°]¦mµÑŸ }$&šÈuyà‚À œëò HÈy+l~š:løZÄ‘œ¨œHÊqýÜcÜ NËy½†^ˆ:®f‘tr$6±ç/DþÜ/ûèGçÑÓº"/©¹Xþ’¢O¤y°ĭ£Ád°0>Sœ™Ä4—XJ|>±$VRŒû«½“¼Íœ]¯¢˜(^Æš®°D}•õÑæ´%íIKéX:ž®O7·YÚ<­õ­Í‹ÑJt²·XšƒÓ¥-Á#¢×××%“h*3m˜ú§¬+kͳTvqS6;mÛšÚÔÌ1.2ds8æXŽc­!—Õf*åÊQ9WN•ÏV³¡PeHJ1y(Ò\šJÏI¦Ó©› e’h:3ƒ ¥ÛÚæ4·µMŸÎ6‡f47‰:ºnR[¬VÁíáÝn’‚!!ã£ÑXsS“D<¼ã ¤«Æ›àhéAÏ(“h:côÖœËåv‡r••Ñd.šiÊe¦²Éö +;EIÎúœJ*0wgë§Ö»³‰¤›dš8·èN¸×»5îaꆽ¡¢…iQ2- +Ó¢ò´¨MD×G5Q˜–u%sM„Oõ7á&o»Ûu'ÝÉvö0Îà_Žª²Œ)yGµRò8[áÈ?nDNã4Ž4&”zdB­ÎËç§Z`Ñž¿ìø«º>g’ÂÐ ðó'öZJUø‡(JNeƒ|)$RÄHQOŠfR áüO YI ºéVëZGÕ:©ÖM$r• á!œ^"EŒI­‰Íœ†§¾½—OEßÕgçî`= ÞÜ© ˆ~Ø!iÙÿ® ¢ü˜ý–ÞÌ—-ÿ|Ñe‹t_àCÒÖ»5éhuÝ´ù«[䣰»4Eâµ- VÉ£¿•3Y[ä!zѼÓ›§7wÏâ=cˆ¥Sÿb³%§ú#KÇ~&_n擲%•×(—Ÿ; +ýxÁã€fäG¿>õö^9)x;»Á–ÖVØÒ×øñ ¦¸¯ò+ýS[˜]Æ]¶ÃÆöcÆc¶w´¿÷X\%m¦6Žfy­ÿ*í|Ý÷2þÿZ~µ+ÉËŽüæRm™g­v­{£öküFÏÿÇü‡ž³~£EBF§¤×Û¥F6Çö³»Ù㬖õ >)G§)Ú˜âå,@»Âý/ ý&ØÝù3È“?³×á*!ñ»¿¯_E%A›aË´²@i"u)eS,xqêêí¯>†Ý›¾ùêÖñÓëV^ÿýÛºvÜ<÷ûÒ+ß‚­þtëíã£ß˜»ñ¾u»Ú×ì\pËw•ÿÝø:Ϳú•¡ZüB¶Ÿ|e]ÀN5-NúŒé`äPüÙjC˜ +ÇWG¾ÓlKOPö¸).TEâÕmÂŒš%hÚ€îŽÜû:ÚÂl}í0ïìÎ`ž‰y£BZ˜én6& ¸&a2›‘ÓåõŹœv‹Ù¤:¢²PPGÔlM”kÙ,(§†eHW%iôåktº,w Ž­”ô7-L"ýz=կ߭§ô¾If”„ôî<øI€n túë›Ûºœ|Aš»º€·NpÃ8³g§ Cr¼>Ë´“c%_£çEr5¤!ÀBœØmeŽQ’su+ŸBµù· Ž{k_,\á+ð©ió~ uÚ;½4°¨AØÎA5£ü¸Ò4e0§ä”W D"À¹-äd²\“Ón¢Êµg­|£—!r>d¶5ž³mT0iÅš0bªŸÉ$ 6šÿð›âÂg‡v¼0¾ïõÝË_r[@ÎåœóÀ[2¡ÀwïÖí7íÿÃvzÑC þí¡—Æÿ`\§³±`‡V§ !‡ØÁ1ÖíX¹müãÇ×<1DØd¯æ>”Ä\6ZÅYÓuf\%6Š—‹‡ãŠkµ“è8‚?YUNB ŽóápÜ9ŒïÚÏI‚11L{²©X“Ã8¦ §*âaNÓ…<œ‡òø&W-E],kdªºJKÃL2™‹3Fc.ÌÄãL8L“…,[˜ S¹ðBÐÞajíÁv‡Sì0EíéS]ÏZî}’ÙðÔÄ>•Y™H°àš“JÉú=Ð>q‚KÈ7w²qLfD +ǯØæV¹}¶-`×0h»lÐ$™ÜYFPò«ô…,ZM¾N>Ÿó‘!j>pXXs`¼aµvqçU¯\ì6[ìÞ©÷uÞx‡nµ|:°5©œjÑ‹8›Ý­Õ½âá¹:ÉìàœöªRßÐl_ª!Ûõ'å ¢(ž›^„RxY6„Xdcy«ÓZb(ÓÙEm6«}× ϧV=Z"ÇIA—øŲ²r•¬Yë‚uTuM]2¥•-,SàÖÆ`«Õƒý%'¯LµÖTÇ"åed,luC$5ß–ây¡¬œ‡Ç:ow ¦Ú‘C,Öøu5Õ~ÿpo*WUV,#”Ž+Ãe¾ûQÇEèk–“k¸k°wòS¸íDÙ¨q…‡Ÿ ¹’f2rú,-çQn;/ŽýèˆÉBX=VïmÖ^¼­ƒ$9]Ip£UÏ\esUGI-_Ã$‡ìM[UO…he‡a‹U# ;paÓº€/°`‰ºè¸×ï´y½§\+IýÏãSý~§:å7˜cbLw‹<0î—M×@›íœÙg"'5Á±µ‡l=p7K‰Nó磬þ-xÅß!ëþw…ÑnBR÷ÅÂùûŘRÄ|“"ÖB¶r܃ӄ{–"ž#çÄûm„O*"¼Ôt¾„ÞýŸR:Z”¢¥(E)JQŠR”¢¥(E)JQŠR”¢¥(E)JQŠR”¢¥(E)JQŠR”¢å)ˆ"NѤ…} :ô?ô§ÚÖÏ™©¨T[µ]ŠšÐô–Ö¶ËÐ „r³Ðì9Ðy%¹ýßøhÐõPú_•E"ªBÓÑLÔ‰ºÐRÔƒ®Cýh­ÉçakRÇÃØrÔ§Œå÷Ù?êŠÁÒæÿð…3,èû[ð•‰íУàªðì$N¨mòWJÝj[í›Õ¶Úªm=ZŒ Ð0ä™”_mcTNݪ¶)d¡¾«¶iÔ@VÛh¿¯¶u¨ŽªmxzÚ ëS‡ðÓ­¹èZÔ u;¬Q¯²N°’¤g\ B›”]Ðß#Ϩ†‘K`E—C=ú–ÂýCh…|Õ u7Ì^å˜Iž°®{ä^v¤­†ºGžß2$?{ ô_õ Z}}èš¿á½ÈS{å'*÷̓«¸"o"¢9Ðê’¯”ÿ¹zkä'ˆò³¯Ußp±üƽò{õȳ«wŠu‰Dƒ8÷Ún±½¯·ohM·8­o°¿o°k¨§¯·Z¼dùrqvÏÒk‡Vˆ³»Wt®ê^R=³½%×Ö›Ö·r°§{pf÷êYsâmC]Ë{·Ïý[ÇÔNzÅžb—84ص¤ûº®Áebß5Ÿû~bO¯8cóz{†º—ˆs†º†ºáæÞ%5}ƒbŒ Š‹ûVöÁ£WTÿuc&<µåPjE± 4EÑ“Y°kä¾¥0²\ÖŽ¿îž8Œ“Ý^#‹áŽ¹ÿðûþ_è="㇘6ô>Ê {‘Іƒ{|¹47Æ(~Jë¯Ü?ùåŽNkæCc¡ë‰Yì"õѽ¢2¿jì'º¥2“`—Œmÿ-À}ŽŸ¾ +endstream endobj 1938 0 obj <> endobj 1939 0 obj <> endobj 1940 0 obj <> endobj 1941 0 obj <> endobj 1942 0 obj <> endobj 1943 0 obj <> endobj 1944 0 obj <> endobj 1945 0 obj <> endobj 1946 0 obj <> endobj 1947 0 obj <> endobj 1948 0 obj <> endobj 1949 0 obj <> endobj 1950 0 obj <> endobj 1951 0 obj <> endobj 1952 0 obj <> endobj 1953 0 obj <> endobj 1954 0 obj <> endobj 1955 0 obj <> endobj 1956 0 obj <> endobj 1957 0 obj <> endobj 1958 0 obj <> endobj 1959 0 obj <> endobj 1960 0 obj <> endobj 1961 0 obj <> endobj 1962 0 obj <> endobj 1963 0 obj <> endobj 1964 0 obj <> endobj 1965 0 obj <> endobj 1966 0 obj <> endobj 1967 0 obj <> endobj 1968 0 obj <> endobj 1969 0 obj <> endobj 1970 0 obj <> endobj 1971 0 obj <> endobj 1972 0 obj <> endobj 1973 0 obj <> endobj 1974 0 obj <> endobj 1975 0 obj <> endobj 1976 0 obj <> endobj 1977 0 obj <> endobj 1978 0 obj <> endobj 1979 0 obj <> endobj 1980 0 obj <> endobj 1981 0 obj <> endobj 1982 0 obj <> endobj 1983 0 obj <> endobj 1984 0 obj <> endobj 1985 0 obj <> endobj 1986 0 obj <> endobj 1987 0 obj <> endobj 1988 0 obj <> endobj 1989 0 obj <> endobj 1990 0 obj <> endobj 1991 0 obj <> endobj 1992 0 obj <> endobj 1993 0 obj <> endobj 1994 0 obj <> endobj 1995 0 obj <> endobj 1996 0 obj <> endobj 1997 0 obj <> endobj 1998 0 obj <> endobj 1999 0 obj <> endobj 2000 0 obj <> endobj 2001 0 obj <> endobj 2002 0 obj <> endobj 2003 0 obj <> endobj 2004 0 obj <> endobj 2005 0 obj <> endobj 2006 0 obj <> endobj 2007 0 obj <> endobj 2008 0 obj <> endobj 2009 0 obj <> endobj 2010 0 obj <> endobj 2011 0 obj <> endobj 2012 0 obj <> endobj 2013 0 obj <> endobj 2014 0 obj <> endobj 2015 0 obj <> endobj 2016 0 obj <> endobj 2017 0 obj <> endobj 2018 0 obj <> endobj 2019 0 obj <> endobj 2020 0 obj <> endobj 2021 0 obj <> endobj 2022 0 obj <> endobj 2023 0 obj <> endobj 2024 0 obj <> endobj 2025 0 obj <> endobj 2026 0 obj <> endobj 2027 0 obj <> endobj 2028 0 obj <> endobj 2029 0 obj <> endobj 2030 0 obj <> endobj 2031 0 obj <> endobj 2032 0 obj <> endobj 2033 0 obj <> endobj 2034 0 obj <> endobj 2035 0 obj <> endobj 2036 0 obj <> endobj 2037 0 obj <> endobj 2038 0 obj <> endobj 2039 0 obj <> endobj 2040 0 obj <> endobj 2041 0 obj <> endobj 2042 0 obj <> endobj 2043 0 obj <> endobj 2044 0 obj <> endobj 2045 0 obj <> endobj 2046 0 obj <> endobj 2047 0 obj <> endobj 2048 0 obj <> endobj 2049 0 obj <> endobj 2050 0 obj <> endobj 2051 0 obj <> endobj 2052 0 obj <> endobj 2053 0 obj <> endobj 2054 0 obj <> endobj 2055 0 obj <> endobj 2056 0 obj <> endobj 2057 0 obj <> endobj 2058 0 obj <> endobj 2059 0 obj <> endobj 2060 0 obj <> endobj 2061 0 obj <> endobj 2062 0 obj <> endobj 2063 0 obj <> endobj 2064 0 obj <> endobj 2065 0 obj <> endobj 2066 0 obj <> endobj 2067 0 obj <> endobj 2068 0 obj <> endobj 2069 0 obj <> endobj 2070 0 obj <> endobj 2071 0 obj <> endobj 2072 0 obj <> endobj 2073 0 obj <> endobj 2074 0 obj <> endobj 2075 0 obj <> endobj 2076 0 obj <> endobj 2077 0 obj <> endobj 2078 0 obj <> endobj 2079 0 obj <> endobj 2080 0 obj <> endobj 2081 0 obj <> endobj 2082 0 obj <> endobj 2083 0 obj <> endobj 2084 0 obj <> endobj 2085 0 obj <> endobj 2086 0 obj <> endobj 2087 0 obj <> endobj 2088 0 obj <> endobj 2089 0 obj <> endobj 2090 0 obj <> endobj 2091 0 obj <> endobj 2092 0 obj <> endobj 2093 0 obj <> endobj 2094 0 obj <> endobj 2095 0 obj <> endobj 2096 0 obj <> endobj 2097 0 obj <> endobj 2098 0 obj <> endobj 2099 0 obj <> endobj 2100 0 obj <> endobj 2101 0 obj <> endobj 2102 0 obj <> endobj 2103 0 obj <> endobj 2104 0 obj <> endobj 2105 0 obj <> endobj 2106 0 obj <> endobj 2107 0 obj <> endobj 2108 0 obj <> endobj 2109 0 obj <> endobj 2110 0 obj <> endobj 2111 0 obj <> endobj 2112 0 obj <> endobj 2113 0 obj <> endobj 2114 0 obj <> endobj 2115 0 obj <> endobj 2116 0 obj <> endobj 2117 0 obj <> endobj 2118 0 obj <> endobj 2119 0 obj <> endobj 2120 0 obj <> endobj 2121 0 obj <> endobj 2122 0 obj <> endobj 2123 0 obj <> endobj 2124 0 obj <> endobj 2125 0 obj <> endobj 2126 0 obj <> endobj 2127 0 obj <> endobj 2128 0 obj <> endobj 2129 0 obj <> endobj 2130 0 obj <> endobj 2131 0 obj <> endobj 2132 0 obj <> endobj 2133 0 obj <> endobj 2134 0 obj <> endobj 2135 0 obj <> endobj 2136 0 obj <> endobj 2137 0 obj <> endobj 2138 0 obj <> endobj 2139 0 obj <> endobj 2140 0 obj <> endobj 2141 0 obj <> endobj 2142 0 obj <> endobj 2143 0 obj <> endobj 2144 0 obj <> endobj 2145 0 obj <> endobj 2146 0 obj <> endobj 2147 0 obj <> endobj 2148 0 obj <> endobj 2149 0 obj <> endobj 2150 0 obj <> endobj 2151 0 obj <> endobj 2152 0 obj <> endobj 2153 0 obj <> endobj 2154 0 obj <> endobj 2155 0 obj <> endobj 2156 0 obj <> endobj 2157 0 obj <> endobj 2158 0 obj <> endobj 2159 0 obj <> endobj 2160 0 obj <> endobj 2161 0 obj <> endobj 2162 0 obj <> endobj 2163 0 obj <> endobj 2164 0 obj <> endobj 2165 0 obj <> endobj 2166 0 obj <> endobj 2167 0 obj <> endobj 2168 0 obj <> endobj 2169 0 obj <> endobj 2170 0 obj <> endobj 2171 0 obj <> endobj 2172 0 obj <> endobj 2173 0 obj <> endobj 2174 0 obj <> endobj 2175 0 obj <> endobj 2176 0 obj <> endobj 2177 0 obj <> endobj 2178 0 obj <> endobj 2179 0 obj <> endobj 2180 0 obj <> endobj 2181 0 obj <> endobj 2182 0 obj <> endobj 2183 0 obj <> endobj 2184 0 obj <> endobj 2185 0 obj <> endobj 2186 0 obj <> endobj 2187 0 obj <> endobj 2188 0 obj <> endobj 2189 0 obj <> endobj 2190 0 obj <> endobj 2191 0 obj <> endobj 2192 0 obj <> endobj 2193 0 obj <> endobj 2194 0 obj <> endobj 2195 0 obj <> endobj 2196 0 obj <> endobj 2197 0 obj <> endobj 2198 0 obj <> endobj 2199 0 obj <> endobj 2200 0 obj <> endobj 2201 0 obj <> endobj 2202 0 obj <> endobj 2203 0 obj <> endobj 2204 0 obj <> endobj 2205 0 obj <> endobj 2206 0 obj <> endobj 2207 0 obj <> endobj 2208 0 obj <> endobj 2209 0 obj <> endobj 2210 0 obj <> endobj 2211 0 obj <> endobj 2212 0 obj <> endobj 2213 0 obj <> endobj 2214 0 obj <> endobj 2215 0 obj <> endobj 2216 0 obj <> endobj 2217 0 obj <> endobj 2218 0 obj <> endobj 2219 0 obj <> endobj 2220 0 obj <> endobj 2221 0 obj <> endobj 2222 0 obj <> endobj 2223 0 obj <> endobj 2224 0 obj <> endobj 2225 0 obj <> endobj 2226 0 obj <> endobj 2227 0 obj <> endobj 2228 0 obj <> endobj 2229 0 obj <> endobj 2230 0 obj <> endobj 2231 0 obj <> endobj 2232 0 obj <> endobj 2233 0 obj <> endobj 2234 0 obj <> endobj 2235 0 obj <> endobj 2236 0 obj <> endobj 2237 0 obj <> endobj 2238 0 obj <> endobj 2239 0 obj <> endobj 2240 0 obj <> endobj 2241 0 obj <> endobj 2242 0 obj <> endobj 2243 0 obj <> endobj 2244 0 obj <> endobj 2245 0 obj <> endobj 2246 0 obj <> endobj 2247 0 obj <> endobj 2248 0 obj <> endobj 2249 0 obj <> endobj 2250 0 obj <> endobj 2251 0 obj <> endobj 2252 0 obj <> endobj 2253 0 obj <> endobj 2254 0 obj <> endobj 2255 0 obj <> endobj 2256 0 obj <> endobj 2257 0 obj <> endobj 2258 0 obj <> endobj 2259 0 obj <> endobj 2260 0 obj <> endobj 2261 0 obj <> endobj 2262 0 obj <> endobj 2263 0 obj <> endobj 2264 0 obj <> endobj 2265 0 obj <> endobj 2266 0 obj <> endobj 2267 0 obj <> endobj 2268 0 obj <> endobj 2269 0 obj <> endobj 2270 0 obj <> endobj 2271 0 obj <> endobj 2272 0 obj <> endobj 2273 0 obj <> endobj 2274 0 obj <> endobj 2275 0 obj <> endobj 2276 0 obj <> endobj 2277 0 obj <> endobj 2278 0 obj <> endobj 2279 0 obj <> endobj 2280 0 obj <> endobj 2281 0 obj <> endobj 2282 0 obj <> endobj 2283 0 obj <> endobj 2284 0 obj <> endobj 2285 0 obj <> endobj 2286 0 obj <> endobj 2287 0 obj <> endobj 2288 0 obj <> endobj 2289 0 obj <> endobj 2290 0 obj <> endobj 2291 0 obj <> endobj 2292 0 obj <> endobj 2293 0 obj <> endobj 2294 0 obj <> endobj 2295 0 obj <> endobj 2296 0 obj <> endobj 2297 0 obj <> endobj 2298 0 obj <> endobj 2299 0 obj <> endobj 2300 0 obj <> endobj 2301 0 obj <> endobj 2302 0 obj <> endobj 2303 0 obj <> endobj 2304 0 obj <> endobj 2305 0 obj <> endobj 2306 0 obj <> endobj 2307 0 obj <> endobj 2308 0 obj <> endobj 2309 0 obj <> endobj 2310 0 obj <> endobj 2311 0 obj <> endobj 2312 0 obj <> endobj 2313 0 obj <> endobj 2314 0 obj <> endobj 2315 0 obj <> endobj 2316 0 obj <> endobj 2317 0 obj <> endobj 2318 0 obj <> endobj 2319 0 obj <> endobj 2320 0 obj <> endobj 2321 0 obj <> endobj 2322 0 obj <> endobj 2323 0 obj <> endobj 2324 0 obj <> endobj 2325 0 obj <> endobj 2326 0 obj <> endobj 2327 0 obj <> endobj 2328 0 obj <> endobj 2329 0 obj <> endobj 2330 0 obj <> endobj 2331 0 obj <> endobj 2332 0 obj <> endobj 2333 0 obj <> endobj 2334 0 obj <> endobj 2335 0 obj <> endobj 2336 0 obj <> endobj 2337 0 obj <> endobj 2338 0 obj <> endobj 2339 0 obj <> endobj 2340 0 obj <> endobj 2341 0 obj <> endobj 2342 0 obj <> endobj 2343 0 obj <> endobj 2344 0 obj <> endobj 2345 0 obj <> endobj 2346 0 obj <> endobj 2347 0 obj <> endobj 2348 0 obj <> endobj 2349 0 obj <> endobj 2350 0 obj <> endobj 2351 0 obj <> endobj 2352 0 obj <> endobj 2353 0 obj <> endobj 2354 0 obj <> endobj 2355 0 obj <> endobj 2356 0 obj <> endobj 2357 0 obj <> endobj 2358 0 obj <> endobj 2359 0 obj <> endobj 2360 0 obj <> endobj 2361 0 obj <> endobj 2362 0 obj <> endobj 2363 0 obj <> endobj 2364 0 obj <> endobj 2365 0 obj <> endobj 2366 0 obj <> endobj 2367 0 obj <> endobj 2368 0 obj <> endobj 2369 0 obj <> endobj 2370 0 obj <> endobj 2371 0 obj <> endobj 2372 0 obj <> endobj 2373 0 obj <> endobj 2374 0 obj <> endobj 2375 0 obj <> endobj 2376 0 obj <> endobj 2377 0 obj <> endobj 2378 0 obj <> endobj 2379 0 obj <> endobj 2380 0 obj <> endobj 2381 0 obj <> endobj 2382 0 obj <> endobj 2383 0 obj <> endobj 2384 0 obj <> endobj 2385 0 obj <> endobj 2386 0 obj <> endobj 2387 0 obj <> endobj 2388 0 obj <> endobj 2389 0 obj <> endobj 2390 0 obj <> endobj 2391 0 obj <> endobj 2392 0 obj <> endobj 2393 0 obj <> endobj 2394 0 obj <> endobj 2395 0 obj <> endobj 2396 0 obj <> endobj 2397 0 obj <> endobj 2398 0 obj <> endobj 2399 0 obj <> endobj 2400 0 obj <> endobj 2401 0 obj <> endobj 2402 0 obj <> endobj 2403 0 obj <> endobj 2404 0 obj <> endobj 2405 0 obj <> endobj 2406 0 obj <> endobj 2407 0 obj <> endobj 2408 0 obj <> endobj 2409 0 obj <> endobj 2410 0 obj <> endobj 2411 0 obj <> endobj 2412 0 obj <> endobj 2413 0 obj <> endobj 2414 0 obj <> endobj 2415 0 obj <> endobj 2416 0 obj <> endobj 2417 0 obj <> endobj 2418 0 obj <> endobj 2419 0 obj <> endobj 2420 0 obj <> endobj 2421 0 obj <> endobj 2422 0 obj <> endobj 2423 0 obj <> endobj 2424 0 obj <> endobj 2425 0 obj <> endobj 2426 0 obj <> endobj 2427 0 obj <> endobj 2428 0 obj <> endobj 2429 0 obj <> endobj 2430 0 obj <> endobj 2431 0 obj <> endobj 2432 0 obj <> endobj 2433 0 obj <> endobj 2434 0 obj <> endobj 2435 0 obj <> endobj 2436 0 obj <> endobj 2437 0 obj <> endobj 2438 0 obj <> endobj 2439 0 obj <> endobj 2440 0 obj <> endobj 2441 0 obj <> endobj 2442 0 obj <> endobj 2443 0 obj <> endobj 2444 0 obj <> endobj 2445 0 obj <> endobj 2446 0 obj <> endobj 2447 0 obj <> endobj 2448 0 obj <> endobj 2449 0 obj <> endobj 2450 0 obj <> endobj 2451 0 obj <> endobj 2452 0 obj <> endobj 2453 0 obj <> endobj 2454 0 obj <> endobj 2455 0 obj <> endobj 2456 0 obj <> endobj 2457 0 obj <> endobj 2458 0 obj <> endobj 2459 0 obj <> endobj 2460 0 obj <> endobj 2461 0 obj <> endobj 2462 0 obj <> endobj 2463 0 obj <> endobj 2464 0 obj <> endobj 2465 0 obj <> endobj 2466 0 obj <> endobj 2467 0 obj <> endobj 2468 0 obj <> endobj 2469 0 obj <> endobj 2470 0 obj <> endobj 2471 0 obj <> endobj 2472 0 obj <> endobj 2473 0 obj <> endobj 2474 0 obj <> endobj 2475 0 obj <> endobj 2476 0 obj <> endobj 2477 0 obj <> endobj 2478 0 obj <> endobj 2479 0 obj <> endobj 2480 0 obj <> endobj 2481 0 obj <> endobj 2482 0 obj <> endobj 2483 0 obj <> endobj 2484 0 obj <> endobj 2485 0 obj <> endobj 2486 0 obj <> endobj 2487 0 obj <> endobj 2488 0 obj <> endobj 2489 0 obj <> endobj 2490 0 obj <> endobj 2491 0 obj <> endobj 2492 0 obj <> endobj 2493 0 obj <> endobj 2494 0 obj <> endobj 2495 0 obj <> endobj 2496 0 obj <> endobj 2497 0 obj <> endobj 2498 0 obj <> endobj 2499 0 obj <> endobj 2500 0 obj <> endobj 2501 0 obj <> endobj 2502 0 obj <> endobj 2503 0 obj <> endobj 2504 0 obj <> endobj 2505 0 obj <> endobj 2506 0 obj <> endobj 2507 0 obj <> endobj 2508 0 obj <> endobj 2509 0 obj <> endobj 2510 0 obj <> endobj 2511 0 obj <> endobj 2512 0 obj <> endobj 2513 0 obj <> endobj 2514 0 obj <> endobj 2515 0 obj <> endobj 2516 0 obj <> endobj 2517 0 obj <> endobj 2518 0 obj <> endobj 2519 0 obj <> endobj 2520 0 obj <> endobj 2521 0 obj <> endobj 2522 0 obj <> endobj 2523 0 obj <> endobj 2524 0 obj <> endobj 2525 0 obj <> endobj 2526 0 obj <> endobj 2527 0 obj <> endobj 2528 0 obj <> endobj 2529 0 obj <> endobj 2530 0 obj <> endobj 2531 0 obj <> endobj 2532 0 obj <> endobj 2533 0 obj <> endobj 2534 0 obj <> endobj 2535 0 obj <> endobj 2536 0 obj <> endobj 2537 0 obj <> endobj 2538 0 obj <> endobj 2539 0 obj <> endobj 2540 0 obj <> endobj 2541 0 obj <> endobj 2542 0 obj <> endobj 2543 0 obj <> endobj 2544 0 obj <> endobj 2545 0 obj <> endobj 2546 0 obj <> endobj 2547 0 obj <> endobj 2548 0 obj <> endobj 2549 0 obj <> endobj 2550 0 obj <> endobj 2551 0 obj <> endobj 2552 0 obj <> endobj 2553 0 obj <> endobj 2554 0 obj <> endobj 2555 0 obj <> endobj 2556 0 obj <> endobj 2557 0 obj <> endobj 2558 0 obj <> endobj 2559 0 obj <> endobj 2560 0 obj <> endobj 2561 0 obj <> endobj 2562 0 obj <> endobj 2563 0 obj <> endobj 2564 0 obj <> endobj 2565 0 obj <> endobj 2566 0 obj <> endobj 2567 0 obj <> endobj 2568 0 obj <> endobj 2569 0 obj <> endobj 2570 0 obj <> endobj 2571 0 obj <> endobj 2572 0 obj <> endobj 2573 0 obj <> endobj 2574 0 obj <> endobj 2575 0 obj <> endobj 2576 0 obj <> endobj 2577 0 obj <> endobj 2578 0 obj <> endobj 2579 0 obj <> endobj 2580 0 obj <> endobj 2581 0 obj <> endobj 2582 0 obj <> endobj 2583 0 obj <> endobj 2584 0 obj <> endobj 2585 0 obj <> endobj 2586 0 obj <> endobj 2587 0 obj <> endobj 2588 0 obj <> endobj 2589 0 obj <> endobj 2590 0 obj <> endobj 2591 0 obj <> endobj 2592 0 obj <> endobj 2593 0 obj <> endobj 2594 0 obj <> endobj 2595 0 obj <> endobj 2596 0 obj <> endobj 2597 0 obj <> endobj 2598 0 obj <> endobj 2599 0 obj <> endobj 2600 0 obj <> endobj 2601 0 obj <> endobj 2602 0 obj <> endobj 2603 0 obj <> endobj 2604 0 obj <> endobj 2605 0 obj <> endobj 2606 0 obj <> endobj 2607 0 obj <> endobj 2608 0 obj <> endobj 2609 0 obj <> endobj 2610 0 obj <> endobj 2611 0 obj <> endobj 2612 0 obj <> endobj 2613 0 obj <> endobj 2614 0 obj <> endobj 2615 0 obj <> endobj 2616 0 obj <> endobj 2617 0 obj <> endobj 2618 0 obj <> endobj 2619 0 obj <> endobj 2620 0 obj <> endobj 2621 0 obj <> endobj 2622 0 obj <> endobj 2623 0 obj <> endobj 2624 0 obj <> endobj 2625 0 obj <> endobj 2626 0 obj <> endobj 2627 0 obj <> endobj 2628 0 obj <> endobj 2629 0 obj <> endobj 2630 0 obj <> endobj 2631 0 obj <> endobj 2632 0 obj <> endobj 2633 0 obj <> endobj 2634 0 obj <> endobj 2635 0 obj <> endobj 2636 0 obj <> endobj 2637 0 obj <> endobj 2638 0 obj <> endobj 2639 0 obj <> endobj 2640 0 obj <> endobj 2641 0 obj <> endobj 2642 0 obj <> endobj 2643 0 obj <> endobj 2644 0 obj <> endobj 2645 0 obj <> endobj 2646 0 obj <> endobj 2647 0 obj <> endobj 2648 0 obj <> endobj 2649 0 obj <> endobj 2650 0 obj <> endobj 2651 0 obj <> endobj 2652 0 obj <> endobj 2653 0 obj <> endobj 2654 0 obj <> endobj 2655 0 obj <> endobj 2656 0 obj <> endobj 2657 0 obj <> endobj 2658 0 obj <> endobj 2659 0 obj <> endobj 2660 0 obj <> endobj 2661 0 obj <> endobj 2662 0 obj <> endobj 2663 0 obj <> endobj 2664 0 obj <> endobj 2665 0 obj <> endobj 2666 0 obj <> endobj 2667 0 obj <> endobj 2668 0 obj <> endobj 2669 0 obj <> endobj 2670 0 obj <> endobj 2671 0 obj <> endobj 2672 0 obj <> endobj 2673 0 obj <> endobj 2674 0 obj <> endobj 2675 0 obj <> endobj 2676 0 obj <> endobj 2677 0 obj <> endobj 2678 0 obj <> endobj 2679 0 obj <> endobj 2680 0 obj <> endobj 2681 0 obj <> endobj 2682 0 obj <> endobj 2683 0 obj <> endobj 2684 0 obj <> endobj 2685 0 obj <> endobj 2686 0 obj <> endobj 2687 0 obj <> endobj 2688 0 obj <> endobj 2689 0 obj <> endobj 2690 0 obj <> endobj 2691 0 obj <> endobj 2692 0 obj <> endobj 2693 0 obj <> endobj 2694 0 obj <> endobj 2695 0 obj <> endobj 2696 0 obj <> endobj 2697 0 obj <> endobj 2698 0 obj <> endobj 2699 0 obj <> endobj 2700 0 obj <> endobj 2701 0 obj <> endobj 2702 0 obj <> endobj 2703 0 obj <> endobj 2704 0 obj <> endobj 2705 0 obj <> endobj 2706 0 obj <> endobj 2707 0 obj <> endobj 2708 0 obj <> endobj 2709 0 obj <> endobj 2710 0 obj <> endobj 2711 0 obj <> endobj 2712 0 obj <> endobj 2713 0 obj <> endobj 2714 0 obj <> endobj 2715 0 obj <> endobj 2716 0 obj <> endobj 2717 0 obj <> endobj 2718 0 obj <> endobj 2719 0 obj <> endobj 2720 0 obj <> endobj 2721 0 obj <> endobj 2722 0 obj <> endobj 2723 0 obj <> endobj 2724 0 obj <> endobj 2725 0 obj <> endobj 2726 0 obj <> endobj 2727 0 obj <> endobj 2728 0 obj <> endobj 2729 0 obj <> endobj 2730 0 obj <> endobj 2731 0 obj <> endobj 2732 0 obj <> endobj 2733 0 obj <> endobj 2734 0 obj <> endobj 2735 0 obj <> endobj 2736 0 obj <> endobj 2737 0 obj <> endobj 2738 0 obj <> endobj 2739 0 obj <> endobj 2740 0 obj <> endobj 2741 0 obj <> endobj 2742 0 obj <> endobj 2743 0 obj <> endobj 2744 0 obj <> endobj 2745 0 obj <> endobj 2746 0 obj <> endobj 2747 0 obj <> endobj 2748 0 obj <> endobj 2749 0 obj <> endobj 2750 0 obj <> endobj 2751 0 obj <> endobj 2752 0 obj <> endobj 2753 0 obj <> endobj 2754 0 obj <> endobj 2755 0 obj <> endobj 2756 0 obj <> endobj 2757 0 obj <> endobj 2758 0 obj <> endobj 2759 0 obj <> endobj 2760 0 obj <> endobj 2761 0 obj <> endobj 2762 0 obj <> endobj 2763 0 obj <> endobj 2764 0 obj <> endobj 2765 0 obj <> endobj 2766 0 obj <> endobj 2767 0 obj <> endobj 2768 0 obj <> endobj 2769 0 obj <> endobj 2770 0 obj <> endobj 2771 0 obj <> endobj 2772 0 obj <> endobj 2773 0 obj <> endobj 2774 0 obj <> endobj 2775 0 obj <> endobj 2776 0 obj <> endobj 2777 0 obj <> endobj 2778 0 obj <> endobj 2779 0 obj <> endobj 2780 0 obj <> endobj 2781 0 obj <> endobj 2782 0 obj <> endobj 2783 0 obj <> endobj 2784 0 obj <> endobj 2785 0 obj <> endobj 2786 0 obj <> endobj 2787 0 obj <> endobj 2788 0 obj <> endobj 2789 0 obj <> endobj 2790 0 obj <> endobj 2791 0 obj <> endobj 2792 0 obj <> endobj 2793 0 obj <> endobj 2794 0 obj <> endobj 2795 0 obj <> endobj 2796 0 obj <> endobj 2797 0 obj <> endobj 2798 0 obj <> endobj 2799 0 obj <> endobj 2800 0 obj <> endobj 2801 0 obj <> endobj 2802 0 obj <> endobj 2803 0 obj <> endobj 2804 0 obj <> endobj 2805 0 obj <> endobj 2806 0 obj <> endobj 2807 0 obj <> endobj 2808 0 obj <> endobj 2809 0 obj <> endobj 2810 0 obj <> endobj 2811 0 obj <> endobj 2812 0 obj <> endobj 2813 0 obj <> endobj 2814 0 obj <> endobj 2815 0 obj <> endobj 2816 0 obj <> endobj 2817 0 obj <> endobj 2818 0 obj <> endobj 2819 0 obj <> endobj 2820 0 obj <> endobj 2821 0 obj <> endobj 2822 0 obj <> endobj 2823 0 obj <> endobj 2824 0 obj <> endobj 2825 0 obj <> endobj 2826 0 obj <> endobj 2827 0 obj <> endobj 2828 0 obj <> endobj 2829 0 obj <> endobj 2830 0 obj <> endobj 2831 0 obj <> endobj 2832 0 obj <> endobj 2833 0 obj <> endobj 2834 0 obj <> endobj 2835 0 obj <> endobj 2836 0 obj <> endobj 2837 0 obj <> endobj 2838 0 obj <> endobj 2839 0 obj <> endobj 2840 0 obj <> endobj 2841 0 obj <> endobj 2842 0 obj <> endobj 2843 0 obj <> endobj 2844 0 obj <> endobj 2845 0 obj <> endobj 2846 0 obj <> endobj 2847 0 obj <> endobj 2848 0 obj <> endobj 2849 0 obj <> endobj 2850 0 obj <> endobj 2851 0 obj <> endobj 2852 0 obj <> endobj 2853 0 obj <> endobj 2854 0 obj <> endobj 2855 0 obj <> endobj 2856 0 obj <> endobj 2857 0 obj <> endobj 2858 0 obj <> endobj 2859 0 obj <> endobj 2860 0 obj <> endobj 2861 0 obj <> endobj 2862 0 obj <> endobj 2863 0 obj <> endobj 2864 0 obj <> endobj 2865 0 obj <> endobj 2866 0 obj <> endobj 2867 0 obj <> endobj 2868 0 obj <> endobj 2869 0 obj <> endobj 2870 0 obj <> endobj 2871 0 obj <> endobj 2872 0 obj <> endobj 2873 0 obj <> endobj 2874 0 obj <> endobj 2875 0 obj <> endobj 2876 0 obj <> endobj 2877 0 obj <> endobj 2878 0 obj <> endobj 2879 0 obj <> endobj 2880 0 obj <> endobj 2881 0 obj <> endobj 2882 0 obj <> endobj 2883 0 obj <> endobj 2884 0 obj <> endobj 2885 0 obj <> endobj 2886 0 obj <> endobj 2887 0 obj <> endobj 2888 0 obj <> endobj 2889 0 obj <> endobj 2890 0 obj <> endobj 2891 0 obj <> endobj 2892 0 obj <> endobj 2893 0 obj <> endobj 2894 0 obj <> endobj 2895 0 obj <> endobj 2896 0 obj <> endobj 2897 0 obj <> endobj 2898 0 obj <> endobj 2899 0 obj <> endobj 2900 0 obj <> endobj 2901 0 obj <> endobj 2902 0 obj <> endobj 2903 0 obj <> endobj 2904 0 obj <> endobj 2905 0 obj <> endobj 2906 0 obj <> endobj 2907 0 obj <> endobj 2908 0 obj <> endobj 2909 0 obj <> endobj 2910 0 obj <> endobj 2911 0 obj <> endobj 2912 0 obj <> endobj 2913 0 obj <> endobj 2914 0 obj <> endobj 2915 0 obj <> endobj 2916 0 obj <> endobj 2917 0 obj <> endobj 2918 0 obj <> endobj 2919 0 obj <> endobj 2920 0 obj <> endobj 2921 0 obj <> endobj 2922 0 obj <> endobj 2923 0 obj <> endobj 2924 0 obj <> endobj 2925 0 obj <> endobj 2926 0 obj <> endobj 2927 0 obj <> endobj 2928 0 obj <> endobj 2929 0 obj <> endobj 2930 0 obj <> endobj 2931 0 obj <> endobj 2932 0 obj <> endobj 2933 0 obj <> endobj 2934 0 obj <> endobj 2935 0 obj <> endobj 2936 0 obj <> endobj 2937 0 obj <> endobj 2938 0 obj <> endobj 2939 0 obj <> endobj 2940 0 obj <> endobj 2941 0 obj <> endobj 2942 0 obj <> endobj 2943 0 obj <> endobj 2944 0 obj <> endobj 2945 0 obj <> endobj 2946 0 obj <> endobj 2947 0 obj <> endobj 2948 0 obj <> endobj 2949 0 obj <> endobj 2950 0 obj <> endobj 2951 0 obj <> endobj 2952 0 obj <> endobj 2953 0 obj <> endobj 2954 0 obj <> endobj 2955 0 obj <> endobj 2956 0 obj <> endobj 2957 0 obj <> endobj 2958 0 obj <> endobj 2959 0 obj <> endobj 2960 0 obj <> endobj 2961 0 obj <> endobj 2962 0 obj <> endobj 2963 0 obj <> endobj 2964 0 obj <> endobj 2965 0 obj <> endobj 2966 0 obj <> endobj 2967 0 obj <> endobj 2968 0 obj <> endobj 2969 0 obj <> endobj 2970 0 obj <> endobj 2971 0 obj <> endobj 2972 0 obj <> endobj 2973 0 obj <> endobj 2974 0 obj <> endobj 2975 0 obj <> endobj 2976 0 obj <> endobj 2977 0 obj <> endobj 2978 0 obj <> endobj 2979 0 obj <> endobj 2980 0 obj <> endobj 2981 0 obj <> endobj 2982 0 obj <> endobj 2983 0 obj <> endobj 2984 0 obj <> endobj 2985 0 obj <> endobj 2986 0 obj <> endobj 2987 0 obj <> endobj 2988 0 obj <> endobj 2989 0 obj <> endobj 2990 0 obj <> endobj 2991 0 obj <> endobj 2992 0 obj <> endobj 2993 0 obj <> endobj 2994 0 obj <> endobj 2995 0 obj <> endobj 2996 0 obj <> endobj 2997 0 obj <> endobj 2998 0 obj <> endobj 2999 0 obj <> endobj 3000 0 obj <> endobj 3001 0 obj <> endobj 3002 0 obj <> endobj 3003 0 obj <> endobj 3004 0 obj <> endobj 3005 0 obj <> endobj 3006 0 obj <> endobj 3007 0 obj <> endobj 3008 0 obj <> endobj 3009 0 obj <> endobj 3010 0 obj <> endobj 3011 0 obj <> endobj 3012 0 obj <> endobj 3013 0 obj <> endobj 3014 0 obj <> endobj 3015 0 obj <> endobj 3016 0 obj <> endobj 3017 0 obj <> endobj 3018 0 obj <> endobj 3019 0 obj <> endobj 3020 0 obj <> endobj 3021 0 obj <> endobj 3022 0 obj <> endobj 3023 0 obj <> endobj 3024 0 obj <> endobj 3025 0 obj <> endobj 3026 0 obj <> endobj 3027 0 obj <> endobj 3028 0 obj <> endobj 3029 0 obj <> endobj 3030 0 obj <> endobj 3031 0 obj <> endobj 3032 0 obj <> endobj 3033 0 obj <> endobj 3034 0 obj <> endobj 3035 0 obj <> endobj 3036 0 obj <> endobj 3037 0 obj <> endobj 3038 0 obj <> endobj 3039 0 obj <> endobj 3040 0 obj <> endobj 3041 0 obj <> endobj 3042 0 obj <> endobj 3043 0 obj <> endobj 3044 0 obj <> endobj 3045 0 obj <> endobj 3046 0 obj <> endobj 3047 0 obj <> endobj 3048 0 obj <> endobj 3049 0 obj <> endobj 3050 0 obj <> endobj 3051 0 obj <> endobj 3052 0 obj <> endobj 3053 0 obj <> endobj 3054 0 obj <> endobj 3055 0 obj <> endobj 3056 0 obj <> endobj 3057 0 obj <> endobj 3058 0 obj <> endobj 3059 0 obj <> endobj 3060 0 obj <> endobj 3061 0 obj <> endobj 3062 0 obj <> endobj 3063 0 obj <> endobj 3064 0 obj <> endobj 3065 0 obj <> endobj 3066 0 obj <> endobj 3067 0 obj <> endobj 3068 0 obj <> endobj 3069 0 obj <> endobj 3070 0 obj <> endobj 3071 0 obj <> endobj 3072 0 obj <> endobj 3073 0 obj <> endobj 3074 0 obj <> endobj 3075 0 obj <> endobj 3076 0 obj <> endobj 3077 0 obj <> endobj 3078 0 obj <> endobj 3079 0 obj <> endobj 3080 0 obj <> endobj 3081 0 obj <> endobj 3082 0 obj <> endobj 3083 0 obj <> endobj 3084 0 obj <> endobj 3085 0 obj <> endobj 3086 0 obj <> endobj 3087 0 obj <> endobj 3088 0 obj <> endobj 3089 0 obj <> endobj 3090 0 obj <> endobj 3091 0 obj <> endobj 3092 0 obj <> endobj 3093 0 obj <> endobj 3094 0 obj <> endobj 3095 0 obj <> endobj 3096 0 obj <> endobj 3097 0 obj <> endobj 3098 0 obj <> endobj 3099 0 obj <> endobj 3100 0 obj <> endobj 3101 0 obj <> endobj 3102 0 obj <> endobj 3103 0 obj <> endobj 3104 0 obj <> endobj 3105 0 obj <> endobj 3106 0 obj <> endobj 3107 0 obj <> endobj 3108 0 obj <> endobj 3109 0 obj <> endobj 3110 0 obj <> endobj 3111 0 obj <> endobj 3112 0 obj <> endobj 3113 0 obj <> endobj 3114 0 obj <> endobj 3115 0 obj <> endobj 3116 0 obj <> endobj 3117 0 obj <> endobj 3118 0 obj <> endobj 3119 0 obj <> endobj 3120 0 obj <> endobj 3121 0 obj <> endobj 3122 0 obj <> endobj 3123 0 obj <> endobj 3124 0 obj <> endobj 3125 0 obj <> endobj 3126 0 obj <> endobj 3127 0 obj <> endobj 3128 0 obj <> endobj 3129 0 obj <> endobj 3130 0 obj <> endobj 3131 0 obj <> endobj 3132 0 obj <> endobj 3133 0 obj <> endobj 3134 0 obj <> endobj 3135 0 obj <> endobj 3136 0 obj <> endobj 3137 0 obj <> endobj 3138 0 obj <> endobj 3139 0 obj <> endobj 3140 0 obj <> endobj 3141 0 obj <> endobj 3142 0 obj <> endobj 3143 0 obj <> endobj 3144 0 obj <> endobj 3145 0 obj <> endobj 3146 0 obj <> endobj 3147 0 obj <> endobj 3148 0 obj <> endobj 3149 0 obj <> endobj 3150 0 obj <> endobj 3151 0 obj <> endobj 3152 0 obj <> endobj 3153 0 obj <> endobj 3154 0 obj <> endobj 3155 0 obj <> endobj 3156 0 obj <> endobj 3157 0 obj <> endobj 3158 0 obj <> endobj 3159 0 obj <> endobj 3160 0 obj <> endobj 3161 0 obj <> endobj 3162 0 obj <> endobj 3163 0 obj <> endobj 3164 0 obj <> endobj 3165 0 obj <> endobj 3166 0 obj <> endobj 3167 0 obj <> endobj 3168 0 obj <> endobj 3169 0 obj <> endobj 3170 0 obj <> endobj 3171 0 obj <> endobj 3172 0 obj <> endobj 3173 0 obj <> endobj 3174 0 obj <> endobj 3175 0 obj <> endobj 3176 0 obj <> endobj 3177 0 obj <> endobj 3178 0 obj <> endobj 3179 0 obj <> endobj 3180 0 obj <> endobj 3181 0 obj <> endobj 3182 0 obj <> endobj 3183 0 obj <> endobj 3184 0 obj <> endobj 3185 0 obj <> endobj 3186 0 obj <> endobj 3187 0 obj <> endobj 3188 0 obj <> endobj 3189 0 obj <> endobj 3190 0 obj <> endobj 3191 0 obj <> endobj 3192 0 obj <> endobj 3193 0 obj <> endobj 3194 0 obj <> endobj 3195 0 obj <> endobj 3196 0 obj <> endobj 3197 0 obj <> endobj 3198 0 obj <> endobj 3199 0 obj <> endobj 3200 0 obj <> endobj 3201 0 obj <> endobj 3202 0 obj <> endobj 3203 0 obj <> endobj 3204 0 obj <> endobj 3205 0 obj <> endobj 3206 0 obj <> endobj 3207 0 obj <> endobj 3208 0 obj <> endobj 3209 0 obj <> endobj 3210 0 obj <> endobj 3211 0 obj <> endobj 3212 0 obj <> endobj 3213 0 obj <> endobj 3214 0 obj <> endobj 3215 0 obj <> endobj 3216 0 obj <> endobj 3217 0 obj <> endobj 3218 0 obj <> endobj 3219 0 obj <> endobj 3220 0 obj <> endobj 3221 0 obj <> endobj 3222 0 obj <> endobj 3223 0 obj <> endobj 3224 0 obj <> endobj 3225 0 obj <> endobj 3226 0 obj <> endobj 3227 0 obj <> endobj 3228 0 obj <> endobj 3229 0 obj <> endobj 3230 0 obj <> endobj 3231 0 obj <> endobj 3232 0 obj <> endobj 3233 0 obj <> endobj 3234 0 obj <> endobj 3235 0 obj <> endobj 3236 0 obj <> endobj 3237 0 obj <> endobj 3238 0 obj <> endobj 3239 0 obj <> endobj 3240 0 obj <> endobj 3241 0 obj <> endobj 3242 0 obj <> endobj 3243 0 obj <> endobj 3244 0 obj <> endobj 3245 0 obj <> endobj 3246 0 obj <> endobj 3247 0 obj <> endobj 3248 0 obj <> endobj 3249 0 obj <> endobj 3250 0 obj <> endobj 3251 0 obj <> endobj 3252 0 obj <> endobj 3253 0 obj <> endobj 3254 0 obj <> endobj 3255 0 obj <> endobj 3256 0 obj <> endobj 3257 0 obj <> endobj 3258 0 obj <> endobj 3259 0 obj <> endobj 3260 0 obj <> endobj 3261 0 obj <> endobj 3262 0 obj <> endobj 3263 0 obj <> endobj 3264 0 obj <> endobj 3265 0 obj <> endobj 3266 0 obj <> endobj 3267 0 obj <> endobj 3268 0 obj <> endobj 3269 0 obj <> endobj 3270 0 obj <> endobj 3271 0 obj <> endobj 3272 0 obj <> endobj 3273 0 obj <> endobj 3274 0 obj <> endobj 3275 0 obj <> endobj 3276 0 obj <> endobj 3277 0 obj <> endobj 3278 0 obj <> endobj 3279 0 obj <> endobj 3280 0 obj <> endobj 3281 0 obj <> endobj 3282 0 obj <> endobj 3283 0 obj <> endobj 3284 0 obj <> endobj 3285 0 obj <> endobj 3286 0 obj <> endobj 3287 0 obj <> endobj 3288 0 obj <> endobj 3289 0 obj <> endobj 3290 0 obj <> endobj 3291 0 obj <> endobj 3292 0 obj <> endobj 3293 0 obj <> endobj 3294 0 obj <> endobj 3295 0 obj <> endobj 3296 0 obj <> endobj 3297 0 obj <> endobj 3298 0 obj <> endobj 3299 0 obj <> endobj 3300 0 obj <> endobj 3301 0 obj <> endobj 3302 0 obj <> endobj 3303 0 obj <> endobj 3304 0 obj <> endobj 3305 0 obj <> endobj 3306 0 obj <> endobj 3307 0 obj <> endobj 3308 0 obj <> endobj 3309 0 obj <> endobj 3310 0 obj <> endobj 3311 0 obj <> endobj 3312 0 obj <> endobj 3313 0 obj <> endobj 3314 0 obj <> endobj 3315 0 obj <> endobj 3316 0 obj <> endobj 3317 0 obj <> endobj 3318 0 obj <> endobj 3319 0 obj <> endobj 3320 0 obj <> endobj 3321 0 obj <> endobj 3322 0 obj <> endobj 3323 0 obj <> endobj 3324 0 obj <> endobj 3325 0 obj <> endobj 3326 0 obj <> endobj 3327 0 obj <> endobj 3328 0 obj <> endobj 3329 0 obj <> endobj 3330 0 obj <> endobj 3331 0 obj <> endobj 3332 0 obj <> endobj 3333 0 obj <> endobj 3334 0 obj <> endobj 3335 0 obj <> endobj 3336 0 obj <> endobj 3337 0 obj <> endobj 3338 0 obj <> endobj 3339 0 obj <> endobj 3340 0 obj <> endobj 3341 0 obj <> endobj 3342 0 obj <> endobj 3343 0 obj <> endobj 3344 0 obj <> endobj 3345 0 obj <> endobj 3346 0 obj <> endobj 3347 0 obj <> endobj 3348 0 obj <> endobj 3349 0 obj <> endobj 3350 0 obj <> endobj 3351 0 obj <> endobj 3352 0 obj <> endobj 3353 0 obj <> endobj 3354 0 obj <> endobj 3355 0 obj <> endobj 3356 0 obj <> endobj 3357 0 obj <> endobj 3358 0 obj <> endobj 3359 0 obj <> endobj 3360 0 obj <> endobj 3361 0 obj <> endobj 3362 0 obj <> endobj 3363 0 obj <> endobj 3364 0 obj <> endobj 3365 0 obj <> endobj 3366 0 obj <> endobj 3367 0 obj <> endobj 3368 0 obj <> endobj 3369 0 obj <> endobj 3370 0 obj <> endobj 3371 0 obj <> endobj 3372 0 obj <> endobj 3373 0 obj <> endobj 3374 0 obj <> endobj 3375 0 obj <> endobj 3376 0 obj <> endobj 3377 0 obj <> endobj 3378 0 obj <> endobj 3379 0 obj <> endobj 3380 0 obj <> endobj 3381 0 obj <> endobj 3382 0 obj <> endobj 3383 0 obj <> endobj 3384 0 obj <> endobj 3385 0 obj <> endobj 3386 0 obj <> endobj 3387 0 obj <> endobj 3388 0 obj <> endobj 3389 0 obj <> endobj 3390 0 obj <> endobj 3391 0 obj <> endobj 3392 0 obj <> endobj 3393 0 obj <> endobj 3394 0 obj <> endobj 3395 0 obj <> endobj 3396 0 obj <> endobj 3397 0 obj <> endobj 3398 0 obj <> endobj 3399 0 obj <> endobj 3400 0 obj <> endobj 3401 0 obj <> endobj 3402 0 obj <> endobj 3403 0 obj <> endobj 3404 0 obj <> endobj 3405 0 obj <> endobj 3406 0 obj <> endobj 3407 0 obj <> endobj 3408 0 obj <> endobj 3409 0 obj <> endobj 3410 0 obj <> endobj 3411 0 obj <> endobj 3412 0 obj <> endobj 3413 0 obj <> endobj 3414 0 obj <> endobj 3415 0 obj <> endobj 3416 0 obj <> endobj 3417 0 obj <> endobj 3418 0 obj <> endobj 3419 0 obj <> endobj 3420 0 obj <> endobj 3421 0 obj <> endobj 3422 0 obj <> endobj 3423 0 obj <> endobj 3424 0 obj <> endobj 3425 0 obj <> endobj 3426 0 obj <> endobj 3427 0 obj <> endobj 3428 0 obj <> endobj 3429 0 obj <> endobj 3430 0 obj <> endobj 3431 0 obj <> endobj 3432 0 obj <> endobj 3433 0 obj <> endobj 3434 0 obj <> endobj 3435 0 obj <> endobj 3436 0 obj <> endobj 3437 0 obj <> endobj 3438 0 obj <> endobj 3439 0 obj <> endobj 3440 0 obj <> endobj 3441 0 obj <> endobj 3442 0 obj <> endobj 3443 0 obj <> endobj 3444 0 obj <> endobj 3445 0 obj <> endobj 3446 0 obj <> endobj 3447 0 obj <> endobj 3448 0 obj <> endobj 3449 0 obj <> endobj 3450 0 obj <> endobj 3451 0 obj <> endobj 3452 0 obj <> endobj 3453 0 obj <> endobj 3454 0 obj <> endobj 3455 0 obj <> endobj 3456 0 obj <> endobj 3457 0 obj <> endobj 3458 0 obj <> endobj 3459 0 obj <> endobj 3460 0 obj <> endobj 3461 0 obj <> endobj 3462 0 obj <> endobj 3463 0 obj <> endobj 3464 0 obj <> endobj 3465 0 obj <> endobj 3466 0 obj <> endobj 3467 0 obj <> endobj 3468 0 obj <> endobj 3469 0 obj <> endobj 3470 0 obj <> endobj 3471 0 obj <> endobj 3472 0 obj <> endobj 3473 0 obj <> endobj 3474 0 obj <> endobj 3475 0 obj <> endobj 3476 0 obj <> endobj 3477 0 obj <> endobj 3478 0 obj <> endobj 3479 0 obj <> endobj 3480 0 obj <> endobj 3481 0 obj <> endobj 3482 0 obj <> endobj 3483 0 obj <> endobj 3484 0 obj <> endobj 3485 0 obj <> endobj 3486 0 obj <> endobj 3487 0 obj <> endobj 3488 0 obj <> endobj 3489 0 obj <> endobj 3490 0 obj <> endobj 3491 0 obj <> endobj 3492 0 obj <> endobj 3493 0 obj <> endobj 3494 0 obj <> endobj 3495 0 obj <> endobj 3496 0 obj <> endobj 3497 0 obj <> endobj 3498 0 obj <> endobj 3499 0 obj <> endobj 3500 0 obj <> endobj 3501 0 obj <> endobj 3502 0 obj <> endobj 3503 0 obj <> endobj 3504 0 obj <> endobj 3505 0 obj <> endobj 3506 0 obj <> endobj 3507 0 obj <> endobj 3508 0 obj <> endobj 3509 0 obj <> endobj 3510 0 obj <> endobj 3511 0 obj <> endobj 3512 0 obj <> endobj 3513 0 obj <> endobj 3514 0 obj <> endobj 3515 0 obj <> endobj 3516 0 obj <> endobj 3517 0 obj <> endobj 3518 0 obj <> endobj 3519 0 obj <> endobj 3520 0 obj <> endobj 3521 0 obj <> endobj 3522 0 obj <> endobj 3523 0 obj <> endobj 3524 0 obj <> endobj 3525 0 obj <> endobj 3526 0 obj <> endobj 3527 0 obj <> endobj 3528 0 obj <> endobj 3529 0 obj <> endobj 3530 0 obj <> endobj 3531 0 obj <> endobj 3532 0 obj <> endobj 3533 0 obj <> endobj 3534 0 obj <> endobj 3535 0 obj <> endobj 3536 0 obj <> endobj 3537 0 obj <> endobj 3538 0 obj <> endobj 3539 0 obj <> endobj 3540 0 obj <> endobj 3541 0 obj <> endobj 3542 0 obj <> endobj 3543 0 obj <> endobj 3544 0 obj <> endobj 3545 0 obj <> endobj 3546 0 obj <> endobj 3547 0 obj <> endobj 3548 0 obj <> endobj 3549 0 obj <> endobj 3550 0 obj <> endobj 3551 0 obj <> endobj 3552 0 obj <> endobj 3553 0 obj <> endobj 3554 0 obj <> endobj 3555 0 obj <> endobj 3556 0 obj <> endobj 3557 0 obj <> endobj 3558 0 obj <> endobj 3559 0 obj <> endobj 3560 0 obj <> endobj 3561 0 obj <> endobj 3562 0 obj <> endobj 3563 0 obj <> endobj 3564 0 obj <> endobj 3565 0 obj <> endobj 3566 0 obj <> endobj 3567 0 obj <> endobj 3568 0 obj <> endobj 3569 0 obj <> endobj 3570 0 obj <> endobj 3571 0 obj <> endobj 3572 0 obj <> endobj 3573 0 obj <> endobj 3574 0 obj <> endobj 3575 0 obj <> endobj 3576 0 obj <> endobj 3577 0 obj <> endobj 3578 0 obj <> endobj 3579 0 obj <> endobj 3580 0 obj <> endobj 3581 0 obj <> endobj 3582 0 obj <> endobj 3583 0 obj <> endobj 3584 0 obj <> endobj 3585 0 obj <> endobj 3586 0 obj <> endobj 3587 0 obj <> endobj 3588 0 obj <> endobj 3589 0 obj <> endobj 3590 0 obj <> endobj 3591 0 obj <> endobj 3592 0 obj <> endobj 3593 0 obj <> endobj 3594 0 obj <> endobj 3595 0 obj <> endobj 3596 0 obj <> endobj 3597 0 obj <> endobj 3598 0 obj <> endobj 3599 0 obj <> endobj 3600 0 obj <> endobj 3601 0 obj <> endobj 3602 0 obj <> endobj 3603 0 obj <> endobj 3604 0 obj <> endobj 3605 0 obj <> endobj 3606 0 obj <> endobj 3607 0 obj <> endobj 3608 0 obj <> endobj 3609 0 obj <> endobj 3610 0 obj <> endobj 3611 0 obj <> endobj 3612 0 obj <> endobj 3613 0 obj <> endobj 3614 0 obj <> endobj 3615 0 obj <> endobj 3616 0 obj <> endobj 3617 0 obj <> endobj 3618 0 obj <> endobj 3619 0 obj <> endobj 3620 0 obj <> endobj 3621 0 obj <> endobj 3622 0 obj <> endobj 3623 0 obj <> endobj 3624 0 obj <> endobj 3625 0 obj <> endobj 3626 0 obj <> endobj 3627 0 obj <> endobj 3628 0 obj <> endobj 3629 0 obj <> endobj 3630 0 obj <> endobj 3631 0 obj <> endobj 3632 0 obj <> endobj 3633 0 obj <> endobj 3634 0 obj <> endobj 3635 0 obj <> endobj 3636 0 obj <> endobj 3637 0 obj <> endobj 3638 0 obj <> endobj 3639 0 obj <> endobj 3640 0 obj <> endobj 3641 0 obj <> endobj 3642 0 obj <> endobj 3643 0 obj <> endobj 3644 0 obj <> endobj 3645 0 obj <> endobj 3646 0 obj <> endobj 3647 0 obj <> endobj 3648 0 obj <> endobj 3649 0 obj <> endobj 3650 0 obj <> endobj 3651 0 obj <> endobj 3652 0 obj <> endobj 3653 0 obj <> endobj 3654 0 obj <> endobj 3655 0 obj <> endobj 3656 0 obj <> endobj 3657 0 obj <> endobj 3658 0 obj <> endobj 3659 0 obj <> endobj 3660 0 obj <> endobj 3661 0 obj <> endobj 3662 0 obj <> endobj 3663 0 obj <> endobj 3664 0 obj <> endobj 3665 0 obj <> endobj 3666 0 obj <> endobj 3667 0 obj <> endobj 3668 0 obj <> endobj 3669 0 obj <> endobj 3670 0 obj <> endobj 3671 0 obj <> endobj 3672 0 obj <> endobj 3673 0 obj <> endobj 3674 0 obj <> endobj 3675 0 obj <> endobj 3676 0 obj <> endobj 3677 0 obj <> endobj 3678 0 obj <> endobj 3679 0 obj <> endobj 3680 0 obj <> endobj 3681 0 obj <> endobj 3682 0 obj <> endobj 3683 0 obj <> endobj 3684 0 obj <> endobj 3685 0 obj <> endobj 3686 0 obj <> endobj 3687 0 obj <> endobj 3688 0 obj <> endobj 3689 0 obj <> endobj 3690 0 obj <> endobj 3691 0 obj <> endobj 3692 0 obj <> endobj 3693 0 obj <> endobj 3694 0 obj <> endobj 3695 0 obj <> endobj 3696 0 obj <> endobj 3697 0 obj <> endobj 3698 0 obj <> endobj 3699 0 obj <> endobj 3700 0 obj <> endobj 3701 0 obj <> endobj 3702 0 obj <> endobj 3703 0 obj <> endobj 3704 0 obj <> endobj 3705 0 obj <> endobj 3706 0 obj <> endobj 3707 0 obj <> endobj 3708 0 obj <> endobj 3709 0 obj <> endobj 3710 0 obj <> endobj 3711 0 obj <> endobj 3712 0 obj <> endobj 3713 0 obj <> endobj 3714 0 obj <> endobj 3715 0 obj <> endobj 3716 0 obj <> endobj 3717 0 obj <> endobj 3718 0 obj <> endobj 3719 0 obj <> endobj 3720 0 obj <> endobj 3721 0 obj <> endobj 3722 0 obj <> endobj 3723 0 obj <> endobj 3724 0 obj <> endobj 3725 0 obj <> endobj 3726 0 obj <> endobj 3727 0 obj <> endobj 3728 0 obj <> endobj 3729 0 obj <> endobj 3730 0 obj <> endobj 3731 0 obj <> endobj 3732 0 obj <> endobj 3733 0 obj <> endobj 3734 0 obj <> endobj 3735 0 obj <> endobj 3736 0 obj <> endobj 3737 0 obj <> endobj 3738 0 obj <> endobj 3739 0 obj <> endobj 3740 0 obj <> endobj 3741 0 obj <> endobj 3742 0 obj <> endobj 3743 0 obj <> endobj 3744 0 obj <> endobj 3745 0 obj <> endobj 3746 0 obj <> endobj 3747 0 obj <> endobj 3748 0 obj <> endobj 3749 0 obj <> endobj 3750 0 obj <> endobj 3751 0 obj <> endobj 3752 0 obj <> endobj 3753 0 obj <> endobj 3754 0 obj <> endobj 3755 0 obj <> endobj 3756 0 obj <> endobj 3757 0 obj <> endobj 3758 0 obj <> endobj 3759 0 obj <> endobj 3760 0 obj <> endobj 3761 0 obj <> endobj 3762 0 obj <> endobj 3763 0 obj <> endobj 3764 0 obj <> endobj 3765 0 obj <> endobj 3766 0 obj <> endobj 3767 0 obj <> endobj 3768 0 obj <> endobj 3769 0 obj <> endobj 3770 0 obj <> endobj 3771 0 obj <> endobj 3772 0 obj <> endobj 3773 0 obj <> endobj 3774 0 obj <> endobj 3775 0 obj <> endobj 3776 0 obj <> endobj 3777 0 obj <> endobj 3778 0 obj <> endobj 3779 0 obj <> endobj 3780 0 obj <> endobj 3781 0 obj <> endobj 3782 0 obj <> endobj 3783 0 obj <> endobj 3784 0 obj <> endobj 3785 0 obj <> endobj 3786 0 obj <> endobj 3787 0 obj <> endobj 3788 0 obj <> endobj 3789 0 obj <> endobj 3790 0 obj <> endobj 3791 0 obj <> endobj 3792 0 obj <> endobj 3793 0 obj <> endobj 3794 0 obj <> endobj 3795 0 obj <> endobj 3796 0 obj <> endobj 3797 0 obj <> endobj 3798 0 obj <> endobj 3799 0 obj <> endobj 3800 0 obj <> endobj 3801 0 obj <> endobj 3802 0 obj <> endobj 3803 0 obj <> endobj 3804 0 obj <> endobj 3805 0 obj <> endobj 3806 0 obj <> endobj 3807 0 obj <> endobj 3808 0 obj <> endobj 3809 0 obj <> endobj 3810 0 obj <> endobj 3811 0 obj <> endobj 3812 0 obj <> endobj 3813 0 obj <> endobj 3814 0 obj <> endobj 3815 0 obj <> endobj 3816 0 obj <> endobj 3817 0 obj <> endobj 3818 0 obj <> endobj 3819 0 obj <> endobj 3820 0 obj <> endobj 3821 0 obj <> endobj 3822 0 obj <> endobj 3823 0 obj <> endobj 3824 0 obj <> endobj 3825 0 obj <> endobj 3826 0 obj <> endobj 3827 0 obj <> endobj 3828 0 obj <> endobj 3829 0 obj <> endobj 3830 0 obj <> endobj 3831 0 obj <> endobj 3832 0 obj <> endobj 3833 0 obj <> endobj 3834 0 obj <> endobj 3835 0 obj <> endobj 3836 0 obj <> endobj 3837 0 obj <> endobj 3838 0 obj <> endobj 3839 0 obj <> endobj 3840 0 obj <> endobj 3841 0 obj <> endobj 3842 0 obj <> endobj 3843 0 obj <> endobj 3844 0 obj <> endobj 3845 0 obj <> endobj 3846 0 obj <> endobj 3847 0 obj <> endobj 3848 0 obj <> endobj 3849 0 obj <> endobj 3850 0 obj <> endobj 3851 0 obj <> endobj 3852 0 obj <> endobj 3853 0 obj <> endobj 3854 0 obj <> endobj 3855 0 obj <> endobj 3856 0 obj <> endobj 3857 0 obj <> endobj 3858 0 obj <> endobj 3859 0 obj <> endobj 3860 0 obj <> endobj 3861 0 obj <> endobj 3862 0 obj <> endobj 3863 0 obj <> endobj 3864 0 obj <> endobj 3865 0 obj <> endobj 3866 0 obj <> endobj 3867 0 obj <> endobj 3868 0 obj <> endobj 3869 0 obj <> endobj 3870 0 obj <> endobj 3871 0 obj <> endobj 3872 0 obj <> endobj 3873 0 obj <> endobj 3874 0 obj <> endobj 3875 0 obj <> endobj 3876 0 obj <> endobj 3877 0 obj <> endobj 3878 0 obj <> endobj 3879 0 obj <> endobj 3880 0 obj <> endobj 3881 0 obj <> endobj 3882 0 obj <> endobj 3883 0 obj <> endobj 3884 0 obj <> endobj 3885 0 obj <> endobj 3886 0 obj <> endobj 3887 0 obj <> endobj 3888 0 obj <> endobj 3889 0 obj <> endobj 3890 0 obj <> endobj 3891 0 obj <> endobj 3892 0 obj <> endobj 3893 0 obj <> endobj 3894 0 obj <> endobj 3895 0 obj <> endobj 3896 0 obj <> endobj 3897 0 obj <> endobj 3898 0 obj <> endobj 3899 0 obj <> endobj 3900 0 obj <> endobj 3901 0 obj <> endobj 3902 0 obj <> endobj 3903 0 obj <> endobj 3904 0 obj <> endobj 3905 0 obj <> endobj 3906 0 obj <> endobj 3907 0 obj <> endobj 3908 0 obj <> endobj 3909 0 obj <> endobj 3910 0 obj <> endobj 3911 0 obj <> endobj 3912 0 obj <> endobj 3913 0 obj <> endobj 3914 0 obj <> endobj 3915 0 obj <> endobj 3916 0 obj <> endobj 3917 0 obj <> endobj 3918 0 obj <> endobj 3919 0 obj <> endobj 3920 0 obj <> endobj 3921 0 obj <> endobj 3922 0 obj <> endobj 3923 0 obj <> endobj 3924 0 obj <> endobj 3925 0 obj <> endobj 3926 0 obj <> endobj 3927 0 obj <> endobj 3928 0 obj <> endobj 3929 0 obj <> endobj 3930 0 obj <> endobj 3931 0 obj <> endobj 3932 0 obj <> endobj 3933 0 obj <> endobj 3934 0 obj <> endobj 3935 0 obj <> endobj 3936 0 obj <> endobj 3937 0 obj <> endobj 3938 0 obj <> endobj 3939 0 obj <> endobj 3940 0 obj <> endobj 3941 0 obj <> endobj 3942 0 obj <> endobj 3943 0 obj <> endobj 3944 0 obj <> endobj 3945 0 obj <> endobj 3946 0 obj <> endobj 3947 0 obj <> endobj 3948 0 obj <> endobj 3949 0 obj <> endobj 3950 0 obj <> endobj 3951 0 obj <> endobj 3952 0 obj <> endobj 3953 0 obj <> endobj 3954 0 obj <> endobj 3955 0 obj <> endobj 3956 0 obj <> endobj 3957 0 obj <> endobj 3958 0 obj <> endobj 3959 0 obj <> endobj 3960 0 obj <> endobj 3961 0 obj <> endobj 3962 0 obj <> endobj 3963 0 obj <> endobj 3964 0 obj <> endobj 3965 0 obj <> endobj 3966 0 obj <> endobj 3967 0 obj <> endobj 3968 0 obj <> endobj 3969 0 obj <> endobj 3970 0 obj <> endobj 3971 0 obj <> endobj 3972 0 obj <> endobj 3973 0 obj <> endobj 3974 0 obj <> endobj 3975 0 obj <> endobj 3976 0 obj <> endobj 3977 0 obj <> endobj 3978 0 obj <> endobj 3979 0 obj <> endobj 3980 0 obj <> endobj 3981 0 obj <> endobj 3982 0 obj <> endobj 3983 0 obj <> endobj 3984 0 obj <> endobj 3985 0 obj <> endobj 3986 0 obj <> endobj 3987 0 obj <> endobj 3988 0 obj <> endobj 3989 0 obj <> endobj 3990 0 obj <> endobj 3991 0 obj <> endobj 3992 0 obj <> endobj 3993 0 obj <> endobj 3994 0 obj <> endobj 3995 0 obj <> endobj 3996 0 obj <> endobj 3997 0 obj <> endobj 3998 0 obj <> endobj 3999 0 obj <> endobj 4000 0 obj <> endobj 4001 0 obj <> endobj 4002 0 obj <> endobj 4003 0 obj <> endobj 4004 0 obj <> endobj 4005 0 obj <> endobj 4006 0 obj <> endobj 4007 0 obj <> endobj 4008 0 obj <> endobj 4009 0 obj <> endobj 4010 0 obj <> endobj 4011 0 obj <> endobj 4012 0 obj <> endobj 4013 0 obj <> endobj 4014 0 obj <> endobj 4015 0 obj <> endobj 4016 0 obj <> endobj 4017 0 obj <> endobj 4018 0 obj <> endobj 4019 0 obj <> endobj 4020 0 obj <> endobj 4021 0 obj <> endobj 4022 0 obj <> endobj 4023 0 obj <> endobj 4024 0 obj <> endobj 4025 0 obj <> endobj 4026 0 obj <> endobj 4027 0 obj <> endobj 4028 0 obj <> endobj 4029 0 obj <> endobj 4030 0 obj <> endobj 4031 0 obj <> endobj 4032 0 obj <> endobj 4033 0 obj <> endobj 4034 0 obj <> endobj 4035 0 obj <> endobj 4036 0 obj <> endobj 4037 0 obj <> endobj 4038 0 obj <> endobj 4039 0 obj <> endobj 4040 0 obj <> endobj 4041 0 obj <> endobj 4042 0 obj <> endobj 4043 0 obj <> endobj 4044 0 obj <> endobj 4045 0 obj <> endobj 4046 0 obj <> endobj 4047 0 obj <> endobj 4048 0 obj <> endobj 4049 0 obj <> endobj 4050 0 obj <> endobj 4051 0 obj <> endobj 4052 0 obj <> endobj 4053 0 obj <> endobj 4054 0 obj <> endobj 4055 0 obj <> endobj 4056 0 obj <> endobj 4057 0 obj <> endobj 4058 0 obj <> endobj 4059 0 obj <> endobj 4060 0 obj <> endobj 4061 0 obj <> endobj 4062 0 obj <> endobj 4063 0 obj <> endobj 4064 0 obj <> endobj 4065 0 obj <> endobj 4066 0 obj <> endobj 4067 0 obj <> endobj 4068 0 obj <> endobj 4069 0 obj <> endobj 4070 0 obj <> endobj 4071 0 obj <> endobj 4072 0 obj <> endobj 4073 0 obj <> endobj 4074 0 obj <> endobj 4075 0 obj <> endobj 4076 0 obj <> endobj 4077 0 obj <> endobj 4078 0 obj <> endobj 4079 0 obj <> endobj 4080 0 obj <> endobj 4081 0 obj <> endobj 4082 0 obj <> endobj 4083 0 obj <> endobj 4084 0 obj <> endobj 4085 0 obj <> endobj 4086 0 obj <> endobj 4087 0 obj <> endobj 4088 0 obj <> endobj 4089 0 obj <> endobj 4090 0 obj <> endobj 4091 0 obj <> endobj 4092 0 obj <> endobj 4093 0 obj <> endobj 4094 0 obj <> endobj 4095 0 obj <> endobj 4096 0 obj <> endobj 4097 0 obj <> endobj 4098 0 obj <> endobj 4099 0 obj <> endobj 4100 0 obj <> endobj 4101 0 obj <> endobj 4102 0 obj <> endobj 4103 0 obj <> endobj 4104 0 obj <> endobj 4105 0 obj <> endobj 4106 0 obj <> endobj 4107 0 obj <> endobj 4108 0 obj <> endobj 4109 0 obj <> endobj 4110 0 obj <> endobj 4111 0 obj <> endobj 4112 0 obj <> endobj 4113 0 obj <> endobj 4114 0 obj <> endobj 4115 0 obj <> endobj 4116 0 obj <> endobj 4117 0 obj <> endobj 4118 0 obj <> endobj 4119 0 obj <> endobj 4120 0 obj <> endobj 4121 0 obj <> endobj 4122 0 obj <> endobj 4123 0 obj <> endobj 4124 0 obj <> endobj 4125 0 obj <> endobj 4126 0 obj <> endobj 4127 0 obj <> endobj 4128 0 obj <> endobj 4129 0 obj <> endobj 4130 0 obj <> endobj 4131 0 obj <> endobj 4132 0 obj <> endobj 4133 0 obj <> endobj 4134 0 obj <> endobj 4135 0 obj <> endobj 4136 0 obj <> endobj 4137 0 obj <> endobj 4138 0 obj <> endobj 4139 0 obj <> endobj 4140 0 obj <> endobj 4141 0 obj <> endobj 4142 0 obj <> endobj 4143 0 obj <> endobj 4144 0 obj <> endobj 4145 0 obj <> endobj 4146 0 obj <> endobj 4147 0 obj <> endobj 4148 0 obj <> endobj 4149 0 obj <> endobj 4150 0 obj <> endobj 4151 0 obj <> endobj 4152 0 obj <> endobj 4153 0 obj <> endobj 4154 0 obj <> endobj 4155 0 obj <> endobj 4156 0 obj <> endobj 4157 0 obj <> endobj 4158 0 obj <> endobj 4159 0 obj <> endobj 4160 0 obj <> endobj 4161 0 obj <> endobj 4162 0 obj <> endobj 4163 0 obj <> endobj 4164 0 obj <> endobj 4165 0 obj <> endobj 4166 0 obj <> endobj 4167 0 obj <> endobj 4168 0 obj <> endobj 4169 0 obj <> endobj 4170 0 obj <> endobj 4171 0 obj <> endobj 4172 0 obj <> endobj 4173 0 obj <> endobj 4174 0 obj <> endobj 4175 0 obj <> endobj 4176 0 obj <> endobj 4177 0 obj <> endobj 4178 0 obj <> endobj 4179 0 obj <> endobj 4180 0 obj <> endobj 4181 0 obj <> endobj 4182 0 obj <> endobj 4183 0 obj <> endobj 4184 0 obj <> endobj 4185 0 obj <> endobj 4186 0 obj <> endobj 4187 0 obj <> endobj 4188 0 obj <> endobj 4189 0 obj <> endobj 4190 0 obj <> endobj 4191 0 obj <> endobj 4192 0 obj <> endobj 4193 0 obj <> endobj 4194 0 obj <> endobj 4195 0 obj <> endobj 4196 0 obj <> endobj 4197 0 obj <> endobj 4198 0 obj <> endobj 4199 0 obj <> endobj 4200 0 obj <> endobj 4201 0 obj <> endobj 4202 0 obj <> endobj 4203 0 obj <> endobj 4204 0 obj <> endobj 4205 0 obj <> endobj 4206 0 obj <> endobj 4207 0 obj <> endobj 4208 0 obj <> endobj 4209 0 obj <> endobj 4210 0 obj <> endobj 4211 0 obj <> endobj 4212 0 obj <> endobj 4213 0 obj <> endobj 4214 0 obj <> endobj 4215 0 obj <> endobj 4216 0 obj <> endobj 4217 0 obj <> endobj 4218 0 obj <> endobj 4219 0 obj <> endobj 4220 0 obj <> endobj 4221 0 obj <> endobj 4222 0 obj <> endobj 4223 0 obj <> endobj 4224 0 obj <> endobj 4225 0 obj <> endobj 4226 0 obj <> endobj 4227 0 obj <> endobj 4228 0 obj <> endobj 4229 0 obj <> endobj 4230 0 obj <> endobj 4231 0 obj <> endobj 4232 0 obj <> endobj 4233 0 obj <> endobj 4234 0 obj <> endobj 4235 0 obj <> endobj 4236 0 obj <> endobj 4237 0 obj <> endobj 4238 0 obj <> endobj 4239 0 obj <> endobj 4240 0 obj <> endobj 4241 0 obj <> endobj 4242 0 obj <> endobj 4243 0 obj <> endobj 4244 0 obj <> endobj 4245 0 obj <> endobj 4246 0 obj <> endobj 4247 0 obj <> endobj 4248 0 obj <> endobj 4249 0 obj <> endobj 4250 0 obj <> endobj 4251 0 obj <> endobj 4252 0 obj <> endobj 4253 0 obj <> endobj 4254 0 obj <> endobj 4255 0 obj <> endobj 4256 0 obj <> endobj 4257 0 obj <> endobj 4258 0 obj <> endobj 4259 0 obj <> endobj 4260 0 obj <> endobj 4261 0 obj <> endobj 4262 0 obj <> endobj 4263 0 obj <> endobj 4264 0 obj <> endobj 4265 0 obj <> endobj 4266 0 obj <> endobj 4267 0 obj <> endobj 4268 0 obj <> endobj 4269 0 obj <> endobj 4270 0 obj <> endobj 4271 0 obj <> endobj 4272 0 obj <> endobj 4273 0 obj <> endobj 4274 0 obj <> endobj 4275 0 obj <> endobj 4276 0 obj <> endobj 4277 0 obj <> endobj 4278 0 obj <> endobj 4279 0 obj <> endobj 4280 0 obj <> endobj 4281 0 obj <> endobj 4282 0 obj <> endobj 4283 0 obj <> endobj 4284 0 obj <> endobj 4285 0 obj <> endobj 4286 0 obj <> endobj 4287 0 obj <> endobj 4288 0 obj <> endobj 4289 0 obj <> endobj 4290 0 obj <> endobj 4291 0 obj <> endobj 4292 0 obj <> endobj 4293 0 obj <> endobj 4294 0 obj <> endobj 4295 0 obj <> endobj 4296 0 obj <> endobj 4297 0 obj <> endobj 4298 0 obj <> endobj 4299 0 obj <> endobj 4300 0 obj <> endobj 4301 0 obj <> endobj 4302 0 obj <> endobj 4303 0 obj <> endobj 4304 0 obj <> endobj 4305 0 obj <> endobj 4306 0 obj <> endobj 4307 0 obj <> endobj 4308 0 obj <> endobj 4309 0 obj <> endobj 4310 0 obj <> endobj 4311 0 obj <> endobj 4312 0 obj <> endobj 4313 0 obj <> endobj 4314 0 obj <> endobj 4315 0 obj <> endobj 4316 0 obj <> endobj 4317 0 obj <> endobj 4318 0 obj <> endobj 4319 0 obj <> endobj 4320 0 obj <> endobj 4321 0 obj <> endobj 4322 0 obj <> endobj 4323 0 obj <> endobj 4324 0 obj <> endobj 4325 0 obj <> endobj 4326 0 obj <> endobj 4327 0 obj <> endobj 4328 0 obj <> endobj 4329 0 obj <> endobj 4330 0 obj <> endobj 4331 0 obj <> endobj 4332 0 obj <> endobj 4333 0 obj <> endobj 4334 0 obj <> endobj 4335 0 obj <> endobj 4336 0 obj <> endobj 4337 0 obj <> endobj 4338 0 obj <> endobj 4339 0 obj <> endobj 4340 0 obj <> endobj 4341 0 obj <> endobj 4342 0 obj <> endobj 4343 0 obj <> endobj 4344 0 obj <> endobj 4345 0 obj <> endobj 4346 0 obj <> endobj 4347 0 obj <> endobj 4348 0 obj <> endobj 4349 0 obj <> endobj 4350 0 obj <> endobj 4351 0 obj <> endobj 4352 0 obj <> endobj 4353 0 obj <> endobj 4354 0 obj <> endobj 4355 0 obj <> endobj 4356 0 obj <> endobj 4357 0 obj <> endobj 4358 0 obj <> endobj 4359 0 obj <> endobj 4360 0 obj <> endobj 4361 0 obj <> endobj 4362 0 obj <> endobj 4363 0 obj <> endobj 4364 0 obj <> endobj 4365 0 obj <> endobj 4366 0 obj <> endobj 4367 0 obj <> endobj 4368 0 obj <> endobj 4369 0 obj <> endobj 4370 0 obj <> endobj 4371 0 obj <> endobj 4372 0 obj <> endobj 4373 0 obj <> endobj 4374 0 obj <> endobj 4375 0 obj <> endobj 4376 0 obj <> endobj 4377 0 obj <> endobj 4378 0 obj <> endobj 4379 0 obj <> endobj 4380 0 obj <> endobj 4381 0 obj <> endobj 4382 0 obj <> endobj 4383 0 obj <> endobj 4384 0 obj <> endobj 4385 0 obj <> endobj 4386 0 obj <> endobj 4387 0 obj <> endobj 4388 0 obj <> endobj 4389 0 obj <> endobj 4390 0 obj <> endobj 4391 0 obj <> endobj 4392 0 obj <> endobj 4393 0 obj <> endobj 4394 0 obj <> endobj 4395 0 obj <> endobj 4396 0 obj <> endobj 4397 0 obj <> endobj 4398 0 obj <> endobj 4399 0 obj <> endobj 4400 0 obj <> endobj 4401 0 obj <> endobj 4402 0 obj <> endobj 4403 0 obj <> endobj 4404 0 obj <> endobj 4405 0 obj <> endobj 4406 0 obj <> endobj 4407 0 obj <> endobj 4408 0 obj <> endobj 4409 0 obj <> endobj 4410 0 obj <> endobj 4411 0 obj <> endobj 4412 0 obj <> endobj 4413 0 obj <> endobj 4414 0 obj <> endobj 4415 0 obj <> endobj 4416 0 obj <> endobj 4417 0 obj <> endobj 4418 0 obj <> endobj 4419 0 obj <> endobj 4420 0 obj <> endobj 4421 0 obj <> endobj 4422 0 obj <> endobj 4423 0 obj <> endobj 4424 0 obj <> endobj 4425 0 obj <> endobj 4426 0 obj <> endobj 4427 0 obj <> endobj 4428 0 obj <> endobj 4429 0 obj <> endobj 4430 0 obj <> endobj 4431 0 obj <> endobj 4432 0 obj <> endobj 4433 0 obj <> endobj 4434 0 obj <> endobj 4435 0 obj <> endobj 4436 0 obj <> endobj 4437 0 obj <> endobj 4438 0 obj <> endobj 4439 0 obj <> endobj 4440 0 obj <> endobj 4441 0 obj <> endobj 4442 0 obj <> endobj 4443 0 obj <> endobj 4444 0 obj <> endobj 4445 0 obj <> endobj 4446 0 obj <> endobj 4447 0 obj <> endobj 4448 0 obj <> endobj 4449 0 obj <> endobj 4450 0 obj <> endobj 4451 0 obj <> endobj 4452 0 obj <> endobj 4453 0 obj <> endobj 4454 0 obj <> endobj 4455 0 obj <> endobj 4456 0 obj <> endobj 4457 0 obj <> endobj 4458 0 obj <> endobj 4459 0 obj <> endobj 4460 0 obj <> endobj 4461 0 obj <> endobj 4462 0 obj <> endobj 4463 0 obj <> endobj 4464 0 obj <> endobj 4465 0 obj <> endobj 4466 0 obj <> endobj 4467 0 obj <> endobj 4468 0 obj <> endobj 4469 0 obj <> endobj 4470 0 obj <> endobj 4471 0 obj <> endobj 4472 0 obj <> endobj 4473 0 obj <> endobj 4474 0 obj <> endobj 4475 0 obj <> endobj 4476 0 obj <> endobj 4477 0 obj <> endobj 4478 0 obj <> endobj 4479 0 obj <> endobj 4480 0 obj <> endobj 4481 0 obj <> endobj 4482 0 obj <> endobj 4483 0 obj <> endobj 4484 0 obj <> endobj 4485 0 obj <> endobj 4486 0 obj <> endobj 4487 0 obj <> endobj 4488 0 obj <> endobj 4489 0 obj <> endobj 4490 0 obj <> endobj 4491 0 obj <> endobj 4492 0 obj <> endobj 4493 0 obj <> endobj 4494 0 obj <> endobj 4495 0 obj <> endobj 4496 0 obj <> endobj 4497 0 obj <> endobj 4498 0 obj <> endobj 4499 0 obj <> endobj 4500 0 obj <> endobj 4501 0 obj <> endobj 4502 0 obj <> endobj 4503 0 obj <> endobj 4504 0 obj <> endobj 4505 0 obj <> endobj 4506 0 obj <> endobj 4507 0 obj <> endobj 4508 0 obj <> endobj 4509 0 obj <> endobj 4510 0 obj <> endobj 4511 0 obj <> endobj 4512 0 obj <> endobj 4513 0 obj <> endobj 4514 0 obj <> endobj 4515 0 obj <> endobj 4516 0 obj <> endobj 4517 0 obj <> endobj 4518 0 obj <> endobj 4519 0 obj <> endobj 4520 0 obj <> endobj 4521 0 obj <> endobj 4522 0 obj <> endobj 4523 0 obj <> endobj 4524 0 obj <> endobj 4525 0 obj <> endobj 4526 0 obj <> endobj 4527 0 obj <> endobj 4528 0 obj <> endobj 4529 0 obj <> endobj 4530 0 obj <> endobj 4531 0 obj <> endobj 4532 0 obj <> endobj 4533 0 obj <> endobj 4534 0 obj <> endobj 4535 0 obj <> endobj 4536 0 obj <> endobj 4537 0 obj <> endobj 4538 0 obj <> endobj 4539 0 obj <> endobj 4540 0 obj <> endobj 4541 0 obj <> endobj 4542 0 obj <> endobj 4543 0 obj <> endobj 4544 0 obj <> endobj 4545 0 obj <> endobj 4546 0 obj <> endobj 4547 0 obj <> endobj 4548 0 obj <> endobj 4549 0 obj <> endobj 4550 0 obj <> endobj 4551 0 obj <> endobj 4552 0 obj <> endobj 4553 0 obj <> endobj 4554 0 obj <> endobj 4555 0 obj <> endobj 4556 0 obj <> endobj 4557 0 obj <> endobj 4558 0 obj <> endobj 4559 0 obj <> endobj 4560 0 obj <> endobj 4561 0 obj <> endobj 4562 0 obj <> endobj 4563 0 obj <> endobj 4564 0 obj <> endobj 4565 0 obj <> endobj 4566 0 obj <> endobj 4567 0 obj <> endobj 4568 0 obj <> endobj 4569 0 obj <> endobj 4570 0 obj <> endobj 4571 0 obj <> endobj 4572 0 obj <> endobj 4573 0 obj <> endobj 4574 0 obj <> endobj 4575 0 obj <> endobj 4576 0 obj <> endobj 4577 0 obj <> endobj 4578 0 obj <> endobj 4579 0 obj <> endobj 4580 0 obj <> endobj 4581 0 obj <> endobj 4582 0 obj <> endobj 4583 0 obj <> endobj 4584 0 obj <> endobj 4585 0 obj <> endobj 4586 0 obj <> endobj 4587 0 obj <> endobj 4588 0 obj <> endobj 4589 0 obj <> endobj 4590 0 obj <> endobj 4591 0 obj <> endobj 4592 0 obj <> endobj 4593 0 obj <> endobj 4594 0 obj <> endobj 4595 0 obj <> endobj 4596 0 obj <> endobj 4597 0 obj <> endobj 4598 0 obj <> endobj 4599 0 obj <> endobj 4600 0 obj <> endobj 4601 0 obj <> endobj 4602 0 obj <> endobj 4603 0 obj <> endobj 4604 0 obj <> endobj 4605 0 obj <> endobj 4606 0 obj <> endobj 4607 0 obj <> endobj 4608 0 obj <> endobj 4609 0 obj <> endobj 4610 0 obj <> endobj 4611 0 obj <> endobj 4612 0 obj <> endobj 4613 0 obj <> endobj 4614 0 obj <> endobj 4615 0 obj <> endobj 4616 0 obj <> endobj 4617 0 obj <> endobj 4618 0 obj <> endobj 4619 0 obj <> endobj 4620 0 obj <> endobj 4621 0 obj <> endobj 4622 0 obj <> endobj 4623 0 obj <> endobj 4624 0 obj <> endobj 4625 0 obj <> endobj 4626 0 obj <> endobj 4627 0 obj <> endobj 4628 0 obj <> endobj 4629 0 obj <> endobj 4630 0 obj <> endobj 4631 0 obj <> endobj 4632 0 obj <> endobj 4633 0 obj <> endobj 4634 0 obj <> endobj 4635 0 obj <> endobj 4636 0 obj <> endobj 4637 0 obj <> endobj 4638 0 obj <> endobj 4639 0 obj <> endobj 4640 0 obj <> endobj 4641 0 obj <> endobj 4642 0 obj <> endobj 4643 0 obj <> endobj 4644 0 obj <> endobj 4645 0 obj <> endobj 4646 0 obj <> endobj 4647 0 obj <> endobj 4648 0 obj <> endobj 4649 0 obj <> endobj 4650 0 obj <> endobj 4651 0 obj <> endobj 4652 0 obj <> endobj 4653 0 obj <> endobj 4654 0 obj <> endobj 4655 0 obj <> endobj 4656 0 obj <> endobj 4657 0 obj <> endobj 4658 0 obj <> endobj 4659 0 obj <> endobj 4660 0 obj <> endobj 4661 0 obj <> endobj 4662 0 obj <> endobj 4663 0 obj <> endobj 4664 0 obj <> endobj 4665 0 obj <> endobj 4666 0 obj <> endobj 4667 0 obj <> endobj 4668 0 obj <> endobj 4669 0 obj <> endobj 4670 0 obj <> endobj 4671 0 obj <> endobj 4672 0 obj <> endobj 4673 0 obj <> endobj 4674 0 obj <> endobj 4675 0 obj <> endobj 4676 0 obj <> endobj 4677 0 obj <> endobj 4678 0 obj <> endobj 4679 0 obj <> endobj 4680 0 obj <> endobj 4681 0 obj <> endobj 4682 0 obj <> endobj 4683 0 obj <> endobj 4684 0 obj <> endobj 4685 0 obj <> endobj 4686 0 obj <> endobj 4687 0 obj <> endobj 4688 0 obj <> endobj 4689 0 obj <> endobj 4690 0 obj <> endobj 4691 0 obj <> endobj 4692 0 obj <> endobj 4693 0 obj <> endobj 4694 0 obj <> endobj 4695 0 obj <> endobj 4696 0 obj <> endobj 4697 0 obj <> endobj 4698 0 obj <> endobj 4699 0 obj <> endobj 4700 0 obj <> endobj 4701 0 obj <> endobj 4702 0 obj <> endobj 4703 0 obj <> endobj 4704 0 obj <> endobj 4705 0 obj <> endobj 4706 0 obj <> endobj 4707 0 obj <> endobj 4708 0 obj <> endobj 4709 0 obj <> endobj 4710 0 obj <> endobj 4711 0 obj <> endobj 4712 0 obj <> endobj 4713 0 obj <> endobj 4714 0 obj <> endobj 4715 0 obj <> endobj 4716 0 obj <> endobj 4717 0 obj <> endobj 4718 0 obj <> endobj 4719 0 obj <> endobj 4720 0 obj <> endobj 4721 0 obj <> endobj 4722 0 obj <> endobj 4723 0 obj <> endobj 4724 0 obj <> endobj 4725 0 obj <> endobj 4726 0 obj <> endobj 4727 0 obj <> endobj 4728 0 obj <> endobj 4729 0 obj <> endobj 4730 0 obj <> endobj 4731 0 obj <> endobj 4732 0 obj <> endobj 4733 0 obj <> endobj 4734 0 obj <> endobj 4735 0 obj <> endobj 4736 0 obj <> endobj 4737 0 obj <> endobj 4738 0 obj <> endobj 4739 0 obj <> endobj 4740 0 obj <> endobj 4741 0 obj <> endobj 4742 0 obj <> endobj 4743 0 obj <> endobj 4744 0 obj <> endobj 4745 0 obj <> endobj 4746 0 obj <> endobj 4747 0 obj <> endobj 4748 0 obj <> endobj 4749 0 obj <> endobj 4750 0 obj <> endobj 4751 0 obj <> endobj 4752 0 obj <> endobj 4753 0 obj <> endobj 4754 0 obj <> endobj 4755 0 obj <> endobj 4756 0 obj <> endobj 4757 0 obj <> endobj 4758 0 obj <> endobj 4759 0 obj <> endobj 4760 0 obj <> endobj 4761 0 obj <> endobj 4762 0 obj <> endobj 4763 0 obj <> endobj 4764 0 obj <> endobj 4765 0 obj <> endobj 4766 0 obj <> endobj 4767 0 obj <> endobj 4768 0 obj <> endobj 4769 0 obj <> endobj 4770 0 obj <> endobj 4771 0 obj <> endobj 4772 0 obj <> endobj 4773 0 obj <> endobj 4774 0 obj <> endobj 4775 0 obj <> endobj 4776 0 obj <> endobj 4777 0 obj <> endobj 4778 0 obj <> endobj 4779 0 obj <> endobj 4780 0 obj <> endobj 4781 0 obj <> endobj 4782 0 obj <> endobj 4783 0 obj <> endobj 4784 0 obj <> endobj 4785 0 obj <> endobj 4786 0 obj <> endobj 4787 0 obj <> endobj 4788 0 obj <> endobj 4789 0 obj <> endobj 4790 0 obj <> endobj 4791 0 obj <> endobj 4792 0 obj <> endobj 4793 0 obj <> endobj 4794 0 obj <> endobj 4795 0 obj <> endobj 4796 0 obj <> endobj 4797 0 obj <> endobj 4798 0 obj <> endobj 4799 0 obj <> endobj 4800 0 obj <> endobj 4801 0 obj <> endobj 4802 0 obj <> endobj 4803 0 obj <> endobj 4804 0 obj <> endobj 4805 0 obj <> endobj 4806 0 obj <> endobj 4807 0 obj <> endobj 4808 0 obj <> endobj 4809 0 obj <> endobj 4810 0 obj <> endobj 4811 0 obj <> endobj 4812 0 obj <> endobj 4813 0 obj <> endobj 4814 0 obj <> endobj 4815 0 obj <> endobj 4816 0 obj <> endobj 4817 0 obj <> endobj 4818 0 obj <> endobj 4819 0 obj <> endobj 4820 0 obj <> endobj 4821 0 obj <> endobj 4822 0 obj <> endobj 4823 0 obj <> endobj 4824 0 obj <> endobj 4825 0 obj <> endobj 4826 0 obj <> endobj 4827 0 obj <> endobj 4828 0 obj <> endobj 4829 0 obj <> endobj 4830 0 obj <> endobj 4831 0 obj <> endobj 4832 0 obj <> endobj 4833 0 obj <> endobj 4834 0 obj <> endobj 4835 0 obj <> endobj 4836 0 obj <> endobj 4837 0 obj <> endobj 4838 0 obj <> endobj 4839 0 obj <> endobj 4840 0 obj <> endobj 4841 0 obj <> endobj 4842 0 obj <> endobj 4843 0 obj <> endobj 4844 0 obj <> endobj 4845 0 obj <> endobj 4846 0 obj <> endobj 4847 0 obj <> endobj 4848 0 obj <> endobj 4849 0 obj <> endobj 4850 0 obj <> endobj 4851 0 obj <> endobj 4852 0 obj <> endobj 4853 0 obj <> endobj 4854 0 obj <> endobj 4855 0 obj <> endobj 4856 0 obj <> endobj 4857 0 obj <> endobj 4858 0 obj <> endobj 4859 0 obj <> endobj 4860 0 obj <> endobj 4861 0 obj <> endobj 4862 0 obj <> endobj 4863 0 obj <> endobj 4864 0 obj <> endobj 4865 0 obj <> endobj 4866 0 obj <> endobj 4867 0 obj <> endobj 4868 0 obj <> endobj 4869 0 obj <> endobj 4870 0 obj <> endobj 4871 0 obj <> endobj 4872 0 obj <> endobj 4873 0 obj <> endobj 4874 0 obj <> endobj 4875 0 obj <> endobj 4876 0 obj <> endobj 4877 0 obj <> endobj 4878 0 obj <> endobj 4879 0 obj <> endobj 4880 0 obj <> endobj 4881 0 obj <> endobj 4882 0 obj <> endobj 4883 0 obj <> endobj 4884 0 obj <> endobj 4885 0 obj <> endobj 4886 0 obj <> endobj 4887 0 obj <> endobj 4888 0 obj <> endobj 4889 0 obj <> endobj 4890 0 obj <> endobj 4891 0 obj <> endobj 4892 0 obj <> endobj 4893 0 obj <> endobj 4894 0 obj <> endobj 4895 0 obj <> endobj 4896 0 obj <> endobj 4897 0 obj <> endobj 4898 0 obj <> endobj 4899 0 obj <> endobj 4900 0 obj <> endobj 4901 0 obj <> endobj 4902 0 obj <> endobj 4903 0 obj <> endobj 4904 0 obj <> endobj 4905 0 obj <> endobj 4906 0 obj <> endobj 4907 0 obj <> endobj 4908 0 obj <> endobj 4909 0 obj <> endobj 4910 0 obj <> endobj 4911 0 obj <> endobj 4912 0 obj <> endobj 4913 0 obj <> endobj 4914 0 obj <> endobj 4915 0 obj <> endobj 4916 0 obj <> endobj 4917 0 obj <> endobj 4918 0 obj <> endobj 4919 0 obj <> endobj 4920 0 obj <> endobj 4921 0 obj <> endobj 4922 0 obj <> endobj 4923 0 obj <> endobj 4924 0 obj <> endobj 4925 0 obj <> endobj 4926 0 obj <> endobj 4927 0 obj <> endobj 4928 0 obj <> endobj 4929 0 obj <> endobj 4930 0 obj <> endobj 4931 0 obj <> endobj 4932 0 obj <> endobj 4933 0 obj <> endobj 4934 0 obj <> endobj 4935 0 obj <> endobj 4936 0 obj <> endobj 4937 0 obj <> endobj 4938 0 obj <> endobj 4939 0 obj <> endobj 4940 0 obj <> endobj 4941 0 obj <> endobj 4942 0 obj <> endobj 4943 0 obj <> endobj 4944 0 obj <> endobj 4945 0 obj <> endobj 4946 0 obj <> endobj 4947 0 obj <> endobj 4948 0 obj <> endobj 4949 0 obj <> endobj 4950 0 obj <> endobj 4951 0 obj <> endobj 4952 0 obj <> endobj 4953 0 obj <> endobj 4954 0 obj <> endobj 4955 0 obj <> endobj 4956 0 obj <> endobj 4957 0 obj <> endobj 4958 0 obj <> endobj 4959 0 obj <> endobj 4960 0 obj <> endobj 4961 0 obj <> endobj 4962 0 obj <> endobj 4963 0 obj <> endobj 4964 0 obj <> endobj 4965 0 obj <> endobj 4966 0 obj <> endobj 4967 0 obj <> endobj 4968 0 obj <> endobj 4969 0 obj <> endobj 4970 0 obj <> endobj 4971 0 obj <> endobj 4972 0 obj <> endobj 4973 0 obj <> endobj 4974 0 obj <> endobj 4975 0 obj <> endobj 4976 0 obj <> endobj 4977 0 obj <> endobj 4978 0 obj <> endobj 4979 0 obj <> endobj 4980 0 obj <> endobj 4981 0 obj <> endobj 4982 0 obj <> endobj 4983 0 obj <> endobj 4984 0 obj <> endobj 4985 0 obj <> endobj 4986 0 obj <> endobj 4987 0 obj <> endobj 4988 0 obj <> endobj 4989 0 obj <> endobj 4990 0 obj <> endobj 4991 0 obj <> endobj 4992 0 obj <> endobj 4993 0 obj <> endobj 4994 0 obj <> endobj 4995 0 obj <> endobj 4996 0 obj <> endobj 4997 0 obj <> endobj 4998 0 obj <> endobj 4999 0 obj <> endobj 5000 0 obj <> endobj 5001 0 obj <> endobj 5002 0 obj <> endobj 5003 0 obj <> endobj 5004 0 obj <> endobj 5005 0 obj <> endobj 5006 0 obj <> endobj 5007 0 obj <> endobj 5008 0 obj <> endobj 5009 0 obj <> endobj 5010 0 obj <> endobj 5011 0 obj <> endobj 5012 0 obj <> endobj 5013 0 obj <> endobj 5014 0 obj <> endobj 5015 0 obj <> endobj 5016 0 obj <> endobj 5017 0 obj <> endobj 5018 0 obj <> endobj 5019 0 obj <> endobj 5020 0 obj <> endobj 5021 0 obj <> endobj 5022 0 obj <> endobj 5023 0 obj <> endobj 5024 0 obj <> endobj 5025 0 obj <> endobj 5026 0 obj <> endobj 5027 0 obj <> endobj 5028 0 obj <> endobj 5029 0 obj <> endobj 5030 0 obj <> endobj 5031 0 obj <> endobj 5032 0 obj <> endobj 5033 0 obj <> endobj 5034 0 obj <> endobj 5035 0 obj <> endobj 5036 0 obj <> endobj 5037 0 obj <> endobj 5038 0 obj <> endobj 5039 0 obj <> endobj 5040 0 obj <> endobj 5041 0 obj <> endobj 5042 0 obj <> endobj 5043 0 obj <> endobj 5044 0 obj <> endobj 5045 0 obj <> endobj 5046 0 obj <> endobj 5047 0 obj <> endobj 5048 0 obj <> endobj 5049 0 obj <> endobj 5050 0 obj <> endobj 5051 0 obj <> endobj 5052 0 obj <> endobj 5053 0 obj <> endobj 5054 0 obj <> endobj 5055 0 obj <> endobj 5056 0 obj <> endobj 5057 0 obj <> endobj 5058 0 obj <> endobj 5059 0 obj <> endobj 5060 0 obj <> endobj 5061 0 obj <> endobj 5062 0 obj <> endobj 5063 0 obj <> endobj 5064 0 obj <> endobj 5065 0 obj <> endobj 5066 0 obj <> endobj 5067 0 obj <> endobj 5068 0 obj <> endobj 5069 0 obj <> endobj 5070 0 obj <> endobj 5071 0 obj <> endobj 5072 0 obj <> endobj 5073 0 obj <> endobj 5074 0 obj <> endobj 5075 0 obj <> endobj 5076 0 obj <> endobj 5077 0 obj <> endobj 5078 0 obj <> endobj 5079 0 obj <> endobj 5080 0 obj <> endobj 5081 0 obj <> endobj 5082 0 obj <> endobj 5083 0 obj <> endobj 5084 0 obj <> endobj 5085 0 obj <> endobj 5086 0 obj <> endobj 5087 0 obj <> endobj 5088 0 obj <> endobj 5089 0 obj <> endobj 5090 0 obj <> endobj 5091 0 obj <> endobj 5092 0 obj <> endobj 5093 0 obj <> endobj 5094 0 obj <> endobj 5095 0 obj <> endobj 5096 0 obj <> endobj 5097 0 obj <> endobj 5098 0 obj <> endobj 5099 0 obj <> endobj 5100 0 obj <> endobj 5101 0 obj <> endobj 5102 0 obj <> endobj 5103 0 obj <> endobj 5104 0 obj <> endobj 5105 0 obj <> endobj 5106 0 obj <> endobj 5107 0 obj <> endobj 5108 0 obj <> endobj 5109 0 obj <> endobj 5110 0 obj <> endobj 5111 0 obj <> endobj 5112 0 obj <> endobj 5113 0 obj <> endobj 5114 0 obj <> endobj 5115 0 obj <> endobj 5116 0 obj <> endobj 5117 0 obj <> endobj 5118 0 obj <> endobj 5119 0 obj <> endobj 5120 0 obj <> endobj 5121 0 obj <> endobj 5122 0 obj <> endobj 5123 0 obj <> endobj 5124 0 obj <> endobj 5125 0 obj <> endobj 5126 0 obj <> endobj 5127 0 obj <> endobj 5128 0 obj <> endobj 5129 0 obj <> endobj 5130 0 obj <> endobj 5131 0 obj <> endobj 5132 0 obj <> endobj 5133 0 obj <> endobj 5134 0 obj <> endobj 5135 0 obj <> endobj 5136 0 obj <> endobj 5137 0 obj <> endobj 5138 0 obj <> endobj 5139 0 obj <> endobj 5140 0 obj <> endobj 5141 0 obj <> endobj 5142 0 obj <> endobj 5143 0 obj <> endobj 5144 0 obj <> endobj 5145 0 obj <> endobj 5146 0 obj <> endobj 5147 0 obj <> endobj 5148 0 obj <> endobj 5149 0 obj <> endobj 5150 0 obj <> endobj 5151 0 obj <> endobj 5152 0 obj <> endobj 5153 0 obj <> endobj 5154 0 obj <> endobj 5155 0 obj <> endobj 5156 0 obj <> endobj 5157 0 obj <> endobj 5158 0 obj <> endobj 5159 0 obj <> endobj 5160 0 obj <> endobj 5161 0 obj <> endobj 5162 0 obj <> endobj 5163 0 obj <> endobj 5164 0 obj <> endobj 5165 0 obj <> endobj 5166 0 obj <> endobj 5167 0 obj <> endobj 5168 0 obj <> endobj 5169 0 obj <> endobj 5170 0 obj <> endobj 5171 0 obj <> endobj 5172 0 obj <> endobj 5173 0 obj <> endobj 5174 0 obj <> endobj 5175 0 obj <> endobj 5176 0 obj <> endobj 5177 0 obj <> endobj 5178 0 obj <> endobj 5179 0 obj <> endobj 5180 0 obj <> endobj 5181 0 obj <> endobj 5182 0 obj <> endobj 5183 0 obj <> endobj 5184 0 obj <> endobj 5185 0 obj <> endobj 5186 0 obj <> endobj 5187 0 obj <> endobj 5188 0 obj <> endobj 5189 0 obj <> endobj 5190 0 obj <> endobj 5191 0 obj <> endobj 5192 0 obj <> endobj 5193 0 obj <> endobj 5194 0 obj <> endobj 5195 0 obj <> endobj 5196 0 obj <> endobj 5197 0 obj <> endobj 5198 0 obj <> endobj 5199 0 obj <> endobj 5200 0 obj <> endobj 5201 0 obj <> endobj 5202 0 obj <> endobj 5203 0 obj <> endobj 5204 0 obj <> endobj 5205 0 obj <> endobj 5206 0 obj <> endobj 5207 0 obj <> endobj 5208 0 obj <> endobj 5209 0 obj <> endobj 5210 0 obj <> endobj 5211 0 obj <> endobj 5212 0 obj <> endobj 5213 0 obj <> endobj 5214 0 obj <> endobj 5215 0 obj <> endobj 5216 0 obj <> endobj 5217 0 obj <> endobj 5218 0 obj <> endobj 5219 0 obj <> endobj 5220 0 obj <> endobj 5221 0 obj <> endobj 5222 0 obj <> endobj 5223 0 obj <> endobj 5224 0 obj <> endobj 5225 0 obj <> endobj 5226 0 obj <> endobj 5227 0 obj <> endobj 5228 0 obj <> endobj 5229 0 obj <> endobj 5230 0 obj <> endobj 5231 0 obj <> endobj 5232 0 obj <> endobj 5233 0 obj <> endobj 5234 0 obj <> endobj 5235 0 obj <> endobj 5236 0 obj <> endobj 5237 0 obj <> endobj 5238 0 obj <> endobj 5239 0 obj <> endobj 5240 0 obj <> endobj 5241 0 obj <> endobj 5242 0 obj <> endobj 5243 0 obj <> endobj 5244 0 obj <> endobj 5245 0 obj <> endobj 5246 0 obj <> endobj 5247 0 obj <> endobj 5248 0 obj <> endobj 5249 0 obj <> endobj 5250 0 obj <> endobj 5251 0 obj <> endobj 5252 0 obj <> endobj 5253 0 obj <> endobj 5254 0 obj <> endobj 5255 0 obj <> endobj 5256 0 obj <> endobj 5257 0 obj <> endobj 5258 0 obj <> endobj 5259 0 obj <> endobj 5260 0 obj <> endobj 5261 0 obj <> endobj 5262 0 obj <> endobj 5263 0 obj <> endobj 5264 0 obj <> endobj 5265 0 obj <> endobj 5266 0 obj <> endobj 5267 0 obj <> endobj 5268 0 obj <> endobj 5269 0 obj <> endobj 5270 0 obj <> endobj 5271 0 obj <> endobj 5272 0 obj <> endobj 5273 0 obj <> endobj 5274 0 obj <> endobj 5275 0 obj <> endobj 5276 0 obj <> endobj 5277 0 obj <> endobj 5278 0 obj <> endobj 5279 0 obj <> endobj 5280 0 obj <> endobj 5281 0 obj <> endobj 5282 0 obj <> endobj 5283 0 obj <> endobj 5284 0 obj <> endobj 5285 0 obj <> endobj 5286 0 obj <> endobj 5287 0 obj <> endobj 5288 0 obj <> endobj 5289 0 obj <> endobj 5290 0 obj <> endobj 5291 0 obj <> endobj 5292 0 obj <> endobj 5293 0 obj <> endobj 5294 0 obj <> endobj 5295 0 obj <> endobj 5296 0 obj <> endobj 5297 0 obj <> endobj 5298 0 obj <> endobj 5299 0 obj <> endobj 5300 0 obj <> endobj 5301 0 obj <> endobj 5302 0 obj <> endobj 5303 0 obj <> endobj 5304 0 obj <> endobj 5305 0 obj <> endobj 5306 0 obj <> endobj 5307 0 obj <> endobj 5308 0 obj <> endobj 5309 0 obj <> endobj 5310 0 obj <> endobj 5311 0 obj <> endobj 5312 0 obj <> endobj 5313 0 obj <> endobj 5314 0 obj <> endobj 5315 0 obj <> endobj 5316 0 obj <> endobj 5317 0 obj <> endobj 5318 0 obj <> endobj 5319 0 obj <> endobj 5320 0 obj <> endobj 5321 0 obj <> endobj 5322 0 obj <> endobj 5323 0 obj <> endobj 5324 0 obj <> endobj 5325 0 obj <> endobj 5326 0 obj <> endobj 5327 0 obj <> endobj 5328 0 obj <> endobj 5329 0 obj <> endobj 5330 0 obj <> endobj 5331 0 obj <> endobj 5332 0 obj <> endobj 5333 0 obj <> endobj 5334 0 obj <> endobj 5335 0 obj <> endobj 5336 0 obj <> endobj 5337 0 obj <> endobj 5338 0 obj <> endobj 5339 0 obj <> endobj 5340 0 obj <> endobj 5341 0 obj <> endobj 5342 0 obj <> endobj 5343 0 obj <> endobj 5344 0 obj <> endobj 5345 0 obj <> endobj 5346 0 obj <> endobj 5347 0 obj <> endobj 5348 0 obj <> endobj 5349 0 obj <> endobj 5350 0 obj <> endobj 5351 0 obj <> endobj 5352 0 obj <> endobj 5353 0 obj <> endobj 5354 0 obj <> endobj 5355 0 obj <> endobj 5356 0 obj <> endobj 5357 0 obj <> endobj 5358 0 obj <> endobj 5359 0 obj <> endobj 5360 0 obj <> endobj 5361 0 obj <> endobj 5362 0 obj <> endobj 5363 0 obj <> endobj 5364 0 obj <> endobj 5365 0 obj <> endobj 5366 0 obj <> endobj 5367 0 obj <> endobj 5368 0 obj <> endobj 5369 0 obj <> endobj 5370 0 obj <> endobj 5371 0 obj <> endobj 5372 0 obj <> endobj 5373 0 obj <> endobj 5374 0 obj <> endobj 5375 0 obj <> endobj 5376 0 obj <> endobj 5377 0 obj <> endobj 5378 0 obj <> endobj 5379 0 obj <> endobj 5380 0 obj <> endobj 5381 0 obj <> endobj 5382 0 obj <> endobj 5383 0 obj <> endobj 5384 0 obj <> endobj 5385 0 obj <> endobj 5386 0 obj <> endobj 5387 0 obj <> endobj 5388 0 obj <> endobj 5389 0 obj <> endobj 5390 0 obj <> endobj 5391 0 obj <> endobj 5392 0 obj <> endobj 5393 0 obj <> endobj 5394 0 obj <> endobj 5395 0 obj <> endobj 5396 0 obj <> endobj 5397 0 obj <> endobj 5398 0 obj <> endobj 5399 0 obj <> endobj 5400 0 obj <> endobj 5401 0 obj <> endobj 5402 0 obj <> endobj 5403 0 obj <> endobj 5404 0 obj <> endobj 5405 0 obj <> endobj 5406 0 obj <> endobj 5407 0 obj <> endobj 5408 0 obj <> endobj 5409 0 obj <> endobj 5410 0 obj <> endobj 5411 0 obj <> endobj 5412 0 obj <> endobj 5413 0 obj <> endobj 5414 0 obj <> endobj 5415 0 obj <> endobj 5416 0 obj <> endobj 5417 0 obj <> endobj 5418 0 obj <> endobj 5419 0 obj <> endobj 5420 0 obj <> endobj 5421 0 obj <> endobj 5422 0 obj <> endobj 5423 0 obj <> endobj 5424 0 obj <> endobj 5425 0 obj <> endobj 5426 0 obj <> endobj 5427 0 obj <> endobj 5428 0 obj <> endobj 5429 0 obj <> endobj 5430 0 obj <> endobj 5431 0 obj <> endobj 5432 0 obj <> endobj 5433 0 obj <> endobj 5434 0 obj <> endobj 5435 0 obj <> endobj 5436 0 obj <> endobj 5437 0 obj <> endobj 5438 0 obj <> endobj 5439 0 obj <> endobj 5440 0 obj <> endobj 5441 0 obj <> endobj 5442 0 obj <> endobj 5443 0 obj <> endobj 5444 0 obj <> endobj 5445 0 obj <> endobj 5446 0 obj <> endobj 5447 0 obj <> endobj 5448 0 obj <> endobj 5449 0 obj <> endobj 5450 0 obj <> endobj 5451 0 obj <> endobj 5452 0 obj <> endobj 5453 0 obj <> endobj 5454 0 obj <> endobj 5455 0 obj <> endobj 5456 0 obj <> endobj 5457 0 obj <> endobj 5458 0 obj <> endobj 5459 0 obj <> endobj 5460 0 obj <> endobj 5461 0 obj <> endobj 5462 0 obj <> endobj 5463 0 obj <> endobj 5464 0 obj <> endobj 5465 0 obj <> endobj 5466 0 obj <> endobj 5467 0 obj <> endobj 5468 0 obj <> endobj 5469 0 obj <> endobj 5470 0 obj <> endobj 5471 0 obj <> endobj 5472 0 obj <> endobj 5473 0 obj <> endobj 5474 0 obj <> endobj 5475 0 obj <> endobj 5476 0 obj <> endobj 5477 0 obj <> endobj 5478 0 obj <> endobj 5479 0 obj <> endobj 5480 0 obj <> endobj 5481 0 obj <> endobj 5482 0 obj <> endobj 5483 0 obj <> endobj 5484 0 obj <> endobj 5485 0 obj <> endobj 5486 0 obj <> endobj 5487 0 obj <> endobj 5488 0 obj <> endobj 5489 0 obj <> endobj 5490 0 obj <> endobj 5491 0 obj <> endobj 5492 0 obj <> endobj 5493 0 obj <> endobj 5494 0 obj <> endobj 5495 0 obj <> endobj 5496 0 obj <> endobj 5497 0 obj <> endobj 5498 0 obj <> endobj 5499 0 obj <> endobj 5500 0 obj <> endobj 5501 0 obj <> endobj 5502 0 obj <> endobj 5503 0 obj <> endobj 5504 0 obj <> endobj 5505 0 obj <> endobj 5506 0 obj <> endobj 5507 0 obj <> endobj 5508 0 obj <> endobj 5509 0 obj <> endobj 5510 0 obj <> endobj 5511 0 obj <> endobj 5512 0 obj <> endobj 5513 0 obj <> endobj 5514 0 obj <> endobj 5515 0 obj <> endobj 5516 0 obj <> endobj 5517 0 obj <> endobj 5518 0 obj <> endobj 5519 0 obj <> endobj 5520 0 obj <> endobj 5521 0 obj <> endobj 5522 0 obj <> endobj 5523 0 obj <> endobj 5524 0 obj <> endobj 5525 0 obj <> endobj 5526 0 obj <> endobj 5527 0 obj <> endobj 5528 0 obj <> endobj 5529 0 obj <> endobj 5530 0 obj <> endobj 5531 0 obj <> endobj 5532 0 obj <> endobj 5533 0 obj <> endobj 5534 0 obj <> endobj 5535 0 obj <> endobj 5536 0 obj <> endobj 5537 0 obj <> endobj 5538 0 obj <> endobj 5539 0 obj <> endobj 5540 0 obj <> endobj 5541 0 obj <> endobj 5542 0 obj <> endobj 5543 0 obj <> endobj 5544 0 obj <> endobj 5545 0 obj <> endobj 5546 0 obj <> endobj 5547 0 obj <> endobj 5548 0 obj <> endobj 5549 0 obj <> endobj 5550 0 obj <> endobj 5551 0 obj <> endobj 5552 0 obj <> endobj 5553 0 obj <> endobj 5554 0 obj <> endobj 5555 0 obj <> endobj 5556 0 obj <> endobj 5557 0 obj <> endobj 5558 0 obj <> endobj 5559 0 obj <> endobj 5560 0 obj <> endobj 5561 0 obj <> endobj 5562 0 obj <> endobj 5563 0 obj <> endobj 5564 0 obj <> endobj 5565 0 obj <
> endobj 5566 0 obj <> endobj 5567 0 obj <> endobj 5568 0 obj <> endobj 5569 0 obj <> endobj 5570 0 obj <> endobj 5571 0 obj <> endobj 5572 0 obj <> endobj 5573 0 obj <> endobj 5574 0 obj <> endobj 5575 0 obj <> endobj 5576 0 obj <> endobj 5577 0 obj <> endobj 5578 0 obj <> endobj 5579 0 obj <> endobj 5580 0 obj <> endobj 5581 0 obj <> endobj 5582 0 obj <> endobj 5583 0 obj <> endobj 5584 0 obj <> endobj 5585 0 obj <> endobj 5586 0 obj <> endobj 5587 0 obj <> endobj 5588 0 obj <> endobj 5589 0 obj <> endobj 5590 0 obj <> endobj 5591 0 obj <> endobj 5592 0 obj <> endobj 5593 0 obj <> endobj 5594 0 obj <> endobj 5595 0 obj <> endobj 5596 0 obj <> endobj 5597 0 obj <> endobj 5598 0 obj <> endobj 5599 0 obj <> endobj 5600 0 obj <> endobj 5601 0 obj <> endobj 5602 0 obj <> endobj 5603 0 obj <> endobj 5604 0 obj <> endobj 5605 0 obj <> endobj 5606 0 obj <> endobj 5607 0 obj <> endobj 5608 0 obj <>stream + + + + + FrameMaker 8.0 + 2015-04-07T10:16:55Z + 2015-04-07T10:16:55Z + + + application/pdf + + + DEF 5.8 C/C++ Programming Interface + + + + + Cadence Design Systems, Inc. + + + + + Acrobat Distiller 10.0.0 (Windows) + + + uuid:65e12d0c-fa95-49c9-adfa-e41e107154b4 + uuid:a35a9469-8729-4207-8090-866db66c361c + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 5609 0 obj <> endobj xref +0 5610 +0000000000 65535 f +0000109666 00000 n +0000109807 00000 n +0000109918 00000 n +0000113951 00000 n +0000114015 00000 n +0000114448 00000 n +0000114659 00000 n +0000114942 00000 n +0000115288 00000 n +0000115393 00000 n +0000115499 00000 n +0000115604 00000 n +0000115709 00000 n +0000115812 00000 n +0000115918 00000 n +0000116023 00000 n +0000116129 00000 n +0000116235 00000 n +0000116341 00000 n +0000116447 00000 n +0000116550 00000 n +0000116654 00000 n +0000116760 00000 n +0000116866 00000 n +0000116972 00000 n +0000117078 00000 n +0000117184 00000 n +0000117290 00000 n +0000117396 00000 n +0000117502 00000 n +0000117608 00000 n +0000117713 00000 n +0000117819 00000 n +0000117925 00000 n +0000118031 00000 n +0000118137 00000 n +0000118243 00000 n +0000118343 00000 n +0000120569 00000 n +0000120959 00000 n +0000121060 00000 n +0000121165 00000 n +0000121271 00000 n +0000121377 00000 n +0000121483 00000 n +0000121586 00000 n +0000121692 00000 n +0000121798 00000 n +0000121904 00000 n +0000122010 00000 n +0000122116 00000 n +0000122222 00000 n +0000122328 00000 n +0000122434 00000 n +0000122540 00000 n +0000122646 00000 n +0000122752 00000 n +0000122858 00000 n +0000122964 00000 n +0000123070 00000 n +0000123176 00000 n +0000123282 00000 n +0000123388 00000 n +0000123494 00000 n +0000123600 00000 n +0000123703 00000 n +0000123809 00000 n +0000123915 00000 n +0000124021 00000 n +0000124127 00000 n +0000124233 00000 n +0000124339 00000 n +0000124445 00000 n +0000124551 00000 n +0000124651 00000 n +0000126948 00000 n +0000127359 00000 n +0000127460 00000 n +0000127566 00000 n +0000127672 00000 n +0000127777 00000 n +0000127883 00000 n +0000127989 00000 n +0000128095 00000 n +0000128201 00000 n +0000128306 00000 n +0000128411 00000 n +0000128517 00000 n +0000128622 00000 n +0000128728 00000 n +0000128834 00000 n +0000128940 00000 n +0000129046 00000 n +0000129152 00000 n +0000129258 00000 n +0000129364 00000 n +0000129469 00000 n +0000129574 00000 n +0000129680 00000 n +0000129783 00000 n +0000129890 00000 n +0000129997 00000 n +0000130104 00000 n +0000130211 00000 n +0000130317 00000 n +0000130424 00000 n +0000130530 00000 n +0000130637 00000 n +0000130744 00000 n +0000130851 00000 n +0000130958 00000 n +0000131064 00000 n +0000131165 00000 n +0000133472 00000 n +0000133891 00000 n +0000133998 00000 n +0000134105 00000 n +0000134212 00000 n +0000134319 00000 n +0000134426 00000 n +0000134530 00000 n +0000134634 00000 n +0000134741 00000 n +0000134848 00000 n +0000134952 00000 n +0000135059 00000 n +0000135163 00000 n +0000135270 00000 n +0000135377 00000 n +0000135484 00000 n +0000135591 00000 n +0000135698 00000 n +0000135805 00000 n +0000135912 00000 n +0000136019 00000 n +0000136126 00000 n +0000136232 00000 n +0000136338 00000 n +0000136445 00000 n +0000136551 00000 n +0000136658 00000 n +0000136765 00000 n +0000136872 00000 n +0000136978 00000 n +0000137084 00000 n +0000137191 00000 n +0000137297 00000 n +0000137402 00000 n +0000137503 00000 n +0000139879 00000 n +0000140322 00000 n +0000140428 00000 n +0000140534 00000 n +0000140640 00000 n +0000140746 00000 n +0000140852 00000 n +0000140958 00000 n +0000141065 00000 n +0000141172 00000 n +0000141279 00000 n +0000141386 00000 n +0000141493 00000 n +0000141599 00000 n +0000141705 00000 n +0000141811 00000 n +0000141917 00000 n +0000142024 00000 n +0000142131 00000 n +0000142238 00000 n +0000142345 00000 n +0000142452 00000 n +0000142559 00000 n +0000142666 00000 n +0000142773 00000 n +0000142880 00000 n +0000142986 00000 n +0000143093 00000 n +0000143199 00000 n +0000143306 00000 n +0000143413 00000 n +0000143520 00000 n +0000143624 00000 n +0000143731 00000 n +0000143838 00000 n +0000143945 00000 n +0000144052 00000 n +0000144156 00000 n +0000144257 00000 n +0000146639 00000 n +0000147082 00000 n +0000147189 00000 n +0000147296 00000 n +0000147403 00000 n +0000147510 00000 n +0000147617 00000 n +0000147724 00000 n +0000147830 00000 n +0000147937 00000 n +0000148044 00000 n +0000148150 00000 n +0000148257 00000 n +0000148362 00000 n +0000148469 00000 n +0000148576 00000 n +0000148683 00000 n +0000148787 00000 n +0000148894 00000 n +0000149000 00000 n +0000149107 00000 n +0000149214 00000 n +0000149321 00000 n +0000149428 00000 n +0000149535 00000 n +0000149641 00000 n +0000149747 00000 n +0000149854 00000 n +0000149961 00000 n +0000150068 00000 n +0000150175 00000 n +0000150282 00000 n +0000150386 00000 n +0000150492 00000 n +0000150599 00000 n +0000150706 00000 n +0000150813 00000 n +0000150918 00000 n +0000151019 00000 n +0000153492 00000 n +0000153935 00000 n +0000154042 00000 n +0000154149 00000 n +0000154256 00000 n +0000154363 00000 n +0000154470 00000 n +0000154576 00000 n +0000154682 00000 n +0000154788 00000 n +0000154895 00000 n +0000155002 00000 n +0000155109 00000 n +0000155216 00000 n +0000155323 00000 n +0000155430 00000 n +0000155536 00000 n +0000155643 00000 n +0000155750 00000 n +0000155857 00000 n +0000155964 00000 n +0000156071 00000 n +0000156177 00000 n +0000156284 00000 n +0000156391 00000 n +0000156498 00000 n +0000156605 00000 n +0000156712 00000 n +0000156819 00000 n +0000156925 00000 n +0000157032 00000 n +0000157139 00000 n +0000157246 00000 n +0000157353 00000 n +0000157460 00000 n +0000157567 00000 n +0000157673 00000 n +0000157778 00000 n +0000157879 00000 n +0000160380 00000 n +0000160823 00000 n +0000160930 00000 n +0000161036 00000 n +0000161143 00000 n +0000161250 00000 n +0000161357 00000 n +0000161464 00000 n +0000161568 00000 n +0000161675 00000 n +0000161779 00000 n +0000161886 00000 n +0000161992 00000 n +0000162099 00000 n +0000162206 00000 n +0000162313 00000 n +0000162420 00000 n +0000162527 00000 n +0000162634 00000 n +0000162741 00000 n +0000162848 00000 n +0000162954 00000 n +0000163060 00000 n +0000163167 00000 n +0000163274 00000 n +0000163381 00000 n +0000163488 00000 n +0000163592 00000 n +0000163699 00000 n +0000163806 00000 n +0000163912 00000 n +0000164018 00000 n +0000164125 00000 n +0000164232 00000 n +0000164339 00000 n +0000164445 00000 n +0000164552 00000 n +0000164657 00000 n +0000164758 00000 n +0000167219 00000 n +0000167662 00000 n +0000167769 00000 n +0000167875 00000 n +0000167981 00000 n +0000168087 00000 n +0000168194 00000 n +0000168301 00000 n +0000168408 00000 n +0000168515 00000 n +0000168622 00000 n +0000168728 00000 n +0000168835 00000 n +0000168942 00000 n +0000169049 00000 n +0000169156 00000 n +0000169263 00000 n +0000169369 00000 n +0000169476 00000 n +0000169583 00000 n +0000169689 00000 n +0000169796 00000 n +0000169902 00000 n +0000170009 00000 n +0000170115 00000 n +0000170221 00000 n +0000170328 00000 n +0000170432 00000 n +0000170539 00000 n +0000170646 00000 n +0000170753 00000 n +0000170860 00000 n +0000170967 00000 n +0000171074 00000 n +0000171181 00000 n +0000171288 00000 n +0000171395 00000 n +0000171500 00000 n +0000171601 00000 n +0000174021 00000 n +0000174464 00000 n +0000174571 00000 n +0000174675 00000 n +0000174782 00000 n +0000174889 00000 n +0000174995 00000 n +0000175101 00000 n +0000175208 00000 n +0000175315 00000 n +0000175419 00000 n +0000175525 00000 n +0000175631 00000 n +0000175737 00000 n +0000175844 00000 n +0000175951 00000 n +0000176058 00000 n +0000176165 00000 n +0000176272 00000 n +0000176378 00000 n +0000176485 00000 n +0000176592 00000 n +0000176699 00000 n +0000176806 00000 n +0000176913 00000 n +0000177020 00000 n +0000177124 00000 n +0000177231 00000 n +0000177338 00000 n +0000177445 00000 n +0000177549 00000 n +0000177656 00000 n +0000177762 00000 n +0000177869 00000 n +0000177976 00000 n +0000178082 00000 n +0000178188 00000 n +0000178292 00000 n +0000178393 00000 n +0000180763 00000 n +0000181174 00000 n +0000181280 00000 n +0000181387 00000 n +0000181494 00000 n +0000181601 00000 n +0000181708 00000 n +0000181815 00000 n +0000181921 00000 n +0000182028 00000 n +0000182135 00000 n +0000182242 00000 n +0000182349 00000 n +0000182456 00000 n +0000182561 00000 n +0000182668 00000 n +0000182775 00000 n +0000182880 00000 n +0000182987 00000 n +0000183094 00000 n +0000183201 00000 n +0000183307 00000 n +0000183414 00000 n +0000183521 00000 n +0000183628 00000 n +0000183735 00000 n +0000183842 00000 n +0000183949 00000 n +0000184056 00000 n +0000184163 00000 n +0000184270 00000 n +0000184377 00000 n +0000184484 00000 n +0000184591 00000 n +0000184692 00000 n +0000186999 00000 n +0000187258 00000 n +0000187361 00000 n +0000187468 00000 n +0000187573 00000 n +0000187681 00000 n +0000187789 00000 n +0000187892 00000 n +0000188000 00000 n +0000188107 00000 n +0000188215 00000 n +0000188320 00000 n +0000188428 00000 n +0000188536 00000 n +0000188644 00000 n +0000188745 00000 n +0000190001 00000 n +0000190196 00000 n +0000190344 00000 n +0000190493 00000 n +0000190641 00000 n +0000190788 00000 n +0000190934 00000 n +0000191071 00000 n +0000193331 00000 n +0000193478 00000 n +0000193615 00000 n +0000194808 00000 n +0000195003 00000 n +0000195109 00000 n +0000195215 00000 n +0000195322 00000 n +0000195429 00000 n +0000195536 00000 n +0000195661 00000 n +0000197758 00000 n +0000197905 00000 n +0000198030 00000 n +0000200785 00000 n +0000200956 00000 n +0000201086 00000 n +0000201239 00000 n +0000201502 00000 n +0000204058 00000 n +0000204150 00000 n +0000204505 00000 n +0000204856 00000 n +0000205216 00000 n +0000205557 00000 n +0000205915 00000 n +0000206265 00000 n +0000206615 00000 n +0000206960 00000 n +0000207107 00000 n +0000207220 00000 n +0000208047 00000 n +0000208306 00000 n +0000208413 00000 n +0000208520 00000 n +0000208627 00000 n +0000208734 00000 n +0000208841 00000 n +0000208948 00000 n +0000209055 00000 n +0000209159 00000 n +0000209266 00000 n +0000209373 00000 n +0000209480 00000 n +0000209587 00000 n +0000209694 00000 n +0000209807 00000 n +0000211518 00000 n +0000211665 00000 n +0000211803 00000 n +0000213409 00000 n +0000213556 00000 n +0000213707 00000 n +0000215611 00000 n +0000215758 00000 n +0000215896 00000 n +0000217706 00000 n +0000217853 00000 n +0000218004 00000 n +0000219548 00000 n +0000219695 00000 n +0000219809 00000 n +0000221275 00000 n +0000221454 00000 n +0000221561 00000 n +0000221667 00000 n +0000221773 00000 n +0000221936 00000 n +0000223780 00000 n +0000223967 00000 n +0000224076 00000 n +0000224184 00000 n +0000224291 00000 n +0000224401 00000 n +0000224538 00000 n +0000227132 00000 n +0000227399 00000 n +0000227509 00000 n +0000227619 00000 n +0000227729 00000 n +0000227839 00000 n +0000227949 00000 n +0000228058 00000 n +0000228168 00000 n +0000228278 00000 n +0000228387 00000 n +0000228497 00000 n +0000228606 00000 n +0000228716 00000 n +0000228824 00000 n +0000228934 00000 n +0000229047 00000 n +0000230668 00000 n +0000230935 00000 n +0000231045 00000 n +0000231154 00000 n +0000231264 00000 n +0000231373 00000 n +0000231483 00000 n +0000231593 00000 n +0000231702 00000 n +0000231812 00000 n +0000231921 00000 n +0000232031 00000 n +0000232140 00000 n +0000232250 00000 n +0000232360 00000 n +0000232468 00000 n +0000232581 00000 n +0000234066 00000 n +0000234333 00000 n +0000234442 00000 n +0000234552 00000 n +0000234662 00000 n +0000234772 00000 n +0000234880 00000 n +0000234990 00000 n +0000235100 00000 n +0000235210 00000 n +0000235319 00000 n +0000235429 00000 n +0000235538 00000 n +0000235648 00000 n +0000235758 00000 n +0000235868 00000 n +0000235981 00000 n +0000237508 00000 n +0000237775 00000 n +0000237884 00000 n +0000237993 00000 n +0000238103 00000 n +0000238213 00000 n +0000238322 00000 n +0000238432 00000 n +0000238541 00000 n +0000238651 00000 n +0000238761 00000 n +0000238871 00000 n +0000238981 00000 n +0000239090 00000 n +0000239200 00000 n +0000239310 00000 n +0000239423 00000 n +0000240946 00000 n +0000241189 00000 n +0000241299 00000 n +0000241409 00000 n +0000241518 00000 n +0000241628 00000 n +0000241738 00000 n +0000241847 00000 n +0000241957 00000 n +0000242067 00000 n +0000242176 00000 n +0000242286 00000 n +0000242396 00000 n +0000242522 00000 n +0000244259 00000 n +0000244470 00000 n +0000244577 00000 n +0000244682 00000 n +0000244789 00000 n +0000244896 00000 n +0000245003 00000 n +0000245110 00000 n +0000245216 00000 n +0000245342 00000 n +0000246902 00000 n +0000247201 00000 n +0000247349 00000 n +0000247456 00000 n +0000247563 00000 n +0000247669 00000 n +0000247776 00000 n +0000247883 00000 n +0000247989 00000 n +0000248096 00000 n +0000248203 00000 n +0000248309 00000 n +0000248416 00000 n +0000248523 00000 n +0000248630 00000 n +0000248737 00000 n +0000248844 00000 n +0000248951 00000 n +0000249058 00000 n +0000249165 00000 n +0000249327 00000 n +0000251237 00000 n +0000251424 00000 n +0000251572 00000 n +0000251719 00000 n +0000251938 00000 n +0000252154 00000 n +0000252304 00000 n +0000254360 00000 n +0000254539 00000 n +0000254693 00000 n +0000254844 00000 n +0000255065 00000 n +0000255215 00000 n +0000257202 00000 n +0000257389 00000 n +0000257532 00000 n +0000257677 00000 n +0000257905 00000 n +0000258132 00000 n +0000258282 00000 n +0000260518 00000 n +0000260681 00000 n +0000260825 00000 n +0000260975 00000 n +0000262940 00000 n +0000263127 00000 n +0000263276 00000 n +0000263422 00000 n +0000263635 00000 n +0000263857 00000 n +0000264007 00000 n +0000266017 00000 n +0000266180 00000 n +0000266398 00000 n +0000266548 00000 n +0000268392 00000 n +0000268539 00000 n +0000268676 00000 n +0000270267 00000 n +0000270446 00000 n +0000270593 00000 n +0000270737 00000 n +0000270950 00000 n +0000271100 00000 n +0000273057 00000 n +0000273244 00000 n +0000273398 00000 n +0000273542 00000 n +0000273689 00000 n +0000273908 00000 n +0000274058 00000 n +0000276188 00000 n +0000276375 00000 n +0000276518 00000 n +0000276669 00000 n +0000276885 00000 n +0000277098 00000 n +0000277248 00000 n +0000279285 00000 n +0000279464 00000 n +0000279622 00000 n +0000279839 00000 n +0000280059 00000 n +0000280209 00000 n +0000282001 00000 n +0000282180 00000 n +0000282324 00000 n +0000282467 00000 n +0000282685 00000 n +0000282835 00000 n +0000284676 00000 n +0000284863 00000 n +0000285012 00000 n +0000285156 00000 n +0000285368 00000 n +0000285589 00000 n +0000285739 00000 n +0000287731 00000 n +0000287894 00000 n +0000288107 00000 n +0000288245 00000 n +0000290051 00000 n +0000290198 00000 n +0000290335 00000 n +0000291967 00000 n +0000292138 00000 n +0000292284 00000 n +0000292499 00000 n +0000292649 00000 n +0000294583 00000 n +0000294762 00000 n +0000294907 00000 n +0000295050 00000 n +0000295268 00000 n +0000295418 00000 n +0000297310 00000 n +0000297473 00000 n +0000297686 00000 n +0000297824 00000 n +0000299633 00000 n +0000299780 00000 n +0000299905 00000 n +0000301199 00000 n +0000301346 00000 n +0000301484 00000 n +0000302949 00000 n +0000303096 00000 n +0000303222 00000 n +0000304413 00000 n +0000304608 00000 n +0000304715 00000 n +0000304821 00000 n +0000304928 00000 n +0000305035 00000 n +0000305142 00000 n +0000305267 00000 n +0000307366 00000 n +0000307513 00000 n +0000307639 00000 n +0000309574 00000 n +0000309793 00000 n +0000309902 00000 n +0000310011 00000 n +0000310121 00000 n +0000310231 00000 n +0000310341 00000 n +0000310451 00000 n +0000310561 00000 n +0000310671 00000 n +0000310785 00000 n +0000312321 00000 n +0000312724 00000 n +0000312834 00000 n +0000312943 00000 n +0000313053 00000 n +0000313163 00000 n +0000313273 00000 n +0000313383 00000 n +0000313493 00000 n +0000313603 00000 n +0000313712 00000 n +0000313822 00000 n +0000313932 00000 n +0000314041 00000 n +0000314151 00000 n +0000314261 00000 n +0000314371 00000 n +0000314481 00000 n +0000314590 00000 n +0000314700 00000 n +0000314810 00000 n +0000314920 00000 n +0000315029 00000 n +0000315139 00000 n +0000315249 00000 n +0000315359 00000 n +0000315469 00000 n +0000315579 00000 n +0000315689 00000 n +0000315799 00000 n +0000315909 00000 n +0000316019 00000 n +0000316129 00000 n +0000316242 00000 n +0000317857 00000 n +0000318028 00000 n +0000318176 00000 n +0000318323 00000 n +0000318461 00000 n +0000319902 00000 n +0000320073 00000 n +0000320222 00000 n +0000320443 00000 n +0000320581 00000 n +0000321963 00000 n +0000322110 00000 n +0000322236 00000 n +0000323754 00000 n +0000323901 00000 n +0000324015 00000 n +0000325316 00000 n +0000325495 00000 n +0000325649 00000 n +0000325800 00000 n +0000325945 00000 n +0000326083 00000 n +0000327524 00000 n +0000327687 00000 n +0000327835 00000 n +0000327973 00000 n +0000329511 00000 n +0000329706 00000 n +0000329855 00000 n +0000330000 00000 n +0000330144 00000 n +0000330288 00000 n +0000330434 00000 n +0000330572 00000 n +0000332412 00000 n +0000332559 00000 n +0000332685 00000 n +0000333934 00000 n +0000334121 00000 n +0000334265 00000 n +0000334468 00000 n +0000334669 00000 n +0000334870 00000 n +0000335008 00000 n +0000336540 00000 n +0000336711 00000 n +0000336912 00000 n +0000337115 00000 n +0000337241 00000 n +0000338391 00000 n +0000338538 00000 n +0000338664 00000 n +0000340321 00000 n +0000340468 00000 n +0000340582 00000 n +0000341781 00000 n +0000341944 00000 n +0000342099 00000 n +0000342237 00000 n +0000343691 00000 n +0000343870 00000 n +0000344020 00000 n +0000344171 00000 n +0000344315 00000 n +0000344453 00000 n +0000346078 00000 n +0000346241 00000 n +0000346385 00000 n +0000346523 00000 n +0000347900 00000 n +0000348063 00000 n +0000348286 00000 n +0000348400 00000 n +0000349631 00000 n +0000349794 00000 n +0000350006 00000 n +0000350132 00000 n +0000351720 00000 n +0000351883 00000 n +0000352026 00000 n +0000352164 00000 n +0000353592 00000 n +0000353763 00000 n +0000353906 00000 n +0000354059 00000 n +0000354197 00000 n +0000355755 00000 n +0000355902 00000 n +0000356028 00000 n +0000357467 00000 n +0000357630 00000 n +0000357788 00000 n +0000357926 00000 n +0000359889 00000 n +0000360036 00000 n +0000360162 00000 n +0000361653 00000 n +0000361816 00000 n +0000361963 00000 n +0000362101 00000 n +0000363776 00000 n +0000363947 00000 n +0000364090 00000 n +0000364316 00000 n +0000364454 00000 n +0000366263 00000 n +0000366410 00000 n +0000366536 00000 n +0000367908 00000 n +0000368071 00000 n +0000368220 00000 n +0000368358 00000 n +0000369888 00000 n +0000370035 00000 n +0000370161 00000 n +0000371646 00000 n +0000371817 00000 n +0000371968 00000 n +0000372167 00000 n +0000372305 00000 n +0000373847 00000 n +0000374018 00000 n +0000374162 00000 n +0000374385 00000 n +0000374523 00000 n +0000376190 00000 n +0000376361 00000 n +0000376507 00000 n +0000376650 00000 n +0000376788 00000 n +0000378252 00000 n +0000378431 00000 n +0000378632 00000 n +0000378833 00000 n +0000378979 00000 n +0000379117 00000 n +0000380818 00000 n +0000380981 00000 n +0000381125 00000 n +0000381263 00000 n +0000382905 00000 n +0000383052 00000 n +0000383178 00000 n +0000384519 00000 n +0000384706 00000 n +0000384857 00000 n +0000385000 00000 n +0000385144 00000 n +0000385295 00000 n +0000385445 00000 n +0000387045 00000 n +0000387208 00000 n +0000387409 00000 n +0000387535 00000 n +0000388250 00000 n +0000388397 00000 n +0000388498 00000 n +0000389003 00000 n +0000389150 00000 n +0000389251 00000 n +0000390964 00000 n +0000391111 00000 n +0000391249 00000 n +0000392860 00000 n +0000393007 00000 n +0000393120 00000 n +0000394490 00000 n +0000394637 00000 n +0000394750 00000 n +0000395807 00000 n +0000396106 00000 n +0000396213 00000 n +0000396320 00000 n +0000396427 00000 n +0000396534 00000 n +0000396641 00000 n +0000396748 00000 n +0000396854 00000 n +0000396961 00000 n +0000397068 00000 n +0000397174 00000 n +0000397280 00000 n +0000397386 00000 n +0000397492 00000 n +0000397599 00000 n +0000397706 00000 n +0000397813 00000 n +0000397920 00000 n +0000398025 00000 n +0000398150 00000 n +0000400157 00000 n +0000400444 00000 n +0000400551 00000 n +0000400657 00000 n +0000400764 00000 n +0000400870 00000 n +0000400977 00000 n +0000401084 00000 n +0000401190 00000 n +0000401297 00000 n +0000401403 00000 n +0000401509 00000 n +0000401615 00000 n +0000401721 00000 n +0000401828 00000 n +0000401933 00000 n +0000402044 00000 n +0000402152 00000 n +0000402278 00000 n +0000404506 00000 n +0000404656 00000 n +0000404795 00000 n +0000406760 00000 n +0000406910 00000 n +0000407061 00000 n +0000408497 00000 n +0000408647 00000 n +0000408786 00000 n +0000410220 00000 n +0000410370 00000 n +0000410509 00000 n +0000412509 00000 n +0000412659 00000 n +0000412774 00000 n +0000414049 00000 n +0000414216 00000 n +0000414366 00000 n +0000414517 00000 n +0000416274 00000 n +0000416424 00000 n +0000416563 00000 n +0000418223 00000 n +0000418373 00000 n +0000418512 00000 n +0000420740 00000 n +0000420890 00000 n +0000421029 00000 n +0000423102 00000 n +0000423252 00000 n +0000423391 00000 n +0000425375 00000 n +0000425525 00000 n +0000425664 00000 n +0000427621 00000 n +0000427771 00000 n +0000427910 00000 n +0000429889 00000 n +0000430039 00000 n +0000430178 00000 n +0000431943 00000 n +0000432093 00000 n +0000432232 00000 n +0000434182 00000 n +0000434332 00000 n +0000434471 00000 n +0000436542 00000 n +0000436692 00000 n +0000436819 00000 n +0000438862 00000 n +0000439012 00000 n +0000439151 00000 n +0000440881 00000 n +0000441031 00000 n +0000441170 00000 n +0000442925 00000 n +0000443075 00000 n +0000443214 00000 n +0000444746 00000 n +0000444931 00000 n +0000445087 00000 n +0000445238 00000 n +0000445348 00000 n +0000445499 00000 n +0000447755 00000 n +0000447940 00000 n +0000448049 00000 n +0000448157 00000 n +0000448269 00000 n +0000448408 00000 n +0000450429 00000 n +0000450579 00000 n +0000450730 00000 n +0000452584 00000 n +0000452760 00000 n +0000452984 00000 n +0000453206 00000 n +0000453344 00000 n +0000455770 00000 n +0000455920 00000 n +0000456071 00000 n +0000458076 00000 n +0000458226 00000 n +0000458364 00000 n +0000460636 00000 n +0000460786 00000 n +0000460925 00000 n +0000462490 00000 n +0000462640 00000 n +0000462779 00000 n +0000464669 00000 n +0000464836 00000 n +0000464978 00000 n +0000465117 00000 n +0000466591 00000 n +0000466767 00000 n +0000466915 00000 n +0000467023 00000 n +0000467174 00000 n +0000468811 00000 n +0000468961 00000 n +0000469100 00000 n +0000471037 00000 n +0000471213 00000 n +0000471360 00000 n +0000471516 00000 n +0000471667 00000 n +0000473716 00000 n +0000473883 00000 n +0000473995 00000 n +0000474134 00000 n +0000475701 00000 n +0000475851 00000 n +0000475990 00000 n +0000477460 00000 n +0000477627 00000 n +0000477768 00000 n +0000477919 00000 n +0000479810 00000 n +0000479960 00000 n +0000480099 00000 n +0000481630 00000 n +0000481780 00000 n +0000481919 00000 n +0000483516 00000 n +0000483666 00000 n +0000483805 00000 n +0000485446 00000 n +0000485622 00000 n +0000485772 00000 n +0000485882 00000 n +0000486033 00000 n +0000488114 00000 n +0000488299 00000 n +0000488446 00000 n +0000488558 00000 n +0000488670 00000 n +0000488821 00000 n +0000491242 00000 n +0000491392 00000 n +0000491531 00000 n +0000492963 00000 n +0000493113 00000 n +0000493252 00000 n +0000495012 00000 n +0000495179 00000 n +0000495326 00000 n +0000495477 00000 n +0000496981 00000 n +0000497184 00000 n +0000497326 00000 n +0000497438 00000 n +0000497550 00000 n +0000497657 00000 n +0000497769 00000 n +0000497920 00000 n +0000500503 00000 n +0000500670 00000 n +0000500778 00000 n +0000500929 00000 n +0000502455 00000 n +0000502605 00000 n +0000502756 00000 n +0000504449 00000 n +0000504599 00000 n +0000504750 00000 n +0000506490 00000 n +0000506640 00000 n +0000506779 00000 n +0000508296 00000 n +0000508446 00000 n +0000508597 00000 n +0000510125 00000 n +0000510275 00000 n +0000510426 00000 n +0000512283 00000 n +0000512459 00000 n +0000512683 00000 n +0000512905 00000 n +0000513056 00000 n +0000514782 00000 n +0000514932 00000 n +0000515071 00000 n +0000517002 00000 n +0000517152 00000 n +0000517303 00000 n +0000519374 00000 n +0000519524 00000 n +0000519675 00000 n +0000521815 00000 n +0000521965 00000 n +0000522080 00000 n +0000523174 00000 n +0000523324 00000 n +0000523439 00000 n +0000524457 00000 n +0000524633 00000 n +0000524777 00000 n +0000524889 00000 n +0000525052 00000 n +0000527006 00000 n +0000527156 00000 n +0000527307 00000 n +0000528939 00000 n +0000529089 00000 n +0000529228 00000 n +0000531353 00000 n +0000531503 00000 n +0000531654 00000 n +0000533333 00000 n +0000533509 00000 n +0000533733 00000 n +0000533955 00000 n +0000534106 00000 n +0000535936 00000 n +0000536139 00000 n +0000536284 00000 n +0000536393 00000 n +0000536501 00000 n +0000536613 00000 n +0000536725 00000 n +0000536864 00000 n +0000538930 00000 n +0000539080 00000 n +0000539219 00000 n +0000540651 00000 n +0000540801 00000 n +0000540916 00000 n +0000542129 00000 n +0000542305 00000 n +0000542461 00000 n +0000542573 00000 n +0000542724 00000 n +0000544752 00000 n +0000544902 00000 n +0000545041 00000 n +0000547056 00000 n +0000547206 00000 n +0000547345 00000 n +0000549604 00000 n +0000549780 00000 n +0000549924 00000 n +0000550032 00000 n +0000550183 00000 n +0000552419 00000 n +0000552604 00000 n +0000552715 00000 n +0000552824 00000 n +0000552932 00000 n +0000553071 00000 n +0000555028 00000 n +0000555204 00000 n +0000555428 00000 n +0000555650 00000 n +0000555801 00000 n +0000557567 00000 n +0000557717 00000 n +0000557855 00000 n +0000559851 00000 n +0000560001 00000 n +0000560152 00000 n +0000562058 00000 n +0000562208 00000 n +0000562346 00000 n +0000564143 00000 n +0000564293 00000 n +0000564444 00000 n +0000566403 00000 n +0000566553 00000 n +0000566692 00000 n +0000568177 00000 n +0000568327 00000 n +0000568466 00000 n +0000569999 00000 n +0000570149 00000 n +0000570288 00000 n +0000571846 00000 n +0000571996 00000 n +0000572135 00000 n +0000573916 00000 n +0000574066 00000 n +0000574205 00000 n +0000576268 00000 n +0000576418 00000 n +0000576557 00000 n +0000578788 00000 n +0000578938 00000 n +0000579077 00000 n +0000581094 00000 n +0000581270 00000 n +0000581494 00000 n +0000581715 00000 n +0000581866 00000 n +0000583944 00000 n +0000584094 00000 n +0000584233 00000 n +0000586363 00000 n +0000586513 00000 n +0000586652 00000 n +0000588255 00000 n +0000588405 00000 n +0000588544 00000 n +0000590231 00000 n +0000590425 00000 n +0000590578 00000 n +0000590690 00000 n +0000590802 00000 n +0000590914 00000 n +0000591065 00000 n +0000593393 00000 n +0000593543 00000 n +0000593682 00000 n +0000595357 00000 n +0000595560 00000 n +0000595717 00000 n +0000595873 00000 n +0000595985 00000 n +0000596094 00000 n +0000596202 00000 n +0000596341 00000 n +0000598341 00000 n +0000598491 00000 n +0000598642 00000 n +0000600594 00000 n +0000600744 00000 n +0000600895 00000 n +0000602709 00000 n +0000602859 00000 n +0000603010 00000 n +0000604950 00000 n +0000605126 00000 n +0000605235 00000 n +0000605343 00000 n +0000605494 00000 n +0000607264 00000 n +0000607414 00000 n +0000607553 00000 n +0000609007 00000 n +0000609201 00000 n +0000609349 00000 n +0000609460 00000 n +0000609567 00000 n +0000609679 00000 n +0000609830 00000 n +0000612293 00000 n +0000612443 00000 n +0000612582 00000 n +0000613999 00000 n +0000614149 00000 n +0000614300 00000 n +0000615985 00000 n +0000616179 00000 n +0000616323 00000 n +0000616434 00000 n +0000616543 00000 n +0000616651 00000 n +0000616802 00000 n +0000618997 00000 n +0000619173 00000 n +0000619397 00000 n +0000619619 00000 n +0000619770 00000 n +0000621822 00000 n +0000621989 00000 n +0000622139 00000 n +0000622290 00000 n +0000624139 00000 n +0000624324 00000 n +0000624436 00000 n +0000624544 00000 n +0000624652 00000 n +0000624791 00000 n +0000626870 00000 n +0000627020 00000 n +0000627171 00000 n +0000629099 00000 n +0000629249 00000 n +0000629400 00000 n +0000631563 00000 n +0000631713 00000 n +0000631864 00000 n +0000634049 00000 n +0000634199 00000 n +0000634350 00000 n +0000636669 00000 n +0000636819 00000 n +0000636970 00000 n +0000639086 00000 n +0000639236 00000 n +0000639375 00000 n +0000641271 00000 n +0000641421 00000 n +0000641560 00000 n +0000643294 00000 n +0000643488 00000 n +0000643640 00000 n +0000643751 00000 n +0000643863 00000 n +0000643975 00000 n +0000644114 00000 n +0000646182 00000 n +0000646332 00000 n +0000646471 00000 n +0000648008 00000 n +0000648158 00000 n +0000648309 00000 n +0000650104 00000 n +0000650254 00000 n +0000650393 00000 n +0000652040 00000 n +0000652190 00000 n +0000652341 00000 n +0000654124 00000 n +0000654274 00000 n +0000654425 00000 n +0000656129 00000 n +0000656279 00000 n +0000656418 00000 n +0000658142 00000 n +0000658292 00000 n +0000658407 00000 n +0000659570 00000 n +0000659746 00000 n +0000659898 00000 n +0000660010 00000 n +0000660161 00000 n +0000662256 00000 n +0000662406 00000 n +0000662557 00000 n +0000664386 00000 n +0000664536 00000 n +0000664675 00000 n +0000666276 00000 n +0000666426 00000 n +0000666577 00000 n +0000668379 00000 n +0000668529 00000 n +0000668668 00000 n +0000670348 00000 n +0000670498 00000 n +0000670637 00000 n +0000672204 00000 n +0000672354 00000 n +0000672493 00000 n +0000674125 00000 n +0000674292 00000 n +0000674444 00000 n +0000674583 00000 n +0000676382 00000 n +0000676549 00000 n +0000676661 00000 n +0000676800 00000 n +0000678276 00000 n +0000678426 00000 n +0000678577 00000 n +0000680200 00000 n +0000680350 00000 n +0000680489 00000 n +0000681986 00000 n +0000682136 00000 n +0000682263 00000 n +0000683575 00000 n +0000683742 00000 n +0000683883 00000 n +0000684034 00000 n +0000685573 00000 n +0000685723 00000 n +0000685862 00000 n +0000687591 00000 n +0000687758 00000 n +0000687901 00000 n +0000688052 00000 n +0000689630 00000 n +0000689797 00000 n +0000689948 00000 n +0000690099 00000 n +0000692450 00000 n +0000692635 00000 n +0000692782 00000 n +0000692894 00000 n +0000693006 00000 n +0000693157 00000 n +0000695099 00000 n +0000695249 00000 n +0000695400 00000 n +0000697111 00000 n +0000697287 00000 n +0000697435 00000 n +0000697576 00000 n +0000697727 00000 n +0000699318 00000 n +0000699494 00000 n +0000699638 00000 n +0000699749 00000 n +0000699900 00000 n +0000701746 00000 n +0000701931 00000 n +0000702039 00000 n +0000702147 00000 n +0000702255 00000 n +0000702406 00000 n +0000704222 00000 n +0000704372 00000 n +0000704511 00000 n +0000706242 00000 n +0000706436 00000 n +0000706541 00000 n +0000706649 00000 n +0000706757 00000 n +0000706865 00000 n +0000707016 00000 n +0000708947 00000 n +0000709097 00000 n +0000709236 00000 n +0000711379 00000 n +0000711529 00000 n +0000711668 00000 n +0000713458 00000 n +0000713608 00000 n +0000713747 00000 n +0000715519 00000 n +0000715669 00000 n +0000715784 00000 n +0000716391 00000 n +0000716541 00000 n +0000716643 00000 n +0000717150 00000 n +0000717335 00000 n +0000717444 00000 n +0000717553 00000 n +0000717662 00000 n +0000717813 00000 n +0000719557 00000 n +0000719707 00000 n +0000719846 00000 n +0000721258 00000 n +0000721408 00000 n +0000721547 00000 n +0000723482 00000 n +0000723632 00000 n +0000723783 00000 n +0000726027 00000 n +0000726177 00000 n +0000726292 00000 n +0000727313 00000 n +0000727463 00000 n +0000727565 00000 n +0000728085 00000 n +0000728261 00000 n +0000728370 00000 n +0000728479 00000 n +0000728606 00000 n +0000729884 00000 n +0000730034 00000 n +0000730149 00000 n +0000731255 00000 n +0000731405 00000 n +0000731520 00000 n +0000732641 00000 n +0000732791 00000 n +0000732906 00000 n +0000734144 00000 n +0000734294 00000 n +0000734409 00000 n +0000735537 00000 n +0000735687 00000 n +0000735802 00000 n +0000736930 00000 n +0000737080 00000 n +0000737195 00000 n +0000738423 00000 n +0000738573 00000 n +0000738688 00000 n +0000739778 00000 n +0000739928 00000 n +0000740043 00000 n +0000741283 00000 n +0000741433 00000 n +0000741548 00000 n +0000742581 00000 n +0000742731 00000 n +0000742846 00000 n +0000743989 00000 n +0000744139 00000 n +0000744254 00000 n +0000745500 00000 n +0000745650 00000 n +0000745765 00000 n +0000747045 00000 n +0000747195 00000 n +0000747310 00000 n +0000748389 00000 n +0000748539 00000 n +0000748654 00000 n +0000749763 00000 n +0000749913 00000 n +0000750028 00000 n +0000751238 00000 n +0000751388 00000 n +0000751503 00000 n +0000752505 00000 n +0000752655 00000 n +0000752770 00000 n +0000753916 00000 n +0000754066 00000 n +0000754181 00000 n +0000755459 00000 n +0000755609 00000 n +0000755724 00000 n +0000756773 00000 n +0000756923 00000 n +0000757038 00000 n +0000758195 00000 n +0000758345 00000 n +0000758460 00000 n +0000759552 00000 n +0000759702 00000 n +0000759817 00000 n +0000761112 00000 n +0000761262 00000 n +0000761377 00000 n +0000762389 00000 n +0000762539 00000 n +0000762654 00000 n +0000763864 00000 n +0000764014 00000 n +0000764129 00000 n +0000765240 00000 n +0000765390 00000 n +0000765505 00000 n +0000766606 00000 n +0000766756 00000 n +0000766871 00000 n +0000768035 00000 n +0000768185 00000 n +0000768300 00000 n +0000769606 00000 n +0000769756 00000 n +0000769871 00000 n +0000771060 00000 n +0000771210 00000 n +0000771325 00000 n +0000772585 00000 n +0000772735 00000 n +0000772850 00000 n +0000774113 00000 n +0000774263 00000 n +0000774378 00000 n +0000775625 00000 n +0000775775 00000 n +0000775890 00000 n +0000777064 00000 n +0000777214 00000 n +0000777329 00000 n +0000778479 00000 n +0000778629 00000 n +0000778744 00000 n +0000779753 00000 n +0000779903 00000 n +0000780018 00000 n +0000781132 00000 n +0000781282 00000 n +0000781397 00000 n +0000782543 00000 n +0000782693 00000 n +0000782808 00000 n +0000783971 00000 n +0000784121 00000 n +0000784236 00000 n +0000785466 00000 n +0000785616 00000 n +0000785731 00000 n +0000786914 00000 n +0000787064 00000 n +0000787179 00000 n +0000788082 00000 n +0000788232 00000 n +0000788347 00000 n +0000789370 00000 n +0000789520 00000 n +0000789635 00000 n +0000790734 00000 n +0000790884 00000 n +0000790999 00000 n +0000792156 00000 n +0000792306 00000 n +0000792421 00000 n +0000793613 00000 n +0000793763 00000 n +0000793878 00000 n +0000795186 00000 n +0000795336 00000 n +0000795451 00000 n +0000796553 00000 n +0000796703 00000 n +0000796818 00000 n +0000797980 00000 n +0000798130 00000 n +0000798245 00000 n +0000799385 00000 n +0000799535 00000 n +0000799650 00000 n +0000800865 00000 n +0000801015 00000 n +0000801130 00000 n +0000802190 00000 n +0000802340 00000 n +0000802455 00000 n +0000803573 00000 n +0000803723 00000 n +0000803838 00000 n +0000804978 00000 n +0000805128 00000 n +0000805243 00000 n +0000806326 00000 n +0000806476 00000 n +0000806591 00000 n +0000807753 00000 n +0000807903 00000 n +0000808018 00000 n +0000809213 00000 n +0000809363 00000 n +0000809478 00000 n +0000810662 00000 n +0000810812 00000 n +0000810927 00000 n +0000812112 00000 n +0000812262 00000 n +0000812377 00000 n +0000813548 00000 n +0000813698 00000 n +0000813813 00000 n +0000814847 00000 n +0000814997 00000 n +0000815112 00000 n +0000816294 00000 n +0000816444 00000 n +0000816559 00000 n +0000817591 00000 n +0000817741 00000 n +0000817856 00000 n +0000819083 00000 n +0000819233 00000 n +0000819348 00000 n +0000820378 00000 n +0000820528 00000 n +0000820643 00000 n +0000821810 00000 n +0000821960 00000 n +0000822075 00000 n +0000823171 00000 n +0000823321 00000 n +0000823436 00000 n +0000824600 00000 n +0000824750 00000 n +0000824865 00000 n +0000825947 00000 n +0000826097 00000 n +0000826212 00000 n +0000827168 00000 n +0000827318 00000 n +0000827433 00000 n +0000828458 00000 n +0000828608 00000 n +0000828723 00000 n +0000829751 00000 n +0000829901 00000 n +0000830016 00000 n +0000830947 00000 n +0000831097 00000 n +0000831212 00000 n +0000832112 00000 n +0000832262 00000 n +0000832377 00000 n +0000833255 00000 n +0000833405 00000 n +0000833520 00000 n +0000834579 00000 n +0000834729 00000 n +0000834844 00000 n +0000835967 00000 n +0000836117 00000 n +0000836232 00000 n +0000837235 00000 n +0000837385 00000 n +0000837500 00000 n +0000838499 00000 n +0000838649 00000 n +0000838764 00000 n +0000839770 00000 n +0000839920 00000 n +0000840035 00000 n +0000841037 00000 n +0000841187 00000 n +0000841302 00000 n +0000842250 00000 n +0000842400 00000 n +0000842515 00000 n +0000843443 00000 n +0000843593 00000 n +0000843708 00000 n +0000844657 00000 n +0000844807 00000 n +0000844922 00000 n +0000845807 00000 n +0000845957 00000 n +0000846072 00000 n +0000846924 00000 n +0000847074 00000 n +0000847189 00000 n +0000848053 00000 n +0000848203 00000 n +0000848318 00000 n +0000849161 00000 n +0000849311 00000 n +0000849426 00000 n +0000850264 00000 n +0000850414 00000 n +0000850529 00000 n +0000851426 00000 n +0000851576 00000 n +0000851691 00000 n +0000852613 00000 n +0000852763 00000 n +0000852878 00000 n +0000853751 00000 n +0000853901 00000 n +0000854016 00000 n +0000855055 00000 n +0000855205 00000 n +0000855320 00000 n +0000856235 00000 n +0000856385 00000 n +0000856500 00000 n +0000857410 00000 n +0000857560 00000 n +0000857675 00000 n +0000858556 00000 n +0000858706 00000 n +0000858821 00000 n +0000859702 00000 n +0000859852 00000 n +0000859967 00000 n +0000860871 00000 n +0000861021 00000 n +0000861136 00000 n +0000862064 00000 n +0000862214 00000 n +0000862329 00000 n +0000863255 00000 n +0000863405 00000 n +0000863520 00000 n +0000864346 00000 n +0000864496 00000 n +0000864611 00000 n +0000865432 00000 n +0000865582 00000 n +0000865697 00000 n +0000866536 00000 n +0000866686 00000 n +0000866801 00000 n +0000867695 00000 n +0000867845 00000 n +0000867960 00000 n +0000868837 00000 n +0000868987 00000 n +0000869102 00000 n +0000869920 00000 n +0000870070 00000 n +0000870185 00000 n +0000871107 00000 n +0000871257 00000 n +0000871372 00000 n +0000872434 00000 n +0000872584 00000 n +0000872699 00000 n +0000873809 00000 n +0000873959 00000 n +0000874074 00000 n +0000875113 00000 n +0000875263 00000 n +0000875378 00000 n +0000876203 00000 n +0000876353 00000 n +0000876468 00000 n +0000877364 00000 n +0000877514 00000 n +0000877629 00000 n +0000878493 00000 n +0000878643 00000 n +0000878758 00000 n +0000879565 00000 n +0000879715 00000 n +0000879830 00000 n +0000880707 00000 n +0000880857 00000 n +0000880972 00000 n +0000881850 00000 n +0000882000 00000 n +0000882115 00000 n +0000882978 00000 n +0000883128 00000 n +0000883243 00000 n +0000884112 00000 n +0000884262 00000 n +0000884377 00000 n +0000885339 00000 n +0000885489 00000 n +0000885604 00000 n +0000886259 00000 n +0000886869 00000 n +0000887435 00000 n +0000892277 00000 n +0000892434 00000 n +0000892882 00000 n +0000893245 00000 n +0000897044 00000 n +0000897582 00000 n +0000898091 00000 n +0000902926 00000 n +0000903404 00000 n +0000903758 00000 n +0000906329 00000 n +0000906501 00000 n +0000906789 00000 n +0000906987 00000 n +0000907354 00000 n +0000907410 00000 n +0000907461 00000 n +0000908045 00000 n +0000908309 00000 n +0000940681 00000 n +0000941072 00000 n +0000941348 00000 n +0000955764 00000 n +0000956297 00000 n +0000957550 00000 n +0000958894 00000 n +0000960238 00000 n +0000961582 00000 n +0000962926 00000 n +0000964270 00000 n +0000965614 00000 n +0000966958 00000 n +0000968302 00000 n +0000969646 00000 n +0000970990 00000 n +0000972334 00000 n +0000973678 00000 n +0000975022 00000 n +0000976366 00000 n +0000977710 00000 n +0000979054 00000 n +0000980398 00000 n +0000981742 00000 n +0000983086 00000 n +0000984430 00000 n +0000985774 00000 n +0000987118 00000 n +0000988462 00000 n +0000989806 00000 n +0000991150 00000 n +0000992494 00000 n +0000993913 00000 n +0000995323 00000 n +0000996733 00000 n +0000998143 00000 n +0000999553 00000 n +0001000963 00000 n +0001002396 00000 n +0001003872 00000 n +0001005348 00000 n +0001006824 00000 n +0001008300 00000 n +0001009776 00000 n +0001011252 00000 n +0001012728 00000 n +0001014204 00000 n +0001015680 00000 n +0001017156 00000 n +0001020053 00000 n +0001023098 00000 n +0001025919 00000 n +0001028783 00000 n +0001031716 00000 n +0001034733 00000 n +0001035740 00000 n +0001036746 00000 n +0001037754 00000 n +0001038759 00000 n +0001039747 00000 n +0001040481 00000 n +0001040534 00000 n +0001040587 00000 n +0001040640 00000 n +0001040693 00000 n +0001040746 00000 n +0001040799 00000 n +0001040852 00000 n +0001040905 00000 n +0001040958 00000 n +0001041011 00000 n +0001041064 00000 n +0001041117 00000 n +0001041170 00000 n +0001041223 00000 n +0001041276 00000 n +0001041329 00000 n +0001041382 00000 n +0001041435 00000 n +0001041488 00000 n +0001041541 00000 n +0001041594 00000 n +0001041647 00000 n +0001041700 00000 n +0001041753 00000 n +0001041806 00000 n +0001041859 00000 n +0001041912 00000 n +0001041965 00000 n +0001042018 00000 n +0001042071 00000 n +0001042124 00000 n +0001042177 00000 n +0001042230 00000 n +0001042283 00000 n +0001042336 00000 n +0001042389 00000 n +0001042442 00000 n +0001042495 00000 n +0001042548 00000 n +0001042601 00000 n +0001042654 00000 n +0001042707 00000 n +0001042760 00000 n +0001042813 00000 n +0001042866 00000 n +0001042919 00000 n +0001042972 00000 n +0001043025 00000 n +0001043078 00000 n +0001043132 00000 n +0001043186 00000 n +0001043240 00000 n +0001043294 00000 n +0001043348 00000 n +0001043402 00000 n +0001043456 00000 n +0001043510 00000 n +0001043564 00000 n +0001043618 00000 n +0001043671 00000 n +0001043725 00000 n +0001043779 00000 n +0001043833 00000 n +0001043887 00000 n +0001043941 00000 n +0001043995 00000 n +0001044049 00000 n +0001044103 00000 n +0001044157 00000 n +0001044211 00000 n +0001044264 00000 n +0001044318 00000 n +0001044372 00000 n +0001044426 00000 n +0001044480 00000 n +0001044534 00000 n +0001044588 00000 n +0001044642 00000 n +0001044696 00000 n +0001044750 00000 n +0001044804 00000 n +0001044857 00000 n +0001044911 00000 n +0001044965 00000 n +0001045019 00000 n +0001045073 00000 n +0001045127 00000 n +0001045181 00000 n +0001045235 00000 n +0001045289 00000 n +0001045343 00000 n +0001045397 00000 n +0001045450 00000 n +0001045504 00000 n +0001045557 00000 n +0001045610 00000 n +0001045662 00000 n +0001045715 00000 n +0001045768 00000 n +0001045821 00000 n +0001045874 00000 n +0001045927 00000 n +0001045980 00000 n +0001046033 00000 n +0001046086 00000 n +0001046139 00000 n +0001046192 00000 n +0001046244 00000 n +0001046297 00000 n +0001046350 00000 n +0001046403 00000 n +0001046456 00000 n +0001046509 00000 n +0001046563 00000 n +0001046617 00000 n +0001046671 00000 n +0001046725 00000 n +0001046779 00000 n +0001046833 00000 n +0001046887 00000 n +0001046940 00000 n +0001046994 00000 n +0001047048 00000 n +0001047102 00000 n +0001047156 00000 n +0001047210 00000 n +0001047264 00000 n +0001047318 00000 n +0001047372 00000 n +0001047426 00000 n +0001047480 00000 n +0001047533 00000 n +0001047587 00000 n +0001047641 00000 n +0001047695 00000 n +0001047749 00000 n +0001047803 00000 n +0001047857 00000 n +0001047911 00000 n +0001047965 00000 n +0001048019 00000 n +0001048073 00000 n +0001048124 00000 n +0001048177 00000 n +0001048231 00000 n +0001048285 00000 n +0001048339 00000 n +0001048393 00000 n +0001048447 00000 n +0001048501 00000 n +0001048555 00000 n +0001048609 00000 n +0001048663 00000 n +0001048717 00000 n +0001048770 00000 n +0001048824 00000 n +0001048878 00000 n +0001048932 00000 n +0001048986 00000 n +0001049040 00000 n +0001049094 00000 n +0001049148 00000 n +0001049202 00000 n +0001049256 00000 n +0001049310 00000 n +0001049363 00000 n +0001049417 00000 n +0001049471 00000 n +0001049525 00000 n +0001049579 00000 n +0001049633 00000 n +0001049687 00000 n +0001049741 00000 n +0001049795 00000 n +0001049849 00000 n +0001049903 00000 n +0001049956 00000 n +0001050010 00000 n +0001050064 00000 n +0001050118 00000 n +0001050172 00000 n +0001050226 00000 n +0001050279 00000 n +0001050333 00000 n +0001050387 00000 n +0001050441 00000 n +0001050495 00000 n +0001050549 00000 n +0001050603 00000 n +0001050657 00000 n +0001050711 00000 n +0001050765 00000 n +0001050819 00000 n +0001050872 00000 n +0001050926 00000 n +0001050980 00000 n +0001051034 00000 n +0001051088 00000 n +0001051142 00000 n +0001051196 00000 n +0001051250 00000 n +0001051304 00000 n +0001051358 00000 n +0001051412 00000 n +0001051465 00000 n +0001051519 00000 n +0001051573 00000 n +0001051627 00000 n +0001051681 00000 n +0001051735 00000 n +0001051789 00000 n +0001051843 00000 n +0001051897 00000 n +0001051951 00000 n +0001052005 00000 n +0001052058 00000 n +0001052112 00000 n +0001052166 00000 n +0001052220 00000 n +0001052274 00000 n +0001052328 00000 n +0001052382 00000 n +0001052436 00000 n +0001052490 00000 n +0001052544 00000 n +0001052598 00000 n +0001052651 00000 n +0001052705 00000 n +0001052759 00000 n +0001052813 00000 n +0001052867 00000 n +0001052921 00000 n +0001052975 00000 n +0001053029 00000 n +0001053083 00000 n +0001053137 00000 n +0001053191 00000 n +0001053244 00000 n +0001053298 00000 n +0001053352 00000 n +0001053406 00000 n +0001053460 00000 n +0001053514 00000 n +0001053567 00000 n +0001053621 00000 n +0001053675 00000 n +0001053729 00000 n +0001053783 00000 n +0001053837 00000 n +0001053891 00000 n +0001053945 00000 n +0001053999 00000 n +0001054053 00000 n +0001054107 00000 n +0001054160 00000 n +0001054214 00000 n +0001054268 00000 n +0001054322 00000 n +0001054376 00000 n +0001054430 00000 n +0001054484 00000 n +0001054538 00000 n +0001054592 00000 n +0001054646 00000 n +0001054700 00000 n +0001054753 00000 n +0001054807 00000 n +0001054861 00000 n +0001054915 00000 n +0001054969 00000 n +0001055023 00000 n +0001055077 00000 n +0001055131 00000 n +0001055185 00000 n +0001055239 00000 n +0001055293 00000 n +0001055346 00000 n +0001055400 00000 n +0001055454 00000 n +0001055508 00000 n +0001055562 00000 n +0001055616 00000 n +0001055670 00000 n +0001055724 00000 n +0001055778 00000 n +0001055832 00000 n +0001055886 00000 n +0001055937 00000 n +0001055990 00000 n +0001056044 00000 n +0001056098 00000 n +0001056152 00000 n +0001056206 00000 n +0001056260 00000 n +0001056314 00000 n +0001056368 00000 n +0001056422 00000 n +0001056476 00000 n +0001056530 00000 n +0001056583 00000 n +0001056637 00000 n +0001056691 00000 n +0001056745 00000 n +0001056799 00000 n +0001056853 00000 n +0001056906 00000 n +0001056959 00000 n +0001057012 00000 n +0001057065 00000 n +0001057119 00000 n +0001057173 00000 n +0001057227 00000 n +0001057281 00000 n +0001057335 00000 n +0001057389 00000 n +0001057443 00000 n +0001057496 00000 n +0001057550 00000 n +0001057604 00000 n +0001057658 00000 n +0001057712 00000 n +0001057766 00000 n +0001057820 00000 n +0001057874 00000 n +0001057928 00000 n +0001057982 00000 n +0001058036 00000 n +0001058089 00000 n +0001058143 00000 n +0001058197 00000 n +0001058251 00000 n +0001058305 00000 n +0001058359 00000 n +0001058413 00000 n +0001058467 00000 n +0001058521 00000 n +0001058575 00000 n +0001058629 00000 n +0001058682 00000 n +0001058736 00000 n +0001058790 00000 n +0001058844 00000 n +0001058898 00000 n +0001058952 00000 n +0001059006 00000 n +0001059060 00000 n +0001059114 00000 n +0001059168 00000 n +0001059222 00000 n +0001059275 00000 n +0001059329 00000 n +0001059383 00000 n +0001059437 00000 n +0001059491 00000 n +0001059545 00000 n +0001059599 00000 n +0001059653 00000 n +0001059707 00000 n +0001059761 00000 n +0001059815 00000 n +0001059868 00000 n +0001059922 00000 n +0001059976 00000 n +0001060030 00000 n +0001060084 00000 n +0001060138 00000 n +0001060192 00000 n +0001060246 00000 n +0001060300 00000 n +0001060351 00000 n +0001060402 00000 n +0001060453 00000 n +0001060504 00000 n +0001060555 00000 n +0001060606 00000 n +0001060657 00000 n +0001060708 00000 n +0001060759 00000 n +0001060810 00000 n +0001060859 00000 n +0001060910 00000 n +0001060961 00000 n +0001061012 00000 n +0001061063 00000 n +0001061114 00000 n +0001061165 00000 n +0001061216 00000 n +0001061267 00000 n +0001061318 00000 n +0001061369 00000 n +0001061420 00000 n +0001061471 00000 n +0001061522 00000 n +0001061573 00000 n +0001061624 00000 n +0001061675 00000 n +0001061726 00000 n +0001061777 00000 n +0001061828 00000 n +0001061879 00000 n +0001061930 00000 n +0001061981 00000 n +0001062032 00000 n +0001062083 00000 n +0001062134 00000 n +0001062185 00000 n +0001062236 00000 n +0001062287 00000 n +0001062338 00000 n +0001062389 00000 n +0001062440 00000 n +0001062491 00000 n +0001062541 00000 n +0001062592 00000 n +0001062643 00000 n +0001062694 00000 n +0001062745 00000 n +0001062796 00000 n +0001062847 00000 n +0001062898 00000 n +0001062949 00000 n +0001063000 00000 n +0001063051 00000 n +0001063102 00000 n +0001063153 00000 n +0001063204 00000 n +0001063255 00000 n +0001063306 00000 n +0001063357 00000 n +0001063408 00000 n +0001063459 00000 n +0001063510 00000 n +0001063564 00000 n +0001063615 00000 n +0001063666 00000 n +0001063717 00000 n +0001063768 00000 n +0001063819 00000 n +0001063870 00000 n +0001063922 00000 n +0001063973 00000 n +0001064025 00000 n +0001064077 00000 n +0001064128 00000 n +0001064179 00000 n +0001064230 00000 n +0001064281 00000 n +0001064332 00000 n +0001064383 00000 n +0001064435 00000 n +0001064486 00000 n +0001064538 00000 n +0001064590 00000 n +0001064642 00000 n +0001064694 00000 n +0001064745 00000 n +0001064797 00000 n +0001064848 00000 n +0001064900 00000 n +0001064951 00000 n +0001065003 00000 n +0001065055 00000 n +0001065107 00000 n +0001065159 00000 n +0001065211 00000 n +0001065263 00000 n +0001065315 00000 n +0001065367 00000 n +0001065418 00000 n +0001065469 00000 n +0001065520 00000 n +0001065571 00000 n +0001065622 00000 n +0001065674 00000 n +0001065726 00000 n +0001065778 00000 n +0001065830 00000 n +0001065882 00000 n +0001065934 00000 n +0001065986 00000 n +0001066038 00000 n +0001066090 00000 n +0001066142 00000 n +0001066194 00000 n +0001066245 00000 n +0001066296 00000 n +0001066347 00000 n +0001066397 00000 n +0001066448 00000 n +0001066499 00000 n +0001066550 00000 n +0001066601 00000 n +0001066652 00000 n +0001066703 00000 n +0001066754 00000 n +0001066805 00000 n +0001066854 00000 n +0001066905 00000 n +0001066957 00000 n +0001067009 00000 n +0001067060 00000 n +0001067112 00000 n +0001067163 00000 n +0001067214 00000 n +0001067265 00000 n +0001067316 00000 n +0001067367 00000 n +0001067419 00000 n +0001067470 00000 n +0001067521 00000 n +0001067573 00000 n +0001067624 00000 n +0001067676 00000 n +0001067727 00000 n +0001067778 00000 n +0001067830 00000 n +0001067882 00000 n +0001067933 00000 n +0001067984 00000 n +0001068035 00000 n +0001068086 00000 n +0001068138 00000 n +0001068189 00000 n +0001068240 00000 n +0001068292 00000 n +0001068343 00000 n +0001068395 00000 n +0001068447 00000 n +0001068498 00000 n +0001068549 00000 n +0001068601 00000 n +0001068653 00000 n +0001068705 00000 n +0001068756 00000 n +0001068807 00000 n +0001068859 00000 n +0001068910 00000 n +0001068961 00000 n +0001069013 00000 n +0001069064 00000 n +0001069115 00000 n +0001069166 00000 n +0001069218 00000 n +0001069269 00000 n +0001069320 00000 n +0001069371 00000 n +0001069423 00000 n +0001069475 00000 n +0001069527 00000 n +0001069579 00000 n +0001069631 00000 n +0001069683 00000 n +0001069735 00000 n +0001069787 00000 n +0001069839 00000 n +0001069891 00000 n +0001069943 00000 n +0001069994 00000 n +0001070046 00000 n +0001070097 00000 n +0001070148 00000 n +0001070198 00000 n +0001070249 00000 n +0001070299 00000 n +0001070350 00000 n +0001070401 00000 n +0001070452 00000 n +0001070503 00000 n +0001070554 00000 n +0001070605 00000 n +0001070656 00000 n +0001070707 00000 n +0001070758 00000 n +0001070809 00000 n +0001070859 00000 n +0001070910 00000 n +0001070961 00000 n +0001071011 00000 n +0001071062 00000 n +0001071112 00000 n +0001071162 00000 n +0001071212 00000 n +0001071262 00000 n +0001071312 00000 n +0001071362 00000 n +0001071412 00000 n +0001071462 00000 n +0001071511 00000 n +0001071561 00000 n +0001071611 00000 n +0001071661 00000 n +0001071711 00000 n +0001071761 00000 n +0001071810 00000 n +0001071860 00000 n +0001071910 00000 n +0001071960 00000 n +0001072010 00000 n +0001072060 00000 n +0001072110 00000 n +0001072160 00000 n +0001072210 00000 n +0001072260 00000 n +0001072310 00000 n +0001072360 00000 n +0001072410 00000 n +0001072460 00000 n +0001072510 00000 n +0001072560 00000 n +0001072610 00000 n +0001072660 00000 n +0001072709 00000 n +0001072759 00000 n +0001072809 00000 n +0001072859 00000 n +0001072909 00000 n +0001072959 00000 n +0001073009 00000 n +0001073059 00000 n +0001073108 00000 n +0001073157 00000 n +0001073206 00000 n +0001073258 00000 n +0001073309 00000 n +0001073360 00000 n +0001073410 00000 n +0001073460 00000 n +0001073511 00000 n +0001073561 00000 n +0001073611 00000 n +0001073661 00000 n +0001073712 00000 n +0001073762 00000 n +0001073812 00000 n +0001073862 00000 n +0001073912 00000 n +0001073963 00000 n +0001074013 00000 n +0001074063 00000 n +0001074113 00000 n +0001074163 00000 n +0001074213 00000 n +0001074263 00000 n +0001074313 00000 n +0001074364 00000 n +0001074415 00000 n +0001074465 00000 n +0001074515 00000 n +0001074565 00000 n +0001074615 00000 n +0001074665 00000 n +0001074715 00000 n +0001074765 00000 n +0001074814 00000 n +0001074864 00000 n +0001074914 00000 n +0001074963 00000 n +0001075013 00000 n +0001075063 00000 n +0001075113 00000 n +0001075163 00000 n +0001075213 00000 n +0001075263 00000 n +0001075313 00000 n +0001075363 00000 n +0001075413 00000 n +0001075463 00000 n +0001075513 00000 n +0001075563 00000 n +0001075613 00000 n +0001075663 00000 n +0001075713 00000 n +0001075763 00000 n +0001075812 00000 n +0001075862 00000 n +0001075912 00000 n +0001075962 00000 n +0001076012 00000 n +0001076062 00000 n +0001076113 00000 n +0001076164 00000 n +0001076215 00000 n +0001076266 00000 n +0001076317 00000 n +0001076368 00000 n +0001076419 00000 n +0001076470 00000 n +0001076521 00000 n +0001076572 00000 n +0001076623 00000 n +0001076674 00000 n +0001076725 00000 n +0001076776 00000 n +0001076827 00000 n +0001076881 00000 n +0001076935 00000 n +0001076989 00000 n +0001077042 00000 n +0001077095 00000 n +0001077148 00000 n +0001077201 00000 n +0001077254 00000 n +0001077307 00000 n +0001077360 00000 n +0001077414 00000 n +0001077464 00000 n +0001077514 00000 n +0001077565 00000 n +0001077616 00000 n +0001077667 00000 n +0001077717 00000 n +0001077767 00000 n +0001077818 00000 n +0001077868 00000 n +0001077919 00000 n +0001077969 00000 n +0001078019 00000 n +0001078070 00000 n +0001078121 00000 n +0001078171 00000 n +0001078222 00000 n +0001078271 00000 n +0001078320 00000 n +0001078370 00000 n +0001078421 00000 n +0001078471 00000 n +0001078521 00000 n +0001078571 00000 n +0001078620 00000 n +0001078670 00000 n +0001078719 00000 n +0001078769 00000 n +0001078819 00000 n +0001078868 00000 n +0001078918 00000 n +0001078968 00000 n +0001079019 00000 n +0001079070 00000 n +0001079120 00000 n +0001079169 00000 n +0001079219 00000 n +0001079269 00000 n +0001079319 00000 n +0001079369 00000 n +0001079418 00000 n +0001079468 00000 n +0001079518 00000 n +0001079568 00000 n +0001079618 00000 n +0001079668 00000 n +0001079718 00000 n +0001079768 00000 n +0001079817 00000 n +0001079868 00000 n +0001079919 00000 n +0001079970 00000 n +0001080021 00000 n +0001080072 00000 n +0001080124 00000 n +0001080176 00000 n +0001080228 00000 n +0001080280 00000 n +0001080332 00000 n +0001080383 00000 n +0001080434 00000 n +0001080485 00000 n +0001080536 00000 n +0001080587 00000 n +0001080638 00000 n +0001080689 00000 n +0001080740 00000 n +0001080791 00000 n +0001080843 00000 n +0001080895 00000 n +0001080946 00000 n +0001080998 00000 n +0001081049 00000 n +0001081100 00000 n +0001081151 00000 n +0001081202 00000 n +0001081253 00000 n +0001081304 00000 n +0001081355 00000 n +0001081406 00000 n +0001081457 00000 n +0001081508 00000 n +0001081559 00000 n +0001081610 00000 n +0001081661 00000 n +0001081712 00000 n +0001081763 00000 n +0001081815 00000 n +0001081866 00000 n +0001081917 00000 n +0001081968 00000 n +0001082019 00000 n +0001082070 00000 n +0001082121 00000 n +0001082172 00000 n +0001082223 00000 n +0001082274 00000 n +0001082325 00000 n +0001082376 00000 n +0001082427 00000 n +0001082478 00000 n +0001082529 00000 n +0001082580 00000 n +0001082631 00000 n +0001082682 00000 n +0001082733 00000 n +0001082784 00000 n +0001082835 00000 n +0001082886 00000 n +0001082937 00000 n +0001082988 00000 n +0001083039 00000 n +0001083090 00000 n +0001083141 00000 n +0001083192 00000 n +0001083244 00000 n +0001083295 00000 n +0001083346 00000 n +0001083398 00000 n +0001083449 00000 n +0001083500 00000 n +0001083551 00000 n +0001083602 00000 n +0001083651 00000 n +0001083701 00000 n +0001083750 00000 n +0001083802 00000 n +0001083853 00000 n +0001083904 00000 n +0001083955 00000 n +0001084006 00000 n +0001084057 00000 n +0001084108 00000 n +0001084159 00000 n +0001084210 00000 n +0001084261 00000 n +0001084312 00000 n +0001084363 00000 n +0001084414 00000 n +0001084465 00000 n +0001084516 00000 n +0001084567 00000 n +0001084618 00000 n +0001084669 00000 n +0001084720 00000 n +0001084771 00000 n +0001084822 00000 n +0001084873 00000 n +0001084924 00000 n +0001084975 00000 n +0001085026 00000 n +0001085077 00000 n +0001085128 00000 n +0001085179 00000 n +0001085230 00000 n +0001085281 00000 n +0001085332 00000 n +0001085383 00000 n +0001085434 00000 n +0001085485 00000 n +0001085536 00000 n +0001085587 00000 n +0001085638 00000 n +0001085689 00000 n +0001085740 00000 n +0001085791 00000 n +0001085842 00000 n +0001085893 00000 n +0001085944 00000 n +0001085995 00000 n +0001086046 00000 n +0001086097 00000 n +0001086148 00000 n +0001086199 00000 n +0001086250 00000 n +0001086301 00000 n +0001086352 00000 n +0001086404 00000 n +0001086455 00000 n +0001086506 00000 n +0001086558 00000 n +0001086610 00000 n +0001086662 00000 n +0001086714 00000 n +0001086766 00000 n +0001086817 00000 n +0001086868 00000 n +0001086919 00000 n +0001086970 00000 n +0001087021 00000 n +0001087072 00000 n +0001087123 00000 n +0001087175 00000 n +0001087227 00000 n +0001087279 00000 n +0001087331 00000 n +0001087383 00000 n +0001087435 00000 n +0001087487 00000 n +0001087539 00000 n +0001087590 00000 n +0001087641 00000 n +0001087693 00000 n +0001087745 00000 n +0001087797 00000 n +0001087848 00000 n +0001087900 00000 n +0001087952 00000 n +0001088004 00000 n +0001088055 00000 n +0001088106 00000 n +0001088157 00000 n +0001088208 00000 n +0001088260 00000 n +0001088311 00000 n +0001088362 00000 n +0001088414 00000 n +0001088465 00000 n +0001088516 00000 n +0001088568 00000 n +0001088620 00000 n +0001088672 00000 n +0001088723 00000 n +0001088774 00000 n +0001088825 00000 n +0001088876 00000 n +0001088927 00000 n +0001088978 00000 n +0001089029 00000 n +0001089080 00000 n +0001089131 00000 n +0001089182 00000 n +0001089233 00000 n +0001089284 00000 n +0001089335 00000 n +0001089386 00000 n +0001089437 00000 n +0001089488 00000 n +0001089540 00000 n +0001089591 00000 n +0001089643 00000 n +0001089694 00000 n +0001089745 00000 n +0001089796 00000 n +0001089847 00000 n +0001089898 00000 n +0001089949 00000 n +0001090000 00000 n +0001090052 00000 n +0001090103 00000 n +0001090155 00000 n +0001090207 00000 n +0001090258 00000 n +0001090309 00000 n +0001090360 00000 n +0001090411 00000 n +0001090462 00000 n +0001090514 00000 n +0001090565 00000 n +0001090616 00000 n +0001090667 00000 n +0001090718 00000 n +0001090770 00000 n +0001090822 00000 n +0001090874 00000 n +0001090926 00000 n +0001090978 00000 n +0001091030 00000 n +0001091082 00000 n +0001091134 00000 n +0001091186 00000 n +0001091238 00000 n +0001091290 00000 n +0001091342 00000 n +0001091394 00000 n +0001091446 00000 n +0001091498 00000 n +0001091550 00000 n +0001091602 00000 n +0001091654 00000 n +0001091706 00000 n +0001091758 00000 n +0001091810 00000 n +0001091861 00000 n +0001091912 00000 n +0001091963 00000 n +0001092015 00000 n +0001092066 00000 n +0001092118 00000 n +0001092169 00000 n +0001092221 00000 n +0001092272 00000 n +0001092324 00000 n +0001092376 00000 n +0001092427 00000 n +0001092479 00000 n +0001092531 00000 n +0001092582 00000 n +0001092633 00000 n +0001092684 00000 n +0001092735 00000 n +0001092787 00000 n +0001092839 00000 n +0001092891 00000 n +0001092943 00000 n +0001092994 00000 n +0001093045 00000 n +0001093096 00000 n +0001093147 00000 n +0001093198 00000 n +0001093249 00000 n +0001093300 00000 n +0001093351 00000 n +0001093402 00000 n +0001093453 00000 n +0001093504 00000 n +0001093555 00000 n +0001093606 00000 n +0001093657 00000 n +0001093708 00000 n +0001093759 00000 n +0001093810 00000 n +0001093861 00000 n +0001093912 00000 n +0001093963 00000 n +0001094014 00000 n +0001094065 00000 n +0001094117 00000 n +0001094169 00000 n +0001094220 00000 n +0001094272 00000 n +0001094324 00000 n +0001094376 00000 n +0001094428 00000 n +0001094480 00000 n +0001094532 00000 n +0001094584 00000 n +0001094636 00000 n +0001094687 00000 n +0001094739 00000 n +0001094791 00000 n +0001094843 00000 n +0001094895 00000 n +0001094947 00000 n +0001094999 00000 n +0001095050 00000 n +0001095102 00000 n +0001095154 00000 n +0001095206 00000 n +0001095258 00000 n +0001095309 00000 n +0001095360 00000 n +0001095411 00000 n +0001095462 00000 n +0001095513 00000 n +0001095564 00000 n +0001095615 00000 n +0001095666 00000 n +0001095717 00000 n +0001095768 00000 n +0001095819 00000 n +0001095870 00000 n +0001095921 00000 n +0001095972 00000 n +0001096023 00000 n +0001096074 00000 n +0001096125 00000 n +0001096176 00000 n +0001096227 00000 n +0001096278 00000 n +0001096329 00000 n +0001096380 00000 n +0001096431 00000 n +0001096482 00000 n +0001096533 00000 n +0001096583 00000 n +0001096632 00000 n +0001096681 00000 n +0001096730 00000 n +0001096781 00000 n +0001096832 00000 n +0001096883 00000 n +0001096934 00000 n +0001096985 00000 n +0001097036 00000 n +0001097087 00000 n +0001097138 00000 n +0001097189 00000 n +0001097240 00000 n +0001097290 00000 n +0001097341 00000 n +0001097391 00000 n +0001097441 00000 n +0001097492 00000 n +0001097543 00000 n +0001097594 00000 n +0001097645 00000 n +0001097696 00000 n +0001097747 00000 n +0001097798 00000 n +0001097849 00000 n +0001097900 00000 n +0001097950 00000 n +0001098001 00000 n +0001098052 00000 n +0001098103 00000 n +0001098153 00000 n +0001098204 00000 n +0001098255 00000 n +0001098304 00000 n +0001098353 00000 n +0001098402 00000 n +0001098453 00000 n +0001098504 00000 n +0001098555 00000 n +0001098606 00000 n +0001098657 00000 n +0001098708 00000 n +0001098759 00000 n +0001098810 00000 n +0001098861 00000 n +0001098912 00000 n +0001098963 00000 n +0001099014 00000 n +0001099065 00000 n +0001099116 00000 n +0001099167 00000 n +0001099217 00000 n +0001099268 00000 n +0001099319 00000 n +0001099370 00000 n +0001099421 00000 n +0001099472 00000 n +0001099522 00000 n +0001099572 00000 n +0001099622 00000 n +0001099672 00000 n +0001099722 00000 n +0001099772 00000 n +0001099822 00000 n +0001099872 00000 n +0001099922 00000 n +0001099972 00000 n +0001100022 00000 n +0001100072 00000 n +0001100122 00000 n +0001100172 00000 n +0001100223 00000 n +0001100273 00000 n +0001100323 00000 n +0001100373 00000 n +0001100423 00000 n +0001100473 00000 n +0001100524 00000 n +0001100575 00000 n +0001100626 00000 n +0001100677 00000 n +0001100727 00000 n +0001100778 00000 n +0001100829 00000 n +0001100880 00000 n +0001100931 00000 n +0001100982 00000 n +0001101033 00000 n +0001101084 00000 n +0001101135 00000 n +0001101186 00000 n +0001101237 00000 n +0001101288 00000 n +0001101338 00000 n +0001101388 00000 n +0001101439 00000 n +0001101489 00000 n +0001101540 00000 n +0001101591 00000 n +0001101641 00000 n +0001101691 00000 n +0001101742 00000 n +0001101793 00000 n +0001101843 00000 n +0001101894 00000 n +0001101944 00000 n +0001101995 00000 n +0001102046 00000 n +0001102096 00000 n +0001102147 00000 n +0001102198 00000 n +0001102249 00000 n +0001102300 00000 n +0001102350 00000 n +0001102401 00000 n +0001102451 00000 n +0001102502 00000 n +0001102553 00000 n +0001102604 00000 n +0001102655 00000 n +0001102705 00000 n +0001102755 00000 n +0001102805 00000 n +0001102855 00000 n +0001102905 00000 n +0001102956 00000 n +0001103006 00000 n +0001103056 00000 n +0001103106 00000 n +0001103156 00000 n +0001103206 00000 n +0001103256 00000 n +0001103306 00000 n +0001103356 00000 n +0001103406 00000 n +0001103456 00000 n +0001103506 00000 n +0001103556 00000 n +0001103606 00000 n +0001103656 00000 n +0001103706 00000 n +0001103756 00000 n +0001103806 00000 n +0001103856 00000 n +0001103906 00000 n +0001103956 00000 n +0001104006 00000 n +0001104056 00000 n +0001104106 00000 n +0001104156 00000 n +0001104206 00000 n +0001104256 00000 n +0001104306 00000 n +0001104356 00000 n +0001104407 00000 n +0001104458 00000 n +0001104508 00000 n +0001104558 00000 n +0001104608 00000 n +0001104658 00000 n +0001104708 00000 n +0001104759 00000 n +0001104810 00000 n +0001104861 00000 n +0001104912 00000 n +0001104963 00000 n +0001105014 00000 n +0001105065 00000 n +0001105116 00000 n +0001105167 00000 n +0001105218 00000 n +0001105269 00000 n +0001105320 00000 n +0001105371 00000 n +0001105422 00000 n +0001105473 00000 n +0001105524 00000 n +0001105575 00000 n +0001105626 00000 n +0001105677 00000 n +0001105728 00000 n +0001105778 00000 n +0001105828 00000 n +0001105878 00000 n +0001105928 00000 n +0001105978 00000 n +0001106028 00000 n +0001106078 00000 n +0001106128 00000 n +0001106178 00000 n +0001106228 00000 n +0001106278 00000 n +0001106328 00000 n +0001106379 00000 n +0001106429 00000 n +0001106479 00000 n +0001106529 00000 n +0001106580 00000 n +0001106631 00000 n +0001106682 00000 n +0001106733 00000 n +0001106783 00000 n +0001106834 00000 n +0001106885 00000 n +0001106936 00000 n +0001106986 00000 n +0001107037 00000 n +0001107088 00000 n +0001107139 00000 n +0001107190 00000 n +0001107241 00000 n +0001107292 00000 n +0001107343 00000 n +0001107394 00000 n +0001107444 00000 n +0001107495 00000 n +0001107546 00000 n +0001107597 00000 n +0001107648 00000 n +0001107699 00000 n +0001107749 00000 n +0001107800 00000 n +0001107851 00000 n +0001107901 00000 n +0001107952 00000 n +0001108002 00000 n +0001108053 00000 n +0001108104 00000 n +0001108154 00000 n +0001108203 00000 n +0001108252 00000 n +0001108301 00000 n +0001108352 00000 n +0001108403 00000 n +0001108454 00000 n +0001108505 00000 n +0001108555 00000 n +0001108605 00000 n +0001108655 00000 n +0001108705 00000 n +0001108755 00000 n +0001108805 00000 n +0001108855 00000 n +0001108905 00000 n +0001108955 00000 n +0001109005 00000 n +0001109055 00000 n +0001109105 00000 n +0001109155 00000 n +0001109205 00000 n +0001109255 00000 n +0001109305 00000 n +0001109356 00000 n +0001109407 00000 n +0001109457 00000 n +0001109508 00000 n +0001109557 00000 n +0001109606 00000 n +0001109655 00000 n +0001109706 00000 n +0001109756 00000 n +0001109806 00000 n +0001109856 00000 n +0001109906 00000 n +0001109956 00000 n +0001110006 00000 n +0001110056 00000 n +0001110106 00000 n +0001110156 00000 n +0001110206 00000 n +0001110256 00000 n +0001110306 00000 n +0001110356 00000 n +0001110406 00000 n +0001110457 00000 n +0001110507 00000 n +0001110557 00000 n +0001110608 00000 n +0001110657 00000 n +0001110706 00000 n +0001110755 00000 n +0001110806 00000 n +0001110856 00000 n +0001110907 00000 n +0001110957 00000 n +0001111007 00000 n +0001111057 00000 n +0001111107 00000 n +0001111157 00000 n +0001111207 00000 n +0001111257 00000 n +0001111307 00000 n +0001111357 00000 n +0001111407 00000 n +0001111457 00000 n +0001111507 00000 n +0001111557 00000 n +0001111607 00000 n +0001111657 00000 n +0001111707 00000 n +0001111757 00000 n +0001111807 00000 n +0001111857 00000 n +0001111907 00000 n +0001111957 00000 n +0001112007 00000 n +0001112057 00000 n +0001112107 00000 n +0001112157 00000 n +0001112207 00000 n +0001112257 00000 n +0001112307 00000 n +0001112357 00000 n +0001112407 00000 n +0001112457 00000 n +0001112507 00000 n +0001112557 00000 n +0001112607 00000 n +0001112657 00000 n +0001112707 00000 n +0001112757 00000 n +0001112807 00000 n +0001112857 00000 n +0001112907 00000 n +0001112957 00000 n +0001113007 00000 n +0001113057 00000 n +0001113107 00000 n +0001113157 00000 n +0001113207 00000 n +0001113257 00000 n +0001113307 00000 n +0001113357 00000 n +0001113407 00000 n +0001113457 00000 n +0001113507 00000 n +0001113557 00000 n +0001113607 00000 n +0001113657 00000 n +0001113707 00000 n +0001113757 00000 n +0001113807 00000 n +0001113857 00000 n +0001113907 00000 n +0001113957 00000 n +0001114007 00000 n +0001114057 00000 n +0001114107 00000 n +0001114157 00000 n +0001114207 00000 n +0001114257 00000 n +0001114307 00000 n +0001114357 00000 n +0001114407 00000 n +0001114457 00000 n +0001114507 00000 n +0001114558 00000 n +0001114608 00000 n +0001114659 00000 n +0001114710 00000 n +0001114761 00000 n +0001114812 00000 n +0001114863 00000 n +0001114914 00000 n +0001114965 00000 n +0001115016 00000 n +0001115067 00000 n +0001115117 00000 n +0001115168 00000 n +0001115219 00000 n +0001115270 00000 n +0001115319 00000 n +0001115368 00000 n +0001115419 00000 n +0001115469 00000 n +0001115519 00000 n +0001115569 00000 n +0001115619 00000 n +0001115669 00000 n +0001115719 00000 n +0001115769 00000 n +0001115819 00000 n +0001115869 00000 n +0001115919 00000 n +0001115969 00000 n +0001116019 00000 n +0001116069 00000 n +0001116119 00000 n +0001116169 00000 n +0001116219 00000 n +0001116269 00000 n +0001116319 00000 n +0001116369 00000 n +0001116419 00000 n +0001116469 00000 n +0001116519 00000 n +0001116569 00000 n +0001116619 00000 n +0001116669 00000 n +0001116719 00000 n +0001116769 00000 n +0001116819 00000 n +0001116869 00000 n +0001116919 00000 n +0001116969 00000 n +0001117019 00000 n +0001117069 00000 n +0001117119 00000 n +0001117169 00000 n +0001117219 00000 n +0001117269 00000 n +0001117319 00000 n +0001117369 00000 n +0001117419 00000 n +0001117469 00000 n +0001117519 00000 n +0001117569 00000 n +0001117619 00000 n +0001117669 00000 n +0001117719 00000 n +0001117769 00000 n +0001117819 00000 n +0001117869 00000 n +0001117919 00000 n +0001117969 00000 n +0001118019 00000 n +0001118069 00000 n +0001118119 00000 n +0001118169 00000 n +0001118219 00000 n +0001118269 00000 n +0001118319 00000 n +0001118369 00000 n +0001118419 00000 n +0001118469 00000 n +0001118519 00000 n +0001118569 00000 n +0001118619 00000 n +0001118669 00000 n +0001118719 00000 n +0001118769 00000 n +0001118819 00000 n +0001118869 00000 n +0001118919 00000 n +0001118969 00000 n +0001119019 00000 n +0001119069 00000 n +0001119119 00000 n +0001119169 00000 n +0001119219 00000 n +0001119269 00000 n +0001119319 00000 n +0001119369 00000 n +0001119419 00000 n +0001119469 00000 n +0001119519 00000 n +0001119569 00000 n +0001119619 00000 n +0001119669 00000 n +0001119719 00000 n +0001119769 00000 n +0001119819 00000 n +0001119869 00000 n +0001119919 00000 n +0001119969 00000 n +0001120019 00000 n +0001120069 00000 n +0001120119 00000 n +0001120169 00000 n +0001120219 00000 n +0001120269 00000 n +0001120319 00000 n +0001120369 00000 n +0001120419 00000 n +0001120469 00000 n +0001120519 00000 n +0001120569 00000 n +0001120619 00000 n +0001120669 00000 n +0001120719 00000 n +0001120769 00000 n +0001120819 00000 n +0001120869 00000 n +0001120919 00000 n +0001120969 00000 n +0001121019 00000 n +0001121069 00000 n +0001121119 00000 n +0001121169 00000 n +0001121219 00000 n +0001121269 00000 n +0001121319 00000 n +0001121369 00000 n +0001121419 00000 n +0001121469 00000 n +0001121519 00000 n +0001121569 00000 n +0001121619 00000 n +0001121669 00000 n +0001121719 00000 n +0001121769 00000 n +0001121819 00000 n +0001121869 00000 n +0001121919 00000 n +0001121969 00000 n +0001122019 00000 n +0001122069 00000 n +0001122119 00000 n +0001122169 00000 n +0001122219 00000 n +0001122269 00000 n +0001122319 00000 n +0001122369 00000 n +0001122419 00000 n +0001122469 00000 n +0001122519 00000 n +0001122569 00000 n +0001122619 00000 n +0001122669 00000 n +0001122719 00000 n +0001122769 00000 n +0001122819 00000 n +0001122869 00000 n +0001122919 00000 n +0001122969 00000 n +0001123019 00000 n +0001123069 00000 n +0001123119 00000 n +0001123169 00000 n +0001123219 00000 n +0001123269 00000 n +0001123319 00000 n +0001123369 00000 n +0001123419 00000 n +0001123469 00000 n +0001123519 00000 n +0001123569 00000 n +0001123619 00000 n +0001123669 00000 n +0001123719 00000 n +0001123769 00000 n +0001123819 00000 n +0001123869 00000 n +0001123919 00000 n +0001123969 00000 n +0001124019 00000 n +0001124069 00000 n +0001124119 00000 n +0001124169 00000 n +0001124219 00000 n +0001124269 00000 n +0001124319 00000 n +0001124369 00000 n +0001124419 00000 n +0001124469 00000 n +0001124519 00000 n +0001124569 00000 n +0001124619 00000 n +0001124669 00000 n +0001124719 00000 n +0001124769 00000 n +0001124819 00000 n +0001124869 00000 n +0001124919 00000 n +0001124969 00000 n +0001125019 00000 n +0001125069 00000 n +0001125119 00000 n +0001125169 00000 n +0001125218 00000 n +0001125267 00000 n +0001125316 00000 n +0001125365 00000 n +0001125415 00000 n +0001125465 00000 n +0001125515 00000 n +0001125565 00000 n +0001125615 00000 n +0001125665 00000 n +0001125715 00000 n +0001125765 00000 n +0001125815 00000 n +0001125865 00000 n +0001125915 00000 n +0001125965 00000 n +0001126015 00000 n +0001126065 00000 n +0001126115 00000 n +0001126165 00000 n +0001126215 00000 n +0001126265 00000 n +0001126315 00000 n +0001126365 00000 n +0001126415 00000 n +0001126465 00000 n +0001126515 00000 n +0001126565 00000 n +0001126615 00000 n +0001126665 00000 n +0001126715 00000 n +0001126765 00000 n +0001126815 00000 n +0001126865 00000 n +0001126915 00000 n +0001126965 00000 n +0001127015 00000 n +0001127065 00000 n +0001127115 00000 n +0001127165 00000 n +0001127215 00000 n +0001127265 00000 n +0001127315 00000 n +0001127365 00000 n +0001127415 00000 n +0001127465 00000 n +0001127515 00000 n +0001127565 00000 n +0001127615 00000 n +0001127665 00000 n +0001127715 00000 n +0001127765 00000 n +0001127815 00000 n +0001127865 00000 n +0001127915 00000 n +0001127965 00000 n +0001128015 00000 n +0001128065 00000 n +0001128115 00000 n +0001128165 00000 n +0001128215 00000 n +0001128265 00000 n +0001128315 00000 n +0001128365 00000 n +0001128414 00000 n +0001128463 00000 n +0001128512 00000 n +0001128561 00000 n +0001128610 00000 n +0001128659 00000 n +0001128708 00000 n +0001128757 00000 n +0001128806 00000 n +0001128855 00000 n +0001128904 00000 n +0001128953 00000 n +0001129002 00000 n +0001129051 00000 n +0001129100 00000 n +0001129149 00000 n +0001129198 00000 n +0001129247 00000 n +0001129296 00000 n +0001129345 00000 n +0001129394 00000 n +0001129443 00000 n +0001129492 00000 n +0001129541 00000 n +0001129590 00000 n +0001129639 00000 n +0001129688 00000 n +0001129737 00000 n +0001129786 00000 n +0001129835 00000 n +0001129884 00000 n +0001129933 00000 n +0001129982 00000 n +0001130031 00000 n +0001130080 00000 n +0001130129 00000 n +0001130178 00000 n +0001130227 00000 n +0001130276 00000 n +0001130325 00000 n +0001130374 00000 n +0001130423 00000 n +0001130472 00000 n +0001130521 00000 n +0001130570 00000 n +0001130619 00000 n +0001130668 00000 n +0001130717 00000 n +0001130766 00000 n +0001130815 00000 n +0001130864 00000 n +0001130913 00000 n +0001130962 00000 n +0001131011 00000 n +0001131060 00000 n +0001131109 00000 n +0001131158 00000 n +0001131207 00000 n +0001131256 00000 n +0001131305 00000 n +0001131354 00000 n +0001131403 00000 n +0001131452 00000 n +0001131501 00000 n +0001131552 00000 n +0001131603 00000 n +0001131654 00000 n +0001131705 00000 n +0001131756 00000 n +0001131807 00000 n +0001131858 00000 n +0001131909 00000 n +0001131960 00000 n +0001132011 00000 n +0001132062 00000 n +0001132113 00000 n +0001132164 00000 n +0001132215 00000 n +0001132266 00000 n +0001132317 00000 n +0001132368 00000 n +0001132419 00000 n +0001132470 00000 n +0001132521 00000 n +0001132572 00000 n +0001132623 00000 n +0001132674 00000 n +0001132724 00000 n +0001132774 00000 n +0001132825 00000 n +0001132876 00000 n +0001132926 00000 n +0001132976 00000 n +0001133026 00000 n +0001133077 00000 n +0001133128 00000 n +0001133178 00000 n +0001133228 00000 n +0001133278 00000 n +0001133326 00000 n +0001133374 00000 n +0001133422 00000 n +0001133470 00000 n +0001133518 00000 n +0001133566 00000 n +0001133614 00000 n +0001133662 00000 n +0001133710 00000 n +0001133758 00000 n +0001133806 00000 n +0001133854 00000 n +0001133902 00000 n +0001133950 00000 n +0001133998 00000 n +0001134046 00000 n +0001134094 00000 n +0001134142 00000 n +0001134190 00000 n +0001134238 00000 n +0001134286 00000 n +0001134334 00000 n +0001134382 00000 n +0001134430 00000 n +0001134478 00000 n +0001134526 00000 n +0001134574 00000 n +0001134622 00000 n +0001134671 00000 n +0001134722 00000 n +0001134773 00000 n +0001134824 00000 n +0001134875 00000 n +0001134926 00000 n +0001134977 00000 n +0001135028 00000 n +0001135079 00000 n +0001135130 00000 n +0001135181 00000 n +0001135232 00000 n +0001135283 00000 n +0001135334 00000 n +0001135385 00000 n +0001135436 00000 n +0001135487 00000 n +0001135538 00000 n +0001135589 00000 n +0001135640 00000 n +0001135691 00000 n +0001135742 00000 n +0001135793 00000 n +0001135844 00000 n +0001135895 00000 n +0001135946 00000 n +0001135997 00000 n +0001136048 00000 n +0001136099 00000 n +0001136150 00000 n +0001136201 00000 n +0001136252 00000 n +0001136303 00000 n +0001136354 00000 n +0001136405 00000 n +0001136456 00000 n +0001136507 00000 n +0001136558 00000 n +0001136609 00000 n +0001136660 00000 n +0001136711 00000 n +0001136762 00000 n +0001136813 00000 n +0001136864 00000 n +0001136915 00000 n +0001136966 00000 n +0001137017 00000 n +0001137068 00000 n +0001137119 00000 n +0001137170 00000 n +0001137221 00000 n +0001137272 00000 n +0001137323 00000 n +0001137374 00000 n +0001137425 00000 n +0001137476 00000 n +0001137527 00000 n +0001137578 00000 n +0001137629 00000 n +0001137680 00000 n +0001137731 00000 n +0001137782 00000 n +0001137833 00000 n +0001137884 00000 n +0001137935 00000 n +0001137986 00000 n +0001138037 00000 n +0001138088 00000 n +0001138139 00000 n +0001138190 00000 n +0001138241 00000 n +0001138292 00000 n +0001138343 00000 n +0001138394 00000 n +0001138445 00000 n +0001138496 00000 n +0001138547 00000 n +0001138598 00000 n +0001138649 00000 n +0001138700 00000 n +0001138751 00000 n +0001138802 00000 n +0001138853 00000 n +0001138904 00000 n +0001138955 00000 n +0001139006 00000 n +0001139057 00000 n +0001139108 00000 n +0001139159 00000 n +0001139210 00000 n +0001139261 00000 n +0001139312 00000 n +0001139363 00000 n +0001139414 00000 n +0001139465 00000 n +0001139516 00000 n +0001139567 00000 n +0001139618 00000 n +0001139669 00000 n +0001139720 00000 n +0001139771 00000 n +0001139822 00000 n +0001139873 00000 n +0001139924 00000 n +0001139975 00000 n +0001140026 00000 n +0001140077 00000 n +0001140128 00000 n +0001140179 00000 n +0001140230 00000 n +0001140281 00000 n +0001140332 00000 n +0001140383 00000 n +0001140434 00000 n +0001140485 00000 n +0001140536 00000 n +0001140587 00000 n +0001140638 00000 n +0001140689 00000 n +0001140740 00000 n +0001140791 00000 n +0001140842 00000 n +0001140893 00000 n +0001140944 00000 n +0001140995 00000 n +0001141046 00000 n +0001141097 00000 n +0001141148 00000 n +0001141199 00000 n +0001141250 00000 n +0001141301 00000 n +0001141352 00000 n +0001141403 00000 n +0001141454 00000 n +0001141505 00000 n +0001141556 00000 n +0001141607 00000 n +0001141658 00000 n +0001141709 00000 n +0001141760 00000 n +0001141811 00000 n +0001141862 00000 n +0001141913 00000 n +0001141964 00000 n +0001142015 00000 n +0001142066 00000 n +0001142117 00000 n +0001142168 00000 n +0001142219 00000 n +0001142270 00000 n +0001142321 00000 n +0001142372 00000 n +0001142423 00000 n +0001142474 00000 n +0001142525 00000 n +0001142576 00000 n +0001142627 00000 n +0001142678 00000 n +0001142729 00000 n +0001142780 00000 n +0001142831 00000 n +0001142882 00000 n +0001142933 00000 n +0001142984 00000 n +0001143035 00000 n +0001143086 00000 n +0001143137 00000 n +0001143188 00000 n +0001143239 00000 n +0001143290 00000 n +0001143341 00000 n +0001143392 00000 n +0001143443 00000 n +0001143494 00000 n +0001143545 00000 n +0001143596 00000 n +0001143647 00000 n +0001143698 00000 n +0001143749 00000 n +0001143800 00000 n +0001143851 00000 n +0001143902 00000 n +0001143953 00000 n +0001144004 00000 n +0001144055 00000 n +0001144106 00000 n +0001144157 00000 n +0001144208 00000 n +0001144259 00000 n +0001144310 00000 n +0001144361 00000 n +0001144412 00000 n +0001144463 00000 n +0001144514 00000 n +0001144565 00000 n +0001144616 00000 n +0001144667 00000 n +0001144718 00000 n +0001144769 00000 n +0001144820 00000 n +0001144871 00000 n +0001144922 00000 n +0001144973 00000 n +0001145024 00000 n +0001145075 00000 n +0001145126 00000 n +0001145177 00000 n +0001145228 00000 n +0001145279 00000 n +0001145330 00000 n +0001145381 00000 n +0001145432 00000 n +0001145483 00000 n +0001145534 00000 n +0001145585 00000 n +0001145636 00000 n +0001145687 00000 n +0001145738 00000 n +0001145789 00000 n +0001145840 00000 n +0001145891 00000 n +0001145942 00000 n +0001145993 00000 n +0001146044 00000 n +0001146095 00000 n +0001146146 00000 n +0001146197 00000 n +0001146248 00000 n +0001146299 00000 n +0001146350 00000 n +0001146401 00000 n +0001146452 00000 n +0001146503 00000 n +0001146554 00000 n +0001146605 00000 n +0001146656 00000 n +0001146707 00000 n +0001146758 00000 n +0001146809 00000 n +0001146860 00000 n +0001146911 00000 n +0001146962 00000 n +0001147013 00000 n +0001147064 00000 n +0001147115 00000 n +0001147166 00000 n +0001147217 00000 n +0001147268 00000 n +0001147319 00000 n +0001147370 00000 n +0001147421 00000 n +0001147472 00000 n +0001147523 00000 n +0001147574 00000 n +0001147625 00000 n +0001147676 00000 n +0001147727 00000 n +0001147778 00000 n +0001147829 00000 n +0001147880 00000 n +0001147931 00000 n +0001147982 00000 n +0001148033 00000 n +0001148084 00000 n +0001148135 00000 n +0001148186 00000 n +0001148237 00000 n +0001148288 00000 n +0001148339 00000 n +0001148390 00000 n +0001148441 00000 n +0001148492 00000 n +0001148543 00000 n +0001148594 00000 n +0001148645 00000 n +0001148696 00000 n +0001148747 00000 n +0001148798 00000 n +0001148849 00000 n +0001148900 00000 n +0001148951 00000 n +0001149002 00000 n +0001149053 00000 n +0001149104 00000 n +0001149155 00000 n +0001149206 00000 n +0001149257 00000 n +0001149308 00000 n +0001149359 00000 n +0001149410 00000 n +0001149461 00000 n +0001149512 00000 n +0001149562 00000 n +0001149613 00000 n +0001149664 00000 n +0001149715 00000 n +0001149766 00000 n +0001149817 00000 n +0001149868 00000 n +0001149919 00000 n +0001149970 00000 n +0001150021 00000 n +0001150072 00000 n +0001150123 00000 n +0001150174 00000 n +0001150225 00000 n +0001150276 00000 n +0001150327 00000 n +0001150378 00000 n +0001150429 00000 n +0001150480 00000 n +0001150531 00000 n +0001150582 00000 n +0001150633 00000 n +0001150684 00000 n +0001150735 00000 n +0001150786 00000 n +0001150837 00000 n +0001150888 00000 n +0001150939 00000 n +0001150990 00000 n +0001151041 00000 n +0001151092 00000 n +0001151143 00000 n +0001151194 00000 n +0001151245 00000 n +0001151296 00000 n +0001151347 00000 n +0001151398 00000 n +0001151449 00000 n +0001151500 00000 n +0001151551 00000 n +0001151602 00000 n +0001151653 00000 n +0001151704 00000 n +0001151755 00000 n +0001151806 00000 n +0001151857 00000 n +0001151908 00000 n +0001151959 00000 n +0001152010 00000 n +0001152061 00000 n +0001152112 00000 n +0001152163 00000 n +0001152214 00000 n +0001152265 00000 n +0001152316 00000 n +0001152367 00000 n +0001152418 00000 n +0001152469 00000 n +0001152520 00000 n +0001152571 00000 n +0001152622 00000 n +0001152673 00000 n +0001152724 00000 n +0001152775 00000 n +0001152826 00000 n +0001152877 00000 n +0001152928 00000 n +0001152979 00000 n +0001153030 00000 n +0001153081 00000 n +0001153132 00000 n +0001153183 00000 n +0001153234 00000 n +0001153285 00000 n +0001153336 00000 n +0001153387 00000 n +0001153438 00000 n +0001153489 00000 n +0001153540 00000 n +0001153591 00000 n +0001153642 00000 n +0001153693 00000 n +0001153744 00000 n +0001153795 00000 n +0001153846 00000 n +0001153897 00000 n +0001153948 00000 n +0001153999 00000 n +0001154050 00000 n +0001154101 00000 n +0001154152 00000 n +0001154203 00000 n +0001154254 00000 n +0001154305 00000 n +0001154356 00000 n +0001154407 00000 n +0001154458 00000 n +0001154509 00000 n +0001154560 00000 n +0001154611 00000 n +0001154662 00000 n +0001154713 00000 n +0001154764 00000 n +0001154815 00000 n +0001154866 00000 n +0001154917 00000 n +0001154968 00000 n +0001155019 00000 n +0001155070 00000 n +0001155121 00000 n +0001155172 00000 n +0001155223 00000 n +0001155274 00000 n +0001155325 00000 n +0001155376 00000 n +0001155427 00000 n +0001155478 00000 n +0001155529 00000 n +0001155580 00000 n +0001155631 00000 n +0001155682 00000 n +0001155733 00000 n +0001155784 00000 n +0001155835 00000 n +0001155886 00000 n +0001155937 00000 n +0001155988 00000 n +0001156039 00000 n +0001156090 00000 n +0001156141 00000 n +0001156192 00000 n +0001156243 00000 n +0001156294 00000 n +0001156345 00000 n +0001156396 00000 n +0001156447 00000 n +0001156498 00000 n +0001156549 00000 n +0001156600 00000 n +0001156651 00000 n +0001156701 00000 n +0001156752 00000 n +0001156803 00000 n +0001156854 00000 n +0001156905 00000 n +0001156956 00000 n +0001157007 00000 n +0001157058 00000 n +0001157109 00000 n +0001157160 00000 n +0001157211 00000 n +0001157262 00000 n +0001157313 00000 n +0001157364 00000 n +0001157415 00000 n +0001157466 00000 n +0001157517 00000 n +0001157568 00000 n +0001157619 00000 n +0001157670 00000 n +0001157721 00000 n +0001157772 00000 n +0001157823 00000 n +0001157874 00000 n +0001157925 00000 n +0001157976 00000 n +0001158027 00000 n +0001158078 00000 n +0001158129 00000 n +0001158180 00000 n +0001158231 00000 n +0001158282 00000 n +0001158333 00000 n +0001158384 00000 n +0001158435 00000 n +0001158486 00000 n +0001158537 00000 n +0001158588 00000 n +0001158638 00000 n +0001158689 00000 n +0001158740 00000 n +0001158791 00000 n +0001158842 00000 n +0001158893 00000 n +0001158944 00000 n +0001158995 00000 n +0001159046 00000 n +0001159097 00000 n +0001159148 00000 n +0001159199 00000 n +0001159250 00000 n +0001159301 00000 n +0001159352 00000 n +0001159403 00000 n +0001159454 00000 n +0001159505 00000 n +0001159556 00000 n +0001159607 00000 n +0001159658 00000 n +0001159709 00000 n +0001159760 00000 n +0001159811 00000 n +0001159862 00000 n +0001159913 00000 n +0001159964 00000 n +0001160015 00000 n +0001160066 00000 n +0001160117 00000 n +0001160168 00000 n +0001160219 00000 n +0001160270 00000 n +0001160321 00000 n +0001160372 00000 n +0001160423 00000 n +0001160474 00000 n +0001160525 00000 n +0001160576 00000 n +0001160627 00000 n +0001160678 00000 n +0001160729 00000 n +0001160780 00000 n +0001160831 00000 n +0001160882 00000 n +0001160933 00000 n +0001160984 00000 n +0001161035 00000 n +0001161086 00000 n +0001161137 00000 n +0001161188 00000 n +0001161239 00000 n +0001161290 00000 n +0001161341 00000 n +0001161392 00000 n +0001161443 00000 n +0001161494 00000 n +0001161545 00000 n +0001161596 00000 n +0001161647 00000 n +0001161698 00000 n +0001161749 00000 n +0001161800 00000 n +0001161851 00000 n +0001161902 00000 n +0001161953 00000 n +0001162004 00000 n +0001162055 00000 n +0001162106 00000 n +0001162157 00000 n +0001162208 00000 n +0001162259 00000 n +0001162310 00000 n +0001162361 00000 n +0001162412 00000 n +0001162463 00000 n +0001162514 00000 n +0001162565 00000 n +0001162616 00000 n +0001162667 00000 n +0001162718 00000 n +0001162769 00000 n +0001162820 00000 n +0001162871 00000 n +0001162922 00000 n +0001162973 00000 n +0001163024 00000 n +0001163075 00000 n +0001163126 00000 n +0001163177 00000 n +0001163228 00000 n +0001163279 00000 n +0001163330 00000 n +0001163381 00000 n +0001163432 00000 n +0001163483 00000 n +0001163534 00000 n +0001163585 00000 n +0001163636 00000 n +0001163687 00000 n +0001163738 00000 n +0001163789 00000 n +0001163840 00000 n +0001163891 00000 n +0001163942 00000 n +0001163993 00000 n +0001164044 00000 n +0001164095 00000 n +0001164146 00000 n +0001164197 00000 n +0001164248 00000 n +0001164299 00000 n +0001164350 00000 n +0001164401 00000 n +0001164452 00000 n +0001164503 00000 n +0001164554 00000 n +0001164605 00000 n +0001164655 00000 n +0001164706 00000 n +0001164757 00000 n +0001164807 00000 n +0001164858 00000 n +0001164909 00000 n +0001164960 00000 n +0001165011 00000 n +0001165062 00000 n +0001165113 00000 n +0001165164 00000 n +0001165215 00000 n +0001165266 00000 n +0001165317 00000 n +0001165368 00000 n +0001165419 00000 n +0001165470 00000 n +0001165521 00000 n +0001165572 00000 n +0001165623 00000 n +0001165674 00000 n +0001165725 00000 n +0001165776 00000 n +0001165827 00000 n +0001165878 00000 n +0001165929 00000 n +0001165980 00000 n +0001166031 00000 n +0001166082 00000 n +0001166133 00000 n +0001166184 00000 n +0001166235 00000 n +0001166286 00000 n +0001166337 00000 n +0001166388 00000 n +0001166439 00000 n +0001166490 00000 n +0001166541 00000 n +0001166592 00000 n +0001166643 00000 n +0001166694 00000 n +0001166745 00000 n +0001166796 00000 n +0001166847 00000 n +0001166898 00000 n +0001166949 00000 n +0001167000 00000 n +0001167051 00000 n +0001167102 00000 n +0001167153 00000 n +0001167204 00000 n +0001167255 00000 n +0001167306 00000 n +0001167357 00000 n +0001167408 00000 n +0001167459 00000 n +0001167510 00000 n +0001167561 00000 n +0001167612 00000 n +0001167663 00000 n +0001167714 00000 n +0001167765 00000 n +0001167816 00000 n +0001167867 00000 n +0001167918 00000 n +0001167969 00000 n +0001168020 00000 n +0001168071 00000 n +0001168122 00000 n +0001168173 00000 n +0001168224 00000 n +0001168275 00000 n +0001168326 00000 n +0001168377 00000 n +0001168428 00000 n +0001168479 00000 n +0001168530 00000 n +0001168581 00000 n +0001168632 00000 n +0001168683 00000 n +0001168734 00000 n +0001168785 00000 n +0001168836 00000 n +0001168887 00000 n +0001168938 00000 n +0001168989 00000 n +0001169040 00000 n +0001169091 00000 n +0001169142 00000 n +0001169193 00000 n +0001169244 00000 n +0001169295 00000 n +0001169346 00000 n +0001169397 00000 n +0001169448 00000 n +0001169499 00000 n +0001169550 00000 n +0001169601 00000 n +0001169652 00000 n +0001169703 00000 n +0001169754 00000 n +0001169805 00000 n +0001169856 00000 n +0001169907 00000 n +0001169958 00000 n +0001170009 00000 n +0001170060 00000 n +0001170111 00000 n +0001170162 00000 n +0001170213 00000 n +0001170264 00000 n +0001170315 00000 n +0001170366 00000 n +0001170417 00000 n +0001170468 00000 n +0001170519 00000 n +0001170570 00000 n +0001170621 00000 n +0001170672 00000 n +0001170723 00000 n +0001170774 00000 n +0001170825 00000 n +0001170876 00000 n +0001170927 00000 n +0001170978 00000 n +0001171029 00000 n +0001171080 00000 n +0001171131 00000 n +0001171182 00000 n +0001171233 00000 n +0001171284 00000 n +0001171335 00000 n +0001171386 00000 n +0001171437 00000 n +0001171488 00000 n +0001171539 00000 n +0001171590 00000 n +0001171641 00000 n +0001171692 00000 n +0001171743 00000 n +0001171794 00000 n +0001171845 00000 n +0001171896 00000 n +0001171947 00000 n +0001171998 00000 n +0001172049 00000 n +0001172100 00000 n +0001172151 00000 n +0001172202 00000 n +0001172253 00000 n +0001172304 00000 n +0001172355 00000 n +0001172406 00000 n +0001172457 00000 n +0001172508 00000 n +0001172559 00000 n +0001172610 00000 n +0001172661 00000 n +0001172712 00000 n +0001172763 00000 n +0001172814 00000 n +0001172865 00000 n +0001172916 00000 n +0001172967 00000 n +0001173018 00000 n +0001173069 00000 n +0001173120 00000 n +0001173171 00000 n +0001173222 00000 n +0001173273 00000 n +0001173324 00000 n +0001173375 00000 n +0001173426 00000 n +0001173477 00000 n +0001173528 00000 n +0001173579 00000 n +0001173630 00000 n +0001173681 00000 n +0001173732 00000 n +0001173783 00000 n +0001173834 00000 n +0001173885 00000 n +0001173936 00000 n +0001173987 00000 n +0001174038 00000 n +0001174089 00000 n +0001174140 00000 n +0001174191 00000 n +0001174242 00000 n +0001174293 00000 n +0001174344 00000 n +0001174395 00000 n +0001174446 00000 n +0001174497 00000 n +0001174548 00000 n +0001174599 00000 n +0001174650 00000 n +0001174701 00000 n +0001174752 00000 n +0001174803 00000 n +0001174854 00000 n +0001174904 00000 n +0001174955 00000 n +0001175006 00000 n +0001175057 00000 n +0001175108 00000 n +0001175159 00000 n +0001175210 00000 n +0001175261 00000 n +0001175312 00000 n +0001175363 00000 n +0001175414 00000 n +0001175465 00000 n +0001175516 00000 n +0001175567 00000 n +0001175618 00000 n +0001175669 00000 n +0001175720 00000 n +0001175771 00000 n +0001175822 00000 n +0001175873 00000 n +0001175924 00000 n +0001175975 00000 n +0001176026 00000 n +0001176077 00000 n +0001176128 00000 n +0001176179 00000 n +0001176230 00000 n +0001176281 00000 n +0001176332 00000 n +0001176383 00000 n +0001176434 00000 n +0001176485 00000 n +0001176536 00000 n +0001176587 00000 n +0001176638 00000 n +0001176689 00000 n +0001176740 00000 n +0001176791 00000 n +0001176842 00000 n +0001176893 00000 n +0001176944 00000 n +0001176995 00000 n +0001177046 00000 n +0001177097 00000 n +0001177148 00000 n +0001177199 00000 n +0001177250 00000 n +0001177301 00000 n +0001177352 00000 n +0001177403 00000 n +0001177454 00000 n +0001177505 00000 n +0001177556 00000 n +0001177607 00000 n +0001177658 00000 n +0001177709 00000 n +0001177760 00000 n +0001177811 00000 n +0001177862 00000 n +0001177913 00000 n +0001177964 00000 n +0001178015 00000 n +0001178066 00000 n +0001178117 00000 n +0001178168 00000 n +0001178219 00000 n +0001178270 00000 n +0001178321 00000 n +0001178372 00000 n +0001178423 00000 n +0001178474 00000 n +0001178525 00000 n +0001178576 00000 n +0001178627 00000 n +0001178678 00000 n +0001178729 00000 n +0001178780 00000 n +0001178831 00000 n +0001178882 00000 n +0001178933 00000 n +0001178984 00000 n +0001179035 00000 n +0001179086 00000 n +0001179137 00000 n +0001179188 00000 n +0001179239 00000 n +0001179290 00000 n +0001179341 00000 n +0001179392 00000 n +0001179443 00000 n +0001179494 00000 n +0001179545 00000 n +0001179596 00000 n +0001179647 00000 n +0001179698 00000 n +0001179749 00000 n +0001179800 00000 n +0001179851 00000 n +0001179902 00000 n +0001179953 00000 n +0001180004 00000 n +0001180055 00000 n +0001180106 00000 n +0001180157 00000 n +0001180208 00000 n +0001180259 00000 n +0001180310 00000 n +0001180361 00000 n +0001180412 00000 n +0001180463 00000 n +0001180514 00000 n +0001180565 00000 n +0001180616 00000 n +0001180667 00000 n +0001180718 00000 n +0001180769 00000 n +0001180820 00000 n +0001180871 00000 n +0001180922 00000 n +0001180973 00000 n +0001181024 00000 n +0001181075 00000 n +0001181126 00000 n +0001181176 00000 n +0001181227 00000 n +0001181278 00000 n +0001181329 00000 n +0001181380 00000 n +0001181431 00000 n +0001181482 00000 n +0001181533 00000 n +0001181584 00000 n +0001181635 00000 n +0001181686 00000 n +0001181737 00000 n +0001181788 00000 n +0001181839 00000 n +0001181890 00000 n +0001181941 00000 n +0001181992 00000 n +0001182043 00000 n +0001182094 00000 n +0001182145 00000 n +0001182196 00000 n +0001182247 00000 n +0001182298 00000 n +0001182349 00000 n +0001182400 00000 n +0001182451 00000 n +0001182502 00000 n +0001182553 00000 n +0001182604 00000 n +0001182655 00000 n +0001182706 00000 n +0001182757 00000 n +0001182808 00000 n +0001182859 00000 n +0001182910 00000 n +0001182961 00000 n +0001183012 00000 n +0001183063 00000 n +0001183114 00000 n +0001183165 00000 n +0001183216 00000 n +0001183267 00000 n +0001183318 00000 n +0001183369 00000 n +0001183420 00000 n +0001183471 00000 n +0001183522 00000 n +0001183573 00000 n +0001183624 00000 n +0001183675 00000 n +0001183726 00000 n +0001183777 00000 n +0001183828 00000 n +0001183879 00000 n +0001183930 00000 n +0001183981 00000 n +0001184032 00000 n +0001184083 00000 n +0001184134 00000 n +0001184185 00000 n +0001184236 00000 n +0001184287 00000 n +0001184338 00000 n +0001184389 00000 n +0001184440 00000 n +0001184491 00000 n +0001184542 00000 n +0001184593 00000 n +0001184644 00000 n +0001184695 00000 n +0001184746 00000 n +0001184797 00000 n +0001184848 00000 n +0001184899 00000 n +0001184950 00000 n +0001185001 00000 n +0001185052 00000 n +0001185103 00000 n +0001185154 00000 n +0001185205 00000 n +0001185256 00000 n +0001185307 00000 n +0001185358 00000 n +0001185409 00000 n +0001185460 00000 n +0001185511 00000 n +0001185562 00000 n +0001185613 00000 n +0001185664 00000 n +0001185715 00000 n +0001185766 00000 n +0001185817 00000 n +0001185868 00000 n +0001185919 00000 n +0001185970 00000 n +0001186021 00000 n +0001186072 00000 n +0001186123 00000 n +0001186174 00000 n +0001186225 00000 n +0001186276 00000 n +0001186327 00000 n +0001186378 00000 n +0001186429 00000 n +0001186480 00000 n +0001186531 00000 n +0001186582 00000 n +0001186633 00000 n +0001186684 00000 n +0001186735 00000 n +0001186786 00000 n +0001186837 00000 n +0001186888 00000 n +0001186939 00000 n +0001186990 00000 n +0001187041 00000 n +0001187092 00000 n +0001187143 00000 n +0001187194 00000 n +0001187245 00000 n +0001187296 00000 n +0001187347 00000 n +0001187398 00000 n +0001187449 00000 n +0001187500 00000 n +0001187551 00000 n +0001187602 00000 n +0001187653 00000 n +0001187704 00000 n +0001187755 00000 n +0001187806 00000 n +0001187857 00000 n +0001187908 00000 n +0001187959 00000 n +0001188010 00000 n +0001188061 00000 n +0001188112 00000 n +0001188163 00000 n +0001188214 00000 n +0001188265 00000 n +0001188316 00000 n +0001188367 00000 n +0001188418 00000 n +0001188469 00000 n +0001188520 00000 n +0001188571 00000 n +0001188622 00000 n +0001188673 00000 n +0001188724 00000 n +0001188775 00000 n +0001188826 00000 n +0001188877 00000 n +0001188928 00000 n +0001188979 00000 n +0001189030 00000 n +0001189081 00000 n +0001189132 00000 n +0001189183 00000 n +0001189234 00000 n +0001189285 00000 n +0001189336 00000 n +0001189387 00000 n +0001189438 00000 n +0001189489 00000 n +0001189540 00000 n +0001189591 00000 n +0001189642 00000 n +0001189693 00000 n +0001189744 00000 n +0001189795 00000 n +0001189846 00000 n +0001189897 00000 n +0001189948 00000 n +0001189999 00000 n +0001190050 00000 n +0001190101 00000 n +0001190152 00000 n +0001190203 00000 n +0001190254 00000 n +0001190305 00000 n +0001190356 00000 n +0001190407 00000 n +0001190458 00000 n +0001190509 00000 n +0001190560 00000 n +0001190611 00000 n +0001190662 00000 n +0001190713 00000 n +0001190764 00000 n +0001190815 00000 n +0001190866 00000 n +0001190917 00000 n +0001190968 00000 n +0001191019 00000 n +0001191070 00000 n +0001191121 00000 n +0001191172 00000 n +0001191223 00000 n +0001191274 00000 n +0001191325 00000 n +0001191376 00000 n +0001191426 00000 n +0001191477 00000 n +0001191528 00000 n +0001191579 00000 n +0001191630 00000 n +0001191681 00000 n +0001191732 00000 n +0001191783 00000 n +0001191834 00000 n +0001191885 00000 n +0001191936 00000 n +0001191987 00000 n +0001192038 00000 n +0001192089 00000 n +0001192140 00000 n +0001192191 00000 n +0001192242 00000 n +0001192293 00000 n +0001192344 00000 n +0001192395 00000 n +0001192446 00000 n +0001192497 00000 n +0001192548 00000 n +0001192599 00000 n +0001192650 00000 n +0001192701 00000 n +0001192752 00000 n +0001192803 00000 n +0001192854 00000 n +0001192905 00000 n +0001192956 00000 n +0001193007 00000 n +0001193058 00000 n +0001193109 00000 n +0001193160 00000 n +0001193211 00000 n +0001193262 00000 n +0001193313 00000 n +0001193364 00000 n +0001193415 00000 n +0001193466 00000 n +0001193517 00000 n +0001193568 00000 n +0001193619 00000 n +0001193670 00000 n +0001193721 00000 n +0001193772 00000 n +0001193823 00000 n +0001193874 00000 n +0001193925 00000 n +0001193976 00000 n +0001194027 00000 n +0001194078 00000 n +0001194129 00000 n +0001194180 00000 n +0001194231 00000 n +0001194282 00000 n +0001194333 00000 n +0001194384 00000 n +0001194435 00000 n +0001194486 00000 n +0001194537 00000 n +0001194588 00000 n +0001194639 00000 n +0001194690 00000 n +0001194741 00000 n +0001194792 00000 n +0001194843 00000 n +0001194894 00000 n +0001194945 00000 n +0001194996 00000 n +0001195047 00000 n +0001195098 00000 n +0001195149 00000 n +0001195200 00000 n +0001195251 00000 n +0001195302 00000 n +0001195353 00000 n +0001195404 00000 n +0001195455 00000 n +0001195506 00000 n +0001195557 00000 n +0001195608 00000 n +0001195659 00000 n +0001195710 00000 n +0001195761 00000 n +0001195812 00000 n +0001195863 00000 n +0001195914 00000 n +0001195965 00000 n +0001196016 00000 n +0001196067 00000 n +0001196118 00000 n +0001196169 00000 n +0001196220 00000 n +0001196271 00000 n +0001196322 00000 n +0001196373 00000 n +0001196424 00000 n +0001196475 00000 n +0001196526 00000 n +0001196577 00000 n +0001196628 00000 n +0001196679 00000 n +0001196730 00000 n +0001196781 00000 n +0001196832 00000 n +0001196883 00000 n +0001196934 00000 n +0001196985 00000 n +0001197036 00000 n +0001197087 00000 n +0001197138 00000 n +0001197189 00000 n +0001197240 00000 n +0001197291 00000 n +0001197342 00000 n +0001197393 00000 n +0001197444 00000 n +0001197495 00000 n +0001197546 00000 n +0001197597 00000 n +0001197648 00000 n +0001197699 00000 n +0001197750 00000 n +0001197801 00000 n +0001197852 00000 n +0001197903 00000 n +0001197954 00000 n +0001198005 00000 n +0001198056 00000 n +0001198107 00000 n +0001198158 00000 n +0001198209 00000 n +0001198260 00000 n +0001198311 00000 n +0001198362 00000 n +0001198413 00000 n +0001198463 00000 n +0001198513 00000 n +0001198564 00000 n +0001198615 00000 n +0001198666 00000 n +0001198717 00000 n +0001198768 00000 n +0001198819 00000 n +0001198870 00000 n +0001198921 00000 n +0001198970 00000 n +0001199021 00000 n +0001199072 00000 n +0001199123 00000 n +0001199174 00000 n +0001199225 00000 n +0001199276 00000 n +0001199327 00000 n +0001199378 00000 n +0001199429 00000 n +0001199480 00000 n +0001199531 00000 n +0001199582 00000 n +0001199633 00000 n +0001199684 00000 n +0001199735 00000 n +0001199786 00000 n +0001199837 00000 n +0001199888 00000 n +0001199939 00000 n +0001199990 00000 n +0001200041 00000 n +0001200092 00000 n +0001200143 00000 n +0001200194 00000 n +0001200245 00000 n +0001200296 00000 n +0001200347 00000 n +0001200398 00000 n +0001200449 00000 n +0001200500 00000 n +0001200550 00000 n +0001200600 00000 n +0001200651 00000 n +0001200702 00000 n +0001200753 00000 n +0001200804 00000 n +0001200855 00000 n +0001200906 00000 n +0001200957 00000 n +0001201008 00000 n +0001201059 00000 n +0001201110 00000 n +0001201161 00000 n +0001201212 00000 n +0001201263 00000 n +0001201314 00000 n +0001201365 00000 n +0001201416 00000 n +0001201467 00000 n +0001201518 00000 n +0001201569 00000 n +0001201620 00000 n +0001201671 00000 n +0001201722 00000 n +0001201773 00000 n +0001201824 00000 n +0001201875 00000 n +0001201926 00000 n +0001201977 00000 n +0001202028 00000 n +0001202079 00000 n +0001202130 00000 n +0001202181 00000 n +0001202232 00000 n +0001202283 00000 n +0001202334 00000 n +0001202385 00000 n +0001202436 00000 n +0001202487 00000 n +0001202538 00000 n +0001202589 00000 n +0001202640 00000 n +0001202691 00000 n +0001202742 00000 n +0001202793 00000 n +0001202844 00000 n +0001202895 00000 n +0001202946 00000 n +0001202997 00000 n +0001203048 00000 n +0001203099 00000 n +0001203150 00000 n +0001203201 00000 n +0001203251 00000 n +0001203301 00000 n +0001203351 00000 n +0001203401 00000 n +0001203451 00000 n +0001203501 00000 n +0001203551 00000 n +0001203601 00000 n +0001203651 00000 n +0001203701 00000 n +0001203751 00000 n +0001203801 00000 n +0001203851 00000 n +0001203901 00000 n +0001203951 00000 n +0001204001 00000 n +0001204051 00000 n +0001204101 00000 n +0001204151 00000 n +0001204201 00000 n +0001204251 00000 n +0001204302 00000 n +0001204353 00000 n +0001204404 00000 n +0001204455 00000 n +0001204506 00000 n +0001204557 00000 n +0001204608 00000 n +0001204659 00000 n +0001204710 00000 n +0001204761 00000 n +0001204812 00000 n +0001204863 00000 n +0001204914 00000 n +0001204965 00000 n +0001205016 00000 n +0001205067 00000 n +0001205118 00000 n +0001205169 00000 n +0001205220 00000 n +0001205271 00000 n +0001205322 00000 n +0001205373 00000 n +0001205424 00000 n +0001205475 00000 n +0001205526 00000 n +0001205577 00000 n +0001205628 00000 n +0001205679 00000 n +0001205730 00000 n +0001205781 00000 n +0001205832 00000 n +0001205883 00000 n +0001205934 00000 n +0001205985 00000 n +0001206036 00000 n +0001206087 00000 n +0001206138 00000 n +0001206189 00000 n +0001206240 00000 n +0001206291 00000 n +0001206342 00000 n +0001206393 00000 n +0001206444 00000 n +0001206494 00000 n +0001206544 00000 n +0001206594 00000 n +0001206644 00000 n +0001206694 00000 n +0001206744 00000 n +0001206794 00000 n +0001206844 00000 n +0001206894 00000 n +0001206944 00000 n +0001206994 00000 n +0001207044 00000 n +0001207094 00000 n +0001207144 00000 n +0001207194 00000 n +0001207244 00000 n +0001207294 00000 n +0001207344 00000 n +0001207394 00000 n +0001207444 00000 n +0001207494 00000 n +0001207544 00000 n +0001207594 00000 n +0001207644 00000 n +0001207694 00000 n +0001207744 00000 n +0001207794 00000 n +0001207844 00000 n +0001207894 00000 n +0001207944 00000 n +0001207994 00000 n +0001208044 00000 n +0001208094 00000 n +0001208144 00000 n +0001208194 00000 n +0001208244 00000 n +0001208294 00000 n +0001208344 00000 n +0001208394 00000 n +0001208444 00000 n +0001208494 00000 n +0001208544 00000 n +0001208594 00000 n +0001208644 00000 n +0001208694 00000 n +0001208744 00000 n +0001208794 00000 n +0001208844 00000 n +0001208894 00000 n +0001208944 00000 n +0001208994 00000 n +0001209044 00000 n +0001209094 00000 n +0001209144 00000 n +0001209194 00000 n +0001209244 00000 n +0001209294 00000 n +0001209344 00000 n +0001209394 00000 n +0001209444 00000 n +0001209494 00000 n +0001209544 00000 n +0001209594 00000 n +0001209644 00000 n +0001209694 00000 n +0001209744 00000 n +0001209794 00000 n +0001209844 00000 n +0001209894 00000 n +0001209944 00000 n +0001209994 00000 n +0001210044 00000 n +0001210094 00000 n +0001210144 00000 n +0001210194 00000 n +0001210244 00000 n +0001210294 00000 n +0001210344 00000 n +0001210394 00000 n +0001210444 00000 n +0001210494 00000 n +0001210544 00000 n +0001210594 00000 n +0001210644 00000 n +0001210694 00000 n +0001210744 00000 n +0001210794 00000 n +0001210844 00000 n +0001210894 00000 n +0001210944 00000 n +0001210994 00000 n +0001211044 00000 n +0001211094 00000 n +0001211144 00000 n +0001211194 00000 n +0001211244 00000 n +0001211294 00000 n +0001211344 00000 n +0001211394 00000 n +0001211444 00000 n +0001211494 00000 n +0001211544 00000 n +0001211594 00000 n +0001211644 00000 n +0001211694 00000 n +0001211744 00000 n +0001211794 00000 n +0001211844 00000 n +0001211894 00000 n +0001211944 00000 n +0001211994 00000 n +0001212044 00000 n +0001212094 00000 n +0001212145 00000 n +0001212195 00000 n +0001212245 00000 n +0001212295 00000 n +0001212346 00000 n +0001212396 00000 n +0001212446 00000 n +0001212496 00000 n +0001212546 00000 n +0001212596 00000 n +0001212646 00000 n +0001212696 00000 n +0001212746 00000 n +0001212796 00000 n +0001212846 00000 n +0001212896 00000 n +0001212946 00000 n +0001212996 00000 n +0001213046 00000 n +0001213096 00000 n +0001213146 00000 n +0001213196 00000 n +0001213246 00000 n +0001213296 00000 n +0001213346 00000 n +0001213396 00000 n +0001213446 00000 n +0001213496 00000 n +0001213546 00000 n +0001213596 00000 n +0001213646 00000 n +0001213696 00000 n +0001213746 00000 n +0001213796 00000 n +0001213846 00000 n +0001213896 00000 n +0001213946 00000 n +0001213996 00000 n +0001214046 00000 n +0001214096 00000 n +0001214146 00000 n +0001214196 00000 n +0001214246 00000 n +0001214296 00000 n +0001214346 00000 n +0001214396 00000 n +0001214446 00000 n +0001214496 00000 n +0001214546 00000 n +0001214596 00000 n +0001214646 00000 n +0001214696 00000 n +0001214746 00000 n +0001214796 00000 n +0001214846 00000 n +0001214896 00000 n +0001214946 00000 n +0001214996 00000 n +0001215046 00000 n +0001215096 00000 n +0001215146 00000 n +0001215196 00000 n +0001215246 00000 n +0001215296 00000 n +0001215346 00000 n +0001215396 00000 n +0001215446 00000 n +0001215496 00000 n +0001215546 00000 n +0001215596 00000 n +0001215646 00000 n +0001215696 00000 n +0001215746 00000 n +0001215796 00000 n +0001215846 00000 n +0001215896 00000 n +0001215946 00000 n +0001215996 00000 n +0001216046 00000 n +0001216096 00000 n +0001216146 00000 n +0001216196 00000 n +0001216246 00000 n +0001216296 00000 n +0001216346 00000 n +0001216396 00000 n +0001216446 00000 n +0001216496 00000 n +0001216546 00000 n +0001216596 00000 n +0001216646 00000 n +0001216696 00000 n +0001216746 00000 n +0001216796 00000 n +0001216846 00000 n +0001216896 00000 n +0001216946 00000 n +0001216996 00000 n +0001217046 00000 n +0001217096 00000 n +0001217146 00000 n +0001217196 00000 n +0001217246 00000 n +0001217296 00000 n +0001217346 00000 n +0001217396 00000 n +0001217446 00000 n +0001217496 00000 n +0001217546 00000 n +0001217596 00000 n +0001217646 00000 n +0001217696 00000 n +0001217746 00000 n +0001217796 00000 n +0001217846 00000 n +0001217896 00000 n +0001217946 00000 n +0001217996 00000 n +0001218046 00000 n +0001218096 00000 n +0001218146 00000 n +0001218196 00000 n +0001218246 00000 n +0001218296 00000 n +0001218346 00000 n +0001218396 00000 n +0001218446 00000 n +0001218496 00000 n +0001218546 00000 n +0001218596 00000 n +0001218646 00000 n +0001218696 00000 n +0001218746 00000 n +0001218796 00000 n +0001218846 00000 n +0001218896 00000 n +0001218946 00000 n +0001218996 00000 n +0001219046 00000 n +0001219096 00000 n +0001219146 00000 n +0001219196 00000 n +0001219246 00000 n +0001219300 00000 n +0001219354 00000 n +0001219408 00000 n +0001219462 00000 n +0001219513 00000 n +0001219566 00000 n +0001219619 00000 n +0001219672 00000 n +0001219725 00000 n +0001219778 00000 n +0001219831 00000 n +0001219884 00000 n +0001219935 00000 n +0001219986 00000 n +0001220037 00000 n +0001220088 00000 n +0001220139 00000 n +0001220190 00000 n +0001220241 00000 n +0001220292 00000 n +0001220343 00000 n +0001220394 00000 n +0001220445 00000 n +0001220496 00000 n +0001220547 00000 n +0001220595 00000 n +0001220645 00000 n +0001220695 00000 n +0001220745 00000 n +0001220795 00000 n +0001220845 00000 n +0001220895 00000 n +0001220945 00000 n +0001220995 00000 n +0001221045 00000 n +0001221095 00000 n +0001221145 00000 n +0001221195 00000 n +0001221245 00000 n +0001221295 00000 n +0001221345 00000 n +0001221395 00000 n +0001221445 00000 n +0001221495 00000 n +0001221545 00000 n +0001221595 00000 n +0001221645 00000 n +0001221695 00000 n +0001221745 00000 n +0001221795 00000 n +0001221845 00000 n +0001221895 00000 n +0001221945 00000 n +0001221995 00000 n +0001222045 00000 n +0001222095 00000 n +0001222145 00000 n +0001222195 00000 n +0001222245 00000 n +0001222295 00000 n +0001222345 00000 n +0001222395 00000 n +0001222445 00000 n +0001222495 00000 n +0001222535 00000 n +0001222562 00000 n +0001222648 00000 n +0001222804 00000 n +0001222944 00000 n +0001223089 00000 n +0001223234 00000 n +0001223379 00000 n +0001223524 00000 n +0001223669 00000 n +0001223814 00000 n +0001223959 00000 n +0001224104 00000 n +0001224249 00000 n +0001224405 00000 n +0001224558 00000 n +0001224713 00000 n +0001224868 00000 n +0001225023 00000 n +0001225178 00000 n +0001225333 00000 n +0001225488 00000 n +0001225643 00000 n +0001225798 00000 n +0001225953 00000 n +0001226109 00000 n +0001226264 00000 n +0001226419 00000 n +0001226574 00000 n +0001226729 00000 n +0001226884 00000 n +0001227039 00000 n +0001227194 00000 n +0001227349 00000 n +0001227504 00000 n +0001227659 00000 n +0001227787 00000 n +0001227942 00000 n +0001228097 00000 n +0001228252 00000 n +0001228407 00000 n +0001228562 00000 n +0001228717 00000 n +0001228872 00000 n +0001232555 00000 n +trailer +<<8F61AD91A1AE954E9667CCF6F6D8A8CD>]>> +startxref +116 +%%EOF diff --git a/lefdef/src/def/doc/defapiWN.pdf b/lefdef/src/def/doc/defapiWN.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d9b20b3f6248db54b5607937c60c346a90e26a2b GIT binary patch literal 135946 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 z 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 $@ + @rm -f $(INSTALLED_BIN) + @cp $(BINTARGET) $(INSTALLED_BIN) + +installbin: $(INSTALLED_BIN) + +ifdef LIBTARGET +INSTALLED_LIB = ../lib/$(LIBTARGET) +endif + + +$(INSTALLED_LIB): $(LIBTARGET) + @mkdir -p ../lib + @echo $< =\> $@ + @rm -f $(INSTALLED_LIB) + @cp $(LIBTARGET) $(INSTALLED_LIB) + +installlib: $(INSTALLED_LIB) + +install release: all installhdrs installlib installbin + +INSTALLED_HDRS = $(PUBLIC_HDRS:%=../include/%) +$(INSTALLED_HDRS): ../include/%: % + @mkdir -p ../include + @echo $< =\> $@ + @rm -f $@ + @cp -p $< $@ + +installhdrs: $(INSTALLED_HDRS) + +.cpp.o: + $(COMPILE.cc) -I../include $< + +.c.o: + $(COMPILE.c) -I../include $< + +$(LIBTARGET): $(LIBOBJS) + rm -f $(LIBTARGET) + $(AR) $(ARFLAGS) $(LIBTARGET) $^ + +$(BINTARGET): $(BINOBJS) $(LIBTARGET) $(LDLIBS) + rm -f $(BINTARGET) + $(LINK.cc) -o $(BINTARGET) $(BINOBJS) $(LIBTARGET) $(LDLIBS) $(BIN_LINK_FLAGS) + +clean doclean: + rm -f $(LIBTARGET) $(LIBOBJS) $(BINTARGET) $(BINOBJS) $(INSTALLED_LIB) \ + $(INSTALLED_BIN) $(INSTALLED_HDRS) def.tab.c* def.tab.h diff --git a/lefdef/src/lef/CMakeLists.txt b/lefdef/src/lef/CMakeLists.txt new file mode 100644 index 00000000..d51aaa9a --- /dev/null +++ b/lefdef/src/lef/CMakeLists.txt @@ -0,0 +1,7 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + add_subdirectory(lef) + add_subdirectory(lefzlib) + add_subdirectory(lefdiff) + add_subdirectory(lefrw) + add_subdirectory(lefwrite) diff --git a/lefdef/src/lef/LICENSE.TXT b/lefdef/src/lef/LICENSE.TXT new file mode 100644 index 00000000..b7802a4b --- /dev/null +++ b/lefdef/src/lef/LICENSE.TXT @@ -0,0 +1,13 @@ +Copyright 2012 - 2017, Cadence Design Systems + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/lefdef/src/lef/Makefile b/lefdef/src/lef/Makefile new file mode 100644 index 00000000..47d9580d --- /dev/null +++ b/lefdef/src/lef/Makefile @@ -0,0 +1,57 @@ +# $Source: /usr1/mfg/3.4C/solaris_bld/group/util/makefiles/RCS/dir.mk,v $ +# +# $Author: wanda $ +# $Revision: #3 $ +# $Date: 2004/09/29 $ +# $State: Exp $ +# + +.PHONY: all +all: install release + +BUILD_ORDER = \ + lef \ + clef \ + clefzlib \ + lefzlib \ + lefrw \ + lefwrite \ + lefdiff + +## HP-UX 9.0.X +OS_TYPE := $(shell uname) +ifeq ($(OS_TYPE),HP-UX) +OPTIMIZE_FLAG = +O2 +else +OS_VER := $(shell uname -r) +ifeq ($(findstring 4.1,$(OS_VER)),4.1) +OPTIMIZE_FLAG = -O +else +OPTIMIZE_FLAG = -O +endif +endif + +install: + @$(MAKE) $(MFLAGS) installhdrs installlib installbin + +release: + @$(MAKE) "DEBUG=$(OPTIMIZE_FLAG)" install + +test: + @$(MAKE) "BUILD_ORDER=TEST" dotest + +.PHONY: clean +clean: + @$(MAKE) "BUILD_ORDER += TEST" doclean; + echo $(BUILD_ORDER); + @$(MAKE) doclean; + +.DEFAULT: + @for i in $(BUILD_ORDER) ;do \ + echo $(MAKE) $@ in $$i ; \ + cd $$i ; \ + $(MAKE) $(MFLAGS) $@ || exit ; \ + cd .. ; \ + done + +.DELETE_ON_ERROR: diff --git a/lefdef/src/lef/TEST/Makefile b/lefdef/src/lef/TEST/Makefile new file mode 100644 index 00000000..586bf647 --- /dev/null +++ b/lefdef/src/lef/TEST/Makefile @@ -0,0 +1,18 @@ +FAKE_ALL: all + +all: test + +install: test + +dotest: test + +clean doclean: + rm -f run.output run.stderr diff.out + +TEST_FILE = complete.5.8.lef + +TEST_GOLD = complete.5.8.lef.au + +test: ../bin/lefrw + ../bin/lefrw -65nm -lef58 $(TEST_FILE) > run.output 2> run.stderr + diff run.output $(TEST_GOLD) && echo TEST PASSED diff --git a/lefdef/src/lef/TEST/complete.5.8.lef b/lefdef/src/lef/TEST/complete.5.8.lef new file mode 100644 index 00000000..a5a2108b --- /dev/null +++ b/lefdef/src/lef/TEST/complete.5.8.lef @@ -0,0 +1,1962 @@ +VERSION 5.8 ; +NAMESCASESENSITIVE ON ; +FIXEDMASK ; +NOWIREEXTENSIONATPIN ON ; +BUSBITCHARS "<>" ; +DIVIDERCHAR ":" ; +USEMINSPACING OBS OFF ; +USEMINSPACING PIN ON ; +CLEARANCEMEASURE EUCLIDEAN ; +CLEARANCEMEASURE MAXXY ; + +&defines &VDD/GND_site = "VDDGND" ; +&defines &VDD/GND_site = "VDDGND1" ; + +UNITS + TIME NANOSECONDS 100 ; + CAPACITANCE PICOFARADS 10 ; + RESISTANCE OHMS 10000 ; + POWER MILLIWATTS 10000 ; + CURRENT MILLIAMPS 10000 ; + VOLTAGE VOLTS 1000 ; + DATABASE MICRONS 20000 ; + FREQUENCY MEGAHERTZ 10 ; +END UNITS + +MANUFACTURINGGRID 3.5 ; + +PROPERTYDEFINITIONS + LIBRARY NAME STRING "Cadence96" ; + LIBRARY intNum INTEGER 20 ; + LIBRARY realNum REAL 21.22 ; + LIBRARY LEF57_MAXFLOATINGAREAGATE STRING "MAXFLOATINGAREA GATEISGROUND;" ; + LAYER lsp STRING ; + LAYER lip INTEGER ; + LAYER lrp REAL ; + LAYER LEF57_SPACING STRING ; + LAYER LEF57_SPACINGADJACENTCUTS STRING ; + LAYER LEF57_MAXFLOATINGAREA STRING ; + LAYER LEF57_ARRAYSPACING STRING ; + LAYER LEF57_SPACINGSAMENET STRING ; + LAYER LEF57_MINSTEP STRING ; + LAYER LEF57_ANTENNAGATEPLUSDIFF STRING ; + LAYER LEF57_ANTENNACUMROUTINGPLUSCUT STRING ; + LAYER LEF57_ANTENNAAREAMINUSDIFF STRING ; + LAYER LEF57_ANTENNAAREADIFFREDUCEPWL STRING ; + LAYER LEF57_ENCLOSURE STRING ; + VIA stringProperty STRING ; + VIA realProperty REAL ; + VIA COUNT INTEGER RANGE 1 100 ; + VIARULE vrsp STRING ; + VIARULE vrip INTEGER ; + VIARULE vrrp REAL ; + NONDEFAULTRULE ndrsp STRING ; + NONDEFAULTRULE ndrip INTEGER ; + NONDEFAULTRULE ndrrp REAL ; + MACRO stringProp STRING ; + MACRO integerProp INTEGER ; + MACRO WEIGHT REAL RANGE 1.0 100.0 ; + PIN TYPE STRING ; + PIN intProp INTEGER ; + PIN realProp REAL ; +END PROPERTYDEFINITIONS + +LAYER POLYS + TYPE MASTERSLICE ; + PROPERTY lsp "top" lip 1 lrp 2.3 ; +END POLYS + +LAYER POLYS01 + TYPE MASTERSLICE ; +END POLYS01 + +LAYER CUT01 + TYPE CUT ; + SPACING 0.35 ADJACENTCUTS 3 WITHIN 0.25 ; + DIAGPITCH 6.5 ; + OFFSET 0.5 .6 ; + PITCH 1.2 1.3 ; + PROPERTY lip 5 ; + PROPERTY LEF57_SPACING "SPACING 1.5 PARALLELOVERLAP ;" ; + PROPERTY LEF57_ARRAYSPACING "ARRAYSPACING WIDTH 2.0 CUTSPACING 0.2 ARRAYCUTS 3 SPACING 1.0 ;" ; + PROPERTY LEF57_ENCLOSURE "ENCLOSURE ABOVE .01 .05 ;" ; + PROPERTY LEF57_ENCLOSURE "ENCLOSURE ABOVE .02 .05 WIDTH 3.1 EXCEPTEXTRACUT 1.5 NOSHAREDEDGE ;" ; + PROPERTY LEF57_ENCLOSURE "ENCLOSURE BELOW .03 .05 WIDTH 3.1 EXCEPTEXTRACUT 1.5 ;" ; + PROPERTY LEF57_ENCLOSURE "ENCLOSURE .05 .05 ;" ; + PROPERTY LEF57_ENCLOSURE "ENCLOSURE BELOW .08 .05 WIDTH 3.1 EXCEPTEXTRACUT 1.5 NOSHAREDEDGE ;" ; +END CUT01 + +LAYER RX + TYPE ROUTING ; + MASK 2 ; + PITCH 1.8 ; + OFFSET 0.9 ; + WIDTH 1 ; + AREA 34.1 ; + MINIMUMCUT 2 WIDTH 2.5 ; + SPACING 0.6 ; + SPACING 0.18 LENGTHTHRESHOLD 0.9 ; + SPACING 0.4 RANGE 0.1 0.12 ; + SPACING 0.32 RANGE 1.01 2000.0 USELENGTHTHRESHOLD ; + SPACING 0.1 RANGE 0.1 0.1 INFLUENCE 2.01 RANGE 2.1 10000.0 ; + SPACING 0.44 RANGE 1.0 1.0 INFLUENCE 1.01 ; + SPACING 0.33 RANGE 1.01 20.0 INFLUENCE 1.01 ; + SPACING 0.7 RANGE 0.3 0.15 USELENGTHTHRESHOLD ; + SPACING 0.5 ; + SPACING 0.6 RANGE 4.5 6.12 RANGE 3.0 3.1 ; + SPACING 4.3 RANGE 0.1 0.1 INFLUENCE 3.81 RANGE 0.1 0.2 ; + SPACING 0.53 LENGTHTHRESHOLD 0.45 RANGE 0 0.1 ; + PROPERTY LEF57_SPACING "SPACING 2.2 ENDOFLINE 2.3 WITHIN 1.6 ;" ; + PROPERTY LEF57_ARRAYSPACING "ARRAYSPACING LONGARRAY CUTSPACING 0.2 ARRAYCUTS 3 SPACING 1.0 ARRAYCUTS 4 SPACING 1.5 ARRAYCUTS 5 SPACING 2.0 ;" ; + DIRECTION HORIZONTAL ; + WIREEXTENSION 0.75 ; + RESISTANCE RPERSQ 0.103 ; + CAPACITANCE CPERSQDIST 0.000156 ; + HEIGHT 9 ; + THICKNESS 1 ; + SHRINKAGE 0.1 ; + SLOTWIREWIDTH 5 ; + SLOTWIRELENGTH 4 ; + SLOTWIDTH 6 ; + SLOTLENGTH 5 ; + MAXADJACENTSLOTSPACING 45 ; + MAXCOAXIALSLOTSPACING 55 ; + SPLITWIREWIDTH 5 ; + MINIMUMDENSITY 4 ; + MAXIMUMDENSITY 10 ; +# DENSITYCHECKWINDOW 4 5 ; + DENSITYCHECKSTEP 2 ; + FILLACTIVESPACING 4 ; + CAPMULTIPLIER 1 ; + EDGECAPACITANCE 0.00005 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAAREAFACTOR 1 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAAREARATIO 4.6 ; + ANTENNAAREARATIO 7.6 ; + ANTENNADIFFAREARATIO 4.7 ; + ANTENNADIFFAREARATIO PWL ( ( 5.4 5.4 ) ( 6.5 6.5 ) ( 7.5 7.5 ) ) ; + ANTENNACUMAREARATIO 6.7 ; # 5.7 + ANTENNAAREAFACTOR 10 ; # 5.7 + ANTENNACUMROUTINGPLUSCUT ; # 5.7 + ANTENNAAREAMINUSDIFF 100.0 ; # 5.7 + ANTENNAGATEPLUSDIFF 2.0 ; # 5.7 + ANTENNACUMDIFFAREARATIO 1000 ; # 5.7 + ANTENNAAREADIFFREDUCEPWL ( ( 0.0 1.0 ) ( 0.09999 1.0 ) ( 0.1 0.2 ) ( 1.0 0.1 ) ( 1000.0 0.1 ) ) ; + ANTENNACUMDIFFAREARATIO 1000 ; # 5.7 + PROPERTY LEF57_ANTENNACUMROUTINGPLUSCUT "ANTENNACUMROUTINGPLUSCUT ;" ; + PROPERTY LEF57_ANTENNAAREAMINUSDIFF "ANTENNAAREAMINUSDIFF 100.0 ;" ; + PROPERTY LEF57_ANTENNAGATEPLUSDIFF "ANTENNAGATEPLUSDIFF 2.0 ;" ; + PROPERTY LEF57_ANTENNAAREADIFFREDUCEPWL "ANTENNAAREADIFFREDUCEPWL ( ( 0.0 1.0 ) ( 0.0999 1.0 ) ( 0.1 0.2 ) ( 1.0 0.1 ) ( 1000.0 0.1 ) ) ;" ; + ANTENNACUMDIFFAREARATIO 4.5 ; + ANTENNACUMDIFFAREARATIO PWL ( ( 5.4 5.4 ) ( 6.5 6.5 ) ( 7.5 7.5 ) ) ; + ANTENNAAREAFACTOR 6.5 ; + ANTENNAAREAFACTOR 6.5 DIFFUSEONLY ; + ANTENNASIDEAREARATIO 6.5 ; + ANTENNADIFFSIDEAREARATIO 6.5 ; + ANTENNADIFFSIDEAREARATIO PWL ( ( 5.4 5.4 ) ( 6.5 6.5 ) ( 7.5 7.5 ) ) ; + ANTENNACUMSIDEAREARATIO 4.5 ; + ANTENNACUMSIDEAREARATIO 7.5 ; + ANTENNACUMDIFFSIDEAREARATIO 4.6 ; + ANTENNACUMDIFFSIDEAREARATIO PWL ( ( 5.4 5.4 ) ( 6.5 6.5 ) ( 7.5 7.5 ) ) ; + ANTENNASIDEAREAFACTOR 6.5 ; + ANTENNASIDEAREAFACTOR 7.5 DIFFUSEONLY ; + ANTENNAMODEL OXIDE3 ; + ANTENNAMODEL OXIDE4 ; + PROPERTY lsp "rxlay" lip 3 lrp 1.2 ; + CURRENTDEN 1E3 ; +# CURRENTDEN ( 1E3 4E5 ) ; + ACCURRENTDENSITY PEAK + FREQUENCY 1E6 100E6 ; + TABLEENTRIES 0.5E-6 0.4E-6 ; + ACCURRENTDENSITY AVERAGE 5.5 ; + ACCURRENTDENSITY RMS + FREQUENCY 100E6 400E6 800E6 ; + WIDTH 0.4 0.8 10.0 50.0 100.0 ; + TABLEENTRIES + 2.0E-6 1.9E-6 1.8E-6 1.7E-6 1.5E-6 + 1.4E-6 1.3E-6 1.2E-6 1.1E-6 1.0E-6 + 0.9E-6 0.8E-6 0.7E-6 0.6E-6 0.4E-6 ; + DCCURRENTDENSITY AVERAGE + WIDTH 20.0 50.0 ; + TABLEENTRIES 0.6E-6 0.5E-6 ; +END RX + +LAYER CUT12 +TYPE CUT ; + DIAGPITCH 1.5 1.7 ; + DIAGWIDTH 1.6 ; + DIAGSPACING 0.5 ; + SPACING 0.7 LAYER RX ; + SPACING 0.22 ADJACENTCUTS 4 WITHIN 0.25 ; + SPACING 1.5 PARALLELOVERLAP ; # 5.7 + SPACING 1.2 ADJACENTCUTS 2 WITHIN 1.5 EXCEPTSAMEPGNET ; # 5.7 + # 5.4 + ANTENNAMODEL OXIDE1 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNAMODEL OXIDE4 ; + ANTENNAAREAFACTOR 5.4 ; + ANTENNACUMROUTINGPLUSCUT ; # 5.7 + ANTENNAAREAMINUSDIFF 100.0 ; # 5.7 + ANTENNAGATEPLUSDIFF 2.0 ; # 5.7 + ANTENNADIFFAREARATIO 1000 ; # 5.7 + ANTENNACUMDIFFAREARATIO 5000 ; # 5.7 + ANTENNADIFFAREARATIO 6.5 ; + ANTENNAAREADIFFREDUCEPWL ( ( 0.0 1.0 ) ( 0.09999 1.0 ) ( 0.1 0.2 ) ( 1.0 0.1 ) ( 1000.0 0.1 ) ) ; # 5.7 + ANTENNADIFFAREARATIO PWL ( ( 5.4 5.4 ) ( 6.5 6.5 ) ( 7.5 7.5 ) ) ; + ANTENNACUMDIFFAREARATIO PWL ( ( 5.4 5.4 ) ( 6.5 6.5 ) ( 7.5 7.5 ) ) ; + ANTENNACUMDIFFAREARATIO 5.6 ; + ANTENNAAREARATIO 5.6 ; + ANTENNACUMAREARATIO 6.7 ; + ACCURRENTDENSITY PEAK + FREQUENCY 1E6 100E6 ; + TABLEENTRIES 0.5E-6 0.4E-6 ; + ACCURRENTDENSITY AVERAGE 5.5 ; + ACCURRENTDENSITY RMS + FREQUENCY 100E6 400E6 800E6 ; + CUTAREA 0.4 0.8 10.0 50.0 100.0 ; + TABLEENTRIES + 2.0E-6 1.9E-6 1.8E-6 1.7E-6 1.5E-6 + 1.4E-6 1.3E-6 1.2E-6 1.1E-6 1.0E-6 + 0.9E-6 0.8E-6 0.7E-6 0.6E-6 0.4E-6 ; + DCCURRENTDENSITY AVERAGE + CUTAREA 2.0 5.0 ; + TABLEENTRIES 0.5E-6 0.4E-6 ; + DCCURRENTDENSITY AVERAGE 4.9 ; +END CUT12 + +LAYER PC + TYPE ROUTING ; + WIDTH 1 ; + WIREEXTENSION 0.4 ; #should be ignored + PITCH 3.8 3.5 ; + DIAGPITCH 1.4 ; + SPACING 0.6 ; + SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 ; # 5.7 + SPACING 1.3 ENDOFLINE 1.4 WITHIN 0.7 PARALLELEDGE 1.1 WITHIN 0.5 TWOEDGES ; + SPACING 1.4 ENDOFLINE 1.5 WITHIN 0.8 PARALLELEDGE 1.2 WITHIN 0.6 ; # 5.7 + DIRECTION VERTICAL ; + RESISTANCE RPERSQ PWL ( ( 1 0.103 ) ( 10 4.7 ) ) ; + CAPACITANCE CPERSQDIST PWL ( ( 1 0.000156 ) ( 10 0.001 ) ) ; + ANTENNAAREARATIO 5.4 ; + ANTENNADIFFAREARATIO 6.5 ; + ANTENNACUMAREARATIO 7.5 ; + ANTENNACUMDIFFAREARATIO PWL ( ( 5.0 5.1 ) ( 6.0 6.1 ) ) ; + ANTENNAAREAFACTOR 4.5 ; + ANTENNASIDEAREARATIO 6.5 ; + ANTENNADIFFSIDEAREARATIO PWL ( ( 7.0 7.1 ) ( 7.2 7.3 ) ) ; + ANTENNACUMSIDEAREARATIO 7.4 ; + ANTENNACUMDIFFSIDEAREARATIO PWL ( ( 8.0 8.1 ) ( 8.2 8.3 ) ( 8.4 8.5 ) + ( 8.6 8.7 ) ) ; + ANTENNASIDEAREAFACTOR 9.0 DIFFUSEONLY ; + + ACCURRENTDENSITY PEAK + FREQUENCY 1E6 100E6 ; + WIDTH 5.6 8.5 8.1 4.5 ; + TABLEENTRIES 0.5E-6 0.4E-6 ; + DCCURRENTDENSITY AVERAGE + WIDTH 20.0 50.0 100.0 ; + TABLEENTRIES 1.0E-6 0.7E-6 0.5E-6 ; +END PC + +LAYER CA + TYPE CUT ; + DCCURRENTDENSITY AVERAGE + CUTAREA 2.0 5.0 10.0 ; + TABLEENTRIES 0.6E-6 0.5E-6 0.4E-6 ; +END CA + +LAYER M1 + TYPE ROUTING ; + WIDTH 1 ; + WIREEXTENSION 7 ; + PITCH 1.8 ; + DIRECTION HORIZONTAL ; + RESISTANCE RPERSQ 0.103 ; + CAPACITANCE CPERSQDIST 0.000156 ; + ANTENNACUMAREARATIO 300 ; + ANTENNACUMDIFFAREARATIO 600 ; + ANTENNAGATEPLUSDIFF 2.0 ; # 5.7 + ANTENNADIFFAREARATIO 1000 ; # 5.7 + ANTENNACUMDIFFAREARATIO 5000 ; # 5.7 + SPACINGTABLE + PARALLELRUNLENGTH 0.00 0.50 3.00 5.00 + WIDTH 0.00 0.15 0.15 0.15 0.15 + WIDTH 0.25 0.15 0.20 0.20 0.20 + WIDTH 1.50 0.15 0.50 0.50 0.50 + WIDTH 3.00 0.15 0.50 1.00 1.00 + WIDTH 5.00 0.15 0.50 1.00 2.00 ; + SPACINGTABLE + INFLUENCE + WIDTH 1.5 WITHIN 0.5 SPACING 0.5 + WIDTH 3.0 WITHIN 1.0 SPACING 1.0 + WIDTH 5.0 WITHIN 2.0 SPACING 2.0 ; + ACCURRENTDENSITY AVERAGE 5.5 ; + DCCURRENTDENSITY AVERAGE 4.9 ; +END M1 + +LAYER V1 + TYPE CUT ; + SPACING 0.6 LAYER CA ; +END V1 + +LAYER M2 + TYPE ROUTING ; + WIDTH 0.9 ; + WIREEXTENSION 8 ; + PITCH 1.8 ; + SPACING 0.9 ; + SPACING 0.28 ; + SPACING 0.24 LENGTHTHRESHOLD 1.0 ; + SPACING 0.32 RANGE 1.01 9.99 USELENGTHTHRESHOLD ; + SPACING 0.5 RANGE 10.0 1000.0 ; + SPACING 0.5 RANGE 10.0 1000.0 INFLUENCE 1.00 ; + SPACING 0.5 RANGE 10.0 1000.0 INFLUENCE 1.0 RANGE .28 1.0 ; + SPACING 0.5 RANGE 3.01 4.0 RANGE 4.01 5.0 ; + SPACING 0.4 RANGE 3.01 4.0 RANGE 5.01 1000.0 ; + SPACING 1.0 SAMENET PGONLY ; # 5.7 + SPACING 1.1 SAMENET ; # 5.7 + PROPERTY LEF57_SPACING "SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 PARALLELEDGE 2.1 WITHIN 1.5 TWOEDGES ;" ; + PROPERTY LEF57_SPACING "SPACING 1.5 ENDOFLINE 2.3 WITHIN 1.6 PARALLELEDGE 1.1 WITHIN 0.5 ;" ; + DIRECTION DIAG45 ; + RESISTANCE RPERSQ 0.0608 ; + CAPACITANCE CPERSQDIST 0.000184 ; + PROPERTY LEF57_MAXFLOATINGAREA "MAXFLOATINGAREA 1000 ;" ; + ANTENNAMODEL OXIDE1 ; + ANTENNACUMAREARATIO 5000 ; + ANTENNACUMDIFFAREARATIO 8000 ; + ANTENNAMODEL OXIDE2 ; + ANTENNACUMAREARATIO 500 ; + ANTENNACUMDIFFAREARATIO 800 ; + ANTENNAMODEL OXIDE3 ; + ANTENNACUMAREARATIO 300 ; + ANTENNACUMDIFFAREARATIO 600 ; +END M2 + +LAYER V2 + TYPE CUT ; +END V2 + +LAYER M3 + TYPE ROUTING ; + WIDTH 0.9 ; + WIREEXTENSION 8 ; + PITCH 1.8 ; + SPACING 0.9 ; + DIRECTION HORIZONTAL ; + RESISTANCE RPERSQ 0.0608 ; + CAPACITANCE CPERSQDIST 0.000184 ; + ANTENNAMODEL OXIDE3 ; + ANTENNACUMAREARATIO 5000 ; + ANTENNACUMDIFFAREARATIO 8000 ; + ANTENNAMODEL OXIDE4 ; + ANTENNACUMAREARATIO 500 ; + ANTENNACUMDIFFAREARATIO 800 ; + ANTENNAMODEL OXIDE1 ; + ANTENNACUMAREARATIO 300 ; + ANTENNACUMDIFFAREARATIO 600 ; + PROPERTY LEF57_MINSTEP "MINSTEP 1.0 MAXEDGES 2 ;" ; +END M3 + +LAYER M4 + TYPE ROUTING ; + PITCH 5.4 ; + WIDTH 5.4 ; + DIRECTION VERTICAL ; + DIRECTION HORIZONTAL ; + # 2 via cuts required for m4 > 0.50 um when connecting from m3 + MINIMUMCUT 2 WIDTH 0.50 ; + # 2 via cuts required for m4 > 0.70 um when connecting from m5 + MINIMUMCUT 2 WIDTH 0.70 FROMBELOW ; + MINIMUMCUT 3 WIDTH 0.80 WITHIN 0.3 ; # 5.7 + MINIMUMCUT 2 WIDTH 1.00 FROMBELOW LENGTH 20.0 WITHIN 5.0 ; + # 4 via cuts are required for m4 > 1.0 um when connecting from m3 or m5 + MINIMUMCUT 4 WIDTH 1.0 FROMABOVE ; + # 2 via cuts are required if m4 > 1.1 um wide and m4 > 20.0 um long, + # and the via cut is < 5.0 um away from the wide wire + MINIMUMCUT 2 WIDTH 1.1 LENGTH 20.0 WITHIN 5.0 ; + MINIMUMCUT 2 WIDTH 1.1 FROMABOVE LENGTH 20.0 WITHIN 5.0 ; + MINENCLOSEDAREA 0.30 ; # donut hole must be >= 0.30 um^2 + MINENCLOSEDAREA 0.40 WIDTH 0.15 ; # hole area >= 0.40 um^2 when w<=0.15 + MINENCLOSEDAREA 0.80 WIDTH 0.50 ; # hole area >= 0.80 um^2 when w<=0.55 + MAXWIDTH 10.0 ; + MINWIDTH 0.15 ; + PROTRUSIONWIDTH 0.30 LENGTH 0.60 WIDTH 1.20 ; + MINSTEP .20 ; +END M4 + +LAYER M5 + TYPE ROUTING ; + PITCH 5.4 ; + WIDTH 4.0 ; + DIRECTION DIAG135 ; + MINSTEP 0.05 ; + MINSTEP 0.04 ; + MINSTEP 0.05 LENGTHSUM 0.08 ; + MINSTEP 0.05 LENGTHSUM 0.16 ; + MINSTEP 0.05 INSIDECORNER ; + MINSTEP 0.05 INSIDECORNER LENGTHSUM 0.15 ; + MINSTEP 1.0 MAXEDGES 2 ; # 5.7 + MINIMUMCUT 2 WIDTH 0.70 ; + MINIMUMCUT 4 WIDTH 1.0 FROMABOVE ; + MINIMUMCUT 2 WIDTH 1.1 LENGTH 20.0 WITHIN 5.0 ; + MINIMUMCUT 5 WIDTH 0.5 ; + ANTENNAMODEL OXIDE3 ; + ANTENNACUMAREARATIO 5000 ; + ANTENNACUMDIFFAREARATIO 8000 ; + ANTENNAMODEL OXIDE3 ; + ANTENNACUMAREARATIO 500 ; + ANTENNACUMDIFFAREARATIO 800 ; + ANTENNAMODEL OXIDE3 ; + ANTENNACUMAREARATIO 300 ; + ANTENNACUMDIFFAREARATIO 600 ; +END M5 + +LAYER implant1 + TYPE IMPLANT ; + WIDTH 0.50 ; + SPACING 0.50 ; + PROPERTY lrp 5.4 ; +END implant1 + +LAYER implant2 + TYPE IMPLANT ; + WIDTH 0.50 ; + SPACING 0.50 ; + PROPERTY lsp "bottom" ; +END implant2 + +LAYER V3 + TYPE CUT ; +END V3 + +LAYER MT + TYPE ROUTING ; + WIDTH 0.9 ; + PITCH 1.8 ; + SPACING 0.9 ; + DIRECTION VERTICAL ; + RESISTANCE RPERSQ 0.0608 ; + CAPACITANCE CPERSQDIST 0.000184 ; + MINSTEP 0.05 STEP ; + MINSTEP 0.05 STEP LENGTHSUM 0.08 ; + MINSTEP 0.04 STEP ; + DIAGMINEDGELENGTH .075 ; +END MT + +layer OVERLAP + TYPE OVERLAP ; + PROPERTY lip 5 lsp "top" ; + PROPERTY lrp 5.5 lsp "bottom" ; +END OVERLAP + +LAYER via12 + TYPE CUT ; + WIDTH 0.20 ; #cuts .20 x .20 squares + SPACING 0.15 CENTERTOCENTER ; #via12 center-to-center spacing is 0.15 + ENCLOSURE BELOW .03 .01 ; #m1; 0.03 on two sides, 0.01 on other sides + ENCLOSURE ABOVE .05 .01 ; #m2; 0.05 on two sides, 0.01 on other sides + ENCLOSURE ABOVE .04 .09 ; #m3; 0.04 on two sides, 0.09 on other sides + PREFERENCLOSURE BELOW 0.06 0.01 ; + PREFERENCLOSURE ABOVE 0.08 0.2 ; + RESISTANCE 10.0 ; #10.0 ohms per cut +END via12 + +LAYER metal1 + TYPE ROUTING ; + WIDTH 0.9 ; + PITCH 1.8 ; + DIRECTION VERTICAL ; + MINSIZE 0.14 0.30 0.5 0.56 0.01 0.05 ; +END metal1 + +LAYER via23 + TYPE CUT ; + WIDTH 0.20 ; #cuts .20 x .20 squares + SPACING 0.15 ; #via23 edge-to-edge spacing is 0.15 + ENCLOSURE .05 .01 ; #m2, m3:0.05 on two sides, 0.01 on other sides + ENCLOSURE .02 .02 WIDTH 1.0 ; #m2 needs 0.02 on all sides if m2 width + #>= 1.0 + #m3 needs 0.02 on all sides if m3 width >= 1.0 + ENCLOSURE .05 .05 WIDTH 2.0 ; #m2 needs 0.05 on all sides if m2 width + #>= 2.0 + #m3 needs 0.02 on all sides if m3 width >= 3.0 + RESISTANCE 10.0 ; #10.0 ohms per cut +END via23 + +LAYER via34 + TYPE CUT ; + WIDTH 0.25 ; #cuts .25 x .25 squares + SPACING 0.10 CENTERTOCENTER ; # 5.7 + ENCLOSURE .05 .01 ; #m3, m4 must meet the enclosure rule + ENCLOSURE .05 0.0 LENGTH 0.7 ; # 5.7 + ENCLOSURE BELOW .07 .07 WIDTH 1.0 ; #m3 needs .07um on all sides if + #the m3 width is >= 1.0um + ENCLOSURE ABOVE .09 .09 WIDTH 1.0 ; #m4 needs .09um on all sides if + #the m4 width is >= 1.0um + ENCLOSURE 0.03 0.03 WIDTH 1.0 EXCEPTEXTRACUT 0.2 ; # 5.7 + RESISTANCE 8.0 ; #8.0 ohms per cut +END via34 + +LAYER cut23 # 5.7 + TYPE CUT ; + SPACING 0.20 SAMENET LAYER cut12 STACK ; + SPACING 0.30 CENTERTOCENTER SAMENET AREA 0.02 ; + SPACING 0.40 AREA 0.5 ; + SPACING 0.10 ; + SPACINGTABLE ORTHOGONAL + WITHIN 0.15 SPACING 0.11 + WITHIN 0.13 SPACING 0.13 + WITHIN 0.11 SPACING 0.15 ; + ARRAYSPACING LONGARRAY CUTSPACING 0.2 + ARRAYCUTS 3 SPACING 1.0 + ARRAYCUTS 4 SPACING 1.5 + ARRAYCUTS 5 SPACING 2.0 ; +END cut23 + +LAYER cut24 # 5.7 + TYPE ROUTING ; + WIDTH 1 ; + PITCH 1.8 ; + DIRECTION HORIZONTAL ; + SPACING 0.10 ; + SPACING 0.12 NOTCHLENGTH 0.15 ; + SPACING 0.14 ENDOFNOTCHWIDTH 0.15 NOTCHSPACING 0.16 NOTCHLENGTH 0.08 ; + ARRAYSPACING WIDTH 2.0 CUTSPACING 0.2 ARRAYCUTS 3 SPACING 1.0 ; +END cut24 + +LAYER cut25 # 5.7 + TYPE ROUTING ; + WIDTH 1 ; + WIREEXTENSION 7 ; + PITCH 1.8 ; + DIRECTION HORIZONTAL ; + SPACINGTABLE + TWOWIDTHS + WIDTH 0.00 0.15 0.20 0.50 1.00 + WIDTH 0.25 PRL 0.0 0.20 0.25 0.50 1.00 + WIDTH 1.50 PRL 1.50 0.50 0.50 0.60 1.00 + WIDTH 3.00 PRL 3.00 1.00 1.00 1.00 1.20 ; +END cut25 + +MAXVIASTACK 4 RANGE m1 m7 ; + +#layer VIRTUAL +# TYPE OVIRTUAL ; +#END VIRTUAL + +VIA IN1X + TOPOFSTACKONLY + FOREIGN IN1X ; + RESISTANCE 2 ; + LAYER RX ; RECT -0.7 -0.7 0.7 0.7 ; RECT 0.0 0 2.1 2.3 ; RECT 5.7 0 95.7 2.3 ; RECT 101.9 0 119.6 2.3 ; + LAYER CUT12 ; + RECT -0.25 -0.25 0.25 0.25 ; + LAYER PC ; + RECT -0.6 -0.6 0.6 0.6 ; + PROPERTY stringProperty "DEFAULT" realProperty 32.33 COUNT 34 ; +END IN1X + +VIA M1_M2 DEFAULT + RESISTANCE 1.5 ; + LAYER M1 ; + RECT MASK 1 -0.6 -0.6 0.6 0.6 ; + LAYER V1 ; + RECT MASK 2 -0.45 -0.45 0.45 0.45 ; + LAYER M2 ; + RECT MASK 3 -0.45 -0.45 0.45 0.45 ; + RECT MASK 1 -0.9 -0.45 0.9 0.45 ; +END M1_M2 + +VIA M2_M3 DEFAULT + RESISTANCE 1.5 ; + LAYER M2 ; + RECT -0.45 -0.9 0.45 0.9 ; + LAYER V2 ; + RECT -0.45 -0.45 0.45 0.45 ; + LAYER M3 ; + RECT -0.45 -0.45 0.45 0.45 ; +END M2_M3 + +VIA M2_M3_PWR GENERATED + RESISTANCE 0.4 ; + LAYER M2 ; + RECT -1.35 -1.35 1.35 1.35 ; + LAYER V2 ; + RECT -1.35 -1.35 -0.45 1.35 ; + RECT 0.45 -1.35 1.35 -0.45 ; + RECT 0.45 0.45 1.35 1.35 ; + LAYER M3 ; + RECT -1.35 -1.35 1.35 1.35 ; +END M2_M3_PWR + +VIA M3_MT DEFAULT + RESISTANCE 1.5 ; + LAYER M3 ; + RECT MASK 1 -0.9 -0.45 0.9 0.45 ; + LAYER V3 ; + RECT MASK 2 -0.45 -0.45 0.45 0.45 ; + LAYER MT ; + RECT MASK 3 -0.45 -0.45 0.45 0.45 ; +END M3_MT + +VIA myBlockVia0 + VIARULE viaName0 ; + CUTSIZE 0.1 0.1 ; + LAYERS metal1 via12 metal2 ; + CUTSPACING 0.1 0.1 ; + ENCLOSURE 0.05 0.01 0.01 0.05 ; + ROWCOL 5 14 ; + PATTERN 2_FF70_3_R4F ; +END myBlockVia0 + +VIA VIACENTER12 + LAYER M1 ; + RECT -4.6 -2.2 4.6 2.2 ; + LAYER V1 ; + RECT -3.1 -0.8 -1.9 0.8 ; + RECT 1.9 -0.8 3.1 0.8 ; + LAYER M2 ; + RECT -4.4 -2.0 4.4 2.0 ; + RESISTANCE 0.24 ; +END VIACENTER12 + +VIA M2_TURN + LAYER M2 ; + RECT -0.45 -0.45 0.45 0.45 ; + RECT -4.4 -2.0 4.4 2.0 ; +END M2_TURN + +VIA myVia23 + LAYER metal2 ; + POLYGON MASK 1 -2.1 -1.0 -0.2 1.0 2.1 1.0 0.2 -1.0 ; + POLYGON MASK 2 -1.1 -2.0 -0.1 2.0 1.1 2.0 0.1 -2.0 ; + POLYGON MASK 3 -3.1 -2.0 -0.3 2.0 3.1 2.0 0.3 -2.0 ; + POLYGON MASK 1 -4.1 -2.0 -0.4 2.0 4.1 2.0 0.4 -2.0 ; + LAYER cut23 ; + RECT MASK 2 -0.4 -0.4 0.4 0.4 ; + POLYGON MASK 3 -2.1 -1.0 -0.2 1.0 2.1 1.0 0.2 -1.0 ; + LAYER metal3 ; + POLYGON MASK 1 -0.2 -1.0 -2.1 1.0 0.2 1.0 2.1 -1.0 ; + LAYER cut33 ; + RECT MASK 1 -0.4 -0.4 0.4 0.4 ; + POLYGON MASK 2 -2.1 -1.0 -0.2 1.0 2.1 1.0 0.2 -1.0 ; + POLYGON MASK 2 -1.1 -2.0 -0.1 2.0 1.1 2.0 0.1 -2.0 ; + RECT MASK 1 -0.5 -0.5 0.5 0.5 ; + RECT MASK 2 -0.3 -0.3 0.3 0.3 ; + POLYGON MASK 3 -3.1 -2.0 -0.3 2.0 3.1 2.0 0.3 -2.0 ; + POLYGON MASK 1 -4.1 -2.0 -0.4 2.0 4.1 2.0 0.4 -2.0 ; + RECT MASK 1 -0.2 -0.2 0.2 0.2 ; + RECT MASK 2 -0.1 -0.1 0.1 0.1 ; +END myVia23 + +VIA myBlockVia + VIARULE DEFAULT ; + CUTSIZE 0.1 0.1 ; + LAYERS metal1 via12 metal2 ; + CUTSPACING 0.1 0.1 ; + ENCLOSURE 0.05 0.01 0.01 0.05 ; + ORIGIN .1 .2 ; + OFFSET 5.1 4.1 3.1 2.1 ; + ROWCOL 1 2 ; +END myBlockVia + +VIARULE VIALIST12 + LAYER M1 ; + DIRECTION VERTICAL ; +# OVERHANG 4.5 ; + WIDTH 9.0 TO 9.6 ; +# METALOVERHANG 0.4 ; + LAYER M2 ; + DIRECTION HORIZONTAL ; + WIDTH 3.0 TO 3.0 ; +# METALOVERHANG 0.3 ; + VIA VIACENTER12 ; + PROPERTY vrsp "new" vrip 1 vrrp 4.5 ; +END VIALIST12 + +VIARULE VIALIST1 + LAYER M1 ; + DIRECTION VERTICAL ; + WIDTH 9.0 TO 9.6 ; +# OVERHANG 4.5 ; +# METALOVERHANG 0.5 ; + LAYER M1 ; + DIRECTION HORIZONTAL ; + WIDTH 3.0 TO 3.0 ; +# OVERHANG 5.5 ; +# METALOVERHANG 0.6 ; +# VIA VIACENTER12 ; +END VIALIST1 + + +VIARULE VIAGEN12 GENERATE + LAYER M1 ; + DIRECTION VERTICAL ; + WIDTH 0.1 TO 19 ; + OVERHANG 1.4 ; + METALOVERHANG 1.0 ; + LAYER M2 ; + DIRECTION HORIZONTAL ; + OVERHANG 1.5 ; + METALOVERHANG 1.0 ; + WIDTH 0.2 TO 1.9 ; + LAYER M3 ; + RECT -0.3 -0.3 0.3 0.3 ; + SPACING 5.6 BY 7.0 ; + RESISTANCE 0.5 ; + PROPERTY vrsp "new" vrip 1 vrrp 5.5 ; +END VIAGEN12 + +VIARULE VIAGEN1 GENERATE + LAYER M1 ; + DIRECTION HORIZONTAL ; + OVERHANG 1.4 ; + METALOVERHANG 1.1 ; + WIDTH 0.1 TO 1.9 ; + LAYER M2 ; + DIRECTION VERTICAL ; + OVERHANG 1.5 ; + METALOVERHANG 1.5 ; + WIDTH 0.2 TO 2.9 ; +# LAYER M3 ; +# RECT ( 1 1 ) ( 1 1 ) ; +# SPACING 0.3 BY 4.5 ; + PROPERTY vrsp "new" vrip 1 vrrp 5.5 ; +END VIAGEN1 + +VIARULE via10 GENERATE + LAYER M1 ; + DIRECTION HORIZONTAL ; + OVERHANG 1.1 ; + WIDTH 0.1 TO 1.9 ; + LAYER M2 ; + DIRECTION VERTICAL ; + OVERHANG 1.2 ; + WIDTH 0.2 TO 2.9 ; + LAYER M3 ; + RECT ( 1 1 ) ( 1 1 ) ; + SPACING 0.3 BY 4.5 ; + PROPERTY vrsp "new" vrip 1 vrrp 5.5 ; +END via10 + +VIARULE via11 GENERATE + LAYER M1 ; + DIRECTION HORIZONTAL ; + WIDTH 0.1 TO 1.9 ; + LAYER M2 ; + DIRECTION VERTICAL ; + WIDTH 0.2 TO 2.9 ; + LAYER M3 ; + RECT ( 1 1 ) ( 1 1 ) ; + SPACING 0.3 BY 4.5 ; + PROPERTY vrsp "new" vrip 1 vrrp 5.5 ; +END via11 + +VIARULE via12 GENERATE DEFAULT + LAYER m1 ; + ENCLOSURE 0.03 0.01 ; # 2 sides need >= 0.03, 2 other sides >= 0.01 + LAYER m2 ; + ENCLOSURE 0.05 0.01 ; # 2 sides need >= 0.05, 2 other sides >= 0.01 + LAYER cut12 ; + RECT -0.1 -0.1 0.1 0.1 ; # cut is .20 by .20 + SPACING 0.40 BY 0.40 ; # center-to-center spacing + RESISTANCE 20 ; # ohms per cut +END via12 + +VIARULE via13 GENERATE + LAYER m1 ; + ENCLOSURE 0.05 0.005 ; # 2 sides need >= 0.05, 2 other sides >= 0.005 + WIDTH 1.0 TO 100.0 ; # for m1 between 1 to 100 um wide + LAYER m2 ; + ENCLOSURE 0.05 0.005 ; # 2 sides need >= 0.05, 2 other sides >= 0.005 + WIDTH 1.0 TO 100.0 ; # for m1 between 1 to 100 um wide + LAYER cut12 ; + RECT -0.07 -0.07 0.07 0.07 ; # cut is .14 by .14 + SPACING 0.16 BY 0.16 ; +END via13 + + +VIARULE via14 + LAYER m1 ; + DIRECTION HORIZONTAL ; +# ENCLOSURE 0.05 0.005 ; 2 sides need >= 0.05, 2 other sides >= 0.005 + WIDTH 1.0 TO 100.0 ; # for m1 between 1 to 100 um wide + LAYER m2 ; +# ENCLOSURE 0.05 0.005 ; 2 sides need >= 0.05, 2 other sides >= 0.005 + DIRECTION VERTICAL ; + WIDTH 1.0 TO 100.0 ; # for m1 between 1 to 100 um wide + via name1 ; +END via14 + +VIARULE TURNM3 GENERATE + LAYER m3 ; + DIRECTION VERTICAL ; + LAYER m3 ; + DIRECTION HORIZONTAL ; +END TURNM3 + +VIARULE VIAGEN3T GENERATE + LAYER m3 ; + DIRECTION HORIZONTAL ; + OVERHANG 0.2 ; + METALOVERHANG 0.0 ; + LAYER v3 ; + RECT -0.45 -0.45 0.45 0.45 ; + SPACING 1.80 by 1.80 ; + LAYER mt ; + DIRECTION VERTICAL ; + OVERHANG 0.2 ; + METALOVERHANG 0.0 ; +END VIAGEN3T + +NONDEFAULTRULE RULE1 + LAYER RX + WIDTH 10.0 ; + SPACING 2.2 ; + WIREEXTENSION 6 ; + RESISTANCE RPERSQ 6.5 ; + CAPACITANCE CPERSQDIST 6.5 ; + EDGECAPACITANCE 6.5 ; + END RX + LAYER PC + WIDTH 10.0 ; + SPACING 2.2 ; + CAPACITANCE CPERSQDIST 6.5 ; + END PC + + LAYER M1 + WIDTH 10.0 ; + SPACING 2.2 ; + RESISTANCE RPERSQ 6.5 ; + END M1 + + LAYER fw + WIDTH 4.800 ; + SPACING 4.800 ; + END fw + + VIA nd1VIARX0 + DEFAULT + TOPOFSTACKONLY + FOREIGN IN1X ; + RESISTANCE 0.2 ; + PROPERTY realProperty 2.3 ; + LAYER RX ; + RECT -3 -3 3 3 ; + LAYER CUT12 ; + RECT -1.0 -1.0 1.0 1.0 ; + LAYER PC ; + RECT -3 -3 3 3 ; + END nd1VIARX0 + + VIA nd1VIA01 + FOREIGN IN1X 5.6 5.3 E ; + RESISTANCE 0.2 ; + LAYER PC ; + RECT -3 -3 3 3 ; + RECT -5 -5 5 5 ; + LAYER CA ; + RECT -1.0 -1.0 1.0 1.0 ; + LAYER M1 ; + RECT -3 -3 3 3 ; + END nd1VIA01 + + VIA nd1VIA12 + RESISTANCE 0.2 ; + LAYER M1 ; + RECT -3 -3 3 3 ; + LAYER V1 ; + RECT -1.0 -1.0 1.0 1.0 ; + LAYER M2 ; + RECT -3 -3 3 3 ; + END nd1VIA12 + + SPACING + SAMENET + CUT01 RX 0.1 STACK ; + END SPACING + PROPERTY ndrsp "single" ndrip 1 ndrrp 6.7 ; +END RULE1 + +NONDEFAULTRULE wide1_5x + LAYER metal1 + WIDTH 1.5 ; # metal1 has 1.5um width + END metal1 + LAYER metal2 + WIDTH 1.5 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + END metal3 +END wide1_5x + +NONDEFAULTRULE wide3x + LAYER metal1 + WIDTH 3.0 ; # metal1 has 3.0um width + END metal1 + LAYER metal2 + WIDTH 3.0 ; + END metal2 + LAYER metal3 + WIDTH 3.0 ; + END metal3 + #via12rule and via23rule are used implicitly + MINCUTS cut12 2 ; # at least two-cut vias for cut12 required + MINCUTS cut23 2 ; +END wide3x + +NONDEFAULTRULE analog_rule + HARDSPACING ; # don't let any other signal close to this one + LAYER metal1 + WIDTH 1.5 ; # metal1 has 1.5um width + SPACING 3.0 ; # extra spacing of 3.0um + DIAGWIDTH 5.5 ; + END metal1 + LAYER metal2 + WIDTH 1.5 ; + SPACING 3.0 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + SPACING 3.0 ; + END metal3 + #use pre-defined "analog vias" + #the DEFAULT VIARULEs will NOT be inherited + USEVIA via12_fixed_analog_via ; + USEVIA via23_fixed_analog_via ; + USEVIARULE viarule14_fixed_analog ; +END analog_rule + +NONDEFAULTRULE clock1 + LAYER metal1 + WIDTH 1.5 ; # metal1 has 1.5um width + END metal1 + LAYER metal2 + WIDTH 1.5 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + END metal3 +END clock1 +NONDEFAULTRULE clock2 + LAYER metal1 + WIDTH 1.5 ; # metal1 has 1.5um width + END metal1 + LAYER metal2 + WIDTH 1.5 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + END metal3 +END +NONDEFAULTRULE clock + LAYER metal1 + WIDTH 1.5 ; # metal1 has 1.5um width + END metal1 + LAYER metal2 + WIDTH 1.5 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + END metal3 +END clock + +UNIVERSALNOISEMARGIN 0.1 20 ; +EDGERATETHRESHOLD1 0.1 ; +EDGERATETHRESHOLD2 0.9 ; +EDGERATESCALEFACTOR 1.0 ; + +NOISETABLE 1 ; + EDGERATE 20 ; + OUTPUTRESISTANCE 3 ; + VICTIMLENGTH 25 ; + VICTIMNOISE 10 ; +# CORRECTIONFACTOR 3 ; +# OUTPUTRESISTANCE 5 ; +END NOISETABLE + +#CORRECTIONTABLE 1 ; +# EDGERATE 20 ; +# OUTPUTRESISTANCE 3 ; +# VICTIMLENGTH 25 ; +# CORRECTIONFACTOR 10.5 ; +# OUTPUTRESISTANCE 5.4 ; +#END CORRECTIONTABLE + +SPACING + SAMENET CUT01 CA 1.5 ; + SAMENET CA V1 1.5 STACK ; + SAMENET M1 M1 3.5 STACK ; + SAMENET V1 V2 1.5 STACK ; + SAMENET M2 M2 3.5 STACK ; + SAMENET V2 V3 1.5 STACK ; +END SPACING + +MINFEATURE 0.1 0.1 ; + +DIELECTRIC 0.000345 ; + +IRDROP + TABLE DRESHI + 0.0001 -0.7 0.001 -0.8 0.01 -0.9 0.1 -1.0 ; + TABLE DRESLO + 0.0001 -1.7 0.001 -1.6 0.01 -1.5 0.1 -1.3 ; + TABLE DNORESHI + 0.0001 -0.6 0.001 -0.7 0.01 -0.9 0.1 -1.1 ; + TABLE DNORESLO + 0.0001 -1.5 0.001 -1.5 0.01 -1.4 0.1 -1.4 ; +END IRDROP + +SITE COVER + CLASS PAD ; + SYMMETRY R90 ; + SIZE 10.000 BY 10.000 ; +END COVER + +SITE IO + CLASS PAD ; + SIZE 80.000 BY 560.000 ; +END IO + +SITE CORE + CLASS CORE ; + SIZE 0.700 BY 8.400 ; +END CORE + +SITE CORE1 + CLASS CORE ; + SYMMETRY X ; + SIZE 67.2 BY 6 ; +END CORE1 + +SITE MRCORE +# CLASS VIRTUAL ; + CLASS CORE ; + SIZE 3.6 BY 28.8 ; + SYMMETRY Y ; +END MRCORE + +SITE IOWIRED + CLASS PAD ; + SIZE 57.6 BY 432 ; +END IOWIRED + +SITE IMAGE + CLASS CORE ; + ROWPATTERN Fsite1 N Lsite1 N Lsite1 FS ; + SIZE 1 BY 1 ; +END IMAGE + +SITE Fsite + CLASS CORE ; + SIZE 4.0 BY 7.0 ; # 4.0 um wide, 7.0 um high +END Fsite + +SITE Lsite + CLASS CORE ; + SIZE 6.0 BY 7.0 ; # 6.0 um wide, 7.0 um high +END Lsite + +SITE mySite + CLASS CORE ; + ROWPATTERN Fsite N Lsite N Lsite FS ; # a pattern of F + L + flipped L + SIZE 16.0 BY 7.0 ; # width = width(F + L + L) +END mySite + +ARRAY M7E4XXX + SITE CORE -5021.450 -4998.000 N DO 14346 BY 595 STEP 0.700 16.800 ; + SITE CORE -5021.450 -4989.600 FS DO 14346 BY 595 STEP 0.700 16.800 ; + SITE IO 6148.800 5800.000 E DO 1 BY 1 STEP 0.000 0.000 ; + SITE IO 6148.800 3240.000 E DO 1 BY 1 STEP 0.000 0.000 ; + SITE COVER -7315.000 -7315.000 N DO 1 BY 1 STEP 0.000 0.000 ; + SITE COVER 7305.000 7305.000 N DO 1 BY 1 STEP 0.000 0.000 ; + CANPLACE COVER -7315.000 -7315.000 N DO 1 BY 1 STEP 0.000 0.000 ; + CANPLACE COVER -7250.000 -7250.000 N DO 5 BY 1 STEP 40.000 0.000 ; + CANPLACE COVER -7250.000 -7250.000 N DO 5 BY 1 STEP 40.000 0.000 ; + CANNOTOCCUPY CORE -5021.450 -4989.600 FS DO 100 BY 595 STEP 0.700 16.800 ; + CANNOTOCCUPY CORE -5021.450 -4998.000 N DO 100 BY 595 STEP 0.700 16.800 ; + CANNOTOCCUPY CORE -5021.450 -4998.000 N DO 100 BY 595 STEP 0.700 16.800 ; + TRACKS X -6148.800 DO 17569 STEP 0.700 LAYER RX ; + TRACKS Y -6148.800 DO 20497 STEP 0.600 LAYER RX ; + TRACKS Y -6148.800 DO 20497 STEP 0.600 LAYER RX ; + + FLOORPLAN 100% + CANPLACE COVER -7315.000 -7315.000 N DO 1 BY 1 STEP 0.000 0.000 ; + CANPLACE COVER -7250.000 -7250.000 N DO 5 BY 1 STEP 40.000 0.000 ; + CANPLACE CORE -5021.450 -4998.000 N DO 14346 BY 595 STEP 0.700 16.800 ; + CANPLACE CORE -5021.450 -4989.600 FS DO 14346 BY 595 STEP 0.700 16.800 ; + CANNOTOCCUPY CORE -5021.450 -4989.600 FS DO 100 BY 595 STEP 0.700 16.800 ; + CANNOTOCCUPY CORE -5021.450 -4998.000 N DO 100 BY 595 STEP 0.700 16.800 ; + END 100% + GCELLGRID X -6157.200 DO 1467 STEP 8.400 ; + GCELLGRID Y -6157.200 DO 1467 STEP 8.400 ; + GCELLGRID Y -6157.200 DO 1467 STEP 8.400 ; +END M7E4XXX + +MACRO CHK3A +CLASS RING ; + FIXEDMASK ; + SOURCE USER ; + FOREIGN CHKS 0 0 FN ; + ORIGIN 0.9 0.9 ; + EEQ CHK1 ; + LEQ CHK2 ; + SIZE 10.8 BY 28.8 ; +# for testing the lefrWarning.log file +# SITE CORE ; + SYMMETRY X Y R90 ; + SITE CORE ; + POWER 1.0 ; + PROPERTY stringProp "first" integerProp 1 WEIGHT 30.31 ; + + PIN GND + TAPERRULE RULE1 ; + FOREIGN GROUND ( 0 0 ) E ; + FOREIGN CHKS ( 5 4 ) N ; + FOREIGN VCC ( 6 5 ) FE ; + FOREIGN CHK1 ( 7 6 ) W ; + LEQ A ; + DIRECTION INOUT ; + USE GROUND ; + SHAPE ABUTMENT ; + INPUTNOISEMARGIN 6.1 2.3 ; + OUTPUTNOISEMARGIN 5.0 4.6 ; + OUTPUTRESISTANCE 7.4 5.4 ; + POWER 2.0 ; + LEAKAGE 1.0 ; + CAPACITANCE 0.1 ; + RESISTANCE 0.2 ; + PULLDOWNRES 0.5 ; + TIEOFFR 0.8 ; + VHI 5 ; + VLO 0 ; + RISEVOLTAGETHRESHOLD 2.0 ; + FALLVOLTAGETHRESHOLD 2.0 ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + CURRENTSOURCE ACTIVE ; +# ANTENNASIZE 0.6 LAYER RX ; +# NAMETALAREA 3 LAYER M1 ; +# ANTENNAMETALAREA 4 LAYER M2 ; +# ANTENNAMETALLENGTH 5 LAYER M1 ; +# ANTENNAMETALLENGTH 6 LAYER M2 ; + RISESLEWLIMIT 0.01 ; + FALLSLEWLIMIT 0.02 ; + MAXDELAY 21 ; + MAXLOAD 0.1 ; + PROPERTY TYPE "special" intProp 23 realProp 24.25 ; + IV_TABLES LOWT HIGHT ; + + PORT + CLASS CORE ; + LAYER M1 SPACING 0.05 ; + WIDTH 1.0 ; + RECT -0.9 3 9.9 6 ; + VIA 100 300 IN1X ; + END + PORT # 5.7 + CLASS BUMP ; # 5.7 + LAYER M2 SPACING 0.06 ; # 5.7 + END # 5.7 + END GND + PIN VDD + DIRECTION INOUT ; + FOREIGN GROUND STRUCTURE ( 0 0 ) E ; + USE POWER ; + SHAPE ABUTMENT ; + PORT + END + PORT + CLASS NONE ; + LAYER M1 ; + RECT ITERATE -0.9 21 9.9 24 + DO 1 BY 2 STEP 1 1 ; + VIA ITERATE 100 300 nd1VIA12 + DO 1 BY 2 STEP 1 2 ; + END +# ANTENNAMETALAREA 3 LAYER M1 ; +# ANTENNAMETALAREA 4 LAYER M2 ; +# ANTENNAMETALLENGTH 5 LAYER M1 ; +# ANTENNAMETALLENGTH 6 LAYER M2 ; + # Test for combination of both 5.3 & 5.4, which is not allowed + # ANTENNAPARTIALMETALAREA 4 LAYER M1 ; + ANTENNAPARTIALCUTAREA 4.8216 LAYER V1 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.0130 LAYER M2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNAGATEAREA 162.4800 LAYER M2 ; + ANTENNADIFFAREA 5008.4600 LAYER M2 ; + ANTENNAPARTIALMETALAREA 10611.2002 LAYER M2 ; + ANTENNAPARTIALCUTAREA 185.7300 LAYER V2 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.2140 LAYER M3 ; + ANTENNADIFFAREA 5163.8799 LAYER M3 ; + ANTENNAPARTIALMETALAREA 2450.2600 LAYER M3 ; + LEAKAGE 1.0 ; + FALLVOLTAGETHRESHOLD 2.0 ; + RISEVOLTAGETHRESHOLD 2.0 ; + CURRENTSOURCE ACTIVE ; + END VDD + PIN PA3 + DIRECTION INPUT ; + # 5.4 + ANTENNAPARTIALMETALAREA 4 LAYER M1 ; + ANTENNAPARTIALMETALAREA 5 LAYER M2 ; + ANTENNAPARTIALMETALSIDEAREA 5 LAYER M2 ; + ANTENNAPARTIALMETALSIDEAREA 6 LAYER M2 ; + ANTENNAPARTIALMETALSIDEAREA 7 LAYER M2 ; + ANTENNAGATEAREA 1 LAYER M1 ; + ANTENNAGATEAREA 2 ; + ANTENNAGATEAREA 3 LAYER M3 ; + ANTENNADIFFAREA 1 LAYER M1 ; + ANTENNAMAXAREACAR 1 LAYER L1 ; + ANTENNAMAXAREACAR 2 LAYER L2 ; + ANTENNAMAXAREACAR 3 LAYER L3 ; + ANTENNAMAXAREACAR 4 LAYER L4 ; + ANTENNAMAXSIDEAREACAR 1 LAYER L1 ; + ANTENNAMAXSIDEAREACAR 2 LAYER L2 ; + ANTENNAPARTIALCUTAREA 1 ; + ANTENNAPARTIALCUTAREA 2 LAYER M2 ; + ANTENNAPARTIALCUTAREA 3 ; + ANTENNAPARTIALCUTAREA 4 LAYER M4 ; + ANTENNAMAXCUTCAR 1 LAYER L1 ; + ANTENNAMAXCUTCAR 2 LAYER L2 ; + ANTENNAMAXCUTCAR 3 LAYER L3 ; + # Test for combination of both 5.3 & 5.4, which is not allowed + # ANTENNAMETALLENGTH 5 LAYER M1 ; + PORT + LAYER M1 SPACING 0.02 ; + RECT 1.35 -0.45 2.25 0.45 ; + RECT -0.45 -0.45 0.45 0.45 ; + END + PORT + LAYER PC DESIGNRULEWIDTH 0.05 ; + RECT -0.45 12.15 0.45 13.05 ; + END + PORT + LAYER PC ; + RECT -0.45 24.75 0.45 25.65 ; + END + PORT + END + END PA3 + PIN PA0 + DIRECTION INPUT ; + MUSTJOIN PA3 ; + PORT + CLASS NONE ; + LAYER M1 ; + RECT 8.55 8.55 9.45 9.45 ; + RECT 6.75 6.75 7.65 7.65 ; + RECT 6.75 8.55 7.65 9.45 ; + RECT 6.75 10.35 7.65 11.25 ; + END + PORT + CLASS CORE ; + LAYER PC ; + RECT 8.55 24.75 9.45 25.65 ; + END + PORT + LAYER PC ; + RECT 6.75 1.35 7.65 2.25 ; + END + PORT + LAYER PC ; + RECT 6.75 24.75 7.65 25.65 ; + END + PORT + LAYER PC ; + RECT 4.95 1.35 5.85 2.25 ; + END + END PA0 + PIN PA1 + DIRECTION INPUT ; + PORT + LAYER M1 ; + RECT 8.55 -0.45 9.45 0.45 ; + RECT 6.75 -0.45 7.65 0.45 ; + END + PORT + LAYER M1 ; + RECT 8.55 12.15 9.45 13.05 ; + RECT 6.75 12.15 7.65 13.05 ; + RECT 4.95 12.15 5.85 13.05 ; + END + PORT + LAYER PC ; + RECT 4.95 24.75 5.85 25.65 ; + END + PORT + LAYER PC ; + RECT 3.15 24.75 4.05 25.65 ; + END + END PA1 + PIN PA20 + DIRECTION INPUT ; + PORT + LAYER M1 ; + POLYGON 15 35 15 60 65 60 65 35 15 35 ; + END + PORT + LAYER M1 ; + PATH 8.55 12.15 9.45 13.05 ; + END + END PA20 + PIN PA21 + DIRECTION OUTPUT TRISTATE ; + PORT + LAYER M1 ; + POLYGON ITERATE 20 35 20 60 70 60 70 35 DO 1 BY 2 STEP 5 5 ; + END + PORT + LAYER M1 ; + PATH ITERATE 5.55 12.15 10.45 13.05 DO 1 BY 2 STEP 2 2 ; + END + END PA21 + OBS + LAYER M1 SPACING 5.6 ; + RECT 6.6 -0.6 9.6 0.6 ; + RECT 4.8 12 9.6 13.2 ; + RECT 3 13.8 7.8 16.8 ; + RECT 3 -0.6 6 0.6 ; + RECT 3 8.4 6 11.4 ; + RECT 3 8.4 4.2 16.8 ; + RECT -0.6 13.8 4.2 16.8 ; + RECT -0.6 -0.6 2.4 0.6 ; + RECT 6.6 6.6 9.6 11.4 ; + RECT 6.6 6.6 7.8 11.4 ; + END + TIMING + FROMPIN PA21 ; + TOPIN PA20 ; + RISE INTRINSIC .39 .41 1.2 .25 .29 1.8 .67 .87 2.2 + VARIABLE 0.12 0.13 ; + FALL INTRINSIC .24 .29 1.3 .26 .31 1.7 .6 .8 2.1 + VARIABLE 0.11 0.14 ; + RISERS 83.178 90.109 ; + FALLRS 76.246 97.041 ; + RISECS 0.751 0.751 ; + FALLCS 0.751 0.751 ; + RISET0 0.65493 0.65493 ; + FALLT0 0.38 0.38 ; + RISESATT1 0 0 ; + FALLSATT1 0.15 0.15 ; + UNATENESS INVERT ; + END TIMING +END CHK3A + +MACRO INV + CLASS CORE ; + SOURCE BLOCK ; + FOREIGN INVS ; + POWER 1.0 ; + SIZE 67.2 BY 24 ; + SYMMETRY X Y R90 ; + SITE CORE1 ; + + PIN Z DIRECTION OUTPUT ; + USE SIGNAL ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.1 ; + MAXDELAY 21 ; + POWER 0.1 ; + ANTENNAPARTIALCUTAREA 4.8216 LAYER V1 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.0130 LAYER M2 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNAGATEAREA 162.4800 LAYER M2 ; + ANTENNADIFFAREA 5008.4600 LAYER M2 ; + ANTENNAPARTIALMETALAREA 10611.2002 LAYER M2 ; + ANTENNAPARTIALCUTAREA 185.7300 LAYER V2 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.2140 LAYER M3 ; + ANTENNADIFFAREA 5163.8799 LAYER M3 ; + ANTENNAPARTIALMETALAREA 2450.2600 LAYER M3 ; + PORT + LAYER M2 ; + PATH 30.8 9 42 9 ; + END + END Z + + PIN A DIRECTION INPUT ; + USE ANALOG ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.08 ; + MAXDELAY 21 ; + PORT + LAYER M1 ; + PATH 25.2 15 ; + END + END A + + PIN VDD DIRECTION INOUT ; + SHAPE ABUTMENT ; + POWER 0.1 ; + ANTENNAPARTIALCUTAREA 4.8216 LAYER V1 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.0130 LAYER M2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNAGATEAREA 162.4800 LAYER M2 ; + ANTENNADIFFAREA 5008.4600 LAYER M2 ; + ANTENNAPARTIALMETALAREA 10611.2002 LAYER M2 ; + ANTENNAPARTIALCUTAREA 185.7300 LAYER V2 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.2140 LAYER M3 ; + ANTENNADIFFAREA 5163.8799 LAYER M3 ; + ANTENNAPARTIALMETALAREA 2450.2600 LAYER M3 ; + ANTENNAMODEL OXIDE2 ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH 50.4 2.8 50.4 21.2 ; + END + END VDD + + PIN VSS DIRECTION INOUT ; + SHAPE ABUTMENT ; + POWER 0.1 ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH 16.8 2.8 16.8 21.2 ; + END + END VSS + + TIMING + FROMPIN A ; + TOPIN Z ; + RISE INTRINSIC .39 .41 1.2 .25 .29 1.8 .67 .87 2.2 + VARIABLE 0.12 0.13 ; + FALL INTRINSIC .24 .29 1.3 .26 .31 1.7 .6 .8 2.1 + VARIABLE 0.11 0.14 ; + RISERS 83.178 90.109 ; + FALLRS 76.246 97.041 ; + RISECS 0.751 0.751 ; + FALLCS 0.751 0.751 ; + RISET0 0.65493 0.65493 ; + FALLT0 0.38 0.38 ; + RISESATT1 0 0 ; + FALLSATT1 0.15 0.15 ; + UNATENESS INVERT ; + END TIMING + + OBS + LAYER M1 DESIGNRULEWIDTH 4.5 ; + WIDTH 0.1 ; + RECT MASK 2 24.1 1.5 43.5 16.5 ; + RECT MASK 2 ITERATE 24.1 1.5 43.5 16.5 + DO 2 BY 1 STEP 20.0 0 ; + PATH MASK 3 ITERATE 532.0 534 1999.2 534 + DO 1 BY 2 STEP 0 1446 ; + VIA ITERATE MASK 123 470.4 475 VIABIGPOWER12 + DO 2 BY 2 STEP 1590.4 1565 ; + PATH MASK 3 532.0 534 1999.2 534 ; + PATH MASK 3 532.0 1980 1999.2 1980 ; + VIA MASK 103 470.4 475 VIABIGPOWER12 ; + VIA MASK 132 2060.8 475 VIABIGPOWER12 ; + VIA MASK 112 470.4 2040 VIABIGPOWER12 ; + VIA MASK 123 2060.8 2040 VIABIGPOWER12 ; + RECT 44.1 1.5 63.5 16.5 ; + END + + DENSITY + LAYER metal1 ; + RECT 0 0 100 100 45.5 ; #rec from (0,0) to (100,100), density of 45.5% + RECT 100 0 200 100 42.2 ; + LAYER metal2 ; + RECT 0 0 250 140 20.5 ; + RECT 1 1 250 140 20.5 ; + RECT 2 2 250 140 20.5 ; + LAYER metal3 ; + RECT 10 10 40 40 4.5 ; + END +END INV + +MACRO INV_B + EEQ INV ; + CLASS CORE SPACER ; + FOREIGN INVS ( 4 5 ) ; + FOREIGN INV1 ( 5 6 ) S ; + FOREIGN INV2 ( 6 7 ) N ; + FOREIGN INV3 ( 7 8 ) ; + POWER 1.0 ; + SIZE 67.2 BY 24 ; + SYMMETRY X Y R90 ; + SITE CORE1 ; + PIN Z DIRECTION OUTPUT ; + USE CLOCK ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.1 ; + MAXDELAY 21 ; + POWER 0.1 ; + PORT + LAYER M1 ; + WIDTH 1 ; + PATH MASK 2 ( -0.6 -0.6 ) ( 0.6 -0.6 ) ( 0.7 -0.6 ) ; + LAYER M2 ; + WIDTH 1 ; + RECT MASK 1 ( -0.6 -0.6 ) ( 0.6 0.6 ) ; + LAYER M3 ; + WIDTH 1 ; + RECT MASK 2 ITERATE ( -0.6 -0.6 ) ( 0.6 0.6 ) + DO 1 BY 2 STEP 2 1 ; + LAYER M4 ; + PATH MASK 1 30.8 9 42 9 ; + VIA MASK 103 470.4 475 VIABIGPOWER12 ; + VIA MASK 130 2060.8 475 VIABIGPOWER12 ; + VIA MASK 113 470.4 2040 VIABIGPOWER12 ; + VIA MASK 121 2060.8 2040 VIABIGPOWER12 ; + END + END Z + + PIN A DIRECTION FEEDTHRU ; + USE SIGNAL ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.08 ; + MAXDELAY 21 ; + PORT + LAYER M1 ; + PATH 25.2 15 ; + END + END A + + PIN VDD DIRECTION INOUT ; + SHAPE ABUTMENT ; + POWER 0.1 ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH 50.4 2.8 50.4 21.2 ; + END + END VDD + + PIN VSS DIRECTION INOUT ; + SHAPE ABUTMENT ; + POWER 0.1 ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH 16.8 2.8 16.8 21.2 ; + END + END VSS + + TIMING + FROMPIN A ; + TOPIN Z ; + RISE INTRINSIC .39 .41 1.2 .25 .29 1.8 .67 .87 2.2 + VARIABLE 0.12 0.13 ; + FALL INTRINSIC .24 .29 1.3 .26 .31 1.7 .6 .8 2.1 + VARIABLE 0.11 0.14 ; + RISERS 83.178 90.109 ; + FALLRS 76.246 97.041 ; + RISECS 0.751 0.751 ; + FALLCS 0.751 0.751 ; + RISET0 0.65493 0.65493 ; + FALLT0 0.38 0.38 ; + RISESATT1 0 0 ; + FALLSATT1 0.15 0.15 ; + UNATENESS INVERT ; + END TIMING + + OBS + LAYER M1 ; + RECT 24.1 1.5 43.5 16.5 ; + END +END INV_B + +MACRO DFF3 + CLASS CORE ANTENNACELL ; + FOREIGN DFF3S ; + POWER 4.0 ; + SIZE 67.2 BY 210 ; + SYMMETRY X Y R90 ; + SITE CORE 34 54 FE DO 30 BY 3 STEP 1 1 ; + SITE CORE1 21 68 S DO 30 BY 3 STEP 2 2 ; + + PIN Q DIRECTION OUTPUT ; + USE SIGNAL ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.12 ; + MAXDELAY 20 ; + POWER 0.4 ; + PORT + LAYER M2 ; + PATH 19.6 99 47.6 99 ; + END + END Q + + PIN QN DIRECTION OUTPUT ; + USE SIGNAL ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.11 ; + MAXDELAY 20 ; + POWER 0.4 ; + PORT + LAYER M2 ; + PATH MASK 1 25.2 123 42 123 ; + RECT MASK 2 24.1 1.5 43.5 208.5 ; + END + END QN + + PIN D DIRECTION INPUT ; + USE SIGNAL ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.13 ; + MAXDELAY 20 ; + POWER 0.4 ; + PORT + LAYER M1 ; + PATH 30.8 51 ; + END + END D + + PIN G DIRECTION INPUT ; + USE SIGNAL ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.11 ; + MAXDELAY 20 ; + POWER 0.4 ; + PORT + LAYER M1 ; + PATH 25.2 3 ; + END + END G + + PIN CD DIRECTION INPUT ; + USE CLOCK ; + RISETHRESH 22 ; + FALLTHRESH 100 ; + RISESATCUR 4 ; + FALLSATCUR .5 ; + VLO 0 ; + VHI 5 ; + CAPACITANCE 0.1 ; + MAXDELAY 20 ; + POWER 0.4 ; + PORT + LAYER M1 ; + PATH 36.4 75 ; + END + END CD + + PIN VDD DIRECTION INOUT ; + SHAPE RING ; + POWER 0.4 ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH 50.4 2.8 50.4 207.2 ; + END + END VDD + + PIN VSS DIRECTION INOUT ; + SHAPE FEEDTHRU ; + POWER 0.4 ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH 16.8 2.8 16.8 207.2 ; + END + END VSS + + TIMING + FROMPIN D ; + TOPIN Q ; + RISE INTRINSIC .51 .6 1.4 .37 .45 1.7 .6 .81 2.1 + VARIABLE 0.06 0.1 ; + FALL INTRINSIC 1 1.2 1.4 1.77 1.85 1.8 .56 .81 2.4 + VARIABLE 0.08 0.09 ; + RISERS 41.589 69.315 ; + FALLRS 55.452 62.383 ; + RISECS 0.113 0.113 ; + FallCS 0.113 0.113 ; + RISET0 0.023929 0.023929 ; + FALLT0 0.38 0.38 ; + RISESATT1 0 0 ; + FALLSATT1 0.15 0.15 ; + UNATENESS NONINVERT ; + END TIMING + + OBS + LAYER M1 DESIGNRULEWIDTH 0.15 ; + RECT 24.1 1.5 43.5 208.5 ; + PATH 8.4 3 8.4 123 ; + PATH 58.8 3 58.8 123 ; + PATH 64.4 3 64.4 123 ; + END + + DENSITY + LAYER metal4 ; + RECT 24.1 1.5 43.5 208.5 5.5 ; + END +END DFF3 + +MACRO BUF1 + CLASS ENDCAP BOTTOMLEFT ; + PIN IN + ANTENNAGATEAREA 1 ; + ANTENNAGATEAREA 3 ; + ANTENNADIFFAREA 0 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAGATEAREA 2 ; + ANTENNAGATEAREA 4 ; + ANTENNADIFFAREA 0 ; + END IN + PIN IN2 + ANTENNAGATEAREA 1 ; + END IN2 + PIN IN3 + SHAPE ABUTMENT ; + END IN3 + PIN GND + USE GROUND ; + PORT + LAYER metal1 ; + POLYGON 0 0 0 1.0 1.0 0 2.0 2.0 2.0 0 ; + RECT 2.0 3.0 4.0 5.0 ; + END + END GND + OBS + LAYER metal2 EXCEPTPGNET ; # 5.7 + POLYGON 0 0 0 1.0 1.0 0 2.0 2.0 2.0 0 ; + RECT 2.0 3.0 4.0 5.0 ; + END +END BUF1 + +MACRO DFF4 + CLASS COVER BUMP ; + FOREIGN DFF3S ; + POWER 4.0 ; +END DFF4 + +MACRO DFF5 + CLASS COVER ; + FOREIGN DFF3S ; +END DFF5 + +MACRO mydriver + CLASS PAD AREAIO ; + FOREIGN DFF3S ; +END mydriver + +MACRO myblackbox + CLASS BLOCK BLACKBOX ; + FOREIGN DFF3S ; +END myblackbox + +MACRO FWHSQCN690V15 + CLASS CORE ; + FOREIGN FWHSQCN690 0.00 0.00 ; + SIZE 15.36 BY 4.80 ; + SYMMETRY Y X ; + ORIGIN 0.0 0.0 ; + SITE CORE ; + PIN R DIRECTION INPUT ; + CAPACITANCE 0.004872 ; + USE SIGNAL ; + PORT + LAYER a1sig ; + RECT 11.43 0.80 11.71 1.20 ; + RECT 9.94 0.80 11.43 1.04 ; + LAYER a1sig ; + RECT 9.49 0.80 9.71 0.82 ; + RECT 9.71 0.80 9.93 1.04 ; + RECT 9.92 0.80 9.94 1.04 ; + RECT 9.00 2.06 9.72 2.08 ; + RECT 9.39 0.80 9.47 1.78 ; + RECT 9.46 0.80 9.48 1.78 ; + RECT 9.47 0.80 9.49 1.77 ; + RECT 9.48 0.81 9.72 2.07 ; + RECT 9.00 1.77 9.48 2.07 ; + END + END R + PIN SI DIRECTION INPUT ; + CAPACITANCE 0.002213 ; + USE SIGNAL ; + PORT + LAYER a1sig ; +# RECT 4.00 2.07 4.20 2.36 ; +# RECT 4.19 2.07 4.21 2.36 ; +# RECT 4.21 2.07 4.44 2.25 ; +# RECT 4.21 2.24 4.44 2.26 ; +# RECT 4.20 2.25 4.44 3.03 ; + END + END SI + PIN SM DIRECTION INPUT ; + CAPACITANCE 0.002307 ; + USE SIGNAL ; + PORT + LAYER a1sig ; + RECT 0.82 3.51 1.08 3.89 ; + LAYER a1sig ; + RECT 0.36 3.51 0.59 3.69 ; + RECT 0.36 3.68 0.59 3.70 ; + RECT 0.59 3.51 0.81 3.89 ; + RECT 0.59 3.51 0.81 3.89 ; + RECT 0.80 3.51 0.82 3.89 ; + RECT 0.36 3.69 0.60 3.99 ; + LAYER a1sig ; + END + END SM + PIN T DIRECTION INPUT ; + CAPACITANCE 0.002260 ; + USE SIGNAL ; + PORT + LAYER a1sig ; +# RECT 5.14 3.51 5.15 3.99 ; + LAYER a1sig ; + RECT 4.85 3.51 4.91 3.70 ; + RECT 4.91 3.51 5.13 3.99 ; + RECT 5.12 3.51 5.14 3.99 ; + RECT 4.20 3.69 4.92 3.99 ; + END + END T + OBS + LAYER a1sig SPACING 0 ; + RECT 0.11 0.74 0.81 3.47 ; + RECT 0.80 0.74 0.82 3.47 ; + RECT 0.82 0.74 2.54 4.06 ; + RECT 2.54 0.74 3.70 3.47 ; + RECT 3.70 0.74 3.98 4.06 ; + RECT 3.98 0.74 5.14 3.47 ; + RECT 5.14 0.74 8.78 4.06 ; + RECT 8.78 0.74 9.94 1.54 ; + RECT 8.78 1.53 9.94 1.55 ; + RECT 8.78 2.29 9.94 4.06 ; + RECT 9.94 0.74 14.06 4.06 ; + RECT 14.06 0.74 15.24 2.51 ; + RECT 15.23 0.74 15.25 2.51 ; + RECT 14.06 3.25 15.25 4.05 ; + RECT 14.06 4.04 15.25 4.06 ; + END +END FWHSQCN690V15 + +MACRO mysoft + CLASS BLOCK SOFT ; + FOREIGN DFF3S ; + OBS + LAYER a1sig DESIGNRULEWIDTH 0 ; + RECT 0.11 0.74 0.81 3.47 ; + END +END mysoft + +MACRO mycorewelltap + CLASS CORE WELLTAP ; + FOREIGN DFF3S ; +END mycorewelltap + +MACRO myTest + CLASS CORE ; + SIZE 10.0 BY 14.0 ; #uses two F and one L site, is F+L wide,and double height + SYMMETRY X ; #can flip about X-axis + SITE Fsite 0 0 N ; #the lower, left Fsite at 0,0 + SITE Fsite 0 7.0 FS ; #the flipped-south Fsite above the first Fsite at 0,7 + SITE Lsite 4.0 0 N ; #the Lsite to the right of the first Fsite at 4,0 + SITE Lsite 0 0 S DO 2 BY 1 STEP 4 5 ; + SITE Fsite 4.0 0 E ; + SITE Fsite ; + SITE Lsite 0.3 0 S DO 2 BY 1 STEP 4 5 ; + SITE Fsite 0 0 N DO 2 BY 1 STEP 4.0 0 ; +END myTest + +MACRO myMac + CLASS CORE ; + SIZE 10.0 BY 14.0 ; + SYMMETRY X ; + PIN In1 + USE SIGNAL ; + SUPPLYSENSITIVITY vddpin1 ; #if in1 is 1'b1, use net connected to vddpin1 + #note, no GROUNDSENSITIVITY is needed because + #only one ground pin exists, so 1'b0 implicitly + #means net from pin gndpin + CAPACITANCE 0.12 ; + MAXDELAY 20 ; + END In1 + PIN vddpin1 + USE SIGNAL ; + CAPACITANCE 0.11 ; + MAXDELAY 20 ; + NETEXPR "power1 VDD1" ; #if power1 is defined in the netlist, use it to + #find the net connection, else use net VDD1 + POWER 0.4 ; + END vddpin1 + PIN vddpin2 + USE SIGNAL ; + MAXDELAY 20 ; + NETEXPR "power2 VDD2" ; #if power2 is defined in the netlist, use it to + #find the net connection, else use net VDD2 + POWER 0.4 ; + END vddpin2 + PIN gndpin + USE SIGNAL ; + NETEXPR "gnd1 GND" ; #if gnd1 is defined in the netlist, use it to + #find the net connection, else use net GND + MAXDELAY 20 ; + POWER 0.4 ; + END gndpin + PIN In2 + USE SIGNAL ; + GROUNDSENSITIVITY gndpin ; + POWER 0.6 ; + END In2 +END myMac + +ANTENNAINPUTGATEAREA 45 ; +ANTENNAINOUTDIFFAREA 65 ; +ANTENNAOUTPUTDIFFAREA 55 ; + +#INPUTPINANTENNASIZE 1 ; +#OUTPUTPINANTENNASIZE -1 ; +#INOUTPINANTENNASIZE -1 ; + +BEGINEXT "SIGNATURE" + CREATOR "CADENCE" + DATE "04/14/98" +ENDEXT + +#END LIBRARY This is optional in 5.6 diff --git a/lefdef/src/lef/TEST/complete.5.8.lef.au b/lefdef/src/lef/TEST/complete.5.8.lef.au new file mode 100644 index 00000000..09007615 --- /dev/null +++ b/lefdef/src/lef/TEST/complete.5.8.lef.au @@ -0,0 +1,1574 @@ +VERSION 5.8 ; +FIXEDMASK ; +BUSBITCHARS "<>" ; +DIVIDER : ; +USEMINSPACING OBS OFF ; +CLEARANCEMEASURE EUCLIDEAN ; +CLEARANCEMEASURE MAXXY ; +UNITS + DATABASE MICRONS 20000 ; + CAPACITANCE PICOFARADS 10 ; + RESISTANCE OHMS 10000 ; + POWER MILLIWATTS 10000 ; + CURRENT MILLIAMPS 10000 ; + VOLTAGE VOLTS 1000 ; + FREQUENCY MEGAHERTZ 10 ; +END UNITS +MANUFACTURINGGRID 3.5 ; +PROPERTYDEFINITIONS + library NAME Cadence96 + library intNum INTEGER 20 + library realNum REAL 21.22 + library LEF57_MAXFLOATINGAREAGATE MAXFLOATINGAREA GATEISGROUND; + layer lsp STRING + layer lip INTEGER + layer lrp REAL + layer LEF57_SPACING STRING + layer LEF57_SPACINGADJACENTCUTS STRING + layer LEF57_MAXFLOATINGAREA STRING + layer LEF57_ARRAYSPACING STRING + layer LEF57_SPACINGSAMENET STRING + layer LEF57_MINSTEP STRING + layer LEF57_ANTENNAGATEPLUSDIFF STRING + layer LEF57_ANTENNACUMROUTINGPLUSCUT STRING + layer LEF57_ANTENNAAREAMINUSDIFF STRING + layer LEF57_ANTENNAAREADIFFREDUCEPWL STRING + layer LEF57_ENCLOSURE STRING + via stringProperty STRING + via realProperty REAL + via COUNT INTEGER RANGE 1 100 +Parsed 50 number of lines!! + viarule vrsp STRING + viarule vrip INTEGER + viarule vrrp REAL + nondefaultrule ndrsp STRING + nondefaultrule ndrip INTEGER + nondefaultrule ndrrp REAL + macro stringProp STRING + macro integerProp INTEGER + macro WEIGHT REAL RANGE 1 100 + pin TYPE STRING + pin intProp INTEGER + pin realProp REAL +END PROPERTYDEFINITIONS +LAYER POLYS + TYPE MASTERSLICE ; + PROPERTY lsp top STRING lip 1 INTEGER lrp 2.3 REAL ; +END POLYS +LAYER POLYS01 + TYPE MASTERSLICE ; +END POLYS01 +LAYER CUT01 + TYPE CUT ; + PITCH 1.2 1.3 ; + OFFSET 0.5 0.6 ; + DIAGPITCH 6.5 ; + ARRAYSPACING WIDTH 2 CUTSPACING 0.2 + ARRAYCUTS 3 SPACING 1 ; + SPACING 0.35 ADJACENTCUTS 3 WITHIN 0.25 ; + SPACING 1.5 PARALLELOVERLAP ; +ENCLOSURE ABOVE 0.01 0.05 ; +ENCLOSURE BELOW 0.03 0.05 WIDTH 3.1 EXCEPTEXTRACUT 1.5 ; +ENCLOSURE 0.05 0.05 ; + PROPERTY lip 5 INTEGER LEF57_SPACING SPACING 1.5 PARALLELOVERLAP ; STRING LEF57_ARRAYSPACING ARRAYSPACING WIDTH 2.0 CUTSPACING 0.2 ARRAYCUTS 3 SPACING 1.0 ; STRING LEF57_ENCLOSURE ENCLOSURE ABOVE .01 .05 ; STRING LEF57_ENCLOSURE ENCLOSURE ABOVE .02 .05 WIDTH 3.1 EXCEPTEXTRACUT 1.5 NOSHAREDEDGE ; STRING LEF57_ENCLOSURE ENCLOSURE BELOW .03 .05 WIDTH 3.1 EXCEPTEXTRACUT 1.5 ; STRING LEF57_ENCLOSURE ENCLOSURE .05 .05 ; STRING LEF57_ENCLOSURE ENCLOSURE BELOW .08 .05 WIDTH 3.1 EXCEPTEXTRACUT 1.5 NOSHAREDEDGE ; STRING ; +END CUT01 +Parsed 100 number of lines!! +Parsed 150 number of lines!! +LAYER RX + TYPE ROUTING ; + MASK 2 ; + PITCH 1.8 ; + OFFSET 0.9 ; + WIDTH 1 ; + AREA 34.1 ; + ARRAYSPACING LONGARRAY CUTSPACING 0.2 + ARRAYCUTS 3 SPACING 1 + ARRAYCUTS 4 SPACING 1.5 + ARRAYCUTS 5 SPACING 2 ; + SPLITWIREWIDTH 5 ; + MINIMUMDENSITY 4 ; + MAXIMUMDENSITY 10 ; + DENSITYCHECKSTEP 2 ; + FILLACTIVESPACING 4 ; + MINIMUMCUT 2 WIDTH 2.5 ; + SPACING 0.6 ; + SPACING 0.18 LENGTHTHRESHOLD 0.9 ; + SPACING 0.4 RANGE 0.1 0.12 ; + SPACING 0.32 RANGE 1.01 2000 USELENGTHTHRESHOLD ; + SPACING 0.1 RANGE 0.1 0.1 INFLUENCE 2.01 RANGE 2.1 10000 ; + SPACING 0.44 RANGE 1 1 INFLUENCE 1.01 ; + SPACING 0.33 RANGE 1.01 20 INFLUENCE 1.01 ; + SPACING 0.7 RANGE 0.3 0.15 USELENGTHTHRESHOLD ; + SPACING 0.5 ; + SPACING 0.6 RANGE 4.5 6.12 RANGE 3 3.1 ; + SPACING 4.3 RANGE 0.1 0.1 INFLUENCE 3.81 RANGE 0.1 0.2 ; + SPACING 0.53 LENGTHTHRESHOLD 0.45 RANGE 0 0.1; + SPACING 2.2 ENDOFLINE 2.3 WITHIN 1.6 ; + DIRECTION HORIZONTAL ; + RESISTANCE RPERSQ 0.103 ; + CAPACITANCE CPERSQDIST 0.000156 ; + EDGECAPACITANCE 5e-05 ; + TYPE 9 ; + THICKNESS 1 ; + WIREEXTENSION 0.75 ; + SHRINKAGE 0.1 ; + CAPMULTIPLIER 1 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAAREAFACTOR 1 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAAREARATIO 7.6 ; + ANTENNADIFFAREARATIO 4.7 ; + ANTENNACUMAREARATIO 6.7 ; + ANTENNACUMDIFFAREARATIO 4.5 + ANTENNACUMDIFFAREARATIO PWL ( ( 5.4 5.4 ) ( 6.5 6.5 ) ( 7.5 7.5 ) ) ; + ANTENNAAREAFACTOR 6.5 DIFFUSEONLY ; + ANTENNASIDEAREARATIO 6.5 ; + ANTENNADIFFSIDEAREARATIO 6.5 + ANTENNACUMSIDEAREARATIO 7.5 ; + ANTENNACUMDIFFSIDEAREARATIO 4.6 + ANTENNASIDEAREAFACTOR 7.5 DIFFUSEONLY ; + ANTENNACUMROUTINGPLUSCUT ; + ANTENNAGATEPLUSDIFF 2 ; + ANTENNAAREAMINUSDIFF 100 ; + ANTENNAAREADIFFREDUCEPWL ( ( 0 1 ) ( 0.09999 1 ) ( 0.1 0.2 ) ( 1 0.1 ) ( 1000 0.1 ) ) ; + ANTENNAMODEL OXIDE3 ; + ANTENNAMODEL OXIDE4 ; + ANTENNACUMROUTINGPLUSCUT ; + ANTENNAGATEPLUSDIFF 2 ; + ANTENNAAREAMINUSDIFF 100 ; + ANTENNAAREADIFFREDUCEPWL ( ( 0 1 ) ( 0.0999 1 ) ( 0.1 0.2 ) ( 1 0.1 ) ( 1000 0.1 ) ) ; + ACCURRENTDENSITY PEAK + FREQUENCY 1e+06 1e+08 ; + TABLEENTRIES + 5e-07 4e-07 ; + ACCURRENTDENSITY AVERAGE 5.5 ; + ACCURRENTDENSITY RMS + FREQUENCY 1e+08 4e+08 8e+08 ; + WIDTH 0.4 0.8 10 50 100 ; + TABLEENTRIES + 2e-06 1.9e-06 1.8e-06 1.7e-06 1.5e-06 + 1.4e-06 1.3e-06 1.2e-06 1.1e-06 1e-06 + 9e-07 8e-07 7e-07 6e-07 4e-07 ; + DCCURRENTDENSITY AVERAGE + WIDTH 20 50 ; + TABLEENTRIES 6e-07 5e-07 ; + PROPERTY LEF57_SPACING SPACING 2.2 ENDOFLINE 2.3 WITHIN 1.6 ; STRING LEF57_ARRAYSPACING ARRAYSPACING LONGARRAY CUTSPACING 0.2 ARRAYCUTS 3 SPACING 1.0 ARRAYCUTS 4 SPACING 1.5 ARRAYCUTS 5 SPACING 2.0 ; STRING LEF57_ANTENNACUMROUTINGPLUSCUT ANTENNACUMROUTINGPLUSCUT ; STRING LEF57_ANTENNAAREAMINUSDIFF ANTENNAAREAMINUSDIFF 100.0 ; STRING LEF57_ANTENNAGATEPLUSDIFF ANTENNAGATEPLUSDIFF 2.0 ; STRING LEF57_ANTENNAAREADIFFREDUCEPWL ANTENNAAREADIFFREDUCEPWL ( ( 0.0 1.0 ) ( 0.0999 1.0 ) ( 0.1 0.2 ) ( 1.0 0.1 ) ( 1000.0 0.1 ) ) ; STRING lsp rxlay STRING lip 3 INTEGER lrp 1.2 REAL ; +END RX +Parsed 200 number of lines!! +LAYER CUT12 + TYPE CUT ; + DIAGPITCH 1.5 1.7 ; + DIAGWIDTH 1.6 ; + DIAGSPACING 0.5 ; + SPACING 0.7 LAYER RX ; + SPACING 0.22 ADJACENTCUTS 4 WITHIN 0.25 ; + SPACING 1.5 PARALLELOVERLAP ; + SPACING 1.2 ADJACENTCUTS 2 WITHIN 1.5 EXCEPTSAMEPGNET ; + ANTENNAMODEL OXIDE1 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNAMODEL OXIDE4 ; + ANTENNAAREARATIO 5.6 ; + ANTENNADIFFAREARATIO 6.5 ; + ANTENNACUMAREARATIO 6.7 ; + ANTENNACUMDIFFAREARATIO 5.6 + ANTENNACUMDIFFAREARATIO PWL ( ( 5.4 5.4 ) ( 6.5 6.5 ) ( 7.5 7.5 ) ) ; + ANTENNAAREAFACTOR 5.4 ; + ANTENNACUMROUTINGPLUSCUT ; + ANTENNAGATEPLUSDIFF 2 ; + ANTENNAAREAMINUSDIFF 100 ; + ANTENNAAREADIFFREDUCEPWL ( ( 0 1 ) ( 0.09999 1 ) ( 0.1 0.2 ) ( 1 0.1 ) ( 1000 0.1 ) ) ; + ACCURRENTDENSITY PEAK + FREQUENCY 1e+06 1e+08 ; + TABLEENTRIES + 5e-07 4e-07 ; + ACCURRENTDENSITY AVERAGE 5.5 ; + ACCURRENTDENSITY RMS + FREQUENCY 1e+08 4e+08 8e+08 ; + CUTAREA 0.4 0.8 10 50 100 ; + TABLEENTRIES + 2e-06 1.9e-06 1.8e-06 1.7e-06 1.5e-06 + 1.4e-06 1.3e-06 1.2e-06 1.1e-06 1e-06 + 9e-07 8e-07 7e-07 6e-07 4e-07 ; + DCCURRENTDENSITY AVERAGE + CUTAREA 2 5 ; + TABLEENTRIES 5e-07 4e-07 ; + DCCURRENTDENSITY AVERAGE 4.9 ; +END CUT12 +Parsed 250 number of lines!! +LAYER PC + TYPE ROUTING ; + PITCH 3.8 3.5 ; + DIAGPITCH 1.4 ; + WIDTH 1 ; + SPACING 0.6 ; + SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 ; + SPACING 1.3 ENDOFLINE 1.4 WITHIN 0.7 PARALLELEDGE 1.1 WITHIN 0.5 TWOEDGES ; + SPACING 1.4 ENDOFLINE 1.5 WITHIN 0.8 PARALLELEDGE 1.2 WITHIN 0.6 ; + DIRECTION VERTICAL ; + WIREEXTENSION 0.4 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAAREARATIO 5.4 ; + ANTENNADIFFAREARATIO 6.5 ; + ANTENNACUMAREARATIO 7.5 ; + ANTENNACUMDIFFAREARATIO PWL ( ( 5 5.1 ) ( 6 6.1 ) ) ; + ANTENNAAREAFACTOR 4.5 ; + ANTENNASIDEAREARATIO 6.5 ; + ANTENNADIFFSIDEAREARATIO PWL ( ( 7 7.1 ) ( 7.2 7.3 ) ) ; + ANTENNACUMSIDEAREARATIO 7.4 ; + ANTENNACUMDIFFSIDEAREARATIO PWL ( ( 8 8.1 ) ( 8.2 8.3 ) ( 8.4 8.5 ) ( 8.6 8.7 ) ) ; + ANTENNASIDEAREAFACTOR 9 DIFFUSEONLY ; + ACCURRENTDENSITY PEAK + FREQUENCY 1e+06 1e+08 ; + WIDTH 5.6 8.5 8.1 4.5 ; + TABLEENTRIES + 5e-07 4e-07 ; + DCCURRENTDENSITY AVERAGE + WIDTH 20 50 100 ; + TABLEENTRIES 1e-06 7e-07 5e-07 ; +END PC +LAYER CA + TYPE CUT ; + DCCURRENTDENSITY AVERAGE + CUTAREA 2 5 10 ; + TABLEENTRIES 6e-07 5e-07 4e-07 ; +END CA +LAYER M1 + TYPE ROUTING ; + PITCH 1.8 ; + WIDTH 1 ; + DIRECTION HORIZONTAL ; + RESISTANCE RPERSQ 0.103 ; + CAPACITANCE CPERSQDIST 0.000156 ; + WIREEXTENSION 7 ; + ANTENNAMODEL OXIDE1 ; + ANTENNADIFFAREARATIO 1000 ; + ANTENNACUMAREARATIO 300 ; + ANTENNACUMDIFFAREARATIO 5000 + ANTENNAGATEPLUSDIFF 2 ; + ACCURRENTDENSITY AVERAGE 5.5 ; + DCCURRENTDENSITY AVERAGE 4.9 ; + SPACINGTABLE + PARALLELRUNLENGTH 0 0.5 3 5 + WIDTH 0 0.15 0.15 0.15 0.15 + WIDTH 0.25 0.15 0.2 0.2 0.2 + WIDTH 1.5 0.15 0.5 0.5 0.5 + WIDTH 3 0.15 0.5 1 1 + WIDTH 5 0.15 0.5 1 2 ; + SPACINGTABLE + INFLUENCE + WIDTH 1.5 WITHIN 0.5 SPACING 0.5 + WIDTH 3 WITHIN 1 SPACING 1 + WIDTH 5 WITHIN 2 SPACING 2 ; +END M1 +Parsed 300 number of lines!! +LAYER V1 + TYPE CUT ; + SPACING 0.6 LAYER CA ; +END V1 +LAYER M2 + TYPE ROUTING ; + PITCH 1.8 ; + WIDTH 0.9 ; + SPACING 0.9 ; + SPACING 0.28 ; + SPACING 0.24 LENGTHTHRESHOLD 1 ; + SPACING 0.32 RANGE 1.01 9.99 USELENGTHTHRESHOLD ; + SPACING 0.5 RANGE 10 1000 ; + SPACING 0.5 RANGE 10 1000 INFLUENCE 1 ; + SPACING 0.5 RANGE 10 1000 INFLUENCE 1 RANGE 0.28 1 ; + SPACING 0.5 RANGE 3.01 4 RANGE 4.01 5 ; + SPACING 0.4 RANGE 3.01 4 RANGE 5.01 1000 ; + SPACING 1 SAMENET PGONLY ; + SPACING 1.1 SAMENET ; + SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 PARALLELEDGE 2.1 WITHIN 1.5 TWOEDGES ; + SPACING 1.5 ENDOFLINE 2.3 WITHIN 1.6 PARALLELEDGE 1.1 WITHIN 0.5 ; + DIRECTION DIAG45 ; + RESISTANCE RPERSQ 0.0608 ; + CAPACITANCE CPERSQDIST 0.000184 ; + WIREEXTENSION 8 ; + ANTENNAMODEL OXIDE1 ; + ANTENNACUMAREARATIO 5000 ; + ANTENNACUMDIFFAREARATIO 8000 + ANTENNAMODEL OXIDE2 ; + ANTENNACUMAREARATIO 500 ; + ANTENNACUMDIFFAREARATIO 800 + ANTENNAMODEL OXIDE3 ; + ANTENNACUMAREARATIO 300 ; + ANTENNACUMDIFFAREARATIO 600 + PROPERTY LEF57_SPACING SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 PARALLELEDGE 2.1 WITHIN 1.5 TWOEDGES ; STRING LEF57_SPACING SPACING 1.5 ENDOFLINE 2.3 WITHIN 1.6 PARALLELEDGE 1.1 WITHIN 0.5 ; STRING LEF57_MAXFLOATINGAREA MAXFLOATINGAREA 1000 ; STRING ; +END M2 +LAYER V2 + TYPE CUT ; +END V2 +Parsed 350 number of lines!! +LAYER M3 + TYPE ROUTING ; + PITCH 1.8 ; + WIDTH 0.9 ; + MINSTEP 1 MAXEDGES 2 ; + SPACING 0.9 ; + DIRECTION HORIZONTAL ; + RESISTANCE RPERSQ 0.0608 ; + CAPACITANCE CPERSQDIST 0.000184 ; + WIREEXTENSION 8 ; + ANTENNAMODEL OXIDE1 ; + ANTENNACUMAREARATIO 300 ; + ANTENNACUMDIFFAREARATIO 600 + ANTENNAMODEL OXIDE2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNACUMAREARATIO 5000 ; + ANTENNACUMDIFFAREARATIO 8000 + ANTENNAMODEL OXIDE4 ; + ANTENNACUMAREARATIO 500 ; + ANTENNACUMDIFFAREARATIO 800 + PROPERTY LEF57_MINSTEP MINSTEP 1.0 MAXEDGES 2 ; STRING ; +END M3 +LAYER M4 + TYPE ROUTING ; + PITCH 5.4 ; + WIDTH 5.4 ; + MINIMUMCUT 2 WIDTH 0.5 ; + MINIMUMCUT 2 WIDTH 0.7 FROMBELOW ; + MINIMUMCUT 3 WIDTH 0.8 WITHIN 0.3 ; + MINIMUMCUT 2 WIDTH 1 FROMBELOW LENGTH 20 WITHIN 5 ; + MINIMUMCUT 4 WIDTH 1 FROMABOVE ; + MINIMUMCUT 2 WIDTH 1.1 LENGTH 20 WITHIN 5 ; + MINIMUMCUT 2 WIDTH 1.1 FROMABOVE LENGTH 20 WITHIN 5 ; + MAXWIDTH 10 ; + MINWIDTH 0.15 ; + MINENCLOSEDAREA 0.3 ; + MINENCLOSEDAREA 0.4 MINENCLOSEDAREAWIDTH 0.15 ; + MINENCLOSEDAREA 0.8 MINENCLOSEDAREAWIDTH 0.5 ; + MINSTEP 0.2 ; + PROTRUSIONWIDTH 0.3 LENGTH 0.6 WIDTH 1.2 ; + DIRECTION HORIZONTAL ; +END M4 +Parsed 400 number of lines!! +LAYER M5 + TYPE ROUTING ; + PITCH 5.4 ; + WIDTH 4 ; + MINIMUMCUT 2 WIDTH 0.7 ; + MINIMUMCUT 4 WIDTH 1 FROMABOVE ; + MINIMUMCUT 2 WIDTH 1.1 LENGTH 20 WITHIN 5 ; + MINIMUMCUT 5 WIDTH 0.5 ; + MINSTEP 0.05 ; + MINSTEP 0.04 ; + MINSTEP 0.05 LENGTHSUM 0.08 ; + MINSTEP 0.05 LENGTHSUM 0.16 ; + MINSTEP 0.05 INSIDECORNER ; + MINSTEP 0.05 INSIDECORNER LENGTHSUM 0.15 ; + MINSTEP 1 MAXEDGES 2 ; + DIRECTION DIAG135 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNACUMAREARATIO 300 ; + ANTENNACUMDIFFAREARATIO 600 +END M5 +LAYER implant1 + TYPE IMPLANT ; + WIDTH 0.5 ; + SPACING 0.5 ; + PROPERTY lrp 5.4 REAL ; +END implant1 +LAYER implant2 + TYPE IMPLANT ; + WIDTH 0.5 ; + SPACING 0.5 ; + PROPERTY lsp bottom STRING ; +END implant2 +LAYER V3 + TYPE CUT ; +END V3 +LAYER MT + TYPE ROUTING ; + PITCH 1.8 ; + WIDTH 0.9 ; + MINSTEP 0.05 STEP ; + MINSTEP 0.05 STEP LENGTHSUM 0.08 ; + MINSTEP 0.04 STEP ; + SPACING 0.9 ; + DIRECTION VERTICAL ; + RESISTANCE RPERSQ 0.0608 ; + CAPACITANCE CPERSQDIST 0.000184 ; + DIAGMINEDGELENGTH 0.075 ; +END MT +Parsed 450 number of lines!! +LAYER OVERLAP + TYPE OVERLAP ; + PROPERTY lip 5 INTEGER lsp top STRING lrp 5.5 REAL lsp bottom STRING ; +END OVERLAP +LAYER via12 + TYPE CUT ; + WIDTH 0.2 ; + SPACING 0.15 CENTERTOCENTER ; +ENCLOSURE BELOW 0.03 0.01 ; +ENCLOSURE ABOVE 0.05 0.01 ; +ENCLOSURE ABOVE 0.04 0.09 ; +PREFERENCLOSURE BELOW 0.06 0.01 ; +PREFERENCLOSURE ABOVE 0.08 0.2 ; + RESISTANCE 10 ; +END via12 +LAYER metal1 + TYPE ROUTING ; + PITCH 1.8 ; + WIDTH 0.9 ; + DIRECTION VERTICAL ; + MINSIZE 0.14 0.3 0.5 0.56 0.01 0.05 ; +END metal1 +LAYER via23 + TYPE CUT ; + WIDTH 0.2 ; + SPACING 0.15 ; +ENCLOSURE 0.05 0.01 ; +ENCLOSURE 0.02 0.02 WIDTH 1 ; +ENCLOSURE 0.05 0.05 WIDTH 2 ; + RESISTANCE 10 ; +END via23 +Parsed 500 number of lines!! +LAYER via34 + TYPE CUT ; + WIDTH 0.25 ; + SPACING 0.1 CENTERTOCENTER ; +ENCLOSURE 0.05 0.01 ; +ENCLOSURE 0.05 0 LENGTH 0.7 ; +ENCLOSURE BELOW 0.07 0.07 WIDTH 1 ; +ENCLOSURE ABOVE 0.09 0.09 WIDTH 1 ; +ENCLOSURE 0.03 0.03 WIDTH 1 EXCEPTEXTRACUT 0.2 ; + RESISTANCE 8 ; +END via34 +LAYER cut23 + TYPE CUT ; + ARRAYSPACING LONGARRAY CUTSPACING 0.2 + ARRAYCUTS 3 SPACING 1 + ARRAYCUTS 4 SPACING 1.5 + ARRAYCUTS 5 SPACING 2 ; + SPACING 0.2 LAYER cut12 STACK SAMENET ; + SPACING 0.3 CENTERTOCENTER SAMENET AREA 0.02 ; + SPACING 0.4 AREA 0.5 ; + SPACING 0.1 ; +SPACINGTABLE ORTHOGONAL + WITHIN 0.15 SPACING 0.11 + WITHIN 0.13 SPACING 0.13 + WITHIN 0.11 SPACING 0.15; +END cut23 +LAYER cut24 + TYPE ROUTING ; + PITCH 1.8 ; + WIDTH 1 ; + ARRAYSPACING WIDTH 2 CUTSPACING 0.2 + ARRAYCUTS 3 SPACING 1 ; + SPACING 0.1 ; + SPACING 0.12 NOTCHLENGTH 0.15; + SPACING 0.14 ENDOFNOTCHWIDTH 0.15 NOTCHSPACING 0.16, NOTCHLENGTH 0.08; + DIRECTION HORIZONTAL ; +END cut24 +LAYER cut25 + TYPE ROUTING ; + PITCH 1.8 ; + WIDTH 1 ; + DIRECTION HORIZONTAL ; + WIREEXTENSION 7 ; + SPACINGTABLE + TWOWIDTHS + WIDTH 0 0.15 0.2 0.5 1 + WIDTH 0.25 PRL 0 0.2 0.25 0.5 1 + WIDTH 1.5 PRL 1.5 0.5 0.5 0.6 1 + WIDTH 3 PRL 3 1 1 1 1.2 ; +END cut25 +MAXVIASTACK 4 RANGE m1 m7 ; +Parsed 550 number of lines!! +VIA IN1X + PROPERTY stringProperty DEFAULT STRING realProperty 32.33 REAL COUNT 34 INTEGER ; + RESISTANCE 2 ; + LAYER RX + RECT ( -0.700000 -0.700000 ) ( 0.700000 0.700000 ) ; + RECT ( 0.000000 0.000000 ) ( 2.100000 2.300000 ) ; + RECT ( 5.700000 0.000000 ) ( 95.700000 2.300000 ) ; + RECT ( 101.900000 0.000000 ) ( 119.600000 2.300000 ) ; + LAYER CUT12 + RECT ( -0.250000 -0.250000 ) ( 0.250000 0.250000 ) ; + LAYER PC + RECT ( -0.600000 -0.600000 ) ( 0.600000 0.600000 ) ; +END IN1X +VIA M1_M2 DEFAULT + RESISTANCE 1.5 ; + LAYER M1 + RECT MASK 1 ( -0.600000 -0.600000 ) ( 0.600000 0.600000 ) ; + LAYER V1 + RECT MASK 2 ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; + LAYER M2 + RECT MASK 3 ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; + RECT MASK 1 ( -0.900000 -0.450000 ) ( 0.900000 0.450000 ) ; +END M1_M2 +VIA M2_M3 DEFAULT + RESISTANCE 1.5 ; + LAYER M2 + RECT ( -0.450000 -0.900000 ) ( 0.450000 0.900000 ) ; + LAYER V2 + RECT ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; + LAYER M3 + RECT ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; +END M2_M3 +VIA M2_M3_PWR GENERATED + RESISTANCE 0.4 ; + LAYER M2 + RECT ( -1.350000 -1.350000 ) ( 1.350000 1.350000 ) ; + LAYER V2 + RECT ( -1.350000 -1.350000 ) ( -0.450000 1.350000 ) ; + RECT ( 0.450000 -1.350000 ) ( 1.350000 -0.450000 ) ; + RECT ( 0.450000 0.450000 ) ( 1.350000 1.350000 ) ; + LAYER M3 + RECT ( -1.350000 -1.350000 ) ( 1.350000 1.350000 ) ; +END M2_M3_PWR +Parsed 600 number of lines!! +VIA M3_MT DEFAULT + RESISTANCE 1.5 ; + LAYER M3 + RECT MASK 1 ( -0.900000 -0.450000 ) ( 0.900000 0.450000 ) ; + LAYER V3 + RECT MASK 2 ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; + LAYER MT + RECT MASK 3 ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; +END M3_MT +VIA myBlockVia0 + VIARULE viaName0 ; + CUTSIZE 0.1 0.1 ; + LAYERS metal1 via12 metal2 ; + CUTSPACING 0.1 0.1 ; + ENCLOSURE 0.05 0.01 0.01 0.05 ; + ROWCOL 5 14 ; + PATTERN 2_FF70_3_R4F ; +END myBlockVia0 +VIA VIACENTER12 + RESISTANCE 0.24 ; + LAYER M1 + RECT ( -4.600000 -2.200000 ) ( 4.600000 2.200000 ) ; + LAYER V1 + RECT ( -3.100000 -0.800000 ) ( -1.900000 0.800000 ) ; + RECT ( 1.900000 -0.800000 ) ( 3.100000 0.800000 ) ; + LAYER M2 + RECT ( -4.400000 -2.000000 ) ( 4.400000 2.000000 ) ; +END VIACENTER12 +VIA M2_TURN + LAYER M2 + RECT ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; + RECT ( -4.400000 -2.000000 ) ( 4.400000 2.000000 ) ; +END M2_TURN +Parsed 650 number of lines!! +VIA myVia23 + LAYER metal2 + POLYGON MASK 1 -2.1 -1 -0.2 1 2.1 1 0.2 -1 ; + POLYGON MASK 2 -1.1 -2 -0.1 2 1.1 2 0.1 -2 ; + POLYGON MASK 3 -3.1 -2 -0.3 2 3.1 2 0.3 -2 ; + POLYGON MASK 1 -4.1 -2 -0.4 2 4.1 2 0.4 -2 ; + LAYER cut23 + RECT MASK 2 ( -0.400000 -0.400000 ) ( 0.400000 0.400000 ) ; + POLYGON MASK 3 -2.1 -1 -0.2 1 2.1 1 0.2 -1 ; + LAYER metal3 + POLYGON MASK 1 -0.2 -1 -2.1 1 0.2 1 2.1 -1 ; + LAYER cut33 + RECT MASK 1 ( -0.400000 -0.400000 ) ( 0.400000 0.400000 ) ; + RECT MASK 1 ( -0.500000 -0.500000 ) ( 0.500000 0.500000 ) ; + RECT MASK 2 ( -0.300000 -0.300000 ) ( 0.300000 0.300000 ) ; + RECT MASK 1 ( -0.200000 -0.200000 ) ( 0.200000 0.200000 ) ; + RECT MASK 2 ( -0.100000 -0.100000 ) ( 0.100000 0.100000 ) ; + POLYGON MASK 2 -2.1 -1 -0.2 1 2.1 1 0.2 -1 ; + POLYGON MASK 2 -1.1 -2 -0.1 2 1.1 2 0.1 -2 ; + POLYGON MASK 3 -3.1 -2 -0.3 2 3.1 2 0.3 -2 ; + POLYGON MASK 1 -4.1 -2 -0.4 2 4.1 2 0.4 -2 ; +END myVia23 +VIA myBlockVia + VIARULE DEFAULT ; + CUTSIZE 0.1 0.1 ; + LAYERS metal1 via12 metal2 ; + CUTSPACING 0.1 0.1 ; + ENCLOSURE 0.05 0.01 0.01 0.05 ; + ROWCOL 1 2 ; + ORIGIN 0.1 0.2 ; + OFFSET 5.1 4.1 3.1 2.1 ; +END myBlockVia +VIARULE VIALIST12 + LAYER M1 ; + DIRECTION VERTICAL ; + WIDTH 9 TO 9.6 ; + LAYER M2 ; + DIRECTION HORIZONTAL ; + WIDTH 3 TO 3 ; + VIA VIACENTER12 ; + PROPERTY vrsp new STRING vrip 1 INTEGER vrrp 4.5 REAL ; +END VIALIST12 +VIARULE VIALIST1 + LAYER M1 ; + DIRECTION VERTICAL ; + WIDTH 9 TO 9.6 ; + LAYER M1 ; + DIRECTION HORIZONTAL ; + WIDTH 3 TO 3 ; +Should have via names in VIARULE. +END VIALIST1 +Parsed 700 number of lines!! +VIARULE VIAGEN12 GENERATE + LAYER M1 ; + ENCLOSURE 1.4 1.5 ; + WIDTH 0.1 TO 19 ; + LAYER M2 ; + ENCLOSURE 1.4 1.5 ; + WIDTH 0.2 TO 1.9 ; + LAYER M3 ; + RESISTANCE 0.5 ; + SPACING 5.6 BY 7 ; + RECT ( -0.300000 -0.300000 ) ( 0.300000 0.300000 ) ; + PROPERTY vrsp new STRING vrip 1 INTEGER vrrp 5.5 REAL ; +END VIAGEN12 +VIARULE via10 GENERATE + LAYER M1 ; + ENCLOSURE 1.1 1.2 ; + WIDTH 0.1 TO 1.9 ; + LAYER M2 ; + ENCLOSURE 1.1 1.2 ; + WIDTH 0.2 TO 2.9 ; + LAYER M3 ; + SPACING 0.3 BY 4.5 ; + RECT ( 1.000000 1.000000 ) ( 1.000000 1.000000 ) ; + PROPERTY vrsp new STRING vrip 1 INTEGER vrrp 5.5 REAL ; +END via10 +Parsed 750 number of lines!! +VIARULE via11 GENERATE + LAYER M1 ; + WIDTH 0.1 TO 1.9 ; + LAYER M2 ; + WIDTH 0.2 TO 2.9 ; + LAYER M3 ; + SPACING 0.3 BY 4.5 ; + RECT ( 1.000000 1.000000 ) ( 1.000000 1.000000 ) ; + PROPERTY vrsp new STRING vrip 1 INTEGER vrrp 5.5 REAL ; +END via11 +VIARULE via12 GENERATE DEFAULT + LAYER m1 ; + ENCLOSURE 0.03 0.01 ; + LAYER m2 ; + ENCLOSURE 0.05 0.01 ; + LAYER cut12 ; + RESISTANCE 20 ; + SPACING 0.4 BY 0.4 ; + RECT ( -0.100000 -0.100000 ) ( 0.100000 0.100000 ) ; +END via12 +VIARULE via13 GENERATE + LAYER m1 ; + ENCLOSURE 0.05 0.005 ; + WIDTH 1 TO 100 ; + LAYER m2 ; + ENCLOSURE 0.05 0.005 ; + WIDTH 1 TO 100 ; + LAYER cut12 ; + SPACING 0.16 BY 0.16 ; + RECT ( -0.070000 -0.070000 ) ( 0.070000 0.070000 ) ; +END via13 +VIARULE via14 + LAYER m1 ; + DIRECTION HORIZONTAL ; + WIDTH 1 TO 100 ; + LAYER m2 ; + DIRECTION VERTICAL ; + WIDTH 1 TO 100 ; + VIA name1 ; +END via14 +Parsed 800 number of lines!! +VIARULE VIAGEN3T GENERATE + LAYER m3 ; + ENCLOSURE 0.2 0.2 ; + LAYER v3 ; + ENCLOSURE 0.2 0.2 ; + SPACING 1.8 BY 1.8 ; + RECT ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; + LAYER mt ; +END VIAGEN3T +Parsed 850 number of lines!! +NONDEFAULTRULE RULE1 + LAYER RX + WIDTH 10 ; + SPACING 2.2 ; + WIREEXTENSION 6 ; + END RX + LAYER PC + WIDTH 10 ; + SPACING 2.2 ; + END PC + LAYER M1 + WIDTH 10 ; + SPACING 2.2 ; + END M1 + LAYER fw + WIDTH 4.8 ; + SPACING 4.8 ; + END fw +VIA nd1VIARX0 DEFAULT + PROPERTY realProperty 2.3 REAL ; + RESISTANCE 0.2 ; + LAYER RX + RECT ( -3.000000 -3.000000 ) ( 3.000000 3.000000 ) ; + LAYER CUT12 + RECT ( -1.000000 -1.000000 ) ( 1.000000 1.000000 ) ; + LAYER PC + RECT ( -3.000000 -3.000000 ) ( 3.000000 3.000000 ) ; +END nd1VIARX0 +VIA nd1VIA01 + RESISTANCE 0.2 ; + LAYER PC + RECT ( -3.000000 -3.000000 ) ( 3.000000 3.000000 ) ; + RECT ( -5.000000 -5.000000 ) ( 5.000000 5.000000 ) ; + LAYER CA + RECT ( -1.000000 -1.000000 ) ( 1.000000 1.000000 ) ; + LAYER M1 + RECT ( -3.000000 -3.000000 ) ( 3.000000 3.000000 ) ; +END nd1VIA01 +VIA nd1VIA12 + RESISTANCE 0.2 ; + LAYER M1 + RECT ( -3.000000 -3.000000 ) ( 3.000000 3.000000 ) ; + LAYER V1 + RECT ( -1.000000 -1.000000 ) ( 1.000000 1.000000 ) ; + LAYER M2 + RECT ( -3.000000 -3.000000 ) ( 3.000000 3.000000 ) ; +END nd1VIA12 + PROPERTY ndrsp single STRING ndrip 1 INTEGER ndrrp 6.7 REAL ; +END RULE1 ; +NONDEFAULTRULE wide1_5x + LAYER metal1 + WIDTH 1.5 ; + END metal1 + LAYER metal2 + WIDTH 1.5 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + END metal3 +END wide1_5x ; +Parsed 900 number of lines!! +NONDEFAULTRULE wide3x + LAYER metal1 + WIDTH 3 ; + END metal1 + LAYER metal2 + WIDTH 3 ; + END metal2 + LAYER metal3 + WIDTH 3 ; + END metal3 + MINCUTS cut12 2 ; + MINCUTS cut23 2 ; +END wide3x ; +NONDEFAULTRULE analog_rule + HARDSPACING ; + LAYER metal1 + WIDTH 1.5 ; + SPACING 3 ; + DIAGWIDTH 5.5 ; + END metal1 + LAYER metal2 + WIDTH 1.5 ; + SPACING 3 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + SPACING 3 ; + END metal3 + USEVIA via12_fixed_analog_via ; + USEVIA via23_fixed_analog_via ; + USEVIARULE viarule14_fixed_analog ; +END analog_rule ; +NONDEFAULTRULE clock1 + LAYER metal1 + WIDTH 1.5 ; + END metal1 + LAYER metal2 + WIDTH 1.5 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + END metal3 +END clock1 ; +Parsed 950 number of lines!! +NONDEFAULTRULE clock2 + LAYER metal1 + WIDTH 1.5 ; + END metal1 + LAYER metal2 + WIDTH 1.5 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + END metal3 +END clock2 ; +NONDEFAULTRULE clock + LAYER metal1 + WIDTH 1.5 ; + END metal1 + LAYER metal2 + WIDTH 1.5 ; + END metal2 + LAYER metal3 + WIDTH 1.5 ; + END metal3 +END clock ; +Parsed 1000 number of lines!! +SITE COVER + CLASS PAD ; + SYMMETRY R90 ; + SIZE 10 BY 10 ; +END COVER +SITE IO + CLASS PAD ; + SIZE 80 BY 560 ; +END IO +SITE CORE + CLASS CORE ; + SIZE 0.7 BY 8.4 ; +END CORE +SITE CORE1 + CLASS CORE ; + SYMMETRY X ; + SIZE 67.2 BY 6 ; +END CORE1 +SITE MRCORE + CLASS CORE ; + SYMMETRY Y ; + SIZE 3.6 BY 28.8 ; +END MRCORE +SITE IOWIRED + CLASS PAD ; + SIZE 57.6 BY 432 ; +END IOWIRED +Parsed 1050 number of lines!! +SITE IMAGE + CLASS CORE ; + SIZE 1 BY 1 ; + ROWPATTERN Fsite1 N Lsite1 N Lsite1 FS ; +END IMAGE +SITE Fsite + CLASS CORE ; + SIZE 4 BY 7 ; +END Fsite +SITE Lsite + CLASS CORE ; + SIZE 6 BY 7 ; +END Lsite +SITE mySite + CLASS CORE ; + SIZE 16 BY 7 ; + ROWPATTERN Fsite N Lsite N Lsite FS ; +END mySite +ARRAY M7E4XXX + SITE CORE -5021.45 -4998 N DO 14346 BY 595 STEP 0.7 16.8 ; + SITE CORE -5021.45 -4989.6 FS DO 14346 BY 595 STEP 0.7 16.8 ; + SITE IO 6148.8 5800 E DO 1 BY 1 STEP 0 0 ; + SITE IO 6148.8 3240 E DO 1 BY 1 STEP 0 0 ; + SITE COVER -7315 -7315 N DO 1 BY 1 STEP 0 0 ; + SITE COVER 7305 7305 N DO 1 BY 1 STEP 0 0 ; + CANPLACE COVER -7315 -7315 N DO 1 BY 1 STEP 0 0 ; + CANPLACE COVER -7250 -7250 N DO 5 BY 1 STEP 40 0 ; + CANPLACE COVER -7250 -7250 N DO 5 BY 1 STEP 40 0 ; + CANNOTOCCUPY CORE -5021.45 -4989.6 FS DO 100 BY 595 STEP 0.7 16.8 ; + CANNOTOCCUPY CORE -5021.45 -4998 N DO 100 BY 595 STEP 0.7 16.8 ; + CANNOTOCCUPY CORE -5021.45 -4998 N DO 100 BY 595 STEP 0.7 16.8 ; + TRACKS X, -6148.8 DO 17569 STEP 0.7 + LAYER RX ; + TRACKS Y, -6148.8 DO 20497 STEP 0.6 + LAYER RX ; + TRACKS Y, -6148.8 DO 20497 STEP 0.6 + LAYER RX ; + GCELLGRID X, -6157.2 DO 1467 STEP 8.4 + GCELLGRID Y, -6157.2 DO 1467 STEP 8.4 + GCELLGRID Y, -6157.2 DO 1467 STEP 8.4 + FLOORPLAN 100% + CANPLACE COVER -7315 -7315 N DO 1 BY 1 STEP 0 0 ; + CANPLACE COVER -7250 -7250 N DO 5 BY 1 STEP 40 0 ; + CANPLACE CORE -5021.45 -4998 N DO 14346 BY 595 STEP 0.7 16.8 ; + CANPLACE CORE -5021.45 -4989.6 FS DO 14346 BY 595 STEP 0.7 16.8 ; + CANNOTOCCUPY CORE -5021.45 -4989.6 FS DO 100 BY 595 STEP 0.7 16.8 ; + CANNOTOCCUPY CORE -5021.45 -4998 N DO 100 BY 595 STEP 0.7 16.8 ; + END 100% + +END M7E4XXX + +MACRO CHK3A +MACRO CLASS RING +Parsed 1100 number of lines!! +Parsed 1150 number of lines!! + PIN GND + DIRECTION INOUT ; + USE GROUND ; + SHAPE ABUTMENT ; + MAXLOAD 0.1 ; + RISESLEWLIMIT 0.01 ; + FALLSLEWLIMIT 0.02 ; + TAPERRULE RULE1 ; + PROPERTY TYPE special STRING intProp 23 INTEGER realProp 24.25 REAL ; + PORT +CLASS CORE LAYER M1 ; + SPACING 0.05 ; + WIDTH 1 ; + RECT ( -0.900000 3.000000 ) ( 9.900000 6.000000 ) ; + VIA ( 100 300 ) IN1X ; + END + PORT +CLASS BUMP LAYER M2 ; + SPACING 0.06 ; + END + END GND +Parsed 1200 number of lines!! + PIN VDD + DIRECTION INOUT ; + USE POWER ; + SHAPE ABUTMENT ; + ANTENNAPARTIALMETALAREA 10611.2 LAYER M2 ; + ANTENNAPARTIALMETALAREA 2450.26 LAYER M3 ; + ANTENNAPARTIALCUTAREA 4.8216 LAYER V1 ; + ANTENNAPARTIALCUTAREA 185.73 LAYER V2 ; + ANTENNADIFFAREA 5008.46 LAYER M2 ; + ANTENNADIFFAREA 5163.88 LAYER M3 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.214 LAYER M3 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNAGATEAREA 162.48 LAYER M2 ; + PORT + END + PORT +CLASS NONE LAYER M1 ; + RECT ITERATE ( -0.900000 21.000000 ) ( 9.900000 24.000000 ) + DO 1 BY 2 STEP 1 1 ; + VIA ITERATE ( 100 300 ) nd1VIA12 + DO 1 BY 2 STEP 1 2 ; + END + END VDD + PIN PA3 + DIRECTION INPUT ; + ANTENNAPARTIALMETALAREA 4 LAYER M1 ; + ANTENNAPARTIALMETALAREA 5 LAYER M2 ; + ANTENNAPARTIALMETALSIDEAREA 5 LAYER M2 ; + ANTENNAPARTIALMETALSIDEAREA 6 LAYER M2 ; + ANTENNAPARTIALMETALSIDEAREA 7 LAYER M2 ; + ANTENNAPARTIALCUTAREA 1 ; + ANTENNAPARTIALCUTAREA 2 LAYER M2 ; + ANTENNAPARTIALCUTAREA 3 ; + ANTENNAPARTIALCUTAREA 4 LAYER M4 ; + ANTENNADIFFAREA 1 LAYER M1 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 1 LAYER M1 ; + ANTENNAGATEAREA 2 ; + ANTENNAGATEAREA 3 LAYER M3 ; + ANTENNAMAXAREACAR 1 LAYER L1 ; + ANTENNAMAXAREACAR 2 LAYER L2 ; + ANTENNAMAXAREACAR 3 LAYER L3 ; + ANTENNAMAXAREACAR 4 LAYER L4 ; + ANTENNAMAXSIDEAREACAR 1 LAYER L1 ; + ANTENNAMAXSIDEAREACAR 2 LAYER L2 ; + ANTENNAMAXCUTCAR 1 LAYER L1 ; + ANTENNAMAXCUTCAR 2 LAYER L2 ; + ANTENNAMAXCUTCAR 3 LAYER L3 ; + PORT + LAYER M1 ; + SPACING 0.02 ; + RECT ( 1.350000 -0.450000 ) ( 2.250000 0.450000 ) ; + RECT ( -0.450000 -0.450000 ) ( 0.450000 0.450000 ) ; + END + PORT + LAYER PC ; + DESIGNRULEWIDTH 0.05 ; + RECT ( -0.450000 12.150000 ) ( 0.450000 13.050000 ) ; + END + PORT + LAYER PC ; + RECT ( -0.450000 24.750000 ) ( 0.450000 25.650000 ) ; + END + PORT + END + END PA3 +Parsed 1250 number of lines!! + PIN PA0 + DIRECTION INPUT ; + MUSTJOIN PA3 ; + PORT +CLASS NONE LAYER M1 ; + RECT ( 8.550000 8.550000 ) ( 9.450000 9.450000 ) ; + RECT ( 6.750000 6.750000 ) ( 7.650000 7.650000 ) ; + RECT ( 6.750000 8.550000 ) ( 7.650000 9.450000 ) ; + RECT ( 6.750000 10.350000 ) ( 7.650000 11.250000 ) ; + END + PORT +CLASS CORE LAYER PC ; + RECT ( 8.550000 24.750000 ) ( 9.450000 25.650000 ) ; + END + PORT + LAYER PC ; + RECT ( 6.750000 1.350000 ) ( 7.650000 2.250000 ) ; + END + PORT + LAYER PC ; + RECT ( 6.750000 24.750000 ) ( 7.650000 25.650000 ) ; + END + PORT + LAYER PC ; + RECT ( 4.950000 1.350000 ) ( 5.850000 2.250000 ) ; + END + END PA0 + PIN PA1 + DIRECTION INPUT ; + PORT + LAYER M1 ; + RECT ( 8.550000 -0.450000 ) ( 9.450000 0.450000 ) ; + RECT ( 6.750000 -0.450000 ) ( 7.650000 0.450000 ) ; + END + PORT + LAYER M1 ; + RECT ( 8.550000 12.150000 ) ( 9.450000 13.050000 ) ; + RECT ( 6.750000 12.150000 ) ( 7.650000 13.050000 ) ; + RECT ( 4.950000 12.150000 ) ( 5.850000 13.050000 ) ; + END + PORT + LAYER PC ; + RECT ( 4.950000 24.750000 ) ( 5.850000 25.650000 ) ; + END + PORT + LAYER PC ; + RECT ( 3.150000 24.750000 ) ( 4.050000 25.650000 ) ; + END + END PA1 +Parsed 1300 number of lines!! + PIN PA20 + DIRECTION INPUT ; + PORT + LAYER M1 ; + POLYGON ( 15 35 ) + ( 15 60 ) + ( 65 60 ) + ( 65 35 ) + ( 15 35 ) ; + END + PORT + LAYER M1 ; + PATH ( 8.55 12.15 ) + ( 9.45 13.05 ) ; + END + END PA20 + PIN PA21 + DIRECTION OUTPUT TRISTATE ; + PORT + LAYER M1 ; + POLYGON ITERATE ( 20 35 ) + ( 20 60 ) + ( 70 60 ) + ( 70 35 ) + DO 1 BY 2 STEP 5 5 ; + END + PORT + LAYER M1 ; + PATH ITERATED ( 5.55 12.15 ) + ( 10.45 13.05 ) + DO 1 BY 2 STEP 2 2 ; + END + END PA21 + OBS + LAYER M1 ; + SPACING 5.6 ; + RECT ( 6.600000 -0.600000 ) ( 9.600000 0.600000 ) ; + RECT ( 4.800000 12.000000 ) ( 9.600000 13.200000 ) ; + RECT ( 3.000000 13.800000 ) ( 7.800000 16.800000 ) ; + RECT ( 3.000000 -0.600000 ) ( 6.000000 0.600000 ) ; + RECT ( 3.000000 8.400000 ) ( 6.000000 11.400000 ) ; + RECT ( 3.000000 8.400000 ) ( 4.200000 16.800000 ) ; + RECT ( -0.600000 13.800000 ) ( 4.200000 16.800000 ) ; + RECT ( -0.600000 -0.600000 ) ( 2.400000 0.600000 ) ; + RECT ( 6.600000 6.600000 ) ( 9.600000 11.400000 ) ; + RECT ( 6.600000 6.600000 ) ( 7.800000 11.400000 ) ; + END +Parsed 1350 number of lines!! + CLASS RING ; + FIXEDMASK ; + EEQ CHK1 ; + SYMMETRY X Y R90 ; + SITE CORE ; + SIZE 10.8 BY 28.8 ; + FOREIGN CHKS ( 0 0 ) FN ; + ORIGIN ( 0.9 0.9 ) ; + PROPERTY stringProp first STRING integerProp 1 INTEGER WEIGHT 30.31 REAL ; +END CHK3A +MACRO INV +MACRO CLASS CORE + PIN Z + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNAPARTIALMETALAREA 10611.2 LAYER M2 ; + ANTENNAPARTIALMETALAREA 2450.26 LAYER M3 ; + ANTENNAPARTIALCUTAREA 4.8216 LAYER V1 ; + ANTENNAPARTIALCUTAREA 185.73 LAYER V2 ; + ANTENNADIFFAREA 5008.46 LAYER M2 ; + ANTENNADIFFAREA 5163.88 LAYER M3 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.214 LAYER M3 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNAGATEAREA 162.48 LAYER M2 ; + PORT + LAYER M2 ; + PATH ( 30.8 9 ) + ( 42 9 ) ; + END + END Z +Parsed 1400 number of lines!! + PIN A + DIRECTION INPUT ; + USE ANALOG ; + PORT + LAYER M1 ; + PATH ( 25.2 15 ) ; + END + END A + PIN VDD + DIRECTION INOUT ; + SHAPE ABUTMENT ; + ANTENNAPARTIALMETALAREA 10611.2 LAYER M2 ; + ANTENNAPARTIALMETALAREA 2450.26 LAYER M3 ; + ANTENNAPARTIALCUTAREA 4.8216 LAYER V1 ; + ANTENNAPARTIALCUTAREA 185.73 LAYER V2 ; + ANTENNADIFFAREA 5008.46 LAYER M2 ; + ANTENNADIFFAREA 5163.88 LAYER M3 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 297.214 LAYER M3 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAMODEL OXIDE3 ; + ANTENNAGATEAREA 162.48 LAYER M2 ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH ( 50.4 2.8 ) + ( 50.4 21.2 ) ; + END + END VDD + PIN VSS + DIRECTION INOUT ; + SHAPE ABUTMENT ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH ( 16.8 2.8 ) + ( 16.8 21.2 ) ; + END + END VSS +Parsed 1450 number of lines!! + OBS + LAYER M1 ; + DESIGNRULEWIDTH 4.5 ; + WIDTH 0.1 ; + RECT MASK 2 ( 24.100000 1.500000 ) ( 43.500000 16.500000 ) ; + RECT MASK 2 ITERATE ( 24.100000 1.500000 ) ( 43.500000 16.500000 ) + DO 2 BY 1 STEP 20 0 ; + PATH MASK 3 ITERATED ( 532 534 ) + ( 1999.2 534 ) + DO 1 BY 2 STEP 0 1446 ; + VIA ITERATE MASK 123 ( 470.4 475 ) VIABIGPOWER12 + DO 2 BY 2 STEP 1590.4 1565 ; + PATH MASK 3 ( 532 534 ) + ( 1999.2 534 ) ; + PATH MASK 3 ( 532 1980 ) + ( 1999.2 1980 ) ; + VIA MASK 103 ( 470.4 475 ) VIABIGPOWER12 ; + VIA MASK 132 ( 2060.8 475 ) VIABIGPOWER12 ; + VIA MASK 112 ( 470.4 2040 ) VIABIGPOWER12 ; + VIA MASK 123 ( 2060.8 2040 ) VIABIGPOWER12 ; + RECT ( 44.100000 1.500000 ) ( 63.500000 16.500000 ) ; + END + DENSITY + LAYER metal1 ; + RECT 0 0 100 100 45.5 ; + RECT 100 0 200 100 42.2 ; + LAYER metal2 ; + RECT 0 0 250 140 20.5 ; + RECT 1 1 250 140 20.5 ; + RECT 2 2 250 140 20.5 ; + LAYER metal3 ; + RECT 10 10 40 40 4.5 ; + END + CLASS CORE ; + SYMMETRY X Y R90 ; + SITE CORE1 ; + SIZE 67.2 BY 24 ; + FOREIGN INVS ; +END INV +MACRO INV_B +MACRO CLASS CORE SPACER +Parsed 1500 number of lines!! + PIN Z + DIRECTION OUTPUT ; + USE CLOCK ; + PORT + LAYER M1 ; + WIDTH 1 ; + PATH MASK 2 ( -0.6 -0.6 ) + ( 0.6 -0.6 ) + ( 0.7 -0.6 ) ; + LAYER M2 ; + WIDTH 1 ; + RECT MASK 1 ( -0.600000 -0.600000 ) ( 0.600000 0.600000 ) ; + LAYER M3 ; + WIDTH 1 ; + RECT MASK 2 ITERATE ( -0.600000 -0.600000 ) ( 0.600000 0.600000 ) + DO 1 BY 2 STEP 2 1 ; + LAYER M4 ; + PATH MASK 1 ( 30.8 9 ) + ( 42 9 ) ; + VIA MASK 103 ( 470.4 475 ) VIABIGPOWER12 ; + VIA MASK 130 ( 2060.8 475 ) VIABIGPOWER12 ; + VIA MASK 113 ( 470.4 2040 ) VIABIGPOWER12 ; + VIA MASK 121 ( 2060.8 2040 ) VIABIGPOWER12 ; + END + END Z + PIN A + DIRECTION FEEDTHRU ; + USE SIGNAL ; + PORT + LAYER M1 ; + PATH ( 25.2 15 ) ; + END + END A +Parsed 1550 number of lines!! + PIN VDD + DIRECTION INOUT ; + SHAPE ABUTMENT ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH ( 50.4 2.8 ) + ( 50.4 21.2 ) ; + END + END VDD + PIN VSS + DIRECTION INOUT ; + SHAPE ABUTMENT ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH ( 16.8 2.8 ) + ( 16.8 21.2 ) ; + END + END VSS + OBS + LAYER M1 ; + RECT ( 24.100000 1.500000 ) ( 43.500000 16.500000 ) ; + END + CLASS CORE SPACER ; + EEQ INV ; + SYMMETRY X Y R90 ; + SITE CORE1 ; + SIZE 67.2 BY 24 ; + FOREIGN INVS ( 4 5 ) ; + FOREIGN INV1 ( 5 6 ) S ; + FOREIGN INV2 ( 6 7 ) N ; + FOREIGN INV3 ( 7 8 ) ; +END INV_B +MACRO DFF3 +MACRO CLASS CORE ANTENNACELL +Parsed 1600 number of lines!! + PIN Q + DIRECTION OUTPUT ; + USE SIGNAL ; + PORT + LAYER M2 ; + PATH ( 19.6 99 ) + ( 47.6 99 ) ; + END + END Q + PIN QN + DIRECTION OUTPUT ; + USE SIGNAL ; + PORT + LAYER M2 ; + PATH MASK 1 ( 25.2 123 ) + ( 42 123 ) ; + RECT MASK 2 ( 24.100000 1.500000 ) ( 43.500000 208.500000 ) ; + END + END QN +Parsed 1650 number of lines!! + PIN D + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER M1 ; + PATH ( 30.8 51 ) ; + END + END D + PIN G + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER M1 ; + PATH ( 25.2 3 ) ; + END + END G + PIN CD + DIRECTION INPUT ; + USE CLOCK ; + PORT + LAYER M1 ; + PATH ( 36.4 75 ) ; + END + END CD + PIN VDD + DIRECTION INOUT ; + SHAPE RING ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH ( 50.4 2.8 ) + ( 50.4 207.2 ) ; + END + END VDD +Parsed 1700 number of lines!! + PIN VSS + DIRECTION INOUT ; + SHAPE FEEDTHRU ; + PORT + LAYER M1 ; + WIDTH 5.6 ; + PATH ( 16.8 2.8 ) + ( 16.8 207.2 ) ; + END + END VSS + OBS + LAYER M1 ; + DESIGNRULEWIDTH 0.15 ; + RECT ( 24.100000 1.500000 ) ( 43.500000 208.500000 ) ; + PATH ( 8.4 3 ) + ( 8.4 123 ) ; + PATH ( 58.8 3 ) + ( 58.8 123 ) ; + PATH ( 64.4 3 ) + ( 64.4 123 ) ; + END + DENSITY + LAYER metal4 ; + RECT 24.1 1.5 43.5 208.5 5.5 ; + END + CLASS CORE ANTENNACELL ; + SYMMETRY X Y R90 ; + SITE CORE 34 54 FE DO 30 BY 3 STEP 1 1 ; + SITE CORE1 21 68 S DO 30 BY 3 STEP 2 2 ; + SIZE 67.2 BY 210 ; + FOREIGN DFF3S ; +END DFF3 +MACRO BUF1 +MACRO CLASS ENDCAP BOTTOMLEFT + PIN IN + ANTENNADIFFAREA 0 ; + ANTENNADIFFAREA 0 ; + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 1 ; + ANTENNAGATEAREA 3 ; + ANTENNAMODEL OXIDE2 ; + ANTENNAGATEAREA 2 ; + ANTENNAGATEAREA 4 ; + END IN +Parsed 1750 number of lines!! + PIN IN2 + ANTENNAMODEL OXIDE1 ; + ANTENNAGATEAREA 1 ; + END IN2 + PIN IN3 + SHAPE ABUTMENT ; + END IN3 + PIN GND + USE GROUND ; + PORT + LAYER metal1 ; + POLYGON ( 0 0 ) + ( 0 1 ) + ( 1 0 ) + ( 2 2 ) + ( 2 0 ) ; + RECT ( 2.000000 3.000000 ) ( 4.000000 5.000000 ) ; + END + END GND + OBS + LAYER metal2 ; + EXCEPTPGNET ; + POLYGON ( 0 0 ) + ( 0 1 ) + ( 1 0 ) + ( 2 2 ) + ( 2 0 ) ; + RECT ( 2.000000 3.000000 ) ( 4.000000 5.000000 ) ; + END + CLASS ENDCAP BOTTOMLEFT ; +END BUF1 +MACRO DFF4 +MACRO CLASS COVER BUMP + CLASS COVER BUMP ; + FOREIGN DFF3S ; +END DFF4 +MACRO DFF5 +MACRO CLASS COVER + CLASS COVER ; + FOREIGN DFF3S ; +END DFF5 +MACRO mydriver +MACRO CLASS PAD AREAIO + CLASS PAD AREAIO ; + FOREIGN DFF3S ; +END mydriver +MACRO myblackbox +MACRO CLASS BLOCK BLACKBOX + CLASS BLOCK BLACKBOX ; + FOREIGN DFF3S ; +END myblackbox +MACRO FWHSQCN690V15 +MACRO CLASS CORE +Parsed 1800 number of lines!! + PIN R + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER a1sig ; + RECT ( 11.430000 0.800000 ) ( 11.710000 1.200000 ) ; + RECT ( 9.940000 0.800000 ) ( 11.430000 1.040000 ) ; + LAYER a1sig ; + RECT ( 9.490000 0.800000 ) ( 9.710000 0.820000 ) ; + RECT ( 9.710000 0.800000 ) ( 9.930000 1.040000 ) ; + RECT ( 9.920000 0.800000 ) ( 9.940000 1.040000 ) ; + RECT ( 9.000000 2.060000 ) ( 9.720000 2.080000 ) ; + RECT ( 9.390000 0.800000 ) ( 9.470000 1.780000 ) ; + RECT ( 9.460000 0.800000 ) ( 9.480000 1.780000 ) ; + RECT ( 9.470000 0.800000 ) ( 9.490000 1.770000 ) ; + RECT ( 9.480000 0.810000 ) ( 9.720000 2.070000 ) ; + RECT ( 9.000000 1.770000 ) ( 9.480000 2.070000 ) ; + END + END R + PIN SI + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER a1sig ; + END + END SI + PIN SM + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER a1sig ; + RECT ( 0.820000 3.510000 ) ( 1.080000 3.890000 ) ; + LAYER a1sig ; + RECT ( 0.360000 3.510000 ) ( 0.590000 3.690000 ) ; + RECT ( 0.360000 3.680000 ) ( 0.590000 3.700000 ) ; + RECT ( 0.590000 3.510000 ) ( 0.810000 3.890000 ) ; + RECT ( 0.590000 3.510000 ) ( 0.810000 3.890000 ) ; + RECT ( 0.800000 3.510000 ) ( 0.820000 3.890000 ) ; + RECT ( 0.360000 3.690000 ) ( 0.600000 3.990000 ) ; + LAYER a1sig ; + END + END SM +Parsed 1850 number of lines!! + PIN T + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER a1sig ; + LAYER a1sig ; + RECT ( 4.850000 3.510000 ) ( 4.910000 3.700000 ) ; + RECT ( 4.910000 3.510000 ) ( 5.130000 3.990000 ) ; + RECT ( 5.120000 3.510000 ) ( 5.140000 3.990000 ) ; + RECT ( 4.200000 3.690000 ) ( 4.920000 3.990000 ) ; + END + END T + OBS + LAYER a1sig ; + SPACING 0 ; + RECT ( 0.110000 0.740000 ) ( 0.810000 3.470000 ) ; + RECT ( 0.800000 0.740000 ) ( 0.820000 3.470000 ) ; + RECT ( 0.820000 0.740000 ) ( 2.540000 4.060000 ) ; + RECT ( 2.540000 0.740000 ) ( 3.700000 3.470000 ) ; + RECT ( 3.700000 0.740000 ) ( 3.980000 4.060000 ) ; + RECT ( 3.980000 0.740000 ) ( 5.140000 3.470000 ) ; + RECT ( 5.140000 0.740000 ) ( 8.780000 4.060000 ) ; + RECT ( 8.780000 0.740000 ) ( 9.940000 1.540000 ) ; + RECT ( 8.780000 1.530000 ) ( 9.940000 1.550000 ) ; + RECT ( 8.780000 2.290000 ) ( 9.940000 4.060000 ) ; + RECT ( 9.940000 0.740000 ) ( 14.060000 4.060000 ) ; + RECT ( 14.060000 0.740000 ) ( 15.240000 2.510000 ) ; + RECT ( 15.230000 0.740000 ) ( 15.250000 2.510000 ) ; + RECT ( 14.060000 3.250000 ) ( 15.250000 4.050000 ) ; + RECT ( 14.060000 4.040000 ) ( 15.250000 4.060000 ) ; + END + CLASS CORE ; + SYMMETRY X Y ; + SITE CORE ; + SIZE 15.36 BY 4.8 ; + FOREIGN FWHSQCN690 ( 0 0 ) ; + ORIGIN ( 0 0 ) ; +END FWHSQCN690V15 +MACRO mysoft +MACRO CLASS BLOCK SOFT + OBS + LAYER a1sig ; + DESIGNRULEWIDTH 0 ; + RECT ( 0.110000 0.740000 ) ( 0.810000 3.470000 ) ; + END + CLASS BLOCK SOFT ; + FOREIGN DFF3S ; +END mysoft +MACRO mycorewelltap +MACRO CLASS CORE WELLTAP + CLASS CORE WELLTAP ; + FOREIGN DFF3S ; +END mycorewelltap +MACRO myTest +MACRO CLASS CORE +Parsed 1900 number of lines!! + CLASS CORE ; + SYMMETRY X ; + SITE Fsite ; + SITE Fsite 0 0 N ; + SITE Fsite 0 7 FS ; + SITE Lsite 4 0 N ; + SITE Lsite 0 0 S DO 2 BY 1 STEP 4 5 ; + SITE Fsite 4 0 E ; + SITE Lsite 0.3 0 S DO 2 BY 1 STEP 4 5 ; + SITE Fsite 0 0 N DO 2 BY 1 STEP 4 0 ; + SIZE 10 BY 14 ; +END myTest +MACRO myMac +MACRO CLASS CORE + PIN In1 + USE SIGNAL ; + SUPPLYSENSITIVITY vddpin1 ; + END In1 + PIN vddpin1 + USE SIGNAL ; + NETEXPR "power1 VDD1" ; + END vddpin1 + PIN vddpin2 + USE SIGNAL ; + NETEXPR "power2 VDD2" ; + END vddpin2 + PIN gndpin + USE SIGNAL ; + NETEXPR "gnd1 GND" ; + END gndpin + PIN In2 + USE SIGNAL ; + GROUNDSENSITIVITY gndpin ; + END In2 + CLASS CORE ; + SYMMETRY X ; + SIZE 10 BY 14 ; +END myMac +ANTENNAINPUTGATEAREA 45 ; +Parsed 1950 number of lines!! +ANTENNAINOUTDIFFAREA 65 ; +ANTENNAOUTPUTDIFFAREA 55 ; +BEGINEXT "SIGNATURE" + CREATOR "CADENCE" + DATE "04/14/98" +ENDEXT ; diff --git a/lefdef/src/lef/bin/lefdefdiff b/lefdef/src/lef/bin/lefdefdiff new file mode 100644 index 00000000..5f1a6866 --- /dev/null +++ b/lefdef/src/lef/bin/lefdefdiff @@ -0,0 +1,526 @@ +#!/bin/sh + +set -f + +OS_TYPE=`uname -s` + +# Add path to lefdefdiff so lefdiff and defdiff are found if not already on $PATH +PATH=$PATH:`dirname $0` + +lef=0 +def=0 +outFile=0 +file1=0 +file2=0 +tmpPath="." +quick=0 +ignorePinExtra=0 +ignoreRowName=0 +ignoreViaName=0 +netSegComp=0 + +#---------------- +# shell functions +#---------------- +output_usage_msg() +{ + echo "Usage: lefdefdiff -lef|-def inFilename1 inFilename2 [-o outFilename]" + echo " [-path pathName] [-quick] [-d] [-ignorePinExtra] [-ignoreRowName]" + echo " [-ignoreViaName] [-netSegComp]" + echo " -path pathName redirects the intermediate files create by lefdefdiff" + echo " to the given pathName instead of the current directory" + echo " If \"-quick\" option is used, bdiff will be used to do the diff." + echo " -ignorePinExtra applies for def only. It will ignore the" + echo " .extra in the pin name." + echo " -ignoreRowName applies for def only. It will ignore the row name." + echo " -ignoreViaName applies for def only. It will ignore the via name" + echo " SpecialNet specialWiring & Net retularWiring routingPoints." + echo " -netSegComp applies for def only. If this flag is set, it will compare" + echo " the net by segment instead of single point." + echo " User needs to verify the accuracy of the diff results." +} + +output_def_msg() +{ + echo "ERROR: Options -ignorePinExtra, -ignoreRowName, -ignoreViaName and -netSegComp apply to def files only." + echo " You have run lefdefdiff with lef files." +} + +ld_sort="/bin/sort" +if [ ! -x $ld_sort ] ; then + ld_sort="/usr/bin/sort" +fi +if [ ! -x $ld_sort ] ; then + ld_sort="sort" +fi + +ld_diff="/bin/diff" +if [ ! -x $ld_diff ] ; then + ld_diff="/usr/bin/diff" +fi +if [ ! -x $ld_diff ] ; then + ld_diff="diff" +fi + +# arguments combination can be: +# lefdefdiff -lef|def inFilename1 inFilename2 +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFilename +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFilename -quick +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFilename -quick -d +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFilename -d -quick +# lefdefdiff -lef|def inFilename1 inFilename2 -d -quick +# lefdefdiff -lef|def inFilename1 inFilename2 -quick -d +# lefdefdiff -lef|def inFilename1 inFilename2 -quick +# lefdefdiff -lef|def inFilename1 inFilename2 -d +# lefdefdiff -lef|def inFilename1 inFilename2 -o outFileName -quick -d -path pathName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreRowName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreViaName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -netSetCmp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreRowName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreViaName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreRowName -ignoreViaName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreRowName -netSetComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreViaName -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignorePinExtra -ignoreRowName -ignoreViaName -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreRowName -ignoreViaName +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreRowName -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreRowName -ignoreViaName -netSegComp +# lefdefdiff -def inFilename1 inFilename2 -o outFilename -d -quick -ignoreViaName -netSegComp + +if [ $# = 1 ] ; then + if [ "$1" = "-help" ] || [ "$1" = "-h" ] ; then + output_usage_msg + exit 0 + elif [ "$1" = "-version" ] ; then + if [ "$OS_TYPE" = "Windows_NT" ] ; then + lefdiff.exe $1 + else + lefdiff $1 + fi + exit 0 + fi + output_usage_msg + exit 1 +fi + +if [ $# -lt 3 ] ; then + output_usage_msg + exit 1 +fi + +if [ "$1" = "-def" -o "$1" = "-DEF" ] ; then + def=1 +elif [ "$1" = "-lef" -o "$1" = "-LEF" ] ; then + lef=1 +else + output_usage_msg + exit 1 +fi + +file1=$2 +file2=$3 + +if [ $# -gt 3 ] ; then + argCount=1 + while [ $# -a "$argCount" -lt 4 ] + do + argCount=`expr $argCount + 1` + shift + done + while [ "$#" -gt 0 ] + do + if [ "$1" = "-o" ] ; then + if [ $# -gt 1 ] ; then + outFile=$2 + shift + else + output_usage_msg + exit 1 + fi + elif [ "$1" = "-path" ] ; then + if [ $# -gt 1 ] ; then + if [ "$2" != "-ignorePinExtra" ] && [ "$2" != "-ignoreRowName" ] && + [ "$2" != "-ignoreViaName" ] && [ "$2" != "-d" ] && + [ "$2" != "-quick" ] ; then + tmpPath=$2 + shift + else + output_usage_msg + exit 1 + fi + else + output_usage_msg + exit 1 + fi + elif [ "$1" = "-quick" ] ; then + if [ "$quick" = 1 ] ; then + output_usage_msg + exit 1 + fi + quick=1 + elif [ "$1" = "-ignorePinExtra" ] ; then + if [ "$ignorePinExtra" = 1 ] ; then + output_usage_msg + exit 1 + fi + ignorePinExtra=1 + elif [ "$1" = "-ignoreRowName" ] ; then + if [ "$ignoreRowName" = 1 ] ; then + output_usage_msg + exit 1 + fi + ignoreRowName=1 + elif [ "$1" = "-ignoreViaName" ] ; then + if [ "$ignoreViaName" = 1 ] ; then + output_usage_msg + exit 1 + fi + ignoreViaName=1 + elif [ "$1" = "-netSegComp" ] ; then + if [ "$netSegComp" = 1 ] ; then + output_usage_msg + exit 1 + fi + netSegComp=1 + elif [ "$1" != "-d" ] ; then + output_usage_msg + exit 1 + fi + shift + done +fi + +# ignorePinExtra only apply to -def +if [ $ignorePinExtra = 1 ] && [ $def != 1 ] ; then + output_def_msg + exit 1 +fi + +# ignoreRowName only apply to -def +if [ $ignoreRowName = 1 ] && [ $def != 1 ] ; then + output_def_msg + exit 1 +fi + +# ignoreViaName only apply to -def +if [ $ignoreViaName = 1 ] && [ $def != 1 ] ; then + output_def_msg + exit 1 +fi + +# netSegComp only apply to -def +if [ $netSegComp = 1 ] && [ $def != 1 ] ; then + output_def_msg + exit 1 +fi + +# split the following from unix & window_NT +if [ "$OS_TYPE" = "Windows_NT" ] ; then + # it's a lef file + if [ "$lef" = 1 ] ; then + lefdiff.exe $file1 $file2 lefOut1.$$ lefOut2.$$ + status=$? + if [ $status != 0 ] ; then + echo "Error in reading the input files, lefdefdiff stops execution!" + if [ -f lefOut1.$$ ] ; then # file already created, remove it + rm lefOut1.$$ + fi + if [ -f lefOut2.$$ ] ; then # file already created, remove it + rm lefOut2.$$ + fi + exit $status + fi + if [ -f lefOut1S.$$ ] ; then # if sort file for file 1 in tmp, remove it + rm lefOut1S.$$ + fi + if [ -f lefOut2S.$$ ] ; then # if sort file for file 2 in tmp, remove it + rm lefOut2S.$$ + fi + if [ -f lefOut1.$$ ] ; then # if both output files are there, it means + if [ -f lefOut2.$$ ] ; then # the parser parsed successfully + $ld_sort lefOut1.$$ > lefOut1S.$$ # sort the output file + $ld_sort lefOut2.$$ > lefOut2S.$$ + if [ $outFile != 0 ] ; then # user has requested to + # save output in a file + if [ -f $outFile ] ; then # the file exist, remove it + rm $outFile + fi + echo "< $file1" > $outFile + echo "> $file2" >> $outFile + # -e #1 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'c' ... and replace it with + # "Changed:" + # -e #2 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'd' ... and replace it with + # "Deleted:" + # -e #3 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'a' ... and replace it with + # "Added:" + diff lefOut1S.$$ lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + else + echo "< $file1" + echo "> $file2" + # no output file, output to standard out + diff lefOut1S.$$ lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + fi + rm lefOut1.$$ lefOut1S.$$ lefOut2.$$ lefOut2S.$$ + fi # remove all the temp files from + fi + elif [ "$def" = 1 ] ; then # it's a def file + defdiff.exe $file1 $file2 defOut1.$$ defOut2.$$ $ignorePinExtra $ignoreRowName $ignoreViaName $netSegComp + status=$? + if [ $status != 0 ] ; then + echo "Error in reading the input files, lefdefdiff stops execution!" + if [ -f defOut1.$$ ] ; then # file already created, remove it + rm defOut1.$$ + fi + if [ -f defOut2.$$ ] ; then # file already created, remove it + rm defOut2.$$ + fi + exit $status + fi + if [ -f defOut1S.$$ ] ; then # if sort file for file 1 in tmp, remove it + rm defOut1S.$$ + fi + if [ -f defOut2S.$$ ] ; then # if sort file for file 2 in tmp, remove it + rm defOut2S.$$ + fi + if [ -f defOut1.$$ ] ; then # if both output files are there, it means + if [ -f defOut2.$$ ] ; then # the parser parsed successfully + $ld_sort defOut1.$$ > defOut1S.$$ # sort the output file + $ld_sort defOut2.$$ > defOut2S.$$ + if [ $outFile != 0 ] ; then # user has requested to + # save output in a file + if [ -f $outFile ] ; then # the file exist, remove it + rm $outFile + fi + echo "< $file1" > $outFile + echo "> $file2" >> $outFile + # -e #1 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'c' ... and replace it + # with "Changed:" + # -e #2 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'd' ... and replace it + # with "Deleted:" + # -e #3 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'a' ... and replace it + # with "Added:" + diff defOut1S.$$ defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + else + echo "< $file1" + echo "> $file2" + # no output file, output to standard out + diff defOut1S.$$ defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + fi + rm defOut1.$$ defOut1S.$$ defOut2.$$ defOut2S.$$ + fi # remove all the temp files from /tmp + fi + else + # neither -lef nor -def + output_usage_msg + fi +else + # it's a lef file + if [ "$lef" = 1 ] ; then + # 11/23/99 - Wanda da Rosa, PCR 284352, make the temporary files unique + # per process + lefdiff $file1 $file2 $tmpPath/lefOut1.$$ $tmpPath/lefOut2.$$ + # 11/22/99 - Wanda da Rosa, PCR 281498, check the return status + status=$? + if [ $status != 0 ] ; then + echo "Error in reading the input files, lefdefdiff stops execution!" + if [ -f $tmpPath/lefOut1.$$ ] ; then # file already created, remove it + rm $tmpPath/lefOut1.$$ + fi + if [ -f $tmpPath/lefOut2.$$ ] ; then # file already created, remove it + rm $tmpPath/lefOut2.$$ + fi + exit $status + fi + if [ -f $tmpPath/lefOut1S.$$ ] ; then # if sort file in tmp, remove it + rm $tmpPath/lefOut1S.$$ + fi + if [ -f $tmpPath/lefOut2S.$$ ] ; then # if sort file in tmp, remove it + rm $tmpPath/lefOut2S.$$ + fi + if [ -f $tmpPath/lefOut1.$$ ] ; then # if both output files are there, + if [ -f $tmpPath/lefOut2.$$ ] ; then # the parser parsed successfully + $ld_sort $tmpPath/lefOut1.$$ > $tmpPath/lefOut1S.$$ # sort the output file + $ld_sort $tmpPath/lefOut2.$$ > $tmpPath/lefOut2S.$$ + if [ $outFile != 0 ] ; then # user has requested to + # save output in a file + if [ -f $outFile ] ; then # the file exist, remove it + rm $outFile + fi + echo "< $file1" > $outFile + echo "> $file2" >> $outFile + # -e #1 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'c' ... and replace it with + # "Changed:" + # -e #2 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'd' ... and replace it with + # "Deleted:" + # -e #3 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'a' ... and replace it with + # "Added:" + if [ $quick = 1 ] && [ -x bdiff ] ; then + bdiff $tmpPath/lefOut1S.$$ $tmpPath/lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + else + $ld_diff $tmpPath/lefOut1S.$$ $tmpPath/lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + fi + else + echo "< $file1" + echo "> $file2" + # no output file, output to standard out + if [ $quick = 1 ] && [ -x bdiff ] ; then + bdiff $tmpPath/lefOut1S.$$ $tmpPath/lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + else + $ld_diff $tmpPath/lefOut1S.$$ $tmpPath/lefOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + fi + fi + rm $tmpPath/lefOut1.$$ $tmpPath/lefOut1S.$$ $tmpPath/lefOut2.$$ $tmpPath/lefOut2S.$$ + fi # remove all the temp files from /tmp + fi + elif [ "$def" = 1 ] ; then # it's a def file + defdiff $file1 $file2 $tmpPath/defOut1.$$ $tmpPath/defOut2.$$ $ignorePinExtra $ignoreRowName $ignoreViaName $netSegComp + # 11/22/99 - Wanda da Rosa, PCR 281498, check the return status + status=$? + if [ $status != 0 ] ; then + echo "Error in reading the input files, lefdefdiff stops execution!" + if [ -f $tmpPath/defOut1.$$ ] ; then # file already created, remove it + rm $tmpPath/defOut1.$$ + fi + if [ -f $tmpPath/defOut2.$$ ] ; then # file already created, remove it + rm $tmpPath/defOut2.$$ + fi + exit $status + fi + if [ -f $tmpPath/defOut1S.$$ ] ; then # if sort file in tmp, remove it + rm $tmpPath/defOut1S.$$ + fi + if [ -f $tmpPath/defOut2S.$$ ] ; then # if sort file in tmp, remove it + rm $tmpPath/defOut2S.$$ + fi + if [ -f $tmpPath/defOut1.$$ ] ; then # if both output files are there, + if [ -f $tmpPath/defOut2.$$ ] ; then # the parser parsed successfully + $ld_sort $tmpPath/defOut1.$$ > $tmpPath/defOut1S.$$ # sort the output file + $ld_sort $tmpPath/defOut2.$$ > $tmpPath/defOut2S.$$ + if [ $outFile != 0 ] ; then # user has requested to + # save output in a file + if [ -f $outFile ] ; then # the file exist, remove it + rm $outFile + fi + echo "< $file1" > $outFile + echo "> $file2" >> $outFile + # -e #1 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'c' ... and replace it + # with "Changed:" + # -e #2 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'd' ... and replace it + # with "Deleted:" + # -e #3 below: + # find something that matches begining of line, 1 or more + # numbers followed by 0 or 1 commas follow by 0 or more + # numbers followed by the letter 'a' ... and replace it + # with "Added:" + if [ $quick = 1 ] && [ -x bdiff ] ; then + bdiff $tmpPath/defOut1S.$$ $tmpPath/defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + else + $ld_diff $tmpPath/defOut1S.$$ $tmpPath/defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' \ + >> $outFile + fi + else + echo "< $file1" + echo "> $file2" + # no output file, output to standard out + if [ $quick = 1 ] && [ -x bdiff ] ; then + bdiff $tmpPath/defOut1S.$$ $tmpPath/defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + else + $ld_diff $tmpPath/defOut1S.$$ $tmpPath/defOut2S.$$ | \ + sed \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*c[0-9][0-9]*,\{0,1\}[0-9]*/Changed:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*d[0-9][0-9]*,\{0,1\}[0-9]*/Deleted:/' \ + -e 's/^[0-9][0-9]*,\{0,1\}[0-9]*a[0-9][0-9]*,\{0,1\}[0-9]*/Added:/' + fi + fi + rm $tmpPath/defOut1.$$ $tmpPath/defOut1S.$$ $tmpPath/defOut2.$$ $tmpPath/defOut2S.$$ + fi # remove all the temp files from /tmp + fi + else + # neither -lef nor -def + output_usage_msg + fi +fi diff --git a/lefdef/src/lef/clef/Makefile b/lefdef/src/lef/clef/Makefile new file mode 100644 index 00000000..6195d75f --- /dev/null +++ b/lefdef/src/lef/clef/Makefile @@ -0,0 +1,49 @@ +LEF_TABNAME = lef +LEF_BISON_SRCS = lef.y + +FAKE_ALL: all + +DIRNAME = lef +LEF_BISON_SRCS = lef.y + +LIBTARGET = libclef.a + +PUBLIC_HDRS = lefiArray.h \ + lefiCrossTalk.h \ + lefiDebug.h \ + lefiEncryptInt.h \ + lefiLayer.h \ + lefiMacro.h \ + lefiMisc.h \ + lefiNonDefault.h \ + lefiProp.h \ + lefiPropType.h \ + lefiTypedefs.h \ + lefiUnits.h \ + lefiUser.h \ + lefiUtil.h \ + lefiVia.h \ + lefiViaRule.h \ + lefrReader.h \ + lefwWriter.h \ + lefwWriterCalls.h + +LIBSRCS = xlefiArray.cpp \ + xlefiCrossTalk.cpp \ + xlefiDebug.cpp \ + xlefiEncryptInt.cpp \ + xlefiLayer.cpp \ + xlefiMacro.cpp \ + xlefiMisc.cpp \ + xlefiNonDefault.cpp \ + xlefiProp.cpp \ + xlefiPropType.cpp \ + xlefiUnits.cpp \ + xlefiUtil.cpp \ + xlefiVia.cpp \ + xlefiViaRule.cpp \ + xlefrReader.cpp \ + xlefwWriter.cpp \ + xlefwWriterCalls.cpp + +include ../template.mk diff --git a/lefdef/src/lef/clef/lefMsgTable.h b/lefdef/src/lef/clef/lefMsgTable.h new file mode 100644 index 00000000..dd5efe79 --- /dev/null +++ b/lefdef/src/lef/clef/lefMsgTable.h @@ -0,0 +1,408 @@ + +/* + * emsMkError: +*/ + +#include +#include "ems.h" + +#ifdef TSIZE +#undef TSIZE +#define TSIZE 2048 +#endif + +emsError_t LEFEmsMsgTable[] = +{ + {100 , EMS_NONE, "lefrRead called before lefrInit\n", -1, 0}, + {101 , EMS_NONE, "lefrSetRegisterUnusedCallbacks was not called to setup this data.\n", -1, 0}, + {201 , EMS_NONE, "LEF items that were present but ignored because of no callback:\n", -1, 0}, + {203 , EMS_NONE, "Number has exceeded the limit for an integer. See file %s at line %d.\n", -1, 0}, + {1000 , EMS_NONE, "Expecting '='", -1, 0}, + {1001 , EMS_NONE, "End of file in &ALIAS", -1, 0}, + {1002 , EMS_NONE, "Incomplete lef file", -1, 0}, + {1003 , EMS_NONE, "tag is missing for BEGINEXT", -1, 0}, + {1004 , EMS_NONE, "Tag for BEGINEXT is empty", -1, 0}, + {1005 , EMS_NONE, "\" is missing in tag", -1, 0}, + {1006 , EMS_NONE, "Ending \" is missing", -1, 0}, + {1007 , EMS_NONE, "ENDEXT is missing", -1, 0}, + {1008 , EMS_NONE, "Invalid characters found in \'%s\'.\nThese characters might have created by character types other than English.", -1, 0}, + {1011 , EMS_NONE, "%s, see file %s at line %d.\nLast token was <%s\">; space is missing between the closing \" of the string and ;.\n", -1, 0}, + {1020 , EMS_NONE, "Too many syntax errors.", -1, 0}, + {1300 , EMS_NONE, "The index number %d given for the layer property is invalid.\nValid index is from 0 to %d", -1, 0}, + {1301 , EMS_NONE, "The index number %d given for the layer MINSIZE is invalid.\nValid index is from 0 to %d\n", -1, 0}, + {1302 , EMS_NONE, "The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", -1, 0}, + {1303 , EMS_NONE, "The index number %d given for the layer ARRAYCUTS is invalid.\nValid index is from 0 to %d", -1, 0}, + {1304 , EMS_NONE, "The index number %d given for the layer SPACING is invalid.\nValid index is from 0 to %d", -1, 0}, + {1305 , EMS_NONE, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is either \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", -1, 0}, + {1306 , EMS_NONE, "Incorrect syntax defined for property LEF57_MAXFLOATINGAREA: %s.\nCorrect syntax is \"MAXFLOATINGAREA maxArea\"\n", -1, 0}, + {1307 , EMS_NONE, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", -1, 0}, + {1308 , EMS_NONE, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nLONGARRAY is defined after CUTSPACING.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", -1, 0}, + {1309 , EMS_NONE, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nWIDTH is defined after CUTSPACING.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", -1, 0}, + {1310 , EMS_NONE, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCUTSPACING has defined more than once.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", -1, 0}, + {1311 , EMS_NONE, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCUTSPACING which is required is either has not been defined or defined in a wrong location.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING array Spacing ...\n", -1, 0}, + {1312 , EMS_NONE, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nSPACING should be defined with ARRAYCUTS.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", -1, 0}, + {1313 , EMS_NONE, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", -1, 0}, + {1314 , EMS_NONE, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nARRAYCUTS is required but has not been defined.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", -1, 0}, + {1315 , EMS_NONE, "Incorrect syntax defined for property LEF57_MINSTEP: %s.\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", -1, 0}, + {1316 , EMS_NONE, "Incorrect syntax defined for property LEF57_ANTENNACUMROUTINGPLUSCUT: %s.\nCorrect syntax is \"ANTANNACUMROUTINGPLUSCUT\"\n", -1, 0}, + {1317 , EMS_NONE, "Incorrect syntax defined for property LEF57_ANTENNAGATEPLUSDIFF: %s.\nCorrect syntax is \"ANTENNAGATEPLUSDIFF plusDiffFactor\"\n", -1, 0}, + {1318 , EMS_NONE, "Incorrect syntax defined for property LEF57_ANTENNAAREAMINUSDIFF: %s.\nCorrect syntax is \"ANTENNAAREAMINUSDIFF minusDiffFactor\"\n", -1, 0}, + {1319 , EMS_NONE, "Incorrect syntax defined for property LEF57_ANTENNAAREADIFFREDUCEPWL: %s.\nCorrect syntax is \"ANTENNAAREADIFFREDUCEPWL (( diffArea1 metalDiffFactor1 ) ( diffArea2 metalDiffFactor2 )...)\"\n", -1, 0}, + {1320 , EMS_NONE, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", -1, 0}, + {1321 , EMS_NONE, "The property LEF57_SPACING with value %s is for TYPE CUT only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file", -1, 0}, + {1322 , EMS_NONE, "The property LEF57_SPACING with value %s is for TYPE ROUTING only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.", -1, 0}, + {1323 , EMS_NONE, "The property LEF57_MINSTEP with value %s is for TYPE ROUTING only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.", -1, 0}, + {1324 , EMS_NONE, "Incorrect syntax defined for the statement TWOWIDTHS.\nSpacing, which is required, is not defined.", -1, 0}, + {1325 , EMS_NONE, "Property LEF58_TYPE was added in incorrect layer type.\nIt has the value %s which is for layer type ROUTING.\nThe layer type is %s.\n", -1, 0}, + {1326 , EMS_NONE, "Property LEF58_TYPE was added in incorrect layer type.\nIt has the value %s which is for layer type CUT.\nThe layer type is %s.\n", -1, 0}, + {1327 , EMS_NONE, "Property LEF58_TYPE was added in incorrect layer type.\nIt has the value %s which is for layer type MASTERSLICE.\nThe layer type is %s.\n", -1, 0}, + {1328 , EMS_NONE, "Property LEF58_TYPE has incorrect layer type %s.\nValue layer type are: POLYROUTING, MIMCAP, TSV, PASSIVATION, NWELL or PWELL.\n", -1, 0}, + {1329 , EMS_NONE, "Incorrect syntax defined for property LEF58_TYPE: %s\nCorrect syntax is \"TYPE POLYROUTING | MINCAP | TSV | PASSIVATION | NWELL | PWELL ;\"\n", -1, 0}, + {1330 , EMS_NONE, "Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", -1, 0}, + {1331 , EMS_NONE, "The property LEF57_ENCLOSURE with value %s is for TYPE CUT only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", -1, 0}, + {1350 , EMS_NONE, "The index number %d given for the macro PIN is invalid.\nValid index is from 0 to %d", -1, 0}, + {1351 , EMS_NONE, "There is an unexpected lef parser bug which cause it unable to retrieve ANTENNAMODEL data with the given index.", -1, 0}, + {1352 , EMS_NONE, "The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", -1, 0}, + {1360 , EMS_NONE, "The index number %d given for the geometry item is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1361 , EMS_NONE, "The index number %d given for the geometry RECTANGLE is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1362 , EMS_NONE, "The index number %d given for the geometry RECTANGLE ITERATE is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1363 , EMS_NONE, "The index number %d given for the geometry PATH is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1364 , EMS_NONE, "The index number %d given for the geometry PATH ITERATE is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1365 , EMS_NONE, "The index number %d given for the geometry LAYER is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1366 , EMS_NONE, "The index number %d given for the geometry LAYER EXCEPT PG NET is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1367 , EMS_NONE, "The index number %d given for the geometry LAYER MINSPACING is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1368 , EMS_NONE, "The index number %d given for the geometry LAYER RULE WIDTH is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1369 , EMS_NONE, "The index number %d given for the geometry WIDTH is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1370 , EMS_NONE, "The index number %d given for the geometry POLYGON is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1371 , EMS_NONE, "The index number %d given for the geometry POLYGON ITERATE is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1372 , EMS_NONE, "The index number %d given for the geometry CLASS is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1373 , EMS_NONE, "The index number %d given for the geometry VIA is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1374 , EMS_NONE, "The index number %d given for the geometry VIA ITERATE is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1375 , EMS_NONE, "unknown geometry type.", -1, 0}, + {1376 , EMS_NONE, "The index number %d given for the IRDROP is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1377 , EMS_NONE, "The index number %d given for the TRACK PATTERN is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1400 , EMS_NONE, "Invalid nondefaultvia callback.", -1, 0}, + {1401 , EMS_NONE, "Invalid nondefaultspacing callback.", -1, 0}, + {1402 , EMS_NONE, "The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1403 , EMS_NONE, "The index number %d given for the NONDEFAULT VIA is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1404 , EMS_NONE, "The index number %d given for the NONDEFAULT SPACING is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1405 , EMS_NONE, "The index number %d given for the NONDEFAULT USE VIA is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1406 , EMS_NONE, "The index number %d given for the NONDEFAULT USE VIARULE is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1407 , EMS_NONE, "The index number %d given for the NONDEFAULT CUT is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1408 , EMS_NONE, "The index number %d given for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1420 , EMS_NONE, "The index number %d given for the VIA LAYER RECTANGLE is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1421 , EMS_NONE, "The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d.", -1, 0}, + {1422 , EMS_NONE, "The layer number %d given for the VIA PROPERTY is invalid.\nValid number is from 0 to %d.", -1, 0}, + {1430 , EMS_NONE, "too many via rule layers.", -1, 0}, + {1431 , EMS_NONE, "The index number %d given for the VIARULE PROPERTY is invalid.\nValid index is from 0 to %d.", -1, 0}, + {1501 , EMS_NONE, "Error found when processing LEF file '%s'\nUnit %d is a version 5.6 or later syntax\nYour lef file is defined with version %g.", -1, 0}, + {1502 , EMS_NONE, "The value %d defined for LEF UNITS DATABASE MICRONS is invalid\n. Correct value is 100, 200, 1000, 2000, 10000, or 20000", -1, 0}, + {1503 , EMS_NONE, "Lef parser 5.7 does not support lef file with version %s. Parser will stop processing.", -1, 0}, + {1504 , EMS_NONE, "NAMESCASESENSITIVE statement is set with OFF.\nStarting version 5.6, NAMESCASENSITIVE is obsolete,\nif it is defined, it has to have the ON value.\nParser will stop processing.", -1, 0}, + {1505 , EMS_NONE, "MANUFACTURINGGRID statement was defined before UNITS.\nRefer to the LEF Language Reference manual for the order of LEF statements.", -1, 0}, + {1506 , EMS_NONE, "A MAXVIASTACK statement is defined before the LAYER statement.\nRefer to the LEF Language Reference manual for the order of LEF statements.", -1, 0}, + {1507 , EMS_NONE, "END LAYER name %s is different from the LAYER name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1508 , EMS_NONE, "TYPE statement is a required statement in a LAYER and it is not defined.", -1, 0}, + {1509 , EMS_NONE, "PITCH statement is a required statement in a LAYER with TYPE ROUTING and it is not defined.", -1, 0}, + {1510 , EMS_NONE, "WIDTH statement is a required statement in a LAYER with TYPE ROUTING and it is not defined.", -1, 0}, + {1511 , EMS_NONE, "The DIRECTION statement which is required in a LAYER with TYPE ROUTING is not defined in LAYER %s.\nUpdate your lef file and add the DIRECTION statement for layer %s.", -1, 0}, + {1512 , EMS_NONE, "It is incorrect to define a SPACING statement in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing.", -1, 0}, + {1513 , EMS_NONE, "DIRECTION statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1514 , EMS_NONE, "RESISTANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1515 , EMS_NONE, "RESISTANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1516 , EMS_NONE, "CAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1517 , EMS_NONE, "CAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1518 , EMS_NONE, "HEIGHT statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1519 , EMS_NONE, "WIREEXTENSION statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1520 , EMS_NONE, "THICKNESS statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1521 , EMS_NONE, "SHRINKAGE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1522 , EMS_NONE, "CAPMULTIPLIER statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1523 , EMS_NONE, "EDGECAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1524 , EMS_NONE, "ANTENNAAREAFACTOR statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1525 , EMS_NONE, "ANTENNALENGTHFACTOR statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1526 , EMS_NONE, "ANTENNALENGTHFACTOR statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNALENGTHFACTOR syntax, which is incorrect.", -1, 0}, + {1527 , EMS_NONE, "ACCURRENTDENSITY statement can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing.", -1, 0}, + {1528 , EMS_NONE, "DCCURRENTDENSITY statement can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing.", -1, 0}, + {1529 , EMS_NONE, "CUTAREA statement can only be defined in LAYER with TYPE CUT. Parser will stop processing.", -1, 0}, + {1530 , EMS_NONE, "WIDTH statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1531 , EMS_NONE, "ANTENNAAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1532 , EMS_NONE, "ANTENNADIFFAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNAAREARATIO syntax, which is incorrect.", -1, 0}, + {1533 , EMS_NONE, "ANTENNAAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1534 , EMS_NONE, "ANTENNADIFFAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1535 , EMS_NONE, "ANTENNACUMAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1536 , EMS_NONE, "ANTENNACUMAREARATIO statement is a version 5.4 or earlier old syntax.\nYour lef file with version %g, has both old and new ANTENNACUMAREARATIO syntax, which is incorrect.", -1, 0}, + {1537 , EMS_NONE, "ANTENNACUMAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1538 , EMS_NONE, "ANTENNACUMDIFFAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1539 , EMS_NONE, "ANTENNACUMDIFFAREARATIO statement is a version 5.4 or earlier old syntax.\nYour lef file with version %g, has both old and new ANTENNACUMDIFFAREARATIO syntax, which is incorrect.", -1, 0}, + {1540 , EMS_NONE, "ANTENNACUMDIFFAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1541 , EMS_NONE, "ANTENNAAREAFACTOR can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1542 , EMS_NONE, "ANTENNASIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1543 , EMS_NONE, "ANTENNASIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1544 , EMS_NONE, "ANTENNASIDEAREARATIO statement is a version 5.4 or earlier old syntax.\nYour lef file with version %g, has both old and new ANTENNASIDEAREARATIO syntax, which is incorrect.", -1, 0}, + {1545 , EMS_NONE, "ANTENNADIFFSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1546 , EMS_NONE, "ANTENNADIFFSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1547 , EMS_NONE, "ANTENNADIFFSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNADIFFSIDEAREARATIO syntax, which is incorrect.", -1, 0}, + {1548 , EMS_NONE, "ANTENNACUMSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1549 , EMS_NONE, "ANTENNACUMSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1550 , EMS_NONE, "ANTENNACUMSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNACUMSIDEAREARATIO syntax, which is incorrect.", -1, 0}, + {1551 , EMS_NONE, "ANTENNACUMDIFFSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1552 , EMS_NONE, "ANTENNACUMDIFFSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1553 , EMS_NONE, "ANTENNACUMDIFFSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNACUMDIFFSIDEAREARATIO syntax, which is incorrect.", -1, 0}, + {1554 , EMS_NONE, "ANTENNASIDEAREAFACTOR can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1555 , EMS_NONE, "ANTENNASIDEAREAFACTOR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1556 , EMS_NONE, "ANTENNASIDEAREAFACTOR statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNASIDEAREAFACTOR syntax, which is incorrect.", -1, 0}, + {1557 , EMS_NONE, "ANTENNAMODEL can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1558 , EMS_NONE, "ANTENNAMODEL statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1559 , EMS_NONE, "ANTENNAMODEL statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNAMODEL syntax, which is incorrect.", -1, 0}, + {1560 , EMS_NONE, "ANTENNACUMROUTINGPLUSCUT can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1561 , EMS_NONE, "ANTENNAGATEPLUSDIFF can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1562 , EMS_NONE, "ANTENNAAREAMINUSDIFF can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1563 , EMS_NONE, "ANTENNAAREADIFFREDUCEPWL can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing.", -1, 0}, + {1564 , EMS_NONE, "SLOTWIREWIDTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1565 , EMS_NONE, "SLOTWIRELENGTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1566 , EMS_NONE, "SLOTWIDTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1567 , EMS_NONE, "SLOTLENGTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1568 , EMS_NONE, "MAXADJACENTSLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1569 , EMS_NONE, "MAXCOAXIALSLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1570 , EMS_NONE, "MAXEDGESLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1571 , EMS_NONE, "SPLITWIREWIDTH statement is a version 5.4 and later syntax.\n Your lef file is defined with version %g.", -1, 0}, + {1572 , EMS_NONE, "MINIMUMDENSITY statement is a version 5.4 and later syntax.\n Your lef file is defined with version %g.", -1, 0}, + {1573 , EMS_NONE, "MAXIMUMDENSITY statement is a version 5.4 and later syntax.\n Your lef file is defined with version %g.", -1, 0}, + {1574 , EMS_NONE, "DENSITYCHECKWINDOW statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1575 , EMS_NONE, "DENSITYCHECKSTEP statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1576 , EMS_NONE, "FILLACTIVESPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1577 , EMS_NONE, "MAXWIDTH statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1578 , EMS_NONE, "MAXWIDTH statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1579 , EMS_NONE, "MINWIDTH statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1580 , EMS_NONE, "MINWIDTH statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1581 , EMS_NONE, "MINENCLOSEDAREA statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1582 , EMS_NONE, "PROTRUSION RULE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1583 , EMS_NONE, "SPACINGTABLE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1584 , EMS_NONE, "ENCLOSURE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1585 , EMS_NONE, "PREFERENCLOSURE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1586 , EMS_NONE, "RESISTANCE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1587 , EMS_NONE, "DIAGMINEDGELENGTH can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1588 , EMS_NONE, "DIAGMINEDGELENGTH statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1589 , EMS_NONE, "An INFLUENCE table statement was defined before the PARALLELRUNLENGTH table statement.\nINFLUENCE table statement should be defined following the PARALLELRUNLENGTH.\nChange the LEF file and rerunning the parser.", -1, 0}, + {1590 , EMS_NONE, "There is multiple PARALLELRUNLENGTH table statements are defined within a layer.\nAccording to the LEF Reference Manual, only one PARALLELRUNLENGTH table statement is allowed per layer.", -1, 0}, + {1591 , EMS_NONE, "The total number of lengths defined in the PARALLELRUNLENGTH statement is not equal to\nthe total number of spacings defined in the WIDTH statement in the SPACINGTABLE.", -1, 0}, + {1592 , EMS_NONE, "A PARALLELRUNLENGTH statement was already defined in the layer.\nIt is PARALLELRUNLENGTH or TOWWIDTHS is allowed per layer.", -1, 0}, + {1593 , EMS_NONE, "A TWOWIDTHS table statement was already defined in the layer.\nOnly one TWOWIDTHS statement is allowed per layer.", -1, 0}, + {1594 , EMS_NONE, "A INFLUENCE table statement was already defined in the layer.\nOnly one INFLUENCE statement is allowed per layer.", -1, 0}, + {1595 , EMS_NONE, "An INFLUENCE table statement was already defined before the layer.\nINFLUENCE statement has to be defined after the PARALLELRUNLENGTH table statement in the layer.", -1, 0}, + {1596 , EMS_NONE, "FROMABOVE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1597 , EMS_NONE, "FROMBELOW statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1598 , EMS_NONE, "LENGTH WITHIN statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1599 , EMS_NONE, "ANTENNAAREAFACTOR with DIFFUSEONLY statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1600 , EMS_NONE, "CUTAREA statement can only be defined in LAYER with TYPE CUT.", -1, 0}, + {1601 , EMS_NONE, "WIDTH can only be defined in LAYER with TYPE ROUTING.", -1, 0}, + {1602 , EMS_NONE, "MAXVIASTACK statement has to be defined after the LAYER statement.", -1, 0}, + {1603 , EMS_NONE, "A MAXVIASTACK was already defined.\nOnly one MAXVIASTACK is allowed per lef file.", -1, 0}, + {1604 , EMS_NONE, "MAXVIASTACK statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1605 , EMS_NONE, "DEFAULT statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1606 , EMS_NONE, "A LAYER statement is missing in the VIA %s.\nAt least one LAYER is required per VIA statement.", -1, 0}, + {1607 , EMS_NONE, "END VIA name %s is different from the VIA name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1608 , EMS_NONE, "A VIARULE statement requires two layers.", -1, 0}, + {1609 , EMS_NONE, "A DIRECTION statement was already defined in the layer.\nIt is DIRECTION or ENCLOSURE can be specified in a layer.", -1, 0}, + {1610 , EMS_NONE, "An OVERHANG statement is defined, but the required DIRECTION statement is not yet defined.\nUpdate the LEF file to define the DIRECTION statement before the OVERHANG.", -1, 0}, + {1611 , EMS_NONE, "An OVERHANG statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE.", -1, 0}, + {1612 , EMS_NONE, "An METALOVERHANG statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE.", -1, 0}, + {1613 , EMS_NONE, "An METALOVERHANG statement is defined, but the required DIRECTION statement is not yet defined.\nUpdate the LEF file to define the DIRECTION statement before the OVERHANG.", -1, 0}, + {1614 , EMS_NONE, "An ENCLOSURE statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE.", -1, 0}, + {1615 , EMS_NONE, "END VIARULE name %s is different from the VIARULE name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1616 , EMS_NONE, "SAMENET statement is required inside SPACING for any lef file with version 5.4 and earlier, but is not defined in the parsed lef file.", -1, 0}, + {1617 , EMS_NONE, "NONDEFAULTRULE statement requires at least one LAYER statement.", -1, 0}, + {1618 , EMS_NONE, "NONDEFAULTRULE statement requires at least one VIA statement.", -1, 0}, + {1619 , EMS_NONE, "END NONDEFAULTRULE name %s is different from the NONDEFAULTRULE name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1620 , EMS_NONE, "HARDSPACING statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1621 , EMS_NONE, "USEVIA statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1622 , EMS_NONE, "USEVIARULE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1623 , EMS_NONE, "MINCUTS statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1624 , EMS_NONE, "END LAYER name %s is different from the LAYER name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1625 , EMS_NONE, "A WIDTH statement is required in the LAYER statement in NONDEFAULTRULE.", -1, 0}, + {1626 , EMS_NONE, "A SPACING statement is required in the LAYER statement in NONDEFAULTRULE for lef file with version 5.5 and earlier.\nYour lef file is defined with version %g. Update your lef to add a LAYER statement and try again.", -1, 0}, + {1627 , EMS_NONE, "RESISTANCE RPERSQ statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1628 , EMS_NONE, "CAPACITANCE CPERSQDIST statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1629 , EMS_NONE, "EDGECAPACITANCE statement is a version 5.4 and later syntax.\n Your lef file is defined with version %g.", -1, 0}, + {1630 , EMS_NONE, "DIAGWIDTH statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1631 , EMS_NONE, "END SITE name %s is different from the SITE name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1632 , EMS_NONE, "A CLASS statement is required in the SITE statement.", -1, 0}, + {1633 , EMS_NONE, "A SIZE statement is required in the SITE statement.", -1, 0}, + {1634 , EMS_NONE, "END MACRO name %s is different from the MACRO name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1635 , EMS_NONE, "COVER BUMP statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1636 , EMS_NONE, "BLOCK BLACKBOX statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1637 , EMS_NONE, "BLOCK SOFT statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1638 , EMS_NONE, "PAD AREAIO statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1639 , EMS_NONE, "SPACER statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1640 , EMS_NONE, "ANTENNACELL statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1641 , EMS_NONE, "WELLTAP statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1642 , EMS_NONE, "ORIGIN statement has been defined more than once in a MACRO statement.\nOnly one ORIGIN statement can be defined in a Macro.\nParser will stop processing.", -1, 0}, + {1643 , EMS_NONE, "END PIN name %s is different from the PIN name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1644 , EMS_NONE, "ANTENNASIZE statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1645 , EMS_NONE, "ANTENNAMETALAREA statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1646 , EMS_NONE, "ANTENNAMETALLENGTH statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1647 , EMS_NONE, "ANTENNAPARTIALMETALAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1648 , EMS_NONE, "ANTENNAPARTIALMETALSIDEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1649 , EMS_NONE, "ANTENNAPARTIALCUTAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1650 , EMS_NONE, "ANTENNADIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1651 , EMS_NONE, "ANTENNAGATEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1652 , EMS_NONE, "ANTENNAMAXAREACAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1653 , EMS_NONE, "ANTENNAMAXSIDEAREACAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1654 , EMS_NONE, "ANTENNAMAXCUTCAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1655 , EMS_NONE, "ANTENNAMODEL statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1656 , EMS_NONE, "NETEXPR statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1657 , EMS_NONE, "SUPPLYSENSITIVITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1658 , EMS_NONE, "GROUNDSENSITIVITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1659 , EMS_NONE, "THE SPACING statement has the value %g in MACRO OBS.\nValue has to be 0 or greater.", -1, 0}, + {1660 , EMS_NONE, "THE DESIGNRULEWIDTH statement has the value %g in MACRO OBS.\nValue has to be 0 or greater.", -1, 0}, + {1661 , EMS_NONE, "DENSITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1662 , EMS_NONE, "END ARRAY name %s is different from the ARRAY name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", -1, 0}, + {1663 , EMS_NONE, "A CENTERTOCENTER statement was already defined in SPACING\nCENTERTOCENTER can only be defined once per LAYER CUT SPACING.", -1, 0}, + {1664 , EMS_NONE, "CENTERTOCENTER statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1665 , EMS_NONE, "A SAMENET statement was already defined in SPACING\nSAMENET can only be defined once per LAYER CUT SPACING.", -1, 0}, + {1666 , EMS_NONE, "A PARALLELOVERLAP statement was already defined in SPACING\nPARALLELOVERLAP can only be defined once per LAYER CUT SPACING.", -1, 0}, + {1667 , EMS_NONE, "A SAMENET statement was already defined in SPACING\nEither SAMENET or LAYER can be defined, but not both.", -1, 0}, + {1668 , EMS_NONE, "ADJACENTCUTS statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1669 , EMS_NONE, "A SAMENET statement was already defined in SPACING\nEither SAMENET or ADJACENTCUTS can be defined, but not both.", -1, 0}, + {1670 , EMS_NONE, "A SAMENET statement was already defined in SPACING\nEither SAMENET or AREA can be defined, but not both.", -1, 0}, + {1671 , EMS_NONE, "INPUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new INPUTPINANTENNASIZE syntax, which is incorrect.", -1, 0}, + {1672 , EMS_NONE, "OUTPUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new OUTPUTPINANTENNASIZE syntax, which is incorrect.", -1, 0}, + {1673 , EMS_NONE, "INOUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new INOUTPINANTENNASIZE syntax, which is incorrect.", -1, 0}, + {1674 , EMS_NONE, "ANTENNAINPUTGATEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number to 5.4 or later, or use the 5.3 syntax:\n{ INPUTINATENNASIZE | OUTPUTPINANTENNASIZE | INOUTPINANTENNASIZE } value.", -1, 0}, + {1675 , EMS_NONE, "ANTENNAINPUTGATEAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAINPUTGATEAREA syntax, which is incorrect.", -1, 0}, + {1676 , EMS_NONE, "ANTENNAINOUTDIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number to 5.4 or later, or use the 5.3 syntax:\n{ INPUTINATENNASIZE | OUTPUTPINANTENNASIZE | INOUTPINANTENNASIZE } value.", -1, 0}, + {1677 , EMS_NONE, "ANTENNAINOUTDIFFAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAINOUTDIFFAREA syntax, which is incorrect.", -1, 0}, + {1678 , EMS_NONE, "ANTENNAOUTPUTDIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number to 5.4 or later, or use the 5.3 syntax:\n{ INPUTINATENNASIZE | OUTPUTPINANTENNASIZE | INOUTPINANTENNASIZE } value..", -1, 0}, + {1679 , EMS_NONE, "ANTENNAOUTPUTDIFFAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAOUTPUTDIFFAREA syntax, which is incorrect.", -1, 0}, + {1680 , EMS_NONE, "PARALLELOVERLAP is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1681 , EMS_NONE, "ENDOFLINE is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1682 , EMS_NONE, "NOTCHLENGTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1683 , EMS_NONE, "EXCEPTSAMEPGNET is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1684 , EMS_NONE, "SAMENET is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1685 , EMS_NONE, "ARRAYSPACING is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1686 , EMS_NONE, "ANTENNACUMROUTINGPLUSCUT is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1687 , EMS_NONE, "ANTENNAGATEPLUSDIFF is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1688 , EMS_NONE, "ANTENNAAREAMINUSDIFF is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1689 , EMS_NONE, "ANTENNAAREADIFFREDUCEPWL is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1690 , EMS_NONE, "EXCEPTEXTRACUT is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1691 , EMS_NONE, "LENGTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1693 , EMS_NONE, "AREA is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1694 , EMS_NONE, "SPACINGTABLE ORTHOGONAL is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1696 , EMS_NONE, "ENDOFNOTCHWIDTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1697 , EMS_NONE, "TWOWIDTHS is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1698 , EMS_NONE, "BUMP is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1699 , EMS_NONE, "EXCEPTPGNET is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1700 , EMS_NONE, "MINIMUMCUT WITHIN is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1701 , EMS_NONE, "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined.", -1, 0}, + {1702 , EMS_NONE, "CURRENTDEN statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing.", -1, 0}, + {1703 , EMS_NONE, "ANTENNADIFFAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1704 , EMS_NONE, "ANTENNADIFFAREARATIO statement is a version 5.4 or earlier old syntax.\nYour lef file with version %g, has both old and new ANTENNADIFFAREARATIO syntax, which is incorrect.", -1, 0}, + {1705 , EMS_NONE, "VIARULE statement in a layer, requires a DIRECTION construct statement.", -1, 0}, + {1706 , EMS_NONE, "An ENCLOSURE statement was already defined in the layer.\nIt is DIRECTION or ENCLOSURE can be specified in a layer.", -1, 0}, + {1707 , EMS_NONE, "ENCLOSURE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1708 , EMS_NONE, "A VIARULE GENERATE requires three layers.", -1, 0}, + {1709 , EMS_NONE, "VIARULE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1710 , EMS_NONE, "MAXEDGES is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1711 , EMS_NONE, "NOSHAREDEDGE in LAYER ENCLOSURE is a version 5.8 or later syntax.\nYour lef file is defined with version %g.", -1, 0}, + {1712 , EMS_NONE, "MINFEATURE statement was defined before UNITS.\nRefer the LEF Language Reference manual for the order of LEF statements.", -1, 0}, + {2000 , EMS_NONE, "String has exceeded 4096 characters, extra characters are truncated.", -1, 0}, + {2001 , EMS_NONE, "VERSION is a required statement on LEF file with version 5.5 and earlier.\nWithout VERSION defined, the LEF file is technically incorrect.\nRefer to the LEF/DEF 5.5 or earlier Language Reference manual on how to defined this statement.", -1, 0}, + {2002 , EMS_NONE, "NAMESCASESENSITIVE is a required statement on LEF file with version 5.5 and earlier.\nWithout NAMESCASESENSITIVE defined, the LEF file is technically incorrect.\nRefer to the LEF/DEF 5.5 or earlier Language Reference manual on how to define this statement.", -1, 0}, + {2003 , EMS_NONE, "BUSBITCHARS is a required statement on LEF file with version 5.5 and earlier.\nWithout BUSBITCHARS defined, the LEF file is technically incorrect.\nRefer to the LEF/DEF 5.5 or earlier Language Reference manual on how to define this statement.", -1, 0}, + {2004 , EMS_NONE, "DIVIDERCHAR is a required statement on LEF file with version 5.5 and earlier.\nWithout DIVIDECHAR defined, the LEF file is technically incorrect.\nRefer to the LEF/DEF 5.5 or earlier Language Reference manual on how to define this statement.", -1, 0}, + {2005 , EMS_NONE, "DIVIDERCHAR has an invalid null value. Value is set to default /", -1, 0}, + {2006 , EMS_NONE, "BUSBITCHAR has an invalid null value. Value is set to default []", -1, 0}, + {2007 , EMS_NONE, "NAMESCASESENSITIVE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2008 , EMS_NONE, "NOWIREEXTENSIONATPIN statement is obsolete in version 5.6 or later.\nThe NOWIREEXTENSIONATPIN statement will be ignored.", -1, 0}, + {2009 , EMS_NONE, "USEMINSPACING PIN statement is obsolete in version 5.6 or later.\n The USEMINSPACING PIN statement will be ignored.", -1, 0}, + {2010 , EMS_NONE, "It is incorrect to have both SPACING rules & SPACINGTABLE rules within a ROUTING layer.", -1, 0}, + {2011 , EMS_NONE, "SLOTWIREWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later.", -1, 0}, + {2012 , EMS_NONE, "SLOTWIRELENGTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later.", -1, 0}, + {2013 , EMS_NONE, "SLOTWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later.", -1, 0}, + {2014 , EMS_NONE, "SLOTLENGTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later.", -1, 0}, + {2015 , EMS_NONE, "MAXADJACENTSLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later.", -1, 0}, + {2016 , EMS_NONE, "MAXCOAXIALSLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later.", -1, 0}, + {2017 , EMS_NONE, "MAXEDGESLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later.", -1, 0}, + {2018 , EMS_NONE, "SPLITWIREWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later.", -1, 0}, + {2019 , EMS_NONE, "TOPOFSTACKONLY statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2020 , EMS_NONE, "FOREIGN statement in VIA is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2021 , EMS_NONE, "turn-via is obsolete in version 5.6 and later.\n The LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2022 , EMS_NONE, "DIRECTION statement in VIARULE is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2023 , EMS_NONE, "OVERHANG statement will be translated into similar ENCLOSURE rule", -1, 0}, + {2024 , EMS_NONE, "METALOVERHANG statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2025 , EMS_NONE, "SAMENET statement in NONDEFAULTRULE is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2026 , EMS_NONE, "IRDROP statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2027 , EMS_NONE, "MINFEATURE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2028 , EMS_NONE, "DIELECTRIC statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2029 , EMS_NONE, "RESISTANCE RPERSQ statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2030 , EMS_NONE, "CAPACITANCE CPERSQDIST statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2031 , EMS_NONE, "EDGECAPACITANCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2032 , EMS_NONE, "A SITE statement is defined before SYMMETRY statement.\nTo avoid this warning in the future, define SITE after SYMMETRY.", -1, 0}, + {2033 , EMS_NONE, "The statement COVER BUMP is a LEF version 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning.", -1, 0}, + {2034 , EMS_NONE, "The statement BLOCK BLACKBOX is a LEF verion 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning.", -1, 0}, + {2035 , EMS_NONE, "The statement PAD AREAIO is a LEF verion 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning.", -1, 0}, + {2036 , EMS_NONE, "SOURCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2037 , EMS_NONE, "SOURCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2038 , EMS_NONE, "MACRO POWER statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2039 , EMS_NONE, "A SITE statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define SITE after ORIGIN.", -1, 0}, + {2040 , EMS_NONE, "A PIN statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define PIN after ORIGIN.", -1, 0}, + {2041 , EMS_NONE, "A OBS statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define OBS after ORIGIN.", -1, 0}, + {2042 , EMS_NONE, "LEQ statement in MACRO is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2043 , EMS_NONE, "FOREIGN statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2044 , EMS_NONE, "LEQ statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2045 , EMS_NONE, "MACRO POWER statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2046 , EMS_NONE, "MACRO LEAKAGE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2047 , EMS_NONE, "MACRO RISETHRESH statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2048 , EMS_NONE, "MACRO FALLTHRESH statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2049 , EMS_NONE, "MACRO RISESATCUR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2050 , EMS_NONE, "MACRO FALLSATCUR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2051 , EMS_NONE, "MACRO VLO statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2052 , EMS_NONE, "MACRO VHI statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2053 , EMS_NONE, "MACRO TIEOFFR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2054 , EMS_NONE, "MACRO OUTPUTNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2055 , EMS_NONE, "MACRO OUTPUTRESISTANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2056 , EMS_NONE, "MACRO INPUTNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2057 , EMS_NONE, "MACRO CAPACITANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2058 , EMS_NONE, "MACRO RESISTANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2059 , EMS_NONE, "MACRO PULLDOWNRES statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2060 , EMS_NONE, "MACRO CURRENTSOURCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2061 , EMS_NONE, "MACRO CURRENTSOURCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2062 , EMS_NONE, "MACRO RISEVOLTAGETHRESHOLD statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2063 , EMS_NONE, "MACRO FALLVOLTAGETHRESHOLD statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2064 , EMS_NONE, "MACRO IV_TABLES statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2065 , EMS_NONE, "Either PATH, RECT or POLYGON statement is a required in MACRO/PIN/PORT.", -1, 0}, + {2066 , EMS_NONE, "MACRO TIMING statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2067 , EMS_NONE, "DEFINE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2068 , EMS_NONE, "DEFINES statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2069 , EMS_NONE, "DEFINEB statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later.", -1, 0}, + {2070 , EMS_NONE, "UNIVERSALNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2071 , EMS_NONE, "EDGERATETHRESHOLD1 statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2072 , EMS_NONE, "EDGERATETHRESHOLD2 statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2073 , EMS_NONE, "EDGERATESCALEFACTOR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2074 , EMS_NONE, "NOISETABLE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2075 , EMS_NONE, "CORRECTIONTABLE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later.", -1, 0}, + {2076 , EMS_NONE, "Either PATH, RECT or POLYGON statement is required in MACRO/OBS.", -1, 0}, + {2077 , EMS_NONE, "A SPACING SAMENET section is defined but it is not legal in a LEF 5.7 version file.\nIt will be ignored which will probably cause real DRC violations to be ignored, and may\ncause false DRC violations to occur.\n\nTo avoid this warning, and correctly handle these DRC rules, you should modify your\nLEF to use the appropriate SAMENET keywords as described in the LEF/DEF 5.7\nmanual under the SPACING statements in the LAYER (Routing) and LAYER (Cut)\nsections listed in the LEF Table of Contents.", -1, 0}, + {2078 , EMS_NONE, "It is illegal to have more than one SPACINGTABLE rules within a ROUTING layer", -1, 0}, + {2079 , EMS_NONE, "CURRENTDEN statement is obsolete in version 5.2 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.2 or later.", -1, 0}, + {2080 , EMS_NONE, "The number of cut values in multiple ARRAYSPACING ARRAYCUTS are not in increasing order.\nTo be consistent with the documentation, update the cut values to increasing order.", -1, 0}, + {2502 , EMS_NONE, "Message %s has been suppressed from output", -1, 0}, + {2503 , EMS_NONE, "Message %s has exceeded the message display limit of %d.", -1, 0}, + {3000 , EMS_NONE, "There are still data after the END LIBRARY", -1, 0}, + {4000 , EMS_NONE, "lefwInitCbk was already called, cannot call lefwInit again.\nWriter Exit.\n", -1, 0}, + {4001 , EMS_NONE, "lefwInit was already called, cannot call lefwInitCbk again.\nWriter Exit.\n", -1, 0}, + {4002 , EMS_NONE, "lefwInit was already called, cannot call lefwInitCbk again.\nWriter Exit.\n", -1, 0}, + {4003 , EMS_NONE, "lefwLayerRoutingSpacingUseLengthThreshold cannot be called if\n\tlefwLayerRoutingSpacingRange has not been called.\n", -1, 0}, + {4004 , EMS_NONE, "lefwLayerRoutingSpacingInfluence cannot be called if\n\tlefRange and rightRange in lefwLayerRoutingSpacing are both zero.\n", -1, 0}, + {4005 , EMS_NONE, "lefwLayerRoutingSpacingInfluence cannot be called if\n\tlefRange and rightRange in lefwLayerRoutingSpacing are both zero.", -1, 0}, + {4006 , EMS_NONE, "Need an output file if writing in encrypted format.\n", -1, 0}, + {4100 , EMS_NONE, "lefwWrite called before lefwInitCbk.\n", -1, 0}, + {4101 , EMS_NONE, "lefwSetRegisterUnusedCallbacks was not called to setup this data.\n", -1, 0}, + {4500 , EMS_NONE, "Callback for %s is required, but is not defined.\n\n", -1, 0}, + {4700 , EMS_NONE, "LEF items that were present but ignored because of no callbacks were set.\n", -1, 0}, + {-1 , EMS_NONE, "", -1, 0} +}; + +/* + * End machine generated table. +*/ diff --git a/lefdef/src/lef/clef/lefiArray.h b/lefdef/src/lef/clef/lefiArray.h new file mode 100644 index 00000000..f354d019 --- /dev/null +++ b/lefdef/src/lef/clef/lefiArray.h @@ -0,0 +1,73 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIARRAY_H +#define CLEFIARRAY_H + +#include +#include "lefiTypedefs.h" + +EXTERN int lefiArrayFloorPlan_numPatterns (const lefiArrayFloorPlan* obj); +EXTERN const lefiSitePattern* lefiArrayFloorPlan_pattern (const lefiArrayFloorPlan* obj, int index); +EXTERN char* lefiArrayFloorPlan_typ (const lefiArrayFloorPlan* obj, int index); +EXTERN const char* lefiArrayFloorPlan_name (const lefiArrayFloorPlan* obj); + +EXTERN int lefiArray_numSitePattern (const lefiArray* obj); +EXTERN int lefiArray_numCanPlace (const lefiArray* obj); +EXTERN int lefiArray_numCannotOccupy (const lefiArray* obj); +EXTERN int lefiArray_numTrack (const lefiArray* obj); +EXTERN int lefiArray_numGcell (const lefiArray* obj); +EXTERN int lefiArray_hasDefaultCap (const lefiArray* obj); + +EXTERN const char* lefiArray_name (const lefiArray* obj); +EXTERN const lefiSitePattern* lefiArray_sitePattern (const lefiArray* obj, int index); +EXTERN const lefiSitePattern* lefiArray_canPlace (const lefiArray* obj, int index); +EXTERN const lefiSitePattern* lefiArray_cannotOccupy (const lefiArray* obj, int index); +EXTERN const lefiTrackPattern* lefiArray_track (const lefiArray* obj, int index); +EXTERN const lefiGcellPattern* lefiArray_gcell (const lefiArray* obj, int index); + +EXTERN int lefiArray_tableSize (const lefiArray* obj); +EXTERN int lefiArray_numDefaultCaps (const lefiArray* obj); +EXTERN int lefiArray_defaultCapMinPins (const lefiArray* obj, int index); +EXTERN double lefiArray_defaultCap (const lefiArray* obj, int index); + +EXTERN int lefiArray_numFloorPlans (const lefiArray* obj); +EXTERN const char* lefiArray_floorPlanName (const lefiArray* obj, int index); +EXTERN int lefiArray_numSites (const lefiArray* obj, int index); +EXTERN const char* lefiArray_siteType (const lefiArray* obj, int floorIndex, int siteIndex); +EXTERN const lefiSitePattern* lefiArray_site (const lefiArray* obj, int floorIndex, int siteIndex); + + /* Debug print */ +EXTERN void lefiArray_print (const lefiArray* obj, FILE* f); + +#endif diff --git a/lefdef/src/lef/clef/lefiCrossTalk.h b/lefdef/src/lef/clef/lefiCrossTalk.h new file mode 100644 index 00000000..e863dba7 --- /dev/null +++ b/lefdef/src/lef/clef/lefiCrossTalk.h @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFICROSSTALK_H +#define CLEFICROSSTALK_H + +#include +#include "lefiTypedefs.h" + +/* Structure returned for the noise margin callback. */ +/* This lef construct has two floating point numbers. */ + +EXTERN double lefiNoiseVictim_length (const lefiNoiseVictim* obj); +EXTERN int lefiNoiseVictim_numNoises (const lefiNoiseVictim* obj); +EXTERN double lefiNoiseVictim_noise (const lefiNoiseVictim* obj, int index); + +EXTERN int lefiNoiseResistance_numNums (const lefiNoiseResistance* obj); +EXTERN double lefiNoiseResistance_num (const lefiNoiseResistance* obj, int index); + +EXTERN int lefiNoiseResistance_numVictims (const lefiNoiseResistance* obj); +EXTERN const lefiNoiseVictim* lefiNoiseResistance_victim (const lefiNoiseResistance* obj, int index); + +#endif diff --git a/lefdef/src/lef/clef/lefiDebug.h b/lefdef/src/lef/clef/lefiDebug.h new file mode 100644 index 00000000..fd773370 --- /dev/null +++ b/lefdef/src/lef/clef/lefiDebug.h @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIDEBUG_H +#define CLEFIDEBUG_H + +#include +#include "lefiTypedefs.h" + +/* Set flag */ +EXTERN void lefiSetDebug (int num, int value); + +/* Read flag */ +EXTERN int lefiDebug (int num); + +/* Error reporting routine */ +EXTERN void lefiError (int check, int msgNum, const char* msg); + +EXTERN const char* CASE (const char * x); + +#endif diff --git a/lefdef/src/lef/clef/lefiEncryptExt.c b/lefdef/src/lef/clef/lefiEncryptExt.c new file mode 100755 index 00000000..3b0ade29 --- /dev/null +++ b/lefdef/src/lef/clef/lefiEncryptExt.c @@ -0,0 +1,17 @@ +/* + * This file is part of the Cadence LEF/DEF Open Source + * Distribution, Product Version 5.7, and is subject to the Cadence LEF/DEF + * Open Source License Agreement. Your continued use of this file + * constitutes your acceptance of the terms of the LEF/DEF Open Source + * License and an agreement to abide by its terms. If you don't agree + * with this, you must remove this and any other files which are part of the + * distribution and destroy any copies made. + * + * For updates, support, or to become part of the LEF/DEF Community, check + * www.openeda.org for details. + */ +#include + +/* + * Global variables + */ int lefrReadEncrypted = 0; diff --git a/lefdef/src/lef/clef/lefiEncryptInt.h b/lefdef/src/lef/clef/lefiEncryptInt.h new file mode 100644 index 00000000..3ac143bd --- /dev/null +++ b/lefdef/src/lef/clef/lefiEncryptInt.h @@ -0,0 +1,45 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIENCRYPTINT_H +#define CLEFIENCRYPTINT_H + +#include +#include "lefiTypedefs.h" + +/* Unable the reader to read encrypted lef file. */ +/* This function must be called before lefrRead(). */ +/* / */ +EXTERN void lefrEnableReadEncrypted (); + +#endif diff --git a/lefdef/src/lef/clef/lefiLayer.h b/lefdef/src/lef/clef/lefiLayer.h new file mode 100644 index 00000000..4f899cae --- /dev/null +++ b/lefdef/src/lef/clef/lefiLayer.h @@ -0,0 +1,437 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2015, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFILAYER_H +#define CLEFILAYER_H + +#include +#include "lefiTypedefs.h" + +typedef enum lefiAntennaEnum { + lefiAntennaAR = 1, + lefiAntennaDAR = 2, + lefiAntennaCAR = 3, + lefiAntennaCDAR = 4, + lefiAntennaAF = 5, + lefiAntennaSAR = 6, + lefiAntennaDSAR = 7, + lefiAntennaCSAR = 8, + lefiAntennaCDSAR = 9, + lefiAntennaSAF = 10, + lefiAntennaO = 11, + lefiAntennaADR = 12 +} lefiAntennaEnum; + +EXTERN int lefiAntennaPWL_numPWL (const lefiAntennaPWL* obj); + +EXTERN char* lefiLayerDensity_type (const lefiLayerDensity* obj); +EXTERN int lefiLayerDensity_hasOneEntry (const lefiLayerDensity* obj); +EXTERN double lefiLayerDensity_oneEntry (const lefiLayerDensity* obj); +EXTERN int lefiLayerDensity_numFrequency (const lefiLayerDensity* obj); +EXTERN double lefiLayerDensity_frequency (const lefiLayerDensity* obj, int index); +EXTERN int lefiLayerDensity_numWidths (const lefiLayerDensity* obj); +EXTERN double lefiLayerDensity_width (const lefiLayerDensity* obj, int index); +EXTERN int lefiLayerDensity_numTableEntries (const lefiLayerDensity* obj); +EXTERN double lefiLayerDensity_tableEntry (const lefiLayerDensity* obj, int index); +EXTERN int lefiLayerDensity_numCutareas (const lefiLayerDensity* obj); +EXTERN double lefiLayerDensity_cutArea (const lefiLayerDensity* obj, int index); + +/* 5.5 */ + +EXTERN int lefiParallel_numLength (const lefiParallel* obj); +EXTERN int lefiParallel_numWidth (const lefiParallel* obj); +EXTERN double lefiParallel_length (const lefiParallel* obj, int iLength); +EXTERN double lefiParallel_width (const lefiParallel* obj, int iWidth); +EXTERN double lefiParallel_widthSpacing (const lefiParallel* obj, int iWidth, int iWidthSpacing); + +/* 5.5 */ + +EXTERN int lefiInfluence_numInfluenceEntry (const lefiInfluence* obj); +EXTERN double lefiInfluence_width (const lefiInfluence* obj, int index); +EXTERN double lefiInfluence_distance (const lefiInfluence* obj, int index); +EXTERN double lefiInfluence_spacing (const lefiInfluence* obj, int index); + +/* 5.7 */ + +EXTERN int lefiTwoWidths_numWidth (const lefiTwoWidths* obj); +EXTERN double lefiTwoWidths_width (const lefiTwoWidths* obj, int iWidth); +EXTERN int lefiTwoWidths_hasWidthPRL (const lefiTwoWidths* obj, int iWidth); +EXTERN double lefiTwoWidths_widthPRL (const lefiTwoWidths* obj, int iWidth); +EXTERN int lefiTwoWidths_numWidthSpacing (const lefiTwoWidths* obj, int iWidth); +EXTERN double lefiTwoWidths_widthSpacing (const lefiTwoWidths* obj, int iWidth, int iWidthSpacing); + +/* 5.5 */ + +EXTERN int lefiSpacingTable_isInfluence (const lefiSpacingTable* obj); +EXTERN const lefiInfluence* lefiSpacingTable_influence (const lefiSpacingTable* obj); +EXTERN int lefiSpacingTable_isParallel (const lefiSpacingTable* obj); +EXTERN const lefiParallel* lefiSpacingTable_parallel (const lefiSpacingTable* obj); +EXTERN const lefiTwoWidths* lefiSpacingTable_twoWidths (const lefiSpacingTable* obj); + +/* 5.7 */ + +EXTERN int lefiOrthogonal_numOrthogonal (const lefiOrthogonal* obj); +EXTERN double lefiOrthogonal_cutWithin (const lefiOrthogonal* obj, int index); +EXTERN double lefiOrthogonal_orthoSpacing (const lefiOrthogonal* obj, int index); + +/* 5.5 */ + +EXTERN int lefiAntennaModel_hasAntennaAreaRatio (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaDiffAreaRatio (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaDiffAreaRatioPWL (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaCumAreaRatio (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaCumDiffAreaRatio (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaCumDiffAreaRatioPWL (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaAreaFactor (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaAreaFactorDUO (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaSideAreaRatio (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaDiffSideAreaRatio (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaDiffSideAreaRatioPWL (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaCumSideAreaRatio (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaCumDiffSideAreaRatio (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaCumDiffSideAreaRatioPWL (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaSideAreaFactor (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaSideAreaFactorDUO (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaCumRoutingPlusCut (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaGatePlusDiff (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaAreaMinusDiff (const lefiAntennaModel* obj); +EXTERN int lefiAntennaModel_hasAntennaAreaDiffReducePWL (const lefiAntennaModel* obj); + +EXTERN char* lefiAntennaModel_antennaOxide (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaAreaRatio (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaDiffAreaRatio (const lefiAntennaModel* obj); +EXTERN const lefiAntennaPWL* lefiAntennaModel_antennaDiffAreaRatioPWL (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaCumAreaRatio (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaCumDiffAreaRatio (const lefiAntennaModel* obj); +EXTERN const lefiAntennaPWL* lefiAntennaModel_antennaCumDiffAreaRatioPWL (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaAreaFactor (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaSideAreaRatio (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaDiffSideAreaRatio (const lefiAntennaModel* obj); +EXTERN const lefiAntennaPWL* lefiAntennaModel_antennaDiffSideAreaRatioPWL (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaCumSideAreaRatio (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaCumDiffSideAreaRatio (const lefiAntennaModel* obj); +EXTERN const lefiAntennaPWL* lefiAntennaModel_antennaCumDiffSideAreaRatioPWL (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaSideAreaFactor (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaGatePlusDiff (const lefiAntennaModel* obj); +EXTERN double lefiAntennaModel_antennaAreaMinusDiff (const lefiAntennaModel* obj); +EXTERN const lefiAntennaPWL* lefiAntennaModel_antennaAreaDiffReducePWL (const lefiAntennaModel* obj); + + /* 5.6 - minstep switch to multiple and added more options */ + + /* 5.5 SPACINGTABLE */ + + /* 5.6 */ + + /* 5.8 */ + /* POLYROUTING, MIMCAP, TSV, PASSIVATION, NWELL */ + +EXTERN int lefiLayer_hasType (const lefiLayer* obj); +EXTERN int lefiLayer_hasLayerType (const lefiLayer* obj); + /* ROUTING can be POLYROUTING or MIMCAP */ + /* CUT can be TSV or PASSIVATION */ + /* MASTERSLICE can be NWELL */ +EXTERN int lefiLayer_hasMask (const lefiLayer* obj); +EXTERN int lefiLayer_hasPitch (const lefiLayer* obj); +EXTERN int lefiLayer_hasXYPitch (const lefiLayer* obj); +EXTERN int lefiLayer_hasOffset (const lefiLayer* obj); +EXTERN int lefiLayer_hasXYOffset (const lefiLayer* obj); +EXTERN int lefiLayer_hasWidth (const lefiLayer* obj); +EXTERN int lefiLayer_hasArea (const lefiLayer* obj); +EXTERN int lefiLayer_hasDiagPitch (const lefiLayer* obj); +EXTERN int lefiLayer_hasXYDiagPitch (const lefiLayer* obj); +EXTERN int lefiLayer_hasDiagWidth (const lefiLayer* obj); +EXTERN int lefiLayer_hasDiagSpacing (const lefiLayer* obj); +EXTERN int lefiLayer_hasSpacingNumber (const lefiLayer* obj); +EXTERN int lefiLayer_hasSpacingName (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingLayerStack (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingAdjacent (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingCenterToCenter (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingRange (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingRangeUseLengthThreshold (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingRangeInfluence (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingRangeInfluenceRange (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingRangeRange (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingLengthThreshold (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingLengthThresholdRange (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingParallelOverlap (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingArea (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingEndOfLine (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingParellelEdge (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingTwoEdges (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingAdjacentExcept (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingSamenet (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingSamenetPGonly (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingNotchLength (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingEndOfNotchWidth (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasDirection (const lefiLayer* obj); +EXTERN int lefiLayer_hasResistance (const lefiLayer* obj); +EXTERN int lefiLayer_hasResistanceArray (const lefiLayer* obj); +EXTERN int lefiLayer_hasCapacitance (const lefiLayer* obj); +EXTERN int lefiLayer_hasCapacitanceArray (const lefiLayer* obj); +EXTERN int lefiLayer_hasHeight (const lefiLayer* obj); +EXTERN int lefiLayer_hasThickness (const lefiLayer* obj); +EXTERN int lefiLayer_hasWireExtension (const lefiLayer* obj); +EXTERN int lefiLayer_hasShrinkage (const lefiLayer* obj); +EXTERN int lefiLayer_hasCapMultiplier (const lefiLayer* obj); +EXTERN int lefiLayer_hasEdgeCap (const lefiLayer* obj); +EXTERN int lefiLayer_hasAntennaLength (const lefiLayer* obj); +EXTERN int lefiLayer_hasAntennaArea (const lefiLayer* obj); +EXTERN int lefiLayer_hasCurrentDensityPoint (const lefiLayer* obj); +EXTERN int lefiLayer_hasCurrentDensityArray (const lefiLayer* obj); +EXTERN int lefiLayer_hasAccurrentDensity (const lefiLayer* obj); +EXTERN int lefiLayer_hasDccurrentDensity (const lefiLayer* obj); + +EXTERN int lefiLayer_numProps (const lefiLayer* obj); +EXTERN const char* lefiLayer_propName (const lefiLayer* obj, int index); +EXTERN const char* lefiLayer_propValue (const lefiLayer* obj, int index); +EXTERN double lefiLayer_propNumber (const lefiLayer* obj, int index); +EXTERN const char lefiLayer_propType (const lefiLayer* obj, int index); +EXTERN int lefiLayer_propIsNumber (const lefiLayer* obj, int index); +EXTERN int lefiLayer_propIsString (const lefiLayer* obj, int index); + +EXTERN int lefiLayer_numSpacing (const lefiLayer* obj); + +EXTERN char* lefiLayer_name (const lefiLayer* obj); +EXTERN const char* lefiLayer_type (const lefiLayer* obj); +EXTERN const char* lefiLayer_layerType (const lefiLayer* obj); +EXTERN double lefiLayer_pitch (const lefiLayer* obj); +EXTERN int lefiLayer_mask (const lefiLayer* obj); +EXTERN double lefiLayer_pitchX (const lefiLayer* obj); +EXTERN double lefiLayer_pitchY (const lefiLayer* obj); +EXTERN double lefiLayer_offset (const lefiLayer* obj); +EXTERN double lefiLayer_offsetX (const lefiLayer* obj); +EXTERN double lefiLayer_offsetY (const lefiLayer* obj); +EXTERN double lefiLayer_width (const lefiLayer* obj); +EXTERN double lefiLayer_area (const lefiLayer* obj); +EXTERN double lefiLayer_diagPitch (const lefiLayer* obj); +EXTERN double lefiLayer_diagPitchX (const lefiLayer* obj); +EXTERN double lefiLayer_diagPitchY (const lefiLayer* obj); +EXTERN double lefiLayer_diagWidth (const lefiLayer* obj); +EXTERN double lefiLayer_diagSpacing (const lefiLayer* obj); +EXTERN double lefiLayer_spacing (const lefiLayer* obj, int index); +EXTERN char* lefiLayer_spacingName (const lefiLayer* obj, int index); +EXTERN int lefiLayer_spacingAdjacentCuts (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingAdjacentWithin (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingArea (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingRangeMin (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingRangeMax (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingRangeInfluence (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingRangeInfluenceMin (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingRangeInfluenceMax (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingRangeRangeMin (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingRangeRangeMax (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingLengthThreshold (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingLengthThresholdRangeMin (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingLengthThresholdRangeMax (const lefiLayer* obj, int index); + + /* 5.7 Spacing endofline */ +EXTERN double lefiLayer_spacingEolWidth (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingEolWithin (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingParSpace (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingParWithin (const lefiLayer* obj, int index); + + /* 5.7 Spacing Notch */ +EXTERN double lefiLayer_spacingNotchLength (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingEndOfNotchWidth (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingEndOfNotchSpacing (const lefiLayer* obj, int index); +EXTERN double lefiLayer_spacingEndOfNotchLength (const lefiLayer* obj, int index); + + /* 5.5 Minimum cut rules */ +EXTERN int lefiLayer_numMinimumcut (const lefiLayer* obj); +EXTERN int lefiLayer_minimumcut (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minimumcutWidth (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinimumcutWithin (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minimumcutWithin (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinimumcutConnection (const lefiLayer* obj, int index); +EXTERN const char* lefiLayer_minimumcutConnection (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinimumcutNumCuts (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minimumcutLength (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minimumcutDistance (const lefiLayer* obj, int index); + +EXTERN const char* lefiLayer_direction (const lefiLayer* obj); +EXTERN double lefiLayer_resistance (const lefiLayer* obj); +EXTERN double lefiLayer_capacitance (const lefiLayer* obj); +EXTERN double lefiLayer_height (const lefiLayer* obj); +EXTERN double lefiLayer_wireExtension (const lefiLayer* obj); +EXTERN double lefiLayer_thickness (const lefiLayer* obj); +EXTERN double lefiLayer_shrinkage (const lefiLayer* obj); +EXTERN double lefiLayer_capMultiplier (const lefiLayer* obj); +EXTERN double lefiLayer_edgeCap (const lefiLayer* obj); +EXTERN double lefiLayer_antennaLength (const lefiLayer* obj); +EXTERN double lefiLayer_antennaArea (const lefiLayer* obj); +EXTERN double lefiLayer_currentDensityPoint (const lefiLayer* obj); +EXTERN void lefiLayer_currentDensityArray (const lefiLayer* obj, int* numPoints, double** widths, double** current); +EXTERN void lefiLayer_capacitanceArray (const lefiLayer* obj, int* numPoints, double** widths, double** resValues); +EXTERN void lefiLayer_resistanceArray (const lefiLayer* obj, int* numPoints, double** widths, double** capValues); + +EXTERN int lefiLayer_numAccurrentDensity (const lefiLayer* obj); +EXTERN const lefiLayerDensity* lefiLayer_accurrent (const lefiLayer* obj, int index); +EXTERN int lefiLayer_numDccurrentDensity (const lefiLayer* obj); +EXTERN const lefiLayerDensity* lefiLayer_dccurrent (const lefiLayer* obj, int index); + + /* 3/23/2000 - Wanda da Rosa. The following are for 5.4 Antenna. */ + /* Only 5.4 or 5.3 are allowed in a lef file, but not both */ + + /* 5.5 */ +EXTERN int lefiLayer_numAntennaModel (const lefiLayer* obj); +EXTERN const lefiAntennaModel* lefiLayer_antennaModel (const lefiLayer* obj, int index); + + /* The following is 8/21/01 5.4 enhancements */ + +EXTERN int lefiLayer_hasSlotWireWidth (const lefiLayer* obj); +EXTERN int lefiLayer_hasSlotWireLength (const lefiLayer* obj); +EXTERN int lefiLayer_hasSlotWidth (const lefiLayer* obj); +EXTERN int lefiLayer_hasSlotLength (const lefiLayer* obj); +EXTERN int lefiLayer_hasMaxAdjacentSlotSpacing (const lefiLayer* obj); +EXTERN int lefiLayer_hasMaxCoaxialSlotSpacing (const lefiLayer* obj); +EXTERN int lefiLayer_hasMaxEdgeSlotSpacing (const lefiLayer* obj); +EXTERN int lefiLayer_hasSplitWireWidth (const lefiLayer* obj); +EXTERN int lefiLayer_hasMinimumDensity (const lefiLayer* obj); +EXTERN int lefiLayer_hasMaximumDensity (const lefiLayer* obj); +EXTERN int lefiLayer_hasDensityCheckWindow (const lefiLayer* obj); +EXTERN int lefiLayer_hasDensityCheckStep (const lefiLayer* obj); +EXTERN int lefiLayer_hasFillActiveSpacing (const lefiLayer* obj); +EXTERN int lefiLayer_hasMaxwidth (const lefiLayer* obj); +EXTERN int lefiLayer_hasMinwidth (const lefiLayer* obj); +EXTERN int lefiLayer_hasMinstep (const lefiLayer* obj); +EXTERN int lefiLayer_hasProtrusion (const lefiLayer* obj); + +EXTERN double lefiLayer_slotWireWidth (const lefiLayer* obj); +EXTERN double lefiLayer_slotWireLength (const lefiLayer* obj); +EXTERN double lefiLayer_slotWidth (const lefiLayer* obj); +EXTERN double lefiLayer_slotLength (const lefiLayer* obj); +EXTERN double lefiLayer_maxAdjacentSlotSpacing (const lefiLayer* obj); +EXTERN double lefiLayer_maxCoaxialSlotSpacing (const lefiLayer* obj); +EXTERN double lefiLayer_maxEdgeSlotSpacing (const lefiLayer* obj); +EXTERN double lefiLayer_splitWireWidth (const lefiLayer* obj); +EXTERN double lefiLayer_minimumDensity (const lefiLayer* obj); +EXTERN double lefiLayer_maximumDensity (const lefiLayer* obj); +EXTERN double lefiLayer_densityCheckWindowLength (const lefiLayer* obj); +EXTERN double lefiLayer_densityCheckWindowWidth (const lefiLayer* obj); +EXTERN double lefiLayer_densityCheckStep (const lefiLayer* obj); +EXTERN double lefiLayer_fillActiveSpacing (const lefiLayer* obj); +EXTERN double lefiLayer_maxwidth (const lefiLayer* obj); +EXTERN double lefiLayer_minwidth (const lefiLayer* obj); +EXTERN double lefiLayer_protrusionWidth1 (const lefiLayer* obj); +EXTERN double lefiLayer_protrusionLength (const lefiLayer* obj); +EXTERN double lefiLayer_protrusionWidth2 (const lefiLayer* obj); + +EXTERN int lefiLayer_numMinstep (const lefiLayer* obj); +EXTERN double lefiLayer_minstep (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinstepType (const lefiLayer* obj, int index); +EXTERN char* lefiLayer_minstepType (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinstepLengthsum (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minstepLengthsum (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinstepMaxedges (const lefiLayer* obj, int index); +EXTERN int lefiLayer_minstepMaxedges (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinstepMinAdjLength (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minstepMinAdjLength (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinstepMinBetLength (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minstepMinBetLength (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinstepXSameCorners (const lefiLayer* obj, int index); + + /* 5.5 MINENCLOSEDAREA */ +EXTERN int lefiLayer_numMinenclosedarea (const lefiLayer* obj); +EXTERN double lefiLayer_minenclosedarea (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasMinenclosedareaWidth (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minenclosedareaWidth (const lefiLayer* obj, int index); + + /* 5.5 SPACINGTABLE FOR LAYER ROUTING */ + + /* 5.6 ENCLOSURE, PREFERENCLOSURE, RESISTANCEPERCUT & DIAGMINEDGELENGTH */ +EXTERN int lefiLayer_numEnclosure (const lefiLayer* obj); +EXTERN int lefiLayer_hasEnclosureRule (const lefiLayer* obj, int index); +EXTERN double lefiLayer_enclosureOverhang1 (const lefiLayer* obj, int index); +EXTERN double lefiLayer_enclosureOverhang2 (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasEnclosureWidth (const lefiLayer* obj, int index); +EXTERN double lefiLayer_enclosureMinWidth (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasEnclosureExceptExtraCut (const lefiLayer* obj, int index); +EXTERN double lefiLayer_enclosureExceptExtraCut (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasEnclosureMinLength (const lefiLayer* obj, int index); +EXTERN double lefiLayer_enclosureMinLength (const lefiLayer* obj, int index); +EXTERN int lefiLayer_numPreferEnclosure (const lefiLayer* obj); +EXTERN int lefiLayer_hasPreferEnclosureRule (const lefiLayer* obj, int index); +EXTERN double lefiLayer_preferEnclosureOverhang1 (const lefiLayer* obj, int index); +EXTERN double lefiLayer_preferEnclosureOverhang2 (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasPreferEnclosureWidth (const lefiLayer* obj, int index); +EXTERN double lefiLayer_preferEnclosureMinWidth (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasResistancePerCut (const lefiLayer* obj); +EXTERN double lefiLayer_resistancePerCut (const lefiLayer* obj); +EXTERN int lefiLayer_hasDiagMinEdgeLength (const lefiLayer* obj); +EXTERN double lefiLayer_diagMinEdgeLength (const lefiLayer* obj); +EXTERN int lefiLayer_numMinSize (const lefiLayer* obj); +EXTERN double lefiLayer_minSizeWidth (const lefiLayer* obj, int index); +EXTERN double lefiLayer_minSizeLength (const lefiLayer* obj, int index); + + /* 5.7 */ +EXTERN int lefiLayer_hasMaxFloatingArea (const lefiLayer* obj); +EXTERN double lefiLayer_maxFloatingArea (const lefiLayer* obj); +EXTERN int lefiLayer_hasArraySpacing (const lefiLayer* obj); +EXTERN int lefiLayer_hasLongArray (const lefiLayer* obj); +EXTERN int lefiLayer_hasViaWidth (const lefiLayer* obj); +EXTERN double lefiLayer_viaWidth (const lefiLayer* obj); +EXTERN double lefiLayer_cutSpacing (const lefiLayer* obj); +EXTERN int lefiLayer_numArrayCuts (const lefiLayer* obj); +EXTERN int lefiLayer_arrayCuts (const lefiLayer* obj, int index); +EXTERN double lefiLayer_arraySpacing (const lefiLayer* obj, int index); +EXTERN int lefiLayer_hasSpacingTableOrtho (const lefiLayer* obj); +EXTERN const lefiOrthogonal* lefiLayer_orthogonal (const lefiLayer* obj); + +EXTERN double lefiLayer_lef58WidthTableOrtho (const lefiLayer* obj, int idx); +EXTERN int lefiLayer_lef58WidthTableOrthoValues (const lefiLayer* obj); +EXTERN double lefiLayer_lef58WidthTableWrongDir (const lefiLayer* obj, int idx); +EXTERN int lefiLayer_lef58WidthTableWrongDirValues (const lefiLayer* obj); + +EXTERN int lefiLayer_need58PropsProcessing (const lefiLayer* obj); + + /* Debug print */ +EXTERN void lefiLayer_print (const lefiLayer* obj, FILE* f); + + /* 5.5 */ + + /* Q: quotedstring */ + + /* 3/23/2000 - Wanda da Rosa. The following is for 5.4 ANTENNA. */ + /* Either 5.4 or 5.3 are allowed, not both */ + + /* 5.5 AntennaModel */ + + /* 8/29/2001 - Wanda da Rosa. The following is for 5.4 enhancements. */ + + /* 5.5 SPACINGTABLE */ + + /* 5.6 */ + + /* 5.7 */ + +#endif diff --git a/lefdef/src/lef/clef/lefiMacro.h b/lefdef/src/lef/clef/lefiMacro.h new file mode 100644 index 00000000..3ad9477b --- /dev/null +++ b/lefdef/src/lef/clef/lefiMacro.h @@ -0,0 +1,282 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIMACRO_H +#define CLEFIMACRO_H + +#include +#include "lefiTypedefs.h" + +EXTERN const lefiGeometries* lefiObstruction_geometries (const lefiObstruction* obj); + +EXTERN void lefiObstruction_print (const lefiObstruction* obj, FILE* f); + +/* 5.5 */ + +EXTERN int lefiPinAntennaModel_hasAntennaGateArea (const lefiPinAntennaModel* obj); +EXTERN int lefiPinAntennaModel_hasAntennaMaxAreaCar (const lefiPinAntennaModel* obj); +EXTERN int lefiPinAntennaModel_hasAntennaMaxSideAreaCar (const lefiPinAntennaModel* obj); +EXTERN int lefiPinAntennaModel_hasAntennaMaxCutCar (const lefiPinAntennaModel* obj); + +EXTERN char* lefiPinAntennaModel_antennaOxide (const lefiPinAntennaModel* obj); + +EXTERN int lefiPinAntennaModel_numAntennaGateArea (const lefiPinAntennaModel* obj); +EXTERN double lefiPinAntennaModel_antennaGateArea (const lefiPinAntennaModel* obj, int index); +EXTERN const char* lefiPinAntennaModel_antennaGateAreaLayer (const lefiPinAntennaModel* obj, int index); + +EXTERN int lefiPinAntennaModel_numAntennaMaxAreaCar (const lefiPinAntennaModel* obj); +EXTERN double lefiPinAntennaModel_antennaMaxAreaCar (const lefiPinAntennaModel* obj, int index); +EXTERN const char* lefiPinAntennaModel_antennaMaxAreaCarLayer (const lefiPinAntennaModel* obj, int index); + +EXTERN int lefiPinAntennaModel_numAntennaMaxSideAreaCar (const lefiPinAntennaModel* obj); +EXTERN double lefiPinAntennaModel_antennaMaxSideAreaCar (const lefiPinAntennaModel* obj, int index); +EXTERN const char* lefiPinAntennaModel_antennaMaxSideAreaCarLayer (const lefiPinAntennaModel* obj, int index); + +EXTERN int lefiPinAntennaModel_numAntennaMaxCutCar (const lefiPinAntennaModel* obj); +EXTERN double lefiPinAntennaModel_antennaMaxCutCar (const lefiPinAntennaModel* obj, int index); +EXTERN const char* lefiPinAntennaModel_antennaMaxCutCarLayer (const lefiPinAntennaModel* obj, int index); + +EXTERN int lefiPinAntennaModel_hasReturn (const lefiPinAntennaModel* obj); + +EXTERN int lefiPin_hasForeign (const lefiPin* obj); +EXTERN int lefiPin_hasForeignOrient (const lefiPin* obj, int index); +EXTERN int lefiPin_hasForeignPoint (const lefiPin* obj, int index); +EXTERN int lefiPin_hasLEQ (const lefiPin* obj); +EXTERN int lefiPin_hasDirection (const lefiPin* obj); +EXTERN int lefiPin_hasUse (const lefiPin* obj); +EXTERN int lefiPin_hasShape (const lefiPin* obj); +EXTERN int lefiPin_hasMustjoin (const lefiPin* obj); +EXTERN int lefiPin_hasOutMargin (const lefiPin* obj); +EXTERN int lefiPin_hasOutResistance (const lefiPin* obj); +EXTERN int lefiPin_hasInMargin (const lefiPin* obj); +EXTERN int lefiPin_hasPower (const lefiPin* obj); +EXTERN int lefiPin_hasLeakage (const lefiPin* obj); +EXTERN int lefiPin_hasMaxload (const lefiPin* obj); +EXTERN int lefiPin_hasMaxdelay (const lefiPin* obj); +EXTERN int lefiPin_hasCapacitance (const lefiPin* obj); +EXTERN int lefiPin_hasResistance (const lefiPin* obj); +EXTERN int lefiPin_hasPulldownres (const lefiPin* obj); +EXTERN int lefiPin_hasTieoffr (const lefiPin* obj); +EXTERN int lefiPin_hasVHI (const lefiPin* obj); +EXTERN int lefiPin_hasVLO (const lefiPin* obj); +EXTERN int lefiPin_hasRiseVoltage (const lefiPin* obj); +EXTERN int lefiPin_hasFallVoltage (const lefiPin* obj); +EXTERN int lefiPin_hasRiseThresh (const lefiPin* obj); +EXTERN int lefiPin_hasFallThresh (const lefiPin* obj); +EXTERN int lefiPin_hasRiseSatcur (const lefiPin* obj); +EXTERN int lefiPin_hasFallSatcur (const lefiPin* obj); +EXTERN int lefiPin_hasCurrentSource (const lefiPin* obj); +EXTERN int lefiPin_hasTables (const lefiPin* obj); +EXTERN int lefiPin_hasAntennaSize (const lefiPin* obj); +EXTERN int lefiPin_hasAntennaMetalArea (const lefiPin* obj); +EXTERN int lefiPin_hasAntennaMetalLength (const lefiPin* obj); +EXTERN int lefiPin_hasAntennaPartialMetalArea (const lefiPin* obj); +EXTERN int lefiPin_hasAntennaPartialMetalSideArea (const lefiPin* obj); +EXTERN int lefiPin_hasAntennaPartialCutArea (const lefiPin* obj); +EXTERN int lefiPin_hasAntennaDiffArea (const lefiPin* obj); +EXTERN int lefiPin_hasAntennaModel (const lefiPin* obj); +EXTERN int lefiPin_hasTaperRule (const lefiPin* obj); +EXTERN int lefiPin_hasRiseSlewLimit (const lefiPin* obj); +EXTERN int lefiPin_hasFallSlewLimit (const lefiPin* obj); +EXTERN int lefiPin_hasNetExpr (const lefiPin* obj); +EXTERN int lefiPin_hasSupplySensitivity (const lefiPin* obj); +EXTERN int lefiPin_hasGroundSensitivity (const lefiPin* obj); + +EXTERN const char* lefiPin_name (const lefiPin* obj); + +EXTERN int lefiPin_numPorts (const lefiPin* obj); +EXTERN const lefiGeometries* lefiPin_port (const lefiPin* obj, int index); + +EXTERN int lefiPin_numForeigns (const lefiPin* obj); +EXTERN const char* lefiPin_foreignName (const lefiPin* obj, int index); +EXTERN const char* lefiPin_taperRule (const lefiPin* obj); +EXTERN int lefiPin_foreignOrient (const lefiPin* obj, int index); +EXTERN const char* lefiPin_foreignOrientStr (const lefiPin* obj, int index); +EXTERN double lefiPin_foreignX (const lefiPin* obj, int index); +EXTERN double lefiPin_foreignY (const lefiPin* obj, int index); +EXTERN const char* lefiPin_LEQ (const lefiPin* obj); +EXTERN const char* lefiPin_direction (const lefiPin* obj); +EXTERN const char* lefiPin_use (const lefiPin* obj); +EXTERN const char* lefiPin_shape (const lefiPin* obj); +EXTERN const char* lefiPin_mustjoin (const lefiPin* obj); +EXTERN double lefiPin_outMarginHigh (const lefiPin* obj); +EXTERN double lefiPin_outMarginLow (const lefiPin* obj); +EXTERN double lefiPin_outResistanceHigh (const lefiPin* obj); +EXTERN double lefiPin_outResistanceLow (const lefiPin* obj); +EXTERN double lefiPin_inMarginHigh (const lefiPin* obj); +EXTERN double lefiPin_inMarginLow (const lefiPin* obj); +EXTERN double lefiPin_power (const lefiPin* obj); +EXTERN double lefiPin_leakage (const lefiPin* obj); +EXTERN double lefiPin_maxload (const lefiPin* obj); +EXTERN double lefiPin_maxdelay (const lefiPin* obj); +EXTERN double lefiPin_capacitance (const lefiPin* obj); +EXTERN double lefiPin_resistance (const lefiPin* obj); +EXTERN double lefiPin_pulldownres (const lefiPin* obj); +EXTERN double lefiPin_tieoffr (const lefiPin* obj); +EXTERN double lefiPin_VHI (const lefiPin* obj); +EXTERN double lefiPin_VLO (const lefiPin* obj); +EXTERN double lefiPin_riseVoltage (const lefiPin* obj); +EXTERN double lefiPin_fallVoltage (const lefiPin* obj); +EXTERN double lefiPin_riseThresh (const lefiPin* obj); +EXTERN double lefiPin_fallThresh (const lefiPin* obj); +EXTERN double lefiPin_riseSatcur (const lefiPin* obj); +EXTERN double lefiPin_fallSatcur (const lefiPin* obj); +EXTERN double lefiPin_riseSlewLimit (const lefiPin* obj); +EXTERN double lefiPin_fallSlewLimit (const lefiPin* obj); +EXTERN const char* lefiPin_currentSource (const lefiPin* obj); +EXTERN const char* lefiPin_tableHighName (const lefiPin* obj); +EXTERN const char* lefiPin_tableLowName (const lefiPin* obj); + +EXTERN int lefiPin_numAntennaSize (const lefiPin* obj); +EXTERN double lefiPin_antennaSize (const lefiPin* obj, int index); +EXTERN const char* lefiPin_antennaSizeLayer (const lefiPin* obj, int index); + +EXTERN int lefiPin_numAntennaMetalArea (const lefiPin* obj); +EXTERN double lefiPin_antennaMetalArea (const lefiPin* obj, int index); +EXTERN const char* lefiPin_antennaMetalAreaLayer (const lefiPin* obj, int index); + +EXTERN int lefiPin_numAntennaMetalLength (const lefiPin* obj); +EXTERN double lefiPin_antennaMetalLength (const lefiPin* obj, int index); +EXTERN const char* lefiPin_antennaMetalLengthLayer (const lefiPin* obj, int index); + +EXTERN int lefiPin_numAntennaPartialMetalArea (const lefiPin* obj); +EXTERN double lefiPin_antennaPartialMetalArea (const lefiPin* obj, int index); +EXTERN const char* lefiPin_antennaPartialMetalAreaLayer (const lefiPin* obj, int index); + +EXTERN int lefiPin_numAntennaPartialMetalSideArea (const lefiPin* obj); +EXTERN double lefiPin_antennaPartialMetalSideArea (const lefiPin* obj, int index); +EXTERN const char* lefiPin_antennaPartialMetalSideAreaLayer (const lefiPin* obj, int index); + +EXTERN int lefiPin_numAntennaPartialCutArea (const lefiPin* obj); +EXTERN double lefiPin_antennaPartialCutArea (const lefiPin* obj, int index); +EXTERN const char* lefiPin_antennaPartialCutAreaLayer (const lefiPin* obj, int index); + +EXTERN int lefiPin_numAntennaDiffArea (const lefiPin* obj); +EXTERN double lefiPin_antennaDiffArea (const lefiPin* obj, int index); +EXTERN const char* lefiPin_antennaDiffAreaLayer (const lefiPin* obj, int index); + + /* 5.6 */ +EXTERN const char* lefiPin_netExpr (const lefiPin* obj); +EXTERN const char* lefiPin_supplySensitivity (const lefiPin* obj); +EXTERN const char* lefiPin_groundSensitivity (const lefiPin* obj); + + /* 5.5 */ +EXTERN int lefiPin_numAntennaModel (const lefiPin* obj); +EXTERN const lefiPinAntennaModel* lefiPin_antennaModel (const lefiPin* obj, int index); + +EXTERN int lefiPin_numProperties (const lefiPin* obj); +EXTERN const char* lefiPin_propName (const lefiPin* obj, int index); +EXTERN const char* lefiPin_propValue (const lefiPin* obj, int index); +EXTERN double lefiPin_propNum (const lefiPin* obj, int index); +EXTERN const char lefiPin_propType (const lefiPin* obj, int index); +EXTERN int lefiPin_propIsNumber (const lefiPin* obj, int index); +EXTERN int lefiPin_propIsString (const lefiPin* obj, int index); + +EXTERN void lefiPin_print (const lefiPin* obj, FILE* f); + + /* 5.5 AntennaModel */ + +/* 5.6 */ + +EXTERN int lefiDensity_numLayer (const lefiDensity* obj); +EXTERN char* lefiDensity_layerName (const lefiDensity* obj, int index); +EXTERN int lefiDensity_numRects (const lefiDensity* obj, int index); +EXTERN struct lefiGeomRect lefiDensity_getRect (const lefiDensity* obj, int index, int rectIndex); +EXTERN double lefiDensity_densityValue (const lefiDensity* obj, int index, int rectIndex); + +EXTERN void lefiDensity_print (const lefiDensity* obj, FILE* f); + + /* orient=-1 means no orient was specified. */ + +EXTERN int lefiMacro_hasClass (const lefiMacro* obj); +EXTERN int lefiMacro_hasGenerator (const lefiMacro* obj); +EXTERN int lefiMacro_hasGenerate (const lefiMacro* obj); +EXTERN int lefiMacro_hasPower (const lefiMacro* obj); +EXTERN int lefiMacro_hasOrigin (const lefiMacro* obj); +EXTERN int lefiMacro_hasEEQ (const lefiMacro* obj); +EXTERN int lefiMacro_hasLEQ (const lefiMacro* obj); +EXTERN int lefiMacro_hasSource (const lefiMacro* obj); +EXTERN int lefiMacro_hasXSymmetry (const lefiMacro* obj); +EXTERN int lefiMacro_hasYSymmetry (const lefiMacro* obj); +EXTERN int lefiMacro_has90Symmetry (const lefiMacro* obj); +EXTERN int lefiMacro_hasSiteName (const lefiMacro* obj); +EXTERN int lefiMacro_hasSitePattern (const lefiMacro* obj); +EXTERN int lefiMacro_hasSize (const lefiMacro* obj); +EXTERN int lefiMacro_hasForeign (const lefiMacro* obj); +EXTERN int lefiMacro_hasForeignOrigin (const lefiMacro* obj, int index); +EXTERN int lefiMacro_hasForeignOrient (const lefiMacro* obj, int index); +EXTERN int lefiMacro_hasForeignPoint (const lefiMacro* obj, int index); +EXTERN int lefiMacro_hasClockType (const lefiMacro* obj); +EXTERN int lefiMacro_isBuffer (const lefiMacro* obj); +EXTERN int lefiMacro_isInverter (const lefiMacro* obj); +EXTERN int lefiMacro_isFixedMask (const lefiMacro* obj); + +EXTERN int lefiMacro_numSitePattern (const lefiMacro* obj); +EXTERN int lefiMacro_numProperties (const lefiMacro* obj); +EXTERN const char* lefiMacro_propName (const lefiMacro* obj, int index); +EXTERN const char* lefiMacro_propValue (const lefiMacro* obj, int index); +EXTERN double lefiMacro_propNum (const lefiMacro* obj, int index); +EXTERN const char lefiMacro_propType (const lefiMacro* obj, int index); +EXTERN int lefiMacro_propIsNumber (const lefiMacro* obj, int index); +EXTERN int lefiMacro_propIsString (const lefiMacro* obj, int index); + +EXTERN const char* lefiMacro_name (const lefiMacro* obj); +EXTERN const char* lefiMacro_macroClass (const lefiMacro* obj); +EXTERN const char* lefiMacro_generator (const lefiMacro* obj); +EXTERN const char* lefiMacro_EEQ (const lefiMacro* obj); +EXTERN const char* lefiMacro_LEQ (const lefiMacro* obj); +EXTERN const char* lefiMacro_source (const lefiMacro* obj); +EXTERN const char* lefiMacro_clockType (const lefiMacro* obj); +EXTERN double lefiMacro_originX (const lefiMacro* obj); +EXTERN double lefiMacro_originY (const lefiMacro* obj); +EXTERN double lefiMacro_power (const lefiMacro* obj); +EXTERN void lefiMacro_generate (const lefiMacro* obj, char** name1, char** name2); +EXTERN const lefiSitePattern* lefiMacro_sitePattern (const lefiMacro* obj, int index); +EXTERN const char* lefiMacro_siteName (const lefiMacro* obj); +EXTERN double lefiMacro_sizeX (const lefiMacro* obj); +EXTERN double lefiMacro_sizeY (const lefiMacro* obj); +EXTERN int lefiMacro_numForeigns (const lefiMacro* obj); +EXTERN int lefiMacro_foreignOrient (const lefiMacro* obj, int index); +EXTERN const char* lefiMacro_foreignOrientStr (const lefiMacro* obj, int index); +EXTERN double lefiMacro_foreignX (const lefiMacro* obj, int index); +EXTERN double lefiMacro_foreignY (const lefiMacro* obj, int index); +EXTERN const char* lefiMacro_foreignName (const lefiMacro* obj, int index); + + /* Debug print */ +EXTERN void lefiMacro_print (const lefiMacro* obj, FILE* f); + + /* addSDF2Pins & addSDF1Pin are for 5.1 */ + + /* The following are for 5.1 */ + +#endif diff --git a/lefdef/src/lef/clef/lefiMisc.h b/lefdef/src/lef/clef/lefiMisc.h new file mode 100644 index 00000000..80a3193e --- /dev/null +++ b/lefdef/src/lef/clef/lefiMisc.h @@ -0,0 +1,174 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2014, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIMISC_H +#define CLEFIMISC_H + +#include +#include "lefiTypedefs.h" + +/* The different types of items in a geometry list. */ + +enum lefiGeomEnum { + lefiGeomUnknown = 0, + lefiGeomLayerE = 1, + lefiGeomLayerExceptPgNetE = 2, + lefiGeomLayerMinSpacingE = 3, + lefiGeomLayerRuleWidthE = 4, + lefiGeomWidthE = 5, + lefiGeomPathE = 6, + lefiGeomPathIterE = 7, + lefiGeomRectE = 8, + lefiGeomRectIterE = 9, + lefiGeomPolygonE = 10, + lefiGeomPolygonIterE = 11, + lefiGeomViaE = 12, + lefiGeomViaIterE = 13, + lefiGeomClassE = 14, + lefiGeomEnd = 15 +}; + +/* pcr 481783 & 560504 +*/ + +EXTERN int lefiGeometries_numItems (const lefiGeometries* obj); +EXTERN enum lefiGeomEnum lefiGeometries_itemType (const lefiGeometries* obj, int index); +EXTERN struct lefiGeomRect* lefiGeometries_getRect (const lefiGeometries* obj, int index); +EXTERN struct lefiGeomRectIter* lefiGeometries_getRectIter (const lefiGeometries* obj, int index); +EXTERN struct lefiGeomPath* lefiGeometries_getPath (const lefiGeometries* obj, int index); +EXTERN struct lefiGeomPathIter* lefiGeometries_getPathIter (const lefiGeometries* obj, int index); +EXTERN int lefiGeometries_hasLayerExceptPgNet (const lefiGeometries* obj, int index); +EXTERN char* lefiGeometries_getLayer (const lefiGeometries* obj, int index); +EXTERN double lefiGeometries_getLayerMinSpacing (const lefiGeometries* obj, int index); +EXTERN double lefiGeometries_getLayerRuleWidth (const lefiGeometries* obj, int index); +EXTERN double lefiGeometries_getWidth (const lefiGeometries* obj, int index); +EXTERN struct lefiGeomPolygon* lefiGeometries_getPolygon (const lefiGeometries* obj, int index); +EXTERN struct lefiGeomPolygonIter* lefiGeometries_getPolygonIter (const lefiGeometries* obj, int index); +EXTERN char* lefiGeometries_getClass (const lefiGeometries* obj, int index); +EXTERN struct lefiGeomVia* lefiGeometries_getVia (const lefiGeometries* obj, int index); +EXTERN struct lefiGeomViaIter* lefiGeometries_getViaIter (const lefiGeometries* obj, int index); + +EXTERN void lefiGeometries_print (const lefiGeometries* obj, FILE* f); + +EXTERN int lefiSpacing_hasStack (const lefiSpacing* obj); + +EXTERN const char* lefiSpacing_name1 (const lefiSpacing* obj); +EXTERN const char* lefiSpacing_name2 (const lefiSpacing* obj); +EXTERN double lefiSpacing_distance (const lefiSpacing* obj); + + /* Debug print */ +EXTERN void lefiSpacing_print (const lefiSpacing* obj, FILE* f); + +EXTERN const char* lefiIRDrop_name (const lefiIRDrop* obj); +EXTERN double lefiIRDrop_value1 (const lefiIRDrop* obj, int index); +EXTERN double lefiIRDrop_value2 (const lefiIRDrop* obj, int index); + +EXTERN int lefiIRDrop_numValues (const lefiIRDrop* obj); + + /* Debug print */ +EXTERN void lefiIRDrop_print (const lefiIRDrop* obj, FILE* f); + +EXTERN double lefiMinFeature_one (const lefiMinFeature* obj); +EXTERN double lefiMinFeature_two (const lefiMinFeature* obj); + + /* Debug print */ +EXTERN void lefiMinFeature_print (const lefiMinFeature* obj, FILE* f); + +EXTERN const char* lefiSite_name (const lefiSite* obj); +EXTERN int lefiSite_hasClass (const lefiSite* obj); +EXTERN const char* lefiSite_siteClass (const lefiSite* obj); +EXTERN double lefiSite_sizeX (const lefiSite* obj); +EXTERN double lefiSite_sizeY (const lefiSite* obj); +EXTERN int lefiSite_hasSize (const lefiSite* obj); +EXTERN int lefiSite_hasXSymmetry (const lefiSite* obj); +EXTERN int lefiSite_hasYSymmetry (const lefiSite* obj); +EXTERN int lefiSite_has90Symmetry (const lefiSite* obj); +EXTERN int lefiSite_hasRowPattern (const lefiSite* obj); +EXTERN int lefiSite_numSites (const lefiSite* obj); +EXTERN char* lefiSite_siteName (const lefiSite* obj, int index); +EXTERN int lefiSite_siteOrient (const lefiSite* obj, int index); +EXTERN char* lefiSite_siteOrientStr (const lefiSite* obj, int index); + + /* Debug print */ +EXTERN void lefiSite_print (const lefiSite* obj, FILE* f); + +EXTERN const char* lefiSitePattern_name (const lefiSitePattern* obj); +EXTERN int lefiSitePattern_orient (const lefiSitePattern* obj); +EXTERN const char* lefiSitePattern_orientStr (const lefiSitePattern* obj); +EXTERN double lefiSitePattern_x (const lefiSitePattern* obj); +EXTERN double lefiSitePattern_y (const lefiSitePattern* obj); +EXTERN int lefiSitePattern_hasStepPattern (const lefiSitePattern* obj); +EXTERN double lefiSitePattern_xStart (const lefiSitePattern* obj); +EXTERN double lefiSitePattern_yStart (const lefiSitePattern* obj); +EXTERN double lefiSitePattern_xStep (const lefiSitePattern* obj); +EXTERN double lefiSitePattern_yStep (const lefiSitePattern* obj); + + /* Debug print */ +EXTERN void lefiSitePattern_print (const lefiSitePattern* obj, FILE* f); + +EXTERN const char* lefiTrackPattern_name (const lefiTrackPattern* obj); +EXTERN double lefiTrackPattern_start (const lefiTrackPattern* obj); +EXTERN int lefiTrackPattern_numTracks (const lefiTrackPattern* obj); +EXTERN double lefiTrackPattern_space (const lefiTrackPattern* obj); + +EXTERN int lefiTrackPattern_numLayers (const lefiTrackPattern* obj); +EXTERN const char* lefiTrackPattern_layerName (const lefiTrackPattern* obj, int index); + + /* Debug print */ +EXTERN void lefiTrackPattern_print (const lefiTrackPattern* obj, FILE* f); + +EXTERN const char* lefiGcellPattern_name (const lefiGcellPattern* obj); +EXTERN double lefiGcellPattern_start (const lefiGcellPattern* obj); +EXTERN int lefiGcellPattern_numCRs (const lefiGcellPattern* obj); +EXTERN double lefiGcellPattern_space (const lefiGcellPattern* obj); + + /* Debug print */ +EXTERN void lefiGcellPattern_print (const lefiGcellPattern* obj, FILE* f); + +EXTERN const char* lefiUseMinSpacing_name (const lefiUseMinSpacing* obj); +EXTERN int lefiUseMinSpacing_value (const lefiUseMinSpacing* obj); + + /* Debug print */ +EXTERN void lefiUseMinSpacing_print (const lefiUseMinSpacing* obj, FILE* f); + +/* 5.5 for Maximum Stacked-via rule */ + +EXTERN int lefiMaxStackVia_maxStackVia (const lefiMaxStackVia* obj); +EXTERN int lefiMaxStackVia_hasMaxStackViaRange (const lefiMaxStackVia* obj); +EXTERN const char* lefiMaxStackVia_maxStackViaBottomLayer (const lefiMaxStackVia* obj); +EXTERN const char* lefiMaxStackVia_maxStackViaTopLayer (const lefiMaxStackVia* obj); + + /* Debug print */ +EXTERN void lefiMaxStackVia_print (const lefiMaxStackVia* obj, FILE* f); + +#endif diff --git a/lefdef/src/lef/clef/lefiNonDefault.h b/lefdef/src/lef/clef/lefiNonDefault.h new file mode 100644 index 00000000..13210726 --- /dev/null +++ b/lefdef/src/lef/clef/lefiNonDefault.h @@ -0,0 +1,94 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFINONDEFAULT_H +#define CLEFINONDEFAULT_H + +#include +#include "lefiTypedefs.h" + +EXTERN const char* lefiNonDefault_name (const lefiNonDefault* obj); +EXTERN int lefiNonDefault_hasHardspacing (const lefiNonDefault* obj); + +EXTERN int lefiNonDefault_numProps (const lefiNonDefault* obj); +EXTERN const char* lefiNonDefault_propName (const lefiNonDefault* obj, int index); +EXTERN const char* lefiNonDefault_propValue (const lefiNonDefault* obj, int index); +EXTERN double lefiNonDefault_propNumber (const lefiNonDefault* obj, int index); +EXTERN const char lefiNonDefault_propType (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_propIsNumber (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_propIsString (const lefiNonDefault* obj, int index); + + /* A non default rule can have one or more layers. */ + /* The layer information is kept in an array. */ +EXTERN int lefiNonDefault_numLayers (const lefiNonDefault* obj); +EXTERN const char* lefiNonDefault_layerName (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_hasLayerWidth (const lefiNonDefault* obj, int index); +EXTERN double lefiNonDefault_layerWidth (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_hasLayerSpacing (const lefiNonDefault* obj, int index); +EXTERN double lefiNonDefault_layerSpacing (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_hasLayerWireExtension (const lefiNonDefault* obj, int index); +EXTERN double lefiNonDefault_layerWireExtension (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_hasLayerResistance (const lefiNonDefault* obj, int index); +EXTERN double lefiNonDefault_layerResistance (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_hasLayerCapacitance (const lefiNonDefault* obj, int index); +EXTERN double lefiNonDefault_layerCapacitance (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_hasLayerEdgeCap (const lefiNonDefault* obj, int index); +EXTERN double lefiNonDefault_layerEdgeCap (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_hasLayerDiagWidth (const lefiNonDefault* obj, int index); +EXTERN double lefiNonDefault_layerDiagWidth (const lefiNonDefault* obj, int index); + + /* A non default rule can have one or more vias. */ + /* These routines return the via info. */ +EXTERN int lefiNonDefault_numVias (const lefiNonDefault* obj); +EXTERN const lefiVia* lefiNonDefault_viaRule (const lefiNonDefault* obj, int index); + + /* A non default rule can have one or more spacing rules. */ + /* These routines return the that info. */ +EXTERN int lefiNonDefault_numSpacingRules (const lefiNonDefault* obj); +EXTERN const lefiSpacing* lefiNonDefault_spacingRule (const lefiNonDefault* obj, int index); + +EXTERN int lefiNonDefault_numUseVia (const lefiNonDefault* obj); +EXTERN const char* lefiNonDefault_viaName (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_numUseViaRule (const lefiNonDefault* obj); +EXTERN const char* lefiNonDefault_viaRuleName (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_numMinCuts (const lefiNonDefault* obj); +EXTERN const char* lefiNonDefault_cutLayerName (const lefiNonDefault* obj, int index); +EXTERN int lefiNonDefault_numCuts (const lefiNonDefault* obj, int index); + + /* Debug print */ + + /* Layer information */ + + /* 5.4 */ + +#endif diff --git a/lefdef/src/lef/clef/lefiProp.h b/lefdef/src/lef/clef/lefiProp.h new file mode 100644 index 00000000..3d054126 --- /dev/null +++ b/lefdef/src/lef/clef/lefiProp.h @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIPROP_H +#define CLEFIPROP_H + +#include +#include "lefiTypedefs.h" + +/* Struct holds the data for one property. */ + +EXTERN const char* lefiProp_string (const lefiProp* obj); +EXTERN const char* lefiProp_propType (const lefiProp* obj); +EXTERN const char* lefiProp_propName (const lefiProp* obj); +EXTERN char lefiProp_dataType (const lefiProp* obj); + /* either I:integer R:real S:string Q:quotedstring */ + /* N:property name is not defined in the property definition section */ +EXTERN int lefiProp_hasNumber (const lefiProp* obj); +EXTERN int lefiProp_hasRange (const lefiProp* obj); +EXTERN int lefiProp_hasString (const lefiProp* obj); +EXTERN int lefiProp_hasNameMapString (const lefiProp* obj); +EXTERN double lefiProp_number (const lefiProp* obj); +EXTERN double lefiProp_left (const lefiProp* obj); +EXTERN double lefiProp_right (const lefiProp* obj); + +EXTERN void lefiProp_print (const lefiProp* obj, FILE* f); + + /* N:property name is not defined. */ + +#endif diff --git a/lefdef/src/lef/clef/lefiPropType.h b/lefdef/src/lef/clef/lefiPropType.h new file mode 100644 index 00000000..b8236617 --- /dev/null +++ b/lefdef/src/lef/clef/lefiPropType.h @@ -0,0 +1,45 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIPROPTYPE_H +#define CLEFIPROPTYPE_H + +#include +#include "lefiTypedefs.h" + +/* Struct holds the data type for one property, if the property is */ +/* either REAL or INTEGER. */ + +EXTERN const char lefiPropType_propType (const lefiPropType* obj, char* name); + +#endif diff --git a/lefdef/src/lef/clef/lefiTBInt.c b/lefdef/src/lef/clef/lefiTBInt.c new file mode 100755 index 00000000..4c3505be --- /dev/null +++ b/lefdef/src/lef/clef/lefiTBInt.c @@ -0,0 +1,38 @@ +/* + * This file is part of the Cadence LEF/DEF Open Source + * Distribution, Product Version 5.7, and is subject to the Cadence LEF/DEF + * Open Source License Agreement. Your continued use of this file + * constitutes your acceptance of the terms of the LEF/DEF Open Source + * License and an agreement to abide by its terms. If you don't agree + * with this, you must remove this and any other files which are part of the + * distribution and destroy any copies made. + * + * For updates, support, or to become part of the LEF/DEF Community, check + * www.openeda.org for details. + */ +#include + +/* + * lefiTimeBomb + *//* Internal time bomb. Always return date current *//* Check the current + date against the date given */ int +lefiValidTime() +{ + return (1); +} + +/* + * Internal check, always return ok + *//* Check the current date against the date given */ int +lefiValidUser() +{ + return (1); +} + +/* + * Internal, return Cadence Design Systems + *//* Check the current date against the date given */ char * +lefiUser() +{ + return ((char *) "Cadence Design Systems"); +} diff --git a/lefdef/src/lef/clef/lefiTypedefs.h b/lefdef/src/lef/clef/lefiTypedefs.h new file mode 100644 index 00000000..8bddc77b --- /dev/null +++ b/lefdef/src/lef/clef/lefiTypedefs.h @@ -0,0 +1,183 @@ + /* ***************************************************************************** */ + /* ***************************************************************************** */ + /* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ + /* ***************************************************************************** */ + /* ***************************************************************************** */ + /* Copyright 2012, Cadence Design Systems */ + /* */ + /* This file is part of the Cadence LEF/DEF Open Source */ + /* Distribution, Product Version 5.8. */ + /* */ + /* Licensed under the Apache License, Version 2.0 (the \"License\"); */ + /* you may not use this file except in compliance with the License. */ + /* You may obtain a copy of the License at */ + /* */ + /* http://www.apache.org/licenses/LICENSE-2.0 */ + /* */ + /* Unless required by applicable law or agreed to in writing, software */ + /* distributed under the License is distributed on an \"AS IS\" BASIS, */ + /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ + /* implied. See the License for the specific language governing */ + /* permissions and limitations under the License. */ + /* */ + /* */ + /* For updates, support, or to become part of the LEF/DEF Community, */ + /* check www.openeda.org for details. */ + /* */ + /* $Author: dell $ */ + /* $Revision: #1 $ */ + /* $Date: 2017/06/06 $ */ + /* $State: $ */ + /* ***************************************************************************** */ + /* ***************************************************************************** */ + +#ifndef CLEFITYPEDEFS_H +#define CLEFITYPEDEFS_H + +#ifndef EXTERN +#define EXTERN extern +#endif + +#define bool int +#define lefiUserData void * +#define lefiUserDataHandle void ** + +/* Typedefs */ +typedef struct lefiPoints lefiNum; + +/* Pointers to C++ classes */ +typedef void *lefiArrayFloorPlan; +typedef void *lefiLayer; +typedef void *lefiNoiseEdge; +typedef void *lefiAntennaModel; +typedef void *lefiCorrectionEdge; +typedef void *lefiTrackPattern; +typedef void *lefiIRDrop; +typedef void *lefiGeometries; +typedef void *lefiSpacingTable; +typedef void *lefiMinFeature; +typedef void *lefiGcellPattern; +typedef void *lefiTiming; +typedef void *lefiNoiseTable; +typedef void *lefiCorrectionVictim; +typedef void *lefiPinAntennaModel; +typedef void *lefiProp; +typedef void *lefiUseMinSpacing; +typedef void *lefiCorrectionResistance; +typedef void *lefiAntennaPWL; +typedef void *lefiArray; +typedef void *lefiNonDefault; +typedef void *lefiLayerDensity; +typedef void *lefiSitePattern; +typedef void *lefiMacro; +typedef void *lefiCorrectionTable; +typedef void *lefiOrthogonal; +typedef void *lefiVia; +typedef void *lefiSite; +typedef void *lefiViaLayer; +typedef void *lefiParallel; +typedef void *lefiNoiseVictim; +typedef void *lefiSpacing; +typedef void *lefiViaRule; +typedef void *lefiViaRuleLayer; +typedef void *lefiTwoWidths; +typedef void *lefiDensity; +typedef void *lefiPin; +typedef void *lefiMaxStackVia; +typedef void *lefiInfluence; +typedef void *lefiUnits; +typedef void *lefiPropType; +typedef void *lefiObstruction; +typedef void *lefiNoiseResistance; + +/* Data structures definitions */ +struct lefiNoiseMargin { + double high; + double low; +}; + +struct lefiGeomRect { + double xl; + double yl; + double xh; + double yh; + int colorMask; +}; + +struct lefiGeomRectIter { + double xl; + double yl; + double xh; + double yh; + double xStart; + double yStart; + double xStep; + double yStep; + int colorMask; +}; + +struct lefiGeomPath { + int numPoints; + double* x; + double* y; + int colorMask; +}; + +struct lefiGeomPathIter { + int numPoints; + double* x; + double* y; + double xStart; + double yStart; + double xStep; + double yStep; + int colorMask; +}; + +struct lefiGeomPolygon { + int numPoints; + double* x; + double* y; + int colorMask; +}; + +struct lefiGeomPolygonIter { + int numPoints; + double* x; + double* y; + double xStart; + double yStart; + double xStep; + double yStep; + int colorMask; +}; + +struct lefiGeomVia { + char* name; + double x; + double y; + int topMaskNum; + int cutMaskNum; + int bottomMaskNum; +}; + +struct lefiGeomViaIter { + char* name; + double x; + double y; + double xStart; + double yStart; + double xStep; + double yStep; + int topMaskNum; + int cutMaskNum; + int bottomMaskNum; +}; + +struct lefiPoints { + double x; + double y; +}; + + +#endif diff --git a/lefdef/src/lef/clef/lefiUnits.h b/lefdef/src/lef/clef/lefiUnits.h new file mode 100644 index 00000000..bc9a4965 --- /dev/null +++ b/lefdef/src/lef/clef/lefiUnits.h @@ -0,0 +1,62 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIUNITS_H +#define CLEFIUNITS_H + +#include +#include "lefiTypedefs.h" + +EXTERN int lefiUnits_hasDatabase (const lefiUnits* obj); +EXTERN int lefiUnits_hasCapacitance (const lefiUnits* obj); +EXTERN int lefiUnits_hasResistance (const lefiUnits* obj); +EXTERN int lefiUnits_hasTime (const lefiUnits* obj); +EXTERN int lefiUnits_hasPower (const lefiUnits* obj); +EXTERN int lefiUnits_hasCurrent (const lefiUnits* obj); +EXTERN int lefiUnits_hasVoltage (const lefiUnits* obj); +EXTERN int lefiUnits_hasFrequency (const lefiUnits* obj); + +EXTERN const char* lefiUnits_databaseName (const lefiUnits* obj); +EXTERN double lefiUnits_databaseNumber (const lefiUnits* obj); +EXTERN double lefiUnits_capacitance (const lefiUnits* obj); +EXTERN double lefiUnits_resistance (const lefiUnits* obj); +EXTERN double lefiUnits_time (const lefiUnits* obj); +EXTERN double lefiUnits_power (const lefiUnits* obj); +EXTERN double lefiUnits_current (const lefiUnits* obj); +EXTERN double lefiUnits_voltage (const lefiUnits* obj); +EXTERN double lefiUnits_frequency (const lefiUnits* obj); + + /* Debug print */ +EXTERN void lefiUnits_print (const lefiUnits* obj, FILE* f); + +#endif diff --git a/lefdef/src/lef/clef/lefiUser.h b/lefdef/src/lef/clef/lefiUser.h new file mode 100644 index 00000000..2df091ca --- /dev/null +++ b/lefdef/src/lef/clef/lefiUser.h @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + +/* User header file for the LEF Interface. This includes */ +/* all of the header files which are relevant to both the */ +/* reader and the writer. */ +/* */ +/* lefrReader.h and lefwWriter.h include this file, so that */ +/* an application only needs to include either lefrReader.h(pp) */ +/* or lefwWriter.h(pp). */ +/* */ + + +#ifndef CLEFIUSER_H +#define CLEFIUSER_H + +#include "lefiArray.h" +#include "lefiCrossTalk.h" +#include "lefiDebug.h" +#include "lefiEncryptInt.h" +#include "lefiLayer.h" +#include "lefiMacro.h" +#include "lefiMisc.h" +#include "lefiNonDefault.h" +#include "lefiProp.h" +#include "lefiPropType.h" +#include "lefiUnits.h" +#include "lefiUtil.h" +#include "lefiVia.h" +#include "lefiViaRule.h" + + +/* NEW CALLBACK add the reference here */ + +#endif diff --git a/lefdef/src/lef/clef/lefiUtil.h b/lefdef/src/lef/clef/lefiUtil.h new file mode 100644 index 00000000..c95d8a1b --- /dev/null +++ b/lefdef/src/lef/clef/lefiUtil.h @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIUTIL_H +#define CLEFIUTIL_H + +#include +#include "lefiTypedefs.h" + +/* Structure to return Macro data to FE */ + +/*int lefiValidTime(); */ +EXTERN int lefiValidUser (); + +EXTERN char* lefiUser (); + +EXTERN char* lefiOrientStr (int orient); + +EXTERN double convert_name2num (const char * versionName); + +EXTERN bool validateMaskNumber (int num); + +#endif diff --git a/lefdef/src/lef/clef/lefiVia.h b/lefdef/src/lef/clef/lefiVia.h new file mode 100644 index 00000000..aa401e51 --- /dev/null +++ b/lefdef/src/lef/clef/lefiVia.h @@ -0,0 +1,124 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIVIA_H +#define CLEFIVIA_H + +#include +#include "lefiTypedefs.h" + +EXTERN struct lefiGeomPolygon* lefiViaLayer_getPolygon (const lefiViaLayer* obj, int index); + + /* setName calls clear to init */ + /* deflt=0 no default specified */ + /* deflt=1 default specified in lef file */ + + /* orient=-1 means no orient was specified. */ + + /* make a new one */ + +EXTERN int lefiVia_hasDefault (const lefiVia* obj); +EXTERN int lefiVia_hasGenerated (const lefiVia* obj); +EXTERN int lefiVia_hasForeign (const lefiVia* obj); +EXTERN int lefiVia_hasForeignPnt (const lefiVia* obj); +EXTERN int lefiVia_hasForeignOrient (const lefiVia* obj); +EXTERN int lefiVia_hasProperties (const lefiVia* obj); +EXTERN int lefiVia_hasResistance (const lefiVia* obj); +EXTERN int lefiVia_hasTopOfStack (const lefiVia* obj); + +EXTERN int lefiVia_numLayers (const lefiVia* obj); +EXTERN char* lefiVia_layerName (const lefiVia* obj, int layerNum); +EXTERN int lefiVia_numRects (const lefiVia* obj, int layerNum); +EXTERN double lefiVia_xl (const lefiVia* obj, int layerNum, int rectNum); +EXTERN double lefiVia_yl (const lefiVia* obj, int layerNum, int rectNum); +EXTERN double lefiVia_xh (const lefiVia* obj, int layerNum, int rectNum); +EXTERN double lefiVia_yh (const lefiVia* obj, int layerNum, int rectNum); +EXTERN int lefiVia_rectColorMask (const lefiVia* obj, int layerNum, int rectNum); +EXTERN int lefiVia_polyColorMask (const lefiVia* obj, int layerNum, int polyNum); +EXTERN int lefiVia_numPolygons (const lefiVia* obj, int layerNum); +EXTERN struct lefiGeomPolygon lefiVia_getPolygon (const lefiVia* obj, int layerNum, int polyNum); + +EXTERN char* lefiVia_name (const lefiVia* obj); +EXTERN double lefiVia_resistance (const lefiVia* obj); + + /* Given an index from 0 to numProperties()-1 return */ + /* information about that property. */ +EXTERN int lefiVia_numProperties (const lefiVia* obj); +EXTERN char* lefiVia_propName (const lefiVia* obj, int index); +EXTERN char* lefiVia_propValue (const lefiVia* obj, int index); +EXTERN double lefiVia_propNumber (const lefiVia* obj, int index); +EXTERN char lefiVia_propType (const lefiVia* obj, int index); +EXTERN int lefiVia_propIsNumber (const lefiVia* obj, int index); +EXTERN int lefiVia_propIsString (const lefiVia* obj, int index); +EXTERN char* lefiVia_foreign (const lefiVia* obj); +EXTERN double lefiVia_foreignX (const lefiVia* obj); +EXTERN double lefiVia_foreignY (const lefiVia* obj); +EXTERN int lefiVia_foreignOrient (const lefiVia* obj); +EXTERN char* lefiVia_foreignOrientStr (const lefiVia* obj); + + /* 5.6 VIARULE inside a VIA */ +EXTERN int lefiVia_hasViaRule (const lefiVia* obj); +EXTERN const char* lefiVia_viaRuleName (const lefiVia* obj); +EXTERN double lefiVia_xCutSize (const lefiVia* obj); +EXTERN double lefiVia_yCutSize (const lefiVia* obj); +EXTERN const char* lefiVia_botMetalLayer (const lefiVia* obj); +EXTERN const char* lefiVia_cutLayer (const lefiVia* obj); +EXTERN const char* lefiVia_topMetalLayer (const lefiVia* obj); +EXTERN double lefiVia_xCutSpacing (const lefiVia* obj); +EXTERN double lefiVia_yCutSpacing (const lefiVia* obj); +EXTERN double lefiVia_xBotEnc (const lefiVia* obj); +EXTERN double lefiVia_yBotEnc (const lefiVia* obj); +EXTERN double lefiVia_xTopEnc (const lefiVia* obj); +EXTERN double lefiVia_yTopEnc (const lefiVia* obj); +EXTERN int lefiVia_hasRowCol (const lefiVia* obj); +EXTERN int lefiVia_numCutRows (const lefiVia* obj); +EXTERN int lefiVia_numCutCols (const lefiVia* obj); +EXTERN int lefiVia_hasOrigin (const lefiVia* obj); +EXTERN double lefiVia_xOffset (const lefiVia* obj); +EXTERN double lefiVia_yOffset (const lefiVia* obj); +EXTERN int lefiVia_hasOffset (const lefiVia* obj); +EXTERN double lefiVia_xBotOffset (const lefiVia* obj); +EXTERN double lefiVia_yBotOffset (const lefiVia* obj); +EXTERN double lefiVia_xTopOffset (const lefiVia* obj); +EXTERN double lefiVia_yTopOffset (const lefiVia* obj); +EXTERN int lefiVia_hasCutPattern (const lefiVia* obj); +EXTERN const char* lefiVia_cutPattern (const lefiVia* obj); + + /* Debug print */ +EXTERN void lefiVia_print (const lefiVia* obj, FILE* f); + + /* The prop value is stored in the propValue_ or the propDValue_. */ + /* If it is a string it is in propValue_. If it is a number, */ + /* then propValue_ is NULL and it is stored in propDValue_; */ + +#endif diff --git a/lefdef/src/lef/clef/lefiViaRule.h b/lefdef/src/lef/clef/lefiViaRule.h new file mode 100644 index 00000000..47be0b5e --- /dev/null +++ b/lefdef/src/lef/clef/lefiViaRule.h @@ -0,0 +1,101 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFIVIARULE_H +#define CLEFIVIARULE_H + +#include +#include "lefiTypedefs.h" + +EXTERN int lefiViaRuleLayer_hasDirection (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_hasEnclosure (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_hasWidth (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_hasResistance (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_hasOverhang (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_hasMetalOverhang (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_hasSpacing (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_hasRect (const lefiViaRuleLayer* obj); + +EXTERN char* lefiViaRuleLayer_name (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_isHorizontal (const lefiViaRuleLayer* obj); +EXTERN int lefiViaRuleLayer_isVertical (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_enclosureOverhang1 (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_enclosureOverhang2 (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_widthMin (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_widthMax (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_overhang (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_metalOverhang (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_resistance (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_spacingStepX (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_spacingStepY (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_xl (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_yl (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_xh (const lefiViaRuleLayer* obj); +EXTERN double lefiViaRuleLayer_yh (const lefiViaRuleLayer* obj); + + /* Debug print */ +EXTERN void lefiViaRuleLayer_print (const lefiViaRuleLayer* obj, FILE* f); + + /* This should clear out all the old stuff. */ + + /* Add one of possibly many via names */ + + /* These routines set a part of the active layer. */ + + /* This routine sets and creates the active layer. */ + +EXTERN int lefiViaRule_hasGenerate (const lefiViaRule* obj); +EXTERN int lefiViaRule_hasDefault (const lefiViaRule* obj); +EXTERN char* lefiViaRule_name (const lefiViaRule* obj); + + /* There are 2 or 3 layers in a rule. */ + /* numLayers() tells how many. */ + /* If a third layer exists then it is the cut layer. */ +EXTERN int lefiViaRule_numLayers (const lefiViaRule* obj); +EXTERN const lefiViaRuleLayer* lefiViaRule_layer (const lefiViaRule* obj, int index); + +EXTERN int lefiViaRule_numVias (const lefiViaRule* obj); +EXTERN char* lefiViaRule_viaName (const lefiViaRule* obj, int index); + +EXTERN int lefiViaRule_numProps (const lefiViaRule* obj); +EXTERN const char* lefiViaRule_propName (const lefiViaRule* obj, int index); +EXTERN const char* lefiViaRule_propValue (const lefiViaRule* obj, int index); +EXTERN double lefiViaRule_propNumber (const lefiViaRule* obj, int index); +EXTERN const char lefiViaRule_propType (const lefiViaRule* obj, int index); +EXTERN int lefiViaRule_propIsNumber (const lefiViaRule* obj, int index); +EXTERN int lefiViaRule_propIsString (const lefiViaRule* obj, int index); + + /* Debug print */ +EXTERN void lefiViaRule_print (const lefiViaRule* obj, FILE* f); + +#endif diff --git a/lefdef/src/lef/clef/lefrReader.h b/lefdef/src/lef/clef/lefrReader.h new file mode 100644 index 00000000..8c91714e --- /dev/null +++ b/lefdef/src/lef/clef/lefrReader.h @@ -0,0 +1,509 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2017, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFRREADER_H +#define CLEFRREADER_H + +#include +#include "lefiTypedefs.h" + +#define MAX_LEF_MSGS 4701 + +/* The reader initialization. Must be called before lefrRead(). */ +EXTERN int lefrInit (); +EXTERN int lefrInitSession (int startSession); + +/* obsolted */ +EXTERN int lefrReset (); + +/* Clears parser configuration and return it in inial state. */ +EXTERN int lefrClear (); + +/* obsoleted */ +EXTERN int lefrReleaseNResetMemory (); + +/* Change the comment character in LEF. The normal character is */ +/* '#'. You can change it to anything you want, but be careful. */ +EXTERN void lefrSetCommentChar (char c); + +/* Allow the parser to upshift all names if the LEF */ +/* file is case insensitive. The default is no shift, so the user */ +/* must do case insensitive matching. */ +EXTERN void lefrSetShiftCase (); + +/* Allow the user to change the casesensitivity anytime during */ +/* parsing. */ +/* caseSen = 0, will turn off the casesensitivity */ +/* caseSen != 0, will turn on the casesensitivity */ + +EXTERN void lefrSetCaseSensitivity (int caseSense); + +/* The reader request the file name they are parsing */ + +EXTERN const char * lefrFName (); + +/* The main reader function. */ +/* The file should already be opened. This requirement allows */ +/* the reader to be used with stdin or a pipe. The file name */ +/* is only used for error messages. The includeSearchPath is */ +/* a colon-delimited list of directories in which to find */ +/* include files. */ + +EXTERN int lefrRead (FILE * file, const char * fileName, lefiUserData userData); + +/* Set all of the callbacks that have not yet been set to a function */ +/* that will add up how many times a given lef data type was ignored */ +/* (ie no callback was done). The statistics can later be printed out. */ +EXTERN void lefrSetRegisterUnusedCallbacks (); +EXTERN void lefrPrintUnusedCallbacks (FILE* f); + +/* Set/get the client-provided user data. lefi doesn't look at */ +/* this data at all, it simply passes the opaque lefiUserData pointer */ +/* back to the application with each callback. The client can */ +/* change the data at any time, and it will take effect on the */ +/* next callback. The lefi reader and writer maintain separate */ +/* user data pointers. */ +EXTERN void lefrSetUserData (lefiUserData p0); +EXTERN lefiUserData lefrGetUserData (); + +/* An enum describing all of the types of reader callbacks. */ +typedef enum { + lefrUnspecifiedCbkType = 0, + lefrVersionCbkType = 1, + lefrVersionStrCbkType = 2, + lefrDividerCharCbkType = 3, + lefrBusBitCharsCbkType = 4, + lefrUnitsCbkType = 5, + lefrCaseSensitiveCbkType = 6, + lefrNoWireExtensionCbkType = 7, + lefrPropBeginCbkType = 8, + lefrPropCbkType = 9, + lefrPropEndCbkType = 10, + lefrLayerCbkType = 11, + lefrViaCbkType = 12, + lefrViaRuleCbkType = 13, + lefrSpacingCbkType = 14, + lefrIRDropCbkType = 15, + lefrDielectricCbkType = 16, + lefrMinFeatureCbkType = 17, + lefrNonDefaultCbkType = 18, + lefrSiteCbkType = 19, + lefrMacroBeginCbkType = 20, + lefrPinCbkType = 21, + lefrMacroCbkType = 22, + lefrObstructionCbkType = 23, + lefrArrayCbkType = 24, + + /* NEW CALLBACKS - each callback has its own type. For each callback */ + /* that you add, you must add an item to this enum. */ + + lefrSpacingBeginCbkType = 25, + lefrSpacingEndCbkType = 26, + lefrArrayBeginCbkType = 27, + lefrArrayEndCbkType = 28, + lefrIRDropBeginCbkType = 29, + lefrIRDropEndCbkType = 30, + lefrNoiseMarginCbkType = 31, + lefrEdgeRateThreshold1CbkType = 32, + lefrEdgeRateThreshold2CbkType = 33, + lefrEdgeRateScaleFactorCbkType = 34, + lefrNoiseTableCbkType = 35, + lefrCorrectionTableCbkType = 36, + lefrInputAntennaCbkType = 37, + lefrOutputAntennaCbkType = 38, + lefrInoutAntennaCbkType = 39, + lefrAntennaInputCbkType = 40, + lefrAntennaInoutCbkType = 41, + lefrAntennaOutputCbkType = 42, + lefrManufacturingCbkType = 43, + lefrUseMinSpacingCbkType = 44, + lefrClearanceMeasureCbkType = 45, + lefrTimingCbkType = 46, + lefrMacroClassTypeCbkType = 47, + lefrMacroOriginCbkType = 48, + lefrMacroSizeCbkType = 49, + lefrMacroFixedMaskCbkType = 50, + lefrMacroEndCbkType = 51, + lefrMaxStackViaCbkType = 52, + lefrExtensionCbkType = 53, + lefrDensityCbkType = 54, + lefrFixedMaskCbkType = 55, + lefrMacroSiteCbkType = 56, + lefrMacroForeignCbkType = 57, + + lefrLibraryEndCbkType = 58 +} lefrCallbackType_e; + +/* Declarations of function signatures for each type of callback. */ +/* These declarations are type-safe when compiling with ANSI C */ +/* or C++; you will only be able to register a function pointer */ +/* with the correct signature for a given type of callback. */ +/* */ +/* Each callback function is expected to return 0 if successful. */ +/* A non-zero return code will cause the reader to abort. */ +/* */ +/* The lefrDesignStart and lefrDesignEnd callback is only called once. */ +/* Other callbacks may be called multiple times, each time with a different */ +/* set of data. */ +/* */ +/* For each callback, the Def API will make the callback to the */ +/* function supplied by the client, which should either make a copy */ +/* of the Def object, or store the data in the client's own data structures. */ +/* The Def API will delete or reuse each object after making the callback, */ +/* so the client should not keep a pointer to it. */ +/* */ +/* All callbacks pass the user data pointer provided in lefrRead() */ +/* or lefrSetUserData() back to the client; this can be used by the */ +/* client to obtain access to the rest of the client's data structures. */ +/* */ +/* The user data pointer is obtained using lefrGetUserData() immediately */ +/* prior to making each callback, so the client is free to change the */ +/* user data on the fly if necessary. */ +/* */ +/* Callbacks with the same signature are passed a callback type */ +/* parameter, which allows an application to write a single callback */ +/* function, register that function for multiple callbacks, then */ +/* switch based on the callback type to handle the appropriate type of */ +/* data. */ + +/* A declaration of the signature of all callbacks that return nothing. */ +typedef int (*lefrVoidCbkFnType) (lefrCallbackType_e, void* num, lefiUserData); + +/* A declaration of the signature of all callbacks that return a string. */ +typedef int (*lefrStringCbkFnType) (lefrCallbackType_e, const char *string, lefiUserData); + +/* A declaration of the signature of all callbacks that return a integer. */ +typedef int (*lefrIntegerCbkFnType) (lefrCallbackType_e, int number, lefiUserData); + +/* A declaration of the signature of all callbacks that return a double. */ +typedef int (*lefrDoubleCbkFnType) (lefrCallbackType_e, double number, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiUnits. */ +typedef int (*lefrUnitsCbkFnType) (lefrCallbackType_e, lefiUnits* units, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiLayer. */ +typedef int (*lefrLayerCbkFnType) (lefrCallbackType_e, lefiLayer* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiVia. */ +typedef int (*lefrViaCbkFnType) (lefrCallbackType_e, lefiVia* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiViaRule. */ +typedef int (*lefrViaRuleCbkFnType) (lefrCallbackType_e, lefiViaRule* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiSpacing. */ +typedef int (*lefrSpacingCbkFnType) (lefrCallbackType_e, lefiSpacing* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiIRDrop. */ +typedef int (*lefrIRDropCbkFnType) (lefrCallbackType_e, lefiIRDrop* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiMinFeatu */ +typedef int (*lefrMinFeatureCbkFnType) (lefrCallbackType_e, lefiMinFeature* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiNonDefau */ +typedef int (*lefrNonDefaultCbkFnType) (lefrCallbackType_e, lefiNonDefault* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiSite. */ +typedef int (*lefrSiteCbkFnType) (lefrCallbackType_e, lefiSite* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiMacro. */ +typedef int (*lefrMacroCbkFnType) (lefrCallbackType_e, lefiMacro* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiPin. */ +typedef int (*lefrPinCbkFnType) (lefrCallbackType_e, lefiPin* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiObstruct */ +typedef int (*lefrObstructionCbkFnType) (lefrCallbackType_e, lefiObstruction* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiArray. */ +typedef int (*lefrArrayCbkFnType) (lefrCallbackType_e, lefiArray* l, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiProp. */ +typedef int (*lefrPropCbkFnType) (lefrCallbackType_e, lefiProp* p, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiNoiseMar */ +typedef int (*lefrNoiseMarginCbkFnType) (lefrCallbackType_e, struct lefiNoiseMargin* p, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiNoiseTab */ +typedef int (*lefrNoiseTableCbkFnType) (lefrCallbackType_e, lefiNoiseTable* p, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiCorrecti */ +typedef int (*lefrCorrectionTableCbkFnType) (lefrCallbackType_e, lefiCorrectionTable* p, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiTiming. */ +typedef int (*lefrTimingCbkFnType) (lefrCallbackType_e, lefiTiming* p, lefiUserData); + +/* A declaration of the signature of all callbacks that return a lefiUseMinSp */ +typedef int (*lefrUseMinSpacingCbkFnType) (lefrCallbackType_e, lefiUseMinSpacing* l, lefiUserData); + + /* NEW CALLBACK - If your callback returns a pointer to a new class then */ + /* you must add a type function here. */ + +/* A declaration of the signature of all callbacks that return a lefiMaxStack */ +typedef int (*lefrMaxStackViaCbkFnType) (lefrCallbackType_e, lefiMaxStackVia* l, lefiUserData); + +typedef int (*lefrMacroNumCbkFnType) (lefrCallbackType_e, lefiNum l, lefiUserData); + +/* 5.6 */ +/* A declaration of the signature of all callbacks that return a lefiDensity. */ +typedef int (*lefrDensityCbkFnType) (lefrCallbackType_e, lefiDensity* l, lefiUserData); + +/* Functions to call to register a callback function. */ +EXTERN void lefrSetUnitsCbk (lefrUnitsCbkFnType p0); +EXTERN void lefrSetVersionCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetVersionStrCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetDividerCharCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetBusBitCharsCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetNoWireExtensionCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetCaseSensitiveCbk (lefrIntegerCbkFnType p0); +EXTERN void lefrSetPropBeginCbk (lefrVoidCbkFnType p0); +EXTERN void lefrSetPropCbk (lefrPropCbkFnType p0); +EXTERN void lefrSetPropEndCbk (lefrVoidCbkFnType p0); +EXTERN void lefrSetLayerCbk (lefrLayerCbkFnType p0); +EXTERN void lefrSetViaCbk (lefrViaCbkFnType p0); +EXTERN void lefrSetViaRuleCbk (lefrViaRuleCbkFnType p0); +EXTERN void lefrSetSpacingCbk (lefrSpacingCbkFnType p0); +EXTERN void lefrSetIRDropCbk (lefrIRDropCbkFnType p0); +EXTERN void lefrSetDielectricCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetMinFeatureCbk (lefrMinFeatureCbkFnType p0); +EXTERN void lefrSetNonDefaultCbk (lefrNonDefaultCbkFnType p0); +EXTERN void lefrSetSiteCbk (lefrSiteCbkFnType p0); +EXTERN void lefrSetMacroBeginCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetPinCbk (lefrPinCbkFnType p0); +EXTERN void lefrSetObstructionCbk (lefrObstructionCbkFnType p0); +EXTERN void lefrSetArrayCbk (lefrArrayCbkFnType p0); +EXTERN void lefrSetMacroCbk (lefrMacroCbkFnType p0); +EXTERN void lefrSetLibraryEndCbk (lefrVoidCbkFnType p0); + +/* NEW CALLBACK - each callback must have a function to allow the user */ +/* to set it. Add the function here. */ + +EXTERN void lefrSetTimingCbk (lefrTimingCbkFnType p0); +EXTERN void lefrSetSpacingBeginCbk (lefrVoidCbkFnType p0); +EXTERN void lefrSetSpacingEndCbk (lefrVoidCbkFnType p0); +EXTERN void lefrSetArrayBeginCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetArrayEndCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetIRDropBeginCbk (lefrVoidCbkFnType p0); +EXTERN void lefrSetIRDropEndCbk (lefrVoidCbkFnType p0); +EXTERN void lefrSetNoiseMarginCbk (lefrNoiseMarginCbkFnType p0); +EXTERN void lefrSetEdgeRateThreshold1Cbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetEdgeRateThreshold2Cbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetEdgeRateScaleFactorCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetNoiseTableCbk (lefrNoiseTableCbkFnType p0); +EXTERN void lefrSetCorrectionTableCbk (lefrCorrectionTableCbkFnType p0); +EXTERN void lefrSetInputAntennaCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetOutputAntennaCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetInoutAntennaCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetAntennaInputCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetAntennaInoutCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetAntennaOutputCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetClearanceMeasureCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetManufacturingCbk (lefrDoubleCbkFnType p0); +EXTERN void lefrSetUseMinSpacingCbk (lefrUseMinSpacingCbkFnType p0); +EXTERN void lefrSetMacroClassTypeCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetMacroOriginCbk (lefrMacroNumCbkFnType p0); +EXTERN void lefrSetMacroSizeCbk (lefrMacroNumCbkFnType p0); +EXTERN void lefrSetMacroFixedMaskCbk (lefrIntegerCbkFnType p0); +EXTERN void lefrSetMacroEndCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetMaxStackViaCbk (lefrMaxStackViaCbkFnType p0); +EXTERN void lefrSetExtensionCbk (lefrStringCbkFnType p0); +EXTERN void lefrSetDensityCbk (lefrDensityCbkFnType p0); +EXTERN void lefrSetFixedMaskCbk (lefrIntegerCbkFnType p0); + +/* Set all of the callbacks that have not yet been set to the following */ +/* function. This is especially useful if you want to check to see */ +/* if you forgot anything. */ +EXTERN void lefrSetUnusedCallbacks (lefrVoidCbkFnType func); + +/* Reset all the callback functions to nil */ +EXTERN void lefrUnsetCallbacks (); + +/* Functions to call to unregister a callback function. */ +EXTERN void lefrUnsetAntennaInputCbk (); +EXTERN void lefrUnsetAntennaInoutCbk (); +EXTERN void lefrUnsetAntennaOutputCbk (); +EXTERN void lefrUnsetArrayBeginCbk (); +EXTERN void lefrUnsetArrayCbk (); +EXTERN void lefrUnsetArrayEndCbk (); +EXTERN void lefrUnsetBusBitCharsCbk (); +EXTERN void lefrUnsetCaseSensitiveCbk (); +EXTERN void lefrUnsetClearanceMeasureCbk (); +EXTERN void lefrUnsetCorrectionTableCbk (); +EXTERN void lefrUnsetDensityCbk (); +EXTERN void lefrUnsetDielectricCbk (); +EXTERN void lefrUnsetDividerCharCbk (); +EXTERN void lefrUnsetEdgeRateScaleFactorCbk (); +EXTERN void lefrUnsetEdgeRateThreshold1Cbk (); +EXTERN void lefrUnsetEdgeRateThreshold2Cbk (); +EXTERN void lefrUnsetExtensionCbk (); +EXTERN void lefrUnsetInoutAntennaCbk (); +EXTERN void lefrUnsetInputAntennaCbk (); +EXTERN void lefrUnsetIRDropBeginCbk (); +EXTERN void lefrUnsetIRDropCbk (); +EXTERN void lefrUnsetIRDropEndCbk (); +EXTERN void lefrUnsetLayerCbk (); +EXTERN void lefrUnsetLibraryEndCbk (); +EXTERN void lefrUnsetMacroBeginCbk (); +EXTERN void lefrUnsetMacroCbk (); +EXTERN void lefrUnsetMacroClassTypeCbk (); +EXTERN void lefrUnsetMacroEndCbk (); +EXTERN void lefrUnsetMacroOriginCbk (); +EXTERN void lefrUnsetMacroSizeCbk (); +EXTERN void lefrUnsetManufacturingCbk (); +EXTERN void lefrUnsetMaxStackViaCbk (); +EXTERN void lefrUnsetMinFeatureCbk (); +EXTERN void lefrUnsetNoiseMarginCbk (); +EXTERN void lefrUnsetNoiseTableCbk (); +EXTERN void lefrUnsetNonDefaultCbk (); +EXTERN void lefrUnsetNoWireExtensionCbk (); +EXTERN void lefrUnsetObstructionCbk (); +EXTERN void lefrUnsetOutputAntennaCbk (); +EXTERN void lefrUnsetPinCbk (); +EXTERN void lefrUnsetPropBeginCbk (); +EXTERN void lefrUnsetPropCbk (); +EXTERN void lefrUnsetPropEndCbk (); +EXTERN void lefrUnsetSiteCbk (); +EXTERN void lefrUnsetSpacingBeginCbk (); +EXTERN void lefrUnsetSpacingCbk (); +EXTERN void lefrUnsetSpacingEndCbk (); +EXTERN void lefrUnsetTimingCbk (); +EXTERN void lefrUnsetUseMinSpacingCbk (); +EXTERN void lefrUnsetUnitsCbk (); +EXTERN void lefrUnsetVersionCbk (); +EXTERN void lefrUnsetVersionStrCbk (); +EXTERN void lefrUnsetViaCbk (); +EXTERN void lefrUnsetViaRuleCbk (); + +/* Return the current line number in the parser. */ +EXTERN int lefrLineNumber (); + +/* Routine to set the message logging routine for errors */ +typedef void (*LEFI_LOG_FUNCTION) (const char*); +EXTERN void lefrSetLogFunction (LEFI_LOG_FUNCTION p0); + +/* Routine to set the message logging routine for warnings */ +typedef void (*LEFI_WARNING_LOG_FUNCTION) (const char*); +EXTERN void lefrSetWarningLogFunction (LEFI_WARNING_LOG_FUNCTION p0); + +/* Routine to set the user defined malloc routine */ +typedef void* (*LEFI_MALLOC_FUNCTION) (int); +EXTERN void lefrSetMallocFunction (LEFI_MALLOC_FUNCTION p0); + +/* Routine to set the user defined realloc routine */ +typedef void* (*LEFI_REALLOC_FUNCTION) (void *, int); +EXTERN void lefrSetReallocFunction (LEFI_REALLOC_FUNCTION p0); + +/* Routine to set the user defined free routine */ +typedef void (*LEFI_FREE_FUNCTION) (void *); +EXTERN void lefrSetFreeFunction (LEFI_FREE_FUNCTION p0); + +/* Routine to set the line number callback routine */ +typedef void (*LEFI_LINE_NUMBER_FUNCTION) (int); +EXTERN void lefrSetLineNumberFunction (LEFI_LINE_NUMBER_FUNCTION p0); + +/* Set the number of lines before calling the line function callback routine */ +/* Default is 10000 */ +EXTERN void lefrSetDeltaNumberLines (int p0); + +/* PCR 551229 - Set the parser to be more relax */ +/* This api is specific for PKS. */ +/* When in relax mode, the parser will not require width, pitch, & direction */ +/* in routing layers. Also vias in nondefault rules */ +EXTERN void lefrSetRelaxMode (); +EXTERN void lefrUnsetRelaxMode (); + +/* PCR 565274 - LEF/DEF API should have the API call to overwrite default */ +/* version */ +EXTERN void lefrSetVersionValue (const char* version); + +/* Routine to set the read function */ +typedef size_t (*LEFI_READ_FUNCTION) (FILE*, char*, size_t); +EXTERN void lefrSetReadFunction (LEFI_READ_FUNCTION p0); +EXTERN void lefrUnsetReadFunction (); + +/* Routine to set the lefrWarning.log to open as append instead for write */ +/* New in 5.7 */ +EXTERN void lefrSetOpenLogFileAppend (); +EXTERN void lefrUnsetOpenLogFileAppend (); + +/* Routine to disable string property value process, default it will process */ +/* the value string */ +EXTERN void lefrDisablePropStrProcess (); + +/* Routine to set the max number of warnings for a perticular section */ + +EXTERN void lefrSetAntennaInoutWarnings (int warn); +EXTERN void lefrSetAntennaInputWarnings (int warn); +EXTERN void lefrSetAntennaOutputWarnings (int warn); +EXTERN void lefrSetArrayWarnings (int warn); +EXTERN void lefrSetCaseSensitiveWarnings (int warn); +EXTERN void lefrSetCorrectionTableWarnings (int warn); +EXTERN void lefrSetDielectricWarnings (int warn); +EXTERN void lefrSetEdgeRateThreshold1Warnings (int warn); +EXTERN void lefrSetEdgeRateThreshold2Warnings (int warn); +EXTERN void lefrSetEdgeRateScaleFactorWarnings (int warn); +EXTERN void lefrSetInoutAntennaWarnings (int warn); +EXTERN void lefrSetInputAntennaWarnings (int warn); +EXTERN void lefrSetIRDropWarnings (int warn); +EXTERN void lefrSetLayerWarnings (int warn); +EXTERN void lefrSetMacroWarnings (int warn); +EXTERN void lefrSetMaxStackViaWarnings (int warn); +EXTERN void lefrSetMinFeatureWarnings (int warn); +EXTERN void lefrSetNoiseMarginWarnings (int warn); +EXTERN void lefrSetNoiseTableWarnings (int warn); +EXTERN void lefrSetNonDefaultWarnings (int warn); +EXTERN void lefrSetNoWireExtensionWarnings (int warn); +EXTERN void lefrSetOutputAntennaWarnings (int warn); +EXTERN void lefrSetPinWarnings (int warn); +EXTERN void lefrSetSiteWarnings (int warn); +EXTERN void lefrSetSpacingWarnings (int warn); +EXTERN void lefrSetTimingWarnings (int warn); +EXTERN void lefrSetUnitsWarnings (int warn); +EXTERN void lefrSetUseMinSpacingWarnings (int warn); +EXTERN void lefrSetViaRuleWarnings (int warn); +EXTERN void lefrSetViaWarnings (int warn); + +/* Handling output messages */ +EXTERN void lefrDisableParserMsgs (int nMsg, int* msgs); +EXTERN void lefrEnableParserMsgs (int nMsg, int* msgs); +EXTERN void lefrEnableAllMsgs (); +EXTERN void lefrDisableAllMsgs (); +EXTERN void lefrSetTotalMsgLimit (int totNumMsgs); +EXTERN void lefrSetLimitPerMsg (int msgId, int numMsg); + +/* Return codes for the user callbacks. */ +/* The user should return one of these values. */ +#define PARSE_OK 0 +#define STOP_PARSE 1 +#define PARSE_ERROR 2 + +#endif diff --git a/lefdef/src/lef/clef/lefwWriter.h b/lefdef/src/lef/clef/lefwWriter.h new file mode 100644 index 00000000..d3a4f9f7 --- /dev/null +++ b/lefdef/src/lef/clef/lefwWriter.h @@ -0,0 +1,2128 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFWWRITER_H +#define CLEFWWRITER_H + +#include +#include "lefiTypedefs.h" + +/* Return codes for writing functions: */ +#define LEFW_OK 0 +#define LEFW_UNINITIALIZED 1 +#define LEFW_BAD_ORDER 2 +#define LEFW_BAD_DATA 3 +#define LEFW_ALREADY_DEFINED 4 +#define LEFW_WRONG_VERSION 5 +#define LEFW_MIX_VERSION_DATA 6 +#define LEFW_OBSOLETE 7 + +/* orient */ +/* 0 = N */ +/* 1 = W */ +/* 2 = S */ +/* 3 = E */ +/* 4 = FN */ +/* 5 = FW */ +/* 6 = FS */ +/* 7 = FE */ + +/* The LEF writer initialization. Must be called first. */ +/* Either this routine or lefwInitCbk should be call only, */ +/* Can't call both routines. */ +/* This routine must be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwInit (FILE* f); + +/* The LEF writer initialization. Must be called first. */ +/* Either this routine or lefwInit should be call only, */ +/* Can't call both routines. */ +/* This routine must be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwInitCbk (FILE* f); + +/* This routine will set the writer to write out an encrypted */ +/* lef file. */ +/* This routine must be called only once and has to be called after */ +/* lefwInit or lefwInitCbk */ +/* Need to call lefwCloseEncrypt to do some cleaning if this routine */ +/* has called */ +EXTERN int lefwEncrypt (); + +/* This routine needs to be called if lefwEncrypt has called. */ +/* It should be called before the fclose. */ +/* It does some house cleaning. */ +EXTERN int lefwCloseEncrypt (); + +/* This routine will write a blank line */ + +EXTERN int lefwNewLine (); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwVersion (int vers1, int vers2); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +/* The caseSensitive can be ON or OFF. */ +EXTERN int lefwCaseSensitive (const char* caseSensitive); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +/* The noWireExtensionAtPin can be ON or OFF. */ +EXTERN int lefwNoWireExtensionAtPin (const char* noWireExt); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +/* already have one */ +EXTERN int lefwMinfeature (double minFeatureX, double minFeatureY); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwDielectric (double dielectric); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwBusBitChars (const char* busBitChars); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwDividerChar (const char* dividerChar); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwManufacturingGrid (double grid); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* This is a 5.8 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwFixedMask (); + +/* This routine is called after lefwInit. */ +/* This routine can be called multiple times. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwUseMinSpacing (const char* type, const char* onOff); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwClearanceMeasure (const char* type); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwAntennaInputGateArea (double inputGateArea); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwAntennaInOutDiffArea (double inOutDiffArea); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwAntennaOutputDiffArea (double outputDiffArea); + +/* This routine is called after lefwInit. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +/* This section of routines is optional. */ +/* The routine starts the units section. All of the units must follow. */ +EXTERN int lefwStartUnits (); + +/* This routine is called once for each unit. The call must */ +/* be preceeded by a call to lefwStartUnits and must be */ +/* terminated by a call to lefwEndUnits. */ +/* Returns 0 if successful. */ +EXTERN int lefwUnits (double time, double capacitance, double resistance, double power, double current, double voltage, double database); + +/* This routine is called once for each unit. It is separated from */ +/* lefwUnits due to backwards compatible for pre 5.3. */ +/* Returns 0 if successful. */ +EXTERN int lefwUnitsFrequency (double frequency); + +/* This routine must be called after the lefwUnits call (if any). */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndUnits (); + +/* This routine is called after lefwInit. */ +/* Either this routine or lefwStartLayerRouting must be called. */ +/* Multiple sections of lefwStartLayer can be called. */ +/* This routine can be called only once per section. */ +/* Returns 0 if successful. */ +/* The routine starts the layer section. All of the layers must follow. */ +/* The type can be either CUT for Cut Layer, MASTERSLICE or OVERLAP for */ +/* Masterslice or Overlay Layer. */ +EXTERN int lefwStartLayer (const char* layerName, const char* type); + +/* This routine must be called after lefwStartLayer. */ +/* This section of routines is optional. */ +/* Returns 0 if successful. */ +/* This is a 5.8 syntax. */ +EXTERN int lefwLayerMask (int maskColor); + +/* This routine must be called after lefwStartLayer. */ +/* This section of routines is optional. */ +/* Returns 0 if successful. */ +/* This is a 5.5 syntax. */ +/* This routine is called if the layer type is IMPLANT when */ +/* lefwStartLayer is called. */ +EXTERN int lefwLayerWidth (double minWidth); + +/* The following APIs are for lefwrite 5.7 Layer, Spacing with type CUT */ +/* Due to adding new constructs, it is impossible to use the previous */ +/* APIs. */ +/* The following APIs are obsoleted in 5.7: */ +/* lefwLayer */ +/* lefwLayerStack */ +/* lefwLayerSpacingAdjacent */ +/* lefwLayerSpacingCenterToCenter */ + +/* This routine must be called after lefwStartLayer. */ +/* This routine starts the Layer Type Cut Spacing */ +/* Returns 0 if successful. */ +/* The routing lefwLayerCutSpacingEnd has to call at the end of each spacing. */ +/* This is a 5.7 syntax. */ +EXTERN int lefwLayerCutSpacing (double spacing); + +/* This routine must be called after lefwLayerSpacing */ +/* This routine is optional. */ +/* Returns 0 if successful. */ +/* This is a 5.7 syntax. */ +EXTERN int lefwLayerCutSpacingCenterToCenter (); + +/* This routine must be called after lefwLayerSpacing */ +/* This routine is optional. */ +/* Returns 0 if successful. */ +/* This is a 5.7 syntax. */ +EXTERN int lefwLayerCutSpacingSameNet (); + +/* This routine must be called after lefwLayerSpacing */ +/* This routine is optional. */ +/* Either this routine, lefwLayerCutSpacingAdjacent, */ +/* lefwLayerCutSpacingParallel or lefwLayerCutSpacingArea is called per Spaci */ +/* Returns 0 if successful. */ +/* This is a 5.7 syntax. */ +EXTERN int lefwLayerCutSpacingLayer (const char* name2, int stack); + +/* This routine must be called after lefwLayerSpacing */ +/* This routine is optional. */ +/* Either this routine, lefwLayerCutSpacingLayer, */ +/* lefwLayerCutSpacingParallel or lefwLayerCutSpacingArea is called per Spaci */ +/* Returns 0 if successful. */ +/* This is a 5.7 syntax. */ +EXTERN int lefwLayerCutSpacingAdjacent (int viaCuts, double distance, int stack); + +/* This routine must be called after lefwLayerSpacing */ +/* This routine is optional. */ +/* Either this routine, lefwLayerCutSpacingLayer, */ +/* lefwLayerCutSpacingAdjacent or lefwLayerCutSpacingArea is called per Spaci */ +/* Returns 0 if successful. */ +/* This is a 5.7 syntax. */ +EXTERN int lefwLayerCutSpacingParallel (); + +/* This routine must be called after lefwLayerSpacing */ +/* This routine is optional. */ +/* Either this routine, lefwLayerCutSpacingLayer, * lefwLayerCutSpacingAdjace */ +/* or lefwLayerCutSpacingParallel is called per Spacing. */ +/* Returns 0 if successful. */ +/* This is a 5.7 syntax. */ +EXTERN int lefwLayerCutSpacingArea (double cutArea); + +/* This routine must be called after lefwLayerSpacing */ +/* This routine marks the end of a Layer Type CUT Spacing */ +/* Returns 0 if successful. */ +/* This is a 5.7 syntax. */ +EXTERN int lefwLayerCutSpacingEnd (); + +/* This routine must be called after lefwStartLayer. */ +/* This routine can be called only once. */ +/* This section of routines is optional. */ +/* This is a 5.7 syntax */ +/* Returns 0 if successful. */ +/* This routine is called if the layer type is CUT when */ +/* lefwStartLayer is called. */ +EXTERN int lefwLayerCutSpacingTableOrtho (int numSpacing, double* cutWithins, double* orthoSpacings); + +/* This routine must be called after lefwStartLayer. */ +/* This routine can be called only once. */ +/* This section of routines is optional. */ +/* This is a 5.7 syntax */ +/* Returns 0 if successful. */ +/* This routine is called if the layer type is CUT when */ +/* lefwStartLayer is called. */ +EXTERN int lefwLayerArraySpacing (int longArray, double viaWidth, double cutSpacing, int numArrayCut, int* arrayCuts, double* arraySpacings); + +/* This routine must be called after lefwStartLayer. */ +/* This routine can be called multiple times. */ +/* This section of routines is optional. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +/* This routine is called if the layer type is CUT when */ +/* lefwStartLayer is called. */ +EXTERN int lefwLayerEnclosure (const char* location, double overhang1, double overhang2, double width); + +/* This routine must be called after lefwStartLayer. */ +/* This routine can be called multiple times. */ +/* This routine is similar as lefwLayerEnclosure, but allow user to add */ +/* EXCEPTEXTRACUT option */ +/* This section of routines is optional. */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +/* This routine is called if the layer type is CUT when */ +/* lefwStartLayer is called. */ +EXTERN int lefwLayerEnclosureWidth (const char* location, double overhang1, double overhang2, double width, double cutWithin); + +/* This routine must be called after lefwStartLayer. */ +/* This routine can be called multiple times. */ +/* This routine is to write out minLength inside ENCLOSURE instead of WIDTH */ +/* as in the routine lefwLayerEnclosure & lefwLayerEnclosureWidth. */ +/* This section of routines is optional. */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +/* This routine is called if the layer type is CUT when */ +/* lefwStartLayer is called. */ +EXTERN int lefwLayerEnclosureLength (const char* location, double overhang1, double overhang2, double minLength); + +/* This routine must be called after lefwStartLayer. */ +/* This routine can be called multiple times. */ +/* This section of routines is optional. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +/* This routine is called if the layer type is CUT when */ +/* lefwStartLayer is called. */ +EXTERN int lefwLayerPreferEnclosure (const char* location, double overhang1, double overhang2, double width); + +/* This routine must be called after lefwStartLayer. */ +/* This routine can be called only once per Layer. */ +/* This section of routines is optional. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +/* This routine is called if the layer type is CUT when */ +/* lefwStartLayer is called. */ +EXTERN int lefwLayerResistancePerCut (double resistance); + +/* This routine must be called after the lefwStartLayer call (if any). */ +/* The routine can be called only once per section. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndLayer (const char* layerName); + +/* This routine is called after lefwInit. */ +/* Either this routine or lefwStartLayer must be called. */ +/* Multiple section of lefwStartLayer can be called. */ +/* The routine can be called only once per section. */ +/* Returns 0 if successful. */ +/* The routine starts the layer routing section. */ +/* All of the layers must follow. */ +EXTERN int lefwStartLayerRouting (const char* layerName); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is required for LayerRouting. */ +/* Returns 0 if successful. */ + /* DIAG45 | DIAG135 */ +EXTERN int lefwLayerRouting (const char* direction, double width); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* Either this routine or lefwLayerRoutingPitchXYDistance can be called */ +/* but not both */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingPitch (double pitch); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* Either this routine or lefwLayerRoutingPitch can be called but not both */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingPitchXYDistance (double xDistance, double yDistance); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* Either this routine or lefwLayerRoutingDiagPitchXYDistance can be called */ +/* but not both */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingDiagPitch (double distance); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* Either this routine or lefwLayerRoutingDiagPitch can be called */ +/* but not both */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingDiagPitchXYDistance (double diag45Distance, double diag135Distance); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingDiagWidth (double diagWidth); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingDiagSpacing (double diagSpacing); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingDiagMinEdgeLength (double diagLength); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Either this routine or lefwLayerRoutingOffsetXYDistance can be called */ +/* but not both */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingOffset (double offset); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Either this routine or lefwLayerRoutingOffset can be called but not both */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingOffsetXYDistance (double xDistance, double yDistance); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingArea (double area); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinsize (int numRect, double* minWidth, double* minLength); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinimumcut (double numCuts, double minWidth); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is similar as lefwLayerRoutingMinimumcut, but allow user */ +/* to specify value for WITHIN */ +/* This is a 5.7 syntax. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinimumcutWithin (double numCuts, double minWidth, double cutDistance); + +/* This routine must be called only once after lefwLayerRoutingMinimumcut. */ +/* This routine is optional. */ +/* Direction can be either FROMABOVE or FROMBELOW */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinimumcutConnections (const char* direction); + +/* This routine must be called only once after lefwLayerRoutingMinimumcut. */ +/* This routine is optional. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinimumcutLengthWithin (double length, double distance); + +/* This routine must be called multiple time after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacing (double spacing); + +/* Either this routine, lefwLayerRoutingSpacingLengthThreshold or */ +/* lefwLayerRoutingSpacingSameNet can be */ +/* called only once after lefwLayerRoutingSpacing. */ +/* This routine is optional. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingRange (double minWidth, double maxWidth); + +/* Either this routine or lefwLayerRoutingSpacingRangeInfluence or */ +/* lefwLayerRoutingSpacingRangeRange can */ +/* be called once after llefwLayerRoutingSpacingRange. */ +/* This routine is valid only if either or both leftRange and rightRange */ +/* in lefwLayerRoutingSpacing are non zero */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingRangeUseLengthThreshold (); + +/* Either this routine or lefwLayerRoutingSpacingRangeUseLengthThreshold or */ +/* lefwLayerRoutingSpacingRangeRange can be called once after */ +/* lefwLayerRoutingSpacingRange. */ +/* subMinWidth & subMaxWidth are optional. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingRangeInfluence (double infValue, double subMinWidth, double subMaxWidth); + +/* Either this routine or lefwLayerRoutingSpacingRangeUseLengthThreshold or */ +/* lefwLayerRoutingSpacingRangeInfluence can be called once after */ +/* lefwLayerRoutingSpacingRange. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingRangeRange (double minWidth, double maxWidth); + +/* Either this routine, lefwLayerRoutingSpacingRange or */ +/* lefwLayerRoutingSpacingSameNet can be */ +/* be called once after lefwLayerRoutingSpacing. */ +/* minWidth & maxWidth are optional. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingLengthThreshold (double lengthValue, double minWidth, double maxWidth); + +/* Either this routine, lefwLayerRoutingSpacingRange or */ +/* lefwLayerRoutingSpacingRange can be */ +/* be called once after lefwLayerRoutingSpacing. */ +/* This is a 5.7 routine. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingSameNet (int PGOnly); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingEndOfLine (double eolWidth, double eolWithin); + +/* This routine must be called only once after lefwLayerRoutingSpacingEndOfLi */ +/* This routine is optional */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingEOLParallel (double parSpace, double parWithin, int twoEdges); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingNotchLength (double minNLength); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingEndOfNotchWidth (double eonWidth, double minNSpacing, double minNLength); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingWireExtension (double wireExtension); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingResistance (const char* resistance); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingCapacitance (const char* capacitance); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingHeight (double height); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingThickness (double thickness); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingShrinkage (double shrinkage); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingCapMultiplier (double capMultiplier); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingEdgeCap (double edgeCap); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingAntennaArea (double antennaArea); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingAntennaLength (double antennaLength); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional and can be called once. */ +/* This is a 5.5 syntax. */ +/* width is the maximum width. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMaxwidth (double width); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional and can be called once. */ +/* This is a 5.5 syntax. */ +/* width is the maximum width. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinwidth (double width); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional. */ +/* This is a 5.5 syntax. */ +/* Area is the minimum area size limit for metal that encloses an empty area. */ +/* Width is optional, it says the rule only applies when a donut is careted */ +/* from a wire of width <= width. The parameter width is required for the */ +/* routine lefwLayerRoutineMinenclosedarea. If width is optional, a "0" */ +/* value is assigned for that index slot of the array. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinenclosedarea (int numMinenclosed, double* area, double* width); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional and can be called once. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinstep (double distance); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional and can be called once. */ +/* This routine is equivalent to lefwLayerRoutingMinstep, except it also */ +/* takes the options for type & Lengthsum. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinstepWithOptions (double distance, const char* rule, double maxLength); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional and can be called once. */ +/* This routine is equivalent to lefwLayerRoutingMinstep, except it also */ +/* takes the option for MaxEdges. */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingMinstepMaxEdges (double distance, double maxEdges); + +/* This routine must be called only once after lefwStartLayerRouting. */ +/* This routine is optional and can be called once. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingProtrusion (double width1, double length, double width2); + +/* This routine must be called only after lefwStartLayerRouting. */ +/* This routine is optional and can be called multiple times. */ +/* This is a 5.5 syntax. */ +/* numLength has the size of the array length. */ +/* length is an array of length values. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingStartSpacingtableParallel (int numLength, double* length); + +/* This routine must be called only after */ +/* lefwLayerRoutingStartSpacingtableParallel. */ +/* This routine is required after lefwLayerRoutingStartSpacingtableParallel. */ +/* This routine can be called multiple times. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingtableParallelWidth (double width, int numSpacing, double* spacing); + +/* This routine must be called only after lefwStartLayerRouting. */ +/* This routine is optional and can be called multiple times. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingStartSpacingtableInfluence (); + +/* This routine must be called only after */ +/* lefwLayerRoutingStartSpacingtableInfluence. */ +/* This routine is required after lefwLayerRoutingStartSpacingtableInfluence. */ +/* This routine can be called multiple times. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingInfluenceWidth (double width, double distance, double spacing); + +/* This routine must be called only after lefwStartLayerRouting. */ +/* This routine is optional and can be called multiple times. */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingStartSpacingtableTwoWidths (); + +/* This routine must be called only after */ +/* lefwLayerRoutingStartSpacingtableInfluence. */ +/* This routine is required after lefwLayerRoutingStartSpacingtableTwoWidths. */ +/* This routine can be called multiple times. */ +/* This is a 5.7 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutingSpacingtableTwoWidthsWidth (double width, double runLength, int numSpacing, double* spacing); + +/* This routine can be called after lefwLayerRoutingStartSpacingtableParallel */ +/* or lefwLayerRoutingStartSpacingtableInfluence. */ +/* It can only be called once. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerRoutineEndSpacingtable (); + +/* This routine must be called after the lefwStartLayer call (if any). */ +/* The routine can be called only once per section. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndLayerRouting (const char* layerName); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called multiple times. */ +/* if the value for the variable value is not 0, one of the following */ +/* routines have to be called: lefwLayerACFrequency, */ +/* lefwLayerACWidth, lefwLayerACCutarea, or */ +/* lefwLayerACTableEntries */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerACCurrentDensity (const char* type, double value); + +/* This routine must be called after lefwLayerACCurrentDensity. */ +/* This routine is required and can be called only once after each */ +/* lefwLayerACCurrentDensity. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerACFrequency (int numFrequency, double* frequency); + +/* This routine must be called after lefwLayerACCurrentDensity. */ +/* This routine is optional and can be called only once after each */ +/* lefwLayerACCurrentDensity. */ +/* This routine can only be called in Layer Routing */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerACWidth (int numWidths, double* widths); + +/* This routine must be called after lefwLayerACCurrentDensity. */ +/* This routine is optional and can be called only once after each */ +/* lefwLayerACCurrentDensity. */ +/* This routine can only be called in Layer */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerACCutarea (int numCutareas, double* cutareas); + +/* This routine must be called after lefwLayerACCurrentDensity. */ +/* This routine is required and can be called only once after each */ +/* lefwLayerACCurrentDensity. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerACTableEntries (int numEntries, double* entries); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called multiple times. */ +/* if the value for the variable value is not 0, one of the following */ +/* routines have to be called: lefwLayerDCWidth, lefwLayerDCCutarea, or */ +/* lefwLayerDCTableEntries */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerDCCurrentDensity (const char* type, double value); + +/* This routine must be called after lefwLayerDCCurrentDensity. */ +/* This routine is optional and can be called only once after each */ +/* lefwLayerDCCurrentDensity. */ +/* This routine can only be called in Layer Routing */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerDCWidth (int numWidths, double* widths); + +/* This routine must be called after lefwLayerDCCurrentDensity. */ +/* This routine is optional and can be called only once after each */ +/* lefwLayerDCCurrentDensity. */ +/* This routine can only be called in Layer */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerDCCutarea (int numCutareas, double* cutareas); + +/* This routine must be called after lefwLayerDCCurrentDensity. */ +/* This routine is required and can be called only once after each */ +/* lefwLayerDCCurrentDensity. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerDCTableEntries (int numEntries, double* entries); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional. The oxide value, can be either OXIDE1, OXIDE2, */ +/* OXIDE3, or OXIDE4. Each can only be called once within a layer. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaModel (const char* oxide); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaAreaRatio (double value); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* Either this routine or lefwLayerAntennaDiffAreaRatioPwl can be called, but */ +/* not both */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaDiffAreaRatio (double value); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* Either this routine or lefwLayerAntennaDiffAreaRatio can be called, but */ +/* not both */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaDiffAreaRatioPwl (int numPwls, double* diffusions, double* ratios); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaCumAreaRatio (double value); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* Either this routine or lefwLayerAntennaCumDiffAreaRatioPwl can be called, */ +/* but not both */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaCumDiffAreaRatio (double value); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* Either this routine or lefwLayerAntennaCumDiffAreaRatio can be called, but */ +/* not both */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaCumDiffAreaRatioPwl (int numPwls, double* diffusions, double* ratios); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* The option DIFFUSEONLY is a 5.4 syntax. */ +/* If DIFFUSEONLY, lefwLayerRoutingAntennaLength is not allowed. */ +/* This function is similar to lefwLayerRoutingAntennaArea */ +/* diffUseOnly has to be DIFFUSEONLY. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaAreaFactor (double value, const char* diffUseOnly); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING. */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaSideAreaRatio (double value); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING. */ +/* Either this routine or lefwLayerAntennaDiffSideAreaRatioPwl can be */ +/* called, but not both */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaDiffSideAreaRatio (double value); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* Either this routine or lefwLayerAntennaDiffSideAreaRatio can be called, */ +/* but not both */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaDiffSideAreaRatioPwl (int numPwls, double* diffusions, double* ratios); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING. */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaCumSideAreaRatio (double value); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING. */ +/* Either this routine or lefwLayerAntennaCumDiffSideAreaRatioPwl can be */ +/* called, but not both */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaCumDiffSideAreaRatio (double value); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* Either this routine or lefwLayerAntennaCumDiffSideAreaRatio can be called, */ +/* but not both */ +/* This is a 5.4 syntax. */ +/* Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaCumDiffSideAreaRatioPwl (int numPwls, double* diffusions, double* ratios); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING. */ +/* The option DIFFUSEONLY is a 5.4 syntax. */ +/* diffUseOnly has to be DIFFUSEONLY. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaSideAreaFactor (double value, const char* diffUseOnly); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* This is a 5.7 routine. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaCumRoutingPlusCut (); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* This is a 5.7 routine. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaGatePlusDiff (double plusDiffFactor); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* This is a 5.7 routine. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaAreaMinusDiff (double minusDiffFactor); + +/* This routine must be called after lefwStartLayerRouting or lefwStartLayer. */ +/* This routine is optional and can be called only once within a layer */ +/* after each lefwLayerAntennaModel function. */ +/* This routine is valid only if the layer type is either ROUTING or CUT. */ +/* This is a 5.7 routine. */ +/* Returns 0 if successful. */ +EXTERN int lefwLayerAntennaAreaDiffReducePwl (int numPwls, double* diffAreas, double* metalDiffFactors); + +/* This routine must be called only once after lefwStartLayer. */ +/* The option MINIMUMDENSITY is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMinimumDensity (double minDensity); + +/* This routine must be called only once after lefwStartLayer. */ +/* The option MAXIMUMDENSITY is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMaximumDensity (double maxDensity); + +/* This routine must be called only once after lefwStartLayer. */ +/* The option DENSITYCHECKWINDOW is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwDensityCheckWindow (double checkWindowLength, double checkWindowWidth); + +/* This routine must be called only once after lefwStartLayer. */ +/* The option DENSITYCHECKSTEP is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwDensityCheckStep (double checkStepValue); + +/* This routine must be called only once after lefwStartLayer. */ +/* The option FILLACTIVESPACING is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwFillActiveSpacing (double fillToActiveSpacing); + +/* This routine must be called only once after all the layers. */ +/* This routine is optional. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if succesful. */ +EXTERN int lefwMaxviastack (int value, const char* bottomLayer, const char* topLayer); + +/* This routine is called after lefwInit. */ +/* This section of routines is optional. */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +/* The routine starts propertydefinitions section. */ +EXTERN int lefwStartPropDef (); + +/* This routine must be called after lefwStartPropDef. */ +/* This routine can be called multiple times. */ +/* It adds integer property definition to the statement. */ +/* Returns 0 if successful. */ +/* The objType can be LIBRARY or VIA or MACRO or PIN. */ + /* NONDEFAULTRULE | MACRO | PIN */ +EXTERN int lefwIntPropDef (const char* objType, const char* propName, double leftRange, double rightRange, int propValue); + +/* This routine must be called after lefwStartPropDef. */ +/* This routine can be called multiple times. */ +/* It adds real property definition to the statement. */ +/* Returns 0 if successful. */ +/* The objType can be LIBRARY or VIA or MACRO or PIN. */ + /* NONDEFAULTRULE | MACRO | PIN */ +EXTERN int lefwRealPropDef (const char* objType, const char* propName, double leftRange, double rightRange, double propValue); + +/* This routine must be called after lefwStartPropDef. */ +/* This routine can be called multiple times. */ +/* It adds string property definition to the statement. */ +/* Returns 0 if successful. */ +/* The objType can be LIBRARY or VIA or MACRO or PIN. */ + /* NONDEFAULTRULE | MACRO | PIN */ +EXTERN int lefwStringPropDef (const char* objType, const char* propName, double leftRange, double rightRange, const char* propValue); + +/* This routine must be called after the lefwStartPropDef call (if any). */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndPropDef (); + +/* This routine is called after lefwInit. */ +/* This routine must be called only once. */ +/* Returns 0 if successful. */ +/* The routine starts the via section. All of the vias must follow. */ +EXTERN int lefwStartVia (const char* viaName, const char* isDefault); + +/* This routine is optional, it call only be called after lefwStartVia. */ +/* It can only be called once. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaTopofstackonly (); + +/* This routine is optional, it call only be called after lefwStartVia. */ +/* It can only be called once. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaForeign (const char* foreignName, double xl, double yl, int orient); + +/* This routine is optional, it call only be called after lefwStartVia. */ +/* It can only be called once. */ +/* Returns 0 if successful. */ +/* This routine is the same as lefwViaForeign, except orient is a char* */ +EXTERN int lefwViaForeignStr (const char* foreignName, double xl, double yl, const char* orient); + +/* This routine is optional, it call only be called after lefwStartVia. */ +/* Either this routine or lefwViaViarule can be called within a via. */ +/* It can only be called once in a via. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaResistance (double resistance); + +/* This routine must be called after lefwStartVia. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaLayer (const char* layerName); + +/* This routine can call only after lefwViaLayer. */ +/* Either this routine or lefwViaLayerPolygon can be called within a layer */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* mask is 5.8 syntax */ +EXTERN int lefwViaLayerRect (double x1l, double y1l, double x2l, double y2l, int mask); + +/* This routine can call only after lefwViaLayer. */ +/* Either this routine or lefwViaLayerRect can be called within a layer */ +/* It can be called multiple times. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +/* mask is 5.8 syntax */ +EXTERN int lefwViaLayerPolygon (int num_polys, double* xl, double* yl, int mask); + +/* This routine can call only after lefwStartVia. */ +/* Either this routine or lefwViaResistance can be called within a via. */ +/* It can only be called once in a via. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaViarule (const char* viaRuleName, double xCutSize, double yCutSize, const char* botMetalLayer, const char* cutLayer, const char* topMetalLayer, double xCutSpacing, double yCutSpacing, double xBotEnc, double yBotEnc, double xTopEnc, double yTopEnc); + +/* This routine can call only after lefwViaViarule. */ +/* It can only be called once. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaViaruleRowCol (int numCutRows, int numCutCols); + +/* This routine can call only after lefwViaViarule. */ +/* It can only be called once. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaViaruleOrigin (double xOffset, double yOffset); + +/* This routine can call only after lefwViaViarule. */ +/* It can only be called once. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaViaruleOffset (double xBotOffset, double yBotOffset, double xTopOffset, double yTopOffset); + +/* This routine can call only after lefwViaViarule. */ +/* It can only be called once. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwViaViarulePattern (const char* cutPattern); + +/* This routine is called after lefwVia. */ +/* This routine is optional, it adds string property to the statement. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwStringProperty (const char* propName, const char* propValue); + +/* This routine is called after lefwVia. */ +/* This routine is optional, it adds real property to the statement. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwRealProperty (const char* propName, double propValue); + +/* This routine is called after lefwVia. */ +/* This routine is optional, it adds int property to the statement. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwIntProperty (const char* propName, int propValue); + +/* This routine must be called after the lefwStartVia call (if any). */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndVia (const char* viaName); + +/* This routine is called after lefwInit. */ +/* This routine must be called as a set with lefwViaRuleLayer, lefwViaRuleVia */ +/* and lefwEndViaRule */ +/* multiple times. */ +/* Returns 0 if successful. */ +/* The routine starts the via rule section. The via rule data and its propert */ +/* must follow */ +EXTERN int lefwStartViaRule (const char* viaRuleName); + +/* This routine is called after lefwStartViaRule. */ +/* This routine has to be called 2 times exact. */ +/* Returns 0 if successful. */ +/* The direction1 or direction2 can be HORIZONTAL or VERTICAL. */ +EXTERN int lefwViaRuleLayer (const char* layerName, const char* direction, double minWidth, double maxWidth, double overhang, double metalOverhang); + +/* This routine is called after lefwViaRuleLayer is called twice. */ +/* This routine is required in a viarule and can be called more than once. */ +/* Returns 0 if successful. */ +/* The direction1 or direction2 can be HORIZONTAL or VERTICAL. */ +EXTERN int lefwViaRuleVia (const char* viaName); + +/* This routine must be called after the lefwStartViaRule call (if any). */ +/* The routine can be called only once per lefwStartViaRule. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndViaRule (const char* viaRuleName); + +/* This routine is called after lefwInit. */ +/* This routine must be called as a set with lefwViaRuleGenLayer, */ +/* lefwViaRuleGenLayer3, and lefwEndViaRuleGen multiple times. */ +/* Returns 0 if successful. */ +/* The routine starts the via rule section. The via rule data and its propert */ +/* must follow */ +EXTERN int lefwStartViaRuleGen (const char* viaRuleName); + +/* This routine is called after lefwSartViaRuleGen. */ +/* This routine is optional */ +/* Returns 0 if successful */ +EXTERN int lefwViaRuleGenDefault (); + +/* This routine is called after lefwStartViaRuleGen. */ +/* This routine has to be called 2 times exact. */ +/* Returns 0 if successful. */ +/* Either this routine or lefwViaRuleGenLayerEnclosure, not both. */ +/* The direction1 or direction2 can be HORIZONTAL or VERTICAL. */ +EXTERN int lefwViaRuleGenLayer (const char* layerName, const char* direction, double minWidth, double maxWidth, double overhang, double metalOverhang); + +/* This routine is called after lefwStartViaRuleGen. */ +/* This routine has to be called 2 times exact. */ +/* This is 5.5 syntax */ +/* Returns 0 if successful. */ +/* Either this routine or lefwViaRuleGenLayer, not both. */ +EXTERN int lefwViaRuleGenLayerEnclosure (const char* layerName, double overhang1, double overhang2, double minWidth, double maxWidth); + +/* This routine is called after lefwViaRuleLayerGen is called twice. */ +/* This routine is optional in a viarule generate and can be called once. */ +/* Returns 0 if successful. */ +/* The direction1 or direction2 can be HORIZONTAL or VERTICAL. */ +EXTERN int lefwViaRuleGenLayer3 (const char* layerName, double xl, double yl, double xh, double yh, double xSpacing, double ySpacing, double resistance); + +/* This routine must be called after the lefwStartViaRuleGen call (if any). */ +/* The routine can be called only once per lefwStartViaRuleGen. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndViaRuleGen (const char* viaRuleName); + +/* This routine is called after lefwInit. */ +/* This routine must be called only once. */ +/* Returns 0 if successful. */ +/* The routine starts the nonDefaultRule section. The nonDefaultRule layers */ +/* must follow */ +EXTERN int lefwStartNonDefaultRule (const char* ruleName); + +/* This routine is called after lefwInit. */ +/* This routine must be called after lefwStartNonDefaultRule */ +/* This routine can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwNonDefaultRuleLayer (const char* routingLayerName, double width, double minSpacing, double wireExtension, double resistance, double capacitance, double edgeCap); + +/* This routine is called after lefwInit. */ +/* This routine must be called after lefwStartNonDefaultRule */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwNonDefaultRuleHardspacing (); + +/* This routine is called after lefwStartNonDefaultRule. */ +/* This routine must be called only once for each via section. */ +/* Returns 0 if successful. */ +/* The routine starts the nondefaultrule via section. */ +/* Call the following via functions for the rest of NONDEFAULTRULE VIA: */ +/* lefwViaTopofstackonly */ +/* lefwViaForeign */ +/* lefwViaForeignStr */ +/* lefwViaResistance */ +/* lefwViaLayer */ +/* lefwViaLayerRect */ +/* lefwNonDefaultRuleEndVia */ +EXTERN int lefwNonDefaultRuleStartVia (const char* viaName, const char* isDefault); + +/* This routine must be called after the lefwNonDefaultRuleStartVia call. */ +/* The routine can be called only once per via section. */ +/* Returns 0 if successful. */ +EXTERN int lefwNonDefaultRuleEndVia (const char* viaName); + +/* This routine is called after lefwStartNonDefaultRule. */ +/* This routine can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwNonDefaultRuleUseVia (const char* viaName); + +/* This routine is called after lefwStartNonDefaultRule. */ +/* This routine can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwNonDefaultRuleUseViaRule (const char* viaRuleName); + +/* This routine is called after lefwStartNonDefaultRule. */ +/* This routine can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwNonDefaultRuleMinCuts (const char* layerName, int numCuts); + +/* This routine must be called after the lefwStartNonDefaultRule call (if any */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndNonDefaultRule (const char* ruleName); + +/* This routine is called after lefwInit. */ +/* This section of routines is optional. */ +/* This routine can be called only once. */ +/* Returns 0 if successful. */ +/* It starts the spacing section. */ +EXTERN int lefwStartSpacing (); + +/* This routine must be called after lefwStartSpacing. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* The stack has to be STACK. */ +EXTERN int lefwSpacing (const char* layerName1, const char* layerName2, double minSpace, const char* stack); + +/* This routine must be called after the lefwStartSpacing call (if any). */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndSpacing (); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwUniversalNoiseMargin (double high, double low); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwEdgeRateThreshold1 (double num); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwEdgeRateThreshold2 (double num); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwEdgeRateScaleFactor (double num); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +/* This routine starts the noisetable section. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwStartNoiseTable (int num); + +/* This routine is called after lefwStartNoiseTable or lefwStartCorrectTable. */ +/* This routine is optional and it can be called multiple times */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwEdgeRate (double num); + +/* This routine is called after lefwEdgeRate. */ +/* This routine is optional and it can be called only once inside lefwEdgeRat */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwOutputResistance (int numResists, double* resistance); + +/* This routine is called after lefwOutputResistance. */ +/* This routine is optional and it can be called multiple times inside */ +/* lefwOutputResistance */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwVictims (int length, int numNoises, double* noises); + +/* This routine must be called after the lefwStartNoiseTable call (if any). */ +/* The routine can be called only once per section. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwEndNoiseTable (); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +/* This routine starts the correctTable section. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwStartCorrectTable (int num); + +/* This routine must be called after the lefwStartCorrectTable call (if any). */ +/* The routine can be called only once per section. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwEndCorrectTable (); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwMinFeature (double x, double y); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +/* extern int lefwDielectric (float dielectric); */ + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +/* This routine starts the irdrop section. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwStartIrdrop (); + +/* This routine is must be called after lefwStartIrdrop. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* The currentsNvolts is a list of current and volts. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwIrdropTable (const char* tableName, const char* currentsNvolts); + +/* This routine must be called after the lefwStartIrdrop call (if any). */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwEndIrdrop (); + +/* This routine is must be called after lefwInit. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* The classType can be PAD or CORE. */ +/* The symmetry can be a list of X or Y or R90. */ +EXTERN int lefwSite (const char* siteName, const char* classType, const char* symmetry, double width, double height); + +/* This routine is must be called after lefwSite. */ +/* It can be called multiple times. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwSiteRowPattern (const char* siteName, int orient); + +/* This routine is must be called after lefwSite. */ +/* It can be called multiple times. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +/* This routine is the same as lefwSiteRowPattern, except orient is a char* */ +EXTERN int lefwSiteRowPatternStr (const char* siteName, const char * orient); + +/* This routine must be called after the lefwSite call (if any). */ +/* The routine can be called only once after lefwSite. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndSite (const char* siteName); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called multiple times. */ +/* Returns 0 if successful. */ +/* This routine starts the array section. */ +EXTERN int lefwStartArray (const char* arrayName); + +/* This routine is called after lefwStartArray. */ +/* Either this routine, lefwArrayCanplace, lefwArrayCannotoccupy, */ +/* lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. */ +/* It can be call multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwArraySite (const char* name, double origX, double origY, int orient, double numX, double numY, double spaceX, double spaceY); + +/* This routine is called after lefwStartArray. */ +/* Either this routine, lefwArrayCanplace, lefwArrayCannotoccupy, */ +/* lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. */ +/* It can be call multiple times. */ +/* Returns 0 if successful. */ +/* This routine is the same as lefwArraySite, except orient is a char* */ +EXTERN int lefwArraySiteStr (const char* name, double origX, double origY, const char * orient, double numX, double numY, double spaceX, double spaceY); + +/* This routine is called after lefwStartArray. */ +/* Either this routine, lefwArraySite, lefwArrayCannotoccupy, */ +/* lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. */ +/* It can be call multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwArrayCanplace (const char* name, double origX, double origY, int orient, double numX, double numY, double spaceX, double spaceY); + +/* This routine is called after lefwStartArray. */ +/* Either this routine, lefwArraySite, lefwArrayCannotoccupy, */ +/* lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. */ +/* It can be call multiple times. */ +/* Returns 0 if successful. */ +/* This routine is the same as lefwArrayCanplace, except orient is a char* */ +EXTERN int lefwArrayCanplaceStr (const char* name, double origX, double origY, const char * orient, double numX, double numY, double spaceX, double spaceY); + +/* This routine is called after lefwStartArray. */ +/* Either this routine, lefwArraySite, lefwArrayCanplace, */ +/* lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. */ +/* It can be call multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwArrayCannotoccupy (const char* name, double origX, double origY, int orient, double numX, double numY, double spaceX, double spaceY); + +/* This routine is called after lefwStartArray. */ +/* Either this routine, lefwArraySite, lefwArrayCanplace, */ +/* lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. */ +/* It can be call multiple times. */ +/* Returns 0 if successful. */ +/* This routine is the same as lefwArrayTracks, except orient is a char* */ +EXTERN int lefwArrayCannotoccupyStr (const char* name, double origX, double origY, const char * orient, double numX, double numY, double spaceX, double spaceY); + +/* This routine is called after lefwStartArray. */ +/* Either this routine, lefwArraySite, lefwArrayCanplace, lefwArrayCannotoccu */ +/* or lefwStartArrayFloorplan must be called at least once. */ +/* It can be call multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwArrayTracks (const char* xy, double start, int numTracks, double space, const char* layers); + +/* This routine is called after lefwStartArray. */ +/* Either this routine, lefwArraySite, lefwArrayCanplace, lefwArrayCannotoccu */ +/* or lefwArrayTracks must be called at least once. */ +/* It can be call multiple times. */ +/* Returns 0 if successful. */ +/* The routine starts the array floorplan section */ +EXTERN int lefwStartArrayFloorplan (const char* name); + +/* This routine must be called after lefwStartArrayFloorplan. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* The site can be CANPLACE or CANNOTOCCUPY */ +EXTERN int lefwArrayFloorplan (const char* site, const char* name, double origX, double origY, int orient, int numX, int numY, double spaceX, double spaceY); + +/* This routine must be called after lefwStartArrayFloorplan. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* The site can be CANPLACE or CANNOTOCCUPY */ +/* This routine is the same as lefwArrayFloorplan, except orient is a char* */ +EXTERN int lefwArrayFloorplanStr (const char* site, const char* name, double origX, double origY, const char * orient, int numX, int numY, double spaceX, double spaceY); + +/* This routine must be called after the lefwStartArrayFloorplan call (if any */ +/* The routine can be called only once per section. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndArrayFloorplan (const char* name); + +/* This routine is called after lefwStartArray. */ +/* This routine is optional. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* The xy can be X or Y. */ +EXTERN int lefwArrayGcellgrid (const char* xy, double startXY, int colRows, double spaceXY); + +/* This routine is called after lefwStartArray. */ +/* This section of routines is optional and can be call only once. */ +/* Returns 0 if successful. */ +/* The routine starts the array defaultcap section */ +EXTERN int lefwStartArrayDefaultCap (int size); + +/* This routine must be called after lefwStartArrayDefaultCap. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +EXTERN int lefwArrayDefaultCap (double numPins, double cap); + +/* This routine must be called after the lefwStartArrayDefaultCap call (if an */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndArrayDefaultCap (); + +/* This routine must be called after the lefwStartArray call (if any). */ +/* The routine can be called only once per section. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndArray (const char* arrayName); + +/* This routine is must be called after lefwInit. */ +/* This routine can be called multiple times. */ +/* Returns 0 if successful. */ +/* This routine starts the macro section. */ +EXTERN int lefwStartMacro (const char* macroName); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called only once per macro section. */ +/* Returns 0 if successful. */ +/* The value1 can be COVER, RING, BLOCK, PAD, CORE, or ENCAP. */ +/* The value2 can be BUMP if value1 is COVER, */ +/* or BLACKBOX, or SOFT if value1 is BLOCK, */ +/* or INPUT, OUTPUT, INOUT, POWER, or SPACER if value1 is PAD, */ +/* or FEEDTHRU, TIEHIGH, TIELOW, SPACER, ANTENNACELL, or WELLTAP */ +/* if value1 is CORE, */ +/* or PRE, POST, TOPLEFT, TOPRIGHT, BOOTOMLEFT, or BOTTOMRIGHT if value1 is */ +/* ENCAP. */ +EXTERN int lefwMacroClass (const char* value1, const char* value2); + +/* This routine is must be called after lefwInit. */ +/* This routine can be called multiple times. */ +/* Returns 0 if successful. */ +/* This is a 5.8 syntax. */ +EXTERN int lefwMacroFixedMask (); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called only once per macro section. */ +/* Returns 0 if successful. */ +/* The value1 can be USER, GENERATE, or BLOCK. */ +EXTERN int lefwMacroSource (const char* value1); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called multiple times per macro sectio */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroForeign (const char* name, double xl, double yl, int orient); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called multiple times per macro sectio */ +/* Returns 0 if successful. */ +/* This routine is the same as lefwMacroForeign, except orient is a char* */ +EXTERN int lefwMacroForeignStr (const char* name, double xl, double yl, const char * orient); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroOrigin (double xl, double yl); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroEEQ (const char* macroName); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroLEQ (const char* macroName); + +/* This routine is called after lefwStartMacro. */ +/* This routine must be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroSize (double width, double height); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called only once per macro section. */ +/* Returns 0 if successful. */ +/* The symmetry can be a list of X, Y, or R90 */ +EXTERN int lefwMacroSymmetry (const char* symmetry); + +/* This routine is called after lefwStartMacro. */ +/* This routine must be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroSite (const char* siteName); + +/* This routine is called after lefwStartMacro. */ +/* This routine must be called at least once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroSitePattern (const char* name, double origX, double origY, int orient, int numX, int numY, double spaceX, double spaceY); + +/* This routine is called after lefwStartMacro. */ +/* This routine must be called at least once per macro section. */ +/* Returns 0 if successful. */ +/* This routine is the same as lefwMacroSitePattern, except orient is a char* */ +EXTERN int lefwMacroSitePatternStr (const char* name, double origX, double origY, const char * orient, int numX, int numY, double spaceX, double spaceY); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called only once per macro section. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPower (double power); + +/* This routine must be called after the lefwStartMacro call (if any). */ +/* The routine can be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndMacro (const char* macroName); + +/* This routine is called after lefwStartMacro. */ +/* This routine is optional and can be called only once per macro section. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwStartMacroDensity (const char* layerName); + +/* This routine is called after lefwStartMacroDensity. */ +/* This routine can be called multiple times. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroDensityLayerRect (double x1, double y1, double x2, double y2, double densityValue); + +/* This routine must be called after the lefwStartMacroPin call (if any). */ +/* The routine can be called only once per macro section. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndMacroDensity (); + +/* This routine must be called after the lefwStartMacro call (if any). */ +/* The routine can be called multiple time. */ +/* Returns 0 if successful. */ +/* It starts the macro pin section within macro. */ +EXTERN int lefwStartMacroPin (const char* pinName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinTaperRule (const char* ruleName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinForeign (const char* name, double xl, double yl, int orient); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* Ths routine is the same as lefwMacroPinForeign, except orient is a char* */ +EXTERN int lefwMacroPinForeignStr (const char* name, double xl, double yl, const char* orient); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinLEQ (const char* pinName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* The direction can be INPUT, OUTPUT, OUTPUT TRISTATE, INOUT, or FEEDTHRU. */ +EXTERN int lefwMacroPinDirection (const char* direction); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* The use can be SIGNAL, ANALOG, POWER, GROUND, or CLOCK. */ +EXTERN int lefwMacroPinUse (const char* use); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* The namce can be ABUTMENT, RING, or FEEDTHRU. */ +EXTERN int lefwMacroPinShape (const char* name); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinMustjoin (const char* name); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinNetExpr (const char* name); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinSupplySensitivity (const char* pinName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* This is a 5.6 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinGroundSensitivity (const char* pinName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinOutputnoisemargin (int high, int low); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinOutputresistance (int high, int low); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinInputnoisemargin (int high, int low); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinPower (double power); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinLeakage (double leakage); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinCapacitance (double capacitance); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinResistance (double resistance); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinPulldownres (double resistance); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinTieoffr (double resistance); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinVHI (double voltage); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinVLO (double voltage); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinRisevoltagethreshold (double voltage); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinFallvoltagethreshold (double voltage); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinRisethresh (double capacitance); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinFallthresh (double capacitance); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinRisesatcur (double current); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinFallsatcur (double current); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* The name can be ACTIVE or RESISTIVE. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinCurrentsource (const char* name); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroPinIV_Tables (const char* lowName, const char* highName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called multiple times. */ +/* Either this routine or 5.4 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennasize (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called multiple times. */ +/* Either this routine or 5.4 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaMetalArea (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called multiple times. */ +/* Either this routine or 5.4 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaMetalLength (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called multiple times. */ +/* This is a 5.4 syntax. */ +/* Either this routine or 5.3 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaPartialMetalArea (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called multiple times. */ +/* This is a 5.4 syntax. */ +/* Either this routine or 5.3 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaPartialMetalSideArea (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called multiple times. */ +/* This is a 5.4 syntax. */ +/* Either this routine or 5.3 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaPartialCutArea (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called multiple times. */ +/* This is a 5.4 syntax. */ +/* Either this routine or 5.3 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaDiffArea (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* The oxide value, can be either OXIDE1, OXIDE2, OXIDE3, or OXIDE4. */ +/* This routine is optional. Each oxide value can be called only once */ +/* after the lefwStartMacroPin. */ +/* This is a 5.5 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaModel (const char* oxide); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called multiple times. */ +/* This is a 5.4 syntax. */ +/* Either this routine or 5.3 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaGateArea (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* This is a 5.4 syntax. */ +/* Either this routine or 5.3 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaMaxAreaCar (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* This is a 5.4 syntax. */ +/* Either this routine or 5.3 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaMaxSideAreaCar (double value, const char* layerName); + +/* This routine is called after lefwStartMacroPin. */ +/* This routine is optional and can be called only once. */ +/* This is a 5.4 syntax. */ +/* Either this routine or 5.3 Antenna syntax, cannot be both */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinAntennaMaxCutCar (double value, const char* layerName); + +/* This routine must be called after the lefwStartMacroPin call (if any). */ +/* The routine can be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndMacroPin (const char* pinName); + +/* This routine must be called after the lefwStartMacroPin call (if any). */ +/* The routine can be called multiple time. */ +/* Returns 0 if successful. */ +/* It starts the macro pin port section within macro pin. */ +/* The classType can be NONE or CORE. */ +EXTERN int lefwStartMacroPinPort (const char* classType); + +/* This routine is called after lefwStartMacroPinPort. */ +/* Either this routine or lefwMacroPinPortDesignRuleWidth must be called, */ +/* but can't be both. */ +/* Spacing is optional for minimum spacing. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinPortLayer (const char* layerName, double spacing); + +/* This routine is called after lefwStartMacroPinPort. */ +/* Either this routine or lefwMacroPinPortLayer must be called, but can't */ +/* be both. */ +/* width is optional for DesignRuleWidth */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinPortDesignRuleWidth (const char* layerName, double width); + +/* This routine is called after lefwMacroPinPortLayer. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinPortLayerWidth (double width); + +/* This routine is called after lefwStartMacroPinPortLayer. */ +/* Either this routine, lefwStartMacroPinPortLayerRect, or */ +/* lefwStartMacroPinPortLayerPolygon must be called. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinPortLayerPath (int num_paths, double* xl, double* yl, int numX, int numY, double spaceX, double spaceY, int mask); + +/* This routine is called after lefwStartMacroPinPortLayer. */ +/* Either this routine, lefwStartMacroPinPortLayerPath, or */ +/* lefwStartMacroPinPortLayerPolygon must be called. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinPortLayerRect (double xl1, double yl1, double xl2, double yl2, int numX, int numY, double spaceX, double spaceY, int mask); + +/* This routine is called after lefwStartMacroPinPortLayer. */ +/* Either this routine, lefwStartMacroPinPortLayerPath, or */ +/* lefwStartMacroPinPortLayerRect must be called. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinPortLayerPolygon (int num_polys, double* xl, double* yl, int numX, int numY, double spaceX, double spaceY, int mask); + +/* This routine is called after lefwStartMacroPinPort. */ +/* Either this routine or lefwStartMacroPinPortLayer must be called. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroPinPortVia (double xl, double yl, const char* viaName, int numX, int numY, double spaceX, double spaceY, int mask); + +/* This routine must be called after the lefwStartMacroPinPort call (if any). */ +/* The routine can be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndMacroPinPort (); + +/* This routine is called after the lefwStartMacro call (if any). */ +/* The routine is optional and can be called multiple times. */ +/* Returns 0 if successful. */ +/* It starts the macro obs section within macro. */ +EXTERN int lefwStartMacroObs (); + +/* This routine is called after lefwStartMacroObs. */ +/* Either this routine, lefwMacroObsDesignRuleWidth, lefwMacroObsVia or */ +/* lefwMacroExceptPGNet must be called. */ +/* Spacing is optional for minimum spacing. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroObsLayer (const char* layerName, double spacing); + +/* This routine is called after lefwStartMacroObs. */ +/* Either this routine, lefwMacroObsLayer, lefwMacroObsVia or */ +/* lefwMacroExceptPGNet must be called. */ +/* Spacing is optional for minimum spacing. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroObsDesignRuleWidth (const char* layerName, double width); + +/* This routine is called after lefwStartMacroObs. */ +/* Either this routine, lefwMacroObsLayer, lefwMacroObsVia or */ +/* lefwMacroObsDesignRuleWidth must be called. */ +/* Spacing is optional for minimum spacing. */ +/* This is a 5.4 syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroExceptPGNet (const char* layerName); + +/* This routine is called after lefwStartMacroObs. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroObsLayerWidth (double width); + +/* This routine is called after lefwStartMacroObsLayer. */ +/* Either this routine, lefwMacroObsLayerRect, or */ +/* lefwStartMacroObsLayerPolygon must be called. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroObsLayerPath (int num_paths, double* xl, double* yl, int numX, int numY, double spaceX, double spaceY, int mask); + +/* This routine is called after lefwStartMacroObsLayer. */ +/* Either this routine, lefwMacroObsLayerPath, or */ +/* lefwStartMacroObsLayerPolygon must be called. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroObsLayerRect (double xl1, double yl1, double xl2, double yl2, int numX, int numY, double spaceX, double spaceY, int mask); + +/* This routine is called after lefwStartMacroObsLayer. */ +/* Either this routine, lefwMacroObsLayerPath, or */ +/* lefwStartMacroObsLayerPath must be called. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroObsLayerPolygon (int num_polys, double* xl, double* yl, int numX, int numY, double spaceX, double spaceY, int mask); + +/* This routine is called after lefwStartMacroObs. */ +/* Either this routine or lefwMacroObsLayer|lefwMacroObsDesignRuleWidth */ +/* must be called. */ +/* Returns 0 if successful. */ +EXTERN int lefwMacroObsVia (double xl, double yl, const char* viaName, int numX, int numY, double spaceX, double spaceY, int mask); + +/* This routine must be called after the lefwStartMacroObs call (if any). */ +/* The routine can be called only once per macro section. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndMacroObs (); + +/* This routine is called after the lefwStartMacro call (if any). */ +/* The routine is optional and can be called only once. */ +/* Returns 0 if successful. */ +/* It starts the macro timing section within macro. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwStartMacroTiming (); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This routine is for {FROMPIN pinName...; [TOPIN pinName...;] | FROMPIN */ +/* pinName...;} */ +/* This routince can be called multiple times. */ +/* The num_frPinNames contains the number of object in the array fromPins. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingPin (const char* fromPin, const char* toPin); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* The riseFall can be RISE or FALL. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingIntrinsic (const char* riseFall, double min, double max, double slewT1, double slewT1Min, double slewT1Max, double slewT2, double slewT2Min, double slewT2Max, double slewT3, double varMin, double varMax); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingRisers (double min, double max); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingFallrs (double min, double max); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingRisecs (double min, double max); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingFallcs (double min, double max); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingRisesatt1 (double min, double max); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingFallsatt1 (double min, double max); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingRiset0 (double min, double max); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingFallt0 (double min, double max); + +/* This routine must be called after the lefwStartMacroTiming. */ +/* It can be called multiple times. */ +/* Returns 0 if successful. */ +/* The unateness can be INVERT, NONINVERT or NONUNATE. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwMacroTimingUnateness (const char* unateness); + +/* This routine must be called after the lefwStartMacroTiming call (if any). */ +/* The routine can be called only once. */ +/* Returns 0 if successful. */ +/* This api is obsolete in 5.4. */ +EXTERN int lefwEndMacroTiming (); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ + /* OUTPUTPINANTENNASIZE | */ + /* INOUTPINANTENNASIZE */ +EXTERN int lefwAntenna (const char* type, double value); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwStartBeginext (const char* name); + +/* This routine is called after lefwBeginext. */ +/* This routine is optional, it can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwBeginextCreator (const char* creatorName); + +/* This routine is called after lefwBeginext. */ +/* This routine is optional, it can be called only once. */ +/* It gets the current system time and date. */ +/* Returns 0 if successful. */ +EXTERN int lefwBeginextDate (); + +/* This routine is called after lefwBeginext. */ +/* This routine is optional, it can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwBeginextRevision (int vers1, int vers2); + +/* This routine is called after lefwBeginext. */ +/* This routine is optional, it can be called many times. */ +/* It allows user to customize their own syntax. */ +/* Returns 0 if successful. */ +EXTERN int lefwBeginextSyntax (const char* title, const char* string); + +/* This routine is called after lefwInit. */ +/* This routine is optional and it can be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwEndBeginext (); + +/* General routines that can be called anytime after the Init is called. */ +EXTERN int lefwCurrentLineNumber (); + +/* This routine must call last, it ends the Lef library. */ +/* It must be called only once. */ +/* Returns 0 if successful. */ +EXTERN int lefwEnd (); + +/* This routine will print the error message. */ +EXTERN void lefwPrintError (int status); + +/* This routine will allow user to write their own comemnt. It will */ +/* automactically add a # infront of the line. */ +EXTERN void lefwAddComment (const char* comment); + +/* This routine will indent 3 blank spaces */ +EXTERN void lefwAddIndent (); + +#endif diff --git a/lefdef/src/lef/clef/lefwWriterCalls.h b/lefdef/src/lef/clef/lefwWriterCalls.h new file mode 100644 index 00000000..b6dc2d46 --- /dev/null +++ b/lefdef/src/lef/clef/lefwWriterCalls.h @@ -0,0 +1,200 @@ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Copyright 2012 - 2013, Cadence Design Systems */ +/* */ +/* This file is part of the Cadence LEF/DEF Open Source */ +/* Distribution, Product Version 5.8. */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* For updates, support, or to become part of the LEF/DEF Community, */ +/* check www.openeda.org for details. */ +/* */ +/* $Author: dell $ */ +/* $Revision: #1 $ */ +/* $Date: 2017/06/06 $ */ +/* $State: $ */ +/* ************************************************************************** */ +/* ************************************************************************** */ + + +#ifndef CLEFWWRITERCALLS_H +#define CLEFWWRITERCALLS_H + +#include +#include "lefiTypedefs.h" + +/* + * The main writer function. + * The file should already be opened. This requirement allows + * the writer to be used with stdin or a pipe. The file name + * is only used for error messages. The includeSearchPath is + * a colon-delimited list of directories in which to find + * include files. + */ +EXTERN int lefwWrite (FILE * file, const char * fileName, lefiUserData userData); + +/* + * Set all of the callbacks that have not yet been set to a function + * that will add up how many times a given lef data type was ignored + * (ie no callback was done). The statistics can later be printed out. + */ +EXTERN void lefwSetRegisterUnusedCallbacks (); +EXTERN void lefwPrintUnusedCallbacks (FILE* f); + +/* + * Set/get the client-provided user data. lefi doesn't look at + * this data at all, it simply passes the opaque lefiUserData pointer + * back to the application with each callback. The client can + * change the data at any time, and it will take effect on the + * next callback. The lefi writer and writer maintain separate + * user data pointers. + */ +EXTERN void lefwSetUserData (lefiUserData p0); +EXTERN lefiUserData lefwGetUserData (); + +/* + * An enum describing all of the types of writer callbacks. + */ +typedef enum { + lefwUnspecifiedCbkType = 0, + lefwVersionCbkType = 1, + lefwCaseSensitiveCbkType = 2, + lefwNoWireExtensionCbkType = 3, + lefwBusBitCharsCbkType = 4, + lefwDividerCharCbkType = 5, + lefwManufacturingGridCbkType = 6, + lefwUseMinSpacingCbkType = 7, + lefwClearanceMeasureCbkType = 8, + lefwUnitsCbkType = 9, + lefwAntennaInputGateAreaCbkType = 10, + lefwAntennaInOutDiffAreaCbkType = 11, + lefwAntennaOutputDiffAreaCbkType = 12, + lefwPropDefCbkType = 13, + lefwLayerCbkType = 14, + lefwViaCbkType = 15, + lefwViaRuleCbkType = 16, + lefwNonDefaultCbkType = 17, + lefwCrossTalkCbkType = 18, + lefwNoiseTableCbkType = 19, + lefwCorrectionTableCbkType = 20, + lefwSpacingCbkType = 21, + lefwMinFeatureCbkType = 22, + lefwDielectricCbkType = 23, + lefwIRDropCbkType = 24, + lefwSiteCbkType = 25, + lefwArrayCbkType = 26, + lefwMacroCbkType = 27, + lefwAntennaCbkType = 28, + lefwExtCbkType = 29, + lefwEndLibCbkType = 30 + + /* NEW CALLBACKS - each callback has its own type. For each callback + * that you add, you must add an item to this enum. */ + +} lefwCallbackType_e; + +/* Declarations of function signatures for each type of callback. + * These declarations are type-safe when compiling with ANSI C + * or C++; you will only be able to register a function pointer + * with the correct signature for a given type of callback. + * + * Each callback function is expected to return 0 if successful. + * A non-zero return code will cause the writer to abort. + * + * The lefwDesignStart and lefwDesignEnd callback is only called once. + * Other callbacks may be called multiple times, each time with a different + * set of data. + * + * For each callback, the Lef API will make the callback to the + * function supplied by the client, which should either make a copy + * of the Lef object, or store the data in the client's own data structures. + * The Lef API will delete or reuse each object after making the callback, + * so the client should not keep a pointer to it. + * + * All callbacks pass the user data pointer provided in lefwRead() + * or lefwSetUserData() back to the client; this can be used by the + * client to obtain access to the rest of the client's data structures. + * + * The user data pointer is obtained using lefwGetUserData() immediately + * prior to making each callback, so the client is free to change the + * user data on the fly if necessary. + * + * Callbacks with the same signature are passed a callback type + * parameter, which allows an application to write a single callback + * function, register that function for multiple callbacks, then + * switch based on the callback type to handle the appropriate type of + * data. + */ + +/* A declaration of the signature of all callbacks that return nothing. */ +typedef int (*lefwVoidCbkFnType) ( lefwCallbackType_e, lefiUserData ); + + /* NEW CALLBACK - If your callback returns a pointer to a new class then + * you must add a type function here. */ + +/* Functions to call to register a callback function. + */ +EXTERN void lefwSetVersionCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetCaseSensitiveCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetNoWireExtensionCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetBusBitCharsCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetDividerCharCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetManufacturingGridCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetUseMinSpacingCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetClearanceMeasureCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetUnitsCbk (lefwVoidCbkFnType p0); +EXTERN void lefwAntennaInputGateAreaCbk (lefwVoidCbkFnType p0); +EXTERN void lefwAntennaInOutDiffAreaCbk (lefwVoidCbkFnType p0); +EXTERN void lefwAntennaOutputDiffAreaCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetPropDefCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetLayerCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetViaCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetViaRuleCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetNonDefaultCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetCrossTalkCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetNoiseTableCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetCorrectionTableCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetSpacingCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetMinFeatureCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetDielectricCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetIRDropCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetSiteCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetArrayCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetMacroCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetAntennaCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetExtCbk (lefwVoidCbkFnType p0); +EXTERN void lefwSetEndLibCbk (lefwVoidCbkFnType p0); + +/* NEW CALLBACK - each callback must have a function to allow the user + * to set it. Add the function here. */ + +/* + * Set all of the callbacks that have not yet been set to the following + * function. This is especially useful if you want to check to see + * if you forgot anything. + */ +EXTERN void lefwSetUnusedCallbacks (lefwVoidCbkFnType func); + +/* Routine to set the message logging routine for errors */ +typedef void (*LEFI_LOG_FUNCTION)(const char*); +EXTERN void lefwSetLogFunction (LEFI_LOG_FUNCTION p0); + +/* Routine to set the message logging routine for warnings */ +typedef void (*LEFI_WARNING_LOG_FUNCTION)(const char*); +EXTERN void lefwSetWarningLogFunction (LEFI_WARNING_LOG_FUNCTION p0); + +#endif diff --git a/lefdef/src/lef/clef/xlefiArray.cpp b/lefdef/src/lef/clef/xlefiArray.cpp new file mode 100644 index 00000000..5f012ea6 --- /dev/null +++ b/lefdef/src/lef/clef/xlefiArray.cpp @@ -0,0 +1,143 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiArray.h" +#include "lefiArray.hpp" + +// Wrappers definitions. +int lefiArrayFloorPlan_numPatterns (const ::lefiArrayFloorPlan* obj) { + return ((LefDefParser::lefiArrayFloorPlan*)obj)->numPatterns(); +} + +const ::lefiSitePattern* lefiArrayFloorPlan_pattern (const ::lefiArrayFloorPlan* obj, int index) { + return (const ::lefiSitePattern*) ((LefDefParser::lefiArrayFloorPlan*)obj)->pattern(index); +} + +char* lefiArrayFloorPlan_typ (const ::lefiArrayFloorPlan* obj, int index) { + return ((LefDefParser::lefiArrayFloorPlan*)obj)->typ(index); +} + +const char* lefiArrayFloorPlan_name (const ::lefiArrayFloorPlan* obj) { + return ((const LefDefParser::lefiArrayFloorPlan*)obj)->name(); +} + +int lefiArray_numSitePattern (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->numSitePattern(); +} + +int lefiArray_numCanPlace (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->numCanPlace(); +} + +int lefiArray_numCannotOccupy (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->numCannotOccupy(); +} + +int lefiArray_numTrack (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->numTrack(); +} + +int lefiArray_numGcell (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->numGcell(); +} + +int lefiArray_hasDefaultCap (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->hasDefaultCap(); +} + +const char* lefiArray_name (const ::lefiArray* obj) { + return ((const LefDefParser::lefiArray*)obj)->name(); +} + +const ::lefiSitePattern* lefiArray_sitePattern (const ::lefiArray* obj, int index) { + return (const ::lefiSitePattern*) ((LefDefParser::lefiArray*)obj)->sitePattern(index); +} + +const ::lefiSitePattern* lefiArray_canPlace (const ::lefiArray* obj, int index) { + return (const ::lefiSitePattern*) ((LefDefParser::lefiArray*)obj)->canPlace(index); +} + +const ::lefiSitePattern* lefiArray_cannotOccupy (const ::lefiArray* obj, int index) { + return (const ::lefiSitePattern*) ((LefDefParser::lefiArray*)obj)->cannotOccupy(index); +} + +const ::lefiTrackPattern* lefiArray_track (const ::lefiArray* obj, int index) { + return (const ::lefiTrackPattern*) ((LefDefParser::lefiArray*)obj)->track(index); +} + +const ::lefiGcellPattern* lefiArray_gcell (const ::lefiArray* obj, int index) { + return (const ::lefiGcellPattern*) ((LefDefParser::lefiArray*)obj)->gcell(index); +} + +int lefiArray_tableSize (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->tableSize(); +} + +int lefiArray_numDefaultCaps (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->numDefaultCaps(); +} + +int lefiArray_defaultCapMinPins (const ::lefiArray* obj, int index) { + return ((LefDefParser::lefiArray*)obj)->defaultCapMinPins(index); +} + +double lefiArray_defaultCap (const ::lefiArray* obj, int index) { + return ((LefDefParser::lefiArray*)obj)->defaultCap(index); +} + +int lefiArray_numFloorPlans (const ::lefiArray* obj) { + return ((LefDefParser::lefiArray*)obj)->numFloorPlans(); +} + +const char* lefiArray_floorPlanName (const ::lefiArray* obj, int index) { + return ((const LefDefParser::lefiArray*)obj)->floorPlanName(index); +} + +int lefiArray_numSites (const ::lefiArray* obj, int index) { + return ((LefDefParser::lefiArray*)obj)->numSites(index); +} + +const char* lefiArray_siteType (const ::lefiArray* obj, int floorIndex, int siteIndex) { + return ((const LefDefParser::lefiArray*)obj)->siteType(floorIndex, siteIndex); +} + +const ::lefiSitePattern* lefiArray_site (const ::lefiArray* obj, int floorIndex, int siteIndex) { + return (const ::lefiSitePattern*) ((LefDefParser::lefiArray*)obj)->site(floorIndex, siteIndex); +} + +void lefiArray_print (const ::lefiArray* obj, FILE* f) { + ((LefDefParser::lefiArray*)obj)->print(f); +} + diff --git a/lefdef/src/lef/clef/xlefiCrossTalk.cpp b/lefdef/src/lef/clef/xlefiCrossTalk.cpp new file mode 100644 index 00000000..e0f3bbef --- /dev/null +++ b/lefdef/src/lef/clef/xlefiCrossTalk.cpp @@ -0,0 +1,67 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiCrossTalk.h" +#include "lefiCrossTalk.hpp" + +// Wrappers definitions. +double lefiNoiseVictim_length (const ::lefiNoiseVictim* obj) { + return ((LefDefParser::lefiNoiseVictim*)obj)->length(); +} + +int lefiNoiseVictim_numNoises (const ::lefiNoiseVictim* obj) { + return ((LefDefParser::lefiNoiseVictim*)obj)->numNoises(); +} + +double lefiNoiseVictim_noise (const ::lefiNoiseVictim* obj, int index) { + return ((LefDefParser::lefiNoiseVictim*)obj)->noise(index); +} + +int lefiNoiseResistance_numNums (const ::lefiNoiseResistance* obj) { + return ((LefDefParser::lefiNoiseResistance*)obj)->numNums(); +} + +double lefiNoiseResistance_num (const ::lefiNoiseResistance* obj, int index) { + return ((LefDefParser::lefiNoiseResistance*)obj)->num(index); +} + +int lefiNoiseResistance_numVictims (const ::lefiNoiseResistance* obj) { + return ((LefDefParser::lefiNoiseResistance*)obj)->numVictims(); +} + +const ::lefiNoiseVictim* lefiNoiseResistance_victim (const ::lefiNoiseResistance* obj, int index) { + return (const ::lefiNoiseVictim*) ((LefDefParser::lefiNoiseResistance*)obj)->victim(index); +} + diff --git a/lefdef/src/lef/clef/xlefiDebug.cpp b/lefdef/src/lef/clef/xlefiDebug.cpp new file mode 100644 index 00000000..7db3d82f --- /dev/null +++ b/lefdef/src/lef/clef/xlefiDebug.cpp @@ -0,0 +1,55 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiDebug.h" +#include "lefiDebug.hpp" + +// Wrappers definitions. +void lefiSetDebug (int num, int value) { + LefDefParser::lefiSetDebug(num, value); +} + +int lefiDebug (int num) { + return LefDefParser::lefiDebug(num); +} + +void lefiError (int check, int msgNum, const char* msg) { + LefDefParser::lefiError(check, msgNum, msg); +} + +const char* CASE (const char * x) { + return LefDefParser::CASE(x); +} + diff --git a/lefdef/src/lef/clef/xlefiEncryptInt.cpp b/lefdef/src/lef/clef/xlefiEncryptInt.cpp new file mode 100644 index 00000000..3cff9d0e --- /dev/null +++ b/lefdef/src/lef/clef/xlefiEncryptInt.cpp @@ -0,0 +1,43 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiEncryptInt.h" +#include "lefiEncryptInt.hpp" + +// Wrappers definitions. +void lefrEnableReadEncrypted () { + LefDefParser::lefrEnableReadEncrypted(); +} + diff --git a/lefdef/src/lef/clef/xlefiLayer.cpp b/lefdef/src/lef/clef/xlefiLayer.cpp new file mode 100644 index 00000000..d8e7eea1 --- /dev/null +++ b/lefdef/src/lef/clef/xlefiLayer.cpp @@ -0,0 +1,1215 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiLayer.h" +#include "lefiLayer.hpp" + +// Wrappers definitions. +int lefiAntennaPWL_numPWL (const ::lefiAntennaPWL* obj) { + return ((LefDefParser::lefiAntennaPWL*)obj)->numPWL(); +} + +char* lefiLayerDensity_type (const ::lefiLayerDensity* obj) { + return ((LefDefParser::lefiLayerDensity*)obj)->type(); +} + +int lefiLayerDensity_hasOneEntry (const ::lefiLayerDensity* obj) { + return ((LefDefParser::lefiLayerDensity*)obj)->hasOneEntry(); +} + +double lefiLayerDensity_oneEntry (const ::lefiLayerDensity* obj) { + return ((LefDefParser::lefiLayerDensity*)obj)->oneEntry(); +} + +int lefiLayerDensity_numFrequency (const ::lefiLayerDensity* obj) { + return ((LefDefParser::lefiLayerDensity*)obj)->numFrequency(); +} + +double lefiLayerDensity_frequency (const ::lefiLayerDensity* obj, int index) { + return ((LefDefParser::lefiLayerDensity*)obj)->frequency(index); +} + +int lefiLayerDensity_numWidths (const ::lefiLayerDensity* obj) { + return ((LefDefParser::lefiLayerDensity*)obj)->numWidths(); +} + +double lefiLayerDensity_width (const ::lefiLayerDensity* obj, int index) { + return ((LefDefParser::lefiLayerDensity*)obj)->width(index); +} + +int lefiLayerDensity_numTableEntries (const ::lefiLayerDensity* obj) { + return ((LefDefParser::lefiLayerDensity*)obj)->numTableEntries(); +} + +double lefiLayerDensity_tableEntry (const ::lefiLayerDensity* obj, int index) { + return ((LefDefParser::lefiLayerDensity*)obj)->tableEntry(index); +} + +int lefiLayerDensity_numCutareas (const ::lefiLayerDensity* obj) { + return ((LefDefParser::lefiLayerDensity*)obj)->numCutareas(); +} + +double lefiLayerDensity_cutArea (const ::lefiLayerDensity* obj, int index) { + return ((LefDefParser::lefiLayerDensity*)obj)->cutArea(index); +} + +int lefiParallel_numLength (const ::lefiParallel* obj) { + return ((LefDefParser::lefiParallel*)obj)->numLength(); +} + +int lefiParallel_numWidth (const ::lefiParallel* obj) { + return ((LefDefParser::lefiParallel*)obj)->numWidth(); +} + +double lefiParallel_length (const ::lefiParallel* obj, int iLength) { + return ((LefDefParser::lefiParallel*)obj)->length(iLength); +} + +double lefiParallel_width (const ::lefiParallel* obj, int iWidth) { + return ((LefDefParser::lefiParallel*)obj)->width(iWidth); +} + +double lefiParallel_widthSpacing (const ::lefiParallel* obj, int iWidth, int iWidthSpacing) { + return ((LefDefParser::lefiParallel*)obj)->widthSpacing(iWidth, iWidthSpacing); +} + +int lefiInfluence_numInfluenceEntry (const ::lefiInfluence* obj) { + return ((LefDefParser::lefiInfluence*)obj)->numInfluenceEntry(); +} + +double lefiInfluence_width (const ::lefiInfluence* obj, int index) { + return ((LefDefParser::lefiInfluence*)obj)->width(index); +} + +double lefiInfluence_distance (const ::lefiInfluence* obj, int index) { + return ((LefDefParser::lefiInfluence*)obj)->distance(index); +} + +double lefiInfluence_spacing (const ::lefiInfluence* obj, int index) { + return ((LefDefParser::lefiInfluence*)obj)->spacing(index); +} + +int lefiTwoWidths_numWidth (const ::lefiTwoWidths* obj) { + return ((LefDefParser::lefiTwoWidths*)obj)->numWidth(); +} + +double lefiTwoWidths_width (const ::lefiTwoWidths* obj, int iWidth) { + return ((LefDefParser::lefiTwoWidths*)obj)->width(iWidth); +} + +int lefiTwoWidths_hasWidthPRL (const ::lefiTwoWidths* obj, int iWidth) { + return ((LefDefParser::lefiTwoWidths*)obj)->hasWidthPRL(iWidth); +} + +double lefiTwoWidths_widthPRL (const ::lefiTwoWidths* obj, int iWidth) { + return ((LefDefParser::lefiTwoWidths*)obj)->widthPRL(iWidth); +} + +int lefiTwoWidths_numWidthSpacing (const ::lefiTwoWidths* obj, int iWidth) { + return ((LefDefParser::lefiTwoWidths*)obj)->numWidthSpacing(iWidth); +} + +double lefiTwoWidths_widthSpacing (const ::lefiTwoWidths* obj, int iWidth, int iWidthSpacing) { + return ((LefDefParser::lefiTwoWidths*)obj)->widthSpacing(iWidth, iWidthSpacing); +} + +int lefiSpacingTable_isInfluence (const ::lefiSpacingTable* obj) { + return ((LefDefParser::lefiSpacingTable*)obj)->isInfluence(); +} + +const ::lefiInfluence* lefiSpacingTable_influence (const ::lefiSpacingTable* obj) { + return (const ::lefiInfluence*) ((LefDefParser::lefiSpacingTable*)obj)->influence(); +} + +int lefiSpacingTable_isParallel (const ::lefiSpacingTable* obj) { + return ((LefDefParser::lefiSpacingTable*)obj)->isParallel(); +} + +const ::lefiParallel* lefiSpacingTable_parallel (const ::lefiSpacingTable* obj) { + return (const ::lefiParallel*) ((LefDefParser::lefiSpacingTable*)obj)->parallel(); +} + +const ::lefiTwoWidths* lefiSpacingTable_twoWidths (const ::lefiSpacingTable* obj) { + return (const ::lefiTwoWidths*) ((LefDefParser::lefiSpacingTable*)obj)->twoWidths(); +} + +int lefiOrthogonal_numOrthogonal (const ::lefiOrthogonal* obj) { + return ((LefDefParser::lefiOrthogonal*)obj)->numOrthogonal(); +} + +double lefiOrthogonal_cutWithin (const ::lefiOrthogonal* obj, int index) { + return ((LefDefParser::lefiOrthogonal*)obj)->cutWithin(index); +} + +double lefiOrthogonal_orthoSpacing (const ::lefiOrthogonal* obj, int index) { + return ((LefDefParser::lefiOrthogonal*)obj)->orthoSpacing(index); +} + +int lefiAntennaModel_hasAntennaAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaAreaRatio(); +} + +int lefiAntennaModel_hasAntennaDiffAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaDiffAreaRatio(); +} + +int lefiAntennaModel_hasAntennaDiffAreaRatioPWL (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaDiffAreaRatioPWL(); +} + +int lefiAntennaModel_hasAntennaCumAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaCumAreaRatio(); +} + +int lefiAntennaModel_hasAntennaCumDiffAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaCumDiffAreaRatio(); +} + +int lefiAntennaModel_hasAntennaCumDiffAreaRatioPWL (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaCumDiffAreaRatioPWL(); +} + +int lefiAntennaModel_hasAntennaAreaFactor (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaAreaFactor(); +} + +int lefiAntennaModel_hasAntennaAreaFactorDUO (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaAreaFactorDUO(); +} + +int lefiAntennaModel_hasAntennaSideAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaSideAreaRatio(); +} + +int lefiAntennaModel_hasAntennaDiffSideAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaDiffSideAreaRatio(); +} + +int lefiAntennaModel_hasAntennaDiffSideAreaRatioPWL (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaDiffSideAreaRatioPWL(); +} + +int lefiAntennaModel_hasAntennaCumSideAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaCumSideAreaRatio(); +} + +int lefiAntennaModel_hasAntennaCumDiffSideAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaCumDiffSideAreaRatio(); +} + +int lefiAntennaModel_hasAntennaCumDiffSideAreaRatioPWL (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaCumDiffSideAreaRatioPWL(); +} + +int lefiAntennaModel_hasAntennaSideAreaFactor (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaSideAreaFactor(); +} + +int lefiAntennaModel_hasAntennaSideAreaFactorDUO (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaSideAreaFactorDUO(); +} + +int lefiAntennaModel_hasAntennaCumRoutingPlusCut (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaCumRoutingPlusCut(); +} + +int lefiAntennaModel_hasAntennaGatePlusDiff (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaGatePlusDiff(); +} + +int lefiAntennaModel_hasAntennaAreaMinusDiff (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaAreaMinusDiff(); +} + +int lefiAntennaModel_hasAntennaAreaDiffReducePWL (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->hasAntennaAreaDiffReducePWL(); +} + +char* lefiAntennaModel_antennaOxide (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaOxide(); +} + +double lefiAntennaModel_antennaAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaAreaRatio(); +} + +double lefiAntennaModel_antennaDiffAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaDiffAreaRatio(); +} + +const ::lefiAntennaPWL* lefiAntennaModel_antennaDiffAreaRatioPWL (const ::lefiAntennaModel* obj) { + return (const ::lefiAntennaPWL*) ((LefDefParser::lefiAntennaModel*)obj)->antennaDiffAreaRatioPWL(); +} + +double lefiAntennaModel_antennaCumAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaCumAreaRatio(); +} + +double lefiAntennaModel_antennaCumDiffAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaCumDiffAreaRatio(); +} + +const ::lefiAntennaPWL* lefiAntennaModel_antennaCumDiffAreaRatioPWL (const ::lefiAntennaModel* obj) { + return (const ::lefiAntennaPWL*) ((LefDefParser::lefiAntennaModel*)obj)->antennaCumDiffAreaRatioPWL(); +} + +double lefiAntennaModel_antennaAreaFactor (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaAreaFactor(); +} + +double lefiAntennaModel_antennaSideAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaSideAreaRatio(); +} + +double lefiAntennaModel_antennaDiffSideAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaDiffSideAreaRatio(); +} + +const ::lefiAntennaPWL* lefiAntennaModel_antennaDiffSideAreaRatioPWL (const ::lefiAntennaModel* obj) { + return (const ::lefiAntennaPWL*) ((LefDefParser::lefiAntennaModel*)obj)->antennaDiffSideAreaRatioPWL(); +} + +double lefiAntennaModel_antennaCumSideAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaCumSideAreaRatio(); +} + +double lefiAntennaModel_antennaCumDiffSideAreaRatio (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaCumDiffSideAreaRatio(); +} + +const ::lefiAntennaPWL* lefiAntennaModel_antennaCumDiffSideAreaRatioPWL (const ::lefiAntennaModel* obj) { + return (const ::lefiAntennaPWL*) ((LefDefParser::lefiAntennaModel*)obj)->antennaCumDiffSideAreaRatioPWL(); +} + +double lefiAntennaModel_antennaSideAreaFactor (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaSideAreaFactor(); +} + +double lefiAntennaModel_antennaGatePlusDiff (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaGatePlusDiff(); +} + +double lefiAntennaModel_antennaAreaMinusDiff (const ::lefiAntennaModel* obj) { + return ((LefDefParser::lefiAntennaModel*)obj)->antennaAreaMinusDiff(); +} + +const ::lefiAntennaPWL* lefiAntennaModel_antennaAreaDiffReducePWL (const ::lefiAntennaModel* obj) { + return (const ::lefiAntennaPWL*) ((LefDefParser::lefiAntennaModel*)obj)->antennaAreaDiffReducePWL(); +} + +int lefiLayer_hasType (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasType(); +} + +int lefiLayer_hasLayerType (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasLayerType(); +} + +int lefiLayer_hasMask (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMask(); +} + +int lefiLayer_hasPitch (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasPitch(); +} + +int lefiLayer_hasXYPitch (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasXYPitch(); +} + +int lefiLayer_hasOffset (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasOffset(); +} + +int lefiLayer_hasXYOffset (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasXYOffset(); +} + +int lefiLayer_hasWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasWidth(); +} + +int lefiLayer_hasArea (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasArea(); +} + +int lefiLayer_hasDiagPitch (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasDiagPitch(); +} + +int lefiLayer_hasXYDiagPitch (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasXYDiagPitch(); +} + +int lefiLayer_hasDiagWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasDiagWidth(); +} + +int lefiLayer_hasDiagSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasDiagSpacing(); +} + +int lefiLayer_hasSpacingNumber (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingNumber(); +} + +int lefiLayer_hasSpacingName (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingName(index); +} + +int lefiLayer_hasSpacingLayerStack (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingLayerStack(index); +} + +int lefiLayer_hasSpacingAdjacent (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingAdjacent(index); +} + +int lefiLayer_hasSpacingCenterToCenter (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingCenterToCenter(index); +} + +int lefiLayer_hasSpacingRange (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingRange(index); +} + +int lefiLayer_hasSpacingRangeUseLengthThreshold (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingRangeUseLengthThreshold(index); +} + +int lefiLayer_hasSpacingRangeInfluence (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingRangeInfluence(index); +} + +int lefiLayer_hasSpacingRangeInfluenceRange (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingRangeInfluenceRange(index); +} + +int lefiLayer_hasSpacingRangeRange (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingRangeRange(index); +} + +int lefiLayer_hasSpacingLengthThreshold (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingLengthThreshold(index); +} + +int lefiLayer_hasSpacingLengthThresholdRange (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingLengthThresholdRange(index); +} + +int lefiLayer_hasSpacingParallelOverlap (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingParallelOverlap(index); +} + +int lefiLayer_hasSpacingArea (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingArea(index); +} + +int lefiLayer_hasSpacingEndOfLine (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingEndOfLine(index); +} + +int lefiLayer_hasSpacingParellelEdge (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingParellelEdge(index); +} + +int lefiLayer_hasSpacingTwoEdges (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingTwoEdges(index); +} + +int lefiLayer_hasSpacingAdjacentExcept (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingAdjacentExcept(index); +} + +int lefiLayer_hasSpacingSamenet (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingSamenet(index); +} + +int lefiLayer_hasSpacingSamenetPGonly (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingSamenetPGonly(index); +} + +int lefiLayer_hasSpacingNotchLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingNotchLength(index); +} + +int lefiLayer_hasSpacingEndOfNotchWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingEndOfNotchWidth(index); +} + +int lefiLayer_hasDirection (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasDirection(); +} + +int lefiLayer_hasResistance (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasResistance(); +} + +int lefiLayer_hasResistanceArray (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasResistanceArray(); +} + +int lefiLayer_hasCapacitance (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasCapacitance(); +} + +int lefiLayer_hasCapacitanceArray (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasCapacitanceArray(); +} + +int lefiLayer_hasHeight (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasHeight(); +} + +int lefiLayer_hasThickness (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasThickness(); +} + +int lefiLayer_hasWireExtension (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasWireExtension(); +} + +int lefiLayer_hasShrinkage (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasShrinkage(); +} + +int lefiLayer_hasCapMultiplier (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasCapMultiplier(); +} + +int lefiLayer_hasEdgeCap (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasEdgeCap(); +} + +int lefiLayer_hasAntennaLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasAntennaLength(); +} + +int lefiLayer_hasAntennaArea (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasAntennaArea(); +} + +int lefiLayer_hasCurrentDensityPoint (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasCurrentDensityPoint(); +} + +int lefiLayer_hasCurrentDensityArray (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasCurrentDensityArray(); +} + +int lefiLayer_hasAccurrentDensity (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasAccurrentDensity(); +} + +int lefiLayer_hasDccurrentDensity (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasDccurrentDensity(); +} + +int lefiLayer_numProps (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numProps(); +} + +const char* lefiLayer_propName (const ::lefiLayer* obj, int index) { + return ((const LefDefParser::lefiLayer*)obj)->propName(index); +} + +const char* lefiLayer_propValue (const ::lefiLayer* obj, int index) { + return ((const LefDefParser::lefiLayer*)obj)->propValue(index); +} + +double lefiLayer_propNumber (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->propNumber(index); +} + +const char lefiLayer_propType (const ::lefiLayer* obj, int index) { + return ((const LefDefParser::lefiLayer*)obj)->propType(index); +} + +int lefiLayer_propIsNumber (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->propIsNumber(index); +} + +int lefiLayer_propIsString (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->propIsString(index); +} + +int lefiLayer_numSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numSpacing(); +} + +char* lefiLayer_name (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->name(); +} + +const char* lefiLayer_type (const ::lefiLayer* obj) { + return ((const LefDefParser::lefiLayer*)obj)->type(); +} + +const char* lefiLayer_layerType (const ::lefiLayer* obj) { + return ((const LefDefParser::lefiLayer*)obj)->layerType(); +} + +double lefiLayer_pitch (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->pitch(); +} + +int lefiLayer_mask (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->mask(); +} + +double lefiLayer_pitchX (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->pitchX(); +} + +double lefiLayer_pitchY (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->pitchY(); +} + +double lefiLayer_offset (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->offset(); +} + +double lefiLayer_offsetX (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->offsetX(); +} + +double lefiLayer_offsetY (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->offsetY(); +} + +double lefiLayer_width (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->width(); +} + +double lefiLayer_area (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->area(); +} + +double lefiLayer_diagPitch (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->diagPitch(); +} + +double lefiLayer_diagPitchX (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->diagPitchX(); +} + +double lefiLayer_diagPitchY (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->diagPitchY(); +} + +double lefiLayer_diagWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->diagWidth(); +} + +double lefiLayer_diagSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->diagSpacing(); +} + +double lefiLayer_spacing (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacing(index); +} + +char* lefiLayer_spacingName (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingName(index); +} + +int lefiLayer_spacingAdjacentCuts (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingAdjacentCuts(index); +} + +double lefiLayer_spacingAdjacentWithin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingAdjacentWithin(index); +} + +double lefiLayer_spacingArea (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingArea(index); +} + +double lefiLayer_spacingRangeMin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingRangeMin(index); +} + +double lefiLayer_spacingRangeMax (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingRangeMax(index); +} + +double lefiLayer_spacingRangeInfluence (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingRangeInfluence(index); +} + +double lefiLayer_spacingRangeInfluenceMin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingRangeInfluenceMin(index); +} + +double lefiLayer_spacingRangeInfluenceMax (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingRangeInfluenceMax(index); +} + +double lefiLayer_spacingRangeRangeMin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingRangeRangeMin(index); +} + +double lefiLayer_spacingRangeRangeMax (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingRangeRangeMax(index); +} + +double lefiLayer_spacingLengthThreshold (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingLengthThreshold(index); +} + +double lefiLayer_spacingLengthThresholdRangeMin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingLengthThresholdRangeMin(index); +} + +double lefiLayer_spacingLengthThresholdRangeMax (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingLengthThresholdRangeMax(index); +} + +double lefiLayer_spacingEolWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingEolWidth(index); +} + +double lefiLayer_spacingEolWithin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingEolWithin(index); +} + +double lefiLayer_spacingParSpace (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingParSpace(index); +} + +double lefiLayer_spacingParWithin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingParWithin(index); +} + +double lefiLayer_spacingNotchLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingNotchLength(index); +} + +double lefiLayer_spacingEndOfNotchWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingEndOfNotchWidth(index); +} + +double lefiLayer_spacingEndOfNotchSpacing (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingEndOfNotchSpacing(index); +} + +double lefiLayer_spacingEndOfNotchLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->spacingEndOfNotchLength(index); +} + +int lefiLayer_numMinimumcut (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numMinimumcut(); +} + +int lefiLayer_minimumcut (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minimumcut(index); +} + +double lefiLayer_minimumcutWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minimumcutWidth(index); +} + +int lefiLayer_hasMinimumcutWithin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinimumcutWithin(index); +} + +double lefiLayer_minimumcutWithin (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minimumcutWithin(index); +} + +int lefiLayer_hasMinimumcutConnection (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinimumcutConnection(index); +} + +const char* lefiLayer_minimumcutConnection (const ::lefiLayer* obj, int index) { + return ((const LefDefParser::lefiLayer*)obj)->minimumcutConnection(index); +} + +int lefiLayer_hasMinimumcutNumCuts (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinimumcutNumCuts(index); +} + +double lefiLayer_minimumcutLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minimumcutLength(index); +} + +double lefiLayer_minimumcutDistance (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minimumcutDistance(index); +} + +const char* lefiLayer_direction (const ::lefiLayer* obj) { + return ((const LefDefParser::lefiLayer*)obj)->direction(); +} + +double lefiLayer_resistance (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->resistance(); +} + +double lefiLayer_capacitance (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->capacitance(); +} + +double lefiLayer_height (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->height(); +} + +double lefiLayer_wireExtension (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->wireExtension(); +} + +double lefiLayer_thickness (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->thickness(); +} + +double lefiLayer_shrinkage (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->shrinkage(); +} + +double lefiLayer_capMultiplier (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->capMultiplier(); +} + +double lefiLayer_edgeCap (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->edgeCap(); +} + +double lefiLayer_antennaLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->antennaLength(); +} + +double lefiLayer_antennaArea (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->antennaArea(); +} + +double lefiLayer_currentDensityPoint (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->currentDensityPoint(); +} + +void lefiLayer_currentDensityArray (const ::lefiLayer* obj, int* numPoints, double** widths, double** current) { + ((LefDefParser::lefiLayer*)obj)->currentDensityArray(numPoints, widths, current); +} + +void lefiLayer_capacitanceArray (const ::lefiLayer* obj, int* numPoints, double** widths, double** resValues) { + ((LefDefParser::lefiLayer*)obj)->capacitanceArray(numPoints, widths, resValues); +} + +void lefiLayer_resistanceArray (const ::lefiLayer* obj, int* numPoints, double** widths, double** capValues) { + ((LefDefParser::lefiLayer*)obj)->resistanceArray(numPoints, widths, capValues); +} + +int lefiLayer_numAccurrentDensity (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numAccurrentDensity(); +} + +const ::lefiLayerDensity* lefiLayer_accurrent (const ::lefiLayer* obj, int index) { + return (const ::lefiLayerDensity*) ((LefDefParser::lefiLayer*)obj)->accurrent(index); +} + +int lefiLayer_numDccurrentDensity (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numDccurrentDensity(); +} + +const ::lefiLayerDensity* lefiLayer_dccurrent (const ::lefiLayer* obj, int index) { + return (const ::lefiLayerDensity*) ((LefDefParser::lefiLayer*)obj)->dccurrent(index); +} + +int lefiLayer_numAntennaModel (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numAntennaModel(); +} + +const ::lefiAntennaModel* lefiLayer_antennaModel (const ::lefiLayer* obj, int index) { + return (const ::lefiAntennaModel*) ((LefDefParser::lefiLayer*)obj)->antennaModel(index); +} + +int lefiLayer_hasSlotWireWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasSlotWireWidth(); +} + +int lefiLayer_hasSlotWireLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasSlotWireLength(); +} + +int lefiLayer_hasSlotWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasSlotWidth(); +} + +int lefiLayer_hasSlotLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasSlotLength(); +} + +int lefiLayer_hasMaxAdjacentSlotSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMaxAdjacentSlotSpacing(); +} + +int lefiLayer_hasMaxCoaxialSlotSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMaxCoaxialSlotSpacing(); +} + +int lefiLayer_hasMaxEdgeSlotSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMaxEdgeSlotSpacing(); +} + +int lefiLayer_hasSplitWireWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasSplitWireWidth(); +} + +int lefiLayer_hasMinimumDensity (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMinimumDensity(); +} + +int lefiLayer_hasMaximumDensity (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMaximumDensity(); +} + +int lefiLayer_hasDensityCheckWindow (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasDensityCheckWindow(); +} + +int lefiLayer_hasDensityCheckStep (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasDensityCheckStep(); +} + +int lefiLayer_hasFillActiveSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasFillActiveSpacing(); +} + +int lefiLayer_hasMaxwidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMaxwidth(); +} + +int lefiLayer_hasMinwidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMinwidth(); +} + +int lefiLayer_hasMinstep (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMinstep(); +} + +int lefiLayer_hasProtrusion (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasProtrusion(); +} + +double lefiLayer_slotWireWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->slotWireWidth(); +} + +double lefiLayer_slotWireLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->slotWireLength(); +} + +double lefiLayer_slotWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->slotWidth(); +} + +double lefiLayer_slotLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->slotLength(); +} + +double lefiLayer_maxAdjacentSlotSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->maxAdjacentSlotSpacing(); +} + +double lefiLayer_maxCoaxialSlotSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->maxCoaxialSlotSpacing(); +} + +double lefiLayer_maxEdgeSlotSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->maxEdgeSlotSpacing(); +} + +double lefiLayer_splitWireWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->splitWireWidth(); +} + +double lefiLayer_minimumDensity (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->minimumDensity(); +} + +double lefiLayer_maximumDensity (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->maximumDensity(); +} + +double lefiLayer_densityCheckWindowLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->densityCheckWindowLength(); +} + +double lefiLayer_densityCheckWindowWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->densityCheckWindowWidth(); +} + +double lefiLayer_densityCheckStep (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->densityCheckStep(); +} + +double lefiLayer_fillActiveSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->fillActiveSpacing(); +} + +double lefiLayer_maxwidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->maxwidth(); +} + +double lefiLayer_minwidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->minwidth(); +} + +double lefiLayer_protrusionWidth1 (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->protrusionWidth1(); +} + +double lefiLayer_protrusionLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->protrusionLength(); +} + +double lefiLayer_protrusionWidth2 (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->protrusionWidth2(); +} + +int lefiLayer_numMinstep (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numMinstep(); +} + +double lefiLayer_minstep (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minstep(index); +} + +int lefiLayer_hasMinstepType (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinstepType(index); +} + +char* lefiLayer_minstepType (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minstepType(index); +} + +int lefiLayer_hasMinstepLengthsum (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinstepLengthsum(index); +} + +double lefiLayer_minstepLengthsum (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minstepLengthsum(index); +} + +int lefiLayer_hasMinstepMaxedges (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinstepMaxedges(index); +} + +int lefiLayer_minstepMaxedges (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minstepMaxedges(index); +} + +int lefiLayer_hasMinstepMinAdjLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinstepMinAdjLength(index); +} + +double lefiLayer_minstepMinAdjLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minstepMinAdjLength(index); +} + +int lefiLayer_hasMinstepMinBetLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinstepMinBetLength(index); +} + +double lefiLayer_minstepMinBetLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minstepMinBetLength(index); +} + +int lefiLayer_hasMinstepXSameCorners (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinstepXSameCorners(index); +} + +int lefiLayer_numMinenclosedarea (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numMinenclosedarea(); +} + +double lefiLayer_minenclosedarea (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minenclosedarea(index); +} + +int lefiLayer_hasMinenclosedareaWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasMinenclosedareaWidth(index); +} + +double lefiLayer_minenclosedareaWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minenclosedareaWidth(index); +} + +int lefiLayer_numEnclosure (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numEnclosure(); +} + +int lefiLayer_hasEnclosureRule (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasEnclosureRule(index); +} + +double lefiLayer_enclosureOverhang1 (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->enclosureOverhang1(index); +} + +double lefiLayer_enclosureOverhang2 (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->enclosureOverhang2(index); +} + +int lefiLayer_hasEnclosureWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasEnclosureWidth(index); +} + +double lefiLayer_enclosureMinWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->enclosureMinWidth(index); +} + +int lefiLayer_hasEnclosureExceptExtraCut (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasEnclosureExceptExtraCut(index); +} + +double lefiLayer_enclosureExceptExtraCut (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->enclosureExceptExtraCut(index); +} + +int lefiLayer_hasEnclosureMinLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasEnclosureMinLength(index); +} + +double lefiLayer_enclosureMinLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->enclosureMinLength(index); +} + +int lefiLayer_numPreferEnclosure (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numPreferEnclosure(); +} + +int lefiLayer_hasPreferEnclosureRule (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasPreferEnclosureRule(index); +} + +double lefiLayer_preferEnclosureOverhang1 (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->preferEnclosureOverhang1(index); +} + +double lefiLayer_preferEnclosureOverhang2 (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->preferEnclosureOverhang2(index); +} + +int lefiLayer_hasPreferEnclosureWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->hasPreferEnclosureWidth(index); +} + +double lefiLayer_preferEnclosureMinWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->preferEnclosureMinWidth(index); +} + +int lefiLayer_hasResistancePerCut (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasResistancePerCut(); +} + +double lefiLayer_resistancePerCut (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->resistancePerCut(); +} + +int lefiLayer_hasDiagMinEdgeLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasDiagMinEdgeLength(); +} + +double lefiLayer_diagMinEdgeLength (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->diagMinEdgeLength(); +} + +int lefiLayer_numMinSize (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numMinSize(); +} + +double lefiLayer_minSizeWidth (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minSizeWidth(index); +} + +double lefiLayer_minSizeLength (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->minSizeLength(index); +} + +int lefiLayer_hasMaxFloatingArea (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasMaxFloatingArea(); +} + +double lefiLayer_maxFloatingArea (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->maxFloatingArea(); +} + +int lefiLayer_hasArraySpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasArraySpacing(); +} + +int lefiLayer_hasLongArray (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasLongArray(); +} + +int lefiLayer_hasViaWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasViaWidth(); +} + +double lefiLayer_viaWidth (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->viaWidth(); +} + +double lefiLayer_cutSpacing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->cutSpacing(); +} + +int lefiLayer_numArrayCuts (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->numArrayCuts(); +} + +int lefiLayer_arrayCuts (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->arrayCuts(index); +} + +double lefiLayer_arraySpacing (const ::lefiLayer* obj, int index) { + return ((LefDefParser::lefiLayer*)obj)->arraySpacing(index); +} + +int lefiLayer_hasSpacingTableOrtho (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->hasSpacingTableOrtho(); +} + +const ::lefiOrthogonal* lefiLayer_orthogonal (const ::lefiLayer* obj) { + return (const ::lefiOrthogonal*) ((LefDefParser::lefiLayer*)obj)->orthogonal(); +} + +int lefiLayer_need58PropsProcessing (const ::lefiLayer* obj) { + return ((LefDefParser::lefiLayer*)obj)->need58PropsProcessing(); +} + +void lefiLayer_print (const ::lefiLayer* obj, FILE* f) { + ((LefDefParser::lefiLayer*)obj)->print(f); +} + diff --git a/lefdef/src/lef/clef/xlefiMacro.cpp b/lefdef/src/lef/clef/xlefiMacro.cpp new file mode 100644 index 00000000..616803ba --- /dev/null +++ b/lefdef/src/lef/clef/xlefiMacro.cpp @@ -0,0 +1,829 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiMacro.h" +#include "lefiMacro.hpp" + +// Wrappers definitions. +const ::lefiGeometries* lefiObstruction_geometries (const ::lefiObstruction* obj) { + return (const ::lefiGeometries*) ((LefDefParser::lefiObstruction*)obj)->geometries(); +} + +void lefiObstruction_print (const ::lefiObstruction* obj, FILE* f) { + ((LefDefParser::lefiObstruction*)obj)->print(f); +} + +int lefiPinAntennaModel_hasAntennaGateArea (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->hasAntennaGateArea(); +} + +int lefiPinAntennaModel_hasAntennaMaxAreaCar (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->hasAntennaMaxAreaCar(); +} + +int lefiPinAntennaModel_hasAntennaMaxSideAreaCar (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->hasAntennaMaxSideAreaCar(); +} + +int lefiPinAntennaModel_hasAntennaMaxCutCar (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->hasAntennaMaxCutCar(); +} + +char* lefiPinAntennaModel_antennaOxide (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->antennaOxide(); +} + +int lefiPinAntennaModel_numAntennaGateArea (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->numAntennaGateArea(); +} + +double lefiPinAntennaModel_antennaGateArea (const ::lefiPinAntennaModel* obj, int index) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->antennaGateArea(index); +} + +const char* lefiPinAntennaModel_antennaGateAreaLayer (const ::lefiPinAntennaModel* obj, int index) { + return ((const LefDefParser::lefiPinAntennaModel*)obj)->antennaGateAreaLayer(index); +} + +int lefiPinAntennaModel_numAntennaMaxAreaCar (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->numAntennaMaxAreaCar(); +} + +double lefiPinAntennaModel_antennaMaxAreaCar (const ::lefiPinAntennaModel* obj, int index) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->antennaMaxAreaCar(index); +} + +const char* lefiPinAntennaModel_antennaMaxAreaCarLayer (const ::lefiPinAntennaModel* obj, int index) { + return ((const LefDefParser::lefiPinAntennaModel*)obj)->antennaMaxAreaCarLayer(index); +} + +int lefiPinAntennaModel_numAntennaMaxSideAreaCar (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->numAntennaMaxSideAreaCar(); +} + +double lefiPinAntennaModel_antennaMaxSideAreaCar (const ::lefiPinAntennaModel* obj, int index) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->antennaMaxSideAreaCar(index); +} + +const char* lefiPinAntennaModel_antennaMaxSideAreaCarLayer (const ::lefiPinAntennaModel* obj, int index) { + return ((const LefDefParser::lefiPinAntennaModel*)obj)->antennaMaxSideAreaCarLayer(index); +} + +int lefiPinAntennaModel_numAntennaMaxCutCar (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->numAntennaMaxCutCar(); +} + +double lefiPinAntennaModel_antennaMaxCutCar (const ::lefiPinAntennaModel* obj, int index) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->antennaMaxCutCar(index); +} + +const char* lefiPinAntennaModel_antennaMaxCutCarLayer (const ::lefiPinAntennaModel* obj, int index) { + return ((const LefDefParser::lefiPinAntennaModel*)obj)->antennaMaxCutCarLayer(index); +} + +int lefiPinAntennaModel_hasReturn (const ::lefiPinAntennaModel* obj) { + return ((LefDefParser::lefiPinAntennaModel*)obj)->hasReturn(); +} + +int lefiPin_hasForeign (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasForeign(); +} + +int lefiPin_hasForeignOrient (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->hasForeignOrient(index); +} + +int lefiPin_hasForeignPoint (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->hasForeignPoint(index); +} + +int lefiPin_hasLEQ (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasLEQ(); +} + +int lefiPin_hasDirection (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasDirection(); +} + +int lefiPin_hasUse (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasUse(); +} + +int lefiPin_hasShape (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasShape(); +} + +int lefiPin_hasMustjoin (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasMustjoin(); +} + +int lefiPin_hasOutMargin (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasOutMargin(); +} + +int lefiPin_hasOutResistance (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasOutResistance(); +} + +int lefiPin_hasInMargin (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasInMargin(); +} + +int lefiPin_hasPower (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasPower(); +} + +int lefiPin_hasLeakage (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasLeakage(); +} + +int lefiPin_hasMaxload (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasMaxload(); +} + +int lefiPin_hasMaxdelay (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasMaxdelay(); +} + +int lefiPin_hasCapacitance (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasCapacitance(); +} + +int lefiPin_hasResistance (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasResistance(); +} + +int lefiPin_hasPulldownres (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasPulldownres(); +} + +int lefiPin_hasTieoffr (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasTieoffr(); +} + +int lefiPin_hasVHI (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasVHI(); +} + +int lefiPin_hasVLO (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasVLO(); +} + +int lefiPin_hasRiseVoltage (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasRiseVoltage(); +} + +int lefiPin_hasFallVoltage (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasFallVoltage(); +} + +int lefiPin_hasRiseThresh (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasRiseThresh(); +} + +int lefiPin_hasFallThresh (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasFallThresh(); +} + +int lefiPin_hasRiseSatcur (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasRiseSatcur(); +} + +int lefiPin_hasFallSatcur (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasFallSatcur(); +} + +int lefiPin_hasCurrentSource (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasCurrentSource(); +} + +int lefiPin_hasTables (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasTables(); +} + +int lefiPin_hasAntennaSize (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasAntennaSize(); +} + +int lefiPin_hasAntennaMetalArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasAntennaMetalArea(); +} + +int lefiPin_hasAntennaMetalLength (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasAntennaMetalLength(); +} + +int lefiPin_hasAntennaPartialMetalArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasAntennaPartialMetalArea(); +} + +int lefiPin_hasAntennaPartialMetalSideArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasAntennaPartialMetalSideArea(); +} + +int lefiPin_hasAntennaPartialCutArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasAntennaPartialCutArea(); +} + +int lefiPin_hasAntennaDiffArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasAntennaDiffArea(); +} + +int lefiPin_hasAntennaModel (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasAntennaModel(); +} + +int lefiPin_hasTaperRule (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasTaperRule(); +} + +int lefiPin_hasRiseSlewLimit (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasRiseSlewLimit(); +} + +int lefiPin_hasFallSlewLimit (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasFallSlewLimit(); +} + +int lefiPin_hasNetExpr (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasNetExpr(); +} + +int lefiPin_hasSupplySensitivity (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasSupplySensitivity(); +} + +int lefiPin_hasGroundSensitivity (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->hasGroundSensitivity(); +} + +const char* lefiPin_name (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->name(); +} + +int lefiPin_numPorts (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numPorts(); +} + +const ::lefiGeometries* lefiPin_port (const ::lefiPin* obj, int index) { + return (const ::lefiGeometries*) ((LefDefParser::lefiPin*)obj)->port(index); +} + +int lefiPin_numForeigns (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numForeigns(); +} + +const char* lefiPin_foreignName (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->foreignName(index); +} + +const char* lefiPin_taperRule (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->taperRule(); +} + +int lefiPin_foreignOrient (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->foreignOrient(index); +} + +const char* lefiPin_foreignOrientStr (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->foreignOrientStr(index); +} + +double lefiPin_foreignX (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->foreignX(index); +} + +double lefiPin_foreignY (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->foreignY(index); +} + +const char* lefiPin_LEQ (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->LEQ(); +} + +const char* lefiPin_direction (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->direction(); +} + +const char* lefiPin_use (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->use(); +} + +const char* lefiPin_shape (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->shape(); +} + +const char* lefiPin_mustjoin (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->mustjoin(); +} + +double lefiPin_outMarginHigh (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->outMarginHigh(); +} + +double lefiPin_outMarginLow (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->outMarginLow(); +} + +double lefiPin_outResistanceHigh (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->outResistanceHigh(); +} + +double lefiPin_outResistanceLow (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->outResistanceLow(); +} + +double lefiPin_inMarginHigh (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->inMarginHigh(); +} + +double lefiPin_inMarginLow (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->inMarginLow(); +} + +double lefiPin_power (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->power(); +} + +double lefiPin_leakage (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->leakage(); +} + +double lefiPin_maxload (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->maxload(); +} + +double lefiPin_maxdelay (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->maxdelay(); +} + +double lefiPin_capacitance (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->capacitance(); +} + +double lefiPin_resistance (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->resistance(); +} + +double lefiPin_pulldownres (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->pulldownres(); +} + +double lefiPin_tieoffr (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->tieoffr(); +} + +double lefiPin_VHI (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->VHI(); +} + +double lefiPin_VLO (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->VLO(); +} + +double lefiPin_riseVoltage (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->riseVoltage(); +} + +double lefiPin_fallVoltage (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->fallVoltage(); +} + +double lefiPin_riseThresh (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->riseThresh(); +} + +double lefiPin_fallThresh (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->fallThresh(); +} + +double lefiPin_riseSatcur (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->riseSatcur(); +} + +double lefiPin_fallSatcur (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->fallSatcur(); +} + +double lefiPin_riseSlewLimit (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->riseSlewLimit(); +} + +double lefiPin_fallSlewLimit (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->fallSlewLimit(); +} + +const char* lefiPin_currentSource (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->currentSource(); +} + +const char* lefiPin_tableHighName (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->tableHighName(); +} + +const char* lefiPin_tableLowName (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->tableLowName(); +} + +int lefiPin_numAntennaSize (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numAntennaSize(); +} + +double lefiPin_antennaSize (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->antennaSize(index); +} + +const char* lefiPin_antennaSizeLayer (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->antennaSizeLayer(index); +} + +int lefiPin_numAntennaMetalArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numAntennaMetalArea(); +} + +double lefiPin_antennaMetalArea (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->antennaMetalArea(index); +} + +const char* lefiPin_antennaMetalAreaLayer (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->antennaMetalAreaLayer(index); +} + +int lefiPin_numAntennaMetalLength (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numAntennaMetalLength(); +} + +double lefiPin_antennaMetalLength (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->antennaMetalLength(index); +} + +const char* lefiPin_antennaMetalLengthLayer (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->antennaMetalLengthLayer(index); +} + +int lefiPin_numAntennaPartialMetalArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numAntennaPartialMetalArea(); +} + +double lefiPin_antennaPartialMetalArea (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->antennaPartialMetalArea(index); +} + +const char* lefiPin_antennaPartialMetalAreaLayer (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->antennaPartialMetalAreaLayer(index); +} + +int lefiPin_numAntennaPartialMetalSideArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numAntennaPartialMetalSideArea(); +} + +double lefiPin_antennaPartialMetalSideArea (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->antennaPartialMetalSideArea(index); +} + +const char* lefiPin_antennaPartialMetalSideAreaLayer (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->antennaPartialMetalSideAreaLayer(index); +} + +int lefiPin_numAntennaPartialCutArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numAntennaPartialCutArea(); +} + +double lefiPin_antennaPartialCutArea (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->antennaPartialCutArea(index); +} + +const char* lefiPin_antennaPartialCutAreaLayer (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->antennaPartialCutAreaLayer(index); +} + +int lefiPin_numAntennaDiffArea (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numAntennaDiffArea(); +} + +double lefiPin_antennaDiffArea (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->antennaDiffArea(index); +} + +const char* lefiPin_antennaDiffAreaLayer (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->antennaDiffAreaLayer(index); +} + +const char* lefiPin_netExpr (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->netExpr(); +} + +const char* lefiPin_supplySensitivity (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->supplySensitivity(); +} + +const char* lefiPin_groundSensitivity (const ::lefiPin* obj) { + return ((const LefDefParser::lefiPin*)obj)->groundSensitivity(); +} + +int lefiPin_numAntennaModel (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numAntennaModel(); +} + +const ::lefiPinAntennaModel* lefiPin_antennaModel (const ::lefiPin* obj, int index) { + return (const ::lefiPinAntennaModel*) ((LefDefParser::lefiPin*)obj)->antennaModel(index); +} + +int lefiPin_numProperties (const ::lefiPin* obj) { + return ((LefDefParser::lefiPin*)obj)->numProperties(); +} + +const char* lefiPin_propName (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->propName(index); +} + +const char* lefiPin_propValue (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->propValue(index); +} + +double lefiPin_propNum (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->propNum(index); +} + +const char lefiPin_propType (const ::lefiPin* obj, int index) { + return ((const LefDefParser::lefiPin*)obj)->propType(index); +} + +int lefiPin_propIsNumber (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->propIsNumber(index); +} + +int lefiPin_propIsString (const ::lefiPin* obj, int index) { + return ((LefDefParser::lefiPin*)obj)->propIsString(index); +} + +void lefiPin_print (const ::lefiPin* obj, FILE* f) { + ((LefDefParser::lefiPin*)obj)->print(f); +} + +int lefiDensity_numLayer (const ::lefiDensity* obj) { + return ((LefDefParser::lefiDensity*)obj)->numLayer(); +} + +char* lefiDensity_layerName (const ::lefiDensity* obj, int index) { + return ((LefDefParser::lefiDensity*)obj)->layerName(index); +} + +int lefiDensity_numRects (const ::lefiDensity* obj, int index) { + return ((LefDefParser::lefiDensity*)obj)->numRects(index); +} + +::lefiGeomRect lefiDensity_getRect (const ::lefiDensity* obj, int index, int rectIndex) { + LefDefParser::lefiGeomRect tmp; + tmp = ((LefDefParser::lefiDensity*)obj)->getRect(index, rectIndex); + return *((::lefiGeomRect*)&tmp); +} + +double lefiDensity_densityValue (const ::lefiDensity* obj, int index, int rectIndex) { + return ((LefDefParser::lefiDensity*)obj)->densityValue(index, rectIndex); +} + +void lefiDensity_print (const ::lefiDensity* obj, FILE* f) { + ((LefDefParser::lefiDensity*)obj)->print(f); +} + +int lefiMacro_hasClass (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasClass(); +} + +int lefiMacro_hasGenerator (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasGenerator(); +} + +int lefiMacro_hasGenerate (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasGenerate(); +} + +int lefiMacro_hasPower (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasPower(); +} + +int lefiMacro_hasOrigin (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasOrigin(); +} + +int lefiMacro_hasEEQ (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasEEQ(); +} + +int lefiMacro_hasLEQ (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasLEQ(); +} + +int lefiMacro_hasSource (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasSource(); +} + +int lefiMacro_hasXSymmetry (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasXSymmetry(); +} + +int lefiMacro_hasYSymmetry (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasYSymmetry(); +} + +int lefiMacro_has90Symmetry (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->has90Symmetry(); +} + +int lefiMacro_hasSiteName (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasSiteName(); +} + +int lefiMacro_hasSitePattern (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasSitePattern(); +} + +int lefiMacro_hasSize (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasSize(); +} + +int lefiMacro_hasForeign (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasForeign(); +} + +int lefiMacro_hasForeignOrigin (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->hasForeignOrigin(index); +} + +int lefiMacro_hasForeignOrient (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->hasForeignOrient(index); +} + +int lefiMacro_hasForeignPoint (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->hasForeignPoint(index); +} + +int lefiMacro_hasClockType (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->hasClockType(); +} + +int lefiMacro_isBuffer (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->isBuffer(); +} + +int lefiMacro_isInverter (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->isInverter(); +} + +int lefiMacro_isFixedMask (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->isFixedMask(); +} + +int lefiMacro_numSitePattern (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->numSitePattern(); +} + +int lefiMacro_numProperties (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->numProperties(); +} + +const char* lefiMacro_propName (const ::lefiMacro* obj, int index) { + return ((const LefDefParser::lefiMacro*)obj)->propName(index); +} + +const char* lefiMacro_propValue (const ::lefiMacro* obj, int index) { + return ((const LefDefParser::lefiMacro*)obj)->propValue(index); +} + +double lefiMacro_propNum (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->propNum(index); +} + +const char lefiMacro_propType (const ::lefiMacro* obj, int index) { + return ((const LefDefParser::lefiMacro*)obj)->propType(index); +} + +int lefiMacro_propIsNumber (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->propIsNumber(index); +} + +int lefiMacro_propIsString (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->propIsString(index); +} + +const char* lefiMacro_name (const ::lefiMacro* obj) { + return ((const LefDefParser::lefiMacro*)obj)->name(); +} + +const char* lefiMacro_macroClass (const ::lefiMacro* obj) { + return ((const LefDefParser::lefiMacro*)obj)->macroClass(); +} + +const char* lefiMacro_generator (const ::lefiMacro* obj) { + return ((const LefDefParser::lefiMacro*)obj)->generator(); +} + +const char* lefiMacro_EEQ (const ::lefiMacro* obj) { + return ((const LefDefParser::lefiMacro*)obj)->EEQ(); +} + +const char* lefiMacro_LEQ (const ::lefiMacro* obj) { + return ((const LefDefParser::lefiMacro*)obj)->LEQ(); +} + +const char* lefiMacro_source (const ::lefiMacro* obj) { + return ((const LefDefParser::lefiMacro*)obj)->source(); +} + +const char* lefiMacro_clockType (const ::lefiMacro* obj) { + return ((const LefDefParser::lefiMacro*)obj)->clockType(); +} + +double lefiMacro_originX (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->originX(); +} + +double lefiMacro_originY (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->originY(); +} + +double lefiMacro_power (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->power(); +} + +void lefiMacro_generate (const ::lefiMacro* obj, char** name1, char** name2) { + ((LefDefParser::lefiMacro*)obj)->generate(name1, name2); +} + +const ::lefiSitePattern* lefiMacro_sitePattern (const ::lefiMacro* obj, int index) { + return (const ::lefiSitePattern*) ((LefDefParser::lefiMacro*)obj)->sitePattern(index); +} + +const char* lefiMacro_siteName (const ::lefiMacro* obj) { + return ((const LefDefParser::lefiMacro*)obj)->siteName(); +} + +double lefiMacro_sizeX (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->sizeX(); +} + +double lefiMacro_sizeY (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->sizeY(); +} + +int lefiMacro_numForeigns (const ::lefiMacro* obj) { + return ((LefDefParser::lefiMacro*)obj)->numForeigns(); +} + +int lefiMacro_foreignOrient (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->foreignOrient(index); +} + +const char* lefiMacro_foreignOrientStr (const ::lefiMacro* obj, int index) { + return ((const LefDefParser::lefiMacro*)obj)->foreignOrientStr(index); +} + +double lefiMacro_foreignX (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->foreignX(index); +} + +double lefiMacro_foreignY (const ::lefiMacro* obj, int index) { + return ((LefDefParser::lefiMacro*)obj)->foreignY(index); +} + +const char* lefiMacro_foreignName (const ::lefiMacro* obj, int index) { + return ((const LefDefParser::lefiMacro*)obj)->foreignName(index); +} + +void lefiMacro_print (const ::lefiMacro* obj, FILE* f) { + ((LefDefParser::lefiMacro*)obj)->print(f); +} + diff --git a/lefdef/src/lef/clef/xlefiMisc.cpp b/lefdef/src/lef/clef/xlefiMisc.cpp new file mode 100644 index 00000000..07f8a690 --- /dev/null +++ b/lefdef/src/lef/clef/xlefiMisc.cpp @@ -0,0 +1,343 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiMisc.h" +#include "lefiMisc.hpp" + +// Wrappers definitions. +int lefiGeometries_numItems (const ::lefiGeometries* obj) { + return ((LefDefParser::lefiGeometries*)obj)->numItems(); +} + +enum ::lefiGeomEnum lefiGeometries_itemType (const ::lefiGeometries* obj, int index) { + return (::lefiGeomEnum) ((LefDefParser::lefiGeometries*)obj)->itemType(index); +} + +struct ::lefiGeomRect* lefiGeometries_getRect (const ::lefiGeometries* obj, int index) { + return (::lefiGeomRect*) ((LefDefParser::lefiGeometries*)obj)->getRect(index); +} + +struct ::lefiGeomRectIter* lefiGeometries_getRectIter (const ::lefiGeometries* obj, int index) { + return (::lefiGeomRectIter*) ((LefDefParser::lefiGeometries*)obj)->getRectIter(index); +} + +struct ::lefiGeomPath* lefiGeometries_getPath (const ::lefiGeometries* obj, int index) { + return (::lefiGeomPath*) ((LefDefParser::lefiGeometries*)obj)->getPath(index); +} + +struct ::lefiGeomPathIter* lefiGeometries_getPathIter (const ::lefiGeometries* obj, int index) { + return (::lefiGeomPathIter*) ((LefDefParser::lefiGeometries*)obj)->getPathIter(index); +} + +int lefiGeometries_hasLayerExceptPgNet (const ::lefiGeometries* obj, int index) { + return ((LefDefParser::lefiGeometries*)obj)->hasLayerExceptPgNet(index); +} + +char* lefiGeometries_getLayer (const ::lefiGeometries* obj, int index) { + return ((LefDefParser::lefiGeometries*)obj)->getLayer(index); +} + +double lefiGeometries_getLayerMinSpacing (const ::lefiGeometries* obj, int index) { + return ((LefDefParser::lefiGeometries*)obj)->getLayerMinSpacing(index); +} + +double lefiGeometries_getLayerRuleWidth (const ::lefiGeometries* obj, int index) { + return ((LefDefParser::lefiGeometries*)obj)->getLayerRuleWidth(index); +} + +double lefiGeometries_getWidth (const ::lefiGeometries* obj, int index) { + return ((LefDefParser::lefiGeometries*)obj)->getWidth(index); +} + +struct ::lefiGeomPolygon* lefiGeometries_getPolygon (const ::lefiGeometries* obj, int index) { + return (::lefiGeomPolygon*) ((LefDefParser::lefiGeometries*)obj)->getPolygon(index); +} + +struct ::lefiGeomPolygonIter* lefiGeometries_getPolygonIter (const ::lefiGeometries* obj, int index) { + return (::lefiGeomPolygonIter*) ((LefDefParser::lefiGeometries*)obj)->getPolygonIter(index); +} + +char* lefiGeometries_getClass (const ::lefiGeometries* obj, int index) { + return ((LefDefParser::lefiGeometries*)obj)->getClass(index); +} + +struct ::lefiGeomVia* lefiGeometries_getVia (const ::lefiGeometries* obj, int index) { + return (::lefiGeomVia*) ((LefDefParser::lefiGeometries*)obj)->getVia(index); +} + +struct ::lefiGeomViaIter* lefiGeometries_getViaIter (const ::lefiGeometries* obj, int index) { + return (::lefiGeomViaIter*) ((LefDefParser::lefiGeometries*)obj)->getViaIter(index); +} + +void lefiGeometries_print (const ::lefiGeometries* obj, FILE* f) { + ((LefDefParser::lefiGeometries*)obj)->print(f); +} + +int lefiSpacing_hasStack (const ::lefiSpacing* obj) { + return ((LefDefParser::lefiSpacing*)obj)->hasStack(); +} + +const char* lefiSpacing_name1 (const ::lefiSpacing* obj) { + return ((const LefDefParser::lefiSpacing*)obj)->name1(); +} + +const char* lefiSpacing_name2 (const ::lefiSpacing* obj) { + return ((const LefDefParser::lefiSpacing*)obj)->name2(); +} + +double lefiSpacing_distance (const ::lefiSpacing* obj) { + return ((LefDefParser::lefiSpacing*)obj)->distance(); +} + +void lefiSpacing_print (const ::lefiSpacing* obj, FILE* f) { + ((LefDefParser::lefiSpacing*)obj)->print(f); +} + +const char* lefiIRDrop_name (const ::lefiIRDrop* obj) { + return ((const LefDefParser::lefiIRDrop*)obj)->name(); +} + +double lefiIRDrop_value1 (const ::lefiIRDrop* obj, int index) { + return ((LefDefParser::lefiIRDrop*)obj)->value1(index); +} + +double lefiIRDrop_value2 (const ::lefiIRDrop* obj, int index) { + return ((LefDefParser::lefiIRDrop*)obj)->value2(index); +} + +int lefiIRDrop_numValues (const ::lefiIRDrop* obj) { + return ((LefDefParser::lefiIRDrop*)obj)->numValues(); +} + +void lefiIRDrop_print (const ::lefiIRDrop* obj, FILE* f) { + ((LefDefParser::lefiIRDrop*)obj)->print(f); +} + +double lefiMinFeature_one (const ::lefiMinFeature* obj) { + return ((LefDefParser::lefiMinFeature*)obj)->one(); +} + +double lefiMinFeature_two (const ::lefiMinFeature* obj) { + return ((LefDefParser::lefiMinFeature*)obj)->two(); +} + +void lefiMinFeature_print (const ::lefiMinFeature* obj, FILE* f) { + ((LefDefParser::lefiMinFeature*)obj)->print(f); +} + +const char* lefiSite_name (const ::lefiSite* obj) { + return ((const LefDefParser::lefiSite*)obj)->name(); +} + +int lefiSite_hasClass (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->hasClass(); +} + +const char* lefiSite_siteClass (const ::lefiSite* obj) { + return ((const LefDefParser::lefiSite*)obj)->siteClass(); +} + +double lefiSite_sizeX (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->sizeX(); +} + +double lefiSite_sizeY (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->sizeY(); +} + +int lefiSite_hasSize (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->hasSize(); +} + +int lefiSite_hasXSymmetry (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->hasXSymmetry(); +} + +int lefiSite_hasYSymmetry (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->hasYSymmetry(); +} + +int lefiSite_has90Symmetry (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->has90Symmetry(); +} + +int lefiSite_hasRowPattern (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->hasRowPattern(); +} + +int lefiSite_numSites (const ::lefiSite* obj) { + return ((LefDefParser::lefiSite*)obj)->numSites(); +} + +char* lefiSite_siteName (const ::lefiSite* obj, int index) { + return ((LefDefParser::lefiSite*)obj)->siteName(index); +} + +int lefiSite_siteOrient (const ::lefiSite* obj, int index) { + return ((LefDefParser::lefiSite*)obj)->siteOrient(index); +} + +char* lefiSite_siteOrientStr (const ::lefiSite* obj, int index) { + return ((LefDefParser::lefiSite*)obj)->siteOrientStr(index); +} + +void lefiSite_print (const ::lefiSite* obj, FILE* f) { + ((LefDefParser::lefiSite*)obj)->print(f); +} + +const char* lefiSitePattern_name (const ::lefiSitePattern* obj) { + return ((const LefDefParser::lefiSitePattern*)obj)->name(); +} + +int lefiSitePattern_orient (const ::lefiSitePattern* obj) { + return ((LefDefParser::lefiSitePattern*)obj)->orient(); +} + +const char* lefiSitePattern_orientStr (const ::lefiSitePattern* obj) { + return ((const LefDefParser::lefiSitePattern*)obj)->orientStr(); +} + +double lefiSitePattern_x (const ::lefiSitePattern* obj) { + return ((LefDefParser::lefiSitePattern*)obj)->x(); +} + +double lefiSitePattern_y (const ::lefiSitePattern* obj) { + return ((LefDefParser::lefiSitePattern*)obj)->y(); +} + +int lefiSitePattern_hasStepPattern (const ::lefiSitePattern* obj) { + return ((LefDefParser::lefiSitePattern*)obj)->hasStepPattern(); +} + +double lefiSitePattern_xStart (const ::lefiSitePattern* obj) { + return ((LefDefParser::lefiSitePattern*)obj)->xStart(); +} + +double lefiSitePattern_yStart (const ::lefiSitePattern* obj) { + return ((LefDefParser::lefiSitePattern*)obj)->yStart(); +} + +double lefiSitePattern_xStep (const ::lefiSitePattern* obj) { + return ((LefDefParser::lefiSitePattern*)obj)->xStep(); +} + +double lefiSitePattern_yStep (const ::lefiSitePattern* obj) { + return ((LefDefParser::lefiSitePattern*)obj)->yStep(); +} + +void lefiSitePattern_print (const ::lefiSitePattern* obj, FILE* f) { + ((LefDefParser::lefiSitePattern*)obj)->print(f); +} + +const char* lefiTrackPattern_name (const ::lefiTrackPattern* obj) { + return ((const LefDefParser::lefiTrackPattern*)obj)->name(); +} + +double lefiTrackPattern_start (const ::lefiTrackPattern* obj) { + return ((LefDefParser::lefiTrackPattern*)obj)->start(); +} + +int lefiTrackPattern_numTracks (const ::lefiTrackPattern* obj) { + return ((LefDefParser::lefiTrackPattern*)obj)->numTracks(); +} + +double lefiTrackPattern_space (const ::lefiTrackPattern* obj) { + return ((LefDefParser::lefiTrackPattern*)obj)->space(); +} + +int lefiTrackPattern_numLayers (const ::lefiTrackPattern* obj) { + return ((LefDefParser::lefiTrackPattern*)obj)->numLayers(); +} + +const char* lefiTrackPattern_layerName (const ::lefiTrackPattern* obj, int index) { + return ((const LefDefParser::lefiTrackPattern*)obj)->layerName(index); +} + +void lefiTrackPattern_print (const ::lefiTrackPattern* obj, FILE* f) { + ((LefDefParser::lefiTrackPattern*)obj)->print(f); +} + +const char* lefiGcellPattern_name (const ::lefiGcellPattern* obj) { + return ((const LefDefParser::lefiGcellPattern*)obj)->name(); +} + +double lefiGcellPattern_start (const ::lefiGcellPattern* obj) { + return ((LefDefParser::lefiGcellPattern*)obj)->start(); +} + +int lefiGcellPattern_numCRs (const ::lefiGcellPattern* obj) { + return ((LefDefParser::lefiGcellPattern*)obj)->numCRs(); +} + +double lefiGcellPattern_space (const ::lefiGcellPattern* obj) { + return ((LefDefParser::lefiGcellPattern*)obj)->space(); +} + +void lefiGcellPattern_print (const ::lefiGcellPattern* obj, FILE* f) { + ((LefDefParser::lefiGcellPattern*)obj)->print(f); +} + +const char* lefiUseMinSpacing_name (const ::lefiUseMinSpacing* obj) { + return ((const LefDefParser::lefiUseMinSpacing*)obj)->name(); +} + +int lefiUseMinSpacing_value (const ::lefiUseMinSpacing* obj) { + return ((LefDefParser::lefiUseMinSpacing*)obj)->value(); +} + +void lefiUseMinSpacing_print (const ::lefiUseMinSpacing* obj, FILE* f) { + ((LefDefParser::lefiUseMinSpacing*)obj)->print(f); +} + +int lefiMaxStackVia_maxStackVia (const ::lefiMaxStackVia* obj) { + return ((LefDefParser::lefiMaxStackVia*)obj)->maxStackVia(); +} + +int lefiMaxStackVia_hasMaxStackViaRange (const ::lefiMaxStackVia* obj) { + return ((LefDefParser::lefiMaxStackVia*)obj)->hasMaxStackViaRange(); +} + +const char* lefiMaxStackVia_maxStackViaBottomLayer (const ::lefiMaxStackVia* obj) { + return ((const LefDefParser::lefiMaxStackVia*)obj)->maxStackViaBottomLayer(); +} + +const char* lefiMaxStackVia_maxStackViaTopLayer (const ::lefiMaxStackVia* obj) { + return ((const LefDefParser::lefiMaxStackVia*)obj)->maxStackViaTopLayer(); +} + +void lefiMaxStackVia_print (const ::lefiMaxStackVia* obj, FILE* f) { + ((LefDefParser::lefiMaxStackVia*)obj)->print(f); +} + diff --git a/lefdef/src/lef/clef/xlefiNonDefault.cpp b/lefdef/src/lef/clef/xlefiNonDefault.cpp new file mode 100644 index 00000000..6a3ed308 --- /dev/null +++ b/lefdef/src/lef/clef/xlefiNonDefault.cpp @@ -0,0 +1,183 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiNonDefault.h" +#include "lefiNonDefault.hpp" + +// Wrappers definitions. +const char* lefiNonDefault_name (const ::lefiNonDefault* obj) { + return ((const LefDefParser::lefiNonDefault*)obj)->name(); +} + +int lefiNonDefault_hasHardspacing (const ::lefiNonDefault* obj) { + return ((LefDefParser::lefiNonDefault*)obj)->hasHardspacing(); +} + +int lefiNonDefault_numProps (const ::lefiNonDefault* obj) { + return ((LefDefParser::lefiNonDefault*)obj)->numProps(); +} + +const char* lefiNonDefault_propName (const ::lefiNonDefault* obj, int index) { + return ((const LefDefParser::lefiNonDefault*)obj)->propName(index); +} + +const char* lefiNonDefault_propValue (const ::lefiNonDefault* obj, int index) { + return ((const LefDefParser::lefiNonDefault*)obj)->propValue(index); +} + +double lefiNonDefault_propNumber (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->propNumber(index); +} + +const char lefiNonDefault_propType (const ::lefiNonDefault* obj, int index) { + return ((const LefDefParser::lefiNonDefault*)obj)->propType(index); +} + +int lefiNonDefault_propIsNumber (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->propIsNumber(index); +} + +int lefiNonDefault_propIsString (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->propIsString(index); +} + +int lefiNonDefault_numLayers (const ::lefiNonDefault* obj) { + return ((LefDefParser::lefiNonDefault*)obj)->numLayers(); +} + +const char* lefiNonDefault_layerName (const ::lefiNonDefault* obj, int index) { + return ((const LefDefParser::lefiNonDefault*)obj)->layerName(index); +} + +int lefiNonDefault_hasLayerWidth (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->hasLayerWidth(index); +} + +double lefiNonDefault_layerWidth (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->layerWidth(index); +} + +int lefiNonDefault_hasLayerSpacing (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->hasLayerSpacing(index); +} + +double lefiNonDefault_layerSpacing (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->layerSpacing(index); +} + +int lefiNonDefault_hasLayerWireExtension (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->hasLayerWireExtension(index); +} + +double lefiNonDefault_layerWireExtension (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->layerWireExtension(index); +} + +int lefiNonDefault_hasLayerResistance (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->hasLayerResistance(index); +} + +double lefiNonDefault_layerResistance (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->layerResistance(index); +} + +int lefiNonDefault_hasLayerCapacitance (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->hasLayerCapacitance(index); +} + +double lefiNonDefault_layerCapacitance (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->layerCapacitance(index); +} + +int lefiNonDefault_hasLayerEdgeCap (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->hasLayerEdgeCap(index); +} + +double lefiNonDefault_layerEdgeCap (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->layerEdgeCap(index); +} + +int lefiNonDefault_hasLayerDiagWidth (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->hasLayerDiagWidth(index); +} + +double lefiNonDefault_layerDiagWidth (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->layerDiagWidth(index); +} + +int lefiNonDefault_numVias (const ::lefiNonDefault* obj) { + return ((LefDefParser::lefiNonDefault*)obj)->numVias(); +} + +const ::lefiVia* lefiNonDefault_viaRule (const ::lefiNonDefault* obj, int index) { + return (const ::lefiVia*) ((LefDefParser::lefiNonDefault*)obj)->viaRule(index); +} + +int lefiNonDefault_numSpacingRules (const ::lefiNonDefault* obj) { + return ((LefDefParser::lefiNonDefault*)obj)->numSpacingRules(); +} + +const ::lefiSpacing* lefiNonDefault_spacingRule (const ::lefiNonDefault* obj, int index) { + return (const ::lefiSpacing*) ((LefDefParser::lefiNonDefault*)obj)->spacingRule(index); +} + +int lefiNonDefault_numUseVia (const ::lefiNonDefault* obj) { + return ((LefDefParser::lefiNonDefault*)obj)->numUseVia(); +} + +const char* lefiNonDefault_viaName (const ::lefiNonDefault* obj, int index) { + return ((const LefDefParser::lefiNonDefault*)obj)->viaName(index); +} + +int lefiNonDefault_numUseViaRule (const ::lefiNonDefault* obj) { + return ((LefDefParser::lefiNonDefault*)obj)->numUseViaRule(); +} + +const char* lefiNonDefault_viaRuleName (const ::lefiNonDefault* obj, int index) { + return ((const LefDefParser::lefiNonDefault*)obj)->viaRuleName(index); +} + +int lefiNonDefault_numMinCuts (const ::lefiNonDefault* obj) { + return ((LefDefParser::lefiNonDefault*)obj)->numMinCuts(); +} + +const char* lefiNonDefault_cutLayerName (const ::lefiNonDefault* obj, int index) { + return ((const LefDefParser::lefiNonDefault*)obj)->cutLayerName(index); +} + +int lefiNonDefault_numCuts (const ::lefiNonDefault* obj, int index) { + return ((LefDefParser::lefiNonDefault*)obj)->numCuts(index); +} + diff --git a/lefdef/src/lef/clef/xlefiProp.cpp b/lefdef/src/lef/clef/xlefiProp.cpp new file mode 100644 index 00000000..1ae6ab75 --- /dev/null +++ b/lefdef/src/lef/clef/xlefiProp.cpp @@ -0,0 +1,87 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiProp.h" +#include "lefiProp.hpp" + +// Wrappers definitions. +const char* lefiProp_string (const ::lefiProp* obj) { + return ((const LefDefParser::lefiProp*)obj)->string(); +} + +const char* lefiProp_propType (const ::lefiProp* obj) { + return ((const LefDefParser::lefiProp*)obj)->propType(); +} + +const char* lefiProp_propName (const ::lefiProp* obj) { + return ((const LefDefParser::lefiProp*)obj)->propName(); +} + +char lefiProp_dataType (const ::lefiProp* obj) { + return ((LefDefParser::lefiProp*)obj)->dataType(); +} + +int lefiProp_hasNumber (const ::lefiProp* obj) { + return ((LefDefParser::lefiProp*)obj)->hasNumber(); +} + +int lefiProp_hasRange (const ::lefiProp* obj) { + return ((LefDefParser::lefiProp*)obj)->hasRange(); +} + +int lefiProp_hasString (const ::lefiProp* obj) { + return ((LefDefParser::lefiProp*)obj)->hasString(); +} + +int lefiProp_hasNameMapString (const ::lefiProp* obj) { + return ((LefDefParser::lefiProp*)obj)->hasNameMapString(); +} + +double lefiProp_number (const ::lefiProp* obj) { + return ((LefDefParser::lefiProp*)obj)->number(); +} + +double lefiProp_left (const ::lefiProp* obj) { + return ((LefDefParser::lefiProp*)obj)->left(); +} + +double lefiProp_right (const ::lefiProp* obj) { + return ((LefDefParser::lefiProp*)obj)->right(); +} + +void lefiProp_print (const ::lefiProp* obj, FILE* f) { + ((LefDefParser::lefiProp*)obj)->print(f); +} + diff --git a/lefdef/src/lef/clef/xlefiPropType.cpp b/lefdef/src/lef/clef/xlefiPropType.cpp new file mode 100644 index 00000000..fb1f79a6 --- /dev/null +++ b/lefdef/src/lef/clef/xlefiPropType.cpp @@ -0,0 +1,43 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiPropType.h" +#include "lefiPropType.hpp" + +// Wrappers definitions. +const char lefiPropType_propType (const ::lefiPropType* obj, char* name) { + return ((const LefDefParser::lefiPropType*)obj)->propType(name); +} + diff --git a/lefdef/src/lef/clef/xlefiUnits.cpp b/lefdef/src/lef/clef/xlefiUnits.cpp new file mode 100644 index 00000000..d0d856b1 --- /dev/null +++ b/lefdef/src/lef/clef/xlefiUnits.cpp @@ -0,0 +1,111 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiUnits.h" +#include "lefiUnits.hpp" + +// Wrappers definitions. +int lefiUnits_hasDatabase (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->hasDatabase(); +} + +int lefiUnits_hasCapacitance (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->hasCapacitance(); +} + +int lefiUnits_hasResistance (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->hasResistance(); +} + +int lefiUnits_hasTime (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->hasTime(); +} + +int lefiUnits_hasPower (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->hasPower(); +} + +int lefiUnits_hasCurrent (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->hasCurrent(); +} + +int lefiUnits_hasVoltage (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->hasVoltage(); +} + +int lefiUnits_hasFrequency (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->hasFrequency(); +} + +const char* lefiUnits_databaseName (const ::lefiUnits* obj) { + return ((const LefDefParser::lefiUnits*)obj)->databaseName(); +} + +double lefiUnits_databaseNumber (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->databaseNumber(); +} + +double lefiUnits_capacitance (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->capacitance(); +} + +double lefiUnits_resistance (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->resistance(); +} + +double lefiUnits_time (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->time(); +} + +double lefiUnits_power (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->power(); +} + +double lefiUnits_current (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->current(); +} + +double lefiUnits_voltage (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->voltage(); +} + +double lefiUnits_frequency (const ::lefiUnits* obj) { + return ((LefDefParser::lefiUnits*)obj)->frequency(); +} + +void lefiUnits_print (const ::lefiUnits* obj, FILE* f) { + ((LefDefParser::lefiUnits*)obj)->print(f); +} + diff --git a/lefdef/src/lef/clef/xlefiUtil.cpp b/lefdef/src/lef/clef/xlefiUtil.cpp new file mode 100644 index 00000000..68416f3a --- /dev/null +++ b/lefdef/src/lef/clef/xlefiUtil.cpp @@ -0,0 +1,59 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiUtil.h" +#include "lefiUtil.hpp" + +// Wrappers definitions. +int lefiValidUser () { + return LefDefParser::lefiValidUser(); +} + +char* lefiUser () { + return LefDefParser::lefiUser(); +} + +char* lefiOrientStr (int orient) { + return LefDefParser::lefiOrientStr(orient); +} + +double convert_name2num (const char * versionName) { + return LefDefParser::convert_name2num(versionName); +} + +bool validateMaskNumber (int num) { + return LefDefParser::validateMaskNumber(num); +} + diff --git a/lefdef/src/lef/clef/xlefiVia.cpp b/lefdef/src/lef/clef/xlefiVia.cpp new file mode 100644 index 00000000..03a6c91b --- /dev/null +++ b/lefdef/src/lef/clef/xlefiVia.cpp @@ -0,0 +1,285 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiVia.h" +#include "lefiVia.hpp" + +// Wrappers definitions. +struct ::lefiGeomPolygon* lefiViaLayer_getPolygon (const ::lefiViaLayer* obj, int index) { + return (::lefiGeomPolygon*) ((LefDefParser::lefiViaLayer*)obj)->getPolygon(index); +} + +int lefiVia_hasDefault (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasDefault(); +} + +int lefiVia_hasGenerated (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasGenerated(); +} + +int lefiVia_hasForeign (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasForeign(); +} + +int lefiVia_hasForeignPnt (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasForeignPnt(); +} + +int lefiVia_hasForeignOrient (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasForeignOrient(); +} + +int lefiVia_hasProperties (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasProperties(); +} + +int lefiVia_hasResistance (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasResistance(); +} + +int lefiVia_hasTopOfStack (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasTopOfStack(); +} + +int lefiVia_numLayers (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->numLayers(); +} + +char* lefiVia_layerName (const ::lefiVia* obj, int layerNum) { + return ((LefDefParser::lefiVia*)obj)->layerName(layerNum); +} + +int lefiVia_numRects (const ::lefiVia* obj, int layerNum) { + return ((LefDefParser::lefiVia*)obj)->numRects(layerNum); +} + +double lefiVia_xl (const ::lefiVia* obj, int layerNum, int rectNum) { + return ((LefDefParser::lefiVia*)obj)->xl(layerNum, rectNum); +} + +double lefiVia_yl (const ::lefiVia* obj, int layerNum, int rectNum) { + return ((LefDefParser::lefiVia*)obj)->yl(layerNum, rectNum); +} + +double lefiVia_xh (const ::lefiVia* obj, int layerNum, int rectNum) { + return ((LefDefParser::lefiVia*)obj)->xh(layerNum, rectNum); +} + +double lefiVia_yh (const ::lefiVia* obj, int layerNum, int rectNum) { + return ((LefDefParser::lefiVia*)obj)->yh(layerNum, rectNum); +} + +int lefiVia_rectColorMask (const ::lefiVia* obj, int layerNum, int rectNum) { + return ((LefDefParser::lefiVia*)obj)->rectColorMask(layerNum, rectNum); +} + +int lefiVia_polyColorMask (const ::lefiVia* obj, int layerNum, int polyNum) { + return ((LefDefParser::lefiVia*)obj)->polyColorMask(layerNum, polyNum); +} + +int lefiVia_numPolygons (const ::lefiVia* obj, int layerNum) { + return ((LefDefParser::lefiVia*)obj)->numPolygons(layerNum); +} + +::lefiGeomPolygon lefiVia_getPolygon (const ::lefiVia* obj, int layerNum, int polyNum) { + LefDefParser::lefiGeomPolygon tmp; + tmp = ((LefDefParser::lefiVia*)obj)->getPolygon(layerNum, polyNum); + return *((::lefiGeomPolygon*)&tmp); +} + +char* lefiVia_name (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->name(); +} + +double lefiVia_resistance (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->resistance(); +} + +int lefiVia_numProperties (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->numProperties(); +} + +char* lefiVia_propName (const ::lefiVia* obj, int index) { + return ((LefDefParser::lefiVia*)obj)->propName(index); +} + +char* lefiVia_propValue (const ::lefiVia* obj, int index) { + return ((LefDefParser::lefiVia*)obj)->propValue(index); +} + +double lefiVia_propNumber (const ::lefiVia* obj, int index) { + return ((LefDefParser::lefiVia*)obj)->propNumber(index); +} + +char lefiVia_propType (const ::lefiVia* obj, int index) { + return ((LefDefParser::lefiVia*)obj)->propType(index); +} + +int lefiVia_propIsNumber (const ::lefiVia* obj, int index) { + return ((LefDefParser::lefiVia*)obj)->propIsNumber(index); +} + +int lefiVia_propIsString (const ::lefiVia* obj, int index) { + return ((LefDefParser::lefiVia*)obj)->propIsString(index); +} + +char* lefiVia_foreign (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->foreign(); +} + +double lefiVia_foreignX (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->foreignX(); +} + +double lefiVia_foreignY (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->foreignY(); +} + +int lefiVia_foreignOrient (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->foreignOrient(); +} + +char* lefiVia_foreignOrientStr (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->foreignOrientStr(); +} + +int lefiVia_hasViaRule (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasViaRule(); +} + +const char* lefiVia_viaRuleName (const ::lefiVia* obj) { + return ((const LefDefParser::lefiVia*)obj)->viaRuleName(); +} + +double lefiVia_xCutSize (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->xCutSize(); +} + +double lefiVia_yCutSize (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->yCutSize(); +} + +const char* lefiVia_botMetalLayer (const ::lefiVia* obj) { + return ((const LefDefParser::lefiVia*)obj)->botMetalLayer(); +} + +const char* lefiVia_cutLayer (const ::lefiVia* obj) { + return ((const LefDefParser::lefiVia*)obj)->cutLayer(); +} + +const char* lefiVia_topMetalLayer (const ::lefiVia* obj) { + return ((const LefDefParser::lefiVia*)obj)->topMetalLayer(); +} + +double lefiVia_xCutSpacing (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->xCutSpacing(); +} + +double lefiVia_yCutSpacing (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->yCutSpacing(); +} + +double lefiVia_xBotEnc (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->xBotEnc(); +} + +double lefiVia_yBotEnc (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->yBotEnc(); +} + +double lefiVia_xTopEnc (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->xTopEnc(); +} + +double lefiVia_yTopEnc (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->yTopEnc(); +} + +int lefiVia_hasRowCol (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasRowCol(); +} + +int lefiVia_numCutRows (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->numCutRows(); +} + +int lefiVia_numCutCols (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->numCutCols(); +} + +int lefiVia_hasOrigin (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasOrigin(); +} + +double lefiVia_xOffset (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->xOffset(); +} + +double lefiVia_yOffset (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->yOffset(); +} + +int lefiVia_hasOffset (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasOffset(); +} + +double lefiVia_xBotOffset (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->xBotOffset(); +} + +double lefiVia_yBotOffset (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->yBotOffset(); +} + +double lefiVia_xTopOffset (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->xTopOffset(); +} + +double lefiVia_yTopOffset (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->yTopOffset(); +} + +int lefiVia_hasCutPattern (const ::lefiVia* obj) { + return ((LefDefParser::lefiVia*)obj)->hasCutPattern(); +} + +const char* lefiVia_cutPattern (const ::lefiVia* obj) { + return ((const LefDefParser::lefiVia*)obj)->cutPattern(); +} + +void lefiVia_print (const ::lefiVia* obj, FILE* f) { + ((LefDefParser::lefiVia*)obj)->print(f); +} + diff --git a/lefdef/src/lef/clef/xlefiViaRule.cpp b/lefdef/src/lef/clef/xlefiViaRule.cpp new file mode 100644 index 00000000..d3412632 --- /dev/null +++ b/lefdef/src/lef/clef/xlefiViaRule.cpp @@ -0,0 +1,199 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefiViaRule.h" +#include "lefiViaRule.hpp" + +// Wrappers definitions. +int lefiViaRuleLayer_hasDirection (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->hasDirection(); +} + +int lefiViaRuleLayer_hasEnclosure (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->hasEnclosure(); +} + +int lefiViaRuleLayer_hasWidth (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->hasWidth(); +} + +int lefiViaRuleLayer_hasResistance (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->hasResistance(); +} + +int lefiViaRuleLayer_hasOverhang (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->hasOverhang(); +} + +int lefiViaRuleLayer_hasMetalOverhang (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->hasMetalOverhang(); +} + +int lefiViaRuleLayer_hasSpacing (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->hasSpacing(); +} + +int lefiViaRuleLayer_hasRect (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->hasRect(); +} + +char* lefiViaRuleLayer_name (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->name(); +} + +int lefiViaRuleLayer_isHorizontal (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->isHorizontal(); +} + +int lefiViaRuleLayer_isVertical (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->isVertical(); +} + +double lefiViaRuleLayer_enclosureOverhang1 (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->enclosureOverhang1(); +} + +double lefiViaRuleLayer_enclosureOverhang2 (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->enclosureOverhang2(); +} + +double lefiViaRuleLayer_widthMin (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->widthMin(); +} + +double lefiViaRuleLayer_widthMax (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->widthMax(); +} + +double lefiViaRuleLayer_overhang (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->overhang(); +} + +double lefiViaRuleLayer_metalOverhang (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->metalOverhang(); +} + +double lefiViaRuleLayer_resistance (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->resistance(); +} + +double lefiViaRuleLayer_spacingStepX (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->spacingStepX(); +} + +double lefiViaRuleLayer_spacingStepY (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->spacingStepY(); +} + +double lefiViaRuleLayer_xl (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->xl(); +} + +double lefiViaRuleLayer_yl (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->yl(); +} + +double lefiViaRuleLayer_xh (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->xh(); +} + +double lefiViaRuleLayer_yh (const ::lefiViaRuleLayer* obj) { + return ((LefDefParser::lefiViaRuleLayer*)obj)->yh(); +} + +void lefiViaRuleLayer_print (const ::lefiViaRuleLayer* obj, FILE* f) { + ((LefDefParser::lefiViaRuleLayer*)obj)->print(f); +} + +int lefiViaRule_hasGenerate (const ::lefiViaRule* obj) { + return ((LefDefParser::lefiViaRule*)obj)->hasGenerate(); +} + +int lefiViaRule_hasDefault (const ::lefiViaRule* obj) { + return ((LefDefParser::lefiViaRule*)obj)->hasDefault(); +} + +char* lefiViaRule_name (const ::lefiViaRule* obj) { + return ((LefDefParser::lefiViaRule*)obj)->name(); +} + +int lefiViaRule_numLayers (const ::lefiViaRule* obj) { + return ((LefDefParser::lefiViaRule*)obj)->numLayers(); +} + +const ::lefiViaRuleLayer* lefiViaRule_layer (const ::lefiViaRule* obj, int index) { + return (const ::lefiViaRuleLayer*) ((LefDefParser::lefiViaRule*)obj)->layer(index); +} + +int lefiViaRule_numVias (const ::lefiViaRule* obj) { + return ((LefDefParser::lefiViaRule*)obj)->numVias(); +} + +char* lefiViaRule_viaName (const ::lefiViaRule* obj, int index) { + return ((LefDefParser::lefiViaRule*)obj)->viaName(index); +} + +int lefiViaRule_numProps (const ::lefiViaRule* obj) { + return ((LefDefParser::lefiViaRule*)obj)->numProps(); +} + +const char* lefiViaRule_propName (const ::lefiViaRule* obj, int index) { + return ((const LefDefParser::lefiViaRule*)obj)->propName(index); +} + +const char* lefiViaRule_propValue (const ::lefiViaRule* obj, int index) { + return ((const LefDefParser::lefiViaRule*)obj)->propValue(index); +} + +double lefiViaRule_propNumber (const ::lefiViaRule* obj, int index) { + return ((LefDefParser::lefiViaRule*)obj)->propNumber(index); +} + +const char lefiViaRule_propType (const ::lefiViaRule* obj, int index) { + return ((const LefDefParser::lefiViaRule*)obj)->propType(index); +} + +int lefiViaRule_propIsNumber (const ::lefiViaRule* obj, int index) { + return ((LefDefParser::lefiViaRule*)obj)->propIsNumber(index); +} + +int lefiViaRule_propIsString (const ::lefiViaRule* obj, int index) { + return ((LefDefParser::lefiViaRule*)obj)->propIsString(index); +} + +void lefiViaRule_print (const ::lefiViaRule* obj, FILE* f) { + ((LefDefParser::lefiViaRule*)obj)->print(f); +} + diff --git a/lefdef/src/lef/clef/xlefrReader.cpp b/lefdef/src/lef/clef/xlefrReader.cpp new file mode 100644 index 00000000..13e2f658 --- /dev/null +++ b/lefdef/src/lef/clef/xlefrReader.cpp @@ -0,0 +1,751 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: xxx $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefrReader.h" +#include "lefrReader.hpp" + +// Wrappers definitions. +int lefrInit () { + return LefDefParser::lefrInit(); +} + +int lefrInitSession (int startSession) { + return LefDefParser::lefrInitSession(startSession); +} + +int lefrReset () { + return LefDefParser::lefrReset(); +} + +int lefrClear () { + return LefDefParser::lefrClear(); +} + +int lefrReleaseNResetMemory () { + return LefDefParser::lefrReleaseNResetMemory(); +} + +void lefrSetCommentChar (char c) { + LefDefParser::lefrSetCommentChar(c); +} + +void lefrSetShiftCase () { + LefDefParser::lefrSetShiftCase(); +} + +void lefrSetCaseSensitivity (int caseSense) { + LefDefParser::lefrSetCaseSensitivity(caseSense); +} + +const char * lefrFName () { + return LefDefParser::lefrFName(); +} + +int lefrRead (FILE * file, const char * fileName, lefiUserData userData) { + return LefDefParser::lefrRead(file, fileName, userData); +} + +void lefrSetRegisterUnusedCallbacks () { + LefDefParser::lefrSetRegisterUnusedCallbacks(); +} + +void lefrPrintUnusedCallbacks (FILE* f) { + LefDefParser::lefrPrintUnusedCallbacks(f); +} + +void lefrSetUserData (lefiUserData p0) { + LefDefParser::lefrSetUserData(p0); +} + +lefiUserData lefrGetUserData () { + return LefDefParser::lefrGetUserData(); +} + +void lefrSetUnitsCbk (::lefrUnitsCbkFnType p0) { + LefDefParser::lefrSetUnitsCbk((LefDefParser::lefrUnitsCbkFnType) p0); +} + +void lefrSetVersionCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetVersionCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetVersionStrCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetVersionStrCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetDividerCharCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetDividerCharCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetBusBitCharsCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetBusBitCharsCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetNoWireExtensionCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetNoWireExtensionCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetCaseSensitiveCbk (::lefrIntegerCbkFnType p0) { + LefDefParser::lefrSetCaseSensitiveCbk((LefDefParser::lefrIntegerCbkFnType) p0); +} + +void lefrSetPropBeginCbk (::lefrVoidCbkFnType p0) { + LefDefParser::lefrSetPropBeginCbk((LefDefParser::lefrVoidCbkFnType) p0); +} + +void lefrSetPropCbk (::lefrPropCbkFnType p0) { + LefDefParser::lefrSetPropCbk((LefDefParser::lefrPropCbkFnType) p0); +} + +void lefrSetPropEndCbk (::lefrVoidCbkFnType p0) { + LefDefParser::lefrSetPropEndCbk((LefDefParser::lefrVoidCbkFnType) p0); +} + +void lefrSetLayerCbk (::lefrLayerCbkFnType p0) { + LefDefParser::lefrSetLayerCbk((LefDefParser::lefrLayerCbkFnType) p0); +} + +void lefrSetViaCbk (::lefrViaCbkFnType p0) { + LefDefParser::lefrSetViaCbk((LefDefParser::lefrViaCbkFnType) p0); +} + +void lefrSetViaRuleCbk (::lefrViaRuleCbkFnType p0) { + LefDefParser::lefrSetViaRuleCbk((LefDefParser::lefrViaRuleCbkFnType) p0); +} + +void lefrSetSpacingCbk (::lefrSpacingCbkFnType p0) { + LefDefParser::lefrSetSpacingCbk((LefDefParser::lefrSpacingCbkFnType) p0); +} + +void lefrSetIRDropCbk (::lefrIRDropCbkFnType p0) { + LefDefParser::lefrSetIRDropCbk((LefDefParser::lefrIRDropCbkFnType) p0); +} + +void lefrSetDielectricCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetDielectricCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetMinFeatureCbk (::lefrMinFeatureCbkFnType p0) { + LefDefParser::lefrSetMinFeatureCbk((LefDefParser::lefrMinFeatureCbkFnType) p0); +} + +void lefrSetNonDefaultCbk (::lefrNonDefaultCbkFnType p0) { + LefDefParser::lefrSetNonDefaultCbk((LefDefParser::lefrNonDefaultCbkFnType) p0); +} + +void lefrSetSiteCbk (::lefrSiteCbkFnType p0) { + LefDefParser::lefrSetSiteCbk((LefDefParser::lefrSiteCbkFnType) p0); +} + +void lefrSetMacroBeginCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetMacroBeginCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetPinCbk (::lefrPinCbkFnType p0) { + LefDefParser::lefrSetPinCbk((LefDefParser::lefrPinCbkFnType) p0); +} + +void lefrSetObstructionCbk (::lefrObstructionCbkFnType p0) { + LefDefParser::lefrSetObstructionCbk((LefDefParser::lefrObstructionCbkFnType) p0); +} + +void lefrSetArrayCbk (::lefrArrayCbkFnType p0) { + LefDefParser::lefrSetArrayCbk((LefDefParser::lefrArrayCbkFnType) p0); +} + +void lefrSetMacroCbk (::lefrMacroCbkFnType p0) { + LefDefParser::lefrSetMacroCbk((LefDefParser::lefrMacroCbkFnType) p0); +} + +void lefrSetLibraryEndCbk (::lefrVoidCbkFnType p0) { + LefDefParser::lefrSetLibraryEndCbk((LefDefParser::lefrVoidCbkFnType) p0); +} + +void lefrSetTimingCbk (::lefrTimingCbkFnType p0) { + LefDefParser::lefrSetTimingCbk((LefDefParser::lefrTimingCbkFnType) p0); +} + +void lefrSetSpacingBeginCbk (::lefrVoidCbkFnType p0) { + LefDefParser::lefrSetSpacingBeginCbk((LefDefParser::lefrVoidCbkFnType) p0); +} + +void lefrSetSpacingEndCbk (::lefrVoidCbkFnType p0) { + LefDefParser::lefrSetSpacingEndCbk((LefDefParser::lefrVoidCbkFnType) p0); +} + +void lefrSetArrayBeginCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetArrayBeginCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetArrayEndCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetArrayEndCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetIRDropBeginCbk (::lefrVoidCbkFnType p0) { + LefDefParser::lefrSetIRDropBeginCbk((LefDefParser::lefrVoidCbkFnType) p0); +} + +void lefrSetIRDropEndCbk (::lefrVoidCbkFnType p0) { + LefDefParser::lefrSetIRDropEndCbk((LefDefParser::lefrVoidCbkFnType) p0); +} + +void lefrSetNoiseMarginCbk (::lefrNoiseMarginCbkFnType p0) { + LefDefParser::lefrSetNoiseMarginCbk((LefDefParser::lefrNoiseMarginCbkFnType) p0); +} + +void lefrSetEdgeRateThreshold1Cbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetEdgeRateThreshold1Cbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetEdgeRateThreshold2Cbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetEdgeRateThreshold2Cbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetEdgeRateScaleFactorCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetEdgeRateScaleFactorCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetNoiseTableCbk (::lefrNoiseTableCbkFnType p0) { + LefDefParser::lefrSetNoiseTableCbk((LefDefParser::lefrNoiseTableCbkFnType) p0); +} + +void lefrSetCorrectionTableCbk (::lefrCorrectionTableCbkFnType p0) { + LefDefParser::lefrSetCorrectionTableCbk((LefDefParser::lefrCorrectionTableCbkFnType) p0); +} + +void lefrSetInputAntennaCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetInputAntennaCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetOutputAntennaCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetOutputAntennaCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetInoutAntennaCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetInoutAntennaCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetAntennaInputCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetAntennaInputCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetAntennaInoutCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetAntennaInoutCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetAntennaOutputCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetAntennaOutputCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetClearanceMeasureCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetClearanceMeasureCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetManufacturingCbk (::lefrDoubleCbkFnType p0) { + LefDefParser::lefrSetManufacturingCbk((LefDefParser::lefrDoubleCbkFnType) p0); +} + +void lefrSetUseMinSpacingCbk (::lefrUseMinSpacingCbkFnType p0) { + LefDefParser::lefrSetUseMinSpacingCbk((LefDefParser::lefrUseMinSpacingCbkFnType) p0); +} + +void lefrSetMacroClassTypeCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetMacroClassTypeCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetMacroOriginCbk (::lefrMacroNumCbkFnType p0) { + LefDefParser::lefrSetMacroOriginCbk((LefDefParser::lefrMacroNumCbkFnType) p0); +} + +void lefrSetMacroSizeCbk (::lefrMacroNumCbkFnType p0) { + LefDefParser::lefrSetMacroSizeCbk((LefDefParser::lefrMacroNumCbkFnType) p0); +} + +void lefrSetMacroFixedMaskCbk (::lefrIntegerCbkFnType p0) { + LefDefParser::lefrSetMacroFixedMaskCbk((LefDefParser::lefrIntegerCbkFnType) p0); +} + +void lefrSetMacroEndCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetMacroEndCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetMaxStackViaCbk (::lefrMaxStackViaCbkFnType p0) { + LefDefParser::lefrSetMaxStackViaCbk((LefDefParser::lefrMaxStackViaCbkFnType) p0); +} + +void lefrSetExtensionCbk (::lefrStringCbkFnType p0) { + LefDefParser::lefrSetExtensionCbk((LefDefParser::lefrStringCbkFnType) p0); +} + +void lefrSetDensityCbk (::lefrDensityCbkFnType p0) { + LefDefParser::lefrSetDensityCbk((LefDefParser::lefrDensityCbkFnType) p0); +} + +void lefrSetFixedMaskCbk (::lefrIntegerCbkFnType p0) { + LefDefParser::lefrSetFixedMaskCbk((LefDefParser::lefrIntegerCbkFnType) p0); +} + +void lefrSetUnusedCallbacks (::lefrVoidCbkFnType func) { + LefDefParser::lefrSetUnusedCallbacks((LefDefParser::lefrVoidCbkFnType ) func); +} + +void lefrUnsetCallbacks () { + LefDefParser::lefrUnsetCallbacks(); +} + +void lefrUnsetAntennaInputCbk () { + LefDefParser::lefrUnsetAntennaInputCbk(); +} + +void lefrUnsetAntennaInoutCbk () { + LefDefParser::lefrUnsetAntennaInoutCbk(); +} + +void lefrUnsetAntennaOutputCbk () { + LefDefParser::lefrUnsetAntennaOutputCbk(); +} + +void lefrUnsetArrayBeginCbk () { + LefDefParser::lefrUnsetArrayBeginCbk(); +} + +void lefrUnsetArrayCbk () { + LefDefParser::lefrUnsetArrayCbk(); +} + +void lefrUnsetArrayEndCbk () { + LefDefParser::lefrUnsetArrayEndCbk(); +} + +void lefrUnsetBusBitCharsCbk () { + LefDefParser::lefrUnsetBusBitCharsCbk(); +} + +void lefrUnsetCaseSensitiveCbk () { + LefDefParser::lefrUnsetCaseSensitiveCbk(); +} + +void lefrUnsetClearanceMeasureCbk () { + LefDefParser::lefrUnsetClearanceMeasureCbk(); +} + +void lefrUnsetCorrectionTableCbk () { + LefDefParser::lefrUnsetCorrectionTableCbk(); +} + +void lefrUnsetDensityCbk () { + LefDefParser::lefrUnsetDensityCbk(); +} + +void lefrUnsetDielectricCbk () { + LefDefParser::lefrUnsetDielectricCbk(); +} + +void lefrUnsetDividerCharCbk () { + LefDefParser::lefrUnsetDividerCharCbk(); +} + +void lefrUnsetEdgeRateScaleFactorCbk () { + LefDefParser::lefrUnsetEdgeRateScaleFactorCbk(); +} + +void lefrUnsetEdgeRateThreshold1Cbk () { + LefDefParser::lefrUnsetEdgeRateThreshold1Cbk(); +} + +void lefrUnsetEdgeRateThreshold2Cbk () { + LefDefParser::lefrUnsetEdgeRateThreshold2Cbk(); +} + +void lefrUnsetExtensionCbk () { + LefDefParser::lefrUnsetExtensionCbk(); +} + +void lefrUnsetInoutAntennaCbk () { + LefDefParser::lefrUnsetInoutAntennaCbk(); +} + +void lefrUnsetInputAntennaCbk () { + LefDefParser::lefrUnsetInputAntennaCbk(); +} + +void lefrUnsetIRDropBeginCbk () { + LefDefParser::lefrUnsetIRDropBeginCbk(); +} + +void lefrUnsetIRDropCbk () { + LefDefParser::lefrUnsetIRDropCbk(); +} + +void lefrUnsetIRDropEndCbk () { + LefDefParser::lefrUnsetIRDropEndCbk(); +} + +void lefrUnsetLayerCbk () { + LefDefParser::lefrUnsetLayerCbk(); +} + +void lefrUnsetLibraryEndCbk () { + LefDefParser::lefrUnsetLibraryEndCbk(); +} + +void lefrUnsetMacroBeginCbk () { + LefDefParser::lefrUnsetMacroBeginCbk(); +} + +void lefrUnsetMacroCbk () { + LefDefParser::lefrUnsetMacroCbk(); +} + +void lefrUnsetMacroClassTypeCbk () { + LefDefParser::lefrUnsetMacroClassTypeCbk(); +} + +void lefrUnsetMacroEndCbk () { + LefDefParser::lefrUnsetMacroEndCbk(); +} + +void lefrUnsetMacroOriginCbk () { + LefDefParser::lefrUnsetMacroOriginCbk(); +} + +void lefrUnsetMacroSizeCbk () { + LefDefParser::lefrUnsetMacroSizeCbk(); +} + +void lefrUnsetManufacturingCbk () { + LefDefParser::lefrUnsetManufacturingCbk(); +} + +void lefrUnsetMaxStackViaCbk () { + LefDefParser::lefrUnsetMaxStackViaCbk(); +} + +void lefrUnsetMinFeatureCbk () { + LefDefParser::lefrUnsetMinFeatureCbk(); +} + +void lefrUnsetNoiseMarginCbk () { + LefDefParser::lefrUnsetNoiseMarginCbk(); +} + +void lefrUnsetNoiseTableCbk () { + LefDefParser::lefrUnsetNoiseTableCbk(); +} + +void lefrUnsetNonDefaultCbk () { + LefDefParser::lefrUnsetNonDefaultCbk(); +} + +void lefrUnsetNoWireExtensionCbk () { + LefDefParser::lefrUnsetNoWireExtensionCbk(); +} + +void lefrUnsetObstructionCbk () { + LefDefParser::lefrUnsetObstructionCbk(); +} + +void lefrUnsetOutputAntennaCbk () { + LefDefParser::lefrUnsetOutputAntennaCbk(); +} + +void lefrUnsetPinCbk () { + LefDefParser::lefrUnsetPinCbk(); +} + +void lefrUnsetPropBeginCbk () { + LefDefParser::lefrUnsetPropBeginCbk(); +} + +void lefrUnsetPropCbk () { + LefDefParser::lefrUnsetPropCbk(); +} + +void lefrUnsetPropEndCbk () { + LefDefParser::lefrUnsetPropEndCbk(); +} + +void lefrUnsetSiteCbk () { + LefDefParser::lefrUnsetSiteCbk(); +} + +void lefrUnsetSpacingBeginCbk () { + LefDefParser::lefrUnsetSpacingBeginCbk(); +} + +void lefrUnsetSpacingCbk () { + LefDefParser::lefrUnsetSpacingCbk(); +} + +void lefrUnsetSpacingEndCbk () { + LefDefParser::lefrUnsetSpacingEndCbk(); +} + +void lefrUnsetTimingCbk () { + LefDefParser::lefrUnsetTimingCbk(); +} + +void lefrUnsetUseMinSpacingCbk () { + LefDefParser::lefrUnsetUseMinSpacingCbk(); +} + +void lefrUnsetUnitsCbk () { + LefDefParser::lefrUnsetUnitsCbk(); +} + +void lefrUnsetVersionCbk () { + LefDefParser::lefrUnsetVersionCbk(); +} + +void lefrUnsetVersionStrCbk () { + LefDefParser::lefrUnsetVersionStrCbk(); +} + +void lefrUnsetViaCbk () { + LefDefParser::lefrUnsetViaCbk(); +} + +void lefrUnsetViaRuleCbk () { + LefDefParser::lefrUnsetViaRuleCbk(); +} + +int lefrLineNumber () { + return LefDefParser::lefrLineNumber(); +} + +void lefrSetLogFunction (::LEFI_LOG_FUNCTION p0) { + LefDefParser::lefrSetLogFunction(p0); +} + +void lefrSetWarningLogFunction (::LEFI_WARNING_LOG_FUNCTION p0) { + LefDefParser::lefrSetWarningLogFunction(p0); +} + +void lefrSetMallocFunction (::LEFI_MALLOC_FUNCTION p0) { + LefDefParser::lefrSetMallocFunction(p0); +} + +void lefrSetReallocFunction (::LEFI_REALLOC_FUNCTION p0) { + LefDefParser::lefrSetReallocFunction(p0); +} + +void lefrSetFreeFunction (::LEFI_FREE_FUNCTION p0) { + LefDefParser::lefrSetFreeFunction(p0); +} + +void lefrSetLineNumberFunction (::LEFI_LINE_NUMBER_FUNCTION p0) { + LefDefParser::lefrSetLineNumberFunction(p0); +} + +void lefrSetDeltaNumberLines (int p0) { + LefDefParser::lefrSetDeltaNumberLines(p0); +} + +void lefrSetRelaxMode () { + LefDefParser::lefrSetRelaxMode(); +} + +void lefrUnsetRelaxMode () { + LefDefParser::lefrUnsetRelaxMode(); +} + +void lefrSetVersionValue (const char* version) { + LefDefParser::lefrSetVersionValue(version); +} + +void lefrSetReadFunction (::LEFI_READ_FUNCTION p0) { + LefDefParser::lefrSetReadFunction(p0); +} + +void lefrUnsetReadFunction () { + LefDefParser::lefrUnsetReadFunction(); +} + +void lefrSetOpenLogFileAppend () { + LefDefParser::lefrSetOpenLogFileAppend(); +} + +void lefrUnsetOpenLogFileAppend () { + LefDefParser::lefrUnsetOpenLogFileAppend(); +} + +void lefrDisablePropStrProcess () { + LefDefParser::lefrDisablePropStrProcess(); +} + +void lefrSetAntennaInoutWarnings (int warn) { + LefDefParser::lefrSetAntennaInoutWarnings(warn); +} + +void lefrSetAntennaInputWarnings (int warn) { + LefDefParser::lefrSetAntennaInputWarnings(warn); +} + +void lefrSetAntennaOutputWarnings (int warn) { + LefDefParser::lefrSetAntennaOutputWarnings(warn); +} + +void lefrSetArrayWarnings (int warn) { + LefDefParser::lefrSetArrayWarnings(warn); +} + +void lefrSetCaseSensitiveWarnings (int warn) { + LefDefParser::lefrSetCaseSensitiveWarnings(warn); +} + +void lefrSetCorrectionTableWarnings (int warn) { + LefDefParser::lefrSetCorrectionTableWarnings(warn); +} + +void lefrSetDielectricWarnings (int warn) { + LefDefParser::lefrSetDielectricWarnings(warn); +} + +void lefrSetEdgeRateThreshold1Warnings (int warn) { + LefDefParser::lefrSetEdgeRateThreshold1Warnings(warn); +} + +void lefrSetEdgeRateThreshold2Warnings (int warn) { + LefDefParser::lefrSetEdgeRateThreshold2Warnings(warn); +} + +void lefrSetEdgeRateScaleFactorWarnings (int warn) { + LefDefParser::lefrSetEdgeRateScaleFactorWarnings(warn); +} + +void lefrSetInoutAntennaWarnings (int warn) { + LefDefParser::lefrSetInoutAntennaWarnings(warn); +} + +void lefrSetInputAntennaWarnings (int warn) { + LefDefParser::lefrSetInputAntennaWarnings(warn); +} + +void lefrSetIRDropWarnings (int warn) { + LefDefParser::lefrSetIRDropWarnings(warn); +} + +void lefrSetLayerWarnings (int warn) { + LefDefParser::lefrSetLayerWarnings(warn); +} + +void lefrSetMacroWarnings (int warn) { + LefDefParser::lefrSetMacroWarnings(warn); +} + +void lefrSetMaxStackViaWarnings (int warn) { + LefDefParser::lefrSetMaxStackViaWarnings(warn); +} + +void lefrSetMinFeatureWarnings (int warn) { + LefDefParser::lefrSetMinFeatureWarnings(warn); +} + +void lefrSetNoiseMarginWarnings (int warn) { + LefDefParser::lefrSetNoiseMarginWarnings(warn); +} + +void lefrSetNoiseTableWarnings (int warn) { + LefDefParser::lefrSetNoiseTableWarnings(warn); +} + +void lefrSetNonDefaultWarnings (int warn) { + LefDefParser::lefrSetNonDefaultWarnings(warn); +} + +void lefrSetNoWireExtensionWarnings (int warn) { + LefDefParser::lefrSetNoWireExtensionWarnings(warn); +} + +void lefrSetOutputAntennaWarnings (int warn) { + LefDefParser::lefrSetOutputAntennaWarnings(warn); +} + +void lefrSetPinWarnings (int warn) { + LefDefParser::lefrSetPinWarnings(warn); +} + +void lefrSetSiteWarnings (int warn) { + LefDefParser::lefrSetSiteWarnings(warn); +} + +void lefrSetSpacingWarnings (int warn) { + LefDefParser::lefrSetSpacingWarnings(warn); +} + +void lefrSetTimingWarnings (int warn) { + LefDefParser::lefrSetTimingWarnings(warn); +} + +void lefrSetUnitsWarnings (int warn) { + LefDefParser::lefrSetUnitsWarnings(warn); +} + +void lefrSetUseMinSpacingWarnings (int warn) { + LefDefParser::lefrSetUseMinSpacingWarnings(warn); +} + +void lefrSetViaRuleWarnings (int warn) { + LefDefParser::lefrSetViaRuleWarnings(warn); +} + +void lefrSetViaWarnings (int warn) { + LefDefParser::lefrSetViaWarnings(warn); +} + +void lefrDisableParserMsgs (int nMsg, int* msgs) { + LefDefParser::lefrDisableParserMsgs(nMsg, msgs); +} + +void lefrEnableParserMsgs (int nMsg, int* msgs) { + LefDefParser::lefrEnableParserMsgs(nMsg, msgs); +} + +void lefrEnableAllMsgs () { + LefDefParser::lefrEnableAllMsgs(); +} + +void lefrDisableAllMsgs () { + LefDefParser::lefrDisableAllMsgs(); +} + +void lefrSetTotalMsgLimit (int totNumMsgs) { + LefDefParser::lefrSetTotalMsgLimit(totNumMsgs); +} + +void lefrSetLimitPerMsg (int msgId, int numMsg) { + LefDefParser::lefrSetLimitPerMsg(msgId, numMsg); +} + diff --git a/lefdef/src/lef/clef/xlefwWriter.cpp b/lefdef/src/lef/clef/xlefwWriter.cpp new file mode 100644 index 00000000..cffd9411 --- /dev/null +++ b/lefdef/src/lef/clef/xlefwWriter.cpp @@ -0,0 +1,1303 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefwWriter.h" +#include "lefwWriter.hpp" + +// Wrappers definitions. +int lefwInit (FILE* f) { + return LefDefParser::lefwInit(f); +} + +int lefwInitCbk (FILE* f) { + return LefDefParser::lefwInitCbk(f); +} + +int lefwEncrypt () { + return LefDefParser::lefwEncrypt(); +} + +int lefwCloseEncrypt () { + return LefDefParser::lefwCloseEncrypt(); +} + +int lefwNewLine () { + return LefDefParser::lefwNewLine(); +} + +int lefwVersion (int vers1, int vers2) { + return LefDefParser::lefwVersion(vers1, vers2); +} + +int lefwCaseSensitive (const char* caseSensitive) { + return LefDefParser::lefwCaseSensitive(caseSensitive); +} + +int lefwNoWireExtensionAtPin (const char* noWireExt) { + return LefDefParser::lefwNoWireExtensionAtPin(noWireExt); +} + +int lefwMinfeature (double minFeatureX, double minFeatureY) { + return LefDefParser::lefwMinfeature(minFeatureX, minFeatureY); +} + +int lefwDielectric (double dielectric) { + return LefDefParser::lefwDielectric(dielectric); +} + +int lefwBusBitChars (const char* busBitChars) { + return LefDefParser::lefwBusBitChars(busBitChars); +} + +int lefwDividerChar (const char* dividerChar) { + return LefDefParser::lefwDividerChar(dividerChar); +} + +int lefwManufacturingGrid (double grid) { + return LefDefParser::lefwManufacturingGrid(grid); +} + +int lefwFixedMask () { + return LefDefParser::lefwFixedMask(); +} + +int lefwUseMinSpacing (const char* type, const char* onOff) { + return LefDefParser::lefwUseMinSpacing(type, onOff); +} + +int lefwClearanceMeasure (const char* type) { + return LefDefParser::lefwClearanceMeasure(type); +} + +int lefwAntennaInputGateArea (double inputGateArea) { + return LefDefParser::lefwAntennaInputGateArea(inputGateArea); +} + +int lefwAntennaInOutDiffArea (double inOutDiffArea) { + return LefDefParser::lefwAntennaInOutDiffArea(inOutDiffArea); +} + +int lefwAntennaOutputDiffArea (double outputDiffArea) { + return LefDefParser::lefwAntennaOutputDiffArea(outputDiffArea); +} + +int lefwStartUnits () { + return LefDefParser::lefwStartUnits(); +} + +int lefwUnits (double time, double capacitance, double resistance, double power, double current, double voltage, double database) { + return LefDefParser::lefwUnits(time, capacitance, resistance, power, current, voltage, database); +} + +int lefwUnitsFrequency (double frequency) { + return LefDefParser::lefwUnitsFrequency(frequency); +} + +int lefwEndUnits () { + return LefDefParser::lefwEndUnits(); +} + +int lefwStartLayer (const char* layerName, const char* type) { + return LefDefParser::lefwStartLayer(layerName, type); +} + +int lefwLayerMask (int maskColor) { + return LefDefParser::lefwLayerMask(maskColor); +} + +int lefwLayerWidth (double minWidth) { + return LefDefParser::lefwLayerWidth(minWidth); +} + +int lefwLayerCutSpacing (double spacing) { + return LefDefParser::lefwLayerCutSpacing(spacing); +} + +int lefwLayerCutSpacingCenterToCenter () { + return LefDefParser::lefwLayerCutSpacingCenterToCenter(); +} + +int lefwLayerCutSpacingSameNet () { + return LefDefParser::lefwLayerCutSpacingSameNet(); +} + +int lefwLayerCutSpacingLayer (const char* name2, int stack) { + return LefDefParser::lefwLayerCutSpacingLayer(name2, stack); +} + +int lefwLayerCutSpacingAdjacent (int viaCuts, double distance, int stack) { + return LefDefParser::lefwLayerCutSpacingAdjacent(viaCuts, distance, stack); +} + +int lefwLayerCutSpacingParallel () { + return LefDefParser::lefwLayerCutSpacingParallel(); +} + +int lefwLayerCutSpacingArea (double cutArea) { + return LefDefParser::lefwLayerCutSpacingArea(cutArea); +} + +int lefwLayerCutSpacingEnd () { + return LefDefParser::lefwLayerCutSpacingEnd(); +} + +int lefwLayerCutSpacingTableOrtho (int numSpacing, double* cutWithins, double* orthoSpacings) { + return LefDefParser::lefwLayerCutSpacingTableOrtho(numSpacing, cutWithins, orthoSpacings); +} + +int lefwLayerArraySpacing (int longArray, double viaWidth, double cutSpacing, int numArrayCut, int* arrayCuts, double* arraySpacings) { + return LefDefParser::lefwLayerArraySpacing(longArray, viaWidth, cutSpacing, numArrayCut, arrayCuts, arraySpacings); +} + +int lefwLayerEnclosure (const char* location, double overhang1, double overhang2, double width) { + return LefDefParser::lefwLayerEnclosure(location, overhang1, overhang2, width); +} + +int lefwLayerEnclosureWidth (const char* location, double overhang1, double overhang2, double width, double cutWithin) { + return LefDefParser::lefwLayerEnclosureWidth(location, overhang1, overhang2, width, cutWithin); +} + +int lefwLayerEnclosureLength (const char* location, double overhang1, double overhang2, double minLength) { + return LefDefParser::lefwLayerEnclosureLength(location, overhang1, overhang2, minLength); +} + +int lefwLayerPreferEnclosure (const char* location, double overhang1, double overhang2, double width) { + return LefDefParser::lefwLayerPreferEnclosure(location, overhang1, overhang2, width); +} + +int lefwLayerResistancePerCut (double resistance) { + return LefDefParser::lefwLayerResistancePerCut(resistance); +} + +int lefwEndLayer (const char* layerName) { + return LefDefParser::lefwEndLayer(layerName); +} + +int lefwStartLayerRouting (const char* layerName) { + return LefDefParser::lefwStartLayerRouting(layerName); +} + +int lefwLayerRouting (const char* direction, double width) { + return LefDefParser::lefwLayerRouting(direction, width); +} + +int lefwLayerRoutingPitch (double pitch) { + return LefDefParser::lefwLayerRoutingPitch(pitch); +} + +int lefwLayerRoutingPitchXYDistance (double xDistance, double yDistance) { + return LefDefParser::lefwLayerRoutingPitchXYDistance(xDistance, yDistance); +} + +int lefwLayerRoutingDiagPitch (double distance) { + return LefDefParser::lefwLayerRoutingDiagPitch(distance); +} + +int lefwLayerRoutingDiagPitchXYDistance (double diag45Distance, double diag135Distance) { + return LefDefParser::lefwLayerRoutingDiagPitchXYDistance(diag45Distance, diag135Distance); +} + +int lefwLayerRoutingDiagWidth (double diagWidth) { + return LefDefParser::lefwLayerRoutingDiagWidth(diagWidth); +} + +int lefwLayerRoutingDiagSpacing (double diagSpacing) { + return LefDefParser::lefwLayerRoutingDiagSpacing(diagSpacing); +} + +int lefwLayerRoutingDiagMinEdgeLength (double diagLength) { + return LefDefParser::lefwLayerRoutingDiagMinEdgeLength(diagLength); +} + +int lefwLayerRoutingOffset (double offset) { + return LefDefParser::lefwLayerRoutingOffset(offset); +} + +int lefwLayerRoutingOffsetXYDistance (double xDistance, double yDistance) { + return LefDefParser::lefwLayerRoutingOffsetXYDistance(xDistance, yDistance); +} + +int lefwLayerRoutingArea (double area) { + return LefDefParser::lefwLayerRoutingArea(area); +} + +int lefwLayerRoutingMinsize (int numRect, double* minWidth, double* minLength) { + return LefDefParser::lefwLayerRoutingMinsize(numRect, minWidth, minLength); +} + +int lefwLayerRoutingMinimumcut (double numCuts, double minWidth) { + return LefDefParser::lefwLayerRoutingMinimumcut(numCuts, minWidth); +} + +int lefwLayerRoutingMinimumcutWithin (double numCuts, double minWidth, double cutDistance) { + return LefDefParser::lefwLayerRoutingMinimumcutWithin(numCuts, minWidth, cutDistance); +} + +int lefwLayerRoutingMinimumcutConnections (const char* direction) { + return LefDefParser::lefwLayerRoutingMinimumcutConnections(direction); +} + +int lefwLayerRoutingMinimumcutLengthWithin (double length, double distance) { + return LefDefParser::lefwLayerRoutingMinimumcutLengthWithin(length, distance); +} + +int lefwLayerRoutingSpacing (double spacing) { + return LefDefParser::lefwLayerRoutingSpacing(spacing); +} + +int lefwLayerRoutingSpacingRange (double minWidth, double maxWidth) { + return LefDefParser::lefwLayerRoutingSpacingRange(minWidth, maxWidth); +} + +int lefwLayerRoutingSpacingRangeUseLengthThreshold () { + return LefDefParser::lefwLayerRoutingSpacingRangeUseLengthThreshold(); +} + +int lefwLayerRoutingSpacingRangeInfluence (double infValue, double subMinWidth, double subMaxWidth) { + return LefDefParser::lefwLayerRoutingSpacingRangeInfluence(infValue, subMinWidth, subMaxWidth); +} + +int lefwLayerRoutingSpacingRangeRange (double minWidth, double maxWidth) { + return LefDefParser::lefwLayerRoutingSpacingRangeRange(minWidth, maxWidth); +} + +int lefwLayerRoutingSpacingLengthThreshold (double lengthValue, double minWidth, double maxWidth) { + return LefDefParser::lefwLayerRoutingSpacingLengthThreshold(lengthValue, minWidth, maxWidth); +} + +int lefwLayerRoutingSpacingSameNet (int PGOnly) { + return LefDefParser::lefwLayerRoutingSpacingSameNet(PGOnly); +} + +int lefwLayerRoutingSpacingEndOfLine (double eolWidth, double eolWithin) { + return LefDefParser::lefwLayerRoutingSpacingEndOfLine(eolWidth, eolWithin); +} + +int lefwLayerRoutingSpacingEOLParallel (double parSpace, double parWithin, int twoEdges) { + return LefDefParser::lefwLayerRoutingSpacingEOLParallel(parSpace, parWithin, twoEdges); +} + +int lefwLayerRoutingSpacingNotchLength (double minNLength) { + return LefDefParser::lefwLayerRoutingSpacingNotchLength(minNLength); +} + +int lefwLayerRoutingSpacingEndOfNotchWidth (double eonWidth, double minNSpacing, double minNLength) { + return LefDefParser::lefwLayerRoutingSpacingEndOfNotchWidth(eonWidth, minNSpacing, minNLength); +} + +int lefwLayerRoutingWireExtension (double wireExtension) { + return LefDefParser::lefwLayerRoutingWireExtension(wireExtension); +} + +int lefwLayerRoutingResistance (const char* resistance) { + return LefDefParser::lefwLayerRoutingResistance(resistance); +} + +int lefwLayerRoutingCapacitance (const char* capacitance) { + return LefDefParser::lefwLayerRoutingCapacitance(capacitance); +} + +int lefwLayerRoutingHeight (double height) { + return LefDefParser::lefwLayerRoutingHeight(height); +} + +int lefwLayerRoutingThickness (double thickness) { + return LefDefParser::lefwLayerRoutingThickness(thickness); +} + +int lefwLayerRoutingShrinkage (double shrinkage) { + return LefDefParser::lefwLayerRoutingShrinkage(shrinkage); +} + +int lefwLayerRoutingCapMultiplier (double capMultiplier) { + return LefDefParser::lefwLayerRoutingCapMultiplier(capMultiplier); +} + +int lefwLayerRoutingEdgeCap (double edgeCap) { + return LefDefParser::lefwLayerRoutingEdgeCap(edgeCap); +} + +int lefwLayerRoutingAntennaArea (double antennaArea) { + return LefDefParser::lefwLayerRoutingAntennaArea(antennaArea); +} + +int lefwLayerRoutingAntennaLength (double antennaLength) { + return LefDefParser::lefwLayerRoutingAntennaLength(antennaLength); +} + +int lefwLayerRoutingMaxwidth (double width) { + return LefDefParser::lefwLayerRoutingMaxwidth(width); +} + +int lefwLayerRoutingMinwidth (double width) { + return LefDefParser::lefwLayerRoutingMinwidth(width); +} + +int lefwLayerRoutingMinenclosedarea (int numMinenclosed, double* area, double* width) { + return LefDefParser::lefwLayerRoutingMinenclosedarea(numMinenclosed, area, width); +} + +int lefwLayerRoutingMinstep (double distance) { + return LefDefParser::lefwLayerRoutingMinstep(distance); +} + +int lefwLayerRoutingMinstepWithOptions (double distance, const char* rule, double maxLength) { + return LefDefParser::lefwLayerRoutingMinstepWithOptions(distance, rule, maxLength); +} + +int lefwLayerRoutingMinstepMaxEdges (double distance, double maxEdges) { + return LefDefParser::lefwLayerRoutingMinstepMaxEdges(distance, maxEdges); +} + +int lefwLayerRoutingProtrusion (double width1, double length, double width2) { + return LefDefParser::lefwLayerRoutingProtrusion(width1, length, width2); +} + +int lefwLayerRoutingStartSpacingtableParallel (int numLength, double* length) { + return LefDefParser::lefwLayerRoutingStartSpacingtableParallel(numLength, length); +} + +int lefwLayerRoutingSpacingtableParallelWidth (double width, int numSpacing, double* spacing) { + return LefDefParser::lefwLayerRoutingSpacingtableParallelWidth(width, numSpacing, spacing); +} + +int lefwLayerRoutingStartSpacingtableInfluence () { + return LefDefParser::lefwLayerRoutingStartSpacingtableInfluence(); +} + +int lefwLayerRoutingSpacingInfluenceWidth (double width, double distance, double spacing) { + return LefDefParser::lefwLayerRoutingSpacingInfluenceWidth(width, distance, spacing); +} + +int lefwLayerRoutingStartSpacingtableTwoWidths () { + return LefDefParser::lefwLayerRoutingStartSpacingtableTwoWidths(); +} + +int lefwLayerRoutingSpacingtableTwoWidthsWidth (double width, double runLength, int numSpacing, double* spacing) { + return LefDefParser::lefwLayerRoutingSpacingtableTwoWidthsWidth(width, runLength, numSpacing, spacing); +} + +int lefwLayerRoutineEndSpacingtable () { + return LefDefParser::lefwLayerRoutineEndSpacingtable(); +} + +int lefwEndLayerRouting (const char* layerName) { + return LefDefParser::lefwEndLayerRouting(layerName); +} + +int lefwLayerACCurrentDensity (const char* type, double value) { + return LefDefParser::lefwLayerACCurrentDensity(type, value); +} + +int lefwLayerACFrequency (int numFrequency, double* frequency) { + return LefDefParser::lefwLayerACFrequency(numFrequency, frequency); +} + +int lefwLayerACWidth (int numWidths, double* widths) { + return LefDefParser::lefwLayerACWidth(numWidths, widths); +} + +int lefwLayerACCutarea (int numCutareas, double* cutareas) { + return LefDefParser::lefwLayerACCutarea(numCutareas, cutareas); +} + +int lefwLayerACTableEntries (int numEntries, double* entries) { + return LefDefParser::lefwLayerACTableEntries(numEntries, entries); +} + +int lefwLayerDCCurrentDensity (const char* type, double value) { + return LefDefParser::lefwLayerDCCurrentDensity(type, value); +} + +int lefwLayerDCWidth (int numWidths, double* widths) { + return LefDefParser::lefwLayerDCWidth(numWidths, widths); +} + +int lefwLayerDCCutarea (int numCutareas, double* cutareas) { + return LefDefParser::lefwLayerDCCutarea(numCutareas, cutareas); +} + +int lefwLayerDCTableEntries (int numEntries, double* entries) { + return LefDefParser::lefwLayerDCTableEntries(numEntries, entries); +} + +int lefwLayerAntennaModel (const char* oxide) { + return LefDefParser::lefwLayerAntennaModel(oxide); +} + +int lefwLayerAntennaAreaRatio (double value) { + return LefDefParser::lefwLayerAntennaAreaRatio(value); +} + +int lefwLayerAntennaDiffAreaRatio (double value) { + return LefDefParser::lefwLayerAntennaDiffAreaRatio(value); +} + +int lefwLayerAntennaDiffAreaRatioPwl (int numPwls, double* diffusions, double* ratios) { + return LefDefParser::lefwLayerAntennaDiffAreaRatioPwl(numPwls, diffusions, ratios); +} + +int lefwLayerAntennaCumAreaRatio (double value) { + return LefDefParser::lefwLayerAntennaCumAreaRatio(value); +} + +int lefwLayerAntennaCumDiffAreaRatio (double value) { + return LefDefParser::lefwLayerAntennaCumDiffAreaRatio(value); +} + +int lefwLayerAntennaCumDiffAreaRatioPwl (int numPwls, double* diffusions, double* ratios) { + return LefDefParser::lefwLayerAntennaCumDiffAreaRatioPwl(numPwls, diffusions, ratios); +} + +int lefwLayerAntennaAreaFactor (double value, const char* diffUseOnly) { + return LefDefParser::lefwLayerAntennaAreaFactor(value, diffUseOnly); +} + +int lefwLayerAntennaSideAreaRatio (double value) { + return LefDefParser::lefwLayerAntennaSideAreaRatio(value); +} + +int lefwLayerAntennaDiffSideAreaRatio (double value) { + return LefDefParser::lefwLayerAntennaDiffSideAreaRatio(value); +} + +int lefwLayerAntennaDiffSideAreaRatioPwl (int numPwls, double* diffusions, double* ratios) { + return LefDefParser::lefwLayerAntennaDiffSideAreaRatioPwl(numPwls, diffusions, ratios); +} + +int lefwLayerAntennaCumSideAreaRatio (double value) { + return LefDefParser::lefwLayerAntennaCumSideAreaRatio(value); +} + +int lefwLayerAntennaCumDiffSideAreaRatio (double value) { + return LefDefParser::lefwLayerAntennaCumDiffSideAreaRatio(value); +} + +int lefwLayerAntennaCumDiffSideAreaRatioPwl (int numPwls, double* diffusions, double* ratios) { + return LefDefParser::lefwLayerAntennaCumDiffSideAreaRatioPwl(numPwls, diffusions, ratios); +} + +int lefwLayerAntennaSideAreaFactor (double value, const char* diffUseOnly) { + return LefDefParser::lefwLayerAntennaSideAreaFactor(value, diffUseOnly); +} + +int lefwLayerAntennaCumRoutingPlusCut () { + return LefDefParser::lefwLayerAntennaCumRoutingPlusCut(); +} + +int lefwLayerAntennaGatePlusDiff (double plusDiffFactor) { + return LefDefParser::lefwLayerAntennaGatePlusDiff(plusDiffFactor); +} + +int lefwLayerAntennaAreaMinusDiff (double minusDiffFactor) { + return LefDefParser::lefwLayerAntennaAreaMinusDiff(minusDiffFactor); +} + +int lefwLayerAntennaAreaDiffReducePwl (int numPwls, double* diffAreas, double* metalDiffFactors) { + return LefDefParser::lefwLayerAntennaAreaDiffReducePwl(numPwls, diffAreas, metalDiffFactors); +} + +int lefwMinimumDensity (double minDensity) { + return LefDefParser::lefwMinimumDensity(minDensity); +} + +int lefwMaximumDensity (double maxDensity) { + return LefDefParser::lefwMaximumDensity(maxDensity); +} + +int lefwDensityCheckWindow (double checkWindowLength, double checkWindowWidth) { + return LefDefParser::lefwDensityCheckWindow(checkWindowLength, checkWindowWidth); +} + +int lefwDensityCheckStep (double checkStepValue) { + return LefDefParser::lefwDensityCheckStep(checkStepValue); +} + +int lefwFillActiveSpacing (double fillToActiveSpacing) { + return LefDefParser::lefwFillActiveSpacing(fillToActiveSpacing); +} + +int lefwMaxviastack (int value, const char* bottomLayer, const char* topLayer) { + return LefDefParser::lefwMaxviastack(value, bottomLayer, topLayer); +} + +int lefwStartPropDef () { + return LefDefParser::lefwStartPropDef(); +} + +int lefwIntPropDef (const char* objType, const char* propName, double leftRange, double rightRange, int propValue) { + return LefDefParser::lefwIntPropDef(objType, propName, leftRange, rightRange, propValue); +} + +int lefwRealPropDef (const char* objType, const char* propName, double leftRange, double rightRange, double propValue) { + return LefDefParser::lefwRealPropDef(objType, propName, leftRange, rightRange, propValue); +} + +int lefwStringPropDef (const char* objType, const char* propName, double leftRange, double rightRange, const char* propValue) { + return LefDefParser::lefwStringPropDef(objType, propName, leftRange, rightRange, propValue); +} + +int lefwEndPropDef () { + return LefDefParser::lefwEndPropDef(); +} + +int lefwStartVia (const char* viaName, const char* isDefault) { + return LefDefParser::lefwStartVia(viaName, isDefault); +} + +int lefwViaTopofstackonly () { + return LefDefParser::lefwViaTopofstackonly(); +} + +int lefwViaForeign (const char* foreignName, double xl, double yl, int orient) { + return LefDefParser::lefwViaForeign(foreignName, xl, yl, orient); +} + +int lefwViaForeignStr (const char* foreignName, double xl, double yl, const char* orient) { + return LefDefParser::lefwViaForeignStr(foreignName, xl, yl, orient); +} + +int lefwViaResistance (double resistance) { + return LefDefParser::lefwViaResistance(resistance); +} + +int lefwViaLayer (const char* layerName) { + return LefDefParser::lefwViaLayer(layerName); +} + +int lefwViaLayerRect (double x1l, double y1l, double x2l, double y2l, int mask) { + return LefDefParser::lefwViaLayerRect(x1l, y1l, x2l, y2l, mask); +} + +int lefwViaLayerPolygon (int num_polys, double* xl, double* yl, int mask) { + return LefDefParser::lefwViaLayerPolygon(num_polys, xl, yl, mask); +} + +int lefwViaViarule (const char* viaRuleName, double xCutSize, double yCutSize, const char* botMetalLayer, const char* cutLayer, const char* topMetalLayer, double xCutSpacing, double yCutSpacing, double xBotEnc, double yBotEnc, double xTopEnc, double yTopEnc) { + return LefDefParser::lefwViaViarule(viaRuleName, xCutSize, yCutSize, botMetalLayer, cutLayer, topMetalLayer, xCutSpacing, yCutSpacing, xBotEnc, yBotEnc, xTopEnc, yTopEnc); +} + +int lefwViaViaruleRowCol (int numCutRows, int numCutCols) { + return LefDefParser::lefwViaViaruleRowCol(numCutRows, numCutCols); +} + +int lefwViaViaruleOrigin (double xOffset, double yOffset) { + return LefDefParser::lefwViaViaruleOrigin(xOffset, yOffset); +} + +int lefwViaViaruleOffset (double xBotOffset, double yBotOffset, double xTopOffset, double yTopOffset) { + return LefDefParser::lefwViaViaruleOffset(xBotOffset, yBotOffset, xTopOffset, yTopOffset); +} + +int lefwViaViarulePattern (const char* cutPattern) { + return LefDefParser::lefwViaViarulePattern(cutPattern); +} + +int lefwStringProperty (const char* propName, const char* propValue) { + return LefDefParser::lefwStringProperty(propName, propValue); +} + +int lefwRealProperty (const char* propName, double propValue) { + return LefDefParser::lefwRealProperty(propName, propValue); +} + +int lefwIntProperty (const char* propName, int propValue) { + return LefDefParser::lefwIntProperty(propName, propValue); +} + +int lefwEndVia (const char* viaName) { + return LefDefParser::lefwEndVia(viaName); +} + +int lefwStartViaRule (const char* viaRuleName) { + return LefDefParser::lefwStartViaRule(viaRuleName); +} + +int lefwViaRuleLayer (const char* layerName, const char* direction, double minWidth, double maxWidth, double overhang, double metalOverhang) { + return LefDefParser::lefwViaRuleLayer(layerName, direction, minWidth, maxWidth, overhang, metalOverhang); +} + +int lefwViaRuleVia (const char* viaName) { + return LefDefParser::lefwViaRuleVia(viaName); +} + +int lefwEndViaRule (const char* viaRuleName) { + return LefDefParser::lefwEndViaRule(viaRuleName); +} + +int lefwStartViaRuleGen (const char* viaRuleName) { + return LefDefParser::lefwStartViaRuleGen(viaRuleName); +} + +int lefwViaRuleGenDefault () { + return LefDefParser::lefwViaRuleGenDefault(); +} + +int lefwViaRuleGenLayer (const char* layerName, const char* direction, double minWidth, double maxWidth, double overhang, double metalOverhang) { + return LefDefParser::lefwViaRuleGenLayer(layerName, direction, minWidth, maxWidth, overhang, metalOverhang); +} + +int lefwViaRuleGenLayerEnclosure (const char* layerName, double overhang1, double overhang2, double minWidth, double maxWidth) { + return LefDefParser::lefwViaRuleGenLayerEnclosure(layerName, overhang1, overhang2, minWidth, maxWidth); +} + +int lefwViaRuleGenLayer3 (const char* layerName, double xl, double yl, double xh, double yh, double xSpacing, double ySpacing, double resistance) { + return LefDefParser::lefwViaRuleGenLayer3(layerName, xl, yl, xh, yh, xSpacing, ySpacing, resistance); +} + +int lefwEndViaRuleGen (const char* viaRuleName) { + return LefDefParser::lefwEndViaRuleGen(viaRuleName); +} + +int lefwStartNonDefaultRule (const char* ruleName) { + return LefDefParser::lefwStartNonDefaultRule(ruleName); +} + +int lefwNonDefaultRuleLayer (const char* routingLayerName, double width, double minSpacing, double wireExtension, double resistance, double capacitance, double edgeCap) { + return LefDefParser::lefwNonDefaultRuleLayer(routingLayerName, width, minSpacing, wireExtension, resistance, capacitance, edgeCap); +} + +int lefwNonDefaultRuleHardspacing () { + return LefDefParser::lefwNonDefaultRuleHardspacing(); +} + +int lefwNonDefaultRuleStartVia (const char* viaName, const char* isDefault) { + return LefDefParser::lefwNonDefaultRuleStartVia(viaName, isDefault); +} + +int lefwNonDefaultRuleEndVia (const char* viaName) { + return LefDefParser::lefwNonDefaultRuleEndVia(viaName); +} + +int lefwNonDefaultRuleUseVia (const char* viaName) { + return LefDefParser::lefwNonDefaultRuleUseVia(viaName); +} + +int lefwNonDefaultRuleUseViaRule (const char* viaRuleName) { + return LefDefParser::lefwNonDefaultRuleUseViaRule(viaRuleName); +} + +int lefwNonDefaultRuleMinCuts (const char* layerName, int numCuts) { + return LefDefParser::lefwNonDefaultRuleMinCuts(layerName, numCuts); +} + +int lefwEndNonDefaultRule (const char* ruleName) { + return LefDefParser::lefwEndNonDefaultRule(ruleName); +} + +int lefwStartSpacing () { + return LefDefParser::lefwStartSpacing(); +} + +int lefwSpacing (const char* layerName1, const char* layerName2, double minSpace, const char* stack) { + return LefDefParser::lefwSpacing(layerName1, layerName2, minSpace, stack); +} + +int lefwEndSpacing () { + return LefDefParser::lefwEndSpacing(); +} + +int lefwUniversalNoiseMargin (double high, double low) { + return LefDefParser::lefwUniversalNoiseMargin(high, low); +} + +int lefwEdgeRateThreshold1 (double num) { + return LefDefParser::lefwEdgeRateThreshold1(num); +} + +int lefwEdgeRateThreshold2 (double num) { + return LefDefParser::lefwEdgeRateThreshold2(num); +} + +int lefwEdgeRateScaleFactor (double num) { + return LefDefParser::lefwEdgeRateScaleFactor(num); +} + +int lefwStartNoiseTable (int num) { + return LefDefParser::lefwStartNoiseTable(num); +} + +int lefwEdgeRate (double num) { + return LefDefParser::lefwEdgeRate(num); +} + +int lefwOutputResistance (int numResists, double* resistance) { + return LefDefParser::lefwOutputResistance(numResists, resistance); +} + +int lefwVictims (int length, int numNoises, double* noises) { + return LefDefParser::lefwVictims(length, numNoises, noises); +} + +int lefwEndNoiseTable () { + return LefDefParser::lefwEndNoiseTable(); +} + +int lefwStartCorrectTable (int num) { + return LefDefParser::lefwStartCorrectTable(num); +} + +int lefwEndCorrectTable () { + return LefDefParser::lefwEndCorrectTable(); +} + +int lefwMinFeature (double x, double y) { + return LefDefParser::lefwMinFeature(x, y); +} + +int lefwStartIrdrop () { + return LefDefParser::lefwStartIrdrop(); +} + +int lefwIrdropTable (const char* tableName, const char* currentsNvolts) { + return LefDefParser::lefwIrdropTable(tableName, currentsNvolts); +} + +int lefwEndIrdrop () { + return LefDefParser::lefwEndIrdrop(); +} + +int lefwSite (const char* siteName, const char* classType, const char* symmetry, double width, double height) { + return LefDefParser::lefwSite(siteName, classType, symmetry, width, height); +} + +int lefwSiteRowPattern (const char* siteName, int orient) { + return LefDefParser::lefwSiteRowPattern(siteName, orient); +} + +int lefwSiteRowPatternStr (const char* siteName, const char * orient) { + return LefDefParser::lefwSiteRowPatternStr(siteName, orient); +} + +int lefwEndSite (const char* siteName) { + return LefDefParser::lefwEndSite(siteName); +} + +int lefwStartArray (const char* arrayName) { + return LefDefParser::lefwStartArray(arrayName); +} + +int lefwArraySite (const char* name, double origX, double origY, int orient, double numX, double numY, double spaceX, double spaceY) { + return LefDefParser::lefwArraySite(name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwArraySiteStr (const char* name, double origX, double origY, const char * orient, double numX, double numY, double spaceX, double spaceY) { + return LefDefParser::lefwArraySiteStr(name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwArrayCanplace (const char* name, double origX, double origY, int orient, double numX, double numY, double spaceX, double spaceY) { + return LefDefParser::lefwArrayCanplace(name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwArrayCanplaceStr (const char* name, double origX, double origY, const char * orient, double numX, double numY, double spaceX, double spaceY) { + return LefDefParser::lefwArrayCanplaceStr(name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwArrayCannotoccupy (const char* name, double origX, double origY, int orient, double numX, double numY, double spaceX, double spaceY) { + return LefDefParser::lefwArrayCannotoccupy(name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwArrayCannotoccupyStr (const char* name, double origX, double origY, const char * orient, double numX, double numY, double spaceX, double spaceY) { + return LefDefParser::lefwArrayCannotoccupyStr(name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwArrayTracks (const char* xy, double start, int numTracks, double space, const char* layers) { + return LefDefParser::lefwArrayTracks(xy, start, numTracks, space, layers); +} + +int lefwStartArrayFloorplan (const char* name) { + return LefDefParser::lefwStartArrayFloorplan(name); +} + +int lefwArrayFloorplan (const char* site, const char* name, double origX, double origY, int orient, int numX, int numY, double spaceX, double spaceY) { + return LefDefParser::lefwArrayFloorplan(site, name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwArrayFloorplanStr (const char* site, const char* name, double origX, double origY, const char * orient, int numX, int numY, double spaceX, double spaceY) { + return LefDefParser::lefwArrayFloorplanStr(site, name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwEndArrayFloorplan (const char* name) { + return LefDefParser::lefwEndArrayFloorplan(name); +} + +int lefwArrayGcellgrid (const char* xy, double startXY, int colRows, double spaceXY) { + return LefDefParser::lefwArrayGcellgrid(xy, startXY, colRows, spaceXY); +} + +int lefwStartArrayDefaultCap (int size) { + return LefDefParser::lefwStartArrayDefaultCap(size); +} + +int lefwArrayDefaultCap (double numPins, double cap) { + return LefDefParser::lefwArrayDefaultCap(numPins, cap); +} + +int lefwEndArrayDefaultCap () { + return LefDefParser::lefwEndArrayDefaultCap(); +} + +int lefwEndArray (const char* arrayName) { + return LefDefParser::lefwEndArray(arrayName); +} + +int lefwStartMacro (const char* macroName) { + return LefDefParser::lefwStartMacro(macroName); +} + +int lefwMacroClass (const char* value1, const char* value2) { + return LefDefParser::lefwMacroClass(value1, value2); +} + +int lefwMacroFixedMask () { + return LefDefParser::lefwMacroFixedMask(); +} + +int lefwMacroSource (const char* value1) { + return LefDefParser::lefwMacroSource(value1); +} + +int lefwMacroForeign (const char* name, double xl, double yl, int orient) { + return LefDefParser::lefwMacroForeign(name, xl, yl, orient); +} + +int lefwMacroForeignStr (const char* name, double xl, double yl, const char * orient) { + return LefDefParser::lefwMacroForeignStr(name, xl, yl, orient); +} + +int lefwMacroOrigin (double xl, double yl) { + return LefDefParser::lefwMacroOrigin(xl, yl); +} + +int lefwMacroEEQ (const char* macroName) { + return LefDefParser::lefwMacroEEQ(macroName); +} + +int lefwMacroLEQ (const char* macroName) { + return LefDefParser::lefwMacroLEQ(macroName); +} + +int lefwMacroSize (double width, double height) { + return LefDefParser::lefwMacroSize(width, height); +} + +int lefwMacroSymmetry (const char* symmetry) { + return LefDefParser::lefwMacroSymmetry(symmetry); +} + +int lefwMacroSite (const char* siteName) { + return LefDefParser::lefwMacroSite(siteName); +} + +int lefwMacroSitePattern (const char* name, double origX, double origY, int orient, int numX, int numY, double spaceX, double spaceY) { + return LefDefParser::lefwMacroSitePattern(name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwMacroSitePatternStr (const char* name, double origX, double origY, const char * orient, int numX, int numY, double spaceX, double spaceY) { + return LefDefParser::lefwMacroSitePatternStr(name, origX, origY, orient, numX, numY, spaceX, spaceY); +} + +int lefwMacroPower (double power) { + return LefDefParser::lefwMacroPower(power); +} + +int lefwEndMacro (const char* macroName) { + return LefDefParser::lefwEndMacro(macroName); +} + +int lefwStartMacroDensity (const char* layerName) { + return LefDefParser::lefwStartMacroDensity(layerName); +} + +int lefwMacroDensityLayerRect (double x1, double y1, double x2, double y2, double densityValue) { + return LefDefParser::lefwMacroDensityLayerRect(x1, y1, x2, y2, densityValue); +} + +int lefwEndMacroDensity () { + return LefDefParser::lefwEndMacroDensity(); +} + +int lefwStartMacroPin (const char* pinName) { + return LefDefParser::lefwStartMacroPin(pinName); +} + +int lefwMacroPinTaperRule (const char* ruleName) { + return LefDefParser::lefwMacroPinTaperRule(ruleName); +} + +int lefwMacroPinForeign (const char* name, double xl, double yl, int orient) { + return LefDefParser::lefwMacroPinForeign(name, xl, yl, orient); +} + +int lefwMacroPinForeignStr (const char* name, double xl, double yl, const char* orient) { + return LefDefParser::lefwMacroPinForeignStr(name, xl, yl, orient); +} + +int lefwMacroPinLEQ (const char* pinName) { + return LefDefParser::lefwMacroPinLEQ(pinName); +} + +int lefwMacroPinDirection (const char* direction) { + return LefDefParser::lefwMacroPinDirection(direction); +} + +int lefwMacroPinUse (const char* use) { + return LefDefParser::lefwMacroPinUse(use); +} + +int lefwMacroPinShape (const char* name) { + return LefDefParser::lefwMacroPinShape(name); +} + +int lefwMacroPinMustjoin (const char* name) { + return LefDefParser::lefwMacroPinMustjoin(name); +} + +int lefwMacroPinNetExpr (const char* name) { + return LefDefParser::lefwMacroPinNetExpr(name); +} + +int lefwMacroPinSupplySensitivity (const char* pinName) { + return LefDefParser::lefwMacroPinSupplySensitivity(pinName); +} + +int lefwMacroPinGroundSensitivity (const char* pinName) { + return LefDefParser::lefwMacroPinGroundSensitivity(pinName); +} + +int lefwMacroPinOutputnoisemargin (int high, int low) { + return LefDefParser::lefwMacroPinOutputnoisemargin(high, low); +} + +int lefwMacroPinOutputresistance (int high, int low) { + return LefDefParser::lefwMacroPinOutputresistance(high, low); +} + +int lefwMacroPinInputnoisemargin (int high, int low) { + return LefDefParser::lefwMacroPinInputnoisemargin(high, low); +} + +int lefwMacroPinPower (double power) { + return LefDefParser::lefwMacroPinPower(power); +} + +int lefwMacroPinLeakage (double leakage) { + return LefDefParser::lefwMacroPinLeakage(leakage); +} + +int lefwMacroPinCapacitance (double capacitance) { + return LefDefParser::lefwMacroPinCapacitance(capacitance); +} + +int lefwMacroPinResistance (double resistance) { + return LefDefParser::lefwMacroPinResistance(resistance); +} + +int lefwMacroPinPulldownres (double resistance) { + return LefDefParser::lefwMacroPinPulldownres(resistance); +} + +int lefwMacroPinTieoffr (double resistance) { + return LefDefParser::lefwMacroPinTieoffr(resistance); +} + +int lefwMacroPinVHI (double voltage) { + return LefDefParser::lefwMacroPinVHI(voltage); +} + +int lefwMacroPinVLO (double voltage) { + return LefDefParser::lefwMacroPinVLO(voltage); +} + +int lefwMacroPinRisevoltagethreshold (double voltage) { + return LefDefParser::lefwMacroPinRisevoltagethreshold(voltage); +} + +int lefwMacroPinFallvoltagethreshold (double voltage) { + return LefDefParser::lefwMacroPinFallvoltagethreshold(voltage); +} + +int lefwMacroPinRisethresh (double capacitance) { + return LefDefParser::lefwMacroPinRisethresh(capacitance); +} + +int lefwMacroPinFallthresh (double capacitance) { + return LefDefParser::lefwMacroPinFallthresh(capacitance); +} + +int lefwMacroPinRisesatcur (double current) { + return LefDefParser::lefwMacroPinRisesatcur(current); +} + +int lefwMacroPinFallsatcur (double current) { + return LefDefParser::lefwMacroPinFallsatcur(current); +} + +int lefwMacroPinCurrentsource (const char* name) { + return LefDefParser::lefwMacroPinCurrentsource(name); +} + +int lefwMacroPinIV_Tables (const char* lowName, const char* highName) { + return LefDefParser::lefwMacroPinIV_Tables(lowName, highName); +} + +int lefwMacroPinAntennasize (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennasize(value, layerName); +} + +int lefwMacroPinAntennaMetalArea (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaMetalArea(value, layerName); +} + +int lefwMacroPinAntennaMetalLength (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaMetalLength(value, layerName); +} + +int lefwMacroPinAntennaPartialMetalArea (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaPartialMetalArea(value, layerName); +} + +int lefwMacroPinAntennaPartialMetalSideArea (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaPartialMetalSideArea(value, layerName); +} + +int lefwMacroPinAntennaPartialCutArea (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaPartialCutArea(value, layerName); +} + +int lefwMacroPinAntennaDiffArea (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaDiffArea(value, layerName); +} + +int lefwMacroPinAntennaModel (const char* oxide) { + return LefDefParser::lefwMacroPinAntennaModel(oxide); +} + +int lefwMacroPinAntennaGateArea (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaGateArea(value, layerName); +} + +int lefwMacroPinAntennaMaxAreaCar (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaMaxAreaCar(value, layerName); +} + +int lefwMacroPinAntennaMaxSideAreaCar (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaMaxSideAreaCar(value, layerName); +} + +int lefwMacroPinAntennaMaxCutCar (double value, const char* layerName) { + return LefDefParser::lefwMacroPinAntennaMaxCutCar(value, layerName); +} + +int lefwEndMacroPin (const char* pinName) { + return LefDefParser::lefwEndMacroPin(pinName); +} + +int lefwStartMacroPinPort (const char* classType) { + return LefDefParser::lefwStartMacroPinPort(classType); +} + +int lefwMacroPinPortLayer (const char* layerName, double spacing) { + return LefDefParser::lefwMacroPinPortLayer(layerName, spacing); +} + +int lefwMacroPinPortDesignRuleWidth (const char* layerName, double width) { + return LefDefParser::lefwMacroPinPortDesignRuleWidth(layerName, width); +} + +int lefwMacroPinPortLayerWidth (double width) { + return LefDefParser::lefwMacroPinPortLayerWidth(width); +} + +int lefwMacroPinPortLayerPath (int num_paths, double* xl, double* yl, int numX, int numY, double spaceX, double spaceY, int mask) { + return LefDefParser::lefwMacroPinPortLayerPath(num_paths, xl, yl, numX, numY, spaceX, spaceY, mask); +} + +int lefwMacroPinPortLayerRect (double xl1, double yl1, double xl2, double yl2, int numX, int numY, double spaceX, double spaceY, int mask) { + return LefDefParser::lefwMacroPinPortLayerRect(xl1, yl1, xl2, yl2, numX, numY, spaceX, spaceY, mask); +} + +int lefwMacroPinPortLayerPolygon (int num_polys, double* xl, double* yl, int numX, int numY, double spaceX, double spaceY, int mask) { + return LefDefParser::lefwMacroPinPortLayerPolygon(num_polys, xl, yl, numX, numY, spaceX, spaceY, mask); +} + +int lefwMacroPinPortVia (double xl, double yl, const char* viaName, int numX, int numY, double spaceX, double spaceY, int mask) { + return LefDefParser::lefwMacroPinPortVia(xl, yl, viaName, numX, numY, spaceX, spaceY, mask); +} + +int lefwEndMacroPinPort () { + return LefDefParser::lefwEndMacroPinPort(); +} + +int lefwStartMacroObs () { + return LefDefParser::lefwStartMacroObs(); +} + +int lefwMacroObsLayer (const char* layerName, double spacing) { + return LefDefParser::lefwMacroObsLayer(layerName, spacing); +} + +int lefwMacroObsDesignRuleWidth (const char* layerName, double width) { + return LefDefParser::lefwMacroObsDesignRuleWidth(layerName, width); +} + +int lefwMacroExceptPGNet (const char* layerName) { + return LefDefParser::lefwMacroExceptPGNet(layerName); +} + +int lefwMacroObsLayerWidth (double width) { + return LefDefParser::lefwMacroObsLayerWidth(width); +} + +int lefwMacroObsLayerPath (int num_paths, double* xl, double* yl, int numX, int numY, double spaceX, double spaceY, int mask) { + return LefDefParser::lefwMacroObsLayerPath(num_paths, xl, yl, numX, numY, spaceX, spaceY, mask); +} + +int lefwMacroObsLayerRect (double xl1, double yl1, double xl2, double yl2, int numX, int numY, double spaceX, double spaceY, int mask) { + return LefDefParser::lefwMacroObsLayerRect(xl1, yl1, xl2, yl2, numX, numY, spaceX, spaceY, mask); +} + +int lefwMacroObsLayerPolygon (int num_polys, double* xl, double* yl, int numX, int numY, double spaceX, double spaceY, int mask) { + return LefDefParser::lefwMacroObsLayerPolygon(num_polys, xl, yl, numX, numY, spaceX, spaceY, mask); +} + +int lefwMacroObsVia (double xl, double yl, const char* viaName, int numX, int numY, double spaceX, double spaceY, int mask) { + return LefDefParser::lefwMacroObsVia(xl, yl, viaName, numX, numY, spaceX, spaceY, mask); +} + +int lefwEndMacroObs () { + return LefDefParser::lefwEndMacroObs(); +} + +int lefwStartMacroTiming () { + return LefDefParser::lefwStartMacroTiming(); +} + +int lefwMacroTimingPin (const char* fromPin, const char* toPin) { + return LefDefParser::lefwMacroTimingPin(fromPin, toPin); +} + +int lefwMacroTimingIntrinsic (const char* riseFall, double min, double max, double slewT1, double slewT1Min, double slewT1Max, double slewT2, double slewT2Min, double slewT2Max, double slewT3, double varMin, double varMax) { + return LefDefParser::lefwMacroTimingIntrinsic(riseFall, min, max, slewT1, slewT1Min, slewT1Max, slewT2, slewT2Min, slewT2Max, slewT3, varMin, varMax); +} + +int lefwMacroTimingRisers (double min, double max) { + return LefDefParser::lefwMacroTimingRisers(min, max); +} + +int lefwMacroTimingFallrs (double min, double max) { + return LefDefParser::lefwMacroTimingFallrs(min, max); +} + +int lefwMacroTimingRisecs (double min, double max) { + return LefDefParser::lefwMacroTimingRisecs(min, max); +} + +int lefwMacroTimingFallcs (double min, double max) { + return LefDefParser::lefwMacroTimingFallcs(min, max); +} + +int lefwMacroTimingRisesatt1 (double min, double max) { + return LefDefParser::lefwMacroTimingRisesatt1(min, max); +} + +int lefwMacroTimingFallsatt1 (double min, double max) { + return LefDefParser::lefwMacroTimingFallsatt1(min, max); +} + +int lefwMacroTimingRiset0 (double min, double max) { + return LefDefParser::lefwMacroTimingRiset0(min, max); +} + +int lefwMacroTimingFallt0 (double min, double max) { + return LefDefParser::lefwMacroTimingFallt0(min, max); +} + +int lefwMacroTimingUnateness (const char* unateness) { + return LefDefParser::lefwMacroTimingUnateness(unateness); +} + +int lefwEndMacroTiming () { + return LefDefParser::lefwEndMacroTiming(); +} + +int lefwAntenna (const char* type, double value) { + return LefDefParser::lefwAntenna(type, value); +} + +int lefwStartBeginext (const char* name) { + return LefDefParser::lefwStartBeginext(name); +} + +int lefwBeginextCreator (const char* creatorName) { + return LefDefParser::lefwBeginextCreator(creatorName); +} + +int lefwBeginextDate () { + return LefDefParser::lefwBeginextDate(); +} + +int lefwBeginextRevision (int vers1, int vers2) { + return LefDefParser::lefwBeginextRevision(vers1, vers2); +} + +int lefwBeginextSyntax (const char* title, const char* string) { + return LefDefParser::lefwBeginextSyntax(title, string); +} + +int lefwEndBeginext () { + return LefDefParser::lefwEndBeginext(); +} + +int lefwCurrentLineNumber () { + return LefDefParser::lefwCurrentLineNumber(); +} + +int lefwEnd () { + return LefDefParser::lefwEnd(); +} + +void lefwPrintError (int status) { + LefDefParser::lefwPrintError(status); +} + +void lefwAddComment (const char* comment) { + LefDefParser::lefwAddComment(comment); +} + +void lefwAddIndent () { + LefDefParser::lefwAddIndent(); +} + diff --git a/lefdef/src/lef/clef/xlefwWriterCalls.cpp b/lefdef/src/lef/clef/xlefwWriterCalls.cpp new file mode 100644 index 00000000..f331f032 --- /dev/null +++ b/lefdef/src/lef/clef/xlefwWriterCalls.cpp @@ -0,0 +1,191 @@ +// ***************************************************************************** +// ***************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the \"License\"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an \"AS IS\" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#define EXTERN extern "C" + +#include "lefwWriterCalls.h" +#include "lefwWriterCalls.hpp" + +// Wrappers definitions. +int lefwWrite (FILE * file, const char * fileName, lefiUserData userData) { + return LefDefParser::lefwWrite(file, fileName, userData); +} + +void lefwSetRegisterUnusedCallbacks () { + LefDefParser::lefwSetRegisterUnusedCallbacks(); +} + +void lefwPrintUnusedCallbacks (FILE* f) { + LefDefParser::lefwPrintUnusedCallbacks(f); +} + +void lefwSetUserData (lefiUserData p0) { + LefDefParser::lefwSetUserData(p0); +} + +lefiUserData lefwGetUserData () { + return LefDefParser::lefwGetUserData(); +} + +void lefwSetVersionCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetVersionCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetCaseSensitiveCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetCaseSensitiveCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetNoWireExtensionCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetNoWireExtensionCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetBusBitCharsCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetBusBitCharsCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetDividerCharCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetDividerCharCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetManufacturingGridCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetManufacturingGridCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetUseMinSpacingCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetUseMinSpacingCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetClearanceMeasureCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetClearanceMeasureCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetUnitsCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetUnitsCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwAntennaInputGateAreaCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwAntennaInputGateAreaCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwAntennaInOutDiffAreaCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwAntennaInOutDiffAreaCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwAntennaOutputDiffAreaCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwAntennaOutputDiffAreaCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetPropDefCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetPropDefCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetLayerCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetLayerCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetViaCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetViaCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetViaRuleCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetViaRuleCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetNonDefaultCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetNonDefaultCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetCrossTalkCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetCrossTalkCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetNoiseTableCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetNoiseTableCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetCorrectionTableCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetCorrectionTableCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetSpacingCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetSpacingCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetMinFeatureCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetMinFeatureCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetDielectricCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetDielectricCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetIRDropCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetIRDropCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetSiteCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetSiteCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetArrayCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetArrayCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetMacroCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetMacroCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetAntennaCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetAntennaCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetExtCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetExtCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetEndLibCbk (::lefwVoidCbkFnType p0) { + LefDefParser::lefwSetEndLibCbk((LefDefParser::lefwVoidCbkFnType) p0); +} + +void lefwSetUnusedCallbacks (::lefwVoidCbkFnType func) { + LefDefParser::lefwSetUnusedCallbacks((LefDefParser::lefwVoidCbkFnType ) func); +} + +void lefwSetLogFunction (::LEFI_LOG_FUNCTION p0) { + LefDefParser::lefwSetLogFunction(p0); +} + +void lefwSetWarningLogFunction (::LEFI_WARNING_LOG_FUNCTION p0) { + LefDefParser::lefwSetWarningLogFunction(p0); +} + diff --git a/lefdef/src/lef/clefzlib/Makefile b/lefdef/src/lef/clefzlib/Makefile new file mode 100644 index 00000000..7fa8db5f --- /dev/null +++ b/lefdef/src/lef/clefzlib/Makefile @@ -0,0 +1,13 @@ +LEF_TABNAME = clefzlib + +FAKE_ALL: all + +DIRNAME = clefzlib + +LIBTARGET = libclefzlib.a + +PUBLIC_HDRS = lefzlib.h + +LIBSRCS = clefzlib.c + +include ../template.mk diff --git a/lefdef/src/lef/clefzlib/clefzlib.c b/lefdef/src/lef/clefzlib/clefzlib.c new file mode 100644 index 00000000..f431d0f3 --- /dev/null +++ b/lefdef/src/lef/clefzlib/clefzlib.c @@ -0,0 +1,69 @@ +/******************************************************************************* + ******************************************************************************* + * Copyright 2014, Cadence Design Systems + * + * This file is part of the Cadence LEF/DEF Open Source + * Distribution, Product Version 5.8. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. + * + * For updates, support, or to become part of the LEF/DEF Community, + * check www.openeda.org for details. + ******************************************************************************* + ******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "zlib.h" +#include "lefzlib.h" +#include "lefrReader.h" + +/* + * Private functions: + */ +size_t lefGZip_read(FILE* file, char* buf, size_t len) { + return gzread((gzFile)file, buf, (unsigned int)len); +} + +/* + * Public functions: + */ +lefGZFile +lefGZipOpen(const char *gzipPath, const char* mode) { + lefGZFile fptr; + + if (!gzipPath) + return NULL; + + fptr = gzopen(gzipPath, mode); + + if (fptr) { + /* successfully open the gzip file */ + /* set the read function to read from a compressed file */ + lefrSetReadFunction(lefGZip_read); + return (lefGZFile)fptr; + } else + return NULL; +} + +int lefGZipClose(lefGZFile filePtr) { + return (gzclose((gzFile)filePtr)); +} + +int lefrReadGZip(lefGZFile file, const char* gzipFile, lefiUserData uData) { + return lefrRead((FILE*)file, gzipFile, uData); +} diff --git a/lefdef/src/lef/clefzlib/lefzlib.h b/lefdef/src/lef/clefzlib/lefzlib.h new file mode 100644 index 00000000..fa23238f --- /dev/null +++ b/lefdef/src/lef/clefzlib/lefzlib.h @@ -0,0 +1,51 @@ +/******************************************************************************* + ******************************************************************************* + * Copyright 2012, Cadence Design Systems + * + * This file is part of the Cadence LEF/DEF Open Source + * Distribution, Product Version 5.8. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. + * + * For updates, support, or to become part of the LEF/DEF Community, + * check www.openeda.org for details. + ******************************************************************************* + ******************************************************************************/ + +#ifndef CLEFZLIB_H +#define CLEFZLIB_H + +typedef void* lefGZFile; + +/* + * Name: lefGZipOpen + * Description: Open a gzip file + * Returns: A file pointer + */ +extern lefGZFile lefGZipOpen(const char* gzipFile, const char* mode); + +/* + * Name: lefGZipClose + * Description: Close a gzip file + * Returns: 0 if no errors + */ +extern int lefGZipClose(lefGZFile filePtr); + +/* + * Name: lefrReadGZip + * Description: Parse a lef gzip file + * Returns: 0 if no errors + */ +extern int lefrReadGZip(lefGZFile file, const char* gzipFile, void* uData); + +#endif diff --git a/lefdef/src/lef/doc/lefapi.pdf b/lefdef/src/lef/doc/lefapi.pdf new file mode 100644 index 00000000..e5a600d8 --- /dev/null +++ b/lefdef/src/lef/doc/lefapi.pdf @@ -0,0 +1,8601 @@ +%PDF-1.4 %âãÏÓ +4674 0 obj <> endobj +xref +4674 802 +0000000016 00000 n +0000020636 00000 n +0000020836 00000 n +0000020865 00000 n +0000020917 00000 n +0000020955 00000 n +0000021105 00000 n +0000021189 00000 n +0000021270 00000 n +0000021354 00000 n +0000021438 00000 n +0000021522 00000 n +0000021606 00000 n +0000021690 00000 n +0000021774 00000 n +0000021858 00000 n +0000021942 00000 n +0000022026 00000 n +0000022110 00000 n +0000022194 00000 n +0000022278 00000 n +0000022362 00000 n +0000022446 00000 n +0000022530 00000 n +0000022614 00000 n +0000022698 00000 n +0000022782 00000 n +0000022866 00000 n +0000022950 00000 n +0000023034 00000 n +0000023118 00000 n +0000023202 00000 n +0000023286 00000 n +0000023370 00000 n +0000023454 00000 n +0000023538 00000 n +0000023622 00000 n +0000023706 00000 n +0000023790 00000 n +0000023874 00000 n +0000023958 00000 n +0000024042 00000 n +0000024126 00000 n +0000024210 00000 n +0000024294 00000 n +0000024378 00000 n +0000024462 00000 n +0000024546 00000 n +0000024630 00000 n +0000024714 00000 n +0000024798 00000 n +0000024882 00000 n +0000024966 00000 n +0000025050 00000 n +0000025134 00000 n +0000025218 00000 n +0000025302 00000 n +0000025386 00000 n +0000025470 00000 n +0000025554 00000 n +0000025638 00000 n +0000025722 00000 n +0000025806 00000 n +0000025890 00000 n +0000025974 00000 n +0000026058 00000 n +0000026142 00000 n +0000026226 00000 n +0000026310 00000 n +0000026394 00000 n +0000026478 00000 n +0000026562 00000 n +0000026646 00000 n +0000026730 00000 n +0000026814 00000 n +0000026898 00000 n +0000026982 00000 n +0000027066 00000 n +0000027150 00000 n +0000027234 00000 n +0000027318 00000 n +0000027402 00000 n +0000027486 00000 n +0000027570 00000 n +0000027654 00000 n +0000027738 00000 n +0000027822 00000 n +0000027906 00000 n +0000027990 00000 n +0000028074 00000 n +0000028158 00000 n +0000028242 00000 n +0000028326 00000 n +0000028410 00000 n +0000028494 00000 n +0000028578 00000 n +0000028662 00000 n +0000028746 00000 n +0000028830 00000 n +0000028914 00000 n +0000028998 00000 n +0000029082 00000 n +0000029166 00000 n +0000029250 00000 n +0000029334 00000 n +0000029418 00000 n +0000029502 00000 n +0000029586 00000 n +0000029670 00000 n +0000029754 00000 n +0000029838 00000 n +0000029922 00000 n +0000030006 00000 n +0000030090 00000 n +0000030174 00000 n +0000030258 00000 n +0000030342 00000 n +0000030426 00000 n +0000030510 00000 n +0000030594 00000 n +0000030678 00000 n +0000030762 00000 n +0000030846 00000 n +0000030930 00000 n +0000031014 00000 n +0000031098 00000 n +0000031182 00000 n +0000031266 00000 n +0000031350 00000 n +0000031434 00000 n +0000031518 00000 n +0000031602 00000 n +0000031686 00000 n +0000031770 00000 n +0000031854 00000 n +0000031938 00000 n +0000032022 00000 n +0000032106 00000 n +0000032190 00000 n +0000032274 00000 n +0000032358 00000 n +0000032442 00000 n +0000032526 00000 n +0000032610 00000 n +0000032694 00000 n +0000032778 00000 n +0000032862 00000 n +0000032946 00000 n +0000033030 00000 n +0000033114 00000 n +0000033198 00000 n +0000033282 00000 n +0000033366 00000 n +0000033450 00000 n +0000033534 00000 n +0000033618 00000 n +0000033702 00000 n +0000033786 00000 n +0000033870 00000 n +0000033954 00000 n +0000034038 00000 n +0000034122 00000 n +0000034206 00000 n +0000034290 00000 n +0000034374 00000 n +0000034458 00000 n +0000034542 00000 n +0000034626 00000 n +0000034710 00000 n +0000034794 00000 n +0000034878 00000 n +0000034962 00000 n +0000035046 00000 n +0000035130 00000 n +0000035214 00000 n +0000035298 00000 n +0000035382 00000 n +0000035466 00000 n +0000035550 00000 n +0000035634 00000 n +0000035718 00000 n +0000035802 00000 n +0000035886 00000 n +0000035970 00000 n +0000036054 00000 n +0000036138 00000 n +0000036222 00000 n +0000036306 00000 n +0000036390 00000 n +0000036474 00000 n +0000036558 00000 n +0000036642 00000 n +0000036726 00000 n +0000036810 00000 n +0000036894 00000 n +0000036978 00000 n +0000037062 00000 n +0000037146 00000 n +0000037230 00000 n +0000037314 00000 n +0000037398 00000 n +0000037482 00000 n +0000037566 00000 n +0000037650 00000 n +0000037734 00000 n +0000037818 00000 n +0000037902 00000 n +0000037986 00000 n +0000038070 00000 n +0000038154 00000 n +0000038238 00000 n +0000038322 00000 n +0000038406 00000 n +0000038490 00000 n +0000038574 00000 n +0000038658 00000 n +0000038742 00000 n +0000038826 00000 n +0000038910 00000 n +0000038994 00000 n +0000039078 00000 n +0000039162 00000 n +0000039246 00000 n +0000039330 00000 n +0000039414 00000 n +0000039498 00000 n +0000039582 00000 n +0000039666 00000 n +0000039750 00000 n +0000039834 00000 n +0000039918 00000 n +0000040002 00000 n +0000040086 00000 n +0000040170 00000 n +0000040254 00000 n +0000040338 00000 n +0000040422 00000 n +0000040506 00000 n +0000040590 00000 n +0000040674 00000 n +0000040758 00000 n +0000040842 00000 n +0000040926 00000 n +0000041010 00000 n +0000041094 00000 n +0000041178 00000 n +0000041262 00000 n +0000041346 00000 n +0000041430 00000 n +0000041514 00000 n +0000041598 00000 n +0000041682 00000 n +0000041766 00000 n +0000041850 00000 n +0000041934 00000 n +0000042018 00000 n +0000042102 00000 n +0000042186 00000 n +0000042270 00000 n +0000042354 00000 n +0000042438 00000 n +0000042522 00000 n +0000042606 00000 n +0000042690 00000 n +0000042774 00000 n +0000042858 00000 n +0000042942 00000 n +0000043025 00000 n +0000043108 00000 n +0000043191 00000 n +0000043274 00000 n +0000043357 00000 n +0000043440 00000 n +0000043523 00000 n +0000043606 00000 n +0000043689 00000 n +0000043772 00000 n +0000043855 00000 n +0000043938 00000 n +0000044021 00000 n +0000044104 00000 n +0000044187 00000 n +0000044270 00000 n +0000044353 00000 n +0000044436 00000 n +0000044519 00000 n +0000044602 00000 n +0000044685 00000 n +0000044768 00000 n +0000044851 00000 n +0000044934 00000 n +0000045017 00000 n +0000045100 00000 n +0000045183 00000 n +0000045266 00000 n +0000045349 00000 n +0000045432 00000 n +0000045515 00000 n +0000045598 00000 n +0000045681 00000 n +0000045764 00000 n +0000045847 00000 n +0000045930 00000 n +0000046013 00000 n +0000046096 00000 n +0000046179 00000 n +0000046262 00000 n +0000046345 00000 n +0000046428 00000 n +0000046511 00000 n +0000046594 00000 n +0000046677 00000 n +0000046760 00000 n +0000046843 00000 n +0000046926 00000 n +0000047009 00000 n +0000047092 00000 n +0000047175 00000 n +0000047258 00000 n +0000047341 00000 n +0000047424 00000 n +0000047507 00000 n +0000047590 00000 n +0000047673 00000 n +0000047756 00000 n +0000047839 00000 n +0000047922 00000 n +0000048005 00000 n +0000048088 00000 n +0000048171 00000 n +0000048254 00000 n +0000048337 00000 n +0000048420 00000 n +0000048503 00000 n +0000048586 00000 n +0000048669 00000 n +0000048752 00000 n +0000048835 00000 n +0000048918 00000 n +0000049001 00000 n +0000049084 00000 n +0000049167 00000 n +0000049250 00000 n +0000049333 00000 n +0000049416 00000 n +0000049499 00000 n +0000049582 00000 n +0000049665 00000 n +0000049748 00000 n +0000049831 00000 n +0000049914 00000 n +0000049997 00000 n +0000050080 00000 n +0000050163 00000 n +0000050246 00000 n +0000050329 00000 n +0000050412 00000 n +0000050495 00000 n +0000050577 00000 n +0000050659 00000 n +0000050740 00000 n +0000050897 00000 n +0000050949 00000 n +0000051053 00000 n +0000051475 00000 n +0000052006 00000 n +0000052466 00000 n +0000056767 00000 n +0000057492 00000 n +0000059502 00000 n +0000059563 00000 n +0000059656 00000 n +0000059835 00000 n +0000059952 00000 n +0000060069 00000 n +0000060256 00000 n +0000060357 00000 n +0000060452 00000 n +0000060641 00000 n +0000060744 00000 n +0000060839 00000 n +0000061010 00000 n +0000061184 00000 n +0000061336 00000 n +0000061524 00000 n +0000061690 00000 n +0000061840 00000 n +0000062009 00000 n +0000062113 00000 n +0000062265 00000 n +0000062453 00000 n +0000062619 00000 n +0000062782 00000 n +0000062988 00000 n +0000063116 00000 n +0000063267 00000 n +0000063423 00000 n +0000063519 00000 n +0000063633 00000 n +0000063779 00000 n +0000063879 00000 n +0000064027 00000 n +0000064155 00000 n +0000064289 00000 n +0000064419 00000 n +0000064561 00000 n +0000064657 00000 n +0000064753 00000 n +0000064885 00000 n +0000065009 00000 n +0000065135 00000 n +0000065289 00000 n +0000065419 00000 n +0000065531 00000 n +0000065641 00000 n +0000065783 00000 n +0000065907 00000 n +0000066019 00000 n +0000066143 00000 n +0000066263 00000 n +0000066359 00000 n +0000066561 00000 n +0000066643 00000 n +0000066771 00000 n +0000066905 00000 n +0000067031 00000 n +0000067177 00000 n +0000067307 00000 n +0000067439 00000 n +0000067573 00000 n +0000067701 00000 n +0000067829 00000 n +0000067955 00000 n +0000068097 00000 n +0000068237 00000 n +0000068379 00000 n +0000068515 00000 n +0000068645 00000 n +0000068775 00000 n +0000068911 00000 n +0000069043 00000 n +0000069149 00000 n +0000069247 00000 n +0000069357 00000 n +0000069459 00000 n +0000069573 00000 n +0000069729 00000 n +0000069823 00000 n +0000069927 00000 n +0000070107 00000 n +0000070207 00000 n +0000070367 00000 n +0000070465 00000 n +0000070573 00000 n +0000070731 00000 n +0000070827 00000 n +0000070933 00000 n +0000071115 00000 n +0000071217 00000 n +0000071347 00000 n +0000071535 00000 n +0000071631 00000 n +0000071767 00000 n +0000071947 00000 n +0000072055 00000 n +0000072183 00000 n +0000072359 00000 n +0000072449 00000 n +0000072633 00000 n +0000072729 00000 n +0000072898 00000 n +0000072992 00000 n +0000073108 00000 n +0000073292 00000 n +0000073402 00000 n +0000073534 00000 n +0000073694 00000 n +0000073796 00000 n +0000073904 00000 n +0000074064 00000 n +0000074176 00000 n +0000074282 00000 n +0000074412 00000 n +0000074610 00000 n +0000074710 00000 n +0000074806 00000 n +0000074958 00000 n +0000075100 00000 n +0000075226 00000 n +0000075344 00000 n +0000075466 00000 n +0000075592 00000 n +0000075704 00000 n +0000075824 00000 n +0000075946 00000 n +0000076060 00000 n +0000076172 00000 n +0000076296 00000 n +0000076412 00000 n +0000076544 00000 n +0000076668 00000 n +0000076794 00000 n +0000076912 00000 n +0000077038 00000 n +0000077156 00000 n +0000077274 00000 n +0000077396 00000 n +0000077528 00000 n +0000077646 00000 n +0000077770 00000 n +0000077888 00000 n +0000078014 00000 n +0000078120 00000 n +0000078218 00000 n +0000078336 00000 n +0000078468 00000 n +0000078616 00000 n +0000078728 00000 n +0000078842 00000 n +0000078981 00000 n +0000079085 00000 n +0000079189 00000 n +0000079335 00000 n +0000079437 00000 n +0000079549 00000 n +0000079711 00000 n +0000079811 00000 n +0000079953 00000 n +0000080061 00000 n +0000080169 00000 n +0000080309 00000 n +0000080405 00000 n +0000080511 00000 n +0000080675 00000 n +0000080787 00000 n +0000080917 00000 n +0000081089 00000 n +0000081201 00000 n +0000081339 00000 n +0000081487 00000 n +0000081597 00000 n +0000081709 00000 n +0000081872 00000 n +0000081998 00000 n +0000082126 00000 n +0000082292 00000 n +0000082388 00000 n +0000082556 00000 n +0000082664 00000 n +0000082825 00000 n +0000082947 00000 n +0000083073 00000 n +0000083224 00000 n +0000083338 00000 n +0000083454 00000 n +0000083621 00000 n +0000083735 00000 n +0000083867 00000 n +0000084010 00000 n +0000084118 00000 n +0000084226 00000 n +0000084391 00000 n +0000084513 00000 n +0000084637 00000 n +0000084856 00000 n +0000085014 00000 n +0000085122 00000 n +0000085274 00000 n +0000085388 00000 n +0000085506 00000 n +0000085672 00000 n +0000085782 00000 n +0000085914 00000 n +0000086080 00000 n +0000086186 00000 n +0000086354 00000 n +0000086464 00000 n +0000086596 00000 n +0000086726 00000 n +0000086860 00000 n +0000086986 00000 n +0000087118 00000 n +0000087242 00000 n +0000087364 00000 n +0000087508 00000 n +0000087650 00000 n +0000087790 00000 n +0000087932 00000 n +0000088062 00000 n +0000088202 00000 n +0000088332 00000 n +0000088476 00000 n +0000088628 00000 n +0000088774 00000 n +0000088922 00000 n +0000089064 00000 n +0000089202 00000 n +0000089362 00000 n +0000089502 00000 n +0000089650 00000 n +0000089782 00000 n +0000089918 00000 n +0000090054 00000 n +0000090212 00000 n +0000090364 00000 n +0000090528 00000 n +0000090686 00000 n +0000090836 00000 n +0000090980 00000 n +0000091126 00000 n +0000091266 00000 n +0000091400 00000 n +0000091530 00000 n +0000091674 00000 n +0000091792 00000 n +0000091914 00000 n +0000092054 00000 n +0000092186 00000 n +0000092316 00000 n +0000092444 00000 n +0000092574 00000 n +0000092694 00000 n +0000092816 00000 n +0000092946 00000 n +0000093076 00000 n +0000093214 00000 n +0000093358 00000 n +0000093504 00000 n +0000093656 00000 n +0000093800 00000 n +0000093956 00000 n +0000094144 00000 n +0000094322 00000 n +0000094508 00000 n +0000094684 00000 n +0000094862 00000 n +0000095040 00000 n +0000095194 00000 n +0000095380 00000 n +0000095540 00000 n +0000095708 00000 n +0000095858 00000 n +0000096020 00000 n +0000096190 00000 n +0000096360 00000 n +0000096522 00000 n +0000096680 00000 n +0000096820 00000 n +0000096964 00000 n +0000097110 00000 n +0000097256 00000 n +0000097412 00000 n +0000097548 00000 n +0000097706 00000 n +0000097844 00000 n +0000097986 00000 n +0000098148 00000 n +0000098304 00000 n +0000098444 00000 n +0000098584 00000 n +0000098742 00000 n +0000098912 00000 n +0000099080 00000 n +0000099226 00000 n +0000099382 00000 n +0000099524 00000 n +0000099662 00000 n +0000099802 00000 n +0000099946 00000 n +0000100094 00000 n +0000100258 00000 n +0000100402 00000 n +0000100562 00000 n +0000100714 00000 n +0000100862 00000 n +0000100996 00000 n +0000101122 00000 n +0000101248 00000 n +0000101388 00000 n +0000101532 00000 n +0000101684 00000 n +0000101838 00000 n +0000101974 00000 n +0000102124 00000 n +0000102290 00000 n +0000102450 00000 n +0000102608 00000 n +0000102760 00000 n +0000102920 00000 n +0000103078 00000 n +0000103250 00000 n +0000103416 00000 n +0000103580 00000 n +0000103738 00000 n +0000103888 00000 n +0000104032 00000 n +0000104184 00000 n +0000104330 00000 n +0000104490 00000 n +0000104616 00000 n +0000104756 00000 n +0000104890 00000 n +0000105034 00000 n +0000105170 00000 n +0000105308 00000 n +0000105442 00000 n +0000105574 00000 n +0000105706 00000 n +0000105850 00000 n +0000105986 00000 n +0000106114 00000 n +0000106234 00000 n +0000106374 00000 n +0000106508 00000 n +0000106628 00000 n +0000106752 00000 n +0000106884 00000 n +0000107010 00000 n +0000107128 00000 n +0000107250 00000 n +0000107368 00000 n +0000107492 00000 n +0000107630 00000 n +0000107766 00000 n +0000107908 00000 n +0000108044 00000 n +0000108172 00000 n +0000108320 00000 n +0000108444 00000 n +0000108568 00000 n +0000108704 00000 n +0000108856 00000 n +0000108984 00000 n +0000109116 00000 n +0000109250 00000 n +0000109402 00000 n +0000109538 00000 n +0000109710 00000 n +0000109874 00000 n +0000110034 00000 n +0000110176 00000 n +0000110336 00000 n +0000110486 00000 n +0000110638 00000 n +0000110786 00000 n +0000110934 00000 n +0000111058 00000 n +0000111190 00000 n +0000111336 00000 n +0000111480 00000 n +0000111630 00000 n +0000111774 00000 n +0000111910 00000 n +0000112066 00000 n +0000112198 00000 n +0000112348 00000 n +0000112490 00000 n +0000112632 00000 n +0000112778 00000 n +0000112922 00000 n +0000113062 00000 n +0000113214 00000 n +0000113350 00000 n +0000113480 00000 n +0000113606 00000 n +0000113734 00000 n +0000113858 00000 n +0000113980 00000 n +0000114102 00000 n +0000114218 00000 n +0000114340 00000 n +0000114476 00000 n +0000114606 00000 n +0000114722 00000 n +0000114852 00000 n +0000114964 00000 n +0000115082 00000 n +0000115216 00000 n +0000115352 00000 n +0000115486 00000 n +0000115620 00000 n +0000115742 00000 n +0000115870 00000 n +0000115996 00000 n +0000116128 00000 n +0000116246 00000 n +0000116360 00000 n +0000116482 00000 n +0000116608 00000 n +0000116730 00000 n +0000116880 00000 n +0000117014 00000 n +0000117146 00000 n +0000117282 00000 n +0000117410 00000 n +0000117506 00000 n +0000117614 00000 n +0000117736 00000 n +0000117852 00000 n +0000117988 00000 n +0000118096 00000 n +0000016336 00000 n +trailer +<<4A6F5A174A6C0841BA4ECB1928E3A4B5>]/Prev 1160547>> +startxref +0 +%%EOF + +5475 0 obj <>stream +hÞìZ}XSWš?÷æƒ$ˆ$"ŠÚA£bˆ·Á¥Z¦5@h\•²UXp¨îÔ²µµ8ÓŠ­m'íŒkg¨@mAÔàl}uhg”BãºÚ­H±´¥vöœû•÷æfžÝéóÌÎô>Oȹç¾çý½¿÷ëœË„!û¤EˆîAä» xN‹”HÓN)j ffIŒQ«¬M77Üh¹QšBá¥YÃÍÑ.d×'N@ +ªÆîÒë'¨ñ#äEè­HGfMøbJÔ ž¨1ó vÆlÖ ŠbìȬ×ãeçhÉ2¤¤)¢È…\:ô'] +bÒ¡Gœà.Šû¢)‚™)+Ém"R*Y#ô‘J%¶]ÏËF +KõèÏ~uSn>³>}µ¹ó€ÓïŽ\8Þ5ªÐEïpÿÒî:ý©´Lgºíó6ÙU“tAЇ©7Иٮe£qOO™¨û ]V×îz6»r#ÍIÔÚt¥«öJí*ÉÎhˆþÈX¨~Z‡´ÝËÐ ¦âõæˆKšG”FæûZïRûÔìû’ô ê&êZÊSáÝÈÌ*v„œP£¦SÙéû˜xWŒÞ8A»CÕF@×ì×=ÜižÈß}£<«x¬fʱçöÎëúZý…jý£šßÛ÷¡L¬×£Ú‹õÑë쥮ÂQ³'*[WtC¹Žñ2Û½]®ù +¾¡ê¢7P ííæÍ sPX¸î¦ê6]^ó¢}мÓôeá)“è>ÊN»rô3Þ +ËÔѪÇègkò<­^gv\vÄÃÚçT›è)T˜çTè™ßaL`R½Oo¥bŽšW›ç¤NF![T1ØcyÌ+®ÞiUú´ ÅT³k¶ÙÆìöÎùÂÜü3U(½¯æ*ó ï¦Þyž«v‹¦€N®IbÞv­B³"zÝe³¢…2yŽ{ÊËæÙ'ekPQÞ«yœé43ú8路µ‘A‡é¡£ïºÄÙ‰“û'ºƒÚèªÜ¾ßµÃ»ÔñûWÕ&Å—Ô3ö”šíÐLîÕõªW*¢jþÝ3ÄË’Þ +í§"ÑúsêßÐ;,2ȫʦ ¨¦å»gz"‘îœú^°›¹À¬4Ïñ„{t‰ê™ôQj)Úowzf2¦~Ý{ªçè^jªE«ì1žðT]ƒr?G­Fï¡Oœ+ i• ô T +³Çžãµ2á® Re u ¡möDw”+¤5èUśԛ”U2÷»M½ËÔVE?u×]53ß<½7Ô®îU$R¯QtÀ³ÀåÍÔ¾­tP7Ð-ô¤'Õ>ÕZ¬~Q‘Dí f2!öwétÄØÍz îÜ@³s …\qfƒN¹ÄÜÚú°)8Hy¦Æîζ†ëT47¢iäÍ3Ç4µÝ®Ö<‡Å¤ª«év•ÅÅ«êj£YÕÎ3o«cjX°2}-²„kw¦{Zí“FµsItb–ÁXÑz·ÃbÀƒ}=ìÂõ©V‚ÍÍG¼L´½ÞaÂ;9™‰Ø0üˆX¨de,áœ0ØEs3ä‘‹¬",ônÝëuçÅ™‚ –;›•Á”±…š]”‹aðKðÏ5@ß]iýAI[þ‘1ôZqÛ•fÓ¸8ˆÓ„A„0*~ðÕ=apW ƒëÂ`P\ç…Áû‚Âó7‡+Îù¼çù‘϶¾·z87xû‡Ÿü°kpäbɆ³cU'®ÄW4í:õ%súã–cÕm9—Ë»V³3·+ä åoÇ¥¡d{æ)\2ƒb{']÷笃7ˆç:8á!Ò±Iÿù»x¹ð¼jwÁÂ6`!éá¹Y/I˜b÷^¼þ)ß{ØÕ5 !¸¦÷ë¹ :Ÿn&Ëg= HûÓÂÎH šÓ¦k?f÷A;;a„-™X~gLã:[A;»w‹${ŸÜ aAâÖ,‡¸(‡øT±l¾cœ3û6ßñ“WhKnc2IZ±èâ'AµÿHªR. …O䌕N×þ +ÚCÜò,¶y-ˆÞJn\•íquÝ©ñìÙO +AªàòI åJÜi•ƒrÊ!eÒ¬êºSä”æ€Ó9“xGWô;Ò47¦¼/w!ˆÏý0LLÚ䧤Eœ°"K–Q8!ÃzçOMÿ g‘ôdeNä_1\Òž—° ®›¹UÎ"Å/£Øp­á>t8áå +9D“„ÅÉÂÄ ?–°+!§¸õ¯“½r>Œqà’,y¥sM¬…ªA*ÿUnÖQkdŽJ<"‡HñA°[vABi°„)½ ÷d¥gü +8Š¤Ä¢“—«åyØ%ÏÃh9l9Þ,7¬1ÅϽ ¸à*|>L(©ö?ªáz¿y§=@5ÅÃ$¹xƒK€ØCªéIÿBνq~myËñ¡–Ô4ãYØ–}Âñ…OAa®áßiÇ'>7rd­©°eNü¸{4@÷sÊCðs‚±’Ï'ò/š¤ –T\ìbY9_‘uV ¢ž//êå‹•CF€r8Y¸*ØÃnÙ¤ô®§ûïøøðöÈ€ätÊùgö-ÿ l|0ž ³X+Ôò+d…¶ Ô2kOKî‹ç%>Ù|=YVÀžÕrgΕîì‘äaÌ!yÅ­”V¦s>Vî} ܼÇ2×ø!IBZǽ@ÝÙN怴Р+I>ß/9 ¶ä$ÎÌðÛïncé8ý·Ñ4r2wH„¹LØ8¶>C*LÎ~çC%Žb›Þn9SŒÕ¿*ž[ÎwH’¢G¾×[Ò7ØSA]€.ÁJ?S,/{LåÚàúYP¸Ó²l7ü¸^÷ ¼–ï“ô:öþ…vYú}¯G²[a·`…š±€µóHŽ´vHj­;ï(%ÇŒª” [f袆+²Þ¢¹Ý2ú½,á%kœ?‡7’ l–7ü…’tÎ +ï¹]W}ï¹$Ifl÷s/yïVn„6ãåíâòËüòÓ,ú4C³ð;!¼.=è{Ô|Þ|'ƒ±ɾWWåðÊùÜ~á5£ïó!D€è“„å.€({ ÄF 2 ‹wD„hNñ,„X fCÈâ !¶ˆâŸ!D€ˆÈb€0@‹ Q!&ˆhYÔˆP c±@< ô#b€x²(!Æ"@ì†ÄdY¬ÁÆ"@ì‚°."ÄÈâûB !`,bÄNëÂ! ‹t Ì0ÓD„€u Ò!‹ùB!`,"D-„€u¡…E4€P@‹Q!`]¨„²0J„ð\ê©G–úÿoB¨žùVù¶9‹X%ôŒ¤Ìz2a0˜Š¹oC$ù¦­ä¯“•±XŠØŬ¬Å®&Ò6¯&9°‘;…Íæp8Ù”Áh±p¢ìm$.@óB±yœx˜Í–*æÈäæ°+ÿTœ3„%eŠVaŽ_‹çb„µ¬aR9£eFª¿£…_A“o„4ìcÇ›ˆ á}áäøž,¢”¦Å·JðÅA&,6ïy Äྨpì?!@©>¼(#¯ÞO¹Å)¨äWØDßÂDÌ08ójœ„ç §‹ŠÈìq 1à‰Z„\àVápú'•…O‹ƒ§ïÓCf§„ œ,,¢ØÂ;ÌæË/ ·ÞêÃÐøXðPŠä!YÙÀÏcy3RŠybsŠù°Ä:ó„o ïÚ"ÖÀ[áVŒV‰ç)Öµì„EH0~Â@ržYü2Ap5jAÔf‹jÄ´8$‰b0Î艹Ɗ@Õ¢¡¢5„MîðKp¬!\,P‘¶M4Ê"{ÄÅOX 1Ÿ "KÑ#¢EÚ¢cV{…â%ØÀÞáOÖ&Õañ7ÛÇÃêß}ÄZ ð12ØdÍJlypN(MY"ž%0cÉg¬Áוÿ˜÷A‹¶z¹—yMB‰â\’™ÆyO¢o\')òëª8¥Ø?n¶~›Øÿd~·ú?Í~Ë¡l‹ý–CÛP¤þ/ýÃz滟%~÷³Ä¿©Ÿ%"TˆB–Å-fþÔ³?Åš†Bñß|”Ô ö† (fÚˆ>¢:eøÖóÝí_ám)ê§Z.µ'„‰B)Ñ·Ùjw²£Ih¿:&´uÊjV Õ:ßdMP¢)e³ÙC©j§Zê¯u©îƒ×îYUó(^gÈœxú]÷T}쿾ÅïÃÞE¨ïM\#­]×M%š¸ú4Bº×‘ÂR…1¶/ ?dÄŸ‡ð}:2ü´™ÿaþ§ÿ#À  +endstream endobj 4675 0 obj <> endobj 4676 0 obj [4677 0 R] endobj 4677 0 obj <>>> endobj 4678 0 obj <> endobj 4679 0 obj <> endobj 4680 0 obj <> endobj 4681 0 obj <> endobj 4682 0 obj <> endobj 4683 0 obj <> endobj 4684 0 obj <> endobj 4685 0 obj <> endobj 4686 0 obj <> endobj 4687 0 obj <> endobj 4688 0 obj <> endobj 4689 0 obj <> endobj 4690 0 obj <> endobj 4691 0 obj <> endobj 4692 0 obj <> endobj 4693 0 obj <> endobj 4694 0 obj <> endobj 4695 0 obj <> endobj 4696 0 obj <> endobj 4697 0 obj <> endobj 4698 0 obj <> endobj 4699 0 obj <> endobj 4700 0 obj <> endobj 4701 0 obj <> endobj 4702 0 obj <> endobj 4703 0 obj <> endobj 4704 0 obj <> endobj 4705 0 obj <> endobj 4706 0 obj <> endobj 4707 0 obj <> endobj 4708 0 obj <> endobj 4709 0 obj <> endobj 4710 0 obj <> endobj 4711 0 obj <> endobj 4712 0 obj <> endobj 4713 0 obj <> endobj 4714 0 obj <> endobj 4715 0 obj <> endobj 4716 0 obj <> endobj 4717 0 obj <> endobj 4718 0 obj <> endobj 4719 0 obj <> endobj 4720 0 obj <> endobj 4721 0 obj <> endobj 4722 0 obj <> endobj 4723 0 obj <> endobj 4724 0 obj <> endobj 4725 0 obj <> endobj 4726 0 obj <> endobj 4727 0 obj <> endobj 4728 0 obj <> endobj 4729 0 obj <> endobj 4730 0 obj <> endobj 4731 0 obj <> endobj 4732 0 obj <> endobj 4733 0 obj <> endobj 4734 0 obj <> endobj 4735 0 obj <> endobj 4736 0 obj <> endobj 4737 0 obj <> endobj 4738 0 obj <> endobj 4739 0 obj <> endobj 4740 0 obj <> endobj 4741 0 obj <> endobj 4742 0 obj <> endobj 4743 0 obj <> endobj 4744 0 obj <> endobj 4745 0 obj <> endobj 4746 0 obj <> endobj 4747 0 obj <> endobj 4748 0 obj <> endobj 4749 0 obj <> endobj 4750 0 obj <> endobj 4751 0 obj <> endobj 4752 0 obj <> endobj 4753 0 obj <> endobj 4754 0 obj <> endobj 4755 0 obj <> endobj 4756 0 obj <> endobj 4757 0 obj <> endobj 4758 0 obj <> endobj 4759 0 obj <> endobj 4760 0 obj <> endobj 4761 0 obj <> endobj 4762 0 obj <> endobj 4763 0 obj <> endobj 4764 0 obj <> endobj 4765 0 obj <> endobj 4766 0 obj <> endobj 4767 0 obj <> endobj 4768 0 obj <> endobj 4769 0 obj <> endobj 4770 0 obj <> endobj 4771 0 obj <> endobj 4772 0 obj <> endobj 4773 0 obj <> endobj 4774 0 obj <> endobj 4775 0 obj <> endobj 4776 0 obj <> endobj 4777 0 obj <> endobj 4778 0 obj <> endobj 4779 0 obj <> endobj 4780 0 obj <> endobj 4781 0 obj <> endobj 4782 0 obj <> endobj 4783 0 obj <> endobj 4784 0 obj <> endobj 4785 0 obj <> endobj 4786 0 obj <> endobj 4787 0 obj <> endobj 4788 0 obj <> endobj 4789 0 obj <> endobj 4790 0 obj <> endobj 4791 0 obj <> endobj 4792 0 obj <> endobj 4793 0 obj <> endobj 4794 0 obj <> endobj 4795 0 obj <> endobj 4796 0 obj <> endobj 4797 0 obj <> endobj 4798 0 obj <> endobj 4799 0 obj <> endobj 4800 0 obj <> endobj 4801 0 obj <> endobj 4802 0 obj <> endobj 4803 0 obj <> endobj 4804 0 obj <> endobj 4805 0 obj <> endobj 4806 0 obj <> endobj 4807 0 obj <> endobj 4808 0 obj <> endobj 4809 0 obj <> endobj 4810 0 obj <> endobj 4811 0 obj <> endobj 4812 0 obj <> endobj 4813 0 obj <> endobj 4814 0 obj <> endobj 4815 0 obj <> endobj 4816 0 obj <> endobj 4817 0 obj <> endobj 4818 0 obj <> endobj 4819 0 obj <> endobj 4820 0 obj <> endobj 4821 0 obj <> endobj 4822 0 obj <> endobj 4823 0 obj <> endobj 4824 0 obj <> endobj 4825 0 obj <> endobj 4826 0 obj <> endobj 4827 0 obj <> endobj 4828 0 obj <> endobj 4829 0 obj <> endobj 4830 0 obj <> endobj 4831 0 obj <> endobj 4832 0 obj <> endobj 4833 0 obj <> endobj 4834 0 obj <> endobj 4835 0 obj <> endobj 4836 0 obj <> endobj 4837 0 obj <> endobj 4838 0 obj <> endobj 4839 0 obj <> endobj 4840 0 obj <> endobj 4841 0 obj <> endobj 4842 0 obj <> endobj 4843 0 obj <> endobj 4844 0 obj <> endobj 4845 0 obj <> endobj 4846 0 obj <> endobj 4847 0 obj <> endobj 4848 0 obj <> endobj 4849 0 obj <> endobj 4850 0 obj <> endobj 4851 0 obj <> endobj 4852 0 obj <> endobj 4853 0 obj <> endobj 4854 0 obj <> endobj 4855 0 obj <> endobj 4856 0 obj <> endobj 4857 0 obj <> endobj 4858 0 obj <> endobj 4859 0 obj <> endobj 4860 0 obj <> endobj 4861 0 obj <> endobj 4862 0 obj <> endobj 4863 0 obj <> endobj 4864 0 obj <> endobj 4865 0 obj <> endobj 4866 0 obj <> endobj 4867 0 obj <> endobj 4868 0 obj <> endobj 4869 0 obj <> endobj 4870 0 obj <> endobj 4871 0 obj <> endobj 4872 0 obj <> endobj 4873 0 obj <> endobj 4874 0 obj <> endobj 4875 0 obj <> endobj 4876 0 obj <> endobj 4877 0 obj <> endobj 4878 0 obj <> endobj 4879 0 obj <> endobj 4880 0 obj <> endobj 4881 0 obj <> endobj 4882 0 obj <> endobj 4883 0 obj <> endobj 4884 0 obj <> endobj 4885 0 obj <> endobj 4886 0 obj <> endobj 4887 0 obj <> endobj 4888 0 obj <> endobj 4889 0 obj <> endobj 4890 0 obj <> endobj 4891 0 obj <> endobj 4892 0 obj <> endobj 4893 0 obj <> endobj 4894 0 obj <> endobj 4895 0 obj <> endobj 4896 0 obj <> endobj 4897 0 obj <> endobj 4898 0 obj <> endobj 4899 0 obj <> endobj 4900 0 obj <> endobj 4901 0 obj <> endobj 4902 0 obj <> endobj 4903 0 obj <> endobj 4904 0 obj <> endobj 4905 0 obj <> endobj 4906 0 obj <> endobj 4907 0 obj <> endobj 4908 0 obj <> endobj 4909 0 obj <> endobj 4910 0 obj <> endobj 4911 0 obj <> endobj 4912 0 obj <> endobj 4913 0 obj <> endobj 4914 0 obj <> endobj 4915 0 obj <> endobj 4916 0 obj <> endobj 4917 0 obj <> endobj 4918 0 obj <> endobj 4919 0 obj <> endobj 4920 0 obj <> endobj 4921 0 obj <> endobj 4922 0 obj <> endobj 4923 0 obj <> endobj 4924 0 obj <> endobj 4925 0 obj <> endobj 4926 0 obj <> endobj 4927 0 obj <> endobj 4928 0 obj <> endobj 4929 0 obj <> endobj 4930 0 obj <> endobj 4931 0 obj <> endobj 4932 0 obj <> endobj 4933 0 obj <> endobj 4934 0 obj <> endobj 4935 0 obj <> endobj 4936 0 obj <> endobj 4937 0 obj <> endobj 4938 0 obj <> endobj 4939 0 obj <> endobj 4940 0 obj <> endobj 4941 0 obj <> endobj 4942 0 obj <> endobj 4943 0 obj <> endobj 4944 0 obj <> endobj 4945 0 obj <> endobj 4946 0 obj <> endobj 4947 0 obj <> endobj 4948 0 obj <> endobj 4949 0 obj <> endobj 4950 0 obj <> endobj 4951 0 obj <> endobj 4952 0 obj <> endobj 4953 0 obj <> endobj 4954 0 obj <> endobj 4955 0 obj <> endobj 4956 0 obj <> endobj 4957 0 obj <> endobj 4958 0 obj <> endobj 4959 0 obj <> endobj 4960 0 obj <> endobj 4961 0 obj <> endobj 4962 0 obj <> endobj 4963 0 obj <> endobj 4964 0 obj <> endobj 4965 0 obj <> endobj 4966 0 obj <> endobj 4967 0 obj <> endobj 4968 0 obj <> endobj 4969 0 obj <> endobj 4970 0 obj <> endobj 4971 0 obj <> endobj 4972 0 obj <> endobj 4973 0 obj <> endobj 4974 0 obj <> endobj 4975 0 obj <> endobj 4976 0 obj <> endobj 4977 0 obj <> endobj 4978 0 obj <> endobj 4979 0 obj <> endobj 4980 0 obj <> endobj 4981 0 obj <> endobj 4982 0 obj <> endobj 4983 0 obj <> endobj 4984 0 obj <> endobj 4985 0 obj <> endobj 4986 0 obj <> endobj 4987 0 obj <> endobj 4988 0 obj <> endobj 4989 0 obj <> endobj 4990 0 obj <> endobj 4991 0 obj <> endobj 4992 0 obj <> endobj 4993 0 obj <> endobj 4994 0 obj <> endobj 4995 0 obj <> endobj 4996 0 obj <> endobj 4997 0 obj <> endobj 4998 0 obj <> endobj 4999 0 obj <> endobj 5000 0 obj <> endobj 5001 0 obj <> endobj 5002 0 obj <> endobj 5003 0 obj <> endobj 5004 0 obj <> endobj 5005 0 obj <> endobj 5006 0 obj <> endobj 5007 0 obj <> endobj 5008 0 obj <> endobj 5009 0 obj <> endobj 5010 0 obj <> endobj 5011 0 obj <> endobj 5012 0 obj <> endobj 5013 0 obj <> endobj 5014 0 obj <> endobj 5015 0 obj <> endobj 5016 0 obj <> endobj 5017 0 obj <> endobj 5018 0 obj <> endobj 5019 0 obj <> endobj 5020 0 obj <> endobj 5021 0 obj <> endobj 5022 0 obj <> endobj 5023 0 obj <> endobj 5024 0 obj <> endobj 5025 0 obj <> endobj 5026 0 obj <> endobj 5027 0 obj <> endobj 5028 0 obj <> endobj 5029 0 obj <> endobj 5030 0 obj <> endobj 5031 0 obj <> endobj 5032 0 obj <> endobj 5033 0 obj <> endobj 5034 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/XObject<>>> endobj 5035 0 obj [/Indexed/DeviceRGB 212 5041 0 R] endobj 5036 0 obj <> endobj 5037 0 obj <>stream +hÞTÍRƒ0…÷yŠ»;„ÜBØÚ§NuD]X ¥È¨PÇ×÷†ÚÉ‚$çÜP±ðæ ¡X!G‰\@¡ìGÆ\IèKvdŸ ¡†ÙëÉ̦×+h™€$•\(Ð(! ý¨@7 h¹™ËÌ¢aá¶AXuì‘– ršH$"åOã4Myj\%­&)2š§úŸ„vx<Æ£ +Z §\g,Ü dG&#W&çÕÚؼ¬Ã.„ _ávtÿÍÞ¼ÝzËp¹XÀCïKä‘×U}Þ4u[Á¶=—ý1/Jðß³[‚¤kÈV3¡˜©–µ÷îOe »º(ÛÁ‰†k‡Üû#•­f{ºÝï³ ù´­J> endobj 5039 0 obj <> endobj 5040 0 obj <>stream +hÞdW XTe÷Ÿaæ¾3 ŒÀåBÍà½“à†¢‚; "â(î‚©É2"‹  ”˜Yšhn¡T枉ŸšKΗû’©¤hæZ~šeÒ¹ÓŸþçZ=ýŸË\ž{ï{Î{–ßùóªUZ•Z­ö3:&vxçá–Yù–9éɉÁQÙ³R”/²I-ûhew_€¼óÇDÎ?Ëæ‹ZC¥Wƒ?Ý[å¢V—× ÎÎ)ÌMOM›cî˜ÜÉÒ¯o¯.ʽóÞO¹÷ën”’d1+Ì›cÉÌ3ÈJÎÎÍÉÎMœcIéj6š5ËÓ=ÔÇé÷¸vuíú¡ë·WÝ&º-vÛëöu«¡­jZ=qq¯roôˆ÷øÈã°‡ÝÐÝ0°ÃðKëˆÖk[ÿêìYçyÛ+Àk”×*¯sÞ>Þ!çŸ<êÞû˜ùé|ÕùŽà®jdÅ–E©#òõñºãå×··ñW4ë øÆåÿeUï€@ œÃ! +ø‘`‚d#$ÛÀÔ~b 늞}±+N2â¤ÛØõ.º‹ BW’¬´ç +ß"M˜lÄä1h€~âSö#xÞ¤“Œ0©'t 4—ÀIÔ‚Ö€–ŸN÷“ÆÓ›xÆWahuô2âA‹ñ€Z¹TíÕ§!H3¡½€AØþ{¶¸OR¡e¾~b©îÖúÓ ÐÚHAøª7ÂV ü ¸}a+û·¸»JQAʇ²|û«z&<ÒÀiû\]ZŸ/áÀ• +@+—V½a:y¸~°ìê!¯Ê ,tŽá¨Ã2}!¦úÂõëÕC1cæ Ÿ{bDCU¾\ôZS¤‚YsA. ¿£Ìöɨc—¤A“ÉÊ %à)§›z;øÃZä7…å˚›Îož0%<>}ºJ”í¢ž‹ûêåBðÄìãm·þtVá?×N‚Á¨ºŽþ±Øߊo‹Šõâ(ØÁ=ÁwÄ3 ÿ‰épZà=óÓA“-ã‚ßýa—TZÊa†¹0|Þ9øù!Á£ßÎÜ•b™Ž¸çÓ††KFB¯]°gd|U_V[rÿå¯Ïî6àƒD‘4—‘Ëj°¤†¯_|¡R€¡`ãÊØÜ%¨ÁH#dûFÈ£±ÃuŽh=`†€B®éœf¯¥ŸŽ¢±‘Þ%*Ð|Cn ÜF6Ùa¯EÜ¡J+M—7ÇÄL;|ä¬Ý¶Eš¬nhL`9¡ ºŸí24#¿p¶äÔ¼´©ù +¼¼·n ÕÈAy™¼Q˜¥¨*e—~GZØGY&\Zˆï˜‡ÔãpBU›‡¿A7‰ojvˆH›9»@,.ã|XõÛ}ÓáºìäåÒZ<&tž’?üÍcwn;²Ï–âÌý7à©/rA®µKØôä ™ÅÅàPÌŸ‡;õÈ>!ÄFÁŒó—õNóš!š $ìQªŒ8#ºSÊžRʶÊaBܬýõ‡·}~ªagú„øŒã%þ)cªðÀÒ0l;eàøæÚÃ'ŒûßÆè…#6Oû*[䟢*¡$8Õt +[2a´ Ì÷$ \$LÎŽŠIi8ßxpÛ—ßÕJPꛪr ½÷â«`ñ?K‡Ÿ.¯Öþ]H[(ß ¾c­êõö(€Ž|ÊöcGú0\aOâpÃÕÏ“8eðº|D(cwq'‡1$LÀ‡ñàAˆñô¾JÕFLDôÄ?»ê ÇtØ]»g¯´kgÍÑãÆoæ\ì±MäåͶMO—§ F‹ø+ƒ@G{Æ1þÙÑ£y±Q‰QÆ2y¦"/Ÿ¯/=vÊœÑFÓvà+¿O<±‚5öHÙ*4¿×:b† Gb;ôÁåX +m´Áð_ ÃÝ7KÄzŽ™Òׄ|<¾o6¸ž¦—KNóå™”ã«ÐN’N²ú4ƒwO@.Ÿ$áb /’è)P¦Oÿò¦¡[¶Fƒ„í™!¯xE¿ÎÀ+J4ò/ö$ÁQûöÃyèó8Æ Ãy ƒ´ƒbšŠ9ˆùK>VÂÕ¼/Oàpöx;Á‡0(uŒã°‚tJñòr +¶V¶iä›À “ÝåLŽZ÷~ŠîsCçHá—m4}zR—ÈG4òô9Ž$è EOzUÑFZïM„‡±Ð†/ß—ýðÃ6"‰ˆ¸9ØçmLlËòò/.š>ÿjÉèÌœ…s—Hè]À…Î11ÀÈ7 Ëi×6ìÛ¶Uä –e–½·*W«Ø[+ŠÖ2b›ÛßðzlòÈKÅAÛk¯m«7¬^÷‘Þ^ºö¿@#!?Òê}‚l("<”‡B…›Û)$4íòµ[5?üïîæˆ>"ÉSâ~•jð\™.nûÉ|› BÏ’h{ˆ ¸‡®!‰“ÓçJÅÌ@ºáºsÄSfʶ„;˜(äæ ‹~­t¶³îÜÏ,¯¿"Mm„ÍGqW¤^‰ÚýDÞS`Ò|ìCé_†*‹œ£Ì¥f\U̶ÏM<bB×€ŒÅögÑ ¡¶“U_o—ÊÈàáN{®äÖ÷›¯Ýý_M¯ÞiƒBCrŸÉN-øÞW&0õRœ© /è.X$[SLȽwoÏ’¬®eð¶;Ô‹æbb fƒn0Ýo®Ÿ"ô.®ÚQÖÔplv¯U TrÑO®“ÒÛÊHh•£…ûOºW±}¥ÄÝÀ±Òw +J“LãÑEš> C£#è„Ž™Í 78õ»<¼÷A…äiÿˆÐ¼Ià›"Šu;ÞJ¶u|éê¨_BÁçû»÷nÊŠ¹]¯ÔÔÈ°7.©n[ú)àb‚Š•ü@"-¥:‡Õ¤8erâlòá¥n7¸ N[ç+êMÉU€kµØº›°ß02¸#r6ìá×Ý$•a­Ìᆛ0Ú~tÓýy4Ï«ãFôqü!MèÇ(†ýóÁǺݪdŠoöaÂÿ 0¤ô^ +endstream endobj 5041 0 obj <>stream +hÞ€ý¿¿¿ÿÿÿ +++@@@·tvâ–™¦¦¦©©©­­­®®®Æ-3¸¸¸ÉÉÉÏÏÏ···ÈÈȵµµ›››333¬¬¬èèèóóóÆÆÆæææyyywwwïïïòòò<<<ÌÌÌðÊË⻽ş ³ŒŽ¯ˆŠ°‰‹ñññoooåååýýý???þþþðððÔÔÔÀÀÀ½½½ÂÂÂÙÙÙôôô\\\ÅÅÅäääûûûùùùîîîçççSSSÝÝÝúúú¶¶¶ßßßPPP``` pppŸŸŸõõõ{{{000MMM]]]üüünnn€€€WWWööögggøøø¡¡¡ììì•••´´´ÑÑÑ ¥¥¥÷÷÷‹‹‹ÚÚÚ ÍÍÍ>>>444ÊÊÊYYYŠŠŠ£££¨¨¨UUUuuu + + +HHH___TTTÞÞÞbbb¯¯¯III„„„ÓÓÓ}}}’’’ZZZííí°°°ºººËËË===AAA†††ˆˆˆ²²²¾¾¾êêê***---ÐÐБ‘‘ªªª±±±¼¼¼¹¹¹«««ÜÜÜááá   ààà(((ãããqqqØØØ“““‡‡‡éééaaa¢¢¢³³³×××rrrzzzRRRÒÒÒÁÁÁÛÛÛsssÖÖÖ)))âââ[[[|||»»»ÕÕÕÄÄÄdddÎÎÎVVVÇÇÇJJJ§§§~~~¤¤¤...žžžLLLKKKÃÃÃëëë^^^™™™iii888mmmfff"""BBB‰‰‰NNNhhh999,,,666XXXŒŒŒ………;;;:::555777!!! žmf3 +endstream endobj 5042 0 obj <>stream +hÞì™[SUÇ· +¶5ÇP¸ ›ëÅ ]î`@ì…ínˆàÔšI“ Ö¤‰¢Aj +šÃA 2\¸¢ -ò%S+3_ʲ7³÷—?¨ÝsßÎ}ö<>ˆO~Ÿ‡m÷wÎùÏ=÷œßù‹B1›”'¥âîÐ|dÎÈL+Õ}÷sº/óŽ+ƒdÎÌRk`iµì/ðñ,º®–úUµ©O-)È…è‡HZ¸7­V@؆,ÈÌjÝ}ñ˜ÕÙQ…œ…)åèçH‹s®!M#sn~¨ÂbÒË£ -¥˜Í&$|èáG–=Ji™Ö\(ªPDzyÌ‚bÈ\¨øV˜qkI©QYy…4óã•vÇüaFœ® £*«CšÙí!æ3‚AÂf¯g>ólºó̾êå*UR`Q¬PÕúDíëTŠ•5>)f#é¥VÉ«­,bU-ö…ëjUªåuFØæ+R©TE¾ôÌÆjs\ê'˜YPËø#i\ ¬kž3×­¤Z<€ïÞ}× +£L5ÝD¹aº^ˆ§aÖ¯ k-*©rÒ6¨£§üpO*˜!ÅLHЭ«Çe’•§ƒ¼¥QÃØ×7D6Å3Yf#ƒ¬ÈllBÅÌÏšQ\zØxÌ0Üs¸L‚•Â%χCð:¡´¡Ù!ÇLµ|ÁíŽlÌm±2Ì›^|©µ® möÙnÀýµoÙҮΠP²µcùµº3ÄcN9ww/[¸Á릲µˆ»§ë•íõô\¦;Áã|u&ͬ-#YêÝÞìÞ&fÃëlèëUæ/ØC–í5°m©n^kíÞ'gðÜ­Ñ~0ßµû0sLÝã  šø÷ßõúÐp¶÷@y=4™wäŽäL}d¬Bf0̱¬Ñ‘æp<^ÀŒŽŽÅ- ®C °7AÀë#ÒÚØ~CÀ¼œ¼îˆöw?³ÏšbîÎOÆßCX–Ç¿ÿ·4ýMñ¸g‚àî£kÔ®z›,|§“d+÷°º7iuN‚]n`05Tý ÇÉ©zx¾«1äßÌ Pq¨ÌB4€UØgå1ç$Q¢ŠŠ>ž“‘Q¥%;ƹ‡în,A1Xþ ‡3¨Õž5\{¢ÄNŽ9¤™£§B°¯ÑÓy˜pwU}´¤¨<…ugP)fPëȨa.ÞšYf3y(?UYÀ\Äi16y2—ÐóÌ.»M’›ÒÇL“bÖêQþþL…¡½Û¤˜ADœ…@¦eVÒK%$Ú£9µ\ò̬'z ÀDnkÚ-Ŭi6Ý.æ.oÜ™Žù¬ãÏg†Ïëâ!DÀ Ún^`D$c]L6š(ùÈlÌÈËZþ|þœ´]lÉ£½ ¡4{JÛY^ÜÌÓ˜¬ë/.]Å ÊÍzŸè Ï|…¼¼ªçÏ3#dsQ*¼|9F™¿:Ý€ ™A<ÉØ=î`™ ˜àY¤gÖ€ëž*8ÛF¾&mßL`é™édñzÔÖ]ÍK»3ª-!³q yýmo…hœû©Të@êZY]w+Ì8àS|—Õ¯¬Õ3Õ¿¶+§R]AV†¹™ æ?°¡eêp!¼§°k¯ ÊŸ/BöŨsvf¤•kà­§Göò›¿L.Š¸˜:›:ý”m--·=¯q•‹7Î2ïÏäì7¦Øì5 sà:Û ÃN§èø¥ œ›Ž±ÜÙjâ'ºÎÍI&±pƒÑF™í(¥¼ÌÌe<bÿ™µÿ2m ÌÎŒ„Ø¡ÙÇ.ÇÉ_Y7û¶WÈ1ãþ¬=äËÒ®š>fâÕçnÆýv¶*xáïd2Å“Iîƒëþ¼JJ6Þ84]À0ë# ÄzÀvùûB,…–)n²¹ÿ![D²¸; ­ºhŠO–øå˜> endobj 5044 0 obj <> endobj 5045 0 obj <> endobj 5046 0 obj <> endobj 5047 0 obj <> endobj 5048 0 obj <> endobj 5049 0 obj <> endobj 5050 0 obj <> endobj 5051 0 obj <> endobj 5052 0 obj <> endobj 5053 0 obj <> endobj 5054 0 obj <> endobj 5055 0 obj <> endobj 5056 0 obj <> endobj 5057 0 obj <> endobj 5058 0 obj <> endobj 5059 0 obj <> endobj 5060 0 obj <> endobj 5061 0 obj <> endobj 5062 0 obj <> endobj 5063 0 obj <> endobj 5064 0 obj <> endobj 5065 0 obj <> endobj 5066 0 obj <> endobj 5067 0 obj <> endobj 5068 0 obj <> endobj 5069 0 obj <> endobj 5070 0 obj <> endobj 5071 0 obj <> endobj 5072 0 obj <> endobj 5073 0 obj <> endobj 5074 0 obj <> endobj 5075 0 obj <> endobj 5076 0 obj <> endobj 5077 0 obj <> endobj 5078 0 obj <> endobj 5079 0 obj <> endobj 5080 0 obj <> endobj 5081 0 obj <> endobj 5082 0 obj <> endobj 5083 0 obj <> endobj 5084 0 obj <> endobj 5085 0 obj <> endobj 5086 0 obj <> endobj 5087 0 obj <> endobj 5088 0 obj <> endobj 5089 0 obj <> endobj 5090 0 obj <> endobj 5091 0 obj <> endobj 5092 0 obj <> endobj 5093 0 obj <> endobj 5094 0 obj <> endobj 5095 0 obj <> endobj 5096 0 obj <> endobj 5097 0 obj <> endobj 5098 0 obj <> endobj 5099 0 obj <> endobj 5100 0 obj <> endobj 5101 0 obj <> endobj 5102 0 obj <> endobj 5103 0 obj <> endobj 5104 0 obj <> endobj 5105 0 obj <> endobj 5106 0 obj <> endobj 5107 0 obj <> endobj 5108 0 obj <> endobj 5109 0 obj <> endobj 5110 0 obj <> endobj 5111 0 obj <> endobj 5112 0 obj <> endobj 5113 0 obj <> endobj 5114 0 obj <> endobj 5115 0 obj <> endobj 5116 0 obj <> endobj 5117 0 obj <> endobj 5118 0 obj <> endobj 5119 0 obj <> endobj 5120 0 obj <> endobj 5121 0 obj <> endobj 5122 0 obj <> endobj 5123 0 obj <> endobj 5124 0 obj <> endobj 5125 0 obj <> endobj 5126 0 obj <> endobj 5127 0 obj <> endobj 5128 0 obj <> endobj 5129 0 obj <> endobj 5130 0 obj <> endobj 5131 0 obj <> endobj 5132 0 obj <> endobj 5133 0 obj <> endobj 5134 0 obj <> endobj 5135 0 obj <> endobj 5136 0 obj <> endobj 5137 0 obj <> endobj 5138 0 obj <> endobj 5139 0 obj <> endobj 5140 0 obj <> endobj 5141 0 obj <> endobj 5142 0 obj <> endobj 5143 0 obj <> endobj 5144 0 obj <> endobj 5145 0 obj <> endobj 5146 0 obj <> endobj 5147 0 obj <> endobj 5148 0 obj <> endobj 5149 0 obj <> endobj 5150 0 obj <> endobj 5151 0 obj <> endobj 5152 0 obj <> endobj 5153 0 obj <> endobj 5154 0 obj <> endobj 5155 0 obj <> endobj 5156 0 obj <> endobj 5157 0 obj <> endobj 5158 0 obj <> endobj 5159 0 obj <> endobj 5160 0 obj <> endobj 5161 0 obj <> endobj 5162 0 obj <> endobj 5163 0 obj <> endobj 5164 0 obj <> endobj 5165 0 obj <> endobj 5166 0 obj <> endobj 5167 0 obj <> endobj 5168 0 obj <> endobj 5169 0 obj <> endobj 5170 0 obj <> endobj 5171 0 obj <> endobj 5172 0 obj <> endobj 5173 0 obj <> endobj 5174 0 obj <> endobj 5175 0 obj <> endobj 5176 0 obj <> endobj 5177 0 obj <> endobj 5178 0 obj <> endobj 5179 0 obj <> endobj 5180 0 obj <> endobj 5181 0 obj <> endobj 5182 0 obj <> endobj 5183 0 obj <> endobj 5184 0 obj <> endobj 5185 0 obj <> endobj 5186 0 obj <> endobj 5187 0 obj <> endobj 5188 0 obj <> endobj 5189 0 obj <> endobj 5190 0 obj <> endobj 5191 0 obj <> endobj 5192 0 obj <> endobj 5193 0 obj <> endobj 5194 0 obj <> endobj 5195 0 obj <> endobj 5196 0 obj <> endobj 5197 0 obj <> endobj 5198 0 obj <> endobj 5199 0 obj <> endobj 5200 0 obj <> endobj 5201 0 obj <> endobj 5202 0 obj <> endobj 5203 0 obj <> endobj 5204 0 obj <> endobj 5205 0 obj <> endobj 5206 0 obj <> endobj 5207 0 obj <> endobj 5208 0 obj <> endobj 5209 0 obj <> endobj 5210 0 obj <> endobj 5211 0 obj <> endobj 5212 0 obj <> endobj 5213 0 obj <> endobj 5214 0 obj <> endobj 5215 0 obj <> endobj 5216 0 obj <> endobj 5217 0 obj <> endobj 5218 0 obj <> endobj 5219 0 obj <> endobj 5220 0 obj <> endobj 5221 0 obj <> endobj 5222 0 obj <> endobj 5223 0 obj <> endobj 5224 0 obj <> endobj 5225 0 obj <> endobj 5226 0 obj <> endobj 5227 0 obj <> endobj 5228 0 obj <> endobj 5229 0 obj <> endobj 5230 0 obj <> endobj 5231 0 obj <> endobj 5232 0 obj <> endobj 5233 0 obj <> endobj 5234 0 obj <> endobj 5235 0 obj <> endobj 5236 0 obj <> endobj 5237 0 obj <> endobj 5238 0 obj <> endobj 5239 0 obj <> endobj 5240 0 obj <> endobj 5241 0 obj <> endobj 5242 0 obj <> endobj 5243 0 obj <> endobj 5244 0 obj <> endobj 5245 0 obj <> endobj 5246 0 obj <> endobj 5247 0 obj <> endobj 5248 0 obj <> endobj 5249 0 obj <> endobj 5250 0 obj <> endobj 5251 0 obj <> endobj 5252 0 obj <> endobj 5253 0 obj <> endobj 5254 0 obj <> endobj 5255 0 obj <> endobj 5256 0 obj <> endobj 5257 0 obj <> endobj 5258 0 obj <> endobj 5259 0 obj <> endobj 5260 0 obj <> endobj 5261 0 obj <> endobj 5262 0 obj <> endobj 5263 0 obj <> endobj 5264 0 obj <> endobj 5265 0 obj <> endobj 5266 0 obj <> endobj 5267 0 obj <> endobj 5268 0 obj <> endobj 5269 0 obj <> endobj 5270 0 obj <> endobj 5271 0 obj <> endobj 5272 0 obj <> endobj 5273 0 obj <> endobj 5274 0 obj <> endobj 5275 0 obj <> endobj 5276 0 obj <> endobj 5277 0 obj <> endobj 5278 0 obj <> endobj 5279 0 obj <> endobj 5280 0 obj <> endobj 5281 0 obj <> endobj 5282 0 obj <> endobj 5283 0 obj <> endobj 5284 0 obj <> endobj 5285 0 obj <> endobj 5286 0 obj <> endobj 5287 0 obj <> endobj 5288 0 obj <> endobj 5289 0 obj <> endobj 5290 0 obj <> endobj 5291 0 obj <> endobj 5292 0 obj <> endobj 5293 0 obj <> endobj 5294 0 obj <> endobj 5295 0 obj <> endobj 5296 0 obj <> endobj 5297 0 obj <> endobj 5298 0 obj <> endobj 5299 0 obj <> endobj 5300 0 obj <> endobj 5301 0 obj <> endobj 5302 0 obj <> endobj 5303 0 obj <> endobj 5304 0 obj <> endobj 5305 0 obj <> endobj 5306 0 obj <> endobj 5307 0 obj <> endobj 5308 0 obj <> endobj 5309 0 obj <> endobj 5310 0 obj <> endobj 5311 0 obj <> endobj 5312 0 obj <> endobj 5313 0 obj <> endobj 5314 0 obj <> endobj 5315 0 obj <> endobj 5316 0 obj <> endobj 5317 0 obj <> endobj 5318 0 obj <> endobj 5319 0 obj <> endobj 5320 0 obj <> endobj 5321 0 obj <> endobj 5322 0 obj <> endobj 5323 0 obj <> endobj 5324 0 obj <> endobj 5325 0 obj <> endobj 5326 0 obj <> endobj 5327 0 obj <> endobj 5328 0 obj <> endobj 5329 0 obj <> endobj 5330 0 obj <> endobj 5331 0 obj <> endobj 5332 0 obj <> endobj 5333 0 obj <> endobj 5334 0 obj <> endobj 5335 0 obj <> endobj 5336 0 obj <> endobj 5337 0 obj <> endobj 5338 0 obj <> endobj 5339 0 obj <> endobj 5340 0 obj <> endobj 5341 0 obj <> endobj 5342 0 obj <> endobj 5343 0 obj <> endobj 5344 0 obj <> endobj 5345 0 obj <> endobj 5346 0 obj <> endobj 5347 0 obj <> endobj 5348 0 obj <> endobj 5349 0 obj <> endobj 5350 0 obj <> endobj 5351 0 obj <> endobj 5352 0 obj <> endobj 5353 0 obj <> endobj 5354 0 obj <> endobj 5355 0 obj <> endobj 5356 0 obj <> endobj 5357 0 obj <> endobj 5358 0 obj <> endobj 5359 0 obj <> endobj 5360 0 obj <> endobj 5361 0 obj <> endobj 5362 0 obj <> endobj 5363 0 obj <> endobj 5364 0 obj <> endobj 5365 0 obj <> endobj 5366 0 obj <> endobj 5367 0 obj <> endobj 5368 0 obj <> endobj 5369 0 obj <> endobj 5370 0 obj <> endobj 5371 0 obj <> endobj 5372 0 obj <> endobj 5373 0 obj <> endobj 5374 0 obj <> endobj 5375 0 obj <> endobj 5376 0 obj <> endobj 5377 0 obj <> endobj 5378 0 obj <> endobj 5379 0 obj <> endobj 5380 0 obj <> endobj 5381 0 obj <> endobj 5382 0 obj <> endobj 5383 0 obj <> endobj 5384 0 obj <> endobj 5385 0 obj <> endobj 5386 0 obj <> endobj 5387 0 obj <> endobj 5388 0 obj <> endobj 5389 0 obj <> endobj 5390 0 obj <> endobj 5391 0 obj <> endobj 5392 0 obj <> endobj 5393 0 obj <> endobj 5394 0 obj <> endobj 5395 0 obj <> endobj 5396 0 obj <> endobj 5397 0 obj <> endobj 5398 0 obj <> endobj 5399 0 obj <> endobj 5400 0 obj <> endobj 5401 0 obj <> endobj 5402 0 obj <> endobj 5403 0 obj <> endobj 5404 0 obj <> endobj 5405 0 obj <> endobj 5406 0 obj <> endobj 5407 0 obj <> endobj 5408 0 obj <> endobj 5409 0 obj <> endobj 5410 0 obj <> endobj 5411 0 obj <> endobj 5412 0 obj <> endobj 5413 0 obj <> endobj 5414 0 obj <> endobj 5415 0 obj <> endobj 5416 0 obj <> endobj 5417 0 obj <> endobj 5418 0 obj <> endobj 5419 0 obj <> endobj 5420 0 obj <> endobj 5421 0 obj <> endobj 5422 0 obj <> endobj 5423 0 obj <> endobj 5424 0 obj <> endobj 5425 0 obj <> endobj 5426 0 obj <> endobj 5427 0 obj <> endobj 5428 0 obj <> endobj 5429 0 obj <> endobj 5430 0 obj <> endobj 5431 0 obj <> endobj 5432 0 obj <> endobj 5433 0 obj <> endobj 5434 0 obj <> endobj 5435 0 obj <> endobj 5436 0 obj <> endobj 5437 0 obj <> endobj 5438 0 obj <> endobj 5439 0 obj <> endobj 5440 0 obj <> endobj 5441 0 obj <> endobj 5442 0 obj <> endobj 5443 0 obj <> endobj 5444 0 obj <> endobj 5445 0 obj <> endobj 5446 0 obj <> endobj 5447 0 obj <> endobj 5448 0 obj <> endobj 5449 0 obj <> endobj 5450 0 obj <> endobj 5451 0 obj <> endobj 5452 0 obj <> endobj 5453 0 obj <> endobj 5454 0 obj <> endobj 5455 0 obj <> endobj 5456 0 obj <> endobj 5457 0 obj <> endobj 5458 0 obj <> endobj 5459 0 obj <> endobj 5460 0 obj <> endobj 5461 0 obj <> endobj 5462 0 obj <> endobj 5463 0 obj <> endobj 5464 0 obj <> endobj 5465 0 obj <> endobj 5466 0 obj <> endobj 5467 0 obj <> endobj 5468 0 obj <> endobj 5469 0 obj <> endobj 5470 0 obj <> endobj 5471 0 obj <> endobj 5472 0 obj <> endobj 5473 0 obj <> endobj 5474 0 obj <> endobj 1 0 obj <> endobj 2 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 3 0 obj <>stream +hÞŒZK“ÛF®ÚãüŠ>’[’"6ßÎÉkÇ©ì%.{|röÀ!i‰¶D2$åÉägì/^š¤4v²å²Å~¡Ñh<> ýÃÏïsïþu÷Ãksÿé.ßå‰ÙÓùH­IƒpFæþ|·7ú{_ò?wÞ?üûÏ´.ĺ]–¼ðþõÝn¿·9ÏÛÒW˜ñäž±ûÀv©oé'ñ\31¯Šª–϶¬Íëzl­4¿M¼÷Oã„ѳ¿ v‘7nÌ/~¸Ë¼–Û¡WîÌËÓÉ ÍAfÑ;É”Ñ߆»À3ƒìXch¬ÑüŠA¯0¶óÿsÿob[ÎB=vez¢ôÑ{;Èü¦år¯®LÃÜfàƒÊÚÿ¡müŒ6›ü­Õ=3ìi=ó~*¤}5Ȭ{¦û$ÍËs­û–xÜ3{ùž®ˆØûè‘ eYM2\¶…Im$X>På)¿Èg VÊ´6&ŽeQlÞ5_Ao€ôͯàõËhÞ`é súX<)Ñ÷˜Ðšwc½ÚèÕK“ƒjFò»1Þ¿”Ãüð&€é©ÂBYyTÝ>z÷~Æ÷6øI‰Î›°ŒÏÅðÅw1 Œ_Ð7q©TU5“]”e³j†±ªf–¥Žp`÷D‚(³ˆtLº@¤å—Onétä¢Åˆõhk#ùJ§Œéjêeðv-_-ñÈ ƒ,·ÑJïgr]<µ>S§¥ã1oÃ×xdp„ÓL¿ñÄ—È‘žó»L¸ÔJ‹Gõú wM{à±gÌþ×÷thïý?Ež©óŒQN¾ª5˜ˆUùbU 22¹ÿ”l¦ìZ™`˜V²~…J ×J4h.T4õzú +Rž9µ9á ±w2UÝËô–$‘)³XT­Û™â–º²Z bsõ8šñØñ.±÷è[ñŃLéøl1Ù‰MÙGIŸhyçÉ„Ë‚üx¶—®ýN6Ë+Í]$?1Zö.%Î’µì¯D„4BŽ¬ã 79žx¯ü SÌŠœäÿ±@½&ÏkEÍÙ³G¸Ž êF~¾‘³’TXÑDûh)¶xﳿU“g§6³5/ݶZÏòcb犌4…þÒ-DÞÌ Ï0tÇ|w˜À: TãØ&ý’»ëx®Yd½ö +É,ë²àW,RyÞ€6ÒÞJݲ„ÈȹÚPNy•ø¸Pô/°ˆ.â(i÷_{hWë{:Gåè ŽëÑc9zŠ£§¸„ÈÛ\-(wØ€y§xÅߺ¿tÀ”fB_•åлÛuþÈÆÁñE|eÒÄð@fyÁqÁÑ›zœïÛÍXI݃øýzëÈ·ðeìóU¼¼#‰`+êüèoÙþ¨êtŠ}Qö9‰õìó]:6F[ŸZß1»xV…3ëoŽˆCƒAóï#ì ]CSmzôt}íæ†)äxOsêòÜ°’$P’Dç™#Âå©š·0&Áw÷×`%ÈTñ^1ï»zœ†¦œê +†üv ÜhÞúá^p£†áÜŒ$åöÅ f ˆÁ8]P‹‰¹¢–#ÅíþBA”UýDÈñAÄ®…£ÍY€¬`FëR+£+ŸÄWËl +¼²÷m6À%òX¹w8b9A!™ZñGÈ]0…‹ô¶.6qã‚Ö9"±¸›?ý €ÆÁê͉ üù û9t­?Z@‹“Ôƒz¦•½\èE®YG$B“^Õ'ö]´okH1C6®'óµéN…"±•]¯ ONƒ¡Q™x”°t³ ¾kC™•b¼b6„ ‹U†žÒ©ï£o™çùéE{ý´lÊ£èàêµ40œ¦Öm®Ð D‹p ,BYU+PÌÒ†°ÙU Ö #ç+Õƒ3 –Æ8wxN‘CUãH•XS‡³¤ tî\µ cÝBÑ<0ØélUa`úú¡[]¤!¢È½ç‹–M»Š%÷j¿3±—Þ zõãQLžS© ÆO]Õó@ŽÞÞ]IÖš(‰¸èB7pÊxÖÀ¯@¥RÜÐ ±@`t+àÑ)–`Å,r% ¤€•¬lá bž(€ìJø&hÞ“ì“*xzT.ŽÞ¥Æ2¢F.@‹Ç¹­ü¯ö_ ؼ¼&wpLôÐøæÓ|FFô ‘(‡€TÕ‘±<¸{÷GˆˆÐ+¶/¼ªWtõ,,] útÿÄfš)Ò½˜^r +v¯âøÉádìp€­9!†{‡ú‡½ó×”èòE‰ÝQ3„jÓê–¸%Ô€Ùåç(ä)¶3¿ÄUíÓ%À̈.TD7kwíN<‰ñkb6S3’åòœÏ~€øb0ÖiªŠÖ±¦« C’ûO§Ž92ΞJ±÷V hNÉ/ÔËçÀìûWØãÖï;›å9‘ {•øBžE>x·|å`à•ØÕ‹_!r¯LÑŒ˜sªOOļÍ$Gäž®#ñ-Ò´»À&ñóp-Áœ§ÍÉšVc›$D&€[#íb xN¸ÈÆOÙáµè&¦î–¦e£UZ<ø…SˆÍû ¤Vq\q»e‹ŒüÉ÷˜y+A¨pŠi>@*fÖÒ>s.08ð™ó&•ã=ãŒñRÙ›ñÈ5¡‡ÚÿK%I\…2^*”‘ú‘õ2ÒèFÆŹ–u„s½ž¯¾‹]>ÜZ/)x·JÇÙç|ó'ç{%ûòøéV9>v(ë#GƒòHw^ª‡ôA8½É7)?Úö¶Bž®2þ×ì3–šÞÀY6g-<ø÷â:Ë$øfm¾”Æ£ÙÜBÅ¿H‰´•4˜R¤G‚óÈ¥F˜Ch¡‡ÌÀ®œ¶ÕÌÜâË—V}5÷š+à *¾­Q-dXÁŸ}†€( óî¦<ØàP/{εá#—±µ«ªµr+„ËÕrðƒ³VK·¼ÉþZð8qV±ª5×cÝê@¡I© +öFQC§¨Z( ÈNgñ4s +¬ z.©Sàpáà0‡ À0P°VσY¥ÐKÝ9c2_/Š—ØLëî"ÅØZÒÔ§¢m^Yê·âf%D=ÁꀟFæÓÍ~÷0¬Nºy?Ãü%M©×<Ì…Ê0€§«k5_)»v%ÆþI ³'¡¶FìÏ_*©%db|Ž mÌã\Jcr<`JO1Ž—óš\9W¶Û'Éê\.(šS3q}%´xƒgÇ8˜ª8‡šß ±ˆ”£±ï)É·ò_*”…ƨ§¤ïôêV“yc=ç—¦­°T.’ã`*Rêñr"¿90çr1îX¥GWÇÑ­rÎÏVŸÅ­êݳM„Š«Ràªo~ +¤j¿ý²”Ï ß‰¿«G—‘Ïn$¯*'D6%r…ïЋŒdvý)\£‰å})ÍWå¿E¤VâJ^kúçïMnF·.h˜ª!gÝdú5Eâê-Z ©ÍÏú)?M4Ø.1”Ø(Ï‚<|î÷âLUé +AsAWRˆ@RˆhN!¬ú'£Øtœ®¡f9û*ñ×£BOsëÜV¨ûèü[˜gûV¾.h½áÿÕ{/¥ó.–‹·ik¥•n%K$ƒ)°®2¯ßøiÆ«ÞÙ›©4·ø!­\6ªõ¥z~õëߥk§WÕ!%Tâ“¡²¼zÒy +{’ݪnóÓýÝÿÞ‰j +endstream endobj 4 0 obj <> endobj 5 0 obj <>stream +hÞbd`ab`ddäóõðöõÔ®ÌMÊω¨þaü!ÎòC–Gì·Çï¿®ýjc•É¬áýîÆÿÝ[໿àŒìB ÌŒŒü©ÙÉù•E™é%Å©E™iÎ0ž‚F²¦‚¡¥…©ˆ4“– ÒÒ@Á1%?)U!¸²¸$5·XÁ3/9¿¨ ¿(±$5EOAÁ1'GbžBQ*ÐÌ2 (Ôe@ÀÈØÎÀ¤pd7 û¦ï}|@ôsUÍæÏ¿ß\þ}3ã¾ÍßyN}Ÿ¸à»îfæ Ìí¨­i«ìO™b·ÖÔ÷7¯É¢ß…ß5S¾ f»°|EÃ\‰úƸ´¼&ß>Éß¼r¾{^{¹nÇᙇJ¶U,ˆì/æ˜ÏÖþ]„õOãïÑßÁßõ~ë}B½ï`ÈÓû „@ñßÁr›Å¾Û|—Bý[ö· Âi¸_ÕœŸ¦ÓGÍ`{ÎõŠ À k¤7 +endstream endobj 6 0 obj <> endobj 7 0 obj <>stream +hÞTPËŠÃ0 ¼û+tléÁIn…Xº,äÐM»w×V²†F6ŠsÈß×N³-=h@# 3’ÜÕß5ÙòÄN7 µd7²F¸ag òŒÕaéfÔ½ò £¸™†€}M­ƒ²ò‡Cà V?Å&[ƒ<²A¶ÔÁê’_#ÑŒÞß±G +AUÁVÈÝ^ùƒêd’½¹Ë䊹ÏcgpðJ#+êʬ¨ž€d>gÿŠ[«ÿ‹e3ûÚV"î.lR¥S^ôȳÍ÷Î’¹%|½Ä;Ÿ¼R‰‡…‡h^ +endstream endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <> endobj 21 0 obj <> endobj 22 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 25 0 obj <> endobj 26 0 obj <> endobj 27 0 obj <> endobj 28 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <> endobj 37 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 38 0 obj <>stream +hÞìZÙrÛÈ}çWô#0S„{_'´=åÔ,ŠDÛ®< "$a†‹BBöø7òùËÜÛØ •¤8ª™R™€Ù@wãÜsÏ]Fîg¯¾¿aäþ0Ó‚j‰´šJöÙìnö—åìÕ[FYÞÍ'þàÀ¬Iœ%FЄr²ÜÌ(Ì’P ß-ogó„R*ÈòËìSôÛ·D%–,^-¾ý–\ícfíî÷éf“oïÉ»m‘íïÒÛ,þûò¯³7Ël÷!´ß³Á6D¹ çwá\%m½8®Éy½:WÕêé¡ ñ\'&zÿ¸JñŒGE¶*OHŽGmãDEÕe?Víoª‹xy¤LÅs&™qp±€SKž^Á)̱ߕ—­žn ò!66aQVMu¨ÖÙm«Eÿ¸”À½œkC–¯ý¾¥ìã÷oÂœ‹ç6‘‘›sÊÊSEbèˆú8ýpñK_îäÍÑvÂ$ -GkÛ‰†}¬bßÿw«ß­×ä:¿š$uÌ€Œr²}<È·Ï1ðe¶JzÎez/ú—R ܶñ1p7ïáKsx·0OOZ>ÝÕ>»‹9n%ð^›H˜&š%ÀæÄ•y;« p§áÁžôÂêäË,JÈø_¼üerâTkªê)ÔYS”3TŽW¹ 0Cy¿áºOñitPc"f<€s  £ZDcGiñ¯XÊèVŽÈO ( 4ÌF_BPžX@,ÁI¢a+ò„ à © mÀpÁO^a?>®i'_´,ïX¢ÇÕ~X³Y‰òu¶N‹X&çð¹"¯w·O›à›m9|l¢ÀëŒ%ŒªDD9çìM4< \«ÑCk“4ˆšJX€”A}ÛÆDŒâ|-@¬˜BŒà‚‹›ãœsã¼¹3m“Ì!êJs0Õ5¯ß+§ZÆŒSÀãk<-|ÜÝÇ ÿ» |¦ù-I·+róu[¤¿‘ÅnûËA %²m‘ï¶[ÀT4þ´©¸¦0¬ mì$í„k¢qã˜ÄÕ"Ü<ÝB˜ Òª…¹¿‰qæãî*°;⯯HŠ.W!ŽÂÍ(à½Îéá(¢;Rø²¾ýS%À=˜“:ŒN6sºAñk¶óÒ‰\>-¬†Œ øeÌå© u‚3A´øÙÇP$ÌÜø9‡@áà›0THk1TH„÷‘‚ aÎ žÀ5t0X³†ígD ÑeüùÑþÌÀÒš>*‚giÀ½0mX蘎˶ֹÎÒU¶'cn!3ÚÅðð|2úÄIFXôü¸[e¡ÜHÃ|h­€ë¤8“8.MíšA„Ã`pÂPÀEËKÁȺ«ñt唋Ýæ1Eô ØŒò”Oï‹|_Cè(8¡–#À¡dÀ¸TúXªe+ÕœGÏW¼XÝà´§½ +{@Ä÷Ùá­’ùm¾ž6ú,¡æ±˜6ú N£m¥// <.Õ¢Ùnmå&‡áXx?h1kÓý f%bœ?/½+» —¹‰•g´ð@RõdÂÖ´¶•.—”¶Q‰GŠ!2’ž @zÖv:±c´VÇei1f›IÌ~¹!±Â¿“x€Æ… B™Áð–ÍÂú:5È`Üp#à_7} „þ&+ž}r‰3ÃdjàAÊÞ…iTí»§"߆ž%´W~Á½²Ÿ,š”F×úï²ñ^0Œr)Û<â¢Iǵꦴiùñ*-Òõ:ßÆsL­ïIñ• ÑÍ=%2ß]½BER̹K ¹<íŽã¸½dPµôw£:Ó/”¨²áÄj¶ÄÚ%R ©–œ+kØE ;M;ª‚zìBRžÀÒ@Ðm…稚XMG¦«!Ú™ "Í Ù -m§@Û¾W´Îîöï¶yQÁkTãÒ ýz ^&p\PŠõ@•×´Úê—‘C×À‚#‹£¤Ï+Xƒê $mMàr‹…‰ñ=“ÓÌÕ0Ì«¶·b_‰­5Ñ`µœ‚Ïï’²²¦KÚÅ:ƒdºÖø¡ïFq¬ÁŠ¼l èÔ‚¿ì.­…(¨»°GØbü}V¼?dû×i‘H+ßøƒØ=ªÚà8WÏvþàŠs:¬Ð~ï­¿e(ST§õ×ü +siüý-ßï·1œ²è)ÆO¨a0ùGz‹½>ýÚä×háû{B&RÕÛ +ǹl;|¢G ŒzrÙÍÍ…Êî€¹Ç +¬Æœ6à-ÔBœ¤m©aü©§b>Dà/uAÁ©D•c…5wpþvW"Ýã¡œÎC5-þ÷@¹ªúÕ>}[X¡ [ì6(­a¼ÃW¬odj>VLg@¤SÅ„0“‹ ×ýÑ墥D!8Éq)!z² + ^g÷ù¡Èö¨ªR§@P™ƒ/:‚Ê õ­!H*¸.ó‰¡Þ=WÇñ²Z.z +=¥Êò’?—ÔPöê„oò»b‘²€€ðì“Ó¦ä= 0'Ò€^¬?λ˜„ð]1æðZã8ƒ„ S<èz«6(ñ3~qUîй¼(â-±]øƒè(Ûcö!ÖþõSŠêvÖ$6ØFúÄÊ7à =sº#GbmÍ”N1S/ UÜ¢Lå¯mËë7¿¥›Ç¶ÿŽ¸RŽ +¢Êv²fe£"T !›Þ_d??î_,q°5+ÿ9c$'å ŽÜ¿ù4/_-üø ÙàÆADD~s8÷#0P½/¥±Ë¼H«¯)ߣ‡!¾ïGÿ¬¦5=5ÉWSjxµðM.= àà·ørW§v¡M'2¤š[ÿ`Åm:µ +endstream endobj 39 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <> endobj 42 0 obj <> endobj 43 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> endobj 65 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <> endobj 71 0 obj <> endobj 72 0 obj <> endobj 73 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 74 0 obj <>stream +hÞäZ]oÛF}ׯ˜G…&óýñ¸ã¢‹¦ØJ_ŠEÁÈ´W,½Ûü¤þËÞ;ü¦¨•d‹òÃá™3çž{‡œ<Ì^üpËÉÃ~f$±Ìå ‘ŒìòÙýìûÅìÅ5'œ,îg\øâÎRŒ2A3½P¦à‹ålNc’,þ7û5ùéÕ5ÑÔ‘—/^~÷y³K¹£.Ù>ì²ÇÇÕæü¸)òÝ}¶ÌÓ/þ9{µ˜Á@pÒ„ap׆,‡áÃ(<³”«oŽ÷¢¾»ÐÕݳ}AÒ¹¡6yût—á‘HŠü®< +üöÉ&¥:©N{]´[þ§:I”ߌëtηNVpè˜ÄÃ7p}ì¶åiwÏË‚ü’ZGy’W]í«ûl7ÕMð¸ŒÀµBKWaÜJ ñû“pïÓ¹£*ñsÁxy¨Ij¨I©¿§}ñS¿ÞΛŸ8wÒRŽ3Ç깓 ûxžÿïPÿ±^“›ÕÐÔ"©SdÜ“›|ŸïÒ¹D¾ý7þ™ßÑzqiåa…ª ¡Bzï UhW.2#¨5u;¬>*T¯½ZšÀm_®Nía…Âb úàpiÇëµÉ†˜$2]üŽÁ`%’¡ÆbŽt¤=Þúª×År† ‹V`nòì.ß‘—Ùzý.[¦ÜÃ{ŸÎ©LÈÍö¹Xmò}@è¦Î¡FB=ô)Ú;7'qdnxwWÝùð8„Ž~ð! •¾$G3êÀp^Øe^°lŽðG¯9ÀáÃsÎ¥¤F£¸X­›žl5vaËŽ:pÉä=¹~Þ,‹hÔu +².“m +€Jš©€_YÑ…8æáðÔ§fÐàò…íF†ˆQãØ>U5¨ŒÜâŒÑè' t—éFªžE·³§J·ÔH‡ùrÙ@. ®ñ€¹â-æ¦ÆÜ`®óEʃ£@V“<5AÖŽS Â**\\­±ÝÞG¶CÖŠä$¦ŽZY‘œBáZäÙ›€~ÿêþÜÙS¸#âÀè–䀜ëÞ<})5 ¿]eEV)BÊu‚hP5ÃXW¸Z@¥†ÓTåjŽSÕ#U§`ª»<­µ«ì)9ÍQG¥Ô#*‚:tnóf²:Ïr’á‰d¿=õ¢ä·¨»ã]á¿ßBô!Wé\©ÁIÁ_˜€–ÔÚiœ}œ£”†ñjˆ=§ÄâÛ›‰ÐªÂìI¶¹#·yQ û‰ŽÚ€j+ê#³$ †B»¶¬™¥áB†Ñ[‰ë5>CÐÖ_PMtjÒ†ûRN^ý‘=>­ªFN´æAN5"¦(Ûµ–¢0ÒR@ª@&0ÙÙ¯Èò€È¢ÿ@óŽ= RÒ·t£|• +)À…FŸv\VœÃv-u¥,}²u8+xæ ‡Q©Kq"RÅœˆl¨ük²ÎïwWùf¿*>¼|÷þzSŠ„ "!û6Dƒ)ty°Ì“ç°]smËÅd‡g¾ +TõÕíó»°Ô𫆖køù¡*c(ò'H{‚vðQX5¶kð-¥vŒ>Icé4d­»ÆêlE`hC¥è!ßuk°*'ƒpGu UÈà\uÒc°étUþR051¾ò¨?e˜ìyXù °>ÉS,euöC„A9`&ļãbk±]™¸Ò‚‡8KiÝ¥@lÏ‘„×Ùr·hR¾ÔP c-Çv¦£.¹öœR#°:™Œ(×£.¢£ˆþüü\*„{§Žƒ*x¨a(ðh-gƒ.MAL&)7C“”LÜË>l +ˆ%„¼…ÐSiG£Þ·E¿JöË*;å 3\øÊ„´à(ž"¤ŠÛÎÂo’1B©¾´SõIo &Pñçíæ*¿O¥L²çuÑ€Èt”àpcÉ,ÆFôZŠ±ñLÁªi™‚Ǻ屧ÿ{¸¨Ø‹¢?ž½½Û;¸K—Ï)uI(@v¨è†8bʆËòzÒc»„± C|¹šÝԜˋ‹C²³ªU å›Õ&bŒ¤QÀ,Èéc¶È‚ŒÂ™¦^ºmX1·¦Gj鎰'Ö¾?­hÞ(¸Œa]®uÅ›¬Tûƒhn þ nôAÆ™½ÔíS¶\m"VJr‰‘“ÚXäg<0ouY!|»Ï_¯6(Qïn +„á˜út¯NVB‘ýJm'íìðÏš%œ¿u ÌøÖAÃ~f5´eBi‚)¾L€‘èªÀ·bÎÌA0‡ß<·ÕÖ1˜A\BYÐÇ +‰2“>7dèü°0¹4(/FlíÉwºÀ¦  +ßQÉꮃ¯âËy( +2*bŽ Ö ´ .c« ®gpíÐàNÝGĽÖvÝ€?¾ÈÁ;Ô:ðíî$ª²ÖÕ{OŒkß”EK¨Uû²Çw¾Tý¶™ïS´×‹ì½zÐ +½—ÍÖÙ~ßLc¸Rã7aÏ&¼Ñ66ß™Uû4J˜)Ð~\ >¦$q>øš·q­ÙµI~Ü»-¾»Ún:0ñ°_ žÁĶk…ÆvÌGF+8FM®à¸±E­?®/EöC¼j@¸m®Þÿ0É{r[|XçÕ[Ö)„I:ïZÃtø°½ hG«š½oŒÛ±4Äø3÷Îù¥DÆ +cÀä/òüE” +endstream endobj 75 0 obj <> endobj 76 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <> endobj 79 0 obj <> endobj 80 0 obj <> endobj 81 0 obj <> endobj 82 0 obj <> endobj 83 0 obj <> endobj 84 0 obj <> endobj 85 0 obj <> endobj 86 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <> endobj 91 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 94 0 obj <> endobj 95 0 obj <> endobj 96 0 obj <> endobj 97 0 obj <> endobj 98 0 obj <> endobj 99 0 obj <> endobj 100 0 obj <> endobj 101 0 obj <> endobj 102 0 obj <> endobj 103 0 obj <> endobj 104 0 obj <> endobj 105 0 obj <> endobj 106 0 obj <> endobj 107 0 obj <> endobj 108 0 obj <> endobj 109 0 obj <> endobj 110 0 obj <> endobj 111 0 obj <> endobj 112 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 113 0 obj <>stream +hÞäZÛnã¶}÷WðQBaï—Çv2-æ ƒ·}(΃š(‰{`{Úæ“ú—Ý›ºË2%¤“ +E€X eŠZ\{qíMrò°xóÝGN #‰eŽ(gˆddŸ/î߬o¾å„“Õý‚ Âà>¸³Ô;b%£LÕÓ‚A/”)øßêv±¤Œ1IV¿/~I¾÷-ÑÔ‘·oÞ~õ¹Þ§ÜQ—ìöÙÓÓzû@Þoùþ>»ÍÓÿ®þ³x·ZÀ@pÒ„ap׆,†áÃ(<»”«ŽÏ¢zºÐåӳѤKCmò㧻 ¯DrÌïŠ ²ÆOŸlSª“ò¶åMûÛÇò&Q|2®Ó%WÜz¸/“xy —ÐÇ~WÜv÷ùöH~J­£<ÉË®åsvÛò!Hx]Fà»BKVWaÜJõñû“pïÓ¥£*ñKÁxq©Ij¨I©>§¼ú­óí¼þçNZÊqæX5w²f/Ù÷÷õë͆ܬ€¦Ir ãÜä‡|Ÿ.%òí·THøg~G«à2‚Z1n¨6„ +é½'T9 ^fAB#ªÓXF&PÛÁi¸¢U#h#p—qº% ÑñÁ UÀs“a¤\@¤¬ó¤FŒ’p“ʳ#^¡x\eǬ>ö+©2šZG¨alpB8loFQÅT1QN„£ÁçSû ÷TX]ÌvÝUèÔa_c=¬þ·pTJÝÐ…‰Þ`¢ß¹‰a$KÉ©…íPHµ«¼áÊ^!¸ExS^û–||Þ³?Èý~÷DP“‹¿ÛCéõ0ûˆµÀvc’ ‚Xõ&!– ¢#肨ñÜ:’˜¡µ8× ²õ첈+GA®eøJ¬¨Æbª±ÀŠz+0K5Ä`8ljQV: ”ÀÑ[n6®$¶ÍËI{êO_CN-• OûâõYÝ ¿œ•/Cë—¿Åj_v'©“Š¾øätÀA9jÌy²rá±ÝH5¢ÚÙÉzP¼õk€üh‡<ÑQw§+‹pCٽɳ»|OÞn²Ã!?”p£8𠼜³8ËmÁrnÐ'žà­[çà ý ǧê|"áñ`Õ´“pÉ»o!cà—°«vI™oKv©•OÎRÉ“çT0°<Ù“›ÝgXúF˜µïLC½ê ´C Ä¥ÅM”˜ÅK‹–F°Éï×_Cþ±Ýfvwù¦ ßQñ…”Ÿ•‚ä,I!*ÿ.jëZQ´ï+J¨”¯þ¾…±Q¨$àЀÇçél‚‚h£ÛBbªqº@» ¶!gá7„Ð_os‚wŸÌï·÷›Ïù’éeeÑ“„e/¢Á&kå+óƽy B1Á¿UîxžBa"ÄÕdþ%À Z-4ä\Ï)zI~Ëjè- ð;‚9ta :¼–! 4,M3ú2A ½m¿ºî,±Éh0ôœesb ôÁ¤ùasr‚¾.Ð׈¾NöWùö°>>·'Ë /0 1æc ̇L6./2ê‹ä¥Z7g¢.FœQ—zü­)ø¡ª0w»m¶iá®<E¬¦<»6Ø®Z˜×Õ–ô01É¡˜ F¼›&¾J’ibyNŸå×)¬“,°;墺ÞlòÚÖ£Ôè‚å&À7· ,W0Œ¾Øôl!ÊÎ4[èõÓÄkIþå¢cdDtú’ÿñSv»Þ>¤K*°‚ù` ùÙ¯iøÜäíÁèŽL‡qp›l+Žî± Æh*,9XO˜“4òŒâ ÆC¹N~O1,v?¯ïŽ‡6ì +wÀ3â÷7”ÉŽµ“dÇÉ™ÈNƒ³wƒECÌü‹©þÝîwMêYgýJ8”§"بªÞꎕ÷*ZãàJ>c3iÔ`5q(1ª|Kí×Ä1L¸ÖTFÝ`»‚u¡¿„.OëYóüÙ º:ôÓMøÀôvéAØÛED~¾ˆ(½ù7VãðÊÿ¢p§s—¯õöØ–jimY±e#`C»ƒÓWºFe*ÊzV0›ˆ-±•\Û–\¿û#{ú´©å6,xx÷Øjh¶KÃGœˆ–—9È~ù¬œˆ9S¤=q"à?üz(w.uò-¡NnëÝv¨f+•aá ++·ggB€èÃD€ŸèŠlïlB&^»³ ¼° °ìg#_F8!,«9,í žeYiŒm©@,ˆ54êê°Ä%Á¢ yfÒª)ûZô_}šûø'8=wÞwða«‚Àª$p-%­)`>lø€uæû' Å„v Á?âHÌTGbÕkK±í·7ºP¢z½ÞXgá +SõVÂpJh±]€ ©v…{Ù ¾8œÕn‚å£ÕmÀ·Yâ„Õ¨ rd³‡Žƒ‰Öf»ÎL¦\Ñ ¿@U§9‘Rá +ÒF…Ewj*T‡÷À„Gh8Ä¿©¯/´/Ÿue¯d/Jüdû †dpZA»ÀÎS5¸¹£¦àW!([Y^ÍÙŒ¢X;ËwOy¹ž™pæF%) +—yࢊù^€Ú…’Ñ35q3PíÉ=ÛÅÌêHµtúwÛ¨ ÚSr¡‚À\+"¾H9^£#°ëIBÎ×Bœ¢.º"ŒHßä·Ç–N°ðT+â¹³–Ø.˜™h8ÕÖß/YúòÈš±£´ïù¾õ5¤r^ÅS9hç~àBá.HÞ¬™“o0‘}+9 שBiÏ@žer|liç@­€µ³<àÏÚ¹Õãja'QZÏ–ÒvJ³=žÑÈRøu| 4o¡4-jZĉ®‹”¯’‘³U ~iÕÂúY9fsÌmÔ5¯*q›ç°…%‹¿Ú™6—xv´&ºh9¶sÅOeÆø Ïߘy¡í&vêÁîh‡°ï¶}¾‹pŸ³‘2¨ eP.$õ¦Y7›X·’¨N¦O€4ÿ›í¦ÙìÛŸÖYkdáDªÑ¡Øyþˆ“ÁvÎ:R‡v¨üÄ*;ã*ë#æZ Þu%.œD˵ÕÛAS:Ý_¦À,æsºÆÖxv 0/çË4 +endstream endobj 114 0 obj <> endobj 115 0 obj <> endobj 116 0 obj <> endobj 117 0 obj <> endobj 118 0 obj <> endobj 119 0 obj <> endobj 120 0 obj <> endobj 121 0 obj <> endobj 122 0 obj <> endobj 123 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <> endobj 127 0 obj <> endobj 128 0 obj <> endobj 129 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 135 0 obj <> endobj 136 0 obj <> endobj 137 0 obj <> endobj 138 0 obj <> endobj 139 0 obj <> endobj 140 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <> endobj 145 0 obj <> endobj 146 0 obj <> endobj 147 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 148 0 obj <>stream +hÞÔZ]oã6}÷¯à£„Âòòûq·3]ì¢S‰§/Á>‰’ºë8í´Ÿ´ÿr量(Y¦åvv2F[)Š:<<<÷’‚=ÎÞýãF°ÇÝÌHf¹cÊ&9Û–³‡Ùß³w?&Øâa&€qüÃ/álá³’ØâiƱ•‚+üßân6/8ç’-~ŸÝf?~øé±ïß}ÿÝwìj› W¸ìùq»|zZmÙ?7ûrû°¼+ó/þ5û°˜aG¨Ò„nuCVÝð¡ža-嚇Ó3š§ƒ®Ÿ¾ÜíY>7…Í>½Ü/é +²}y_]°}ûl“:««}¬+mï~©+AõÍ…ÎçB ë±²ÁKÇ%]^á%¶±}®ªÝ¿ÞíÙϹu…Èʺ©]ýœçMý$¼.gx/€±lñ>ô[©!~ÿeÂû|î +•ù9pQ]j–›ÂdŒ5ßÓ¿Þ¼êå6Þþ¤±“¶4r¼;Ù²OÔìûÿvõoë5»^="M-‘:HÆ».wå6ŸKâÛo9Hügy_4“K+3ÜÚ°¤÷žÊ!íªIf °¦)ÇÙW€ê•×S¹í«Ùi„*šBœ¡>8ÁŒÓ‘6Jwäε»í3»Zm؇?–O/ër—/~¥n†ÛeáPh¸'¡) 磞Syü°æÍ >ÚÒ/Nü/ ÓªËmkYqº|_(]µQ¿ë]Ûõèd¨-PÈÌñУ9Š¬DJ¡T(bVÝ3èõìÁücõ” @u}Íñã‰ý¼Z²›ýò.ÿ‡]?¿îW¹&¥1¦pŠ ]õ1”[Àrc 7¢®vwåz½Ü”ϯ»Ž¶•6k%mìŠIhƒóTn¤ªµ¡ÞÐqÛ®éÃtÔ¥øVBÖ<ÆQ+´pÖ3‚ˆü‰Ö™½_îñ³G`¡ KÜ,¼J0X*7ÂÖ6üm_\t@â¢(³Ó@rÆÛŽF+”¹/åo«Yt^ý×°§°'Ôº·u)ŽCY¦V~zÞÜ—9ÕfË×õž]¿®Ë1ÖÇŽ \¯Á$FÀ{*G¦÷Õ·^™Má.úÕo˜ºŠj@`„ó= ÁQX㘠X(|T t ¸FWQiA‡aŸÂFØlÂfl Bv +/K¬Å úö䌻ÿ*Y9:¹ÁR§‡áRÇZÝ°6Üm +/ÙÍÊÕBƒÄ>ôoÚ(ê:LE‚×€Ô5XWÇÂ"{Ž ò“ò8=ÿŒ»€AoN’;sªÕÔîƒw›]mŸ_ȱ+D"ÛfÈóÕfµ_a°8&Ê’\ ï°)XEpòäö@•‘Û°SUã­ýšúµ! A%ʈHy….)åÎ@P¹FÎGÂ0FAo§R°çôy"ÛÇëË,q‚Âàô@6Ì@œ öE.ÐJ¨ìóKk³µ½p.m/°\c0yÂ^(˜f/à’Ý… +vÄõ†L`Gâ¡âÑJr7Ê\ +EB;ЊPU×_%çƒÙÀÉéMY(~c*›„‹A}³|*ç?•{vó‚tË–w”¢D¦û²Õ†®zŠ¬¬Á†wÈ»`@Ĩ$+*W8Æi¡dÅT±Cd¾’»ãá³nÕøæ%À× ²¢üÎsùPBz*WFÖj0j3ë¨m’ŒF«ðVŠp&ƒ­áör¨a9y[qöÐ)¥ÃäïbæQšb‡åJÙ”G§@¯å[O~Ÿ²bC5½YíÛ 5•ò©ñD§P œç*E_EåªÝ9*¡VÃ4 uâ’ ÂÐM´ýáu¢CqVR ™ ¬«A­ƒ¿NJLŽ„þ’Æíë$>-=çFh_åŠlÇ2ÇýžÌÐäÞD¾Az…Ò¶J Ú +,—Þ$Ãk=)¼¶âBÂkÏ'»µJ^…YZt…RðZ*—è6"]i;¬bm>G™Gêb0oóoý° äukŸÐ ïbM·=M—†SolÊ("#Š†øl5¿ÈàÄC‚î¢/åúˆæJ¢ˆP–#%" ©\*²Èç(ºÒ—‹{8X=¦“j¾ˆ ' HqÝ(*—ètºqüÌí)k.j{ÊnOAŸÝ¡ •óú´+ÙÇÕ¦u܇ÛT’û&*Ž›£adRðXa`ºÕŽÈnôHî+ý—bC/ÇSuíFÔÇÍÒMxØÙ ð€ +á} +-á8’f/u( tgAÃÉ‚Þ»N¦ÖWä¤<²e:oW9Ú”¡XMSÞ„“ZÇ“o2Єpˆv§›û´¼MÙÜGwâ/¤[»Ð(˜*¸ÜÐ&˜<ÜžBÀ¯_+ýXç"ˆI§"t~Ð1òX©”Î=¬ ©l´åÓö¦”ÓžŽnÀÍ0é1ð×e%纒sÕÙÕXÎ… ç=)leVüh|‚ÔÁªºÕ•þA.«qM˜`u›Eˆ ?´øߪt­ºè±ø¤±‚¯£'2(õOáé×Bp!ß«Ë |«u&}n®¦ü„\Þ ä›^³Ö›4‡+ùð™÷ ñþ'ÀÛ!‘‰ +endstream endobj 149 0 obj <> endobj 150 0 obj <> endobj 151 0 obj <> endobj 152 0 obj <> endobj 153 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <> endobj 156 0 obj <> endobj 157 0 obj <> endobj 158 0 obj <> endobj 159 0 obj <> endobj 160 0 obj <> endobj 161 0 obj <> endobj 162 0 obj <> endobj 163 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> endobj 166 0 obj <> endobj 167 0 obj <> endobj 168 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <> endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <> endobj 177 0 obj <> endobj 178 0 obj <> endobj 179 0 obj <> endobj 180 0 obj <> endobj 181 0 obj <> endobj 182 0 obj <> endobj 183 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 184 0 obj <>stream +hÞÔZÛrÛF}çWÌ#P‰à™žûãZ’·¼e'.›Ù}pö¡ ™ŠR‘/Ÿ´¹ÝƒÛA2NVR©J¤4¸ Îœ>}º‚ÝÌ^üýƒ`7Û™‘ÌrÇ”3Lr¶)f׳—óÙ‹W‚ 6¿ž `ðC8›yǬä6¿q¼JÆþo¾˜eœsÉæ_f“7—¯˜Î;qþÃìÝ&.sÉÝÍ&¿½]®oØëuYl®óE‘þ{þÙå|†¡yH¦!\4 YMÇYx†G)×Üœî ÐÜt}÷|[²ôÌd6ùåþ*§o”ÅUõ…-éÓ'ë4ÓI}ØÛú ÍâS}TŸ\èôL(a=lñ«ã’¾¾Ã¯xÍ]uØÕâdÿL­ËDRÔ—ÚÖ÷¹[×7A@Âãr†çËæaÞJ ñû/Þ§g.S‰?.ª¯š¥&3 cÍçñ~èó½xû'­´™ •ãÍÚÉ–}¢fß_;Õ¿­Vìýòij‰Ô©@2nÙûb[lÒ3I|ûœ‚ÄWY\2k0ÆM¦ Ë@zïY¦¯ +³ aƒ/Õ¬#©í«à4BeÍ (ÆjG‘iœhB“.œ It:ÿO˜€„B$s8³çBÚÓMðZ!,:E'0ÿÂ'Ÿx‰bÂÎóÕê·|‘ +Jó{zFAüþî¡\®‹m ]WÐ1†o§ÐJä8E3œ†hã4L#ÉØø=/®VM“:®ë8áÄp'CgÒ_=ùèi¨KF RУžI™q¯Ig¬ÖõÀVˆ€’ÉïìÕÃzQ.Q¤^¥¨ë2¹Kñ" /x›þ•—1€H2§˜Àä~¦q Ý€¨_4ndH»B,(Ââ=X6ù&€ÂËuj Ñ“ öáõ™Š¯!Zš~f{ü]æ1ø2L£øÎc}ë —Sµ÷ÙÏgO|>HfB³C ]E8‚Ì„ Ë¤Ô# +ƒVîä |ïH¿^ø£‘°eùúŠ}(Ê’âˆtk§‰4«̫ý¨ð8®1•EÊ3|8|+é¦W /¥õŸÆòÓWøªß^jÔº³ßmŠ5]ŠÕ +Û49vàz‚an¦%XW%رCÙý™†}¹­nfUïvú4å®Øê|%?2 ïg:ôbmZøƒìãJèšé4x=n{Ï6›b]¾Aqüéáö7,Ä:°µ¢ÐFœÀ¸Åa…åW£éÝÓV‰Ê±t•OwÇÖwl;w ríB|  ýT¤ °FûB°E>LaØãyÆRÊØOOÌq8®¤ß þ>tÆÀQV Ž`æ“0½vÇôvÁ^!û®J<2Y®Éíʤ¼Ülî61ƘKp"Ûø{?ÆZVB!j ¨§Ü>@rXùŒë ;Q_Ðu]UTùýòk~{¿B‹Ô GÿĦ²   á¤èÁn‡•S—ñˆÂ6¸DLø÷õNiM¸ÆÎÊ)P+@5êj –Yƒz­ÑhYkôˇ-{¹,Ùù§|“ô ù¢,u¡³™'‰6õÂ{jJL@ 4.ÑYDz¡wkƒ€»#ï wîIBn A.x[Ÿq5¬Ït$î$9"Ž€“lèd“õ#ÝÆSTÑ.€™¦3ŽKËcë`F°Væ$rKût¹ÝzZ+ܦfq{³mä#F\ùå‰ãû %h˜µj¤ëKt‚m-L÷ÙjÉÖú±Œ—EÕ"ª³vT·}.¨»¡ç«1Ätç“|½(ØÛ"ß>lŠX ¨ÓK-gäôT9ŽÇ%ÚH!FXkÍi¬Uþ ³V Y ýŒ©C…4:Õôg¢*ÖcÔ˜Ä0!ÎÂG®bŒ®ZÁ6Zd{­Ðç{«®pD\¹ÛnW¾Ñ€‹åçåm[|ªøk+ˆ‰K©ˆyIÛ&Íи¤ÜšÀÚ›£šÀÏ×¢‰©p5Ÿ®L«€·þ œ"uÀßf¢çn4: \슃ë¥4—°ãÕÁ?/CÞŒ6Õf±LÉ·W4.¨¨sÓ§.üÑ÷òñßSiOÅv½øŽ²ýðm]æ_c(• *Q½˜²_%‹)Bó¨¹h_ÆhUÂîßs¯wÜåèkòvUEÐ\íCšsõÛ«·†öêE·C¬Ühìê¿ÎêmGšÆ‚^L0È]5½Gç5 ‰jbˆó)Å´O€»fO5Õ[oòʵ}£7J|R¤ôB.û59(doó-õÔVËE‘ +#?¦Ô$b?NAÑÑÍöü*¿OetÀk\Œ|]þšFî›VÅ„öàÍÄ;oà$ º_ÛÛèËl½gj' +ó: +”Ó½äšq3½ÍzQ\/×ôBNhx¡* -V½$Ã% ‰/, Ð’Äíz$ÖdÚô¤(ƒ74Žæ¤"Ïí˜Ô-Ž}8†{¢¨ûÿ¿¶ÍóþO€ü²[h +endstream endobj 185 0 obj <> endobj 186 0 obj <> endobj 187 0 obj <> endobj 188 0 obj <> endobj 189 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <> endobj 195 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <> endobj 200 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 203 0 obj <> endobj 204 0 obj <> endobj 205 0 obj <> endobj 206 0 obj <> endobj 207 0 obj <> endobj 208 0 obj <> endobj 209 0 obj <> endobj 210 0 obj <> endobj 211 0 obj <> endobj 212 0 obj <> endobj 213 0 obj <> endobj 214 0 obj <> endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 220 0 obj <> endobj 221 0 obj <> endobj 222 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 223 0 obj <>stream +hÞÜ[ÛrÛ8}×Wà‘¬)1¸_³²35[™ZW¢Ýy˜š­L;š’éŒ$o6Ÿ´¹Ý/DBTœ±’)W…’àéîƒÓ „‘ûÉ«ß3r¿hA µDZM%›rr7ùÛ|òê #ŒÌï&Œ +paÖÎ#hA9™?L(<¥ ~›/'Ó‚R*ÈüÓä×ìíõ¢ +Kf¯f?ü@n69³…Íï7‹‡‡UuO~ªvåæn±,óßæŸ\Ï'0œ‡Ð~ÌFÓaÎÏÂè%m38ŽÉy3:Wõè‹íŽäS]˜ìŸoø‰g»ò6| +¼º¬Ê •ÕÝ~®;m–êN<\)Sù”Ift¶ðÑRoà#-wä_¹±ËÊúQÛzœÇªñ¯K Ü˹6d~åç-å!~ÿ#̹|j ™¹)§,|T$×…Îi®ã/ïúý>¼ýŠ¶¦`h9ÚØN´ÞÇjïûs§úz½&ïV÷à¦:gàŒ[ò®Ü–›|*Ðßþ“s?–·E\J:ˆp](M +.œs¤Ü.™æ…ÑM;D_Áå^{šàÛ.D§f²h!B;~°Œh«"nð.­ üÀ>WåݪB˜=íÈÛEθöçœK¸@ìHxËͶ™º¤(,•…!…¦´wl›hx䦑µi %¼nFŠÞ??ª)˜²50†d˜¿Í¬ Cùüw¸™ópoýÆu\³‘÷Æ7ÀÁÛùÙÞ;eFxŒÿSàgi²ŒD§¬ÇëÇq~`‡Ÿ>®•·ÜiÁÌÁ¥ÌáŸ}Kh]X hƒÅ†-ÁÁ“$ôµè$`‰é>¼5…²¼)’~xWH#£“¨°vàÂúã¢'øùÐ4®-º0OÖ¡ËáQ, Ë÷gôk¶.ï>½ß- ÁÍT¶ ª)Ää&FSÊ,§H¡ (mŸW+ÍZ±zÎ!åZ0ÖÃ~Ýz¶;Â`Œs6îilçÚ-í°ÁþÝþ&ÙŒmNÙñgðjþ®p<öîÚŒˆýuu ×r^ |Ã.8Ò‰áÀ8L'J`»2â»nvÊimj毄vëíqð êžÄ=…#«ló:ç:›Íž6ÿ½Êi¶»*«íj÷9¶S8M&Íppn¡ŸFÙ™¢õ³â´IŒ­y„Ž¦æŽA„ˆI¨áSÊOÓˆ'Õ¶  +sÈÏ®U ¿4²°4º€-|tgÊE„§rÀL°N‚ÛÛ¥8Šíàø[w€FNù @#rŽõPÇÍ:‰+"ªÛ;[Ró3ÜÇXßBÙÐaÚ±kPNîp‘d}®°FQå¼{øh_goréRþñTVËعŒ†ªnЋ¥Äv'ðÌ°‹›ñ«¥Ö—_-]bµÔÝj9 ½—Ël6Ï5“-þû뺼®v°¼2½Ve¬N”–žNße‚Q˜Àv¥Õ©Ïg ñ32‚K¬úQŽEÂH…ÂŒD yxU-^‘¼É*•År÷/—J$nšU(lÇD#åÃÚŽ¥i©:bí“ìRõ¬œ¨i›YqµðŠ¯Ùƒ÷Ýb·zŒqE© ü ñeSëŸÃvN}‚‚š­–\#Xëð€Ž@=¦†êìé¡Wod#½¾ÄU)lWÊF, öÖ®à²uõIPùWÓjgg}œ¥²>Õ ê¨W«»»>`%¸:žÕ"œûq«"/ŲE:IáJ] …†°?óKÙ‹¥XꀥÄòæÓ:†Ó8ŒÎX!j}Àú uÛ%Ì®)«ƒª£Õ)iPÃËhA]/7ª1+O–ëÀñm¨zV4zV§Àí »EQ; íR‹álα ¾|òÅùéT7í|)Ï“X™gV'à].!-kü-„®à'ë æ’¡Ë¡{ þüx[îA†ú +ż¯i é´Ëhd¶É²‘ê +®/§/ ª`È^:}ÉܪKÐäM hn69Ò½¯È`ë~}ÿq±\U÷1ºÀãœcñ4®Àv Ò¿[czsWmÆç®F^ZÃdz~¥™™³§Ý1¦ÂI rL“´ÉœÀvátZZŠ3 +µü;ªp™¨Œ]î;ü_ßþ¾X–Õ.¶Ä2‡rX L¬_Ûˆ‚®ÜÈÆ )8²KgMj¸j86iŠðܯo MC‚oÛÒm/–Ìa»Ð¬?Á×bl‚ïÌp¶s&9ŒKŽt¢<8ROuèÍJÜdo +(¡=üƒ*…—õÀÓ)}e,¶ HË{k†šÓ{k¶O è/¶"åž!MR¸ëTªg£{]ÝÆ(ríÃ\È´@` +Ûê~,S£B‰3cEBó¾ŒkòsµU‡]jWL€†ò›¼ )‡äÛ¤3}‚¿,2Iæ.¹7 þ³!¾Ézýbá×õzOÐbZ‰U=À&±v•íæã â²#×'})„ .N&BX=â÷‹‡²*ãÅžåY@Óä — Û9HÊ£]]vpP"ðÀ¨ré…ÓÕÄ^áù¸ÂŠÅ°C(ù+¸éx´K»qm€+J} ¾a7/‡v,¢Šž-t-؈-tûÍa}~]úªÙ›ÅoU-=Û³è¦Ö¨i*+ã^²r)Ò•9²:m.IÁöù|Õ³1Ë¡ò,V&•Œ¡¯îa…é±<›)«¾§ŒÌed|ÿ$Ö‘ L0 &h‚ zMM!&Þ5»†œšT€ N&Û9…¬Àv‹a´=ËFë ÁÕ‹H6—ð摹íuµ\?nŸ6e„ °þ8^Jêây§|Œã"-賑Ô_V·û˜*¸@¦x“8ãOæ5L0ˆé¥^õ"œ Ø0'0Ñ{öÅ„³/&œ}z½©i¶¼Ã3þwüZ£ZwÚ# $$É.f°É$¤ŠŽvSÆ_Qþl|WnWÛÝ¢Z–7¹b>! Èým&5^RÌønxRIŸPFŽ<‰aé%“b!ž¯ÈŽ¢œúc‡ 7Dâ€ÓÛÕÑnƒ‰BÄñˆ½Òn×Õñ¾#-ì 6²Û—ÇœŠc{þ#XóÿkrèèO&R2¿lÈõ×{êÊâ‰DP"µ ¡5¶ƒªè?ãl£2‚~æ­öý¶0·Ìc. þ/À7>¾á +endstream endobj 224 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <> endobj 227 0 obj <> endobj 228 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 235 0 obj <> endobj 236 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <> endobj 242 0 obj <> endobj 243 0 obj <> endobj 244 0 obj <> endobj 245 0 obj <> endobj 246 0 obj <> endobj 247 0 obj <> endobj 248 0 obj <> endobj 249 0 obj <> endobj 250 0 obj <> endobj 251 0 obj <> endobj 252 0 obj <> endobj 253 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 257 0 obj <> endobj 258 0 obj <> endobj 259 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 262 0 obj <>stream +hÞÔ›ËrÛȆ÷|Š^5%¸ï—¥CYSIÅU.‰É,ffÁ!!™ŠrH0.?RÞ2çt nl‚´l:åH5nüúœÿ\ºÍÈÓäÍÏŒ<í&ZC-‘VAÉ6ŸÎyúûìo“w³ ¼¾‡Ðþ5˜m¼†¯áü[8gI[=ŸÉyõt®Ê§ÏwIotf’|ZÎñOŠ|>]²I3•”§½/OÚ.>–'ñp¤L¥7L2ãàd-øñ|„{l_ÂiËý¢ ÿLÍX’—·Ú•ÏyÙ” þçR×r® ™Ýú÷–²Ëï¿„9xšÍdân8eá£"©ÎtBHu¸ú©ÿ¿7¯¿âÜ “1œ9Zͨ­•Ö÷m_õízMîWO`¦:e`Œ;rŸïòmz#ÐÞþ“rÌ—Yå\šgFƒëLi’qáœ#™´`xÁͼøAp¾ŒËÖ`é™`Ú.8§f2«ÁAògi«ZÒ@iAçL˜ò%åyŠ_¶ä·äþe_€6ü–Ö¯÷™åÄr¼k¦)|0“þ©‡‡{WòN…X9/à…Îd"!ÙÑþÑàjF…¦µcú›$‰ýKgÿ‚‹…(/ný|ªNÞ/7™±ã:ü~Cäb&"Äò?â†»Ì ‚ÔH´Lÿ[ðëüñóC1k‘4¥Àù `Y_RæàoËy¨fÁ2¢µÎ¬$Œ<Ÿgq\k‹öQM« ðÃ<¨óPÏh­TC@Ôˆù¨ º¬uÿFôÐ +*I?@…_ÈTŽ÷ 8ßm–¢ X5‡’ÒATdLdÀQÚAŽ†µbåË>OÚeÍÑHä˜éØR÷@ë<¼T`z›ov«âËôc¾†ùçC‘j¢¥Á 9n“œRÖB–Êp”¤9‡d‚:dÐë^#¯õªÓäÏ_V›åKÊtò¹ ‘)aMñãÉ!}ƒqÍ4æ-Ïþìßj :Ê?œWèøèâ¬<©'— Óµ¶&w$v·Z¯ß.ŠP‰>üði¾h»¯B…“ã™à1ÿ8&Y£:HŸ‚`ß,ZXµô*—±˜ +P‰ãJ«ž +tášñF®õõÕÔÄ‚’>hª7[HšÐp3oº"“7^ø:¥ rZ™ÌÿHýq¿Ûh^èd•ïšÈ!r£îrŸQ×]ãJºÑUŽ]øQêúˆm ±í"æ1ˆm‰˜'Ó_VËâc“#d] ×kQd¨^`\ Þ“…Nbª±‚"£òF;rÉÎfQ ó^ ̶'̼m ]a΂4c‰øQž7E¾ÙÌßnóùíêññ>_îù‡ÏëæL€­¢ˆ8PªÈTpKq\AD¤¬nJ‡Œ 'Ë$± €˜6J­ƒé† +-Λ“gK¤LÄì (”ª«¡RÙ³çó©Þ¥ŠÂŸæ‹âeÛ€*F™P ¼1™ +Çå UÖvlÈ“jÀJÑEaï’"Ö)b/Äû~µIÞïÐ~›„ó)…Q² +6„ª1…=RÖT®bè£ú¸ÙÖ†ëÄ5[’öèÁ ®pM îý¼X½4‘b¿ ¬V¢%EÂãa\jq*P–3\-¯˜ª5¨ök =HµŸIªÓýó X‰=uf ˜Õ1SU8.!I® ŠVíP¶ÂÐNOå¯f§•¯°DƒÄJàÉJ‰…TÊ~¥PôûA¨˜’`ÑÆ#H ²^õh«¢j˜)¶dOD,5±Øë  àö] ¯—ƒ8uÀ©Nyg;ŒáÔs8ˆTçËh Ù±+túL5äÉj|BFÝñׯcš\ž•V¼tf°bú:Æ÷°ZæC(d¸@+æÒÎÀiºïÏ¢™.%6Ú+ý÷N=+Šƒ=Ël®E±mwÂôd̆bv'˜Æqa\ßÁÆaÁ2ªt­ÓÏK«")†ÛxcëÎ’LýL·ÊKöÏm«ƒù,Yi²u%IÃÙìD¶®åél]°keëçálýÌØ©×>RC®c©ºôÍNÕHÕR £Ø¨H]u=¯ÛMÖG g$R ê¼ +ؘQ‚U­]œSeŽ¹f¶#»ÙÎÅ<½1‹A¥q›4 Ç9„úæšÞP‰.ÎÏqñïÍUE¸žÒOÄsn”çŒFZÏ3àéêPiÔY9d;ªM©z9䥷ŸçEŽA¥Ó¼àÊzÿÅ‚;–iCô1Xº^¥ÝÞ¡¸Sf+{]EÔ¯×zÿ²Ì[6'º3÷[ŽÝ„qàÚ¶9ÖʇÆf‘úzÍyc|ÚXMæ‘5ù¸7Wžì[™º×Êäp ­xC F +ãb}åÓH° 6ûŠAû|‰4ƒ…öèèh¬¡þ͘áñÆš8Ωw? t 7Ó£4×ursò‘MÊÛjE¿mRXTÆغ•”Ç»•4´‰¢=v9²Ui®Ù©´‘N¥DkZÐ +DV;M¹Úiš«¢³ÚÉŒßÆÇtænp¹Sâ83ªåûue6ZUïAúLú(Ïî©Ýö5™Òè?ÎV;›Øàš&n|bÊÔN~lQSùtd|MüøkšÒi,ÖØþ¦<&pSäñ±& ãL²þSõµ¨/&÷- z×-èù¹õ|‰CY7÷Û‘q7©ˆÔØš‚qÜ”ât×À»ªëÎØOj€mŠÆ¶C¨nÊÕË^K²Ó9nQ+æ›Ã¤@À4lêS^?Ž/{ý ­-}{¦•·gz¸íô==½óùˆx¾ß¯‹Õ§õ*oæ®ÖoûÓñ‹@Q÷G ,kÆ­c^5÷R¬úíÿ`±V–Z +endstream endobj 263 0 obj <> endobj 264 0 obj <> endobj 265 0 obj <> endobj 266 0 obj <> endobj 267 0 obj <> endobj 268 0 obj <> endobj 269 0 obj <> endobj 270 0 obj <> endobj 271 0 obj <> endobj 272 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 275 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> endobj 280 0 obj <> endobj 281 0 obj <> endobj 282 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <> endobj 286 0 obj <> endobj 287 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <> endobj 290 0 obj <> endobj 291 0 obj <> endobj 292 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 295 0 obj <> endobj 296 0 obj <> endobj 297 0 obj <> endobj 298 0 obj <> endobj 299 0 obj <> endobj 300 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 301 0 obj <>stream +hÞÜš[sâFÇßùz•¢§ï—ÇìÌ$›-Oì²É­Rû@ŒÉÚ0x'»ßh¿åžÓ­KKIØ8TR~@vËRóëÿ¹v³d9z÷íK–»‘‰¡6‘V'‚&Ûlt?úÛtôî–°dz?b<¡ðÌâlb%”'Ó§…§*áoÓùhB(¥"™~ýš^}ü&QÄ&ïß½ÿê«äf;f–Øt³ÜΞžVëeòÝzŸmïgólüÏé?F§#˜ÎCh? f£iˆ0 çgá¸KÚâåøNΊ·s¿}¶Û'ã‰&&ýáób†W,Ýg‹p‘¬ðÓ¦ë1Ñi~Û§ü¦íü!¿‰‡OÊÔx„£ø £pmŒrD¦7ÛM¸cñ<ß'?Ž%<Íò§ìòWlÖùó…ÿ¦4™0¹6ÉôƒŸ²”MtÿK˜s㉅w¸ §,\ªd¬qºIñ9üãâ·þy^þŠk' a¸r´X;Á‹µc*¬ÝÛNõëÇÇävµ…ÐÚ~̈JwÉm¶Ë¶ã‰ÐÄ¥ÿs̤°+%·&J'„ ç\B¤ÙûÒœ]Œƒá.kã¹U‚¶]0LÍ$)Á8+×`Y¢­ŠÜ‚—´7 l³û/W³1WðUþ3æ>À\$h{{»yÞƒWø°š-?­ÖËì*[/÷Å—ðÄò„SJLB4¥­³à–Áp5‘ܬòEÊ×,Ò°I’´ÿø·¢¥ +K}üÆéo#X˜HÔ;B|WnÌGþqÂ,.SÌ¿l"R× QIù³T+<à©OÕàݬöó4 NH&L +"d5xŒkmq€Í¿Þ{UË(Ž‘tüø—:B]`AK§æ¡§¤ûŸ£%B¨$ÏAâÅqN0y€ÉÆÃä/féŸd‰fsJsÌ?ÿòaµÛÏÖÂ`ú9oé æq0'àHX›m©Áq­Xè)âeJ‘*Æ™vk”‡ÙÊü-5ËϪٻϳ9\ƪ…/¦Î´Ï2Ž«V2×BæÆ^©¶^!ß´W»ž° +féØ©êÕ/wb#¢²˜„éo jjâu\Uê=`iKXŠËŸV‹ºÓd +'Ƥ!X$·8®™Æì®Fr™`î8ŘF©KzÑô‘Du«DeÀ*V]bÅ`ô~ö9‚ªh˜r¯ÎãL…W'¥%PÑø"hãà +X“àZù_ƒçß3H`ö1NÐ?Z;‡4¹ËÚ©ÁqeE™cÔ@DjN{@U Q˜T­‹žÀ"=ÿŒÖJæP-~ÿz¸’!öö§LŸf¿i½Ò2='Úv Æ•V¹Ñ7”)£dò¢¶.;´yZþ ¹g¶ž?nvÙb¶Íf1Sð €Ä×éG<ŒcÊ]´ @IO¶éŒªÂ 2Îcˆºˆç=Cì‘B(롲®6j·zx~š?׬ž‰Ö­ ÂèJ‰ ¶‚q]ËeK,×€úã’ª%5ÂTçEº|I@Wíý>³÷ýf½ÎæûÕf½‹I3ffÝ–•0¬ Š‹"}˜DÌ9MY¿ÖÓ¯ýn37XUú=®_—?`TŠÆŸVû‡Õ:"#Ƭœ‡"ø8ã‹àʪ 2 ‡«é椰`¹ º + L5ù˜f`hÌÐB1Φ…)‡¨ËÚìÒP––µÕÓ5@œðžZEŠË98ÝtpüTÿ¶[ýwÌÂPû'Àm)ÙALÆ¥ùuˆµrX} Š°—ËZryš.yª¦<;,w·Ïâ´ZJì3áûK(ŽKiºÒj,S†æì À? ä°$Åt$)'û<$‰–&q!“dŽúÄï¸M3—eÿ˜Q#Å>£ú‚i‹mµêj%˜ÚÀÔ¦¼Éäõçf`•Œy#w°v]X-ÅqÉx”O›²)#OëëÐV¬úXwwŒöÝuwÔëj=ÀÚ,N„“ÞÊ{XrÏR8Ýæ-¹ê-õñÚâM¬ÜÍʯïïwYœH (}™,˦X+9ê[ߢ{³)ÖÚÊ–Ô(wé°£éAØá§'E×¹0d¤ æÂ{à?ãý.ýåÃ*\`ƒWó8î M½K°UÏ¢u1´ïYÍÚûjõÆïÝpM§ðÖ¶ þâ°¹!!¤@óg¶3B¡«…qËÔ¥`lž U°4­åÜ0 š®&›3‰8r¢©âcÞæöC„jŸÔ³n÷ +i+ºW˜G-(<ƒìê—ç&íRq_³sÅý›íf¿…ç¢ñ=ï îÇ,© m4YwG¨28.íë1´wî.ÙO+èž¡Ÿv›í5ÊG z$*¼D9¤ ÅY«Œå:¨%$ù¥°XãÍÉWæUw(Zéjý¯Ù²F×(ï@µ¼sw­î6àÞf–ÅפUkÇžï‰Pö!¹²¡ºW¾ë{¼$Õ8Εkí©½f³çm‹R-Îfé9¼ëÅõýÕj]S¤dhï`õ´ ¢8Î¥èªH•ío3ñˤÐfºô‚ü¿z}u3X˜ÍÆ8:«Ì¯³Ç3Æ7L¼f;8»Ð%Ö¥á­Sí€:U]ªNÕò Någï÷È­šÛè~ï Á»º€ÅAG@-8‚Šm=±Xp½¶‹¬eWªi›©&hx@cc4E­š%`ŠÐBË}ú°Ív›ÇEu»P¨³nß)¨÷àº6#ÀqMó퉛ºk3´ÊèXqy—ÇÃ2¦ù€˜qy]å‡Ú*F&?Ó&H¾7æZK V¸WÕCµ©}†*/qR¨€[â¯s‡·³u-ÛÁmEŒÐ¦<Øêó +dÊ”fYsïÔE=MLÿV-¿äA!­öÏ'Ù(ለ·¾|Îj'Ý°ƒæÍ\ySoÞ²…ºŽ¢éqÞº:ˆù:ñ6×{e®rêlÚ=0÷p‹ƒÇ{ËþÄ ã‚8ýç;1¨Mû‰Á„'†!Y†!Ïõ‡]v<QŽÛ†ÝÖ> eTGMü–ĘÊ÷ ®ñ31{¹ïfOÙ÷µž²õÙ¬*·7‹4ŽC8¯VíÌ9…øXåÛâËþ_€ ƒ? +endstream endobj 302 0 obj <> endobj 303 0 obj <> endobj 304 0 obj <> endobj 305 0 obj <> endobj 306 0 obj <> endobj 307 0 obj <> endobj 308 0 obj <> endobj 309 0 obj <> endobj 310 0 obj <> endobj 311 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 314 0 obj <> endobj 315 0 obj <> endobj 316 0 obj <> endobj 317 0 obj <> endobj 318 0 obj <> endobj 319 0 obj <> endobj 320 0 obj <> endobj 321 0 obj <> endobj 322 0 obj <> endobj 323 0 obj <> endobj 324 0 obj <> endobj 325 0 obj <> endobj 326 0 obj <> endobj 327 0 obj <> endobj 328 0 obj <> endobj 329 0 obj <> endobj 330 0 obj <> endobj 331 0 obj <> endobj 332 0 obj <> endobj 333 0 obj <> endobj 334 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <> endobj 337 0 obj <> endobj 338 0 obj <> endobj 339 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 340 0 obj <>stream +hÞÜZÛrÛÈ}çWÌ#P[„§ç>mÊ®8“}På¡ ™ŠtQplïå/Ó=¸ @%'’R®2!gNŸ>Ý3Àng¯þx ìö~f$³Ü1å “œíóÙÍì‹Ù«·À€-nf ÇøÎfÞ1+yÆ[ÜÍ8Þ%ã +¿[¬fóŒs.Ùâëì*ywñ–é̱ׯ^ÿôû°OÁe.ÙÝî—wwëí-ûe[äû›å*Oÿ¾øÓìb1ÃÐ8¤ à C–ÃðažáUÊÕ§g +¨Ÿ.Lõôå}ÁÒ¹Élò×Ï×K:‚¤È¯Ë¶¦O—lÓÌ$Õeï«‹ö«OÕE¢üä Ó9HÏé<¶VûL%ö»òŠë/«‚ý-µ.I^Ýå¾zÄn[ݱoÊÙ2!Œe‹7aÈJõ¡û7ïÓ¹Ãgø¹àPj–.«?§<ù¥/÷æÍŸ4wÒf@3Ç빓¢ž;ÐåÜýw‡úófÃ>®o‘¡¹V¤éäž}Ìïó}:—&óÉ¿R!ñËü:«ãʈÌ o“iÃ2!½÷,S‰WFXˆýpã.ªs² +J¤¶/ãÒ€Êê“›­28`ÆéH£·y Í&¿ùún™ +oò= +?0ZR{ÿq÷¥@Q¸,–øJàWE*ðüex à™ò%èWÉçå +¯,–ÿHÇ°Úä¿lo6_òm+$a$2s‚ ‰Ï,3œŽY‚¡óí¸iÈ¢šÈt® Îw’±±á¡>C¹jHÁ!zé¿žƒ$+¦‡¹@‘D*¡D(bÔ›Å`¸Ÿ¦ûUH6ðýº¾.>¥‹ßj Ê—bBñL«ÐycÑ"L}­fÐiALR + 4„W4)'±ŒÄ{Ù¤èâø6v¸gðRx°¤<²Om}¸Ù䛘Êc"DÍÇ·c™ÆtCHrKç† +¼’Ž²¥#· ›¢ªƒ%cø‡˜ù†}˜@[òý *™á%Eˆ^mÈk§ž ^ÄHÕ¨N/‘õð^29™Ë4D´S5íì)Ú€€2–7´óB·¼û‘.RG_S (w·û8ЙE¦)¼¿a ƒ€o˳UóöxF‘žff÷ˆ°µ]ü¤=@=¸º„R—PêC(u€R(K!DêÏóU2å>GµwÓVgR ÆóÈ`‚¹M=}Ô^`:…ØfZÆ› +b8qIPÕŒÎÍs_9ˆ¯-ñµ%¾²Á÷b{}y†clð‰Žj$³9¿ÂH:¯1W·Ù7’;-’“¼ã&ÈŽý³(ñ8@¡¨x _ŸÖ«<~óÏtŽÿoóû8ªµQÕ ¨œ:J5J/¯ÕUL·d+ќʮe>ÏS—IùÈô]£Ú¦ïËÀ¯ë}~ñ­È·÷ëÝ6Æ¡@8 >a OÍé¼FãT£)ë×1-IÕv§i*[š6%×'a-‰jÝ#s“8ÈMQ~H¾_~ûùú7¬Æ·ÅåfWTáݺA,§Ö*꣠•†[cÒ-Cº'y¢“Zd2Ž6ñ6I¹RòÇÀ'Ð{½[~[/7Ãà,ØR5Á¡ÊÒXaõCøÑà=M,‹‘Xn½x áÅõm>ˆŸò$m€Ü…ì ©­¥‰*99½’;xéÓ.:Àåü×]C#'AsUc³¾ –ù Yæ»7$iÅ÷HÒ”õ!<‘hPe\€¼¢ó +yÝf\0~Öœ"X„˜0=h5zX²èÇÐ  m-ºÓXa¹Þ"–èéÁ¤Ž òSÕ6‚%*"^+O«µ'*JcúUz“n’1üLVw¥+šRc¿,0d‚¸?~«‹ª2@€1y`ÙE7¾)°ßå裃 +ŽÆ:zíã8ë‹R¶A¹?J +pGy˜°Ðú$›¦ˆÝ4üDI\Iâ=gÔ Ýëç(Š ÁŒãhË€vÓßïWEŠ*&TÕòÿ p1Æn²› Ç2H‰ ­Ÿ£¨;EçÊR›½lÅ‘.k{œæÉ•ŒÞ»±¬rbIôå”5¡œÒQ9¥O¸…ïÇ%æ7Ǽ¥.Öq°mèrIô +Ùî©6‡Ì'lR +Þu p¦^7®öœ>@¯õ9zýy³„ØZ’ïƒ;NhNç%Ú’Ni½fÄçªÝ˜ØÃèªA 7\ç-®’ªdeeE+ÊŠV”­KöìâÛòîó&ÛÒð -¥T +ÁìIF…Gó &up:ýC™æõº>ùÁNÏ4°JN„Éûåj¿«HKkÊJ¢.Háã8aAêckÚM.!)§ +Q·ðš|‡Šº“®ÇiµÕÛIA´-]0Çú‰ÊÁ!Í(}uÓsIQ¢1•ZS‚¡&¨1Í@†ây‰>%²º—¸Ãj-¬Ÿ.,ju†G*í9‚\Ç5È1N—IOtkIæ*òÞDUàÅöMi¡‹.Ö)¨V+²Õ±Ä\ÉÀPGK´Ž–~ÁÖÎyiwP~ƒ¿Þ,;­Yá±dèÞFyS†WªfY¯›º]ÔÖ!bOæ5ÏŒ~ŽÔv¨í"j÷ †a„urqñ—]ä4•,>,ëû€ ”hL¸ˆR}¦rÐП¯xøañ8H¬ ÄoSLš>ÙíóõmÜÚQL!EýX•BCqKH·ßSòXwžNcyØüyÖ>ÚOóÑ}à]üe±±W@ÍM„AŒv›€Î ,îF{MòŒ^“xA½&ÇÏÆüÏ{Šô#ëNn×Æ£½&KŒÉˆt‡b‡–Ö:Òb¤EÇyõœµ;B»ÒnѶ¡ìh’Ëu/ n+c"Ç}‰ÄKi A„ð1qÓ–ÚüËõ%Æ|É Ë ó°µÆ%Ë¢ m€‚a ÎA7ûp‡C€]F¼oyP)ä9Jñ ¼ƒ®±øþÿ®Ê +endstream endobj 341 0 obj <> endobj 342 0 obj <> endobj 343 0 obj <> endobj 344 0 obj <> endobj 345 0 obj <> endobj 346 0 obj <> endobj 347 0 obj <> endobj 348 0 obj <> endobj 349 0 obj <> endobj 350 0 obj <> endobj 351 0 obj <> endobj 352 0 obj <> endobj 353 0 obj <> endobj 354 0 obj <> endobj 355 0 obj <> endobj 356 0 obj <> endobj 357 0 obj <> endobj 358 0 obj <> endobj 359 0 obj <> endobj 360 0 obj <> endobj 361 0 obj <> endobj 362 0 obj <> endobj 363 0 obj <> endobj 364 0 obj <> endobj 365 0 obj <> endobj 366 0 obj <> endobj 367 0 obj <> endobj 368 0 obj <> endobj 369 0 obj <> endobj 370 0 obj <> endobj 371 0 obj <> endobj 372 0 obj <> endobj 373 0 obj <> endobj 374 0 obj <> endobj 375 0 obj <> endobj 376 0 obj <> endobj 377 0 obj <> endobj 378 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 379 0 obj <>stream +hÞäš[oÛFÇßõ)øH¢Ðdî—Çlâ-š]#V»‹}P-ÚQ¡H†D·ÉGÚo¹çÌð2¤(’rÜÊA²=¼Œ~sÎÿ\fXr?{õî†%÷‡™‰¡6‘V'‚&û|v7ûÇböê{–°dq7c<¡ð>˜5ÄÙÄJ(OŸfžB¨„¿-ngsB)ÉâÙÒŸ®¾O±É›Wo¾û.¹ÞgÌ›îî÷ËOŸÖÛûä‡m‘ïï–·yößų«Å &‚óÚOƒÙh"LÃùY¸®’¶z9¾“³êí\—o_Š$›kbÒŸVKü‰¥E¾ +?$kü´é6#:-/{_^´¿ýX^ÄÃ'e*›3á(þÂàÌåˆL¯÷»pÅêñ¶H~ÉŒ%<Í˧ÊWì¶åó…ÿ¦4™3¹6Éâ­Ÿ²”]tÿK˜sÙÜÂ;ÜœS~TI¦qºIõ9ýãâ—~»¯ŵ†0\9Z­àÕÚ1ÖîÏêëÍ&ù°¾ 5`kEƈJɇüï³¹ÐÄ¥¿g\Àó©üJIέ‰Ò áÂ9—iÁì‚iNŒ®ÆÁñ—­ñÒ+Á¶]pLÍ$©Á9i°,ÑVE²àMÚ tLƒ|ÀËn÷»äêóòÓÃ&?d‹ßp†þNA,<Ãn¢)í}3Ç›×”oðà³¹òH2öÏ“að(V²t½r!ýƒ(p6ÛÇŒƵbø +Vnƒ ­À=ÓA¼†¨è»‹ò»‡P2°HÈ 4„7ëRÇБ…iî_¬+è|zeà2ÂNAn"'Þ(ÛÔ¯¶+€)¸ïˆ88‡óiÉ€pX×B–Â1¯¿1þÀkàlÛ¥“„ºÁ9öüdGhÁ†×Ÿ„@›–}+×µo^“ö +“~›Ö÷Û›üßëUñ1Òi¦ˆ ×Õó¤…såÕU3Ø+Þµqê–d›t´—¡[r©±ÓÊRa ;YM jLЂÜÇU¯GÆZ1üi™m«ôKÆFä ÈûÈvè0ª…F£P ƒã`Ú‘—†##¨ÃBÁé·& Ð²áï¥"æ’ºÔE nÒýuŽ-Ò%ØrÄ–´ƒÁ ü´vp`®GÒ¢!&…é¸Z8BML¡Šá¬¸ ÖÒÑ›ÚðFnKæX½X[Z2<Šõƺ>š2Д¦Fš +5|·ùrߤTK¯Ò#Ô Æ•V±:4FÕȱ‚i‹t”­%º:Ù2¨BÄëÂ;Aa”kD,ÎtåAʃhu@ áíC~[ÄD¥A‰À+íP0QÇLÿØ@µ›l âòêŽ ´Ërƶ"Žp‘wu=Òx ¦ýήøT–î¤M‰r’ :Ú5AÞúãÿËzÙÄuÅz®XæEF⸂08nmegÕ_²¦•‹%Rã(‘êÚf3ýã¢L†¢L†¢¬©#•N£³+IØz +…ãrD:5¤ “¤ÓȾ⠫¨'éçò+Çj°ò(¿bU–.XÔA¸^oKãÅf qèÜP'û Îú,—™DZVw':kU&P,%S|›=›LþåáÊ niE7 0§ +^S¼H>2YìY,¿ì|ƒy®Ôâ(ÜwLVésŠ/FÕ˯¾*ØG¢1Zçv@Kl¦ƒ>‹!Ά¥45dÙ2Î2„×$“ö›Òh>¤Ñ}‘0¿Þùv»|»¾»{½Ï£¨(1 ®Êù°xŠ;—ÔwGëM‘¶³ˆ½™¢È–©K–»N•»¼®¶úÀ½[y$¤¾M`‡¨9¸ŽG™„nµa&´˜|i ¢º´Ôûågõ4µf%œÄ¨oÅ°iŸz ø_°2çâi2Ò tqûõ/nó9ÙßæëÔF'`½y,Ú¬Œñ :ÈDI¸Öõî`–jÎcö•¦õ Ðøtf7ëU~ldšâœ85ÃVfý>Ð,rËæÛ›ÈA QgDazsD5¥8lÐ8@Sî‹p`L§ùÜn•o"R »Éf§©„ð;Mf°?!&&ÙŒ.× ¨¡õ5(D_ƒ¢Áç;g&-³@‘ëåÜÒë}“ž®½c‚–é4œ…ãâjãš=ûh^ãû®WÖôdíÌÍ9oôÏÓ8u…Szœïób¹é¥.8¬"‚9¬Æq.æl»´‰öEÝ„Þ°~Ž\í«9Ž5Î&€¬ô/‚É€õmÇ!–Æ9Øpµ-×SáU~ŸN’>çUê«ZbÎ µÄüZµø¼]ïó°ï[kºz' ¢w²³@½èqƒ€ÓÊ7 A»Ï#Ï+˜ƒÁCžcg¬EñÝ~÷¸]ÝäÛúXÿ¾.¾D4!½ðÉ­© +4Žs,ìqE&[Æ4AÄ…‹;´fú|5l½Ë÷‡â·]«œåx† R† X4çR Ú"”U“mQË—`‹vÈ¥U§Ë6ã?óâêóC¼ƒÈ¹ Ž­üvìiŽÇ9×µc·YÊV¬“µM¿–nÀ¯å‘_ß|\>ä‘/S︫BîÁjH> endobj 381 0 obj <> endobj 382 0 obj <> endobj 383 0 obj <> endobj 384 0 obj <> endobj 385 0 obj <> endobj 386 0 obj <> endobj 387 0 obj <> endobj 388 0 obj <> endobj 389 0 obj <> endobj 390 0 obj <> endobj 391 0 obj <> endobj 392 0 obj <> endobj 393 0 obj <> endobj 394 0 obj <> endobj 395 0 obj <> endobj 396 0 obj <> endobj 397 0 obj <> endobj 398 0 obj <> endobj 399 0 obj <> endobj 400 0 obj <> endobj 401 0 obj <> endobj 402 0 obj <> endobj 403 0 obj <> endobj 404 0 obj <> endobj 405 0 obj <> endobj 406 0 obj <> endobj 407 0 obj <> endobj 408 0 obj <> endobj 409 0 obj <> endobj 410 0 obj <> endobj 411 0 obj <> endobj 412 0 obj <> endobj 413 0 obj <> endobj 414 0 obj <> endobj 415 0 obj <> endobj 416 0 obj <> endobj 417 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 418 0 obj <>stream +hÞÔ›Írã¸Çïz +ÉÚßÇd<»ÙTfËe{7‡T*‹ö*±å)IÞy¤¼eº’)¢\ÙH.W™’‘Яt7`Ng~¸åäq;3’Xæˆr†HF6Õìaöç»Ù‡ï9áäîaÆaðî,õŽXÉ(äîyÆà.”)øÛÝýlNc’Üý>ûGñ·OßMùøáãwß‘ëMÉuÅËãfñü¼Z?’×»j󰸯ÊÞýuöénÁqH†Á]2 ‡áÃ(<^Ê5Çg +Þ<]˜úé‹íŽ”sCmñó—å_ñbW-㠲«+Ö%5EÝísÝisÿkÝIÄ+㺜sé¾á^[«=UÅõæ%öX¾ÞïÈ/¥uTU}—mýˆ—u}`¾)#sN…0–Ü]…!+ÕG÷½/çžáç‚ñøR“ÒàpIs~9{×÷{óö-ÚNZÊÑr¬±í¸Ž¶ûc‡ú§§'r³zµàk»’S]lÉMµ­6å\ê‹ßJ!áÕ’6óÊj LoCµ!THï=¡ÊãÅæ~h„yG…ê4Ö“\ÛÇyi¸¢M#Ìͽ28NŒÓ‰*ÖȇE4OÕÃïŸ÷8k ñzµ¾.<¸x)á~ ×]9p¹ª¶«ÇõÍkìû¾iõ÷Õr÷kó½Â%u(JÆL¨alph`2lß/ ­Õ |LT­®” ÿ„'[jÁÖÁÚ»Œ~>s÷/øˆzï4ÌàgÐgD|ðègçÜq˜ù‚‰ðè9¨.|Ð…îVßÍ!ö-bŽˆyØGÄ4²„òâ[É=\ªØ%¡k@À”Á+Fé2…íÆ8tŒCºbO\Q„fÂ<5:%¦kb,̲‚»@‡ÕÆ'wà ¥#êP&#u·Þˆ]´÷ ?Þ vˆÚÕ¨ED-jÔ.¢vˆº@×E×¥t \Y|Õ0YÝs´Íëï–¡n²D[1i‰#ð‹‚—ø¤¥§[z?o«=%i„'Tž´Kˆ·‡ØÙÉìιÀåÿ^/È‘Þ¸˜àø @PN}]:‰e§\ç°ÁƒGg0³g]›å± ‚Ùè~f£›Ì&|ÜPi’qØz1!l›ºfÍ|œêœæJbK$ä‡GÖm1½¼'/Áq«~iª~½yù‚Ûü0§e±û–¤Â ˜æ*l²ŒgÌa»€µ¾Ù2 +DZ>=•›ýæ“=!}k ¤F7`:bðãz× •6 .)¬y9„šÙòÇvJÉD²«j k¦Çk Mä"+¦÷[¼¡Ä4¸;ž0¾©O{Èûí­lÔsšób‹®.´O§¿ê¤‚uu‹M“kMì‚KM\gjyâ ú%g$¼*qÓ{ýx;B >ŽìÛ…’‡u§4F5'AïH'?qWëMf:}W+¡ßìjµ;ÍaÃV™CÑé[»´%…B!ñbe(ltt„dÀ¿µ>­˜*¬îW>ÞuI™ B’$Á¯?„v«õj·zYoÓE’Ùf¯€çŠ¬ê…ºD|.±óÓ +Ú,2f\dx?¾ÅM[ŽBBCx{ÿ Öÿ„Wxº‚Ãý4àžÑ ð\å%Ú¹Y×'i ¿h…ÏÀOÒæ¦0‹þŽéK9sŽA‚ú¢†c˜â=Ûb;·ºU—ž?ëýÙ½'¤b ¼“Æ]¢€Ī˜ÓkC k;¢¾³4/Ë:ÞéiÉÈ%lÒp;rgOº‰»¨%xtaw:£ Û!7lÜV÷ÜvúJxÑJ`§¸m7ÔS!Ô3u¨wÕ\ûp7C×6}½éŸ&퓧ɮ{!ž ñöØÓ$9 7T/Ü:·„Æ$òÌ9¸ö=<üØKÏÍ´­]qV)ð-Pux2¯ýO!Q»Õí⹚ÿTíÈíŒ \ÑÙ#ƒÐÍ…ãŒåwÇÄvˆ0:'¢’p-OKÂà œ‹ÍÃkHýW€¡³@ +endstream endobj 419 0 obj <> endobj 420 0 obj <> endobj 421 0 obj <> endobj 422 0 obj <> endobj 423 0 obj <> endobj 424 0 obj <> endobj 425 0 obj <> endobj 426 0 obj <> endobj 427 0 obj <> endobj 428 0 obj <> endobj 429 0 obj <> endobj 430 0 obj <> endobj 431 0 obj <> endobj 432 0 obj <> endobj 433 0 obj <> endobj 434 0 obj <> endobj 435 0 obj <> endobj 436 0 obj <> endobj 437 0 obj <> endobj 438 0 obj <> endobj 439 0 obj <> endobj 440 0 obj <> endobj 441 0 obj <> endobj 442 0 obj <> endobj 443 0 obj <> endobj 444 0 obj <> endobj 445 0 obj <> endobj 446 0 obj <> endobj 447 0 obj <> endobj 448 0 obj <> endobj 449 0 obj <> endobj 450 0 obj <> endobj 451 0 obj <> endobj 452 0 obj <> endobj 453 0 obj <> endobj 454 0 obj <> endobj 455 0 obj <> endobj 456 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 457 0 obj <>stream +hÞÜZÛrÛ8}×Wà‘¬)!@ãþ¸“I¶vk²›²¼LíƒÊ¦=Úr쬤l6Ÿ´9Ýà ”Hˆ²g*ÖTR–l€$xºqút7$»[¼úë¥dwÛ…UÌ Ï´·L ¶©·‹¯¯ÞJ&ÙÕíBø?¤w4÷G,â› +¶”À:võS\²ÖûÐýŸÉÊ¥Çg„%Y5¬´´\Ö~ÎÿøîSÏ÷æݯd;å¸$ˉÖv +ZÛISÛî]ê_îïÙÅú=Ô¡¯íJÉM±eÕ¶Ú”Key(þ[‚Â?V7¼ÝWFÜÜ–Ë8¨ãÚ£ÛÕûËw¶ÇÇAÆ›]‰¾êi¥æí nΞ¼dÖ›„¢K;HÔØÜW·_/w+\ªÆ§»ËÏ«k¤‚v¡ñŠ{`Aà·BŒ>I:IãýÓâ“â6¢/­%$)Æü‹ ‚K[[¶ÙŠaénÅä¥Wÿ^ e—˜9-.×7˕ͦŸ¸p)=@ÄU.•$ô‘B4yÜOo4 GŒß<Ü´Ðâsd-²‘fYÈ!‹³pÜZOOi‘µ-²¾CÖà:üqd{l2ç.t·2ClÕ£œÕÜã·—ÃU·FÒ-å¡ÏÊY«WÅ1D1 @¨èÂGÍ,ÏUjŽÃêS»Üq笻wp9¬{¼]7ð5ö¼†ñ°¸\}ª–ÿ¨v¬Áž½ùßêÓçûj›Añ†4èvÚ½ Ç­Ò£ÄÑÁ™yF÷êzŸœfˆ'C);×Õ ”ïÊ„.×»ªÁ éÜJCFÁ­žöZ$c¶2rB‹–j× Jž<8n„ä}£¥‹£‘ò¡Gº“{„Ø×SïÐ?º{ÙwHWïš[@b-²‹@«@c;dë²N ƒŽl>…é•šOˆ¬=P¤Ï´áÖQ_}㌠ÿKžrRè!EÎPnŸ2ôaŠ›ùÁ*®2ÁOk6èõ59<“Α—Õ/Ã0¦¦J¾x,‘I øú¾DW‡bµÛ‘“«^׌¸8)4Ÿñm”'8n¬i§Ûf‘Ît$¾l‘3+u¸n—¨#PÖ@Œ‘œymúàV;É#žNi¥Å,¯³" œÆÆQèU½J w”תâr·I-€² 7€4N)CË/ýë'#!¿†Ñc.if‘n(Þ"T&nxäb"$ÂÞ­‘[åÜ0-›.PŽ( ƒö@Aeu’ŽS@LF§ŸCÂ&vÚ;~ÿÅçÑÉ ¾—èia’pIñáa½ÛöÊÄH•‰#¦ž‚óCš©ÿ]ò|yñ$-aNÛ‡’¨Ž¨ˆ}«=É8‹$ˆ f:cÜKËU±«-ÒS‡˜:2§¹¶9Ï74®{Þ¶=[Gg?9Ûôû,½Ýä2w OR¯'ˆ]ˆú$P•% +9Š±¨«0r4}Ñ©V9E©üI‡‘ñÞ›j^TìîrÅQ°ñÎ8®Q3&,3ÙªàÇa¶zTˆÀé¢ðûèn3®»òˆø¾-µAÕ·©þó¥z¸þ–ò Díçrx£öÃq­]Vø©ÂOž§ð³¯kkÔ±rDœhR61_ŸAØFõ­»ÞÍ°¤G’䤒ž{ÉåÒLàf¿¢g‡L÷a[±wë6¬ìQIJâ Yž0*òJâ„'FHÕÈ R8ï¹q²›‚c€Û7|Q½+Qðë‡Ãf€ +:ò†i“öqÚÀä§Úú„,L€£döLÓD×Éëà÷‡‡ëU¹ô²@uçu±ÅŸP¬ñ§(ãß»,Z¯˜Uãµ*ä^+”,m¯gðæ5OËÙÒ»â9ÒûwÓÒOÎ1›·AûX]øZ‚{Ž1p¬¯Po…%ÚÔU‰?6ÛõcZ9QVо´QòMÛDÇ„SY™’ÐXêníLÙâι¿à§‰šò±ŒstWƒÞÇÕ}­‚U{4žÃ™¦ ©}ÿÑjÉΨpïÏÀ},ŸŒG+y”CCAŠ‹°O÷IÛìãzÕU6vjÐ õ4¦^аBY“$:Cr®7· Ï/þÿ^ÑcsäÂú:+ÇšDк´ïК$jé#õÛ6å÷ÅŽL”x½‘s0ã×9Î14®ÐoÇ„O ,Ìëhê³%%2ʲÿ~G Ú€*Á9¤i–¶ŽÇÈݘGî^þù î ,qrDúçUI)Uñ­”tj _ieœ‰µ—xä!ÓÁ4(‘ì›aÏß•›UhEË‹×õ#èV jÄ!ŠÍûÒÐaœÇûowÆÇÖPPNï iL/ÇØ0¿%aü˜Z´'FYÛEÙÜ•õuRš§FYÕ7øGê¸f +}S£ßªÊ‹êz—‚®%éÈëLÌp¦Ê°2`gŸ°B˹|HÁø «a¹ƒù¢¢Vëí3X]¬Ê¥â¶xè´Πãy6׺GÚÓ8 –ãÜ’¸¹>éD›ØËj^¢ŒLpoö +Œ7þGµ‚Y¥-¾ jÁûÐ"ÒJq™“,ÆÑ8Â;Z 8 iqÎêY8ßr‚‰H:¼®‘×8ðÏÛÛm•Š "Öj<—9G÷ÆeHÏW¤Bºöq8–¢&”âÆSÿ—Jæ:GæpÈ2øPƒ~û—õÝ:¤DØ”Z¡šÞi˜°Â¹¦ãšI;ÈSìàÏÜ39ç}‰ Ùž~ß•´-vå’æÄãôe`ê}’¼Ñù¢Z04NÕ2Ó¤Y4Ì7‹—ßÿø…2¹ã!©ƒ%‡ò€tÒE྾~¼O‘U!žhqùžiˆ'×)…Ê–ÅŽºMåãø™Íï*ž ßV`FºFê³ÿŠ«\iÑh— Ç|ÌtFΉ™`θï¬ìÁ±–Þ™›6Á}ñå>9oKM j9›Ü©–š¸¥hÛŽÖÕÃ죃NÒ󎻞XßšÕWV.sžÓNÕªl¬UEp{&ðtf–¤ENb#ƒP+¯­¡$V…ZyZ¡öE'2®Åæ7™ÞÙ +endstream endobj 458 0 obj <> endobj 459 0 obj <> endobj 460 0 obj <> endobj 461 0 obj <> endobj 462 0 obj <> endobj 463 0 obj <> endobj 464 0 obj <> endobj 465 0 obj <> endobj 466 0 obj <> endobj 467 0 obj <> endobj 468 0 obj <> endobj 469 0 obj <> endobj 470 0 obj <> endobj 471 0 obj <> endobj 472 0 obj <> endobj 473 0 obj <> endobj 474 0 obj <> endobj 475 0 obj <> endobj 476 0 obj <> endobj 477 0 obj <> endobj 478 0 obj <> endobj 479 0 obj <> endobj 480 0 obj <> endobj 481 0 obj <> endobj 482 0 obj <> endobj 483 0 obj <> endobj 484 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 485 0 obj <>stream +hÞäYÛnÛF}×Wì#‰@›½_SÇ1Z¤hà() ‚E¹*dÉä¦ù¤þef–KrII4‰B†IiÉÝå™3g.äävôüê-'·Û‘‘Ä2G”3D2²)FóÑO“ÑóWœp2™¸ >pàÎRŒ2A&w#³P¦à·ÉÍhLc’L>>f¯/_M¹x~ñìy³É¹£.[ßn¦ww‹Õ-ùyµ+6óéM‘ÿ1ùet9ÁFpÒ„mp—lC–ÛðažÀUÊU‹ãš‚W« WŸnw$j³w÷³)žñlWÌʲÀ£ËV95Y¼ì×xÑææÏx‘(Œë|Ì¥gø%œ[«=Uٛͺ¼böp³#ïsë¨ÈŠ8Ë6.±^Åù‹ð¤ŒŒ9ÂX2y¶¬Tº ÷>;XÃãå©&¹Áí’ê8üðÃ/}º“×_ÑvÒRŽ–c•í¤¨lÇui»o»ÕË%¹^ÜC-pm—sª³-¹.¶Å&KC}öw.$üXÌhåWFPkÀ½ Õ†P!½÷„*Ä+=,ø~¿£Bµ£Sµ}é—†+Z ‚o6Êà81N·TPAx"“-‹ù§ËÕìýbzý°,òÉ_¸·p“¤nWÔÀö cgçFãx³BðƒÓã‰‹àƒ«)^GèÉO€‡3j”.í0š3ìùè½°{°G$ÂÀËÆq£aÇ<ºú‘ÇÜ¡i…´a›cÉt…<‹séÜÝíëiꬳÏ9÷È„þm*2 àtI´èÁÛJ6Æáºܪ‚[×pk¤¶§Þ>f¬]kS±6…#ÈpH(¬<:‡\"Tƒ¹ƒ æ8n4Žq—XOl ªeÈaz‰½{”ÀZ³¬î²¸‰~åvY‚“˦w÷Ëb›à,Jx„ëá®8n¤ŠZ±J” + q¹Z æÔÉ“ËÊX²Ú5hÑX…wžóô½é•ÒÁãõ@^±Yè¾èØfó8ñáî«b•È$/9—Ù4Ç„©"”_SëˆwT‹~šÃ¸á×í#9?›äþ“\±“$O¤úín +[ °Ô.* +â߈´˜á€@~lq`:c5Ò ÍDCtf©Ì†I´jñ½¶›9嚯Á<}w–÷q~ˆéÌǽd¹m¡ŽŽÚA]tPoÒ«”C#Ö ê0kÀKõ ŒÃq ™K#0 ðªÞ#ðƒ£3Oyq”î Å_ó\XHe§Ë]Š¼QÈdÉ«9ÎwÁ K„kuª-‡o!R e¼q×'TºÁ<Õ'3ðäáOÜ<ÆPÅL^‚)`*~X<º@–Yž)³<ƒT6­,OCpCÑTö +ˆÁq­|µÃilS4Õyh–x‚éo„ça}‰¢G}¶‘)Œ0ŒŠ &…=Ä”8®výŠp&”?ž™bIÑÞÑaH;åÇåêf¹Þ>lŠZ.ƒËCa{ +É5Œk¨;§—-yŒÐòžt.‚ +õLš*‹v:”ÔâŽÐÛžµÑM¾‰ÃëHv%>Ǩ5ŨµKòãRî ˆjEu Rð:¡ FŸ +]OËeeeEž ¡¨”ú?”»ò ]èé’Ôo6–8®=…+yhc‚—`S¤†ª5‘ôiÇ¡†ªLÄC—ób}w¿)¶ÛbF^-ÀV×ë‡ÝbU.aK!#•½Ù[®¶ŒPª»äw×PkƒçëÆóòÔv"úýÕ‡Åýo÷¹Ö5š‚Ä®7¡M2(~(î(‡ãŠ»=pë +)Öhb Oä÷ûþûƒ¼_ïy¿8ÖϹúˆç"tùî/@@Sù”Þ‡ÜßSÙƒ³f0¬ÛK˜Ú0Cà³öOçDem# QDþJˆ{@LÈ©E¬˜Â‚¿:ÕŸ…ÕPÇ6ÄùÊwŽ °h­Þ/!M´Í¾KeöØ5’(•&ÀR´Z¾¢Ì9PwƒØ¢øb- Òé³Åv½"ïv‹åb÷9é\H¨*P~Amxü +¨ç nl·§BU”‘þJ,mQ4”0_Ññ9³{©|§{YÊu»{9ƒ¿Å|ž°…ŽØBö”»Š¸TíiuÌ»0^4÷âiÓÜ×¢"mG»û$E¸Ð8¦)™“ÅíÿDV4Û—øXX¶Ïn¿h„E¨àå€(õm¨[óˆN-1N"ŠËu12]ÍÈï(/ùb¿tÓî0™¡\±Xì/Û¤wR"eâÒa÷ß ÈXs`-k;©\Õô©_œ7Ïþf³¾ÍA U¶É-ü‡ÂCewés3z ²z“t×ÖÀ°@éy¤ñ5ÒðV°pÝäv9÷{e_ÕD>¿WVã/)ku)ÛÉ‘m,(‡ýñ@¹ÒœŠÐ™‡Ã4Ç/©)°%:—å[^}$Äq (ŒsßxQûqšþ¼öç™DŠGûjO2WAõE€¼¯áL +endstream endobj 486 0 obj <> endobj 487 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 488 0 obj <>stream +hÞÔSËNÃ0¼û+öh«ÊÖk;~¡´RUÄ!jÓP©”ø&þ§Ipâ‚Êa×ÞÑÎÄ»CP²ñù AY3«ÁIÆ[Ъ‚­ÙiÆÆ3‚lÍHŒ_ äNK” +²“± Jï²%KPJ©!{e÷üj:ƒ=LÆ“Ñæ• žÊ*ßí6û.öMQ­óe!²K6ÍXÒêÐö(ƒü'º“Ž*D”ñyË©h`W¶gÏëDbÑñÛ§UÞfÄ›bÕ%°i£ç{–÷°ëT-{ꢤT$¤ƒldcî\Ððyuè«çewÂyT¼è»Ô=Åaß÷oqüS ¡RÖAvv”lÌ÷§{ +A$>r„DIêÒ„måÂþú›ÛÙi‡ÔNN³Ój˜¥Ýì~WêÉv ‹M7ÔÅ]kaÊkXuQ‰D[ üE(/‹¾JMˆæ¶˜Z@¥C€Æǵëüe:;Ô£ñP™/õÞ•q·CgLK‡â»__Ö¼ +endstream endobj 489 0 obj <> endobj 490 0 obj <>/Border[0 0 0]/Rect[63 287.22 242.88 300.72]/Subtype/Link/Type/Annot>> endobj 491 0 obj <>/Border[0 0 0]/Rect[85.68 468.24 376.5 481.74]/Subtype/Link/Type/Annot>> endobj 492 0 obj <>/Border[0 0 0]/Rect[85.68 428.28 378.48 441.78]/Subtype/Link/Type/Annot>> endobj 493 0 obj <>/Border[0 0 0]/Rect[477.18 402.24 549 415.74]/Subtype/Link/Type/Annot>> endobj 494 0 obj <>/Border[0 0 0]/Rect[63 388.26 130.98 402.24]/Subtype/Link/Type/Annot>> endobj 495 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 496 0 obj <>stream +hÞÔX]Û¸}÷¯à£Ô­‘¢Hé±IŠi±MÜÅî>hlÚVkËSIÎdþÆþ‹¾ô7ö\~H²ÇI³‹"%[Ô%yï9çŽ`»Å«ß½l×/tÎLV2Uj–g¬³‹íâ·«Å«7‚ ¶Ú.„dþá"Jë’™<ã™d«ã"Cž)ü¶Z/–<˲œ­žß%o_¿a/ÙÝ«»o¾aßv©(y™œv]}<6íŽý¾l·­×6ýaõ‡ÅëÕ ¡uäÚ-C”³eä~•[EÅ0J•qršSŠ8»ÔaöºXºÔÜ$yÜÔt'’Ánü kèZ&mÊu†ý1 êÖû0Húk&Št)ò*£/ÂàÞ˜¢â*ù¶;ù›óz`MMÉebC”>LqjC|äÂí4cKÁ¥Ô†­îÝ’•ºNÝ¿˜¨ªtYbŽj)3áo –jZ.‹×¯¿üâCÿƒ_©v¹á‚*—ÅÚå2ÖN¾v?ïRs8°wÍ5ÀÚ +^$={g{Û¥Ë\ó*ù˜Ê?Ú ¿â•‘ŽW$vÄú'4ŒžèR¹GKϹ¿b-Pj*ÉH¿Ä½{‚4^_R4óhS‘4¨‹b‚nÝÓ?ÏgRò§Í$ÕÍ™rs{¦¹fáUR \èz¥&½•¡ÂeT3ðØ:Zý}’šIñðvQjšoG–†šû’¯öMÏ6§õùhÛml¿îH$xž4(Ilφ½õ9ÏfÊœn’p•>Ø«Û #É|ìN»Td¨s—Rµë^;§1žRÅ,  +é†bgìÜÛ NHS½qñŸü +UÒ a]K©yCœ„.ÆhrJÓ]½±­OSŵ—b\…¬0†AÆðäß4fÖ3 üØgar2Fu”5o›tˆœ¶‰¥IRÎgöúÓz_·;ËÞ¤943Üæx@®Gì—z`ßS·ù>eÛæ`ûTËS +rŽpå&gPú*—Ž'BÇ +‹ë Ø×éÀ\Ÿ.IËþdSA­ò)D¼Å<"¤!eå#¾¡Ú(€(±M¥¿"“S‰oõР ãÿÁ°£Ö¦’Þ}¢ÒxŒm n)x$ô”´¸Yo*SŽ©FTT »ÁKÀ)ò2 ò|¢$V sÂ)0H6;u¦‹„QøuD p”½@K9q²· ¯Ó-²ÇËÊO +½Ãm(÷T„tYrý1U.=¨Rùz(Üaó÷—Йã#Q³&jÒÆ|¤xð¼} ¯f$×òK˜)9t"ÿïx‘¦p€¹înT +%gˆ!^R›‰ˆ‰ßI-WêS·E¥¼€’²¸îù=¡éGÆ‘²Súœ´»~§ÜB\¡élAf`*´+¡ÏXCðyVÄÓBŠ¹ +…Sá*–ND #û +Íz®2Eœ5‚>?›~:°U"¸£ñH~Æe4ñ{…MQ=ݽV¢ahšæ*ò6 dE§i^VùV3ÊUTä†iKÞÙCã »¶­ÿ¼ûËÅE ˜Ó2RúÇ|$så;7 &>®Ùì4’ìгçTºÂy¬ÑrC’<ú•ï{ÓŒ!ÉTy—žÎÙÁàÜEç„Y‘DipáIŒGÊÌ‘É|d‚·\ôٱ㠮€øçÓ¯Á¨Õò|¨NçÁëŸí›] 7q`F;SêÉèeŸëápy÷£Ëcýs;ÔŸ<Fs=ò`éç›Ô ©G—%Æ?Q2Ù[Ì}®1ý;몣‰i:éœÝ ¬dYAŽ9æ+`+ äK„ ¿·RÑáÆ¿1‰¥*7RM2óìøûHPyÜ7k÷.)ìîÔ¦ŠÆ|²Q•þ KŠiº W«g‡›CÓOêðM<Ó¬1•$9!ƒ‹mÇSέ~9š7·,.qýr²™•³™aÅE,§‹ “…ºŸgr°Ÿ†+îò\ßðú¥ Pûç5º€MOó_ΦˆîWPõ“Oí©¼>+<¯Š ¾4ñoÃó#±gÓ¬!:ìÄIçø +\žŸà«ÐÒi)ŽÐÏþ±xnv$!wî¾£–d$P¹#•Ç\ç0‚;\ (ÕêpÀ\.éA ëiad}±0WQ, À-,úS^'v¦ Ãc‡08"¡†“Û¬.zr—&‰•Õ±1cYÊW¶¸ð>ã뮩ös%žç;Ë‹±Â>ƒôç‘ËëXb1¶Ébš­êC³î/l’>·ñ »X +òå‘0¶Û±äz·ÜØmÓ:À‡pJ¤“ o+DQgâ8Œf½ 39×µYÁãéñÙ×ñDØ)qsvUrúóC?4Ã+ªY[-Y•šîpœÃ¹ìºR>ëóJÍ3×~™…£t$LÞ?Úu³m "8dS[Üѹ¶Û¹^œÂF‰> endobj 498 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 499 0 obj <>stream +hÞÔVË®Û6Ýû+f)"5/)J¤´LÒ¤hÑAⶋ ]™¶ÕØ’!ɽ¸húAýËž)?nÓ ›¢( ˆ’IÎãœ3CjÚ.î¾y§i;,¬!§ +Ê +KFQï›Å‹Õâîµ&M«ÍB§¤ðà 'Ë‚œQR¥´:,¬H•á¿U½XJ¥”¡ÕÃâ}òý«×”Ë‚^Þ½|öŒÞôB²Hºm_M»¥oÛÑ÷›ªöâÃê;¸2ÁU!µ¡¥–Úæ´úz²¨s¶­‚Ù7½Ë\æÉFa6ðjµÈ³YX™[’©)Ë’dV(•…|l*瑨L³›yàÀ0˜iyžQ(§ÜKÂdVÌ)s\©žsNm̹FK+]òãq]ñ›NF¿/ÔðX$­6‰Ë~ˆ‹úz¥aDÖb©M©øCxw./eº°b}ªGúI¸B¦‰V†è¢k£}00Á£Ó4µn5Ëžöé²Ë>ÊeªtxÍIX—æñŸÿùÒÿ¯ñó'sgœÔÌœš¹3éÌ—s÷ï†ú|¿§·Í +uÐÚ(¸îzëß‹¥±²L~©ÁŸ~-çbŒåäÒ©œ,ZÇ¥«Ø§] ­³7åRóI{:ˆÕ/—¡S‰*=£¡f%›<–á»îà‰ûO½¯†ÁTW-Ý{ZûMÓúu@U稇ülÆ86ºÞӸήEoÑ +U$é9 c5úƒoÇ°}÷߶*•žc‰UK#|o›v ‡fÜ…Ý`T_ùN‹)Ñqç©YÃE³ií”srÎe¦Ãz4[;7[S‘`D·4•ö$3oÉb`½?ö`°ªh8úNkjCÂ'ÇáÞ÷—du’u×¹"ènx÷ûÆŽ8c5Eî¤Íç€/)UFXšú´¯úÀ@v GÀmñ*c&yÈÍH*MKÐn&¤¥½ˆã·ß¿¨s‹ÖipüQ +ÅâÜÈ·õ¾<ùªÞãÞih™•WFá6?I$¹ÒVT36]+)rÚHFŒƒfCêò§/FœGg*R‹o¹´\nã(`7OO÷U?Ðàvž‚HéØ Cs/[žì§jõQóˆÉåŸÉLgÁY½ëf#R'MÒ Êä+Æ  +É ”É£Xò÷,úŠö ®+\¿!xøüœã3+£ïô°kP0Ìjžt§©¿B:l5FʶžÜâ®.q]Ë5Öù…¹ëF:µ¸$»sw¸=) +0Rmµ +endstream endobj 500 0 obj <> endobj 501 0 obj <> endobj 502 0 obj <> endobj 503 0 obj <> endobj 504 0 obj <> endobj 505 0 obj <> endobj 506 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 507 0 obj <>stream +hÞÔX]“£Æ­Ê£~E?BlXº¡¡ñ›3ÞMmÊŽ7k9®Ôn‰Ñ`K deüüâߘsowÒhggS•J¥¦ +èîûyνWRl/þü›~‘§¢HŒÈL.ÒDêÅÝâOËÅ‹WRH±¼[H%üá&M—Fi'J,w‹§ÄI†wËÕ"Š“$IÅò´x|ýò•Ð±7/n>ûL¼9„ÒÄ&è6‡j·kÚxÝõá®ZÕá?—Y¼\. é‘欆435R«FÉZ”«2ã…“L%½t•;éU?ˆ0Êã"ø~¿®èIC½¶¢¡» Ú0ηì·è°ºw‹”½'R‡‘LË„þ‘%ž‹B—q¼9tvÅú¸ÄßÃÂÄ*¨Ý)½ѵî|ø‚-MD$c¥òB,¿b•³ìÒu¿ YBŽŒ2R‰´Z„9©+üýù·ÿùÒÿßÃÇ)viKŠ\âc—*;©mìþ»ª~¹ÝŠ·ÍZ ׆PÆ:èÅÛº¯a”æqüª/ëu|«B1®r€ø¾9BnZ•ì›*ÝÛºZ#h?„ÊÀÛÕØ-)?…®€oºuÝÏŒÏJ²KjËìÃÖ«ÔÐ÷™R9 ’â‘íÈrõ Û =Öïg™?®g”Þ¥•ÓíöÙ‹æ hzhóýÐl›áan,¢b”(‹/ÎJú+¡6}¿Wxyí-?J>f¯–Ÿ”ÒÓúsœ’NØIö꾯ׂ‚ÿªÙ"®–ysB9-ŸñASUbyìLÔGC«äÇL¥ <ÛN»˜%mˆtˆú–"JGS·aDdB'*&9~!n:ûp‘ت@bSv?ꔾ;ž…éÑxß—{˜!ÃS£Řhˆ¨ðü“;ö¹NÏ©Öñ%Ðñ¤rט1Aïª6çÁ1Œ¬Aµ°~åáÞÜÖàlÐqµßo›U5°!£0àz`ü+®9´Â•Ä²d¼¢©o•¹-PS†Ý€üZtòȳ2öéˆ:+¥H3â8”àw.fS ¿0w¤™ò90vòÒ9F|ÝÜ¢À¦hª‰b59âå¿P'ÛM-^…)Ô‚(s%q.¡.ØY× Jfæóñì„ÏF"Ã0œ´¢»¶nTGFˇà•Êò“˜sZÏ‚g2É=\:ž–ªJýIü5­gWJ'5•SÅ:YtË Af¹8‹H=ñ|2q_Õ}³iÅwýPïúPf˜t>‡ïAPìV±8Z:À‡òj¤²Z¬ôõ”¥œé8 +šmµÝ>Ø$¶¨åšŽòUØçÉ©î-65°ùÀEW ]·% ˆ4¹YTíÚç4ZùâQNOS¬«l'[Õ y‰¸§ Çd« ÄEÜï;ëE ŠTNÑd4×ùoè¹` 5B‹ò˜Üc4ü\܆J‚R0¥ŠjÛwÐ×Ã[¥¾õ8è:Vë^Ô\{iع|}`1 Á•Åô¢»s&л8¤9Á{D{Iá/µ˜ÒqÉ?gI æQ¬ª!®™CÈþ1zëÎÇý,ZRû³ìQ«ãÎÖ톚Ìé?„ß= Žkà×SCT‹µ÷>L¡/ÓêÝY¸O–9½]Šu[jÑÆð£Â^c´yºÃ‰”Ùuˆ‹õ¡KuQõbÛ qoÁäÚÁëÆØõg¦¾ž§cŸnµlZd£Íöu½¯[kwDÁè\•"ø¤OÁ‡öhî¨E[Sæ—Ø)‰¡3覈~ð®Àx”A|^Gɦ$w”RÛTK­æ–iþÚ õâŒnRŒ@—hœÿCÈpàɘb$J n#"®”¬DêÊ\ãF" ƒ\ëÒlÝÙ>ËÄJékÒ=l‚û K˜R½~öC³³rÉb=Ë©ý+ù§ ï‹%¸"¹÷Ç!~¢÷+Œ?Zpm<È[¬Eç§ó¡àzO"1öXw\”ÿ‹ÃÒiiëC“íV$‡²Õ†ßð b(eÄp +sú.v$\DŽbÑ +œ¹uă«VT$ÑüÝrkÏ{…†~r4%ÒíÑ-?ÑmEM3mµãiü‘n¶¤Ÿ¬ñÏ«|³ ‘#L×°_hþ>èm2Q—Ïõ?Ÿ6Ö ~ÏûÐ+D‚û@·W&ú +Ü•ƒ;‹¢©Þ)*B÷¶¶7à±ÙfO’‰u7W4ÊAÚàCOì¡‘Bs•ÍÈk– ·õ}E24Ú]àMS9ˆ…ení™{…²ÊÓ¡¾Êh9a¬ ¸i›¡©¶Í¯Üý£1å°‚6Ú…:ÉYí³áÚÖw‡×ØÿíèYäòKns¿åb(výã±XGnEí|õoØ;5^ +endstream endobj 508 0 obj <> endobj 509 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 510 0 obj <>stream +hÞÔYÛrÛÈ­Ê#¿bµ"Œ™ÁÕo^ÙN)•õªdz+);9”°.Faþ(¹ÝÓ3¸Rì‡$•R•’ÀL_NŸ>=ìaõê{hW±bI²0™ +X£WûÕ›Õ«÷‚ ¶Ù¯„düÁ‹H?KY¢?lsX°Š„ðÙf»ZûA(¶yZ}æ~÷žE~Ê®_]ÿð»m<‘ú)¯šüp(ªvSuºÙç[íýmó'ØJÑV‰/eÄÖÂqÄ6oiÉp]5õî´íŠºò6¿®ÞmVQ˜õ±ÅÌ—*Ë2æ‡)>düˆ¥ŸÄî{pЗáä{ðÝWæKð¯÷>3>g ¾ Sç*š#…óUÆÖ׼혷Žý„:îr¼¼Ó;º`¾¦¼òü˜ÛÛ~²75ÛG{“¤×@DÞZ¨,À72€ë$‰2?ä·MMw óì/I}ɵ]¥µ[Ô•]"oâ`(¥ŒË0œ'ê_Ld™·Nal-A—ób4—¹×oùŸßúÿ»xÿs§_`æ—;%]îDD¹ûÏšú¦,Ù]ñ…ªä'üˆ·ìN·ºñÖ*ö3þwO*øPï|c1£-§DšrŠ2\= $’&,Nâ €K}Q ò­Õ]DѲ¼Ú±¢*º"/‹z"Àk°j¦{Ôì˜7`ÛæeyŸo"ñU4„ ¾5{¤´òW\Jø™uÅAÓµÏ6¸^SÑ¿PúŠw…nY]m5Ûé}Qi4„YŠˆ°Ö´ÛÀXÄS·w?ß¾»Ûüõí»÷7n67?øˆtÕóœ¾ÊÆFFÎH“ZÎZm8®eO¤á^³¼lëÞ \KH? G+H·BFn‚©Öžî[ýÛIWÛ¥†|ä»Ö!Ð…ï|IȨÌÏbb=¼€4Æ*£õüû‡©“œÒÍCÈáJ¢UhÌGݶàÎú>oÁüC½Ól ñ.ZsMi“â!$"³B̉ó!˜ñ-$Ä< %µ÷æúرzßC[Œ¹ ú•œÉ¦ÌŒa>4$xì1O­•ð¡ôf}È>b,ȤüÊìW7;@ lŽ ,È—ÀãìÆ67®c€uÎJpg_<œ/ÚÍ1çñ€Ã-šw¼¹½a`XÛ5Ø 2 €È·Ýk›>ۦי…Eé¶CÞrš¸úT_} xë…j"÷àŸ)°¢‚š€’°uh }Í®aÓ‚×3Z™v.õ¾¹òµø¿xSS TÙó±Âô·`LÚ.Ù¼€¦[^ìù™ÛjR1–rXWC”sb·”w,Ð +ÑÐ7Ò°\½UÚ“à;êSk±eò¹-ëV[ÞÉ€w&À;á`OŸeÆër7Y }AÔ‡wÛ»wÃNW¬Ø3௠+Ù8î !C?ËиŸC#…hð2î!{sÃÀD½ÀBá#`¼>9™[Ë®8ûlsrtؤ@ä„þ>sbs‘A¾2lº¡N`âájL.æß•TTÄóƒ6ÏÚvb*cG´Pß[xzªˆ{‘%¡/̪ŒjgJ¾}¹Àú8 +ÃjümÞå£ lø¶6øÎzV\L,ïÔr DU( ª é„î (*]ÚWf©=CeŽ[K÷hlRW/ÕÔáKEe,æf¹µŠ|õLˆûÏ@j 7ìî9x£Á Åùu©ó +£a{)™¥6kµÀ G ›E¦§üð‚ápßæ"40tdÑB÷±)åÌ‚}áõ/òò‹çSeâi4cQBP­`ÇŽ›?˜vߣB¿@­ŽŸvÆž¤Ú¡‰šE ’Å^A½DMtOMû¨õ&ŽN ÉŒ¯Åñ¨wÔL-Dt—ôÞ'Žo]žÑl|Θ@õ3ynVxXEÆM|¬ÜaQÝqŸ½µS•ÈåÈÓÿèä^’.¢úûÛÝÄ>%˜R‹ÈÞ ›er F²h}«­(KYñT¿„V¿8É«P[tÞZ¢Äø·Â(<’¸ø~õ;á €‹\œþá*vâ©Ñ‡Å-T !X«Íhm/ºä8nPYçmI™ú lÕ±²zÜ-&Ñ´ÀêÕ\:× øtäžbh„è4xÁšð¦ÄmçÕú -”RI˜*x˜CôŸ5XçÚÃKÊr¤'º"Á:Á¿¦E¦¸ +JlÞ\ ˨ö] ^Uu¬óÛ©h4;c—Žy}¢µ¡’Òx©³»úeXËMlÔã['zaà<³SE­ßÅŽÖžÆNØõm“7oð÷ÛÉ éRí +áÀØCÌÍ)œÑ,˜7”…"dÖSª—B§²CÁ˳7¢…Ÿ\ÒYò_¢‘`F\U)œgò ËÔ¬ó§v”k@Ž±Š¹-Áº .óvÐY½¿xK›æ7QD#åæÛH•ÇX‚ÓÑÛø$„ƒÞcŽð¸¦%*¢ºf¬WÓ·âUªÕìXnýŽÐïm^±_Om× =|Ù¸16[ÈKæÈDzØÒ QDJÐ\(ãK°W«õ%a&“ ¥\k¦v êj¬&ÜɈ‹×gkèÚ0ú¢¯z2µÇ,OžÀ±°6c!¹ jh,ÄÂi ÎŽ ¹ßÇœÞã‘R‹{zWÀìlFL(|€}¨­·êVò .H+°ÑÝx€²6 aÔ!rü ÓKýÒ  gÌ¢.çĪ+Ì}Šñ8¡*GgN !|œèÎ[<0«ÀZnß=.;~•ò[Çåà&åxtìh´Ï¦Z]NÞg""´+{뇺ӯÙd9@ž×Ùg~}j]uåÙË°‚®>ìéN°¨]…I5÷®¸ÈX´)Ì{ÍN-i•¼´ÚuRßS¼ó’á„=*È9¢ÑÖŽ¶"6lÌ…¸«ÏPZœ?æÔï5°L¾C’€)Üœ)΄”`º” Yç³ Å ²;ì©°Ãi +µj˼ƒÁ-ÈK<ß;“®f‘bIa@¯³&" AÔ&•ÑK•…c悃ªÈiŽA[ÎÆfãr€?°€üö?$ÇÃl0"¶ã×HMÑG~êL–Ÿ9wÄŤùMÊ-å9Ò1½4äƒÇhðf–?Ùå (~#~9ð¥Q´”1 Ë]=f6ÎÄ™c³vÅuy´-E!s†BNt—˜>Å÷gÈJÞÁ½N…&}g‘³Žÿ$ ’äšÅÞ‹Œ1/JÍÞÜz!\ÜÐw…yÓzx¢ãˆ03ãüeSu _[pªŽFFˆh©;HzlNÐÝ *ö…tñÞ®cOçѬse8ž°‹)ÖñàÀ,ÂÔ¯®´=H-Ë3Øç~8 ì»YÑzù±Œž9Õ“2s + …FˆÐ6Kì›ú`L6óãr‰ µ*\×KF4cˆ®bODÜüeÚy Cʋ깨ˆá’2·rÖy5¦ù®¦HeKÎé""¸XðÓ¨ÖßmV¿ 0,ì©g +endstream endobj 511 0 obj <> endobj 512 0 obj <>/Border[0 0 0]/Rect[373.98 503.28 448.44 516.78]/Subtype/Link/Type/Annot>> endobj 513 0 obj <>/Border[0 0 0]/Rect[322.38 477.24 498.96 490.74]/Subtype/Link/Type/Annot>> endobj 514 0 obj <>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/XObject<>>> endobj 515 0 obj <>stream +hÞÔYÛ’ÛÆ}çWÌ#‹#Ì T*²¬MäJdIf¢‡8Xä"&€ÍÖú7âŸð_æô\@ð¶VÅ+¥Rv‘àöLO_NŸîÛÌžÿñ{Á6ý,SÌ$9K󌩄uÕl=ûz1{~%˜`‹õLH–à?|‰Üð"gF%<‘l±›%Г[,gsž$‰b‹ûÙߣ?¿ºbšçìåó—_}ÅÞv±Èyµ›®ÜíêfÃ^7CÕ­Ëeÿcñ-ŽRî(Ã¥Ôl.¸È4[|ãT¦¤¯©/¶[ö¾Þ¡(Êhˆ×QÏÞW}ÕÅs•ñ"úW,þX­¸µµèËÉH[N#ÔÓžC ÏL6á Gë=η¯«ey×Wl¸©qɺÞVlÙînKœ.$,ª{Â;,R^h½T¢ƒ²Ü)»‹ç) b‰Ïz[ì¾uztôcÏêfÙU»ªJ·p»}`?D÷aEíNQDûC‚ÅpÉ2­µw+¡p`í-â„íyTÆøªþ‡ø™uÇj›Ëœ‹â<ÕùRÚ×?Åp/C­SNÚµ „=`Y6ì¶k—Ußû0žM£0UPvËš–më]=”Ä =é."ÎþÔÆ"ÁÓ} %S‰ËojᣋSPô !,"¶E|LLz&ðÒ#tSy{ÉØ›2– ÂiÕjR«#†(­ciðØÒo„ÜþØÙT•Ír —檰Ñ2‡ÁÂS@ÓUý@I3 °€Í¢åèf7_7lS5È‹ÁÏrKé¨û;“Nƒ—ºC±Ý 95áe°»RnŽA[¤‡]Õ¬ªk ih™u;'ÒNÞÅ03Öx¤8„V„tN³™)áñ† /Þ¾þ=v–¬Š…F3p ¶úØ<# Õh»¶ÆÚµ@–”Œš, ‘ Kw‘Û±)³UÕ×›†­·-”RyÈ}Ÿ#Eîè ':Ð… .°Ôf‹^Â$³Gø¨ø¯CdÉ8'ЉÎÆýd5MãL[xéªrUu®jÊ®'2qqF‰Š‰ofTà};°Ä¢™à¤àÑ“GĨò¿_±UËú6V@+Rñ‹‚$wlÈ)ð>0,lëæÇ=<¿ÒÎ)¨A˜ìgžm}½­Ö¼< ´7ZŒ6{¬–ÍêH÷\å\éÇF+wÌOø::ÊX¢ +@”>,pâš ¬"Ks†hÎD®ú”…µ‰\¨ *ÏÑiBØ&EœºÌ¿`dE!…EÆä—j ›¦tK-ŠÊë!žã“j¶Üö-@ðñ®î*à:1“p +£rhXÛ^†Ö"g4ÈÖƒ .:‚Œ·ÊÖýe¬ çÖ?°¬8wÕè›OgßÞuKìª"OÖ]UdëÁ²u.ÀhŸF´*Ū«7û7Æ÷X—ÀªÐ¥@—uiÒõ!êGÜDkfßì€^™T+žá Ç›àÕ¿c N5ÄÊÞTçx¶è«€) OYÆEj/­Êñqâe2ƒ-ÿVÉÉG™ÝÈAìEî׌rÍ$î§[Ñ1Gµö5•˜îtV¡‰¤XRØÞª©Y»O»ä]p]aA–…uó£…Öûÿ::g^²–Ýþ@I5¶ÜÍž¿ÞIöM ‹Þ=I:$n1—ÒádgC*¡qÒãdÐÎK‰e>‘çÒ!‰‘“ÐÔ5FÛÓá×¹è¸eóqÝoÍFHFâ>4ÊåB=e.¦µK¹ Ù¥ˆŽ²уpZ¥ç“ÿ•ºZ~R]ÈÄ|ÙºðNë"}Ê\dæb*¬èl@…J:&v]Ê_M4â“ŠÁ-û2µp`’ ¿~Êð{6ÇFzáyÚ%4SÔ©ä>”ã`ïÙžöB~ +kßH¼ü|—ñŸÛ¤WHm¸y¬U¸eŠnŽr’§)‰ƒ„PŸ˜å’=}Ÿ8Ÿ'»˜ß+Æ„\hç2Ú„<Ò-~-!~ÙJÈQ.!æÉ ê|>¬èb:ÿ¶î‰9“)éHÄÑ ƒ7ö&©¸ÆO*é2ð=ý-£Q—;G¯ììO¯îÑ0)cÓ·ŽÑÕ·ƒnÔÜÍ!u²N–ãâM¯Ú7NRWþu÷SÆyä8ÙåJvÃEjõƒÈyøL„çñ#´z @$þŒšœî T|^ “ÒY„!•Ÿ`èƒOػٜ4/> +endstream endobj 516 0 obj <>stream +hÞb``ø £`Œ@`Ûëü +endstream endobj 517 0 obj <>stream +hÞì–Û +ƒ0Dûÿ]¨ÚD÷’QÕ}QÇÌÎ^Ð쉻 Ñ¿ÀH´Â¯OÕÁëj¥]Ì/Q-Í•Eói5×xº¤Y#e [o=¿g +yÛ Ïðg‡ð„/ùNcg>§ë'„ ù…§¿Éaˆ$fÚŽˆ'!ô‡Ë—ï&:žÙ*ÿ9æ¿;Q|¸¾õÊ«‚/—ò‹¡§ñI#ÏÊßàÕþéVe6F1ÑÛÒ:—ƒþ=•üUÿ'×Ï&——A7Û +endstream endobj 518 0 obj <>stream +hÞì–Q„ D›¹ÿ¡MAmÝí05±?D:¯Ð*ÀgŸ=ËŒväd†[yÓòOã±2_Âx¤eð@Láãywr?êY|0Oã{‚ÇwH>’ïÁa‘i÷G¿ÿjÿ‘ûŸÞ¿ÕÿG6€A `д-À•ë‹ù‹õÏÿÞ÷Ë{Þbÿ{©-Y–LפÛdûBX¢©ž¢¬“nÈòÎGñó^I¾-í7¾=¯_­‘›¬®îÚ9ñ ÿ?ÆÅÀû0 0ù¸Å +endstream endobj 519 0 obj <>stream +hÞì–ÁÄ D_üÿÞnbºYKE.Ρ—f€míà \éJîOŸ …úUíü²€±þI! +@§ðÉóQø—y·§ü ú·ð¥þé-‰íÏòüÙùÝ|‰3ýˆ|'ô"ßý›k€÷4$æØ^.YÿÝ“\î¼ýçi‘g ÌêpþX¿åû5h¯üL|RgŽÁŃ¥;x©Âc¢cüøÖÛƒî=*?ñý¸ƒ¯¼¿håïσ4> ÍÉ +endstream endobj 520 0 obj <>stream +hÞì–Ñ EOîÿ´ÌŽhÝy@ãšl$¥§-…’¯8?Û,xa\â)Ï3l\sDzvOÊC†›zsÕ‡á7*+úüëþÓý¯ï}ÿMƒâð>stream +hÞì–É! CŸòÿÝEtञU‡90rˆˆØØø;p†Iwpÿ,âs€‹ËÇJýÿÉbÀOlñ²†ËŸ#ø†þViá×ø‹ýKÉðìIŒÏÅ ¹2÷‰~„Âá·äÆùÇ4”ÿóÞÁªßSäOü'ßÿ²å(‹C‰ŠC®´ºöó×v~jZ´Ÿò_O1•Œ½vŒ®ä,—ß/oÓZ¿»e_ýxYÜŽ'Œí1°ùÅ숵OÐ+N r[Ñ +endstream endobj 522 0 obj <>stream +hÞì–ဠ„ïÿÐý‘%z5èV‹-Ûì>TRõ·ße’þÔUñGB!Sç±´‡Ú Ä)¨kùYžä'}–r~ ò¼G.ðŽYÁ÷Pêü +;¿dý!ëYÉÿ‡(Å‹R¼(Å‹R¼¨.õOÇOçŸ^ÿÜ_>pÿ`ëßÛÌâ³Ök[ì{'Ã@ÿj—`~ÖÄyëìý·¹x?ÿ±:ïS¶§Êf!‡ù#ίßòt{߸ó7ÓÍ +endstream endobj 523 0 obj <>stream +hÞì–у Eoîÿô2  [(§.>ШĖ{ÐZû©&­Å~ô©.Çò#½›!½ŽÆåzu¶ÐHÿñ¶à¹ë©™Ñ÷‡Uè± þ:¾ô-ÿ5Gí¦§¬Ÿ5«-Û”ÊXD?í è™d@f™d@f€;LJïó¿?¬?XÿpþÁùYòÖ¿µß¼ S¿@f€d} 3€Ìùú@lúݳØû¿í_¶m›µ—Á¼Ï +endstream endobj 524 0 obj <>stream +hÞì”[ƒ@ G¹ÿ¡+U¥ÚÍ‘ªõ7“M쳩ÿM<‹šø¥qÄÉUÿε¿ÜÍÖ?JØ¿H­ƒ=_3ô+jŒp§É HXýnáBêñÕÄ{ÃÏq; +ÛÅI Ác +ÿ"ÊÃ}*ñ.Žýã¯ã›#>…'sAC>áûk}I]ËÁülÿÌ>¹ÿWðëéôOÉGå·‡Ðq‹Üûkâe‰ÏËó‹!È<'`SS·ë!ÀÒ +× +endstream endobj 525 0 obj <> endobj 526 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 527 0 obj <>stream +hÞÔTMoÔ0½çWÌ1Q׉ q€²EE€ª6pA¢¬7 Ê&•7¥¿‰ÉŒ¤Û=„Pvìñ›™7óF@¿½Ð"­Àð²Bƒâàl´‹^WÑù¥Õ.8~¸ˆÂ°²£8ãª}Ä…ñ Ϫ&Jç\Aõ}‰ßo.!g\œ_œÁµKDÁŠxl]½ßwC WÃdÝ®nlòµz‡®Tpe˜”9¤‚ Cõ&@fÎ 7ÆgnÜ>4S7Iõ-ÚTQž•½f¹&UY–À²‚ù<´dF/÷˜ “Ù³{ÌŸÒWþó[³/}Î%àeV,©R8R,¹J=çZ&HRÍLüé~[ÓNē݆ t´ñ0Ïff#×ÜÍF2¬\äI*TÉéGâ¡0&/Y_»1XPòð91“±Q³‹q˜ñ‘yÏ+'*¥Ôfá2ËN õDY&i>ÊTr¶9$šÂ…eýó埛þ¿àë/ÕN&¨r|©’KíDj÷wC}Õ÷pӵء¨ÊxJËãÜ؃uIª4+ãï‰Txh·ÌGŒbœåd¤—“Æ‘ñ‹i‚†Zèg“DQ[.bÿ8NöÌ×ù já•Ú!Õ…~ljÐv_N2 ;Àäït(ãÇDH¯TGìßB±c¶¹—9mŠ€ÝÛÝ͈¹K‰¢¬ƒqçQ=<ôS7ÎL~óT4á“jáÐMF‡X{Ê-gFÙ? 4Ø߃&¨w8/½7z“*ÅD˜“«´y1,ç€÷s®08hæÖÃÜ8vj·„«‹Ópiã[,¶Pßß÷V®&b1T# ÕÐ,Ëò¥8†×Ê ãô¬lØ:ÙiŽóÆ÷ñt\·™UºÄYÔµK¤Bž0‹®ºõAs×õ[hlß3Ï‘,È+Ò[æKìäÊYAÞ u{G$Kx ·8óÒàö +z_ Š…¬4Z]Þ>ÍWãáO±Zm~‹ek³¨ç§H²¦Ï +endstream endobj 528 0 obj <> endobj 529 0 obj <> endobj 530 0 obj <> endobj 531 0 obj <> endobj 532 0 obj <> endobj 533 0 obj <> endobj 534 0 obj <> endobj 535 0 obj <> endobj 536 0 obj <> endobj 537 0 obj <> endobj 538 0 obj <> endobj 539 0 obj <> endobj 540 0 obj <> endobj 541 0 obj <> endobj 542 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 543 0 obj <>stream +hÞÔXÛnÛFú¨¯ØGnmöÂ]î>¦Š¤H×VRqh‰–ÙÐ’JR¹ôúÒoìÌry‘dKVÓ¢( ˆ4w93g.gv(ÈbôüÕ• ‹jdI¸%±5DqRf£ÛÑwÓÑósA™ÞŽ„$þà"lÂœ%‰âŒK2½qÂx Ϧ³Ñ˜qΙ~½ÞœÍ,™<Ÿ<{F.J*,³ÑjQ¦÷÷ùrA^/물Mgýeúýèl:CÐe¼ÂÌPÎ[áìŠm«uJÑj—&hO«šÐ±aIôv=OñNDu6onHŽW-)3QØöCØTÎîÂ&Ù\¹Ðt,”ãøTpŸ$Ú±8º(WÍŽùfV“w4±LFYR«e¾ðH9 &¥IÈô¥79Žw]÷Îѱn,¹hn5¡Í%íõé—ÿ|ëÿWx÷/ÆN%L`äx;%ÛØ ÝÄîß5õEQË|š@®ÕT0Uä2«²’Ž•a.úH¥‚‡ÙœíÔU"}](â½ú†šÃÊ‚‹– ÛÞÖG„ÁE’NE‰¿Ìœ Ps¤Ï*ReT5dŒÉMáÒQŠ·)ƒSI½"ù2¯ó´È§ÂonJw,“±FòžzÑëSƒ?ƒr Y•AçWY¦ÜÀè8„RÁÛ¼(V7iA¼Iíð¨_¡n¨äð¸@»îÀÞÇ„Ò\Ûˆkä¦eF6U6'7T(ò/TÃ/é¤ZÁº ½´àÀàxatg²mM¶hLœ[ª$¼+†×‹œò?aK.X­ë|µ¬v^(½¸9%˜ð·y‘5XHè$ôj,©&-áÆwlѺœüý@Ød°¿ó>xò¶| á <„»‡™&š˜0㫱¥·A®Cða½éÝ“´îIBªC¯^§‹ ÓÜAÇ–ñ1HÚ†ž©Ûßvû¦«¬ªÀáhŽ pÔÒL@f$S»‚¿dèÓQ5›{ÍҤȀ0z0JÁY0>ŒEy,qr÷d´DFRC"äiY×íï ðx^eõ[è²/Ó: ¢‚ì³æpö%Êg_'%›š2ûÐ=ŽBSÖž”}ýþдf ¡] oAß‹òeývIáVDŠ¿@C“´(nÒ2™ˆ>Tí¡ÂËK0?±åÄæqô›Ÿhwê}Osûðc8CAÑ™cp€nOÊÌnÿNpà5YÝßgËzr7d³$¦,älÎáúŽøã¤r ŸtIÈá§"¾Ñsÿûäe¶È+‡±ú8$ÌfPx3h«ð¤Ã¹Z$ЖǪ̃°¾§ù€Ÿà‘ñ$øƒ7vZ ¿ºËoëIZe}€%€ë‰U;çìãĺ'ýh=&ÇjœNB8x£'¸á~ç±Ã ¶À4²è(q}WøAÎ<ŠMžP™asÏ2]ʾ£p˜2QVâ¡å58ž¦Å&æ©4˜§L3‡ŠTàúPÓ×ÇëS3tðFvŽÎ>§÷k8¿Çf¦n˜çÑÀ)Ï<{R"³YûáÍ6-¢‚³Þv7¨(ð@Ž‹‹×ý€ù0Xl‹DËøaP8ÇqË…‰µ\ô‰âÕT¶Zûi ¨ª™AàØ3c?/u<ÓNh_º^ù,ÅɽÒõ£œÅÊFÍ·Ávj´æ¡I ?º ÀÜA¤?»¥³ ÆM€ƒdëÉsIðèX*–$8:ÙÚ*zg +¶í6˜õÔvü¼ë½ß›—tøšÓnx©Úñ¯£kº%ܺ%¾›¾EËÍ FÀà̇ã%ù™ +…õ¶Ú{?šopú¬j2KÈ)íF‡a»Àé4 €ÃpæÍÿŒÛI§»æqYÕ{äL)?I;¡ð¡<ìÃÝAºsâ¬ïx&úU…M1|{@€>kºÕÏ¥øéÁçJ”ÝM¾pƒ:JP°‚LÁD[7cºŒ6³º"_PmÆ[xTn¥($w…_lÔ}MûK€†»'p +endstream endobj 544 0 obj <> endobj 545 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[276.06 555.24 533.52 568.74]/Subtype/Link/Type/Annot>> endobj 546 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 547 0 obj <>stream +hÞÔX]Û6}÷¯à#…Ž’’H ‹}˜¦I‘¢‚Žw‹¢Ù-ÏhcK®$w&ù»bÿåžËYödfûR‹#Ù–.yï=çÜÃ(v·xõíbwäÌÊ‚e…a©d}½Ø.¾^-^½UL±Õv¡4“ø‡‹*¬( fS)¤f«ýB"Š¾[­K!¥LÙêañ ÿþÍ[–‹‚½~õú«¯Øû>Q…(xw×Wû}ÓÞ±wíX÷Ûj]'ÿX}‡¥R¿”(LΖJ(\Vßøˆ–bãF[ +í"ÿXW›ºg7õx<°ªÝ°×];öÝŽýØǦ­‡dõÏÅ›Õ"ÏJdfDn˜ÐiY–Ld…”™ÏÑhaMüÉ ýŽÚPiR÷#rŸ*Sºz” ?fE,íU«XmBªadÉÒËÿvØTt§øXoü kèZð6†‡Ç~õëûðöW©òd©ÒRÒáÞÚ¼ßwþ‰Íq=²¿'¶š×!Ê–èÚ]q5—Tg­…βË&þ‡©²L–Ö(—Z*›³ÄÐvY¼þþËŸþèÿoðé#õ.µBQçdì]ªcïTî{÷Çnõz®5w@¨ÖÆD‰œ åP÷É25¢ä¿%:Å—õF¸ƒŒNV;:ÈÉ Jc¥…Œ53¡qéQžÒ A*ˆå“t(‘–ù©"Ò„Šä6óy]aÓU›¨ þĪͦ›®­vl˜td qûU™0¥ö 'e郲`Ó¿›¾Þ°±c‡Þ?,E™Î–Χ¥C3êCÕ×l›¤%éüé§ÚŽ÷5#MÛ6»:A¤œ‹ ‰¡(Kmµt-Õ$‹³Bd/âB?]hQÿRî_J…1á%tWo{’ÙüCr>eyzÒE–s¡HTša¬ +–ÏdªBžK¥°6[j¡¢Ù ?׫«õ=ue{Eã.¡aèÖ ¶¸a›j¬¨j•ë9²*ÒËÚ ÐN¶ g¦†c]|Èø>ÑøT—e¢ +œ=êÁRg¢Ð~š»ÆÒq>æ#âíšuED 5˜UÓ 5XW­û.²²˜§F¢aïϳ:r8ÆÑr¨˜iÈQÝe¦)32#ÌèTé³2âZ²?£b8šJ‡ôg@ð6I–ÃØf5Ý>&’WûÃ{é¶ìúý»‰aÇ¡º‰ ¿BžõVØüIyˆù‘O‡CÝnšGjj.R~ ‚ârÅþ53U>8i/ë3sTÕŸ#a-ÀŸ½yô%ÔkP[Ië¿£økRrÃò/h¦qÉàÉŒœÌÖÙ(ü(ÈaåÊÐ8ƒ¹wWÎ +RQæ®ï$ƒÓ,q6í$V%BPç¤Ù¢ôË Ùí:š–?ãf= +©(7i6“D4&Ž ÿŠš…¡˜óªÙU·‰V|—À¦E5CºO$…pw”F– ãç1'ÔïÚf|!yxo?Eé­É)¤êôrSíšÏ”3GØB ó†:¢ÈŸ‚N´wüP¹Ÿ©õä*›„ºìÒÁ•pê ‚ogè™\±2‘]lJr Ï âg?» Å ÍQâ¤éŽlŸ¨”Áì#¤s¼§9èq[££©§‘eRÎiàÁÏŠ2ŸÉÓ `ç𬮙°QwÏj©‚þì]¥N4ŽNºhgh,ÖãI⨞I\BÕ`­ìKüÝÛ5‰ÛàósˆEz] m!òùÐSЋ@ÚíˆSŸÄ¬ñXÐI\â&‰¾ö©)ݼZè‹s™¯Õͧv¬]¥V+í_Â+ÆŸ“è†ÎQoj µÛ!adp†{;·ñ¿XJ° ;ÃóÄ‚›zP¡çÉ ­;ÂF1ˆÆ@ÅÛMð-˜n#˜ËP Åðçp4ø%¼ ìºî\¥«ìvß ";›UzZ)´ã"Þ• Û§S&Î¥-ë âg™và ])8ñŽ}GÏÞ%Â*&´Ï†”¾<ññGÓ±1ÁŸg(„¹W\ªÞs´)fg×0üg„º[_BØïƹH5)ÍKð +èøÀý)ŠšáNÁ’Žñß„çá\ñBfeê (çˆRy6G”ñ+_÷€èÛqïÿ¾3išû6g¥{‡“e~ÀDœ§6tbö×]·«+ âÝ–ÜpÛµËÏÞ~úÿ_A§ÊK)USË“LÁê~'Ñ×|ïm14Æ°åL\‚¶Ä &‰ós4Ù‚Ã/ÐÛçÁ§”ˆ°¼­˜Ö}·©ÿÂ:l¢h°¬àW4! —'§opNü’Ó—ÑéGÑd >ÍiØᄇòÐiöäYC¸‹^Ô{bncën@Æ·Í®?9‡­„µù,vÌÔ%ç%ãŠ=$䶼÷Èx´Ö“%l¬'Hô辨ÖãîÓä=OÓ,,9M³ FNÚ:‡•9éÌ4¡S·Cîf”§(ÌÛû§×Æ +endstream endobj 548 0 obj <> endobj 549 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 550 0 obj <>stream +hÞÔXÛnÜ6}߯à£ÔD /%=¶Ž¸H #Þ(â>(׫z-m%nRÿ²3$¥•´^À@PE€ˆ+‘s93sfhNîVoÞßprׯ”$)ËHœ)"éôj³úi½zóŽNÖ›„Á?xð,¥yFRÉ(dý°b …²Þ­ËUDc’¬WŸƒ—ïHB3rñæâÕ+rÝ…<£YÐÞuÅÃCÝÜ‘«ÆènS”:ücý3¨’NÍTB"N9<ÖoÄeÃB¤(ÚJþ¨‹JwäF›ÃžME.ÚÆtíŽ|l¦nt®ÿ\]®WJÐToŠ&ŠP!ó<'4΋—Öqû|§"ž}hpƒ´Áõ˜Ü‘øg +hªà ByŠÞ0R4 >í«W<0ºr Rã3 šªÀoûÅoêÊ­ß$Ü“ñ$Œ¸Ìþ¸NÓ$§qpݵnGu( ù-L3*í¥ô^EÛxù 9C˜…Pé€s/cø7áyFèÈ#Á¸[&$Th.ž/üç[ÿ¿ÂÇŸ;™RŽ‘cCì¤bÇ»×ÔwPjõdh +¹fBN“ ‡ªìuFRÑ<ø + /uE­ÅP‹¾œRaËI›œDv±\cW°]¥1MLØõ”Y&ØéMw±ÓE‡Õ>RÈ‘­ðxœ=áù!±-L©ã’ÏÁG ç{Ý“<ÚP.ÀM𻯡`ªÂ–]Ê] ï¬#<§ Kò€²Ùêå1Jê}_¢LÓÏp‰7/¦-`B´ô™€UÂ}ÊîÛÇÈ ^“Çm]nÉSµœírߘРCÙ¨Ó§æÍ™e4Ÿ”u2 EÉï!—Hš ¨HPYÛ‘r[4wHN9;a>ŽC˜<@£¥‚'w.’œ*µ(%žxïí;+F€"ò É£[Õ ³µy0w¦9‰Ì¢,_àûžùA²Ì\$g~^ÑûlÎjX VSY ‹Y°Ûõ!P­€\Ú䇑{“€oO“]_Ü¢(1Dp?IdœËìÇþT$øµd¯dœœåN‚gÑ8•<ÇY̦IâͶî*Rtw‡Ý:§/wüûØKæ┽\½{9°É |xmŠñ™LðÙÀfb”Ý]wPyŸ m!ŃÀŠÌ «  è/ó4¸ïçw€ÕI‘L©î8£æ.à×Èt)Œ¥ Çuñò([a<ýÀ—§™8énѤ½™-Z-¬5¶X}s; u²-ÜÏ)¡’²uÂ=å5,I_ÏMokaRïIÝØÄBÝÔÐClmS2G;‚9*K¿7øB)þØp†ðmëŠì0üc¨cxàuyßßï®>\þà­Z¯c_¿@=iœNy3·ª„)÷}láç3n"cGŒÆ$²9„—½ó½®(Xÿ|ž"c@ƒ›½.ëM­ûÖ8—açrsX!åù¤®Ü@gâ´Âk³Å£9åü$æƒËHMKt×µ]On]rÕ–™4"‹iFY>2ƒðYxšÈý„™bÇLq0ôF¹ì‚£®eÛTµÁ¹¶l+ ÚïÊÂÀüw(K¸\ °COñ¤¶£8GÂèç+ ìr §ø$¬bOÿÎìŒæ8¨$(àÇfƒv³è éQ—àl|:äÔ‚"¡òç9òe**ÏÏv˜„·»}AööÌðú¦ø +±ö('_ñÈøX V¢­ób?”“Ìwû'R'v@èzCJ0d[tC)šà&DþŒ&Ô³Ó¿â£xÐ'ý¹ç5ú9 4Ú¾°Ô™ÑX¤é‰Nûè UÐXO©Â¥\ +ÿ`%nYJ +endstream endobj 551 0 obj <> endobj 552 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[352.86 518.28 490.14 531.78]/Subtype/Link/Type/Annot>> endobj 553 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 554 0 obj <>stream +hÞÔWÛŽÛF}×W°/MxÕf7ïÎIJ»1 [^$Èä#µ4ÌH¤–¤2™ïÈþÄþåžê EiœÛC /"««Î©:}¨h·xùÅE»a‘'TÄ%¥eNIL½YlŸ­/ß(R´Ú.”¦8¨²UIEËXÓê°ˆEÆ)î­Ö‹¥Œã8¡Õãâ[ñ¯×o(“%ݼ¼yñ‚Þõ‘*e)º]_M»£/ÛÑôÛzm¢ïVÿÀR‰[J–yFK%«Ï]Ä‚cãDÚF~oêééƒOGªÛ ÝtíØw{zßƦ5C´ú~ñzµÈÒ +•å2ËIꤪ*’iÇ©«1ײÈÃï(^êôâw`ÃÐ$öGÔ>!SY<*Âi`à\µ +8èÜãP#EË\âãqSó™£Ù¸jøXŠ6’¹ð}åê×÷þ!펱ʢ¥Jª˜/tŽó¢È*™Šw}çžØœÖ#ý;*J©…ñQ¿D×úø`Åb3ÎZçE:M¯Iü©ªŠ–%Ö¨–:Vî4£(çt)ûáOô¯|ºdî’B*f.Ü%:p§2ÇÝ›ê«=f­Ù¡C ôÚ)™‰c9˜>Z&¹¬Ä‘NpÓl¤ÍÃèÇ©ÐvœrÈÉ/( Ì‹|¦2¶/s®2v¾‚¦$hÇÝé`Úqð:’»@hn-“ÄŠˆŒ3~Ml›½a]˜ÄFá‘üŒa0ÌXÎx‰G³n¶¨¦c×°dÑØAp¨Þ÷ 'džJ¥ž…ÉB˜ÒSÑMKvu•I«û!÷û.R1n<4Þ:Ö=às!—6æYc3Í|jHã1*" ®´xˆbAÍxOÿ§¦M3<Øu©ë]¢‰$Ï N3?ð\gs4FÔw™öc¹ÏÎâô&õ`Íp2ícõæ?§¦ÿôªå ñDk}W¯#UáòÁGc ŠyZ“ˆªÔ{_t_G:v•â`"ü£;h3¢rtä±+ ÿmßB®.ü妢”Ï6ö:ý-SÈeÃQG´uÆ-xiÜCÄõnƒ‰ç Ñë|ó²÷–®¯æ ˜VéÔ¹¶ßÖ‡_îÅÔçç ¸èÄo¿üÚÒÚ"ÞNMÃÑ€r’¸ ñlR|;¬»ÃqoFî\õf_ ÀÄŒF¡†¥‹pÆJÚ&AÇ5¸,Öx±k¥Ëÿç‹ÎÎ%oê±þmåªëÉãÉà×i|:ž—ô&Jø¤sý£dQ¹XSZM HM»´, þc`4ˆïÙb¨¾±v1Ofê²Ñ¯&ÑUµ7Ûæ#Föóëê ÎUv­ eÐfW ‹Áßѽ†~š‡úoÌ$ÓðC”¡íÙs±ó’LÌÙˆœõ2EEeŠg­`ž}ÓrêqA(óXï •‰$—o]ÛF²gÖ×(™[o3a:ݳÎW|΄;ÍR/ÜgÑösÍÕÛ·­þQ·µ[e)œ¶CC¯7<ñ· ä Q¨ü5õãïܼœ8=ç~pÞ›]3 Œ-ïG©8Aºp@»ßœýM sùm{AœÊùÚ­péÅÂÇ×?#p[ +cŽ ^W[ô|hÖ3PËÚÅ¢p(±x ‡Vžu÷LÖVÕ½¡¶± Ù×*Xºìf681IßÀvã‹Yt'¬Üò”³K‚3â‰à\2N3wŠàn=xÖ!Z_;Èià +E²`¯»~”¿w±iãw–9„!yQ<Û'l,=™ <}Ä&o±ßN¬¥iãPÃ÷­¾Þl_¿…Êç’‹f·sÎÊ3à"Tå3Ń·Òó3¶éÀ÷áV»Ù…çŠýîÆ«y¯çž¨ÞxA-e©æk][pv6ز‚·{U!¦²ÿ 0ËäD +endstream endobj 555 0 obj <> endobj 556 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 557 0 obj <>stream +hÞÔWÛnÛF}×WÌã2©Ö{!—äcê8AŠ6 lÅ@÷‘(‰µLª$å4ŸÔ¿ìÙ )É—8iQ…sE.ggΙ93”´šœ¼¾´ê&FS*2Š3CZP[N–“ïg““W’$Í–©Hà™¥<Ï(Õ‚ E³›‰€.bÜ›Í'S.„Ð4û4ùÀ~<{E Ïèôäôùsz×F2ãkVmqsSÕ+zS÷e»,æeôëì¥ýQ<3 M%—¸Ì^z‹©µ…J­igù¼,eKe¿ÛRQ/è´©û¶ÙÐy³ë«ºì¢Ùo“³ÙÄ(žÄfxbˆ+ç9ñ8"öQºÀÝCÄÎU|ôÐØ Ú=Dè#0¹ƒ#'<Œ³몒 ÊŠ®§hjxÊÞo…]IÖ— ¿ Ê^3VGÜ°°í§°©¯Ã&å¯B&ÑTê\Ø*Å:M“œÇì]Ûø‹Ý¼§Ë(͸be°Ò…#š:Ø)raaVʤÎq|—Ã?Iæy4ÍpF>UBúeB‘±îÒpýú˾õÿk|üi¹Ó)—–91p§ÕÀL4: mâ€ö|ôtlM¦ìšÓ/‘Œ%–ÍŽæÎJÊ÷ÚitÀteOMKóuQ¯Jç‡Û>Õ’Ãü~,kÊblµ×¾oÙuƒ  ÁUÅ>S_ÝXæíÌ3Á_0|'šÖGÓ/ãù!²ÃÔaÒ€«ˆŽR\dþq|ÄëGŽÈ¼ÊûyP"j‡1KÆ289 ÌÉ¿‚Ø}C÷&ºý¤°?`Ì ZÌu°¤R¢¶y³}…bqéx'¹ìÂIó<ø—ûí‚Švµ»)ëžû0]òvF]ú5Ò.ŸR£Ú+æû6 ;w ;8¾ôMÂVÞpŸ ¼™éX¥!N.’¡µ¸I’õ¾&ö>BµEð ñ; +÷H·´Ü‹V°ûs:R’y¨ºc_01"b*À‹äâ¾2rýxënËyµ¬ÊûŠ˜*â“Š­bÍ;“zl»—Q2…ˆü’\F Ì0`ÒÙf÷¥f¬¤ÁI†²A/hQ.#•bÈ)v›ž\`à‰ð¯µ§$@àÇÎÞ¹ùˆÄ]F¨„56£± &|*£Ü×´T÷”k½ýÒ2 +ÿ¼©Q$1G&Tõ`n/.ñ(.Eyv~ñæç·G¤Å\= ÓÂë4£®/úòÚÑ1¸NþVñÈ$åZ#Ó#åsY:$/ puFŠ{5Å/Úgä] ©ŠÜqr¯lnaÏlÞ©bŒþÚÊ‘ø˳P> endobj 559 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 560 0 obj <>stream +hÞÔVÛnã6}×WL ³MRw~hs)\춋]m_ê>娕%ƒ’“ ÅþDþbÿ²3ºÙÎ&h^Š¢ð)rtfæÌ̱$l¬ù%l+p!xQ®£­Üú>±æ7$$¹%üá"£Ç„®àBA²µ¢pááY²¶.„p!¹·~µß^߀Ï#¸œ_¾yï “ìzcÒí¶¨6°¬Zmòt­ÙoÉèÊí]ñ(ðÁ‘\â’\õˆ!aãF…Ý!Ði¦ |Ôí~i•Áe]µ¦.áC½o‹J7,ùݺN,ß‹1³€ûpåÆq Ü‹„ðúÅÃ`¼Çä¹òNî‘¢Æí.1÷‰™¸ã#¼ô¢‘ŠUÉ‘ <¤M Ì xhÚe)í¤Ýê¬ß@AkdWŒö`ön02ëÛÁHõ«>s¤ zPîÃйg¿7uo‘í×-üˆ+[(Íࢮ|¬Jǹ ž• +‘hÏ{ZÄ/ ã˜9úˆ%d¿õ.Œëë—ÿÜôÿ >=RíÜKªœk窱vÒïk÷ï†ú]‰³Vl°CCìµ–IîÛ Že£ sÜ€ÇöS.êŒwã0ãªnœ”“¯•Æ%yéĦۡyz<fT–5“>ß“Xi¦bÜ?0š›\jhnG æxxÚPxèº~_š¥IÄ ÷ÐÖPTE[¤eñ'“>Ž©†c0¬1ßÅ“ž¶y’¨>Ÿ˜ÇA/;´¡œTÈQš0'’›cVŠª…F³ÀFuqe¯üÕ÷'(AâuÕõ +ÀÍò-¾q}ùEg–œ ˆÆº0ºyéju¿JÛ „xª„+¼É¾3眓.£ð`‚ÒóÎçsì+{9rr`OµáÉmÑ€és¢!¯ë´,uyaš–)ÚIV¥ÎÑÖ2Qp1Ú=þŸt©@†¹ŒdaÙN`Ò á§1eÄÅfìºÈÎVÌ8ëèIDÞSO?ïtÕ%‰h˜BIý‡æ¨ ¨Kp‡ÇÙKÙ9aQ92Ÿ×º²g¹¬vx±ooù§t«gç33[1ìÅ‚¸S7Lµì&܆Á¢æˆrYïˬzl¡ÆcŠ¶¨vû¶õñÛæqµÂójvÞ¡ø9àÉÓŸcbç¹7ŽÂ0øÏn05¾0öÐçè »ú¾{v©!1z9ìer³ þ }M …ç0ëÛeI™¨Ã +ßÕÕë;vúQ\§µ@døfñ†éCfˆrʸÁ¯ÐÆÔfµªføÔÏ«r¦!ªÅ”v¾Æw˺A=È¿B6½d˜ +ÄÅçQ´ÿ`5W€ +endstream endobj 561 0 obj <> endobj 562 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[311.04 167.22 549 180.72]/Subtype/Link/Type/Annot>> endobj 563 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 153.24 121.62 167.22]/Subtype/Link/Type/Annot>> endobj 564 0 obj <> endobj 565 0 obj <> endobj 566 0 obj <> endobj 567 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 568 0 obj <>stream +hÞÔWÝŽÛÆr©§˜ËaÑóÃáOï{7Hà ©-7vap¥‘–Y‰TH*ë}Žö%zÓgìùf†Å]'F"ˆ ˆ\rf¾ßs¾CÉv‹gß¾‘l×-RÍ2‘³$O™¬µ‹íâ›ÕâÙµd’­¶ ©˜À\džÅEÎ2-b¡Øê°8% ž­Ö‹e,„Ðlu¿xÇ_]]3çìų_}Å~l#™Ç9ovmy8TõŽ}W÷¶Ý–kýcõýâjµ€#ä‡N2Ÿ¸¡½…ó¢`X•äƒq²©ä`]¥ÁzÙõ,Z¦qÆß7%ÝIÞÛ¿a]s^GqÊò¢v})ÒDK© A¨÷YfŠ8á?¶_±9­{ö÷(ËcÅm8¥ &š:œ\¸H[ÊX©4c«—Îå$™§îßL°“ÃF±TBú[â”ÜeÃõó/øÒ?ïáãŸT;Å’*'†Úi5ÔN_»ÿ¯«Ï÷{öºÚ¡C3ôZÉØðŽ½¶m£¥Nã‚ÿ)‡vÏp•)‡« ~„o`Ž…‹Q;MÅ€/A + +Žëhõ3ø άš&‚è€^zÄþô%«±<+TŒv&kKÜ»7x|I•¶ 8á A €È˜¤Eîíß&6M‘ÿ/6M.>aÓÉÓ6‘"•¸ÌàBΉ,°^,$v 1„ÚìLx¯m¹±-{Qî÷7åš(Oò;öº9õUm;W‘‘ÍΤJ>$I8Ú g+×U|ukqæÆÖ`K” ˆ}½è*µÁfPk`ã±Xÿ¡•âNœ|fGÂa¯ª´æ%ÚHeü]}\ß–õβëHKžK8½Rü€_^öRÆYáÑ@^ŸÁP8ÞSNÞGH§ËÊYé~p眱1g,ûù ƒW!‡ÈóŽµ!‡ìþÖÖ¬ +,zA£Ê‘OÅ0 ’¬ð‘ýŽU5ë‘Çòxl›#‚‘ +Å©¡ñXv¤Ø à€Õ’^±fëƒÔq’OýLÆóðqçRù·ÕÞF+å1{Óìèu$<üšu§õ-+;·H¥‡–fÆźCNùÝ׬lm3ø@q¦f(™§mvÚzÿ€´ˆ4äE‘pöWØjÏŽ¸ˆÐÉ$ 3v bY—5»±,zhàCV'£d<>¹S(U—ôØ¡q«Ž¡“Ž=Õ¿©û²ª}¨¾¸(ÿ€§a„#EÛHS M„Ÿý¾¡À~2!>Ò]÷H\÷—€¬,肳nH-¤)Áú _O 1Ï&ë—àÞ³€ôç:i´æõ©vnVžÀ]íÐ’¡s‘Â_e?°±;ÝÄYä¦1æGœºJœ|öCÈñ~æ‹š‹½»³d¯ÀP€BùdàøìLøÅOh’†iXER Ü=DK”稖õ†½±}O¥ºàÀPÒ@ì›üF@Ëx™Tá2ðŒkñ{+9ŠÖÏŠ}\ÙÚƒo»)Õ{šz*L¼;Ke/ŸŽ|„÷3£óÖ{t‚”zîÏË)`û&™M«ÁoEíy³ðI'7í!ôìÓóJ{þŽ?wt~‘ƒm8¥c·¥ç0¢š@]ÊàŒL¼3N´¤É‹Þ!_‘šiÜ‚>ŠÈïÑHÑÒК‹÷„5ë˜AlV+õ‰VИZ ¥'üWÕ={ÛEàå6¤ènÈÊ{îE †¿r"^P^Ò¤²[Z]nÃêáh?ê~v†ôÉ8ÑE>LKãáäØ´‘.´™®G; a9ìŸ}Ç7e_~è"ÚùåÌ2”£æ‘áWdçêú}!gåÜ`Øö´=D\¡ÿa¯}‰½3‹ÞèGÝwdIy˜G™ü}ô T¢tÐßaö.eƒ´tUbÆž€Íew:÷¦Ø¬Aiƒ0QóAH}©†f° ìXvNéo[ ýÐîN[÷n¦ÃðŒ?‚îŽF§¦¹wxjD˜…#Qƒlp(òØO柈 Šsä™ÓH.úš°1.Ô؉W®N6|ºõ"Ý[…9«ºANeYÐc +(7%ÛWøÔn¶¾ò8KÍ<£´Y…h››Ÿ1´IADŽŠÀí-œ’öfI0W²S]ýr²¬öòãáçpîEYª]í< j0‹S3SƒÃÔ’¡=FM±$õÕ2Kí²¾eÛ¶98‚(¤O«$Ããxh™LÏEërB¬Nò¸œ”A²dü¾c¾ùšëêÎQ@›lš¯3ÙîʃIÂAÆý!TRBrB<¥}·ªÝT[—°mK‰ëhR£|¤_‰Eb/cˆ[ñƒüø¿>:¦-ǽwByÅbÔ|A’Þ5¤v—çÇ£­7ÕGX†?CãÅ?alˆ_OXÌ8|P‘’ø‰4;£"19 X#›L §%ð!ô3–`c² ؈|BþW)@/× +^ÐWö¿Sn·¡Ynrp#‹MÞÌ6 tÁ +endstream endobj 569 0 obj <> endobj 570 0 obj <> endobj 571 0 obj <> endobj 572 0 obj <> endobj 573 0 obj <> endobj 574 0 obj <> endobj 575 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 576 0 obj <>stream +hÞÔYÛŽÜJ•x쯨Ç2']q]|ƒ'rCAt”ô¡„<ÝÕ3fºí‘íN˜ï€Ÿà/Y»ª|žœð€Š4vÛå]ûºöÚÉn7/ûQ²Ûn“j–Å93yÊtÌZ»9n^í6/ßI&ÙŠÅø‡‹Ì3Qä,Ó±ˆÛ71¤ˆØàÙn¿ÙŠ8Ž5Û}Ù|â¿ûŽ%"g¯_¾þî;öCÉ\ä¼¹mËó¹ªoÙûº·í±ÜÛè/»ßa+í·RŸ°­2MØî ä¹3±ly°-{]žN7å>R1¿gšK_Õ¶sÒÞî6‰)`R*’” ¥‹¢`Âäql¼q©Y:¼‡ÕB™Å{8…|¢ÝK=º¤pŽ(^š|°ŸÔSrPT¥AÓ²ëY´MEÆ|8”t'yoþ†UtÍy‰”‡e߇Eíþ.,RþË$ÚJ]ÄôCǸϲ¤†ÿÐ6~Åá²ïÙ£,ŠÛ ¥ [4up8÷Ää_¥ÒŒL*³ŽÞ¿˜,Šh›cb«béo¥¤.®ß~ùŸ/ýÿ>þ¤ØéLHŠ\<ÄN«!v2ñ±ûïªú›Ó‰}¨n‘¡r­¤Hx‡’ìlmu* +þ9RíA ÅÊ)S®œRàÈSˆÑ„+eÜ–§™Ù„1qœ‘¥1I0ð×7e_F»¿MØ1Á}m2à}î|CŸòÝeþ ¾Eâ])âÄ-!Á‡µ`è¡“Éå~)îL6¸¼lo/g[÷ì)˜ÿ9Úâou°ë±-Éd݃ÝWÇÊØ P ¯‡d&æ‡j4¹ âIÂ>À,†{ÁÈ|Ö?>`ƒÖöx_e¨ÑzžBú|Þl•:ñÈšyƒcį¤gü¾c"¬æe„?^´vò4gÇ¿2Þ¸WÌ–û»Õׂ½ý{y~84&K'7;ˆ ëÀ†³æè ô¶àGÙ’÷±‡ +_-›÷®îØCÙu°¶ª÷§ËaˆlâC¶U¹@iLd +\¸ }S£÷weûËE¼Ó…ÂjJ»ËMD’Ì5ä‡ærs² Q¨„|–:ÎöŸSÕý2¯E>IY°AgA¥²>,å)1ç5?Øc…nñ°Îëtž×y­rŸ‚í"‰ð)þ%’h¼aME®ïV7½ýUhÞ™—Wˆ"õ ’nP„p#³«áQ•_Ú\\&\©ŸÿÒˆ\_³u@ͪ#‹ Ö}¨ø½¿@ì1ÒŠŒ§}r¤¼« Eµ¡ø©:TýcTÐRÁ~Ιþ|á¯QxmßÙ#i‘z­ ¿0¢”—!DçÞ[o‰^؇‚^o€ÿÌrʧøXŸPéøÌáÂÎHÜ]"üA­œË{ÿÊÒV²=R +d0wà \-W½~xÛx4Í –Ï›_¯€ƒ$þ#º û:¾'q(èˆïÞ¥×@¾A^:øÄáŒÈËÕÂÙš„šE]Œ-6 …1Â=²¦ôùAÞj·yáŒ>äiÕ{k!‹™Ä‘,&oÙ3BT:yíà’šÃVzè¿Psur$Lx’ÅNG4T,ÖIn­s^*ââʾ*€B‹Ö}YÕóÙVŠY—X¶;­¼¶M}ztJ9#ýžãO²áÜxu¡Ó™¶Å((ä2ª9öÖUpÁé}~”À[Ѩ@I _„—CçSß4DÁI詺i#Ð$D Œ í· NF™—5»±CkkÖϵ +™y©¡Ùx-X;Œ’’ˆ<«á­eöèÕRó`¥c‡Æë:©¡Z2|ßWWð“´¬áP“Jv{jnÊ /KZÛҀ®À¾ðˆ²WtwõÕ· ÛoÕÂ,³SvOóx©¡ zãà&ŠKÓ"¥è,kÚ ƒõÕ»ÙÌa’Ñê8DJ"•ë=àG.=Qù졬¬NÞ–”Ÿ"² x•XþðåÎzܧ´?V' bÐ:çQJ£d’ä yûÄoì-²ÞÇï…W</!ÀK(=]JÞE¨üÀ0ôb’df¤†‘7ÖEXsÊŠGÿ[ЪqBË–3Ž4k'{liÚ]uí|M(D@¼¸[ jlp[!|:,ýµm¶â(†É(éôgøßû#ùÅ%Ã¥v)0fA†R ×Y>s'¯aÍ®Âiàs$rÈ9ö¥êï˜çÆÌHX€ž’Õ”o¡#Á¯{Nh8®Ûè,~B+b/oÚ¾'»' ×{“6‹ýüŒC÷ðž Ù–­’máÛ$$‘¦”lhÕH‰O$‚ ;v4fy o†9B°?Q­8†<ÙÐðûCª's†0’öB_ŸIÀûT °ª¥Ðų°âyé‚5è' +ˆLPMWõ¸`Kåê‰_ÂϸR wySó€:€ŒrVO³³ÀËÌjJyUö„rîËöÕlX±Oƒ`+ÁUÈÝCdoIõ`=*Z'_@€‘Ì8 t Ñ„ý$/ÈC~Ô#Lª“ÃÀ¤õò€"p”H¢hð7¥WÜÕ)0Wá)~Zvªº¾Á´õmûùAÛà]y%9tèÀ]øÈ×O?xw6é8)]×ì)‡uZU‹£Á± $4:–g¸-w”„¨ÀL´A}…ü®uGÉaŠßû¦ ŸÝ 9AÚ<mä×Á‚S†y¤³ÚþA°öv·1¹iÊTFƒ!+R‡»Ã©È&&GŸÏ±Td>Ï<îiò(4¬$¡`4éW¤¢TR`ã™D9´2¹Æ€ðëóU'"#G©0Ø+)Š"¿²—¤ƒJµØoæ«íÇUN¤¦yéy‰©:jÁÐŒý±F‘ˆpkÆ‚­úc.¤tÔ(UcmJ½8^r_¬™Gá[ãû@XÔ6$á–äíÙáóOÆÜÔ¿à\äÚëN‚¼ŠSIäîµc=cµ9¢´‹Rw–ó°:(ßf¤¿‘É‚Ûg$¯.{¢»²bèzwàÆtVWîA­»%Áô:·Ù,G³ÏMu`ÄK`6Á$¬{}sm+þ“ã0ûcÍ»zG– AG=1™¥(lŒ†©ÈÌó9« +d&º,£ƒú)øOѯàƒ^hî +Ûí¿TtPaò¥çÉ…+.:YøHjÐ×ý‚‡Nh®üÊï-ÛóxÍ/­½âÌÙexÿM®ZSs\붧­!½ƒÔ§þý×¢€ç«k&}Öµ;}MÙ+šB‘µ…^àWÜ>•0cëŽUægZÙü€Œ|¸„BðïùêdM-ˆ§ž{8ì;¹xÕýn~2öÃædÜ¿Ü +½öÚNÓ6«9+”Ë}ã°B¼+ÜR™(Âeòy”Š`|ʶL­kêÌ”!07 ÃLAŸÆသžûczN›Né1<³ +/dšCC÷Âÿ·Ûø‚ØiÞ˜xØâß Þ\Ä™ +endstream endobj 577 0 obj <> endobj 578 0 obj <> endobj 579 0 obj <> endobj 580 0 obj <> endobj 581 0 obj <> endobj 582 0 obj <> endobj 583 0 obj <> endobj 584 0 obj <> endobj 585 0 obj <> endobj 586 0 obj <> endobj 587 0 obj <> endobj 588 0 obj <> endobj 589 0 obj <> endobj 590 0 obj <> endobj 591 0 obj <> endobj 592 0 obj <> endobj 593 0 obj <> endobj 594 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 595 0 obj <>stream +hÞÔYÛrÛ6}×Wà‘œŒÜALž'δ“4žXÍKÒZ¢Öºd(*µûGýË..¼I¤D;ÍtjϘ0î.Îîž]-'Ïß\S´ÜMGš$H$ +q‚Šlr;y9›<¿¤ˆ¢Ùí„2Dà.4ÑØ$Hs‚ C³õ„€LÜ›Í'SLáhöçäSôöõ%’8AÏ/ž=CWELœDÛe‘®×ùf‰~Þ”Yq›Î³ø÷Ù/ Š{U ÄK4¥˜*‰f¯@~Ûû!KY.ÒÕê&ÇŒDwèÃv_æ›l礽žMÃZÁ¦– +aÆ1‹„á·çvì&aÓ˜‰Î$`bp7 {®1ƒ`R$Õö­uŒVv2 Mw%Š§ +ëè·¯‹ÔŽhTf ?@¹½&Ñ&Æ* +ËÞ…EÅüKXÄü•PO)7ÄþÃ)Œµ–‹èªØú‹ý¼Dc`eAÊ.¨Øn‚|ð†C‡XxSÚâkMâÐy#jLžýá#8„[§ìºOÑÅ—´ˆ5Dj:r Ä"=±hÔ}ÄÅ|€øoÛ|VÙmq•A••vqsw¨Ð›ó9r‹Ë¸ ]nf_3»ÔîW6°O‰Ô ì"€’ž}3ñ°¸ÈoÌŠ>Ç/¬,öÉ»¿ò®™•þšI§ xè”Áôú¾Ì6»|»‰§|º;ŠÔÄë`éHeXøùùûá)Ì´l¢ÒòH°ð¬õ4ka”bnd[Ÿ:¥Ý‚Ðî*ã¼_×€;b…dB0dKåEjºw¥Ž–:fÖðD8k{¦c‰rûîz¨±§½ñ³þ¡F™š‡©ÏåKàz#!©r;0¸‡²i–USPQ!0@ïì-Øk”Vs;;°«ïªêùéõlaÐN’Ëü>[¼KwwüЇéájü2+úD +‰Y‚¨„GOd' æV«šGœø Ñ=ð·­„ŸÕʺ„&}›ßX:‘Qj¹Áà½Þ,š"Úöºn¨êºLËlmÊN¨<‚€¬â´x]gøç#<4.%–}³Ø ³6X¶ˆÇìbN°OÇÆäC=÷¼McN¢‡˜Ú&Q1{¼Â‡ã“>d稹ZÓƒÐÒ1s›wL@ûÀIS­ p³"Ù_iÃÊ.r û›[tLЗÙ2ßl€ÝŽcJ )'Þ 9²§*šÄ%l‹AépI‚$l·¦éž êX96e=t¸ŒŠ#÷à™8ªÖôáA\…F¤¿ÂŸŠ¢J÷˜ôª|Ï…'/O+¨:¢ÝõðeM‡õ)š=@•`4új/$ÊN7Pgq]¥»µü;z(®jö‰ˆãšögê©.êÈÖ1)kÂÞ™iƒ õ&†` Ðû¶ÁÖ +ô[·Ué)™ì¨¾ÍæÆ×aÎ;uxäP‡9Y‡ ~\1¦UtqÞFø=b +fDù2·Í+‡ô`9dž¡Ã¦”P-[-©Ç1ô¥nnl_zÀ¯ûõ@gʉ«Õ½}POcÊv(ü 5MSæÎé1zѱKB;Ý›~sµ‰5"c‡V¢m]çÅ”»þtðTAj|÷ÑÂ)Ù9ZŒv!S¾¥xœ™²­…å…'»‘÷¸1àñx" >´=îS«iýlãÓñC'ŸüdÍ^ÿÊ9ñ]Êà9qÛ­ŒvE}îÓ'=q¦;fgzÀ–Ÿ¥oŸßßìJËöT²áϼÌí ¾§¾êpòöNÈ™2Ý]ÙSFì‰ö§Vɉ*2nˆcxf¨Pw x:C]åÛÑ=éìq•ŸCʯèCHùnÊHE¦÷PæmTÑšÎeÉQ?#j˜®FöξÂZP6ûÛ¢_Û×PQçå¾®²›%ê=í²ŽoìJh£|ñät¤V«ÏéSоÚîoVÙºL¶óþÌ 7ÊÔÉÓÉ@¯Ø5õLZ Xz÷ù:¦ '6m“h>æi?¶>ÕCK~]¦óØ!|÷ß[1w ñ°J’Ã/-Ø#kb[p(asð‰FžŒ&bÞói›ÙøŒ6> XÊnj¸OM}íµñ±ÿ³{}j¢Û˜1`“ml?º¬SËOÎUb09v ç3pLió+|¸‚<" +š]Ä«¨þ¶ã;4‹•XÓ«ï[©„c¡0vÿ„Õßµ”€G¸ûXè: ÜŒ; ù™Î·0E€U¼,Ì„E»š‘à= l?ÃkƲ3\cÓ;AX#¬3#”ÆÙ€0 +µ.G3ÿ0˜|·¬ +endstream endobj 596 0 obj <> endobj 597 0 obj <> endobj 598 0 obj <> endobj 599 0 obj <> endobj 600 0 obj <> endobj 601 0 obj <> endobj 602 0 obj <> endobj 603 0 obj <> endobj 604 0 obj <> endobj 605 0 obj <> endobj 606 0 obj <> endobj 607 0 obj <> endobj 608 0 obj <> endobj 609 0 obj <> endobj 610 0 obj <> endobj 611 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 612 0 obj <>stream +hÞÔXÛnÛF}×Wì#Ù@›½q/èSã$EŠ&lÙ/I‰rÙÈ”!Ñ)òIùËÎìò"ÑK‰qQ…“âÎÎÎœ=söÂÉíìù¯WœÜîgZÃ,QVÉÈ®˜­g/³ç¯9ád±žqAüÁƒ[C%F2ÊYÜÍx¡LÁ·År6§Œ1IÏ>$¿¿zM2jÉÅó‹gÏÈû]Ê-µÉöv—ßÝ•Õ-ySÕÅn/‹ôÅo0” C pŸ‘9§\gdñü7~Ü^ùªØ‘‹|³ù”/SÁ’ÏärûP—U±÷Þ^-f™r’¦™&THç¡Ê2¦BrZP£ÛvÈš +uÔ  &Ò7BÒ$Îá4*Ûæá Þ*ti¾¯I:×Ô$×÷«ßxR«ðBJ|Ú¤J©N³·Ñnùgc$“ñ,séþð‘“9ª’÷»m°X=,kr“KER4^öÍÛªñÓááaˆ¯Ú À²RÃÙûF¸séÜÂn.¯I5†KÚçôÇ7ýÿ:ï~âÜIC9ÎkçNŠvîxæî¿ õ—͆\–·ÀP\«SN³d%¹/vé\jê’/©ð±XѶ›r2—“ië©W  *}U!}Q±Ö»mµ*Ö©”ÀíüaS“žËV´^Βˇ hÁâ/–,‹!š)tš|Ù–+²)Ö»«¢ÿ/‹5z¾øô»²có Ú¾®_ï 4Ç<3ÀòË(¨™Î0šöØH¾Rª-ƒ…”1îéÏèKRÍÉq^~šßŽÞ è\€|‚Šò¾«Ã®P,îq’´&õדøÁeUÖå¶Ú“ 3ˆæEq[VªùjA¥ì]zu‰ƒŽ1y/g0¿>q´3Ë(Ô8%ˆ¸fˆÁ-Œ£™kà«x„78b‰ƒÇ[QfŸˆ·â}Šµ2 +àì“v’#SèƘÚB'E„©ç‘ûa$åÁêUµ:MOÑÒSDÑ…þ€û0¦ÑT9=¤)ÇZ9ó4š†`§ÔKkr•ßówEM¢ùeÁæ>_¶5¾øirýO)ÿÆõ¿S¥Ì‹Ï!«ìD÷‚;ˆrÝóàšØ½™ÂϦûtfˆ\oO:Ø2Z•¤îz’gÖ®[¡àƒ•.Àg"´ì‡•ñ]¬”‡Èòt½ã?ŒRËéd”Z=•Œç +½ëiZe] QaLjÆ×ìx†^Á"†Wž[ÁàYŒ[Qn…±'+”Û5,û'áà{žaEksDZøLÇ‘€“¨Qð`4óµ0À6à'ô¿~Êjk›Laz0þë}AÞ–9·ÊÝô58ß1©Š@8°A©”_I­Aš+–òä*ƒ•4‚%§v|‹= c +¤YØÀܤ¸Å„C8üƒ#8¾ÃG„o'”ý¦ð—^|ãñrûði3R†‚9_†Ò“kœ|Î/‚ã!,J>6^ˆ}¸Skq©Cj|H®jØ rØy&%/áìàÙOljØ .Ï°,FéÇÂJž&7YDà;$£Ü;Šr +ñÂ,Ü”yTØârÖ§U=Äò—Η¨5?)ê^ô¹6é› µC6©?øy& ã#ÆÔñÀ?.ì§ +­Ì±ï¹¿³ŠAÂÔájôÄöPœe'÷PQmïÇïQá=*(rnpîÁ›Ò˜v4­7²àŒµNayæÉ6Å+ûOS¾À $b—•Pá6«qãÚÜ»B2 ˽J.RNuÒ]ÍÂûg²H5¾`äÍ–D[ Ô€£fÍš+!üÂÍ”ÿN•é ô-þðZ.s¡…Ÿ‚/*VWÛ¢ \]Óà¯Û ά¶0ï" ïG9n9蜩®"°&=êŒk}rÓåv‰Ú +endstream endobj 613 0 obj <> endobj 614 0 obj <> endobj 615 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 616 0 obj <>stream +hÞÔWÛnÛF}×WL “h½\Þø!–íBEÒ1—¨4µ´Yˤ@RNÒ"?‘¿è_öÌò"ÙNœEQÌÕìÌì\ÏÎ:t99øéÌ¡Ëf¸ʈ¼( WR­'ùä(™œ:äP’OEø8Q(âˆBW +©(¹™HhÒ-É&3!¥t)y?yg½<9%_D4?˜?}J¯kÛ‰DdU—uzsS”—´([]çi¦íß’Ÿq”Û¥ Þ§™#œÀ§äú{½{jßèt¥kš§ëõEšÙJZ×ô¦Ú¶E©£í$™J„œ +„PnÇ$¼HJ¯sÏxl6á´PÞMÄ„\³ ŸÇˆÄ&1aÓ‹÷Ù:å vª 74mZ²g­óÍ*å•cµzÕ-¨àod•¶¬žíUÏTgW=“ê¾Òñí™ãÆ’¸.Öaèdz^×UDZÚf-½µÃH(K÷Zšþˆªìõ#&:’ëTr|ÙdÏ»Ÿ¼¿È‰c{áŒx¦¤Ó-}²6—†ï÷þsÖÿ¯òñ'çÎ …Ù“Cî\5äÎñ»Üý»¦¾X¯éMq‰ + Qk­íßjБ®í™ˆØºµ• ¢^‰¡ûv +•i§0òa\†2fv?tEì0F:.»*;/O>¤7›µíÁ¦¾éGÙ¡kñŒ +SÜA*õ=š\iÊmW¡¶ÑH¬k½®lÇÇï÷ŒQÚÎyÖ{†->OSs50À]Pbs½§¶¢¬Öi«)¥F·Æ*åÏõwù’ÞhDÔ±ÝPÝ5µ0 :VF8Ü— GÙ>×@Á,-i“Ö6¢ Ftæ:€å= 5 +|VÀ¡T,oåSò¡å½|øõ`wCm¶ZÕ–V:¥ÏýA’¨.'±ˆƒ;yÁyq”p=N cæ~f‹²EôìÀj·›Õ—ÖÒ¦?»l<˜d>6Otºx ‰“'”?7lÉ“~ÚlSŵn¾¶µEñ§mJ‡$?HG‚ª¤+½‘ß° !8,@OW8Žçï?8@sX‹²h‹t]ü¡wIDqÖ‚(¹*š1ÉEçr õŠò¢nZ±Ëw¼Zë¼5kæ<ø`€Œ¼ûœéÖœÌîô‰5Û¥éÇ@þE]§ôeQÎ/®—Ëï(Gƒcï v2fò7ÙOÊÕ r÷û1¡£msT´ó+»‘ùbô˜è> endobj 618 0 obj <>/Border[0 0 0]/Rect[384.54 93.24 426.36 106.74]/Subtype/Link/Type/Annot>> endobj 619 0 obj <> endobj 620 0 obj <> endobj 621 0 obj <> endobj 622 0 obj <> endobj 623 0 obj <> endobj 624 0 obj <> endobj 625 0 obj <> endobj 626 0 obj <> endobj 627 0 obj <> endobj 628 0 obj <> endobj 629 0 obj <> endobj 630 0 obj <> endobj 631 0 obj <> endobj 632 0 obj <> endobj 633 0 obj <> endobj 634 0 obj <> endobj 635 0 obj <> endobj 636 0 obj <> endobj 637 0 obj <> endobj 638 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 639 0 obj <>stream +hÞÔYmÛ6úÑ¿‚è' ­ñ¼o¹Ýì¡E6 vEp´6í¨ñÚ KNšŸÔÙR–d­W²Ñ;b­IqøÌ<óÌfd5yõ¯{FVåD b2K¤ÕDddç'ËÉ?g“W7Œ02[N'üƒf u–‘ÑŒ“Ùã$ƒUh&á»Ù|2¥Y– 2û:ù˜¼}sCµäêÕÕ?÷»”Yj“íj—?>›ùiSùÝ2Ÿûôß³ŸÁ”ˆ¦8,¯È”Q¦™]Ãúõºeï|¾ð;r•¯×ù<åYò™Üm÷U±ñeXíÍl¢¤Hš*M(Î9B¥Í2ÁiN>ŒjÊåÑ88}" €n\â‚#Aiøq{œ6Êu½Ó¼¬H:ÕÔ$ž9>±¤ò‹ø@ +ü´É&¥:©§ÝÖ“vóOõ$?3¦Ò).Ã?„„gc”£2y¿ÛÆ‹ý¼"¿¦ÆRžøz•²6±ÝÔëC8‚{2ô/çÚ ƒqËRö£÷'aÎ¥S 6Ü”g,>*’jÜ.9|žÿñ?Ÿúÿ»xó'ÆNÊ0rÙ!v‚bÇTŒÝw«¯×krW¬€¡¸V¥Œª¤„”,ý. +M]ò%å¾ô zHÆ: é¤AGžKŒc1µ´áÝÜÊ=ñÁD„Ênús*’Ï)JFr,¨´ú…‹KŽK1´€^cqÍÙ§¢$¥ŸWäË—ó¦¾xð%©>y²L¹l1c×ë` š9Õ#kTl…e·)Sà“¯à'— îíqïózïÌÁ·ŸÉ®Þõ?êm›¸mÔQoð·ó² v24‘|—Î~?ÕšÎüCnÏaKk¿Ü]ûMYTß®>ßlf)ãÈ÷t +ž|ò‡¨… µ úð‘¡:kbךâ™Äñž9Þž}ÊW OÜ8 (Ù0^åV›³ñ¶óƒYÕÁ»Ý?@¡Z®ý4F%ߎð*'©±€W⨂ºaOâe8ÞšCkº©Tú9\Dj ®`“Ûüˆ@CY]ù]'²ºÒ0Š-UCÁ;GFL„ÜœŠ¦I„ƒ§²‹ØÛÎoS+‚|›§Ð€8`lH ŸÂ]Ä®XÚ@c¨Ÿš¿LcæŽÛe¼'>Ü6C›1Ü\_Æâf~ŸÅ·ù|·¢/W‘¾@tþrl™38ÞÚ9¾v 'òðlqòI„ïöC 3ŽôÐÍÈþBY€ñÚÌ ´ì"·óûò{›ÿq_Eý7X»@w-ò15–gHc q“‘Æìt!p¼g}\Ý|e.âq;?‚~·Ý\ûe*D’ï×U–õâ+•$†^€„ÃvLœ%Q2ƒ(ÔøâäÖ»æ/e…½ŸîSè¿CKщ­í"ÚRÇ+ïU¦q¸°É‹ÝÌï—÷Åf âH$ .Wõ2@|U}£e#…µ‘¶\Ü…ˆg-:ñ™)“F¡d€‡º •‘Ç WJÁv8~l·í#¹{š­DbÍãcൾyœÜ+µ÷EåÛT¥ýdZw¡ž@_?Qâxmà<5’£Ø¤¸ˆ»íü~͹ÊçЙ”!Y^l ‡„73!”¥³ÊŽcH±É¹„ÂÍü¾4ÝWñPÓÎ#6iAŸ% bàï°.1t©gô<þŽõÿˆu8ª‡½ûF¿è~ØU9Vc¹ÃK+5šáx×Úy±; s2~âÎÏ—þ¶Øôø‘ƒ6<ð[ãµÛ@Om4Œ?³8*Òc'·³¡î¼Ñ¯EÇT¿qéÖ±!R÷b-zfäïåäq=ù¼»}{Š=‘ëpÀs!š/«•ÑäôOcG<5^HßÎÓ&‡j¤©Ñ4ÛoaÀ²8ñ|]ŠªÁñ¾Éñ>êûpW%PêÂ¢á €3¨ƒº9jˆú©ÛÍÂÑuÊ pO~ঠ+[àN/RkÊ*Î …Oû’Bs( ûÀ?J²È«œ,wÛÇpmUPµ  ¯o¬:º~óîþ§ÙoGq’”wn¶Dí¤p].zøÝÏ«håkQ}*6ÑXX@5ôpÏMݾ¾ºûåÈè˜ibáºv() òÝjÿè7UL/1ðíÏmmÆ~Ylü‚œÚž¦ÜFˤ¢ÒÑÎ4p©Fp|»W_’ù:/KRmm!*xÿ£ÂbTXˆ +K‚y L¼Åã5ŠL9e¦qÐÇä^Å;ÃdGÊo›*ÿv¾L¹ß!yòÿ'y¸¦Ì¶û*¬Œ?‹ô­©¶­÷G¯šŽÌFÏ—U^ytõ¤ôž|ŽæßãûtZ:hu°ök»£…F‚AAtàÝ‘‚–Ž‚#¶†?-ñN6½M§ÐK&oÀ§<¹yu}€=…3D³%¾Ø@âêð“Ìfµ‡Ä&w>\æ*¼:RÉÎoú?CAš0÷Œº´Fÿ—uŠb +endstream endobj 640 0 obj <> endobj 641 0 obj <>/Border[0 0 0]/Rect[319.86 344.22 499.8 357.72]/Subtype/Link/Type/Annot>> endobj 642 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 494.28 426.6 507.78]/Subtype/Link/Type/Annot>> endobj 643 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 644 0 obj <>stream +hÞÔXÝr㶾×Sà’lV0~Iâ2]¯3ílf2Ž²7›N‡– ™µEyHª®Ÿ£}‰¾e¿€)»;›‹´ÉhFIàœçç;”l·¸úîGÉvý¢Ð¬3UÁ´`_l\-®n$“lµ]HÅ~¸Èªä®b¥\(¶Ú/¤paðlµ^,¹B³Õóâsöñà ³¼bï¯Þó û¡ËeÅ«ì°ëêý¾iwìOíà»m½öù_V†*U)ˆ·l)¹,,[]C~’;{ëëïØûúññ®^çJdìöpšÖ÷AÚ‡Õ¢P¼,°©‚Û‚q¥sŒ›J·v^bÓ\™ÙKØ„&èð{>YÄ;8†—¦·Oè”qª"­ûåË‚—ÙOO›šF2ü&XC×*ks^diÚ÷iR·¾O“T¼ +ió¥ÔNЦqYZÇMöCwˆ36ÇõÀ>åeÅUæ“”>©8´I>¼¬#ȼJ%Ù— sé¼3é\¾¬ Ã-•qhY^\6^¿þòŸúû~º%ßé’Kòœ}§Õè;i£ï~]¨ß>>²Ûf‡-kC.¹Ízddï»|© çJã¡ßð1S:•*¤SùÃ`bQv qYÒ.m0ûñ¥êä«¿-®V+—;š4 ¶àÚJIM«?gM;°GŸÙ¶»ömß /ïïnÚÕË“ÿ9‹æå(=å÷5=úm¦Á*"›šüWÏi ½äFƒƒW¸°¢ …Ùðò4‡¹'N4LðAU`PEØþp¡¤ä•²úBÇçlCùžµ!Û¡1®9i4`¸"- +T +²¤¥T\;Y|ÈO=Yª»®‡ú ¸@•åk$u€P_@P¼•™Bø9fyÓ÷¶ +ŽNOr¿EíРŸÝqïÛ¡Ÿc™a+Ú&,3»5ErgÏ#Ã&¥àRëDwì6_®‰:ñ?ʪ¨ ÷=Ë%V‰l¸?9Þ&ÉàÔê,Zès˜RÜœ£ŒÂfŽIðrDuZ9 ˜Z"Æg«û¦g(w‡øà¹g/¹²ÿ5¨ýȆC„¶ÄUL+hvfxÅ#K òÙSý騢ÀÀ ²Éñž›á¾i¡C:<8;öÔv°B˜\⿦u{6òl`Ú€‰îë „› ³õ¡ë<ŠÔ:í ùϹ&-g5ÎÎlÚ$›ÎŒ R4ÇÀ™lÐ8P§Ín}ô.íµ×d„íéÐP3B6¬_;Xê‰ä¯ƒ¦bn‘º(¹Ê¦¢Áá¶.\MÞä@†Çì&GEÎÅ_Çö‡ÎŸkå¥oÕ¨@EM»Íµ¢ÊŸã/îVeûœÕCshß±Þ{öÏÉþ5Rµr`PÃŒCç€täša7Î; s²j¼V455BÓ>-cè:žêg…áÑ:'[âöWImºÛÌŒ ò¸L/>u«3•„‘În¥¤… {lP†à½C‹ˆáKÌn߳ÖQ°–¿ Wè:í$å?Á¢0¨ß0‚ÆX± CŠêÞpµyR5—ξéœ×tvؾ‘6†­F4LyäÔMʈó‰|6¾ovm„2§PÍCùcˆúSDTQ¥ +Šh¶ÀL‡ãå³Â],‚¹¥ü Ιõã3rÖU• +ólovl=à +m±§®"ÏTÄ3œ²i¶Û^ƒ\ΚvÜññCd`kß0DRp“Ü°‚1‚ƒ¹KA.C;9‰ #OuqKÒp¡_®U‰pcI +¹;ðísNud§)È^ú ³¯÷‰—ßQdÑ›cNÿCJR é SÎŽ0‘ÚC©‘õõãˆï©#oV¼o{âS´X— -‰ËÄÜ:0w‰ˆ'ßnè|…$EÄ·tÛÅóñL™EÚ]…Èį'æ iœŽ17´wÔ€P‚Ñç§0[*Ýçô,0 ‹ML”Swš SÜ£#]šºHL¡Ì†è6§öJŸè9vµ¤‘ð÷Pز;wHzìÇäƒfÍV#¡¾Æ€(ò¥U%¡^å…€/È:Án7/|á+IyJb9ö”#1~_·Ç-‘£I—¸Ø$H5ÿît³™·”nNóf~db©:tòÖÁaÖ[1é2lŒ°OyEçqО¥ï?ôåçKªcš’ÖO>LŸè£OhÐh‘(D—Hªüã§3Iý¥ ÏÓ·µñSt"Š/Œ—üG€awÀ1 +endstream endobj 645 0 obj <> endobj 646 0 obj <>/Border[0 0 0]/Rect[382.98 418.26 452.28 431.76]/Subtype/Link/Type/Annot>> endobj 647 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 648 0 obj <>stream +hÞÔXÛnãÈ}÷W4ö©™¶Ùv³óæØã“xváÑ ˜-µdÅ2eÔzç“ò—©ê /òe7 ‚ `D‹Íºœª:u(N6'§>q²éN´$¦¨ˆª4‘iÝÉúä‹“ÓKN8Y¬O¸ üƒ^f+bdÁ +A'Xa…‚ïË“œE!Éâéä+ýóûKR²ŠœŸžÿ=ù±ÍxÅ*ºß´õÃö٫¦wíº^ºì¯‹?‚+\ 0_’œ3®K²¸ûÑîÄì«W®%çõnw[/3QÐ{r³?ôÛÆuÞÚûÅI©,¤¤Y© ÒZK˜ªŠB…ä´`F§û5jv@AL¤¿ IX„%pSU) Oð¨Ð1ÒºëI–kfèçÇUWœön.È?+ÚdLÓxì:j—wñŸ/³œK[àRõ1¥eŠþØîÉÕaÙ“/™©˜ .Z颋}íC9<<â+„60†¬ÔqõþA¸µY^›‹‚‡Ë’dÃ%éó·üÏþÿþÄÚIÃ8V®Hµ“"ÕŽ—¡vÿÝPÏv;r³Ý@‡èµ>㬤ŒdçÚ,—šYús&$|éV, c'#ü8ià‘‘bô1ÅÀAmô½`Ž¦G›ÃÃ-¸Zü}ä .Lê€H!Ž»ùÆõˆN`Ä0p¼ªûšôwuO \_Õø}‹£‡¶VEs®ñipÉ40Óè¥D/ñ¬Õ`Öú;G–‘š¸ îÉ¡0ÈnxSy´5²œ780€à-®3ˆØÒ}ÿívûŒ—pñ„nî·Íª#ûuHcY7äÖ¦)KN›„þpPÊ-«¤÷ÉBU´óë˜â…}Òu&ÒÍ¡%·@Êpù-˱Gœ@hó•[oœJûE2-CÝʧÅÈgx"d¸íHçzò°GJ…0óð8hž—soh¿î”cOjò¸ßâºñÏfªIbG¨S8\¹n»iB ˜´ %.@ß«þÊoË´ÆvEƒj@õ+ݹuë]Æ9ðyXSמßÞ_6‹¬4Òcl‹ ö“YPÚÂ+^TC°c|ë2ØÉ~ø|8왎à¶ô>úéÄÎè¡hðQol$È6”C1Í'¨Èa„LìÅí/™°Tç¡îî» 14tµoTƒjhh +I2رæ Jßß'Â÷^º¯àq:]ql_é{j^ïž2Ž›«ÎD ß:_›0DpP©gCt<•]ýà2^À¾ ]YÒCÿõÞR½ìõ.ùlÅ Z«ˆ‰a…ÃÑ¢G¸D¾(#_”ž/Ê/¦L,AedùRÓ‰8NHøTd Fl)-MéV ÃÚ™PȬC»Ì$Ʊ÷Ñ´0.­#ÛæRŽß z <ø]Ýo!Îú¼ŽÑž^–C«Wºœ iàŠË«ŸÞ_\Ÿ}úÓŒ0J&íÖ0ŒBF2#]_÷îð}³ìÈw£™¸%d…â((L¨¶L¦=Xi[Œƒ¡JÁžåøHš7ï ýib*Ä*™cUV¹ÁÀœ^ÀÐ`j’²°D + Ƥà«1á°U eË¡ÄeÒƒÍæPoìJ?/%)Ä5Qƒ?o4˜óùùz!xUz Š¨F‡L欕CCqKrÈ|œƒ§é§oM_ÿâO/"·Ìê tñ•°‚rˆHq³ÃW +œJv.Ó4’Ü&PZ+ YÅfjù"0bÂÂyGÿ6”'iΔ´U*PYèà¯ÿöJãì”*5iSú.ìu¨fþ‡à}ì!¬¨Âêg>Qnx§í‘W ÿáüÔ«f’[ù¢SŸý¶dß^çüî(qÐؘg1ø— + ú×òþK6_UÓÖFMG%š>ƒÍ«”n8™Ý<œéFʉXÀ¸7u‚œ-ó©N¨ ,%Ð]¸óFñ…ü6Z2…6•žMÓÚjt1¬#¦h. š+2iR\ÞÆ\/˜*ÛtTi^ÉHÜg2 /IŸ0,CýÖ„ø»ç²Ë¼!»*Pe"œIͦU ”ðoAj<¤(?^ÚOÔÌs¥Z¼&±Ry=“UˆT•ªF‰Š»ßÛTù’¼àQ;¿(cåˆg, ýˆÏšø¢}¤‰NÒä÷äb©6ûÆTÀ½'+®ãr\ì î¶kè” #þÝAAÙt}†ËTÓó” šþf51*êlñ +zC>×Iã)õ,/…Á·_½&™/™æIJìàš A¿Œs˘ùuÝÖ¦9¹ôÐqh6ߧ†?Vó®´ƒÚ›·ãÏ5„1ëFX³ÊÙB.aÁf¹GúAW<8¹>ûøùòì|ñùæêã‡7WóöÇE54*~ r悔Ԧƒ°ðç|jpL‹Â¯ôKVñaív¨|ÞBÅ÷úK +ªÈþ‡Löô—÷7Ÿ®~ø8ó ˜x],N”Ô|Å£HTs9WÄ©i†ß¥æ©é"ÓtHhN·z³ 'ïÃðETW×0dóŒGPýÛœwþ(…Åñ2‹g^ ÿº^¶{Ý*êÞt™Ï_È|ÞÀKaý¥¼Wh3Í,ÈEü"üd·Pm¦;ñWÅt¯ÔæÕ{fð“ÜŠWã q«j¼©)øOð +endstream endobj 649 0 obj <> endobj 650 0 obj <>/Border[0 0 0]/Rect[309.18 424.26 397.08 437.76]/Subtype/Link/Type/Annot>> endobj 651 0 obj <>/Border[0 0 0]/Rect[199.74 424.26 293.22 437.76]/Subtype/Link/Type/Annot>> endobj 652 0 obj <>/Border[0 0 0]/Rect[459.36 438.24 549 451.74]/Subtype/Link/Type/Annot>> endobj 653 0 obj <>/Border[0 0 0]/Rect[63 424.26 197.04 438.24]/Subtype/Link/Type/Annot>> endobj 654 0 obj <>/Border[0 0 0]/Rect[384.54 438.24 456 451.74]/Subtype/Link/Type/Annot>> endobj 655 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 193.26 415.98 206.76]/Subtype/Link/Type/Annot>> endobj 656 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 657 0 obj <>stream +hÞÔXÝnÛȽ×S öŠìZ4g†Ã!{—:q‘ÖiG[ X-Q2×)T½zŽö%ú–=ßüE¶X0)r8ßÿ9gÂÙnqýÛ/œíºE*™Ž3–d)“1kËÅvñ›Õâú–3ÎVÛ,Æ?\x¦£ä‘ +:LdW¶áR¦Qü-ËMägÑ“fœRÀˆŸ§XçbIu:Ӓʘiàç`ŸÞ}ù=+º®ÚÕ‡²î;v¹€ÕS¸LÈ£ž=–ì9ä9ybŸ{¶­~…y´aE½a뢮³´{ª¶N6ˆÃ゘ÏGß°‚mªí6#V¶ðŠîùŠ=¼ª7Õºè-²q ×ÇzÅfÖ¨\‰Ýªcä ¬ ¹B†_LžËÍ•ñ0¾xƒÑ«‡Ð¦vi÷^ŠHÊ™³.qdàS±nvkC‡¯›Oðó×À_ëdÇú§¢·®& otUûí`!u,×Õ¶¢T­~Z¤&M¯ƒ&¸à`LošÒI_M"%,ÂrY5ùM3—_tÉàŤÕÖ´™$Gˆ|‚ÇyH5ÿv“HàØ ]›¸©çEOS‰ÒvKÓNIPŽ”¼ÝHèëŠL“Ï"M†HmI‰XÇ6Š¨X5”È»i6ý¼èMžÛÇv¯QÓ"…Y?M_anÑCW]ߦ–Š—x~Û+²³›ÚnŠ¾ ‚ÌmWǯûÐùu_ö'`„ Üíeè|Ä-ˆ¡N-{ãö. Vr³e'€ÊrSn+_çÄe2ö[›$5òMîDì|anYÕ±®D2›Îõýü­Áæ¦m‚µ«™™îcS‘B1ëHOGxàznë©#7%ušõÄfÆË'IšÉ¹ª8GÇ憩‰m–öeH)Ù¶wµ[ŽŒèÀ>koŸÍÍm½ +•¶Ù"ü=Î4ÔˆªF§p² SÆãt(j<ÑAU†ØK¸­¨ CúÑÙ,nÛæ`bs”3G©P“ZØ–¸{÷ç÷=!çØàógˆªyü©„nA¥ý@o+ÄoÀÎÔÒ7špÜiÒ…ôaÑîNv¾©W¨ªÚ:m\q>/]Ê¿:äHú¶º+Π°©óÈFþÊì”h×{€ uKk³©Q Ê&Ž²™ŒÜcûÃ4†d»5&k®r]jnQ’c´¬;×}ñ3B×dö†Hü Š¾‚¼+!~/Aq,Ø$KõT©ëA”ß+LTɾCc"ÂÔŒ*°TÝœú‡ðê;Ï÷2CÌ KL´`` žš-_B<Žõ/Òõª5I}­Eo( +&‘n A‰·íÐ(=…!T¥¡pe‡™ïöÕºdMËþhªʵÕM‚}qœjöL ¸Lêo[繦÷£SQj)§H¹Í­=Øì¦f¡Í#xÓ9€-{Û²À{!f–=î©LøYl½qãÀbaÍ<÷EòŽÕtáHä¬Óyðmã’ÂÎ&ÆaɧmÓÄû2éY2É=õ¦ÃaêÃíõ{ôö]QïNÅÎÓ6õ¡¾àÃ$W0½/@£1Ä°ëü´©"šæÇ‚Kà^Ú÷àG¡.UQðÅŒ¥Y½Z »pÚ"ÝÐR)µ6éÂpÿh…åRƒñÀ :ý|,+ñ£Ø’¼ˆéŒùÞ¶ÅißÐ÷™ÿuÈ ck d"óÌ'Q9hëÏÇK'¦Ê³™ùÊó#ª•N OœvÒ,üjf#b53ŒOpê ¨šÕƒHfªøk N3¥¾a„ûí{ÀèÜœN…Ö¯\0Çî:åÒ~Í’©á%aOQCdñ5ÜÖïZ«%õ\º[Ñ4ÑLCÞRK^*¡çrI’\ÒA÷"F{¥àN⻊ÚäÂ&N>SBãþx¨ïé œrÐï*D÷ó=ü…š²º‘Þ½tìLÿ›“ƒÌšq  ’•ö¦¤‰ÿx°={›Ðh âÿ‚W…ãÕ—ªHœíéÄá±mv!'ZmCç‚Æù`.N"Ävôæ‘™r™Û“õ P,ö[7mK +díì÷ö¦XÛŸç’G[ ô¼º.÷¯ļȩ׭|^ã”jŒ3ÉDxzYnà +Ÿ—ûÛÂe,ÏxŽÒ­ø“æ(¤ƒ5Ü(C££G¡€‘Áµ1¯[Èè¶Ï ’ôRÜñÉ)™¢!S¤U)V=üÝzLò†XhòÏ+¬–ƒrE¼¢0¤ß`5Iï‰VSÌ&¥óðµ^­ÕìH|¹ìäàPIô¥To”ò—{¸Ñÿ›³ êõ/f 0G +endstream endobj 658 0 obj <> endobj 659 0 obj <>/Border[0 0 0]/Rect[384.54 222.24 426.36 235.74]/Subtype/Link/Type/Annot>> endobj 660 0 obj <>/Border[0 0 0]/Rect[384.54 603.24 426.36 616.74]/Subtype/Link/Type/Annot>> endobj 661 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 372.24 419.94 385.74]/Subtype/Link/Type/Annot>> endobj 662 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 663 0 obj <>stream +hÞìX]“›F}ׯèòS³1íþ€½cÏÖnÅÙÔDÉË$•b$$Ë# +ÐzçwdÿDþeÎín@¶“—”Ë©­©Mßs﹇Ql»xñïÛv kX&s–ä–ÉÚj±Yü}¹xq«˜bËÍBi&ñ‡“Ê3Qä,3RHÍ–‡…Ä.B&¸·\-b!¥4lù~qÏ¿~}ËR‘³›7_}žm#•‹œ7Û¶<võ–ý³î«vS®ªè§å¿`ÊxSÛ§,VBÙ”-_aÿ°ïŶwU¹®ZvSî÷å*Ò’?²»æÔïêªs»½^.Ò¤@HV¤– mŠ¢`"É¥L|pV‹ÌϵÐÉä9’B91î!‚SR¸D “|ˆŸÜÓjpTÛàiÙõ,Š­Èø÷ÇuIWŠ÷ÕÚ_°s^GÂò°ìMXÔ®Þ†EÚŸ¥J£X™BÒ“ã:ËÒB$üÛ¶ñ+Ö§UÏ~ˆ²\h^…]º`¢©Ãþ€Ã¥GR~µ¶%˜\N’9z¿2UQœÃFk©üeÊ"Kî²áüÇOŸ}é—»ùø“°3™P„œ°3zÀN¥»?×Õ—û=»ÛmQ¡j­”Hy‡–ìª6ŠÿO¤ nVk14ch§L»v²à‘kŠ1Ä+ŽeÜ–Û,Ù™c¤,(RéƒÜW‘†oÚ7`ºjÁTì7î÷m½ŒÒOh~œÑÌ™ÑÈP’ÂÈRè€ÏÐÈwUДBí`UaO„˜âTEô£cë²/Ù¦m¬[±`) –¤°:õxÉ1þæåÍÝ¿£å»³K挩Š)´14¤Ì¾>û‡«A3‡Ù†P‡ipFÙÊ P.Ù±ÙÑWeµœjQsÀ?=ßFÎæ¬Cº ZÁðSDŠa7=] +è’Œ3šS87îqËM[ bw5ÇPjo†šÑ¤t"|ˆ4Ùè–m~æü2úÿ¿A…éA&Ì@Va䤠—ÄõÁcð<ͱØ^žñC ‚¤fG6 Ü>™ˆÄ¦C’ú'â%µ7R9€€ú}ðªÄhÕ±fÃN¢1I_À`}ÁIãG'åãôɧ֋8”pWõ…¾Ý}'úƒ˜œåo6}UûªJŒ^ÎÄ0âP™á-?¼±ÞIœªÛmë t&ly-‰ua5?øÔ\'£N¼‘|s:øAá›×ò§O +a 24P²ò•L„°¦nw’­ð’È èÉÝÆaƒP={ÜÕk‰+D§´|Â=2…ÈäL«’™%’âDñ N»Á&©7bžvÄ!éÈÓ°¢¦å¤g‰UßGŠ¾FJïèÓËÇÁò U3){Þ•‡Š¸1ãÏ}eèi¼l,ÑÙå~ðáØ⨦¯{>»/â*(“¹¬)"[Oèê| xE¢üXÕkúICân`a“èû@ç~Ë +L»ßÓK­ÿG9Ž//r©ò¿ŽtÖ:™Igõqé¬51EúñìijJ1iG;¬ñÈgøÑ¿Ð&f–2#–© ê²>aéa&[?fÚŠ,Sês +g”üo N +endstream endobj 664 0 obj <> endobj 665 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 666 0 obj <>stream +hÞÔXínãÆý¯§˜ŸÃ&šåÌCÎOÇknw×­]Ý-QZÆeT6›×h_¢oÙsg†”H9Fƒ´ŠLIóqï=çÞs/W²ÍìÕ·÷’mÚ™Ñ,‹s–ä†é˜5ål=ûf1{u-™d‹õL*ã2Ï„ÍY¦c+¶ØÍbÜ"â¿-–³¹ˆãX³ÅçÙGþæꚥ"g—¯.¿úŠ}×D29ßošb·«ê »©»²YË2úûâÏ0¥½)…ëS6—Bš”-^ãþpïɵwe±*vYl·Å2R1dwûCWÕeën»ZÌŒ™APF¤† ¥­µL$y'><±[DÐB%£E`B´[DÌ"Öá`“¼Ÿ¼S²÷S™àhÑv,š‘ñ÷O«‚>IÞ•+ÿUôÌy Ãö·aS³ü6)ÿŒeÍ¥¶1}ÑŸ³,µ"áß5{¿cuXvìC”åBñ2ÜÒû:Ü6:1Á«”É_r9I¦äý‹I ;9lعŠ¥ÿ˜²È»¬þç?|ëÿïåÃWâNgBsqÏV=w2õÜýo]½ØnÙ]µA†fȵ.’"å-*²-›h®°ü§HiüX®D_‹¡œ2åÊÉ@F^Pl4™9Q——†¢Œ}€ÐtÜveݵA?Œ¿É­„ÖN;DœÒ1Þ}yŠ?5F +›ô›@DÅRK¡ù]Ù—ÊJ•B-®+Y÷©èBMðcA+Ø&ž¨:~ë SJÄöÄØ Þ_•Oe½"ADvŸJ¶,ÈW+òñ”Ô%ó>zå“eýȯ}Þ ÊUdɉ‚º ²>ÆÜŸ?´à‡-`oiÆ÷þl·ûH¦øð™‚È8¹EѶðªf%xëñÈxÝ3<`O@3¡^[þŽ6^v/‘ ¦X H,(b! «¢+N8ȉƒÜq@›*¤eN8t= xxŽõ8”͘ƒßøÁò#ų̂I=ÇìG¾Žà±%dm¬åŸÉÌcU¯Z¶_û0ΰ•/`+å²tÉZ%ÎrG8ÿ®6ÉÇÉ­ Ö °ºdÈøþа‡ˆ‰‰æXîJç.€hæ«rÝg¶M¢CüJx…„\¹ø{c>Ôªemٱݞz#\&(¥=ƒò¨iÎi¾_w%˜Ù£øžö î4²0¡´°ŸÈ\•mµ©½+¦^s42NvÜ'êøÊ +“òLEg[Fš¯›·ÅÏxÞ#ÏÀeÁ{dޜФ9ßý·Uqùðˆ­×õ"Js‚‘~~šL;#ÙÓ±$7‚ñ¡äe(@å·¤º„3trŸªµŒèK(Šu³ß¹¸ƒ¥4XŠ…QgùïèíÅ_?Ü\Ü/..ÿ2Ê#ŒGç5:0ŒTÚ?üXbð¨|ÕÐh¶®=çÂ;`Ež¥Ï)YHä†;\4AÎÁ×Úånu)‚üŒÏRDPÓѸÄÏÆœë +ÞwÅòÂÍ…}Q!Ør[´-¥aã© ®@TÄx†V€á‹>ñ\ÆyÅú†:Ótª Ey >!˜ÚXû¥îŠŸ=ä#÷¿¡Fßá//º +U<@ðÈ'a§MÇ(’#Ïïnß½¾º¾xÿfq÷þÍÕ$v=ŠÝ„Øûi–µ]Ñ•DÐרà’ý V»(C>ìd}³O+t”‰E®XþÒÈÚã=Jz•Ð á°;á)0K4…&÷Ïa°§3†*_£E)¹}ærkhùôþ¸ʡѧ­Ç!ñ8è^ÏÛ·Lu|óxøØ›¢ÞŠM‰¡Ç)|Òñ§)ë黌L¼Àô„{Æ"äÚµeh·jÒ­ù½Ë·{±P~»Öøwú,d¸ƒf(‡i UdøçÐ":ù÷Ü‘‚D’^bzyá +§¨õ=Ò憚 +Mâ“è>$ô Ÿ&Ã|5xI½=;œÝ«½¶™95DFöÓýöPbúïk¦‘êÃú©€ÑŠÐˆä(Ò:ØÓ}{Zï1µgÔ.tÌÏ»áHßó£Û»›ooÞM ÿ%ÍLGšÙÏ—w·ãËü2Ú£>ø\“âC~ïïHš?[™íÜßüíj2šë²óa¾øl-ï>Ú¦@«ãüâ5f±u@<{pß] n’0b‘ôÞÿwYjµÈs÷{øÿ´a%ÅŠ + 9<¬`¤M¨SãÕ'_—d©;ä—&7&qæl/þ[€¾ +endstream endobj 667 0 obj <> endobj 668 0 obj <>/Border[0 0 0]/Rect[449.34 438.24 543.48 451.74]/Subtype/Link/Type/Annot>> endobj 669 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 207.24 446.22 220.74]/Subtype/Link/Type/Annot>> endobj 670 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 588.24 456.36 601.74]/Subtype/Link/Type/Annot>> endobj 671 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 672 0 obj <>stream +hÞÜXÛ’ÛÆ}çWLùi›£¹á2ò®6•”.®]Ê/–+…%AŠIl`¤ýç'ò—9=3p%Ë•¤r©­ZÄ\ºûtŸ>Å6³g¼Slsœe†å²`¶È˜‘¬©fëÙ÷‹Ù³Å[¬gJ3‰?\T‘ W°ÜH!5[ìg«iñÛb9› )¥a‹³ŸøË7,»zvõí·ì‡&Q…(x½iÊý~{Ø°?ÚªY—Ë*ùyñgleÂV˧l®„ÊR¶¸ÆúqÝÁ²·U¹ªvUîv÷å2Ñ’`·õ©Ýª£_íÅb–Z—2‘fLhãœcÂRÚà\¦EžuïáµÐvôA¡˜ÿN÷!q>Žá¥-:ÿÉ<­:Cu---Kæ™ÈùÛ‡UIwŠ·Õ*Ü°-] ~HDÆã°WqP³|ép•*MæÊ8IVâ>ÏS',ÿ¡©ÃˆÕiÙ²“¼šWq•cÜ¢>Äõ‡¤øjå`2ÙÚ)zgʹd^`7×R…Û”%™Ëºë×_þãCÿwï ;“ EÈÉ;£;ìT°û÷šú|·c·Û 24G®µ‰)?¢$U“ÌM&ÿk¢ ~¬V¢+ÆXN¹öå”G¾@1˜åÙ€^|^fä¥ >™¤ãæ´¯í1HBrkaŒ'!SšÆÛLJdñË™d”pé9‚ÊRR(?͇ð6™[ò!™ã{‚kºÀÝÁ?Y¢¤ÊñQHi‹6¤qýTäÂÞz¾«ÖÍ«òÓ][.?ü¸-¯î?,ª±yF(fÓä`Keê­ki†kqÁï·G&¬Ã쌈»ú¬šƒxÓ|È©´è™®TX´­€KApÚFø¬()óõ#û¸mßoa}…õöÐÔ›£À6IÿeB÷{Öúáp›Da¨ïË–µd>yÀ–uÓT`±e¤uåÙbŒîZ=‚Ø:{Žî>FvO85B#‹vÈè:ÑcÆ–òÛ*`#ÓÁÌ–“aõ–zC„Ê)й@Û<¯lF8o8 *„% é[;¶ýB~BƾlO”iaV r€oq”áì&ÑôXû¡ Û×Mu†Þ©i7>¥hŸíaƒ‰„¼æûÄð²ÝÖ‡ïرŠ‹äÂiŸHÌs!þšXdÆ.¡ xµöOÛWþR~Jˆ îÚð„.M‰¿u¬ À.uRš9Ÿ,"“}=œYÁ8ƒ‘º§…¡*à -î¡ÜT¬Ð"ºO zI¡UÙŽaÑ"›b)†Iâl¡ás’J’I‚0jB%qOÕ‘óGF[Y½f'ã|…‘çÕ”ž*1Ö9¬‚ˆY12M°·˜æo©@ŽU dIRÀ乧ˆaMχL!•7š×ë¶:„¼í’˜fç"&mO*X€ñíûŠ­ªãvs¦„0©žž\pñw ìT:‘0´^>Èb»×õáºZ—§] ²»9,¨/ÉÂFÊoÔ(Ò®èVìä‰-"‚@OßV‰Q¨TO^–J×­Ûº©÷Þ—IÕJaÍòúÍëë7Ïß¾\ܾ}ùbRµfPµ6¾ÿ…x ÌH[‘@]owÁ9'd§p§R6±s!Æk·Ç åäÓžŒéj–…¶c.ÚRP‡Í䘇ÎL²a8œXîÊcB­ è7!ºšb«3YŠ+iáó!° ,õ\<´7XyP¯°ãã¡-?1â]ô\£Á5sȆ•÷Pï}ô&`Auÿ,X1)‰ùòžb˶"Õ}ƒQ…úª¦H±ÛÓ®ú¦ã*k0–Y¸Ê +eW©'¸*µP'8MÙ]“ÔX~ÒùïÚN¦ö×µ3mû#Ò3„…½,›±âmð+ˆø×T‡é¡ ÝÄ™3®zœ9Pâh8:•ßy€ýàÅB‡Ñ`ö,•èÆ¥À,´ö¾vì ×ŽÔðŽµ+ˆ”è´"é¸uçàä‡I¤¼xúKŸHûHLk:Àù¡ã÷2°·’t`>tœ×±«q¨ïÁÆc«©¢`A´ú“íÈŒN'»ÿÄWt0ã¡ |… Ö.$ÉglÀ†æ9µ•­óüÒ:`rt½± è{²°CÞ%cÆR³v)Òš +}?Sÿ +U®)Cäg Âkrã5¹é5¹ñšÜq]ð<úÁà ºãY„ÚÒ¥×ÿÌ#NõI*œŒË9)Ùpç9½ôŠb–tVtôú,Ðdöÿ«Í‡j $ô´/Dùï•â õ™6ñÅ8jAÝRäõD‰;¯Ä]§ÄWâ*(q”¸‹J\y%î¼czܨ©jë`‡¶Wå+òÅaNÀ%ôÓ@œÿzv‹ØÝù®5× ºØi†Œ¦aOˆk¼ÇÁ\#[F•]t–™m¦2M:ýz¡=Å^wØ»)öš°/:…]œvᶞ*ìm—Üv¨„ú[ükŵÕÿ5ÚZå2ÛIa3×oî‘¡§%¥E§®‰éL–ñ/jl%eÔØóÁÙ³—Öy”Ö&Hk㥵ùmiu­o %Þ|7ùS\~ßè¥ìÎñË$¼M y}Œ<8ú.é4wd½'ì@B^jáWϯnߌ 13"úd¿õ>9†Ò^œ¼LspÁŸè3Ð¥ì[¤OЯ›Ž{Þêè]îËì)¥?H‡Ï}qx²Ãxý?ÿ¾»xüï{=L š0ùg­@ +endstream endobj 673 0 obj <> endobj 674 0 obj <>/Border[0 0 0]/Rect[366.72 291.24 486.42 304.74]/Subtype/Link/Type/Annot>> endobj 675 0 obj <>/Border[0 0 0]/Rect[368.88 672.24 533.28 685.74]/Subtype/Link/Type/Annot>> endobj 676 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 441.24 448.08 454.74]/Subtype/Link/Type/Annot>> endobj 677 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 678 0 obj <>stream +hÞÔXÙnãF}×WòTL¢êÚ¸=vÜñ ƒôtíäÅ h‰’•¶Dƒ¤ÒÑwÌüÄüeέ…"iw` L\‹Uw9÷ÜSRl·xõ·ŠíºEfX. f‹ŒÉÚz±]|³Z¼ºVL±Õv¡4“øᤊ\”ËR³Õa!1‹ÏVëÅRH) [}ZÜò�f©(ØÕ««¯¾bïÛD¢àÍ®­‡ýqǾ;öu»­ÖuòÏÕß±”ñKiLŸ²¥*KÙê æ󎦽©«Mݲ«êáá®Z'Zòì¦9õûcݹپ]-2-ò Ne"͘Ц,K&l!¥õî9ÝK8-´¼DLh€q/áó‘ÒÅ¡dxi‹è>Y§U´SgÁЪëY²ÌDÎxÜTt¥x_oüÛÓ¹àÇDd< {µëû0Hû³Ti²T¦”tc®ó<-…åïÛÆØœÖ=û1É ¡yféÂÍ1Ìl¸èH +¯ÖYNñ%“­'ï¿L•e²,°F¹ÔRùË”%™Ëâùå§ÿûпîäÃ-åÎäBQædÌÑ1w*õ¹ûcM}ýðÀnö; 4ÖúD‰”w¨È®n“¥ÉDÉI´ÁÃz#b-†rʵ+§ 4ëéB,xŸåÙ„TàRðMå}»N ˜7 [Ö}õ+Û·‰..Ï“¥&C‰Á]ÕïQÕøõ÷5# ”“vƒcžèFÒbüÝ7’ÕÏfR ³!ì2‹¦É<„½ë«¾>ÔÇþkÖÕ5ûâmµn¿”’ÂæéðµݸoÞÝu=¬U‘=%K‹ÓÚ™û!ÎõEŒ¡É@ŸbdEάeer ¬I0Sc„.F£X†µ5oÜÒ”B•#Êu,6Äá–÷DG¼ŽQ³1Y\"þÏ +QQ¿zƒX_w§jW#Ûħ5yjy[çä¯,5—y"„OCèEKJ—E‹€‹é`/ea½à ÜøÕJûJãmÓáLj÷aц>¼åûcÏê$ãÛÖeåäqu÷ñú¸:ãñcý÷Hùs *©¼Á·õ¶E3Â(êGWçÇú_C¸²àšÖDç„L=€x~œZ«D™æãð¯iè_˜m´ðÈzX°‡Ù° Zþå|}‰&hËÙú·¼¹£äú¶ù+4 d}ÞŠ: +bû¦ê«¹ h!:ÏŸXàz#ï«™ @Š,ìØ„Ÿ’ &Ü‘ê2@ýR·ü5T‡Ôv'ª¥njÚ ƤÁœI:@jBÊPõ* (·‘loË)AÇþDÔSàêèî;F¥“Òûå¤ÂéˆMÒ Ú LSž¦V*ØÇP«d”¥ÝÓ¨Í[Ýï;¥ÔøŸ:v†bÂUs +õa–æcÍ5¦^§l 4 Ìž‚Qᬽq'2¢oÏìÓ¾¿«¸ùAƧ–=¶Í.Qž”‰ +GÐÖ{ZD-eó(Œ:Ù}E” óɶnÚ¶†ÌYÙ§Jö£˜&u ­~šYÛ%ò;éõ°qØMíSšƒµ Ô,';›=IW†€T³´‚aÔ8­f’Öý(­3 +Q–£Ï”‰qȆÖBÁ.„¡.ãº?® ¢ª ìk‹“ ¼ήM·Ú²CÓÖ—L—jÆô>”híW£n +ž†pLpðîk4Szäš©ïoÿ<"=ŠÞ±ÿĆ¥KDÃ2k 5¬m+4,õLÃ2x¾±6Wq9ôlÎЩ• úY‡ÐEä?“ö ÈèwóC@+Nó®)ïòcPß¾ ~F|¡€êŽ5[v‚þYn‘l«GÔ5(k~¬7ŒÌ DÙºKBwW÷Èm×[ýlš<”Çò¶¯„‘ôq.ò±LÊX¹ìR“ÚÔÝ~wô–LIÕøŒ¬¸+· ÛÐ.}N‚0@¿$ÀmÛ÷ûÐ)“”@zvçÍ}Ì×ƸV&ûÜØ!ž^2¾¯IóYîÈÇÖ]ºÈmÛæàü™ :é`0DA°ðþ»ÌT]^>ab2EG9ÝxŠ¿Kpø™(ÐÖõof«çhôãj¾¬ýöõÕÍ»ÉêúRùã禈‹ß¹%ýrN»n÷·CîyÕ†ê\kÚØÎ4.•¦õ&ó3RŽr¦«¨Ö‘ä‰íMhî§WŽÎòõCÕu„ÏaBot æ²))—”IÉ=é}…;£ç)¯—QÎc"JLäEì$ÒÐzºÈ‡Ç ¾–tzÑfÀ–O7/….Õç·n¥Rè1õ NÅÿ °g@¤ŸÝ`¯™.¡*´¿œ‰´,ËâB¥?5, &B¥Ü†RŒ¹lúÄpHûDݘrfªFŒt½c)SÄmC7©—]Od?òA ‡çD¿¾ì$¼Ð› ~?À þÿEïk À|^îäuþók|ªÁŒÏ…5xQ¥aõû¸OH¶¼LÙçÂä&ýó {e‹Á¨´¢+–‡SöÆ){3({㔽qÊþ©¦·ù¼°/’ޣ쉔ǔÉ#‹æ)†6•ò$þœ” ’ò^ž{‹0$Q–Cœ+êÐç(ÁYz)Ú‰ìŽoñNa_d¼¤úM¨”+*eê¼èñŽrÌAvÈìò킘÷7#Iï@Øû ’÷ЪQÞƒý~`u˜:- +endstream endobj 679 0 obj <> endobj 680 0 obj <>/Border[0 0 0]/Rect[369.18 127.26 398.34 140.76]/Subtype/Link/Type/Annot>> endobj 681 0 obj <>/Border[0 0 0]/Rect[485.28 508.26 549 521.76]/Subtype/Link/Type/Annot>> endobj 682 0 obj <>/Border[0 0 0]/Rect[63 494.28 123.24 508.26]/Subtype/Link/Type/Annot>> endobj 683 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[234 658.26 337.98 671.76]/Subtype/Link/Type/Annot>> endobj 684 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 277.26 411.96 290.76]/Subtype/Link/Type/Annot>> endobj 685 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 686 0 obj <>stream +hÞìXÛnä6}ï¯ æIÚLsDR©ÇìØ^x‘‹awXL ¹­îQÆÝjHêLüÉOì_î)’RKj{&H , ´n«êTÕ©# ¶]¼ùÛ`Ûv‘)fËR›1•°¦\l]-Þ\ &Øj³’%øÃAXÃsËŒJx"Ùj·H° ORÜ[­Kž$‰b«‹wÑW—WLsËÞ¾yûÅ즉…å6ª·M±ÛUû-»Þwe³)Öeü¯ÕßaJySÛk¶\dš­.°Øw´ímY<” {[<>ÞëX&Ñv[»j_¶n·ËÕB§9BʸΗ*ÏsÆS›$©.“ÜdýsDÍe:yPå"è’Ü‘3wBûÜý±®~ùøÈn«-*Ô ÖºXpµhɶlâ¥ÊxýK…›åï›1´“‘®2ðȉb²9Å`af² ½h +1¡è¢CµW?œøBHŽ.ÐH²€FjRÆmÙá™4pÍ–ÂÙ‚êŠè‡u5.i¿aÎ{t““ÕÇrSÝÌ,§\žìŠÁ®ÍCÚ®¡¦…Ùc¼Ô8¬áH‹>p@E`^Å’Ú¸ö ¶ëÏJkît+á—Ð}bqÜÅt¯ð+:wQ…W÷¯}@dÚš“:x\£I9t¢¶,ÙÏ!¸_(:$Kª”eYÂmÊÒ„g’ñ,ˆ);eJš”žg`SÚxçM¸dE ¬s(¶%3‚3[È4È‹g +Ì)çÙ$ÁEW|2Ã2„äóKJ°E‚™$â;6ìã§O€ÕZ¶¬Þ°#juù€¨PÀ)•£Œ,íËFîpöÞp§¬jY[vH‘;Ü\ú× f3uÑ•…pÕ›®Üûbë+Þ5ÜØQ`ôôÖwïKöP¶ÕvïñÀôSYÑ(v¹pghmP¾¥‚64ªïPÁ±ÂPØ4˜Ä@$‹êÃÛûWûUŒì©èé0›Ã“~Ô:4cpÐÈS‰Ë¨Âæ‚ú] $ÀAµiê‹`Ú`"á:…­N¹¿¹ýöæòvõÏ‹Ë«ëo®W×ß~s7-ÁU®GïêÞ#Ós_}ÿC‰QXíeR › +± Fryt÷‹f{Ü•û® ½"Źì ZDP„ݼ/! h;çÏM}˜…;-ú–2ø¼~,Ú–Êô€F¬4Ê,ÂzJµ4Ùq¾øe¨"¼PðÐô‚è-_ŽCÊ„·uE‰ª‘£†µOû®ø ±mbiý=t‘·,eTt¸¸‡ª€œ¥ÓÀêߟÇi¿è<‹®¤ ½fÄQ¯Ô0`,‰BO³~¾¤VS64J ¥Ñ‘ž´Ä3¤EÊ-·[¼¾ lWxû*p¡[ “ |HQCHÚg6Hž7Îz.ñ0­¡Ôã zž×Ïo€ûªØoD¤·e µ’H®)÷séŒÉ’}6»¦¤ óØcþÈÓXpLݹŠpËW+ÙÃ<óš—N•s%ÅH±‹#–«€O¾¼`áTñ$8RÌa5Ä;–“~ÿ@‹ÿ=°D6”,Ù ¬{:LýCãêžE]ÐÑëž–U?2<õ—úþ23 å!¬˜Ù} ¡#êl·x0/Qg”gæ1¤e¦?aLë͈r4æÌ÷ Nÿ¬ßÇÓ11.}•¥|^¤ï¢/ñu†¦‰)NÝIü¤ ê! /Œh¡Bí«PË·ñ2Å!úR‘ŸÖg{wÝ>3#4OÍóÔâ+Í•ÕÍÄ ë*;¡í¸¤£u`õßµ¿ñ±eO±ÈqV‰€Á³`kê0¹Ñÿ*Òj*Ú<õº +Χv4ñuÏéÀ>VÝ{t¼Û\;!rhêmL³ü1~h>ßÏò1ˆƒHÂ¥§}! +Â_°uÝ44ñÖᾉý ¾Œ1CòèŸæs ®BÏ“äõ|x=«¯Zû-ò:úy}}>7‡ö£a'ú A_cÜõòßG ¼” ¹"¾¤qG¿$®›ò”C#ôsªm4—i2zé7HÌ]L·Ü|ô³éçÞù_úq$sD™Bç4ŽRK’ìÅy¤è9“6÷e>Dëuú ¦1è¦bštÁ ¹ü¿’þJZäv¤¤íDIoš»ª+Oò9ýŒ|Fô©Á³l¢¡Ç©h0 éhǖ±ãg´t&ÏÛéîzu9É<|œçýê'U³uªÙ§Ú2?S|ýŽ0{¦­]fÎôúçµõ8drþíz’Øÿ§$ö@lj>—Øob`›øØ‘>}¹,éà+¥µßzÔãò2f¤ªÑ>SÖJèß#;÷!ö«¶T¿5µ&/(iÂîUÏT*˹°(SÇTøEY¾(r!Ǹ‚rU=UM Úþk¦O¨&í½4FŸÔnÿß’|øgé\ízðaÊŒë€ÞÕ£^$M,K ÖsM¬y27^ #òÿ +0äO½ +endstream endobj 687 0 obj <> endobj 688 0 obj <>/Border[0 0 0]/Rect[398.94 344.22 508.08 357.72]/Subtype/Link/Type/Annot>> endobj 689 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 113.22 429.96 126.72]/Subtype/Link/Type/Annot>> endobj 690 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 494.28 407.28 507.78]/Subtype/Link/Type/Annot>> endobj 691 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 692 0 obj <>stream +hÞÔXÑnä¶}Ÿ¯ òD5š¤(JzÜz³AŠ4XØ“¾lŠBžáŒ•õHIÎÖßÑþDÿ²ç’”,Íx7‹¢A»0 ¡$Š¼÷ž{Ï=´b‡ÕÕw·Šú•MY. f +ËRÉ:·Ú¯þ¸Y]½QL±Í~¥4“øÃ*rQ,O¥šmŽ+‰U„4x¶Ù®ÖBJ™²Í‡Õ;þ÷oX& +v}uýõ×ìm—¨B¼=tÕñX7ö}3¸n_m]ò×ÍŸ°U¶ÒX>ck%”ÍØæ5ÖëΖ½qÕÎuìºzx¸«¶‰–ü=»i‡ºq½_íÛÍÊj‘[8eEf™ÐiY–L˜BJÜóû—pZh³x‰˜Ð„Ô¿„ÏSDJ‡’á¥)F÷É:­F;µ†VýÀ’µ9ÿé´«h¤øàvaÀjú-x“Ëã´?ÇIÝö>NÒáWª,Y«´”tcRŒó<+…áo»6ÌØ=nö—$/„æ.®ÒÇ-Ú&®4|t$…Wk›S|ÉdcÎÁûSe™¬ ìQ®µTa˜±Ä’¹lüýüŸÿùÔ/wñé–°Ks¡99b—ê;•ì~_S_=<°›ú€ Í‘kC¢DÆ{TdïºdZQò_â¡Û‰±c9åÚ—“|‚a0ÑævÆ.>/sòR’ƒüö©ª¿'›_VW›Ÿ—¢´¡4i@KdV¤†– ’Léëw¼nöàË÷Ým=¸ë»÷ošÍÓÉýÌCl…ÄþT’Šû5¾xpû4ƒOˆiÞÓä¿9ËFÓ•0)øÏC"d&-íƇ§ÓÒF%Ê,Ó<«ñoh +[¤%¸j¶ñÌfXPÃXXàþp¶1‚¤ +u¶ï;Þ£Ú9Ü “§íµ°²0—ÛÂj›}b÷Ÿz +Y÷ºªs @ +:Ï/,ðlLJê7-ø9ñ!z1 ²Âg€G?®û +M$®ú¥-`5-Ò4‹¶,0›‹Â û\;Ê{IEiï&Y‘ƒâ:<"£uQãï{6ÜOØgaÁL˜Y-Êô9K)sb’QÖ,Ì(DYfcÔ|¬}Ý4Oe`jÁ6÷uÏÐßÚðàCÏžUbÔ>²¡e¨1ƒ—à+É/ºG&ñýS°q­Œ0vÞJ½‰YtYG¶øP÷uVÏ°zÇN]{H”Ä]—ä¸V .G8_ ae¼+çQœZŸŒ­o;dhAp¼7lÛvC›ÚÆhÞa€mPò÷b‰è<z»€5¸§ÿ¸!ih "¸. šƒÆÐv ­Ø©­I‡PL«3lA%*›eë„+Õãrk#¦òŸ‡£ˆÀöa„¨ñÇDÃá- Ò r.C±y“¤ô¢õ¯;vl;÷Œb®.PÔ#Š:lQ7{ZÍ>Á%x©ù1¡GÕP·Í7¬wŽýc´þŸ#5ënfJ(fRÒv"ƒVz–<ÏE™Ò{pxYL…™MªÇ§g§êàXQ +B4Ó¨¹¹|ÌÑaYžƒ© Ì`Ž@ +ßAbø„ºEr=k÷ìj½ƒÿ!‡až;iÞ¸#sñu~HYÜ»°¤‹œmô‹ Œ•ÚýàšYcšÑǹ»À:fgüÊcÉ1ŸxfçúúÐK–$éAòøIQp„-b³›µJâï$EFŠN•m"zäËÄ䟠&YÁSxu:ä RN‹"væ‰î¼évB…2]•jì¬@G`ªÌSªòêùïÚã dŠ +±ú²ânß¾ºþþÇïÎ +NÏBhFóXpíÝ/Ä4@v¡#þ~ðÜj¹Ç5™ò‡yåø¤êba”1”àHo±·"sU£|äK‚qÅ©Ú"Ú ëqìùßGo,æhýö¡ê{ÊÄ:ã>¤…¨¤pSò$ô¾Â%‰§‹°4ªìüøIDC4C$Ó{ň:tž¡ ˆ5Ö:«îpªšbx†ä`ñŒÖgu¦U‰«ÁQ ?}u[ÝúG”Z ÛW´h +úŠh*5DSJ–BáÀf}õ\òT&‘¤&ÇÚHÇqÏ’&" ] jy.h:ÒÚéK5=¯^#?TÍá‘XîÆ!vÔOã:לŸfÁÞe~™ÒËŠ^ÇYhßú™M|žØÕ9JÌ••»!œ_Žâ]YN&ŸKÎ\:K/Eï‰$'œ¤”ÛRyœómú‚!è2¥²ÿâW0¿hñ;¥Ü…þÑç3<ë#K)Œ#ÜR +Ó/…}OiIðæÜ â(–¬Ð—’לױWÏcÑÒSÖ Ê’xž b»ÄÖ bK‚Ø’ žzȬ…˜°iåá>êß™ò ÿ°ò+_ª]D)L9‹iÿB#ù%ïØËmQå ñ›P @‹Ú—ð° IüJ'.Kí‹ÅÕUúÎÕ¯RôJ‹†f?ÞURz©yŒïo*à"(`lóo˜zñ +endstream endobj 693 0 obj <> endobj 694 0 obj <>/Border[0 0 0]/Rect[319.86 550.26 499.8 563.76]/Subtype/Link/Type/Annot>> endobj 695 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 696 0 obj <>stream +hÞÔXÛŽÛ8}÷WðQš‰ñ"JzLßvg‘‚n'/ÁBmÓŽ6¶Üädú“ö/÷IÉ–ÛÉt‚Å Km‰ÅS§ªN-Øzöúw‚­»™Q,O ¦ ÃTÊZ;[Í.æ³×7‚ 6_Í„d)þpEÎË‚å*å©dóí,…žj|7_Ìž¦©bó¯³ûèíõ ËxÁ.__þú+{×Æ¢àE´[·Õv[7kö[ÓÛvU-lüÇü_ØJù­$Ìg,\˜ŒÍ¯`?Ø=2{k«¥mÙeµÙËt — Ï ãR•eɸ.ÒT{çŒä¹žÃk.õä9H!N”{§GJJGDÉðPƒÿOŠ¨4iÕõ,N Ï£÷ËŠîDÔÛ¥¿a5]‹¨‰¹‰Âk¿‡—Úŧð’ô×Tdq"T™Ò?Zã>ϳ’ëè]»óo,÷‹ž}ˆó‚ËÈ+]Øb×û‡£'%~¥49Lµ>Þ™(Ë8)°G™ÈTøیņà²áúòËÿýÕ¿¯ññ_ŠÊ¹ È¥Cì”b'2»Ÿ õÍfÃnë524G®õ±àYÔ¡$;ÛƉ2¼Œ¾ÄRáK»äC1†rÊ¥+'9HŒ9•¼hr3‘—Œ\LÉ»hYõU<ÿÏA0„ä(Ó‘ŽÔÑA7¥gãÖö{ “„ÅVì*V’êbß²¨nŸâ„œ±Û­Ø®$K»ª|¡¸–Þ~:˜vE5vÉgï±ÂݲºcíÙvGµ˜‰_~гF2á,íV½mX¿c{ÜÕ$ŒnqÎóâȳQa@­Âûý'Ë–¶«×Gâ™T[‘T;VÝ+7†ˆ f­÷ÑÆÆ +á]µw}[ÇñkÖ—Ÿošylˆ¬§Ç¡ž,+58— ùˆ ˆ“ŒjìB|#E4.ÖÇcY¯V1„/ZÛôìsÝ,]$Þ^!H³ì aƒ›†9Øp±-£]ŒvmcúªêɤcŒ"Õz„æ§3"ë-Ë „>yÔ“ÂðV›¯1å\TÅJàòÔ9›]µµ±0øâ%=ÙÇôÙûº%$éùÎ&|:‘•jÑï«Íð±¥x܈#ßUHB¡=@fÉ¥9PáƒèαwpdõÒ>ÚfImÍ€6Z wÒ¿­o›±Èð¢¯×Äm˜H.ò36áÐÛnÈw–é³Eº·–Õ ¸W‡oA›AÏغ¼ªú;WžrÌùq8õ ŨÑwOM_ýù +%ejŸÞ:$ Ø#§Ë<ð"ƒÂë+Øx[5ë}µ¶(—d9e(²M= OJ””e’*Nä%M<ÃÔP)Õ³Ä×e ª0Zd™+0§W£RM‹‘¤QQü—!p £;ç¦{}>—þý’—ÆÏtCãF™‘ÐùÒ•. î#hCåu;”,ŠõcäÛ§2§vŸÒ¼rå*}ÕbtÂ"šž>ÓËÿ¶,·¹Õª,v3ŸQÿô8E)x™ å\^ ª§Jpx´ñêÅ®<.€àSÕþr²5tZÊòdçû¨ë1ÃDp‘.k¿d„öE–ŸbSÅ·`€ˆÊ í +î™çÏ€¸I.ê«’›´ÐÇ>ÆS5>ÖK ð .ëë>zƒ!í"Zï·¨én +'¥’T* p&ñøV/T“†uÜ õÂÚ[1¡ê‚<žJˆt‚ŒUNC|ñJš•Ç-D°|N_h6GaLçAf‚z'=q¨_ ÛÎ"ºðòHÒIºŠ6›i•Š¾®<¢-É;6ìÁ¢\bó)‰‰g(ÁYÄäƒrJ¶s5ô×ãEr–Óq¾pò}`´ F‹ ÊÒ‰r1ŠòÐàLq¬ˆÙ¸Ðá¾Amj<r½­vOf‡ûÈiaè“Ô2úJÛŒÝ×¹ñŒVqL«8ЊQ†Ü;liA6‡“ÕÊGJ L)²ÒÏ‘»ÓÃSòÑ¢?bÑqEx‹ûŽ] A3:X±Kˆ úçxú ¶²Ç”g§aôA'=„¥‹º' ”$q’‰[Ðìt†R&ÍË­Zš 0k ¹°ßmÕí[û]zŠÃ™ Åaí÷ÁŒç7™{Wõ—ÚŒ?y ¨eÒþÁYx1A¾®ÿÄÛ¡ÏljFx¿'MnÇqÙ‹÷[½sÇæE»cv]7ÍX¾/rÖ­t _Hô³¤ö{_nª®csPî‡ =þPàg†`¼˜‰r€S1qÝ,¿Ç:³3–¼xÏA›dЦqAg@LUý敺 ó~æ»%~$?XgV&˜Ä“¡cÕ³™ø¬Ò(¯ÑԿЉ/4¹ÍÞBè~‚èèS?i€PGÇ­¥ÝÔ[”æ»X»³DÝNQd¼(Ïôƒs Ûä Z±)¹êhñ¤^¼¿»øm~ùÏ7·w“ðâ<´G>ꙟÂY×W½¥I„aJv?ˆi®5SyŠ&ÃÜ ãOÃ#Uð¢…ß܆‡"/hÀjŠÕøPº`êS‹"Mi‘>1÷?‘¢á +endstream endobj 697 0 obj <> endobj 698 0 obj <>/Border[0 0 0]/Rect[384.54 356.22 420.36 369.72]/Subtype/Link/Type/Annot>> endobj 699 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 125.22 413.94 138.72]/Subtype/Link/Type/Annot>> endobj 700 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 701 0 obj <>stream +hÞìXÛnãÈ}÷W4ö©™]õ°»ÉfóÑ+k’ Æž…,ð.Z¦díX”AR3ëïH~"™Sݼ˞Ý ‚“"ûRuªêÔiJ¶={óÇkɶՙÑ, -‹¬a:de~¶9û~uöæ­d’­6gR±¸H›ˆÔ²D‡"Tlµ? ±Š#<[­Ïf" CÍV_ÎnùûÅ[ Ëæoæß~Ë~(i…å‡m™í÷»bËÞu^n²uü¼ú3¶Ò~+…åc6“Bš˜­.°~³î`ÙežÝç%›gwÙ:P!ÿÄ–‡c½+òÊ­¶X%§Œˆ J§iÊDdÃ0òî9ÝK8-T4z Lh€v/ás‡HêpH^F¶uŸ¬S²µS™ÆЬªY03"á7O÷ÝI^ç÷þ†íèjyÛa—Í rýÐ RþÊ8˜I†ô#¢û$‰Sñʃq\×ìcX¡xÞ¬R5[Šf}Dá¼J™„ð%“£h¼¿3™¦ÁÌbt¦Béoc2—µ×ßù¯ýß]¼ûI±Ó‰¹°Vmìdìc÷Ÿ5õüñ‘-w[dh‚\«)b^¡"«¼ fÚˆ””ÆÃü^´µØ”S¢\9ÐHÏ0fÊ0®´$‘LÇ.1¹’wü>«³`õKÏR ”iGèà ›Ô£±Ìë#,Sd-ŠÍÂØM Õűdw Ü>3r&¯ØaÃŽpevŸovÎ|©E¤üúa»´+^ä÷ŒÌì3Ü-ÛU¬Êk¶?PíÃÌ™ŸÞÓYo£ ™t+6u^°úÀ2ötØ/ºÉ‰HìÀ³ŽaÍÂøú!g÷yµÛÞLKÚš@t¨º;0,-u°ÞòÇ<ÐbSÞ» YÔ€$âÕüî“{ñ¶X±uPÑϧ kö͡«1ÛtA@¤Ä&;ì*…¦”‰qÉúQy(7åaïlvŠ›BaT<ˆÏ‹›«w«ëQbèiRô€£Fw¿ä Ì]ᶠ¦²Ù Žä. ~[X™¶»¹•¢&Ð0\ 09+·Ç}^Ô°ICYѬêÍiìžÁÃØ7¶ŽwCÓ;ðˆ¹À¾®FN•t¸}ÜlßÕúú1«*JÒ£š òÕW Q!3ºødqYBžÍüÒ3uÒhˆÞ"4ü ‘°ê¹¨³_áÖ&PÖ?CE)¾ÇžÕ;t˜ìý·Ãr2‡íCö›ÑŠ»ndÝhVÕYÄß¡ºröÃéšrÑÞELSvâ¿°Š ãÊ¥%™>9#T;ØB›Ð“KK¿Ë(jÑÈ,8jP-ï RËÈWÅß¾¹h]žXP³}¹ÓÄηʠسmÖ ‰ þ•y1CHv™žäú¸Ìg~ÐL Õ3LB£ùµ‹›½Z)?<©ñ"†nP­ +ŠNGuW¯ÊÕë- 1„ñ”P€žŸòŸ¸oD‚xˆ„DHJèÂqȦ„&Ã’eŸhð_ºòmy^ŠH§¶…5ö%Àë秱™¨»¸e?ç:ÿ®åSBØ 6Ý,¨«?LvFª0žl|ËÐFÜÕÝ8M,O H…µ¾Ž_Û¿"ÔÊ TÚÔh(•$'&8qÈÑ×Æ(¤±†üŒ ~HºJjŠ`O+·üší‡7ô4¶%¤Ò׺ÉÒx…×zkKå±J¦ÍUSsMÀݧŒ ¢1£ê§¶¸KL÷“C-ÔHÁž¨!¤ªáöA$S¿Êÿ‹áßÃ3T§MY„ƒ¾}aKe=.óÇ<Yº¸£ ³Ë<«(× §l +0–H0ˇày6S„#y؉Ý0ié +VU4Ó ÊÔbë€qÍŸ²×%ï´Š,©šAÍß/ΗçWóÅåâüúf¹øköð¨t"¡*šT¢ÿЛޒûÅîóÎ}fyðØ$ DcÒÏ‘Û½FêO|Y~ü¸æm¿ ª×`ÙX7+ÒËmèw¸x÷ñÝÅb9ÿÓùr´‡y ‹æÍ)åÒ…iÛ0¹\üŠœ¬@˜×„¨ýþ“‚Q«A˜é¼…ÈA˜­pRšzËŠI QãRžˆ¼Å«ÅÕõ»W_=Lñ›ø† +ãs½6ìâÌ/³uy`ßçÛ]QìŠíˆ^îž&]eûüß]©û.ÏçË£Õ•Hÿߥˆå$Å£gÝ6®ÏÝj…;ö‹è|‹Ì0ô­çÌÈ­«F5¹š6£š6TÓæ…šVJÄæôð:~ýúqHf?_ÀÓ«O–?…²Ã=-ã”hÓxÊË,>ÕåÃ$Ò6 é ÅýÈ®>‘†)~u1î^Âíê²P¨¤×íΪWÓïE.–­ px]ž{Ñ0©ÓWуÄñÒdznph‘¦s³áÀϤ!Ò¾ <æÝyÍŒ…0èÆPCô…¨ýoâD¤îqó¡¾}‡Ç­“7ÿ`¡¹! +endstream endobj 702 0 obj <> endobj 703 0 obj <>/Border[0 0 0]/Rect[404.1 603.24 503.28 616.74]/Subtype/Link/Type/Annot>> endobj 704 0 obj <>/Border[0 0 0]/Rect[368.22 208.26 394.08 221.76]/Subtype/Link/Type/Annot>> endobj 705 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 358.26 470.58 371.76]/Subtype/Link/Type/Annot>> endobj 706 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 707 0 obj <>stream +hÞÔW]oÛF}ׯä‰Ü–“ù"‡ó˜uâ"‹¦l%/MQÐ2¥¨±%¤šúw´¢ÿ²çÎ )’Š“`‹î†HŠóqçž{Ï9’l³xúݵd›vQhfEÉLY0-XS/Ö‹.O/%“l¹^HÅþp‘¥å®dV .[Þ/VáÂà»åj‘q!„fË‹“ï_\²œ—ìâéÅ7ß°×M*K^&ûMSÝßowör×ÕͺZÕéOËa+¶RX>g™ä²ÈÙò9Ö뎖½ª«ÛºaÕÝÝMµJ•H>°«ý±ÛîêÖ¯öb¹ÈÑ +žŒ+íœcÜ”B˜p¸Bq[ôïqj®Ìä=’B9Ñþ%=¤ÄùD8†—¦ìÏOá)ÙªŠiÕv,Í +n“7‡ÛŠîdÒÕ·á†méZ&»”Iö*jVïã ®Bæi&µô` +Ü[›;n’×Í>Œ¸=®:ö6µ%WIWiãû]\pøôʯR…¥SÈÆÌÑû“IçÒ¬Ä.SB†Ûœ¥…Ëúë×_þö¡ÿ¿‹„¶\r¢ÇN«;™ìþ»¡>»»cWÛ *Ô¢ÖºTòT+ÐÊÅ͇ËÝ2-$Êý}‚w‡ÜȌö0ìE›ÐCPkÐ.Wu‡SI‰ƒoëTKôN—ãR§ôв۪«ØºÙß³î}ÍâNyÜIðBä'¨ÂúþÉ›ë¯^þpýúÙÅ˾K—¿œâ³Üºñ¤¢ŠºÔ㻿ù¥F»ow~ObÄõö DÄC Ž—f´ˆ2aÓ¶öSªfs¼¯w¯×`Í[Fd +ìaùÔ 5mOu™Áïšf9×Éü¼ U5 +\ŸN ´¶„Ö€ÓäÄ\Ž,eÜSD*e«»ªmY·§}A‹M€¥Ä=`Q®/:GÜçG,¡ü2 IAkdª—ÜY×\¦Ð4eŠ¹]§Z Ïi¦¨ÚïqÅ¥ê¶àÔê’3 0C  þSàÕ””ÖvUWnß²¶®=f`9ß'‹½‚)OqdÅ´?¡9hH# — ÅÉKÅœãP8”ê hÌS—äBs…†6J¾_?©žtB5¦™Aë÷Ù0á`D …;Õù…b©ö§Ï‘Èï«ÝæXmjPÊ:EÖ `Š¦ÞÍ­‚4ÜÙ˜0qJ0I¼’ÅQ  uBßÒðäúa×U¿ùáË¥ +ãQKEÐxºCäÚpø€ÀÊ×45AÇÐqEHhJ?øzùp¨ß%°¹@Ip9†ç‘»`^0ŽüËüóÐKE<èE{Fô Ë $ÝÃa¯ä.·å( É·¾—QÚÁãŒ6ÅûœbÿÇWEðcÒȦ$˜B—M˜4Äø dí<ž‚hõ‹á4ÏѸóH`=”µgxO•tÕ,…J.Í8‚wé¤$&` +1.ë¸ô3ØU 649 G—hÇp&¸œD†ŠF<Ê¢WÔ(šè +ŸÝ‘¦ÄÝÎ?·ŸÐhŽý4¡ôJ8Ó@Õ4¢œç®Ï¡Ï¼oÛŽÆá…r,ßoÛ°m¦$hEÎŒ{Ò¸î=Í(’-{H¥ÃÝþrfà`3ô+™Tdp›’x®ØÇm÷1LhüF”e=&½ÈìÐì7¤h´‘@E‹’ÈVĹˆÿ[훆¤02}Xlà™hVñw6¶É>3 HyD{nò`QŸ+Õ VaíEÄÃj<¬f€ÕxXÉ,Tìà%Ìà rV1_üa^KŽÓ_mÃs˜wM G“V©&#ßm AMrôWÝ1 l|Ò+ÁÁÉ"™„]tö~hÃîc$M¬41É[àö^ñ¡…eBÈ tè÷3uÿ£7~ +Úâ ~G ’’•F~Bi ½W-Éö-iûhlPAHïôÁéM$2]”ùÉüÔ$ä>‡d[ºqƒó;ö²¿#вÞvƒ¸…Ã$\·l¿fG8àŒüÔPØjDB''»åí CΚ` QÌmÝúÉéÛ¨©Y– îûuWïB ö¡ ‚%èõ L³ŸåáL0žØå¶n·›]ôIv<7âÊ¢e ZÉ‹ Tî‹rݼÝV ÿ@<È=~Ö€«\õî»?Ÿ%}˜¸ï2ºoÜ·òî[}Ù}kunÞ¾|6->ΖëcȳMíæ’›¶rf»Ã›Á|Ë„ 胸zÿ=ÁÚÈoùð¸ø™›Ôúì ÔuHúä0†ÇšKBä`ÄâþˆåŒ³zoÝ»jÓ-BºO7>BÙЙKbcÔ}tØ^GuÚVZ7²ÖŽ¬´ñ´Þuõ›¾Æ’Z°LðØòk> endobj 709 0 obj <>/Border[0 0 0]/Rect[398.94 438.24 452.76 451.74]/Subtype/Link/Type/Annot>> endobj 710 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[234 588.24 337.98 601.74]/Subtype/Link/Type/Annot>> endobj 711 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[299.94 207.24 428.58 220.74]/Subtype/Link/Type/Annot>> endobj 712 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 713 0 obj <>stream +hÞìXÝŽÛ¶¾÷S½’Ú5Ñ’.Ó${Ѓ(¶NnҢЮi¯[^HrÓ}Žö%Î[žoHJ–åÍ¢½(ŠÅb%Z"9ÃùùæI¶]¼øÏ÷’m»…Õ,Ë +Ë´`­[l_¯/®%“lµYHÅþp“EÎË‚åZp¡Øj¿Ø…‹ ÏVw‹%Bh¶ú´ø¼}sÍ /Ø«¯¾úŠ}צ²àErضÕ~_7[öMÓ»vSݹôÇÕ!JQ +Û¶”\ZÃV¯±Üw²í«Ö®e¯ªÝK•H>²›Ã±¯×ùÝÞ¬VñÜâP–˸ÒeY2žBdáxþÄþ%ÍUvö6¡ Ú¿Ä™G‹”Þ%ÃˬŽOÚ)9è©lT´êz–.-Ï“wëŠF2éÝ: XM÷"iRn“8íÛ8©½»“T¸ iÒ¥Ô¥ YŽqž›’gÉwí!ÌXïzö>Í ®w颈C÷‡7¼u™W)›“}Iå,›;ïL–eº, £\*!ÃаԒºl¸ÿñÛß>õŸ»ùø“|§s.ÉsbðVƒï¤ ¾ûkU}¹Û±›z‹Ík}*¹I:ddçÚt©-/“_R¥ñЭù‹1råÓÉFžAL´¹ ‹KK§á€/%á¸=î]Ów?lØÁ­¸Ö;¸0´,éÒÕÏ'Œ‘˜aO&”šf‘-côߤˌkJ$\û#¦ +Œÿ»cý½cQ¨ žM\"²QÙdç6íûºzuûqõøàδÀ–¥™¬Ê£*~ìi…ÉÙê¾îðîJƒŸ:ö˜Ê£Ã‘õ›qi î5|£“ÍcÐøÁ ;EV/Ô Bcð|ªûûº ›lÞ²‡ö°%- 6Îq­R\ö0BÕ‡ñ®œZsDB‘°G° N@‡?ØÝ¡mPë.>–‡¥¢L>òsÏ.Vˆö ÷CÿRWÏù8FYžE'»àÙQ ÎàØŠ=j*KdÒjæã’i'ÎÜ[¿ŸIθšXc”[”Ñ­]OÒ{¤ÛäŠÀÑtàÈ!ʲëT¾„–퇑cu†›TË0…žûµÉ>¥gU˜Ñûu\Ú\M!ŸÇA6Ä·NÒ9Ç~‹‡ûN‡,V:c¦¼@ nãVŒ¹|Ja•gôÞ”*¦±Q " +/‚¡.=T[ÇÊŒû ~FôZxø3Ž^WýóžVQŽ(çŽVä莆íUF„÷-è†0#àÌuì°aG€ÙrÓ‡øÖ¨‰çÇ2™4nÍHÎÞa…R„w®‡Ã¨úCÍeX>3÷ ´¥ßé°é]¢nAZŒ4.&'3 6¦U˜OX´v]½m‚&Á2¨jâjÞ)~h5¢ä9¹dª¨nŽ»sĺnV)h”"ã”<̨Úfg…$qg=jjG'PÔKÂ%G‘«©NYÒ£ª·Þ¦=ìŸÀWIñf.²ïý7/oÞ½}óùì;ÅÂP·?èâH +‘ÉM½sªEâÝ1 ‡ÑsD?¥­­ÚXE +…BÜ4¨cÐó2OÃî„ÀðçåÜtZä A<ÈÝ®ê:Š@ÇÒ$Þº…·­ Ëf°«HBxÐû +¿(<<„­‘_sŽ-Ãæ×p€’uM_ýŠ£mRU„gH% Yª¤êk$qu ê=šsæ8p†âä¸?ä³Sìc0«Þ‘©¯áÒ°#s}I—(Ë2MFÓÕc“|›2ãƒ,°iIó 1x2è˜ }I>D ùØîÈ":ä-Á¬JÞÂ\¿x=˜b©ñT„ÈãêҌ͂š…f{$0¼q04•YGe¶uͼ?B*Èò"Îó~&¡”(sN/’ï½?ýìÕJ •Í×oô54ð}OIŒ£¼q>$@%†Eá‰8!$å‡$pSNÀD½… æèuD´iXEšç@?Éñ¹–é²lk,¤mT)i8ôGO®€Õ%\:§ðŠ´¯usMÐ_©<¿ÐÄ7ŽÈÜ™ + +ñ]dS~HÏ¡ŠÍª4vÊîý„ ýˆ´¾ Ò1î.È4">/Çüœ‚ˆ>cÓvΦíÀ¦}1:ÿÊÏ©#[²\]ÒæSÃ!ÓpKYk#Ï<·DÀ§¤Úž‘jëIµ%Rm‰TÅçtù*ñíþ>rè {ß@üΗŒÖ—g~ÌJ}Æ™/ÊΓ¼yrÐ?O›K9írþ|å»lŒƒ¦çH OäÏä?ðg5ñg-¼;©kÝÉFN¼9-îW¡b§µçÖD é´ÖskzVõþ†Âwå¾$ýæ‡;ŽØ„ñh¿]°*K*S + Ê¢, '¥S—eJÓ{0iÄÂYæž÷ksv΢ϲø—Eÿ%,ZR³• ì!ŸÓè´¤88Eª×'"­“Çg)´"R虞ÑßV!ìeò1`ç­ÛÖMCS«fÍþaö`mPª³M%ŠÓwÔ@†;j= ŠŽyöADÏôxàzœØm!J°\¢ÄBdOòc;E ¢È»Ÿu©KEŽfÉã¤øDŸýH1°ø®Ú»ðIâ*Dž! ö;UÀƒj7Èh]‡âÙAñœ‹ü®ÿòð¿m#ßàaÄï`[2ó¡9éJŸ=´y*®Tôa3­jçiÒ¸B)\Ù +ÿ`/ wT +endstream endobj 714 0 obj <> endobj 715 0 obj <>/Border[0 0 0]/Rect[319.86 672.24 499.8 685.74]/Subtype/Link/Type/Annot>> endobj 716 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 717 0 obj <>stream +hÞÔXÛŽÛ6}÷Wð‘Ú®¸"©ëc³Ù-Ò¢Hœ¾ì…Ö¦½jlÉ•ä$‹~Qÿ²gHJ–œÍ(Š¢^ÀâJÔ\ÎÌœZ²íâê»×’m»EªYå,ÎS¦#ÖšÅfñl¹¸z!™dËÍB*á™g¢ÈY¦#)¶Ü/"HQŒ{ËÕ"Qi¶|¿¸å/o^°Däìúêú›oØÏm s‘ófÛ–û}UoÙ÷uoÚM¹2Á¯Ë J;U +âJ!Ó„-ŸC¾—;ûÊ”kÓ²ër·»/WŠø[öª9öUm:+íf¹Hâ.¥"I™Pº( +&â<Šbç\ªD–ÏáµPñì9@!L´}§GH + DÁð0ÎÿÉ<%CUê--»ža*2þæ°.i%yoÖnÁ*ºæ¼DÊý¶ý¦võà7)wd„RýçXgYRˆ˜ÿÜ6nÇú¸êÙ/A– Å—ÒyMíå#žˆðU*Í`29ŽÏ£÷“E„9t¡Š¤[&,HÉ\6\¿þòŸoýÿ +ÿ¥ØéLHŠ\4ÄN«!v2q±ûwMýv·c¯ª-24C®õ ïP’iƒP§¢àï¥qÓ¬ÅPŒ¾œ2eË) õtbÁ{—¯' r"§Ü³(Ïê(‰5…++è–‹þ«QÛãÞÔ}7·ý@!¥oË óSò NJGû¬Æ+Ó©ò+ÔÓ2pBÉ „ê§ì8!ÆÍÒVú¤q´'Ä‹›Ž­]y*jã +é%›ƒ©×41 Ž©W¾í£tR4þÖ5~oèdœÆ‡S²“ÄÜI!µ3D»Ù0$H®QÀ[ŽšÔÞ%ÊFæ†Joí’¢ÒÖ}CÓŸ'¥X§ä©iK+©Ùô¦¦˜ ¢ME£±}©–O<gLiÃ˱ŸÂ·6]µ­%sVв)ˆÁ®À +Þ¦9I²|.õì-¿ùPî‘O1êÊtó±|Æ/²@|”“q*0¬Ô禮L€C„æ<ÒŠ ëÆm豈Ӏ¿ŒŸèÚ*’üSœpìH‘÷$ñžÀÿ1˜ÀÐ÷¥ISš'W4†@ø°ñKßE¼D‘è)3¯Êöb&clܜ텋à%+ëõ\\¨sÊwJ˜lîóh05ÛUfjP^E2µD|¡³Kœ!ô}_¢k­Úæ™ÙVõõ3ðÍîOš7±ãå§ú=sŸ VôY55ÊÇ f-»Ø—ÐòS¹÷R–ŸzoðwÉm[ ´¸ ØŸŽ¼¼Hj”£WW$èûzÕ´­ÁÉv¤÷eGòe‡F€ññ’™> endobj 719 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 720 0 obj <>stream +hÞÔVÛnÛF}çWŒX:Òj/¼ÂèC-ÙAŠ&5T¦}ˆŠ‚¡Vk‰–TÒ"Éå/;»¼èf»Š¢¨ô@jvæÌmçŒ8,Ñ‹Ÿ8,+'²¼(É@+gá\'Îè–‡dáp ¿øàQHãBÉ(l†(”y(K2gHc’Î[òÃÍ-ø4‚ñhüü9Üi—G4"åR§›M^,áeQ+½H3åþš|®dãJ ¼CNyàC2Aü÷vªÒ¹Ò0N×ëwiæ +FîaZîê¼P•E»Iœ@Ð0À¤ê@…Œã¨1æ5éÙŒí!&M…wtˆ51 +ÒbÎ}Eb[‡ðЋºôMt‚wqŠ  4­jp‡ É›í<5oœÔjÞ¼@nž)\VíU«¤³U«$š'ã¾;ä2fæ‡ã{ú1õÈ.ù.«ág7Œ¨ ªE©ZeÑâc7lu˜)¯AhêkBö¼Óæ}£Ÿ}ÄCÁxóꃘp¡{~ýã?Wýÿ‚÷?MïdH¹éëz'E×;î7½ûwCýn½†i¾Äâ]«]N}RáDVJ»CИ¼w…D¡šÓnÛq +…§i¤g˜$ÍÜÇ4šá2/¨„!•Þžb˜&SÖ% /\ hFê?· +.¾…µZä¯ÒL—×(W˼¿»OðlæÂǦx”¡osù™™ÞI‹cS$°ÕyQ/fä™±¼‚¢Dq}Ûa¢U& Î1‘ÛåÒZÁ65“bIg³âÙ̽²vÃG Û`´ªwºÞ('—Ž=üì&¿[K“†¤œ{þÞr42†7lrAŠÑPì°[ŠW©¾„IâuºQO#_ÿ3rÑkçOpq¹IQÜJú‚b\—ÐÖ +ã Ŧ–Éà *(¶…9©Ê)àוEÞi~Ñ9zÁõJ5™qñ7Ùc¦U'9˜PüMeBìëx5†‹z&bvõùx¯íW¨Ù¾Ý¢x·-éÚÝinxÔ\îC^¸Rà€!¿{Èáëuér0«3kQrÓ´Î8§!ßSó[\fq ®GX¥¤z¹Û¨¢® Äfc)G·~7„Á¡ý~àn÷­©ßTcØeÇh5–&cGÇØÔ÷ýFîtò¾Ìç—G ²à=©yº@ZÌñ†Ò§øWÁÆìÅœ¿A^š¤uzä94>Š…ÚãǹÈ•öïNÏCo±œ5äû=×åö¦˜¯‘‹ú:¡¼/Ô‡tñõ[ØÖ~ðàdôŸ>Kã±Na×f|>¤£‘±¯TvoÆÜ †¥Nså+—ÈJ­‘<Ž­:B8`Yýr:ÁœQlÒ>!ÙG9áœV[œÄp‚: ‰‡ùµ™ÓîhùàŸjÄ¥<$4lƒÇH§?ÞÁÍëIãO®žjè9àüK€Bt©» +endstream endobj 721 0 obj <> endobj 722 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 723 0 obj <>stream +hÞÔTÉŽÔ@ ½ç+|¬Ò(îÚ—#43Ò¨ \‡T‡Ýi”dà›øK\YFÀ‰ B(»ÊÖ³ý^9ºb÷ü„n,œ/˜à@ Rq,žVÅîN‚„êXH‚>22xŒ¼(T—B + +CwUS”(„ÐP}+Þ³W·w`1À~·¿¹ûË€]»¡¾\N}/ú) ǺIüCõ’J饔"x ¥Dé,TÏÅý öê6 °¯ÏçuÕ`Ÿáp}˜N}g´Ûª°&ÒH­T:Æh‚fÎ)ôn‹ÓÔ¨Ì/q"%s¢ç ýHIœ‰ˆ@A¶ùs{Jn*·vZðÒ¡go¿´uö$›R»8pÊ6°ž£ckÚë5ih>­Ij±BZ^JE>XA¾÷6¢a÷ÃuÉhš ÞqP±´¢Œk‰k¿â“3="ó«”ó™àܲ1¿«÷dŒ¼ T#–JÈŵÀ]n6ûç柧þ¿àǬö(³rbÓN«M;iíþn«OÎg8œ:z¡žÞÚÄ%Z6ÒJŽià¥vÙW®4]¦·e\×É«yýGæ}ú!ÀN çÛ +endstream endobj 724 0 obj <> endobj 725 0 obj <> endobj 726 0 obj <> endobj 727 0 obj <> endobj 728 0 obj <> endobj 729 0 obj <> endobj 730 0 obj <> endobj 731 0 obj <> endobj 732 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 733 0 obj <>stream +hÞÔXÝŽÛ¸zé§à¥´;VHŠ©öª$Å.¶ÀîÄí¢ÈöB±å5¶äHrgç9Ú—èMŸ±ßá,{~6)PE€HRç|çï;‡ìvñê÷ï»EÎ ·LÙ‚åœõõb»øÝjñê­`‚­¶ !Ç?<„5Yi™ÉyÆ%[íR2®ð·Õz±Ì8ç9[Ý/Þ'ß½yËtfÙõ«ë¯¿fß÷©°™MºÛ¾Úï›ö–}ÓŽu¿­Öuú—Õ·‹7«€Ž¼p0„ÁÈ=ŒÒ¡(N)•“N)¢vYíÕ0²tYd&ùãaSÑ›HÆzã_XCO›´iV$áØ¡~}IÿäB§K‘—œZàÝ]f*ù¾ïü‰Íq=²?¥Æf2©ƒ”!¨èÚ ¾p–r¶™”…a«×²R—®û'e™.-t”KÉ…Õ,-.‹ÏÏüÏþÿ +Ÿ–»Üd‚"Çcìrc'´Ýêow;vÓÜ"C rmLE¦“ÝÔCݧ˼ÈÊäo©ÌñÇz“]Ô•‘®® +ñ£úFÍQeá¡eI…]<Ö' 9—¨tõW’ø 2FB ʼnHðÒWì_±ÇM)3¤3i[âÝí`#`)¤ŒŸÅ:ça‡Œ €eLÐ!·ûÃL§.í¢S[þŒN]ª§uÂER9ÏàAภ¬—q/àŠ¼pÎ!¾»©«Mݳë]5 õ@Þš¸ëD¡¤Q© (–}H"'iu× l}W@lݵcÕ´Iœíj}Ê?ADÞ»«Ù6Í%è¢Kñßn×¥Bãåé"âêõØtíðk— ¯Þš@®äǯôB ¥s˜Kƒ)~õŒQÖÌÎ;dŽÕ°|ß?BcÈ:*ÊÌX¤AV(–é²,çlÿ 5Cóu‰‚ü£¼®«ÝîCµN H>²wãî­ˆÜV$³†äDÃ!.üœFOÍñsw:ï ‹™È7õˆâ]¥©S4^9Åñ¦>ÔÕHo”z¯«±š7yfÑ® MŽÎ +'7B?i—ZÒþf§¡‰ª[´6iJjeòRGiñE©s:ò€{+=€×DoÂ@yÁþköîµñ3ÛöÝžÑá×s/hNæ ‹vý’LAû'Se9Ž/{!§~ü‹^å¸ÀvVëèý³ ¥¡/P%=g ( íŸg +ÖÅÐza–,Ë­~ß÷®ÖQXÉTï^ÀS˜kýtÀCοA)'®­Qæ?°a¬Æz_·#kZ6‚ç®á‘6T+ª9¸¾`2Ï3ƒ^æBîÿ9=Å]¹3`œ÷áïš}jÐK+BÄ›ŸÁËímÍÞR!j"Y`[ÒöO:>²Ÿ(f˜È³òŒ°óØ5ܬ—ü”²m +ã#²Ýº‘vߌw¬b„v)mf ÍŒ¨åsÚÇ›Ñê4m÷>GÖ”#©Pb–R'`?ÞÕÞetÊÃRY>ýoL(¸ êˆ\Žõ‰4ËäãkF¤Êà÷]CìÉÆÎi¨‡¾;LÕ +k¼Â¥Óxa… j•I8AÏÎ4 û3–kŒÚ +ë#À´„ËiÛ×ûн6¹ÐFéq¬VE~l}㣪«õ÷!ï=Å8«©cÜD9[ô%IsjiÞWÅØüË6õ¶i¿æänŠnŠò´‰ÈP^YŽaÖ ó(+x€êÒËPz™¤‡—w ®3Ýv’êèÀg‰GAt/2l" |ŒÔ\w”U°T]ºjb“¾¯‡C×nÈ5Ñ68r½ÂøP³¿RÆP÷uD¼÷,)ƒkÂÙÉú®<'¸(8v‚ ¿?/|"­ y¼Ÿ…Ëý9gºÃÔÔºý p×´?ìAÓö²é‚ƒ—äc6ò¼K©‰‚1f¾Q<Ž³ci/M]NƒèiÆq¤ô1]¢hÏ8âûý¾™Æ(KcTdŸ¦:“yHÓ3ÆQáÎ9C¤À`68¼Q"ŠÑ f‚®ÖYJKG Ôº#<~ÛĪµr¦%Ÿh2í0:º€@bâ•ÞÕ¦ìÁQ€ ŽY¡XBÅâJT\r—º˜ÒÔUúàgËîxÅ**!H÷lŠ™¾ŠDÅó§¸eú·<'ÆØäØÏ)ØÂ=Û‰ËîÁíÑvUœ„ +;õõÚ3G7Ì씈š³QxIñ.ÌŒ£קƱo¶Ÿ&ïW}ÍÚntÁòHx&‹'î(|j.ÃèI²b·ãQ• C µã¸¦n0H®"´×·W èc3Ñ}ôâû¤k¯<$E†fØ=°Mçm³þVç¿%„žrÈeÌ5^Âà[–‰ùTœç*Ýb’¿™Å˜ ë0”ö, 鳊nqwµ3ÞŽôžº–ó¨ßUUöéØDé(ß<-”K(¿u]o\‡4ÉtÁ?]…vTw5ν~ÖíØXôfr¦t×€ø ÿ³*(¯°ƒ&E‚28ª\á#E»Â–añ_wùð›ôéì˸§§¯T¸T}9b$„J´dë½û3è(·Ôn8Ûaž(3¡]9–Û¯p]§ëü“2Ô¹-½¼æh+¨/ -h„8IwMÈ/ùù.-ƒn’#Š'Dz´^O÷SÆ„Ñæ$B`þœ›é•/£|,sÄ,j–Ìš–KR¶ôI8ÅÓrR,è§Ë ͳ³‹«ztÿ”ÓTïÔ-çÓýþÐÑ LsÝH¥Jnǘƒ?œw<4E2 UYÌšç4•¸[íÑUvB“›ž@ET‰4è7ë8ܳ9Eœî ÒK‰TŸ]h€:²{jQ%¡£æ£ßÅœ†ÍÚŸ9¸C­*õˆg:P±ïj¢ä#Ûûîw$rh¦:мf“ÈÅ,ØŒ‹Žù·v“Pô +endstream endobj 734 0 obj <> endobj 735 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 736 0 obj <>stream +hÞÔXÛŽÛF}×W  c«ÝlÞíM€dfœõÂã5<Ê"A”ŽÔ’H¤BRÎL‚|PþrOu7)JžÙø%ÖD²Y]]×sŠÐzòü››€Öí$ )•EYB¡¤FOV“¯g“ç¯ +h¶šŠ$þãd©È3JC)¤¢Ùn"¡EÈk³Åd*¤”!Í~™üཹzE±ÈèâùÅÓ§ô®ñƒLd^½nŠÝ®¬Öôºêt³*Úÿqö/Ú£b¡TLÓ@IL³Ë k zÝaÀºê÷ºXê†.¶EÛêÖŸý4¹šMâ(‡‰ˆ*ÌóœD”IY%Ò¤W…ŠNÞ#ˆÐ¼„§Crã}Nxe½Ól,S‰óºh;ò§‰H½o÷Ë‚ï¯ÓK{C%_3¯òEâ9±k'Ô,6NHÙ« b„¹ä‡‹AšÆ¹ˆ¼wMm%–‡EGÿñÓL(O;-­;¢®œ~äÀDXrP•JRŽ*›Eç)ûƒ‚<÷§ÎȧJö6&?as©¿~úåoýÿU>0z¼×{]t|Ç`pYtÅ)Œ‹5GÊÁÈΪŽ]ôØ(£ÿº¨ü@Âþ{Š_£´¾ýI/º–uÕeëÍ‘æœ ñ(¡~ð`N¿«n¨ÝëE¹*ØTW­=¹'lB%T„ƒE‘µh¶Ñ´°àFݦè`FÓèv_WKêj«eªÐéÉ-ME ^·Avt¤4/ƒÐì’eûƒËj©}À{âÝArIEÓø)ž +»xOõŠôVïtÕYËú€ å؆…ÑšºòÜêŽî™¯> – +'`x)-Ä"ì~9À’+m” +Ë2Â'Z"×ÎýÖýÔy¡âQÕ”>Ò„jåºl¸xbæò¥üà‡Š—·F†I~,J=\ªqTeæ”ÍQÞðñ ’/©¤ж¸×ÍôË­^a¹|ÃO/^T‡ÝuYµÞϽ¹}útîÓoæp%"‰³ç˜ãqix„Vû†UWÝjŽ“Ý3zBtýúíÍì +Ëïè³5=y6:¯|ƒe{Þ®?¬œûsÿ¥C©O1ƒ‰hOƺp‹uèÚ­³}v¿×F%^à‡•Î>?Ñ⬛üÖÛsCå»3ͽ±gz?ź7ºZw›ˇÓõ‰&rÜ®Þ~3ûçÍ·×6ªlìÿõ–`Ùstf`™-ÌxÐ¥s#^ÎçÕØAÜHÿn¡ä!¦‘ÍžJ{ ïáR7¥aè º¹ßÜ»ììêÿ`ë0´G.¼À¸_-€±ûýÖQ*í›zÍЕzLQ©W TtìVÇ?ö›£4ß¾2|esï«w¯Ñ PÄ]Ëð1e0é9Z&cüT½«nhX‚šoënW™(Ù¹ã`H?ëIŸéZ}Dמ¨(¹K°ŒÊ–ÖºÒÎ;|FX"èz@–ã¤jTèô°ØÔÖ‡f¡-ý=ã\£YwåæhRrìi´ªÿ¬Yª‡¼ØÒ²\­˜nÜ©+9}XÖnș֖€€phj»û­11²&¢®î +CYYí‰ñC®©s} SÚ’<’o7õa»$]·¾bÊÙàŒ£ÃypžâžkúpbÞà9Œ`àˆ³i;.!æŽ]ݬ‹ªüÕT¹xx‰û+>ÍÊ5 Tj¶ÛÚ&ý.}Ã1è‡ç[Ã?-»â$Ì@oéÏ5Q zh@uÕïí Ú!YvDÂŽMК§øòŸ L“›;ô¹Š‘§ÈNå®Sí vða+zœ&¾?£5Xê‚m¦hbô¾ÁPÃ_Åže?ôO`† %ù³þrNxRn;ËŦh>§ªØiæÏaýXÑó´alÍ#Ž‚'Rg*[˜rÇúÇ;–õáÖ =„Õß=¢÷TêûG¤ØÆÊ0ÇàQÙ4¶‘­{kœæ<Ù݆xD3õ{þÝpÛ »Ø¬»??Éîºé»‘Ç>ñtãtÈVÎòåýþÒýÙç¿ k™V +endstream endobj 737 0 obj <> endobj 738 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 739 0 obj <>stream +hÞÔVmoÛ6þ®_Ád;3|‘Hqû”Úíеé‚Dé6¬Ã È´­U‘I^šý£ýËÝ‘²dØ° ɆÁ€H“wÏÝsäO’urôå¹$ë!1šX‘“47D Òûd•¼(’£W’HR¬©ˆ€ 2·ÜåÄjÁ…"ÅU"…‹ÖŠ*™q!„&ÅMò=}ûòÉxNæGóçÏÉiÏdÎsÚ­ûòêªn×äu;ú~UVžýP|¦t4•q¥22“\šŒ‹å[KÄÐg¾\úžÌ›rüÀŠŸ’—Eb·˜ž•vΞæB¤‘S 6)Wé½M +è° D÷ap¼#°™æ;ÎèŽÚ;¦ÌDºFÂf†[zq½,q&éè—qBjsÚ2nè$v2 õÕfRq2c3©À?™†¹µ™ã)=í»(±ÜV#yÏlÎõÊ0™èÚ Ž X`L•2ƒŠ.§éÃû•HçØ,n¦„ŒÓŒ0ƒî’Ýøׇÿ\ôÿ ¾ÿ‹g§-—xrbwvZíÎNfñìžÖÕã¦!gõn¨…»62É3:@ +¾g3m¸£?3¥aÑ/yðrqJ'«B:¨¿/+kI¨,aâƦÜêJ¸›U˜Øúsr~ÛŽå'Lø£¢PÈqgb’âa2ÍuŠ8˜œCÄ@U]‹)jhµ){òŒ4~UŸ×£ÿ±-¯b)Ò\€³˜-Ó}¢ûÐ5PÞ©€ö¸©ûÀ¾º³½²àIP®[T¡ÉЦBÕzTcz2ö‡ôøÀòã[ÞÑ\vÛË@ó®Í_ü·ÿ¦±ïž$¦°Ý^áø4aŒçö€ÙèßýÓÛùB!ƒº]úOäï\T´ûu_ûv|*ËúÏIOÆ =ûÇtaßlú|øÓÐÐÌöU'ÌT,ÅÆ“9é»íX·ž\÷ÝØ·×~ +¦,<³ƒO˵TܸC±ÙTÂvµz¬ãÓ×dµm«±†„%UÙ’KXA]rm¢úT³ºm» +WL+(´Ð¤04MÇd“l©Vuã‡Ïc”¡çd¦8ö(‹=• +Ð0FÇ}Ï,´ %ƒF.§·Ì98SðÅ*Ýú +}NAü]×.|` +*Ûfä “jéîʼ¯Ë³-\p6‡¦Ãf{҃󾆂I%à)›ÒÉ:„4ÙÏ˦yQV úq`°kh´;!ÄnèI˜ÍâY´eö¶úØ+²Ô‚ªg.C$T_øK.¤t»Æ£MØR¶WÁ,è1¦¡{÷MÜ|¡D%¸|=ƒ×':jd–OŽ¾9‹`Ù´•åû­·p Hù–…høÀ‡¸ vŸ›<Äñ¢­ÇࢠÇçâñ)Í ²pÈâßéL`!ƒŒº+ƒ·IÒU¨OÊ +ZÌT ü}»úŽÝ±n†ÍSÇuX:©‡*,)â@Û­´¥xI&Hè~`Tû +endstream endobj 740 0 obj <> endobj 741 0 obj <> endobj 742 0 obj <> endobj 743 0 obj <> endobj 744 0 obj <> endobj 745 0 obj <> endobj 746 0 obj <> endobj 747 0 obj <> endobj 748 0 obj <> endobj 749 0 obj <> endobj 750 0 obj <> endobj 751 0 obj <> endobj 752 0 obj <> endobj 753 0 obj <> endobj 754 0 obj <> endobj 755 0 obj <> endobj 756 0 obj <> endobj 757 0 obj <> endobj 758 0 obj <> endobj 759 0 obj <> endobj 760 0 obj <> endobj 761 0 obj <> endobj 762 0 obj <> endobj 763 0 obj <> endobj 764 0 obj <> endobj 765 0 obj <> endobj 766 0 obj <> endobj 767 0 obj <> endobj 768 0 obj <> endobj 769 0 obj <> endobj 770 0 obj <> endobj 771 0 obj <> endobj 772 0 obj <> endobj 773 0 obj <> endobj 774 0 obj <> endobj 775 0 obj <> endobj 776 0 obj <> endobj 777 0 obj <> endobj 778 0 obj <> endobj 779 0 obj <> endobj 780 0 obj <> endobj 781 0 obj <> endobj 782 0 obj <> endobj 783 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 784 0 obj <>stream +hÞÔXËŽÛFÝë+jI"P¹ÞU\fì$ÈÀ4Ür²0²`ÔìnÎèÑØãô'å/snI‘4%y3i²ï¹ç>ν%Éo~¸“ìñ¸pšy˜ ŽiÁÕâañ¯ÕâÍ÷’I¶zXHÅþáKÏ‹À¼\(¶Ú.¬pað«õbÉ…š­>/>eï¿ûžYØÛ7o¿ù†ÝrxÈö‡r»­wìÇ]SÊu•ÿ¶ú7 t‚²\)Ë–’KgÙêÝ‚,Êζ–d;šþP•÷սݔÇcuÌWÿY|·ZXS€‡ãÖ1®tQŒ› „IŒœâÞuÏA•+3zŽHP t|¦}ŠÈ¾`xhBGšüQ½gʵ¬ËcÃò¥ã>ûø|_Ò•Ìšê>]°š¾C¶Ë¹ËÚ×nÚ—ë§ö%•¾…´ùRêBÐ5¸öÞÜd·‡}zãþeÝ°_r¸ÊªÖʱ…ØïZûÈAŒ°  *åÇ¢†Ÿms…»²©÷;ÎZ!lc³Œ/wÊöhjNf$ÛŠš>ÇÇaí!UVȽ#6Ú¨AGÓ¢ØNÅr-³WDºQa†@nc“@0 £b.ãèE )­†RVÙ(‰ñÙ)´šÜÊ6ÕCý-†ÅnWÞìï«M«õÊxL—Ö‹Qú‹¸6‚› øºGE£ðNçæ!òí¯ïǸ^sÍ‚¥ax¶}Õ nciŸÊ:šFÚ6/Õpds†,w¢Os¦ÔD(šŽ3øS´ýž +=dÈ£@ ¼æ²ˆ3‡.‡ K4†û«DÐB¶³0›Àl³f³Ã»jw¬›× ¦–7›í­ï›§ãA¤PjGÏò‚"k‡0²F•–¶›r}ØŸ„$•|ü+C惙ڞ+(±‰çeSQÌ4sWÃ~kñm$y-mFŽ„lF^c‹Pj©ÀAïbÀÕAû¶yIúù÷cƒ—h¹ì%õךd}NŠ uw€Äbþ@ArnŒ“¤¸ñ)K_±¹zp p}„ž”EEi…Ë,±‡ÁR Jâ¶ÞÍ”….Bä„Þtæ¼}é=?aôsÛ0D`@ê‡j¿­"-Z‹ë8y«I­·¨ÞS‰]) õ?õ°>ÑŠÊQïF5¡¡v8Z¨‹dÚW½l ¼³tvúi°GÕJÌùâroj;BªÛ­Úíñ¦ü£ÞBm :/´ClÙ/uÉîšrMb²ÿΕ6qRI›NRWXõˆ™zçTVeÀ¤$¡ ØWäG«b( <²¤*«ëj³)wÕþå8Wi*ntX°gúuN„hÙ˜À}!Aè×¢Õ Dõ#­Ê:{W6øœRL\Q -Â0…ºßU +èOûÝ}Õî¹å˦a^6ÕlÞDœãS¹k+Æ u7@½«â>ë"Ô„N²ï /ÌyópDê³´¦G&®K\{šÆI÷™NXç]Ö¼2€Ö»úœ *é‰ +çüë+©¢#ÀØ‹³# Ž_ÉÑÔžpqÔ“­˜îÂjHî:7b/'=yWn«åOUÃîž±rdq/ ÚtÓä*ƒÂàjgSGÊ8Ì.oSü¡2W‘¹`ÃUrÆöÆ)¡§ºéK2 µ‘û&Žb蟾ª'€©þÐØód[»«†5Íø“áÁ¶DFos£â®KûRÓPu*ºœLG¥ã€0—»ZIÑÃΓª]QðÇaÌü8f"áð5Ê…3ÐïÂå† ”ì«=:3ŽkÂ7êÚ²#C1"*“:CÙ 6€¶ÚfôY†´ :4\IÞd W¹Á¼/Ð3]U²ÕBÅ%rÅ…q²zNÙ¢é5ÇÀÅCªó3Sz.MZÓ‹C°³™"ºvöÈLƒt˜¨Ö‰¯ZA$vb;VåOÑ÷e®,7ôëŠ;‹%馧JiéxìTümàR@AÕŠ¹€vS-Ft0ÈÒ8à¤Yq¡ú¤S#$¬¬^éÁj˜pˆv­ÿŠªÃþbܬ’öa#û)t6…Îf­NC‡/榈áÒÏZ¸†6oÍÑý#!xÑ=iûîžI´|§‡Ftø—šV +endstream endobj 785 0 obj <> endobj 786 0 obj <>/Border[0 0 0]/Rect[375.72 337.26 446.94 350.76]/Subtype/Link/Type/Annot>> endobj 787 0 obj <>/Border[0 0 0]/Rect[473.58 337.26 549 350.76]/Subtype/Link/Type/Annot>> endobj 788 0 obj <>/Border[0 0 0]/Rect[63 323.22 116.58 337.26]/Subtype/Link/Type/Annot>> endobj 789 0 obj <> endobj 790 0 obj <> endobj 791 0 obj <> endobj 792 0 obj <> endobj 793 0 obj <> endobj 794 0 obj <> endobj 795 0 obj <> endobj 796 0 obj <> endobj 797 0 obj <> endobj 798 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 799 0 obj <>stream +hÞÔXÝnÛ6vé§ zE®5#’")mWYÒ Z4pÜC³ Õ– ¶\HòºbO´·Ü9$%ËvÛ†aÉäùûÎ%È|pñã óz`±QBâÄ‘*Ì?Œ7‚2ž „$üÁC$–§ ±*â‘$ãå )<Šam< yEŠŒ?>Ð×/oˆæ ¹º¸zþœÜVL$<¡«y•-—E9'¯Ê&¯fÙ$g¿ŽUÊ«Ò\JM†‚ £Éøz€E+[ ”íDòlšWäj‘Õu^³ñoƒ—ã‘Ü@b¸6„K•¦)áqE±Çä`ºM@Êe¼µ Ž@å6hç†ÔO lÆI‹Í‘aÒÐYÝ64ÜÒwŸ¦¾ ÚäSÿB +|&´dÜÐ@ö&U“‡@$ý3š …J#ü¡ñÝZò˜ÞV+O1]Oò3³ —4Rê bUùçà}*¥±èT49Žw#öiʆ èH‡2þUfÐ\Ò>Oüç¤ÿ_áÝOŒ²\`ä¢6vJ¶±ÚÇîß5õr± £bj!×&¸¦5”`Wl¨ OéïL*X̧ÜY µÊÉJWNzÇ~[I|[I°´Œ•ýÚÚ=p†Úb"õ_˜`d<äyEF«uS”жÚȦc¡èX‰K/ÑÉÞô“ñCN°§`¹¸Ñ^BÌÌyes¡z‹ííiX:ÕxìxX“ãØ6ôN¿ÜÅvûþõ™Ncn’8®áÐHE&qGòQdæ2«Î€å‰‡!ǦWål±ÎK8I7¬€£×Ä„È´Àý¾ÐGoƒ“uôN¿›">8TPîRûrOÝÿª¶¹ gœ`>Æ»'ÒQ ¾§ä(H{ ¤4çecGïôë]ÚƒÔRÓê:/ë¢ùÒÇ +D˜¡€õ©xBÐaGÛfFI÷áB“£†Aÿ–Ç c¾Œ×wÚ=Ö·íYÑ<¬æ«2[ôFòÕj8çžÀã<‚ô“BiŽáŠqV¾nèwCyËœ¦™ !Qá}±ÈûHc° ÒVûPç¢G Æ.”;ÚN ¥:YÛ³²wC¿[¢wŸ² œOlÃI<ÌÔhö‘¹ç"ï£ÖÆ%°}²wUîQ¨JŸÓïÆÕãÒô3Ãð®ÞÓæ¡îCS +SWqðÌap&Âý 5˜îà7ûàÌݸvXRè'ϽáU.“lûÇïÇ'"el?±dëè0jòŠrXÒ"gp×KpÀÃ(C‡J`ô˼²D5~H‚«X÷¦!Ýyý-Jl,úÏ—ÇPb},á‰eÒ€}V­–$#t®ToP:2™C´.­ó‰“½š¹Ñ ç¨Y‰)48ØOªh‰±pã„Þb·&2á…Ü0%ÜDV‘úKÙdÆOi‰ÃPdaæë”mƒ0K'ºƒstœT-œm45Ð<è ø“gp‚@|¬?A,…+ñ=½Z7÷ìų6IôUh&J¥Xƒ¯‡35Ž¡EÇDÅÑ^Ñ{0uÊ·Î芴:cÈa´:•Ë¶ƒ:1!±ÆûÙètOýx?¿gÏÚ;>ã‡í4.9p7ZÐÜÕœ zQv#ùÅM¼ü¦‘îö[ˆéÅ5ÄõuVÎ×P«pš1s!ÖEJ+7„mßCbžZ½wà^e(mÌA¸Ž—z;úîûQüŠrçÐñŽÇò@Ó“ªFúÛ²w‚BU¸›Ùíø¹€þ鯛ï\ø¹ Âï×›"nÈCV3Cãe•g#Ìû{zÏàªH'Í÷NÈøÛÇ8®‹Ù¬å‚UÏè¹Èl0¾÷8Ÿ`¼Z/;#aõd¦N!¬vãy|'ŠL7Ù¤YUHëç°\¿ƒÕ·§)º+¦ù @Ë «£mŸœËyNø:{÷"qB3¬nåé×2Ÿluk2]\}%Ûõ»½˜Bÿû[€x +endstream endobj 800 0 obj <> endobj 801 0 obj <>/Border[0 0 0]/Rect[422.46 100.26 513 113.76]/Subtype/Link/Type/Annot>> endobj 802 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 577.62 176.94 589.62]/Subtype/Link/Type/Annot>> endobj 803 0 obj <>/Border[0 0 0]/Rect[375.72 302.22 446.94 315.72]/Subtype/Link/Type/Annot>> endobj 804 0 obj <>/Border[0 0 0]/Rect[473.58 302.22 549 315.72]/Subtype/Link/Type/Annot>> endobj 805 0 obj <>/Border[0 0 0]/Rect[63 288.24 116.58 302.22]/Subtype/Link/Type/Annot>> endobj 806 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 807 0 obj <>stream +hÞÔXÛŽÛ6}÷W ò$nb®HêÆæi»› RlÐ…ã¶(â>(¶ìUaË…$7 Š~Pÿ²3¼È’coÜEQ°d’s93Ãá¬F—/ßX5£DAfe ¨êb´};]Þ +0]Ž„„?øYÊu© +y(aº…¨…‡ŽMç£1ÃPÁôýèmp÷âbžÁõåõÓ§p_3‘ñ,Ø®ê|³)«¼ªÚ¢^æó‚ý2ýM)k*æRÆ0\$1LoF¤QxÝJn£zRä‹¢†ëuÞ4Eæ¿Ž^LGq¤GÂã¸TZkàQ†‘E”Hž&~¡r æ1e&imÐkÀÉ(ó ÉÙy&‡:oZ`ㄧÁ¿-rzA[,ì ”ôÌ‚Šñ$pË^»EõüÁ-’öŠ˜…Ò!ýˆ|OÓXó(¸¯·vÅb7oáG–f\…ÓÒ8ÛÊéǘ‡T)“”¢J.GÑaÊþ¡5ghCe(ìk ,!wÁ?ÏüçKÿ¿Ê»Ÿ”;•rA™ }î”ô¹±ÍÝ¿ëêÕz “r…šb­µLð8hp6EÍÆ*á:øI…ƒÅ‚q3ºí”J³$ŽW¦Siw»æ:±›‹^´‚$M¹ŠöÄJEHC ²¬ZxÈ–WÈU•_ï6“í®E>¹_ã讹޵³`Æ`¾­šöy¯ðCÚ¹7Çt¼ÌÛâ~½knÊåGŧÇ„®ê"]VF +G—çK‘™I±Øá輸ÿé®' Þ_É£ãaü?äõä¸ÜêøþC¹(öB8~&U†a¤`±Ý½[ï˜äm¹íû‹ÜiÜ.%?ýr4b%R‚!J—™u±,$.$Y„å«s#A!ñfŠk"\Ù.Që DšÐš8®Þ=(Ђ~èpÂyDŒ%Óôh,bñtÚ|â?xDª JuÁðN:FcŸÃQûü¨‡âïÉmÀl8AŽÿùÜuz¾©TÔIš¾Ò¼Që•*ž˜Ëu%ó‘·éiɪë÷m)ÉF‰kIMKcHzqçã¤hñ¨¯²`ؾftdEø(~5ܗż¿/›îʪÈkãµÀnQÅû˜’gô —E¸%¥Q°eø…–¤ÄssƒONe ³€Â`‘·9,ëírpáˆ=ly÷ÄþÜ î®~~1 —\ë¾7±÷FhŠ9V_Û%´f’+$Vmºë® ½óu‰Íc„g"xï4r½xØ5v9B»Nh>VmþÊjÉdfÇ(&f[V¿Ã“zïÎð¶0 ¨?`ÏžøÓI¥1ÇE…XR <17@ík,ŠÌá¤(õ®ÈºK”Α¼ZÃï1Ö°$ÃÞ^„gÎvuá#ö°¦¥–¸„Pö«Úh¸ÎgÆž¸ë‘ÀÊ–3<Æ+PvDµÀxãü'ê“Od먬LÂl¢AèÒ§»õº»ô]Þ`vïòjµËW¶ˆK¦°Zi—idÙê𾇠Óé>ó·&UÐnÂëÊXqkÀO]3ߘ24²'zLŠ‘RØ^XØ]‡Ù#ä9Ý)aÈ;†ÿ°Í8§mÖk0zÍieŽaWwšòqÝ s×`éÎŒqžƒþ™ƒ¯<#ùæmÐQ,&Èt![ŠíÑ’g=Ú¾Ø݇’§ CÅÑinŠnH-"4ëëL»ø{ª±Ü„ñ"rñAq5Fjþ‰édˆüWIÜÄUÉ?å*„ù·fRÌõ +endstream endobj 808 0 obj <> endobj 809 0 obj <>/Border[0 0 0]/Rect[371.4 469.26 442.14 482.76]/Subtype/Link/Type/Annot>> endobj 810 0 obj <>/Border[0 0 0]/Rect[445.02 469.26 549 482.76]/Subtype/Link/Type/Annot>> endobj 811 0 obj <>/Border[0 0 0]/Rect[63 455.28 130.44 469.26]/Subtype/Link/Type/Annot>> endobj 812 0 obj <>/Border[0 0 0]/Rect[157.14 455.28 247.68 468.78]/Subtype/Link/Type/Annot>> endobj 813 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 814 0 obj <>stream +hÞÔXÍnÛF¾ë)9‘M´æ.É%‰œ\ÇiS8M`+m‚¸‡5µ’˜P¤ARIŒ¢Ô·ìÌî’¢ÙVE@”ÈÙùùf曡9,'G?]pX¶B¤¥Â=YL~œMŽžsà0[L¸€ÿã…§ ËRH€fëI€ZXá½Y>™² B˜}ž¼÷ÎNŸCÌR89:yü^7>OYêÕËF­×Eµ„U§›…ʵÿÇì4ZS1"†)g\Æ0{6!¼×rÒmTŸk5× œ”ªmuëÏ>LNg)X"1Éb L„Y–‹Ò ˆlL&Ló#e"Úyˆ@@hb  ™ >|¥}ÌäŽÒ­Úü©d‰÷æz®è÷:=·_  kêU>“ž{é„š|å„„½<ö§<Ìú'ø=IâŒEÞ릶óMÞÁo~’2ái§¥u&êÊéÇ€ÂT™¨ärÝÎØßÀ³ÌŸ¦h#›Š€Û¯1ø’Ü…þzøå?ýÿ*~Rî„qÊ\Ðç.}îxls÷ïºz\–p^,±B¬µÎç,öZlÁV7þ4”,ó>ù"Ä›zÎŒÇØ‹®aÚI"wÜC+((9¢”¾.]{%¦ï‰H.nªN}¡~?šÍ„Õ“±LÚ¥/¤+–,ŒHÔ¸&͉3 Ô‹âEµ(7ºÊ55‹÷§›è5K@Ýþ Ý1§Šªƒj³ö¥7œ:­ºææÒ»ô!¯ñ~ÕvOŠÙ(?¯7W%*–ÞçbÞ­.‚¢šë/ÉÏ‹¶S¨~çÞÇSã#£ˆÜÙöZåH­öE´5GÍ­¿ž:¾ísŸ›4˜oˆ^,S&SbÝõ(‚íLù<ÃB¸Áê‘z1Ï.ï¤6Ž¸K-i&…àVå¹î°Œ8"îÚ9Ò–ª¦-ÌU§`ÑÔkPàìÄ}ê“ÌöE08é¿;=7%Ò»n{ÇŽhuÞÈ’õº•)‹‚ÎdŒó­t n³d‰N‘o f«¢…\•å•Ê Ôûˆ?+¸Ò°iõ¾HˆŠ}ühå T>Î3âÚ>1Mg™™{CoçžÈ¬íîæZ·péå›î ¬qÖè¦-‹Üx”yOü©0Sf}]ªª3j1©Iâ1èˆã ¨jM½é¨r|?פMxŸ}“M JHdÇLD>û±À_Æ`êÁº¦©ç̉xl.qæG„Ý¢ÝjXl*ÄŸð–fàí ÅY êúº¼®’Ÿ†!ãéxEØÖhŸÞ÷ž È!žXÄB<Á!éó¯ NêõZW]‹M†~õDi<*)£Ý€åi j Q_¹ê4¬1 r &ù8ÞÇb‹N5˵׭Tçª+›²Ñ ãwÅÖ—àµÂ~‰ö^Wä›R5ûÃ*J&…J^#öXˆ¶U‚ Ý[©µÒû: ¿­`a Q=à‡5d@žåÿ©ÓN¹­ç~ãSÇ[ÏI™¤‘¨eÖ4NkLದZ‹±ßí‚÷ÍaÞaõ¸Ñê‹Ï +µ<·ïöHâý;•Þå.¹‹~Õ|H©üu³¾ÒM/Ž÷{˜ 8÷œSë팷Gëì=§L1_t*ÿˆgiÓoÞœ=žP9>c•RtðÉMÒ˜Õt%W›Û;ÿçÏ‘H†`é=`wwçAŠ/‚Ñ4Ö÷¦ÕgÚˆv«ÙªÑíª.ç[Çðþá¾¹¼{ëåä;Îïë”àƒƒôôg¿1³„C™ãðe\Çv”â +à¤;õî Ž‚2™ô}òתÁ½K—¯>á–fïwú¾’6„ò­MtZÍ_-ΊÊBõs8Òè´&§OçKª°;k‡ù? ^:7Y +endstream endobj 815 0 obj <> endobj 816 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 817 0 obj <>stream +hÞÔW[“Ú6~÷¯Ð£ B’ïÓ'Ê’4$e7›L·Ž-Œ[dwRÿed knI;î>Øóû‡ (3†¯ge•áÙÈ'rٕܘ?GÆðEEsƒ2Dà4ðq ß&˜0­ (˜8 ‹c€ !6ŠŒ?Ì·“WÈÅÇ/_¢iiÑf‘•ñj•‹ ½’—ó8á֟ѯàÊ®]¹˜1 (¦ž‹¢C!ÒÛ¦ +[Cßò8å%/ãªâ•}1&‘á:!äáa×C˜Ùa"ì„8uFþמCª˜9{çP U[B¦Û:„:ûÁ¡´I«xØ62æ5YÇ•DÖÀþùû:Õ5%O딫g` + {f£ö®Q*“E£Äê'¡®5 vHÔ7€wßwCì˜Ó²¨5ÒM"ÑË03yƒR5. +ÑàCt…‰**cž¯ªªBvœÃ–ý…hZƒ|„Fhýê"ËSá¢öyùã?Wýÿ‚o?ªÞÙ>¦ªs¤íÍÚÞQ·îÝ¿êh¹D·yêìI‹b׬`+^ZÛáùÍb6yŠuÄ°ŒÍ:ùL¯“ä±å•(bõ¶‡8ôêåR/¡<ßǶ³#Âl•)©“Ì…D‹¸²B“=vâ冟åö´Ø|^r¥¡}mVŸÕx¶„ +â³Þ´³èiÝ©&è8—ƒ²òõ¦:tõ¨vÆf&a³S6G‹ß|{Û˜Næ9Ü`>ljb‘¢[Ž5cîR×õU9ê¶\ÓL©ktº9|¯ÐéÁnkò"ð+†ö­’ºX5úUC~¬uðœË»ZŸŽh‘=@U”ù¼â§iÿÚ0kȳqÖj{žˆó!OåÙrž*nùìDDigÓmÛ.Qüx±æ§K4ï¶IžQì®ÀVµ{SzV¿ªµè^°vt·_¾v7:†ê)ˆ;¬POHà0~éÕ;×^¿ÿ`€I/> +endstream endobj 818 0 obj <> endobj 819 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 820 0 obj <>stream +hÞÔWMs£8½ó+t„ÌXßPsJgk¶’I*a“Ãd,(†#R &™ªùCû/·[€m¼v<»µµÉYR¿~ýÔÝ“̵ã_nM2¯5Ï&> ˆxÄf¤âÚ£viÇç&1Iô¨™að3ðißf”Y$*4(”90%Ú„2Æl=kŸõ‹Ù9qi@¦ÇÓwïÈue˜ ôr^ÅE‘‹9ù($¯ã„¿G¿‚+»uåRËrÉĤ¦ç’èLCD³Ç¶MÄVÐ7‰ÅÌvèÃCº¤¾ýñŸoýÿ‚/âÙÙ>5ñäXv¶ÕŸé¶g÷ïR=Y,ÈM>‡ õ!פaRW¯¡k^Û£¡þÍ°l˜ä)UŒ¡»rò-UNôŽe[‰"«-ö†^[\8mâù>µU_a–‘²6È\HR?ņ§'ÐANÒ/Ð=„œ6²~€5˜–$)y0HRŠZ~¾åR[?>&°m­Vò`¦eóÇ‚Cœ: ¯ÃÞç2ƒÙ\<(¿›ÀN`ÚCàèh+\Åã%L@LÀÙ:ûQnb1ç—˜Þ ÓåÉk¶ñËÁ¶Åã¢á¨o·Š1Âþr‹ž¸}$JÍx”NH˜‡„Òi ³/#Í/¸˜Ë,Ê*^cZ•‹t ,ŒÃä…ÂRÔâ3È“XP<uëö♕‹û<•ÙŽ\{S* ™µAm+êÝA]ÇÕ-ŒøkîwZîwº/úO¥L²VØ]õy"½zTX÷˜¨½œ£Re…qû³jn|ɬP.0ÚÀ6© Z[õÁ¢)`24/š"iäƒþªhR¨Xî_w‡Å¿ó$‹¥“½)¨,8‹ë½Ñ‰WŒ5ÝæuZ +Á™—»ÚÜålÆ<|Oœß\]žœ^ÝÍÈô?OgW÷+Ê„$°˜ÅÕ)nð „žþæ]£§7¹Øħ¦èÞÄ5N»¾fý,¯e,°ä_-¸õ¼Ü(Í«^’ýŸ1 |þMÙHüxy½Ž¡§.Y­˜¨kÙ»jc-n aõ±<Û‚û׬ŒÃ%n½•ñÄžA·Ù‹ä¢^i×µ”ñ`P;ÉWÁëzÜ¡Ìê¬ÊÅ×xÎÿ 0Ðÿ²YÈüi‘óêgÃäéœOã§á Ê,†/h!â¾x~ŽYÖ^Ww¤ÙÛ5kª +®Ðg˜òûuÙvâ¼[³üVæ)I,5»“ªŠ¿÷ýä_% +©~O”'”óèˆä[;ZC¡”ád‹eK +ïzËì<´MFà§G0‚Nqõ¶FNx [»‘Ã7Ô_ ÂÜ- +endstream endobj 821 0 obj <> endobj 822 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 625.62 188.94 637.62]/Subtype/Link/Type/Annot>> endobj 823 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 565.62 188.94 577.62]/Subtype/Link/Type/Annot>> endobj 824 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 825 0 obj <>stream +hÞÔWMs£F½ó+æÚÕhf€©œÙN%eW¹,²>¬s 0’gƒ@Èòþ¤üËôð¥ÖR©” áuÏë7ýLÑÚ˜ý²¤h]ÜFñ‘ãsd”Kceü³;Š( +VeˆÀ\¨ïaá#Ï&˜0l Y0q`-ˆŒ)&„Ø(Ø_ÍûÛ;äb-f‹OŸÐcnQûf¶ÎÃÍF¥kôkZÊ|FÒú#ø ¶²ë­\̘‹¦Sî¢àÆÐi›Û¦:w•úI†±ÌÑ" ‹BVð͸ ×PÇ.G˜ÙB„Ÿ§®ˆ3ìñö9”Š™sò”ÐBØÕC¨´ÓATÕ ¿-Zóa3Æ›ªÃ¢DÖ”cÏü}‡úŽš¥Œë¤ôÕ7S s³=4 ì!¦ŒÐúÖE×tQ{½þòŸCÿ¿É»ŸúìlS}r¤=;›µgGÝúìþ]ªó$AOj êA¯•Å®Y€ ™[S›ca¾Y̆EãŠ1˜±±“Ç*;qÝ\ V»]`Ákséa#îyØvƒ…0[WJê"ß2C‹›…*Ê0ä<ÏÃï/¦JË P5ÓÝæ1ƒÅgg»?9©–÷*._‹Ïµ–˜í¢Í|iã 0 : +·_Âd'‹ E°œ¥EùX ôwb6COÙ®Ô¬J7mò1ì(¡Ê0èyíò\¦åL USH ëQ•öÈ——D®Ô}ø02o‚ZAµ<Œë&\,ôìbÝìÒSêDKêûÙhôüjNPØÐìe%Ri,ßu©BS¹]Ïà­CI7—L.2Añ5È šðÊHÓð!‹eRm«ƒtªA%!BhƒŽ”tù*éò%*ºC*6çµhuzžõjÔ2ÉÊg•ËgÝ£mUºÃ/WÕ¼—麋Ô89†süÑ&#¸“œCÀ‡ð}ƒ7xZê˜å6Ô†g|·ÈÂw&m˜Ò´¯»×²‹Ñ°<^Ë6Q=‘ZW_ÜD¥j³Û÷ö¨¨@ê‡ð pñ*£¿ž¡_²ýÇEÇ,K¹rÜ!âN%É<*Õ›ì”z±`}\ÝýÍúœÃЮh©gƒ/™2ß*KÏ'3@¿çšï«zª£¢gøØ1GsyÔuhïÐNζö²^Dn*ãÈãŒ;g²ÿNBV9ÙòÄÑÍ÷ÜáÕþ . xUÿ#ÀCÆúL +endstream endobj 826 0 obj <> endobj 827 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 505.56 188.94 517.56]/Subtype/Link/Type/Annot>> endobj 828 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 829 0 obj <>stream +hÞÔVËnë6Ýë+¸”ra†¤Þè*Mœ¢E‚‰zï⦠V¢e¶lHrêÛ?ê_vF”d[Ä.P…”©93sæ)NRãú‡NÒÒðlâ³€8GlF +e,Œï#ãúžN¢…Áaðƒƒ> âÛŒ2A¢µÁ@ eÜE±1£Œ1›D_͇ù=qi@n¯o?}"O…Ř›´ëu–§äǼRÅBÆÊú5ú LÙÚ”K…pÉŒSî¹$º3P#ouÛuתŸ•LTAnW²,UiE¿óÈðõ=`âQ×#TØaêŒ9šSM³~ L©pN^B PÀ®_Ñ. aM>$ðÒ ZÎèŽè^CZ–±fõÍ_¶‰Ä'nV*Ñ$Ã30s‹zf#öØñ²údܵfÜþñ8<û¾RÇ|*6Z"ÙÅùlù¦j´”‰MÞè‡ÔfS!<ƒŠ.;N?c†Ö,áL0®]byè.iÏóÿ\ôÿ«¼û‹¹³}Ê1s¬Í-ÚÜqWçîßuõfµ"ÏY +êC­U§®YB –ª°f¶GCóÍ6\ª„ÖC/6í䋺<˜ÝX‰"¡›=¤¡§› B›x¾Omç0W˜°[¦M‡%›Ýo+E`„”•Ú¾šY^7œ‰Ú¿Z$ÞÀ‹ïŽJžaÏÞÁŸŽâKYZžù¨5D߶Jk pÝW]*^Ê⊬-43)¸ L=¨<­–ånP¸Öè1hCdÖ—BVå^%©*káú]äºÖ>€‘úz,À‚: RÖ +òÝZ›Vy¼Ú”*‘…’¯&âà~"7=§Ð3¼îø#¿d —‡<}é‹à“ä_¶2†IPŒÌG ¯Ô"AïdÛÆ6paèÃ" ]⎂±|´Nz†ʸ,lúæ«yEÊÆЮ8¢ ½™…Ô³qÏŽS˜×ØJgn2m‡àwˆç]g®'¢®û çFú¸Ñ<©òó›*–2Où«Y7æ9I€Å‡àŽXMaX£“gÊ*”h‹E’ïcµ­æûªÀ´Þîªaeâ`xßË•Œx,ô<ú'?|(ǧB-TÑ+Ê“qÒsµÀâ‚Û÷'®É-È ÁÝž¢±ÎpŒè:í©¨Gí…ZćZ&ÃpéDì9Å‹aèjÿ¬ª„¬¬d«'UÔ{'f»ßš/Æ` ¾õ2¶Ðç°±Úê ÎèwD„àÀØ]&ÓAÜS¼:ƒÉ°± `2i€/ÙŸƒ©Ük—÷¤NöJ}9ÎçØ’‡µ¾ŸìF# ²a!÷÷«¬`EÝœñu0’´uøú3aÀ›¢ßšÝÅg²v6h“×rŸ3Ù„q 6tþíXøôvûÿ-ÀcYx +endstream endobj 830 0 obj <> endobj 831 0 obj <>/Border[0 0 0]/Rect[375.72 484.26 446.94 497.76]/Subtype/Link/Type/Annot>> endobj 832 0 obj <> endobj 833 0 obj <>/Border[0 0 0]/Rect[375.72 186.24 439.32 199.74]/Subtype/Link/Type/Annot>> endobj 834 0 obj <>/Border[0 0 0]/Rect[473.58 484.26 549 497.76]/Subtype/Link/Type/Annot>> endobj 835 0 obj <>/Border[0 0 0]/Rect[63 470.28 116.58 484.26]/Subtype/Link/Type/Annot>> endobj 836 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 837 0 obj <>stream +hÞÔWÛŽÛ6}÷W ò$%1W$%RBŸ¶{)R$M°«6²}PlÚVcK©$'1‚~Pÿ²3$%ßv<´(–DÍÙsF棳Ÿn9ÌÛ‘’ £âTŒ 1£ÙèÇ|tvÍC>qþðÂSͲ´ŒX$ _"´Â¢×òÉhÌ¢(’½ ž_]CÂR¸8»xò^5!OYÔó¦X­ÊjϪÎ4³bbÂßóŸÑ•t®&DcθJ ¿‘EÞÛ–œl[Ó7¦˜š.–EÛš6Ìÿ]å£$ÎpŠ% +˜Y–‹Ó(ŠÝŽ”`Zõïq«LÄ{ï1”i_âN‡x„uS”ƺÀòÀÒhà.@¼¹ Ÿ>êÛZê„9üd‡.âo`ÊND}ko«&Žm[ÇnBó• sªº`Šjj J¥u.Èyï3Öˆãiï™':á“&"ÎÄö¼ï‚Ì'á`øÈOgVëë%8 ¥÷å˜nŠ`Ç°v»,]óºˆ÷N€¦ÑlφiôìÏõyQÍ×ÅÜ ÌB)°-Mˆ©Q<ªL×1s.=` 1œ£Æ’‰dÿô­smUhþ½µhu ?ÊV·BŽˆoB£.8DALòb™ï‹›X„Ù;†D€É¢hšu›†`q‡S,z·/+sUuÍæHÄRŠ¨±ôŠ"ëÕucþ\cBO™™me<»Òòçm¾.§Ý¢=að ìQõ–,ËÒJsÊ^׋m‰ü»ØºEcŠS6qf9G‘(‰kCb§¯Œˆ%Sj¿ÓúALÒX¶;ÜO+‚+7[íᓧáHÅR + +ÒIMã,Cë& ¤R@ªH¥ÇQK>Å€ +ãoÐSà¯è­=‚~•ìqÓ÷ û ÏSü^¦CcÊAevæËŒƒgô9î¦Iæ#éáÏá%N@xý.aSíðµLÚìXÆ ¿Šé£\÷¢ÉrIÿ廃¬HÍTBøw²F8S| Xп¬œFÝ=\u>·úrá ;ÂR7Yâ|ˆ-»ÚJogL\¿÷››þuÙ-Êê°í¦û­ŽÆOGô˜ó+×KZ +endstream endobj 838 0 obj <> endobj 839 0 obj <>/Border[0 0 0]/Rect[422.46 617.28 513 630.78]/Subtype/Link/Type/Annot>> endobj 840 0 obj <>/Border[0 0 0]/Rect[422.46 391.26 513 404.76]/Subtype/Link/Type/Annot>> endobj 841 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 294.6 170.94 306.6]/Subtype/Link/Type/Annot>> endobj 842 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 270.6 164.94 282.6]/Subtype/Link/Type/Annot>> endobj 843 0 obj <> endobj 844 0 obj <>/Border[0 0 0]/Rect[422.46 165.24 513 178.74]/Subtype/Link/Type/Annot>> endobj 845 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 846 0 obj <>stream +hÞìW[oÛ6~÷¯ ú$¶Ã;Eô©KÒ¡C©¶ah÷ Ú²£A–K^V ûAû—;‡”d+MÝì¾aE€ˆ¦Ïý|%Èjvòù+AVíÌ*âxFtf‰âd[Ζ³ÏòÙÉ AÉ—3! ‡?xˆÌ1Ÿ§8ã’äë-ŒkØËç³”qÎÉog¯“‹óÄ°Œœžœ>yB.·Td,K6«m±^WÍŠ¼lºr»,æ%ý.ÿL©hÊ0) IÖül†Å [ ÔT_•Å¢Ü’ÓºhÛ²¥ù÷³ó|f%s"±ÌX¤òÞ¦3ÎuŒ)„^B¤LêÉKH +¨ðÓàCðžÀK 1£;rtLÚ>è¢íM-sÉW7‹W"éÊE\ +ŸYÒPf“^ìË^h;¿î…d|rah*”çøÃ*X;g<ÓÉåv%»yG¾¦.c2){-mobÓôú¡!Ás*¥u˜TtYë»û…ïiš ŸJ.âÒjÑ]2<þøÇEÿ»ÊÇŸX;å˜ÀÊñ¡vJµ&Öî¯uõy]“«jê ×:*˜IZÁ¶ÜÒTY擨T°Y.Xðf±''Ã8YÀŽ÷aE!–d +·N3·ÇÎ FÊcu¹¬.©’L%05šs[ÔuYOdV¨O;@'TˆÊBÚzDA…WeS•TÁ€` &ÌþhÉMÀ¥` ”ÆñÚ5¤.›UwMªfI%Nà&œ‰ku âr»Y“‚ô^šè¥ ¼åcˆÉÅóoϯÌÆhÔ¾ê|?±É›äj³ëMßPÒ–ó` OgLˆƒsf;‹ao–¤». Â貪!T¥cÑÁÒ ©Ká¿ =Ͼ€4a¬É–´ïš®ø1d@)ØKu_Bðé{ñ­MS™´Ù˜‚?%ú§}ø*3ñä=ôñ:iË’<º(°à"yG%‡pɾGCk)™Æöõ@ež3œa€Vöì°o7#$óH9‰a}õ}î¥ïµj +šrHˆŽÑ¦0èSîÓÞN£¼zr¹¼(šÕ®X•0†ÐÆ´DZÙ–Í]J`Ë™÷zÅL÷³˜öR)ô­s®F‚sá Rù«Pöp8Ïe<í8X0wFC†¹“£šž&çÈÚ$ŒsGÙ*ù)¢ † lÅ‘nφ鯚Ž4»5µÉE½7 Ô}¾iÚîY8—?ž}S-> ³ØìÞÖ{›Ô½"¡ã•WÌðhƒÒ#ð¨¼ÆîýŸ#¤‚Ü)ùq„Ü2âɃP²j_”4Ëz‡¡Þ‹¨ù%´&ÃnÌT¦NzÃœ&>ôðIVs…pe¤‡–’> endobj 848 0 obj <>/Border[0 0 0]/Rect[344.52 119.22 386.4 132.72]/Subtype/Link/Type/Annot>> endobj 849 0 obj <>/Border[0 0 0]/Rect[344.52 345.24 386.4 358.74]/Subtype/Link/Type/Annot>> endobj 850 0 obj <> endobj 851 0 obj <> endobj 852 0 obj <> endobj 853 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 854 0 obj <>stream +hÞÜWÍnÛFrÔS,r"“h½ÿ$›SjÇA +§5d6=$=0ÒJf!‘IÕ Š>Pß²3»KÒ²$Ç)P) héåÌìüì÷Í“ÕääÕ'«vb$IXJTjˆd¤±“åäû|rrÎ 'ùrÂað Oš¥$‘Œ2AòÍ„ÊìåóÉ”2Æ$Éo&—çDÓ”œžœ>}J.›˜§4êUSl6eµ"¯«Î6Ëbnã_óà(éÒTM¦œr£I~6A‹¼·-9Úv¦g¶X؆œ®‹¶µmœÿ6y™O´Ê Cµ!TÈ,ËU)cÊGdMLÿB¥Bí¼‡L`"¤{ ‘yÈ\ô—*íƒFÄà™0!ê¢íH<54‰~þ¸(ð‰G]øRâšFULMÄÞ¡f~„„_×ñ”ËŒá?FÁs’茪販½Äb;ïÈÛ8I©ˆl°Ò†#ê*؇¸ 3Lª&Á¬¢ËJÝ-Ù_„gYß—=õeO±TZqì(P*Wr3RâÓþ¦˜»Þ¡¢šÌêmWV@÷;-cçi~Ûw=vŽüÚìîúœk¯¯(ˆ±Pé¹/wôæÅéì'/Ž‘#üXoZ +“&8‰˜¯· K:8µ3 \¯w ‘½‹–±HµkÖkX‘Äo°?¢›î¢~¢MŽÜu•f4ƒïvÂÓ“&½° B£F„08³U[vŸCub ´î$£Z¤†FšÞïQGÌ`´üh'}»n ¢cÑ'Xíú–FÑ „héÆ¥ptd/@.5 +Þ±®ûbõT ½ñc±ÂŽÉpôÖ/dX‰p§ö“|0ºA~d±w.¼ËXaO®cøÌ´=W:%NÁ(Û u7Bx?žpðZŠD9CNî P¢º³éž0H&0w>È›½{qm2ÑC˜&RïÄÌvи€ ]ÚF×$,6†Ÿ–,¼uÀÌ2–¤eªp†·Qk+,EWB8˦ÞxTù@úÚ'˜ŽƒRÓÚ¹3X/9„Ù²\[@^ä[L>hÏö#èt'Ç<4‘sR±4¤u]É…"’aûP ÅàŠC‘(ª!›_ÇCãàù­î*pàÚ‘Då]€þâHÕÀ_œJä/ ü]q”˜5âkálz + .'+ óõGÂ7¢;êÿJX\U=Œ¯8|ƒøпAÆ‚ˆÿ`©­K +endstream endobj 855 0 obj <> endobj 856 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[356.94 74.58 519.78 88.08]/Subtype/Link/Type/Annot>> endobj 857 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 858 0 obj <>stream +hÞÔW_oœFçSÌ#$aowTõ¡qìÈ•“^s4Š•ôp{gÚ;8-œ7Ÿ(ß²³°œ9ì3¨RUU– 7û›?;³¿a–ÁÚš½^0XW–ð ¤ø‘‚’ÖÊz™X³  ’•Å8PüËBGz”PÉÖ¢h…PeIf¹„RêAòÅúh__@@"8›=så°ˆDv¹Vév›k¸,j©Vi&ß“ŸÑ•×º +縌0@òÊÒYgÛcÚvcúL—RÁÙ&­*Y9ÉÖyb NB;$@¸Ç1?¢Ôo÷Ôl³YÄî-b"4Àkq£‡4ÄÍæcÀE?êö¬Ãá‡À¸0›N«WÐþm·Lõ³k¹l_ ×ÏÈ."l{c@*»1 Þ>) —y1Õ?„~à &¾=We‹Xî³Þ;aD¸-•Ê¸( cKÐ$˜êœr.BT²ï+öX;n„>b—SÖ¾à.tÏéÿúÿ5~ø©kç…„éÊÑ®vïjÇ‚¶vÿn¨?m6ð._ã ñ¬Õ#]!+©×$¶oî¡P.I1rÑÐ)ä öŽ'Ú +E(z-¥;—†^aÃ{ÝHwE~Õ|Ÿ% oíÄ$-Gõ‹¶âùÚ–V>˜1$ÍtÏ€\åoÒL•š(ö·6Ñ„b0š(T3ý†ÒhäE 7iå»é7ŸìOdeQÕ?4jɳ#ÌkYH•Ö¥š†“#°yùEŽ™úEå뼟ÿ:‚¸E,ʽÊÆ"þ°¸Ûne­îFp×q1\äµ|›nåØ<­ñûÓKÊO€ÿ³wQ*™¯‹i¨®Tz!Gq±”_áG ueQÿ3Ýy™T OQ=Û”ÙŸÉÝîtòê%âö«ÕG4¯.u¬·RÕQÍw)¦È[¤â5²†b¿ †jK[7¨£Ù¢Ê:Êåã,m~C†À›T=ƒ¢ÛÓOé4½÷éfoQœ?ªØë:Ërÿy#[û­ÑsO)šÆsä¶Ñm«Ñ¯â‰¬#×w—zû¬óÞê ŠÇtµÂí)AÝtˆm¬M~Š{ꜞ¨Ú ©[Ý{ Ö˜<]…õ Ñö]=†?Õ°«i°jÐ +Èœ ˜4õá9)›6ñ¡=úîÑÙoìÁ®Ç`»Ã7ä!ȵÛ2_bFu`æ«Ô”²­%Cñ è ¸Ù5ÊûîôG‰‹ÒŽ»˜§ŽÈ(UEïLMHñ Ÿ£üɤUØ«GS¦A×Oç⾘æyú“¿*•Þí°9ãþP<è°.‹¨ f³r§——EºWÛ@ ü¿MøT²½qFhä{ÇÄÁ¹Ì bÓ9Nj0›_¡îÇ*ç Ø¼!xfÞ¥>âè€q!•m}ªÃY¹Ä+•™ã:8ƒºŒðÒ$;‡qîÄæ £¾óv39t´K×úâB9î/SË¿ÛwÙ” +endstream endobj 859 0 obj <> endobj 860 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 861 0 obj <>stream +hÞÔWénÛFþ¯§˜(@:ÖjrIÂÈÄqÍ›i“ZEÁH+™D +$U;Hò@}ËÎì’Ô% +EeÀ\-çü攀ù`ôìRÀ¼h!ˆ5(•ÌÓÁè©él $püLj#–Ä)θ„t9à(…ñïÒÉ`È8ç +Ò›Á•÷ÓÙSY §£ÓàU勘Å^9¯²å2/æp^4¦šeãÿ–þˆª”S2)C +&té“Il%H¶}a²©©àt‘Õµ©ýôÁY:ƒýÐ,ÔÀ¤J’Xs8´d‘îÞ£«L;ï BÙ—èiCb½O_qç4Ù#{ˤn½Îêü¡f‘÷z5Íè$¼ÆLÝrzÆ^á3íµdÏ[¢jrÝI÷ä"ô‡B%œ¾hç( +x¯ªÒQLד~ö£˜IÏ´RêVEY´ò1aN J©#B•L‚ýý"IüaŒ:’¡äÂCð5™ Ýóûÿ9éÿWxÿ•b§"&(r¼‹’]ìDèb÷ïšúh±€‹|Ža®5¾`¡Wc Ö¦ò‡J³ÄûÓ— +/Í”Y‹±ÛrŠ¤-'Í£ï+i*]µ',Ñ®¸è(ÐQÄT°i,\*ò”;''eå5ñµwUG0++“Ï‹—UnŠæo›jìåEy15·ðø؇I‰/íd« +8•ñ8-×ïôZYo¶àu'£b{û]l‡Í‘- ±“ý{–;‰û|Ò6É®+j¶%Û¬¹`:¦V¹t5nWÞÂÌòW¾B|=ì +£‡†Ö»=wÓÞQPmk·b6M"p1¸0̓.#l ¶ÕÐ\xY1…·°*I>Ì|$ШÿU– U¶*C¦Ô&ŸyÜGÙ{yqþìüuôÞ@̬$Ü¢¶FQrX›<«Ú1´â¥"–o$_žÿz¶#W²`KªêkÊI­›¬1KCîä…óa[GlGÔ¾ŽçN/^î¿oøf^ 3iò²`­è6¾C°+›âvÌ2²,4M/?MvkY¾RJHÂØ–Ò~ÕM…“ó +lv¸ˆ}t†qLƒ­!ÍÎÖ6éoOHïv|8¡QÓ%é°‘p4Ä¡CZ›+35T3à ØÖŽ×ôíÅzywªJ2­[Ç\ž·Ró<›T¾ä˜%œÝfËÕÂ|+Ýâs¹.D+Ê­W^Š!ŸùJ¸Ú q¼.¥/ü~C+Œñ%ÕÕ­OëŠgUA}ÝQøÃokÈ`’Y0BÊ7*7Ò·X¼Ë&¾Hpj¿‡ª\7yaà&o®mò~ûU$WÛ…!7‰ˆpV„EùØÌóâôÝûùw¹Ãxk¦¯wl3qˆ # +¶÷°øÍÆàQÝ‘iÚÂv«C¬Ž¶RûÛ1‡Œ£õØY­"±ŸÕW¶÷.3Ì¡ÞÝÇ0¶œf‹Þ#®ÖÿߌLJs¦¨ýøº;ѧ3o³ +Ž–*5íãMg?ÈG ýš&¤öždMk<Ó[ûÇRQLˆ ÜX€Õı5y#äùÜÃ]yRV¶ +—7YMšV´úN±7ƒ¹]Q#¡2ï“åkNŽFÖ4¤ý2?v<ÊgäÑØV.Ü{h¹ ^oqõíc±ª02³±wŸ¨ ¯¡(í”Ûê¤à5Åð7þ:À¾ÛÉ Y EÔî8« ÷ÛbŽÄl<.îý~¸òn êuW4§ +=‰}ùÙe÷aÜG86 Â˶ÀºXãæÓOì>ôßÊŸµ{=5|ú÷ŽºµóþNÄ,> endobj 863 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 864 0 obj <>stream +hÞÔVÛnÛF}×WL ´à&æjwyG‰â)â°˜"FXŒ´²XS¤@ÒM…"Ô¿ìì…4¥È†_Š" ®†s=sfHדéÛ9‡ëvz±ü8A#'«É«t2}ÃCºšp ¿xáqD“"Q& ÝLz¡ÌGYº˜¸”1æAúeòÉyöÃl:{ö .Âc;õu“o6Eu ïªN6«|!ÉoéÏÊ3¡*D.§< }=QyïÛãÊ·v})ó¥l`Væm+[’þ19K'¡ Qˆ•„4 +/I ~̘ojÒeê›X)þÞMB)xú&:ÀèâÀ›~Ü׬ÒCb"´EçmÄ iä|Ø.suâN'—æ…ºÆNEhèXµs«Ô,ÖVI˜+ãq¹—0õ'ŒðEAB}碩ÆòvÑÁ¯$Š©p¤õÒÚueýc 4ÀLa*D)PUʾر€' qcŒ‘¸‚qs €„*]诿üïªß¯óá¯êQ®:ÇúÞy¢ïLïþÛT_–%\×ÈйÖN§ÅleC\/¤‰ó' +å’êŒqí8EBSˆ»£Ÿ§»m‚÷Ã(mMÇÈg¦ý““®%¬ˆˆ¨çÔʲ&<ÀÃLÄsÔ2‘’çüE\¤|¾Ù–Úõ åz(m!7hr&Û&ó‡xvyY~΄'Xü 4õmWT¾Ý:L¦Ûm%صô’&žuÊô’*åª9ÏM=û|“¢ZQÖKh2û p%)ÛSÈ«¥¥¬¾7Ú‰Ú&P6&ÔB-A0l>‚ApAåTèœö’Aöt5¹l#ÒuÑŒc±°×U¹ëŽu;bÄyø]M7 c—ïà±ÛܸïC\8…$"T½ÇâŽókJoí9#ðwÿüÔgXÍ3ìû϶©·¿(ûÍ)§°ÎÛ‹¦›ï6ðŠŸžE{Ùc|¼]Ì‹N^ä¾TO‘x@iS3×VîQÎbÿÎv:UiÌÖrqÅênB ·„a£ê¦‘‹î!ôе3G>ywÓ‹b3À‡nDb•9'©ŽÚBU£¸ƒÃ pª´±4|ýÉ;Ù» +¨/¸4Eú÷êÑ,«N2ò¼WcýžÂ6²»m*àƒŠ¾ùUqøX³l›Ü’Áý ›£^ŸJ™“‘ŒÜ×p(`öþå|?´Y†òêäF^õÅúÍÌøý¦}ÜÆ™©j3ûˆ¤AùFvÍÎx±è?HÿQŽó«óó³ôòJ‰?ÂʱÁ˜ ÇÔãwu$KPo^ ñw¦SÍ M†p?ÂeÂplpoJ(ß+yßp™ô0jæ<’´î÷‡nM/¼Ð)ÕÓ +ˆ´]Þ¨7P4ÚÉîáë>@ÅâÕ½âïqÇJ_ eÙÊýíqX©)/|õß©ºÔnP¥Ïj¨d?÷G÷6aóêí·<ˆõ˜&Áã»ó@%û=Qdú~»r˜ý}ÙƒöŒm89X›{Z{O£#ñ­õ_ÀP„Æ +endstream endobj 865 0 obj <> endobj 866 0 obj <>/Border[0 0 0]/Rect[421.38 115.26 549 128.76]/Subtype/Link/Type/Annot>> endobj 867 0 obj <>/Border[0 0 0]/Rect[63 101.22 121.92 115.26]/Subtype/Link/Type/Annot>> endobj 868 0 obj <> endobj 869 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 870 0 obj <>stream +hÞÔX[oÛ6öè_q €´Æ4Iݨu Ð&éС]‚D+PÔ{PlÚÑfK†$÷‚!?hÿrçP¤|Iœ¶Ã0'èCò;÷ÃC ˜F?_ ˜7ƒ8€„+U ‡ZfƒÙ`ôR€€l68þáK¨„¥ +’€3.![8¢0"-› †Œs@öqðÞ{}þ"¦àttúô)\Ö¾PLyռΗˢœÃ«²Õõ,Ÿhÿ÷ìdt¬"&eCÁDAv6 Dá°AØúJçS]Ãé"oÝøÙƒól…)ê³(&ƒ4M…Šó°Ó(–,‰Ý<ªÊd¸3– Cf5íííSÀÉP9¥IÙK&c«uÞ´àc–x¿­¦9„×êi7€‚ÞÊ+}{vÙ»¨žÜÚE²{sùC¤œ¾Ä +ÇI¥,ô.ëª[1]OZxë'ŠIO[”Ʋ¨J‹>0ædT)ㄬJ"‡á¾Ëþ‘¦þP!t(¹è†ø1‰ îýõ¯ÿ|éÿ¼ÿJ¾ &ÈsÜù.Îw"ê|÷ïŠú|±€«bŽš`¬µ¾`‘×`6ºö‡AÌRïƒ/$ê)3c2ÚtJ¤I§‹G_W²LvÙž²4î’‹¸:N„›ÂÂe@šr§$Àhä£@§·zò'3¸~•Ã*o[亄¢©ž¥žBQB{KdXæÌcIÆQÊN©|fA×=³ðU9«†'·ys]ÔKB¯Ë±7öÇ>üep²ïíNc)fU c¯€Ÿ€?ƒ~D–HîÁÊõ’À É be<IŸUÇaI2¤Z¼Æ‚¤‚D÷Ÿ©‹²½#0Ö"ò“žÌÍÿÎ.hðÉï|îÑø:;¿ìæÇãòèø °ýX!‘ŠŠæKMº;êð䓱ìé³ùþ-¸U]è²Ý…Á‰“O×m^[ºÁ‚…a¤v]¼ê펼7;̆áƒ;¾,rÖ«=½pâ³#òÈ£â\C•"Œ6ì…úåÕÅåùUöÈá ùj7Ò)F( ôNÇÞê×õÒ•‹P¤®—x´¬tݺß)—$aöŸ?¼[1çÄ&òÑ!«ÜËŸ•‰vâcÒäÑ,àC¾Xk˜ä%PÆhn4äд5uÁ¦á V¬C8¨àv  ø"]ß6 +÷Hú÷âÔ~ÒØ4;:Þ¶²ÓÊdIñ9@çV±-ÑRÿîàŒ^4ú›T™­*"ÀÆ*±{g¹7-­-{±·ªû~’<TT–Ü~ìk$ 9㛜â÷C¿ÖTÖXNù³;ÛuºWu ®¢3H*jn©ë\öíÑÄ4¢¶É{CµÛÙÄ«àâ# û°®«jÝb>6»í¦y&ìh;²ØÒžãæ1õ·ÄâSç‡GëÚÇGǨÞf$°ïÃÝÜuË®!(ÊÉb=Õ¦2Ì|IA,•/"|4Ç8e1œP'ýƒ=9pïfï;²ø +«dgÇFá÷ÞK×ÃÚ¹þÁlŽX‚· lhÅæ&àzˆ­+Iàô=>‰3¬ E´Û*ŸcŸ,“]«½èbc0͵xGˆcB$Àp£o/|çøÚB”îFѼ/;‰®´Ñ^²À+´7ª„º¨_ÚÇ62y›Ã¬®–ƇûÍcÏjY)R&• Š-G]¼¸Þ–©MSÉÃ^´“ë]Óæ­^âÙë™]>xÑBlX½y~zu±ÃL²4ÝZË]+û¶Ñ6ÕÌ°¢°ìÎè@˜½›káŽEÃ8ìfÅBSl'ƒìK&#ͺ +X²I'U¨¬›:í»£¶AÛ†ä«,(ݵ֘HQɸQ3r€DdÞ Ãn|É)«‰ÞŠ¼?ý!>1B4{ÕŸèx^‡´ŽaàâË£]!$‰¤÷±ñ€eòÒæ;Þ¡ù\¶ù'ôVÕÑKzK|z¹±E~ƒ6 +¨mbWþlT<`ؘ n–ŒæÐL q`ýYXó¶ÇhS Gû‚ S éjB( œÇº ¸),›¾z 2Pâ’ŽëvvzíBûÈþ|`ÖS1‰Kå#¥Àù{ؽ¡ºŸ)úŒ1IvI¸H{ø'“ÑÆü뼜¯1ð‚5ó‰†Ayµ.÷-!K“ûiάBÿ0 [3þ +endstream endobj 871 0 obj <> endobj 872 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 640.62 176.94 652.62]/Subtype/Link/Type/Annot>> endobj 873 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 874 0 obj <>stream +hÞÔWmoÛ6þî_q+P@Jb†Ô %ÍkÖI» )$j‹!E¦m5¶HJS£èÚ¿ÜIù¥³è0Ìù ê|<>÷ò¤w½Kçôø„,†áápÎjWÄ,vªi-E9…“²Uõ$Ë•ûGú団Bæy!ô2„ô¨GEÛ[‡>WÙXÕ0œgM£7}ß;N{Òc‘ÄL$ %0ÏO’Xs˜œtšúKÌ”yÁÖ—Xrðõ—˜èª ‰N>ü2ˆ»œ Ž·æI›tÖ´àö%‹œ77ãŒVÂiÕØ,  gì”.“Žu{eê|f<óä"tûÂO8½È×Q&,pÎêÊxŒoóÞºQÌßÓÔ3q–HÃQZP¬P2? X´yÆ’4'Í€¹š¯¯š¶F†.Î'SnÆÑ…ßÞG;^ªÊ•ÎBµuªcSMðÄ@ôÄ>KHU¼•ª~lÁ˜'úÈ °/=˜ªª‹)‘3r!¯Ê¦|Xuì*æ“úê¢éåÊ&cÒÈ…©ZDéÒhDö«,GñM°q¨>2^_™E—¼y+áøc¶¸1/sÔT›ãJ·:F‘ížë“žÐqéLÁÄõ= R¹i^¹"ÄÅE–i¿rñþœn xæ\A3C7®ÝAƒ òL.–„ëÙçÝìûQlû2¿ÊrÊ0v®¡®nÛ¢TpW´3hK»¼Q`³m‚ÅáfÈBê.S“ë±^]§@ÏÛª>‘ÝÎ,çȧï'Ôº¾¢¯[¡u²r¬‘™94¡-2©¯½50 Øæ¼n!ŠYÒ•ˆk4ì>Ën“ —Ø™`^WxÒð9Œt9†U˜ìºššÜÏ•Ë(úwX÷ ºjNÊIeö¤{ÖëM£Ð«>ÊÚ nQKh£ÿ©»°p†8â]EÝ"ߘQ­h\6nºÊJë™ÛŸòvqB Õ¢¬qít/à=ZÛ)XHgY;Û[¹ÞàÛƒ®'øÓgoÓ• ÷»Ÿ«¼]G®ñmgdr]G¶®»#ŸUó唚c€àZÑð ·¿öÞÿm‘­Ã‡"Ûé¶Mn¦)õà¾)8<„áLåèq ÅdÍï¢AÁ¤YÒYß3ºƒÐêªwüôÖT§ÙÞ`ûj5V›MÄMã19R{hI‡¶ðµh ™|Œò$Lúx n!Âñwp¦“Å1À_nå”F壑kRïoì|# ¦Vím]‚|6î–Š(N<ÖÞ¨ºxó9+诟_lžr-«,Õ–ð„èÛjî(*2²î¨ÁvOfÞ n±7Ú²ÿ´D+Rìë]_ô•öOªšÒ9nç(àÍÑ–D9 +Åþþ¦:| Ù–¥AåÏgfͯ[ë#wgé“g;Ÿ‹!ZI¥ÞéoØÓUט‡§Ï..àqC…>0¥Ðr¸¤*¶ú dðpÜ«Ze׃oÃzŠÖl©êïÄzúì÷ãóXO)âÇúŽZ2ng߉õÝÉQú+<žÞõE´XÔ3*ë7 E=öhíæ1‘ÚkHƒîÇâß Y?µé +endstream endobj 875 0 obj <> endobj 876 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 877 0 obj <>stream +hÞÔWmoÚHþî_1ŠTɾàÍ®ß}½DJšæÔ» â‹TÕýà#Æ·W~Rÿeg¼kc8()%w:áåÙÙÙyŸ±€L;¹ºÍ5ÏŸàØŠTj¯"íäµÑPpüÇ|àÛœq ¢©Æ‘ ãbÑ@3ç܆èoí½þ¶û\ÀÅÉÅñ1ô +C,ÐgY‘L§ã<ƒë¼L‹a2Hѯx•-¯r™e¹` +&<¢K8Šš·-ˆwźŸ&÷i“d>OçFô u#ÍuBÔÃc®̲Ã0æœ;R#Ïb¾WÌrVöÑd»ÚDM;„•ö!à¦ÔJ“¡•ÐËô^.`LÏ@Ï æéŠì7ET FŠÈ’O.\ÃvÈé‡ÏqíûnȽWÌ$ÅýÇA w†0KO—¹ºb–+þèƒÊÂœŒjYžOV%‘gÝe_@„¡axGhZ\È¥ †GâBý|úã?'ýÿ2o~’ïlŸ ò¯}g[µï„+}÷¼¢žO&Ðg¡>ÆZiæêsÌÁyZ¦í±PÿdX6‚é=«$ÆdTéä[U:yX<šºE–Ìö…žL.Z„6x¾ÏlgYX¸e“¦¼V²ú^½ÂÏc1ÎËa¬I¸w½9Š—­˜ç”´—[ŽgÄúœÌ_ÂüI92ÏòÓÞlœ#\Î?>ŽŠiôÓV4ˆVÅ:¼Èè?6Ž:WÜ1Ï>¿øÐQ—,p]K»•q£b#ží<ðg‘&m§$ó&ép|•Î¦=DQ”k¬ÆÝŸwÈ¡è=… §e±0ϲ´ìÑ™*-b}üt–Nƒë¨Û?º—»ÕÛæ3’­òÂ亃úM2—¾«ø Ÿ9¶˜•{\ÚV½kn¤?ˆ»×¬yyC²¿zGß·Q·/Î NZÅq~TËï2îaÿ§ü¤)9û|[&EÙiÙÑ…—"­ŸIÛGˆ¶´Ã¦{4Šûˆ¦ƒrWHºˆ¶¢·ðaÛï^Dí`©ÖK[#"ÍM·bèL:»ã°’Q:°˜4GG<:hþ+Ë=%ÿ E·!ÿÉ‚ûçeH•ÿÊ ˆ/mšµ¬Y3s\?P¡MÆ Înã ÔìTöÜùªÁ¬²u uzôý|ÀÄ\•LåàRº‰¹~†³¥Ð¿’˜Ô^f“E6ËwvI§„®6—j‡já>½åæí»«›ß÷ì*R&9 &k*ȘœO¼Õ< ®ÚzÓMð]g|®ÙAŠý¤ñ¡&¥ŠSÀúAnxíï躎üÛ¤RCàÓ.…Bt³Ï3²XÞš%¾ÑŠW̵>L<›ÿ9L¬iÐÌo†*U¹¶j¶Zê7p¥ÂÖüz_v£Šû²È¡Úßx—øžØ¿CtœìŠùOãD:¢ËX¿'­Çw¥¯ m ¡ +endstream endobj 878 0 obj <> endobj 879 0 obj <>/Border[0 0 0]/Rect[377.22 268.26 497.7 281.76]/Subtype/Link/Type/Annot>> endobj 880 0 obj <> endobj 881 0 obj <> endobj 882 0 obj <> endobj 883 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 884 0 obj <>stream +hÞÔWmoÛ6öÑ¿‚P@Z#†/zmÑiâ’%KÔC¼ªM;êl9”4Áд¹;’z±“Ôî‡a˜[Dy<ÞsÇ{îÈÉl°÷ñ’“Y5%‰XLü8$’‘R ¦ƒé`ïˆNÒé€ Âà!0éÇ f4G´†‰Ð‚Ϊš¸^H#çÓí$Ã7îÔjb^HŽÏØ)\:VìÔ +•ã+$Ì“ñÀõ¸L~DÞ£(H¨ïœ—K#1¹×äÊb*eµTv‹eaõC´ƒúTˆ0B§¢É¾¿±¿ O׋aÄŒ›×€¸!šKšçöÿ\ôÿ«¼ýÄØɈrŒkb'E;˜Øý»¦îÏçä"ŸÁ à¬Õ.§SA +Vªt=ÒĹw…„A5¡ÚbÈE›N‘Ðéw´´’¦Â${B“Ð$¾$’„QD¥ßñ +‘²¤þ¹aó¿Û2/êéÈÙ1ÃWÇûdäW3ü?rÉ«j4*`fg—Üç™÷þa·— ÓùpÀ}êQl÷Ðb»Äå>ŒB*ÝÃr+²…¹oõúôçïÙô¹TÙŸ­à™qV)2WÓü£Z.®´öcàÂá›Wèß½#ïptKU]>zïgª¾Ò30\Žœ¼gâÖ;N‡ûé°ñŒÏ\æ´þÛÙíi"jc òÞƒüÃ.i?Í;ŒêÏ5¿meÔáòáwü{™Ï;›^Í´A&1x@Yu¨ÌëU³.묬û¶]¢Yz¬3hm…º]YPèºmxÏîùƒ§à[3ª¿aõjEJ…Þ•ao­`W‡cS‡c]‹€ø]·”`æi6Ö57r–ä´UE‘.'jÞƒÆ8Áx–`€_—„8¿¦#>>%ö\m‡¯“×û‡¸èÚih›!¨K9"ß±GÚ•@åPFüð;8Cç»}¾‡.XËA‰k´"ý†ø$œ‰Ðê1ݪÁØ;bÏgœä¢YÖå¯í%/ P6äÊ•œJ¬²<”‹™duF¦år¡sÊšØm ¡‘Ö¹Øóúùñ¯«ÖÐØÈ´–Û¼YRÕY­ª¨!ÁÍz©Ý">Ýàtÿàâle ¹¶A¯‘'•×98|9Õº!ÿdÐã¸1ÈÒGm)hšÏÁ zº; AòF9«¨ˆìâ—e–x2Ö;ump×S€­+’•Jó$PàDûS¦h “­ñw*Ò%’%ô÷Deã²@ +v}îP8¥±…Iëòåmß*ÒkçÈ…›[„IJ걨³°Fóq3 :œ¯<á‘éeŸëõhèß`ð‚x&¾Ü×ð‹îíB¬ÙÕˆòŽõ½î7[`.›Õ;–Ê$$6€Ã,ç‚Áîå4÷¼Ï>´=Þ+‡Ú7aÆnvýê'áªyúr»wÑ9ÉŠÙôÂÚ…Ð)àÝ®TÅú½Jc==™Ôìn¹Å³Rž¤"xDCQÞ§/uäôâºi`¸ÎQ)ÐæE×K£"Ë0ºÎKRx_tþ2÷ ÊøJƒc{]hÑÈMVA{r´,U>+F´ˆãeQÕ½>ç‰ÔY™CGz"‡áb¢È;¶Y{¾ÌÛ¥ØÇo³ôdøÛÃóÒϹO•Ú qy“Ýn’9½«ê/€cƒØÙ]}š•³mäàæ•CfÁ!kda¼‡4ùG€˜ë#Ç +endstream endobj 885 0 obj <> endobj 886 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 229.56 176.94 241.56]/Subtype/Link/Type/Annot>> endobj 887 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[357 157.56 519.78 171.06]/Subtype/Link/Type/Annot>> endobj 888 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 889 0 obj <>stream +hÞÔWÛnã6}×WðQÊÖ IÝQô!u.ÍÂÙdc5hÑôµh›­LµÉöú—;”d;vœ•ö¡(Š‘<ÊžœßÜÉÅ% +q‚ƧãwïÐöh‚·\h¾ZIµ@×Ê=ç3áýž½W~ë*ÄŒ…hD1B”;Ö"ÝØö©µÝ˜¾< ^U¢ò²?‹Ì ƒòˆp!Ìü4MB‚6£ˆá8Ú¬Cª˜{ëÀ„%Âo!Ó-i“}Š`1H6IÛxØ62uYóÊ oáØýysûF]#òöIûL\åáÈí`7HÏ–ˆµOBCoDý”Ø1i‡)Ü;]¶ˆ¼žôàÅ f®è¬T‹Ruö¡ ÃÄ’ÊX[VmÈApX²MSo”€tÄm_CäE6\´yüçÐÿ¯ñíO[;?ÆÔVŽljç³MíhØÖîß õ¬(н\@‡ÆÐkÆ£8t+؃•ÐÞÈpê~ò˜B‘ã&bØŒÝvŠY³"8<¶çJ–±v·§8ÚÍe_REqŒý`w°æÛLI›¤T-yåEáz!Õ£ûè¡Y©*óý‹.'v›žï)Ü•OB¢³“=ÌDð¿øBô nøsQò¼•‹‚îùšÏ¤ájöÂ-È‚oY`ïê¢ÈË'¥EÕo5“¢œÏû¸yøéº1¹íAÜËJ<”…Ùãø­°.yQ [ËÙÒ]ö„`­Z‹Snfµ`qp\k-”™–µÞäoÀ3þGñ²|GAgp‰*ŧòï$uàaxq¦o4@Þk¾Ñ˜µ0Àˆ‡„tǵ‘¼hT­tãï[§2߬<®Í™éPµs9Ÿïœ€¼—‘6÷Ö6ÈߪáZèûºCš­O¹’¦¿5š–ÿ ÌÅóº¯=§õz]|ž +UI#?IÓœ\ ÿŠÊ•.k•]d†§{s 7+ ÅK®Oâ«·¹Qõª9¸µ©zŽùBÌå•(½FK˜»;n£*Œ}‰S;îín¡ý»‡Æ‘0߇ûÇNœ+°{‚Öàý±‰F‚u•‹çý@ì„Äâx?É]ð—¥r¡úâ?`eÞj}hÈ‘¶²àÞúF? r„¬usÐu6ðWä‚»AÀÍ-¦6I‚ï;²ƒ$üÜÓST®m4²T¼@#kTàÿŠwâïP%Ú‰ž1œ¤4z™¨+À†Ö·óþîÓÂcD#Ú]ÿÍ\Ú|TØ! iïÿ[m§`˜nmÄÜúCc؉Ûr·&¦Ja†zGÍçCßà„¾EH!Ñ#.ZÃ}´áƒÑ¶`b,I‡Ô´%{jÙÒ;Êw|¿ªU^ÖpØcº³ðËK5o‰Wj¿R;zrññèî<€åR‹™­Æ[ w€¯+1Älµ„F>B•¿0ô¶è— +endstream endobj 890 0 obj <> endobj 891 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 892 0 obj <>stream +hÞÔVMsÛ6½óWàH&#¿§'×MštäÔ1¾$= $$!¥HEIþQÿeü2%Ñ%•™N¦ã àíÛ}»Ø5)ÚXW¿¯(ÚTVà¢Dȋ䤄µ¶~M¬«—Q”¬-Ê?Xhâ8B¡K0a(ÙYX0ñà,I­&„¸(9Xïíå‹—ÈǺ¹ºyþÝ)‡F8²Ëâ»,6èu¡…ZóT8%€+·qåcÆ|´ ˜>J~³ #í¸]j¸kê·‚gB¡›œW•¨œä“õ"±†Ã”ØfnÇ{!^£©–Y_‚R̼£KH„¸õ%íÓ×âc—^Ôi6á°>0´¢y¥‘³ph¿{ȸÙQ[‹¬Ù iÖÈ.Ø-충tÛ‚X³ê; êÆÄü]؇¡cϾSeƒÈö©F÷Naf‹–¥j]”EË%¨LLN B“T²çVìDãØYDà#^0B›­œÀ„‹ºuþòÓ¡ÿ_òþ§©bj*GºÚ¹¬«õ›Úý·¡^ç9z+7ðBCxkÚ¡Ø·+hÁJ(gá8¶?;Ì…C‘á:bèŶBV·S³£+Išfq4Íe6±‹‚0Ä®÷8WsRÒˆLËÚ+u{ËÕ3´ÛWúS)‹öÁœWú—Ák'¦]›Œµý™•û¹@å^ßrµ‘Å+U›C³ØÇɳü²< áàÇáYi^¤¢sá4-߈èmFM:/-fÛ]ã±?L? ]üýP„:ƃrÁÿæ1Ûñ/yɳ°Läüë.å<•u‚fQ}6§xöyž•‡,fðj)Êõz2E÷¯^OB–NA”¬Ä}™ë³d†¶æy>m¸“-ˆÞNEaxç! çŠët¯æpÎCÖœ¹8,åNê½Z3OãÇG +Ä£D¡Wå^™‡ÇmØ;:±ÑÜšf|ÃwÙ@G6&Íp˜ÀøbØ#0a|½·e¡Q±ßè>šŠ‚¯ä7ñ8!úòM½>!p͇f†M‹/Ó‘L—ü«1R=Å©ýTØ·BóüZ Þ”å¨äS±l¥)åhÿ" µ789S +YŠb£·#Ÿ%e`ýD6§Ä,œ’s9>§;®´äyÍjN» +] i”âTØÉ?¨qm-œö% +4š/~x'Ñ­d&&Ež5ð 2ãÖÌšñZŽœqÑg'܈þ¡Žkyoöº}ú?X×!ÁÏ>ù¾ 0Xºêú +endstream endobj 893 0 obj <> endobj 894 0 obj <>/Border[0 0 0]/Rect[377.22 352.26 497.7 365.76]/Subtype/Link/Type/Annot>> endobj 895 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 541.56 206.94 553.56]/Subtype/Link/Type/Annot>> endobj 896 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 897 0 obj <>stream +hÞÔVÛnã6}×Wû$íV /ºbŸRg³Ø"iƒXÝ—¤ŒM;*lÉäÝE?¨Ù’²l¯í¤ E ”IÎåÌ Ï 'sïì㘓yë%’¤,#Q–ÉH£½™÷cá]rÂI1ó¸ þ`áYJ󌤒Q&H±ôh¡,‚½bâ…”1&IñÕ»ó¯>\’˜fdt6z÷ŽÜ4Ïhæ×óF-—e5'ŸªN735ÑÁoÅO`JZS1"&!§<‰Iqá¡FÞë–uÕ·ZMuCF Õ¶º Šß½…G9àHhœ*džç„Fc‘E”š&ý9@¥"Ú9‡H` ¤9¤›8ä}Nà0ÊzÐèØx&‡Zµ „¦þ¯«©Â/îwzj?H‰kæWM|wíÚ]j&î’°+ãqr™3ü‘Fð¦qN#ÿ¦©íézÒ‘ÏAšQák§¥u&êÊ釘3 ªIŠQE—£h?ežçA˜<ŒÛϘ ºKúõõË~õÿ«|ós'SÊ1s¬Ï}îxls÷ïºz¾XÛršB­u§±ßÂlu„2¡¹ÿ%6õ”á1ºç” +óœ ¯…°¯=§yb~ä’$iJe4 ‘2 rRWð¼&Aâ?ªæ-Q@!U¥nTÓ•j»£uwÞhu¥žusï—UGÊj +ûúé> Fø}ÿ˜„xÞ™‹Õz Ï­Æ‹r6CE÷>ÊÁþŽ(<#†<€¢Ózý°Ð%_í‹‚VØFöÍobqâ¨o…ÓÇPì)¬t÷áiÕXpû‡!ìɵëÕjñ<ÖU[våØ-»ç’æM½®¦§åŽÆÝ¡¿®§zñ²Ç =+oÊjÈ—‘ëëª(Ž Õs.iŽ/6l¾SsèîÄQìêîÎwÉÀP÷í$a§BÎi$¡ýAd½ÒPŸº=ŒiXÜÏj©mtæUu„rŸÕbí1‘;\Ïr5l,®—N.<&xè)ÙâyÕ{‹±;ì-Ãe8_}jÁÚÃN‰ÃöK2ã®éሠùó½›&úÁEâ´bfó…œå41]ÙÓ4p¬¨ÙË”ÔüÒp…eN»SÊ0áÀ 7 õÍtbtÛ@Ýê8’ *ýt1hÉÀ•,:€mÿòÉK 0Í‘ÂA§ )Pr +,ª+¡¯ÏšziûŽTÑÐX¼áJ+&MMi;Õé¥Æ¤Â”D[”Ȭ“õŒtšà`5+!<Ì–ÉCãEc}óÍì`Aš/a5\ZhÖkÒ>Wzz õP¯;c¼÷¸G‹ÁÍÍœÅ#ƒn Õ¤Õš¼i /gñVD†ÇŽŽ.&ã^ú›%ô!ˆŒ!1ä•Á`Hhbäzâ’å +.ÇXS¦WÙ”›X å@¨úì2²ƒ]r².¶Ý3SóÙdáJUóµškè±&„ VKâ7ºÚ˜yDóÔAfCþ©µîÞAèn…’ŠøÛ$ŠÔÈà >6™3ÂGº4T¼È$•}^=z‹Q&8•¤ém‚6¤ò‡h(ƒ0nñŸc|Õª˜ý#äéH'ÞpÃŽÀµzÂû#e:6`ÓJN +ŒË©12ÂNÔÜã }1˜6œ¤Ùãmnb> endobj 899 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 395.58 206.94 407.58]/Subtype/Link/Type/Annot>> endobj 900 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 383.58 230.94 395.58]/Subtype/Link/Type/Annot>> endobj 901 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 371.58 206.94 383.58]/Subtype/Link/Type/Annot>> endobj 902 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 359.58 230.94 371.58]/Subtype/Link/Type/Annot>> endobj 903 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 287.58 224.94 299.58]/Subtype/Link/Type/Annot>> endobj 904 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 275.58 248.94 287.58]/Subtype/Link/Type/Annot>> endobj 905 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 251.58 200.94 263.58]/Subtype/Link/Type/Annot>> endobj 906 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[135 239.58 224.94 251.58]/Subtype/Link/Type/Annot>> endobj 907 0 obj <>/Border[0 0 0]/Rect[331.86 504.24 435.3 517.74]/Subtype/Link/Type/Annot>> endobj 908 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 909 0 obj <>stream +hÞÔXßoÛ6~÷_AôIjg–?DŠBŸº4-:4kxÝC²Ö¦m¶dHò–`Ø´ÿrw%KNâd†a(PÉïx÷ñîãÇp²š¼þpÉɪžhIRfHb4‘ŒTn²œ|;›¼~Ï '³å„ Âà<¸IifH*e‚Ì6^(K`l6ŸL)cL’Ùo“«èÓé{¢¨!'¯O^½"çUÌ 5Q¹ªìf“+ò±h\µ´sÿ4û–’íRŠ +¡È”S®™½› GÞù–}{×Î.\ENÖ¶®]Ï~žœÎ&ZÐTC&š*M¨Y–šÆ’6'Ÿ¦ÿ™R‘Œ>8AúhCæ“Ï|LL—3†#úÀ„IÛº!ñTÓ4úa»°øÆ£Æ-Ú’ãÓDELu¦…IÕü&Lí“qO¹ÌþHñ=MUF“è¼*ۋݼ!_âÔP¹à¥K”Eð[àfˆ©:EP1ä$9ܱ? ϲxj`l*o_‰5†KºçóÿùÔÿ¯óþ'îL)ÇcÝÞIÑíWíÞý»¡¾]¯ÉE¾‚ +M¡Öš˜SÕЂµ«â©Ô4‹~…„A· >bèÅÐN©ðí¤;zZ™ÍDÛìÍtÛ\ø’I¢Ó”ÊdÏ+LHÌ”µIÎËÚkëèÆV/‰) +{fo/ó…ƒÑ·•³'¶údï\uåECòbãîö:&ÞøM× ‚& –<¯üÄb·A½Ç“]ž®#0„ñ±-ôC"@ÛE¹ûºv8ÇÞ³Í ö10{y,´G‡‰´Nàƒ÷Cþxˆ³ãh‰ÄìiÚ¿öÊdT¤ÏMßèsXyí–ùWnâi¹¦Ê?G¼§{t¤ÚRýˆŠY`¼ pÜÄ¡rKàm¬ãš,lcɲ*7¤¹qäÌΫ²-kˆS›}Q3_ÔáXþO¨8Ø3ZÖW’Ï_k_ +L¶CÚ7y9ô ‹ø`¦ÂPà|üšÔ[7Ï—wÄÃ!ü©¹7×ÁœË. G¶ñ¶Ä¾M)–'[ö(éh×@#„ ã=Îø’¶nWPK®‡9‡}¤j²Œ:,öʧºÁÍt߉C×=±µ_EïcpRß½…Mó¾»áx*ðÔ3>¬ß~-wÇ£kë-¥J< +îUÔ¥ | +@fuŒ};æÈ‹OëZEw1ÏðkE>ôy o4õX¿è(PB;÷)8 0“]ª}ud¸ïµD* +íÆÌ ÝzU%CŒX¯€d¨Â¤-1P=!/TbYHK„r ^¿°B¦RÒ4Qû2GÕ«Õ©˜bµ³+ ïq†¤bø¯rÅ¡ZãŒòlPÿ¬-Ó¶1MÛIŽØï³ì×ô5¡F¼ô›ëm9!P!J:à#z7æ(IÇo-·¡Š~oRÊè‡æF†õg^çÀGh­Ú3ÿ!c;øÚNëV8Å‘ fw0ºud=² ÇP±u¶@A·r©ˆÌ ×@Y“¢.Ã"£  ž`¨Û€ÄUôª¼¹À3pÞ<²t"33à¡ €j˜I0°L=´*w„A`x7ßAp0~Ÿ¤&Gâ;·@ăØR1 ô«y´TA;·xHßü#Ð0¨CÐ4‚v,°š–÷@ëüþ]І}ck/#NoçnÛœ¯¾w ú8R§ÐE^ 5t_„Àø=“½êLÎòârkçpÕ»Ž`øØz÷/vk÷c¾ðû‚]ù m+Å8»'ÅÀKgühÔì膖ë»UY öSƒ$ ‚êÉý Î6ïë ‹,xc?V—¸›"IŸÛA½‰Tc|µßS&ƘfÛ_!âõ`?(ª•ÖãzUŒ¿“?Q1‡Y}Éí0å4ý Êa¾{„R£dÐÝ‘*Ç#ÉÈTÃ\b ÂePâ‰Häa—Ï*€Ã ʼ\£ô¯ÎlýËC ×á¡ûÀm€kPcI§,Ôø*pZÄeÙnsä*Àe†¾ºÛD:Òëþ*°C-–ÒÿÄ!Aû£èkîªÕJ¢ÇEXPTRx¥…ò mí^:ª¨¿bþ%À™ôŸã +endstream endobj 910 0 obj <> endobj 911 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 912 0 obj <>stream +hÞìWMoã6½ëWÌQêV4?DJBÐCšõ)6hà¨ÛCЃ֦um)änŒ¢?¨ÿ²CR²­´V÷«»X ðA”f8o8œ÷H3Xy“Ë[«ÆSbš@”(jí-½ï3oò‚ƒlé1ø`ILÒbA åm<ŠQð[6÷BB)½õîü—Ó I“‹gÏà¦XB¿ZÕùfS”+¸*[]/ó¹~É~@(á $á\BÈS²çž‰ÈúØ‚™Ø6ôLç ]ÃÅ:oÝÙ¯Þ4ód”â:‘ +iš‰J#·"ÅI¬z;.•ðh`ÇJ˜BkÄ•îëÚÕ§€Æ(émòáû̸êV7-¡"±ÿÓÃ"7#æ·záP˜gâ—Q~çvÝ9ÕóûΉ»'e2™H©y‰ŽãX¦$òoêÊy,¶ó^qB¸¯»(MQ•]|Ü[ajŠÊ¹ŠMUMÊQôtËþ–¦A˜ FrÊÜPB LºÐ?ßýñÅ]¿ÞàûW³w"&Ììí÷Nð~ï˜t{÷ߦz¾^ìXa‡ÆØkmÀˆôä`£ë Š¤þoøQ/ˆÍÉØÑ)æ–N +ÅcDWÐQÅêHSú¾ìè[â%¹Ý•mþh?É2îâ¤$UŽ£f`bIEDdb™É6 uuÒåvë@ùzY\êj35ï¿»*Š™–PCóçè½v^è¾Ù–oÊêm ßýÖºgß ^æ;]OGl×EyûÏQüƼfÛµþ¹X´÷'œÆl7ù¨éª=™àLÏÛÓÈÌ›j½[Uå¸udþ«"?m™g•ÿ„mZ.à³î`é{M˜ƒË¶›1ÇÎU c‡ôìŠmƒõ‡Ò O#šv}j{ô ¢©ë°™n·È +£vZ¡o`‘·9,ëjí½†./¹ïÝ#b³C¯ú³éE6Hƒ‘ʃ/=ˆ€;¡ióVotÙBQ:(;½CŠI/!ôr}~1ûñ JúwC#Þ`uŠª$nRWÝÙt ár?óƒé+$=Aߦ­ñÐÃ=†ãÍ:E`Qm_¯»2dYäà"™JÝ + •æž›ÿ¸&ň vßûzùgÆ!”D²„£ìs|¸Ýç…{¼ÿ¼«;<ƒ˜~-ìúKõM‰´S{ªL€;^­Í]ȯí-ÊoÞ8níqñò£bù÷QB¥8Å#k2iô¼XîÀD«a“&àÁðo˜Küd¨tiÎŒN HBdœˆAÖɶç¶ÖCvüƒöp‘ ö˜«­mrDzí;­Bœ1T!7ÿ êë¡Îž8£•MgçÙt0æ£$LÉwÐ0q±ÿgò/c~*c’¿—€™½þ_ľ"û”pT:Uz4vÛZ%«Û'J†º±ÀcðÄü3¾ûp¼äÿ%À×¢¼ +endstream endobj 913 0 obj <> endobj 914 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 915 0 obj <>stream +hÞÔX[oÛ6~÷¯à#µÂ /)5OištÖÕH´¢A°Õ¦¯¾ARÖÃ~ÐþåÎ!)Y²6]ZE€H¦ÈsýÎwŽ$ÈÍàèÅ¥ 7Õ@+bxJâTÅIiÓÁ³|pt.ˆ ùt $áð‘–¥Ä(θ$ùbÀA +ã1¬åãÁqÎÉ? ®é¯gç$a)9=:}ò„ŒÊH¤,¥«›²X,fËòrYÛrZŒmôGþ ¨R^U¤LÈP0¡’? DÑÈVe;Ѷ˜Ø’œÎ‹ª²U”ÿ98ËZ2£ÁÍM˜TY–§œÇÞ'ç¦{ž2÷B pƒrÁÑ6 ™s>#ð0NŸÑÙ&upº¨j 53ô÷õ¤À;Ak;ñ7d†×”.#¦iØö*l*Ç·a“ôW.’h(TÆñ‡1poL’±˜ŽÊ•ß1¹×äMdR&© Rª bµ ò!.Àc*¥6T49Žw3ö/Y SБ %þ6!‘FsIs}øå»oýq…·?1wÊ0™ãMî”lr'Ÿ»okêÉ|N.f7€PX«#ÁZA V¶Œ†J³ŒþI‹vÂœÅP‹¡œŒtå¤;ZZÉsé‹=c™öÅ…7™"Ú¦â-¯p©ÐSîÊ~²º{7·kDÄ^D̤Й ã Opÿ5ý觗5–]{†iµ*&“p‚ãnzŒ"Áµ +Ì• Ç:¾ÕÿEª7_WõlY{½çÚË,æ.lA­öjÇ«9ò-£ÐêýŽj m’æX~Mÿ9Ž†I,pÅQ¤éQµ¶ãÙtCP^IEõ@@—w‹w@·SXªo-yaW X½°ãú%иSlcŒè:q$Ö%0Õ]iY ú½®8Ñ" …qŽ뿭jû48¯šB7hë€;Ã2¾ Î#hLš®`½¥ÓHšfeøü6 ª¶k².j´›bÏËOwâÖÇhjˆæ‚©`iŸÏ_÷%XÊÜIFòmÀ‘lªyïd†’gWÈ;Š»z€8`ˆËü ²1"! º hww‹¦Ê¡·ãžÝCq&Ó…qßR)ˆ\£0høW§à$1nè7­Ë€‡œCÊ‹b@sÁ¿ù­HQZòzm'¤^9TTµ³AÄL‰Žb'20*€BHz ê°KfË€'¥Mƒ  HN":• ›§;8Wh±sÁÝáÁ!K:`ˆ§-†®éÜNgX]£HÁˆ£­oûSR/$ +ʺ‰Ç¶©g^Þ…ë»ø®È¤¨ 2-W çPœ´hïôÑA÷è$ÿ¹—ÉT–tjqÛ“ü”A.j»°À_!vþxÐUÙ͹WòêäôâõŽ–l_ ÂZ%@A³Õ’ùC!âChF!Òm{RµÃšqGq,½Ü,ëâc¿~úñú`Á¤³AU‘6mE}Kþö]¨JvéðÁT5=ÂZYÍ–x©«OPy·À ¸ÃÀú÷-ì'4¶Ï1K…R]i;a:ÑÁÈ (a±Î²Ç+Ú[  [¶Þ¾.Qxš0@m7>L";3Uô>Hb2 Y™Ÿ]œ@Ÿê†1ëQ,£“ÐŒê¨h_e?Ã1†%âkqŒ€¹åK8óüƒðLg^þÆDó Ma̧î¾ì½lµµï!{á=Ä1OYvð9îA¬Sºš$0lû|Ó…ôz.q˜*€™Ÿ”âX»$o"Ý®À(Å­“ ^á^E—×D— ímïÑ·û‚ªðUfëäv¢Ý–»¾8LYچʃ¡éOùÙý†"a +m1]S¶ƒðÿ³bóX+âÌíª`h¶owä¤ÙO7…Ù ‰]ïÈɧŒ‰Ñ÷YsõHk6³¿¿Á|g,ö_¾Ð5ßÝ “œ[ßåš±J<øO€˜Œš  +endstream endobj 916 0 obj <> endobj 917 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 918 0 obj <>stream +hÞìX[oÛ6~÷¯à#µÂ /"E¶Oi.E†¶1­hìAµéÔ«m’²Ööƒö/wx‘l¹n›,)ºC‘Jæå;‡çòC1t38xqÉÐM=PeT£T+$(ªì`:xžNb(ŸGþÁƒéŒ2A å(_ ( šÂX> ¥T üãà¿<9E’httpôä U ÓDãò¦*‹Ùò-‹±M~ÍQ"ˆ’„s‰†Œ0%Q~S…+Éö©B3-]•õ㪂gË&H?U„“”zïFáÊ-»Æãr^zWxâÃõ‡ÙÀW*“í¶ˆ~Ÿ¡?Ÿ%CÀiõÊ& +gÓ5r€Zõ´¼]¼ƒa¨ SjÞ[ô–‹QѼ‡Ñ3¨7^VJ„“°uŠk‡ØT°õ¶²$Ö¤ÏÊij¢Y,}„ +ÎþºlìÓxzÑš²M¾Rϵ.]Y°þiTáÒ‚ é4áY;217ÿÑUʺ±+´*§ÿ¥¡~<Ý1\?—t†¤6DDM£½ïññyßSŒhšñOa0æÛN¼õ¨¢:Ýq Fϯîàxwu8`²Ëü<1BÑ ª5èöê.œj¿ÅØ=ìÛofw_S€ä{ W :“«»Â‰=q"•tX¿-±>hlrp9pf +Ñ\$ðßüÖÖ¨¨,òje'¨)}TÔ°Äìv>zÈÈüŒãÛ„a»h¶Œñ$D Á¡D]8}L˜“)^?݉sá4öGðo®2†*ÆP?æv:óÙ•¤ø¿L8´ó„÷[8 Ý”Ë~o׳€¿Ö8›NÄð GÙöMŠ¦@Óª\øÓE`Ù…þVq¤Ù&ÔGç/¯^œ¿î¹)%ÌÈ­å¼u7(›]Xà³hÊ°;Ê‚$Ý’Å6¢^]œ÷ö +â< +²ãfV.IØGÇËngÇö<ó[]K}¹^6ŧ~Jõ9ÀY™¦{9¢¼©€ì ÑPçÉr¾Ÿ¡?BÏÆ·IòÎ ™>rTΖîÑÔ_aø~uáYÆöV—ëXà~rú¶p{Š\€Û1 +QRE-£$IReÌ#HZ?@Ò¿¹bB$Àh›À÷/˜Ÿ ìÜ Îm" Á;aðÃñˆ +ß.™»™…o}07(㇠Á­‰”«nÂ$ô 0ØXµŠ +endstream endobj 919 0 obj <> endobj 920 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 921 0 obj <>stream +hÞÔX[oÛ6~÷¯à#µÂ4/"%6Oiš –6H´ A°Õ¦S¯¶eHòZcØÚ¿ÜáE²,DZ´è†‘L‘ç~¾ïH =F?Þ2ôX ”@ MQœ*$(*Í`:x• F 1”MŒ# +paiBtŠA å([ (H!4†µl<J©@Ù§ÁþùüI’¢³ÑÙ‹躌XJR\<–ùb1[>¢ËemÊi>6ѯÙO JxU’p.Ѧ$Ê^¬DÖÈÌÊv¢oL>1%:›çUeª(ûmpž '‰O‘ +.´ÖˆÄ)¥±÷ɹ邧„Ç;!vƒpÁÑ6 Ú9¯<ŒÓÆgko ã*8W5Š†Š$ø—Õ$·w ×fâoÐÌ^S¼ŒˆÂaÛUØTŽ?„MÜ_)“Ñ MíDÃ}’HMb|]~Çd=®Ñ]”¤„c¤TAE± ò!.ÀÔÆ”s•Ø Z“㸟±¿Ó 'zÈ)ó·EÊš‹šëñ—ï¾õÿ+¼ýis'Âlæh“;Á›Ü1és÷mM=ÏÑÍì*4Z«#F$® +SFC¡ˆÆ¿G\À¢™g1ôbh§„»vR€-¬d÷Í®‰V¾¹ìH% ñW(§®Ãð¤X¿Ÿ° äÄ^NLR&„¡’J{ˆúÈ|†>À·µm3\ÖlZÑL†ÀR{ŸXÉPø Oµkj{þõ×±eó²%ÄÅ^í™Â•dO™B“T|«°|-SðlY{íÊ á$¦®Ò‚re·=àq1/\*ãêcO7`§Jds,HÀ'èÏ“hÈA$àëhT­L¤ðx6Ý +°D‹¼úˆ–ëÅ{XŠšÂRýÁ M±¸.æX},–—À~N]L„UÒqäÁ +­KØ¿. ¹GÆÐ^RË@Ä„ +êÝSÔæe€h¢HÙ>¨ƒ~‹Ì'à">W¸°¼äF> endobj 923 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 924 0 obj <>stream +hÞÔXÛnÛF}×Wì#éDë½p—düÔø¤¨S#f‚NQÐe+–D\ÕŠ~Pÿ²3»KŠ”l×m’u€ZgæÌ}ÈÉõ`ÿÕ9'×õ@K³„D‰&’‘ªL/³Áþ 'œd“„Á?¸ð$¦iBbÉ($›p¡,‚³l4RƘ$ÙÝà2øéø„(šÃýÃgÏÈYò„&Ay]åóùtqM^/LQMòQþ’ý¢¤¥¨Š 9åZ‘ìh€yÃ[rämY¿-òqQ‘ÃY^×EfŸÇÙ@E)àÐTiB…LÓ”Ð(a,rˆ´ ±nžT*¢Þs°BÚ‡€´µCjѧFIõ­fB{ÔymH8Ô4Þ-Ç9ÞñÀcwC¦xM‚EHuàÉN=Q5ºñDÂ]WáË”á„Á}«”FÁYU:ŠñjdÈû0N¨ +Ï¥ö"Ê…ç>°fhT!tŒVE•£hÛež¦á0éP0în 5ªKšëÓ/ßôÿ˼ý‰¾“1åè9ÖøNŠÆw\9ß}[U˜ÍÈÛé5Dh ±fBNUPCÖE¥¦ið[($cj5†dôé ›NŠÇ#uu¬;5¥‰KŸ^±M|¬$çë…É?cÂïg™p|Ršj—£xƒ¼”¦2B^ø²eÃœjSAÖ„€iVL¦¯Šrþ~š¿†RD~w¦¦ ÔÁTa˜ëGƒ`t“W{`'1r#*¸NC(SL¡ˆKHì¡ò¹¯i­~‚j–DŽš!ep€ì0Q…’]i­ºÁ¸\]ÍŠGÄ:F[– Z1íž{Mt¬¾HÆú›Êè˜ï3šïÜ`E *³eDIS–ê]#&˜_Aøú{ +÷ȱŠËÙB¥»¢cA?øj¸¿–èéÂ8¹'º ~s¾«XƒòÊ¥mA}ûf…×ù–|hÕ"jßõ"†”KáËÞA8Œ ýý1d5äô¢ ¦\Bá +æy}Kp³š_A‚OÊ +OÍMA ïñy“úPjdVUáê86NU¯Øòdx#„³2ßÞheþCxQøxW¥qœŸÚ’-àm„‰‹”>BÀõ ã &@æ`]¡ÒÆ”sâ5°à´"VƒÉŠPíe/ /[\ª.ÚûûbÂ÷ʤk5Á›Ò/¼d“Œo/³Cö]î‘þ£Z§ð´ãA“yÐÎî´ mkžr (¬L°.õG¦ôaC0„]yã®*›©âßi±þR-¢ÔRÕ0¶ø$©z˜”>¦vLR,·xõ˜2uKä}Ú\|¡6ë§isœáךHBmq‚9NÇîÃ)œ3æÄcÿaµy aZØ}ð—‰ÿ­ +endstream endobj 925 0 obj <> endobj 926 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 927 0 obj <>stream +hÞÔWÛnÛF}×WL íhµË;ëÆ€ªÈ† ×V%:¨[õ‘V4‰H:©äƒú—½¢dIq‚¢É©Ù³gÎ\–f´:#IÑòlðiNàM!ç­YëǨÕ9gÀ šµ˜ÿãƒ> ðmJ¨Ñ¢E…PmѤÕ&”R¢O­ß«þ9¸$€^§wrƒÜd Œe’Ç‹Eš%p™•<ŸÅnþý„GÙê(—X– mF˜çBô¶%Y…m3-¡‡<žòzó¸(xaF­~Ôò,â{‰G\ˆe‡aÄ (uTL2L¹ˆ‘ËÙXD!Ä[.b µ ¡ >\t‚*fAǪ‰Yž:.J0ÛñÛÕ4oÌ(ùT½@*ž‘™Ä3ô¶Ÿõ¦|r¯7YêI™k¶™Rñ#`øîûnHc/ÕŽé㤄w¦Ëà¥ÐG,3)S¡©ey¾UPvœíŒý , Ív€g„m‹2õê‚é ºP=_þøÏ·þÁëŸ"w¶O˜È­rg[Ur÷m©vçs¦ V¨µVšŒ¸F-XðÜlÛ ¦e£‘O‰dŒ½¨ÛÉ·d;y8;ê±E–jö„žj.ñÚàù>±õ\¡–-"¥Us>3=#½àËÅ`9J–Ù1Èh])Ãi£à©èØ·{}/q7}…AùGÇϽޥ±>MŸø1îÖøëÝkü¶M(Š‚ÆwM²ÓÁлç“Π¼çP>­8ÎÏ(LjÀd™ç|RªÊPÛ¢îÒñ»7‚T>H³ÞûhŽÐ86áó&oÅVyš•³±ñ*’g-Ñ\6ÄÂk(9šsäqÉaãÜÉ2g¯Æ&.œîÄÎyù˜gÀêU¹øEÌî†4pÖ¬r!¦b4¸¼†£BœñVi† í³,^ð±16ÇæiS‹8 ê™èÖ>»‹óeÎÓ$Sž‚Úç}%£©#À¶7š³›<åY©av…¬bÐœß ûh¾¼‘À(Þö¢Ûa±áí‰HïQ˜£© +T¢2 oØ`#Ï¢÷å£XÍT@×Z)PmýU™„ÎÈO÷RsÃ]í#EÕÖfpºdwÙ—Ï ¾¥šÜ`™~©¤N"cÄqÜ@‹ÝÒ˜¢ßÞ‘»4Ú#7}&õ]%Œ¨Þ—èò¯ƒ®+])aF•’}]´1RR1’I¹êÿÒHÄž²=ÐMÑB{Ŭ†:<Ô¶tñã/ËâQúÚu@º ÓA%&…7@O!……hDœ‹5¨D<•{r²wÖm‰ß½Ž„ø××ÝÑåo}Q\U±8¢n迹®ÿX:¡Yú]ÅO<×Î{ù4)]uïÐÜŠ¨©ì…Ü˧ÆSãy÷¾//¯¦ìðÍËÓ Y¡øø[\…Rþ@"grãfþ§SÖH×àf}åÂIðæeþTÑ\‰»,/¥`»=:èâ»XÍ9ÞküÏx!> æ&qï9’̦ >®Ñ'|ìˆðª_…4 ´>I¥¤}-Ó¶§ªð%΃Gè-½Ðð•z.>¥åäÔ©"^<5EgyíNÛS+Nq¼ðÓ ÑœË…ü«ÿýAŸuå¢U%zWÝѨd‰ùhŸ%¼”¨’¸šµøÝøû| +endstream endobj 928 0 obj <> endobj 929 0 obj <> endobj 930 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 931 0 obj <>stream +hÞÔWmOãF–úÑ¿btÒIvï²ì‹íµ‰B¸£ —kÕôƒëlŒÁImzð¡?¨ÿ²3öÚ!îP%îheßgž™}Ö~V@îl½?×N¨@óü(Å¡2ÎÜù1q¶HæŽÀñ‹…ˆ4‹#Њ3.!Y8­0îc_’9#Æ9W|r~wÆ°ö¶öÞ¼“Ê‹ÜU^¥‹E±ÌápÙ˜jžfÆû#ù ]©ÎUÀ¤ `$˜Hö²(zÛJíÖôĤ3SÁ^™Öµ©½äÂ'NàÇGÈ‚˜Tqó#Îý.¢P2öã*“þÆ8f‚¡ÚAŒtÈCÜFúQ4á‘2Ú¨Óºo2íþr5K©&ÜÆ̺ +TFîÒc¡k§ÛIUvn'É®ä"ðFBÅœv +­ƒ˜ùîIµêfÌ®³Î<1ék¥¶.VKk÷ Í0§¤JjÊ*Aöýû[öˆ8öFúˆG’‹®€\è˧ß|êÿ×øФ½Sš Ú9Þï’ýÞ‰ Û»ç…º[–0)rd¨F®5ž`[ã¬MåTÈb÷/O*ì43Ö"ÆÃh“–íq +ñá1^³ +†Ï–½ìºs‹ÓSÑ]€\[€R[€x¸Js§cd ^@6ù§èØÚkk”³Ð2d¸¶YåF'Ih×…"ðš‚4ü ç"y_T!ìmk‚/?´#_a<%˜"Š±a^©QÃ,mR˜W«4ÈëÊ’SpÊàQz"3[†>FÏ̓f¯PP7icfÙ I[ŸÄ­yQ"vô»õ¯fOw +endstream endobj 932 0 obj <> endobj 933 0 obj <>/Border[0 0 0]/Rect[421.62 672.24 534.36 685.74]/Subtype/Link/Type/Annot>> endobj 934 0 obj <>/Border[0 0 0]/Rect[449.34 126.24 543.48 139.74]/Subtype/Link/Type/Annot>> endobj 935 0 obj <> endobj 936 0 obj <> endobj 937 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 938 0 obj <>stream +hÞÔ˜[oÛ6€=úW}’Ú‰áE¢¤í)MÒ¢[Ò‰R h÷ Ú´­U–I^Z ûAû—;‡¤.Ví.E7 CÝHòܾsNV³“ç7œ¬š™’$f E$#µž-gO³ÙÉ3N8É–3.ƒ?¸ñ$¦iBbÉ($ÛÌH¡,„oÙ|PƘ$ÙýìwyñŒD4!g'gOžWµÏšxÛUo6Eµ"/ªV×Ë|®ý_²`+i·Š¨ 8å*"Ùù %òN¶ä(Ûˆ¾ÖùB×ä¬Ì›F7~öëì"›)Acš()B…LÓ”Ð0a,´:5Í hJE¸7†À Ò ‚¢½R£|J`0L:ñ8¢?˜PNé¼i‰({·w‹Ÿ¸×ê…} Þ¯ò©òÜ´+7©ž¯Ý$aïŒG~ÀeÊð%‘ðÇQJCïU½µ3»yK^ûqB…§”Æm±­œ|p10C› +¡b4*9 §û“ð4õƒöHÁ¸}Œˆ¯ð¸¤»?üöŸOýÿ +ï_Ñw2¦=Ç:ßIÑùŽGÖwÿîQOË’\+ˆÐb­õ9¼R°ÑµHESï7_Hø¨ÔœrÑ¥S,L:)`G—OM`\Åj$C¶G ·º=ó%àÀÛúx­Ió±j󤨖¾H†ï~ ð _Â[Þù»í®%íZ$†ãL䦨 #kR†;2ƒ–«ÓŸ_¿8½ÉNÏ~D¦ôXh¤ÑàÖ9 Š瀦Í[½ÑUû-i´&®òÅÆç’q·!¯‹œÜ´ùÜç)|xÿ¨³R(8U`ˆ8¤ ЦÇ@%Åz*íÙ+’!> 6£#s¥î EeU dJE2B©U¯ê¯Eâxº3Lè C•rš"×UO ÞsýäÌy™W«]¾ÒK_ +`PÀ¨u5…:±hLmM­…] À# +<H*¢þ¼È&‡ØØ,Âbrc"À¬Î2a—§Žj8XL¢­¬‘D/ÆzŽuƒ”zY€ŸÐ1ïÑChßmÊQöFd2dþyg³¢jÉöV^·è­÷Ö'ómÕ´ß›•Ùc7m70m$þ,¦Ítø>]aÞÉFÖyý÷è–=ݶðµÝn.óº>¸ÝñÅÙö¾NW’?œºúžØKÐp—hµ½0gÜVÞ«¢™ë²Ì+½Ý ½ŠÊVßÁ×ãì“AV¸IYµ“á;/w 2¹¤Š’Îôcèaj›à@¸”%À:ï°y†}¦¾ñöwNçøHÀ„jèiúýæˆnI<šÿÆÃ@ºEJï00óävU».j0k½Úa=š`ê´²ýzÆJ8¿{Œuœ´±è±æ#{æDœn~†B"Ž!д›É!mä½ÜV ½ÌweK®w¥~‹D¸/‘sgF9IJéÆÑ®h”=/z eðôö2ÛÛ2bÃ`ÄÛ—‡Ù z×·—{+!¸§1å°‰q;å£ XE^hLú$ƒ.)Æ>\ïþ‹È(²ÄZîal¯àoÃI"AÅ<œ´à¼+ƒRv=%ÁVÜÄÁ¤‡t“^¼¯eGZq“WÿÃðe8¨ÿ—Pn/ý +endstream endobj 939 0 obj <> endobj 940 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 381.6 135 393.6]/Subtype/Link/Type/Annot>> endobj 941 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 350.58 158.94 362.58]/Subtype/Link/Type/Annot>> endobj 942 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 943 0 obj <>stream +hÞÔX[oÛ6~÷¯à#ÕÅŒ(êŠ>­I:th‹"q»‡d›ŽµÊr Ém‚b?hÿrß!©‹8Í0 Ã@ê\¿sáa$»™ÿt!ÙM3‰Kü”…iÌ”Ïj=YN^Í&ǯ%“l¶œÈ€ùøÃM¦‰ÈR–(_ø›­'>¤?ÄÚl>™ +ß÷›}\ò·g¯Y$Rvr|òÃìCíÉT¤|sSçëuQÝ°7U«ëe>×Þ¯³Ÿ¡JYU‘‚ˆM¥qÄf§’(;ÙJ’l#ú\ç ]³“2oÝx³ß'g³Ifð#QÌD ²,c"L}?´ÅHâî;\A¸óHÊ|„§=™ñ>cø¦ÓdOÐ[ÄÎë¼i™7EÂ?Þ.rz’¼Õ ûÀ +º§¼òDÌÙ;GTÏWŽ(°w_FÞTªÌ§—4Äs’D™ù‡zc)ÛyË>yI*®”Æ©ØTN>b`ö Ô ˆB•LÃýýÉd–yÓ:²iàKû1/&sYwþí?'ýÿ +ï_)v*’"çw±SA;ÙØý»¦þX–켸A†&ȵ֓"â j°Ñµ7U±Èø/PXÔ a,F1ºrJSN1šÇ}„qzJ——®¼SøÔI.î«6¿£‚?žÍ+'Ylk”HV ’,bîŸ"SÓ`¥^ï7Õ©^æÛÒ-ÿfÑ>,¢jñ©ÜOaeÛT(î¹óU^¿`U¾ÖWüÊcfý¥a½]Qµ  [\Üæs4»ƒdÕv 2ômó(ÍžÊ[¾7j‰¹ÀrµÐwÏãû”—[Ljåâãb³½.5Q]Ûõµ®6p`ù»ÚŒ²ÙýmgdE8Œt±]@MÊÞ4ûºî°|µžç¢­ º‡yL×Ë|dân‚ÌÀþ6¿×õt|qt‘€dIlCž@ÒfA +£ê—bÑ®¾‹äù|¦=M}Î= +ÿA]Ïe{àW­ÏîZ]5ŦºâŒçø÷w˜÷4ŸùÍ ƒ¡¾S_>ÂÞñRØÍŸ@„.\ +÷S‘?¨ÛüáÔd@åæ“ ÓEŠ)$da€Ñ# Ñ¦2vz˜TH#¡LC¼ä/Ø—"?ß–ú©dŸ†"qfS^=Hya’b¬Æ‡ƒ†_ËÁ"bêš:yI‘¤h±"£ù #Czȉ(%…‚¬±~4ƒWq³KøÑþ1ò XŸÄþAíÁQó|:ÃÇZ¬©i’þAMÄÔiÃò£>î™;è}WT'ÛöY[Â|Û¾õ¤ƒxîyfÅïUÖ©AÿñÒäÝ.­hä7µyÂþ`˜»ýÕOúa$µ‚muá¶UÂÝåë[dÝ³ûË̇lõ×V”­û™ÿ’ÏVš-=…Ôæ#̺e¹ñdˆ÷¯tžÐ^€¤ãw¸ÑÇšUGá¡6$F–œÍsc…„5 TèA#é+Ëë|îÉ #ôgVo¶mQiöµhW¬…%-68æ܉:w„ªDšÍô *¦z˜5N®?Óif˜ ¥£xù#š©‚áøP4ˆÆwžW cšn¬pgZlËÂËFSÐŽI©P™ãêõ¹ã$ØlU4À1 €;.õMUÞ[èqÄô® ëßY»±EšòeŸE*q#m­[Œ—ÒŠPƒÆIc&jl\ÙmNã'º$FÒ)®l³ôBúКÛÊPi¶ÈÛÜkŠ BÙ©wZÖ›5Iiq»V"ýG`’¢ØUŠ%iÂ…‡f'^{8]'Èr\j—Þ¶Œà¦3Â:ÁiíCqªhlXÔ{åÎÏs:ð "Ü¿PÕDÜ8qj\ŒòÈ5iƒÜk´îà‹DlÀKº¨™já”wè”ìÜÖIc„\ %MßëÖä"Èü‘ŽY1?¥4Þâ™б¿í²Â‰Öâe·iÿ%À½ø“ +endstream endobj 944 0 obj <> endobj 945 0 obj <>/Border[0 0 0]/Rect[485.28 107.22 549 120.72]/Subtype/Link/Type/Annot>> endobj 946 0 obj <>/Border[0 0 0]/Rect[63 93.24 123.24 107.22]/Subtype/Link/Type/Annot>> endobj 947 0 obj <> endobj 948 0 obj <> endobj 949 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 950 0 obj <>stream +hÞÔXënÛFö§žâl€d8Ã{ÝÈúÒuá:†Ì4ªýÁH”ÌV¢’JÖ(ò@û–ýÎ G¢e;I‹Å€IÎœËw®sF’ƒÑw×’Í ò)ö +’ˆ|êb0ü+ŒÎ$IÊæ©ÈÃ2‰EšPì{ÂS”­¤/ÀZ6 …çy>e?9§gŠ„ŽGÇÏžÑUíÊD$ÎzQç«UY-è¼j‹zžO ÷?Ù÷PåU¡P*¤¡2 +);°Dieû’ekÑã"Ÿ5/ó¦)7ûypš "%â–D"ŒH(?MSAây±I›©7a©PÁM8‚ |½ CwnHµñ)a3H¬Í G퀩¨3:oZr‡‘ˆ×›YÎoÒi‹™y¡’Ÿ‰S¹"r:²:¢zzÓ)óôd襟zü‘ð{‡©œ«zm(fÛiK?ºq"”StRšNźêä#ÚÁûT©(f§2ä 8ŒØÿH¦©;L #*Oš×܈á’}~ùão'ýÿ¾ûäØù±9ÏÆÎW6v24±ûk¡¾\.i\.¡1r­u¥%ص;ô#‘:ï]åc±˜ µØ•S¬t9E軶’eÊ{*ÒÈ¿¤>Eq,ü`ßW<å³¥ž5’hYÌÝÈ),ó§üIïËü¨—àWèÉ]ÚëM>EÇyJy1ôC_x…‡”A¸gBÙx +y?ëÈõ:¾)¦¿P9§ö¦ övS mhº®ëbÚšY‡ÀÚ‰£¹þù‚Õ—ëêDãÊ·ËöøÝ/ö&.ýªådO;N‡6uYµó‰ó„©J«5–Ûž +Ë yNhªh¯y[Xy¡”Œ;nrtˆjb1™TO&î‘%빸Ó]í¶®HÑGë`øÅC ´}£šzYi8ëm dÕÌÀ©·K¬4ËÛü±ÐÀ0ÐÛ._]žœž½|}‘__œ²ê¯F÷œ pøm•¯Š‰3q'.¶Žîºi¾®™~â”ô‚¼#*雎 ËÛÕE~[Ô 3cëٳϻ™èâåÛÓ1pÜö–,èRáà3˜£%!âG³ÜäVÿ†fíÍÄ°=ÈÕyÄb zsŽå“ìßôÕâÖë7=y_ +ãË&ýë+,¿<>¿üî +'ÄÞ‘yôñ°´¼$øDiÝäÕlYp SYé âıIT|ª´>yô‡/ˆ;+~aØð:f•\®¥uëAÊ3Ò4ð®¡hðXíW@ñXæxçPƲ3Û`1tvà«V„±åãÃÆèç*ŒÝf¾Ä | =¾—rGÞÅÝ00Ø)…Ca½á³@Ƙ=Ú[Bc*«²-1†ŒÑÊ +#Ú1o?QBŠÓN¶Ñ"µ–ý¼—¡ñòÌÇSÞè,4ôíý‰èíÏ çjüêêtœ½ES9¿<ÏÎ_]^N«[ +? {¼I§Î Bè|dÄuºdÖPD÷té·Î ÛY¡O‡¹«bÌ\kÿ–˵+C¼|Àq;"¶ajÖ¯;wÄ„ì’0€m\âíMûÇ]CvNLâ;[ÄlNŠ㦛5a œÊžˆ‘v¼=š{ƒ>,Á~_*Çö A`7ùS'Ç.æùô3öø +÷†ßeOcoÏO;ƒ2W½ŸzväÐ\p6²c琉 ï÷Uì4èù*ºo¦]ItP&>_†´PýCeªDY‰Aoz1À]å Õò‰rÐ7Ÿ®: ã¢åêÒ‰T¸°Ñç‰+Ä£pù£Ñ‡-ÍëõJ'b'½+‰P«ðO*–.å©i1d¬Šªåî×v:/ÑøtÖ Êîá¢Sxªw¹ûƒlRaz̲lÚ†r ¬›Úô¤@ñ¬D9oÜÄzÖ!,04©uϦÅ=1î+­ò@å‚Þº2à‘u:[Z¹1?ù·Á·ÂÎC$\”šëmüx;±È1÷ûù»Â¶–º [W¦¶Ël‘Ýsbc¾ ¯©]³+XcŒÐõ{˜Fnƒ¨Þ÷:v9†ý¨ç–®Øˆ/æGc¦~á`ÙG´; ï’Hq3¥æ¶jóÿLIÌêJ9+üwr}Väïx’´Ê’à’?!‰;?\Ÿv ôœš¢ 'W6|™nQzxÜ’m4A +•ôR‘PˆÎðx«A=§¸ E½FÖ¾?'›'ö7 0„ü3Fäé_(oÐ>ï +ìYfŽN›ÒÆq‡o=ñðÏ6#¸‘.òj±EëÃ-OçW‚ü¿º¨±‘Hm…ôZ»èìùM€EóTE +endstream endobj 951 0 obj <> endobj 952 0 obj <>/Border[0 0 0]/Rect[485.28 413.28 549 426.78]/Subtype/Link/Type/Annot>> endobj 953 0 obj <>/Border[0 0 0]/Rect[63 399.24 123.24 413.28]/Subtype/Link/Type/Annot>> endobj 954 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 955 0 obj <>stream +hÞÔWÛnÛF}×WLýD&Öš»K.I}Hl9pá8†Ì(¢¢ ¥•ÄF¢’Jbù þegv—ÔÅvì<E ¤–ùž33ä0ë¼½á0«{JB$& +d•îM{o²ÞÉ9Ù´Çø/<‰Yš@,È–½µ° ijlÜë³ $d_z½ËÁ9D,Ó“Ó—/áºòyÂo5«òå²(gpQ6ºšæcíÿžý‚¦¤51!"èsÆUÙY4òV·ä¤Û¨ê|¢+8]äu­k?û³7ÈzQ˜bŠE +˜iš “ mDJ°XµÏ1T&Â½ç˜ J„41Ò.©‰>|&mÐäè<ÊE× ø}ÅbïÃz’Ó÷=±7PÐ5ñJŸ)ω½sBÕxî„„½<òû\¦ýHÞÇq”²Ð»®VVb²7ð«'LxÚi©‰Uéôc L†Jª*¦¬’ËaxX²¿§©ßOÐFÚ··øŠÜ…öúüË.úÿUÞý¤Úɘqª\ÐÖNŠ¶v<²µûw]}½XÀ°˜!BcÄZãsy5r°Ö•ß—Š¥Þg_H<Ôf˜'xþʼŸ½¸/¼FÙÝZ·âx^7ß¿Ê—‹£Àó&ßÕ»'U” Ìó¥®6Ë[]=!4ÌËÙSŠn‚~Øzþ._ïËS‡Éjs»ÐPn]¤RjwRX®æ)™ +!z(ôí•0-æ$ 0;sgšzÈ”iìu¦/ºÊ[øg5rVq˜íôËã»w=|=f¿ Î/®.²‹÷WfLnæL¦‘}7èFAÛNê&oôRce‹²³=-ÚçÊ;†bjé Ü”Øñ¾æNXu¤€Mí"¤ì5wPÔ°šÚ÷cBËmH|'¤áàõå^ bs{‚½¢0¬*°Âm®XîÆku^\eƒ·ƒážÚ‰§VX½ ¨;¢8d–Æ€hp»J—En£>÷%÷V>Ne¨M×Â\N}‘Ø3„‘ð–ø?2¹Àqß®6ÍãeVIôÜ:ß?P®\¡Z8äÚl„6²MÄÃ+ë f.±nò™Æ7õ¥Àè‘–‰Wéòp[å!"à>¦˜5é:Ö™¥X>úÝçÈÎ6†Ïžm™a×Í·‰56# KšHmã‡g´T‘ +D,¸¤{¥ùˆ;¬/ZS ÐH µ ?¤ƒ(1øš/× ówüÇÛ­PâÀZ3Èn;tæ2„–’㢂»s„‹òb$Äêy_ècDûÓë}%¬sŒj¨ç­ö,<­!‡qn¼@èsyÈÆÝ~·XÜæcš±÷ *äuQjøR4sÈz΂@n„xÀVTÂ7zV”§·Ÿ¨"‡¼6YoWBò;³éL2e<<ìÊbï^^NŒ;2{­R™–vëÏ«b/öœLíäÁ̹Ø!³9v÷qÞ¥!ÚIÃ2·Ç3;èn)ÂÒ&6FÊïö¹°mé®T,šøZ×¥büHéÀcpÓ&ï|Jn]´áÔzLÒì ¾ tJŠÊ–qvéYWÈÕ-Û*½‘©ÛiŽç&xS¶?lÉæ íîæÏWíý£töM6ËåÝñvÛyDžHÿ¶0]Ñî°©í ×Ò¿ïlKÆ í“Ru:×ãO4Ø;ˆ´¹ù‡¼¯*LÖ÷ü§…@y#ϼøÓÏ°…/oÜùrÈ7Æf:òŽLËBô”+ ðs ®–E‰ƒ«U±PðØ´uŽ_Âå eÙhTünY Úï¥Ît¥›MUïDÌÃon&ý#À8m +endstream endobj 956 0 obj <> endobj 957 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 958 0 obj <>stream +hÞÔWmoÛ6þî_q3P@jc†¤ÞQ´€ë¸‡ÔÉ¥@QƒbÓ¶ZY2$¹Y0ôOô_ì_îHJòK±ÄÛºC>ˆ>‘wÏ=w÷Pa°èœž_3X”×ú`û.X +Ñ™w^EÓ× Dóã@ñÌ÷HàƒgQB9D«E/„Úh‹¦¡”ZÝuÞÃ×ৃgÏàª0™O|#_ñj•d e•(æñT˜?G?b(K‡rçôa®ÑYGzdo‹IßÊu(â™(`Æe)J3úÐF—ÏÅL\â¸@¸Û§ÔÖ9©4ÕKÌ”p{ï%!7Xê%&ÚÒ¨äÀ—¶ßä,áðwë¤ã²³çϸYÏb¹bF%fz‰|úFfר·½©7Óe½‰ë'eŽÙcV@åßõç9±«"×;f›ioMÏ'ܵ—²‘gµ,"˜JN9w=Iª„lÛ‡ûX˜=c=N™^:`º.4ÏãÿùÖÿ¯óö§¬å&+G›ÚY¼©stíþ]¨ý4…0Y`‡zØk•Éˆc”8‚¥(Ìžå’Àødr bFbœÅzœ<®ÆÉEíhe%Š¸ö€®.¹ÀÝ®çËÞê +å–Ì”6I¬ Ó5’¬šOŒîUxy5 £wgÃ×£ñíÑèr|=™d݉ù\3G(–OåèžÕN +QáîM‘}þy_¶R'áp¿–9ŵ÷V†ÞÑRÀÜ´æ#éàü¥in2ßI‰&ÇÄŒ_M)gF¼Z§Êe³ÃìÙh-!†i¬00ô`m‹L­v@¹Ž—¦·ñÔdŽõG(òM•dî’j "©î×êdœ&B-G»T©˜( ëÁíÇ÷KÝlS÷¥²·á²5N Îf*<$«Îl-Ô­¤P§-–1•Â Ú†Çqvòsån‰(‘ˆö ØRÇØu§×*E Z&%r¦Ùàt‡ •=RÎwÃlu®é»ÛùV(b†ä6y.E¹O—0Ó—£$`»®Ú±ã¾v5Ǩ3ìÉ|­&AOGããàÛ¤JòLÏÄmï6Á{ûì°å±ÓuËçë31¼‚‰*á ÎÞ5TÑÕ?y¨çÕL7+hX +k´âb”Ís}>zú§'npàÏb9;1lô:ž˜ð›:׫[„ÉÎhŸžJ/ƒ¥˜~„d¾mÕÍ¥I ˜æE!¦ÕCàñîžêà/`ÛÆ -ŒCøë¢V‹H-!ËÑ\ÁÁ$œ€LKømW¢ñä›ËþV곎ñz͸ìj nÛѧ:**Œ”ÖnQ/?ëÑyœ'IR~ûYA®ÐŒÈsMîµ +ÛKÂm:ìîʪ˜®Öc]W»÷².½¢Ï˜˜'ÐM“Û".î»ò€ /^˜³z1zöÃwð¤”æî ì¸ÇÕ8FóJ¹ßáK»©<#$ÀCtho<ì ['òE÷HdW£1¢’$¨4$•æ?EµRsXäÇâzÓ„— +šOä| Nì[Pö)‰ÿeoGýïB™FUlRñ…7ÃïÒfi|¯¤àXlýwÃð{4Ëå ¼[âMZí2ø0Æñå¿’ú7šk&÷hDó^¤ÇªU«KR\å—ÅŠ´¥i†‰úÑ4É„¾Œ¾$ö/ ûUáŽsý¨ûë(Ïÿv€Ÿ¾e€e\†q¶Ø6ëcWjØŸc'-à š²ó÷&¯Øjb(ÅØí4éÒÅïj›í·ÆËÿÅh´ý÷õÎíUúp.ãÍêVæRèdN“¨±£Y»Èäùbwðßš?á–A… +endstream endobj 959 0 obj <> endobj 960 0 obj <> endobj 961 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 962 0 obj <>stream +hÞÔWmoÛF öÑ¿‚+0TJã˽èuÅ´NZ¤ØÒ V õ0¨òÙÖbˆ$· Šþ ýË‘'${ÉV †%@t:ñxäCò!#`9:{9°¬F‚GàE(¥-FÏ“ÑÙ ’ÅHHàø‹…,Ž Tœq ÉfÄQ ãî%ÙhÌ8ç +’£·Î/ÀgLÎ&OžÀu銈EÎvY¦›M^,Შu¹H3íþ’¼Â«Ts•Ï¤ôa,˜|HÎG¤QXÝJn£úF§s]ÂdV•®Üä·ÑE2ò½ý˜“*Žc`^Ĺ×xHö;ºÊ¤wð‘ ”ùˆžv8ÄÆûð£Y§ÉÙY&ƒÖë´ªÁ,tÞìæ)­„Sëy³€œž‘S¸,pZ±[¡2[µB²yrá»c¡bN/Q„ë0ôcæ9×嶑˜ï³~rÈIG·ZªöŠmÑêÇ„9*eªd²ç‡ìwqìŽ#¼#K.š¥n@æ‚}~ùã?ýÿ*ï^)v*d‚"Çmì”´±~»×Ôgë5ÜäKÌÐs­vó +k°Ò¥;V‹÷®T¸©çÌXŒÅØ–S(M9H¯$‰lª=fqÐ-bA2åõÄÂ¥"O¹u _ MÎÌÙ•ÛÝe±ØŽ¿_¥Õ´.ó·—3gæÎÜAÂsªØóö¬qË +׋™óèñ7ÕcxtŠ¸mÕU¤«UôÔj’Ìãha§ Uà‘FËlV<²¢ÉI+PêöeüéçCŠëÙáñ#ˤ&š†P:¦{ë$+ W D‹ÞÇ +_¯·®ððý±¨v%Bç|t‰1t³[k¨VVÂ{¸[A +Yjl¨AõiÄUG²¹o½~—f®ˆ‘8n¡Üîë¼Ðð!¯WP£%õÝNCëŒoa\ùJ%g­%RÔOÞÝ&x„ع÷ž³0êM¡õ84§O!-æ@'Ƙõ±×ô‚ð¡V@VeÔ ¹¤µÊC¦ëljÓÇy¿Íçpr`ŒbÁž[ô$«¼Bð:X‚,›´$RFŠ¼­ <š,70c‹ñŠ[p· #Fà˜ºÁTÇZÂÜRÎœëE^äuŽÄ]錞M%=T,”;^À°[aî +æ·MjÔK‘x3™ ú‚ûèŽ Í¯MPOša“ò¡ªéȘïqw³¹;=Lü?Iã­ù"ŠÀ9Oëö¸¦ÅÌ…Oæ踽W1!<¿¿÷ìŒMV:»¥ªï*¯r¹Ù¶,ª¿²Ý²…9øõwÐ''nÛüì,9v¢#ŠÄÜ[A±ÅíîIñ3mÒZ[e>ó¤[îڥ؜‹%J²#Æ°[{1²Q‡h©ãoèâê®o^__Ü$?Ÿ_àö‹Ë«ËäòõÕtxÑ=|xIÙ‘/jH*3y4õµ$Õ°-ÌÐãLÓ_馻4#Rºi +¤:¬û!ë)5TxÄz†ôhÆ;*i;.ééõ³ÉåÕ˃‹°ö¥ç[[#sÀoy‘­÷sL):²HÖkÖYF¡1,,Cš«\üc8˜ãÂp0™j8èÛÂðzU¢™;û¿z¢(´Â½T¾y q;ï1´» "`¡.ÛfS»çÓ÷J!-.6=‘wvéÇH‰IÒÀy˜Šfô™º#CZ‰+7=7w=`hêýI =[_¾kF¢¦otM +°åšš ¢1ÃLJv饂9Ê¢Ün ;u&Îéÿƒ”離Ŧª±¨7I5/ÌMòE¾Ö”!¶‰C¬ÆØ}#ú/F1é[µ²éoôÏÐô®¨ÓÆ‚‡É]Dè¨×¡#;«Zpš®7šæ}çÓýd8h 8-aÍOkl4ã ‰U=^Ì;d(³JË(°¸Å— +Ê{&Ï·ûw8ŸÌsijȴ&£›ŸŸÚÉñ†hˆ +endstream endobj 963 0 obj <> endobj 964 0 obj <>/Border[0 0 0]/Rect[369.18 151.26 398.34 164.76]/Subtype/Link/Type/Annot>> endobj 965 0 obj <> endobj 966 0 obj <> endobj 967 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 968 0 obj <>stream +hÞÔXmoÛF öÑ¿‚ P@j«Ë½èuÅ´‰3dk‹"V÷%E>;Zl9”¥Å°´9òî$¿ÄÉÖð°ÏïH>$ò"`1:þ~"`ÑŽb O!LcP=šÞä£ã3òùHHàø¿Dš°,…DqÆ%ä«ÇSñY^ŽÆ9Wß.½·ã3ˆX +'Ç'/^À‡Æ)K½õ¢)V«ª^ÀyÝéf^”Úÿ9ÿU)«*bRF&âòÓ(ú³• ³ÍѺ˜éN–EÛêÖÏóQ,Y£'1‹b`ReY,L9­OÆMó=e2Üy‰@€2/ÑцÌ8Ÿ¾ ÓÞg2G†ÉØ9]´øAÌïãí¬ •ð:=³ ¨è;õjŸÅž{ç„šòÚ IûÍEäBeœ~¤®“$ÊXè}hÖVbvWv𓟤LzÚÒ:ëÚ!0sÂTÊ8!PÉä0ÜØŸ 2Ô“¢Ž,\Øe~LæBÿýÏ¿þsÑÿïáÃOŠJ˜ Èñ>vJö±‘Ý¿kêëå.ªfh‚¹Öù‚E^‹%ØêÆTÌ2ï7_*|¨gÌXŒµèÊ)‘¦œb䎇´¢ˆK ³˜ŠÇIÈ’ ¯p‘§nAŽNŠ•Þë&·EYùŠÊiãOÅêv‰<°Ã%Ú¢“ÃyŠŽ6¸ w®¥”K/¿Ö0÷•@_°¼"¬¥årí‹ß]i_f¸þä5yF´×½„„ø´…ÊÂØ ðµ •˜+6iõ-—WEé‹ Kôšõ]WÕî«î:´¤û|«Á9õÎ0®"{$74¸ÔóÆ P/N®nrÜB4¸ñž³$ݘ ’ÞãÄì~ E=Ú`~e¡%Ýä1Î%«J"[°JœU!rÊ`S¹1¬r†íX„¹de/=ùuÕ"ZÉ·PpÏõÌ"€¹‘ +ç¸ÐA™X(1l +ÓcŸ 袼†šPã ­5®twï#„Ä”$¦k{x C«í†ìêpÜØŠK7¦¶»k÷C2žm%A¸Q»7zQÕ¨X’ ~c·¢CÔ-LXšn¢·qàªq=;¨H²(ÝŠ¢ÇÌë<—ö=&~l{ -°–¢4bØ'±–È0“Û—^Uw·{6#ßÀÔ¨>qÈÅžQü‹…ê¥%6Ʊ8©1q꬧†ÈÌ??îW°M±÷¼éy=_ÛSòçîûˆ uZtdÜÙu1õáw{§^1!Âh£þø˜N9¹Öå TóM=Vø¸õ¹åºitÙ=åîCé©g6~ý-l‚€ûr,Ù÷à¶A0çSï(7z[¨×ø¸ƒc!ã …#UÑéþ°ˆ…R¸ê€Û§ƒ›N룩ÿªã}ï7º»kjƒˆyù‡e‰Ãhaà<ö“'¯ßßsxÖ£õ¬…g 8z¹ ¾™¯ƒïj¤r1õ¦þ#É€Ó‡R½ýfÜ[÷›¥Ù ~ŠrÈ£í€ï¹™UmWÔ¥&©Ã^÷QÚJ©à»ë¢˜Œ)oìΧC4É_ŸüÛ°Z9 [Ì6î8ˆIr,¤BDE xþ +Á¶Ò÷H× MwT2rc÷.K ËÑ“ªÓpá¨i¯Â·:¡Ìèbøƒ½Ð´B±÷ˆÅö‰~ržwô g[|ןËu ¬YÕåòn¦MiÑþlè"Á N¼ŽÌFí?L3ŽL«¥M”N&šŽôC,y„­d"hº0CÅ`úWà“&[òCç¶- áu #eú+Ò ‹¯ýx³uY’Ûʃ¶*3—†8©ß œßeB3DJÞfçQ˜};Vx3†\Þ|ðC…SøøÑu4Ì!â +ï'n†3»±»š>pô©9Nò”ũͱaŒÛAñpnŠT ¹¹37 wúК)ÈìJÓ¼¦höÄvd»Âl†óf½²éµÛ‘9‹eôy¼[f²'£Év¥±á­m \œWK4¯•8ÜØþ‚hpºÌÊsU’¸ÁóŒœfzÁû´Ÿë®ø„b¦šá9F†Æì•OÏŠ®Â¬)®°œí{~¢êK˵÷3‰Å¾ŸHÞZÃÅî¨Og iIDŠê§cñD)¨,e*Dáp«´…ilUo-ì­Ä›oŽˆÓìʆK÷øìø!x[Ô‹;,%‡¾Âú”;I³hƒ2É ^Z|ühtýðO\DÆ"ôü/U‡m +endstream endobj 969 0 obj <> endobj 970 0 obj <>/Border[0 0 0]/Rect[369.18 391.26 398.34 404.76]/Subtype/Link/Type/Annot>> endobj 971 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 972 0 obj <>stream +hÞÔWÛnÛF}×W òD&Ñz/ä’‹<µ¾)ÒÖ°Ø"AÒZZÉl$Ê éÚnÑê_vfwI]\ÛJ¢(ô@rwfvfvΙ‘€Åè蛉€E;Ò +2žC’kP;š¾.FGgó‘Àñ‡‘gÌä)θ„b5âh…ñ׊éhÌ8ç +ŠÛÑÇèÝé¤,‡ã£ãW¯à¼‰EÎòh½hÊÕªªð¶îl3/§6þ¹øRþ¨”I™ÂX0¡S(NFdQô¶• ÛÎô…-g¶ãeÙ¶¶‹_F§Å(M Æ¡YªIeŒ–äœ'>"-Y¦û} •Édg3A‰Pn#ò`\ôp3Éû É9x&uˆºl;ˆÇšeÑ׳’ÞDÔÙ™ŠžyTÇLGAì» ÔL¯‚ôO.Òx,”áôa8¾gYjX7k/1»™vðSœåLF6XiÃë:ØÇ;pæ”T)uFY%—“dÿÊþaL<Îñ 3–\ø×bMîBÿ<üñŸ‹þŸtw*c‚nŽ÷w§dw"õw÷ïºúÕr Õ+4ÃZëbÁÒ¨E ¶¶‰ÇJ3ýK…‹vÆœÇƧL:8i$'xu¦·8¥¯Ë¯ÌŸ˜dr_wåþ¨(¤·c˜Ñ£ôB¶RÍTB¶Hy0@:%Ò€¥W“ª³„“èwŸgÆÑ ' Ÿ '^a]#¬§±Ž®Êæ%ÔåÊ~Š>ÅàÖß8Õâ%ÊUuWe‹rŽ—þVfÏV‹l ãú¶ü–׳õÍåÒ¢Âoö½&¿÷­o }xD(Ä´ñu‚ÂÏ„ó~r¿ZÙ®¹FîÃr†(x±¾=/;ìõ£‚õÍÊÑÙGîóŒ2(ò½»:R«ê™½£=L"mã½àŽý¡©lÝ=«±s†×™tM¯†Ë^Ó«ÁoBÏëa ¨§:$¸7ê3IÎt +˜;´ŒúŠ=•Œ°m¤w—›ÝºƒªDŠ€*2””hãï ž++z"’SBryÓv‰D˵»ü¤íÚ aˆóXü×î›v±ÉF«˜ÖÊ®Âf4oÖ+è®,_Óà+ØèyÛÔWg4y[œ:ˆ÷1I–lØ1í'”†¶+;»Â¤Ãz¤‡L’¦[ +CŸÆ^ïâ&OhŒ˜WK 4EcÞ³±Ì²+F+²ýù#Ë„×>£L -¶\h%õYÖ]ŒË‚Y(/×7ô‡ï¥õ¥™èû@¦ƒk›\¼†ÖZxAó¢çd¥ ÃÁFŲ$~त]ˆ=9oªG™œHT™„Šr»éÀ\†«zû^“ÞKV¼Ÿ4ê e†9éôìèSð®¬7å"¨q¬ÌäÎô—˜tH•ë<Æ ¢ê¤:³õÃñ‘:â&‰óÉ Hûý±b2rø»Œ’’je»Ë?=R÷VO_ðH‡ù²æ²nȨc¤ç[ËzÃC‡µ–»çÚÊýÁ-¥³×}àƒ«”Ž§NŸteÓ=ëÂARwäÀÓÎItê~>œŸþ™Ðz\ZusÅé]¹Âé õz‰Qçh¡Ò@3+?Ó‰Ào*€º@|͉s r Ö°ˆ–K$ÄetKÿ¥lŒP6ѵ¤šÕ5W½DC÷Üq%!ܧ $Ê¿±š§ò +endstream endobj 973 0 obj <> endobj 974 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 975 0 obj <>stream +hÞÔV[oâF~÷¯8TÉÞ ÃŒïÚJ®Rmª(x«Ðºª dO±«ü þËž3c„ä%ªj<>>·ï;#`bµ?÷L*+ô â1øq‡RZcë$µÚŸHÇ–pão"ŽXCäqÆ]HçG/Œû(K‡V‹qÎ=Hï­ßí/½O°ºíîû÷pQ:"f±½˜”ù|>-&pV(YŽó¡tþHÆPž 0×  %˜HO-ò(ßž ßÚõ¥ÌG²„î,¯*Y9é_V/µB—E!" Ys½$I€ù1ç¾Á¤aê—ˆ”¹þ£—H)xú%]Óhð àK?n0S:î:17¬A畧²Èþºåt¶’#s€)Ýc»pXh×jçµR9¼©•\sç"pZÂK8=$ÏQ$Ì·/Ê…ÑÝ üêD1smY{©ê‹¢ö%ÐsâÔuÈH¥”}·bÿ€H§cŒ¤åraŽ8!¥ Íýõ·ÿ\õÿë|ýHµó"&¨r¼©ç6µ©ÝÛ¦úq6ƒËé;4Â^SŽ`]áV²tZ^ÈûoÇõP(GLgŒ³XSäêq +qw¬×JšºfØ–„f¸è€Úa1Ïßìîz„”ÓB6xˆÕ=ÌžÉqÙÍg³ë|x›®P¾”JP«¥<6¼1Ža©ï9 î©æI_NhNèaÚŸ*ùý*‰Ò³b¼0Æ黧տ"èÓ\åp‡Òúœ9ðý±¦JF7yuQªþj€w´J«ÎÊcBøÁ&«v› º7rx Ó1¨ƒoåp†‹²”CuÚ¡vfkÃ>P¾%Áë^£)ZÊýLkxËSgöQªƒVP,ˆè-Úþ—,q…çJ6žæ»"ª;q™ã*&¨Æ²¬8ÊœN£Æ›^]G-¥º+ kýòÖùO<ö7±á8ÇR7ùöÏÒüXa(txt¬ IUlýTäs™Ù™“9ø¦óÞ6¶X8ýiÑbíâ iÝ/û}̃ õvtꢜügfy*üvÍœ¸VåÊX½T9€þàü¼—^H|G{j‹í®ì<Э¬tÓgù9=Qx¸•«ûE9Ú8'—!~þ}±Ã$ú…û¦JÉÂtû¾â¦Ä‡ ¼–´Îì5¦gJEך©ÁóÜÈY%á;4—áf—BJÊÅBÁµ”¢ÖaE;D½œ€)Šµ·éÐõ¸\Oª=ìÏÏarŽþP<v/N€ÖCgþzàï­`Cö–Òs{úâêHoNÝKð×ém/¼˜æõQMÐSúMní›Ã°mRÎ~Ã%8!ñÉ»+ˆæ]_‘ïã'·v­‹Šzc}“ƒUµµ¼10ê™Ø½_NÍö5ñh^w·ïï¸óQ‹Ö>ï<4ÿþ`_ßñ; +endstream endobj 976 0 obj <> endobj 977 0 obj <>/Border[0 0 0]/Rect[384.54 507.24 420.36 520.74]/Subtype/Link/Type/Annot>> endobj 978 0 obj <> endobj 979 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 980 0 obj <>stream +hÞÔWÛŽÛ6úè¯ ò$%+./"%6OÍ^Šmì*yÉ…Ö–m5²¼•äl‚ Ô¿ì IÝ6ë´}(Šî-’s93sfÌÉfqúý5'›v¡%IXJâTÉHS,Ö‹Ùâô’N²õ‚ Âà @H» ž8ë½!°§½Óh,Ú{· #M“àÍÝ*Ǻbå¤ÄgÔ!Õ?ö“?Ô,·þpOÆUqi~1ð’'‰24^7{wbuXväm˜¤T…—ÒzûÚˇX„‚*„NU49Ž†ì £t˜H0î–Š„Í%ýóï?þó£ÿ_áÃWŒL(Çȱ>vRô±ãÊÅîß5õ»ª"Wå24\ëBNUÐB ¶EFRS|…„—ÅŠZ‹¡}9%–“òø’WRÇ+)––NÄ´¶˜B±´¬‡Á›ºì@åþЕµ+ø3FzB1±ðœ±sq/Ç“G¶-ˆ“ œ„˜Â1‹.ÃÓÌi|õ2»ž)’cX/Ø“Æ[FÊzYVé@Þ6PuîÞ#\ö.X‡"…Âݦ<¨*xbß#E¢™K$¸o=G&Î Cv”„ ô™›Žó¿9‚QšLήU±.-ÈžLí¹„¦?A50ªfUB'=AÜŸ Æç%Ñ]¾zIŒDB²ïOŸ{Š•fWà‘RKPÚ'F§fF>žJ1âìà`¾µãªè U9j,‹PbÊ*Ëœø¥%«¼ËɺÙï\䜅>?8£J©”!<ñ&m—wÅ®¨;²_[Ù×uYbP’mËÖ©ïµQ“ë«œ'©Õ7JZ¾ D‰¿ÊPþÁ– +(³R#©€=¦=5òiëÊ+vf=4¤/Úr@¬ …íT¾ˆ^èÇ]¾D1…ƒ†´Ÿê.ÿb0±Ý;ˆ½vðä] ùßB­ H<@ø&‘þË2TCshŸ¶(È›-O|NË4¦*&ŠÌk>m^óGò:ŒÂ0  i&ÅEmXP Õ×øée<3 '¢1ka,£2ï¦Úåéyïv$a&Imh’þÞà‘PýLQoPBÀ·€i‚,ÂGSÔ‡'HSn¾ÈRê,ôŹC‘¤bL9èLìÙ®m íÝ,G˜'–)bä +U bü4dÉ‹ 5‹IðÙu4Hja'†#ÕyT ¹½ÍÛPçPŽ·y[Ü7ás{'{:;p–ßå˲Ë…£g C•í×dåîøæëý}Ñ·àÐ@º£ûo÷Uq;ºÙ¿ ŠŸÆvJ3 Àµå¼„SûFÊå6ožZŠBL^Áë|j6›B9 Xí·U1^;ìn{w ¬`MbùËùvóÆùn7 87‚÷@Û·ùÖ‡)dó­õ ­ßŸÏ²ú‘‚?UtêÌq=oØ.#/>æ»»êkó×øSgœ'X⓼oà8Pغ”Àvða{¸‚Å=T» °‘CÃ* >† äV!i·Ã)(ÅúO>4çM ôù1}™WÕm¾ ¡ßêà}?xû²ÛZBê>Ý}Ñ¿5rƪP”…àìö}fªÒ‰º·ÀõŠà„äõjà>œÿb9rØHËN“#Ù¸%Æn:*8ÒÛ£tBižÍŽ3 ÊTÎÉ•Ü¡†¢A_ëý™ƒñ}ï€_p'ÓØö/Ô~5Xû´ý²^ïOÆ:ô ÌHløöà×7!ùÜÏÌ +0Z,ª… +endstream endobj 981 0 obj <> endobj 982 0 obj <>/Border[0 0 0]/Rect[436.38 177.24 534.3 190.74]/Subtype/Link/Type/Annot>> endobj 983 0 obj <> endobj 984 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 985 0 obj <>stream +hÞÔWÛnÛFú¨¯˜@&æš»¼×hE––ìJt‚6ê-¯d6¥’TÒ Èõ/;³\R—Ø­Œ¢(j?îžûœå0k\Œ8ÌŠ–ï@`‡à†>86ä²5m½Š['ç8ÄÓ`ã?>x°(„À±™- ^´lDa¶‹²xÒ²˜mÛÄ[ïŒËî9x,„ÎIçÅ ¸ÎM²ÐXÎòd±H³ô²RæÓd"Í_âð(§:ÊcBx`qÆ}â³!òÛá„­ ‡2¹“9tæIQÈÂŒmuã–/Xà£%>ó|`‰¢˜Ú¶[Ù¤ÌTÑR&ÜèZà¨hhã†H~tÃÚfRG4Š _%˜–Ïãfu—Ð7JyW½@JÏÐÈLæzY_/Ê'÷z‘¨ž6÷L‹;‘M?"߃À‹˜k\çËjÅÝzRÂ3™0¤F)ôËLãc”ƒmò©~@N%•]w?b"Ó +ñŒÈ6¯^=0}Rêçáÿ|éÿ¼ùI±sÆ)rv;GÔ±ã^»WÕö|Ãt†`®•&gžQ` 27-Çg‘ñÁ +åSc-êr +„*'{GÓVâXTűȯŠ‹^pµÌq7}ÅYj×Fœœ˜¨Pç^NÞC:…ò^Bùi%±´|£0m&Ë<—“²r³ñ\J|›*÷Lcà>\=6ÔÆo¿‡¹œæ7YZß¾Q<6᳂ˆŸëMÊ'¬ò4+§cã(V§-Q\naTÇ´;öº¤”5”Ç\ÁmÍ*ÁrÍf¸ŽÇÙÑØ<­—mÙ«Íe¹Î3à§_ÔK[æ0Î]ocÙ*ÇÅZÁ›A/mÿ7Ö¨}/›.­—÷Iq–”É-Š“BŽ±96ÿÚgí¸ýª=ê’øYÏftò14 (yG ˆ8H +õøAÐúo£J›­ëÅ­Ì+•Nw·?hG'Y%òI™d“Mé´¯Û^ÜFñ Ó…ë^çê¼=lŸ´U(‚æÒ`ûøCÔÆÒJ J ÃµvG½QÜ •¾zÝíå +='è'ªs½ü(s%>D“ë«·Ý!ôéÄËËÞÛv廒ò +yE°Oˆå+›Ì(ŒãÍpØÄ$î÷P“vÿzGòo>!äöUÞ,çe‚âÙÁysu·/º$¦×Ñ~} ?êì q9ÏåokËlòé0E·Ýoºjt?A¿{Ñ~ÝÆ?oÔ!÷ÖKP>Ò<—ï6—S:VE¢>¶RÖzhuÕ–R7Ò¡;8ƒ¯ZS£1ö9\I­Î>ýrª©aÍBÊ…†4)jª(Œ"34—1n + ý4ƒÕ’Íár]¦YŪ¹aµˆ'"Â#ªY!r®5çŒqÐלּ +ÁÅö»™Ê•v¥À¨Ûï FÔH;§,ˆ¼jí©‡A®5„4›Ì×wRM¶©éœ¿Kâ‹óùÒä¾|Ä‘‹¼ŒÌ"…&Ä€¿Óž +™«"p‰¶«¹ÚèøÍ#Þƒ­õVCÀß8ãRôlß8ñÓL;·øj›Ã‚¢ˆ9À|µ±úÛWŸ9û'ˆ}2 +È`WX ¦%‚I2àÝdph»‚Tod¤ã2ß'HÂñ6†ÖzoT~< ( €Óp,MDºÃ9²êTšgÑÒ¤Д‚i¾\¨èi…u®p›ùÂûÙb5Vmó>lå¥\`ó‚eņ('¦é\R²xFEÇ,¼{¹8úE}«B,Ohˆs/s%™gäP|ÊÊäwÌB•{$¶\ú€q Ÿ |â#)SŒOr‹IÛºg.ÙךۇYnª¢NÏûvC!%íUøQ….ÒQ'ŽI +ˆð¶*€yÝ¿NE3FÐ'òÝê÷jGãYšza:Õµ¹L‰-–ZÒEÎhÂïj`j6eïbUÖùΛëòÉzñ2ÉfkÌ{d׺ú%EÀ5p@íß•¹[ÕÀ®‹YåV]'ÂGŠˆ=CxM5¹-Tÿ1èŠ>R‘W›'èܱx« + Š.ÕŠà«j£›¨ñæ Úi“e†7gbj÷Iþ2ÍAÉOa3$p’Á‡dNCb{…ž˜ +0WÔ +endstream endobj 986 0 obj <> endobj 987 0 obj <>/Border[0 0 0]/Rect[355.5 498.24 381.36 511.74]/Subtype/Link/Type/Annot>> endobj 988 0 obj <> endobj 989 0 obj <> endobj 990 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[332.94 377.58 495.78 391.08]/Subtype/Link/Type/Annot>> endobj 991 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 992 0 obj <>stream +hÞÔW[oÛ6öè_AôIjk†¢îÝS—6E‡¬ ­/íT›v´É’!Ém‚ý¢ýË}‡¤.vœ,E1 CK"Ïý|ç#ã±õìäÍ•ÇÖí,òY,$ókÔl5û)›œyÌcÙjæI&ð‡‡—Äc!OØéÉé³gì¢q½„'N½nòͦ¨ÖìmÕ©f•/”û[ö3\ùÆUÈ¥ ÙÜã^²ìÕŒ,z½mß#ÛÚô¥Ê—ªa§eÞ¶ªu³ßg¯³Y¤È#âaĸôÓ4e¸qÂ¥£¬•Öº¨+k=ÐTT)£˜ªJ!ÁaËþb^šºó>Ò¹žy ™Q¸¬>þñŸ‹þŸÔ;?æuNô½óeß;/4½ûwC}Y–ì²X¡1°Ö¹3تÆûO/®ô±¨–\GŒa´ãK=NÈã.¯$†W­(–ÓÙ#æ‡ko«.¿ÁŒaj³†JKgƒ_'×¾òϘÄÁÝAZ ³dLë3òû!ÌÛ|žãE±'èÍ;'>z²PT„§GÅ;?Aý#Ëé´j¡qST{œœ&0ß„EW­p¸t„ýuèär=Ï«õØÓŠs™òÐשxH—`¡ùDíâ§QÕÝû)cãn°ø›ý¹Ïe¸_¦ù0]ø®t§´n–É{Æ;@~}9˜±Ö´ÇìÐmÆùÓœ†AêÛŒ ëØ[Quì:oÝÈy¥Vù®ì>9Ÿ\¶¨+\É~ÔšÙÓ=±7ªRMŽÛÙ(xTî¬nT±®¦æN,¥ÄÁwrÂê-¡‚yÉælU7кÙävÙàE[Æ%XÄÒŸFï)I?1°¶ß n@ÁiÐç§8ÙS¬4ÞÓÔKÒ…BôDœÖKœ˜–å+ãÆR\ƒC¨Þ×0êØq `hš8$¿à\͈û>O</ë#õ½¨¦ÃúCÍxßP‚½<Öïk2nË[Õt…ja7š¢írLÅ#„³zû~uÕå‹?Ž ëûv*P7“-6 Yí6çù­j&ÁìkŒõY\çÍSV¬ ð.ß &r^êO,ï6÷ Nt.‹®ª<Öï¨,ëÝçRQä7å¾üsË ±èÞõ7*ß~òÍõ÷xþvå±Luy»ÆîcŠÛv ýË…mb¥7ªÞXm¶VÝhk?M´°Åî$šiß1-RLß5lÔ +ÛÉ„,m5š}iÞÑîAÙÓæ€ÌÃQÁÆ}žû0·ÖˆÎ¢ZªòlOª·§ñ!/wû*CsK^v›Ïª•7GºD~ض¡è·Ùíö °>«û`€}òò¶=trƒå{4è\u îêé€yÿ`F` +endstream endobj 993 0 obj <> endobj 994 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 995 0 obj <>stream +hÞÔWÛnÛF}çWì#éDë½ð +?9ª¤°CfQhj)±åÅ W±U Ô¿ì,w)‰–u Ð +=pµ<;3gfv8CÑÜ:ÿpGѼµ|Ž"7ô'¨Vf½‹­ó÷QgeˆÀ4 p¢€LŠK‹€L\Ø‹Sk„ !ÅOÖWûúê=òpˆÆçã7oÐmãЇv=o’²Ì«9úXIÑdI*œ_âAת<̘‡FSßCñ–’H{Ùœ*Ùè‰Hf¢Aã"i[Ñ:ñ¯ÖUlù >0ñ±ç#ÌxE»!!®æÔÑì^SÌÜÁKp„ðî%]»!êÈG^ºaÏY™ÃÖ†1ßNZ‰œ‘û§ÇY¢VÔ–b¦(WÏЮìÛvc@Mº0 ¦Ÿ„zΈòˆ¨?‘Za×¾mj˜-S‰î ÄÌFJkTÔ•‘!èL”OóåTe²ë¾ŒØŸˆF‘3 +AG4b„ꥇ_™‹úçéÿúÿ¾þ«bÇLUäH;ÎúØQOÇîŸ5õ²(Ð$ŸC†kҡس[¸‚­hœ÷qds‡M1ÃÅpÍu +Xw|¨ë²ÇL_öG¾¾\jqäæÆS¢I¦‹¤9C™ãÛu#òy5µ§J몕[9NÔ%Õ~2·rV/ +2}êçîÜ{ëh|¶ƒû²gŒÉ+©`ŒnrQÉ—uR_Z­¡w²Ñhµ¯ žÃ.o­d‘´€¹Ï“ɲ)Õ–v2;¥ßô¡OI©:/¹ì:éy¼”wùï☓V‡q}Ćö<ÔòFȤ¸NVèÃökþžI—ÒÀ5öÁeýxLÅÒI +ߥ!8¾‡úÉèçwµ¼ªÒ£þ< öקH;ÛÊ`\“úi\¯f¯UË@ÀpíqˆÚÒ +áÌójzRl>gY+äQÆa;Œ·ÐG €ÈœhÃÉHÆeCîPƒÜ&š«jzÚõ ‡åˆc…{P’f5@:ÓLãæëZîbF¡…$ºió”SË~.Tk¶©øs°eÊ»ý)ÔÈà 鰢}ŸºÕuD«Ú£imÌw3\üë*W‹Sœ:u.özµ /Ë?ˆº¾GíšÃzꨦm™ØoSIÖ•#ê’×ÍMÒþ6ív (·°Ý|Z–o©3<®N* p`ßaMuøÕߣé ãÙ~¤ájŽé¦šn­ +u=ì‡jÚ(u_ìêà"Ëáó{84‚{=4ÜÍpnÙŒHJ…)É×’” ¾] B¦oë¼=…N=ÓUåu¼úÓ¢Y"”5u‰äbžÑE0‡Æo“bDE—_®&]fôFñuN¾6Átû¨•‰%´"è)—‹¼zEÐå»zî?^´PDÞ¦9ݨòY¯ +âÃHRg5¿e9ä õ`BÁ(†½R”¢iMF0H|w{ ©ì´8#E•©ÿPRÍÐø(—0²,Õ|•Êeƒ¡G]ì¹[FÆ@7 ÆÀ´nüXƒ Y#QtÇ ×6ìg=›CïÚžÓÐq0‹…[.¡‡‚ÄpôªûÜ Ø‰Ô«QÊþ)Q2uÄÖÅÖ%˜/\l,µM¼02sõ_ ùi, +endstream endobj 996 0 obj <> endobj 997 0 obj <>/Border[0 0 0]/Rect[355.5 672.24 381.36 685.74]/Subtype/Link/Type/Annot>> endobj 998 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 999 0 obj <>stream +hÞÔW{oÛ6ÿߟâ`€”ZŒHêÙ`R§)º¥KШ†z™¶ÕÈ’!É­¢hßrLJäGš V ³‹"÷¾ß)Ì'¯n(ÌšAÀ!t#𢸠µL/’ÁÉ +Ét@¸øÅBGr—¸ ’ÅÀE.Äõp/Éq]—CòyðÁº|y>‰`t2zö ®k›F$²ªY.y9ƒ×e+êiš ûäŵ(Ÿ0æƒC |HÎ’#íxs*y+ÖoE:5ŒŠ´iDc'/“ïÅhG@üãqñ"×õ´E#aУ©„y{çè é®ÑÒÞ±²><ô¢Îh©ë5c±:mZ°€„Ö»å$•+jµb¢Ëgd•6 ,CöÆÕÙÜ1ýt©o;”Ç®|‰\‡¡Ϻ®+M1Ye-¼·Ãˆ0K.Q•†?Æ@yØ•Ne,¥W¥Êžw²¿€Æ±íD(#v˜KõÒ;êB÷|úã?'ýÿ2ï_eìxH¨ŒœÛÅŽ³.vÔ×±û¾ªž¼Íg˜¡!æZkSâ[ Ö`#jÛቭO6ã¸)&DiŒÅhÊ)dªœ®ž¶p‚çAì@‰Ûۥͺ°9µ*šMÙ¦kÈË©Í"½g;ŒY üµÒ6ÇŒOo«U í\€„,¾Á04$òµ ]#ï_ŸIÜ衇"Zõ–5‘)ôQ•mA#2)cˆ GïóôÈ€÷}⣉0,7ŸÀíQeÏ^Q‚ø²ksWƒ¾“—J­˜§ãZ- ³~8~…'çhëeZÎVéL_tXL|¾¢®væ[® e”lü©Ey|e>u.ÊÑz˜6àès‡æûûŽR*…J% ÷7*Vêr’0};&q T.dä].^—{6I3‰ìPˆiŽ¾¾L7öhÖ]¨S€æJDî-ÌËÊÕÂÐÖ¬mÆÖØ>U’cÉržÖÇPâiº{g;r'Õ궰.ÆŠ›”™—±Þãdˆ6O!ZÏŸÂé¢{¶]WÅfV•‡æ5m-H¯½ÕÂÃLànk^µ$#E’gÈ«=…]Ï2â¹%ô¬Ti”–&[P0êF]núÒ˜2ëb?ì˜ðnÈv“j¨r‹†Ft7†}üS‘›‘Ž!û7x¯çß÷¦|ØU=São;ìåéX‹¶ÎE#C]-Æ6nëÌpΤZd2%FUQÕoÒæn›¸-³¶‰%O–U›Gè¿ž›»¡‘ËIQŸZÉÑ*¤$ðLÅk'…” +Žó^®ÓŲÐóÜ—wÛ÷3d¡º5<¸é bç{v$’|œˆŠ[…‡ïŸåÔ)lÄÆØZÛ-% šyGact)6¶²TC‘?l +jÅ´¼¢¸M3›Æ8hÝAÝ'/|ÎÛ¹Bñv³‡mˆ—ïµ!,ÖmÝÞ%H¾gyDxŸ4JdÖw¼8„´œôÝÂᘠÞîèܵ•ÌÒˆªmñ}ǾPeœÝ=UÐ1ñ7ZÃÃèΩK8ÛCwIŸr À£0V¦RåCi<î‹?µ×†ß†y9稭f”®=#Óô5U ·y{Ÿö,çi›Âª‘ÂÔ1ðË^©pB©çoÅå²c`®áãéC)éNN¤¨Ñ\dwO· ímlׂ¬ª±ìÚq|Ï,¼ƒ”cK]úá'Ø&nËÜè5=´nY£c§cë(Qò(+¥ò~j ¡•ÅZã߯´#ŸxŒ†fˆ\¦ø¢œ!Ë£ûMhGh-ÚU]=ýÚtèT µf8lÁ  U¨äö´r~6ñ{þ¼4Y:À}ÄC:Úxž6çbš®$6µò>rxÔA8+½»L¤q;¢zrQ¨¼xœÇgV-©–WÓ©æ÷S´H®®¯.n’3™H¿^ývùû“…]TµÈeäJ-ɤ +¨ 0F—” +endstream endobj 1000 0 obj <> endobj 1001 0 obj <> endobj 1002 0 obj <> endobj 1003 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1004 0 obj <>stream +hÞÔWmoÛ6öÑ¿â €´Ä,I½¯],qŠ Y(j°¢Þͦ¶lHr»bÈÚ¿Ü)ɲk§É‡b˜Dô‰|ø ¬÷ËqJ#aUjlÑ3´r›ùV=í·zR1º¯'Ióä³û‰8}‰1׺)fÆx5ªàÎB&-U£”õ‹¼ÆÇhsò©”~@N%Ê®»±@D‘Ýq¨/¹0ClŸèBó|þã?Ÿúÿo¿R윀 ŠobçÈ&vÂ3±û¾TOf3ˆ³)fh€¹VÙ‚yV‰G°T…Ýw|YŸlé Q™fŒg±>NÔÇÉÇ»£½V’DšÃ±È7‡‹‘~0Ç]ß+\:¤”7"õÇFFË"Ë«ÉÐ:8¿Žï®È|XÂÁ1|ÊÒ‹|²è¿, +•¡yš­¡=´_wN§£|¶ šM`hµ«ïÓò|fĘæ7ye0ào ’ü¸¹”>-§¡‡S8¤mn.Úf…¯ôw‚<61oÑPnrÛT2Í?¸ÚHéï\µIk[šQ—†».2ÕèÚ«ª+ ý‹f³Ð+o«¢…F{K³‹Ûx}úq§uíÂa~ÐYªç<Ò-ß®@]¸b3^x5.1%}«ÊTùd¼:ùs_ß âä™öÑEeèÆ ~þ2xƒáDs½s¾š›i[M +a ;:z^º˜¬Es+e‰hWé\áŽ:ÚûX}ß%%ìbyQ^­æªB<Ü©vA'U5ÕÍk¬3Á,Áßû—1)w1¹Kgh^©'‰|—¼Â›.++ +x>ROœ—NVŃۋÛää +ͧ¼hãŽJR ºFÜÒó̲Ëô‹*š ƒ·À÷&Ø·òÕ ™D¥Ëè¹¹ +pyòa€æË-M3º[¶Íܧ’Å|0ÈüºRc5ªq#ŽDðyÉS›ãÁiõM<¥;˜ÆÍ•¬-šþ“˜õy¡ÕPûk†ÒŽá.nâ‹/´ýËÚþbÈû=­}¯#7y+“Ñ%ä>ã•ÁÕY'b\ÐÁÚµ…þ•ªVEŽz¬‹ô¦M?RM,=Ž-ésSN® ËH—ëwY +ñj¦ ^¬ª,7Õz[ð¯{ Â’›XBWØëÊ?¹W@Õ¿Að ‚Ëpš®x[,Xw'ñûËÁÆV.“ëŠû5tÍŠšdùh¶+¨p3ZaÝÜY·.ú#S–Ll‰M‘µ°ñßl¶°j°>SCTG¦Cù©ö`°«òAå"ª[‹VÁ{ÜÍ䵌ÖLM2tt¼²û.–l3¬Ñ\K5Ř^ƒ}xX_󵌦ëtw®ËZ*¤0¨ /l'–é› DØT`;ò 5‡ý¡‰ã3%uVh]Þ–®™ºLml;=ë‹-"ª5I©g]ðÂÞ.æEÔþ퉓vìÔé°Ws¸uj„5¦‘j]ïÖ¾3ŒîŽˆý¹/°Ók=϶¯[ËXUXl T2e;‚9Tt{øP6})aœV)LŠÅÜd®a[ŸÌIûê—Ÿ·q‹kNIš7OŸlOÇsq­M&ƒš˜õnp5ˆO’íuᚨƒƒ?œ•šc•YÂb¢õÒY›dè`á[mò¯æ@é‘ +endstream endobj 1005 0 obj <> endobj 1006 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 532.56 188.94 544.56]/Subtype/Link/Type/Annot>> endobj 1007 0 obj <>/Border[0 0 0]/Rect[150 658.26 257.04 671.76]/Subtype/Link/Type/Annot>> endobj 1008 0 obj <>/Border[0 0 0]/Rect[150 289.26 257.04 302.76]/Subtype/Link/Type/Annot>> endobj 1009 0 obj <>/Border[0 0 0]/Rect[63 658.26 120 671.76]/Subtype/Link/Type/Annot>> endobj 1010 0 obj <>/Border[0 0 0]/Rect[63 289.26 120 302.76]/Subtype/Link/Type/Annot>> endobj 1011 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1012 0 obj <>stream +hÞìW[oÛ6~÷¯ úDµË®èSÖ¤]‡´+5ÃìA•i[ƒ-’œ6öƒö/wIɲcÏ)ºb0°ñ\x®ßWAf£“×—‚ÌšQ¤HÌ$QœÔz4}—N^ "H6 I8üƒ‡Hb–&$VœqI²åˆƒÆø–#ŸqÎÉ>®éÅù+²„¼¹=_¨”ãiïq¦, ïë••˜¬‹–\yqÂ$ÕÎJã\¬*gj`2Ì1©RF1f¯»%û“ˆ4õü|¤¾ä¾†Ä‹ðº¤{>þñ¯‹þw÷bíTÌVŽwµS²«mí¾íUO 2.gС1ôZë Òf°Ñµç«ˆ¥ôΓ +>ê 37†atãK3N,nž6ëΣ8¬ÞÇeÃzå)AW46iî«6ÿLÊjêÉÄ~ó|)é~iÞ–ÐñùÇÕº%í\\n±„n‡A IhSÈ͹zs:þpqŽ»£_?“›,ó`{¼)É« ±òΪ„‘êm1L· 0»KÑ×çïÎǧٮ^bñ>}Õ±þ¦êM›·z©«¶ñ¬Núœ4ZÛÈ}%™J«Ô„õ!ÖÄ“«6P€U¯Íôù“®ŠX¡ˆ³$ aLXÄûm¹UG!9ˆI†[ö;¥ – 1ÉCoÆy­+h;™æü´º÷)BÞ9袓3褋¼š­ó™†Ž‡æ‹!W7x­«]øÂãnC0[R‡¦¾ +Œ­¯˜ 7…Q}ab£ƒ¨yiZÞ(g™´Ú)ƒ{<Â,W 0 bGåÞŒ¤’,ô´„Ì›Ä,ÐßíZaRˆ°À×Ü\\Ó²jÉ% 4wq‚ùzh¢?ßxö~Ê"e‰Ê¾ëÕš½±nnnór*eþΤó霾U2Ì“zà¸ÀíQOxb,—· 2pˆ¦œÏÝÊ=Ô»Êk§ˆ? 8Y­?b£EÔøZ/?Ú4ÚðàóQoÆYvÛg>ï÷…Ç Œ¾Þ4»®>Ãç#:——m tô€ùã…›ïŽ +;ß°|ÌòÅ–gàæÇ8}_Ú¦ô$‡Õ|ï ›£ÞÙC0TA„V­~–…æ±nóÀLLK ÈÈânØÛðÛIÞædZ¯–w³H†–ÓÅéÏçã-ÌQ »5žXì‡|*Û¹Ù«zÑ€¢_‰¬íqéÔ†…ø˜u‘ƒ}€»ÉÀ–Ùü‡8ÞcÇW n–pÝƺg²šµh÷{‚¾¦u™–‰#ʘ[M_vþþ'Jß‚(Å_Ód +ƒ™ô> endobj 1014 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1015 0 obj <>stream +hÞÔWÛnÛF}×W  kk½Ë;á&€c+‰ +'ÆiC­,6i”/-òAýËÎ,—eKv€¢(Jær9;sæv†p18xõ^ÀE5ðlðyNàÍ¡”ƒùàE48x)@@4 8þáM> ðmθÑrÀQ ãîEÉ`È8ç6D׃ÏÆéè%¸,€ãƒã½=xWš"`Q\”ñr™æ0ÎkYÎãDš¿F?¡)»1å2Ëra(˜ð\ˆN¤Q´ºmAº•ê‰Œg²„ã,®*Y™ÑïƒQ4ð,æ{è‰Ç\˜e‡aÌ 8wŸ”›ê%zÊ,gã%‚lõíÂ*çCÀ—NÐúLp¬˜åi§ãªsè1ßøp9‹i%ŒZΚ¤tŒÜdž¡ÅÞh¡2Yh!«¹sášCa‡œÂ×¾ï†Ì1Þ•E#1[%5œ›~À,Cj-•6QäZ?¦@˜SL-Ëó)¨Ùqîfì/d'@áÐâ¢Yº`zÚû÷ßþsÑÿ¯òî‘rgûLPæx›;Ûjs'Ü&wÿ.Ô£,ƒIzêc­Õ¦`®Qa V²4‡¶ÇBãÊ´lÜ”3¦c/êvò-ÕNrGG+Qd5ͲÐkš‹¡ žï3ÛYó +·ìÖSÝa³bõ%“ ó$+ªU)Ï®d¹ˆó kj˜ž15©ì¤È«ú°W÷œ÷d}ü:Õ‹7i>Ýr"úá®\|ó˜\¡Q<&·”uœmFìÛäKY¥Uç‰|Lsu'H«ïkyùó†,j~XüÓwˆßdwìÃ=‘Ûì1ˆ7‹|#µˆà¶‘Ô¦¾êÑN#›FHj…Uær—yŠ›©':Zæ¢Ñ|žÆ0Ye¦ƒ|†L‰ü£›xy©wªÍ´žvÄøH¯Í¤vª»IôÙˆæ¦-°•]¤à,+Láàó5M9iZXÛÆIÍ “ûE+aÜ­ †$Vj°×}λê'd/˾ĉ)Bdö¯P«:Í©JëÔˆ¤¾½” q[g·ÝF¥Š³‘Éy‰ÁxÈã/_#dnØ÷¾£~+ÐÔ¯âK ûî"X*gŒ‘méF±Ö>i^ÃUŠÍ×TÆ ˜ªJ9Ž›’ó U*¿5E¶ßÌ%ƱI6øšËôÚô³ê?  µçóbMÛÏ}Às× +VÍ:F^ø³ev‹9ýê,£= úÊWËSÒ€­öé Ñà"Ý:´e”ßÈÂÆ;îÊòp—ñË’¢—×ó©ñä||4ùp:‚§Õ“}¸"mÓÃçy¼Tt>5wBH犩qÕ?·ˆ«WÃ\–q­5l "i`À«ÑÛÑä(M§tîIk±; 3"|ù°–ét}r‹ßQWaªàY/¿¸KÞbøÕ;¼Óa»„ÛØ_0žCwž=#,æ«lò6°×ëzØù¨ˆiA™6¹Qõ\B–µQêFt@ñgd…bÒ3vc…f1ªèÙBz%+ø‚ ) +Tú±å„mozƒFˆìr™jf„À“UÝ4çpÛ! +Á¼P²S#Å(òCHáGUwîìíuÕ7[WÊ~üq—ªF@¥÷r¯XàôèÓh‚5K¥‡9ß×Jû‹¯¶«ÁŠÅrÕòX©')y#“:-òæèàºÜׇS²ÿº(Ó?Š¿–¨óöê¹ ¶OÆ“Ñq4>{ ¯Ï&ã_ÎÞF¸}tÚ¯ãïCq.Ë:Mþ!†óÑ$ê¨îBðí»Âú1©ÂQ ÀÇ1nŸD¯áéDgø¿K.}j‘âþçðƒ¤L—Fƒ»ÏûŸÇ»üºëþj >\Õj7ð'Ãß ‚ +endstream endobj 1016 0 obj <> endobj 1017 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1018 0 obj <>stream +hÞÔVmÚ8þž_1ªT)¹mŒí¼ko‘(K[ª}¤¨Õå>X` '( ´Uµ?èþå—ÚÝÛýpªb?öÌ<ÏxÆÁÂè¼3X†ï@@CpC +¹4æÆÛØè¼cÀ žŒÅ/>X(„À¡„rˆ×E/„ºˆÅSÃ&”Râ¯ÆæÕàx$„~§vw¹ÅBš›E.Öë4[À0+e>SiýÄPNÊ#œ{`3Â|âKCydo‡)ßÚõHŠ™Ì¡¿E! +þËĆçF¨Ã'ž„;QqCJÝJ‘ÏIà7ë(•p÷h3¡áèETÚæ!Òê#ÀE7lD+>œ7Ìs¥Z%X¶OóÓv&Ôˆ›¥œUHÕ323‹xf½íºÞ”O—õ&^=)ó,›9>WFk¡À "´¿Ã!úÊ7ÕÊl7-ab!a¦¬]u¼MVÃÑé¦*ÃœûJ±âﺧç÷7°(²ì¸fdsʪ¡–O| y>ÿñË·þ·SuvN@˜:9ÚœÓV!««ð¿¥Ú[­`”.°\UÜÃb,°! ™[¶£êmoqA9#š1vfÝ[×½åãMÒ^2qÌ«ÖHäW¦‘~ÇýyËPî(¥´©?–_¶yš•óÄ|¥&£Âãá8îÝôðz‘$Ù«7°¿ß—¹ÝÍe‘¥È¦21+±ÎÚ‚ª&¿<ŽÎ!1•½2^Šâv/Η"[T´}üÛ¿ðº <}èݼ?b…™óM»»ÙË—çú•;3Û­µQÀ‘áZL§År³[Í`)öö©*ÊL¬ñÝütg¡ÇI*ÐÚˆÑn%‡ˆfóÝ­W·'’ÞÚ_}NªÇš¥‚k¢4MH3PÝ9ì>] ˆÊõcqåªðãÑPóMŽ¼RTDÏ!UðïJœŸ=Áò¤(ž {ðº¨O¾NP†¸JÎo:Æz¼0ïTƒ÷êR»#©\ë`ƒ›ËÃ8ˆW¡ôAè ÄÈõݳË3Tzß\õÿ0Õ=a† +endstream endobj 1019 0 obj <> endobj 1020 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1021 0 obj <>stream +hÞÔWMÛ6½ûWð(%µBRI“ͦH‘éÆIP$=(6m«ñJ‰$g³?©—þƾ!)Yq¶(P…SÅ™7oÞ )Áv‹ß¾l×/tÎ ·LYÍrÎ:·Ø.­ž&Øj»’qü0k²Ò2“óŒK¶º^pXɸ³Õz±Ì8ç9[Ý,Þ$Ï.Ÿ°"³ìâÁÅýûìy— +›Ù¤ÝuÕõuÝìØÓfpݶZ»ôçÕw‹ËÕ@G®= ag0ò£ô(J†·”“O)Gﲈޫ~`éRg&yùaSÑ•L· ¬¦±Lš4+’øÚ÷ñ¥n½/É0rQ¤K‘kI7‚‡‡Œ2%Ö?Ç%lum˜Ù×{•›‰ÄE“}ô×6шñas†µRjÃV=~¥Îyü•‰²L—6SI¹”\„Ë‚¥:Ó cãø÷‡ÿüÕÿ¯ñé–r—›LPæø˜»|R¡ˆ*üw¡><ØU½ƒ\ ‰;cÏ®\ïºt™“Þ>¥2ÇC·ÉΊÌH_dýU±£©Ì0²¤*ךÅÆ)BNÁ%Eºú…,~„Íš‘Q­8õ2¼ åûúkðº)e9“·%®ý &"-å¸l,zg(jˆŒ zÉÏþ8óY”öŸø,,ÿŸE©îö Š¤òÌ` pÜĘqqwû{ÝÕèqì¢:ÞUëTr4À÷ìª=uãzŸ’©·Z,P*Úö&½qjn6Øþ) +m#il]5ìØ;6ìül\ûi™…,Òˆþ‘A›…BŽ={Êâo”Å“oÉu¦ÎÝ‹)¶2ÊúYý®K±$”&QÉ-»ü¼ÞWÍα'©,¨×¥Ô1-1}C5°·ÄÌÛ”Ýt§(2§â*¸ðÄÝÔÃöD {ïY7²'§äÖv¡ Fa ê§bê¦scAÞ’™‰82ÍÚÆ´sdÇ» Àx&Ř“`‚©í±Y5::‚ªØP_»ÁäI(µe\Oaëb2RLTF@¯÷®aUÆ– +ÃÑ'tvqv°‡ýHŸRe_°ŸGÆØöÛºsÕàz &n냋áŠLËY´r$NÆ|4^b½ûx$±~ߦ‚ô|ƒ¶c“†Å¦\pr‚2ò¼¥¹¤ƒ+“á%Ú`‡ÎCõ.TÉÁ[ua*#ñ`?^íc4t磩}ËÖ{çiBmõìf_¯÷€¹<‰°ÊYXz +Òƒü‹Î¡È?ëÎmØ6xEêUI7ÑL§¹&ž¹y&. ¯I2ötrjHi›–5í™É‘ ñ¥J Á|èÚ`àSº„êCšf:0Їgž¼ê„»w£ „ž€JÓ^©ßø E­«À ¤FbØ8oX'Õñ¡Šü‹(òXüQ‰1ÔTâŸâmZo$§{o$¾7*Âf¹™+âÎÆV @ÒÎEò¨êC„ô’Ä3•Ä€œ1›^©OµpÚ#rÏÒ9b¬úÝ”isžè¨o£qÔù£¯¢†¹®C ºv}_í¦üÇÖ7Ô%åÎR+Ðr¬sþ"Ân,ºtr•R©Æ¤â)×ôô±ÛzN¦Jx}€Éty É÷åžâO—6ù¶rêûo’W8›ZA Úª¤Ç?J +ÿœ +Ïú7:ŒôLð܈év:»š)™"2{tìÙ£z`{ìÀºÇp“s2îíÉ’ã*pµºwVWc—}\BtÁŒðâ"Kt¾Áù+§¼ ð¤ç/ÞÏmÚYÔ/›zŠRHj,Mê…O÷óÅŨÐدŸwír¯$ÚðpË™6© t*Æðl®gæÄ Ê³*͹ß6îQy|@­ÖgË=ØÒ‰,¿ª«±Ó8Š<¬+î$BêÓš«#šÕÒh™ +›¢&z2 È€>#ãô•ëõ‡¶‰EoCÑ“]ʲ I&ì‰ßéþ«ˆ"#/>TkìS-üun…_Ž•¨`×8Õy­çƒšh$Ò¯¦û;¤ñŸ~kúz³D‡Ïn¤ÂžgA„U—Ÿ×ô!óº@ŠYæÅù¢óVwÙlÂ1ÊïftŽò,Þ–4üÏ`àÌMÀ +='XøU8§òx§4‡2Nd2/ËršÂ÷JfÕs¿ 0Ö±È +endstream endobj 1022 0 obj <> endobj 1023 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1024 0 obj <>stream +hÞÔWÛnÛF}×Wìã©6{áò‚>ÕN\´H"UÚ‡¤(h‰²YK¤KRqýIýËžÙ]R¤¬:Ú („´ÈË™sf†ŠÝ,^~ýƒb7Ý"1,•‹³„ÉÚr±]\¬/¯Slµ](Í$þᢲTäKR³Õ~!aEÈ¿­Ö‹¥R¶zX¼ço^_1+2vùòòÅ ö}©Ld¼¹i‹ý¾ªoØ7u_¶Ûb]F?¯¾…+ã]¡3Ë–J¨Ä²Õ«Ñ¤7®Ž¶j£¥ÒÂð +vØe±Û]ëHå"åwìms諺ìœí׫…s$˜›0¡MžçLÄ™”±O5Ñ"M†çÀ@èxöBÆ=#@¹ƒ%gxg§ÖCÄÚ†‹®gÑ2Axïî7ÝiÞ—Ã*ºæ¼Ž„åáµïÂKíú6¼¤ýU*‹ÔM¢é%ýx¦Ò8Íqþ{ÜÂVÛø'›Ãºg?Fi&/ƒÉ.økêà •rXI‚^ë$°ãÓÂþÁTžGËLÄ<_j©ü­eQ"ÎØpýû—ÿüÕÿ¯ññOªI…¢ÊÉ¡vfd¡ +,ü¼¡~µÛ±·Õ èš¹#2vìmٕЪ!¾}Œ´ÁåF Ê ÚJµÓV‚ó´ûd¾ûd¤³$ÕS¡IGOºI}†C#ÐÔîH Š³«C½î+ýªi÷E?ï8ÇæFæcMÆùxÏ)¡õ¼³lƒ©Ž|wQRØüˆ¹L†€rPÉúÛ’m#£¡H2R»])‹¿¨n#ºgø@!ò„ïqÅ¥è=P/W+í£ÍEžø®C71eê0¡nã:¥ôž«ºgïº(áeP¹€è>pO!‘7I^R{…S»rû€×qÌX=Þ—¿”,@–È”ˆMžù¬…´>é÷X¡ðݵ.N‡éz_žäŠL[ãOK:É¿ˆV¿.–€X'VMãsrUﺵ¯Š¾8 ijs‘ë´¼/N"¶2‹§|ˆ(„#çŒÈíÜ€¶6I€–v(³=áIV‘Řä‘Æÿ÷å3|³ÆQ-̶P:¾c|86œA±í4\båE(Ó 8è ‡`t@ÑÞö%˜Qu¬`» +S©Ù²æú×rÝw jÑ{`U,ŒXJGKa ¬›º/ªš¬êê·CÉêÃþ£¸èºê¦v>œ¥%I^=™éƒpU®SHâ°²XßNÅ—øÚfïät_´ÔTâ?‹ˆÎ±Õ-2rù$/ò¬¥ÐÊžÂ1e{$ÛØK¬o i¯Ö®Ø—Sß|·~¥ðJÎH­¢ zG”á88}=‡TÉÛ¦ÚºÃ9Ièô¨]GèÓ:³¥ƒÖŸá`ŒUåÈÁ±Õ8âhIcFˆÝbÔ4ÐM{èTÄ: +ã„#óÂÚå5HŽ{zÝ“ëC<ÁyÇ°üÀ&¶´½§—CÜâ]Ù F^ß¼öfôŒ¼f`ˆ7rÅhåK‡•o$`Sï©tc52,¤§tKB¶j(á휻“.o¤»oœ ú²e¦vh+Ç¢ª$ØAÄœ‚Ý7m´ôQhS’ +ØWšMvee²c0¬k<>•ŸOVävÊÝ¡\ʆr 5»&-t]¹ ¹ÒÚ§ˆBl‡%Iæü”|Ó¡k’8¬ûÇPä3óÖõ?ãúŸáDò¢Þ°ʾ§q7ÛÍÏÓÔ˜™¿ñÛBO˜êh©I‡z˜§š?`Ï€.ÉM_8žâ!ö1L½¡s‰“Þ—²À¥EèJÒÐywŠß-»‰ĆZå“ZÙÀØ:dN>Q¤f]ØøO›Z m"”> endobj 1026 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1027 0 obj <>stream +hÞÔW[oÛ6~ׯ8Ô +1¼H…=unth‹ Q¼‡¶ª-{Z)äþIû—;$u©/MÃÃ0ˆdñð\>~ç#Éaé]\ÝrX6ž’3 ¡V Ô¹·ð~K½‹KÒ…Ç0üÃ×1M4Ä’Q& }ðz¡,ÄoéÌ (cLBúÝûDÞ¿½„ˆj˜\L^½‚ëÚçšjR-ëìá¡(—ð®lóz‘ÍrÿKú;†’.”¤BGpÊUé›Á¥sÎGßÔ~À•¤@?0ÉV«¯ÙÌç É=ÜTë¶(óÆú~›zJÐXa‰ŠF +¨I’ 5c¡+ÖÖo*­ADÈH;ˆ ø$•p0Ô=&M!ú„EÔeœ5-øÂìîç™y¤Íçî +óLHéÓˆtf:£zögg$Ü“ñ+—J˜œ¹?Åaœàük|E_uåFæëY S?Ö”“¼sÙtñª² † e¡by!TÜC†»ëú7ð$ñMC’‚q÷¯¨"ýóøÇnúÿu>ü4k'cÊÍʱ~íäÀBÞ±ðßMõõj7ÅérûÉØÀMÞäتÒðí›/$~Ìç´oÌ®·ba{K¡ÂôÍ5jŽÂÔ›íã¦6Ö7—/Ù`ó#é;E‰œ¢ `˜8)èL¾UÅVùâûmÞ¾Ï6y=ùz粒Fè$ÈF!Ÿ‰1›¢=š\–éæ1ÿìÿjl9v +eoníz_ÆÌØ úˆ*  .2YaËÏ°k­õKs·SÏ”{ïë¸Ü¹Íê&_®¾ä¨&¨\¨Ë³vm$Z‰F½õ…ê""7÷Êí*æûk×O`#[ôXåàŠY²“L&3`è«ÚÖ½ Íé³øà6#£‘…I7;Ù¹¼¢Á°Ï‰Ø1ûcUÎsDUT׫nÖ«ü)z‹ž"b"èëM¾0^žã…ŒÙAd+ÈËt]WF)B‰Œi7‡øÂìnD0BQmQ•Í^·ìsâ0&úÙ‚">‰xhÑëSµ‹íÒÉ-aNk{3óL]ß¹z~ÍÈíc6C¾?‘ñ¸w“ÏIA—þà÷HɵVr‡»bŒ~ÇbøV1x¢G­v+€WÏC,Hß•¸áAwá ÷­ÊÇõCf¶*K>S4ôNSýx½Â‚[s\ên°~HLF ¡ñÑ]sûô=¤¾2/˜þxÓ• ´¤!^VFñÂnîéýW…¸<Ý@w î‡xR­‡±Ðœ°íØ? ¦ìâ +endstream endobj 1028 0 obj <> endobj 1029 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1030 0 obj <>stream +hÞÔTÍŽÔ0 ¾ç)|l´ª'NÒüaØE V³ˆCétJÅLµ³ðL¼%NÁ‰ B¨;¶ûÙùl‡ ›çí(œ¯ØàÀ(qOK±¹# (‚4(þXPðx£Pi(OB1 +*˶²9*¥ ”ßÄûìÕí`»ÙÞÜÀý )`ÈÎíPN]ß‹þÒ ‡ªnä‡ò%§2s*ƒ:’+ |v…œÁé'ö»Aæ¤ÑdãÀ¶:?Vµ¤ˆ>û »óã¥ë›q¾-Ea#_Ðaᵉ1Ú ”¯ê4z·ú™Ôö?S”2““)¸'Z"°Ó†•T§ÖkźXJ®Æ ÈÜqyo¾ì«¤éìÒìgº$cÖK,²%ìõ4ÔŸ– =KE_Ý8¤f£e“·>òÿ÷¬2Öpž=ûÇúo¥HY³@ŽK¾s¿$ãNM\©D½ÖίÜ[û{c¿Å(ó€6‹¹V4«H‡.X埋úÿ‚_©wÆ#¥Î©µwæ:…´Láß-õÉñ»®åqõi¸%ñ0Ž°kƆwÕ¤yû*µac³Çu3—ÝòzÚ-ÇOÌ´\?úúìû +endstream endobj 1031 0 obj <> endobj 1032 0 obj <> endobj 1033 0 obj <> endobj 1034 0 obj <> endobj 1035 0 obj <> endobj 1036 0 obj <> endobj 1037 0 obj <> endobj 1038 0 obj <> endobj 1039 0 obj <> endobj 1040 0 obj <> endobj 1041 0 obj <> endobj 1042 0 obj <> endobj 1043 0 obj <> endobj 1044 0 obj <> endobj 1045 0 obj <> endobj 1046 0 obj <> endobj 1047 0 obj <> endobj 1048 0 obj <> endobj 1049 0 obj <> endobj 1050 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1051 0 obj <>stream +hÞÔY[sâÊ~çWÌ£”³ÌÎU—GŒñ†ÄÆàÝleó ƒŒ•€ B¬×ùGyÉoL÷ÌHHÂÞåœ:§R§\e!i¦§¿¾|Ý œ¬zï?Ì8Yí{$!‹ˆŠ")ÒÞcïbÞ{Å 'óÇ„Á\xÒ8"¡d” 2ßôH¡LÁ³ù¢×§Œ1IæϽ¿y×£+¢iD†ï‡?ýDî +ŸG4ò¶«"Ùl²|EÆy™É"õÿ>ÿSo4ï"¨‡ Œ-ü¾Äxûê Ó%í$Y(L’Ñ'É ˆi-bÌò `U²1DÈœøó ÄÌŒ Ð@1äÜ·éûé$‡åa,(„3žÖ‡Ïæ ¼pºBTÛª¤gî ‚@:d„ã"óö/3uý’3uÄÞ8SÇêõ3ÁDBËÀ•c¡£@Ê8ì¨Ò–ë û}*2 82ÝÊ,O÷h¯šÊŽŒŠg*åD †J‘Ë"EŸ}®€%¼í,’œö))ŸR2L–iîè3¦Öixº ŠZß:Š®ö_Tâx¶`UÝãe E¸(¾Î +?ÚJ °DH¥÷BFßOI¾JÉ•/4¼Úúð_ x½+\’’|AK|ñmÆpEu m°ú—+Ï°™ Ϙ¬p&#å–,Š4)S’X}`a é´ÉkÒd•õCp¶+¶+Ÿ3 J¨;.@î +rf–­@üîPîA(úé1[§>×°Š:=%Ô­:­Y•Ö¡>ãã>«1íê¼ØEºßm󥦩ŒtCœ®ÄIÇðˆºOe¶Í÷$ËÍ=žá@Ç”G4د$]œp+¦‚ŒùSŠ<%;Ôl™î¨*:.{@«>YÍ ïb§YÓ +L˜ÖÙŠ'yH×[ŸcI{ö¸µæK%MG]˜ÌJ‚ÈÍSØ@Ÿ­&ößaH)Øê•Ùâ°NŠ&jMuØDí9 Q›JŽ¯(Ô|·@-Ãëv ¶ +Ô9ØçŒ ¥¹‹‘™³º9³ÎOS˜#Y‹äÁ±«ùdýέßgiyØ‘$_’á6/‹íº¢ÚXDÍ ×€—ÐÀ(VÑm# %$*,`Q+Q"ã<+³dý;A]Íi«õö!Y x…™éÒcÞA·!1ý|Áàñ:µàú +q…5,ÁÝAÊÑÅaO.`¿x%>%E²(MáiBƒD”¨&R]hï¯t—äF60Ä»¸Ÿ]ŒçÃ?¦³KB®Çº›‰®ßƒmd_5lÒ¼Ä]Йxn< …á:M )Ä^ôInÒd(Ò&4¦Ñk ØJ¼í62|¯€Bu‡e‰ᬠi70×zÃëÑ`:˜ G7£Áì~:jÁŽ;°+' þ*lù +ìšÄEha_f_³%„+ºÑCÈ€c‹l)ô¨ª9Û£Àl¯{ôrüq|9š¢Km b}+Ó|)aé½ 2€€BOƒèG¹'Õ@QwàÂäüñŒ}G»ÓtªKÅq +J|•"ïÅç*0À¿ªâðP¾#70¤¤Å~- qGÞ;`ÕÈ#MÀ`:SÞ† a‰®‹8×ήÒU×ÛªDŽ¦ñÖÉÎÇ-p&öd¼Ù­Ì{ SQùø‹ßÔCDØTÄœªóó]*y’׃ϣvHÈF8„UIS.ª’˜<ƒ“Zm“˜&†Q6ŠWUUkÄ ÓfßàÜÚۯص8spgi×I3Z”æNÝ ª˜u5Ù8Cóå%Y+ëo…þVovâ¥.RÃ[½dnÛñãÅ°UÛ'ÐÂÆH`÷f|¢Îð ‹\œœí”“ ®Üâ¼b»„•ÃÞ‰õ +{x’+ ¶¸I0>Ûy€‰(@`ø"Ž£ãÔTéy7ƒáôöû‘Ö¯KlÉf¶~]ÛÆ Ferû°/mÕÕÞ9H{VŠóR ÓB MæDCç£ ‚6k§Û‹v}ä­>5ê¶Ô5&P hå9ƒÆÏ|„ÓõÓµá±Kmø¦ ©›ÚvƒVDG¾æUõ’üèkr—åÎßh"@ÌÄr6³¥_³ÏÝxòû³ì´ÝGKÜùš™ËÜâhT ã~#Ä€ÚÁ~aLÅùD]^±àítÞÂÃÓokÂ7}ö† 5Ìä]VŒ,ƒÊ„ùá™Ô ~Ð,ʃ-|‡Lõ¡¾Y6øT0f„ F‘MÕø C2YòØzUá1¹¿ ç÷ÓñäÇéø²”Q~Úç{Õ“nH™æ©YA¯Ë6¶©=øðoC>f ™•É¹8öþÙ€É#naBcz6JU¦…²ÉÞƒ¿~fóÁðÏ¿v¯wÒÆN`¬NÁµ¦=¬K2=¬›½;˜©‰€MtÁ5zwÍñ=øk9ÐnßC*‚& +Óz“ÛÉåèjp=ŸÞ_·»wÈÎïÃvÅÓ¢ ê%¸÷®Øî°MQ8Ò•/M¬Ò|ÑTžß±síIÐp¤)„ÞÝôön4n!QF·ºÅªa‡á†‰Íö¦Ù3=w“âä{ÉŠ¼k‹¡Z7¥ €ƒ+*_ž#åÍ~ç-5ú¤à/j1¶E[*6Ó§6ú¡õÝ&†mñ£.¦.ó Ì ¹L3üª¡ú>ÄŒÂ"2ŒÁÅÙ= .·?Óti± +6€9žÌÇ·“Y—ßŋÚðhi]©„k­gÉ&íOÒ’Ìv¶B% ( ”‘´ YMg€„™¹ú)ª†7» ïߎÑï3!jƒ?p…8j) ‡ao4Áç@pQ`žS!kzûŸ|hD +endstream endobj 1052 0 obj <> endobj 1053 0 obj <> endobj 1054 0 obj <> endobj 1055 0 obj <> endobj 1056 0 obj <> endobj 1057 0 obj <> endobj 1058 0 obj <> endobj 1059 0 obj <> endobj 1060 0 obj <> endobj 1061 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1062 0 obj <>stream +hÞÔXÝŽÛ6½÷SðRj× I‘u™¦žÀ‹dŒ=Y,¶{¡±eG…–ÜIûíKô-÷|$%Kž vQÁÄ2%}<ßß9-ÙvòêíB²m3±Ë…cÚY– vª&›É7ËÉ«É$[n&R1ø.ç…cy&¸Pl¹ŸXáBcm¹šL¹"c˧ɿ’w³f¸co^½ùúköá”JÇ]rÜžÊý¾>lÙüÐV§M¹ªÒ/ÿŽ­²°•áYƦ’KkØòÛ`Q÷¶åÅö?NéT*®“vØÝñÜÖ‡ªñÆfˉÑ<²ÜXÆUVãÚ‘%ï›U<·Ý}8Í•ÝGL($™¿ Ÿûˆ>ÃMí:÷ ™RFe"ƲiY:µö>>tZ}Š©ð)¤¯™UôEŠ°h±”ë¼Àûp [§c¸³>¯Zö1Í—IM6q¿ã!n†ÔøX +¶R6õu&c²(Ò©C¬‹©2\–Znƺϗüéþu÷_)wYÎ%eNt¹Ëú*”± +ÿ¿P_ïvì®Þ¢\s*îT¢vW5š3£zû1U«5ï:3öV®|oYpÊsºqnœï³\ã zêr5¡ ;¤Ï‹ª=?²ò°foŽ‡ö”*• +ÀîÆ/{™RŠz*Z{H­î€­ýTF»SP·R¬ˆ–µŠìZž*vnª5£÷“ŸR‘ @¦Ú%œýè}durfûÔ%çT&M€kž j2d‹ì‹è<{¨¶õÁ{[á¯ôQÞÔ»Š=Õí'¿WÌ•‰¹Ò<7f`2'“‚¬Á¹ÍÓO—?\’‹ç‹Áó]ì+ ­Ç[ ^:¾!ÆÆg‡õ•mžmc}ªWä•dÙ¸¥Éuس«J»F©uŽpõ€äÍpU/ôº3ã×ìes&Ù€¾5-g£@`ÔCúØ»˜1ó&‹ŸmùÙ?½\ªðxA5ä§cº ×3¸ƒ¦|ÐŇ–íªÔ&!nß'aŽá$Œ4‡ +šªêfþnöU„cƒýŒÛž¢Ñ°! ÉÆ´^8=¨Žäûtœàa~¤Ó8ÈÝìÄÒÄy%CÏoÏûêÐ6±þ"A•e&B¹”õæFŒµõcµª7u}(÷#Ú¡·IôÚ)u×gQš©0Ò©°Y +ò$Ù¤ÎѨDÖÙêT…»8Iàÿ¶¢²² |¥¨^ W¹Œ¨ j«gfuF¬êœ›Ü`<3×TÎtxI“ÊŠ¡ê˜/g£Pà”v-ÞÓXÔŒM[¶…Ù3$ËKL~):wé¸{TM3À Ÿ/Z#ð—~\šHpïoçËÅoö_ …0\ÐöGÔä +ü·x,WÒb! qÛkÈCʵÜ?¬†PCb[Dï-ýLÑ’ûÅìýüvñáõ›ùíÛ‘oùx4ª«0õ%÷^Y˜Q:œÐÌGÔ›ós§Ó`ï©S˜=§NÐhˆõC7ôÃã„œ‚côi®Œ“£\}œÝ-æßÝ~y {?ÒAFéºfòÃ{Ÿ'c +‚Kƒ¿~9\+Æpç¯ÇœÀÝï–Vº6PWmÐÌ•íð²»ónо(Zj‡v¯AFžÕ€ßÝ¿›ýâ,zù£g‡œ½­t†O%D¸tŒ!ÖT %íâã‹]’.ºtQÿ‘_og·³»×W,åxQ<A{î½òp ’`L¼'{EðŠSkÿ³ÔTBâ4ÆQÒõ:ë,B²û_¬ FÖAr,Ò_èçµð[ÖlZ?fuwŒ(¾tç? !MI +endstream endobj 1063 0 obj <> endobj 1064 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1065 0 obj <>stream +hÞÔWÛnã6}÷WÌ#Õ…ÞDJÛlR´Ø.‚Dmœ>81í¨µ¥­$o6ý£þegHI¶•M‘¢(ŠÂ€%ó2$Ï9s†–°™}s#aÓά'20™- ñ³õìëbvv)AB±žI?ø™ãyN .»™À(\l+îgs.„ÐP<ÎìýÅ%¤<ƒó³ó7oàªIdÆ3VošånWVø¶ê|³^Þûäçâ;\JÇ¥R®5Ì%—6…â]ŒhÆØòû§&™KÅ +1\×û®¬|‚]3«¸³x&ËS \é<Ï›Œb…Ó…‡N<3Wæ¤!¡:tâ‘G@òCØi²áô´1¥†-ª´ßâ²í ™[îØWKzS¬ó«ø%=sV%ƒŽ–êü"í£àW°E˜D[Õ¾…ªîðà¿íËÆò¢USöiÇ°äcVŠl<ó‚-›Í~ç«®M¤AÜyo =z˜Ñš«ƒy:šÉnžªnù9àT*ŽÌyn£¡Ñ ‚•"Ê:¸:BÓÄ+«ËÒ·ì69]ï l¥Úpkû8óÀÔù¾ipßï…ûݪäEÞRáFÒäèHyàÚw{T˜Bý“ƒæ,r¸%tK-ûdn°—zº#eš;q6*¢çŒ‹‘cQX`:_AW %ÆÂÎü8Ö¸QÕo4ê)Ÿê)̶<“Ç“Mô3qDs­xfÒiYœÊí £…¤¯RḨWÉÄ ½Ú¼,“g4ß2l…ntŽºÉݸ˜„ó¡Çñ‘bžÞNT£ PƒpÌÀ­‹…+ƒ‹W†–pGQ-Û¢qYDï×À{lã‰"‡ keÜMs¨ì…Ü& 03¡8fz8Î;åÍNy#c°$ƒÄžFÙjû2{|@ùU‰®¢dN=vÕ`Ä‹¦I”À,¬›¿àLƒÑ(wzÖìpÓU¤ÍÒ.c¦7£X2àí–ݾ=Iõ³ËtÜøi“ÒñÕ‰[¹S¹¯ÅýœKkŒÌü >$Þ?õ„ŽOu‰¥é8‚²¦4 +eŸ DŽ®m‚.¡ïf½xÁk±Ë`/i„tÁ$¼þ±¾|6…|ŽãDD~(¿À˜Ô˜‹vÊØ‚½Å;¾F2 G„ìh:Š®öaG&‹DÒ&E€Äùb¶-ØÍG_®K…PÕÕüwb$c>Š,çÚ眨 „Ëo°. *Â%Y…µºOv™Àõ.TYœ}—(ºå<…{ûPB¥ æðW¤/âÿ\¤“*nŽªø±ž†TÇûÑŸ KA +endstream endobj 1066 0 obj <> endobj 1067 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1068 0 obj <>stream +hÞÔWÛnäÆò8_Q ik(vóîÅ>ØZm°ÁÆ6Öcåj¦Gb4C*¼XÞþ‰ý ÿ¥Oõ…œ™ÕÚAÃ0 oͺœ:uº(évqñ·¯$Ýö‹,¦<*()2Š#êôb»ølµ¸x)IÒj»Š"üá ‹<, Êã(Œ­ö‹VÂ(Á½Õz± £(Šiõ¸øN¼¾zIiXÐåÅåÇÓ—] ‹°ímWí÷usK¯šAwÛj­ƒïW‡«ØºJÃ8¦¥ e–Òê…µ˜L¶ålûÛ.XJ&¢†zÓŽCÝèÞ»Z-Ò¤DFY˜fª¸,K +“‚-™Ü2晎¤C•=& Il"ç ‘ÒàP&…OŸ#SÊǨRcÕ,³0_?l*>SbÐ{B5KÑa*ܲ¸EÝúÎ-Röɹƙâ Ù›nåI^âý/q +[]kŸlÆõ@ßyJ¡ÉÞùkç ¥1XE ¶RYîÑN’ÓJþL²,ƒe¬Ë¥Š¤=M)ÈÂLùãÿ~ø×þyO—\»8%W.òµ‹'JÇÂß7ÔOw;zSß‚®9“; cOot¯Ñœ1óí‡@Ÿ©7¡ïL×[¹2½•ASÞ—›˜5Æ(Ž9Ãò,OÂ|Ö›(Ê|¦qi3ýJã]ýXíáÌØ95˜¤eV16˜ä! ËÞR=esŒ[a­­î4mƒX!vtU‚Ãn×2ÅÉ#«— €©ø1Xâ·Ú³3êïü +M—4´Ôëß`B’e˜C'¦ºE¹wo½Ãù#Ë[ŽFey l,BBT¦ +ÿÃ#*‹–àKâ¤âxbñ¶g_c°Á2iü-CÖÕ©Ñ%ûŒ¬Cã­°¾–ªŸ8är‹\–™U>>aôä¬ÿ°"þ¬þõÐE~°tú;ñÏ@& R;Òº‹†9å”àΠºM9¦å!`‰ŒO8º¡·²Ì`±#á”ë‰Øÿ{Ô v”#!2„~1˜Ö¥ÝD¬Ÿ8Ìü¨S1Ä^³¯îÙUqÅê>rAîªúv¯â +Y99;i©¬)?®&C 7t£A957[`Òù¨Òì0*é¬e>ýp¢ÛÎ95)è&P.Ç?ƒ¦´<–b¤}û‡Ø¢\6%gS +ŸŒõ«ƒóû^št3ÔXìÑ¥º§uÛuz=œÏ €/ón>!:íå¢j6;fAS0¹!¦SJyì۰Ǥ uÛXð&”– ûë¤MÓr&í㯒v^zÄ‚$u,°ô-˜¾ŽµÊ°– yS­•àá=Ä›øTém r~‡YÓ‘¯¬Š‡…M2§ºZß‘K÷œ,XŽ¶¼å›Ùg]y[qrÈ’xŠÚ•l·ë-rÓ%>Xsã~Ž½äʇùèD4f¥2ÌÍD€›ªGí0bð] nâÁÅX7å™`óÓR9Mt/ W¯«æv¬n56#¿Ž–ißc5áó÷šb&VH¯¶Ty옜ž]ç&¶%ŠËr&þ¹ $!cÀ¿ÜJh¬„[)†’Œ´i©izÀè%3<ø!`-Ù@£g*ð ÷®ÜØH¢'K¤ò#Y`¥Êm;Çb.9_™’×}?²v°üó4Wù~-‹Ù|‚ùÕ 8Ù„‡Í Jyk 1mðT´±Xg¢wƒ¯=^(OБ§søma9xÛ}‚Ÿuà JžR~ïžOù¢7om´).žØ=D&ÖØÆê Çz¸³cÿPO!lš˜õ†öºï™aÕ0 ¹x21lÀ¤Ò°~æ._ûY(í«†7•\ŒÕ­wã0c@nÆ€Ø> ùá$„‰—»™Oƒe‹U½÷¶9Ó'®”¶]³ƒveå÷ÚÇYd…IbªšJN&šÌh²ƒ‰&3©$6ž#le|JjÍääÏ}†¥3ÅzãÅj¥> ÐI‚MÓ¨®CšOꛫ2Ï}ê]‹ë€þkçà0‚lówLÄ_e/ÌÜKôòÕk¼qõmŸ™e«ÜX Ì0Ûéþ™ÿ +Â! ¼-ÂÐp":6yqA_<è†ßdLvzKÛ(mÛŽØžá½A#˜9 OÜn16 Ä-¶ô¯Áص8ƒ/F~ÿa^ÂÞçÕ^ŸŸ=ž]Hð9<"AÑ”ídÏLãâƒ|¶°tÙŽ»MónÀøkº!£6Êwíß±÷ëæìü)3.ŽÃ xyðìIŸ†íÑ«ƒæùO¸MûÀÃ{¯šz¨«]ýíd¢æÄuÇ“- ´ë滪7(·v6ÜÖ]?„t‰s ~Ý|º•Üºñvê¦t…É9€Ë›{Tp¢oªÑŒ¬ãcÏ01~ÊÚšu¤ž[菉`Ç÷œ¼'ã柙Z§½}Õl®'ðòü +Û5cÔöúØ·wÁp£p=aÙNò?}`(B{J(¶Õþ“¦(ù?šf‰9þ­ŽŠHêD$ým‘Qô‰>n`°Ä£ +endstream endobj 1069 0 obj <> endobj 1070 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1071 0 obj <>stream +hÞÔWmoÓVþž_qè4ɆæöúÚ±cU| ¡lÝØ@­È„ÜäºñšØ•í´0´?Á¿Ø¿ÜsÂ4MÓ@ÂÎñ½ÏyÎÁ£‹ÁÁwg]ԃЧHŽ)‡äKªô %ƒƒgy”dO‘Ä_<¼q$â1E¾RQ²H @–ÌC!¥ô)¹¼qž?£‘Óä`ò转\o,ÆNyQ¥«U^\ÐIÑè*KgÚý5ùª|«j$|Ÿ†žðÂ%O-bÐc{ìו;ô”œ8tZ®›¼Ðµ;N¡QŸB1 +I(?ŽcÁ˜±ŒwÆaó> l}DHø€o>Âå> ± CLøŒ;ïÙ0¥:Õ¨51­r‡¡ˆœWWó”ß”Óè¹}¡œŸ±S¸bä´Ç~jU³E{HÙ§ôFpÕÿð¤ÆEAãþK¼«*í—ùzÖÐ/n4ž£[ȺÕW­2dÆ„Jr¬• +£.ØAp7‘’CÛ¡Ž‡JzöuDn(B‡¨{~ýã??úÿïrîüHxœ9ÙåÎï«Ðk«ðß5õÉrI§ùÊ5ââv=cM§ºÖèMŸëíÚU>„z.ºÆl{+R¦·BPJÏ6I¢,Ä"m§ñKìSEÂ6t#•ÏžÊÎI¢¼h\càÊŸ¦MJI¾“è–ÐQÒ—ÁaWî  T„Ì\B¸ÉomHîê§-äÁÜt^\é‚š…¦¥Î(Ë—š2HËÊÈn*C>MÉo7Úú™;)¶zŸÅSçºÌç§nGd»m5œÂèþQðötS™zFÙÆ­)-HWØ!`0³Ä?lx$n‘m6[–µnë'ø¸Å iÃöÎ&’IÞ1xý~¸YE1EÔ(ÄÊ[áj{SôG‘ É‚ ÛWWérY,K×á劗Gt¹v±Í†Î;wAºº]Ö “昇kZtטƒSÜ›Æu›1rÍ Þ2cX3@®’€ï›˜qV)ï°¬àÒÅ7j X,‚p3ÓeÔaùí>ź0Æ6p2™áÙ<ßv3²CÑÈìÑýf'ÍŠÞ/v&4Íû+bM6Ä£nçå{cÁfÖš®ê[*ÁåíÜHeYnRgF뮹ÎùSJøœ¼~¤¿q¾™ë,/ O¾?žüøöôøÌ”9*¼­A¢éÔn@B¢>i½Ü°{wéÝú³uýnm³w/¹KŽÑ•¹ofñá® ]E‡Ÿ×°sB'ç '¡—Yÿ¤&s|ßÚíïb™^!ÿÁýüUK,ÝPÈ]nè×%R_G“…ÆìÉm¹Ù‚´v¥C-ï2®Ëƒ¹ôÀÎA[=vª°ƒ;y«§«¤­Ñ‚¹©¡OJÐÐ&˜ ÿ«LÝí™ 0K–c +endstream endobj 1072 0 obj <> endobj 1073 0 obj <>/Border[0 0 0]/Rect[272.82 489.24 381.18 502.74]/Subtype/Link/Type/Annot>> endobj 1074 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1075 0 obj <>stream +hÞÔXYoÉ~ç¯(ø©g×lO÷ÜXäÁ:+Ù$ ‰ë °‚`DÉIÈeŽhõ”™¯ú’ÅAà\Ýu|UõUµmfï~}§hÓÏÒˆ²0§8O) +©«fëÙÅböîƒ"E‹õLi +ñ•g²È)‹BjZìg!¤È0Æ»År6—aF´xš}ß_ DætùîòÛoé‡.P¹ÌE»éÊý¾n6tÓ U·.—UðçÅo *²ªE4WR¥ -®¬Äx’­²ÿØs¥e,jÈ¡Ûvê¦ê°ëÅ,‰ x”Ê$%©£¢(HÆ9K2¾¥Zf©ÿ§¥ŽO¾†$2áó„Hap(ãܻϖiímÔ‰³±ì +æ©ÌÄ«’ï´ª•½¡š¯…h™·ìwnQ·ÜºEÚ^C•À×(Õü ”{‰WYœØÿn!«kí—Õ¸èSåR‰Ê‰ì¾¶qʃUÈ`kfí8>ä¿HE0Ïu1ס²· ©L‘¿þüËÿ|éÿ¯ðé‘ceRqäB»hÊBå²ð¿kêûÝŽnë Ò5ãä’±§Ûª¯PœçÛ?áeµ’¾2]meÚÔV +N™èf±Ð– +Y¤¶Òø¦ˆ(Í2ž uÄž&2Ö*sž>u5(`¤BÞß7oîƒïŽ<är½ÂƒCÅüÃR(Æ®!e/¾™™ÿ åà—`§ÝÔa°éW´«ÖO×Íê^¼ªÆ.¾üxÅ—¿ýËíõݽÀV¿Z¼¸+X8} Ù1a 8ðonù7gâI’)XÈ‘‰­ocOõ@—Û²+—àÆ@SEJ³Fg‰ÚKäÌI­œÅ¶¢cYA†ˆ=u–mùƒ{*‰yÙéIœžBfù!AÄ­5Q?Þ]Ü,.?¾¿½³Î:Ó@ÊEr´%ò:ÔåPí«fÄ6Ú½NÒP'¿X…ÞHœÇ¡TxÖ‰gKhÊKL¦PÝSû8ÔmSî¨lV´,z°Æ©X¦©Ó0ùcªÕ:4öÕŠÚf÷ŒŸeEuã€\×f7jê0\#ÜUÝLHú %g¢ ðÓQÿÜ åOµt6½æZ#ö¸âR²¹T> –6hsôvöÌg5u¶ÂØ;tècà#™eÇ(þ'ÌÓó M ~>Šð[ê«ŠÞœ¥aâÒð§i™ƒO +Åæ[¦ÆvO.‡„rø‡Y§ˆ¦Æ%˜Í/`˜ò*vîùð¹AÇu|,ﮀÆ÷e³ËÝ7×hËÊ"™ù‡\ü,n+#÷ÿ®j^ŽALáGY)\ûá; +‰xQ +úáŸ]pù1Çáà,Dæ1ðµkòÉ€deûU$£ìX–>EkWѶ*WØîÅÓ¶^n©Üõ- _îÆ(d8÷b®1Ùdç)™RìÓõíÝÍ~âPlJ÷ÞÛ·¦6Oa’IøƸºùtsu}Ë€}/ÏÀJ_ÒiziŠZË">ƒ‰éÄçžÃ¨¯–¶F»Ššvp©e¦Õ)³x{æ({U­ÁÊ«·´/æ…T<s°3•»zi +4Ý÷ã¾¢•MApú¸}:æû?»ÑÍÑŒý‰™™§‚$w¹adDÌ/h¶ï%}lmËy +@^RÌ £Ÿxeó®·óñ˜­‰ +ñwgQažç1¸‹m288¦²–}‰©TaÍcÐŒ…[XÄÌDD¹çš|æA +ã וðY½smó¦gç!?>‘Á¾f„¿ãíõ'-l~Ðq;ÒÒJS2>j¦q‹²akÑ3ú[†m9ؼ)÷žSf·ƒËÂòÑ{L#áö©Œ#îš>)È £ÐÍ >/,-ÐHþ„å©ß¶ãn™ˆ&te; +ñÜ“‰k!~BŠ)m'•¾Ò®üQ¢^Ö@·‰Êþõ•M½Ì:²É§bÓÓÈGçÈÒ^ö¢køóÖb[3Õ™`'öˆÕŸÍ%¹,Ô‹vž”¹|áÈQ©R½F –˪ï×ãNžNkOS¦Û˜;>Iª4u–Aè;øú ý íÍt7N¯Îj›²?¿œ°5âÜb§îÂŽä¶ç—S׉³sʲç‘Ô¯ôEÌž/Ì÷ðJLj½fö‡éé‚žƒ'Çõ÷ž~Ð õéÔ½D(²T`Ý7ƒô0ê—]¦VÇȱ€p¾°¾v.“Å ¶ò}pôã ©‚oÝ1x8]ïàÞŒ¦=œÚgŽ< °nrû$Dè Qú5Bº{¬–õºv=õ±¬;&¶åé ï{v¦läS†M†–z#虜pXáÑÓC=ôô´­W¢VÈIW +S? Q³µ1Y¹mgø):höù¦¾¹tížZfSZ•CùPöàX¡„ýêWÿ^„l8;µì¥ ™![L^»¶÷¬œžt»Ô÷uW`–]Wíh ˆÅ.àb­èïc;ØazÏÍD±Ê¿3Y,¦³ï¿ñù‘© +endstream endobj 1076 0 obj <> endobj 1077 0 obj <>/Border[0 0 0]/Rect[422.16 379.26 534.48 392.76]/Subtype/Link/Type/Annot>> endobj 1078 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1079 0 obj <>stream +hÞÔWÛnÛF}×WLýÄM¢5wyGš¶¬ôfÍ´QÐ4ui$Ê ©:F‘ê_öÌr)QRÚ Š¢6 ®–»s=sf¤h68ýúFѬ„EnL~’çRU ¦ƒótpúR‘¢t:Pš\üã¡âH&1Ež+]MéjàBŠt}ì¥ù`(]×õ(}¼q.Ç/)1NGOŸÒ«J¨XÆÎzVe«Õ¢œÑ·eSTÓ,/ÄÏéwP嵪éy4TR…¥­D+[ídÿT‰¡ÒÒwC×ëM³(‹Ú§ƒPË(„O¡ B’ÚK’„¤³,ãqؼ„ÏRû{/>à™—pyÄ„!!¼ôãÎ{6LëÎDX³º!1 eä¼¾¿Ëx¥¦¸k´àgâ”BŽ=veUùÜÒíÓU\õBÍ_”j7ñP‘%¸ÿ +KȪÖí›»MÞÐ"Š¥r ++²¶úÖ¥U†Ì˜P¹k­Ã¨ ¶ï&òwRI"†1B µ«Úe@"”¡CÔ=ÿþã??úÿ¾ýʹó"©8sn—;o‹BeQøïšz¶\Òõb¸F n¡Æš®‹º@mzŒ·_…ö°YÜÉ®0mmEÚÔVJ9f)ÆŽYáxù2êƒ3°§¥ç¨„ös<`ÛBxNC£9ofU–ƒ#„·8µj®­ñûl%†¾s¿<  ×±^?’L?«e^åYJçM…æJ[Ã{å,—x†X<Oæ¹Bxüæ½ÀG¶‚:ªç{‡jÊ(Ï–ËÛ,ÚÅÆ;ªZ6£‡E3§JšÇû‚¬Ak§fË‚]ò]“|— s–Åôá|SŸ/šÑ<«êÑí»DúKÏMOª¸½íòEGš×iªÛ÷‰L–íxÁ¡€B0b +mÂÿ6t»¡³ÓuN£”-±Ï^åo['žµÈE µa—yô Õü‰°[™?Z¼® ìVY“ÑÐâÅDÐoFRúÄÞ…%|·*ê籡9¸°}+þô”ÅæEþŽÓ]\l¿pÊ×UUäM÷ÌÃœœ8æÒ/he#vècë¬g÷ÌœNœ“Ôè­©\c»¡ã|a›Ï<#í2kŠN` }­"[ÞÕ@™á´œLÊ“‰xÞs;Ø*¯ŠfS•¤¶GÌËœö­}qhÑÄÁöÉ—_õ5´7FߌÙûïß^o&î€^œ`ÕîóÃ]¥Û275îûŠÑµÃ²!2SiÎhY ŠË¼ «"«7Õ–û%ë«‹R.S#A``ˆœ¾ªŒEJIO÷ªaØc–®yÞˆxÚà‚å d¿1Ýô«ÑÛUãèr|v}öÃh|5>»y}=Þ³ <éßK,¯1ëà.Õ r¿*ÊF»ÑÞµ*‡:Á”ŽKÿTuØ©NT3R×÷Íb]¢¦!!‘~ŸyÔ;”•w ´’n ®×;Z—ËG|ä|þҸ»·ÑFY”6¾Ó¸¤­I/&N –åi¦ü;‘Ûz¿_ÜȦ/H¬Àú±l²÷ +¢ƒ±ÏA.ñ%rV``4v²[dÚ°Âqr•/­ÏÏn`­ muÖ è~†EA'-F#4Ì>DOºÖék´ è±’QL +XfehS×Dw¥x>fZœÖÜC[ÚîXè[ýˆµe"ur¤]Cyã4<“:ÛäÛ°ì’É¿ÂÌé§æeVÎ6Ù¬Àl0žFÆ` +óÀåá„:‰{3Í.ÒÒ ˆÖ~C½úÀ⨛¿Ó9@ÛõQC}&åA;r×GÅ›¨^ù·úܽTÊð0ÿS1æÑêMžu=Ý,ÛVúãŒç"Û±"ØoÜ[®û$ÕéÈ·¹í—¡¥-óû(îøjß]Ø|&Yq¨)jÏqüf‘PƒyLûõÙªº1•ù‰±C#ÝÞG¦Ž%ÇÁB£ú“#_—øE–ãÚ“. a«ó«ÖIçYÐR!PÿȨ¿·Ý‰ä¹±ßž&‚Ý@þ!Às¨Æ +endstream endobj 1080 0 obj <> endobj 1081 0 obj <>/Border[0 0 0]/Rect[272.82 435.24 374.52 448.74]/Subtype/Link/Type/Annot>> endobj 1082 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1083 0 obj <>stream +hÞÔXÛŽÛF}×WòÔÜXm6ïLžì{3 'ÌÈÞñ>p(jÄ,E*$•ñ|Òþåžê %jc X,R¼TW:uªšŠ/ÿz§èaX$!¥~FQ–PèS_-6‹×«ÅË·Š­6 ?T–Ê<£4ô¥Ðj·ðaEú®­ÊÅRú¾Òêqñ“x÷æ-Å2£«—W_~Iß÷žÊd&º‡¾ØíêönÚ±ê7EYyÿ\ý K…f©X†!-•TIL«kc1šl«£íôÞR25ìÐmw붴±7«Eåˆ(‘qB2ó<'elIÇ–2MÜ}-ƒhv˜0$¡¾‰˜'DrCN¸e.|ö,œAl},†‘¼e"Sñ~¿.ø,cµ6'Tó1­'caûÖ>Ô—[ûP`Ž¾Šk˜üC)s÷T¥9Þÿ§°ÕwæÎúPŽôÁK3©DeMv½®µ‹!5+ŸÁ‚$uhGÑy&ÿM*Ͻe¬óeà+s“—ÈD¹ãøŸ?úÿk|úɹ S©8s¾Ë]8±PYþ¹®¾jº­@×”Éí)q Ûj¨Pœ!óíW/q±ZKW™¶¶Ò@×VMùŒÜàÁ$MN¤Fó2á(}à+K:>vU;VL"cä 'ZI R™)1>í+oõóQséçG™öå‚1´üGÅ@@”¸ÛWe½©«ÆmEl…º •MUô^Š’*Ú²"ãAIè×ÑäQ2¶)öEÉ8n‹‘k Èþ$2 Í;VêÌ+¡=q_Q±ß7uµ¦±ÓÏ/T®úm±LŒûÝý0²V¦@ ÊPwí@ŽøHaÓ•žÊqò/o‰ûÅC5|ô¨h×´¯ñ\ÝRY5Íà)$¤·dÁ¥£p¨I6üØ¢ægfÙ^y \s¨¾"ßu-ã¦mä2L-Lþä¶c.ƒ¼ñô O‰¦ÁÿDC˜F2æ‡s+ÅGæC+daœèdx4T¥{<ÒŽ—×€ä]Ñ> ;VÒ2‰'eá÷⵿­trÐPXVúª}>>2"GL¡YlÖ\F +O’¤s$ž@p^®ŸÉHœŸò,sžg„™¾G–0#w GV Ex&³¥³´­ +NçGñ¸­Ë-ÍÐñ²9¬mCšEÁ½!OÏi™iöáÍíÝÍß¿›I•Ÿ‚çb/t}Îa’±ÿLÙŒé×ïï^߬®»Ï⹺Tg²„$éÆ€4]Ô… Î`bIqÔ³ Uiê´¯¨íFË,=åÏzVj;äºÚ@…×/hW´¬ ‰xÒÝÐ4ܲ0=³Ì´6LDqhFÂ|Ã].á.g»¿:s3uÕ[Ý'm#d !=ð}'雎Ñä `!(u +…^ñ“^Äo½ðX‹tÄìM¨•‰ï[rý{A¿Ø'ƒU+ãÙo©•Ê{ šö0gs­‚˜5¡‚ºÃ5Ð]Íg@1öq] ÇêÆÖ³á5\OÏS~º“#}Íͯ÷&žDtðùÉŒ&ÝJcMÉè¤))Zö}c8à=QiÞ;')1+Ü1d¡¹·IÅ;º™p ÁÆ· (˜ä„‘Yö'áxÁ£QŽfò#N”ì@ö;4kØD6y.<ø‘‹§t^sñ S«YœTr¡e¹-X]Ö#@7Dåø†ÊP/5‰ ùT¤û¹lcŸÙ{>§¹}êj uêí ÒWãÁ$;6[ÓáÙ’«g-ËŸ•ùåÙÖ*Õ$ª,«aØi^tS\Èã–n9ú #X€á?IüÝÂ6»© ã1±yD§Óg5;¼6W{Ýöf­a6ÛQîú˜²€X¨õw…ÌMbóèa9þ£{¢¾k—Ç)l†ÂCcŒU–¡ .*÷žSô;«U`^ʹkêO|‚øTí&àð͸%5ž§Âl'%¶ü9Àç×x¾ÁGT_"ðØ_ÉqT rW±™ ¦ü©AÀ8x>ºdLC9Ò(=íÔ½9NÓ¥0yœŒâv¥Ë{¿äâÞÏŒpnŠúlð—araPw³þ|ïWš™*¶Ã¾±sÿ˜Sìgª¶saO}úQñ¾õt€äèîƤ£ƒŸÏÁZzLÐñ³‰xóþê4ëÕw—1˜TÊ^Êeƒý™‹ÅŒw»è<ÿâðw… Ê3hZË +endstream endobj 1084 0 obj <> endobj 1085 0 obj <>/Border[0 0 0]/Rect[243.36 196.26 310.5 209.76]/Subtype/Link/Type/Annot>> endobj 1086 0 obj <> endobj 1087 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1088 0 obj <>stream +hÞÔXÛ’ÛÆ}çWLôÄËYÌ ®Vù!Z­l%Šâ’è$.3åÂ’Ã]D À@ïnRþŠä'ò—9=3,WñK*©$€¦/§»O÷Œ`·‹Ë¯? +vÛ.bÅ’ ea3°F/v‹W«ÅåÁ[íB²qi³”%*àd«ý"€„x¶Ú,–<ÅV÷‹¼w×oXÄSvuyõÅìÛÆ)O½ú¶É÷û¢ºeo«N7»|£ý¿¬~ UʪŠ¸Rl)¸ˆ#¶zm%†ƒl1ÊþSã/…ä¡W@ûP»¢Ò­v½ZÄ’'1|Šy3.U–eŒ‡)É2Þ‡ÍKøÌe8y Hèe^ÂåÌÀ1¼ ÓÞ{2LÊÞD9ó¶cþ2æ‰÷Ýa›Óô:½µ7¬ kæU><÷ÙïÝGÍæÎ}$í5\U±¤B؇ +’0É°þ[ÜBVSÛ7Ûã¦cô“” O;‘­ÓWWN"c  +k)ã¤; çüYæ/S@-e ìmÄü˜Çcýõ—_þçŸþÿ +~RìTÂE.èc§†,. ÿ»¦þ¦,Ù‡âéšPrûÉزºÕ¨MEùö“/ê-ï ÓÕV"MmÅ ”Ï°‚é8‰'l£ùXß×"Ñ¥÷å”IÀA4‚Ä´è„DØÛëî4Û?[PÈæ.oü©oˆQŒ0ðP9!ÁP\/?tÞ´¬¨XΈ‘ª|¯YÞâ—¿úëËE8§²¤7BZ#}{,óA¹²Êýn/ü%|ðØ£/2ü¬Ö¦ŒgòÄ-ÙK̬ĽVL½£¿ б…Uì&ßø2Ä‹Om™·wlí9´"zÀEvâ¨A×[¯É•RŸ(å9ÍkŸÝè/"šFp°O„"y‰)¬«Ù¡Ñ>úŒ¢, +qÑUgdÖ6:p4=±H é߃›S`wM½G”:“•‚>`mtGmh4ÒJã5Êq¦%Î4â»B»gÄ×03ñÙV—Åžú‘Q七¸ÏkE­Ó¤¶¹CD™â %öÐæ\¦û×./¯ Ý*¾~È÷‡Mî4&cµ¼8"Éh`N¢rŽ¬àìÎWÔ-Ð,"4ˆ²¬}â÷=*BvyÔP„g”±ö®ÿ‚2Jxäü&·øC‚:‡Ó²¤´Cö&Þ'ÖØÍî‹îÎÀÞ=öcJTw4Ïn›‹¥ÞÝ;L’«›O«Çà +jèc#ôzµ’ö=|‹m§‚+Œ9º¼Å_óð)à?ö¬ªW(R}•[obôê­ý–‰yü©“4¼6ÌkþøqÇ ¤øÔø:ïð4§º¤ûeów#eõk·¸un_ö}³N³é——$ýêNo>±b7"J¦·~à±MÝ4zÓôù‰uXƒ/מYô«¯Øˆ/Ÿ@¬Ÿè;4°t·ö^¬ŒÞ–U5wìi¤ð˜¾¹`HcLy§{%±‚aäû¦ ¢Ä×|½®^¬ý—ýgAßÏå¨ßcS11|b^þL?€¤E_Ím ÆÞ‹/UgpºúæšpþÝ®?®Aí‰Yg„¿×÷ïækÐáKD*ßnY^1½?t¬¤Uz*äY5g½¡!÷ƒ—?ÏHÆ1Œ¡%dÏÔ´P×®Ú¢®Zö<‹ÈT:‚7kBÿd±+æ!£A=´çúତAiô¤³¼ºþúíûë?¯&V ?Ô~?‰*»è·2g>ÀÙênÎ4 =é÷ŸU–d§ßG½:l„fê(·ëCÏóÒu 0~†%çÚE^mÁš!Õø–ím3Ä“ºÚèq^Ø¥öÁ¡‘ÇÙé¡EÆ*yöRwv.ˆh. ì²Œ¬xꆃ=ITÒ7ÙcÛÕûâo¤Vb,cícÕåÔmûκ+zIQø„‰IVäö¥qªë]-n+ø¹e7>º}ê=úKÚÂtu]¶ý€îGÓ‰(’l#j[ƒBìÄb~[ë8û¾o÷a60É L!@‚ŒÉ˶62ÌøR;ô:`_{Å™l‹„Ë6E +obハÌ3¸Ç9I*k‡CM“Žl!ë\Ft³i’ @ +å‚ÄÀ9@Œ{$…®4 c‰’/ì›·zG1BôèѵéÔ#"ïWÁ šýXÞPîQKŸ ±žgèÛÑßEà|']hî¬nX™»¤ìKûßÈÊð_CÀô£2ÆÝ`:ßÑ]êÆC‚¯¨Ì|¨h±ò€š¤9ioÝœ +Œå7ÈñÓÙ1ã2‰¦Ã£PcmÆ1uõs¿ó²öPü×ï?¾ýÃûÀ´”r“7Å¥ã#¯E#…u3‘g¶–¬¼ ÖjÍ^Œµû‚Öb$CE3‡ÈRž€¤BdžnûÐHÆ +¨F´ÿÆT7ð±óéä°8ˆÑ€FÇ –Ck¥êé Ìâ3ç(—¯ß»¼º=æ·{7Œ‡Ò$7d…hCÕü€†fÁô ›Ik©Rx;Ùó8#¿ÇI‰Íö>mOíMnô-Ñ!SãßÙö¡ Ïöú~Yçˆ'{¢S"†ÏIœavÍÙqêüØåM÷ŠLÕÝ´mÒ®)W†V94Q@ìM¸o”~]mÏÊNÇÜ4Fõ'lª'ó¡Ð|.ÑDh?Nºžœš£±¡8“Ù>VeñLŽ%Ý-æÔjÞ\Ó1 +cZþsi££¹²½OcÑNÀè¨ÌvÕƒ8¦Åia.©…nÊã–šîî}!ˆruÕoóÜ6¬GôÑN±‹ÝNmi×ÎÒwØçöá µÚAÑ¡›m2fÏÔo™Z¢iÊ1ÒÑß$óüÇV·{¤©¼â¾Ýiìi%ˆÞœ¡ü£?GQt˜2A§ªLÑ~æyÈLq2Õ2±á§‹Óý%©pëŒ +A8}FI‚&:NØáŸN¢ûÈ éHç3âR:æ˜Û< iÒ<ŒTì@Ì%Dì8ˆ¢7¤ÎlL©R\Ñ)l˜B‚Øl*|3©ÐÙlâ=)¡žÎ²Áó‡$3ͦY·ÇÍF·íîXr‡Ë¿c™ò +endstream endobj 1089 0 obj <> endobj 1090 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1091 0 obj <>stream +hÞÔWÛnÛF}×Wìã²Ö{'÷Ñqœ"E›6{’>0-«‘¨T¤ç“ú—=Ã]J”Ü\š´( +"%rgfÏœsf­Øbröíµb‹vâ ËeÁlᙑl[On&ËÉÙcÅ+o&J3‰?\T‘‹P°ÜH!5+׉(BZüVÎ&S!¥4¬|7yÁ¿¿|Ìœ(ØÅÙŃìù6S…(øf±­Öëe³`Oš®ÞÞT³:ûµü©LLå„1lª„òŽ•bD»­±ÞfS¥…åKÄaW›]·lê¶vYNœ Ø‘Î3¡M [P¤~o^‹Üϱi¡íÑs`B˜þ!ö¼G$ô8†‡¶¶O•i=Ô¨]ª±j;–M½ÈùoæÝiÞÕóxÖt ¼É„ãéµÒKÛÙmzIÇ«T{5^Ó¥â?å6Xÿ·ˆµÝÄ'óݬc?ey!¯SÈ6åÛ4)ZÓc% l­}> míi'ÿ`*„lZë0ÕRÅ[Ç2/> endobj 1093 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1094 0 obj <>stream +hÞäXÛnÜ6}߯à#Õt^EñÑIœ"E›¶š°û ìÊk»Ú@Ò&qÿ¨Ù’º¬|I“´(ŠÂ€%KäðÌÌ™3# ²Y<þî\M»H±<#:K‰â¤)W‹'ùâñsAɯB?p™e.#VqÆ%Éw V×ð,_-–Œs®HþaqA8}N ËÈÓÇO="¯›Dd,£ûMSìvU½!/ê®l®ŠU™üšG©p”aJ‘¥`"5$,êÁ¶mÿÜ$K!™¦Ø!gûCWÕeëæ‹T2›‚O)3)aR9çÓÚòÞy‡ýKð™I}ôB‚ ” .q> ŽÀKõÞ#0){ˆÒDˆEÛ‘d™2Kz·.ðNÒ®\‡RáÕÑ:a†Æe?ÆEÍê:.’áÊ…WU*ñ!ÂC|dµu°ÿ5Ü‚­fÞ¬«Ž¼IlÆ-£É6ž·¯ãa*Ž±–2µ}°µž'ò"œK–„Ú-%áÖ$e)%¤¿þõË¿¾ô¿k|øs§,˜9ÞçN ,‘…ÿ,Ô“í–œU «Er'ÈØ’³²-¡6òí}"<,׬/ÌX[VúÚJARn«B‰ñ‚ãï`yj5³}Áqô’·åÕ‡'åJ?@|ìžÝLRFõBKÚ2”]ˆšbÕ½¦d¨(-)H´b‚€bLˆõ€>;ÉO“ü·ñ0P¤1!ƒ}á…‹’¶t»²îHw]t¤}W®ª« +Në®K²: %ðÙfi4´6 înoZ°CºjWâËÒÔLö˜¹‘¢^“5F¢d(K–…'‡S½màŸã%ˆ<÷Ɇ}¨Ûƒ’pÙ#—ÞÈè{Õ’ý»®Ú×ÅÖ[5yëš)7:"³¶C[®É¾ÞÞÀ¯UIª¶‘(âvÌÊ[°OÉO_ž¿xõòü|:‰Ô v2eˆ…=‘“KhxÄ¥brìKv<êü¦îŠ~KžË“KCÃÀàž+ß5ñ@…»/hÙ–IJ{" +_ÒË$¦æþ²0JCæ£ÁõyIX(‰³x÷¾j!è‡áöo«Œ³Ó7/0öG¡×lJm5ß΃¨9Í0HŒü’C†úqóœÐ÷;¦õÔÜ3’tBÅ@|Ž°fóŠGF·îã,àtó¢}¸†9gæäÅsôÃÜœe™ùJòjàšÒŸ&ïYhvIC“b\øIŽ#(î øÒAL¸‹Eɸ » ï˦…a…ŠÀ¶zá&y¢ßúL¨„ÌNOp~ö‘òþ#G£— 9 +óQ%)+ûJêŸÀ¬`rÚ0Em¬¡æ0 “¯‰€üˆFÀ'p€œ?vŒ3¬Ðn0#Ìd㪑yÈvŠýÜ·¥ß” ƒkhªÛT¿/€«Da‰_6A`—ÒÜUßqlG{M™@ÍôZDêÃî-Œïm‡úb™¢L–ÖöIñS\ÍÅïΡ02ü~å“6=v7k^.Ø> endobj 1096 0 obj <>/Border[0 0 0]/Rect[340.92 255.24 408.3 268.74]/Subtype/Link/Type/Annot>> endobj 1097 0 obj <>/Border[0 0 0]/Rect[414.96 255.24 549 268.74]/Subtype/Link/Type/Annot>> endobj 1098 0 obj <>/Border[0 0 0]/Rect[63 241.26 112.86 255.24]/Subtype/Link/Type/Annot>> endobj 1099 0 obj <>/Border[0 0 0]/Rect[142.86 241.26 230.88 254.76]/Subtype/Link/Type/Annot>> endobj 1100 0 obj <> endobj 1101 0 obj <> endobj 1102 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1103 0 obj <>stream +hÞÔYÛŽÛÈ}Ÿ¯èø‰ÌŽzØݼÂȃ­‘7Nìµ1–«`AK=3ÊJÔ„¤v<ö+²?‘¿Ì©¾¥q¼‚ k¬I‘ÝuëªS§hÁnÎ.¾}'ØMs–*–E9‹ó”©ˆÕúìúìùüìâ…`‚ͯτdþà"òŒ9ËTÄ#ÉæÛ³RxãÙ|y6áQ)6¿?û>x5{Áž³éÅô›oØÛ:9σÝM]n·ëꆽ¬Z]_—Kþeþ¨RVU•bÁEš°ù¥•w²E/ûÏu8’ÇÁrØÕnß®+Ýa³ùYð(åIʸTEQ0ç$Éø–Jž¥þ=œæ2>x˜PH”y Ÿ»ˆ&ÃË8÷î“eRzeâl,›–…“”gÁû»UIw2hõÊÞ°5]‹  +y¸e¯Ý¢zyëI{D_U*é‡öaŠGYœØÿ·Uïì›Õ~Ù²?…YÎE ÈÆéÛUNŽÆÄ*¢`K™f>Úq<>É2Qá$G¬‹‰Œ„½MX˜ò4`Ì_¿üò?_úÿ+¼ûIg§2.èä"vªËBá²ð¿kê³Í†]­o®%w(Œ »ÒFq*Ê·ŸB©ðP¯¸¯LW[™4µ•SŽáFÆÄ1wXžf1Ïz¼‰¢‚<@ÂìS«+dy CvTyP5lö©ÜÞmÌC‡ Ðô˜FâãŒÌlmð„®œðù­fס¢"ƒìuµÙìBã÷=a™eûO¤W¤R³æÖ¯'1ž6¬dËÒØ Aõ§Fuæ*NZ}›ÍÇrŠuú#«-´±ûu{ËZXÒ>ÜiæœI¼3—ÖYœKjA›n訑SÊ´.kúÈ*ZW-ÓŸÂ4h§ÏÙÂDpZš£ â¹þÁÿÜV<„žõ‚KSmæ¿ÐT +ƒ€õ{”ÂeÙ–ð›˜ûEÈþn$Ìëö@³ÛSëæ©Çe4·6w’/.HòôV/dëë>ÖxÚ„QÀ–»ºÖËv€ë–aV.³é7¿c}Šà1eɱaΙ»^/‚'s£¯aÕŽÂÄ“융k´wœ‘”ðXŠÌ¡Ñ}½F.ß`_,ª'‹ð©_y¼ê”ÖºÝ×ÝóògJÌÁAàh“õê][Öís}ƒ²1ç Ëß½üö»gó÷W³Né‰M?£ÿñ‡«Ù»E‘O¨qÚi­KR³«¡húìröÝtöähëW +¿,MTÁ*pV­¼ÌE@¿XÞÉpSÆÒùDOvXäÑÛA·ÁmдDqTÜÒ³$‚9ê„%DWˆÈ ú¦ûöœ½‡B+Š ¯lÖàŠaÁyH8ËÞü¤ëMywÎ^uʪ]„ŸxXâYN&Ó!ÆË }mâ/ƒð nî¡, æ7jR2¶ÀEÓ²Úãsƒä&JféŸc`nÏr‚WÏ>Ì®°ùT[Ȥ/ŸF;,?B)[RŒ¶&F6:°7CpÀnë#\Ñ€Ñ9mÙ² +¯P –•ÕŠ­mø¬ÍäÙ:ý¤pXl#Ùd Ü’ú\†ÆñŒhﮌ1û•îû\I…8tŸ¨ÖÛ¯ +ÙƒþáûY’; +T£]¬+t_š®×m»Ò¹q}»«¢·euÂf:ýôWi÷cPªò‘Ñ6¸DŠÆãM:¢2pïFWšº[ =XokÛöVY…àq1p;ö]Ù i–Ý|ôQÃyœœLúÜEúpö¦óÎæqóPµ¥—-Nudé|ú„x‚IšçBüM’àW\Jã¯MQjR£¨F#F']|.°’Åðl=/“ÆÉA=X¶*!“qtøDgù„ha}²Šr”‡ñ…íìOSF¹/#éË(7e”Û2²±‹y*Žò‘lvEì‹Í–’²¢¨””+%ÊÍFköW£%á/žL«p(™L@„€rT¹Œ'wû‘µÁ8óÃÚa¢P>BvÏ¡Ø’ÜÒÒÚÝ «þµ‹“å´ëÏ— s5óÅÄySo‘ÀÎô3&—eŒ ùÀž|@ÉÞ˜ùAÚ¸Ó÷Šû„â¬G÷ºHI ™9‹AS«²8¡Ràüð~¬¶+ û0Йº3è1Ÿ‚е›N»ˆPcAžS§yÔI|5?¶À4²pÐÔjo)Ò¾¯¢x9q¡F ˜»¸Ô½*«›=‘í+múšÏ1]¿¹Ð‘åG8ÇmQaèɨÿkÊ!ëd+¦­=Û†y°1ã´ì#Q :ÿ-èŽ3]t0«|YpðÓ#j7Ù­N<@3NÆÀØÏD†¾*Q£™hˆ4–¸²JŸ;²x2ƒq«Z ƈ~Â"ß<}°Ã"gT3hîÙ¼²Õ§:R¿øJ6‰xÔ™LvdåhæL—Ë[×-}žÔƒ†ö8jæ¦WÚw«k8ŒðÜò}%˜´ÊCc$;Jfú܆jû‹æL7c74GRP -ú‚œdc§yßY‰¦­´ïŠzãŠÝêZ[²ä8‘ßbé«[ÎD–Qi+7žk+[ÁBà‡ÈòCH“>R=ë•…™Y ¨i‚4jEösEÿ³“gtç‰÷Ç”ÇÄWäòArüB‰aðÙ­2"cTKä»s\‘H¢;B¡b‹ð.“cÔè¾4Øîý0±Z­M +"Sì9Òîœ'GÜå÷£Ûþ3ËqV.éÓ…Ë„Ø‹Ò"›óç¬ãAl ò·®–›ýŠxÒQ¡eÉ1|{õæíìjþá ØÀ·IÕ¢–·šh¶ÿ´’Ž¾¬x"è¶Òz€>‚çÅWR§î«Í¨ú T–JLÏôŒé CT†àe xž&¢§¾ý·G—å,°Ñ¤£l??,³X +b +BÞðoò’° K‘–é Ê†ßrÞÖ»;" hÈ*hz-v§U’P <®%ÅÎÔ˜èKÉ/ø“3œ÷‘ÉW’®’PQ*KÆ¥tôžĺøÒ9ª  é4íGCÏý[CÍeBçwtJ<äÑá°ÐG¥f¿\ꦹÞo8s¡ù—<¢+¾ +endstream endobj 1104 0 obj <> endobj 1105 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1106 0 obj <>stream +hÞÔX]s›F}ׯØGh­ ûËöÍuœN:vâ±I2§XB6 T„’ê'õ_öÞÝIvœL:Žg ‚åîý8çÜ ŒÜO^ürÃÈýf’¢¢”È4!""M1YL~Î&/^1ÂH¶˜0N"øƒKÕ)Q"¢'ÙjI¸–Í&SE‘ ÙçÉmpqþŠÄ4%g/Î~ü‘\5!KiÔ÷M¾Z•Õ=y]µE³ÈgEø{ö+l%ìV1‚LeIL²—Ö¢ìm³Áö‡&œ2NeP‚r]oÛ²*6ÆØy6I8U Ä”Ð8!” ­5¡2E[&:°¹ 1S.G7!%¸@˜›rŸmÒ  Ü”i=:Æyç"‹ù¦%á4¡*x·žçxƃ¶˜ÛRâQUHãÀ-»t‹šÙƒ[Äí1b1„*Ž?³\RRixþ +NÁVSÛ;óí¬%ïC•RÎäÆíWWn3¨ŒIU„¹æ5×øf°£QÛ5ƨ-`´ s€‡·d…®è`‹‹ ©= »ôP*Л¡À¦ºëÍ:ŸAØ£:36Àgê§L  ù5ÇZm‚@h okÒú3å€EcÆ`â(ÃãÓDàƒSЄy>ð'ý¼ŽC#¬öµˆ8³\ð(Üî´3‘ðC{zØí(É 4M%$Tb*”‘»Ë1ïb ûÃS'IÝ`rW´ŸC†R]Õ‘BÆT±žö³çpÿ ì&põˆp7¼âñ&_‚¡6†Rìˆ&¤ÀÒÓ +¥; v¤nMxû&Œ 09z‚a1Eöóý4îvÔk§8á +˜«! +«bv„ñ+~¼²PRV³åvÕË8 R$J%½û{2Šy’ M“ø¢¸É”Û><.ƒðz°™íW¶§®—yeäÍ(éagfR†’ŠM/}Ràd,qßNàD×\}yS(oj·Š”+»íQ%êÂUNâT/qC7ëbV.vGØÁ!}”¦Êyûð=:DzOØ:VÊGX9å0éë£/Fß«;#1ãý†ÿu|äé#|ü2°¢ºæY‘µÕmÉhþ>šš'$”ð;dÜù©œZ»‡­vƒYGaƒ½ÜÃ%Ôüâô·óëQZÄ1TN.Ȧ˜¡`PržÏ° Ÿøc ’¡Çem™yPuÂ%ͼ£ÝŒ»& ³kh†î ´-°Ç«I,tecÝ´ºÃ1„S @ŠŽ[óËöK²®Ýh"lè´¾S‘p¿ 93s†ñ’°†ŒcÕÍ8®áx/Ù ÑÁ´ûˆKï)“ýàdŒodž¿ãÝÙSw—FVçc˜#`¡Ã470V áÜìª6ÿËlše¼“|Øo x‚^G nº J,h&ŸŽ}'D@˜wú¿P¼„峺‚êÍ`ýCÞüÐ¥;éÂäœë±(ÄR8MÌÞä+÷‘¦÷”[ Ÿ:lPÙHÛ¤sÀsü[ßî9£ÓGߎ»%û<ö] ò˜¦ž¸¿m 1ËmñÓXÌMÉe{Œæ.gï²qpØMú–÷´XÓ—§7ÙùõÍÅë³ó‘¥„&Ïkéíûóë‹Ó«‘é+¯l°¯þ#C çN¯¿¾¼º8}“q}Ø;Wýç m·ƒ¶a©Eø)ðÉ~©QvúWWn‡d0±9Ne?Æ?§'Ž¾â29n‰drü¤mþ7î¥Î‚on)×Ms’¦9I|Wflu_•þ`$ŸM! +endstream endobj 1107 0 obj <> endobj 1108 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1109 0 obj <>stream +hÞÔWÛr›V}×WœGh­“s㪢tÒ&™TVÚé¸} 2rèHÈ”TŸÔ¿ìÚç€ÈvïÓéxÆ .û¾Ö^Hv7yöåµdwõÄj‹„™Ä2-X•O6“/V“g/$“lµ™HÅþpIÌÓ„ÅZp¡Øj7°Â…ÁµÕz2åBÍVŸ&7Á«Å ñ„ÍŸÍ?ÿœ½­B™ð$ØßUÙnW”wìeÙäÕ&[ç᫯àJ{WךM%—6b«çÞ¢9Ù–gÛßUáT*n‚vØrhŠ2¯±Åj™YYÆ•NÓ”q“%—›U<¶Ý}$Í•ÜGM¨$ÚÝDΧŠ¤®)ÃM“téSdJu1ª¨1«N-ƒw÷·© Éoý +è˜eÈ£ }ìuûPµþÐ>¤üQȹj«è‡”þb‚K±‰S¼ÿ§°UíýÛúa߆qÂe·&ëÖß¾l¡5®V‚Š­”»j3îä¯L¦i8MPëtª„ô§ -·cÝñþóGÿ¿ÆO?©w:æ’:'ºÞéÓÊv +ÿÝPgÛ-[wט†;”Æš-ó:85ÍÛÇPi\Ìoy‡Ì[±rزà”'èÚØö¨ÆÍeLY +J0¸>–MöK¸úiòlµRþõ”§Öã”NÈDd¹6d‚ð©éí› (¶ÍCl>-ÊÛWÙ1¯~|Y¹€k‚… ?ÇÃë} 4¯ñô‡¬úŒµ”e½?ä®Tê»ÀE$¬w°%8G*… Þd»–èNa±Žük‚^ ~]"§2h¢ZW wF™ÃmB4èrñ•€«|óéU*.C)Ñ›œ8ÀŸ…FpÌ燪ÊËæy^ÖEsrî ÞQ·õvs¤Û‰Jˆ!h¢ï&0 Þ­YVvň¼-þŽÎ)ô¹W³ùüÝr¹x³z¾xsýrõ½OVwM‹Ò¨«¡#zï6i)ŸÕMÖä;¤À6¡Ö ¶=ÆMËØú€Vf¡¦ßGªñž»"AÒólõ!‹ýûçôâ|$Ì„§i?½Ž,Se/ât¾¦:âÔfZi'Žõ#BÃè5Ûß7ž̶W¨è-[£¬ïsv¨ó[¶/·Gü[ç¬(‘«¦‹?u{rœÀ«Ù÷‹å lÝ Yu¾½sVçkòͳ7UÊ™žj®Î‹øÏ/¸b‰> +<‡ºY6qãùÏãÞñ§¸‰éãïŠÒ™¦<ÑR÷Ýž‚n÷‡÷Û¼m‚í&^I{éõ#9Ͷ:Œ]SQӧߤ1ªÈÎü ‚Jc ßhÖêa!°Ô•Ã¡ɹhŽ¨@&ÿx*œ~IºÍ¥¤Z×÷ùºØ@û¾ÌÙ~ã«.±|LÏ€=0Þ@¸Í”&˜cоXûF³m±+³4¸w’ˆ3å&½œë·‹Ù×£̉2”oá <Šúhuó̾],g_.– —‡n›:§Wl_PÇcy~,__óÁHL5hç|Ä< ›àà%WºÔƒD+¬Ðs2¶Ë~)vaŒ’BüÛ +ë*‰­Û3¶ää¸Ú܉£q +üÂÞHqÀÞfql³+¶Û"ÛÝ×ìÛÓzf£‘@—ÊÏdýó;/¢µ“ãe²¤‚uµ/ýEÎ^nرý§¸rð7XM¹ùÇ7 î$8^µ[…ÃyƒRöÇYšŽäÚ:^yÇ6ØØÎoH8Çà›¸ M1Ó|ð§ãEõÍ£dü]ÒÛm~;6{Qå?òr}D—ƒÍÑ-8Ó®UÇûC§`àÁpDº[e`¤EÙT¡GŒÀ€dÜO>àäy–í ¾Úo(ÑÒì¢y\hTwô.’±Ñ^‹Ä^‹ÈV‹Ò"MVåÙ"D‘è^çœû‰3+í@†˜V†ŒJ§ÁácÜûÊÍß­fËÅì1ð¸Ðó€ø@i~ñ¯¯=M-A(Aºt/Œ . =Àêí‘ÆÑ_ +ò4{£½žpÑnÕó’vïévð :XA¸TƉ* 0 ’›c'b  äìÏt ªWCðb¹øæÝâÍ|(¨ð½ÿ`íÛ/˜^Z}iD&¤ >*ñÏ? šÊat 9õ„Bý}åw ¹MGaŽt䟫ÜßÒQ +@Óæ$ûŸRRYé'÷Æ`SaƒŠÔ^ˆ—ò°›“p9:Àd=’0Øþ±‰ROQbVO7­|ú ”›×ú"ŒõÓ1D=½÷û:Jù7Déò@•ñE²-©¡è•í%¾“SØåF +ÕÛäØ¿~ë±2”Ä ¢Ž×W€Ü=Üﱉ!Áˆv(ö‘p«ƒŒìÄä…“U:8}oÿ&ÀSj…î +endstream endobj 1110 0 obj <> endobj 1111 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1112 0 obj <>stream +hÞÔX[sã4~ϯУ ­u±$?–6e–Yv–Ö ÃÜDéšIœ®°”Ä¿ä]|Iº¥0Ë0´3¶lKGçúOaänöòëkFDg†H£ˆÈHkgëÙWåìå%#Œ”ëã$ƒ¸1£iaˆÍ8)·³ ¤ÐL»r9›Ó,Ë)?În’׋K’SCÎ_žù%yÛ¦ÌP“ìîÚj»­›;òªÙÛv]-músù l%üV9‚Ìe*'å…—({ÙlýC›Î§2©A¹Úöuc;'lQΧZMŠæŠP.Š¢ T”å¬s»`3årò\‚„û&÷)œ +¥‰Ö£bœGyT¬º=IçŠêäÝýªÂOövå¤Æ{‘4)Í“0íÛ0©]¾“¸¿g,S…âøÀ˜YÀ+-uëßÂdµ;ÿeuXîÉ÷©6”%6ˆìÂ~»&l‘q®ÊÐל+-åq ÿ ¬€Ý ¸º˜óŒùaNREUBH¼?ÿöŸOýÿ +ï1vBS†‘ËbìDŸ…,dá¿«êÙfC®ê;HWÉ2HÆŽ\ÙÎBm +Ì·_S.à¥]ÑX˜¡¶4wµ¥R´QÇh•VGHã4Cû’åa_µ¶êÒò—1‚°"œ’9§ŒÀƒ„¿t²8Éõ½]ÖëÚvÞ­ Ì-g¸ü&Ù¿·¶#¸³$XW¥pÙu>¾ uC<±Œæl,Eú½?`=ÙÖËvׄU”¼Z“‡”XžÒ9e¼*s˜aò)ð‹“µk6d×|Z­”å¨UÊáJ@عê ª¤×®7E‹è¢f7H]Ù{Û¬l³%³ üõÂã ©šŠª:™¨ªÃ’,z= È¾ºM9K6)O,±ÍÑ['5>v¸©ºî°µ«>ZŸÑL·#Õý=x‡Q]çU“ÐÐUbص\V¹&V¦©2hû³¬èóêÔœ3´Ñ"ØåÉÚµ|LçÜ^§ÎZp´ëƒu_MâRžœ¥ÜÀ¬sœ\$—ar‹¢x'À¯"9„¯ñuã_ƒ¯']qR¹‰ÍוzlÆ”WÞuFã;#ø–Q¹ö‹‘cÕPM—W‹ïÞ-ÞœÿxTN"–Ó8W˜Ô!Wº}µ·[)Y£á,Ù°¤;J‰q(ó(!`FnS¥À(òÄÕà¶Å6•n4£SI3­·Dúß5%æSüÄ”º\úp¨[ÈÈë“g<¨OŸì`g–É>!)"Ôz¬dW—9„£¿H,L²[™¤*¦{6X‘M´§êØVÇ7Ün B«E·"†z +@QìÆ®?¾®l{v~~h[0÷Â6]½˜l‡àT"8«õ” QF"&pl ˆ ˪!·–:ð©à3¤[c0Cí]”--Z '@%Uƒ  ú»«Å›òbñæúU9 ³Åó§|Õ‡™úu$° ­ <¡€é×;úÍÍ,Kî§Ba+Ïq€t°T¸šÄ}„ï5$ÒƦ*éý}‰I…PúSâ[8dw,CBy1sk¼V¡ÅÍ +³6÷ÖÜ$Ía È°b?à …â=àF¯¨¦†çb”Y)>‡Å…,Æ[_í·ûhóTõaBœ(³~†&À8µçxòS:qÿã$ÀAa"ÆÅ}Îà! Ûî½nªPYŽ‡§š,Üç¦èóI’hªÂ,Ó=K£bÏ@°ÄšZäÆëÖ·+Neáná€%¿ŽŠøFm°Q›ž? =+Ø3GÈUy4kTÇëG ?Ëþ2jœûäŒ3h4#î#±i9 q£AÛ4ðž¹èÙ’ ‡èÁ‰Kø¤ ÏIŽÙ˜c²Á-Ɖ‹bž4%&N8’5韇‘ùQT³ö1QÏ`HÈJLu×›ÐA°'2lÙ̵ì9æS{–Jì”çe +gSèy·à ÝÆ.À¦ÚvOð+¼GÌF>—ÙýxÇ+Ͼz½€nqõjq}„c +!cëžrà‰ÀiÂÁ–[Qž­ wsôNjçÕ9þ&ñ[·2~ƒFú=¢ž2oeÉÕ“ŒÅgè¨Oœ “¸Ç>®¯ê„k)þ©Ö¤¦;qñ‹1iˆ§'&ûÅŠ…Ř/LÔ,®ù·x‚oH®ñÎ1ͨHM>A²2IJ|&o` û_Ò†²º¯»ÏAØ£̨¤/Ë^OH> endobj 1114 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1115 0 obj <>stream +hÞÔXÛrÛ6}×Wàl*„H|T»“Žc§ +ÝNÆéCQ63éT}Rÿ²»xµ”d&ÍtšÌˆ”H,vÏîž³0'w‹ç¿¾áä®Y(I7$^¨ˆtI-¶‹_âÅó N8‰· .ˆ ÿáÂÀE! ¤Ë\AâÝÂ+Ìõà·8],™ëº’Ä‹[zy~A|’³çgÏž‘×µÃCÒê®Nv»¼¼#/Ë6«·Iš9Å¿ÁVÒlå3)É’3®|¿0½Þ6lÿY;K.˜Gs°CÖÕ¾ÍˬÑÆÎã…ïE‘b¾"LÈ(ŠóB´¤cS‚ª{A3áMž&‰Ô!æ‘Hãxè…]øè™·>&MKœ¥b½yØ$x'h›mÌ ÉñÑÒa>µ¯½²/Õé½}I˜«Ë}ˆU*_x÷#üxAë_Ã-ت+ód³O[ò‡„ŒÓÌšlì~Ui7ƒÔh¬\[th{Þ<“EÎ2¬£¥p¹¹õ‰£˜¢„t×o¿üç¯þ÷_1w2`3çv¹“}r[…?ÖÕUQu~å`q;Š±!ë¬É 9%ÖÛ'GHø1Û°®3moB÷–NèFÍé^TšQÄ ]Œfe[çÐõñ‡A<æ{¾Áıÿœ¥ïGúãÍC–æ[0 ð·½Ïà8Žî’ÏùÎ éÞátgðÂXF›ÊZW*2ÖÓ}K’:KÈÖ!àS ŠÖ$K £Ñ Ùr»l)ßvÙÖÙÇ}V¦’”ÒÛÓ‹¡Ý™ +ýÓ䨽 I^“Ɔµ!yItL!ß DÜPžëóßoίÎÞNNŽüѽ%R§i_'Àiœcüì&^­ÏW³d € + BÓ&m¶ƒÔ6÷éÏŽ¤…Á@¸,à‚à”;»¼(òd÷Іæã $»<­«’Y7;Y“¨eºÔôV›‹ c¹ìÐ$ソ¥EæHà½íãeâ€>=8i(ÉwzV–‰~gU›wýèÂá0®y”¶U=U¼Iµûa'¬Ën{Ö±–¼¯̉5ã÷eÏÇIuÉê*>¿ºZ!ø«³øz=IwïÒÛ/Ô&ÂyBLaK]Ø +;Ñ%Z@døý€°HÀC?t| †ÒPc NüÈ=ñÝëò¢:­Kv³ÃP¾Eëâ¢C$yCª‡6¯Ê¤0½†€‚pKc·‚^ØuèûŒìh¬ª„Ñ;¹ã÷#»£Û5Ç礀iœ½È¶¶”^U›¬˜Db?iDÕíeZŸÔf +ÂvI¦»-¥da0&Qc^®ÞžO!–C9t5ÈíM–"l³VZð€œ?…͘s(Ûä³~=ŽEI¤Ì,…78NEP.¶ЀÜÒm§tÓ²®Ç ½’‹~ÆfzG2Ì1Î2.Nf/tSíßó©žn¸Šºà|à-¨ÔRѤØãÅΣ½§K»fdzäaZ•0æ¥àË}RÿD6ùv{Ód×eqxçØzçGÚ܃ù9 +»6ïÜXÁŒq·7ìgÖ[×aPXßÆs]öŸÀålš7&žõDÿ`v ¥ò„å!Ù|ØCUMv ˆ|mþ }\×ÎSáê)¢8 50à'|`^àØ&~²Ðû˜’]ÖBßYYÃaÜ?Æé¦|Ò¤H÷E¢‹nZÓ°Fô–¡áé(|ÔÐ@ýl {hàÐàÒëžj“p3êžVÆ-y#.žÁæ¡*7xìB²†ÚCñŠ´x¡v!B%—ÐÚ`ÛºeŒÍ¦!T›¶Òû#ÜûF³‚©«Ã”}€±:\Ý\^NÒ#fƒ†o(vÉïÊ +d¼½O»Ä°¯‰¹€o,æb®æªWóæÀ_Fj®¬š+­æ]C%: ¶´ú‚Œ åþfgV‡[ˆ­AËA!O©¹”_Çõ*~y}J!Æe†üˆ–ƒ&p­å|¦åÜh9×ZÏ’ÌÁ÷I9ô9’]ëçQ7CELj*ꉟ¦¥Ï‚Y—t1•r\ãúxÎíþD„Þ%?)ÓXºÿ‚RýÞö¬0Óê ž>ã£cÿ’P‹]ƒ ÛgÐë‰áñL©ïm &¿]³×¨ÙàÌ–lŒ)χ Åª·*÷`ˆWC«þ1c–@'3¶RQ;¨¤Ár<g ¥ P¬¹‘cLyz +’GS﫶­vúüˆ^ÕDÇœ"'ÕV¯²ÂŒã4lãò²ärݧô1פœèyº¬ÚNEô$í§À‰tXEƒÎ›ËÜA'9\铃ýƒÁ? 7Öö +endstream endobj 1116 0 obj <> endobj 1117 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1118 0 obj <>stream +hÞìX[oÛ6}÷¯à£„N,/")=z¹ Ò®pÕCºÕ–S ¶TØrÓü¤ýË}IÝ;q[Û€¢€¥Häw?çPåävòü—לÜn'ZÃ'šHF6Åd9ù9›<¿ä„“l9á‚0øžš&ÄHF™ ÙzÂÀ +e1<Ë擈2Æ$Éî&7ÁõÅ%Q4!gÏÏž=#¯6!OhÔ·›|½.«[rU5Åf™Ï‹ðÏìWp%+E¥$§\+’;‹qg›÷¶ßnˆ %Ø!³z×”U±µÆ.²‰ÔhÈIS¥ 2MSBãmÙìlÂö%äLEn›¼)ÖEÕe(LP‡,ØœÌw Yå¡d˜x +iÃã06 >²Å^„POfÔ·ÇÈpð¼bFØDÊîH„)\€‰k»¾Ü’ú#t¡ÊWPÀ™cÁ D&F‘™ŽP- ï ²Û RW °ASôÒ¯O½Gì,'ùe¡ÈçˆK×àHö8C~X^Ô‹b5JHvØ7|Þ)úÚ8ñ!e-y‹¤¤‰¯Ž4Öû¼žþq19’ΉW:WAïc[̱lÔÛç­}AåÔ¸lÎüëûªÉ?ÛåY&ÚLRí4 o`ä•fTÚ‘÷¥žÃ´•Ð¨Uêqu_ŒQÞŽ…(vU„¡&žO‚E½{¿*| ºÅ†à:mÓS®„7À˜[íðâ]¬˜W:œ·wá(÷tg-n[ÛS8rHPªÛNÞÖ#ÁǺ'ड|<Öþ'¤÷KËœC0.KÐÂD!#¼þXÌËe ´Ðêæ»uh€!w!ü¬ XÀƒ1Å‘6sWN‡MàÇ´g a<Õl`¿ ò~³d&ø)„CM0Àãºy_7M½&9P©—Î^Äc8tí :8j;¸w]4Á»rS€©Ü³ª2·`äT™ŒwG‚ØEWWŒ# ±©m ‹r¹„°àt±(=!WÀýÔWü8«ÇŠ”øáã#F±s-­+GëÈotü€I=‡zÎÙpnbÖd;Þ¥ÝÉÇñýQ¶WüÁpìSéùÕåå:•Ô¤øK$|P¶:„Ÿç;¹Kí1ßñÃ…†0Ùé!ö·ÚÅRõ×Ç-ÆÇÅaàû\ߎÖàÄâ¼·w°õ`HõGy<ŠÆzп‰Ñ[}œÒŠàLÞçx3 ð«%±SA½#[Ë÷®W¦1=À8^jnºPUÂL+Døä,j´5D(;:ðì *rëu˜š¤2ñÉùCÕˆüGzõöz”0À4²õ`" †HÛ|]ì—Ò ù•ËÇ* +CݶìKôä ¶}›HŠ4‘D—'Ê$T +wÅúOI¥ˆÓRù¤TºïøcR9· +h MP­ÕqB¼ ×Éää>·’nþ8ñRi:©LP|¡Tê^*qÍÙÎz‚©ÂôH²höÐ}·:®™\& Î÷WÍ}¢š©S…S ++œQŒ§†S¤×RNü¶dêàÿK}mðX¸ø)ÉlGŒÔL?£#ÉtßF×£ßF©ªŒ_þÕ“eÕœ®ª=A<©¯ã±IMÀfP×G%ö ëÚGèÒz‘Mþ`¥Î= +endstream endobj 1119 0 obj <> endobj 1120 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1121 0 obj <>stream +hÞìXÛnÛF}×Wì#‰Tkî.wI>ª±]¸pÒ@QIh‰²YH¤!RqýIýËžÙ]Ò¤ä:vÓ¢(PÐò:sæìÌœ¡»žœ|÷^°ëfbK¢”Å©a*b»b²ž|»˜œœ &Øb=’EøÃ"Ò„g)KTÄ#ÉÛI+<Šqm±œLyEŠ-î&ƒË³s¦yÊ^Ÿ¼~õŠ½Û…"åiP_ïòí¶¬®ÙEÕ»u¾,Â_ßÕr®4WŠMF³Å©³÷¶Åƒí»p*$ƒvؼ޷eU4ÖØÙb¢ã ® ãReYÆxœ’%›‘<1Ý}Íe<ºNˆeo"æž‘Ìò1ÜŒÓ.|B&e‡Qj1oZN O‚oW9É -V´fArøÇÞø‡vËÿtk$4bUFÒ‰ð±ˆ$N2¼ÿ‡°µ«ÝÕ~Ù²ŸÂ$å"(¼ÉÆû«+ï [c¹Šˆl)MÒ±LJ;ù;YNSpMe$Ü¡f¡á&`¬[Ÿ¿üëþw÷§´w*á‚v.êöNõY(|þ³Pg› ›—×Hׄ’;HƆ͋¦@q*Ê·Ï¡T¸X¬xW™¾¶ikË §<Ñnð IÌ ÕؼL(ʈ ÞßWmþ[¸øur²XH÷zÆ3ãê”È„6\Åd‚êSÑÛƒ²jÙ¦M°¾»Ìï‹Ý ý¨ªò×ûíi¹¦Ë³]‘Ïó¶¬ßÝm>ŽpLDå:±V¬÷s㜣#EÖ=îòHGÆy«ö[T© î6 -߸¦×Cžúצ{¨ÁªÞ_mŠ±›˜Ka²#7Ô]‚r½¦eߔԂª9òæßþZo;2†h©›'Šg=‘µü)tFÛeÚ-¶Ûë­Ï  +æz¿-ªÖ›ï¡mI(…vˆâÌa'–‰aëFuØu¬;è-‰¯$¯V)WÁûÛbY®Ë¢aíMÁªPx߇ô»½‚ÆÔk‹:¦"ýPtÎ${‹+ì±_M‚D¡ä!~Iì6/wM(bœòq@S)yª]T]Pú!Ï{“ãà §§úàTœéƒÓ:=®7ÇP \ øÝì¡ ‚ÎÑ9GcÎÐí¨LÆÈO³!IÒ“éY*RR¢1²]˜`La©% ð2{N9ëñŸÐáërIÑTbÓÉ‘>ë„›Ô½ˆ{°T=ÐÙºe„&uO»¤H+ѪºF`Ÿ¡Vƒ + +Y@Á^ž»ÇÃË(¥ã~F²;âã÷šj§—”f—†åóftŸ²bÈÝ fogoßÎN/ÎÏgó³Ù|¶¸øaÄ;’6ËïfÞ/09Þ›6o ª(¶%$¨CüìXΖ{tÄœòA€»ñ!¦É"Ôg ÞÔ«b3Šk”ئ—‡xçFQVVàtäNs=è‡Î×åìç³ù¸rwž6­XRäœ]¬²•†¾zÏ[9÷n/²-;ìJ] +Ðη7`Ѓ£"'"Ý œECÁ\U·ÎàTb€Lõ;½×ahŠ«ô¨Ü-‘CqE9 dõÃå82.²ÇújG,¥ÑäÛâ×D¾ØþsEJŸgžá‘DMº"›*.>F^:|(4°§†cjp¹¬ÿtâx>¶ú¼ÙÓRɳÔÙsÕYâ3Ã}}ýe‰¶™|šâ@'äQ«ÃQÚ÷+èD'‡:‘;Ú¬^hÒ mÛqáÀæ5>« p•ÅmíF‘QͦÂ~P×ÖäUݶõ–åØÒz L¹4âÄ’}ø®Ü8ÈûbA%}øåªT¸¬« +¹†ÖÔÖZ¼*ÑmBA!|YßD†> endobj 1123 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1124 0 obj <>stream +hÞÔXÝnÛ6¾÷SðRjcF$EŠÚ׸E†4 ¯]‘îB•eGƒ-’Ü4´·Ü9$%Kvœ¥Ý†m`ý‘çÿ;ßaYŽNßÜ0²¬GJ(Ð$ÔŠˆ€TÙh1úq6:}Í#³ÅˆqÀ\˜Žh¬I$p2[BƒÞÍÒјA Èì~të]L_I5yuúêåKrUùLSí•Ë*Y¯óbI΋&«Išù¿Î~Uª’T2f”)IfgVbØÉf;Ù*Ì8 ½äërÛäEVaÓÙHq)ðIQ©å"ŽcBC²ŒwÆaó|¦<|„àa>‚Ë]@b†˜ÀÇP·Þ£aœ·&réLLê†øcE#ïçÍ<Á;î5ÙÜÞ¯±WøTznÙ[·¨JïÜ"n¯“àªP˜{)àUF1ì¿‚[U•öË|›6ä½iʼ̉¬¾²pÊ 3&TÆšsµÁÃýDþNXûc ¡ŽÇ<`öV_QåÒ^Ÿù×—þ…w˜;Q†™ Ú܉® +™«ÂÖÔÉjE®ó%”k„Åí3(Æš\guØXo_|.àe6§-0¶"n°¥ ¥<Ñm`¡ŠT¯Ó˜ºŒÐËônŠ&ùêÏ~ÎfÜni¬,NñEHEEˆ"ŸwßzyÑUæ+oq?NTÉY¾XLª,¹Nx—W.>y6Ð4c(Âþldv­¯•U +(0já+ d ¬–b»t*ï~UãåÄöºÎÔ±ÛÖÝ™èÍËíçU6TRÎT| »Šæãe[çؼ¢>ÐævÿUmŠOl)^Yï)4îÉŸ|+ô±ìJmRkÒê¤O€)4˜åvßZíŠAHkQ[Û1Êa£F´¶ËP¶¦÷(„EP´Rh*¼›M–æ‹<«Is—‘Âg ´o}ü]j)Æ /ÈجH `è$Î!ýb .pHâÃO“—d“äUí³éС1çTKëUë”ÜÕw'r蜢¸ªsNtΩÎ9)õ¡s8À¦ ü®¶@œ Ÿ÷­³Š†1ßYWA”CËÕq?HÜ)ešid ¡e•ÁtÓ&``^lž±f}!¼híkkIà0bÊÉÜ!/ˈ*íÀÎxgì­hñ~‘ø< 0K†#á¡r]À¬y[ÎíâÕp8ÔnØÍ@&ôÎQGšf:Ñ8›Ô$)ˆ#»Úd•dC:¹œM//'oßM/…^ßOy›èºIš B¾€™Ç+}t†$$ÝBƒwœ§1\2óÍ#¸PW“Ä~h‚ËÀÏ·‰×û&åµé'cÁÛ¡.†˜´ÙVn ïE²‚hÍI +!ûœ‘­©-a–ýp jffs².« Êv•Eš‘¼ÿ­¥­S•½ždýº˜|œ^«÷‘ÊÅÑθ•¥h!4³1Ò7”ïæÕo%(5 ÃæQ‚ºH²¶>±4WÇxéÖK¡U4$…mwIõ‚ á ,Íùa?/¿ú˜g­œ+ÉžÛÊEõàðÝÜ´=0 ¶Þ+ü݈ï:Šâ £”¾€Àx_}ø‘P#8@ ×ð¢ôñ[eã-˜©^æe[_®g¡4‹$i‘$IÒ"I$Á?MÒ;§Ä•¯ƒ;ºö؉¦7c×Îô¹-à ÐŽÕ¨¬F…]*„8V¾ä†EptðÈù‚¸ïå–X!‡ý¨+ŒÊÿ Xs»Ø³ð¦°Sƒ…¯;‡¹,hç@ úÄacù…~aØ¿I²0¡Çv‹¯Òú"Œ{††Ç¬|±Gîú)ŽéŒ©mWÔØ5¤»¹ë²‡Ñý¤tyw|ñXÊ­wà +f¾ÄW«®»'yC¶E“¯ˆÛ2ÈI Ê«ÃÄÄá÷¥K’¢Lôë¬ë”»ÜP×Ã~»œ†Z[ľ÷•´Ôk™÷‡!B5«CõG”Gî«÷î—ó³)Ûƒ²ÚÑ…Ù}²·]Êp#ƒ?.cL[Ÿ#DÂÛ榀@\YíÑøAe±áz¢þ4'˜êeÙø!Ô÷öâ ,<OýT8e||"õ •¤q €þ½ç ?&>èØÚA,ÂM·UUµz õv³)ñÌá¿8¨mK<@8¸A·ÚÄNw ’­‚ +öÜ,vèÉ‘nÛ@y7ڲߣއO·%ž(r-ï¤ iÊrUÃ_Õ™‰y¾,ì@’­)ùÓ‰ÎðTµìÈÁÄê†UìAxÉð?=@“ªr¯ÍóÍ&IóbùĬÇ®kÿ½ÃêõõäãÍÕäÕùå›ÿÌ°ú<›¾mXíèŽÇG‡UÜï¡Å6áHnˆ€rd<2ŠûNL§=!'Óélô‡£þ¯ +endstream endobj 1125 0 obj <> endobj 1126 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1127 0 obj <>stream +hÞÔY]“Û¶}ׯÀ#™X0A€_}ØnìŒ;‰ëñ*õƒÝ®iÙ¡(•¤¼QþQÿeÎ@Š¤¤œ™N§³3%’¸¸çܬ`›ÙëÛ4³X²$H™Jc&VëÙzö×Åìõ[Á[¬g"dþ0ˆ4áYÊð d‹í,À,­, »5†‘[cÞ´ÌŸÇ<ñ~Ù¯rº +½V¯ì+h̼Êç‘çûÙ=T/ŸÜC¡ÁW‡ôE¸~JT’áý¸Ä\õÎÞY–-û‡Ÿ¤\xÚMÙ8{»ÊCjL¬ +vÆIm¥¦™üYæÏSÄ:›‡°—óc{ŒuãíÃÿüÑÿßÉû¯”;™pA™ ºÜɾ +…«ÂÿîRïÊ’},6(ׄŠÛ(Ɔ}Ô8%ÕÛW?”øQ¯x‡L‡­$4ØŠÁ)/Ð Œ“x@5¦.ò2 ½‡cÕæ¿ú‹Í^/¡}=ãYlqJ4Es©h +§¤·?{EÕ²Rû±·~þ)?êú®®óãÃ>_‚œ¾x6¾<À¡ý‡™yÉ{[[  ÀXÃ]DAl'/wÕ8ó0) ùÑ’\¿D /N¢î5·&ï•™è +“DŒì®v‡ÇRM+Š8;3ý• ù'3¬Ú§3Ë÷&–3®¤Lþ¬å%™<´4PiDÆöA¹"öÝÀÚ6¦EÀ ÒØ>-ïÖ°W‡íYE*i8ÞÚ‰y ¤yn4š*yÕúwcó¶0¦Öó“YÚæÛ’ž&Y4\ÀgûïP£Ì5É>©@›<[ÀÐw”2TÎ4N +OE6 Äßúx „‘Š >}ÎØ:ºDضºê|툮¢‘Gv*3=Å ÂÀÌ’!.ã‡Q7&3Çaß·Å®ÊK–×ÖkŸò–ÕªXæÆ.¦€‰ÓÒM¡ˆ8hŠV7ö¥öIÛXF\QÿŠ„ :ùZäl™WìÐLJ°é®¢ÿ¼wEÎd/õ×Ñ,<>™´!a?cdü¨Bëwt¾<´výsˆ‘RêCG/föqT$%I 2ð¸ðŽ_±ç']ëIUA(¤·ù˜|üËeQ˜ÖEÂA±¹ +"d¬¡MË«Õò]‚ÓÒÆјŠÆ¬‹û¨1³/bî‘¡9E¸ÈÑ·”W´ýý©©rÐX<²¸õB2y:o»ÚÕLÿûÐÍ8wSŽ`[du\u\ˆ 4/¦̘ERt©á(>®hwaKвH_ƒBÜX‚ó¾¶Ýêù¼¯TT¥L'Mfà;hÒI¹›ªÎšÔd_]”B½Úèùn='ÎŪð•&#ðŠ6Sófÿ`WKEÕ+møÀp¶Á”}õZÆz¾Ž,_GÞ¥`ä¾4ÛÄ]×ÇÀ4g£ƒ.’î #ÿ-}žD‰¥¢Ìésûˆ:Ü­'‹ RMú¦aoSp™õ¡ÔïSöÕ ´ Ä.Ëc#Ð6jÔ¡løäöõ–¹Ï‹ºa{ì¥u̯>>H·y9øèý´þNÛ5q)þMñ›šIi¯è<á§ß© L©„¸—SK©µ›G9ë¶õ'&vEF´9Cw¶;šT¤X¬åÖ~DÛ7Ëah‹ñE²•ŽÃnà.b¥i)ý¹d·çJs¦üÝi° ùxã:j׸n3ÏûS)`ž=î¹UÆjо¶Ed @^ÓZQ9ö]öz/).yƒ¦ìõÖû‰¤”Wñ楫¥ØvDìšNcB;¦SñZ òųrº3ŠorèV éXÝÕðó jRšV×U„;Ãúâ³Fïó3øhõŠ­ëÝ–!e(Ó ¨{$ÅŒ+Nt7äÁUI8,ä(ƒ¦Í«¥¶¨ˆ-*Ô¨€0Í.rHz£$<œ™ rG{(²lÀTs»CêäÇ»5;Òmâí¤²ü9äméQ?uù­OdžØÙâ{Ù{û@9-élPßæÑÆ-uy³ ad!äB~{C€@„½ó¶y¿²Û±Àˆy0éÕÑ Î\¢Ç¾»Ò†Cá‰ì7ˆT|€ °9±úÖ8œgëqÚÉ +”/[ZçÙ{Ô+]û*!Á0Õ +a +©yI+üQ讶¬îtxÒ²œüyÔí3 +­Ëéá^É]£–u:yô/sø`®b,¤§D´æ ÏfЉ¦RCÙc<ÂjBª)´GßÔŠîôâÒG¼rdt^hm\Ú“ÂÕ6§sÍ n¡L©)+o"%ýga*>ÜÝ¿{ÿã(°hèW7x(PG«Í¾gíK ؃ ¡ƒ|´e +eizu_ár_ÍM_¥H-‚«îó²œ,Žl³¢²k,µ;½ïµó›j5®´ƒìÂÛt×€«Î—O–z$bž AdM¹"1’þÍbö»n&¶ +endstream endobj 1128 0 obj <> endobj 1129 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1130 0 obj <>stream +hÞÔXÝnÛ6¾÷SðRBcV$ERÜçºE‹4 µ[ÑîBµeW-–Ü,O²gØ[î’’%ÇiÓÃ0°‰<{N$MÈôéôÉr¹ YB“ Zí²Í¦(WäeÙä»e6ÏÃ?ÒWp”pGI*3Ê”$é3g1îl³ƒíßvá˜qØ!WÕ¾)ʼ¶ÆféHqªĤ¨T„raŒ!4NЖÎl_B̔ǃ—\ ìK¹Kˆ±i0^ÆI=:Æyë"—ÞŬnH8VTo·‹ ïxÐä wC +¼š  © ü²×~ÑnþÙ/âî1 ¡ +Åñæâ#kû/álí*÷f±Ÿ7ä]¨Ê‚Ü›¬ýyUéƒÊØTE˜kΕn“ÇÇ…ü›0cÂq©6c1w+I¨¨ +i¯¿üçKÿ¿Æ»?±vBS†•‹ÚÚ‰…Ì£ðßuu²^“«bpÕîkr•×9ô¦@¼} ¹€‡ù‚¶é{KsÛ[ +(¥m®ÉÀ{¥U`lH[„aé眄é éHƒri\\_N¦//^¸UžZbʌ쭴Ùò7`•ÔMÖ䛼lHQ“jÛU™­IV.ÈíÙ°^²#Ùníö¬$Ÿr²¯óÙT»œ4ŸáIUÎsR”$úËb`¹ž+½ØÎ'ïgW·95'Ýæ­Ûù]¥n“gì±TÁ¶± \sãι¾+›ìO»'M¹Ûd¨QŽáð«À41VϸûCP@‚Öy¨‚åíyv—ï¦ûæz›ÍÓ?—4‚""¯DÈ’ÏFÁ¢ÚZ·5Sm58SÆÅE#)g½~ +À^À¤‡ÎÃ;òÕŽl¡?†ƒ¸ ’Hkº7?@_«=ºöÚã]2ä¶0Ö¥ØØ€ƒÚ7¨ `A¨Öw_’~ß]oóy±,ò`лbƒçò`Mƒ ñF]#¢Xö¢jñ…¦²õº +™ +nCÆ¡‘d»ÍKòµÈÈ|a0œ!ά¹±·w¤¢IWüÁ¦˜ïªöAJ|Ú +”x›F{gÕ.¦*ñ@`.•€Ì$¢ ätù]ÈP‡@sPZX„€õ \M_@ëËf¨öƒrÅRûžïz‚v*då>A±¯¡%[e Öo‘ø€óɳW“éì"¾M¯%Ô6ðø°„y e(`ˆª~vØÁƒ#q{¯b¾©N²NŸDKß? +KÖY“–ÆÔ¸äö]k¸ÐWË…ÏÆ@¹Ì_{÷™›u}ϯRò`ŒÜ_íÉÊP΄%5ì^6‹åPàrR-m3,C®Û0-´1¾[ì…îÈÚã‰îáø0j%6´-Œ¾~Ò¬¤šß«Ñ}‚=µ64C¥¼®o&TpÅOT} +›\Í&GŒ/zÐd¢ 8¶½ÖªÝ‘ž@ òe.ÜËÉÕäü|vþæÝìê|r98rÖ§àHC8è@|RC'BGTðGËP<¶,ñ ’àîŒÀ@dÔ=fœ¢„ì[ŽHˆý¨ÏÐ ŽÇZšþaÓ?¢_ +\uƒ—¬l¿nºÓeoWÿtCc!ôéÓ3ô•Í›£3±|汚ÉDÎÿ Ùª&“ÿ€j;Y'Ž/ÞtC×΄STcYÆ©i+—29nHkÆÓÒL‰Äõágó (觕˿ò–ìŽyÓÙígÛD|Ußko9è*ñÐîëìž?ñI‹£C¼Œ™¢ð]7¨’c± Õ¢ôÃ8þ´7­‰v0µÏaÈßÁ|ì„ÒMø„4v'÷‡0yá}ó(<ñïá)oœïCàØ”<@£³ß§³Ëôzòzvùâb–Ѩ9E×ÜøÑ…Ü„œ¹´À8ƒœ€Kbªv Ôýøð÷Aú¢äXù˜·,¹9ÝK%/Q_A¬opVÀ1 †2Üݺ©¬‚“à%„~v*tÿùj}É}ö ŽlÚ½4q‘,ª¼'íŠÉC³ûHÆO!eÕl»…‹á ¸BL‘ÂÎ%ÎGcHž§1üN3­Uí­fðuV•6 u¶ªÀœàgž‘µc´5tTƒ®üEm+„2L0¡ê4klå&ÈÖµÚÃ#8¨ûþG€*6y5 +endstream endobj 1131 0 obj <> endobj 1132 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1133 0 obj <>stream +hÞìWm›Fþî_±Y%Þì;ÐoÔq¢Dnrò‘TQÓÄÆ>*¾bœëý¤þËÎìÛwu*UU«Ê’we^ž™yfd=zñúZõnd yDtd‰â¤ÊG«Ñ÷éèÅ+AIW#! ‡," +Y‘PqÆ%IoG¤0®á^ºç\‘ô~ôS0›¾"†Edòbò칪¨ˆXl×Uv{[”kò¦¬ój•-rúsúT)¯Ê0¥ÈX0a I_z‰º“-²¬èXH¦ƒäùv_e¾s¦éÈè<²ÌX¤Šã˜0¡$盕,´íspšI=x˜ $Ê=Ÿ;Db‡CLà¡ŽZ÷Ñ2)[¥ilÌv5¡cËÂàÃÝ2à ê|é7¤À5JÊLÐû¡9T-nšCÒ¯\ðUY‰¢¹iáV¨ÃÞ¿‚-Ȫ¶þÉr¿¨ÉGFLy#r×èÛ–2Ê#ØRÚ°E[ëãHþNDÓqXÇcÉ…ßB-³!ízùòý÷ +ï.1v*d#ÇÛØ©. E“…¯©ÉfCæÅÒ5Ä䦒qGæù.‡âT˜o_©Tp3_²¶2›Ú +¥«- œrJ7 +9Æ1ŽÛÁqjø†sÇ7Ü;¹ÉW÷³ŒJÎTð@…€ôα$DPMöõõ]¶(¨†«rTy6䛵¡2d›[!ª`]8‰nv$+I#Æx1š€¼ „PyA2Ÿ&4ýå R2÷Îò°ÑÓÙÕYßæeMVT†àÓ–Â_E²#ýVŽ×t}•LÞ¼{=P¦‡œ2ƒÊN•Tbœ’ž&@ÓÀ5 ‰“»gÔHXãBÒ›üÈ––ƒg]×=[Tã¸t÷m*vß+0Db,Aá[±‡i{WÛ2Û0ò‰ +- ÁìÉ‚³»ËÅêlË þåd»"µ³V@ⶀ jí¥3+ªd+e³ÙRa`sOQ2ö+oœ“A°{n¸¸`öŽÜA+Úa¾•ëïˆ÷¼ Võ±ñ›%Ÿ¦óBê`šƒðùP V p®AÉË·Édú.|H¯2!QBó´\fÌ…‘ë²Û5 ¹çd[ åA Êo¯’y2›Mgï?Nç³äj †ƒæÈ0÷ !è8 8n¬˜4Ã’ ®Ê:ûÍNSéÇ,¶¾IãjÚX WÓM¦aúc›œÚ‰ã!ïhÂ1ÜÎ>žafÀɱ߃qËíþË&oœµmIaãíW²€Nìë—Žw:C1,ïc|¦ÇÌdoi©ŸÀH¬÷X2»¦“ ­Í(ãMÒ±ó;€Òv Øf(e{Ù·l$}e\»R*€ôê`U ¤î("óûŠJ32F’KFðØ?«É}ÑT\F'4Ôð8dÆ 2j¦‘ü×}¶qðBK‘æ˜-Ü®±¬ÞbÚ­©à@øÒ’Cpt:ÇRB\ŽK%jÝóU[߀âúø¦Üß~W+0 ¨P?ˆ•á9ýp×<´å²ð,ÔV=#Þv2 lk£&…´1 +‡ßËr/Ž·€9ü÷YlâÏâ Òˆ»&¡üî>…7«'Zæíÿg­îˆåA¼9%2äé<}ï×£ÊÖ£xÚ‰Bdàð‘vw¢÷|Ë“UyÏœ‹úœ>œ‘êqT8´>…×8OàíRƒè2?hŸé}csBÝëT^¾ á<`Û¶hÏ´ÅCÛ²¤Ò±dƒÎ%©pÆ°ä$/á6æݶ°~Fâò`<žõ¾mËžcš„WA;¼i?¼Enxd¼„ŒŸ–Ë'ÒYš5 (ò!¼ë¹ß¡@süÃS[%òlæBñAq7>¡7~xÂôQb“³‰Ì¹öö !„2¦.Ž "iƒ‹Â&¬8„MÈ^Øl¶Ð3•ûÖÄÂíÅÍ@ÜÎz"”B©^(Eû9*„í““ÿð?KOêò1k@Iâ¯P’>ä/Ê&ÞªTg4*$ó#Brt„dÐé2I=2cÏ&ìcHÇæBpw=r›^Sý"?Läás ïLô=¾áÿ`O¼žO +endstream endobj 1134 0 obj <> endobj 1135 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1136 0 obj <>stream +hÞÔWÝnÛ6¾÷Sð’Z+F$%QÚ®ÜÔíV¸IਊvªL;Z)ä¥y¤½åÎ!)[rÝÔ: C€P©óûïr²žœ½¼ædÝNbIT0‰‰ H£'«É³lrö‚N²Õ„ À,3Ž6!$x@šMpyÔ„!%°&½÷h˜½‰"r&æmGwr‡BîPøïš:ÝlÈ¢\\‚ÛãÆ–,t«¡6%âí/OHx©—¬/LW[J˜ÚŠRa8«xÀ4— +½ ÐAzýPuùg/ûsr–eÂ~ž²4¶uŠ("Š™ Q֧įßÓ²êÈF{1]ÝÏóÝœo»ë»¼f‚ŸðZ7¨2 À¬’kþ9|[Ôw§nòæ'â,¶ê!B¤6),ˆ‚Øê«°ºé­öôÎZÉDq{<À£ô)ºãó)êÝol7>÷:ãôXgÛåjýô¥Î(ªüàYqÇ¥&t&òNîÈ\¬··ºêÚ±ÿÀ(8x<…E{ð¯iI‘Wä#„óo6>¹ý%)WU£ùʇ,‚gÖɆd‚¡@šhÔ¡èg8-i^t›’oÊu¥—¿„5÷e ©ˆàÌSOMâœFêAC»¥‰É­§€+¶Ø¡¼nr42B + ‘Bl§å&Œv¨ß§¹ØÕò(×1 ÓaŠ¤ &ÂÚåG 9áüкBn±`|è5G6¾!|­Þ`¤ŽÅGà`JŽ’®6%ìƒsÃð…0×[Êv‡@FÆÕ*q"3kžp8‰"÷Œgý `4ò¢!AлàŒÀ6{¼B4&4wùf£7ã)mÄ¡03¡# î¢ê`oÆ´‡4pà Š`n_3ƒ(^MÓù|6¿|;[̧W£˜¦ûr§QÞiS™PE0av8T­rÏxØ8®¦ç¿]¼ ™èÁäÜ0z£z`¸MÌêÀY‚b–¢Ìäe6½HÂÂì„F²¾,vvaþeˆ<- KGˆŽ{D§d{“>µc2”²p_9O­‹Œ¼óxÈê­áÖ¿®6øO“Ú°1t§<ø·ÙÔXû!…ÒÁihÑU>Œ‰ác#pÐy-¹ƒ‘삱‚aã@$Î! П]D»Ä%_Àh>}7[Œ¢%öÑbN6}:–Ä¢ éôù«éùì";“]dž’Áàu’¬Ålz`O8´æ%ÔÍX‘8¤¬Sp‘ð‘n6b _FŒsâã0f¨Ó* ùŽê +LL ‹|ÀQÃÀ×ÙK@;‰Ï­tŒ‡!/Ó y¥H^xõé•yPM´Z_C¯…Vûg ÂX‰Òk]O_Ï.fÙqB9¢aD'R@-ùÑ·x«8…¼|WÿÅV_(3Ü凸y†¼ 3 yî +•á.<„ºpßj›Þ\Ô±ÑfɧG¹kŒãà„¿ãbùgòd¨ð^p¡»“PÌc¾ïÁ|ãhc3¸™ ívâ@œyp»O± ÃæGÛ«7˜}‰èTðu{ŠÞÔKù#›³ƒ^6}6Ÿâ(Å{ÊI¡—‹ì×Ë——Óùx,Û7Ýý”t ·|Åž«z®²=W™ž«· ,ÌÃóßÀíyßt§#F{éË'Ðccî×ÜŽz÷n´éÝ$‡«PràâÂÕ‘qEÚê±€m ¿kÞ…†› fyÔ^£qtBï”ve] y¦8áŠÿ`Ϋ¨ +endstream endobj 1137 0 obj <> endobj 1138 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1139 0 obj <>stream +hÞÔXÛnÛF}×Wì#™Dî…·G×V‚é¶Ú¢Hû@K”Í‚"U’JêOê_öÌî’")5MŠEa@KQäÌì™™3g-ØÃâåë;ÁÚE¤X$L'SkòÅnñÅzñò•`‚­w !Y€?,"‰yš°XE&e£ ]ŒYÛ1ñØûî°ÍèJz]¾µ¬ 5õ*Ÿ‡ž{ì+÷P³ytI»"Ä^U$é‹p7ÜŠuœâýoq [MmÙ7ûÞ.¼Ü™l¿ºr΃U@`KÅ=ÚZÏ3ù;iê/`.e ìeÈüˆGcýúéËþèÿ×øð•r§b.(sAŸ;5T¡pUøï†zU–ì¶x@¹ÆTܾ@1¶ì6os4§¢z{ïK…›ù–÷éz+–¦·"pÊGèFq4¢S—1í2  zwOU—ýæ¯Y¼\¯¥}=åidû”.ÈDq¥Éõ§¢·ßyEÕ±2÷#o÷ámö”7×Çîîm@Mëì·Ëü›¦{¬ò,Ô<@8Ô*5þͼoü¾Š¬[pQ`ãW„AdýTÇýZ΃mZ`ßÞ.HH$¾Ð;Þ ²‹&Ke}Ž¢ßÖÇû2†8™ãO…扃Σ0¾Ý&„î‘ØÀ«ÚóH¤¾‰ åXÿC¡Ky€––ÓJ°Ó:D“ˆtÑO¾ýR©„‰©S#ÎÙæŽ[=÷yÕµÓÁ}; m€: J˜-ëIõž¸²k¸Ñtš‘í´»C¾)vEÞ²î1g•O yGŸ>÷÷˜Põnx< ãœÛ¢Þ Q”$$hAÄé©ó”ãi–UÛ™Éå€ÿÉ~M…íö8u¼Ã1ڦ—2æIŽ¦²Åº@zŒ÷CV4-;`‰ƒç½bÛ7þÑÒâxøî}†¾¦­¼„þ¶h»¬Úäì>ï>øx—¡ ÏŠÁAë‹_^°¢bûbÓÔ•»ÃY?)¼ÞYäœié€~³c0ƒkcŽ=f¾ø +¶ ±/tÃ!3Åy™ù^–ÆxÊ1aÆŒ+c^²š‚ÑdLc!*ä«ÌìÁGÕh·$ùÉHútYÕ§=J jî”G m0A”G£(Â>Š$ÕRÖä È¶¸èó(nQÄg6$qâ’c\\p…ý˜2¶kê=˳Í#«‘ÉÆHh)· ©tŽ{K}nðR…à Bå=Y#6IÝ·fP%¹ÎTCU9j­Q +°Z?ÔUV"Î&ßtEí ¥<µd?t÷¦6Ž>> ïs–ÿzÄ»]ÍêƦ0²)ÔRØãkM{N§Ñ'ö°÷0ŸL)Ê[œÎúÏØýˆÉQ÷ N2C\j?›<ÁÖöÙ õ´zi½Î:ýØ£ÒÓ½¢Ó‡a|sE"=F‹%n¸Šð&8v_Þ±±&1LKss}}l̃›¼j‹îiz™Œ¥{õaê¢'=íöm!)1]‡-ÁHb oÖ”šp¦Åfs‰x¾»½]}½¾Y}}÷fýã{üt\ñ© ÁCßt9 7¶óAÔó ˨êY™ù8ª B 5,H¿ùšžãT©ÇÖÈØŒ>01eø‘Xÿ$T(–ôÂø€L‚ðD'Æ¡ +2ûðN»(ZV¨ÃP6DBj ˜AP2/Œerá¡ÍŽm¾euU¢í‰J¨áD;ñ¢<çÅ·W?®n'Q—joÒÓ¬µÀ':d‰³Y6["ÊpÊNŸ!T%jYý…N¯OjîéÏ4*d©c<ö˜5ÏfÍ.ez¦ÏÐ$Wó™ÃÀ }.Sž(¡.jC' §2Ys)¢s¯ïÉiVi™»&L?YJ´z ©<þ¶´:°{ãªç#“.’þ¤…“u’J:\Oèˆ!ìçWHÿxŒˆžO'"o®- wMŽYYØ{·v/f½rbTÑW߯n¯^¯æÌOÿŽ9ßç{ >ݨ©áY$Hs/¶Øi~’¨ÀËÌz}Ôv¯‚“Yõ-ï8¿,ö±–¢AXÓþ0ͱ¬¥-kok£ŸÝ„«à,<—êÏ}Q–E¶?@Œb´¶½-Á%„)Žœ—†þ(Ãø_cAë™(b¯>²Öìûé\m õ9jKÎÿÃòÂúHȉ‡„ÄCBâa“áˆÝ1ôÒ¦”:bi;ú[t ›ÎsÒ'.•Ú"gÎc¾Ä —'BŸÚÅ)¹ÌWU×  ¦ÆÕ0è&‡€/.!ÞyMÿÏ»±_­0Á"Ƭ +endstream endobj 1140 0 obj <> endobj 1141 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1142 0 obj <>stream +hÞÔXÛnÛF}×Wì#Ù”›½q—|tl¥H‘Í´(œ>ÐÒÊa!RI5Ñ'õ/;³Ë«¤8¢( ˜4¹;{ævÎÐœÜ/žÿtÃÉ}³Ð’–•h"©íb³x‘-ž¿ä„“l³à‚0ø O Mb$£L¬\0°B™‚gÙjQƘ$Ù§Åmðzù’Ä4!—Ï/Ÿ=#oë'4 v÷u^–EuO^U­­7ùʆd?ÃQÒS)IÄ)×1É®¼E5Øæ£íßê0₪ ;äz·o‹Ê6ÎØ2[hAŸ45¡B¦iJ¨JЖóÎ9ì^‚ÏT¨ÙK .î%¸<$uaH ¼TIï=¢‡(âbÞ´$Œ45Á»‡uŽw"híÚ߯iP…4ºe¿t‹êÕ‡n‘ðWÆcpUjðîa +Œ2)ì ·`«Þù7ëýª%¿†&¡<°É¦;oWu‡Af\¨ÆZmú`+uœÈ¿ Oá´BF‚q“PSÒ_Ÿ~ùÏ—þb3ÇúÜÉ¡ +yW…ÿ.Ô‹í–\÷P®‹;äPŒ ¹¶…Þ”Xo…BÂC»¦}cv½e„ë- ”rÊ6)ÆŽ»ƒåÚ(jFºaÌ §Ì;¹µ›O¯óP0q9h[êþêòrßæµÍç$3òÚV†"Å”>r}ý®½yG4‰'š†ä¤3{S’&,ö)`¦àò]vq½¼³?ÇCcª8ï¦KUÓæ­-mÕ’M(±¡¡ŸcèáÎ\í[²Sx|@&MÑE|*Œ3 qÉ>Ø#xÀé·¡ÃèöudŒ<W4±û¢¶kRlÈÁÇ}·'̓]›ƒ €A&¸…õN+‘z»9 +Q=á×voÉnsä¢JŸxÀfØ©>…®°ô¢"íI\ML<¦Ãoó¶}9¬+žºŸ¯lÕíav&ÔéÔBÜ :ꮽ&…<†ø1Œr}^­É*¯È%ûB¸«¶øµ²ˆó¸¸"é;‘C9bˆï®—o²«å››WÙï3„É@=H”r{ÇœR¿¯k¿ÈoŒ$qvX}s¨Úü³[˜e¯„jÔ^ñZ)ÖŒJ×JxŒÃyP4[ê`VדïOc”A#b¿2Õ«…Ûá!é>[Š¥C’cïÊmPíËK³ÌáLzýC‚HNÊò†#ÍDÉé¡ÀëÝþnkÄ}:t_Š ‡éäÆêq 1諘6að>œ|ÆFn’*'» .`v’À?÷{LV3Ç.`dŠ=&•º2t‘ñAnf5ñP'E‹2ÔÉD¨Ñ×ÈôM),Û*ä ®{w8Šä'¥5™ÏÊ;É “‘¶„ïr]Ö4öyr|@çÎD<Ånwõ©±ÚWç\žI§Ü·ó§Þ/çØ@S3מw¸Oe"¢Sbdªxðúû¶ù¸‡%¤,Võ®ê^ô®}YÔ©ê»…©SEãÝs*½¢Å¨hYSŸò;Ÿ’­]Vm]Ø打Æy,qêÉ72&@ƒìâÅë%ÐÏõ«åÍqM¸GIuFã Ö4hüš(|Wht9u"ŽïB…ë(Ò§:«p¦ “šžà;ÿ5úQ½óÒMOXy*m.ºh¢×F>ÂÊ`Èãøê!¾_Õh>ƒ-ûB=âó§*ƒ PTß÷ÃF71:}Î*‘;9îµ$Iþ&òÄçŒF2¥2UÍ0ø‚&±QŽ¢aü{š& øb• +ÍE•²ü®ï%xÜ|uZ¢$€E¼ :@…*ä ?'›0æ;‰“}•Öò©Ú$0ßC›zÆš÷¤:Û“ƒ¨ôL®ÌY‘RH#o”žÚ»&6Mß0]v2Õ"—Æ@²ÛÐQ-±.`RÀ‡òÆlxò—Hþr y"_8 +ceOõkÒ+öŒÛu2ˆN•+ŽÓSå*óÏEš ³IPúZ@ +ŸéòHJ ®ü@KÖ~¢õ,Œ_øÿÒ}&A{ꉑ¤wÏ«‘ÀÈÚ®f¹k·ù´?þOÄMĪ¨“˲Øn‹¼|hÜÞªõ üýù™i+u;à3òk +Jf +endstream endobj 1143 0 obj <> endobj 1144 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1145 0 obj <>stream +hÞìXÛ®ÛÆ}×W òD6Ö˜sáì›íœ¤-NãàXqP$} %Jb+‘§$eõ|Rþ2kÏ o’|)‚4(P8¤Èá¾®½öÞl·xþÍÁvíÂ(–D)Ó©a*bM±Ø.^®Ï¿L°Õv!$‹ð‘&Él2†—:íÝ'ˤìm”±·1o;. O‚ï79ÝÉ +6tÍ‚*äqàýÕjÖ{Hºk$bøªŒ¤Bù‡x”è$Ã÷ßᲚڽٜÖ{&)AáE¶^_]yeHUDÁ–Ò$}´µ¾ÌäÏLdY¸Lël)#áncnÆúëç_~÷£ÿ»Â‡Ÿ”;•pA™‹úÜ©…£ð·5õÅáÀÊàš¸C0¶ì¡h §"¼½¥ÂÃbÃûÊôµ•H[[œrM7Š8Æ2Ž½Ãq“hžŒ|CD°Æ½õñP„ +€ÜžïóPFÐö +ª`Ÿªâ®Z»Ç‡º=5t32)Ñ '²9º’ +>T囔ئeyż˜Ø‰Ñé5h{xÀ¾+Ø©-6ìX7ëöxRWë‚•쌹&›€!xf“C-U¡æ&ú»ƒM}zw(|LýQÐD½Õþžx€Œ®vtW6¤&‰oØ€á"Õê7±Aþ—m8Ûðolöº W³üÎð7#'í&/ON½ø˜«ˆüv'ªÆvŽ ôvI㔵Hg¶±Àáa^í"›a9òÍ i¯‡:nœ2*ÎŽµÅºÜZ½ Y)'õ˜8%ó¼/º=Æ4üau( õt…†² +qˆÆˆƒÀMˆaä’‘zšâ_§²?`’!iüv6È™êa ­¾I€0W L˜©¨7(LA ¸ü„Gd’}CÇXÝ€‰þÕ”Šg¤¯'ß™,úöMqáèE8êr㬟a‘†76nOsJC«ŒgXüâ‹Yš€ÅÁ;O\]ÍÊ]å¸ì“ý`í™ Ý3ž¢Ótž·¡A%˜@Ñȧâó6‰Ä˜™as»¹ìK(xñòõÛy'QÚMzÚM|sh.8k}Ý¡^ÞÝ¿þá–Ì`^‚KÌß[ÔÇsØ×ïÚÄL|Ö·üò¹êy&D^O6kþb†Ø}ª© lÅäU(ðIð„ÁgÝA˜dÛÔGq4µxÒxý¾ãr;öýÌõ}qìLà‹¢µõг‚n-R~íäöÅã¤'ÕTC¥lÕd«-WM/\Á¾#ÜÓé%˜ç¢ùž†Í%ñ"CìÒIÁ^¯TåçMI0æñ±n1€õ.¦<‹.éb¤2'¡-7Ø + <³#ˆ5^Xã³Kã #xäÌ­¿ÌüŸå@8d¾ž˜O”çÈïLsi2ud°. ø…-KD\é)ƒO‚yFGÙÏ+‚ËxŠAéã^º¹XbNºéQ/Ìc˜œ*ú¹…¹M\'šQ†ø}xI=UY¦”ÏRþø. hbolÏp·ReûÂo÷¬Û;ñÄ°Ù¥½~$ÁõvÖ%Ðô„€Žà$¥<ŽnMˆ‘‡" +pB] +¦_‹¼³&Ôf„dšÅ/»ÅŠ, ¸f\£Æiö³S}µ¦E7 à/®h5šIí¹nÆOµ™ù¼r½·I´“’‘vþuå9ÝÛÔ°·i··¥Ô›Å°¶i¿¶ÝÕ®³{Þþ#œT)¤S×ï+ÖÈɇ±þƒ‹œ–¿fSƒ¾äj“;—@m~¡0áæFÇ»¿ûö›ÕŸ.²>&H÷Âÿ‰!^|vÁ,͆öE…ÉWÌVEagšTìœð¾xÄmëMO`+ʶ«ž‚Š®e¾t꓇<&!9ÚzúI|÷k=sv,«òˆq> endobj 1147 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1148 0 obj <>stream +hÞìXݎ㶾÷S¹¢š5—¤$Šl®f'N‘bÚYÌzwSlz¡±e[‰-M$y'ó}‹¾eÏ!)Y”=› AR-É’x~¿óC +²½üËA¶íLÅ$ãš$Z‘˜“¦˜mf¯–³—_ "Èr3’pøƒ‹Ð3šd1g\’åaÆA +ã <[®fsÆ9ÉòqöÞ,¾")Óäúåõ矓×M$4Ó´Þ6ùáPV[òuÕÍ&_Ñ?—U±S•²8&sÁ„JÉòK'1d‹“ì÷M4’%´9ä®>veU´VØb9S’e +|R,U„ÉØCX¢Q–õÎ:l_‚ÏL&ÁK ~Û—àòcÃ`¼Ltï=&eo¢L½‰yÛ‘h®XFß>¬s¼“´+Öx5´ŠXJýgó5«ÿHº+)¸+‰?Dì +x”%™õ¯ád5µ{³>®:ò.Ê4´ð"[¯¯®¼2ÈŒ ÇXK©²>ØI2M俉0&škµ™K.ÜmJ"Å%¤¿þüËýÓ?®ðá'æ.ΘÀÌñ>wñ€BáQøÛšzµß“»r pÍÜ‘0¶ä®h ¨Íñö1’1<,Ö¬/L_[™´µ¥€R>Á6ð¡ÊÔˆi,.zɃWÀ+1Àq{<U×z.QN€[X"AŽ²Ð¦ûz•we]EËïÆ´#Lê"Éû zücÅhÃéí®Ê÷$oœ6ÒíòŽ´ŪÜXÅ’C)Ò!2' ,Zò¸+ºðü#u$FâÒìr Â²u …"g¯½GN z”Á6ºt]Wÿêcø yƒ™Ñ,MGÆqÛ_F¬äRðÂù\Íå ÷®¡dHê§åé€Jò‡‡=椫É}ÝíH¾þÚäõZ‹ÍYÄÀŠ‰ÏAsãbŽA&n¿\òˆLÌ ÓÌœEŸ}`yj9EcËmU7E$FÜÒÄ- Áx`=à^ÛØ} ï"´O¡Í`˜ŽÅŸÃÎ ØScÛ¨íMg² ½zuûn˜ Î|¦dæ 0 + –$ç1xµ¸¹}Ifo†¯é9Š€õ—*»þè +JúÀçä’_^ Sîó‘î…È ?1†cÏ´iÇ[[\Ú—tAà§qÁN\´ÛHà{F®*¬FMŸ€ùV|¼/ȦéK2Öc5Æ«It_“—_‡¸ðÊÓÞ‡RSîÙâ)^ÂQ0AâÉ£µ•ãŠT"h.²¦ñ"àÏHð9aÇm÷¨¿žK“Ÿ=ÝÃïÀ0Iä=òó¼×!QIˆ7óðP·0ö<¤™á#:E]4NB[®]š}AòjíŒÖx35^1æx†ÖO4À°Ÿ®¬r‘ŒÌÇîàú8"`N92X—ˆB[æñ8q5qÁ ˜·oŠjÛíBš¯ÕHs©íªOö;äO”æ(q>.í¤Ní +ôª«;´·VzãÀgéÖ +8ïÜgu_C5Á(݇aŽaè[¨­β3¦Oâ.-9DŒ"Gœ¸AÞ}A¶¬M©+=è7f$%D?-òÎ6ï¼B:ƒ +gœù&ܯLz TE@6ðÿLrNX?i²^†.éQÿ=ž"à”´3×c”⦶Y“M$íþ˜›\> ª‰›ÍÜ*û2Jq·Œ+ü‚ª¦o ‚Ù©'#­âq,p`oËC¹ÏQ_ ƒÒ”æçûÿT`¢]ŠC>ævð<'dö;‘[¯¦?®ŠÏÆ%xYt­ºñxåøÌà d¯~IBäx‡`}¡ûó„3‡•bóE—žÚGŸ1ã}fÉ¥f”iïû pýzèMÐ¥W> óc ÜrpåŒ<]­ Q@!Œd9™lz\n®þ±¸ L’`øh⎸ô` p`ó<àÖ7ú€É4‹¦7OU—ÿhU-—²ßåN—ð'MÆbÏ2vüQV˜îHÑ)+àñî[êNŽÀ“ŽçT_ÂÒU]A×[áGyó§I#€Í’”fèKŽ°÷ÂÖ—Ân/¸c¶‹“S&… +2ûÂõDÉ’Øè±þÁØðï÷EØ“‘ ‘z«ý#ž% ÑÕ¯âÌ­²ô‚ €NÄ¿‰ òw¶áцm³°›èFˆ]HAÆ’,5¿Zó +U»÷Öh’x­~Òûo£°9Ž›–0†q‰ewµŸÿsœaÏ(õÏ9ÇÑÔ“:ŒwztŽ£i¿Õì÷ŒªŸÊ>Øݶ?´/±ÉÉàäæ\p”JÜ—FsÜ8õ'8®— g8¨áÿg8¿î gØÔ|â0çùÓœ,8Ìñ§ŸäÅrö<°=± +endstream endobj 1149 0 obj <> endobj 1150 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1151 0 obj <>stream +hÞÜYÛrÛÈ}×WLí5ǘ`ì›lÓɦœµK¦íMÙy€HbB +ZÑ'å/sz.¸‰RvkËI%å*$€ž¾œ>}±`»‹ç¿/Ø®½ÐŠ¥QÆâL3±¦¼Ø^¼X]<-˜`«í…,Â?|ˆ,åyÆRñH²Õñ"‚Åømµ¾Xð(Š[Ý]|Þ,_³„gìåó—ßÏÞ5¡ÈxÔ»¦8÷ÕŽýXue³-Öeø—Õq”²G%\)¶\è„­^Y‰q/[ ²?5áBH{ÈaWõ©ÛWek„-WIœÃ"Í͸Tyž3g$Éئ%Oµ¿£¹Œ'÷ár‰27asï‘Üø!g¸gÞ|ÒLJ¯£LœŽEÛ±p¡y|¸Ýt%ƒ®ÜØ ¶§Ï<¨Bžî±?¹‡šõ{HÚÏH$°UiI_„²?âžHã4Çûïp YMmïlNëŽ} ÓŒ‹ t"[w^]¹Ã㫈œ-¥N½·ãxÉ2‘çá"ƒ¯ó…Œ„½LX¨¹óŸ¿üã¿þèÿ®ðþ+ÅN¥\Pä";Õ£P8~[U/vµß®);cˮʶDr*ÂÛ×P*üXn¸ÏL—[©4¹¥Á)Ýè9ÝàAêÕ€Fd_P-››¢Ú‰põW¼ŸxÉâÄz%¢g‘`æ¶ϵ½Ç£ÄÜõB¤}ª'¢\$ƒk#ïÚħÅ[؃ÒìË%Ã×_‘Ä1œq8ŒÝçì² +t +îaêºÃÇ’mãü®²ñ1¹;&ÎR{L}dÝ;eëSÇ…y)ái”x ):Í´}å>”‘É}ÐhÐàпŸöMÙBNi³‚ã¤s4K [1áÔ +º×+r|”!þ4V³šìÒq„vŽ`×t:=½K0Çî>² +j&÷Ÿ dƒldçCpƒÍº»U@Pæö¶nQ œ‰(79N Ó©wÉÄÜJh÷&W^s¡zuÎÂpŽ †žNÍá"©ÔøÓCˆydH¯] +MuYÀã*f ‰r™<ðæÝ~ÓÝLt”>ƒæHf混ݾ®Š+šÝéXV4+:ÖÞ–ëývì4h¢ÅHˆŒpeÙ¼B•ÕúP·§¦d¾HŸ(+âÀ¯«Ã½‘‘7E¡Ð^¨ Qq{.e‡}i/Zvwã.+Ä ›ÂÐSmŸ¡­=X5¢xqJÂ*°w ðö¥Îøºe_‚¢õ*Z™CP¹Ó0rÈ؆zN#0ªdfÚ槃Ejçs‚ݤjÐRØËw‘D¦Ë_ÉEàKȧU’ܯˆ@GãH/@-ú´‡Ã«ßÈ1ô:’kž¤–HÚ²s%kZÛS9À R—?¿\¾[-^]]¾ü°š(”žèRr-'ÁKž0o(Fç‡ö7_mý»3=RÝl8s)g D¦Y<¢Ü%MñbÈfd¡Ù(ðx\F„/#JÙÚcªÇ×}a:zìRIòXy·l x·mOQ댔s™­w:(>Ó–D¶- LNV6OgÔ£'–ZþôòÍÛ÷®–³ƒú¸N +«åPdÇžjÀøˆ…L õ\2JO?¾Zýaš|ƒØ±µ»§Tq0²Ä·1Dßdõ‡£2Äú·Ø'|½‰G*H´)¦ª + +%Û†JÒ|Ò È0aïÔåþ™ã¨ %3Ʋ¶,çQ«X4žý6‹Î”Á3u®%ö‚å‡p‰Ãn¦æ†,úþ+h»²ØHï¯)úýqÖ8>éh¸Qén¸Êѯûj…¤^ƒ&¯Kvj]Dɬ¥q)„l9Zü¯Vk°CEAt0)`o.ÿ¼¼z”ú2ÓÛƒŠùj-†y ±yMc«‰˜{+`³#CtM‹¬æõV>(ο"s†˜@f˜-n)djfi7KM0xŠw½=2R¤Ö‰–i_d)f.ó5œ1pÿ$à^±ýñ¶©)ÆYeÆgvD6¿œÌ$m0.0àÓ—uw¢ciïFÓÃý¾7tzþ•>‡‚Ëo?.-ü©¯x©UžI“6b Glÿbùæí§s2̾Š‹89úoºSÏÎÍm}úÌÆäÂìÍÓ³{óQ“‚3Û–+a€G°;¿‡¥gYôµ_®.þ%Àhsã +endstream endobj 1152 0 obj <> endobj 1153 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1154 0 obj <>stream +hÞÔWÛnÛF}×Wìã‰6{á’ËG×vÛnØJÂé#Q ‰TI*®?©Ù™½P¤$· ‚ (ˆËÛì\Îœ3d5yõà «v’(’rCb“ÅISL–“ïf“Wß "Èl9’pøÁA˜”e†¤Š3.Él;á`…ñ®Íæ“)ãœ+2{œ<Лëï‰f†\¾º|ñ‚¼k"a˜¡õªÉ·Û²Z‘×UW4Ë|^D¿Í~‚­”ÛJ3¥ÈT0‘h2»rãÞ¶8ؾo¢©,¦%Ø!·õ¾+«¢µÆ®g“D²4˜¦¤ʲŒ°Ø - ØÞ„˜™ŒG7!%ø€²7!ä>!™MCFàflBô蘔ÁE©½‹yÛ‘hš°”¾ß-r\IÚ · %3ZELSÿØÏþ¡f¾öIwäBC¨*‘x"”»‘Æiᅢ%Øjjwg±Ÿwä—(5LЛlý~uå7ƒÊØTq̵”I’ÇÇ…ü‹ˆ,‹¦RM%n©I”°„ŽŸøÏýÿïO±v*e+ÇCíTBáQøm]½ØlÈm¹¸¦îH[r[´ô¦B¼}Š¤‚‹Å‚…Æô½•JÛ[ PJh®ÉH!Ä’¤É€dFLkÏm¹€¦1¸ó’äÕ‚|Œ„†“§/Ï-‰ã–Ä¥Šqf8Z õ§¢YçÕJF³ß‡,dô!¯<[Œ}nó +Ô­ RÃ_CºÇ»¬&õnW·ÀG¤wKRIì帞¢aDDlÃýXâ}¾!xÛMÞ¬ XºaY< 9öïqï„›û˜]†­/Ið̇V¤‹­'îSvâ{éÌùé>ñÉÐäP©ë7—7oïÞß^UJe:ÔU¤>=þ›=èÝD".TŠ²1"¦ÏD’©ÕÑ'Øx,Ýz´›bÒoÆCÁ;&` 9¨÷8wLB1Oü‹jíµÆm…(#w¶ OÞ¸GoÌ„ÀÃYæ#«,o÷§èc¹ªj¨q·†ør˜7†0å:(Ò®€Eµ,E‚ì=.–7y$9f_€R8Ä´^.Û.¯æÅ»HhÜË}7ž½ Œ¶¥ÝŒŸ„ÿ@íðepôwZ^Óú$ ·×w¯ïfo.Çí;ÌF؃Ǿ¥ÀÛ®°=´Œ”Äñ%Â9ÇBm¾ï<Ì23lp¼i|’!xÄ€v{÷”Ojð>j–eÏSãÐM(^úMLÁ=)8Å·l/RÔª9`yß ×Ë5y1ÃJœÅÕÍů׷cÄžé+§Xàd1GÇØR0B¢å©…úH1ÜwOU—ÿi_™Í¤{2¸18 k«Ö…RPB\ gA÷FAšPµ´#(ÇújBõþ#PÛ¨g¡b"Éú¦u¢ð€úcG[Šöñ>'zwaÆf˜<ú!·Õô1çЇ.àãEA ¹¶lÇÂz8ßâ̵tÓ‡•9BÙ­ÇÕj&ÍAÑùÑXî• Ž }Œ$­‚Ð͇Nƒôk~ºïÔ$f:=žQÀ+ØLÑ—èPJ‘í¯‚O˦ÞBWÀÚÊ z¬z7­Éq£…iX?‚„ÈòsE'AnÀMø‡B‚ÅËàp¦ÎÔM¦¡nØÊÐÇ.ÛãÐá]œz2g”[rrzžØ‡ÙÊf7}G袷Ÿ:‚´¹·ö<£Ë4—ÑyÏéý4$CZwßÔçˆÝ$',tÿújöã³,”„Lr†Óe +[§ƒ8ÁìNÊín“W]8ÒD„è] G|äAl’ŸðceFB œ¨óBqê/ G/R}Îû‘Ü.eƸ9ˆûiÏæ„~¶ +H îo"Úšþ: +gêHJH̦ºGЂXˆÿ5÷o‘ìËêÞzØ÷ÎéÁ[ÿÎúBÇ£ÆøÞ×øm3Ñ-øt2IBvß(^:|¥@Æèè1r‹.H`;¤¥-±c*¶ŽÁN{ÑÍCÈðxö„Ô ‘KñVû ê?¾ÿ`‰^¤> +endstream endobj 1155 0 obj <> endobj 1156 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1157 0 obj <>stream +hÞÔWmoÛ6þî_qó'1’zGÑ®ãvÝR$HÔC]ªBÛZÉä¥Ù°´¹;R²—¥ÝÒaXXy|îí¹;[ÂbpðòL¢.„"/ +ÀPëÁ|ð<¼ !™¤ÿøQÈãBWp¡ ¹DáÂý$Œ¸Â…äjðÞ9š¾ŸG09˜w²cá¿kê¸(à4_ ]C"7“HÆNu£±8]âÛ/L¹¸©Ïy_™]m…ÊÔV€=ån»q©Ç˜ŽcV(„·ýFˆ˜<Ým )SiyÍBÒÇ\î:5L?§—«‚yh]×6fÛÓÞ 9µ™K<Ù»x²Ô0g.Ö˜uU“¾_Q/ÓLŸþLu(R©¡Yöläán)d©±A"‚»ÍÕYWqÊê+ŠOiÆdŒuzµmmp•·KhÑ’öz¥¡sÆïáÂõ-¤ §Ðó«£ôZדO ^`ÉÏ[ß±iD;úÃÎ]š«’eÞÝ $†žoò¦CÙÙëžµÃ-¬ÿ7Ý÷û¶6ïÐVÕ:m5EdÝîÃ%¶J]7EŽÃÀÈì3…ŸÖG…íÉß16î•«.9U ZÙ(ÒD>‰cÊ)Ò)Ù&‘Nê‡øQ3L·t8j‘¼°•9±:qRy;*ý¿]~Ò’Rî#ÑÈe¿s¹š£C6[ ‹3¢1ßgÛ"í<°6FÖƈlŒ¬Fb¤h4Z›Üݵæªx'DöšlÖ0sìt\Ìå Ií8·\‘‘GUY›W%7ŒIÕS&ì𣖌ÇÜ5%Cw ……u'/[ +{àûž£zââ$5¤¾Hh¥?ZïÛ>Æ–!Í!ASõÐô-óÇ‚n…ùl+‡i›Òîº[Ïüf0’½îjïnÕºyzóì¼ZãÙ'ÌÕ^¶®k]¶Oû!ˆß$:¶Q~p@j&K]@>ßÖ]Ž» ddíνa<ÞAÉ™c.}÷ ¶õH˜’¼k{çñªF'æ3g˜ ”n·p»¦÷I+¿Oa5õP>÷” »öUç”y”ã³Y9œ±MDD? 6jkÝ®ëäFÄþN<¸'@@¼D1„g˜c -ÆuoÆ.Ó÷‹*›9Mþ«®æýÙŒí¹v+)˜&ÒnCtÖ¦uk|D÷)ãá> 'o’é÷Äzòý”Düx:=›¡IÍÃ: üádB Àݲ=Ôe“·×¨qüvz:~9î“´¸óeEÛ¨¼Pöå¿–$á?$¡HBŠ;"÷ùó.?o—†sî>tôþLGÁœÜPHY!ï®Ð}ž$)Òw§e[çhâ㺡aZž÷욌q{øç†6z†‘Ζiœ¿eÜ=Õò ÉOŽ~:#ž¿Ÿ%ÓÓ³£W“é®m§ü²\œÔÕJSN ׋fE:Ûj5|lTñ·œÅ&`²¼È [>÷T§El˜=,jVÜý†D89ÆmÊÀ×cþÝ c_9ŸP¼û%ãÀyÚ+þS€Êî¸û +endstream endobj 1158 0 obj <> endobj 1159 0 obj <>/Border[0 0 0]/Rect[484.14 525.24 549 538.74]/Subtype/Link/Type/Annot>> endobj 1160 0 obj <>/Border[0 0 0]/Rect[63 511.26 116.58 525.24]/Subtype/Link/Type/Annot>> endobj 1161 0 obj <> endobj 1162 0 obj <> endobj 1163 0 obj <> endobj 1164 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1165 0 obj <>stream +hÞÔXÛŽÛÈ}×W4üDîZmö…7,òàØòÆÉd=k70Ø7ëãªe?…iÆEP:“›ïP¹Éªˆb-e’ú`k=Mä?™Èópž!Ôù\FÂÞÆ,Lx0æ¯Ï¿üχþÿï~RîTÊe.ò¹S +…Cá×Õ×wwìj·\Sw(Ɔ]•M‰ÚT„·¿†Ráa¹æ¾0]m¥ÒÔVJéØf¹”–rž'¶Òè&W,IS®tO7‘T´ÒÈ/’±7¿Y„IðæwºZ|¼ê²¹¿<¢r}ëÆâ-Ʋ_±»ró°¨ÖÅcY_/>ü„Ç‹«‹×—/ü×Ëoža$ÁÏýcuÅ¢ïþæØÍif‰4# +‰Á<¹£Ÿ7OžE(r®‚Ç—RãoÍ®ËsÛëpÌš=A“ÝØÛ¥*NœmäÖ¶3ÁîŠP ¤ñ1”.eH?jV;&eD°Â,sÓÅ~:.ÒØ/ê2\¼þ´¸ +—îýRvŒcëGæÖÈšrÕîUÊÌi'6ó QˆÕ:ÎìøÎee]VÆer ºFÀÙë)%Þ=TSsžeq_)â眖<Ïc£Ø{î¹Ý{nç ¤gèV“¦•ûœj×´v ñ—ã®.×lW±‚QÛØç\‹¸•ðßfîÛ;,5Ÿ¿dEµfûC]²ö¶¨Î.4ÿÍÌDÓÌ0¸¼-+T³PpaÂ}w÷Ȝϑìêùt+ll]6+ÂÂìB Š¸)}È`)?ÛæäU˜|G¢¨†$@8{gBƒÖæ±j‹/ˆç&”i÷8œKRûj3(ÌZ,ÈÚÛ,g<Ξ°ù(?2ŸD̸‘“yWK[æP­\më’L$.Åf­Ú®UÛøCÐÖ¸¾„ý’½¸˜ ©™gUi.4‹1y&Q/TO ÑÓk—1EÀ¬¥ˆy—<»ðż õ“–¢ñŠ§‹ÅêIéÆû‰ñ¤ –63øMLtõŽ:ϧÁE¼z‹Z¹(ªí±Ø–è0›P¡J)HsYME$9p†Ÿ8Mi ¡‰µ‡Øsû„xKàŒíÃ,8†"™Ü”[*WÔ]‰ÿ¶l'R<úé~>½XÌlDøØ™O­k4›iÜzP›ýL¾Wž‡*zrC³©+ßTÀÔàé%VX—ûbWQqŒŠ™SÃ*QÞ]5¬’Ô–5FÓ»žµ.7¸®-ÄÀ^–mdŒÍ€%èô´†…+@Ÿ„=õÜÙÇ“~X[Ý×0{S¶¡yÆ[$^>‘šÒ ¼)ûµ#\ ¨x™^¸‘ œ‚)¡åhóÈVuY ÿž}ÚÑÉWñüˆ«ÑúÁvQV«[OÏ’úî±ÖÑz¨!L;¦f #æõS•¾PBмÞË¥aá¤Áð{Ç ¥ýõHÅþþI>lL6 Ä9Ìø¾ka{‘ÄRw7ðí¶¬áAéeHË0ìß=Ÿ*Úka? Ÿ:MŒ·§¬§à!ªIKá¶ÄgéÝ«®‹s4Ï_ìÚºùM;¿ Ývö´:’ˆø‡#q?æ9+Ò‰6«¯(ó+r¤Ý‹41¼ +09^í‹,í²k¾y]¯w}‡Í"}ŒOIj>ˆ^WÞ6‹)©Ò›i#›:îËKˆQ]¿dŠ`+H'WÔ ô ™ žžQP—W.WËO£âÒ<{Úk@ªEéî˪e6@17ôEÝ%8"`Å“$þJA2¦F% ªl`˨EHJÙ'PE)´‘2ÂÈFNòd(;ôú¢ȧ!£ ÄIW:Z+S)€öK8ƒ)’¸CÄ~.ëÃ=í щÛÇÞlêlê˜gúgŒæ’Þ;»=þÝã縕'<¥#gãL#2è·I…,ŸjáÆÚ¡¦H$BEã£ItÚÛ3+í©]|°Uj¢'l*&sxTQ×›À6ãB¢&!†'gRìJ“í6¬9®VeÓlŽwÜARôÇí\ÍŽEPá‰ßdÊAú¼&1"< Z»—5-[БT'žÞÁÊT9Ïöã.‘zMh'  mΨzó?Ýî¥ò¤ªH¸ü{°$Û³ÇâØö¨¥UA{£á»sžaç +y5ÔI¶È‚å§Ë»úðãòýßL©ž&‰3þiïŸçîûwÌi³úÔþÊf|IÄé Æ†›S03ÍlÅñ9Rˆ)ØÞú¨H­io#…I„ë“:ö€Â ·ŽM9ÞãBÞc‡åHû¹8`‹^©H(ý²©*¿‰h+sz Íé$~ 3\æ—Õ{n{;Z¼:»xHB2Fàž£0‹¦¼2Í©MÑž9…H¦û€¯òŒC ߉x‡r‹N2oÇ~„ž¶w ¹/vu£W81×ñÃÜ} +Í*ãqó·Ëûh¶éf¶'NùPõ"…:“¶ê»3>Òot¬&Á™]ö$”G ŽÑAßêP!™+|v[Ôßø<$¾¢¤”¹W +±E¶Ù\Ì“à‘zOüPìÝ®²ó'‘lpŽyrHbòiº ¿›ÃlT°ÍØ/Ó”ŠýVXۼт;<¨dz&átEü¾\í6;GA¾öºùlm§cÍ<®he+šÜÌNᦤw®º“Ý 0‘·,/ +endstream endobj 1166 0 obj <> endobj 1167 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1168 0 obj <>stream +hÞÔ—ÛrÛ6†ïõ¸›Á‰y™ÚJ›ÖM3O¦éCA2k‰òˆTU?Rß²»Hœ8iRO§ãƒ"‰=áß  ‹Ñ³ï¦‚,Ú‘QÄòŒèÌÅÉÆæ£o‹Ñ³‚RÌGB0ˆÌ²<#VqÆ%)V#V×p¯¨FcÆ9W¤Ø~¥“$e9{vöä y½IDÆ2º^lÊÕªnäeӹͼ¬\ò[ñ¸RÁUÊ”"cÁ„IIq,êÁ¶ØÛ¾Ú$c!™¦5Ø!—ëmW7®õÆ&Å(Õ9ddXj“*ÏsÂt†–|nF2kúç4“úè9ÔK¢üCÈy¨Hîëx¨³>}ŒLÊ>F™Æ˶#ÉØ0K¹•x%içfá‚Ô8æ´IXJãk?Å—6Õu|I†‘‹rUFâ¡ÂM·¬¶9Ì —`k³OfÛª#o›1A]4ÙFë&:ƒ¥ñµâXl)í«­õéJþEDž'ã j%á2%‰a†ÒŸ?üç¯þ?qí”eWŽ÷k§Š¨ÂÇ õùrI.ëÈÕ¢¸blÉ¥k4§B½ý‘H7ÝŒõ{ËJß[˜r7 +ã‰ã¯àuc5³{Þp!0S’\ºÌw“fvQ&’Clw‰•‡ üGDÀOC>ÇÌÙã =iË8«¡*t(}3PðÐ’îÚ‘¤ø ¤Á€† +«À‡°èÅó·“ËðZô£ö+ÅÅÐe:®T몮†þœ'Òb§&ØÒÞW{ëªz^»ÙxÌ-ȲL€À9d)rœ7Ñ8ÅÜb-qe$+&Ó=Pí>Êé]Ó•ú0‹B†9`ÒÐáÔ$Í20„šÄJTpÝt*oúºß¹M ðâ òdJŠxáËs˜S­ b“®ËÍ7$†j‚[ŒTæ¡FŒ§Ü?KÄ"½CIúª\Å cˆHfUzP~ú. eÿ¸œR§ùˆ,úq ¬#ds.`f +íNïήÃÍ*‘‚)zŠtÚÁ=EÝírJy†>£œDTS$«ßÃ2ÜÁZRöÕˆš‚PÓô@0j¿fç“WÓ—ÅÛ³ï'g?N‹Éë#‘Á†Î3½€ŸKÚ®ìÜÊ5#Å©Žq¾Òg”ב'R·d}‹â.—ÞáÄ«ìÁ6³r?«lf¤*òÞ‘m Š_7Ë;øW9R7X£Ãp…fÀÖw²/‡ŒA†®cGŠ-û®ùâ¦Ñ 1%?Þ4çÖ¡²ª›içn?Ö5t¶Þ¾_ö+eâs¿WZì°…Ûr¹Åñýbìƒýr¨_•¥úíý<‡ãœ‚CÀb‹ëÛ÷1)$žâ|h:÷ç ÚBT‘;ZˆE†â{$6T¤ðÐiä_ /ZºEÎjPX}y¨Á¯"ž‘«x"ZÃ.%¬+×gaH«€‡ 7mŸ¢à¼i8z1›yµ§$žžž÷úhȶ©¡" Íô”Å‘â°#õdútSËŽðq{ àh …÷@ÂÛ>êÜ)¥Wu3ƒü ªt÷“¤5±DE¥«—¯Î¾:ZjÁ™}l0}Ž[ù8&ÁG=ýôd$žŒp +gç§" ü$Âà›h?õ!x Yûsžz^ 0úuð’ K¥ƒD>/¯»Üþ7¶ChAÖ» ü‚¡Í¢Ãáúe–e2U‡({ê—¾ ¹–G I|y(Wø EgÝý(ðCìs*´øš¦=Nýºó¿pP˜ë#¹Ø½Üy°Õ2³']ú©d=÷¿*ïS˜=ŽÇG‚ñŠ”„§¥7d׳ÆB™Œ€ái‚‘RTù}Ú†¦—©fFŸ$—îe2¼ªg÷ú~‚¹:Mp‡3Oòƒ¹ü‘óƒ/œ¿Æ=þ“ +endstream endobj 1169 0 obj <> endobj 1170 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1171 0 obj <>stream +hÞÜXÛ’Û¸}×WàÌZ0î$ó¦È×$³.GC;µ5›®†’™’¨Y’²WŸ”¿L7ŠÙ»vS[›RI@w£ûôéÙÍ^¾¾d×̬"1OˆN,QœÔÅl;ûK6{y#ˆ Ùv&$áðƒ›Hb–&$VœqI²ÃŒƒÆ5¼Ë6³9ãœ+’}š=Ð»Õ 1,!Ë—Ëï¾#oëH$,¡Ç]eµ#·U[ÔÛ|SDÿÌþ +ª”We˜Rd.˜°†d¯¼D}‘-zÙÿ¨£¹LÓäõñÔ–UÑ8a«lf%‹-ìÉ2c “*MSÂt‚²ÜîÜ†Ý ì™I=—àåaˇ¤Î )At»GäìL”&˜˜7-‰æ–ÅôÝÓcŽO’¶Å£ %ÞSZEÌÐ0íû0©Þ|“¤¿sa`«ÊJü#”ëXÇ)¬ «>ú‘ÇÓ¦%ï£8a‚Adô«  "ã\ÅÑ×RÚ¸s¶ÖÓ@þ›ˆ4æ ¸:K.ü£!‘e–ÒÝ¿þö»Oýã +¿üÅØ©˜ Œïb§.(…ÿ[Sû=Y—;€kŒàŽ€±!ë¢) 7âíc$¼,Y—˜!·bérË¥\³BŠq„ãž`º5‹{ºá<ÆrÜ$ÝÛO7å~¿ØDÙ¿fšY›ït„‰´-?÷Où¦Œ`­vcÒéù ué˜!å¼'»|H¬õ>uÄ“xâiHN‚(ãE)'}D¸êí¼¹½»[,³Û÷«û·‹åí›×hnog¢³»£:¯7NC,›6o‹CQµŒdŠ‰^ð¶ý ô&±j#eCŽOmy¬ò½W:WÀÏž¥ãàgyõH6yE~*È©)ɱڟá²)HY¡«œæ`±ÐL¯˜÷ÖÞ-~X­GªÁ¶ÀßÂdÒ4Œù?@Œ(y®˜ìkÈ0÷çªÍqK²Lú5©w;> + N¹ +‡êŠJðƾˆ,íwUµû‘ú¤d`„¤Ê±D¼šÑÇãé§}ön½:ͤ°i‡Rí—ß9S‡·²éÅF åŠËÇèÑhã#é’'À¸Ó°€:¬»»†¶  +VA1X~Q:u›¦ßÞ($`‰6S´Íqçq@P‚1œÞ?›r[Bž´€Ø +ÐÑ~Š„€2T9ø@J–ÊKÞö"U(C- o N‡”åèúHB·5NÀ•ìŠã¡h17QpIj"SXØç— Fìá€åÁÑË]IwF«-VUUuiÒ—ËS]ƒ7_US¶çg¨EËxÀ¬†¼X¥š¤7x\˜Ïç÷b¹|·^¯Þd¯Voîo³F‘‚þ`Ä*iЉçhÂ)ÃR—Ϩü‚Æ„¥þ•j¢gÌ&°p­¤‚Dí{¾ÿG:Q€¯çèä.?õbˆ$x `ú«<Ðͱ‚sÓ>äõŸÈ8“1tòš_œH0Å„X$³<ÑCbyá"“²DyžïÔ^ŒÿVûˆJóý oSÕèÔôk)M¦òWQšqÚ38`ˆØþÀ'úÒ>‘%)d­™P +ñ>t¤CLŦ·d)¤¨¥'ª‹q4‡Ž†BüËCÙvü¤â,¬ƒòª“dÀHï# í;…ãÐþTüyÌ8€k†.ç “q¥oW‹¿M<¡ûÌõ@˜,6f$zñ~µ^¼^MŠÃ€5|ÿ…$ç‰à9Ö“¼e±¼JÛõ÷÷#dÍ% Ø}Ì€«q4]šöú;¾K.…)I”ÇÝCè%¦99ä¿”‡ÓÁ‡'š8›qˆÏ6R’ñDzǥy¤8„0Íi Y3Wîh§Ýbr(ÝÌ}$hé—pzxjÈX]ÌRG,]œ?CIôPnj`$r»%¨ Ð'(¤h÷yR#R¨`æÊ•|äê£cµ Çê ꜆ý +¸žÈ!Â>÷äþÙtjÛ«îsm¤ÔfzpWã.=ÜM]ü|*ªÍy܈Š¾p\"ºk)°ŒµJ8ÿ ‹›ù¬º,¢ZUm qk„^=½J”9Öh1)GÂSMÝ}e€®BPFþk[! A°ÝYBøê -…kR8é†n݇Œ˜~Š€qcz‡‡}è2rp¾¥çÂ&Ôî0tÉf-qrJoÂäEIÚMþGDÎv¯+ÿzó\"Äd/Ç+¾òø“¨k Þ¬W·z³w +PG½IT™4ùšœÒ¾A•ž–}ÜSüq{‚ð,kh7Ê>ç"¸ôy—è=µã`¸…s‘„îÐ^eqŽýK;í·´[<1ó +Γfsh=N¡KÝFÇÈWØ%“çÛ¬ê*×hlO[ßÔö…ÛÏUŠëVÙì? I™º +endstream endobj 1172 0 obj <> endobj 1173 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1174 0 obj <>stream +hÞÔXÛnÛF}×Wì#ÙFkîûèÈrë" R›©Q$} ¥•ÍB¢\‘ªãþQÿ²3»$EJŠ.ŠÂI‘Ü™9s9giFnG'ß]1r[´ &I‰L5 Ù¸Ñbô:œ3ÂH¶1NøƒK µ)1"¡ 'Ùj”€šH¸—ÍFcš$‰ ÙÃèCôfzNMÉädòí·äÝ&f)M£õí&_­Šò–\”µÛ,ò™‹Í~W"¸RT2f”iE²³`Qv¶ÙÎöõ&3NeT€r¹ÞÖEé*olš”´€HS¥ åÂZK¨LђǦ95º} )—ƒçL‰ðs—ëó` <”i #㼑«&ƼªI<ÖÔDïïç9^ñ¨vópA +<Û¨Œ©Šš×~l^ÚÌîš—x8'LV¡9þ`"ÜLá–‘ÆÂúwp ¶6ëðd¾Õäçؤ”E®1Y5þÖeã Jãs•`²9צͶ”û•ü‹0kãq +¹¶cž°p©H¬©ŽiÏ_úÏ_ýÿï~bí„¡ +—´µ]²¦ ÿÝPO—KrYÜB»lî˜A3VäÒU†S`¿ýs7Ýœ¶“ÙÌ–á~¶4pÊt/j£{TãûÒ ÊFWeŠ³ßF'YÆÃrK­sŠhBi*$šÀù¸úCT”5YºXG‹‡7ù£ÛœNÎ7î÷­+g£^š@8 ûÙȯñ¾Îupü“xgð”&*ÑÁv¹]ØE`OhÏêº@ M¹au‚+£Wh}Ìà, °žë^àóõöfé¾ÈICM0’¦Lˆƒ`_ °ªÉÇ8=Ve}2}-'§ÀïXáv»re] Žá@ë*&­_ã“Ôf<ømZŒU-Œ$ézëz8LÁ¡±®îݬX®"õ#eÌ eÑ6ÆãÊ¡vŒáE37 ëY´hXÈc”ÇpXnAPþ¤C@À‚”CŒV‹Jîºrq$Yöp±6ÞÁB`Šqü<†‰ZµÃÃ:Ù±ÁJ…c "Ðâ°Ñ+R”dånó;?¡ÀQýg ®-µ@…÷ÕöW¨ujÒÌO¨x¼-NO é`ÐS çß¡‰hsKHR4ÉbÐ(å71´µÓ²Þ®Êþ ¿¤¶è¸i1Ö +’`:xõÒŸé¯HÞŽ +¦Mm¯“CE²Ó×o¦Ó·ÙåÅôj¯Ùx/ºuIE©ê¼vØÓ”dPˆ¡+äß㮎xÆìyê@q½ï‰Á*6nNŠÄZ`Ûõ–T¾)CclT¶·Wb»8ò†ªšXi*Ô>ÒèürúÓûéÛÉ/{*ìÁÐìT¥ê+’—s2ËKrãД˜õôvNþýmHÖåò3‡=+ÑYjúu;§“ÉûKÈçÙôíÕE6 4¥Ö™(f÷¤. E@ Êw›Ì犊€™ü‹¢’å7mËÃíê%¤eŠ ñÔ R(ìi´Å¨@®¸1/¤)îÉ$l«µøZ5Bö¦ý9‚Ò2¯jõ¤¥–áØÉA3|L4¼+¥1û‚‚ô)#”•páQ ™žMÓ6ž¨J¤Ã-c¤DGœO—¶Ã1µ@¹M‹'å¦SÑÞŒ¸#¸¡²‡»S›´‡:Ž²ˆú +ÀFCððe²Ê?«í*tr.ëÍ›îx¡ŸÙv³A[ÄB clØz—Ïî ÞFJ“tgAttÙVì‚Œ!¹„QJuÚ£º¾ôqÖ@z(æõ¹Ï‹MÕ0eZz£Câ¥J­: îÏÑ¡<Œ˜‹æë(9°Î)Kl__œeß슮:\ìk4‚µnˆ¸À(ß û¸ÛE¨ëÅrYä«ûŠÜCÿ­ŠÙf]R2¼CmçØÛºwy(î >6ˆ»⮂¸G“kLø:ÎRщx­è+øçôÛ*õ¬ô5UiølÈüAµûRŠÏ÷ãs>øq [¶=É^ßןÌq½ºHÒ–š]粓uÞ—õü`{!ô³›4 +#¬Ÿ•½ÿ¤tóÖ 8*ä ×^ËñÿǶšÍ¬~IÒSØEÿ”šÛç+9^`AÈÿ¹’3˜!Ñç´Ü÷ûK(øµ×Íy§»êð[LuLÀA¿Ù øÃSÀ2eõ¾Þÿ`÷: ± +endstream endobj 1175 0 obj <> endobj 1176 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1177 0 obj <>stream +hÞÔXÛŽÛ6}÷WðQjbF$EI|t÷R¤HÓ…ã4(’>hmzW…-m%¹Îöú—!© eo´)Šî–¬ çvæÌ¡¹›½øî #wÍ,$2g ©õl;ûv5{qÍ#«íŒqÁ?X–R•‘TD4âdµŸE° +b¸¶ZÏæ4Š"AVÇÙûàÕÕ5‘4#/.ž=#7uÈ2šÕ]ï÷EyG^–­®·ùZ‡¿¬¾Sš’T2g”%’¬.íŠq¿6Ö~W‡sÆi°YV‡¶(uc»ZÍNÓbJ¨LåB)EhœáZ&:°¹ 1S{7!%ø€07!ä>!ʤA¸g]ôèç‹\:ó¦%á<¡iðöa“ãZ½±'¤À£ +ÊÊÀ=öƒ{¨^ß»‡¸=FLB¨"áø… {QÁ¥4N¼§°V]Ù;›Ãº%?…iFY Ý’³W•ÎTƤ*Â\sž¤]²ãxZÈ? S`-ƒT«9˜=•$LhÒ?ÿðŸ?úÿ]¼ÿŠµ)eX¹¨«èQÈ +ÿ]W»Yw×Á2cC–ºÑЛñö{È\ÔÚ5¦ë­”›ÞJ€R>Á6ð`’&#¦1¸L0Êȸ^Ç»Ã^—mã¸$± ¸9Љ!ä(í <ìß›ö¾ W¿Žy'‹¥M¥#šµ9á]"1ø¹dœA÷7z]l Ýö^Ûj¥Jň†b8Ö*CBøØßiU[rDO¤)†‹9ÞÙ€Å~¥~4s Ð$ž„Ô§"8žÆ$hæyĦƒï½Ñ`¥Tðœ%Ùëº*Ý•.ήü'ŒA€9Hà¹$A }1ªÿN‡ +²=¾ÊCŽÙ} 6¡õ†LYææ™EmŸÍÍ­Ëb»…¯Y°´W5õÍqç#‰Ršt°N˜Q”á jH^·†´kÄT²qâ¡d‹×««×¯‹åÕâòåõõòêòíÅÕÍ»W^!ýBÞÏœmž¹6mÞjD?Ù†± +‘òINjŠÆ™Œ*ÏÑÁÁrU“õ¡%;ÈV D*8è>ê0Ná@CŽà_uÈècœƒÝŒÆö?ˆ{7¯hHõÐU™ï ͲÆu ÚlD–ºDÃûP[MÞª\k’oQ.è|}O¬}F `©ï‹e§cºƒÔÕFïü@8•^»%]$ÊFR[‚øÏ}ã’Žûk0újñóÕÒ3©RghŠ9^c‚¨[žu±1 +NÌ僨J3oË6ÿh^Y­¸}GQ•Xµƒ'(xf]rƒ Ä F‡Ià'Z-¿,ðòv©]g}ìТ3HáJ¨Ë™Yú›t1Æ‘1n‚”6ï‘·Aé$Áqçh¾÷Z,#‡<àøç¸ *žTª±±‘ë›êp»Ó߀“ÄçY ^&ĉyTn’0>> endobj 1179 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1180 0 obj <>stream +hÞÔW[oÛ6~÷¯à£´ÁŒHJ”øè5ñÐ!I ÇÙ0´{Pe:Q¡H.Íò“ö/wIÝ'K·ÃÀR$ñ\¿ó}$#7‹“¯¹iR8HH˜H"RëÅ~ñÃvq²f„‘í~Á8 à.,‰©JH,p²½[`…!<Ûf‹% ‚@íÃâƒw~¶&MÈ›“7ßOÞ×>KhâU7uzw——7ämÙêzŸfÚÿmû¸ÖUD… KF™ŒÈöÔZ Ûl´ýKí/§¡—ƒ²©º6/ucŒmQ¨ #I#I(J)BÃ-™Ü$§±ìßCÒ”‡³÷P,‰0/!ç¡"ÊÔAx&}úç}Œª³[÷·×€E«ÿa¡{â0V°þ=Ü‚­º²ov]Ö’Ÿý8¡ÌÓÎdãüU¥s­1µ +°ØœË¸¯vvò”ò— ÔZ-yÀìmD|I¥GH}ýå?ÿôÿk|ø{'bÊ°sAß;1 9~ÛPWEA6ù À5Fpû ÀØn4 §@¼}ñ¹€‡zGûÉt³s3[8åºe,'Tcpc–&è]=–mú»¿ý¼8Ùn¹]®¨’vNñMD’ŠMà| +\ýÁËË–Ú—Þþá<}Ôõ +ø¨,ÓU­Óu +³¶ª?z¶Î4€XpNœúÓ…·«ºO…&ÆïZZ·!åL*Û D´~¾À¼yiÑáÅqÝéÒ­™˜žD˜U%PH±Ü¦õwd—ï÷×~W}GšÇ +)“ª©”‹aì+`foº;]¶[ìâà@º‘‹Wx_ `m³s¼,([ð<%­$‰àÐë«{åû\7¤½Õ$Ý}î ‹ª&w~ ˜é|ø)ÚüÞÁMâ©ÝÀ FÆnñHö>A:R~°+ð–øX?¯¶~lûÈnÓÂŽÊC 2rLM,z²´Èº"móª¤6ÛÈ5–û…1+mm&}˜UÄD¹T‚> 1)ðÞÝ£+ˆ/­m+ ô´%«˜‰š)*'ÃD‡Ö–-kÖÕ5®ïÓ65Š±F±­‘«€ ‰xRælrÉÍÛª+vä“&]£w¤‚ÔÈí.­«ÊÆÒ0[ÅCÇ0Gs_•;Ôô"õac ¼G²PwT%’7`£,uê×ÇeÄ5æjºÓVÆ?Ö»k°EÄBë‘ÌzÅ*ٴ𶷗×çç³þ@/Õj&~€—ü¦¬j Î Ò¾3ý€ Üõ˜3w¨ÿQDeO*Œ Ž²ÚGÎC^ñ9‡åà¨Ä€ÙžfÌÀ5æššWyé3 ¨‹ôóîÔr/Ìóý|³4›û›­™}Ј@³[Jp¯)–Ä™‰zæŠØAeú*®.·g——«Õæluñöòúêôíz=«*D¬ÒCš´€oÚ´Õá™ +üÔ$%5îÔŒEÓ£×ÄE܇ xg]ë`Å-¬L%C,¥ae((ñÈ 2OkɱCÇQö5ÙMJÄ͘@¦¦ºÜhÂ*)£±(‘M9™° (k;Wf·s@/A2¥< ›az®YÕNó¸ùHF£ಠÔv¿LòZ2óÑi¾£ÓóÕ¯g›ƒj3° +®q.x3µ³IZåCK£'}t_+è"d_%è9<.»æ¨äßÐô;ó¼4šŽFñº_ãöÝïÊ+'‚MÊýž±ËtŒ¹b®š[ÃCe +êÁ9Ëæ¼NMXò y¦ã‰mÃLÄ +zÔ)…Y304žm +þæ±áQ–k'…TØŠéråÄ-€¬’£CòÃF].‘OŸŒFäüâVÂêY÷©EH­ð“µG²˜hJ@Kɼ¤p\åÁoWR‹Ñ—ê +ͧb乸›ïDœz`Ø(?d_T°!ò»¯Ñ°øSœ Ù±ÍRo6m†„vºß3uEÛ`~sf„óÛÅ„#ý"4±ßx)†L…1ä±Få ƒ±ÑA{&…&J(J£„±·ø¡çåŽIÀO2Î ïù'dÉÑCÁ¿ÌxüeÞŒÕ!ŸHÄfµ}ûî ÙÑ„ù¡8P+JSv…s+?Ú?j>™‹Ïa¿Ÿ“!8Lùt‡5È€5€Xyµ,Áž-Ññ*¡"=+Fó*T#Ø«µ(xI‡Ä±s —/ª ”ø‡*˜üõ"´ÁS%Äò­•˜“zª6pôþS€ ¥²t +endstream endobj 1181 0 obj <> endobj 1182 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1183 0 obj <>stream +hÞì˜ÛŽÛ6†ïýsI!#’%]º{(¶Ø¤£4(’^(6½QaK%g³Ô·ì I¼ÉbÓ h Ö²,Îpfþù†Š€›Å³_ ¸iZAegT³Ø.~(Ï.(¶ !!Âø!²”ç¤*â‘„b¿ˆÐ +b¼W¬!¢HAq»xË®/.!áœ=;{ò^‘ñŒ57‡r¿¯ê¸ª;sØ–küVü„®”s•p¥ \èŠsg1l‹Ñö›C +ÉcV¡X5Ç®ªMk] -yª1&Í \ª<ÏÇÙ²ÑÙ€í3—ñìGL = ìòܦ!ü1ÎúèicRö[”‰ßbÙv„š§ìõÇMIW’ufã. ¢ÏœÕO˜ì¹è°þà’î3 †ª´¤/"v7ÞJã4Çõ/ñm÷Ëæ¸îà— Í¸`Æ›l½¿¦öΰ26UåZJöÉŽãÓBþ"σ0ÃTç¡Œ„»L Ð\3€þóñÿø£ÿ]ãÃWªJ¹ ÊE}íÔ BáUø÷nu¹ÛÁªºA¹¦$î@ [X™Ö`o*ÒÛ§@*¼i6¼oLß[©´½¥)ÐÔ©žÆêRS”‘ p‰\Q(Ç›ãÞÔ]ëY¢!·DœXð(¡eìS¹;š ø}$Žâس6‡Ñ¾Ô§µž)…ýòê£YWÛÊ´Ð}0P"»êº„C±2¬«š ìib×±Ùh¤Æâ¸mÓENÆ"L½oº®ÙCy0%í*ã*Ÿ¬ jÉÇ ÙÚU{Ó•; !ºA,žS ë´]w[ .,;¨Z¨›ÖM]›uGD„ððmïQæ’`6Ð5Öë¦Ún1:„Ȧj6&š+Æ}Îûâ)š¶~ö +K˜ä˜Aªàiñvf{{]2BRÝ‚äcˆeŠ–.ÃgÇý3³*)ó91I¢ò….lÌ>Ñž_vPd4&Z,x3‰3óD$“„'ÃöØòEqñâÅòìõóåêb¹ZW?ÏtƒûÕª¯¯t)‡¶+;CªäP`òÜZï6S9ÿ·É\#3wTb« …Á¡—iô’²÷(?ÍGLnr*ë ¬1Cï jئ)çùÄ•ÐbPDS¯± ¶4zM¹þp’ÕŒ%8ª¸/ísTÐnβ©·Ø×n¶CUCyâ(á8¯ÆÞuN®—¿^¬æ->ÙMPÒëZl̇¹’‰` žE,úÕéèæÕ]Ý•Ÿ­Ÿ¢}¹vgº cj_I/~i3ñ–UX¤ 4#ùß™¹Øñ¶Óû;æ(O[µS:¢3Çù‚mšãû]/(ÝëX +÷Mœ81¾Eþ†hnw¤ÐöJqå“ä±w3ù% DZœtXoþ1ô},|g'=ÚÙHà©xBàõq¤8ƒŽþÙaºpÒÄœ‚¤ÁÔóÙq9$2õl?àúé,¾#¼x ³-ÁïÓ™Ðkí…"Æc-uU:ÇƈÛÑ÷Ák‘+¸“°\SlOZ:?@^äÝ#È«tĵöê3òT·¿‰ÃoNø¥“¤¤µ½œeãt°•g(ÕsÜÒÈ桦ÂQ¤€ïçrü%@ž_]^~’8q†n°}÷ DþKn\ yðæÔó'Ü$âx=Ãõ=[‘`o¤Ó¤Ã`vñXN{Ó<(EÓçóþÀ»ð§¸ž†þý¬¾w¸9aöÔ[ˆç©,MÆz4¹eï㸯¶€Îéýò­Åö BRI{†1Ë ²ÀíÖµâð@‚‘(øÊ„1~=R]¨{ós½òûÃö$'´ŸµÐË7׳ȱ-óÉñBÄýžý¦WÈ{¸Æ–™¥D[î±úz:&Sùcrx Ž3Ôœ‰Pæ<ß9$¥ÂA!)°GŽILÝr÷¯•"C¹e.šÿ‡åÃÒýWÉ׆¥{C± ”8Ä’/½õ£äáI™±áíóOêtö +endstream endobj 1184 0 obj <> endobj 1185 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1186 0 obj <>stream +hÞìXÙnÛF}×WÌ#‰D“YÈ!çQõR¸pRCVIid³HƒKRÿ²÷Î I‘rš AQ 0`®s—3çž{)Nîf/~¾å䮞)I–’(UD2R™ÙvöÓjöâ’NVÛ„ÁxšP’D2ÊYíg ¬PÁ½Õz6§Œ1IV‡ÙÛàúâ’Ä4%g/Ξ=#7UÈSšå]•í÷yqG®ŠÆTÛlmÂ?V¿€+é\ÅTJ2甫˜¬ÎŨ·ÍÛoªp΂ìeÙ6yajkìb5‹# )+B…ÔZ¥hÉæ¦MT÷’¦"=LiBÎ="Úâ  <ŒÒ.}ŒLˆ.Fû³º!á\Ñ$xý°ÉðLÙ¸’ãQEHãÀ¿öÒ¿T­ïýKÂ!W©^ðÈÝ„g<‰ ëoàlU¥{²i× ù-LRÊãMÖÞ_Yxg°5+†` ¡’í(šîä_„kÎSÀZÏãî4&¡¢* ¤;~ùá_õ¿k¼¿Ä½“ å¸s¬Û;Ù³{þØP»Yæw@×Ér cM–¦6Pœùö!nš í*Ó×V"lm)ДS¹‘¨1Vqì¼®’ˆ&ƒÞ0.1Sæ’Ü™P¥·‡ë, Tæ1eH~ˆ²Z€ÒEfß9kmšj!ñæW¯· +ÍBx(ë‰h=–Á»p´³#yŽáçÓ¡¢ß B%”Ç]‹²å=tAÁ $¬Ù "íÂG äcÚ‚GñÐ;zæñÄ÷\h‡±L© nmeåÐçEÈ9xoCü¿RVn]¡Ã»ì©B‘·¸MÀ (æ¶6€)„@&òåUò.é8¡¹‹}”U> endobj 1188 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1189 0 obj <>stream +hÞÔXÛnÛF}×Wì#‰D›½’ÜGÕ—Â…“¶Ò HúÀH+›…D$ÅŸÔ¿ìÌî’)9mšEaC¼î\ÎÎœ9'÷“W?Þqr_OIR–•%D2RÙÉjòÃ|òê’Næ« „Áx–R“‘T2Ê™o& ¬P¦àÞ|1™RƘ$óýä}t}qI4ÍÈÙ«³/ÈMóŒfÑö¾Ê7›¢¼'Wec«U¾°ñoóŸÀ•ô®4•’L9å‰&ósoQu¶yoû]O¹ **À¹Ý´µ3v1Ÿ$‚¦ ä”P*¤1†P•¡-—KØ=„œ©Pƒ‡ ¾ ÝCH¹Ä8 ‡*k³ÇÀ„hC:„˜× ‰§ M£·ËÏDÔØ¥?!MTÆTGáµ×á¥jñ^þȸ†Te"ð‚+S­T¥ÖßÀ)ت¶þÉr·hÈ/qšQÙ`²þ¶ep;ã bˆµIÚ‚­Ôx#ÿ ܘxšÔf*÷§šÄ M"BÚãß?üç¯þw—¸w2¥wŽµ{'»*ä¡ +ÿÝPgë5¹-î¡\S,î˜C1ÖäÖÖzSb½}Š…„›vIÛÆ ½• +×[ PÊ1ÛH¤G8î ^OREÓžn—˜)óI®m,¡¤Wûë< Hæ)bXüe5¢)Ëܽs¶Ûœ»H8Ä*bvÇDÅjuW,í¬²ùmÞÛ›ý:žÿÞ³SO„”J)®ÛxÈÑíºÆÑS†äT“¼$ä´7£¨æºß7ÖgÍÞÌ/Þ¼™½}}~uyywu~1»…ÿÙüêç›w×Ã`€ŠMŸo7_:–ŒHÝäÝز¡dþ`‰_"˜ +A5ÓŽiÓ¢ž +â EM¶k™¯]8†¦â`a ¡§ù(/—dØ}´dWÛ%Ù– KòÒ=.žŠ”¦|<+²>›/†Y *ÍîP?«}(’×Û¥î8ì`IPV™ -VùÑCŠ’ä£}†aæ—²>ªëÙ¯·àÓcàLcq9µ] j”\­·A&ß‘úÑ.ŠÕ“÷ih¦l´,®` +:Í€B¹†Æx lbg/A{€u¹m¼¹) x.êÃß¹ê¤MU1‚#Íï±Üm@!$Ñ~]ãá¥/Ñ.ìiXv`º 7Znw×vèFQÁsä• ò'vub$*ë#oaõ·z«Ð< „‡m=rS£ÂUô!ìï€ÆU*‚–u»Ì@°JÐ9÷;d®à¡ +TP‰Ô>(e|ø4‚|X~Àôj ˜Èc^TuÌ\ÒaB8 ‡‡Yé¾Þ;›ÃìªÌAv²Ë.é²Ó:;ή3G@ IBˆ>×;ð¯ÇáyG.¼6º>¸ +;e˜¤ÙÉ®gº ,ã +áa`Uœ‚~À2DgÜ5–mOÁ6¼ç‹m¨Ðû|,VT'V4ŠTï(VL/VÐ~F»]W˜¨`ž'ÓA]KœÙ÷'ê”,H‚a ´z]"ä_«-¡ÿ#7¾É½*†J1V­$ážõO+’Vo 0.ÒSs¿ÍçP”à‚„²A[š¶â”Oßë–cIòŒ ü*M’´¾Œ÷5T$Ùƒ-Kõ<_T&r¤.A3œ›d48¿qf +P*ôöÜÔìfÛp۵³“ò+æÊ'7WÖ;<Ø£±"Rå‹S…gòFŠ«×èbG¼&NÒšéi-“üˆo»#¶Û°bC³x uïíÈã‚Çæ„2çá$Å€°PDšZÒqj 6…ìcŽßþ€GMßsؤ +ÝSsP~ƒ/.> endobj 1191 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1192 0 obj <>stream +hÞÔXÝnÛ6½÷SðRB+V$E‰¼ôòSdHÓÀQV í.T[v4ØR!ÉËòH{Ë}IÉ’§ÉÒa +”Š$~ÿçÊŒ¬&ïÞß0²j&± I¨H¤b"BRç“åä§tòîœFÒå„qÂ?X˜J¨V$! 9I7“¬Ð0‚{é|Ð0 Iï'Ÿ½Ë³s"©"'ïNÞ¼!×µÏU^µª³Í¦(Wä¢lóz™Ísÿ·ôgp%¬+I… £,–$=µ£Þ6ÛÙþTûã4ò +°CfÕ¶-ʼ1ÆÎÒ‰Œ4dSÊ…ÖšÐH¡%“[ÌiwÏ!iÊ£Ñs¨ –D˜‡s_mê  <ŒT—>FÆy#—.Ƭi‰Ä4ñn¿-2¼â^›/ì)pÕ^éSé¹×>¸—êù{‰Û5dr1Ç?XdoÂÂ’(Ñ°ÿ.ÁV]Ù'‹í¼%¿ø‰¢ÌËÉÆù«Jç Zcjb±9“®ÚQ´ßÉ¿ÓÚÔZùÏ_ýÿïÿÄÞ‰„2ì\ØõNôSÈÜþ»¡N×k2+V0® ·Ï`2Ë›À)pÞþð¹€›ù‚vÈtØJ¸ÁV œrH79Æ0Ž¹‚×ã$¢ÉŽoÂÐðMh“\ç¾ÿËûËÌç!ÞƒÏÌxŽ¸`^=ª)Ë̼t²ÝX®X]¯·ÍɶÓÏŽéÐi”P$Ÿ-)z¤=* ÿ(dŸ†d%qf¤5Q Ç f¢õ¦WéÙÕÕôäöÃìãmzqõþúòöæä6õÓßaDTèÁ~å|såÚÚ´Y›oò²%KŸcñ+aN2RW.'Eõ(Ñãš[#ÈÂUMæÛ–¬¡8!T +§Máà¿Ú‡ôú@–Iïò½ð«¸ájC¯H»ôldÃ슆TßÚ¢*³5TyAæhhŸ ¦>ŒûÌ"³Úñ5'Û&_ªœç$[¢DäÙüŽØ0ú Œì© ßõjãL=äÝ}¨ùzœ §RËýXðBÛTj+L¤(¡7#ï’ö±ÓËé¯g³‘NuçÉ qÁœ‹&Ÿc…¨3Ϻä… ú]nÉÎÍÍCÙfš-iÊíMul/28àð™ ¹ÉýØÇ" nÀõÅû⻩9Žm ˜¦eܰȺ1¨V=ª5'pªQ VÞi±„U{KxyÓ:··gvâ<òH w”1}èPÂq¨w8¿ÇÅ(Aáôâü|:;›Î¦éÅÇñð°]cGƒÌy´súþ˜kÝ»fc¼BÒ8”;¼HE¹]xí +¦(? 4¸J”…ì³ðÊ`NÏz£z¢Iï[»TÇ ÕXR¦^Ó Ç)úI:?;¤ÚŠ‚ˆÆG»pB5».–ÄÐrìU[Ò|ËçÅò´wPéžêááhúÃxÒS}î3 +ñÖ8@ÂZäh:TVmoxœ=T\¨ã%Â0¸DäÍ2HñúÓåxÜ4eƒöãéÄw產슯*¹_Ö¯-鵆&ÛäãËÊ‹šÕIçcRsjå¯äT¡ù“œzXO¸]T_<{æ£!3¢ËCü9x‹jûuÝ"î +ÁY¬;É–X>Ãi,ˆ½l½ÅÅ}wõqbNnGˆo#ss‘¦ˆzÆìlOá Oû®¶È›#|e@ÒBºxŒý? |ÔSÖ]KdÏ-nŠáÓEip’x7fZ d„ÌVŒÔ~Êá'r~Â…xøÄÚ6EibâÜ6dŸs3歌ɯUÛV’AHµÄ(Õc=¤ñåû¢Îá"ë˜\ (ì°ìN²§ÊyU–0gÀ{me,- é)|¥- +à1Ÿa +ô» + +)(Û?Ë^Fc#£FDÕPD¥Ñ؈hÒ‰¨´"j +z}¿~BG¹à 6†\)Ù»ÀHôÃn 5:D:霘»QûGn,BŒM$,Á÷d±ëµ\ï‰ó,Ö´0ûÉc"Õ¥3HÜSô²§ß»#ðQ •?@@ŸÆ À’!§HYý&Šg'ˆê@ÍTáцèp_šÏž Q[~`(ˆ<ÂßGü ‚?¿#‹|À =„?WÇS•ô¢õÈo]F;I>˜Æ—Ôôi‘ƒ¯"`׉ D®g¤çË€î¨Òáî‘Ìφ™d®Ün®Qâî× .o÷”.pÛ¦û_¢¦øSžáイkÙxs»_ë­6ÚÝâïx^Õˆ·î 1Tï³tò·É«M +endstream endobj 1193 0 obj <> endobj 1194 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1195 0 obj <>stream +hÞÔXÛnÜ6}߯à#…T /"%=nc»pᤆ½mP8}Pvµ¶ŠµdHÚ¸þ¤þegHJ+Êv'(Š"uå\ÎÌœC­ ׋×?] +rÝ-Œ")ÏH’¢8iËÅvñãjñúDAVÛ…„Ã?8ˆ,eyFRÅ—du»à`…ñî­Ö‹˜qÎYÝ/®èÙñ Ñ,#o^¿yõŠœ·‘ÈXF›ë¶¸½­êkrZ÷e»-ÖeôÇêgp¥œ+Í”"±`Âh²:r“Ѷ8Ø~ßF±,¡Ø!;¯ê²³ÆŽW #Yj 'ô!Lª<Ï K2´e³³ Û‡3“Ið Á”})€ä†œÀÃ$²ÇÀ¤B”Ú‡Xt=‰bÃRúëݦÀ3IûrãNH…ÇœÖÓÔ¿öÖ¿Ô®oüKҹЪ2/Dânâ­4IsX§`«mÜ“Í~ݓߢ4c‚–Þdçý5µw•±PqÄZJ“`'ɼ‘çQœÔy,¹p§šD†JÈpüúÃþêÿ×øx‰µS)X9>ÔN](|þ»¡.w;rQ]C»¦ØÜ‘€fìÈEÙ•0› +ûíS$Ü,7lL?[©´³e€R>Ã6ð¢IÍ„il_Ì’»—À+ +Úñz[Ö}ç¹Ä8CÐÜèÄ r”Â…´Þßžßïºhõçu¦í€ G¤GHQ«Œ)zyW®«mUv¤¿)I Þ÷þ½ýDÔlm @vŠëCiœIä‡Ä[ÜTÛí¾«š:†$ÀYDð§¯rWTm‰.Y˜P,%Ëô,+=ÂAG›av†á[cvjÌÎŒÙi=În4G Ž@Ì¢€¿»=ð¬ÀëyxΑ oˆî\[@ra`Šeù$éAâz ,òUX¥ %Xfƒèr{'Ї.¼n á }¥PºlkÙ3è.­K±¹ 9é«])À{VD’CX$K¨pÑ.A¼êº°ïU[8¦t ½¬"h&º)—mY\`Ê¡¾Í­¥ üÛr …IŒo;«qXиŽ5ñ¶ôе‰xÔcìå»Õñ»wË£Ó““ËÓ£ãåü_®N àT>YŸþSOý¤ë‹¾ÄÉbd¸‡îSÆÓGÕ{©{o€ÛÑ$øyÛlÊ];èvÐùfð•;_­ÛϪ&Eè-V05<üàólùûñE8bO—Ê[®8FN·‡¨Ù“ÎÎÚL@ëØ ör® ¹¢>\d…œþÅ8*`Q&¸çÀ±t…©›~46S Ý€>0­ô98ÏŠ‡r˜=»íe5™3 õ s r4én!ç»HÜ„!aÔ0¸°ÛBbéŠÛy—k–ÊI~ç€_•ë³f·@ uäL C—ê°E‹Ë‡º/þ²KV+9tMnÜOp +ÛTG`Ò:¾¢ ð—c¯9`p{‚Ùêv áÁ Ç}í(I³ÿ¸+}ç™n¤0ù§v={ƒxíöxð›ù1`L.ŸNø‡(!`C•*/õ‡‘x‘Â[Š Ÿ –r&3rJ33aÏ2¥)Lá0¥A](3Q"lkS`ʆjœNækŠÁ6|äØž‚&%÷‘@…5…=SÑÚå0í³{Z°—°î«ÖU"†–6æù¯#ÇýMaIqÝÔ54\ßØåË“§8Gúm@(ù› +H+ ÿ²ŽÊœ3“ B:×ÑdÔQ:Š+¨£ùTG¯£ÚêhætTÑÙ|?/¥¾ø&RêSSS}VEõKUôüýY¨d†‰ ÕÈÔÏýL=Ç]ŸÑø·»ä»IùH»ŸTÈ©øÊ6ceëfÖqß%rÏ}^å4Ó_Oº‡ýÁSš¦§šæäŒ3žÏ+~˜ œ€l¢iÆiZBEƒ½šYƒ±„íl"^.àÑé43 ìÌçöeM Kž³4?†Ç°;(Wa*_ +âø+Ž”Ÿ•.áïT.óª¾]¸€ žÕ.4TŽ[÷¡pᇠŠ~ ÆXâP»b¿lbzŒõ%úˆ?ùPHH­x¬»GÞüêïõÖZ5îñ÷Útä8˜ê1|—ÿ#À?³ +endstream endobj 1196 0 obj <> endobj 1197 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1198 0 obj <>stream +hÞÔXÛnÛF}×Wì#™Vî.wI>º±¤pRÃVZNh‰²YP¢@RMüIýËžÙ%)’²]'EQÌûìÌ™™sf%ØÝìõÛkÁîê™Q, +bƆ©€UÙl=ûa1{}.˜`‹õLHàG<‰Y¤H¶ØÌXáAˆ{‹ål΃ Plñyvã]œ3Ícöæõ›ï¾c—•/b{å]•n6ùöŽ½Û6YµN—™ÿÛâG,¥ÜRš+Åæ‚ £ÙâÔY {Ûâ`û—ÊŸ ÉC/‡vUî›|›ÕÖØÙb¦Ã® ãR%IÂx“%›‘<2ÝsÍe8zLe"æ‘Äâ0< ã.|òLÊÎG©[ÓºaþÜðÈû¸[¥t&½&[¹–Ó1ñ¶>×^ûÚûö¥jyß¾$Ý1±*#éB„î¦Á­(Œ|‰SتJ÷dµ_6ìg?Š¹ð²ÖdÝ®WnÛÅ‹U@`Ki¢í0œfòO&’ÄŸÇÀ:™Ë@¸SÍ|ÃÇXw|ùá?õÿk¼¿¤Ü©ˆ Ê\ÐåNõU(Ú*üw]=) +v•ß¡\#*n_ kv•ÕšSQ½ýáK…›ÙŠwÙöV$mopÊ3tƒMdTcëÒP” ðÄ¢PŽwûM¶mê–LŒ3„â–àË$DRŠ>ô¶ûÍåç¢ö¿h'ä:ÔÈ㈨Å!jså]ï²e¾Î³š5÷ÛúB`õ½Oÿ7·`¢rm}Û©@RãL?„­ÅU¾^ïë¼Ü΂œ©M^²]šWµ/B\òq@s)y¬'Q鯷9ŽÎpz«NõÑ™>:­ããèzs y3ÃEÿÅD+èzêž[Ⱥ×ywp®JÜØ1Åãd’lA +tïX,b⫱c•ALXlƒw‰½ž‡¨Cç^ˆ{]])Ò.[Zö Õ¥µà¡!uUd>îúóEêË™x@’ˆNa¶:vm·©}ãmÚàhÚG—ž>Í×öÎz¬l£ªÖÒz€…mÚ°[µÒ“°Õ,ݲ֌î+U !dÿäÃâìÇ“·'‹³Ë‹×§ïÎÏGh£TUâ> z’ï®›´É¨‡ØÚ—j_xKYEÂj=H¸ëŠÎg¨£5I/+¶Ü7¬b!zÿz?!`4”¨ò5‰1àŠ-Åq`sTX€&œˆ¿úÊø†ØØqaZ^³r‡ŠÙ¦]1ú_sèa“à-ümÆöu¶båv™±tMsF–.ï™[´w[q0ÒÄkyðºÈ¨ˆ²®jÞ—«¬û-¹ùmº6H\•›nX¾EFF«k>øîP¿ÞÅɯgW£E$O†Ч¯]¢Î–„ oÍ‹.8ÁáR&±E‡e®¶MúÅ~²XH÷MÂãÆ$:¡I :¥Â¶É¤Íç—#è1ãÁA7e—nÛ6ZòœÐñmCƒJ@c×)ˆ®ÜßYë¬é:C +“t!j‡â·ÃÀN¨é@6éxž.éД•«ÁóPT=èï“?BdÔÅ*ŽºîVû*=²ßx;Çk8EM*C™':vȈici1u ‚‰ ­ aÒ“–XνAìyÌYZe)«ïË}±B™-‹ý*³&ÉykåPã½%[v­¢ÔÂÛÂJ£ðŠ&ß9zéÖ×>‘À¬Ä]úZp\™=ƒPb9£+kÛv×±c÷ÃÄV±‡­È3¦£POÀo7 D$)[%$ Ä·+©œI#­‘!ÌÈL -]k9ÕÓëOdõÇ ô¸(ñˆPìIñŒàHìy‚Ó¡‰†šIJuB1ÄbDÈï:=»A‡qp:úÐb‘™Š D¢¾ þv1 ÍG¬ñ}Ëêv=Ò›8™··™g`SVÔ øØJÁ1 CC´>Æ瘅Õ#S˜Rc +302ýÏ(X Î”¤ê} […zŠzo¼%ƈ-ñÙ}Z½š412/å1 —_ˆoóU6á[De´x)ß +• Šø(×fÎ#ã9T´ñ°‹Jch¬ÔÑZú +Àx_|üƒIÔ €³ón`‚¢·Ãs»0Ó©m°O#k˜›T€‰N»úŒ~¨ü0Âû’~'8£éÃ-2ªd„èG5lãëÖõvžÙašq+·¢aÑç4©I»õ˜ÓÏ+ìÝšµÏË=sFŽ Ü&ß@žSô¢Iž˜vÄìûú{'yvS"ì¦DçbF³ØKÒ­e&Ãuâiø”›¯&[Âø¹IïL„+I¿mÑv¤rªÙnvÿ`U;„u +endstream endobj 1199 0 obj <> endobj 1200 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1201 0 obj <>stream +hÞÔWÛrœF}߯˜GˆÍ˜™ò¶±W)¥dÉ%a')9x—Õâba‹‹}Rþ2Ýsa•T®Ä©$¥*ÁÂL÷ôéîsFî¯~¼aä®]HA"?&A,‰ðI“/¶‹ÒÅ«3FI· ƉpaqD“˜D§>'é~áƒêð,]/<êû¾ éýâÖ¹X‘Æäõ«×/^wËb;õ]“í÷EuGΫ.o¶Ù:wKWB» +©Äc”ɤo´Å`°ÍŽ¶n\q8Ø!×ußUÞ*c«t!9$Ä$i( å"IBƒm©èTÀê%ÄLy0y à¡^BÈ ‰‚!!ð2ˆmôx0ÎíyhŽ˜µq=I#çýa“áwº|£oH×Ä©\:fÙ[³¨YïÌ"®¯> !T!9þ`~Á£(ˆØÿnÁVSë7›~Ý‘nSæäÆdküÕ•q™QPùˆ5ç2²`Á<‘–$®Ô‰Ç}¦oCâJ*Bìõë/ÿúÒÿ¯ñá'æND”aæ|›;1T!3UøÏuY–亸ƒr°¸]ÅØ’ë¼Í¡7ÖÛ— x˜o¨mLÓ[W½%RlsI†3F!Éɨ’ 1@:ð@™¹@D¡óà2l„»©!Ý.ëÈÖåüªñQYÖ.Ãu÷¤èH_uEIÌ–º'í!_Û’Uu·*1|ê‹i!Ö\ä£{gy™®./—o¯Þ¬.Üôó‘à /I¨÷ø¸:^{пL„#r3M Ú.ëò}^u”hK¶¤Ú“Ezq+’½u>¸ú×¾ØË>ÿ~J¡‚úòÔýå‘yë\ýrþfÅ&gTê—Èej÷ËÙö0œW6øã6TQ~µñ´n¨Âsu3µÈhÄGu†”Ù@¯3Ræ1¨ËˆxtÆ$A0 ëeݹwf€‚–øÏ?‡ghkáX?Q NU·™Zã@Çã ñ,þ”y ÓûY““uß4PVåiûáƾŒP†(9ßBp;@E«Ät®¼âèܶÉä°‚x_™Ç¡Ár[‚ªOŽòä™ðƒgѵE±¶ÿÒ"@ºº.[rÈš6W wU AËï©=‚wÎ8ŠŒÔðU'cä½ +DÇÊ·÷` ‚ ´ÂÂi–0äTUvSlòe“ggH:ÂÉÖdbRbGòCg"6Äçi®ScäXÍ=1N=-Ä1/ !ãž°Õ `¸¼^-Ï–¯Ó«ë ˜PáziKUêR‘TºË§…ͪö¯:ó%*?àT¸.J{$R´¤>tE]e¥Jï±+Áï”…hh¨ó)'}›oH]Á( +@süñúÄxômÃnqÞ̳õnŠÀxϨm°8L¼­7y9 <™•¯E¢¯FOµ¤¨H6õæ Aãh,&#Ú»Xþºš",Ž-hˉm¾FجðXš„! §°ió7U—ý®–§)·‘$RÇxƒóq¨4\· ša HT™»ÒÁ†yȧí¡CTo|tô€C1Ï8 ú8nÁnêþSiKOÚšçL&6ÀPƒx £‡'¬ìñb¾1†ÓzfÏÈôè”뺂Ù} çÙeÍwdSl·ïÛüª*>º3¢w­ˆc$ Óµö”`àÜõX¦­Ù/yG2'W¥ÿŽœÏ8ŽŸÈøc&ú8ÐB΢èˆXd›Ï=Ä»w#×zþ•]qPgàLÕÏ)u*ÊU´ö ‡(4àæ€#øŠsA5j!™ª$’}ÞAï ZÉpÖ»£Ñi•ë¾ÌTáMëvÂw×˱éQ&øÈÇÖÃÒ‘@aèûÎÕÀΆžÛ5 Œ®•¹[G-À ­ŠØ`2‘‘7ð,n=nwu_"Ï°–tîwy¥í×Êì&ìÃL0<0‚ ÇhuµÁOh=þ&züMpü…¯@dB¨à +Ú ÇB³‰»g§i§«ÕIæ¾UŒpó˜äà -Yx2j]¾¿˜ÁÁd¦H7àeP^8©M°Ï#ÌC,Àl¢¿.v˜áP‹0âá! †dÔ+Ä×Yçâ‡IáÂôŒsø|ñ¹öª²˜qÌïQŽAÔŸä@>¡ 3]¼^¦çWSY„ NåëáñöT’'¾á3䛹N×lîÚÔ˜€ÉŸ·¼…+6»UiÜ?2õ©918é'+óˆp4øNL¨Sž`R÷²ç4˜Ï eìjý¥x¢28Iù7õ˜Aÿˆÿ¨c`“ùtL®ÒÅŸ (É· +endstream endobj 1202 0 obj <> endobj 1203 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1204 0 obj <>stream +hÞÔXÛnÛF}×WÌã2µ6Ü —ä£c+©‹4d&Aô–(›…D¹WŸÔ¿ìÌ.Iq)ÇIPEaÀ\“ܙٙ3ç -àvòüÕµ€ÛÝÄ(ˆÃtb@…P“ÕäE6yþR€€l5BüÁ‹Hbž&«‡²Í$D+<Ôx/[L¦< CÙÃä{={ OàâùÅO?ÁÛ: OØö¶Î7›²º…«ª)êU¾(‚ß²_Еr®"®L&‚ìÒYÔ½mq´ý¡¦BrÍJ´óí¾)«bgͲI¤S<‘á‘.Uš¦ÀuB–ìÙŒä±éžã¡¹ÔÞsÌ ¥DÙ‡xæ>#©ÍC +øP'Ýñ)2)»eÔƘ閭ÇìÝý2§•dM±t (éš²*àk_ûµ}©^ܵ/Iw E„gUFÒB»› ÞŠuœâþ·¸D[õÖ=Yî ¼â„ V´&w­¿mÕ:ÃÒØ\…”l)MÜe[ëq%ÿ‘¦Á4Á\§S +·Œ 0Ü0€îúý—ÿüÕÿ¯ñþOªŠ¹ Ê…]íTBÑ¢ðß õ|½†yy‹p Ü@0î`^ì +lNExûH…7‹%ï:³í­XÚÞ2È)OÐ ¾hb3 ‹KC§ ÝÏ‘XÂñv¿)ªf×’‰q†ÜùÄ2 #Úƾäë}d¿)GqìY›Ã°O_ܦ±ž(…ýr}_,ÊUYì ¹+ Gòªªê ay XSn-ØY0Å®Ýc³QYF‹#ÈøÀ6r ™Ú•ËaÐÐ4b˜Ñ¼¶Û¤U·Ûã@·9lWÖÀCY@šJÁ§=kîòÊTÛÛª*ÈBÐli‹mzz/6Exl²»,W+< +2ƲÜ. Œ ÉÛw•R¤¶Xv…õŠRL—+—=æºX=¼Î²C Vª ¶Ò¬¾¼¸Ø×5í²¨vesðuÀÃ@d"²ŽF-Ãv™Ô­X)H‘íÊ&˜jb=[%":Á µ9»šÇé±&Dq-”Æón>Ÿ½É.go®¯²FfÓcž¤eF»&o +‡ìΡw„1€Ugÿ+æžvæmXÇ>#OTÉí=â­Ê×®ê(Å ÷˜fÒ"µòj ‹¼‚›á‰åßVëþZPVû‘ L¡4„ ÿõùÇÙÜï›qÀ­Úxe#wZ´ `‘å©m¸ng|tq}¨šüO»%Ëd—øÔ8Ñ¥é.âKY>h A€-11ë"0Œ°v(|lám„×gæ8“‡ˆ)Ò¼ü7cS T/ðµ»¼~>…PeÚU>rÜó‰!\§†Ý·ÃK­ÄR$z;¤ªQÊ%ÔÐm<[n÷7ë<¦C©æÔërŠüE—±kJj:ôü9ð’ï5”FЪ3ÿ=\:¤Òæpï3)€‰¨ƒ`ÒiÑi*͘N©i£¶QED£Ù‘4»^§ÉÈå…kqX¸út76íµ9u|̵>AóùûÙüüÕŒ{YŸJXL2¼vÕ©èF‚t<ÒAÐö°‰ÇF¢#y·)s‡Ò¬U ÈŽxÄÖØY5Å{­ öQ IšÏz›š»3±^·‹|s¿ƒ{œ™»' #\TÖ‡«•K!ÂÖ$cbéªÚ͹èfÐívö¨‡Qú#.ÍIúC/›jâN&ÛTžõ ÈÃ&À‰_±}€¿°e;‡” ß)’…xœåYŠøP.›»§X^;.#îô’p¢Œ£ÜØÁ‰“,ÇæžUMð|a§ÅCΗ]—Ôݧ òp‚Õø¦â*üŽAÝwŒèˆß×^L_êÔW9õH}³?$Ëoœpðè£üºKÜá¾Â6>`•0)NÜWÙŽ„Å+‹âIz‚…ìüÅëêâüjvíe©wPCÓ¹’]ÕwÔõB>îêOÆC`(iÆžH}ëâ=Ž\K(WšæüS‰¥£ÎÇ8F‚‹âÐ}¸ºÌ~qª?±'òv¼ÃR¶Š~ªp{¿1ÄǸ•¾=ËôNÉg:ž™üÙ@ILÖ?œ $v‚ÒŸONƒ®ÄÛ»¯Ív§'’ë05'Â\í73e´H—¾‹úPqv‰8 0Y2Ž >µ“Á3Œp4”º”:‰¢x2ÔXcÔ÷N‚þðããA«›:uÊIyy„û צOþÁ`‡­ã©édXÐ *b-CR`ØƉ)²Ë:rƒŠG_LÄwHßlX:„Â& Ñ#ENñ7à7«ÆG9© +¿%bÅúØ¿Èñiš +endstream endobj 1205 0 obj <> endobj 1206 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1207 0 obj <>stream +hÞÔWÛr›V}×WœGHªÎ…ô-µœÆ×ÉÈ$žÔé‘°LGB.BuüIýË®sá*Åqfz™Æ@pØg_Ö^kÃÈjòâÇKFV»‰$ +b"cED@ª|r3ù!¼xÅ#éÍ„qà'G4‰I$p’n&¬Ð@â^º˜Li‚¤÷“kïüô iLN^œ<NÞV>‹iìmWU¶Ù劜•u^Ýd‹Üÿ5ý [ »UH… SF™ +I:³ek›u¶¯*Ê8•^;d¾Ý×E™ïŒ±Ót¢8bR4T„r‘$ ¡2Ö¶Lt&`ó1S.‘½@˜‡¹MHbÒ<”q½vŒóÆE:³]Mü©¢‘÷în™é+îÕùÒ^BŸ¯ôiè¹e?»EÕâÖ-âö°¡ +Åõ&íÍ·"%xÿ-.a«ÚÚ'Ëý¢&ïý(¦ÌËÉÛo[ºÍP“ª@çšs5É–r\È? K°[ŒT'S0{_QåÒœŸ~úÏ—þ·?uíDD™®\ÐÔN´(d…ÿ¬«/×k2/V€k¤Áí3€qGæù.Go +·?|.p3_Ò¦1]oEÜô–¥tl£Ælƒ…*R#¦:È@Ççåe]húô·Ž@$ eØå$09éqqÿüi&=ry—/Š˜!¾äð¹¾Ím~™ ‘èYj:CreM!:‰ë}N¶7d±¯*xE–y¹+êrãóO·zIåÌ2Å»±µ›g‹[²sn-É}±¬o¿#EißGßÓè(Ejú‘ÖĦX¯‹ls·#w`ÇM±Ðì Ñ·¥ö„:Îmè]hN797W:íœQ¥tÚ©ÉœËøµ·ÎoîÏ3Ÿ(ëƒÏ4ñ€d4ýÌN® +_Rá-5EÈãÙe ©¸S.~Cí UÔÚiî¡6Ž‰³Z›‚Æ‘KeÐÁâêl–¾€¢_ÆÈm'·ÙÕYoP6JÒ¦øí ’oÝ‚µMÆ[bÄÿ¾/*³MLEÔÇ‚jso¢þÅ A¦o»w°x qïÝëmD˜ÀDö¢šFP}ßT*á1@ÙXmÉrTøÄÂ{fÑ=ˆŸIš$ãH4x"Ie%Úg!"ùΟrM!Y¹$‹¬$Ÿr²ß!Öm¹~Àa‘kg³±«víi«WAàß»ùéE:;½¸Ó7é0Ò)fi kn×÷‡ñ‚(ø·å´§/ŠZÅÆ»X¶êCÈÌÖÀ}QåV¨t!¢`:¸zFºŒ•æ÷×ÕGȸ§>ÇåGiùáF|b¯2ó¿onõˆìÎZÙir Ù@u˜Sæ5ÕV¸1J“hÂìl~z’ž½¹!Möà!ZÚ‰,íh´ëæ¿9ºÜôæôŽÁv;„ÀÐÁ0sdz¦:×aúüå‡Óù•l8W`|QÛÒ eßo5&×Ç“"’ð‘m²2Å°+*õd1MGŠÑc¨h­CzŒi+€a¨F½b n€â=¢V}™ Æ…|<ÛÝWd> endobj 1209 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1210 0 obj <>stream +hÞÔXÛrÛ6}×Wàl"„x}Tm'ãN’qmµÖé#A2;º¸$ÕÄý£þeÏàMv{ÒN§ã‘ÁÝÅîÙ³–l=yñêJ²u=I4KÃŒEYÂtÈ*3YM¾O^¼”L²ùj" ñ‡‹ÌR‘g,Õ¡›o'!¬ˆ0ÂoóÅd*Â0ÔlþarÍ_Ÿ½d±ÈØÉ‹“gÏØEÈLd|¿®Ší¶Ü­Ùù®1ÕªX˜à×ùwp¥«XhͦRÈ$fóSg1êlËÞöOU0•JD¼„v¹?4åÎÔÖØÙ|G9v”ˆ8aBé<Ï™ˆ2²d÷–(‘&íslZ¨hô9¡”hû{î2’Û<ä £¬Ý>E¦T£Š}ŒEÝ°`šˆ”ÿp»,èNñÆ,Ý +éšó] bî—½ñ‹ªÅ_¤Ü5”1öªE_èÞþˆŸÒ(Íñþna«Ú»'Ëâa?i&$7ÞdíýíwÞJcsR²•JÒ6ÛQt\É¿˜Ìó`š!×ùT…ÒÝÆ,HDÂk¯¿üçKÿ¿Æ»¯T; +I• ÛÚé…Ò£ðß u¶Ù°Ër ¸¦î@Œ5»4µAsjÂÛÒøÑ,EÛ™¾·Re{+§ôt“Ó ÆYÖóLLû iküC¹ln‚ùo=u€ б]2ÜbÜéÈÓÆÕ­Y”«ÒÔ¬¹1liVJ\qØ4¬Øe(2pOo¦Í©N3g†ØËzgÍžjìp[€Ê•âCñ´åL$‘3Q q•Y6ESÄdÔÀèQEœ°fÔ¦df*s¡Á(G„hÉ–¸ÆGDÛÙHYñ»ï(4>µ}QaD ˆM<Ѷœ®‰Èmží¥Zk‘R²ÉGÒ¥úšoÌêÃë"P!ö©Ì†8GóÊo mسÊc6W2ŒÉì[„ú=x’±tž™×¬Øµ±ÆÎL$b9(‰Ô= f—g³ +‚|X¾¤ÍUb׳º)³5»F°9ÒæÞõ~,åß ?ë"8èøRê#¬¬Ùþ¶)÷»bƒM-­3d/ák\L¾ÀîßÂÕ0ØÜácaX¹cÅ8Ö©Ê„cðëÙÏg—£ˆõ1žýȲáš…(Ü S a-T¹´7u·kŠvù|®Üú\䉛tCãXÒʃIÙ‚Qç4lc‚„œîŒà {ǧ‰PÚm©&ìé„/÷‡÷›¶PI %“¼m°Øm…ÙÆ;vÁ)‘„YÔµ£‹†¿ ØhË#¬êL °ÚÚŸAÅh̾õÊ[{ú˜0I‰’uQP,cä<À +Ö¼%ë`šGp1ôR¹%Ï’À±’oÙÖ4„©Ê†Šm“Ñ×Ê—šì"»•ùýPV€”å*M\¥[®‚ˆ³ï˜Ûýæn½ßÕDJïÈ‘d}i»Ô¿§ï–IBjÜq¤` úR1H†?wôA¸^–hÂøaW65«? mKÇŘÙ½^!Êûvu!"KDu‡`‹!Àn,k)šCQËŠÄ/T™–b“#ŠÕ]qT˱…mèu C»ª6RKêÏvl‹hX‹–æÂÈuê€Âap vHäpsG.aû9+Wl·7¾™¾ORoÎß^ÿr6BvÜ¢MvÕñP«€¤Œo0,¨0™ŸSôæÍÀ:t°~6~Rô­ý¦ÜÕåŸf<§€¼oƒ¤,÷Ó ‰<×¾–‚¯Xq4R‘DÌlÇÁ Qü…4ÄDc¼G: ”^N¸ÿL*€¸$¡î9+Æ$mpðÚâ8aÔfëÖ˜†™MVuÖí8{ZÉGíÒqýþàù„™Ç=¤"•œ´É½æ£”jÍÅu‡Š"° µŠ“™3Ô«íTGêT‡lUj ÕqRÜ‹ÒRÈgć’) æ||I~a aÆñÔ·éÉìbvr>Ÿ½=9c'g—Wߟž_Í/ó{­îGÑDI/kýÍÜß+±«#ÎqA½u!•‡æ§ ‰+j ÒøѦm¯ðÇЪºòGh™i/ž>!fppŽQ¯S4(Õ4’øÙ¢òSÊæš/@ [`áMQ}ÃÆz‚ê®îkœ…9°O‚=][èwÑãd˜Fé ›`Õq¶»æPÀF’BÓ[µÆOÏg¯¢x”ñL¨øâ +ýaÆo´·§OÅÓ¥±cb G„´¬!‟þ¿Ãq+§Û +'3M'!SUíɱ׽6¼žÆý€²QKýUaãõAÜÿ@È8ìþ-À†r¼ +endstream endobj 1211 0 obj <> endobj 1212 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1213 0 obj <>stream +hÞÔ˜ßoÛ6ÇßýWðQBgV$ERzÌ/ËAªnÚ=¨2mk°%O’×åOÚ¹;þ-7-²Ã0(eI<Þñ¾÷á)Œ¬g¯¯ß2²îgJd$Í éÌl5û¶˜½þŽFŠÕŒq’À?X¦iž-špRìf X¡I +÷Šj6§I’R|š½nßI3rùúòÕ+rßÅ,£YÔ®»r·«›5¹iÓ­ÊÊÄ¿?ÀRÂ-%©dÎ(S’WÎb:ÚfGÛ?uñœqšF5Ø!ía¨Ó[c‹b¦8Õ +bRT*B¹ÈóœÐ4C[6:°}1SžN–à Â>„Ç Éí6ä¦Yˆã<¸È¥w±ìÏÕÑ»ý²Ä+ fé.Hc51•‘íοÔUÿwcÂ$„*ÇxmG¸¥SÃü{¸[]ëž,Õ@~ŒuFYd¼ÉÞ¯×6~1Ȍݪ÷šs¥Ãf§éy"ÿ$,Ïãy[ÏyÂÜ¥$±¢*"$ŒÏþóWÿ¿ÆÇŸ˜;¡)ÃÌ%!wbT!ó*üw]½ØnÉC½¹jwÌ@Œ=y0½Ú¨·ßc.à¦YÒP˜¾¶4·µ¥)_¡ ¼¨´:!Õ¥Â(àpE€ׇi†Þ³D9C n8± AFIœU徬ê¡l=ůGòL âÇÍL¤ßÌTh·ÖÛ½©êUmz2l 91CV1×f‹ÕÜSV—!&-ÒÙôør&UæLö¿ÊÎCSߺ!ûºjW±Pº@UñÁ¯eOöÀ9kvîí1™ a¤š VwuÕµ uA†½ˆo»½ö +vXæ‚jÜ`Ô ?ÙÛ­‰¤yõ鶌yÐxŒa,TàGg‘§r³¾,÷w‡íï먎A û­}Rƒ&xŸäV*‰>ÀÒ–œaw¤Ìñ9¬Xñ<Å•íÖ#ÁXD¼aé §ô´Ü‘aãˆ./îïÞÝ7÷·7‹‡IÆ5Õ¹<™¤ƒÚ£ôC9T%ä|º¤†DÊ—®™k²ó5IÝ»%œe'* +„V"uSÚýP·M¹%e³]6^% #éì,Í‚R¬£ ¾Þ,IÛlá?Ð2¨°$Îe'K(ÏŽ.³c˜·?Ÿ…Çi> ‡åœ2Io*ôu*J8Ü(× gä4n·ÍPþaçw“rš+wãžÈ cÁ½¹ÀÙtìTühœhƒ^áöPï· Ò‘#*Å +À1Áóýj-ÛÃÇ­ñû¡‚Ô8SyȇtcêØ%A?ÔUmÓ€&NÑ+h\ØyUz-Á Ü¡%eUµÈ.΀¶„J'õ±‘qAx)`Ò!­­ƒUgÊBÁŸ ÞíÉQÀÆžÈWÌ°eóÁ˜çH¤Æ”ÝôΧºƒž”¥p‡z|™ÄB%T)¯`G†S‹Å)¢˜A; ,dGs ñU]ºGkì +³è®nK¼ÆYæÖ4k¤tmÈWÀ,P9Nm,Ð&CÏF*g®ñî‘( p +—WÄW7×w7oW׋ÛÅ›ëâû©Ê&ä{žéü90V/]7Óê) „õd¡~¥øtYu:?‹«é(ôäkLŸ§-¿ §Ä(RLè[cE¨¢#LArk/3å%¶ùàÏç?–"0ŽšÅqØœ¡>âXÆž‹RÎ’Âѳr N¹8'‰R4ÍOÎi9vã¾Ûƒo/)3ÄäPë¦Þ¡ÒRUF;²u‹ìIùš°>¸ö3G²A¿*C÷¬ZÍrmbh>1!б7îçch$›“FrÚùú¯ˆTΗfãËQgÌÔ>Ú:ŽÍÿ@6P;lûÀõÍpžÉóµÝ°[¦„“ÚÆ3lJ¬:;K=Mât¤‚õ ûä¹íMKükM‡ô}Þ*‡0¡ZhØ¡_Þâ™2å˜Iy¬œ/&^ž +ÐV#|ëü%Àðkœ +endstream endobj 1214 0 obj <> endobj 1215 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1216 0 obj <>stream +hÞÔ˜[OÜFÇß÷SÌ£­ÄÏÕžGÊ’”*­lÛD¡fwX\-^´6¥|¤~Ëž3Û{Ð&mU!aãË™sýÿÆ0²œ¼ywÁȲhAŠ¼$²ÔDädc'דof“7oadv=aœäðVÔ”¤9Í9™ÝNr°Bs ×fóIFó<dö0ù”¼?yK-Éñ›ãW¯ÈÙ&e%-“õrSÝÞÖÍ’œ6Ý\Ws›þ2û–~)E… £L+2›z‹²·ÍÛ?oÒŒq*“ìóõ}W7¶uÆNf% D¤©Ò„raŒ!T–hÉŦ9-t¼AS.·îCN0%ÂÝ„˜ûŒ—Cà¦,cøèçÑG®‚UÛ‘4Ó´H~¼[TxÆ“Î.ü ©ñh’&¥* }ÚÌoÂCÜs¦ V¡9þçx„{¬…÷ÏàlmÖþÎâ~Þ‘ŸÒ¢¤,±ÁdÖ[7a1(ËUŽÉæ\1ÛRîVòÂŒI³rm2ž3ªHª©N‰Ç—þóGÿ¿Æû?±v¢  +—ÇÚ‰¾ YèÂÖÕ£ÕŠœ×Kh×›;eÐŒ-9·­…áØo¿¥\ÀE» q2ÃlÜÍ–MÙ—ãÇÁ㺴ô&Ï Fšû Wöúá}•òÚò1e túž%§ +©ßšå´®ü­%NK™œÕÝü†l‹Ï s¸¤,(JÏ­O(®Gû™pêS¢ö´¤ŠV”·>+å‹’÷^&ÓÓ£wg§³ãoÓÙ¯c¹“Cù¼ÐábÒ½BÚ®êì­m:ÒÝT™¯›®ª›–¬KîÀ4Å$fdƒyá=½!P ƒº`&V÷Ö[«[rßÚ¹NGeNá׆\­»¸o}LT¯Ê r¯˜×eec©²…]¦,]ÙXKªf¹Âß ¨ßø–3 %åBõ—<øÙ¿·¨7ž Šj>ÆXXµÐÆ¿1ïêuÓ¦Ø# %³ès_ ½ówêP†Ò¹ZßárÕÊÅ’c;°ŠÉဠïfÕ@ÁVäÊú„¯›¹%u³×7@3œÛ]‡ß}<9ßrVŒÊÝ/ëMZëCÉé5i0ùõ=iïì¼¾~„ÒB,¾Œf(÷M÷ 0âPš2o¾N3NE22á4ëndo7í` +:£o…ŸÑGëgÒãÒà‡Ó 9ÙŠ†ÙŒÚš•q4bqâ(–àˆgØàMš¹ÉgØæ48Å¢SÎ^Í7”ª’|ñ£õ;q.ÌfÜ¿d¨Ñøx’ ¤¦°)I@лÔ÷꣓Á]&p=ˆ5—;Øæ¸u˜N’Åúþ +ú݇­cÏr¦CÜ4W¹ökà®!4áÁ¥Ê×;ªFo¹ÎI.So–6itؼ Yø”mp’D²¼ÇŽocQƒ_°M€>Êû%Sªdq¨rŠ²Q[…Å*A”%îA.\Õ ¡ØE»*õum +ÛÆrd.hŽË³ÁP0^Ž@Á4(ÚZU)ìPuâÚVCOàTâS;q€5­•¡Êyy4ƒ¦p ¡#Ô°5…Gq¨ñFÝþzdž*ô¯ GÅùâ{â·ÍžÖÞU›´¨W/öìhÍl4¥áO¦ ¹Ób¥4,”)–œí`£gÒ»ìéñ68#”#+‘ÈÔ†C|€f?kÏgLìl.vq=ð &¸Š3í(‚è"݃>`Q{`)âjNè“Eœ=ôĈ®¾wžâIT‡¶ü)””O¢Äpµ=¤¡ôTŒ‡ + P18·&y Xài®ÔÁ¯ÃÏ@f+l¬û-:ÎW(OÉ¢Y´'‹ŠDUã­~!`¸1THLß‹ó.÷¢rùõ`S-ñ Õ¿0‡}ôüšÛ{œ¼ö}Œ@‘B~ G`ΧÏCö'¥`/… Å—PVKÌÑšïOž™žƒPnü:Šƒ h)nÍ{U»«ý¸ú*u`˜› »HÅË­Í-þŸ%ëÖ™?ƒùª"|°g¹ÍÓ–­8ºW¶{Hî-v> ¯„®¢‹CnÛË”ngÿM³µ¾Ñh`±¼‡“ˆŸÏ` +’(àKSì$1`a3Jääóì‡f¦:îðÛbŠ_²qàöS‚eŠô—‘þܳ_ƒ[•{oîÄ=Ë3܇é÷âùÁqvt|úû­¬BŒŽz­lcšc¼Àw>ÿëË ¥þC¶ƒK|Ø %ñOm}v!-¯¼GìïÛÝįî¾½’ð¹x}‚–°·“@¼–}Úð%¢‰¬Ä—Nf“?¬Ø« +endstream endobj 1217 0 obj <> endobj 1218 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1219 0 obj <>stream +hÞÔ—ÝnÛ6Çïý¼¤Ð™á‡D‰—žãtº¡H´C² Õ–e ¶dXò²<ÒÞrç¢,¹k’®†!@DKâùâÿüH RL.ÞÞ +R4­HÌ&š(Nùd=ù6\\ "HºžI8üÁE$13 ‰g\’t7á`…ñî¥ËÉ”qÎI'÷ôÝâŠD,!ó‹ù›7äý! Kh]²Ý®¬ +r]µùa-óà×ô{p¥œ«ˆ)E¦‚ ‘ôÒY {ÛâdûîL…d!-Á¹©mYå5¶H'Z²XCNšEš0©Œ1„… Ú²ÙÙ„íCÈ™ÉpôJ‚/(ûRî bl ‡aâ³ÇÀ¤ô!ʨ 1kZL5‹éOûU†#IÛ|å¤Ä«¡UÀ"Ú½öC÷Òa¹é^’îÊE©*-ñŽñªàVÆ濇!Ø:ÔîÉê¸lÉÏAœ0AóÎdÓù««Î¬Œ-ÇZK©c_ì0<_È?‰0&˜&Pj3•\¸aDÍ4%Ä__ùÏ_ýÿïâÚ©˜ \9î×Nõ* +ÿÝPgÛ-¹) kŒâˆ±!7y“Co*ÔÛïTp3_1ߘ]oÅÒö–¤~ØæÎë•vNC&…6n-¸v^°ß)˜Å š¶?«Â1¯zÙMæ8‘>Îúߖﵸ§3À«bŠÇ]^µ é˜ÚÅM.«‘‹-4‘u±ê³-œ/ÕF>Î?ÖT0 JÀÛí>_–ë2oH»É P½Üa’A +’îHãÌ»p„aRŸÄÊmhW:»Ùv["¹<BXÕu cÕˆÉÉHMWyŽ¿‰/å$« +\ ô1!$ 6Þw^šM¶Ï觬«’¯±ÂÍ–ÙŽ Ò¨W'¸ëXépã¥`±­~$>aÀ ÒVP'¦ô@­¢Ü£Ð;÷`ÕnÈxÛ-ph¼æmÝ=‘µÖ.»õ%nëk *©È™R,‘ƒ2ëS·\^ÏÞÞ]_¦ßÖv\ &ôîâÎiÚ¬ÍQXŒ¤›üÌ]ÌP_àOtþb/„“?R6¤Þ·em]ÂɃ& +Ñן‰U¶1¬È2«È‡œPP]mŸ:mHØ,ÝÙ¢ßí\ÿ bq]-sRVXSrä›»çäù”â»Ù/‹›Qz’3háUnc„Üò%äS12êo({ w¢qhŸƒ¹Ôªôë0wW‚(ÜÿÊCÃxÝœ!:Ž^‹8«Aü3Ê…=ål²gL†ŒS=ãtÏ8-Ÿcœ²ŒSÀ¸Ç²ïf \¥íÕ…-|B‡yqÊ!NA؈85@Üáœk +õµ°& gÚï‡b¤‰dµ83ˆ3> endobj 1221 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1222 0 obj <>stream +hÞÔ—ÛrÛ6†ïõ¸Û +!Îä¥+±;Všq˜¦¤ŒDKìH¤G¢âø‘ú–ÝÀ“§n“L§ã“"Ýðï·KNV“'Ï_q²ÚOŒ$6NˆJ ‘1Ù“›ÉÙäÉ3N8Én&\þàÂËÒ„X³Xl;‰Á +‹<Ë“)‹ãX’ìnò–^ÍžÍòôÉÓï¿'/wOXBëÕ.ßnËjE.«¦ØÝä‹"ú=û \IïJ3)É”3n4ÉνEÕÙæ½í7»hÊS´;äº>4eUì±Y6Ñ*…¦ aB¦iJ˜JÐ’[›Ìšö=,š 5z{‚["ÝKXs·#©Û‡”ÀK•´ËÇÈ„hc:ĘïM ³ôõí2Ç;A›béoH‰×”VÓ4 ›‡A»Å: þs k•Fà¼Ç«‚GVÙæ¿„[°µ«ý›åaÑ_"›0N‹`rüÕUpGãö*ÆÍÂØv·•:>É? OÓhšÀ^§Ss«Id˜¡„´×Ç_þó¡ÿ_ãÝO<;iÇ“‹Û³“ +yPá· õl³!×å +äjQÜ1îÉu±/ 9%êíC$$<,–¬ÍÌ[V¸Ü2À”SÜHdŒ#Ž»ƒáÆ*f{ÞıŕÆ~‘›âæî*D AÜGœCh¦èÞq!R´Z]x]ESA×͘9=ÞГ² ‰³õûˆnX— +: "gOr¬hoBÕÚŸEÜG/f—Ï/²(û£w'™é -‡tnÙ7ySl‹ªa$[ÄO >`›Å#}èT¼¨°ÝØ )÷¤¾mʺÊ7$¯–În¡¸™¶;@yEÞä°/–¤®6÷ðoácœbIPÚ±»ƒIlZ¿ÆM/+ܶáŠ8KÒ>NÞ/êêì·ÙõhM‚¥£5‰Öv»qÅ×Áü¤ ¥©bIQI&ú‚Ò‹‡¾º¯šü£›’eÂÏIYj<èñ4¡A}Ò•;tçNì-¬¥!›"2Åw_x©9­@`†¾£>IY ÂB5ÆX2Î'tYÞoÚƒ5Þ¥b‚›°,Ö~ßÞR, â¥Um&.NÍà˜è»h´ö‘®µp¹tÝ:8ƒº,æ«Ša‚‚Ú °»˜  ¢‹µ_Þð\  +KÓ†ΰõ;|[,Ê›2¦9/KjæfWoÝ'8ˆMéÞ†ðÑ5õ-©oܨæ5$4æ5´Pêí&¯ +ÒÔÞ +F> vÆ´A'®y ïë¦ÏÁl‰]È¢®*ÐÎX8Ÿ€R&ÈÀïà ¸'ö’-$ÖúÕ<ÿxçï¡ 0¶Y†DŠw=%ì€D)8(›4.) K»¤s©Gÿüì×Ëùëù›Ëóìbt¤PXF©fºîF=RßÌ_àζ¨Í~Žî¶(ñ¬é å)%8ú¸ÃLZ”ø©Gx;¥V2¦–üúØ }9·$VªÇqËis ›õ× ×"«\6Ž\'à:},·DÊUþ9¹tÊ9ÕAº‹¤L'‚Pì¡SN¨júaÛüc¹°ã9DðoKœeÈ]¹+@1nÐh ]?"`‡PˆèÎiqz•í;Ž#YXÂÃüB ø#Nù@°ž?ÜóÇÒîx¡!ƒŸðaTEµðƒ75H=ßùg8„©Ù¶CíÇäfØùÏ°OõDÃ<‰y2¿|1{ñôêçW³ó³ëÙÙè\’£Œ±­ÓîdŽñ3rŠ]ñ—;ÕS}ìô´grÅG¤¬òµLÛÒ¬áÉ`á ©¿iCÄ-¸ð`ù÷dá E©|V>‚-¥Sœéåö bЈ/ð‰ßu9¾T‡íÜ!¦ÂO\Z-6øõKÁülRÆå¨g¦?¸B€EZ‰‘óÁB<龃ɘ,p>¼-;ƒp°ôÒ.:ç¯\}¹eJXû•|ÿ j槬…±¿þÓÌ +endstream endobj 1223 0 obj <> endobj 1224 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1225 0 obj <>stream +hÞÔXÛnÛF}×Wì㲩6{á.ÉGÇqŠv8JŒÀéM­$"éŠT\÷ú—ÙåU²§@QÄëÎ윙9ghAÖ³—?½d]ÏŒ"I¢8ÙÙÙjöj1{ùFA«™„ÃD±$&‘âŒK²(f¬0½E6›3ι"‹ûÙ =?{C4‹ÉéËÓ/È»] bÓj½K‹"/×ämÙØÝ*Ílðëâgp¥¼+Í”"sÁ„ÑdñÚ[ {Ûb°}½ æB²æ`‡\Uû&/míŒ-fF²È@L†iC˜TI’ÆhËEçv!f&ÃÉC€_Pî!„Ü’8ø‹7&e·E©Û-¦uC‚¹aýp·LñLÒÆ.ý Éñ˜Ð2`š¶¯]´/í²Mû’ôG.4„ªŒÄ <Ç#ÞŠÂ(õïàlí*ÿd¹Ïò1ˆb&¨mMÖ­¿ªlAfT±–ÒDØax˜È¿ˆH’`ÔÉ\ráO5 3”îøüÃþêÿ×x‰¹S˜9ÞåNõU(Ú*üw·z²Ý’«| åaqŠ±&W¶¶Ð› +ëíK Ü´KÖ5fÛ[‘t½e€R¾Â6ð¢‰Ìˆi\]Œ’ûO€W”ãz_ز©[.1Þ·:qD‚åÒr_\U”Ù¶ª¡¿ ä“0žh':êáäQ g0— 0 ¦ïïl–¯r[“fcIè"ºð·¸>ªVb×p™º= ͸ÑCª°¹ZÛÒÛÞîÁØÒ®`kK’—ÎîγZ«#ʦÁÍe$9‰P÷ÀÐtgÓIh’™!0Ñ;7}`IË£À€©ó.8A ‚–Iÿ‰›B‚ÁMáVäׂC÷p+ó3õ CÄp ä8¿žÑeµ¿ª™´0à#LÒ÷°—ó„ÌÐ}qê’÷{…¦0\Ž°£?¢QE£(cŸýÖ¿Çy^óòÚI¦Þõh•÷þ9˜À?iFšQ3v.ž3©tƒŠê•SDb\^ªøÇÕ*ùÑ`Â=ö¨Ý\ùB +ø’{Ödä1ºyRâô‡(®˜ÖÈúÄA§p¬›zˆ—ÜwcéTbiGêäi?:b}?!P§)À»w0ùÜo`>€õøô‘ô£À€£5Ì]¨ 6‘âW ÓŽ)²1Vô±^€Â^ID3Î1›TÎ\ÁèOóäšóq[£DM&"ñhžú9ËI>üNE}† ³‡Œ‹avkùlC*¤AW~¢=Mî‘ŒÍü:ìn"ÈþÔÝ/ù¦žI³LØ š84Ý šq‚æä,ä,ä æ'h‘4ÃÓª,mæÌ ¯Õ_Q9Éa}ŒšSôêæ°ª­Î…OêܘZ‡ïúæêòâäÕådzƒzPc­Ó7Õ}]–S‚…òi¯ÎÎ/¯Ÿò0Ÿ¸èþ0•S(ùGeï I†Dã–êZÉë‰"«¤+]a Ù4Û´”Ù‹–Œô!åø ¶ö1Qp©ô‚fzf?ŸÈv>¾t8$ï`ÂÂ/8´í; ?þ‘¢ùªtù”¸ÝÐ ž6$ƒ%›t÷Ãñà¤*•f‰ÿ‰nÌð€ö¤&Ž”>–øtþ[€‰Ÿ È +endstream endobj 1226 0 obj <> endobj 1227 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1228 0 obj <>stream +hÞÔX[oÛF~ׯ˜G&œ;¹oNê´^ØIá01Šti$qW" ’ŠëŸÔ¹çÌ )’²Ó6ÛÅba@¤DòÌœËw¡Ù.^þðž‘m»Ð‚˜$%2ÕD$¤±‹ÍâU¾xù†FòÍ‚q’ÀXjh–#šp’ D¡‰„ßòÕbI“$$X|Š®/ßESòúåëï¾#?51KiÕÛ¦8ÊjK®ªÎ6›beã䇥„_JQ!È’Q¦É¿÷å›bß5ñ’q*£âÛúØ••m]°Ë|¡diª4¡\dYF¨L1’ËMsjt’¦\N®CM°$Â]„œ‡Šd®‹2íÓÇqÞï‘«°Ç¢íH¼ÔÔDîמñ¨³kBJ×1S¾56†¹}­gÑcÌ2w³b’ŠÑ3ŒN0|CêÆÇýl÷8Îy€9`ã̇D6‚&–0· E“¾ K·fcB·ÒtÔ汆EÀ0hû£ýÛT5Mô¸âñ5¡Ü„«Ñ›Ûw7¯Þ}¼œ5_úët¤6&ô½nbsÖc*'ÓrI·Â«Ëëww³DöÔû‘(«nêÝ ¾n×ñ,ð¡OÑÞÆØ{óp]Ä<Š@e9”&Ù8Œ%œVÛ›²*¾îǘCC«cO§ÑµRm»Ý¿»Û…§¦eQ)‡BÇ.}Ó¾HNS¯Æ-)fÕ‚EÕ¸Z§Î‚”¿ý!ÿqR* Œl|· PAI¾+ÛðÝkˆ}QÊ#êS„X‚Gê{„D±'Eµ&«¢"ýÓ ŸwŸöhŠ>[rlíÚƒ°®V–t¶Xí¦·ä†š'}ŒO{o±…Öw,4ëè:4.Ue£ ™?ÞÏfS‘ƒ /0]*ï:ùE˜‹g¬Ç™ ·q†¶óþ±êŠ_ÝÒyÎýÀÚÛØHò2Ú/¦‡ 4€T'ܶqÃÿŒ@Iä¡\[+f¨G/H¹q›ùR(w2Ó€ÌO(¼ã- m1…ÈCţ驉'ü=S3~ÆÐäŒÍ³èiEš@+Nq_C:ˆ¾²A‚™^pù€©™è ±È®@ +Ý;Ô`RŽ±¶1Cí\H9.Ê2„dsN3¾"ã±±àª/ˆÌ\"‘_jFÂi6Üçóè4”#üÔdï…ó[D¦ZŸ›«”¥Î\á ¨JŠ#8 céK˜R“Žbž¬Oˆ +XoæÑ#ûñ¼þrxÒ=ݱ‘q, V¨Á̦%¾…õ,NŒo¾¨Áº×`y6üŠÜr^,Å…ƒæêcÁ}Nn3õMþ³—6wŸ°[\f,q†¦âl‘»«üÇ«·³ÖëY“‚\ßÿ…%DgÈÑ4>> aQݬƒ¶7®š˜tƒ©¯hae&my(÷EãYÊK£•g)’¿^™‡ÄäI™ñ?Þk¿pŒXo°]ÙûÎÛí,1œR{ýÀ0%ªk×’G(STIë`òxÖrÀB2*ûŽŒ W~냧ø.›KTY.`l—ÜvYrŒ°{»›Uq´h¾³Óaáó7«çƪu®[ÁrNgòÌÅaœó'?ÒÀ†ç„d6Úg­Ït}ñóåí´’Ï+,lÕ¿wÑ©Ó_ +‰À Øi–ÿ„cZ~›ûëLX…èxxí½Qv ¯Åº·Ò'Ÿõ‚+fŒaߺðÁ9°êÎÖgþïÜyÿ—Q)„ùýßÊçû}°ø/»èÜ‚õ1ÒœÛÀË|ño²¨Ž +endstream endobj 1229 0 obj <> endobj 1230 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1231 0 obj <>stream +hÞÔXÛŽÛÈ}×Wô#™µÚìn²I>ÎÚ³ƒq`Œµ1²ë<ÐRKb Q‘ÚÉäò—{ª/Ii¼ãEA0‘⥪ºêÔ©Ól3{ýç‚mÚ™V,O +–š©„Íl=û~1{ýƒ`‚-Ö3!Y‚?D‘ó²`¹Jx"Ùb?K`…')®-–³9O’D±Åãìçèîö–ñ‚½yýæ»ï؇c, +^D‡Í±ÚïëfÃÞ59®«¥‰ÿ±ø \)ç*ãJ±¹àBglñÖYL{ÛâlûÓ1ž ÉÓ¨†v8uucZkìv1Ó’çkÒ<ÓŒKU–%ãiA¶ìêì‚íM¬™Ëtt)¡”½‰%÷ )mJ†›iVOIB”™±j;Ï5Ï£Vɨ3+wÂj:–Qó,ò½÷—[ÿtÇDdXªÒ’¾Ð9s\ÊÓ¼Äûp +[ǃ»³:-;ö·8/¸ˆŒ7Ùz‡Æ;Celªʵ”:ÉNÓi!ÿÃDYÆó©.ç2î4c±æ:b,_~øŸ?úÿk¼ÿJµS9T¹$ÔNõ(…l¨7»»¯7€kNàŽÀز{Óô¦"¼ýK…‹fÅCcúÞÊ¥í- Jù +ÛàAëÓX\jZeâx^Q€ãæ´7M×z.ÑÎÀ-A'–Hˆ£½5§ý›]üóÌ: t{ŸÈ$$RãªõóñÁ,ëumZÖm kb‘€ÌN1>ö_@?‡5[Â&«Ø/µA¤<ÉœÁ‘½,wö*¶§À%l̬€,¶U,Ñ‹”³ Óö¸5 «;V· Í[±Çze\ùçÎÇ„+sòä]>΢ÇúhØáÈꦭZyébKÂÓ¾×WÝ–ö§=¥†‘@)p-ŽÏˆzX¶S$¨,áÙ3p^– r¢<ÆžívfýxšH`ç = +âúЪVþÄ)£Ù¼¯›¶þ·ac]5"Õ´ä +ì’ÂÈ×Ú¯é“ Ýj+"5o*s¦ÀWÃ~vå{ÿî¯ßýt;‘@¨÷’ ¡Ú!Þæl±5/9OBá¿ÉêÝäS7–DºúÐT;V5+¶H–S šÝ>–=»–ôª/í¢š(ÙãÃFMÊ©œ#¿»ùûíý(nÉË2›/&ñkÍ’bõtéá2'¶DX˜Òwn>>5]õ/Ób!ÝK%/µ“®tB”ô“6e=ºtôd z,}ö\¢PicBú÷-% c#:‡"OÊžŸ3—°Ÿ‰cî¡<#,É•¹ L£Ñ`>¼"ƒ$Wó¬:„º:œ¾ìÌŸë„d¡Ô…û=ùÆ4±š(ã0 ¤,{¦p^¢WveD[hv1ŒäwpgsÐl::^FQäjùès<ªý¨‡æ湇‚RA±«‚èBÝSYž¡ÿžuAóJûÑÈÎC'Î3•YÄYš`K^vÚ ++ŽÜ¬À~žÛìPPGDQ5̶2kìæV¥y”§×”Â5í‘…¤ö~]NÇpåz$bÈÆÕg¬9h£8\ƒÈoÐ[K;A!y6åGOÇŽì)9˜b|T1Í̯c%q~ QŸFGÐ9sgeH¶)à|<“0´ªîrrW_h´dðL“ÐPÒ—j+)œ¡5¤icÓNñ(l,÷†T¬Š [$6»mÝSJ\HŠÈNî‡Ãîiy‹<ßú¾ƒÄL§üf¸R>€]+Ò⇥‡ø8Æ™ÄCÀ’„¦mŠ÷àäŠWîX´öÎåhøP‡±æ¿5®ƒ[¥^W3÷cUSV dÈÖ+V¯Ys˜xG÷©‹Éws{3i(ŒÈ½Ã,ìûŽ@]íÚHž¥æØY”yö\RY¸©Ö²Ö£yÅ>G“~ʲ‹¥ºÝü8›£©ÆJVœ'^|ú }Ž9{·F{ AÑ…à¢륩W3¡è§‘Fm,ò>)kzÒ,g »aÜç㫆p¢0h@dƒ&ñºƒFâi¦v2óBì 7Šß·óÎ%õdê} GËÔßÖ^Š­€1H(S>%u™8o5ž×´"‹dÄÉÚ⪬UNÖæVÖò°^Øvæá+ºVH¨휌”m!^¨lóòªä\Ü~x²-ä‹”­U6ÏWûÒ×ur)ä· Üý„|Þ—‘Àú¹ŸœíÈêáK‘›Ú üßW¹·‹Ù¯ Œ7÷ +endstream endobj 1232 0 obj <> endobj 1233 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1234 0 obj <>stream +hÞìW]oÛ6}÷¯¸ÔZ3")RÒcÖ:E‡d+oÝîAµ[ƒ-’Ü&ûGû—»—¢ÉNÓa- "Éïç¹çV““WVõÄ(ˆÃ¢Ä€ +¡²“›É÷óÉÉ™ó›‰â^Dó4X…<”0ßNB´ÂÛ/&S†¡‚ùûÉ5;Ÿæ <;yöä ¼ª‘ð„•«*Ûnób/‹ÆV7Ù¿Ï@Wªu¥¹R0\ óç­Å¨·-îm¿®‚©{5ÂB{Pvå]q¶;k,Ã|×PÑژǃ5®C¬hÀOê|›o² +šÒÏ)á2>G×Æ>4¥»QœØžØôv‹ wø )®ûqŸ0ºÆ +;'ØíÂîDuÖ@NÔÐÔp‡ÄÀ¡v ¿s—QD<º`ªà鯳ç/fW%ŒÓaf¢ @G~¾Ê]“—ÕðЃÆÉg÷IvsÛ·‡ +ß:É6Ën,äH}¸á½Œ¤ÎÝ"+à­…E¶ÙØ%”Åæÿ-,d7´÷5Q¨wðªÉªfØÆqÿ$×Ã*9¤1#BœJí¾š*.õ˜ >M ¢0åJ~®\d·8•¶þ&šðÔa8å‘RñÐiŸÀçxß:··3ºPFÿH‘Tdˆ¿@”þפ¡&ÅŸ(I¾†tîÁ³É…Üzœ–2P¸ò zÙ-V ‹‡ÿ¶°(‹Ú.pp+‡<†IYçA¤øÀ +‚ÁG%SânÐt[0!i:Ù4½lÆ$›²=¹àC/›z ›±¹{·ëŸví Ò[ È¥ ‘ï¼r%ÁŒ¼ Q²Ó¬o“abÐg÷ÁE…m¼àoÉžºëžií5w;ë½)¤vjŽ‡¸Ži–Ñs³§žÑãC"CP$Ó:,Q‘>29ªÚÁÝÑððÒÒÝŒDg[V–*U´’“Ô™‘â ÓÁnCÝ}~úÛìr²äéqÈþüî"¶ 'ÄcÑQ‚ÔæÍBà#ʃøcåi76(1G{¶qÈ&P¿ñ3öµ”ç^[üêX~®Q˜Â̪ï`LRÈ•RÇPíÉûæзä&L¢úN”P_šµW¼sºÐ\Ðu}”zbb},{x^ý[€žMqË +endstream endobj 1235 0 obj <> endobj 1236 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1237 0 obj <>stream +hÞÔXÛnÛF}×Wì#ÙDî…K2o®í´.œÄ°™EÒ†ZI $R ©8îõ/;³»¼ˆ’“4@QBJ"wgÎœsfÖŒ¬fÏ~¹cdÕÌ” Q+"RëÙrös:{ö‚FÒåŒqÀ?¸°8¢IL"Ѐ“t; `Hø.Ígs éýì½w}ù‚„4&çÏΟ•[U“f]!€T 6¢+ó2—^58ÐÞ5ÙèrÕ®Ÿ’¥Ï#زòá¿šdvç9lŽœWGH6ëlgb =ê cKX¢Ù‚#Ž5¯{õ~s%§ÊF¸Üä€aŠÀ»*Ežµˆ`Eî×E¾&yU6:Æ_0e°‹"tkCûA÷ x/¯^Ý¥—7‘È¡¨]û°…ÒEd›ƒÚ[7šd»ÝJë3 Ÿ©?Çß:ül潉I'´3rq{N>Õ&k pÙ*Ï÷uCŠ%©JM œ¸, +@Ó u[ÕúªåÄÜ®Aô–Ý“•Å‰«¥£è‚´;HªFn4ˆgVNÊ +ÙóøN"ÑÇt »­#“ˆGIºÖ˜ lT•›òQp hXTF'8ˆ!c!P]{ìˆPHZg@ “À:ü&Là·ŸK´Ž—Ú¹aìœ(+m¬éO˜RXþÖWÐú ÔÈ:¾ÂhÌ#Vû¶¨K“•¢q2¼öl÷ÃÂc®2þ¸ÙTVd÷>F “Ðs2U2!N‚J~¢0Ûì˵‘ú¤2± O”&Ñ`a\B»ŸZXö,¬ ªl³!_oZ‘:åYÊÏÉLrˆï½Ï\L‘`"Aâµäõ͹á…#rcW8õœ æU]kcî‹v “¼¶oph,µÏ\ßÈÍŠ*¤§ž€“˜s^”FÕ(z6*’´(GuàŒƒ´<‹•(‘Û  ‚Á‘Íûƒ¾%âÓûÀó5•ÎÝ‚½îéÈ»*?E†¾Ÿ Yù,02âÑÒ'6‡F.N;Ä7‰HGdé ‚Ø‡»f/ðÀ˜õ캵9@ß‚™zõ²(ïíýÂ:8x óƒ ƒÃmë¼í”køã¨hÎ1ž2š®•öÝH Í<8èDï®.Ò_'­hl›ýxÁ#k,PÀVãc ÔAäv9€ÿÈ&Ê%$“=°öÕéŸmðý„Jö¥À^V.ŒfÁÆ÷ ô+4s8BX±t#‰K«R’¢DÜÆ IÓHû@ÙÕõÙï—·“a"IŽ„äN\&)° H„ +æQ> endobj 1239 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1240 0 obj <>stream +hÞÔXÛnÛF}×Wìã 7Ü —äcšØmŠ1lõØ}P$Jf+K®D5Vÿ¨Ù3»K‰¤˜ØIQ…“âeîsÎ %[Œžs%Ùb;²šeIÎLn™NئÍG_GÏÏ%“l<IÅüá óL9Ët"ÅÆw£RDbpm<Å"IÍÆF×üÍÙ9KEÎ^>ùÕWìbÉ\ä|½ØLîîªÕ‚½^Õåf>™–Ñ/ãï J{U©ÐšÅRH›²ñ+/ÑdË£ìŸ6Q,•0¼‚v¹ÞÕÕªÜ:agãQj +xdEj™Pº( +&LN’œoV‰Ì6÷á´P¦s1¡hw>"R¸8 7MÞ¸O–)ÕبÒ`ãd[³(¶"ã?ÜÏ&t¦x]Îü «èXðU$Rû><´™Þ†‡”?&2…¯Ú*ú!m¸ˆK™É +¼SÈÚ¬ýÙnZ³£,’—Aä6è[¯‚2¤ÆÅ*¡`+e³&ÚÆô3ù“EÅ9b]Ä*‘þ4e‘–3ÖŸ~øÏýÿ +?ü¤ÜéLHÊ\ÒäNªP†*üwM}±\²Ëjrͨ¸#‰bܲËr[¢95ÕÛ‘Ò¸XÎDÓ™¡·2åzËSNáFÆ8ÄqgxÜfFdG¼! ˜âÜù¸,çÞL"•@Ñ>’Ô +({j‡ +‘š¯oçómYwÁæˆk¤Âd‚ æÎP‡Pf2ójàäÀٲɊY©—-€,—Šä`{~~u6ŽÆ¿•jaKÒF Øƶõ¤.ïÊUÍêÛIͦëU=©œ®ؘ¶Þ=˜¨‚‰«-[¯J† #Z|áßrW²y¤x|M¿7ìýº¾euhìQ`¦ƒ˜Û’=ÀÁÛ³µ‹Ú6’$PD±‚ÿlŒºÎ¢èX–?´h‡ +ˆÛ±I„Âuÿ¬ʇrÒŽÁ©àë}]­W“¥³uJ”ŒÊ‚ô@¾%´ 0_²Ý¶œ!PK¸·š–¬Z± ów$,ÉOrùæÅ»³Ë®#-—e0”JÈ籜’y‚½ž³½ ¸M¶£”5¯xßÖ;¶½/§Õ|ÌÃ=-Ežõ Q5/^×Ƴ_$êüY¤ð*eA„»£È¬ÖuKv?{YÞ/+ï²o­}é;©i¢Ÿß½ªÄ® è“EKŽ=Pb’–†‹`Dhú5 +šŽ‘¾4\íQýNÍx¬Åf=Ó :7µ‰Ð®sI™3ÿšW¨‘eY>ä.ßp¡‚J‹80!F5â³õîý² a›æVÒMQ¥ÞµkN„Ë! ¶Ìt%…m—ùMä…ÊôIeÒ@O#ýf&@-vTðÛ®`x[98paÚ!¾[»IÁSv¨LÜ\¹ª¨€hT^À36߬ïü=Ð ¯N?pÀªv ›F^À4Ó Ož%7`Ge` ÀŽì4Ÿÿ[Dè0\t²1ÁÍÝšÒ­Ci Žö„“ NŒ±B¦=²ŸåóaΕÎé¶Ï}nq¼"…µ'n6ýŠ÷‰€žD. +õür!8Lû“ ¯HZZÌá[Ý`dúèåh¦ÊäÓNå[ìfŽ™O9õèú ô]Î{ƒ‹zŒaº‚Tw"ñ bIˆEañ$böµh(תG-Ĉ˾Ío8ûç ó@Ôà IuLÓ#¾mM<ÞJþÌψH’ý¥ú÷Ÿ©ÿq¢S):§ºkõQÃvºa;6Hw Û¹JæƒcÌ1'ÅÖ*zZ€­N=î{Øãy+'pÆûa:'Nɉ°Œr›XÕðÐPZM¨˜óÉÔ]¿9˵܈½q]ê6ÇnØ?É£cû™®KiÏ¥}Ç%lÿ°-úa¯Ã0Énëg¼úÓ1ÁÏW|ÕÁWÝﻊ•)(=äþ‹–¸‹ªžú›·ŸØä°£}%&à³Òvv9È´G.‡ÛpÕ¢•‹×ã—ß~¥›ÜXU> endobj 1242 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1243 0 obj <>stream +hÞÔWÛrÛ6}×WàœX0.H>º¹´î¤ÇfÚfì>0$±•)—¤j«Ô¿ì.Jí8NÒËt3lBHð€r›àò. ™ CF`3N{ïÑ0){¥&mG¢©a }{3+p%igg~A*|f´Ž˜¦áØwáPS.Ã!éŸ\hpU‰?„ñ/¼Jâ$ƒïÏ` ²šµß™mÊŽü%)Ô‘mз®ƒ2ÈŒ ÇXKi’>Øq¾Œƒ Ø»ýÅ„ÎÖ›÷+Kœ¾WÆ«‹™&óI`\sãåß@Ÿ4•øXzˆÛY¨˜Ôá Ž§éUäE>”xí=²OLôàbsmë® 쎖€¡:Øãäß W^…êU0eö•ƒÀZNÖbá\ÜزšW¶%ÝҒƇ89d)‰X!è¸ýU!dt : îD1PeÁºÞ5…ôá¼s+pPCÒÃÓ]r/éÊbr"É™BÑpË"Ö êÓÅ°ô9ó»ËŸÞ½¨Ú®¨Ç¬rQ-xÑÞíuŽSRd”–$ˆÐ}Ò2­Ióxvš?ÿæ ²jUÄË Ÿ€mŤAØŠŽ”k(ߪnIkoŠ&JÀØ÷Š…ZÕ}]qŸI'UzaÐ[z«pm·Ú€É춵{ã3sç…%ãT;ç ZÔ3²õ©e$_öåÜN˜Êžî5uOU†_=Äâ¨Ö‘8݇¢j~ÛT4¦DP \Ü7ÁVòÞ’M '×õj ÿJKª“54ŠÁ˜ûÉz}òîåùCfØRQvÕºf„œÎÉŠãI7¤u±…¨‚½.¨S äÄ„ØÑ'—}#e^žoA:SzIøO\›À,´!eQ×ën ÛŽªº$äNïñÍ1B®q÷0ãÒmúb7ÁUœ49¶Ò4†EMá?º0ÀpDùÃF§1·ˆa;³>‘c`eFˆºÝБO®§áµkë«`Ïaó‚2 +z©ø´#Œ†t™d_ÞHzäë[Àô›Æêsõo?QÿÇIBXò3y"Î\{Ò»~+ Œ‰‡¶\º™UªdÄw!®¨ƒ·¾Q`òφdÓ"…xä>noà2íÝÝÂtSkkb 8—áo_¢8Y_À´æÖÅ*t#^ÀÊ=ê`ÚÌ° ¤CiQbÆô׫ˆFeê‰ñÐøòÞ~,>Øhý]H&iè4Œ–Q>Z´4C§Iê×Ö¡Dø,…aYÉnÈÍà{Œª?Qø'ñûm$ŒÃ÷Ίä+ýd³ãòàœ‚cñÜÆ™’O¼R4ë®ÙÀk,¿¿ãjq뮳Î]-Ľ»EÆ{°õ¼qä(+Å»¢ªÜ³Ú'è^9®ªŽº–ÿ®î¿åGu{¾„+ç_ ¯n\÷ +endstream endobj 1244 0 obj <> endobj 1245 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1246 0 obj <>stream +hÞÔX]s›F}ׯØGhª »À.<º‰“¦u3©¤¶ÓIú€–h$pÕñOê¿ì¹» ’ìqšét:žÑâîç¹çÞE°Õäùë¹`«v¢B¦ƒ„E‰baÀšbr3ùf1yþJ0Á7!Y€?,"Ñ™ò B¶¸›¼÷®._±˜'ìÅóÏž±w/žxõªÉ¶Û²Z±7UW47Y^ø¿-¾ƒªÐªŠy²©àBÅlñÒJŒÙb/û—ÆŸ +É#¯„6«w]Y­v¹˜ÄQ +ã2LÓ”ñ(!IÆ7%¹Vý}8Íe4º˜PHBs>IMR†›QÒ»O–IÙÛ(cgcÖvÌŸ*®½Ÿn—]I¯+–ö‚•´¦^åóØsýàjòµ{HÚ51| •¤„²›¸'t¤S¼ÿ—ÕÔöÎr—wìg_'\x…Ù:}uå”!5&V[J¥ûhGÑq&ÿb"Mýi‚X§S{3_qå1Ö¯O_þóGÿ¿Â‡)w¡æ‚2ô¹  +‡Â×ԋ͆ÍÊઠܾ[6+ÚÅÞþôeˆÍbÉûÊtµ¥¥©-Ny„nð Òê€j .yX/@,!à¸Úm‹ªk™(+à–àÃ$DRôž·)ªU·ö¿ïI'äIïÃHÀÏ'N“‰" /*›ùm‘—7eѲn]°mö©Üúû;?[fe³ú†e충;â(ÍC{»-ëŠ œZͧVï¼»rÙ­ÅC¦ÔˆBOToêÞB6ÇÙ‰«4ð@»°ÖDk‡TE°×XbÖÉ¡ûb@‘´Bc¯$ÈeçO#,çü’’«Äúõ€[òÑ &Èô pâ(Ö% ¤!Ä)<L5ÁŒèP®HŽ]#)w%9’x ؼ豮fwv ÐÆo™iŠ'Éc6®MãÁ(Š5ìÉSaÚ›>ínÒ¤Ð+[–×UUäU R_!õ^Sæ +Õƒ(õÛÉqalŠ›»«Ì‡FáÝû‚J³ >zi–~Híg…b-Û.«Žûð¨c +·ÞܸGœiĉmÄ-âäÄCb£ãÊš‚¶Rmœ]ÎßÌo_\²Ù»ËÙüÇ*¦ µO_¬{Ãâ® ‚çlAø©Ô@Û!–T¯“ZÛgé œ¯J„ÇŠÒTßvHm¶qÉ 'Þ=7¼Ð…‰—UK–g».Ø®-–¬®6÷øÉ VVf«s‡ÁEéø©'âhTÿˆç ’½Ö8 O¢¹`8PºCɘâpDˆQ»ÂÛì +š¼²<¯wˆ«MCÂÔ0îžœo@w Ž5æYœrlAé*Ù|‰c‘_I_ÜXÕSYx +WåÀ$T?øÚINAЃ诀ü<ôI*™_tùš¾gÜ6Ö`°’<©":›¹oun¦LAIfÕ¤'ùGª¼ÛÙû(6¢lšhíF·5îíÞ «îˆãƒ9pYttCWˆé€’½&rA®Äª¬Ý]c\¥»}‹È ¿.ö‚kŸo}5Óðl‡UêP%’È9£³rI½F{ùïo¬ÞG> +endstream endobj 1247 0 obj <> endobj 1248 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1249 0 obj <>stream +hÞÔX[“Ó6}ϯУ<aI¶l÷m ³-0lZ†>˜DɺMì­í°å'õ_öèâk…^¦ÓaX{më»é|ç|ZNv‹GÏn8Ù5 %I¦$J‘!©õb»øvµxô”NVÛ$Ä?\xš°,%‰ Y(Èê°a……ž­Ö‹% ÃP’Õýâ-½¾|Jb–’Ç?x@^ÖOYJ«]E¹#We«ëm¾ÖÁO«ïàJ:W1“’,9ã*&«'ÎbÔÛæƒí×u°ä‚E´€òª:¶E©kìrµP‚% +9)+„̲Œ°(5¶lv6aû93M^¢$æi_"å¾ ™-CFð2J»ìM`Bt!ŠØ‡˜7- –Š%ô‡»MnîmõÆÝÂ\3Z,¦þ³ïýGõúÖ$Ü5ä1R•J˜_¸r%%Q’aýKÜÂV]¹7›ãº%?IÊ8ÕÞdãýU¥w†±¥ +M­…PIWì(šoäï„gY°LQêl)Bînc(¦(!ÝõË/ÿù§ÿ_ãý¯fïd¸ٹ°Û;Ù£{þ»¡^ì÷äU±\ y¥Þ”o!ñPoXט¾·a{KRNÙFŠ±„cïð¹J"– t†–nB—ä^oï¯ó@„LÒ瀷6-Áimi!ˆp[înîò5ˆgJ7³/Q Ù\ »NH¹rŽ,夎r’o*v¦$K2·a½yyñøêù³`õóà3bbسžÜRὦÍ[}ÐeËÈêVϼ ªIDí-TÈÖ&c¦ýf%7A[>¥í-ê\;¹"U¢êiŒªé‹ëâv(ÿ¨¦ç6¯[é6¿×/ó:ßïõ~ZÁˆÅ©Æ ¨ËMøíï"ÙR¢MªÀö ¥àÉ0>Á÷éžÉ3h ´¹kPR´)ë|t[‡ÒŒ,%ñY„,Ûü7ënµnMÆ2ådÙÜ ‹cð"¤]싾†ãøÞë@ÑYmýðx÷Ž:NÅæ «‰¡Qø' º©Ž(.ñN£¾…¹Êº²Æ(Œõrq¥0i.=Õô‘b+T(F%¤ï‚ r'daÒr#ÖÊ·ôs”îvGÓ²/Ÿrë!æÂv—*Êlî´ã½ñ&bR ¨8Ñ›;½.¶XÎÀóZq0~@ÒÐiœQ·ØË0cc4=HÀ”¢÷ÐJënuIÜ]Ø÷yÝQ‹³6›y¢§É®ºuC §&T 7›b» FTªkCi¥n-Ô2ú0™PàÚE,™š0K<Ò“¦"¿”:†rÝCÈp‹¹RXRM3–pÐ…íLN)qJX0íËæÂ6åÄL \ÂWzÒ gtPf!S¶ùD‹Nc'„™B3v:(Úo×ö¢¹,7/]ƒ >£ÿ;qô‰É±2z],gÌÜOQ }ùüÉ‹§×WÏ/'èÄà¬hyÖ:UÈ1}b'4õ)?Ñ~¶˜8é„ѬMXC›Á’žO³piNLéÖ§tŒÕûÄêf¾5§š|žšRñ_1TOÃѼ~SådRxèù÷+XW™22 }ïZðÜ}wL7ç_ÏŽæ¸C«ýkË¿›övFÀñd•‘>tû“±HÊäñ ‰7×òÄ}ª’øKù_ˆôo‘¿+©FL¶Ÿ`ÿå…Sò×åfYm—{3$ÜSÌ„[¥>í§ ô¢œ-lof»xhWsgäÜi?ô³’!“qùAš¢g>›d<›|;*»£Q­=5²ìHyð4 *3Ô¬óÖIEÈøiË<¡k7c”ƒAt[MCÆ9ÅÉ´ó¹1Á›nгàÇý›Nù±¿·’!Àòð„›LS +Úñ;Fª­,» Ò±ÿ±ÂîQ^šü¡÷eÝ–=•÷¹€›Ó‘ÊÍSy}eVÍr;çì‘úd6ø¤dFçS4Ü9h.‹—³ñÆNtP +o›G©–ÎåÅgmBž$ +)d!ÌyefýfÍüØ1Maè1LjnoÔX®ŒMoG Hs0C½ÇX¿¥ö}rFrü–úÁÍL>˜42Ìmn‹q˜:ÔÉÃßO8¢ÿ!ÀÏú¯Ë +endstream endobj 1250 0 obj <> endobj 1251 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1252 0 obj <>stream +hÞÔXÉrÛF½ó+æ”Åñ,Ìà¨H´ã”"©$&:Ø9À$¸$$À" 0ú¤üeºg+e-±]©”ËH`z}ýº[œ,Goßßr²,G±$š™˜HFöÙh1úa:zûŽN¦‹„Á?¸p£ibˆ–Œ2A¦Û)”EðÛt6SƘ$ÓÃècp1yG5äìíÙ›7äzrCMP,÷év»Î—äC^eûE:ËÂߦ?*éT)*%sÊcE¦çNbÔÈæ­ì»}8æ‚FÁä›â¾ZçYi…M¦#%àQLUL¨I’”d}‹Õqýœ¦"ê=‡˜`H¤}>7Il#S»– QÛ(”·1-+Žcªƒ_vóïDPeswCÖxM‚<¤*ð¯ýì_ÚÏVþ%ᮌ+ðUÆ¿ðØýÁO:Ò œ¿†[µ/Ü“ùý¬"¿†ÚPd^déõ¹W©±±bl!b]G;Š†™ü›ð$ ÇbŒãîV‘0¦q@H}}ùå?õÿ+¼ùŠ¹“šrÌ«s'rÂïkêéfCnÖK€«Fp‡ÀX’›¬Ì 8%âíÏPHø1›Óº2}miak+N9¦‰cÇÞÁ뱎¨nù†qŽž2çä& QÉâp‘†‚a!} œ½e†0ÄæËÛ]jßœÙGÀB“«‹ëP8âìÓÍƾ›mú´Ô2 iŠ¤´u/›‚ÑÎKM •@Má8‚kV[Û2 ^¬rbÁ=¥Úü9¦³^ק7§“‹ÉùûI8ý½5’žtÏÄ óDö )«´Ê¶Y^Q2]eÄVõa!¾›>².I±«ð´FoϨ&DÆžYyº!i>'³4'Ÿ‘c)¨UÈþ 1›èöä}™ÍI‘oàc–‘tìŸöäŒ>¬vÖ:x{}zöáò}Ï·ˆEÃz#éNy|Ž9$•“±¤¢mRº£é!¯Ò¿ì‘éT¸3 Mb×<ð@¤ÑÒ¶ÐC’4ÇË™¯ÅílÃÏ°)¢4Û| + P¨DgØ’ÎGÁ¼¸ÿ¼©ó7Žò8q¾R¦\?;@eîoñ²kzqc´êòV'.[ ¤Ô_©ù/ëj…í šáP½‰µê$28±š!¿ÌD²«ºµCØ3ffcß7 :T:_b Ê'\wº?…=ô!J$*ϵŠSz$Éò1ä5ÔfAãX$Öª(±Øƒìomº …)GƘÖ$o„+‰Û]6[/Ö@2Õj|ˆ Tµë^‰Ã裚T[êݪ5ÊÏ]è\M¦–é7÷YÈa„ +¨åNK6Y>‹±uæGŠË¸âÖ†yÔCÜ} ÐIw» zb+ÜJA&åò1R€;‘øe½@ç÷RPJÀ9èÐ~l¡ r eUb€€núyàiÖ8­žhãsd°¼;ƒCÈ5±§à·‡>Pµ%ÈtSÞ3èUSi—Õdå“e¾”Ó;¬¥|`²‰Ô>>½Hr‹}±µÈÜѾ¦±€Üåª^¬qXå5Ö£q°Ø!U0HJüx>÷®uNxM8;¼BÛQ°OÃ{P˜bÇB•ÂS(úGÊÒéG •OºÊ›’ØCW»Ê÷º½cbÛ£¡ÚtN™:%G•–†Æ1¥ª+»7:ÀX/ÕQ“›Þ]a¿t¹§”‘?B(1œ—"x8„¸1ûù 9¬Ö³U[††wšsƒUæ³Zv² +öW-´•9à8®¡Dh¢QÜ“NQ}.h +<…ÿÕËŒ¬m³¢[c;–y4 +hX}ZRS­Xˆt?‰Jtb›eU‡UÕ«²× PA¿¾¨Ð}æy†tŸRpŒ”­²’Û€¼¶:[]´Ä…È›ÁÌU†<²ÔååëJúa€Qøq XO/b CMUAÖ˼ÀŒ¯:} Õ,õåuA2EãÈW®7»B½& 1sìc®Ï²Þ$nåvâr(eT«D76òzP[NòùÕÂv¾Ë¢š¡¨$XÝ­çÕê‰ÕAhÝxQwWcW\òA@#ËìqÕÉåùջ˫éÙwΧ?öblhÒáöøhSL³›¼VC»$ uù-¡]|3L°­ jXôÿømáEK€¤2ÒÞS›@oô©·ž<³ @E`ƒüªUæXPç+—D ‚ÏÁî[,v.r7–7P~b*>ùÂ.Ðä¯Ð¾µjóK¼Ø +´_—#€OuÔý«‡î®%P‡2áñ7µå"#àz˜~¹á/ݸdÿrKèÏ^A²ÙyvMhÉ´¿%øÎœ#xÈe9RLGÿ0#•Õ +endstream endobj 1253 0 obj <> endobj 1254 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1255 0 obj <>stream +hÞÔXÛ’ÓF}÷Wô㨈ÍŒF—G $µY¨] žµMÙ’#ÉYö“ò—éžÉ’ì%l…T*EÕJÖ¥¯§O!`5{úêFÀª™Å +’0…(A…P›ÙíìÇ|öô¥ùíLHñDšð,…D…<”ïf!Záa„×òÅlÎÃ0TßÍ>°Ë‹— y +ÏŸ>òÞÖHyʪU]ìv›r?•­©o‹… ~ËFWʹÒ\)˜ .b ù g1êm‹£í÷u0’Glƒvàº:´›Ò4ÖØE>‹%ObÌ)æ:.U–eÀ£”lÙìlÂö&æÌe4º‰%¡”½‰)÷Él2À›QÚeOIÙ…(µ±hZæ1OدûeAg’µféN`CÇŒ•×Ì?ö‹¨^¬ýCÒC¡1UKú!bw‘.%Q’áûoñmÕ•»³<,Zx$)Ìx“÷W•ÞvÆ–*¤ZK']±£hÚÈ?AdY0O±ÔÙ\†Âjb3€îøí‡ÿüÑÿ¯ñþ'õN%\Pç®wªG¡ð(üwC}¶ÝÂõf…pMÜ@06pmƒ³©oRáE³äÝ`úÙJ¤­)åÈ6ñ”mðÁ8‰'L£)ÉòcH$W7ûb|äŸ$‚¼€ÃkëB@îË&®,7{³ØÜnLíÚZÙì¡0‡ƒ 3ãR«J¤³è‰ˆ¼BYµ‹54Î3çÛG?—X†æ‚Ò.‚“˜/M¹j×ß+dà>¦­µÌÁ“jÇߊHÛÕžQ]ÄÇ)嶳ã>Âlknï.‹@†È ÷ ¶âÅj˳"êZQå­òDgÉ1úŒŒ}`X›)>±u¾® ž)Ö -¶®¶Ë1óÚ®ÓnÁX8w¤¤DìB´ìŸ:öo èòÕΔâi6h :VÿòâêUþ:}}qóúÍå‹Q Rža£Ž¯%S陚¶hÍΔ-‡»0vJÓøÏêÞ©ž:…MÕ¾ÝTe±…¢\:ÿs™Ù}Ù3ø;6n¶(JødàИ%Tåöÿ, ·´7 ^ÝEeÓh\÷ÆAÀuÿdîON +?X%P»5;ˆ4$ ~ºDY†WªáüQŽÙú±²éTÈÎtæL,§ì‡@â_g5%«Xœñió0òtxô·y_åÊŒ“ûäù@³øù…ª6ñ:G¥³ij_+z@0íCEÖ\$ãš7TŦÔ0w¯Ï‘Jôù.‚›û²-¾X‡y.Ý;Ïb§„è„Äêy*‘ª›þé(ˆÙ¹úáeÇ –bƒÌm5â‘* Ic½˜±euø´5c–¢ã>kíè ™ Õ C³th×ïHQ±íÁKÌ>~ÄJ'÷rH/"`Ðø™NeÈ0ç}>‰bGn7å{{X"ÑÝëÁ[C÷”J¾÷âË·{ÿ8³â G„FGÂýg5-žˆ­DJ‡“)<·ø˜ÛJï +jź؈HOÇn°ôP¬F™"½:YÅ\¸ÀpûáŸì‹Úþ,¶[³uÇÑW¡>ÎEÜk£Ž1jxdhÌJ¿:qNa_[ Çy»w¡VŸÍ¥|÷†m.Ëô„¤TÏÄÒ¾x·ÁÇ‘‹ågüðÁùØ™¹¼úDùXF8A0®f4’ïmw‡õÔ\dÇ”¥ÃÖ4\ëþ ×,æ9Krº0µãRzÓí!”J³¢öh°¿Cœ½¢u]ßÊl§©¸@F*=Ômò„¢6° +HUHiGš‚–5Þ, Ÿæ÷V=ŽgPÒ7÷Qh9“[Ó4γßÆø­™G?¡v³1 o¼1ê|X_…žc'>&§S%+µÄæûå#üòÙ’ÔLX§cSÒ±u2êXv/c#š{ZHöÙ…½…ý¿ªH±¦x!A»FøeìÒÙ³²ýaÕ*eÏ–ÂcO õêCj5ӧȺz“?í”ã¨<øåu$µþÓD Ç©BŠ;üH“w3R¥þ¿7&¢”^ÔñÖ3ÇÂP¬zjgeÙ`gÅé(zü(;%’£Jºi‹ºêŒéוÎôð"T§É9ômH /€®è“Í© ï!~¼ì¸¢Ãe/‚&ë?æZ¤âtýã§ù_ ׿ +endstream endobj 1256 0 obj <> endobj 1257 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1258 0 obj <>stream +hÞÔX[oÛ6~÷¯à#…ƬHŠ”ô˜µiÑ! ŠÄm14{PlÚÖ`Kž%/ÉOÚ¿Ü9$uµ$Ø CK±¤sÿ¾óÉœ¬&o?Þp²ª&Z’8LH”h"C²7“åä‡ÙäíN8™-'\þàÀ“˜¥ ‰eÈBAfÛIVXÁw³ùdÊÂ0”dv?ùN//>Åòîí»7oÈç}À–ÐrµÏ¶Û¼X‘OEmöËln‚_f?‚+é\)&%™rƵ"³÷ÎbÔÚæíoû`Ê‹hvÈuy¨óÂTÖØÅl¢¢2ÒLi„LÓ”°(AK67-X¬›ë4Ñà:ÔK"íEȹ­Hjë¸%Mú™MŒBù³ª&ÁT³˜~Ù-2<´6 wBr<¦´˜¢þ¶ŸüMûùÚß$Ü1ä +r•Zà?\»/áÀã(NáùÏp +¶ö¥»²8Ìkò5ˆÆ©ñ&+ï¯,¼3h­UˆÅBÇMµ£hÜÉ?OÓ`š@­Ó©¹;U$ÐLSBšãËÿù­ÿ_ãí¿Ø;3Ž ›ÞÉv +¹ŸÂ6Ôó͆\ç+ׇ;à0Œ¹6•pJœ·ß!áK³` 2=¶ba±¥Sž¡¸QǺG5v.5fºÏX$Œãê°5E]y2ÑÎ ·>±L‚$¥ðA +ôsuiŠU½f¿vÌd€ok‰Óok©ãعºÙ™y¾ÌMEêµ!`%ßðPLÁ4b’nIQÖó5Ù mX©Ö¦ÖÞÒš‘ó"à +ž}ôÝçõºÿüÚµxêMtŒèiÐ…–XB¤SaP€ÛfäÓo¼³PµE{ªša…Â#Ú…øa²ùjÈ>€ÝÖY B8…&Gp0ø5É|Õ.›#ϯŽ÷À@ Y› ÙÚ…êòƒ‹‘M¯a ¨©w¹'æ·C¶!uÙ«xl ÛÆkjÅýðµ?Ò f`ÄÆÑ,€ÍÁÇ€§pZÀ¶÷Ñ%¡“¼3]'ÐÁh7ñ–-#[Û²Ø<’j ¨ád“íW€¨r2Ž¬·Î\=0Å¢Ä:a·X/M!ûmný'L%M/C>é +"1XÙ„ÜÒe ð{(¡^ãã£Ø•£YY&€µ®èC0…Ïl»Ûì¢gÀ-ugêû€#Æ) `]0@po²µ¨:XÂPh +T׳:nV&G”!»Ú<‘·#çÙzoªu¹Y ÊìÐ+o"¶æ‘ƒbsr®ËO<ã9Ûš+SW¼?tÔ5\&,ôiÅÃF¶%«Ž+aØÇÐ5„½y,êìÁzžÍ„»3e©vZOPnVa=;žÒ9Ëa¦'4=UEøÚ¹¥N-1ì+ªÝ÷~BåáncÆ;SpÝÖW9®þŽt¬ÁÝ7{XÀâ´yµáªÞS®Rg¶R°Z¤ŒûNÛè_í={x¹÷ÛÀ™=%¨¤æ^PuËè•:*jtÔ7Mfãi«9ÜÀѳa’L©¡*¡[ÈíÈ(LÞˉµë²ÓaÈ&xŒ`ì[ ØGä{Ü[„ ÆOA<ô;¯G ÚAŒgøRf­õp?Ð|½Uç÷«us +èp&¸§âf?ã^ñk;$’l·ÛX]Y’ $õ}Àšu @EyWQ—•ªU„F ¹]’vW+Å÷NUZ3šI~BÁ+¤³b iEdM²}£yo l„tl‡ïÇ“ +¯/à†…è&'?O­6}v¨ºÂú4ö2XS¸íÞj™¨¡˜îËâSSØê‹ qu,g„‚ÔUËTaâàeÕŒhÕŒtj&F5Átr†·rF œÁk}=£š>KP¯Åü9y#€2CáB™öv…ì©›> £Õ³ÍÄ´+Ó§«—_.®Þ]Œê$ÓS:¯çcqÓ_Sðö(Ž´ÍS~¢ShNFN©ƒÏÆá %;×^²£)·è@%½ñoŸîò+¢lœ™Öê…Ø‘ƒ]YÃ5¬»5<¬-+|£dˆÃ†A«ÄGÒgpû™¿Ý^rôSï ¡§±WH ˜Yñúô¿TæY MO(i»YOÉ ©ŒQ4½Z‡Ù`N4$m%Øt(E½ÿF‘ܽÖU ®†¥ÝLöFþòüç‹ë'_ÚŸXE)3G1?䤩„vâ/¨´FRËyy‘ÞâÍ´<ö:ÅÕ²ù;´þtI‹åW+‚À.ÏFhêŸý«J«Bãõá?uzëÅg§ò¬Ï‘˘%BÉc¥w1›ü)ÀJî¬F +endstream endobj 1259 0 obj <> endobj 1260 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1261 0 obj <>stream +hÞÔX]sÛ6}ׯÀ#9µ$ò1MÝ$;NÛ±•f:É>Ð%±#‘^QªëýGû/{.~€–gÓÎÎŽg$Z/îǹçP°ÍìÅëÁ6íLÅLGK2ÅâˆÊÙzöíböâ{Á[¬gB²ø™æyÆtñH²Å~Á +ü¶XÎæ<Š¢˜-îgƒ«ËïYÊ3öêÅ«o¾a?B‘ñ,h6‡b¿¯ê {[ËúX–á?ÿÀV±Ý*åqÌæ‚ •²ÅwÖbÒÛƒí‡p.$O‚ +vØus:VuÙc—‹™’\+Ĥxª—qžçŒ'Ù2Ñ™€ÍMÄÌeâÝDJhAln"ä>!¹ICÎp3ɺèÉ1);eê\,Ú# çŠëàýݪ +Ë•½`}çAò4pËÞ¹E‡åÖ-’ö;)B•¤„²?jü¤ãùŸp [‡ÆÞY–Gös¨3.‚Ò™lÝ~Mí6CeLª"ʵ”JwÉN’i!ÿÃDž‡ó ©Îç2ö2e¡â*`¬û~þ×ÿ|éÿ¯ñþ_ª]¬¹ ÊE]íâ…¡ðïuõånÇ®« ઠܡ[v]¶%z3&¼ýÊ?–+Þ5¦ë--Mo)PÊŸ° *­FLcp©(ÊÈø¼Ž›Ó¾¬­ãe Ütbˆ„8Ê@;¨êõÏÅîT†‹_Ç´#òtÈ$Ír6bj›,ÓÁÍ]¹¬ÖUÙ²ã¶dÅ¡,X³6×íñtkë"#ç#[èë¾:”ì~[-·¬ª·”,¡ ‘Y«í]±$†4ÆÐøèÏtJ‰SÿÖ‡fÏ +v_­`æC‘"ýœ9¨ô)!ʯùyQ±„ŒÉ»ªþP­ŽÛ ×»âwóŸ—2g©÷ËQ† 5ÓÖ­ïŽUS;dÊUG„Hi|€ÇÆ=‘p¤gR–I5NùÀPq ô-$­ÞØ¢±ØY ü‹Î@îÄÙÛ5{%Ü šPâóÔ{a[™==Fº÷Ñaí5ƒ‚ö(tpajPRõr¨ž­ªN!íJhÊ£qœigÃ×Ú¿»Ût5¬@wPQì-uÓFÆα+cçë®1¦uðŠ_eˆ¬!‡&“®ÅÁºF¨ù&ú‰f@Q² ÀN£aŠ Š'ù4Ó–As`å¿N(;°˜éá§x–¥j’Ü<éÁβ˜?GOr+êÛ•mk={rozŠzˆ8ÔGâÏa|²µÉ0 d×tt“"2Œe®@Zi„„gõB5Ê0êÖ÷WE†T—4½1¢‚ Ð7w…Yº´w¦kÀ ÿDÃrïO@yì™d‚\‚'^[é®­> ܈¬-— ²é,¦]dלѳë—?¼¾ô’Ÿ¶êúPzˆ8[ÉÛ ñ$ñ—n%ú mÅ*ôMOAØn €Ü–ìÔ–«®ëc®² ‹õäj¡ßÔ»´z»XS®þ}z”ÃSŽïJ*÷Ci‹k*»tåôÇÚÂÇxÜOrÓÁ +\âuð<°”fš»Øì¸EÔÞò ·ÜE ÚTSîH»³)™EÊêæ8²^>.šœzþùðßv„éåA‚˜Çœ¢;JÓ¶ÕÑÜ^î籤Yë“ö3=xß–We½9n[ðë¶Ù­|W4O³G\Ý¢åÛi]ìKß)$.ƒ8¸zùËåõ9üæÁyq‘œ­H€6!ørq k +R?KÁÍC},~7  Ù¹š3gº0gL/é¨IÆ–š*t +èIç’…Ÿm¾ÌǧÀJO`ˆ‰":!’UsºÝ•>ã&\ +•wŒ›Záö1ØCKaÏæ‹×À©÷9=eówa²”ƒb=Þ´á‹w×?{÷O¡O÷c~£d̯n‹çˆR_“îÏͽ‘&åŽV 6¼¤q˜ý¹1–>îP\¥R÷âVˆ,uâöa˜à"Ó)m¤T§fäЭzÎœ!5æ¤Þ"ÙRÎVŠ«‹±¨‰¡ †^öh°ã%$ªÚSvc+Ͻ'¸„\Â*®NKUë^e’’J;¨rÂi"ÈùÛQ7·¿¢÷ZÒø¶KÝãçÞM8ÅInB3”D¹I0RLž.ñA¨A—$}}žì‹ÔÉ!ÒYêK±‘„{ŽkØ'¼ìRGY°Uµ^‡1 öò@yÀ§»<<-¤Džp•8ºrtð3rJõrʨ\ißxÌuj +#¬ÓSŠôný[8Hl"³É™ácÐ)+ileæDH‡Ø+R^#Ø£¹‹,pÃãi&ÎÂei?HkÞ¿`1",ë$˜?\‘ˆ4=?]ßß\^]þðzñfñæúòæÍWßù’"šHŠî”'N&‚l¢iúNùÚmåd7Òd¦Ÿ +­ÏN=ºÊ¦ž”ogT™/KrÅS´þ7²l°!»ã`¤³^–Ù÷i„¶9i­šPB‡-ÃQœ©Ú5Ëq1šNžÓ+$`ÕH{}VÒ¹3›Èzÿ´ŠðsÔ[”¤ø™ì˜æåhN‡N$´FS¹f—L`õÈDå½ ñ4=—ð,Ÿl´ø¼ˆKU?:‰<©ä|Bì[Ì©7ø”ã4„¹pNx 7‹£R›ã Áü·P•ô¶xW­h¢5¸Méuƒ-‹Î#gÔ4ûžj `æ^œdãVï4ÙRÓ–:@z¹ë£gŽJ¨ÑK“¯ë¯áƒ}5{Ì& ÿ;D°9½Ë0/¼¡œó ·ø‡pÿw +endstream endobj 1262 0 obj <> endobj 1263 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1264 0 obj <>stream +hÞÔXÛrÛ6}×WàœD0 ùè8JªŽëx¦™LÒF‚$64¥’T]}Rÿ²»x“åؽMÚñŒI‘àÞ°çœ%9YOÎ^¿åd]O”$‘“ VDú¤Ò“ÕäE:9{Å 'éjÂñá<ŽX“HúÌ$½ø`…ù\K“)ó}_’ônò‘^Î^‘ÅäâìâÙ3r]yž°DYœâ š“š@|J|ú#͈ÚStuw™tedýv—-ò.¯o²r­ßÕúR—ëf“n*`E7Ûbù‰~òkµKdE´9C§J#c·ÜzÀƒ>=áCeGìNÁ&/`’šHÌÚ…¹…¡e·úJ7c¾Õ*ŒW«ië’u06„#]Ö$#ÎJh­@ÐahûÈ÷ü‡ÙÕ,5ÕmýLØuŽ \»)×n_< é@ö’î< hI·Õ’¬<ã)4‰¤Õ½ ¢\Ÿ_̯^ŸŽÀôBè’´´KIÝd¾ÕeÃÈ›²8m©ÉvE¬çkŠRdU¦£=›‹õZèS=ÑÕ 9Lº‚øÑçco,lKÛ‹ÙC.LÏY +cÝÜ¡›mu”—„Ú‹cõ|<±A‡c{ü ÊäD½}WïEV’ÏE¡—Pí…&Ù +y™5ÓGöÕxÆ]]…™³ÎÛý4k¦’‰>mCO㇠Žÿ?¸vøD-3Ÿ›Ò 'ƒ—cÀ†©\)YàÏ&•ÐWÖÑõë7%h2-]œÊn½Ùz¤aÞ#ì2nßZ>‡¡ d½G@Ôp.~€¦ m40.¡ŒâÕV©AôƒNlöðͮɷeV¬²~H³ÉRïô"_åÀ5ÍF›ZZÄ‹qß àÿêòÃÈ?ÈGö”Ó’šeß :šË1GÆad¾çym™fÊ’NÍ–˜M`í}ñ`Bs>À +òØisZ>·Iê 4ÎyhØçÓ†ÙsPƒÈ…Á]„e óà_±C2Ëv»Â”tÛæ1Ň9`eZC£NKÝ[ÝÀ>™íÉk *"QpÙÃI°ô;€yêêÃt*4ü ܳö¸‚J¼¾/—œ0ò¨2Ê€3ÕÂm æ`é…FÜÄT§Œ¨‹M>êJã +ÛdŸ1¼˜ • >s\¸*àÿVR]¿eŒ#mdÿ˜jZÍJÏ_\ÎF;µÂEB´OçW¯.ßÍ®.Ɔ,8€öø=ÅK¡.ï‰å£Qòd˜Ô½`‡Ð5Dó`Ôò„!3ÞÓ(1B5íRBÔm;‚³rƒ† +å=aêG_Jöµ$3tª”OÆÊ)Nx@¡ ù]Wèë¬Bé+Æ¢°0KµMÕÎIø®B{cSO8 0Ý”!¦`¾Ciê̞й?1 Øusécrgò…˃”ç­½Á”¢O…ñ£Á`¶„?D»´h,Úy?ó!ÞE‡÷¹½e_{çðËDôÞ>´´wšÍWPÏ~°Aý×qÿðƒïç/ÓïÆz9ÀD§WOäŠo’Ô4Öïgò§fvL‚È•þeŸWÚ*œ?š¾;öôЂ°¯ÈE? sê{GÂØú\ÑgD!ãC²8z¥1da>ny<„ÆçžÀOF=ˆÎÎàøõ¦0Ddb5”˜—Ç|˜‰°ç­>¹Ëó³›qÜðæ†îS˜Ù½@âfø¼÷ÿ!ÀÛÃË– +endstream endobj 1265 0 obj <> endobj 1266 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1267 0 obj <>stream +hÞÔWÛnÛF}×Wì#ÙTë½rɾ9‰“¦PÃVNhi%±(¤êø“ú—Ù]R¤¤ÜjEa€¤y™Ë™™3Gœ,G¯o9YÖ£DÃR¢Ò„HF*;ZŒžOG¯8ádºqAüÁ‰§†f)1’Q&Èt3b`…2÷¦³Ñ˜2Æ$™>Œî¢ÉÕ+¢iJ^\¼xöŒ\W1Oim—U¾Ùå’¼)[-ò™Ÿþ®¤w¥©”dÌ)O4™¾ôUg›l¿¯â1TEØ!7Û}S”¶vÆ®¦£DP“@N Õ ¡BfYF¨JÑ–ËÎ%ìBÎT¨ÁC€_î!¤Ü’92UÚf ц(t1¯j¢w»yŽW"jìÜ_ÏYTÆTGáµ_ÃKÕl^þ̸†Te"ðžø›Ü2Êdðý5\‚­jëŸÌ÷³†ü›”òÈ“uð·-ƒ3¨ŒƒŠ!ÖB$¦[©ãBþExÞR€: Æý¥&qB“ˆöüí§ÿüÕÿ¯ñî_¬4”cåX[;Ùu!]øï†z¹^“›b íj°¹cÍX“[[˜M‰ýög,$Ü´sÚf˜-#Ül%@)_`x11Ii\_Ì’a‚ÑícÙäŸâ飋éTøÏ3š%~NñMè„J…&p>%~}eCÖ6N¢ÅÃ$´•'åm“WÍ-ÜÞå3ø÷M¹Xïm9³ï‹y³‚Û#=eŽC"x9ŠæÛýýÚÊ«ÄG¢¨àIæëC™f‰wý#=<­<ûuÁK*tø‚áÛÑhðUî÷v©|ç¹ó\;ÏyÙRoç\÷¾ê{Ϩ’Ò<Ù{nWD¹€ûà8ª-²É™NæêÐÉiªÌ“:Y¸ô|ˆÎ‡:ÛÊ.H4þ±-Њ‚=àܵ#óf•Ø­’˜ó^ßµÜ Q•:zpW(и¦IX¿åˆµEº¡xôè-YTO2ò \€(s[jˆê²¹õÍÑä÷1gPÔu<†Ûö:–ø8¯òõÚ®‡vÀT2MÃsµoKï³r"6E Г`E·ÅË´îñaØx×—/Þ¼}=½|>¹ÔV°9 +dÌPaú=àYûúòær2¹šÜ¼{;¹k?LAžC +LZ^p`£Æ"ËR2]Ù¡?ˆCœŒóWcïüyêšD-Á”ŸBó´LÚö”& íÙåBŠšlwM±-óµ£HWè•S¤38r#soɾ¶s²-×0.HÔEyRO°„}\ÐÉ凫›AРùéØJÓŽmmg'%Ã)@œ´q8e> endobj 1269 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1270 0 obj <>stream +hÞÔXÙnÛF}×WÌ#ÙTÎJòÑIœ4…›6S£púÀH”ÌB¢\‘ªâOê_öÌÂM’Ó¸A$zHÞå̽çž#ËÉó7׌,ë‰$Ž"MDD¶Åd1y‘Mž¿f„‘l1aœDøÃKbš&$8ÉÖ“Vh$±–Í&SE‘ Ù~r\œ¿&Š&äåó—Ïž‘ËmÈš›å6_¯ËjIÞVM±]ä³"ü-û®„s¥¨dÊ(ÓŠd¯œEÙÙf½í›m8eœÊ „rµÙ5eUÔÖØy6Q2EFš*M(iš*cÉæ¦9u{IS.G÷‰D؛ȹC$µ8¤7eÒ¦o"㼑+c^7$œjïïç¹¹âASÌÝ)ÍwT!Uì'ÿÐvvçâî;b +¹ +ÍÍ?,ö‹XŠeœâýK\ÂÖvãîÌw³†üÆ eAáMÖÞߦòΰ5«È€Í¹Ž[´¥<ÜÉ¿KÓpšëtÊ#æ. 5Õ!í÷—}óGÿ¿Æ»ÍÞ‰˜2³sQ»w¢«Bæ«ð¿ õlµ"Wåå›âŠ±&WE] 9…©·?C.°XÌiÛ™¾·bn{KƒSŽéFŽ±Œc¯ð¸Ž%{¾‰¢Ød¹$WÅb‘‡> endobj 1272 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1273 0 obj <>stream +hÞÔXÝrœ6¾ß§Ð¥h‚¬àÒqœ4­“z¼´™ŽÓ ¼+¯IÖ¬ l\?Rß²çH‚…µã8Óv:Ï ÒùýÎwŽ,Èjvðz.ȪiE ÏH’i¢8iììrö¢˜¼Dâr&$áð7‘–gÄ(θ$ÅõŒƒÆxW,f1ãœ+RÜÎÎéÉñ+’²Œ={FN›Hd,£›US^_WõŠ¼©;Û\– ýVüª”W•2¥H,˜Ð))^z‰É [ìd¿o¢XH–Ð +ä³Í¶«jÛ:aÇÅLKf4ø¤Yª “*ÏsÂ’ e9ïœÃî#øÌd2ù!ÁÊ}—‡€ä. 9IÖ{†IÙ›(Ó`bÙv$Š53ôç›e‰O’vvéH…÷œÖKiXö6,jWa‘ôw.RpUi‰?„ñ/¼2‰Éaÿ)<‚¬fã¿,·‹Žü™Œ jƒÈ6èÛÔAdÆ…Šc¬¥Ô¦v’ì'òO"ò<Š3uK.ücJ"Í4%¤¿?ýöŸ/ýÿ +~bî”a3ÇûÜ©…" ðß5õp½&gÕ +àjÜ‘0¶ä̶jS!Þ>GRÁK»d}a†Ú2ÒÕ–Jy„m`¡6zÄ4—½äè ßÕ]ùGT|œ…ôÛs–k_§ø€"RÍT‚"°>î>§UÝ‘µ4½¼=)ïlã d5¿)U ¯W]y±¶Åíæ}µì®Zw…ר=ã`–G"x9£ËÍÖgÊ+í-I˜:÷ùa<åÚ«¾…¤ oWžýã“iØÁq5}Ž!¾‰÷#…ƒ+ߢ¹A•Ûúo¶^=h0ƒ6é}0~–¨‡mÀhN bæ. Sêíõ•B”]êÕžv d‘‰~_/þ¹¼“KcÆœᅢÔÐH†dZɾí£êèZÿy¿Âfj8¢Ê2ˆ?„>§€WÛk[wíÔ$ [ í- &9ù·XN…êU0¥wEÍ]Q‡¬éâÊ·«%›KÒÁ¯î6›+Ù\|´ P+À{ʦÚc/Ø™à-HòdWJ à1ñ¸1*0L’k~ºéªM]®IÙxŸÁ¢²ó¹È(1Ú,†Í¹ßÜÞØEuYÙÖ¹qS6L´\¯íšøö.è6Š¸ÕP­h¹°ÞÝš^j¯+öÊpr0ÓÁ!Pê ÁBòšÄJC¬$2ÚÜt×C) Aà̤ã’ðã“H±q˜Òˆ]˜(é6¤ZÕ›ô_Uí,6­šØÒwOr”î4bù8‚Z})Iã0s‘x·ç“0×=Œ+^¯/`xM¡‚›^`’«íê¡h’tç¼{Q'® dæhë- %)<´8¶À”sƒ‹Ãëgÿ¢Z†K·žíÙKàƥôU¿ãIQ…hn#RÁ¬m½0½êt?ÅÃÀGê{Ó@÷sEà†°q˜~“é À«ìA­¨@;ˆ*€h@6tRtxŠQR>8|N{$K1Ä«g,…»#-÷„ƒm–3Ý7Äž¹Ö;!ÊômIqzD“úÞx\/ú 7Fˆº†%to„Ÿp¤ÒµNh ]Ô@$C(‚´o*…lDQóÓã7ï^‡/NŽ'é…A(O÷)ÓaQøòk»²³¾à +¬¿ÆœbtDî+t›ÃŒëíïÛª±KR]NŽ‚¼”Ð-iäŒXBèø8kÞæÑÀÑ•M· ëÚž–#À‰ƒÈ4›4e6iKqXãü0EÛÓf$ P©ã S’õH€×ƒÕ°Q~ w2Àé Bô°‹°_öØK=öÜc<Ó8…Q(¬W¹…_ó Nzí# “Röˆ}:µÖ>îà˜ùƒ£ß$o@Tc0èúŠïßýøîx>ŸdΫè êLP7ÅžÝSgÎêC_OöFÈ}}€»ÁöìTBgåc–C\B3vM¼^’EY‘m pßÔëìXÂQóÞÉ|Êgp¼\XRÕû8¦Þ©ÞùxrøëñÙé,¿_Êá„í*˜Ž=ø÷_ƒûàÿ†S‚p>õ”€Hü„§€á?q"ðƒxå†RÄ6ÞÛ¯Îå~4…3Õ_ cûu +endstream endobj 1274 0 obj <> endobj 1275 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1276 0 obj <>stream +hÞÜWQoÛ6~÷¯à£„Ö¬HŠ¤ôè¥n‘"M‹X[:´{PlÙQ'K$7ÉOê¿ÜIÉ’›tîÚbØ`À$Eñxwüîû(F6“g/Œlš‰D #ED@êl²žü’Lž½`„‘d=aœðƒ†EšÆÑ" 'Év€„ð,YN¦4A’ÛÉ{ïlþ‚H‘“g'Ož·µÏ"yÕ¦N·Û¼ÜÓ²ÍêuºÌü?’W°•°[I*™2Ê”$Ésk1ìm³½íËÚŸ2NC/;ä¢Úµy™5ÆØ<™È0†ˆ•ŠP.â8&4ŒÐ’‰MqªU7ASŽæ!'˜a&!æ>#±ÉCL`2ŒºðÑ3Î;¹t>¦MKü©¢Úûõf•b{m¶²’c{¥O¥ç^{í^ª—×î%nÛ€IˆU(Ž¦íC˜c:Ô1¬ ]°UWvfµ[¶ä7_G”y™3Ù¸ýªÒmGcr`²9WºËvžägÂâØŸFëxÊf»’øŠ*®=¾ù×_ýïï‡xvBS†'tg'z2‡ÂŸëê¬(ÈE¾¸j·ÏŒ ¹Èš ŠS Þ>ù\ÀÃlE»Êtµ¥¹©-œòº•Vª1¸Te`œ±€ãf·Íʶqd¢¬!7>1L‚$e íµ×ùòOàŠÆO>ê½O%RͲ§Üiq“-óuž5¤½ÎñY !‚)³kLY(Œ—؉q½×4¤Z›¥92ß²*ËlÙRëC¸@r5±›†hª"ôf‹ÆÄ^dëÛ³ÔçÔó½˜z‡AmèÐ!óåæÒvêl~×fecGRÌŽÉw”xuoå¢qœ`Ø7BîmHJœi­€ëÒ%"è½õ.O/æówÉü|qúæ|”yM£AÚâ.m&íiÚ´Íðl)I yv¥ìVr>X·›ŽwÖá.$‡sºióªL ’–+²LK³éØWk#M=W‘s–GÆÌUFvM¶"UYÜÃßÏÓ3ô™”âe{ŸÏf¿Ï/F¾rÇCHñn;cRP®%™B³×P½ßgq_¶éY“$Ü. +«mØÁÓÜA=XÔq«ß{€\Rø<4@c¨/k;ºµ£3Û¤öá½¹7kûðÂŽ*;ÚÙQk›Ü>,íhcG—ÝÜЊ³9·Í}Øvû ­4#Ó•¹¹ž¥QŠe…2 ¨?Ÿx«jwUtXs\RÎTÜGÚò~‘O•—ר³¶¥Q[ÐZ[}’A6µŒ•á}ðÇõ?¬¿PêAýuû}ß™5ÞmÞ×>¸t çi?Äy«ÊQ}…œÃO!‹ä¨ðÚr¸¦£}u²3(œ¡/ÀuF2_ Ýá|[AÙ¤-ù”§ —%säÉn™ºö7ÄÅ£àè02áQB;al+Ò˜èîIYô ]B*½ƒ° É’:šéâQÝ-Ï&•âu £I1šb!V°²†ì1Š€΢/éñqßYïºr®o} •xpÁÆÙVàºÙcÊÕ¡<਎4·ËO×i±îôh•­}ÁáržîŠ–Ôö ÄêjÆæ¾½¼­ÚkbÖ‡P]ðW›p€„Ñ=jd5‰3¾Ä·¨ËÇãš'T@UÇ=öèl’Pð^§w³ÕGøn(ÛEQµ‹›t ŽÀzPF¾'¾KÃöI´N¼ž½›=5;™Ÿ'‹³7ÉâíìäôüåØAÙˆ¸E—=qœ¨ÉCÌ}ÛÖCŠ±âWE©äᇕAÃû{tÒÒ×wIìŸ`ð5ñ‡éŸî…ö剖ò{•úDØ߸FÚ—ùÊ{‚ðQø#e‹Ò‘Þ-°AlAÙ( ÄÉ"v¬’p|—Œ˜x[pêbS4A=ìîoÑúS)#üä‹ ˜ËÈà3bçÃßØ[ö‰©_ÔÀ€Ã6OX½íÊb`x±}JÒ¢™—п…¯üöpìˆLJ%À¿v¯²n3 è´Î(žtO*’ºs' |‡B³ut±1>ºÌKÛQÛIiI‹£˜-FÄZc?”ÝNÞÌÞÎÎeNåO"·cv~€ÛÜbþ§ÜÌ 0ª> endobj 1278 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1279 0 obj <>stream +hÞìW]oÛ6}÷¯¸3ü(ñ1Kœ"CÒ±º­h÷ Ø´«Á’K^’Ÿ´¹{Iʱƒ4Í–Û€!@HSä¹_çJ–£Ã·SËn¤d<‡$× 8¬íh1ú®ž +P,FBÇ?Dž1“C¦8ãŠzÄ…ñ׊ÙhÌ8ç +ŠÛÑÇè|r +)Ëáøðø͸\Ç"gyÔ.×e]WÍΚޮåÌÆ¿ߣ)åM¥L) &t +ʼnGL¶Øâû§u<’%Q…8pÕnúª±›#-Y¦1&ÍR L*c °$', Ø=Ę™LöbJhƒr1ämBŒKƒ|˜äCô䘔ƒ‹2 .–]ñX³,z3/i&£ÞÎý*MÔÄ,¶‹°i=û6I?r‘b¨JKú!2¿¨p)K2ƒç/qŠXëÖ?™of=üg9‘ ]°×6ÁVÆ¥ŠS®¥ÔÙì$y\ÈßAsLµK.ü4…X3 ãˇ|ë|û“j§2&¨r|¨Ú²Pþ½®­VpU-‘®‘;HÆ®lg±7ñí·X*\´s64fè­LºÞÒ()Ϩ nÔ™ÞQÇËŒ¢ä`4½oúò..~…ôÇ 3Ú÷)M"ÕL%Aý©èôǨjzXÙXG‹Û‹òî¸-ïªr5]µýô¦œá2Jԧȧ™qt…Ú„SÓŸŒ¢y»¹^YpfOµ·š0)´ñµ`<åÚ›©±Ý¢ònJSFÍÒKÞÖcÔ!‘ –Ó¹èSìÁŸÌa×>Áʪ«Â¦\njÛô]PÔමDQM½g‰I…"‡ÐgI ®Ð¾/½!éŽPñ8MsRéU‹Êvж€pUgÈŠMŒÿjè¸óD¦Ò]Ð4€b<tyUóªëËffaÓTƒH8P®Vm,Rœß"éˆJžüc +ؼf±óå72+Yƒªs¶Æ +/óÌ•z{Mù̸ ו:jo¨få +Êf³²kï¨Ùi+—QGähÓ!‘ÚfuÿrÈr?.|Yy8ŠÎ>L®öüWC³‡ «Ã@¡Ý.ÆË“@ÇŠÉÆþY1KsJ?+fȹ=²éè_ªd*S;\ÿ_ٖ̉âäø®š¯f‚ÔÌ)–ÅŠ;#&úºjIÙ®CÊÇš…±K‰Pz¯Ì£úÄ6øþ˜ÐÿŒrI|ç6ù딋ï©ÇÙÅû‹“É»éYña¯®øþ¹S3T5y™Z=&Ä Ì©FÔsÉ2µ§>N³$~'e; Ç“Aœ¾ª@øqCgçå‹B4h¨—nùœ! úuJ$GJno¿§µ¨ª7ž?ýý7¡+qHùEH(³CÛ׉PˆôYî +!wTHsþ ÊHƒ2Ô Úöȯ¹·°U’,rŠ‘”,bIû[Ú¿v «2Æõ,ºQ¶p{'´ë ¦"(·ýˆŸ„ĉ'{c×3ÌB¹´Ð.õ ʵ-§ðþ&ºÄA +endstream endobj 1280 0 obj <> endobj 1281 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1282 0 obj <>stream +hÞÔ—ÛnÛ6Çïý¼¤ÐšÏÒeÖ¤]†$+buAÑîBµhGƒ-–¼Ì´·ÜǃNv’¥h‹aÊ’øÿü‘¢h99y7£hYOG:NHâ1ÚšÉbòS69yKEÙbBŠášh’&Hó˜Ä eëI VH,à^6ŸLIÇe“Oøòü-’$AoNÞ¼z…Þo#šo–Û|½.«%º¨³]äsýžý®¸w% çhJ UegÞ¢èlÓÞöí6šRF.ÁºÙìš²2µ3vžM¤H!#E¤B„ñ4M‰µärSŒhÕ>‡¤ £çP[îBÎ]ERW‡ÁC‘´éÛÈkcd2Ä˜× Š¦Šhüá¾ÈíÃ)ü*í˜â*"‡×®ÂKÛù]x‰ù1¦råŠÙTû›ni¡S˜ÿ.ÁÖv㟻yƒ~‹tB(6Ádümªà ZãjÛb3¦t[m!;ù7¢iM¨u:e1õ—EŠ(ŒP;¾|øÏ_ýÿï~ÚÞqM¨í\ÜöŽw*¤A…?6ÔÓÕ +Ý”K«¶âŽ(ˆ±F7¦6°8¹ÕÛŸãpÓ¤]™amiæÖ–¦ã†[Æ8â¸+x]iAtÏ›˜r›iì“\™ÅÃU ©*×Ö#Ç;»&^Ÿ™ªöšý˜4=Ô¬}¡‰åÌÚWÏ'Ýp¨I,hj”£`Ez+ ”¾q¾º¸¾¸úpuv~=»È>FÙ½[X;}Ãâ4x²¾aª›¼1kS5ewù™ÁÔ˜ ¦ŠºãiˆÏÂéÐ *k´¹oÊM•¯P^Îã”äµ£°cå&Îó +}1hW›mªÕþÍ *+[–a¨f ðò\ž~<¿…Ç ±P ËR¤™ÛÀˆŸ´1¥Ò™žrÂúB÷>fûªÉÿrs²ŒùI)I•'·½€vKwû—õç´ô —PŽ•‰¶j!í¼xšýgì—‰A,—±…ÿٛݗUÛ%å} ¨JÛŠK[8k| Øgvp’œöŠìâ„ýˆ&tP6ü9e?Ò¬dnuͶŽNa§å üåÎö·j Áí™Ý`]l„a}ÀvµF‘[蜴X‰¦RÂQ@âÙ½™—‹VFz]ÛºX~¯ÑÚ4 «Âw0 „–ƒžëÐó°±ïQ¾Zm"à +~ˆ(…”¶ˆ8D7üÛ:?«ß#`‚¥‚’|¼-”f«Msiªes7ªì¨‹‚öØQ¾Å<¯'Ùs´Æf—¿f—ç×ﲟG>%Ið„³ž’Pù#òŒ<zâ»R‡ýu[Szègˆç-%‚÷¦]„íL‹§!€|kA29<1¶²bÚúª@æb ÈÁÆò®X_ů@$&¾XdÆÅÓÀê•öa5³ƒ5졵t̺;`ìgZ¦/eKiß×SK¶ØR-¶žX_IßÒÀ¬y»­xqÅŸ†<ع£ÌÕàJ ©Û€¨ömi›([x*6w¯­ÀŠ4nŶ«#`êu›„k6é¡%qa§J ÈN´Ü}N`_aêrYôoHb1#ñ5>8(´Pº-‹ç˜›|Þõ]¢íפl&8Að-£“LÅRcnÜ^œŠÖ–Ðüe`Šu¦Úîñ×åsŒ%çGAlh§ ˜Ô›ŽF¾£ J$åÁÆs§G¹$œâ{ßßKÚ}j–(H?O%'µ¥[÷³hìpÈ$M&ù1“àóãÈÇጠ+endstream endobj 1283 0 obj <> endobj 1284 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1285 0 obj <>stream +hÞÜ—Ýnã6…ïýsIa׌HŠ¢t™n²Ûn$jƒ"Û ­Í8*l)°äM÷‘ú–!)[vþŒvÓ¢E€¶ÄáÌááGZÀ|tôáRÀ¼¥ +LœA’¥ bXÙÑÍè›btô^€€âf$$Äø‡È Ï30*汄b9Š1 +ü®˜ŽÆ<ŽcÅýèšMN߃æ¼;z÷æ œ¯"‘ñŒ5óU¹\VõÎêήnÊ©~-¾Ã©”ŸJs¥`,¸H5'>b²‰-¶±¯VÑXHž° +ãÀE³îªÚ¶.Øi1J%7)Ö”r—*ÏsàIF±\u®`÷kæ2Ùyˆ’Ð Ê=Ä’7‚äN†ða’õÕSbRö)JR,Û¢qÊ ûénVRO²ÎÎ|*jsVG\³ðÚ÷á¥Õô6¼$} ¥ªTÒaü—ô•ILŽãϱ‹±V2[O;ø92̆m˜¯©Ãd¸2Nª˜´–25½ØI²¿€Èóhœ¡ÔùXÆÂw5D)O@ßÞüë¯þwƒo>ÒÚ)í\ܯڸP¾nªÇ‹\Ts´«!sGÍØÂ…m-îME~ûI…_Úï7fØ[Fº½•"Rž¡ ¾˜št@çË”ªŒ}ÇÈ…vœ¯—¶îÚÀ’ÔBsKĉ 1Ê dHŸËEÓ]U³î6*~Û¢Çp“k¯f°ØY3'ù§ÙåV7•m¡»µ€«%¥¡Ø5Pl -N÷8ƒKÉ—ô‘·@£eJ|äÛ·PÕ0«Ú®¬§Öu…¥ˆ5~ åbÑDBcÿ>ÜÓ V<£!.<²ç ©ÃHŒÙ¶š×|Õ½ÚŠ€îw=Ô\犒œR”µ6R˜Áͽpå?N|SÏQÏ–ï,¤N5…ǨΠ!»ÀóŒPÞB !ŠöQ0+Ä‹7¹°ËÉÅÕÙÅéäô‡Å·;ëˆj´ÎÃL±ÓšjÜY2 ‡5ñ#uï)÷—é€éÔÀ6r¨Zh©Ë”õÌÍ8–xŒšÁ’_ãÈiYÃ'ô@kgÐÔ‹/ø-k]îæŠgÝ×erüËéÅN~jP‘ìM!C–vJ™ñGŒÑmz¬¸ÜúÉ ÄøRwåïnLQH?(總ÜéH: ÑDJI·™®Y…z ‰†šX2ÎGæ‘ÆÉpt$ÅtÀžŒØ¬YZôËöuÂ¥Hó^rípÍ–x´á W®ÁÀÔbpjzgnÒEÔc£Ým1ôn’ÈwûùaÏôlKÞ÷l2$„ðQý}ˆ¨&~=„¤5Ý$–Èœ•E…7{Ñ“«øš==ÀŒF̤Ùp)‰½†x£Ùª‡&“sMo\Ñ“R¹û£$(¿²ƒÚZïxƒ 5,p3&ìË®!×7;:-^ ”Jcž¦Á\žÔÞš »uÖCÂï,ª¢ÕùÊ4º:;Ù£ƒáÙ«Áè±Ù†G˜x‘EÏ#¼šý#$ëiá@v•b.‹çÀ„{jçT<NH%ówá$Ñ?*¡ô^“3Ñ+ÐÉ·xAÀfNè©Õ¡p’"þ+dÒ¢éÅ[ÑöŠ™oEþ¦xâV$Ý­HöpÞŠŒn¥`˜§/D[NÑeÈF)$”Øâ‰äß;Xÿy> <ßÓl㯄º[T‡ *'¿ú(_S瓳'Èñ*—¦ç¦û\šðÍŸ m[i +endstream endobj 1286 0 obj <> endobj 1287 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1288 0 obj <>stream +hÞÔWÛrÛ6}×W`ü& ð’“éƒ#ËIZ§ñHL<Ó(“¡%Hf#Q*IUöô‹ú—= PŠe;é%îtj{XœÝ={¬Ø¬sôb¨Ø¬îè€Å2aa¢Y Ye:ÓÎó¬stª˜bÙ´£|&ñ‹A%±HRHŸe‹ŽŠ!Ö²q§+¤”Ë6÷ü¬Ê"‘°ÞQïéSv^y* _Ϊ|±(Ê{U6¦šæcã}Ⱦ‡ªÀ©ŠD°®JG,;qˆá[}ƾ¨¼®òEÈ à°ÁrÝ¥©-X?ëDa +´ˆ4~¦)aBHÖ7í‹Xo÷á´ðý}pB”v>ïI-)Ãf˜lÝ'Ë|k£µ6æuü®1»šä4óyc&n +S^z"â­ØëV¨_µB¾¥Šàk }ú¢b·¨±‡qŠó瘫ZºÉzÜ°w^œÅM Y·ú–e« ¡±\I"Û÷u¼e; ïFòw¦ÒÔë&à:íúR¹iÄ<-4gl;þõá?ýÿ‚ï¾Rì‚X(ŠœÜÆ.Øe¡j³ðß5õx>gƒb†t)¹=…d¬ÙÀÔÅP¾ýêùÍDl+³­­Ø·µ¥ÑS¾Òn ¨c}«ÕؼŒÉKIòáMÙä×^ösç(Ë|w<©vuJ‚ˆ´B‚ ú èô{^” ›Oóéf¸šÍEQ™‹bÒ\¸#WH@Å!©ÔO:|²\_Î ³ÊNµÓ +_éÔE@ÈHj¾@‘AÃ…€kÇICÕëw;kc‘øQà$æ#Ï©x Ò°p4´ºŽÑZäl½0eS·í´µåí££Fξ0µg8ðÎ]§+اÑÖ)?§SÚ¦“× ý$Aÿ®Ì¸˜¦fÍ•a,d†Ï×ÈŸ/Ø +ð§É 4ÿ8ŽnyiQèÕ!+J6)ê&/dž­Ë^¨ˆ²|>_zJó#…ØÔ Ž^¹üï*¢ÿÖm±g3µddÙAFæ + @š%»4¬¦‹}žºÙ,Õv¶#$¯NÈN›:jÝZîn;Ë=_"ÍoÖ`8|¸ÝPï¶?žng€(Þ¢µžäMN«ëv>òØo#{Òž‚öörÿÙþºö¨‘=¯« +-ãÙö!€×”¤^G’BØ‘÷­*áG&m†M^5g9,É*Šôˆ¼FÞݽ—}Hô~ø8èG(÷$ö[P‹ˆU€¾|3xõÓ›³ã³ƒC&EúÈ΋fŒþ´{d`ê¶ýëÆ”5*hÄÿ¼c_É/±GÑp•-ÿ  áoh/Œßæ®ù¶e#0øw@ËÇÆ£2×ËÉ£[jІ¬‡“]ǽVËæ„ÂÓÜ@Íñ»þàøEÿàëòèAaA‚jë½üuª¯¿,¡¬„”_“ñI&|@æ!N+ó Õ¸)Çp&8dm?‚#Rè~÷Ï|ÁMøU!ß …÷…ò&Ë/í3­_6žßèО†~9Ùe›Gïµ;} ¯Õ?‚—£{ +endstream endobj 1289 0 obj <> endobj 1290 0 obj <>/Border[0 0 0]/Rect[63 537.24 104.82 550.74]/Subtype/Link/Type/Annot>> endobj 1291 0 obj <> endobj 1292 0 obj <> endobj 1293 0 obj <> endobj 1294 0 obj <> endobj 1295 0 obj <> endobj 1296 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1297 0 obj <>stream +hÞÔXmoÛÈþ®_±¸OË^´á¾pÉÅ}Ê9N›ör1lµÅ!) +ZZÙ,$ÊGRuò¡¿âîOÜ¿ìÌî’\Ò²ã(Š"ˆE‰äììÌó<3³œÜ,^þþŠ“›v¡%ÉÓ‚¨B™’Æ.¶‹ïW‹—o8ádµ]pARø¼È™)H.S– +²Ú/R°ÂR¿­Ö‹%KÓT’Õýâýáü ÉXAÎ^ž}û-¹h^°‚nšr¿¯êò¶îl³-×6ùÛê°”ôKeLJ²äŒëŒ¬^{‹j°ÍGÛm’%LÑ +ìËñ«jÛ:cç«…,×°'Í2M˜ÆÂT¶Üî܆ÝMØ3jrB‚Hw¶<ĸ07UÑï¢wQdÁŲíH²Ô,§¾Û”x%hg7þ‚Tøih°Œ†ÇÞ…‡šõmxHøÏ”g°U©~á¹ÿ>x®rï_À%ØjþÎæ¸îÈ_’¼`œÚ`² ëê°dÆ…*ÅX ¡ó>ØJÍùáÆ$ËBm–"åþ2#‰fšÒ>ÿãþèÿ¯ñá+æNæŒcæÒ>wr@!(üïºúj·#—Õ À5Gp'ÀØ’KÛZà¦D¼ý3~´Ö3p+Ž[$eP›ÕJx 0ÌhÏ4¼0’è¯7 CMˆ »‘~7è^f ˜Ð1²ÂùˆioZ†<síhëýXîídMh&&!ÚyXꀮ– üÙmi!8P)@ÜirèÉœB÷,~ ›Q«­»j[Áe×»½Ä^´˜²%ËuЧ¬×;ÎÝ‚‘ su qëlãÎÆ­¤‹‚†ZÔKp ÚÖ;œ™S!È +;²OrˆÀÃà° XïŽPÂkÛÝ'œÃ kë°1ÍÝÆ*ˆ¨îuØ'R;‡;ÓúŸ E\@=‚D(9b¢ç@XÍpGÚ;»®¶Ÿ1%.š>45¢ +⨩ï–Ü@Oî„ A>t8ú”®[ÿíS²Dßßí`¹ÃÖa—À•ÏS5VçâƶkI«kHÏ­mœw9}‘#©ë_ú¦Fbkã“ÂGbÓ´sö¡Kpb¬TîÛ¿¶ðºäqþÉ;Ô}xmû G+ˆYVDÆÁè¯ÁÎpïË>*lÚû~Á;4äðÕž™×m$¡Ê¢tÅ⣳ oAª7›ÊÉiwòR¹@ÂÞô +i‘81yŸ§$@áŠ~N`£9V l4¿Î3š@á±GÕõý÷W<)óσ_ÊùE_C3¥ +PðAu»xûãܨÉN´Z`£8vvz×Ë\ÝÆD D(X˜\g4ñB2-¾²7éó%†b14ˆŽgò¬ž¹¶ »'(OýÐ5áàº'1ïžZ;«;/¦ R +ñCT +-€û“Çá©à>Ìæ0¿G]8»ðyÝvž¿ÕÖP·‹q±`À-frV©á´ôt ê¯êmõ8ž`†há… úDˆ&1ìÙ…­$tš½L”»ö0jż¢¦cA d¾|q~¹úiB$52:@‚¶Gt>Mׂiþ|ºNkaÄÖ$ÈwþD¨'.À 8ŠcæÊñW ,Në{ÿš§nhA`Ä™v ózùÅó9ÅEšâô!3þeŠœT ó™x@¹ô¢9ܹ†œvŸGëá oÝÑðqó@-"ó#:û;Ïq8¡c'ŸF¨€ x„ýó9@ÇÑ\ø]b“≃”¤m‚AÅCŠ£×Z‰Ç‡9¡µ`üÄÑ@:;Ug¤V[Ò×kÛ¶ÛãŽùù8K…“w£§(p +F4ì#ª…Tõmg‚C¾¦Ý;?_º“(÷Ož”ˆÌ@ø#ÃÃäÜ“øªí¢ :ÅÈÌ׎ç©R5;"Ya›2B*מ2qjtôço˜¬ŸUmJw“ª-×·³nf‡¯tr8lbêä$YK ¾O–’‰hù¸È•;qï> endobj 1299 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1300 0 obj <>stream +hÞÔX[sÚF~çWì£ÔD›½H»«¼aŒ Èqgš>(Xvè€p$õOê¿ìÙ‹„$À±Ûx:Ï Y»:×ï|ç¬(ºë¼y7£è®èŽ$Q(Tq‚6Yç¶s–tÞ\PDQrÛ¡ øƒ UÇ +IN0a(YuHÁ$„gɼ`BGɷίް"¬PïMïÕ+4ÙøTaå­ï6éjµÈïÐ ßf›Ûtžù¿%?ƒ*nUE˜sPLE„’s+1¬dÓ½ìëP†CorÐt½Û.ò¬0ÂúI' +cðHàH ÌxLJJK2¾ †¥(×ÁiÌÂÆ:ÄD‡„›Eð¹ŠHlâ#X U龶Œ±ÒF9Ób‹ü@`é]ÝߤúŽyÛìÆÞ …¾Æ^îãÈsÛ.ݦÍü‹ÛÄì•Ð|å‚騴<’¡Œáý Ü‚¬ÍÚ®Üìæ[ôÑ— +S/s" §o;e+¢ƒÍ˜e´Ã°É¿c?Pë8`„ÚÛù ¡òúô˾õÿ+¼úWçŽKLuæH™;^¡:¾¬©ÝåMwW©ÁíSc¦Y‘Aqr·¯>ãð0»ÁeeºÚ’ÌÔ–N9¤®9Æ0Ž¹ƒíB†Xîù†©=%ÖÉevû­Ÿß\¦ó϶nrÊž¾´¤PbÍ(« +ãs-°{ ¦@Û/ò“ßA@d„P!6ʤRë]v{Ó±Ýæôp»G‹­¡ 5‰(²ùvåwë3ÁZC° .®â>›/nÙ rv g7ÅšNœÐh¯zž®Gé*k¨‡’æQÍLÛeÕ€…8>à˜E{n5qôfù6ýÓlOf÷Ç8–îô D.R +%Bä\¼æà×"ߢeæ ¯JÁú“gщ D\³ Ñ\y›çëHq»¿¤›ŸZÞ„‹+o‰° +Vš½¹!7Ïølު̯eÓíO~Ãï#hŠ›Ò9RêÑ *yëÞ2-ŠG`¥…9Ñ’4™6ߦ=)Ûž +”–¾:@q¬âèQ½aw6;†¨FdR”Ú¦Ûl•å[Œ Ù† +à†2,ÆÂÇÔ0ÇÑ1Uê@Zh}¯‘œ.Qšß@6µZèÄ„íá/ÎüÓ}ÎЮŒ¯óåüÌ3´È°ª3ªMO©¸ *9׊asYp­"කø·âŸT!@‡³ÓE`*À€çÇ–ÁWSËnèmÕàšF²^¯µåÚöšÕÿÚ ö]3Ú¥X¯ .y­‚J]9”ÍÝN£­hà +Óó¡± &<­âk +ÖÐ*Œ\ÔQr¥žÙVÆWI[ +PÝs¥ F㓦|¿ËVTíMÆ×-@×æ臨ëÙ¤Ûk xߦhýðT¯ ˜4™>:jw§ýî 5kïMhãB‡³E+Ëšmõñ@ÆE¿ž¼Ÿ^µJBŠ'§µvNý÷ƒwï[²è÷³RŸ3U)j8¾n‡ŽþÀüžtMh,öí؊ꎒþhâZOà¨~êû‡ÓÕ5ˆMZsDXf^Cʾ*ŽŒ#ª>æØDéð™~ãM¡c-6pž< šfH­¹“0)VÏ •®†g'Yói`q¸O†ýCôä3Ñb¦ß¶ñ<ßììá“d|y`–þÐrܬ€Ãð¦¢æ,Úùd½ñ¥w0RqJí¡‡òð³V?Ñ_™ šÇÍWz9ûužs˜×Ìc÷õ¿\P«ð`áo!= +endstream endobj 1301 0 obj <> endobj 1302 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1303 0 obj <>stream +hÞÔXÛrÛ6}×Wà‘l+ ÓÄθÓ\j«íC܆‚$v(Ò%©:þ¤þewð&)v¦I§ÓñŒH‰ÀîâìÙ³Ks²]<{uÃɶ](I4KH”("iÌb³ø~µxvÉ '«Í‚ Âà.<Ñ4Mˆ–Œ2AVû+”EðÛ*_,)cL’Õýâ}ðãÅ%‰iB^<{ñí·ä]ò„&A½m²ý¾¨¶äªêL³Érþ¶ú\Iç*¦R’%§\ÅdõÒYŒÛ|´ýk.¹ QP€r]º¢2­5v±Z(Aµ‚3)+B…LÓ”Ð(A[ötöÀö!œ™Šhö ÁÒ>„#€¤†”ÀÃ(éO ч(bbÖv$\*ªƒŸïÖÞ‰ 3kwC +¼¦AÒ8ðË^ûEM¾ó‹„»2ÃQ¥ø…k÷c +?éH§°ÿÜ‚­¦vOÖ‡¼#¿„:¡<0ÞdëýÕ•w™±P1ÄZ¥{°£è8‘ž‚· N—‚qw“PQÒ_?ÿòŸ/ýÿ¾b3ÇúÜɅܳðß õyY’ëb tÕHî[rmZµ)‘o†BÂfMûÂôµ¥…­-’rª6%Æ +Ž½ƒåJGTrÃXŠ'eî¥ÙÜ¿Îò& æâ⧹¤Œê…–"MQPö'4Cª[MIPQZ’UÄ›‰™ˆÆë6º!@—«ß'©N'K™òn„²ËIÛeÙ›ª£dµ3ÄíõnJá÷²Ç<$ûG9q@Š–Ôw]QWY GZ[_œS¥¦ñ%}|‰ÝžÃÙ?rhÍšÔUù¹!EE²y¨K¡­Të£`_?qýv®œ8½3ác59ÆGÝÏ%4IÅØôhþæ¡ê²vùj%Üú”¦Ê‰3Þ@žc`Œ´ +]IÜý>(Ò„*p„AªÜ®–(~ 2Tö—°8¯+ðVï²æ›ž jÌ’HÝ©(‹]†ß{Ôð ·R¼Éö¾¹ a‚ìj9ÍnpÎÎ=ãj,,ÿ=W{Ï¡•JPàíÜÎã=ØAmXQj‰QAD6š…`¡:“¬-DùÎäŦ€JèvY†X;À lß–G’j?ÂõÙ@S^“vWÊ5r +·%¶¹U‡¯eS° +5L‘g%°Ïžp)€òéH7: æC:é²)ßÕ6Ú»Æn„f¥ã>QcÅóÔï%˜¡‚¢>´à¯ú8ãìLjÿ<¸èyžçô>#qQ„Ué Ë=a¬€±¥«½A‘ŽõeÝ„Q`ŠmõˆÖE|º>5 WS­sóS‹•=;p–žˆÐåÛë‹«Wof¨8C€Dx/'R7ó-BO™ ŸòÅg²*oúØÛ‰îM5m_7Yí~ÉS`äñЩ{™²¶ƒOH °NNB≠ é,üÏBmâ/ÒB Ô’ÑZŒB:}]=Ìq Êò ^ÎÉ¡àjʳà;<Šë%”ÅÄÿy°®ʾiª…ƒ!p¯¬ûàc9P`\œº‹¡³'üK½=|o˜”™+‚¥ê׺),²Uw„(¨É°þé#âøŸt—xÞ^r ~ª»Ä}wI\©Žíå~Wä;² …†I±Æ"KDr¼zycýƒ­T×½ jàêê6$íC •O*ˆÃ"e“Ld¿— +&Ýè àÛTv9¼ØP h‰@u?Oß•YŽÝ¤£€jÈPê h ÈmaÄàtÛÒ1ÅnÒ@®hŒ«z…ˆ*èÅÇao(¼óÙ@Ùyœ, +¼÷)R£óOå ŒÏ¼z-ùÑ›×dà‘ÃÄ©YÒð•8‚s-ñØMO3áæ‘fèçÛºC¬€YOeøðCm!öjBÈê>~Þªÿ`Q—„ +endstream endobj 1304 0 obj <> endobj 1305 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[424.02 672.24 549 685.74]/Subtype/Link/Type/Annot>> endobj 1306 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 658.26 258.9 672.24]/Subtype/Link/Type/Annot>> endobj 1307 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1308 0 obj <>stream +hÞÔXÛrãÆ}çWLùi‹³˜`øm³+mÉK.‰ñ>xó@“ …˜$T­¾#ù‰üeNÏ7r×ëK*•RèËtŸ>ÝMɶ³Wïî%Û¶3£Yç,É Ó1kÊÙföçÅìÕ•d’-63©XŒ?\dž‰"g™ŽE¬Øb?‹¡EÄ ¾[¬fsDZf‹çÙü/—W,9{óêÍ×_³ï›Hæ"çõ¶Yî÷ÕaË®DzÙ,Weô·Å·0¥©ThÍæRH“²Å[§1étË^÷û&šK%^A»«ŸŽÕ¡l­²ËÅ,M +œÈˆÔ0¡tQL$9i²g3Jd&<Ç¡…JFÏ +‰¶qæ."…CÁð0ÉÃñÉ3¥‚*õ>.Û#‹æFdü¯ë%Ý)~,×î†Ut-ø!)÷¯}ç_jVþ%å®±LqVmý#sÿ%¾Ê’¬€ü÷¸…®¦vOÖO«#û!Êr!yéU¶Þ^}ðÆ«˜‚­”ÉB´“dšÉ3YÑ®!¬©çv¬™7âµ †ò ëÏ>©PvuâT +v©‚Ò£a{ܤtW²ê°‰Pûݳh®r\÷ˆ7Ž}¬êÃ…õ¦EœöFbŒ¤™÷»-KöÏ[bÎ ù«  áåáhu°7õºlÿò”¨„bn²Däàý8%3aâŽ$Ïg,…k2ßö9£¸¥ÞS`²&™<˜R1}N,BNao»OÖ±¯=)\nK¼Iñ‡þNš–d"ÍOO¢O°—æ¢Ø$V¸Ä†î¨©%Z){t%…1λXZFý‘ïÊH#a›g=ݬš¯i^_ÕM”YWÛÃý±÷wzÓºÒCˆÒì“ûz×zÈ°gÊ0A½±eË VSQ¤é X¯nï.¯ßÝŒ ›5€S2207åðlñPµ¬±=˜ÇÅ@0 ‚6÷€nÙñ¡dír_²¥»ÕdÑeèCÁË]Iá[53 +×È]ôÂâ´Ò烇™Îz‚ç|Éž«ãCçPFµ3=ˆg$3³}\•¶zês¡6ΣLèP‘S›2^7‚6òp(††Ô(b¨–e³}¢P_°ç‡j—?G’袌ðÑ:³éaæKäËŽL({Å1€U‡öX.×äøÒ×"ñJVØPecªòÍ…Uܶ ø„‰R_žà+5¿^éØã¾/µòr_×lECê-%¨Ëjlå?•ì©-× SÐèñbõaE„JE1D&É"9-Šï^¿¹»gÊ7 - õZö ¼-Wäñ˜*0mi¡úW-oñûPðGûâb¡– ã†Mº¡y³ÐDbŽR”v”‚\0Њá㪉|ànD”@ñbXßBfU#ñl¡‡eó§À*¥Š€ØÔµÈÐÉw»º jPç,HGšbXy6<4Ÿk0âÀ~ç<_×O?íBá›"˜7Ö<ÿ¸Ç¤KujÀ“¹ü½Ö^~¿µßdtDÜ@—ã$Äè,2͆^|ˆÆ]hØ'¬6EZE0ðK˜FÇwTÒŽ4í^žª,Ù#ïÈ9å{XȪ6çè=wqÿX®ªM…Î㸠+à Z.†|Xx²üÝÛ{GY¨»lZÀ>Ž¨¿ëëk_@T{v náXYç©j^;Ìf¨yØ.I`e,1bµÎé0(?î–+ZKADŒK¢ Kéàž=•V”Ý‹qÐæ.ƒÈõ-"À¶õ™)ÔŒ‡C¯ €° y,’“óÛŽ}w Vº<:jŒ{BE6lu­ÍÒ‹mZö€¬vs¡æÕ¶¢íêH¦XŸ#Z±d£ù}£ðêÇ1ÍCL gbE‘ûœ mÒ[C\aå@¯$ +¯ ’I+œP:MŽŸatHêͦ-lÓÔû¾Ͻ¶ A?•¬¨"€*Po"·¡ìÞÇjÜçÐ~³Ó–ñé-¢kæ@(Œ¸–„]©Oâ}‚0…à ©[ˆ¥¡:{sg†‰i}ö?MØóžÂÆ¡¦íÊÖâ'Fžþ¤_(Æu÷L·Cø)ÈFÔPDh—#§ékJà"Ï£ôørdzëŸJB˜ªÓL}õÕ8lÃiDw¿‚ î†Y£U7¡EŒÎÝœaÉÍÔg)=ÐÁ%˜û5Gšñ‰ècè×DÆöZFHG*韂¤ãæPhôòÌoÎâ6,¿üb"8ñøû±pª~Iz´€ðû‰x>HÄ—È_~²æ¾Hüêæ3@ø"ï' +ä¯Öp?Õ0ˆA‡$ßá.€ýÉø +øŽÜ—¿´¦Ê"ï×Ô0%„+RÔðêÛ†8ð3;©Ìd·“²VÒcþ½ÛDµßD“ÊLÐÖN óöîúÝõÍdAJG]!”§R¡> endobj 1310 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1311 0 obj <>stream +hÞÔX]oÛ6}÷¯à£´ÖŒHŠ”ôصéÐamƒÄÛ:´{PlÙÑ`K$/íOڿܹ$%KNÒ4ÝŠa`9y¿xιWl3;ùáB°M;3Š%QÊâÔ0±¦˜­gß/f'/l±ž É"üá"Ò„g)KTÄ#É»Y+<Šqo±œÍyEŠ-nfN_2ÍSöüäù“'ì¬ EÊÓ Þ4ùnWVöªêŠf/‹ð÷Åp¥œ+Í•bsÁ…ÑlñÂYŒÛâ`û×&œ Éã „v^ﻲ*Zkìt13’'9® ãReYÆxœ’-›MØ>DÎ\Æ“‡( -Pö!R +’Ù2d ã´Ïž“²QjbÞv,œž?_¯rú&ƒ®X¹/¬¤kT!×_öÚ/j–W~‘t×Hh¤ªŒ¤Dên +ÜJâ$Ãþ3|…­¦vOVûeÇ~ “”‹ ð&[ﯮ¼3œŒ-UDµ–Ò$}±ãøø ÿb"ËÂyŠRgs ÷U³Ðp0Ö_¿üòŸ/ýÿþ¥³S trQvj@¡ð(ü¶¡>ÛnÙy¹\w(Æ–mn*ÂÛŸ¡T¸Y¬xOLÏ­DZnHÊgÔ MbFJcq™P–%\|ªºüc¸øcv²XH·=ã™q<¥/dB®b2AüT´û}PVÛ¡ Ö7¯óeS¿mÊMY}\eyïÄŒˆxþb¬êýå¶`ÖÓKãÅ\ +“¹òóHC–ƒÛi8‚«Èf„U‘]ñ”Ì5×"c'CtðöéAoBgæ®âêÌ–ÅVÕ¸º<ƒP+ð{³ßU×zqö1@-$ôYûÆùöúF€tùNáZë!qƒ‰ˆëH¬D™‡µL¼þ_\Ër]-ë® +VS'@[ +èmÀ¨Þƒ»‰–õÚnÛѱ‡1x¨ðéi5jxœLu˜»/a:¾»ó•ä;²õ}T©Ô‡["KÄ—à™Ï +¶­Capã&DL!òŸ ༶ë:êhK*Œm:¤ÍÍÖ)ÓÇ 64ßدk¢ÇP'Š„ú¦×[ÁpáðD’°À†e]7«²Ê;œÏ:” ×!>WrÖ¢c·¡ˆqëiHœ]S¤1èú,¯V>fçú(d1H?Öú²íD€XÖUËò¦`­Çʊݔݕ3 „›t0{,#Ùl +ÚÕ±®> ¥‡™¶0ã6S_Skâºè: ¹ðÜnew³²k‹íšŽŽ:î/Ã9==DÚøi†èhôm„hãô8Ô{¡áy!⻈¥¥'Öºó¨!:j<\¢Rà$îÎ2gã²ÞW+šð.ëc¢ >N¬dÀö!_ ‰#bÒVîÙ‹—¢áÓê—ýFs˜É¨úNÜG­á}:Xi%Yª/àb:jN¤0ü\Ÿ± 2¼bgÍŽ›) ÙHó^*´3…húÂF£îôjq:aºëÒЬÓ^˜Úœ!Ù¡kp=ÆÅ”%IvìƒÀW_w¥õX· Ãü€Þ*ßZF.óŠ]lßb’u§©ÕQtïpWƒ„ÝöÕÕ²G’B‡•úˆ3ƳP:Mr¯¤ºÊ4;ø‡*¼~öüüíQHæqÉÞ¶­5ÊPX‰à“Þ¦)¢‚Êiã#¦ @âÍáóÓñ¾Yª +í±ü*o¾;êJÀ”‡9 ïÛvÂÇ Æºä;õ!L=šž ”ÈFdøŠÑ Î,,¯ßP4“~'©@„?šÈÍ´·“–·mM²Ë`©È²¶½z„Dé/©!)E³;Œ wH‰tRrF- òoŸûŒ°HIXwvØòáíÊéʽª¢¿Žò£¾8b˜‡4]õc0qÜÿ­Y?ØxrôÌéÁÍü2‡âQ)«UÞ¬¬í»D«zô‘Ýr[¥öüLÆ3‘§|úX{ïPT(ÞX¿¿¦F©zHSÙ¢*ð6©ä‘¨:VB%½ ž92~Ø¿)¬ý,ÜT «Qzèærüª3ä•P}ì=Òï8^GéòîÈ-•1»Ç+íÿ‘×ÍoÉ“¦ÔÓ<©ÓMÜêQfn»kJúq*¨º[f£õ·¢5}àÚïÞMAö¹ÌN³¿}3Û7 +endstream endobj 1312 0 obj <> endobj 1313 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[424.02 485.28 549 498.78]/Subtype/Link/Type/Annot>> endobj 1314 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 471.24 258.9 485.28]/Subtype/Link/Type/Annot>> endobj 1315 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1316 0 obj <>stream +hÞìXݎܶ¾Ÿ§à¥Ôxh’%²wŽc)jØðNÒ›\È3ÚYµ;Òb¤éÚÏѾDß2ß!©ß;¶“ -P°´#éüŸï|‡’íWÿt%Ù¾]e Ë…a©ÉX"ر\ݬ¾Þ¬?—L²ÍÍJ*&ðirn ËÁ…b›ÃJ@ +)~ÛlWk.„HØæauýåÙs¦¹aO?ýê+öêKÃMÔìÅáPÕ{ömÝ•Ç›b[Æ?mþ U‰W¥y’°µä2Ól󗘲å(û¯Çx-O£ +rØëæÔUuÙ:aÏ6+Zx”q1®k-ã©!IηLñ<ëŸÃi®ÒÙsÄ„B’¸‡ðyˆˆuq° SÓ»O–)ÕÛ¨t°±h;¯3žGßÝï +ºSQWîü «èj£:æ: +¯½/··á%å¯BjøšdŠþÆÿˆg2Os‹ï_᲎²;m;ö}œ.£2ˆlƒ¾¦Ê+AÁV*Ëûh§é2“ÿfÒÚxmk»VBú[ÍâŒgcýõÓ/ÿñWÿw…Rî’œKÊœès— U(Cþ¾¦>¹»c¯«=Ê5§âŽ%Š±e¯Ë¶Ds&ToÿˆU‚Ëï;3ôV®\oeÀ”n6åAÀr›ùN£›°,Ïy’Žx#TBž +r2ªj4ÚæoÀÌTNÂÂ…½Õ§Ã÷Ú FñL˜´/ÈŒ9akÍ…4Òu‡ ^ÿfíšÓÛ»r®+åJfv¡ë:jÑeÑ}±¥Kùƒ‡¸AoÂíľ…^C9Õ¿‰Þ7Ñ+œÎc/ô ç‘¡Œjèà‘ ÷ÒŸÅžDûÓ¡¬»–è&JÐ[“|ЋCéU$CÌÇzÎsºÉB¹Æk› |ºº/·ÕMU¶¬»ˆ¥ÐÊZ@=+œR ˜çÁé¶ÙV°•=TÝ-}ÀŶ9ÆiI|n%ŒçÚ›:±Ô—Rs¬ö?x{u3¥§›gk«‡¸ç$áÍÌãQ‚sÙ½–bˆæ}‹¾¼ïª¦.îXœZ+¢â8„cUGÝmÑùHK@¹ÊFœ5{ëböÞ ¡ñ˜aâVûªfÍ`x6³Eöá7Î{÷¡ rU·Õ®t»¢”3¹ËùYîT9&P*\È)¼» +… „ªiH}äÅ,f³"9µ®aÕ¾nŽÎÂ5ч,–)\^fÖS'9˜¦_.2fÆ´Žús‚×P¥Fe"×ëg.Wí½Ï–Eew™ r&îó•*Éš‚ä"icBŠ ÛI^K€ƒ]¤CÄ:¿îš­ÃÇ,LëªôyÖr¨Yæ!pW-“,TíîE¤!øÆEadtˆ¾1ƒÆëèû8‰À}0BîNåç|0A¼.5`pÔÅ?üHõùÓr,ŸyEÂOs‹üƒå ‘f‰äìy¬,ñ[çÆ‘p£éŽzé&VÙø ½ap=`ZÂmJÑ#g f˜–KÖ+Açy»Û²dÿ|é %‹*H£¡Zž6»²ýW?eS•AOA× “"EôÀÊZ3a÷éõ5,“9Èrj,a?Ål¨ZÛwqÈžfÓ&¨°¢²ZFá +U‹JsVêÃ|¨Zç$F׾ězˆ>IH2Ð\†™MÅ>z‘,½PÚp;Ñ3É)Ÿ¡7d¢ô¥±u:ÌÇÀ0¶.Nl>¦ÑÛf)üãçÍšgÒö ÜC Æ_vJzŽœ¨c)€'Ú(o±?;Zª÷b·C!z@÷âE.6­ÓC§¼cE½cïÙ®:–[2Ô,ðýÈŽtÑXû lÿeDWâ|‚ä“yÚ¦ˆÞ‚ÿ”Ë)> ú§$ÐIXNq»œ³¦ßÍ5‘â_ÊhO_Äl÷KW–&äfЪü¶ìá.Ë:¤t™K ÅbÿKØÓÌ„Î\·º;ZµµàYêQ!D#̇»òæá¨ä€R4WpÿU¬rìE‡Í¿¾êŽl>2f,6QŠT"+û&¦>¹kR³VBfàbÍí…yyõíæÙ‚Þ¦&¦LüÄlÕåHªz{wÚ9enÈß“G$NjžŸµ +«}#œmhöýñ«<™hÁºYÑŽ%2¸A½¶w©í‡HûûèÎé€äÖê m =ç@ô† D¼Œ;ßmËû)©™w4j²ÀK:þn6š>î}á=b·ÕF‰ŠEeŒÿÂβ†Q2_†ÁôÇxYHK秭qÓVEhFPã®,väHàÔÒ\°Ç%ß ©ñIWî±k5áÆ›³Ü`_þì +›ö´ÀP Í€D®¦ÄãõÐÐa ß–ìÔb:øÆ/Žö£Íü +<á™y$/ ©·Dq¨_¦€›:hÓèЋ'O_¿\x4¯ª%Ïl=tñÙªºÎÝA¡[®f¦…°½/zÇæûþüXà ÐHI¿…÷xgѼ3?FáØ…ŽLôëh díØ_ÝÇ?,ª;IUç«zMÇ}Ñ¡\,é=”ÅLdò¥‡t>a?¥Ëù™„ÒöZs2eÖý›ÏñtY鹟ŸvÊsí0ƒ4ÖÝ眺€Jû% +GªøÅÇJÿ?¿ú•çWØ~`yT¹À +endstream endobj 1317 0 obj <> endobj 1318 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1319 0 obj <>stream +hÞÔXÛnÛF}×W,ò´D¢Í^Ƚô-Mí"E–š4uúÀH´ÄB"]’ªãþQÿ²³R$%ÙNÑ¢- ˜+qwvæÌÌ™1´š<ÿvÆЪžHÕ(Ö Šªlr=ùz>y~ÎCóë ãˆÂ<˜VÄh¤%”£ùvBA +¡1|7_L¦„R*Ðüvr…¿?;G Ñèåó—OŸ¢·UÄ4Ѹ\Uév›+ôªh²ê:]dÑÏóïà*á¯JˆhÊ“ šã%Æl¶—ý¾Š¦Œ“ç ]–»&/²Ú ;›O$'J‚M’$.Œ1ˆÄÚÊrÖ9ƒÝK°™ðx𠱄{ &w€ƒAð2Ö­õV1Î[yTLëESIþáf™ÚÇM¶ô ”Û§ÁED¶]„MÕb6qÿ¤,S…äöÓþK_©X8ÿ– «*ý›ånÑ w‘Ò„á,ˆ¬Ã}e.Ï8¨¨Åšs©Z°ãxìÈ?3&šj€ÚL9e~™ H‰jŸüë[ÿ¿Â»ÖwBf=G[߉. +YˆÂVÕ› ºÌW®ÊwÄ kt™Õ䦰ñö[Ä|™-I›˜!·w¹%RîaØ(•ì1‹Ke­¤ÞÀÀ+‚¼Úm³¢©Q é%AtsàÇ$„&ö.ÒmÍÙ3'r¡ úÅÄ.d@0ššX3H™ÙM¶È¯ó¬FÍò*†[Q äƒRw)Рî]áº.y +éŽnófm mº(«(V ‰ µ„¤"*9TÕ™ˆË*_ýèNü~Ax¸ˆ:‹¤‘Ä„·­ÅV‡É{ Îf·-^Wmؼ¹iò²H7(Š¡8­:|éܬÓÆCÍ€^X{¥X;Ðî¥el E _å*¯Mä@Öâ¯õî C9/ê|™¹ÏÖ–)êSãJÑzîÐcê@·c4 LA­>¦z:m&‡™Ö”(_eåT¬!*ZÌ"ƒÍcŸƒúš |›ÓáèÈgzïؽÊ&}TÍ%ÅëZóV}ãýe Ô|+©ƒœ^{)H`«Mjå‚Ûö.Iƒl'yÊ ˜±CXW3lS.œ²÷C?´á®äÐOž €{Æž%ØLÏyÝ¡@¼ˆ8À¯ {e~­{¼ò.’P"1”d`¶Í.ûjØ¥ìX3Wá-~}4†HÐ?Ld_êûáá„?tzžŽë^©xÌù³“ñÿ¨ãç¯O»íqÞ°/–0KèaÀZ¶Ž-@VY Åíóƒhå½È$šõÏ(-–è-ó*[XE#!Ÿ bà­¾ˆŒ¦`N‹.°²HN2p}£É¸îv ü: ãºkÆ¥Îâo’ŽÂ…JlkõGÛŽƒjgÛºCÏä:¦5ì¼õ)kn]Û–eEpéØ—Ðóôñ?êÀ¶Kvu¢[Ù™Œ'DƶW \Gç›ìúöz]Îòß¡°Q7 x}Ðz +ãf]7%ûÆ$äŠ?5v8¦#@Ÿ#Ulö꧳Qãi<}ë­%ÜÌU.4=O¯Lò¾ã=‘¼E˜cAÜÛ»A¹¬²_wàæ¥s¹•c)úçu«§oÐi¡…v5œ)‹Íü[ØfÍ‚ÒWyÊ•kxºøê!sñâåå›a¢ÜSàk„¡ ‡h˜ +4u]m{Jõ ¹ƒæå³Û>Ÿó–Lôü]XgCìb‡;@¯p l²Hb=6n²Ø_„B”Øá™ÚŸ Ò/ËݧM6䄺ci:^ð1y…oaÇù²±µN3k…é³Ì3×î*«Äô/ìôü’›íO 8ËWîææàjCÍ D}Œ(ÒƒKÞKö?Åí@vtë³ä-À°ôfûáö ûœŽi“nGlü–5µnF‚ŽóµhJä¸^áYo`ÙæE¾TW}šÃÜ÷BµKh ?•»biײeZ¬ €ÄøŒWr#ˆÑ½n†µôÂâÀ…ÛÎR-x¸Ž¸ûR†«>o›®«ƒœ¡f4i?qìHåPUT¯Ë]7ÙÅcÞè)¸YÚ¼O‘HZ€$Þ4ù ˆ#BPωuC¹Â7(•Ž‚V¶ÿàØÏ@¯Ë‡YŸI¨jÚ²™ç}u‚÷%ðþÝv›5 Ü@„ÞÝCýLhà/óï!ÿgóË£ÔãàF%õ¸ +ðW.‘ƒÀ‘º{Š“a»Ù [hß‘” V­‘³Ûüf¨±kÃöùp_uÞ”´û*ÄÙ|ò§ + Hˆ +endstream endobj 1320 0 obj <> endobj 1321 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1322 0 obj <>stream +hÞÔX[sœ6~ß_¡Ghº2’€¾¥±ÓI§N3ö6mÇéÙÅ6R`ëìOê¿ìw$`Û‰ã6ét2YqÓ¹|ç;Y°«ÅÑwç‚]5 £XÄ,Œ S«³ÅåâÛÕâè¹`‚­.B²ÿ°ˆ8âIÌ"ð@²Õv@ +B<[­Kb«›Å…÷ÃÉs¦yÌž={ò„½ª}óØ«®êt»ÍË+ö¢l³ú2]gþo«ï¡J9Uš+Å–‚ £ÙêØI Ùâ ûçÚ_ +ÉC/‡vVíÚ¼Ì+ìdµÐa ׆q©’$a<ŒI’õÍH™þ=œæ2œ¼&‰²/áó€HbqH^†qï>Y&eo£ÔiÓ2ixäýôn“Ò•ôÚlã.XNkâ•>×^÷Ùi÷Q½¾î>’n „†¯ÊHº±{âQF ö¿Â%dÕ•{³Ù­[öÚb.¼¬Ùtúª²S†ÐX¬[Jõh‡á<’1‘$þ2ÖÉRÂ]jæn<ÆúõáËþéÿWøpK±S¹ X(:~^SŸ;˯@׈Èí ±agY“!9ñíO_*<Ì6¼ÏÌ.·"isË ¦| ÜàC™Q©±¼ŒÈË€ôÎ÷e›¾÷W¿/ŽV+é¶'<1.Oé‚DhÃUH"(?í¾ðò²eEæïòæ4]×Õù~»ÍÚzÿÆsØòú)7ÊôcìXW%Rz-×iýëê–qJ€”‰ t`œ–ftó ™Hw›S5—Ât»Úá½ñ­3wCAR·ƒNþSÔU…l¼Úm³²m¦6!·%Ê©v6…‰Íl˜äuzT¯‡+s R`A"…ŽGçï²u~™g k¯3–Eå 2rã %õñóÖ—–§'«¨@G\y9,KÛè±K_¡ôz}^[Q[ÂÞi#ï¬ë‡6ëãxˆú…÷Ú7(`P»ïŠ]öÍ´‰ xØ7B•9gµ{ÍeÔ½õ~™ ÀMÀÀf’÷õl£6c©¿N7‡“Ý7´»ª§€Œ$à‹³$˜†[Qwµ·WºF™˜:_yé"_d—7çm +ñ’ïÔ_†(ø€Ó‰ÅX€ÇÈCÊ?|…—e“·{6Åj°0é“íÀ\E2êh`*ŠjÛ°´¥{Øáã\<>yyþb5… +†&z`[ÔõÖ€&ñ˜å¥%ÇT<´ÆcðNŸ>;ûq"W,Ûã¹x¾º%Ûðø–Ë‘Ž¨Óaîr¡q*%c³Ä`Vâ¶Tï(5Ò‚¥åÆíXª'#ˆþÑ­Œ¤Ì‡që´do3¶k² «ÊbŸuF¸¥3ÆI›CsßîÅn ï.+q‰|'IK9žÍÄAäIº¾žê–\ëI~Q54°ð¢[?¯wT;P‡›ÙMÞ^;ðPŽÌˆ[A ûJf;¢×^#0µ›-äþÛí–pcó—˜XC=FÕÁcJÁ“rcÛÇqf“kZTW·m‰½%TL5 + ÀÅ8èœñ3Tsâ=4¿º\è ˜šMe‘ ÙÈZÅ ÓH€éATŽy¹.vH=”ݪœƒ§Ð:ÕŒÃá»1p?¤û¬>ËÖíAdBr°CÄ;,~þ’:P¤úc ^ W¨ÂëÁ}`­X¼“ú.HÝPÁ>2U(“PÏœN®*cDHëvìÞý›cEAGoOc–ñ^¦ÛìÖ\GJ?t®Ph£ªÿøÑ¢  ZsÆA„1áØ– {à‘*šMpJ o)‚â‡ù‡•›ë¹ÐV.· z=/¦tÑ—øuØVÚÆérݦåU³!…}˜2îï¸RCÇð螶4êhï@^º'ÛiÎ|åY*¨ÓJtí@Úúp€Œzgìyˆ.QrÑq»ƒá¼ïÆâv‰?;y¶šÄ‡åGõ\ý¨Â3éÁJÞêÁlu‡²@|š£~*’»Zpý±ËkôH*õÔ3]‡•ˆS0ï°Q_\¬Þ¾¹n«š…­÷wØ$ÔŸ:÷ŒéëLƒ3ÉUš¢Ñÿa¹`µº£Z¦¨u R«Ûݧû¿@p¦' +endstream endobj 1323 0 obj <> endobj 1324 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1325 0 obj <>stream +hÞÔW[sÛD~÷¯Xò´jãÍ^´ºÀðÐ&z›X ÃÔLG‘׎¨-e$™$0ü þ%go¶ä$eÒL¥ìî9g¿ï\ÅÐrtôÍ”¡e;ŠŠi‚Â$B‚¢F£çÙèè”!†²ÅˆqDá:~ú½i–×Ë&_¯Ëj‰ÎªN5‹¼PÁOÙw`JXS’ÆŒ°H¢ìÄj ·ºÙN÷M0fœ„¸=è¼Þte¥Z£l’"Nâ0EDFˆp‘¦)"a¢ut°ÙÌ„‡ƒM Df o I )‚Í0ñèõÅ8÷WäÒ]1o;Œ#ã·×ó\¿qÜ©¹}A¥~¦¸ +ˆÄîØKw¨)®Ü!nŸ”I€*"®ÿ`‰]ÔKq§ ÿ^AWSÛù¦èÐE'„aåT¶Î^]9càCÕ\sÅžì0Üw䈥i0N€êtÌ)³¯‰0BþùéÿüèÿWùöOí;¦=G½ïÄ6 +™‹Â÷ªÏV+t^.!\c܃`lѹjä¦ÐñöKÀ,ª9ñ‰ér+æ&·"()©6p0Š£^¥1qi”Ô|uE@8.7kUu­«%‘UÁÍ¡œ˜BB¨Ôbø–ÙÏpD:[DXþ¨ÙEvÓÉ“ÈîyÙ»¿"+S9”¾åÿÀ²“ÉJB“Øù{z­ŠrQª’&wWJ¿¥uÝÌKC ABîâÆXýâÔTyêÊÁ;E—WË• +˜Ÿ“!ÃcÎ@Õ€æ0ÝùÏUÕ–ÝÝE¾Ú¨‚˜ÄiÿLË„„'1»$äIÈɵj +pv¾T6àbIØW&<œÈêr·Ð€´–$ +¥ÐC +$1éµ €”$½»"0ˆ¡ZCЮ/‡ LÉ<ëÜNxìv10²s¹%ƒ¸n‡QW£ýÈI{,ӌҽIœ'ì“Kèþmò˼AŠIÀ%ÚÚz´†wx¥7“jþ2/š€S"p}âx¤«‰K×'¸é%ÔµÆ<àv~ÏÉäÕô,ûq€ ö¼Ì½nnij;ˆZ]ȱnWỉ"ÞšÞA(ÝZ‘,ãV&%id{½~Ñí:­C\ô +"lHòôÌð,p =Îy(RàÜ3.}Àº²í9q&·ùúz¥Ú´#ùð.•2 |=#Àˆ a,X­êŠ@Šoô$¦0ñ­#6ÖP{åOãV[(EîÓ‰ýlóÑöV«Ë¼X +¹õ5v0C7ewe\ßÝ]+A> áúb—3àͬáôøòCƒ0€™'éÙ}˜â… Ê®ÊÖøS÷ *ƒÆåîYQÐj(k=д€Õ-6UÑ•05ùjÕêL,al¬õõ‚Pë°D—Â~kc¾ Ÿuh^C)«ê•U±Ú̵K´ Å\îGµ ­èã0âcp]â ö&fÙ¯ ï°¹+ª/ÛNÍ1täÑJЩfAB\À Ê+¤ì‚¦E:Z lZb$¾1ÅÈD„L* +gsHTϸÀ›B£è¬°Æöñc¸Û!j•2cÁ9NSùØ÷÷¶_o…ÚX„-‡­r¨!B¼ñ0–{>ó³S«¹`Àõ0GÇu3|‹:Ÿa¹CûåêPŸ†ÏRøÐ÷zUPY8óƒÚMSB]\Â92›U³`Ëõ£ûÖl£ºMS!¶=b6×ñA@½²È¦]ÞtæjpkX>{u±µõ9ÇßN4¹ß¿?ŸLg4õîõ€v‹y•·­Õ~üú|rpˆ^½}ñâžàßQ}Z7ª\VÆ_põ)(§æwÌ>‹7õjf˜i7ÐÏ¢qZþªf8ŠµF~ˆxøéZáëèOë#¤ +endstream endobj 1326 0 obj <> endobj 1327 0 obj <>/Border[0 0 0]/Rect[334.5 513.24 499.2 526.74]/Subtype/Link/Type/Annot>> endobj 1328 0 obj <> endobj 1329 0 obj <> endobj 1330 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1331 0 obj <>stream +hÞÔXÝnãƽ×S |E6«YÎgH½H¼Þ6mlµI,lµ!©z÷¢OѾDß²çãÌeo² A°€EQäùþÏwf»›½üÓµ`wÍÌ(f³‚éÂ0•±ÚÍ6³/³—¯l±™ É2üÇ(,/ fUÆ3É»YžiÜ[¬fsže™b‹ÇÙÉׯYÎ vþòü³ÏØ7u* +^$û»z¹Ûm«;öUÕºz³\¹ôÇÅ_`JyS9WŠÍ&g‹WQ÷ØbÀþ¶NçBrlîö‡v[¹¦»XÌr]""ÃsøTeY2® Bêb3’[GÐ\ê£ß‘J‰ê~DÌ}FÊ.%úˆá“gRFe|\6-Kç†Ûäoo×Kº’IëÖþ‚mé³Lª”çIxìMx¨^݇‡¤ÿÌDŽX•‘ôEþ¦Á-«m‰÷¿Á%°ê½ÿe}Xµìï©-¸H\€l‚½}Œ¡4]®2J¶”ÆÆlk=­ä™(Ët^ ×å\fÂ_æ,5Ü$ŒÅÏ_ÿñ›?úûï¿Rí”å‚*—ÅÚ©¾ EèÂÿ¯«_<<°«íÚÕRs§ÍØ°+×8 §¢~ûg*nº5“fËÊn¶ 8¥§›ÅBz(yiü¤ÑE©˜±–+=ðM&EšÅ @šý‘=¸Íã›åªÞ_¿ßí\[ãîû›äì;ö=»*³³›ôóQßg4ůÄùŸ/ððù_ºº¸¾IŸ]üáy#` ŸãöåÕ…8;yåYP8öÊ_ï@íZ<{¨+–}þ¯@‹‘ ÏÀQOn5‘0²1¡ÇÒçƒ<#º5Éž]Þ6m BØî«c¢8uD̘RÖží …ø6ñP¬|Ëým¤-+LäÁDÎM™ûöìJ•\~y.þ1r‚C÷f*ÚÎe(ìM²;².H)è«óâ&íìa¯¨|SFmLD€Ý[þªzÁï·«{ï1QbB• ›õ³ëµ)U-¹ÇÊY»M—¥Ç˜+Å33]]ýZ´!¤.žTg˜NX¦hš7ÍmÑgmõQ©Ë¬ícö•Ú6lÿ–®–¨Ðš­b™° òý¦krÂ÷qƒí´Áy?¤GÙ’`Ê-å;Ò¥ôfò"E!’Ž³þÝS fpâ”TdE2Ù ÄS†Qp¦‰Ç'ü´'Áß ñ›üvñ·5°[À#Ó"GïêçëBsUD㣙ûµ*ÐúM ~ 0ŽCyv¤C±“ʹžN‘‘úGߊRtlæ+mO5@èƒäyèR=*iRjÒ™$h$©©Š–Úd.‹nš§$“Í&7O©o|¿aÍaµrM³9Q’)y"ÉNµ*_|š4RJÒ!è'žô_í~>lkŒ$4Ži&·Œx äk8ÿÈH£p”Qä:e9Þ&Ÿv7 ›U¤RØ!qz¬:'‚r¬£ÀzGÂ_|(srXƒƒb ÿqC“wÔ«D%Pžh/9¸l3×$$ßu¯> endobj 1333 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1334 0 obj <>stream +hÞÔX[s›F~ׯØGhÆÝewáщÔç2¶’L§é–D+P]ÿ¤þËž³H‰“ɤŽgtîçû>ÌÈzöôå #ëv¦ÑqJ’T“¦˜­fÏ泧/ad¾š1NbøƒK5ÍR¢ELcNæ»Y VhœÀµùbÑ8Ž™ßÏ~ ®.^ISòüéó$o›¥4 êu“ïveµ&—UW4«|Q„¿ÍWº’T1Ê”$ósk1ém³ƒíM1N“ ;äºÞweU´ÆØÅ|¦8Õ +rRT*B¹È²ŒÐ$E[&;“°¹ 9SžŒnBIðanBÊ}A2S†ŒÀÍ$õÙc`œû¹t!æmGÂHQ¼»[æxƃ®XÚRâ1 ªÊÀ=öÊ=Ô,6î!n1“ªP¿°Ô^ÔpI':ƒß¿…S°ÕÔöÎr¿èÈûP§”…3Ù:uåœAgL©b¬5çJûb'É´‘–ea”B©³ˆÇÌžJ*ªBüñËÿù£ÿ_ãýWìДaçbß;ÑO!sSø}C=ÛnÉu¹†qÕ8Ü!ƒalÉuÑ°›çíÏ ¸X,©_L·[š›ÝR)Çh#b à˜3x\é„êÜıÂLc›ä¶XÝ¿ÊMÈcðU¿¹mÏ‹¶\W×ûmp Á‡rÙmÆ`sÀ5ô‘hŠP³³D´_ƒ6)bMKrâ¬Hk|Hi»÷aç7—/__¿»ºøpy>ÿ)œÿ~ð›z†Œ#n<¤íò®ØUGÉEÙmÛÀŸù±s—Ò,9òvuöËÅõȇøðÉp6ññdj\ÑØçrˆîñ„ ¦lX‚ÀXD±Jç`úXÀ¶ÌÁÔÍQqMkûþòläžÑt³ô€Ñìô.È.Ô0#{„]ÀçÛÂzK©r%=á²X·,É=ô£¬H^MbÔTòͳ›ÏéWU0æƒ,]Y£ù%Y€nß‚×]ݸ0#`­å„±´nëݰ˜G@ŒÔö¬ +#ø®e lõñ»…”øV’¸y¨ºü/“Ç|ÎÝôÒLY"ÄØ©b*Ìæ¸9^@%T{[„*°Ë9ZK¼lÖñc`‘ŒÆ°ƒÈD1òê9ü|QWР<¸É›|ÀÊœsžùŽI‹È Á¢ +^ç;'-úÀ#÷»£>à`Yïo·…Ûç'¡œ©c?÷hÂÇÃfâ ™ 7áchM²cd“Åoû „’~]ïq^ÛqÞÐ(úHÚx’Ìp5¤ )›t‡ã ŸÈ8ƒ“gæ ¢çH!ÁÍ]±(W% À "‚¸ÓÁCÈ28!|4æò~S.6æ‘uQïŠ1¢#ø$[0€ã¥::²‘˜È]!óuo@y„[8‰‡úAì,í#NSoîpOò-É[%*ïHÛ§aüñ¨”ùc:õkRbµ +¹a +y¦, 0V‚_ÉÒ +AÜGvÛã}˜°[ Ò•C|ó'‰+òåªkùÄÔ®¾m;£\ƒ½]÷ÒÅ Z6SÃxýZ'ܯuSŒ-IŽÔnò;°¶£`ÁDEL*"¨Cøh|ˆÖìDQ÷à¬é˜¼½Ë(Ì›ba{ÿ‡o(±#ò0Á=°ÍN_<ê'Ud=R)KD]M Èpv +$åCTž·ìã¨o9/Õ±búŸ:Lbr$Œ*@X2'(l"ÔUç8úøbº>›ÏH‘(÷d’òÒY25T öå”nHºá$‰ó¯FÃ&™˜RÛP.ŒÜ¤T…^ lêåÉ‘yI³oÒ £Ý”ì„Ǫ €‘étó¾D$2;! ï©]u«c~¦ |õk7Õ8/3?`Ðx…Ü-‘»CRLÞË(C$ò<þìÍaSÄãä}…,óïò5‡#YùÄÈJXò8Åö­<Þ¢_@=CçÕzâ°]ÅüK©œ3P€«óøFS¨šÞ‹ÜS,žYÇW üÁÅ=ã(v´…NA©ÉÝ6_#âêÉÐÌ,t:öÌ´œä5@Ç2ŸJÍ3¨}ïzŒêÑ +T7Ã,R¿^þý„¿+«Å¿ ž;b[F¤+§ÿÇq¤YãJʼÑzI4`×xªÅo‹î`É¥²t}$pómO`´cy‚ãÌ1u²æéÔíÀÈ€d­Oq5ëªÏQõH~ô/¦0 fûPÉôŽˆÉÉË gõ)g_Ìgÿ0L¡Ä« +endstream endobj 1335 0 obj <> endobj 1336 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1337 0 obj <>stream +hÞÔX[sÛÆ~ç¯ØG 1×Ø;ð¨:JêŽkd梱2ˆ)´  `$þ¤þËž³»¸’r•Ø¶£ °ç¾ßwö0²[¼þö#»f¡1QLd¬‰ˆH-¶‹?¯¯¿a„‘ÕvÁ8‰à.,64‰‰8YíH¡‘„ßVëÅ’FQ$Èêqñ1xwù Q4&o^¿ùê+rU‡,¦qPíêt¿ÏËy[¶Y½M×YøËꯠJ8UŠ +A–Œ2­Èêk'Qö²Ù û§:\2Neƒr]Ú¼Ì+ìrµP24UšP.’$!TÆ(Éú¦95º{NS.'ï!&a_‚Ï}D‡„ÀKwî£eœw6råmL›–„KMMðÃÃ&Å;´ÙÆݯIP†Tþ³ïüGõúÞÄÝ5b +|šã‹ÝpaFšÖ_Á-Ȫ+÷fsX·äÇÐÄ”™Ùx}Ué•Ajl¬" 6çÚtÑ–ržÉ–$á2†X'K1w«H¨©é®/¿ü×?ýÿÞ?bî„¡ 3u¹}2_…ÿYS/Š‚\ç;(WƒÅ2(Ɔ\gM›S`½ýr?fÚíL¿· ·{K¦œÂ@Œ±ˆcïàsm$5ÞDL£§‘s²ÈBlaÿÈ`]‡ͨÞß5ïR¼gÁ1 P¸¨êPÂÿ«'ð&má‰÷S à5KCö.®Ýîàh*·8;jHJ¼(åDýÌå'ê ®.V WŒ IŒt§PÉ%±iÓ6ÛgeKÉeÞÞÞÍõ¶ªß©Gà‡Á+â¾ðr¨#1ÁÕûw7ß¾ÿ~"DRî>ÁpˆÎÖÄ‚ˆ«ê©DFµ95íúòÍê¼iÓIÕ|²c€¯Ôš a·¡pWÙ碀+¢Ûc¸äå“0±ˆÆgõîâæòzfN’øïëÏRFÀÊR“™¦ª'¦`°2-7d–ä.#‡׃æDª!úÌø¥ÞÃlCöU‘öX@ %T« HUºGàÉ<¢C~«,½Ü¥ | L3¸öáX¶é“õmµânQBíˆ o Æì.aé ²9ýäàì,mwÖºvê˜ÕWi{8¢l$éb…‹\ uŸ×Èj³©U.bƒò°ÿQð;.÷Ž¸ž¦e¼²Yˆ)7†UŽ,ÞT‡»"û˜ÜEIw%3!z#´5"x*¦aaTD†ŸêÔ€²‘ú2:Ÿ¯ó…1Æÿ_™ æTÀ ÓÉI5®zÖxÉ~žU noã´z€/Õ—Õ}óou߆N(;Ã.R1d8Ï.‚ è–PÊî€`ÒL :6ŽM²µI&²‹?îËfbÀzB¨ÊúÆÎSׇ‡los -àR† É‘•û; «7¡ZpkÂ…ð¯ÍÊKr‘•;ô¦kŒP8o¢èlMpÆ ®‘ó ¨Âî=ìÊôsüÉüQ㮂`¬ œ-©mÈ l…*„ÐjAé`aÒHïu¶nÓrWØš“.~ðâ6¸ 5„ ‚&ÕA^šY7&ñ3ÝÀOo¿žõMbÒ pi—Í©] Œñ¥44yvþzÈë® N¨\uK¥ïÚoC[œhûÂS¶ð²t}•áò­•›"´d^cÊ|÷'¸±±ar…éç3¸ô…t‡ÅW‡q…”˜Lý¶vG’>;žÿ±­6ê\ë*<ÄHµÜd»aê,#6W°© Ó)+h“ldž/­Ú ÛΘnË¿G¿µ]ºzžëÓJõËÑ¡'®aµJÔË×7ÀÙT?0ÀKÖË„nf%õIuUâüþ¡Í«2- –ž& K¾ºL—…–88: Õ[ +ûx”>Ý•žÈÛÕåõÅêrz2‚§¥C1!ÄéAežCŽ<×ïþg2(fœŽ¸v€„Íõ¬'á3Æèg‚ûäð?žuL‚UbiÆ°qàŸ%Äjëóó”è«ž¬«â°/ki]9>|lpGz@7ýab”មg…ï!‹ûô!ƒÔÂ1χkbZסç¡Î 'ɈF¦9€–BÈ3Q—°˜•ð9ÿ\\ÙN‹ ÑѺö¬g=ßÁê¼Ü½"yI69”M¹†“R™·ž_u'ϱu×z8pÔ#R> | G™qwvZ:©£Rôú“wh¶¥•š€B4 Õ“³«5 P3ß•îH—5Ù°MÁ¨¾7z~àÁ#Dw$sŽ÷Ó8…Ka³Žl‡#ØÜÓ`°„D'^6Õ¨Šã~®Ê/7Û€í—ãÿðlãrµø—Iuó» +endstream endobj 1338 0 obj <> endobj 1339 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1340 0 obj <>stream +hÞÔXYÛ6~÷¯à£”Æ /‘âã6u/¤M°QEZŠÍuÜÊ’+ÉÝõOê¿ìðÐi7Ø$ ‚bI–ȹ8óÍ7KÑvñä«—m›…äH‘‰T"NPm·‹Ï³Å“/)¢(»]P†üÁ¦ +ë)N0a(Û/HÁDÀ»l½XbBGÙÝâUôlõ%JpŠž>yúÙgèEÓ§Qµ­óý~WnÑ7ekêÛ|mâ_³oA÷ªÌ9ZRLe‚²/¼DÑ˦ƒìŸêxIÑä ëêØîJÓ8a«l!V|’8‘3®µFX¤V–óÎ9ì>‚Ϙ‰ÉG‰]ÀÝGp¹ˆvaÐ>Š´óÞÆXg"K‚‰yÓ¢x)±Š~8lrûÄ¢ÖlüÚÙ»ŽÊ'QXö]XT¯ß„EÌß MÀU.™ýASÿRÃ+%”†ý/àdÕ•ÿ²9®[ôc¬RL#D6A_Uep2.TÄÆš1©º` 1?È¿Õ -…Pë%#Ô?&(–XFu÷‡ß>ùÒÿ¯ðþ§=;®0µ'Gº³ã}Ò…×Ô«¢@×»-¤«²ÉSHÆ]›Æ@mr›oÅŒÃK³Á]a†ÚRÌÕ–HéÑ&˘ǵô•f4GR)ÌÅ7„që)ñNnªãëÂ<ŠÁ¢€%ÒË8¥€&.>˜$RÚMÑ©ˆ³ßGÚ(æD1¿Š¸í(ÊHâêƒØjÿbPíJ(n+¥S@DœÑ^ñªÊãþç©2†%IŹ²šÒUvóáÊ|0§úfT꙾WQPòµ½™Ÿ}è{Ýë‘ôÇ¿Ä΂Ôfî$¶ï­øæ-Š½Ó^ç…fy˜hjÓÊá]~­ŠÂm{S¶Í4¥/t¨Ä[$´èBÿÛ¡*NWÔ·²T$#C\a†ºÓO£—³ÞÝîLƒÚ7•1¥Ñ1¦Ñþ5´´êY™[Àìf·ÖF“O­YzΤ£¾.¢{ê­Iú4ehÿ#¦°ÝÄpAǃ3+¯m¹‹(aª\Ô›.fQæ›\ˆÊ8Óù,Ó'PG<,ù€ûìO ÓÎòº?'¥½ãhÚí0H=F»mvsåZ††^Ïà +xÖÞA_Gp.¥Û|vÙ£ÅdÔ²t« ¹„@Ü9@ƒ° —Á†™¾R¨>«2 É$SØ|Ì°8»Û–Um¬ªØº“ö­¯ëâÜΡ®‘»'7¯¥X:–pÏCaQt{3–}X×1 ‰ªç¯›g9<á»Yæ%¸Ö±í×v¬‚Æáw¸ítV0 .ˆµ# ÚŒ·ÁÍ«©ŸWm›œ†tгð]¯žf³b—Š‰®ØŒXí Šõ™˜Á“s@»Ê¾þw=¹Íp-™°‰·Bbß߬­Ú·ï‹3~"Uò!eà†Í#=…® l +®ÐÖocÎá©r¿‹ÂeµŠîbÛ9£³0áI/êÙÕÍêzfŽî€5@8¤g•,’y8€¹+Àu^ZÚqtôTk1ÆjÕ wÑlÐÞIÿSQ ©©"T•þçÚÄ\ÂhZ/Ë HÌRƒo/Oe›ßOˆé IΠÄ8#4™gõ¯Ü„5&]…­k_V'S_›uûKä‡U˜9Ø»~(ù}²éŒè¤%4½8·ÉT½÷tÓé<}ÎOö üü/tþÿfâQÃ`êþ»Ñýoå‚ò2ý=Š?|,ÿ°é˜r>êiï1 {b~_ÌGчB…iô|¿x‡9ä¾`量SÎfmMÑ‹Sýd®ùÜðfÙ™#\GîÜÅf6Iÿ¨kÛ +ÇD•%%nÀÛ”å$ +n–ÔØßAow> endobj 1342 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1343 0 obj <>stream +hÞÔX[s›F~ׯØÇ¥±6ì…Û£“(­;i’±I\Ó,a›V 8þIý—ýöä8vÓN§£`÷\¿ó³âäjöüÇN®šY(IäÇDÅ!‘>©óÙåìE:{þšNÒËÄÇG,‰I$}æ ’nf>¤0_áYºœÍ™ïû’¤·³súfñš,&/Ÿ¿|öŒ¼¯=³˜VWu¶Ùå9*Û¼¾Ì–¹÷[ú3TI«*`R’9g< HúÊJT½l¾“}Z{s.˜¢äãjÛeÞa‹t¨…, 2IÂT¬%ßBÁ¢°{§™P£÷ˆ‰‰4/ás‘ÄÄ!!x©âÎ}m™"p6fMK¼yÈ"úáf•é;AÛ|eoH¡¯ -=P·ì·¨^^»EÂ^}ÀW +ýƒ'î!E*J°ÿ=n!«®ì›ÕvÙ’^3Ns'²qúªÒ)CjL¬|l!¨‹¶RÓLþIx¥1bÌ…Ïím@¼…”îúø˾ôÿ+¼ÿ©s'#Æuæü.w²G!w(üwM=\¯Éqq¸FÜrœ79ŠSj¼}ö„ÄÃ|źÊtµ S[!8eG7á”n°0ŒÂÕÚE_{GËíæW/ý»Q°ÐÃ׋PW楓ڽs"ôî³Éî ¿¿¹yõK–ºÕÖÃ×æý¥ºtŽÅP +ïë-tR–Õz»)c)™(‚ÛûmXÀÙh6{–½œÈʹ© +›Wdq“ýáq¤dŽ/²½1&fuíEøyèŽó½„ysÁ$ä€K&Õ=QBXN |Ÿ6¶cpA„um—è±cÂ9¦7£ý¢$«¨)—9Ù–EÛx\Ác9GÈi¶´Â…ù"ooÁA1ÍóÒX°÷q×2cʺØ©»Ð÷Úhœ8‡&%#RðGáÚµï;I[‘⪬ê\Öä»2…U”¹Ìð>3(Ãvæ„„ cmØfæ"ï,<§ëÜSôò“‚¢ËÚšp«wÍ›Lßs #Q »>@P{ +ߧ -ð#¡+=)pêèbÇ:C dì×$ÞEÞU‰™ºb=s!ÔN£PÙ¨ž½JClXéÄ iñ5 ‘Ô᪗íj½·ìk:àò¨ÜU 5ÑC +gO¨ÏRËAyt[ˆØìÏJ l›|Eªr}‡/ ˆ6u T[0.„±Y9v‹3éJŽ¾9<[?èGWB8?ò¥¶ÙMTsä=†’‰ÅD ß•möÅlISa÷$, íp«oô| b¶ &Oç¤D€ÁÐ`pY[èÝåõi±¦Bú‰ÚÁ„éJÕƒ¥¯Çdx¶ª¶ë|ÌÝŠ &=-ù¡Õq‹•Bž¾8œöVjF-ö“7ò|dعˆ“ˆÄüÚÕäˆ(1 ƒ>e0ìó·Æ·1GŠ!·¼é:Ž¥‘Y6)òÆГbé|¿£tµÎN"2ôþpÏj€‚`ÚtEóGЋTÝb—×*4¹Ø¬zÂÇp§sû±È +‰¦ôÅÇ£ÃÉ(O;‘«ä Q, +„´ÖZ†e³Dí+Ù¯09Žëð7Ðr0*¦Dfu¼ZœýøöøÛÅ>/ÅߪçÂjÏ¥¹Ä¹u@,ÞîXÀ§È!Ý2ܨƒ+hm•_â(½fÛkpšæ«Qú8ŽÍ÷„öÝ‹“LˆF|Þ3—åÜŸnlãÄMªº‘Ë)ªqe\ î ´&ùmVò¿‡ËBC6ôËzl êÜ7%Ôó×é ẋJzëž íîûµÓeUKã:«˜Ì‘º‹}Æþ¬ÿ\ Ù[ýÿÝäÎV Ê}30Eq"î÷Z§d2è+? 'ªwç‡^~¬îsÚÿjˆ¯ììû•=¡6:ž˜—õcú´&;é¶!ÎcýÏ@ðw[ðHñÙŠ¿Ý„9ÎÿIh§Ù§¶áaþ§CÓC'íñ‘Þñ13ùLñI·=µ?è&½®–™¡( ô7kœyÌÓÏEf¦­E:ûK€õ…Ö‰ +endstream endobj 1344 0 obj <> endobj 1345 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1346 0 obj <>stream +hÞÔWmoÛ6þî_Aì•Ú,I½£Ø‡6u·níZ$j·¢. +Å–m­¶dHrSoØÚ¿Üs¤dGN²¥E‡a I$ï¹»ç^xQl1¸ÿݹb‹z¸,”ó¢€¹’UÙ`>x” î?QL±d>PšIüâ¡¢PÄ ])¤fÉz "¤‡µd: )¥Ë’ËÁ[þlü„ù"b§÷OïÝc/+GE"âå¢J×ë¼X°§E“Uótš9ʵª|áºl¤„ +|–<¶ˆÞ[°®œ‘ÒÂã9pØY¹mò"« Ø8Z„| +„0¡Ý8Ž™ð"Â2Þ‡Í&|Úëm‚:àšM¸¼'$64Ä ›^ÔyO†iÝ™¨ýÖÄ´n˜3 +DÈ_mf)½iÞd3ûÂrzƼp„ÏÛcÏÛCÕtÙÒö)•WÝ@Ó‡Ší¢ÂRè…1ä_âXUiwfÛiÃ^;a$ÏZȺÕW­2DÆP%‰k­ƒ°#ÛóŽù'S1”F :i©ì«Ïœ@œ±îy÷Ç~ôÿ ¾ÿ¤Ø¹¡P9ÙÅÎÝg¡j³ðß5õájÅÎòÒ5¤äv’±fgY¡6]Ê·Žv±˜ÍDW˜mm…ÚÔV€–rè6Áq·ÁÁ Ž:KNJòÌÓŸÒuæ$¿z +wÏ µŒé í"9ßdÓ|žg5k–+ ÍÊ9Ä"PVl/e䃖I:}¬)ÙfEmK(0Ñv¯Öô‘F%†l\ßbùs‹íúk«okÑZ*éÙl±º½‚¤ßIû±wùz«ûú]ßEÞ‹õáMŸmá¡Qõk«ïŦÉË"]±´Zl×YÑ€rK´Žnˆ6½/Ó†Õ&F;CyÏ^t.}Å`Ëêë§Ljáy_¸¯646>MÆg“qOÞªG+Ùf±ºI›Œ<}¦FZ Z¿‰º{õþ妫%-f}x€k¿Ë=ðîxŸZ·ò³…£$nä­ƒ?ë Ü¡¨JæXDÚ?i*])LËÕv]ÔÆRÜ:ÊG¥_Ö·} nÔkYáîqB‹³)s“òuúÁQ1.¦ÌÁ¶ÝÓªrB|§æŽ‡ê‹³~é)W¸Þ ,]M{÷(íoòÏÀ¦úµL´®Ýê™n=#iÌ8C–l–#mŠiƶEÞÔŽòàÁИ®P<îq¸ÈÝò|‘5—è´ϲ˜pøÄfÄEG¾A½’Š­‡òJûÛ±£6àû½F"{t)Û K–/Š²ÊÈ®:;Ô8ŒÚ7EµLÙ–nÞÐÕ}Ü]A@]ýPŒW2ãy:­(4ÇLãbÚ`/.ìKÝToòv¹`ãOézc?V4!êþ@Ù»M|%÷J»¨ùa«5ÃsGS•”…«•¡8ä—ÓКÙDü䌀мÂíQ¬v¬^öŽÖ6X‘Á ™æ‡±ÕH1ÝÖé‚î V—¸‹æÛ‚ÜCŒ+;SZG7Ô´Fc…ž4£xi%ˆEf2Ö¶´ \—£Ûµô=f?YæµõÔ5ž†­§XݤÀö0[ó†Ln¬‰RúŠ‰~wã¶ÂIkÛ4]­.Ò)EÖçÁff'âö9“$Ú†-q`§mz¡ƒ +Ñ£B; oêNÀ¡ãô›ðU6¿<µº>$Xßm²÷HTá¾v¢‡Ø‚ÕÏÒ]†Õj¿y®¾2ùµÏ²i3áWïaŠ2ÏXÇ‹–}Ëá4ôOº˜@%m|‘5N4KØ3ሂp2qÖ)Õ<iÂëü·¬œw{çD_ÃØ}ŒÎŽ·ò`P·è°ûîmÒê¤Í¾ÒÞçÄä%212“ºC£L_Zο˜ùyEè’“O—iÆ þÎín<×óa\Ì:7&ËŸeßQ­Š°SDîo«‚ÉtÿÎü%ÀïPf +endstream endobj 1347 0 obj <> endobj 1348 0 obj <>/Border[0 0 0]/Rect[334.5 610.26 454.5 623.76]/Subtype/Link/Type/Annot>> endobj 1349 0 obj <> endobj 1350 0 obj <> endobj 1351 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1352 0 obj <>stream +hÞÔXÙnãÈ}×WÔ#™i±Y ‹äãL/Aéíd0èÉ-•låTÜý“ŸÈ_æÜZ¸Iv<IÐ@‹&Yw¿çžKÎnW¯ÿ‰³Ûn¥%ËÓ‚©B3™²Ö¬ö«ï6«×ï9ãl³_qÁRüÃ/ò¤,X.Ó$lsX¥’¤ +÷6ÛÕ:IÓT²ÍãêsôÇwïY–ìÍë7ß|îژIoÛêp¨›[ö¡éM»¯¶&þËæP%ª,‘’­yÂuÆ6oD5Èæ£ìÛxÍE¢¢rØõñÔ×鬰w›U¦Jx¤“L³DȲ,Y¢ +’d}Ó"Éux§¡fÏ +‰´áó‘ÒÆ¡dx¨Šà>Y&D°QdÞƪëY¼ÖIýéaWÑ•ˆz³s¬¦ß2jâ$‹ükýKíöο$ÜoÊ3ø*µ ?xénâÏU^âü.!«=º'»Ó¶gŽó"á‘ñ";¯ïØxeHUJÁBç!ÚJ-3ùOÆK(-ër-Rî.3ëDGŒ…ß—ÿü×_ýÿ>üI¹“yÂ)siȪû*üÏšúíý=»®oQ®9wÌQŒ»6AsJª·¿ÇBâ¦Ù%¡3}oåÂö–¦œÃMáঠ>Ó¹˜6Z:ºèÁàcµ à®êf'#r‘(%<ˆœ,M²\±’¬ ÖNâÍ_Wˆ1ºi^÷A€Ã ‡rh±ŠyõÙ€fÊKHépjõ\}øž„F&ÅD‹ô)ì̶¯Í+öxWoïØþðD"àÀ±èÁ&¥%aÚ(†c /fgöÖàŠÈÏX¥ÈO%¹°Ñüµfσ3XÍêŽÑ©µTIšeKh²™{3tªºgÈ‚©àîÜ0ÔY6I —£y¿}sýÃÌ@¸Vf—"›çóвªÙ±mÕ°ãôc‡ckX‡›ÇfkÈœerÊ]þV[òÁ9·%aïcLWÍÒÛ:­¿ZEy2 ð²Ý"„áÍÈFcØ99dG–//›ùh/—ÕÞÃbXý‚¾´¦a ¥SÛ¼ òÍû©¯zs0MÿÒ È‘ˆ]FP“ Ê¸HY’ŒS} •¹7%‘\.;©¦ÌHÌî5þ§HøºP!Õ¹*0wZ8)h¯ßúÀ­¥ˆ±)èDvN%šÛSuk€¬ûXPH цÖ4KöÄÓ„Ÿg ±ºÜ³µUäÚwÄO1WDªŽ'vˆ€ê*—9uÆf}Ù…Z¶˜ÓzoöHEÛ[X%džUY3íä`‰ðA¦–\ôÛ%ßHË»fwQG1öÜ´”yÚ¿õ¬‘õ®öURòiÙù@5 7,æ꨷†™`µ%—˶ÌûõÄå¢eÔx¢Å`ÿ ¶†ŠPCt°Ø #­9TuC¤úPY=Ç‹KȧRï: º?èlm&'B$û†/ÈÊ&]§üTÚÞŸv@ÉÓ?ÆÄ'i¨:P#A$* ÷ÝÜ_ƒºíX}㌲Ù×Nª…>°Ô˜è,3î¯/è3U‡‡{ØyÜÛ"´ÚšhË—žŽÃÓú¶3ÝÖm 2ªo`5F¦‰édôÊŽP‹5¿†"‰g,“Iè§ñBÂ@ì™T§ *ñ|À"‚„ó´$ yŽ0£±Yxñ“ªÈ6¼@Ò­dÏÈRKS qÈaÒ±Â|‡’StçY“¾„>`ìvµŸýqÈJ(ôwv¬¥‡ÑYb”KLMEÆ@åÄh=í»¢ø.°câk,R‚+ßucËòlR#Ê|A#é‡ëÍb:ËËÓY,ØÌc û,˜Î½µ”`âx1kÊC¹ª'YÍlÇFêƸ‰Až£x1ÕuÕûù`êâl‚•ùy:ÁÝZD¯P(„Ÿ©ÒNN× +Úöí…V( +€ÞÎNWbéHÔ]O\Å +ÌšÜÈÈ I#­•zAV)\ñ´R¥1¦Jší[Q®?ž•se—ì¾E vÙ"#Ó A§Mɇڑ‡.&t„ýÉ%’øÝYqš.Ë¡—Î**Ñ—8®"VïYwÚnM×íO÷‰;ö,ëªõß^ÑW X¢‹)˜ é óÖJÚö>’#ÀeÚ¾JË/‰(<¿©4|7šá?Ï=ûsòi¯úîÛ;Ó“ÚÙs}–_$ÿaÔŒ JsamË΃~ÎéGòÏ‹ó¹ ³÷Ô5ÕÀg~N5†¥ÖüíT·ÀAÛçšDÓ<߃^ùo\,y&.¬?)Š9›q=à­†¿'>±$M‘‘PE.iÞKw¤€\BÌ@x^Ävù–lšÌæ°êÔ|¢•è‹=²Ùˆah÷%.èK5 ¦º¶*â=»7±Ž<öçÈ}}±d•¾ž¥ô-ð-‘¢cî´Å‘»ªý]H™VW!Ê@G³@.èË\Ô|O«Xtð|~°” +^Ë)Sü9ž÷ð´½Dž£½–8€>­ãò·'Z‹º¹])—”Ãúa½‡Y0 æÌÊIP.|bp…ñéÁlë}m\ã68 ¶FÊDóI „ꣷîë›K^Ù¾ˆF_‰—&ÞħJ¤˜…sužñÏÓä€ú誎Uô0ñ‚Ï#x¤'çñhZÝŠÈ׋›pÒpXÉiŠs47 í|äv|Ç‚ŽF°å½¨ï—•6Èšu¡¸'ëÓÿBicnÿK€E‡§, +endstream endobj 1353 0 obj <> endobj 1354 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1355 0 obj <>stream +hÞìWËnÛFÝë+î’l¬ g†Ï¥Û‹Ä5l¦]$]0ÒHf!‘.)Åõ'õ/{æÁ—­4 £(Pi’sŸçžsÅi3{ùú†Ó¦Å’’ ¥0IÔ¨Ùzöc>{yΉS¾žqAþáÂÓ„e)%2` |7 `…!žåËÙœA )¿Ÿ½÷ÞœSÄRzõòÕ‹tÕø{ë>j–·î#a¯ªŒ…þƒgö¡Ä£$L2œ¿Â-l5µ}³:,÷ô‹Ÿ¤Œ{Ê™l¿ºrÎÐSª@×Zˆ8銆ùñ NS”:›‹€ÛÛˆü˜ÅQwýúË¿þé×xÿ§îL× ºÞÉ…Ü¡ðyC]l·t]n×DƒÛçcKתU˜M©ñöÉÕŠuƒéf+f¶bPÊ?° >Œ“xÄ4—±Î2° .À+pÜvªÚ·ŽKbkà C$š£¤>èÝ•Õe±S~þûÀ: L{_HÍ3Ë™£žû™ws§–åºT-íoU8MõZÈẊcˆØV]µ-?6>ÈÒ+t1†ñàš¹»\¥¦S“®¹Ó ‹SÂnö8Ý­Zß¿-–/”µ¾*«h´ªŠÓr½^4ª˜’餒QÚq¶‰U:¬¤zöµmC¨)“šP[**r¶"k+4•J$û°¼Åe~vy¹8½8?_\Ÿ-&•MY– ÇR²-Q»/öJ÷ŒQŽjM}:‘;ô­\½Œ¯ð±/*[ªïöe][d¸²nç"c"5¢ÓÓ`M°D=>*:´jE»ºQh1žÔÕRQYQA6">Y*‡ø»2]]\NAÇÒQØÂ9DZ-u Ìqp™s LÏ%ƒ>&ƒ›‡j_üiÎä¹°‡2–ÅV¸ôF¸[| ÓÈ÷^‰òl•{aSléÇ^<Ë€âqý{ù— Ì“ Ö,– &¨ßŒÄ÷Ë@rLø’Nø&›À òƒÀw¢íIB}Ÿ}ÒÉ›èÏ ¼´‚ µ H+†Òëþ-ÀP¶Q› +endstream endobj 1356 0 obj <> endobj 1357 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1358 0 obj <>stream +hÞäXmoÛ6þî_ÁÔ3")QÒG/K†M$ê6 ÝV¦ ¶dHrÛü¤ýËÝ‘”,9îÚî[1¨$‹º;>w÷<Çp²žÏɺ)I’0%Qªˆ Icf«Ù·ùìüŠNòÕŒ Â?¸ð4aYJ²P|; Á + #ø-/fs†¡$ùûÙkúâòŠÄ,%çÏž‘Û&à)Ki½nôv[Vkò¼êL³Ò… ~ÉWÒ¹Š™”dÎW1É¿s£Á6?Øþ© æ\°ˆ–`‡ÜÕû®¬Lk]æ³8Ê`GŠÅŠ0!³,#,JÑ’Ý›,Qý{Ø4Ñä=`‚Hûö< ’Y2/£´ß>F&D£ˆ}ŒºíH0W,¡¯vKw‚vfénH‰×ŒV‹©_ví5Ń_$Ü5ä1ìU*Ç,íA Áܼzñb 0ü(’dȤå&Šàò¹ˆXYè"Cú*†€Å庪).Û!áÌ9ëuN¢¸ÙÚ³wX~aÂTŠÂ³ X„‡Y½¿ÖEˆ±¾-«ˆZUékýaÑ}¡›©¸M +;N{ µyîÓìL[uKQÛ Öê;À•ó#ø-nòË››ÅõâçÅÝåâbq7“‡Œgã/•÷*”ƒ³ítg,.$‡¢v{¯Ðââoqšx§>-§c³)…í¸i:]R~ +¨‡î­–¤”Þ²oÍ’ÔUaˆ^á\`tñp\y)ªþ;x:ñ §²^šÍt?““ý £ìé¥qÓ)+¢¼Ç,Jž–ýíó›©–º5Ô…0ÅE¶dhk +„‘I%ƒ¬CÇSÌéýcÕévaž ·2c™rS Þà`“I&…¯waÓüš– } +TÔ—ûꄉ…Pã8X„8&Á6–õþí¦/(Õ—±à*ë9)vÅø$c®(p^Ì™Coˆvî?ÙEYÔ ]Äó ›oŽëW¢b)j¥dêÄ$‘ãŒÑ7Á”4ÆMfißÔ½L¿(ÂqN; R%pèuaY')9îC÷™qÊAKÓ,¤WD꯭4ä¡4Ö3§†Ê²€^Ù5uaZ$›=bV«@J+#ø LŽ°ªØo4ÕÙH +Qälà 0üÓúVÀp¶úC¹ 3÷ü·%Å~ôˆ¶a.ÆF©Hè Ä +ƒ9…„@‹Q€øeÚ~¶7ÐÙ6Ž>ª%yåÐ"lDÕŸä)6 ž›àI=û4Ãhà˜MF€ÕÔ‰Œ„ÜCðÞÖ4Hl;`TIneä¢ÇFÔp6ÝÇ\¤v„±…áwóes­T|™ø¹?Ì4JÈg€™â B66ÆQÅrˆéãÚ(á¥T¯ŒÑG”Q)ãžûcap¨qn§g+§#uÌ`ä,;¬AQ%ÝI§Â³ O3J?¥]¯òcé‚i&;5Hò¤gúcÁœx…ñ<‰ÿ²Û~Êœêä ~ntÚ±3Uˆ¡ -MÐOêäXîAæ¦Ýý:¤ئÒ8v³/ÐÅC:|ØAÂKá„žñã0ñTÏE¥.£a ü\Ytµþ¿WEŽTørIŒ¿>M5ßK“¯PåpŠ½Ìg¿ 08 Þ +endstream endobj 1359 0 obj <> endobj 1360 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1361 0 obj <>stream +hÞÔXÛrÛ6}×WàL#„x}T§“Nãzlõ2“ö¡ ›ŠôPTcRÿ²g"e¥Í¤í´ψ7`w¹{öœ¥%»]¼øêF²Ûý"Ñ, 3e Ó!ëÌb»ør½xñZ2ÉÖÛ…T,Ä2KEž±T‡"Tl½[„°"Â÷Öåb)Â0ÔlýañŽsñšÅ"c/_¼üâ vÕ2oo»b·«š[ö¦éM·-Jü¼þ®´s ­ÙR +™ÄlýÊYŒFÛòhû‡.XJ%"^Á»n}Õ˜½5v±^$J¤ Þ)q„Òyž3ed˾}aûï,T4{ˆ”Ðmâ•Ç„ä6 9ÃÃ(ÞžSjQÅ>Äbß³`™ˆ”w¿)èLñÞlÜ «è˜ó&1÷ËÞúE]yç)w eŒWÕ‰¢ ™»›t+Òû¯p +[]ëžleϾÒLHn¼É½÷×6Þ*cSR®•JÒ!ÙQtZÈߘÌá4Cªó¥ +¥;Yˆ„36?ýð¯/ýÿ/©v:’*µÓ# +¥Gá?ꪮÙuu ¸¦î@Œ{vmö½© o¿Jã¦Ùˆ¡1}o¥ÊöVJ9²MrÊ6X˜¤É ÓX€†ô~¼.MwYìL°þeJ!Y»¬„´ SŸ›{SVÛÊìñ +JǼ¿C‹Dœ®¢ö-ùc BtŽä]k.(dŠŒ1±jÏÚû¾j›¢F^6¬¤äÀ *®ÒihéÈú6£ü½a‡½Ù°¶)-$Ýpº>÷IÑ( Å–´ËåÝ<Ó=S¸œŠ²k¯š†R¼m7¦žg ú\2ª8É€¹ÞÔ9eUÊ“ˆP”‰QÏ՛˹k‘MWCÍ•¯¹))§ÂmñíæÀB ZÅó¬:7M_<Øëµr[r‘'N‡é•:"ŒûJ”Àv…:Ö&HøÓ”Á`ÂÑUfÕÙöù‰;:„’ÃÄýÕ‚oÚÃûz@g2´…’‰Ï¯c‡ìw ºe‹ú@óÜuÒñÒošØžDZ¶ F…1Ýݳ¡ “c3¨§îjšø#ñlÂ-Î=‚S=å@þS0ËûŒ$"´Ì@_ÞÁ +TE4s{ ŽØσÂÐ&Ò±ÊÚÿ/?§a[Søjqæg8 "Y–‡ü5(“JÐoÇî*c]K^`ªJ´à}×–fOeëÇÌvhm§Úƒi«ÊC]¼ž³ýHñ=Q Ež )O±¯‡^Ì\<»â¡Ú)8õàgÇÊÃä’ŒCÌ"¢\ºƒA°5Að(²æˆ€ùe…Ýv0 ÈÖæ¤ÂëgCÿDÓôV îŠ\ôÏA<4U“§é‘µ=Î>’”±$¼®­c)Et®0¶ô¶0Ú‚½7uK›%ÿ`–‡®#n´60z +P9e4õvF3> {pÉ©"9¥Ra + ¢rJj;Ëñ˜µ-¦œµÿ ÈkŠd ™ )¿Y€'ÜüqmV¹šj³öŒ’t*Ï°ù1Ždü„“‰üöÕÅ7³„¡b§ø!géPõSIžùKg£«?ö"ó#NÏX?+®ï½¿¥BYó³:=œÁ¹•Ø]Û›IlÏ(pÇñçh–ôìD ¨Ð°ý×dK^5Χ +W»ÁmSL¯>OJÚÒʼn„àÝ’X~ª„@Þ€e÷2IGÚ +åã:rüÄÉ':9HùÍŒø[ÒÅüî¨Ù6PnÚ€\†”ÜÎÀÍÉD t&ØÅ0¨e|¦›ü?(¸ó5 ›Æ/Ìýé#²'ØGe°P¾ÇHH¾KacBŸñ‘ùc…+AŸ ³7[柷//Oi åŸA~nDG&ùIÜ#×K¯cw?§–ìIcRp«Ï¤ÅÖ&þ(Ùà3|<žD{}¬_­Öv䟅›‰> endobj 1363 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1364 0 obj <>stream +hÞìWÛnÛF}×Wìã²µ6Ü+ɾ©‰R¸°ÃaÒN‰¶YH¤@RqõIýËÎìr)R²'HQ-„´HÎîœ9sæ,'·“?½å䶙I¢0&*6D†¤Î'7“Óɋלp’ÞL¸ !üƒ #–Ä$’! Iד¢°PÁoéb2eaJ’ÞO®éÙü5Ñ,&/_¼üþ{rYˆbÆiÞ…lºõª²[ Jc± +l!LäÑVê°’žÀ¢1`LEÈÝ­&a†â¯Ï¿üã¯þ{ƒ÷bídÄ8V.ôµ“= yÇ¿w«³ÕŠ\·@×Ép cC®ò&‡æ”È·Oðc¾d¾3»ÞŠ„í-šâ›k¯2‚s¹˜È TÆRÒ&ØõÛý„6›|QÜìHVVíÈ@þR¢”D,ÔÚâg¡ýdv‘Î/.fço^ÍÏÜëÒ¿.öH†½žu+‘¦ÍÚ|—-ëVQî³)WLÀ:{Í9Œã~Ákú>0Ðmº@ZmóÆŠ'Yh†Û¤ã,˜ˆº§ôͯ§¯æ|´iÉŒ{È:lèÉÁçz„‹!Ža)ôì òñ ¨¶LÊÒÂUµá,G¥±a•{{tE™ + ¸’ã×ô¢j'è  îá“€ÆOá©= ò|SŽY¹G žú7ƒtÄcáÞ`]§fuNÛºŠ­v¤Ùn6vQ„Cƒ‘Ó² DH«­ë};û,ézåvµ G1Ú«d€Ý3ˈñt·Å(öj‚etX÷uÉÙ«'ÁõjE±‹â mU­²Éê&·˜·eø@“¯™ß‚7'‰U{â¢a,ƒÂ˘A/®ò›ûólQ” KÕeQÎÀ‡”evœ—º +¼i‹¢ÑlõrÛÎê<Sl/U¸š¶ee·£K79­G‰Ñ¡4ÅtŠi>DCiÔåì*=½|—ήæ³”P}=Þxžš#µJïòC]Sök4—{qèÛ¼X‡Xû=‘¢!Õ¦-ª2[Ùê.œ91•ÉÃ{#Û&_’µ£|P•‹œ%É”…³XêC-¢—§ãüáeëCœ»ÙRb®f0…³Û,èVÕ·Å0°?ô‚?ØlV–vh¦•†k…¨Xå½±Ù3mpŠ{„=U¹Ú þÀz@"dYùœc¦£Ci÷ó†wÑÁ!Úq‡lF’‚ :„ðÉI€G÷¬ë×#˜•>‡•‡Š{+µÙSM{¸à˜b³·¹ÃvB8\AÊÐÍøææ4µ~i4¢m½#½·Y³zñîl|~@?v> endobj 1366 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1367 0 obj <>stream +hÞìXËnÛFÝë+î’l¢ñ<83äR•B…í6Ó.’.‰¶YP¤ARuýIýËÞy"e9IA‹Â€I‹œû<÷Ü#3¸ütÍà¶)šÆÅ +…&ŸÝÌ~Lg'¯0HofŒÅ¼°X“$-(¡Ò팢B#ü,]Ïæ„R* }˜½ Ζ¯A’^¼zñ.›Å$êÛ&Ûn‹êVU—77Ù:KFW¹’D˜3”„ôÔYŒÛloû×&œ3N¢ @;pUﺢÊ[kl™Î'ZaNŠH„‹$I€D±±e³³ Û‡˜3áÑä!–ļ ìCLy(HbË>Œâ>{ç}ˆ\ú³¶ƒp®ˆÞÞo2sǃ.߸(Ì5 ªÈÀ¿vî_jÖwþ%î®”ILU(nþ`‰ûPãG:Ò ž¿Ä[´ÕÔîÉf·îà—PÇ„¹7Ùzuåagl©¨©5çJ÷ÅŽ¢ÃFþ,A§1–:™sÊÜ­„Pô×Ï¿|÷Wÿ½Æ‡?Mï„&ÌtŽö½ +™Gá· uQ–pUÜ"\µwÈŒ-\åmŽ³) Þþ¹Àó éÓÏ–æv¶RÊGØ_TZ˜Ææf’¤.¿ÒŠnwÛ¼ê<(gÍ‘J,‰*Í™à¬ÜåaúûžmÁyµõ£ìûÒ!ÎcÁ1úëû|]Üy Ý]÷&aºEVÂ6ïðwÖäÙKë³erßçwèGwÅúŠÖuUåkäØ Þ”ÐÕ`b›³ùô(š›ÄEg"Y¼û¢‚¬ÚØÈŠª-6yÈ$öæ%Ô 'Ú¨Ð"g£¨toŒ;cî%»±¶¶Ùº©é"ƒ2 …yö²/yˆ¿š0Òx!Ӛϑ¡¤ž>J¢¡]A™=æÍE¶ö©(×lO¥ñÐ Å#¼¹ïŠº²õvÇH³Ú¡=®X8~´j_:—“t9I““t9IÌÉôV7àÖ;ØÔPÕ½§GçÇôI±ƒ>±Ä;¾O¶|F×›Bœ/d†™K//ŽI¿‡tãñ(«vucmÑ+“š&±xB:&ÿýªWÇ…ÏKƒi˜cò¨¢ðqc£¡v|¹çlÜRî(nG„ËYª'r3Çá±-œ¨ÿ¬ÐÐÿëŒ/Ô#)-†!æÏ«O‰ Nc¤³é?GnœÚ9DL}D?°ØЗ³h[ÜWývu:ÂýÇ£íÇh(0ÓD§ëÑUïtuµ|•®Þ\LƒHžp€q§Ÿ,s/ &î4¡Ýòý1ïO3þ¬x°.5Ièè cC]<ö‰1’uUöãƒS!Åxè¿y­d¥ÆSÙÝð %ª(ñ• +‚!ŧÄ€Àç´Â—­ñù¿R€¦Íeð£kœúnZ¦³¿¿sÇØ +endstream endobj 1368 0 obj <> endobj 1369 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1370 0 obj <>stream +hÞÔXÛrÛ6}×Wàl" û–ÆNªL}‹v§÷¦ ‰™ôˆT\ÿFÿ¢ÙÅ"ÇN:í´Ϙ ìõìÙ¥ZM^½›3´j'R ES§ Š¶z²œüO^½eˆ¡|9aQøƒ KÉR¤%”£üvBA +¡1<ËËÉ”PJÊï'ðOÇoQBRôæÕ›/Ðù6b)Iq³Ú··U½B³ºÓÛeQêè×ü=¨NUB„@SF˜LP~ä$ƽl¶—ýó6š2Nb\tÑ캪֭vœO’8$I$"\dY†HœIÖ7ɉ’á=8Mx±LbHÊB/ª­.»ª©£üãžx€K Þ©Ûj™ÆG2vŠæwº¬–•nQ·Ö讪Q÷p§#&¡ÊˆW÷j{µi:°÷*’PzJ"¶ÙéïÇô'…sÖ +jEÎÈĽ&\ù·xvz~™<à4,ð˃ãI2~v™ +X~µ@å¤g /å³yþ:?ÉNI–%cá6*Ï™9;={ÊU&B®báÅ5Û±Ä) 8Þ¤Eõrî·ÇÇGù—n@ 0]΂Ю‡ P­”‡}Kú€7zyR”ÛˆS"ps^ÕïÂzW/æºn«®úTuhœæ“ÄÂ;€Íº’U/¶Í¥®Íµ¨r’-•æ¹õîâìòôh~|:Ÿå³«YþËì”°l˜Å÷Tež8ڮ贩)‚rüX/”¶üô¦JjCU‹š;SÅÆ) +Èš•¥ÖJ\Ô T5ºÑh×êjêÍü+5‚ò,Æ`1al€*gîùìtl Æ“{l›î›QëxƒŒ°2e ÉšÂö#‹Ú«˜?Ô]ñ›3&Ϲ;”¹Â,afœx‰ØË‹!¼"‰Ë­ÃÖUð€u}/ Ðdz95“Éœ.›Fö­‹íwhL@Øœg¡†Ç©ð™p}jF|ëg³Þêæ%°uPš×Ѹn†¸ŽA¾Çµ‹G`kØ=M×6 +`˜¦ ӆğÁw0 £¡F¤]¶–p€ö®\¯`¡b(JyQŽ÷1‚(Öv@WצºÊ¢ˆdÃCIŠo»zºi"ÀE‚ʌ^Ïf•c@÷S—pz¯q»+רhÇ(Ž!WÉg(f¿ßÐ~Œ÷Ö…˜€ÓWQÊa&dØ°ŠÂÕ¦Y]G/QÕ¡vÝì6PM‹ +PÄ?jýÃÖ!Ó +[Hªµ½7FL¡%*•ñŽ¸_Wàš3Xö„.úÖð-™?,QÈnŸ1ò§ Á‰ E7+†ÄžXb?ÙµÝǦªŸ rAc#8p¹·L ‰üK4ž=’Õ“Ëyþþ쀠bòáÛ¯åꀵ‡Ø1%ÿW”Èüì@Ç«ÍùŒÄñÐ|=ÊÔ-ð%Éù!XBz·¾@é±%‹ÞPž<Åë*K¾™Ù¥m> endobj 1372 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1373 0 obj <>stream +hÞÔXÛrÛ6}×Wà‘L,„Hì››(‰;‰«±h·» YìH¤JRqüIýËîàM–/3NÛñŒH‰Äîb÷ì9 3r;yóaÁÈm=‘‚„^DüHá‘JMV““É›÷Œ0’¬&Œþà¢Æ …G=N’íÄ+Ôóá·$›L©çy‚$w“kçÓì= hDÞ¾yûú5™W.‹hä”·UºÝæÅ-9+U­ÒL¹¿%?+a\T2e”É€$ïŒE¿³ÍzÛ¿Tî”qê;9Ø!å¾É Ukc³d"9 %ìIÒ@ÊEÇ„úÚÒ»ÓÖaÏ”û£‡|A臰å.!±NCLࡵ»ÇÀ8oCä 1­âN% ËÝ2Å;î4jinHŽ×Ø)\8öµÏö¥*[Û—¸¹z,€­ +Éñ ‹Ípa¡Æ°~·`«*Í“å>kÈ•F”9Êš¬­¿²°Î 2:Uæšs¶ÉöýÃBþIX Þ"Hu<å3·q%•!íõå—ýÕÿ¯ñî+ÖN„”a弶v¢C!³(ügC=ÝlÈE~ p Ü.0ÖäBÕ +zS Þ¾¹\ÀjIÛÆ´½rÝ[(å!Û¤M8ú^—¡OÞneq`^·½eJ½„ÔMÚ¨­*’èJ¯µž$„]ëõ^ægç#ŒÃ9àLp ²&/ J’µ:0ÿÀôñ ðyÖ™÷Ä_kóýà0 $H³ Üa4醤Œdi¡×L§24ÿ‡ãÌâÊH¯üªÈ¾VKR›{øÈÔ‘Œ1òA6”O[ãä­7>ΛYd!ŠÊã…¨ ¼×©°÷²¸/šô» *I¸YÓXÁ@a°ZFÑ¡ÆD gW:Y5Àòc›ž"F‘´=” w° + К V¬ÓêU‹Ri|Bgr·À Lã\;Š³µâÛEé÷"€çÆm|ÔD×ýi›ÈlÿÚ9©T8·{„C}G‰7áhE +q KQ +Ø‚´­ +û‹ÊòU®°7 Õå +d€ïî>w•ªk(ÙUåN.à>ì/ÛF“Í=Á ÈSï³5Ik²+]†¶î\†¬¦P§+FÊÊlgÊ|ù‡@m{. +¥±‹V`Ê;Í—`D:¿q)9[¤Ìy= ÐúLndëÑmr¶i“­ÇñuFdŸíöåGÁ‘–Ž¤M´MÜuSmÖw€ÝMŽÃId|8°µ:$¤ØúÄ‚‘+ªálâãl¢Ç8îÀ„ÍälÊÛrõñݧLöÏ;+¼xŒ}Dàûª8Í2ØÝ{‚1š@Ä_÷Åãü±˜-Í€MÌ]„ÅqÒÍny¢ù +­kS0 =Îq×N]®@?ÕÅ®ZBS @köEŠÆ„ÔÓ”änCÞàš¼&24 IE¾žU›5lr—°ÕA…˜Ji™ç5]¬ÓzBKEÈ;!m[€K9R=¦ÓÐ(~¨l‹§óÙõ∲ñ¶Ëzí±â6rѱ§ÜpÇÁ1WÑWˆ¦±†™Jr<u2¶@¡1B÷˜~¢žòæ“`Ò+7Ë<£`°èùzF½8`Hø˜Ñ‘~åœ528êtãüçŒ#mnTÚª—ߪ×Qñ +žT/€€G@0 ¢¡lA¯’»¼Y“(u0ò{›™IS2x¥þØç•2ûUe) Š”+Ëzñr¨e¨,©uK3éÐ6Û¾ >y…§ù(•+q†|#=ïÕc*€zÊa ;ãIŒòÐ>uN¼L>ÏΓƒ±²¢©å`çäÀBŒì_œ8èZÐßÂîVèã«£ed<Ò? œ÷³Ù»äãÅås¼É@˜ßòf8œØ eJC™ûÝÎ +D,˜e/xÑ…ÚHçÞ H UÔy“ËAšž`WòÓYÁF/%ØpÈ bÐâ—óù§/‹Ùùâ,9»:K¾ŒAìõç•ñtÆ/a]iÈâïú§‰×蹨ÿi„MÇ´‡‹àˆÆ^~Êê’‚U‰ÎX¸» 0Côvã +endstream endobj 1374 0 obj <> endobj 1375 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1376 0 obj <>stream +hÞÔWÝr›F¾×SìåÒDëýaw¡w®ãxÒº¶GÂÉEÜ "#‰Ž@Qý}‹¾eÏþ Ry&NG ØóÿïZŒÎ®¦ -ê‘HÓ…‘B‚¢*ÍG?%£³÷ 1”ÌGŒ# +?¸°H“8BZPB9JÖ# +Z áY2 ¥T d;úŒ¯/ß#I"tqvñæ º«‘—‹*]¯ób>MVÍÓYü–ü ¦„3%‰hÌS%ïœÆp§›íuª‚1ã$Ä9èA“rÓäEV[e—ÉH†1D¤ˆTˆpÇ1"ad4ÙØ'Zµï!hÂÃÞ{ȉI‰°/!æ]Fb›‡ÁË0jÃ7žqÞúÈ¥÷1­ŒÑøþé15w7Ù£»A¹¹Æ¸ˆÄþدþP5[úCÜ])“«PÜüáÔ?„G:Ô1ÈßÁ-èªJ÷æq3kÐÇ@G„áÌ«¬½½²ðÆ 46WÔ$›s¥Ûl‡á°’!ÇÁ8‚\ÇcN™»•(PDa„Úëé—ÿüèÿWùЄ™ÊѶvb‡BæQøïºz¾Z¡I¾¸jî€k4Éê šS¼} ¸€‡Ù#i;Ó÷–涷pÊ t•Vª±¸Ô&JjÄÓç¢Iÿ@Aòûè,I¸“I¬\£š£C*"B£Ã4¨0âŸñ*›o¡åžUå]^L7OO«çiVÔy“…Çyóü€}¢ gL£PÓöï@zVÐß38·L«'1å€lp»º*©rŸLââÆô9^{âÛy¯VˆüظŽ§Å(]wòñŸÇ +"ðb³ÎŠ¦øÎ[¥ó)ŒmÀ%p\±vÄΑPîAeHw6ê°/0ˆ–BãéS6ËçyV£f™6(ŸÃ5¯¨D¹#b*ºª´WÅB[=Y,²°"jJ”¢&7Žh¢XW(ôBÜ eã%@®Í £ÐØŒ°µ½É!œì®7³%Jk‡˜÷²˜JÙɼÃûó ë%¦ÍÞ­6íÇ âÀ´ ›‘¤q¾*Á[”7¨^–›Õ#øêÒA‰àÀd›XÛ¬ØÆcÑ,3TCUP‘Ùÿ.>`m-‡£QìÝÝ.sÍ9¬Z‡£6ý¯+9oSÎ] ¬»R‘>(…Ù,.í@SÒ˜hßl.Fêrå:nVœÂ1M—0ÀNÍ ñSVM6«ÁBÐC}1cÄŸµåUJ9 v)ˆÜRP ¼*_fA¢núÕ>wÉùÝådr}ÙË +ì"ñ9íÍ¡ºI›ÌtA ­oNÚÃñ«í1oO3>´g*R>ú­IØÉhG±]^b'X¤+”Ä´@_2´©¡ãÊbõì<sØ"¶®¶W¹¶.—Å,3`O‡­#ºÎ÷õÆwnzá1¢ã—@V»vîã –® žuùÿô ÐI¬)ì0iјz>àïIûÕÆðý*»1—ô€÷%áLŧò¾Q§ZŽúÖú2ËÅà84¤IX¼ã‹=þ¬Ïü*‚/Ùã~ੲxÌæ°q¦›UƒLšñ¿•€AèÀbÖ'hüHw™Öb¦¥R€%Ú.³5¦ŽKáKa›WÆŽãEXV3 XíUm-±}“›8lJ™ÈÖûÑg&a™é¾~‰‡8|^ IˆžJB±8œ5÷ÓËA¯D‡u`‚Æ;,>ÝÀ~™»Xþ#Óì8ÄÍ2N;FV-W ™¦Ã=o,ñaBÉÃû‹Ý8 )|׌C>J$ô‰œÆL›õqšPó}¹cSÒR A©£S)¾|^O~“ry…bök'TqKè~êìIbY Èo¡‡ýÄâêØhµJÌ’ç×H _ÈÐO'Û]ôÂ(ê¬_·f©€’Õ&û±ßÈPÕÅî4Â[‚ÂÓW7ç×½Q»¾´ó ¿ˆËÞ&‰ÏAÃíÕqv1=EÉÝí§ËI_Ç+5\MnïoÞ Ü¢ËÖ()«¾˜Ù|§N\\ß^übNÀ—Üß ô%1 +endstream endobj 1377 0 obj <> endobj 1378 0 obj <>/Border[0 0 0]/Rect[355.5 257.22 475.98 270.72]/Subtype/Link/Type/Annot>> endobj 1379 0 obj <> endobj 1380 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1381 0 obj <>stream +hÞÔXmoÛÈþ®_±ð'²­÷…\’ú!±k®NN°ém\h‰¶Õ“(—¤ªEEû'ú/ûÌî’%ŸqÅ¥(š !µäÎÌ>3óÌ %{˜œ~{-ÙC31š%"eQj˜¬.'÷“·ùäôd’å÷©˜À_\dšð,e‰\(–¯'R¸ˆ°–Ï'S.„Ð,ßM>—ïXÌSvvzöÍ7lV‡2åi°y¨‹õzY=°÷U[Ö÷ż ÿ”UÚ©Š¹Öl*¹41ËÏĨ—-Ù¿¯Ã©T< +–î6ÛvY•v‘OŒâ‰Á™ ãJgYÆx”’,{:{`ûgæ*=$ô‚¶qäÌÂ1<ŒÒîôd˜R‰*ö&MË©áIpó´(èNm¹p7lI×,¨Bþµþ¥zþè_Rî*dŒ£j£è‡nQb)‰’ ûg¸…¬zãž,¶ó–ý.LR.ƒÒ‹l¼¾Må•Á3*AX+e’ì(:t俘̲pšêlª„t·1 7cÝõç_þç¯þÿ +ï’ïtÂ%yNt¾Ó}J…ÿ]S߬Vìjù€pM(¸C‰`lØUÙ”ÈMMñö×Pi,– Þ%¦Ï­DÙÜ2 ”c¶ÑD1–pì^7IÄ“n„ŒóíC15¦•ä:ذٲbŸ »¸§ +‹O+O=Û ÄFJ¢„׬]øRAº|ä%»5Q2-«Õ&”1~ïˆÐʤŸÃ)k(c›jõ…5Ý[ÖBÒ¶)ðÂ=k6Ö$¥¸LãÁ—Duóžþv“` íÛjÞ.7UÌVEæž$<Íö6ÅÞf‡ +pg톚ÚâÁóÇeÃhÛ”ø;‰-ÑÚÔç=·ÚcÄö±?6=pi¤°Ô’Ñt'v^¬VwÀ^ýÈjÇÃtà8pN?ÍsåÐÎxfƒÒ !k[FÈfMÆ gŲjÙºMgoÙm°*ïwgN×9Ö¿<•?”¬Åå•K.àE"3AÔ|nƒßþ ¿ƒˆå bó¼h ZÝúûÛýÍÊÈåwA»ßU—ÍëŽ(áy»!Û>✔âX)6Ñö_“ÆÝu[Ô­Åj¶Äjuœüñä6|=Öxö› <<ûíW×·½1êåUç˺$(* øû›|v“5éë6ÀòÉõûo?¾¹üjr¯‹'¬BøÉ›·7ù‡‹_ÏæÙfGˆÔ·àò— +=ôÝlS··ÁÇ›ËË_*ù¢Zt;ˆÿØ8ˆÀ!4;]ÀÛºbâõß=åuìê©ÕòªFÚº>®«ø¾~ô¤jû¶Äóé,ŒÈ¿Á–g[ËvìVU)© ‰^I2Èî¤Æ’T©j’ŒÂf%gwŒÒ°5|ô +:•ñP3"OŸ¢ç‘`öýUNõ¦¨=ºÔž.‰ëm¹lJ›J¯Øîq9á:Ö#kÐPè4­^)¨R Ú,fö`Á,Cæà/:áx—Qípvtö‚3’ÁÞM eGÐiÆîøžìöfQ×å_¶ …J•B»Ê fe³à¥ÐôŽõ¿ÿ8R/y: e㡇‡ÕÄ_±;ªc´KŠgPu…“ŠÐzSƒ«±cSÍQO*òß”œcçý”E}y$%ÙÈ4îË›á:Š÷æqÙïB-=:Í—ª->è1„ž²MCP¸óÞ!mÑ£ÉãI´BéÏG²o+ÄØðW¸)Ù µ1Ø‹Þ]ïáAÕѾí3¼Ô–ë²:±=º*£Þ2gP%Ú”qcQ꺫!'£$¦®Jéq\?×;  G¦¬Œû Ü‘tçˆxp 9uà'<’ûàÓ|h_üœ¿Ë¢zØR÷sUò„úCƒê²:¥ÆìF` oê×A{¹uögÎþ?„2‚ ÁfËÖ!Zå`â?Le¨ûÖ—c?b®ûý—NvX +l»Q¶¿{èOs3¥Ì(ä‘€j?jªÂ± +ÐíHEw^×~²LIÎÊ,YI´Pî¸M =ìTG\¸fè4í“£im·GCek /ñï9Äâ=2•úEÚímï21éÈkHÝüHEÌ“ì«ûĤf@Œj‹Cña(>ÀjÔÕ‚·Šû¶cü©J©U™P{kKS{px9ðÀÇÆ Gç2Bk¯j ¶A.h;”ÔåºXV4‚ʉëj+±`YÍWÛ ¸+Û](i²+˪ƒ"â”ÐãRÔÏ+]þ!`h]ùF2"œ8šé=¥éYYÐWŠ>g¸*³“ˆt“HÓÍ$µ+ÄIò\íéÆìY”ÍÜ},Bïp‡3¡Œ@ì ^Ù²n©÷Ý„ªé; h4&ÞÖ4©ü$•j¨@‰±>bQ‘·9‘ŒËu¶É‰]“vÅ ºî§S²¡L6Hc6|Ð ¦KÕY±W@ÿé«CÿI‹¨á{AVÆ£ñ‰†O[©£2Ä'¢o%Œ£c;9`㾕>ÔècA¼¶Ñkˆ°G«J]–¢Î®¢Öò ƒ¨÷b”1܆À u Cöv>/›æ~»â“ 0dtïŠ +endstream endobj 1382 0 obj <> endobj 1383 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1384 0 obj <>stream +hÞÔW]s›V}ׯ¸—&º¹ß@ß\[IÝIlLâé8} –èHà×?©ÿ²»Ü‹(vÝN;ŽÀ‚»g÷ìîÙEÕäÍ»kAVõÄ*òˆèÈÅI•Mî&?$“7o$¹›I8üÁED!‹#*θ$ÉvÂÁ +ã~K“)ãœ+’¸.µîôÓ£FÙ.λF #éªáòÓ”nHZ9,¨ˆ´!õ}¶Èïò¬&-¶0Œw1M†PwÑÐ:ƒRªHY‘¢le2%ܱ[zõ«%Ö/Ék’’EYùצüÔf –$/Ž°¡#ÑãC¨gûNÅæ›N¨Î ×{$-–d‘¾«y‹ú ó èD–™ÈÄvÔ·°¦Ãwô† ƒR2l%~èå—5/¬íL=Ý»ýÆu=?ïÛêŸûüÌ¡¸"Zz‘nñ…¾Íþ©?ÜCÛ{N—åî˦“N»—NaÁÐ8Ä€—õŒ_º^X/b;Ò¿_øíâ›ËÅp·Ø¤ws¿°`ºvƒ­ßÍÜ/šøÅ&A½Þo8:€H…Óè…?õðØ +ò°ÎnÝ€o\±¾ÄÖ¤)Éý>À[c«¬Üf .´Ø=AŒ–~?€­ýpP©É +endstream endobj 1385 0 obj <> endobj 1386 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1387 0 obj <>stream +hÞÔXír›Fý¯§ØŸD›ý€]øéÆJêŽklåÃãt:DZYt$ðª£Gê[öÞ]@€dÇmÒét2cZÝï{Î!œÜŽ^¾¹âä¶)I4‹H)")Ìh9úi6zùšNfË„Á?¸ðHÓ8"Z2Ê™mF ¬PÀ³Ù|4¦Œ1If÷£ï|òš„4"¯^¾zþœL ŸG4òòÛ"ÙlÒì–œe•)–ÉÜø¿Î~WÒ¹ +©”dÌ)W!™:‹Ak›ïm,ü14ðR°C.óm•f¦´Æ&³‘T+ÈIÑP*dÇ„Ú²ÙÙ„í—3AïK( öKH¹-HlËø2ˆšì10!šEX‡˜”ñÇŠjïýÝ"Á;áUfánHŠ×ØË|zõ±·õ¡b¾ª we<„T¥øA0÷PÂ#è~?…[°Uäî›Åv^‘¾Ž(÷Lm²¬ýåYí :cKÅ°ÖB(Ý;†ü“ð8öÇ”: ÆÝmH|E•GHs}úå??úÿ5Þ~ÄÞIM9vŽ5½“íòz +ÿÝPOÖkr™Þ¸jnŸÃ0–äÒ”vSâ¼ýá Í‚6‹Yï–v·@ÊmÔmà Òª‡4!¦È0;ï>]T+öû<$…õ³å`u%`y]!`j£ywUšgÉš$Åívc²ŠT«¤"噧ËÔ”®²´ +Ã}aYSX®k{Õʳ\úB¨þÌ«² ð#Y˜2½Í"Vf‹ß¯ ±SçbÌáê8:ÂëÇ;[¶¡-^tZÐÞmKŒr‘‹´ý}*ñ7å]2GÈ]˜%`䂤™5µN| Þ½/˜Å +üP4áY»] .8eƒ+Í‹é*8ϋ”wy¶(I•×–¶¡ƒ(úF ƒn©->¥äÊVbWÛÝù€r¾?çXÏU.¶Å±=ŠBŸòÂ@©«' ÒÁ¾-íùfn¨sÓ¤DV´Skï`pÃXRs‹4¸XÞ¿Mæ\yù4ͦ>ì Т/¨ô`^^+ª ‚Ç´‡s8måÊûtÙÛ•P…è|Z ¨ËWøåËÙ²$ ©­„MÑã°[t—êùÉõä²ßœáJàMèjYVIeìFÕãÕk“¦] ârïezq9ë9 +ÄácŽÜØQ2IÁMÉô=iÑù9,Aãž«°™¸aN/†^Æ°ø:no'­ÓÉÕÙ›w—ïÏ'ÏNg?÷ÜF·{Øæ~ó# +qЫg'=œFæuÓmÖÆ×Ð[Ô! X¾˜.H Ç KðÃ99ÒÁà±¢Ö°‘d ·q2 êͧ\Ìó$ÃðødãVžäHÂ~PXÐ%MÈõb‚¾±¤Ð˜Õû°¯vY•|µÏfÂi¬œÆÔy °dP¯±nS¨ÛÚøÊsÛl÷8/ªódgŠÏžãfà +aµC¥xŠ äTx?[%ų&NµoªˆŒ 1i ¨ ½ò©òÞ%›Z,·ñ‚ŒÓ²Ûï…-) ‹UÐ  ß[äÛ/kÓ‡hì¬:ô_¢_`¼ƒ ¼ƒ)ÖEï³ß‡Å.:\7ÐÔ˜?· MsZöK­(5±¨TÃV¢7îpR X°3;W-½?Â{0’÷«tnƒÄÕÑ20gm…¼q·†WkîÖäS¡â°D;?FMNýƒ2àH÷˜R“‘kGÍÎåÓ(‡ãß0VHÉnðQ]^kWx Kqû­>Þ†¸úÃuy÷ͦÉzãæ…Þ=¨AÔxµrPÎph–9`±³ñÅT÷-­0&sÜ-fÅãJ[¤°m”ËcÁɸN-É\L;’[r(WÉq:¢jœ²èՎ눮Œdí´£#ê@D_CðV<éF˜¥@óVŒÃ_h§Àzj¯Æ +‚¬²hÓŽˆ  ª"ŒÌé Ñ×®èà{Ñ!AtKÔ¢#ѯÌ(:x W+:¸Ú+¦(tµ—€X{X~ÀÜ€TwAX6kÚÐÒÕ îý¨ +á‡är2 Ï>¹¨Æh¶µuBÏOD´ûq?nS_ô‰˜†²‹}Ó‹óë7ïzFVÛ¹q€±Æn•-¹÷,ÂBèÃÐ.'¯à×–ÑЪGÈ=‚®m}ì!pÏÒ— Imßµg×ÿ+à‰'p¸ŒFÑSTaGEyŽÑfU|”C»}{zTÑ!ê§13‡‘—ƒ˜§ðæ÷!~¶¿íQ"T™Åꀳíæ7ÇŠ^Vå!%÷›XSrD…Öü(#ßÔ”ü Bð¼Or)Û ”+â×u¿8€ L‹CŸŠrÁÂãs÷ý>ŸXc,ñ§¾3@7‡ÎB|ÃçßëìúûýCMe> ¦0°±?=iù‡ú¾þ¦o'ç&³Ñ_ ˜ò\ +endstream endobj 1388 0 obj <> endobj 1389 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1390 0 obj <>stream +hÞìXmÛ¸þî_ÁR/fDR"¥ÛÜÞ]Š\³ØøîºÈÅÖzÕÚÒV’oãŸÔÙgHJ–d'M‘EbËk‘Ãyyæ™ +¶]¼üþ`Ûv¡3QÊâT3±¦X<,~¿Z¼üN0ÁV !Y„?xsýKxÊ^½|õÍ7ì¦ EÊÓ Þ6ù~_V[öºêŠæ!_áŸWÀQÊ•p¥ØRp¡¶úÖIŒÙâ$û—&\ +Éã „v[º²*Z+ìzµHâ ižhƥʲŒñ8%IÖ6-¹Ñý{Íe3}nisKƒS>C7X¨QÅ¥&+#gàˆEŽÛþ¨ºÖ“‰v‚n >±LB$e¡T‡ýMÞ=¶áê/'Þ• Ý#·ÒÍz8ŒÎy÷T¬Ë‡²hY÷X°* ¨àÒçþÈœq$§pœ¤À+¥~`Ot4ëj¶nŠ¼+B‘ÀMÜë;e–Rr +áIûh0laõö&r%“^íÄš÷Q¸‰7Œ+÷ÞŠ˜ïÖ³ÍG1õJ¿Ùš#çÌ.I“È À¯¬1,·æ±E÷LJƒ¢¨¬Ã¬}2â©û'¦N`ë½¼aOuIá1„óŽM® ÈÊ·Òˆý!áT+¦÷óCWïó®\ç»Ý‘¡¢ˆ} ñÑÕÆEsWT[Ò:”ôòh¥#,‰©j¡Cr… Âc¾{`'í_Èi€it1ø2³[šeÏåG cË&:™×;ÝŸåÝü¡ÆhëBày¥êëÈ5àE{r²2GF­»¼Úî,ºbç?¼¸®ØSDøñ·p‰ßÊúÐ2>è$Ód„»_^»úaÀ›ÛmdŠ9ó1™p˜P¦²²…š;”MÏ õl˜ØSÙ}h°C™–X€ùúÀpq\ë±ö$B{G– …Ì{qâ  ¨N[@QøååhØ8Æ>„BÐ59`·+vÂÂGV7ìÈò¥÷+-—’ÈK»âd¹)¶¡@vM$¢Èµ,oÀ3uÇÜšâ˜Ï`]¤Ôæ>äSž#ç3!»ä9ðÝŸ&”0|Ž¦Œ€Ýw³ÝI–|ùþö =Þô|ų/Ùgò$ánÆKñyÚôˆñÁ~ûÔ•u•ïàH_ 4c¼ ˆŽ9Ö9žˆjÐ9mN9­{(Þ\­~`¯W×·W«ëiûŠŠ¬NUDõ©ž0üs6¡¤ÆzÌfC¨f!œ6ÈR;vÊA¯JôxSªg‚‡è~‚óÇÞªj!>l¬¼‡Sy¹úrÊÖõî°¯Z«iS»*øÜRzzrGGÏéD bŒÓâ#¢¸Ïÿ +„=/>ØáÉj˜7MhðN¬g@î-±Œ¨‚Y ÐH¨ø‚“ÆV3_2ÏùßÁv +."JkÙ»ƒeÒô•0_cLzÁÊŠmJÀ¦ZìP•®&šàEÏvñY…õŽ(õ¨Ÿû¼be¦ï}o¥^(¬Îï¼E³œN’ +DñQou0<w–۪ᑎmqJÙ¾€¹8‰!NHÛ"Úo4Ʉ똺ĩ²ïƒ]ñðüc¾nBõMYÝ„Š&"˜/ºÒ™¡u¥ù&'i€DØɉ˜¦_¿ …dŽÛºš¦ü¤[U™¡‡…ƒ‡O;²¦4°Âÿ3¦!Éyѽyûæîû·œ¸uvñSJ8ä溄3:i¨”gñ…ƒ®fÅUk4W؈¾˜ +:Ü*bìšË +‹làÛÔøhݱ¨˜³–ÕÈso¯_­>­â UâŒkQê  +–ÒTìm朗wÒ¯­µU¸Þi–¥L¹2ãR3ÒèÍÕÝõí¥–hÒ1º¶aJývG󩦸L¦žô©v¬ºü£]¾ZI·>ã™v×ô…0ì+é±/­{ÑêÀlô:pè·È¯›îM~,iX¿#$ßnäÄtѵz:Ú>+ q”J»ëŠÞSýø5\jñŽG?€ Ê‚^´™ð K‚)—ƈñ‘#Ý7õáîø´œ4HJ¨¡¾&Z»g7u†–ÈÈó35º;70|ý™Ç¯?ó }|ªýÃaàª(ÏKÆT|íaw_˜sæô<ЖÐÙ€Z‹ž|MÔØ)z@ŠƒŽSô©“ïÙwÿôìûp’·Þ—µoDÂûÑÔðe×g·¿"›ŽÓë äQ<›júËPºÐ“*½pCa§ß–±'—ñ¬-7•Õ`>C¸#>1Cük— +Ÿ¿Sˆ¦ƒ^_@ó«–œµ j}Ns›k|×ûTÕ[ôÛ¢*¨ûK7á]°-ê}ÑÑÚb׎š'yÚxö3 Œ}ËrmGN/¯Øl 'i <„ËØ•;&ÊÆÉùXÐ÷z# +-*Üz>LZšgæüvJj7pR%®ž¢ÎK?ØF\‹ù¼ä +1Uwï1 ¡ÃøéšL´Éê¼M^º»²ÿO›X}iȤ½—é|@ Žr]Úã|è뫹9kð†ù«o°†és¬'Z»ì¼o²Ò¯W‹0vøP +endstream endobj 1391 0 obj <> endobj 1392 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1393 0 obj <>stream +hÞÔXÙ’ÓF}÷Wô£TàFÝ­^ô8CH ™)£¦ ÂÖ%¶ä’ä þ¤üen/ZZ60,)*5U#ÙRßýž{® ÚÌ={IЦ™ †d¤P¬bªóÙíì§töè)A¥·3BQp!JâD!É"Q”îfHÁQ ߥ«ÙGQÄPz7{\.ž"Žzüèñƒèº‰Â*¨6u¶Ûå=/Û¼¾ÍVyøGú ¨bVÇŒ¡9ÁDp”>±ã^6d¿ªÃ9¡8 +ƒ–Õ¡-ʼ1ÂéLP,ø$0S–$ ±ҲŒwÆaó|Æ4öBHô Ì<—û€$& ‚‡±ê¼×†QÚ™H¹31kZΖÁoûu¦ïhÐæk{ƒ +}M‚2Äš}¾*n¨}Ÿ#8ü «ºE«j{Ø•Í W#U| +„ÆP 2¡å ‡0ß5Zʾ*ʶÑYk¥(Ì$?cNI{~—ý’º9á:ì]Y]‡>g! |ÃD¿‚C ¶“°ð3aiö€ë~ÈNF– p©Ìã¹9ucÒ 8ƒ%µþKß}N™XûÇÑÔ§a®³xu±7Rýu‘ Ñè×B¿¥9÷@áüF8ZÕ?µò{,D*,”6Ìîê#{ öÀÄì±Û©Ù™Û™Ý¥ÝIP¿*Ö/Î/‚„’S«ß_Å=WA•œ®¯ž?™,iìL£S)N%=/FÓ_…>¦f´áøªÔ‰*T@£öè +…´²ÅHõ['Kc.áY åˆ ÌŪÜáßÊLìi`æ4ì¡ûx…½Z~jUî³·?|Í07ÁN¬Ï,ÒÙ¿ ›Óƒ +endstream endobj 1394 0 obj <> endobj 1395 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1396 0 obj <>stream +hÞÔXmsÛ6þ®_@"x!Aò£¯Qz¾ISÃ&ͤý@K”ÌV"5$Û?©ÿòv’"(ÇçL®ssã“"}yv÷Ù%Ù.^þøN’m»0šÄ"!abˆ¤)›Å?²ÅË×’H’mRp‘IÌÓ„ÄZp¡H¶_ÂEϲÕ"àBM²»Å'úfùšD¥¬µíò®°nc[0))gšÒ@4v‹‰½X"¨cúà:`„¹+\h™‚6ÀL#÷ÕL!'²@aÿ蘢|_æ~#ò°¤°—¨ähÛP‚M¨%ù 01š‚ëðxyáÁ!y2cMŸ`ádYÜ j±Û{% OÃs%o.>.¯ý@û˜O›ÕDË‹¹x(¾Á‡¡' :^-ß]þøöú—7Ë—¯f1«Òé6Õ»…}r¦°>s)ÐП£Éð\ô”œ'ÙC…Ð#“ºñMAÖÅÆ„5)«³hI,`/q¾ÎOÜÑ£t­KŪ+¡¿æÕš¬ò +µáîI|NØãMâl…d_“}ÝXQ©+˜ˆd Ëg¹¨˜kˆE`Kv÷µ\B¹<— ¡&¾…-Fz¿óM‚¶¸FÖ{ ðY&rªd´ð+´=|»¶OtUW.+ä6o¾#>¯B«Sêœç?ã„Eó·8ÄÑ}1cú&M£ÏÍ’ÇIª÷Ãâ¹ (l<§ªiuÜÿê;­¸Iø˜Óâ‹?_ÙÇoWöý³E<ù +/ůg 4mœêNp0Šþ»º?þGÝOuoÙ7vï{éÑ$¤öT»ï7ÑèŽ+ éó¦à¡œ5~׋ûnÿ`›û®^å–ÕºšvpZ³O?—9÷´áI NKÖd§4L'Ö¿Í¡&<ìŽ/6>ä¨`7©7( åFžXXŽ¶›žú{ûFƒ™4g ÝÆ”4>‡Ø™;Ô8ÔpóÒ>Ðc…œvGiôüý-$\áë‡T{Îþ0U' gm24Ñü\íôý|Àç;’7}&’έL\¥8ýµ“D™ ±zþÜCý;ZÛßèe¶¼¾È–ÞþKVn{òlfò³æ=ÕñQ׳¨û!”qZ°ÏÏS)¿èFÁ3ÁÑùp4=q{ÈV j5þío`„:ÀdNy¢¢y€ì„:”ªÞ÷Uk-mjœ*Rz×Â~×Ñ ­,<Ë +=?êÒ&†|ŸÿÉd +3tÁà9¬‰yÓ°~çL ¸<°—p†õEgí(O‡ 4M{=KûÇüsp©~–‰Îµ/z¦zÏpwYm_à8¸.!m`ø"Ǫ2†i0†f‚¦Cõ#³¬T=Î7Ewâ„EeM8>àQf2Œu“:IÅÞCáqðŒ"ï> endobj 1398 0 obj <>/Border[0 0 0]/Rect[423.6 129.24 533.28 142.74]/Subtype/Link/Type/Annot>> endobj 1399 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1400 0 obj <>stream +hÞÔWënÛ6þï§8è/)’’uA±­sY·¤ReV…bÓŽ6[$y©7ì)¶—Ø[îãEò¥MÛ†%AH‘‡ß¹ðò£ Yïèìµ YÝ‹ŠyBaQÀ©R½iïEÖ;:$(›ö„$Ž_4"‰YšPpÆ%e‹ +ã!Ʋq¯Ï8çe÷½7ÞùÉ) XBãáÓ§tYù"a‰·œUùbQ”3zY6ªšæcå¿Í¾ƒªÀª°  ¾`"PvlÃ[l°¬ü¾,ô +àÐÕrÕ¥ª ØIÖ‹$‹#ø±ADLiš e¼3›IøÌd¸3‰hÀLÂå. © CJ˜ “Ö{m˜”­‰ràLÌë†ü~Äbïún’ëžô5±*t›z¥Ïž»pBÕøÖ IÛr1€«A$õ‡äv0ÆPÆ)Ö_¢ ¬jig&«qC?øq„§díô-K§ ;cBÅu¬¥Œâ6Øa¸¿‘“HS¿Ÿ Ôi_ra»ò#yDmûåÍ.úÿï>õÞ1zçx»wA—…Âeá¿kêóùœ®ŠÒ5ÖÉí $cMWªV¨Í@çÛ¯¾ 0¨&¬-LW[±4µáHéN›,“ö HYÙJÓHGqÌ‚psÜphO¹u²(Zä~ä«å𼹚Þóùü&ÿ’a|}§Þ)jÐÚÀ1½:ñ¹.ãc(óãG®ˆâ~çM®GW®?òéwƒ‘¸UÐîVUª~¶;7Y®0w3Wtðþ.onž^o¦Q’8Ö8<‡eFŽ1æg?»ZÝ1*µòo´½÷¯›¼j.rDá²Àh9òžüôdäï)~{‚Éá÷ï®N^<´êí–~RÛå²jFÞ«ëóó-À}{TþqÞ`cô<_« +^]È'‡¸[¢/÷­“À6@¢¹…‚‘‡ø#ø#dYêyuñ›ZNÛ¹‘|€±þ +­oø[Àà6MPbÒ‡– =ʇ‹O.–ŸÓ-?¶ü³;t‰TyÁ!™œ?$S¦Çõ_‹¦“ W¬=§0ãK|ãXá[Áâí1öèÔ9)'m5Éùjás5¸¥väaøQØIL+ ‹½ñm^!»L(¿@n½'·gûÆ©Öv½k«ª$þìGÄZΗXΗèX¤´OÓ¯…å±>õAÛºÈK_px+œüh]³ª4Ë;«ŠÉ.ÁÛpIíâŠÀáŽ|d·Š€½šúmE‚ Γ ku´{1Âô‘ïHg¶F­,[¤{½2¶²¦œ4¯tÖÚ«ÈÄ@&½‹ç¯®OŸ³ë«—¯Îή^ëÀn|ãL¤N±»¥°†ê&oÔB• #í]âôQ"Üb¼ÕcŒZÓ=TÔ´¼kŠe™Ï5DÊÂp{aâÂK[iy9¡q^Ò"ÜyZ–ó5þ.:¡i1W¾àÊgtêÃ~é-}Í2mìú"e‘õ¨c•‰ƒ¯×e“¿ÔÔ—q·ÎïK‰·Á-š\[Kù öˆ® å“-6Dà±1kÉ’­ï]Ô©VŠþtIx+c.Ls™'a5u€¦Í?34ù«¥9!xžHÚ¤†#" ±È¼`Z¾³)„A¤Ò|Ç3ok_èÌÃØÈÊtï‘$·Q£^¹Ð€EQ—›a}äQutŒí=ÏËÙ*Ÿ)9TĉŒWDˆ"©T¹ÿZ¡~ ¶õÑn„9mú¹†=ýà-§½ ÛG†¶õˆãHÇWê’ÄÓ(›äTL©^Ǫ®§«yÇ#ÿ`bcuÆ +endstream endobj 1401 0 obj <> endobj 1402 0 obj <>/Border[0 0 0]/Rect[247.5 391.26 361.08 404.76]/Subtype/Link/Type/Annot>> endobj 1403 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1404 0 obj <>stream +hÞÔXÛrÛF}çWÌ#àcÌ —G­»´k¥‰v’Jò‘ 5 *h[ß‘ý‰ýËœž PJ6qU*µ¥*˜Kßût·Û.ž½ºlÛ/2Åò´`ºÈ˜JYW/6‹,Ï^ +&Ør³’¥øÃC9/ –«”§’-÷‹Txª±¶\-ž¦©bË‹¢×_¾d†ìù³ç_|Á¾îbQð":l»j¿oÚ-»l‡ºÛT«:þiùO°RŽ•áJ±Dp‘¶|á(ꑶ8Ñþ¶‹!¹ŽÐaׇãдuo‰}¹\]B£Œ›Œq©Ê²d\DÉê–IžgaJs©gû° ™DÙMèƒå§¬¯köËÝ-¸Ì§ê—Áþ=|"ÝæÁ/¢÷ÿ Q¢¦JÅó‚  ™)‘l*ã)5T&8uUj*Œ!C‚ÛCïINʼn¶Ý¥3‡öu+xZ—6±¨™~öþ|]µÛcµuA‘À-Àæ)¸'¶¾®­ëPÚ©ƒíêöa#OMÈÄ출AߟÑ4Ìõ×V êDäÂß>a-nä¥DNÙþ Á»ÝÁuhlqW+**ü†&Âí^žvÐÜ Úv=}*I#¥%í +wßñçPW†Mº:¹ö,ÃpQû¡àg&œo1€ +DTW{» ¡nIÂÊJ8<¯™„ªŸ›'‹ol?ó( -ç4Œt4ðŠÚÄ»Ž l'É yAãŒûLç»ô陑=BÒ‰ëH¤þ¹ '! E$T¦fz:æI O×îþ ×ø™³Äq$âäÖ"%ÆJ†”¢ŠXL:C}^#Âéb:„–®)¸Üߨ¥ÄLPËÚ!äÛ7óŒÂôGÚÀç.¡F³eÆĈ$å¬óÍç§ æ½jõ~†(Pzv#÷ÐjTHÔP¥%•2EUÈlQ×Wù,&Ý×¾ÖXX®64WèÅwU¬DtËiIµÜ°™|"ÌÆø"íe@qì_îñ9© +CMÔc5&€ÍòŠKУ«moc‘ÁζýÃ$âA­MgV›5dc5"¹ ‡› ë«UÝ÷›ãnÞ"?27HóTŽœg‹c<kŠr,÷?©€KÒüü‰áõ3¨óр͘|Œ>{6¹Œ¶zt:ãü·æwþCµÃ…cýÔZ>ÁòêÐ"²WX~WuOؼSÇø(åÃÁá–þ£ ƒ}ìwÕ½­ïÝÙ4Ïu>-5Om Cc£J×!é&j}Ž> endobj 1406 0 obj <>/Border[0 0 0]/Rect[294.42 431.28 388.56 444.78]/Subtype/Link/Type/Annot>> endobj 1407 0 obj <> endobj 1408 0 obj <> endobj 1409 0 obj <> endobj 1410 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1411 0 obj <>stream +hÞÔYÛrÛÈ}×WLí5ǘ0xtÖrÊ)EVÉ´·¶vó‘ „„UhYß‘üDþrOÏ ®”´N¶R©”ËH}=}ºìöìõŸ> +vÛœ¥Še‰eÚ¦L%ìPžmÎþ¸<{ýN0Á–›3!Y‚8›ñܲL%<‘l¹;K …'¿-Wg ž$‰bˇ³Ÿ£‹ówÌpË~xýÃ÷ß³«C,,·ÑþöPìvU}ËÞ×myØ«2þëòÏP¥¼*Õb ÁEjØò­—¨{Ùbýã!^ÉuTA»ÞÛª.'ì|y–Jž¥ð)å&e\ª<Ï×–d9ïœÃî"|æRO."$tƒrárÜ…!g¸¨mç=&eg¢4ÁÄ¢iY¼Hy}º_t&£¶\ûVÑ1ꘛ(Üö—pÓaun’þ˜WU*é‹Lü9~Êt–ãù+œBÖaﯬ«–}Ž3ËET‘Mз¯ƒ2dÆ…*¡XK™f]°µž'ò_LäÐfê|!áO ‹SžFŒuÇo?üÏoýÿޥܩŒ Ê\ÒåNõ(…ÿ]Sßl·ìºº\3w,Ɔ]—M‰ÚT„·/±Tø±\ó®0CmeÒÕV +Jympcš¥#¦q¸LÉËÄ;ø¼¢ÇÛ㮬Û&pIêÜt∄'†‹¾Ûc/ÿ60Žâ¨ÙÄß“$.„#ªA½X«Jæã}¹ª6UÙ°ö®d»âkµ‹-ü>ÂoíX±ÝîcAåöƒ˜$Š.¬}²e†TyN£“Ìë©c‘ ¦Ç»0Ú~Ãðä¶\4m±ŠEŽ ÷‡r;TE /|êó,‘NüÖ¹éÝìÛv¿»(‘¢q%ÌK:©>:×Iôá¾­öu±eÅÁGq(ZÖ„°83`^2öRôdÜôÁóV°m£äÑ#¹•#^Äb¬ªYÁ1úLTÔ·%ÂÉr §†æŒ€@²$É„âÆc›X©œ¨!óá®ZÝò&¥ IkZo·æÂŽ 7!=¡ï3`|LÈó-È@ÖBã°-Yq¿D(5©YÐUæ‘óÈB¦LÈTPú”?Ñ始‹I‚ÐéFæõ(ÍÝݬݳê¶ÞJøX5}†¸‘ +³96ô ³ÝߟÃp‘Ÿà6åÖf:À£ÇEœæ©‰ztÐ×$rñ1θ²C¡u}&³AP3©/ãð!PÜ”U¨ž(™N²ÌÊ:iÔ—IZ"Õ£ÈÃMy¸)‚›"œpåÜ&f6ytð5:ðé&–0•<© (H¢V€ç4`GvªN¢ Àš ‰P ¦™â(ó8RÏáHdc\»¿… ßd‡í: ä#±©Dvb·ƒ¤¿€¶ŽÅ­gq릥\àë,¼­ûz]nŠã¶e×Gx?±{ÒtÚ Ó‹¦ž@^xA(|Ì>ƒ¸ƒs,ãã^Ù?«²Ü?&Höàs!h°†hÖœÜòô´$BÐ?\¾=÷æÓÅòúÓÅùÄ ËÕä©´×ßÓ–.l XM•‚ “ߥÔA#r¡]è„Ët–áŽñˆ¨7†!Ãûžúë5[5»ñ9¢”ŽšgåzGtlï}½}ÄǪôÌNñÜTîiÌ óÒà}ãÝ¢Ü Ÿ½£²¥²ÃÇ5u[|…,ªÅþgT•ÈÎWJAæ²â)@-ÒyyíIz¥jvùv14Ý|eO”×KA×sfêÜ%ùkÊ’}wIÚY÷™ÙlzXKꉬ¿ëF*™k®1Oõ–á\`›I”n´JHYë–j»iâ»Í…Ò„@ø–Ö¡P‡Xt¹Ö¹Ã/mb¯v’=· äKŒ·¸éòst]ºäâ`Êút ¤v„[Ç- ÿ3R<ÂmÞ™Bõ8ŠQÎ ¤ŒPªœÀèèz^Wù¤®äâm¹yø؇v 'Š{3e'=«ë¾dæ3N53fCù¼Æózý¢>54äqIcÈijϺè:–݇ÙÇp“°ý3ÝìƒêÒË{ë|)ñÿ4ŽX*=M¬UÝðÝ”+*å§Ü`ŸÑHaD ß1­cEßi„yŠÙº.UÕ«íq j¼)[ì +´\”Äb¥+<À´ËR×þ…y©SðÏÇTG•†8eÅJÿík¼Àg±»–h¢äy ~D 둹,ܼ.›uCr²ºÁwåÁѲ‰^Ån´%ûGGDŠX–)•#5LSŸ~ž‡ˆ"p@¼sÛSÑlÊú¹DzâkØùWçM¯7óŠ©üÓç5ë ñk‘ú? ØÝã*ž¿(ÏðÔ>ëIÇèG÷ÄÀóKÄáÒ9ZÖFî©÷hbëuåº +Ö'Î7 s‚}§- ,ù?íó稽 +3/Nm†ò¡èBͽb~Û‘RË E??3sÚ¯®?\_/šæöy«G½1Pš¡VõôDî÷Ɉø¨˜³+vœ¹5Ÿß¿™VÿÄ~Íì|cVŸxm§cý4fٜ妓Ύ&lšsüi“¥…åùIÇsG˜wPÔj>ÄÏ[å˜fDôjZ̵’Ik~»„²t“´i¨ùkš«Ãþ>¼ÒQû8èÏ9ÚpûÂè",¦M9Rây»«Ùþò·Øk]þQ“W2BÏKV¿bûBã5É ëã·)’VѤ= ÌèuÌçªè„vw:©´+¿4Å% OŸDwÕ| '³˜NëAÚY$dîÉKÒ€gæìuBßô‚0€Ì£·‰©¡ÁöH@¦í¼&°ŸT—P§”’LŠ‰§O ]a=eÕ†5ÇÕªlšÍq;[LùêàΰUJø“Z"—ñLܽY +c ì¥w™í%`Lɨé(#7eøÓm즤ëþëB¸w2ÚNÖYáöâ‘â&÷š1xÛ<1waHƒÿÞ6ÈûpVÏI¬hÎÑ¥Ü;ÒI“òÊ>ºeÌ=²\JÿLNáþNB'ä$µ:í$•.Y4µ =<†){˜ØðsùKä_ssIèÏ ½Üy‹GWûãÖ +7݇?°éÐ ãµÌ»¶f<ì•ɼ¤C± Yé­6\Št2þ‡zúU€(ƒMx +endstream endobj 1412 0 obj <> endobj 1413 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1414 0 obj <>stream +hÞÔXÛnÛF}×W,ü´l¬5÷Â%ùèÄr’Âu[iQ$}`È•ÌB"]’jìOê_vf¹¤HIvm8AQðR¼Ìåì™3Cr²œœ¼½ædYO´$¡i"}R™Ébòz>99ç„“ùbÂñá…,ŽH(}æ 2_O|°Â|çæédÊ|ß—dþuò‰^ÌÎIÀ"òæäÍ«WäCåñˆE´\VÉzKò¾hLµHRãý>ÿ\ÉÖUÀ¤$SθÈü¬µ¨zÛ|kû×Ê›rÁÍÁ¹*7M^˜Ú›Í'Š!#ÍM˜q¦"´dsÓ‚…º»I3¡FׄDÚ‹sHlqˆ \TQ—>F&D£\ŒIÝoªYH?Þf  Ú˜¬= 9®1-<PwÛOî¦*½q7‰võy¹J-ð‡àî$œ +UÃóàlUe{%Û¤ ùÅ #Æ©q&kç¯,œ3Ø‹•` ¡Ãm¥vwòoÂãØ›F€u<>oâi¦)!Ýúôå?¿õÿk¼ÿ‰{'CÆqçünïdÏBîXø}C=]­ÈU¾º†HnkrejÅ)‘oyBÂI“±®2]m…ÂÖ–MyDnàFêÔX^jÌÒo<a‘@ÇåfmŠ¦vb¢[C@nzb•EÊR›V›•¹LÖÆ›ÿ±Õ(÷ITšt‚ú¡×·&͹©IscHO“raÑ +‡Äƒ`û4Dnƒ+Ê"3 O€fÒd³jjlÝxpfeHS¸„Ëãœa.ü‰Zk¡°Gˆ†2atk]8€be_gEvYgfî®6+OÑDŽwo“¶ò)«ûO΃ր¹hSõ{çôòç˳ÙùéÇ‹ùÕÇ‹ÙY‹®½ºp§.¤n’Æàæ‹”¦¥ÿ*ë¸v°gd¼±°[B9À™lã8¸·ãQ0p¶—ÌSlf™J&¶=ÇK¯ï‹&¹³wÏ碽=f±nÛ ˆ‚3©ÜŽ‹á'šC>+ãiº¿'æ3mË—!QP~}l&gðTZÐ5Rxì&©~ØIjLˆ¸Oº-ƒO2(:lþ%.˜º}¨7`‚ëx˜ýgo”þ–)Ë:ŽE­¤WŸ‡§€Å °™bBï’Ê>t•ÌÃŽ\ß&inï€>ÿû”öñŽJë–¶ÅGm‹¯IÒ™r<”,Ò{<|wzuvýáôÍûË·# +€\õ$TÑ.ó™#ËGæCæGÞOñÄð;1VážÃžØX_IC’ ¢÷Äb×Á6"ÈÎCáÃ%"« d¬›Õ¦³i<൦w©òÁb©iœ#oÕq«[r›åÅéo³«Q~‚Å£üx?((ûD{eþÜä•M¶­2äØluR2=ôl¶ dG»ÊX“*Á$ÊìQ].š£’Ê.xhDä¾3ÙM‡P +°èq‰yS> endobj 1416 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1417 0 obj <>stream +hÞÔXÁ’Û6½ë+p$7!LH½ãq*[ö$5–7‡$Z‚4LI¤—¤2žOÊ_îk¤HÍx’¬+»µ5UCŠ"ݯ_?tK°ýêÅ7ïÛ÷+£Xž,+ S)ëìj·úûzõâµ`‚­w+!YŠ?\D‘ó²`¹Jy*Ùú¸Ja…§ž­7«„§iªØú~õcôæú5Ó¼`W/®¾úŠ}ßÅ¢àEÔî»êx¬›=û¶l·«66þyýl¥üVš+ÅÁ…ÑlýÊ[Ì&Ûâlû‡.N„äYTûmOCÝØÞ»^¯Œä¹AL†køTeY2ždËEçv_"f.³Å—€„^PîK„<R:J†/³bŒž“rtQêàbÕ,N Ï£÷·ÝÉh°[Ãjº–Qs…×Þ†—ºÍ]xIúk*4BUFÒ)üC\Džå%Ö[ØêZÿÍö´Ø?ã¼à"²Ádök›°2ã J k)M>‚e—‰ü‰²Œ“P—‰L…¿Õ,6ÜDŒ×?~ùŸ¿úÿk|úH¹S9”¹tÌšX( ÿZW_ì¶Þƒ®9‘; cÏnmoQ›Šøök,Ú- 3ÔV.]mHÊ3jƒMnfJãxi(ÊÔøº¢@Çýéh›¡Zb¼![BNœF9jG‡êÁv7ÕÑÆë_κ)A½OP¦#”²èvz÷Ñnê]m{6ÜYv¨bH`=Ä¢ÄÅÆø×±],s9ÿ‰Þ>Tî •,€ª—Ø0Ÿån9]¿a{êÙ}½îXÕlYÿ±ÚlÂ` ì¡Â>œ y"ÃÎÖwuxÛ*ê`#nû>„̇Qœ>ÆNTOdßDа–U¬sòºgÖ¸·ºXÓ¾D?ñ.S §ÜE8Þù žM„š”5w˾û8ÔmSXÕù¤çj>vCv°\k=[¯CØcÏ9ìì¦=ÂÂÖnœ©q®žH’g ÉÚɉd°8¦f+…ô¶¨H.[¢¡¹PÁ-žÎPxšgýÏu½d¥Azrc˜xðâµS‘âÔöqäKÆy/n¾»yuýúåû7ëÛ÷o®®\•Á—tr# lhY (;¶·íÑŽáà·Œˆ–¤¼ „LyNx'AáÈþ,ĘËÌ-X–dgÿuª»KG*¸t=x~Œ dZ ѾĀ'¡)&8. .Sð\r*,Np&_”¹¼.Inæ1uöúÓ`›¤ý\l£s&8÷ ÅÏánë~¨šeb)àn±û»zsÇhËK-;Ÿð3öN:£2¿›•@õ~¢ú|5`³_ëŠRHe½ö:F÷U,¼ê0Eát‚ôƒ—´Ì¡°ˆIO”…ìc@cÙŠš6DÕ°¶cH‚—îªÃn¬ÚGÊG™~:9³<6¶Ò\C‹¥]º8H&²’'§CÝöΫSúˆT?jBa°£gdt¿jz/ý%èÍQ^¢¸`q‚ÙË´¡ç¾?Ÿ3ÍP}òî­×Ò/Âã× ÐS‚ø*ð^:)›(°~˜Qý§ÏÃHʉÄô“BJ?¼ÂÊMÛ`ŠØà•»ªûÛEÿD—åÔûTºÑ$A Fc¤‰\ÿåVM.£&òs7œŒ¾öùF§¥Éæ^Du ô1æ•´46nNÇ+Úó4Ž’Ó–;lf§ñOñRAæ.J8!)mÇYÆqUã*ûÏçU@é‹`1! õUË.s9ô„mNƒëyhR¡NëÇ–8+p¹åünŸ=6‚ì¹óaì¼D‘ÏÎM?O-ûx?Š…N +ó%McMLUf³hÛóPÒ|¶¬L™ŽlH†«Ã¡¥îýݼmçÍ~ÕЗÔî†ñérˆÍx®–à™Þmpäªôz½ú·,¸ ù +endstream endobj 1418 0 obj <> endobj 1419 0 obj <> endobj 1420 0 obj <> endobj 1421 0 obj <> endobj 1422 0 obj <> endobj 1423 0 obj <> endobj 1424 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1425 0 obj <>stream +hÞÔXÛnÛFú¨¯ØG²©6Ü;·onì.\7e÷¡î#Q2 ‰2D*n>©Ù™ÝåM—ØÚEñ¶œ™3;—3dd9zûã #Ëj¤1IJdª‰HÈ6-F?LGoß3ÂÈt1bœ$ð,5ԦĈ„&œL×£¤ÐD½él4¦I’2}ý]]¼'Š¦äÝÛwoÞÛ˜¥46Ëm¶^å’\–u¾]d³<þ}ú¨^•¢B1£L+2=÷e+›u²ÝÆcÆ©Œ +C&›]]”yå„]LGJZ@¤©Ò„ra­%T¦(ÉaÓœÝ<ДËÁsð ºD¸‡€¹õˆu~°Ê´–qÞØÈU°1«j55Ñíã<Ã3ÕùÜŸ6*cª¢°ìç°h;{‹¸?&LV¡9^pæoÂ3f¤±ðþ8YÛ2ßÍjr›”²("« oSe°5ÎW :›smoK¹¿“fmìFÃ>^–`âÓ”É/à ð|OÑìï­t{{ïÜj›¯ ¨ÍÛÊ{7~¼æäAPÞ ‡¦óÀÍç²Îþtn˜Nù)ß%0bê°%\t®¸ÞÄ::ÚùttŸ ØtpbJpþ;‡Wg›:ó =dÛo‹uG¦¸mšµj<ÿ §±(»Æ/Z‡ ¸5YÂT +†¶ÞÙ}çÙâbÿŠ +•\g +@Þ³¢Üˆ‹¹}„±#,ZHÑ/ÜAÇLýöy¹ÃVU íJR ¡¼]Òz˜Ÿ +p ¸¤ËàyÀWúýæ%ttó˜ÏŠE=9O b€@]M‘¤ÑÖÝthÈØËZÓ#“E‚b`øg`” +ÉÍ›8hsD—sÀÞ™úIæOç¹#)ʹßïYÆ;v×– ®B +áëóú)Ɖ+Ïý¬Pàs²:Z®+ä5ˆÑ0ŸŽÌYÌBMÁ2§†¬†!üèÀ¢–³Á­ oñèKÓÓ0¦Xsû‘gÒH¯„UG8«ìüÒ|e9MŒí.J·ü€[Chd|!.:£ +#nn2S¯øD¬v©›4_Å”ð‘’ÃikÊë‘ bzÒñÑAáè pthçÕ›R¨Å”kµ÷ѱd"p¿f–€ŽÛ~8óÿz àí ú¼ÎSSEßïé‘a"=È™±Pbà™DžiBe‚¿¤yÿZû~µŸÐœY%Ž*î3:º¾½ºxYbü8].Kñ}²g[ß#èp`ÒÖìÏJa´?©¨ù¶ÂÂlüÒ +ܶ`> 0ýJL& +endstream endobj 1426 0 obj <> endobj 1427 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1428 0 obj <>stream +hÞÔXmoÛ6þî_ÁT[³|‘H û”&鰡ˆÔé0¤Ã ÚtâÕ–K^ìí_îŽ/²,ÛMŠ¢–#‘Ç»ãsÏs’ 7£—ß¿ä¦iE ÏIšk¢8YÛÑ|ôj2zùZA&ó‘„Ã/\DnX‘£8ã’LV#VOáÞd:3ι"“ûÑ5}sþšd,'§/OŸ?'¿¬‘³œÖ7ërµZT7䇪µëy9µÉï“a+å·Ê˜Rd,˜Ð™œy‹ig[lmÿºNÆB²”.À¹¬7í¢²3v>iÉŒ†˜4Ë4aREAXš£- Ø=„˜™LwBJp‚r!ä.!…KCAàašÇèÑ1)£‹2 .–MK’±f†^ÝÍJIÚÚ™^ Z%,£aÚOaÒzz&Iå"ƒP•–øþ¦‚[&5¬ÿ†`k]û'³Í´%ï“3Am0Ù„ýê*l'ãRÅ1×Rj“¦Ãƒü‡ˆ¢HÆ9¤ºK.ü0#‰fš¯O¿üçSÿ¿Æ»ñì”aOŽÇ³S +E@á·uõd¹$—‹€«Ap'ÀØKÛX¨M…xû+‘ +nÚ‹…jËHW[(eŸmRŒ#7‚éÚ¤Ìlé&PÇ éÒÎï/êêÌÎËͲ½Ü,íUcß-J’LþÜòÊ–ÂÐ\jšXùd¡-ÖáÝKŽ´Ò’vʼð'Ë|ÂùÖƒ«·çï~8ÙÙN1½=®ÃR»ù¤iËÖ®lÕ’EE¢£a Ír•õÖö"½øùâìüõÉÕ›ÉåÕ›óýr¦ŠÞ*i12¹µ»Á™É/ÅÄPÌ^(³?V°€gŽÃ;Vá[~Ìݺú®]ÔU¹$e5#Ó²",Ù4¸^€²dý¨°£pçX"«zmI{ «êjjälìŸÒÓ²TÆïX ³èWœŽep cÅd¶›¿áÛ‡ª-?yÏ&é¬Ð^EpXÌÚÊI)fÇ{0hºë÷4T?ãfdoŽZt«¦u¢3…e·åúY„®Þ·,b™Çä5ý •–(>tĸó6…·©¤ï“ì”U&]½†²ò©¸¦' ýŠ)z³Á6·@€$J¾ó*-\üà8ÎôÏ\Iû°p‡dX¦Lh +ÈÛ;;]ÌP¶‰ÉTFK¼¦œÞ­mý +²Ñ4qQošåƒwCfTÏhOÞñ'Ù943þùº^è,Áæcm¾[âmXG‚彆±Ù _FR²<ßVQ²#úr½ä»ð`„·.z¾K_PŠ¹t}uIik¨ZKîí-ä&2tzfØÃíòÆ5t+Ø°ÝßźIÆ@ñüD@ HYpü¸$¤Ò0‡º Õ}FR[Ú#š*Ú.kB~„G÷2©‡¾ï‰B»ÏÖZµ,¢#úÐ_›=]ÆŠ¢_4BÁ`¿z`pGEhƒàÉâ°?§Ȃ8¤­_"«úó‚ R¦å× +‚`ëǓár·—öÛè£õ#ú(¼„hF%¥!¤Ll®7 ²>Z`aç'ê†I³ýò`@.Û’uŸƒ‘…£_Mù ÄÐzƒåWÕ-i\² UŽ¯Ã\¯‰C>„& Ÿ §åf  Ïóa×OÏ»î<—‡e ¦ò!Çùd×ôÕ,Rb—Þ‰äðvc)àòpŸ€>iÚ#Š’Èai¬]^Ä£K¥· ²4óåK½ 9ÿT®î–ƒO ;5#2ÕiR'JAþ‘²ç¨ýðbŸŒ3òN€' Hœ+„¤B?á÷AÝN¤¹3PpEøOKß 5¬qGÒ@BËå4ÊÇžNû…wvX+’ñ•ÇdúôÃÇ ¬È3Ëzë[CÖiJD¹éƒ\ð,掄ÏCì³RŽp^TÓåf¼…Ã3;ͺ岨æ 4ú +R,à/àpaè +“jh‰RzC0­žßc5N×"Vl {€“«¡ÂF +³d¿r Ià5JR_﹫wéK®,Ö;¨E6ì¶"¨ã³×Ho)„ g¬ˆõ7€mŸzî‚ÀÛ]ÑÿTöðoE.>pýi¬uŽã;wc§˜öˆÆÁ11µ#q> endobj 1430 0 obj <> endobj 1431 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1432 0 obj <>stream +hÞÔXënÛFþ¯§˜æ×°µÆs!‡$Šýá:J›Öu ™I[D‹#dµ2)Ô&Æ¢O±ûû–{Î\x±Ýl‹¶X,„ÔpæÜÏw¾± ÛÙé—ׂlÛ™V$å‰3M'™mf_³Ó‚RlfBÿà!²”åIg\’ânÆA +ã1¬ëÙœqÎ)ÞÏÞÒ‹Å ’°ŒœŸžö¹j"‘±ŒÖÛ¦¼»ÛU[ò²êL³)×&úkñ5¨RNU”"sÁ„NHñÜIŒ{Ùbý]Í…d1ݲ¬Ý®2­¶(fIœƒGš%š0©ò<',ÎP’õMK–êðœf2ž|‡˜`H”ý>÷Émrã,¸–Il”‰·±l;Í5KéëÃM‰o’væƽ>sZE,¡~Û·~S³¾õ›¤{r‘€¯JKü!…[Œa)ÓÎ_Á+Èjj÷åæ¸îÈ›(͘ Æ‹l½¾ºòÊ 56Vƒ-¥NC´ãøa&ÿMDžGó bÏ%î5!‘fšž¿þñ?ßúÿ+¼ÿ‰¹S)˜9r§ú*¾ +ÿ\SÏö{²Üm¡\S,îH@1¶diZÍ©°ÞþI‹æ†…Îô½•JÛ[0¥‡›¢r–k×iø’+¢5àB<à — +=åÁIBNOÁ&z~kÖ?‘݆t·†t÷}¦iqJÖuÓ˜u7*zŽ-üÜŸ‡3°sEí¡OþBöfóþ²®ž› ,—Ç}wþ­"ò+£øÔŸ´A¡äÐìªn³¢Ï +«¶%U ËÝHPË°å„n– òK‘zŸÞ7;@´-lf«Uõl}¶¼öºÓ›Šˆ~‹ýøsTüˆ®Hrcïj0 ‡œ×]ÙtÞ>X—ǽ7–¯/¢WûDÄοZ`Ä¿ùÛrq½¢ td⊆,°º7å½iPÑ÷ÏNˆ€yr‚¾H&Oˆ~$êRvuþHÿ½ÊÕM¯Sþdÿ»ð'3ÕaN µüóŸýœ #9s#9³³Æqn瑇í5€‘+%ti}Àn)`vw?¶Ã\G!<áEbé*­€fºjœ•‚Òøq UŠSg0) Že¯ ñ +†Ñ”-[zµ|uµX?`mövÄ,@Œ'A=0Wém]rgªŽì*Ð3ÕH¤è›—gb¬ÂFˆB Ø^KD2²"µ{@ æñµ"÷;‰>.ËšD/Î~X,'BÔo²FØ-ßž/_M¤H–'O›2W€Y2¢R}hiÝLu¹-|Ê·èå«Ëç‹g¯/ŠGȘÊÇþ…´AÜI »«+F°j&jôo¬k†O…•gq<¶? 3w°¬nȺ¬È;CŽ­¹!wuãL›ËœexßF1ÆÙŽßh.SXB+S„"®#Ÿ”>ÓÓ=h¦ÈNÚãzmÚvsÜ3w0 …®Zÿí ¹Ì8ÓËݬ÷ß³XpõÂပRGx… +"7ôcSB& +"ìd÷ÈÄú»‚½•e8ÚG@­°…áw4f°±  üU>:ªCãxûJR•wÐ+‡¡ˆ5ñû]w 8,ÖÞs ´Ôǹ̲g¶ ajuh<4m t@†ÆÒx²¢û#4«†)øßÁå$^s•@Ç:tJ§}4ti>C‚'>‚¢Sˆ´ÔOEÑãOÀÐ .ºù¿Ù@_Å”M Ëë ,›+&“a\ßW]ùÁzð ôŠN@A+_ÍÒÓH°/ G¾ž1ŸÝýŠº›ãP®ʺ°îÈܖͧ ×)óºÄ9ü– B@]âêÆêí„ôçü‰…ü³„‚Véï ·v»„é0Ã-é{¬»> Ú70ãàq|¬<Óé„d¬¢)0ŒÛV`wë¡mƒ–³&؈éöˆ%ÑN£bÇ™R¡ú-@».1vûôÈ–·ôú`Ö»ÍÚ6]r‡“дœÓþ~øLtLm +endstream endobj 1433 0 obj <> endobj 1434 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1435 0 obj <>stream +hÞä˜ÝnÛ6Çïý¼”Ö˜I‰’.»6:´]àh†tŠ-;ÚdÉä¥y¤½åþ‡¤dÙIÚnÃ0C‹–©Ãóù;Gl3{þÝ¥`›n¦‹ƒ„…‰f*`m1[ϾÍfÏ_ &X¶ž Éüá"’˜§ ‹UÀɲí,€„¸—-gsbÙÝìÚ{{þšET#€=—Þ=Ê%ÓÆ=·ÍùÑC>\16"ù€¹ŒJÚVeJU™U™~oÚN\JÚc&¼½ì[ÔuâaÚ¡ájöÊ``/ðiöª0u­ÆhîÊOMÁûvÓhš ŸE2qS8`">ÅÄ·&e5•>F§ß)mCiZÍ´èõa*Jw}‹áüHe4•t$󡛊Ø‘(IOJ÷>lÈS¢"þ_óU"•ÕÓp½4‘øjðúϹ2ŠPò<€, _Y)Z®cýUÌF_%grŒY”2½#Ò¬ˆÒÔÀ¡…®&èj[©Ÿ‡®€­í îjÆG³mJ¯•ÆTÌ¥1!çüc¾…áø²«ŠOð6 \o'³Ü„,ÄŽµ¯hPë-ÍpUÕØñíŽþƒPøŠ&½€=Æ»-cÝí° ·‘ñë¶Dëé‹Ó‰Ô¨ˆÑ\Ngçx𬴄)ë®\pë»|ÙBR^™±4áQ4ã¡ï…Ö†›|‰„7ñßXkÿEAxpºyggozC(£ž1†ÎG¤sœ7,ªàh Çz¿gos_ÑêžN“VÌm?¢=gtVⱫ2?£¶ØWF ü„ïæl‚Ûcæ‹¡»P)µß75:“/c¢þ¾Þ¦y™ºÇQòæùÞÁô3ÃeãF? Œ/ܻ០zM +endstream endobj 1436 0 obj <> endobj 1437 0 obj <>/Border[0 0 0]/Rect[457.14 405.24 549 418.74]/Subtype/Link/Type/Annot>> endobj 1438 0 obj <>/Border[0 0 0]/Rect[63 391.26 123.24 405.24]/Subtype/Link/Type/Annot>> endobj 1439 0 obj <> endobj 1440 0 obj <> endobj 1441 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1442 0 obj <>stream +hÞÔXmoã6þî_Aä“t]sER¢$ýÐ&N»í¶ m‹Å¦(›ÎúΖIn6(ú+Ú?ÑÙgHêÅvÒm÷îp¸±hŠœá<3óÌ0‚ÝNž~%Øm3ÑŠ¥QÆâL3±ÚL–“ÏŠÉósÁ+–!Y„_ôäïLäy8Í€u>•‘pÄ…šë€±îù×ÿó¥ÿ¿Âû¯ä;•rAž‹:ß©> +…ÂÿîQ?]¯ÙåêášRp‡ÁØ°KÓ$§¢xû)” +“fÁ»Ìô¹•J›[œÒÓMQHG9ϵË4`µNS®âo"©ÈÒȹªZ¶)CÌëíégì:X›åýi¹^ß”ó˜¸3?ÖâñÌÇ#è¥À(Ï,Pö'Ô~«W°ã¬lKšÝùñuÈ~îìá|ý~œƒöצùØ.)þ1±óœó°ø§Oµ=XJ;>!u÷Wm b¼¨·w€OíÃupR¼¾˜›¿ø¦xñí7Wæ`PÄÓ|´SÓNJ0mw³¦-[³1UËYñÖ0·×+ʉtX­ÿ¦îñ±ólÕ°íV®igÎãx¼>ó‡Âm,«›—»1 ùº`Ûjý€9í‚kí7Ó°AÖzD—«µ E&ãì<”4؆T<ÖS…" í›ëˆˆê¦¨æ¡jm!WÁ;Èv£eˆ†)…8lVœ äT° 1ç׶4^m­&8zlå@êÎLœ÷ÁZøÃFÂØ'àÉüÃáipߌÜòŒ5Æ°“QxgÞÃÇ êRÌâ(å™d‰âh®´ÍŠŽé÷²Håñ8‹F'åË ²ízÅS¤ud»¶§ Ô¼?ÞEwä¾oû¨Žª‹‘Ç›ÚçÀ½,«Û]ykPëàZ²ß„ø¨MuØÏ +èO=¬Ñ`še´)˜'æàµÇÚÝÄåÛàu(bD/Ø€mBô¼ < NA‡‰8w&ìÑh¬W m®º”µåy ºçxtc¿ ¯=N½Û)©ö¥ã¸r)ñ`išU‹ÇôdˆÌ1Ö®M©;¦k·gÔ>€ˆ­nƒ¿c §Ñ%’ÿ ùøˆp¾Vâý̇vGù”lÌp´Jƒš£"Ñ™N®EªÀµÂyöÆx2úŸ-ñÄ~ÿªš¯w °ÝiïÑ—Å1Õ@Yiê@J¯SŽãß@QÔ¹Á†ãC“3Æ·GIø½çÄl9%. ̸oïÂ)îåæn n—Ö}$ÞÊ$àÓCŠâ=6 +¦™»û +V7°í­©ÁÍÄ¡ÏB\ÞË@¿vŒ£èf”1ñI=㓼 ”å E òæ/WëÙ;gL¯°“B +…¼OkŒsA½«×8Š—ß<§õ HXL÷ê?‘…û±îdù>ß9$îRiÛ;_óèð.-<Ø–Ï‚;¢0)ò¡¿…‰ê#U:ÉÔíû !úQAÆä +ta;*i(=tŸÅÌao"Ô1F{9ÂõaD šâKÖìæsÓ4ËÝš»]Ÿ§ˆß-ÝíÉ(=nõººòœE¡Ó> endobj 1444 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1445 0 obj <>stream +hÞäXÛnã6}÷WðQêÖ /Eõ-»qŠY'p”‹l´¶ì¨p$×–›æ“ú—!)KT¼·mQBÙ"‡sgÎ ÍÉjtòý '«ÝHI’0M"­ˆdd[Œ–£×ÙèäœN²åˆ Âசj’HF™ ÙãˆÊ"ø.›Æ”1&Iö4º.'ç$¦š¼9yóê¹Þ†\SÔ«mþøXV+rQ5Åv™Ï‹ð§ìØJÚ­b*%sÊUL²3k1:Øæí·á˜ %Ø!³zß”U±3Æ&ÙH š(À¤h¬2MSB#¶ :ؼÌTDÞK 'Hó I )—‘nÑ£cB´.ŠØ¹˜ïŽM‚ÛÍ"Ç'4ÅÂ>Ç4¨BnÚ[7i;p“„ªT?n¿Là«$JRX `k[Û7‹ý¼!wa¢) +grçö«+·œŒ¡Š!×B¨¤%;Š†ù;áiŽ5PŽãö1&¡¢* ¤¿|øקþw>âÙÉ„r<9Öž\ó£N$2J;qäy¬1€ÃC¨7¸ë]nøØž÷¡— žJFÌHo«’nSè'%´!«=¦ÒÎhjLÞ·¢Ôt4(4HǪð2|‰ŸV»˜ÇU=bØn¢³åª²Ò ­DÇ[È#¨†¸¿r0†6Ccq;ø^E«?€8mü3YŠ:ö;O¸pž@_KÜ82v¦†‚¥ì¬‘e(4t>5t>Ðd“§ã•àT‰aÝé] Êùy9¶îõà®Råȕv<É8h`KÄ´…µÅà²þ)"Ü®¾Ýw¡‚Lj1¾œ”FO//^ÏNgïô0ÕŦ ¿<Ò8örçòôÝdæÙ½æôK,Ü]œúE”꯷0»½œ ˆ/¶Ò]8ƒéÕŠûéíeö¢ökûQ›c‘ƒýC²¾=}3»ò¬ šöR‚·©-MF€Ùzë[†²)^äØõÅÔS.숟FÙ«£G5LTèmS ©. r²¯Ê_öÅ!\#áúl[RAyŸËVZÚ»;©`gÌœï£!^\‡yÕ +Í Å!ø1<?úgÿiTÝ=Ý z©ÎFœÉî€ÕètDïQííõæFz#Ì»óÎâŒg8±Ó´0Ãý,îýØW´nQ`€~Du-ýRt§·——ƒ0‹>.¼¾îBWÝâ·©GnDÐHx7"Þ“!ìîgE¾ÆŸb¨Fõg®D<ÕÖVw)êúþ·"¸=ÂáõâP·q˜RÅzêÞ†!O-ÚÏ\Ž ¿ÔÿàÝˈ>v5²äYÚþgW£I6úC€õ7Äø +endstream endobj 1446 0 obj <> endobj 1447 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1448 0 obj <>stream +hÞìXÍrÛ6¾ë)p$›&${Sb¥£Ž#{dÚLÒ-Q23©RT\?Rß²»H´’8ítÚÎd|ÅŸýùv÷Û]3²ýtÍÈz?’‚D~L‚Xá“:­F¯ÒÑÙFIW#Ɖp°8¢IL"áSŸ“t;òA +õ¸—.Fõ}_ôaôÞ¹˜¼!!Éë³×/^«Úe1j]gÛmQ®É´lòz•-r÷×ôgP%´ª +A}‚¯BrüÁ™¾í(ˆøþ +.AV]é'Ëâ!·nSæäFäÞè«J£ B£°òlÎeÔ¢ÃHþAX’¸^ X'÷™¾ ‰+©tiÏçÿú«ÿ_áÝOŒˆ(ÃÈùmìD—…Ìdá?kêx³!ób éar» ’qOæù>‡â˜oŸ\.àf¾¤mešÚŠ¸ª- œòºe${T£ò2B/}tй~,›ìw7ý8:KS®?Oh"uâŠ%ŠÀúøõ{§(²É]é¬æy¶¹ª«Ýy¾úàhd©Ú±2|¬ósxQ•PÐ øà>« †µ¤V îsžè@P?ô¥ÖQÝA±9ÓGy3¾¹HŸHŒ¿ð+2=‚:HÑÑÀ·ã×óKK§-Kªì&]„;AjUÛ‚¡-ò'Åu5YäC1ä„.›ë0ÇfØü, á=yŠV`R u,‚ŒÊâ·CNL£ù‰SÖG’gÚ…” ë&Â!ÜÅi}XU.Æ|RÞHbìwk÷Ñh(‡/{Õ‘Œü ëjÒÝw¾¶œÆý$SÌRir–ÅjcXlŠÀ·¬´]“m-{Fê Æ5]ˬýЋaºÏn..Éôæ-õ(J³9µØwnS»¿ +\mU‹UW¸Š(ÝLŽ~Ü#èœ×Míât »ð`¹†%—äà¨IÒ^k­Þ-|µD·í;2ÆšTQ‹mb`±Å¬Û7zÓP€ãÈ—¨"±I·­"jl„šd1à¤(UÒYÐÆÝg SZóË«É<}d0MÓéåìÚÎ2Ö±)B­‚¹Y“+pI:Ôåñ„‚»ƒõ¾×® ªb©Q´ú”YÍS¶Î&Zw­ÿ @ Ä•Nqü>‚?$9ïTA¹$ ÈØ»œö0l+ü,c«Ì8ªr Ó¼\älö”!s>ïê³Ðí銯•¼žy2„õ}ë¦Ä¡‡‹3ñs»’ïÛÒ÷mé?¶-MÒÑŸ ¨ à +endstream endobj 1449 0 obj <> endobj 1450 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1451 0 obj <>stream +hÞÔXmoÛ6þî_qË'i’’(iÅ>¤‰»eKÓÂQ:óP¨¶ìhµåL–—CÐþåîø"Kv×µ(†ai1u¼{î¹‡Ç +X N¾»°Ø T1O Lêb0<É'OÈæ!ã?|ˆ$fiqÀ—­­0â\6 ç<€ì~ð³w9z +KàìäìÑ#xQû"a‰·^ÔùjUV ¸¨š¢žçÓÂÿ%û· +ÌV  +&TÙ¹±¶¶ÅÎöOµ?’…^‰v`¼Þ6eUl´±Q6P’Å +cR,RÀd¦)°0![::°~‰13ö^"$´ Ð/1äTþ =9&¥sQFÖÅ|Ó€?T,önîf9¤×33€’ž©Wù,òì²gvQ=½µ‹¤yra¨’ô‡f2Å©8ŒSüþÑV½6ofÛi/ý8aÂ+¬ÉÝo]ÙÍ03*NXK©bvî'òO)î– ÔéPra†øŠ)À=?ýñŸ/ýÿoÿ¤Ü1”9îr´,–…ÿ®«§Ë%ŒËÒ5&rûɸq±)°6âÛï¾ p²˜1W˜¶¶b©kK¡¤|Dmp¡ŠUGi4/EÉM€§¨+Òq±]U³±Z¢Œ!$·D9ÑBB¥©í-‹y3ΫEág¿âÚÈéNFJ®—ymM1eÞ1é·5†ÝµÒªWŠÐïÉ—ùâù]S®«| ym…æ6oèsÁ™R‘Û •X–«²»z}G€†‘l1 q”“t,uÀ1‹:, º,P÷o[àNkÈasWLËyYÌthCÔcgc»3é«!P`•¶öIFtœBáˆÁµ¶òj ò¡ŸNÇ{à°(öÝÔ#iãE/ËEµ® DI´CÊ!jëgw(R̊ΰKp°Ûzýæ×ìᮟ„-ÜÁÌwÕâ@"GAâ][ (C ¥µAk0÷%¢æ­‘ꨪp«]’‚)Ù‰,² p‰,§·ðà Òêõ£*`VÌËŠNA—\¬eL.nI¡F³5t±,á½d…iÔ©ƒ—¾R-)¶Å7{é XvÉ}yñd|:~µ‡W;êeÇЫE½¹<}5÷l1ú //N{ß l>ÛÂøær´‰üd+»ûz~u>zzzs™XL¿èleŒv«ßxøìôlü¼gM²TíŒ W¯>pÑìºî[,–µõâ⪧PØ )>¨xD²«|Õ/ìµOZ=J ¥vUö*ÛûR¤9†vDKáÔÇ*T¸3NLý‡OÊ~Yùuó ¼IåD¿¾Ã]øäÊË©þÑ œÆÄql¼9Pa-­4R¬&ª•¾–ëoãĊŦ¡4Æž¶Ôj€Å¬•YbCœFßLؤZ.òª5ÇY[éC»á¡›p[Õíò"Ø/†«›ËË=¦…¤Ó%B_oËM 3&ÜiPïd=¢Þ7 +ðÀ¢3™¬¦mëk€ÁV_rjõ5U4BxjkÅó ÊÀFïòÕݲØôÛÿÞÙJ½Iž"°¢šÝZx#‚Uo¹&EÞ=éjáK¿ó‡¤Š´lnÝÛ¨ä0ÍÛdˆ5BZÖ,—oò) xì½…Ú\5à¾ln5“õÉÐ×[ ¹Ú¥æ^w÷/³ˆÃÙ›·Gr!N:©Ô‘êd”}dã)áNN¡ö*®ðñvêØ•}¶FjWëÆ"Àz¸{8WÇhà,<2çé\Ç:]¯Þ”UnRˆs¶}á‡rJ„#ZÙw\06ôIèúÓ,“ÔH$^¶h@—±K;´œ“Açè++ê‘|åpŸÀDƒ}–›¬)O£ýÚäéØtΔ[}óát;ײþñ•)o°•=Ç& q„­çþÐV²¯íwè}W›ÇîR…‘rt¼5}rB¦Ïn‹é[(ç;Ú”8»ñ¹‡ÀÖ5*CçRÖs ¿Á•OôÕ·°£N;Fzf#º«ÑÅùÄ;ÊôžDœnà¤Txþà…zEI.œ1$Œ¶à¾ÆÔU \É&“êhâ?v˸»t´×E³­+íýò=±¦õa£¥&¦ë&¯ë’¸cÞ,?û~DHþøz<ºžxøñÁŠ=ƒûb‚`›Ÿ£c8º:}6::¦ÕüÊ^ l4Ggù¬¨¦Eªþ&ÖÏôè¢r¢/8Ýq³tµ]᧵C ù—0.òe»Nwïñm¨³n7¤ÿøÒ=GÕ¬Ýrâãü§šû@å …p-±ˆ?~ïn‘ 0þƒiX +endstream endobj 1452 0 obj <> endobj 1453 0 obj <>/Border[0 0 0]/Rect[198.72 610.26 307.86 623.76]/Subtype/Link/Type/Annot>> endobj 1454 0 obj <> endobj 1455 0 obj <> endobj 1456 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1457 0 obj <>stream +hÞÔXÛnÛF}×W òÄEÂ5÷B.ù˜&N"1‚XmQ$} ¥•­B¢\‘ª“ïh¢Ù™ÝåU²á¤(ŠÂ°IQÜ™3gÎÌZÀõììõ¥€ëz–)0I:Ï@%°·³Õì»ùìì•óÕLHHð/"7¼ÈÁ¨„'æÛY‚Vx¢ñÙ|1‹y’$ +æw³ÑÛóWò^œ½xúÞï™Èyí®÷åv»®®áMÕØýª\XöËü{t¥¼«”+±à"KaþÒ[ÔmÑÛþiÏb!¹ŽÖh>ìͺ²µ3v>Ÿ¥ºÀˆ2žfÀ¥*Š¸ÎÉ’‹-“Üdí÷4—zô=bB(÷%ÆÜ!R8 +À/uÞ†O;“²Ý£LÃ˺gÜD?Ü.Kº“Qc—þÖt-¢Šñ4 +¯½ /í7á%鯉H1V•Iú Û‡øÈhSàú÷x‹¶ö;ÿÍò°hàGfr."LÖÁß® +Î05«„À–23-ÚZO3ùˆ¢`qŽX±L„¿Me<‹Úëã/ÿù«ÿ_ãÝGÊ2\Pæ’6wªc¡,üw·ú|³ëk¤«!r3d¬áƒ­-§"¾ýΤ‡vÉÛÊ µe¤«­ 5åXnr/79ÕYfä°ÐbPPˆÑe¹µñ…màò¶\ °°ù¯½šôÂE–´ ²õ ™¢yÒ`A¡1¬°4í1Nd»*@ì…î¼IÒ#($*([ê÷’sYx3 YH¼Ï÷Ï_¼¹x=Ú´ærà®hÝi·ê¦lìÖV ‡ù¿2¸À,Èop¡:í2°®‡X)®Q‘'Âì ˆv·ÍzW•(«%,Ê +®,jZ&°K´Ø%]Þr›]®Ú|Á? ë*`¶Zo,"âðŠ)혈öHDƒ]‹Î öë/US~FS+& i#Qd±”(„[¼â¥¤­By…í„ï8M16„Ú‰¢§ÊCxŠ"ÄI0fŸAm-<™ì Ù ’(rŽ,ÇZà&‘\`?J±kõ§g²J w•£¨·\NMÚöCˆb€,Ö®Áøµß­jwª‹ìDk={‰ ¼-«ëCym±šWLI¬vgKG{[M{¶Ð´“)ï¸'NÎUŽhÊ“=õEü1ú™ -ÐÉî[&ÈÝÁ»Ã&z¨­ËÕ8O†›Î%zÛØÕÝeSî›S2€%\ J¸eŽ6+"îØ:nW‹^÷q‘§ójyÊÆZL螶2j”¢Ù3H!MÔ8ß#Œ‘Ź8*ºFÅ{Tck:ŽõT ÙÐã ­³i\2ñ¦òŠ*}±9,m\®ÕD]iý•mîPpP±Ö9ЈTÁ羡IJàÚÓË+ƒÈ¼5”’¤°þÓg“ lo7˜“ÝÊ%€\ø}%ܘ©Dò.<—Ç¥­^ôU´¾Âˆnìµ WFÏ–räªþ¶ñ)ßrHuFUŽÅ›=Pã¸CœISm†5ÞϘùé†uþÙ‡t¥³â<Š{ö>i..¥üg0ؾòˆt‘JM"ha”ÊÓ’ÆQ§)ÏÒ)ÓExÙ¿{Kb$¥p²’L¥ka-h4 „!!QQ͈5¸Óæ@=Áà#¾MtÔ¥…J´,±Ÿg§šg˜"`½‚ú°Xغ^6Ü/lå…rwtŒÈ°>tè|~ì$QKQ§lcíN8Z´e  ¬uG&l.8¢&x:¨}Èð~‚‚õ ÓŠ:R›QüxpÀ“X¬¸<-g®»ó¹l¥»Èü¡‹nèP– Ž3Œ1ðhá걜²hÜ>EŸXëþ (j<:ÒDcŠ“¹ ôîÓšáx÷`Ô¸)O莶j¯óCùÕß6´e­í#…ŸB®eùW-S<‹ßsß…²irïë.#Hýú©]ôgœ|@ëÜOÞõ‰>ÚSùˆpÏß_œÏï럮ˆ¾vì~œÙn^óÓðdäÞÛßkì%îô‘>ú):ZŽ‡nlBÛÝÞo¯m¦ŽZ£ +šÐÜàZÁ™ èŽi 0&!ô +endstream endobj 1458 0 obj <> endobj 1459 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1460 0 obj <>stream +hÞÔWÛnÛF}×WLý´l¬õ^È%‰ ‰âô–¦M·(¬" )Jf-QIE1Š|Pÿ²3»K]l¥MÑEm@ËËî™™3WJ˜ ξ¼”0kFC,Z@S¦ƒçÙàì¥ Ùt üÇE&1OˆµàBA¶Dá"ÄgY1r!„†l3¸f¯Î_BÄž<7M ž°å¬É‹ªžÁ×uW6Ó¼(ƒŸ³oP”v¢"®5 %—&‚ì…C ·Ør‡ýc ¥â!«.–뮪ËÖ‚g£xlÐ&Ã#\é4M‡ aYë¬Áö%ÚÌUxð)¡ Ú¾D“·„¤–†ðe˜ôÖ“bJõ*ªÈ«˜·CÃcvµšät¥XWNÜT´¦¬xÄü¶ïü¦¦¸õ›”[…ŒÐTmÝ(ÿPâ£8ŒS<ÿ/«Yº7“uÑÁAœpÉJÙzyËÚ CÏXªq­”‰{²Ãð¡#™¦Á0AªÓ¡Ò]Fn@¿~úòŸoýÿ‚ooÉw:æ’<'zßémJ…ÿ®ªÏæs¸¨f®1w 1[¸(ÛsSS¼½ ”Ƈå„÷‰és+V6· –”?¨6¸ÑÄf¯ÒظŒÉJA²ËûºËßÙ/ƒ³,SîxÊSãò”."2\‡Aù©éô5«êæe`Øts¹Ê ¬HcæXå%SVÊñ¸·XÖ˜Ìn¾Í›ÏÁ,ãÄ¡éJ¥Î \DÂ8ü9e3»'& {/(1iíÑ­ªX€T(ÝYAçØ)Ù‚ÉÎ1·÷•ØÓüÓFý}mØd¹¾™—`=Ðër%Íc$³ª/iYmëþVz´wj_zÊC­?‘‹¶Ë‹»qà)9NQ,(ly½žakÒXÑfëEYwí!ŸXv¤ÈÉ ÓÈj6Ï‘J¢Q:ÃÞ@ÚÐÛ­œ‡Üpívb)·QïèxØuŸÞiìÒûrUÕôºÛj„ha9µ7èoìÐ1»dŠKàOÓºX‘!—rW4¨§zTß]§Š©WÔT`s[·´E úì u ãà†ïªÆƒ†ØZ-(uë‹Æ:@ª1bòÕj^a¿ÆÓ!㲌å'¼•x¿\C‘×(Ç™GòzÕãhOõž0ò„VN’&I1JjÁÚ“=H4vR˜E*zLQ^Ovv¡0²+öQ·µJHãäëÎr-Qûû@ \Ê€n´,•ÃK÷véC¾¯À‘sA˜àrhâí¹ÑC‡]³£.qÆK2>%š«¶·Æ¡|,¢”'pRNqŒšÀ ©Oä ‘ÉÞ$€¤:µ0!ÍN+©·Uùšµ¶ÂDtt C\‘ìÔ‘X² ¶±1 ݦr{ +šc4ÌcLHü}PÞ†ØNŒz“vba8T^Ú²²ŸE8 jÓç›ú£K ŒCkBT * +ùCóØ¢ç•{5"¯†Ãµjlë•ëH¶}L‡á*±'¾_uÕ²Îç7®¡.ygˆ< £½šØ3Mºçó9•a›ÖÖ=Œ"vG?è½wUŽ‘Ü›r¡Füb˜EÚfëÃÃI:ˆv¹×g}&:Ã< ØÙ£}åØë«W¯LÇñü¡á~XFLè–PÍêeƒ!p‹qÚ›ÏD_½5}oØn¯h.1³Œï箊ú ëRJ‰×˜¶­c% í?Ÿ/Vó²=üØ8h Úô–béAµ/‰FǔҕÊ"¶d–üï7DoIá²÷Á’YQÐÞö;(¼%NF9V5—;ˆ Ô1ËÉ›ÏoУ¶0Ýy–°©:Wˆ»ûU ‡‰A&ôÎHï¼ÜN6£›» F%¶‡dßyüO¦(­®Õ‘)ª]aûuržÃØÊåÎìà·NåÓÍWàþÓ_ád6­®pŒ|‘wkwøÕ¢dŸûs¨kÊöiÿAƒQ'Pç-ôÙAnËâªéŽÁ +Ÿ¶`P,›¦,º½¢Õð î3{è³/`Ç,>îÉ}¬™·hÕ ŠÓ1;ɬÌê%>îàˆ°î~ÌbÊ»²‹x¨¤¯Î°i*JgÜÉÇãúd<í·‰~àß +nÊnÝÔ ·[ìËäæ#$!tÈ[×åM畳¦÷‚Ž°3úêœØýöíÅùå˜!ÌžRÇ ûaûdt•ác!ONádô ñóál 1ìÈ_s^O¶’p 4ìSáŽRC!F\Š§úï˜ßyÑ +. +endstream endobj 1461 0 obj <> endobj 1462 0 obj <>/Border[0 0 0]/Rect[63 610.26 92.16 623.76]/Subtype/Link/Type/Annot>> endobj 1463 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1464 0 obj <>stream +hÞÔXÛ’Û6}×W ò&†HÌ[âoy+×X¹lÙy )JbJ¢¦H*ãù¤ýË= €7INâ]o¥RS%J$Ñè>}útc$Û.nþñZ²m»0š%aÊ¢Ô0²¦\l_¯7/$“lµYHÅBüá"ÓDd)Kt(BÅV‡E+"ŒpoU,–" CÍV‹7ü›»,){~óü‹/Ø«&©HùqÛä‡CUoÙ˺+›M^”Á/«b+í¶Š…Öl)…41[Ý:‹Ñ`[Ž¶j‚¥T"âì°ûã©«ê²µÆîV‹8Ê‘±aBé,˘ˆR²dc3J$¦Ž …ŠfÏ A¢íCÄ< ’Y2†‡QÚ‡Ož)Õû¨bïcÞv,X‘ðÖ9}S¼+×î «èšñ:1÷¯}ë_jŠI¹k(cĪ¢ÊßÄE&Q’aý+|…­æ螬OEÇ~ ’TH^z“­ßïXûÍ‹UH`+e’í(:Ï俙̲`™ël©Bé¾Æ,0ÂpÆú럿üå¯þ}?)w:’2ö¹Ó ¥gáÿ×Õ¯ö{v_mAׄÈH±e÷e[¢85ñí·@iÜ,×¢¯L_[‰²µe )—r“:¹I©ÎL¢¦…F¤,ð Ññ×(ý`õë(£NÑÂHyÉ8¸•1­œ`³Ú•ŒL°Æ‹{tš“¦°œ‘ÌxuŠýZXç€w8ñãåênædɽäp9ÑV½8k»¼+eÝ F.¸•~à¨>¾Ëø¸ÂìÌ>«Zv|èhiB²:.ÑOì’êXç{–×kVä5{ç|Zj q¡Å‰_i¯§¶\³Ã±)Y·Ãâc]”¬ª=z›j_šÎ…CRF"»æˆÉgîE€Ö’ðc€†µOu—¿‡½M ’áv°T +&¸â’wpŸåïD¸P^Ë$0ù8T“°/ Íg¬-Kgy©µ0™dŒ³ü±ê3² ¾Á©$e*’LÄèFcG)›)zl@±,8›ùܪ̻h;Ô`äefäü×=ç¢Ì\é˜7·æ›¼Þžòm‰"µt|4e}Þˆ)S—T–*‘dK5e†¥9¿Ë‹ÝœÑ QOìüÙj¡Ž:O;Tü‘ÝD]—Tîš=VÝœ;Ë{,”¼a_n/”#é„•C TÆ••ÆYTWê”,ßÕë ãÐÊórµÆ#¡×*”ˆ‹aIŸa<ÖmèÑ!î—ƒš·A„½ºÕ êžf Ü™CƒÙ@Ç„3·g^Ÿí "nX{*Š²m7§½p å ’™—pû %+)§ãÌÁL½£lZÒ—×;û¥¤ÒíEÒ±,Ž?N¢Õ….ÏÂÁ¼¤ar©…Š¯•ûk+RvÉj¥ÜšLdÆÍŠô…âÑPACñІÍ7¼©!†;4Þr×ÖE h, iȼŋűß ¼¹Ë›ÏûˆÍØ3TÖG;‚½áväÃÄù]òƒ/ïÁCª “M ó™­mš©5Ÿì?ñø¿q¤Ø[Ú–.«§‡KOÒdFÆÞ‘™èzÒ>‘ ‡Ci‘iž>$|}<½Û÷]Üôj2šlÿHÛVëŽ.»³½‰\W¶ND”àþÿº3(xYmíÎÝÅÖY˜™éÞoƒy=O ScêtG¿QÍ C isÄ·'* vždLë¸ïNV^A PÂÒa.T&W¤8tRüú¡,ªMEÃÚ®D»olÏoi`«¬À<‰'&ÜXTЈbß;6ÐszÏX§>4¨A˜_Þ|Ïòµ]`Šý3ôÜ¥ÌD +#㔄Ót‡7üÇÀ€àg;ŒÈûSùå¼Í‚ãfÆýyŸÁàâŸòW_ÝΑê[ÖDý„‰gV¤ˆ¢KM|þýý4‘‹©–oÅW³HÐ|Gêò{IìÝ £³Rîj¬fÇõ`N‹`9J>½ù°Ï 7 ø„øf9qT‘F_ñÓEÜ>¡ö©îÏÙócÂèíîH-:æ~ùf`ž5ݸrJ?Õïíuî¡xU`èÆ÷û#Uƒ† Ñ^ÕÛ/Ï/%LrI8vÆ* !l‰©¼ZYB=B w³Ù¾{®Œ×*dn¿_zÃ;èß®›YN…Ò©ϼ‚XW`^‹t´«3RdQ|å$&CrP¦1ÉÆ&ù-G‰Ú[Ýêvo²ð6¯ýl22z’D#IžÑ&‡ªhà`‚ŒµáqZ +)YŠVŸeåç$ÉD:¥öqÜÚ)»¥6÷„w\“'ç¯÷,_Á‡ø²À°ù¿>ñæO³ù}~pû±hóGŽ¸²—"N®tm¢IÝÓÿéà0zW¹Î5ËÂ1÷dâ,÷fRÙërH¾p`+mšûóšÿ`me2 +endstream endobj 1465 0 obj <> endobj 1466 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[424.02 245.22 549 258.72]/Subtype/Link/Type/Annot>> endobj 1467 0 obj <>/S/GoToR/Type/Action>>/Border[0 0 0]/Rect[63 231.24 258.9 245.22]/Subtype/Link/Type/Annot>> endobj 1468 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1469 0 obj <>stream +hÞÔXÝrÛD¾÷Sì¥Dã­öÅ]hS¦ ´™D´)–-e$…´Ï/Á[rÎîêÏvHa`&3–ìÝsöü~çÛ0²]<ÿúš‘m»Ð‚˜Äi5 iŠÅfñU¶xþŠF²Í‚q’À<˜54µÄˆ„&œdûEZh"á·lµXÒ$IÉ7Ñ·¯ˆ¢–¼xþâÙ3rÙÄÌRÕÛ&ßïËjK^W]ÑlòUÿ}G ”¢B%£L+’½ôå ›ºß7ñ’q*£ô«ú¾+«¢uÊ.²…æÔhðIS¥ å"MSB¥E]Î;ç°[Ÿ)—³E nn\’º0¤¥í½GÃ8ïMä*˜˜·‰—ššèû»uŽo<ꊵ!%>Ó¨Š©ŠÂ¶ï¦fu6qÿL˜W…æø…‡üd¤IAþ^AWSû•õýª#ïbc)‹Š ² çÕU8 2ãB•`¬9צ¶”‡‰ü°4—B.yÂü«"±¦:"¤~þã?ßúÿU>|ÅÜ Cf.és'†*d¡ +ÿ]SÏw;rUn¡\ wÌ [rU´ô¦Àzû%æ~,Ö´oÌÐ[†»ÞÒ)Çh#bà¸7Ø®¤f„› :íŠÍÃEµ¾ˆ³ŸF$A HCQhïK[£8v«v*@¼%9ñâÊ‹ *Ò1´ÌŒ^¿Î.f'qتƽÞ8Ô.Ý~ÒvyW싪£áˆàèRQcY +ÊÕˆvÓ“>U]þÑÉd÷B)Mµ‡!|×”µ  +\Ã#JßDeÕ‘]ëhˆÍ‡È M "Øô BØKØ»ª+Àªl¾Í›/HÀcíƒÌrAå#w9@<{ƒ|@|0RQÎtJP"úÏ\Ÿ%G ¦É˜œ›èF†¤ÙÞcèÚ¹Y€[u¡¼Y2u!«À"´fšEÙ,;,d'‘¡GÀk¯ïŠU¹)‹–t·©@©7î\ËFõQ:\]ôJPânã %hH B,¢ÁîÇk[ê”jò—ð!û7®²1uWuÌ$4ÜC N§€÷‚Gyc¯"óá9‹ª”|ÕÞëênzZœ®ð½–¡òS¥&¹óµxõöýåy–]\½™EWO"ËûȪƒº'eå„’†j=MGߊ~¶»æš6LÄëR*åhÝã†)š¦§2–è#ãZwÂR@ohÇ=ÌÜ%7×­«ïº²®òÉ«5Yåù± ÷-Š3`Dj꘎1rÀ@²¯›âRuµ*0(˜:ŽnägÍk8wiu`ó8Ö'ÀF@±¯Óñàª~¸ô¥ù!"Xà÷•–¾;ÏÈi$r åÖƒ§IªÀ§nJ$6QÕÀTî°ÿiØ,ÂŽ™ÂŽèa‡üc¸3tG:Çqwú¶d†Út^V(}×1#VÂgYß·»Od]l€¯þà2=p` 9Á¡3sc,Œ-ÄuêˆÔ£mî±ì€Öˆ1È PcŽ}C617x p6ñˆùØ¡!,‡RpîèÞ5<éž î1Ä_MnàžµP}kÌÞÝ}ñåB¦=Í;¦¡_Œ’YŒè{ÌP¬Ÿ õÂBÍÛ£>7*dƒFÆ %¯bžºH¢ @K lÞV Êz\ƒ¡aá¹zncÎœ5ÐÒÉã!ʻۢ ¿¾õYÔQ +d4¤òE½.ÚßzZ'¹Ä^â@³,a‰„èªîŽüN6¡˘«ÇDLQÈ\:íË«cŽq6õcùá)£r¥Œ˜ –!þï]©›Ñ›Ñ]¾-`/„ê†c”=öãhÚrei:;i’×9Ÿ ,…á.{À¦˜ÚÏ~…³_àäÇ›žØë®ù³ñÏ4pë­‹(Æõ|׆¢!Ž `Ÿâêïòá*ÉõÎnËÖÓÆ&º—ãÀ$¿Óã|FHhóv ƒ}KÄñYÏów¼"ø`öÓi~SH¨™ œ0} jLtsø$ewëlpe¢«Âq„lgÚ n‘· §ž€ÙôDì„ÑÁ˜¼ñ#éŒ<Ü–+°!ÿ9Ï5\òácHÛpApuÀcÔáÿ'ÚÎ÷µr}­¢j ÀÑvE¾î9/\˜Ì!ê»ôô°<&v±…۞⋳Ñ5\ÄD‰z²~&´mNÓ´­gc¨a çö&ž¹Í[ÏÆñƒˆyP>lø‡6úÛÝb·„Bªý[k#drñRßIîW"¡©R™Üé!m'ÙÖ J›ƒú +endstream endobj 1470 0 obj <> endobj 1471 0 obj <>/Border[0 0 0]/Rect[63 176.22 98.82 189.72]/Subtype/Link/Type/Annot>> endobj 1472 0 obj <> endobj 1473 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1474 0 obj <>stream +hÞÔXíŽÛ¸ýï§`çµ;戤>ôÇîdf»í6 ÆžM‹q±ÐȲG-’ÜIPìS´/Ñ·ì¹$%ËÓ$E$’%ò^ÞÃ{Ï=”dËÑÕwÉ–Í(Ò,ö$Ó>«‹Ñbôíttu+™dÓÅH*æã/.2‰Eš°XûÂWlºù°"üϦùh,|ß×lúÖE5ã¼ñ²j­ÿÛȺ)ùfx+üЬ¿M]R5òªµŒ×/W‹´ïÓX>ó¬Á³x½õˆþ ÈU Í—»uQµ sŒê–ƒ +W ÕÐ.'HM}ó.,ë¨'_™†ûtòM:ÑMê² ëO@—šO¶E^.Ê¢aíSÁ*b›ˬk‹$˜q<²­ Owþ/7»fõ‘Í‹ˆ{npö$½GŒ‘B~Ú0º(ö)@¸ÓaþÏÆöq$2!<ŒcC=…R™,fm ¶\x*¦¾e–¤|4“nc{Tj3—¢CW¤èÆdá“Ñ.:)ÑŒBÓóâ.º°ïÿèEèS<£N±Ú¿îæ‡]¬:æΛ$DŸ‡~érÕͦ8˜üîpr¨>5; ‡Ó'GÓ“5}Îü›³kÿìé·‡±£F¿ÔÀ»#ò‹-LŽ- 0Úå¡6[›úÐRA ÌÙ¿½9‡,¡I™¢0w¤QÒPD‘ã=¿oÚ•ÁIÉn>dk5’k»rúiïjHÑ_‚ Zõê í/×ß²™qx™•Ã#žo‹ŸìZ/ÏwêÞæÙ;X(ïÑ[_gmÆvxêîgû»11ýÊM‚o7©.šWÐs©7}uE¦¯ŸŠü=+{èhÑçS+¬ë"oBñ`i˜ƒ‘3n&ýê7l)TOWæÂÙÖXâbÆ/¦Æaê !ÅŽvå’QECÖ¥PŠ¸ÒPùs]b÷—&f³êbæ½ê†ùê½ÖE»«+&û!æåÏ´»gàt4i–{ýÇ»yÇ—ÌÜ_àú'ü¡k\Òè¨[À¼®{Cxÿþ§»›ÉŒÃü`ì©sŠœVë¿úÙårWè®ÊM‰+@ÑÁh=èuü¾*Ûæ6†µ¬ü£Y+hé +ÚÌï*«ÈûÃÊ”Î_GõæÒá uÝ¿ù~zȈòŽœS™Á¬AÏ-HÂF„rÀŒÀW}¡ù°ëúÉ‘yÊ·Í–Ú{¶bY5íTìÑ:+PR8hÇcg!w]ÐÙ5hé› +ý}SåHßÊa²(W¦Ë+tù[Ò: +tHÇ/§‹´Ûð¯ÉÀn¬œ-+)Ψ4;æÀDsÐ4·º${ÄÞ˜’=³!ø/Á²Ç×X—¬)4XR臃ӹ5|a’傆@ß#»$Žž ÓP;Š‰ÈÛ;¿ÏÂ4¡×2ñ;Úì´ÐDXÔèd| •zí¤Ñ™oW¯ÅYµÜeËÇbÄ­õVl  ’ „ÍänDçðSDÚÁä´ßŸÑ¨¥mvlíá8Æwµ²–!EÌîîL ©?L€`ïÕL›Õíi颹tr–\v‡(qJD¡DNZÜM5Ÿl³œò“gj»Ð—~»¡\@Ø}04¹-ðï4¸±Â‰Oí+ç—çã)báQxêø›F/Öx-¡mKhÛ©šóÕnn3EúÈß“ ÷k}àsLiŸ=ð­0©kETdTýKöÀ‹bRA!·dª±49I;Ù…s{Kg [ô݇öäU§®:ŽÑ‘“.”8>æÑ—ÙëyÑä–é5/ÁqON54“_zÄG† þÑå5}J˜$™&-ôbµk,‰+ª ç!y_YùH݇”i¯IÉ]gƒÜ%šNô/ú  ÃäÀß ÿ鸪õéœ ÃÓöÁ5Pó–ØGË#)æÙ _´ô%Å展†þ +o£XÿWÔ Žj.P>m»þ‹ç¨cÏœD\³Ëó¢i»•pÀü[€ê~4 +endstream endobj 1475 0 obj <> endobj 1476 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1477 0 obj <>stream +hÞÔXÙrÛ6}×WàœTvª,wÜIlÅ´N‰VØ‘)•¤âæ“ú—½X(.ŠÝ8î2=pîrppî…ÚL^ÿ°dhSO´@1ML4Uùänò}:y}ÎCéÝ„qDá–ÄÄ$(”PŽÒû +„Jx—®&SB)(}˜Üâ7‹s¤H‚æ¯ç¯^¡ë*b IðnSe÷÷E¹Ae“WwÙ*~IW»RD4e„i…Ò3oQm³ÎöÏU4eœH\€t³;4E™×ÎØ"hNb 9i¢4"\c‘‰µå²s »3ár𠱄û)1ƒà£LÚìm`œ·!rBÌêESMbün¿ÎìÇM¾ö7¨°WƒËˆ(†½ ƒªÕÇ0ˆû+e +RšÛ^ÚW±Œ Ì¿†[°Uíü—õaÕ Ÿ¢8! çÁdüíÊà VÆAE-Öœë¸[ÊñBþ˜1Ñ4¨Í”SæoŠ4Ñ¡öúõ—ÿ|èÿ×øñÑ®ˆ ³+GÛµG²ÀÂ6ÔÙv‹nŠ Ð5¶äŽ±F7yÃÞ–oŸ".àe¾&íÆ {+ænoi”SµVbœà¸;®cIâNn(u™RŸä6¿{X6øä$¦yWM=T•NÀ¬1«)÷#uáÚÛó¶]‰›5sŒ)oLe”GÃÀï./Òe”þÚ9½•qCPÝdM~Ÿ— A~dÈð³&§‚pÕÉ^Ü_~.›ìw7'M¹ŸdˆÑ^ì 䥒„€fA^6agßâ¢lÐ64öypÞã÷QÈéqÌ•L<æ6ã­%AØZ”kk ž$~ +kÅ©5×bí‚ +ÑAZ`%ìÐ8âËùóàõkhíÊ1ÐcœÁ´ƒù›Q–PZžB9 óuK`¬–-ÈÊstöîg;@UÙC•…äƒ^»Â˜Ø²X£lD]ð«žIÝñšõIœŽ—Î⫺¹ì)œÓë·t€aà5ˆÄo‡ÂNO\gðXt·¸Ê×èác^Q)Ô9 P Âé>žrh6d¯Ùð‘¶rÒ,÷Ù +:•AЦÛû<6ÔÊw6ÐzŸ¯Š»Â*Þ€y¦ÛáßL=lüqêÞùâ@(pÅwj[•³ ^ï¶ízéãVcÚ´ù(ª½Íš\܇Öìp•&²Güµ E•è;;Æ÷¯+ë5ÛÛ6¯ŠÆ]ËÕ8(zÐ÷œÁ†éGQY·¹k˜0P°tÑŒƒ€Î‘%ì Aç„4/bo½îlû }[ +™S×P®beþžE8T…²ù†Ò§)?u•"ŽÙ‹rioý²Mþï:_;¯žv²zì]õfyï ïý->Phh™A¡­†ÊœÌàdkææ`•­­œ!0hƹ=þø¸œÆîÂa°Õg¤š®{Iœ\í›bWf[”UÞ_ÖeÉ•„¾b3E¤<) ·8½x»€†*Vørvyµ\̯.Ï–ÃBo|ö3±3:µZëD‡Å'&Ҕ̞¡ÝâÐBî#èߪº®¨é›…óÇ$‘¼—±j ¶G­sdQBP?”ù©eVîê|µ+×Ä‹þÔ[é´>œ&úëðù<ÄZ×AµÄt°Dw…`\¼š*6å®Ê~H²] 2dâ”Y!Q~ÙCXÒ¨.¬Ufk¨ÐêQô[XÝ‚ü5,ÔB ;mºæ³ëÙü"]Î÷ºMƒ-Þ__̯Îg7³³aÍ×CºÄÄœöÙñ ÃÿŠ0ÌÆt„ñtU½Lœ)_§íß=DŒñòíæùÛvW<ü÷°/V»»¼ R!!ØÒî ¸v¤Ñ\èY’Ó®ëËdb@åÓt²&àPõ§Aö +endstream endobj 1478 0 obj <> endobj 1479 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1480 0 obj <>stream +hÞÜXÛrÛ6}×WàœŒ AòQqäÄß*ÑÉ´Nh‰–ØH¤*RqÜ?ê_vI‘²ãÄÓ¦ÓŒgLŠ{9{vNƒ—o¦œ,Ê’$pCâ…ŠH—lÓÁíàUA—H=67‰´"ƒ^X›š Që(|«cRVÄ*ЫÍ<Á7A«tn^H†Ïˆæó©vf'mgK;I˜§Ë}°U*?„ý¨àSି„Wµ-ÌÈ|7«È;'§©YÚýŠÜn¡Ñ¾rÑÙB¨ ö¶çõ#ùáQä Cðu4.7¯>qS”úùõÿ|êÿWxóc'Æ1rn;Ù [þ»ªŽV+2É×ÁípcI&i™BrJÄÛ'GHø˜ÎY™6·¡sK§´t£útU zT㣑.ÚG·i™•U’‹Ä¿·$¢ÎjÜâ¶ÉZ·8Cß\z±©²"OV$Ù.vë4¯HµL*RnÒYv›¥%Iˆ¥'ßHœI¾'YµºLÆÓ“i<:?wtñYTëââdØ[[ TÒƒôâíÙ´³ÈÍé%CáA¸ûÜÈ›lõŒiàŽ*ES‰—YI2äYˆ†6Ø8HiU’"OÉéXÛÆ=X;¹&[zLZ'“]žU$1Ë‹åšÅŒT,°fº©öá}×ZÀ‚ßq†Û±˜©F.ÔYåxLÒÂðøSÂcá Êi^lõX +á3%`f%æ;Ä֌뵹Äld-膪¤ ”Ò7Zì!mSÜ÷••L<…±0”þ30æõ¼d4¸¼x?žt5؇Ç¢êpÒ³“ÓÓ“÷£8îKõa|GXÕ5ü˜l +|ÎéèJÐmbëlµÊîŽãI[kÉ{x3ÿ8€ó"Ù|¶ÛnÁá…ÞS¨ |ï9ÌxV ;ºšLÆçqOñUÀ]N{TØ#4höW[$¾ <gã =ìn¡§ü}/µL!kðYçÂ-Yoéc¸Z´¡´†Þ4ÿ°{uŸŠU•,Ò¯C]Óf êd*þC¸{wqÞŒ{Zðº’>ZDqÝô!’Ôí‘Möe`(X$Úø^Ó.Îe|bÇšâÃ)zÊ báí9¨í¡#½g·r⮪m €úYtê¦)€†¾¨Ù`¬ã9Ÿ)ïÀq­Í¤ŠÀø¡*š4ôÃ~¶°zv¶ðiÜ•Mh™Ù« JõèÌk5›'Ur“”iø“š +ŸÕ© ¦ø{^âÑ«Ñ´¬ðiB;š\œO¿Äƒß»Êº?›wº3 .„-ÃDfcßÚ rºÓ¥vUe›U–Î-ÍAg뜼ý26Ïï–iNfEîºzÀ©‡Í=ªÀ œnÑœ‚Ô¡ÖEá¬ÇPÌ#rÿpÌ­N\Ö|YD'´ôT#_À±Ö,—yüqöîA¹¾ïxÉ¡Ï úMßDL)<†4ÙqMWéíÝšx¼MÿØ¥ùÌÁ3Ï}÷F£sš‘ž>ÊìÛaÍÐ÷!Þfb”x !<žŒ¾Ÿýòp‘íÐ {ÜW¥]À`âá>Wç'sêQÀ6âYvÔÜu° ÁHcöA>–}ÂðpÑ°H>'³$'7FÁhO)C‘»]ä«{øù.Kºö„,l—>媇ËO:„*HêsEÇnÛhÜçUòY/‰caÖD,RæJ +__`*=´[UX BV’Uê(ÚÃëýjn˜kŽ–ÂÅ{- ´y±»YÕÑS áqÕÄâ›Ãï5½Š†Ìû: àis QÔg¡ +:ѧ›rûY"³Ö{'ìk:Ú"wyÔ¤kÙíi܇ª½­ìá*ìô2ÚCŠ Ô|2mjŠ£àúÙÈ9Sá·¢øÑŽålüfôv<‰í­“º¨š, ¬–FØ+¼Fô(&œù¹ÄŸ^Y™^Y™êb[}ïùXÆp“iuÏÓ8³­2Üm*l·éª©8º­NÉõððº¶ú³nH'[.¸¸A±±¾©¡TC˜Œ?C«¾JËŽß:0âniaÄÔ7†ríùéÖ‘xyŠå‹âªÀrÑ;¼£†>‹~ÆûU8âv¤\Ö3Сœ"[ÏS©A¨êÅê&™9Pñú‘lÍ•5¹Ëª¥¦âê~“ö¡&˜+ý}†iJÎÑÍÇt¬°‘ÛË1]ÕÆñàoš’› +endstream endobj 1481 0 obj <> endobj 1482 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1483 0 obj <>stream +hÞÔW]oÛ6}÷¯¸ë“´Æ II”„`m’vÝÚ®ˆ•ía +E–m­¶Hò²bè¯ØþÄþå)J–ë6 àR(ò~ž{î ÕäôùLЪ™(B‘)ò8Õùd9yšLNŸ ”,'BÇ" +YQèqÆ%%Û ‡Æ}¬%ÙdÊ8ç%w“ï——Ï(`Ÿž?~LojWD,rªUn·E¹¢e›×Ë4ËÝ’¯àÊë\Ìóh*˜P%E°-ö¶¿«Ý©Ìw +Ø¡«j×eÞc—ÉDI*ä¤X ˆI/Žcb~¤m™ìLÂæ#rfÒ?øHôÏ|DÊ ±!&|ô£>{˜”}ˆ2°!¦MKîT±Ð¹¾]¤úM:m¾è^¨ÐÏØ)]8vÛ+»©ÎÖv“ìž\HÕSRÿ"íbˆ¥ÐcœƒWت«îËb—µô­FL8¹5ÙXUiáf T\c-¥ +{°}ÿø"'Çî4ÔñTrѽä*¦¢þùéÿ|ëÿ×øð«¾;/dBßïïÎX(, ÿÝPŸl6tU¬@×P“Û cCWy“£6=Í·Ÿ\éa1_°¾0mm…ÒÔ–‚¤ j“$²Ó€˜Åª«4ý‚Ý* ™çïå†KOgÊ»$‹²¥]é*(Asþ”æÎ&_Þ§›ÍMš½K°þþ6›S‹ÇIãð«‰Ïu_ Ì?WÙ7˜(®‘ÇEÚ¦zugßç.ýbl$ŸÛSð®OÕysÖWT‰#ðÁðé©6q¾Î³wT,©]wÁ@”Ӹܡ¬ªëûBww]êl±|ó.Áòý¸l6·5\ÎG‰ñØPYa¹Ùè œèÝPRhsÚ潩€ùR„–Kwu]a›ÏËGs÷¬ßÆ{¶ në¼ÝÕ%‰a‹ùøÁM~ÜGÈôÖ.ŸY›Ö­ hîÌ]¬Ÿ¦sþå¥Æðë·W—³¹ƒ£#÷˜³–ç'$°¬´ƒ‡^¶ 'ÄïÙû‹/ËÅþ§Zz€+NÓ Øñ³¶5ö]8êºpdú:plzоEêsY¨K¯Š’f·i¦¯ °vß̵>2#TÔ]d†™ ºë°`î<]ßm(%Ý‹mœA'‹Â “%>Ô©s=»|õâõìÍ“ó¯ŸD²h/b<°"f&C«¦%·yÙžÐݺÈÖD ”'º=­+WpÌ]Â-RÁõGæ¡lKÉ‹­BÃv.þÛRc“D}dé&ÛmàpAKWê=•±-|=-˜0µÍ^jE$;›5U7M«ÁQ˜svCédmŽ»Ê«m>|)\‰/`Žðd¤±>ÂÏÃÀ2Äÿ4 Ã8}|2>FÑbå,ˆÆXÓ²Ä Õ­Î"ÝPZ.€&ø˜{0ÄpÊ‚q“sAÛª†Ö­q¨*3ÈOi ³,6¹ 8„Ó5†©±‡bá½ üØfðÌÕœÇuèa‡š÷e›þ “æ–úew*aÄÙºÚ–“üÓPרî\UÌ‹ÿÖúŒ²ï¶Éíõª®©sÒí¡_ +î·¾cú褡Ož°0¢¥‡iU€úÖ¹/éÀó!ó|5ÒÑ•?> endobj 1485 0 obj <>/Border[0 0 0]/Rect[198.72 323.22 246.9 336.72]/Subtype/Link/Type/Annot>> endobj 1486 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1487 0 obj <>stream +hÞÔXÛŽãÆ}×W4üÔ„W½ìæÝyš½L<5fä1‚u¸RKb@‰‚Hf<Ÿ”¿ô©¾P$5,A0€¤!¥êªS§NUQ²ÝâíŸ$Ûµ‹4bY˜³8OY²³^lïV‹··’I¶Ú.¤b!þð&óL9Ë¢P„Š­‹VDãÚj½XŠ0 #¶zZ|æ?|¼e‰ÈÙû·ï¿ý–ýtd.rÞìÎåáPwìîØéó¶\ëàï«¿à¨È•ˆ(bK)dš°Õk1lË‹í_ÎÁR*ó +vØ}ÓwÕQ·ÆØÇÕ"‰ D”Š$eBEEQ0çdÉÄ–*‘¥þ>‚*žÜ&Idn"æ‘ÂàP0ÜŒs>y¦”÷Q%ÎDzíX°LEÆ>mJú¤x§7ö«è½àÇ@$Ü}íG÷¥ózᄂì{(Ä¥ŠþQîbŽKYœøýOø[çÆÞÙôëŽ=Y.$×ÎdëÎkŽî0¤Æ`ØJ¥™G;Žç™ü“E,s`],U(íÇ„©H9cþýëßþç_ýÿ5>üK¹‹2!)s¡Ï]4°P:þw]½©kv_í@׌ÈH±e÷ºÕ(ΈøöÏ@E¸¨7ÂW¦«­L™ÚJ¡)¯È ¾˜féHj /SŠ2´Þ@X"Ðq×ô±k˜ÄÖÈ­ 'FI R¹)Þ=Ÿt°úÇEs” ¢cýš – ‰Ry8éuµ­t˺}ÙáE3(Xu ƒ#Þ#êˆlF” ŽB‚µ&«Ê)W{*פ~åéT‹ k¾´Õ2ÉQ¹•(Ù¢+ +*xÃA ]ì;Ý´ù­D6`.  W ÀB6Áà3 RH‡ä su¯¿›Êp$ÂÔÅИE,±·…ÊÜ]þé݃½åŽ[‡Ìâ>…½9~Úng¸§Å¬ØfŽ¼HA”§“ì +2åOݺ¬×}m<—IúÅ–ò¶\!”e.Cè}€—st4¶"¹@¶t6¬±Üxh/„³þ=³æ¨Y³5– +ec—#gŒ'Û@¡’×5^Q 8ùŽ¹LøbÈm1äT QRûE1À\b©êÈð©O$§Â‹O,ãŒX«ÈZÆp g’çI©EñÈú¥íJkŽXÁk4™×^ÐU@Ö³m½ì‰ˆ˜Ù†Ü²’Q“v‡9ÖÈX$ñã9üxÿp÷é¯fÄBr Žxb´òI/Øm€Y$C|x9³öùØ•¿±Ê†‰dæñÈP:Š­¡mÑAàP<ÁœòÞñVšZ,¿ >“°ë€– +í7UèkÉ ×=¥ü¸p é kµfß<9É©6 3¨g‘ Hg¤h´ŠÑás&R£3^E/U1_͆ŒþÐÂZ_pͦ²yEŒ‹Ìÿì2Ú½ý0~(»¾Üi(>Èœ!ÚdAçS2_äW™„Ð2‚Š@>šùŒnÂMtgÌ +ãÕWa-‡®˜ÎÁfUËN%“üv(^æª7|Qš¤Ñqîé°­jÍöºÜ`ý•?í+ò¬K’—š@hXÇ×{VÖmð×u¿1meæ’Ò¿¨B¹w??¼»[½ÿþæþa9TÉ‹Ž“+Ë÷ÜÃÊãf†¨ˆ³+^ÚC>Ü=Þ}øxO§Ì™`3”gTÌám »ÛšíE[—RÄCa*W˜ô[ËÎßVÛæXžU— œŒgË‚çè±éØFo!L›7ìP©kDüí.ã¶û®M}·ÖZù†a¡ÁÞô¶Å„A&I2/ûº³b¨¨˜Ú2wÓèI9‚û‡Á~~…óx_ì{ÓÚ4j.št-áæú/çRžð7$O‰m"Οdð§0}iÛÎÔ^¢¹d¶Wùº–tB–p3&©eà…4‘*ûÐ¥²®Ÿ‡zÉL½x¡ £—äMªQÇ«½^˜ÄTÿŸèÆÙÊGŸZà £ ‘}Ý>’âkztþ#yú´êÏú2˜µåa`GBÅ3-¡ÈW¢a‰MêÉÒ€‚ï[½!Ö!LÃSÍñeØ™ªIè`óL +HåÇ¿áícÀ¯à=k÷M_o`ó ]WÊžü¹e&Åÿ ¤”üäæˆW:/®Ñ2V­«9°Ô¦[ד3›öȤ\Éà +óX`c‹æ{ÕƒV{¨¡oçgÝõ6ù‰ÝRÛYóËE!¯$=œ(…H_ 3›á«¬Ú"yëµnÛm_ ûC?ôD¶_ ™ON$öÙ4'ô£ Ï ?µÞ>=1=aÐT4™Y¸µÿ!=¯Ì=2‘X1.¦½^;ÈÍ“†Ü5Sà]’ü#ÍÆh¢¹êzX®Ô¿qÆжÕU×CùPí¾7Çš×µ6ÌÚšL1x2уQËÎ’™C3_À›—ôÀP ó¼]ƒÀ·us8õü([bÄU/¤%k,-òrâ7ïï?Í6Š¢xumÉç[‹çƒðwÌ/oË™xÈÉ €]n_ž@ ”5U»¦j?›cùTmº={ªÎÚ‹Ô³àìûÚeŒ §ƒã¤ÌÍF× ›Ù %„wÝÙ.–BCŽS|# 'måòÀ*_âÒÅg8kÑdÐã-RT“lŸw³¤€ÅåT5®ÍŠä¥½l˜ÅqÈMèép¸½ñrŽ^ŸÏ'¢x2X}æ¥_èØ“yFa´T﬋im5-æn‘)i‘éªa­1Ëå5ëÍÉ×”¿½ý +Ϋ?æ?ãÛx%ª/PÒR ¼V‘ô3ä‚¢ye²îËÚusÀwÅ›Q2/ÈZƒ3¿þˆIù| Ç'•¥c"ÙjL©÷¦œR‰³O¸áŸ÷ôµÚ:™b°¢µÏ?ùŒm¹Ï§¦i”.Ts’CXÊ®2øJY|Re§'ÞqcÜ8n}JEœÎ‹6š>X2K8=”²a%|xðö»O|œs +endstream endobj 1488 0 obj <> endobj 1489 0 obj <>/Border[0 0 0]/Rect[454.62 206.22 480.48 219.72]/Subtype/Link/Type/Annot>> endobj 1490 0 obj <> endobj 1491 0 obj <> endobj 1492 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1493 0 obj <>stream +hÞÔXmoÛÈþ®_±Í'²g­¹»|EÐ9Ç饽â [碈Š-Q2/iT£¸_qýý—}f_(’‘shŒP¹;3;3Ï33l;;ÿã`Ûv+–) Ó˜©€5Ål3ûv1;'˜`‹ÍLHà"Mx–²Díþà•UÇv…{›ÇÛø¨«¥g¼Êh&T„ñ·3½T«x `@ëÀ[DAlD~‚ Ë†Ñzƒ—QfV´Ò;#ióˆÇqš 5õæýÇ*åo©\úFÜ)G™vŽö­•ût­€òía_T]k)ÚÚÎ`éÈÚ¢å“!¨&ôöJsîñ™xõ+¬#Í"[À5n•«:Åc™™¿y(Våæ‰=Þ—«{†„ ‘w…O„HQeõ†u÷£’ÑêlaeËî +*A‡‰ÉƇC¾&ao÷1ÓTÓjÄõvYäA‹–<m£øŒKšÐ’ ²¨dâ>ÿÙŸ‡€ ˆ׆Yôäúëîà#e€%_ЮÑ61>á*zÆvùÛMÔõ•Œ×•UÝŸ†0—Ýú#Üp«Ù%”¢¶@甾£´‚Ç©…]™ÄºõÃLÇGqå!É$ˆ£Õ_(V—ŸóýÃÎñ°hÇ}Á(cÃ4´¤ )œ3­ù ˜¾ñÅšœ&¼Ý®&·eÞ#Žð%ñ™ê¦ðHeÁÚ{·‚b Àc9[åÚœW¨·T_!m¬w»»|å‹ uõ#kL'ÂËî^;±{z(\œ"w¸H™튞‡.î>.°e/ð$â™ÿç…qxšó>ç=ß²¥Ö{‘›ÄžVü“1ùì4RMÑÿüØÝG7å ý·y‡§9áŠîó¥Ïþ¡¥,~o÷ÁÚ×ík×~XfëEŸŸ“è‹ûbõ‘•›£K0I<>SÀ³!”nß¿kå鼦\±ŸqöÆÖ$+ FC }]šèÛ~]z¹”9õÝå;­ åÑÔw‡myµÙT(Kº&±}Ý ëïñDw +2ÑVM¦¢Ì²ž%¡ºZ!a+ë¢M¹ÓD-<ÎÞù˜ÖQ!ñ[cÊ a6üh–tE)´E ¥²¢q!ò6$B&ª:ˆ‡¤Ácï›êD+:º/kó¥2!Š¨ðp ttê;D¸/Σ0èÉì…VCÊFà 7 ÝÖ¼B6½rýg…5Z˜F‘·M(µq®=f)FBŒ…LŠ Olç"7æ‘ÇqS·]bºèD)ÆIÏuLѼ'î€Z ÈÐô[xãû¼ÚòmnzãËD×}ò|QMfÄ0Ž£/jÃÜ>¦E2jR¼ËÒÈÝ’GÑ˲~TÿäÄçl裡ä´&ÊÃøÛv¹0(åxÿ}]œ mþ°È†GŸÇÝ@T7åÌ?YßïÒd•V49”_ ï(ú²ZOSâwHu×Ü9n¢–!õl9Wô{Ç¥.aÜDF½ISìó²¢NäÓçöÔEpQÈÀuñ©æC&}®v‡5Xã®è}4] å +.…‰œ8I÷›m1:Fl[º9ñ²ç¹lÁmïA3ëu©cÞÕ:šMmi.šQµö¤ë¢]iR§Ÿoî`ºF‘ë˜Aèáq2ÐíííýD­VìÕÍ™öøà½IBÁ£¤6¿ºþáêòzñ·Q¼Ã“L¬ö(»‚!CÇ3ØiçÐ.¥äÖ]S*Ê +­ŽO}:Bð3=ËM«DþP_4ýÚv›Íž“uvè O¿1„ÔJ#I‰£<õ¿ö+%OS&ðM«îÔy”eYzŠbi:ÂÒˆ†×Ï«ÞK¼«¦~ ŸBšº§£³Ï¨ˆèú¼ŽDÒ rTb8îŸä~å^¿ÄÜd61·‡dØCŽ| ò†Ù'!ØòƨÄPò€!ú²(l¬u½¦ÑEWëÂ|ðâf•ÖÍ´_‡˜$™’ïǹæ$ÍZ„¹û¢A‹€Þ™/qQѯ)K©L**ž­’ +ö!…²Àf?ž)-2¨£3ã²Æ8ÞnÔ*E,õ|%an c€¤>f‘–gÂø¼¸„ 95ùø#nj€ïâ(Qì’ 0ÜY +endstream endobj 1494 0 obj <> endobj 1495 0 obj <> endobj 1496 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1497 0 obj <>stream +hÞÔW]oÛ6öè_ÁGj­Y‘”(ioY“¼®HœCºÕ– ¶”Ir³ü¤ýË~YnŠ`ÃP "Y¢îÇá¹ç^r²½úáš“m;S’$aJ¢T’¦˜mfß/g¯ÞpÂÉr3ã‚„øÃ…§ ËR’È…‚,÷³VXáÙr5›³0 %Y>Ìnéââ ‰YJ^¿zýây×ÿòÕ—þ꽓 ãzçB¿wòÈBîXø߆z¶Û‘«r º&šÜ[rU´ŠSj¾} +„ÄÃbÍ|eºÚJ„©-MñÅÕ« Þ«D ÆÓÑSØä´ûÆ~0˜¤mÚ0Ø€Hð†'Ncb«1( [ÔBm3ÔæPPËß{bª‡5TzÕQP¼ÒV«¢m7‡#öC¯•R ¤IÄÜé\dÌŠ3á<ÞÒ]±y¸îr«XÝû2«á’Ðh/ìŒUQ(kÍZ)"Úµ$×DÓÔ¥¾iæï/ÏF¹s–’\òÐH“|[¬º²®&iÏc­¥sÉD¯ÛIïâú±êò?ÍË¥°Ÿd,SVOõ „h3h®J˜í¾¥eÕ‘](j¡Ò} –þ,0Z¾B-ÆçX¼ª+¨î +«ïòæ[Ÿ»²þÀQ!2› c»«·ô“–Fš¿ÕêK÷®ƒŒBë!£/usÎY’f#÷ƒ ÿIe«8/6&œÃ®›DÅNF´¥‚1ó†d‰Ð¨mýô FÅ  K°b{ØU׎ãB+è¾±+ÊL.€Ж!AJ("E¸+Lô˜$–Š^ß«rS-éî +RÁ ÙRè9 À¿Æ<†6dní£‰z2•-P2 ƒ>£ ø±>²cTJD!ýù^ó7ß‘¼±8 5™ÈNÒ2jjëþ.ïH¹Æ}N bH™H†f¾dœçœävù» Yâfuæ–èä B<˜{F ðÈšùXtfÓÖ!.´¨ŒÕÖÁ¼&»<°AšeúGÓHSæyø´RI1å+Ð +®…\+ÕEµÖ5RŠ!åD–¸°÷ÁvUøÞ¢`MÄžKB<_‘œ¬˜ítB¤)%A(îøÔ£1f*Vg¾ìzgO0¼ßPÛD„§÷'h…ˆèÿSz0÷Ø‘Œ²1Às†Fý;U2eRXX?¯‹vc¾®*Nµè”[svϭĺѼBì‹\V€·Ø%E1><Ýyœy†qßw=Ðœ +R{*@<é~YxÚøg¿^\v_jÙl„ô´ëò®0²a´L€z,­f¹Ñ2rQ‚†Í‰snœ<ß¹â¬oOùºÁ„ƒÃÔ6Âø\ ]Ý,.&´=«ÕIBe‹ÙéCÙ xÊêÄ ØŽ4”©çÌ&‰ÁØp6­ÿl(ÛFô>ƒ +棑6û©„û©ä˜Ä*¯ÈÇ‚Z$±¯S×À~ì%ñŸ{d»;0cƹžëÊþÄùÔ\±Ù8~iѯ{måÓ›JMÃâÉH½]¤ÚÃå†@•µ×V¼N©á[ïY®°äe ñŸ8¯d¯û6‡ÖhAG1ç;Û²ŽsoÒÖGóuUzC:Û©ÂøÆáÑúN·h´(¥[´¢»„5Ä̓>³»Ûï/’'$+SÇF0 ä7O´Ž4~Ð÷î¡:ȈA2Ýõ}Ø}ÄúÐ[ï·Ø+w¸Ð¦P‹„#f ºL[§ ŽV…÷S·©oX©¯·ŠÜçÛBŸ%2”¸|ZÔzÈz^™TßÛ›Åb”o¾€;½ÜV ªm~,a£:™k¨¼$žx:¿xsv³X~ÁYìÉî*þr:ÃLç“ø8Ÿm 0ø®N +endstream endobj 1498 0 obj <> endobj 1499 0 obj <> endobj 1500 0 obj <> endobj 1501 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1502 0 obj <>stream +hÞÔXQoÜ6îq¥4ˈ¤$J}KS·èÁM g›"ˆ…¢¥×ºÓJ®¤­½?©ÿ²ß”VZ;m^‡C/%QÙof¾oÁv«Wß¿lׯRÅt”±8K™ŠXgV·«o6«Wß &Øæv%$‹ð?"Ó<ϘV$ÛìW¬ð(ƽM¹Zó(ŠÛ<¬>—ß±„gìÍ«7_}Å®ºPd< Ú]Wì÷U³c?4ƒén‹Ò„ÿÚüG)wT•bkÁEš°Í·Îb<Ù'Û¿táZHì°ëö0Té­±‹Í*•\§ˆ)åIʸTyž3gdËFg¶3—ñâ! ¡ Ê>DÈ ¹…!gxgcô䘔£‹2ñ.ýÀÂuÊuðóý¶ • ³u VÑo4!O¿íG¿©+ïü&é~#‘ T•JºÊݸ¥cãý+,a«kÝ“í¡ØûPg\Æ›ìýymãCf,Ta-eªG°ãø<‘0‘çá:ÔùZFÂ-¦< ¿üç¾õÿ×øtI¹Sš Ê\4æNMU(|þw]}]×ìºÚ¡\5w(PŒ=»6½Ao*ª·ßC©pÓlùؘ¾·´´½•‚RNl£ä²þÞ”Õí‘ w†Ý†RÓNâ–ºnCañ@œÛ9–üÚSîgñ–ÚýE@»Í¶ê(_#TÔÈ)¨ú¡ ‹Æ³½W’>äVPx†Îž7‹é¹?eÊåXîçÈ*hŒ´ùáDl áµâò„³>ùîØ Å£t³‘ŸÁ&I3®Æº’ÊE\5«M˜¾¼Ž¦» \òAÇF¤ßbsÙ6†»ïŠîÅèdêÎC#I™»–æQ¥RÒ†àH}•o‹½ÍÉM©Uâ^³i nB—²' +N1‹ùXªþŒ×hfßö¦ú¥_Õ'”ÙºçV$à<²ÞÌ«¾ÄsW>Z“Jïl‘V¦·eZSÚ¤ :JãÃ]UÞ±¡u¨PwŽ¦ÖSêi‘»Ì—)c­u¦ŠfW[ãÅÀöÅB‘£P1‰©ë5D¨Ý|¡],§NÍÒÔY=Ü[‹¿Wgo[@.I1÷¡B×5ÝïÙ]Jk&K!*`&ÄV<†´³´'Š˜Çc ~‚q§%þ´¡¦®íŒ„;H¬vÓE׳C^ÂõökV°ò0|fã¡;ðl„zBGE³eÃC(Bk­Å«#a¦a:äÐ('@¤<Œ!EÉ<-#Wa‚t!y{‰³—½ÞŽ€v ¨’%ÐÔ2Ä"6¹2Øc²ëëª47!gËrVTÀ¶¢íŠ2ä#Í|c +5µ5ñR§]oÚÕ% LqP|ù(Iº«0¶h„ÊUS3DÐ ;š›cꢟTϨŒÃOvNÍhJí‘>o%qVà{2oÇCW?]~øþ§·‹¦B ÏOÏÄ_Cm òW4·Tõ)0/\_TH`÷ÄD®¿Ô‘Ïs®½ R»lµÏÐhùTö3Ë×o6 ³ðõ¼æÑT½µšð<~ÚBíÌo‡ª3[VÝR€s/Ö +ú%§†ŸùrùúÃÅõÂõÕHߧÞŽlΤÑ3I}ÿÃ륆r?C ‘Èüyà3ˆûKFJŠÿÉØsrÄ_õÞ¡‡Wû¶#VÄ[-I®HÐ~ü\AU‘þ[9d£‡Šh0=ÓC7@áœ^µõ-tãIø¤‰"òšHÚöxã×{lî_²Ù×ɤœÛöð©6/°‹=Ö~ËæÅòÁ±†ò-]´ªŒ5Z•àÞÏÅOâÇžU¿d)pØyû—òç)áaÒÁìLpp€î?¡CÛ[vïàb}µÅ­@ê–Þ¬Ýs—’SÚë³>Tó±Àת·ÄÓiÒ°OõYÎ;b”©õN–‹hN²ýí`Ps.Žj‚RJž%O¤+5ò$DgL8œLª^L@ìL»7}SHKÉ9é:?)zšÏõn&rÀ;1Û<ÜÙg€Û˜ÃÐV÷Eçî!þÔµ©iÉϘË\kó÷ÈŠÇ +yŠ!/íãâN;)³µw&Ì£ZŒ5Á-Xœ¬·fGƒ;>ë1ØÁ†Ú8G-:±ydÎYô¸JžI×h´5â« ß-ûDúGš¿¦ÙciCœuöî:‹u®—<åÇS`8èeiú¾Â4^p#—\XHo~tU/j!å,öÀ’öK¦ê"bÀšþ;ÅášÓåŸ ?G[Ò +endstream endobj 1503 0 obj <> endobj 1504 0 obj <> endobj 1505 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1506 0 obj <>stream +hÞÔXÛnÛFú¨¯ØG±6{ãr·}r]§pá&¬¤’>02%³•H•¤bë“ú—½ð*ÙU´EaäÉݹíÌ93¤h5yþã E«j"9Š‰BBIÄ *ÓÉròý|òüE͗ʸPc­PÌ & Í7R0ðl¾˜L1!„£ùýä}p}ùEX¡‹çÏž¡×eHVA±*“Í&ËWè*¯Ór™,Òð×ùO Š;UæM)¦2BóœDÑʦì_ÊpJArЬØÕYžVVØå| II„×Z#,”‘d}“ DzyNc&ï!&&$ܾŸÛˆhà¥PûÆ2ÆYämLª…S‰ãàÍö61w,¨Ó[wƒ2sÕAâ(ðË~ö‹ÊÅ_ÄÜ•Ð|å’™wáE¬aÿk¸YeáÞÜî5zÆ +Ó õ"+¯¯È½28+b‚͘Œ›h 1>É?Õ:œ*ˆµž2BÝm„B‰e€Ps=ýòŸ/ýÿ +oÿ5gÇcLÍÉ‘æìx›…Ôgá?kêùzfÙ +Ò56ÉRHÆ +ÍÒ*…âä&ß>…ŒÃÃô7•ék+f¶¶$`Ê!Üpƒ1qì,—±Àq¿àˆu•8/×éòþm–\‡S:“j̃}H $zZÎÒE=™ÏŒhc18#·¹oQFŒ©P‚¼”ÈIۢȟ´Æ³Ë‹y8ÿ­SÕ‘kåiW£ªNêt“æ5F—Y}Pjìv¯Ea-µ¼~uýîÇW/Šf=Eq HÜi*Ê¡`Š…8É|®£ž\Úƒy€²Êjˆ:‹§ÞSç²Eï LÿØeez‹²åØ×GG"z}þîr6°‰»5Ý=…2PÂrF bævL«¶é"[fFq>VL)ŽãN3l}{u>PI±:âÕ¾Ì*ȱ¬ÈÏP’ߢE’£)ÚU kS”)ªïàI‘×AJŠû<òéÐŽ#Ð>å˜E7û¼N¬ó9sK5ÖÒQ¹ä .¸%bÒ °&‡×i(WÉÞÕÀ‡À¡&øõ‰á0ãm±û¸N}Dd›LTjç2&‘óø}ðìÐõ™ó µkê—÷¤¶öœ"^zñ{ +V¯GÂÛ"ªziœÙs—Ð$¨ø‹u>°_çþ4B'Œ-á:1[ÍùœCŸÅ!ÅV;“ö•O4o p=3핳Åjx ëQš÷‹Ýùu6t©«ÑFÈþky`_Ã’‘ÈÐ)ÏŒ7öP›)ÚP2•)Óm’ßCF q¢ÚmíëOY2*Ù# %€t¤pÕ'¥0!°QZe€Fù¸Ý)×´w¤T¶d.údÄû(ó›«›ùùË‹ËA\¢uº¦+ÚàYGKsˆÀP=9Y•<ÆI\õ„.¶CW ÞY¨[ ›c µ›¦œáH燭™ãÜ"_ï-£{`Ü1Ä-¶ýÀc<ĺ0väîw¨ñ€r$Vü0ˆOÓNÛš³¦{p´ƒÑ'¦Š¤O(]ð?ƒZ¸é¢ž¦–Y›Õ_ƒ[JÃ-©T sçæÚÔKk&Œl²ôDdR}H +íp¥ìÊwp:°²Ÿßºi Xc²Ô@ LbšSTuân×ȈõÉ«qø&×µ1&[‹eƒFg&ŸŒ%0R«~vý¿/ä]ž°ÁÎânS…ðˆ „ár•Asn¤¹/ƒ-P6m'Õ¢eXP´…NÕà"zYÔÐàc@:‰Få{ ¨ÖwPÞð›5ÔÁHŒ%V¿¹«Üa¯); qºØÕ,`ºM ¶B wéw(³R7`s±:Zš>¦æÖ}Kºèâa>B=–ÊX·™´iå*˃>ü–»õ8Yz‰IE„ s"ˆ·öq)`/{¥ŽÇìÍõåCAǼ Y óRŸ²Eo*ÁàìôV½™IvÏgf$Ëeöü;‹Õß¹Gܪ8Â0íìáÙ‚˜ï@ƒÉaLGf¬t§‘EOwÜgÙ.սχÄÑ‘ïôÓmr¼ç{Ë”f»ÆLµf9¤€ u¼xè4ŒXü3ÉŠ5dCoÝ̱i}µ»³«%ÚCC6NE°ó³ÛÞáHé¾õ…T–ñÀ,$A±³>[{²TÂÔúøêÚ ð¶ê5O…ϺƦ¶D´)uR裂ûÐ||3Ÿ4½aÕ·>¥ãG˜UÁéj¿ÍoA 7zº>à}lü·Ða/^-—UZ7ß\Œ›ê”( #–Ö¹æÃKïó®ŽÌû±>ÕÄ¡)ª"GÛd”Æb  ¢] 0’¨å +endstream endobj 1507 0 obj <> endobj 1508 0 obj <> endobj 1509 0 obj <> endobj 1510 0 obj <> endobj 1511 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1512 0 obj <>stream +hÞÔXÛrܸ­Êã|ɬ&$½^ykSÞKžuÖy g S#Rr,)”¿Ìi¼J²eïn¹Rv‰3C²ûôít7Û¯žÿøV°}»2ŠeIÎÒÜ0•°£]]¬¾ß¬ž¿L°ÍÅJH–à."Ïx‘³L%<‘lsµJ …')~ÛlWkž$‰b››ÕoÑë³WLóœ½|þò»ïØ›c,ržGÍþX^]UõžýTwöxQnmüÏÍß JyUš+ÅÖ‚ £Ùæ/1d‹Qö?ŽñZHžFä°óæÔUµm°³ÍÊHžØd¸6ŒKUãiN²œuÎ`w6s™ÎnÂ%ô€r7aò๡`¸™æ½õLÊ¢ÔbÙv,^žE¿^ïJú$£ÎîüVѵˆê˜ë(<ösx踽 IM„†©ÊHú"•ÿ‘¥Y÷ßà#dgwÚvì]œå\D6ˆlƒ¾¦Ê窄|-¥Ézg§é2ÿe¢(âuWk™ÿQ³Øp1Ö_Ÿ~ùæþÿ +¾RìTÆE.éc§†,! ÿ\¨/v^í‘®%w,Œ-;·­Em*Ê·±TøÑîx_˜¡¶2éjË€RF¶É<¼0¾Ðè6™™°MBF&d_ô—xó¯‘:F–ʳÉ;.—g~‹öâæ]Uâ¿gâuŠËÁþ½ÿ¥ÚWuÖ JyâKr®7ÉÀ€<áÅĵTê8‘8!Ñ@ù]—{¥Dáæ¨å”ö{Ôt­8ñßÕSÍžwÌÃfo¶Á7q*PÎ¥ÿÞÅĨâ EQÒ‡™;´àyÊ„Àãæq€'èþ'á¾2¸AÖ èJO÷Ø9 xØ…w@çM,PåÍËæ0µS¢]ÁÌŒpþ‘?hfêŽÅÐ Šûæ¦P417´×µ€OÑõ—cÓËF[ßÞÕ]yë Þlä#.Ò™àJWK5µ;6‘3ýt°ï£À<|âþ„:ÙxvÛÔhY[<|YÿÚC4^ +\ÊÂS OtŸX©¯Dåù‰.û µ°è*´ô+x +­ª9€‹ž1²hDRzõK´kN–ù¨Raî#¸%/O]ÞVÿYªÖ³·ª ž*•}­æ»?Tó×ùÿõü¨ûÙºKyxíÂq羀еsñ ¡yFH~7¢­K…îµË„;{ü¯Ð8§Š?DçÜrý§¸å«“óºÜÒ³ï'Êõñle]ˆY}Œ0¿6]¿1ç—ï‡å¬Þ.0¤ËùHDrže™ø]5û-;‹7Íõ·±øIŠ]sÞÇ^ê½Í¢<§åo1\¼Àj§05ìOW¶îÚyb¿´Ñ9Pi¡Ž:u tŠiGò¥zðÂØIMXû°»¤Eª¾v[]T¶eÝ¥e5Ä°æÂ}¦Å0ÐÁ´q=1ÐwÔw?½8ÿõõÙL;8æýD¹ ʻ˲c×Çû•Ýá[Õ2½>,cháÚm®Yo€Æq/bCï8¸Wä2MC]ÚXãoGk¶Á£½ˆ1|`jvõ‘ÍH¦-&îQ½t5VžŠƒ7þTÍ©=Üíì6ãÝÂ/ê ý…„ Öís=ÙÕ£Ï~9;±Y¾žOÜÚƒ–Ã0HY°§£àÁ‡3&Þ8†Ñ ˆs[UïªmÙQ̽7$O +=‘Ü;[ÁÛ.Ê ‰A€{ ko2µÚ! »={´íéÐQ6ù¨büÍ–§CfÐ`K/–§®¹*»jëTím®çfLüÖÔÏXYïzЊ†â³ÛJf@]vmSîØ©¥°9âu/É5Û.ú]ïÐlËÞÂö‚Ñ6Újg}š¾ö?œ!ŸdôŠ]TçañE;¥¬Ì¼dÓ1;nÑ>ܤ3MÍE1ui4§%nJrwïf2†CŸiéõ'Z¨¡î…PàÁEåí¿OÕ>º©vÝ%{Í­Ád™Œ|¢'vÜà&ïAÑ#!—ÞÇ.Š—ÛnwO’U= æîsjòAÔ" é‡íB<Â)*„}{êØ¡¤ª× {™Lˆãh·]Yﶥpëˆ>Úf„ÿ¡Á\IÃSIcÜ4ä™Ò'…<-|'ÆûR¾0qºæz G pîËYƒ. µ(™Eé>–NT„­#¢ý¤gJOp +žÝ‘ãÞ9ºà|] Χ³¸8Åâ=‹‰…(t /ì¡óMêûP¼Dã%’Hc«¦Uü­æiä9¥¹^€X¾ÆѨ‰À¢átR1ït¤Ô’ © ™:`4:¶Ô­ü™þ`ÿ`}Ÿ!}ã5ÁºF3Ú˜Š‰‰3Ç‹pÒ7¥ªÉ+|ò +—¼É램ˆA]öŠˆˆ´gQaæ$Þw“°æ*'8y{é"ëT8$Â}„^'nž(r~:…ëªya¸ÌšüÚµ!µv~&™f¶jÆŸ‹Ô4¿ùLÚZI. æ9Ëñ5F}ó§•7™³>W¿Òž +RŸ$zYyúSõvëÒÙòÌèzÁ¦w¬õ@†Ý;‡´¶¦CšPÚrÊô>´^Ü¢Ütß8CÒôÑ)¯lÙž’.ˆFIzS‰HÄT=4¢ö‚JÝîöÖ(M§Ög÷m7¥/fFìãyjbaÜ Ž¤þ'À;îáî +endstream endobj 1513 0 obj <> endobj 1514 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1515 0 obj <>stream +hÞÔXÛ’ÓF}÷WÌ£TYš›4óÉB‘"Z y€‡ES.gÏ„D¸‡°æãp0J—™qsä*äXöI—9-’WûM‰w<ìÆß +¯&iRª’ðÚwá¥n}^âþš1k9Ç?¸ð_Jøª…ñ/àbu­²9¬ò:-4e‰ !û0_Û„É`kV‚Íy^D´¥<ßÉß3&]jÀÚ,yÆü­"iNó„xýôËõÿ|ü÷N”áÎeqïÄÈBXøϦú°®ÉUµºHî”{re{ Å)o¿¤\À—vCce†Ú*¸«­4å$7ù¹ÜÀ‹y‘ŸIÀEf¸¾äý£v¸lÖéê'­ühI•T“ ß„òrCpšûg4SîéñþŸ!ä’¼_µû¿šÆ4„øHu~G!ÙX³Òáòro×Õ¶²=n,üó¡êìÆ7ÔļQrO”÷¤l6äHl³®ÛþÐY['aK·q†2žLǤ]`ªmÊQrZ K:7óu; í­gë’šiåRj£Š è8ùÐîÉ­ÊšÔe*0È1å™1±O™‚+%+ˆ<æébÃ%O‹Êò ¶_·¶Ä·= ›ªÊfmɶ;eçB|Wâàèõa e×¥…C:¡I·ÍΠ+\x¿Ÿ˜ …žn¢+S˹)‡°˜\ ÏDç9€À²,¡¡MÆŽ,° »*qw@ e`.¬“±eú©íöÝ몄ÿÝ¡¶Ï·ÛÞdƳY½©\a@ˆã6XĤ±C`Ö®ïj*°ïö@i/Íd¹>…翼\Íæ±ÎEœEllÐ`om3­‡é ¹Iè[žW¿T¥§Á|rƨžDÕ2“BðuˆwFÝÉ¡êI»ª¶}}W 7¤<Ÿ™ÏkÕÏúúéëWÏ.ÏŠšû÷B9Ë Š:'Þ˜ ."RÁJYì×6”³6çKF¾úa‡ª¾mê#|Ý«Ÿª”‡ÏÓžóc†*Sp÷2éí‘¡~Hà'øª4Y +ÊÕ|—ý/ÍP¾wCV+îÇ€2åÞ_á Z,`´àÒÜ1ñM sš'sF¿M|K¤Ð-M† PÞ´‡ëÚÎÅö€åf`/ `hxÁ¨xµƒßè1KðŒL³Q }ZÉ…ßL–ÑB@üÉŽ_:‡t¢/‹Àç$à;ãÛtƾ™ I°ù'A‹=D»;`Uõ¡šCr`Š9žCB“÷½†çÚ¬‚r*ÍgÚ{£|,Æ(T1 +ŽÏŽ2±-'Ï1">¶"l’OÚ÷؃( dÎ}Gô­ï9 äbâb̧{ ÈNý6˜ˆ»ÁuÞl…‹€ phYhlé.øIY±ŸÅNÃLègŽ)ž‡ÈÆB~Øa éÂç¡N¡&ÃEŠß¹åÌ°Öw?»È>"ÑN°±ÍµþË’jâÜncwÃŽãÌ€Åcr|0Z>µ~±Ð’õ6""œÎåy—5š'<…#˜˜0”­ê¼#Ov¶¹Ó´«­CY€#Y"P؆ûŽ¦E‚¼IœDΖu {%ïˆõÝÜ=\ßL ¢œÌŒ,øÔ©A4Þ g ZƒÛb» ÉL}îÈ,˜å(Y5»·ðÑ õ15È$š"¸#¨cÔ‚Ù" =Üâ!¬MÛ,û› +þÞÄ=\··{Ot g5uEå…·ìu1µ°+@Ì™E1㘰À+o”¥?íKÄi¯ÂB&>³ÞËÉ—µzÀ(Ç°A¤Ül,c Ègw¼ÓäÇr¿ïÚ=r»€Ó_Þø[E‰)*Gˆ_F<8’¹ø.CôiݪS…éçø³‘VçådŸ Ð5N{6μºWíÕD'v\åéÌ0ê€aHc˜h‹òÎxøèRYÀåø¤§^å9ZÅ™*+åñÁœé¶ sñ÷0Ü/Ýs›•¿GA8éX[jÜ +–Œ`¤K¤’‡$V?gìD›#lÒ/[â²%T^;|¤Wøz„)PТ8㢠±Ç¥‹œûÈ9FÎPÅáâtGFÝñ|qé¼½¦¢§B¦ïeE”_XwÙøÍÛÔºt®ÙU€vÀgú?ÒÔEÿKŸ_=}òôû³ó†¹§ü3.§ •ÈPéŠ*+?áÜÇ´¤¹ÆMù££_çšÌ‡~L ->Òßxø»Š÷ðw_ÿµÃ_ñ?û]®¿ 0mŒ¬C +endstream endobj 1516 0 obj <> endobj 1517 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1518 0 obj <>stream +hÞäW[s›F~çWœé4Öz/ìŽãtÜIkLœ‡¤DB T@±ý“ú/{ö)–3Ít:Žg¼ØsÛï|ßÁÒ;ÿéŽÁ²ñ”€ˆÆÆ +…:÷ÞëÔ;Ë€AºðŠ¸°8"I ‘ „rH7E+„†x/yB)>xýwWoA’.Ï/_½‚Û:`1‰ýjYg›MQ.áºlóz‘Íòà·ôgt%¬+I„€ #LIHßX‹ao›ím¨ƒ ã$ô ´Ój×eÞcW©§8‰椈T@¸H’Hk[&;“°yˆ9ŽbIô Â<Ä”û‚$¦ àÃ0î²×qÞ…È¥ 1kZ&ŠDþûí<ÓWÜoó¹½€B¯‰_Dúîµ_ÜKõlå^âv¥LbªBqýƒ {SߊÂ(Áý·x‰¶êÊ>™ïf-ÜQL˜Ÿ;“óW•ÎžŒ)Õµæ\E]±Ãðð ÿ–$Á$ÆR'N™½”(¢|€nýöå_õ¿k¼ÿ©ÏND„é“£ÝÙ‰…Ì¡ðŸ õb½†i±D¸FÜC060Í›{Sh¼} ¸À›ùœtéz+⦷RÊ ¶ÁU¤Lcpé,©Nп{*Ûì1H÷ÎÓ”Ûí I”íS}¡MHED¨Mèþz÷G/î‹@ùÙ}‘Õ»u~SË¢üä»ÚŠþuoPÝéo<^í>¯s0¾Þ*ë*$œ©Ä¡’*kû{Ì¿Y,ôÒä­%¸>¾Y‡òn“ È?3–±µ¢(b×ñÓ7;¦Æé§ÀZýZáebJf*îÌ_ ‰ ìýån“—mãˆÛ…„L‘»¥ )LlZŽÄ¸‘}¡†1Ψ>/óôihBô&d_A­ +3Ï …A}0ái]úwÛ|V,Š¼v•Ã#dåž 2aY!n™_CfòaŠÄjßR4q¶™2€CÄW cìK‘A³Ê¶¨9YL¸Ú¤º>ÊFDàõÌsã!·[·ggŽ†¹(žØC\û•‘aÏs[$zFGb$Jä fO*­šÈ¾û0•Â–ÈÉ1c„F}>LæS¶A¨ûºFæ +ìUÀõm˜íZÈjs«´FeÐOžÌ ˜”Lö ßGÙ³žÆ¸u——³uÕè©a“·Ù)cÖfårµG –÷baãD nŒD¶Ž¬v\Vå¤Y Ôâ.qÓyv«Ž$::| ,Vm¶;Üwâ`¶ÓûùâAÃ.Ì:5ù­Kƒ[ñz"禟N1Gìm<6Èæs]W¾X{ÿv±hC˜tƒgðu? ðßzg aá\w ôtgHÀ\éAG%DÅŽ=mKRkØRhÇŸ·Ñ<ÇP[¬u ã¹nÄ-aÈ©›Œ»‘C2/3ÛÅv¶Ãju¦\éöÉíEš^M=` >¨°è¼ðÈÑDÓfm®© ©€GXŽJW§îz‚@Úuß|¨qáÀhôRlÔ†¼!>ŠXmÛ¢*+E»:ʧ]>²6p~}1}ÿîê9çž„”ðH ½ïpjó÷aiϲ>[JHœ Bˆ;°Ùm»»ª*×ȱå,¤˜lL^q¿Ž‚? ¯ø°fnÆÆ—¡Á>Â*‘‘tá`J$¶‚ \~­>vP€&X×wzR¸Í ÀŸ>"Q”8ýÏpÏ*«„±P"cp~¬ÝH'¨Úímf–VP +¿ÆŽšÆCö­.X2h3[ŽNÅE§âpZÆ­¼ Ÿ»¬G¥H8BØžnKã> endobj 1520 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1521 0 obj <>stream +hÞÔW[OG~÷¯8õÓlƒ‡¹ìU¨Ę&-M‘YÒHq…–el¶Økkwƒªü þËž3{±PÕ¢ª€vÇgÎ|çþ‘0ëþx!aVö| Á }Ð +Ó›ö^ǽÃS âiO*ø‹/< +!Ђ ñ¢'… eqÚp!„†xÓûÈÎF§àñ†‡ÃW¯à¼pdÈC¶œÉb‘å3x›W¦˜&©q~BSº6åq­a ¹ô=ˆOjD·Ã–[ìß +g wY†80^®«,7¥Å=Ï0"Ÿ{>p¥£(dcóüvƒæÊÝÛÇœPJ´ÝĘ»ŒD6শá“gJµ>*¯ñ1)+p>Øåê&¡•b•¹©Ñ;b¹Ã=Ö¨ýÒ(ém£¤ê·ƪ}E”®…>Š7ˆðü9.«XÖ;7ë´‚÷NrÉLY6ö–yc Kcs%(ÙJùA›m×ý²’Œ"gb®£²^zàøÜgíûß¿þsÕÿ/x÷‘j§.©r¢­îºP6]øm]=žÏaœÍ°]jnGb3–06¥ÁáÔÔo÷ŽÒ(47¼Ìf¶egËGNùºAE?ðw¨Æö¥OQŠ:Àc$í8[/L^• ™ø56·B>±LB$åÑA–¯Ãu5^nJ'þ•½ZÙç¤`s)¬ÔÛ ÷ë=.vQ†Ëyƒ¢[”Ç4aèĬ4µÒa3g+“fÓÌ”PÝÈ)¸fk‹k¤¸åÒu8åI’mʺ ¤Ë=ám{ vW.zÝI~ér¾^äTö\€èµ!m9ÖÕnsj‘Ü9J`j ÖÕe°^Y¿ìáR\6¢Ž8tÆ}–@Rزh–8HZš=`0 oêÓZÓebkmWXnÍ÷©Ü]¥÷6=ö¡GŸ’Åjnö³¾×1žgÛÅŽltssÄÁÔÑD—È–2ä|Ž uñó†n%ã¨ןˆQ%³– ¼m5œ‹ÒH“:ùˆ wr¯;îTµ½ùü:I!ãÞaéì%›¬ºµ¹¬VMB».Ä+Mèm aÐs3Ý`àÃë»Õ÷¹w»ÛÝ8Võ6Fâ×-(3ÇAÑ-jÓ«¬»Y–WpŸ9>K†¯ab ë9™D¹¹ª}=¨i‡ L45µ KðÄÒŒýq,Eàùì)à$©X—¥v=qàO ßAÃt¤0åQ{á.ÐÙõðP‡·&½ƒlºÍ¹[:‚ac…I«ËlÏ+<ƒšf}÷l³‰bJèc¯š@Vº7°~lí•/Q\Á~= ²âwš¤2-Ç]E“aiSdXöjñÉ$ïOœ£VM´$Ý-Lµ.rŠÝüLu}"9˜8:TGuQ%E…Ž¡Çã(¾:ö 2:=¾<‹;³OähøfD9þùj<º˜0Ýqñ Ch)>+«$O©9&L=:ðõ§ËÂd³½GñÛwò:/ìß@¾üYò`Š65ý—SçQ{ ÐSûl(^Ðñá%5¬TßÄwåYçéeŸ¤M‹çÚ›d~^,W¦¨¬­~±#Á +#!¡\ëçÂÿ&ZÔ £ +½|“÷¹Ð£ü¦ª«s:øxrf)ë4äâèsû¥èoŽã+ +endstream endobj 1522 0 obj <> endobj 1523 0 obj <>/Border[0 0 0]/Rect[446.1 610.26 499.92 623.76]/Subtype/Link/Type/Annot>> endobj 1524 0 obj <> endobj 1525 0 obj <> endobj 1526 0 obj <> endobj 1527 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1528 0 obj <>stream +hÞÔXÛrã¸}×W ö‰ÌŽ0Ä…ùèìz¶&5™¸lí¦¶¼yàHÍ”E9"e¿#ù‰üeNàU¶ãM*•¤¦F¤I Ñ—Ó§»)ØÍâýW‚Ý4‹L1“äLçS ;ØÅvñÛÕâýÁ[mB²ÿp¹áEÎŒJx"Ùj·H …'ÏVëÅ’'I¢Øêqq}:ÿÀRž³ïÞ÷í·ìâ‹œçÑþæPîvU}Ã>Ö­=l˵ÿ´úŽRþ¨”+Å–‚‹,e«ï½DÝ˃ì?â¥\Gä°Ëý±­jÛ8aç«E&¹É`SÆÓŒq©Š¢`\ç$ËYç v/a3—zò.¡ʽ„ɽC +熂á¥Î;ëI1);eT,›–ÅËŒ›èÇûMIw2jíÆß°Š®ETÇ<²߇E‡õmX$ý5)LU™¤?¤ò m +ì¿À-döþÍæ¸nÙO±É¹ˆlÙ„óöu8 ‘q®JÈ×Rf¦s¶Öó@þ‰¢ˆ—9\],e"ümÊâŒgcÝõí—ÿúÒÿ_áýŸ;e¸ È%]ìTBPøŸUõìîŽ]V7€«!pÇ`lØ¥m,rSÞb©ðÐnx—˜!·Œt¹•RNÙ&÷l“SžeFŽ@L$ £Ÿª’]ïl¼úóÀ!]‘-sì#TwÙ!0{ô„¢ˆPXɈc5¥A¬‘¤ƒ»Çy‰×ããÙåŸÎ'jh.ŠñòŒ–Edn kÚ²µ;[·œ1¿3œ”qÂúvé½cˆ—Iüþ+&b%—y/öuÍåU´6b?LD ž¤ãÓ[tþùüòlõºž©ÇœjKe„߃7êÝê ù˱:Ø «ê.6ØŽˆdbä¨ëh[ "æ8û9iândë²f냅@¶Û,koñ`_Ûy„S®Gúç¾ñÎ ÁÄÔ+êmn„3Ñœ`AŒ*Z§»†îbTXícüXóT·åWˆÜÆJºÇK`¥Äu‡+.e[ßË/4 ´Ï X&ðWúë!à+0AWÏÌ|ÇÚ–r#GAYŸ¥ÚÛg-û)/S"ŽË£¿¹³ßt¼ 5@O|ÀMÎRÅsÉxŠª=ß!«uQðÉð® ÀU`ŠÜ@®¢ë¡½uÄNZL`§‹ì™6ãý÷p⧲¾9–7Ô¶¥â6&÷ÛzÞ½Í sê`îp^"VÏ57iRøS[- °ÝÅ‚{$4‚ëB; «á¶¸³ÛÇ«¶<´pø 7"ßÆé(ÂéÚ§•õfT™tŽ…á¤ózóÜ99WÅØÎÂ.2=ç¶{‚U µîl‹ÿ§.áõ\¤³$2oæßçYwEçŒY eLžpê`j°óSù„÷ŠS»£œ/g,OÀ1’L2u¢i#:®Ñs7:œÀ ~€’/Á}K©1»^GU½¾;n@¤_lû j­u‰Ò µ0&¨F¼ë'€™?Ý1TA …Ö“Yÿ××x‰®³ÜÝßA«ýÖE’„:I"áÆ<Ã!Ûœ%Û¬û:üjÞÚH;£w1¸ñ•üµc E=1ø‚f É@Ùˬ¡ !ø+•Ýèâ”(fNíŠ%¹€-ýݧ‹ˆìêÏòüÙ"\éW8 ±HóÑé#ü‚NּŭPäN¬É;ÌCP³{". @žƒpB¢=Íòhè©>¢ˆl6•«&HPCÚóô„¼_G] g_|ÍnoQÄ;ètHË®6vM¾cO±(<ûQÑp¥R:­Ô‚›ô”h/.ÿpq~¹úyÆùËZK¶÷PJSá2Ñcåëy/…Î#ûW*©šWÆ1!¹œ2”S9å:ªù ¿î¡«øÊW|…Šï]ªfmÆ™Mº‚f&•ÌûÇ.šDȽiÚiƒž:g3&~ €/ãÔP]ÇpÝõßYï­ëèâ°¿³‚ŽÚ§A¼Û㥧Ô¼(>•‚çÃ}8Á÷m]B¹·oÓ](ï¥LèIª>—<@&}£è¸Ù¯õ9Ïцd–m'Ž¦1*0/qŠš˜|%Û#ÜàQMÑŸå|u +Ád>ž½6"T[Ö×kÛ4Ûã÷E?ìaswô=mW–uq£8v‡CgõÇ´7OeÊ ¤uÂ#W¡% P4¬ôÝÏÌxEßw~}ú ßiò“v`b?FZÐï­{ú\¿qå:r·cµ’]PdþÝ‘p’ÁaÒyŸÊ\Ëàš,š6i¿D~¦ç DßdúÂD{½¯QÓ×Øq[~Ó¹!:Ytlšú캎è{OTRŸM]ögú´íB@z… §OHãç—x +‚qÈd&Çív8éì€) á¹9’›©vúJu ¶ý¼ÁŸËÝ|jç*{©=ˆ®îíºÚVÔ3¢ÕØLµ©Ú¸10ȸ£ÖõbÔÈ[74’hIª< ¶Oå_Xö–Œ*}à:ºÅˆU#ìz99D‰LwÉ‘¾©Gž¸WdDùïÏñdxÛ'eH?×Q¾}žëªï¨º3ó#&Ížtdœ¿™¡!“})ÙüRˆ8=ÄI†‰Md€©„Ïñ›“ÿqÈsï÷ÃÀ¿•œ"Áˆòrn!û_ÊLÔ´0>Öm- +endstream endobj 1529 0 obj <> endobj 1530 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1531 0 obj <>stream +hÞÔX[“Û¶~ׯÀ#˜X0 Ù·³i·³ÍfÖŠ=MÒZ¢$v$qKR^ë'õ_öÃIvíd<ÎÎ,)’8×ï|çœlf/ÿüš“M;Ó IãŒÈL“$&M9[Ͼ[Ì^þÀ '‹õŒ 㞥,ÏHšÄ,d±ŸÅÂb‰g‹ålÎâ8NÈâyö+½¿ý(–‘W/_}û-ù©‰xÆ2Zošb¿¯rwèÊf],Ëè‹¿BUâT)–$dÎ׊,¾we/›²ß6Ñœ &i9ä±>vÕ¡l­°ÛÅLÉi¦4a"Éóœ0™IÖ7-XªÃ{8Í„œ¼GLLHû>÷Émr‚—2 îË„6 +åm,ÚŽDsÍRúóÓª0w‚våÊÝÊ\szˆ˜¢þ³¿ùšåÖ$Ü5æ +¾&Z˜"q31w·ŠDšiJH¸~þåþéÿ¯ðþ§É]’2n2‡Ü%= +¹Gá×5õf·#ÕpM ¸#0¶ä±lKgbðö> –+*Ó×V*lmipÊ%Ý$†c,ãØ;|®SÉÒqÁÅʸ;/wåúùMUú6Ö½ªsM¤j‘‚+«,c±·Ðó­[•yæmÊ)+²N&â9Ó½+ɱÅË2J@ÞôC„ŲÛH÷\-½'s!Yž*ËïéÔ4}m}©¤ Îï7gYÞG_¼¹»yüùþvâ¯d|⯠B­¿ãÀºejȤ‰)¼jš§êõéÐì’ÅB¸59˵ëæ Rgb»¡Q˜˜Õ¿ÂŽìÊHSM ÊSÙüF]é²4Ô›ÜËú€8.±b[4ß„Ôëz!D£\Ì|ƒEz2å¦éÅÞ7ÓÞT°|šŒQI__ÐLXœk96`dúï±de à±4—®ªŸ°¤WE_™CWõñÝ®ô@Ð!É‚ëKÝ{£³:¼µ—U·½P=¬!g2IÒ«1øbíŇA;®/ÎL˜ûµT—éðô½K÷¶8l¾¦.ëWÙY„íÞ—6¿[ûŠ§:1¤jâߢIMHWjKëžtƒ¾›ÆpŠ¤›£)ÓvŠ:Œ)ÂL†ÖD™Ûêú|‹ú1ir̉gÏ`fþèM }ýT.«uFï@µ]ýDꆼ«»®¶ºyÊTzNè i쬹!(¾„£Éˆc§ ©×VÒûª`Sëçh‚-Ùú ¦N¬*-˜O9¡°ƒR|æÆ3Ä‘^&#wkW¿hbJ%ö­©·áˆ4ºësGÒZ¹'ñ³5i¢¯:8 óP»FŸé¦ù#<Úž7­ÎÆxº]œzÅÓS4WFwUénàCíî¬#-BjbÓ¡Õe[â±öÑ0¦´>«3ÆÂ00Ï06|<òc´ZT¯¥èÈ:JŠù‚bøy®º-úU·íGO¸ÚߌœÜ÷^IÙGRRF ¡y®Zÿ`­À˜…ÐJZ„kgÓìñ©X.ÎqŽ;Ñ›[X m±1‚{Ât„Ká_[z¶CÐFA>ãÑÇø³¡Í¼hDÀ}"}½pl/Ó‘fÉM¼‰´Ax¨ÛË?M§;o2†Ñé(ÁDêßÒ¿<<Þýòðãâæ~bžîMë7B¡äj$î|ìãLÊ‹9Ë)·‹»WAüˆ +¸¼NØ¿µdl±ïÐ4ò € ¶é½hÒ} •P?BªžMçÀÚÓÉW±#EãyØ>A@ža¤Kvaó[8 +Ä+‹÷P0ÏÛj¹ ˆ“fû=ä:î÷Ÿ~(îiÍ ¨næÍu$²P…X7«²q¥Y[.f°¸`=?ãÙ}™³Ä·3­ÀÖÚ)Ês Eÿ1ŽfTŽ¸ì¹Ï5ÞEᇰ¨Ô‡ÅÅcòW¦ª•œ7MYt~úVrJ>Jùµp™0ž ëȬœòöû⬧¸J.p5¡%“@˜óweÛ:½~€Ç,®ÔÕlY;éļ1N¯1ð‡*W>a‰#èw¦E(ºŒÌÖ²2iStm7Ÿ§³êÄ®€_ìÉâ‰:¦¯†-~Gù5©6‡‰FÆÛr¨ „œ^4zôÂôZq;Õ5f7;·}*½\½>Ë2õb‹ÍZ0ÁlÜêwm½+;Û7r Õœ’×ãbíc!Kcõ%Ñè‹%w{¨q,Fv°3‚ˆ§ÓÚˆ÷(Í0y…ìŒH¯E!ÑÉŸT_1 +?Âà™bZú]b<E8½À—‰!“±™+söjãgTªõè´"sg¢­ÙEŸŸP\ø­ôTaøfrðš¦úsÎ'4ÌS_¨Bõ*ÔG&¡Ã4Îö.†K”åÚœ÷ %ÉÔÕCdgfüít,ÿ{ÒgÃnØ'¶cˆÎ§›XƒˆÆ> Î:7ÎÜ.fÿ`£¦ue +endstream endobj 1532 0 obj <> endobj 1533 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1534 0 obj <>stream +hÞÔW]ÛÆ}ׯ˜î™¬f9~"èÃZVšm7Ž¡¥]´QÐÔHb—"’òzQôõ_öÜ™!WRä:EÐ…“Îœ{î¹_³‚m&7¿{lÓM"Éb/aA1é±VMÖ“WÙäæ[ÁËÖá3ÿðIÌÓ„ÅÒãžÏ²ÝÄ +÷¬eÅdÊ=Ï“,{šüèÜÏ¿e!OØìföõ×ìm늄'N³ióÝ®¬7ì®îU»Î åþ%û=LIc*äR²©à" +YöÚ #¶xÁþcëN…ϧ[4‡¾¬U§ÁæÙ$òyÁ§ˆ‡ã¾LÓ”ñ !,ívX„ÏÜN>BÚ õG¸< +’jR†A2xOÄ| è‡–bÞõÌFº¾Ä¢Zñ¡0mmž®­-å_tlŒâè¨Ó輌ÉKtžë>ÿäfÜd™oŽ§L½ŸÚØ9'Ä¿¤ÃM\¦˜4qx>DtmØdNÄuÙv¯¬µ‰ª$i‰#A—tÃî~›#òš}Pl_a|­A>×ÐN.Ë{ƒÞy_¢?•ýóJ$²B‘õl ëžLª­TWnjí²vî‚sSi¬Ž•ëT¥ +š-Zûã,<çO€¶'pF¾ÃëŽí\˜T·=ËQÎÛÜõ=üDáT¸z>é0‡Î'„Ñ/úêyÚØ"òñÏ·ùÓo[çs“+Ï®@]0&Vg…ßNf§ñBò$¸à¦F5x¡Á³DÛsʺ¨+¥Õïøm ~)?ðE‰±Ðê+ÅÆ2OŒ¥„,%d òUeÕ‡ä±Õ˃4<*o“A÷·š/NêOžç qˆ‡Šéú¼Wº¾Y³¾`&6Ín8jïïnïîçgµ.Ò—òÒ;×& ý˜GŸ¯›:y½b9 +±¿,Š)$äÕ›(Î?¢'-žÍŒ'bG)#`o7ìTúØX‰ÉJ é]¤]ìp+ÄÐ-%ÝKuÃÔotE‹àÓÐ÷…8¿D¢ß3ô}7@Å= °ù§|··+Ýé½ô¤2%¶!‹!ã¥EֽŕB·µiˆÞXU ±N'rK¹>ÕÀ'º· ‡L"=·ÃwŠ0aŽBèܨy®âtle¨…êC^‰­vJ7#ëóþBrzò%9‘-•çàìÃc†#'‰#…äxVñ/ÌÜ]DFf.†"f¢¶ój©ÍÎrÍÿëd÷'túkŒæuù÷ˆ×9–ûœVK—ýísÓTaïê+ +.Ý7ÃåUèѸëæwg¶UÅ#+×/ú«ÎõV4˜2Et9>µ²¦óKGúÍo™Õ šYú#Íì+{Dßš¶oÁp½t®2m¯cuC®!Їk E,·ø …?…<ð…ì©-©8°‹/—õÕÒýfØæ —¾Ñh«úC[31nÑÿNÁ3âˆ0~qÂÑ!ãÕCŸ·½M íò:ÊýÝC&üÑæfßÍIà?ü´˜?, ñ3;ŽO·«Õ¬ÙQkô«VåÄø°×1iªSË(¨×à/" Eq¥üÒþÚ”ï>£Å%ƒ|HÅûüCRwÓëX¯„W?㢒H•¾W×ìêý|‘ÝÍnïñžR¤<> endobj 1536 0 obj <>/Border[0 0 0]/Rect[205.92 523.26 312.96 536.76]/Subtype/Link/Type/Annot>> endobj 1537 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1538 0 obj <>stream +hÞÔWmÛÆþ®_1ð§e­¹»\¾ È×–]7ø“]¹¢`¤Õ™…D¹$å‹?äõ_örù"ñ\\iq€Ä£vggžyæ™YEw‹§¯nÝÕ‹ØP¦¥1™*·Ø-þ¼^<}©HÑz·PšBüáK¥‰ÌRJL(CMëÃ"„Fx·Þ,–2 CCëûÅâjõ’¬LéùÓç_}Eo«@¥2Ç»*?ŠòŽ^—«vùÆ_ÿG™î(+¡¥’*¶´~ÑYŒÛj´ý·*X*-#QÀ]OMQºº5¶Z/l”!¢XÚ˜¤6Y–‘ŒR¶ÔÆk™ÄýïZêèìw`˜öGÄ< ’µ8d„£´Ÿ=Óº÷Q[ïc^7,c™ˆw·9?iѸm÷@g¢ ¤~Ù÷~Qµùàéî;T±šXó?:ò/ñ*‰’ ûßⶪc÷Ëö´iè}¤R çMÖþ¼céCjZ¬B[ë8éÑŽ¢ËLþ›T–ËXgKªîÑRËXõßÿú×þÿþåÜ™D*Î\ØçÎ ,Tž…¿¯«Ïö{º.î@ׄÉ(±¦kW;§a¾} +´ÁK·•}eúÚJt[[14e›õZw"É,î*2Cq’Hzjц}#u¾¥½ÛݯÊíû"¿>íÝ­x‚×ï_?»z}³VúÉmðÍ„ö!ñ oáù_VXúü»\¯nnìMÖBgBx2¬­\ƒµ§ª¤ð›_¼€õZ™vZ™²HØ,e¹„ßB–±çN{I¯\骼qÁúŸ£ŽªË–âÞoO»À×Û ‰‰È|4Ž*¯Št߉¥a±¤œX?½×ÖŸ•ÉžHCå3l×ï®Vôjõfuýl½:ó“Ùq‡êC3­F ªÄspe#éu;ýYq+îíÎpÈâp/]+£Yˆy±xЙH&½3-ûÇ:H;oŽÂ>óBK=©œ0™yrq€š°\¶⥢?þu**·¥¢œÂ­ŒLã‰4˜vó®Ø»@A’…¤)î”'Úä%m*»t8VŽšxq,ÝEî–ÚBì%\m…üúdŽh0|ÑE2û€xw*C;².ª—´C׉  ]ÔF÷2Ð,-·%ª?—Mþ3¬¶!¡¯Lœ˜µý]`4dçà„Ö ÚÐ!àWyS ³5(‡9µS©•ý¯™öœƒ§q‡bÛ Å´Ðú û¶?Bõ5ÕÎÑ“‹úL †Xð¤—CZ™i²Èa’’ + S„ldÙ8uŒB`PÄÐ!‹I`"+qŸi_zEEçwÔùmúR²dÀUãÔÓÀí*/ïNùƒ‚·P'ðQ¹òrJC6³d^òƒphŽt´™§:Ó[3¹A*N˜’Nµë>Ë["§­-_°Äß4yÕx‘²ç©¤9“°M|Žòr{q| í—OÊì¬ðLlÒŸ1hosdNpCDÍxøÒÀÏØ>(s̨1á°|̦w×ÈX}IA/誻uâÜÄÏ;ý%š§©NçâÎû ]ÙØ |)`88Âój„âÀí‰ÓŽžŽHO4CÞg­üäÀçÍþ´…šþäšû€§WçZŠ×ž3KJÌ>Céú¹ ?—Å'rlæ#ÜFyý~ç9ø¨vŠ”nŽRŸð€“µ…¡3,hݦ=H+Oˆa”/€"ßÓ}Áý˜å‹oBõ¶i”dž\€›U,~öÐÄSxl´WØûbS4ûÏ´u;8¶* ×Œ]v27 ±N²Pé RÉ<1½lðôçwvÑ×ÔQðptêäÙðýo.Y™¹v„gü“ñC”èN†Àí¨>m6®®w§½ì6öã—aelå²}j¯qVã~tRz!³ÐU1Õ“s¹›NbÆdóNûìÞô•‰¦¦œq‰.ã7|ùüß(Þ3èpÅ·À#µ}¨]޴ͺÝó…Qðè4D-2̇qPí1;` ˆÅLºoEw™‘ÆôM·­;x×Fý&?œúð'zhªP}7‘2Ãâ ô¥Ø,B(ô†¨íÕ–Ç" â×8†:…±,¶@Ð-Æ'Í/Ž]mZѪq¿ ¿ äÅEf^I*†¨E}%=¾GNÁTÆLg—~JÕÝ” +#õ¼Ý¡ôo¬˜iE<þ"Ñ8'BÍÆüamk¼¾öÙÙ^@k;N`£?’ÚB{é¥OàµÎÄŸ\êˆ[P†&‡ÜzÁÁtù%Гû +endstream endobj 1539 0 obj <> endobj 1540 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1541 0 obj <>stream +hÞÔXÛ’Û6}×Wà‘L,˜¸ ó6±eïlMfR2íT6Î-AnQ¤–¤f<Ÿ´¹ÝH‘’ì¸\Þr¥¦Š¤$¢/§O7†‘íìùë7ŒlÛ™DG ‘‰"""™mf?g³ç¯a$ÛÌ'üÁ%š¦ Ñ"¢'ÙnIø.[Íæ4Š"A²ÇÙÁÍâ‰iB^<ñãä×&d M‚zÛä»]QmÉuÕ™f“¯LøgöOp%œ«˜ +AæŒ2“쥳(Ûìhû·&œ3NeP€²¬]Q™Ö[d3Å©V“¢±"”‹4M • Ú²ÙÙ„í3årò#@‚/û#¤<’ZR?ʤÏ㼑Ç>ļíH8WTo÷ëŸxЙµ{ ÞÓ  +iø×~ñ/5«{ÿw÷ˆÅªP?pé¾dð•–:…õ¿Â#Øjj÷Ëú°êÈ»P'”Æ›l½¿ºòÎ`g,Tb͹Ò=ØRžnä KÓpžÔéœGÌ=Æ$TT„ô÷/¿}÷Wÿ¾Æ‡¸wBS†;õ{'2ÏÂÿo¨WeI–Å誑Ü!2¶diZµ)o!ð¥YÓ¾0}minkK¤|FmàE¥ÕHi,/5fa‚Á›§ªË?†Ù¿gϳŒ»å)M•«S|@±¢B¢ ¬O«ÿŠª#¥ U°y\TëwE¾<”浩Þ[¬+ý%¬XÕ”ô +–ÜçÍÄË–rNÎS·4Š#å¼<`Ý`o¥¹Åv^ò†ˆa¡”ÝâïC›Ó€ˆ@ѵ Ø'L*’T%(ˆ6­(¶ëJ³y<æòÒlòC 2dm‰ èÆZ{t-kÐ +ß*l‚úÚ’¼Ï7vV Œ8Eì¶ãåâÕÕÛ›lâOR~dh$¼ /ä¤íòÎì lÆ& Ùˆ˜¤"hHwoÈC‘Ó îSß x–|…oå};çcßíÞ¬ŠMyâò”2Öï¤Å¢#]ÌÝ}ÞõÑ„‰~ò3€ß…:ÀÛ>6(k4Tg”:K«¼" 9´fMºšlM…£¡KB\h½P8~®C¸8HÖÆïÀÎZg âí÷âˆñ|rc›ã–¸Ž) X‹1ПÅù3’Wk¸¦ZMñ²^O Ìö°ß—·¼B Iðt²C ÕldEÿÕ.±tÌ¥ÀîÂ\¤4ñé,ûä¸ö!mŠ!O­È8Ììþì@–:w߀ Fƒ5)*‹ Ópydwk˜ÇÇ€ß]_Mˇê>Ø1;xªO °¶Ö¡u– ¤:BbÓðņ{sLeÌÚ®ÚQrÎü9$šŽ!ù"POÈ'NÙ_´¤ÞwE]å¥cØë;Ëtµ>§n]•OpY¬a †b€¡ãL4€|1?W €xùöfq¹r¯^Þå=?ƒ×‹ÛÅò*;]—Œ×Í¡G*uZˆV‚J&b #$aáõý…üEƒ‘0m°8m0NŠC«þc5~âî`ù´ºKΩê[VßL¦â~“‡À[<…¨‡8é1ÔÍé4={‘J4ïÅÞQÐoî ÷ ½à÷ª1ÝChtéÙÞ\ý¾XNöA\Ò#®O¨GÉ¢èîq!h踽D§yC$c&([_‰GtZµó4ñ0чÅí‹›»7o—SÞÅTNyŠ¤ã‹f¯Ì“l̨•­Á]Å¢@©áÒzSUûd¯<}=šÇÀˆ¡„k¾ê :»ÇÊ0?ï¥)‹/kõ庼¤Õ£òL>_z"J=\žcR’suÂ×æWÍŠJðOÏãÚz2Í·K;ú=ád¬‚Ûül„6ªÅÙg–H°ëQ +R0 +`ý×D²¶3icVxCÙÿ‘ëúð¡ìëG ÎÔ¹ÿú-ªßìm åêþ¸jì>¥Rým¼ç¿“w<¢Ž÷yµý¹›Î2±¼{0–÷öãY(pÆ×qú¹3ɸµpÔ™ZÖUmd°=`U·S~B£åøߤL¥;Á`éÙú˜Êk"Ç”M"ø ‡M¼¦øqÓ€ÂØ%y=’ÁT‚C +l„£Ó¶ÓKŠk]½ÇÞð¡îºzGêÍp,™à=ç¨O.xšÏ$}e«ìùL¦Z)ÆY%8FM³zsd°IÉõ†ô™ÄêÒ¼'•?lÒ%`öçÁÁŸyž #òL&‰Œw¡Bò&éʃùi:ÏïÔgÇátð»åõ¿în³«›Itjˆlø?g_q5ì[p:Q9©S5šŽËìú…3¿Èfÿ`nAfñ +endstream endobj 1542 0 obj <> endobj 1543 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1544 0 obj <>stream +hÞÔXÛ’ÛÆ}çWÌ#‹£¹`pyT$Ù•”c»$Æ®”œ,’pH`€Úå'å/szf £\T–+µU Àt÷tŸ>Ý=’íW/¿y/Ù¾[Åš%"eQ3-X[®v«ßoV/¿–L²Ín%øÃE¦ ÏR–hÁ…b›ÓJ@ +žmŠÕš !4Û<­>ß¾ýšž²×/_õû¡ eÊÓ Ù·ùéTÕ{ö‡º/Û]^”á_7„*íT®5[K.cÃ6oœÄh”-¯²jõT< +*Èaïšs_Õeg…½Ý¬L”aG171ãJgYÆx”’$»·Xñ$ÞcÓ\E³÷ð ¹DÛ—Øóè‘Ìú!cx¥ÃöÉ2¥•ñ6æ]ÏÂuÌ“àÏÛœîTЗ[wÃ*ºfArøÏþä?j‹ƒÿH¹«{Õ±¢*rñN&Q’aý¸…¬¶qo¶ç¢g?†IÊePz‘××Ô^Bc}%ÈÙJÅÉàí(ZFòLfY¸Náël­„t·†…1Ɔë~ùÍ?ýÿ>þ¤Øé„KŠœb§GJÂ_×ÔWÇ#{WíׄÀJ€±cïÊ®DrjÂÛÇPi<,·|ÈLŸ[‰²¹ƒS®t/éÆI¼  PAû À$?UÛþn~Ár3PˆÌŒsŠ O‘_öµ—Îc÷Ž cßžòg+Ãåyˆ¨Á\=+Ï‚)¬c¿쫦Î,o÷çSY÷ëyϺDz¨v–»ICjÄ •!㜜§ª-Ù“ÕŠTðj^ïéI¨jöt¨Šƒ“´v¢®Ô(Æ—¨´¥iŠê¶9TÝhÐÈš‡®9–}"‹2 Õ, Ù\ûB¡9æ¿ñƘ,™ýr拉|絈ˆ'!/ûüøý=7 øFÿÎ :ÖŸë™ñÈüŠnZKMý¤¥{{Æ7¨kqLŒï ÈëþÎÙ=ýXåïÎÇò›²þ6•]B)Á›%uAhuô¼¡œ#ɽ²Î‡Àö‘D4è#a$+ÎýÂÈ¡Iµî¾}õ—·ïf®€+gèL½7Tê¼Ñõy_Úýƒ"K§fZµÐë[wßêÑËj2²ôDź¿T-­b²‘V¦€±í4Š³¥°ä’=wøÝÔÇ‹5PšffÙ‘¡ödVÈø5â% +.ÍXPýþ2ž¨%º=.£z)ÛÙŽ]Mì7£ývù ¢ú[}DÁ"^–šè“jßÖűéÎm9×~9»ª¯[?q×ÎiœÍ€½vËÖš««ß®`Þ_ê>¶K65ø(‹Ý„A74d {ÒC*(í[!¾Ç2ŒƒûõÏk ¹Þ))o°¨hjÑ«yû»EE+5nшØ):Ò@P8pù.?ùQm43D2ÃlðÂbÆù8š0šl›óz‡¢ŸñUlõÏǹw1Tî©:ä§Låçj»|Qmχ/º·/£mÀÍ3áåý£EOYÿ6×USí(8Z'Ÿ­ýò›j·¹RÚq]k^[+–‰;?Olø9œWÅiÑRi†ØÎW.¯êI|h´f)-î5WÈhd³Íäyc•Nù5ù5»öU + …\«P•í멆#4Uß Õb*Â~êÉä¼?ÒO­Iüô)û²Ã`HéQx>VùM«(yb–’™ ç#»Ùó]æ=2äè^å’°³(ÓÉb_ǦÈiºcÍÎÿv»BMïT_é…= }þµ`èø¶É½õT[ÀÃþh›¯ø¶#ÆCå·9ì2v©Ý.jB4»ø›e™Ñͤ‚‡:&•7åΖ¬PŠH–t·î›µ»£Ç³–•=ÄQ‰{S°®«ÙÓLI.z¶-„ëšÆîLLB¹6e[¯üÛ ÃÏØÉ¢e­¢¥Âæ?45jn‹á0Ã`«±ã "å|íì¨L ²ARä[d;šÈ€S;Vcï¸Ç°)ƒÓ|Aσ0­ïôÛ£Yýñõ=«ªÉ8¨&=ÔÜ+.¸eŽI[Jz•ƒâ©AÕ¶ ä'¤»17½ÿ8†ÔÂíª~8=èiM¼ˆÆ˜9.‚ÐñÐœëm7€ÝUðŒÇrÙô‡¡¦óïBÁ y1S bŽÒÁ)$@S‹ù@°OˆñÛjêmÂ` sÜ…hˆd±;RC¹‰A™NlÈ(wÖtòË^#ˆ¶ÿrýª;apRF(‘‡ýê˜Æ²Ù<¡Sµóªã.2 B­4`ò.ð‡CÑmÃê¦_5GÂdGГt ò7w ¤Á–ZÓ|ûKN FÜæmtÒ‡Üj±²Q?öµ;p±ç8GÚ¸¹¡ ìÍábt&ÜUQ *ÊÅÉVtŒVWº7&·G\Ó.Ë•Öø.1s’NŒFp æ9*#Ge€‹¡QôÅU×H¦Ù¿¡wÖ¾úª0*‘€.i&zp‹-É3uoVuõcJÔü:Ïç¥þ§#©îŽÃŽ÷€ÿh†U·ÎIŸMÌo7« +0ýVÍ +endstream endobj 1545 0 obj <> endobj 1546 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1547 0 obj <>stream +hÞÔX]ÛÆ}ׯ˜æi˜X³œ~"èÃf­)¶N°–mÙ¢àJ”ÄZ"’ò®Zôõ_öÜ™!EJJ M‹Ú€È%gæ~{î½”l=¹yóN²u3‰4‹ý„IÄ´Ïê|²š|3ŸÜ|+™dóÕD*æã?.2‰Eš°XûÂWl¾›ø8EøžÍ“©ð}_³ùóäG~?û–…"aw7w_}Å~¨=™ˆ„Wë:ÛíŠr;+Û¼^e‹Üûãüw¥­¨PhͦRÈ(dó×öÄ ?[žÎþX{S©DÀ œÃªC[”yc›Í'‘q›"FL(¦)ABgëŒÁæ%l*½„Kh6/arïÔ¸!ex$õ¤˜RŠ*t*fM˼i$bþ~¿ÌèNñ6_ÚVÐ5å¥'Bî–ýÞ-ª·HÙ«/C˜ª#E¨À>ÔxqŠý?àgÕ•}³<,ZöÁ‹!yîŽlœ¼ªtÂã*Ÿ|­Tw΂ó@þÉ4õ¦ \N•/ímȼHDœ±îúË/ÿó¥ÿ¿‡÷Rìt,$EÎïb§{J‡Â_WÕÛí–=kÀ5&p{`lØCÞäÈMMxûì)‡ùRt‰ér+V&·"PÊ%Ûh¢C8æË£8ñ‰n|?&K}kä6_=(²‡Ã6“—÷™§|¨sô¤„’9%2`V.ìómÕê3Ò9ñÉ +bA”³³ž$A¢OÃ: qNò’¹cB{L B8¾‡õJòÙÛ»ûïß½˜yó?È.nÐ}üÌ&Ö´Y›ïò²lV´ð~˜=ÂÉLEœüÛ"¯Hd•Vb]…³RÚCü“ÀûÛ?ÌF´]ÃÍî©N…„l"÷xÌí$ßQûI¢4~:u¾„«—lçî#~ððÓ´ÆóÀG,Æ„î0”2 ÿ§œìÏ=‡/BijE»=²ö¹Xä¬(YvE—ŽÂxÂÿðÝíÃûû±GcÕÉ|ì+¡\|ø›ÙÛÙÃíü|wÜívκ#=G€ÝåRdª‘/µPá5EßË6{1{æsÕA%l£ =DViSÅ©p$üÈ ¸~›{'Õ17)¹üyä–‚„¤¡ ó© ¾ÆþEU¢òÑÊMVÙù6²*€'”J;sC Wd0•>~$ÚˆøÛlçÒ³×Õ*Ö#¿2ˆBüý4 +† +ô–ðeuxÚvÙuÞV2º”O•“¶â7Y¹¦«¼Ô!Š¯é€N( ô¯¢ƒú/ë°#¡EùÑ\–íæBüi×P|*­ãÿŒôìå—KôFI1bñ ©v8ïDÜ¢ Õè^ÖÊ©f NôBŠºO£Uf4KÉ1‹&Á0.û ç@}…â§ù»}¾(V*ÅHu-Q”Ú$yÍVžÖˆ¾á³‚‡Ô#Om鸭öÄÌOUÛV;V­ÌÃÏE&Fž*¢kN8¶§Ä^rDRçöðqÀDÔktˆ:wJxNƸ£zÓyFÇ#¯dm§¿e÷Ø=DKÄÝ1¼‡§víi@!}6|ãÉ%­F`ê=~¨dŠ’«JtÇí²—bWüÅ“H,ÂX­2¥îM¶ ß=!(¶8´ÍÉùÑHÍq›g9ƒmh'WEKÉõœF~`"½’Ó6ª?Öçõyo25p<ÎlØ98¥³:ç$Ü©à”ס鵿ߓÑgYíÖ:º1)t¾Áûêª3öŒàáz°Úò‚FOÚ Üó¼)›ÎÁA‡î3t- ùÒ‚ш“$vYy*áî1ÀàÀª^æ=%÷Ý¥Ÿ^ b@õÄêæ#„ÂÁÓ€† bh–í÷Û£—¦À„ð~‘5´>¯X¯Tÿ¢1îÜv `ý±Chr]ç™Õ7a0ˆ5í Ý^39dd)CKAË1a%Bª«|5Æ•¾ÀÕÑaàòÅ°Õ6o+×Ú ÚL«I뇖‡ê qŽPêû—P•Ý< ÃŽP}€V8oáÑ`ZPØB¾2£ëñbœ»2äø#q]a¼Fœ¬(Öe…8·MŸãVþÊ´«B¢ J4Ó™ÛæÅ?2}9Cc R;ßjÎÞÁbV`³—l·ßæÍ?™p•Šnöü©›½¬ŸÜF¬t ¯J¹‹¥"ð¦@!èãfŒSJnä±fÓ­ Ÿ"Í0X-².奾6æú®®n·OÙÂ#NçŸ\£d³Ýö<Ç}~>£)áSÇúyåîéÓ[FK款¾vаâ,NuLRŸŽþà[Ü ólçF„B$Ò⯈‹³võbÚ’)¨ûÊ°õ¹À¬dÿæÑØq—‡|Âs2äO9[¼B2­Š÷M^¿Îð¸ÍØaù豿þÜÆð‡{æ£ æèæëîsŸf¦Óª›†Uw›|ñ‰«“ÃI«Æó9JuM¥tð¹p,eEû¹Ùô›ß2Á©ß«9ÿÒm1ß‘8Û×ÐpõÈ¿˜y ++2mp½[Ò4Zƒ‡ïî PJv÷s]PkUâñ±üâÑûº[æwŸÁz¡uÞê’É~‰yù7Ël>ù‡ì6q +endstream endobj 1548 0 obj <> endobj 1549 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1550 0 obj <>stream +hÞÔTÛnÓ@}÷WŒòdÓx»7¯½ªx©Û¦¤¹&HP„¬d"¥²*ø þ’Yß  qJâYÏNÎÜÎ ƒ•sxzÃ`U:J@H#‘A¡0ÎÒy–:‡' ¤K‡q øAÁ¢èBA åÞ9Q•¨KçŽO(¥Ò{çµ;O ŒÇp]x,"‘»]ÙÝÝ:_Á$¯L±ÌæÆ{“ž£+Ѹ +ˆà3ÂTéqƒ({lö€ý²ð|Ɖt׈ÉvW­sSÖ`qêRcFŠ +Zk 2²HunŠ“Pu÷˜4áò«{¬‰-‰¨/1ç¾"º®ƒ¼”Q—¾Œó.F´1fež¯Hè¾x¿È쉻•Y4X[©ÝÜ#Ûš]´FÅü]kÄIY€¹ +Åí — e¨ñÿ×xD¬bÛÜ,vó +f^æš²lýmóÖ¶¦®µÅæ\…]µ¥ü¶“ŸiíùÖZûœ²æ€§ˆr:ùó⟛þ¿àý«í ³£]ïDÏBÖ²ðφ:Úl Y¯®¡%·ÇŒ%$¦48œÂòíƒÇ*Í‚t“ÙÎVÈëÙR¸Súu“¦¼YšhÕLš=h* ‰û†ra3¥]’€ ¥‡=…YÞßTYQÍÖY²ÛÔžšüÖÌ&£Óø’ñÁ­w´G}jù¸EŸÅh?~þ6‰on]ÄìlÓ'ùi] þ4CíGS Ÿ 6Â`'éd<šP?JاD;@\^WL“Ýó´—Öo ˆÛ€Î®’É««Ët„ú)*hýýëñÛ [!Ÿ’¨~¢>²j{hžÏ1"$Z@Ô±!þÇ_Œ)Î}X¨}”?ÆFòØz!={ò¦BÛ]‘=úÔÑý‹íïše +endstream endobj 1551 0 obj <> endobj 1552 0 obj <> endobj 1553 0 obj <> endobj 1554 0 obj <> endobj 1555 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1556 0 obj <>stream +hÞÔWÝnÛ6vé§à%ÕÖ ÿDQèU—ÆE‡ëZo–ìBµe[ƒ-y’²4}í%v³gÜ9$õç$]W`†!e‘ç÷;ß9d;;{ñVm33Š$Üm QœÔùl3ûr9;["Èr3’pøƒEØ„¥–$Š3.Éò0ã …q ¿-W³9ãœ+²¼™]ÒW 3KÎÏÎ?&¯ëHXfiµ­³Ã¡(·äeÙæõ&[åÑO˯fË‚v(ãÌvd†òf¤ÎŠ”À)m;å¨SÊN»Œƒö¬iI47,¡ß×î$móµß×”–‹i8öu8T¯váô+q4ÊH|Úÿˆ?%:IáþkØ‚¬ºòoÖ׫–|%– š‘MÐW•AÆ¹Í Ü•Ò$dùÜÙ¯õiÿ "M£¹eš¦sÉ…ßÆ$2ÌPBºõÓ—ÿüèÿWxÿˆ¹S ˜9ÞåNõ(…ÿ®©Ïö{ò¦Ø\w$Œ y“7yÍâí×H*ø1_³“"K¤+2}§Ø¡±Ì`‰eŠUn ‡£I´ü%þ2 ‚BæÈ (xîË÷‡G¤„ãI*ÀµÍaïÞÀ‹`‹‘²»Ö=oÐ ¤ðŒ<äÞ~;Ò§östÆ–? 3Nõý:!DR»ÈÀ‚Æñ$P ã"Mú²•.:È~çÕáXçM“¯É¢ØçäMuÝeÞ`àzN¨•kd:Q1 +íI.w99ÏÖy œ "Ræ…«P1\‚ œÜgéO<9¢o Q±'zD`òªx4­hø‘ ½%ïW»¬Üæd)Aà4ÅW’à?ÍZ_B°$•—v…1¸Š |`rMŽÀÂ"9-ÖyCZ•3i†«\¹öBÀãM¤$R'(FÝïA äŽÞ`©CD‡CHÄÞª¹´ÌhäWѳ+—Sv¥Õ1/QPV®Éj_5¸_ i{uáÂg˜##ŠN½• ²ü6‘ÐP– BM [M>XعËÓx$ê„1 ò9¹FÍEÙ´8RmH Að‰d8Ó:H¥zƒÎL°¥üê®Ï%vñ€%àâMÑû©–v +èã’Oå²xâ…îpê²F§Û`¤÷ÉÅ.Çwm¸ v±ÜDÙ 2 }À³½Þg5Árêc,}Œ-õA=[$a<ÀÂõRÕO)}˜¾x ül2:?¸E÷ùæÅÅñ›\`æ›aêT…š²àg9©“à¡?ì4:¦ï³ÃqŸ2¥qÕÐ0åGœQ +ßqˆää>û°ßû»ÉX¡ÿNŒÛ¡”Ù ÈGÝ;r‚¤û[€JÒ¾­„ú÷´„ˆ—’MIÊ×F„qŒ. Ñ(ÝHÿÈôÏ1ä€1t}j$’[ÝèUôÔãX܃céF ða—Kú ' èÛëC^¶ÍÔ*È dJÅ^N=o?@dŠý´ÅL¤ãº™Ã!ø`­¥oùªØ®åãŠq "îÙI`æ^ðØŽQ ªõÔ ÉÌiI`€LoIª-Y²ƒñ%÷oú* S÷NÁ4Ò9àkØ jÜ–î>|‚êÑ}ÕMPÎÚûÛfW]ï×äŸ&àó'Áé8ÐOœBöãÜÏ7ÅîoŸ¹¸áÓ¦NÈ,uî:¹¡Ø ]ßf‘HãbqÛ…=îðhä‰æ·ú÷)Q2;`ÐAƒ‘)ï²±£vëq8´‰PÉçwF› †N1Ü÷’ºûwà52 jŽ}¢¡Œùˆ@»Y·k•>Ç8c:W^ò{>áeÇÊÀ‰´h:ÊÅ'G»¸AêU@¼X÷žÏa ã·Šiÿø—° +endstream endobj 1557 0 obj <> endobj 1558 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1559 0 obj <>stream +hÞÔVÛnÛF}×WL ck½»$—$R?¤Š¸MÃQZ –QÐÒÒa+‘Â’Š“ý‰$?Ñ¿ìÌî’²d§èKQ~àz/3gÎœ™‘€›ÑÑóWnÚ‘Š åÄ™‚ˆƒÑ£rôõttt*@À´ ÿð#²”å¤g\Ât5âh…ñ÷¦óјqÎ#˜ÞŽ.ƒ'§° &G“ƒ87¡ÈX47¦X­ªúÎêN›²˜ëðjú ºŠœ+ɲÆ‚ •ÀôÙˆ J2M A–­áI³Zݶz§ÕRÃE³éªZ·áô—ÑÉt”Ä9Æ£X¢€É(Ïs`qÆyì"S’¥ª?Ç™ŒwΑ"$²‡ñÀGnYÈ㬞b–²^&>ú¢í +–¯×‹‚V2èôÂ- ¢oÔ!Kí;ÉÌßøKÒ}¹H±ˆ”¤dì6n¥qšãûs\¢-Ó¸“ÅfÞÁaš1ho²õþšÚ;ÃÄXÚ9Q-¥J‰kÂÇûyüDž‡ãŒÅA>–\¸e¡b*è¿ÿüóŸ_ýÿþ¥ÜE)”9Þç.T(¼ +ÿ]¨O—K¸¨nP®)‰;(Æ.t«M8ŽHooCá¦^0‹+Ó×V*mm)ì(Ólð¢JÕFcu™R”ܶ‚Wïë®xGE4J÷!˜øê‹c’Á?¿ü¥ö™´ ÔØ£íŽÌPSÁsBlDNÏ^œ<ž…%&‡òºÍ Ãñˆûx[‘yVtÅiª±òþ<¸‡4óñbP1a7u ×ÅQŒÌÍêO»‚!µàÁCñ‰¡Ž¨MQ€÷ wO­$}áûeJ%‚—ü”.wâÜÔ¹ÁõºFJ”Á5îó_Û!£ýï¿Üì ë +endstream endobj 1560 0 obj <> endobj 1561 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1562 0 obj <>stream +hÞÔTKÓ@ ¾Ï¯ðqF«xç•yhOP¶Òª.]U;-Em²JR8íâ_âÉ£œ¸ „r°Çvl~)8°Û×:æ xÀFB›Øž½¬ØíR‚jÏ”I<ÆÞH”ª3“ä¥%YµeJ) TßÙš¿»_B‰·‹›xh… +xsh7çó±>À›ºOí~³Mâsõ–B™1”Æ¡P¨\ Õ+–êì:3*{/šóS›º.í`y<%X5—þX§NT_Ù}ÅœFï‘ÃÒjc´AJ;bàJBŒÚþ¢¤‚d3( ðµq(BRÚ0cϵžÁër¿éz…CÏ?>í6™Ó¼O»‘c¦‘×K>™½ŸŒÚí—ÉHTªRÊ8ÚŽBO"o}¤ÿˆ%_m3jv—mŸ„¨xš\vS¼¦ž‚Q_†ªË\i­Ï¥Îù[û{€ŠQ-…–jdK˜éŸ“núÿ:¿>sïŒG•;'çÞ™ëªi +ÿnª/N'X4®>·P4Œ¬R—ZQ˜> endobj 1564 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1565 0 obj <>stream +hÞÔTKoÓ@¾ï¯˜£W•'ûò>Žmh*HUj¸ Q¼1®»²]øMüKfýˆ'.!fvfüÍ~óX 5Û<C¬`ל#ì»×±iãÀËgv_²Ââc±°€J‡ÂÌ̬BgW?QFe~ñSERAôä$Æ×z„© +ÈiüJ>qVje¯Š…ýaç]öñ¥:$Mec¬fš$CÖr,²%ìÃÔ¿.Aj–B<—ÚªtPf6z29ãýÿH*aõÝì©^#|âΣÌâ9,ùºvIF™Ê.R©•².Õ:Ýߘßûød<÷h²+!gµnÑf«üsñÏCÿ_ðë1õN;”©sbí¾N¡\¦ðï^õö|†}SÓ¸º4Ü\Ò0°Cìy®Ó¼}ãJ“1V8ݘ6sÙ-§¦Ý²ô¢LËõS€Š0é» +endstream endobj 1566 0 obj <> endobj 1567 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1568 0 obj <>stream +hÞÔX]ÛÆ}ׯ˜G2±fç‹2o‰í Z¤ë( +gQÐ¥e"‘ +Ie½hóƒò’ߘsg†I­k£@Q»)rx?Î=÷Ü¡$Û-n¾üF²]·H5³"c&K™¬-ÛÅ«ÅÍ­d’­¶ ©˜À2³<ϘՂ ÅV‡…€. ®­Ö‹%Bh¶zX¼‰¾zyËž±ç7Ï?ý”½jc™ñ,jvmq8TõŽý¥îËv[¬Ëønõ×ÅËÕP:uaÈl†öaä.Šœa•ÉçäS©Á»J‚÷¢ëY¼L¹¾=n +:SQ_nü «è˜GuÌ“(,û[XÔ®ïÃ"åB&ñRêTÑeüÅ—¬±9ž…SØjgsZ÷ì»Øf\Fe0ÙMœ—¶`xV©Ô²Õ ¿1sc2‡·Œ›(_*!ýiÂ┧cÃñãÿ÷¥^ãç¯T;m¹¤Ê‰¡vúÌBXø¿ õóýž½®v «%rÇdìØë²+Ûx©‰o¿ÄJãb¹á³&³Ê5YŠŽ¾jv4 µ‰Ê©ËÓT Í&(CAÉEY¼ú‘,þ ›#£©¤ dxéÛ÷ûOXå6Wt&oKœ»;¸bI•š^„;”É2c’¹»ùLòì¿ñ™dâ=>“Ü<í)ãÁ‚6H OêZëÀ!ñ»­ö%{ÞŽE[uèüoûj_õÛYÑ.ÂJ® ]ÿ'Á¤—´hukŦ¬¡˜0‘s_&:JàaÈkPäs~§•#ñ6À$›ù‘ª_Uo¡Ñ:*@e£GöòÝú¾¨w%»µŒ n&¢[*:à3*zö¥ùC €Vë&-7Iri ‘žåÌ?G¥L a¿ÄK°¸Ú”ë‘Û6Ö +WÉ.ï÷X%ðýfÅÉC‡5ʺ5øh}.’1 é¨<«(igp«¼Ûµ«”Zq‘IªÐêbi È9Ꮇy™{šàÐsgnðñÔ—=¤ç±Þ—Û þ«íöý6饼f`LÐyÏã!–4.Ʀe/†PYQo€ö€´-¼Ç†zß"•ÞgDÞTQ´QÙ:ö¶„7HeYS^(–Þ: È4!I‡©ÖÓ/ÊuqêJ&Ev‰ÓGˆrúéi9¶A‡F’³þ]jÖOrz§ cÝ…E9W"ØwŽWQèVwÝ@௔×tâ´ƒìyؤ—·£ñ¥ÁPÒâ"ÆÇ ÏüxŽ·(+g<¿VŽþÞëDéFÁh¸È˜öL“–|®Ç¸öà…¿ˆ¸ÇŽ¹ý ¥×vL4 }ë +ž‰äI%E»9´Y±^Ÿ°G !(ÈM­Y³}Z•í˜-O ¨/¼ÕØ1Oû¾£4rÓ׳yIÛF;él-.}Ýôåglæ47sqÂY*Âvý€’Þך;ÄNâc|àE²;–ë*€0OTŽZPŽü/Aïÿòðž—ƒÈ6šYGëª+6.7׆íÙ®gÑ36mrsñ<ˆVUÓõëâPʉ5 !3nŠÑKË3×9Ãäz*>Æ‹q57>æØ5tFþ‰´§:õŸoîÔü9ÌÂ}Õá @ÒnÔÐpáî©ÁÍ–=Ï5âj‡JÀ¹¢Á}ØžøÊW0 '…Sfj·tž?Ô£€ÛŸð-Ò9-Úm¦~·i®t¬’©ºxT¿y¬ûâtµRóáE'¨”29×aªß¥S߇îå•ÓÀ§ý”ò‹þEŒeÿÆ*Fû•M‡èê*±‡‹ ¿—ؽïé'Žˆ +MGé9‡r[c¯ÆÆÙæ2,ÅñAêã|UëŸPß;_ZT7þ|¡%Õ®†¥Qùªª_¾ëÛânX:¹ûºy îFvîïÂ0Fç¦ñ +endstream endobj 1569 0 obj <> endobj 1570 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1571 0 obj <>stream +hÞÔXkÛ¸ýî_A`¿H]˜I=ƒ¢À4EŠÝl0qú@ЊMϨµ%W’; ¨ÿ²çò¡çdZ,PE‚±,Jäá=çž{iÁî6/~ø(Ø]·IË¢œÅyÊTÄZ½9n~»Û¼x+˜`»ãFHá>Džñ"g™Šx$Ù0 bÜÛí7[E‘b»‡ÍçàÇ7oYÂsöêÅ«ï¿gÚPä<š»¶<Ÿ«úŽ½«{Ý˽ÿ¼û–Rv)ų,a[ÁEš°Ýk;eB“ãB&ãÜo«“f¯šó¥lí< ª®©Ù§¾:Uý£™ôÍn“Äv–ò$e\ª¢(ó(ŠíSɳÔcó\ƳqĆB£Ì ö>D¦0ñ(ã܇ Jéã0`-»ž…Û”gÁ§Ë¡¤+ôú`/XEŸEP‡Ø€{ì'÷P»¿wIû‰[U©¤/2q7q+‹³ïÀ%æj;r¸î{öû0˹´›²së!Rv1PdbQÌ¥L3ô8^2úO&Š"Üæ<Š­Œ„½LX˜ò4`ÌþçÿóGÿ'¾w*゘‹¯]y§±)% x2摳$Fãb²v2b<éãÿ—¢IxQ$m† ‘Zqg”ü9¸º¢(¢ˆ+DKáï2XPêܬ1‚muW7­þPÕo¾öm9C“hèS44œ¦.tïÌ»HQP"aR¤éãbyôÉ*_¸—K}{ÚÇ‚÷3<€ø±Ñõe¯1°ª6,\ðY—gMp„»#ÑÚ,(x¦V-ˆtªLJFÞ¤Ü}Y[õ~Ñ`\Øý® šˆy&“%³>? ª½ï^2ê^нF_cr5ÄÛ ˆ’¦+X¨š¼%Y2O´méºmÞÓçl©bŠ)0ŃÒUšçgB…~&`fƒSè©>)QäŠÏÛŸÿ°Èº|AÚà'(32‡E©dÅN<8ž“Ý,’)ò,°,ϸ³eúÀ5UÔŠZË[2ü4wÎEÍl„0ó›K&•ÊÁJ Á6jé:í›qaÞÄÔîbA¸P<å3öA+.õy/z_+Gé±jÑ•RÝ´ƒêSºÂd—Õ6€²œŽÈä³È”G¦¦È¸pœiËq”‹¾‘‘ŸƒIi|¨úûÉ>ýæòas“ +gË +1vïÁÌþÁ¶ðáÙîp`(¹í6•Ä9)bÜÔ$-{ e„2 Ð+Ä}ãw•äO8—/ŽNdTÿHd62æMÜšU¹$Á:<˜Ý›KS-)H¼•­ EY2ŠoZ,63áIÞz6×Þëà[2˜;³ýF¨<øùÚ_®½óÝ]O¸FŸA_}¤P÷Äʻܤ“PC¢“ ô0”[ÀÈWÑ쬸st­ÈA+±O΂§y2Í븘v ¯µ©õiPýËå©6OfCjÍn¹}Š!6’®êÇP>ŠÛb·oµ-:ecÉxdÓÄ|Âè¥D†,*k2rK*=´b4™µJƒîÆ P2'ÃÙ¡oEcŠ“'5®¨6£6ÖR$ƒ +†ÚõC©ê^{šeþ„£yÁØÞ+FÿG¡Ö‡ +UÂ:=CðåÀ¾ Ó0öˆ~–¿n¹¶BðLL˜ŒþmÏ•.¹»‹€¹îÊ—)ÒÒSüe^s.E­Þ ‡ªÕ{ƒ‚‡Ð=†Eaú´…•™qÚáý"N f¹¦ž_ƒú)¼D˜9P9ÿI'Œ™™qöŸP§ð}Ÿµ_âÅÅem[ªºãf%9åãÒ’Q¯Å²½™J÷o×jÿ×;jáÆF”À—ûó;¾å1:еPu‹©—Žk}yâÄVÏ‘jŽlÔ.©ÀÜn(j™=º]tkRtPNË£î$sŽ\˜înmU¾p–öH!íÄyÐõ(.“n$7îçµãOÒŠ~µ3‡is…ó´ŒINtžeNFo¾–çË)Œf"šÈ¥0oÏÊrßÝ›“Õ™ÆÖžÓ©¡V,¨ŽéP¸þJ?Xa'Xys¡Z±¡=ƒ$ÔÒL•vbkŒ}ÚfatÓÎ|Ó`2J~éÉëó˜ö†‡$8šfÈ°] m^-ŽcpåÚí7áÚèþT)õ&^:à»´0 +^¤ö÷GºÈ3&r´M’„kÈ”jBæwDE]†ipÖCIíìü¸kS´¿/{ö M_r¾à6Z÷Sùa0¡BE»þµÁ$ð§ÖÈ<±û~cäz໦‘Ç€éåOUGì\ë"uƒ»‡µÔ´ô±Á]r‹cHn£¥™é ˆ­›žî;¸‚îs¿BpC3¼$¢oþôæϲŸûøáæÕ»÷?0ÿâŸÄN§Ï{­Oº_a ·añ‰¾­H³ÉÆÁŸÍŒéû—"¿–– +endstream endobj 1572 0 obj <> endobj 1573 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1574 0 obj <>stream +hÞÔUmkÛ0þî_q°/ö†UI~‘]Æ uÝ&#/£t ë&VRÄ ±·ÒŸ´¹S'k÷B¿Œ1Ñé¹»GºG'™ÁÂ:¹3XÔVè øQ…­²æÖ™´N.0s‹q øÃE‚ÄÊA®,Š,„úˆÉ™åJ©òÞú`÷Ó HÉIòê\m‘È^/¶ùjUV èUÚÎó™r>Ê·¸”g–òˆ¸Œ°0yn(MŽŽÜåRA²^mò­ã2N»¬×LšrY6;ÒTZ!'"ÄÚB„@¸Ç1?¢Ô7Uî +ß9±vÂýGN”Fx;'–~&ÞÉ:ý¨UAï”óV†ÃVóºÇ ‰°'›"×·UJ=Ævåàþ÷aƒ}Ðvv·âf¤,ÀJ½ë  Ⱦˆ1ÿ +MäÚ®§ø2kàÚa¶ÚSÖûõP(³žÐN*ª%ç<­æ¾ÿô@¿‹cLjoÇ.§Ì˜8! m€v|þðÏCÿ_òÃTŸ'Ó'GÛ³ó]Èö]øw·ÚY.!+Ø®B7·Ã°kÈT­ðjzºß¾:ÜCP¤½˜û»%øîn…ø´^)¹y b‡æ¦i# +A<ÿøìPîéJ©)ò5ô;Ó4spGÙ ôÓá¥ìÊn–Ž»£þ¹F)ñƒc·4Ô‚=+/6JË—?…zÃÞ`2H&8¼ï!z.»€ÏÑ1áEr—W …®òå}þPÃl]5yYÕÐ z¿†ºÉµRUSŸBs§ F¸… ¯¡ÄÿÍFåoqVÁ± Ú–1Ç‘‘%†¨9äUaˆö,šïG"Ã2G³8Yª9ù…2I·3¼Lµ§t’l¤è ¯?Aš¾ÓŒ§ƒ¢©Ì¦pSÈbzH³]×uägÃðæ)CÒïŒÇŒ²RÍpä;!üˆ¯SªÀmý–s”õ.{C¸µu iøÖùCòèl WÕÁÓÔ?VàaŠ™ çŒï¶…¿ 0¶´—Õ +endstream endobj 1575 0 obj <> endobj 1576 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1577 0 obj <>stream +hÞÔTKoÔ@ ¾Ï¯ð1£*Þy?Žté"HUI{A¢ÝliU@ü$þ%žL²ˆžz©ÊÁž±óÙþl„–­Þ}–ÐÌið"€ ´€¾a{v]±ÕF‚„jϤA <Æ^  +ª#„‚ÂÐ]µe% +!4T?Ø—âãÍ,X¯ÖWWpÛs0綯ÇîÔÂûÓØôûzÛð¯Õ +¥s(Þ[(%Jg¡z›!m'EÙ?Ø›îÐÀú||ª{^J…¶è†ó îÇîÐ?'ЛŠY©2‡Ö*c4A“kt +½[ìT<*ó—¸IÔèÉHµ_˜‰ÈhÂBCJU©…‡K®õ0/úâþiW'Mc³Ë +tIÆâÄ©€ÙíÓìÔog'•¥–JÕN¥ƒ²ù’lÒéÿ[R «?gËîÛv„îÊ¢™!‡91•ƒQ‹&®Dâ\)çÒyÞÑ_ cäe@SÄR ™U Ü¡+ùrñÏ]ÿ_ðË1õN{”©sbé¾L¡œ§ðuS}s8À]×Ò¸ú4Ü\Ò0p× í¦Nóö+M—Í—ÍœwË«i·½-Órý`{9ëœ +endstream endobj 1578 0 obj <> endobj 1579 0 obj <> endobj 1580 0 obj <> endobj 1581 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1582 0 obj <>stream +hÞÔVÛnÛFúȯ$/\Zï…—eSH»p᦮ËÔvhq)±H•¤*ç“úÒoì ¹”dÕj‚EQஸggÎ\ö,%̼Óo’0k½HC, &- ±^á}“z§$¤…'üá M̱\(H—ž@+\ø.z.„Ðn¼;ÿêüBnàìôìÕ+¸n˜4Üøõ¬É–˲šÁeÕ٦Ȧ–}H¿óÎS‰õ4¤Ù£¡IÏ"DftN>•½«ÐyÏÚØ$â±ÿ~•g4S~góa%‰_1úö½5Ó¹©a2d©#ET8¼Ôø*â÷_ãm5õ°’¯§üÌbÃ¥oÉÖù«+ç Ó‡-÷*žíùÁa™$lbxà'%ä0 E<òÆñó‡ÿúÿ5¾ýKµÓ1—T91ÖNo»Pº.üw©¾Y,জa»ÆÔÜLb3¶pc[Û°‰¦~û)/mÎY¬úCá‰þËaÇHÇ ‡wã)"16A + +ÎÃÒ_Èâ¯h³2‚´ O†ã{{ÂãDqlgò6Áy¿‚ ŽK¤Ô¸m<ô­P$Hõ«?îù óO|†Fñ&Áó>1E*è3ƒ‘±“@.$îÀÄPåeŸ¿›å¶¬Êá¶)Qìàü1[®¶¥ÌmEm§­ä=œÑQ«ÁÐOé¼l![­l•—0­«.+«,C9ŽýG6áÚ\@]@7·p†*§± *K£V>Ã5ÙÉø¶°½+­%Ì!3å˜Ñ¤ïô«ò%^¡ÄgÔ} +;ò#ܱ¼*Ú]n®¾×M=cR &7,ÆgÆð±Ï[o‡®A)5‡I’ìßlǘ&Ø^°ŸCv‡ßV§'ïøÞR®$²åhKºRSÈ[öEÙŒ¢î"âa<T‚‘úÞ'A¢iý)92ÐÒ5Þ}«lf©ø¥I ãŠ5~c˜Á éÃä6÷áØjæ™ÜÓWE8|U æÒTK©L¸A¥·i½ó_–En †’z{ùN«ÝÍRáßbÕd³%"2ØdMEß/÷~^¶Ù×´3ˆMtÏú­é‰ç¿¤#ZP½Ðª¨TÒY*«éb;r _µ]^Ö|þõsŸât9ÑþÁzY#ÂfËãˆe¶XÔÓ=W=§ÑUQåÅñøñî)+„ E2·®Jä¾ç^´–â|à7e•×›ö)¿!E˜»S”캜ÃÉéó!¼XØ¢êÎç«Õ‹ã¨Í ·Ÿ@•oíÃzö)Ðy5m>®:üXås|ý÷à÷]¹Ø|šdÂrÛ"[/ºwÙÒÞIe>¼~&ÛØÖÝ]Ó±è…È¿¸¼:?¢^w¯Ýuü§*v±‹ +endstream endobj 1583 0 obj <> endobj 1584 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1585 0 obj <>stream +hÞÔVmOÛHþž_1‡t•Mɲ~·áZ)%Ñã%¦=©>UÆ^·‰­zèÔtÿòfü‚!Q¿œNv=;óÌÌ3/ ÁÝàðlªÁ]9° p¸ ¦kƒÁAŠA:x O5Ð HšñÐ\‡y.8g\‡`1àˆÂ¸‰²  çÜ€àÛà“rែÅ\89Üã—Ja¾ÜbÔˆ4nðåéöÒ: šHÔ˜ŠêŠ¼Ìªì>«BE«›÷øEàöчóü\ÂÞ Æ5|ÛFyt”G Qo„Pí‘Ü­Š§ú³¨‹”âj^…µU¯2ô¸|:ñcÿttCË%èWRÌKZ’³ž'rRž‰\ÈÿûQ_gþ¥?‘/Ü÷ö5› ÿêý#À@˜¿- +endstream endobj 1586 0 obj <> endobj 1587 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1588 0 obj <>stream +hÞÔVÛnÛF}×W !ck½\Þí6€ãІZGR(Ú­Qõ‘– +‰H:iPäƒú—Ý%%K¦«M[”zàj¸sΙËiÀ¤ur50`R´\êå9`RÈy+i½ŽZ'—%-ƒÅÞ Ï%¾®I eÍZQµÐZmB)5!úÜúE».Á&\œ\A?× xÚ|’dzYšM “•àCË«!Ä2Vg‚Ù•Ú¸(Ao;ÄÕnãX¬˜Vò±Z@*î¾–éÄÖªmo«MùèCµ‰©;5l Õt˜øÃle&×r}ôïã±ò¹z2~•p«»14^Aß<«È°H2UTd1Ç­ÓnY›5ý ß×Û±4¿Í¨¡–6è& ¾?ÿöŸoýÿ‚/ÿŠÚ™.1Dåh];sÙ…FÕ…ÿ¬ÔóéÂt‚íêŠæÖ lÆÏhÁñlš¢ß>éÌD#“ú`VgËeòl98]–ƒ'Š˜>ñuÒÄw;®KLk5y(3E¤´2M`¨éŽö)Û¯¦ÚºÓÖNêãlG0ž—)/öi¦~Øë£=£;8xšWá3Ï‘4…ïžA +ß©Ò }ÉŸ=Ì_’‹v–ü¸õèèÙ݃FûZÇà…ŠªÏ8*Ø·îè½è݇Ù{žWîû}OôT kû+ÂÂ/¿ ¨Øªè6ž>ìNQñ9-GÖDUKøG_µû–Šá5Š /§Jšé ƒóë¦Z?ÕòzŸóø#šÏvuš‰:Ý(¸ +BÁµ coºA3Ý +;Ý«oÙ»fªw7½(|hÿÆ”ÝfÊîÍÛ×*—›ê+ü[³?Dëeœxã0oœta0è _ÔÝ‹@¼£$¿:PkÃ<ç…ìáuÓ, ‡àuüE¸ärÂ+ [†ðs*bU@"ã{ S€k´Ÿßaa‹UŒBªÈ›d˜ +øGsukY)ö^‰½—bѾxÈG¥¨‰ÃmBlý9÷§ç‡w +endstream endobj 1589 0 obj <> endobj 1590 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1591 0 obj <>stream +hÞÔWënâFþÏSEŠd70ñÝ8´•²Ä‰¨ p²Ú†üpÁ&NÀF¶Ù…®öö-{ŽÇ&\B +‰¢ªÄÒŒ¿3óûx"ètzÕ“a”” L© +ZÕU‚Ø+ù¥ONéôR¿$+ árÕdVLUb’Τ$! “4ÄœA©Â$IRÁùVºšö%è¬ +õÓúÉ tbQ®²ªbw2 Â4ÂÔ‹}wà‰÷ΨJ媦ê:Td&:8œÒ rœ(Æ3w×s‡^ n8„ϱX‘MfR‚=w'Ó±—d¼¶SÒ5 3˜nST˲€iUIÒ¸›†ÂL££ÿLÑÖ䊎š Ñýep¬,$ P«‘ k¥…¢çæºI +bÅ`¦p3º4S„Ôò 4ZB(2]È—]ç‹âÁC¾Há£$ëè«j(ô¢è4È}Í´p§ÈG\2œ R¸Í*“/§Lr}Q˜+Ã,e±’(ìŠb˜EÜ5m3©?A¶,±Reš`UIæSD£PŒûÿùÒÿ/ùò•r§šL¦ÌIEîÔeÊy~¬©çã1tƒ–«IÅ-ÊXŒ 6iâasªTo_EEEв¢3óÞ2•¬· <^–'ã(ü<°˜eðN£ ®6L“©ÚóÑ#)*y*NBfŸøÓ8S¿/øÑ,-ÃQŽwíº}Ž}zú"ÎI²|­õûáQù¹'t:€.¶Øóß×À­ü>ö|„ƒÛÀ=;›ûBP†Ç¾X΄( 9.ž…™ç—ýy^ã] +û" +j/’ûQŒ¾>Âo Õà~EĹNÎ&h¼!… RöE\yr‚Qù¾ËÞ$é˜!Ž+/š œQàù2ű¶k Ñ’-7G^šïÏ> endobj 1593 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1594 0 obj <>stream +hÞÔVënâFþÏSEZÉΆÉx|g¥J,ñnh Dà%MKXfLÜ‚A¶“½T} ¾eÏñ˜KØd›„VU¤sæ\¾s± ˜5Nß ˜ Ç—{`y˜rÙHoÃÆé; “†!€ã?.†ç2ß×äŒ  ŽZ· ãF“qÎM?6~ÖzÁ;°™ÓÎë×p™ë†Ç¨ ãr‡ü¤üK€ÉóÍQ +endstream endobj 1595 0 obj <> endobj 1596 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1597 0 obj <>stream +hÞÔVkoâFýί¸ŠÉNÂÄ¿¡­”/¥b#ÞM«u?¸0oÁF¶aƒªþ þËÞë°mh6bUÕ‰äñ™ãsßcT[·ý‰ +aÖ25°tÛMT´æ­ï½ÖíTðæ-•ƒ‚xSm‹96XšÂÞª¥  +Stļi«ÍEÑÀûÔú Ý7`0z·½ëk¥²j3[JÂ4X­¢8„Aœ‹tL…ü‹÷#šÒJSœi†m•©¦Þ})i’8.¸¹×‹`&Râ<¦r[µ˜)E( îS°Z/EVèº^ËÐ Îd† ŒkŽãÓmEÑË0MÎ,³ÞÇø×ö1=”­ØÄð›ä8EJÀMÝ®3AÞr^§‚•»A–ƒÜ6™%½[ÏZq)³rÝ)–™!U´·).*/ïŠj`¬šÉé%hSøºåàû#\¢Vš”;³Í4‡÷²e3U•dVÙKâÊV©È•BiçÜ´ê¼ëúçEýTÇ‘Û6Ó%§Íµ\ ›˜}€úþòÛNýÿŠ7T;Íb*UN©k§5]¨V]øu]½[.a…Ø®5·¬b3f8¤™ÀáԨ߶2×3VOf5[/fËÄã¥9y<—çóœ4Z Û´,¦éû£GáEªÔAâ5—MiFq>÷¥y²Éoà‚ోxÏ_‚Ë9ýûr³Æzìú~|q³ŸƒŽžûZd³ZÀvìDÚþn)æÑ{„£`¼YŠìtž–¾äË7°ÅC^EB´äíJ^aλúb+‹Z)x¾Ü=´“Š|ƒŒ4nP…²(ý!{é ¢rÑ$øƒ´M¢¬é­¼/’•ÈÓ/‘Éâ ñEùtÃ|Ð;‚fú¨wð×ÁÊÛQ ´A#ñ7­²¦A&ʨèõÞ2 ™Ûy~PçGÇ á½áÝd—\œðú +› *]?ôáN(rr#«üî>¯øk*‚ߺχU‹'Â_U¹1¼ûÙSlt^"~¦ Ÿ¾BˆOS±ÎGáƒÈ_­ûSÏy£þƒë½øFœÕÁ·QbÝO þ¨úK€äœT‰ +endstream endobj 1598 0 obj <> endobj 1599 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1600 0 obj <>stream +hÞÔVÛnÛF}çW  +iM.ïQÀ±ÇAZ 2Û °üÀJ+‰®D $ÝÚúAýËÎp—Ô¥¶$;6ŠÒ.ÏÎÎœ¹í®cíðìÒ‚q®y6øfNàmB&´‘ö>Ò?X`A4Ò,&þàË +|àÛ&39D3ÍD-Ìt‹Z‹™¦iCô§v¥î|—prxÒh@73¬€ú|œÅ³Y’Žá<-D6Š¸Ž>¡)[šâÌv]hYÌò\ˆN¥J”ã€{KÝ=Eq:„/™Ñ²|æé ª„Î]<[LE^êíDšÇ™ï¡{s=`Üؘ¦#-}/'Ñ}ƵIŒ Øå$z_Ç&,#N:A"Ëy î*¶q^€Ñò˜¯ÿ²Æ4âz!†r ½C=5˜«+±Ÿ”P6˜(!.ߦ墫¶Ç郻 É{Çq}‡¨+›Ë™áí €_ ?`–.”Ê\Ù›§Ê&© •IQçÜó«°;ÎfNÿ+Dksô°ÅMK]0< >@õÞÿõŸ‹þ•×Ÿ”;Ûgeάrg×Uh©*|]ªÇÓ)ô’1–«OÅmXXŒ9öh.°7mª·? n#(†¬jLÕ[>/{ËÃÝ¥Þx¢ˆËí d¡';(íù>³åÎcr›<5+'¡d¦õ3ó™@¸Èî[ï¦b”œPd‰Èß"üv,Š/É°˜ôõ¤oôö²!\Ú|NPý[&âߥ`ôÃúü ÎTVºq1éEËg"p$I?@’X"IRVrl?®m´È’´õõÑü¶h~ 'ºÇÑG8ؾvžA_¿A2fnÿ±d×z—ÞκsÔ›·Iü¦ÑèðíqEø$#RÕ°àèˆð 5¸üðð)íŽóTàŒ[‚h^lU½ôaåhåe_‡7cxCñ2LÐN»ßOšŠÀݹu]}Þ_Ý\o>bš‹—£³A溹 ÎN2=>õ”r<§NYgGIžÓiJe‰pYˆe‰0U¦*K’þ¾Ò<:½ãˆzåô™eJê#'±ZËRÝš¾Vˆÿ;wcÌ%¶Nœ4CÉC¸¹«4T<‰ŽZ¹3ÏÆéô‚è¼ÿJÿ¾Œ:]E±.ò;w—Eœ{\,‹ÙÉU•§´•ªÄbÅ{DIP,¶ú±oQöĠرGf(²ßIÊž]ˆ½ÎITæ}„¿„ãþQ}®ì%DÍ`\¦MØßR¶ Š«…“æ +ªÓB +?ÿ°¸øüõìâççœÒòòBœÔñÄÛ̦¦¼<#ðN³y¡)ï8É«\h*8%oûœD®×®žEx'ÿG€wÇX +endstream endobj 1601 0 obj <> endobj 1602 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1603 0 obj <>stream +hÞÔWmOÛHþž_1BB²d±×ïpE +¢T=ˆÀpª0:-ÎÆ'²ÚèÔÔy3ö:PJxëª ^?3;;óì3»‰ IkóàÄ„¤h¹x†¶ï‚e@.[£ÖnØÚ|o‚ á¨er0ð¦ï±ÀÏ2˜Á!œ´ ŒÂ ±0nu˜a„Ÿ[çÚÇÞ{p˜{›{0ÈuÓg¾6Mr1™Œ³úY)󑈥~~À¥¬z)Î,ÇŽÉL×p¿éRpp÷.ö±C™ƒÈ†ðg®wL¹ÚCBÌRYTq{a˱,ÎeŽ Œ[A³}ðë2]Î<·±cýŒÛßÙ‘bǪŒXþ’œ ¢$4Ú~ÃeËyCwTº¢(Aï¸ÌÓNgCA#®•rX`LÏ@ËtæhÊíå”ÇWʉ×OÃt°VËåôÂ]Rù¶àü1V>­-Ãy\™îùÌÔ¤ +Y¨õ¦™Z w©âÊ Ú9w½†wÛ~¸©ßÀ ½ã3[ :Ü0롺‹ì4Ï—?~¹ëÿ7øò•öÎò˜I;g4{g-Uh*þ·©vÓŽÇ ÊÕ#që&Š±À&-$6§Ez»Õ¹… ²¦3Uoy¼ê-—åɆ¼>¸u§Ñ½]Ïc–}wôÜ¢J¦H¨2SúÈ´wúvè0ÙÜ?£Y>ÎÊ‘6šÎË6¬Õ†HƒõÖÑ膑EÙZfÓt‘L³ÎΗs4]_´«•ÂßV.wðrîâüú"Ò·WOýºÚt™KqóøÔXR9Èéd@‹!<ÍúxHö¶VGTi‘¼#8Áé²Ì&˜D¸ÌDzØÚJd9h& *óH?Y‹bXÑK¸bxpôñÓÁÑ!ôÃÞ1ÂÝ°·öt iŽ»r ïÀ؆k¿Ÿ{g'›OT1.W ÇÆF¤?·;oÜ~ZM¤‚7I Î÷Y¬¤nÿˆ²ÛýDÿ> {ƒ*ݶ«<ŸÏhö<°“Räe] ½Ì±ÆßPÎÚ?À ‚Ÿ,ú¥?‹§T};¨%e„﫹‘2é·Ä8o–ðY¿Û(¥ÚˆH‡õBíe€4´ ¯†‹°X9"œ‰‰ü·XR}ú Yuûa?l" áºýÏjçŸ"z¾â¬á¯"¯¡ B ée´©*‰æ¦<Dutýª&»ŸVÓ`Mn¿¼¹¢ÆZÖHÚþ™¦Ê‘˜§åÖ«Ú=:8=iº › (»ÅL2bæ™hêº ¯Õ[34èŽ×ª7¼Æ-f˜Ü¤{|yÿŸk˜þ ›If™ØÛ4Ôk¾'ÒôRÄ7ˆ‡˜Ð_â6 §óËT­HžËvÕ§øUe_”æúuÿ~ô[C|%c´ßP´H‹›âš¬·âó˜8ˆ¯ rZì‡&Í»Y•~Ÿ +™Í˽Ëj¡×íF÷0ìvû‡ƒÓðÛªK÷i¯{'Uª|¾> endobj 1605 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1606 0 obj <>stream +hÞÔVÛnÛF}çWL i½\Þm$€,Ë{‘‹n€DE°¦V²ŠxIù þegx³%¸E;(*=ìîÙáÌ™³³Cš°ÒŽ/g&¬r͵Àã>ؾ ‡LiKí,ÒŽ/L0!Zj¦ŽLßcžÅm4Ž^·‹b­Ï8çDµ7ú/£ p˜Ããáóç0Í Óg¾¾]er³Y§+ÓBeK+ã÷è' eÕ¡³ú&3]¢óÚ¥KÎq"Ü;ßWJ.T2]À«Ìè›sõ5º„Ñr³KT^ùEš+˜çbz.s\` +‚˜ísn׉V¹W›˜>öÞ&ªCVµ‰ÙwÚ•"à¦í·BY!Z%„Ó°•yFßež~½[Hš ½P‹zk=5˜£7f¿6FY|Û‰z䦃©Z® …pkФìm/Àç§8E_Ù¶ÞY”q¿žÏL]5.ó&Þ6m‚á!URqR]×ke·íÃ3ýÌ 0ú>³õ /¸YO0\ ÿýðŸ›þwK:;Ëc&oÏÎêªÐlªðûR$ \­WX®·ab1æxGs…wÓ¢zû` Aµ`íÅlî–'ª»åbwéO‰º,pë›F´v=Yö]çá¢Ly›$TÌš ÜdJ¾?½+o‡ZÉù¾a,s‰ZfìHi*ÃámY oÞGŸvê¤z::zÀûr—­Ób9×—hÞ#üÙ`ÆãA8ž\GçáÅÅà +áÑ~\Áé|ž>ëÁ™”jnœþ½Û{¤÷¹NJ„‹ÝãÈ"ÕiÃ᫇Ø"þHÂaŠ,‰5ÂHü›ø†cä9 Ç ïYøšÄ}rm'eQsEX}+×ZÔûd~ýôdÃtûºN¾£® µ”eR|¥³Éåõ _îU•C)!̈ÍWÐ@ô‹½kM3UÐuÉRà §æ¡WVØ ,Ʊ aƒèúÊ™Ìè9ùéL­Öéðl®“òC™$7ˆË¸’ü­‚¸ñ6Å—}Œð­ÌŽ •Õ£sZ_S'tõsYH(s>?Ø•(¥“²(ó®suÄÈ&¾U Š:×ãVCWäÍÊ^ƒ³BfÅ Ã4æ: R;Ðr½„j«?¼üÐzõvò36€}É)T¥¼OôÉtÞ“¸ÒñVbR³Jã$Â=ƒëÂwòâÎ?+|ÿW'QUÞºïzT³C¹ÛO‹b Å ?2§²À/Íôvõä°=6¦Q†Ü;Û‚V™]Æ*I:³­uðí1ÊþËN«““´Ü u:·&Ô\G™^ïj_É 0O=äc +endstream endobj 1607 0 obj <> endobj 1608 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1609 0 obj <>stream +hÞÔ—[oÓ0€ßó+o £ží$N²±IcÄM›ÖÀV„¢6-AmZ9)[…øAüKŽ;Ý:6íÒhì۟Ͻ)ƒ‘µùºË`TXÂ…€†à…\ +2µ†Ö«ØÚÖâd†‡ðÒ+,2Q\c ͬ€YÏÁ…í +?¿Î(ʤœˆÀó•N(Võl¯ÑÝ å õN&©RõÅ©7?F|'ôríÄÅÚ‰S™¥y©°(_¯õÝ2‘­­‘Qçt¶þ¨ê‰› ±²tö>Ûü->Cù—ãwxæUI™J9•U™]õÚO'þ¦ŸÌôÜÜ‚çM5E»Ÿä(>㛃¢Á.Ц`—Wß· ­B¡øfý¯ZrGÙ÷5§ªù<Þ?«Ï]‰K¥c7[)z­âCã½ó›ìËV¨‹V¨ª ´në÷V«Šh;ôE«tÕP:kKõ~[zÿm!Ÿ–Çýþ|¶XOk¨p(6ħ´‡+ª©¦ûÐ.ǧú¸¾妉_ •rÂ#ßVRáVþe›ðE›ðå+Dk¾i~ð[sPë7<úÕâ&¤Oê%øßá·èpô +endstream endobj 1610 0 obj <> endobj 1611 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1612 0 obj <>stream +hÞÔWmÚFþî_1=é$»{ëõ{.‰D9$ÜFU©* ljÙ¦é©Êê¿ÌÌ®ÍÛ—Ë¥ªê“ÎëÙñ33Ï>3€ íòv`¤Ð\ <îƒí»`qÈc-Ñ~µËLÍÀño¦ï±ÀÏ⌠çGÆm´…#­É8焵_õnçæCû²}q½Ü0}æë‹IÍçi6WYçI4ŠßÂ1”¥B f94Mfº„× +Ò%p\wƒÝ£qœC”á}n4M¹zŠÐù+š/gq!q;¡æ +æ¹XžË˜°‚ fûœÛªPY»ÜÄò™°w6‘r°ä&V¿æ&Œ€›¶_AÉ +Q3!œ*Û¨(ÁhºÌÓZŽ#Z ½ŒÇj)Ý=3˜£Wno*§|ôGå$Ô›–j¹‚„«ŒUo{¾ßÃ%bå µ3^JøÙð|fêqYTñY IRʼnu!\¯¦Ý¶÷Ïô0ƒÀhúÌÖƒ¦à¦Z:`¸H>@}ÿòÛîúÿ_?ÒÙY3éäx}vÖZ…f¥Â7ÕÖlýt‚rõH܆‰b,°G‹{Ó"½ýi ñ˜ÕYõ–'do¹8]Öƒ' … \Õi´@o×ó˜eo&UÊë"Af¦㨌:y¾È‡úиڈܡr­)§OF8ÕÂïéI.ÑÃbÜ&¹bšÀPGȨùr'i+Ï£»gϲÕ<Ì#4>:¼Žÿÿ¾¤Ê)AÏEŽ@)¼~)< ˆö=LxEE¤kPLq§¾’<l“åˆ(¥‚Hë’÷_L–yš•ÉPO«²g!Úû­öëœ 8ŸÀõ;8ÃÍa§‡†á0;k«/Tf‚æTVÑ‹JÇ–ÍcÉàÐøz¢Œò’0¾>¢˜ˆ}(žU,éÃKe„\’âÙ ¤µf¶êFwq^TH;B:ÖþéI{·õK§gÇNœ^“â›*ñMá9ÙwÓ’9¡y/-©E‚™’Oµ“Ú1·óÎÛaHP;Î(ZßJ‰L%‘¨üŠ„y”ûOµõ©~+Ïy6û–Ž˜ +ðÁFŸç¡FŸ(ˆG4ú-ÚÛn÷¶ÿêz»×Ñ<6¸ƒ/mwzݲ–Ç·û)G´ûÉ\VóvÍÅqŽõúie=(¬›ÙBÊ¥7‹²â[ª %*š³ª…OI Ù.WBbzõM-1½¡~/NRÉÞRmtèéñ–Tq¾{ø þ=Ú÷úøP9ðñ}Oâ{c É@ûËüY Æ+µ +LO×RyÝpÛ„ ˜žS;\¶¨WÐ(Gájx·TÈ4hê›Íµo®rG³ +B•¯5LZ§TããW°Ï ­E^$ +endstream endobj 1613 0 obj <> endobj 1614 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1615 0 obj <>stream +hÞÔVÛrÛ6}çWlßÈØ‚I§ÉL"Ë™¶I«‰™æ!ìdP´ÙJ”†¤k:ù þeàE×Ø™&n§öÁÅê잃=\[g/®\×–p! !x¡—B¥¬Üz[g— ĹÅ8PüÇ …¸”PñÜ¢ˆB¨‡±8µF„RêBüÁzg¿œ\‚OBŸON`Z9,$¡½¸®ä|^”×ð]Ù¨*—©r~‰¿ÇRn[Š×÷aÄ>Ä-¤Ðà¸àbƒýZÉLU Ë ÞVΈDØBÂäVΗ3UÜIlù^„äñîFQÄ )õZš‚“@ôûÈŸpogåÑê¸féâDF’pÓ {%t·œ÷Rp¿kWÖ 8#AûÍ2“zÅíFeí +ýŒìÒ!¾Ý¥½ê’ªô¦Kâí“2¹º‚ë.Ú §é{A„ŸŸâ±ªE»“­Ò~v‚0[uuWoQvÅð”ŒVTËιzÝ=oÿPÿEÎ($ž8eíÒG úýóóÿyêÿ|xÕgç„é“£ýٹòn +¶Õg³¼.®q\=ÜÃa¬Ñ¤µBsºzÞþp¸‹A•‘Þ™·n¼%ðznž8æí}‘H´NÓ ÌA@\osõPîj¦´' ¦³n±û·^Ê/Œã§3•WxLÛØù9Fo;qN7ÞðõEtñµ«¬7UâG_|Qªl¾¤Bbà,%nÜÝB5µn¯Yý…Ö_\èÞc¿jÔò! ¬û‰óøS%Š©Ù¬jøæ ¼ÄøäòíûŸ~Hœ;ºÊd#'Uµ¨4úqì{ÑZËmÊ<löä̞U•\cør¶XTË™,[¶Lpãr}~žë½)îý(ç +ÃÇøèxîP{—LËÄ|ähÇi´ø·îÍ,Ñ™.¡Œ³Þš™ÊǺɥf´é[7ár5¿P¹\Íš1flð÷ nôÇ|¦¡žMøóñÌlö"mê$=Œ¡üu)¹±¾¶6FCß]´·–5¾ŸœaÓ×Û„úQØæ2hŠq#k6l¾*Ê)F‹•-þ©îÀ7¨(ˆ°÷¾kPDŒßéšÏ™µû­²­Ïƒ»`»­J5+­S‰ÇܧPý…hºcø²|§¯ZÀHcü<±‘Q5–³Ù¯2Åøïñz©Þ+HO!]”øû5½ÑÃS=‚ ªùoðËýÂ\×VÙ0PVÂZšPK}°›é«ÏIoÔP5±ÓO¹RC`ÚÁ $v©ûÀ›hWûÞŪH®µ@)QÇí6ñGÊß Ëø +endstream endobj 1616 0 obj <> endobj 1617 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1618 0 obj <>stream +hÞÔVÛnÛF}çWL X&Öz¹$—$?Ȩ@¢í‡°r%«‘(cI%)‚~Pÿ²3¼ÈÅEš6j?ìjöì™™33+9°°Ž^ÌXT–r!!x¡W€ÑÖÜ:I¬£SHæ–#Aà?.Nð(„À\HHÖ–@.<´%¹5àB’Öö2>Ÿ‡0:={¯í„ë`gÈä×H¶«p|LÕU’>HÕÉxA„÷_ã¹Ì¦=)¶y —vr‡éŽ²êümÊΩ‘JêRª —ÝóÖôOp¢È„ÜcÑ@ +§Ýú`+ _¿~ùáÐÿ/ùî#ÕÎ ¸C•}íÜ]:]~ßP‡«L— l×€šÛv°+œÑJãlºÔolé¢Q¼Ìn¶ÙÌ–Â×e÷ð$‰lŸƒˆGª4Ú Zw½Û—GH—2}’F×[[1S‚x~ÛÖ>=!cBåûÃN~#³ËúDóŽå [–5¼#‚êdY®3SNR¶Òs3ÊV+´¿Ëò÷Éï7ú­†üòMI³­XŽÐ§x“®â—D¢Í8«3Ø©ýH0Ÿ)˜äéÝ( +º^gõ¶Ú¥ÑÄëÐUÂä×:GLLÊòÔÞO—`Ä°mÇÖÇ“í.34§¬ ¹¿4þç²]ðÓ1à‹{õöÕ/] ÿ +Da†±1“²4{µ@ûו Ïõfº¼§?Šß§ÜêßbˆfÄêNú^wJ¥‡Ï_”æqï+Ý«Ñ8"/p| Éô"þBQ;Yæ¿1Ý›$“Ë^Ãó4-¨·â!‰^UºkÌyzÚ¢ýà¿«5¿ÎLVæú~IH™½‘À/.l ‰2[ß­JÛ.ðíUéas”awÕ½Œ‡Óáù(FûY<œ]LcxRµúR ”ÁcsòíÊLJ%þyЪïѾ¯Kfм§K3¤ÿFço„O.'ãx +Oh¨lÁîHòô(7xïjitü©þ‚ß, 0—x›é +endstream endobj 1619 0 obj <> endobj 1620 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1621 0 obj <>stream +hÞÔ•moÛ6€¿ëW +R›!)‰’O‰­¶Ò8Ùu@= ŠD»ÚdÙ å®EÑÔ¹£õâ¸K‹ ‹Q ú@êxº—‡w'KëüÅŒÁrk ‚ +p)he-¬+i?gÀ@.,Æ⃠…¸”PreQ´B¨‡2™YCB)uAþi½µ¯ãçà“Fç£gÏàV;,$¡½^êtµ*ª%LªZéEš)çWùºrWœ¸¾CF˜ðAŽ“ÂÇ Û‰Js¥!­rx£! ˆ° 4 ñ‡tµ)Õvo7––ïE˜œ ¾ÂÝ(Š€x!¥^“¦à$Ý9æO¸wtŽx wˆé÷p¢=’ðÐ ;&ZÎ;ÜoÃM·58CAûõ&O͎۵ʛ fìÊ!¾Ýª½j•tö®UâÍJ™¹º‚›.¡0é{A„ßßâméus’ï²~v‚0[µ&·­¿uÕ:Ã[Ú³¢;ç"è¸{Þ×—úX9Ãxv4ä”5[ôºõŸ/?\õÿk¼5wç„™›£Ýݹ}²¶ +OêeYBR,±\SÜÃbÜb“n6§kêí½Ã]ªœtÙöVÀ÷½%p¼ô“GJÞ̃ˆD¢é4³AmÄõ£‡r×dJ»$]8®êÅÜ^¬wõžÜLßL’8þE¢<¾™M¦7ðt óyõdUºR(Ÿ;‡&ðÍÄïÍiUïðXW@yf|e–ýÙ‘¿u—PÆ™ÑïƒykU ØàÂ^*6ºšÛ¥ZèQZ–wiö‡üˆòúMA6€|½»+Õ>ŠŠ‹×mœÖ)ìò¹ŸŒ+{§2ÔGc5·³{áâùŽxü"N.elp¼LâÙËéõ˜ÁÓeOåÎéˆðAä_áäÛs‹Ï¦Ð&Y½Þ\©eQ݇ƒò»#8ï×E~fØljýpÕ> endobj 1623 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1624 0 obj <>stream +hÞÔVmoÛF þî_A 9öåt’õâlÇ2$­á¨ Šj.ÒÙV+K‚$' †ý ýË‘zqc×Y»Ã0'€(ï9>ɳ XöN¼5`Yölî‚åÚ`r(ToÑ»ð{§¯ 0À_ô ÿða¸ó\pLθÝãˆÂ¸…>?ì çÜÿ±÷A»ž¾‚sar:99Y¡.sµlYÈõ:N—p•VªXÈPé?û?áQfs”`æhCƒöüËÒ&p4„ý{®d¤ +iw…>4fk1BÂôW¹ÎUÖ¸S¿g æØHÏf#˜0=Ïf¹œ[ Ñš{½ˆô™°vQ +0ëEd¿ÕÆ«ñ-·‚’¢SBŒÚleY>´™£½Í#I–Ð*5Äôô´Tg#­ »iƒŠpÕ‰æÉR5mA/Ânœ±·÷ÏÐD¬"kV¢MXÁ;Ýq™¡©²lÏËÒö0,R-'Õ…°NvËÚ¯é`xž>t™¥yCÁÆn£øÝóÛÿyèÿ|ûJµ3fPåxW;sÛ…FÛ…ÿnªçIóx‰íêPsë6c‰3Z*œM“úíA&:UĺÁlgËõlÙx»l/ßÍuà1Ïn& Œ¶‡™Ö盇 “˜òŽd¸R¡nkŸü§\Zèg]s›Œã¨…-ò"Æ°´ZÚ"ÛT8ðÏ/®§pŒþRç .¢"ˇ?$j_Í/q_ÇãT®<П¡#aº¦Zô¬@]´@‹á{àgÃw[(ô·h ÔfýN&E‡$ŸœzSV¿_Ãágë˜òó|—€ÿèÿ2Oœ ÙÀ4}°Hcw3ºÛÌêÍ¢ÞÜñl·ï,Ò£½°BUR,E :?§bi¿ëþÇ’lëøACŽ˜¦i4¹H°b"“ä^¢?¬kû‹‚pYõ!¯è˜·Øq—²’°‰Ý¿,Ð?ï’éëK@…çoÐ?{Nzÿˆodo ŸÍ'UìR'ÞTÖ–:‘½–Õ‡Ýdí)€^K@aD<€ø´S¸v [s–¡] ÇZ¼Þ¬w¢¢ls_73ôã¨ZaX?Ü…J©;¡”úêt/UZÆÕS¢Ú ¦‡bÏñçAšÊÙÝ5Ö÷19r›ËIøò>Q}(s2ЭÅ^¥ ìæ4ÄÀ¸3_Èr& Ô[%xnkŠò³»šuªÎÜ W’rj³¾‰Ó 5VcbZ$iVªè/D¹É"J¯y¾ÀâMQ­²e–J Èèíp¿< +;íB}Hš«j"Ku[×.~ÀB§«no‚Œm›- ШmeQ*{”®q*áã§kãæ&ª›e<Îk ›­ó þ¬ ´¿1­×çï§s8.ƒ€ð¢Lö@÷ׯóŽCòEv+šÔ²‘ŽöýÖÆo™÷³)uÅq õ­ù<)Ⱥڂžu_˜ +0Î ç‡ +endstream endobj 1625 0 obj <> endobj 1626 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1627 0 obj <>stream +hÞÔWÛŽâF}ç+J+E²³CݶÛöŽÉËŠ™AƒX…WÔri€,P}€úyùã??úÿuÞ|¤Üi&S)sJ;­©BµªÂª³^Ãcc¹šTܲŠÅ˜a“f!6§FõöUæÀÕYõ–É‹Þ8^šÉãy¼œ6³EÙi´ÀÓÂ4™¦ïGÂ5bªÔ$“–’,¤µÿg˜öZ‡Q2¡å‡O>š³i’¯ž–ÒR^Êûª7hÄ ‹ûøŠðÜ.M6y´”¢í—ü +ÞLÇÞíá‡n–ËÍ»+hB ½‰²Ûû¿)x?~ÃuFçJ|'àÐ^àËŸOáU·/Au + í‡ô `‹B›¥|uâdQ-àš÷—?¿Bë{r?DQæ—z¸½¡Ýõ^Ñí{÷ÛCÇBê¢õ›°ÀCûûZËr—·»è=Lü¸e ÇÎíTJ¿G+(Ü£õMEþ€<ÄYªvŠ­eNjˆ]“0O‚¼=¿ùxè]”„9%¡‰ÐÝlç¯ðWXk|³©3ߎR_žÉÓéÃ(­0¶Td»d8KºI椡9çÑu¨¼^Cçk×~ã´–Ùz›Ï“4l)ÑlòàöèžÚÏ‚ed=‹Ô é$ÜÄ¡NÜûÑ!Ö–]œ (¾û:±è¦õÍ\BìÜÌ„®£¾§ÚøhJŸá›P‡ïc´xç¿8Áø?o“V Ômfϳ ~~rî½Gè›1DC^V¤nÕñ| íM i¶þKâ¯k–”Ó–,é§Üƒ³;“#’4J;3> endobj 1629 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1630 0 obj <>stream +hÞÔWmoâFþίEŠd7a³~Á/—ö$——=H"pÂE¥,°É¶`mr‰N÷ƒú/;ãµ päBÐUU^fggžgÞÖÑ`R9»èk0I+–6wÀt,08$a%ªüêWÎZhàGMŽøÒ›¹Øg\Váh…qeþ¨ReœsüÏ•ß•N³5æ@ý¬~r׉ª9ÌQæ“$˜ÍDO®Ä”—$ECEµ”ið&Õ÷Ó0Z¾{w 8í­é<ÈpyI •¡:T‘1’ÏÙÎ-û¹%j4~¹q|"T]$"΢¡Í—Ù)t½O-”w®<¿}yáõšOà|8ŒNsCþOåù5WQœ£œmâC±„x¾nç5’^’OýE0B+Ã/ðÉgl;¹y½ž‡ò»þµWGrp´…û‘Êõ "ÜBPigN|•„³3(Ñ–ïÎÕ%Ê/ÀÝnoE0ãìþ ^íÊý”Á£Óõ$Q†e”6Ìž¿ÆúñCyÂãɆa—é-³UÚ(õ/XŸ'ÈYÀ/ÀÏAÀÏÒÊ7J!^Î(âTXõe–VÔ>9¡rß'X½Ã!îdyˆ…D–å%§ñruoøÅ€ª@˜K9ÔF¨¼CÄžy=™»]i£òWÕÿsßÞê/¦"ˆ$|¹°vöQÿºÓ¦Â´{M¬1Y`ˆt Á®Byu ŠXÌ–³F§"{ÚŸE·}I,º7ÝFó²ßöït[b<ÆÂûô£Xl!8„Eq¸~Žþˆx<ÿ¼²³¢€rdQÿЬ´/W"tL½q­ñ&$#ªNOdÅÿs/Mз„«Ÿ…‹á¡‘êûÍëUâ¿?ˆ^e…@ÈãtZb:õF™x×.ì<ýûPjµ;”{u¿}Û,¯è‚Êßœøh ŠË/ˆ Rôù€{ÌdÚº¯œ.éç;ÞNëP¼º–Šáƒ—]Qè;&ÉÒ{àô³ÇE˜Ÿ¡³x¬¼ì¾ìAôM,i"àx逗ãÿ•ù˜Fqþ)ðkj'ÑÙKQö ~öþ#À]é÷ +endstream endobj 1631 0 obj <> endobj 1632 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1633 0 obj <>stream +hÞÔV]ÚV}çWŒRÙÙår}ýÚHÛ…$D@W»N©Tú`WØ Û4YUùAý—ñµÁxîUUŃ¯¯Ïœ9wfŒ‹Fûýƒ‹´aé`s ÇC4æ½Fûxó†&€ã/šc3×[çŒ ð¢GÆ Ä¼i£Å8ç:xŸ¿*ƒÞ;0™·íÛ«+¸KTÍaŽ²^$~…ñúq$s¨¿y1”.C ¦›&´4¦Y&x]Ii9.„µç¾üY€Ï`œ¨-Íf–"%ô¾øÑf¤9oÏk˜†‹ÉYÌ´€ Ýu]`†Ã¹!Ó´³­ò9æÏ„qðí!wôü!¦¿3ÇÍ-qNé©¢´B˜…\?Í@mYÌV>mf>­„’3¹€®®«ÌTŠmÃbS2]›„¼rÍÄ\uKа Ò7lß¿Ã%r%kùd¶fð³j;LS‚‚2-â­ã"žRî'Û…°ìÒwèê_ ¹®Úr˜¡¸-Á5¹4AµÐ}€òúü˾õÿK¾»¥³Óm¦ÑÉñòìô]jEþ»RoV+¸X®6·ªa1¦Ø¤i€Í©S½ý¡ +Á`ÆÊÎ,zËyoY8^v“Çó„œ.s-Ùi´ÀÝ–m3ÝØ.tÊ”—IB®¬X¬üÇ i½]óp€0ݽyƒ(Œ¶Ñt›ÃY†ðr¢„u¢vö`ÒÔéÖ(Ã9L”*¥xN¹ôÓa…álÆmÎê½~ªo¾IÂ8›O”ùz›]Þ÷½ý¼Z@óºPp­ªÑmÌwLý$ð)f瘻ݒó-pLñcù¯|'ĸ¼!|ŸK¢¹¶{á««#æ¨ÌG{£ÛÁO½îÍ}ï&sŸî“Ó¼” üm³dG†08–µq~œÔR¤4 YKpÜG¸(˜æ¹,«Ù’†V­œj'\x~2À~4ÐTšä£^:à;ü3o½°ÃÒ,Øœi°zåLˆÉŠMé{*ÉÎWÝÓ¢£6ê¼ÞÝÁ7µÖFQ©–šî´©O˨ݲŒˆÃ{ÜÐÌ&³ÏTO](âG¾Ÿ•C…:çµ”Ë%î>Ré6ú‡*?¢S~3> ŸWÔçüP­“–½Nùïðo¶oª‘ +endstream endobj 1634 0 obj <> endobj 1635 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1636 0 obj <>stream +hÞÔW]oâV}çWŒV²›pã/l¼i+Qã¶@˜fW¥.\À»`mÚD«ýAý—¹¶Á°%I«ªÎƒ¯/3gÎ|øF…Yéª9Pa—L,¥FÍ]ˆ—¦¥Ÿ¼ÒÕ +*xÓ’ª‚xSk³k`é +S4ð–%­0Å@Ì—*LQ¼?K¿Jm÷ª¬Εsq½HVk¬&­f‘¿\á Za£©?æòoÞ;t¥§®4¦W«PQ™jVÁk¤&M2Ž ÍÜÙîsÂ#ðà ÜGrEµ˜)hܹ^ðXØu½’©1ËÄðLV5iºmÛÀŒš¢i "vñÃgš±÷Õ¡ ºx‰Ñoµ±…"6àK£– Ad5-WB«flý8¹b2K®'>­4)á“tÝm)”YUʶu²MÑxžmÒÒ»¢V1TÝÔèA³RP¥è ËÆß÷p‰¶¢Uúf²'ð‹lÕ˜*ñÌdœù[…™3L’J!Õ5Í´rÙ ã0§jÛr¥Æ É®hŠš.« ›(>@~?ÿöŸoýÿß>Rît‹©”9%Ͼ­B5«Â—j}±€~0Ãrµ¨¸e‹1Æ9ö¦Nõö‡¬éò Ë3ë-K½eâtÙÏÓÒq`3ÛL;¸Û´,¦»É£h:EªäA‚`†‹` +#iá?ò¨òã‚Oƒ¶ÿˆ8Þ¾ûq'ㄯ;þŸÌŽGR0’Gò®ª4uû6ñš®£ L¦#iºÚ$—PF¼Sï6šîÞL | Â'Â[·äs)"šùÜ:¼½ïöz¹B|Q.ìO·‘½ÙS¾$CWWPÅýÌ`jѾÐñ}YRMŽ{Ñ*‰6q° +G‘ƒÏì¦Á>5€^ÿÎC¼?´îº÷­†w ofÐv»M‚ÅÃ¥@Ê—Gc×3„¹õ–Ö}0Iæ«ÄïåfÚ<œ%Ï_g&g£¥jSó +Ùø–샵?ÆObw³üGO(¿ŠÐN?€r |¼ÒÂÍ’ì!Œ&É8bQÄ9ý*›ƒâu§ÕmR¾òzFÔ&[/qJé |²Žô õ@ÚƒyÔþ’‹^†Näâf›8~pûð&.R$ã‡Ñ>1ªÝΡ)Œ¨hüñ§â°ø6Ùâ^Ýù¨}¡pí +-¿ò¾•Éz)Óúä#žªh\$ÏãYG¼ñ®î¸]ÏzbœÝ·¼ÛÂÝ´NwÊ^»«d%´ãaâl’túýCöîƒd„¯MpA6÷aÌ×¹xç¤åˆ˜.âï·ç ê·×ìº^šþ—Òs8—i ®Òåórë ŽyuûÞ#îP~…VìÙS3D:³„O4ª”ktª*™!¾£fT-H®×\…‹Çœß¬¾b†8’ë5ïºí¯’«q7âž×ñ'ú´ïÖÆ3§/Äa“ ã]’^Ì¿ï‡3¾õÇ¿$Gˆö)¯Ý¦KL‹d.~±2²9êd½üšé€†F[þÓç¬#ÇDš*EE´ÈË0æâä0÷æç«Åd'îi²ûª^\q<ºõnûîàö®Ýð©ù€_Ä|+'ŠçˆŒ+E-Tl…Óņ‡ãüÃGv>?¯ò[Ý›öÐí:î9Ãÿ©Op®ß!§ëü?¿Ö'ñ +endstream endobj 1637 0 obj <> endobj 1638 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1639 0 obj <>stream +hÞÔW]ÚF}çW\­Én–Á'R$ºxÊNx(}°`W^ƒl6Ù*Êê¿ì±±ÀªDUÙÕz|ÆÜ9÷Ü3w¼*¬­îD…UÚ05°tÛM„5–_ýFëQüeC¥ à^TÛ"Ž –¦…‚ÿÔP0 +QtÄüy£IEÑÀÿÚø]òÜG0ˆ ­‡·oa”ȪMli³J‚§§0^A?Þ±dÌ™ü‡ÿ.¥eKQ¢4U¢šø,¤Éƒã€šeì1 , ^À4‘›ªEL)Äà¾OÛˆ¥"®ë7 ÝÁäLb˜@¨æ8ÝV=KÓ¤Ä2‹yÌŸP½2òpu41‰éïÅq„$à¤nJp¶”RP#§¤;›&±¤OÛEÀGTÚ±E6€_)–‰!å}ÌJæëü!š]ÕÀ\5“òje åéë–ƒßác%›lfñ<ßÁgÙ²‰*±ÍúC3Ûi|€O›–E4½l= +Õx¦J‘$fù \ÂLŠ‚¿XÒü!Ζ¡ÇïÞ½[éḏ!<âëÇËè™Ås&îIáLžÉåî0x+êœZ?ËmÆ»åLZ"¾yÞÝÃݸ=èºðfÅïîEÿ—3_ÇOÆáQÉ3ÍHŽ®üÆ‚â·Ž¼‘gòûs±¿‹RV +Œ8׸.0Âb¾‚øs(êÊ¥’›gÄ_«dQnNé(Ù@Ô;£RHx³x¹pgT«+öcKz,^íÖþ:aéz- +Ù0ηstuã¢ñ(î ë÷üÞØô†^GÈwÁ1ût‘·Æaº9)„k¼ÎÚ¤’-†äœêÙbT„³-œ",øC³Træ™U¼òo¬ÂsåBÓ­á'^ʾs 6»ù:+Z¾µZ<ŽA¬WØh0ôz™—®PuŸ:ÂÇýf°á‰×hÝ W7^ —"ái¸ØæqZ­W¦ë:ÃG‘ó´ß)ÃaLFí‡þ ‹Ð=àˆÞL—ë8‡ÛÅ̵ºqÔuÄÃR# +èµÃ²Þ ¼üÜ8¬ä(H‚Hì™hø…%Q°-œ ¢8AdE².Êõ²ŽoÛžçzÃÏîØkàùÂ)®á)ìæñ³ýÞʵ;ây¬sžËwºÎëDïšöý÷ÂŽ¼ +O„+…ÚDÂHWt¬‹avk‘ì…†$Ýþ©”XÔ7b‘»X•ê'WU‹ãw£¼˜n§› †p¦Ùåw„’ Â5s#»É–³ž³+vÊ…HÓPtùð’lGÊž¥r¼ß|ÝpÑÒ+T« +‡¸pš?rÍ&Âþç¿üýÌÔIü$X·øûÙ,¾«¾T毒²ÿ'ÿ‡àÃV!å +endstream endobj 1640 0 obj <> endobj 1641 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1642 0 obj <>stream +hÞÔV]oâF}çW\!E²›0±ÇßI[‰%NBESV*}pa ®ÀF¶ÙfµÚ´ÿ²wÆ6`Â&äcUÕyðäŒ}î9÷Þ¹X…Yíüf¨Â,­™XŠ ºm‚¦@ÂjAíƒW;¿VA/¨©üÛj[ıÁÒ¢Pð–5Yˆ¢#æMj ¢(ŠÞ?µ?¤Ž{ ±¡uÞ:=…~"«6±¥x–øËeÍ e, ü “ÿô~ÃPZŠÍ0 ¡Õ4À»Ê)MNŽ jn¹ÌŸ²üh +£Dn¨1¥)Á}ð—«K¯ëÕLJ,í™Ä0PÍq º­(znTx›hŸP½²‰ÙáhbÝor㈌8€›º]&‚‹¥´Ì5 +µ~šÜ0‰%ݯ¦>_Q)cÓ|!¿;R$C*»+J&óâ!šßÕ@«šIù?ÔÊA»×-ßïã¹’8ß™®'ü.[6Q%VP¦E¼8*‚a‘DªžuJM«L»®ï×ô¨Ž#7l¢KNƒ*j¾4@61ùåýøÛþèÿ—|ó/¯f•WN)k§mºP-ºðÇJm.0gØ®onYÅfLñŒ¦ ϦÆûí“L5Ù””³8[gËÄé²<žGóqàÇÌO_àÓ¦eMßN…jÜ©ÂM¢š¯²÷wÞÉŸWÂxÀX’MiáfIã× Â_^\Ì}„ÓáÊŸàHòü¿¬—dóx,eÜËðv®ós0&²"Y„÷“àÇ+@|•„QŒ¥ ^ggPö›­vñ¯ù¡ãBoàÝönzÝf§>–/‡=Ž1~ŠR„…ؘoÎâÈ_p}—Ä  ñ}åBøĈçL½ÍûÑáe¯Êáé©0_öȃì9£|cÔönÛ]8™Anú†Ã'³úÙAšòê„4„+ê&ëlfsGhh,¿–Hì W‹ + ®Ôå¢gž,å%:­WßÛ})À¼óvÙM}YAÄ·í­—n4YÄ)Ï~Âv’þ(ãT¸ÝV§7Dü~àBýq„¸`ob<êtÜÂfO‹è ¬LdC´ùQÕ>I9^?ƒƒäìóáÝ'ñ®9†·÷‰%s?š©y¦Ÿë‰í•ÃÇ‘Ó’ümÙ…ÓlŽ<"¹G¦wÔ¾BÜ»åù¨&á¢6zïÂÑ2Ì[庶Ê\„²Äo­³‚ó(ÝîÇânßs?zƒfëÞË Á—åò;.Iún]~ìté',` ¯d)é…3¦?p¯Ý/¨6¯Ÿ4…’ÍT@x;ÞaÞ¬öø×"ï8xöà„à3[L ÷?ßA_ßò{‰ñ>¾¬é«£h7ÿ!½V‘.~Ìð„=5^Þ÷Ï}µáÇe˜f~4a}–ˆ)qÀà°wØF|è5»-—›Jž(èÁϱ¤Ÿ–\BÅús.Zë$aQvÅ¢4Ì>÷c”*û±^Z÷ƒü¸zWnwÏ ~cÿ+ÀD_d +endstream endobj 1643 0 obj <> endobj 1644 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1645 0 obj <>stream +hÞÔWmOãFþž_1Bâd²øýåh+¹‰ô‚I¥´ºÜË^'¾ ²:õõ_vÖ/y1´`ªª* y=»yæyfg&ƒ óÞÉùT†yÞ3T0% 4ËU‚ŒõâÞ´wr&ƒ 4îÉ +Hø‹Ù2‰m©JDR€Þö$D!’†6öúD’$è}ï£0vÏ@' NGG0ÉDÙ"–°šgÁím’Îa”,‹ƒ‰ŸèèJ­\)DÕuèËD6t Ã +Òàà¸PŒ-¶Ï‚ˆe¤Üdb_6‰!$ îCp{·dy‰ëÒž®Ù(Î ºDQmÛ¢Y’¤U2 …˜F³ú‰¢íícxxtÔråo‚c—!±75«‰g«(M(½¦äˆ}ƒ˜Âõ]ð•",ªð§-¤"Ñ…úØe}( õ!¥zJ²ŽZUCá/ŠY5._3müü—ˆ•­ªhð³hZDX ™×þVií o©Œ•Äî(†ÙÄ]ÓÚ—úȶ-ö-¢ v_‘äj©ƒh`ôšçëÿùÑÿ/øæ•ßj™ßœÔܺÉB¹Î—ª³\‚ŸÌ1]MžÜ¢ŒÉ˜c‘æ ‹Såùö›¨¨hdi*³®-S)kËÀö²é<”*U?°‰mT•ÆxÚ0M¢jÛÖ#)*W*5"¡dV/`<²¬ÿý’ÅÉ8@3¾½®³Œ¥Å¥yR#ñ ÑáÈw9Y:ºòà0o¸•оç$*áy@{Q|‰¦v’A²×ÓóÝéíSêxü‰ëOâä4Ñ~püü…üe"g- ‚» L:*8‡xTI”†£)…C4ÏE©É‡ŽJÂ6™NRÜhÎPÎëe¸Ãó2OPM#¥¾dŽLŸ:B+ÛõÒ‰ßÃÎX¼žýuÂém9íâ Û€ïÀvâCIø%eyÞÒÅh€öž;¶yµ+«(áyÄØÝ`aºï‚]jÿ¦ª}÷êzÓ²þ·,Ÿk¸÷IÙo[ž:1.Ä—`Þ¡€¦>oÞçÜ})Žy ϹÏßXà—ëe‘Ü-–u*ñK´_éh2¹þKq ¹³'ž:1uð4 œŒ¯çéx”ß·ç9Žï:g΀^ùÿ¤™mo‘0fé¼X¼EÄØõÎéÅŽ >@¼¡“m"g;Ö¨DÂ9«kNN@Çm¢CMÿr±å³PŒãD9ÒìL^é›pà˜Qƒ¡¹Äã$꾶Ôl!ꮜ:Ñ6rj äoļâË«¡;ÞŽÏêÜpå·âÄ¿÷vÈl¨¡ùê!‰ÚZAìŒ;øÃéÇü;r&ì!s ŽÞ /‚MI”=*ðœƒv² +‡ç?c9 +endstream endobj 1646 0 obj <> endobj 1647 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1648 0 obj <>stream +hÞìWko£Fýί¸ŠT šx2 來D]¥ÊK6éjU÷2à%²!§[©êÚ¹÷`;Øëm׎¶•êXf83œ¹÷ÜfÊùOcf•bàpL׃C™(©òc¨œuÐ!L]Ç?¼è®Ã<ƒ3. \(Y7 §JqÎ ß+¿ª×ƒ!XÌ…þyÿôîKMw™«³2Z,²|Wù2)Óhšh¿…?ãVF½•`†eAOgºmAÔ”6‘ã@ØkîQÅI QÛRëé³Õ )aðG´xš'•ä„Š-˜c£{6³l`Âð<˜érnÖŽJßå$ºÏ„ùbÕ¡†œDïWÚxRpÒt[!ÈX!Z%„ÕXUKÐz6sÔ‡§8¢‘P—I\ £«§æ³ÔfÙM³¨œ¾k‰úÊu ]5lA7©A‚Óñðù{"WYÔ3ñót ¿hŽËt5i(«f¿"o6à I©8©.„í´²›f7¦@÷<­ç2Sõz‚ëõÐÍFñÚëß¿|õ¥ÿ]òÕ-ÅÎp˜N‘ãmìŒUêM¾®©þ|£l†éêPrk:&c…5Z%X›åÛïš0LbÖfS[ŽµecwY5ž0u;ð˜gוF\m;3Ìuçá Oyë$HËp>•Y¾L'jZâ/™k÷Nºä÷o½®·€?wÚþô~ßÃ^þHÞ!Ü%—Ì;Lÿ‘ Ý„“í$hÈŠçÑT~ ðÚMúl$D!ÇÅÙù¼hlÃ¥§§Ÿˆ?l[H9®R¾a¸ñ‹šœ‘@݈Êð'– š>WY‘£qmzì#+# +!%Äã®ZØ­)šØVæÆ#õiáãAÅÔ—RZKý‡›N‚ðŒŒ8^5õ·L<¼ÔžGè$èýF®#,Ûé1a¥ÌàWÓ@Vmq¤vÒßâoÛÕåQ„þ¿©üûš +E ã=Œ¦Ë¢ÜûfúÜÙdè÷ûiŠðqÊÉïX¶[¯­7²O¾n¿‘ Ö¤ÁÃÝž6²;w(­ƃ»Ûë·{R¹ó$õW’åøSBÅÉ¡q| ^ïˆ5Þaáö9å‹Ï—ã#@a]‹€pxÜWCбÑO¼8inl ûLÓ"W5ÿÀ|`2 +gí +endstream endobj 1649 0 obj <> endobj 1650 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1651 0 obj <>stream +hÞìWko£Výî_1Š´4ñ \ÞI[‰ú%W~ÉÆU¥ ^""ÀÝJUPÿegxø…ãn³^õ¡&–¹ž 3gÎÌœ+dX5î{3ViCWÀLPM ¿4¾s÷]dp‚†ÌA¼ȦÁ, EbgÓÐ “T´9‹F“I’¤€ó±ñ£0ètAc&´î[··0IDÙd¦¯o³ £ô£ÌOoá‹?9ßc(¥Å™¢iД™¬kà´ —:9Ç×÷¾§¾·ôð¢%<%bS6˜.„è:¿x›—µŸæ~;NCS-LNgšŒ+–eSMIR‹4uÎ ½ÚÇüWö‘bGÉ71ý9VN‰¸©š„–óŠ +®•p½4±©3C˜¿,=Zq!ó—ÅBºZB$2M(o–7%‹åM¼¸J²†¹*:§Ü(Œ:¥¯>?Á%úJâbg¹]dð^4L& ~é2-ãÅQ «”s%íœëFÅ»ªžõw-KlšL¬&—äb©¨#ûÕõÓ/û­ÿ^统T;Å`2UNªj§ìºP.»ðËBµ×k˜†+lWƒš[”±SÒÔÇáT¨ß~¹‚FɪÉ,gËàùlé(/;åq^èÅ,½˜4Zàݺa0EÝKÄÊTª’„.^>®áð†ñÒ_7¿]ûAˆfU'Š +ã×ÿB³×ƒ`.};ñ½©—…ñ­OWpÅÇýph¤Díã0ÁKFYà +A¼ÍîàÀFûÈéŒFv»ßíÎúíŽ=Å™þ&Op¸©<;_8ŒÜFìÒ#<ÃטÚËJüèãá€o7“%<ßÞºâYPG‰vW%Þ­èãŠpsGŒQÜ;„_K"/¶iGÎï^‹Tý]p–xšÃ8wô* 'ˆâ#¡v£CæŠ'~ç9VJÎËŸ£À­]ù?xi‰¬•SyÔDê+|^*yk>ÜWÜA3V ~$Ü—9ÛC=äì S :B=Á™Wòoe¡6 +»o!ã`hü“œkÒq˜†yW½SJè™uêCœRS†‚4ûõh-$¢˜‘É¡]ƒúÿÕ矧>3ÂSÔ½ë-²8¹ØV—ª^IO×n9cš¢÷:ƒ6«!$>^¡¯6`6¥^°’‘cßíùø²äœï(jøù¬3 ~¸Ðà'O’2ãÆ;T¦ßw&ëmÚÚfoÒéxîôG½É`NíÒš;Å™r Ýïå¢éDÒ 7bìÙN‡ÐQàšWâz_¯ñó3'ôØwÃ0ú¬Ôiä†ýQ™;š¯zâÛgêÂÕ’'¯SßýÝF(¯p¦Ùuï4ãÏ&n§ö¼E§ÙéÃ7¡?JÁ|O +endstream endobj 1652 0 obj <> endobj 1653 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1654 0 obj <>stream +hÞÔVmoÛ6þ®_q0@šk†¢Þã-€ë([Š,ËeF1íƒfSŽ\[ö$yi0äí_îHI¶åÖ‰ÛfX!uG>÷ÜsGJ:L”ãïot˜äŠm€C]0] +Wbåu Ÿë C+:Š?t×!ž ŽA eÌŠ(„šh FJ‡PJ î•_ÕKÿ,âBÿ¸ßnÃu¦é.qÕÅ$‹æó$ÀEZð,ŽF\û-xƒ¡Œ2#†eAG'ºmApVBÚ'ÌÞ`x4æD醙ÖÑb« B‚ÿ>š/g<—¸~ ØŒ86¦gË Ïó€˜.¥f™¨Ì]:1}Â̆Õ éÄì×ÚxRÐiºµ‚,cµ̪ØFyZÇ&Žz»GbÆÔ‚Ë $bôÔT#–Z-û±Z”îªE¬©naª†ÍÄsJ£#²7÷_ã±²Eé¯Fü¢9.ÑU^AæU¼EZÃ"I©¨P1Û©e7ÍÝšþ ºçi—˜ª×aT/§h6ŠP‡ÿùÒÿ/øúQÔÎpˆ.*GëÚë.Ô«.üw©öf3$lWG4·¦c3æxFsŽgÓýö§Æ 4ò1©fu¶&Ï–·Ëúâ V^ñìò¤‰ ®¶‡æææ¡Ì™Ò:I̪Iõ·¼ŸuNgÍqÒÃk'M£ëáåÉ þË¢ÍÉ"T§¡jÝÍI°Ä­sÖÄŒ—Y’q¨Æ‹Uñ +Z¡]t„aÚª÷ß(åŽG-˜VOrŠ ¡˜dšÄª¸y=ðLЋ“K1=9IWhž÷F£U–ñ´8ãiž¡* +í#£w‘!lßíBß‚„GûN æݸ©Ý)iUÌ )ë¸\Œ*æ"‡ tTÓ j²%KfWJiïõû·ƒœùW7Á[8Ê[h~UíœK^*!„‡cKi×[î¢ü'´§ÜO‹¬–ñ£ûà^ÂÞ‚£ tE7<Ð~ºh v÷p᳜ï“rO¼vúpO3?‘Ûj~žñ?V<Utž +ÙŒŠöªçÿç[ÿªÿ¶%;­û4†lµ©h5¹–ª0ņ[ó’¤Ð³Å« Óvû)õìdÕíq4YËv„7 oÝOI¸[ -ïÝüøiu诊(ãQþ%eèß½ßk=›Ôóè‹C¾aô’­Šâ~]ò“qq÷Eâ/΂^Búa‚žšÍK +/rüºd¢ßgò6Løaâ¿Cå¬îçÔ'è½¾ôñ1¸ðÑ|ó• +"ô48°^R‹w TóÙ¤7y Õ¶¿#ÂTºŽ&èhm¿îJ]Åλè6ò¢Yvícù‚BógR_·'ÚœkÂòcâ Îív·þ4üG€ ž\¯ +endstream endobj 1655 0 obj <> endobj 1656 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1657 0 obj <>stream +hÞÔWmoâFþî_1ŠÉ.Çf½~‡6Ü•*M#Ø4ªê~paMA¶é5ªîõ_vÖ»6%i«¤º>xýìì33ÏÎî€ Kãâý̆eiø47ôÁ¡P#5Þrãâ 6ðÔ°PüâÃ…8”P|mPd!ÔEŒÏ.¡”:À??šWãwà‘†ÃNn +ËIhn–E²^gù&y%Š4™ ë'þ ºr”+Fσ®Mlß>R”¾$Çó÷ÜS‘,DI¾€»ÂêÚñÍ )aük²Þ®DYóŽ¹á¹&çÏÂœ(Š€¸!¥®JÓg$ð›yÌŸ0÷`å‘ê8õ$¦ßŠÕ’D€“nØ(!£e¬‘‚y:ܤ¬Àêú$0o·‹DŽ˜Y‰…@&Ÿ‘™[Ä3µÙ·Ú¨˜ßk#¦žÔö0WÇgò… + eúnáú"W±Q3‹Ý¼‚ï­ $¶)4e©ýmrí w©ÖŠJÙóƒFw×}º©¿ƒEV7$®uµÕÐËGõšçß|vÓÿ/yû*÷Î ˆ-wŽ6{ç´Uhë*üwC¬V0Í–X®,nËÆb,ñ–§#ëí‹9ŠiN¦>[«Ï–×K{ópÎÔ}‘ÈW'MÐÚâ¸û«‡2GfJ›$¡ŽLôçã¾¾=y™ŒŽ[¦Û"Ë«46Ó â»ê œA?Žó³Øê×Æ’…qdñÇãS-lj+þ ßš¡´ÏRˆM\°JEѽ\‰4»’Ã^/ß!¼Í绢y5y™U±[±%=üöÄmŠà¦@¶ ¾Ú‡ ¾„šñ'Ä5+ÂO‰qQ§ƒxl}®“Z(cô –¡ï©M´’ÄÌñ8ÍŸÄVJK|4ÞN§ãk>_Ï&ü8/Ï~Ó8í^V[¡èKžãܵ¢í’û¤üñ\ŒóªhÔ;¹•‡qIü Ηªöq ~¹9`쟈E¬JqJÊþtÉ^s˜ŸÌm·I©¢yÎã‰JÇÏð–¦ãÁóÎåòºÈd‘!Þ·¨ XjmDu88³¨Îs²ÄU—NSçËVwÄ‘}¾«È‹¨2ø§‰¾èHŸ’ÿ.[T÷/ÿn2â_¿†ôwÎ4Ѽ¦ðdŽÿ-Ùyòóª>…™x‘ø|ðöjŒ÷Ît2FxöÛÀœ9Œî57£j2ü<;ò½ ›­C(¶tÝl¥`ª#> endobj 1659 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1660 0 obj <>stream +hÞÔVÛnêF}ç+¶"ÉnÂÄ7|!§‘Ò„$T”ƒÀ)ªê>¸`ˆcmšFGù þe÷žsqHNHSU…Ϭ¯}[{Æ:LkÇW¦yÍ6ÁÑ\°\L ²¨6©ýà׎/uÐÁŸÔt4üãCwæ¹à˜Ó ðg5 Y˜f!æju¦iš þCíW¥Óº„sáüøüðz™ª»ÌUæÓ,œÍât +í´ˆ²I8ŠÔßüÑ”)LÌl4 ®3Ýn€!(m"Ça¯¹ûQ8Ž2Ó1 3µ®;ÌVb¤„ÖŸál‘D9çmù5Û`ŽáÙ¬a3LÏó€Y®¦Y"P;_Äð™am-bvhƒÉ1úUn<žpÑrËD³†QfÂhHoüµn3G¹YŒCJÅbzzJª²†"·ý$7e£[¹ÉOMo`¨¦mÐÄpèQô–ãáû="W6+ã娀ŸUÇeºIÊ\Ú›§Ò‰§J£¬†í”i·¬jMÿÝCk.³¯nhº6@µ1ùåóíÿ|ëÿ—|5¥Ú™Ó©rZY;s¥B]ªðßuõ,I OQ®‰[ÕQŒ9öhaoš¤·?TÃD0³²1eo9ï-O—ÕÁãû†8<æÙ¢Óh€»mÇa¦µ>y4äHµ2Hàžá`²Èâ´˜Êd¾,Žà Ä¡Ý½ìÜ´ºç­ƒ@=Y+¿A§ÌE…cžA ÜÁ÷ À|†8E|’,£tÕO“h·S>Ex5›ér&QÔJ D³Ç@A;pwx¨ð•Ûó¿Û6ϽE<RXý†í ÿ>Miÿ°í_·»8Aïì¼Ý½"–OÓƒ£—ÈË_¼áë–÷äúÂñ¸¸ÅxõŸQ‰*/Bœ|[Žð"áÁÉÊ¢Uéž@öBuá™N‚ÒƒçLOôB”äÄ,|¾ðÃßòqtj Üà`³ç=„Ã,L’(¡"êîò.䔑dDX„¹ÍÈ]ó¼-œ2½³þY§ÓêôoºV÷Ê¿FøàE–ª²!‰•Û®õ¤'s]w¢tJêX‰™xöÑ3DWÉF.í4›‰´pǹ_¬óÅ3b_÷&.|D{~» e +®¸†MSïÈ$¼”(ýáÞÃg·3Ë9ÉÑVÊwøëÇQ5dÄIjÕ +Š¶Ør¿¸löëÜ¿ÈÓ>5~O#¥éñ1~ŠâwÍá/¼VƒŠ‡9—E¾jUŠpG«’ˆV›ßÑ«þPºA¾ÃÛ]Ð -M +—|á·ùMó&ú˜+çÛ¢.6|ÙòŽ\Ûº[^Q?uWy­Ÿrýn1݆ùN œõúÉ·ŸŠñ=º;QɯúŒ(—óÚÌ^ݸEI,“°Q*Ò¡òj×ùÁºW8<”Mk¢)7³OODoëÊ÷7_Ù{þœñ!~]™Lï;ùuµÈæ |³»œaÂ’ð1ÊDŠ:á#¹žñôôpÓFcU¿Ð¸PèœÁmDt +Ú©OøŽJöú_èÞnõý_`ÇÉAïðrÆ¢œ1Ý%dñå ç'~Ãþ-Àê º± +endstream endobj 1661 0 obj <> endobj 1662 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1663 0 obj <>stream +hÞÔVÝrÚF¾ç)ÎxÆ©6ëÕêßn;ã…’Á49™iè… (ÁH©ÓÉõ-{ÎJ„۴ît +»œÝó}ç1`Ú8k ˜f Ç—{`y˜RÙ˜4^†³WN†Ž_\ Ïe¾®É.Q·PŽMÆ97!üÔø uƒW`3®Î®NNàMªó´å4‹8™B'Ée:‰FRÿ9|TfA%˜iÛÐ4˜áض +H‡Àq#œ쾌Æ2…(ÃûTo.s´!!ø5Z¬æ2S¸AØ°-s˜í¦ïûÀ,s«pÓÌuªsôŸ këÃCÑ1Õ!º¿ Ž¯BâZ^ ²Vˆ*Â.Ͳô¦Ã\íf5Žh'´\Ž‹ Ä´úZ¢3[+¯]——ÒѬ¼$Š•6új:‚~¯’û–ë£þÜ"Vº,NÆëQït×c†&KȬä[&%fIÅŠSØ…pÜ*î–µ›ÔßÁð}½é1Kó›‚ÅÖÝÁèTë__þó«ÿ_ðÍOÊé2ƒ2Ç«Ü™›*4Ê*üwM½œÏ¡O±\]*nÝÀbÌ°I3‰ÍiR½ÝéÂD¡³ª3ËÞr…ê-ÇËfò„¡(æÏ|§è4ÚàmÇu™i=Œ.Lò”WN‚² 7ggpÍ×FQ2ÎgÅ)ÜJˆ ËSšAË’õÅ·hå¦lš7­m°É +òÉP›,×ù)g$?:…yt/Óæ÷s9‰»´=Gñù*]®zÑBµx¨õ …~³ O`¨m«£”z'ë­hV Q‹@ŸÃȨã)ì†âû +y×ÑþžuÁø* ³'-|Gi{2v«ð~%á»G(.  è\!ÔëgŸâ|4C‹‹:üvÈüQ”IxÑq^øâGUÐ.»ptˆdës›Êè—ƒÑÞuê‰:½0h}âz +ã«éõtƒ°ß鵟׳·õToo~ Ňòg¦ìÕSön®_±üÇT_6e_H¿èáÇG—¨*wÇÅp˜> endobj 1665 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1666 0 obj <>stream +hÞÔUmoãDþî_1TÙ½d»»vürHmšC ô®$.\…2Î&1$Nd;@…øAüKfÖ/yi)â„p>x3;;ó<Ï̬ÌŒ‹ÏÇf…áÚàqß›C®Œ©qo§†Àñ‡/á{,ðÁ³9ãÂ¥Á1 +ãÚÂÄè2ι á/Æ·æpðżþEÿÕ+¸Ë-á3ß\Íòx¹L³|‘•*ŸÆ‰²¾ ¿ÄTv•J2»×ƒ®`ÂíAxS…t)8.¤»=RñDågø&·ºÂc®™bHü/× U踃Ðp%ó\¤ç²ž LÚAs|Ί¨æ®7‘>“ÎÞ&ªC¶ÞDö­6V$ÜtüF+e£„ìÕh㢫ë2ϼ_ObZI³T“j)½3³XϬÝnk§<™×N²zsÑCª¶+éô+£ öŽàù;\b¬|UíL6I _[žÏ„©êEo•ÕÉ°HZ*NªKézìŽsXÓ?@Õõ™c]ÉEµìå¢øÍûô×îúÿ Þþ¥ÚÙT9ÞÔÎn»PÔ]øa¡^-0JgØ®5·%° œÑBálÚÔo?[ÒF£š°f0ëÙò¤ž-o—öâ CY] ÜjÒhÞ.Ž³ílo.mbÊ+’iVÂ2¶\3ÉW×j–fýëÈ\¨iÞ‹Ð'?…kõ½‚¤É*ÃÉLÐ<ós<ˆ§ÞÆKÕ<‚ÖôáßÄe ›IdÁoÛ1éÑ•t£UMæŠ"è°‘™DÖeãf3.¤hü¦ëìÕ¿õ{t©Êü±:¾_Eöp{‹öA8z€÷pv >sšÀíˆv·õ¸Ÿˆîáƾ¸ ÙÓ˜0ù|£€ãL’u•)X¤™:€C¥›ZÜÄdµ“ù Ùjª§Où¢)k¾Ïñ­ÎQ†}ÖøШ- +uR~ÌH#h!Ëæ£þ§â2y +endstream endobj 1667 0 obj <> endobj 1668 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1669 0 obj <>stream +hÞäVmoÛ6þ®_q+P@Zc†¤$Jj·kãšÎˆ´—lÞÁ¦ –lHÊ–tèÚ¿ì‘”äDi²l†9EŸçîxƒÜ:~3ÈK¸Ð¼P€K¡–Vf½L¬ãS ’Ìb(þჅ‰B\J(‡¤´(¢ê¡-YXB)u!ùÝúÙ~;=Ÿ„ðêøÕ³g0«’Ð^çuZ–E•Ã›ª•u–.¤óKò nåš­8q}&Œ0áCrb …Ç[ìs™.e iµ„jgÂ"ì!az–›•l4î4±|/Bq‚øw£(â…”zF¦à$ý<ê'ÜÛ›Çð¨è¸zåÁ‰tH"ÀI/ì#¡ØrÞ‡‚ûÝ´iÁ™Øßm–©q»•K3€B=#»rˆowngS½¸ìœ¸yRæ£VWpõƒ‡ÆÈ•|/ˆpý ‡ˆU¯ÍÌòjÑÂ÷Nf˲éö[WÝf˜%+ªÂιú¸{ÞaRÿEÎ$$žM8efèƒ#0úýóþÝõ¿ >üT¹sÂTæhŸ;w¨BÖUá?KõëÕ +΋Ë5PÅí0,Æi#ñpºªÞ~s¸‹F¹$ýÉìÎVÀõÙØ^†Î“$ÜôƒˆDÂœ45@oÄõ¶­‡rW)¥J$²ùà$¿šJöUÛ8Ñ‹ æ¶#ì2]ÔëÉW+™gjøüùeŠæ&¢ñMYʶ¾™ÛsgîÀšbò¹^Ÿ½2‡ÚóÙeÚÌêÜâ‡ÁÀA¶©‹ªÍæv¶¾jà @Œö‹³³ir~ç…'sçÅ­KpøØàb<´´í‰ V¼ÜSÙw·µ÷ûÝ¥.Ãy ò‹ù¼BXœ9t‰¶5ôS;%'Æ®þ.-¥IÍ(¥Ýh¿I¦JîÓ4½#Øb£½‡oö܇Ö,mñÆ©FŠFíµ®¥Ðò¡€/ ´ïVW¥BCó úã½9VcãˆÀ?U¢»Ò:,4#ƒ‘zÓ";,C)V¥>,Vb›¸•›™Ò|—XSw·Ô¾²«„¨l<Íõ'ßêüäðòB}ÇÉt¦gК«cfÒ6²…ùlY£Yßa]aZµð¹swê»Ö>}§›O¯_×…¬Ú¸­u=°ÑPš’B3®&Ä u·*_uûXqòQéØ<žÎ3RÐ@bO|dubõ¡ý_€c!¾ýVzpWÿ ŽþÓt¯cìôuÕe÷6húÇ>øãÙc†æaíÅn}á«„K(¾šÜóUât]Ë"ßï’‡¯#¼¤º¶òª.†_£> +0·«e +endstream endobj 1670 0 obj <> endobj 1671 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1672 0 obj <>stream +hÞÔVÛnÛF}×W !kk½¼ˆ» ‹,¨ˆ%…¦“ahi)³•HaIÅ Pÿ²3¼H¦M+qš ¨$`—gwÏÌ™ÙJƒyçpp¦Á<ëXØÜÓ±Àà E'ê¼ð;‡'hàGMŽ_4Çf®¶Á×Á_v8²0n"æO;]Æ97À¿î|P^÷O Çxyør&RÕæ(é\†ËeœÌa˜äBFáT¨ø¿£)£4¥3£×ƒ®Æ4«þ«’Ò"rœèÖ–ÛáLH“¼“jW³™¥ÄH ýOárµYÁÛ÷;–Îl åY¬gÓ ×u™çf)´Ð^,¢|¦›EŒm0ŠET¿‰[DÄ\4:䬮בÐ{•·a–ƒÚµ˜­œ¯f!Ít%³r1®’¨¬§TÛN«MrzUmÒË‘k=”jX:=èN ¤Þ´]öúÃÁžd°wËp*Óî3„"ŠOééè(J¥ˆçÉÑp)%Ô@=ÞVHºÑ«¦­8‚@©Ø**ĉí*ÌNJÂIŠî +â#|)(ý_šLpßqÄñWàÉœ~xô+®¿/N •ƒ‡LÔŸ],[_⹫ñŠd«{, ¤½ ÛáSC9â(¾‘¨¦‰hÃ/Dó³\»ü½iEïFû8ˆmïK¹ýFõÿ¬žêé‡:õx ™ý2gèÞ> endobj 1674 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1675 0 obj <>stream +hÞÔUénÛFþϧ0@:Òz¹¼ €¬ÃP L¹¢ØK™­D +$Õ$(ú@}ËÎò”l9=ܵìrŽog¾9¤ÃZ¹¼¹Óa](¶uÁtm0(äB‰•k_¹œé ƒ+:Šÿxè®C<ƒÊÀß*Q5Qæ‡ÊPJ ð?*ïÕ·ÓXÄ…ñåøÕ+x—kºK\5[ç|»MÒ5ÌÓRä1…öÿŸ2ê§1, †:Ñm üI iKp¼0»Ç^ +‰xÁ7¹6Ôb« BÂôßî6¢¨p§¾b™&gË Ïó€˜.¥f¦Íˆc·zÌŸ0óHôHvŒJ‰éwäx% Òt[&d´ŒµT0« —%hC›8êjqycj)¢ú‰<=5Õˆ¥6f·Q>4F¬>©na®†Íäsk¡)Ó7ýßá±ò¬ÖDû°„{Íq‰®Š²hÞËÒæ1¬RÅ•´3f;-ï¦ù¸¨¿‚îyÚÐ%¦ê Õë«šì´ç?þsÓÿ/x÷)kg8D—•£m팮 õ¦ ÿÙPG› ,“5¶«#›[Ó± ÒBàp²ß~Ò˜B‘v2›ÙrX5[6®—nóø>«÷G<»ž4yAkÛqˆaö«‡2CfJÛ$ñ/Ölu—'ijœíËœ½‚ô,Ð^÷nÉ­2QÐãÍÿAñ/*ï\”{ôÎS µ-Ê©ÄW++ô4Å@ѳ{ú½ŠOÁ–£_˜gÓ4_êFÄù˜o6xˆòýÏ;ñ½€pa–â6¤y~nè³à[1tIV(EÊ&¼ä° ~~± 3|l †‰Uáé­]Œ4 Ý!ÓÅÎ I*ýû§ÈùŒèÏQ’îqÉ—{,Ǻçå5¼DÙþƒ H÷Û†Œš ”¾„Œ/pq;Z¬f£±/Y_Î77Ë9’³†ª[Ê·/$æ9^>Ý•˜ÿ}»åǬHnÌeËÔ²~'#“N¨\h¤¦Í_BÙ·÷óÑ?Bùøk8àlÐE4üJfP…ÜÅ{u…Z”¶ßhÏQšÄ¨’ó¯“ÓUã=ð¢Ç—ͱäéZÔ¸‡IžÞËÑâfŠKK=/p0úG.RU_à( ?Ië ¬ë¬,³í[þYä2’¿ ÕÏvdKZz¢6GKîå ­‚Ÿ ŽÃ+ŽVšäüI“&)ŠkìÑ$ý·Úí|1›ŽüÕåS9½ýc}K&m.WWY*ª>këô8šƒ‚Õ½?Š+ˆòcv¢(í4“iMDÌ÷›òwÙ^d’íÆú"‘mü­ýM€BÁõb +endstream endobj 1676 0 obj <> endobj 1677 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1678 0 obj <>stream +hÞÔWkoâFýί¸Z)’,ÃxlüHÚJœ„Š²)8K«ÒŒÁ-d›tWUPÿeïÛ¼BW»!UU烇;×gÎ9w^1`VkÜ ˜e5Û‡»`¹6˜RY‹jߵƭQÍÀñ_†ë0ÏÇäŒ –5Ž(Œ[ &µ:㜛ü^ûYëù·Ðd.´í«+xHuÃe®¶š¥ár'3è&¹L£p"õ_‚ïp(³J0³Ù„ºÁ » A§€´ ÂÞad8•)„ÉF©^7fk1B‚ÿ!\®2S¸~P³sl”g³¦ L˜žç³\έB¨Ò®:Q>ÖA'ºC ¦êDõ[o<åˆØi¹•DVˆÊ Ñ,Ù†YzÝfŽö¸ž†ÔZ.§Ebz{Z¢³¦V¦}_&¥“y™$Š77š(Õ´ýn¤c9~ÿ€MÄJWEÏt3Éá½î¸ÌÐd ™•ã­’r0,’²Š“ëBØNe»e×ô/0/UÚS‰Áå~ÿpNp³º„¬hlÁLÆ aTh“¹œ`öoÁǵk“±~€­SÂJòh¬E«MþÞôßõ;þm뱇ñ`ðØóá"“7oa*£ú7 ‰ñ(ŽŒÂÍ"¿¾NÂ%Bcx¬WðÇšâTF qð=†¯çav¦ÓRÊX!íóÄ'Â> endobj 1680 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1681 0 obj <>stream +hÞÔVÛnÛF}×W !ëhµ\Þí&€c3† +[Q$ÊEQõ‘–2[‰H*©äƒò—Y’ºY®]CEQú«ÙÝ3gÎ\h&ÖU߀IÞpLp¹–ç€É!“¸ñ.l´Þ`@7 ÿðex.ó=pMθ€pÖàˆÂ¸…¶pÔh2ι á—ƯÚuðlæÁEëâ亙nxÌÓæ“,šÍ’tí´Y¤þ[øº2KW‚™¶ MƒŽ áe é8.„³ÆîÉh,3ˆÒ1üœéMÃeŽ– $F³ÅTæ +7¶åcp³`Âô}˜åqn•a:‚¹N½ñ3amí£<¤Ž©61ü•8¾’ÄÜ´¼Z b+D-…°+ºQ^€Þt˜« ãˆVB+ä¸\@Bo_KufkÕ±›êP6º«‰òÍ c5A?„W +ßr}¼ßÅ%beórg¼p«»34YAæ•¿yZ9Ã,)­8É.„ãÖº[ÖnR¿ƒáûzÓc–æ77Ê¥ ºƒêÔïç¿þó£ÿ_ðÕOÊé2ƒ2ÇëÜ™«*4ª*üw©žO§ÐK&X®.·n`1æؤ¹Äæ4©Þ>ëÂD£³º3«Þr…ê-ÇËjò„¡(çÏ|§ì4ZàiÇu™i­G&EÊë ãy†”´¡–ÀàgÀ0–qóíTÆhO:óôRÆÑrZœž¦ËYÈœNzKCm¨ã““¡_×]aÓºTøøäx¯Ñ{³ÂF`4¯±óò¢¢Y"V€á5ŽÚ‰ûåÁ¡VÝØ8‡Ç¾éáïÄÁdõ©8´Zp‡wqöM%,sù9‰örý‡Z ryKæhC…Êtm‘%iµx¾,^Ù}´·ís8Îál8L^WŽTˆ[Žl‡ÈÏJQêpŸc†:hœ”ò—ÇÚ\ëxw.Ÿr±Y!é¥Òc%è(%ˆÏ3ÅÀÏçhYä‡Pâ&I/ÐŒh ÿ)!nڔƋAØ'ŽÇyGû:âÚÝH9ºŽîeÖ©“ÿÕõ…â»!מV1öJ·Èæ ™÷¤ª~—¸–VƒJΊ š‰NA•~ðø³åëö> ½ôÂ_àèál K˜Ë‡‰Dû®²ÄÍ5ÇÒXŠïPÁÜ¡}Õ¯Ðä ÑI³În·î¢*™¶Ð^ñ#„vÞYÎ>Él]é¦~‡!±;žÀ.Ã’P wÐÏ ú2¾€i¿ÈÔ@~Óü)¦·ÑtIbR›þÑüKRŒî¶¸n}`+¼_l@=’qzFQ.áUïÕ©âL8%Рί÷ÕàF7®žO™ŒÐüÇÙ®Úû]µ;apôàHQÖ¹vHŸýý>ûa¯Ý¹¢qãþ>î÷÷qð! È)ÚK¿‡tÚÙï´3¸yGº(Èoõÿh 0ÀKnb +endstream endobj 1682 0 obj <> endobj 1683 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1684 0 obj <>stream +hÞÔVmOãFþž_1B:ɆdY¯¿¶ÒQõ Ó«Ê$ëàkbG¶ÓötºÔÙ™ÝuH|¡E­NÕ$ofwfžyž™M˜÷Ž/ï˜×=ß…€‡à…>¸*ÙËz§qïøÂâ¬çàø‡/' XBàrÆÄËÇ(Œ{h‹§½㜻ÿÞ{k}7¾€! áìøìè&•í„,´Êy•.—y1‡«¢‘U–N¥ýsü-¦ru*ÁÜásü!Äç:¤OÁq!ü§Ø·2É +Òb?TöÀ ˜oåƤËÕBÖ*î8îù‚>–糡L¸QóBÎ=]¨ª]mbùLx;›ÈpÕ&V¿á&RŒD€›^ØA`…h™Cƒ6­°> ¬ûÕ,¥•°9Ó ÈéY…͆–9öƪ¦æÐoî ±T×ôA„ÚPõ^¡ÿ—«*õÎl=mà{;™cI²6ùÊÂ$C‘UœXÂZÚ=¯«éŸàD‘=™gEÁ½‚í#ùíûå¯ÿýè—|ó‘´sær¼ÕÎÝt¡cºðóB}½XÀm>Çv ¨¹m›±Æ­%ΦKýö›-\4ÊkÓÌV Ôlùx»l.ž8ú:ˆXäëI£žöƒ€¹ÞÓÍÃ…K•r*’P|´ãwº™‡tqœ«ÚñÉlßZUyÑd‰••ë¦£$){¤Ň@yã’œ2<ŽNÛãësxU:ÒÆAf2|³Y~]ç2KѼ^4''Eº”‰•Ømtä2Ž5@•lÖx¶*€žÆÏ æT’Õ¢ü²oÊ}kaP>`„º©pÊó²8;M,R¥‹ÚÒé¯ñû•üE´„ðfçø!º×ýOR²PV³Ðùß“˜¾už6)¬g‰ ZÞȉNàî¥,—²©rYÂ\¯ß£y—§Í4}”SÜU@kº%Å3üÜœÞiÕ¶£îÀ§´¸I™ákªR tóP7ĸ.ÿäd¾AšXhïä^UÍ%Ñ$V[ËK b“t šÓŸˆŽöj½Ri¶5nFû“Æ“…]åEŸlEë*Ö%ŒâwôVO±&'eÕÔ}Èûðnô‚«™B³"kßyDø¿ú‹"}SÎäâðf\v(3‰[D<Û0ÝéÚ+Ëäêgw3¹È’n DDóª@wFv—¦ T§ì:>¦õEIs!óy¡ÝwÃ\=e…Þ96$A_éôF$`½Ä@¥¦v¤†„üèhO8-–‚³‹íE¹AMŠs¤½@µÍ’±_ÜÜŽ¯.‰.¸‹oïÏÐßߎ1!¼šÓ?¢¢k€b§÷Ÿ ß>&š ÒLc¼V·d®Æ¯«HFm¡Ný¨Šø×I~úoîšG4ß5•as´7–\Ô²£Šî÷¶I(Ú¤ÌU°Ï§‹úRÃ/A”¿£²ý™ð— }E +endstream endobj 1685 0 obj <> endobj 1686 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1687 0 obj <>stream +hÞÔV[o£F~çWŒVZ ºë ÷DªäÚ$a‹×&I¥ºÈ¶6X€›¼ôõ_ö.¾$ÝÈ©ªª<ÌðÍø;ß¹f4²’.nfY•’¥[uˆáXDWIÁ¥Dú)’.®5¢‘(‘4FTøƒEslê:ÄÖUª2m$X¨j-¤UUU'Ñ“ô«x×Ĥ\ >}"“BÑêÈùªˆ7›4[?«x‘Ä ®ü}SzcŠQÝ4IO£še’hØPZHf¸§<^ò‚ÄÙ’<JO³©%§@I¼çx³]ó²æõ"É4\p΢¦E(Ó]×%ÔpTÕhÜ´µ­îü§Ì89‡ð`tôúÜßÇ­Câ84œ.¨–±.ÌlåÆeE”žEmùn»ŒqÇäŠ/› IquåL¡¦Ü^µ—ŠÅc{‰5«ª™à«n1ü`N:è¾a»ðû l«È›“ånQ‘{Åv¨&ó–²líåYk ²TÇJÅ°3fÙ]Ü ãeRÿ"šë*=‡²ÛcªÖlM¢X}Bºõüå?¿úÿ%ßbît›j˜9µË¾¯B­­ÂWj½&Ótåjcq+c MZrhNëí…éò%í:³í-›Õ½eÁxÙOž(bÍàSoùáøTàG&–iQ“š‰èº+¹`hîf€{o…fWr ³Ça."bv xò2o©ËÇx+$d´+®¾å©PŠFw€Ï¢/¡ÿ"C=À6»²¥Æ€Ÿ-*ÜUâb%¦*DUÑä.‡þÌõ§7(oE>¼RT¹ëÄS²}'“Óþø¸·0vP +:‰õv$¸½ƒœùÓ\ØQ`iYÅÙ‚¿ËÙ©7ógQ<ðj_QÈ»=È蜅ƒwsì#'çÃÏF 'Ýc¾Îùûâf¯óýbìtWL÷$ÂXˆ¸7 ð¦èÓ÷º~›?u¤ç 8ŽŸßãþÑÿ¹ã½øž~Íã#âs“?ŠŸ‘$—Bc¨ø/Aؾ¥h?Ÿ«ho±©pgPÕ¤?ð÷MÙ)«gÄ‘™E¼8€6ÎS†dâccŠI<û¨½kEÓʈŠI›ìÖýeþ”‡P­ãH ‚aø0†¡öVර5ôÈÆyê¢'O¡.ŒðIâ…××Ó· +­Jùñ¹…vë >Gîñ%à¿ž‡çpŠå>E%€‡oJÂc ðÿ[€6@ð +endstream endobj 1688 0 obj <> endobj 1689 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1690 0 obj <>stream +hÞÔVoâFýŸO1ŠÉnŽ€$m%Ž8 • {É5-UåC|2Ùæréé>P¿egì5„#Q0ºªjâõìî›÷ÞÎ,¨0kœ^ù*̲†¡ƒ©Xв ÐHÃÆ´ñ–7N/UPOª +~ð¡Z&³-0u…)ðyCA¦´0ÆÇ&SEþÐø]rKh3 º§Ý“¤²j1KZÌÒ`>’ô’K£l›ÑùÓÍ/j¹ b Ç»Z6Y_pÙÁ¸ë~G Ó Ž Žƒß§av_G8„’:Ïc$†ñ§IÈ[„§,U†ZîÖ§&Ì}yv5ášäãUz€k~‡w‡Þk®!÷o†^×ãìEŽx¼EolçÙ#>aV‡\ïãòÎ[×ñ‰Øšì¤Èƒ1ò5~ÙõƒyÁ­ÎuYìwÕÞýu-É’Ô[ŵ|çTÇó†îωÆ·t- pJR‡W?¤†t>/kõ|ßÁ8w~x0gøoÍ g¶’$aŽðTxuxù+Ú²Œý0É¢<úåuúT¯ƒ{ç;}¿Ç{·=~Wø‡áº_‘Ùj¹K„pöÔr…¿ç i•LÔråaüfØ¿øZféb—H -$/Z; üè/Qiðå‹"ø ”sˆàÇ’IÑÚU]¬æV QÉ”`¸öääÄRÒt׊wúÜé÷;~ï7‡®ÎçŠ0(2aTÐŽv*q¤¾­›ö ª¸Û ÃT@¼äü·Lé‚ïÜ9[Ù¾<Ñ|ÂOÀct“á|/'¨ùpâèÉúrùW™oÅ·ÿ#À+² +endstream endobj 1691 0 obj <> endobj 1692 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1693 0 obj <>stream +hÞÔVmoÓ0þž_qš4)aÔ³ÄI6@ +,CÙTµ„(¢5é‚Ú´J3^„øAüKΉ“´¦QVí_ÎÎswÏ=¾–ÁD;<2˜,5a‚C]°\&…"ÑRíi¤ž2`¥ã@ñ‹ sâ¹à˜”PÑL£ˆB¨…¾èJëJ© ÑGí­§`ž>;8€~a0—¸ú|RijY–Oà> endobj 1695 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1696 0 obj <>stream +hÞÔVÛnÛF}çW  ëh½\Þ£¶+ɆÉT¦EQõ°H…†LºòAùËÎ,wEJ–ÛMST~àêìêÌÌ™3KÛ°4NÎ~¶a¹1|‚úàp¨2#7~JŒ“SlHrÃÀñv°(„ÀጠH® Ž,Œ»ˆ%—FqÎHþ4~7Ç£SðXƒ“Áñ1L+ËYh®—Uz}]”K8/ë¬ÊÓËÌú#y¡œ&”`ŽçAÏf¶ïA2l(}"Ç…ð[îY–.² +Òr¿VVϘoH £»ôúf•m$ï(1|ÁËó™çNEÀÜs·)TÖ.7±|&ÜMT‡8r«ßjIE"ÀM7ÔBP²Bh%„§²M75X=ŸæÛ›EJ+aÖÙ¢Y@AÏÈ,-æ™êØDª.ß©C¢yrÛÃR_Ð5 MÕ»A„¿Ÿâ¹ªu³³¸½¬á+™mfŠr£â­K ›$¥â¤º~ ewÝýž~; !sͨ'¸Ý,=°|@?ÿøÏþÉ·_©wNÀlê×½s¶.´• ÿÝTãÕ +fÅí¹-͸ÁÝd8›ùí½%³Óƒ©f+r¶|¼]¶O’ˆæ:ˆXä7“F <ísÜöæá¡J¹.²ÈanZ¾yS”½WY^L‹òÕ«wé&.k„³²L§iUéjp[ÇU–Î͹…s >´càÑ•3”„øÉq]!o?ïC߃äG|¢¼½Æ’á{!ðWLjoã$ßiz”ùMU”u>7óõmýŽ_$£‹‹xÏ’óx!´°¯ÿ«û[€ÌR‡Ð +endstream endobj 1697 0 obj <> endobj 1698 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1699 0 obj <>stream +hÞÔW]oÛ6}ׯ¸0@Zbš¤¾ãµ€ê¸E‡$3µ[Qïµ)Gƒ-’Üuúƒö/wIJv¬&i74ýHHRçÞ{x.m3XXýgW •¸Ò¼(—B)­Ìz’Zý§ ¤™Å8PüÇE!‰#]J(‡teQd!ÔC,Y=B)u!ýÓzmŸž‚O"ö‡ÇÇ0.‘È^/J±ZåÅžµ,31“ÎïéÏÊ5¡8q}zŒ°À‡ôÌPŠ'<ØsO¤˜ËD1‡_K§ÇBØ9RÂèXm–²Ò¼£Ôò½‹ ˆánÇ@¼ˆRÏ”pí:ÖO¸w°Žò(u\½ˆåïĉµ$1ࢵJ¨l9o¥à~“®¨jpz 훹P3n×rn&«1¶ ‡øv³í¢ÙTή›MÜŒ”ùX«põÀcrU¾Æøþ§ÈU®ÍÊ|;«á¥F„Ù²¡¬šxë¢ †§¤µ¢Jv΃°ÕÝóº‡ú°ƒFijã§ÌL}pT ?}øê[¿_òÝ£:;7$LmÏÎݹ5.|ØT“å&ùí*s; ÍXa“V›ÓU~{ëpA9'mg6½rÝ[^/»›'M¹¹b¦ÓÔwaH\oõPîªJi[$èÌÌ$?>ž:ð÷ÞݾºJÎ>Ø—mʼ¨³©­·õ 5xr™Ž./“‹ä·d2J† ÂøaG'š1ýñ¢öO\¬çrÙCøñRfù8/¼îŠÂàŸžŠï’RŠ¡(ÚùÔ™:ƒ»èó ¦víˆïr+b„;Üçâ/‰hÙ¸'ý)G5ΓW#¬»z¸ºUzåÇŠ¿åÓiqt×+ï[Ô€ïôe—P4ÚÞ9nÎj*kRß i”½•.a]ÀU>—MS[ëŠq?â¶l]b¤@?¡dˆwâê 7q‹íª•Q¡Ý¸wÛå†ý?MÐC×_=?%„•ùÂùM!ˆšZ>·ûoÕqٷчõ§]0ÜÖ»øîßLJßZ÷ÿwýðE:Ô®÷¹+ë~f¯jí¡ý'É·aó&5eó/äpót`vÖšQK‹onòbg:í²1~kFX–u.+å/x ô>O«Sé$«à±2Ï/ãÑ$}·d­Þê¶ÎñN::„M:ƒ{/ô~ÞŠåVÂL óúZàà ªºT?¹0*ò"ü=r‡–æP]âzóRQ7'÷Ÿz ݤ 7hÕÍqzªh/ÅÊ°ž´ß ÿ`‹ñ$ +endstream endobj 1700 0 obj <> endobj 1701 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1702 0 obj <>stream +hÞÔVénÛFþϧ0BÆÒz¹¤xØmØb ŽâÈtŠ", +†ZÉl$JXRM…ÂÔ·ì ]¡ŒMQ”´Ë¹¾¹%¦Úùͽ Ó\s,p¹¶ç€ÅAIm¢]…ÚùkL'š)€ãÓs™ïkqÆ„s£Æm¤…‰Öeœs ÂÏÚý6x =æÁõùõÙÜ)Ãô˜§/¦*žÏÓl +ƒ¬j'Òø)ü¡¬ +J0«×ƒ®ÉL§a¿2éq¼gk{$ã±TgcøA]ÓeŽž¢I~‹çË™ÌK»A¨9‚¹†ç°žLX¾ï³=Îí*Ð2ö’‰á3aï11;$`•LŒ~“¿ÌˆÈ´½&ä¬M&D¯ö6Î 0ºsõ‡å8¦›Ð 9®.Òéë™Ázz-ö¦RÉc-$ª“›= Õr½¿"Z½íú¨‡W´¥g¼J +xo¸3uY›Ìk¼EVƒa‘ÊTqʺŽÛ¤Ý¶kú˜>‚zÌÖý®àfuíá`òšó¯ÿ¹èÿ×øæ•jg¹Ì¤Êñ¦vÖ¦ ͺ ÿ]W_Íf0J§Ø®.5·ab3æ8£¹ÄÙ´¨ß~5„…D9fÍ`Ö³åŠr¶Ü.›Å†¢Z>ójÒè‚ÒŽë2ËÞn.,Š”7ABéY}©Ÿešu¿›I$OÒ»4»¸XªÅò}<[ÉHO##2s¹í›þ¾µ§’¾Ü§ÊY.[øL–*ÍŠI¤O«¢'H?Íát +'Æ!òɵCÃx^ùÓ9fòÙx†«yÍe«~þ9-’Gˆô-8Òíp½l’¿ÃOâ\‹ы‹*8$ïÄ7 +^ÝÂÉ1ô½ç£’ñ§MÎ ÚÃ0¸ F„õœ¿ wßwŽÛ¯Ù»v¨woàÄCúW†¶CÞ\U¹üÇPOÐ+ê“þ²#4A¡ƒ‘¸Œ¢lYß*ÑbÙªg«95ëB9|»;=Ù’/ˆM¼H?c²Pä66ªñKHáh„)HÏÎZþ WOˆz÷v„ôðÀçZeŠ,¹˜ËB­÷> endobj 1704 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1705 0 obj <>stream +hÞÔUmOãFþž_1BBgC²¬×ï¡­Ä œh.2¾«Nçª2Î:1—8‘íܪþ þËÎø%!*®ê©* íîìøyæ™—EƒiçäêFƒiѱt°¹†cÎ!—¤stN.5Ð H:šŽ¿¸hŽÍ\l3. Xt8¢0n -ˆ;=Æ9×!øÚù¤\{—`2.N.Žaœ«šÃe9Í£Å"ͦ0ÌJ™'Q,Õ_ƒ·H¥×T‚é¦ =i– Á †´7ÂÚbû2šÈ¢l¿äjO³™¥¤ Þ}´XÍeQázAÇ4\g1Ó&t×uçF-Ó̶Ú{ÔÏ„±sé¡ìèÕ%Êß$Ç­Râ^N› ŠVˆ6ÂlŠÔžÅlåýjÑN(¥œÔHiu•Le¦Ò¸ýÜ8åñ¬qõÊ5µê– ƒpk£Aò ÛÅïǸE¬|YßLÖq TÛaš"È¢á[f V©Ê§´ aÙmÞ c¿¨‚æ"©Ã Åí ®Õ[T ³Ю¯_þs×ÿ/øæHµÓm¦Qåx[;}Ó…ZÓ…ß7Ô³ùütŠíjSs«6cCZHNúí‹*t4Ê k'³™-[T³eáó²yy‚@ÔïË\«ž4Ú ·eÛL7¶O:)å­H€d¥ZJžfe*Ér]vá€Ì×gÑîùpXÀif]˜È¬HˇÚšË$Ôç~=`Ü–2Š2TÒP ÕÓ팘ô Z¶%±ze%ÜÁÀOqù±Ñ^Ãïb“y½ðe\4º‡*ü^G .%VÉÑ !Û8+ 4o°¦²$ ÄéÞ¡½r$Y=MÙÁ÷.8œnÿºd&Rv?ïÖ›Ü4‘°ûY÷|h~j÷Ùë‚@6,åâQÚD¡¹Ö×\|ˆæk¬šQç¶ÈPü¡wÍ¡Ý3QÁŽto4 Ú‡*ÞìÄ™ËrM:3,`kçÔYJ…‰…×ׄF•ßtݧªê+j•åj “s9M³‹óPA!ùE4Gûü6Š?+ù›„¸ _–é䈒¶*ó.Þ÷8"ƒ¨Œ(KëÉ~#Ä3ãE…*ñ^rŸ‘8öß=?ø8 f¿Ž†ÁðÝè¦Öü|ÿ+ʉ®£}+šdŽóåêˆ4®pó]”Ó`Ý–¤n'âí÷éÜ„â˜t_æM?ïß@ÖïÁNÒ‡Å×´Dx>!ž %¶ÄÏÌ9‰Œ + o†oú/Lד FûpxWžOU…>»Íeôùô%:ÿ›è|ïìúŸsÝ|×MàGW¯gÛ›û4ê­Ø/Å,*FÔi‹[™×µØCOªvÃ9œ>ßPø„ߢ¹EÚQþ7ø”‘l*_Í> endobj 1707 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1708 0 obj <>stream +hÞÔUmoÛ6þ®_q0€Jc†¤$JJ°­íšÔ°Õ­F5 šDÙÞüIéûAû—;êÍŠã Ɔb˜ýôñîá=ÏÝÑæÆåÛ)‡ynH \æíI°dÊH7qyÃC\Ã/.Üs©ïk1Êkƒ! +e6Ú‚ØèQƘÁïÆ'ònxõ Ùõ +Æ™É=ê‘í<‹Öëåf£M¡²4Š•ùSð=^eUW j9ô8åÒ`PAJ Ž!÷Ø%*ƒh“À™Ùã.•d‰0ü#ZïV*/q‡!u%Ò“Ô‘@…åû>PÛcÌ®ˆ–ÜËC¤O…ýèÕÑVyˆì[müRðÐö!t²B4J§Î6Ê 0{’ºäÃ.‰ôNB%Õ–zõÉƤ©Ýnk§,^ÔN¢Zwª%…þ!üʨM®íú?Æ-beÛê$¹ øÁt=ʉª!óú¾í¦¾ ‹TJÅ´êBH·‘ݶkúp/õ¨Müž`¼Ú:`J YO_þs×ÿ/xûS×Îr)וcMí¬¶ yÝ…_7Õ׫L–slWW7·É±sœÑ\álZºß>›ÂB£Jh3˜õl¹¢œ-‰¯Kû𨞟ú²š4½AoéºÔ²÷/–fÊ’PfVo`—mw½ïV*]Žq&$Ù]]e˜e’Ð Íë}ß;ú”ËB¢}»±¸ˆò)š‹ _¯*¾ Λ{Ó2h¹)Ò¤ÛûâÎà›ü쎀åƒæéº •îª³Nnμ2UÜ£W¶ÖÚ™–‚üi¿jVe\pM«•éÁôP Üî*n’þ›`^Y?Z­~A{ÿ<ìÔÏ +â ø¼]&ç°+i_€NÿVtÜ'h MøÒM*^¨Í%BHâ—‰ ï0ž¼Ñ> fƒáÍènŒÞßM»”Kt"÷#Ôs@¡‘®£½&­iNñ¯ä½ m~ÂK-öåxûà-xŠÝ2Ίéþí$ÙqX¶ÔÚ\ÿ‘‚ÓQ0Ä6C¹ð› sVU§iWWÚ­Õ)Šúh^Ey~rÃCÿÝk=&SÌ ®u;)iÚ´6õ;À’<ÖèùŒ>jð‡õZÙCü¸ŸËk:»½Eû0˜Ìà#N~Z¨}Ñx{ŽÇe[½œÛìåÜtùR“Äh[ä‰°Õ –p˜ÁY9r}˜»ÒeÊÕ“ÛŽ¡hG=J1fÇĨÏé{INWÇG3ûzòL|¦íGÈüuu‰Z 0²² +endstream endobj 1709 0 obj <> endobj 1710 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1711 0 obj <>stream +hÞÔUÛnÛF}çW  mi½»¼Çm[V‰#HLÓ4, +–\Él%J ©\Zäƒò—Y’º¦FÚ4(*ârvöÌœ33+3ãüñDÀ¬2<|€x`s(•15®"ãü‘ÑÔ8~ñ!Ÿ…ø6g\B´08¢0î -J>ãœÛ½5^›O‡Àe Îgg0*-°À\ÎÊd±È‹Üµ*§Iª¬Ÿ¢'ÊnBIf».ôž Ñué8.¤·Å«$S%$E/K«/|æ™9BÂð]²XÍU¥q‡‘á:!’ó˜ë“v†Àœ€s§¡éIæ{Ý>ògÒÙÛGyH[o"ý8¡–$Üt‚N ÊVÊN +é¶é&U Vßc¾ùb•%´’f­²f9=C³°˜k¶nÏZ§2½kdóäÂE®¶'éE†Ñ#úŽâù.«\6;Ù:­á{˘0U Yµñ–E «¤µâ$»”žßéî8‡Eý"Ä sÌ°/¹h–.XªÐ=?ÿñŸ»þÁ7¯T;Ûg‚*Ç»ÚÙ›.m~ÝT/çsç3lWŸšÛØŒi¥p8mê·7–´Ñ¨2ÖMf;[¾Ô³åáõ²¹y¢H6÷AÈB¯™4Z ·çûÌv¶W—61åIЙáâ.©Fe=y¿€oA\l;Ü¥ëäÚh\?XѯFtJoÝ’@ò)Ä&¢l0bK´Ûø™âîªÌ‹z›ÓåºîÁÉE'±u±ëÙUx5õ¿›«i>ÁÕÇ> endobj 1713 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1714 0 obj <>stream +hÞÔVÛnÛF}×W  ck½\R¼@m[–¾$“<”EÁJK™D¤d¥(úAýËÎpIÝ\Û’Ó"¨m`Ws=3sv,&­³÷¡“²e›àp,דC![ië"j 0 J[†Ž¿x®Ã<“3. šµ8FaÜBY4jµçÜ„hÕúI»ê Ã\èõNN`Xè†Ë\m>)’Ù,Ë'àç Y¤ÉHê?G?b*S¥Ììt m0Ãî@t©BÚ/ÂÞÄd2–$ù>zÛp˜­eú_’ÙýT–UÜ~Ô²sl,Ïf˜0=Ïf¹œ[ªÐªöJ‰å3aí(±;d`VJ¬~ݯꈨ´Ü¦Vˆ¦¢S£MÊèm›9Ú‡ûqB7¡-äX] £ÓÓru´Úìº6*Fwµ‘P'7:Xªi ú <%t¨zËñЈWŒUÌ•f¼-à£î¸ÌÐd²¬óÍó:©j§® a;MÛ-k¦áaR—Yš×ÜP×è66 9?¾¹éÿ7øú#ÍÎt˜A“ãÍìÌ5 š…ÿ-Ôóé‚l‚tuˆÜºd,ñ–ߦI|{Ð…‰B9fÍìߖ#ª·eãvY/ž(jx̳ÕK£ ZÛøœMk³y¸0©R®ŠÌò,2ÝÖhÅô.bm*Ó¢—L§¿&£ÏÊ¿—¿H*²(#³w(F'º*ñ}™ t‘ÀrëðÇæ}th]Ví¤\h”u+mô®Žîä…Ÿ#Lk£Xï6¾&ãXaí›Þ„2_¤±–Η‹Sxù×þÍû8Îß bËo'g:/(g¬eð=ð.dð] ½ýÅ[ÎÅ|6Ìò2¦œÄú6>üIÑÓoç†Ap{=D¹oKèŠÓíÀ©ŠŠyc½ÁVG|R4?Pt;ôoh0á,æ(ÌÑ?ìÈðªÿÉ€·“ÍÆ&[ዬ”áT¢tu›KB}º—"©Ë®Š§r­æ•Ó–UÌUtWÈW„Ì—y훥kDÓÚã.)~%ª‰Ç‘Ý;­Á¾lǺ5«UôðŠBÂìË“½ åƒÌ«r€š\*ùEί®¥@ªâGÊé +¤´Mæc(°òp +4Í9ŠÛÝy–ukŽ¤ÀV!ÿˆèø RmÑ2)¯zS?[«Ú³„±â½þMè÷ª’Q<ѹÖ~·ýj‘c„ÑÐEP´Ú¦1@j¬çÒ=ìÇóÀ?¿¸ê«ñøµ@74$ú7–ïC ô1ë0ðŸzôÛ üÚÑT|üºÑç^MÚ@ý–£ÙúÏ£ÙúÚÑЫ ÂC·Ân…A¸»¢\@;e·óµAX/ÊÇý&î¤4íx~/> endobj 1716 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1717 0 obj <>stream +hÞÔVmOãFþž_1BB²ïȲ~·é¤” +Š—öÃ¥ªŒ³î%6²ÒSu?èþegÖv^N$HmUÉËÌî3Ï<3;·Ì;§—¡ó²ãZàqlß‹C!;Iç\tN/ 0@$ÃŽÿðcø |ð,θ bÙáˆÂ¸6wºŒsnxê|Ò®†à0ú§ý÷ïá¶Ð ŸùZ>/¢å2Íæ0Ê*Y$Q,õ_ÅOʪC™ÌrèÌpƒÒ%p\˜î{"£™, ÊfðK¡w ¹ZŠ0ü3Z>.d©p‡¢ãØ&ç2ÇfZA³}Îí:M×džÛú1fÚ;~”‡Ô±”Ó_‹(I@§í·J[Ól¥0†nTV w]æiw³ˆV¦VÉY½€”¾–éÌÑšm×ͦ"~h6™õ—æj¹&ýaµÑ§ôm/Àó·¸D¬"¯=³U\ÁϺç3C“ dÙÄ˳&VIiÅIvÓt½VwÛþ¾¨ßÀ0¨Ïl-èšÜ¨—è.ªÐ~÷ÿüç[ÿ¿àë?©v–Ç ªokg­»ÐhºðŸ¥Ú[,`’α]=jnÝÀf,ñ’–/§Eýö‡nZh”3ÖÞÌæny¦º[.Ž—õä¬çAÀ·¾i´ÀÝ®ç1ËÞŒnZ”)o“L˜jº«U)™îLJ¨¼ˆ‹I8Õ¦úTßtºCce ÎàO‚G‹4«’©–ä«êŽÄèz4¾D;\ô®®&!Ïé÷l:ÍŽNŽx×ÝmÐN(*šÃ›LRì“:&¡xÊkVgÛpÏdÐßÎ`ùUâý·ï¿D¼¿?ñ»,ªd&Ë͇ӿ÷Äp< 1ƒ²¡[ø«œ)À«t&i){Ue(û¡l&£pö„0¶ôDûÑFŸ¢Gk«Ýër«CD³2ê‡7çAMñrIPêÐyP=D>}S)ßéëíÆ(lCí{VA 9?¨oáNò¿À=Q°qWGâ.òLÞ¦TwQ¤ó¹,öM„®¢ :Ÿ_ £ëá8ÝŒ›lŽÑ<×¹¶÷¨Q<ÐLTâËc;uбÙWÕîµ}Ï–TÇE×âlºœFÜW<Rî-^õ”¿Y¼cš…µŠ»¶â6­*þë&E¾T[HÂâ óÝL7†èØ*Í¿X—•ÅÛâÇP× í—¤ÞwG +Y­ÐUdÀ×vNoí«.~§GÅ8>BðQ°~V|Ò°~°¢R§UÙ?Ÿj ™}¼p÷QüY|¡Ëß$Ä'€Žô.Ã]ï€Â઱áhU‘²Î¦:üõÃ7Hü cÜð¹.^ÜrßfõLÞwã‘ë|ÑsöCô¶WH«ûqMõÃìgª!ò»J¹wàW^8TM½e®ËNÁ£#Œ£åk]²Ã‘°Z:¾ZÞ×Møüÿ÷ÏäØ£8­¢,ÞNŸ¡ 0ÁÓɹ +endstream endobj 1718 0 obj <> endobj 1719 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1720 0 obj <>stream +hÞÔVÛnÛF}×W  k½\R¼8@…¦–¬J”6* +†ZÉl)ÊåÅiäƒò—å]²]ËA‹¢ÒWÙ3gάVuçôb¦À:éè*ÔÍÔA¥óΪóÎíœPÀ]u¿øPLƒX&*%”»éPŒB¨†6×ït ¥T÷Sçƒté  GL°OíׯaËŠILi»Ž½Í&ˆÖ0ŒR¯<ŸË¿¸?`*µHňÚëAW!ŠÞ÷¼©‹à¸`z{ʽ%Á‹–pË]Å º`Hpþô6w!Oò¸ŽÛÑ1t,O'=S-Ë¢™”jE¡yíùK,Ÿ0mç%²#6¨ùK¬¾æÆʱ_jfE„ËXÅë•h½$¹«Cšß-=±bRÊ—Åñ´¤H&=©Ü6*7Åþm¹‰Oªô°TUgâ³ +£%ª× ý'¸ÄXñ¶x³Ìü®eÃ$ŠÄËI™o•É°I9UT°Î˜nT´kÚ~O¿ba6“h’ÕeT)–=u$ zþøÏ·þƒ×?EïTƒ(¢s´êZ«P)UøïBí‡!Lƒ5ÊÕâ–c‚3špœMUèí^f*ù’TƒYΖÁòÙÒñt©×eÅq`K/&M,p·nDÕš“‡2UTJ«"ñ³’ué.¢tµVÛ,=#»?é£Ýºý±íÀdh_ úÓþù ^¡y-S Þ,ÑÑI3 =qîœWQ±ÐrY¤Ý·!_ó(@sšœùÞç©ù|!-ä…ü&äçþÁ +îÜñn·^‚fä)HZ¾mק +š:³!ÚgE=WïGXɺª¡>H£u/ÏK0N¶Ÿx|8¼ÉÕ#*ƒÑðòrxÓwÝÚOâQš/fgqÌ£ôppö|:E»3v xýѤF‡ö£‡èÐzæ·Ó¼ßõ6L½õ z{}u颽áäËVg!Cû~–ûm(TX§x ¶AÌÿÈxä>Ý`êüˆö¹3¶‚‘sÑïLÝŸsŒhn†¨ óÌì¬v1ìÀ_azQr 3>‡ùxèÎÊl{1OIq´¶SqFH_e÷71Ú*¡ +SÄl×çÇ ‹„L0ÂGA4ííw ¡Æ¶‡ö0üèù¿»Ÿïø¯ü5’–Ã1$¸@+®9IÊONGž;>÷R²åB†/í¢ü[.Âæé’_•¼SÌtÍgÎh8ž•Çßø^%€BJ +ÄÝ·¢´<«Ž|#o³#¨ýR*eÕ‘Za„nÊH÷^˜=®}AÄjO^Wc¡t‘½ÝWÜÏÄ‹þ=ã>Ô*ü>]<"‹{.ü’`5‚(Ô€öFËmö1äe›ü€+ÙhuÍ_eò™îþMs¯élˆœíý‰ Oµí{xÀ‹„ÁÊK`Áˆø7ŒÌÒx—´·§ÄßFxûõo½øXȯœxBÎcTXCš÷ÕßÆ^ÿÅÿ3l%-¶î8(R]:8¼Ãü%ÀˆP +endstream endobj 1721 0 obj <> endobj 1722 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1723 0 obj <>stream +hÞÔUÛnÛF}çWL$ ci½¼“rÀ±d#› + +í¢‹b+-%¦%”› èõ/;ÛîúP•v9;{fΙ™µ3åòþƒ³\qLp¹–ç€É!“J¤¼ ”Ë;t"E7€ã.ºç2ß×äŒ,Ž(Œ[h &JqÎM~S>ªÃ;°™·—·0Ê4Ýcžºœeb±ˆÓ¼M ™Eb"µŸ‚wʬBÌ´mèéLwl¤Cà¸1œ öXŠ©Ì@¤Sø!ÓzºË5FH~‹U"ów(¶å#9‡Ù0Ãô}˜åqnU4ƒ¹NsŽü™a휣<¤ŽY"ýV¿”Ä<´¼F ÊÖ0) »NWäh=‡¹êãj*hg¨…œVˆiõÕTc¶Z»}W;e“yídT+×mäj:}˜¼6}Ëõñþ·ˆ•-«“ézRÀ“æzLWe ™×ñ–i «TjÅIvÃpÜFwËÚ/꟠û¾Öó˜¥ú=ƒëÕÖÍAõšõüå?wýÿ‚·ŸT;Óe:UŽ7µ3Û.Ôë.üwS½IÇ3lW—š[Ó±sÒ\âpšÔoÏša¢QNY3™õl¹F9[>/íËFõøÌwªI£ z;®ËL«8N,9TÿЂOÔÃ&㈄2КtþQÓžcÍQÅí›PMd”ÝŠ$ùEL~ ¾¬$Ú–0éÄO±x…¾¢‹ÄÈ3~D +QXOC ~ߌŠMïÒ Tv2—t/ÑBujW[› ¹!ܺÅ"T1–×X&‹5ze)ðÊ!xUñ<“âxÈ}šh§Üvh¢šeÉ–îTH—‚1…ÓÊ6Øú¥ëŃøB YÞ¥/Œ‚›¸¥Q‹@iV Hô—¦P®h>.Ü }kÄh•bZD¡-×E:OooÆCxö¼Óm(ö^×ÜÑLßý~*ˆj§ŠGªè½@hî÷ç"¿—©ÌDQãlg†¿½0¿íäà~ø~8FûM0ììq9'Þ@Fbg‡ ïnÑþt¾®\¦SýKõ¥ÃRåp½#*µu&ŠZö:•TNI-3j¡P‹_A ßBs“ʆ–‹‹¶7Ÿ‰ +9ý] + 9 4‡½ûe×GÛý‡ãH+õý–@è}0pÛ%jYÂõ5ðò%|ó[åätÑ,á•j€vi¢9ÚQš\®ž Sªm¤qóM,”ú iªIŽöúæÃ|I9$S˜‹gI9MK^¦[OÛî™ *¥šäò ~u4¬þ^éÑ^&Yþè58̳´c*ð"‡+J¥÷òýÞ©B¿_½ïË¡7S_Uê‚oÕþÜ©DyGÙrU^“Ä´M&ŒÆßÐ>? éξN'¹ahnÓ85>Ç‹Ú¡ýÈK9.{áW| þÿK€£V1 +endstream endobj 1724 0 obj <> endobj 1725 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1726 0 obj <>stream +hÞÔVÛnÛF}çW !i½\Þm €e3‚ +GMdÚmC-e6)”¢Èõ/;ËB©ª“¦.ŠÒ€w9;;gÎÜ(ÊÉøZ‡E©Ø8ÜÓµÁàPH%QFròR‚DÑpüÃEwæ¹àœqÁJáh…qeA¬ çÜ€àAy«^ù/Áb.\œ\¼x¯ Mw™«æ‹"Z­Òl“¬’EÅRû)ø¡ŒJ0ò`¨3ݶ ¸lLÚd7Âþd{&£¹, Êæð}¡ u‡ÙjŠ&Áÿ­ÖKYÖvý@±sl¤g3Ë& Ïó€™.çfC´æ^"}&ÌCŒ)õ!²ßÆÆ«#âšnrVˆ.Âj½Ê +´¡Íõf=h'ÔJΛ ¤´zj¦1KmÕ^µJE|×*‰f庅T [ЋÁ¡NìMÇÃû¯q‹¶Š¼9™oâ +n5Çeº*[“e‹—g-&©§¨ a;]ØMs?§¿ƒîyÚÐe¦ê ×›­šÁèÖ/_þsÕÿ¯ñí+åÎp˜N™ã]îŒmêmþ»®ž/—0KX®·¦c1–Ø£¥ÄÞ4¨Þî5a PÎYטmo9¢î-§ËvðhÆÇ<»é4Ú ¶í8Ì0?M. bÊ;’P{†›4P½O£Ùf)‡ß,e’Þ¢¼y?=]ùú6Znd¨¦¡†øoÛ œË]sø$ë"ͪ$T“|S àåÏJ8À¡Ô¡vVÃǻ֡´ŠïvF9Yë› +~]K2C.‡üvÐ>qTJx>{~Ú¸Œâž×3ÿü +ŽþÊ‘ç]!£÷(>{hrh2 ü±?#¬Çlüm¸ëÃp×Ál2?-³7‡¡ÞÜ|ø5ÊŸrzrzójÔÄòC}„NÜH?jÁ/=¥•ö +ý, ³>²º{‰ÜÅKýþôž•t ö„^PLUE+ì?õE!+Ò(2à[9§6Wk\lRƒq]èÔ¥ÛðVE§A~ ÀɬLóìb"JR\DËå»åñ{j¡Ÿ%Ĉó ?ËøµÕ¨8Æ{U™ €¼¡¡e«—QÁf¾m´ýÑßÉÕj“¡ïQ8”‘?žLýhGÕAüuüПç*w™×´iž4Ìïót~ ëª º(n%ݾ/ÃÕd4;GùìÇ~-íc|†w]zí¦Ç›ø)Š¼ æ]j)¯+”—‹ýi¹m0¹G˜‹Ó¶Zë KcYuA¡úÀŠŒô{êóù¨ýz¨ë+Ã_¼{žQ/®zžíÇâi]ÄÏí ÉâÏp +endstream endobj 1727 0 obj <> endobj 1728 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1729 0 obj <>stream +hÞÔUÛŽÛ6}×WL ›KRw,úÐx×Åév‘¨éC´ŒE9*t1(j“¶èõ/;ÔÅko좋¢( +?š™3sæF3ØZß¾e°m­À…FàE¸”´rëUb]¬0Hr‹q øÃE!‰#]J(‡¤²(z!ÔCY²±–„RêBòÉzo¿¾^ƒO"X]¬^¾„;å°ˆDv³U¢ªŠz 7µ–*éÜ'ßa(wʼnëû°d„>$WƒËÀ8Ç }¿‘"“ +DÁOÊY²v.áú³¨v¥l{¿×‰å{1&?ÂÝ8Žx¥ÞfÀILzÌŸpïHå1Õq{%¦¿/NÜ—$TzÑT Öó©ÜéŠVƒ³ Hhÿ¸Ë„¹q[Ël¸@aÎØ®âÛ£Ù÷£‘Ú|øpRæc®nÀ͇K!7é{aŒø;¼¢/Õ š¬Ûhxç„a¶]¶c¼¦ƒa—úZQSv΃pª»ç=mêÀâØYFijã%§l¸úàX}€éüûÇnúÿu¾ÿ4½sCÂLçèÔ;w?…lœÂ—ê7e oŠ-Žkh†Ûa8Œ-.i+q9]3owQ(32mæ¸[!ïw+Àçeÿò$ Þƒ˜ÄÁ°iæ‚Ön¬ë=>=”»&S:$ùÐÙ)Ù•(Ëf³z•ÚE­¡-~•©¿=ιo•«¾,Jꪆ”ÚƒùeoÌïeÿî$?¬K(2Eì>öAX%÷qY-*‰ò<ƒÆè$µ xaP(>!È{Bò˜ÌÙø9š"`ˆzìˆÛs)”ˆ*jyÛU¤šºQ¢å·Íy.;U E­óÔΛN/`v'T+3ø*C9Ô½?hòÞWûâEšÖ(Ÿ-úoãøÒ7 +5Ÿ›S¼)¡1°Ñ¢xŽÝ_¥|Ï(½¿> endobj 1731 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1732 0 obj <>stream +hÞÔVÍnã6¾ë)¶’ˆ&©ÿ9tdÑ¢Ý]8j{¨zP$ÊQ+K%Å û@}ËRòO¼ÞÀm°(jHÏ|3ßÌp†4ƒ…1}sÇ`Ѿ Á }p(HaÆëؘÞ2`ã@ñ‹ …8”PñÒ è…PeqfØ„Rê@¼6~3¼¹„0›ÎÎÏá½´XHB³YÈt¹,ë|_wBi&¬ßãʨ8q<lF˜ïA|=¸ô•sÜpç{.Ò\HHë~•–Íâ›%º„›érU‰Vû½‰ Ÿ“ÀÇô|âù@¸E7¤ÔÕ¹k%¦O¸ûD‰ÕQG+1ûmm"]‘P醛B¨`9ßT‚{c´iÛeû$0^å©Úq³ù°R­‘Y[Ä3GØO#Hf#ˆ+e¦êø\ýpè tTön¡ý{Ü¢/Ù š¼Ï:øÅ +BÂL1ºlG¾¦Éðt©¨ª:ç~°)»ëžéßÀ¢È²Câš‘Í)¶X>`³ž¾üçÐÿ¯óíOuvN@˜:9º9;gÛ…lì¯êwUórí¨æ¶6c‹3Ú +œMGõۣŊœlsœ­€ëÙòñvÙ^¹Pòoê~™XÇ,*Q”w¢»÷ý"1v,±Pq¼v••¨ZY¤ˆ +eMṈnfiUµx`ìòKÅ> endobj 1734 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1735 0 obj <>stream +hÞÔUmoÛ6þî_q 0Dªc–¤Þd@í8C†u-­ýô#ÑŽ6Y2(ÙK1ôí_îH½8M5'0 CzŽÏÝ=Ç;šÁjôòû+«jä;ÐÜЇ‚’£åh^^0`/GŒÅ?\X(„À¡„rˆ×#Š^u‹“Ñ„PJˆ][?Î/À#!Ì^ÎÆcx§l’Ð*WJ¬×Y±‚Ë¢–j)iŒÀPNŠÇó`Âó=ˆÏ—¾vŽîï}/¤H¥Q¤ðAÙßÊÐ%ÌïÅz“ËÊøÇ#ÏPœO<w¢(↔ºLŸ“Àï쨟p÷ ;–GWÇ1F”ß'2%‰nØUBgËyW +îµéŠª{â“Àúy“ +½ãV-Óf™^#«°‰gµÇÞ´‡Tr×âÍJ™‡ZŸë‡6 «å»A„üw¸E_ªl,é6©á½„„Y²uYµñÊ¢ †·djEuÙ9÷ƒ®î®ûøRÿEö$$®M8eÍÖÛÇêtëó—ÿüèÿ×yÿ©ïÎ Ó7G»»sú.dmþ»©¾ÎsXd+l×@7·Í°+ÒJâp:ºßv6w”)é&³­€›Ùòñyé_ž8æÍ{‘Èo&Moð´ë¸û§‡rG+¥H€Ï˜’%óJB¶„«ªU²ÞÜX/„Z¡awG“TG76œÅå÷}û{ú­9oim²vãñ©9¿xdI&“!K%ë÷ø²bð*Ãé;Òî´‹îÊ8Û‡¤CŸ½¦ñ_ãßœÁñäø©ä ±Ø®/‹‹,—ðfD)â=ïËÌ–•õRW _W…µš#¾X¼]¼‚º,a-ŠO›m­/Ñiu‚à=ŠqÈÍMqdœŸúV²Þªøõ󖙤¯ûôÇc£|°lCU;X™¡‹âZèežË•È!)×kýû‚pžÊM÷ö +Ž¿­ŽQ+ÂG'M2Ã’¿Ü$hÇ¿ ä-2ö­ö0më/Hæv‘U”3‘çÕ“íœëÊ,Õ•¬_ãoQˆK}‘³[„Åþj°Ùôk1ÄòŸßnkáÛg3•Ÿ¦r•3Í1ƒ×#O3 É0Æùy‘¶}ƒÍ÷AÖt[M³zv'T…DÝÿÖíè w&*y%‹*«³ìª’´àÔ\ +%ŠD¾‘¢Úšn3y'~˜~n¢6ÕI¥îeóy˜“í2­«Sš¶ÐAÞOå‡LÉù}­c–ºaMØ¢ƒ³çéJ.D-ã;%«;„Ë> endobj 1737 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1738 0 obj <>stream +hÞÔVMsÛ6½óW 72Á ø==E²ÝqÇN5íª`RÙP $x:ýAý—]„('¶èK§Sû@àaßîbñvÎÙO+íZ'PBR¦1 +’ÜÙ:óÜ9»ô‘ò­ãSDà>~šà,EI@0¡(ß;¼`–oœ&„(ÿâüê^_\¢§hq¶xÿ-¥ç§8uëdû})vèJt\nÙ†{¿å?C¨À„¢8ˆ"4ó±G(?7.cå4}ßrVp‰˜(Ð'éÍüÇn .ÑÅW¶o*Þj¿¹SœÄ°½G1Â4Ȳ á0%$4Õ{׋°}LÃg‹PeèEØý¡6™®H†`1Lm!T²”ÚJÐhÈ–µòf1NÜ»¦`jDÝŽf€JõÍ\ááÈÌn#¹ù}0¢æKü¶ÄTMb@%a’ Cð%k³Rô›Ý{IŠ}—.Û!^-†`pHºTDUÒ8±eÃoÏôoäg™7Kqèf3J|3ŒCñ²ß·þsÓÿ¯óÃT]`_±gTè*üwSýPUè¶Ü\%nÏ1¶Ð£-‡Þ ”Þ=È lsè­„êÞŠáv9\‚Nr—ƒš©ó_‚†Gá4JÖué½A:KÛJ¦¾&ØSo´ÖT¤És_Á+®9­LikÕ° HaØÀŠxŒÍßÀ6á­ÌI] œ£ŽmGä$3/÷6XC¥‰Xw¢ìZMèÕh²]ïZÒµ»z¦Nñå9ëØÄ÷X—,¼[{Á÷•üÖ#.Z»?H¨I'×Þ7&ð2¸¨2~ï9üî¨èU43}!¥«ªåÓ¾ ¤=ïÇ9¹;s€ýTûƒám_qk ¸žžä\‰¦ï>ÀZ!˜MŒ ÓÓ}ßwGÌáÌÞļõtHxåL|ê=sG§·oAkýùÚ“x\úëzwÙ }iás)ëk~LúĤái®’ü@ÿbàglCþËËÿ8¤ýâã|êªÞØT†«]A£7ø}ñãRÊ +endstream endobj 1739 0 obj <> endobj 1740 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1741 0 obj <>stream +hÞÔVÛrÛ6}çWà‘lF0’ 9yJté¤c%‹¶¢<À$$£¥@ H9Î'å/»àEŽS_ÈÌt:µìÙÅî¬DÑÎ9û}EÑ®r¸"£ æÈ'ÈHgë¼O³E¥[‡2DàG8‰QäLJ÷/˜€¥™3Á„¥_Ïîù|B£éÙôÍta<ãØ-wFì÷JïÐ]K³™ô¾¤@(¿ Å°†hB1å!Jg­KnÆñß—RäÒ ¡s´6Þ„F˜» +\¢ù½Ø +Y5~ç© $ÇqÈf~’$1!A›&g8âý9äYðèÊc«ã7‡þ©8IS’Áa÷•°·e¬/ »ëŠªFÞ„ãȽ:äÂî˜[Ë¼Ý e×ÄÕÝÎlÙ™ì¶3bíJh¹úœÙ>iAnÓ¢ø°_¦lOòcV£k/Š1ueç²ê╺ ]jjElÙãQ_÷ ø¹©ßMoãÀM&ŒÐv"Cõê×áËnúÿu~úh{çG˜ÚΑ¾wþI…´Sá¿{ÕwE.ÕäYq{ÄXÁ#­$€2ÇýËìÞVÄš·Åa¼œ&Oš²v$8áíK³°æQ„ýàaôæÛLIŸ$üwåÖ¬d C¢(ÊlqÔY­J€õÆ5-6}¿ñÞ>è>´CföO #eGîpq}LàæOqÏ•–ûi¬€['Å x‡™,jÑ2À¥…«’ž›þæØ6¤ÚÝ%Ø© +æâ•>V0r¸;…ôoDöøø9 úCx¦[¸ÈV¬÷﹋‚\TôÑÀtYær°óJÖ×Ò¼â}ãÞ•*ßx] Tm;¯Eq„Xw  uå|ñh->èòX¯…m¨†ï#¨†OuãÄ?<˪íÓ±¶<€Å@ž1âÛúd øËöSQÉ•Ô•ªÕgZ#™§â¦×™3% `•YÀCHó|'/E-Ó[#«[€Ë"§C#>EfcÉ«Lra ”Õ¥ÊndÓõrD÷µüírfÊC7€_#œ‹oÒŒPËRd¦e¿ªax\+HÃØ8$¥Ò )꣑#ò±T•\ +³SzD¨†e<.”žÉ­8õ(ÒZ9¿¯íck†ÑP µ3 WÃð'z¡…°rxÁz¿†0üE竃ÈÀ´cüêuRµ ç•VuõŒØàçÀß  â6I +endstream endobj 1742 0 obj <> endobj 1743 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1744 0 obj <>stream +hÞÔVÛRãF}÷Wt¨J!-xI¶.µá!1°E6$ˆåm¥„5‚Iä‘kfÙÝÊå/Ó­‹Á'yI¥b?̸§§O÷éË؃»ÑÁ»KîÌ( â1LâZŒÊÑwéèàÄÒräùÀñ‹‹G,‰! +8ã>¤‹G+ŒOP–ÎGcÆ9 }Ý8?ŸÀ”Å0;˜ííÁ¹v½˜ÅN}§óÅBª;8UVè2Ÿ ÷cú=B”Ï‚éÆóÂ)¤GÉŒãÆŸl_ˆ¼rUÀµvÇ^ÄBG¢I8þ-_,+aZ»Çé(ôYbx!›†Àü I`“˜óIh{{ˆá3²vˆìBÐbô+n’–‘ðpD³¾?0áO{oscÁ‡,r®–EN;ß±¢è6 iM岩ӫõJz~ß+ùÝʽ)†„>ýx'Œ(úI”àýsÜ¢-]w'E3·ðÁbæ9¢7iz¼Zõ`˜¤–*N¬û~ ´O&›9ý¼$qÇ1›8ÉØç^·‚"ùÃúÏ—ÿ\õÿk|õ“rDÌ£Ìñ!wÁª +½¾ +ÿ]W¿­*¸wX®·ëa1ìQ#°7ª·×P( +64fß[‘ßöVˆÓe5xÒÔïÆAÂ’°ë4Ú vE,˜ôÐ%¥¼…~YP …m4zê¯WЖj«oÕ«ˆòp¬òÛJÐ3y¬¨(ô§%>:k<­Â¢>F›+|c©Ylc/´õØ%´¬Û#Êd^ÉÏXƒ÷m„¨ šá}PB@ڵ˸0Ï« +Ež±ë¡É1¶Åûêðu¿þù§÷™û +'БÞ¶\kò¤w[SðèvÇxKöÍì®çŠ7™ÛСr›¿ÈÃàœ¦wg[mVì\'í”Îg·yÌRßb¤l£Úò¬þ6¿çx¥#Š!UÕm>ÿÕtiÚ>Ý6¬\ˆJà¸ø‘šˆ;‹Zz½›ž¯5£å¼ª[_`¯OâêZaç¿ðŽÓwZûø6ü)ÀŒ ‹“ +endstream endobj 1745 0 obj <> endobj 1746 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1747 0 obj <>stream +hÞÔTÛnÛF}×W ÜR6WËåª ¤ŽœºMR#fê‡((hq)± –Â’²bý þefxÑÅf€¾E¥.9³gfÎœ–£É›;–ÕÈw à!¸¡-GÙèÇx4¹¶Á†8Ù8þña‡‹Bθ€x=âˆÂ¸‹ßâÅÈbœsâÝè“ñvv  ájru~·Ú´CåR'ëu®–p£j©³d!ÍÏñÏÊiC æxX6³}â×-¤OàxþûƒLR©!Q)ÜkÓ²æ9BÂìK²Þ²jpgñÈs#,ÎgžL8QsCÎݶL_°ÀïíX?î‰é!vœÆˆåïɉJ"@£öLP¶BôT¯K7©j0-ŸÆÇMšÐIµLÛäôŒ e2ÏèÜÞuNz±êœDû䶇µ:¾ ‡·C*ß "¼‹GÄÒekI·‹~3ƒÙ†ì «.^©º`Ø¥†+N´ á=ï®û¼©ƒE¦2׈,Áíöèé#ûýóŸ?þs×ÿ/øþ•zç̦Îñ¾wÎ^…v§Â7ÕWEò%Ê5 q›6Š±Â!­$§Cz{4…ƒeÊúÉìf+Ílù¸^^nž°Ý7§//hºPoµšïãL‡#àÛ_ÇUÚmžÖ :çA/‰^..€Ø ß)ùÁÉ }Æ€fy!§ÇéZ“E›Y“öHˆ9­`Q¦ò‚xR¥’¨ý5“¨ +$•>UäJ¾ß®áøt@$Mª¦ªò¥‚z%!mõ2˜>ª~Λ§¹‘îeuѨ‘5”œ!ÇyP™d($fp¸râCz¢\/>-{ãó<Ñò€^4þ²IêÕt0Á#¯§ƒWè¢ø–åé›–]½R0®6j9œ")}-k87šÏÏOìVy#bÔ>Ý·¬½v¢Íi©˜Ü­^¬7scLhȼEó‹¬Ã%v¸›l)Ò¸AöR™JÖ²ß×_¢æf× +endstream endobj 1748 0 obj <> endobj 1749 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1750 0 obj <>stream +hÞÔVmoâFþί!Ug'°Y¯ß“ËI„m^N‰¹~ˆ£jkpeÖÖÚ$UO÷ƒú/;kr¡œšJTUáÃ.³Ÿ™gfvŒóÎÑå½ó²ãÙàÓœÀ›‚¤suŽ.,° J:Š_\¬À'a¾M e-;YuÐM;}B)µ!zî<W£ pIãáá!|R¦ÀÈçŠ/—©œÃXVB%|*ÌÇèGte7®±]ú±<¢ó†ÒÓä¸aÞ ÷à3¡€Ëü¬Ì¾åÏH‘F¿ñe‘‰²æEßCyq= ÌÈPê4Bkíõ!Ê'ÌyuˆÙÑ»>Dõ›Ü„uFBÀC'X'BËØ:Ìm£åefß#¾1)f\ï˜Q‰Y³T¯¡!Mâ-캩颱f¥–‹Rmé6mŒ¡Vïø!>ÿ ·È¥òæd¶šVðÙôb¢¥,[¹la‘êTQuÆ<vÇÙ®é`…è- Žöµš­ ¦‡ÉX¯o_þsèÿ—|óS×Îö‰¥+G×µ³7]hµ]øï†:È2¸KçØ®¾nnÓÂf,ñŽ–玲ûíÉd6ÅŒ¬/f{·|Vß-§ËfðDkÆAHB¯¹izƒhÏ÷‰í¼LÊl­”®EBn¸š?ž¼´¶«ÇÈù_@Ó~¿E¯ÏòU•¤™€S8Ð\»Ai± ‚˜ä…±'íÃ=è>wc36áôhlêg¾ì$ÂOR¨TVIl”N6ÕÓöîèîîöî¦ù*›Ì+ÈÑŒ^tx:Õ^âXvkî“ïQ+Q­”¶ðuËúU[EVŠF^Y)9]±qÀñSÑèöÝ°×ÂŽŽ0ÒeÁ•€ç´Zhkñ ²âq§ãmÅР½äsq ™HžtxèçðÍZ©äKñáM ÍÇhÖÒwËjE['ß•÷åQÐÞÔaœebÎ3­rÉ%šg¥R@^Ti.áÝå;´êŠôš¾ù›è^J².úõl›ñu#7°ƒ=mj1kÝÔ˜ûTç#­x–þ.v6~Yñ +1«›U'xŒè¦{·Â~ øÓ/÷Ñ šÜë\ðjUn¡¶é> |½äxÜžéï…ôlUž¥ÕpÁU©3ktßèî…ø<}J±Àš¹!>Þï5—+ücƒå­ë1¿Té,6pøí…}RŠëTÞ|Ú°cÜ·g÷ØmÝÛ‹‹ýf‚+.§âZ ™—+%ÐËh2¼Ÿ7ûqr#ž¯ðæàôüGl»ÚÞE> endobj 1752 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1753 0 obj <>stream +hÞÔVmoÚ0þž_qâS²ñKâ$šöÑtck)Ó©ÓaHvIX·Ÿ´¹sâЮýÒN i"’»Ë=~ž;Û0X9Ý·«Â‘BIrí,7Êéž2` –ã@ñ‡‹BG +J(µu(f!ÔG›š;B) nOîYr +‰ ßí¿| £Üc‰ÜëUžn·ëlƒ¬Ôù2kï³zP¢†âDta2uR§”&9N¸¼Ë=ÖéBçf ø˜{é®1%$?ÒíÍFUÞD9#9I „‹8Žø¥~MSrÊÆü ÷ÿð£bËz§™ FË0$¿;z(†)mHöß%}Oº¾LTOM'3·(ÓrW̼WwM˜å¤ +7^ ßð6zy;Ô·gëLÏÜæõâ‰i¡Œ³&o· SŒÔäI¸“2ÍËi¶.‹™‹öç¡Û¨‡9m:Fi«„cpNïhÞÚÀùpЧ¹þ¶ÓhÎæ?Í2’9É–×ßUè^F>¾%cuu’œ°Vƒ‹á3Ê5ʯoN ¿åì0›”9^UZ4kLÛ:¼÷ÆW­6´†½ó¤…ö6ÐêiõñÌæ:–­Cu ^Ê5©eÕ…÷Ñ×Y9Üm[m4[|~˜‚âE¾± †Æ 9úÕ,¥aÍÍu,µGƒ¡UW£¤lÈE\ ¶®Í‡Ç{$¬Ì­½U +µªôXŠž÷úã ƒZÔ>´7d§ìµÕ+£͇F}¤ïöc2xûNÕú2R¯ä˜*_z÷4®Ùê¼üylÆ÷xõ°²°1}>Õöl<üûñ[€'41ð +endstream endobj 1754 0 obj <> endobj 1755 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1756 0 obj <>stream +hÞÔV_oÛ6ק8øIJcš¤$JÂÐ/Q¶tnkÄJ‡¢Í¢]²dPr³îí[öHI‰í8ÅÖ:?¾;Ýï~÷Ob°²F?ͬjK¸Ð¼P€KAIkiý˜X£+ ’¥Å8PüáÁ€D!.%”C²¶(z!ÔCY²°†„RêBrg}°'ñø$„‹ÑÅ‹0U IhW+•®×y¹‚벑j™.¤ó[ò +¡ÜŠ×÷aÈ>$—­K¡ã…‹ß72ͤ‚´ÌàWå Y@„£KˆÿL×›BÖÆoœX‚“@ =A|„»QñBJ½–¨án”HŸpoO‰ÙÑ®Q"ûûÜD&# Ò ûDè`9ï3Áý.Ú´nÀ +Ø·›,Õ7n72k/ë3²K‡øvgöº3R‹oOÊ|¤ê +®ÿ¸¬2ÍÞ "|~ŠWô¥ªV“m ¼s‚0[v.ë¯*;0,’IÕYç\}Ú=ï°¦‹"gÏŽ†œ²öêƒ#0ùýùÏÿÜôÿëüþ¯®¦+GûÚ¹÷]Ⱥ.|ÞPÇE7ù +Û5ÐÍí0lÆg´–8›®î·OwQ(3Òf7[7³%p»Ü/ž$áí:ˆH$ÚIÓ´A@\ïaóPîj¦´'Y7iã{[ÃK(äònÖ(Ü6SUm.Q,—s{0¿oç0(ê åçµâ}îüð0 ¾^<—ÆíÅÏñÚýòû,'·³¹­q¶uožœÇg5,Êwsƒ¼ ~àêÛq)"Š÷¸ªå»D¿ îHrß]on'±†ü¤0¿šŸ!zþ\÷M^;Š§B<¬â z²…NÙ7oß\ÆWãÛIÒ¢£e¦ê¾•ž‹ï!0¢¢8Sù©•ö12Ê‘²:5r\f»”ÿOÜ.¡Œ³~YŒF0A{=z³£Û$«¶ A!ál±UJ–ÍÞŽ:Ë—Ëú)¥J›¼zR›*™>¥»Ë³æã~ô}l: Ýreƒ¹™Ûú¡BžÍuZ*H?ÿKVË^7wΘ?wPu|uj +¨¬¸[˜lu·¹&Š†ÕQ¦U¾âãàãQKU3I?KÕ¶ûôíäýL÷Úëñ,Á +N®uñãÁi_ .Q¬šÏØîíûhÐT›Á)Y¢÷vžÚ×;é°¢w›ðÍXâü©F²+Ê`ŠrS”þüxø"À}Ð(B +endstream endobj 1757 0 obj <> endobj 1758 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1759 0 obj <>stream +hÞÔUÛnÓ@}÷WŒòd—f»{m«êCH̵@•¸QWÈÄ›`Éq*Û–?â/™õ%‹B)Dùa×s9ÇgvfÍ`i<ž1X–†àRlO‚ P(ca< ƒG „ ƒq øàÂ<—ø¸‚Ê!\QµÑÎ!¡” +?çæqðâÁø`üàœóˆg®—E¼Z¥ùžæ•*ñ\Yá3¤ 'Âq`È“„“RjpÜpyƒ=Uq¢ +ˆóÎ +kÈ\"Í!!¸ŠW—™*kÜ 4ÛGq’8¾ï±=JíF¦äÄ•õnçÇòèêˆÚ‰ò·Åñë’ø€NÛë*¡¿–ó®Üi?7.+°†’¸æéeë7+•4Hõ꛹E³ {ÑómoVÊÔ*$×/‚5F®åÛ®ù'¸E¬bÝx’ͼ‚×–ëfª²lùÖyK†§T׊ê²s.Ý®î¶Ý?Ô/À|ßzÄ6ý!§¬Ù:`I¬>@·Þ}ùç¡ÿ/øöUŸp Ó'G»³Û.dmîöSGYÓt‰íêêæ¶6c‰CZ*N¡ûí£ÅUBºÉlgËåõlI¼^¶7Oòæ>ð‰/›IÓŒ–®K„}sõP.´RÚ‰? Æ–4Ÿ¿›…£ðt™eW›2²»&„"ÖI‡k/†oJ8‚L->ͪ¸¨ŽãkUD&ÚãÓ²Á>èÍàÔ§¯¥É]8ýRÕ,“ñxShVy5Qy™Vב9½¦£ÇÁíû@{8wc›oaÏé2rBoó3íwn÷síg´p«œ*Fs¡âÈû5 bü ”È`(ª‚ç'!¼ ±û!·H ã÷™Î òªHUù½tÜCRŸ)È“¶Ù:»n¶ß«ÕÝzŠæõ¦ÂŸ/²Mß좛§5>š5Å“WÓ§o_½ GÇ8?ì^ð ’“´šˆLF¼] OÒø†ÁÙÃYšT5ÝÃì2ž×‡Ž¼3/Ò> endobj 1761 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1762 0 obj <>stream +hÞÔVËrÛ6Ýó+îxE:„ ’“É••¤m<õÈL³(;”)N(ÊÃG-çò—¹àCJ¼q¦c¦Si¸<ç¾¹µ|sË o,)À§¸A¡ÖVfýYË× D™Å8PüãÀŸ„ø‚Ê!ÚYQuq-J¬¡” +ˆî­?ìwë×à‘VËÕ‹pS;, ½ÏkµÛU?W­®3•hçÏè¤'Âó`Á“DW¤4à8áò„½Ñ*Õ5¨*…µ³`>‘v°>¨Ý]©›wY’_¢›öbçüXùx—ù"À,¦jª +endstream endobj 1763 0 obj <> endobj 1764 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1765 0 obj <>stream +hÞÔUÛNÛ@}÷WŒx²)ÙìÍk[i½@%LyÀ¨r“M°ä8Ôv +éõ/;Û 5 Úª"yØÍΙ3{ff' ¦V÷í)ƒia)õAú +…\[ëMhu0'ã@ñ‹ ó=øà J(‡pfQd!TâY8²:„R* ¼±.ìãÁ!¸Ä‡~·ÿêœäó‰oϧy<›%ÙÞg¥Î'ñH;—á %ªPœ×…#L¹T”Êㆫ ÷PÇcCœá9žO˜­kÊ¢Ž7Ïê`X¥U®¨I;çÊkò.e»¨?€Óñ‰´ƒ§¬Úºà(Ì>@³>}ùïЗK¾þij'<ÂLåhS;±îBVw´j/Ma˜L±]=ÓÜÃf,ð‘§0ýöÍáõ˜4/³~[_½-…ãe=yÂWó ª^šÙ Zyr3z(F)mD.SØwðB‘=ž/¾¤z7rfqšÎG‘]$ßÑ¢ç“Æ9»nä¼Þt¿kFÍÁŠç6½ ˆ¾„}ÀYWaÂÝ:ÄÚÄZ&ôb/6AÛ“m÷äkOÖöÚ˜xÛKl!\nLmBô’½ç%·xe\¢iQ -Õ“›ãx©óŽñ,Ã㸗ëø ™L†§Ž>¹I#ÛÅó=Œ¶‡´˜gì™nÿ¼»¬ýwƒ>ÂŽ>Ÿ†½ðì«„aES–5ɵFT„ßÑUœcQoÓG!Ë6äýÅÌ0B†q™Ì#›™:SZݽú> endobj 1767 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1768 0 obj <>stream +hÞÔ–ÍNÛ@Çï~Š'»e¿¼k«ê! †~€„ÀÀ ÊM6!Rb¨í”òH}ËÎzA1--j«v3óó¬ç?3›0{Û{Ç Æ¥§hŒ +…ñFÞÛÔÛÞeÀ yŒÅ.,Ò$Ž@ J(‡tæQŒB¨D[:ð:„R* ½ñÎýýdBAo»·¹ ‡EÀ"ùWã"›Í&ùÞç•)FÙÀé ·êx íýàAÞ»¤‡ÖŸŽÓnzrÜ÷mÔy¹B­9ª·|Ë“—“ê¶ïotO“£î^²ö- Ï:í^òu-X²^œÚOéz¢®‚|D¬Éh·0_¬ÙäLF,…û#y> endobj 1770 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1771 0 obj <>stream +hÞÔVÛnÓ@}÷WŒòdC³Ù‹½k ñÒ”[‘¢Ä¤¦B&Þ„ Ä©l‡Â'ñ—Ìz턦’UPSDò°ëÙã3ž3›ÁÂ齜0XŽ h~(APȵ3w^ÄNxî0ÿ¸°P‘(%(¡âµC‘…PmñÌéJ©€øƹtχg½ÁÓ§0Ê=’ÐÝ,òd½^f x•:Ÿ'3í]ÅoЕ°®8A]F˜ >µ”Òã†Ë=÷X'©Î!ÉRø{]¦ˆt—H ÃïÉúz¥‹Šw;ap’QñCJ}¦äDÉæã'Ü¿uŽòuDuˆáïĉ*I"ÀC?l”0OËy#êÇMŠ¼®$ʽ¸N³ãn©S»¥Y#7óHàÖ°w5(Ÿ}©AÜ®”«Ü\fÒ„ï«ïá¹ò=I·³Þ{*$ÌÕ5eQûÛdµ3ÌR¥5²s.U£»ï&õ'°(òº!ñݨË)³Û<‰ê4ëý—ýÉw—&wBf2G›Ü‰]²º +û¨ýÕ +ÆË–«2Åí1,Æ›´ÐØœÂÔÛ7 4ê”4Y÷–âUoI/»ÉÇÜ΃ˆDÒvšÙ Z*E„¿=” )m‚œmóÜ“®ÎÊKzÏ:ìÊgû +Ì89=Ä2ƒÅÖÙaã'‡n!a DXˆjø´@ ñ[ ÒBD DYo„ÂZ ‘…Ыt¦­Ú1f1mâ1n1mê1a1² ã[ÌýŠ2)³-ðx¥ç7çÉ÷qòyenfe¾ÔÅÔeÁIŇdhŸz·H¯†´¾ý4‰ûñÅdêÖmq€:t5ÌÒÊÛx³Es‰/À©Ûìü9Ö¯ ”qÖð¡›I™äeåhꢽ3¸ˆÙt~c¹ÕQåe°-'× šgUD˜»Që.w“‘ìè‘œ`’¦îÃqãð[Æœd3=ª|MÝëéüœãmÐü¼jL›_¯‡ßbê^ûéWü†Ë02‰!<@»ÍÐ1½6™‚G' Ýë(É“ÕJ¯ö?†×{*Œoñ_ @&û~ +endstream endobj 1772 0 obj <> endobj 1773 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1774 0 obj <>stream +hÞÔVÛnÓ@}÷WŒúdÓd³{×â!$i)´"J\@j*dÅNJìÊ +ŸÄ_2k;WZÑ¢ºˆäa×;³söÌΛÁÜ蜎Ì3C +PÔÛ• (¤‘13^ûFç„f0ÿ80WÏ%(¡ü•A1 +¡6®ùS£M(¥ü[ãÊ<œ€C\èuzÇÇ0L-æ×Læi°Z-â9œÅy”΂id]ûoJTPœÇ6#L:à÷«RÇ —ÛØ£(£‚8„©ÕfŠHs!að=XÝ,£¬Œ;ð ɉ’HOGáÂó< ¶K©]-¹—F¤O¸½gÄìhQ‘ý&7^™Ðh»ëDèÃr¾ÎwêÓYV[e^Þ„žq3Âj =zflǬÝ.j§tú¥vâÕH™ƒT…äúA°jQiö¶òpÿ§+M*KXLsø`)—03ªCf5^×`xIeª¨Î:çR­ÓnÛ‡wú˜çYm—ئ×æ”US,‰ÉXþ¹ëÿ|ó¨ïN(ÂôÍÑõ݉M²º +›=jw¹„ÑbŽåªtq[ ‹1ÃÍ"ìM¡ëí›Å.F!Y7fÝ[Š—½%Q]6Âãû¼’x²ê4=Ao©öVy(š)]“ì½ô,i¾û<ö»þåxbfyÙÄz¹-rG J¿t×Vt/2xËhv{üˆÒ^‘o\ž¢PMLì +Ü›ŸUÒ׿N%N•ý¯½þŒÚ ¿¢4ÆùÄä-À·4(­ŽÑê 'æspí¢øÇ1.I-'æÑûOgý;:Øü$Ý4 +FA¾H&¨u² „þb6ÛAÁ—ISäMŸ-ç¿k—£sNénÖŸ*¿!*O@ +endstream endobj 1775 0 obj <> endobj 1776 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1777 0 obj <>stream +hÞÔUÛnÛ8}×W ò$%6Í‹DI(òàu”ì¶] pÔö!*ªM»d©KÉ›¸´¹C]ìZ÷4( +?æ™93sfH1X[“«ëÊ’|€H´²VÖo±5¹dÀ ^YŒÅ.,ðI€/(¡âE‘…PÏâ…5&”Rñuk¿Œ.Á#Ì&³³3¸Ö H`—kn6Y±†?ŠZéUºPÎÛø9†m(N„çÁ˜&=ˆ/ZJiÈqÃå{®Ò¥ÒKx£1ó‰´3¤„è>Ý|ÈUÕðF±å¹!'‰'p†!7 ÔmË”œø²Ç±~ÂÝ8ÊcÔ ˆåïÅ IB@Ð z%L¶œ÷Rp¯K7­jpÆ’øö«ËÔì¸]«e»Ì¬¡]8ij;³?;#½xßñv¥ÌÃZ…äæ`ía`Êwýý¯q‹\ºl‘åvQÃkdzUGYuñÊ¢ †]j´¢FvÎ¥ßëîºÃ¦þ , q@\;sÊÚ­ŽDõúõÛ—Ÿnúë’ïÿšÞ Ÿ0Ó9Ú÷Nì§uSø´©NóæÙÇÕ7Ãí0Æ +/i¥ðr +3oÿ8\à¡Z’þfvwËçÍÝ’ø¼ì_ž8æí{’P¶7ÍlÐZú>îáé¡\˜Ji_ä}ç&”ØËrû.W§‰³Ió¼\$v•}DD•«KœS/qž¦ß3OÍEó{$O|Ú¥qKÑè-œ>• Ýb½ØÁ ߪpèÉŽ{ò½'z >ôGwhHˆ^nïE?ñrxUuZ#´­ËÕêîeºSzŠ_¢ÀãtªUz‘­Vs…–º¾ËÛÃóF!-Ê‹#7™à7Åÿ?ëì÷h†f/þº‰§ñ«l†ÙVƒn¬´Rh•àoñ>ÕØËûü«&»¡ÉÓC“ê–6¥?ÀtZgˆ•è~Þ‘Œql@ï{4›m7F2#ÝiJT­)šÕ¨a/‡j|›fŸ=›mµ6Ó_Ôª¨²z—Ø'×ÑôÅÉÌT'ŽCíGD[ìi;u#y gÝà ,Žä{©ÕßæX‹]£ŒaBšGi2Ì’/9QJÜ¡É‘LãôiŸŠŠZgªz˜,OÛÃéëh>½ŠNš;Gˆ:¿Jå×{èýÐâ·ï?=\˼ +endstream endobj 1778 0 obj <> endobj 1779 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1780 0 obj <>stream +hÞÔVÝNÛ0¾ÏSq• êú'qM»`m`l *Æ&Š¦,uK¤’²$ðH{Ë;ILÝRµvŽ¿ïü' ¦VwwÈ`ZZR€Op ‚B¡¬‰õ6¶º; Ä‹q øÇ…> ð%”C|aQD!ÔEYœZB)_Y§ö~´  ×ímn pX@{>-’‹‹,ŸÂ^^©b’¤Ê9‹ß#•¨©8žF˜ô î×Rƒã†Ë[ì#•ŒUI>†“Âé0ŸH;CHˆ®“‹Ë™* n[’_¢{’xaqJÝÚQã»9D÷ wïbt´‚0‡èý26¡‰Hxèm ´±œ·‘à^cmRVàt$ñíãËq¢wܮԸÞ@¦×ÐÎâÙÚA£T¤ç¯WÊ7½%qº,Oóz„$”u§é jKß'½<” í)m콋zŽ´?|ÆÛññpd—UR-Ê‘óú¶È==PúF]Ÿ¢ú¢„70S“«ýäFÛ½Þ¢(P¬òª¯ò2«nFöÆÑÁpc èÈÁƒ,~õÊF+]BžÒ3dc”Fr•ÓÁo+¬Ý)Ô7-VyŠ†ò-ƒ„0÷,xœ”xQçφRâÞWYaiœ|é›Q^™*ïû¸¸ÞgŠò±!ÃŒéÛÇ1ãÿ¬A(–ãŠVIQŽ#ϾÎmÐÛXUeó¤¦0ø(Öý½í]×Ã*dJí_Y•žlF‚u Ÿd…Š®+ÝNó|dcͬƒex™¤&”ȵâã«o‚ù9fþòëvñÓ¥þºø±È'ûY®´!(8˜ŒÃOįiÅ òßÕþûOçt¸?HŠd6S³‘rü\Õxug>MüÝO{÷3TÌS¥ ÊöþÚo›Ÿ ПZ/ +endstream endobj 1781 0 obj <> endobj 1782 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1783 0 obj <>stream +hÞÔUÛnÚ@}÷WŒúd7°Ù›wmU} $é-•8ÍCU6ÔØ‘mšö“ú—õ…$(Ð$UH»ì™³s惹uü~Â`^ZJ€¦HO P$ÖÌzXÇg 3‹q øÁ…yšøhA å,-Š^•xL­>¡” +n­+ûüô \âÁðxxt£Âañì|^DËešÍácV%Å,š&Îuð ©DCʼnp]è3” ÁIãRç¸áêÎ÷8‰â¤€(‹á²púLe§èNFË›ERÖ~OË•>§ˆ«€páû>éQ*›0'Zu8ÆO¸|€£> endobj 1785 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1786 0 obj <>stream +hÞÔVm›Fþίù4öz_`UýàÃ\šöÒ³lîNUUÔ¬$œ÷šŸ”ÙÙìÚUN¹äܪXb—™ÙyxæÍ0ØXã× ›Ú’|€H*e­­‹Ä_2`¬-Æâø$ À”PɽEÑ ¡.Ê’•5"”RÉ£õξŠ/Á#DãèÕ+˜U H`—›*½¿Ï‹ ¼)U­Ó•rÞ'?!”h¡8ž#F˜ô ™¶.¥vŽ.¾ç*ÍTi‘Á]匘O¤£KˆÿLﶪ6~ãÄ’œøéIâI \„aÄ (u[¢†»Q"}ÂÝ#%FG£DöûØ„&"! Ò ú@è—å¼÷º·M뜑$¾}ó¥zÇíFeír½†váÏîÌÞvFÕêCgÄÛ•2© +Éõƒè„L³wýÏÏp‹¾ª²Õd»U·Žf«ÎeÝá•E†I2¡¢:êœK¿»ëžæô°0tFqípÄ)k·8ƒЯ_¾üç¦ÿ_çûG;á¦3Gû܉}²® +Ïûª“íæùËÕ×Åí0,Æ{´VØ›B×Û(Té³ë-Ÿ›Þ’8]öƒ'Ix;BʶÓô­¥ïá&åB3¥=É,_¯i×ïè{ø|B¿?·§ÉÔ˜Ui“£Y¹·c­]òݱÖjù‘öp¸S‹#uݤ ªw5ê¶jýx•~TÕÇ]Q 8¢ïEž©I¥Ò9z*g(Þ.m>4¸õДõÒAù‘çèÇ8BÙÏ¿-’Ir³XÚj‡†ÏÁï±/ÓUSVK;$tˆrLß\^Þ,âë_®~œ¸üàiíª +Ūh¦ª¨óæãÒLnãùäu<@ùèW¡­önÛrÚ'ûŸ&OÞ\0zjñFwy¦Å–¶/èâE80Bã‘|’%þ&¼5ñNM>C$Ißê“qÑT¹ªù¼LõÅEfÀæåÅ þõcúgÑ3+ ûWŠ#¢ëßS”E“VÁYÚ(D“ÁÑM2ø›‡£ ð %íšÅCŠâ•aC óðô—cÆ£¾Æcüò_¨‘ŽP#¥?Ÿ’²]—v›­s£b.5Ô깸ÆÅj[ÖZ\),—‹øêúJ‰Ð7”SöµcãKð&×·±Áó΃7«ÔZéžmOX¢œP©‘ÿ Ø=YX~ÎèöæŽr{ÏC`&/ +endstream endobj 1787 0 obj <> endobj 1788 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1789 0 obj <>stream +hÞÜVÛnÚ@}÷WŒx²Û°Ù‹½¶Uõ€“¦%MNò¢Êµ°&²MÓ|Rÿ²³¾€)QRªVHì23>gÏìÌ`3ãðdÌ`VR€K=°= ‚B®Œ©q‡Ç „Sƒq øÁ…y.ñ=p%”C¸4(¢j£-Œ.¡” +ïsƒC<èöß¿‡‹ÜbñÌÕ,–Ë4›ÁiVª|Åʺ ?#•¨©8Ž]F˜t ÔRƒã†Ë-öHE‰Ê!ʸέ.s‰4S„„àg´¼[¨¢Â Bñ}'‰#páû>Û£Ô®eJN\ÙúQ?áö#?¦GgGTN”¿IŽ_¥ÄtÚ^› }ZÎÛTp§9nT”`u%qÍË»$Ò;n–*©7êÕ73‹8fvÖåñ¼ âõJ™ƒZ…äú‡hŒ\Ë·]Ÿ¿À-bå«Ú“¬ã®,×#ÌT dÑ𭲆 o©ÊÕiç\ºmÞmûé¥þæûV×#¶éw9eõÖKböÚõõË_ýwÁ7?õÝ —0}s´½;±©BÖTá~Ú[,`”ΰ\]]ÜÃb,°I …Í)t½ý°¸@£JHÛ™Mo¹¼ê-‰ãe3yÂ×óÀ'¾¬;Mo0Zº.övôP.´RÚŠ,ʨ´¤¹.à#,Ôô~=¨<ÈâŪÐæ\M̯—Ãáàsêo´'tb}Ø6‚£§Î ‚ì +úóåÛ8셗㉩9ÖE¾{-qç(ž_w*V¿Ñ^mØ–»Ûeïèü*¨)ý–Òß1%^sZhs”ÅêBåýu91Ý%Å ß_ç9šUVTV¤åƒwŒz'A§ºÁ?c‹7°7ô±žó3íwž÷síײ_#ç:M´y>1ÅA‚;@‰ ºòE ”8/„ð:Ä~òŒ0ú¾ÐOY™§ªx¬;¨€ K*2¼qýt¯ó¶Da? Bq¼4ýü~\FyY2šWëßOêŒuö0F>š5Åà´w„ƒíÉv؆‹´Œ±Àñö>¾‹â*SXq{ÄEÙLi ³„vJ Û7Ýe¡†*›¡¹œ‡ó\óÕ"™˜ûÎ"ûÏÒxšMk¥Í1RãdeÕÿ,_)‰>ÄÛN€ï ¿‹C5 +endstream endobj 1790 0 obj <> endobj 1791 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1792 0 obj <>stream +hÞÔUËnÛ0¼ë+9IMÌð!RŠRÇé+[iqP°m å@’›ô“ú—]êa£AS§…Ý ðÔr<«î®Ìœã7#³ÒQ‚* +ãL×±s|Æ€AÆâ‰Ó#”RñsížÎ@’úÇýÃC¸(<’Ð]Î +½X¤ù Þå•)¦zb¼›ø=¦M*N„”Ðc„) ñiC©,9n¸ÚpNL:Oàªðz, ÊM‘÷zq›™²æÄŽâ$P(O©€pE?¤Ôo„ÖÚëC”O¸ÿÓ!ºc¢>Dõko¢Ú‘ðÐ;#ìËrÞ9Áeû¶º¬Àë)¸—·‰¶;îV&i6Ú5rsH·…}lAÅdÞ‚x³R&QªPÜ>ˆ6(¬z?ˆðÿ¸E®bÙœ$«IŸ¼ $Ì5-eÙæ[æm2¼¤Ú*j]ç\í¾ÿðN¿‹"¯ßzœ²f+ÁSh>@·>}yvèÿK¾~´w'ÂìÍÑîîĺ +Y[…û}Õ“,ƒa:Ãr lq{ ‹±Ä- ö¦°õöÕãƒ&!]c¶½ðº·N—õà‰cÞŒƒˆDªé4»A´ +"üÍä¡\X¥´YVºò”»*ádfzw®¿™b¸\UiŽáÙèVOpúŒ]J{/7•/í”9­9úo}ø<ŠOâËÑص¤«²ƒÇ/þ ÓPç33vqžÃ8¥„= Úyº6§q›gÛ3ÖVŠ=&87ù¬šÇó”s /³ÄÚ)ü#ð‰lÕa|÷ù¯Ò î+“—é2»Á>4b‡¤É'x_XTìIM_[;7©pªÛz”êà¯tMVE(“W×ô3ZÂǬÈGÜÄo„ȇ€mõSé¢j‹¨Ò_2s¡1\è,3vÇQÙw¤ŸÉ-úðmñKÀÓú§•^ëÆpv•&ÕÜv-¥ØBµ Ö–h§[Œàt‹œîÒ.ŸÉ¹Í¹Í¹C#ì7p¿FàGÿ‡7W'7 +endstream endobj 1793 0 obj <> endobj 1794 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1795 0 obj <>stream +hÞìVmOÛ0þž_q“Ñ¿ÄN¢iX)“*ÆŠ&/qK¥4EI +ÛOÚ¿Ü9/ +Ll&¤©R윟Üã{|w.ƒ™³ýnÌ`V:J@@CðC‚Baœ©ó6v¶÷0ˆ§ã@ñ‡ …J(‡xáPôB¨¶8qú„R* ¾tN܃áHÂ`{°µ£Âc! Ýå¬Ð‹Å<ŸÁ~^™bªãÆJ4Tœ)¡ÏSâÝÆ¥²ÎqÂÕ•ïC£SS€ÎS8.¼> ˆrçè†ßôâ<3eíw;Ò08E¤ÂEE@üR¿ Sq¨nã'Ü¿±ŽòXuD½ˆá¯Å‰jI"ÀE?ì”°»å¼“‚Ëv»º¬Àë+¸G究3îV&m&0·cäæ‘n ûÔ‚Šä¬ñf¤Lb¬Bqû"Z£oÃ÷ƒ¿á}Ëf%]%|ö‚0×´.Ë–o™·dxJµVÔÊι +:Ý}óP‹"¯ßúœ²f*ÁS¨>@7>|øçЗë|ýjÏN„Ù“£ÝÙ‰u²6 Ÿv«;Y‡ó¦k`“Ûc˜Œ%ii°8…Í· 4š”t•ÙÖVÀëÚRØ^Ö'ŽyÓ"©¦ÒìÑ*ˆð¯ZåÂFJ» “UQxÊ5yuÂNá P"éë«ü–¶™ìn"¹E2tÖ ãW›q' ¬t…€U‰‹™™^èï¦8\®ªyŽæÙø\'Øê*ý53#]è,3hÎŽçiu6qzëß³4h.fâÝp?x?àÊÇ/ãx'>O\Ë·*7P×vI›€™¼°¡ÈmÀÄà*„|$!~½ 3ÌÓëû˜¸O@2Wº¨®Óì[ó4[™> endobj 1797 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1798 0 obj <>stream +hÞÔVÉŽÚ@½û+JœÚÉÐôb·mE9†ì‘Fà™â(êà†A2fÔ6Y>)™jÛ@†ÉFIÄ¡›ªr½zµÙÞàєâò”„ˆÅÄ +$k¼¹÷ õ9pHçÀð‡#šÄIF™€tå1ôBY€²tæõ)cLBúÞ{EžBHc Fwï™õyLc²^X½Z-Ë<)kcçzfü×éS„’-” 2 ¡Ï)W!¤§­KåœãE¨½ï‰Ñ¹± Ë^Z¿Ï#ªÈ]Âøƒ^]¦jüŽSO )¤§h¨€ +™$ Ð f,h‰6Ü%Ò§"¸¦Äì8Ù(‘ý.7I“‘PÄÛD¸`…ØfB„]´ºªÁï+‘ó«\»› µÉÛ ,ݙҧ!éÌ^tFvvÙ‰öd0ÊÃ{ûþÝ.9=´ä­¥`­ezçÐ@|Õ ªu› +•…™¿®?;Yoêe‰âÅôJÏpÓÕúmaδÕEaP\¼\æõeFÐ[xòÄÁ Ø"Læ_s?z<¡æÙ›i:Lϧqx›êÀêÛ„ot<Ãïóä˜Õãñ”èíßä)ŽÊ3<ÏïaÆeþeù-¹5.v|šÌ.µ½“ù.97C¾i—/çó{³º^®ŠÙ?JÇL?Òµ9+6Õ)"d‹ƒãvq«`0À‰Ž”Î=¨Z£'.àŒp|×e>*îíAŽ9Ú¬`C†rÖ>&öɶsPŒÍ³ÈHïïýZ»àÎÄùÅÍÜíÌC”i­mÝàdå½ Þ;Þè<í}ááÚÖýƒ Ž65¶>Šg FÕñìšïŽPo4D6ì–@°@¿9¼ß*5F|òÛ«ñÅÍ"jzIìpð]þY€ëA¿ +endstream endobj 1799 0 obj <> endobj 1800 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1801 0 obj <>stream +hÞÔVÛnÓ@}÷WŒò´¦d³{m ñPÒ +)ª’mû@²âmb)q*Û¡å“øKf}I©j)8N¤]ÏŽÏñ™™5‡…3x;å°(%!`!x¡É 7ΕóF;ƒcô•Ã0üáÀÀF!’Q&@¯†(”yhÓs§Ocôó‰ŒGÇàÓ†ƒáÁœå.iH6‹<^¯Ól'Yiò«xnÜÏú=RÉšJPéûÐç”+ôQ ©,8N„ºÃž˜819ÄY—¹ÛçU$EHÝÆëë•)*Ü‘v|/BqŠú +¨QõBƼZ¦4Pí:ê§ÂûeÃc£#«E”¿ NT…$\ôÂ6öm…hC!üæu㢷¯h@ί“ØÎ)MRO µcD2—ú¤q;mœòù²qõȸZ¥öF6Feå{A„ÏŸá±òM½’lç%\¸AH91 dÑðm²† ³TÅŠÙ° ¡‚6îž÷{R¿"·RD}Áx=õÁU}€v|üðì®ÿ/øîÖæN”Û̱6wrW…¼©Ân_õpµ‚IºÀr lq»‹±ÀMZÜœÒÖÛWWH4š„¶;³Ù[¨ö–Âö²ëŸÎHQÆ嶘¹¯îŠÜ·å¨r·«è¾-à5¬ÌÕÍ8þfòÉf[¦š3Ò»MôÉðpÜ{ ŒF-Ž~ñ¶Æë’³´œ/g„Ó° ôË47£ÛÒdEºÉf¤Žéu<Ǧ>#E¨Á›lQ.õ27ÅÍ›U‚Qcȉ©ÁÇÊü=+Û颼cejß9ÛKÆ8µøP]nÕ±ªk0Àï’ +Úi¼6M‰ì–{o´V-Fµl?jñ> endobj 1803 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1804 0 obj <>stream +hÞÔWÛnÛF}çW ô´t¬õ^È%‰¢¶,7Iåʘ8i,¹’ H¤ARu’?ê_v–ÙŒ Ì…v53LN&/^ÀUisŸú¤X—ñv›åkx•×º\ʼn¶?†¯‘J¶T‚J×…1§\¹ž·Ê€ãF¨{ì…ŽS]Bœ§p]ÚcîQE2„„é§x{»ÑUƒ; -%¨§Pž¢®*d@Ÿ1§Úhoœ(Ÿ +瑳cdãDõûÜMF@§ã÷‰0‡¢Ï„p»ÓÆU öXQ¼¹Mc³¤Öi»Ì¬Émê’.ì² *“›.H´+ã.J•J˜/²3zF½ãøün«,ZOºKjxk{>åDwUÇWä^R“*f².„òú´;Îáþ <ì±OŒãíÖ[aòúõÛ—ÿ<ôÿ ¾ÿjîNz”››cýÝÉ}ò® +‡=êéf‹låê™â¶9c…=ZiìMiêí/[H4ê”öÙõ–'šÞR8]öƒ' E;¨¶ÓÌ£•çQéÜO&¤QÊz‘U׶"» +~†^ÝÍâϺ\»:ËѼŽÈèå|ñê÷ùoáélt Œ‘ŽŸî[À5ãæ¼›¼œNÐùëËð4|³ŒˆAßU‘݆‡GßBy•ÕÉÍ»÷çÆ剎džSäêéYøγø͆Ö5œþœ×Y©§ŸjWY‘GdŽåmœà‹#"Í=?>ëþŠFøzSÌ™Ä @5‰–\ئh÷ѳ°Mó´'DsÝ$mt)¿›ARÆï»!.uŒñH‘´Øý¹ÑG‘½7›"ÁgÑ“}ÑŪ÷Eö‘|õ¨¯î²Ôøæi(ôT_ƒz|ªCñË:.ëV>š›”7òïs;H—}°,ËLçëúæ:kº;Ã7ÀávŒÿ~,­ÝÄùÀ>23ê°Gî~Œ?ºŸ|”<Š¿;þ`­ +U¹ +endstream endobj 1805 0 obj <> endobj 1806 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1807 0 obj <>stream +hÞÔVMo›@½ó+Fœ–Æ^ï, ª‡Ô!mZ'µlÒâ¨Bfm#9Øܤ?©ÿ²³|$u.­Ú:QÅa—Ùá½7³³pXZƒwSËÒR|€( +m-¬·±58åÀ!^X\Ãø4 À—Œ2ñ­Å…2mñÜêSƘ„øκ&£è<Àp0<:‚qáð€d³,’ÛÛ,_ÂY^éb‘̵s@*ÙP *=úœråA|Ò@*Ž¡±':IuIžÂUáô¹OÉ¢ûäv»ÖeŖ熜¢ž*d†@Ý€1· S ê«nã§ÂÝ[GyŒ:²^ÄðÄ kIBÀE7è”0»¢“Bxív“²§¯¨O.·ibf‚T:m&™1$¹C=Òº·NÅ|Õ:‰fdÜÃX¥æE¶ÆÀ„ïú!~?Æ)b›f%ÝÍ+øìøåD·eË·É[2ÌR­3² ¡üNw×}šÔïÀÃÐéÔ%a_0ÞL=pªп?¼¸ëÿ þðjr'}ÊMæX—;ùP…¼­ÂÃnõx½†I¶ÄrõMq;‹±ÄCZj<œÒÔÛWGH4ê”v'³=[¾¨Ï–ÂöòÐyâX4ý ¤¡jNš™ ·ò}*ÝÇÖÄ4‘².È»,­EV×üÞ£Ü{ýXÝži%'µ_Rèý®Å Ô~küâWû0¢ñö—Ë*1Ë»×zq7J¾éb²ÙUYŽæåy–ë|¾Þ”:5<3"{¨1ó^ ½š9{xÃ÷Ñ>~™ÆÇñåtF Á®|âõ+Öä¾Á&Ûó!ÆŦ*ve¶Ég„QÉz¨ ÚN°u„¥,+½5|'`Þ ®²jõi[¡v匠ÝÐõàâr42*²àŨ¹zvjûìbz ?M.¢‰VÜÆ‹ìá¬ÛZíZ‹ç¯{GcûEè˜ëêCósò»Ï9öÄ(]j¤å”Õ•&o/ ðÿÔÿ{Þ(O;j4#ûrFìs×þ£ …Öè5Ãg¾JŠW3§¾?~å´w¥àM')ã‚wWÝÓO«¤¨ê=×É°3ü_NòŠÛæPœGDZ1ÿ„·wsþEz®šë©®ï¦}¸«¦[sÏkùŽÙFÝÛ¯ðæ‡2ÿh" +endstream endobj 1808 0 obj <> endobj 1809 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1810 0 obj <>stream +hÞÔVÛnÓ@}÷WŒüdS²Ý‹½¶…xn +…”FÉ6} Y±“ZJœÊv(|ɬ/I)Z ¡<ìzv|ÎΙ‹Ã`i¿ž0X†àQ_‚ 'ÆÂx¥ŒãS ÔÂ`(þpa¾G-¬ßá†Ûrr¡yŽ³}Ö%8fhfû—¹æ™ëǦz*t’ÃKÕuv%=´HS´‹Îä£y³-«ò1Ï;‘g\á£YSLcuö‡˜J‚Ãëžd”–sÌ#~èØm¯ur{œÝ)ºdóÅÂ{’ú&Ú»  +#Ë.üj¡Ýw̃–0¢ùç +ë¦Ñ/°À†ý‘îöv{G¾ÃTõæ¼@{Có´¸ðCü]€é +endstream endobj 1811 0 obj <> endobj 1812 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1813 0 obj <>stream +hÞÔVÛnÛF}çW ôD6Öj/ä’‹ 2M·Ie$°hû¡* +B\ËD%J );ù¤þegx±#-‚FVQ +à¬f—çìÌžRÀÊ™ü4°ª­ äø‘Å¡²Î½sž:“KÒ{GHàøC#¢™BÅ—nŽ(ŒûèK—ΘqΤOίî,¹„€EOâ7oàc剈EîvUe›MQ®à]ÙØê>[Zï·ô=R©ŽJ20LèÒ‹R8¤>`_Û,·dew•7!Ón|Ê6»µ­[Ü$uß`pš˜TÆ`~Ĺ߅©% õ0ñ3é1é¡ì¨vÃNŽiSb'ýhÈíVÊ!2è·›Õ xcÍB÷f—g4’ncónYã– Ü~ÙU¿¨Z>ô‹dg¹0V¥%ýQªwRø~hðù8D¬jÛÍäûe·^1áÚ²îù¶eO†§ÔæŠSÚ¥Ôáwßy¨‚0ÆGÌwÍXrÑ ð4f`°ßnþó¥ÿ_ðç¿tv*d‚NŽg§žU(z¾îV§ë5\+”kHâöŠ±Æ"­-§"½=zR¡Óæl¨Ì¾¶BÙÖ–ÆöòÜyÒTvýÀ0£»J£®ÖX±Ê?´.Eʇ ë&k<íîkøÖöþiÞdU3Ë>ÛêÝÛ}ƒÍgᎮ’TŽÞÛƒòj3-Füsãâ_~Ÿ§Óôf¾p t_ËÓ¾ÊÔ‘´ è&’Ûä:}Og£3à̼xüß‘\e±Ùo.lY{Ôð>/\É™<vöé%v„}þ(ØŠˆñƒ]¢û»¢Ì·O´w$8ƒÖ ÿ5¨æÝ-\ÁÉe±^O—MñhçèÞeËVPêHèI™:B÷×Äúmð(iÜ–T/é¿/‹…‹þÑc‘)u:ŠoR¢‚¶À©Ì×d‚oôðØsWäÍC» ÔqÐS®ØÄw%ºåŽ÷Í|—¡»;DÎÄü§ãŽ-}¥ÛÎ.°pâíi¸QrDxª¸“r¹ÞRƒÙWS~ŒtØ$éùSqÏl¹"á ;àgDÍYxHÅ+Æ=:OfîFÄÒ ýhEÛE^{zþá6i¹MÏmNÃÝ×z›rÕÞÐßRÓ’ÞbGã)†ûHo3jo/›Ëwk ?bþ`ÍÜ;_ +endstream endobj 1814 0 obj <> endobj 1815 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1816 0 obj <>stream +hÞÜVÛnÚ@}÷WŒx²“²ìÅÞµå!%¤·´Š‚Ó>ÄQåÚ AƒlÓ´ý£þeg}P!5QKh »ìÌž³3gfc«÷bÈ`\XR€¢>¸¾A!×ÖÈzZ½3 ‘Å8PüâÂ|E” „rgEB]< «K(¥Â;ëÚ>œG|è÷ú‡‡p‘;Ì'¾=çñl6ÉÆð*+u>ŠíÜ„¯‘JÔTœσ.#LzžÖÒ€ã†Ë5ö¥ŽSCœ¥ð!wºLiO_âÙbª‹ +wZ’%1¥nh{eÄð w7Œ˜ã *#F¿ÊMPe$4º~›óXÎÛLp¯ym\”àt%QöÕ"ÍŽÛ¥Në LÌØ™C<»q{Û8åÉmãÄë•2C’›BÔ‡ÌDïªï_à±òymI—I ïåfë²høæYC†"U©¢&ëœKÕ¦ÝuÖô;° pº>qí Ë)«·8“Ю_öîú~í„"Ì(G[íĪ +YS…»}êÉt +—“1–«2Åí0,Æ{´ÐØ›ÂÔÛg‡ <Ô)i³é-Å«Þ’8]Vƒ' y=ȺÓ̽¥RD¸ëÉC¹0‘Ò6È¢ŒKGÚËŽaªGwÃ2ÎËóø«Î#Ï;ɲä¢ó :ý«°9GPEbâYz=œ\jÝž@§|ÿå îo>ÓðjÙ†oY Pål}DÅß_–ÃEŒÇ Ž¿È¦„Ó†~ñˆõOqã™~§ËÈ^Ñ?w£„‘q”áùý,ì’{¥Ñ&ÙoÇå!eœµõñ0åÅC•ßUùõµùëÎëÕd Gÿùä:6PÞ’?÷ËïqÕçî»úZ¼=TÀ_£Û· +O1ïÊÛÌ Cd§ó姩>ˆœY<μ‹–É7=µ¶È9õƒ‘Žb‘Mq?¦æ×ô1Po35üÊʶÞeUl½»ÝÚÞå›ÈøÑ +D6ó +endstream endobj 1817 0 obj <> endobj 1818 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1819 0 obj <>stream +hÞÔVÛnÓ@}÷WŒúd·Éf/öÚâ¡„” +­!ã8)u"Û¡ðIü%3k;Q+—–R¨ˆ¥ìzvvÎœ¹%fVïÅHÀ¬°´Ÿà‡<µ¦Ö³Èê M-!ニ|à+θ„èÂâh…qeQbuç\Ati}´OGà±ú½þÁœçŽX`¯fy|q±Èfp’•i>“Ôù½D(UAI¦<º‚ íAô¼2©É8n¤ÞÙ¦ñ$Í!Î&ð>wºÂgÚ^ I|‹/ÖË´0v‘å¹!’ÓÌÓÀ¤ +ØpîV4µd¾nΑ?“î•s EG™C¤¿ NhBºA òVÊ&Ò«Ý‹œ®f¾ýv=‰i'í2TXÐÚ™Ã<»V{]+åɼV’ÕÊ…‡\•–ô¢T%”DßõC¼Ž[´•¯ª“É&)áãLØim²¨ñVY †Y2±âv)µßÄÝu¯'õˆ0tºsí°+¹¨¶8£Ьw_]õÿ5¾}¥Ü)Ÿ Êor§¶U(ê*ü»®.—0\Ì°\}*nG`1ؤEŠÍ©¨Þ¾:R¡0°¦3ëÞò¥é-ãe;y¢HVó d¡®:6¨­}Ÿ)w7z¸TÄ”7$‹u6s´ýQ~‚§À™ðžìŠÛ£Iò¼R+ãÕ6j-Óéåiü=Íû›r´ŽQœà„Šâ/Ëô,/竱­:pIêó¬cÆNe5Ú7Æúǃ>ž¾ú<Š£·£±MÖ7E£…ØŠq!E~YÎ3ò‘“êkFG\kõý0Ïãï#¯cò~lóH†_œÉ&Ƀ{µV›ÛK7{ÛÜtä¶Þ2GȾõžI¤×zÏ!É{DG\‹ŽúãèLó4E­1>É<Î÷ǼU©ï:ƒA61$Æö^BòRª½?¬Àë£2ÎK2DñjSš í%ˆå˜~§®ß}z=ü÷[‹÷nkÍÔЀ£˜ðφ'ÎÞD‡§{äÇ/œø­lÝ‚}¾(“9V “5ù[ðØ£m3ÁøGÀ–ƒýf…¡?M³Y‰ @9Íð]þo÷qxc—ŸM ù÷ Oˆ>q§%4}säÜC9Ò ôÅm=ÿAhfÏ=Fw‡Ñƒÿ#~ +0“Bž +endstream endobj 1820 0 obj <> endobj 1821 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1822 0 obj <>stream +hÞÔVmsÓFþ®_±“O§`ŸïEw’†éט  Â4b:ªu¶5cKI&À?â_²§‡@i“¦­íñwWÏî>·»gKgôیòr´Ÿà$ƒÒ8 ç×È=åÀ!Z8\Ã7.<ði€/e¢Ã…2eÑÜRƘ„èÂ9#GÓ§ h“ÑäÑ#8.]ЀË2Ùl²| ymÊE27î»è9º’­+A¥R0ä”kÑ“R[pÜ}‰}b’Ô”ä)œ–îûT“ !aú!Ùœ¯MÕàN#G êkLOS¥ +†!P/`Ìkmro”˜>Þ%²c d£ÄìwÜ„ #! Ò z"l°BôLÕE›T5¸CM}òúšì“)½.v÷½ÖßÏsïÏØ;g”«ëüžñV+صZÑjÕõZiµKþ/±y…ȆE¯ª†Î˜à5>üx›¢õÔä{Gz{~fO‚úÏ ÔÀžYCRÑñpO,¨YP7–‚~8p.â±_Š.#÷ÊÃwÑ^áá‡Zq£¶ãAÜ'Ò¶Dóu_<,JcÐ*îûëö±šiž~n3þî>qµ÷ƒbte/›ù¶jowÏÝyÚãU‹,â­Þ]µðÍÇoߌñ‰Éaÿ?à‹fŒ V +endstream endobj 1823 0 obj <> endobj 1824 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1825 0 obj <>stream +hÞÔVÛnÚ@}÷WŒxZ7aÙ›wmU} „´i!E`’J¥Š,p(*—ÈvnŸÔ¿ì¬/ТªJ#ÓªBÚ]ŸŸ™3»3˜ÃÜi½q˜§Ž–`˜Ê× $±sí¼Ö)áµÃ0üáÄ}CŒd” WCÊbáÔiRƘ„ðÞùDzÝSð¨Vçè‰Ë}ê“Í<‰V«Åzgë,N®£iì~ß¡+Y¸Tz49åÚƒð¤ Ô–B︇q4‹ˆÖ3¸LÜ&7T“RB÷!ZÝ,ã4ç톎§§©§ +På3¦ +™ZP£«}ÔO…úiÓc³#óM”¿MN§$ÜT~• ­U*„W†¥¸MM ßÌ"»$‹gÅvÈÚ¥)Íú¥Q2ýR‰bfÜC­R û e*+_™ß๒M±3»fpáŸr—”iéo³.á)å¹b6íBhSå]©ýCý<ܦO š‚ñbé«1ûÕüô韛þ¿äÛG{vÒPnOŽUg'··—·ð°¡¶—K.æx]½Ü.Ǣb‘¦1§´÷íÎÁxF«Ê,kˈ¼¶4¶—mç CQôƒ€º¨4»@km •j×z˜V)«D¦Y”¹šÜ¦ð +–ñõ}?z¸[`FÓ¯Oˆ:†ÆŠ7ìh÷åîê{¶Ïœä$·ÝZ¿¿…íp<šËz›þ`.)ÃxKóV ‹L“3—‘ö/ùöƒeQ’],¢ i ÿx5è؈Nº§íq/܆¾xJ4¥Õ¾¤Çô/^#<'DÔÅÛ‹㤊½Q+ë0ž"œMH“Qs ÅX ˆSS·ûö8äâp*„—Ë°“/u+ Þ9œ «Ð6v]†®ÅÙ(Kð{`lnb„“쵤; Fž³z«?–%?ÂÖg²C±¥°¥¬Å~ìTÔyjt>ŒÏCëEÕÂß]ÏŠn‚}Ä:ø#Îýnö›fÕG\\õåÕàrˆÑŸ{½g¶Ð'7-FUÝ•’«8T¥pü€=†r²c~yí¢nM¾BÜ{ŽüŸÿ.ÀÆ +endstream endobj 1826 0 obj <> endobj 1827 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1828 0 obj <>stream +hÞÔUÛNÛ@}÷WŒx²!^öb¯mU<ÐZZ¨¢Ä@%Œ;i$'F¶SHÿ¨ÙY_D8*ªª"e's9³3gfÃ`¢í2˜äšàP,W‚ ÅÚX{ïkûÇ øcq øÁƒ¹ñ\p%”ƒ?Ó(¢j¡Îi&¡” +ðï´+ý´w 6q¡»ßÝÛƒ~f0—¸z:ÉÂÙl:ŸÀɼˆ³q8Škÿ¦U*N„mƒÉ“6øG¤Tà(pù€=ˆÃ(Î œGp™&sˆÔ§ ½ûpv›Äy‰Ûó5ɉ#±¯žx²Ú4% ·t"¬‡—‡r¡*¥M‘y†Ô9@ï.¦ái¸Œ³AÅr Géâ[ïÆ,L’t„‘ÓŸh‰Óqc Œ]Ù6Ë-qZjaVTÕž þ ûºƒóñÖÓ0S÷*„o7÷ÉE¯k69aOlËG6Fèzkl”ðõ¸ÆöL¯MÏdãíQ¢6=“Kl¸£Õfm³ÛÃ춰6Žúi‚êå$ºì za^ÍÛÀßÈk㊷sÅڹ⛸b­\ñ-ºgm×=ü/ú-Àqœ• +endstream endobj 1829 0 obj <> endobj 1830 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1831 0 obj <>stream +hÞÔUÛnÚ@}÷WŒüd7°Ù›×¶ª>$„´ii“V +Qe¡¨"Û$á“ú—õÚ\Ò¥i«´€ö23{fçìÙ…ÁØÚÛe0Î-%À§È@ %ÖÈ:Œ¬ýc ¢‘Å8PübÇŸ„ø‚Ê!šZQ•h‹V“PJD·Ö¥ÓiƒGhí·ööà,sY@g>Îâét2ÃɬH²QOâa’A<§Ìm2Ÿ(g‚×i’—¸íÈòdˆÅ)â) \„aD”JS¦âÄWµë'\nù‘ÍŽ(XþŠœ°¤$tÊ fBï–óš +îUÛóܦ"¾Ó»ÆzÄ"šLt:3—xNö± +Ê_« nzÊ<¬U(®'B£ÒåK?Äõg8D¬ln<ÃÅ € ×s’ +2¯òÍgU2<¥’+ªiç\ù5ïRÞ?ÔïÀÂÐmD:a“Sf†¸ +Ù¨û§w/úÿ‚¯¦úì„O˜>9ZŸX©U*ü»[=HS8ŸŒQ®¾·ËPŒ9^Ò<ÁË)´Þn\.И I}3«»åóòn)|^V/Oqó„$Tæ¦éF+ß'B®ŸÊ…®”ÖEÞ¥—ÔUμ¦ ìõZÚž~GŽÊ åF'ÔE¯jVû([¾åÚ÷À2^¹Vi׫øîU¢r=KìÚc^Äú9:Ódt{1‰;ñ2ÉÎæ)š—ãù¬ïÈ¢7¦ïn­m½k·0è×ntõº}Gƒ-ò{Q›4ÊŸëy"{òìÉg²'ÿ!öveè;ö@Û .ì? +|žhÜ¢ïhÒ`ZÓ ÈßÖDìQ ð]`»5Àwk€=¦¾SìÅ5О 1 *àäT3ðù@õsFñ¬ž°ûðÝ"Î +“`ª+8Lçƒo8·pÚët6`¶^ÂgËÙ"MúÚí£öñA¯ÙZsÌ4h{šqÊÐlßLbÆí «žld€ò¥lмBņze«94c¬wŒÿ+?E‹z) +endstream endobj 1832 0 obj <> endobj 1833 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1834 0 obj <>stream +hÞÔVÛn›@}ç+F~‚Ô^ïPÕÇqÚ´Na’>ÔU„ÌÚAÅnâOê_v–‹Ó›¥4rT5¶`™œ³3sf0ƒ•1|=c°* )À¥ØžA¡PÆÒ8á)áÒ`(~ðÆ<—ø¸‚Ê!\QµÑ.Œ¡” +ïŒOætr +ñ`<¿x…Å<â™ùªˆÖë$[ÁYV©b-”õ9|‹T¢¡âD8 aÒð¤”\>`*ŠUQÃÇÂ0—H3AH˜ÜGëÛT•5î$4$'®Äð$q$.|ßb{”ÚM uìõ&†O¸ýÓ&fG;ˆz£ßåƯ3ânÚ^—}XλLp§=mTV` $qÍËÛ8Ò+nV*nè»ofqÌÖí¼u*7­oî”9ª\?Ñ]½íúøÿ¸D¬"ovâÍ¢‚+Ëõ3U Y¶|yÖ’a‘êTQuΥۥݶ­é7`¾o lÓCi ;üBÛ+LÒaÏ( ŒBPb÷¡¹6´ûÐat5ÏXç 5ø¡!®Ð^ õiÝÐ yY(…îsü,n¢âhnݧûDÿ»ï6݇;‚>áÙ(¸œN5’»6 6:{ +ƒ¼:MÏf!ãO›&½Fq<Î×k•¡°zÇ…Š¾ÀæVÇêFAžÆ]éWGIVå€ï¨|S%™*{@ít8©ª5Pÿ`míz4¢ý£ë + +Zýâ@èsÖN¢>¾)^t'`cã’ª~¥ä;J¡)…¦¤O¡Ä—ÿw€c~ +endstream endobj 1835 0 obj <> endobj 1836 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1837 0 obj <>stream +hÞÔVmoâFþî_1âCe÷`Ù{m«êŽ8iZÉ}(Ueá…Xƒl“ô~ÒýË›õ ˆê¸;ÒªJä]fÇϼ<3³f°4ú7ËÂ\êíIre,Œ·‘Ñ¿fÀ ZŒÅ?\˜çßWPB9Dkƒ" +¡6Ê¢¹Ñ#”RÑ“ñ»×à†ýá›7p—[Ì#ž¹YæñzfK¸ÍJ•/â¹²þˆ~ES¢6ʼnpè1¤ÑU )58n¸<`Uœ¨â,¹Õc.‘fŠü¯·+UT¸Ad8¶ÁIâH \ø¾Äö(µë0%'®lÏ1~Âígç˜QbøûäøUJ|ÀCÛk3¡½å¼Mww㢫'‰kN·I¬wÜ,URo Õ«ofqÌFí]£”Ï%^¯”9«\ÿ¢z:|Ûõñý;Ü"V¾©O’ݼ„{Ëõ3UY4ö6Yc YªrEuÚ9—n›wÛ~Iê'`¾oõîñÿòƒÑ.N2“¾ªE¡S©ãìQâé'Êõ†î‘•’h7¿pÓÝhJ¿ƒÐ¶íÎé:l¢  Ã÷“é8ÀýUp=˜¢8ŒNväY…ø˜Æ—¯Â+¿ˆw+l¨Wb>Èæ«M±ËqìuÖºt­êh’©^˜&\—=EÁ¿á¿¸ø±áØüø®|ÁL³bð™KU;Ô7Ø|W2^7u÷Ëó'“ûç‘Åý¥±¾ø–ú:Ñ#T?ª +>Œto´Ÿ<Ÿóª]b +endstream endobj 1838 0 obj <> endobj 1839 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1840 0 obj <>stream +hÞÔV]oÚ0}ϯ¸â)YÁõGâ$šöÀ€®]i…Àt•ÆTEÄ0$J«$Œî'í_î:NèÖuÒ¤…M;ÇÎ9¾××'0X:Çï& –¹#„4?’ (dÚY8o•s|€Z8ŒÅ6, +IA((¡Ô­C‘…P15w:„R*@íœîpp‰ wÜ;:‚Q汈DîÝ2KnoW›%œm +-’¹ö>©÷(%¬'" Ã“¨¾¥”†;\>ru’ê ’M +2¯ÃB"ÝRÂà!¹½_ë¼ä(GrJ O’@á"Žc ~D©o-c/1|ÂýŸ1;f‚(1ú}nâ2#1à Õ‰0‹å¼ÎªÕ&y^G’ÐÞ§‰éq·Ð©íÀÊ´±»ñHàVÓ.ªIÙüs5‰Û–²C’›!,›èý0ÆçGØE®ìÎŽ¤ÛyW^æêŠ2¯ôî6•nR™*j²Î¹ ë´ûþÓ=ý,FµˆønÜá”ÙnžÄäÔíŸ7ÿ}êË%ßßš½!afçh½wb_…¬ªÂÃ.µ»^ÃxµÄr Mq{ ‹1Ç3šk<›ÂÔÛ uJêƒY­—gK¢»ìG)ní &±´'Ítp¶ C"üGç¡\˜Hid^$…'Ýmo`­»I‘dÅåݦ¯'Ûu1Þ®õÌm§Ãkͼ×ðXýqš~ÉÓ;ôðó›‰êªédæâmŽóËéêÕ³jV¨T1ðZŸ&Yšß'st¼™»«žnHc˜|Õ™‰èºÕ†ÆÜF8ámm özBÚ°ô¨÷‹4ýGÒìÐÒe ]­Û ž²«îøš¢êåt8lDÉñ¨¬6s,OJxSÌûò@üºÕ(ëXÏ.fnG´Á|ÍÕôºÍÓSÅø¡–ΰtÀþÚÄ m:Šâ½—’ýÁ&­ê=5Ù°õÞÜYš”†ˆ°õÄXk‡mõ¦ˆ+j<Áú!% »…p·wÞj*={EÄ›â¬-áß½¥þ>÷Ͻ +w«T³›àupà ï¨Å÷Ä'Qÿ7¸e{è÷ÄîÖ}Ö-}ÐØw«?8éN‡j_øŸä»—‘F +endstream endobj 1841 0 obj <> endobj 1842 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1843 0 obj <>stream +hÞÔVÛnÚ@}÷WŒx²Xöb¯mU} IÓ@„ÀÐH¥B^¨%b"_’ô“ú—Å6´URE€w}vŸÍAÿâAÐ ÎÎ`”YÌ#ž¹]gÑÝ]’®á*-T¶Š–Êú~D*QQq":Œ0é@x^¹”Ú9N¸<ø«(VDi Ÿ2«Ã\"Í]Bÿ)º»ß¨|ç·Ží£8I „ ß÷Ø¥v%SrâÊfõnÿ²ŽáÑÑ»E”¿Ž¿ ‰¸h{M$ôn9oBÁz»Q^€Õ‘Ä5§÷q¤gÜ,T\M Ñ£o¦qÌÚlXe˯µ¯FÊÔ*$×7®A-ßv}|~„Sô•m«•¸\0³\0SÕ.óšo›ÖdxJ»XQvÎ¥ÛÄݶ?ÔïÀ|ßêxÄ6ý§¬š:`IŒ>@3>xqÓ×ë|«ÏN¸„é“£ÍÙ‰}²: O»ÕÞfãdéêêä¶&cŽEš+,N¡óíÁâA“¦2ëÚrù®¶$¶—}ç C^õŸø²ª4=AkéºD؇ÖC¹ÐJi#2øÐ,i^/&a/œNæf^DE™Ï­·‡$wtG9ß™ëU4/sxµzœ%n:A8Ex©æ&%¼y8|óŠÚêžÑ7•ÍÍÖñÛÖQ½ŽÕábnvDôO½oýô4düT[g„¶¡ºVÄ =¶ŠâÁk‰þÍ6=W«¨Ü:iÊê§1²¢Œ4f³«Þø–"Þ: ×4W×C1¾X%Oˆ«x¥Ñf»^ z"âa’e‘#ó²,0ßÚØeL~z‘\¼”H.þƒÈ1Î*¡ãñªôþ$ÑcéÅDm¶¡¹Ššü1‰[8Ošþ‚· ßuãîva‚æ£^pusù¬Ö>)¢¬˜ÜGËD·öõÜ<ŠÌÊáZwÇ)â!ex­ ×Ò=ÌiÃÍt€ðàØ\=]õH4c Q ]×Gk®!«¹†šKœ”kÖpÍø¿êÂ??Ì<í +endstream endobj 1844 0 obj <> endobj 1845 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1846 0 obj <>stream +hÞÔVmoÓ@ þž_aõJØz½·Ü%B|(] +…vLi661„¢6+•¶lJ2?‰‰ï’tcLbƒ „*Ý9>×Ûç„Áʼœ3X•Ž i2P (™sâ¼HœÁ˜ƒäÄa(þpc&aZPB9$gE/„JÔ% §O(¥’+ç½;Æà“FƒÑÖì Hàž¯Šôìl¯`’WYq’.2ïCò¡D ʼnð}è3”ÉNíRç(puí;ÎÒeV@š/á]áõ™&Ê]£Kˆ¾¤g§YiýF‰£8Ñ +é)â+ \„aD”Êš¨ån‘>áò‡CÌŽ1öÙorÚŒ„€‡2ha‚å¼Í÷›hÓ²¯¯ˆv÷/–©‘¸[eËZ€µÙC7÷ˆï6f³Æ¨X|jŒx½Sæ#U¡¸y²V2Ã^êÿ¿‡"ú*Îë“å墂O„¹Yã²lðÎó ‹dSEMÖ9WºM»”·kú Xzý€H7ìsÊjÑOaòÚýþÛ?7ýoMí„&ÌTŽ¶µ›.dM>n¨ÃÓSˆ×+lWmšÛcØŒ%ÞÑ2û)L¿}ö¸@e¶$íÅlî–æön)œ.›Á“$¼! U}ÓŒ€ÖJk"äõä¡\¦´%YViå)÷²„çpš\Í/ÒŽ›c·7ã¨ïm +¸b,(ΓáèQ{Ï®/oÎŽu7zðüÍG´LöçÇ®ñY¶æÉÓ_€´ Wv7hãå÷°¢|¹CýÃ|"]A(ã¬å;À í'»ãíãžÀÎ$šF£$6êÑIºÒl3„)2%lpé„înv5]çèø÷ˆÞà97„’è^ŒæøfÁjŽÞÆk +jd³⢰éQB' Z|~µ—VF9BKT"}„yU È´éíboâÁ_@Ï{îÚÆʸG+sn”§×Y‚=[ÙM½ìðPÛ8ø\ŽŸ4Ý…Þiä³]ˆÞϱ[BÝÅn¡º~òöÝÄF¿cÂÞšmw:Ý_£Ú¤_ +ÞMø þx  Ñ<Ž‡G÷›(UZTâH¿ÚÙ›éHv“Eë·¡‡ú¦ü}ŸrF¤OQ”¨ÃÀ|ÛáLÁ7“²îi?ôÍ´Öxо¨¿ 0Ä%ë +endstream endobj 1847 0 obj <> endobj 1848 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1849 0 obj <>stream +hÞÔVíŽÚFý笠BŠd70;_žñ¨êJ M›î®ÀISu«Ê/]•…•Í6Í#õ-{ïŒm`•DAµeWx|<¾÷œûÅXFßÌ,ëÈ(°<Pª2º¾Î£‹‰ùm$$püËÈ,sXÅ—ßG­0®ËçÑ€qÎäãWã ¤,ƒÑÅèùs¸®‘±,Þ,«âþþn½„—ëmYÝó2ù%ÿ]©àJ2•¦0L˜òÁ¤!ã¸fg{Z‹²‚b½€«d ,3ñš„ñŸÅýꬽÝq¥Ú¡8ÃRL*ç0q®ƒL#™5ísÔϤ>xŽá¡è(ÿåwÁq>$ð¡ÎÚH[)ÛPÈ´¡[Ô[H†Ùøõâ •Œ·å",àŽ®.^',›m?4›ªùoÍ&®\¤¨UI7JP’|m¾K´Um“Åã| o›1—ɺñ·Y7Î0K>VœÂ.¥±mܵ~šÔ¿@8— 2¦c7\„e +‰Áè´×Ï¿üë[ÿ¿Æ»[ʲLPæx›;ÕU¡hªð¼T‡«Lï–X®–Š;XŒ56i]bs*ª·?©,¬í̦·¬ô½ep¼t“'Ïe˜Ž9:¸ÛXË”Þ.)å­HðÌšÅÁG l¶öMòå®àSš./ü«£oÇ#Üóý¯³|˜¿žÝÄõ¶Ø>Öíöü ¿‹@ÜõXÃW°*oß «ªx?ÃÑ3#¸º‰{£«é¸×‡AÊ¥`:å}â3ÐÎeÌpÞ‡Þd†‰ŽVÚô!uißÃÇ%˜3KfĘæݨÙ#þò +ù¡3r€üð›!ÌéF¡cÿÏi. Ú¬NË£‹åS*’¢æb)Ê ± àÈ„ Œ®ÞŒ§”V«Dʸ_ LkŸ]\ÚP3.-›–ŒE\µ\z“Ë&2”Ÿ„ÇpžàŒŠõê@x^îQjDµÁwwä8Q·ÕsTÕŸ‘ül[ð—)‘¤ý]ÖKDqCêuC?ú0ˆŸPÈzCðf>|xÿd‘šA4€2 Yð uäìñŸƒ„ðI“²¯¥ML#‡*ª©{rˆWÏüPP^óßk2÷Þ’ˆÝ,–×oÝ÷¦o{çñüÓ¡gÉ5âÎ’gsRϳmQm½û «ͦÂ[#ÌͳŠ›xÓäÂ[ /¯_ GT%ÔƈL¢ë㪤›Ygèà}5MÉï :øí醢»»£ Þ÷‹Ÿc8˜ºYwâ ûÉ$M)IÝ))äHˆfmŽŽLÐî0å*üüœúô©š>•EG:üñîðמ€ÿ`\Ö€û +endstream endobj 1850 0 obj <> endobj 1851 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1852 0 obj <>stream +hÞÔV[ÚF~÷¯8Bªd70ÌÅ{TõxY²Ír˜”U©* ¼Ä•1«±išþ£üËœñeiP¤$’£ªæaÆß¾s¾s™ÁÁNV …%ø47 (èÄz´^FÖð–ƒèÑb(þpaOT¾ „rˆŽEB]Ä¢5 ”RÑ;ë7û~|  †/^ÀB;, }:èøxLóÜåe¢ã]âüý‚®DíŠáy0`„I¢›šRrÜpyá^&ñ>Ñç{øU;æi§H ã¿ããS–ï8²$'¾Dy’xJ) n@©[ ­´W‡(Ÿp÷“CÌŽ1Õ!ªΪ2¢Ý M„ –ó6Ük¢‹œ$¾½~ÚÇfÇí2Ù×HͪìÜ!žÝ˜M#½{Ûñz¥ÌC©Bró"ÜF½ë+üÿ·È¥OõÉþ¼+áã„ÙICY4þNyã ‹T¥Šš¬s.ý6í®{]ÓÀ”rqm5à”Õ[‰Éhׯ_þsÓÿ/ùó«©ð 3•£míÄs²¦ ¿o¨£,ƒezÀvõMs; ›±À-œMaúí/‡ “=i³™-ŸW³%ñvy¾x¢ˆ××"JÖ“f6h-}Ÿ÷róP.ŒRÚŠ„*²fóés¥}ð”×J|„Í+“Ç~ëütÏ\<7møj¢áë?VÑ(Z¯¶vQÆå¹hÍ£++¢Õ¹€Ÿ!Kß´Žßßf§“~B8‹ó­Ý G³Ù<š‡ázñÐë› zá|9ÆíÀ£œ™i«Ð«TP¿ùý;ù²Bæ +W^R£ðZ`CÖ‘®U©¯¤]}¸–VGr‘ömºð鶶|×»U7Î÷­@„Qc]8ôúC¯»ôMvI–ÖéÙ7&K’y8>M0Wú}À ¶Ë¢]y}øî^Ûd¢³)âþØÝl6ߘFFA(ã¬Æá Ù(\Î?;­×A¬ÊX—Óx§O[»¸W¯Å¨›ZV¬aEM½¼›M0©³õý}wüsÒá­M‰2=¯º#_¥ÿ$[›™Ñ$A8~¦uHþþxL ¬Mlà–Šöº ¾Äà{ˆW7M'Ä—nY œšÙŸÌn: z‘æ7©F8Ù•éÉðßÍæë¨[Óspùç©°‰né£Ø\ý‰^ž3S€åú~̺õ°.’ªã{“å|ÝuþWoc„ŸL裗ëh:ž]ÒŸ&|©)å +endstream endobj 1853 0 obj <> endobj 1854 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1855 0 obj <>stream +hÞÔVÛnÛF}çW ôD6Öj/ä’DÐEbR'Ö•´¨Š‚× +š–´Rþ²³¼Èp€iJ£ $h—gGsæ¾dp´&o¶ Ž•%ø47 (he][¯bkòšƒøÚb(~paOÂ|A åßXµê"¬1¡” +ˆï­ßí«è5x$€Ùdö⬵ÃØåQ'77Yq„Ë¢Vú:9(çø-R‰–Šáy0f„Iây«Rå¸áòQ÷F%©Ò)|ÐΘùDÚª„èSrsÊUÕèbËsCtNOá" C n@©Ûº)9ñeŽþî>9Çð˜èˆæÝ?'lBºA c-ç}(¸×™›T58cI|{wJ³ãv­Òv™YC»pˆgwb‹NH>vB¼])óÐW!¹yn ºÆ}×ñÿkÜ¢.]¶'éí¡†÷Žf«NeÕñ•EG†YjbEMØ9—~w×ý2©Ÿ…¡3ˆk‡cNY»õÀ‘}€~ýúåýq•ŸMî„O˜Éís'ÎUȺ*|^S§y›ìˆåê›âvc…MZ)lNaêíÎáA•’¾3»ÞòyÓ[ÇËyòÄ1oçAHBÙvšÙ ´ô}"ÜÇÑC¹0žÒÞÉÙ/ÑÌ‘ö»?·ñ4Þm÷vU'õmµw^>¹g&ʼ7§(~[ÁÏ«ëûErÐå:+¶·'„OùÃVUVgwYý°·Gwijð¬`£^cüÓ×ðvRG·TŽ>4’œÊ{¥¼ŸÏf™VE‘,TäS­’½-.`´`ˆ×d ”šÎ6+ÃúrùO†lëD×­5M×¥®÷örwu5¨Ÿ¨áú*yP&ž 6º¼°¼g#Ù¨ú1¦$¼Œ'â¡ÙJ¤=÷Â/á¿ioÂmñl[k¼™×º<)„uSðñoë£7ªNê%ù7—É—\xý7DÈ‚0e-€\\ €/yG°ñEwˆáp ÷ÚŒ> endobj 1857 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1858 0 obj <>stream +hÞÔUÛnÛF}çW ôD:Òzï$äÁ‘”ÖIÜ +6íB¼?)SªÐܾÙ-)”aŒú ¼"V]õœìzÕÂUF„ùf€l{U9Ã"u©¢6ëœëÐ¥]ÊÚþ,ŽƒID¤O8eýUA 1ùî¼ÿñÍE\ðý«­ ³•£®vbß…lèÂÇuõ¤(à<ß`»†¶¹†ÍØàŒ6gSØ~ûpD“7˜Ãl…¼›-Ûe¿x’„÷ë &±î'Í^PZ‡!òvóP.l¤ÔÙ´ihÿºgP˜õ—³tUW‹¼\T5’Û×éÎÔçfÕ.ý %ñ8#ÝÂã]Žº?Ré2xz;Ê®¡Ygdúó|ŠüWï/’“äòbé[«×OŽîãÊUž.}FÑ”°Q™±+¤Ÿž0>Cwúç꿳=/3gÉè&àA€/Ú´n{h$wÁ!ôèùåÙbô î* 8³IÂþ¾ÒsSÀ3ÛOK?«®?æhlÓ¢¨V(Ÿÿ†S­o©õÝS¿)ÞRz‡Qá::€þ3Oê±'ù¡–ã(ñµxúkŽÇÕ×zÂY µ‡Ý¡%âÖï0´{öëô×óù£öë‚Ù~}4 ‹ªØmªré«1fª[i»b ø¦Ç •$xØÔJEôÿíÄ~¥ÒïkV×µ1(…ÚþêcZã¬Ý+²+þ‘{Xù«Ùlô(«ÖvÕ‰°Øðpõœå¶žøÌm!G§¿,.“½ûøÑþC€/Ž +endstream endobj 1859 0 obj <> endobj 1860 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1861 0 obj <>stream +hÞÔVÛnÓ@}÷WŒúdC¼Ù›×¶!IË¥)QâÂAho‚¥Ô©l‡–Oâ/™íªªByØÉÙñœ9³3k3X;ý‹9ƒué(!@F +…Â8+çUâôÏ0HVã@ñ‡ ‹BG +J(‡äÆ¡…P‰X²t|B)Ü9ŸÜËñ9$‚aøü9L E$r·ëBßÜdùÞä•)Vzi¼ÏÉ[¤5'"Àg„©’QRÙàhpuŒ=3:5è<……ç³(7Ã0¾×7·SîãŽ'1ŠS$P@¸ˆãˆŒ(•µLÅI¨Ú}ÔO¸ümËc«#ö›(ÿPœx_’pSFm%l¶œ·¥àA“®.+ð|EB÷ú6ÕÖâneÒڀ̮±›{$p·IãT,¿6N¼^) P«PÜþ²••/ߟ¢‰±Šm½“î–|ðˆ0×4!ˆo›7dxJûZQ[vÎUØÖ]Ê?õ°8öüˆH7ö9eµ€§°úíúð埻þ¿ÁíÙ‰0{r´=;qèBÖta·©6˜ekl×Ð6·Ç°KÒÒàp +Ûoß<.4)i'³™­ïgKáõr¸y’„×÷ALbUOš5Ð[…!òxõP.¬RÚŠ¾=å¾û2OÉõ|á–•®våÂ{qlòÀÞ(£½»ÝE÷] /acVw½,¶Ó,¿2ßß ÷l§ .®Fgm”äÙC¸¯~ô"uå¯øߨ¹…Mžë©.ªLo&¦Ò›Aa4 Wöàl—Ê#)KÉOA9ÏRƒ°eîšöBW¦æauE­Ô®©xhç$Âêêe«Õ‰J7Ñ÷–i¨‹šìñΚÉl ïîÀš¾–'eã{¶îÇú@(N*O6òd‡½‚dm_>¬y…*j*„³|º-*|ý ßÏÆO+#\]êïƾßp‚Q~ÑwF23KTÂðã¾>%ˆK´8á%¶6íá—„K÷í8¿¦ô©}-Ëc +M"ˆÂS&2ÎÓ6„ëCmÁÏ Ÿ ¯§y +endstream endobj 1862 0 obj <> endobj 1863 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1864 0 obj <>stream +hÞÔVKoÚ@¾ûWŒr²¼ìÃ^Ûªz „ô §9”ªr°!HÄT¶iÚŸÔÙÙ]NQ‹U ÝÙÙá›÷, –V÷í”Á²´¤€€†à……"³ÖYlu/0ˆã@ñƒ …J(‡ø΢ˆB¨‡¼xn¹„R* ¾·¾ØÃÁø$„~·z +ãÂa! íͲHîîVùÞçUV,’yæ|? *aTq"|\F˜ô!>7R#Áå{’%iV@’§p]8. ˆ´W ƒŸÉÝ÷uVjÜAlIN‰îIâK \DQÄ )õŒ£Úw}‰îî=ºÄè(¡/Ñû]l"‘ðÒ ›@(c9o"ÁýÚÚ¤¬Àq% ì«ïi¢(nWYjX©=²s‡øv-6ª…Šùm-ÄÍN™® +ÉÕAx†(ï½ Âß‘D¬bcnÒí¼‚ÏNfg5dYëÛäµ2L’UQç\MØ=ï0§¿E‘ã†Ä³#—SfH‰Áhö§o/.úÿ‚ïŽ*w" LeŽ6¹»*du¶kjo½†Éj‰å¨âvc‰=ZfØ›BÕÛ‡ df)i³î­€ëÞ’8]vƒ'Ž¹‰¤é4E ´ "¼ýä¡\(OiãdÿÝ ïHûã·iÜ‹¯¦3»¬’j[Îœ×û"÷Õ@9×âêÅ·%¼u¶¸ŸVIQ’y±#{•7E5³?] ‡ Büê)zj©Cxƒ¬a‘] “_Y1³OÆý“ÐÖ4L²9:áRâùâÈ' ©ú,UävjíèïQŒäic²M,ñ'ðïÈÏ›§ó¬\-óÉv]¯ÒêVg ù˜4ÞrÒBâcrpE>‘N™YéAÒZ¶Ÿ +TŠ«±ŸÛÝú"–„-‰^ÎF òÅΆϨ¶¹ÏÑNÇVåÝ'רÝ.ŒPª×Ÿ\‚ —gÓ§uñ%²oÊ#¹coJ̲õ„1lVŸÈVðë¡à¯ø¦Ödp†KUëÈ—j€ËNS`ºÆÝš~„êñ Ñ^?>ü¡ªvl½ÖlZg¨-ÔÝŤ:= A›ºMô¥ñô0öGlCÔ­Û°ÇÿJ…cM +endstream endobj 1865 0 obj <> endobj 1866 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1867 0 obj <>stream +hÞÔVÛnÚ@}÷WŒx²Û°ìÍk[U(q.MÒPp’^¨* j‰K´vš¦Ô¿ì¬/ æ)‘Œª¤]ÏŽç윙9À`áôŽÇ ¹£4*ŒvæλÄé1`ÌÆâ$ +!”PÉÊ¡…P‰¶dêt ¥T@rï|uÏã#ðIƒÞàõk…$t7 “®VÙz§ëB›y:ÕÞ·ä=B‰ +ŠáûÐe„)’Ã*¤²ÁqÃÕ.öH§3m ]ÏàÆx]åfâ_éêv©ó2nœ8¾Œ09E|„‹(Š€ÈRY¥©8 TsŽù.ÿ9Gz,;¢<Äô·äD%%à¡ &ìm9o¨à~}Ý4/Àë*¸W·³Ôî¸[èYµÌ®‘»öˆïÖnµ“™þ¨xµRæc®Bqû de mú2ˆðý!n1–ÙT'³»i×^æê:d^ãmÖ5V©äŠZÚ9WAû”‹úXyÝH7êrʪ­žBöšõéËw}¹Á·¶v" ÌVŽ6µÛ.duî÷ªýåFÙÛ5°Íí1lƇ4×8œÂöÛO 4êi&³ž­€—³¥P^¶Ê“$¼ÒƒˆDªš4»AoDÈôP.l¦´Irp<åž}'ýäjh3ÒÓbâVåe”¢½\@úÄß3j‰ƒ_;»”6¸œðVe¡Ñ\ѹ÷Jñ}WŠ—D¡ל•ÏRñR8Ú_E«,_žIþø+À2i%­ +endstream endobj 1868 0 obj <> endobj 1869 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1870 0 obj <>stream +hÞÔVmoÚHþî_1Ⓠe_ìµ­Ó} @{i!AÁ\«««“ƒ°vd›¶¹tÿ²³~!mYQKu:´ëyyžÙ™±lŒÁ«ƒMaH.õÀö$ +¹2ÖÆE` ^2`¬ Æâæ¹Ä÷À”PÁÞ ˆB¨²`eô ¥T@ðÉxoN'/Á!Œ£/`ž[Ì#ž™mòh¿OÒ \¦¥Ê×ÑJY‚×H%j*N„ã@Ÿ&Æ5¤Ôà¸áòûFE±Ê!Jcx›[}æi& “ÏÑþn§Š +w’Wbx’8¾ï±=Jí:Ð*öJ‰án£ÄìhQ)1úcnü*#> ÒöÚDèÃrÞf‚;Íi£¢«/‰k.ïâHï¸Yª¸Þ@¢WßL-â˜Ù¬1ÊWÛƈ×+e†*$×®…¾ŽÞv}ôŸã±ò¬ÖćU Z®G˜©È¢áËÒ† /©JÕYç\ºmÚmûñþ ÌG6ئßç”Õ[,‰Éh×ç/ÿ¹éÿüø¨ïN¸„難í݉c²¦ +íQ‡»Ü$,WW·Å° ìÑBao +]o-.P¨bÒ6fÓ[.¯zKât9ž àõ8ð‰/ëNÓ´–®K„ý0y(:RÚY”QiIóPÀï°SëO³h•gó$'9ŠÕªL²44{×Ë`¾ z¡õÛCí;zÎŒ+”Ñ“š¿ù{ ƒå"45ì¡h̓³N®e¡PŒ,‹ËWWÃiï‘ÛÏ/¶ŠïÂ/–Álrœ–`˜j±JÓh–Åj§“õîr> endobj 1872 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1873 0 obj <>stream +hÞÔUÛNÛ@}÷WÌ£ ɲ{m«â†Ð¨Lû€Qe’ÍErbd;%éõ/;k¯‘„A«RÙÒŽçÌÎåìÌšÁÐ:xwÉ`XXR€Op ‚B®¬õ6²N0ˆã@ñÁ…> ð%”C4±(z!ÔE]Ô³Ú„R* º·®íÓî x$€ÎAgÎs‡$°³ažL&ãé>LK•’žrn¢JÔ¡8žmF˜ô :®]Jí.W¾/TÒW9$Ó>|Í6ó‰´Çèºódr—ª¢òÛ,Ï ±8I< „‹0 ¸¥n]¦äÄ— Žõî>À‘ÍŽ¨@,INXQ‚nÐ0¡³å¼¡‚{&ݤ(ÁiKâÛWwýDKÜ.U¿`¬×О:ijٙ1Ê{#cÄë•2k’ëá¥.ßõCÜŽ"úʳéÏz%|qü€0[—…‰—MM0<¥Š+ªiç\ú ï®»~¨?…¡Óˆk‡mNY-zàHd YŸ¾üsÓÿ×ùòSŸð Ó'G›³Ë.d¦ ÿnªGi +ã!¶«¯›ÛaØŒi¡p8…î·ï¨T}ÒL¦™-ŸW³%ñzYÞߧÉÕ*¿P½2¶¹KX pc \z-pè…šµ@›(ÑÞSr1Vó»*…fÛýlv›ª½Ø™$išõb‘büCeƒ‹=¾æañbM×ôàPoõ_£bûNöÛÊøCtùçI9Bò[UQK{C½–èò}åuAþ™žYïã[MÁâ5,Ýgðã[_WÁƒ\)´Šñé’Ç¡Š°Ój±ÅjžÂ¡ï-³…ƒ¥ëx0[Þút¾lû<½¦hT‘¿Æ=BÌ@bâò6!a `r ®Ÿó*ðu¨IƒnBMþ&´JcjÒ`kÐΆÊÒÅ0›Æ6^Íó*­oæ?ÞMéîVZšà¿î—j¬ºL +endstream endobj 1874 0 obj <> endobj 1875 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1876 0 obj <>stream +hÞÜUÛnÓ@}÷WŒüdÓd³{m ñ:’4Jœ"™Ø ‘r©l—Rþˆ¿dÖ—­•’"P"íúìøÌœ¹¬,´ÖÓ1ƒE¦IuÁr% +i¢ÍµÓPku0çã@ñ‡ sâ¹àJ(‡p­Qd!ÔB,œiMB)^koŒ^Л¸à·ü“¦&s‰kli´^/7 8ÛäI:f‰ù6|Ž®DéŠaÛÐd„IÂNI)9n¸¼å%Qœ¤mbx™šMæi,‘‚OÑúr•doj’G¢> endobj 1878 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1879 0 obj <>stream +hÞÔVÛn›@}ç+F~‚&ÞìvYU}p0nÓ8±eH©®*d×’/¦éõ/;ËÅi¢>D­iT´ÃìpfçÌ,¬£·ƒEnIŠúàú…,µ®­ãØ:0`_[ŒÅ æ+¢}P‚Ê!^[QuQϬ.¡” +ˆï¬ö0€G|Ž‚ƒgó‰ooY²^/7 8ÙivÌRçSü]‰Ê'Âó Ë“Äý +Rp¸|Àž¤É<Í ÙÌá2sºLi/ÂoÉúf•æ%n[ž«18I< „ ­5קԭ”œ(Ùìcü„»ö‘ÃŽ(71ü9º¤Dnº~Ä9-ç Ü«›ä8]I”}q3OŒÄí"W,ͪíC<»6;«²Ù—ÚˆW+eÆ*$7«”Ü„ï*ïQD¬l[íÌog|p”O˜Öyío»©a–J®¨¡s©Þ]÷iRÓÚéúĵu—SV‰8ÙhÖç//núÿ‚ïMî„"ÌdŽ6¹»*du¶{ÔÞj“åËU™âvcŽMš§ØœÂÔÛW‡ T¦sÒtfÝ[Š—½%q¼ì&Oójh¢eÕiF@k©îÃè¡\˜Hid^$…#íÛÞÀ*½¾‹Š$+Î’Y¶Ú¨ïôÙ™:¯JÞ3ó¥_¾¼ 4:ýŽø"šÚí6oÌãW¿uQ¢«$Ï+ÇÃQpÚ9zÁéñè +ý¡þÆ_xl³t¹@õ&*²i‘ˆÐ-os€Î˜?snæ5o>êåíy¸È® ÓZ³ûŒÔ¨–S3îõMbz“°w2ÚM/›Õ~NüÕ.Ñh·D“ß>Mºeš‚Ñ$4,]†ÃaÜ·D”n™¨õ}œæÅ¿¡êüb8Ü_‹GËïéÔf¨ÇßC`.¡{¿_¯S£Îî1W}»HÇ ª ü9®§Ó Ge9PoTç|7«ÌZübÑú‹…_êŸ l—ý* +endstream endobj 1880 0 obj <> endobj 1881 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1882 0 obj <>stream +hÞÔVÛrâF}ç+Úô~6Þ†—à&£É«W0“&ó‰o”k™ìvy±†i¡„Ì’•0‰¿ÅPVŠËq`Èsˆ/HWƒã†»Gì¹HR!!)RøAšCæ×È»dw»UÆ=—ÏEz.q\ Ü +‚ˆíSj7Dkîõ!Ò'ÜþË!ª£¬úÙßkÔŠ€‡¶ß ¡“å¼S‚;m¶I¥ÀºÄ3nnÓD︡DÚl ×k`&qŒÖí]ë$W›Ö‰7+eRµ\®¿XNc´4{Û ðÿg¸E,Y6'é~¥à{Óó 3D YµñÊ¢ †Eª¥¢ZuÎ]¯“ݶÖô`A`}bÁSÖl0] [¿üç®ÿ_ðû¯ºv–G˜®íjgÝw!k»ðßMu¼ÝÂ<_c»zº¹M†ÍXá­ÞMK÷Û“[h)é.f{·<^ß-§Ëýà‰cÞŒƒ€nsÓô½]Ï#–}œ<”[š)íHNÞ„Ó5¾ûuã›ÅÒ¨T¢öÕÒüæØäŽ(µ»>E÷}¯a+²Ã»d%ËΑY‚f…ó¤X(¹4ú—û ´ƒGèú— 4X¸³(ƒÁÀ»8ñWɦõzr6A;ÕÉ@?ª“jÞ:5ú")„EZgAwhÿ‹JõŸ†ŒR[„2Î:­G#£‡Q4€Úärlœµ@s!d¢)K ~bk>U^¬L!ÙJœøa£5ù `Üàœ¬*FªÐ«Ü‰ÃFHñwDÇø*ŠyN#´ÏnâÙ4j±ÓŸÂ~]Zö"¢c]ß =>L3¾t´šÙõif/,‡·y!–Æózä“£{x5ÂãGÝØ…J¤:kŒŽæ;…|Ó«£ÍÃþ³¸iTô§é´HE¡>#õ0…&úšHB¢J}W'ã‹0š<3…×± ‚æªò ô#äC½Ÿˆ½mêíw-ød/%ŠˆÝfö÷B~9ZžÁÒ@G Sc¼ÖíS®øÊÐáVæ…Êt6ø+Pâ çók´Ï¿†¨ÄÑ‚¿07Iï…(t›dŽs´8;;[.‹þGT¶Ú–è]a#gå^=Y +µÇSYý<{ªCÆïfü›~¶ý)À¥>Ãw +endstream endobj 1883 0 obj <> endobj 1884 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1885 0 obj <>stream +hÞÔTKÓ@ ¾Ï¯ð1£UÜy?Ž°t¤Õà€8DÍ4TjÓUR‰‰'™Á‰ B({ÆÎgû³=z¶yþFB?1§Á‹&8ÐÆÄöìiÃ6w$4{&úHÈà1ðZ PÐœ˜ †îš«Q¡¡ùÊ>T¯¶w`1ÀíæöæîG.†êÜíétzx1\Ò¸ow‰l^R(½„R¨­…Z¢tšg ¤Ëà¤(÷û!µ]¡:x?òZztÕ aû­==Ó4ãnfM¤âZ¨tŒÐ!ÌR¦SèÝj§úQ™_ìDOfGÏF*ÿJNœ)‰@FV&r¶J­T([Òm§ ðÚ¡¯Þ>vmÖTuIÝ¢À!ËX mUÜ^§q÷©8©E +i©VíT>h»\š\¾ñ‘þ¿'•°Æóbé>ï.ðŽû€²Jr*ñÎC F]š¹™v¥œ_y7æ÷¦~#¯š*ÖJÈEµÀ±°Ê?ÿÜõÿ¿sï´G™;'ÖÞéëÊ2…7Õ'Ç#<zWŸ‡›KƉ–tJ´œ:ÏÛ®4]¦×Í,»åÕ¼[Žž—y¹~07oìs +endstream endobj 1886 0 obj <> endobj 1887 0 obj <> endobj 1888 0 obj <>stream +hÞ¬XyXg·ÏfƒdÔÄ΀ qâ¦(â‚"Rqëˆ;‚€,•ZÛªˆjµ +JµZµjqßP±z+î¢Á`ŠhŒÅÒFqãž7žØï¾~í÷ݧßsÿ¹a&39ï™ß9ïïlÃ(ìZ)†q3:rtÄ(¯‘ ÒÒæÆÇÚnv%Z†t°#]0¿Í~;€í¼°¢-,q‚ÎG:»LV+Z1ÌæÒ¡IÉY)sgÏIs}?ÞÓÕÇ߯_OÛq@óÑßvô÷v23).Á5*+5-!1Õ5la|RJrRJlZÂÌÞ®®C,pmÖêš’š’Nïþ‰Åunªk¬kZJìÌ„ÄØ”ù®I³\Ãç.LJËJNp2Â5váÌ>I)®séÚÔÅq©sgÎM™›ú×z…‚¡ +¥BaßJáØN!)]:)+!sŠ …"W¡Ø¥PìS(ÆQo(ì¼¢·"F±^qEñŒqbº3~LSÄœkÕ±UQ««Jr•ò¸]Ý^»kvVö=v[Î9pùDn÷;ïÁä“ùoør{ξ¿ý +ûZ÷m]ìÐÉ¡¿C’C¡ÃÃ6ÛŒj“Òf…£Ê1ÅñTÛm·=¨òPMW}¡:£jtb¦;muzÒnP»-í®;:/t>à\­î¨ŽQïUß´B‚°¤½ºýN«Š~𠉇 ê*ÝmPQEâEG…6„pB)tÁ ÿ¼RYçÚÄÜšÔ¯£Ï ‘Bi!ôÇ +nî걓¾¦ðµÛvTÖhžuåUø#ÒßÎ`n5(á3Ë"Ø;»`¨ÇÞBç×è-ýÈ‚Ï8P¿–Ÿûíô•þZÁ Êß0^ô®„.ª±#À¹+xK‘ÜOès Uè¯ÁåÑ^ý‘®s-M‡:6ê”°Ž‰˜‰¸@ èm¤|ô8õ¢‰yüZùØ¥‚›²,&6GšÊ—<Ü +ÿ@ Ù?3' W Çàžˆ¹>k[—×¼¢š¨µ]Ý^Ûnå§[Ve0Ãu%œ±,Ã8\ýn{“SeH¥)k€Ó J2~1tª›»ûÔ&…ÐSM/^œrÃP©ÁÜgÂ|œ†Ófâ|tG÷Ã8¦Á´Ã0Ü%Ui:É© õÃ×Ôh‰‡sIÈOY†ÜöÃÀÏšÓÀ«òêÈ!ƒz×óhj #™$–¬‡vÐIûêûШ>ž!÷žÀ +¿ô6p%ºÛ“ÅuV5·vwé¿UèŽt|s±®Ôèài@•$Ôc`fÉÔøZéõú!ÆǶº~dƒÐ <ƒ4¨ ‹Öj…——_/C‡€ðñ>ØaÉ“«don}@iÀý8û¬'–ž×ˆjPß0ù̈ír>/üzhóùã?kþ;à>vÆ1±(t“Œ\ùÚ /ÁYûæ›á±¾aÉ#dáYö’5k²ej?ëÉjÿ#“’”@°¨ïF¦„ðxÏ:Ží—1ØÁ¼‘Å|¼‹éÔíz¨2€§‘!~ÔaÃÈsέ +n¢µ­>‡=¾ÿÔÎsÚÇ·Ç»ûŽ ñŠøþÁç/úƒÃ¬§ZH>ïCwlýrá3ÒÓ›=pÅ¡æP=œ«W’Ø×¥â{3wnB¤Uéìk¬ó6l;ô°Ð >Ô0¬ÖÔo^ f²ŒlD2SN~û§l“b(+¾qZólxj$¼Í™­‚QTÌð$Ã=0:Ú]ÆxNµ/ÓHj̉F¥¥?Y-‚ã'^Àã-& {á"Ü}Ý`ÀHÞ ;Ƚ8 œ‡Lb¸‡¾ù \n¿ICõnYµ&“ò:¦ÖL\•µ.p„ƒeU0úA<ò´ +Œ•ñgö!ŒƒŽuÞ†aþï£ZÆHê¨<#,7B²‘1š•Äj­Ã`9yÏh}’É £µä]ÙÍ©©? ÿƒÑ`áßP™nFëŠwqfNõ8³nF:\¨ƒ£úL#I¨ÊI'¸ B7hÉèð)vâ‡9³µõôwˆlz¢áÍ"tÞ'7pÐ/=õ¨ÑâR7ŒÁ¡Á譺ʳË.O'í³ŸOÜ*—…ì½Ù«¤=Þ¢¤€LF8›ÁÔ˜I +ýñ­màl +L¤ šÌ–¸6n•¦[â2˜zŠ;Ò'öh‹Q™u–.Lq=¤š•Å°D åG–¡š¡ÕI’Hiën~XÊŸ‘qûŒÒYÞF)›=Õ3Ö‰ÀÒò¶­,¨9¼LÃy8΢†Ãø‚…¶ÇÐ,o´8þ±¤åÑ$Ö–ØTÐ%”dðŒ®¬jPZò],q(ñ8ÃúšÍå0–¼fQ~×@‚¸ÒÜúš|¦YŸ³¿Ñi¤d™ë®±ñtïA"4G1ú¢¦U«$‘*@RÃ"oSP“ÏÆZÃc‰ëeÛ¥fæn$«(ù@öB'šx¼{eÖÀzòïzs Ôè}ü!K±ÔS±öy€©P +¥ úHÍqv±òë(/ài#¥†-Xb¸Ÿ®,ôî9¿¯Œ8?;HçÀû°`hÄN2êÿ`ŒqTºå£ºp’øÁûâ½ÙìÄÙ_ÄkÿPŸ¤ èhÙû+dB1ƉžzV_ó-°õšÇ) 'ÿ€ª¿òõÞÓoÕŸ¥ÞÚ +'ë`UÚd†˜?h¤á;*EøÔÞö›‡G& S4]†6[¹Äâ•[VY.s㾎+¶ÞœÚ}áp“z¢ÃQtð‘Í ‹“¬äÎÔ~ŽJ·ÁY¡2.¦Q•YGשËié…_ë‡4:¡†˜É:Ñ“=p­CB°Ú¡sÓ¼ÓËdð˜Ë +OÀ!é`ê`M7tÈÖÇíM¨ÞÜÈÍc+ÇK ¿;Oûê‡Nà à†]ì½]j0ö4ûÕŒ’J 0¯Š+kŸÎAå:É«G#_™•EGrÞ9š-Žc´þÔœy,rc0žÍ ÊJëd½=â>èÛó8mÐHtk*š:l æ)mH<$2‹Ò?¯‰ ¦ÄÂ+ÁÔ$6“”°¨à` M¦¯èÉ–[Êíõy !±àÄl}ÛMI擧"e¯Ÿõ)û’ƒ©+‡k­æýH-ëFO-WzÕ…ƒ±TÝKîŸá¶ÍÒZI\‰+à‹öŽÂoq|Ë¢Šƒø +¿²Ú±Ðšƒà LÀ3,8þ¹QÕ´¥„d‹‡qø ãà‹,;­ôÞ1¥yFrÜÈì W”äÍ€‰ 'Ù‡Ö=ýˆo ·žaÈÚb:ŸeòH…’T ³xÖZë²u#ªˆ§Ný}ý¨ZXaŽ +û¡+QˆGÖU6jëŽ$ŽŸ”òEz®ŒÝ³Xá(ºg-í>]ãs+â·—gÊH‚ø‚Íñ÷µ%…ë×n‘¯ñ¹Ÿ-ËýB›µlãv.ð Áž›cQô›ŒÎ9ÜÃÑ¢@ËêDÿ°….ݸ]x|½LÑö E›ìUÙúˆJÒÅ#3Ôÿe‚ý4ù +Ùàæ"”_Ïç~]ýD ÃÏC 8ƒGp(Ë«'¥$Œ·Ï…"_NÈ~Ç;Ø* +åÈOëëÕ· äGEðÕÓùKGÊ4ifëé3˜½ ¶¢Ú(Ö/ŸÔˆïiqÈ@šEú£×cT‚ô:­ë6Êý¹Àìèé‘Zl»”?ÿrð50Õ‡c‡m’)Ôøt2½êÁz8d¢u"‡òзp¹ËÙ½éñ?öÔ¢„z óy „áç.o½sHΧ8‡ÖñB¹µ5EzóK¡3Eø^”ûΊòšöx‰j‡ÁUàmPi€#¦õÂâ~âÌU“GûiÝ£¯#5c†€#zý;tI ”lÝ)ß8±³ºà{ZNd±öÚ½ZÚêü÷ÁëäæjB&ê@m`Œ&%l!EïuþXѶC›ŠV¯Þ$ø5Ÿ,]³TÛ/fvì34ä®u¢‰L¤ÜIÖAGê½k£)²zØoj¡Ã6ƒ¶„vP(úqBí\þï|RujÙymþb~L§z¦äÕ-‘|éÖCÛ¯ha刼gëÆ[|Í\7AíÇ?"‚g÷ý¦Oš—"åÂ×¾ïâLpˆ¶ÕÇî>,™*á¯&žŒteIðꛦЇ”ˆ¾Ö'x“ßißÖèëa“ÁYZFÿ]è1¹tå$)+˜Ë-ܼz³\ÖšNÊ‚·å{ºÎ×Ãd«¾-ºçg07ÙæµZ¦À$í8\Œ‹XÒ·ÿ»¸G0™×Ý€XÌË5ã±ÅôMêö>6ºPÔ¶Bj³ÏæTj^²íÓ¾3å¼K³A]Lß½^Ñ“nz†’ûR½ò lQ«G7|zp-hƒÁ 10ÝP+Õ»Tí¢=Ô»ÐeØ°EèB{@õ"p©¢#uD:Œÿƒ5-a]KçéÏÄ–Ðl‰Ë¿V`M°%Ÿ›µãÔ¼ªÿñ=ã#Ómæ™mæý«æƒ-|¤œûœnàÿɹ|ÜbâHñ/¾þ+‹m/¨ó" A ê“PFdžK¢þüµÒþz.ùÊ5Ë´aSã"æØ Ü~ls!ß’YºëÕß=ñ2…šš fqw- Çvë9 ù¡gf鲤—)´TÞËÜóI¬æÃq)áØîÓGWIý¹ð‚-tD‰×‚Ó렸“p™Ý´FúngG'u\s½fãnPn?oD£x¹ž8ë:ŸÂW¶î¾èrŸñáÛ&?ÞøÍÚ‚ï¤Û ø¬9yGeø…oɯqê[&È¥t2É'.¤ÄÒÝžç‰ÊqÓ÷%hôµ:òèüˬš‡'¿«,“è,%dÛ Ì3“AÌ’©„5f[ùìL±Ý9ˆ²–°´ÿýˆ”°^œ­³ƒ›éàAg—ÑJxK> endobj 1890 0 obj <> endobj 1891 0 obj <> endobj 1892 0 obj <>stream +hÞ|W XUמÃaÏ âÏtÐ=ãý’€â”LQTÄKŠ“ +( ^@ñ‚&!¤ˆ¤€â-¯ &‰¢™cÇаLðAX¦‘‘Ú—º¦Öù>¿=`eÿó?ßsÎsöÌÞk¯½×»ßõîutŒ­ £Óé:M +š2)0`@@ܪø˜Èx·àˆ%1ËWEjC>ª S;Ù®w°Q»88Çaæïv¿B̹ºç[̹L÷Þ3Ÿ·>oqàº2LÆ:À,GHèxºKÇ:#c£ÓM™·lm|Lô•ÝúÍïßÍÃk„—+ýõÔúëÑÍoA\Dd·ikW¬Œ\º¢ÛøØùqñËââÃWF.pïæ·dI·Ö©+ºÅG®ˆŒ_M;ÿïý0ÆhËô`™×ÆÍ–bà ×3£ÆÿUf8±aôLW&€Édêúê’tÕ6ž6y6wõúXýc[£­ŸmšíU"ù¤œMf/q:.„+ážÙÙÙ­²û¦_»Âvÿ¶´/mOÚnßþF{«CŒC‰Ã¤Š3þå8Âq…㧮N¡N ´…$Œ‡ázØ“&‘KìH"†-²z#A(z¸ý»)†ÅPƒáàYK¬{q¬¤q,§Yå(Æû +³„ÊüãëÎ|³ÚzHnx‚åÃû°‘œ:Qtá+—'Ãê±Ýø1 gÎ7¿¡pßý˜s¶ü^ôÀ•aÑ‹ÌXŠ‡ˆ!Qý2¬TŒª“e•…o¢î58mÉ-øÇ7-aÁoLå*JÇ8¾¹ñV¸×ÈqÁCƒ§å#&H$îÚ¹„o„§?Uƒmýì/ÇùÇ(»êÒ<¼Â-ðÍ¥‹g›éVÈ*/ëêHPôêf˜frWF²˜iõ&S¡ÐÍœ”Ý4sVN6Á*•'VžÕ6vA?YŽXô`P3aw,‘–Èû?~º6~d¿1Ó]C¦È!® '‹kåÄ[Â¥‹ûÏ–Š'OåX*\€z™Kׯ™k†0(‘5è ³ gdc&Db¤z£ ŠF=Mp„µ`gÂ?é#A”<Åhu7Áx z³8ÓE¦K)÷d¡’Úâ;,°p†d±šÇ8$Ù(±¬µðO “l"Á7,ª®}sgÚǾÄ ŽW?Ë)=÷…ËÍ7«°›K¤»¬â Ôa‡#O ž;FÄA,æØBtçø'…0`3êAû­#DÃZEM“N&K+Tñ_ÉŸP“Ô+&þêêô„Ä´ÔÌŒÍæ“3£ö hýczþŒ=aJMýɳ—ÄØ={ò’Qöô…àþÐîzóo_‡¢í6ñ|6ál8µùƒã.…Y¹™EÚ¡©Qx'TèÁI6yKpš…±UÐúÃ4Ô7`;?“´†²_@ûp ÂåØ;a’ˆÂËtWÀGþ®<¬œÿƒ·ª›T£é<›Äš(ݵF ‘Xþ5ƿŦâ«/ÑÐ}üd˜%ù¡ÐA+”ýíM÷§7ý§ÎpTÆWÿiMMwÑãû‡–âÞ2œnƒ®°BuVÂOñ÷¡¶˜$pÅN\¬é‰Sôœ @೚G" •Á½Ûùêedøš9´ëÞ?!Ðé%ÈÇ‹üý¦êÜ‚/EUÞʸV0)úŸÕËtÑqÖ('©®4“Õ(û·E”rš÷Ô +OH¿Z£zKêvl!³ÙwP"ø1µçÙæ +ü@j¿ºÛT'£7‹ÎØ„ÎÐDÐ[ª³FùJ°Nî¥FmgÁÕjGrh£Ú‘íÖ¨^Ú€/kHºÁ‘Ò–_cò”à=mÔhJäsPn=Jê(º²úž¬;[¡öªÐ«(2Û èƒÞè=û ºÝÇ>à Þ÷¡¸™­sœ¿NÐz\¢˜ñȇЦö¡¼Æ;x]†- /Š*õàE7e&ÑÔÅ×àu0s0}t+<¿:¢ŸˆÇ$º:ƒ™­üvÉ Yoû¡‹ˆÎ­Œ™/Ct›vjÚ!›†K „ùÏØÇs‹½Êñ;p‡²«NÆ@§AevÜíì–Ÿ\ +’€ÃÞf¼"5iäöfŸnµbyÊì"bgNËV«¥JJBA‚ñû’•¸òœqOfž?¯Of,ü‘d~AòMlÚ±8{ñ"—ø´åiñfyá&ŸÈܱw·°ý`ÊæmâªÒŠ”á‹` &tØã¶Cäó˜€íž¹M.µuçnŸÿê%Íû–g-̈-ÏìÌï`6Þ"|vrú‘Ýí:iÇ¿—<ŸÒðHrüæ ë’…Ôµ»37‰9‘a»Âì5¾w zÀôÔ£ébMêí´Á.ËS†à3ÝBïq¥÷Ö‹/èÓ¶mf`2ãßúôÊõ,%Ÿu=û6&•mÚ ÓøS¶:IpAF'Ê>v/N+ÛF IEjŠlLƒXŒUŸ`,ÄòÕô*¦Çõ¥Œ±Òc'ZSH*‹“Ôò«Öõ oYóÈ·¬6÷Õ¢ë²n3C"ëÕËtZ©ŒÁÒÏìä¶Y:Õ‡ÐÆêCß&R¿hÃgد©‡Zlè0%¶ ®}‘Æ#° %ª,H´]Æ×}L½^aaÆþœŠ[ÉTÚ/÷`Áƒ'.&=´÷©,N…­„¯£<%ŸË(QYC3NB3L" ôýÏŒËIQ.€¤Woi)*Iµ,ºb6ºB6©ÕæU±0š2"#9˜ +¹Æ°c¹n‹Ú¢ÇŽ¶jK¹µE»à¢e˜ '?­€J…OTcàšéHÊoè=fâš!æœ9äð¹+‡¾®^Y ÆpYá;#_äf÷ù2ÏúMM5Ÿ|rÎÌ'úBwÙƒ›õÐÄ—…DŒzs´0ezÑùüC߃{^Õ†Ô³bÛb”çLªvêžÉŒXžVð‰Ô*SK6±ÐïÂñe\ð™ë‘·° :°—þ-h53BL‡ã,H&êV«›ÉÝקo¯ÆGoþú[ÕèîfíÊ~¦¤&¿ª€‡%|£N2Å¥mLIÒ6oÍØ$æÍž¿û-Ð~8öÅ®`?øºúSÊbüi2Åk^"½¼ø æjà¿» +6_ßZ<<[<¿ðç6œNÏÝ|ÄîhÆÑmyæ¿cyW‹Å‹Ær®žjøIj W§sŸFÐØÿ5*|Ú=FØ]óÑÅ3æ –Oô‚.²§ZÏa|âv‰Pƒ)ø»éiUío¿6ôëë5¢_ßÛÍ­ñxÊÐKÑ}uIe,zõØÓâ±Ë‚„žîŸmÕ¡ìÖœ­{¹\›@ÕÈÑЗa8Þ­?^tÃl}BM?ì­¹øHhùv–»–|Ð(ƒ«’”`„x…ùªÁ±4AöúŽÂGgÊS7›ùº<…ðÍYÁãv.£—ËÒé£Ed$`°‘6jjÎÐCNr´¢Рð-ê*ê펌]§³|õ%c‹´ë;Bîü³Ø߬8]^"fŒd{M\ýúØÙ;û›×‡’ÄËÍo[Tøý·¢Õ–šîÖÞú±¹Ê×mȘ1Ý®?lf ðàÓ +&ÕUZ£ÚË&J›å²'d³ç+.—V +ßšã/â +O-µ†Ã.îË7Ñ~Ü„…á3Ìp£äÙ&=È&/pЃCëÅNª/½Ðð%Õ]Æqª½-8ŒD‡ÖHÕ5/¬QÑÿÒj¼pÓ7 Å®aáÛwD˜ß•È»åg7(x<¬Õ/Ío]ì9³ãÅîÐS¡%Ð"ô†0^UÏPw¸HR¨V¡HTm“™’–ùZJ@wù,- +ÁÇ’Y„ÉÃX ƒ„WaÈ}MžÛ´ÁŶxŽQ"Zóÿ +¦•iYÒ‹°éyU)0Lû¾Ò…oPK€–qe&~8c^øÂèeæ’·FQË—®ù†R*&·°Ñ_‚PÙŸæ'œà>Ì/:^ \8¼Ä]ÄCT?‚à0w*ïTñqáâ~)DÄb ò$î¯Å@¯_—¯ávÛNL»Å³¹ÿqh£',œý¥b5זغ+ðzÍŸ„(ôEû&ʪ—SÙ~ìïBW³u¸3´¯­|ú´v2¶GÝè Ý»¾ +:3=Gù'ZRj{ú©U|Zvj|µ®£ $£LË`§Ÿ© ÿúOí¡áÿ%?oF˜)©[j‘ŠTƒú.ýè¥Ú$¡…J‚¯‰oýOMxYÄ œ†nÚ<©{uÝ™³jÞù†—ÁÌ·hšð"ÑÊ6DÃå|uu+(sM’ê ã,ˆÐå Ãżb¡àhÒÊ,±|;±¤FäÍ|çŽòùj`(¦òÊÕj?9-ÁøCÉb ”Ç[ø|~·º,¦ù› +ò]r2s²˜ù‚yY$>=5•^ôë³²RÄ}s—ï„´]4 ðZJå{"ü^z廓]&º® öZX·Á<›1ÙqËâ\V¥¯Þ¸ÚÌ/K#Ç2²÷첶¥§gŠË-Å)•Â7àx¢ôH²3E¾À5kè®.ŸÜÊÿìÖ½•þÛZ%ð,A<zчzÉÄW£ð†t³¸îõÑßߪý àssj™×34ežà™ÿ/b`ŸŒû8:AàÚ»Q6>¡äh©™«AÖ„›)N}®I¿\«,þø˜™_3¾U” ØEºCGp+'ELŸ3E}ösJ8CÊGðP6îj-9êÚJ8bºÉR T;“­Ê¸Ïâ0|HÒX +É=­ë&kHQ`MÍIY—Fÿ÷¼þzè—bªfoÇ´Š¸’jl©ZdúÓjwÞ#éì¸HBØ!x‘>€{äŽ6X¶À˜sq2„R ¥í\Z=ä +­3Æ` `®<…žÐ z`/¤½û±èZ1Z²‡J,­~ÑÉgÚ;-¨)ƒÕu².Æ@¼Vй¢Õ>U,¾•8 *‰,ã„à~h"è%A%­dÛv¦dYÿ°Ø¥öAŠE4Â/䄵 v–› —3¬=¨^>ˆîûÀ{_ö6îlʶ¦ná̹k;=wh§Ø+íÕ–Wþ+Àéxø +endstream endobj 1893 0 obj <> endobj 1894 0 obj <> endobj 1895 0 obj <>stream +hÞ„XXWמe™\qÇAÃ’+6,XPQ‰”Ø@KÇ( DÑH>E@ì% ~*± ŒY;ˆ(Š±…cI4gÌÙ|þw@ó?ßóÿ<3sïÜ{î9gÎûÞ÷®†²´ 4M‹1>ãÆŒôìî¹8:<$Zíê¨4JkKÅÑÖ>ÓÞZ½=EJQ©Ø\Z@@ËBÇ6ÎzÊB£7Ù+rá²èð°91m»ÌêÚÖeÐÀAÎä:¨wãÕ¥­ÇìÈඖ-Š Y°¨í¨ˆY‘Ñ #£ƒbBf÷lë1~ÛÆ©‹ÚF‡, +‰^B:?ø@iÈ¥ÕPVZª¹ å@QŽe¤¨öŽÔ0Šò´¢|õT8EÅRÔeAi©nÔIêšF«é¯‰Ð$kvhNinX8ZxZ¤Zü¢uÒ~¥½c©±-×Zî·D:ˆ¾Âè˜iÌvÖÀNf—±ßX鬆Z­²ªlÖºÙLkÖ:Ȧ£M¸Í~›Ç¶ým·ÚÞnnݼKsÏæÍ£›×ë¼u[´jÖâ˜Ñ.Òn—¹¥SËÌ–wõõ‰úÎ…û¾•c«àV»[ýÄàWñ‡ì5ö¼}¸}¦}™Nu°B“/×^Ö‚ŸrŽß‰+è2f'¬ ÏÛÿý¬ƒñ´‘ôï¨Sñ”ôî]]ãõ¹ÞûG‹»ÎÝTôóømMƒ¥Äp×Ñ‚É„64wþ•äÄlƒ(ZdV`Ýö£g´É@Ð0« |ä$>'ÝѴĨV~o|æ®PœøßG´etʹX „Ã-—=ˆ›ÌkÕÍ·äÅžJ­âðÖ‚÷íåÝQ瀺 +ì~¡—±ŒñmؽØ—Ýw 56ÍÈ©ÔB(Rü…+ ;è@çÝ}40ß¡¶ íÐÞíÐÎÉ å·XÍ;M«xê´¬”)ß?ì3$oà&AaSê”+örÐî ÔÀ:^glÍÆN™7Þ€®c¡ Ð0ò÷ê÷t•~š2sùãÌpÕÓI×ã¦Üß@xý'õUÙùZ&±¹¯‘¡€ FâÝE’܉ÿÙô¬„Þ’0H¼…"€ØôÌ|øûdíÏd{a„9GˆŠ3aL%†ë¤.Kšw”“ºsjºÅSdŸÆ±3ð;›Ewêè{Æ”l\ :z*³ #èùU·\6ÀÀÀÔ @6›F'ÒËàÓ´J‚²…?'á4ò…q¦ÓþPÂئO±R_èËÖÜ|¼à,ÚfMý¤À&˜êÆ?šs[¼4ìÀ'¬u•A.#¤OÜÁñ•9´“¨¬b¶Â:âÈW(Òx‚Á}ˆ²N†G„Mw’¥Iøn Úc=ÚC=nâ-s(IÓr©£º‘g³EnŠ½ÑÚQ}áÎèVœ›®ÚÑÿ(C­Ì-m4T-áJ,î¤yN +KÖÛFãñ>Ã-5‡ºŠ°VB %Œ ó$”™óh’ðe’²VÒ””+˵Š ñУ78¡ºõF'ì=ž ¸Ûp‚Fót{à*ˆhí+HpÈù“[{lïO:9Hð™ëH.ÉpˆhƒAÄ)sh‘ð6vƒÏÀÈÂÄ­ÐöÀéùÐ=Ü'2ð©=™Ê»ó{OùÒ´gth”O”–,QŠ%}£wÜae÷h~e\ôŠ(âE™[ +\Ä–¨ÈÍa†å_&'®6°[2·oß²ÓjmFÆÚLômôøŸÑÜŒTlW…6`3wáüˆya19³Ûäß¿³ÔP—Ÿ'p‡öæÅ4Ú¿5ç`ž¤´âÿßxgIÖ´ÁP78‰ VL/˜õ;órÆÑAeØÊ +l¥~ÌâÃáкw©U*{'ãºé'‡üÀb'#žëUVqcÞlº(*a : +ØFÅñB¼œ›«Pc‚ó羽ñÔ»wµñ”‰Ë‰çfÇ߀>|漌ys¢“¢’¢ÒšË‹/HËܾŰqwBòaqqyB‘áÐgÁx´ÝÚ#Sàr)¯®Ùõ5·NÞ9}ù«ù»;¢Òç¤F”¥µá2©Õ7i.#>%gËñ͇­¸µñ³þs⣓W-7$.Û’¶FÈ + ÜhÀŽ£:D˜˜˜—"T'ÞIêã•Ð‰ F?^)¼/ó&·©^ñŒ’aTãS«J ‰y%ó%®(]³&ÐàI n' íJ<™í8¡týïD&U¬Ì€Å<²áîäØ…ßÖÇ_©8­ÆÛ,:Þý\Õcw¯£nW«ý¯XÝŠCJ‚¤O‚ŒP^cDpUDh%eyQÂñ%ƒ¾æ:‘Á1JýJíºÀÀ4s.}—Qç~r蚤I?ˆ?­rŽL+–ÐOü™Û4K£ ¦½ÈÍ<˜´|‰‰_Ô×ǘ,Èk` òºæ=îõ9°EBß ˆä¾»u‚X=ÏÀ@BUÜ#ëéñ¤_jÏ€+ÌWœG·WÛãëiîÁcý„¢ÊVFƒFCבöfÉQ–Ï€¨UnªT$Š5 :c:C]£Î»ÊÀh” 5|È8 aÁdõ Õd¢A‚ZIÛ N÷—È.XÌâÏæYôe‹ØkXx¡Ì¡O±:¤¤·:€=äûŒõãQ÷VGP€F€Ó$·­JK.ÈÃ?}NnÇo}è¿æ©;DrÿS‡:<ÞF ‡H¬¶,Ó¬Sži±¥¥ò¬ÌüLÕ’aŒ–€•ôß”C¥ÌÅ)áp…ÏIø ݼ}—.ò7fM§÷œ<ÿõå󋽄p6=ÈeS°ÁÙ©í®ÔµvR}}õ©S'\œ;´“\Ø)Ïy®Ô?xèà ã&:½÷ëÐ3÷êªÄ¡i±§ò;*Q­]×xJŒ oʹ¸]ÊUþYmÎ'têÈr¥÷RY¿c×BîÀú%hÀ +º>CýŸÐÉÁB +ìg°{<­¬7÷à{ºîÜuнÏïÝxõÛÕa팪Œý]NŒÕ_.‡çEÜ-%\ÃG&­NH4$%¯O]#äNµešmÑzvÆOÁº/p·jÈ„èBzÜ ™qDûp> UÀýp ,¾¿9o@†pzÍ\U˜’œc•—š·!×øw,ÿRcDb9YoÔü‰J5KRØo‚}Ž1 ¾k7B¿\)Z½DòѾ¯>~ö˜1•áâ£äªÔ²·Q¤É€qø–sµæ·W÷¼ºt4°kg÷; ñ¸JÐQÖ\®P(¢Ê÷=åç ÷ZècèÐóìïk¥³>kýÖ¯®Œ&Üï†-P×—®/´xX»ÿÐu£ù3àm¯>ûÂðì*…À= œå±zˆ–‰nÝ«èxˆ 0•™k™^+K\}ÔÈÝÊ•i®!ÝoĦ…D›,˜8LðDJŠh|JTš“ᤢ\d`e¸.…Éjêd˜X»/¡cŸ†«»2øÑ‘´êÜ‹¤Üþg°¾Q^XV$¤a:ú.ùløÔM{<+è¸s _š ÐûÀƒ»‚¹,àÖÜü±áª{¾ÞÞ½zz]{Þ¸-¨ _­&|@lZ°TàêŠ %ÝÄ{ž"Hž_PÀÜ{h¾áÌžù=üšàßö°GrÝo8»Sôð(ÐÒö¯Å@«&›»µWMÒ}¼×”qUód°ÿGÒ‡ž3u)¥*¶ ˜šóåð"ŠC(ѺžTÅÇP´%ÖáS£y€=ØÔT¾yS3mP3lt»vÃ.ÆH*Nú‰œ(TŸ~j$g›Ôz3/' —°LHe&«úþwðÿ¢/‚¤(ŸÕ !™:å+\ð_䣚 ýŒ@Úçê†ýÓZH%Ç䪮ļ²ü¾ÄšUë\ÝÇ€6rÏTL¿à\r°ñ—aOWUÕXy¶¤òxQ±•p +«™e¡ùÙÜ£†ü¼1éBÙFÚ”œ;Ã0x䌡ƒ® +(õ¼³Dé"%ÅêÍ3AéÑh·—Û¢¬¿zïšü½YiY黌\þÌt::%1‘È•éé ÂŽQ™¢Á -çöEtK¨\+pû§Tþk¬ƒ¯óR¿ÁýÜZeœJ¤OxFdêÂH‡Å)KV/1rûK“è}©[7Ò7¤¤¤ Q¦£ •†ÛТàh‘Ι&pùÎéý6_w8usï·7Çxnh¤°§’>zp‘‰P8 +.JÏU¡ásñ¦³íjÃܬùwþwÆÄRzf‡€„™†Á!{ vH¸ƒ% láÞ“ô¯eÈ!Â<[MY=&“<9]¹RyôÄ>#·tT#©êÐQ¼OÞàzV ž8}œaHXÉw±º„ãð\Òon.·š„ ìJào0„G*mèjU«§“ìÏéÇj× F— ÃÒêÃ’&‰{·§º$ðUÌ8H´È —ýºñG!\+H³©ñÑÈ+\ œ{?²éç#ØÔ8²©¡[¶[9·{î·ëX½©>Ãœ¸Ž5f{-kýζ™l-Û(ÏZý³4;Ç +endstream endobj 1896 0 obj <> endobj 1897 0 obj <> endobj 1898 0 obj <>stream +hÞtUXTUaÞ•†˜×Ccð½ÁDB@pQù'"þg¥0P¾Œf⟠Rþ¡•DD ‹DÀ-][¥4¨ô“ŒÊ5K2I–¥ÑaZ”bMØsÇ3äÞÁÚ¾ýv÷{ï»÷¾sÏ;çü~çÜsYÆÙ‰aYöÑØ•q±+¢ýV¤ešÒòÓSôk ™é› Ò›áDË’ÉÎ;\œˆ§‹;†cÁ½­÷B”R#{¿\jd¼¼ï¯Ë]xÏì/‚#®ÐçÖì9I«aœX¶æøâœÜ"cús›òu§øêf‡…ÎõwŒ!ãc˜c ÒE§æÒtñEyùiYyº˜ì”cnŽQŸŸ–:K§‹ÎÌÔ[ÈÓÓòÒŒ&*ýw¨ºô<^—oÔ§¦eéÏër6êV¥gçäå¦é¢—ëôÙ©9F]:ý7¯À—žš®7¦§åÍúo¨ KFÅ0.,ãÊ2–Ñ2Ìt3“a&Љ f˜–YÈ0‹f ÇÄ:3ñ +fÃ$1ÌLJ#ãÄ(˜YÌ“Œ‘ÙÉd>e§²‘l9û9û£“›“·Ó§l§óN¨HQìU\SÜrÞì|F9YiR6q>ܳ\ WÇð³ùù.•JU¨:®º=Áo‹jµ=–¤Àk^£š¶»ëÎ qBc!¢ ÓÆ¥ïY“¸Szšï;täRÇñêù&Èìd¡ºSÕð¾ˆY‹ 3;!“Š‘‹85úœýÇ(ÛWÑïÞÆ=]¼^_*mà*oÔƒç¸òñMˆ¥>óºË©+L¶Ý…ì Ю€s¶1†Ã=c»•W8µ®ÑDJ;À£…7€¶xq—ƒüÓÅÈíT-…P{é ¯Ö•›Éé^ÍÑíÐ4(ôÀ’(¶VáQíOï.‰|*{á³ò¬§”Â퀵1‘»p†Š˜í®êXã§ß·u6OùÌܘìÛ‹jIè‰Âˆ|,’i¨paTÓWhü-\áYrÀù—È/n±> ûá°Â6ìÁe›ð«Å4Ô`nÆã0Ç B>Üx³Yà0"Ù¬UZ\¶Ü!žùܯŽä£æ˜¬¾H´šÙ¾!¢Vô¹C3Å +s!y˜†kdü +!†ƒ)æ ŒÁ˜°ÇQ#c§®*·@‰r-¬eHAìѾJÈT‹}*ä’{ØãÔ‰4½¿ªÁJèaÄ‚#TgºÅþò˜aˆS7šl†Bv€nÇÙ âÌq™®Übs)d»©0úè-v†PY Û=H4ƒ +Ò +’XÆ!’%òc†AÒSÁÖÞ£ÖfàÔÀ?`ì½a²›’&Š€®„AàJ‰¤S Ra¤4ìa‡Ø†yˆßb4Bã·’ºŠâùÌ fŠn SH6WÖsý";hfÜósd|Š uA@9 ª >*c÷8ª‹åõpÆ »ÍëÜúÝ°0±pI„œ@@U³,.·ÙÚd&ÕsYwÕíi~ܧ”Þ0T #g}òÞ¨øãÄœ(áM‡Q›«3ìâÎõý^ ‹–ÈXàÈÍ(!…lƒW€uÔÁž%2Ô”?ÑÉfP"KÙi*¢W¶þÞtyžÜ+8Zå·”w8x‚*é8ô°÷)©…¹¤OéE§_ôkk¨¹;4[èö[NÚ¤ ÝÄìmëé!ÙÚ¹¼ƒøvjÞø}¼lZ„“ðaÄæ}µ—†µæ欵‰Æ¦2½‹”B Î(Úîì1ûëÕßßi;wªI2S*kRþ¢m8°¯ªN¾Ì—½T\¶S[T\}X†Oxð@ÿ=Š¡IèV*A®…–¥ a1ÙM¾ºzàƒ}°µ‡_«Ý¯RcÈÖn2­—}›–ËfJ‡qª£#i-ÌC¿~T€œ‡ æjy±u]rœ*Åßn¿sØëïé—î—) îIî……šwà´Uh%¥´6ƒ±Ž++Q¾mJ¹è¯Ey>rèƒnc,;ÿyý7§å +NغØÌ ­ö P/^yDð¡§ÎCyÎÆx¿gú—æaaõjš¡Ù2 Œ0Sw'­ ÕÎX÷%°2Ñp .è÷ŸÁK¹ÑÔPÿ¦üÕ‡o^¯|KeŸ²Øw¹«OFþÙ´0ü™2’Ð š^ÖbU@I;ƒÛù÷kÞ_»gÏ~©—ß»mûÞíڹ럛/Ï^¼èš=ÁJh1·¦Pú.¯¤ ÀI«Ð“ÿ? aˆ8Ã1”ú¢ËøÿÅIÇÙ“§ŽÈU|l%ªÑß^n~Q +æP>½ð…ví…¸.y¼“Ͷ[¡Òª ;€ˆàë}2<$91Ã(•ÁÁc+œ¦­éúû×n4lX"áß­<½\èŸ …Àk®X'C iƒí VN"?Ó6:ìó@ÇÑt®P29¤–èiXàðé@J]æ:ÞG<…Öv÷q'Ó¬'>j?˜,áÏV¸Æw´v\ï:œ´XÂ+ü̃×ñøðMÏ%%KÜšu!@ðÌêœ-råáz(ÿÌ/†+­Â™ßÀÌN¢zÕë¹J£„Ó¼pfÜ—åè† »( ݶn2½›¥5wa@ñÔ‰¨íF/ˆ€ˆnð-h£À #0" +½P+ ¸w¥^š£è¾téft§7ƒf3¸wÐÃÕ&XûK6ÿl…“4›Óà%ñf-L<_EqòÏÌñ‹Ÿs +d)Ä'Z¡®‚ÛxälF‡–}L½ºÏ| éòO‰Ë299¢™BŒë?¨é± +§ .ˆÝ_þV:9ÀU”ìÚ[¬Ù`X½É¡~µß”p,½»5'n.¿ [n.± +B‰'Å£ÛAÂ5Óý‘_|ncg‘tǨ¾ëÚr|›Þã‰'«ðá_µì–æq«*ëÐR´0ñ»v`¾IkFö˜,ôV.?˜ûúí=ÕÇ@Q³6c¯¤.é&nìMšð×Õ3‚qÆ’EßàüªCIýÕoUUž®fòE›Ê[d¸íh`Ý«/C¡æk+”Ñœ [È6wÒŒ-4EQ¾¨x2ù¸E‚á`» n·7öÜ8sâÒ)©¢L)l‰â7•3\1ÁÄB¶Ö¶R÷ˆ/m®£v_åþ¤AÌyÙi3õ&J_nÆøÚ‡®ý8ð³7P-Jfô®7Ù² +5û‰‘ÒúÊ£™ËdÒ‡ƒ{íéú]Û7hóŠ^©*–…Ü^8UZûzé-(«k`“Y¾QŸCÔ%ˆRÍäÔ[Ù ‡0£fÖqpd?<\56á/5..š|ßeB÷Dë$øÓ#6?ñ_ Ën™ +endstream endobj 1899 0 obj <> endobj 1900 0 obj <>stream +hÞTP±ŠÃ0 Ýý{tp(]B ô(d¸»Ò´·»¶’34²Qœ!_;M{tÐ=éñž$÷õgM6€<²Ó h-ÆÁ¬®ØY‚¼cuXºu¯<È(n¦!`_Së ,…<Åáx‚Õa»Î>@þ°A¶ÔÁêœ_~#ÑŒÞß°G +AUÁVÈý—òߪGIöÏ'PÌ}¾;ƒƒWYQ‡PfEõ$ó>{*®­þS,›Åf—U"î.lR¥S^ôȳÍ÷Î’¹%|½Ä;Ÿ¼R‰»ŒÌhf +endstream endobj 1901 0 obj <> endobj 1902 0 obj <>stream +hÞbd`ab`ddñõðõrÖŽJ,HsÉÌKOJ,)‰«üaü!ÎòC–G¬ë·ò¯ÌŸ'XeÒ"x¿Ïàÿ>WàûBÁ)ß +1032²¬Ù‘hnìœ_PY”™žQ¢ ‘¬©`hiaª"ÍÁ¤˜´TpLÉOJU®,.IÍ-VðÌKÎ/*È/J,IMÑSPpÌÉQ›P¬P”ZœZTõ qV¹Kæ0…Ìb…D |z&ÐŒ¢Ô…’¢Ä”ÔÜÄ¢l…ü4 ‰@Á¼Ä’Ìü¼Ä…Ê‚Ô´ÄäTg¨5@a=_#c;“BØ#ìrßWñÑÏÞîÍ?~lf\÷Óùg–ØO¿î=Øùjgþô˜ñû÷ 6€ÙBn: +endstream endobj 1903 0 obj <> endobj 1904 0 obj [/Indexed/DeviceRGB 255 516 0 R] endobj 1905 0 obj <> endobj 1906 0 obj <> endobj 1907 0 obj <>stream +hÞ¬zy`TU²wÕ¹·—t¶N§ÉJHw:é„°…„Ð$’°E$@€„EÂÛˆPQ!êà(¨# ð ã6£ˆtjX|2ã22î03ú>7Йьã>çIrßïœîõéïVêœsÏZ§ªNªÛ!&¢hj%j'N)›?ãnÔ¼lœ¿|îŠ3§ÆÅ}yÿrþê•®'bšœ(ûˆ,›®X´¼Í1l0‘õe"ÓŸ-»naD×ÙB¢ÁÝq²¹iî‚·?5/%:'çÖŒ +ÛSccvã=³yùÊkûwÆ?„÷ãDÉ —]9®ù™7ÿƒèHæ8¾|îµ+âÆY0ß¹#èïúÅÜåM%©¯L#úÊE¤ïXqeËJÐç+™¸V\Ý´âÈîÍéD¹ùD¶6ú ÞB&²š0 ÕiÁ\›K …Ãd-B“Ðõ)Ï8F×Vb–9UÝ„JùÉeœ×?ë^Kd~\,ò†Ñóô{äj¤ëŸŠ{(y?mõ#2>áÇr”lïî2 qJNÂàS¸O¥u:NoЛ˜ó+ðTãdöòTžÅ7òz¾‹Åò“üÅù“¦i7é¿×?ï>iØŒŒÇ±n*õ…nô‡dJè2ÈóýûËã|.ç·„Wäk¬Guuw1ÆëŒß§ÈC9è;’ª°ç 4T_G·Ðaú=Æž ?Ò§ô_à’Æ6v€.öðdžÂ«@Å^þ’»DäW"–‰vñŽæÕNèÓõ§ºt÷énïþ²Û0öãEã5%ßaX§˜M+¨EIìi¬ó;:M£sXÃÌé u,×`¿Û1ÿ|êdkÅ“ÂÐFj[´Wôd}{÷åÝË»·wï7† [NX2 ”B›¦Ræ¾Ü|˜ž€döC{NÒ?8‰ûñ@ÇÓ¸ž¹™¯ä|_Ï7€«ó>Ì'ù=þ‡Ð…YôŸ¼b¾¸YÜ+ˆãâ¤8­‘6E«×®Ò®×îÕhohÕíz¾>PŸ 7ê×ékLdÒÌ Ö×Î'ž_Þ5¯ë®»tWu/íÞØýB÷ÉîHã¨q†Ì446Ð"Ðx#ö+ÝE» O€Æè3ú2ÿx¡q§€ât%·JÐ=”Oç^hæ%à+ïáv>ÂÇø~…ÿÀoñûü¥`P?0§`ªXˆ=< öˆ€ø3àœø·–­åkƒµ!Z™ÖˆÝܦݎýlÓÞ×ÎèBï£Ò§èëô—Lšii«i‡é¸éeÓßÍvó̸`Aðh¯‰ô2mí¦Z¡io ß(¾ã߈4~«¥iµZ­¨#HðahùrrZv˜Ýf·p’ÝÒ(ç÷‹mºž­EÑJœ73Ä­¢‘ã#ô M[­»Åm‡~^ƧhÖ$ÍßPUpd÷6] hûô?ÊMVí¼i¹ˆ6nÓ?3 í-ØÁ‘,´Wywr­H·Fˆ»Èƒw;w"‡øghþAžN%ú‡Ú&1^¼‡ºet/¿€=¦eâ0?¹”à<^͵¼SDkù*pc8-¿¢ ±Bd@Ÿ§Ò×|3÷ÁÉý²É I×¢Å|zG4@êo°C àµÐÓå´‘7P>wñ1zMÜMøI{þ|rW®àóܦ¥6þNEEè˜éps ¬‡ò0lÄTœL·– ­)!“ȇþφ¼ŒâÄ9¾A,£Å¼]û?**h"5i-b4oí>§WhCÀ±C°&•æáV2ùLiúPHü3*ƒ6.ÂÓ¬`ºY–µ·µ³FƒáîžcŠé~ŸÖ€;caÝ6â,¥¿p_Á“tCÔè†1öˆ}úûF"G±›Þ4pºŸfg.¾ÊˆäIÐð+ÌwݯoÔ×ë«tÜãÆw°š·Ò=ôýn“Gpo倗›³`{ãŽHƒ©»+£Q°JãÐVKÓ`Oa%Ò/è*XÞÿGORn¨ðã +Œ[HKPß‚êzZ‹óm‚ ØJћ⠱Ks‹ÛÅïÄj±˜þBÑ^Òü<ÞÑïÐ×ÑʤI•‹!¥tŒÛd¼ÕúS*¬ÿPœRè½ñ¹qÒøm×ë˜ï1Ð~y}n®¤\šÈßè)lòWÔùËËFúF”/).:dð … +ò½yýss²³2=nWz¿´¾©)ÉI‰ }œñŽ8{lLtT¤-Âj1›tM0åW{F7ºÙ=Û3vl|÷ÌEÅÜ^ªF_Ü'àjTÝ\÷ô£çÂKzúƒ=ý==Ùîò‘¯ ßUíqNTy\SeKk¸¥gx£š|€dÒ'`Íîù‹µ'ÄW7—8áin +¶×LñÔLšQïªÞÐâmMÝEoÁö’ž¶P)_Y¯¥ŠPI¤jªJ9«§³|© +èYø3+¥^Ða±B+U »FìcƒiƒÍíþ™ƒ:ŒÊQ*»0,Df Ô{ñûˆ‹Þ/"/jƒ‚õlQS7cÃÛEm£a6líqÞиan‡Ñ:Ïã²{6„’½aEucX¢Æ¡©Ñ›°‰f.…¶ +ÕæáÛ'µùùö)3êÚìÜ^Wßצ²qTC[&Úê"ó«ZÑS+ß\òjšÞÏQ6¥ôµªV]U¨÷ùLªÎ®cšß!‚uvU‡§@Ê^Þ_ð"Nã-ý;¥ ¹Aú yÊ2åÏÙ¯ö4°›?³¹€>¦-ìÅÝ{¾ô´ì¡áïg¢¤Ï8žOp n°&ún¡Sˆ-¦ãÎyÑË.D4K1b<ÆVJ¢ÔŒ;¸-wL!;eáfœOô bâÓXýâ‘ŒX‹§àcN¥çè5}àÑܶV´¾Ž;l&ÀÛ„8°“ïƒçö+ô‰S‘\½Zi +fº{0.‡B g Ã̜ǞÐf¾RQ­Øߺë8@ërÌ4~œAò""ø }Ÿ?ñ‡QÁ§ü9öynöÃX>hiR45t7"ÏýðDº8 óìåóÁy -uˆ ãá+Ÿ?Ä\2ö“Xî¡YÁ‡à¡äKqâü¸7 kgÞ¥Ná3ºè&Ì~Ö+€ôbx5b’ù!‰K¹Üˆ9eïuاĵÆqknQø Þ»°z«ÂVÌÆà›Äfp­ã$Êy6C"§€‹A…ÂuØ¡Œ$ŸæTÄ­oÐõÆÄa©Ø¯@¼B™Âl¢ûs§IEL–&Ó †xçiª·z~¬üãX.¨(?ˆOAÞÙðB5PRAØ¥Àþvq,莀TP yF›àż˜ž‚nH…9æRS7öàRèîRø€gÀµ øF€f¯Âül ñ3ÌÓ ?×ôð2ŒYÐw)ÓSj}4®–VàTÊú0¢úå£ÛA}úERª°B?³•üÆyì§Âø†òŒwÈ“Ú„ßU§´Ügô^бzs4ÌÇ +ið*Ï 4RÛˆ8h:ë4Þ'üi M©€9ž«Aû« {:dXM«8¥»«”&¯Tz¼ñ:¡æDø ÒZŒ§zøÕWÃÍE‹t, Q±Tä+:àÑê)»éÐîл¼»z5¹o¥€ki¼à¥X}©²$þk°Ï 4šÜ€Ìþ<ìLº£îÂhiOžƒE8@CŒ@b×bÄR¬¼'|5‹,vœÈägÛy;J5"S ƒVo>m#b¯× Û"vz˜vó5ˆÉî¡fn¬Ð1Xõ8}Ï×ÿ›þ?=D¿ƒÿÿ"Ï5´­Gé¿ ß¿¢ÿ}J?W_ßPž¹ –ö¼ëÕœrÆžùøHäjž•¼ >K&¿Ä/!Å¡B|½ ø>? |•ßã?óX¶³¼Žë¸š…sh+z*Æó›ü5GsÇA²Îß«ž¾Ðø!~âržŒº<¡{YªK$™UO;èÏp^ ~e$@>OÀRþ“¶ÿ‰^â,@‰´ÓÁúm| ¿ Ê˯¢äàíÉÃåÿƒ´ïT7‘§ÜF‡¶AóñþVÑ©ŒÊ¡ýñËüËž½†ëB{ý^þ O’¨x ÑäMO~éâO(çÈ·Wæ-´÷¤Êà¼Ëv+"G™·s»ªï†VË÷¯A«|°µ—'hµz_„3z3ýšvÂ’E2¤ ½ ¹t8òt#ð081›\d‚^¼ iÜ‚V¹ÊNÚÉçs|ç{)?ÍgùÎóÁµÎMeó‡¨ù„ÿÁ/`Æ—À…±Ö)ø ¤¼„W‚ÂtD} ¿î€ÆÑ? íG/!²^Å·òlÀó€#üpÛ=\šò`H+änÇêékDøßB^ò[Š´§°› á~œÚãü>;ø;hîAöâd$ñ\¥ÝH/«ñ»ø9~”_TgÜ« WÑÇÁÞï`z{îÏŸ‹½ïŽÂ3°JòÎß?/½9zã|åwQÒ ×ø‘1\ÈN:„-„}vÂŽ^«p)`ÆK¬…f÷‡m•÷Ý(ÐŒ¹ ›x&壀± +®Q§HjbX/9E?7ÿÑÓö§ðqpG¯úcxéÉý‰ü½ûS¹<Ña4”_²š¡Sþ½8MŸ(ïî0¬`ÔJÏ·ӕ€qû•gw¾Ó=°¬Ò_öá”D/é)ÿZÁ{ðFŽCçî¡Ä4ŸQ" ++Àz¬8¯€ káäraö9åÊaðkÚ] Ž•m6P ½ÍKmOÐƺȕ¶aï~ èÓÞJŸ)ŠÃ³ÈŸ{‘ý‘¶¥1\žòÀ– $ã¹ËÕ ßL·nì¡GÐwªú~û|Ié!FTÎõ q¯=.Ç-s7µ(ؽô.À눳$¼)¿h‚ÒÈCÆ„xëDd¶‰öBèßQšá'Þ¦vp~Ï®UµØB0¯§ô8¢I`9p €þŠÛá!jã.#boùU¸†Öˆa¸QŽ õáž:"ïÕc»ïFä5„'p±ï>DHÉØ­ggû0ú]䥹F––¬æ +ÎðÙ…Ùä^åøó‡øµ¦[ΦFæÊß”ƒq!øöøp1x{‚ûñ‹‚°ÞЙ‹Ù­r´ê]̼ߖ𳡔ƒ·\ËÙœÈÃYƒ$ÞFà( +î<Þ,©ßYã®–²Þ9ìøl­,%Ô•UàõAD"/ª˜ý&hÍU:€q{èßÐ\¼—âœo…_>\ÙÏ8qÁö—¿¦ ¿'2 …\)Ò•Øþ½Ÿæ`œ;•£×aÎà²OD‹hb@.æN ÕÉÍ¢¡8¡[ÔÍ•¿_Fä6œ£é8ß2‚Û »·˜ ¶J♞û΃xbid$JçÒžS$OŸ<¸ùԹ΋àƒ\_bøDÜ+§"Œr&¹Vâdر#yª'ÁÚÔyu*>.ø*5ü>"ø&â‘HOÕÆÑÇääi¼rD }oëQ¼ïÁÛv¼ÿQJ!@Êø?ùúµÛ° Û##ýïáy"»`7/Dµ£ôP¤‘Ö'Œ½¿HL‚V„1ü ¡÷·„Þ¸_ÙÊ‚KÔû;Ã¥þîpé÷‡Þh‡ÎH ÇÈÒc‘(­Tø;…Ä©_‚º-Øë¼K ×c¤©Ü .ò6^—ŒÑ|Va«BÛ%Ÿâ¤ÞÞÝ ä˜€ãÆqu7õ2VRqÆ.2¾0¦ÖR ‹¤]ÑZä/®jÞé*._õS{ü©½üœµ{@/{Í-B°Tùü¹°ÀNÅ]ù¹R~7@[°¥‡¯d> G£uËíEOxNŸÈ…U¸º~ä7ÅlØ·RúT~@<ûÎÍiØã#°Ä#°þ þ[¤…ǧaOK!È^I"&4ÔÒˆ?² ‰ò+‚„-ô,3ÎÑë°Ròö’¿åï¶y8Sqÿ1ºðMEI¸…äÕ‰Q´mÇÛR´¥Áæ|D'}Çq¬q¢ŠÎÂÿŽéú +ž’–á2ÆŽ¤ÿT§\£·Ô\ „½Ð`ËsaÃGÀ¢û€Ùh¹.ƒ~ŸÃÈê‚gîÂ-W ;Ÿˆ:Y3HÖôú<ì‚_u+ßÃ×aìlÄ…Ï‹øöá¸6ü”R4ìV?Üøiðuú¡íjE^𨼧—ôH×I +Ïw NÙ VœÜ×ÁƒkµC*Ëÿnò(/KÂvhíAزkx;½XðcUœ€.ütþ_E½cõ_yiüý£^}ØS¿$Çã—Æåßó¬Ãžø¥ÑáÞ{©¼Ñwà¾k€¶wÒåœ Ÿ“àgž†öM£aH×B¢±=_É ”.¶A—šÐd²2(ÁÜõý± £7A;†s,¢àA¼ ÁS¨y`¼cäwžÕ»¨wBwœ\Ç—+íËñˆÖÏñU +†r¥Ô,þvBùÙо"ÈTÞ‹ëp+\be0S¢‚p©ec w½ôØŸÃéȃ-Uw‘ô êÇ¢$mø‡Õ»°m—÷0nnžz^€|qv±wyVW¢ÿ +ø&õÊ×^ªþï樺‚Ñíõü{þ‘‡Oym­¸§Zy]ð+:_ËÍ°¥×Z9 7V«ºUVáFnÏM”NðG€Ÿ+€ QqL;Ö>uˆ¿Y©ÊöÇdn•yd´ÊÛ#†”WjÇhpðu Ns® Õh”Ž´(k7«öÝÚa +ßÊšC¨9„šC¨9„šr­ƒX{V{¦=3KØŸœ9øËŠm?@¡Ý­m„1L×®åsBùfäyÈ·„ò;µí#Òc+"ðÎô%R(°·íc&>¨ +Å>Uخٱ5éÉÚNPµTíU;AÕ—H³î@ýÔï@ýU¿ƒXMåîš*TØÙ›ªA¡Â¦5hÓà¦kõ¡|º6­}púÑŠFm*¦Þ§ÒÝZÒÍ*£Ò‰*]§Zשò•ª|¥*—«ry¨,ÓÂ^iºJceªMÖ¦À›K×&iãU^«UCÒµ‰x—ùåðÕd>A£òËP ¨Õ ŸùxMù”Ú8¼W!‹w™ÑF·W¥¬X÷9hXOÖW†*ÐT&ÉšÍÀÝÀTͤ뀯5Õ“µ*@% B«À?æð£ÅOšæ”Ê´2´ŒDß‘HýšOíч^>¬ä¯|˜Ùñø Y4R—VD~`-°ßYËǸ|ЕòµxÜéš[l‚W›®¹ByºØ(ýx­ŸØØÞ/Ý_!P-°¸Ø*´›±Nô“} s€ë€»€û€V*¶ø#E¹(×&Š‰šíî¿ßç¬ò!Âyß´`•28¶âj­?ØÔŸv5Ü$÷ÇVÃoé@ÕÉ¡£À×%ÃsÀŒ0#ÌÁøÕˬú} 4€”(ó_ÜǤF§ {Í"ksQ“‹·\ŒÉEß\Ô~€”ÕÙ^ Ü <jËPÊœ¡”3se€ÚB¤åª‹4]Ëh±à/—ÆVƒïhw‚›w‚owJ ò¢¥<Ôc3pФôär7À€µ~ÞÀfÀ]€;›! ç>ïQ¯˜SteѺ¢ÍE»Šö-²s¢Ño£„XbGœ5¥Â.tšEÑüß*Ý«Ò«UêWi¢?eVôéYÑ/ÏŠ¾Vô}³¢ëgE_>+zô¬èÂYÑ<ÏŸè~ϽÅ=Í=Ì]äâîﮈCH8ŽÉó*¥ÒÁ*ÍPiOo¦ˆ#<“ÜVh<çpß”~ÆÝ¡s{ú-î+²›ƒo3ƒÙYùLú@÷¢ôü`Mv0Ët?§cšÊO’…½þ|Ë+–9¿e¸e€¥À’kɱx,é§Õaµ[c¬QV›Õj5[u«°’ÕÙa|è÷Jÿßi¶Ë̬ËTWe»ôl¥{+=a—ÆS ^«5SFqMàØ|ª™ç +|3ÅÓÁ¶I3&Ï(8j¨¦nTR Ø[Óa1&J¼5ˆÚ™õmÌw5à- nï`ª«ï`CV­O•ÿJt˜ó×ß™Êä˜ú6ï¼³V—'•;Ê↮ú¤1”z/î^},’[õq[>ü^Ÿ~?£OÖöéÅͦQÞÿåáƒ4žO¶U®‘ÿ¶Õè©n66®nN +´Îs¹R%Ÿ ýGWvã¼ùÍ2ŸÛÔÁ'=MUJO•«müšï·ÖÈæñžª6ZS]W߶ÆßTÕ>Þ?¾Ú3·ªaÿ˜¹y{/ZîŽðrmys`²¹r²<¹Ö˜½?мW6‘kí•kí•kñQk)­‡ZZiTCå¬`¾_DÚ À©î†Q öeJ›G¸“Ö¦Ò‰K‘Þ†@”gT (› +* +*dN™lŠ‘ÿjJZ;Âzˆj²£:Î3Š’ªWᯥ%Tø™---+¯h¹¢Eæê¯eå* “ü˜¹’°ƒŠ(u¿¥ÃKÛ¼¸IÙh­¥¥a%)™¶¬"9ÛJ™\˜¼§´ +3sKo% –K©^ +"¦kYÅè%;® +©M‹üÉ Ó$24‹úñs‘¾È$£ n3[:8ê€`2é² ‘ÍlBáM)Y÷ S²uâõIÞËíg}º|—Û¿ñM°wÁ‘ðuù$8$ΗåŽs/Òé¼K;vÞo¢ïÈ¥ƒ}ûÜøX|l2!2L§‰þØ“‘g"…Õb#;ǯLÁôÏúã£)%2á){ÛÊÒž‚鶰åˆG.D·—S’×þÍìÎÓ§í§OSyy§½“ãÃñ7h ‚ÍlöddçhÙEC‡ œÐÇ©©ÔìA-ªÄ³Ù"1Α(²D¡Ç3 )Ç;²,O&ú=]3\)).ñXRdÆ€ÛyëHo¾od^OÚd›øö‚þ–ú>ßØcê·úml‹ˆ€É¶Š8$¡Hñ¼?Êw4îõ¸⾌3ÅââùýV>E⑧Z¯Ä]pDÜŸð+® îãl§½ »9Û Þùì>ðÛp‡vq¡€µF›]ÉÉ.3/RŤ—I«;%;==›? æäac­g…¸»†küCjãkûîrîJÝçÜ—²/Õ2†Æfg«ðç ›9Î_4î™A# ®ñdŽ·F8ÒúÆÏßakÏ(RYf0KSÙ3‰EãŸIŒNl3‹ÊºúTÿHÓn®Úíï¿»Àµ;“gÖÐ̱þ™Åå3KÊŠ‡ŽZ3Ôa›13®ÌáÏÛ:ÔáÏ(røJQˆ-šã`G‡¨õL0³¨`æ°¬™ã2gŽ/*6tÜÐÚñ<~h|êLç–¤ÝI¢ïÌZççn§æ,‹ þHLeß¿;^‹?"¾¢ËÀÇI’gg{¿˜Ý9ÛÞ‰ÒÙ³_ êñ|¡ŠgÏžWŸBÚ»d.Ÿ|ì*Uu½+ ÙÜ£FR"9ÙEEñáRq|Pµ† ¹P6lHbB‹Ö«îöhC4—ã×ýRRúýÆ UŒKv?ïIvG2»öÉÚ§;ÓSRÒr‡*ŸS½Rؽ_¶vý\üóât÷·‰ññ‰Ýùý’ôØ”Xþã…’¬g«JßIKÖíIöîÁJjÔ·p/ÕúwI‰ä¥bÜ£ü5/'³9ƒ—ZƒÿîÍë‘îrgx2³²s"rû%MH÷|àO‘–1ÁžüF²HNÖFÅ…}Š5#¶8"ª8çÁp›;ø3¿½ª_™9·¬¤86Ÿó²âÁâëg«"¨0rþž$/Ž.Û¿éìÂI†,Tì]à gwÆ©g;qx"Îvåuþº‚JNô -Ë¥Òa%¹ìˆÒ¨(Ù­Ž\Š±Eå²SG)A 4rȈ\^Œ¤|PE.U ‰³Äært$’xSŸ\Jd$Ôs«† 7ݧ+aJM kÒŒzĨ¾¥}úÆôõUD08ÆäGn:Ó%᧮šÍNsH'X†f{2Ì}œ C3™‚õÅʳ‚FÉbÖ~¤¯øtÛâ%[·.Y²Õ×2iR‹D¾ìü71–È8‹É¡Ùb¬6Ò·-Y¼ ¶ wÒ¾]¶}û²eÛ¶-›²råà]º#Êf3›Cy·}Ù¶íKe§º–•S&¯Z kÑm| uëÃÔïißøKo°ÜqÃðWù5—iDÞ´‹<‹ +¯·ü²ìŽŠÇ-•½XfË,ìï/*,õÏΞZjÎ8hgx<ÖˆH¶Ã?¨¨hpð Á%ƒ<žAƒ2)‰ƊL¨Gx†kyæžb¬6`fNNv§è—ïÍ<Ì›aÛY3ùKÈVž¯Eæ¥TºgFµùòÍÉ£¾:’ÔÁ™ëåm3–RÞ6T>¡³Üw6%¹3©0¥ó¬ÏÞÔ“ºÜ6Às£ýxYí]#¡GIlÿªðìñÛdåqdöãòT_5›f»sBr(ÎI#1("³Å’Kbü°â`•Ùc¶$†N2›ƒ+Öêü3îºö™ë—OÛº8£*Ãk‹KŽéS‘^‘Q½hÆ_Gz&÷K‰uæ ,>Fàʺù맬7ÿ—Ïß±ä×55¹óïsöIHvD9#=}S–WlîÞܲ-É`}|ö´ÄxG’°9¯ŸÚt×Z„üâ°ÏõÏpõ÷ÛMÏ ê)q=µÙj¨«eE\¸"OwA];{_'ɫÄ[Dÿ¬ëë<·;ˆÙÝçµ}˜3•jý9ý£òì”os$˜Í&{bB|Ÿ²xÓ„ˆˆøÝ1™Dv¨MrßW±‰’8YÉdö„.);VÃåc+¥0|¸2›CŽâ°Ê‹>NG¢â]FN¶È³}OäDÅ8’-¿¸âŠ_X’1QY¿õó¿ZXðdOdRœ-êÕîŽGíîx% +,ÌàñÝà@A÷y±.Dmÿ‘;”¢KŠ#æÄ»É jm6 zcábJI{äOÓû¤÷4Vä^D­SKø¨:Š†Šœ J$&8ĺ¤ö«–n£{oFT2¨}…Ç>ò(}Ô‡è~ÔÒÇ¢}j x¨ÿg_»Çß÷\Ê·™¦ÊäÛâ[Zzjzæe™Z^fcô‚ø噯%~í8›úÏLk~^†F¹6gŒÕéväçåÄÚLzdfe:³²23a“=™}S}û¦¦¦¤öMÉŒw8ããVk¦#ÎépÄýçÞEu†}ÎÌìîÌÞæ¶;;³»3{ŸÍÞ³I6H؉ˆˆ­‚CÔV-ŠB*õV[¤VD¡¢¶â¬‚¢µ*×Dl«Õj­x·j+ú#¢¤–R¨dóŸ3»Iµÿ’3gÎnÂîwy¿÷ýÎÙ\" Z@_xÆâ¦ã@`rHô“¤!ð6¡›¦->)¶7t÷ÃåKIB؆žKªƒ vŽ)u³ëˆ:%ÿÜh +öL2½=ØîW¸=~™ÛÓ³ÏddN|)ï,·a6ff"þ¡jɸÀ—3ôW&šó¹¦'ð{£#*_eq|b8)-ÔöTK¢–¹>¢UFéyÑÎɼ¿òùNá%ïš5^¯ ðk*{^f"¹†p…­|0ݪð¬DOßís ŠúÉ'ª"¸|»Ï¢½,¯X±_ +ÆSÔ$DÝFQé…RòrÝÔƒ4ÛÍ0tð=ÐMûºy^îæ8vÛlô{õNèTÂt×|Tâ +pÔ^èÇ4*f² îä0ßÃùÉWk©„Èð›ŽT‘†ø~[•Å>à\ó-ÎÅs"T9Û\{À,÷¿6áežc¤ÈT^'^y†ü{ð*Øö!9´‘‚ÿ"~^em!a{þ +ØÁ%PEŒÂ3"°f^ø4ä+ot%FÂüàÛ 1ÅîĶ l”HÌCšÁo8ÁÓ(Ë,„BáÊ>Õó] 0 ÿ!o¤D‰‡$æ]y%zM/ }HBðOàAÄž×Òêm‡â¾d3Ô€\Ew°GSö3â­]§µàáŸSZÇLÆ?èÿß54üÔr ¤KŒ1 #A…![As<™éf.f.‡W2 é…ÌðNf\ÃlásðOÌ›pü„92>ýðù ¤cèfúáZô¢ºé­’oñýpËOšÔrÕœš]úzzàˆaškcÇàÙ|€WìÄý›W,ñÿž™PX§×òÏ­°@¡÷½Û‚?\€®{l`è @í_›£SˆV|ê†öƒäЀ„~¼CÿÙt3nÚM DL㋵ª;‡#=ô…KY‚î;*\BkAäaÒâŠÆÜ‘!Ûa,—¿©?o,Æ;ÜJý}Њ€/[+žˆg!Þ…9°™hm|[û¹:‹Èsº¬øIñ*Åb Ô€(kR¯ÓSzZ§¬§ÝÉ8i§Íi±’z” ,ú ˜±& £ +Œ±4èάòFÙU}eæƒaÒ[üBJÙðòš¨”=ï+óx4M(Gû‡¾4 4Iz‚< >w9†‡¤Gr¡Hz© ŽrÎŽ ÏTÁä3Ç&¬Ç¿*vŽçÃüš. ~ÙÓ¡—3q&©ë˜ôsf1óI葶$ú‹^Ä|è_cƒP"wÏ?ùÄëòêÖ‡f§ü,¯ÏI§O+um'Þ¼r|F®k;iñJâÝí•Þ{ÍØRäÖŽ©—m‡žGomŸ::bJ¬²ãéÍWü¥#ªÄaäiœm;‘8ßMDUè:h°¼ÐLÀt ]Šaˆ5À ï2Îéd¹§šÀ+´"@‹…€OѵvÚ„€g€x ðÄ…›€…¡ +áÙBÌGÊÖGüÅ°ƒ y^ˆÔ8·•˜‚à>ø—jaÕÝÎ!†nŠÕòž*7# ëßûŸ9ê¦XzL/Ù¾òab) cÜœe"Y¸²×ðŠV¨ƒ_žÉ,ˆ>ª~*FjÕö#Èo¡\ÊÀpUŠn +82 +QÍ~ؽÁîôtD-EʃÕ:ØŒrêïF6o:‰½Ú}Cò†ºR«ëV§¶8ק—`—JÎÖ4•Š¥µŒ'©ÕÅÑâúTØ#ýW”¨:zØ’ïmªÒ²îDÀê€.jÝëÆîô÷ÃCëÍÿ{ ìF²Š@ëô|G¢ÓEÌ9¤5º†žï .Yø‹á¬äìÇI‰ }ˆÒ¢Áí53‚ªQvCqA–aÝ‘ ÆxúB +q4Ô²kþüª½Ñèƒ}™é-‘Z¡p¼eQ2u†ÍZ«œ5ü²ZmÀ6H\ Ëá×!ø¢ïôÐo|éÊ•qr¼oææsïùPï¾¼òöÀéì¤]³kïìL©›µú§=²Íîãê˜ñ΢1ç^6·òÞ}8Vÿ0ô!… ã×ÍjED¡VcCC‰?9>11¾õ‡À:/rCëíÔ²Ò­«J«[7‹¾Å=/ùÞÿæûLü¯o¨ÀãßÛà‰"ÇñýȃA4IѬ#SÇ“ôBd`‰¢…ëô¬‚\¿.²ýðæuzG#â37o:¬±Žæ~è2ìÞ2l#ýc +ÈAbþ&‡ÒÖh±º>€×Vå(†È;'s»í'q¸'ƒ½1¸Ýb5ŠáÒ yLVª l*Å¢‡²$šb•Œ—tËP+Kˆ½‚ôd&ÓÚÓ× +Zû T¥/úµDšùE¯‰AŸygzi8GªN"ŹWÿ»Öî<ëã8Ï]Þúì¹{4¿¢œÔ·lù5ÓnÍr¼ƒ—§]µ|ÅŸÏ#iÚpÞ/?>»ž8™½lÓœS–~ç\Ô=ci{“‡ñquglûùéw Úô&Î'ÄPU¯.TÏı¨¡ „̺k£ª>%±^¡žcn÷SÞp$r!A"¦L‘P~IR–ˆæÒÐ|-p£âƒê•Äi ­I^²Ÿ¸Î`¡Å}¡ª†«A” +Úq)ˆÀnÃr*QŠò:Qµz¹#>⎾Iƒzúp'f°ÃÌ óNn¯É¥ÌvÙ`;ßfAÓ{8qþýzûð•-Ö÷ÁH 6òÃ|bxR¢FžA’| ¾öØ ˜ž`Ž•çñxO¶2 öžK&ÿÛ®òïa4‚½ÄûƒçÏà8G–Ë‚¿QG€ F™”2F¶äR§¦zS—¦~•ú“ò®ü™VpK8ˆE4 „c´‡ Ç¥†ÔØ +ñǾ Þ ‚; Fí (;Ðb?ü?ãë°û;8´ ׃1kzæ…‰x?üÛ&NÉ%(ûpÚ ÑMd£j?“LÜG1û*URÞfƱ½²´0A ªß2ƒ†€U5 BûF#¥p&ÓÓùa¨ÀÊí˜ÈEm5öZÓÅó&ÞØqïûÖ_qédC—9^üåÚeO¯¾öºëÂ.$£&b¡n­œ +ý}ÃóK‰–ˆ$(ÂÍzð–G'p²Dä0!øuýEb >l8óQO¼)ªe´ˆ¦ `èCÃ]¢ÆÒã©Sè3¨³hkx²o¸vš×XS¼èuÃŽÑývœvõ£ßœGQí¡<´NétZ#ž"v‹‰W‰7Š×Ç·ˆâï8ÞþáÐBÛÂV]aãáDäüð÷"WE®ª»¬0§~]tKúMç‡ö]Ná,‘Ž¢'äÕ$Õ§p²+ +â.g¡Ûa}ÈgQIÙ2i‹ÏêvÅ‹(GVmÈu$è‡7¤P‡Ç’ì`\òÖæÒát}šJo%^ ãÀI¬Þí¨GBM)n­pþ¥ëÁ n°Ç”ú¨€`_ï¬öÃ}5%…a*‘ G(‘cyV`I«ÓåpÖ,•6`XŒöÃß^ Û—KÄëh´˜±ä aCøL¸’HÙ’¨9®Ýdr×úÌ‚c²¥jéÉÀÑP1#•+µØ‰E׃èÓhèÀY“WÃö§¼dkóørýÊ7®9½U–x—êøCe›¢ß?{Ί•çŸ{V;!^véûÜq膛}õÞg®8?Ê*‚Ïî©<ñqä•w?¶øºß|·eåkCòM”•^pí ‰ ·AWš°ZIâ)Æér]è¯x™pú^' 9H\è°ó,g§8§ce"$Zïcé³#èóÎI&ñ)›ÀƒpÇl6™É„tlµÝtL݆¥HÕ%4ÀNÎ\±„$+¿¥%· [©Yº™+nøòy?/sv¡ðÇH3|lj†(ÂÆñƒÑÀ^°×Iù)Õ›ÉMËœOXnJ¸=ò"ù6¸œ^îX–\‘¹;·ÞŸÜ@l³82/Ù_ȈWÁU¢èÉ!f³6Óú‡þ¶¶>–ú×ót]]¯¥ë¢CŸÄЧk“ѦAB¦Î c©”Uí-…«+Öÿjp©”ÄéäþŽ²4E"¤~¸Çp4†;¸²ŒÒpŒìØ;ñhÄP´Ë T§fhÖçŠï¥hM èA8”·!ÍPoAe4Ä#D +xÑ£ ("1*&paýª’=°§ôÇ[Ä™¡Ýë@od÷:$ðÕ¨GÁ"£;‹ŒfÏ l®yœe¯ŒžîÅk^¼æÅkGIƒé#õÛì&Gv™lÖ–#š¸âsRœyñŽ•+w\|ÑÙé1oÜñË×Ǥ\÷ýhî}+.¿b…ï7×^û›GçÍ{”¸©ñÁsnçÛ{l*µvÞ¢—_^t^טOfÝu÷Eç-[V±Í~àKøÐCE„‹> лŒœ¦Ò¶ È?ˆ[u ’±,Ü2\n­¡ÉECƒÔ˜Mf½˜‰±ÝÅ„C±¥÷ç-Û,b”Ä¿Õ.!ÿ +rè·¬ž ÅgŠ¯©´+t·3é¨cÒHý¡™KG .Š§:ìŒg†½€Íé\úÂ,±Ú°Ç;XÉÿ­#»•x4B·­(4>ÕhØYÞSkµW2™Æ(¯ËítVÑ‘óp”Õ’H3(Fê(F’zÔÇH%Â<…Å&B‹n4ĸZßrÖÂv^ 'ƒ«Ž`š›I:Ü6ýj²å#j(5%õQ÷¶4“Û:×͘vÿ9ÛVþðɦñmú²³zãYm~™wú’oÀOéž™ÿú׌½¬1Büñ²¹ßÿÝEËoYðèGk/ﺣPŽr2ïsˆ°ñãôÛ/.[óÂu†‘A~6{%äyÀ…4_Ñ`ص’ƒ^ ¬Â(!L  ´ÁáP”àhó¤}WUfÏ÷¨ŠøM •Ñ<¯«eìdü3¸d¤ËBÀÖ¡4 ÌW!ƒ3 þi÷v÷ÛÜ÷'Ü>÷!ÎæC$åáuõ,dû¡ß`ÐëcÿÅýN¢ú¡d¸MîWY Jï(ÀZ{•  Í ºjlšVû®G½<22•Äé‰Ö)]-h8ílHW>ò*¼¶ñRÿ\© +š×)bÝqè¤Ú¨IHÇ^ghOX!Í0q=€±¼S<šÓ€§»!~ÙÀÞÍw2ða`‡O¢ +{ÒÃ>¹Öºö xFSÀ”ùr?Œ!z¥ l–Ü{ö o ì—÷(е'—Í ~S"¬!„µêw¹XrðJôð’‰*¼C"N„ÿu*¼"Vº*]"š8?.¢f’NÓï-kmqôZoœu(~•š"@ôÍ +¡,‚¬mÂ÷ ’ŒwE +ˆ/›ÿšÒ®J‡£î¨âaSk“·áñˆ9± 3/³Õøn"šDnCV½Ø´ê Ft›õçNò(kiånÞ´,²p§Y[[·fYTV1œ`sÁ +­È°]?F†iØÁß°£ 8XËJêâÃsMË’öÃÿ©Y¶b5- ‡[–€ÚFÝ +Ò 7™fïÀ¸lKîDádÿ©Ùr]B—ÔëïÍvå¦Ù H§³yH9;×O<`H®%®.â}t¥x—‹ãU;/ÄRø!·®7¦u=•Vcé,CšKVk£I9T†È)¢¹$ISIUøh/¡kCKCäö ¥¡P0 F~6Ö~O àx^#rHmåⱘÙj6Êù<£ä²º_Ôý +á€g‚,gxÒzÀ`™2à!vö(D1³ë ÏéÂø¡§×ñö27Ô9ô\–‡€ŸÂÎñr_v]aÂ,ä˜jçA&nNT§ƒfçk0ssÖ<ìÈЋ)À '-øÉÑ›n=}…ýϳ ÷íoÍ߶!Â…ªmiò kÂ9y€$c$ùãÁ·û̽öÊñØ /;hö™„Ë;Íåç°Ô[¹lw踠òÒ°Ä#?ÅÁÿåïG$ßâ{ƒ÷àó1ÓP MG1IÐ/0¶>–~$óGû³Ž·ì–%éE™{Âw%Vd~›°þ8>/qYæG¹%ö%ž›âKôÜùÜ<ûn?G˜#Ú&†'ENŽŸ’¹Ámi`džÇDÆ$Êé±™ ì‰Í”p0HÒBŒMg諸'ãÏÈÂ''.ß^T{xUxC˜ÎÒH¤gP%‚¶d Téú°›ŒÕ¹ÂI5¥KIÖT­ØÐ Ñ„DǬ3ä,8ËÎ)Î^çl§ÍÙ¯3R¹à9ž`ù¥üÓüv~¿·òþ¦d’éx»o†ÁƉWUcçi_íÌO)Ï1'Fþ2E'Wí“ÔƒGËq³ kñ¬à±;D=“H{r9˜°Çr0+¤r îÐsŒr;¼ûÓ××׃¾|ì³IÕ­Øš£ÅHCK³©&"H‚6W›)úÌ-îžgW]wuתsÍí“gaªwJÇñ·]QYלvå¸é÷ÞTyõôª»7\½¼·p÷ŒÓo:»œhŽ/j™rýa餋ڌ+ÇáäCïS§R‚Vð¾qeÎ   ¦Ò"y¥©¾ó=ß—fæçx.“æÈë}ö–`sýDibs·¯»t‘ï¥ëƒwìE6ˆB@ÒnÉ×ÒŽi¬ ‚#¶>#$Z7QZ"ÓBRD†qëô9]÷ èl1T,ËEª¨´-8 “ð>ø¤ÁAlþòð—ªíÁúÚ0—B%œò¸ã»§<?í,ÄŠƒH ìÆD_úlƒ$ù‚²4|Š“g”éÃ}ÚŒKšR ÿCKÀd=5Ö‹ëZž,•š´B¾]­¼°L{Û¹S ý¸drëg=ÒÅ{)ó—fvÏ8iƆë?^° +Å.ù$ä—§wNÏ„r“{O8sÙ“•ÌèõJ¼¯pvO,pÒ#¿˜öÈ5øŠ‡º垊 ÎiDn±/tÜ(,z{—„–„EnN.J-I;u0N#øÈ-sgrC„OûTŒ· +øý*P}4ïK–”ÙÑUi>φ4IR5цÐh"®³ˆØ°a–`ýù¬¦Á0ò6”ÜØéQ>š ˜|¡$0¬ ÿWkåBS8m÷ºYëd,eÕÉD]"• ¬¢àk$‘¶Çó0ìåa‚ÍäaTåk­¼‘Rk÷" ~d~àì7Û(šYYkÒÌ Õ<‡Ÿ¹è±ü””úÃë¿÷³J;^¹ /Úܣċ/>­òr-)Îlí½hÒ̹ó¿8ë8œ‹~7ãW“;¦weOFùp&òGù£Ãßšmg%y‡;#ª# •b15H2VTgÖ±Z_,«”­S T=~_FUS8QÌ”Jj>™ÃÝ"Ñu5ꇳŒv?uG,®ûK@Oh8ü„ƒŽêl~ +ÁNR ìbV2Û™Ì>Æ”t=r\ŽÈõ£Š(%ˆžhÌwÄ‚ð¹°“¦æ‰³åšçöàs^x†À«§Ò¾š V›‹ø¡×$è{^o™ÔͼÍd†YÇn¾ó#ÝÆa/ñÃMÑçÔVàÄ Øì‡ÏÅé31Œ¼ ¯ ®†fg yA&J•YÇ*ëG«Uå}¼òRå”^ó‘½xìE^Z¼4y© üÓ˜qŽ²Œ3Ãq* h¥hT 4æØúP=QŸijRs¨Œ4ã2"(Þ Ï«Šž).E¤2‰„šÆt¥ $â: +ò +£ Ý”È%tå²]Y2‹íÇcê\Tp€è +¬ l7yˆ%ð>ÌAÀ]Ë-åöq§”lÆy4RRñ¹š?p{·ZÛG}q¬õÁ‘^èù'Àžcwžj.hùß>¸»º%U û€uhä=Øðƒ?9Ú Gñ—ýë]€|p-ª×£ÊÑu£uqxy˜(pen +GžìÕÑãœ_íXÒ:àd¨˜/¦;“1=Þ·6ƒ¶¥ ­ ¨Í¥¬F¶64ç +yµd§CI.'BÍ'£ò”kN‡TŽŒÚõæ‚Þ|A©D‰‘„›Dôo¦öxD" í‚|>§Aüã’:K‡h‚V:Ì>¦¬˜‡y9³¥hâf{;GËK[휆Ùü: +æzª8W½ÁtýˆÊÓiª9–¡ý ;ô)H¡Ÿº¡O7Ä¥¨“FŽÑ™‡²ú +Kž¨_m¯j¸U7HÐ-…kÑp‚Yª»YTáœm½ ^ºeʽ‹_\lÃ6Yà}ÐúÊçn9­‚NýÙ´ª« Ò=œ®­üªÔܵtíÂå‹ eÑ좇õkO…ŸzƬóoé¹üÎW„ë` r± }¢K²!^Œ²j6ʪñð÷†S¸Oúma´­@U¥‚Õ©)Ødþœ +ÕLDUÃÕŸm0—@R…BC£šm?/ql9T&Ê™ñåòqãÕöªŽpX35Q)UÓ™„ùwØ:X—‰×Õ%âjfl /­°5ÓÔÚZjRÇÆ¢€Qôl6Öý =“©j†ö±cíHP4jñ&->Þ†šVŒl<±düûã‰ñýÄ#0AÐ"^«' b)AN!¶Kô³ ’x’ØŽÇB¨¾E™Ûnž¶íË´›=œ±íX)˜œ3çU)ⱡòµwß|Óó­ïöWÅ¢Ù, Òðž²d ¡€ +Ñ&·ˆnÐPmêE¾²14|’wxã(ò••cåÆuƒ¯™p]yÏLû&,,™Bäæh~%t¯4õ?G Í!š+ÚÑ’ÃòSáúáùaiøqs!ò Š¹xËȨ¼%æ »Âž°·,hã,ÎzO½·,k“-ã†Ç𞜢NѼøb(rœÍæÁI!ó>Ø ‚ÁP•*r ä¯r!YÀ÷Io3ïõ +¼*‡tEЙ tšÕ†Æ"”ŸÂAN /~_á@ØëÈÙØë{¾+¿Î[_9)pTë"Füâ˜Ó;L’ov2¨q£Æ5&FßGú>†ì¦ƒ/Œk~Jίö,$“KÄEžƒÍÃK.'î±=lû˜ûÈó‘d¥¸ ¸ÜFÕ@ëáX ¬° +¾+ËjÈÆ +BSÙ‡¡Ôpñe`8¹ò¯EÿŸ¿Ž½À­Ñ´ ?`Ã\kƒ6%yÏføF­Ü! +‡1vçäšÄ®}zb>X@ØúuÒ)ÊI„Õ+yÐÈ[X„º¬Õ&’¾ä¬ƒ%BÈUÉ!N½Lº& zj‡Ë’µ3e$Þ{ÁzéË’í¼·wÓ,\Øà¤_NüÎÉ-Ý•M8`‰ ªÆôß¹cÚ÷`³¾_œxbvËiÄ®#úDÓ"Þ‰¬|ñ}£GÎÉÍþÎxc©±¥ùÄHwç…‘YWD®é\d,ê¼Ó¸«ó±Î-/6Š,hnœÐ8­‰b£™æš:KS‹Ï”ÿ`<ÝI¢âÌèÌâmMåÖ4ïŽÊj¶7@q8š3GE³a°1Œ:¬*éz³aÎ-Íõ9˜Ë--ærõE5]ÕXw ´4îDxªážŠáû.ÕCz½Nê™(®7j*él2š©òqÑ"€‰z"‘(ˆ£TÖë阞N¥”b4Fù‚F&Z[ôqå2MsºÁРŸ¸z}$"3 ýðÌMáãŽ+‚ãô†øˆW>£«xNqN‘E£ØU$w÷!NÜÙ²ž   › þøHçàà>œzã'ÀÓGEˆ)ÉÛÛn¿PF·}~||ƒ®_1±w\öï1ay°Ý(æéÃv¼£n–õù >¥CkGÑlAƒÒ€_ žºrõœüô–ŸTkÊGöi +ÿ±ìðôôýOж¹¹ööêÁžÍ :´coÂJn-º¢—0Ä)Q¿ ²#à AlˆOm ŸÞŽzN½ËÜî_9ʵá9xå.âø³ñõ?x)Zi¸ðÆrüœ™æ§2~¾~|¡²è«@3ø%aAðï¥:·sŸyäbæËi“¢ì8eGÌ2Z‘H*a‘„)8–IïÖ4Q k"Bw°ÌaÈø›ÖDA‰®ºêˆ[íêAì¸ÚðåÀ_aÆøhéèaÒ¯·|ƒÈ›'ÎÁoöùçM+|4 ¨p2.T•Ç€*2z?O£÷ÓJ$1ª»4â0±õi°¼ß¾¢àÕžI5©é­'§Ò6k¯ƒ×áëê§p·ê:SƒN3óÄXf‡ÌN‰,+ˆª3dRD»¢D4¥G£ ] Lrãhhlnh(5«‡Å¼§)š¶Pª#à­þ1²rH&ä”G–½5¯«f|¦+CdRÉL¦.©æû‡n2‚*á ªjð@»ýíå>gŒÐßÐfN`óÀq¢¶7‹ÀÇí¯!ƱûÑwOl8¥kÌÔÊ!èì¹ÿÿrî%€M”iÿï;“ûœ$3I&×drLs´IÚ$mzÐ Š +ZT +T< +^x}R×/PDe½º‹xá-G×—Ýÿª¬» ‹Çº¢èšþßw&ICQÿß·hÞ™yg’&ïû¿çy~Ï„g~]Ø.?Q£ÿ¸ìÌ_‡s.Û䳯jû¨¬ÓI§  ¾%κ5~KêöÌñÕ™§"OÄOh¬ k¤ ]wWÑqºF§¥Ú2mõ§6Nhê +MŸSÕ•:;=%3µaFã̦yñyµdf7<ŸZ“émx9µ)Ý—Yß°¥éø©@ÊЀ¤}S“.¥ áÓ£}µš4Öθ¡J­‰6f#ùXSMSã©¡ññ»BwTÝ¿)qSjYýC¡‡ªVÆW$V¥VׯOÄ߉ÿ³ñÇÔw™ïêlòÔ746)2éY-  ÁDáÆ|¤£ÈðŸÓ§Ÿ¯€ËDvä ­ GQ2¨5ͯ°«öc÷àÌ&Ã8 ë¯NU÷V+«—dÃÛŒ4| LÂBZN}7x§õòIœÕCñg h«‡^íÓR™xç!öc'š— é¿v [„®á> (ó«Äö` kÎ'æù¬ùx l!ê}hÈà¡÷idðPïCÏÕã> êqŸFq)<¡¥°K©.’mÊu&‰c*¡Š]_‘Åú‹µØV¡ÁÄ¥‹Î®Ÿ6¥…oï1X:æ´\}ì¾qµ§œ?ŠÖZœŽmO~…”)xaÏ_ËêÍO¶øI«ÃfÖ;ýl½ÁbQ:išº5 +Oû +|á©Â×…o Oó*Õž* ¯ ­¯ ð·[?´C<ÃÏ·Æi‡³uFv~íµ¤:ÞT{Zít×´ÚËý—W_•½+»6öLína÷Žÿ€°¯æ+Áb´µã¸vþªê›¹Û«ïá~Ç­«Þé‹ÿ$nômúhù'-ĉló°…àü±8¯ +ÔT¹¨/F£5À—L`¥O`}O$4(Ðb1œÏá¶×€¢W4ôC|T:ìxm\êYîAxFнœè ì  (›-"“ÔŠ ØÜiXîZ|¨ëP—Ô'Ø"uIxCâ C\ +B+«ÅÿS³“Ö[‹9å>Îàß:t­üÑ qCÖÎ!ÿÔ—ñ×"_SâSʸIâ—CFµý„è0œ.¬)'ljÇy÷懧÷Ü%â«E¯ë.|ûñ%ýg>}ua¡+œv¢Ùzó¿¦?–m}ø) t¼’<é¢ÜäþÜ‚ ¬×XðW16*=ÑÝ‘îJ/±ßb¿ÕµÌ}gãê1ºSýí£ ,O~jÌ>Ç'Žoj7þ‘6g=&”wÆÅè¨f—Ó¬¤l0Õ¥‚d"ƒ«Ê=+´´d,á6ýŠÄU™0ßF*Ûá¥ârCx–¯ÛGø\ítX¬‚‚8º;º4º<úXô…¨2ÊŽ{d+ä*XƇ# (÷ÎÊçRÉyÐ"5GÈdc™^.ÕjS˜› ¥&ÎÕd™<ç#p©²H*Ñd‹¼»"?¸J(³ÍÉ•2’³: rÍMw<ž˜8{þºÑS;?ùï¿Þˆ—U¾³íÑG7·K=øöÌ™ï<·^ÑêÁ»ó.0ß²ü¼º³ÒœÅã­ºýÜ»–¥ð­Ïpíyæ^4æã +žrÊÍ7½‚ã‚åH¯[$o~·3k Y\0 x¸z\Ò$4Ê,®‘ÙX{=ŠâÙ R#vvo¢(‹}:ý”'é™íÙíQ˜=yO‡g–gÒ¦<<Ï?Ã8 ÃÙ¿£ÅÞ†¼ä|G±N*i$Â|¹y´tB¬Ø/åH¥ìÅþÂS×ø9¼|'¦H ÃR —–IÇ úÝg#y¼ýî ldz¸¡ú8ʃÛÝé–¸©>ñ|Îý›øVõ­ûî˜_«'*èÖs7»R©¬N9rg(†`Ò,Ã8Y¯UNÇ™@ ¬‰‚ššðÆ,:¹NÕ:­×"çÜÆ éb®-…,SPˆF‚U'X-„áØí a`n<­c]>¦C;KÛ­]ª]®UjÙÚŠ¸§KJ«b©íN°–žÿ¨Ü õ€Jf%W̬¢/K1¬Ä ­ÏŽˆcÈÁ/ž\ôü5ã}.“Á'G-½òë³—] Ŷò„¢upÌ‹Gæ¼yñŠTR”¢×1w¼6ñѹÒL)ÿB=OvŠ5P;S`¢ó´ølï½Ôï¿ÿŽëžOy -ן¨4CQ4ã50ö@ O!¿H €@ ³…=‚B¢qAˆÅ½8ÐK…'g·âán5Šk£„ZM^=yß<ÕëM;½^Öé冀Ї~ Òeg‡“v8œ{L°O RÐxÞ`ÐjÐ7Ž )ç$çzç§Â‰KÆz!$™YÌv†dÐuÿ:¶ÂØÓ_-qÑæaÂð']G»$y—¤+¥,þ/™,å2~‚‚–ü©ä/N·ŨE2°´…2ë(Ó?5K¬½¢Ð9ÚA´6:mF“Íñ[x‹ +ÞÐë¤Ñ…æ䣨hÕ2£•ÇãvòóÊkl}P¬¦xím„øZÆg¢“qv‡R¥@]ÄE«¿Ð†&*»Nl8ZÐ’;ų»]ÝînO·÷6û-ŽW•¯ÒŸÙµ³©Ù–ÙÖÙ6ÅnRvÊ!ÚE‡ÂI¸>–óú"QG=Qo¯u´íöÑŽN8Ã>Íq›ã)Ç[ÄNû~ô³¤â£…šDA*KS”öi†¯Â³¾?´(D€šz5´'¤ ­ˆ„BU/•ôˆÖ¬å´„Y»]{@û•v)ê +¥V«Rz J…ß…¡½³¼Ð›e½^ëõ³N€~° ð£˜a¤ŸV*>†¦‘‰ s²´ÓÉ ¡Ïé@ç‚$ écìè ;!8ˆ+EŸS’Œ@*4UïÂÿûý6Á¨Œ¾«@® °hѻĺÝ,äXÈŠ±,+fê3lOCVª2¬ š#\dVdidyä±ÈîÈWMdq5¿vô6»˜D/ôV»èÊší_ImÓ6¢Eˆíê>¥Ÿyý9èO+`Èp4|•†´@)!Pv(—+w+Ê—ÑÝ('e÷çÉ$ÌÃHD¿d©C.j0>¸Ãdç',5¸Øå<,óÖ»¡»NêKP¶oÅJNðJ™> fh*‘~”O†)›èóÀÈtþ/‘8OžufÂz³f›‰ÂåpÙ]E6a½«L@#†¾è#4Ž¡#/Ú©DÃ)ý®®N>ˆy›#ò?6[Úf1G¾{Ó—ÿ¼é:N29ìÁvtÿã†^üºlKñGæÿ^ÑZ®¥Èäñ·É¿WXÑIHÓzpŸH‹«¬YØÄç‚Ù6ÑÐaïHŒÎi˜eïJœ™;Ïp‰ý’Äy¹G+rO¬ü@f m§u'¿3³³í=ðEæ«üá¶ïÁ×ðk*àD[­mk[ +)>“®ƒ|&ÓfµZ}|†æùL]²R>XGCXG œM fAg¬/øסMÈY¡¹V¨üÄU¢átÆ¥i&bÄW˜ÚÚò¹\>L$ªÚ04·æG+)B¥Á ôz v»âi‹Y™Tæ‘\ÍR*•®quBÍn¬šïE ß×u ëö’^vì6(H”6Fö›ìéGÈÔb6öžì釜ÖR¶™Å[ŽoJs,º(Ov¡WXqÈè£pQ‰ÂE% +•¨€Õ—§LF; t)ì,Zr©voÚÛÞc@Gô6éˆÞiŹôfé½ûNü3ú'résÒC_‹6“#o1[³66¿)µAmdëÔ©¦[ϵÏòNç~^à¾ÀÚ€â{þ‡ ¡âµA†gƒŠRò*[ Me¾‹±LváñZ4ÓO%`b€xMÔ×%µuÞx(±ÙbËÚ¶#—ž)“äc!‰óTVU…‚ÞX0€TÀHV[´Õ +ñù…˜‹·Z%N áAaR¬ ¶oDV]°PèL4ó°vX—cò_ºž~Xê•=ŠóŸrîK*ˆJ †––RDSaè¾=Áì5?Wöü‰0×DP$Ë"³Ff±8-Î"w1ø©`õÿ/K+ËÀŸåö–×á«Oñp6l‚é³ÊrSGP…±e¹y‰H”E¥ +¾_ÉœØY@²‚<£Øx5 ­çiÏcfÛéëÙUägÄgfRC —™#æ‘$sDžì —’KÌWRˈÛH³ŒôÚsŠ_æ1ÅPì$o3e&H‹Bé3 + + Æ,ú³fÑ‹^¬'c¸ºdeÌß À嶆Ñ~;`7\ +@d]hWåÔŠT±Éj9}»F å‹Ýš•Í™#;5'¬gÊþÉ<ôÍ‹„©ÄEà ¢$ÍšqÒû£þâq³Ã”'H3×"[‚.žÏw{Zx2¥Â+Y8þ.ñÌàÛ¸ÈJì<‡¸ ¯î5äËê兩kÂ’ãc´0ŒÏ$FÉUŠO´‹‚Eoú€:=Š8¿A¾B£×Q+€!-¥Ké&éHk=ÿéJNþ§*À%9²”I4” ÌA9 «¸÷Çíø)?—¯Ñ®ÿcèLòSåÀ &nÔFôlÙÈ÷D#:ÑjYí%pFa€;7¨N‡34°O4€Ú—“&hz—R½¹îÂ^IÜé5xøèáA€’ºD—ú Šm;°‰X£c-Ë`:¸•c~œf×QlXù4£§…-…Aâ>i-ZEÿȵ ôV­.óR–¼ +ÇK«0r ”ÃÌÛ¢6ù]• ¢”£1óåG):FŸw+þT#0nPÏ€zE2 ’'õU)V[#­`Dzƒ»ËŠC€(Ž>‡ìPçˆg>£~œ{&A +ê0׬¸Ü¶Äu¥»‡¾Ùu/½ÊµNÝK?îz>¹Qý’éEzƒk‹o—éh-£ƒ,ŒAò7–û\ĵ‰Û%ž1­K¼^»¯öãZM$0@ðˆÕksDëyP…dÚ ­®€Åéð¶Ð¥yR¯åqbxQ5Ym6"ôÃïUãFà÷ó"òf&ù<ßÁÏâã_à·óx ïÊ9–§x¾ß­zLµ]u@¥P± ±mÃæÆOü¤Ha’—¾Ô‚žì:Œcm©ã·œj´4Ž0‚Eû‡Õn;Pý2CG@½Ø¡£ýVMBS$…"pX$’ÒèÑmÀ‡± ½Šï,îBÊ—-väâäQ±¯¼“Ë ä’‚t¯Ø¹INÛ¼çg¾Ût[GOÏœýZÊ¡3Í}xÒc}‹°6¾Þ|Ó©›/8cÉ¥o›{õoVw_³ÉLÝ6n~£ÎiµèÌ®Ø#s÷J½ßY¨Žæ³&þjê,\‘¨A{?I­D`èE8=/ꩤ4Œ;¾¶±I†eíLÀãS“Pï ]ú8w£Àký<ÂnsÅéA¶W­Õ{y3ZyBåŠ'ƒŸ¡q{—™î¦ÐÈ(EϽ»r;ð&*{5ÀAòeª*2vÁ#¡67Cœ¼P SúTh|äœÈ¼ÈÓµ¡Íp‹þ%ߦªÊ]š½Š4‡”Ÿk,vE-¬SŽÒ·Áý©¾sàe—ºK?ÎW^¤¿‚¸Vw­ïjn™o+÷r`cØŽ¬È‘>=úüEŸDø•jЂö04ÀyÀàˆÔ,¬è¤†±ß€ªÂ÷?Xùz?þÑý÷Þ»¿Ÿ¾óFáÛ×vŽ¼±û6E«DmÙùØßþöz¹€fÆÀ‘¼NoÆåÆïÄjtò&óAøýªƒÜAþ_áÏ«Ô!¦Ê>Özøôª)þ®ðôª…æ…ì‚ð2Ö`ÇÅÆËlt§íæÂðüªï\J•‹¥W”ŠZî۩‡¨û«\k™µèÙ `µ˜YÚ-õü°‡œ™·Yø¨Z߯Py~çàƒzS³¦³—ƒ+¸W9‚sUÓ¼€7¹W€˜‚¶B 6¾£bŸ‘¶I,mäìp?Þa¬j‡¹ÙÃm?rg«0 ÙßRVU™†µWvó ›é:òu‰(uò¨^¸oÛkyfή³Êâ8ÍÎ]…cP¿ë÷¤ÑƒµäÎåpïùü5{O™D;,ñ1BòÍ]Ѐuáz´Úë.øÐz¸éÔدbÆ}Ï˼¤ýŸOQî¤Ãív:>=ÑvéôGx´ÞHüžöƒžV£˜:8­¿B3„ÐUæ{(H À;û㱞RßâââúàâC‹Ô …<ã!ôÿQ¬?Ÿì«MMXo/*A¿IcÕ`3¬[@ Å®~º +'D„ƒš[¶QeW̪Ê)¢:GI”m¢¬ ds¾}õÕo_öÁýÒõ¢÷VÝÿÞ{÷¯zOñ鱋±myrçÕ—\uàšp¿,ɽ|Ћ%™z +’H’Yà{Ä:ûj†¨#Ægs‰7ˆ7l`÷[÷³¸ÿáü˜ûÑnd=1O†ÈùNsOäfº§sÝëÝwºW{Vû6+ÍWØ·zv;¬oyÞò©4¯[\~?òÀ/ïP+x‹Þ0ÙÕÜ à"¤AðcÑð7Ãæ^vÓÛéÝÈ)h–=[!¢§–ZFK=‡Kí'™>;­B&aƒ›æ|ÄÀÐeS 0äíömf²dµLþWÔÊþñÓçþy´ÍD9©Ô·7¼W8Í;ÿ uSÙ}+WîuÁGÖ¼Ùš6³ U7ºßÚŒ,Çÿ½áŽçŸ½ cœwQ4Ifìâa’²Gy£á†Ú^CŸaCüµø޸Ρ1k ;)* Í$@-DaŒb P]In(á®(ïÀêg5N•V£ Yuõ ú]»%Ñ\%“ŒÈ,bö0 +†Í^±þ±È>]j=j¡>‘â VIÞòÄîÉ®\`S,îFZ͸;ÊAœT½á†ŸíwA'r£t©Ü" "SƒI(ÙÑÁn<îÚ„ÇMÏÞ½äÖ4ã¤5¶~uɸL2´ÆÁñ¥¨Ø‚åqé‡í»Õê [*ãGüWázÅõH2«@úÄÚqô"šø€'ü(|Œ?R]½¸fnrnúãuÑÅé;£=éG¢÷¤×E{Ó[}&Bƒ­ÁÉ@h•J6@_¼Öé§~´—&ßÊZÞ¯‹ó`¥ Ö4*¨‚¯úu:JÛ«]¯%ÍZ\xA»[«Ôº² ¾'¸"Ø\Tlî  *‚l&vÞ Â*Y ̧D›dþ6©ùRGkã#Q!ÅÛ€{è(p í‹iê†~èóiæTkRø5¤ñd=9\’, +:F.0[æ½Ñj,n—‹~["›±¦ë*MyƒìûBÎE3O—ZŒ¾>mI•ýÖ}Ï;öܾ[wÝu×þp×]»ˆ¿‘,Æ–ÉcªÏH½+O>¾Â!(L¸ïZyߟþ„ta +Ò…‹‘.äà¥bÍj×1?¡€ œ§ºBµÞGôÂljõ°ŸÐ­U=¡Þ Ü¨~Cýžú€KíÒX’Ý6ÓMÐ34íp,Ѥxªg¦ª«“©@”ÒÉöÞ3¥bO€’ñ«><³ˆ_suø:˜MÖf³uµÄÍ›Šh$‚¶;jJ§ÑúÙNˆüÄQßxíöÔî‘€ÿêo^¹[]æ[K&_*Xÿ¢Ú‰·JD 8ôj¿;„#¢ƒ}W‘‘Œ’r¹•jUØ­d9èR{d•D:YQ«ÞTCG7ú -£ŸN¹8j‘Z›†1jYue«þ¹¢5“4á¢cSÇ[Þ1ø}YÉ×Ôø— ~Qš¡ÒÞ—‘4Ø•@"»TŒØ:VdÏbç²—³7±j›‘šF#«2h§)•ƒÝîbŽ%_'à}›<*£Aà6ˆËs +CL +…ÒÏtÐf½g.ŽU©Ai—Zòß²‚Êþ=&˜µÔR\bÅuKáiøw:¥`î´o1Tiyÿý™ǿ©°TË`»´¡p=™“~™<&Æ)€Œ3A‘3Ì„î<—›{@ì!zÈUfÓšåšÇ4ë<[=JÆ)¤ÍJ=ŠwŸÛ¤PôòMz•k2ë·ÚLö•>\ö%Z‚$}œÁè÷z;PÁú¶Âðmà.IJÍP¥²ïà¡üwƒÃ£®åÄ¿œînçUÖÕg‰×ÝP0â41~Ú´Q“ ßJ  ½ð&üëKš?÷Â5œ¤øw^€´|;ÚוH˳ÄÀEbl7棸7—6HG±ÃªÏ_`{ÂFìÈÀ '¢±L$ÛʇGEó™…ô ~¾ mõ6"NwDß¿Ÿù"üEæXøXFÓnÊ, -Ì®£×U¡l0d3®/ÛpVú €ƒ‡ÿ¨Êã£H!äÍÍ r\ ðAMZ²©T{&•Jg5™¬E/})©3™ôº€ó¼Q%“¼«%–wÀMÛªŽF…p : +‡Bþl†Îf3AÚfµùA lÙ­ Â@³ÇÃ4»UBsuº¹¦¦ºšÐ7[-@Ó ChmwMÉn…½ ŒfŒ‹2=ŸIefgÈ ¶FÞòýÈû,Òöh JëצРöC*-[¿ >zä2Îp“…mÔâÃGóŽ¥:Ô{9òYdÊ’¿Ø¨a:Øï +eh‰ûiÉØ°yDGü¥:¥ìÚ0‚"MkÂ[‡¾AÑþw•=Ÿè ôÔ¤âS?ô‡ÙŒ?WL‰â&^&ãšrV”/gEOJÊ¿T,¾ÏKºbĆã¼Â|ì<‰ÜsÏ6€Wn¯„ÕØ|àó—…ÎrÒô2¤QÛFÑH£œ KÌÌa.cndø0LØ¡Äi!ZÌ*‹%àè·PTµ")–­´†Øþ‚üY xωöïlÿJ¡C…QGß•Aßu;ÂdíDLl17˜s¦Fs“¹Å<Ê,šÛÌã´VÁPoØàî«VTÁzHLñÌQÏñ\®¾Ü£¬W×yÆ©Çy¦¨•)MÃ(I?4Á¦öÖ¦¦Q­ÆŒ§|~+œdÝc=h=bU+e­¤µÝdµšM&ÌI@¨h÷œ/®OÉ“i*M¤Û“ét*¨oñäùÚ`[{¾­MÌj’*Ÿ¨‰x=*¨Ž5ˆÍ ]ãI¯Õ’ê†úúp˜ÑM~‡]ä²){°¼>•€¯…Ž·‚¤?ߊY u{ëîV²•{ÎY‘3A'ñ–ò¡Ü¾Zlg,Õ¬à?èCí:¹á©¤5*l…%01TQ…?u²:ƒB©GUTªXƒƒeŒƒNƒ £ ©á# „5ººÜp·[놾 +ôRíGk?/ï”°'\,5þ®VÕ€|ÄߤœÔ¶1RFMŠb‡JPB&ÃÀ$8©ŒTÒÏ.¼hô>wYÓŒúñã%ÖËéÄüÑíÒiGmMõ¨6iú#‰Ç/’s¦\6®½}\óÄ郱4ˆ“Ç?øŽt~OÛTotž|1Œ )¿IùT$å9x«Ø°OµOCìPíÐk4}ª> ¹XÝ£&æªçiæ¹É‡ÜkUĵ\?Ü@n!G¨ ŸÆ*ç"Ì ÇL»D` +XGbZÙ%™€ šÚ‹^IÆ´Sab°5fÛe`[לSÁ­ð ðù¢ÍË+ÔãZ­Vçw`!‹ +%ÁÛ©^oYŒm‡!SÙÊÂ9x9‹ÿ}ôÿ×ÒnR£Ö¨4„Ê£DçÖxel“°­»ÌäÑ[ÿþ¢›–Åk1ÎìáþÈÔÏ“¤ãD): ÞNvwçìŽÜ I>”Ú>~}ñÙ×,®D·EYYÚ96ê»ãÔÁ¯†Ñmçµm7~=B@¼g耢Iˆ8à)bÎjWØi‡| ¾¥ßGüUù7õ>½êBõ q>q¾bfn¡ñ"Ëù¶ù Óf^Kêµj°¾˜Ù¼t49¤£hd²ë¤@ +ÌFs€¸UtZy•ˆS‰è™nÕvÕnÕAÕ•R5?êw"TŠ[s;<ص‡ 8q‹íŽdêËA¦!PzèèŠ6ÑŽ­C!ûQ¿Ñgñ Ç“]RIWÙõvÜ´CãÁ‚Ó›6³/¯§Ñ Ñ¡A4ÿ…èEˆOMë­è&ì´ÅÑJãÁFã‚÷ÀÐÑŠNt:Ö4x +^°ÔHQþ× qŸ©Ìrµ¿¶£ð%´îx Ú¦|ØÛû!~Á^-–í¯BKáÈïýûG>xgÎ ×KÚµ°FÌ×êÌUè•­9N!ºŒó ÚÕ…ÆËáµ±KúÿV½ª{_ý¾vÕûµŸ¨>ÖiX²š¼V}'¹š|–TÙ=’ʲI/Ëz¼»ì¥ôÖ'¸¤ÑdÑAc4inf<ÍHRMI^¯‹òp¥B ¸æ°Jàͨq¥«Éï3{eÖ„ÂËÖU&ß%hWJ½n‘?•?øersez,bHḣF¢6ýïzíÐß^¬ +–÷\ÚqœÚeŠA¤”DÿY•:!—>áÙ+®û?—_þðN¹Ø]‘RäWïÝ»ú½äœÕ3f^¾ûÒ…¡Í•Ì´E¸¢YD îÙ½gÅ={vãl$Ú»gÐÞANÜâCßõ™£XøræÆçÁ“îçÃäY`–k¸Äµ¿ \çº2q#¸ËuKbµðpõ‰§…g«ŸHX‡¢ëü뢤?˜*Ó@²mÖ3;‹fY6Ãga3\ +€«ªÆÙlÅ@ÞTÃ{tZœ!ªâÁÊ€:Y-ëïÑA³î îˆŽÔ¹jc|·‚ëåÖsŠÝÜAîGrlª”D®Ì IM—Èô¢MÅÄõ|ËO¥…À/¥•+7ÖEƒ­C_€$Âaº)b_„Ž ŽØY9kÿ³‘rR44"=ôìëR&YÊ'I)½;>z©0ÉWÞ±÷Á÷âñÖj¼ƒÇ^/í(üq3„7 &ܳ{÷=÷ìÙƒk%8GJ.AÖžéëL°ZÛ¡[h½ÚºÌz¿ê›Ú#§q¸ÅèÍÍl%žGÁŽ(j‹AY<ŒŸèˆœŠD¡@\o¢ z´'JµÚm¢t¡p3ˆ«ty +9C‹áÌ­3«¨ µ«Ðþ98)('ðŽUA¶zðîa‡(·AË]и +Ò"Ör¡ #¶ÆÿiSÁ/:A´s–âÎm´Ñ&»ÕSBPE­«¤µ«.K¯7áÖ¦3Ù‚¶á¡íðr º_Œ£ø]R##9gï}SÎwÙXµ-蚶®‘6Çjq/ñÍî¡diÙXøµx÷Œ&¬A'X0öYÿ³ ¿ÍýÑöÖ˜¿ÛþbÿKë_ÇüËv(ó٘㶣™ÆXõ6•]ÙªÃÙ;ÓêsG`Uf›Y?Õ6=· ·°ùšÜõÍËrËš×Ò}´îîæq¦& +µâ¨–ŒËi6©C#ÈÔ¥‚ŠD½Ùd u€´°Í£Fñ¾M7³H?&øÀûEPÏó Y=¥‘ïðáÒçj¯lŽ2¼ˆ½¤ùC±³; +£ì¸65©t¼þÜ¢ÊIô1(çÅa÷'•;ðw ·4V4Èu¯F\íB€%×0Æê÷„maG+Ãfw#üh°ŽA—ö¼“gë¨&o Â2®æ–WÏz´E‚ÒXÉC‘è%aœÒîoh¦3:ÏKCŸÒÞ±Hm[餽ý{‹g8¯+xdÊYùX- +;ši4ä°ÇuR ºBÃXìbÇÒÈ©Ž¥õæ¼ZüÐf ,hOƽHRWø\v¶¥*×϶Dy~€6¹|Ï!ñe\*ÍØ3’IæW--ÅQç½m5ãþjð–:æ†F·ËM<®Û¨{M÷ŽîNy¥éÓ*Ó¦7ôÑ«¨ÆD/B¡Ö Ek‹™²Xi%kˆÀ5¢Å× +©›!*ÏêéÛði‘®®ÖhýÿðP¿g‘g»G‰ÀÇý58ÐCBtH*³•ÊQýð°\(•^':a\_q¹uz½KËÛÀ¹¾"•«»`IÃ-ôÈ•=±ÞbgÜß)9×Ü‹§¼Ñ@)§Ñÿýâ•ÿ}«Žâ¸ïÿ™ÝÓ}èVw·{·÷!é´·wÒHâtÁÉhAØ°ó°A„$ŒuBÛu¿¤Æ IHl“IûxmÇÀ—[€iŸí»®›¤¯8¶›Rª`'ÏÄ®qyÔŽNýÏîžvœ¾6¯¯oïÞoæ?³³{sóŸ™ùÏÿwPwùÿS·– î‘œ»¶AÂ>kûÒZÇ2/³B¬Wb;ÞÁ­…$ÎÄnL¦)™D§>»ën·Ó¡zŒƒÔâÒæAj2ÆÒ“ A·(‰DLQ“Döø•X’®`([zά×SäqÅŠ”ÙÄ9ÁëS?¶;3°§®5°73ZJË…‚¿œé`õi_‡…éVsM¶ÊUftQâ‹l•﫱Èo´¼1 %sž‚?Câè9óÄPwIŽk~]7S¯$ þxùAm‰a êYðûu5¼«o#üvëŠ-4ª+ã+‹7?î#ýqEòû%É/‰\¦³Ô›uqY—³(žõ‘ Z±D³u¾ß!ç;A6€Dœš ‰¤^̉{ÅŸˆ¼xŠÂ>SIb¦:.„ÎëÜ‹ 0Ž?ÓÒü‰´‹kÈoà1~rf 4xWõ®Í¡O5ÿägt³W–…ÛI¦’Ô~YÏhf'"Ë8éOWçcÿW°…5ŽòO &SÜDí»)9|„Û'78DËGƒ ^ú9y‡|Hþù_ä¼ìØKŸ¦?¦œƒwB|(¢øT lâ›·ò·–óËý++Â+RëÉÝ|O ;ØîN=Èo ì’¿üÝÏ?°7xŒžä‡OŸ ?›ú;ù¥àò™à¯åá`M±\*×й&¸-¼-u@>)Ÿ¶ö¿)¿MÞ^¦É—ƒ>ǨÄ;æDd0/jûJBKpï1ioâ' ®?ñùeT šHìÖyªÉÃ8¨MX­Ó¤8ÆÆXèäÞu’C:%3ˆÓ¹[÷ÐTMJöÊòò:¡*áÐN1:OKøÊCÇÇPÆñ1“ñ·ä,n·±7e¦HrV‹ó°”n)ïJfc‘¬"e…¢¬;¦(‚à.Ê…HèÅ0aÇèUðxX«o k©šLX«LbPÅ ÁÀãË„³ÚšI$OêDŒíZP^FµÉÓ2”•£¬Õ¼¾ "Oj‚MY ýüãþ¬™ºêYt¤iZFOÖIü=Æ'è1Þ¯Çø0k¢ÌØ´@ãçl;l”ñ6¨í9ƘKíícïî Œ›ÑΨøщíâFÍçÙE]Ígjù Ù;Ì„?˜ºq‘¿½}Ó¦ëó®Ï4½` ‡c)GØÁ{¯,hÈ@ÌÎqIîŸãñÔŒB÷hÏñ¡žƒÆÜïÞy¤shÇf>Ͻ)BËF†É¸ºžúGÞ¡{ÆÒ.œo7à(m¥i;+|"›|Ë}´”ÙX*Ô5ä1ËÅ×´¾H^ôþHüQìÕø«é2/´z‚]*w#†N½P ê…NÉP JÍ’¬'‹¥”³±¬’LΦ³‰l<[=+ÛšmÌf²Y­@»HÖÖ&[î°e†HíQ¥uO‹—•2úE,&»Ý6 £`ìñØrØ5"7§ñú‘øž¤¨—‹íIÞá)¯3Ͷòðl—+âª.Ê?AìåvÜBx˜‘0ÂÞ«™íŒrÁè:킃.„¼Ã†G t ClÛj ÄŠW®!V0‰—ŽˆqŸc¶-Œy¸´yÆuÔ -îÂÈÇÈ.¼Íe Š(ct¨cwÑ1ŒWÿ1_Hðd†Fß>Œ±ñò7΀L¦Æ9Í)·ø¢Åb –:§ÍCÁç’ƒ3|øÊœÑ:3*¶´N-óµ´N-õ¢„A+sÕ&,ˆ¹Ê•i¸t†—­»Ól¡±hÆ­C£?8âõ3Ë÷4…x31šë>0¶'ó†ØǹëÅé^òp•ßƒ»ô÷Ù Øž?ž?©¿ÀòïF#©Š<œß—ðú¯Øû¬“”’òN6„~Å®&Èó;ì²`GMË¿dØ:ÙŽÓ[úf£y—øŒQå–8ªvæ?ËïÂQ•&ÏábBbH­bÁFÒè[(hÁ¤ÿT‹Ò|ižÚCz|[¥­ê£Ò£êqß)é„zZý™Z‚CSL‹¾´d¬i¢‚P7¶˜)U£Ÿ’èn5UÕR5θÖÖë{àIþPkÒ’Óp´Ùv.€N¿þÊ ÖI°N +ý’‘ÒŒrP»'™¬Ó) ju\•Òi%®úãqՇÈD H/ˆ>Ž¨Mt²¥Oi©?‰àˆ¦lé“ÈVOÎÖÔT—@tQ”öGÏFßc;ÓÌ"F¼óÚ[¿í¬í=[‘-ÜP}BŸÅu Ðpû&ïyœþ +F†q‹ÓÓr›£V?iÝfLÊ¡?`Åóq— Iïµ¥ío³£Ù ¦šéº×5ç 1º1ÿ@8²ÎÙD–“Å›Lf‘×_;òÎô¾W¦/¡ì87‹BÀ©OÎ é_];׋›£/p¿ÅÞ„_k®f"&Ž=5z „ÑËàžíGìuœÝÎsªKÖ»Ìl©Î#I^*—*RE(ñ B‰à¦%D¨›”xâªW)v»H;Ÿõ¸Z\9f¯ Ëí97q‡C[Æ™èÚLçá1ª‡éË,8Õ}J¡Æ¡9e¯qœ®ôg,Œ~ç«ÂúDŽÛÞ“ 1swg5’磑ûéÈvÚ¤û[Œ¹dlîæÜ4Èšôåùô…&¼„ìÌpÓù·`2ì:öšøšJí8É>m”Õ25EYó£Wµ>ÑËylWj-¸‰¢¡c 8Vj”´(Hž©uŸám \óŸ‰ÔÕ&b1å D¼ §?•”M¬œ” áKQ+A¡\Å ‚A}i8)@õ°XfjŠ¡e7ð¢_¤ºÂ<¶h›ÜŠuæ!Cg5+5¦=­ÜЙ©¨È˜êp–G•=GŸrR'Ð`§6µeD׫ ã Loµ­8qÁ6@ª +úJV™¾Ÿ†6™2M…Q$teÒ] >TŸâÂáE™9­ ¥Á`ifÖÖ%á°ÛUPßĤ§iÏ9Q 5ÌîÌïÒÕ'ùuõåw¡ú$Ñíäl¨Ëî–ìÄí=Çý;¶´$˜­•ÓRJ9Ø}£.q¯”Š]¥×¸=¸è¢ù ¬{.„K â½Ä|dÀËÚÀÇþ&iǧÙ#¯HG^ßïŒÊeáí—Ëåaþ­üíAw š"ÿl +X“7è9>lÖ¤Eó:D—°J¸‹/úžwãkž ’‹öçéëX—öÕø€ùê\Â`|5ˆÙ~㤯ý"ÿF(ˆ:éª_äß —ËQV$žŠú… 9d +¬÷Uүп×k2] N„?ÁÊÙùgˆóy +‡ÉE­ w,}G\¾sœ”ƒQ‘v£-.0S'¾åcc?|‚øò?+­ +Ç9þ­‘Ÿ§ãa— +Ÿ¾«ATÄ+8o¿oÀvÀ¾‘ppÞ PŒ ðâ3î ¢q@XàùK/–Q±ÒïSä'B¯„1.ÅkåGqˆEOT|÷†eˆóW¯¨¬¨ú@ +ïŸð&@ >{R óê ž и` +æ5aý¦ã}7͘q`f@ëV€›½·8æ˜ûU€Û°ÜÂwcÝ—| `)®T–~`™×Ä"ËoXñ€;W¬Äÿµ +Ûà.ü?«ñÿ¯ÅV[‹¿µn ëÖ}`Ã˱|ß#ýX‡`ó÷îÅûïÛ pàß|ÿ÷ÃXî‹X¿?íxäÛ|ö£«,üuógý&~jÁ‚ ,X°`Á‚ ,X°`Á‚ ,X°`Á‚ ,X°`Á‚ ,X°`Á‚ ,Xø¿ @t‹8&Fß*‚ßûáx[8œ®b·PâñúDɃ¡p¤´¬Ä ÜýzN+¦Pfaæ÷ê%jñÊL؈_c^7Þ?›õTÆ]Xú^ ;±${ÂL÷ê¹ +,Àø>Œ{õòˆAýÙ˜Æp7æå`ý£^ì©}úû–aªS¬& +,A©CO¿Ü‡¹uúýÙ=f ×é5îÓëÕ«—®}JI××7)K{º”¶\_nðþþ.¥57ПèìÍõÕ*37nT÷v÷ nVwm«³¶mþ¢­³jZs[z»tÝ·hIÛÒOŸi¦L*½›•ep £³ëžŽ»•Üú­ŠÒÛ§ âµe}½ƒ]Ê’ÁŽÁ.¼¹¯³.7 äðÊ€².·¥o½¹öØ Ú`>,Bå·â¤RsM§0ºÄ"TPÖÝÛW7êáÓß÷¿QòÿEçeup?MT˜ _Î^¼uNAÿj[Žó„ñn±•MØ™ÛúÑjOó8œ}úù«ÊÛ;Xüÿ¸=9jÿðküGŽL²ùGŸŸþK€áÑ‘ +endstream endobj 1908 0 obj <> endobj 1909 0 obj <> endobj 1910 0 obj <>stream +hÞ”Z @”Õö?ç~ß,,² ̌À: Ê&(ÊÈâF +*&ãCî•Šb®¥¦eŠš´<ëµZ=˲eÔJÔJ3}½£4Óz½ô¥¦Ï¤¬Ì6aþ¿û Ö{ÿÿûwÎ÷ÝåÜ{Ï=Û=G$&"-#…*ÊGed~}r÷ëèù à8£¦öûï6}J4ç"¾eâ¼¹¶;/¯LE½€HlJíÔ_.È(!2FúN½iá”çVÜz˜¨ÛíDÉ]¦M®™täëáï-œ„õr§¡#´.™+ÐNž6cî‚™VmC{.Qä7ÍšXÃ%OŸ"¶™ÈÙuFÍ‚ZS¸>ó±ÙfÖ̘œ=J9O4÷&"õãÚYusý1Bs¯‘ãµs&׶$ÍýŽPÐw3 õ 7ŽŒºuY”ĉڷB©¡)"R§5H]ªž `¿›cɪVlCÍ濬ži]‚µžSÝÄ{ŽÿH¤\¯Þ#w#E=*î¡|“”ë)‰È¼ ¾³äxk‹ß/Ždž‘(•´P©Õ^ä1tßi#Þ +­çCT@ɨ¢{12™ú1óxQI'© Œ„³'K¥W)Üÿ-mâlGrWÊ—u+9±î(zœÞ¥ù¼HýÊÿmc·òºj§êO‡E0…SEP:ö +ç¡Âª>‰+ÉK øV¥Zù‹ÿ^ÿeÒS?cí ƒD‚«o“™<´˜M˜‘Hsèyz‡Þ§fî¾+Zé1:ŽQß)ö´®ðoŸ²h(=@Û9[iV½:ò¿¾4êEµ´zw;ÝEÑ̹ÕoõÿLŠÇéFÒjz‰ÒÇœÅyœÏ Å1[œTæ+•3þrŠÃNN*Õx7V€Šst™Z8„#¹wçgEO1JÔ+c•çU»:D¥NQ¿Ò…·œl}Í¿Ö¿Åÿw€ÙKim -ÔÈ:Žã¾¼’[Äl¥\ +U Õào8M )´;ÜKOÒ>Pô!véÅãøÊgâ˜R­ªjõ¯þAþ©þOɺ\ài&åPºôM£hÝO›i¬ê8äw’SØÍ¥<”Çò®ã (ÆŠÅV±G]®nQßjýÉoñçùOa­> µ+yi:Õ¡¬¦‡i;í¦¿š/ p¿’«ÙËáMü4¢ŒR”Tjihíߺ¾õ_þ&è2CkzRÖ*§*K5àÛ"º•ÖÐ&z>À¹þ ^¢V¶òu|3?ÀGùÿ(\¢åNQ/^¯‰·ÄWÊ<å~ååå Nnm=êŸäŸçž¢ ÿ) óºÚ:æk«¯ ut7= ¿«íñ9¥oè¢&+•õꋹÚ3»VóTžÉwðZ~‘_ç7øþY¨B/Ì"J$ˆÑbª˜.n‡ÄßÅÏJw¥¯Ò'ݨüU9¤|ª:Õ>j‘êU©¨/¨ŸéH§×eê–ècŒïµìlÖZÝú¨uúR$%B]ÐÂàIº:= œ]:·À¢>§àÆúš¾ŽbdžÉÙ[1Oã%¼ŒWð(wñz~<ž·ò«|€òü)†ò+(O]„C¤ˆl‘'ú‹"1eˆ#ªÄd±@,ËÁÕ (ŠÇÅ“b“xY¼*ÞŠ³(—EÑ££­8• ¥—’©d)”AÊP¥ +eŠ²HY¢¬WîQv*?ª×ª“ÔÉê½êFhÏvõ¤nƒn¿îœÞ¬Ÿ­ùš‘4†:<\EY" ú8Otç{Àí.œAáÁùô.§Ñ?¨R,å5¢”Ï)oò« XϧD‰ù¾ûñVU¯‹RÍr%Ý8%Od‰·¸‰Š Å»•#â8Ÿ…Æß/Ò©«b„N ¢b¶MÙÉà }4Ž„ý[x´ðKÌñ´EF©Iqcÿ—y1Õ‰ëè‰pþŠªù0¯P<ÐÈïi9/ÉœžïSªÅ_y€pòFaé\AyüƒøŽgˆ•àçm5Å1xpºl;jÐQÓ¡Ã볡kàÕ8>›WC³]éæ”ßaº˜î+˜l¶PAzš­Ôaó,qØyìˆ*Ôו8<6_³V¦ÕÕ­aBÃnÇ [©eZ‰ÍÇ^[©oà¼iõ¥Þ¬·5$¸ØQ<98=¶‡ ‚š/ÖQ»•cû³V±¥}¶ +2š@•/ÞQRê‹s”H|Š³´f’¯bDUiI‚ÝîIOóqñDÇõ>rùÂ] +kÛøôÅ>ƒ¶mº<­±mMÛ[¿¶ÑL×{]¡““jÆWù”Ü#Â…}K|±‹NY~kbñÈâª;;Ž&(õ¥–é6Ù¬¯¿ÓæÛ8¢ªã¨]¾=¬¹Â9Ð[?[¯•\´d€I¾ª¨Â4OŸ ðÜn—R]Óè¦ëÑð-QhÛèú„mäÎpy|Â+Gö¶D–#ËÚG®L÷: ¾/i!l´Ï˜rånŽéT:­cþ—áÉñ²QŽ²c«l¥õÞ6Þ–U^Õ +Œç]k«ù:W) ¢­&mš8þ +²lT…úT'~zM“'5ŒPE­‡m}fïàÀÛl·ÿ—“ýä,íóÛ´62}}\W·û^Õ¾Š¼Ðz«)¢¬rl}}ðÕ¤«N‡Ïè„’A ,d4·@=l¨SA~¿ ‹ÖÐ9Ù|$CÃÔ9ñ]u1ÁnöH½ó™]Ùÿ_«èÿ°Š¶†ôO¾m…9ê súµ·Éé ÒêøÅ:}qXß\`¼XùÄÍ°}àZE•7¡Æ#MFþä>½Æ—Àú¡ÚRaÚfíX¶ç+wáóòÜ0){`Z‡+()lÒ7=Íi5[Š?ôHm²ya?Îú¼‡ÝÓè÷{¥;ô:á‚…×i“Ãõ^T¾QÝåhŠ-vìMñ`š"q‡»¤)ú Î’T,E¥S;7Â%Í–ŒÑU%Ø=`[›/d Þ<ÚeÇò¾Êî’8\°6/\{¨¾ +×Ø%R«D9}Ñ["´_䕽 +ÌØÿ°]€©¿ßn .¶úúÛÀzo}M£Ùõ›ÙQ¿S¯Œ¯¯-õ¶»ŒFÿ®5 ¾kq.ï4îw(¨h«ƒWØêæU£ÆVíDXf[UYµ YE±·È³5cU;mDn­W\é•-›lQC²Û„QJØé&Z¦ªZ‡ÖžØȤõÛû˜&6Š@ŸYëÓ®åÏúgZþŒì÷ ^ëýT²#§ëø(êAš*+øÊXôgÄù±È¼œ'ö‰­ˆ¸_@7‹»ò Ä£n:˜üŸl§3ˆ»w"w²"/YŒ}/=‹8;‘J¨™ËƒÈv!v¬£fzYÍ*Dø5t˜>ÔÐ>Äïq䧟¨Š³èr +BƹÚ?O @Ô•C¿P}Œìì²ÒÈØÖÐ~äsé¤ÿ$C¶uŒKÿ 9Á ä9ÍÈ x2§#-ÁÞ^¹ÖµCùëʾ¶2Wæ~‚Óʳˆ3'cýƒü-NZ#ùáߣD‹®8] ¤ÓÈ;Ÿ£9<góÑÔH/ú?ãþ<‘êd¦ó‡ÀXh»1þŒÏMq8ó-TÃ&š‰‚·>ûxµýð/ѧt êG¥x9ª_+£øªo0~@t‚·¹¥³ÿ%ìWŽŸÂü‡Á“Gñ®áÕô » Ó» —*ø¿©´–³YJéWÖþíךÏ㮚Hwòp΄'ƒû¡ЂÁô7ܱÇh/b¡¾Zy”­4wIgÿYØpoãíü7¾£ÖüoD<°°[1ˆc(n‘Ž?Kë¹XéƒècÿŠsæõ¸óÁºfòYab?ß&Æò3"“¿äSÜ$ºÁ‡„ðnÄ6úI‹ ºŠ ˆ ú)}Ä'ˆòDoyhÑÖÂŽ¿ˆ"EÁþ·#>XÎ8ó.îÇOâ¾X.R±g÷„Æ:x´© gàæâ[ø6x×û ~ÈoÇ‹•â3zR +¡Rÿk^F> ¼B·BC©3¢ªxÐoµ*üø0\¸ÀÍüÓY¸Š^?Ç!ûÐþ Ñg±¼‹8TáyÂLÔ‹8:Ñã2f£?ߧé:Ï31c#ý +­< wº3z4‚¦ f:Nr¶¬¸]ÒãdÓ(Ü zhÛ ìv:ÉQ8?rÍ€,Ÿ‡zømmv+V& +‘F§ŠîRè]MÀnŸàŽ Y¸oú}4ëw§Xê¦Å–çAwOìð$-…￈»w±Íš÷ð ò¶ÁÌ¢yÐÑyØý¢ü—pÑûŠIë“V$ýˆœ±zqÀ¹$´[ÅF`<«hépOZqÿ6a…qô -ÂÚûqf¢bXí_é4âÑ£Ú–a½'ž‹ÞW8°ñ¬¬eAŽÛimàðq%«=²·T%O‘{ý¡Ê}ÜUY­å¬óì(ÿBù!?ηÁ®¶òf့}»Ø*Þã}ü.G"~"î‡gÏâ׸ XŠ8ý?„ý"{£2d)“è ØÒë(G‘eOçD ë#Àï]š,OÓ,®†·ù'0‡r>}‡¬/·öe-Kn†Î톇±QlžÌ™!®à"ëß$TÁðÚ³x(\Æ_ˆNü~@$ +¢ÍoQšqŽÅðÛ-hçù‚ÁOÇoÇØwü# }FLJ€û>¿‰Û'”Ïð.Üݱæ½\Ç[Ïðµ8Õ‡ˆ¿‹Aãqúwä‡ôwøý Ú‚ y&¢«ÿXùC¸eK Á>ºt…îŒH{6"ïþˈkš€)3Õñü0îÒ 2Ï¥\ô‡¸÷ûvzñÀ+Ôì¿È·Ó>ÿçȪ2ý_€+€wx·`—7]ço¦môn„s°ˆf`@n°ÚýðµGá-·Ó+ n:7àæz pšßã§pÚž€½2/9b#¾ î÷OWöÁwnG2»½& ¼G\Ëç!óŸynÕq<™oÌ5ç9þ÷¶m ”oÛÊïìRyƒÏ£´kïÜÕȶò!óG´œó!D™ÕäÃ-Ôw¤,òl“aK7ášSj^TÌ£eAÆóòí—XA”ª{([تºSóËk …ÒzÎÒ”câ 8/–â–tó¸ kè_ˆKþÎ÷@kÞâÇ M¼ƒßnøàcšŸ¼ƒO`ÏÑ%úÙÒ*1_õìØæ‰ ¤LÂq2ð.” +ÇÛ hì¨dU¦ËŒw!`=@¡eÊ”íAa™îFeʶðÅ™;•j±dÛ$kø.±œX¹Îíø|’µ)±ÉÞÔ¥)¹)£©¼i|Ó÷Ʀ˜¦¤&kS×&WÓ ¦}MœëŽ069æ¬hÑ4²©²iº!|@Ž2›]‹mÇ ß |uäF­µ¥€Ç/j½Êh5#£A”W©¤Z€À¼Jê p*í#Ë €ŸRé .…J¹(WÔÈŒý@|! °° #¯XJËcKµÖ^À €Š+a - +Ç[¶ÊÕm½/N ÚHaÛ¨·­W‡`9D +L±dGFb­5ÐÈžmIµÖ\Å_¸»×Z÷UÔZ‡fÔZ{9j­]0`t)9¨‘bcrDFÝÂÄ(3‰Hùæ!Ú;I{Ç»ã'šŽO4½5ÑôÆDÓº‰¦Ê‰¦QM#'šºO45ò8wüÓÙ1¦cLCƘ +ǘòƘrƘ2ǘÒǘD°¡£ AŠ|ÕÞ½´wímåªm& +jäuÛÝk}•ÇÓ ±Eþ©W6wáöJTùë÷ƒv[§Ûeu|âTky"ªÛ¬.»öéø8dçëèì ì Þ »…œkàÝî\CÓ††ë ù††Þ††††n††TCCŠ¡Áih°¢Œ‘F³1Ìj 6z£jF2F5úO¸]òi£ôfùÑ«ò­ju³ í‰hÿ†+Ø(à/}”2Q6ªˆË|{'RÙõ6ߥQŽF1Ö§s±/²ŒÊ*‹,¾Þ®²Fƒ¤/ÏUæ ªWµ•ù.Z>±ª‘©²ª‘ý²ëŽù§ÉUêëä÷¶;Öy<3¯ÐRÙ?"`É¿yyÛޮߋ«ãSV±pYExcå-ÚûYwŒÁê3XŸ3X‡¬ƒ Ö~k¶ÁÚÓÐaÖ(ÌjÐf5h³´Y >CÃs††á††Á††~††lCCÇY–D߆²QU¾g=¾LYñ'zÊ|§FÙÆã\ƒÄ¨Ò’Ð:|=º ‰Ý×nY’°K%Þ¬a‡¢ÛÔ6”> }€‚-È¡0ù7ù¶!Ë’¾ö„]¼¹mÈŒîìñ›6”N/ üêæÞ\7·D¾ªù=«ô€u¤çè­›‹‡\u˜ µŠ«vá©&žëqÉòòï!êTÁaˆ²"ìN{„}ªJ—mÊÞËnnC›ºx‡ýÇÕ‹êóF‰¬¸Ç Ñ2 ŠbY¤ëÈùÑÙ‰uCLC"ÆÝ ÅÍA‹BŸÒ=cz&bSÜ¿tgCO›ÎF~}*1*ÆÒ-Âi¹Ñ<Å2×Rµ2Ñh IŠI6*áÉÔ)9Äm±†4ú÷ºS£ +C––g‡,¿!;#„«Cx}Èž¦ã!ß„øCô!ñÖ„d¨ÛC£ +å׊)Šœ¢È)Õ +—+K•õÊ¥I9®|£ø£—4a€Å5Ü|qÂlÉÂaÍÃÍ—&Ìž¨Sasa3GdeõêIe>Ó¨2ŸsÄX8ÓP]£ÿëmQ¶Îð`yx<<{Íž ë’’“™››•%ÔÔÌäÈœìG½^DGňš-'oÿÛ±Yïì«õÝU·rȦ×W^·ã™9{ì?ÚÄiïOi=½ùíÖú÷*·ó §·ölkýuõΤÿÛ>Ÿ+¸Ø½v%,?0Ä +0å—u.²2®óµ¶%–º„ÚÎsÕ^8lmç‡:?SòÃ5á“;×%‰"ËPw¥e”Õã;d’e–{®uþù×Ün½×ú®û’/?$D u{Üb›ƒ_äKÜ3pÏ`uéÀ¥ƒ×RrÓ»*}3Ât¤Œ´SxŒ©GZ×ÞýL쬚r²z_‰I®tv nT"· t%6*îxÓ5:Uä¬LO3öOve<±´/÷uç}—\ÖÈ ÝŠ’í«ÌîNOÜæ„BCüÈŸÆI\r k¹øCsKó¥‹4Æà×r©å"Dp1"26?2??"?o–- ½zΞM³ ¶Qæ glÕêç¿H‰€Îò¿ãúÏwËcáÜÞPLt”Á ×;¤ÈrRŠŽŠQcc0¢õ§¶÷˜¬Ì\‰žª•œìd ¨‹Bƒ#bÂ:©é†ÄNat«æ?úvA÷ÈzÍâ_VÎؘ¬OB¿’©OìÞI÷ðÝ3ö×ô)H]¹}ØpÖ¨Z«öÏ ‰ˆ4#>NŠ4ÂÊê^¼±¼[÷ìè¤iæ½9¿´¤§2ŸµÆG†:‡]{Û„{‡ô®°˜-Ö¼¼›î=߶ø*tÄ«,£4Êç§Ü£=Ì+  b¥á’ùàÛ½>é¥X…5ßÅJ¸4ñ|+®%]äPæ›{­2ˆà5g¡qnMï‡u÷6„¦ç3¢2©:%7ŸÓ‰Òº¥8“Å|w¸u°‰(É™åt&‡–§7*¶íöà`inÖ¨®…ÁŠ5ÿ{v–óãiœkWBb{Æeƺ#…±¼ÚÚÉn58c}‚Cg§7r¦;1¿†kè{§©<ùq§;$²°ÜYíœå|Ñ©:ãûÆKkŽ +-Ô¾‘!ør´;:Ë®×õÕúYzE×'Ùi.ÚÉŸ.b8[iÌP¦/]R«P»Øln¹xñâiŒ¹¨°å”Ë%µëT³¹ÚäÊh¹Ô|§®‡+ìVó~‹‹¤‚I0˜aº‚^=ùŠvU½™áÈiôÿãŠNÁǾÜË\$£™PÐm‰€Fä£ã‚;$"¿—„÷2›òÛ¼´‡'Є f϶÷nÓ/hWlohU*´ÐЦ’í:ª4Ï¡hcì­xâŽ~¸rÕ‚?]¨{ QéÑ¿®æíØ`SdâõÏW®¿[?ovç(»ý¦Ùw¿½p\õÄï/Zøà‚±«¯_l]ÞÇѳÀÞ)).}Iy|\ËGæè$~Â>aàØ#G×Hoó 4émhR.^Ž7‡æʃ¸ã «£GänÊÙûrÎÛ±ûíïu7Î +e®ø´^i™ù™«º=ØkSÒ¹ø¯z%u©·ï±ï颚ÜÁ…V›¶ÂW¬uG©z«=-D‚Åžm0—Ó÷F(Áöð`–Ê’ê+SÝØ5UŠ<Á–ï2wL|¥rajyjuêúÔ©ºÔø¼Îö ©t±À¡ s†(ϨÎXŸq"C͈ë=ï³vŸÞæÐ5~qT!àÔQ.6Opi iîkðç)ÉÿŠ×¼†&`9õ£]Zúv‰´ëUm¸¿náÆЈhØ}7C"8.Ø]¹fѱ•OÝëýtr\DXdÔ ÖÓ Ï¼3ù¡·o©Ù ˜òC":…E¼.m\f4–ô*š¾nÅcƒFDE„EEùæÃóm˜ãýÚ YÁ“%;)Äl;Ø Ծлcn‹ä{W¼H¾Ø¬Õ‚ƒA¨ËVˆlÝŠŠU¶(ˆB(Ôd1‡Ú‚m¡¶0›9?èç”P5î†ÙÝâŠKKùsô³‰:G-ÄfRt*Bù`¥ÀR2ÌR–8,e¤R¡VDUDŒ¹)qa⟜[â¾TPÍ£S¨Jª- úÅÉz{§d{‚ÁVNiaÒ'Ø “Ê“j“’Ž'é’⻥¦qšb/©Ž9£ÄÄuísm@˜¸NIa;uQbKD~F¹¥€¥½j7t»$_rDu‰ +ÚÿoÄ=íŒÂu}þ¥¸¸¨PµÑ1¯ýñtýNRýç^vt±‡véòÛ…AxBq•;h½emÜú”u©*Oðh×È•‡íÿ‹DG¥æjZbPW^Þ¬ìzl§ÃcÃL‘æ­çïj<î}äàÂç>¬Ô©º¯á—>üˆÕ¼z[¿ìðNá‘æ^ÕŸnžu`ýøwÉ6ÕWyv=ìò8‘nŒz†rè´{pgc\~¼áùA ú´?¹6¹^OxÝ¥§hÊìJ]#º%ä%¼ÒýÍŸèLiœoΉŒ‹7÷°¤§q‹1(4Ü—¾Ã:(ȨLÒ½GZ§1'™ã£ÌæxcP°³ÜÚ¨$¹­Ý쉙“dé¡7çv7›»Ä÷æiåṉ̃æÜ`³4DéûÌf®5³9.w—á{èJ`Ï;ìb ¤÷¥¬š÷RaÁ°–\ìpÄ¿9_W8˜ä„Ù,Y«Ø®Ï®9Ĭ¬NŽ¶Šv.jG—ƒ öÌX­-ŽÜÇšÿk™%ßïÞ÷Šü¼’{pý¬e½#¬Cä=Sfß–À«;ýûÖÜF}æÿÿ•VÕkµZ=-­+¿$K–mI±«ñb6j'qˆ/‰å8NR%-„†çQz$wz@{z¤q€s¹–ÐÌq3m§tz}LI©2¹¦m¤tßwmâzæ¦sÓ‘ìïÿÞõú{þ¾omS8¬±”z‰äX^ Aܹaoä,NAãÞÔµÓÀÀØÜÊ·ÒÍ`s1ÔŽ}>Ô@Üñ‹×ÀA˜! -¤I‘†‹˜BÖˆ°5ñ…öïÇtYÓÒ–®vM23‚V·ì¨ß‘¾?±·ýHÐÐL%RÉçÏ%_oÕƒ¡H9̧!øÒFÆDb ö2&“ `œè¢B’‘(¬ó +vÀqvkp<6µ…õB®³©ÇM’$`IX%Ü/ì´Â‹ÔÛh!r‚™¹¢á,ñ¬G²Ø–•²ÅìÎìo²tvÿ¶`Ì n!Ç,ü©Aã²ÐJ3¤;3W.„Å‚d6³ÛšŒÓ²Ðwؼõ³¯òtTç +°$T92e¯M£øµócgÂßâG/WÞBLåW(®¶½ò–j‰èÃc‡P¢òîT _órå<@¸_¢ªœŸ=¹yLŒÒ¶§L)kJ(˜º­A¦I´uâmª6ˆÞJ‰ªâ¸‰™.P£.±PÜz %c?F¬õ„úæHxü =¹{Õå¿"šs¶÷ ¹5»ÿ¿8²öoŸ_ÿƒò®«ö~æ²G¶=Yþý#Ô±‡eõøàÐK’«ê9›3ˆû–Æ–|pè[m8º{å§{¶|õª­ûÊxbÇ# ÛqÈ«>¼_V¸¢ÍöbƒÀ`sÛ<(ŠjQ#Š=ö(˳¾öH{[±Ç×ék[g\çû]›«±×ë~(4ZÚA×ÒEds‚ÿsz¼>Å”cñdKk›2í01FE‹úP=[OÅcõQ1"ïö¡… Òm­0~!ØÁ"ŠLã +^ŒÅ6i!BÁ°Voç¸X,Îø$›Iüöy%†hP33Ä™û™ýL…Ñ1¾¼(µNãõ:já¶TÛPÛcmZx +ëÁEÛ¾0D`°uŽ‘ñ}ž…/å{¹\³‡@1Hĵê­l>?ÏŸ¿‚" Tea ŠéU?‘½+Í9 Øÿñ†ªÔ ck¿rím÷éŠCDÖeYâC›èGVܲgó…k'ÇI§}»ôþÊž]ëj„Òo眆Æå¾ô†Ž;J¿œ]Ñ^Â)>ã(È;HÛ!öcç!DWN,ËOWNxµF§WëužrÒf ëàŠÔ,f£ŽÖ*2Òú½ðàD‚v˜Ð´À;yžwRø€Mk|‹_«3[>ÐàäYê%üÄ×V¤A:ÆIáLh%'-±¼›0¼ ¢…¹·û•¤Iú‚‡pÂûÆ ì¹5‚lçüzGþ|¾$;uŧ+Ë3gݸrú€ÆE",±T½¸Àq‘ŸÏJGóÕäÍIñŸñ¥²;÷_úà{~g$LÛô£ò¼3ßsôú*ð\ó  –û¥tŸ]ó‘¡ŽX€ÇÉÙYÂ]LHسCس{‚ÈÇzì,~‰:Žìx=bE.àb%vœ}Œ=ÎÒ¬× ÁÏ˃¨7•ÔCáÑÀÌ™ø3æ3bì/ûåßÏÿEß>§hÜû›.Ò+Œð;¾±h©&S&ƒÙ`5úÌ c›±»ÆZãó…jâ5MÁ„?émóv³œâQgXòÍž!KIô%Éì™9µÚôÄ ¤§a@@Ôlþê1°¥x~1q­˜=ÛünüU4oeðÏZú˜CJn<îqåø”5ª†{@Íñ8äÄ… Õ¿¿‡4aÒÄI“&M7iÐtå»ÄÙHÒºéVûˆÚÇÔ>£ö]$S ÃÀC²é0iâ¤É°àкHÓÍ +9¸ë©)>GýtYÆ%ÿÜ©'Ã}qØÕx¡×ýÉ¥‹b~Œ»},µ£÷¶E—®ÖÝÒà#á}÷is±dkçÊí½Äˆ÷Ý«]TŸhé½n›¼ûs²Ö³GÞÒ¬¾jKOwO÷È2ÞSzžX:õ÷v{f±¿þÆÒ÷åé¼£­PÓ¸N™^àì0š?0 ~`!¾ä ++ÎhL ‚4^Á»ð#ý Àˆ…ŠÄ‚\ÐÆÙhZ×£»;rgÛÃk¢‰ÇIýïhÃDÐþ8¬^ˆt2Öpà=  }ØæÇ~‚2¯„˜f€fš:1%ƒ‹E3:—jû\ÛÛ¾+#‹µsÈâÌ»¥wK‚ +b xš¸PW½³ºªTåTCÿGºðgC[Íؾën¹Þ,Ëó-Òôn¢× ]s×Ýã"ˆUyï¼~É®QÞWúõ‡Âíìê¹­töâhF¡_@¦ÿ8HØ‚üè'‡ +™š‰ßeÏÑ öÜ:?¾Ù|3{ ¿Õÿ0µÇø´éiûaÓaû1Ó1û/éÿöX]5ýæ~VÃð´ÿZz¥î:÷~¿Ý¿°æ?¯ù-QºÖ³ƒÞᾃ¾‡¿Ã³Ëÿþ=Ïy¿ÉF&gX¯çŒČÔ{“¡Ÿà Kš75”ƘKËe\§Ë/*¨˜!wWN#Oåô”ÃUsX©ÊÎByÈóÀ_Z»R9Ê<&…ó¬Âv«\7ÿôo<†Ý÷ÿÓûÊoߺííÏî~òó+ž ïñÛ±íËßÝwgùݯ¬¸ã§Å[Ÿ¸é©ënÿ:Å_”oÕ~øV‹Zðk…qFð ÷c;q̼¿l~¡þP╤A¤ÄÄöúgâÚGSo¦(.aNMõ‰d`©°´y-Ú†v¡ûêïÿÚcÜ=iy2ð´póƸ7Ö ä„…õ£ÂÂ)nN™-ätyýA1—“³Z̪ÔF‚B€ÇH°/U§E‹ø@@¨Eº&°‚º0crº¬w •i ë?·*ƒô;õÔ¸~¿žÒûÚ,H„¬î¼øN@Ó +;÷ è$yB†ûº€·U°Ó8à)9ÐÈøæx~€}”FÏË51¥š—ë`³±„„Sv“8òê«JáÓªŠòEÔR9 ™ÙɃq±Á7[!é\ùÂÕhˆòj¯E ΉNò‚¼ØeËQK.Àúí) X·•¸ýSg{—Eî VØå +6¾ÃKp\G¦,öŽ½7šuÚŠ"Èù‰5~¤9úKèð[¡U¯L>ùZùàl|Ým3EÂeÇo>)—ð}±õ‰Ï,Ÿ}B³ú¡Áëþý¡×ˇÿµ¬ÓÙ0D›SÐ."†X2`Ý“[-ÿáñ›¯{¼îší(Ž;!Üë™í09´¼1êÆ£íÑhõECÑò:ÊŠZÍ à˜-!hlðv8®ÁËëðyl0q×sEËîËNîîiîeîuŽq88Œ0…ø0"F—Ú‹<Ø_ãqòÕÅÚ0Š7ÔFE2ƒ}§±Ó6«Îl`ôñ¼ FyQŒÖJÀA’ ¬÷° kN©&"Õø±©!*²‰ÕãUz¬÷%ò+ºÅ&†—‰ƒ…x›$Ÿ<°JM6«ø?ÏžPjàCôOÊ¥™AR(PÕJ~[ã_<×ؼdv²ßüÐíʯ[ê?û1EêpâÛ»º6…\ŒÙVÓìiÿ—™Õx’„ÓÒ&? +¿¾gŸâ_ßØ»üÓ>gHï}+Ÿ)§‰OµÛøõIÏIý± |ê˜öK(ƒÙB¬‰µåZ-¸)Ôº,t8ñ»jiÓ$c2eš¢bÆdÄ°1áî=džSjZã)dãµF ã¸NÌ6$DV;Œ<¬‡òø4¢a†1›†£QјÉH £É$‰ÆDÂ(Š:Z‰Ú‹¬HIâ*àí4µã…¬8ž…`G(ªàpûð{šãyÜ ³Ÿ“¡Ú‘÷É3JË’‚èæ™9þ³¥<; õbÇ4?=¶»•)7ç›­à—à9Ù!ƒ…ÁÏS˜¯ök.®kª/&̯‘-j>pXK Ü¾^3tí÷.q[¬œwñÃÅ¡ÏÞ¥Û. f_F~ ¦Õ¬fA!h]é{>%µ†-ÖÉ5E}“Wú‚T31·ß‘—];XÚ&°´3šÕ¨‡:V¸Ú ¢”DÍ(…ZØF¶‰M°I¶™M±-l+ÛfãÎîÓ&0³lÐ%‚‚ÒÙtoz»øCÄNÛ§Åcöc¢ö!ûÐ3TØ›!™Ú›a•.KäcÚ›á`' ”= ,ê©œ.ìâ +‘‚DK®¥)i‰Ô9DßàZÑ8´d¨³H]«‹KŠ;];»ÓoGgÒïEßk<›v£.í=\”³‘(›Iãl$,E$‡ÄI^¯Ñ&±’Â’ÑÀ¤¥úEµRTŠ75e¥iñ%:s\¢¹øÖfÆæ£lj2}®áE|`³4~¬ÀÁÒ9šœ¡å34¦IÝÈblÃALþ݉sáESÙsK`ë…žsY×$—=LA8iâαñö.Qb8Xð è[š)̓žû,½{’%S2&†M’3gH T쌜–À‡Tlpõ¼=È +𺊰Ôê_è[©þ¥­Qkö¥Ê`è$VN«%øAÒ©~žÔsäÂÍaY¹o¼°,Û öV"¯, è‚ÜÀ‘®ˆ ÀD;i"!›·ƒm°º;°š¨¦ @f9ÚÈ=Q„ƒ&Ž¬'=«Î1ùØ=p÷ŒÇLrŒßLYrRüµZrQŸ‹²vèY9áÿã£39Šá‹Æó€%˜Æ(Ë{³ELžµ9eE'jà>Q» ÀåYb\÷–ß/ßt¯ 6íç9+Ó€¿SþM„5‡Ã'å*÷È[øšµ~g8rÂo0sÞZ|´|?m7)pçÊßV §Õ§Óâ͸Og7ñA¹´Yþ5øoVžXjL`“BùVÚ 6™Å +Ä ;ÃÛœ¶C­Ž Ñ­tþ^‹<Ÿ52V;§ÆªÞ`×øCµµujIÛÖl¥’Í­™¬RŠéeŒ³o Hd» ÒvjNÆëëjÉ^"Øçà<'@|Ãe!ÈÕÖñp[â92&9™¿®9iå§ñ¿Me¥:è +¡Z¢l-®õµsG‹Ð=`+³x±{¼ˆ»ÑSaëïPBœò¶âüfùµ…\ÈÉZRÿú —Û=/ûöÈ©‰pX/—.ñ ¬ÆÈ]AÿäA/C²šªÊ+C u—ôò9äÖ<‹ðÖ(@TÀõÑJþ_„ŠÂÔ¢7½~§Ýë=áb™pxü[øÄø¬8¬¦TIw»¼QöËpÈ ±p¬ÅgÖ³ þ’DP%o­Ñiß?:‡Šæþwºá¯ƒðç“æ¹OFtY!ýc +÷"dⲬDÈÖ‡ûÒ‡d‡}ç×rßç›Õ +ù¦pç|ŠøŠFªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*ý% Qäß0áÃ# aý_Z²óVºPêë¿ô²¥IË®¸r9º +]Ë×ýÿøhÑ*™+,ðE‹$´ £5h£ 4‰nªT`wvum”W?S©T~qñ—Êß?þhªœý“Ï`EÏ*çàó7³× =z f³wÍà”:&ÿÅ;¢Žµ0þ¼:ÖÁøËêXÖàCDÒZ#¹'åWÇÕQ_PDzR_WÇÔNVÇZ¿£Žu¨]SÇð<šÕè))§à«F+ÐzàJ  "ŽçÈJ'Ì&`LÚaX•O$açSÀÅÐ_ k7Âõ“h‹<~Noƒv-œ$wØ +óQy5„.‡~;ô£òùa IùÞka}ôh¬ѺOð\ä®cò•ë®‚Ù(ÌÈ“„@ú“òÙõ'Áj³|‡|ïõꮑŸxL~®Qùtò©Pk*ÕZ±~$4P+NÞ4>ê,NŒ'†'G‹cÉЧ6n ]9zãúÉ-¡+G¶ŒLlY›¸lÙå}KâÅ­£#—l_¶<Ñ?9¼qtÍÀŠOº§.†`54º%4šœ^;²ixbC¨¸îcŸ/4:š„½«ÆF'GÖ†–OOŽÀÅck›‹¡"ìL„Ö·ŽM­·$ÿ‚º1€.CË@#úпHS=YR#×Ý;eíøó®I ~YÚag \³â/~Ý_…Þƒ×OdìGï <ú"¢ÁÛ°píuà¾\ÚÏ‚Qâío¼ú·‘ŸÙòïŒÙu}uÙÞ§Iô¯h¬l+}Gw£œ$¾Kömÿ#À¡3» +endstream endobj 1911 0 obj <> endobj 1912 0 obj <> endobj 1913 0 obj <> endobj 1914 0 obj <> endobj 1915 0 obj <> endobj 1916 0 obj <> endobj 1917 0 obj <> endobj 1918 0 obj <> endobj 1919 0 obj <> endobj 1920 0 obj <> endobj 1921 0 obj <> endobj 1922 0 obj <> endobj 1923 0 obj <> endobj 1924 0 obj <> endobj 1925 0 obj <> endobj 1926 0 obj <> endobj 1927 0 obj <> endobj 1928 0 obj <> endobj 1929 0 obj <> endobj 1930 0 obj <> endobj 1931 0 obj <> endobj 1932 0 obj <> endobj 1933 0 obj <> endobj 1934 0 obj <> endobj 1935 0 obj <> endobj 1936 0 obj <> endobj 1937 0 obj <> endobj 1938 0 obj <> endobj 1939 0 obj <> endobj 1940 0 obj <> endobj 1941 0 obj <> endobj 1942 0 obj <> endobj 1943 0 obj <> endobj 1944 0 obj <> endobj 1945 0 obj <> endobj 1946 0 obj <> endobj 1947 0 obj <> endobj 1948 0 obj <> endobj 1949 0 obj <> endobj 1950 0 obj <> endobj 1951 0 obj <> endobj 1952 0 obj <> endobj 1953 0 obj <> endobj 1954 0 obj <> endobj 1955 0 obj <> endobj 1956 0 obj <> endobj 1957 0 obj <> endobj 1958 0 obj <> endobj 1959 0 obj <> endobj 1960 0 obj <> endobj 1961 0 obj <> endobj 1962 0 obj <> endobj 1963 0 obj <> endobj 1964 0 obj <> endobj 1965 0 obj <> endobj 1966 0 obj <> endobj 1967 0 obj <> endobj 1968 0 obj <> endobj 1969 0 obj <> endobj 1970 0 obj <> endobj 1971 0 obj <> endobj 1972 0 obj <> endobj 1973 0 obj <> endobj 1974 0 obj <> endobj 1975 0 obj <> endobj 1976 0 obj <> endobj 1977 0 obj <> endobj 1978 0 obj <> endobj 1979 0 obj <> endobj 1980 0 obj <> endobj 1981 0 obj <> endobj 1982 0 obj <> endobj 1983 0 obj <> endobj 1984 0 obj <> endobj 1985 0 obj <> endobj 1986 0 obj <> endobj 1987 0 obj <> endobj 1988 0 obj <> endobj 1989 0 obj <> endobj 1990 0 obj <> endobj 1991 0 obj <> endobj 1992 0 obj <> endobj 1993 0 obj <> endobj 1994 0 obj <> endobj 1995 0 obj <> endobj 1996 0 obj <> endobj 1997 0 obj <> endobj 1998 0 obj <> endobj 1999 0 obj <> endobj 2000 0 obj <> endobj 2001 0 obj <> endobj 2002 0 obj <> endobj 2003 0 obj <> endobj 2004 0 obj <> endobj 2005 0 obj <> endobj 2006 0 obj <> endobj 2007 0 obj <> endobj 2008 0 obj <> endobj 2009 0 obj <> endobj 2010 0 obj <> endobj 2011 0 obj <> endobj 2012 0 obj <> endobj 2013 0 obj <> endobj 2014 0 obj <> endobj 2015 0 obj <> endobj 2016 0 obj <> endobj 2017 0 obj <> endobj 2018 0 obj <> endobj 2019 0 obj <> endobj 2020 0 obj <> endobj 2021 0 obj <> endobj 2022 0 obj <> endobj 2023 0 obj <> endobj 2024 0 obj <> endobj 2025 0 obj <> endobj 2026 0 obj <> endobj 2027 0 obj <> endobj 2028 0 obj <> endobj 2029 0 obj <> endobj 2030 0 obj <> endobj 2031 0 obj <> endobj 2032 0 obj <> endobj 2033 0 obj <> endobj 2034 0 obj <> endobj 2035 0 obj <> endobj 2036 0 obj <> endobj 2037 0 obj <> endobj 2038 0 obj <> endobj 2039 0 obj <> endobj 2040 0 obj <> endobj 2041 0 obj <> endobj 2042 0 obj <> endobj 2043 0 obj <> endobj 2044 0 obj <> endobj 2045 0 obj <> endobj 2046 0 obj <> endobj 2047 0 obj <> endobj 2048 0 obj <> endobj 2049 0 obj <> endobj 2050 0 obj <> endobj 2051 0 obj <> endobj 2052 0 obj <> endobj 2053 0 obj <> endobj 2054 0 obj <> endobj 2055 0 obj <> endobj 2056 0 obj <> endobj 2057 0 obj <> endobj 2058 0 obj <> endobj 2059 0 obj <> endobj 2060 0 obj <> endobj 2061 0 obj <> endobj 2062 0 obj <> endobj 2063 0 obj <> endobj 2064 0 obj <> endobj 2065 0 obj <> endobj 2066 0 obj <> endobj 2067 0 obj <> endobj 2068 0 obj <> endobj 2069 0 obj <> endobj 2070 0 obj <> endobj 2071 0 obj <> endobj 2072 0 obj <> endobj 2073 0 obj <> endobj 2074 0 obj <> endobj 2075 0 obj <> endobj 2076 0 obj <> endobj 2077 0 obj <> endobj 2078 0 obj <> endobj 2079 0 obj <> endobj 2080 0 obj <> endobj 2081 0 obj <> endobj 2082 0 obj <> endobj 2083 0 obj <> endobj 2084 0 obj <> endobj 2085 0 obj <> endobj 2086 0 obj <> endobj 2087 0 obj <> endobj 2088 0 obj <> endobj 2089 0 obj <> endobj 2090 0 obj <> endobj 2091 0 obj <> endobj 2092 0 obj <> endobj 2093 0 obj <> endobj 2094 0 obj <> endobj 2095 0 obj <> endobj 2096 0 obj <> endobj 2097 0 obj <> endobj 2098 0 obj <> endobj 2099 0 obj <> endobj 2100 0 obj <> endobj 2101 0 obj <> endobj 2102 0 obj <> endobj 2103 0 obj <> endobj 2104 0 obj <> endobj 2105 0 obj <> endobj 2106 0 obj <> endobj 2107 0 obj <> endobj 2108 0 obj <> endobj 2109 0 obj <> endobj 2110 0 obj <> endobj 2111 0 obj <> endobj 2112 0 obj <> endobj 2113 0 obj <> endobj 2114 0 obj <> endobj 2115 0 obj <> endobj 2116 0 obj <> endobj 2117 0 obj <> endobj 2118 0 obj <> endobj 2119 0 obj <> endobj 2120 0 obj <> endobj 2121 0 obj <> endobj 2122 0 obj <> endobj 2123 0 obj <> endobj 2124 0 obj <> endobj 2125 0 obj <> endobj 2126 0 obj <> endobj 2127 0 obj <> endobj 2128 0 obj <> endobj 2129 0 obj <> endobj 2130 0 obj <> endobj 2131 0 obj <> endobj 2132 0 obj <> endobj 2133 0 obj <> endobj 2134 0 obj <> endobj 2135 0 obj <> endobj 2136 0 obj <> endobj 2137 0 obj <> endobj 2138 0 obj <> endobj 2139 0 obj <> endobj 2140 0 obj <> endobj 2141 0 obj <> endobj 2142 0 obj <> endobj 2143 0 obj <> endobj 2144 0 obj <> endobj 2145 0 obj <> endobj 2146 0 obj <> endobj 2147 0 obj <> endobj 2148 0 obj <> endobj 2149 0 obj <> endobj 2150 0 obj <> endobj 2151 0 obj <> endobj 2152 0 obj <> endobj 2153 0 obj <> endobj 2154 0 obj <> endobj 2155 0 obj <> endobj 2156 0 obj <> endobj 2157 0 obj <> endobj 2158 0 obj <> endobj 2159 0 obj <> endobj 2160 0 obj <> endobj 2161 0 obj <> endobj 2162 0 obj <> endobj 2163 0 obj <> endobj 2164 0 obj <> endobj 2165 0 obj <> endobj 2166 0 obj <> endobj 2167 0 obj <> endobj 2168 0 obj <> endobj 2169 0 obj <> endobj 2170 0 obj <> endobj 2171 0 obj <> endobj 2172 0 obj <> endobj 2173 0 obj <> endobj 2174 0 obj <> endobj 2175 0 obj <> endobj 2176 0 obj <> endobj 2177 0 obj <> endobj 2178 0 obj <> endobj 2179 0 obj <> endobj 2180 0 obj <> endobj 2181 0 obj <> endobj 2182 0 obj <> endobj 2183 0 obj <> endobj 2184 0 obj <> endobj 2185 0 obj <> endobj 2186 0 obj <> endobj 2187 0 obj <> endobj 2188 0 obj <> endobj 2189 0 obj <> endobj 2190 0 obj <> endobj 2191 0 obj <> endobj 2192 0 obj <> endobj 2193 0 obj <> endobj 2194 0 obj <> endobj 2195 0 obj <> endobj 2196 0 obj <> endobj 2197 0 obj <> endobj 2198 0 obj <> endobj 2199 0 obj <> endobj 2200 0 obj <> endobj 2201 0 obj <> endobj 2202 0 obj <> endobj 2203 0 obj <> endobj 2204 0 obj <> endobj 2205 0 obj <> endobj 2206 0 obj <> endobj 2207 0 obj <> endobj 2208 0 obj <> endobj 2209 0 obj <> endobj 2210 0 obj <> endobj 2211 0 obj <> endobj 2212 0 obj <> endobj 2213 0 obj <> endobj 2214 0 obj <> endobj 2215 0 obj <> endobj 2216 0 obj <> endobj 2217 0 obj <> endobj 2218 0 obj <> endobj 2219 0 obj <> endobj 2220 0 obj <> endobj 2221 0 obj <> endobj 2222 0 obj <> endobj 2223 0 obj <> endobj 2224 0 obj <> endobj 2225 0 obj <> endobj 2226 0 obj <> endobj 2227 0 obj <> endobj 2228 0 obj <> endobj 2229 0 obj <> endobj 2230 0 obj <> endobj 2231 0 obj <> endobj 2232 0 obj <> endobj 2233 0 obj <> endobj 2234 0 obj <> endobj 2235 0 obj <> endobj 2236 0 obj <> endobj 2237 0 obj <> endobj 2238 0 obj <> endobj 2239 0 obj <> endobj 2240 0 obj <> endobj 2241 0 obj <> endobj 2242 0 obj <> endobj 2243 0 obj <> endobj 2244 0 obj <> endobj 2245 0 obj <> endobj 2246 0 obj <> endobj 2247 0 obj <> endobj 2248 0 obj <> endobj 2249 0 obj <> endobj 2250 0 obj <> endobj 2251 0 obj <> endobj 2252 0 obj <> endobj 2253 0 obj <> endobj 2254 0 obj <> endobj 2255 0 obj <> endobj 2256 0 obj <> endobj 2257 0 obj <> endobj 2258 0 obj <> endobj 2259 0 obj <> endobj 2260 0 obj <> endobj 2261 0 obj <> endobj 2262 0 obj <> endobj 2263 0 obj <> endobj 2264 0 obj <> endobj 2265 0 obj <> endobj 2266 0 obj <> endobj 2267 0 obj <> endobj 2268 0 obj <> endobj 2269 0 obj <> endobj 2270 0 obj <> endobj 2271 0 obj <> endobj 2272 0 obj <> endobj 2273 0 obj <> endobj 2274 0 obj <> endobj 2275 0 obj <> endobj 2276 0 obj <> endobj 2277 0 obj <> endobj 2278 0 obj <> endobj 2279 0 obj <> endobj 2280 0 obj <> endobj 2281 0 obj <> endobj 2282 0 obj <> endobj 2283 0 obj <> endobj 2284 0 obj <> endobj 2285 0 obj <> endobj 2286 0 obj <> endobj 2287 0 obj <> endobj 2288 0 obj <> endobj 2289 0 obj <> endobj 2290 0 obj <> endobj 2291 0 obj <> endobj 2292 0 obj <> endobj 2293 0 obj <> endobj 2294 0 obj <> endobj 2295 0 obj <> endobj 2296 0 obj <> endobj 2297 0 obj <> endobj 2298 0 obj <> endobj 2299 0 obj <> endobj 2300 0 obj <> endobj 2301 0 obj <> endobj 2302 0 obj <> endobj 2303 0 obj <> endobj 2304 0 obj <> endobj 2305 0 obj <> endobj 2306 0 obj <> endobj 2307 0 obj <> endobj 2308 0 obj <> endobj 2309 0 obj <> endobj 2310 0 obj <> endobj 2311 0 obj <> endobj 2312 0 obj <> endobj 2313 0 obj <> endobj 2314 0 obj <> endobj 2315 0 obj <> endobj 2316 0 obj <> endobj 2317 0 obj <> endobj 2318 0 obj <> endobj 2319 0 obj <> endobj 2320 0 obj <> endobj 2321 0 obj <> endobj 2322 0 obj <> endobj 2323 0 obj <> endobj 2324 0 obj <> endobj 2325 0 obj <> endobj 2326 0 obj <> endobj 2327 0 obj <> endobj 2328 0 obj <> endobj 2329 0 obj <> endobj 2330 0 obj <> endobj 2331 0 obj <> endobj 2332 0 obj <> endobj 2333 0 obj <> endobj 2334 0 obj <> endobj 2335 0 obj <> endobj 2336 0 obj <> endobj 2337 0 obj <> endobj 2338 0 obj <> endobj 2339 0 obj <> endobj 2340 0 obj <> endobj 2341 0 obj <> endobj 2342 0 obj <> endobj 2343 0 obj <> endobj 2344 0 obj <> endobj 2345 0 obj <> endobj 2346 0 obj <> endobj 2347 0 obj <> endobj 2348 0 obj <> endobj 2349 0 obj <> endobj 2350 0 obj <> endobj 2351 0 obj <> endobj 2352 0 obj <> endobj 2353 0 obj <> endobj 2354 0 obj <> endobj 2355 0 obj <> endobj 2356 0 obj <> endobj 2357 0 obj <> endobj 2358 0 obj <> endobj 2359 0 obj <> endobj 2360 0 obj <> endobj 2361 0 obj <> endobj 2362 0 obj <> endobj 2363 0 obj <> endobj 2364 0 obj <> endobj 2365 0 obj <> endobj 2366 0 obj <> endobj 2367 0 obj <> endobj 2368 0 obj <> endobj 2369 0 obj <> endobj 2370 0 obj <> endobj 2371 0 obj <> endobj 2372 0 obj <> endobj 2373 0 obj <> endobj 2374 0 obj <> endobj 2375 0 obj <> endobj 2376 0 obj <> endobj 2377 0 obj <> endobj 2378 0 obj <> endobj 2379 0 obj <> endobj 2380 0 obj <> endobj 2381 0 obj <> endobj 2382 0 obj <> endobj 2383 0 obj <> endobj 2384 0 obj <> endobj 2385 0 obj <> endobj 2386 0 obj <> endobj 2387 0 obj <> endobj 2388 0 obj <> endobj 2389 0 obj <> endobj 2390 0 obj <> endobj 2391 0 obj <> endobj 2392 0 obj <> endobj 2393 0 obj <> endobj 2394 0 obj <> endobj 2395 0 obj <> endobj 2396 0 obj <> endobj 2397 0 obj <> endobj 2398 0 obj <> endobj 2399 0 obj <> endobj 2400 0 obj <> endobj 2401 0 obj <> endobj 2402 0 obj <> endobj 2403 0 obj <> endobj 2404 0 obj <> endobj 2405 0 obj <> endobj 2406 0 obj <> endobj 2407 0 obj <> endobj 2408 0 obj <> endobj 2409 0 obj <> endobj 2410 0 obj <> endobj 2411 0 obj <> endobj 2412 0 obj <> endobj 2413 0 obj <> endobj 2414 0 obj <> endobj 2415 0 obj <> endobj 2416 0 obj <> endobj 2417 0 obj <> endobj 2418 0 obj <> endobj 2419 0 obj <> endobj 2420 0 obj <> endobj 2421 0 obj <> endobj 2422 0 obj <> endobj 2423 0 obj <> endobj 2424 0 obj <> endobj 2425 0 obj <> endobj 2426 0 obj <> endobj 2427 0 obj <> endobj 2428 0 obj <> endobj 2429 0 obj <> endobj 2430 0 obj <> endobj 2431 0 obj <> endobj 2432 0 obj <> endobj 2433 0 obj <> endobj 2434 0 obj <> endobj 2435 0 obj <> endobj 2436 0 obj <> endobj 2437 0 obj <> endobj 2438 0 obj <> endobj 2439 0 obj <> endobj 2440 0 obj <> endobj 2441 0 obj <> endobj 2442 0 obj <> endobj 2443 0 obj <> endobj 2444 0 obj <> endobj 2445 0 obj <> endobj 2446 0 obj <> endobj 2447 0 obj <> endobj 2448 0 obj <> endobj 2449 0 obj <> endobj 2450 0 obj <> endobj 2451 0 obj <> endobj 2452 0 obj <> endobj 2453 0 obj <> endobj 2454 0 obj <> endobj 2455 0 obj <> endobj 2456 0 obj <> endobj 2457 0 obj <> endobj 2458 0 obj <> endobj 2459 0 obj <> endobj 2460 0 obj <> endobj 2461 0 obj <> endobj 2462 0 obj <> endobj 2463 0 obj <> endobj 2464 0 obj <> endobj 2465 0 obj <> endobj 2466 0 obj <> endobj 2467 0 obj <> endobj 2468 0 obj <> endobj 2469 0 obj <> endobj 2470 0 obj <> endobj 2471 0 obj <> endobj 2472 0 obj <> endobj 2473 0 obj <> endobj 2474 0 obj <> endobj 2475 0 obj <> endobj 2476 0 obj <> endobj 2477 0 obj <> endobj 2478 0 obj <> endobj 2479 0 obj <> endobj 2480 0 obj <> endobj 2481 0 obj <> endobj 2482 0 obj <> endobj 2483 0 obj <> endobj 2484 0 obj <> endobj 2485 0 obj <> endobj 2486 0 obj <> endobj 2487 0 obj <> endobj 2488 0 obj <> endobj 2489 0 obj <> endobj 2490 0 obj <> endobj 2491 0 obj <> endobj 2492 0 obj <> endobj 2493 0 obj <> endobj 2494 0 obj <> endobj 2495 0 obj <> endobj 2496 0 obj <> endobj 2497 0 obj <> endobj 2498 0 obj <> endobj 2499 0 obj <> endobj 2500 0 obj <> endobj 2501 0 obj <> endobj 2502 0 obj <> endobj 2503 0 obj <> endobj 2504 0 obj <> endobj 2505 0 obj <> endobj 2506 0 obj <> endobj 2507 0 obj <> endobj 2508 0 obj <> endobj 2509 0 obj <> endobj 2510 0 obj <> endobj 2511 0 obj <> endobj 2512 0 obj <> endobj 2513 0 obj <> endobj 2514 0 obj <> endobj 2515 0 obj <> endobj 2516 0 obj <> endobj 2517 0 obj <> endobj 2518 0 obj <> endobj 2519 0 obj <> endobj 2520 0 obj <> endobj 2521 0 obj <> endobj 2522 0 obj <> endobj 2523 0 obj <> endobj 2524 0 obj <> endobj 2525 0 obj <> endobj 2526 0 obj <> endobj 2527 0 obj <> endobj 2528 0 obj <> endobj 2529 0 obj <> endobj 2530 0 obj <> endobj 2531 0 obj <> endobj 2532 0 obj <> endobj 2533 0 obj <> endobj 2534 0 obj <> endobj 2535 0 obj <> endobj 2536 0 obj <> endobj 2537 0 obj <> endobj 2538 0 obj <> endobj 2539 0 obj <> endobj 2540 0 obj <> endobj 2541 0 obj <> endobj 2542 0 obj <> endobj 2543 0 obj <> endobj 2544 0 obj <> endobj 2545 0 obj <> endobj 2546 0 obj <> endobj 2547 0 obj <> endobj 2548 0 obj <> endobj 2549 0 obj <> endobj 2550 0 obj <> endobj 2551 0 obj <> endobj 2552 0 obj <> endobj 2553 0 obj <> endobj 2554 0 obj <> endobj 2555 0 obj <> endobj 2556 0 obj <> endobj 2557 0 obj <> endobj 2558 0 obj <> endobj 2559 0 obj <> endobj 2560 0 obj <> endobj 2561 0 obj <> endobj 2562 0 obj <> endobj 2563 0 obj <> endobj 2564 0 obj <> endobj 2565 0 obj <> endobj 2566 0 obj <> endobj 2567 0 obj <> endobj 2568 0 obj <> endobj 2569 0 obj <> endobj 2570 0 obj <> endobj 2571 0 obj <> endobj 2572 0 obj <> endobj 2573 0 obj <> endobj 2574 0 obj <> endobj 2575 0 obj <> endobj 2576 0 obj <> endobj 2577 0 obj <> endobj 2578 0 obj <> endobj 2579 0 obj <> endobj 2580 0 obj <> endobj 2581 0 obj <> endobj 2582 0 obj <> endobj 2583 0 obj <> endobj 2584 0 obj <> endobj 2585 0 obj <> endobj 2586 0 obj <> endobj 2587 0 obj <> endobj 2588 0 obj <> endobj 2589 0 obj <> endobj 2590 0 obj <> endobj 2591 0 obj <> endobj 2592 0 obj <> endobj 2593 0 obj <> endobj 2594 0 obj <> endobj 2595 0 obj <> endobj 2596 0 obj <> endobj 2597 0 obj <> endobj 2598 0 obj <> endobj 2599 0 obj <> endobj 2600 0 obj <> endobj 2601 0 obj <> endobj 2602 0 obj <> endobj 2603 0 obj <> endobj 2604 0 obj <> endobj 2605 0 obj <> endobj 2606 0 obj <> endobj 2607 0 obj <> endobj 2608 0 obj <> endobj 2609 0 obj <> endobj 2610 0 obj <> endobj 2611 0 obj <> endobj 2612 0 obj <> endobj 2613 0 obj <> endobj 2614 0 obj <> endobj 2615 0 obj <> endobj 2616 0 obj <> endobj 2617 0 obj <> endobj 2618 0 obj <> endobj 2619 0 obj <> endobj 2620 0 obj <> endobj 2621 0 obj <> endobj 2622 0 obj <> endobj 2623 0 obj <> endobj 2624 0 obj <> endobj 2625 0 obj <> endobj 2626 0 obj <> endobj 2627 0 obj <> endobj 2628 0 obj <> endobj 2629 0 obj <> endobj 2630 0 obj <> endobj 2631 0 obj <> endobj 2632 0 obj <> endobj 2633 0 obj <> endobj 2634 0 obj <> endobj 2635 0 obj <> endobj 2636 0 obj <> endobj 2637 0 obj <> endobj 2638 0 obj <> endobj 2639 0 obj <> endobj 2640 0 obj <> endobj 2641 0 obj <> endobj 2642 0 obj <> endobj 2643 0 obj <> endobj 2644 0 obj <> endobj 2645 0 obj <> endobj 2646 0 obj <> endobj 2647 0 obj <> endobj 2648 0 obj <> endobj 2649 0 obj <> endobj 2650 0 obj <> endobj 2651 0 obj <> endobj 2652 0 obj <> endobj 2653 0 obj <> endobj 2654 0 obj <> endobj 2655 0 obj <> endobj 2656 0 obj <> endobj 2657 0 obj <> endobj 2658 0 obj <> endobj 2659 0 obj <> endobj 2660 0 obj <> endobj 2661 0 obj <> endobj 2662 0 obj <> endobj 2663 0 obj <> endobj 2664 0 obj <> endobj 2665 0 obj <> endobj 2666 0 obj <> endobj 2667 0 obj <> endobj 2668 0 obj <> endobj 2669 0 obj <> endobj 2670 0 obj <> endobj 2671 0 obj <> endobj 2672 0 obj <> endobj 2673 0 obj <> endobj 2674 0 obj <> endobj 2675 0 obj <> endobj 2676 0 obj <> endobj 2677 0 obj <> endobj 2678 0 obj <> endobj 2679 0 obj <> endobj 2680 0 obj <> endobj 2681 0 obj <> endobj 2682 0 obj <> endobj 2683 0 obj <> endobj 2684 0 obj <> endobj 2685 0 obj <> endobj 2686 0 obj <> endobj 2687 0 obj <> endobj 2688 0 obj <> endobj 2689 0 obj <> endobj 2690 0 obj <> endobj 2691 0 obj <> endobj 2692 0 obj <> endobj 2693 0 obj <> endobj 2694 0 obj <> endobj 2695 0 obj <> endobj 2696 0 obj <> endobj 2697 0 obj <> endobj 2698 0 obj <> endobj 2699 0 obj <> endobj 2700 0 obj <> endobj 2701 0 obj <> endobj 2702 0 obj <> endobj 2703 0 obj <> endobj 2704 0 obj <> endobj 2705 0 obj <> endobj 2706 0 obj <> endobj 2707 0 obj <> endobj 2708 0 obj <> endobj 2709 0 obj <> endobj 2710 0 obj <> endobj 2711 0 obj <> endobj 2712 0 obj <> endobj 2713 0 obj <> endobj 2714 0 obj <> endobj 2715 0 obj <> endobj 2716 0 obj <> endobj 2717 0 obj <> endobj 2718 0 obj <> endobj 2719 0 obj <> endobj 2720 0 obj <> endobj 2721 0 obj <> endobj 2722 0 obj <> endobj 2723 0 obj <> endobj 2724 0 obj <> endobj 2725 0 obj <> endobj 2726 0 obj <> endobj 2727 0 obj <> endobj 2728 0 obj <> endobj 2729 0 obj <> endobj 2730 0 obj <> endobj 2731 0 obj <> endobj 2732 0 obj <> endobj 2733 0 obj <> endobj 2734 0 obj <> endobj 2735 0 obj <> endobj 2736 0 obj <> endobj 2737 0 obj <> endobj 2738 0 obj <> endobj 2739 0 obj <> endobj 2740 0 obj <> endobj 2741 0 obj <> endobj 2742 0 obj <> endobj 2743 0 obj <> endobj 2744 0 obj <> endobj 2745 0 obj <> endobj 2746 0 obj <> endobj 2747 0 obj <> endobj 2748 0 obj <> endobj 2749 0 obj <> endobj 2750 0 obj <> endobj 2751 0 obj <> endobj 2752 0 obj <> endobj 2753 0 obj <> endobj 2754 0 obj <> endobj 2755 0 obj <> endobj 2756 0 obj <> endobj 2757 0 obj <> endobj 2758 0 obj <> endobj 2759 0 obj <> endobj 2760 0 obj <> endobj 2761 0 obj <> endobj 2762 0 obj <> endobj 2763 0 obj <> endobj 2764 0 obj <> endobj 2765 0 obj <> endobj 2766 0 obj <> endobj 2767 0 obj <> endobj 2768 0 obj <> endobj 2769 0 obj <> endobj 2770 0 obj <> endobj 2771 0 obj <> endobj 2772 0 obj <> endobj 2773 0 obj <> endobj 2774 0 obj <> endobj 2775 0 obj <> endobj 2776 0 obj <> endobj 2777 0 obj <> endobj 2778 0 obj <> endobj 2779 0 obj <> endobj 2780 0 obj <> endobj 2781 0 obj <> endobj 2782 0 obj <> endobj 2783 0 obj <> endobj 2784 0 obj <> endobj 2785 0 obj <> endobj 2786 0 obj <> endobj 2787 0 obj <> endobj 2788 0 obj <> endobj 2789 0 obj <> endobj 2790 0 obj <> endobj 2791 0 obj <> endobj 2792 0 obj <> endobj 2793 0 obj <> endobj 2794 0 obj <> endobj 2795 0 obj <> endobj 2796 0 obj <> endobj 2797 0 obj <> endobj 2798 0 obj <> endobj 2799 0 obj <> endobj 2800 0 obj <> endobj 2801 0 obj <> endobj 2802 0 obj <> endobj 2803 0 obj <> endobj 2804 0 obj <> endobj 2805 0 obj <> endobj 2806 0 obj <> endobj 2807 0 obj <> endobj 2808 0 obj <> endobj 2809 0 obj <> endobj 2810 0 obj <> endobj 2811 0 obj <> endobj 2812 0 obj <> endobj 2813 0 obj <> endobj 2814 0 obj <> endobj 2815 0 obj <> endobj 2816 0 obj <> endobj 2817 0 obj <> endobj 2818 0 obj <> endobj 2819 0 obj <> endobj 2820 0 obj <> endobj 2821 0 obj <> endobj 2822 0 obj <> endobj 2823 0 obj <> endobj 2824 0 obj <> endobj 2825 0 obj <> endobj 2826 0 obj <> endobj 2827 0 obj <> endobj 2828 0 obj <> endobj 2829 0 obj <> endobj 2830 0 obj <> endobj 2831 0 obj <> endobj 2832 0 obj <> endobj 2833 0 obj <> endobj 2834 0 obj <> endobj 2835 0 obj <> endobj 2836 0 obj <> endobj 2837 0 obj <> endobj 2838 0 obj <> endobj 2839 0 obj <> endobj 2840 0 obj <> endobj 2841 0 obj <> endobj 2842 0 obj <> endobj 2843 0 obj <> endobj 2844 0 obj <> endobj 2845 0 obj <> endobj 2846 0 obj <> endobj 2847 0 obj <> endobj 2848 0 obj <> endobj 2849 0 obj <> endobj 2850 0 obj <> endobj 2851 0 obj <> endobj 2852 0 obj <> endobj 2853 0 obj <> endobj 2854 0 obj <> endobj 2855 0 obj <> endobj 2856 0 obj <> endobj 2857 0 obj <> endobj 2858 0 obj <> endobj 2859 0 obj <> endobj 2860 0 obj <> endobj 2861 0 obj <> endobj 2862 0 obj <> endobj 2863 0 obj <> endobj 2864 0 obj <> endobj 2865 0 obj <> endobj 2866 0 obj <> endobj 2867 0 obj <> endobj 2868 0 obj <> endobj 2869 0 obj <> endobj 2870 0 obj <> endobj 2871 0 obj <> endobj 2872 0 obj <> endobj 2873 0 obj <> endobj 2874 0 obj <> endobj 2875 0 obj <> endobj 2876 0 obj <> endobj 2877 0 obj <> endobj 2878 0 obj <> endobj 2879 0 obj <> endobj 2880 0 obj <> endobj 2881 0 obj <> endobj 2882 0 obj <> endobj 2883 0 obj <> endobj 2884 0 obj <> endobj 2885 0 obj <> endobj 2886 0 obj <> endobj 2887 0 obj <> endobj 2888 0 obj <> endobj 2889 0 obj <> endobj 2890 0 obj <> endobj 2891 0 obj <> endobj 2892 0 obj <> endobj 2893 0 obj <> endobj 2894 0 obj <> endobj 2895 0 obj <> endobj 2896 0 obj <> endobj 2897 0 obj <> endobj 2898 0 obj <> endobj 2899 0 obj <> endobj 2900 0 obj <> endobj 2901 0 obj <> endobj 2902 0 obj <> endobj 2903 0 obj <> endobj 2904 0 obj <> endobj 2905 0 obj <> endobj 2906 0 obj <> endobj 2907 0 obj <> endobj 2908 0 obj <> endobj 2909 0 obj <> endobj 2910 0 obj <> endobj 2911 0 obj <> endobj 2912 0 obj <> endobj 2913 0 obj <> endobj 2914 0 obj <> endobj 2915 0 obj <> endobj 2916 0 obj <> endobj 2917 0 obj <> endobj 2918 0 obj <> endobj 2919 0 obj <> endobj 2920 0 obj <> endobj 2921 0 obj <> endobj 2922 0 obj <> endobj 2923 0 obj <> endobj 2924 0 obj <> endobj 2925 0 obj <> endobj 2926 0 obj <> endobj 2927 0 obj <> endobj 2928 0 obj <> endobj 2929 0 obj <> endobj 2930 0 obj <> endobj 2931 0 obj <> endobj 2932 0 obj <> endobj 2933 0 obj <> endobj 2934 0 obj <> endobj 2935 0 obj <> endobj 2936 0 obj <> endobj 2937 0 obj <> endobj 2938 0 obj <> endobj 2939 0 obj <> endobj 2940 0 obj <> endobj 2941 0 obj <> endobj 2942 0 obj <> endobj 2943 0 obj <> endobj 2944 0 obj <> endobj 2945 0 obj <> endobj 2946 0 obj <> endobj 2947 0 obj <> endobj 2948 0 obj <> endobj 2949 0 obj <> endobj 2950 0 obj <> endobj 2951 0 obj <> endobj 2952 0 obj <> endobj 2953 0 obj <> endobj 2954 0 obj <> endobj 2955 0 obj <> endobj 2956 0 obj <> endobj 2957 0 obj <> endobj 2958 0 obj <> endobj 2959 0 obj <> endobj 2960 0 obj <> endobj 2961 0 obj <> endobj 2962 0 obj <> endobj 2963 0 obj <> endobj 2964 0 obj <> endobj 2965 0 obj <> endobj 2966 0 obj <> endobj 2967 0 obj <> endobj 2968 0 obj <> endobj 2969 0 obj <> endobj 2970 0 obj <> endobj 2971 0 obj <> endobj 2972 0 obj <> endobj 2973 0 obj <> endobj 2974 0 obj <> endobj 2975 0 obj <> endobj 2976 0 obj <> endobj 2977 0 obj <> endobj 2978 0 obj <> endobj 2979 0 obj <> endobj 2980 0 obj <> endobj 2981 0 obj <> endobj 2982 0 obj <> endobj 2983 0 obj <> endobj 2984 0 obj <> endobj 2985 0 obj <> endobj 2986 0 obj <> endobj 2987 0 obj <> endobj 2988 0 obj <> endobj 2989 0 obj <> endobj 2990 0 obj <> endobj 2991 0 obj <> endobj 2992 0 obj <> endobj 2993 0 obj <> endobj 2994 0 obj <> endobj 2995 0 obj <> endobj 2996 0 obj <> endobj 2997 0 obj <> endobj 2998 0 obj <> endobj 2999 0 obj <> endobj 3000 0 obj <> endobj 3001 0 obj <> endobj 3002 0 obj <> endobj 3003 0 obj <> endobj 3004 0 obj <> endobj 3005 0 obj <> endobj 3006 0 obj <> endobj 3007 0 obj <> endobj 3008 0 obj <> endobj 3009 0 obj <> endobj 3010 0 obj <> endobj 3011 0 obj <> endobj 3012 0 obj <> endobj 3013 0 obj <> endobj 3014 0 obj <> endobj 3015 0 obj <> endobj 3016 0 obj <> endobj 3017 0 obj <> endobj 3018 0 obj <> endobj 3019 0 obj <> endobj 3020 0 obj <> endobj 3021 0 obj <> endobj 3022 0 obj <> endobj 3023 0 obj <> endobj 3024 0 obj <> endobj 3025 0 obj <> endobj 3026 0 obj <> endobj 3027 0 obj <> endobj 3028 0 obj <> endobj 3029 0 obj <> endobj 3030 0 obj <> endobj 3031 0 obj <> endobj 3032 0 obj <> endobj 3033 0 obj <> endobj 3034 0 obj <> endobj 3035 0 obj <> endobj 3036 0 obj <> endobj 3037 0 obj <> endobj 3038 0 obj <> endobj 3039 0 obj <> endobj 3040 0 obj <> endobj 3041 0 obj <> endobj 3042 0 obj <> endobj 3043 0 obj <> endobj 3044 0 obj <> endobj 3045 0 obj <> endobj 3046 0 obj <> endobj 3047 0 obj <> endobj 3048 0 obj <> endobj 3049 0 obj <> endobj 3050 0 obj <> endobj 3051 0 obj <> endobj 3052 0 obj <> endobj 3053 0 obj <> endobj 3054 0 obj <> endobj 3055 0 obj <> endobj 3056 0 obj <> endobj 3057 0 obj <> endobj 3058 0 obj <> endobj 3059 0 obj <> endobj 3060 0 obj <> endobj 3061 0 obj <> endobj 3062 0 obj <> endobj 3063 0 obj <> endobj 3064 0 obj <> endobj 3065 0 obj <> endobj 3066 0 obj <> endobj 3067 0 obj <> endobj 3068 0 obj <> endobj 3069 0 obj <> endobj 3070 0 obj <> endobj 3071 0 obj <> endobj 3072 0 obj <> endobj 3073 0 obj <> endobj 3074 0 obj <> endobj 3075 0 obj <> endobj 3076 0 obj <> endobj 3077 0 obj <> endobj 3078 0 obj <> endobj 3079 0 obj <> endobj 3080 0 obj <> endobj 3081 0 obj <> endobj 3082 0 obj <> endobj 3083 0 obj <> endobj 3084 0 obj <> endobj 3085 0 obj <> endobj 3086 0 obj <> endobj 3087 0 obj <> endobj 3088 0 obj <> endobj 3089 0 obj <> endobj 3090 0 obj <> endobj 3091 0 obj <> endobj 3092 0 obj <> endobj 3093 0 obj <> endobj 3094 0 obj <> endobj 3095 0 obj <> endobj 3096 0 obj <> endobj 3097 0 obj <> endobj 3098 0 obj <> endobj 3099 0 obj <> endobj 3100 0 obj <> endobj 3101 0 obj <> endobj 3102 0 obj <> endobj 3103 0 obj <> endobj 3104 0 obj <> endobj 3105 0 obj <> endobj 3106 0 obj <> endobj 3107 0 obj <> endobj 3108 0 obj <> endobj 3109 0 obj <> endobj 3110 0 obj <> endobj 3111 0 obj <> endobj 3112 0 obj <> endobj 3113 0 obj <> endobj 3114 0 obj <> endobj 3115 0 obj <> endobj 3116 0 obj <> endobj 3117 0 obj <> endobj 3118 0 obj <> endobj 3119 0 obj <> endobj 3120 0 obj <> endobj 3121 0 obj <> endobj 3122 0 obj <> endobj 3123 0 obj <> endobj 3124 0 obj <> endobj 3125 0 obj <> endobj 3126 0 obj <> endobj 3127 0 obj <> endobj 3128 0 obj <> endobj 3129 0 obj <> endobj 3130 0 obj <> endobj 3131 0 obj <> endobj 3132 0 obj <> endobj 3133 0 obj <> endobj 3134 0 obj <> endobj 3135 0 obj <> endobj 3136 0 obj <> endobj 3137 0 obj <> endobj 3138 0 obj <> endobj 3139 0 obj <> endobj 3140 0 obj <> endobj 3141 0 obj <> endobj 3142 0 obj <> endobj 3143 0 obj <> endobj 3144 0 obj <> endobj 3145 0 obj <> endobj 3146 0 obj <> endobj 3147 0 obj <> endobj 3148 0 obj <> endobj 3149 0 obj <> endobj 3150 0 obj <> endobj 3151 0 obj <> endobj 3152 0 obj <> endobj 3153 0 obj <> endobj 3154 0 obj <> endobj 3155 0 obj <> endobj 3156 0 obj <> endobj 3157 0 obj <> endobj 3158 0 obj <> endobj 3159 0 obj <> endobj 3160 0 obj <> endobj 3161 0 obj <> endobj 3162 0 obj <> endobj 3163 0 obj <> endobj 3164 0 obj <> endobj 3165 0 obj <> endobj 3166 0 obj <> endobj 3167 0 obj <> endobj 3168 0 obj <> endobj 3169 0 obj <> endobj 3170 0 obj <> endobj 3171 0 obj <> endobj 3172 0 obj <> endobj 3173 0 obj <> endobj 3174 0 obj <> endobj 3175 0 obj <> endobj 3176 0 obj <> endobj 3177 0 obj <> endobj 3178 0 obj <> endobj 3179 0 obj <> endobj 3180 0 obj <> endobj 3181 0 obj <> endobj 3182 0 obj <> endobj 3183 0 obj <> endobj 3184 0 obj <> endobj 3185 0 obj <> endobj 3186 0 obj <> endobj 3187 0 obj <> endobj 3188 0 obj <> endobj 3189 0 obj <> endobj 3190 0 obj <> endobj 3191 0 obj <> endobj 3192 0 obj <> endobj 3193 0 obj <> endobj 3194 0 obj <> endobj 3195 0 obj <> endobj 3196 0 obj <> endobj 3197 0 obj <> endobj 3198 0 obj <> endobj 3199 0 obj <> endobj 3200 0 obj <> endobj 3201 0 obj <> endobj 3202 0 obj <> endobj 3203 0 obj <> endobj 3204 0 obj <> endobj 3205 0 obj <> endobj 3206 0 obj <> endobj 3207 0 obj <> endobj 3208 0 obj <> endobj 3209 0 obj <> endobj 3210 0 obj <> endobj 3211 0 obj <> endobj 3212 0 obj <> endobj 3213 0 obj <> endobj 3214 0 obj <> endobj 3215 0 obj <> endobj 3216 0 obj <> endobj 3217 0 obj <> endobj 3218 0 obj <> endobj 3219 0 obj <> endobj 3220 0 obj <> endobj 3221 0 obj <> endobj 3222 0 obj <> endobj 3223 0 obj <> endobj 3224 0 obj <> endobj 3225 0 obj <> endobj 3226 0 obj <> endobj 3227 0 obj <> endobj 3228 0 obj <> endobj 3229 0 obj <> endobj 3230 0 obj <> endobj 3231 0 obj <> endobj 3232 0 obj <> endobj 3233 0 obj <> endobj 3234 0 obj <> endobj 3235 0 obj <> endobj 3236 0 obj <> endobj 3237 0 obj <> endobj 3238 0 obj <> endobj 3239 0 obj <> endobj 3240 0 obj <> endobj 3241 0 obj <> endobj 3242 0 obj <> endobj 3243 0 obj <> endobj 3244 0 obj <> endobj 3245 0 obj <> endobj 3246 0 obj <> endobj 3247 0 obj <> endobj 3248 0 obj <> endobj 3249 0 obj <> endobj 3250 0 obj <> endobj 3251 0 obj <> endobj 3252 0 obj <> endobj 3253 0 obj <> endobj 3254 0 obj <> endobj 3255 0 obj <> endobj 3256 0 obj <> endobj 3257 0 obj <> endobj 3258 0 obj <> endobj 3259 0 obj <> endobj 3260 0 obj <> endobj 3261 0 obj <> endobj 3262 0 obj <> endobj 3263 0 obj <> endobj 3264 0 obj <> endobj 3265 0 obj <> endobj 3266 0 obj <> endobj 3267 0 obj <> endobj 3268 0 obj <> endobj 3269 0 obj <> endobj 3270 0 obj <> endobj 3271 0 obj <> endobj 3272 0 obj <> endobj 3273 0 obj <> endobj 3274 0 obj <> endobj 3275 0 obj <> endobj 3276 0 obj <> endobj 3277 0 obj <> endobj 3278 0 obj <> endobj 3279 0 obj <> endobj 3280 0 obj <> endobj 3281 0 obj <> endobj 3282 0 obj <> endobj 3283 0 obj <> endobj 3284 0 obj <> endobj 3285 0 obj <> endobj 3286 0 obj <> endobj 3287 0 obj <> endobj 3288 0 obj <> endobj 3289 0 obj <> endobj 3290 0 obj <> endobj 3291 0 obj <> endobj 3292 0 obj <> endobj 3293 0 obj <> endobj 3294 0 obj <> endobj 3295 0 obj <> endobj 3296 0 obj <> endobj 3297 0 obj <> endobj 3298 0 obj <> endobj 3299 0 obj <> endobj 3300 0 obj <> endobj 3301 0 obj <> endobj 3302 0 obj <> endobj 3303 0 obj <> endobj 3304 0 obj <> endobj 3305 0 obj <> endobj 3306 0 obj <> endobj 3307 0 obj <> endobj 3308 0 obj <> endobj 3309 0 obj <> endobj 3310 0 obj <> endobj 3311 0 obj <> endobj 3312 0 obj <> endobj 3313 0 obj <> endobj 3314 0 obj <> endobj 3315 0 obj <> endobj 3316 0 obj <> endobj 3317 0 obj <> endobj 3318 0 obj <> endobj 3319 0 obj <> endobj 3320 0 obj <> endobj 3321 0 obj <> endobj 3322 0 obj <> endobj 3323 0 obj <> endobj 3324 0 obj <> endobj 3325 0 obj <> endobj 3326 0 obj <> endobj 3327 0 obj <> endobj 3328 0 obj <> endobj 3329 0 obj <> endobj 3330 0 obj <> endobj 3331 0 obj <> endobj 3332 0 obj <> endobj 3333 0 obj <> endobj 3334 0 obj <> endobj 3335 0 obj <> endobj 3336 0 obj <> endobj 3337 0 obj <> endobj 3338 0 obj <> endobj 3339 0 obj <> endobj 3340 0 obj <> endobj 3341 0 obj <> endobj 3342 0 obj <> endobj 3343 0 obj <> endobj 3344 0 obj <> endobj 3345 0 obj <> endobj 3346 0 obj <> endobj 3347 0 obj <> endobj 3348 0 obj <> endobj 3349 0 obj <> endobj 3350 0 obj <> endobj 3351 0 obj <> endobj 3352 0 obj <> endobj 3353 0 obj <> endobj 3354 0 obj <> endobj 3355 0 obj <> endobj 3356 0 obj <> endobj 3357 0 obj <> endobj 3358 0 obj <> endobj 3359 0 obj <> endobj 3360 0 obj <> endobj 3361 0 obj <> endobj 3362 0 obj <> endobj 3363 0 obj <> endobj 3364 0 obj <> endobj 3365 0 obj <> endobj 3366 0 obj <> endobj 3367 0 obj <> endobj 3368 0 obj <> endobj 3369 0 obj <> endobj 3370 0 obj <> endobj 3371 0 obj <> endobj 3372 0 obj <> endobj 3373 0 obj <> endobj 3374 0 obj <> endobj 3375 0 obj <> endobj 3376 0 obj <> endobj 3377 0 obj <> endobj 3378 0 obj <> endobj 3379 0 obj <> endobj 3380 0 obj <> endobj 3381 0 obj <> endobj 3382 0 obj <> endobj 3383 0 obj <> endobj 3384 0 obj <> endobj 3385 0 obj <> endobj 3386 0 obj <> endobj 3387 0 obj <> endobj 3388 0 obj <> endobj 3389 0 obj <> endobj 3390 0 obj <> endobj 3391 0 obj <> endobj 3392 0 obj <> endobj 3393 0 obj <> endobj 3394 0 obj <> endobj 3395 0 obj <> endobj 3396 0 obj <> endobj 3397 0 obj <> endobj 3398 0 obj <> endobj 3399 0 obj <> endobj 3400 0 obj <> endobj 3401 0 obj <> endobj 3402 0 obj <> endobj 3403 0 obj <> endobj 3404 0 obj <> endobj 3405 0 obj <> endobj 3406 0 obj <> endobj 3407 0 obj <> endobj 3408 0 obj <> endobj 3409 0 obj <> endobj 3410 0 obj <> endobj 3411 0 obj <> endobj 3412 0 obj <> endobj 3413 0 obj <> endobj 3414 0 obj <> endobj 3415 0 obj <> endobj 3416 0 obj <> endobj 3417 0 obj <> endobj 3418 0 obj <> endobj 3419 0 obj <> endobj 3420 0 obj <> endobj 3421 0 obj <> endobj 3422 0 obj <> endobj 3423 0 obj <> endobj 3424 0 obj <> endobj 3425 0 obj <> endobj 3426 0 obj <> endobj 3427 0 obj <> endobj 3428 0 obj <> endobj 3429 0 obj <> endobj 3430 0 obj <> endobj 3431 0 obj <> endobj 3432 0 obj <> endobj 3433 0 obj <> endobj 3434 0 obj <> endobj 3435 0 obj <> endobj 3436 0 obj <> endobj 3437 0 obj <> endobj 3438 0 obj <> endobj 3439 0 obj <> endobj 3440 0 obj <> endobj 3441 0 obj <> endobj 3442 0 obj <> endobj 3443 0 obj <> endobj 3444 0 obj <> endobj 3445 0 obj <> endobj 3446 0 obj <> endobj 3447 0 obj <> endobj 3448 0 obj <> endobj 3449 0 obj <> endobj 3450 0 obj <> endobj 3451 0 obj <> endobj 3452 0 obj <> endobj 3453 0 obj <> endobj 3454 0 obj <> endobj 3455 0 obj <> endobj 3456 0 obj <> endobj 3457 0 obj <> endobj 3458 0 obj <> endobj 3459 0 obj <> endobj 3460 0 obj <> endobj 3461 0 obj <> endobj 3462 0 obj <> endobj 3463 0 obj <> endobj 3464 0 obj <> endobj 3465 0 obj <> endobj 3466 0 obj <> endobj 3467 0 obj <> endobj 3468 0 obj <> endobj 3469 0 obj <> endobj 3470 0 obj <> endobj 3471 0 obj <> endobj 3472 0 obj <> endobj 3473 0 obj <> endobj 3474 0 obj <> endobj 3475 0 obj <> endobj 3476 0 obj <> endobj 3477 0 obj <> endobj 3478 0 obj <> endobj 3479 0 obj <> endobj 3480 0 obj <> endobj 3481 0 obj <> endobj 3482 0 obj <> endobj 3483 0 obj <> endobj 3484 0 obj <> endobj 3485 0 obj <> endobj 3486 0 obj <> endobj 3487 0 obj <> endobj 3488 0 obj <> endobj 3489 0 obj <> endobj 3490 0 obj <> endobj 3491 0 obj <> endobj 3492 0 obj <> endobj 3493 0 obj <> endobj 3494 0 obj <> endobj 3495 0 obj <> endobj 3496 0 obj <> endobj 3497 0 obj <> endobj 3498 0 obj <> endobj 3499 0 obj <> endobj 3500 0 obj <> endobj 3501 0 obj <> endobj 3502 0 obj <> endobj 3503 0 obj <> endobj 3504 0 obj <> endobj 3505 0 obj <> endobj 3506 0 obj <> endobj 3507 0 obj <> endobj 3508 0 obj <> endobj 3509 0 obj <> endobj 3510 0 obj <> endobj 3511 0 obj <> endobj 3512 0 obj <> endobj 3513 0 obj <> endobj 3514 0 obj <> endobj 3515 0 obj <> endobj 3516 0 obj <> endobj 3517 0 obj <> endobj 3518 0 obj <> endobj 3519 0 obj <> endobj 3520 0 obj <> endobj 3521 0 obj <> endobj 3522 0 obj <> endobj 3523 0 obj <> endobj 3524 0 obj <> endobj 3525 0 obj <> endobj 3526 0 obj <> endobj 3527 0 obj <> endobj 3528 0 obj <> endobj 3529 0 obj <> endobj 3530 0 obj <> endobj 3531 0 obj <> endobj 3532 0 obj <> endobj 3533 0 obj <> endobj 3534 0 obj <> endobj 3535 0 obj <> endobj 3536 0 obj <> endobj 3537 0 obj <> endobj 3538 0 obj <> endobj 3539 0 obj <> endobj 3540 0 obj <> endobj 3541 0 obj <> endobj 3542 0 obj <> endobj 3543 0 obj <> endobj 3544 0 obj <> endobj 3545 0 obj <> endobj 3546 0 obj <> endobj 3547 0 obj <> endobj 3548 0 obj <> endobj 3549 0 obj <> endobj 3550 0 obj <> endobj 3551 0 obj <> endobj 3552 0 obj <> endobj 3553 0 obj <> endobj 3554 0 obj <> endobj 3555 0 obj <> endobj 3556 0 obj <> endobj 3557 0 obj <> endobj 3558 0 obj <> endobj 3559 0 obj <> endobj 3560 0 obj <> endobj 3561 0 obj <> endobj 3562 0 obj <> endobj 3563 0 obj <> endobj 3564 0 obj <> endobj 3565 0 obj <> endobj 3566 0 obj <> endobj 3567 0 obj <> endobj 3568 0 obj <> endobj 3569 0 obj <> endobj 3570 0 obj <> endobj 3571 0 obj <> endobj 3572 0 obj <> endobj 3573 0 obj <> endobj 3574 0 obj <> endobj 3575 0 obj <> endobj 3576 0 obj <> endobj 3577 0 obj <> endobj 3578 0 obj <> endobj 3579 0 obj <> endobj 3580 0 obj <> endobj 3581 0 obj <> endobj 3582 0 obj <> endobj 3583 0 obj <> endobj 3584 0 obj <> endobj 3585 0 obj <> endobj 3586 0 obj <> endobj 3587 0 obj <> endobj 3588 0 obj <> endobj 3589 0 obj <> endobj 3590 0 obj <> endobj 3591 0 obj <> endobj 3592 0 obj <> endobj 3593 0 obj <> endobj 3594 0 obj <> endobj 3595 0 obj <> endobj 3596 0 obj <> endobj 3597 0 obj <> endobj 3598 0 obj <> endobj 3599 0 obj <> endobj 3600 0 obj <> endobj 3601 0 obj <> endobj 3602 0 obj <> endobj 3603 0 obj <> endobj 3604 0 obj <> endobj 3605 0 obj <> endobj 3606 0 obj <> endobj 3607 0 obj <> endobj 3608 0 obj <> endobj 3609 0 obj <> endobj 3610 0 obj <> endobj 3611 0 obj <> endobj 3612 0 obj <> endobj 3613 0 obj <> endobj 3614 0 obj <> endobj 3615 0 obj <> endobj 3616 0 obj <> endobj 3617 0 obj <> endobj 3618 0 obj <> endobj 3619 0 obj <> endobj 3620 0 obj <> endobj 3621 0 obj <> endobj 3622 0 obj <> endobj 3623 0 obj <> endobj 3624 0 obj <> endobj 3625 0 obj <> endobj 3626 0 obj <> endobj 3627 0 obj <> endobj 3628 0 obj <> endobj 3629 0 obj <> endobj 3630 0 obj <> endobj 3631 0 obj <> endobj 3632 0 obj <> endobj 3633 0 obj <> endobj 3634 0 obj <> endobj 3635 0 obj <> endobj 3636 0 obj <> endobj 3637 0 obj <> endobj 3638 0 obj <> endobj 3639 0 obj <> endobj 3640 0 obj <> endobj 3641 0 obj <> endobj 3642 0 obj <> endobj 3643 0 obj <> endobj 3644 0 obj <> endobj 3645 0 obj <> endobj 3646 0 obj <> endobj 3647 0 obj <> endobj 3648 0 obj <> endobj 3649 0 obj <> endobj 3650 0 obj <> endobj 3651 0 obj <> endobj 3652 0 obj <> endobj 3653 0 obj <> endobj 3654 0 obj <> endobj 3655 0 obj <> endobj 3656 0 obj <> endobj 3657 0 obj <> endobj 3658 0 obj <> endobj 3659 0 obj <> endobj 3660 0 obj <> endobj 3661 0 obj <> endobj 3662 0 obj <> endobj 3663 0 obj <> endobj 3664 0 obj <> endobj 3665 0 obj <> endobj 3666 0 obj <> endobj 3667 0 obj <> endobj 3668 0 obj <> endobj 3669 0 obj <> endobj 3670 0 obj <> endobj 3671 0 obj <> endobj 3672 0 obj <> endobj 3673 0 obj <> endobj 3674 0 obj <> endobj 3675 0 obj <> endobj 3676 0 obj <> endobj 3677 0 obj <> endobj 3678 0 obj <> endobj 3679 0 obj <> endobj 3680 0 obj <> endobj 3681 0 obj <> endobj 3682 0 obj <> endobj 3683 0 obj <> endobj 3684 0 obj <> endobj 3685 0 obj <> endobj 3686 0 obj <> endobj 3687 0 obj <> endobj 3688 0 obj <> endobj 3689 0 obj <> endobj 3690 0 obj <> endobj 3691 0 obj <> endobj 3692 0 obj <> endobj 3693 0 obj <> endobj 3694 0 obj <> endobj 3695 0 obj <> endobj 3696 0 obj <> endobj 3697 0 obj <> endobj 3698 0 obj <> endobj 3699 0 obj <> endobj 3700 0 obj <> endobj 3701 0 obj <> endobj 3702 0 obj <> endobj 3703 0 obj <> endobj 3704 0 obj <> endobj 3705 0 obj <> endobj 3706 0 obj <> endobj 3707 0 obj <> endobj 3708 0 obj <> endobj 3709 0 obj <> endobj 3710 0 obj <> endobj 3711 0 obj <> endobj 3712 0 obj <> endobj 3713 0 obj <> endobj 3714 0 obj <> endobj 3715 0 obj <> endobj 3716 0 obj <> endobj 3717 0 obj <> endobj 3718 0 obj <> endobj 3719 0 obj <> endobj 3720 0 obj <> endobj 3721 0 obj <> endobj 3722 0 obj <> endobj 3723 0 obj <> endobj 3724 0 obj <> endobj 3725 0 obj <> endobj 3726 0 obj <> endobj 3727 0 obj <> endobj 3728 0 obj <> endobj 3729 0 obj <> endobj 3730 0 obj <> endobj 3731 0 obj <> endobj 3732 0 obj <> endobj 3733 0 obj <> endobj 3734 0 obj <> endobj 3735 0 obj <> endobj 3736 0 obj <> endobj 3737 0 obj <> endobj 3738 0 obj <> endobj 3739 0 obj <> endobj 3740 0 obj <> endobj 3741 0 obj <> endobj 3742 0 obj <> endobj 3743 0 obj <> endobj 3744 0 obj <> endobj 3745 0 obj <> endobj 3746 0 obj <> endobj 3747 0 obj <> endobj 3748 0 obj <> endobj 3749 0 obj <> endobj 3750 0 obj <> endobj 3751 0 obj <> endobj 3752 0 obj <> endobj 3753 0 obj <> endobj 3754 0 obj <> endobj 3755 0 obj <> endobj 3756 0 obj <> endobj 3757 0 obj <> endobj 3758 0 obj <> endobj 3759 0 obj <> endobj 3760 0 obj <> endobj 3761 0 obj <> endobj 3762 0 obj <> endobj 3763 0 obj <> endobj 3764 0 obj <> endobj 3765 0 obj <> endobj 3766 0 obj <> endobj 3767 0 obj <> endobj 3768 0 obj <> endobj 3769 0 obj <> endobj 3770 0 obj <> endobj 3771 0 obj <> endobj 3772 0 obj <> endobj 3773 0 obj <> endobj 3774 0 obj <> endobj 3775 0 obj <> endobj 3776 0 obj <> endobj 3777 0 obj <> endobj 3778 0 obj <> endobj 3779 0 obj <> endobj 3780 0 obj <> endobj 3781 0 obj <> endobj 3782 0 obj <> endobj 3783 0 obj <> endobj 3784 0 obj <> endobj 3785 0 obj <> endobj 3786 0 obj <> endobj 3787 0 obj <> endobj 3788 0 obj <> endobj 3789 0 obj <> endobj 3790 0 obj <> endobj 3791 0 obj <> endobj 3792 0 obj <> endobj 3793 0 obj <> endobj 3794 0 obj <> endobj 3795 0 obj <> endobj 3796 0 obj <> endobj 3797 0 obj <> endobj 3798 0 obj <> endobj 3799 0 obj <> endobj 3800 0 obj <> endobj 3801 0 obj <> endobj 3802 0 obj <> endobj 3803 0 obj <> endobj 3804 0 obj <> endobj 3805 0 obj <> endobj 3806 0 obj <> endobj 3807 0 obj <> endobj 3808 0 obj <> endobj 3809 0 obj <> endobj 3810 0 obj <> endobj 3811 0 obj <> endobj 3812 0 obj <> endobj 3813 0 obj <> endobj 3814 0 obj <> endobj 3815 0 obj <> endobj 3816 0 obj <> endobj 3817 0 obj <> endobj 3818 0 obj <> endobj 3819 0 obj <> endobj 3820 0 obj <> endobj 3821 0 obj <> endobj 3822 0 obj <> endobj 3823 0 obj <> endobj 3824 0 obj <> endobj 3825 0 obj <> endobj 3826 0 obj <> endobj 3827 0 obj <> endobj 3828 0 obj <> endobj 3829 0 obj <> endobj 3830 0 obj <> endobj 3831 0 obj <> endobj 3832 0 obj <> endobj 3833 0 obj <> endobj 3834 0 obj <> endobj 3835 0 obj <> endobj 3836 0 obj <> endobj 3837 0 obj <> endobj 3838 0 obj <> endobj 3839 0 obj <> endobj 3840 0 obj <> endobj 3841 0 obj <> endobj 3842 0 obj <> endobj 3843 0 obj <> endobj 3844 0 obj <> endobj 3845 0 obj <> endobj 3846 0 obj <> endobj 3847 0 obj <> endobj 3848 0 obj <> endobj 3849 0 obj <> endobj 3850 0 obj <> endobj 3851 0 obj <> endobj 3852 0 obj <> endobj 3853 0 obj <> endobj 3854 0 obj <> endobj 3855 0 obj <> endobj 3856 0 obj <> endobj 3857 0 obj <> endobj 3858 0 obj <> endobj 3859 0 obj <> endobj 3860 0 obj <> endobj 3861 0 obj <> endobj 3862 0 obj <> endobj 3863 0 obj <> endobj 3864 0 obj <> endobj 3865 0 obj <> endobj 3866 0 obj <> endobj 3867 0 obj <> endobj 3868 0 obj <> endobj 3869 0 obj <> endobj 3870 0 obj <> endobj 3871 0 obj <> endobj 3872 0 obj <> endobj 3873 0 obj <> endobj 3874 0 obj <> endobj 3875 0 obj <> endobj 3876 0 obj <> endobj 3877 0 obj <> endobj 3878 0 obj <> endobj 3879 0 obj <> endobj 3880 0 obj <> endobj 3881 0 obj <> endobj 3882 0 obj <> endobj 3883 0 obj <> endobj 3884 0 obj <> endobj 3885 0 obj <> endobj 3886 0 obj <> endobj 3887 0 obj <> endobj 3888 0 obj <> endobj 3889 0 obj <> endobj 3890 0 obj <> endobj 3891 0 obj <> endobj 3892 0 obj <> endobj 3893 0 obj <> endobj 3894 0 obj <> endobj 3895 0 obj <> endobj 3896 0 obj <> endobj 3897 0 obj <> endobj 3898 0 obj <> endobj 3899 0 obj <> endobj 3900 0 obj <> endobj 3901 0 obj <> endobj 3902 0 obj <> endobj 3903 0 obj <> endobj 3904 0 obj <> endobj 3905 0 obj <> endobj 3906 0 obj <> endobj 3907 0 obj <> endobj 3908 0 obj <> endobj 3909 0 obj <> endobj 3910 0 obj <> endobj 3911 0 obj <> endobj 3912 0 obj <> endobj 3913 0 obj <> endobj 3914 0 obj <> endobj 3915 0 obj <> endobj 3916 0 obj <> endobj 3917 0 obj <> endobj 3918 0 obj <> endobj 3919 0 obj <> endobj 3920 0 obj <> endobj 3921 0 obj <> endobj 3922 0 obj <> endobj 3923 0 obj <> endobj 3924 0 obj <> endobj 3925 0 obj <> endobj 3926 0 obj <> endobj 3927 0 obj <> endobj 3928 0 obj <> endobj 3929 0 obj <> endobj 3930 0 obj <> endobj 3931 0 obj <> endobj 3932 0 obj <> endobj 3933 0 obj <> endobj 3934 0 obj <> endobj 3935 0 obj <> endobj 3936 0 obj <> endobj 3937 0 obj <> endobj 3938 0 obj <> endobj 3939 0 obj <> endobj 3940 0 obj <> endobj 3941 0 obj <> endobj 3942 0 obj <> endobj 3943 0 obj <> endobj 3944 0 obj <> endobj 3945 0 obj <> endobj 3946 0 obj <> endobj 3947 0 obj <> endobj 3948 0 obj <> endobj 3949 0 obj <> endobj 3950 0 obj <> endobj 3951 0 obj <> endobj 3952 0 obj <> endobj 3953 0 obj <> endobj 3954 0 obj <> endobj 3955 0 obj <> endobj 3956 0 obj <> endobj 3957 0 obj <> endobj 3958 0 obj <> endobj 3959 0 obj <> endobj 3960 0 obj <> endobj 3961 0 obj <> endobj 3962 0 obj <> endobj 3963 0 obj <> endobj 3964 0 obj <> endobj 3965 0 obj <> endobj 3966 0 obj <> endobj 3967 0 obj <> endobj 3968 0 obj <> endobj 3969 0 obj <> endobj 3970 0 obj <> endobj 3971 0 obj <> endobj 3972 0 obj <> endobj 3973 0 obj <> endobj 3974 0 obj <> endobj 3975 0 obj <> endobj 3976 0 obj <> endobj 3977 0 obj <> endobj 3978 0 obj <> endobj 3979 0 obj <> endobj 3980 0 obj <> endobj 3981 0 obj <> endobj 3982 0 obj <> endobj 3983 0 obj <> endobj 3984 0 obj <> endobj 3985 0 obj <> endobj 3986 0 obj <> endobj 3987 0 obj <> endobj 3988 0 obj <> endobj 3989 0 obj <> endobj 3990 0 obj <> endobj 3991 0 obj <> endobj 3992 0 obj <> endobj 3993 0 obj <> endobj 3994 0 obj <> endobj 3995 0 obj <> endobj 3996 0 obj <> endobj 3997 0 obj <> endobj 3998 0 obj <> endobj 3999 0 obj <> endobj 4000 0 obj <> endobj 4001 0 obj <> endobj 4002 0 obj <> endobj 4003 0 obj <> endobj 4004 0 obj <> endobj 4005 0 obj <> endobj 4006 0 obj <> endobj 4007 0 obj <> endobj 4008 0 obj <> endobj 4009 0 obj <> endobj 4010 0 obj <> endobj 4011 0 obj <> endobj 4012 0 obj <> endobj 4013 0 obj <> endobj 4014 0 obj <> endobj 4015 0 obj <> endobj 4016 0 obj <> endobj 4017 0 obj <> endobj 4018 0 obj <> endobj 4019 0 obj <> endobj 4020 0 obj <> endobj 4021 0 obj <> endobj 4022 0 obj <> endobj 4023 0 obj <> endobj 4024 0 obj <> endobj 4025 0 obj <> endobj 4026 0 obj <> endobj 4027 0 obj <> endobj 4028 0 obj <> endobj 4029 0 obj <> endobj 4030 0 obj <> endobj 4031 0 obj <> endobj 4032 0 obj <> endobj 4033 0 obj <> endobj 4034 0 obj <> endobj 4035 0 obj <> endobj 4036 0 obj <> endobj 4037 0 obj <> endobj 4038 0 obj <> endobj 4039 0 obj <> endobj 4040 0 obj <> endobj 4041 0 obj <> endobj 4042 0 obj <> endobj 4043 0 obj <> endobj 4044 0 obj <> endobj 4045 0 obj <> endobj 4046 0 obj <> endobj 4047 0 obj <> endobj 4048 0 obj <> endobj 4049 0 obj <> endobj 4050 0 obj <> endobj 4051 0 obj <> endobj 4052 0 obj <> endobj 4053 0 obj <> endobj 4054 0 obj <> endobj 4055 0 obj <> endobj 4056 0 obj <> endobj 4057 0 obj <> endobj 4058 0 obj <> endobj 4059 0 obj <> endobj 4060 0 obj <> endobj 4061 0 obj <> endobj 4062 0 obj <> endobj 4063 0 obj <> endobj 4064 0 obj <> endobj 4065 0 obj <> endobj 4066 0 obj <> endobj 4067 0 obj <> endobj 4068 0 obj <> endobj 4069 0 obj <> endobj 4070 0 obj <> endobj 4071 0 obj <> endobj 4072 0 obj <> endobj 4073 0 obj <> endobj 4074 0 obj <> endobj 4075 0 obj <> endobj 4076 0 obj <> endobj 4077 0 obj <> endobj 4078 0 obj <> endobj 4079 0 obj <> endobj 4080 0 obj <> endobj 4081 0 obj <> endobj 4082 0 obj <> endobj 4083 0 obj <> endobj 4084 0 obj <> endobj 4085 0 obj <> endobj 4086 0 obj <> endobj 4087 0 obj <> endobj 4088 0 obj <> endobj 4089 0 obj <> endobj 4090 0 obj <> endobj 4091 0 obj <> endobj 4092 0 obj <> endobj 4093 0 obj <> endobj 4094 0 obj <> endobj 4095 0 obj <> endobj 4096 0 obj <> endobj 4097 0 obj <> endobj 4098 0 obj <> endobj 4099 0 obj <> endobj 4100 0 obj <> endobj 4101 0 obj <> endobj 4102 0 obj <> endobj 4103 0 obj <> endobj 4104 0 obj <> endobj 4105 0 obj <> endobj 4106 0 obj <> endobj 4107 0 obj <> endobj 4108 0 obj <> endobj 4109 0 obj <> endobj 4110 0 obj <> endobj 4111 0 obj <> endobj 4112 0 obj <> endobj 4113 0 obj <> endobj 4114 0 obj <> endobj 4115 0 obj <> endobj 4116 0 obj <> endobj 4117 0 obj <> endobj 4118 0 obj <> endobj 4119 0 obj <> endobj 4120 0 obj <> endobj 4121 0 obj <> endobj 4122 0 obj <> endobj 4123 0 obj <> endobj 4124 0 obj <> endobj 4125 0 obj <> endobj 4126 0 obj <> endobj 4127 0 obj <> endobj 4128 0 obj <> endobj 4129 0 obj <> endobj 4130 0 obj <> endobj 4131 0 obj <> endobj 4132 0 obj <> endobj 4133 0 obj <> endobj 4134 0 obj <> endobj 4135 0 obj <> endobj 4136 0 obj <> endobj 4137 0 obj <> endobj 4138 0 obj <> endobj 4139 0 obj <> endobj 4140 0 obj <> endobj 4141 0 obj <> endobj 4142 0 obj <> endobj 4143 0 obj <> endobj 4144 0 obj <> endobj 4145 0 obj <> endobj 4146 0 obj <> endobj 4147 0 obj <> endobj 4148 0 obj <> endobj 4149 0 obj <> endobj 4150 0 obj <> endobj 4151 0 obj <> endobj 4152 0 obj <> endobj 4153 0 obj <> endobj 4154 0 obj <> endobj 4155 0 obj <> endobj 4156 0 obj <> endobj 4157 0 obj <> endobj 4158 0 obj <> endobj 4159 0 obj <> endobj 4160 0 obj <> endobj 4161 0 obj <> endobj 4162 0 obj <> endobj 4163 0 obj <> endobj 4164 0 obj <> endobj 4165 0 obj <> endobj 4166 0 obj <> endobj 4167 0 obj <> endobj 4168 0 obj <> endobj 4169 0 obj <> endobj 4170 0 obj <> endobj 4171 0 obj <> endobj 4172 0 obj <> endobj 4173 0 obj <> endobj 4174 0 obj <> endobj 4175 0 obj <> endobj 4176 0 obj <> endobj 4177 0 obj <> endobj 4178 0 obj <> endobj 4179 0 obj <> endobj 4180 0 obj <> endobj 4181 0 obj <> endobj 4182 0 obj <> endobj 4183 0 obj <> endobj 4184 0 obj <> endobj 4185 0 obj <> endobj 4186 0 obj <> endobj 4187 0 obj <> endobj 4188 0 obj <> endobj 4189 0 obj <> endobj 4190 0 obj <> endobj 4191 0 obj <> endobj 4192 0 obj <> endobj 4193 0 obj <> endobj 4194 0 obj <> endobj 4195 0 obj <> endobj 4196 0 obj <> endobj 4197 0 obj <> endobj 4198 0 obj <> endobj 4199 0 obj <> endobj 4200 0 obj <> endobj 4201 0 obj <> endobj 4202 0 obj <> endobj 4203 0 obj <> endobj 4204 0 obj <> endobj 4205 0 obj <> endobj 4206 0 obj <> endobj 4207 0 obj <> endobj 4208 0 obj <> endobj 4209 0 obj <> endobj 4210 0 obj <> endobj 4211 0 obj <> endobj 4212 0 obj <> endobj 4213 0 obj <> endobj 4214 0 obj <> endobj 4215 0 obj <> endobj 4216 0 obj <> endobj 4217 0 obj <> endobj 4218 0 obj <> endobj 4219 0 obj <> endobj 4220 0 obj <> endobj 4221 0 obj <> endobj 4222 0 obj <> endobj 4223 0 obj <> endobj 4224 0 obj <> endobj 4225 0 obj <> endobj 4226 0 obj <> endobj 4227 0 obj <> endobj 4228 0 obj <> endobj 4229 0 obj <> endobj 4230 0 obj <> endobj 4231 0 obj <> endobj 4232 0 obj <> endobj 4233 0 obj <> endobj 4234 0 obj <> endobj 4235 0 obj <> endobj 4236 0 obj <> endobj 4237 0 obj <> endobj 4238 0 obj <> endobj 4239 0 obj <> endobj 4240 0 obj <> endobj 4241 0 obj <> endobj 4242 0 obj <> endobj 4243 0 obj <> endobj 4244 0 obj <> endobj 4245 0 obj <> endobj 4246 0 obj <> endobj 4247 0 obj <> endobj 4248 0 obj <> endobj 4249 0 obj <> endobj 4250 0 obj <> endobj 4251 0 obj <> endobj 4252 0 obj <> endobj 4253 0 obj <> endobj 4254 0 obj <> endobj 4255 0 obj <> endobj 4256 0 obj <> endobj 4257 0 obj <> endobj 4258 0 obj <> endobj 4259 0 obj <> endobj 4260 0 obj <> endobj 4261 0 obj <> endobj 4262 0 obj <> endobj 4263 0 obj <> endobj 4264 0 obj <> endobj 4265 0 obj <> endobj 4266 0 obj <> endobj 4267 0 obj <> endobj 4268 0 obj <> endobj 4269 0 obj <> endobj 4270 0 obj <> endobj 4271 0 obj <> endobj 4272 0 obj <> endobj 4273 0 obj <> endobj 4274 0 obj <> endobj 4275 0 obj <> endobj 4276 0 obj <> endobj 4277 0 obj <> endobj 4278 0 obj <> endobj 4279 0 obj <> endobj 4280 0 obj <> endobj 4281 0 obj <> endobj 4282 0 obj <> endobj 4283 0 obj <> endobj 4284 0 obj <> endobj 4285 0 obj <> endobj 4286 0 obj <> endobj 4287 0 obj <> endobj 4288 0 obj <> endobj 4289 0 obj <> endobj 4290 0 obj <> endobj 4291 0 obj <> endobj 4292 0 obj <> endobj 4293 0 obj <> endobj 4294 0 obj <> endobj 4295 0 obj <> endobj 4296 0 obj <> endobj 4297 0 obj <> endobj 4298 0 obj <> endobj 4299 0 obj <> endobj 4300 0 obj <> endobj 4301 0 obj <> endobj 4302 0 obj <> endobj 4303 0 obj <> endobj 4304 0 obj <> endobj 4305 0 obj <> endobj 4306 0 obj <> endobj 4307 0 obj <> endobj 4308 0 obj <> endobj 4309 0 obj <> endobj 4310 0 obj <> endobj 4311 0 obj <> endobj 4312 0 obj <> endobj 4313 0 obj <> endobj 4314 0 obj <> endobj 4315 0 obj <> endobj 4316 0 obj <> endobj 4317 0 obj <> endobj 4318 0 obj <> endobj 4319 0 obj <> endobj 4320 0 obj <> endobj 4321 0 obj <> endobj 4322 0 obj <> endobj 4323 0 obj <> endobj 4324 0 obj <> endobj 4325 0 obj <> endobj 4326 0 obj <> endobj 4327 0 obj <> endobj 4328 0 obj <> endobj 4329 0 obj <> endobj 4330 0 obj <> endobj 4331 0 obj <> endobj 4332 0 obj <> endobj 4333 0 obj <> endobj 4334 0 obj <> endobj 4335 0 obj <> endobj 4336 0 obj <> endobj 4337 0 obj <> endobj 4338 0 obj <> endobj 4339 0 obj <> endobj 4340 0 obj <> endobj 4341 0 obj <> endobj 4342 0 obj <> endobj 4343 0 obj <> endobj 4344 0 obj <> endobj 4345 0 obj <> endobj 4346 0 obj <> endobj 4347 0 obj <> endobj 4348 0 obj <> endobj 4349 0 obj <> endobj 4350 0 obj <> endobj 4351 0 obj <> endobj 4352 0 obj <> endobj 4353 0 obj <> endobj 4354 0 obj <> endobj 4355 0 obj <> endobj 4356 0 obj <> endobj 4357 0 obj <> endobj 4358 0 obj <> endobj 4359 0 obj <> endobj 4360 0 obj <> endobj 4361 0 obj <> endobj 4362 0 obj <> endobj 4363 0 obj <> endobj 4364 0 obj <> endobj 4365 0 obj <> endobj 4366 0 obj <> endobj 4367 0 obj <> endobj 4368 0 obj <> endobj 4369 0 obj <> endobj 4370 0 obj <> endobj 4371 0 obj <> endobj 4372 0 obj <> endobj 4373 0 obj <> endobj 4374 0 obj <> endobj 4375 0 obj <> endobj 4376 0 obj <> endobj 4377 0 obj <> endobj 4378 0 obj <> endobj 4379 0 obj <> endobj 4380 0 obj <> endobj 4381 0 obj <> endobj 4382 0 obj <> endobj 4383 0 obj <> endobj 4384 0 obj <> endobj 4385 0 obj <> endobj 4386 0 obj <> endobj 4387 0 obj <> endobj 4388 0 obj <> endobj 4389 0 obj <> endobj 4390 0 obj <> endobj 4391 0 obj <> endobj 4392 0 obj <> endobj 4393 0 obj <> endobj 4394 0 obj <> endobj 4395 0 obj <> endobj 4396 0 obj <> endobj 4397 0 obj <> endobj 4398 0 obj <> endobj 4399 0 obj <> endobj 4400 0 obj <> endobj 4401 0 obj <> endobj 4402 0 obj <> endobj 4403 0 obj <> endobj 4404 0 obj <> endobj 4405 0 obj <> endobj 4406 0 obj <> endobj 4407 0 obj <> endobj 4408 0 obj <> endobj 4409 0 obj <> endobj 4410 0 obj <> endobj 4411 0 obj <> endobj 4412 0 obj <> endobj 4413 0 obj <> endobj 4414 0 obj <> endobj 4415 0 obj <> endobj 4416 0 obj <> endobj 4417 0 obj <> endobj 4418 0 obj <> endobj 4419 0 obj <> endobj 4420 0 obj <> endobj 4421 0 obj <> endobj 4422 0 obj <> endobj 4423 0 obj <> endobj 4424 0 obj <> endobj 4425 0 obj <> endobj 4426 0 obj <> endobj 4427 0 obj <> endobj 4428 0 obj <> endobj 4429 0 obj <> endobj 4430 0 obj <> endobj 4431 0 obj <> endobj 4432 0 obj <> endobj 4433 0 obj <> endobj 4434 0 obj <> endobj 4435 0 obj <> endobj 4436 0 obj <> endobj 4437 0 obj <> endobj 4438 0 obj <> endobj 4439 0 obj <> endobj 4440 0 obj <> endobj 4441 0 obj <> endobj 4442 0 obj <> endobj 4443 0 obj <> endobj 4444 0 obj <> endobj 4445 0 obj <> endobj 4446 0 obj <> endobj 4447 0 obj <> endobj 4448 0 obj <> endobj 4449 0 obj <> endobj 4450 0 obj <> endobj 4451 0 obj <> endobj 4452 0 obj <> endobj 4453 0 obj <> endobj 4454 0 obj <> endobj 4455 0 obj <> endobj 4456 0 obj <> endobj 4457 0 obj <> endobj 4458 0 obj <> endobj 4459 0 obj <> endobj 4460 0 obj <> endobj 4461 0 obj <> endobj 4462 0 obj <> endobj 4463 0 obj <> endobj 4464 0 obj <> endobj 4465 0 obj <> endobj 4466 0 obj <> endobj 4467 0 obj <> endobj 4468 0 obj <> endobj 4469 0 obj <> endobj 4470 0 obj <> endobj 4471 0 obj <> endobj 4472 0 obj <> endobj 4473 0 obj <> endobj 4474 0 obj <> endobj 4475 0 obj <> endobj 4476 0 obj <> endobj 4477 0 obj <> endobj 4478 0 obj <> endobj 4479 0 obj <> endobj 4480 0 obj <> endobj 4481 0 obj <> endobj 4482 0 obj <> endobj 4483 0 obj <> endobj 4484 0 obj <> endobj 4485 0 obj <> endobj 4486 0 obj <> endobj 4487 0 obj <> endobj 4488 0 obj <> endobj 4489 0 obj <> endobj 4490 0 obj <> endobj 4491 0 obj <> endobj 4492 0 obj <> endobj 4493 0 obj <> endobj 4494 0 obj <> endobj 4495 0 obj <> endobj 4496 0 obj <> endobj 4497 0 obj <> endobj 4498 0 obj <> endobj 4499 0 obj <> endobj 4500 0 obj <> endobj 4501 0 obj <> endobj 4502 0 obj <> endobj 4503 0 obj <> endobj 4504 0 obj <> endobj 4505 0 obj <> endobj 4506 0 obj <> endobj 4507 0 obj <> endobj 4508 0 obj <> endobj 4509 0 obj <> endobj 4510 0 obj <> endobj 4511 0 obj <> endobj 4512 0 obj <> endobj 4513 0 obj <> endobj 4514 0 obj <> endobj 4515 0 obj <> endobj 4516 0 obj <> endobj 4517 0 obj <> endobj 4518 0 obj <> endobj 4519 0 obj <> endobj 4520 0 obj <> endobj 4521 0 obj <> endobj 4522 0 obj <> endobj 4523 0 obj <> endobj 4524 0 obj <> endobj 4525 0 obj <> endobj 4526 0 obj <> endobj 4527 0 obj <> endobj 4528 0 obj <> endobj 4529 0 obj <> endobj 4530 0 obj <> endobj 4531 0 obj <> endobj 4532 0 obj <> endobj 4533 0 obj <> endobj 4534 0 obj <> endobj 4535 0 obj <> endobj 4536 0 obj <> endobj 4537 0 obj <> endobj 4538 0 obj <> endobj 4539 0 obj <> endobj 4540 0 obj <> endobj 4541 0 obj <> endobj 4542 0 obj <> endobj 4543 0 obj <> endobj 4544 0 obj <> endobj 4545 0 obj <> endobj 4546 0 obj <> endobj 4547 0 obj <> endobj 4548 0 obj <> endobj 4549 0 obj <> endobj 4550 0 obj <> endobj 4551 0 obj <> endobj 4552 0 obj <> endobj 4553 0 obj <> endobj 4554 0 obj <> endobj 4555 0 obj <> endobj 4556 0 obj <> endobj 4557 0 obj <> endobj 4558 0 obj <> endobj 4559 0 obj <> endobj 4560 0 obj <> endobj 4561 0 obj <> endobj 4562 0 obj <> endobj 4563 0 obj <> endobj 4564 0 obj <> endobj 4565 0 obj <> endobj 4566 0 obj <> endobj 4567 0 obj <> endobj 4568 0 obj <> endobj 4569 0 obj <> endobj 4570 0 obj <> endobj 4571 0 obj <> endobj 4572 0 obj <> endobj 4573 0 obj <> endobj 4574 0 obj <> endobj 4575 0 obj <> endobj 4576 0 obj <> endobj 4577 0 obj <> endobj 4578 0 obj <> endobj 4579 0 obj <> endobj 4580 0 obj <> endobj 4581 0 obj <> endobj 4582 0 obj <> endobj 4583 0 obj <> endobj 4584 0 obj <> endobj 4585 0 obj <> endobj 4586 0 obj <> endobj 4587 0 obj <> endobj 4588 0 obj <> endobj 4589 0 obj <> endobj 4590 0 obj <> endobj 4591 0 obj <> endobj 4592 0 obj <> endobj 4593 0 obj <> endobj 4594 0 obj <> endobj 4595 0 obj <> endobj 4596 0 obj <> endobj 4597 0 obj <> endobj 4598 0 obj <> endobj 4599 0 obj <> endobj 4600 0 obj <> endobj 4601 0 obj <> endobj 4602 0 obj <> endobj 4603 0 obj <> endobj 4604 0 obj <> endobj 4605 0 obj <> endobj 4606 0 obj <> endobj 4607 0 obj <> endobj 4608 0 obj <> endobj 4609 0 obj <> endobj 4610 0 obj <> endobj 4611 0 obj <> endobj 4612 0 obj <> endobj 4613 0 obj <> endobj 4614 0 obj <> endobj 4615 0 obj <> endobj 4616 0 obj <> endobj 4617 0 obj <> endobj 4618 0 obj <> endobj 4619 0 obj <> endobj 4620 0 obj <> endobj 4621 0 obj <> endobj 4622 0 obj <> endobj 4623 0 obj <> endobj 4624 0 obj <> endobj 4625 0 obj <> endobj 4626 0 obj <> endobj 4627 0 obj <> endobj 4628 0 obj <> endobj 4629 0 obj <> endobj 4630 0 obj <> endobj 4631 0 obj <> endobj 4632 0 obj <> endobj 4633 0 obj <> endobj 4634 0 obj <> endobj 4635 0 obj <> endobj 4636 0 obj <> endobj 4637 0 obj <> endobj 4638 0 obj <> endobj 4639 0 obj <> endobj 4640 0 obj <> endobj 4641 0 obj <> endobj 4642 0 obj <> endobj 4643 0 obj <> endobj 4644 0 obj <> endobj 4645 0 obj <> endobj 4646 0 obj <> endobj 4647 0 obj <> endobj 4648 0 obj <> endobj 4649 0 obj <> endobj 4650 0 obj <> endobj 4651 0 obj <> endobj 4652 0 obj <> endobj 4653 0 obj <> endobj 4654 0 obj <> endobj 4655 0 obj <> endobj 4656 0 obj <> endobj 4657 0 obj <> endobj 4658 0 obj <> endobj 4659 0 obj <> endobj 4660 0 obj <> endobj 4661 0 obj <> endobj 4662 0 obj <> endobj 4663 0 obj <> endobj 4664 0 obj <> endobj 4665 0 obj <> endobj 4666 0 obj <> endobj 4667 0 obj <> endobj 4668 0 obj <> endobj 4669 0 obj <> endobj 4670 0 obj <> endobj 4671 0 obj <> endobj 4672 0 obj <>stream + + + + + Acrobat Distiller 10.0.0 (Windows) + + + FrameMaker 8.0 + 2015-04-07T09:57:45Z + 2015-04-07T09:57:45Z + + + application/pdf + + + LEF 5.8 C/C++ Programming Interface + + + + + Cadence Design Systems, Inc. + + + + + uuid:372d4e8f-cfab-477d-a7aa-d869e339ea35 + uuid:bab4488a-c72f-4b33-8534-4f42f6f50208 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 4673 0 obj <> endobj xref +0 4674 +0000000000 65535 f +0000118215 00000 n +0000118356 00000 n +0000118467 00000 n +0000122498 00000 n +0000122562 00000 n +0000122995 00000 n +0000123206 00000 n +0000123489 00000 n +0000123835 00000 n +0000123940 00000 n +0000124046 00000 n +0000124151 00000 n +0000124256 00000 n +0000124359 00000 n +0000124465 00000 n +0000124570 00000 n +0000124676 00000 n +0000124782 00000 n +0000124888 00000 n +0000124994 00000 n +0000125097 00000 n +0000125201 00000 n +0000125307 00000 n +0000125413 00000 n +0000125519 00000 n +0000125624 00000 n +0000125729 00000 n +0000125835 00000 n +0000125941 00000 n +0000126046 00000 n +0000126149 00000 n +0000126255 00000 n +0000126361 00000 n +0000126467 00000 n +0000126573 00000 n +0000126679 00000 n +0000126785 00000 n +0000126885 00000 n +0000129102 00000 n +0000129485 00000 n +0000129586 00000 n +0000129691 00000 n +0000129797 00000 n +0000129903 00000 n +0000130006 00000 n +0000130109 00000 n +0000130215 00000 n +0000130321 00000 n +0000130427 00000 n +0000130533 00000 n +0000130639 00000 n +0000130744 00000 n +0000130850 00000 n +0000130956 00000 n +0000131062 00000 n +0000131168 00000 n +0000131273 00000 n +0000131379 00000 n +0000131484 00000 n +0000131590 00000 n +0000131696 00000 n +0000131802 00000 n +0000131908 00000 n +0000132014 00000 n +0000132120 00000 n +0000132225 00000 n +0000132331 00000 n +0000132437 00000 n +0000132543 00000 n +0000132644 00000 n +0000132750 00000 n +0000132856 00000 n +0000132960 00000 n +0000133060 00000 n +0000135355 00000 n +0000135773 00000 n +0000135879 00000 n +0000135985 00000 n +0000136091 00000 n +0000136197 00000 n +0000136303 00000 n +0000136409 00000 n +0000136515 00000 n +0000136621 00000 n +0000136727 00000 n +0000136832 00000 n +0000136938 00000 n +0000137044 00000 n +0000137150 00000 n +0000137253 00000 n +0000137359 00000 n +0000137462 00000 n +0000137568 00000 n +0000137674 00000 n +0000137780 00000 n +0000137886 00000 n +0000137991 00000 n +0000138096 00000 n +0000138202 00000 n +0000138308 00000 n +0000138415 00000 n +0000138522 00000 n +0000138629 00000 n +0000138735 00000 n +0000138842 00000 n +0000138949 00000 n +0000139056 00000 n +0000139163 00000 n +0000139270 00000 n +0000139377 00000 n +0000139484 00000 n +0000139589 00000 n +0000139690 00000 n +0000142073 00000 n +0000142484 00000 n +0000142591 00000 n +0000142698 00000 n +0000142805 00000 n +0000142912 00000 n +0000143019 00000 n +0000143126 00000 n +0000143233 00000 n +0000143339 00000 n +0000143446 00000 n +0000143553 00000 n +0000143660 00000 n +0000143766 00000 n +0000143873 00000 n +0000143980 00000 n +0000144087 00000 n +0000144194 00000 n +0000144298 00000 n +0000144405 00000 n +0000144512 00000 n +0000144616 00000 n +0000144723 00000 n +0000144830 00000 n +0000144936 00000 n +0000145042 00000 n +0000145149 00000 n +0000145256 00000 n +0000145363 00000 n +0000145470 00000 n +0000145574 00000 n +0000145680 00000 n +0000145786 00000 n +0000145893 00000 n +0000145994 00000 n +0000148284 00000 n +0000148703 00000 n +0000148805 00000 n +0000148912 00000 n +0000149019 00000 n +0000149126 00000 n +0000149230 00000 n +0000149337 00000 n +0000149441 00000 n +0000149546 00000 n +0000149652 00000 n +0000149759 00000 n +0000149866 00000 n +0000149972 00000 n +0000150079 00000 n +0000150186 00000 n +0000150292 00000 n +0000150399 00000 n +0000150506 00000 n +0000150613 00000 n +0000150720 00000 n +0000150827 00000 n +0000150934 00000 n +0000151040 00000 n +0000151147 00000 n +0000151254 00000 n +0000151361 00000 n +0000151468 00000 n +0000151575 00000 n +0000151682 00000 n +0000151789 00000 n +0000151896 00000 n +0000152003 00000 n +0000152110 00000 n +0000152216 00000 n +0000152317 00000 n +0000154839 00000 n +0000155282 00000 n +0000155388 00000 n +0000155494 00000 n +0000155600 00000 n +0000155707 00000 n +0000155811 00000 n +0000155918 00000 n +0000156025 00000 n +0000156132 00000 n +0000156239 00000 n +0000156346 00000 n +0000156453 00000 n +0000156557 00000 n +0000156664 00000 n +0000156771 00000 n +0000156875 00000 n +0000156982 00000 n +0000157089 00000 n +0000157196 00000 n +0000157303 00000 n +0000157410 00000 n +0000157517 00000 n +0000157624 00000 n +0000157731 00000 n +0000157837 00000 n +0000157944 00000 n +0000158051 00000 n +0000158158 00000 n +0000158264 00000 n +0000158371 00000 n +0000158478 00000 n +0000158584 00000 n +0000158690 00000 n +0000158797 00000 n +0000158904 00000 n +0000159011 00000 n +0000159116 00000 n +0000159217 00000 n +0000161755 00000 n +0000162198 00000 n +0000162305 00000 n +0000162412 00000 n +0000162518 00000 n +0000162624 00000 n +0000162731 00000 n +0000162838 00000 n +0000162942 00000 n +0000163049 00000 n +0000163156 00000 n +0000163263 00000 n +0000163370 00000 n +0000163477 00000 n +0000163584 00000 n +0000163691 00000 n +0000163798 00000 n +0000163902 00000 n +0000164009 00000 n +0000164113 00000 n +0000164220 00000 n +0000164327 00000 n +0000164434 00000 n +0000164541 00000 n +0000164645 00000 n +0000164752 00000 n +0000164856 00000 n +0000164963 00000 n +0000165070 00000 n +0000165177 00000 n +0000165284 00000 n +0000165391 00000 n +0000165498 00000 n +0000165604 00000 n +0000165711 00000 n +0000165818 00000 n +0000165924 00000 n +0000166026 00000 n +0000166127 00000 n +0000168619 00000 n +0000169062 00000 n +0000169168 00000 n +0000169275 00000 n +0000169382 00000 n +0000169489 00000 n +0000169596 00000 n +0000169703 00000 n +0000169810 00000 n +0000169917 00000 n +0000170024 00000 n +0000170131 00000 n +0000170237 00000 n +0000170344 00000 n +0000170450 00000 n +0000170557 00000 n +0000170664 00000 n +0000170771 00000 n +0000170878 00000 n +0000170985 00000 n +0000171092 00000 n +0000171199 00000 n +0000171306 00000 n +0000171413 00000 n +0000171520 00000 n +0000171627 00000 n +0000171734 00000 n +0000171841 00000 n +0000171948 00000 n +0000172055 00000 n +0000172162 00000 n +0000172269 00000 n +0000172375 00000 n +0000172481 00000 n +0000172588 00000 n +0000172695 00000 n +0000172802 00000 n +0000172907 00000 n +0000173008 00000 n +0000175414 00000 n +0000175857 00000 n +0000175964 00000 n +0000176071 00000 n +0000176178 00000 n +0000176285 00000 n +0000176392 00000 n +0000176499 00000 n +0000176606 00000 n +0000176712 00000 n +0000176819 00000 n +0000176926 00000 n +0000177033 00000 n +0000177140 00000 n +0000177247 00000 n +0000177353 00000 n +0000177460 00000 n +0000177567 00000 n +0000177674 00000 n +0000177781 00000 n +0000177888 00000 n +0000177995 00000 n +0000178100 00000 n +0000178207 00000 n +0000178314 00000 n +0000178420 00000 n +0000178527 00000 n +0000178634 00000 n +0000178741 00000 n +0000178848 00000 n +0000178954 00000 n +0000179061 00000 n +0000179168 00000 n +0000179275 00000 n +0000179382 00000 n +0000179489 00000 n +0000179596 00000 n +0000179701 00000 n +0000179802 00000 n +0000182354 00000 n +0000182797 00000 n +0000182904 00000 n +0000183011 00000 n +0000183118 00000 n +0000183225 00000 n +0000183332 00000 n +0000183439 00000 n +0000183545 00000 n +0000183652 00000 n +0000183759 00000 n +0000183866 00000 n +0000183973 00000 n +0000184080 00000 n +0000184184 00000 n +0000184290 00000 n +0000184396 00000 n +0000184503 00000 n +0000184607 00000 n +0000184714 00000 n +0000184820 00000 n +0000184927 00000 n +0000185034 00000 n +0000185141 00000 n +0000185248 00000 n +0000185355 00000 n +0000185462 00000 n +0000185569 00000 n +0000185676 00000 n +0000185783 00000 n +0000185890 00000 n +0000185996 00000 n +0000186103 00000 n +0000186209 00000 n +0000186316 00000 n +0000186422 00000 n +0000186529 00000 n +0000186633 00000 n +0000186734 00000 n +0000189191 00000 n +0000189634 00000 n +0000189741 00000 n +0000189848 00000 n +0000189955 00000 n +0000190062 00000 n +0000190168 00000 n +0000190274 00000 n +0000190381 00000 n +0000190488 00000 n +0000190595 00000 n +0000190702 00000 n +0000190808 00000 n +0000190915 00000 n +0000191022 00000 n +0000191128 00000 n +0000191235 00000 n +0000191342 00000 n +0000191446 00000 n +0000191553 00000 n +0000191660 00000 n +0000191766 00000 n +0000191873 00000 n +0000191979 00000 n +0000192085 00000 n +0000192192 00000 n +0000192299 00000 n +0000192405 00000 n +0000192512 00000 n +0000192619 00000 n +0000192726 00000 n +0000192833 00000 n +0000192940 00000 n +0000193047 00000 n +0000193154 00000 n +0000193261 00000 n +0000193367 00000 n +0000193472 00000 n +0000193573 00000 n +0000196154 00000 n +0000196597 00000 n +0000196704 00000 n +0000196811 00000 n +0000196918 00000 n +0000197025 00000 n +0000197131 00000 n +0000197235 00000 n +0000197341 00000 n +0000197448 00000 n +0000197555 00000 n +0000197662 00000 n +0000197767 00000 n +0000197874 00000 n +0000197981 00000 n +0000198088 00000 n +0000198195 00000 n +0000198302 00000 n +0000198409 00000 n +0000198515 00000 n +0000198622 00000 n +0000198729 00000 n +0000198835 00000 n +0000198941 00000 n +0000199048 00000 n +0000199152 00000 n +0000199259 00000 n +0000199366 00000 n +0000199472 00000 n +0000199579 00000 n +0000199686 00000 n +0000199793 00000 n +0000199899 00000 n +0000200006 00000 n +0000200113 00000 n +0000200220 00000 n +0000200326 00000 n +0000200430 00000 n +0000200531 00000 n +0000203064 00000 n +0000203419 00000 n +0000203526 00000 n +0000203632 00000 n +0000203739 00000 n +0000203846 00000 n +0000203953 00000 n +0000204060 00000 n +0000204167 00000 n +0000204273 00000 n +0000204380 00000 n +0000204487 00000 n +0000204594 00000 n +0000204700 00000 n +0000204805 00000 n +0000204913 00000 n +0000205021 00000 n +0000205128 00000 n +0000205236 00000 n +0000205341 00000 n +0000205449 00000 n +0000205556 00000 n +0000205664 00000 n +0000205769 00000 n +0000205875 00000 n +0000205982 00000 n +0000206090 00000 n +0000206191 00000 n +0000208109 00000 n +0000208256 00000 n +0000208357 00000 n +0000208824 00000 n +0000209019 00000 n +0000209167 00000 n +0000209315 00000 n +0000209464 00000 n +0000209611 00000 n +0000209757 00000 n +0000209894 00000 n +0000212118 00000 n +0000212265 00000 n +0000212402 00000 n +0000213582 00000 n +0000213777 00000 n +0000213884 00000 n +0000213990 00000 n +0000214097 00000 n +0000214203 00000 n +0000214310 00000 n +0000214435 00000 n +0000216601 00000 n +0000216748 00000 n +0000216873 00000 n +0000219650 00000 n +0000219821 00000 n +0000219951 00000 n +0000220104 00000 n +0000220367 00000 n +0000222943 00000 n +0000223035 00000 n +0000223390 00000 n +0000223741 00000 n +0000224101 00000 n +0000224442 00000 n +0000224800 00000 n +0000225150 00000 n +0000225500 00000 n +0000225845 00000 n +0000225992 00000 n +0000226105 00000 n +0000226926 00000 n +0000227185 00000 n +0000227289 00000 n +0000227396 00000 n +0000227503 00000 n +0000227610 00000 n +0000227717 00000 n +0000227821 00000 n +0000227928 00000 n +0000228035 00000 n +0000228142 00000 n +0000228249 00000 n +0000228356 00000 n +0000228460 00000 n +0000228567 00000 n +0000228692 00000 n +0000230590 00000 n +0000230753 00000 n +0000230993 00000 n +0000231131 00000 n +0000233155 00000 n +0000233302 00000 n +0000233453 00000 n +0000235228 00000 n +0000235391 00000 n +0000235612 00000 n +0000235750 00000 n +0000237611 00000 n +0000237758 00000 n +0000237896 00000 n +0000239498 00000 n +0000239645 00000 n +0000239759 00000 n +0000240875 00000 n +0000241070 00000 n +0000241307 00000 n +0000241543 00000 n +0000241650 00000 n +0000241756 00000 n +0000241862 00000 n +0000242012 00000 n +0000243956 00000 n +0000244151 00000 n +0000244259 00000 n +0000244366 00000 n +0000244476 00000 n +0000244586 00000 n +0000244695 00000 n +0000244832 00000 n +0000247518 00000 n +0000247801 00000 n +0000247910 00000 n +0000248020 00000 n +0000248130 00000 n +0000248239 00000 n +0000248349 00000 n +0000248459 00000 n +0000248568 00000 n +0000248678 00000 n +0000248788 00000 n +0000248898 00000 n +0000249008 00000 n +0000249117 00000 n +0000249227 00000 n +0000249337 00000 n +0000249446 00000 n +0000249556 00000 n +0000249669 00000 n +0000251568 00000 n +0000251835 00000 n +0000251944 00000 n +0000252054 00000 n +0000252163 00000 n +0000252273 00000 n +0000252382 00000 n +0000252492 00000 n +0000252601 00000 n +0000252711 00000 n +0000252820 00000 n +0000252930 00000 n +0000253040 00000 n +0000253149 00000 n +0000253259 00000 n +0000253369 00000 n +0000253482 00000 n +0000255002 00000 n +0000255165 00000 n +0000255274 00000 n +0000255400 00000 n +0000256966 00000 n +0000257281 00000 n +0000257425 00000 n +0000257532 00000 n +0000257638 00000 n +0000257745 00000 n +0000257852 00000 n +0000257959 00000 n +0000258066 00000 n +0000258173 00000 n +0000258280 00000 n +0000258387 00000 n +0000258494 00000 n +0000258600 00000 n +0000258706 00000 n +0000258813 00000 n +0000258920 00000 n +0000259027 00000 n +0000259134 00000 n +0000259241 00000 n +0000259347 00000 n +0000259454 00000 n +0000259591 00000 n +0000261525 00000 n +0000261696 00000 n +0000261844 00000 n +0000262059 00000 n +0000262209 00000 n +0000264206 00000 n +0000264369 00000 n +0000264518 00000 n +0000264668 00000 n +0000266767 00000 n +0000266970 00000 n +0000267126 00000 n +0000267282 00000 n +0000267448 00000 n +0000267613 00000 n +0000267762 00000 n +0000267980 00000 n +0000268130 00000 n +0000270269 00000 n +0000270448 00000 n +0000270593 00000 n +0000270738 00000 n +0000270956 00000 n +0000271106 00000 n +0000273045 00000 n +0000273192 00000 n +0000273342 00000 n +0000275299 00000 n +0000275478 00000 n +0000275632 00000 n +0000275855 00000 n +0000276075 00000 n +0000276225 00000 n +0000278383 00000 n +0000278562 00000 n +0000278719 00000 n +0000278884 00000 n +0000279107 00000 n +0000279257 00000 n +0000281339 00000 n +0000281534 00000 n +0000281678 00000 n +0000281834 00000 n +0000281989 00000 n +0000282202 00000 n +0000282419 00000 n +0000282569 00000 n +0000284642 00000 n +0000284821 00000 n +0000284976 00000 n +0000285196 00000 n +0000285413 00000 n +0000285563 00000 n +0000287456 00000 n +0000287619 00000 n +0000287767 00000 n +0000287917 00000 n +0000289888 00000 n +0000290059 00000 n +0000290204 00000 n +0000290418 00000 n +0000290568 00000 n +0000292829 00000 n +0000293008 00000 n +0000293160 00000 n +0000293303 00000 n +0000293525 00000 n +0000293675 00000 n +0000295711 00000 n +0000295890 00000 n +0000296037 00000 n +0000296252 00000 n +0000296472 00000 n +0000296622 00000 n +0000298777 00000 n +0000298940 00000 n +0000299088 00000 n +0000299238 00000 n +0000301091 00000 n +0000301238 00000 n +0000301364 00000 n +0000302516 00000 n +0000302663 00000 n +0000302764 00000 n +0000303270 00000 n +0000303481 00000 n +0000303589 00000 n +0000303696 00000 n +0000303803 00000 n +0000303909 00000 n +0000304016 00000 n +0000304123 00000 n +0000304227 00000 n +0000304352 00000 n +0000306617 00000 n +0000306764 00000 n +0000306890 00000 n +0000308861 00000 n +0000309008 00000 n +0000309122 00000 n +0000310293 00000 n +0000310784 00000 n +0000310894 00000 n +0000311004 00000 n +0000311113 00000 n +0000311223 00000 n +0000311332 00000 n +0000311441 00000 n +0000311551 00000 n +0000311661 00000 n +0000311771 00000 n +0000311880 00000 n +0000311990 00000 n +0000312100 00000 n +0000312207 00000 n +0000312316 00000 n +0000312426 00000 n +0000312536 00000 n +0000312646 00000 n +0000312750 00000 n +0000312860 00000 n +0000312970 00000 n +0000313079 00000 n +0000313188 00000 n +0000313298 00000 n +0000313404 00000 n +0000313511 00000 n +0000313618 00000 n +0000313725 00000 n +0000313832 00000 n +0000313939 00000 n +0000314046 00000 n +0000314153 00000 n +0000314257 00000 n +0000314363 00000 n +0000314470 00000 n +0000314574 00000 n +0000314684 00000 n +0000314794 00000 n +0000314904 00000 n +0000315014 00000 n +0000315124 00000 n +0000315234 00000 n +0000315344 00000 n +0000315445 00000 n +0000317416 00000 n +0000317667 00000 n +0000317819 00000 n +0000317972 00000 n +0000318124 00000 n +0000318231 00000 n +0000318338 00000 n +0000318444 00000 n +0000318548 00000 n +0000318655 00000 n +0000318762 00000 n +0000318869 00000 n +0000318976 00000 n +0000319083 00000 n +0000319233 00000 n +0000320926 00000 n +0000321121 00000 n +0000321274 00000 n +0000321483 00000 n +0000321635 00000 n +0000321788 00000 n +0000321940 00000 n +0000322078 00000 n +0000323768 00000 n +0000323955 00000 n +0000324106 00000 n +0000324272 00000 n +0000324437 00000 n +0000324593 00000 n +0000324731 00000 n +0000326568 00000 n +0000326715 00000 n +0000326829 00000 n +0000327992 00000 n +0000328139 00000 n +0000328253 00000 n +0000329490 00000 n +0000329661 00000 n +0000329870 00000 n +0000330079 00000 n +0000330193 00000 n +0000331329 00000 n +0000331492 00000 n +0000331701 00000 n +0000331815 00000 n +0000332950 00000 n +0000333145 00000 n +0000333297 00000 n +0000333404 00000 n +0000333556 00000 n +0000333709 00000 n +0000333861 00000 n +0000333999 00000 n +0000335662 00000 n +0000335865 00000 n +0000336018 00000 n +0000336171 00000 n +0000336375 00000 n +0000336578 00000 n +0000336683 00000 n +0000336836 00000 n +0000336974 00000 n +0000338448 00000 n +0000338643 00000 n +0000338787 00000 n +0000338931 00000 n +0000339038 00000 n +0000339142 00000 n +0000339248 00000 n +0000339398 00000 n +0000340870 00000 n +0000341033 00000 n +0000341257 00000 n +0000341371 00000 n +0000342552 00000 n +0000342699 00000 n +0000342825 00000 n +0000344314 00000 n +0000344461 00000 n +0000344587 00000 n +0000345980 00000 n +0000346159 00000 n +0000346321 00000 n +0000346482 00000 n +0000346589 00000 n +0000346739 00000 n +0000348463 00000 n +0000348626 00000 n +0000348833 00000 n +0000348959 00000 n +0000350439 00000 n +0000350586 00000 n +0000350700 00000 n +0000351875 00000 n +0000352062 00000 n +0000352218 00000 n +0000352325 00000 n +0000352429 00000 n +0000352536 00000 n +0000352686 00000 n +0000354347 00000 n +0000354518 00000 n +0000354725 00000 n +0000354948 00000 n +0000355062 00000 n +0000356269 00000 n +0000356416 00000 n +0000356530 00000 n +0000357556 00000 n +0000357727 00000 n +0000357883 00000 n +0000358095 00000 n +0000358221 00000 n +0000359616 00000 n +0000359843 00000 n +0000360049 00000 n +0000360259 00000 n +0000360465 00000 n +0000360675 00000 n +0000360884 00000 n +0000361097 00000 n +0000361302 00000 n +0000361511 00000 n +0000361665 00000 n +0000361803 00000 n +0000363543 00000 n +0000363690 00000 n +0000363841 00000 n +0000364984 00000 n +0000365131 00000 n +0000365282 00000 n +0000366853 00000 n +0000367000 00000 n +0000367151 00000 n +0000368723 00000 n +0000368870 00000 n +0000369021 00000 n +0000370653 00000 n +0000370800 00000 n +0000370951 00000 n +0000372829 00000 n +0000372976 00000 n +0000373090 00000 n +0000374428 00000 n +0000374591 00000 n +0000374700 00000 n +0000374838 00000 n +0000376052 00000 n +0000376239 00000 n +0000376394 00000 n +0000376548 00000 n +0000376654 00000 n +0000376760 00000 n +0000376910 00000 n +0000378605 00000 n +0000378776 00000 n +0000378971 00000 n +0000379175 00000 n +0000379301 00000 n +0000380946 00000 n +0000381133 00000 n +0000381289 00000 n +0000381443 00000 n +0000381550 00000 n +0000381657 00000 n +0000381807 00000 n +0000383605 00000 n +0000383776 00000 n +0000383932 00000 n +0000384087 00000 n +0000384225 00000 n +0000385915 00000 n +0000386062 00000 n +0000386188 00000 n +0000387653 00000 n +0000387816 00000 n +0000387923 00000 n +0000388061 00000 n +0000389590 00000 n +0000389769 00000 n +0000389913 00000 n +0000390020 00000 n +0000390127 00000 n +0000390277 00000 n +0000392008 00000 n +0000392171 00000 n +0000392315 00000 n +0000392453 00000 n +0000393863 00000 n +0000394010 00000 n +0000394124 00000 n +0000395268 00000 n +0000395439 00000 n +0000395584 00000 n +0000395691 00000 n +0000395841 00000 n +0000397388 00000 n +0000397559 00000 n +0000397711 00000 n +0000397818 00000 n +0000397968 00000 n +0000399634 00000 n +0000399821 00000 n +0000399963 00000 n +0000400067 00000 n +0000400173 00000 n +0000400399 00000 n +0000400549 00000 n +0000402140 00000 n +0000402287 00000 n +0000402425 00000 n +0000403747 00000 n +0000403910 00000 n +0000404052 00000 n +0000404202 00000 n +0000405771 00000 n +0000405947 00000 n +0000406055 00000 n +0000406163 00000 n +0000406302 00000 n +0000407803 00000 n +0000408006 00000 n +0000408216 00000 n +0000408369 00000 n +0000408522 00000 n +0000408663 00000 n +0000408804 00000 n +0000408943 00000 n +0000410519 00000 n +0000410669 00000 n +0000410796 00000 n +0000412394 00000 n +0000412544 00000 n +0000412659 00000 n +0000413677 00000 n +0000413827 00000 n +0000413929 00000 n +0000415604 00000 n +0000415754 00000 n +0000415893 00000 n +0000417736 00000 n +0000417886 00000 n +0000418000 00000 n +0000419162 00000 n +0000419312 00000 n +0000419414 00000 n +0000419932 00000 n +0000420252 00000 n +0000420359 00000 n +0000420466 00000 n +0000420574 00000 n +0000420682 00000 n +0000420790 00000 n +0000420898 00000 n +0000421005 00000 n +0000421113 00000 n +0000421221 00000 n +0000421327 00000 n +0000421435 00000 n +0000421540 00000 n +0000421647 00000 n +0000421755 00000 n +0000421863 00000 n +0000421971 00000 n +0000422077 00000 n +0000422185 00000 n +0000422299 00000 n +0000424661 00000 n +0000424891 00000 n +0000424998 00000 n +0000425104 00000 n +0000425212 00000 n +0000425319 00000 n +0000425426 00000 n +0000425534 00000 n +0000425641 00000 n +0000425749 00000 n +0000425888 00000 n +0000427821 00000 n +0000427971 00000 n +0000428110 00000 n +0000429403 00000 n +0000429553 00000 n +0000429692 00000 n +0000431637 00000 n +0000431787 00000 n +0000431914 00000 n +0000433400 00000 n +0000433567 00000 n +0000433724 00000 n +0000433875 00000 n +0000435863 00000 n +0000436030 00000 n +0000436187 00000 n +0000436338 00000 n +0000437917 00000 n +0000438084 00000 n +0000438241 00000 n +0000438392 00000 n +0000440654 00000 n +0000440830 00000 n +0000440980 00000 n +0000441092 00000 n +0000441231 00000 n +0000443616 00000 n +0000443766 00000 n +0000443905 00000 n +0000445229 00000 n +0000445379 00000 n +0000445518 00000 n +0000446951 00000 n +0000447163 00000 n +0000447315 00000 n +0000447482 00000 n +0000447648 00000 n +0000447805 00000 n +0000447917 00000 n +0000448029 00000 n +0000448168 00000 n +0000450680 00000 n +0000450830 00000 n +0000450981 00000 n +0000452987 00000 n +0000453137 00000 n +0000453276 00000 n +0000455110 00000 n +0000455260 00000 n +0000455399 00000 n +0000457348 00000 n +0000457498 00000 n +0000457637 00000 n +0000459531 00000 n +0000459681 00000 n +0000459820 00000 n +0000461472 00000 n +0000461622 00000 n +0000461761 00000 n +0000463440 00000 n +0000463590 00000 n +0000463741 00000 n +0000465612 00000 n +0000465762 00000 n +0000465901 00000 n +0000468176 00000 n +0000468326 00000 n +0000468465 00000 n +0000470235 00000 n +0000470385 00000 n +0000470524 00000 n +0000472171 00000 n +0000472321 00000 n +0000472460 00000 n +0000474283 00000 n +0000474433 00000 n +0000474572 00000 n +0000476517 00000 n +0000476667 00000 n +0000476806 00000 n +0000478483 00000 n +0000478633 00000 n +0000478784 00000 n +0000480815 00000 n +0000480965 00000 n +0000481116 00000 n +0000483299 00000 n +0000483449 00000 n +0000483600 00000 n +0000486136 00000 n +0000486286 00000 n +0000486425 00000 n +0000488291 00000 n +0000488441 00000 n +0000488568 00000 n +0000490058 00000 n +0000490261 00000 n +0000490415 00000 n +0000490568 00000 n +0000490679 00000 n +0000490788 00000 n +0000490896 00000 n +0000491047 00000 n +0000493443 00000 n +0000493593 00000 n +0000493732 00000 n +0000495234 00000 n +0000495384 00000 n +0000495535 00000 n +0000497403 00000 n +0000497553 00000 n +0000497692 00000 n +0000499414 00000 n +0000499564 00000 n +0000499703 00000 n +0000501660 00000 n +0000501810 00000 n +0000501949 00000 n +0000503752 00000 n +0000503902 00000 n +0000504041 00000 n +0000505608 00000 n +0000505758 00000 n +0000505897 00000 n +0000507557 00000 n +0000507707 00000 n +0000507846 00000 n +0000509553 00000 n +0000509703 00000 n +0000509842 00000 n +0000511631 00000 n +0000511781 00000 n +0000511920 00000 n +0000513647 00000 n +0000513797 00000 n +0000513936 00000 n +0000515741 00000 n +0000515891 00000 n +0000516042 00000 n +0000517871 00000 n +0000518021 00000 n +0000518160 00000 n +0000519951 00000 n +0000520101 00000 n +0000520252 00000 n +0000522084 00000 n +0000522234 00000 n +0000522373 00000 n +0000524162 00000 n +0000524312 00000 n +0000524451 00000 n +0000526099 00000 n +0000526249 00000 n +0000526388 00000 n +0000528205 00000 n +0000528355 00000 n +0000528494 00000 n +0000529996 00000 n +0000530146 00000 n +0000530285 00000 n +0000531814 00000 n +0000531964 00000 n +0000532103 00000 n +0000533945 00000 n +0000534095 00000 n +0000534246 00000 n +0000536176 00000 n +0000536326 00000 n +0000536465 00000 n +0000538482 00000 n +0000538632 00000 n +0000538771 00000 n +0000540363 00000 n +0000540513 00000 n +0000540664 00000 n +0000542625 00000 n +0000542775 00000 n +0000542914 00000 n +0000544817 00000 n +0000544967 00000 n +0000545106 00000 n +0000546790 00000 n +0000546940 00000 n +0000547079 00000 n +0000548799 00000 n +0000548949 00000 n +0000549101 00000 n +0000550939 00000 n +0000551089 00000 n +0000551228 00000 n +0000553096 00000 n +0000553246 00000 n +0000553385 00000 n +0000555162 00000 n +0000555312 00000 n +0000555451 00000 n +0000557477 00000 n +0000557627 00000 n +0000557766 00000 n +0000559914 00000 n +0000560064 00000 n +0000560203 00000 n +0000561945 00000 n +0000562095 00000 n +0000562234 00000 n +0000564018 00000 n +0000564168 00000 n +0000564307 00000 n +0000566111 00000 n +0000566261 00000 n +0000566400 00000 n +0000568061 00000 n +0000568211 00000 n +0000568350 00000 n +0000570022 00000 n +0000570172 00000 n +0000570311 00000 n +0000571680 00000 n +0000571830 00000 n +0000571969 00000 n +0000573434 00000 n +0000573584 00000 n +0000573723 00000 n +0000575068 00000 n +0000575218 00000 n +0000575345 00000 n +0000576806 00000 n +0000577018 00000 n +0000577160 00000 n +0000577272 00000 n +0000577384 00000 n +0000577493 00000 n +0000577601 00000 n +0000577713 00000 n +0000577864 00000 n +0000580164 00000 n +0000580314 00000 n +0000580465 00000 n +0000582388 00000 n +0000582538 00000 n +0000582677 00000 n +0000584419 00000 n +0000584595 00000 n +0000584819 00000 n +0000585041 00000 n +0000585192 00000 n +0000587292 00000 n +0000587442 00000 n +0000587581 00000 n +0000589382 00000 n +0000589558 00000 n +0000589782 00000 n +0000590004 00000 n +0000590155 00000 n +0000592197 00000 n +0000592347 00000 n +0000592498 00000 n +0000594402 00000 n +0000594552 00000 n +0000594703 00000 n +0000596412 00000 n +0000596562 00000 n +0000596713 00000 n +0000598442 00000 n +0000598627 00000 n +0000598791 00000 n +0000598900 00000 n +0000599008 00000 n +0000599147 00000 n +0000601083 00000 n +0000601233 00000 n +0000601372 00000 n +0000603165 00000 n +0000603315 00000 n +0000603466 00000 n +0000605669 00000 n +0000605819 00000 n +0000605958 00000 n +0000607912 00000 n +0000608062 00000 n +0000608201 00000 n +0000609981 00000 n +0000610131 00000 n +0000610270 00000 n +0000611906 00000 n +0000612091 00000 n +0000612247 00000 n +0000612359 00000 n +0000612471 00000 n +0000612622 00000 n +0000614762 00000 n +0000614912 00000 n +0000615051 00000 n +0000616608 00000 n +0000616758 00000 n +0000616897 00000 n +0000618557 00000 n +0000618707 00000 n +0000618846 00000 n +0000620651 00000 n +0000620801 00000 n +0000620952 00000 n +0000622710 00000 n +0000622860 00000 n +0000622999 00000 n +0000624676 00000 n +0000624826 00000 n +0000624977 00000 n +0000626547 00000 n +0000626697 00000 n +0000626848 00000 n +0000628575 00000 n +0000628725 00000 n +0000628876 00000 n +0000630488 00000 n +0000630664 00000 n +0000630821 00000 n +0000630933 00000 n +0000631072 00000 n +0000633089 00000 n +0000633239 00000 n +0000633390 00000 n +0000634919 00000 n +0000635069 00000 n +0000635208 00000 n +0000637120 00000 n +0000637270 00000 n +0000637421 00000 n +0000639650 00000 n +0000639800 00000 n +0000639939 00000 n +0000641877 00000 n +0000642027 00000 n +0000642166 00000 n +0000644084 00000 n +0000644251 00000 n +0000644408 00000 n +0000644547 00000 n +0000645980 00000 n +0000646147 00000 n +0000646302 00000 n +0000646453 00000 n +0000648404 00000 n +0000648598 00000 n +0000648753 00000 n +0000648863 00000 n +0000648974 00000 n +0000649085 00000 n +0000649236 00000 n +0000651674 00000 n +0000651824 00000 n +0000651963 00000 n +0000653771 00000 n +0000653921 00000 n +0000654060 00000 n +0000655983 00000 n +0000656186 00000 n +0000656296 00000 n +0000656404 00000 n +0000656512 00000 n +0000656617 00000 n +0000656725 00000 n +0000656876 00000 n +0000658747 00000 n +0000658897 00000 n +0000659036 00000 n +0000660898 00000 n +0000661065 00000 n +0000661177 00000 n +0000661316 00000 n +0000663128 00000 n +0000663278 00000 n +0000663417 00000 n +0000665007 00000 n +0000665201 00000 n +0000665358 00000 n +0000665514 00000 n +0000665623 00000 n +0000665731 00000 n +0000665870 00000 n +0000667681 00000 n +0000667831 00000 n +0000667982 00000 n +0000669752 00000 n +0000669902 00000 n +0000670053 00000 n +0000671735 00000 n +0000671885 00000 n +0000672036 00000 n +0000673857 00000 n +0000674042 00000 n +0000674198 00000 n +0000674307 00000 n +0000674415 00000 n +0000674554 00000 n +0000676159 00000 n +0000676309 00000 n +0000676460 00000 n +0000678192 00000 n +0000678359 00000 n +0000678499 00000 n +0000678650 00000 n +0000680561 00000 n +0000680737 00000 n +0000680961 00000 n +0000681183 00000 n +0000681334 00000 n +0000683148 00000 n +0000683324 00000 n +0000683465 00000 n +0000683577 00000 n +0000683728 00000 n +0000685836 00000 n +0000685986 00000 n +0000686125 00000 n +0000687617 00000 n +0000687767 00000 n +0000687906 00000 n +0000689809 00000 n +0000689959 00000 n +0000690123 00000 n +0000691727 00000 n +0000691894 00000 n +0000692041 00000 n +0000692167 00000 n +0000694472 00000 n +0000694657 00000 n +0000694801 00000 n +0000694912 00000 n +0000695021 00000 n +0000695172 00000 n +0000697432 00000 n +0000697599 00000 n +0000697706 00000 n +0000697857 00000 n +0000699552 00000 n +0000699728 00000 n +0000699836 00000 n +0000699941 00000 n +0000700092 00000 n +0000702009 00000 n +0000702176 00000 n +0000702281 00000 n +0000702432 00000 n +0000704282 00000 n +0000704467 00000 n +0000704575 00000 n +0000704683 00000 n +0000704791 00000 n +0000704942 00000 n +0000707031 00000 n +0000707181 00000 n +0000707320 00000 n +0000709311 00000 n +0000709461 00000 n +0000709600 00000 n +0000711426 00000 n +0000711576 00000 n +0000711715 00000 n +0000713042 00000 n +0000713236 00000 n +0000713383 00000 n +0000713495 00000 n +0000713604 00000 n +0000713712 00000 n +0000713863 00000 n +0000715934 00000 n +0000716084 00000 n +0000716235 00000 n +0000718301 00000 n +0000718451 00000 n +0000718590 00000 n +0000720400 00000 n +0000720567 00000 n +0000720723 00000 n +0000720874 00000 n +0000722729 00000 n +0000722879 00000 n +0000723030 00000 n +0000725035 00000 n +0000725185 00000 n +0000725324 00000 n +0000727585 00000 n +0000727735 00000 n +0000727874 00000 n +0000730080 00000 n +0000730230 00000 n +0000730345 00000 n +0000731090 00000 n +0000731275 00000 n +0000731381 00000 n +0000731490 00000 n +0000731599 00000 n +0000731750 00000 n +0000733490 00000 n +0000733640 00000 n +0000733779 00000 n +0000735219 00000 n +0000735369 00000 n +0000735484 00000 n +0000736074 00000 n +0000736224 00000 n +0000736326 00000 n +0000736844 00000 n +0000736994 00000 n +0000737133 00000 n +0000739075 00000 n +0000739225 00000 n +0000739376 00000 n +0000741614 00000 n +0000741764 00000 n +0000741879 00000 n +0000742709 00000 n +0000742859 00000 n +0000742961 00000 n +0000743476 00000 n +0000743652 00000 n +0000743760 00000 n +0000743869 00000 n +0000743996 00000 n +0000745212 00000 n +0000745362 00000 n +0000745477 00000 n +0000746621 00000 n +0000746771 00000 n +0000746886 00000 n +0000748036 00000 n +0000748186 00000 n +0000748301 00000 n +0000749561 00000 n +0000749711 00000 n +0000749826 00000 n +0000750984 00000 n +0000751134 00000 n +0000751249 00000 n +0000752370 00000 n +0000752520 00000 n +0000752635 00000 n +0000753797 00000 n +0000753947 00000 n +0000754062 00000 n +0000755237 00000 n +0000755387 00000 n +0000755502 00000 n +0000756563 00000 n +0000756713 00000 n +0000756828 00000 n +0000757782 00000 n +0000757932 00000 n +0000758047 00000 n +0000759177 00000 n +0000759327 00000 n +0000759442 00000 n +0000760497 00000 n +0000760647 00000 n +0000760762 00000 n +0000761767 00000 n +0000761917 00000 n +0000762032 00000 n +0000762954 00000 n +0000763104 00000 n +0000763219 00000 n +0000764410 00000 n +0000764560 00000 n +0000764675 00000 n +0000765745 00000 n +0000765895 00000 n +0000766010 00000 n +0000767228 00000 n +0000767378 00000 n +0000767493 00000 n +0000768634 00000 n +0000768784 00000 n +0000768899 00000 n +0000770212 00000 n +0000770362 00000 n +0000770477 00000 n +0000771685 00000 n +0000771835 00000 n +0000771950 00000 n +0000773181 00000 n +0000773331 00000 n +0000773446 00000 n +0000774722 00000 n +0000774872 00000 n +0000774987 00000 n +0000776062 00000 n +0000776212 00000 n +0000776327 00000 n +0000777461 00000 n +0000777611 00000 n +0000777726 00000 n +0000778840 00000 n +0000778990 00000 n +0000779105 00000 n +0000780207 00000 n +0000780357 00000 n +0000780472 00000 n +0000781709 00000 n +0000781859 00000 n +0000781974 00000 n +0000783114 00000 n +0000783264 00000 n +0000783379 00000 n +0000784481 00000 n +0000784631 00000 n +0000784746 00000 n +0000785797 00000 n +0000785947 00000 n +0000786062 00000 n +0000787198 00000 n +0000787348 00000 n +0000787463 00000 n +0000788529 00000 n +0000788679 00000 n +0000788794 00000 n +0000789975 00000 n +0000790125 00000 n +0000790240 00000 n +0000791375 00000 n +0000791525 00000 n +0000791640 00000 n +0000792800 00000 n +0000792950 00000 n +0000793065 00000 n +0000794235 00000 n +0000794385 00000 n +0000794500 00000 n +0000795704 00000 n +0000795854 00000 n +0000795969 00000 n +0000796939 00000 n +0000797089 00000 n +0000797204 00000 n +0000798328 00000 n +0000798478 00000 n +0000798593 00000 n +0000799631 00000 n +0000799781 00000 n +0000799896 00000 n +0000800993 00000 n +0000801143 00000 n +0000801258 00000 n +0000802384 00000 n +0000802534 00000 n +0000802649 00000 n +0000803686 00000 n +0000803836 00000 n +0000803951 00000 n +0000805001 00000 n +0000805151 00000 n +0000805266 00000 n +0000806408 00000 n +0000806558 00000 n +0000806673 00000 n +0000807843 00000 n +0000807993 00000 n +0000808108 00000 n +0000809308 00000 n +0000809458 00000 n +0000809573 00000 n +0000810733 00000 n +0000810883 00000 n +0000810998 00000 n +0000812056 00000 n +0000812206 00000 n +0000812321 00000 n +0000813288 00000 n +0000813438 00000 n +0000813553 00000 n +0000814587 00000 n +0000814737 00000 n +0000814852 00000 n +0000815957 00000 n +0000816107 00000 n +0000816222 00000 n +0000817293 00000 n +0000817443 00000 n +0000817558 00000 n +0000818565 00000 n +0000818715 00000 n +0000818830 00000 n +0000819975 00000 n +0000820125 00000 n +0000820240 00000 n +0000821338 00000 n +0000821488 00000 n +0000821603 00000 n +0000822705 00000 n +0000822855 00000 n +0000822970 00000 n +0000823895 00000 n +0000824045 00000 n +0000824160 00000 n +0000825140 00000 n +0000825290 00000 n +0000825405 00000 n +0000826325 00000 n +0000826475 00000 n +0000826590 00000 n +0000827534 00000 n +0000827684 00000 n +0000827799 00000 n +0000828734 00000 n +0000828884 00000 n +0000828999 00000 n +0000829838 00000 n +0000829988 00000 n +0000830103 00000 n +0000830991 00000 n +0000831141 00000 n +0000831256 00000 n +0000832144 00000 n +0000832294 00000 n +0000832409 00000 n +0000833346 00000 n +0000833496 00000 n +0000833611 00000 n +0000834526 00000 n +0000834676 00000 n +0000834791 00000 n +0000835659 00000 n +0000835809 00000 n +0000835924 00000 n +0000836918 00000 n +0000837068 00000 n +0000837183 00000 n +0000838111 00000 n +0000838261 00000 n +0000838376 00000 n +0000839231 00000 n +0000839381 00000 n +0000839496 00000 n +0000840311 00000 n +0000840461 00000 n +0000840576 00000 n +0000841488 00000 n +0000841638 00000 n +0000841753 00000 n +0000842597 00000 n +0000842747 00000 n +0000842862 00000 n +0000843804 00000 n +0000843954 00000 n +0000844069 00000 n +0000844992 00000 n +0000845142 00000 n +0000845257 00000 n +0000846091 00000 n +0000846241 00000 n +0000846356 00000 n +0000847300 00000 n +0000847450 00000 n +0000847565 00000 n +0000848408 00000 n +0000848558 00000 n +0000848673 00000 n +0000849616 00000 n +0000849766 00000 n +0000849881 00000 n +0000850819 00000 n +0000850969 00000 n +0000851084 00000 n +0000851970 00000 n +0000852120 00000 n +0000852235 00000 n +0000853093 00000 n +0000853243 00000 n +0000853358 00000 n +0000854221 00000 n +0000854371 00000 n +0000854486 00000 n +0000855464 00000 n +0000855614 00000 n +0000855729 00000 n +0000856790 00000 n +0000856940 00000 n +0000857055 00000 n +0000857946 00000 n +0000858096 00000 n +0000858211 00000 n +0000859103 00000 n +0000859253 00000 n +0000859368 00000 n +0000860307 00000 n +0000860457 00000 n +0000860572 00000 n +0000861641 00000 n +0000861791 00000 n +0000861906 00000 n +0000862902 00000 n +0000863052 00000 n +0000863167 00000 n +0000864103 00000 n +0000864253 00000 n +0000864368 00000 n +0000865288 00000 n +0000865438 00000 n +0000865553 00000 n +0000866418 00000 n +0000866568 00000 n +0000866683 00000 n +0000867583 00000 n +0000867733 00000 n +0000867848 00000 n +0000868752 00000 n +0000868902 00000 n +0000869017 00000 n +0000869960 00000 n +0000870110 00000 n +0000870225 00000 n +0000871096 00000 n +0000871246 00000 n +0000871361 00000 n +0000872221 00000 n +0000872371 00000 n +0000872486 00000 n +0000873318 00000 n +0000873468 00000 n +0000873583 00000 n +0000874622 00000 n +0000874772 00000 n +0000874874 00000 n +0000875390 00000 n +0000875999 00000 n +0000876539 00000 n +0000881371 00000 n +0000881528 00000 n +0000881980 00000 n +0000882343 00000 n +0000886256 00000 n +0000886808 00000 n +0000887377 00000 n +0000892535 00000 n +0000893011 00000 n +0000893367 00000 n +0000895965 00000 n +0000896137 00000 n +0000896425 00000 n +0000896623 00000 n +0000896990 00000 n +0000897046 00000 n +0000897097 00000 n +0000897679 00000 n +0000897943 00000 n +0000930129 00000 n +0000930422 00000 n +0000930698 00000 n +0000945035 00000 n +0000945442 00000 n +0000946695 00000 n +0000948039 00000 n +0000949383 00000 n +0000950727 00000 n +0000952071 00000 n +0000953415 00000 n +0000954759 00000 n +0000956103 00000 n +0000957447 00000 n +0000958791 00000 n +0000960196 00000 n +0000961606 00000 n +0000963016 00000 n +0000964426 00000 n +0000965836 00000 n +0000967246 00000 n +0000968656 00000 n +0000970082 00000 n +0000971558 00000 n +0000973034 00000 n +0000974510 00000 n +0000975986 00000 n +0000977462 00000 n +0000978938 00000 n +0000980414 00000 n +0000981890 00000 n +0000983366 00000 n +0000984842 00000 n +0000986318 00000 n +0000988304 00000 n +0000991564 00000 n +0000994376 00000 n +0000997665 00000 n +0001000968 00000 n +0001004423 00000 n +0001007742 00000 n +0001009406 00000 n +0001010415 00000 n +0001011419 00000 n +0001012425 00000 n +0001013413 00000 n +0001014175 00000 n +0001014228 00000 n +0001014281 00000 n +0001014334 00000 n +0001014387 00000 n +0001014440 00000 n +0001014493 00000 n +0001014546 00000 n +0001014599 00000 n +0001014652 00000 n +0001014705 00000 n +0001014758 00000 n +0001014811 00000 n +0001014864 00000 n +0001014917 00000 n +0001014970 00000 n +0001015023 00000 n +0001015076 00000 n +0001015129 00000 n +0001015182 00000 n +0001015235 00000 n +0001015288 00000 n +0001015341 00000 n +0001015394 00000 n +0001015447 00000 n +0001015500 00000 n +0001015553 00000 n +0001015606 00000 n +0001015659 00000 n +0001015712 00000 n +0001015765 00000 n +0001015818 00000 n +0001015871 00000 n +0001015924 00000 n +0001015977 00000 n +0001016030 00000 n +0001016083 00000 n +0001016136 00000 n +0001016189 00000 n +0001016242 00000 n +0001016295 00000 n +0001016348 00000 n +0001016401 00000 n +0001016454 00000 n +0001016507 00000 n +0001016560 00000 n +0001016613 00000 n +0001016666 00000 n +0001016719 00000 n +0001016773 00000 n +0001016827 00000 n +0001016881 00000 n +0001016935 00000 n +0001016989 00000 n +0001017043 00000 n +0001017097 00000 n +0001017151 00000 n +0001017205 00000 n +0001017258 00000 n +0001017312 00000 n +0001017366 00000 n +0001017420 00000 n +0001017474 00000 n +0001017528 00000 n +0001017582 00000 n +0001017636 00000 n +0001017690 00000 n +0001017744 00000 n +0001017798 00000 n +0001017851 00000 n +0001017905 00000 n +0001017959 00000 n +0001018013 00000 n +0001018067 00000 n +0001018121 00000 n +0001018175 00000 n +0001018229 00000 n +0001018283 00000 n +0001018337 00000 n +0001018391 00000 n +0001018444 00000 n +0001018498 00000 n +0001018552 00000 n +0001018606 00000 n +0001018660 00000 n +0001018714 00000 n +0001018768 00000 n +0001018822 00000 n +0001018876 00000 n +0001018930 00000 n +0001018984 00000 n +0001019037 00000 n +0001019091 00000 n +0001019145 00000 n +0001019199 00000 n +0001019253 00000 n +0001019307 00000 n +0001019360 00000 n +0001019413 00000 n +0001019466 00000 n +0001019519 00000 n +0001019571 00000 n +0001019624 00000 n +0001019677 00000 n +0001019730 00000 n +0001019783 00000 n +0001019836 00000 n +0001019889 00000 n +0001019942 00000 n +0001019995 00000 n +0001020048 00000 n +0001020101 00000 n +0001020153 00000 n +0001020206 00000 n +0001020259 00000 n +0001020312 00000 n +0001020366 00000 n +0001020420 00000 n +0001020474 00000 n +0001020527 00000 n +0001020581 00000 n +0001020635 00000 n +0001020689 00000 n +0001020743 00000 n +0001020797 00000 n +0001020851 00000 n +0001020905 00000 n +0001020959 00000 n +0001021013 00000 n +0001021067 00000 n +0001021120 00000 n +0001021174 00000 n +0001021228 00000 n +0001021282 00000 n +0001021336 00000 n +0001021390 00000 n +0001021444 00000 n +0001021498 00000 n +0001021552 00000 n +0001021606 00000 n +0001021660 00000 n +0001021713 00000 n +0001021767 00000 n +0001021821 00000 n +0001021875 00000 n +0001021929 00000 n +0001021983 00000 n +0001022037 00000 n +0001022091 00000 n +0001022145 00000 n +0001022199 00000 n +0001022253 00000 n +0001022306 00000 n +0001022360 00000 n +0001022414 00000 n +0001022468 00000 n +0001022522 00000 n +0001022576 00000 n +0001022630 00000 n +0001022684 00000 n +0001022738 00000 n +0001022792 00000 n +0001022846 00000 n +0001022897 00000 n +0001022950 00000 n +0001023004 00000 n +0001023058 00000 n +0001023112 00000 n +0001023166 00000 n +0001023220 00000 n +0001023274 00000 n +0001023328 00000 n +0001023382 00000 n +0001023436 00000 n +0001023490 00000 n +0001023543 00000 n +0001023597 00000 n +0001023651 00000 n +0001023705 00000 n +0001023759 00000 n +0001023810 00000 n +0001023863 00000 n +0001023917 00000 n +0001023971 00000 n +0001024025 00000 n +0001024079 00000 n +0001024133 00000 n +0001024187 00000 n +0001024241 00000 n +0001024295 00000 n +0001024349 00000 n +0001024403 00000 n +0001024456 00000 n +0001024510 00000 n +0001024564 00000 n +0001024618 00000 n +0001024672 00000 n +0001024726 00000 n +0001024780 00000 n +0001024834 00000 n +0001024888 00000 n +0001024942 00000 n +0001024996 00000 n +0001025049 00000 n +0001025103 00000 n +0001025157 00000 n +0001025211 00000 n +0001025265 00000 n +0001025319 00000 n +0001025373 00000 n +0001025427 00000 n +0001025481 00000 n +0001025535 00000 n +0001025589 00000 n +0001025642 00000 n +0001025696 00000 n +0001025750 00000 n +0001025804 00000 n +0001025858 00000 n +0001025912 00000 n +0001025966 00000 n +0001026020 00000 n +0001026074 00000 n +0001026128 00000 n +0001026182 00000 n +0001026235 00000 n +0001026289 00000 n +0001026343 00000 n +0001026397 00000 n +0001026451 00000 n +0001026505 00000 n +0001026559 00000 n +0001026613 00000 n +0001026667 00000 n +0001026721 00000 n +0001026775 00000 n +0001026828 00000 n +0001026882 00000 n +0001026936 00000 n +0001026990 00000 n +0001027044 00000 n +0001027098 00000 n +0001027152 00000 n +0001027206 00000 n +0001027260 00000 n +0001027314 00000 n +0001027368 00000 n +0001027422 00000 n +0001027476 00000 n +0001027530 00000 n +0001027584 00000 n +0001027638 00000 n +0001027692 00000 n +0001027745 00000 n +0001027799 00000 n +0001027853 00000 n +0001027907 00000 n +0001027961 00000 n +0001028015 00000 n +0001028069 00000 n +0001028123 00000 n +0001028177 00000 n +0001028231 00000 n +0001028285 00000 n +0001028338 00000 n +0001028392 00000 n +0001028446 00000 n +0001028500 00000 n +0001028554 00000 n +0001028608 00000 n +0001028662 00000 n +0001028716 00000 n +0001028770 00000 n +0001028824 00000 n +0001028878 00000 n +0001028931 00000 n +0001028985 00000 n +0001029039 00000 n +0001029093 00000 n +0001029147 00000 n +0001029201 00000 n +0001029255 00000 n +0001029309 00000 n +0001029363 00000 n +0001029417 00000 n +0001029471 00000 n +0001029524 00000 n +0001029578 00000 n +0001029632 00000 n +0001029686 00000 n +0001029740 00000 n +0001029794 00000 n +0001029848 00000 n +0001029902 00000 n +0001029956 00000 n +0001030010 00000 n +0001030064 00000 n +0001030117 00000 n +0001030171 00000 n +0001030225 00000 n +0001030279 00000 n +0001030333 00000 n +0001030387 00000 n +0001030441 00000 n +0001030495 00000 n +0001030549 00000 n +0001030603 00000 n +0001030657 00000 n +0001030708 00000 n +0001030759 00000 n +0001030810 00000 n +0001030860 00000 n +0001030911 00000 n +0001030962 00000 n +0001031013 00000 n +0001031064 00000 n +0001031115 00000 n +0001031166 00000 n +0001031217 00000 n +0001031268 00000 n +0001031319 00000 n +0001031370 00000 n +0001031421 00000 n +0001031472 00000 n +0001031523 00000 n +0001031577 00000 n +0001031630 00000 n +0001031684 00000 n +0001031738 00000 n +0001031792 00000 n +0001031846 00000 n +0001031900 00000 n +0001031954 00000 n +0001032008 00000 n +0001032062 00000 n +0001032116 00000 n +0001032170 00000 n +0001032223 00000 n +0001032277 00000 n +0001032331 00000 n +0001032385 00000 n +0001032439 00000 n +0001032493 00000 n +0001032547 00000 n +0001032601 00000 n +0001032655 00000 n +0001032709 00000 n +0001032763 00000 n +0001032816 00000 n +0001032870 00000 n +0001032924 00000 n +0001032978 00000 n +0001033032 00000 n +0001033086 00000 n +0001033140 00000 n +0001033194 00000 n +0001033248 00000 n +0001033302 00000 n +0001033356 00000 n +0001033409 00000 n +0001033463 00000 n +0001033517 00000 n +0001033571 00000 n +0001033625 00000 n +0001033679 00000 n +0001033733 00000 n +0001033787 00000 n +0001033841 00000 n +0001033895 00000 n +0001033949 00000 n +0001034002 00000 n +0001034056 00000 n +0001034107 00000 n +0001034158 00000 n +0001034209 00000 n +0001034260 00000 n +0001034312 00000 n +0001034364 00000 n +0001034416 00000 n +0001034467 00000 n +0001034519 00000 n +0001034571 00000 n +0001034623 00000 n +0001034675 00000 n +0001034727 00000 n +0001034779 00000 n +0001034831 00000 n +0001034883 00000 n +0001034935 00000 n +0001034987 00000 n +0001035039 00000 n +0001035091 00000 n +0001035142 00000 n +0001035193 00000 n +0001035244 00000 n +0001035295 00000 n +0001035346 00000 n +0001035397 00000 n +0001035448 00000 n +0001035498 00000 n +0001035549 00000 n +0001035600 00000 n +0001035651 00000 n +0001035702 00000 n +0001035753 00000 n +0001035804 00000 n +0001035855 00000 n +0001035906 00000 n +0001035957 00000 n +0001036008 00000 n +0001036059 00000 n +0001036109 00000 n +0001036160 00000 n +0001036211 00000 n +0001036262 00000 n +0001036313 00000 n +0001036364 00000 n +0001036415 00000 n +0001036466 00000 n +0001036517 00000 n +0001036568 00000 n +0001036619 00000 n +0001036670 00000 n +0001036721 00000 n +0001036772 00000 n +0001036823 00000 n +0001036874 00000 n +0001036925 00000 n +0001036976 00000 n +0001037027 00000 n +0001037078 00000 n +0001037129 00000 n +0001037180 00000 n +0001037231 00000 n +0001037282 00000 n +0001037333 00000 n +0001037385 00000 n +0001037437 00000 n +0001037488 00000 n +0001037540 00000 n +0001037592 00000 n +0001037643 00000 n +0001037695 00000 n +0001037746 00000 n +0001037798 00000 n +0001037850 00000 n +0001037902 00000 n +0001037953 00000 n +0001038004 00000 n +0001038055 00000 n +0001038106 00000 n +0001038157 00000 n +0001038208 00000 n +0001038259 00000 n +0001038310 00000 n +0001038361 00000 n +0001038412 00000 n +0001038464 00000 n +0001038516 00000 n +0001038568 00000 n +0001038620 00000 n +0001038671 00000 n +0001038722 00000 n +0001038774 00000 n +0001038826 00000 n +0001038877 00000 n +0001038928 00000 n +0001038980 00000 n +0001039031 00000 n +0001039082 00000 n +0001039133 00000 n +0001039184 00000 n +0001039235 00000 n +0001039287 00000 n +0001039338 00000 n +0001039389 00000 n +0001039440 00000 n +0001039492 00000 n +0001039544 00000 n +0001039595 00000 n +0001039647 00000 n +0001039699 00000 n +0001039751 00000 n +0001039803 00000 n +0001039855 00000 n +0001039906 00000 n +0001039957 00000 n +0001040008 00000 n +0001040059 00000 n +0001040110 00000 n +0001040161 00000 n +0001040213 00000 n +0001040265 00000 n +0001040317 00000 n +0001040369 00000 n +0001040421 00000 n +0001040473 00000 n +0001040525 00000 n +0001040577 00000 n +0001040629 00000 n +0001040681 00000 n +0001040733 00000 n +0001040784 00000 n +0001040836 00000 n +0001040888 00000 n +0001040939 00000 n +0001040990 00000 n +0001041041 00000 n +0001041093 00000 n +0001041145 00000 n +0001041196 00000 n +0001041248 00000 n +0001041299 00000 n +0001041350 00000 n +0001041401 00000 n +0001041452 00000 n +0001041503 00000 n +0001041554 00000 n +0001041605 00000 n +0001041656 00000 n +0001041707 00000 n +0001041758 00000 n +0001041809 00000 n +0001041860 00000 n +0001041911 00000 n +0001041962 00000 n +0001042013 00000 n +0001042064 00000 n +0001042115 00000 n +0001042166 00000 n +0001042217 00000 n +0001042268 00000 n +0001042319 00000 n +0001042370 00000 n +0001042421 00000 n +0001042473 00000 n +0001042525 00000 n +0001042576 00000 n +0001042627 00000 n +0001042679 00000 n +0001042730 00000 n +0001042781 00000 n +0001042832 00000 n +0001042883 00000 n +0001042934 00000 n +0001042985 00000 n +0001043036 00000 n +0001043087 00000 n +0001043138 00000 n +0001043190 00000 n +0001043241 00000 n +0001043292 00000 n +0001043344 00000 n +0001043396 00000 n +0001043447 00000 n +0001043499 00000 n +0001043551 00000 n +0001043603 00000 n +0001043655 00000 n +0001043707 00000 n +0001043759 00000 n +0001043811 00000 n +0001043863 00000 n +0001043914 00000 n +0001043964 00000 n +0001044013 00000 n +0001044063 00000 n +0001044114 00000 n +0001044164 00000 n +0001044214 00000 n +0001044264 00000 n +0001044314 00000 n +0001044364 00000 n +0001044414 00000 n +0001044464 00000 n +0001044514 00000 n +0001044564 00000 n +0001044613 00000 n +0001044663 00000 n +0001044713 00000 n +0001044764 00000 n +0001044814 00000 n +0001044864 00000 n +0001044914 00000 n +0001044964 00000 n +0001045015 00000 n +0001045065 00000 n +0001045115 00000 n +0001045165 00000 n +0001045215 00000 n +0001045265 00000 n +0001045315 00000 n +0001045365 00000 n +0001045415 00000 n +0001045465 00000 n +0001045515 00000 n +0001045565 00000 n +0001045615 00000 n +0001045666 00000 n +0001045716 00000 n +0001045766 00000 n +0001045816 00000 n +0001045866 00000 n +0001045916 00000 n +0001045966 00000 n +0001046016 00000 n +0001046066 00000 n +0001046116 00000 n +0001046166 00000 n +0001046216 00000 n +0001046266 00000 n +0001046316 00000 n +0001046366 00000 n +0001046416 00000 n +0001046466 00000 n +0001046515 00000 n +0001046565 00000 n +0001046615 00000 n +0001046665 00000 n +0001046715 00000 n +0001046765 00000 n +0001046815 00000 n +0001046865 00000 n +0001046915 00000 n +0001046965 00000 n +0001047015 00000 n +0001047065 00000 n +0001047116 00000 n +0001047166 00000 n +0001047216 00000 n +0001047266 00000 n +0001047316 00000 n +0001047365 00000 n +0001047415 00000 n +0001047465 00000 n +0001047515 00000 n +0001047565 00000 n +0001047615 00000 n +0001047665 00000 n +0001047715 00000 n +0001047765 00000 n +0001047815 00000 n +0001047864 00000 n +0001047914 00000 n +0001047964 00000 n +0001048014 00000 n +0001048065 00000 n +0001048116 00000 n +0001048167 00000 n +0001048218 00000 n +0001048268 00000 n +0001048318 00000 n +0001048368 00000 n +0001048418 00000 n +0001048468 00000 n +0001048518 00000 n +0001048568 00000 n +0001048618 00000 n +0001048668 00000 n +0001048719 00000 n +0001048770 00000 n +0001048820 00000 n +0001048871 00000 n +0001048921 00000 n +0001048972 00000 n +0001049022 00000 n +0001049073 00000 n +0001049123 00000 n +0001049174 00000 n +0001049225 00000 n +0001049275 00000 n +0001049326 00000 n +0001049376 00000 n +0001049427 00000 n +0001049477 00000 n +0001049528 00000 n +0001049578 00000 n +0001049629 00000 n +0001049680 00000 n +0001049730 00000 n +0001049781 00000 n +0001049831 00000 n +0001049881 00000 n +0001049931 00000 n +0001049982 00000 n +0001050033 00000 n +0001050083 00000 n +0001050133 00000 n +0001050183 00000 n +0001050233 00000 n +0001050283 00000 n +0001050333 00000 n +0001050383 00000 n +0001050434 00000 n +0001050483 00000 n +0001050532 00000 n +0001050582 00000 n +0001050632 00000 n +0001050683 00000 n +0001050733 00000 n +0001050783 00000 n +0001050832 00000 n +0001050881 00000 n +0001050931 00000 n +0001050981 00000 n +0001051030 00000 n +0001051080 00000 n +0001051130 00000 n +0001051180 00000 n +0001051231 00000 n +0001051281 00000 n +0001051331 00000 n +0001051381 00000 n +0001051431 00000 n +0001051480 00000 n +0001051530 00000 n +0001051580 00000 n +0001051630 00000 n +0001051679 00000 n +0001051729 00000 n +0001051779 00000 n +0001051829 00000 n +0001051879 00000 n +0001051929 00000 n +0001051979 00000 n +0001052029 00000 n +0001052079 00000 n +0001052128 00000 n +0001052178 00000 n +0001052228 00000 n +0001052279 00000 n +0001052330 00000 n +0001052380 00000 n +0001052430 00000 n +0001052480 00000 n +0001052530 00000 n +0001052580 00000 n +0001052630 00000 n +0001052680 00000 n +0001052730 00000 n +0001052780 00000 n +0001052830 00000 n +0001052880 00000 n +0001052930 00000 n +0001052981 00000 n +0001053031 00000 n +0001053081 00000 n +0001053131 00000 n +0001053181 00000 n +0001053231 00000 n +0001053281 00000 n +0001053332 00000 n +0001053381 00000 n +0001053431 00000 n +0001053481 00000 n +0001053531 00000 n +0001053582 00000 n +0001053633 00000 n +0001053684 00000 n +0001053735 00000 n +0001053786 00000 n +0001053837 00000 n +0001053888 00000 n +0001053939 00000 n +0001053990 00000 n +0001054041 00000 n +0001054092 00000 n +0001054143 00000 n +0001054194 00000 n +0001054245 00000 n +0001054296 00000 n +0001054347 00000 n +0001054398 00000 n +0001054449 00000 n +0001054500 00000 n +0001054551 00000 n +0001054602 00000 n +0001054653 00000 n +0001054704 00000 n +0001054755 00000 n +0001054806 00000 n +0001054857 00000 n +0001054908 00000 n +0001054959 00000 n +0001055010 00000 n +0001055061 00000 n +0001055112 00000 n +0001055163 00000 n +0001055214 00000 n +0001055265 00000 n +0001055316 00000 n +0001055367 00000 n +0001055421 00000 n +0001055475 00000 n +0001055529 00000 n +0001055582 00000 n +0001055635 00000 n +0001055688 00000 n +0001055741 00000 n +0001055794 00000 n +0001055848 00000 n +0001055902 00000 n +0001055956 00000 n +0001056006 00000 n +0001056057 00000 n +0001056107 00000 n +0001056158 00000 n +0001056208 00000 n +0001056259 00000 n +0001056309 00000 n +0001056359 00000 n +0001056410 00000 n +0001056460 00000 n +0001056511 00000 n +0001056563 00000 n +0001056613 00000 n +0001056663 00000 n +0001056714 00000 n +0001056765 00000 n +0001056816 00000 n +0001056867 00000 n +0001056918 00000 n +0001056969 00000 n +0001057020 00000 n +0001057071 00000 n +0001057122 00000 n +0001057173 00000 n +0001057224 00000 n +0001057275 00000 n +0001057326 00000 n +0001057377 00000 n +0001057428 00000 n +0001057479 00000 n +0001057530 00000 n +0001057581 00000 n +0001057632 00000 n +0001057683 00000 n +0001057734 00000 n +0001057785 00000 n +0001057836 00000 n +0001057887 00000 n +0001057938 00000 n +0001057989 00000 n +0001058040 00000 n +0001058091 00000 n +0001058142 00000 n +0001058193 00000 n +0001058244 00000 n +0001058295 00000 n +0001058346 00000 n +0001058397 00000 n +0001058448 00000 n +0001058499 00000 n +0001058550 00000 n +0001058601 00000 n +0001058652 00000 n +0001058703 00000 n +0001058754 00000 n +0001058805 00000 n +0001058856 00000 n +0001058907 00000 n +0001058958 00000 n +0001059010 00000 n +0001059061 00000 n +0001059113 00000 n +0001059165 00000 n +0001059216 00000 n +0001059267 00000 n +0001059318 00000 n +0001059369 00000 n +0001059420 00000 n +0001059471 00000 n +0001059522 00000 n +0001059573 00000 n +0001059624 00000 n +0001059675 00000 n +0001059726 00000 n +0001059778 00000 n +0001059830 00000 n +0001059882 00000 n +0001059934 00000 n +0001059986 00000 n +0001060037 00000 n +0001060088 00000 n +0001060139 00000 n +0001060190 00000 n +0001060241 00000 n +0001060292 00000 n +0001060343 00000 n +0001060394 00000 n +0001060445 00000 n +0001060496 00000 n +0001060547 00000 n +0001060598 00000 n +0001060649 00000 n +0001060699 00000 n +0001060749 00000 n +0001060799 00000 n +0001060850 00000 n +0001060901 00000 n +0001060952 00000 n +0001061003 00000 n +0001061054 00000 n +0001061105 00000 n +0001061156 00000 n +0001061207 00000 n +0001061258 00000 n +0001061309 00000 n +0001061360 00000 n +0001061411 00000 n +0001061462 00000 n +0001061513 00000 n +0001061564 00000 n +0001061615 00000 n +0001061666 00000 n +0001061717 00000 n +0001061768 00000 n +0001061819 00000 n +0001061870 00000 n +0001061921 00000 n +0001061972 00000 n +0001062023 00000 n +0001062074 00000 n +0001062125 00000 n +0001062176 00000 n +0001062227 00000 n +0001062278 00000 n +0001062329 00000 n +0001062381 00000 n +0001062432 00000 n +0001062483 00000 n +0001062534 00000 n +0001062585 00000 n +0001062636 00000 n +0001062687 00000 n +0001062738 00000 n +0001062789 00000 n +0001062840 00000 n +0001062891 00000 n +0001062942 00000 n +0001062993 00000 n +0001063044 00000 n +0001063095 00000 n +0001063146 00000 n +0001063197 00000 n +0001063248 00000 n +0001063299 00000 n +0001063350 00000 n +0001063402 00000 n +0001063453 00000 n +0001063504 00000 n +0001063556 00000 n +0001063608 00000 n +0001063660 00000 n +0001063712 00000 n +0001063764 00000 n +0001063816 00000 n +0001063868 00000 n +0001063920 00000 n +0001063972 00000 n +0001064024 00000 n +0001064076 00000 n +0001064128 00000 n +0001064180 00000 n +0001064232 00000 n +0001064284 00000 n +0001064336 00000 n +0001064388 00000 n +0001064440 00000 n +0001064492 00000 n +0001064544 00000 n +0001064596 00000 n +0001064648 00000 n +0001064700 00000 n +0001064752 00000 n +0001064804 00000 n +0001064856 00000 n +0001064908 00000 n +0001064960 00000 n +0001065012 00000 n +0001065064 00000 n +0001065116 00000 n +0001065168 00000 n +0001065219 00000 n +0001065271 00000 n +0001065323 00000 n +0001065375 00000 n +0001065427 00000 n +0001065479 00000 n +0001065530 00000 n +0001065581 00000 n +0001065632 00000 n +0001065683 00000 n +0001065734 00000 n +0001065785 00000 n +0001065836 00000 n +0001065887 00000 n +0001065938 00000 n +0001065990 00000 n +0001066041 00000 n +0001066092 00000 n +0001066143 00000 n +0001066194 00000 n +0001066245 00000 n +0001066296 00000 n +0001066347 00000 n +0001066398 00000 n +0001066449 00000 n +0001066500 00000 n +0001066551 00000 n +0001066602 00000 n +0001066653 00000 n +0001066704 00000 n +0001066755 00000 n +0001066806 00000 n +0001066857 00000 n +0001066908 00000 n +0001066959 00000 n +0001067010 00000 n +0001067061 00000 n +0001067112 00000 n +0001067163 00000 n +0001067214 00000 n +0001067265 00000 n +0001067316 00000 n +0001067367 00000 n +0001067418 00000 n +0001067469 00000 n +0001067520 00000 n +0001067571 00000 n +0001067622 00000 n +0001067673 00000 n +0001067724 00000 n +0001067775 00000 n +0001067826 00000 n +0001067877 00000 n +0001067928 00000 n +0001067979 00000 n +0001068031 00000 n +0001068082 00000 n +0001068133 00000 n +0001068185 00000 n +0001068237 00000 n +0001068288 00000 n +0001068339 00000 n +0001068390 00000 n +0001068441 00000 n +0001068493 00000 n +0001068545 00000 n +0001068597 00000 n +0001068649 00000 n +0001068701 00000 n +0001068753 00000 n +0001068805 00000 n +0001068857 00000 n +0001068909 00000 n +0001068961 00000 n +0001069013 00000 n +0001069065 00000 n +0001069117 00000 n +0001069169 00000 n +0001069221 00000 n +0001069273 00000 n +0001069325 00000 n +0001069377 00000 n +0001069429 00000 n +0001069481 00000 n +0001069533 00000 n +0001069585 00000 n +0001069637 00000 n +0001069689 00000 n +0001069741 00000 n +0001069793 00000 n +0001069845 00000 n +0001069897 00000 n +0001069949 00000 n +0001070000 00000 n +0001070051 00000 n +0001070102 00000 n +0001070153 00000 n +0001070204 00000 n +0001070255 00000 n +0001070306 00000 n +0001070357 00000 n +0001070408 00000 n +0001070459 00000 n +0001070510 00000 n +0001070561 00000 n +0001070612 00000 n +0001070663 00000 n +0001070714 00000 n +0001070766 00000 n +0001070818 00000 n +0001070870 00000 n +0001070922 00000 n +0001070974 00000 n +0001071026 00000 n +0001071078 00000 n +0001071130 00000 n +0001071182 00000 n +0001071234 00000 n +0001071285 00000 n +0001071337 00000 n +0001071389 00000 n +0001071440 00000 n +0001071491 00000 n +0001071543 00000 n +0001071595 00000 n +0001071647 00000 n +0001071699 00000 n +0001071751 00000 n +0001071802 00000 n +0001071854 00000 n +0001071905 00000 n +0001071956 00000 n +0001072007 00000 n +0001072058 00000 n +0001072109 00000 n +0001072160 00000 n +0001072211 00000 n +0001072262 00000 n +0001072313 00000 n +0001072364 00000 n +0001072415 00000 n +0001072466 00000 n +0001072517 00000 n +0001072568 00000 n +0001072619 00000 n +0001072670 00000 n +0001072721 00000 n +0001072772 00000 n +0001072823 00000 n +0001072874 00000 n +0001072925 00000 n +0001072976 00000 n +0001073027 00000 n +0001073078 00000 n +0001073129 00000 n +0001073180 00000 n +0001073231 00000 n +0001073282 00000 n +0001073332 00000 n +0001073383 00000 n +0001073433 00000 n +0001073484 00000 n +0001073534 00000 n +0001073584 00000 n +0001073634 00000 n +0001073685 00000 n +0001073736 00000 n +0001073787 00000 n +0001073838 00000 n +0001073888 00000 n +0001073938 00000 n +0001073988 00000 n +0001074038 00000 n +0001074088 00000 n +0001074138 00000 n +0001074188 00000 n +0001074238 00000 n +0001074288 00000 n +0001074338 00000 n +0001074389 00000 n +0001074439 00000 n +0001074490 00000 n +0001074540 00000 n +0001074590 00000 n +0001074640 00000 n +0001074690 00000 n +0001074740 00000 n +0001074790 00000 n +0001074841 00000 n +0001074892 00000 n +0001074942 00000 n +0001074992 00000 n +0001075042 00000 n +0001075093 00000 n +0001075144 00000 n +0001075195 00000 n +0001075246 00000 n +0001075297 00000 n +0001075348 00000 n +0001075399 00000 n +0001075450 00000 n +0001075501 00000 n +0001075552 00000 n +0001075603 00000 n +0001075654 00000 n +0001075705 00000 n +0001075756 00000 n +0001075807 00000 n +0001075858 00000 n +0001075909 00000 n +0001075960 00000 n +0001076011 00000 n +0001076062 00000 n +0001076113 00000 n +0001076164 00000 n +0001076215 00000 n +0001076266 00000 n +0001076317 00000 n +0001076368 00000 n +0001076419 00000 n +0001076470 00000 n +0001076521 00000 n +0001076572 00000 n +0001076623 00000 n +0001076674 00000 n +0001076725 00000 n +0001076776 00000 n +0001076826 00000 n +0001076876 00000 n +0001076927 00000 n +0001076977 00000 n +0001077028 00000 n +0001077078 00000 n +0001077129 00000 n +0001077179 00000 n +0001077230 00000 n +0001077282 00000 n +0001077334 00000 n +0001077385 00000 n +0001077435 00000 n +0001077485 00000 n +0001077536 00000 n +0001077587 00000 n +0001077638 00000 n +0001077689 00000 n +0001077740 00000 n +0001077790 00000 n +0001077841 00000 n +0001077891 00000 n +0001077941 00000 n +0001077991 00000 n +0001078041 00000 n +0001078091 00000 n +0001078141 00000 n +0001078192 00000 n +0001078242 00000 n +0001078293 00000 n +0001078343 00000 n +0001078394 00000 n +0001078444 00000 n +0001078494 00000 n +0001078544 00000 n +0001078594 00000 n +0001078644 00000 n +0001078696 00000 n +0001078747 00000 n +0001078798 00000 n +0001078848 00000 n +0001078899 00000 n +0001078949 00000 n +0001079000 00000 n +0001079051 00000 n +0001079102 00000 n +0001079151 00000 n +0001079200 00000 n +0001079249 00000 n +0001079300 00000 n +0001079351 00000 n +0001079402 00000 n +0001079453 00000 n +0001079504 00000 n +0001079555 00000 n +0001079606 00000 n +0001079657 00000 n +0001079708 00000 n +0001079759 00000 n +0001079810 00000 n +0001079861 00000 n +0001079912 00000 n +0001079963 00000 n +0001080014 00000 n +0001080065 00000 n +0001080116 00000 n +0001080167 00000 n +0001080218 00000 n +0001080269 00000 n +0001080320 00000 n +0001080371 00000 n +0001080423 00000 n +0001080475 00000 n +0001080526 00000 n +0001080577 00000 n +0001080628 00000 n +0001080679 00000 n +0001080730 00000 n +0001080781 00000 n +0001080832 00000 n +0001080882 00000 n +0001080932 00000 n +0001080983 00000 n +0001081034 00000 n +0001081085 00000 n +0001081136 00000 n +0001081187 00000 n +0001081238 00000 n +0001081289 00000 n +0001081340 00000 n +0001081390 00000 n +0001081441 00000 n +0001081492 00000 n +0001081543 00000 n +0001081593 00000 n +0001081644 00000 n +0001081695 00000 n +0001081746 00000 n +0001081797 00000 n +0001081848 00000 n +0001081899 00000 n +0001081949 00000 n +0001081999 00000 n +0001082049 00000 n +0001082100 00000 n +0001082151 00000 n +0001082202 00000 n +0001082252 00000 n +0001082303 00000 n +0001082354 00000 n +0001082404 00000 n +0001082455 00000 n +0001082505 00000 n +0001082555 00000 n +0001082605 00000 n +0001082655 00000 n +0001082705 00000 n +0001082755 00000 n +0001082805 00000 n +0001082856 00000 n +0001082906 00000 n +0001082957 00000 n +0001083007 00000 n +0001083057 00000 n +0001083107 00000 n +0001083157 00000 n +0001083207 00000 n +0001083257 00000 n +0001083307 00000 n +0001083357 00000 n +0001083407 00000 n +0001083457 00000 n +0001083507 00000 n +0001083557 00000 n +0001083607 00000 n +0001083657 00000 n +0001083707 00000 n +0001083757 00000 n +0001083807 00000 n +0001083857 00000 n +0001083907 00000 n +0001083957 00000 n +0001084007 00000 n +0001084057 00000 n +0001084107 00000 n +0001084157 00000 n +0001084207 00000 n +0001084257 00000 n +0001084307 00000 n +0001084357 00000 n +0001084407 00000 n +0001084457 00000 n +0001084507 00000 n +0001084557 00000 n +0001084607 00000 n +0001084657 00000 n +0001084707 00000 n +0001084757 00000 n +0001084808 00000 n +0001084858 00000 n +0001084908 00000 n +0001084959 00000 n +0001085009 00000 n +0001085059 00000 n +0001085109 00000 n +0001085159 00000 n +0001085209 00000 n +0001085259 00000 n +0001085309 00000 n +0001085359 00000 n +0001085410 00000 n +0001085461 00000 n +0001085511 00000 n +0001085561 00000 n +0001085611 00000 n +0001085662 00000 n +0001085712 00000 n +0001085762 00000 n +0001085812 00000 n +0001085862 00000 n +0001085912 00000 n +0001085962 00000 n +0001086012 00000 n +0001086062 00000 n +0001086112 00000 n +0001086162 00000 n +0001086212 00000 n +0001086262 00000 n +0001086312 00000 n +0001086362 00000 n +0001086413 00000 n +0001086464 00000 n +0001086515 00000 n +0001086566 00000 n +0001086617 00000 n +0001086668 00000 n +0001086719 00000 n +0001086770 00000 n +0001086821 00000 n +0001086872 00000 n +0001086923 00000 n +0001086974 00000 n +0001087024 00000 n +0001087074 00000 n +0001087125 00000 n +0001087176 00000 n +0001087227 00000 n +0001087278 00000 n +0001087329 00000 n +0001087379 00000 n +0001087430 00000 n +0001087481 00000 n +0001087531 00000 n +0001087581 00000 n +0001087631 00000 n +0001087682 00000 n +0001087732 00000 n +0001087782 00000 n +0001087832 00000 n +0001087883 00000 n +0001087934 00000 n +0001087985 00000 n +0001088036 00000 n +0001088087 00000 n +0001088137 00000 n +0001088187 00000 n +0001088238 00000 n +0001088288 00000 n +0001088337 00000 n +0001088386 00000 n +0001088435 00000 n +0001088485 00000 n +0001088535 00000 n +0001088586 00000 n +0001088637 00000 n +0001088688 00000 n +0001088738 00000 n +0001088788 00000 n +0001088838 00000 n +0001088888 00000 n +0001088938 00000 n +0001088988 00000 n +0001089038 00000 n +0001089088 00000 n +0001089138 00000 n +0001089188 00000 n +0001089238 00000 n +0001089288 00000 n +0001089338 00000 n +0001089388 00000 n +0001089439 00000 n +0001089490 00000 n +0001089539 00000 n +0001089588 00000 n +0001089639 00000 n +0001089689 00000 n +0001089739 00000 n +0001089789 00000 n +0001089839 00000 n +0001089890 00000 n +0001089941 00000 n +0001089991 00000 n +0001090041 00000 n +0001090092 00000 n +0001090141 00000 n +0001090190 00000 n +0001090239 00000 n +0001090290 00000 n +0001090340 00000 n +0001090390 00000 n +0001090440 00000 n +0001090490 00000 n +0001090540 00000 n +0001090590 00000 n +0001090640 00000 n +0001090690 00000 n +0001090740 00000 n +0001090790 00000 n +0001090840 00000 n +0001090890 00000 n +0001090940 00000 n +0001090990 00000 n +0001091040 00000 n +0001091090 00000 n +0001091140 00000 n +0001091191 00000 n +0001091241 00000 n +0001091290 00000 n +0001091339 00000 n +0001091388 00000 n +0001091438 00000 n +0001091489 00000 n +0001091539 00000 n +0001091589 00000 n +0001091639 00000 n +0001091689 00000 n +0001091739 00000 n +0001091789 00000 n +0001091839 00000 n +0001091889 00000 n +0001091939 00000 n +0001091989 00000 n +0001092039 00000 n +0001092089 00000 n +0001092139 00000 n +0001092189 00000 n +0001092239 00000 n +0001092289 00000 n +0001092339 00000 n +0001092389 00000 n +0001092439 00000 n +0001092489 00000 n +0001092539 00000 n +0001092589 00000 n +0001092639 00000 n +0001092689 00000 n +0001092739 00000 n +0001092789 00000 n +0001092839 00000 n +0001092889 00000 n +0001092939 00000 n +0001092989 00000 n +0001093039 00000 n +0001093089 00000 n +0001093139 00000 n +0001093189 00000 n +0001093239 00000 n +0001093289 00000 n +0001093339 00000 n +0001093389 00000 n +0001093439 00000 n +0001093489 00000 n +0001093539 00000 n +0001093589 00000 n +0001093639 00000 n +0001093689 00000 n +0001093739 00000 n +0001093789 00000 n +0001093839 00000 n +0001093889 00000 n +0001093939 00000 n +0001093989 00000 n +0001094039 00000 n +0001094089 00000 n +0001094139 00000 n +0001094189 00000 n +0001094239 00000 n +0001094289 00000 n +0001094339 00000 n +0001094389 00000 n +0001094439 00000 n +0001094489 00000 n +0001094539 00000 n +0001094589 00000 n +0001094639 00000 n +0001094689 00000 n +0001094739 00000 n +0001094789 00000 n +0001094839 00000 n +0001094889 00000 n +0001094939 00000 n +0001094989 00000 n +0001095039 00000 n +0001095090 00000 n +0001095141 00000 n +0001095192 00000 n +0001095243 00000 n +0001095294 00000 n +0001095345 00000 n +0001095396 00000 n +0001095447 00000 n +0001095497 00000 n +0001095548 00000 n +0001095598 00000 n +0001095648 00000 n +0001095699 00000 n +0001095749 00000 n +0001095800 00000 n +0001095850 00000 n +0001095900 00000 n +0001095950 00000 n +0001096000 00000 n +0001096050 00000 n +0001096100 00000 n +0001096150 00000 n +0001096200 00000 n +0001096250 00000 n +0001096300 00000 n +0001096350 00000 n +0001096400 00000 n +0001096450 00000 n +0001096500 00000 n +0001096550 00000 n +0001096600 00000 n +0001096650 00000 n +0001096700 00000 n +0001096750 00000 n +0001096800 00000 n +0001096850 00000 n +0001096900 00000 n +0001096950 00000 n +0001097000 00000 n +0001097050 00000 n +0001097100 00000 n +0001097150 00000 n +0001097200 00000 n +0001097250 00000 n +0001097300 00000 n +0001097350 00000 n +0001097400 00000 n +0001097450 00000 n +0001097500 00000 n +0001097550 00000 n +0001097600 00000 n +0001097650 00000 n +0001097700 00000 n +0001097750 00000 n +0001097800 00000 n +0001097850 00000 n +0001097900 00000 n +0001097950 00000 n +0001098000 00000 n +0001098050 00000 n +0001098100 00000 n +0001098150 00000 n +0001098200 00000 n +0001098250 00000 n +0001098300 00000 n +0001098350 00000 n +0001098400 00000 n +0001098450 00000 n +0001098500 00000 n +0001098550 00000 n +0001098600 00000 n +0001098650 00000 n +0001098700 00000 n +0001098750 00000 n +0001098800 00000 n +0001098850 00000 n +0001098900 00000 n +0001098950 00000 n +0001099000 00000 n +0001099050 00000 n +0001099100 00000 n +0001099150 00000 n +0001099200 00000 n +0001099250 00000 n +0001099300 00000 n +0001099350 00000 n +0001099400 00000 n +0001099450 00000 n +0001099500 00000 n +0001099550 00000 n +0001099600 00000 n +0001099650 00000 n +0001099700 00000 n +0001099750 00000 n +0001099800 00000 n +0001099850 00000 n +0001099900 00000 n +0001099950 00000 n +0001100000 00000 n +0001100050 00000 n +0001100100 00000 n +0001100150 00000 n +0001100200 00000 n +0001100250 00000 n +0001100300 00000 n +0001100350 00000 n +0001100400 00000 n +0001100450 00000 n +0001100500 00000 n +0001100550 00000 n +0001100600 00000 n +0001100650 00000 n +0001100700 00000 n +0001100750 00000 n +0001100800 00000 n +0001100850 00000 n +0001100900 00000 n +0001100950 00000 n +0001101000 00000 n +0001101050 00000 n +0001101100 00000 n +0001101150 00000 n +0001101200 00000 n +0001101250 00000 n +0001101300 00000 n +0001101350 00000 n +0001101400 00000 n +0001101450 00000 n +0001101500 00000 n +0001101550 00000 n +0001101600 00000 n +0001101650 00000 n +0001101700 00000 n +0001101750 00000 n +0001101800 00000 n +0001101850 00000 n +0001101900 00000 n +0001101950 00000 n +0001102000 00000 n +0001102050 00000 n +0001102100 00000 n +0001102150 00000 n +0001102200 00000 n +0001102250 00000 n +0001102300 00000 n +0001102350 00000 n +0001102400 00000 n +0001102450 00000 n +0001102500 00000 n +0001102550 00000 n +0001102600 00000 n +0001102650 00000 n +0001102700 00000 n +0001102750 00000 n +0001102800 00000 n +0001102850 00000 n +0001102900 00000 n +0001102950 00000 n +0001103000 00000 n +0001103050 00000 n +0001103100 00000 n +0001103150 00000 n +0001103200 00000 n +0001103250 00000 n +0001103300 00000 n +0001103350 00000 n +0001103400 00000 n +0001103450 00000 n +0001103500 00000 n +0001103550 00000 n +0001103600 00000 n +0001103650 00000 n +0001103700 00000 n +0001103750 00000 n +0001103800 00000 n +0001103850 00000 n +0001103900 00000 n +0001103950 00000 n +0001104000 00000 n +0001104050 00000 n +0001104100 00000 n +0001104150 00000 n +0001104200 00000 n +0001104250 00000 n +0001104300 00000 n +0001104350 00000 n +0001104400 00000 n +0001104450 00000 n +0001104500 00000 n +0001104550 00000 n +0001104600 00000 n +0001104650 00000 n +0001104700 00000 n +0001104750 00000 n +0001104800 00000 n +0001104850 00000 n +0001104900 00000 n +0001104950 00000 n +0001105000 00000 n +0001105050 00000 n +0001105100 00000 n +0001105150 00000 n +0001105200 00000 n +0001105250 00000 n +0001105300 00000 n +0001105350 00000 n +0001105400 00000 n +0001105450 00000 n +0001105500 00000 n +0001105550 00000 n +0001105600 00000 n +0001105650 00000 n +0001105700 00000 n +0001105750 00000 n +0001105800 00000 n +0001105850 00000 n +0001105900 00000 n +0001105950 00000 n +0001106000 00000 n +0001106050 00000 n +0001106100 00000 n +0001106150 00000 n +0001106200 00000 n +0001106250 00000 n +0001106300 00000 n +0001106350 00000 n +0001106400 00000 n +0001106450 00000 n +0001106500 00000 n +0001106550 00000 n +0001106600 00000 n +0001106650 00000 n +0001106700 00000 n +0001106750 00000 n +0001106800 00000 n +0001106850 00000 n +0001106900 00000 n +0001106950 00000 n +0001107000 00000 n +0001107050 00000 n +0001107100 00000 n +0001107150 00000 n +0001107200 00000 n +0001107250 00000 n +0001107300 00000 n +0001107350 00000 n +0001107400 00000 n +0001107450 00000 n +0001107500 00000 n +0001107550 00000 n +0001107600 00000 n +0001107650 00000 n +0001107700 00000 n +0001107750 00000 n +0001107800 00000 n +0001107850 00000 n +0001107900 00000 n +0001107950 00000 n +0001108000 00000 n +0001108050 00000 n +0001108100 00000 n +0001108150 00000 n +0001108200 00000 n +0001108250 00000 n +0001108300 00000 n +0001108350 00000 n +0001108400 00000 n +0001108450 00000 n +0001108500 00000 n +0001108550 00000 n +0001108600 00000 n +0001108649 00000 n +0001108698 00000 n +0001108747 00000 n +0001108796 00000 n +0001108845 00000 n +0001108894 00000 n +0001108943 00000 n +0001108992 00000 n +0001109041 00000 n +0001109090 00000 n +0001109139 00000 n +0001109188 00000 n +0001109237 00000 n +0001109286 00000 n +0001109335 00000 n +0001109384 00000 n +0001109433 00000 n +0001109482 00000 n +0001109531 00000 n +0001109580 00000 n +0001109629 00000 n +0001109678 00000 n +0001109727 00000 n +0001109776 00000 n +0001109825 00000 n +0001109874 00000 n +0001109923 00000 n +0001109973 00000 n +0001110023 00000 n +0001110073 00000 n +0001110123 00000 n +0001110173 00000 n +0001110223 00000 n +0001110273 00000 n +0001110323 00000 n +0001110373 00000 n +0001110423 00000 n +0001110473 00000 n +0001110523 00000 n +0001110573 00000 n +0001110623 00000 n +0001110673 00000 n +0001110723 00000 n +0001110773 00000 n +0001110823 00000 n +0001110873 00000 n +0001110923 00000 n +0001110973 00000 n +0001111023 00000 n +0001111073 00000 n +0001111123 00000 n +0001111173 00000 n +0001111223 00000 n +0001111273 00000 n +0001111323 00000 n +0001111373 00000 n +0001111423 00000 n +0001111473 00000 n +0001111523 00000 n +0001111573 00000 n +0001111623 00000 n +0001111673 00000 n +0001111723 00000 n +0001111773 00000 n +0001111821 00000 n +0001111869 00000 n +0001111917 00000 n +0001111965 00000 n +0001112013 00000 n +0001112061 00000 n +0001112109 00000 n +0001112157 00000 n +0001112205 00000 n +0001112253 00000 n +0001112301 00000 n +0001112349 00000 n +0001112397 00000 n +0001112445 00000 n +0001112493 00000 n +0001112541 00000 n +0001112589 00000 n +0001112637 00000 n +0001112685 00000 n +0001112733 00000 n +0001112781 00000 n +0001112829 00000 n +0001112878 00000 n +0001112927 00000 n +0001112976 00000 n +0001113025 00000 n +0001113074 00000 n +0001113123 00000 n +0001113172 00000 n +0001113221 00000 n +0001113270 00000 n +0001113319 00000 n +0001113368 00000 n +0001113417 00000 n +0001113466 00000 n +0001113515 00000 n +0001113564 00000 n +0001113613 00000 n +0001113662 00000 n +0001113711 00000 n +0001113760 00000 n +0001113809 00000 n +0001113858 00000 n +0001113907 00000 n +0001113956 00000 n +0001114005 00000 n +0001114054 00000 n +0001114103 00000 n +0001114152 00000 n +0001114201 00000 n +0001114250 00000 n +0001114299 00000 n +0001114348 00000 n +0001114397 00000 n +0001114446 00000 n +0001114495 00000 n +0001114544 00000 n +0001114593 00000 n +0001114642 00000 n +0001114691 00000 n +0001114740 00000 n +0001114789 00000 n +0001114838 00000 n +0001114887 00000 n +0001114938 00000 n +0001114989 00000 n +0001115040 00000 n +0001115091 00000 n +0001115142 00000 n +0001115193 00000 n +0001115244 00000 n +0001115295 00000 n +0001115346 00000 n +0001115397 00000 n +0001115448 00000 n +0001115499 00000 n +0001115550 00000 n +0001115601 00000 n +0001115652 00000 n +0001115703 00000 n +0001115754 00000 n +0001115805 00000 n +0001115856 00000 n +0001115907 00000 n +0001115958 00000 n +0001116009 00000 n +0001116060 00000 n +0001116111 00000 n +0001116162 00000 n +0001116213 00000 n +0001116264 00000 n +0001116315 00000 n +0001116366 00000 n +0001116417 00000 n +0001116468 00000 n +0001116519 00000 n +0001116570 00000 n +0001116621 00000 n +0001116672 00000 n +0001116723 00000 n +0001116774 00000 n +0001116825 00000 n +0001116876 00000 n +0001116927 00000 n +0001116978 00000 n +0001117029 00000 n +0001117080 00000 n +0001117130 00000 n +0001117180 00000 n +0001117230 00000 n +0001117281 00000 n +0001117332 00000 n +0001117382 00000 n +0001117432 00000 n +0001117482 00000 n +0001117533 00000 n +0001117584 00000 n +0001117635 00000 n +0001117687 00000 n +0001117737 00000 n +0001117787 00000 n +0001117837 00000 n +0001117885 00000 n +0001117933 00000 n +0001117981 00000 n +0001118029 00000 n +0001118077 00000 n +0001118125 00000 n +0001118176 00000 n +0001118227 00000 n +0001118278 00000 n +0001118329 00000 n +0001118380 00000 n +0001118431 00000 n +0001118482 00000 n +0001118533 00000 n +0001118584 00000 n +0001118635 00000 n +0001118686 00000 n +0001118737 00000 n +0001118788 00000 n +0001118839 00000 n +0001118890 00000 n +0001118941 00000 n +0001118992 00000 n +0001119043 00000 n +0001119094 00000 n +0001119145 00000 n +0001119196 00000 n +0001119247 00000 n +0001119298 00000 n +0001119349 00000 n +0001119400 00000 n +0001119451 00000 n +0001119502 00000 n +0001119553 00000 n +0001119604 00000 n +0001119655 00000 n +0001119706 00000 n +0001119757 00000 n +0001119808 00000 n +0001119859 00000 n +0001119910 00000 n +0001119961 00000 n +0001120012 00000 n +0001120063 00000 n +0001120114 00000 n +0001120165 00000 n +0001120216 00000 n +0001120267 00000 n +0001120318 00000 n +0001120369 00000 n +0001120420 00000 n +0001120471 00000 n +0001120522 00000 n +0001120573 00000 n +0001120624 00000 n +0001120675 00000 n +0001120726 00000 n +0001120777 00000 n +0001120828 00000 n +0001120879 00000 n +0001120930 00000 n +0001120981 00000 n +0001121032 00000 n +0001121083 00000 n +0001121134 00000 n +0001121185 00000 n +0001121236 00000 n +0001121287 00000 n +0001121338 00000 n +0001121389 00000 n +0001121440 00000 n +0001121491 00000 n +0001121542 00000 n +0001121593 00000 n +0001121644 00000 n +0001121695 00000 n +0001121746 00000 n +0001121797 00000 n +0001121848 00000 n +0001121899 00000 n +0001121950 00000 n +0001122001 00000 n +0001122052 00000 n +0001122103 00000 n +0001122154 00000 n +0001122205 00000 n +0001122256 00000 n +0001122307 00000 n +0001122358 00000 n +0001122409 00000 n +0001122460 00000 n +0001122511 00000 n +0001122562 00000 n +0001122613 00000 n +0001122664 00000 n +0001122715 00000 n +0001122766 00000 n +0001122817 00000 n +0001122868 00000 n +0001122919 00000 n +0001122970 00000 n +0001123021 00000 n +0001123072 00000 n +0001123123 00000 n +0001123174 00000 n +0001123225 00000 n +0001123276 00000 n +0001123327 00000 n +0001123378 00000 n +0001123429 00000 n +0001123480 00000 n +0001123531 00000 n +0001123582 00000 n +0001123633 00000 n +0001123684 00000 n +0001123735 00000 n +0001123786 00000 n +0001123837 00000 n +0001123888 00000 n +0001123939 00000 n +0001123990 00000 n +0001124041 00000 n +0001124092 00000 n +0001124143 00000 n +0001124194 00000 n +0001124245 00000 n +0001124296 00000 n +0001124347 00000 n +0001124398 00000 n +0001124449 00000 n +0001124500 00000 n +0001124551 00000 n +0001124602 00000 n +0001124653 00000 n +0001124704 00000 n +0001124755 00000 n +0001124806 00000 n +0001124857 00000 n +0001124908 00000 n +0001124959 00000 n +0001125010 00000 n +0001125061 00000 n +0001125112 00000 n +0001125163 00000 n +0001125214 00000 n +0001125265 00000 n +0001125316 00000 n +0001125367 00000 n +0001125418 00000 n +0001125469 00000 n +0001125520 00000 n +0001125571 00000 n +0001125622 00000 n +0001125673 00000 n +0001125724 00000 n +0001125775 00000 n +0001125826 00000 n +0001125877 00000 n +0001125928 00000 n +0001125979 00000 n +0001126030 00000 n +0001126081 00000 n +0001126132 00000 n +0001126183 00000 n +0001126234 00000 n +0001126285 00000 n +0001126336 00000 n +0001126387 00000 n +0001126438 00000 n +0001126489 00000 n +0001126540 00000 n +0001126591 00000 n +0001126642 00000 n +0001126693 00000 n +0001126744 00000 n +0001126795 00000 n +0001126846 00000 n +0001126897 00000 n +0001126948 00000 n +0001126999 00000 n +0001127050 00000 n +0001127101 00000 n +0001127152 00000 n +0001127203 00000 n +0001127254 00000 n +0001127305 00000 n +0001127356 00000 n +0001127407 00000 n +0001127458 00000 n +0001127509 00000 n +0001127560 00000 n +0001127611 00000 n +0001127662 00000 n +0001127713 00000 n +0001127764 00000 n +0001127815 00000 n +0001127866 00000 n +0001127917 00000 n +0001127968 00000 n +0001128019 00000 n +0001128070 00000 n +0001128121 00000 n +0001128172 00000 n +0001128223 00000 n +0001128274 00000 n +0001128325 00000 n +0001128376 00000 n +0001128427 00000 n +0001128478 00000 n +0001128529 00000 n +0001128580 00000 n +0001128631 00000 n +0001128682 00000 n +0001128733 00000 n +0001128784 00000 n +0001128835 00000 n +0001128886 00000 n +0001128937 00000 n +0001128988 00000 n +0001129039 00000 n +0001129090 00000 n +0001129141 00000 n +0001129192 00000 n +0001129243 00000 n +0001129294 00000 n +0001129345 00000 n +0001129396 00000 n +0001129447 00000 n +0001129498 00000 n +0001129549 00000 n +0001129600 00000 n +0001129651 00000 n +0001129702 00000 n +0001129753 00000 n +0001129804 00000 n +0001129855 00000 n +0001129906 00000 n +0001129957 00000 n +0001130008 00000 n +0001130059 00000 n +0001130110 00000 n +0001130161 00000 n +0001130212 00000 n +0001130263 00000 n +0001130314 00000 n +0001130365 00000 n +0001130416 00000 n +0001130467 00000 n +0001130518 00000 n +0001130569 00000 n +0001130620 00000 n +0001130671 00000 n +0001130722 00000 n +0001130773 00000 n +0001130824 00000 n +0001130875 00000 n +0001130926 00000 n +0001130977 00000 n +0001131028 00000 n +0001131079 00000 n +0001131130 00000 n +0001131181 00000 n +0001131231 00000 n +0001131281 00000 n +0001131331 00000 n +0001131381 00000 n +0001131431 00000 n +0001131482 00000 n +0001131532 00000 n +0001131582 00000 n +0001131632 00000 n +0001131682 00000 n +0001131732 00000 n +0001131782 00000 n +0001131832 00000 n +0001131883 00000 n +0001131934 00000 n +0001131984 00000 n +0001132034 00000 n +0001132084 00000 n +0001132134 00000 n +0001132184 00000 n +0001132234 00000 n +0001132284 00000 n +0001132334 00000 n +0001132384 00000 n +0001132434 00000 n +0001132484 00000 n +0001132534 00000 n +0001132584 00000 n +0001132634 00000 n +0001132684 00000 n +0001132734 00000 n +0001132784 00000 n +0001132834 00000 n +0001132884 00000 n +0001132934 00000 n +0001132984 00000 n +0001133034 00000 n +0001133084 00000 n +0001133134 00000 n +0001133184 00000 n +0001133235 00000 n +0001133286 00000 n +0001133337 00000 n +0001133388 00000 n +0001133439 00000 n +0001133490 00000 n +0001133541 00000 n +0001133592 00000 n +0001133643 00000 n +0001133694 00000 n +0001133745 00000 n +0001133796 00000 n +0001133847 00000 n +0001133898 00000 n +0001133949 00000 n +0001134000 00000 n +0001134051 00000 n +0001134102 00000 n +0001134153 00000 n +0001134204 00000 n +0001134255 00000 n +0001134306 00000 n +0001134357 00000 n +0001134408 00000 n +0001134458 00000 n +0001134508 00000 n +0001134558 00000 n +0001134608 00000 n +0001134658 00000 n +0001134708 00000 n +0001134758 00000 n +0001134808 00000 n +0001134858 00000 n +0001134908 00000 n +0001134958 00000 n +0001135008 00000 n +0001135058 00000 n +0001135108 00000 n +0001135158 00000 n +0001135208 00000 n +0001135258 00000 n +0001135308 00000 n +0001135358 00000 n +0001135408 00000 n +0001135458 00000 n +0001135508 00000 n +0001135558 00000 n +0001135608 00000 n +0001135658 00000 n +0001135708 00000 n +0001135758 00000 n +0001135808 00000 n +0001135858 00000 n +0001135908 00000 n +0001135958 00000 n +0001136008 00000 n +0001136058 00000 n +0001136108 00000 n +0001136158 00000 n +0001136208 00000 n +0001136258 00000 n +0001136308 00000 n +0001136358 00000 n +0001136408 00000 n +0001136458 00000 n +0001136508 00000 n +0001136558 00000 n +0001136608 00000 n +0001136658 00000 n +0001136708 00000 n +0001136758 00000 n +0001136808 00000 n +0001136858 00000 n +0001136908 00000 n +0001136958 00000 n +0001137008 00000 n +0001137058 00000 n +0001137108 00000 n +0001137158 00000 n +0001137208 00000 n +0001137258 00000 n +0001137308 00000 n +0001137358 00000 n +0001137408 00000 n +0001137459 00000 n +0001137510 00000 n +0001137561 00000 n +0001137612 00000 n +0001137662 00000 n +0001137712 00000 n +0001137762 00000 n +0001137812 00000 n +0001137862 00000 n +0001137912 00000 n +0001137962 00000 n +0001138012 00000 n +0001138062 00000 n +0001138112 00000 n +0001138162 00000 n +0001138212 00000 n +0001138262 00000 n +0001138312 00000 n +0001138362 00000 n +0001138412 00000 n +0001138462 00000 n +0001138512 00000 n +0001138562 00000 n +0001138612 00000 n +0001138662 00000 n +0001138712 00000 n +0001138762 00000 n +0001138812 00000 n +0001138862 00000 n +0001138912 00000 n +0001138962 00000 n +0001139012 00000 n +0001139062 00000 n +0001139112 00000 n +0001139162 00000 n +0001139212 00000 n +0001139262 00000 n +0001139312 00000 n +0001139362 00000 n +0001139412 00000 n +0001139462 00000 n +0001139512 00000 n +0001139562 00000 n +0001139612 00000 n +0001139662 00000 n +0001139712 00000 n +0001139762 00000 n +0001139812 00000 n +0001139862 00000 n +0001139912 00000 n +0001139962 00000 n +0001140012 00000 n +0001140062 00000 n +0001140112 00000 n +0001140162 00000 n +0001140212 00000 n +0001140262 00000 n +0001140312 00000 n +0001140362 00000 n +0001140413 00000 n +0001140463 00000 n +0001140514 00000 n +0001140564 00000 n +0001140614 00000 n +0001140665 00000 n +0001140716 00000 n +0001140766 00000 n +0001140816 00000 n +0001140866 00000 n +0001140916 00000 n +0001140966 00000 n +0001141016 00000 n +0001141066 00000 n +0001141116 00000 n +0001141166 00000 n +0001141216 00000 n +0001141266 00000 n +0001141316 00000 n +0001141366 00000 n +0001141416 00000 n +0001141466 00000 n +0001141516 00000 n +0001141566 00000 n +0001141616 00000 n +0001141666 00000 n +0001141716 00000 n +0001141766 00000 n +0001141816 00000 n +0001141866 00000 n +0001141916 00000 n +0001141966 00000 n +0001142016 00000 n +0001142066 00000 n +0001142116 00000 n +0001142166 00000 n +0001142216 00000 n +0001142266 00000 n +0001142316 00000 n +0001142366 00000 n +0001142416 00000 n +0001142466 00000 n +0001142516 00000 n +0001142566 00000 n +0001142616 00000 n +0001142666 00000 n +0001142716 00000 n +0001142766 00000 n +0001142816 00000 n +0001142866 00000 n +0001142916 00000 n +0001142966 00000 n +0001143016 00000 n +0001143066 00000 n +0001143116 00000 n +0001143166 00000 n +0001143216 00000 n +0001143266 00000 n +0001143316 00000 n +0001143366 00000 n +0001143416 00000 n +0001143466 00000 n +0001143516 00000 n +0001143566 00000 n +0001143616 00000 n +0001143666 00000 n +0001143716 00000 n +0001143766 00000 n +0001143816 00000 n +0001143866 00000 n +0001143916 00000 n +0001143966 00000 n +0001144016 00000 n +0001144066 00000 n +0001144116 00000 n +0001144166 00000 n +0001144216 00000 n +0001144266 00000 n +0001144316 00000 n +0001144366 00000 n +0001144416 00000 n +0001144466 00000 n +0001144516 00000 n +0001144566 00000 n +0001144616 00000 n +0001144666 00000 n +0001144716 00000 n +0001144766 00000 n +0001144816 00000 n +0001144866 00000 n +0001144916 00000 n +0001144966 00000 n +0001145016 00000 n +0001145066 00000 n +0001145116 00000 n +0001145166 00000 n +0001145216 00000 n +0001145266 00000 n +0001145316 00000 n +0001145366 00000 n +0001145416 00000 n +0001145466 00000 n +0001145516 00000 n +0001145566 00000 n +0001145616 00000 n +0001145666 00000 n +0001145716 00000 n +0001145766 00000 n +0001145816 00000 n +0001145866 00000 n +0001145916 00000 n +0001145966 00000 n +0001146016 00000 n +0001146066 00000 n +0001146116 00000 n +0001146166 00000 n +0001146216 00000 n +0001146266 00000 n +0001146316 00000 n +0001146366 00000 n +0001146416 00000 n +0001146466 00000 n +0001146516 00000 n +0001146566 00000 n +0001146616 00000 n +0001146666 00000 n +0001146716 00000 n +0001146766 00000 n +0001146816 00000 n +0001146866 00000 n +0001146916 00000 n +0001146966 00000 n +0001147016 00000 n +0001147066 00000 n +0001147116 00000 n +0001147166 00000 n +0001147216 00000 n +0001147270 00000 n +0001147324 00000 n +0001147378 00000 n +0001147432 00000 n +0001147483 00000 n +0001147536 00000 n +0001147589 00000 n +0001147642 00000 n +0001147695 00000 n +0001147748 00000 n +0001147802 00000 n +0001147856 00000 n +0001147907 00000 n +0001147958 00000 n +0001148009 00000 n +0001148060 00000 n +0001148111 00000 n +0001148162 00000 n +0001148213 00000 n +0001148264 00000 n +0001148315 00000 n +0001148366 00000 n +0001148417 00000 n +0001148468 00000 n +0001148519 00000 n +0001148567 00000 n +0001148617 00000 n +0001148667 00000 n +0001148717 00000 n +0001148767 00000 n +0001148817 00000 n +0001148867 00000 n +0001148917 00000 n +0001148967 00000 n +0001149017 00000 n +0001149067 00000 n +0001149117 00000 n +0001149167 00000 n +0001149217 00000 n +0001149267 00000 n +0001149317 00000 n +0001149367 00000 n +0001149417 00000 n +0001149467 00000 n +0001149517 00000 n +0001149567 00000 n +0001149617 00000 n +0001149667 00000 n +0001149717 00000 n +0001149767 00000 n +0001149817 00000 n +0001149867 00000 n +0001149917 00000 n +0001149967 00000 n +0001150017 00000 n +0001150067 00000 n +0001150117 00000 n +0001150167 00000 n +0001150217 00000 n +0001150267 00000 n +0001150317 00000 n +0001150367 00000 n +0001150417 00000 n +0001150467 00000 n +0001150507 00000 n +0001150534 00000 n +0001150620 00000 n +0001150776 00000 n +0001150916 00000 n +0001151061 00000 n +0001151206 00000 n +0001151351 00000 n +0001151496 00000 n +0001151641 00000 n +0001151786 00000 n +0001151931 00000 n +0001152076 00000 n +0001152225 00000 n +0001152381 00000 n +0001152536 00000 n +0001152691 00000 n +0001152846 00000 n +0001153001 00000 n +0001153156 00000 n +0001153311 00000 n +0001153466 00000 n +0001153621 00000 n +0001153776 00000 n +0001153931 00000 n +0001154087 00000 n +0001154242 00000 n +0001154397 00000 n +0001154552 00000 n +0001154707 00000 n +0001154862 00000 n +0001155017 00000 n +0001155172 00000 n +0001155327 00000 n +0001155482 00000 n +0001155637 00000 n +0001155756 00000 n +0001155911 00000 n +0001156066 00000 n +0001156221 00000 n +0001156376 00000 n +0001156531 00000 n +0001156631 00000 n +0001160314 00000 n +trailer +<<4A6F5A174A6C0841BA4ECB1928E3A4B5>]>> +startxref +116 +%%EOF diff --git a/lefdef/src/lef/doc/lefapiWN.pdf b/lefdef/src/lef/doc/lefapiWN.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b882654f1cbbfe649c35908796b5d0fce185353e GIT binary patch literal 113772 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 literal 0 HcmV?d00001 diff --git a/lefdef/src/lef/lef/CMakeLists.txt b/lefdef/src/lef/lef/CMakeLists.txt new file mode 100644 index 00000000..e530b53a --- /dev/null +++ b/lefdef/src/lef/lef/CMakeLists.txt @@ -0,0 +1,116 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + include_directories ( ${LEFDEF_SOURCE_DIR}/src/lef/lef + ${LEFDEF_SOURCE_DIR}/src/lef/include + ) + + set ( includes lefiArray.hpp + lefiCrossTalk.hpp + lefiDebug.hpp + lefiDefs.hpp + lefiEncryptInt.hpp + lefiKRDefs.hpp + lefiLayer.hpp + lefiMacro.hpp + lefiMisc.hpp + lefiNonDefault.hpp + lefiProp.hpp + lefiPropType.hpp + lefiUnits.hpp + lefiUser.hpp + lefiUtil.hpp + lefiVia.hpp + lefiViaRule.hpp + lefrCallBacks.hpp + lefrData.hpp + lefrReader.hpp + lefrSettings.hpp + lefwWriter.hpp + lefwWriterCalls.hpp + ) + + set ( cpps crypt.cpp + lef.tab.cpp + lef_keywords.cpp + lefiArray.cpp + lefiCrossTalk.cpp + lefiDebug.cpp + lefiEncryptInt.cpp + lefiLayer.cpp + lefiMacro.cpp + lefiMisc.cpp + lefiNonDefault.cpp + lefiProp.cpp + lefiPropType.cpp + lefiTBExt.cpp + lefiUnits.cpp + lefiVia.cpp + lefiViaRule.cpp + lefrCallbacks.cpp + lefrData.cpp + lefrReader.cpp + lefrSettings.cpp + lefwWriter.cpp + lefwWriterCalls.cpp + ) + + set ( LefParserGrammar ${LEFDEF_SOURCE_DIR}/src/lef/lef/lef.y ) + add_custom_command ( SOURCE ${LefParserGrammar} + COMMAND ${BISON_EXECUTABLE} + ARGS -v -p lefyy -d ${LefParserGrammar} -o lef.tab.cpp + COMMAND mv + ARGS lef.tab.hpp ${LEFDEF_SOURCE_DIR}/src/lef/lef/lef.tab.h + TARGET LefParser + OUTPUTS lef.tab.cpp + ) + set_source_files_properties ( lef.tab.cpp GENERATED ) + + add_library ( lef ${cpps} ) + set_target_properties ( lef PROPERTIES VERSION 5.8 SOVERSION 5 ) + + install ( TARGETS lef DESTINATION lib${LIB_SUFFIX} ) + install ( FILES ${includes} DESTINATION include/lef ) + + +#LEF_TABNAME = lef +#LEF_BISON_SRCS = lef.y +# +#FAKE_ALL: all +# +#DIRNAME = lef +#LEF_BISON_SRCS = lef.y +# +#LIBTARGET = liblef.a +# +#HEADERS = \ +# lef.tab.h \ +# lex.h \ +# crypt.hpp \ +# lex.cpph +# +#LIBSRCS = \ +# crypt.cpp \ +# lef.tab.cpp \ +# lef_keywords.cpp \ +# lefiArray.cpp \ +# lefiCrossTalk.cpp \ +# lefiDebug.cpp \ +# lefiEncryptInt.cpp \ +# lefiLayer.cpp \ +# lefiMacro.cpp \ +# lefiMisc.cpp \ +# lefiNonDefault.cpp \ +# lefiProp.cpp \ +# lefiPropType.cpp \ +# lefiTBExt.cpp \ +# lefiUnits.cpp \ +# lefiVia.cpp \ +# lefiViaRule.cpp \ +# lefrCallbacks.cpp \ +# lefrData.cpp \ +# lefrReader.cpp \ +# lefrSettings.cpp \ +# lefwWriter.cpp \ +# lefwWriterCalls.cpp +# +#include ../template.mk diff --git a/lefdef/src/lef/lef/Makefile b/lefdef/src/lef/lef/Makefile new file mode 100644 index 00000000..bfc49a93 --- /dev/null +++ b/lefdef/src/lef/lef/Makefile @@ -0,0 +1,71 @@ +LEF_TABNAME = lef +LEF_BISON_SRCS = lef.y + +FAKE_ALL: all + +DIRNAME = lef +LEF_BISON_SRCS = lef.y + +LIBTARGET = liblef.a + +HEADERS = \ + lef.tab.h \ + lex.h \ + crypt.hpp \ + lex.cpph + +PUBLIC_HDRS = lefiArray.hpp \ + lefiCrossTalk.hpp \ + lefiDebug.hpp \ + lefiDefs.hpp \ + lefiEncryptInt.hpp \ + lefiKRDefs.hpp \ + lefiLayer.hpp \ + lefiMacro.hpp \ + lefiMisc.hpp \ + lefiNonDefault.hpp \ + lefiProp.hpp \ + lefiPropType.hpp \ + lefiUnits.hpp \ + lefiUser.hpp \ + lefiUtil.hpp \ + lefiVia.hpp \ + lefiViaRule.hpp \ + lefrCallBacks.hpp \ + lefrData.hpp \ + lefrReader.hpp \ + lefrSettings.hpp \ + lefwWriter.hpp \ + lefwWriterCalls.hpp + +LIBSRCS = \ + crypt.cpp \ + lef.tab.cpp \ + lef_keywords.cpp \ + lefiArray.cpp \ + lefiCrossTalk.cpp \ + lefiDebug.cpp \ + lefiEncryptInt.cpp \ + lefiLayer.cpp \ + lefiMacro.cpp \ + lefiMisc.cpp \ + lefiNonDefault.cpp \ + lefiProp.cpp \ + lefiPropType.cpp \ + lefiTBExt.cpp \ + lefiUnits.cpp \ + lefiVia.cpp \ + lefiViaRule.cpp \ + lefrCallbacks.cpp \ + lefrData.cpp \ + lefrReader.cpp \ + lefrSettings.cpp \ + lefwWriter.cpp \ + lefwWriterCalls.cpp + +# For lef, create '.cpp' object +lef.tab.cpp : $(LEF_BISON_SRCS) + bison -v -p$(LEF_TABNAME)yy -d $(LEF_BISON_SRCS) + mv $(LEF_TABNAME).tab.c $(LEF_TABNAME).tab.cpp ; + +include ../template.mk diff --git a/lefdef/src/lef/lef/crypt.cpp b/lefdef/src/lef/lef/crypt.cpp new file mode 100644 index 00000000..1269eaf7 --- /dev/null +++ b/lefdef/src/lef/lef/crypt.cpp @@ -0,0 +1,116 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #6 $ +// $Date: 2015/01/20 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +/* + * FILE: crypt.cpp + * + */ + +#include +#include + +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +#ifdef WIN32 +# include +#else // not WIN32 +# include + +#endif // WIN32 + + +FILE * +encOpenFileForRead(char *filename) +{ + return fopen(filename, "r"); +} + +FILE * +encOpenFileForWrite(char *filename, + int encrypt_f) +{ + return fopen(filename, "w"); +} + +int +encCloseFile(FILE *fp) +{ + return fclose(fp); +} + +void +encClearBuf(FILE *fp) +{ +} + +void +encReadingEncrypted() +{ +} + +void +encWritingEncrypted() +{ +} + +int +encIsEncrypted(unsigned char *buf) +{ + return false; +} + +int +encFgetc(FILE *fp) +{ + return fgetc(fp); +} + +int +encFputc(char c, + FILE *fp) +{ + return fputc(c, fp); +} + +void +encPrint(FILE *fp, + char *format, + ...) +{ + va_list ap; + + va_start(ap, format); + vfprintf(fp, format, ap); + va_end(ap); +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/crypt.hpp b/lefdef/src/lef/lef/crypt.hpp new file mode 100644 index 00000000..4c50d084 --- /dev/null +++ b/lefdef/src/lef/lef/crypt.hpp @@ -0,0 +1,53 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef CRYPT_H +#define CRYPT_H 1 + +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +extern FILE* encOpenFileForRead(char* filename); +extern FILE* encOpenFileForWrite(char* filename, int encrypt_f); +extern int encCloseFile(FILE* fp); +extern void encClearBuf(FILE* fp); +extern void encReadingEncrypted(); +extern void encWritingEncrypted(); +extern int encIsEncrypted(unsigned char* buf); +extern int encFgetc(FILE* fp); +extern int encFputc(char c, FILE* fp); +extern void encPrint(FILE*fp, char* format,...); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif + diff --git a/lefdef/src/lef/lef/lef.msg b/lefdef/src/lef/lef/lef.msg new file mode 100644 index 00000000..84724a9c --- /dev/null +++ b/lefdef/src/lef/lef/lef.msg @@ -0,0 +1,404 @@ +# 100 - lef reader, lefrReader.c +# 1000 - lef parser, error, lex.cpph, lef.y (CALLBACK & CHKERR) +# 1300 - from lefiError, lefiLayer.cpp +# 1350 - from lefiError, lefiMacro.cpp +# 1360 - from lefiError, lefiMisc.cpp +# 1400 - from lefiError, lefiNonDefault.cpp +# 1420 - from lefiError, lefiVia.cpp +# 1430 - from lefiError, lefiViaRule.cpp +# 1500 - lef parser, error, lef.y +# 2000 - lef parser, warning, lex.cpph +# 2500 - lef parser, warning, lef.y +# 3000 - lef parser, info, lex.cpph +# 4000 - lef writer, error, lefwWriter.cpp & lefwWriterCalls.cpp +# 4500 - lef writer, warning, lefwWriter.cpp & lefwWriterCalls.cpp +# 4700 - lef writer, info, lefwWriter.cpp & lefwWriterCalls.cpp +# emsMkError LEF -b lefMsgTable -m lef.msg -e -n +100 "lefrRead called before lefrInit\n" +101 "lefrSetRegisterUnusedCallbacks was not called to setup this data.\n" +201 "LEF items that were present but ignored because of no callback:\n" +203 "Number has exceeded the limit for an integer. See file %s at line %d.\n" +1000 "Expecting '='" +1001 "End of file in &ALIAS" +1002 "Incomplete lef file" +1003 "tag is missing for BEGINEXT" +1004 "Tag for BEGINEXT is empty" +1005 "\" is missing in tag" +1006 "Ending \" is missing" +1007 "ENDEXT is missing" +1008 "Invalid characters found in \'%s\'.\nThese characters might have created by character types other than English." +1009 "Symbol ';' should be separated by space(s)." +1011 "%s, see file %s at line %d.\nLast token was <%s\">; space is missing between the closing \" of the string and ;.\n" +1020 "Too many syntax errors." +1300 "The index number %d given for the layer property is invalid.\nValid index is from 0 to %d" +1301 "The index number %d given for the layer MINSIZE is invalid.\nValid index is from 0 to %d\n" +1302 "The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d" +1303 "The index number %d given for the layer ARRAYCUTS is invalid.\nValid index is from 0 to %d" +1304 "The index number %d given for the layer SPACING is invalid.\nValid index is from 0 to %d" +1305 "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is either \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n" +1306 "Incorrect syntax defined for property LEF57_MAXFLOATINGAREA: %s.\nCorrect syntax is \"MAXFLOATINGAREA maxArea\"\n" +1307 "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n" +1308 "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nLONGARRAY is defined after CUTSPACING.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n" +1309 "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nWIDTH is defined after CUTSPACING.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n" +1310 "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCUTSPACING has defined more than once.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n" +1311 "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCUTSPACING which is required is either has not been defined or defined in a wrong location.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING array Spacing ...\n" +1312 "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nSPACING should be defined with ARRAYCUTS.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n" +1313 "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n" +1314 "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nARRAYCUTS is required but has not been defined.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n" +1315 "Incorrect syntax defined for property LEF57_MINSTEP: %s.\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n" +1316 "Incorrect syntax defined for property LEF57_ANTENNACUMROUTINGPLUSCUT: %s.\nCorrect syntax is \"ANTANNACUMROUTINGPLUSCUT\"\n" +1317 "Incorrect syntax defined for property LEF57_ANTENNAGATEPLUSDIFF: %s.\nCorrect syntax is \"ANTENNAGATEPLUSDIFF plusDiffFactor\"\n" +1318 "Incorrect syntax defined for property LEF57_ANTENNAAREAMINUSDIFF: %s.\nCorrect syntax is \"ANTENNAAREAMINUSDIFF minusDiffFactor\"\n" +1319 "Incorrect syntax defined for property LEF57_ANTENNAAREADIFFREDUCEPWL: %s.\nCorrect syntax is \"ANTENNAAREADIFFREDUCEPWL (( diffArea1 metalDiffFactor1 ) ( diffArea2 metalDiffFactor2 )...)\"\n" +1320 "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"" +1321 "The property LEF57_SPACING with value %s is for TYPE CUT only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file" +1322 "The property LEF57_SPACING with value %s is for TYPE ROUTING only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file." +1323 "The property LEF57_MINSTEP with value %s is for TYPE ROUTING only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file." +1324 "Incorrect syntax defined for the statement TWOWIDTHS.\nSpacing, which is required, is not defined." +1325 "Property LEF58_TYPE was added in incorrect layer type.\nIt has the value %s which is for layer type ROUTING.\nThe layer type is %s.\n" +1326 "Property LEF58_TYPE was added in incorrect layer type.\nIt has the value %s which is for layer type CUT.\nThe layer type is %s.\n" +1327 "Property LEF58_TYPE was added in incorrect layer type.\nIt has the value %s which is for layer type MASTERSLICE.\nThe layer type is %s.\n" +1328 "Property LEF58_TYPE has incorrect layer type %s.\nValue layer type are: POLYROUTING, MIMCAP, TSV, PASSIVATION, NWELL or PWELL.\n" +1329 "Incorrect syntax defined for property LEF58_TYPE: %s\nCorrect syntax is \"TYPE POLYROUTING | MIMCAP | TSV | PASSIVATION | NWELL | PWELL ;\"\n" +1330 "Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n" +1331 "The property LEF57_ENCLOSURE with value %s is for TYPE CUT only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n" +1350 "The index number %d given for the macro PIN is invalid.\nValid index is from 0 to %d" +1351 "There is an unexpected lef parser bug which cause it unable to retrieve ANTENNAMODEL data with the given index." +1352 "The index number %d given for the macro property is invalid.\nValid index is from 0 to %d" +1360 "The index number %d given for the geometry item is invalid.\nValid index is from 0 to %d." +1361 "The index number %d given for the geometry RECTANGLE is invalid.\nValid index is from 0 to %d." +1362 "The index number %d given for the geometry RECTANGLE ITERATE is invalid.\nValid index is from 0 to %d." +1363 "The index number %d given for the geometry PATH is invalid.\nValid index is from 0 to %d." +1364 "The index number %d given for the geometry PATH ITERATE is invalid.\nValid index is from 0 to %d." +1365 "The index number %d given for the geometry LAYER is invalid.\nValid index is from 0 to %d." +1366 "The index number %d given for the geometry LAYER EXCEPT PG NET is invalid.\nValid index is from 0 to %d." +1367 "The index number %d given for the geometry LAYER MINSPACING is invalid.\nValid index is from 0 to %d." +1368 "The index number %d given for the geometry LAYER RULE WIDTH is invalid.\nValid index is from 0 to %d." +1369 "The index number %d given for the geometry WIDTH is invalid.\nValid index is from 0 to %d." +1370 "The index number %d given for the geometry POLYGON is invalid.\nValid index is from 0 to %d." +1371 "The index number %d given for the geometry POLYGON ITERATE is invalid.\nValid index is from 0 to %d." +1372 "The index number %d given for the geometry CLASS is invalid.\nValid index is from 0 to %d." +1373 "The index number %d given for the geometry VIA is invalid.\nValid index is from 0 to %d." +1374 "The index number %d given for the geometry VIA ITERATE is invalid.\nValid index is from 0 to %d." +1375 "unknown geometry type." +1376 "The index number %d given for the IRDROP is invalid.\nValid index is from 0 to %d." +1377 "The index number %d given for the TRACK PATTERN is invalid.\nValid index is from 0 to %d." +1400 "Invalid nondefaultvia callback." +1401 "Invalid nondefaultspacing callback." +1402 "The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d." +1403 "The index number %d given for the NONDEFAULT VIA is invalid.\nValid index is from 0 to %d." +1404 "The index number %d given for the NONDEFAULT SPACING is invalid.\nValid index is from 0 to %d." +1405 "The index number %d given for the NONDEFAULT USE VIA is invalid.\nValid index is from 0 to %d." +1406 "The index number %d given for the NONDEFAULT USE VIARULE is invalid.\nValid index is from 0 to %d." +1407 "The index number %d given for the NONDEFAULT CUT is invalid.\nValid index is from 0 to %d." +1408 "The index number %d given for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d." +1420 "The index number %d given for the VIA LAYER RECTANGLE is invalid.\nValid index is from 0 to %d." +1421 "The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d." +1422 "The layer number %d given for the VIA PROPERTY is invalid.\nValid number is from 0 to %d." +1430 "too many via rule layers." +1431 "The index number %d given for the VIARULE PROPERTY is invalid.\nValid index is from 0 to %d." +1501 "Error found when processing LEF file '%s'\nUnit %d is a version 5.6 or later syntax\nYour lef file is defined with version %g." +1502 "The value %d defined for LEF UNITS DATABASE MICRONS is invalid\n. Correct value is 100, 200, 1000, 2000, 10000, or 20000" +1503 "Lef parser 5.7 does not support lef file with version %s. Parser will stop processing." +1504 "NAMESCASESENSITIVE statement is set with OFF.\nStarting version 5.6, NAMESCASENSITIVE is obsolete,\nif it is defined, it has to have the ON value.\nParser will stop processing." +1505 "MANUFACTURINGGRID statement was defined before UNITS.\nRefer to the LEF Language Reference manual for the order of LEF statements." +1506 "A MAXVIASTACK statement is defined before the LAYER statement.\nRefer to the LEF Language Reference manual for the order of LEF statements." +1507 "END LAYER name %s is different from the LAYER name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1508 "TYPE statement is a required statement in a LAYER and it is not defined." +1509 "PITCH statement is a required statement in a LAYER with TYPE ROUTING and it is not defined." +1510 "WIDTH statement is a required statement in a LAYER with TYPE ROUTING and it is not defined." +1511 "The DIRECTION statement which is required in a LAYER with TYPE ROUTING is not defined in LAYER %s.\nUpdate your lef file and add the DIRECTION statement for layer %s." +1512 "It is incorrect to define a SPACING statement in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing." +1513 "DIRECTION statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1514 "RESISTANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1515 "RESISTANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1516 "CAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1517 "CAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1518 "HEIGHT statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1519 "WIREEXTENSION statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1520 "THICKNESS statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1521 "SHRINKAGE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1522 "CAPMULTIPLIER statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1523 "EDGECAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1524 "ANTENNAAREAFACTOR statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1525 "ANTENNALENGTHFACTOR statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1526 "ANTENNALENGTHFACTOR statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNALENGTHFACTOR syntax, which is incorrect." +1527 "ACCURRENTDENSITY statement can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing." +1528 "DCCURRENTDENSITY statement can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing." +1529 "CUTAREA statement can only be defined in LAYER with TYPE CUT. Parser will stop processing." +1530 "WIDTH statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1531 "ANTENNAAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1532 "ANTENNADIFFAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNAAREARATIO syntax, which is incorrect." +1533 "ANTENNAAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1534 "ANTENNADIFFAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1535 "ANTENNACUMAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1536 "ANTENNACUMAREARATIO statement is a version 5.4 or earlier old syntax.\nYour lef file with version %g, has both old and new ANTENNACUMAREARATIO syntax, which is incorrect." +1537 "ANTENNACUMAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1538 "ANTENNACUMDIFFAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1539 "ANTENNACUMDIFFAREARATIO statement is a version 5.4 or earlier old syntax.\nYour lef file with version %g, has both old and new ANTENNACUMDIFFAREARATIO syntax, which is incorrect." +1540 "ANTENNACUMDIFFAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1541 "ANTENNAAREAFACTOR can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1542 "ANTENNASIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1543 "ANTENNASIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1544 "ANTENNASIDEAREARATIO statement is a version 5.4 or earlier old syntax.\nYour lef file with version %g, has both old and new ANTENNASIDEAREARATIO syntax, which is incorrect." +1545 "ANTENNADIFFSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1546 "ANTENNADIFFSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1547 "ANTENNADIFFSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNADIFFSIDEAREARATIO syntax, which is incorrect." +1548 "ANTENNACUMSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1549 "ANTENNACUMSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1550 "ANTENNACUMSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNACUMSIDEAREARATIO syntax, which is incorrect." +1551 "ANTENNACUMDIFFSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1552 "ANTENNACUMDIFFSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1553 "ANTENNACUMDIFFSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNACUMDIFFSIDEAREARATIO syntax, which is incorrect." +1554 "ANTENNASIDEAREAFACTOR can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1555 "ANTENNASIDEAREAFACTOR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1556 "ANTENNASIDEAREAFACTOR statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNASIDEAREAFACTOR syntax, which is incorrect." +1557 "ANTENNAMODEL can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1558 "ANTENNAMODEL statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1559 "ANTENNAMODEL statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNAMODEL syntax, which is incorrect." +1560 "ANTENNACUMROUTINGPLUSCUT can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1561 "ANTENNAGATEPLUSDIFF can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1562 "ANTENNAAREAMINUSDIFF can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1563 "ANTENNAAREADIFFREDUCEPWL can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing." +1564 "SLOTWIREWIDTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1565 "SLOTWIRELENGTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1566 "SLOTWIDTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1567 "SLOTLENGTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1568 "MAXADJACENTSLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1569 "MAXCOAXIALSLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1570 "MAXEDGESLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1571 "SPLITWIREWIDTH statement is a version 5.4 and later syntax.\n Your lef file is defined with version %g." +1572 "MINIMUMDENSITY statement is a version 5.4 and later syntax.\n Your lef file is defined with version %g." +1573 "MAXIMUMDENSITY statement is a version 5.4 and later syntax.\n Your lef file is defined with version %g." +1574 "DENSITYCHECKWINDOW statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1575 "DENSITYCHECKSTEP statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1576 "FILLACTIVESPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1577 "MAXWIDTH statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1578 "MAXWIDTH statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1579 "MINWIDTH statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1580 "MINWIDTH statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1581 "MINENCLOSEDAREA statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1582 "PROTRUSION RULE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1583 "SPACINGTABLE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1584 "ENCLOSURE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1585 "PREFERENCLOSURE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1586 "RESISTANCE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1587 "DIAGMINEDGELENGTH can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1588 "DIAGMINEDGELENGTH statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1589 "An INFLUENCE table statement was defined before the PARALLELRUNLENGTH table statement.\nINFLUENCE table statement should be defined following the PARALLELRUNLENGTH.\nChange the LEF file and rerunning the parser." +1590 "There is multiple PARALLELRUNLENGTH table statements are defined within a layer.\nAccording to the LEF Reference Manual, only one PARALLELRUNLENGTH table statement is allowed per layer." +1591 "The total number of lengths defined in the PARALLELRUNLENGTH statement is not equal to\nthe total number of spacings defined in the WIDTH statement in the SPACINGTABLE." +1592 "A PARALLELRUNLENGTH statement was already defined in the layer.\nIt is PARALLELRUNLENGTH or TOWWIDTHS is allowed per layer." +1593 "A TWOWIDTHS table statement was already defined in the layer.\nOnly one TWOWIDTHS statement is allowed per layer." +1594 "A INFLUENCE table statement was already defined in the layer.\nOnly one INFLUENCE statement is allowed per layer." +1595 "An INFLUENCE table statement was already defined before the layer.\nINFLUENCE statement has to be defined after the PARALLELRUNLENGTH table statement in the layer." +1596 "FROMABOVE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1597 "FROMBELOW statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1598 "LENGTH WITHIN statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1599 "ANTENNAAREAFACTOR with DIFFUSEONLY statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1600 "CUTAREA statement can only be defined in LAYER with TYPE CUT." +1601 "WIDTH can only be defined in LAYER with TYPE ROUTING." +1602 "MAXVIASTACK statement has to be defined after the LAYER statement." +1603 "A MAXVIASTACK was already defined.\nOnly one MAXVIASTACK is allowed per lef file." +1604 "MAXVIASTACK statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1605 "DEFAULT statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1606 "A LAYER statement is missing in the VIA %s.\nAt least one LAYER is required per VIA statement." +1607 "END VIA name %s is different from the VIA name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1608 "A VIARULE statement requires two layers." +1609 "A DIRECTION statement was already defined in the layer.\nIt is DIRECTION or ENCLOSURE can be specified in a layer." +1610 "An OVERHANG statement is defined, but the required DIRECTION statement is not yet defined.\nUpdate the LEF file to define the DIRECTION statement before the OVERHANG." +1611 "An OVERHANG statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE." +1612 "An METALOVERHANG statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE." +1613 "An METALOVERHANG statement is defined, but the required DIRECTION statement is not yet defined.\nUpdate the LEF file to define the DIRECTION statement before the OVERHANG." +1614 "An ENCLOSURE statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE." +1615 "END VIARULE name %s is different from the VIARULE name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1616 "SAMENET statement is required inside SPACING for any lef file with version 5.4 and earlier, but is not defined in the parsed lef file." +1617 "NONDEFAULTRULE statement requires at least one LAYER statement." +1618 "NONDEFAULTRULE statement requires at least one VIA statement." +1619 "END NONDEFAULTRULE name %s is different from the NONDEFAULTRULE name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1620 "HARDSPACING statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1621 "USEVIA statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1622 "USEVIARULE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1623 "MINCUTS statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1624 "END LAYER name %s is different from the LAYER name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1625 "A WIDTH statement is required in the LAYER statement in NONDEFAULTRULE." +1626 "A SPACING statement is required in the LAYER statement in NONDEFAULTRULE for lef file with version 5.5 and earlier.\nYour lef file is defined with version %g. Update your lef to add a LAYER statement and try again." +1627 "RESISTANCE RPERSQ statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1628 "CAPACITANCE CPERSQDIST statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1629 "EDGECAPACITANCE statement is a version 5.4 and later syntax.\n Your lef file is defined with version %g." +1630 "DIAGWIDTH statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1631 "END SITE name %s is different from the SITE name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1632 "A CLASS statement is required in the SITE statement." +1633 "A SIZE statement is required in the SITE statement." +1634 "END MACRO name %s is different from the MACRO name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1635 "COVER BUMP statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1636 "BLOCK BLACKBOX statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1637 "BLOCK SOFT statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1638 "PAD AREAIO statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1639 "SPACER statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1640 "ANTENNACELL statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1641 "WELLTAP statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1642 "ORIGIN statement has been defined more than once in a MACRO statement.\nOnly one ORIGIN statement can be defined in a Macro.\nParser will stop processing." +1643 "END PIN name %s is different from the PIN name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1644 "ANTENNASIZE statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g." +1645 "ANTENNAMETALAREA statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g." +1646 "ANTENNAMETALLENGTH statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g." +1647 "ANTENNAPARTIALMETALAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1648 "ANTENNAPARTIALMETALSIDEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1649 "ANTENNAPARTIALCUTAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1650 "ANTENNADIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1651 "ANTENNAGATEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1652 "ANTENNAMAXAREACAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1653 "ANTENNAMAXSIDEAREACAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1654 "ANTENNAMAXCUTCAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1655 "ANTENNAMODEL statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1656 "NETEXPR statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1657 "SUPPLYSENSITIVITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1658 "GROUNDSENSITIVITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1659 "THE SPACING statement has the value %g in MACRO OBS.\nValue has to be 0 or greater." +1660 "THE DESIGNRULEWIDTH statement has the value %g in MACRO OBS.\nValue has to be 0 or greater." +1661 "DENSITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1662 "END ARRAY name %s is different from the ARRAY name %s.\nCorrect the LEF file before rerunning it through the LEF parser." +1663 "A CENTERTOCENTER statement was already defined in SPACING\nCENTERTOCENTER can only be defined once per LAYER CUT SPACING." +1664 "CENTERTOCENTER statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1665 "A SAMENET statement was already defined in SPACING\nSAMENET can only be defined once per LAYER CUT SPACING." +1666 "A PARALLELOVERLAP statement was already defined in SPACING\nPARALLELOVERLAP can only be defined once per LAYER CUT SPACING." +1667 "A SAMENET statement was already defined in SPACING\nEither SAMENET or LAYER can be defined, but not both." +1668 "ADJACENTCUTS statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1669 "A SAMENET statement was already defined in SPACING\nEither SAMENET or ADJACENTCUTS can be defined, but not both." +1670 "A SAMENET statement was already defined in SPACING\nEither SAMENET or AREA can be defined, but not both." +1671 "INPUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new INPUTPINANTENNASIZE syntax, which is incorrect." +1672 "OUTPUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new OUTPUTPINANTENNASIZE syntax, which is incorrect." +1673 "INOUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new INOUTPINANTENNASIZE syntax, which is incorrect." +1674 "ANTENNAINPUTGATEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number to 5.4 or later, or use the 5.3 syntax:\n{ INPUTINATENNASIZE | OUTPUTPINANTENNASIZE | INOUTPINANTENNASIZE } value." +1675 "ANTENNAINPUTGATEAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAINPUTGATEAREA syntax, which is incorrect." +1676 "ANTENNAINOUTDIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number to 5.4 or later, or use the 5.3 syntax:\n{ INPUTINATENNASIZE | OUTPUTPINANTENNASIZE | INOUTPINANTENNASIZE } value." +1677 "ANTENNAINOUTDIFFAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAINOUTDIFFAREA syntax, which is incorrect." +1678 "ANTENNAOUTPUTDIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number to 5.4 or later, or use the 5.3 syntax:\n{ INPUTINATENNASIZE | OUTPUTPINANTENNASIZE | INOUTPINANTENNASIZE } value.". +1679 "ANTENNAOUTPUTDIFFAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAOUTPUTDIFFAREA syntax, which is incorrect." +1680 "PARALLELOVERLAP is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1681 "ENDOFLINE is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1682 "NOTCHLENGTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1683 "EXCEPTSAMEPGNET is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1684 "SAMENET is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1685 "ARRAYSPACING is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1686 "ANTENNACUMROUTINGPLUSCUT is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1687 "ANTENNAGATEPLUSDIFF is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1688 "ANTENNAAREAMINUSDIFF is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1689 "ANTENNAAREADIFFREDUCEPWL is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1690 "EXCEPTEXTRACUT is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1691 "LENGTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1693 "AREA is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1694 "SPACINGTABLE ORTHOGONAL is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1696 "ENDOFNOTCHWIDTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1697 "TWOWIDTHS is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1698 "BUMP is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1699 "EXCEPTPGNET is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1700 "MINIMUMCUT WITHIN is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1701 "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined." +1702 "CURRENTDEN statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing." +1703 "ANTENNADIFFAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g." +1704 "ANTENNADIFFAREARATIO statement is a version 5.4 or earlier old syntax.\nYour lef file with version %g, has both old and new ANTENNADIFFAREARATIO syntax, which is incorrect." +1705 "VIARULE statement in a layer, requires a DIRECTION construct statement." +1706 "An ENCLOSURE statement was already defined in the layer.\nIt is DIRECTION or ENCLOSURE can be specified in a layer." +1707 "ENCLOSURE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g." +1708 "A VIARULE GENERATE requires three layers." +1709 "VIARULE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g." +1710 "MAXEDGES is a version 5.7 or later syntax.\nYour lef file is defined with version %g." +1711 "NOSHAREDEDGE in LAYER ENCLOSURE is a version 5.8 or later syntax.\nYour lef file is defined with version %g." +1712 "MINFEATURE statement was defined before UNITS.\nRefer the LEF Language Reference manual for the order of LEF statements." +2000 "String has exceeded 1048576 characters, extra characters are truncated." +2001 "No VERSION statement found, using the default value %2g." +2002 "NAMESCASESENSITIVE is a required statement on LEF file with version 5.5 and earlier.\nWithout NAMESCASESENSITIVE defined, the LEF file is technically incorrect.\nRefer to the LEF/DEF 5.5 or earlier Language Reference manual on how to define this statement." +2003 "BUSBITCHARS is a required statement on LEF file with version 5.5 and earlier.\nWithout BUSBITCHARS defined, the LEF file is technically incorrect.\nRefer to the LEF/DEF 5.5 or earlier Language Reference manual on how to define this statement." +2004 "DIVIDERCHAR is a required statement on LEF file with version 5.5 and earlier.\nWithout DIVIDECHAR defined, the LEF file is technically incorrect.\nRefer to the LEF/DEF 5.5 or earlier Language Reference manual on how to define this statement." +2005 "DIVIDERCHAR has an invalid null value. Value is set to default /" +2006 "BUSBITCHAR has an invalid null value. Value is set to default []" +2007 "NAMESCASESENSITIVE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2008 "NOWIREEXTENSIONATPIN statement is obsolete in version 5.6 or later.\nThe NOWIREEXTENSIONATPIN statement will be ignored." +2009 "USEMINSPACING PIN statement is obsolete in version 5.6 or later.\n The USEMINSPACING PIN statement will be ignored." +2010 "It is incorrect to have both SPACING rules & SPACINGTABLE rules within a ROUTING layer." +2011 "SLOTWIREWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later." +2012 "SLOTWIRELENGTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later." +2013 "SLOTWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later." +2014 "SLOTLENGTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later." +2015 "MAXADJACENTSLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later." +2016 "MAXCOAXIALSLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later." +2017 "MAXEDGESLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later." +2018 "SPLITWIREWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later." +2019 "TOPOFSTACKONLY statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2020 "FOREIGN statement in VIA is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2021 "turn-via is obsolete in version 5.6 and later.\n The LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2022 "DIRECTION statement in VIARULE is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2023 "OVERHANG statement will be translated into similar ENCLOSURE rule" +2024 "METALOVERHANG statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2025 "SAMENET statement in NONDEFAULTRULE is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2026 "IRDROP statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2027 "MINFEATURE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2028 "DIELECTRIC statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2029 "RESISTANCE RPERSQ statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2030 "CAPACITANCE CPERSQDIST statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2031 "EDGECAPACITANCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2032 "A SITE statement is defined before SYMMETRY statement.\nTo avoid this warning in the future, define SITE after SYMMETRY." +2033 "The statement COVER BUMP is a LEF version 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning." +2034 "The statement BLOCK BLACKBOX is a LEF verion 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning." +2035 "The statement PAD AREAIO is a LEF verion 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning." +2036 "SOURCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2037 "SOURCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2038 "MACRO POWER statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2039 "A SITE statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define SITE after ORIGIN." +2040 "A PIN statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define PIN after ORIGIN." +2041 "A OBS statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define OBS after ORIGIN." +2042 "LEQ statement in MACRO is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2043 "FOREIGN statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2044 "LEQ statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2045 "MACRO POWER statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2046 "MACRO LEAKAGE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2047 "MACRO RISETHRESH statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2048 "MACRO FALLTHRESH statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2049 "MACRO RISESATCUR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2050 "MACRO FALLSATCUR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2051 "MACRO VLO statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2052 "MACRO VHI statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2053 "MACRO TIEOFFR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2054 "MACRO OUTPUTNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2055 "MACRO OUTPUTRESISTANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2056 "MACRO INPUTNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2057 "MACRO CAPACITANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2058 "MACRO RESISTANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2059 "MACRO PULLDOWNRES statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2060 "MACRO CURRENTSOURCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2061 "MACRO CURRENTSOURCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2062 "MACRO RISEVOLTAGETHRESHOLD statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2063 "MACRO FALLVOLTAGETHRESHOLD statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2064 "MACRO IV_TABLES statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2065 "Either PATH, RECT or POLYGON statement is a required in MACRO/PIN/PORT." +2066 "MACRO TIMING statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2067 "DEFINE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2068 "DEFINES statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2069 "DEFINEB statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later." +2070 "UNIVERSALNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2071 "EDGERATETHRESHOLD1 statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2072 "EDGERATETHRESHOLD2 statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2073 "EDGERATESCALEFACTOR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2074 "NOISETABLE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2075 "CORRECTIONTABLE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later." +2076 "Either PATH, RECT or POLYGON statement is required in MACRO/OBS." +2077 "A SPACING SAMENET section is defined but it is not legal in a LEF 5.7 version file.\nIt will be ignored which will probably cause real DRC violations to be ignored, and may\ncause false DRC violations to occur.\n\nTo avoid this warning, and correctly handle these DRC rules, you should modify your\nLEF to use the appropriate SAMENET keywords as described in the LEF/DEF 5.7\nmanual under the SPACING statements in the LAYER (Routing) and LAYER (Cut)\nsections listed in the LEF Table of Contents." +2078 "It is illegal to have more than one SPACINGTABLE rules within a ROUTING layer" +2079 "CURRENTDEN statement is obsolete in version 5.2 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.2 or later." +2080 "The number of cut values in multiple ARRAYSPACING ARRAYCUTS are not in increasing order.\nTo be consistent with the documentation, update the cut values to increasing order." +2502 "Message %s has been suppressed from output" +2503 "Message %s has exceeded the message display limit of %d" +3000 "There are still data after the END LIBRARY" +4000 "lefwInitCbk was already called, cannot call lefwInit again.\nWriter Exit.\n" +4001 "lefwInit was already called, cannot call lefwInitCbk again.\nWriter Exit.\n" +4002 "lefwInit was already called, cannot call lefwInitCbk again.\nWriter Exit.\n" +4003 "lefwLayerRoutingSpacingUseLengthThreshold cannot be called if\n\tlefwLayerRoutingSpacingRange has not been called.\n" +4004 "lefwLayerRoutingSpacingInfluence cannot be called if\n\tlefRange and rightRange in lefwLayerRoutingSpacing are both zero.\n" +4005 "lefwLayerRoutingSpacingInfluence cannot be called if\n\tlefRange and rightRange in lefwLayerRoutingSpacing are both zero." +4006 "Need an output file if writing in encrypted format.\n" +4100 "lefwWrite called before lefwInitCbk.\n" +4101 "lefwSetRegisterUnusedCallbacks was not called to setup this data.\n" +4500 "Callback for %s is required, but is not defined.\n\n" +4700 "LEF items that were present but ignored because of no callbacks were set.\n" diff --git a/lefdef/src/lef/lef/lef.tab.h b/lefdef/src/lef/lef/lef.tab.h new file mode 100644 index 00000000..57eef495 --- /dev/null +++ b/lefdef/src/lef/lef/lef.tab.h @@ -0,0 +1,514 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +#ifndef YY_LEFYY_LEF_TAB_HPP_INCLUDED +# define YY_LEFYY_LEF_TAB_HPP_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int lefyydebug; +#endif + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + K_HISTORY = 258, + K_ABUT = 259, + K_ABUTMENT = 260, + K_ACTIVE = 261, + K_ANALOG = 262, + K_ARRAY = 263, + K_AREA = 264, + K_BLOCK = 265, + K_BOTTOMLEFT = 266, + K_BOTTOMRIGHT = 267, + K_BY = 268, + K_CAPACITANCE = 269, + K_CAPMULTIPLIER = 270, + K_CLASS = 271, + K_CLOCK = 272, + K_CLOCKTYPE = 273, + K_COLUMNMAJOR = 274, + K_DESIGNRULEWIDTH = 275, + K_INFLUENCE = 276, + K_CORE = 277, + K_CORNER = 278, + K_COVER = 279, + K_CPERSQDIST = 280, + K_CURRENT = 281, + K_CURRENTSOURCE = 282, + K_CUT = 283, + K_DEFAULT = 284, + K_DATABASE = 285, + K_DATA = 286, + K_DIELECTRIC = 287, + K_DIRECTION = 288, + K_DO = 289, + K_EDGECAPACITANCE = 290, + K_EEQ = 291, + K_END = 292, + K_ENDCAP = 293, + K_FALL = 294, + K_FALLCS = 295, + K_FALLT0 = 296, + K_FALLSATT1 = 297, + K_FALLRS = 298, + K_FALLSATCUR = 299, + K_FALLTHRESH = 300, + K_FEEDTHRU = 301, + K_FIXED = 302, + K_FOREIGN = 303, + K_FROMPIN = 304, + K_GENERATE = 305, + K_GENERATOR = 306, + K_GROUND = 307, + K_HEIGHT = 308, + K_HORIZONTAL = 309, + K_INOUT = 310, + K_INPUT = 311, + K_INPUTNOISEMARGIN = 312, + K_COMPONENTPIN = 313, + K_INTRINSIC = 314, + K_INVERT = 315, + K_IRDROP = 316, + K_ITERATE = 317, + K_IV_TABLES = 318, + K_LAYER = 319, + K_LEAKAGE = 320, + K_LEQ = 321, + K_LIBRARY = 322, + K_MACRO = 323, + K_MATCH = 324, + K_MAXDELAY = 325, + K_MAXLOAD = 326, + K_METALOVERHANG = 327, + K_MILLIAMPS = 328, + K_MILLIWATTS = 329, + K_MINFEATURE = 330, + K_MUSTJOIN = 331, + K_NAMESCASESENSITIVE = 332, + K_NANOSECONDS = 333, + K_NETS = 334, + K_NEW = 335, + K_NONDEFAULTRULE = 336, + K_NONINVERT = 337, + K_NONUNATE = 338, + K_OBS = 339, + K_OHMS = 340, + K_OFFSET = 341, + K_ORIENTATION = 342, + K_ORIGIN = 343, + K_OUTPUT = 344, + K_OUTPUTNOISEMARGIN = 345, + K_OVERHANG = 346, + K_OVERLAP = 347, + K_OFF = 348, + K_ON = 349, + K_OVERLAPS = 350, + K_PAD = 351, + K_PATH = 352, + K_PATTERN = 353, + K_PICOFARADS = 354, + K_PIN = 355, + K_PITCH = 356, + K_PLACED = 357, + K_POLYGON = 358, + K_PORT = 359, + K_POST = 360, + K_POWER = 361, + K_PRE = 362, + K_PULLDOWNRES = 363, + K_RECT = 364, + K_RESISTANCE = 365, + K_RESISTIVE = 366, + K_RING = 367, + K_RISE = 368, + K_RISECS = 369, + K_RISERS = 370, + K_RISESATCUR = 371, + K_RISETHRESH = 372, + K_RISESATT1 = 373, + K_RISET0 = 374, + K_RISEVOLTAGETHRESHOLD = 375, + K_FALLVOLTAGETHRESHOLD = 376, + K_ROUTING = 377, + K_ROWMAJOR = 378, + K_RPERSQ = 379, + K_SAMENET = 380, + K_SCANUSE = 381, + K_SHAPE = 382, + K_SHRINKAGE = 383, + K_SIGNAL = 384, + K_SITE = 385, + K_SIZE = 386, + K_SOURCE = 387, + K_SPACER = 388, + K_SPACING = 389, + K_SPECIALNETS = 390, + K_STACK = 391, + K_START = 392, + K_STEP = 393, + K_STOP = 394, + K_STRUCTURE = 395, + K_SYMMETRY = 396, + K_TABLE = 397, + K_THICKNESS = 398, + K_TIEHIGH = 399, + K_TIELOW = 400, + K_TIEOFFR = 401, + K_TIME = 402, + K_TIMING = 403, + K_TO = 404, + K_TOPIN = 405, + K_TOPLEFT = 406, + K_TOPRIGHT = 407, + K_TOPOFSTACKONLY = 408, + K_TRISTATE = 409, + K_TYPE = 410, + K_UNATENESS = 411, + K_UNITS = 412, + K_USE = 413, + K_VARIABLE = 414, + K_VERTICAL = 415, + K_VHI = 416, + K_VIA = 417, + K_VIARULE = 418, + K_VLO = 419, + K_VOLTAGE = 420, + K_VOLTS = 421, + K_WIDTH = 422, + K_X = 423, + K_Y = 424, + T_STRING = 425, + QSTRING = 426, + NUMBER = 427, + K_N = 428, + K_S = 429, + K_E = 430, + K_W = 431, + K_FN = 432, + K_FS = 433, + K_FE = 434, + K_FW = 435, + K_R0 = 436, + K_R90 = 437, + K_R180 = 438, + K_R270 = 439, + K_MX = 440, + K_MY = 441, + K_MXR90 = 442, + K_MYR90 = 443, + K_USER = 444, + K_MASTERSLICE = 445, + K_ENDMACRO = 446, + K_ENDMACROPIN = 447, + K_ENDVIARULE = 448, + K_ENDVIA = 449, + K_ENDLAYER = 450, + K_ENDSITE = 451, + K_CANPLACE = 452, + K_CANNOTOCCUPY = 453, + K_TRACKS = 454, + K_FLOORPLAN = 455, + K_GCELLGRID = 456, + K_DEFAULTCAP = 457, + K_MINPINS = 458, + K_WIRECAP = 459, + K_STABLE = 460, + K_SETUP = 461, + K_HOLD = 462, + K_DEFINE = 463, + K_DEFINES = 464, + K_DEFINEB = 465, + K_IF = 466, + K_THEN = 467, + K_ELSE = 468, + K_FALSE = 469, + K_TRUE = 470, + K_EQ = 471, + K_NE = 472, + K_LE = 473, + K_LT = 474, + K_GE = 475, + K_GT = 476, + K_OR = 477, + K_AND = 478, + K_NOT = 479, + K_DELAY = 480, + K_TABLEDIMENSION = 481, + K_TABLEAXIS = 482, + K_TABLEENTRIES = 483, + K_TRANSITIONTIME = 484, + K_EXTENSION = 485, + K_PROPDEF = 486, + K_STRING = 487, + K_INTEGER = 488, + K_REAL = 489, + K_RANGE = 490, + K_PROPERTY = 491, + K_VIRTUAL = 492, + K_BUSBITCHARS = 493, + K_VERSION = 494, + K_BEGINEXT = 495, + K_ENDEXT = 496, + K_UNIVERSALNOISEMARGIN = 497, + K_EDGERATETHRESHOLD1 = 498, + K_CORRECTIONTABLE = 499, + K_EDGERATESCALEFACTOR = 500, + K_EDGERATETHRESHOLD2 = 501, + K_VICTIMNOISE = 502, + K_NOISETABLE = 503, + K_EDGERATE = 504, + K_OUTPUTRESISTANCE = 505, + K_VICTIMLENGTH = 506, + K_CORRECTIONFACTOR = 507, + K_OUTPUTPINANTENNASIZE = 508, + K_INPUTPINANTENNASIZE = 509, + K_INOUTPINANTENNASIZE = 510, + K_CURRENTDEN = 511, + K_PWL = 512, + K_ANTENNALENGTHFACTOR = 513, + K_TAPERRULE = 514, + K_DIVIDERCHAR = 515, + K_ANTENNASIZE = 516, + K_ANTENNAMETALLENGTH = 517, + K_ANTENNAMETALAREA = 518, + K_RISESLEWLIMIT = 519, + K_FALLSLEWLIMIT = 520, + K_FUNCTION = 521, + K_BUFFER = 522, + K_INVERTER = 523, + K_NAMEMAPSTRING = 524, + K_NOWIREEXTENSIONATPIN = 525, + K_WIREEXTENSION = 526, + K_MESSAGE = 527, + K_CREATEFILE = 528, + K_OPENFILE = 529, + K_CLOSEFILE = 530, + K_WARNING = 531, + K_ERROR = 532, + K_FATALERROR = 533, + K_RECOVERY = 534, + K_SKEW = 535, + K_ANYEDGE = 536, + K_POSEDGE = 537, + K_NEGEDGE = 538, + K_SDFCONDSTART = 539, + K_SDFCONDEND = 540, + K_SDFCOND = 541, + K_MPWH = 542, + K_MPWL = 543, + K_PERIOD = 544, + K_ACCURRENTDENSITY = 545, + K_DCCURRENTDENSITY = 546, + K_AVERAGE = 547, + K_PEAK = 548, + K_RMS = 549, + K_FREQUENCY = 550, + K_CUTAREA = 551, + K_MEGAHERTZ = 552, + K_USELENGTHTHRESHOLD = 553, + K_LENGTHTHRESHOLD = 554, + K_ANTENNAINPUTGATEAREA = 555, + K_ANTENNAINOUTDIFFAREA = 556, + K_ANTENNAOUTPUTDIFFAREA = 557, + K_ANTENNAAREARATIO = 558, + K_ANTENNADIFFAREARATIO = 559, + K_ANTENNACUMAREARATIO = 560, + K_ANTENNACUMDIFFAREARATIO = 561, + K_ANTENNAAREAFACTOR = 562, + K_ANTENNASIDEAREARATIO = 563, + K_ANTENNADIFFSIDEAREARATIO = 564, + K_ANTENNACUMSIDEAREARATIO = 565, + K_ANTENNACUMDIFFSIDEAREARATIO = 566, + K_ANTENNASIDEAREAFACTOR = 567, + K_DIFFUSEONLY = 568, + K_MANUFACTURINGGRID = 569, + K_FIXEDMASK = 570, + K_ANTENNACELL = 571, + K_CLEARANCEMEASURE = 572, + K_EUCLIDEAN = 573, + K_MAXXY = 574, + K_USEMINSPACING = 575, + K_ROWMINSPACING = 576, + K_ROWABUTSPACING = 577, + K_FLIP = 578, + K_NONE = 579, + K_ANTENNAPARTIALMETALAREA = 580, + K_ANTENNAPARTIALMETALSIDEAREA = 581, + K_ANTENNAGATEAREA = 582, + K_ANTENNADIFFAREA = 583, + K_ANTENNAMAXAREACAR = 584, + K_ANTENNAMAXSIDEAREACAR = 585, + K_ANTENNAPARTIALCUTAREA = 586, + K_ANTENNAMAXCUTCAR = 587, + K_SLOTWIREWIDTH = 588, + K_SLOTWIRELENGTH = 589, + K_SLOTWIDTH = 590, + K_SLOTLENGTH = 591, + K_MAXADJACENTSLOTSPACING = 592, + K_MAXCOAXIALSLOTSPACING = 593, + K_MAXEDGESLOTSPACING = 594, + K_SPLITWIREWIDTH = 595, + K_MINIMUMDENSITY = 596, + K_MAXIMUMDENSITY = 597, + K_DENSITYCHECKWINDOW = 598, + K_DENSITYCHECKSTEP = 599, + K_FILLACTIVESPACING = 600, + K_MINIMUMCUT = 601, + K_ADJACENTCUTS = 602, + K_ANTENNAMODEL = 603, + K_BUMP = 604, + K_ENCLOSURE = 605, + K_FROMABOVE = 606, + K_FROMBELOW = 607, + K_IMPLANT = 608, + K_LENGTH = 609, + K_MAXVIASTACK = 610, + K_AREAIO = 611, + K_BLACKBOX = 612, + K_MAXWIDTH = 613, + K_MINENCLOSEDAREA = 614, + K_MINSTEP = 615, + K_ORIENT = 616, + K_OXIDE1 = 617, + K_OXIDE2 = 618, + K_OXIDE3 = 619, + K_OXIDE4 = 620, + K_PARALLELRUNLENGTH = 621, + K_MINWIDTH = 622, + K_PROTRUSIONWIDTH = 623, + K_SPACINGTABLE = 624, + K_WITHIN = 625, + K_ABOVE = 626, + K_BELOW = 627, + K_CENTERTOCENTER = 628, + K_CUTSIZE = 629, + K_CUTSPACING = 630, + K_DENSITY = 631, + K_DIAG45 = 632, + K_DIAG135 = 633, + K_MASK = 634, + K_DIAGMINEDGELENGTH = 635, + K_DIAGSPACING = 636, + K_DIAGPITCH = 637, + K_DIAGWIDTH = 638, + K_GENERATED = 639, + K_GROUNDSENSITIVITY = 640, + K_HARDSPACING = 641, + K_INSIDECORNER = 642, + K_LAYERS = 643, + K_LENGTHSUM = 644, + K_MICRONS = 645, + K_MINCUTS = 646, + K_MINSIZE = 647, + K_NETEXPR = 648, + K_OUTSIDECORNER = 649, + K_PREFERENCLOSURE = 650, + K_ROWCOL = 651, + K_ROWPATTERN = 652, + K_SOFT = 653, + K_SUPPLYSENSITIVITY = 654, + K_USEVIA = 655, + K_USEVIARULE = 656, + K_WELLTAP = 657, + K_ARRAYCUTS = 658, + K_ARRAYSPACING = 659, + K_ANTENNAAREADIFFREDUCEPWL = 660, + K_ANTENNAAREAMINUSDIFF = 661, + K_ANTENNACUMROUTINGPLUSCUT = 662, + K_ANTENNAGATEPLUSDIFF = 663, + K_ENDOFLINE = 664, + K_ENDOFNOTCHWIDTH = 665, + K_EXCEPTEXTRACUT = 666, + K_EXCEPTSAMEPGNET = 667, + K_EXCEPTPGNET = 668, + K_LONGARRAY = 669, + K_MAXEDGES = 670, + K_NOTCHLENGTH = 671, + K_NOTCHSPACING = 672, + K_ORTHOGONAL = 673, + K_PARALLELEDGE = 674, + K_PARALLELOVERLAP = 675, + K_PGONLY = 676, + K_PRL = 677, + K_TWOEDGES = 678, + K_TWOWIDTHS = 679, + IF = 680, + LNOT = 681, + UMINUS = 682 + }; +#endif + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ +/* Line 2058 of yacc.c */ +#line 194 "/dsk/l1/jpc/coriolis-2.x/src/coriolis/lefdef/src/lef/lef/lef.y" + + double dval ; + int integer ; + char * string ; + LefDefParser::lefPOINT pt; + + +/* Line 2058 of yacc.c */ +#line 492 "lef.tab.hpp" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + +extern YYSTYPE lefyylval; + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int lefyyparse (void *YYPARSE_PARAM); +#else +int lefyyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int lefyyparse (void); +#else +int lefyyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + +#endif /* !YY_LEFYY_LEF_TAB_HPP_INCLUDED */ diff --git a/lefdef/src/lef/lef/lef.y b/lefdef/src/lef/lef/lef.y new file mode 100644 index 00000000..bfb65dc4 --- /dev/null +++ b/lefdef/src/lef/lef/lef.y @@ -0,0 +1,7158 @@ +// ************************************************************************** +// ************************************************************************** +// ATTENTION: THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT! +// ************************************************************************** +// ************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ************************************************************************** +// ************************************************************************** + +// Error message number: +// 100 - lef reader, lefrReader.c +// 1000 - lef parser, error, lex.cpph, lef.y (CALLBACK & CHKERR) +// 1300 - from lefiError, lefiLayer.cpp +// 1350 - from lefiError, lefiMacro.cpp +// 1360 - from lefiError, lefiMisc.cpp +// 1400 - from lefiError, lefiNonDefault.cpp +// 1420 - from lefiError, lefiVia.cpp +// 1430 - from lefiError, lefiViaRule.cpp +// 1500 - lef parser, error, lef.y +// 2000 - lef parser, warning, lex.cpph +// 2500 - lef parser, warning, lef.y +// 3000 - lef parser, info, lex.cpph +// 4000 - lef writer, error, lefwWrtier.cpp & lefwWriterCalls.cpp +// 4500 - lef writer, warning, lefwWrtier.cpp & lefwWriterCalls.cpp +// 4700 - lef writer, info, lefwWrtier.cpp & lefwWriterCalls.cpp +// +// Highest message number = 4700 + +%{ +#include +#include +#include + +#include "lex.h" +#include "lefiDefs.hpp" +#include "lefiUser.hpp" +#include "lefiUtil.hpp" + +#include "lefrData.hpp" +#include "lefrCallBacks.hpp" +#include "lefrSettings.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +#define LYPROP_ECAP "EDGE_CAPACITANCE" + +#define YYINITDEPTH 10000 // pcr 640902 - initialize the yystacksize to 300 + // this may need to increase in a design gets + // larger and a polygon has around 300 sizes + // 11/21/2003 - incrreased to 500, design from + // Artisan is greater than 300, need to find a + // way to dynamically increase the size + // 2/10/2004 - increased to 1000 for pcr 686073 + // 3/22/2004 - increased to 2000 for pcr 695879 + // 9/29/2004 - double the size for pcr 746865 + // tried to overwrite the yyoverflow definition + // it is impossible due to the union structure + // 10/03/2006 - increased to 10000 for pcr 913695 + +#define YYMAXDEPTH 300000 // 1/24/2008 - increased from 150000 + // This value has to be greater than YYINITDEPTH + + +// Macro to describe how we handle a callback. +// If the function was set then call it. +// If the function returns non zero then there was an error +// so call the error routine and exit. +#define CALLBACK(func, typ, data) \ + if (!lefData->lef_errors) { \ + if (func) { \ + if ((lefData->lefRetVal = (*func)(typ, data, lefSettings->UserData)) == 0) { \ + } else { \ + return lefData->lefRetVal; \ + } \ + } \ + } + +#define CHKERR() \ + if (lefData->lef_errors > 20) { \ + lefError(1020, "Too many syntax errors."); \ + lefData->lef_errors = 0; \ + return 1; \ + } + +// ********************************************************************** +// ********************************************************************** + +#define C_EQ 0 +#define C_NE 1 +#define C_LT 2 +#define C_LE 3 +#define C_GT 4 +#define C_GE 5 + + +int comp_str(char *s1, int op, char *s2) +{ + int k = strcmp(s1, s2); + switch (op) { + case C_EQ: return k == 0; + case C_NE: return k != 0; + case C_GT: return k > 0; + case C_GE: return k >= 0; + case C_LT: return k < 0; + case C_LE: return k <= 0; + } + return 0; +} +int comp_num(double s1, int op, double s2) +{ + double k = s1 - s2; + switch (op) { + case C_EQ: return k == 0; + case C_NE: return k != 0; + case C_GT: return k > 0; + case C_GE: return k >= 0; + case C_LT: return k < 0; + case C_LE: return k <= 0; + } + return 0; +} + +int validNum(int values) { + switch (values) { + case 100: + case 200: + case 1000: + case 2000: + return 1; + case 400: + case 800: + case 4000: + case 8000: + case 10000: + case 20000: + if (lefData->versionNum < 5.6) { + if (lefCallbacks->UnitsCbk) { + if (lefData->unitsWarnings++ < lefSettings->UnitsWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "Error found when processing LEF file '%s'\nUnit %d is a version 5.6 or later syntax\nYour lef file is defined with version %g.", + lefData->lefrFileName, values, lefData->versionNum); + lefError(1501, lefData->outMsg); + lefFree(lefData->outMsg); + } + } + return 0; + } else { + return 1; + } + } + if (lefData->unitsWarnings++ < lefSettings->UnitsWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "The value %d defined for LEF UNITS DATABASE MICRONS is invalid\n. Correct value is 100, 200, 400, 800, 1000, 2000, 4000, 8000, 10000, or 20000", values); + lefError(1502, lefData->outMsg); + lefFree(lefData->outMsg); + } + CHKERR(); + return 0; +} + +int zeroOrGt(double values) { + if (values < 0) + return 0; + return 1; +} + +%} + +%union { + double dval ; + int integer ; + char * string ; + LefDefParser::lefPOINT pt; +} + +%token K_HISTORY +%token K_ABUT K_ABUTMENT K_ACTIVE K_ANALOG K_ARRAY K_AREA +%token K_BLOCK K_BOTTOMLEFT K_BOTTOMRIGHT +%token K_BY K_CAPACITANCE K_CAPMULTIPLIER K_CLASS K_CLOCK K_CLOCKTYPE +%token K_COLUMNMAJOR K_DESIGNRULEWIDTH K_INFLUENCE +%token K_CORE K_CORNER K_COVER K_CPERSQDIST K_CURRENT +%token K_CURRENTSOURCE K_CUT K_DEFAULT K_DATABASE K_DATA +%token K_DIELECTRIC K_DIRECTION K_DO K_EDGECAPACITANCE +%token K_EEQ K_END K_ENDCAP K_FALL K_FALLCS K_FALLT0 K_FALLSATT1 +%token K_FALLRS K_FALLSATCUR K_FALLTHRESH K_FEEDTHRU K_FIXED K_FOREIGN K_FROMPIN +%token K_GENERATE K_GENERATOR K_GROUND K_HEIGHT K_HORIZONTAL K_INOUT K_INPUT +%token K_INPUTNOISEMARGIN K_COMPONENTPIN +%token K_INTRINSIC K_INVERT K_IRDROP K_ITERATE K_IV_TABLES K_LAYER K_LEAKAGE +%token K_LEQ K_LIBRARY K_MACRO K_MATCH K_MAXDELAY K_MAXLOAD K_METALOVERHANG K_MILLIAMPS +%token K_MILLIWATTS K_MINFEATURE K_MUSTJOIN K_NAMESCASESENSITIVE K_NANOSECONDS +%token K_NETS K_NEW K_NONDEFAULTRULE +%token K_NONINVERT K_NONUNATE K_OBS K_OHMS K_OFFSET K_ORIENTATION K_ORIGIN K_OUTPUT +%token K_OUTPUTNOISEMARGIN +%token K_OVERHANG K_OVERLAP K_OFF K_ON K_OVERLAPS K_PAD K_PATH K_PATTERN K_PICOFARADS +%token K_PIN K_PITCH +%token K_PLACED K_POLYGON K_PORT K_POST K_POWER K_PRE K_PULLDOWNRES K_RECT +%token K_RESISTANCE K_RESISTIVE K_RING K_RISE K_RISECS K_RISERS K_RISESATCUR K_RISETHRESH +%token K_RISESATT1 K_RISET0 K_RISEVOLTAGETHRESHOLD K_FALLVOLTAGETHRESHOLD +%token K_ROUTING K_ROWMAJOR K_RPERSQ K_SAMENET K_SCANUSE K_SHAPE K_SHRINKAGE +%token K_SIGNAL K_SITE K_SIZE K_SOURCE K_SPACER K_SPACING K_SPECIALNETS K_STACK +%token K_START K_STEP K_STOP K_STRUCTURE K_SYMMETRY K_TABLE K_THICKNESS K_TIEHIGH +%token K_TIELOW K_TIEOFFR K_TIME K_TIMING K_TO K_TOPIN K_TOPLEFT K_TOPRIGHT +%token K_TOPOFSTACKONLY +%token K_TRISTATE K_TYPE K_UNATENESS K_UNITS K_USE K_VARIABLE K_VERTICAL K_VHI +%token K_VIA K_VIARULE K_VLO K_VOLTAGE K_VOLTS K_WIDTH K_X K_Y +%token T_STRING QSTRING +%token NUMBER +%token K_N K_S K_E K_W K_FN K_FS K_FE K_FW +%token K_R0 K_R90 K_R180 K_R270 K_MX K_MY K_MXR90 K_MYR90 +%token K_USER K_MASTERSLICE +%token K_ENDMACRO K_ENDMACROPIN K_ENDVIARULE K_ENDVIA K_ENDLAYER K_ENDSITE +%token K_CANPLACE K_CANNOTOCCUPY K_TRACKS K_FLOORPLAN K_GCELLGRID K_DEFAULTCAP +%token K_MINPINS K_WIRECAP +%token K_STABLE K_SETUP K_HOLD +%token K_DEFINE K_DEFINES K_DEFINEB K_IF K_THEN K_ELSE K_FALSE K_TRUE +%token K_EQ K_NE K_LE K_LT K_GE K_GT K_OR K_AND K_NOT +%token K_DELAY K_TABLEDIMENSION K_TABLEAXIS K_TABLEENTRIES K_TRANSITIONTIME +%token K_EXTENSION +%token K_PROPDEF K_STRING K_INTEGER K_REAL K_RANGE K_PROPERTY +%token K_VIRTUAL K_BUSBITCHARS K_VERSION +%token K_BEGINEXT K_ENDEXT +%token K_UNIVERSALNOISEMARGIN K_EDGERATETHRESHOLD1 K_CORRECTIONTABLE +%token K_EDGERATESCALEFACTOR K_EDGERATETHRESHOLD2 K_VICTIMNOISE +%token K_NOISETABLE K_EDGERATE K_OUTPUTRESISTANCE K_VICTIMLENGTH +%token K_CORRECTIONFACTOR K_OUTPUTPINANTENNASIZE +%token K_INPUTPINANTENNASIZE K_INOUTPINANTENNASIZE +%token K_CURRENTDEN K_PWL K_ANTENNALENGTHFACTOR K_TAPERRULE +%token K_DIVIDERCHAR K_ANTENNASIZE K_ANTENNAMETALLENGTH K_ANTENNAMETALAREA +%token K_RISESLEWLIMIT K_FALLSLEWLIMIT K_FUNCTION K_BUFFER K_INVERTER +%token K_NAMEMAPSTRING K_NOWIREEXTENSIONATPIN K_WIREEXTENSION +%token K_MESSAGE K_CREATEFILE K_OPENFILE K_CLOSEFILE K_WARNING +%token K_ERROR K_FATALERROR +%token K_RECOVERY K_SKEW K_ANYEDGE K_POSEDGE K_NEGEDGE +%token K_SDFCONDSTART K_SDFCONDEND K_SDFCOND +%token K_MPWH K_MPWL K_PERIOD +%token K_ACCURRENTDENSITY K_DCCURRENTDENSITY K_AVERAGE K_PEAK K_RMS K_FREQUENCY +%token K_CUTAREA K_MEGAHERTZ K_USELENGTHTHRESHOLD K_LENGTHTHRESHOLD +%token K_ANTENNAINPUTGATEAREA K_ANTENNAINOUTDIFFAREA K_ANTENNAOUTPUTDIFFAREA +%token K_ANTENNAAREARATIO K_ANTENNADIFFAREARATIO K_ANTENNACUMAREARATIO +%token K_ANTENNACUMDIFFAREARATIO K_ANTENNAAREAFACTOR K_ANTENNASIDEAREARATIO +%token K_ANTENNADIFFSIDEAREARATIO K_ANTENNACUMSIDEAREARATIO +%token K_ANTENNACUMDIFFSIDEAREARATIO K_ANTENNASIDEAREAFACTOR +%token K_DIFFUSEONLY K_MANUFACTURINGGRID K_FIXEDMASK +%token K_ANTENNACELL K_CLEARANCEMEASURE K_EUCLIDEAN K_MAXXY +%token K_USEMINSPACING K_ROWMINSPACING K_ROWABUTSPACING K_FLIP K_NONE +%token K_ANTENNAPARTIALMETALAREA K_ANTENNAPARTIALMETALSIDEAREA +%token K_ANTENNAGATEAREA K_ANTENNADIFFAREA K_ANTENNAMAXAREACAR +%token K_ANTENNAMAXSIDEAREACAR K_ANTENNAPARTIALCUTAREA K_ANTENNAMAXCUTCAR +%token K_SLOTWIREWIDTH K_SLOTWIRELENGTH K_SLOTWIDTH K_SLOTLENGTH +%token K_MAXADJACENTSLOTSPACING K_MAXCOAXIALSLOTSPACING K_MAXEDGESLOTSPACING +%token K_SPLITWIREWIDTH K_MINIMUMDENSITY K_MAXIMUMDENSITY K_DENSITYCHECKWINDOW +%token K_DENSITYCHECKSTEP K_FILLACTIVESPACING K_MINIMUMCUT K_ADJACENTCUTS +%token K_ANTENNAMODEL K_BUMP K_ENCLOSURE K_FROMABOVE K_FROMBELOW +%token K_IMPLANT K_LENGTH K_MAXVIASTACK K_AREAIO K_BLACKBOX +%token K_MAXWIDTH K_MINENCLOSEDAREA K_MINSTEP K_ORIENT K_OXIDE1 K_OXIDE2 +%token K_OXIDE3 K_OXIDE4 K_PARALLELRUNLENGTH K_MINWIDTH +%token K_PROTRUSIONWIDTH K_SPACINGTABLE K_WITHIN +%token K_ABOVE K_BELOW K_CENTERTOCENTER K_CUTSIZE K_CUTSPACING K_DENSITY +%token K_DIAG45 K_DIAG135 K_MASK +%token K_DIAGMINEDGELENGTH K_DIAGSPACING K_DIAGPITCH K_DIAGWIDTH +%token K_GENERATED K_GROUNDSENSITIVITY K_HARDSPACING K_INSIDECORNER +%token K_LAYERS K_LENGTHSUM K_MICRONS K_MINCUTS +%token K_MINSIZE K_NETEXPR K_OUTSIDECORNER +%token K_PREFERENCLOSURE K_ROWCOL K_ROWPATTERN K_SOFT +%token K_SUPPLYSENSITIVITY K_USEVIA +%token K_USEVIARULE K_WELLTAP +%token K_ARRAYCUTS K_ARRAYSPACING K_ANTENNAAREADIFFREDUCEPWL +%token K_ANTENNAAREAMINUSDIFF +%token K_ANTENNACUMROUTINGPLUSCUT K_ANTENNAGATEPLUSDIFF +%token K_ENDOFLINE K_ENDOFNOTCHWIDTH K_EXCEPTEXTRACUT K_EXCEPTSAMEPGNET +%token K_EXCEPTPGNET +%token K_LONGARRAY K_MAXEDGES K_NOTCHLENGTH K_NOTCHSPACING K_ORTHOGONAL +%token K_PARALLELEDGE K_PARALLELOVERLAP K_PGONLY K_PRL K_TWOEDGES K_TWOWIDTHS + +%type start_macro end_macro +%type start_layer +%type macro_pin_use +%type macro_scan_use +%type pin_shape +%type pad_type core_type endcap_type class_type site_class +%type start_foreign spacing_type clearance_type +%type pt +%type macro_origin +%type layer_option layer_options layer_type layer_direction +%type electrical_direction +%type orientation maskColor +%type expression +%type b_expr +%type s_expr +%type relop spacing_value +%type opt_layer_name risefall unateness delay_or_transition +%type two_pin_trigger from_pin_trigger to_pin_trigger +%type one_pin_trigger req_layer_name +%type layer_table_type layer_enclosure_type_opt layer_minstep_type +%type layer_sp_TwoWidthsPRL +%type int_number + +%nonassoc IF +%left K_AND +%left K_OR +%left K_LE K_EQ K_LT K_NE K_GE K_GT +%nonassoc LNOT +%left '-' '+' +%left '*' '/' +%nonassoc UMINUS + +%% + +lef_file: rules extension_opt end_library + { + // 11/16/2001 - Wanda da Rosa - pcr 408334 + // Return 1 if there are errors + if (lefData->lef_errors) + return 1; + if (!lefData->hasVer) { + char temp[300]; + sprintf(temp, "No VERSION statement found, using the default value %2g.", lefData->versionNum); + lefWarning(2001, temp); + } + //only pre 5.6, 5.6 it is obsolete + if (!lefData->hasNameCase && lefData->versionNum < 5.6) + lefWarning(2002, "NAMESCASESENSITIVE is a required statement on LEF file with version 5.5 and earlier.\nWithout NAMESCASESENSITIVE defined, the LEF file is technically incorrect.\nRefer the LEF/DEF 5.5 or earlier Language Referece manual on how to define this statement."); + if (!lefData->hasBusBit && lefData->versionNum < 5.6) + lefWarning(2003, "BUSBITCHARS is a required statement on LEF file with version 5.5 and earlier.\nWithout BUSBITCHARS defined, the LEF file is technically incorrect.\nRefer the LEF/DEF 5.5 or earlier Language Referece manual on how to define this statement."); + if (!lefData->hasDivChar && lefData->versionNum < 5.6) + lefWarning(2004, "DIVIDERCHAR is a required statementon LEF file with version 5.5 and earlier.\nWithout DIVIDECHAR defined, the LEF file is technically incorrect.\nRefer the LEF/DEF 5.5 or earlier Language Referece manual on how to define this statement."); + + } + +version: K_VERSION { lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING ';' + { + // More than 1 VERSION in lef file within the open file - It's wrong syntax, + // but copy old behavior - initialize lef reading. + if (lefData->hasVer) + { + lefData->initRead(); + } + + lefData->versionNum = convert_name2num($3); + if (lefData->versionNum > CURRENT_VERSION) { + char temp[120]; + sprintf(temp, + "Lef parser %.1f does not support lef file with version %s. Parser will stop processing.", CURRENT_VERSION, $3); + lefError(1503, temp); + return 1; + } + + if (lefCallbacks->VersionStrCbk) { + CALLBACK(lefCallbacks->VersionStrCbk, lefrVersionStrCbkType, $3); + } else { + if (lefCallbacks->VersionCbk) + CALLBACK(lefCallbacks->VersionCbk, lefrVersionCbkType, lefData->versionNum); + } + if (lefData->versionNum > 5.3 && lefData->versionNum < 5.4) { + lefData->ignoreVersion = 1; + } + lefData->use5_3 = lefData->use5_4 = 0; + lefData->lef_errors = 0; + lefData->hasVer = 1; + if (lefData->versionNum < 5.6) { + lefData->doneLib = 0; + lefData->namesCaseSensitive = lefSettings->CaseSensitive; + } else { + lefData->doneLib = 1; + lefData->namesCaseSensitive = 1; + } + } + +int_number : NUMBER + { + // int_number represent 'integer-like' type. It can have fraction and exponent part + // but the value shouldn't exceed the 64-bit integer limit. + if (!(( yylval.dval >= lefData->leflVal) && ( yylval.dval <= lefData->lefrVal))) { // YES, it isn't really a number + char *str = (char*) lefMalloc(strlen(lefData->current_token) + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-203) Number has exceeded the limit for an integer. See file %s at line %d.\n", + lefData->lefrFileName, lefData->lef_nlines); + fflush(stdout); + lefiError(0, 203, str); + free(str); + lefData->lef_errors++; + } + + $$ = yylval.dval ; + } + +dividerchar: K_DIVIDERCHAR QSTRING ';' + { + if (lefCallbacks->DividerCharCbk) { + if (strcmp($2, "") != 0) { + CALLBACK(lefCallbacks->DividerCharCbk, lefrDividerCharCbkType, $2); + } else { + CALLBACK(lefCallbacks->DividerCharCbk, lefrDividerCharCbkType, "/"); + lefWarning(2005, "DIVIDERCHAR has an invalid null value. Value is set to default /"); + } + } + lefData->hasDivChar = 1; + } + +busbitchars: K_BUSBITCHARS QSTRING ';' + { + if (lefCallbacks->BusBitCharsCbk) { + if (strcmp($2, "") != 0) { + CALLBACK(lefCallbacks->BusBitCharsCbk, lefrBusBitCharsCbkType, $2); + } else { + CALLBACK(lefCallbacks->BusBitCharsCbk, lefrBusBitCharsCbkType, "[]"); + lefWarning(2006, "BUSBITCHAR has an invalid null value. Value is set to default []"); + } + } + lefData->hasBusBit = 1; + } + +rules: + | rules rule + | error + { } + +end_library: + { + if (lefData->versionNum >= 5.6) { + lefData->doneLib = 1; + lefData->ge56done = 1; + } + } + | K_END K_LIBRARY + { + lefData->doneLib = 1; + lefData->ge56done = 1; + if (lefCallbacks->LibraryEndCbk) + CALLBACK(lefCallbacks->LibraryEndCbk, lefrLibraryEndCbkType, 0); + // 11/16/2001 - Wanda da Rosa - pcr 408334 + // Return 1 if there are errors + } + +rule: version | busbitchars | case_sensitivity | units_section + | layer_rule | via | viarule | viarule_generate | dividerchar + | wireextension | msg_statement + | spacing_rule | dielectric | minfeature | irdrop | site | macro | array + | def_statement | nondefault_rule | prop_def_section + | universalnoisemargin | edgeratethreshold1 + | edgeratescalefactor | edgeratethreshold2 + | noisetable | correctiontable | input_antenna + | output_antenna | inout_antenna + | antenna_input | antenna_inout | antenna_output | manufacturing | fixedmask + | useminspacing | clearancemeasure | maxstack_via + | create_file_statement + ; + +case_sensitivity: K_NAMESCASESENSITIVE K_ON ';' + { + if (lefData->versionNum < 5.6) { + lefData->namesCaseSensitive = TRUE; + if (lefCallbacks->CaseSensitiveCbk) + CALLBACK(lefCallbacks->CaseSensitiveCbk, + lefrCaseSensitiveCbkType, + lefData->namesCaseSensitive); + lefData->hasNameCase = 1; + } else + if (lefCallbacks->CaseSensitiveCbk) // write warning only if cbk is set + if (lefData->caseSensitiveWarnings++ < lefSettings->CaseSensitiveWarnings) + lefWarning(2007, "NAMESCASESENSITIVE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | K_NAMESCASESENSITIVE K_OFF ';' + { + if (lefData->versionNum < 5.6) { + lefData->namesCaseSensitive = FALSE; + if (lefCallbacks->CaseSensitiveCbk) + CALLBACK(lefCallbacks->CaseSensitiveCbk, lefrCaseSensitiveCbkType, + lefData->namesCaseSensitive); + lefData->hasNameCase = 1; + } else { + if (lefCallbacks->CaseSensitiveCbk) { // write error only if cbk is set + if (lefData->caseSensitiveWarnings++ < lefSettings->CaseSensitiveWarnings) { + lefError(1504, "NAMESCASESENSITIVE statement is set with OFF.\nStarting version 5.6, NAMESCASENSITIVE is obsolete,\nif it is defined, it has to have the ON value.\nParser will stop processing."); + CHKERR(); + } + } + } + } + +wireextension: K_NOWIREEXTENSIONATPIN K_ON ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->NoWireExtensionCbk) + CALLBACK(lefCallbacks->NoWireExtensionCbk, lefrNoWireExtensionCbkType, "ON"); + } else + if (lefCallbacks->NoWireExtensionCbk) // write warning only if cbk is set + if (lefData->noWireExtensionWarnings++ < lefSettings->NoWireExtensionWarnings) + lefWarning(2008, "NOWIREEXTENSIONATPIN statement is obsolete in version 5.6 or later.\nThe NOWIREEXTENSIONATPIN statement will be ignored."); + } + | K_NOWIREEXTENSIONATPIN K_OFF ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->NoWireExtensionCbk) + CALLBACK(lefCallbacks->NoWireExtensionCbk, lefrNoWireExtensionCbkType, "OFF"); + } else + if (lefCallbacks->NoWireExtensionCbk) // write warning only if cbk is set + if (lefData->noWireExtensionWarnings++ < lefSettings->NoWireExtensionWarnings) + lefWarning(2008, "NOWIREEXTENSIONATPIN statement is obsolete in version 5.6 or later.\nThe NOWIREEXTENSIONATPIN statement will be ignored."); + } + +fixedmask: K_FIXEDMASK ';' + { + if (lefData->versionNum >= 5.8) { + + if (lefCallbacks->FixedMaskCbk) { + lefData->lefFixedMask = 1; + CALLBACK(lefCallbacks->FixedMaskCbk, lefrFixedMaskCbkType, lefData->lefFixedMask); + } + + lefData->hasFixedMask = 1; + } + } + +manufacturing: K_MANUFACTURINGGRID int_number ';' + { + if (lefCallbacks->ManufacturingCbk) + CALLBACK(lefCallbacks->ManufacturingCbk, lefrManufacturingCbkType, $2); + lefData->hasManufactur = 1; + } + +useminspacing: K_USEMINSPACING spacing_type spacing_value ';' + { + if ((strcmp($2, "PIN") == 0) && (lefData->versionNum >= 5.6)) { + if (lefCallbacks->UseMinSpacingCbk) // write warning only if cbk is set + if (lefData->useMinSpacingWarnings++ < lefSettings->UseMinSpacingWarnings) + lefWarning(2009, "USEMINSPACING PIN statement is obsolete in version 5.6 or later.\n The USEMINSPACING PIN statement will be ignored."); + } else { + if (lefCallbacks->UseMinSpacingCbk) { + lefData->lefrUseMinSpacing.set($2, $3); + CALLBACK(lefCallbacks->UseMinSpacingCbk, lefrUseMinSpacingCbkType, + &lefData->lefrUseMinSpacing); + } + } + } + +clearancemeasure: K_CLEARANCEMEASURE clearance_type ';' + { CALLBACK(lefCallbacks->ClearanceMeasureCbk, lefrClearanceMeasureCbkType, $2); } + +clearance_type: + K_MAXXY {$$ = (char*)"MAXXY";} + | K_EUCLIDEAN {$$ = (char*)"EUCLIDEAN";} + +spacing_type: + K_OBS {$$ = (char*)"OBS";} + | K_PIN {$$ = (char*)"PIN";} + +spacing_value: + K_ON {$$ = 1;} + | K_OFF {$$ = 0;} + +units_section: start_units units_rules K_END K_UNITS + { + if (lefCallbacks->UnitsCbk) + CALLBACK(lefCallbacks->UnitsCbk, lefrUnitsCbkType, &lefData->lefrUnits); + } + +start_units: K_UNITS + { + lefData->lefrUnits.clear(); + if (lefData->hasManufactur) { + if (lefData->unitsWarnings++ < lefSettings->UnitsWarnings) { + lefError(1505, "MANUFACTURINGGRID statement was defined before UNITS.\nRefer the LEF Language Reference manual for the order of LEF statements."); + CHKERR(); + } + } + if (lefData->hasMinfeature) { + if (lefData->unitsWarnings++ < lefSettings->UnitsWarnings) { + lefError(1712, "MINFEATURE statement was defined before UNITS.\nRefer the LEF Language Reference manual for the order of LEF statements."); + CHKERR(); + } + } + if (lefData->versionNum < 5.6) { + if (lefData->hasSite) {//SITE is defined before UNIT and is illegal in pre 5.6 + lefError(1713, "SITE statement was defined before UNITS.\nRefer the LEF Language Reference manual for the order of LEF statements."); + CHKERR(); + } + } + } + +units_rules: + | units_rules units_rule + ; + +units_rule: K_TIME K_NANOSECONDS int_number ';' + { if (lefCallbacks->UnitsCbk) lefData->lefrUnits.setTime($3); } + | K_CAPACITANCE K_PICOFARADS int_number ';' + { if (lefCallbacks->UnitsCbk) lefData->lefrUnits.setCapacitance($3); } + | K_RESISTANCE K_OHMS int_number ';' + { if (lefCallbacks->UnitsCbk) lefData->lefrUnits.setResistance($3); } + | K_POWER K_MILLIWATTS int_number ';' + { if (lefCallbacks->UnitsCbk) lefData->lefrUnits.setPower($3); } + | K_CURRENT K_MILLIAMPS int_number ';' + { if (lefCallbacks->UnitsCbk) lefData->lefrUnits.setCurrent($3); } + | K_VOLTAGE K_VOLTS int_number ';' + { if (lefCallbacks->UnitsCbk) lefData->lefrUnits.setVoltage($3); } + | K_DATABASE K_MICRONS int_number ';' + { + if(validNum((int)$3)) { + if (lefCallbacks->UnitsCbk) + lefData->lefrUnits.setDatabase("MICRONS", $3); + } + } + | K_FREQUENCY K_MEGAHERTZ NUMBER ';' + { if (lefCallbacks->UnitsCbk) lefData->lefrUnits.setFrequency($3); } + +layer_rule: start_layer + layer_options end_layer + { + if (lefCallbacks->LayerCbk) + CALLBACK(lefCallbacks->LayerCbk, lefrLayerCbkType, &lefData->lefrLayer); + } + +start_layer: K_LAYER {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING + { + if (lefData->lefrHasMaxVS) { // 5.5 + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1506, "A MAXVIASTACK statement is defined before the LAYER statement.\nRefer to the LEF Language Reference manual for the order of LEF statements."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setName($3); + lefData->useLenThr = 0; + lefData->layerCut = 0; + lefData->layerMastOver = 0; + lefData->layerRout = 0; + lefData->layerDir = 0; + lefData->lefrHasLayer = 1; + //strcpy(lefData->layerName, $3); + lefData->layerName = strdup($3); + lefData->hasType = 0; + lefData->hasMask = 0; + lefData->hasPitch = 0; + lefData->hasWidth = 0; + lefData->hasDirection = 0; + lefData->hasParallel = 0; + lefData->hasInfluence = 0; + lefData->hasTwoWidths = 0; + lefData->lefrHasSpacingTbl = 0; + lefData->lefrHasSpacing = 0; + } + +end_layer: K_END {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING + { + if (strcmp(lefData->layerName, $3) != 0) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END LAYER name %s is different from the LAYER name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $3, lefData->layerName); + lefError(1507, lefData->outMsg); + lefFree(lefData->outMsg); + lefFree(lefData->layerName); + CHKERR(); + } else + lefFree(lefData->layerName); + } else + lefFree(lefData->layerName); + } else + lefFree(lefData->layerName); + if (!lefSettings->RelaxMode) { + if (lefData->hasType == 0) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1508, "TYPE statement is a required statement in a LAYER and it is not defined."); + CHKERR(); + } + } + } + if ((lefData->layerRout == 1) && (lefData->hasPitch == 0)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1509, "PITCH statement is a required statement in a LAYER with type ROUTING and it is not defined."); + CHKERR(); + } + } + } + if ((lefData->layerRout == 1) && (lefData->hasWidth == 0)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1510, "WIDTH statement is a required statement in a LAYER with type ROUTING and it is not defined."); + CHKERR(); + } + } + } + if ((lefData->layerRout == 1) && (lefData->hasDirection == 0)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, "The DIRECTION statement which is required in a LAYER with TYPE ROUTING is not defined in LAYER %s.\nUpdate your lef file and add the DIRECTION statement for layer %s.", $3, $3); + lefError(1511, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + } + +layer_options: + { } + | layer_options layer_option // Use left recursions + { } + +layer_option: + K_ARRAYSPACING // 5.7 + { + // let setArraySpacingCutSpacing to set the data + } + layer_arraySpacing_long + layer_arraySpacing_width + K_CUTSPACING int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setArraySpacingCut($6); + lefData->arrayCutsVal = 0; + } + } + layer_arraySpacing_arraycuts ';' + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "ARRAYSPACING is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1685, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + | K_TYPE layer_type ';' + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setType($2); + lefData->hasType = 1; + } + | K_MASK int_number ';' + { + if (lefData->versionNum < 5.8) { + if (lefData->layerWarnings++ < lefSettings->ViaWarnings) { + lefError(2081, "MASK information can only be defined with version 5.8"); + CHKERR(); + } + } else { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setMask((int)$2); + } + + lefData->hasMask = 1; + } + } + | K_PITCH int_number ';' + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setPitch($2); + lefData->hasPitch = 1; + } + | K_PITCH int_number int_number ';' + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setPitchXY($2, $3); + lefData->hasPitch = 1; + } + | K_DIAGPITCH int_number ';' + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setDiagPitch($2); + } + | K_DIAGPITCH int_number int_number ';' + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setDiagPitchXY($2, $3); + } + | K_OFFSET int_number ';' + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setOffset($2); + } + | K_OFFSET int_number int_number ';' + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setOffsetXY($2, $3); + } + | K_DIAGWIDTH int_number ';' + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setDiagWidth($2); + } + | K_DIAGSPACING int_number ';' + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setDiagSpacing($2); + } + | K_WIDTH int_number ';' // CUT & ROUTING + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setWidth($2); + lefData->hasWidth = 1; + } + | K_AREA NUMBER ';' + { + // Issue an error is this is defined in masterslice + if (lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1715, "It is incorrect to define an AREA statement in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing."); + CHKERR(); + } + } + } + + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setArea($2); + } + } + | K_SPACING int_number + { + lefData->hasSpCenter = 0; // reset to 0, only once per spacing is allowed + lefData->hasSpSamenet = 0; + lefData->hasSpParallel = 0; + lefData->hasSpLayer = 0; + lefData->layerCutSpacing = $2; // for error message purpose + // 11/22/99 - Wanda da Rosa, PCR 283762 + // Issue an error is this is defined in masterslice + if (lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1512, "It is incorrect to define a SPACING statement in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing."); + CHKERR(); + } + } + } + // 5.5 either SPACING or SPACINGTABLE, not both for routing layer only + if (lefData->layerRout) { + if (lefData->lefrHasSpacingTbl && lefData->versionNum < 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefWarning(2010, "It is incorrect to have both SPACING rules & SPACINGTABLE rules within a ROUTING layer"); + } + } + } + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingMin($2); + lefData->lefrHasSpacing = 1; + } else { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingMin($2); + } + } + layer_spacing_opts + layer_spacing_cut_routing ';' {} + | K_SPACINGTABLE K_ORTHOGONAL K_WITHIN int_number K_SPACING int_number // 5.7 + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingTableOrtho(); + if (lefCallbacks->LayerCbk) // due to converting to C, else, convertor produce + lefData->lefrLayer.addSpacingTableOrthoWithin($4, $6);//bad code + } + layer_spacingtable_opts ';' + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "SPACINGTABLE ORTHOGONAL is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1694, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + | K_DIRECTION layer_direction ';' + { + lefData->layerDir = 1; + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1513, "DIRECTION statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setDirection($2); + lefData->hasDirection = 1; + } + | K_RESISTANCE K_RPERSQ int_number ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1514, "RESISTANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setResistance($3); + } + | K_RESISTANCE K_RPERSQ K_PWL '(' res_points ')' ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1515, "RESISTANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + } + | K_CAPACITANCE K_CPERSQDIST int_number ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1516, "CAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setCapacitance($3); + } + | K_CAPACITANCE K_CPERSQDIST K_PWL '(' cap_points ')' ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1517, "CAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + } + | K_HEIGHT int_number ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1518, "HEIGHT statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setHeight($2); + } + | K_WIREEXTENSION int_number ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1519, "WIREEXTENSION statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setWireExtension($2); + } + | K_THICKNESS int_number ';' + { + if (!lefData->layerRout && (lefData->layerCut || lefData->layerMastOver)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1520, "THICKNESS statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setThickness($2); + } + | K_SHRINKAGE int_number ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1521, "SHRINKAGE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setShrinkage($2); + } + | K_CAPMULTIPLIER int_number ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1522, "CAPMULTIPLIER statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setCapMultiplier($2); + } + | K_EDGECAPACITANCE int_number ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1523, "EDGECAPACITANCE statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setEdgeCap($2); + } + + | K_ANTENNALENGTHFACTOR int_number ';' + { // 5.3 syntax + lefData->use5_3 = 1; + if (!lefData->layerRout && (lefData->layerCut || lefData->layerMastOver)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1525, "ANTENNALENGTHFACTOR statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } else if (lefData->versionNum >= 5.4) { + if (lefData->use5_4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNALENGTHFACTOR statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNALENGTHFACTOR syntax, which is incorrect.", lefData->versionNum); + lefError(1526, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaLength($2); + } + | K_CURRENTDEN int_number ';' + { + if (lefData->versionNum < 5.2) { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1702, "CURRENTDEN statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setCurrentDensity($2); + } else { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefWarning(2079, "CURRENTDEN statement is obsolete in version 5.2 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.2 or later."); + CHKERR(); + } + } + } + | K_CURRENTDEN K_PWL '(' current_density_pwl_list ')' ';' + { + if (lefData->versionNum < 5.2) { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1702, "CURRENTDEN statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + } else { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefWarning(2079, "CURRENTDEN statement is obsolete in version 5.2 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.2 or later."); + CHKERR(); + } + } + } + | K_CURRENTDEN '(' int_number int_number ')' ';' + { + if (lefData->versionNum < 5.2) { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1702, "CURRENTDEN statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setCurrentPoint($3, $4); + } else { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefWarning(2079, "CURRENTDEN statement is obsolete in version 5.2 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.2 or later."); + CHKERR(); + } + } + } + | K_PROPERTY { lefData->lefDumbMode = 10000000;} layer_prop_list ';' + { + lefData->lefDumbMode = 0; + } + | K_ACCURRENTDENSITY layer_table_type + { + if (lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1527, "ACCURRENTDENSITY statement can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addAccurrentDensity($2); + } + layer_frequency { + + } + | K_ACCURRENTDENSITY layer_table_type int_number ';' + { + if (lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1527, "ACCURRENTDENSITY statement can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addAccurrentDensity($2); + lefData->lefrLayer.setAcOneEntry($3); + } + } + | K_DCCURRENTDENSITY K_AVERAGE int_number ';' + { + if (lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1528, "DCCURRENTDENSITY statement can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addDccurrentDensity("AVERAGE"); + lefData->lefrLayer.setDcOneEntry($3); + } + } + | K_DCCURRENTDENSITY K_AVERAGE K_CUTAREA NUMBER + { + if (lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1528, "DCCURRENTDENSITY statement can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing."); + CHKERR(); + } + } + } + if (!lefData->layerCut) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1529, "CUTAREA statement can only be defined in LAYER with type CUT. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addDccurrentDensity("AVERAGE"); + lefData->lefrLayer.addNumber($4); + } + } + number_list ';' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addDcCutarea(); } + dc_layer_table {} + | K_DCCURRENTDENSITY K_AVERAGE K_WIDTH int_number + { + if (lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1528, "DCCURRENTDENSITY can't be defined in LAYER with TYPE MASTERSLICE or OVERLAP. Parser will stop processing."); + CHKERR(); + } + } + } + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1530, "WIDTH statement can only be defined in LAYER with type ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addDccurrentDensity("AVERAGE"); + lefData->lefrLayer.addNumber($4); + } + } + int_number_list ';' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addDcWidth(); } + dc_layer_table {} + +// 3/23/2000 - 5.4 syntax. Wanda da Rosa + | K_ANTENNAAREARATIO int_number ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1531, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNADIFFAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNAAREARATIO syntax, which is incorrect.", lefData->versionNum); + lefError(1704, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (!lefData->layerRout && !lefData->layerCut && lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1533, "ANTENNAAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaAreaRatio($2); + } + | K_ANTENNADIFFAREARATIO + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNADIFFAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1532, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNADIFFAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNADIFFAREARATIO syntax, which is incorrect.", lefData->versionNum); + lefError(1704, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (!lefData->layerRout && !lefData->layerCut && lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1534, "ANTENNADIFFAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + lefData->antennaType = lefiAntennaDAR; + } + layer_antenna_pwl ';' {} + | K_ANTENNACUMAREARATIO int_number ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACUMAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1535, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACUMAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNACUMAREARATIO syntax, which is incorrect.", lefData->versionNum); + lefError(1536, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (!lefData->layerRout && !lefData->layerCut && lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1537, "ANTENNACUMAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaCumAreaRatio($2); + } + | K_ANTENNACUMDIFFAREARATIO + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACUMDIFFAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1538, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACUMDIFFAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNACUMDIFFAREARATIO syntax, which is incorrect.", lefData->versionNum); + lefError(1539, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (!lefData->layerRout && !lefData->layerCut && lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1540, "ANTENNACUMDIFFAREARATIO statement can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + lefData->antennaType = lefiAntennaCDAR; + } + layer_antenna_pwl ';' {} + | K_ANTENNAAREAFACTOR int_number + { // both 5.3 & 5.4 syntax + if (!lefData->layerRout && !lefData->layerCut && lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1541, "ANTENNAAREAFACTOR can only be defined in LAYER with TYPE ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + // this does not need to check, since syntax is in both 5.3 & 5.4 + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaAreaFactor($2); + lefData->antennaType = lefiAntennaAF; + } + layer_antenna_duo ';' {} + | K_ANTENNASIDEAREARATIO int_number ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (!lefData->layerRout && (lefData->layerCut || lefData->layerMastOver)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1542, "ANTENNASIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNASIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1543, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNASIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNASIDEAREARATIO syntax, which is incorrect.", lefData->versionNum); + lefError(1544, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaSideAreaRatio($2); + } + | K_ANTENNADIFFSIDEAREARATIO + { // 5.4 syntax + lefData->use5_4 = 1; + if (!lefData->layerRout && (lefData->layerCut || lefData->layerMastOver)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1545, "ANTENNADIFFSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNADIFFSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1546, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNADIFFSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNADIFFSIDEAREARATIO syntax, which is incorrect.", lefData->versionNum); + lefError(1547, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + lefData->antennaType = lefiAntennaDSAR; + } + layer_antenna_pwl ';' {} + | K_ANTENNACUMSIDEAREARATIO int_number ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (!lefData->layerRout && (lefData->layerCut || lefData->layerMastOver)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1548, "ANTENNACUMSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACUMSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1549, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACUMSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNACUMSIDEAREARATIO syntax, which is incorrect.", lefData->versionNum); + lefError(1550, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaCumSideAreaRatio($2); + } + | K_ANTENNACUMDIFFSIDEAREARATIO + { // 5.4 syntax + lefData->use5_4 = 1; + if (!lefData->layerRout && (lefData->layerCut || lefData->layerMastOver)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1551, "ANTENNACUMDIFFSIDEAREARATIO can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACUMDIFFSIDEAREARATIO statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1552, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACUMDIFFSIDEAREARATIO statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNACUMDIFFSIDEAREARATIO syntax, which is incorrect.", lefData->versionNum); + lefError(1553, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + lefData->antennaType = lefiAntennaCDSAR; + } + layer_antenna_pwl ';' {} + | K_ANTENNASIDEAREAFACTOR int_number + { // 5.4 syntax + lefData->use5_4 = 1; + if (!lefData->layerRout && (lefData->layerCut || lefData->layerMastOver)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1554, "ANTENNASIDEAREAFACTOR can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNASIDEAREAFACTOR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1555, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNASIDEAREAFACTOR statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNASIDEAREAFACTOR syntax, which is incorrect.", lefData->versionNum); + lefError(1556, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaSideAreaFactor($2); + lefData->antennaType = lefiAntennaSAF; + } + layer_antenna_duo ';' {} + | K_ANTENNAMODEL // 5.5 + { // 5.4 syntax + lefData->use5_4 = 1; + if (!lefData->layerRout && !lefData->layerCut && lefData->layerMastOver) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1557, "ANTENNAMODEL can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMODEL statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1558, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMODEL statement is a version 5.4 or earlier syntax.\nYour lef file with version %g, has both old and new ANTENNAMODEL syntax, which is incorrect.", lefData->versionNum); + lefError(1559, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + lefData->antennaType = lefiAntennaO; + } + layer_oxide ';' {} + | K_ANTENNACUMROUTINGPLUSCUT ';' // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "ANTENNACUMROUTINGPLUSCUT is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1686, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (!lefData->layerRout && !lefData->layerCut) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1560, "ANTENNACUMROUTINGPLUSCUT can only be defined in LAYER with type ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaCumRoutingPlusCut(); + } + } + | K_ANTENNAGATEPLUSDIFF int_number ';' // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "ANTENNAGATEPLUSDIFF is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1687, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (!lefData->layerRout && !lefData->layerCut) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1561, "ANTENNAGATEPLUSDIFF can only be defined in LAYER with type ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaGatePlusDiff($2); + } + } + | K_ANTENNAAREAMINUSDIFF int_number ';' // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "ANTENNAAREAMINUSDIFF is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1688, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (!lefData->layerRout && !lefData->layerCut) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1562, "ANTENNAAREAMINUSDIFF can only be defined in LAYER with type ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setAntennaAreaMinusDiff($2); + } + } + | K_ANTENNAAREADIFFREDUCEPWL '(' pt pt // 5.7 + { + if (!lefData->layerRout && !lefData->layerCut) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1563, "ANTENNAAREADIFFREDUCEPWL can only be defined in LAYER with type ROUTING or CUT. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) { // require min 2 points, set the 1st 2 + if (lefData->lefrAntennaPWLPtr) { + lefData->lefrAntennaPWLPtr->Destroy(); + lefFree(lefData->lefrAntennaPWLPtr); + } + + lefData->lefrAntennaPWLPtr = lefiAntennaPWL::create(); + lefData->lefrAntennaPWLPtr->addAntennaPWL($3.x, $3.y); + lefData->lefrAntennaPWLPtr->addAntennaPWL($4.x, $4.y); + } + } + layer_diffusion_ratios ')' ';' + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setAntennaPWL(lefiAntennaADR, lefData->lefrAntennaPWLPtr); + lefData->lefrAntennaPWLPtr = NULL; + } + } + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "ANTENNAAREADIFFREDUCEPWL is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1689, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + | K_SLOTWIREWIDTH int_number ';' + { // 5.4 syntax + if (lefData->ignoreVersion) { + // do nothing + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSlotWireWidth($2); + } else if (lefData->versionNum >= 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2011, "SLOTWIREWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later."); + } + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "SLOTWIREWIDTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1564, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSlotWireWidth($2); + } + | K_SLOTWIRELENGTH int_number ';' + { // 5.4 syntax + if (lefData->ignoreVersion) { + // do nothing + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSlotWireLength($2); + } else if (lefData->versionNum >= 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2012, "SLOTWIRELENGTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later."); + } + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "SLOTWIRELENGTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1565, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSlotWireLength($2); + } + | K_SLOTWIDTH int_number ';' + { // 5.4 syntax + if (lefData->ignoreVersion) { + // do nothing + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSlotWidth($2); + } else if (lefData->versionNum >= 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2013, "SLOTWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later."); + } + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "SLOTWIDTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1566, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSlotWidth($2); + } + | K_SLOTLENGTH int_number ';' + { // 5.4 syntax + if (lefData->ignoreVersion) { + // do nothing + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSlotLength($2); + } else if (lefData->versionNum >= 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2014, "SLOTLENGTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later."); + } + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "SLOTLENGTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1567, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSlotLength($2); + } + | K_MAXADJACENTSLOTSPACING int_number ';' + { // 5.4 syntax + if (lefData->ignoreVersion) { + // do nothing + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMaxAdjacentSlotSpacing($2); + } else if (lefData->versionNum >= 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2015, "MAXADJACENTSLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later."); + } + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MAXADJACENTSLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1568, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMaxAdjacentSlotSpacing($2); + } + | K_MAXCOAXIALSLOTSPACING int_number ';' + { // 5.4 syntax + if (lefData->ignoreVersion) { + // do nothing + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMaxCoaxialSlotSpacing($2); + } else if (lefData->versionNum >= 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2016, "MAXCOAXIALSLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later."); + } + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MAXCOAXIALSLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1569, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMaxCoaxialSlotSpacing($2); + } + | K_MAXEDGESLOTSPACING int_number ';' + { // 5.4 syntax + if (lefData->ignoreVersion) { + // do nothing + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMaxEdgeSlotSpacing($2); + } else if (lefData->versionNum >= 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2017, "MAXEDGESLOTSPACING statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later."); + } + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MAXEDGESLOTSPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1570, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMaxEdgeSlotSpacing($2); + } + | K_SPLITWIREWIDTH int_number ';' + { // 5.4 syntax + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum >= 5.7) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2018, "SPLITWIREWIDTH statement is obsolete in version 5.7 or later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.7 or later."); + } + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "SPLITWIREWIDTH statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1571, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setSplitWireWidth($2); + } + | K_MINIMUMDENSITY int_number ';' + { // 5.4 syntax, pcr 394389 + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MINIMUMDENSITY statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1572, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMinimumDensity($2); + } + | K_MAXIMUMDENSITY int_number ';' + { // 5.4 syntax, pcr 394389 + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MAXIMUMDENSITY statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1573, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMaximumDensity($2); + } + | K_DENSITYCHECKWINDOW int_number int_number ';' + { // 5.4 syntax, pcr 394389 + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "DENSITYCHECKWINDOW statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1574, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setDensityCheckWindow($2, $3); + } + | K_DENSITYCHECKSTEP int_number ';' + { // 5.4 syntax, pcr 394389 + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "DENSITYCHECKSTEP statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1575, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setDensityCheckStep($2); + } + | K_FILLACTIVESPACING int_number ';' + { // 5.4 syntax, pcr 394389 + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "FILLACTIVESPACING statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1576, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setFillActiveSpacing($2); + } + | K_MAXWIDTH int_number ';' // 5.5 + { + // 5.5 MAXWIDTH, is for routing layer only + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1577, "MAXWIDTH statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MAXWIDTH statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1578, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMaxwidth($2); + } + | K_MINWIDTH int_number ';' // 5.5 + { + // 5.5 MINWIDTH, is for routing layer only + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1579, "MINWIDTH statement can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } + if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MINWIDTH statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1580, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setMinwidth($2); + } + | K_MINENCLOSEDAREA NUMBER // 5.5 + { + if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MINENCLOSEDAREA statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1581, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addMinenclosedarea($2); + } + layer_minen_width ';' {} + | K_MINIMUMCUT int_number K_WIDTH int_number // 5.5 + { // pcr 409334 + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addMinimumcut((int)$2, $4); + lefData->hasLayerMincut = 0; + } + layer_minimumcut_within + layer_minimumcut_from + layer_minimumcut_length ';' + { + if (!lefData->hasLayerMincut) { // FROMABOVE nor FROMBELOW is set + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addMinimumcutConnect((char*)""); + } + } + | K_MINSTEP int_number // 5.5 + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addMinstep($2); + } + layer_minstep_options ';' // 5.6 + { + } + | K_PROTRUSIONWIDTH int_number K_LENGTH int_number K_WIDTH int_number ';' // 5.5 + { + if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "PROTRUSION RULE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1582, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.setProtrusion($2, $4, $6); + } + | K_SPACINGTABLE // 5.5 + { + if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "SPACINGTABLE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1583, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + // 5.5 either SPACING or SPACINGTABLE in a layer, not both + if (lefData->lefrHasSpacing && lefData->layerRout && lefData->versionNum < 5.7) { + if (lefCallbacks->LayerCbk) // write warning only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefWarning(2010, "It is incorrect to have both SPACING rules & SPACINGTABLE rules within a ROUTING layer"); + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addSpacingTable(); + lefData->lefrHasSpacingTbl = 1; + } + sp_options ';' {} + // 10/12/2003 - 5.6 syntax + | K_ENCLOSURE layer_enclosure_type_opt int_number int_number + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ENCLOSURE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1584, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addEnclosure($2, $3, $4); + } + layer_enclosure_width_opt ';' {} + // 12/30/2003 - 5.6 syntax + | K_PREFERENCLOSURE layer_enclosure_type_opt int_number int_number + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "PREFERENCLOSURE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1585, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addPreferEnclosure($2, $3, $4); + } + layer_preferenclosure_width_opt ';' {} + | K_RESISTANCE int_number ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "RESISTANCE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1586, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setResPerCut($2); + } + } + | K_DIAGMINEDGELENGTH int_number ';' + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1587, "DIAGMINEDGELENGTH can only be defined in LAYER with TYPE ROUTING. Parser will stop processing."); + CHKERR(); + } + } + } else if (lefData->versionNum < 5.6) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "DIAGMINEDGELENGTH statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1588, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setDiagMinEdgeLength($2); + } + } + | K_MINSIZE + { + // Use the polygon code to retrieve the points for MINSIZE + lefData->lefrGeometriesPtr = (lefiGeometries*)lefMalloc(sizeof(lefiGeometries)); + lefData->lefrGeometriesPtr->Init(); + lefData->lefrDoGeometries = 1; + } + firstPt otherPts ';' + { + if (lefCallbacks->LayerCbk) { + lefData->lefrGeometriesPtr->addPolygon(); + lefData->lefrLayer.setMinSize(lefData->lefrGeometriesPtr); + } + lefData->lefrDoGeometries = 0; + lefData->lefrGeometriesPtr->Destroy(); + lefFree(lefData->lefrGeometriesPtr); + } + +layer_arraySpacing_long: // 5.7 + // empty + | K_LONGARRAY + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setArraySpacingLongArray(); + } + +layer_arraySpacing_width: // 5.7 + // empty + | K_WIDTH int_number + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setArraySpacingWidth($2); + } + +layer_arraySpacing_arraycuts: // 5.7 + // empty + | layer_arraySpacing_arraycut layer_arraySpacing_arraycuts + +layer_arraySpacing_arraycut: + K_ARRAYCUTS int_number K_SPACING int_number + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addArraySpacingArray((int)$2, $4); + if (lefData->arrayCutsVal > (int)$2) { + // Mulitiple ARRAYCUTS value needs to me in ascending order + if (!lefData->arrayCutsWar) { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) + lefWarning(2080, "The number of cut values in multiple ARRAYSPACING ARRAYCUTS are not in increasing order.\nTo be consistent with the documentation, update the cut values to increasing order."); + lefData->arrayCutsWar = 1; + } + } + lefData->arrayCutsVal = (int)$2; + } + +sp_options: + K_PARALLELRUNLENGTH int_number + { + if (lefData->hasInfluence) { // 5.5 - INFLUENCE table must follow a PARALLEL + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1589, "An INFLUENCE table statement was defined before the PARALLELRUNLENGTH table statement.\nINFLUENCE table statement should be defined following the PARALLELRUNLENGTH.\nChange the LEF file and rerun the parser."); + CHKERR(); + } + } + } + if (lefData->hasParallel) { // 5.5 - Only one PARALLEL table is allowed per layer + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1590, "There is multiple PARALLELRUNLENGTH table statements are defined within a layer.\nAccording to the LEF Reference Manual, only one PARALLELRUNLENGTH table statement is allowed per layer."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($2); + lefData->hasParallel = 1; + } + int_number_list + { + lefData->spParallelLength = lefData->lefrLayer.getNumber(); + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addSpParallelLength(); + } + K_WIDTH int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addSpParallelWidth($7); + } + } + int_number_list + { + if (lefData->lefrLayer.getNumber() != lefData->spParallelLength) { + if (lefCallbacks->LayerCbk) { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1591, "The number of length in the PARALLELRUNLENGTH statement is not equal to\nthe total number of spacings defined in the WIDTH statement in the SPACINGTABLE."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addSpParallelWidthSpacing(); + } + layer_sp_parallel_widths + + | K_TWOWIDTHS K_WIDTH int_number layer_sp_TwoWidthsPRL int_number + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($5); + } + int_number_list + { + if (lefData->hasParallel) { // 5.7 - Either PARALLEL OR TWOWIDTHS per layer + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1592, "A PARALLELRUNLENGTH statement was already defined in the layer.\nIt is PARALLELRUNLENGTH or TWOWIDTHS is allowed per layer."); + CHKERR(); + } + } + } + if (lefData->hasTwoWidths) { // 5.7 - only 1 TWOWIDTHS per layer + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1593, "A TWOWIDTHS table statement was already defined in the layer.\nOnly one TWOWIDTHS statement is allowed per layer."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addSpTwoWidths($3, $4); + lefData->hasTwoWidths = 1; + } + layer_sp_TwoWidths + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "TWOWIDTHS is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1697, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + | K_INFLUENCE K_WIDTH int_number K_WITHIN int_number K_SPACING int_number + { + if (lefData->hasInfluence) { // 5.5 - INFLUENCE table must follow a PARALLEL + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1594, "A INFLUENCE table statement was already defined in the layer.\nOnly one INFLUENCE statement is allowed per layer."); + CHKERR(); + } + } + } + if (!lefData->hasParallel) { // 5.5 - INFLUENCE must follow a PARALLEL + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1595, "An INFLUENCE table statement was already defined before the layer.\nINFLUENCE statement has to be defined after the PARALLELRUNLENGTH table statement in the layer."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setInfluence(); + lefData->lefrLayer.addSpInfluence($3, $5, $7); + } + } + layer_sp_influence_widths + +layer_spacingtable_opts: // 5.7 + // empty + | layer_spacingtable_opt layer_spacingtable_opts + +layer_spacingtable_opt: + K_WITHIN int_number K_SPACING int_number + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addSpacingTableOrthoWithin($2, $4); + } + +layer_enclosure_type_opt: + {$$ = (char*)"NULL";} // empty + | K_ABOVE {$$ = (char*)"ABOVE";} + | K_BELOW {$$ = (char*)"BELOW";} + +layer_enclosure_width_opt: // empty + | K_WIDTH int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addEnclosureWidth($2); + } + } + layer_enclosure_width_except_opt + | K_LENGTH int_number // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "LENGTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1691, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addEnclosureLength($2); + } + } + } + +layer_enclosure_width_except_opt: // empty + | K_EXCEPTEXTRACUT int_number // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "EXCEPTEXTRACUT is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1690, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addEnclosureExceptEC($2); + } + } + } + +layer_preferenclosure_width_opt: // empty + | K_WIDTH int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addPreferEnclosureWidth($2); + } + } + +layer_minimumcut_within: // empty + | K_WITHIN int_number + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "MINIMUMCUT WITHIN is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1700, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addMinimumcutWithin($2); + } + } + } + +layer_minimumcut_from: // empty + | K_FROMABOVE + { + if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "FROMABOVE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1596, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + lefData->hasLayerMincut = 1; + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addMinimumcutConnect((char*)"FROMABOVE"); + + } + | K_FROMBELOW + { + if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "FROMBELOW statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1597, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + lefData->hasLayerMincut = 1; + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addMinimumcutConnect((char*)"FROMBELOW"); + } + +layer_minimumcut_length: // empty + | K_LENGTH int_number K_WITHIN int_number + { + if (lefData->versionNum < 5.5) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "LENGTH WITHIN statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1598, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addMinimumcutLengDis($2, $4); + } + +layer_minstep_options: // empty + | layer_minstep_options layer_minstep_option // Use left recursions + +layer_minstep_option: + layer_minstep_type + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addMinstepType($1); + } + | K_LENGTHSUM int_number + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addMinstepLengthsum($2); + } + | K_MAXEDGES int_number // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "MAXEDGES is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1710, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addMinstepMaxedges((int)$2); + } + +layer_minstep_type: + K_INSIDECORNER {$$ = (char*)"INSIDECORNER";} + | K_OUTSIDECORNER {$$ = (char*)"OUTSIDECORNER";} + | K_STEP {$$ = (char*)"STEP";} + +layer_antenna_pwl: + int_number + { if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setAntennaValue(lefData->antennaType, $1); } + | K_PWL '(' pt pt + { if (lefCallbacks->LayerCbk) { // require min 2 points, set the 1st 2 + if (lefData->lefrAntennaPWLPtr) { + lefData->lefrAntennaPWLPtr->Destroy(); + lefFree(lefData->lefrAntennaPWLPtr); + } + + lefData->lefrAntennaPWLPtr = lefiAntennaPWL::create(); + lefData->lefrAntennaPWLPtr->addAntennaPWL($3.x, $3.y); + lefData->lefrAntennaPWLPtr->addAntennaPWL($4.x, $4.y); + } + } + layer_diffusion_ratios ')' + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setAntennaPWL(lefData->antennaType, lefData->lefrAntennaPWLPtr); + lefData->lefrAntennaPWLPtr = NULL; + } + } + +layer_diffusion_ratios: // empty + | layer_diffusion_ratios layer_diffusion_ratio // Use left recursions + ; + +layer_diffusion_ratio: + pt + { if (lefCallbacks->LayerCbk) + lefData->lefrAntennaPWLPtr->addAntennaPWL($1.x, $1.y); + } + +layer_antenna_duo: // empty + | K_DIFFUSEONLY + { + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } + else if ((lefData->antennaType == lefiAntennaAF) && (lefData->versionNum <= 5.3)) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAAREAFACTOR with DIFFUSEONLY statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1599, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAAREAFACTOR with DIFFUSEONLY statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1599, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setAntennaDUO(lefData->antennaType); + } + +layer_table_type: + K_PEAK {$$ = (char*)"PEAK";} + | K_AVERAGE {$$ = (char*)"AVERAGE";} + | K_RMS {$$ = (char*)"RMS";} + +layer_frequency: + K_FREQUENCY NUMBER + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($2); } + number_list ';' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addAcFrequency(); } + ac_layer_table_opt + K_TABLEENTRIES NUMBER + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($9); } + number_list ';' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addAcTableEntry(); } + +ac_layer_table_opt: // empty + | K_CUTAREA NUMBER + { + if (!lefData->layerCut) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1600, "CUTAREA statement can only be defined in LAYER with TYPE CUT."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($2); + } + number_list ';' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addAcCutarea(); } + | K_WIDTH int_number + { + if (!lefData->layerRout) { + if (lefCallbacks->LayerCbk) { // write error only if cbk is set + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1601, "WIDTH can only be defined in LAYER with TYPE ROUTING."); + CHKERR(); + } + } + } + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($2); + } + int_number_list ';' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addAcWidth(); } + +dc_layer_table: + K_TABLEENTRIES int_number + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($2); } + int_number_list ';' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addDcTableEntry(); } + +int_number_list: + | int_number_list int_number + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($2); } + +number_list: + | number_list NUMBER + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($2); } + +layer_prop_list: + layer_prop + | layer_prop_list layer_prop + ; + +layer_prop: + T_STRING T_STRING + { + if (lefCallbacks->LayerCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrLayerProp.propType($1); + lefData->lefrLayer.addProp($1, $2, propTp); + } + } + | T_STRING QSTRING + { + if (lefCallbacks->LayerCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrLayerProp.propType($1); + lefData->lefrLayer.addProp($1, $2, propTp); + } + } + | T_STRING NUMBER + { + char temp[32]; + sprintf(temp, "%.11g", $2); + if (lefCallbacks->LayerCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrLayerProp.propType($1); + lefData->lefrLayer.addNumProp($1, $2, temp, propTp); + } + } + +current_density_pwl_list : + current_density_pwl + { } + | current_density_pwl_list current_density_pwl + { } + +current_density_pwl: '(' int_number int_number ')' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.setCurrentPoint($2, $3); } + +cap_points : + cap_point + | cap_points cap_point + ; + +cap_point: '(' int_number int_number ')' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.setCapacitancePoint($2, $3); } + +res_points : + res_point + | res_points res_point + { } + +res_point: '(' int_number int_number ')' + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.setResistancePoint($2, $3); } + +layer_type: + K_ROUTING {$$ = (char*)"ROUTING"; lefData->layerRout = 1;} + | K_CUT {$$ = (char*)"CUT"; lefData->layerCut = 1;} + | K_OVERLAP {$$ = (char*)"OVERLAP"; lefData->layerMastOver = 1;} + | K_MASTERSLICE {$$ = (char*)"MASTERSLICE"; lefData->layerMastOver = 1;} + | K_VIRTUAL {$$ = (char*)"VIRTUAL";} + | K_IMPLANT {$$ = (char*)"IMPLANT";} + +layer_direction: + K_HORIZONTAL {$$ = (char*)"HORIZONTAL";} + | K_VERTICAL {$$ = (char*)"VERTICAL";} + | K_DIAG45 {$$ = (char*)"DIAG45";} + | K_DIAG135 {$$ = (char*)"DIAG135";} + +layer_minen_width: + | K_WIDTH int_number + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addMinenclosedareaWidth($2); + } + +layer_oxide: + K_OXIDE1 + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addAntennaModel(1); + } + | K_OXIDE2 + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addAntennaModel(2); + } + | K_OXIDE3 + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addAntennaModel(3); + } + | K_OXIDE4 + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addAntennaModel(4); + } + +layer_sp_parallel_widths: // empty + { } + | layer_sp_parallel_widths layer_sp_parallel_width // Use left recursions + { } + +layer_sp_parallel_width: K_WIDTH int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.addSpParallelWidth($2); + } + } + int_number_list + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addSpParallelWidthSpacing(); } + +layer_sp_TwoWidths: // empty // 5.7 + { } + | layer_sp_TwoWidth layer_sp_TwoWidths + { } + +layer_sp_TwoWidth: K_WIDTH int_number layer_sp_TwoWidthsPRL int_number + { + if (lefCallbacks->LayerCbk) lefData->lefrLayer.addNumber($4); + } + int_number_list + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.addSpTwoWidths($2, $3); + } + +layer_sp_TwoWidthsPRL: // 5.7 + { + $$ = -1; // cannot use 0, since PRL number can be 0 + lefData->lefrLayer.setSpTwoWidthsHasPRL(0); + } + | K_PRL int_number + { + $$ = $2; + lefData->lefrLayer.setSpTwoWidthsHasPRL(1); + } + +layer_sp_influence_widths: // empty + { } + | layer_sp_influence_widths layer_sp_influence_width + { } + +layer_sp_influence_width: K_WIDTH int_number K_WITHIN int_number K_SPACING int_number + { if (lefCallbacks->LayerCbk) lefData->lefrLayer.addSpInfluence($2, $4, $6); } + +maxstack_via: K_MAXVIASTACK int_number ';' + { + if (!lefData->lefrHasLayer) { // 5.5 + if (lefCallbacks->MaxStackViaCbk) { // write error only if cbk is set + if (lefData->maxStackViaWarnings++ < lefSettings->MaxStackViaWarnings) { + lefError(1602, "MAXVIASTACK statement has to be defined after the LAYER statement."); + CHKERR(); + } + } + } else if (lefData->lefrHasMaxVS) { + if (lefCallbacks->MaxStackViaCbk) { // write error only if cbk is set + if (lefData->maxStackViaWarnings++ < lefSettings->MaxStackViaWarnings) { + lefError(1603, "A MAXVIASTACK was already defined.\nOnly one MAXVIASTACK is allowed per lef file."); + CHKERR(); + } + } + } else { + if (lefCallbacks->MaxStackViaCbk) { + lefData->lefrMaxStackVia.setMaxStackVia((int)$2); + CALLBACK(lefCallbacks->MaxStackViaCbk, lefrMaxStackViaCbkType, &lefData->lefrMaxStackVia); + } + } + if (lefData->versionNum < 5.5) { + if (lefCallbacks->MaxStackViaCbk) { // write error only if cbk is set + if (lefData->maxStackViaWarnings++ < lefSettings->MaxStackViaWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MAXVIASTACK statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1604, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + lefData->lefrHasMaxVS = 1; + } + | K_MAXVIASTACK int_number K_RANGE {lefData->lefDumbMode = 2; lefData->lefNoNum= 2;} + T_STRING T_STRING ';' + { + if (!lefData->lefrHasLayer) { // 5.5 + if (lefCallbacks->MaxStackViaCbk) { // write error only if cbk is set + if (lefData->maxStackViaWarnings++ < lefSettings->MaxStackViaWarnings) { + lefError(1602, "MAXVIASTACK statement has to be defined after the LAYER statement."); + CHKERR(); + } + } + } else if (lefData->lefrHasMaxVS) { + if (lefCallbacks->MaxStackViaCbk) { // write error only if cbk is set + if (lefData->maxStackViaWarnings++ < lefSettings->MaxStackViaWarnings) { + lefError(1603, "A MAXVIASTACK was already defined.\nOnly one MAXVIASTACK is allowed per lef file."); + CHKERR(); + } + } + } else { + if (lefCallbacks->MaxStackViaCbk) { + lefData->lefrMaxStackVia.setMaxStackVia((int)$2); + lefData->lefrMaxStackVia.setMaxStackViaRange($5, $6); + CALLBACK(lefCallbacks->MaxStackViaCbk, lefrMaxStackViaCbkType, &lefData->lefrMaxStackVia); + } + } + lefData->lefrHasMaxVS = 1; + } + +via: start_via { lefData->hasViaRule_layer = 0; } via_option end_via + { + if (lefCallbacks->ViaCbk) { + if (lefData->ndRule) + lefData->nd->addViaRule(&lefData->lefrVia); + else + CALLBACK(lefCallbacks->ViaCbk, lefrViaCbkType, &lefData->lefrVia); + } + } + +via_keyword : K_VIA //needed to have a VIA named via + { lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } + +start_via: via_keyword T_STRING + { + // 0 is nodefault + if (lefCallbacks->ViaCbk) lefData->lefrVia.setName($2, 0); + lefData->viaLayer = 0; + lefData->numVia++; + //strcpy(lefData->viaName, $2); + lefData->viaName = strdup($2); + } + | via_keyword T_STRING K_DEFAULT + { + // 1 is default + if (lefCallbacks->ViaCbk) lefData->lefrVia.setName($2, 1); + lefData->viaLayer = 0; + //strcpy(lefData->viaName, $2); + lefData->viaName = strdup($2); + } + | via_keyword T_STRING K_GENERATED + { + // 2 is generated + if (lefCallbacks->ViaCbk) lefData->lefrVia.setName($2, 2); + lefData->viaLayer = 0; + //strcpy(lefData->viaName, $2); + lefData->viaName = strdup($2); + } + +via_viarule: K_VIARULE {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + K_CUTSIZE int_number int_number ';' + K_LAYERS {lefData->lefDumbMode = 3; lefData->lefNoNum = 1; } T_STRING T_STRING T_STRING ';' + K_CUTSPACING int_number int_number ';' + K_ENCLOSURE int_number int_number int_number int_number ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->ViaCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "VIARULE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1709, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->ViaCbk) lefData->lefrVia.setViaRule($3, $6, $7, $11, $12, $13, + $16, $17, $20, $21, $22, $23); + lefData->viaLayer++; + lefData->hasViaRule_layer = 1; + } + via_viarule_options + ; + +via_viarule_options: // empty + | via_viarule_options via_viarule_option + ; + +via_viarule_option: K_ROWCOL int_number int_number ';' + { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setRowCol((int)$2, (int)$3); + } + | K_ORIGIN int_number int_number ';' + { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setOrigin($2, $3); + } + | K_OFFSET int_number int_number int_number int_number ';' + { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setOffset($2, $3, $4, $5); + } + | K_PATTERN {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setPattern($3); + } + ; + +via_option: via_viarule + | via_other_options + +via_other_options: via_other_option + via_more_options + +via_more_options: // empty + | via_more_options via_other_option + ; + +via_other_option: + via_foreign + { } + | via_layer_rule + { } + | K_RESISTANCE int_number ';' + { if (lefCallbacks->ViaCbk) lefData->lefrVia.setResistance($2); } + | K_PROPERTY { lefData->lefDumbMode = 1000000; } via_prop_list ';' + { lefData->lefDumbMode = 0; + } + | K_TOPOFSTACKONLY + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setTopOfStack(); + } else + if (lefCallbacks->ViaCbk) // write warning only if cbk is set + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) + lefWarning(2019, "TOPOFSTACKONLY statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later"); + } + +via_prop_list: + via_name_value_pair + | via_prop_list via_name_value_pair + ; + +via_name_value_pair: + T_STRING NUMBER + { + char temp[32]; + sprintf(temp, "%.11g", $2); + if (lefCallbacks->ViaCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrViaProp.propType($1); + lefData->lefrVia.addNumProp($1, $2, temp, propTp); + } + } + | T_STRING QSTRING + { + if (lefCallbacks->ViaCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrViaProp.propType($1); + lefData->lefrVia.addProp($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (lefCallbacks->ViaCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrViaProp.propType($1); + lefData->lefrVia.addProp($1, $2, propTp); + } + } + +via_foreign: + start_foreign ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setForeign($1, 0, 0.0, 0.0, -1); + } else + if (lefCallbacks->ViaCbk) // write warning only if cbk is set + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) + lefWarning(2020, "FOREIGN statement in VIA is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | start_foreign pt ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setForeign($1, 1, $2.x, $2.y, -1); + } else + if (lefCallbacks->ViaCbk) // write warning only if cbk is set + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) + lefWarning(2020, "FOREIGN statement in VIA is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | start_foreign pt orientation ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setForeign($1, 1, $2.x, $2.y, $3); + } else + if (lefCallbacks->ViaCbk) // write warning only if cbk is set + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) + lefWarning(2020, "FOREIGN statement in VIA is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | start_foreign orientation ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->ViaCbk) lefData->lefrVia.setForeign($1, 0, 0.0, 0.0, $2); + } else + if (lefCallbacks->ViaCbk) // write warning only if cbk is set + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) + lefWarning(2020, "FOREIGN statement in VIA is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + +start_foreign: K_FOREIGN {lefData->lefDumbMode = 1; lefData->lefNoNum= 1;} T_STRING + { $$ = $3; } + +orientation: + K_N {$$ = 0;} + | K_W {$$ = 1;} + | K_S {$$ = 2;} + | K_E {$$ = 3;} + | K_FN {$$ = 4;} + | K_FW {$$ = 5;} + | K_FS {$$ = 6;} + | K_FE {$$ = 7;} + | K_R0 {$$ = 0;} + | K_R90 {$$ = 1;} + | K_R180 {$$ = 2;} + | K_R270 {$$ = 3;} + | K_MY {$$ = 4;} + | K_MYR90 {$$ = 5;} + | K_MX {$$ = 6;} + | K_MXR90 {$$ = 7;} + +via_layer_rule: via_layer via_geometries + { } + +via_layer: K_LAYER {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { + if (lefCallbacks->ViaCbk) lefData->lefrVia.addLayer($3); + lefData->viaLayer++; + lefData->hasViaRule_layer = 1; + } + +via_geometries: + // empty + | via_geometries via_geometry + ; + +via_geometry: + K_RECT maskColor pt pt ';' + { + if (lefCallbacks->ViaCbk) { + if (lefData->versionNum < 5.8 && (int)$2 > 0) { + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) { + lefError(2081, "MASK information can only be defined with version 5.8"); + CHKERR(); + } + } else { + lefData->lefrVia.addRectToLayer((int)$2, $3.x, $3.y, $4.x, $4.y); + } + } + } + | K_POLYGON maskColor // 5.6 + { + lefData->lefrGeometriesPtr = (lefiGeometries*)lefMalloc(sizeof(lefiGeometries)); + lefData->lefrGeometriesPtr->Init(); + lefData->lefrDoGeometries = 1; + } + firstPt nextPt nextPt otherPts ';' + { + if (lefCallbacks->ViaCbk) { + if (lefData->versionNum < 5.8 && $2 > 0) { + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addPolygon((int)$2); + lefData->lefrVia.addPolyToLayer((int)$2, lefData->lefrGeometriesPtr); // 5.6 + } + } + lefData->lefrGeometriesPtr->clearPolyItems(); // free items fields + lefFree((char*)(lefData->lefrGeometriesPtr)); // Don't need anymore, poly data has + lefData->lefrDoGeometries = 0; // copied + } + +end_via: K_END {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + // 10/17/2001 - Wanda da Rosa, PCR 404149 + // Error if no layer in via + if (!lefData->viaLayer) { + if (lefCallbacks->ViaCbk) { // write error only if cbk is set + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "A LAYER statement is missing in the VIA %s.\nAt least one LAYERis required per VIA statement.", $3); + lefError(1606, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (strcmp(lefData->viaName, $3) != 0) { + if (lefCallbacks->ViaCbk) { // write error only if cbk is set + if (lefData->viaWarnings++ < lefSettings->ViaWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END VIA name %s is different from the VIA name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $3, lefData->viaName); + lefError(1607, lefData->outMsg); + lefFree(lefData->outMsg); + lefFree(lefData->viaName); + CHKERR(); + } else + lefFree(lefData->viaName); + } else + lefFree(lefData->viaName); + } else + lefFree(lefData->viaName); + } + +viarule_keyword : K_VIARULE { lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setName($3); + lefData->viaRuleLayer = 0; + //strcpy(lefData->viaRuleName, $3); + lefData->viaRuleName = strdup($3); + lefData->isGenerate = 0; + } + +viarule: + viarule_keyword viarule_layer_list via_names opt_viarule_props end_viarule + { + if (lefData->viaRuleLayer == 0 || lefData->viaRuleLayer > 2) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1608, "A VIARULE statement requires two layers."); + CHKERR(); + } + } + } + if (lefCallbacks->ViaRuleCbk) + CALLBACK(lefCallbacks->ViaRuleCbk, lefrViaRuleCbkType, &lefData->lefrViaRule); + // 2/19/2004 - reset the ENCLOSURE overhang values which may be + // set by the old syntax OVERHANG -- Not necessary, but just incase + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.clearLayerOverhang(); + } + +viarule_generate: + viarule_keyword K_GENERATE viarule_generate_default + { + lefData->isGenerate = 1; + } + viarule_layer_list opt_viarule_props end_viarule + { + if (lefData->viaRuleLayer == 0) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1708, "A VIARULE GENERATE requires three layers."); + CHKERR(); + } + } + } else if ((lefData->viaRuleLayer < 3) && (lefData->versionNum >= 5.6)) { + if (lefCallbacks->ViaRuleCbk) // write warning only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) + lefWarning(2021, "turn-via is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } else { + if (lefCallbacks->ViaRuleCbk) { + lefData->lefrViaRule.setGenerate(); + CALLBACK(lefCallbacks->ViaRuleCbk, lefrViaRuleCbkType, &lefData->lefrViaRule); + } + } + // 2/19/2004 - reset the ENCLOSURE overhang values which may be + // set by the old syntax OVERHANG + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.clearLayerOverhang(); + } + +viarule_generate_default: // optional + | K_DEFAULT // 5.6 syntax + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "DEFAULT statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1605, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setDefault(); + } + +viarule_layer_list : + viarule_layer + | viarule_layer_list viarule_layer + ; + +opt_viarule_props: + // empty + | viarule_props + ; + +viarule_props: + viarule_prop + | viarule_props viarule_prop + ; + +viarule_prop: K_PROPERTY { lefData->lefDumbMode = 10000000;} viarule_prop_list ';' + { lefData->lefDumbMode = 0; + } + +viarule_prop_list: + viarule_prop + | viarule_prop_list viarule_prop + ; + +viarule_prop: + T_STRING T_STRING + { + if (lefCallbacks->ViaRuleCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrViaRuleProp.propType($1); + lefData->lefrViaRule.addProp($1, $2, propTp); + } + } + | T_STRING QSTRING + { + if (lefCallbacks->ViaRuleCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrViaRuleProp.propType($1); + lefData->lefrViaRule.addProp($1, $2, propTp); + } + } + | T_STRING NUMBER + { + char temp[32]; + sprintf(temp, "%.11g", $2); + if (lefCallbacks->ViaRuleCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrViaRuleProp.propType($1); + lefData->lefrViaRule.addNumProp($1, $2, temp, propTp); + } + } + +viarule_layer: viarule_layer_name viarule_layer_options + { + // 10/18/2001 - Wanda da Rosa PCR 404181 + // Make sure the 1st 2 layers in viarule has direction + // 04/28/2004 - PCR 704072 - DIRECTION in viarule generate is + // obsolete in 5.6 + if (lefData->versionNum >= 5.6) { + if (lefData->viaRuleLayer < 2 && !lefData->viaRuleHasDir && !lefData->viaRuleHasEnc && + !lefData->isGenerate) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1705, "VIARULE statement in a layer, requires a DIRECTION construct statement."); + CHKERR(); + } + } + } + } else { + if (lefData->viaRuleLayer < 2 && !lefData->viaRuleHasDir && !lefData->viaRuleHasEnc && + lefData->isGenerate) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1705, "VIARULE statement in a layer, requires a DIRECTION construct statement."); + CHKERR(); + } + } + } + } + lefData->viaRuleLayer++; + } + ; + +via_names: + // empty + | via_names via_name + ; + +via_name: via_keyword T_STRING ';' + { if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.addViaName($2); } + +viarule_layer_name: K_LAYER {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setLayer($3); + lefData->viaRuleHasDir = 0; + lefData->viaRuleHasEnc = 0; + } + +viarule_layer_options: + // empty + | viarule_layer_options viarule_layer_option + ; + +viarule_layer_option: + K_DIRECTION K_HORIZONTAL ';' + { + if (lefData->viaRuleHasEnc) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1706, "An ENCLOSRE statement was already defined in the layer.\nIt is DIRECTION or ENCLOSURE can be specified in a layer."); + CHKERR(); + } + } + } else { + if ((lefData->versionNum < 5.6) || (!lefData->isGenerate)) { + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setHorizontal(); + } else + if (lefCallbacks->ViaRuleCbk) // write warning only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) + lefWarning(2022, "DIRECTION statement in VIARULE is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + lefData->viaRuleHasDir = 1; + } + | K_DIRECTION K_VERTICAL ';' + { + if (lefData->viaRuleHasEnc) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1706, "An ENCLOSRE statement was already defined in the layer.\nIt is DIRECTION or ENCLOSURE can be specified in a layer."); + CHKERR(); + } + } + } else { + if ((lefData->versionNum < 5.6) || (!lefData->isGenerate)) { + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setVertical(); + } else + if (lefCallbacks->ViaRuleCbk) // write warning only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) + lefWarning(2022, "DIRECTION statement in VIARULE is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + lefData->viaRuleHasDir = 1; + } + | K_ENCLOSURE int_number int_number ';' // 5.5 + { + if (lefData->versionNum < 5.5) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ENCLOSURE statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1707, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + // 2/19/2004 - Enforced the rule that ENCLOSURE can only be defined + // in VIARULE GENERATE + if (!lefData->isGenerate) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1614, "An ENCLOSURE statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE."); + CHKERR(); + } + } + } + if (lefData->viaRuleHasDir) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1609, "A DIRECTION statement was already defined in the layer.\nIt is DIRECTION or ENCLOSURE can be specified in a layer."); + CHKERR(); + } + } + } else { + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setEnclosure($2, $3); + } + lefData->viaRuleHasEnc = 1; + } + | K_WIDTH int_number K_TO int_number ';' + { if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setWidth($2,$4); } + | K_RECT pt pt ';' + { if (lefCallbacks->ViaRuleCbk) + lefData->lefrViaRule.setRect($2.x, $2.y, $3.x, $3.y); } + | K_SPACING int_number K_BY int_number ';' + { if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setSpacing($2,$4); } + | K_RESISTANCE int_number ';' + { if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setResistance($2); } + | K_OVERHANG int_number ';' + { + if (!lefData->viaRuleHasDir) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1610, "An OVERHANG statement is defined, but the required DIRECTION statement is not yet defined.\nUpdate the LEF file to define the DIRECTION statement before the OVERHANG."); + CHKERR(); + } + } + } + // 2/19/2004 - Enforced the rule that OVERHANG can only be defined + // in VIARULE GENERATE after 5.3 + if ((lefData->versionNum > 5.3) && (!lefData->isGenerate)) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1611, "An OVERHANG statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE."); + CHKERR(); + } + } + } + if (lefData->versionNum < 5.6) { + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setOverhang($2); + } else { + if (lefCallbacks->ViaRuleCbk) // write warning only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) + lefWarning(2023, "OVERHANG statement will be translated into similar ENCLOSURE rule"); + // In 5.6 & later, set it to either ENCLOSURE overhang1 or overhang2 + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setOverhangToEnclosure($2); + } + } + | K_METALOVERHANG int_number ';' + { + // 2/19/2004 - Enforced the rule that METALOVERHANG can only be defined + // in VIARULE GENERATE + if ((lefData->versionNum > 5.3) && (!lefData->isGenerate)) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1612, "An METALOVERHANG statement is defined in a VIARULE statement only.\nOVERHANG statement can only be defined in VIARULE GENERATE."); + CHKERR(); + } + } + } + if (lefData->versionNum < 5.6) { + if (!lefData->viaRuleHasDir) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefError(1613, "An METALOVERHANG statement is defined, but the required DIRECTION statement is not yet defined.\nUpdate the LEF file to define the DIRECTION statement before the OVERHANG."); + CHKERR(); + } + } + } + if (lefCallbacks->ViaRuleCbk) lefData->lefrViaRule.setMetalOverhang($2); + } else + if (lefCallbacks->ViaRuleCbk) // write warning only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) + lefWarning(2024, "METALOVERHANG statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + +end_viarule: K_END {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if ((lefData->isGenerate) && (lefCallbacks->ViaRuleCbk) && lefData->lefrViaRule.numLayers() >= 3) { + if (!lefData->lefrViaRule.layer(0)->hasRect() && + !lefData->lefrViaRule.layer(1)->hasRect() && + !lefData->lefrViaRule.layer(2)->hasRect()) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "VIARULE GENERATE '%s' cut layer definition should have RECT statement.\nCorrect the LEF file before rerunning it through the LEF parser.", + lefData->viaRuleName); + lefWarning(1714, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + + if (strcmp(lefData->viaRuleName, $3) != 0) { + if (lefCallbacks->ViaRuleCbk) { // write error only if cbk is set + if (lefData->viaRuleWarnings++ < lefSettings->ViaRuleWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END VIARULE name %s is different from the VIARULE name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $3, lefData->viaRuleName); + lefError(1615, lefData->outMsg); + lefFree(lefData->outMsg); + lefFree(lefData->viaRuleName); + CHKERR(); + } else + lefFree(lefData->viaRuleName); + } else + lefFree(lefData->viaRuleName); + } else + lefFree(lefData->viaRuleName); + } + +spacing_rule: start_spacing spacings end_spacing + { } + +start_spacing: K_SPACING + { + lefData->hasSamenet = 0; + if ((lefData->versionNum < 5.6) || (!lefData->ndRule)) { + // if 5.6 and in nondefaultrule, it should not get in here, + // it should go to the else statement to write out a warning + // if 5.6, not in nondefaultrule, it will get in here + // if 5.5 and earlier in nondefaultrule is ok to get in here + if (lefData->versionNum >= 5.7) { // will get to this if statement if + // lefData->versionNum is 5.6 and higher but lefData->ndRule = 0 + if (lefData->spacingWarnings == 0) { // only print once + lefWarning(2077, "A SPACING SAMENET section is defined but it is not legal in a LEF 5.7 version file.\nIt will be ignored which will probably cause real DRC violations to be ignored, and may\ncause false DRC violations to occur.\n\nTo avoid this warning, and correctly handle these DRC rules, you should modify your\nLEF to use the appropriate SAMENET keywords as described in the LEF/DEF 5.7\nmanual under the SPACING statements in the LAYER (Routing) and LAYER (Cut)\nsections listed in the LEF Table of Contents."); + lefData->spacingWarnings++; + } + } else if (lefCallbacks->SpacingBeginCbk && !lefData->ndRule) + CALLBACK(lefCallbacks->SpacingBeginCbk, lefrSpacingBeginCbkType, 0); + } else + if (lefCallbacks->SpacingBeginCbk && !lefData->ndRule) // write warning only if cbk is set + if (lefData->spacingWarnings++ < lefSettings->SpacingWarnings) + lefWarning(2025, "SAMENET statement in NONDEFAULTRULE is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + +end_spacing: K_END K_SPACING + { + if ((lefData->versionNum < 5.6) || (!lefData->ndRule)) { + if ((lefData->versionNum <= 5.4) && (!lefData->hasSamenet)) { + lefError(1616, "SAMENET statement is required inside SPACING for any lef file with version 5.4 and earlier, but is not defined in the parsed lef file."); + CHKERR(); + } else if (lefData->versionNum < 5.7) { // obsolete in 5.7 and later + if (lefCallbacks->SpacingEndCbk && !lefData->ndRule) + CALLBACK(lefCallbacks->SpacingEndCbk, lefrSpacingEndCbkType, 0); + } + } + } + +spacings: + // empty + | spacings spacing + ; + +spacing: samenet_keyword T_STRING T_STRING int_number ';' + { + if ((lefData->versionNum < 5.6) || (!lefData->ndRule)) { + if (lefData->versionNum < 5.7) { + if (lefCallbacks->SpacingCbk) { + lefData->lefrSpacing.set($2, $3, $4, 0); + if (lefData->ndRule) + lefData->nd->addSpacingRule(&lefData->lefrSpacing); + else + CALLBACK(lefCallbacks->SpacingCbk, lefrSpacingCbkType, &lefData->lefrSpacing); + } + } + } + } + | samenet_keyword T_STRING T_STRING int_number K_STACK ';' + { + if ((lefData->versionNum < 5.6) || (!lefData->ndRule)) { + if (lefData->versionNum < 5.7) { + if (lefCallbacks->SpacingCbk) { + lefData->lefrSpacing.set($2, $3, $4, 1); + if (lefData->ndRule) + lefData->nd->addSpacingRule(&lefData->lefrSpacing); + else + CALLBACK(lefCallbacks->SpacingCbk, lefrSpacingCbkType, &lefData->lefrSpacing); + } + } + } + } + +samenet_keyword: K_SAMENET + // must be followed by two names + { lefData->lefDumbMode = 2; lefData->lefNoNum = 2; lefData->hasSamenet = 1; } + +maskColor: + // empty + { $$ = 0; } + | K_MASK int_number + { $$ = (int)$2; } + +irdrop: start_irdrop ir_tables end_irdrop + { } + +start_irdrop: K_IRDROP + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->IRDropBeginCbk) + CALLBACK(lefCallbacks->IRDropBeginCbk, lefrIRDropBeginCbkType, 0); + } else + if (lefCallbacks->IRDropBeginCbk) // write warning only if cbk is set + if (lefData->iRDropWarnings++ < lefSettings->IRDropWarnings) + lefWarning(2026, "IRDROP statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +end_irdrop: K_END K_IRDROP + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->IRDropEndCbk) + CALLBACK(lefCallbacks->IRDropEndCbk, lefrIRDropEndCbkType, 0); + } + } + + +ir_tables: + // empty + | ir_tables ir_table + ; + +ir_table: ir_tablename ir_table_values ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->IRDropCbk) + CALLBACK(lefCallbacks->IRDropCbk, lefrIRDropCbkType, &lefData->lefrIRDrop); + } + } + +ir_table_values: + // empty + | ir_table_values ir_table_value + ; + +ir_table_value: int_number int_number + { if (lefCallbacks->IRDropCbk) lefData->lefrIRDrop.setValues($1, $2); } + +ir_tablename: K_TABLE T_STRING + { if (lefCallbacks->IRDropCbk) lefData->lefrIRDrop.setTableName($2); } + +minfeature: K_MINFEATURE int_number int_number ';' + { + lefData->hasMinfeature = 1; + if (lefData->versionNum < 5.4) { + if (lefCallbacks->MinFeatureCbk) { + lefData->lefrMinFeature.set($2, $3); + CALLBACK(lefCallbacks->MinFeatureCbk, lefrMinFeatureCbkType, &lefData->lefrMinFeature); + } + } else + if (lefCallbacks->MinFeatureCbk) // write warning only if cbk is set + if (lefData->minFeatureWarnings++ < lefSettings->MinFeatureWarnings) + lefWarning(2027, "MINFEATURE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +dielectric: K_DIELECTRIC int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->DielectricCbk) + CALLBACK(lefCallbacks->DielectricCbk, lefrDielectricCbkType, $2); + } else + if (lefCallbacks->DielectricCbk) // write warning only if cbk is set + if (lefData->dielectricWarnings++ < lefSettings->DielectricWarnings) + lefWarning(2028, "DIELECTRIC statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +nondefault_rule: K_NONDEFAULTRULE {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + (void)lefSetNonDefault($3); + if (lefCallbacks->NonDefaultCbk) lefData->lefrNonDefault.setName($3); + lefData->ndLayer = 0; + lefData->ndRule = 1; + lefData->numVia = 0; + //strcpy(lefData->nonDefaultRuleName, $3); + lefData->nonDefaultRuleName = strdup($3); + } + nd_hardspacing + nd_rules {lefData->lefNdRule = 1;} end_nd_rule + { + // 10/18/2001 - Wanda da Rosa, PCR 404189 + // At least 1 layer is required + if ((!lefData->ndLayer) && (!lefSettings->RelaxMode)) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefError(1617, "NONDEFAULTRULE statement requires at least one LAYER statement."); + CHKERR(); + } + } + } + if ((!lefData->numVia) && (!lefSettings->RelaxMode) && (lefData->versionNum < 5.6)) { + // VIA is no longer a required statement in 5.6 + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefError(1618, "NONDEFAULTRULE statement requires at least one VIA statement."); + CHKERR(); + } + } + } + if (lefCallbacks->NonDefaultCbk) { + lefData->lefrNonDefault.end(); + CALLBACK(lefCallbacks->NonDefaultCbk, lefrNonDefaultCbkType, &lefData->lefrNonDefault); + } + lefData->ndRule = 0; + lefData->lefDumbMode = 0; + (void)lefUnsetNonDefault(); + } + +end_nd_rule: K_END + { + if ((lefData->nonDefaultRuleName) && (*lefData->nonDefaultRuleName != '\0')) + lefFree(lefData->nonDefaultRuleName); + } + | K_END T_STRING + { + if (strcmp(lefData->nonDefaultRuleName, $2) != 0) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END NONDEFAULTRULE name %s is different from the NONDEFAULTRULE name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $2, lefData->nonDefaultRuleName); + lefError(1619, lefData->outMsg); + lefFree(lefData->nonDefaultRuleName); + lefFree(lefData->outMsg); + CHKERR(); + } else + lefFree(lefData->nonDefaultRuleName); + } else + lefFree(lefData->nonDefaultRuleName); + } else + lefFree(lefData->nonDefaultRuleName); + } + ; + +nd_hardspacing: + // empty + | K_HARDSPACING ';' // HARDSPACING is optional in 5.6 + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "HARDSPACING statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1620, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.setHardspacing(); + } + ; + +nd_rules: // empty + | nd_rules nd_rule + ; + +nd_rule: + nd_layer + | via + | spacing_rule + | nd_prop + | usevia + | useviarule + | mincuts + ; + +usevia: K_USEVIA T_STRING ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "USEVIA statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1621, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } else { + if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addUseVia($2); + } + } + +useviarule: K_USEVIARULE T_STRING ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "USEVIARULE statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1622, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else { + if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addUseViaRule($2); + } + } + +mincuts: K_MINCUTS T_STRING int_number ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "MINCUTS statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1623, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else { + if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addMinCuts($2, (int)$3); + } + } + +nd_prop: K_PROPERTY { lefData->lefDumbMode = 10000000;} nd_prop_list ';' + { lefData->lefDumbMode = 0; + } + +nd_prop_list: + nd_prop + | nd_prop_list nd_prop + ; + +nd_prop: + T_STRING T_STRING + { + if (lefCallbacks->NonDefaultCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrNondefProp.propType($1); + lefData->lefrNonDefault.addProp($1, $2, propTp); + } + } + | T_STRING QSTRING + { + if (lefCallbacks->NonDefaultCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrNondefProp.propType($1); + lefData->lefrNonDefault.addProp($1, $2, propTp); + } + } + | T_STRING NUMBER + { + if (lefCallbacks->NonDefaultCbk) { + char temp[32]; + char propTp; + sprintf(temp, "%.11g", $2); + propTp = lefSettings->lefProps.lefrNondefProp.propType($1); + lefData->lefrNonDefault.addNumProp($1, $2, temp, propTp); + } + } + +nd_layer: K_LAYER {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (lefCallbacks->NonDefaultCbk) lefData->lefrNonDefault.addLayer($3); + lefData->ndLayer++; + //strcpy(lefData->layerName, $3); + lefData->layerName = strdup($3); + lefData->ndLayerWidth = 0; + lefData->ndLayerSpace = 0; + } + K_WIDTH int_number ';' + { + lefData->ndLayerWidth = 1; + if (lefCallbacks->NonDefaultCbk) lefData->lefrNonDefault.addWidth($6); + } + nd_layer_stmts K_END {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (strcmp(lefData->layerName, $12) != 0) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END LAYER name %s is different from the LAYER name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $3, lefData->layerName); + lefError(1624, lefData->outMsg); + lefFree(lefData->outMsg); + lefFree(lefData->layerName); + CHKERR(); + } else + lefFree(lefData->layerName); + } else + lefFree(lefData->layerName); + } else + lefFree(lefData->layerName); + if (!lefData->ndLayerWidth) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefError(1625, "A WIDTH statement is required in the LAYER statement in NONDEFULTRULE."); + CHKERR(); + } + } + } + if (!lefData->ndLayerSpace && lefData->versionNum < 5.6) { // 5.6, SPACING is optional + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "A SPACING statement is required in the LAYER statement in NONDEFAULTRULE for lef file with version 5.5 and earlier.\nYour lef file is defined with version %g. Update your lef to add a LAYER statement and try again.", + lefData->versionNum); + lefError(1626, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + ; + +nd_layer_stmts: + // empty + | nd_layer_stmts nd_layer_stmt + ; + +nd_layer_stmt: + K_SPACING int_number ';' + { + lefData->ndLayerSpace = 1; + if (lefCallbacks->NonDefaultCbk) lefData->lefrNonDefault.addSpacing($2); + } + | K_WIREEXTENSION int_number ';' + { if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addWireExtension($2); } + | K_RESISTANCE K_RPERSQ int_number ';' + { + if (lefData->ignoreVersion) { + if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addResistance($3); + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "RESISTANCE RPERSQ statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1627, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->versionNum > 5.5) { // obsolete in 5.6 + if (lefCallbacks->NonDefaultCbk) // write warning only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) + lefWarning(2029, "RESISTANCE RPERSQ statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } else if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addResistance($3); + } + + | K_CAPACITANCE K_CPERSQDIST int_number ';' + { + if (lefData->ignoreVersion) { + if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addCapacitance($3); + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "CAPACITANCE CPERSQDIST statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1628, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->versionNum > 5.5) { // obsolete in 5.6 + if (lefCallbacks->NonDefaultCbk) // write warning only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) + lefWarning(2030, "CAPACITANCE CPERSQDIST statement is obsolete in version 5.6. and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } else if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addCapacitance($3); + } + | K_EDGECAPACITANCE int_number ';' + { + if (lefData->ignoreVersion) { + if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addEdgeCap($2); + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "EDGECAPACITANCE statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1629, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->versionNum > 5.5) { // obsolete in 5.6 + if (lefCallbacks->NonDefaultCbk) // write warning only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) + lefWarning(2031, "EDGECAPACITANCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } else if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addEdgeCap($2); + } + | K_DIAGWIDTH int_number ';' + { + if (lefData->versionNum < 5.6) { // 5.6 syntax + if (lefCallbacks->NonDefaultCbk) { // write error only if cbk is set + if (lefData->nonDefaultWarnings++ < lefSettings->NonDefaultWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "DIAGWIDTH statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1630, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else { + if (lefCallbacks->NonDefaultCbk) + lefData->lefrNonDefault.addDiagWidth($2); + } + } + +site: start_site site_options end_site + { + if (lefCallbacks->SiteCbk) + CALLBACK(lefCallbacks->SiteCbk, lefrSiteCbkType, &lefData->lefrSite); + } + +start_site: K_SITE {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (lefCallbacks->SiteCbk) lefData->lefrSite.setName($3); + //strcpy(lefData->siteName, $3); + lefData->siteName = strdup($3); + lefData->hasSiteClass = 0; + lefData->hasSiteSize = 0; + lefData->hasSite = 1; + } + +end_site: K_END {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (strcmp(lefData->siteName, $3) != 0) { + if (lefCallbacks->SiteCbk) { // write error only if cbk is set + if (lefData->siteWarnings++ < lefSettings->SiteWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END SITE name %s is different from the SITE name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $3, lefData->siteName); + lefError(1631, lefData->outMsg); + lefFree(lefData->outMsg); + lefFree(lefData->siteName); + CHKERR(); + } else + lefFree(lefData->siteName); + } else + lefFree(lefData->siteName); + } else { + lefFree(lefData->siteName); + if (lefCallbacks->SiteCbk) { // write error only if cbk is set + if (lefData->hasSiteClass == 0) { + lefError(1632, "A CLASS statement is required in the SITE statement."); + CHKERR(); + } + if (lefData->hasSiteSize == 0) { + lefError(1633, "A SIZE statement is required in the SITE statement."); + CHKERR(); + } + } + } + } + +site_options: + // empty + | site_options site_option + ; + +site_option: + K_SIZE int_number K_BY int_number ';' + { + + if (lefCallbacks->SiteCbk) lefData->lefrSite.setSize($2,$4); + lefData->hasSiteSize = 1; + } + | site_symmetry_statement + { } + | site_class + { + if (lefCallbacks->SiteCbk) lefData->lefrSite.setClass($1); + lefData->hasSiteClass = 1; + } + | site_rowpattern_statement + { } + +site_class: + K_CLASS K_PAD ';' {$$ = (char*)"PAD"; } + | K_CLASS K_CORE ';' {$$ = (char*)"CORE"; } + | K_CLASS K_VIRTUAL ';' {$$ = (char*)"VIRTUAL"; } + +site_symmetry_statement: K_SYMMETRY site_symmetries ';' + { } + +site_symmetries: + // empty + | site_symmetries site_symmetry + ; + +site_symmetry: + K_X + { if (lefCallbacks->SiteCbk) lefData->lefrSite.setXSymmetry(); } + | K_Y + { if (lefCallbacks->SiteCbk) lefData->lefrSite.setYSymmetry(); } + | K_R90 + { if (lefCallbacks->SiteCbk) lefData->lefrSite.set90Symmetry(); } + +site_rowpattern_statement: K_ROWPATTERN {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} + site_rowpatterns ';' + { } + +site_rowpatterns: + // empty + | site_rowpatterns site_rowpattern + ; + +site_rowpattern: T_STRING orientation {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} + { if (lefCallbacks->SiteCbk) lefData->lefrSite.addRowPattern($1, $2); } + +pt: + int_number int_number + { $$.x = $1; $$.y = $2; } + | '(' int_number int_number ')' + { $$.x = $2; $$.y = $3; } + +macro: start_macro macro_options + { + if (lefCallbacks->MacroCbk) + CALLBACK(lefCallbacks->MacroCbk, lefrMacroCbkType, &lefData->lefrMacro); + lefData->lefrDoSite = 0; + } + end_macro + +start_macro: K_MACRO {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + lefData->siteDef = 0; + lefData->symDef = 0; + lefData->sizeDef = 0; + lefData->pinDef = 0; + lefData->obsDef = 0; + lefData->origDef = 0; + lefData->lefrMacro.clear(); + if (lefCallbacks->MacroBeginCbk || lefCallbacks->MacroCbk) { + // some reader may not have MacroBeginCB, but has MacroCB set + lefData->lefrMacro.setName($3); + CALLBACK(lefCallbacks->MacroBeginCbk, lefrMacroBeginCbkType, $3); + } + //strcpy(lefData->macroName, $3); + lefData->macroName = strdup($3); + } + +end_macro: K_END {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (strcmp(lefData->macroName, $3) != 0) { + if (lefCallbacks->MacroEndCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END MACRO name %s is different from the MACRO name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $3, lefData->macroName); + lefError(1634, lefData->outMsg); + lefFree(lefData->outMsg); + lefFree(lefData->macroName); + CHKERR(); + } else + lefFree(lefData->macroName); + } else + lefFree(lefData->macroName); + } else + lefFree(lefData->macroName); + if (lefCallbacks->MacroEndCbk) + CALLBACK(lefCallbacks->MacroEndCbk, lefrMacroEndCbkType, $3); + } + +macro_options: + // empty + | macro_options macro_option // Use left recursions + ; + +macro_option: + macro_class + | macro_generator + | macro_generate + | macro_source + | macro_symmetry_statement + | macro_fixedMask + { } + | macro_origin + { } + | macro_power + { } + | macro_foreign + { } + | macro_eeq + | macro_leq + | macro_size + { } + | macro_site + { } + | macro_pin + { } + | K_FUNCTION K_BUFFER ';' + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.setBuffer(); } + | K_FUNCTION K_INVERTER ';' + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.setInverter(); } + | macro_obs + { } + | macro_density + { } + | macro_clocktype + { } + | timing + { } + | K_PROPERTY {lefData->lefDumbMode = 1000000; } macro_prop_list ';' + { lefData->lefDumbMode = 0; + } + +macro_prop_list: + macro_name_value_pair + | macro_prop_list macro_name_value_pair + ; + +macro_symmetry_statement: K_SYMMETRY macro_symmetries ';' + { + if (lefData->siteDef) { // SITE is defined before SYMMETRY + // pcr 283846 suppress warning + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2032, "A SITE statement is defined before SYMMETRY statement.\nTo avoid this warning in the future, define SITE after SYMMETRY"); + } + lefData->symDef = 1; + } + +macro_symmetries: + // empty + | macro_symmetries macro_symmetry + ; + +macro_symmetry: + K_X + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.setXSymmetry(); } + | K_Y + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.setYSymmetry(); } + | K_R90 + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.set90Symmetry(); } + +macro_name_value_pair: + T_STRING NUMBER + { + char temp[32]; + sprintf(temp, "%.11g", $2); + if (lefCallbacks->MacroCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrMacroProp.propType($1); + lefData->lefrMacro.setNumProperty($1, $2, temp, propTp); + } + } + | T_STRING QSTRING + { + if (lefCallbacks->MacroCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrMacroProp.propType($1); + lefData->lefrMacro.setProperty($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (lefCallbacks->MacroCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrMacroProp.propType($1); + lefData->lefrMacro.setProperty($1, $2, propTp); + } + } + +macro_class: K_CLASS class_type ';' + { + if (lefCallbacks->MacroCbk) lefData->lefrMacro.setClass($2); + if (lefCallbacks->MacroClassTypeCbk) + CALLBACK(lefCallbacks->MacroClassTypeCbk, lefrMacroClassTypeCbkType, $2); + } + +class_type: + K_COVER {$$ = (char*)"COVER"; } + | K_COVER K_BUMP + { $$ = (char*)"COVER BUMP"; + if (lefData->versionNum < 5.5) { + if (lefCallbacks->MacroCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + if (lefSettings->RelaxMode) + lefWarning(2033, "The statement COVER BUMP is a LEF verion 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning."); + else { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "COVER BUMP statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1635, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + } + | K_RING {$$ = (char*)"RING"; } + | K_BLOCK {$$ = (char*)"BLOCK"; } + | K_BLOCK K_BLACKBOX + { $$ = (char*)"BLOCK BLACKBOX"; + if (lefData->versionNum < 5.5) { + if (lefCallbacks->MacroCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + if (lefSettings->RelaxMode) + lefWarning(2034, "The statement BLOCK BLACKBOX is a LEF verion 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning."); + else { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "BLOCK BLACKBOX statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1636, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + } + | K_BLOCK K_SOFT + { + if (lefData->ignoreVersion) { + $$ = (char*)"BLOCK SOFT"; + } else if (lefData->versionNum < 5.6) { + if (lefCallbacks->MacroCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "BLOCK SOFT statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1637, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + else + $$ = (char*)"BLOCK SOFT"; + } + | K_NONE {$$ = (char*)"NONE"; } + | K_BUMP // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "BUMP is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1698, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + + $$ = (char*)"BUMP"; + } + | K_PAD {$$ = (char*)"PAD"; } + | K_VIRTUAL {$$ = (char*)"VIRTUAL"; } + | K_PAD pad_type + { sprintf(lefData->temp_name, "PAD %s", $2); + $$ = lefData->temp_name; + if (lefData->versionNum < 5.5) { + if (strcmp("AREAIO", $2) != 0) { + sprintf(lefData->temp_name, "PAD %s", $2); + $$ = lefData->temp_name; + } else if (lefCallbacks->MacroCbk) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + if (lefSettings->RelaxMode) + lefWarning(2035, "The statement PAD AREAIO is a LEF verion 5.5 syntax.\nYour LEF file is version 5.4 or earlier which is incorrect but will be allowed\nbecause this application does not enforce strict version checking.\nOther tools that enforce strict checking will have a syntax error when reading this file.\nYou can change the VERSION statement in this LEF file to 5.5 or higher to stop this warning."); + else { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "PAD AREAIO statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1638, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + } + | K_CORE {$$ = (char*)"CORE"; } + | K_CORNER + {$$ = (char*)"CORNER"; + // This token is NOT in the spec but has shown up in + // some lef files. This exception came from LEFOUT + // in 'frameworks' + } + | K_CORE core_type + {sprintf(lefData->temp_name, "CORE %s", $2); + $$ = lefData->temp_name;} + | K_ENDCAP endcap_type + {sprintf(lefData->temp_name, "ENDCAP %s", $2); + $$ = lefData->temp_name;} + +pad_type: + K_INPUT {$$ = (char*)"INPUT";} + | K_OUTPUT {$$ = (char*)"OUTPUT";} + | K_INOUT {$$ = (char*)"INOUT";} + | K_POWER {$$ = (char*)"POWER";} + | K_SPACER {$$ = (char*)"SPACER";} + | K_AREAIO {$$ = (char*)"AREAIO";} + +core_type: + K_FEEDTHRU {$$ = (char*)"FEEDTHRU";} + | K_TIEHIGH {$$ = (char*)"TIEHIGH";} + | K_TIELOW {$$ = (char*)"TIELOW";} + | K_SPACER + { + $$ = (char*)"SPACER"; + + if (!lefData->ignoreVersion && lefData->versionNum < 5.4) { + if (lefCallbacks->MacroCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "SPACER statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1639, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + | K_ANTENNACELL + { + $$ = (char*)"ANTENNACELL"; + + if (!lefData->ignoreVersion && lefData->versionNum < 5.4) { + if (lefCallbacks->MacroCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNACELL statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1640, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + | K_WELLTAP + { + $$ = (char*)"WELLTAP"; + + if (!lefData->ignoreVersion && lefData->versionNum < 5.6) { + if (lefCallbacks->MacroCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "WELLTAP statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1641, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + +endcap_type: + K_PRE {$$ = (char*)"PRE";} + | K_POST {$$ = (char*)"POST";} + | K_TOPLEFT {$$ = (char*)"TOPLEFT";} + | K_TOPRIGHT {$$ = (char*)"TOPRIGHT";} + | K_BOTTOMLEFT {$$ = (char*)"BOTTOMLEFT";} + | K_BOTTOMRIGHT {$$ = (char*)"BOTTOMRIGHT";} + +macro_generator: K_GENERATOR T_STRING ';' + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.setGenerator($2); } + +macro_generate: K_GENERATE T_STRING T_STRING ';' + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.setGenerate($2, $3); } + +macro_source: + K_SOURCE K_USER ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->MacroCbk) lefData->lefrMacro.setSource("USER"); + } else + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2036, "SOURCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | K_SOURCE K_GENERATE ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->MacroCbk) lefData->lefrMacro.setSource("GENERATE"); + } else + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2037, "SOURCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | K_SOURCE K_BLOCK ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->MacroCbk) lefData->lefrMacro.setSource("BLOCK"); + } else + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2037, "SOURCE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + +macro_power: K_POWER int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->MacroCbk) lefData->lefrMacro.setPower($2); + } else + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2038, "MACRO POWER statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +macro_origin: K_ORIGIN pt ';' + { + if (lefData->origDef) { // Has multiple ORIGIN defined in a macro, stop parsing + if (lefCallbacks->MacroCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(1642, "ORIGIN statement has defined more than once in a MACRO statement.\nOnly one ORIGIN statement can be defined in a Macro.\nParser will stop processing."); + CHKERR(); + } + } + } + lefData->origDef = 1; + if (lefData->siteDef) { // SITE is defined before ORIGIN + // pcr 283846 suppress warning + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2039, "A SITE statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define SITE after ORIGIN"); + } + if (lefData->pinDef) { // PIN is defined before ORIGIN + // pcr 283846 suppress warning + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2040, "A PIN statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define PIN after ORIGIN"); + } + if (lefData->obsDef) { // OBS is defined before ORIGIN + // pcr 283846 suppress warning + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2041, "A OBS statement is defined before ORIGIN statement.\nTo avoid this warning in the future, define OBS after ORIGIN"); + } + + // Workaround for pcr 640902 + if (lefCallbacks->MacroCbk) lefData->lefrMacro.setOrigin($2.x, $2.y); + if (lefCallbacks->MacroOriginCbk) { + lefData->macroNum.x = $2.x; + lefData->macroNum.y = $2.y; + CALLBACK(lefCallbacks->MacroOriginCbk, lefrMacroOriginCbkType, lefData->macroNum); + } + } + +macro_foreign: + start_foreign ';' + { + if (lefCallbacks->MacroCbk) { + lefData->lefrMacro.addForeign($1, 0, 0.0, 0.0, -1); + } + + if (lefCallbacks->MacroForeignCbk) { + lefiMacroForeign foreign($1, 0, 0.0, 0.0, 0, 0); + CALLBACK(lefCallbacks->MacroForeignCbk, lefrMacroForeignCbkType, &foreign); + } + } + | start_foreign pt ';' + { + if (lefCallbacks->MacroCbk) { + lefData->lefrMacro.addForeign($1, 1, $2.x, $2.y, -1); + } + + if (lefCallbacks->MacroForeignCbk) { + lefiMacroForeign foreign($1, 1, $2.x, $2.y, 0, 0); + CALLBACK(lefCallbacks->MacroForeignCbk, lefrMacroForeignCbkType, &foreign); + } + } + | start_foreign pt orientation ';' + { + if (lefCallbacks->MacroCbk) { + lefData->lefrMacro.addForeign($1, 1, $2.x, $2.y, $3); + } + + if (lefCallbacks->MacroForeignCbk) { + lefiMacroForeign foreign($1, 1, $2.x, $2.y, 1, $3); + CALLBACK(lefCallbacks->MacroForeignCbk, lefrMacroForeignCbkType, &foreign); + } + } + | start_foreign orientation ';' + { + if (lefCallbacks->MacroCbk) { + lefData->lefrMacro.addForeign($1, 0, 0.0, 0.0, $2); + } + + if (lefCallbacks->MacroForeignCbk) { + lefiMacroForeign foreign($1, 0, 0.0, 0.0, 1, $2); + CALLBACK(lefCallbacks->MacroForeignCbk, lefrMacroForeignCbkType, &foreign); + } + } + +macro_fixedMask: + K_FIXEDMASK ';' + { + if (lefCallbacks->MacroCbk && lefData->versionNum >= 5.8) { + lefData->lefrMacro.setFixedMask(1); + } + if (lefCallbacks->MacroFixedMaskCbk) { + CALLBACK(lefCallbacks->MacroFixedMaskCbk, lefrMacroFixedMaskCbkType, 1); + } + } + +macro_eeq: K_EEQ { lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.setEEQ($3); } + +macro_leq: K_LEQ { lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->MacroCbk) lefData->lefrMacro.setLEQ($3); + } else + if (lefCallbacks->MacroCbk) // write warning only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) + lefWarning(2042, "LEQ statement in MACRO is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + +macro_site: + macro_site_word T_STRING ';' + { + if (lefCallbacks->MacroCbk) { + lefData->lefrMacro.setSiteName($2); + } + + if (lefCallbacks->MacroSiteCbk) { + lefiMacroSite site($2, 0); + CALLBACK(lefCallbacks->MacroSiteCbk, lefrMacroSiteCbkType, &site); + } + } + | macro_site_word sitePattern ';' + { + if (lefCallbacks->MacroCbk) { + // also set site name in the variable siteName_ in lefiMacro + // this, if user wants to use method lefData->siteName will get the name also + lefData->lefrMacro.setSitePattern(lefData->lefrSitePatternPtr); + } + + if (lefCallbacks->MacroSiteCbk) { + lefiMacroSite site(0, lefData->lefrSitePatternPtr); + CALLBACK(lefCallbacks->MacroSiteCbk, lefrMacroSiteCbkType, &site); + } + + lefData->lefrSitePatternPtr = 0; + } + +macro_site_word: K_SITE + { lefData->lefDumbMode = 1; lefData->lefNoNum = 1; lefData->siteDef = 1; + if (lefCallbacks->MacroCbk) lefData->lefrDoSite = 1; } + +site_word: K_SITE + { lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } + +macro_size: K_SIZE int_number K_BY int_number ';' + { + if (lefData->siteDef) { // SITE is defined before SIZE + } + lefData->sizeDef = 1; + if (lefCallbacks->MacroCbk) lefData->lefrMacro.setSize($2, $4); + if (lefCallbacks->MacroSizeCbk) { + lefData->macroNum.x = $2; + lefData->macroNum.y = $4; + CALLBACK(lefCallbacks->MacroSizeCbk, lefrMacroSizeCbkType, lefData->macroNum); + } + } + +// This is confusing, since FEF and LEF have opposite definitions of +// ports and pins + +macro_pin: start_macro_pin macro_pin_options end_macro_pin + { + if (lefCallbacks->PinCbk) + CALLBACK(lefCallbacks->PinCbk, lefrPinCbkType, &lefData->lefrPin); + lefData->lefrPin.clear(); + } + +start_macro_pin: K_PIN {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; lefData->pinDef = 1;} T_STRING + { if (lefCallbacks->PinCbk) lefData->lefrPin.setName($3); + //strcpy(lefData->pinName, $3); + lefData->pinName = strdup($3); + } + +end_macro_pin: K_END {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (strcmp(lefData->pinName, $3) != 0) { + if (lefCallbacks->MacroCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END PIN name %s is different from the PIN name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $3, lefData->pinName); + lefError(1643, lefData->outMsg); + lefFree(lefData->outMsg); + lefFree(lefData->pinName); + CHKERR(); + } else + lefFree(lefData->pinName); + } else + lefFree(lefData->pinName); + } else + lefFree(lefData->pinName); + } + +macro_pin_options: + // empty + { } + | macro_pin_options macro_pin_option + { } + +macro_pin_option: + start_foreign ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) lefData->lefrPin.addForeign($1, 0, 0.0, 0.0, -1); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2043, "FOREIGN statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | start_foreign pt ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) lefData->lefrPin.addForeign($1, 1, $2.x, $2.y, -1); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2043, "FOREIGN statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | start_foreign pt orientation ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) lefData->lefrPin.addForeign($1, 1, $2.x, $2.y, $3); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2043, "FOREIGN statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | start_foreign K_STRUCTURE ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) lefData->lefrPin.addForeign($1, 0, 0.0, 0.0, -1); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2043, "FOREIGN statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | start_foreign K_STRUCTURE pt ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) lefData->lefrPin.addForeign($1, 1, $3.x, $3.y, -1); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2043, "FOREIGN statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | start_foreign K_STRUCTURE pt orientation ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) lefData->lefrPin.addForeign($1, 1, $3.x, $3.y, $4); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2043, "FOREIGN statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | K_LEQ { lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setLEQ($3); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2044, "LEQ statement in MACRO PIN is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | K_POWER int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setPower($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2045, "MACRO POWER statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | electrical_direction + { if (lefCallbacks->PinCbk) lefData->lefrPin.setDirection($1); } + | K_USE macro_pin_use ';' + { if (lefCallbacks->PinCbk) lefData->lefrPin.setUse($2); } + | K_SCANUSE macro_scan_use ';' + { } + | K_LEAKAGE int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setLeakage($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2046, "MACRO LEAKAGE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, r emove this statement from the LEF file with version 5.4 or later."); + } + | K_RISETHRESH int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setRiseThresh($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2047, "MACRO RISETHRESH statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_FALLTHRESH int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setFallThresh($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2048, "MACRO FALLTHRESH statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_RISESATCUR int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setRiseSatcur($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2049, "MACRO RISESATCUR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_FALLSATCUR int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setFallSatcur($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2050, "MACRO FALLSATCUR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_VLO int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setVLO($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2051, "MACRO VLO statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_VHI int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setVHI($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2052, "MACRO VHI statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_TIEOFFR int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setTieoffr($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2053, "MACRO TIEOFFR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_SHAPE pin_shape ';' + { if (lefCallbacks->PinCbk) lefData->lefrPin.setShape($2); } + | K_MUSTJOIN {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING ';' + { if (lefCallbacks->PinCbk) lefData->lefrPin.setMustjoin($3); } + | K_OUTPUTNOISEMARGIN {lefData->lefDumbMode = 1;} int_number int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setOutMargin($3, $4); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2054, "MACRO OUTPUTNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_OUTPUTRESISTANCE {lefData->lefDumbMode = 1;} int_number int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setOutResistance($3, $4); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2055, "MACRO OUTPUTRESISTANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_INPUTNOISEMARGIN {lefData->lefDumbMode = 1;} int_number int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setInMargin($3, $4); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2056, "MACRO INPUTNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_CAPACITANCE int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setCapacitance($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2057, "MACRO CAPACITANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_MAXDELAY int_number ';' + { if (lefCallbacks->PinCbk) lefData->lefrPin.setMaxdelay($2); } + | K_MAXLOAD int_number ';' + { if (lefCallbacks->PinCbk) lefData->lefrPin.setMaxload($2); } + | K_RESISTANCE int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setResistance($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2058, "MACRO RESISTANCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_PULLDOWNRES int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setPulldownres($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2059, "MACRO PULLDOWNRES statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_CURRENTSOURCE K_ACTIVE ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setCurrentSource("ACTIVE"); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2060, "MACRO CURRENTSOURCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_CURRENTSOURCE K_RESISTIVE ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setCurrentSource("RESISTIVE"); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2061, "MACRO CURRENTSOURCE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_RISEVOLTAGETHRESHOLD int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setRiseVoltage($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2062, "MACRO RISEVOLTAGETHRESHOLD statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_FALLVOLTAGETHRESHOLD int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setFallVoltage($2); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2063, "MACRO FALLVOLTAGETHRESHOLD statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_IV_TABLES T_STRING T_STRING ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) lefData->lefrPin.setTables($2, $3); + } else + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2064, "MACRO IV_TABLES statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + | K_TAPERRULE T_STRING ';' + { if (lefCallbacks->PinCbk) lefData->lefrPin.setTaperRule($2); } + | K_PROPERTY {lefData->lefDumbMode = 1000000; } pin_prop_list ';' + { lefData->lefDumbMode = 0; + } + | start_macro_port macro_port_class_option geometries K_END + { + lefData->lefDumbMode = 0; + lefData->hasGeoLayer = 0; + if (lefCallbacks->PinCbk) { + lefData->lefrPin.addPort(lefData->lefrGeometriesPtr); + lefData->lefrGeometriesPtr = 0; + lefData->lefrDoGeometries = 0; + } + if ((lefData->needGeometry) && (lefData->needGeometry != 2)) // if the lefData->last LAYER in PORT + if (lefCallbacks->PinCbk) // write warning only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) + lefWarning(2065, "Either PATH, RECT or POLYGON statement is a required in MACRO/PIN/PORT."); + } + | start_macro_port K_END + { + // Since in start_macro_port it has call the Init method, here + // we need to call the Destroy method. + // Still add a null pointer to set the number of port + if (lefCallbacks->PinCbk) { + lefData->lefrPin.addPort(lefData->lefrGeometriesPtr); + lefData->lefrGeometriesPtr = 0; + lefData->lefrDoGeometries = 0; + } + lefData->hasGeoLayer = 0; + } + | K_ANTENNASIZE int_number opt_layer_name ';' + { // a pre 5.4 syntax + lefData->use5_3 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum >= 5.4) { + if (lefData->use5_4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNASIZE statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1644, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaSize($2, $3); + } + | K_ANTENNAMETALAREA NUMBER opt_layer_name ';' + { // a pre 5.4 syntax + lefData->use5_3 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum >= 5.4) { + if (lefData->use5_4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMETALAREA statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1645, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaMetalArea($2, $3); + } + | K_ANTENNAMETALLENGTH int_number opt_layer_name ';' + { // a pre 5.4 syntax + lefData->use5_3 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum >= 5.4) { + if (lefData->use5_4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMETALLENGTH statement is a version 5.3 and earlier syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1646, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaMetalLength($2, $3); + } + | K_RISESLEWLIMIT int_number ';' + { if (lefCallbacks->PinCbk) lefData->lefrPin.setRiseSlewLimit($2); } + | K_FALLSLEWLIMIT int_number ';' + { if (lefCallbacks->PinCbk) lefData->lefrPin.setFallSlewLimit($2); } + | K_ANTENNAPARTIALMETALAREA NUMBER opt_layer_name ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAPARTIALMETALAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1647, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAPARTIALMETALAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1647, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaPartialMetalArea($2, $3); + } + | K_ANTENNAPARTIALMETALSIDEAREA NUMBER opt_layer_name ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAPARTIALMETALSIDEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1648, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAPARTIALMETALSIDEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1648, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaPartialMetalSideArea($2, $3); + } + | K_ANTENNAPARTIALCUTAREA NUMBER opt_layer_name ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAPARTIALCUTAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1649, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAPARTIALCUTAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1649, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaPartialCutArea($2, $3); + } + | K_ANTENNADIFFAREA NUMBER opt_layer_name ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNADIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1650, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNADIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1650, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaDiffArea($2, $3); + } + | K_ANTENNAGATEAREA NUMBER opt_layer_name ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAGATEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1651, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAGATEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1651, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaGateArea($2, $3); + } + | K_ANTENNAMAXAREACAR NUMBER req_layer_name ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMAXAREACAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1652, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMAXAREACAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1652, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaMaxAreaCar($2, $3); + } + | K_ANTENNAMAXSIDEAREACAR NUMBER req_layer_name ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMAXSIDEAREACAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1653, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMAXSIDEAREACAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1653, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaMaxSideAreaCar($2, $3); + } + | K_ANTENNAMAXCUTCAR NUMBER req_layer_name ';' + { // 5.4 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMAXCUTCAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1654, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMAXCUTCAR statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1654, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->PinCbk) lefData->lefrPin.addAntennaMaxCutCar($2, $3); + } + | K_ANTENNAMODEL + { // 5.5 syntax + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.5) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMODEL statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1655, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAMODEL statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1655, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + pin_layer_oxide ';' + | K_NETEXPR {lefData->lefDumbMode = 2; lefData->lefNoNum = 2; } QSTRING ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "NETEXPR statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1656, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->PinCbk) lefData->lefrPin.setNetExpr($3); + } + | K_SUPPLYSENSITIVITY {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "SUPPLYSENSITIVITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1657, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->PinCbk) lefData->lefrPin.setSupplySensitivity($3); + } + | K_GROUNDSENSITIVITY {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->PinCbk) { // write error only if cbk is set + if (lefData->pinWarnings++ < lefSettings->PinWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "GROUNDSENSITIVITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1658, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else + if (lefCallbacks->PinCbk) lefData->lefrPin.setGroundSensitivity($3); + } + +pin_layer_oxide: + K_OXIDE1 + { + if (lefCallbacks->PinCbk) + lefData->lefrPin.addAntennaModel(1); + } + | K_OXIDE2 + { + if (lefCallbacks->PinCbk) + lefData->lefrPin.addAntennaModel(2); + } + | K_OXIDE3 + { + if (lefCallbacks->PinCbk) + lefData->lefrPin.addAntennaModel(3); + } + | K_OXIDE4 + { + if (lefCallbacks->PinCbk) + lefData->lefrPin.addAntennaModel(4); + } + +pin_prop_list: + pin_name_value_pair + | pin_prop_list pin_name_value_pair + ; + +pin_name_value_pair: + T_STRING NUMBER + { + char temp[32]; + sprintf(temp, "%.11g", $2); + if (lefCallbacks->PinCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrPinProp.propType($1); + lefData->lefrPin.setNumProperty($1, $2, temp, propTp); + } + } + | T_STRING QSTRING + { + if (lefCallbacks->PinCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrPinProp.propType($1); + lefData->lefrPin.setProperty($1, $2, propTp); + } + } + | T_STRING T_STRING + { + if (lefCallbacks->PinCbk) { + char propTp; + propTp = lefSettings->lefProps.lefrPinProp.propType($1); + lefData->lefrPin.setProperty($1, $2, propTp); + } + } + +electrical_direction: + K_DIRECTION K_INPUT ';' {$$ = (char*)"INPUT";} + | K_DIRECTION K_OUTPUT ';' {$$ = (char*)"OUTPUT";} + | K_DIRECTION K_OUTPUT K_TRISTATE ';' {$$ = (char*)"OUTPUT TRISTATE";} + | K_DIRECTION K_INOUT ';' {$$ = (char*)"INOUT";} + | K_DIRECTION K_FEEDTHRU ';' {$$ = (char*)"FEEDTHRU";} + +start_macro_port: K_PORT + { + if (lefCallbacks->PinCbk) { + lefData->lefrDoGeometries = 1; + lefData->hasPRP = 0; + lefData->lefrGeometriesPtr = (lefiGeometries*)lefMalloc( sizeof(lefiGeometries)); + lefData->lefrGeometriesPtr->Init(); + } + lefData->needGeometry = 0; // don't need rect/path/poly define yet + lefData->hasGeoLayer = 0; // make sure LAYER is set before geometry + } + +macro_port_class_option: // empty + | K_CLASS class_type ';' + { if (lefData->lefrDoGeometries) + lefData->lefrGeometriesPtr->addClass($2); } + +macro_pin_use: + K_SIGNAL {$$ = (char*)"SIGNAL";} + | K_ANALOG {$$ = (char*)"ANALOG";} + | K_POWER {$$ = (char*)"POWER";} + | K_GROUND {$$ = (char*)"GROUND";} + | K_CLOCK {$$ = (char*)"CLOCK";} + | K_DATA {$$ = (char*)"DATA";} + +macro_scan_use: + K_INPUT {$$ = (char*)"INPUT";} + | K_OUTPUT {$$ = (char*)"OUTPUT";} + | K_START {$$ = (char*)"START";} + | K_STOP {$$ = (char*)"STOP";} + +pin_shape: + {$$ = (char*)""; } // non-lefData->ring shape + | K_ABUTMENT {$$ = (char*)"ABUTMENT";} + | K_RING {$$ = (char*)"RING";} + | K_FEEDTHRU {$$ = (char*)"FEEDTHRU";} + +geometries: geometry geometry_options + +geometry: + K_LAYER {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING + { + if ((lefData->needGeometry) && (lefData->needGeometry != 2)) // 1 LAYER follow after another + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + // geometries is called by MACRO/OBS & MACRO/PIN/PORT + if (lefData->obsDef) + lefWarning(2076, "Either PATH, RECT or POLYGON statement is a required in MACRO/OBS."); + else + lefWarning(2065, "Either PATH, RECT or POLYGON statement is a required in MACRO/PIN/PORT."); + } + if (lefData->lefrDoGeometries) + lefData->lefrGeometriesPtr->addLayer($3); + lefData->needGeometry = 1; // within LAYER it requires either path, rect, poly + lefData->hasGeoLayer = 1; + } + layer_exceptpgnet + layer_spacing ';' + | K_WIDTH int_number ';' + { + if (lefData->lefrDoGeometries) { + if (lefData->hasGeoLayer == 0) { // LAYER statement is missing + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(1701, "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined."); + CHKERR(); + } + } else + lefData->lefrGeometriesPtr->addWidth($2); + } + } + | K_PATH maskColor firstPt otherPts ';' + { if (lefData->lefrDoGeometries) { + if (lefData->hasGeoLayer == 0) { // LAYER statement is missing + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(1701, "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined."); + CHKERR(); + } + } else { + if (lefData->versionNum < 5.8 && (int)$2 > 0) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addPath((int)$2); + } + } + } + lefData->hasPRP = 1; + lefData->needGeometry = 2; + } + | K_PATH maskColor K_ITERATE firstPt otherPts stepPattern ';' + { if (lefData->lefrDoGeometries) { + if (lefData->hasGeoLayer == 0) { // LAYER statement is missing + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(1701, "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined."); + CHKERR(); + } + } else { + if (lefData->versionNum < 5.8 && (int)$2 > 0) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addPathIter((int)$2); + } + } + } + lefData->hasPRP = 1; + lefData->needGeometry = 2; + } + | K_RECT maskColor pt pt';' + { if (lefData->lefrDoGeometries) { + if (lefData->hasGeoLayer == 0) { // LAYER statement is missing + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(1701, "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined."); + CHKERR(); + } + } else { + if (lefData->versionNum < 5.8 && (int)$2 > 0) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addRect((int)$2, $3.x, $3.y, $4.x, $4.y); + } + } + } + lefData->needGeometry = 2; + } + | K_RECT maskColor K_ITERATE pt pt stepPattern ';' + { if (lefData->lefrDoGeometries) { + if (lefData->hasGeoLayer == 0) { // LAYER statement is missing + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(1701, "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined."); + CHKERR(); + } + } else { + if (lefData->versionNum < 5.8 && (int)$2 > 0) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addRectIter((int)$2, $4.x, $4.y, $5.x, $5.y); + } + } + } + lefData->needGeometry = 2; + } + | K_POLYGON maskColor firstPt nextPt nextPt otherPts ';' + { + if (lefData->lefrDoGeometries) { + if (lefData->hasGeoLayer == 0) { // LAYER statement is missing + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(1701, "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined."); + CHKERR(); + } + } else { + if (lefData->versionNum < 5.8 && (int)$2 > 0) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addPolygon((int)$2); + } + } + } + lefData->hasPRP = 1; + lefData->needGeometry = 2; + } + | K_POLYGON maskColor K_ITERATE firstPt nextPt nextPt otherPts stepPattern ';' + { if (lefData->lefrDoGeometries) { + if (lefData->hasGeoLayer == 0) { // LAYER statement is missing + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(1701, "A LAYER statement is missing in Geometry.\nLAYER is a required statement before any geometry can be defined."); + CHKERR(); + } + } else { + if (lefData->versionNum < 5.8 && (int)$2 > 0) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addPolygonIter((int)$2); + } + } + } + lefData->hasPRP = 1; + lefData->needGeometry = 2; + } + | via_placement + { } + +geometry_options: // empty + | geometry_options geometry + +layer_exceptpgnet: // empty + | K_EXCEPTPGNET // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "EXCEPTPGNET is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1699, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefData->lefrDoGeometries) + lefData->lefrGeometriesPtr->addLayerExceptPgNet(); + } + } + +layer_spacing: // empty + | K_SPACING int_number + { if (lefData->lefrDoGeometries) { + if (zeroOrGt($2)) + lefData->lefrGeometriesPtr->addLayerMinSpacing($2); + else { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "THE SPACING statement has the value %g in MACRO OBS.\nValue has to be 0 or greater.", $2); + lefError(1659, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + | K_DESIGNRULEWIDTH int_number + { if (lefData->lefrDoGeometries) { + if (zeroOrGt($2)) + lefData->lefrGeometriesPtr->addLayerRuleWidth($2); + else { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "THE DESIGNRULEWIDTH statement has the value %g in MACRO OBS.\nValue has to be 0 or greater.", $2); + lefError(1660, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + +firstPt: pt + { if (lefData->lefrDoGeometries) + lefData->lefrGeometriesPtr->startList($1.x, $1.y); } + +nextPt: pt + { if (lefData->lefrDoGeometries) + lefData->lefrGeometriesPtr->addToList($1.x, $1.y); } + +otherPts: + // empty + | otherPts nextPt + ; + +via_placement: + K_VIA maskColor pt {lefData->lefDumbMode = 1;} T_STRING ';' + { + if (lefData->lefrDoGeometries){ + if (lefData->versionNum < 5.8 && (int)$2 > 0) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addVia((int)$2, $3.x, $3.y, $5); + } + } + } + | K_VIA K_ITERATE maskColor pt {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + stepPattern ';' + { + if (lefData->lefrDoGeometries) { + if (lefData->versionNum < 5.8 && (int)$3 > 0) { + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefError(2083, "Color mask information can only be defined with version 5.8."); + CHKERR(); + } + } else { + lefData->lefrGeometriesPtr->addViaIter((int)$3, $4.x, $4.y, $6); + } + } + } + +stepPattern: K_DO int_number K_BY int_number K_STEP int_number int_number + { if (lefData->lefrDoGeometries) + lefData->lefrGeometriesPtr->addStepPattern($2, $4, $6, $7); } + +sitePattern: T_STRING int_number int_number orientation + K_DO int_number K_BY int_number K_STEP int_number int_number + { + if (lefData->lefrDoSite) { + lefData->lefrSitePatternPtr = (lefiSitePattern*)lefMalloc( + sizeof(lefiSitePattern)); + lefData->lefrSitePatternPtr->Init(); + lefData->lefrSitePatternPtr->set($1, $2, $3, $4, $6, $8, + $10, $11); + } + } + | T_STRING int_number int_number orientation + { + if (lefData->lefrDoSite) { + lefData->lefrSitePatternPtr = (lefiSitePattern*)lefMalloc( + sizeof(lefiSitePattern)); + lefData->lefrSitePatternPtr->Init(); + lefData->lefrSitePatternPtr->set($1, $2, $3, $4, -1, -1, + -1, -1); + } + } + +trackPattern: + K_X int_number K_DO int_number K_STEP int_number + { + if (lefData->lefrDoTrack) { + lefData->lefrTrackPatternPtr = (lefiTrackPattern*)lefMalloc( + sizeof(lefiTrackPattern)); + lefData->lefrTrackPatternPtr->Init(); + lefData->lefrTrackPatternPtr->set("X", $2, (int)$4, $6); + } + } + K_LAYER {lefData->lefDumbMode = 1000000000;} trackLayers + { lefData->lefDumbMode = 0;} + | K_Y int_number K_DO int_number K_STEP int_number + { + if (lefData->lefrDoTrack) { + lefData->lefrTrackPatternPtr = (lefiTrackPattern*)lefMalloc( + sizeof(lefiTrackPattern)); + lefData->lefrTrackPatternPtr->Init(); + lefData->lefrTrackPatternPtr->set("Y", $2, (int)$4, $6); + } + } + K_LAYER {lefData->lefDumbMode = 1000000000;} trackLayers + { lefData->lefDumbMode = 0;} + | K_X int_number K_DO int_number K_STEP int_number + { + if (lefData->lefrDoTrack) { + lefData->lefrTrackPatternPtr = (lefiTrackPattern*)lefMalloc( + sizeof(lefiTrackPattern)); + lefData->lefrTrackPatternPtr->Init(); + lefData->lefrTrackPatternPtr->set("X", $2, (int)$4, $6); + } + } + | K_Y int_number K_DO int_number K_STEP int_number + { + if (lefData->lefrDoTrack) { + lefData->lefrTrackPatternPtr = (lefiTrackPattern*)lefMalloc( + sizeof(lefiTrackPattern)); + lefData->lefrTrackPatternPtr->Init(); + lefData->lefrTrackPatternPtr->set("Y", $2, (int)$4, $6); + } + } + +trackLayers: + // empty + | trackLayers layer_name + ; + +layer_name: T_STRING + { if (lefData->lefrDoTrack) lefData->lefrTrackPatternPtr->addLayer($1); } + +gcellPattern: K_X int_number K_DO int_number K_STEP int_number + { + if (lefData->lefrDoGcell) { + lefData->lefrGcellPatternPtr = (lefiGcellPattern*)lefMalloc( + sizeof(lefiGcellPattern)); + lefData->lefrGcellPatternPtr->Init(); + lefData->lefrGcellPatternPtr->set("X", $2, (int)$4, $6); + } + } + | K_Y int_number K_DO int_number K_STEP int_number + { + if (lefData->lefrDoGcell) { + lefData->lefrGcellPatternPtr = (lefiGcellPattern*)lefMalloc( + sizeof(lefiGcellPattern)); + lefData->lefrGcellPatternPtr->Init(); + lefData->lefrGcellPatternPtr->set("Y", $2, (int)$4, $6); + } + } + +macro_obs: start_macro_obs geometries K_END + { + if (lefCallbacks->ObstructionCbk) { + lefData->lefrObstruction.setGeometries(lefData->lefrGeometriesPtr); + lefData->lefrGeometriesPtr = 0; + lefData->lefrDoGeometries = 0; + CALLBACK(lefCallbacks->ObstructionCbk, lefrObstructionCbkType, &lefData->lefrObstruction); + } + lefData->lefDumbMode = 0; + lefData->hasGeoLayer = 0; // reset + } + | start_macro_obs K_END + { + // The pointer has malloced in start, need to free manually + if (lefData->lefrGeometriesPtr) { + lefData->lefrGeometriesPtr->Destroy(); + lefFree(lefData->lefrGeometriesPtr); + lefData->lefrGeometriesPtr = 0; + lefData->lefrDoGeometries = 0; + } + lefData->hasGeoLayer = 0; + } + +start_macro_obs: K_OBS + { + lefData->obsDef = 1; + if (lefCallbacks->ObstructionCbk) { + lefData->lefrDoGeometries = 1; + lefData->lefrGeometriesPtr = (lefiGeometries*)lefMalloc( + sizeof(lefiGeometries)); + lefData->lefrGeometriesPtr->Init(); + } + lefData->hasGeoLayer = 0; + } + +macro_density: K_DENSITY density_layer density_layers K_END + { + if (lefData->versionNum < 5.6) { + if (lefCallbacks->DensityCbk) { // write error only if cbk is set + if (lefData->macroWarnings++ < lefSettings->MacroWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "DENSITY statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1661, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->DensityCbk) { + CALLBACK(lefCallbacks->DensityCbk, lefrDensityCbkType, &lefData->lefrDensity); + lefData->lefrDensity.clear(); + } + lefData->lefDumbMode = 0; + } + +density_layers: // empty + | density_layers density_layer + ; + +density_layer: K_LAYER { lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { + if (lefCallbacks->DensityCbk) + lefData->lefrDensity.addLayer($3); + } + density_layer_rect density_layer_rects + +density_layer_rects: // empty + | density_layer_rects density_layer_rect + ; + +density_layer_rect: K_RECT pt pt int_number ';' + { + if (lefCallbacks->DensityCbk) + lefData->lefrDensity.addRect($2.x, $2.y, $3.x, $3.y, $4); + } + +macro_clocktype: K_CLOCKTYPE { lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING ';' + { if (lefCallbacks->MacroCbk) lefData->lefrMacro.setClockType($3); } + +timing: start_timing timing_options end_timing + { } + +start_timing: K_TIMING + { } + +end_timing: K_END K_TIMING + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->TimingCbk && lefData->lefrTiming.hasData()) + CALLBACK(lefCallbacks->TimingCbk, lefrTimingCbkType, &lefData->lefrTiming); + lefData->lefrTiming.clear(); + } else { + if (lefCallbacks->TimingCbk) // write warning only if cbk is set + if (lefData->timingWarnings++ < lefSettings->TimingWarnings) + lefWarning(2066, "MACRO TIMING statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + lefData->lefrTiming.clear(); + } + } + +timing_options: + // empty + | timing_options timing_option + ; + +timing_option: + K_FROMPIN + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->TimingCbk && lefData->lefrTiming.hasData()) + CALLBACK(lefCallbacks->TimingCbk, lefrTimingCbkType, &lefData->lefrTiming); + } + lefData->lefDumbMode = 1000000000; + lefData->lefrTiming.clear(); + } + list_of_from_strings ';' + { lefData->lefDumbMode = 0;} + | K_TOPIN {lefData->lefDumbMode = 1000000000;} list_of_to_strings ';' + { lefData->lefDumbMode = 0;} + | risefall K_INTRINSIC int_number int_number + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addRiseFall($1,$3,$4); } + slew_spec K_VARIABLE int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addRiseFallVariable($8,$9); } + | risefall delay_or_transition K_UNATENESS unateness + K_TABLEDIMENSION int_number int_number int_number ';' + { if (lefCallbacks->TimingCbk) { + if ($2[0] == 'D' || $2[0] == 'd') // delay + lefData->lefrTiming.addDelay($1, $4, $6, $7, $8); + else + lefData->lefrTiming.addTransition($1, $4, $6, $7, $8); + } + } + | K_TABLEAXIS list_of_table_axis_dnumbers ';' + { } + | K_TABLEENTRIES list_of_table_entries ';' + { } + | K_RISERS int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setRiseRS($2,$3); } + | K_FALLRS int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setFallRS($2,$3); } + | K_RISECS int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setRiseCS($2,$3); } + | K_FALLCS int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setFallCS($2,$3); } + | K_RISESATT1 int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setRiseAtt1($2,$3); } + | K_FALLSATT1 int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setFallAtt1($2,$3); } + | K_RISET0 int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setRiseTo($2,$3); } + | K_FALLT0 int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setFallTo($2,$3); } + | K_UNATENESS unateness ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addUnateness($2); } + | K_STABLE K_SETUP int_number K_HOLD int_number risefall ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setStable($3,$5,$6); } + | two_pin_trigger from_pin_trigger to_pin_trigger K_TABLEDIMENSION int_number int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addSDF2Pins($1,$2,$3,$5,$6,$7); } + | one_pin_trigger K_TABLEDIMENSION int_number int_number int_number ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addSDF1Pin($1,$3,$4,$4); } + | K_SDFCONDSTART QSTRING ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setSDFcondStart($2); } + | K_SDFCONDEND QSTRING ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setSDFcondEnd($2); } + | K_SDFCOND QSTRING ';' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.setSDFcond($2); } + | K_EXTENSION ';' + { } + +one_pin_trigger: + K_MPWH + { $$ = (char*)"MPWH";} + | K_MPWL + { $$ = (char*)"MPWL";} + | K_PERIOD + { $$ = (char*)"PERIOD";} + +two_pin_trigger : + K_SETUP + { $$ = (char*)"SETUP";} + | K_HOLD + { $$ = (char*)"HOLD";} + | K_RECOVERY + { $$ = (char*)"RECOVERY";} + | K_SKEW + { $$ = (char*)"SKEW";} + +from_pin_trigger: + K_ANYEDGE + { $$ = (char*)"ANYEDGE";} + | K_POSEDGE + { $$ = (char*)"POSEDGE";} + | K_NEGEDGE + { $$ = (char*)"NEGEDGE";} + +to_pin_trigger: + K_ANYEDGE + { $$ = (char*)"ANYEDGE";} + | K_POSEDGE + { $$ = (char*)"POSEDGE";} + | K_NEGEDGE + { $$ = (char*)"NEGEDGE";} + +delay_or_transition : + K_DELAY + { $$ = (char*)"DELAY"; } + | K_TRANSITIONTIME + { $$ = (char*)"TRANSITION"; } + +list_of_table_entries: + table_entry + { } + | list_of_table_entries table_entry + { } + +table_entry: '(' int_number int_number int_number ')' + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addTableEntry($2,$3,$4); } + +list_of_table_axis_dnumbers: + int_number + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addTableAxisNumber($1); } + | list_of_table_axis_dnumbers int_number + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addTableAxisNumber($2); } + +slew_spec: + // empty + { } + | int_number int_number int_number int_number + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addRiseFallSlew($1,$2,$3,$4); } + | int_number int_number int_number int_number int_number int_number int_number + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addRiseFallSlew($1,$2,$3,$4); + if (lefCallbacks->TimingCbk) lefData->lefrTiming.addRiseFallSlew2($5,$6,$7); } + +risefall: + K_RISE + { $$ = (char*)"RISE"; } + | K_FALL + { $$ = (char*)"FALL"; } + +unateness: + K_INVERT + { $$ = (char*)"INVERT"; } + | K_NONINVERT + { $$ = (char*)"NONINVERT"; } + | K_NONUNATE + { $$ = (char*)"NONUNATE"; } + +list_of_from_strings: + T_STRING + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addFromPin($1); } + | list_of_from_strings T_STRING + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addFromPin($2); } + +list_of_to_strings: + T_STRING + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addToPin($1); } + | list_of_to_strings T_STRING + { if (lefCallbacks->TimingCbk) lefData->lefrTiming.addToPin($2); } + +array: start_array array_rules + { + if (lefCallbacks->ArrayCbk) + CALLBACK(lefCallbacks->ArrayCbk, lefrArrayCbkType, &lefData->lefrArray); + lefData->lefrArray.clear(); + lefData->lefrSitePatternPtr = 0; + lefData->lefrDoSite = 0; + } + end_array + +start_array: K_ARRAY {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (lefCallbacks->ArrayCbk) { + lefData->lefrArray.setName($3); + CALLBACK(lefCallbacks->ArrayBeginCbk, lefrArrayBeginCbkType, $3); + } + //strcpy(lefData->arrayName, $3); + lefData->arrayName = strdup($3); + } + +end_array: K_END {lefData->lefDumbMode = 1; lefData->lefNoNum = 1;} T_STRING + { + if (lefCallbacks->ArrayCbk && lefCallbacks->ArrayEndCbk) + CALLBACK(lefCallbacks->ArrayEndCbk, lefrArrayEndCbkType, $3); + if (strcmp(lefData->arrayName, $3) != 0) { + if (lefCallbacks->ArrayCbk) { // write error only if cbk is set + if (lefData->arrayWarnings++ < lefSettings->ArrayWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "END ARRAY name %s is different from the ARRAY name %s.\nCorrect the LEF file before rerunning it through the LEF parser.", $3, lefData->arrayName); + lefError(1662, lefData->outMsg); + lefFree(lefData->outMsg); + lefFree(lefData->arrayName); + CHKERR(); + } else + lefFree(lefData->arrayName); + } else + lefFree(lefData->arrayName); + } else + lefFree(lefData->arrayName); + } + +array_rules: + // empty + { } + | array_rules array_rule + { } + +array_rule: + site_word { if (lefCallbacks->ArrayCbk) lefData->lefrDoSite = 1; lefData->lefDumbMode = 1; } + sitePattern ';' + { + if (lefCallbacks->ArrayCbk) { + lefData->lefrArray.addSitePattern(lefData->lefrSitePatternPtr); + } + } + | K_CANPLACE {lefData->lefDumbMode = 1; if (lefCallbacks->ArrayCbk) lefData->lefrDoSite = 1; } + sitePattern ';' + { + if (lefCallbacks->ArrayCbk) { + lefData->lefrArray.addCanPlace(lefData->lefrSitePatternPtr); + } + } + | K_CANNOTOCCUPY {lefData->lefDumbMode = 1; if (lefCallbacks->ArrayCbk) lefData->lefrDoSite = 1; } + sitePattern ';' + { + if (lefCallbacks->ArrayCbk) { + lefData->lefrArray.addCannotOccupy(lefData->lefrSitePatternPtr); + } + } + | K_TRACKS { if (lefCallbacks->ArrayCbk) lefData->lefrDoTrack = 1; } trackPattern ';' + { + if (lefCallbacks->ArrayCbk) { + lefData->lefrArray.addTrack(lefData->lefrTrackPatternPtr); + } + } + | floorplan_start floorplan_list K_END T_STRING + { + } + | K_GCELLGRID { if (lefCallbacks->ArrayCbk) lefData->lefrDoGcell = 1; } gcellPattern ';' + { + if (lefCallbacks->ArrayCbk) { + lefData->lefrArray.addGcell(lefData->lefrGcellPatternPtr); + } + } + | K_DEFAULTCAP int_number cap_list K_END K_DEFAULTCAP + { + if (lefCallbacks->ArrayCbk) { + lefData->lefrArray.setTableSize((int)$2); + } + } + | def_statement + { } + +floorplan_start: K_FLOORPLAN T_STRING + { if (lefCallbacks->ArrayCbk) lefData->lefrArray.addFloorPlan($2); } + +floorplan_list: + // empty + { } + | floorplan_list floorplan_element + { } + +floorplan_element: + K_CANPLACE { lefData->lefDumbMode = 1; if (lefCallbacks->ArrayCbk) lefData->lefrDoSite = 1; } + sitePattern ';' + { + if (lefCallbacks->ArrayCbk) + lefData->lefrArray.addSiteToFloorPlan("CANPLACE", + lefData->lefrSitePatternPtr); + } + | K_CANNOTOCCUPY { if (lefCallbacks->ArrayCbk) lefData->lefrDoSite = 1; lefData->lefDumbMode = 1; } + sitePattern ';' + { + if (lefCallbacks->ArrayCbk) + lefData->lefrArray.addSiteToFloorPlan("CANNOTOCCUPY", + lefData->lefrSitePatternPtr); + } + +cap_list: + // empty + { } + | cap_list one_cap + { } + +one_cap: K_MINPINS int_number K_WIRECAP int_number ';' + { if (lefCallbacks->ArrayCbk) lefData->lefrArray.addDefaultCap((int)$2, $4); } + +msg_statement: + K_MESSAGE {lefData->lefDumbMode=1;lefData->lefNlToken=TRUE;} T_STRING '=' s_expr dtrm + { } + +create_file_statement: + K_CREATEFILE {lefData->lefDumbMode=1;lefData->lefNlToken=TRUE;} T_STRING '=' s_expr dtrm + { } + +def_statement: + K_DEFINE {lefData->lefDumbMode=1;lefData->lefNlToken=TRUE;} T_STRING '=' expression dtrm + { + if (lefData->versionNum < 5.6) + lefAddNumDefine($3, $5); + else + if (lefCallbacks->ArrayCbk) // write warning only if cbk is set + if (lefData->arrayWarnings++ < lefSettings->ArrayWarnings) + lefWarning(2067, "DEFINE statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | K_DEFINES {lefData->lefDumbMode=1;lefData->lefNlToken=TRUE;} T_STRING '=' s_expr dtrm + { + if (lefData->versionNum < 5.6) + lefAddStringDefine($3, $5); + else + if (lefCallbacks->ArrayCbk) // write warning only if cbk is set + if (lefData->arrayWarnings++ < lefSettings->ArrayWarnings) + lefWarning(2068, "DEFINES statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + | K_DEFINEB {lefData->lefDumbMode=1;lefData->lefNlToken=TRUE;} T_STRING '=' b_expr dtrm + { + if (lefData->versionNum < 5.6) + lefAddBooleanDefine($3, $5); + else + if (lefCallbacks->ArrayCbk) // write warning only if cbk is set + if (lefData->arrayWarnings++ < lefSettings->ArrayWarnings) + lefWarning(2069, "DEFINEB statement is obsolete in version 5.6 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.6 or later."); + } + +// terminator for &defines. Can be semicolon or newline +dtrm: + | ';' {lefData->lefNlToken = FALSE;} + | '\n' {lefData->lefNlToken = FALSE;} + +then: + K_THEN + | '\n' K_THEN + ; + +else: + K_ELSE + | '\n' K_ELSE + ; + +expression: + expression '+' expression {$$ = $1 + $3; } + | expression '-' expression {$$ = $1 - $3; } + | expression '*' expression {$$ = $1 * $3; } + | expression '/' expression {$$ = $1 / $3; } + | '-' expression %prec UMINUS {$$ = -$2;} + | '(' expression ')' {$$ = $2;} + | K_IF b_expr then expression else expression %prec IF + {$$ = ($2 != 0) ? $4 : $6;} + | int_number {$$ = $1;} + +b_expr: + expression relop expression {$$ = comp_num($1,$2,$3);} + | expression K_AND expression {$$ = $1 != 0 && $3 != 0;} + | expression K_OR expression {$$ = $1 != 0 || $3 != 0;} + | s_expr relop s_expr {$$ = comp_str($1,$2,$3);} + | s_expr K_AND s_expr {$$ = $1[0] != 0 && $3[0] != 0;} + | s_expr K_OR s_expr {$$ = $1[0] != 0 || $3[0] != 0;} + | b_expr K_EQ b_expr {$$ = $1 == $3;} + | b_expr K_NE b_expr {$$ = $1 != $3;} + | b_expr K_AND b_expr {$$ = $1 && $3;} + | b_expr K_OR b_expr {$$ = $1 || $3;} + | K_NOT b_expr %prec LNOT {$$ = !$$;} + | '(' b_expr ')' {$$ = $2;} + | K_IF b_expr then b_expr else b_expr %prec IF + {$$ = ($2 != 0) ? $4 : $6;} + | K_TRUE {$$ = 1;} + | K_FALSE {$$ = 0;} + +s_expr: + s_expr '+' s_expr + { + $$ = (char*)lefMalloc(strlen($1)+strlen($3)+1); + strcpy($$,$1); + strcat($$,$3); + } + | '(' s_expr ')' + { $$ = $2; } + | K_IF b_expr then s_expr else s_expr %prec IF + { + lefData->lefDefIf = TRUE; + if ($2 != 0) { + $$ = $4; + } else { + $$ = $6; + } + } + | QSTRING + { $$ = $1; } + +relop: + K_LE {$$ = C_LE;} + | K_LT {$$ = C_LT;} + | K_GE {$$ = C_GE;} + | K_GT {$$ = C_GT;} + | K_EQ {$$ = C_EQ;} + | K_NE {$$ = C_NE;} + | '=' {$$ = C_EQ;} + | '<' {$$ = C_LT;} + | '>' {$$ = C_GT;} + + +prop_def_section: K_PROPDEF + { + if (lefCallbacks->PropBeginCbk) + CALLBACK(lefCallbacks->PropBeginCbk, lefrPropBeginCbkType, 0); + } + prop_stmts K_END K_PROPDEF + { + if (lefCallbacks->PropEndCbk) + CALLBACK(lefCallbacks->PropEndCbk, lefrPropEndCbkType, 0); + } + +prop_stmts: + // empty + { } + | prop_stmts prop_stmt + { } + +prop_stmt: + K_LIBRARY {lefData->lefDumbMode = 1; lefData->lefrProp.clear(); } + T_STRING prop_define ';' + { + if (lefCallbacks->PropCbk) { + lefData->lefrProp.setPropType("library", $3); + CALLBACK(lefCallbacks->PropCbk, lefrPropCbkType, &lefData->lefrProp); + } + lefSettings->lefProps.lefrLibProp.setPropType($3, lefData->lefPropDefType); + } + | K_COMPONENTPIN {lefData->lefDumbMode = 1; lefData->lefrProp.clear(); } + T_STRING prop_define ';' + { + if (lefCallbacks->PropCbk) { + lefData->lefrProp.setPropType("componentpin", $3); + CALLBACK(lefCallbacks->PropCbk, lefrPropCbkType, &lefData->lefrProp); + } + lefSettings->lefProps.lefrCompProp.setPropType($3, lefData->lefPropDefType); + } + | K_PIN {lefData->lefDumbMode = 1; lefData->lefrProp.clear(); } + T_STRING prop_define ';' + { + if (lefCallbacks->PropCbk) { + lefData->lefrProp.setPropType("pin", $3); + CALLBACK(lefCallbacks->PropCbk, lefrPropCbkType, &lefData->lefrProp); + } + lefSettings->lefProps.lefrPinProp.setPropType($3, lefData->lefPropDefType); + + } + | K_MACRO {lefData->lefDumbMode = 1; lefData->lefrProp.clear(); } + T_STRING prop_define ';' + { + if (lefCallbacks->PropCbk) { + lefData->lefrProp.setPropType("macro", $3); + CALLBACK(lefCallbacks->PropCbk, lefrPropCbkType, &lefData->lefrProp); + } + lefSettings->lefProps.lefrMacroProp.setPropType($3, lefData->lefPropDefType); + } + | K_VIA {lefData->lefDumbMode = 1; lefData->lefrProp.clear(); } + T_STRING prop_define ';' + { + if (lefCallbacks->PropCbk) { + lefData->lefrProp.setPropType("via", $3); + CALLBACK(lefCallbacks->PropCbk, lefrPropCbkType, &lefData->lefrProp); + } + lefSettings->lefProps.lefrViaProp.setPropType($3, lefData->lefPropDefType); + } + | K_VIARULE {lefData->lefDumbMode = 1; lefData->lefrProp.clear(); } + T_STRING prop_define ';' + { + if (lefCallbacks->PropCbk) { + lefData->lefrProp.setPropType("viarule", $3); + CALLBACK(lefCallbacks->PropCbk, lefrPropCbkType, &lefData->lefrProp); + } + lefSettings->lefProps.lefrViaRuleProp.setPropType($3, lefData->lefPropDefType); + } + | K_LAYER {lefData->lefDumbMode = 1; lefData->lefrProp.clear(); } + T_STRING prop_define ';' + { + if (lefCallbacks->PropCbk) { + lefData->lefrProp.setPropType("layer", $3); + CALLBACK(lefCallbacks->PropCbk, lefrPropCbkType, &lefData->lefrProp); + } + lefSettings->lefProps.lefrLayerProp.setPropType($3, lefData->lefPropDefType); + } + | K_NONDEFAULTRULE {lefData->lefDumbMode = 1; lefData->lefrProp.clear(); } + T_STRING prop_define ';' + { + if (lefCallbacks->PropCbk) { + lefData->lefrProp.setPropType("nondefaultrule", $3); + CALLBACK(lefCallbacks->PropCbk, lefrPropCbkType, &lefData->lefrProp); + } + lefSettings->lefProps.lefrNondefProp.setPropType($3, lefData->lefPropDefType); + } + +prop_define: + K_INTEGER opt_def_range opt_def_dvalue + { + if (lefCallbacks->PropCbk) lefData->lefrProp.setPropInteger(); + lefData->lefPropDefType = 'I'; + } + | K_REAL opt_def_range opt_def_value + { + if (lefCallbacks->PropCbk) lefData->lefrProp.setPropReal(); + lefData->lefPropDefType = 'R'; + } + | K_STRING + { + if (lefCallbacks->PropCbk) lefData->lefrProp.setPropString(); + lefData->lefPropDefType = 'S'; + } + | K_STRING QSTRING + { + if (lefCallbacks->PropCbk) lefData->lefrProp.setPropQString($2); + lefData->lefPropDefType = 'Q'; + } + | K_NAMEMAPSTRING T_STRING + { + if (lefCallbacks->PropCbk) lefData->lefrProp.setPropNameMapString($2); + lefData->lefPropDefType = 'S'; + } + +opt_range_second: + // nothing + { } + | K_USELENGTHTHRESHOLD + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingRangeUseLength(); + } + | K_INFLUENCE int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setSpacingRangeInfluence($2); + lefData->lefrLayer.setSpacingRangeInfluenceRange(-1, -1); + } + } + | K_INFLUENCE int_number K_RANGE int_number int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setSpacingRangeInfluence($2); + lefData->lefrLayer.setSpacingRangeInfluenceRange($4, $5); + } + } + | K_RANGE int_number int_number + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingRangeRange($2, $3); + } + +opt_endofline: // 5.7 + // nothing + { } + | K_PARALLELEDGE int_number K_WITHIN int_number + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingParSW($2, $4); + } + opt_endofline_twoedges + +opt_endofline_twoedges: // 5.7 + // nothing + { } + | K_TWOEDGES + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingParTwoEdges(); + } + +opt_samenetPGonly: // 5.7 + // nothing + { } + | K_PGONLY + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingSamenetPGonly(); + } + +opt_def_range: + // nothing + { } + | K_RANGE int_number int_number + { if (lefCallbacks->PropCbk) lefData->lefrProp.setRange($2, $3); } + +opt_def_value: + // empty + { } + | NUMBER + { if (lefCallbacks->PropCbk) lefData->lefrProp.setNumber($1); } + +opt_def_dvalue: + // empty + { } + | int_number + { if (lefCallbacks->PropCbk) lefData->lefrProp.setNumber($1); } + +layer_spacing_opts: + // empty + | layer_spacing_opt layer_spacing_opts + +layer_spacing_opt: K_CENTERTOCENTER // 5.7 + { + if (lefCallbacks->LayerCbk) { + if (lefData->hasSpCenter) { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1663, "A CENTERTOCENTER statement was already defined in SPACING\nCENTERTOCENTER can only be defined once per LAYER CUT SPACING."); + CHKERR(); + } + } + lefData->hasSpCenter = 1; + if (lefData->versionNum < 5.6) { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "CENTERTOCENTER statement is a version 5.6 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1664, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingCenterToCenter(); + } + } + | K_SAMENET // 5.7 + { + if (lefCallbacks->LayerCbk) { + if (lefData->hasSpSamenet) { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1665, "A SAMENET statement was already defined in SPACING\nSAMENET can only be defined once per LAYER CUT SPACING."); + CHKERR(); + } + } + lefData->hasSpSamenet = 1; + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingSamenet(); + } + } + opt_samenetPGonly + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "SAMENET is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1684, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + | K_PARALLELOVERLAP // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "PARALLELOVERLAP is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1680, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefCallbacks->LayerCbk) { + if (lefData->hasSpParallel) { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1666, "A PARALLELOVERLAP statement was already defined in SPACING\nPARALLELOVERLAP can only be defined once per LAYER CUT SPACING."); + CHKERR(); + } + } + lefData->hasSpParallel = 1; + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingParallelOverlap(); + } + } + } + +layer_spacing_cut_routing: + // empty + | K_LAYER {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING + { + if (lefCallbacks->LayerCbk) +{ + if (lefData->versionNum < 5.7) { + if (lefData->hasSpSamenet) { // 5.6 and earlier does not allow + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1667, "A SAMENET statement was already defined in SPACING\nEither SAMENET or LAYER can be defined, but not both."); + CHKERR(); + } + } + } + lefData->lefrLayer.setSpacingName($3); + } + } + spacing_cut_layer_opt + | K_ADJACENTCUTS int_number K_WITHIN int_number + { + if (lefCallbacks->LayerCbk) { + if (lefData->versionNum < 5.5) { + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ADJACENTCUTS statement is a version 5.5 and later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1668, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + if (lefData->versionNum < 5.7) { + if (lefData->hasSpSamenet) { // 5.6 and earlier does not allow + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1669, "A SAMENET statement was already defined in SPACING\nEither SAMENET or ADJACENTCUTS can be defined, but not both."); + CHKERR(); + } + } + } + lefData->lefrLayer.setSpacingAdjacent((int)$2, $4); + } + } + opt_adjacentcuts_exceptsame + | K_AREA NUMBER // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "AREA is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1693, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefCallbacks->LayerCbk) { + if (lefData->versionNum < 5.7) { + if (lefData->hasSpSamenet) { // 5.6 and earlier does not allow + if (lefData->layerWarnings++ < lefSettings->LayerWarnings) { + lefError(1670, "A SAMENET statement was already defined in SPACING\nEither SAMENET or AREA can be defined, but not both."); + CHKERR(); + } + } + } + lefData->lefrLayer.setSpacingArea($2); + } + } + } + | K_RANGE int_number int_number + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingRange($2, $3); + } + opt_range_second + | K_LENGTHTHRESHOLD int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setSpacingLength($2); + } + } + | K_LENGTHTHRESHOLD int_number K_RANGE int_number int_number + { + if (lefCallbacks->LayerCbk) { + lefData->lefrLayer.setSpacingLength($2); + lefData->lefrLayer.setSpacingLengthRange($4, $5); + } + } + | K_ENDOFLINE int_number K_WITHIN int_number // 5.7 + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingEol($2, $4); + } + opt_endofline + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "ENDOFLINE is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1681, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + | K_NOTCHLENGTH int_number // 5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "NOTCHLENGTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1682, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingNotchLength($2); + } + } + | K_ENDOFNOTCHWIDTH int_number K_NOTCHSPACING int_number K_NOTCHLENGTH int_number //5.7 + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "ENDOFNOTCHWIDTH is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1696, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingEndOfNotchWidth($2, $4, $6); + } + } + +spacing_cut_layer_opt: // 5.7 + // empty + {} + | K_STACK + { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingLayerStack(); + } + +opt_adjacentcuts_exceptsame: // 5.7 + // empty + {} + | K_EXCEPTSAMEPGNET + { + if (lefData->versionNum < 5.7) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf(lefData->outMsg, + "EXCEPTSAMEPGNET is a version 5.7 or later syntax.\nYour lef file is defined with version %g.", lefData->versionNum); + lefError(1683, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } else { + if (lefCallbacks->LayerCbk) + lefData->lefrLayer.setSpacingAdjacentExcept(); + } + } + +opt_layer_name: + // empty + { $$ = 0; } + | K_LAYER {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING + { $$ = $3; } + +req_layer_name: + // pcr 355313 + K_LAYER {lefData->lefDumbMode = 1; lefData->lefNoNum = 1; } T_STRING + { $$ = $3; } + +// 9/11/2001 - Wanda da Rosa. The following are obsolete in 5.4 +universalnoisemargin: K_UNIVERSALNOISEMARGIN int_number int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->NoiseMarginCbk) { + lefData->lefrNoiseMargin.low = $2; + lefData->lefrNoiseMargin.high = $3; + CALLBACK(lefCallbacks->NoiseMarginCbk, lefrNoiseMarginCbkType, &lefData->lefrNoiseMargin); + } + } else + if (lefCallbacks->NoiseMarginCbk) // write warning only if cbk is set + if (lefData->noiseMarginWarnings++ < lefSettings->NoiseMarginWarnings) + lefWarning(2070, "UNIVERSALNOISEMARGIN statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +edgeratethreshold1: K_EDGERATETHRESHOLD1 int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->EdgeRateThreshold1Cbk) { + CALLBACK(lefCallbacks->EdgeRateThreshold1Cbk, + lefrEdgeRateThreshold1CbkType, $2); + } + } else + if (lefCallbacks->EdgeRateThreshold1Cbk) // write warning only if cbk is set + if (lefData->edgeRateThreshold1Warnings++ < lefSettings->EdgeRateThreshold1Warnings) + lefWarning(2071, "EDGERATETHRESHOLD1 statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +edgeratethreshold2: K_EDGERATETHRESHOLD2 int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->EdgeRateThreshold2Cbk) { + CALLBACK(lefCallbacks->EdgeRateThreshold2Cbk, + lefrEdgeRateThreshold2CbkType, $2); + } + } else + if (lefCallbacks->EdgeRateThreshold2Cbk) // write warning only if cbk is set + if (lefData->edgeRateThreshold2Warnings++ < lefSettings->EdgeRateThreshold2Warnings) + lefWarning(2072, "EDGERATETHRESHOLD2 statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +edgeratescalefactor: K_EDGERATESCALEFACTOR int_number ';' + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->EdgeRateScaleFactorCbk) { + CALLBACK(lefCallbacks->EdgeRateScaleFactorCbk, + lefrEdgeRateScaleFactorCbkType, $2); + } + } else + if (lefCallbacks->EdgeRateScaleFactorCbk) // write warning only if cbk is set + if (lefData->edgeRateScaleFactorWarnings++ < lefSettings->EdgeRateScaleFactorWarnings) + lefWarning(2073, "EDGERATESCALEFACTOR statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +noisetable: K_NOISETABLE int_number + { if (lefCallbacks->NoiseTableCbk) lefData->lefrNoiseTable.setup((int)$2); } + ';' noise_table_list end_noisetable dtrm + { } + +end_noisetable: + K_END K_NOISETABLE + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->NoiseTableCbk) + CALLBACK(lefCallbacks->NoiseTableCbk, lefrNoiseTableCbkType, &lefData->lefrNoiseTable); + } else + if (lefCallbacks->NoiseTableCbk) // write warning only if cbk is set + if (lefData->noiseTableWarnings++ < lefSettings->NoiseTableWarnings) + lefWarning(2074, "NOISETABLE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + + +noise_table_list : + noise_table_entry + | noise_table_list noise_table_entry + ; + +noise_table_entry: + K_EDGERATE int_number ';' + { if (lefCallbacks->NoiseTableCbk) + { + lefData->lefrNoiseTable.newEdge(); + lefData->lefrNoiseTable.addEdge($2); + } + } + | output_resistance_entry + { } + +output_resistance_entry: K_OUTPUTRESISTANCE + { if (lefCallbacks->NoiseTableCbk) lefData->lefrNoiseTable.addResistance(); } + num_list ';' victim_list + ; + +num_list: + int_number + { if (lefCallbacks->NoiseTableCbk) + lefData->lefrNoiseTable.addResistanceNumber($1); } + | num_list int_number + { if (lefCallbacks->NoiseTableCbk) + lefData->lefrNoiseTable.addResistanceNumber($2); } + +victim_list: + victim + | victim_list victim + ; + +victim: K_VICTIMLENGTH int_number ';' + { if (lefCallbacks->NoiseTableCbk) + lefData->lefrNoiseTable.addVictimLength($2); } + K_VICTIMNOISE vnoiselist ';' + { } + +vnoiselist: + int_number + { if (lefCallbacks->NoiseTableCbk) + lefData->lefrNoiseTable.addVictimNoise($1); } + | vnoiselist int_number + { if (lefCallbacks->NoiseTableCbk) + lefData->lefrNoiseTable.addVictimNoise($2); } + +correctiontable: K_CORRECTIONTABLE int_number ';' + { if (lefCallbacks->CorrectionTableCbk) + lefData->lefrCorrectionTable.setup((int)$2); } + correction_table_list end_correctiontable dtrm + { } + +end_correctiontable: + K_END K_CORRECTIONTABLE + { + if (lefData->versionNum < 5.4) { + if (lefCallbacks->CorrectionTableCbk) + CALLBACK(lefCallbacks->CorrectionTableCbk, lefrCorrectionTableCbkType, + &lefData->lefrCorrectionTable); + } else + if (lefCallbacks->CorrectionTableCbk) // write warning only if cbk is set + if (lefData->correctionTableWarnings++ < lefSettings->CorrectionTableWarnings) + lefWarning(2075, "CORRECTIONTABLE statement is obsolete in version 5.4 and later.\nThe LEF parser will ignore this statement.\nTo avoid this warning in the future, remove this statement from the LEF file with version 5.4 or later."); + } + +correction_table_list: + correction_table_item + | correction_table_list correction_table_item + ; + +correction_table_item: + K_EDGERATE int_number ';' + { if (lefCallbacks->CorrectionTableCbk) + { + lefData->lefrCorrectionTable.newEdge(); + lefData->lefrCorrectionTable.addEdge($2); + } + } + | output_list + { } + +output_list: K_OUTPUTRESISTANCE + { if (lefCallbacks->CorrectionTableCbk) + lefData->lefrCorrectionTable.addResistance(); } + numo_list ';' corr_victim_list + { } + +numo_list: + int_number + { if (lefCallbacks->CorrectionTableCbk) + lefData->lefrCorrectionTable.addResistanceNumber($1); } + | numo_list int_number + { if (lefCallbacks->CorrectionTableCbk) + lefData->lefrCorrectionTable.addResistanceNumber($2); } + +corr_victim_list: + corr_victim + | corr_victim_list corr_victim + ; + +corr_victim: + K_VICTIMLENGTH int_number ';' + { if (lefCallbacks->CorrectionTableCbk) + lefData->lefrCorrectionTable.addVictimLength($2); } + K_CORRECTIONFACTOR corr_list ';' + { } + +corr_list: + int_number + { if (lefCallbacks->CorrectionTableCbk) + lefData->lefrCorrectionTable.addVictimCorrection($1); } + | corr_list int_number + { if (lefCallbacks->CorrectionTableCbk) + lefData->lefrCorrectionTable.addVictimCorrection($2); } + +// end of 5.4 obsolete syntax + +input_antenna: K_INPUTPINANTENNASIZE int_number ';' + { // 5.3 syntax + lefData->use5_3 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum > 5.3) { + // A 5.3 syntax in 5.4 + if (lefData->use5_4) { + if (lefCallbacks->InputAntennaCbk) { // write warning only if cbk is set + if (lefData->inputAntennaWarnings++ < lefSettings->InputAntennaWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "INPUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new INPUTPINANTENNASIZE syntax, which is incorrect.", lefData->versionNum); + lefError(1671, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + if (lefCallbacks->InputAntennaCbk) + CALLBACK(lefCallbacks->InputAntennaCbk, lefrInputAntennaCbkType, $2); + } + +output_antenna: K_OUTPUTPINANTENNASIZE int_number ';' + { // 5.3 syntax + lefData->use5_3 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum > 5.3) { + // A 5.3 syntax in 5.4 + if (lefData->use5_4) { + if (lefCallbacks->OutputAntennaCbk) { // write warning only if cbk is set + if (lefData->outputAntennaWarnings++ < lefSettings->OutputAntennaWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "OUTPUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new OUTPUTPINANTENNASIZE syntax, which is incorrect.", lefData->versionNum); + lefError(1672, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + if (lefCallbacks->OutputAntennaCbk) + CALLBACK(lefCallbacks->OutputAntennaCbk, lefrOutputAntennaCbkType, $2); + } + +inout_antenna: K_INOUTPINANTENNASIZE int_number ';' + { // 5.3 syntax + lefData->use5_3 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum > 5.3) { + // A 5.3 syntax in 5.4 + if (lefData->use5_4) { + if (lefCallbacks->InoutAntennaCbk) { // write warning only if cbk is set + if (lefData->inoutAntennaWarnings++ < lefSettings->InoutAntennaWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "INOUTPINANTENNASIZE statement is a version 5.3 or earlier syntax.\nYour lef file with version %g, has both old and new INOUTPINANTENNASIZE syntax, which is incorrect.", lefData->versionNum); + lefError(1673, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + } + if (lefCallbacks->InoutAntennaCbk) + CALLBACK(lefCallbacks->InoutAntennaCbk, lefrInoutAntennaCbkType, $2); + } + +antenna_input: K_ANTENNAINPUTGATEAREA NUMBER ';' + { // 5.4 syntax + // 11/12/2002 - this is obsolete in 5.5, suppose should be ingored + // 12/16/2002 - talked to Dave Noice, leave them in here for debugging + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->AntennaInputCbk) { // write warning only if cbk is set + if (lefData->antennaInputWarnings++ < lefSettings->AntennaInputWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAINPUTGATEAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number or use the 5.3 syntax.", lefData->versionNum); + lefError(1674, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->AntennaInputCbk) { // write warning only if cbk is set + if (lefData->antennaInputWarnings++ < lefSettings->AntennaInputWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAINPUTGATEAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAINPUTGATEAREA syntax, which is incorrect.", lefData->versionNum); + lefError(1675, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->AntennaInputCbk) + CALLBACK(lefCallbacks->AntennaInputCbk, lefrAntennaInputCbkType, $2); + } + +antenna_inout: K_ANTENNAINOUTDIFFAREA NUMBER ';' + { // 5.4 syntax + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + // 12/16/2002 - talked to Dave Noice, leave them in here for debugging + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->AntennaInoutCbk) { // write warning only if cbk is set + if (lefData->antennaInoutWarnings++ < lefSettings->AntennaInoutWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAINOUTDIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number or use the 5.3 syntax.", lefData->versionNum); + lefError(1676, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->AntennaInoutCbk) { // write warning only if cbk is set + if (lefData->antennaInoutWarnings++ < lefSettings->AntennaInoutWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAINOUTDIFFAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAINOUTDIFFAREA syntax, which is incorrect.", lefData->versionNum); + lefError(1677, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->AntennaInoutCbk) + CALLBACK(lefCallbacks->AntennaInoutCbk, lefrAntennaInoutCbkType, $2); + } + +antenna_output: K_ANTENNAOUTPUTDIFFAREA NUMBER ';' + { // 5.4 syntax + // 11/12/2002 - this is obsolete in 5.5, & will be ignored + // 12/16/2002 - talked to Dave Noice, leave them in here for debugging + lefData->use5_4 = 1; + if (lefData->ignoreVersion) { + // do nothing + } else if (lefData->versionNum < 5.4) { + if (lefCallbacks->AntennaOutputCbk) { // write warning only if cbk is set + if (lefData->antennaOutputWarnings++ < lefSettings->AntennaOutputWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAOUTPUTDIFFAREA statement is a version 5.4 and later syntax.\nYour lef file is defined with version %g.\nEither update your VERSION number or use the 5.3 syntax.", lefData->versionNum); + lefError(1678, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } else if (lefData->use5_3) { + if (lefCallbacks->AntennaOutputCbk) { // write warning only if cbk is set + if (lefData->antennaOutputWarnings++ < lefSettings->AntennaOutputWarnings) { + lefData->outMsg = (char*)lefMalloc(10000); + sprintf (lefData->outMsg, + "ANTENNAOUTPUTDIFFAREA statement is a version 5.4 or later syntax.\nYour lef file with version %g, has both old and new ANTENNAOUTPUTDIFFAREA syntax, which is incorrect.", lefData->versionNum); + lefError(1679, lefData->outMsg); + lefFree(lefData->outMsg); + CHKERR(); + } + } + } + if (lefCallbacks->AntennaOutputCbk) + CALLBACK(lefCallbacks->AntennaOutputCbk, lefrAntennaOutputCbkType, $2); + } + +extension_opt: // empty + | extension + +extension: K_BEGINEXT + { + if (lefCallbacks->ExtensionCbk) + CALLBACK(lefCallbacks->ExtensionCbk, lefrExtensionCbkType, &lefData->Hist_text[0]); + if (lefData->versionNum >= 5.6) + lefData->ge56almostDone = 1; + } + +%% + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/lef/lef/lef_keywords.cpp b/lefdef/src/lef/lef/lef_keywords.cpp new file mode 100644 index 00000000..c7fc8712 --- /dev/null +++ b/lefdef/src/lef/lef/lef_keywords.cpp @@ -0,0 +1,2109 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lefiDefs.hpp" +#include "lefiDebug.hpp" +#include "lefrReader.hpp" +#include "lefrData.hpp" +#include "lefrCallBacks.hpp" +#include "lefrSettings.hpp" +#include "crypt.hpp" +#include "lex.h" + +#ifdef WIN32 +# include +#else // not WIN32 +# include +#endif // WIN32 + +#include "lefrData.hpp" + +using namespace std; + +BEGIN_LEFDEF_PARSER_NAMESPACE + +#include "lef.tab.h" + +extern YYSTYPE lefyylval; + + +inline string +strip_case(const char *str) +{ + string result(str); + + if (lefData->namesCaseSensitive) { + return result; + }; + + for (string::iterator p = result.begin(); result.end() != p; ++p) { + *p = toupper(*p); + } + + return result; +} + + +inline +int lefGetKeyword(const char* name, int *result) +{ + map::iterator search = lefSettings->Keyword_set.find(name); + if ( search != lefSettings->Keyword_set.end()) { + *result = search->second; + return TRUE; + } + + return FALSE; +} + + +inline int +lefGetStringDefine(const char* name, const char** value) +{ + map::iterator search = lefData->defines_set.find(strip_case(name)); + + if ( search != lefData->defines_set.end()) { + *value = search->second.c_str(); + return TRUE; + } + return FALSE; +} + + +inline int +lefGetIntDefine(const char* name, int* value) +{ + map::iterator search = lefData->defineb_set.find(strip_case(name)); + + if ( search != lefData->defineb_set.end()) { + *value = search->second; + return TRUE; + } + return FALSE; +} + + +inline int +lefGetDoubleDefine(const char* name, double* value) +{ + map::iterator search = lefData->define_set.find(strip_case(name)); + + if ( search != lefData->define_set.end()) { + *value = search->second; + return TRUE; + } + return FALSE; +} + + +inline int +lefGetAlias(const char* name, const char** value) +{ + map::iterator search = lefData->alias_set.find(strip_case(name)); + + if ( search != lefData->alias_set.end()) { + *value = search->second.c_str(); + return TRUE; + } + return FALSE; +} + + +#define yyparse lefyyparse +#define yylex lefyylex +#define yyerror lefyyerror +#define yylval lefyylval +#define yychar lefyychar +#define yydebug lefyydebug +#define yynerrs lefyynerrs + +// lef.cpph starts here. + +// variable to count number of warnings + +// 12/08/1999 -- Wanda da Rosa +// file pointer to the lefRWarning.log + +extern char *lef_kywd(int num); + +// User defined if log file should be in append from the previous run + +// User defined if property string value should be process + +// Varible from lex.cpph to keep track of invalid nonEnglish character +// in lef file + +void +lefReloadBuffer() +{ + int nb; + + nb = 0; + + if (lefData->first_buffer) { + lefData->first_buffer = 0; + if (lefSettings->ReadFunction) { + if ((nb = (*lefSettings->ReadFunction)(lefData->lefrFile, lefData->current_buffer, 4)) != 4) { + lefData->next = NULL; + return; + } + } else { + if ((nb = fread(lefData->current_buffer, 1, 4, lefData->lefrFile)) != 4) { + lefData->next = NULL; + return; + } + } + lefData->encrypted = encIsEncrypted((unsigned char*) lefData->current_buffer); + } + + if (lefData->encrypted) { + int i; + int c; + + if (lefSettings->ReadEncrypted) { + // is encrypted file and user has set the enable flag to read one + for (i = 0; i < IN_BUF_SIZE; i++) { + if ((c = encFgetc(lefData->lefrFile)) == EOF) { + break; + } + lefData->current_buffer[i] = c; + } + nb = i; + } else { // an encrypted file, but user does not allow to read one + printf("File is an encrypted file, reader is not set to read one.\n"); + return; + } + } else if (nb == 0) { + if (lefSettings->ReadFunction) + nb = (*lefSettings->ReadFunction)(lefData->lefrFile, lefData->current_buffer, IN_BUF_SIZE); + else + // This is a normal file so just read some bytes. + nb = fread(lefData->current_buffer, 1, IN_BUF_SIZE, lefData->lefrFile); + } + + if (nb <= 0) { + lefData->next = NULL; + } else { + lefData->next = lefData->current_buffer; + lefData->last = lefData->current_buffer + nb - 1; + } +} + +int +lefGetc() +{ + if (lefData->input_level >= 0) { // Token has been getting from + const char *ch, *s; + s = ch = lefData->current_stack[lefData->input_level]; + lefData->current_stack[lefData->input_level] = ++s; + return *ch; + } + + // Remove '\r' symbols from Windows streams. + for (;;) { + if (lefData->next > lefData->last) + lefReloadBuffer(); + if (lefData->next == NULL) + return EOF; + + int ch = *lefData->next++; + + if (ch != '\r') + return ch; + } +} + +void +UNlefGetc(char ch) +{ + if ((lefData->next <= lefData->current_buffer) || (lefData->input_level > 0)) { + lefError(1111, "UNlefGetc: buffer access violation."); + } else { + *(--lefData->next) = ch; + } +} + + +// The following two variables are for communicating with the parser +/* Return a copy of the string allocated from the lefData->ring buffer. + * We will keep several strings in the buffer and just reuse them. + * This could cause problems if we need to use more strings than we + * have in the buffer. + */ +static char * +ringCopy(const char *string) +{ + int len = strlen(string) + 1; + if (++lefData->ringPlace >= RING_SIZE) + lefData->ringPlace = 0; + if (len > lefData->ringSizes[lefData->ringPlace]) { + lefData->ring[lefData->ringPlace] = (char*) lefRealloc(lefData->ring[lefData->ringPlace], len); + lefData->ringSizes[lefData->ringPlace] = len; + } + strcpy(lefData->ring[lefData->ringPlace], string); + return lefData->ring[lefData->ringPlace]; +} + +char * +qStrCopy(char *string) +{ + int len = strlen(string) + 3; + char *retStr; + + retStr = (char*) lefMalloc(len); + sprintf(retStr, "\"%s\"", string); + return retStr; +} + + +/* NOTE: we don't allocate these tables until they are used. The reason + * we don't allocate at the beginning of the program is that we don't know + * at that point if we should be case sensitive or not. */ + +void +lefAddStringDefine(const char *token, const char *str) +{ + string tmpStr((lefData->lefDefIf == TRUE) ? "" : "\""); + + tmpStr += str; + + lefData->defines_set[strip_case(token)] = tmpStr; + lefData->lefDefIf = FALSE; + lefData->inDefine = 0; +} + + +void +lefAddBooleanDefine(const char *token, int val) +{ + lefData->defineb_set[strip_case(token)] = val; +} + + +void +lefAddNumDefine(const char *token, double val) +{ + lefData->define_set[strip_case(token)] = val; +} + + +static int +GetTokenFromStack(char *s) +{ + const char *ch; // utility variable + char *prS = NULL; // pointing to the previous char or s + char *save = s; // for debug printing + + while (lefData->input_level >= 0) { + for (ch = lefData->current_stack[lefData->input_level]; *ch != 0; ch++) // skip white space + if (*ch != ' ' && *ch != '\t' && (lefData->lefNlToken || *ch != '\n')) + break; + // did we find anything? If not, decrement level and try again + if (*ch == 0) + lefData->input_level--; + else if (*ch == '\n') { + *s++ = *ch; + *s = 0; + if (lefData->lefDebug[11]) + printf("Stack[%d] Newline token\n", lefData->input_level); + return TRUE; + } else { // we found something + for (; ; ch++) { + if (*ch == ' ' || *ch == '\t' || *ch == '\n' || *ch == 0) { + /* 10/10/2000 - Wanda da Rosa, pcr 341032 + ** Take out the lefData->last '"', the 1st will be skip later + */ + if (*prS == '"') { + *prS = '\0'; + } else + *s++ = '\0'; + lefData->current_stack[lefData->input_level] = ch; + if (lefData->lefDebug[11]) + printf("Stack[%d]: <%s>, dm=%d\n", + lefData->input_level, save, lefData->lefDumbMode); + return TRUE; + } + /* 10/10/2000 - Wanda da Rosa, pcr 341032 + ** Save the location of the previous s + */ + prS = s; + *s++ = *ch; + } + } + } + return FALSE; // if we get here, we ran out of input levels +} + + +// Increment current position of buffer pointer. +// Double buffer size if curPos is out of boundary. +static inline void +IncCurPos(char **curPos, char **buffer, int *bufferSize) +{ + (*curPos)++; + if (*curPos - *buffer < *bufferSize) { + return; + } + + long offset = *curPos - *buffer; + + *bufferSize *= 2; + *buffer = (char*) realloc(*buffer, *bufferSize); + *curPos = *buffer + offset; +} + + +inline static void +print_nlines(int lineNum) +{ + // call the callback line number function if it is set + if (lefSettings->LineNumberFunction && + (lineNum % lefSettings->DeltaNumberLines) == 0) + lefSettings->LineNumberFunction(lineNum); +} + + +static int +GetToken(char **buffer, int *bufferSize) +{ + char *s = *buffer; + int ch; + + lefData->lef_ntokens++; + lefData->lefInvalidChar = 0; + + if (lefData->input_level >= 0) { // if we are expanding an alias + if (GetTokenFromStack(s)) // try to get a token from it + return TRUE; // if we get one, return it + } // but if not, continue + + // skip blanks and count lines + while ((ch = lefGetc()) != EOF) { + // check if the file is encrypted and user allows to read + if (lefData->encrypted && !lefSettings->ReadEncrypted) + ch = EOF; + if (ch == '\n') { + print_nlines(++lefData->lef_nlines); + } + if (ch != ' ' && ch != '\t' && (lefData->lefNlToken || ch != '\n')) + break; + } + + if (ch == EOF) + return FALSE; + + if (ch == '\n') { + *s = ch; + IncCurPos(&s, buffer, bufferSize); + + *s = '\0'; + if (lefData->lefDebug[11]) + printf("Newline token\n"); + return TRUE; + } + + // now get the token + if (ch == '"') { + do { + /* 5/6/2008 - CCR 556818 + ** Check if the ch is a valid ascii character 0 =< ch < 128 + ** If not write out an error + */ + /* 8/7/2008 - CCR 586175 + ** Some files may not end with \n or \0 or EOF as the lefData->last character + ** The parser allows this char instead of error out + */ + if ((ch < -1) || (ch > 127)) { + lefData->lefInvalidChar = 1; + } + + /* 8/22/2000 - Wanda da Rosa, pcr 333334 + ** save the previous char to allow backslash quote within quote + */ + if (!lefSettings->DisPropStrProcess) { + // 3/4/2008 - CCR 523879 - convert \\ to \, \" to ", \x to x + if (ch == '\\') { // got a \, save the lefData->next char only + ch = lefGetc(); + + if ((ch == '\n') || (ch == EOF)) { + *s = '\0'; + lefError(6015, "Unexpected end of the LEF file."); + lefData->hasFatalError = 1; + return FALSE; + } + } + } + + // 5/5/2004 - pcr 704784 + // If name, or quote string is longer than current buffer size + // increase the buffer. + *s = ch; + IncCurPos(&s, buffer, bufferSize); + + ch = lefGetc(); + + // 7/23/2003 - pcr 606558 - do not allow \n in a string instead + // of ; + if ((ch == '\n') ) { + print_nlines(++lefData->lef_nlines); + // 2/2/2007 - PCR 909714, allow string to go more than 1 line + // continue to parse + } + + if (ch == EOF) { + *s = '\0'; + lefError(6015, "Unexpected end of the LEF file."); + lefData->hasFatalError = 1; + return FALSE; + } + } while (ch != '"'); + *s = '\0'; + /* 10/31/2006 - pcr 926068 + ** When it reaches to here, chances are it reaches the end ". + ** Check if there is a space following the " + */ + if (ch == '"') { + ch = lefGetc(); + if (ch != ' ' && ch != EOF) { + UNlefGetc(ch); + lefData->spaceMissing = 1; + return FALSE; + } + UNlefGetc(ch); + } + return TRUE; + } + + if (lefData->namesCaseSensitive) { + for (; ; ch = lefGetc()) { + /* 5/6/2008 - CCR 556818 + ** Check if the ch is a valid ascii character 0 =< ch < 128 + ** If not write out an error + */ + if ((ch < -1) || (ch > 127)) { + lefData->lefInvalidChar = 1; + } + + if (ch == ' ' || ch == '\t' || ch == '\n' || ch == EOF) + break; + + *s = ch; + IncCurPos(&s, buffer, bufferSize); + } + } else if (lefSettings->ShiftCase) { // we are case insensitive, use a different loop + for (; ; ch = lefGetc()) { + /* 5/6/2008 - CCR 556818 + ** Check if the ch is a valid ascii character 0 =< ch < 128 + ** If not write out an error + */ + if ((ch < -1) || (ch > 127)) { + lefData->lefInvalidChar = 1; + } + + if (ch == ' ' || ch == '\t' || ch == '\n' || ch == EOF) + break; + + *s = (ch >= 'a' && ch <= 'z')? (ch - 'a' + 'A') : ch; + IncCurPos(&s, buffer, bufferSize); + } + } else { + for (; ; ch = lefGetc()) { + /* 5/6/2008 - CCR 556818 + ** Check if the ch is a valid ascii character 0 =< ch < 128 + ** If not write out an error + */ + if ((ch < -1) || (ch > 127)) { + lefData->lefInvalidChar = 1; + } + + if (ch == ' ' || ch == '\t' || ch == '\n' || ch == EOF) + break; + + *s = ch; + IncCurPos(&s, buffer, bufferSize); + } + } + + // If we got this far, the lefData->last char was whitespace + *s = '\0'; + if (ch != EOF) // shouldn't ungetc an EOF + UNlefGetc(ch); + return TRUE; +} + +// creates an upper case copy of an array +void +lefuc_array(char *source, + char *dest) +{ + for (; *source != 0; ) + *dest++ = toupper(*source++); + *dest = 0; +} + +void lefError(int msgNum, + const char *s); + +void +lefStoreAlias() +{ + string so_far; // contains alias contents as we build it + + int tokenSize = 10240; + char *aname = (char*)malloc(tokenSize); + + GetToken(&aname, &tokenSize); + + char *line = (char*) malloc(tokenSize); + + GetToken(&line, &tokenSize); // should be "=" + + char *uc_line = (char*)malloc(tokenSize); + + if (strcmp(line, "=") != 0) + lefError(1000, "Expecting '='"); + + /* now keep getting lines till we get one that contains &ENDALIAS */ + for(char *p = NULL; p == NULL;){ + int i; + char *s = line; + for(i=0;ilef_nlines); + break; + } + } + + *s = '\0'; + lefuc_array(line, uc_line); // make upper case copy + p = strstr(uc_line, "&ENDALIAS"); // look for END_ALIAS + + if (p != NULL) // if we find it + *(line + (p - uc_line)) = 0; // remove it from the line + + so_far += line; + } + + char *dup = (char*)malloc(strlen(so_far.c_str()) + 1); + + strcpy(dup, so_far.c_str()); + lefData->alias_set[strip_case(aname)] = dup; + + + free(aname); + free(line); + free(uc_line); +} + +int lefamper_lookup(char *token); // forward reference to this routine + +/* The main routine called by the YACC parser to get the lefData->next token. + * Returns 0 if no more tokens are available. + * Returns an integer for keywords (see the yacc_defines.h for values) + * Returns the character itself for punctuation + * Returns NUMBER for numeric looking tokens + * Returns T_STRING for anything else + * If the global "lefData->lefDumbMode" is > 0, it reads the lefData->next token in "dumb mode". + * In this case, it does not do keyword lookup, or attempt to read a token + * as a number; if the token is not punctuation, it's a T_STRING. Each token + * read decrements lefData->lefDumbMode, so you can instruct the the lexer to read the + * lefData->next N tokens in dumb mode by setting "lefData->lefDumbMode" to that value. + * + * Newlines are in general silently ignored. If the global lefData->lefNlToken is + * true, however, they are returned as the token K_NL. + */ +extern int lefsublex(); + +int +yylex() +{ + int v = lefsublex(); + + if (lefData->lefDebug[13]) { + if (v == 0) { + printf("yylex NIL\n"); + } else if (v < 256) { + printf("yylex char %c\n", v); + } else if (v == QSTRING) { + printf("yylex quoted string '%s'\n", yylval.string); + } else if (v == T_STRING) { + printf("yylex string '%s'\n", yylval.string); + } else if (v == NUMBER) { + printf("yylex number %f\n", yylval.dval); + } else { + printf("yylex keyword %s\n", lef_kywd(v)); + } + } + + // At 5.6, lefData->doneLib is always true, since "END LIBRARY" is optional + if ((v == 0) && (!lefData->doneLib)) { + if (!lefData->spaceMissing) { + lefError(1002, "Incomplete lef file."); + lefData->hasFatalError = 1; + } + + return (-1); + } + + return v; +} + +int +lefsublex() +{ + + char fc; + //double numVal; + char *outStr; + + strcpy(lefData->pv_token, lefData->current_token); // save the previous token + + /* First, we eat all the things the parser should be unaware of. + * This includes: + * a) Comments + * b) &alias definitions + * c) &alias expansions + */ + + for (; ; ) { + if (!GetToken(&lefData->current_token, &lefData->tokenSize)) // get a raw token + return 0; + + // Token size can change. Do preventive re-alloc. + lefData->uc_token = (char*) realloc(lefData->uc_token, lefData->tokenSize); + lefData->pv_token = (char*) realloc(lefData->pv_token, lefData->tokenSize); + + fc = lefData->current_token[0]; + + /* lefData->first, check for comments or &alias statements. Comments we + * ignore, and &alias statements are eaten and recorded by the lexer. + */ + if (fc == lefSettings->CommentChar) { + for (fc = lefGetc(); ; fc = lefGetc()) {// so skip to the end of line + if (fc == EOF) + return 0; + if (fc == '\n') { + print_nlines(++lefData->lef_nlines); + break; + } + } + } else if (fc == '&') { + // begins with &. If &alias, read contents and + // store them. Otherwise it's a define, or a macro use. + const char *cptr; + lefuc_array(lefData->current_token, lefData->uc_token); + if (strcmp(lefData->uc_token, "&ALIAS") == 0) + lefStoreAlias(); // read and store the alias + else if (strncmp(lefData->uc_token, "&DEFINE", 7) == 0) { + lefData->inDefine = 1; // it is a define statement + break; + } else if (lefGetAlias(lefData->current_token, &cptr)) + lefData->current_stack[++lefData->input_level] = cptr; + else if (lefGetStringDefine(lefData->current_token, &cptr) && !lefData->inDefine) + lefData->current_stack[++lefData->input_level] = cptr; + else + break; // begins with &, but not an &alias defn. or use. + } else + break; // does not begin with CommentChar or '&' + } + + if (lefData->lefInvalidChar) { + outStr = (char*) lefMalloc(500 + strlen(lefData->current_token)); + sprintf(outStr, "Invalid characters found in \'%s\'.\nThese characters might have created by character types other than English.", + lefData->current_token); + lefError(1008, outStr); + lefFree(outStr); + return 0; + } + + if (lefData->ge56almostDone && (strcmp(lefData->current_token, "END") == 0)) { + // Library has BEGINEXT and also end with END LIBRARY + // Use END LIBRARY to indicate the end of the library + lefData->ge56almostDone = 0; + } + + if ((lefData->doneLib && lefData->versionNum < 5.6) || // END LIBRARY is passed for pre 5.6 + (lefData->ge56almostDone && (strcmp(lefData->current_token, "END"))) || // after EXT, not + // follow by END + (lefData->ge56done)) { // END LIBRARY is passed for >= 5.6 + fc = EOF; + lefInfo(3000, "There are still data after the END LIBRARY"); + return 0; + } + + if (fc == '\"') { + yylval.string = ringCopy(&(lefData->current_token[1])); + return QSTRING; + } + + // at this point we've read a token + // printf("Token is %s\n", token); + lefData->lefDumbMode--; + lefData->lefNoNum--; + if (isdigit(fc) || fc == '.' || (fc == '-' && lefData->current_token[1] != '\0')) { + char *ch; + //numVal = + yylval.dval = strtod(lefData->current_token, &ch); + if (lefData->lefNoNum < 0 && *ch == '\0') { // did we use the whole string? + return NUMBER; + } else { // failed integer conversion, try floating point + yylval.string = ringCopy(lefData->current_token); // NO, it's a string + return T_STRING; + } + } + + // 5/17/2004 - Special checking for nondefaultrule + if (lefData->lefNdRule && (strcmp(lefData->current_token, "END") != 0)) { + if (strcmp(lefData->current_token, lefData->ndName) == 0) { + yylval.string = ringCopy(lefData->current_token); // a nd rule name + return T_STRING; + } else { + // Can be NONDEFAULTRULE END without name, this case, string + // should be a reserve word or name is incorrect + // lefData->first check if it is a reserve word + lefData->lefDumbMode = -1; + } + } + // if we are dumb mode, all we return is punctuation and strings & numbers + // until we see the lefData->next '+' or ';' token + if (lefData->lefDumbMode >= 0) { + if (lefData->current_token[1] == '\0' && (fc == '(' || fc == ')' || fc == '+' || fc == ';' || fc == '*')) { + if (fc == ';' || fc == '+') + lefData->lefDumbMode = 0; + return (int) fc; + } + if (lefData->lefNewIsKeyword && strcmp(lefData->current_token, "NEW") == 0) { + return K_NEW; // even in dumb mode, we must see the NEW token + } + yylval.string = ringCopy(lefData->current_token); + // 5/17/2004 - Special checking for nondefaultrule + if (lefData->lefNdRule) { + if (strcmp(lefData->current_token, lefData->ndName) == 0) + return T_STRING; + else { + // Can be NONDEFAULTRULE END without name, this case, string + // should be a reserve word or name is incorrect + // lefData->first check if it is a reserve word + } + } + return T_STRING; + } + + // if we get here we are in smart mode. Parse token + if (isalpha(fc) || fc == '&' || fc == '_') { + int result; + char *ch, *uch; + + for (ch = lefData->current_token, uch = lefData->uc_token; *ch != '\0'; ch++) + *uch++ = toupper(*ch); + *uch = '\0'; + + lefData->Hist_text.resize(0); + + if (lefGetKeyword(lefData->uc_token, &result)) { + if (K_HISTORY == result) { // history - get up to ';' + int c; + int prev; + prev = ' '; + for (; ; ) { + c = lefGetc(); + + if (c == EOF) { + lefError(6015, "Unexpected end of the LEF file."); + lefData->hasFatalError = 1; + break; + } + + if (c == ';' && + (prev == ' ' || prev == '\t' || prev == '\n')) + break; + if (c == '\n') { + // call the callback line number function if it is set + print_nlines(++lefData->lef_nlines); + } + prev = c; + lefData->Hist_text.push_back(c); + } + lefData->Hist_text.push_back('\0'); + } else if (K_BEGINEXT == result) { // extension, get up to end + int cc; + int foundTag = 0; + int notEmpTag = 0; + int begQuote = 0; + // First make sure there is a name after BEGINEXT within quote + // BEGINEXT "name" + for (cc = lefGetc(); ; cc = lefGetc()) { + if (cc == EOF) + break; // lef file may not have END LIB + if (cc == '\n') { + if (!foundTag) { + lefError(1003, "tag is missing for BEGINEXT"); + break; + } + } else { + // Make sure the tag is quoted + lefData->Hist_text.push_back(cc); + if (cc != ' ') { + if (cc == '\"') { // found a quote + if (!begQuote) + begQuote = 1; + else if (notEmpTag) { + foundTag = 1; + break; // Found the quoted tag + } else { + lefError(1004, "Tag for BEGINEXT is empty"); + break; + } + } else if (!begQuote) { // anything but a quote + lefError(1005, "\" is missing in tag"); + break; + } else // anything but a quote and there + notEmpTag = 1; // is already a quote + } + } + } + if (foundTag) { + // We have handle with the tag, just read the rest until + // ENDEXT + begQuote = 0; + for (cc = lefGetc(); ; cc = lefGetc()) { + if (cc == EOF) + break; // lef file may not have END LIB + if (cc == '\n') { + // call the callback line number function if it is set + print_nlines(++lefData->lef_nlines); + } else if (cc == '\"') { + if (!begQuote) + begQuote = 1; + else + begQuote = 0; + } + lefData->Hist_text.push_back(cc); + int histTextSize = lefData->Hist_text.size(); + + if (histTextSize >= 6 && memcmp(&lefData->Hist_text[histTextSize - 6 ], "ENDEXT", 6) == 0) { + if (begQuote) + lefError(1006, "Ending \" is missing"); + break; + } else if (histTextSize >= 11 && memcmp(&lefData->Hist_text[histTextSize - 11 ], "END LIBRARY", 11) == 0) { + lefError(1007, "ENDEXT is missing"); + return 1; + } + } + } + lefData->Hist_text.push_back('\0'); + } + return result; // YES, return its value + } else { // we don't have a keyword. + if (fc == '&') + return lefamper_lookup(lefData->current_token); + yylval.string = ringCopy(lefData->current_token); // NO, it's a string + return T_STRING; + } + } else { // it should be a punctuation character + if (lefData->current_token[1] != '\0') { + if (strcmp(lefData->current_token, ">=") == 0) + return K_GE; + if (strcmp(lefData->current_token, "<=") == 0) + return K_LE; + if (strcmp(lefData->current_token, "<>") == 0) + return K_NE; + if (lefData->current_token[0] == ';') { // we got ';TOKEN' which is not allowed by + //';' cannot be attached to other tokens. + lefError(1009, "Symbol ';' should be separated by space(s)."); + return 0; + // strcpy(saved_token, &token[1]); // the standard syntax, but + // stack[++lefData->input_level] = saved_token; // C3 and GE support. + } else if (lefData->current_token[0] == '_') {// name starts with _, return as T_STRING + yylval.string = ringCopy(lefData->current_token); + return T_STRING; + } else { + lefError(6016, "Odd punctuation found."); + lefData->hasFatalError = 1; + return 0; + } + } else if (strlen(lefData->current_token) > 2 + || strlen(lefData->current_token) == 0) { + lefError(6016, "Odd punctuation found."); + lefData->hasFatalError = 1; + return 0; + } + return (int) lefData->current_token[0]; + } +} + +/* We have found a token beginning with '&'. If it has been previously + defined, substitute the definition. Otherwise return it. */ +int +lefamper_lookup(char *tkn) +{ + double dptr; + int result; + const char *cptr; + + // printf("Amper_lookup: %s\n", tkn); + + // &define returns a number + if (lefGetDoubleDefine(tkn, &dptr)) { + yylval.dval = dptr; + return NUMBER; + } + // &defineb returns TRUE or FALSE, encoded as K_TRUE or K_FALSE + if (lefGetIntDefine(tkn, &result)) + return result; + // &defines returns a T_STRING + if (lefGetStringDefine(tkn, &cptr)) { + if (lefGetKeyword(cptr, &result)) + return result; + yylval.string = ringCopy(cptr); + return (cptr[0] == '\"' ? QSTRING : T_STRING); + } + // if none of the above, just return the token. + yylval.string = ringCopy(tkn); + return T_STRING; +} + +void +lefError(int msgNum, + const char *s) +{ + char *str; + const char *curToken = isgraph(lefData->current_token[0]) ? lefData->current_token + : ""; + const char *pvToken = isgraph(lefData->pv_token[0]) ? lefData->pv_token + : ""; + int len = strlen(curToken) - 1; + int pvLen = strlen(pvToken) - 1; + + if (lefData->hasFatalError) + return; + if ((lefSettings->TotalMsgLimit > 0) && (lefData->lefErrMsgPrinted >= lefSettings->TotalMsgLimit)) + return; + if (lefSettings->MsgLimit[msgNum] > 0) { + if (lefData->msgLimit[0][msgNum] >= lefSettings->MsgLimit[msgNum]) // over the limit + return; + lefData->msgLimit[0][msgNum] = lefData->msgLimit[0][msgNum] + 1; + } + + // PCR 690679, probably missing space before a ';' + if (strcmp(s, "parse error") == 0) { + if ((len > 1) && (lefData->current_token[len] == ';')) { + str = (char*) lefMalloc(len + strlen(s) + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): %s, see file %s at line %d\nLast token was <%s>, space is missing before <;>\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines, curToken); + } else if ((pvLen > 1) && (lefData->pv_token[pvLen] == ';')) { + str = (char*) lefMalloc(pvLen + strlen(s) + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): %s, see file %s at line %d\nLast token was <%s>, space is missing before <;>\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines - 1, pvToken); + } else if ((lefData->current_token[0] == '"') && (lefData->spaceMissing)) { + // most likely space is missing after the end " + str = (char*) lefMalloc(len + strlen(s) + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): %s, see file %s at line %d\nLast token was <%s\">, space is missing between the closing \" of the string and ;.\n", + 1010, s, lefData->lefrFileName, lefData->lef_nlines, curToken); + lefData->spaceMissing = 0; + } else { + str = (char*) lefMalloc(len + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): Lef parser has encountered an error in file %s at line %d, on token %s.\nProblem can be syntax error on the lef file or an invalid parameter name.\nDouble check the syntax on the lef file with the LEFDEF Reference Manual.\n", + msgNum, lefData->lefrFileName, lefData->lef_nlines, curToken); + } + } else if (strcmp(s, "syntax error") == 0) { // linux machines + if ((len > 1) && (lefData->current_token[len] == ';')) { + str = (char*) lefMalloc(len + strlen(s) + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): %s, see file %s at line %d\nLast token was <%s>, space is missing before <;>\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines, curToken); + } else if ((pvLen > 1) && (lefData->pv_token[pvLen] == ';')) { + str = (char*) lefMalloc(pvLen + strlen(s) + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): %s, see file %s at line %d\nLast token was <%s>, space is missing before <;>\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines - 1, pvToken); + } else if ((lefData->current_token[0] == '"') && (lefData->spaceMissing)) { + // most likely space is missing after the end " + str = (char*) lefMalloc(len + strlen(s) + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): %s, see file %s at line %d\nLast token was <%s\">, space is missing between the closing \" of the string and ;.\n", + 1011, s, lefData->lefrFileName, lefData->lef_nlines, curToken); + lefData->spaceMissing = 0; + } else { + str = (char*) lefMalloc(len + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): Lef parser has encountered an error in file %s at line %d, on token %s.\nProblem can be syntax error on the lef file or an invalid parameter name.\nDouble check the syntax on the lef file with the LEFDEF Reference Manual.\n", + msgNum, lefData->lefrFileName, lefData->lef_nlines, curToken); + } + } else { + str = (char*) lefMalloc(len + strlen(s) + strlen(lefData->lefrFileName) + 350); + sprintf(str, "ERROR (LEFPARS-%d): %s Error in file %s at line %d, on token %s.\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines, curToken); + } + fflush(stdout); + lefiError(1, msgNum, str); + free(str); + lefData->lefErrMsgPrinted++; + // Not really error, error numbers between 1300 & 1499, those errors + // are not from lef.y or the parser + if ((msgNum < 1300) || (msgNum > 1499)) + lefData->lef_errors++; +} + +// yyerror is called by bison.simple, 5 locations will call this function +void +yyerror(const char *s) +{ + + lefError(lefData->msgCnt++, s); +} + +// All info starts with 3000 +// All info within lefInfo starts with 3500 +void +lefInfo(int msgNum, + const char *s) +{ + int disableStatus = lefSettings->suppresMsg(msgNum); + + if (disableStatus == 1) { + char msgStr[60]; + sprintf(msgStr, "Message (LEFPARS-%d) has been suppressed from output.", msgNum); + lefWarning(2502, msgStr); + return; + } else if (disableStatus == 2) { + return; + } + + if ((lefSettings->TotalMsgLimit > 0) && (lefData->lefInfoMsgPrinted >= lefSettings->TotalMsgLimit)) + return; + if (lefSettings->MsgLimit[msgNum] > 0) { + if (lefData->msgLimit[0][msgNum] >= lefSettings->MsgLimit[msgNum]) { // over the limit + char msgStr[100]; + if (lefData->msgLimit[1][msgNum]) // already printed out warning + return; + lefData->msgLimit[1][msgNum] = 1; + sprintf(msgStr, + "Message (LEFPARS-%d) has exceeded the message display limit of %d", + msgNum, lefSettings->MsgLimit[msgNum]); + lefWarning(2503, msgStr); + return; + } + lefData->msgLimit[0][msgNum] = lefData->msgLimit[0][msgNum] + 1; + } + lefData->lefInfoMsgPrinted++; + + if (lefSettings->WarningLogFunction) { + char *str = (char*) lefMalloc(strlen(lefData->current_token) + strlen(s) + strlen(lefData->lefrFileName) + + 350); + sprintf(str, "INFO (LEFPARS-%d): %s See file %s at line %d.\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines); + (*lefSettings->WarningLogFunction)(str); + free(str); + } else if (lefData->lefrLog) { + fprintf(lefData->lefrLog, "INFO (LEFPARS-%d): %s See file %s at line %d\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines); + } else { + if (!lefData->hasOpenedLogFile) { + if ((lefData->lefrLog = fopen("lefRWarning.log", "w")) == 0) { + printf("WARNING (LEFPARS-3500): Unable to open the file lefRWarning.log in %s.\n", + getcwd(NULL, 64)); + printf("Info messages will not be printed.\n"); + } else { + lefData->hasOpenedLogFile = 1; + fprintf(lefData->lefrLog, "Info from file: %s\n\n", lefData->lefrFileName); + fprintf(lefData->lefrLog, "INFO (LEFPARS-%d): %s See file %s at line %d\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines); + } + } else { + if ((lefData->lefrLog = fopen("lefRWarning.log", "a")) == 0) { + printf("WARNING (LEFPARS-3500): Unable to open the file lefRWarning.log in %s.\n", + getcwd(NULL, 64)); + printf("Info messages will not be printed.\n"); + } else { + fprintf(lefData->lefrLog, "\nInfo from file: %s\n\n", lefData->lefrFileName); + fprintf(lefData->lefrLog, "INFO (LEFPARS-%d): %s See file %s at line %d\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines); + } + } + } +} + +// All warning starts with 2000 +// All warning within lefWarning starts with 2500 +void +lefWarning(int msgNum, + const char *s) +{ + if (lefSettings->dAllMsgs) // all messages are suppressed + return; + + if ((msgNum != 2502) && (msgNum != 2503)) { + int disableStatus = lefSettings->suppresMsg(msgNum); + + if (disableStatus == 1) { + char msgStr[60]; + sprintf(msgStr, "Message (LEFPARS-%d) has been suppressed from output.", msgNum); + lefWarning(2502, msgStr); + return; + } else if (disableStatus == 2) { + return; + } + } + + if ((lefSettings->TotalMsgLimit > 0) && (lefData->lefWarnMsgPrinted >= lefSettings->TotalMsgLimit)) + return; + if (lefSettings->MsgLimit[msgNum] > 0) { + if (lefData->msgLimit[0][msgNum] >= lefSettings->MsgLimit[msgNum]) { // over the limit + char msgStr[100]; + if (lefData->msgLimit[1][msgNum]) // already printed out warning + return; + lefData->msgLimit[1][msgNum] = 1; + sprintf(msgStr, + "Message (LEFPARS-%d) has exceeded the message display limit of %d", + msgNum, lefSettings->MsgLimit[msgNum]); + lefWarning(2503, msgStr); + return; + } + lefData->msgLimit[0][msgNum] = lefData->msgLimit[0][msgNum] + 1; + } + lefData->lefWarnMsgPrinted++; + + if (lefSettings->WarningLogFunction) { + char *str = (char*) lefMalloc(strlen(lefData->current_token) + strlen(s) + strlen(lefData->lefrFileName) + + 350); + sprintf(str, "WARNING (LEFPARS-%d): %s See file %s at line %d.\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines); + (*lefSettings->WarningLogFunction)(str); + free(str); + } else if (lefData->lefrLog) { + fprintf(lefData->lefrLog, "WARNING (LEFPARS-%d): %s See file %s at line %d\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines); + } else { + if (!lefData->hasOpenedLogFile) { + if ((lefData->lefrLog = fopen("lefRWarning.log", "w")) == 0) { + printf("WARNING (LEFPARS-2500): Unable to open the file lefRWarning.log in %s.\n", + getcwd(NULL, 64)); + printf("Warning messages will not be printed.\n"); + } else { + lefData->hasOpenedLogFile = 1; + fprintf(lefData->lefrLog, "Warnings from file: %s\n\n", lefData->lefrFileName); + fprintf(lefData->lefrLog, "WARNING (LEFPARS-%d): %s See file %s at line %d\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines); + } + } else { + if ((lefData->lefrLog = fopen("lefRWarning.log", "a")) == 0) { + printf("WARNING (LEFPARS-2501): Unable to open the file lefRWarning.log in %s.\n", + getcwd(NULL, 64)); + printf("Warning messages will not be printed.\n"); + } else { + fprintf(lefData->lefrLog, "\nWarnings from file: %s\n\n", lefData->lefrFileName); + fprintf(lefData->lefrLog, "WARNING (LEFPARS-%d): %s See file %s at line %d\n", + msgNum, s, lefData->lefrFileName, lefData->lef_nlines); + } + } + } + lefData->lef_warnings++; +} + +void * +lefMalloc(size_t lef_size) +{ + void *mallocVar; + + if (lefSettings->MallocFunction) + return (*lefSettings->MallocFunction)(lef_size); + else { + mallocVar = (void*) malloc(lef_size); + if (!mallocVar) { + fprintf(stderr, "ERROR (LEFPARS-1009): Not enough memory, stop parsing!\n"); + exit(1); + } + return mallocVar; + } +} + +void * +lefRealloc(void *name, + size_t lef_size) +{ + if (lefSettings->ReallocFunction) + return (*lefSettings->ReallocFunction)(name, lef_size); + else + return (void*) realloc(name, lef_size); +} + +void +lefFree(void *name) +{ + if (lefSettings->FreeFunction) + (*lefSettings->FreeFunction)(name); + else + free(name); +} + +char * +lefaddr(const char *in) +{ + return (char*) in; +} + +void +lefSetNonDefault(const char *nd_name) +{ + lefData->ndName = (char*)malloc(strlen(nd_name)+1); + strcpy(lefData->ndName, nd_name); +} + +void +lefUnsetNonDefault() +{ + lefData->lefNdRule = 0; + free(lefData->ndName); +} + +char * +lef_kywd(int num) +{ + char *a; + switch (num) { + case K_HISTORY: + a = lefaddr("HISTORY"); + break; + case K_ABUT: + a = lefaddr("ABUT"); + break; + case K_ABUTMENT: + a = lefaddr("ABUTMENT"); + break; + case K_ACTIVE: + a = lefaddr("ACTIVE"); + break; + case K_ANALOG: + a = lefaddr("ANALOG"); + break; + case K_ANTENNAAREAFACTOR: + a = lefaddr("ANTENNAAREAFACTOR"); + break; + case K_ANTENNALENGTHFACTOR: + a = lefaddr("ANTENNALENGTHFACTOR"); + break; + case K_ARRAY: + a = lefaddr("ARRAY"); + break; + case K_BLOCK: + a = lefaddr("BLOCK"); + break; + case K_BOTTOMLEFT: + a = lefaddr("BOTTOMLEFT"); + break; + case K_BOTTOMRIGHT: + a = lefaddr("BOTTOMRIGHT"); + break; + case K_BUFFER: + a = lefaddr("BUFFER"); + break; + case K_BY: + a = lefaddr("BY"); + break; + case K_CAPACITANCE: + a = lefaddr("CAPACITANCE"); + break; + case K_CAPMULTIPLIER: + a = lefaddr("CAPMULTIPLIER"); + break; + case K_CLASS: + a = lefaddr("CLASS"); + break; + case K_CLOCK: + a = lefaddr("CLOCK"); + break; + case K_COLUMNMAJOR: + a = lefaddr("COLUMNMAJOR"); + break; + case K_CORE: + a = lefaddr("CORE"); + break; + case K_CORNER: + a = lefaddr("CORNER"); + break; + case K_COVER: + a = lefaddr("COVER"); + break; + case K_CPERSQDIST: + a = lefaddr("CPERSQDIST"); + break; + case K_CURRENT: + a = lefaddr("CURRENT"); + break; + case K_CURRENTDEN: + a = lefaddr("CURRENTDEN"); + break; + case K_CURRENTSOURCE: + a = lefaddr("CURRENTSOURCE"); + break; + case K_CUT: + a = lefaddr("CUT"); + break; + case K_DEFAULT: + a = lefaddr("DEFAULT"); + break; + case K_DATABASE: + a = lefaddr("DATABASE"); + break; + case K_DIELECTRIC: + a = lefaddr("DIELECTRIC"); + break; + case K_DIRECTION: + a = lefaddr("DIRECTION"); + break; + case K_DO: + a = lefaddr("DO"); + break; + case K_EDGECAPACITANCE: + a = lefaddr("EDGECAPACITANCE"); + break; + case K_EEQ: + a = lefaddr("EEQ"); + break; + case K_END: + a = lefaddr("END"); + break; + case K_ENDCAP: + a = lefaddr("ENDCAP"); + break; + case K_FALL: + a = lefaddr("FALL"); + break; + case K_FALLCS: + a = lefaddr("FALLCS"); + break; + case K_FALLT0: + a = lefaddr("FALLT0"); + break; + case K_FALLSATT1: + a = lefaddr("FALLSATT1"); + break; + case K_FALLRS: + a = lefaddr("FALLRS"); + break; + case K_FALLSATCUR: + a = lefaddr("FALLSATCUR"); + break; + case K_FALLTHRESH: + a = lefaddr("FALLTHRESH"); + break; + case K_FEEDTHRU: + a = lefaddr("FEEDTHRU"); + break; + case K_FIXED: + a = lefaddr("FIXED"); + break; + case K_FOREIGN: + a = lefaddr("FOREIGN"); + break; + case K_FROMPIN: + a = lefaddr("FROMPIN"); + break; + case K_FUNCTION: + a = lefaddr("FUNCTION"); + break; + case K_GENERATE: + a = lefaddr("GENERATE"); + break; + case K_GENERATOR: + a = lefaddr("GENERATOR"); + break; + case K_GROUND: + a = lefaddr("GROUND"); + break; + case K_HEIGHT: + a = lefaddr("HEIGHT"); + break; + case K_HORIZONTAL: + a = lefaddr("HORIZONTAL"); + break; + case K_INOUT: + a = lefaddr("INOUT"); + break; + case K_INPUT: + a = lefaddr("INPUT"); + break; + case K_INPUTNOISEMARGIN: + a = lefaddr("INPUTNOISEMARGIN"); + break; + case K_COMPONENTPIN: + a = lefaddr("COMPONENTPIN"); + break; + case K_INTRINSIC: + a = lefaddr("INTRINSIC"); + break; + case K_INVERT: + a = lefaddr("INVERT"); + break; + case K_INVERTER: + a = lefaddr("INVERTER"); + break; + case K_IRDROP: + a = lefaddr("IRDROP"); + break; + case K_ITERATE: + a = lefaddr("ITERATE"); + break; + case K_IV_TABLES: + a = lefaddr("IV_TABLES"); + break; + case K_LAYER: + a = lefaddr("LAYER"); + break; + case K_LEAKAGE: + a = lefaddr("LEAKAGE"); + break; + case K_LEQ: + a = lefaddr("LEQ"); + break; + case K_LIBRARY: + a = lefaddr("LIBRARY"); + break; + case K_MACRO: + a = lefaddr("MACRO"); + break; + case K_MATCH: + a = lefaddr("MATCH"); + break; + case K_MAXDELAY: + a = lefaddr("MAXDELAY"); + break; + case K_MAXLOAD: + a = lefaddr("MAXLOAD"); + break; + case K_METALOVERHANG: + a = lefaddr("METALOVERHANG"); + break; + case K_MILLIAMPS: + a = lefaddr("MILLIAMPS"); + break; + case K_MILLIWATTS: + a = lefaddr("MILLIWATTS"); + break; + case K_MINFEATURE: + a = lefaddr("MINFEATURE"); + break; + case K_MUSTJOIN: + a = lefaddr("MUSTJOIN"); + break; + case K_NAMEMAPSTRING: + a = lefaddr("NAMEMAPSTRING"); + break; + case K_NAMESCASESENSITIVE: + a = lefaddr("NAMESCASESENSITIVE"); + break; + case K_NANOSECONDS: + a = lefaddr("NANOSECONDS"); + break; + case K_NETS: + a = lefaddr("NETS"); + break; + case K_NEW: + a = lefaddr("NEW"); + break; + case K_NONDEFAULTRULE: + a = lefaddr("NONDEFAULTRULE"); + break; + case K_NONINVERT: + a = lefaddr("NONINVERT"); + break; + case K_NONUNATE: + a = lefaddr("NONUNATE"); + break; + case K_NOWIREEXTENSIONATPIN: + a = lefaddr("NOWIREEXTENSIONATPIN"); + break; + case K_OBS: + a = lefaddr("OBS"); + break; + case K_OHMS: + a = lefaddr("OHMS"); + break; + case K_OFFSET: + a = lefaddr("OFFSET"); + break; + case K_ORIENTATION: + a = lefaddr("ORIENTATION"); + break; + case K_ORIGIN: + a = lefaddr("ORIGIN"); + break; + case K_OUTPUT: + a = lefaddr("OUTPUT"); + break; + case K_OUTPUTNOISEMARGIN: + a = lefaddr("OUTPUTNOISEMARGIN"); + break; + case K_OUTPUTRESISTANCE: + a = lefaddr("OUTPUTRESISTANCE"); + break; + case K_OVERHANG: + a = lefaddr("OVERHANG"); + break; + case K_OVERLAP: + a = lefaddr("OVERLAP"); + break; + case K_OFF: + a = lefaddr("OFF"); + break; + case K_ON: + a = lefaddr("ON"); + break; + case K_OVERLAPS: + a = lefaddr("OVERLAPS"); + break; + case K_PAD: + a = lefaddr("PAD"); + break; + case K_PATH: + a = lefaddr("PATH"); + break; + case K_PATTERN: + a = lefaddr("PATTERN"); + break; + case K_PICOFARADS: + a = lefaddr("PICOFARADS"); + break; + case K_PIN: + a = lefaddr("PIN"); + break; + case K_PITCH: + a = lefaddr("PITCH"); + break; + case K_PLACED: + a = lefaddr("PLACED"); + break; + case K_POLYGON: + a = lefaddr("POLYGON"); + break; + case K_PORT: + a = lefaddr("PORT"); + break; + case K_POST: + a = lefaddr("POST"); + break; + case K_POWER: + a = lefaddr("POWER"); + break; + case K_PRE: + a = lefaddr("PRE"); + break; + case K_PULLDOWNRES: + a = lefaddr("PULLDOWNRES"); + break; + case K_PWL: + a = lefaddr("PWL"); + break; + case K_RECT: + a = lefaddr("RECT"); + break; + case K_RESISTANCE: + a = lefaddr("RESISTANCE"); + break; + case K_RESISTIVE: + a = lefaddr("RESISTIVE"); + break; + case K_RING: + a = lefaddr("RING"); + break; + case K_RISE: + a = lefaddr("RISE"); + break; + case K_RISECS: + a = lefaddr("RISECS"); + break; + case K_RISERS: + a = lefaddr("RISERS"); + break; + case K_RISESATCUR: + a = lefaddr("RISESATCUR"); + break; + case K_RISETHRESH: + a = lefaddr("RISETHRESH"); + break; + case K_RISESATT1: + a = lefaddr("RISESATT1"); + break; + case K_RISET0: + a = lefaddr("RISET0"); + break; + case K_RISEVOLTAGETHRESHOLD: + a = lefaddr("RISEVOLTAGETHRESHOLD"); + break; + case K_FALLVOLTAGETHRESHOLD: + a = lefaddr("FALLVOLTAGETHRESHOLD"); + break; + case K_ROUTING: + a = lefaddr("ROUTING"); + break; + case K_ROWMAJOR: + a = lefaddr("ROWMAJOR"); + break; + case K_RPERSQ: + a = lefaddr("RPERSQ"); + break; + case K_SAMENET: + a = lefaddr("SAMENET"); + break; + case K_SCANUSE: + a = lefaddr("SCANUSE"); + break; + case K_SHAPE: + a = lefaddr("SHAPE"); + break; + case K_SHRINKAGE: + a = lefaddr("SHRINKAGE"); + break; + case K_SIGNAL: + a = lefaddr("SIGNAL"); + break; + case K_SITE: + a = lefaddr("SITE"); + break; + case K_SIZE: + a = lefaddr("SIZE"); + break; + case K_SOURCE: + a = lefaddr("SOURCE"); + break; + case K_SPACER: + a = lefaddr("SPACER"); + break; + case K_SPACING: + a = lefaddr("SPACING"); + break; + case K_SPECIALNETS: + a = lefaddr("SPECIALNETS"); + break; + case K_STACK: + a = lefaddr("STACK"); + break; + case K_START: + a = lefaddr("START"); + break; + case K_STEP: + a = lefaddr("STEP"); + break; + case K_STOP: + a = lefaddr("STOP"); + break; + case K_STRUCTURE: + a = lefaddr("STRUCTURE"); + break; + case K_SYMMETRY: + a = lefaddr("SYMMETRY"); + break; + case K_TABLE: + a = lefaddr("TABLE"); + break; + case K_THICKNESS: + a = lefaddr("THICKNESS"); + break; + case K_TIEHIGH: + a = lefaddr("TIEHIGH"); + break; + case K_TIELOW: + a = lefaddr("TIELOW"); + break; + case K_TIEOFFR: + a = lefaddr("TIEOFFR"); + break; + case K_TIME: + a = lefaddr("TIME"); + break; + case K_TIMING: + a = lefaddr("TIMING"); + break; + case K_TO: + a = lefaddr("TO"); + break; + case K_TOPIN: + a = lefaddr("TOPIN"); + break; + case K_TOPLEFT: + a = lefaddr("TOPLEFT"); + break; + case K_TOPRIGHT: + a = lefaddr("TOPRIGHT"); + break; + case K_TOPOFSTACKONLY: + a = lefaddr("TOPOFSTACKONLY"); + break; + case K_TRISTATE: + a = lefaddr("TRISTATE"); + break; + case K_TYPE: + a = lefaddr("TYPE"); + break; + case K_UNATENESS: + a = lefaddr("UNATENESS"); + break; + case K_UNITS: + a = lefaddr("UNITS"); + break; + case K_USE: + a = lefaddr("USE"); + break; + case K_VARIABLE: + a = lefaddr("VARIABLE"); + break; + case K_VERTICAL: + a = lefaddr("VERTICAL"); + break; + case K_VHI: + a = lefaddr("VHI"); + break; + case K_VIA: + a = lefaddr("VIA"); + break; + case K_VIARULE: + a = lefaddr("VIARULE"); + break; + case K_VLO: + a = lefaddr("VLO"); + break; + case K_VOLTAGE: + a = lefaddr("VOLTAGE"); + break; + case K_VOLTS: + a = lefaddr("VOLTS"); + break; + case K_WIDTH: + a = lefaddr("WIDTH"); + break; + case K_WIREEXTENSION: + a = lefaddr("WIREEXTENSION"); + break; + case K_X: + a = lefaddr("X"); + break; + case K_Y: + a = lefaddr("Y"); + break; + case K_R90: + a = lefaddr("R90"); + break; + case T_STRING: + a = lefaddr("T_STRING"); + break; + case QSTRING: + a = lefaddr("QSTRING"); + break; + case NUMBER: + a = lefaddr("NUMBER"); + break; + case K_N: + a = lefaddr("N"); + break; + case K_S: + a = lefaddr("S"); + break; + case K_E: + a = lefaddr("E"); + break; + case K_W: + a = lefaddr("W"); + break; + case K_FN: + a = lefaddr("FN"); + break; + case K_FS: + a = lefaddr("FS"); + break; + case K_FE: + a = lefaddr("FE"); + break; + case K_FW: + a = lefaddr("FW"); + break; + case K_USER: + a = lefaddr("USER"); + break; + case K_MASTERSLICE: + a = lefaddr("MASTERSLICE"); + break; + case K_ENDMACRO: + a = lefaddr("ENDMACRO"); + break; + case K_ENDMACROPIN: + a = lefaddr("ENDMACROPIN"); + break; + case K_ENDVIARULE: + a = lefaddr("ENDVIARULE"); + break; + case K_ENDVIA: + a = lefaddr("ENDVIA"); + break; + case K_ENDLAYER: + a = lefaddr("ENDLAYER"); + break; + case K_ENDSITE: + a = lefaddr("ENDSITE"); + break; + case K_CANPLACE: + a = lefaddr("CANPLACE"); + break; + case K_CANNOTOCCUPY: + a = lefaddr("CANNOTOCCUPY"); + break; + case K_TRACKS: + a = lefaddr("TRACKS"); + break; + case K_FLOORPLAN: + a = lefaddr("FLOORPLAN"); + break; + case K_GCELLGRID: + a = lefaddr("GCELLGRID"); + break; + case K_DEFAULTCAP: + a = lefaddr("DEFAULTCAP"); + break; + case K_MINPINS: + a = lefaddr("MINPINS"); + break; + case K_WIRECAP: + a = lefaddr("WIRECAP"); + break; + case K_STABLE: + a = lefaddr("STABLE"); + break; + case K_SETUP: + a = lefaddr("SETUP"); + break; + case K_HOLD: + a = lefaddr("HOLD"); + break; + case K_DEFINE: + a = lefaddr("DEFINE"); + break; + case K_DEFINES: + a = lefaddr("DEFINES"); + break; + case K_DEFINEB: + a = lefaddr("DEFINEB"); + break; + case K_IF: + a = lefaddr("IF"); + break; + case K_THEN: + a = lefaddr("THEN"); + break; + case K_ELSE: + a = lefaddr("ELSE"); + break; + case K_FALSE: + a = lefaddr("FALSE"); + break; + case K_TRUE: + a = lefaddr("TRUE"); + break; + case K_EQ: + a = lefaddr("EQ"); + break; + case K_NE: + a = lefaddr("NE"); + break; + case K_LE: + a = lefaddr("LE"); + break; + case K_LT: + a = lefaddr("LT"); + break; + case K_GE: + a = lefaddr("GE"); + break; + case K_GT: + a = lefaddr("GT"); + break; + case K_OR: + a = lefaddr("OR"); + break; + case K_AND: + a = lefaddr("AND"); + break; + case K_NOT: + a = lefaddr("NOT"); + break; + case K_DELAY: + a = lefaddr("DELAY"); + break; + case K_TABLEDIMENSION: + a = lefaddr("TABLEDIMENSION"); + break; + case K_TABLEAXIS: + a = lefaddr("TABLEAXIS"); + break; + case K_TABLEENTRIES: + a = lefaddr("TABLEENTRIES"); + break; + case K_TRANSITIONTIME: + a = lefaddr("TRANSITIONTIME"); + break; + case K_EXTENSION: + a = lefaddr("EXTENSION"); + break; + case K_PROPDEF: + a = lefaddr("PROPDEF"); + break; + case K_STRING: + a = lefaddr("STRING"); + break; + case K_INTEGER: + a = lefaddr("INTEGER"); + break; + case K_REAL: + a = lefaddr("REAL"); + break; + case K_RANGE: + a = lefaddr("RANGE"); + break; + case K_PROPERTY: + a = lefaddr("PROPERTY"); + break; + case K_VIRTUAL: + a = lefaddr("VIRTUAL"); + break; + case K_BUSBITCHARS: + a = lefaddr("BUSBITCHARS"); + break; + case K_VERSION: + a = lefaddr("VERSION"); + break; + case K_BEGINEXT: + a = lefaddr("BEGINEXT"); + break; + case K_ENDEXT: + a = lefaddr("ENDEXT"); + break; + case K_UNIVERSALNOISEMARGIN: + a = lefaddr("UNIVERSALNOISEMARGIN"); + break; + case K_EDGERATETHRESHOLD1: + a = lefaddr("EDGERATETHRESHOLD1"); + break; + case K_CORRECTIONTABLE: + a = lefaddr("CORRECTIONTABLE"); + break; + case K_EDGERATESCALEFACTOR: + a = lefaddr("EDGERATESCALEFACTOR"); + break; + case K_EDGERATETHRESHOLD2: + a = lefaddr("EDGERATETHRESHOLD2"); + break; + case K_VICTIMNOISE: + a = lefaddr("VICTIMNOISE"); + break; + case K_NOISETABLE: + a = lefaddr("NOISETABLE"); + break; + case K_EDGERATE: + a = lefaddr("EDGERATE"); + break; + case K_VICTIMLENGTH: + a = lefaddr("VICTIMLENGTH"); + break; + case K_CORRECTIONFACTOR: + a = lefaddr("CORRECTIONFACTOR"); + break; + case K_OUTPUTPINANTENNASIZE: + a = lefaddr("OUTPUTPINANTENNASIZE"); + break; + case K_INPUTPINANTENNASIZE: + a = lefaddr("INPUTPINANTENNASIZE"); + break; + case K_INOUTPINANTENNASIZE: + a = lefaddr("INOUTPINANTENNASIZE"); + break; + case K_TAPERRULE: + a = lefaddr("TAPERRULE"); + break; + case K_DIVIDERCHAR: + a = lefaddr("DIVIDERCHAR"); + break; + case K_ANTENNASIZE: + a = lefaddr("ANTENNASIZE"); + break; + case K_ANTENNAMETALAREA: + a = lefaddr("ANTENNAMETALAREA"); + break; + case K_ANTENNAMETALLENGTH: + a = lefaddr("ANTENNAMETALLENGTH"); + break; + case K_RISESLEWLIMIT: + a = lefaddr("RISESLEWLIMIT"); + break; + case K_FALLSLEWLIMIT: + a = lefaddr("FALLSLEWLIMIT"); + break; + case K_MESSAGE: + a = lefaddr("MESSAGE"); + break; + case K_CREATEFILE: + a = lefaddr("CREATEFILE"); + break; + case K_OPENFILE: + a = lefaddr("OPENFILE"); + break; + case K_CLOSEFILE: + a = lefaddr("CLOSEFILE"); + break; + case K_WARNING: + a = lefaddr("WARNING"); + break; + case K_ERROR: + a = lefaddr("ERROR"); + break; + case K_FATALERROR: + a = lefaddr("FATALERROR"); + break; + case IF: + a = lefaddr("IF"); + break; + case LNOT: + a = lefaddr("LNOT"); + break; + case UMINUS: + a = lefaddr("UMINUS"); + break; + + default: + a = lefaddr("bogus"); + } + return a; +} + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/lef/lef/lefiArray.cpp b/lefdef/src/lef/lef/lefiArray.cpp new file mode 100644 index 00000000..93166542 --- /dev/null +++ b/lefdef/src/lef/lef/lefiArray.cpp @@ -0,0 +1,675 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "lefiArray.hpp" +#include "lefiMisc.hpp" +#include "lefiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE +// ***************************************************************************** +// lefiArrayFloorPlan +// ***************************************************************************** + +void +lefiArrayFloorPlan::Init(const char *name) +{ + int len = strlen(name) + 1; + name_ = (char*) lefMalloc(len); + strcpy(name_, CASE(name)); + numPatterns_ = 0; + patternsAllocated_ = 2; + types_ = (char**) lefMalloc(sizeof(char*) * 2); + patterns_ = (lefiSitePattern**) lefMalloc(sizeof(lefiSitePattern*) * 2); +} + +void +lefiArrayFloorPlan::Destroy() +{ + lefiSitePattern *s; + int i; + for (i = 0; i < numPatterns_; i++) { + s = patterns_[i]; + s->Destroy(); + lefFree((char*) s); + lefFree((char*) (types_[i])); + } + lefFree((char*) (types_)); + lefFree((char*) (patterns_)); + lefFree(name_); +} + +void +lefiArrayFloorPlan::addSitePattern(const char *typ, + lefiSitePattern *s) +{ + int len = strlen(typ) + 1; + if (numPatterns_ == patternsAllocated_) { + int i; + int lim; + char **nc; + lefiSitePattern **np; + + if (patternsAllocated_ == 0) + lim = patternsAllocated_ = 2; + else + lim = patternsAllocated_ = patternsAllocated_ * 2; + nc = (char**) lefMalloc(sizeof(char*) * lim); + np = (lefiSitePattern**) lefMalloc(sizeof(lefiSitePattern*) * lim); + lim /= 2; + for (i = 0; i < lim; i++) { + nc[i] = types_[i]; + np[i] = patterns_[i]; + } + lefFree((char*) (types_)); + lefFree((char*) (patterns_)); + types_ = nc; + patterns_ = np; + } + types_[numPatterns_] = (char*) lefMalloc(len); + strcpy(types_[numPatterns_], typ); + patterns_[numPatterns_] = s; + numPatterns_ += 1; +} + +int +lefiArrayFloorPlan::numPatterns() const +{ + return numPatterns_; +} + +lefiSitePattern * +lefiArrayFloorPlan::pattern(int index) const +{ + return patterns_[index]; +} + +char * +lefiArrayFloorPlan::typ(int index) const +{ + return types_[index]; +} + +const char * +lefiArrayFloorPlan::name() const +{ + return name_; +} + +// ***************************************************************************** +// lefiArray +// ***************************************************************************** +lefiArray::lefiArray() +: nameSize_(0), + name_(NULL), + patternsAllocated_(0), + numPatterns_(0), + pattern_(NULL), + canAllocated_(0), + numCan_(0), + canPlace_(NULL), + cannotAllocated_(0), + numCannot_(0), + cannotOccupy_(NULL), + tracksAllocated_(0), + numTracks_(0), + track_(NULL), + gAllocated_(0), + numG_(0), + gcell_(NULL), + hasDefault_(0), + tableSize_(0), + numDefault_(0), + defaultAllocated_(0), + minPins_(NULL), + caps_(NULL), + numFloorPlans_(0), + floorPlansAllocated_(0), + floors_(0) +{ + Init(); +} + +void +lefiArray::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); + + numPatterns_ = 0; + patternsAllocated_ = 0; + bump((void***) (&(pattern_)), numPatterns_, &(patternsAllocated_)); + + numCan_ = 0; + canAllocated_ = 0; + bump((void***) (&(canPlace_)), numCan_, &(canAllocated_)); + + numCannot_ = 0; + cannotAllocated_ = 0; + bump((void***) (&(cannotOccupy_)), numCannot_, &(cannotAllocated_)); + + numTracks_ = 0; + tracksAllocated_ = 0; + bump((void***) (&(track_)), numTracks_, &(tracksAllocated_)); + + numG_ = 0; + gAllocated_ = 0; + bump((void***) (&(gcell_)), numG_, &(gAllocated_)); + + numDefault_ = 0; + defaultAllocated_ = 4; + minPins_ = (int*) lefMalloc(sizeof(int) * 4); + caps_ = (double*) lefMalloc(sizeof(double) * 4); + + floorPlansAllocated_ = 0; + numFloorPlans_ = 0; + bump((void***) (&(floors_)), numFloorPlans_, + &(floorPlansAllocated_)); +} + +void +lefiArray::Destroy() +{ + clear(); + + lefFree((char*) (name_)); + lefFree((char*) (caps_)); + lefFree((char*) (minPins_)); + lefFree((char*) (floors_)); + lefFree((char*) (track_)); + lefFree((char*) (gcell_)); + lefFree((char*) (cannotOccupy_)); + lefFree((char*) (canPlace_)); + lefFree((char*) (pattern_)); +} + +lefiArray::~lefiArray() +{ + Destroy(); +} + +void +lefiArray::addSitePattern(lefiSitePattern *s) +{ + /* + if (numPatterns_ == patternsAllocated_) + bump((void***)(&(pattern_)), numPatterns_, + &(patternsAllocated_)); + */ + if (numPatterns_ == patternsAllocated_) { + lefiSitePattern **tpattern; + int i; + + if (patternsAllocated_ == 0) + patternsAllocated_ = 2; + else + patternsAllocated_ = patternsAllocated_ * 2; + tpattern = (lefiSitePattern**) lefMalloc(sizeof(lefiSitePattern*) * + patternsAllocated_); + for (i = 0; i < numPatterns_; i++) { + tpattern[i] = pattern_[i]; + } + if (pattern_) + lefFree((char*) (pattern_)); + pattern_ = tpattern; + /* + bump((void***)(&(pattern_)), numPatterns_, + &(patternsAllocated_)); + */ + } + + pattern_[numPatterns_] = s; + numPatterns_ += 1; +} + +void +lefiArray::setName(const char *name) +{ + int len = strlen(name) + 1; + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); +} + +void +lefiArray::setTableSize(int tsize) +{ + tableSize_ = tsize; + hasDefault_ = 1; +} + +void +lefiArray::addDefaultCap(int minPins, + double cap) +{ + if (numDefault_ == defaultAllocated_) { + int i; + int lim; + double *nc; + int *np; + + if (defaultAllocated_ == 0) + lim = defaultAllocated_ = 2; + else + lim = defaultAllocated_ * 2; + defaultAllocated_ = lim; + nc = (double*) lefMalloc(sizeof(double) * lim); + np = (int*) lefMalloc(sizeof(int) * lim); + lim /= 2; + for (i = 0; i < lim; i++) { + nc[i] = caps_[i]; + np[i] = minPins_[i]; + } + lefFree((char*) (caps_)); + lefFree((char*) (minPins_)); + caps_ = nc; + minPins_ = np; + } + caps_[numDefault_] = cap; + minPins_[numDefault_] = minPins; + numDefault_ += 1; +} + +void +lefiArray::addCanPlace(lefiSitePattern *s) +{ + if (numCan_ == canAllocated_) { + lefiSitePattern **cplace; + int i; + + if (canAllocated_ == 0) + canAllocated_ = 2; + else + canAllocated_ = canAllocated_ * 2; + cplace = (lefiSitePattern**) lefMalloc(sizeof(lefiSitePattern*) * + canAllocated_); + for (i = 0; i < numCan_; i++) { + cplace[i] = canPlace_[i]; + } + if (canPlace_) + lefFree((char*) (canPlace_)); + canPlace_ = cplace; + } + /* + bump((void***)(&(canPlace_)), numCan_, &(canAllocated_)); + */ + canPlace_[numCan_] = s; + numCan_ += 1; +} + +void +lefiArray::addCannotOccupy(lefiSitePattern *s) +{ + if (numCannot_ == cannotAllocated_) { + lefiSitePattern **cnplace; + int i; + + if (cannotAllocated_ == 0) + cannotAllocated_ = 2; + else + cannotAllocated_ = cannotAllocated_ * 2; + cnplace = (lefiSitePattern**) lefMalloc(sizeof(lefiSitePattern*) * + cannotAllocated_); + for (i = 0; i < numCannot_; i++) { + cnplace[i] = cannotOccupy_[i]; + } + if (cannotOccupy_) + lefFree((char*) (cannotOccupy_)); + cannotOccupy_ = cnplace; + } + /* + if (numCannot_ == cannotAllocated_) + bump((void***)(&(cannotOccupy_)), numCannot_, + &(cannotAllocated_)); + */ + cannotOccupy_[numCannot_] = s; + numCannot_ += 1; +} + +void +lefiArray::addTrack(lefiTrackPattern *t) +{ + if (numTracks_ == tracksAllocated_) { + lefiTrackPattern **tracks; + int i; + + if (tracksAllocated_ == 0) + tracksAllocated_ = 2; + else + tracksAllocated_ = tracksAllocated_ * 2; + tracks = (lefiTrackPattern**) lefMalloc(sizeof(lefiTrackPattern*) * + tracksAllocated_); + for (i = 0; i < numTracks_; i++) { + tracks[i] = track_[i]; + } + if (track_) + lefFree((char*) (track_)); + track_ = tracks; + } + /* + if (numTracks_ == tracksAllocated_) + bump((void***)(&(track_)), numTracks_, &(tracksAllocated_)); + */ + track_[numTracks_] = t; + numTracks_ += 1; +} + +void +lefiArray::addGcell(lefiGcellPattern *g) +{ + if (numG_ == gAllocated_) { + lefiGcellPattern **cells; + int i; + + if (gAllocated_ == 0) + gAllocated_ = 2; + else + gAllocated_ = gAllocated_ * 2; + cells = (lefiGcellPattern**) lefMalloc(sizeof(lefiGcellPattern*) * + gAllocated_); + for (i = 0; i < numG_; i++) { + cells[i] = gcell_[i]; + } + if (gcell_) + lefFree((char*) (gcell_)); + gcell_ = cells; + } + /* + if (numG_ == gAllocated_) + bump((void***)(&(gcell_)), numG_, &(gAllocated_)); + */ + gcell_[numG_] = g; + numG_ += 1; +} + +void +lefiArray::addFloorPlan(const char *name) +{ + lefiArrayFloorPlan *f; + if (numFloorPlans_ == floorPlansAllocated_) { + int i; + lefiArrayFloorPlan **tf; + + if (floorPlansAllocated_ == 0) + floorPlansAllocated_ = 2; + else + floorPlansAllocated_ = floorPlansAllocated_ * 2; + tf = (lefiArrayFloorPlan**) lefMalloc(sizeof(lefiArrayFloorPlan*) * + floorPlansAllocated_); + for (i = 0; i < numFloorPlans_; i++) { + tf[i] = floors_[i]; + } + if (floors_) + lefFree((char*) (floors_)); + floors_ = tf; + } + /* + if (numFloorPlans_ == floorPlansAllocated_) { + bump((void***)(&(floors_)), numFloorPlans_, + &(floorPlansAllocated_)); + } + */ + f = (lefiArrayFloorPlan*) lefMalloc(sizeof(lefiArrayFloorPlan)); + f->Init(name); + floors_[numFloorPlans_] = f; + numFloorPlans_ += 1; +} + +void +lefiArray::addSiteToFloorPlan(const char *typ, + lefiSitePattern *s) +{ + lefiArrayFloorPlan *f = floors_[numFloorPlans_ - 1]; + f->addSitePattern(typ, s); +} + +void +lefiArray::bump(void ***arr, + int used, + int *allocated) +{ + int size = *allocated * 2; + int i; + void **newa; + if (size == 0) + size = 2; + newa = (void**) lefMalloc(sizeof(void*) * size); + + for (i = 0; i < used; i++) { + newa[i] = (*arr)[i]; + } + + if (*arr) + lefFree((char*) (*arr)); + *allocated = size; + *arr = newa; +} + +void +lefiArray::clear() +{ + int i; + lefiSitePattern *p; + lefiGcellPattern *g; + lefiTrackPattern *t; + lefiArrayFloorPlan *f; + + for (i = 0; i < numPatterns_; i++) { + p = pattern_[i]; + p->Destroy(); + lefFree((char*) p); + } + numPatterns_ = 0; + + for (i = 0; i < numCan_; i++) { + p = canPlace_[i]; + p->Destroy(); + lefFree((char*) p); + } + numCan_ = 0; + + for (i = 0; i < numCannot_; i++) { + p = cannotOccupy_[i]; + p->Destroy(); + lefFree((char*) p); + } + numCannot_ = 0; + + for (i = 0; i < numTracks_; i++) { + t = track_[i]; + t->Destroy(); + lefFree((char*) t); + } + numTracks_ = 0; + + for (i = 0; i < numG_; i++) { + g = gcell_[i]; + g->Destroy(); + lefFree((char*) g); + } + numG_ = 0; + + hasDefault_ = 0; + tableSize_ = 0; + numDefault_ = 0; + + for (i = 0; i < numFloorPlans_; i++) { + f = floors_[i]; + f->Destroy(); + lefFree((char*) f); + } + numFloorPlans_ = 0; + +} + +int +lefiArray::numSitePattern() const +{ + return numPatterns_; +} + +int +lefiArray::numCanPlace() const +{ + return numCan_; +} + +int +lefiArray::numCannotOccupy() const +{ + return numCannot_; +} + +int +lefiArray::numTrack() const +{ + return numTracks_; +} + +int +lefiArray::numGcell() const +{ + return numG_; +} + +int +lefiArray::hasDefaultCap() const +{ + return hasDefault_; +} + +const char * +lefiArray::name() const +{ + return name_; +} + +lefiSitePattern * +lefiArray::sitePattern(int index) const +{ + return pattern_[index]; +} + +lefiSitePattern * +lefiArray::canPlace(int index) const +{ + return canPlace_[index]; +} + +lefiSitePattern * +lefiArray::cannotOccupy(int index) const +{ + return cannotOccupy_[index]; +} + +lefiTrackPattern * +lefiArray::track(int index) const +{ + return track_[index]; +} + +lefiGcellPattern * +lefiArray::gcell(int index) const +{ + return gcell_[index]; +} + +int +lefiArray::tableSize() const +{ + return tableSize_; +} + +int +lefiArray::numDefaultCaps() const +{ + return numDefault_; +} + +int +lefiArray::defaultCapMinPins(int index) const +{ + return minPins_[index]; +} + +double +lefiArray::defaultCap(int index) const +{ + return caps_[index]; +} + +int +lefiArray::numFloorPlans() const +{ + return numFloorPlans_; +} + +const char * +lefiArray::floorPlanName(int index) const +{ + const lefiArrayFloorPlan *f = floors_[index]; + return f->name(); +} + +int +lefiArray::numSites(int index) const +{ + const lefiArrayFloorPlan *f = floors_[index]; + return f->numPatterns(); +} + +const char * +lefiArray::siteType(int index, + int j) const +{ + const lefiArrayFloorPlan *f = floors_[index]; + return f->typ(j); +} + +lefiSitePattern * +lefiArray::site(int index, + int j) const +{ + const lefiArrayFloorPlan *f = floors_[index]; + return f->pattern(j); +} + +void +lefiArray::print(FILE *f) const +{ + fprintf(f, "ARRAY %s\n", name()); +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiArray.hpp b/lefdef/src/lef/lef/lefiArray.hpp new file mode 100644 index 00000000..82440533 --- /dev/null +++ b/lefdef/src/lef/lef/lefiArray.hpp @@ -0,0 +1,147 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiArray_h +#define lefiArray_h + +#include +#include "lefiKRDefs.hpp" +#include "lefiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class lefiArrayFloorPlan { +public: + void Init(const char* name); + void Destroy(); + void addSitePattern(const char* typ, lefiSitePattern* s); + + int numPatterns() const; + lefiSitePattern* pattern(int index) const; + char* typ(int index) const; + const char* name() const; + +protected: + int numPatterns_; + int patternsAllocated_; + lefiSitePattern** patterns_; + char** types_; + char* name_; +}; + +class lefiArray { +public: + lefiArray(); + void Init(); + + void Destroy(); + ~lefiArray(); + + void setName(const char* name); + void addSitePattern(lefiSitePattern* s); + void setTableSize(int tsize); + void addDefaultCap(int minPins, double cap); + void addCanPlace(lefiSitePattern* s); + void addCannotOccupy(lefiSitePattern* s); + void addTrack(lefiTrackPattern* t); + void addGcell(lefiGcellPattern* g); + void addFloorPlan(const char* name); + void addSiteToFloorPlan(const char* typ, lefiSitePattern* p); + void clear(); + void bump(void*** arr, int used, int* allocated); + + int numSitePattern() const; + int numCanPlace() const; + int numCannotOccupy() const; + int numTrack() const; + int numGcell() const; + int hasDefaultCap() const; + + const char* name() const; + lefiSitePattern* sitePattern(int index) const; + lefiSitePattern* canPlace(int index) const; + lefiSitePattern* cannotOccupy(int index) const; + lefiTrackPattern* track(int index) const; + lefiGcellPattern* gcell(int index) const; + + int tableSize() const; + int numDefaultCaps() const; + int defaultCapMinPins(int index) const; + double defaultCap(int index) const; + + int numFloorPlans() const; + const char* floorPlanName(int index) const; + int numSites(int index) const; + const char* siteType(int floorIndex, int siteIndex) const; + lefiSitePattern* site(int floorIndex, int siteIndex) const; + + // Debug print + void print(FILE* f) const; + +protected: + int nameSize_; + char* name_; + + int patternsAllocated_; + int numPatterns_; + lefiSitePattern** pattern_; + + int canAllocated_; + int numCan_; + lefiSitePattern** canPlace_; + + int cannotAllocated_; + int numCannot_; + lefiSitePattern** cannotOccupy_; + + int tracksAllocated_; + int numTracks_; + lefiTrackPattern** track_; + + int gAllocated_; + int numG_; + lefiGcellPattern** gcell_; + + int hasDefault_; + int tableSize_; + int numDefault_; + int defaultAllocated_; + int* minPins_; + double* caps_; + + int numFloorPlans_; + int floorPlansAllocated_; + lefiArrayFloorPlan** floors_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiCrossTalk.cpp b/lefdef/src/lef/lef/lefiCrossTalk.cpp new file mode 100644 index 00000000..c3806415 --- /dev/null +++ b/lefdef/src/lef/lef/lefiCrossTalk.cpp @@ -0,0 +1,994 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lex.h" +#include "lefiCrossTalk.hpp" +#include "lefiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ***************************************************************************** +// lefiNoiseVictim +// ***************************************************************************** + +lefiNoiseVictim::lefiNoiseVictim(double d) +: length_(0.0), + numNoises_(0), + noisesAllocated_(0), + noises_(NULL) +{ + Init(d); +} + +void +lefiNoiseVictim::Init(double d) +{ + length_ = d; + + numNoises_ = 0; + noisesAllocated_ = 2; + noises_ = (double*) lefMalloc(sizeof(double) * 2); +} + +void +lefiNoiseVictim::clear() +{ + numNoises_ = 0; +} + +void +lefiNoiseVictim::Destroy() +{ + clear(); + lefFree((char*) (noises_)); +} + +lefiNoiseVictim::~lefiNoiseVictim() +{ + Destroy(); +} + +void +lefiNoiseVictim::addVictimNoise(double d) +{ + if (numNoises_ == noisesAllocated_) { + int max; + double *ne; + int i; + + if (noisesAllocated_ == 0) { + max = noisesAllocated_ = 2; + numNoises_ = 0; + } else + max = noisesAllocated_ = numNoises_ * 2; + ne = (double*) lefMalloc(sizeof(double) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = noises_[i]; + lefFree((char*) (noises_)); + noises_ = ne; + } + noises_[numNoises_] = d; + numNoises_ += 1; +} + +int +lefiNoiseVictim::numNoises() const +{ + return numNoises_; +} + +double +lefiNoiseVictim::noise(int index) const +{ + return noises_[index]; +} + +double +lefiNoiseVictim::length() const +{ + return length_; +} + +// ***************************************************************************** +// lefiNoiseResistance +// ***************************************************************************** + +lefiNoiseResistance::lefiNoiseResistance() +: numNums_(0), + numsAllocated_(0), + nums_(NULL), + numVictims_(0), + victimsAllocated_(0), + victims_(NULL) +{ + Init(); +} + +void +lefiNoiseResistance::Init() +{ + numNums_ = 0; + numsAllocated_ = 1; + nums_ = (double*) lefMalloc(sizeof(double) * 1); + + numVictims_ = 0; + victimsAllocated_ = 2; + victims_ = (lefiNoiseVictim**) lefMalloc(sizeof( + lefiNoiseVictim*) * 2); +} + +void +lefiNoiseResistance::clear() +{ + int i; + lefiNoiseVictim *r; + int max = numVictims_; + + for (i = 0; i < max; i++) { + r = victims_[i]; + r->Destroy(); + lefFree((char*) r); + } + numVictims_ = 0; + numNums_ = 0; +} + +void +lefiNoiseResistance::Destroy() +{ + clear(); + lefFree((char*) (nums_)); + lefFree((char*) (victims_)); +} + +lefiNoiseResistance::~lefiNoiseResistance() +{ + Destroy(); +} + +void +lefiNoiseResistance::addResistanceNumber(double d) +{ + if (numNums_ == numsAllocated_) { + int max; + double *ne; + int i; + + if (numsAllocated_ == 0) { + max = numsAllocated_ = 2; + numNums_ = 0; + } else + max = numsAllocated_ = numNums_ * 2; + ne = (double*) lefMalloc(sizeof(double) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = nums_[i]; + lefFree((char*) (nums_)); + nums_ = ne; + } + nums_[numNums_] = d; + numNums_ += 1; +} + +void +lefiNoiseResistance::addVictimNoise(double d) +{ + lefiNoiseVictim *r = victims_[numVictims_ - 1]; + r->addVictimNoise(d); +} + +void +lefiNoiseResistance::addVictimLength(double d) +{ + lefiNoiseVictim *r; + if (numVictims_ == victimsAllocated_) { + int max; + lefiNoiseVictim **ne; + int i; + + if (victimsAllocated_ == 0) { + max = victimsAllocated_ = 2; + numVictims_ = 0; + } else + max = victimsAllocated_ = numVictims_ * 2; + + ne = (lefiNoiseVictim**) lefMalloc(sizeof(lefiNoiseVictim*) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = victims_[i]; + lefFree((char*) (victims_)); + victims_ = ne; + } + r = (lefiNoiseVictim*) lefMalloc(sizeof(lefiNoiseVictim)); + r->Init(d); + victims_[numVictims_] = r; + numVictims_ += 1; +} + +int +lefiNoiseResistance::numVictims() const +{ + return numVictims_; +} + +lefiNoiseVictim * +lefiNoiseResistance::victim(int index) const +{ + return victims_[index]; +} + +int +lefiNoiseResistance::numNums() const +{ + return numNums_; +} + +double +lefiNoiseResistance::num(int index) const +{ + return nums_[index]; +} + +// ***************************************************************************** +// lefiNoiseEdge +// ***************************************************************************** + +lefiNoiseEdge::lefiNoiseEdge() +{ + Init(); +} + +void +lefiNoiseEdge::Init() +{ + edge_ = 0; + + numResistances_ = 0; + resistancesAllocated_ = 2; + resistances_ = (lefiNoiseResistance**) lefMalloc(sizeof( + lefiNoiseResistance*) * 2); +} + +void +lefiNoiseEdge::clear() +{ + int i; + lefiNoiseResistance *r; + int maxr = numResistances_; + + for (i = 0; i < maxr; i++) { + r = resistances_[i]; + r->Destroy(); + lefFree((char*) r); + } + + edge_ = 0; + numResistances_ = 0; +} + +void +lefiNoiseEdge::Destroy() +{ + clear(); + lefFree((char*) (resistances_)); +} + +lefiNoiseEdge::~lefiNoiseEdge() +{ + Destroy(); +} + +void +lefiNoiseEdge::addEdge(double d) +{ + edge_ = d; +} + +void +lefiNoiseEdge::addResistanceNumber(double d) +{ + lefiNoiseResistance *r = resistances_[numResistances_ - 1]; + r->addResistanceNumber(d); +} + + +void +lefiNoiseEdge::addResistance() +{ + lefiNoiseResistance *r; + if (numResistances_ == resistancesAllocated_) { + int max; + lefiNoiseResistance **ne; + int i; + + if (resistancesAllocated_ == 0) { + max = resistancesAllocated_ = 2; + numResistances_ = 0; + } else + max = resistancesAllocated_ = numResistances_ * 2; + ne = (lefiNoiseResistance**) lefMalloc(sizeof(lefiNoiseResistance*) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = resistances_[i]; + lefFree((char*) (resistances_)); + resistances_ = ne; + } + r = (lefiNoiseResistance*) lefMalloc(sizeof(lefiNoiseResistance)); + r->Init(); + resistances_[numResistances_] = r; + numResistances_ += 1; +} + +void +lefiNoiseEdge::addVictimNoise(double d) +{ + lefiNoiseResistance *r = resistances_[numResistances_ - 1]; + r->addVictimNoise(d); +} + +void +lefiNoiseEdge::addVictimLength(double d) +{ + lefiNoiseResistance *r = resistances_[numResistances_ - 1]; + r->addVictimLength(d); +} + +int +lefiNoiseEdge::numResistances() +{ + return numResistances_; +} + +lefiNoiseResistance * +lefiNoiseEdge::resistance(int index) +{ + return resistances_[index]; +} + +double +lefiNoiseEdge::edge() +{ + return edge_; +} + +// ***************************************************************************** +// lefiNoiseTable +// ***************************************************************************** + +lefiNoiseTable::lefiNoiseTable() +{ + Init(); +} + +void +lefiNoiseTable::Init() +{ + numEdges_ = 0; + edgesAllocated_ = 2; + edges_ = (lefiNoiseEdge**) lefMalloc(sizeof(lefiNoiseEdge*) * 2); +} + +void +lefiNoiseTable::clear() +{ + int i; + lefiNoiseEdge *r; + int max = numEdges_; + + for (i = 0; i < max; i++) { + r = edges_[i]; + r->Destroy(); + lefFree((char*) r); + } + numEdges_ = 0; +} + +void +lefiNoiseTable::Destroy() +{ + clear(); + lefFree((char*) (edges_)); +} + +lefiNoiseTable::~lefiNoiseTable() +{ + Destroy(); +} + +void +lefiNoiseTable::setup(int i) +{ + num_ = i; + clear(); +} + +void +lefiNoiseTable::newEdge() +{ + lefiNoiseEdge *r; + if (numEdges_ == edgesAllocated_) { + int max; + lefiNoiseEdge **ne; + int i; + + if (edgesAllocated_ == 0) { + max = edgesAllocated_ = 2; + numEdges_ = 0; + } else + max = edgesAllocated_ = numEdges_ * 2; + ne = (lefiNoiseEdge**) lefMalloc(sizeof(lefiNoiseEdge*) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = edges_[i]; + lefFree((char*) (edges_)); + edges_ = ne; + } + r = (lefiNoiseEdge*) lefMalloc(sizeof(lefiNoiseEdge)); + r->Init(); + edges_[numEdges_] = r; + numEdges_ += 1; +} + +void +lefiNoiseTable::addEdge(double d) +{ + lefiNoiseEdge *r = edges_[numEdges_ - 1]; + r->addEdge(d); +} + +void +lefiNoiseTable::addResistance() +{ + lefiNoiseEdge *r = edges_[numEdges_ - 1]; + r->addResistance(); +} + +void +lefiNoiseTable::addResistanceNumber(double d) +{ + lefiNoiseEdge *r = edges_[numEdges_ - 1]; + r->addResistanceNumber(d); +} + +void +lefiNoiseTable::addVictimLength(double d) +{ + lefiNoiseEdge *r = edges_[numEdges_ - 1]; + r->addVictimLength(d); +} + +void +lefiNoiseTable::addVictimNoise(double d) +{ + lefiNoiseEdge *r = edges_[numEdges_ - 1]; + r->addVictimNoise(d); +} + +int +lefiNoiseTable::num() +{ + return num_; +} + +int +lefiNoiseTable::numEdges() +{ + return numEdges_; +} + +lefiNoiseEdge * +lefiNoiseTable::edge(int index) +{ + return edges_[index]; +} + +// ***************************************************************************** +// lefiCorrectionVictim +// ***************************************************************************** + +lefiCorrectionVictim::lefiCorrectionVictim(double d) +{ + Init(d); +} + +void +lefiCorrectionVictim::Init(double d) +{ + length_ = d; + + numCorrections_ = 0; + correctionsAllocated_ = 2; + corrections_ = (double*) lefMalloc(sizeof(double) * 2); +} + +void +lefiCorrectionVictim::clear() +{ + numCorrections_ = 0; +} + +void +lefiCorrectionVictim::Destroy() +{ + clear(); + lefFree((char*) (corrections_)); +} + +lefiCorrectionVictim::~lefiCorrectionVictim() +{ + Destroy(); +} + +void +lefiCorrectionVictim::addVictimCorrection(double d) +{ + if (numCorrections_ == correctionsAllocated_) { + int max; + double *ne; + int i; + + if (correctionsAllocated_ == 0) { + max = correctionsAllocated_ = 2; + numCorrections_ = 0; + } else + max = correctionsAllocated_ = numCorrections_ * 2; + ne = (double*) lefMalloc(sizeof(double) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = corrections_[i]; + lefFree((char*) (corrections_)); + corrections_ = ne; + } + corrections_[numCorrections_] = d; + numCorrections_ += 1; +} + +int +lefiCorrectionVictim::numCorrections() +{ + return numCorrections_; +} + +double +lefiCorrectionVictim::correction(int index) +{ + return corrections_[index]; +} + +double +lefiCorrectionVictim::length() +{ + return length_; +} + +// ***************************************************************************** +// lefiCorrectionResistance +// ***************************************************************************** + +lefiCorrectionResistance::lefiCorrectionResistance() +{ + Init(); +} + +void +lefiCorrectionResistance::Init() +{ + numNums_ = 0; + numsAllocated_ = 1; + nums_ = (double*) lefMalloc(sizeof(double) * 1); + + numVictims_ = 0; + victimsAllocated_ = 2; + victims_ = (lefiCorrectionVictim**) lefMalloc(sizeof( + lefiCorrectionVictim*) * 2); +} + +void +lefiCorrectionResistance::clear() +{ + int i; + lefiCorrectionVictim *r; + int max = numVictims_; + + for (i = 0; i < max; i++) { + r = victims_[i]; + r->Destroy(); + lefFree((char*) r); + } + numVictims_ = 0; + numNums_ = 0; +} + +void +lefiCorrectionResistance::Destroy() +{ + clear(); + lefFree((char*) (nums_)); + lefFree((char*) (victims_)); +} + +lefiCorrectionResistance::~lefiCorrectionResistance() +{ + Destroy(); +} + +void +lefiCorrectionResistance::addResistanceNumber(double d) +{ + if (numNums_ == numsAllocated_) { + int max; + double *ne; + int i; + + if (numsAllocated_) { + max = numsAllocated_ = 2; + numNums_ = 0; + } else + max = numsAllocated_ = numNums_ * 2; + ne = (double*) lefMalloc(sizeof(double) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = nums_[i]; + lefFree((char*) (nums_)); + nums_ = ne; + } + nums_[numNums_] = d; + numNums_ += 1; +} + +void +lefiCorrectionResistance::addVictimCorrection(double d) +{ + lefiCorrectionVictim *r = victims_[numVictims_ - 1]; + r->addVictimCorrection(d); +} + +void +lefiCorrectionResistance::addVictimLength(double d) +{ + lefiCorrectionVictim *r; + if (numVictims_ == victimsAllocated_) { + int max; + lefiCorrectionVictim **ne; + int i; + + if (victimsAllocated_ == 0) { + max = victimsAllocated_ = 2; + numVictims_ = 0; + } else + max = victimsAllocated_ = numVictims_ * 2; + ne = (lefiCorrectionVictim**) lefMalloc(sizeof(lefiCorrectionVictim*) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = victims_[i]; + lefFree((char*) (victims_)); + victims_ = ne; + } + r = (lefiCorrectionVictim*) lefMalloc(sizeof(lefiCorrectionVictim)); + r->Init(d); + victims_[numVictims_] = r; + numVictims_ += 1; +} + +int +lefiCorrectionResistance::numVictims() +{ + return numVictims_; +} + +lefiCorrectionVictim * +lefiCorrectionResistance::victim(int index) +{ + return victims_[index]; +} + +int +lefiCorrectionResistance::numNums() +{ + return numNums_; +} + +double +lefiCorrectionResistance::num(int index) +{ + return nums_[index]; +} + +// ***************************************************************************** +// lefiCorrectionEdge +// ***************************************************************************** + + +lefiCorrectionEdge::lefiCorrectionEdge() +{ + Init(); +} + + +void +lefiCorrectionEdge::Init() +{ + edge_ = 0; + + numResistances_ = 0; + resistancesAllocated_ = 2; + resistances_ = (lefiCorrectionResistance**) lefMalloc(sizeof( + lefiCorrectionResistance*) * 2); +} + + +void +lefiCorrectionEdge::clear() +{ + int i; + lefiCorrectionResistance *r; + int maxr = numResistances_; + + for (i = 0; i < maxr; i++) { + r = resistances_[i]; + r->Destroy(); + lefFree((char*) r); + } + + edge_ = 0; + numResistances_ = 0; +} + + +void +lefiCorrectionEdge::Destroy() +{ + clear(); + lefFree((char*) (resistances_)); +} + + +lefiCorrectionEdge::~lefiCorrectionEdge() +{ + Destroy(); +} + + +void +lefiCorrectionEdge::addEdge(double d) +{ + edge_ = d; +} + + +void +lefiCorrectionEdge::addResistanceNumber(double d) +{ + lefiCorrectionResistance *r = resistances_[numResistances_ - 1]; + r->addResistanceNumber(d); +} + + +void +lefiCorrectionEdge::addResistance() +{ + lefiCorrectionResistance *r; + if (numResistances_ == resistancesAllocated_) { + int max; + lefiCorrectionResistance **ne; + int i; + + if (resistancesAllocated_ == 0) { + max = resistancesAllocated_ = 2; + numResistances_ = 0; + } else + max = resistancesAllocated_ = numResistances_ * 2; + ne = (lefiCorrectionResistance**) lefMalloc + (sizeof(lefiCorrectionResistance*) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = resistances_[i]; + lefFree((char*) (resistances_)); + resistances_ = ne; + } + r = (lefiCorrectionResistance*) lefMalloc(sizeof(lefiCorrectionResistance)); + r->Init(); + resistances_[numResistances_] = r; + numResistances_ += 1; +} + + +void +lefiCorrectionEdge::addVictimCorrection(double d) +{ + lefiCorrectionResistance *r = resistances_[numResistances_ - 1]; + r->addVictimCorrection(d); +} + + +void +lefiCorrectionEdge::addVictimLength(double d) +{ + lefiCorrectionResistance *r = resistances_[numResistances_ - 1]; + r->addVictimLength(d); +} + + +int +lefiCorrectionEdge::numResistances() +{ + return numResistances_; +} + + +lefiCorrectionResistance * +lefiCorrectionEdge::resistance(int index) +{ + return resistances_[index]; +} + + +double +lefiCorrectionEdge::edge() +{ + return edge_; +} + + +// ***************************************************************************** +// lefiCorrectionTable +// ***************************************************************************** + +lefiCorrectionTable::lefiCorrectionTable() +{ + Init(); +} + +void +lefiCorrectionTable::Init() +{ + numEdges_ = 0; + edgesAllocated_ = 2; + edges_ = (lefiCorrectionEdge**) lefMalloc(sizeof(lefiCorrectionEdge*) * 2); +} + +void +lefiCorrectionTable::clear() +{ + int i; + lefiCorrectionEdge *r; + int max = numEdges_; + + for (i = 0; i < max; i++) { + r = edges_[i]; + r->Destroy(); + lefFree((char*) r); + } + numEdges_ = 0; +} + +void +lefiCorrectionTable::Destroy() +{ + clear(); + lefFree((char*) (edges_)); +} + +lefiCorrectionTable::~lefiCorrectionTable() +{ + Destroy(); +} + +void +lefiCorrectionTable::setup(int i) +{ + num_ = i; + clear(); +} + +void +lefiCorrectionTable::newEdge() +{ + lefiCorrectionEdge *r; + if (numEdges_ == edgesAllocated_) { + int max; + lefiCorrectionEdge **ne; + int i; + + if (edgesAllocated_ == 0) { + max = edgesAllocated_ = 2; + numEdges_ = 0; + } else + max = edgesAllocated_ = numEdges_ * 2; + ne = (lefiCorrectionEdge**) lefMalloc(sizeof(lefiCorrectionEdge*) * max); + max /= 2; + for (i = 0; i < max; i++) + ne[i] = edges_[i]; + lefFree((char*) (edges_)); + edges_ = ne; + } + r = (lefiCorrectionEdge*) lefMalloc(sizeof(lefiCorrectionEdge)); + r->Init(); + edges_[numEdges_] = r; + numEdges_ += 1; +} + +void +lefiCorrectionTable::addEdge(double d) +{ + lefiCorrectionEdge *r = edges_[numEdges_ - 1]; + r->addEdge(d); +} + +void +lefiCorrectionTable::addResistanceNumber(double d) +{ + lefiCorrectionEdge *r = edges_[numEdges_ - 1]; + r->addResistanceNumber(d); +} + +void +lefiCorrectionTable::addResistance() +{ + lefiCorrectionEdge *r = edges_[numEdges_ - 1]; + r->addResistance(); +} + +void +lefiCorrectionTable::addVictimLength(double d) +{ + lefiCorrectionEdge *r = edges_[numEdges_ - 1]; + r->addVictimLength(d); +} + +void +lefiCorrectionTable::addVictimCorrection(double d) +{ + lefiCorrectionEdge *r = edges_[numEdges_ - 1]; + r->addVictimCorrection(d); +} + +int +lefiCorrectionTable::num() +{ + return num_; +} + +int +lefiCorrectionTable::numEdges() +{ + return numEdges_; +} + +lefiCorrectionEdge * +lefiCorrectionTable::edge(int index) +{ + return edges_[index]; +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiCrossTalk.hpp b/lefdef/src/lef/lef/lefiCrossTalk.hpp new file mode 100644 index 00000000..8af1e7c1 --- /dev/null +++ b/lefdef/src/lef/lef/lefiCrossTalk.hpp @@ -0,0 +1,273 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiCrossTalk_h +#define lefiCrossTalk_h + +#include +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Structure returned for the noise margin callback. +// This lef construct has two floating point numbers. +struct lefiNoiseMargin { + double high; + double low; +}; + +class lefiNoiseVictim { +public: + lefiNoiseVictim(double d); + void Init(double d); + + void Destroy(); + ~lefiNoiseVictim(); + + void clear(); + + void addVictimNoise(double d); + + double length() const; + int numNoises() const; + double noise(int index) const; + +protected: + double length_; + + int numNoises_; + int noisesAllocated_; + double* noises_; +}; + +class lefiNoiseResistance { +public: + lefiNoiseResistance(); + void Init(); + + void Destroy(); + ~lefiNoiseResistance(); + + void clear(); + + void addResistanceNumber(double d); + void addVictimLength(double d); + void addVictimNoise(double d); + + int numNums() const; + double num(int index) const; + + int numVictims() const; + lefiNoiseVictim* victim(int index) const; + +protected: + int numNums_; + int numsAllocated_; + double* nums_; + + int numVictims_; + int victimsAllocated_; + lefiNoiseVictim** victims_; +}; + +class lefiNoiseEdge { +public: + lefiNoiseEdge(); + void Init(); + + void Destroy(); + ~lefiNoiseEdge(); + + void clear(); + + void addEdge(double d); + void addResistance(); + void addResistanceNumber(double d); + void addVictimLength(double d); + void addVictimNoise(double d); + + double edge(); + int numResistances(); + lefiNoiseResistance* resistance(int index); + +protected: + double edge_; + + int numResistances_; + int resistancesAllocated_; + lefiNoiseResistance** resistances_; +}; + +class lefiNoiseTable { +public: + lefiNoiseTable(); + void Init(); + + void Destroy(); + ~lefiNoiseTable(); + + void setup(int i); + void newEdge(); + void addEdge(double d); + void addResistance(); + void addResistanceNumber(double d); + void addVictimLength(double d); + void addVictimNoise(double d); + + void clear(); + + int num(); + int numEdges(); + lefiNoiseEdge* edge(int index); + +protected: + int num_; + + int numEdges_; + int edgesAllocated_; + lefiNoiseEdge** edges_; +}; + +class lefiCorrectionVictim { +public: + lefiCorrectionVictim(double d); + void Init(double d); + + void Destroy(); + ~lefiCorrectionVictim(); + + void clear(); + + void addVictimCorrection(double d); + + double length(); + int numCorrections(); + double correction(int index); + +protected: + double length_; + + int numCorrections_; + int correctionsAllocated_; + double* corrections_; +}; + +class lefiCorrectionResistance { +public: + lefiCorrectionResistance(); + void Init(); + + void Destroy(); + ~lefiCorrectionResistance(); + + void clear(); + + void addResistanceNumber(double d); + void addVictimLength(double d); + void addVictimCorrection(double d); + + int numNums(); + double num(int index); + + int numVictims(); + lefiCorrectionVictim* victim(int index); + +protected: + int numNums_; + int numsAllocated_; + double* nums_; + + int numVictims_; + int victimsAllocated_; + lefiCorrectionVictim** victims_; +}; + +class lefiCorrectionEdge { +public: + lefiCorrectionEdge(); + void Init(); + + void Destroy(); + ~lefiCorrectionEdge(); + + void clear(); + + void addEdge(double d); + void addResistance(); + void addResistanceNumber(double d); + void addVictimLength(double d); + void addVictimCorrection(double d); + + double edge(); + int numResistances(); + lefiCorrectionResistance* resistance(int index); + +protected: + double edge_; + + int numResistances_; + int resistancesAllocated_; + lefiCorrectionResistance** resistances_; +}; + +class lefiCorrectionTable { +public: + lefiCorrectionTable(); + void Init(); + + void Destroy(); + ~lefiCorrectionTable(); + + void setup(int i); + void newEdge(); + void addEdge(double d); + void addResistance(); + void addResistanceNumber(double d); + void addVictimLength(double d); + void addVictimCorrection(double d); + + void clear(); + + int num(); + int numEdges(); + lefiCorrectionEdge* edge(int index); + +protected: + int num_; + + int numEdges_; + int edgesAllocated_; + lefiCorrectionEdge** edges_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiDebug.cpp b/lefdef/src/lef/lef/lefiDebug.cpp new file mode 100644 index 00000000..867f5c2c --- /dev/null +++ b/lefdef/src/lef/lef/lefiDebug.cpp @@ -0,0 +1,400 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include "lefiDebug.hpp" +#include "lefrReader.hpp" +#include "lex.h" +#include +#include +#include + +#include "lefrData.hpp" +#include "lefrSettings.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ****************** +// Debug flags: +// 0 - +// 1 - malloc debug +// 2 - print each history size bump up. +// 3 - +// 4 - +// 5 - +// 6 - +// 7 - +// 8 - +// 9 - +// 10 - +// 11 - lexer debug +// 12 - +// 13 - print each lex token as read in. +// +// ****************************** + +// Set flag +void +lefiSetDebug(int num, + int value) +{ + lefData->lefDebug[num] = value; +} +// Read flag +int +lefiDebug(int num) +{ + return lefData->lefDebug[num]; +} + +void +lefiError(int check, + int msgNum, + const char *str) +{ + + // check is 1 if the caller function has checked TotalMsgLimit, etc. + + if (!check) { + if ((lefSettings->TotalMsgLimit > 0) && (lefData->lefErrMsgPrinted >= lefSettings->TotalMsgLimit)) + return; + if (lefSettings->MsgLimit[msgNum] > 0) { + if (lefData->msgLimit[0][msgNum] >= lefSettings->MsgLimit[msgNum]) //over the limit + return; + lefData->msgLimit[0][msgNum] = lefData->msgLimit[0][msgNum] + 1; + } + lefData->lefErrMsgPrinted++; + } + + if (lefSettings->ErrorLogFunction) + (*lefSettings->ErrorLogFunction)(str); + else + fprintf(stderr, str); +} + +static char lefiShift [] = { + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + ' ', + '!', + '"', + '#', + '$', + '%', + '&', + '\'', + '(', + ')', + '*', + '+', + ',', + '-', + '.', + '/', + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + ':', + ';', + '<', + '=', + '>', + '?', + '@', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '[', + '\\', + ']', + '^', + '_', + '`', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'l', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '{', + '|', + '}', + '~', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0' +}; + +const char * +lefUpperCase(const char *str) +{ + char *place = (char*) str; + char *to; + int len = strlen(str) + 1; + + if (len > lefData->shiftBufLength) { + if (lefData->shiftBuf == 0) { + len = len < 64 ? 64 : len; + lefData->shiftBuf = (char*) lefMalloc(len); + lefData->shiftBufLength = len; + } else { + lefFree(lefData->shiftBuf); + lefData->shiftBuf = (char*) malloc(len); + lefData->shiftBufLength = len; + } + } + + to = lefData->shiftBuf; + while (*place) { + int i = (int) *place; + place++; + *to++ = lefiShift[i]; + } + *to = '\0'; + + return lefData->shiftBuf; +} + +// for auto upshifting names in case insensitive files +extern const char *lefUpperCase(const char *c); + +// Function is done from #define CASE, compatibility only +const char * +CASE(const char *x) +{ + return !lefData->namesCaseSensitive && lefSettings->ShiftCase ? lefUpperCase(x) : x; +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiDebug.hpp b/lefdef/src/lef/lef/lefiDebug.hpp new file mode 100644 index 00000000..ef02ec9d --- /dev/null +++ b/lefdef/src/lef/lef/lefiDebug.hpp @@ -0,0 +1,52 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiDebug_h +#define lefiDebug_h 1 + +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Set flag +extern void lefiSetDebug (int num, int value) ; + +// Read flag +extern int lefiDebug (int num) ; + +// Error reporting routine +extern void lefiError (int check, int msgNum, const char* msg); + +extern const char* CASE(const char *x); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiDefs.hpp b/lefdef/src/lef/lef/lefiDefs.hpp new file mode 100644 index 00000000..745e72e1 --- /dev/null +++ b/lefdef/src/lef/lef/lefiDefs.hpp @@ -0,0 +1,184 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +// Definitions header file for the DEF Interface + +#ifndef LEFI_DEFS_H +#define LEFI_DEFS_H + +#include +#include + +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +//=================== General Types and Definitions ================= + +#ifndef TRUE +#define TRUE (1) +#endif + +#ifndef FALSE +#define FALSE (0) +#endif + +#ifndef NULL +#define NULL (0) +#endif + +typedef struct point lefPOINT; + +struct point { + double x; + double y; + }; + +typedef struct rect lefRECT; + +struct rect { + lefPOINT ll,ur; + }; + +typedef struct token lefTOKEN; + +struct token { + lefTOKEN *next; + int what; + int data; + lefPOINT pt; + }; + +#define START_LIST 10001 +#define POINT_SPEC 10002 +#define VIA_SPEC 10003 +#define WIDTH_SPEC 10004 +#define LAYER_SPEC 10005 +#define SHAPE_SPEC 10006 + +#ifndef MAXINT +#define MAXINT 0x7FFFFFFF +#endif +#ifndef MININT +#define MININT 0x80000000 +#endif + +#ifndef MIN +#define MIN(x,y) ((x) < (y)? (x) : (y)) +#endif + +#ifndef MIN +#define MAX(x,y) ((x) > (y)? (x) : (y)) +#endif + +#define ROUND(x) ((x) >= 0 ? (int)((x)+0.5) : (int)((x)-0.5)) + +//TOKEN *TokenFromRect(); + +//=================== Enumerated Types ============================ +typedef int lefiBoolean; + +// Every type of object has a unique identifier, and each object +// which is created knows its type, by storing the lefiObjectType_e +// as the first member in the structure. + +typedef enum +{ + // decrease likelihood of accidentally correct values by starting + // at an unusual number + lefiInvalidObject = 41713, + lefiUnknownObject // void * +} lefiObjectType_e; + +// The memory policy controls how an object which refers to or is composed of +// other objects manages those sub-objects, particularly when the parent +// object is copied or deleted. The policy is specified as an argument to the +// constructor or initializer, and it is stored with the parent object. +// +// The memory policy is a generalization of the common distinction between +// deep and shallow copies. When a shallow copy of a parent object is made, +// the copy maintains pointers to the original sub-objects, and the original +// parent remains responsible for deleting those sub-objects. When a deep +// copy of a parent object is made, the copy maintains pointers to new copies +// of each of the sub-objects, and the copy is responsible for deleting the +// new sub-objects. +// +// The lefiPrivateSubObjects policy corresponds to a deep copy, while the the +// lefiReferencedSubObjects policy corresponds to a shallow copy. Usually an +// initial parent object will be created using lefiPrivateSubObjects. When a +// copy is made of that parent object, the copy may either maintain its own +// private versions of each sub-object, or it may refer to the original +// sub-objects. +// +// In certain cases, it is useful to create a deep copy of a parent object, +// even though the new parent object shouldn't be responsible for the new +// sub-objects. In this case, the lefiOrphanSubObjects and +// lefiAdoptedSubObjects policies may be used. lefiOrphanSubObjects is +// specified while creating the deep copy, and then lefiAdoptedSubObjects is +// specified while creating another parent which will take on the +// responsibility for the orphans. +// +// An object's memory policy affects only the sub-objects which it directly +// controls. Those sub-objects themselves may have the same memory policy as +// their parents, or they may have a different memory policy. When a copy is +// made of a child sub-object, the memory policy of the child controls +// whether deep or shallow copies are made of the grandchildren. +// +typedef enum +{ + // decrease likelihood of accidentally correct values by starting + // at an unusual number + lefiInvalidMemoryPolicy = 23950, + lefiPrivateSubObjects, // deep copy + delete + lefiReferencedSubObjects, // shallow copy, no delete + lefiOrphanSubObjects, // deep copy, no delete + lefiAdoptedSubObjects // shallow copy + delete +} lefiMemoryPolicy_e; + +// An opaque pointer for passing user data through from one API +// function to another. +// A handle which a user can set to point to their own data +// on a per-callback basis. (See the comment in lefwWriter.h) + +#define lefiUserData void * +#define lefiUserDataHandle void ** + +#ifdef __SunOS_4_1_3 +extern int strcasecmp(const char*, const char*); +#endif + +#ifdef WIN32 +#define strdup _strdup +#endif + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiEncryptInt.cpp b/lefdef/src/lef/lef/lefiEncryptInt.cpp new file mode 100644 index 00000000..eb59ab24 --- /dev/null +++ b/lefdef/src/lef/lef/lefiEncryptInt.cpp @@ -0,0 +1,48 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include + +#include "lefiEncryptInt.hpp" + +#include "lefrSettings.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ***************************************************************************** +// Global variables +// ***************************************************************************** + +void +lefrEnableReadEncrypted() +{ + lefSettings->ReadEncrypted = 1; +} + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/lef/lef/lefiEncryptInt.hpp b/lefdef/src/lef/lef/lefiEncryptInt.hpp new file mode 100644 index 00000000..46268a2f --- /dev/null +++ b/lefdef/src/lef/lef/lefiEncryptInt.hpp @@ -0,0 +1,47 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef DEFI_ENCRYPTINT_H +#define DEFI_ENCRYPTINT_H + +#include +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Unable the reader to read encrypted lef file. +// This function must be called before lefrRead(). +// / +extern void lefrEnableReadEncrypted(); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiKRDefs.hpp b/lefdef/src/lef/lef/lefiKRDefs.hpp new file mode 100644 index 00000000..757b15b9 --- /dev/null +++ b/lefdef/src/lef/lef/lefiKRDefs.hpp @@ -0,0 +1,37 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiKRDEFS_h +#define lefiKRDEFS_h + +#define BEGIN_LEFDEF_PARSER_NAMESPACE namespace LefDefParser { +#define END_LEFDEF_PARSER_NAMESPACE } +#define USE_LEFDEF_PARSER_NAMESPACE using namespace LefDefParser; + +#endif diff --git a/lefdef/src/lef/lef/lefiLayer.cpp b/lefdef/src/lef/lef/lefiLayer.cpp new file mode 100644 index 00000000..e40e146e --- /dev/null +++ b/lefdef/src/lef/lef/lefiLayer.cpp @@ -0,0 +1,6812 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "lefiLayer.hpp" +#include "lefiDebug.hpp" +#include "lefrSettings.hpp" +#include "lefrCallBacks.hpp" +#include + +#include "lefrData.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ***************************************************************************** +// lefiAntennaPWL +// ***************************************************************************** + +lefiAntennaPWL::lefiAntennaPWL() +: d_(0), + r_(0) +{ + Init(); +} + +lefiAntennaPWL* +lefiAntennaPWL::create() +{ + lefiAntennaPWL* pAntenna = (lefiAntennaPWL*)lefMalloc(sizeof(lefiAntennaPWL)); + pAntenna->d_ = 0; + pAntenna->r_ = 0; + pAntenna->Init(); + + return pAntenna; +} + +void +lefiAntennaPWL::Init() +{ + if (d_) { + lefFree(d_); + } + + if (r_) { + lefFree(r_); + } + + numAlloc_ = 2; + d_ = (double*) lefMalloc(sizeof(double) * 2); + r_ = (double*) lefMalloc(sizeof(double) * 2); + clear(); +} + +lefiAntennaPWL::~lefiAntennaPWL() +{ + Destroy(); +} + +void +lefiAntennaPWL::Destroy() +{ + if (d_) + lefFree((char*) (d_)); + if (r_) + lefFree((char*) (r_)); +} + +// Clear will reset the numPWL_ to zero but keep array allocated +void +lefiAntennaPWL::clear() +{ + numPWL_ = 0; +} + +void +lefiAntennaPWL::addAntennaPWL(double d, + double r) +{ + if (numPWL_ == numAlloc_) { + int i, len; + double *nd; + double *nr; + + if (numAlloc_ == 0) + len = numAlloc_ = 2; + else + len = numAlloc_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * len); + nr = (double*) lefMalloc(sizeof(double) * len); + + for (i = 0; i < numPWL_; i++) { + nd[i] = d_[i]; + nr[i] = r_[i]; + } + lefFree((char*) (d_)); + lefFree((char*) (r_)); + d_ = nd; + r_ = nr; + } + d_[numPWL_] = d; + r_[numPWL_] = r; + numPWL_ += 1; +} + +int +lefiAntennaPWL::numPWL() const +{ + return numPWL_; +} + +double +lefiAntennaPWL::PWLdiffusion(int index) +{ + if (index < 0 || index >= numPWL_) + return 0; + return d_[index]; +} + +double +lefiAntennaPWL::PWLratio(int index) +{ + if (index < 0 || index >= numPWL_) + return 0; + return r_[index]; +} + +// ***************************************************************************** +// lefiLayerDensity +// ***************************************************************************** +lefiLayerDensity::lefiLayerDensity() +{ +} + +void +lefiLayerDensity::Init(const char *type) +{ + int len = strlen(type) + 1; + type_ = (char*) lefMalloc(len); + strcpy(type_, CASE(type)); + oneEntry_ = 0; + numFrequency_ = 0; + frequency_ = 0; + numWidths_ = 0; + widths_ = 0; + numTableEntries_ = 0; + tableEntries_ = 0; + numCutareas_ = 0; + cutareas_ = 0; +} + +void +lefiLayerDensity::Destroy() +{ + if (type_) + lefFree((char*) (type_)); + if (frequency_) + lefFree((char*) (frequency_)); + if (widths_) + lefFree((char*) (widths_)); + if (tableEntries_) + lefFree((char*) (tableEntries_)); + if (cutareas_) + lefFree((char*) (cutareas_)); +} + +lefiLayerDensity::~lefiLayerDensity() +{ + Destroy(); +} + +void +lefiLayerDensity::setOneEntry(double entry) +{ + oneEntry_ = entry; +} + +void +lefiLayerDensity::addFrequency(int num, + double *frequency) +{ + numFrequency_ = num; + frequency_ = frequency; +} + +void +lefiLayerDensity::addWidth(int num, + double *width) +{ + numWidths_ = num; + widths_ = width; +} + +void +lefiLayerDensity::addTableEntry(int num, + double *entry) +{ + numTableEntries_ = num; + tableEntries_ = entry; +} + +void +lefiLayerDensity::addCutarea(int num, + double *cutarea) +{ + numCutareas_ = num; + cutareas_ = cutarea; +} + +int +lefiLayerDensity::hasOneEntry() const +{ + return oneEntry_ ? 1 : 0; +} + +char * +lefiLayerDensity::type() const +{ + return type_; +} + +double +lefiLayerDensity::oneEntry() const +{ + return oneEntry_; +} + +int +lefiLayerDensity::numFrequency() const +{ + return numFrequency_; +} + +double +lefiLayerDensity::frequency(int index) const +{ + return frequency_[index]; +} + +int +lefiLayerDensity::numWidths() const +{ + return numWidths_; +} + +double +lefiLayerDensity::width(int index) const +{ + return widths_[index]; +} + +int +lefiLayerDensity::numTableEntries() const +{ + return numTableEntries_; +} + +double +lefiLayerDensity::tableEntry(int index) const +{ + return tableEntries_[index]; +} + +int +lefiLayerDensity::numCutareas() const +{ + return numCutareas_; +} + +double +lefiLayerDensity::cutArea(int index) const +{ + return cutareas_[index]; +} + +// ***************************************************************************** +// lefiParallel +// ***************************************************************************** + +lefiParallel::lefiParallel() +{ + Init(); +} + +void +lefiParallel::Init() +{ + numLength_ = 0; + numWidth_ = 0; + numWidthAllocated_ = 0; +} + +void +lefiParallel::Destroy() +{ + + if (numLength_) + lefFree((char*) (length_)); + if (numWidth_) { + lefFree((char*) (width_)); + lefFree((char*) (widthSpacing_)); + } + Init(); +} + +lefiParallel::~lefiParallel() +{ + Destroy(); +} + +void +lefiParallel::addParallelLength(int numLength, + double *lengths) +{ + numLength_ = numLength; + length_ = lengths; +} + +void +lefiParallel::addParallelWidth(double width) +{ + if (numWidth_ == numWidthAllocated_) { + int i, numLength; + double *nw; + double *nws; + + numWidthAllocated_ = numWidthAllocated_ ? + numWidthAllocated_ * 2 : 2; + nw = (double*) lefMalloc(sizeof(double) * numWidthAllocated_); + numLength = numLength_; + if (numLength > 0) + nws = (double*) lefMalloc(sizeof(double) * (numWidthAllocated_ * + numLength_)); + else { + // still want to move anything already there + nws = (double*) lefMalloc(sizeof(double) * numWidthAllocated_); + numLength = 1; + } + + for (i = 0; i < numWidth_; i++) + nw[i] = width_[i]; + for (i = 0; i < (numWidth_ * numLength); i++) + nws[i] = widthSpacing_[i]; + if (numWidth_) { + lefFree((char*) (width_)); + lefFree((char*) (widthSpacing_)); + } + width_ = nw; + widthSpacing_ = nws; + } + width_[numWidth_] = width; + numWidth_ += 1; +} + +void +lefiParallel::addParallelWidthSpacing(int numSpacing, + double *spacings) +{ + int i; + for (i = 0; i < numSpacing; i++) + widthSpacing_[(numWidth_ - 1) * numLength_ + i] = + spacings[i]; +} + +int +lefiParallel::numLength() const +{ + return numLength_; +} + +int +lefiParallel::numWidth() const +{ + return numWidth_; +} + +double +lefiParallel::length(int index) const +{ + return length_[index]; +} + +double +lefiParallel::width(int index) const +{ + return width_[index]; +} + +double +lefiParallel::widthSpacing(int iWidth, + int iWidthSpacing) const +{ + return widthSpacing_[iWidth * numLength_ + iWidthSpacing]; +} + +// ***************************************************************************** +// lefiInfluence +// ***************************************************************************** + +lefiInfluence::lefiInfluence() +{ + Init(); +} + +void +lefiInfluence::Init() +{ + numAllocated_ = 0; + numWidth_ = 0; + numDistance_ = 0; + numSpacing_ = 0; +} + +void +lefiInfluence::Destroy() +{ + if (numWidth_) { + lefFree((char*) (width_)); + lefFree((char*) (distance_)); + lefFree((char*) (spacing_)); + } + Init(); +} + +lefiInfluence::~lefiInfluence() +{ + Destroy(); +} + +void +lefiInfluence::addInfluence(double width, + double distance, + double spacing) +{ + int i; + double *nw; + double *nd; + double *ns; + + if (numWidth_ == numAllocated_) { + numAllocated_ = numAllocated_ ? + numAllocated_ * 2 : 2; + nw = (double*) lefMalloc(sizeof(double) * numAllocated_); + nd = (double*) lefMalloc(sizeof(double) * numAllocated_); + ns = (double*) lefMalloc(sizeof(double) * numAllocated_); + + for (i = 0; i < numWidth_; i++) { + nw[i] = width_[i]; + nd[i] = distance_[i]; + ns[i] = spacing_[i]; + } + if (numWidth_ > 0) { + lefFree((char*) (width_)); + lefFree((char*) (distance_)); + lefFree((char*) (spacing_)); + } + width_ = nw; + distance_ = nd; + spacing_ = ns; + } + width_[numWidth_] = width; + distance_[numWidth_] = distance; + spacing_[numWidth_] = spacing; + numWidth_ += 1; +} + +int +lefiInfluence::numInfluenceEntry() const +{ + return numWidth_; +} + +double +lefiInfluence::width(int index) const +{ + return width_[index]; +} + +double +lefiInfluence::distance(int index) const +{ + return distance_[index]; +} + +double +lefiInfluence::spacing(int index) const +{ + return spacing_[index]; +} + +// ***************************************************************************** +// lefiTwoWidths +// ***************************************************************************** + +lefiTwoWidths::lefiTwoWidths() +{ + Init(); +} + +void +lefiTwoWidths::Init() +{ + numWidth_ = 0; + numWidthAllocated_ = 0; +} + +void +lefiTwoWidths::Destroy() +{ + + if (numWidth_) { + lefFree((char*) (width_)); + lefFree((char*) (prl_)); + lefFree((char*) (widthSpacing_)); + lefFree((char*) (numWidthSpacing_)); + lefFree((char*) (atNsp_)); + lefFree((char*) (hasPRL_)); + } + Init(); +} + +lefiTwoWidths::~lefiTwoWidths() +{ + Destroy(); +} + +void +lefiTwoWidths::addTwoWidths(double width, + double prl, + int numSpacing, + double *spacings, + int hasPRL) +{ + int i; + + if (numWidth_ == numWidthAllocated_) { + double *nw; + double *np; + int *nnws; + double *nws; + int *nat; + int *nHasPrl; + + numWidthAllocated_ = numWidthAllocated_ ? + numWidthAllocated_ * 2 : 2; + nw = (double*) lefMalloc(sizeof(double) * numWidthAllocated_); + np = (double*) lefMalloc(sizeof(double) * numWidthAllocated_); + nnws = (int*) lefMalloc(sizeof(int) * numWidthAllocated_); + nat = (int*) lefMalloc(sizeof(int) * numWidthAllocated_); + nHasPrl = (int*) lefMalloc(sizeof(int) * numWidthAllocated_); + + for (i = 0; i < numWidth_; i++) { + nw[i] = width_[i]; + np[i] = prl_[i]; + nnws[i] = numWidthSpacing_[i]; + nat[i] = atNsp_[i]; + nHasPrl[i] = hasPRL_[i]; + } + // The lefData->last value in atNsp_ is the lefData->last total number of spacing + if (numWidth_ > 0) { + nws = (double*) lefMalloc(sizeof(double) * (atNsp_[numWidth_ - 1] + + numSpacing)); + for (i = 0; i < atNsp_[numWidth_ - 1]; i++) { + nws[i] = widthSpacing_[i]; + } + } else + nws = (double*) lefMalloc(sizeof(double) * numSpacing); + + if (numWidth_) { + lefFree((char*) (width_)); + lefFree((char*) (prl_)); + lefFree((char*) (numWidthSpacing_)); + lefFree((char*) (widthSpacing_)); + lefFree((char*) (atNsp_)); + lefFree((char*) (hasPRL_)); + } + width_ = nw; + prl_ = np; + numWidthSpacing_ = nnws; + widthSpacing_ = nws; + atNsp_ = nat; + hasPRL_ = nHasPrl; + } else { // need to allocate memory for widthSpacing_ + double *nws; + nws = (double*) lefMalloc(sizeof(double) * (atNsp_[numWidth_ - 1] + + numSpacing)); + for (i = 0; i < atNsp_[numWidth_ - 1]; i++) { + nws[i] = widthSpacing_[i]; + } + lefFree((char*) (widthSpacing_)); + widthSpacing_ = nws; + } + width_[numWidth_] = width; + prl_[numWidth_] = prl; + hasPRL_[numWidth_] = hasPRL; + numWidthSpacing_[numWidth_] = numSpacing; + if (numWidth_ == 0) { + for (i = 0; i < numSpacing; i++) + widthSpacing_[i] = spacings[i]; + atNsp_[0] = numSpacing; + } else { + for (i = 0; i < numSpacing; i++) + widthSpacing_[atNsp_[numWidth_ - 1] + i] = spacings[i]; + atNsp_[numWidth_] = atNsp_[numWidth_ - 1] + numSpacing; + } + numWidth_ += 1; +} + +int +lefiTwoWidths::numWidth() const +{ + return numWidth_; +} + +double +lefiTwoWidths::width(int index) const +{ + return width_[index]; +} + +int +lefiTwoWidths::hasWidthPRL(int index) const +{ + if (hasPRL_[index]) + return 1; + return 0; +} + +double +lefiTwoWidths::widthPRL(int index) const +{ + return prl_[index]; +} + +int +lefiTwoWidths::numWidthSpacing(int index) const +{ + return numWidthSpacing_[index]; +} + +double +lefiTwoWidths::widthSpacing(int iWidth, + int iWidthSpacing) const +{ + if (iWidth == 0) + return widthSpacing_[iWidthSpacing]; + return widthSpacing_[atNsp_[iWidth - 1] + iWidthSpacing]; +} + +// ***************************************************************************** +// lefiSpacingTable +// ***************************************************************************** + +lefiSpacingTable::lefiSpacingTable() +{ + Init(); +} + +void +lefiSpacingTable::Init() +{ + hasInfluence_ = 0; + parallel_ = 0; + influence_ = 0; + twoWidths_ = 0; // 5.7 +} + +void +lefiSpacingTable::Destroy() +{ + if ((hasInfluence_) && (influence_)) + influence_->Destroy(); + else if (parallel_) { + parallel_->Destroy(); + lefFree((char*) parallel_); + } + if (influence_) + lefFree((char*) influence_); + if (twoWidths_) { + twoWidths_->Destroy(); + lefFree((char*) twoWidths_); + } + Init(); +} + +lefiSpacingTable::~lefiSpacingTable() +{ + Destroy(); +} + +void +lefiSpacingTable::addParallelLength(int numLength, + double *lengths) +{ + lefiParallel *parallel; + + if (parallel_ == 0) { + parallel = (lefiParallel*) lefMalloc(sizeof(lefiParallel)); + parallel->Init(); + parallel_ = parallel; + } else + parallel = parallel_; + parallel->addParallelLength(numLength, lengths); +} + +void +lefiSpacingTable::addParallelWidth(double width) +{ + lefiParallel *parallel; + + parallel = parallel_; + parallel->addParallelWidth(width); +} + +void +lefiSpacingTable::addParallelWidthSpacing(int numSpacing, + double *spacings) +{ + lefiParallel *parallel; + + parallel = parallel_; + parallel->addParallelWidthSpacing(numSpacing, spacings); +} + +void +lefiSpacingTable::setInfluence() +{ + lefiInfluence *influence; + + influence = (lefiInfluence*) lefMalloc(sizeof(lefiInfluence)); + influence->Init(); + influence_ = influence; + hasInfluence_ = 1; +} + +void +lefiSpacingTable::addInfluence(double width, + double distance, + double spacing) +{ + lefiInfluence *influence; + + influence = influence_; + influence->addInfluence(width, distance, spacing); +} + +int +lefiSpacingTable::isInfluence() const +{ + return hasInfluence_ ? 1 : 0; +} + +int +lefiSpacingTable::isParallel() const +{ + return parallel_ ? 1 : 0; +} + +lefiInfluence * +lefiSpacingTable::influence() const +{ + return influence_; +} + +lefiParallel * +lefiSpacingTable::parallel() const +{ + return parallel_; +} + +lefiTwoWidths * +lefiSpacingTable::twoWidths() const +{ + return twoWidths_; +} + +// 5.7 +void +lefiSpacingTable::addTwoWidths(double width, + double runLength, + int numSpacing, + double *spacings, + int hasPRL) +{ + lefiTwoWidths *twoWidths; + + if (twoWidths_ == 0) { + twoWidths = (lefiTwoWidths*) lefMalloc(sizeof(lefiTwoWidths)); + twoWidths->Init(); + twoWidths_ = twoWidths; + } else + twoWidths = twoWidths_; + twoWidths->addTwoWidths(width, runLength, numSpacing, + spacings, hasPRL); +} + +// ***************************************************************************** +// lefiOrthogonal +// ***************************************************************************** + +lefiOrthogonal::lefiOrthogonal() +{ + Init(); +} + +void +lefiOrthogonal::Init() +{ + numAllocated_ = 0; + numCutOrtho_ = 0; + cutWithin_ = 0; + ortho_ = 0; +} + +lefiOrthogonal::~lefiOrthogonal() +{ + Destroy(); +} + +void +lefiOrthogonal::Destroy() +{ + if (cutWithin_) + lefFree((char*) (cutWithin_)); + if (ortho_) + lefFree((char*) (ortho_)); + numAllocated_ = 0; + numCutOrtho_ = 0; +} + +void +lefiOrthogonal::addOrthogonal(double cutWithin, + double ortho) +{ + int i, len; + double *cw; + double *ot; + + if (numAllocated_ == numCutOrtho_) { + if (numAllocated_ == 0) + len = numAllocated_ = 2; + else + len = numAllocated_ *= 2; + cw = (double*) lefMalloc(sizeof(double) * len); + ot = (double*) lefMalloc(sizeof(double) * len); + + for (i = 0; i < numCutOrtho_; i++) { + cw[i] = cutWithin_[i]; + ot[i] = ortho_[i]; + } + if (cutWithin_) + lefFree((char*) (cutWithin_)); + if (ortho_) + lefFree((char*) (ortho_)); + cutWithin_ = cw; + ortho_ = ot; + } + cutWithin_[numCutOrtho_] = cutWithin; + ortho_[numCutOrtho_] = ortho; + numCutOrtho_ += 1; +} + +int +lefiOrthogonal::numOrthogonal() const +{ + return numCutOrtho_; +} + +double +lefiOrthogonal::cutWithin(int index) const +{ + if (index < 0 || index >= numCutOrtho_) + return 0; + return cutWithin_[index]; +} + +double +lefiOrthogonal::orthoSpacing(int index) const +{ + if (index < 0 || index >= numCutOrtho_) + return 0; + return ortho_[index]; +} + +// ***************************************************************************** +// lefiAntennaModel +// ***************************************************************************** + +lefiAntennaModel::lefiAntennaModel() +{ + Init(); +} + +void +lefiAntennaModel::Init() +{ + hasAntennaAreaRatio_ = 0; + hasAntennaDiffAreaRatio_ = 0; + hasAntennaDiffAreaRatioPWL_ = 0; + hasAntennaCumAreaRatio_ = 0; + hasAntennaCumDiffAreaRatio_ = 0; + hasAntennaCumDiffAreaRatioPWL_ = 0; + hasAntennaAreaFactor_ = 0; + hasAntennaAreaFactorDUO_ = 0; + hasAntennaSideAreaRatio_ = 0; + hasAntennaDiffSideAreaRatio_ = 0; + hasAntennaDiffSideAreaRatioPWL_ = 0; + hasAntennaCumSideAreaRatio_ = 0; + hasAntennaCumDiffSideAreaRatio_ = 0; + hasAntennaCumDiffSideAreaRatioPWL_ = 0; + hasAntennaSideAreaFactor_ = 0; + hasAntennaSideAreaFactorDUO_ = 0; + hasAntennaCumRoutingPlusCut_ = 0; // 5.7 + hasAntennaGatePlusDiff_ = 0; // 5.7 + hasAntennaAreaMinusDiff_ = 0; // 5.7 + antennaDiffAreaRatioPWL_ = 0; + antennaCumDiffAreaRatioPWL_ = 0; + antennaDiffSideAreaRatioPWL_ = 0; + antennaCumDiffSideAreaRatioPWL_ = 0; + antennaAreaDiffReducePWL_ = 0; // 5.7 + oxide_ = 0; +} + +void +lefiAntennaModel::Destroy() +{ + if (oxide_) { + lefFree((char*) (oxide_)); + } + + if (antennaDiffAreaRatioPWL_) { + antennaDiffAreaRatioPWL_->Destroy(); + lefFree((char*) (antennaDiffAreaRatioPWL_)); + antennaDiffAreaRatioPWL_ = 0; + } + + if (antennaCumDiffAreaRatioPWL_) { + antennaCumDiffAreaRatioPWL_->Destroy(); + lefFree((char*) (antennaCumDiffAreaRatioPWL_)); + antennaCumDiffAreaRatioPWL_ = 0; + } + + if (antennaDiffSideAreaRatioPWL_) { + antennaDiffSideAreaRatioPWL_->Destroy(); + lefFree((char*) (antennaDiffSideAreaRatioPWL_)); + antennaDiffSideAreaRatioPWL_ = 0; + } + + if (antennaCumDiffSideAreaRatioPWL_) { + antennaCumDiffSideAreaRatioPWL_->Destroy(); + lefFree((char*) (antennaCumDiffSideAreaRatioPWL_)); + antennaCumDiffSideAreaRatioPWL_ = 0; + } + + if (antennaAreaDiffReducePWL_) { // 5.7 + antennaAreaDiffReducePWL_->Destroy(); + lefFree((char*) (antennaAreaDiffReducePWL_)); + antennaAreaDiffReducePWL_ = 0; + } + + Init(); +} + +lefiAntennaModel::~lefiAntennaModel() +{ + Destroy(); +} + +// 5.5 +void +lefiAntennaModel::setAntennaModel(int aOxide) +{ + if (oxide_) + lefFree((char*) (oxide_)); + switch (aOxide) { + case 2: + oxide_ = strdup("OXIDE2"); + break; + case 3: + oxide_ = strdup("OXIDE3"); + break; + case 4: + oxide_ = strdup("OXIDE4"); + break; + default: + oxide_ = strdup("OXIDE1"); + break; + } +} + +// 3/23/2000 -- Wanda da Rosa. The following are for 5.4 syntax +void +lefiAntennaModel::setAntennaAreaRatio(double value) +{ + antennaAreaRatio_ = value; + hasAntennaAreaRatio_ = 1; +} + +void +lefiAntennaModel::setAntennaCumAreaRatio(double value) +{ + antennaCumAreaRatio_ = value; + hasAntennaCumAreaRatio_ = 1; +} + +void +lefiAntennaModel::setAntennaAreaFactor(double value) +{ + antennaAreaFactor_ = value; + hasAntennaAreaFactor_ = 1; +} + +void +lefiAntennaModel::setAntennaSideAreaRatio(double value) +{ + antennaSideAreaRatio_ = value; + hasAntennaSideAreaRatio_ = 1; +} + +void +lefiAntennaModel::setAntennaCumSideAreaRatio(double value) +{ + antennaCumSideAreaRatio_ = value; + hasAntennaCumSideAreaRatio_ = 1; +} + +void +lefiAntennaModel::setAntennaSideAreaFactor(double value) +{ + antennaSideAreaFactor_ = value; + hasAntennaSideAreaFactor_ = 1; +} + +void +lefiAntennaModel::setAntennaValue(lefiAntennaEnum antennaType, + double value) +{ + switch (antennaType) { + case lefiAntennaDAR: + antennaDiffAreaRatio_ = value; + hasAntennaDiffAreaRatio_ = 1; + break; + case lefiAntennaCDAR: + antennaCumDiffAreaRatio_ = value; + hasAntennaCumDiffAreaRatio_ = 1; + break; + case lefiAntennaDSAR: + antennaDiffSideAreaRatio_ = value; + hasAntennaDiffSideAreaRatio_ = 1; + break; + case lefiAntennaCDSAR: + antennaCumDiffSideAreaRatio_ = value; + hasAntennaCumDiffSideAreaRatio_ = 1; + break; + default: + break; + } +} + +void +lefiAntennaModel::setAntennaDUO(lefiAntennaEnum antennaType) +{ + switch (antennaType) { + case lefiAntennaAF: + hasAntennaAreaFactorDUO_ = 1; + break; + case lefiAntennaSAF: + hasAntennaSideAreaFactorDUO_ = 1; + break; + default: + break; + } +} + +// This function 'consumes' data of pwl pointer and send it to the new owner. +// After calling the function 'pwl' should be set to NULL or assigned a new +// value. +void +lefiAntennaModel::setAntennaPWL(lefiAntennaEnum antennaType, + lefiAntennaPWL *pwl) +{ + switch (antennaType) { + case lefiAntennaDAR: + if (antennaDiffAreaRatioPWL_) { + antennaDiffAreaRatioPWL_->Destroy(); + lefFree(antennaDiffAreaRatioPWL_); + } + + antennaDiffAreaRatioPWL_ = pwl; + break; + + case lefiAntennaCDAR: + if (antennaCumDiffAreaRatioPWL_) { + antennaCumDiffAreaRatioPWL_->Destroy(); + lefFree(antennaCumDiffAreaRatioPWL_); + } + + antennaCumDiffAreaRatioPWL_ = pwl; + break; + + case lefiAntennaDSAR: + if (antennaDiffSideAreaRatioPWL_) { + antennaDiffSideAreaRatioPWL_->Destroy(); + lefFree(antennaDiffSideAreaRatioPWL_); + } + + antennaDiffSideAreaRatioPWL_ = pwl; + break; + + case lefiAntennaCDSAR: + if (antennaCumDiffSideAreaRatioPWL_) { + antennaCumDiffSideAreaRatioPWL_->Destroy(); + lefFree(antennaCumDiffSideAreaRatioPWL_); + } + + antennaCumDiffSideAreaRatioPWL_ = pwl; + break; + + case lefiAntennaADR: + if (antennaAreaDiffReducePWL_) { + antennaAreaDiffReducePWL_->Destroy(); + lefFree(antennaAreaDiffReducePWL_); + } + + antennaAreaDiffReducePWL_ = pwl; + break; + + default: + pwl->Destroy(); + lefFree(pwl); + break; + } +} + +// 5.7 +void +lefiAntennaModel::setAntennaCumRoutingPlusCut() +{ + hasAntennaCumRoutingPlusCut_ = 1; +} + +// 5.7 +void +lefiAntennaModel::setAntennaGatePlusDiff(double value) +{ + antennaGatePlusDiff_ = value; + hasAntennaGatePlusDiff_ = 1; +} + +// 5.7 +void +lefiAntennaModel::setAntennaAreaMinusDiff(double value) +{ + antennaAreaMinusDiff_ = value; + hasAntennaAreaMinusDiff_ = 1; +} + +int +lefiAntennaModel::hasAntennaAreaRatio() const +{ + return hasAntennaAreaRatio_; +} + +int +lefiAntennaModel::hasAntennaDiffAreaRatio() const +{ + return hasAntennaDiffAreaRatio_; +} + +int +lefiAntennaModel::hasAntennaCumAreaRatio() const +{ + return hasAntennaCumAreaRatio_; +} + +int +lefiAntennaModel::hasAntennaCumDiffAreaRatio() const +{ + return hasAntennaCumDiffAreaRatio_; +} + +int +lefiAntennaModel::hasAntennaAreaFactor() const +{ + return hasAntennaAreaFactor_; +} + +int +lefiAntennaModel::hasAntennaSideAreaRatio() const +{ + return hasAntennaSideAreaRatio_; +} + +int +lefiAntennaModel::hasAntennaDiffSideAreaRatio() const +{ + return hasAntennaDiffSideAreaRatio_; +} + +int +lefiAntennaModel::hasAntennaCumSideAreaRatio() const +{ + return hasAntennaCumSideAreaRatio_; +} + +int +lefiAntennaModel::hasAntennaCumDiffSideAreaRatio() const +{ + return hasAntennaCumDiffSideAreaRatio_; +} + +int +lefiAntennaModel::hasAntennaSideAreaFactor() const +{ + return hasAntennaSideAreaFactor_; +} + +int +lefiAntennaModel::hasAntennaDiffAreaRatioPWL() const +{ + return antennaDiffAreaRatioPWL_ ? 1 : 0; +} + +int +lefiAntennaModel::hasAntennaCumDiffAreaRatioPWL() const +{ + return antennaCumDiffAreaRatioPWL_ ? 1 : 0; +} + +int +lefiAntennaModel::hasAntennaDiffSideAreaRatioPWL() const +{ + return antennaDiffSideAreaRatioPWL_ ? 1 : 0; +} + +int +lefiAntennaModel::hasAntennaCumDiffSideAreaRatioPWL() const +{ + return antennaCumDiffSideAreaRatioPWL_ ? 1 : 0; +} + +int +lefiAntennaModel::hasAntennaAreaFactorDUO() const +{ + return hasAntennaAreaFactorDUO_; +} + +int +lefiAntennaModel::hasAntennaSideAreaFactorDUO() const +{ + return hasAntennaSideAreaFactorDUO_; +} + +// 5.7 +int +lefiAntennaModel::hasAntennaCumRoutingPlusCut() const +{ + return hasAntennaCumRoutingPlusCut_; +} + +// 5.7 +int +lefiAntennaModel::hasAntennaGatePlusDiff() const +{ + return hasAntennaGatePlusDiff_; +} + +// 5.7 +int +lefiAntennaModel::hasAntennaAreaMinusDiff() const +{ + return hasAntennaAreaMinusDiff_; +} + +// 5.7 +int +lefiAntennaModel::hasAntennaAreaDiffReducePWL() const +{ + return antennaAreaDiffReducePWL_ ? 1 : 0; +} + +// 5.5 +char * +lefiAntennaModel::antennaOxide() const +{ + return oxide_; +} + +double +lefiAntennaModel::antennaAreaRatio() const +{ + return antennaAreaRatio_; +} + +double +lefiAntennaModel::antennaDiffAreaRatio() const +{ + return antennaDiffAreaRatio_; +} + +double +lefiAntennaModel::antennaCumAreaRatio() const +{ + return antennaCumAreaRatio_; +} + +double +lefiAntennaModel::antennaCumDiffAreaRatio() const +{ + return antennaCumDiffAreaRatio_; +} + +double +lefiAntennaModel::antennaAreaFactor() const +{ + return antennaAreaFactor_; +} + +double +lefiAntennaModel::antennaSideAreaRatio() const +{ + return antennaSideAreaRatio_; +} + +double +lefiAntennaModel::antennaDiffSideAreaRatio() const +{ + return antennaDiffSideAreaRatio_; +} + +double +lefiAntennaModel::antennaCumSideAreaRatio() const +{ + return antennaCumSideAreaRatio_; +} + +double +lefiAntennaModel::antennaCumDiffSideAreaRatio() const +{ + return antennaCumDiffSideAreaRatio_; +} + +double +lefiAntennaModel::antennaSideAreaFactor() const +{ + return antennaSideAreaFactor_; +} + +lefiAntennaPWL * +lefiAntennaModel::antennaDiffAreaRatioPWL() const +{ + return antennaDiffAreaRatioPWL_; +} + +lefiAntennaPWL * +lefiAntennaModel::antennaCumDiffAreaRatioPWL() const +{ + return antennaCumDiffAreaRatioPWL_; +} + +lefiAntennaPWL * +lefiAntennaModel::antennaDiffSideAreaRatioPWL() const +{ + return antennaDiffSideAreaRatioPWL_; +} + +lefiAntennaPWL * +lefiAntennaModel::antennaCumDiffSideAreaRatioPWL() const +{ + return antennaCumDiffSideAreaRatioPWL_; +} + +// 5.7 +double +lefiAntennaModel::antennaGatePlusDiff() const +{ + return antennaGatePlusDiff_; +} + +// 5.7 +double +lefiAntennaModel::antennaAreaMinusDiff() const +{ + return antennaAreaMinusDiff_; +} + +// 5.7 +lefiAntennaPWL * +lefiAntennaModel::antennaAreaDiffReducePWL() const +{ + return antennaAreaDiffReducePWL_; +} + +// ***************************************************************************** +// lefiLayer +// ***************************************************************************** +lefiLayer::lefiLayer() +: name_(NULL), + nameSize_(0), + type_(NULL), + typeSize_(0), + layerType_(NULL), + hasPitch_(0), + hasMask_(0), + hasOffset_(0), + hasWidth_(0), + hasArea_(0), + hasSpacing_(0), + hasDiagPitch_(0), + hasDiagWidth_(0), + hasDiagSpacing_(0), + hasSpacingName_(NULL), + hasSpacingLayerStack_(NULL), + hasSpacingAdjacent_(NULL), + hasSpacingRange_(NULL), + hasSpacingUseLengthThreshold_(NULL), + hasSpacingLengthThreshold_(NULL), + hasSpacingCenterToCenter_(NULL), + hasSpacingParallelOverlap_(NULL), + hasSpacingCutArea_(NULL), + hasSpacingEndOfLine_(NULL), + hasSpacingParellelEdge_(NULL), + hasSpacingTwoEdges_(NULL), + hasSpacingAdjacentExcept_(NULL), + hasSpacingSamenet_(NULL), + hasSpacingSamenetPGonly_(NULL), + hasArraySpacing_(0), + hasDirection_(0), + hasResistance_(0), + hasCapacitance_(0), + hasHeight_(0), + hasWireExtension_(0), + hasThickness_(0), + hasShrinkage_(0), + hasCapMultiplier_(0), + hasEdgeCap_(0), + hasAntennaArea_(0), + hasAntennaLength_(0), + hasCurrentDensityPoint_(0), + currentDensity_(0.0), + pitchX_(0.0), + pitchY_(0.0), + offsetX_(0.0), + offsetY_(0.0), + diagPitchX_(0.0), + diagPitchY_(0.0), + diagWidth_(0.0), + diagSpacing_(0.0), + width_(0.0), + area_(0.0), + wireExtension_(0.0), + numSpacings_(0), + spacingsAllocated_(0), + maskNumber_(0), + spacing_(NULL), + spacingAdjacentCuts_(NULL), + spacingAdjacentWithin_(NULL), + spacingCutArea_(NULL), + rangeMin_(NULL), + rangeMax_(NULL), + rangeInfluence_(NULL), + rangeInfluenceRangeMin_(NULL), + rangeInfluenceRangeMax_(NULL), + rangeRangeMin_(NULL), + rangeRangeMax_(NULL), + lengthThreshold_(NULL), + lengthThresholdRangeMin_(NULL), + lengthThresholdRangeMax_(NULL), + numMinimumcut_(0), + minimumcutAllocated_(0), + minimumcut_(NULL), + minimumcutWidth_(NULL), + hasMinimumcutWithin_(NULL), + minimumcutWithin_(NULL), + hasMinimumcutConnection_(NULL), + hasMinimumcutNumCuts_(NULL), + minimumcutLength_(NULL), + minimumcutDistance_(NULL), + maxwidth_(0.0), + minwidth_(0.0), + numMinenclosedarea_(0), + minenclosedareaAllocated_(0), + minenclosedarea_(NULL), + minenclosedareaWidth_(NULL), + protrusionWidth1_(0.0), + protrusionLength_(0.0), + protrusionWidth2_(0.0), + numMinstep_(0), + numMinstepAlloc_(0), + minstep_(NULL), + minstepLengthsum_(NULL), + minstepMaxEdges_(NULL), + minstepMinAdjLength_(NULL), + minstepMinBetLength_(NULL), + minstepXSameCorners_(NULL), + direction_(NULL), + resistance_(0.0), + capacitance_(0.0), + height_(0.0), + thickness_(0.0), + shrinkage_(0.0), + capMultiplier_(0.0), + edgeCap_(0.0), + antennaArea_(0.0), + antennaLength_(0.0), + numCurrentPoints_(0), + currentPointsAllocated_(0), + currentWidths_(NULL), + current_(NULL), + numCapacitancePoints_(0), + capacitancePointsAllocated_(0), + capacitanceWidths_(NULL), + capacitances_(NULL), + numResistancePoints_(0), + resistancePointsAllocated_(0), + resistanceWidths_(NULL), + resistances_(NULL), + numProps_(0), + propsAllocated_(0), + dvalues_(NULL), + types_(NULL), + numAccurrents_(0), + accurrentAllocated_(0), + accurrents_(NULL), + numDccurrents_(0), + dccurrentAllocated_(0), + dccurrents_(NULL), + numNums_(0), + numAllocated_(0), + nums_(NULL), + hasAntennaAreaRatio_(0), + hasAntennaDiffAreaRatio_(0), + hasAntennaDiffAreaRatioPWL_(0), + hasAntennaCumAreaRatio_(0), + hasAntennaCumDiffAreaRatio_(0), + hasAntennaCumDiffAreaRatioPWL_(0), + hasAntennaAreaFactor_(0), + hasAntennaAreaFactorDUO_(0), + hasAntennaSideAreaRatio_(0), + hasAntennaDiffSideAreaRatio_(0), + hasAntennaDiffSideAreaRatioPWL_(0), + hasAntennaCumSideAreaRatio_(0), + hasAntennaCumDiffSideAreaRatio_(0), + hasAntennaCumDiffSideAreaRatioPWL_(0), + hasAntennaSideAreaFactor_(0), + hasAntennaSideAreaFactorDUO_(0), + currentAntennaModel_(0), + numAntennaModel_(0), + antennaModelAllocated_(0), + antennaModel_(NULL), + hasSlotWireWidth_(0), + hasSlotWireLength_(0), + hasSlotWidth_(0), + hasSlotLength_(0), + hasMaxAdjacentSlotSpacing_(0), + hasMaxCoaxialSlotSpacing_(0), + hasMaxEdgeSlotSpacing_(0), + hasSplitWireWidth_(0), + hasMinimumDensity_(0), + hasMaximumDensity_(0), + hasDensityCheckWindow_(0), + hasDensityCheckStep_(0), + hasFillActiveSpacing_(0), + hasTwoWidthPRL_(0), + slotWireWidth_(0.0), + slotWireLength_(0.0), + slotWidth_(0.0), + slotLength_(0.0), + maxAdjacentSlotSpacing_(0.0), + maxCoaxialSlotSpacing_(0.0), + maxEdgeSlotSpacing_(0.0), + splitWireWidth_(0.0), + minimumDensity_(0.0), + maximumDensity_(0.0), + densityCheckWindowLength_(0.0), + densityCheckWindowWidth_(0.0), + densityCheckStep_(0.0), + fillActiveSpacing_(0.0), + numSpacingTable_(0), + spacingTableAllocated_(0), + spacingTable_(NULL), + numEnclosure_(0), + enclosureAllocated_(0), + overhang1_(NULL), + overhang2_(NULL), + encminWidth_(NULL), + cutWithin_(NULL), + minLength_(NULL), + numPreferEnclosure_(0), + preferEnclosureAllocated_(0), + preferOverhang1_(NULL), + preferOverhang2_(NULL), + preferMinWidth_(NULL), + resPerCut_(0.0), + diagMinEdgeLength_(0.0), + numMinSize_(0), + minSizeWidth_(NULL), + minSizeLength_(NULL), + eolWidth_(NULL), + eolWithin_(NULL), + parSpace_(NULL), + parWithin_(NULL), + maxArea_(0.0), + hasLongArray_(0), + viaWidth_(0.0), + cutSpacing_(0.0), + numArrayCuts_(0), + arrayCutsAllocated_(0), + arrayCuts_(NULL), + arraySpacings_(NULL), + hasSpacingTableOrtho_(0), + spacingTableOrtho_(NULL), + notchLength_(NULL), + endOfNotchWidth_(NULL), + minNotchSpacing_(NULL), + eonotchLength_(NULL) +{ + Init(); +} + +void +lefiLayer::Init() +{ + name_ = (char*) lefMalloc(16); + nameSize_ = 16; + type_ = (char*) lefMalloc(16); + typeSize_ = 16; + layerType_ = 0; + numSpacings_ = 0; + spacingsAllocated_ = 0; + numMinimumcut_ = 0; + minimumcutAllocated_ = 0; + numMinenclosedarea_ = 0; + minenclosedareaAllocated_ = 0; + numCurrentPoints_ = 0; + currentPointsAllocated_ = 2; + currentWidths_ = (double*) lefMalloc(sizeof(double) * 2); + current_ = (double*) lefMalloc(sizeof(double) * 2); + numResistancePoints_ = 0; + resistancePointsAllocated_ = 2; + resistanceWidths_ = (double*) lefMalloc(sizeof(double) * 2); + resistances_ = (double*) lefMalloc(sizeof(double) * 2); + numCapacitancePoints_ = 0; + capacitancePointsAllocated_ = 2; + capacitanceWidths_ = (double*) lefMalloc(sizeof(double) * 2); + capacitances_ = (double*) lefMalloc(sizeof(double) * 2); + numProps_ = 0; + propsAllocated_ = 1; + names_ = (char**) lefMalloc(sizeof(char*)); + values_ = (char**) lefMalloc(sizeof(char*)); + dvalues_ = (double*) lefMalloc(sizeof(double)); + types_ = (char*) lefMalloc(sizeof(char)); + numAccurrents_ = 0; + accurrentAllocated_ = 0; + numDccurrents_ = 0; + dccurrentAllocated_ = 0; + numNums_ = 0; + numAllocated_ = 0; + hasTwoWidthPRL_ = 0; + numSpacingTable_ = 0; + spacingTableAllocated_ = 0; + numEnclosure_ = 0; + enclosureAllocated_ = 0; + numPreferEnclosure_ = 0; + preferEnclosureAllocated_ = 0; + numMinSize_ = 0; + numMinstepAlloc_ = 0; + numArrayCuts_ = 0; + arrayCutsAllocated_ = 0; + cutSpacing_ = 0; // Initialize ARRAYSPACING + currentAntennaModel_ = 0; + numAntennaModel_ = 0; + antennaModelAllocated_ = 0; + antennaModel_ = 0; + hasSpacingTableOrtho_ = 0; + spacing_ = 0; + spacingName_ = 0; + spacingAdjacentCuts_ = 0; + spacingAdjacentWithin_ = 0; + hasSpacingName_ = 0; + hasSpacingLayerStack_ = 0; + hasSpacingAdjacent_ = 0; + hasSpacingCenterToCenter_ = 0; + hasSpacingParallelOverlap_ = 0; + hasSpacingEndOfLine_ = 0; + eolWidth_ = 0; + eolWithin_ = 0; + hasSpacingParellelEdge_ = 0; + parSpace_ = 0; + parWithin_ = 0; + hasSpacingTwoEdges_ = 0; + hasSpacingAdjacentExcept_ = 0; + hasSpacingSamenet_ = 0; + hasSpacingSamenetPGonly_ = 0; + hasSpacingCutArea_ = 0; + spacingCutArea_ = 0; + notchLength_ = 0; + endOfNotchWidth_ = 0; + minNotchSpacing_ = 0; + eonotchLength_ = 0; + rangeMin_ = 0; + rangeMax_ = 0; + rangeInfluence_ = 0; + rangeInfluenceRangeMin_ = 0; + rangeInfluenceRangeMax_ = 0; + rangeRangeMin_ = 0; + rangeRangeMax_ = 0; + lengthThreshold_ = 0; + lengthThresholdRangeMin_ = 0; + lengthThresholdRangeMax_ = 0; + hasSpacingRange_ = 0; + hasSpacingUseLengthThreshold_ = 0; + hasSpacingLengthThreshold_ = 0; + clear(); +} + +void +lefiLayer::Destroy() +{ + + clear(); + lefFree(name_); + nameSize_ = 0; + lefFree(type_); + typeSize_ = 0; + if (spacing_) + lefFree((char*) (spacing_)); + spacing_ = 0; + if (spacingTable_) + lefFree((char*) spacingTable_); + spacingTable_ = 0; + if (spacingName_) + lefFree((char*) (spacingName_)); + spacingName_ = 0; + if (spacingAdjacentCuts_) + lefFree((char*) (spacingAdjacentCuts_)); + spacingAdjacentCuts_ = 0; + if (spacingAdjacentWithin_) + lefFree((char*) (spacingAdjacentWithin_)); + spacingAdjacentWithin_ = 0; + if (hasSpacingName_) + lefFree((char*) (hasSpacingName_)); + hasSpacingName_ = 0; + if (hasSpacingLayerStack_) + lefFree((char*) (hasSpacingLayerStack_)); + hasSpacingLayerStack_ = 0; + if (hasSpacingAdjacent_) + lefFree((char*) (hasSpacingAdjacent_)); + hasSpacingAdjacent_ = 0; + if (hasSpacingCenterToCenter_) + lefFree((char*) (hasSpacingCenterToCenter_)); + hasSpacingCenterToCenter_ = 0; + if (hasSpacingParallelOverlap_) + lefFree((char*) (hasSpacingParallelOverlap_)); + hasSpacingParallelOverlap_ = 0; + if (hasSpacingEndOfLine_) + lefFree((char*) (hasSpacingEndOfLine_)); + hasSpacingEndOfLine_ = 0; + if (eolWidth_) + lefFree((char*) (eolWidth_)); + eolWidth_ = 0; + if (eolWithin_) + lefFree((char*) (eolWithin_)); + eolWithin_ = 0; + if (hasSpacingParellelEdge_) + lefFree((char*) (hasSpacingParellelEdge_)); + hasSpacingParellelEdge_ = 0; + if (parSpace_) + lefFree((char*) (parSpace_)); + parSpace_ = 0; + if (parWithin_) + lefFree((char*) (parWithin_)); + parWithin_ = 0; + if (hasSpacingTwoEdges_) + lefFree((char*) (hasSpacingTwoEdges_)); + hasSpacingTwoEdges_ = 0; + if (hasSpacingAdjacentExcept_) + lefFree((char*) (hasSpacingAdjacentExcept_)); + hasSpacingAdjacentExcept_ = 0; + if (hasSpacingSamenet_) + lefFree((char*) (hasSpacingSamenet_)); + hasSpacingSamenet_ = 0; + if (hasSpacingSamenetPGonly_) + lefFree((char*) (hasSpacingSamenetPGonly_)); + hasSpacingSamenetPGonly_ = 0; + if (hasSpacingCutArea_) + lefFree((char*) (hasSpacingCutArea_)); + hasSpacingCutArea_ = 0; + if (spacingCutArea_) + lefFree((char*) (spacingCutArea_)); + spacingCutArea_ = 0; + if (notchLength_) + lefFree((char*) (notchLength_)); + notchLength_ = 0; + if (endOfNotchWidth_) + lefFree((char*) (endOfNotchWidth_)); + endOfNotchWidth_ = 0; + if (minNotchSpacing_) + lefFree((char*) (minNotchSpacing_)); + minNotchSpacing_ = 0; + if (eonotchLength_) + lefFree((char*) (eonotchLength_)); + eonotchLength_ = 0; + if (rangeMin_) + lefFree((char*) (rangeMin_)); + rangeMin_ = 0; + if (rangeMax_) + lefFree((char*) (rangeMax_)); + rangeMax_ = 0; + if (rangeInfluence_) + lefFree((char*) (rangeInfluence_)); + rangeInfluence_ = 0; + if (rangeInfluenceRangeMin_) + lefFree((char*) (rangeInfluenceRangeMin_)); + rangeInfluenceRangeMin_ = 0; + if (rangeInfluenceRangeMax_) + lefFree((char*) (rangeInfluenceRangeMax_)); + rangeInfluenceRangeMax_ = 0; + if (rangeRangeMin_) + lefFree((char*) (rangeRangeMin_)); + rangeRangeMin_ = 0; + if (rangeRangeMax_) + lefFree((char*) (rangeRangeMax_)); + rangeRangeMax_ = 0; + if (lengthThreshold_) + lefFree((char*) (lengthThreshold_)); + lengthThreshold_ = 0; + if (lengthThresholdRangeMin_) + lefFree((char*) (lengthThresholdRangeMin_)); + lengthThresholdRangeMin_ = 0; + if (lengthThresholdRangeMax_) + lefFree((char*) (lengthThresholdRangeMax_)); + lengthThresholdRangeMax_ = 0; + if (hasSpacingRange_) + lefFree((char*) (hasSpacingRange_)); + hasSpacingRange_ = 0; + if (hasSpacingUseLengthThreshold_) + lefFree((char*) (hasSpacingUseLengthThreshold_)); + hasSpacingUseLengthThreshold_ = 0; + if (hasSpacingLengthThreshold_) + lefFree((char*) (hasSpacingLengthThreshold_)); + hasSpacingLengthThreshold_ = 0; + lefFree((char*) (currentWidths_)); + lefFree((char*) (current_)); + lefFree((char*) (resistanceWidths_)); + lefFree((char*) (resistances_)); + lefFree((char*) (capacitanceWidths_)); + lefFree((char*) (capacitances_)); + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + currentPointsAllocated_ = 0; + resistancePointsAllocated_ = 0; + capacitancePointsAllocated_ = 0; + propsAllocated_ = 0; +} + +lefiLayer::~lefiLayer() +{ + Destroy(); +} + +void +lefiLayer::clear() +{ + int i; + lefiLayerDensity *p; + lefiSpacingTable *sp; + lefiAntennaModel *aO; // 5.5 + + if (name_) + *(name_) = 0; + if (type_) + *(type_) = 0; + if (layerType_) { + lefFree(layerType_); + layerType_ = 0; + } + hasMask_ = 0; + hasPitch_ = 0; + hasOffset_ = 0; + hasWidth_ = 0; + hasArea_ = 0; + hasDiagPitch_ = 0; + hasDiagWidth_ = 0; + hasDiagSpacing_ = 0; + hasWireExtension_ = 0; + hasSpacing_ = 0; + hasDirection_ = 0; + hasResistance_ = 0; + hasCapacitance_ = 0; + hasHeight_ = 0; + hasThickness_ = 0; + hasShrinkage_ = 0; + hasCapMultiplier_ = 0; + hasEdgeCap_ = 0; + hasAntennaArea_ = 0; + hasAntennaLength_ = 0; + hasCurrentDensityPoint_ = 0; + for (i = 0; i < numSpacings_; i++) + if (spacingName_[i]) + lefFree(spacingName_[i]); + for (i = 0; i < numProps_; i++) { + if (names_[i]) + lefFree(names_[i]); + if (values_[i]) + lefFree(values_[i]); + dvalues_[i] = 0; + } + numProps_ = 0; + numSpacings_ = 0; + numCurrentPoints_ = 0; + if (numAccurrents_) { + for (i = 0; i < numAccurrents_; i++) { + p = accurrents_[i]; + p->Destroy(); + lefFree((char*) p); + } + numAccurrents_ = 0; + accurrentAllocated_ = 0; + lefFree((char*) (accurrents_)); + accurrents_ = 0; + } + if (numDccurrents_) { + for (i = 0; i < numDccurrents_; i++) { + p = dccurrents_[i]; + p->Destroy(); + lefFree((char*) p); + } + numDccurrents_ = 0; + dccurrentAllocated_ = 0; + lefFree((char*) (dccurrents_)); + dccurrents_ = 0; + } + // 8/29/2001 - Wanda da Rosa. The following are 5.4 enhancements + hasSlotWireWidth_ = 0; + hasSlotWireLength_ = 0; + hasSlotWidth_ = 0; + hasSlotLength_ = 0; + hasMaxAdjacentSlotSpacing_ = 0; + hasMaxCoaxialSlotSpacing_ = 0; + hasMaxEdgeSlotSpacing_ = 0; + hasSplitWireWidth_ = 0; + hasMinimumDensity_ = 0; + hasMaximumDensity_ = 0; + hasDensityCheckWindow_ = 0; + hasDensityCheckStep_ = 0; + hasTwoWidthPRL_ = 0; + hasFillActiveSpacing_ = 0; + // 5.5 + if (numMinimumcut_ > 0) { + // Has allocated memories + lefFree((char*) (minimumcut_)); + lefFree((char*) (minimumcutWidth_)); + lefFree((char*) (hasMinimumcutWithin_)); + lefFree((char*) (minimumcutWithin_)); + lefFree((char*) (hasMinimumcutConnection_)); + lefFree((char*) (hasMinimumcutNumCuts_)); + lefFree((char*) (minimumcutLength_)); + lefFree((char*) (minimumcutDistance_)); + for (i = 0; i < numMinimumcut_; i++) { + if (minimumcutConnection_[i]) + lefFree((char*) (minimumcutConnection_[i])); + } + lefFree((char*) (minimumcutConnection_)); + numMinimumcut_ = 0; + minimumcutAllocated_ = 0; + } + maxwidth_ = -1; + minwidth_ = -1; + if (numMinenclosedarea_ > 0) { + lefFree((char*) (minenclosedarea_)); + lefFree((char*) (minenclosedareaWidth_)); + numMinenclosedarea_ = 0; + minenclosedareaAllocated_ = 0; + } + if (numMinstepAlloc_ > 0) { + for (i = 0; i < numMinstep_; i++) { // 5.6 + lefFree((char*) (minstepType_[i])); + } + lefFree((char*) (minstep_)); + lefFree((char*) (minstepType_)); + lefFree((char*) (minstepLengthsum_)); + lefFree((char*) (minstepMaxEdges_)); + lefFree((char*) (minstepMinAdjLength_)); + lefFree((char*) (minstepMinBetLength_)); + lefFree((char*) (minstepXSameCorners_)); + } + numMinstepAlloc_ = 0; + numMinstep_ = 0; + protrusionWidth1_ = -1; + protrusionLength_ = -1; + protrusionWidth2_ = -1; + if (numSpacingTable_) { + for (i = 0; i < numSpacingTable_; i++) { + sp = spacingTable_[i]; + sp->Destroy(); + lefFree((char*) sp); + } + } + numSpacingTable_ = 0; + spacingTableAllocated_ = 0; + + for (i = 0; i < numAntennaModel_; i++) { // 5.5 + aO = antennaModel_[i]; + aO->Destroy(); + } + for (i = 0; i < antennaModelAllocated_; i++) { // 5.5 + lefFree((char*) antennaModel_[i]); + } + + if (antennaModel_) // 5.5 + lefFree((char*) (antennaModel_)); + antennaModel_ = 0; + currentAntennaModel_ = 0; + numAntennaModel_ = 0; + antennaModelAllocated_ = 0; + + if (nums_) + lefFree((char*) (nums_)); + + // 5.6 + if (numEnclosure_) { + for (i = 0; i < numEnclosure_; i++) { + if (enclosureRules_[i]) + lefFree((char*) (enclosureRules_[i])); + } + lefFree((char*) (enclosureRules_)); + lefFree((char*) (overhang1_)); + lefFree((char*) (overhang2_)); + lefFree((char*) (encminWidth_)); + lefFree((char*) (cutWithin_)); + lefFree((char*) (minLength_)); + numEnclosure_ = 0; + enclosureAllocated_ = 0; + } + if (numPreferEnclosure_) { + for (i = 0; i < numPreferEnclosure_; i++) { + if (preferEnclosureRules_[i]) + lefFree((char*) (preferEnclosureRules_[i])); + } + lefFree((char*) (preferEnclosureRules_)); + lefFree((char*) (preferOverhang1_)); + lefFree((char*) (preferOverhang2_)); + lefFree((char*) (preferMinWidth_)); + numPreferEnclosure_ = 0; + preferEnclosureAllocated_ = 0; + } + resPerCut_ = 0; + diagMinEdgeLength_ = 0; + if (numMinSize_) { + lefFree((char*) (minSizeWidth_)); + lefFree((char*) (minSizeLength_)); + numMinSize_ = 0; + } + maxArea_ = 0; + hasLongArray_ = 0; + viaWidth_ = 0; + cutSpacing_ = 0; + if (numArrayCuts_) { + lefFree((char*) (arrayCuts_)); + lefFree((char*) (arraySpacings_)); + } + arrayCuts_ = 0; + arraySpacings_ = 0; + arrayCutsAllocated_ = 0; + numArrayCuts_ = 0; + + // 5.7 + if (hasSpacingTableOrtho_) { + spacingTableOrtho_->Destroy(); + lefFree((char*) (spacingTableOrtho_)); + } + hasSpacingTableOrtho_ = 0; +} + + +void +lefiLayer::setName(const char *name) +{ + int len = strlen(name) + 1; + clear(); + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); +} + +void +lefiLayer::setType(const char *typ) +{ + int len = strlen(typ) + 1; + if (len > typeSize_) { + lefFree(type_); + type_ = (char*) lefMalloc(len); + typeSize_ = len; + } + strcpy(type_, CASE(typ)); +} + +// 5.8 +void +lefiLayer::setLayerType(const char *layerType) +{ + if (layerType_) + lefFree(layerType_); + layerType_ = strdup(layerType); +} + +void +lefiLayer::setPitch(double num) +{ + hasPitch_ = 1; + pitchX_ = num; + pitchY_ = -1; +} + +// 5.6 +void +lefiLayer::setPitchXY(double xdist, + double ydist) +{ + hasPitch_ = 2; // 2 means it has X & Y values + pitchX_ = xdist; + pitchY_ = ydist; +} + +void +lefiLayer::setMask(int num) +{ + hasMask_ = 1; + maskNumber_ = num; +} + +void +lefiLayer::setOffset(double num) +{ + hasOffset_ = 1; + offsetX_ = num; + offsetY_ = -1; +} + +// 5.6 +void +lefiLayer::setOffsetXY(double xdist, + double ydist) +{ + hasOffset_ = 2; // 2 means it has X & Y values + offsetX_ = xdist; + offsetY_ = ydist; +} + +void +lefiLayer::setWidth(double num) +{ + hasWidth_ = 1; + width_ = num; +} + +void +lefiLayer::setArea(double num) +{ + hasArea_ = 1; + area_ = num; +} + +// 5.6 +void +lefiLayer::setDiagPitch(double dist) +{ + hasDiagPitch_ = 1; + diagPitchX_ = dist; + diagPitchY_ = -1; +} + +// 5.6 +void +lefiLayer::setDiagPitchXY(double xdist, + double ydist) +{ + hasDiagPitch_ = 2; + diagPitchX_ = xdist; + diagPitchY_ = ydist; +} + +// 5.6 +void +lefiLayer::setDiagWidth(double width) +{ + hasDiagWidth_ = 1; + diagWidth_ = width; +} + +// 5.6 +void +lefiLayer::setDiagSpacing(double spacing) +{ + hasDiagSpacing_ = 1; + diagSpacing_ = spacing; +} + +void +lefiLayer::setWireExtension(double num) +{ + hasWireExtension_ = 1; + wireExtension_ = num; +} + +// 5.5 +void +lefiLayer::setMaxwidth(double width) +{ + maxwidth_ = width; +} + +// 5.5 +void +lefiLayer::setMinwidth(double width) +{ + minwidth_ = width; +} + +// 5.5 +void +lefiLayer::addMinenclosedarea(double area) +{ + if (numMinenclosedarea_ == minenclosedareaAllocated_) { + double *na; + double *nw; + int i, lim; + + if (minenclosedareaAllocated_ == 0) { + lim = minenclosedareaAllocated_ = 2; + na = (double*) lefMalloc(sizeof(double) * lim); + nw = (double*) lefMalloc(sizeof(double) * lim); + } else { + lim = minenclosedareaAllocated_ * 2; + minenclosedareaAllocated_ = lim; + na = (double*) lefMalloc(sizeof(double) * lim); + nw = (double*) lefMalloc(sizeof(double) * lim); + lim /= 2; + for (i = 0; i < lim; i++) { + na[i] = minenclosedarea_[i]; + nw[i] = minenclosedareaWidth_[i]; + } + lefFree((char*) (minenclosedarea_)); + lefFree((char*) (minenclosedareaWidth_)); + } + minenclosedarea_ = na; + minenclosedareaWidth_ = nw; + } + minenclosedarea_[numMinenclosedarea_] = area; + minenclosedareaWidth_[numMinenclosedarea_] = -1; + numMinenclosedarea_ += 1; +} + +// 5.5 +void +lefiLayer::addMinenclosedareaWidth(double width) +{ + minenclosedareaWidth_[numMinenclosedarea_ - 1] = width; +} + +// 5.5 +void +lefiLayer::addMinimumcut(int mincut, + double width) +{ + if (numMinimumcut_ == minimumcutAllocated_) { + int *nc; + double *nw; + int *hcd; + double *ncd; + int *hm; + char **nud; + int *hc; + double *nl; + double *nd; + int i, lim; + + if (minimumcutAllocated_ == 0) { + lim = minimumcutAllocated_ = 2; + nc = (int*) lefMalloc(sizeof(int) * lim); + nw = (double*) lefMalloc(sizeof(double) * lim); + hcd = (int*) lefMalloc(sizeof(int) * lim); + ncd = (double*) lefMalloc(sizeof(double) * lim); + hm = (int*) lefMalloc(sizeof(int) * lim); + nud = (char**) lefMalloc(sizeof(char*) * lim); + hc = (int*) lefMalloc(sizeof(int) * lim); + nl = (double*) lefMalloc(sizeof(double) * lim); + nd = (double*) lefMalloc(sizeof(double) * lim); + } else { + lim = minimumcutAllocated_ * 2; + minimumcutAllocated_ = lim; + nc = (int*) lefMalloc(sizeof(int) * lim); + nw = (double*) lefMalloc(sizeof(double) * lim); + hcd = (int*) lefMalloc(sizeof(int) * lim); + ncd = (double*) lefMalloc(sizeof(double) * lim); + hm = (int*) lefMalloc(sizeof(int) * lim); + nud = (char**) lefMalloc(sizeof(char*) * lim); + hc = (int*) lefMalloc(sizeof(int) * lim); + nl = (double*) lefMalloc(sizeof(double) * lim); + nd = (double*) lefMalloc(sizeof(double) * lim); + lim /= 2; + for (i = 0; i < lim; i++) { + nc[i] = minimumcut_[i]; + nw[i] = minimumcutWidth_[i]; + hcd[i] = hasMinimumcutWithin_[i]; + ncd[i] = minimumcutWithin_[i]; + hm[i] = hasMinimumcutConnection_[i]; + nud[i] = minimumcutConnection_[i]; + hc[i] = hasMinimumcutNumCuts_[i]; + nl[i] = minimumcutLength_[i]; + nd[i] = minimumcutDistance_[i]; + } + lefFree((char*) (minimumcut_)); + lefFree((char*) (minimumcutWidth_)); + lefFree((char*) (hasMinimumcutWithin_)); + lefFree((char*) (minimumcutWithin_)); + lefFree((char*) (hasMinimumcutConnection_)); + lefFree((char*) (minimumcutConnection_)); + lefFree((char*) (hasMinimumcutNumCuts_)); + lefFree((char*) (minimumcutLength_)); + lefFree((char*) (minimumcutDistance_)); + } + minimumcut_ = nc; + minimumcutWidth_ = nw; + hasMinimumcutWithin_ = hcd; + minimumcutWithin_ = ncd; + hasMinimumcutConnection_ = hm; + minimumcutConnection_ = nud; + hasMinimumcutNumCuts_ = hc; + minimumcutLength_ = nl; + minimumcutDistance_ = nd; + } + minimumcut_[numMinimumcut_] = mincut; + minimumcutWidth_[numMinimumcut_] = width; + hasMinimumcutWithin_[numMinimumcut_] = 0; + minimumcutWithin_[numMinimumcut_] = 0; + hasMinimumcutConnection_[numMinimumcut_] = 0; + minimumcutConnection_[numMinimumcut_] = 0; + hasMinimumcutNumCuts_[numMinimumcut_] = 0; + minimumcutLength_[numMinimumcut_] = 0; + minimumcutDistance_[numMinimumcut_] = 0; + numMinimumcut_ += 1; +} + +// 5.7 +void +lefiLayer::addMinimumcutWithin(double cutDistance) +{ + hasMinimumcutWithin_[numMinimumcut_ - 1] = 1; + minimumcutWithin_[numMinimumcut_ - 1] = cutDistance; +} + +// 5.5 +void +lefiLayer::addMinimumcutConnect(const char *connectType) +{ + if (connectType && (strcmp(connectType, "") != 0)) { + hasMinimumcutConnection_[numMinimumcut_ - 1] = 1; + minimumcutConnection_[numMinimumcut_ - 1] = + strdup(connectType); + } +} + +// 5.5 +void +lefiLayer::addMinimumcutLengDis(double length, + double width) +{ + hasMinimumcutNumCuts_[numMinimumcut_ - 1] = 1; + minimumcutLength_[numMinimumcut_ - 1] = length; + minimumcutDistance_[numMinimumcut_ - 1] = width; +} + +// 5.5, 5.6 switched to multiple +void +lefiLayer::addMinstep(double distance) +{ + double *ms; + char **mt; + double *ml; + int *me; + double *ma; + double *mb; + int *mx; + int i; + + if (numMinstep_ == numMinstepAlloc_) { + int len; + if (numMinstepAlloc_ == 0) { + len = numMinstepAlloc_ = 2; + ms = (double*) lefMalloc(sizeof(double) * len); + mt = (char**) lefMalloc(sizeof(char*) * len); + ml = (double*) lefMalloc(sizeof(double) * len); + me = (int*) lefMalloc(sizeof(int) * len); + ma = (double*) lefMalloc(sizeof(double) * len); + mb = (double*) lefMalloc(sizeof(double) * len); + mx = (int*) lefMalloc(sizeof(int) * len); + } else { + len = numMinstepAlloc_ *= 2; + ms = (double*) lefMalloc(sizeof(double) * len); + mt = (char**) lefMalloc(sizeof(char*) * len); + ml = (double*) lefMalloc(sizeof(double) * len); + me = (int*) lefMalloc(sizeof(int) * len); + ma = (double*) lefMalloc(sizeof(double) * len); + mb = (double*) lefMalloc(sizeof(double) * len); + mx = (int*) lefMalloc(sizeof(int) * len); + + for (i = 0; i < numMinstep_; i++) { + ms[i] = minstep_[i]; + mt[i] = minstepType_[i]; + ml[i] = minstepLengthsum_[i]; + me[i] = minstepMaxEdges_[i]; + ma[i] = minstepMinAdjLength_[i]; + mb[i] = minstepMinBetLength_[i]; + mx[i] = minstepXSameCorners_[i]; + } + lefFree((char*) (minstep_)); + lefFree((char*) (minstepType_)); + lefFree((char*) (minstepLengthsum_)); + lefFree((char*) (minstepMaxEdges_)); + lefFree((char*) (minstepMinAdjLength_)); + lefFree((char*) (minstepMinBetLength_)); + lefFree((char*) (minstepXSameCorners_)); + } + minstep_ = ms; + minstepType_ = mt; + minstepLengthsum_ = ml; + minstepMaxEdges_ = me; + minstepMinAdjLength_ = ma; + minstepMinBetLength_ = mb; + minstepXSameCorners_ = mx; + } + minstep_[numMinstep_] = distance; + minstepType_[numMinstep_] = 0; + minstepLengthsum_[numMinstep_] = -1; + minstepMaxEdges_[numMinstep_] = -1; + minstepMinAdjLength_[numMinstep_] = -1; + minstepMinBetLength_[numMinstep_] = -1; + minstepXSameCorners_[numMinstep_] = -1; + numMinstep_ += 1; +} + +// 5.6 +void +lefiLayer::addMinstepType(char *type) +{ + minstepType_[numMinstep_ - 1] = strdup(type); +} + +// 5.6 +void +lefiLayer::addMinstepLengthsum(double maxLength) +{ + minstepLengthsum_[numMinstep_ - 1] = maxLength; +} + +// 5.7 +void +lefiLayer::addMinstepMaxedges(int maxEdges) +{ + minstepMaxEdges_[numMinstep_ - 1] = maxEdges; +} + +// 5.7 +void +lefiLayer::addMinstepMinAdjLength(double adjLength) +{ + minstepMinAdjLength_[numMinstep_ - 1] = adjLength; +} + +// 5.7 +void +lefiLayer::addMinstepMinBetLength(double betLength) +{ + minstepMinBetLength_[numMinstep_ - 1] = betLength; +} + +// 5.7 +void +lefiLayer::addMinstepXSameCorners() +{ + minstepXSameCorners_[numMinstep_ - 1] = 1; +} + +// 5.5 +void +lefiLayer::setProtrusion(double width1, + double length, + double width2) +{ + protrusionWidth1_ = width1; + protrusionLength_ = length; + protrusionWidth2_ = width2; +} + +// wmd -- pcr 282799, need to make left_, right_ as arrays +// when bumping to new list, need to copy also hasUseLengthThreshold_ +// and lengthThreshold_ +void +lefiLayer::setSpacingMin(double dist) +{ + if (numSpacings_ == spacingsAllocated_) { + double *nd; + char **nn; // Also set up the spacing name + int *nsn; // hasSpacingName_ + int *nss; // hasSpacingLayerStack_ + int *nsa; // hasSpacingAdjacent_ + int *nr; // hasSpacingRange_ + int *nac; // adjacentCuts_ + int *ncc; // hasCenterToCenter_ + int *hpo; // hasSpacingParallelOverlap_ + int *heol; // hasSpacingEndOfLine_ + double *nwd, *nwn; // eolWidth_, eolWithin_ + double *ntl; // notchLength_ + double *eon; // endOfNotchWidth_ + double *nts; // minNotchSpacing_ + double *eonl; // eonotchLength_ + int *hpe; // hasSpacingParellelEdge_ + double *nps, *npw; // parSpace_, parWithin_ + int *hte; // hasSpacingTwoEdges_ + int *hae; // hasSpacingAdjacentExcept_ + int *hsn; // hasSpacingSamenet_ + int *hsno; // hasSpacingSamenetPGonly_ + int *hca; // hasSpacingCutArea_ + double *nca; // spacingCutArea_ + double *naw; // adjacentWithin_ + double *nrmin, *nrmax; // rangeMin_, rangeMax_ + double *nri, *nrimin, *nrimax; // rangeInfluence_, rangeInfluenceRangeMin_, + // rangeInfluenceRangeMax_ + double *nrrmin, *nrrmax; // rangeRangeMin_, rangeRangeMax_ + int *ht; // hasSpacingUseLengthThreshold_ + int *nl; // hasSpacingLengthThreshold_ + double *nt, *ntmin, *ntmax; // lengthThreshold_, lengthThresholdMin_ + // lengthThresholdMax_ + + int i, lim; + if (spacingsAllocated_ == 0) { + lim = spacingsAllocated_ = 2; + nd = (double*) lefMalloc(sizeof(double) * lim); + nn = (char**) lefMalloc(sizeof(char*) * lim); + nac = (int*) lefMalloc(sizeof(int) * lim); + naw = (double*) lefMalloc(sizeof(double) * lim); + nsn = (int*) lefMalloc(sizeof(int) * lim); + nss = (int*) lefMalloc(sizeof(int) * lim); + nsa = (int*) lefMalloc(sizeof(int) * lim); + ncc = (int*) lefMalloc(sizeof(int) * lim); + hpo = (int*) lefMalloc(sizeof(int) * lim); + heol = (int*) lefMalloc(sizeof(int) * lim); + nwd = (double*) lefMalloc(sizeof(double) * lim); + nwn = (double*) lefMalloc(sizeof(double) * lim); + ntl = (double*) lefMalloc(sizeof(double) * lim); + eon = (double*) lefMalloc(sizeof(double) * lim); + nts = (double*) lefMalloc(sizeof(double) * lim); + eonl = (double*) lefMalloc(sizeof(double) * lim); + hpe = (int*) lefMalloc(sizeof(int) * lim); + nps = (double*) lefMalloc(sizeof(double) * lim); + npw = (double*) lefMalloc(sizeof(double) * lim); + hte = (int*) lefMalloc(sizeof(int) * lim); + hae = (int*) lefMalloc(sizeof(int) * lim); + hsn = (int*) lefMalloc(sizeof(int) * lim); + hsno = (int*) lefMalloc(sizeof(int) * lim); + hca = (int*) lefMalloc(sizeof(int) * lim); + nca = (double*) lefMalloc(sizeof(double) * lim); + nr = (int*) lefMalloc(sizeof(int) * lim); + nrmin = (double*) lefMalloc(sizeof(double) * lim); + nrmax = (double*) lefMalloc(sizeof(double) * lim); + nri = (double*) lefMalloc(sizeof(double) * lim); + nrimin = (double*) lefMalloc(sizeof(double) * lim); + nrimax = (double*) lefMalloc(sizeof(double) * lim); + nrrmin = (double*) lefMalloc(sizeof(double) * lim); + nrrmax = (double*) lefMalloc(sizeof(double) * lim); + ht = (int*) lefMalloc(sizeof(int) * lim); + nl = (int*) lefMalloc(sizeof(int) * lim); + nt = (double*) lefMalloc(sizeof(double) * lim); + ntmin = (double*) lefMalloc(sizeof(double) * lim); + ntmax = (double*) lefMalloc(sizeof(double) * lim); + } else { + lim = spacingsAllocated_ * 2; + spacingsAllocated_ = lim; + nd = (double*) lefMalloc(sizeof(double) * lim); + nn = (char**) lefMalloc(sizeof(char*) * lim); + nac = (int*) lefMalloc(sizeof(int) * lim); + naw = (double*) lefMalloc(sizeof(double) * lim); + nsn = (int*) lefMalloc(sizeof(int) * lim); + nss = (int*) lefMalloc(sizeof(int) * lim); + nsa = (int*) lefMalloc(sizeof(int) * lim); + ncc = (int*) lefMalloc(sizeof(int) * lim); + hpo = (int*) lefMalloc(sizeof(int) * lim); + heol = (int*) lefMalloc(sizeof(int) * lim); + nwd = (double*) lefMalloc(sizeof(double) * lim); + nwn = (double*) lefMalloc(sizeof(double) * lim); + ntl = (double*) lefMalloc(sizeof(double) * lim); + eon = (double*) lefMalloc(sizeof(double) * lim); + nts = (double*) lefMalloc(sizeof(double) * lim); + eonl = (double*) lefMalloc(sizeof(double) * lim); + hpe = (int*) lefMalloc(sizeof(int) * lim); + nps = (double*) lefMalloc(sizeof(double) * lim); + npw = (double*) lefMalloc(sizeof(double) * lim); + hte = (int*) lefMalloc(sizeof(int) * lim); + hae = (int*) lefMalloc(sizeof(int) * lim); + hsn = (int*) lefMalloc(sizeof(int) * lim); + hsno = (int*) lefMalloc(sizeof(int) * lim); + hca = (int*) lefMalloc(sizeof(int) * lim); + nca = (double*) lefMalloc(sizeof(double) * lim); + nr = (int*) lefMalloc(sizeof(int) * lim); + nrmin = (double*) lefMalloc(sizeof(double) * lim); + nrmax = (double*) lefMalloc(sizeof(double) * lim); + nri = (double*) lefMalloc(sizeof(double) * lim); + nrimin = (double*) lefMalloc(sizeof(double) * lim); + nrimax = (double*) lefMalloc(sizeof(double) * lim); + nrrmin = (double*) lefMalloc(sizeof(double) * lim); + nrrmax = (double*) lefMalloc(sizeof(double) * lim); + ht = (int*) lefMalloc(sizeof(int) * lim); + nl = (int*) lefMalloc(sizeof(int) * lim); + nt = (double*) lefMalloc(sizeof(double) * lim); + ntmin = (double*) lefMalloc(sizeof(double) * lim); + ntmax = (double*) lefMalloc(sizeof(double) * lim); + lim /= 2; + for (i = 0; i < lim; i++) { + nd[i] = spacing_[i]; + if (spacingName_[i]) // is null if is not CUT layer + nn[i] = spacingName_[i]; + else + nn[i] = 0; + nac[i] = spacingAdjacentCuts_[i]; + naw[i] = spacingAdjacentWithin_[i]; + nsn[i] = hasSpacingName_[i]; + nss[i] = hasSpacingLayerStack_[i]; + nsa[i] = hasSpacingAdjacent_[i]; + ncc[i] = hasSpacingCenterToCenter_[i]; + hpo[i] = hasSpacingParallelOverlap_[i]; + nwd[i] = eolWidth_[i]; + nwn[i] = eolWithin_[i]; + ntl[i] = notchLength_[i]; + eon[i] = endOfNotchWidth_[i]; + nts[i] = minNotchSpacing_[i]; + eonl[i] = eonotchLength_[i]; + heol[i] = hasSpacingEndOfLine_[i]; + hpe[i] = hasSpacingParellelEdge_[i]; + nps[i] = parSpace_[i]; + npw[i] = parWithin_[i]; + hte[i] = hasSpacingTwoEdges_[i]; + hae[i] = hasSpacingAdjacentExcept_[i]; + hsn[i] = hasSpacingSamenet_[i]; + hsno[i] = hasSpacingSamenetPGonly_[i]; + hca[i] = hasSpacingCutArea_[i]; + nca[i] = spacingCutArea_[i]; + nr[i] = hasSpacingRange_[i]; + nrmin[i] = rangeMin_[i]; + nrmax[i] = rangeMax_[i]; + nri[i] = rangeInfluence_[i]; + nrimin[i] = rangeInfluenceRangeMin_[i]; + nrimax[i] = rangeInfluenceRangeMax_[i]; + nrrmin[i] = rangeRangeMin_[i]; + nrrmax[i] = rangeRangeMax_[i]; + ht[i] = hasSpacingUseLengthThreshold_[i]; + nl[i] = hasSpacingLengthThreshold_[i]; + nt[i] = lengthThreshold_[i]; + ntmin[i] = lengthThresholdRangeMin_[i]; + ntmax[i] = lengthThresholdRangeMax_[i]; + } + lefFree((char*) (spacing_)); + lefFree((char*) (spacingName_)); + lefFree((char*) (spacingAdjacentCuts_)); + lefFree((char*) (spacingAdjacentWithin_)); + lefFree((char*) (hasSpacingName_)); + lefFree((char*) (hasSpacingLayerStack_)); + lefFree((char*) (hasSpacingAdjacent_)); + lefFree((char*) (hasSpacingRange_)); + lefFree((char*) (hasSpacingCenterToCenter_)); + lefFree((char*) (hasSpacingParallelOverlap_)); + lefFree((char*) (hasSpacingEndOfLine_)); + lefFree((char*) (eolWidth_)); + lefFree((char*) (eolWithin_)); + lefFree((char*) (notchLength_)); + lefFree((char*) (endOfNotchWidth_)); + lefFree((char*) (minNotchSpacing_)); + lefFree((char*) (eonotchLength_)); + lefFree((char*) (hasSpacingParellelEdge_)); + lefFree((char*) (hasSpacingAdjacentExcept_)); + lefFree((char*) (parSpace_)); + lefFree((char*) (parWithin_)); + lefFree((char*) (hasSpacingTwoEdges_)); + lefFree((char*) (hasSpacingSamenet_)); + lefFree((char*) (hasSpacingSamenetPGonly_)); + lefFree((char*) (hasSpacingCutArea_)); + lefFree((char*) (spacingCutArea_)); + lefFree((char*) (rangeMin_)); + lefFree((char*) (rangeMax_)); + lefFree((char*) (rangeInfluence_)); + lefFree((char*) (rangeInfluenceRangeMin_)); + lefFree((char*) (rangeInfluenceRangeMax_)); + lefFree((char*) (rangeRangeMin_)); + lefFree((char*) (rangeRangeMax_)); + lefFree((char*) (hasSpacingUseLengthThreshold_)); + lefFree((char*) (hasSpacingLengthThreshold_)); + lefFree((char*) (lengthThreshold_)); + lefFree((char*) (lengthThresholdRangeMin_)); + lefFree((char*) (lengthThresholdRangeMax_)); + } + spacing_ = nd; + spacingName_ = nn; + spacingAdjacentCuts_ = nac; + spacingAdjacentWithin_ = naw; + hasSpacingName_ = nsn; + hasSpacingLayerStack_ = nss; + hasSpacingAdjacent_ = nsa; + hasSpacingRange_ = nr; + hasSpacingCenterToCenter_ = ncc; + hasSpacingParallelOverlap_ = hpo; + hasSpacingEndOfLine_ = heol; + eolWidth_ = nwd; + eolWithin_ = nwn; + notchLength_ = ntl; + endOfNotchWidth_ = eon; + minNotchSpacing_ = nts; + eonotchLength_ = eonl; + hasSpacingParellelEdge_ = hpe; + parSpace_ = nps; + parWithin_ = npw; + hasSpacingTwoEdges_ = hte; + hasSpacingAdjacentExcept_ = hae; + hasSpacingSamenet_ = hsn; + hasSpacingSamenetPGonly_ = hsno; + hasSpacingCutArea_ = hca; + spacingCutArea_ = nca; + rangeMin_ = nrmin; + rangeMax_ = nrmax; + rangeInfluence_ = nri; + rangeInfluenceRangeMin_ = nrimin; + rangeInfluenceRangeMax_ = nrimax; + rangeRangeMin_ = nrrmin; + rangeRangeMax_ = nrrmax; + hasSpacingUseLengthThreshold_ = ht; + hasSpacingLengthThreshold_ = nl; + lengthThreshold_ = nt; + lengthThresholdRangeMin_ = ntmin; + lengthThresholdRangeMax_ = ntmax; + } + hasSpacing_ = 1; + spacing_[numSpacings_] = dist; + spacingName_[numSpacings_] = 0; + hasSpacingName_[numSpacings_] = 0; + hasSpacingLayerStack_[numSpacings_] = 0; + spacingAdjacentCuts_[numSpacings_] = 0; + spacingAdjacentWithin_[numSpacings_] = 0; + hasSpacingAdjacent_[numSpacings_] = 0; + hasSpacingRange_[numSpacings_] = 0; + hasSpacingCenterToCenter_[numSpacings_] = 0; + hasSpacingParallelOverlap_[numSpacings_] = 0; + hasSpacingEndOfLine_[numSpacings_] = 0; + hasSpacingAdjacentExcept_[numSpacings_] = 0; + eolWidth_[numSpacings_] = 0; + eolWithin_[numSpacings_] = 0; + notchLength_[numSpacings_] = -1; + endOfNotchWidth_[numSpacings_] = 0; + minNotchSpacing_[numSpacings_] = 0; + eonotchLength_[numSpacings_] = 0; + hasSpacingParellelEdge_[numSpacings_] = 0; + parSpace_[numSpacings_] = 0; + parWithin_[numSpacings_] = 0; + hasSpacingTwoEdges_[numSpacings_] = 0; + hasSpacingSamenet_[numSpacings_] = 0; + hasSpacingSamenetPGonly_[numSpacings_] = 0; + hasSpacingCutArea_[numSpacings_] = 0; + spacingCutArea_[numSpacings_] = 0; + rangeMin_[numSpacings_] = -1; + rangeMax_[numSpacings_] = -1; + rangeInfluence_[numSpacings_] = 0; + rangeInfluenceRangeMin_[numSpacings_] = -1; + rangeInfluenceRangeMax_[numSpacings_] = -1; + rangeRangeMin_[numSpacings_] = -1; + rangeRangeMax_[numSpacings_] = -1; + hasSpacingUseLengthThreshold_[numSpacings_] = 0; + hasSpacingLengthThreshold_[numSpacings_] = 0; + lengthThreshold_[numSpacings_] = 0; + lengthThresholdRangeMin_[numSpacings_] = -1; + lengthThresholdRangeMax_[numSpacings_] = -1; + numSpacings_ += 1; +} + +void +lefiLayer::setSpacingRange(double left, + double right) +{ + rangeMin_[numSpacings_ - 1] = left; + rangeMax_[numSpacings_ - 1] = right; + hasSpacingRange_[numSpacings_ - 1] = 1; + rangeInfluence_[numSpacings_ - 1] = -1; +} + +void +lefiLayer::setSpacingName(const char *spacingName) +{ + if (spacingName) { + int len = strlen(spacingName) + 1; + spacingName_[numSpacings_ - 1] = (char*) lefMalloc(len); + strcpy(spacingName_[numSpacings_ - 1], CASE(spacingName)); + hasSpacingName_[numSpacings_ - 1] = 1; + } +} + +void +lefiLayer::setSpacingLayerStack() +{ + hasSpacingLayerStack_[numSpacings_ - 1] = 1; +} + +void +lefiLayer::setSpacingAdjacent(int numCuts, + double distance) +{ + spacingAdjacentCuts_[numSpacings_ - 1] = numCuts; + spacingAdjacentWithin_[numSpacings_ - 1] = distance; + hasSpacingAdjacent_[numSpacings_ - 1] = 1; +} + +void +lefiLayer::setSpacingRangeUseLength() +{ + hasSpacingUseLengthThreshold_[numSpacings_ - 1] = 1; +} + +void +lefiLayer::setSpacingRangeInfluence(double infLength) +{ + rangeInfluence_[numSpacings_ - 1] = infLength; +} + +void +lefiLayer::setSpacingRangeInfluenceRange(double min, + double max) +{ + rangeInfluenceRangeMin_[numSpacings_ - 1] = min; + rangeInfluenceRangeMax_[numSpacings_ - 1] = max; +} + +void +lefiLayer::setSpacingRangeRange(double min, + double max) +{ + rangeRangeMin_[numSpacings_ - 1] = min; + rangeRangeMax_[numSpacings_ - 1] = max; +} + +void +lefiLayer::setSpacingLength(double num) +{ + lengthThreshold_[numSpacings_ - 1] = num; + hasSpacingLengthThreshold_[numSpacings_ - 1] = 1; +} + +void +lefiLayer::setSpacingLengthRange(double min, + double max) +{ + lengthThresholdRangeMin_[numSpacings_ - 1] = min; + lengthThresholdRangeMax_[numSpacings_ - 1] = max; +} + +void +lefiLayer::setSpacingCenterToCenter() +{ + hasSpacingCenterToCenter_[numSpacings_ - 1] = 1; +} + +// 5.7 +void +lefiLayer::setSpacingParallelOverlap() +{ + hasSpacingParallelOverlap_[numSpacings_ - 1] = 1; +} + +// 5.7 +void +lefiLayer::setSpacingArea(double cutArea) +{ + spacingCutArea_[numSpacings_ - 1] = cutArea; + hasSpacingCutArea_[numSpacings_ - 1] = 1; +} + +// 5.7 +void +lefiLayer::setSpacingEol(double width, + double within) +{ + hasSpacingEndOfLine_[numSpacings_ - 1] = 1; + eolWidth_[numSpacings_ - 1] = width; + eolWithin_[numSpacings_ - 1] = within; +} + +// 5.7 +void +lefiLayer::setSpacingParSW(double space, + double within) +{ + hasSpacingParellelEdge_[numSpacings_ - 1] = 1; + parSpace_[numSpacings_ - 1] = space; + parWithin_[numSpacings_ - 1] = within; +} + +// 5.7 +void +lefiLayer::setSpacingParTwoEdges() +{ + hasSpacingTwoEdges_[numSpacings_ - 1] = 1; +} + +// 5.7 +void +lefiLayer::setSpacingAdjacentExcept() +{ + hasSpacingAdjacentExcept_[numSpacings_ - 1] = 1; +} + +// 5.7 +void +lefiLayer::setSpacingSamenet() +{ + hasSpacingSamenet_[numSpacings_ - 1] = 1; +} + +// 5.7 +void +lefiLayer::setSpacingSamenetPGonly() +{ + hasSpacingSamenetPGonly_[numSpacings_ - 1] = 1; +} + +// 5.7 +void +lefiLayer::setSpacingNotchLength(double notchLength) +{ + notchLength_[numSpacings_ - 1] = notchLength; +} + +// 5.7 +void +lefiLayer::setSpacingEndOfNotchWidth(double eonWidth, + double mnSpacing, + double eonLength) +{ + endOfNotchWidth_[numSpacings_ - 1] = eonWidth; + minNotchSpacing_[numSpacings_ - 1] = mnSpacing; + eonotchLength_[numSpacings_ - 1] = eonLength; +} + +// 5.7 +void +lefiLayer::setSpacingTableOrtho() +{ + + spacingTableOrtho_ = (lefiOrthogonal*) lefMalloc(sizeof(lefiOrthogonal)); + spacingTableOrtho_->Init(); +} + +// 5.7 +void +lefiLayer::addSpacingTableOrthoWithin(double cutWithin, + double orthoSp) +{ + spacingTableOrtho_->addOrthogonal(cutWithin, orthoSp); + hasSpacingTableOrtho_ = 1; +} + +// 5.7 +void +lefiLayer::setMaxFloatingArea(double num) +{ + maxArea_ = num; +} + +// 5.7 +void +lefiLayer::setArraySpacingLongArray() +{ + hasLongArray_ = 1; +} + +// 5.7 +void +lefiLayer::setArraySpacingWidth(double viaWidth) +{ + viaWidth_ = viaWidth; +} + +// 5.7 +void +lefiLayer::setArraySpacingCut(double cutSpacing) +{ + cutSpacing_ = cutSpacing; +} + +// 5.7 +void +lefiLayer::addArraySpacingArray(int arrayCut, + double arraySpacing) +{ + int i, len; + int *ac; + double *as; + + if (numArrayCuts_ == arrayCutsAllocated_) { + if (arrayCutsAllocated_ == 0) + len = arrayCutsAllocated_ = 2; + else + len = arrayCutsAllocated_ *= 2; + ac = (int*) lefMalloc(sizeof(int) * len); + as = (double*) lefMalloc(sizeof(double) * len); + + if (numArrayCuts_ > 0) { + for (i = 0; i < numArrayCuts_; i++) { + ac[i] = arrayCuts_[i]; + as[i] = arraySpacings_[i]; + } + lefFree((char*) (arrayCuts_)); + lefFree((char*) (arraySpacings_)); + } + arrayCuts_ = ac; + arraySpacings_ = as; + } + arrayCuts_[numArrayCuts_] = arrayCut; + arraySpacings_[numArrayCuts_] = arraySpacing; + numArrayCuts_ += 1; +} + +void +lefiLayer::setDirection(const char *dir) +{ + direction_ = (char*) dir; + hasDirection_ = 1; +} + +void +lefiLayer::setResistance(double num) +{ + hasResistance_ = 1; + resistance_ = num; +} + +void +lefiLayer::setCapacitance(double num) +{ + hasCapacitance_ = 1; + capacitance_ = num; +} + +void +lefiLayer::setHeight(double num) +{ + hasHeight_ = 1; + height_ = num; +} + +void +lefiLayer::setThickness(double num) +{ + hasThickness_ = 1; + thickness_ = num; +} + +void +lefiLayer::setShrinkage(double num) +{ + hasShrinkage_ = 1; + shrinkage_ = num; +} + +void +lefiLayer::setCapMultiplier(double num) +{ + hasCapMultiplier_ = 1; + capMultiplier_ = num; +} + +void +lefiLayer::setEdgeCap(double num) +{ + hasEdgeCap_ = 1; + edgeCap_ = num; +} + +void +lefiLayer::setAntennaLength(double num) +{ + hasAntennaLength_ = 1; + antennaLength_ = num; +} + +void +lefiLayer::setAntennaArea(double num) +{ + hasAntennaArea_ = 1; + antennaArea_ = num; +} + +void +lefiLayer::setCurrentDensity(double num) +{ + hasCurrentDensityPoint_ = 1; + currentDensity_ = num; +} + +void +lefiLayer::setCurrentPoint(double width, + double current) +{ + if (numCurrentPoints_ == currentPointsAllocated_) { + int max = numCurrentPoints_; + int len; + int i; + double *nc; + double *nw; + + if (currentPointsAllocated_ == 0) + len = currentPointsAllocated_ = 2; + else + len = currentPointsAllocated_ *= 2; + nc = (double*) lefMalloc(sizeof(double) * len); + nw = (double*) lefMalloc(sizeof(double) * len); + + for (i = 0; i < max; i++) { + nc[i] = current_[i]; + nw[i] = currentWidths_[i]; + } + lefFree((char*) (current_)); + lefFree((char*) (currentWidths_)); + current_ = nc; + currentWidths_ = nw; + } + current_[numCurrentPoints_] = current; + currentWidths_[numCurrentPoints_] = width; + numCurrentPoints_ += 1; +} + +void +lefiLayer::setResistancePoint(double width, + double resistance) +{ + if (numResistancePoints_ == resistancePointsAllocated_) { + int max = numResistancePoints_; + int len; + int i; + double *nc; + double *nw; + + if (resistancePointsAllocated_ == 0) + len = resistancePointsAllocated_ = 2; + else + len = resistancePointsAllocated_ *= 2; + nc = (double*) lefMalloc(sizeof(double) * len); + nw = (double*) lefMalloc(sizeof(double) * len); + for (i = 0; i < max; i++) { + nc[i] = resistances_[i]; + nw[i] = resistanceWidths_[i]; + } + lefFree((char*) (resistances_)); + lefFree((char*) (resistanceWidths_)); + resistances_ = nc; + resistanceWidths_ = nw; + } + resistances_[numResistancePoints_] = resistance; + resistanceWidths_[numResistancePoints_] = width; + numResistancePoints_ += 1; +} + +void +lefiLayer::setCapacitancePoint(double width, + double capacitance) +{ + if (numCapacitancePoints_ == capacitancePointsAllocated_) { + int max = numCapacitancePoints_; + int len; + int i; + double *nc; + double *nw; + + if (capacitancePointsAllocated_ == 0) + len = capacitancePointsAllocated_ = 2; + else + len = capacitancePointsAllocated_ *= 2; + nc = (double*) lefMalloc(sizeof(double) * len); + nw = (double*) lefMalloc(sizeof(double) * len); + for (i = 0; i < max; i++) { + nc[i] = capacitances_[i]; + nw[i] = capacitanceWidths_[i]; + } + lefFree((char*) (capacitances_)); + lefFree((char*) (capacitanceWidths_)); + capacitances_ = nc; + capacitanceWidths_ = nw; + } + capacitances_[numCapacitancePoints_] = capacitance; + capacitanceWidths_[numCapacitancePoints_] = width; + numCapacitancePoints_ += 1; +} + +int +lefiLayer::hasType() const +{ + return (type_[0] != '\0') ? 1 : 0; +} + +// 5.8 +int +lefiLayer::hasLayerType() const +{ + if (layerType_) + return 1; + return 0; +} + +int +lefiLayer::hasPitch() const +{ + if (hasPitch_ == 1) + return 1; + else + return 0; +} + +int +lefiLayer::hasMask() const +{ + if (hasMask_) { + return 1; + } + + return 0; +} +// 5.6 +int +lefiLayer::hasXYPitch() const +{ + if (hasPitch_ == 2) + return 1; + else + return 0; +} + +int +lefiLayer::hasOffset() const +{ + if (hasOffset_ == 1) + return 1; + else + return 0; +} + +// 5.6 +int +lefiLayer::hasXYOffset() const +{ + if (hasOffset_ == 2) + return 1; + else + return 0; +} + +int +lefiLayer::hasWidth() const +{ + return hasWidth_; +} + +int +lefiLayer::hasArea() const +{ + return hasArea_; +} + +// 5.6 +int +lefiLayer::hasDiagPitch() const +{ + if (hasDiagPitch_ == 1) + return 1; + else + return 0; +} + +// 5.6 +int +lefiLayer::hasXYDiagPitch() const +{ + if (hasDiagPitch_ == 2) + return 1; + else + return 0; +} + +// 5.6 +int +lefiLayer::hasDiagWidth() const +{ + return hasDiagWidth_; +} + +// 5.6 +int +lefiLayer::hasDiagSpacing() const +{ + return hasDiagSpacing_; +} + +int +lefiLayer::hasWireExtension() const +{ + return hasWireExtension_; +} + +int +lefiLayer::hasSpacingNumber() const +{ + return ((hasSpacing_ != 0) && (numSpacings_ > 0)) ? 1 : 0; +} + +int +lefiLayer::hasSpacingName(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingName_[index] != 0)) ? 1 : 0; +} + +int +lefiLayer::hasSpacingLayerStack(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingLayerStack_[index] != 0)) ? 1 : 0; +} + +int +lefiLayer::hasSpacingAdjacent(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingAdjacent_[index] != 0)) ? 1 : 0; +} + +int +lefiLayer::hasSpacingRange(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingRange_[index] != 0)) ? 1 : 0; +} + +int +lefiLayer::hasSpacingRangeUseLengthThreshold(int index) const +{ + return (hasSpacingUseLengthThreshold_[index]); +} + +int +lefiLayer::hasSpacingRangeInfluence(int index) const +{ + return ((hasSpacing_ != 0) && (hasSpacingRange_[index] != 0) && + (rangeInfluence_[index]) != -1) ? 1 : 0; +} + +int +lefiLayer::hasSpacingRangeInfluenceRange(int index) const +{ + return ((hasSpacing_ != 0) && (hasSpacingRange_[index] != 0) && + (rangeInfluenceRangeMin_[index] != -1) && + (rangeInfluenceRangeMax_[index] != -1)) ? 1 : 0; +} + +int +lefiLayer::hasSpacingRangeRange(int index) const +{ + return ((hasSpacing_ != 0) && (hasSpacingRange_[index] != 0) && + (rangeRangeMin_[index] != -1) && + (rangeRangeMax_[index] != -1)) ? 1 : 0; +} + +int +lefiLayer::hasSpacingLengthThreshold(int index) const +{ + return (hasSpacingLengthThreshold_[index]) ? 1 : 0; +} + +int +lefiLayer::hasSpacingLengthThresholdRange(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingLengthThreshold_[index] != 0) && + (lengthThresholdRangeMin_[index] != -1) && + (lengthThresholdRangeMax_[index] != -1)) ? 1 : 0; +} + +int +lefiLayer::hasSpacingCenterToCenter(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingCenterToCenter_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingParallelOverlap(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingParallelOverlap_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingArea(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingCutArea_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingEndOfLine(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingEndOfLine_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingParellelEdge(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingParellelEdge_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingTwoEdges(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingTwoEdges_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingAdjacentExcept(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingAdjacentExcept_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingSamenet(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingSamenet_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingSamenetPGonly(int index) const +{ + return ((hasSpacing_ != 0) && + (hasSpacingSamenetPGonly_[index] != 0)) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingNotchLength(int index) const +{ + return (notchLength_[index] >= 0) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingEndOfNotchWidth(int index) const +{ + return (endOfNotchWidth_[index] != 0) ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasSpacingTableOrtho() const +{ + return hasSpacingTableOrtho_ ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasMaxFloatingArea() const +{ + return maxArea_ ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasArraySpacing() const +{ + return cutSpacing_ ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasLongArray() const +{ + return hasLongArray_ ? 1 : 0; +} + +// 5.7 +int +lefiLayer::hasViaWidth() const +{ + return viaWidth_ ? 1 : 0; +} + +int +lefiLayer::hasDirection() const +{ + return hasDirection_; +} + +int +lefiLayer::hasResistance() const +{ + return hasResistance_; +} + +int +lefiLayer::hasCapacitance() const +{ + return hasCapacitance_; +} + +int +lefiLayer::hasHeight() const +{ + return hasHeight_; +} + +int +lefiLayer::hasThickness() const +{ + return hasThickness_; +} + +int +lefiLayer::hasShrinkage() const +{ + return hasShrinkage_; +} + +int +lefiLayer::hasCapMultiplier() const +{ + return hasCapMultiplier_; +} + +int +lefiLayer::hasEdgeCap() const +{ + return hasEdgeCap_; +} + +int +lefiLayer::hasAntennaArea() const +{ + return hasAntennaArea_; +} + +int +lefiLayer::hasAntennaLength() const +{ + return hasAntennaLength_; +} + +int +lefiLayer::hasCurrentDensityPoint() const +{ + return hasCurrentDensityPoint_; +} + +int +lefiLayer::hasCurrentDensityArray() const +{ + return numCurrentPoints_ ? 1 : 0; +} + +int +lefiLayer::hasResistanceArray() const +{ + return numResistancePoints_ ? 1 : 0; +} + +int +lefiLayer::hasCapacitanceArray() const +{ + return numCapacitancePoints_ ? 1 : 0; +} + +void +lefiLayer::currentDensityArray(int *numPoints, + double **widths, + double **current) const +{ + *numPoints = numCurrentPoints_; + *widths = currentWidths_; + *current = current_; +} + +void +lefiLayer::resistanceArray(int *numPoints, + double **widths, + double **res) const +{ + *numPoints = numResistancePoints_; + *widths = resistanceWidths_; + *res = resistances_; +} + +void +lefiLayer::capacitanceArray(int *numPoints, + double **widths, + double **cap) const +{ + *numPoints = numCapacitancePoints_; + *widths = capacitanceWidths_; + *cap = capacitances_; +} + +int +lefiLayer::numSpacing() const +{ + return numSpacings_; +} + +char * +lefiLayer::name() const +{ + return name_; +} + +const char * +lefiLayer::type() const +{ + return type_; +} + +// 5.8 +const char * +lefiLayer::layerType() const +{ + return layerType_; +} + +double +lefiLayer::pitch() const +{ + return pitchX_; +} + +// 5.6 +double +lefiLayer::pitchX() const +{ + return pitchX_; +} + +// 5.6 +double +lefiLayer::pitchY() const +{ + return pitchY_; +} + +double +lefiLayer::offset() const +{ + return offsetX_; +} + +// 5.6 +double +lefiLayer::offsetX() const +{ + return offsetX_; +} + +// 5.6 +double +lefiLayer::offsetY() const +{ + return offsetY_; +} + +double +lefiLayer::width() const +{ + return width_; +} + +double +lefiLayer::area() const +{ + return area_; +} + +// 5.6 +double +lefiLayer::diagPitch() const +{ + return diagPitchX_; +} + +// 5.6 +double +lefiLayer::diagPitchX() const +{ + return diagPitchX_; +} + +// 5.6 +double +lefiLayer::diagPitchY() const +{ + return diagPitchY_; +} + +// 5.6 +double +lefiLayer::diagWidth() const +{ + return diagWidth_; +} + +// 5.6 +double +lefiLayer::diagSpacing() const +{ + return diagSpacing_; +} + +double +lefiLayer::wireExtension() const +{ + return wireExtension_; +} + +double +lefiLayer::spacing(int index) const +{ + return spacing_[index]; +} + +char * +lefiLayer::spacingName(int index) const +{ + return spacingName_[index]; +} + +int +lefiLayer::spacingAdjacentCuts(int index) const +{ + return spacingAdjacentCuts_[index]; +} + +double +lefiLayer::spacingAdjacentWithin(int index) const +{ + return spacingAdjacentWithin_[index]; +} + +double +lefiLayer::spacingArea(int index) const +{ + return spacingCutArea_[index]; +} + +double +lefiLayer::spacingRangeMin(int index) const +{ + return rangeMin_[index]; +} + +double +lefiLayer::spacingRangeMax(int index) const +{ + return rangeMax_[index]; +} + +double +lefiLayer::spacingRangeInfluence(int index) const +{ + return rangeInfluence_[index]; +} + +double +lefiLayer::spacingRangeInfluenceMin(int index) const +{ + return rangeInfluenceRangeMin_[index]; +} + +double +lefiLayer::spacingRangeInfluenceMax(int index) const +{ + return rangeInfluenceRangeMax_[index]; +} + +double +lefiLayer::spacingRangeRangeMin(int index) const +{ + return rangeRangeMin_[index]; +} + +double +lefiLayer::spacingRangeRangeMax(int index) const +{ + return rangeRangeMax_[index]; +} + +double +lefiLayer::spacingLengthThreshold(int index) const +{ + return lengthThreshold_[index]; +} + +double +lefiLayer::spacingLengthThresholdRangeMin(int index) const +{ + return lengthThresholdRangeMin_[index]; +} + +double +lefiLayer::spacingLengthThresholdRangeMax(int index) const +{ + return lengthThresholdRangeMax_[index]; +} + +// 5.7 +double +lefiLayer::spacingEolWidth(int index) const +{ + return eolWidth_[index]; +} + +// 5.7 +double +lefiLayer::spacingEolWithin(int index) const +{ + return eolWithin_[index]; +} + +// 5.7 +double +lefiLayer::spacingParSpace(int index) const +{ + return parSpace_[index]; +} + +// 5.7 +double +lefiLayer::spacingParWithin(int index) const +{ + return parWithin_[index]; +} + +// 5.7 +double +lefiLayer::spacingNotchLength(int index) const +{ + return notchLength_[index]; +} + +// 5.7 +double +lefiLayer::spacingEndOfNotchWidth(int index) const +{ + return endOfNotchWidth_[index]; +} + +// 5.7 +double +lefiLayer::spacingEndOfNotchSpacing(int index) const +{ + return minNotchSpacing_[index]; +} + +// 5.7 +double +lefiLayer::spacingEndOfNotchLength(int index) const +{ + return eonotchLength_[index]; +} + +const char * +lefiLayer::direction() const +{ + return direction_; +} + +double +lefiLayer::currentDensityPoint() const +{ + return currentDensity_; +} + +double +lefiLayer::resistance() const +{ + return resistance_; +} + +double +lefiLayer::capacitance() const +{ + return capacitance_; +} + +double +lefiLayer::height() const +{ + return height_; +} + +double +lefiLayer::thickness() const +{ + return thickness_; +} + +double +lefiLayer::shrinkage() const +{ + return shrinkage_; +} + +double +lefiLayer::capMultiplier() const +{ + return capMultiplier_; +} + +double +lefiLayer::edgeCap() const +{ + return edgeCap_; +} + +double +lefiLayer::antennaLength() const +{ + return antennaLength_; +} + +double +lefiLayer::antennaArea() const +{ + return antennaArea_; +} + +// 5.5 +int +lefiLayer::numMinimumcut() const +{ + return numMinimumcut_; +} + +// 5.5 +int +lefiLayer::minimumcut(int index) const +{ + return minimumcut_[index]; +} + +// 5.5 +double +lefiLayer::minimumcutWidth(int index) const +{ + return minimumcutWidth_[index]; +} + +// 5.7 +int +lefiLayer::hasMinimumcutWithin(int index) const +{ + return hasMinimumcutWithin_[index]; +} + +// 5.7 +double +lefiLayer::minimumcutWithin(int index) const +{ + return minimumcutWithin_[index]; +} + +// 5.5 +int +lefiLayer::hasMinimumcutConnection(int index) const +{ + return hasMinimumcutConnection_[index]; +} + +// 5.5 +const char * +lefiLayer::minimumcutConnection(int index) const +{ + return minimumcutConnection_[index]; +} + +// 5.5 +int +lefiLayer::hasMinimumcutNumCuts(int index) const +{ + return hasMinimumcutNumCuts_[index]; +} + +// 5.5 +double +lefiLayer::minimumcutLength(int index) const +{ + return minimumcutLength_[index]; +} + +// 5.5 +double +lefiLayer::minimumcutDistance(int index) const +{ + return minimumcutDistance_[index]; +} + +// 5.5 +int +lefiLayer::hasMaxwidth() const +{ + return maxwidth_ == -1 ? 0 : 1; +} + +// 5.5 +double +lefiLayer::maxwidth() const +{ + return maxwidth_; +} + +// 5.5 +int +lefiLayer::hasMinwidth() const +{ + return minwidth_ == -1 ? 0 : 1; +} + +// 5.5 +double +lefiLayer::minwidth() const +{ + return minwidth_; +} + +// 5.8 +int +lefiLayer::mask() const +{ + return maskNumber_; +} + +// 5.5 +int +lefiLayer::numMinenclosedarea() const +{ + return numMinenclosedarea_; +} + +// 5.5 +int +lefiLayer::hasMinenclosedareaWidth(int index) const +{ + return minenclosedareaWidth_[index] == -1 ? 0 : 1; +} + +// 5.5 +double +lefiLayer::minenclosedarea(int index) const +{ + return minenclosedarea_[index]; +} + +// 5.5 +double +lefiLayer::minenclosedareaWidth(int index) const +{ + return minenclosedareaWidth_[index]; +} + +// 5.5 & 5.6 +int +lefiLayer::hasMinstep() const +{ + return numMinstep_? 1 : 0; +} + +// 5.5 +int +lefiLayer::hasProtrusion() const +{ + return protrusionWidth1_ == -1 ? 0 : 1; +} + +// 5.5 +double +lefiLayer::protrusionWidth1() const +{ + return protrusionWidth1_; +} + +// 5.5 +double +lefiLayer::protrusionLength() const +{ + return protrusionLength_; +} + +// 5.5 +double +lefiLayer::protrusionWidth2() const +{ + return protrusionWidth2_; +} + +void +lefiLayer::print(FILE *f) const +{ + int i, max; + double *j; + double *k; + fprintf(f, "Layer %s:\n", name()); + if (hasType()) + fprintf(f, " type %s\n", type()); + if (hasMask()) + fprintf(f, " mask %d\n", mask()); + if (hasPitch()) + fprintf(f, " pitch %g\n", pitch()); + if (hasWireExtension()) + fprintf(f, " wireextension %g\n", wireExtension()); + if (hasWidth()) + fprintf(f, " width %g\n", width()); + if (hasArea()) + fprintf(f, " area %g\n", area()); + if (hasSpacingNumber()) { + for (i = 0; i < numSpacing(); i++) { + fprintf(f, " spacing %g\n", spacing(i)); + if (hasSpacingRange(i)) { + fprintf(f, " range %g %g\n", + spacingRangeMin(i), + spacingRangeMax(i)); + if (hasSpacingRangeUseLengthThreshold(i)) + fprintf(f, " uselengththreshold\n"); + else if (hasSpacingRangeInfluence(i)) { + fprintf(f, " influence %g\n", + spacingRangeInfluence(i)); + if (hasSpacingRangeInfluenceRange(i)) + fprintf(f, " Range %g %g\n", + spacingRangeInfluenceMin(i), + spacingRangeInfluenceMax(i)); + } else if (hasSpacingRangeRange(i)) + fprintf(f, " range %g %g\n", + spacingRangeRangeMin(i), + spacingRangeRangeMax(i)); + } else if (hasSpacingLengthThreshold(i)) { + fprintf(f, " lengththreshold %g\n", + spacingLengthThreshold(i)); + if (hasSpacingLengthThresholdRange(i)) + fprintf(f, " range %g %g\n", + spacingLengthThresholdRangeMin(i), + spacingLengthThresholdRangeMax(i)); + } + } + } + if (hasDirection()) + fprintf(f, " direction %s\n", direction()); + + if (hasResistance()) + fprintf(f, " resistance %g\n", resistance()); + if (hasResistanceArray()) { + resistanceArray(&max, &j, &k); + fprintf(f, " resistance PWL"); + for (i = 0; i < max; i++) + fprintf(f, " %g %g", j[i], k[i]); + fprintf(f, "\n"); + } + if (hasCapacitance()) + fprintf(f, " capacitance %g\n", capacitance()); + if (hasCapacitanceArray()) { + capacitanceArray(&max, &j, &k); + fprintf(f, " capacitance PWL"); + for (i = 0; i < max; i++) + fprintf(f, " %g %g", j[i], k[i]); + fprintf(f, "\n"); + } + + if (hasHeight()) + fprintf(f, " height %g\n", height()); + if (hasThickness()) + fprintf(f, " thickness %g\n", thickness()); + if (hasShrinkage()) + fprintf(f, " shrinkage %g\n", shrinkage()); + if (hasCapMultiplier()) + fprintf(f, " cap muptiplier %g\n", capMultiplier()); + if (hasEdgeCap()) + fprintf(f, " edge cap %g\n", edgeCap()); + + if (hasCurrentDensityPoint()) + fprintf(f, " currentden %g\n", currentDensityPoint()); + if (hasCurrentDensityArray()) { + currentDensityArray(&max, &j, &k); + fprintf(f, " currentden PWL"); + for (i = 0; i < max; i++) + fprintf(f, " %g %g", j[i], k[i]); + fprintf(f, "\n"); + } +} + +void +lefiLayer::addProp(const char *name, + const char *value, + const char type) +{ + int len = strlen(name) + 1; + // char* tvalue; + // int vlen, i; + if (numProps_ == propsAllocated_) { + int i; + int max; + int lim = numProps_; + char **nn; + char **nv; + double *nd; + char *nt; + + if (propsAllocated_ == 0) + max = propsAllocated_ = 2; + else + max = propsAllocated_ *= 2; + nn = (char**) lefMalloc(sizeof(char*) * max); + nv = (char**) lefMalloc(sizeof(char*) * max); + nd = (double*) lefMalloc(sizeof(double) * max); + nt = (char*) lefMalloc(sizeof(char) * max); + for (i = 0; i < lim; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nd[i] = dvalues_[i]; + nt[i] = types_[i]; + } + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + names_ = nn; + values_ = nv; + dvalues_ = nd; + types_ = nt; + } + names_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(names_[numProps_], name); + len = strlen(value) + 1; + values_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(values_[numProps_], value); + dvalues_[numProps_] = 0; + //if (type == 'N') { + // it is a number, don't know if it is an integer or real + // Look for . in the value + //tvalue = (char*)value; + //vlen = strlen(value); + //for (i = 0; i < vlen; i++) { + //if (*tvalue == '.') { + //types_[numProps_] = 'R'; + //break; + //} + //++tvalue; + //types_[numProps_] = type; + //} + //} else + types_[numProps_] = type; + numProps_ += 1; +} + +void +lefiLayer::addNumProp(const char *name, + const double d, + const char *value, + const char type) +{ + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + int max; + int lim = numProps_; + char **nn; + char **nv; + double *nd; + char *nt; + + if (propsAllocated_ == 0) + max = propsAllocated_ = 2; + else + max = propsAllocated_ *= 2; + nn = (char**) lefMalloc(sizeof(char*) * max); + nv = (char**) lefMalloc(sizeof(char*) * max); + nd = (double*) lefMalloc(sizeof(double) * max); + nt = (char*) lefMalloc(sizeof(char) * max); + for (i = 0; i < lim; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nd[i] = dvalues_[i]; + nt[i] = types_[i]; + } + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + names_ = nn; + values_ = nv; + dvalues_ = nd; + types_ = nt; + } + names_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(names_[numProps_], name); + len = strlen(value) + 1; + values_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(values_[numProps_], value); + dvalues_[numProps_] = d; + types_[numProps_] = type; + numProps_ += 1; +} + +int +lefiLayer::numProps() const +{ + return numProps_; +} + +const char * +lefiLayer::propName(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1300): The index number %d given for the layer property is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1300, msg); + return 0; + } + return names_[i]; +} + +const char * +lefiLayer::propValue(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1300): The index number %d given for the layer property is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1300, msg); + return 0; + } + return values_[i]; +} + +double +lefiLayer::propNumber(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1300): The index number %d given for the layer property is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1300, msg); + return 0; + } + return dvalues_[i]; +} + +const char +lefiLayer::propType(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1300): The index number %d given for the layer property is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1300, msg); + return 0; + } + return types_[i]; +} + +int +lefiLayer::propIsNumber(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1300): The index number %d given for the layer property is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1300, msg); + return 0; + } + return dvalues_[i] ? 1 : 0; +} + +int +lefiLayer::propIsString(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1300): The index number %d given for the layer property is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1300, msg); + return 0; + } + return dvalues_[i] ? 0 : 1; +} + +void +lefiLayer::addAccurrentDensity(const char *type) +{ + lefiLayerDensity *density; + if (numAccurrents_ == accurrentAllocated_) { + lefiLayerDensity **array; + int i; + accurrentAllocated_ = accurrentAllocated_ ? + accurrentAllocated_ * 2 : 2; + array = (lefiLayerDensity**) lefMalloc(sizeof(lefiLayerDensity*) + * accurrentAllocated_); + for (i = 0; i < numAccurrents_; i++) + array[i] = accurrents_[i]; + if (accurrents_) + lefFree((char*) (accurrents_)); + accurrents_ = array; + } + density = accurrents_[numAccurrents_] = + (lefiLayerDensity*) lefMalloc(sizeof(lefiLayerDensity)); + numAccurrents_ += 1; + density->Init(type); +} + +void +lefiLayer::setAcOneEntry(double num) +{ + lefiLayerDensity *density; + density = accurrents_[numAccurrents_ - 1]; + density->setOneEntry(num); +} + +void +lefiLayer::addAcFrequency() +{ + lefiLayerDensity *density; + density = accurrents_[numAccurrents_ - 1]; + density->addFrequency(numNums_, nums_); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::addAcCutarea() +{ + lefiLayerDensity *density; + density = accurrents_[numAccurrents_ - 1]; + density->addCutarea(numNums_, nums_); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::addAcTableEntry() +{ + lefiLayerDensity *density; + density = accurrents_[numAccurrents_ - 1]; + density->addTableEntry(numNums_, nums_); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::addAcWidth() +{ + lefiLayerDensity *density; + density = accurrents_[numAccurrents_ - 1]; + density->addWidth(numNums_, nums_); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::setDcOneEntry(double num) +{ + lefiLayerDensity *density; + density = dccurrents_[numDccurrents_ - 1]; + density->setOneEntry(num); +} + +void +lefiLayer::addDccurrentDensity(const char *type) +{ + lefiLayerDensity *density; + if (numDccurrents_ == dccurrentAllocated_) { + lefiLayerDensity **array; + int i; + dccurrentAllocated_ = dccurrentAllocated_ ? + dccurrentAllocated_ * 2 : 2; + array = (lefiLayerDensity**) lefMalloc(sizeof(lefiLayerDensity*) + * dccurrentAllocated_); + for (i = 0; i < numDccurrents_; i++) + array[i] = dccurrents_[i]; + if (dccurrents_) + lefFree((char*) (dccurrents_)); + dccurrents_ = array; + } + density = dccurrents_[numDccurrents_] = + (lefiLayerDensity*) lefMalloc(sizeof(lefiLayerDensity)); + numDccurrents_ += 1; + density->Init(type); +} + +void +lefiLayer::addDcCutarea() +{ + lefiLayerDensity *density; + density = dccurrents_[numDccurrents_ - 1]; + density->addCutarea(numNums_, nums_); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::addDcTableEntry() +{ + lefiLayerDensity *density; + density = dccurrents_[numDccurrents_ - 1]; + density->addTableEntry(numNums_, nums_); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::addDcWidth() +{ + lefiLayerDensity *density; + density = dccurrents_[numDccurrents_ - 1]; + density->addWidth(numNums_, nums_); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::addNumber(double num) +{ + if (numNums_ == numAllocated_) { + double *array; + int i; + numAllocated_ = numAllocated_ ? + numAllocated_ * 2 : 2; + array = (double*) lefMalloc(sizeof(double) * numAllocated_); + for (i = 0; i < numNums_; i++) + array[i] = nums_[i]; + if (nums_) + lefFree((char*) (nums_)); + nums_ = array; + } + nums_[numNums_++] = num; +} + +int +lefiLayer::getNumber() +{ + return numNums_ - 1; +} + +int +lefiLayer::hasAccurrentDensity() const +{ + return numAccurrents_ ? 1 : 0; +} + +int +lefiLayer::hasDccurrentDensity() const +{ + return numDccurrents_ ? 1 : 0; +} + +int +lefiLayer::numAccurrentDensity() const +{ + return (numAccurrents_); +} + +int +lefiLayer::numDccurrentDensity() const +{ + return (numDccurrents_); +} + +lefiLayerDensity * +lefiLayer::accurrent(int index) const +{ + if (index >= numAccurrents_) + return 0; + return (accurrents_[index]); +} + +lefiLayerDensity * +lefiLayer::dccurrent(int index) const +{ + if (index >= numDccurrents_) + return 0; + return (dccurrents_[index]); +} + +// 5.5 +void +lefiLayer::addAntennaModel(int aOxide) +{ + // For version 5.5 only OXIDE1, OXIDE2, OXIDE3, & OXIDE4 + // are defined within a macro pin + lefiAntennaModel *amo; + int i; + + if (numAntennaModel_ == 0) { // does not have antennaModel + antennaModel_ = (lefiAntennaModel**) + lefMalloc(sizeof(lefiAntennaModel*) * 4); + antennaModelAllocated_ = 4; + for (i = 0; i < 4; i++) { + antennaModel_[i] = (lefiAntennaModel*) + lefMalloc(sizeof(lefiAntennaModel)); + antennaModel_[i]->Init(); + // just initialize it first + } + antennaModelAllocated_ = 4; + amo = antennaModel_[0]; + } + + // First can go any oxide, so fill pref oxides models. + for (int idx = 0; idx < aOxide - 1; idx++) { + amo = antennaModel_[idx]; + if (!amo->antennaOxide()) { + amo->setAntennaModel(idx + 1); + } + } + + amo = antennaModel_[aOxide - 1]; + // Oxide has not defined yet + if (amo->antennaOxide()) { + amo->Destroy(); + } + + if (aOxide > numAntennaModel_) { + numAntennaModel_ = aOxide; + } + + amo->Init(); + amo->setAntennaModel(aOxide); + + currentAntennaModel_ = amo; + + return; +} + +// 5.5 +int +lefiLayer::numAntennaModel() const +{ + return numAntennaModel_; +} + +// 5.5 +lefiAntennaModel * +lefiLayer::antennaModel(int index) const +{ + return antennaModel_[index]; +} + +// 3/23/2000 -- Wanda da Rosa. The following are for 5.4 syntax +void +lefiLayer::setAntennaAreaRatio(double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaAreaRatio(value); +} + +void +lefiLayer::setAntennaCumAreaRatio(double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaCumAreaRatio(value); +} + +void +lefiLayer::setAntennaAreaFactor(double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaAreaFactor(value); +} + +void +lefiLayer::setAntennaSideAreaRatio(double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaSideAreaRatio(value); +} + +void +lefiLayer::setAntennaCumSideAreaRatio(double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaCumSideAreaRatio(value); +} + +void +lefiLayer::setAntennaSideAreaFactor(double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaSideAreaFactor(value); +} + +void +lefiLayer::setAntennaValue(lefiAntennaEnum antennaType, + double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaValue(antennaType, value); +} + +void +lefiLayer::setAntennaDUO(lefiAntennaEnum antennaType) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaDUO(antennaType); +} + +void +lefiLayer::setAntennaPWL(lefiAntennaEnum antennaType, + lefiAntennaPWL *pwl) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaPWL(antennaType, pwl); +} + +// 5.7 +void +lefiLayer::setAntennaCumRoutingPlusCut() +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaCumRoutingPlusCut(); +} + +// 5.7 +void +lefiLayer::setAntennaGatePlusDiff(double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaGatePlusDiff(value); +} + +// 5.7 +void +lefiLayer::setAntennaAreaMinusDiff(double value) +{ + if (numAntennaModel_ == 0) // haven't created any antannaModel yet + addAntennaModel(1); + currentAntennaModel_->setAntennaAreaMinusDiff(value); +} + +// 8/29/2001 -- Wanda da Rosa. The following are for 5.4 enhancements + +void +lefiLayer::setSlotWireWidth(double num) +{ + hasSlotWireWidth_ = 1; + slotWireWidth_ = num; +} + +void +lefiLayer::setSlotWireLength(double num) +{ + hasSlotWireLength_ = 1; + slotWireLength_ = num; +} + +void +lefiLayer::setSlotWidth(double num) +{ + hasSlotWidth_ = 1; + slotWidth_ = num; +} + +void +lefiLayer::setSlotLength(double num) +{ + hasSlotLength_ = 1; + slotLength_ = num; +} + +void +lefiLayer::setMaxAdjacentSlotSpacing(double num) +{ + hasMaxAdjacentSlotSpacing_ = 1; + maxAdjacentSlotSpacing_ = num; +} + +void +lefiLayer::setMaxCoaxialSlotSpacing(double num) +{ + hasMaxCoaxialSlotSpacing_ = 1; + maxCoaxialSlotSpacing_ = num; +} + +void +lefiLayer::setMaxEdgeSlotSpacing(double num) +{ + hasMaxEdgeSlotSpacing_ = 1; + maxEdgeSlotSpacing_ = num; +} + +void +lefiLayer::setSplitWireWidth(double num) +{ + hasSplitWireWidth_ = 1; + splitWireWidth_ = num; +} + +void +lefiLayer::setMinimumDensity(double num) +{ + hasMinimumDensity_ = 1; + minimumDensity_ = num; +} + +void +lefiLayer::setMaximumDensity(double num) +{ + hasMaximumDensity_ = 1; + maximumDensity_ = num; +} + +void +lefiLayer::setDensityCheckWindow(double length, + double width) +{ + hasDensityCheckWindow_ = 1; + densityCheckWindowLength_ = length; + densityCheckWindowWidth_ = width; +} + +void +lefiLayer::setDensityCheckStep(double num) +{ + hasDensityCheckStep_ = 1; + densityCheckStep_ = num; +} + +void +lefiLayer::setFillActiveSpacing(double num) +{ + hasFillActiveSpacing_ = 1; + fillActiveSpacing_ = num; +} + +int +lefiLayer::hasSlotWireWidth() const +{ + return hasSlotWireWidth_; +} + +int +lefiLayer::hasSlotWireLength() const +{ + return hasSlotWireLength_; +} + +int +lefiLayer::hasSlotWidth() const +{ + return hasSlotWidth_; +} + +int +lefiLayer::hasSlotLength() const +{ + return hasSlotLength_; +} + +int +lefiLayer::hasMaxAdjacentSlotSpacing() const +{ + return hasMaxAdjacentSlotSpacing_; +} + +int +lefiLayer::hasMaxCoaxialSlotSpacing() const +{ + return hasMaxCoaxialSlotSpacing_; +} + +int +lefiLayer::hasMaxEdgeSlotSpacing() const +{ + return hasMaxEdgeSlotSpacing_; +} + +int +lefiLayer::hasSplitWireWidth() const +{ + return hasSplitWireWidth_; +} + +int +lefiLayer::hasMinimumDensity() const +{ + return hasMinimumDensity_; +} + +int +lefiLayer::hasMaximumDensity() const +{ + return hasMaximumDensity_; +} + +int +lefiLayer::hasDensityCheckWindow() const +{ + return hasDensityCheckWindow_; +} + +int +lefiLayer::hasDensityCheckStep() const +{ + return hasDensityCheckStep_; +} + +int +lefiLayer::hasFillActiveSpacing() const +{ + return hasFillActiveSpacing_; +} + +double +lefiLayer::slotWireWidth() const +{ + return slotWireWidth_; +} + +double +lefiLayer::slotWireLength() const +{ + return slotWireLength_; +} + +double +lefiLayer::slotWidth() const +{ + return slotWidth_; +} + +double +lefiLayer::slotLength() const +{ + return slotLength_; +} + +double +lefiLayer::maxAdjacentSlotSpacing() const +{ + return maxAdjacentSlotSpacing_; +} + +double +lefiLayer::maxCoaxialSlotSpacing() const +{ + return maxCoaxialSlotSpacing_; +} + +double +lefiLayer::maxEdgeSlotSpacing() const +{ + return maxEdgeSlotSpacing_; +} + +double +lefiLayer::splitWireWidth() const +{ + return splitWireWidth_; +} + +double +lefiLayer::minimumDensity() const +{ + return minimumDensity_; +} + +double +lefiLayer::maximumDensity() const +{ + return maximumDensity_; +} + +double +lefiLayer::densityCheckWindowLength() const +{ + return densityCheckWindowLength_; +} + +double +lefiLayer::densityCheckWindowWidth() const +{ + return densityCheckWindowWidth_; +} + +double +lefiLayer::densityCheckStep() const +{ + return densityCheckStep_; +} + +double +lefiLayer::fillActiveSpacing() const +{ + return fillActiveSpacing_; +} + +// 5.5 SPACINGTABLE + +void +lefiLayer::addSpacingTable() +{ + lefiSpacingTable *sp; + if (numSpacingTable_ == spacingTableAllocated_) { + lefiSpacingTable **array; + int i; + spacingTableAllocated_ = spacingTableAllocated_ ? + spacingTableAllocated_ * 2 : 2; + array = (lefiSpacingTable**) lefMalloc(sizeof(lefiSpacingTable*) + * spacingTableAllocated_); + for (i = 0; i < numSpacingTable_; i++) + array[i] = spacingTable_[i]; + if (spacingTable_) + lefFree((char*) (spacingTable_)); + spacingTable_ = array; + } + sp = spacingTable_[numSpacingTable_] = + (lefiSpacingTable*) lefMalloc(sizeof(lefiSpacingTable)); + numSpacingTable_ += 1; + sp->Init(); +} + +void +lefiLayer::addSpParallelLength() +{ + lefiSpacingTable *sp; + sp = spacingTable_[numSpacingTable_ - 1]; + sp->addParallelLength(numNums_, nums_); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::addSpParallelWidth(double width) +{ + lefiSpacingTable *sp; + sp = spacingTable_[numSpacingTable_ - 1]; + sp->addParallelWidth(width); +} + +void +lefiLayer::addSpParallelWidthSpacing() +{ + lefiSpacingTable *sp; + sp = spacingTable_[numSpacingTable_ - 1]; + sp->addParallelWidthSpacing(numNums_, nums_); + // Since inside addParallelWidthSpacing copy the nums_, we can free it + // here + lefFree((char*) (nums_)); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; +} + +void +lefiLayer::addSpTwoWidths(double width, + double runLength) +{ + lefiSpacingTable *sp; + sp = spacingTable_[numSpacingTable_ - 1]; + /* This will never happen since in lef.y, the grammer requires a number for + spacing + if (numNums_ == 0) { + * spacing is required in TWOWIDTHS * + lefiError("ERROR (LEFPARS-1324): Incorrect syntax defined for the statement TWOWIDTHS.\nspacing, which is required is not defined."); + return; + } + */ + sp->addTwoWidths(width, runLength, numNums_, + nums_, hasTwoWidthPRL_); + // Since inside addTwoWidthsSpacing copy the nums_, we can free it + // here + lefFree((char*) (nums_)); + numNums_ = 0; + numAllocated_ = 0; + nums_ = 0; + hasTwoWidthPRL_ = 0; +} + +void +lefiLayer::setInfluence() +{ + lefiSpacingTable *sp; + sp = spacingTable_[numSpacingTable_ - 1]; + sp->setInfluence(); +} + +void +lefiLayer::addSpInfluence(double width, + double distance, + double spacing) +{ + lefiSpacingTable *sp; + sp = spacingTable_[numSpacingTable_ - 1]; + sp->addInfluence(width, distance, spacing); +} + +int +lefiLayer::numSpacingTable() +{ + return numSpacingTable_; +} + +void +lefiLayer::setSpTwoWidthsHasPRL(int hasPRL) +{ + hasTwoWidthPRL_ = hasPRL; +} + +lefiSpacingTable * +lefiLayer::spacingTable(int index) +{ + return spacingTable_[index]; +} + +// 5.6 ENCLOSURE PREFERENCLOSURE & RESISTANCEPERCUT + +void +lefiLayer::addEnclosure(char *enclRule, + double overhang1, + double overhang2) +{ + if (numEnclosure_ == enclosureAllocated_) { + int i, len; + char **er; + double *o1; + double *o2; + double *mw; + double *ct; + double *ml; + + if (enclosureAllocated_ == 0) + len = enclosureAllocated_ = 2; + else + len = enclosureAllocated_ *= 2; + er = (char**) lefMalloc(sizeof(char*) * len); + o1 = (double*) lefMalloc(sizeof(double) * len); + o2 = (double*) lefMalloc(sizeof(double) * len); + mw = (double*) lefMalloc(sizeof(double) * len); + ct = (double*) lefMalloc(sizeof(double) * len); + ml = (double*) lefMalloc(sizeof(double) * len); + + if (numEnclosure_ > 0) { + for (i = 0; i < numEnclosure_; i++) { + er[i] = enclosureRules_[i]; + o1[i] = overhang1_[i]; + o2[i] = overhang2_[i]; + mw[i] = encminWidth_[i]; + ct[i] = cutWithin_[i]; + ml[i] = minLength_[i]; + } + lefFree((char*) (enclosureRules_)); + lefFree((char*) (overhang1_)); + lefFree((char*) (overhang2_)); + lefFree((char*) (encminWidth_)); + lefFree((char*) (cutWithin_)); + lefFree((char*) (minLength_)); + } + enclosureRules_ = er; + overhang1_ = o1; + overhang2_ = o2; + encminWidth_ = mw; + cutWithin_ = ct; + minLength_ = ml; + } + if (enclRule) { + if (strcmp(enclRule, "NULL") == 0) + enclosureRules_[numEnclosure_] = NULL; + else + enclosureRules_[numEnclosure_] = strdup(enclRule); + } else + enclosureRules_[numEnclosure_] = NULL; + overhang1_[numEnclosure_] = overhang1; + overhang2_[numEnclosure_] = overhang2; + encminWidth_[numEnclosure_] = 0; + cutWithin_[numEnclosure_] = 0; + minLength_[numEnclosure_] = 0; + numEnclosure_ += 1; +} + +void +lefiLayer::addEnclosureWidth(double minWidth) +{ + encminWidth_[numEnclosure_ - 1] = minWidth; +} + +void +lefiLayer::addEnclosureExceptEC(double cutWithin) +{ + cutWithin_[numEnclosure_ - 1] = cutWithin; +} + +void +lefiLayer::addEnclosureLength(double minLength) +{ + minLength_[numEnclosure_ - 1] = minLength; +} + +int +lefiLayer::numEnclosure() const +{ + return numEnclosure_; +} + +int +lefiLayer::hasEnclosureRule(int index) const +{ + return enclosureRules_[index] ? 1 : 0; +} + +char * +lefiLayer::enclosureRule(int index) +{ + return enclosureRules_[index]; +} + +double +lefiLayer::enclosureOverhang1(int index) const +{ + return overhang1_[index]; +} + +double +lefiLayer::enclosureOverhang2(int index) const +{ + return overhang2_[index]; +} + +int +lefiLayer::hasEnclosureWidth(int index) const +{ + return encminWidth_[index] ? 1 : 0; +} + +double +lefiLayer::enclosureMinWidth(int index) const +{ + return encminWidth_[index]; +} + +int +lefiLayer::hasEnclosureExceptExtraCut(int index) const +{ + return cutWithin_[index] ? 1 : 0; +} + +double +lefiLayer::enclosureExceptExtraCut(int index) const +{ + return cutWithin_[index]; +} + +int +lefiLayer::hasEnclosureMinLength(int index) const +{ + return minLength_[index] ? 1 : 0; +} + +double +lefiLayer::enclosureMinLength(int index) const +{ + return minLength_[index]; +} + +void +lefiLayer::addPreferEnclosure(char *enclRule, + double overhang1, + double overhang2) +{ + if (numPreferEnclosure_ == preferEnclosureAllocated_) { + int i, len; + char **er; + double *o1; + double *o2; + double *mw; + + if (preferEnclosureAllocated_ == 0) + len = preferEnclosureAllocated_ = 2; + else + len = preferEnclosureAllocated_ *= 2; + er = (char**) lefMalloc(sizeof(char*) * len); + o1 = (double*) lefMalloc(sizeof(double) * len); + o2 = (double*) lefMalloc(sizeof(double) * len); + mw = (double*) lefMalloc(sizeof(double) * len); + + if (numPreferEnclosure_ > 0) { + for (i = 0; i < numPreferEnclosure_; i++) { + er[i] = preferEnclosureRules_[i]; + o1[i] = preferOverhang1_[i]; + o2[i] = preferOverhang1_[i]; + mw[i] = preferMinWidth_[i]; + } + lefFree((char*) (preferEnclosureRules_)); + lefFree((char*) (preferOverhang1_)); + lefFree((char*) (preferOverhang2_)); + lefFree((char*) (preferMinWidth_)); + } + preferEnclosureRules_ = er; + preferOverhang1_ = o1; + preferOverhang2_ = o2; + preferMinWidth_ = mw; + } + if (strcmp(enclRule, "NULL") == 0) + preferEnclosureRules_[numPreferEnclosure_] = NULL; + else + preferEnclosureRules_[numPreferEnclosure_] = strdup(enclRule); + preferOverhang1_[numPreferEnclosure_] = overhang1; + preferOverhang2_[numPreferEnclosure_] = overhang2; + preferMinWidth_[numPreferEnclosure_] = 0; + numPreferEnclosure_ += 1; +} + +void +lefiLayer::addPreferEnclosureWidth(double minWidth) +{ + preferMinWidth_[numPreferEnclosure_ - 1] = minWidth; +} + +int +lefiLayer::numPreferEnclosure() const +{ + return numPreferEnclosure_; +} + +int +lefiLayer::hasPreferEnclosureRule(int index) const +{ + return preferEnclosureRules_[index] ? 1 : 0; +} + +char * +lefiLayer::preferEnclosureRule(int index) +{ + return preferEnclosureRules_[index]; +} + +double +lefiLayer::preferEnclosureOverhang1(int index) const +{ + return preferOverhang1_[index]; +} + +double +lefiLayer::preferEnclosureOverhang2(int index) const +{ + return preferOverhang2_[index]; +} + +int +lefiLayer::hasPreferEnclosureWidth(int index) const +{ + return preferMinWidth_[index] ? 1 : 0; +} + +double +lefiLayer::preferEnclosureMinWidth(int index) const +{ + return preferMinWidth_[index]; +} + +void +lefiLayer::setResPerCut(double value) +{ + resPerCut_ = value; +} + +int +lefiLayer::hasResistancePerCut() const +{ + return resPerCut_ ? 1 : 0; +} + +double +lefiLayer::resistancePerCut() const +{ + return resPerCut_; +} + +void +lefiLayer::setDiagMinEdgeLength(double value) +{ + diagMinEdgeLength_ = value; +} + +int +lefiLayer::hasDiagMinEdgeLength() const +{ + return diagMinEdgeLength_ ? 1 : 0; +} + +double +lefiLayer::diagMinEdgeLength() const +{ + return diagMinEdgeLength_; +} + +void +lefiLayer::setMinSize(lefiGeometries *geom) +{ + struct lefiGeomPolygon tempPoly; + int i; + + tempPoly = *(geom->getPolygon(0)); + numMinSize_ = tempPoly.numPoints; + if (numMinSize_ > 0) { + minSizeWidth_ = (double*) lefMalloc(sizeof(double) * numMinSize_); + minSizeLength_ = (double*) lefMalloc(sizeof(double) * numMinSize_); + for (i = 0; i < numMinSize_; i++) { + minSizeWidth_[i] = tempPoly.x[i]; + minSizeLength_[i] = tempPoly.y[i]; + } + } else { + minSizeWidth_ = 0; + minSizeLength_ = 0; + } +} + +int +lefiLayer::numMinSize() const +{ + return numMinSize_; +} + +double +lefiLayer::minSizeWidth(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinSize_) { + sprintf(msg, "ERROR (LEFPARS-1301): The index number %d given for the layer MINSIZE is invalid.\nValid index is from 0 to %d\n", index, numMinSize_); + lefiError(0, 1301, msg); + return 0; + } + return minSizeWidth_[index]; +} + +double +lefiLayer::minSizeLength(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinSize_) { + sprintf(msg, "ERROR (LEFPARS-1301): The index number %d given for the layer MINSIZE is invalid.\nValid index is from 0 to %d\n", index, numMinSize_); + lefiError(0, 1301, msg); + return 0; + } + return minSizeLength_[index]; +} + +// 5.6 CHANGES ON MINSTEP +int +lefiLayer::numMinstep() const +{ + return numMinstep_; +} + +double +lefiLayer::minstep(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstep_[index]; +} + +int +lefiLayer::hasMinstepType(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepType_[index] ? 1 : 0; +} + +char * +lefiLayer::minstepType(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepType_[index]; +} + +int +lefiLayer::hasMinstepLengthsum(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepLengthsum_[index] == -1 ? 0 : 1; +} + +double +lefiLayer::minstepLengthsum(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepLengthsum_[index]; +} + +// 5.7 +int +lefiLayer::hasMinstepMaxedges(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepMaxEdges_[index] == -1 ? 0 : 1; +} + +// 5.7 +int +lefiLayer::minstepMaxedges(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepMaxEdges_[index]; +} + +// 5.7 +int +lefiLayer::hasMinstepMinAdjLength(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepMinAdjLength_[index] == -1 ? 0 : 1; +} + +// 5.7 +double +lefiLayer::minstepMinAdjLength(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepMinAdjLength_[index]; +} + +// 5.7 +int +lefiLayer::hasMinstepMinBetLength(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepMinBetLength_[index] == -1 ? 0 : 1; +} + +// 5.7 +double +lefiLayer::minstepMinBetLength(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepMinBetLength_[index]; +} + +// 5.7 +int +lefiLayer::hasMinstepXSameCorners(int index) const +{ + char msg[160]; + if (index < 0 || index > numMinstep_) { + sprintf(msg, "ERROR (LEFPARS-1302): The index number %d given for the layer MINSTEP is invalid.\nValid index is from 0 to %d", index, numMinstep_); + lefiError(0, 1302, msg); + return 0; + } + return minstepXSameCorners_[index] == -1 ? 0 : 1; +} + +// 5.7 +lefiOrthogonal * +lefiLayer::orthogonal() const +{ + return spacingTableOrtho_; +} + +// 5.7 +double +lefiLayer::maxFloatingArea() const +{ + return maxArea_; +} + +// 5.7 +double +lefiLayer::viaWidth() const +{ + return viaWidth_; +} + +// 5.7 +double +lefiLayer::cutSpacing() const +{ + return cutSpacing_; +} + +// 5.7 +int +lefiLayer::numArrayCuts() const +{ + return numArrayCuts_; +} + +// 5.7 +int +lefiLayer::arrayCuts(int index) const +{ + char msg[160]; + if (index < 0 || index > numArrayCuts_) { + sprintf(msg, "ERROR (LEFPARS-1303): The index number %d given for the layer ARRAYCUTS is invalid.\nValid index is from 0 to %d", index, numArrayCuts_); + lefiError(0, 1303, msg); + return 0; + } + return arrayCuts_[index]; +} + +// 5.7 +double +lefiLayer::arraySpacing(int index) const +{ + char msg[160]; + if (index < 0 || index > numArrayCuts_) { + sprintf(msg, "ERROR (LEFPARS-1304): The index number %d given for the layer SPACING is invalid.\nValid index is from 0 to %d", index, numArrayCuts_); + lefiError(0, 1304, msg); + return 0; + } + return arraySpacings_[index]; +} + +// PRIVATE 5.7 +// SPACING cutSpacing +// [CENTERTOCENTER] +// [SAMENET] +// [ LAYER secondLayerName [STACK] +// | ADJACENTCUTS {2|3|4} WITHIN cutWithin [EXCEPTSAMEPGNET] +// | PARALLELOVERLAP +// | AREA cutArea ] ; +// SPACING routing ENDOFLINE eolWidth WITHIN eolWithin +// [PARALLELEDGE parSpace WITHIN parWithin [TWOEDGES]]; +void +lefiLayer::parseSpacing(int index) +{ + char *wrkingStr = strdup(values_[index]); + char *value; + double spValue = 0, width = 0, within = 0, pValue = 0, pWithin = 0; + double cutArea = 0; + char msg[1024]; + int numCuts = 0, twoEdges = 0; + + // Pre-parse the string before breaking it up and store it in + // the layer class. + // If the string is + // SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWithin + // [PARALLELEDGE parSpace WITHIN parWithin [TWOEDGES]] + // [ENCLOSECUT [BELOW | ABOVE] encloseDist CUTSPACING cutToMetalSpace] + // Keep the property as it, and don't break it and save in layer class + + value = strtok(wrkingStr, " "); + while (value) { + if (strcmp(value, "SPACING") != 0) { + free(wrkingStr); + return; + } + + value = strtok(NULL, " "); + spValue = atof(value); + + value = strtok(NULL, " "); + if ((strcmp(value, "CENTERTOCENTER") == 0) || + (strcmp(value, "SAMENET") == 0) || + (strcmp(value, "LAYER") == 0) || + (strcmp(value, "ADJACENTCUTS") == 0) || + (strcmp(value, "PARALLELOVERLAP") == 0) || + (strcmp(value, "AREA") == 0)) { + + if (strcmp(type(), "CUT") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1321): The property LEF57_SPACING with value %s is for TYPE CUT only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", + values_[index], type()); + lefiError(msg); + */ + sprintf(msg, "The property LEF57_SPACING with value %s is for TYPE CUT only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", + values_[index], type()); + lefError(1321, msg); + free(wrkingStr); + return; + } + setSpacingMin(spValue); + if (strcmp(value, "CENTERTOCENTER") == 0) { + // SPACING minSpacing CENTERTOCENTER ; + setSpacingCenterToCenter(); + value = strtok(NULL, " "); + if (*value == ';') { + value = strtok(NULL, " "); + continue; // Look for a new statement + } + } + if (strcmp(value, "SAMENET") == 0) { + // SPACING minSpacing SAMENET ; + setSpacingSamenet(); + value = strtok(NULL, " "); + if (*value == ';') { + value = strtok(NULL, " "); + continue; // Look for a new statement + } + } + if (strcmp(value, "LAYER") == 0) { + value = strtok(NULL, " "); + if (value && *value != '\n') { + setSpacingName(value); + value = strtok(NULL, " "); + if (strcmp(value, "STACK") == 0) { + setSpacingLayerStack(); + value = strtok(NULL, " "); + if (*value != ';') { + /* + sprintf(msg, "ERROR (LEFPARS-1320): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefError(1320, msg); + free(wrkingStr); + return; + } + } else if (*value != ';') { + /* + sprintf(msg, "ERROR (LEFPARS-1320): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefError(1320, msg); + free(wrkingStr); + return; + } else { + value = strtok(NULL, " "); + continue; + } + } + } else if (strcmp(value, "ADJACENTCUTS") == 0) { + value = strtok(NULL, " "); + numCuts = atoi(value); + if ((numCuts < 2) || (numCuts > 4)) { + /* + sprintf(msg, "ERROR (LEFPARS-1320): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefError(1320, msg); + free(wrkingStr); + return; + } + value = strtok(NULL, " "); + if (strcmp(value, "WITHIN") == 0) { + value = strtok(NULL, " "); + within = atof(value); + setSpacingAdjacent(numCuts, within); + value = strtok(NULL, " "); + if (strcmp(value, "EXCEPTSAMEPGNET") == 0) { + setSpacingAdjacentExcept(); + value = strtok(NULL, " "); + if (*value != ';') { + /* + sprintf(msg, "ERROR (LEFPARS-1320): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefError(1320, msg); + free(wrkingStr); + return; + } + } else if (*value != ';') { + /* + sprintf(msg, "ERROR (LEFPARS-1320): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefError(1320, msg); + free(wrkingStr); + return; + } else { + value = strtok(NULL, " "); + } + } else { + /* + sprintf(msg, "ERROR (LEFPARS-1320): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefError(1320, msg); + free(wrkingStr); + return; + } + } else if (strcmp(value, "PARALLELOVERLAP") == 0) { + // SPACING minSpacing PARALLELOVERLAP ; + setSpacingParallelOverlap(); + value = strtok(NULL, " "); + if (*value != ';') { + /* + sprintf(msg, "ERROR (LEFPARS-1320): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefError(1320, msg); + free(wrkingStr); + return; + } else { + value = strtok(NULL, " "); + } + } else if (strcmp(value, "AREA") == 0) { + value = strtok(NULL, " "); + cutArea = atof(value); + setSpacingArea(cutArea); + value = strtok(NULL, " "); + if (*value != ';') { + /* + sprintf(msg, "ERROR (LEFPARS-1320): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING cutSpacing [CENTERTOCENTER][SAMENET]\n\t[LAYER secondLayerName[STACK]\n\t| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]\n\t| PARALLELOVERLAP\n\t| AREA cutArea ;\"", + values_[index]); + lefError(1320, msg); + free(wrkingStr); + return; + } else { + value = strtok(NULL, " "); + } + } + } else if (strcmp(value, "SAMEMETAL") == 0) { + // SPACING cutSpacing SAMEMETAL just exit + free(wrkingStr); + return; + + } else if (strcmp(value, "ENDOFLINE") == 0) { + // SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWithin + // [PARALLELEGE parSpace WITHIN parWithin [TWOEDGES]] + // Parse the string lefData->first, if it has the syntax of + // SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWithin + // [PARALLELEDGE parSpace WITHIN parWithin [TWOEDGES]] + // than store the data, otherwise, skip to ; + + if (strcmp(type(), "ROUTING") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1322): The property LEF57_SPACING with value %s is for TYPE ROUTING only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", + values_[index], type()); + lefiError(msg); + */ + sprintf(msg, "The property LEF57_SPACING with value %s is for TYPE ROUTING only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", + values_[index], type()); + lefError(1322, msg); + free(wrkingStr); + return; + } + + twoEdges = 0; + + value = strtok(NULL, " "); + width = atof(value); + value = strtok(NULL, " "); + if (strcmp(value, "WITHIN") == 0) { + value = strtok(NULL, " "); + within = atof(value); + // * setSpacingMin(spValue); + // * setSpacingEol(width, within); + // Check if option [PARALLELEDGE parSpace WITHIN parWithin] is set + value = strtok(NULL, " "); + if (value && *value != '\n') { + if (strcmp(value, "PARALLELEDGE") == 0) { + value = strtok(NULL, " "); + pValue = atof(value); + value = strtok(NULL, " "); + if (strcmp(value, "WITHIN") == 0) { + value = strtok(NULL, " "); + pWithin = atof(value); + // * setSpacingParSW(pValue, pWithin); + // Check if TWOEDGES is set + value = strtok(NULL, " "); + if (value && *value != '\n') { + if (strcmp(value, "TWOEDGES") == 0) { + // * setSpacingParTwoEdges(); + twoEdges = 1; + value = strtok(NULL, " "); + if (*value == ';') { + // Save the value to lefiLayer class + setSpacingMin(spValue); + setSpacingEol(width, within); + setSpacingParSW(pValue, pWithin); + if (twoEdges) + setSpacingParTwoEdges(); + value = strtok(NULL, " "); + continue; // with the while loop + } else { + // More rules, skip to ; + while ((value) && (*value != ';') && + (*value != '\n')) + value = strtok(NULL, " "); + if ((value) && (*value == ';')) { + value = strtok(NULL, " "); + continue; + } + } + } else if (*value == ';') { + setSpacingMin(spValue); + setSpacingEol(width, within); + setSpacingParSW(pValue, pWithin); + value = strtok(NULL, " "); // done with this + continue; // statement with the while loop + } else { + // More rules, skip to ; + while ((value) && (*value != ';') && + (*value != '\n')) + value = strtok(NULL, " "); + if ((value) && (*value == ';')) { + value = strtok(NULL, " "); + continue; + } + } + } else { + /* + sprintf(msg, "ERROR (LEFPARS-1305): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", values_[index]); + lefError(1305, msg); + free(wrkingStr); + return; + } + } else { + /* + sprintf(msg, "ERROR (LEFPARS-1305): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", values_[index]); + lefError(1305, msg); + free(wrkingStr); + return; + } + } else if (*value == ';') { + // Save the data in lefiLayer lefData->first + setSpacingMin(spValue); + setSpacingEol(width, within); + value = strtok(NULL, " "); // done with this + continue; + } else { + while ((value) && (*value != ';') && (*value != '\n')) + value = strtok(NULL, " "); + if ((value) && (*value == ';')) { + value = strtok(NULL, " "); + continue; + } + } + } + } else { + /* + sprintf(msg, "ERROR (LEFPARS-1305): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is either \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is either \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", values_[index]); + lefError(1305, msg); + free(wrkingStr); + return; + } + } else { + /* + sprintf(msg, "ERROR (LEFPARS-1305): Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is either \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_SPACING: %s.\nCorrect syntax is either \"SPACING minSpacing [CENTERTOCENTER]\"\n\"[LAYER secondLayerName | ADJACENTCUTS {2|3|4} WITHIN cutWithin | PARALLELOVERLAP | AREA cutArea]\" or\n\"SPACING eolSpace ENDOFLINE eolWidth WITHIN eolWITHIN [PARALLELEDGE parSpace WITHIN parWithin [TOWEDGES]]\"\n", values_[index]); + lefError(1305, msg); + free(wrkingStr); + return; + } + } + + // None of the above statement + free(wrkingStr); + return; +} + +// PRIVATE 5.7 +/* NOT an OA data model +void lefiLayer::parseMaxFloating(int index) { + char *wrkingStr = strdup(values_[index]); + char *value; + double maxArea; + char msg[1024]; + + value = strtok(wrkingStr, " "); + if (strcmp(value, "MAXFLOATINGAREA") != 0) { + sprintf(msg, "ERROR (LEFPARS-1306): Incorrect syntax defined for property LEF57_MAXFLOATINGAREA: %s.\nCorrect syntax is \"MAXFLOATINGAREA maxArea\"\n", values_[index]); + lefiError(0, 1306, msg); + free(wrkingStr); + return; + } + + value = strtok(NULL, " "); + maxArea = atof(value); + setMaxFloatingArea(maxArea); + + free(wrkingStr); + return; +} +*/ + +// PRIVATE 5.7 +void +lefiLayer::parseArraySpacing(int index) +{ + char *wrkingStr = strdup(values_[index]); + char *value; + double viaWidth = 0, cutSpacing = 0, arraySpacing; + int arrayCuts; + int hasLongArray = 0, hasArrayCut = 0; + char msg[1024]; + + value = strtok(wrkingStr, " "); + if (strcmp(value, "ARRAYSPACING") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1307): Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefError(1307, msg); + free(wrkingStr); + return; + } + value = strtok(NULL, " "); + + while (strcmp(value, ";") != 0) { + if (strcmp(value, "LONGARRAY") == 0) { + if (cutSpacing != 0) { // make sure syntax has correct order + /* + sprintf(msg, "ERROR (LEFPARS-1308): Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nLONGARRAY is defined after CUTSPACING.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nLONGARRAY is defined after CUTSPACING.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefError(1308, msg); + free(wrkingStr); + return; + } + hasLongArray = 1; + value = strtok(NULL, " "); + } else if (strcmp(value, "WIDTH") == 0) { + if (cutSpacing != 0) { // make sure syntax has correct order + /* + sprintf(msg, "ERROR (LEFPARS-1309): Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nWIDTH is defined after CUTSPACING.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nWIDTH is defined after CUTSPACING.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefError(1309, msg); + free(wrkingStr); + return; + } + value = strtok(NULL, " "); + viaWidth = atof(value); + value = strtok(NULL, " "); + } else if (strcmp(value, "CUTSPACING") == 0) { + if (cutSpacing != 0) { // make sure syntax has correct order + /* + sprintf(msg, "ERROR (LEFPARS-1310): Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCUTSPACING has defined more than once.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCUTSPACING has defined more than once.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefError(1310, msg); + free(wrkingStr); + return; + } + value = strtok(NULL, " "); + cutSpacing = atof(value); + /* + setArraySpacing(hasLongArray, viaWidth, cutSpacing); + */ + if (hasLongArray) + setArraySpacingLongArray(); + setArraySpacingWidth(viaWidth); + setArraySpacingCut(cutSpacing); + value = strtok(NULL, " "); + } else if (strcmp(value, "ARRAYCUTS") == 0) { + if (cutSpacing == 0) { // make sure cutSpacing is already set + /* + sprintf(msg, "ERROR (LEFPARS-1311): Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCUTSPACING which is required is either has not been defined or defined in a wrong location.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCUTSPACING which is required is either has not been defined or defined in a wrong location.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefError(1311, msg); + free(wrkingStr); + return; + } + value = strtok(NULL, " "); + arrayCuts = atoi(value); + value = strtok(NULL, " "); + if (strcmp(value, "SPACING") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1312): Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nSPACING should be defined with ARRAYCUTS.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nSPACING should be defined with ARRAYCUTS.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefError(1312, msg); + free(wrkingStr); + return; + } + value = strtok(NULL, " "); + arraySpacing = atof(value); + /* + addArrayCuts(arrayCuts, arraySpacing); + */ + addArraySpacingArray(arrayCuts, arraySpacing); + value = strtok(NULL, " "); + hasArrayCut = 1; + } else { // Doesn't match any of the format + /* + sprintf(msg, "ERROR (LEFPARS-1313): Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefError(1313, msg); + free(wrkingStr); + return; + + } + } + + if (hasArrayCut == 0) { // ARRAYCUTS is required + /* + sprintf(msg, "ERROR (LEFPARS-1314): Incorrect syntax defined for property LEF57_ARRAYSPACING: %s\nARRAYCUTS is required but has not been defined.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ARRAYSPACING: %s\nARRAYCUTS is required but has not been defined.\nCorrect syntax is ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing\n\tARRAYCUTS arrayCuts SPACING arraySpacing ...\n", values_[index]); + lefError(1314, msg); + } + + free(wrkingStr); + return; +} + +// PRIVATE 5.7 +// MINSTEP minStepLength +// [MAXEDGES maxEdges] ; +// Save the value lefData->first to make sure the syntax that is supported by the parser +void +lefiLayer::parseMinstep(int index) +{ + char *wrkingStr = strdup(values_[index]); + char *value; + double minStepLength = 0, minAdjLength = 0, minBetLength = 0; + int maxEdges = 0, xSameCorners = 0, done = 0; + char msg[1024]; + + if (strcmp(type(), "ROUTING") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1323): The property LEF57_MINSTEP with value %s is for TYPE ROUTING only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", + values_[index], type()); + lefiError(msg); + */ + sprintf(msg, "The property LEF57_MINSTEP with value %s is for TYPE ROUTING only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", + values_[index], type()); + lefError(1323, msg); + free(wrkingStr); + return; + } + + value = strtok(wrkingStr, " "); + if (strcmp(value, "MINSTEP") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1315): Incorrect syntax defined for property LEF57_MINSTEP: %s.\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_MINSTEP: %s.\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefError(1315, msg); + free(wrkingStr); + return; + } + + value = strtok(NULL, " "); + minStepLength = atof(value); + //addMinstep(minStepLength); + value = strtok(NULL, " "); + while (done == 0) { + if (value && *value != '\n') { + if (strcmp(value, "MAXEDGES") == 0) { + // MAXEDGES maxEdges + if (maxEdges) { // MAXEDGES has already defined + /* + sprintf(msg, "ERROR (LEFPARS-1315): Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefError(1315, msg); + free(wrkingStr); // done parsing + return; + } + value = strtok(NULL, " "); + maxEdges = atoi(value); + //addMinstepMaxedges(maxEdges); + value = strtok(NULL, " "); + } else if (strcmp(value, "MINADJACENTLENGTH") == 0) { + if (minBetLength) { + // MINBETWEENLENGTH has defined, it is either MINADJACENTLENGTH + // or MINBETWEENLENGTH but not both + /* + sprintf(msg, "ERROR (LEFPARS-1315): Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefError(1315, msg); + free(wrkingStr); // done parsing + return; + } + value = strtok(NULL, " "); + minAdjLength = atof(value); + //addMinstepMinAdjLength(minAdjLength); + value = strtok(NULL, " "); + } else if (strcmp(value, "MINBETWEENLENGTH") == 0) { + if (minAdjLength) { + // minadjACENTLENGTH has defined, it is either MINBETWEENLENGTH + // or minADJACENTLENGTH but not both + /* + sprintf(msg, "ERROR (LEFPARS-1315): Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefierror(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefError(1315, msg); + free(wrkingStr); // done parsing + return; + } + value = strtok(NULL, " "); + minBetLength = atof(value); + //addMinstepMinBetLength(minBetLength); + value = strtok(NULL, " "); + } else if (strcmp(value, "EXCEPTSAMECORNERS") == 0) { + if (minBetLength) { + xSameCorners = 1; + //addMinstepXSameCorners(); + value = strtok(NULL, " "); + } else { + /* + sprintf(msg, "ERROR (LEFPARS-1315): Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefierror(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefError(1315, msg); + free(wrkingStr); // done parsing + return; + } + } else if (strcmp(value, ";") != 0) { + // an invalid value + /* + sprintf(msg, "ERROR (LEFPARS-1315): Incorrect syntax defined for property LEF57_MINSTEP: %s.\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefierror(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_MINSTEP: %s.\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefError(1315, msg); + free(wrkingStr); // done parsing + return; + } else + done = 1; + } else { + // done parsing without ; + /* + sprintf(msg, "eRROR (LEFPARS-1315): Incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefierror(msg); + */ + sprintf(msg, "incorrect syntax defined for property LEF57_MINSTEP: %s\nCorrect syntax is \"MINSTEP minStepLength [MAXEDGES maxEdges] [MINADJACENTLENGTH minAdjLength | MINBETWEENLENGTH minBetweenLength [EXCEPTSAMECORNERS]] ;\"\n", values_[index]); + lefError(1315, msg); + free(wrkingStr); // done parsing + return; + } + } + + if (minStepLength) + addMinstep(minStepLength); + if (maxEdges) + addMinstepMaxedges(maxEdges); + if (minAdjLength) + addMinstepMinAdjLength(minAdjLength); + if (minBetLength) + addMinstepMinBetLength(minBetLength); + if (xSameCorners) + addMinstepXSameCorners(); + free(wrkingStr); + return; +} + +// PRIVATE 5.7 +void +lefiLayer::parseAntennaCumRouting(int index) +{ + char *wrkingStr = strdup(values_[index]); + char *value; + char msg[1024]; + + value = strtok(wrkingStr, " "); + if (strcmp(value, "ANTENNACUMROUTINGPLUSCUT") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1316): Incorrect syntax defined for property LEF57_ANTENNACUMROUTINGPLUSCUT: %s.\nCorrect syntax is \"ANTANNACUMROUTINGPLUSCUT\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ANTENNACUMROUTINGPLUSCUT: %s.\nCorrect syntax is \"ANTANNACUMROUTINGPLUSCUT\"\n", values_[index]); + lefError(1316, msg); + free(wrkingStr); + return; + } + + setAntennaCumRoutingPlusCut(); + + free(wrkingStr); + return; +} + +// PRIVATE 5.7 +void +lefiLayer::parseAntennaGatePlus(int index) +{ + char *wrkingStr = strdup(values_[index]); + char *value; + double pDiffFactor; + char msg[1024]; + + value = strtok(wrkingStr, " "); + if (strcmp(value, "ANTENNAGATEPLUSDIFF") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1317): Incorrect syntax defined for property LEF57_ANTENNAGATEPLUSDIFF: %s.\nCorrect syntax is \"ANTENNAGATEPLUSDIFF plusDiffFactor\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ANTENNAGATEPLUSDIFF: %s.\nCorrect syntax is \"ANTENNAGATEPLUSDIFF plusDiffFactor\"\n", values_[index]); + lefError(1317, msg); + free(wrkingStr); + return; + } + + value = strtok(NULL, " "); + pDiffFactor = atof(value); + setAntennaGatePlusDiff(pDiffFactor); + + free(wrkingStr); + return; +} + +// PRIVATE 5.7 +void +lefiLayer::parseAntennaAreaMinus(int index) +{ + char *wrkingStr = strdup(values_[index]); + char *value; + double mDiffFactor; + char msg[1024]; + + value = strtok(wrkingStr, " "); + if (strcmp(value, "ANTENNAAREAMINUSDIFF") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1318): Incorrect syntax defined for property LEF57_ANTENNAAREAMINUSDIFF: %s.\nCorrect syntax is \"ANTENNAAREAMINUSDIFF minusDiffFactor\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ANTENNAAREAMINUSDIFF: %s.\nCorrect syntax is \"ANTENNAAREAMINUSDIFF minusDiffFactor\"\n", values_[index]); + lefError(1318, msg); + free(wrkingStr); + return; + } + + value = strtok(NULL, " "); + mDiffFactor = atof(value); + setAntennaAreaMinusDiff(mDiffFactor); + + free(wrkingStr); + return; +} + +// PRIVATE 5.7 +void +lefiLayer::parseAntennaAreaDiff(int index) +{ + char *wrkingStr = strdup(values_[index]); + char *value; + double diffA, diffF; + lefiAntennaPWL *pwlPtr; + int done = 0; + char msg[1024]; + + value = strtok(wrkingStr, " "); + if (strcmp(value, "ANTENNAAREADIFFREDUCEPWL") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1319): Incorrect syntax defined for property LEF57_ANTENNAAREADIFFREDUCEPWL: %s.\nCorrect syntax is \"ANTENNAAREADIFFREDUCEPWL (( diffArea1 metalDiffFactor1 ) ( diffArea2 metalDiffFactor2 )...)\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ANTENNAAREADIFFREDUCEPWL: %s.\nCorrect syntax is \"ANTENNAAREADIFFREDUCEPWL (( diffArea1 metalDiffFactor1 ) ( diffArea2 metalDiffFactor2 )...)\"\n", values_[index]); + lefError(1319, msg); + free(wrkingStr); + return; + } + + value = strtok(NULL, " "); + if (strcmp(value, "(") == 0) { // beginning of ( ( d1 r1 ) ( d2 r2 ) ... ) + pwlPtr = lefiAntennaPWL::create(); + while (done == 0) { + value = strtok(NULL, " "); + if (strcmp(value, "(") == 0) { + value = strtok(NULL, " "); + diffA = atof(value); + value = strtok(NULL, " "); + diffF = atof(value); + pwlPtr->addAntennaPWL(diffA, diffF); + value = strtok(NULL, " "); + if (strcmp(value, ")") != 0) { + break; + } + } else if (strcmp(value, ")") == 0) + done = 1; + } + if (done) { + setAntennaPWL(lefiAntennaADR, pwlPtr); + } else { + pwlPtr->Destroy(); + lefFree(pwlPtr); + } + } + + free(wrkingStr); + return; +} + +// PRIVATE 5.7 +// [ENCLOSURE [ABOVE | BELOW] overhang1 overhang2 +// [WIDTH minWidth [EXCEPTEXTRACUT cutWithin] +// |LENGTH minLength] ; +void +lefiLayer::parseLayerEnclosure(int index) +{ + char *wrkingStr = strdup(values_[index]); + char *value; + char msg[1024]; + int overh = 0, width = 0, except = 0, length = 0; + char *enclRule = 0; + double overhang1 = 0, overhang2 = 0, minWidth = 0, cutWithin = 0, minLength = 0; + + if (strcmp(type(), "CUT") != 0) { + /* + sprintf(msg, "ERROR (LEFPARS-1331): The property LEF57_ENCLOSURE with value %s is for TYPE CUT only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", + values_[index], type()); + lefiError(msg); + */ + sprintf(msg, "The property LEF57_ENCLOSURE with value %s is for TYPE CUT only.\nThe current layer has the TYPE %s.\nUpdate the property of your lef file with the correct syntax or remove this property from your lef file.\n", + values_[index], type()); + lefError(1331, msg); + free(wrkingStr); + return; + } + + value = strtok(wrkingStr, " "); + if (strcmp(value, "ENCLOSURE") != 0) { // Unknown value + /* + sprintf(msg, "ERROR (LEFPARS-1330): Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefError(1330, msg); + free(wrkingStr); + return; + } + + value = strtok(NULL, " "); + + while (strcmp(value, ";") != 0) { + if (strcmp(value, "CUTCLASS") == 0) { + // This is 58 syntax but is not in OA data model. Skip the parsing + free(wrkingStr); + return; + } else if ((strcmp(value, "ABOVE") == 0) || (strcmp(value, "BELOW") == 0)) { + // Parse the rest of the property value lefData->first and if it has the syntax + // ENCLOSURE [ABOVE | BELOW] overhang1 overhang2 + // [WIDTH minWidth [EXCEPTEXTRACUT cutWithin] + // |LENGTH minLength] + if (overh) { + /* + sprintf(msg, "ERROR (LEFPARS-1330): Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefError(1330, msg); + free(wrkingStr); + if (enclRule) + free(enclRule); + return; + } + enclRule = strdup(value); + value = strtok(NULL, " "); + } else if (strcmp(value, "WIDTH") == 0) { + if ((!overh)) { + /* + sprintf(msg, "ERROR (LEFPARS-1330): Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefError(1330, msg); + free(wrkingStr); + if (enclRule) + free(enclRule); + return; + } + minWidth = strtod(strtok(NULL, " "), 0); + value = strtok(NULL, " "); + width = 1; + if (strcmp(value, "EXCEPTEXTRACUT") == 0) { // continue with WIDTH + except = 1; + value = strtok(NULL, " "); + cutWithin = strtod(value, 0); + value = strtok(NULL, " "); + if (strcmp(value, "NOSHAREDEDGE") == 0) { + // 5.8 syntax but not in OA data model + free(wrkingStr); + if (enclRule) + free(enclRule); + return; + } + } + } else if (strcmp(value, "LENGTH") == 0) { + if (width || (!overh)) { + /* + sprintf(msg, "ERROR (LEFPARS-1330): Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefError(1330, msg); + free(wrkingStr); + if (enclRule) + free(enclRule); + return; + } + minLength = strtod(strtok(NULL, " "), 0); + value = strtok(NULL, " "); + length = 1; + } else { + if (overh == 1) { // Already has overhang value + /* + sprintf(msg, "ERROR (LEFPARS-1330): Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefiError(msg); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefError(1330, msg); + free(wrkingStr); + if (enclRule) + free(enclRule); + return; + } + overhang1 = strtod(value, 0); + overhang2 = strtod(strtok(NULL, " "), 0); + overh = 1; // set the flag on + value = strtok(NULL, " "); + } + } + if (!overh) { + /* + sprintf(msg, "ERROR (LEFPARS-1330): Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + */ + sprintf(msg, "Incorrect syntax defined for property LEF57_ENCLOSURE: %s\nCorrect syntax is \"ENCLOSURE [ABOVE|BELOW] overhang1 overhang2\n\t[WIDTH minWidth [EXCEPTEXTRACUT cutWithin]\n\t|LENGTH minLength] ;\"\n", values_[index]); + lefError(1330, msg); + } else { + addEnclosure(enclRule, overhang1, overhang2); + + if (width) { + addEnclosureWidth(minWidth); + if (except) + addEnclosureExceptEC(cutWithin); + } + if (length) + addEnclosureLength(minLength); + } + if (enclRule) + free(enclRule); + + free(wrkingStr); + return; +} + +// 5.7 +// This API will is created just for OA to call in 5.6 only. +// This API will be obsoleted in 5.7. +// It will look for all the properties in "this" that are type 'S' and +// property name starts with "LEF57_... +void +lefiLayer::parse65nmRules() +{ + int i; + + if (lefData->versionNum < 5.6) + return; + + for (i = 0; i < numProps_; i++) { + if ((strlen(names_[i]) > 6) && (types_[i] == 'S')) { + if (strncmp(names_[i], "LEF57_", 6) == 0) { + if (strcmp(names_[i], "LEF57_SPACING") == 0) { + parseSpacing(i); + } else /* Not an OA data model + if (strcmp(names_[i], "LEF57_MAXFLOATINGAREA") == 0) { + parseMaxFloating(i); + } else +*/ + if (strcmp(names_[i], "LEF57_ARRAYSPACING") == 0) { + parseArraySpacing(i); + } else if (strcmp(names_[i], "LEF57_MINSTEP") == 0) { + parseMinstep(i); + } else if (strcmp(names_[i], "LEF57_ANTENNACUMROUTINGPLUSCUT") == 0) { + parseAntennaCumRouting(i); + } else if (strcmp(names_[i], "LEF57_ANTENNAGATEPLUSDIFF") == 0) { + parseAntennaGatePlus(i); + } else if (strcmp(names_[i], "LEF57_ANTENNAAREAMINUSDIFF") == 0) { + parseAntennaAreaMinus(i); + } else if (strcmp(names_[i], "LEF57_ANTENNAAREADIFFREDUCEPWL") == 0) { + parseAntennaAreaDiff(i); + } else if (strcmp(names_[i], "LEF57_ENCLOSURE") == 0) { + parseLayerEnclosure(i); + } + } + } + } +} + +// PRIVATE 5.8 +// This function will parse LEF58_TYPE property value. It also checks +// if lef58 type is compatible with LAYER TYPE value. +void +lefiLayer::parseLayerType(int index) +{ + std::string propValue(values_[index]); + int tokenStart = 0; + std::string firstToken = lefrSettings::getToken(propValue, tokenStart); + + // Wrong LEF58_TYPE syntax. + if (firstToken != "TYPE") { + std::string msg = "Incorrect LEF58_TYPE property value syntax: '" + + propValue + + "'. Correct syntax: 'TYPE ;'.\n"; + + lefError(1329, msg.c_str()); + return; + } + + std::string type(type_); + std::string lef58Type(lefrSettings::getToken(propValue, tokenStart)); + std::string typesPair(lef58Type + " " + type); + + if (lefSettings->Lef58TypePairs.find(typesPair) != lefSettings->Lef58TypePairs.end()) { + // In parser LayerType == lef58 type. + setLayerType(lef58Type.c_str()); + return; + } + + std::string layerLef58Types = lefSettings->getLayerLef58Types(this->type_); + + // Wrong/incompatible lef58 type. + if (layerLef58Types.empty()) { + std::string msg = "Layers with TYPE " + + type + " cannot have LEF58_TYPE property.\n"; + + lefError(1328, msg.c_str()); + } else { + std::string msg = "Property LEF58_TYPE has incorrect TYPE value: '" + + lef58Type + "'. For TYPE " + + type + " layers valid values are: " + + layerLef58Types + ".\n"; + + lefError(1327, msg.c_str()); + } +} + +// 5.8 +// This API will is created just for OA to call in 5.7 only. +// This API will be obsoleted once 5.8 APIs are available and OA moves +// to using them. +// It will look for the properties in "this" that are type 'S' and +// property name is "LEF58_TYPE" +void +lefiLayer::parseLEF58Layer() +{ + int i; + + if (lefData->versionNum < 5.7) + return; + + for (i = 0; i < numProps_; i++) { + if (strlen(names_[i]) == 10) { + if (strcmp(names_[i], "LEF58_TYPE") == 0) + parseLayerType(i); + } + } +} + +int +lefiLayer::need58PropsProcessing() const +{ + return lefData->versionNum >= 5.7; +} + + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiLayer.hpp b/lefdef/src/lef/lef/lefiLayer.hpp new file mode 100644 index 00000000..deb234e9 --- /dev/null +++ b/lefdef/src/lef/lef/lefiLayer.hpp @@ -0,0 +1,1064 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiLayer_h +#define lefiLayer_h + +#include +#include "lefiKRDefs.hpp" +#include "lefiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +typedef enum lefiAntennaEnum { + lefiAntennaAR, + lefiAntennaDAR, + lefiAntennaCAR, + lefiAntennaCDAR, + lefiAntennaAF, + lefiAntennaSAR, + lefiAntennaDSAR, + lefiAntennaCSAR, + lefiAntennaCDSAR, + lefiAntennaSAF, + lefiAntennaO, + lefiAntennaADR +} lefiAntennaEnum; + +class lefiAntennaPWL { +public: + lefiAntennaPWL(); + ~lefiAntennaPWL(); + + static lefiAntennaPWL* create(); + void Init(); + void clear(); + void Destroy(); + + void addAntennaPWL(double d, double r); + + int numPWL() const; + double PWLdiffusion(int index); + double PWLratio(int index); + +protected: + int numAlloc_; + int numPWL_; + double* d_; + double* r_; +}; + +class lefiLayerDensity { +public: + lefiLayerDensity(); + ~lefiLayerDensity(); + + void Init(const char* type); + void Destroy(); + void clear(); + + void setOneEntry(double entry); + void addFrequency(int num, double* frequency); + void addWidth(int num, double* width); + void addTableEntry(int num, double* entry); + void addCutarea(int num, double* cutarea); + + char* type() const; + int hasOneEntry() const; + double oneEntry() const; + int numFrequency() const; + double frequency(int index) const; + int numWidths() const; + double width(int index) const; + int numTableEntries() const; + double tableEntry(int index) const; + int numCutareas() const; + double cutArea(int index) const; + +protected: + char* type_; + double oneEntry_; + int numFrequency_; + double* frequency_; + int numWidths_; + double* widths_; + int numTableEntries_; + double* tableEntries_; + int numCutareas_; + double* cutareas_; +}; + +// 5.5 +class lefiParallel { +public: + lefiParallel(); + ~lefiParallel(); + + void Init(); + void clear(); + void Destroy(); + + void addParallelLength(int numLength, double* lengths); + void addParallelWidth(double width); + void addParallelWidthSpacing(int numSpacing, double* spacings); + + int numLength() const; + int numWidth() const; + double length(int iLength) const; + double width(int iWidth) const; + double widthSpacing(int iWidth, int iWidthSpacing) const; + +protected: + int numLength_; + int numWidth_; + int numWidthAllocated_; + double* length_; + double* width_; + double* widthSpacing_; +}; + +// 5.5 +class lefiInfluence { +public: + lefiInfluence(); + ~lefiInfluence(); + + void Init(); + void clear(); + void Destroy(); + + void addInfluence(double width, double distance, double spacing); + + int numInfluenceEntry() const; + double width(int index) const; + double distance(int index) const; + double spacing(int index) const; + +protected: + int numAllocated_; + int numWidth_; + int numDistance_; + int numSpacing_; + double* width_; + double* distance_; + double* spacing_; +}; + +// 5.7 +class lefiTwoWidths { +public: + lefiTwoWidths(); + ~lefiTwoWidths(); + + void Init(); + void clear(); + void Destroy(); + + void addTwoWidths(double width, double runLength, int numSpacing, + double* spacings, int hasPRL = 0); + + int numWidth() const; + double width(int iWidth) const; + int hasWidthPRL(int iWidth) const; + double widthPRL(int iWidth) const; + int numWidthSpacing(int iWidth) const; + double widthSpacing(int iWidth, int iWidthSpacing) const; + +protected: + int numWidth_; + int numWidthAllocated_; + double* width_; + double* prl_; + int* hasPRL_; + int* numWidthSpacing_; // each slot contains number of spacing of slot + double* widthSpacing_; + int* atNsp_; // accumulate total number of spacing +}; + +// 5.5 +class lefiSpacingTable { +public: + lefiSpacingTable(); + ~lefiSpacingTable(); + + void Init(); + void clear(); + void Destroy(); + + void addParallelLength(int numLength, double* lengths); + void addParallelWidth(double width); + void addParallelWidthSpacing(int numSpacing, double* spacing); + void setInfluence(); + void addInfluence(double width, double distance, double spacing); + void addTwoWidths(double width, double runLength, int numSpacing, + double* spacing, int hasPRL = 0); // 5.7 + + int isInfluence() const; + lefiInfluence* influence() const; + int isParallel() const; + lefiParallel* parallel() const; + lefiTwoWidths* twoWidths() const; // 5.7 + +protected: + int hasInfluence_; + lefiInfluence* influence_; + lefiParallel* parallel_; + lefiTwoWidths* twoWidths_; // 5.7 +}; + +// 5.7 +class lefiOrthogonal { +public: + lefiOrthogonal(); + ~lefiOrthogonal(); + + void Init(); + void Destroy(); + + void addOrthogonal(double cutWithin, double ortho); + + int numOrthogonal() const; + double cutWithin(int index) const; + double orthoSpacing(int index) const; + +protected: + int numAllocated_; + int numCutOrtho_; + double* cutWithin_; + double* ortho_; +}; + +// 5.5 +class lefiAntennaModel { +public: + lefiAntennaModel(); + ~lefiAntennaModel(); + + void Init(); + void Destroy(); + + void setAntennaModel(int oxide); + void setAntennaAreaRatio(double value); + void setAntennaCumAreaRatio(double value); + void setAntennaAreaFactor(double value); + void setAntennaSideAreaRatio(double value); + void setAntennaCumSideAreaRatio(double value); + void setAntennaSideAreaFactor(double value); + void setAntennaValue(lefiAntennaEnum antennaType, double value); + void setAntennaDUO(lefiAntennaEnum antennaType); + void setAntennaPWL(lefiAntennaEnum antennaType, lefiAntennaPWL* pwl); + void setAntennaCumRoutingPlusCut(); // 5.7 + void setAntennaGatePlusDiff(double value); // 5.7 + void setAntennaAreaMinusDiff(double value); // 5.7 + + int hasAntennaAreaRatio() const; + int hasAntennaDiffAreaRatio() const; + int hasAntennaDiffAreaRatioPWL() const; + int hasAntennaCumAreaRatio() const; + int hasAntennaCumDiffAreaRatio() const; + int hasAntennaCumDiffAreaRatioPWL() const; + int hasAntennaAreaFactor() const; + int hasAntennaAreaFactorDUO() const; + int hasAntennaSideAreaRatio() const; + int hasAntennaDiffSideAreaRatio() const; + int hasAntennaDiffSideAreaRatioPWL() const; + int hasAntennaCumSideAreaRatio() const; + int hasAntennaCumDiffSideAreaRatio() const; + int hasAntennaCumDiffSideAreaRatioPWL() const; + int hasAntennaSideAreaFactor() const; + int hasAntennaSideAreaFactorDUO() const; + int hasAntennaCumRoutingPlusCut() const; // 5.7 + int hasAntennaGatePlusDiff() const; // 5.7 + int hasAntennaAreaMinusDiff() const; // 5.7 + int hasAntennaAreaDiffReducePWL() const; // 5.7 + + char* antennaOxide() const; + double antennaAreaRatio() const; + double antennaDiffAreaRatio() const; + lefiAntennaPWL* antennaDiffAreaRatioPWL() const; + double antennaCumAreaRatio() const; + double antennaCumDiffAreaRatio() const; + lefiAntennaPWL* antennaCumDiffAreaRatioPWL() const; + double antennaAreaFactor() const; + double antennaSideAreaRatio() const; + double antennaDiffSideAreaRatio() const; + lefiAntennaPWL* antennaDiffSideAreaRatioPWL() const; + double antennaCumSideAreaRatio() const; + double antennaCumDiffSideAreaRatio() const; + lefiAntennaPWL* antennaCumDiffSideAreaRatioPWL() const; + double antennaSideAreaFactor() const; + double antennaGatePlusDiff() const; // 5.7 + double antennaAreaMinusDiff() const; // 5.7 + lefiAntennaPWL* antennaAreaDiffReducePWL() const; // 5.7 + +protected: + int hasAntennaAreaRatio_; + int hasAntennaDiffAreaRatio_; + int hasAntennaDiffAreaRatioPWL_; + int hasAntennaCumAreaRatio_; + int hasAntennaCumDiffAreaRatio_; + int hasAntennaCumDiffAreaRatioPWL_; + int hasAntennaAreaFactor_; + int hasAntennaAreaFactorDUO_; + int hasAntennaSideAreaRatio_; + int hasAntennaDiffSideAreaRatio_; + int hasAntennaDiffSideAreaRatioPWL_; + int hasAntennaCumSideAreaRatio_; + int hasAntennaCumDiffSideAreaRatio_; + int hasAntennaCumDiffSideAreaRatioPWL_; + int hasAntennaSideAreaFactor_; + int hasAntennaSideAreaFactorDUO_; + int hasAntennaCumRoutingPlusCut_; // 5.7 + int hasAntennaGatePlusDiff_; // 5.7 + int hasAntennaAreaMinusDiff_; // 5.7 + + char* oxide_; + double antennaAreaRatio_; + double antennaDiffAreaRatio_; + lefiAntennaPWL* antennaDiffAreaRatioPWL_; + double antennaCumAreaRatio_; + double antennaCumDiffAreaRatio_; + lefiAntennaPWL* antennaCumDiffAreaRatioPWL_; + double antennaAreaFactor_; + double antennaSideAreaRatio_; + double antennaDiffSideAreaRatio_; + lefiAntennaPWL* antennaDiffSideAreaRatioPWL_; + double antennaCumSideAreaRatio_; + double antennaCumDiffSideAreaRatio_; + lefiAntennaPWL* antennaCumDiffSideAreaRatioPWL_; + double antennaSideAreaFactor_; + double antennaGatePlusDiff_; // 5.7 + double antennaAreaMinusDiff_; // 5.7 + lefiAntennaPWL* antennaAreaDiffReducePWL_; // 5.7 +}; + +class lefiLayer { +public: + lefiLayer(); + void Init(); + + void Destroy(); + ~lefiLayer(); + + void clear(); + void setName(const char* name); // calls clear to init + void setType(const char* typ); + void setPitch(double num); + void setMask(int num); // 5.8 + void setPitchXY(double xdist, double ydist); // 5.6 + void setOffset(double num); + void setOffsetXY(double xdist, double ydist); // 5.6 + void setWidth(double num); + void setArea(double num); + void setDiagPitch(double dist); // 5.6 + void setDiagPitchXY(double xdist, double ydist); // 5.6 + void setDiagWidth(double width); // 5.6 + void setDiagSpacing(double spacing); // 5.6 + void setSpacingMin(double dist); + void setSpacingName(const char* spacingName); // for CUT layer + void setSpacingLayerStack(); // 5.7 for CUT layer + void setSpacingAdjacent(int numCuts, double distance); // 5.5for CUT layer + void setSpacingRange(double left, double right); + void setSpacingRangeUseLength(); + void setSpacingRangeInfluence(double infLength); + void setSpacingRangeInfluenceRange(double min, double max); + void setSpacingRangeRange(double min, double max); + void setSpacingLength(double num); + void setSpacingLengthRange(double min, double max); + void setSpacingCenterToCenter(); + void setSpacingParallelOverlap(); // 5.7 + void setSpacingArea(double cutArea); // 5.7 + void setSpacingEol(double width, double within); // 5.7 + void setSpacingParSW(double space, double within); // 5.7 + void setSpacingParTwoEdges(); // 5.7 + void setSpacingAdjacentExcept(); // 5.7 + void setSpacingSamenet(); // 5.7 + void setSpacingSamenetPGonly(); // 5.7 + void setSpacingTableOrtho(); // 5.7 + void addSpacingTableOrthoWithin(double cutWithin, double ortho); // 5.7 + void setMaxFloatingArea(double num); // 5.7 + void setArraySpacingLongArray(); // 5.7 + void setArraySpacingWidth(double viaWidth); // 5.7 + void setArraySpacingCut(double cutSpacing); // 5.7 + void addArraySpacingArray(int aCuts, double aSpacing); // 5.7 + void setSpacingNotchLength(double minNotchLength); // 5.7 + void setSpacingEndOfNotchWidth (double endOfNotchWidth, + double minNotchSpacing, double minNotchLength); // 5.7 + void setDirection(const char* dir); + void setResistance(double num); + void setCapacitance(double num); + void setHeight(double num); + void setWireExtension(double num); + void setThickness(double num); + void setShrinkage(double num); + void setCapMultiplier(double num); + void setEdgeCap(double num); + void setAntennaArea(double num); + void setAntennaLength(double num); + void setCurrentDensity(double num); + void setCurrentPoint(double width, double current); + void setResistancePoint(double width, double res); + void setCapacitancePoint(double width, double cap); + void addProp(const char* name, const char* value, const char type); + void addNumProp(const char* name, const double d, + const char* value, const char type); + void addAccurrentDensity(const char* type); + void setAcOneEntry(double num); + void addAcFrequency(); + void addAcCutarea(); + void addAcTableEntry(); + void addAcWidth(); + void addDccurrentDensity(const char* type); + void setDcOneEntry(double num); + void addDcTableEntry(); + void addDcWidth(); + void addDcCutarea(); + void addNumber(double num); + void setMaxwidth(double width); // 5.5 + void setMinwidth(double width); // 5.5 + void addMinenclosedarea(double area); // 5.5 + void addMinenclosedareaWidth(double width); // 5.5 + void addMinimumcut(int cuts, double width); // 5.5 + void addMinimumcutWithin(double cutDistance); // 5.7 + void addMinimumcutConnect(const char* direction); // 5.5 + void addMinimumcutLengDis(double length, double distance); // 5.5 + void addParellelLength(double length); // 5.5 + void addParellelSpacing(double width, double spacing); // 5.5 + void addParellelWidth(double width); // 5.5 + void setProtrusion(double width, double length, double width2); // 5.5 + + // 5.6 - minstep switch to multiple and added more options + void addMinstep(double distance); // 5.5 + void addMinstepType(char* type); // 5.6 + void addMinstepLengthsum(double maxLength); // 5.6 + void addMinstepMaxedges(int maxEdges); // 5.7 + void addMinstepMinAdjLength(double minAdjLength); // 5.7 + void addMinstepMinBetLength(double minBetLength); // 5.7 + void addMinstepXSameCorners(); // 5.7 + + int getNumber(); // this is for the parser internal use only + + // 5.5 SPACINGTABLE + void addSpacingTable(); + void addSpParallelLength(); + void addSpParallelWidth(double width); + void addSpParallelWidthSpacing(); + void setInfluence(); + void setSpTwoWidthsHasPRL(int hasPRL); + void addSpInfluence(double width, double distance, double spacing); + void addSpTwoWidths(double width, double runLength); // 5.7 + + + // 5.6 + void addEnclosure(char* enclRule, double overhang1, double overhang2); + void addEnclosureWidth(double minWidth); + void addEnclosureExceptEC(double cutWithin); // 5.7 + void addEnclosureLength(double minLength); // 5.7 + void addEnclosureExtraCut(); // 5.7+ + void addPreferEnclosure(char* enclRule, double overhang1, double overhang2); + void addPreferEnclosureWidth(double minWidth); + void setResPerCut(double value); + void setDiagMinEdgeLength(double value); + void setMinSize(lefiGeometries* geom); + + // 5.8 + // POLYROUTING, MIMCAP, TSV, PASSIVATION, NWELL + void setLayerType(const char* lType) ; + + int hasType() const ; + int hasLayerType() const ; // 5.8 - Some layers can be another types + // ROUTING can be POLYROUTING or MIMCAP + // CUT can be TSV or PASSIVATION + // MASTERSLICE can be NWELL + int hasMask() const ; // 5.8 + int hasPitch() const ; + int hasXYPitch() const ; // 5.6 + int hasOffset() const ; + int hasXYOffset() const ; // 5.6 + int hasWidth() const ; + int hasArea() const ; + int hasDiagPitch() const; // 5.6 + int hasXYDiagPitch() const; // 5.6 + int hasDiagWidth() const; // 5.6 + int hasDiagSpacing() const; // 5.6 + int hasSpacingNumber() const ; + int hasSpacingName(int index) const ; + int hasSpacingLayerStack(int index) const ; // 5.7 + int hasSpacingAdjacent(int index) const ; + int hasSpacingCenterToCenter(int index) const ; + int hasSpacingRange(int index) const ; + int hasSpacingRangeUseLengthThreshold(int index) const; + int hasSpacingRangeInfluence(int index) const; + int hasSpacingRangeInfluenceRange(int index) const; + int hasSpacingRangeRange(int index) const; + int hasSpacingLengthThreshold(int index) const; + int hasSpacingLengthThresholdRange(int index) const; + int hasSpacingParallelOverlap(int index) const; // 5.7 + int hasSpacingArea(int index) const; // 5.7 + int hasSpacingEndOfLine(int index) const; // 5.7 + int hasSpacingParellelEdge(int index) const; // 5.7 + int hasSpacingTwoEdges(int index) const; // 5.7 + int hasSpacingAdjacentExcept(int index) const; // 5.7 + int hasSpacingSamenet(int index) const; // 5.7 + int hasSpacingSamenetPGonly(int index) const; // 5.7 + int hasSpacingNotchLength(int index) const; // 5.7 + int hasSpacingEndOfNotchWidth(int index) const; // 5.7 + int hasDirection() const ; + int hasResistance() const ; + int hasResistanceArray() const ; + int hasCapacitance() const ; + int hasCapacitanceArray() const ; + int hasHeight() const ; + int hasThickness() const ; + int hasWireExtension() const ; + int hasShrinkage() const ; + int hasCapMultiplier() const ; + int hasEdgeCap() const ; + int hasAntennaLength() const ; + int hasAntennaArea() const ; + int hasCurrentDensityPoint() const ; + int hasCurrentDensityArray() const ; + int hasAccurrentDensity() const; + int hasDccurrentDensity() const; + + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + int numSpacing() const; + + char* name() const ; + const char* type() const ; + const char* layerType() const ; // 5.8 + double pitch() const ; + int mask() const; // 5.8 + double pitchX() const ; // 5.6 + double pitchY() const ; // 5.6 + double offset() const ; + double offsetX() const ; // 5.6 + double offsetY() const ; // 5.6 + double width() const ; + double area() const ; + double diagPitch() const ; // 5.6 + double diagPitchX() const ; // 5.6 + double diagPitchY() const ; // 5.6 + double diagWidth() const ; // 5.6 + double diagSpacing() const ; // 5.6 + double spacing(int index) const ; + char* spacingName(int index) const ; // for CUT layer + int spacingAdjacentCuts(int index) const ; // 5.5 - for CUT layer + double spacingAdjacentWithin(int index) const ; // 5.5 - for CUT layer + double spacingArea(int index) const; // 5.7 - for CUT layer + double spacingRangeMin(int index) const ; + double spacingRangeMax(int index) const ; + double spacingRangeInfluence(int index) const ; + double spacingRangeInfluenceMin(int index) const ; + double spacingRangeInfluenceMax(int index) const ; + double spacingRangeRangeMin(int index) const ; + double spacingRangeRangeMax(int index) const ; + double spacingLengthThreshold(int index) const; + double spacingLengthThresholdRangeMin(int index) const; + double spacingLengthThresholdRangeMax(int index) const; + + // 5.7 Spacing endofline + double spacingEolWidth(int index) const; + double spacingEolWithin(int index) const; + double spacingParSpace(int index) const; + double spacingParWithin(int index) const; + + // 5.7 Spacing Notch + double spacingNotchLength(int index) const; + double spacingEndOfNotchWidth(int index) const; + double spacingEndOfNotchSpacing(int index) const; + double spacingEndOfNotchLength(int index) const; + + // 5.5 Minimum cut rules + int numMinimumcut() const; + int minimumcut(int index) const; + double minimumcutWidth(int index) const; + int hasMinimumcutWithin(int index) const; // 5.7 + double minimumcutWithin(int index) const; // 5.7 + int hasMinimumcutConnection(int index) const; // FROMABOVE|FROMBELOW + const char* minimumcutConnection(int index) const; // FROMABOVE|FROMBELOW + int hasMinimumcutNumCuts(int index) const; + double minimumcutLength(int index) const; + double minimumcutDistance(int index) const; + + const char* direction() const ; + double resistance() const ; + double capacitance() const ; + double height() const ; + double wireExtension() const ; + double thickness() const ; + double shrinkage() const ; + double capMultiplier() const ; + double edgeCap() const ; + double antennaLength() const ; + double antennaArea() const ; + double currentDensityPoint() const ; + void currentDensityArray(int* numPoints, + double** widths, double** current) const ; + void capacitanceArray(int* numPoints, + double** widths, double** resValues) const ; + void resistanceArray(int* numPoints, + double** widths, double** capValues) const ; + + int numAccurrentDensity() const; + lefiLayerDensity* accurrent(int index) const; + int numDccurrentDensity() const; + lefiLayerDensity* dccurrent(int index) const; + + // 3/23/2000 - Wanda da Rosa. The following are for 5.4 Antenna. + // Only 5.4 or 5.3 are allowed in a lef file, but not both + void setAntennaAreaRatio(double value); + void setAntennaCumAreaRatio(double value); + void setAntennaAreaFactor(double value); + void setAntennaSideAreaRatio(double value); + void setAntennaCumSideAreaRatio(double value); + void setAntennaSideAreaFactor(double value); + void setAntennaValue(lefiAntennaEnum antennaType, double value); + void setAntennaDUO(lefiAntennaEnum antennaType); + void setAntennaPWL(lefiAntennaEnum antennaType, lefiAntennaPWL* pwl); + void setAntennaCumRoutingPlusCut(); // 5.7 + void setAntennaGatePlusDiff(double value); // 5.7 + void setAntennaAreaMinusDiff(double value); // 5.7 + void addAntennaModel (int aOxide); // 5.5 + + // 5.5 + int numAntennaModel() const; + lefiAntennaModel* antennaModel(int index) const; + + // The following is 8/21/01 5.4 enhancements + void setSlotWireWidth(double num); + void setSlotWireLength(double num); + void setSlotWidth(double num); + void setSlotLength(double num); + void setMaxAdjacentSlotSpacing(double num); + void setMaxCoaxialSlotSpacing(double num); + void setMaxEdgeSlotSpacing(double num); + void setSplitWireWidth(double num); + void setMinimumDensity(double num); + void setMaximumDensity(double num); + void setDensityCheckWindow(double length, double width); + void setDensityCheckStep(double num); + void setFillActiveSpacing(double num); + + int hasSlotWireWidth() const; + int hasSlotWireLength() const; + int hasSlotWidth() const; + int hasSlotLength() const; + int hasMaxAdjacentSlotSpacing() const; + int hasMaxCoaxialSlotSpacing() const; + int hasMaxEdgeSlotSpacing() const; + int hasSplitWireWidth() const; + int hasMinimumDensity() const; + int hasMaximumDensity() const; + int hasDensityCheckWindow() const; + int hasDensityCheckStep() const; + int hasFillActiveSpacing() const; + int hasMaxwidth() const; // 5.5 + int hasMinwidth() const; // 5.5 + int hasMinstep() const; // 5.5 + int hasProtrusion() const; // 5.5 + + double slotWireWidth() const; + double slotWireLength() const; + double slotWidth() const; + double slotLength() const; + double maxAdjacentSlotSpacing() const; + double maxCoaxialSlotSpacing() const; + double maxEdgeSlotSpacing() const; + double splitWireWidth() const; + double minimumDensity() const; + double maximumDensity() const; + double densityCheckWindowLength() const; + double densityCheckWindowWidth() const; + double densityCheckStep() const; + double fillActiveSpacing() const; + double maxwidth() const; // 5.5 + double minwidth() const; // 5.5 + double protrusionWidth1() const; // 5.5 + double protrusionLength() const; // 5.5 + double protrusionWidth2() const; // 5.5 + + int numMinstep() const; // 5.6 + double minstep(int index) const; // 5.5, 5.6 switch to multiple + int hasMinstepType(int index) const; // 5.6 + char* minstepType(int index) const; // 5.6 + int hasMinstepLengthsum(int index) const; // 5.6 + double minstepLengthsum(int index) const; // 5.6 + int hasMinstepMaxedges(int index) const; // 5.7 + int minstepMaxedges(int index) const; // 5.7 + int hasMinstepMinAdjLength(int index) const; // 5.7 + double minstepMinAdjLength(int index) const; // 5.7 + int hasMinstepMinBetLength(int index) const; // 5.7 + double minstepMinBetLength(int index) const; // 5.7 + int hasMinstepXSameCorners(int index) const; // 5.7 + + // 5.5 MINENCLOSEDAREA + int numMinenclosedarea() const; + double minenclosedarea(int index) const; + int hasMinenclosedareaWidth(int index) const; + double minenclosedareaWidth(int index) const; + + // 5.5 SPACINGTABLE FOR LAYER ROUTING + int numSpacingTable(); + lefiSpacingTable* spacingTable(int index); + + // 5.6 ENCLOSURE, PREFERENCLOSURE, RESISTANCEPERCUT & DIAGMINEDGELENGTH + int numEnclosure() const; + int hasEnclosureRule(int index) const; + char* enclosureRule(int index) ; + double enclosureOverhang1(int index) const; + double enclosureOverhang2(int index) const; + int hasEnclosureWidth(int index) const; + double enclosureMinWidth(int index) const; + int hasEnclosureExceptExtraCut(int index) const; // 5.7 + double enclosureExceptExtraCut(int index) const; // 5.7 + int hasEnclosureMinLength(int index) const; // 5.7 + double enclosureMinLength(int index) const; // 5.7 + int numPreferEnclosure() const; + int hasPreferEnclosureRule(int index) const; + char* preferEnclosureRule(int index) ; + double preferEnclosureOverhang1(int index) const; + double preferEnclosureOverhang2(int index) const; + int hasPreferEnclosureWidth(int index) const; + double preferEnclosureMinWidth(int index) const; + int hasResistancePerCut() const; + double resistancePerCut() const; + int hasDiagMinEdgeLength() const; + double diagMinEdgeLength() const; + int numMinSize() const; + double minSizeWidth(int index) const; + double minSizeLength(int index) const; + + // 5.7 + int hasMaxFloatingArea() const; + double maxFloatingArea() const; + int hasArraySpacing() const; + int hasLongArray() const; + int hasViaWidth() const; + double viaWidth() const; + double cutSpacing() const; + int numArrayCuts() const; + int arrayCuts(int index) const; + double arraySpacing(int index) const; + int hasSpacingTableOrtho() const; // SPACINGTABLE ORTHOGONAL FOR LAYER CUT + lefiOrthogonal *orthogonal() const; + + void parse65nmRules(); // 5.7 + void parseLEF58Layer(); // 5.8 + int need58PropsProcessing() const; // 5.8 + + // Debug print + void print(FILE* f) const; + +private: + void parseSpacing(int index); + void parseMaxFloating(int index); + void parseArraySpacing(int index); + void parseMinstep(int index); + void parseAntennaCumRouting(int index); + void parseAntennaGatePlus(int index); + void parseAntennaAreaMinus(int index); + void parseAntennaAreaDiff(int index); + + void parseLayerType(int index); // 5.8 + void parseLayerEnclosure(int index); // 5.8 + void parseLayerWidthTable(int indxe); // 5.8 + +protected: + char* name_; + int nameSize_; + char* type_; + int typeSize_; + char* layerType_; // 5.8 - POLYROUTING, MIMCAP, TSV, PASSIVATION, NWELL + + int hasPitch_; + int hasMask_; // 5.8 native + int hasOffset_; + int hasWidth_; + int hasArea_; + int hasSpacing_; + int hasDiagPitch_; // 5.6 + int hasDiagWidth_; // 5.6 + int hasDiagSpacing_; // 5.6 + int* hasSpacingName_; // 5.5 + int* hasSpacingLayerStack_; // 5.7 + int* hasSpacingAdjacent_; // 5.5 + int* hasSpacingRange_; // pcr 409334 + int* hasSpacingUseLengthThreshold_; // pcr 282799, due to mult. spacing allow + int* hasSpacingLengthThreshold_; // pcr 409334 + int* hasSpacingCenterToCenter_; // 5.6 + int* hasSpacingParallelOverlap_; // 5.7 + int* hasSpacingCutArea_; // 5.7 + int* hasSpacingEndOfLine_; // 5.7 + int* hasSpacingParellelEdge_; // 5.7 + int* hasSpacingTwoEdges_; // 5.7 + int* hasSpacingAdjacentExcept_; // 5.7 + int* hasSpacingSamenet_; // 5.7 + int* hasSpacingSamenetPGonly_; // 5.7 + int hasArraySpacing_; // 5.7 + int hasDirection_; + int hasResistance_; + int hasCapacitance_; + int hasHeight_; + int hasWireExtension_; + int hasThickness_; + int hasShrinkage_; + int hasCapMultiplier_; + int hasEdgeCap_; + int hasAntennaArea_; + int hasAntennaLength_; + int hasCurrentDensityPoint_; + + double currentDensity_; + double pitchX_; // 5.6 + double pitchY_; // 5.6 + double offsetX_; // 5.6 + double offsetY_; // 5.6 + double diagPitchX_; // 5.6 + double diagPitchY_; // 5.6 + double diagWidth_; // 5.6 + double diagSpacing_; // 5.6 + double width_; + double area_; + double wireExtension_; + int numSpacings_; + int spacingsAllocated_; + int maskNumber_; // 5.8 + double* spacing_; // for Cut & routing Layer, spacing is multiple + char** spacingName_; + int* spacingAdjacentCuts_; // 5.5 + double* spacingAdjacentWithin_; // 5.5 + double* spacingCutArea_; // 5.7 + double* rangeMin_; // pcr 282799 & 408930, due to mult spacing allow + double* rangeMax_; // pcr 282799 & 408930, due to mult spacing allow + double* rangeInfluence_; // pcr 282799 & 408930, due to mult spacing allow + double* rangeInfluenceRangeMin_; // pcr 388183 & 408930 + double* rangeInfluenceRangeMax_; // pcr 388183 & 408930 + double* rangeRangeMin_; // pcr 408930 + double* rangeRangeMax_; // pcr 408930 + double* lengthThreshold_; // pcr 408930 + double* lengthThresholdRangeMin_; // pcr 408930 + double* lengthThresholdRangeMax_; // pcr 408930 + + // 5.5 + int numMinimumcut_; + int minimumcutAllocated_; + int* minimumcut_; // pcr 409334 + double* minimumcutWidth_; // pcr 409334 + int* hasMinimumcutWithin_; // 5.7 + double* minimumcutWithin_; // 5.7 + int* hasMinimumcutConnection_; + char** minimumcutConnection_; + int* hasMinimumcutNumCuts_; + double* minimumcutLength_; + double* minimumcutDistance_; + + double maxwidth_; // 5.5 + double minwidth_; // 5.5 + int numMinenclosedarea_; // 5.5 + int minenclosedareaAllocated_; // 5.5 + double* minenclosedarea_; // 5.5 + double* minenclosedareaWidth_; // 5.5 + double protrusionWidth1_; // 5.5 + double protrusionLength_; // 5.5 + double protrusionWidth2_; // 5.5 + + int numMinstep_; // 5.6 + int numMinstepAlloc_; // 5.6 + double* minstep_; // 5.6, switch to multiple + char** minstepType_; // INSIDECORNER|OUTSIDECORNER|STEP + double* minstepLengthsum_; + int* minstepMaxEdges_; // 5.7 + double* minstepMinAdjLength_; // 5.7 + double* minstepMinBetLength_; // 5.7 + int* minstepXSameCorners_; // 5.7 + + char* direction_; + double resistance_; + double capacitance_; + double height_; + double thickness_; + double shrinkage_; + double capMultiplier_; + double edgeCap_; + double antennaArea_; + double antennaLength_; + + int numCurrentPoints_; + int currentPointsAllocated_; + double* currentWidths_; + double* current_; + + int numCapacitancePoints_; + int capacitancePointsAllocated_; + double* capacitanceWidths_; + double* capacitances_; + + int numResistancePoints_; + int resistancePointsAllocated_; + double* resistanceWidths_; + double* resistances_; + + int numProps_; + int propsAllocated_; + char** names_; + char** values_; + double* dvalues_; + char* types_; // I: integer, R: real, S:string + // Q: quotedstring + int numAccurrents_; // number of ACCURRENTDENSITY + int accurrentAllocated_; + lefiLayerDensity** accurrents_; + int numDccurrents_; // number of DCCURRENTDENSITY + int dccurrentAllocated_; + lefiLayerDensity** dccurrents_; + int numNums_; + int numAllocated_; + double* nums_; + + // 3/23/2000 - Wanda da Rosa. The following is for 5.4 ANTENNA. + // Either 5.4 or 5.3 are allowed, not both + int hasAntennaAreaRatio_; + int hasAntennaDiffAreaRatio_; + int hasAntennaDiffAreaRatioPWL_; + int hasAntennaCumAreaRatio_; + int hasAntennaCumDiffAreaRatio_; + int hasAntennaCumDiffAreaRatioPWL_; + int hasAntennaAreaFactor_; + int hasAntennaAreaFactorDUO_; + int hasAntennaSideAreaRatio_; + int hasAntennaDiffSideAreaRatio_; + int hasAntennaDiffSideAreaRatioPWL_; + int hasAntennaCumSideAreaRatio_; + int hasAntennaCumDiffSideAreaRatio_; + int hasAntennaCumDiffSideAreaRatioPWL_; + int hasAntennaSideAreaFactor_; + int hasAntennaSideAreaFactorDUO_; + + // 5.5 AntennaModel + lefiAntennaModel* currentAntennaModel_; + int numAntennaModel_; + int antennaModelAllocated_; + lefiAntennaModel** antennaModel_; + + // 8/29/2001 - Wanda da Rosa. The following is for 5.4 enhancements. + int hasSlotWireWidth_; + int hasSlotWireLength_; + int hasSlotWidth_; + int hasSlotLength_; + int hasMaxAdjacentSlotSpacing_; + int hasMaxCoaxialSlotSpacing_; + int hasMaxEdgeSlotSpacing_; + int hasSplitWireWidth_; + int hasMinimumDensity_; + int hasMaximumDensity_; + int hasDensityCheckWindow_; + int hasDensityCheckStep_; + int hasFillActiveSpacing_; + int hasTwoWidthPRL_; + + double slotWireWidth_; + double slotWireLength_; + double slotWidth_; + double slotLength_; + double maxAdjacentSlotSpacing_; + double maxCoaxialSlotSpacing_; + double maxEdgeSlotSpacing_; + double splitWireWidth_; + double minimumDensity_; + double maximumDensity_; + double densityCheckWindowLength_; + double densityCheckWindowWidth_; + double densityCheckStep_; + double fillActiveSpacing_; + + // 5.5 SPACINGTABLE + int numSpacingTable_; + int spacingTableAllocated_; + lefiSpacingTable** spacingTable_; + + // 5.6 + int numEnclosure_; + int enclosureAllocated_; + char** enclosureRules_; + double* overhang1_; + double* overhang2_; + double* encminWidth_; + double* cutWithin_; + double* minLength_; + int numPreferEnclosure_; + int preferEnclosureAllocated_; + char** preferEnclosureRules_; + double* preferOverhang1_; + double* preferOverhang2_; + double* preferMinWidth_; + double resPerCut_; + double diagMinEdgeLength_; + int numMinSize_; + double* minSizeWidth_; + double* minSizeLength_; + + // 5.7 + double* eolWidth_; + double* eolWithin_; + double* parSpace_; + double* parWithin_; + double maxArea_; + int hasLongArray_; + double viaWidth_; + double cutSpacing_; + int numArrayCuts_; + int arrayCutsAllocated_; + int* arrayCuts_; + double* arraySpacings_; + int hasSpacingTableOrtho_; + lefiOrthogonal* spacingTableOrtho_; + double* notchLength_; + double* endOfNotchWidth_; + double* minNotchSpacing_; + double* eonotchLength_; + + int lef58WidthTableOrthoValues_; + int lef58WidthTableWrongDirValues_; + double* lef58WidthTableOrtho_; + double* lef58WidthTableWrongDir_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiMacro.cpp b/lefdef/src/lef/lef/lefiMacro.cpp new file mode 100644 index 00000000..185688b7 --- /dev/null +++ b/lefdef/src/lef/lef/lefiMacro.cpp @@ -0,0 +1,4789 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "lefiMacro.hpp" +#include "lefiMisc.hpp" +#include "lefiDebug.hpp" +#include "lefiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ***************************************************************************** +// lefiObstruction +// ***************************************************************************** + +lefiObstruction::lefiObstruction() +: geometries_(NULL) +{ + Init(); +} + +void +lefiObstruction::Init() +{ + geometries_ = 0; +} + +lefiObstruction::~lefiObstruction() +{ + Destroy(); +} + +void +lefiObstruction::Destroy() +{ + clear(); +} + +void +lefiObstruction::clear() +{ + if (geometries_) { + geometries_->Destroy(); + lefFree((char*) (geometries_)); + } + geometries_ = 0; +} + +void +lefiObstruction::setGeometries(lefiGeometries *g) +{ + clear(); + geometries_ = g; +} + +lefiGeometries * +lefiObstruction::geometries() const +{ + return geometries_; +} + +void +lefiObstruction::print(FILE *f) const +{ + lefiGeometries *g; + + fprintf(f, " Obstruction\n"); + + g = geometries_; + g->print(f); + +} + +// ***************************************************************************** +// lefiDensity +// ***************************************************************************** + +lefiDensity::lefiDensity() +: numLayers_(0), + layersAllocated_(0), + layerName_(NULL), + numRects_(NULL), + rectsAllocated_(NULL), + rects_(NULL), + densityValue_(NULL) +{ + Init(); +} + +void +lefiDensity::Init() +{ + numLayers_ = 0; + layersAllocated_ = 0; +} + +lefiDensity::~lefiDensity() +{ + Destroy(); +} + +void +lefiDensity::Destroy() +{ + clear(); +} + +void +lefiDensity::clear() +{ + for (int i = 0; i < numLayers_; i++) { + lefFree(layerName_[i]); + lefFree((char*) rects_[i]); + lefFree((char*) densityValue_[i]); + numRects_[i] = 0; + rectsAllocated_[i] = 0; + } + lefFree(layerName_); + lefFree((char*) (rects_)); + lefFree((char*) (densityValue_)); + lefFree((char*) (numRects_)); + lefFree((char*) (rectsAllocated_)); + layerName_ = 0; + numLayers_ = 0; + layersAllocated_ = 0; + numRects_ = 0; + rects_ = 0; + densityValue_ = 0; + rectsAllocated_ = 0; +} + +void +lefiDensity::addLayer(const char *name) +{ + if (numLayers_ == layersAllocated_) { + int i; + char **ln; // layerName + int *nr; // number of rect within the layer + int *ra; // number of rect allocated within the layer + lefiGeomRect **rs; // rect value + double **dv; // density value + + layersAllocated_ = (layersAllocated_ == 0) ? + 2 : layersAllocated_ * 2; + ln = (char**) lefMalloc(sizeof(char*) * layersAllocated_); + nr = (int*) lefMalloc(sizeof(int) * layersAllocated_); + ra = (int*) lefMalloc(sizeof(int) * layersAllocated_); + rs = (lefiGeomRect**) lefMalloc(sizeof(lefiGeomRect*) + * layersAllocated_); + dv = (double**) lefMalloc(sizeof(double*) * layersAllocated_); + for (i = 0; i < numLayers_; i++) { + ln[i] = layerName_[i]; + nr[i] = numRects_[i]; + ra[i] = rectsAllocated_[i]; + rs[i] = rects_[i]; + dv[i] = densityValue_[i]; + } + + lefFree((char*) (layerName_)); + lefFree((char*) (rects_)); + lefFree((char*) (densityValue_)); + lefFree((char*) (numRects_)); + lefFree((char*) (rectsAllocated_)); + + layerName_ = ln; + numRects_ = nr; + rectsAllocated_ = ra; + rects_ = rs; + densityValue_ = dv; + } + layerName_[numLayers_] = strdup(name); + numRects_[numLayers_] = 0; + rectsAllocated_[numLayers_] = 0; + rects_[numLayers_] = 0; + densityValue_[numLayers_] = 0; + numLayers_ += 1; +} + +void +lefiDensity::addRect(double x1, + double y1, + double x2, + double y2, + double value) +{ + if (numRects_[numLayers_ - 1] == + rectsAllocated_[numLayers_ - 1]) { + + lefiGeomRect *rs, *ors; + double *dv, *odv; + int i; + + rectsAllocated_[numLayers_ - 1] = + (rectsAllocated_[numLayers_ - 1] == 0) ? + 2 : rectsAllocated_[numLayers_ - 1] * 2; + + rs = (lefiGeomRect*) lefMalloc(sizeof(lefiGeomRect) * + rectsAllocated_[numLayers_ - 1]); + dv = (double*) lefMalloc(sizeof(double) * + rectsAllocated_[numLayers_ - 1]); + + if (numRects_[numLayers_ - 1] > 0) { + ors = rects_[numLayers_ - 1]; + odv = densityValue_[numLayers_ - 1]; + for (i = 0; i < numRects_[numLayers_ - 1]; i++) { + rs[i] = ors[i]; // assign data from old rect & density value to + dv[i] = odv[i]; // new, larger array + } + + lefFree((char*) rects_[numLayers_ - 1]); + lefFree((char*) densityValue_[numLayers_ - 1]); + } + + rects_[numLayers_ - 1] = rs; + densityValue_[numLayers_ - 1] = dv; + } + + lefiGeomRect p; + + p.xl = x1; + p.yl = y1; + p.xh = x2; + p.yh = y2; + p.colorMask = 0; + + rects_[numLayers_ - 1][numRects_[numLayers_ - 1]] = p; + densityValue_[numLayers_ - 1][numRects_[numLayers_ - 1]] = value; + numRects_[numLayers_ - 1] += 1; +} + +int +lefiDensity::numLayer() const +{ + return numLayers_; +} + +char * +lefiDensity::layerName(int index) const +{ + return layerName_[index]; +} + +int +lefiDensity::numRects(int index) const +{ + return numRects_[index]; +} + +lefiGeomRect +lefiDensity::getRect(int index, + int rectIndex) const +{ + lefiGeomRect *rs; + + rs = rects_[index]; + return rs[rectIndex]; +} + +double +lefiDensity::densityValue(int index, + int rectIndex) const +{ + double *dv; + + dv = densityValue_[index]; + return dv[rectIndex]; +} + +void +lefiDensity::print(FILE *f) const +{ + int i, j; + + // 11/8/2004 - Added feed back from users + fprintf(f, " DENSITY\n"); + for (i = 0; i < numLayers_; i++) { + fprintf(f, " LAYER %s\n", layerName_[i]); + for (j = 0; j < numRects_[i]; j++) { + fprintf(f, " RECT %g %g %g %g ", rects_[i][j].xl, + rects_[i][j].yl, rects_[i][j].xh, + rects_[i][j].yh); + fprintf(f, "%g\n", densityValue_[i][j]); + } + } +} + +// ***************************************************************************** +// lefiPinAntennaModel +// ***************************************************************************** + +lefiPinAntennaModel::lefiPinAntennaModel() +: oxide_(NULL), + hasReturn_(0), + numAntennaGateArea_(0), + antennaGateAreaAllocated_(0), + antennaGateArea_(NULL), + antennaGateAreaLayer_(NULL), + numAntennaMaxAreaCar_(0), + antennaMaxAreaCarAllocated_(0), + antennaMaxAreaCar_(NULL), + antennaMaxAreaCarLayer_(NULL), + numAntennaMaxSideAreaCar_(0), + antennaMaxSideAreaCarAllocated_(0), + antennaMaxSideAreaCar_(NULL), + antennaMaxSideAreaCarLayer_(NULL), + numAntennaMaxCutCar_(0), + antennaMaxCutCarAllocated_(0), + antennaMaxCutCar_(NULL), + antennaMaxCutCarLayer_(NULL) +{ + Init(); +} + +void +lefiPinAntennaModel::Init() +{ + numAntennaGateArea_ = 0; + antennaGateAreaAllocated_ = 1; + antennaGateArea_ = (double*) lefMalloc(sizeof(double)); + antennaGateAreaLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaMaxAreaCar_ = 0; + antennaMaxAreaCarAllocated_ = 1; + antennaMaxAreaCar_ = (double*) lefMalloc(sizeof(double)); + antennaMaxAreaCarLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaMaxSideAreaCar_ = 0; + antennaMaxSideAreaCarAllocated_ = 1; + antennaMaxSideAreaCar_ = (double*) lefMalloc(sizeof(double)); + antennaMaxSideAreaCarLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaMaxCutCar_ = 0; + antennaMaxCutCarAllocated_ = 1; + antennaMaxCutCar_ = (double*) lefMalloc(sizeof(double)); + antennaMaxCutCarLayer_ = (char**) lefMalloc(sizeof(char*)); + + oxide_ = 0; + hasReturn_ = 0; + +} + +lefiPinAntennaModel::~lefiPinAntennaModel() +{ + Destroy(); +} + +void +lefiPinAntennaModel::Destroy() +{ + clear(); +} + +void +lefiPinAntennaModel::clear() +{ + int i; + + if (oxide_) + lefFree((char*) (oxide_)); + else // did not declare + return; + oxide_ = 0; + hasReturn_ = 0; + + for (i = 0; i < numAntennaGateArea_; i++) { + if (antennaGateAreaLayer_[i]) + lefFree(antennaGateAreaLayer_[i]); + } + numAntennaGateArea_ = 0; + + for (i = 0; i < numAntennaMaxAreaCar_; i++) { + if (antennaMaxAreaCarLayer_[i]) + lefFree(antennaMaxAreaCarLayer_[i]); + } + numAntennaMaxAreaCar_ = 0; + + for (i = 0; i < numAntennaMaxSideAreaCar_; i++) { + if (antennaMaxSideAreaCarLayer_[i]) + lefFree(antennaMaxSideAreaCarLayer_[i]); + } + numAntennaMaxSideAreaCar_ = 0; + + for (i = 0; i < numAntennaMaxCutCar_; i++) { + if (antennaMaxCutCarLayer_[i]) + lefFree(antennaMaxCutCarLayer_[i]); + } + numAntennaMaxCutCar_ = 0; + lefFree((char*) (antennaGateArea_)); + lefFree((char*) (antennaGateAreaLayer_)); + lefFree((char*) (antennaMaxAreaCar_)); + lefFree((char*) (antennaMaxAreaCarLayer_)); + lefFree((char*) (antennaMaxSideAreaCar_)); + lefFree((char*) (antennaMaxSideAreaCarLayer_)); + lefFree((char*) (antennaMaxCutCar_)); + lefFree((char*) (antennaMaxCutCarLayer_)); + +} + +// 5.5 +void +lefiPinAntennaModel::setAntennaModel(int aOxide) +{ + switch (aOxide) { + case 1: + oxide_ = strdup("OXIDE1"); + break; + case 2: + oxide_ = strdup("OXIDE2"); + break; + case 3: + oxide_ = strdup("OXIDE3"); + break; + case 4: + oxide_ = strdup("OXIDE4"); + break; + default: + oxide_ = NULL; + break; + } +} + +void +lefiPinAntennaModel::addAntennaGateArea(double val, + const char *layer) +{ + int len; + if (numAntennaGateArea_ == antennaGateAreaAllocated_) { + int i; + int max; + int lim = numAntennaGateArea_; + double *nd; + char **nl; + + + if (antennaGateAreaAllocated_ == 0) + max = antennaGateAreaAllocated_ = 2; + else + max = antennaGateAreaAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaGateAreaLayer_[i]; + nd[i] = antennaGateArea_[i]; + } + lefFree((char*) (antennaGateAreaLayer_)); + lefFree((char*) (antennaGateArea_)); + antennaGateAreaLayer_ = nl; + antennaGateArea_ = nd; + } + antennaGateArea_[numAntennaGateArea_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaGateAreaLayer_[numAntennaGateArea_] = + (char*) lefMalloc(len); + strcpy(antennaGateAreaLayer_[numAntennaGateArea_], + layer); + } else + antennaGateAreaLayer_[numAntennaGateArea_] = NULL; + numAntennaGateArea_ += 1; +} + +void +lefiPinAntennaModel::addAntennaMaxAreaCar(double val, + const char *layer) +{ + int len; + if (numAntennaMaxAreaCar_ == antennaMaxAreaCarAllocated_) { + int i; + int max; + int lim = numAntennaMaxAreaCar_; + double *nd; + char **nl; + + if (antennaMaxAreaCarAllocated_ == 0) + max = antennaMaxAreaCarAllocated_ = 2; + else + max = antennaMaxAreaCarAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaMaxAreaCarLayer_[i]; + nd[i] = antennaMaxAreaCar_[i]; + } + lefFree((char*) (antennaMaxAreaCarLayer_)); + lefFree((char*) (antennaMaxAreaCar_)); + antennaMaxAreaCarLayer_ = nl; + antennaMaxAreaCar_ = nd; + } + antennaMaxAreaCar_[numAntennaMaxAreaCar_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaMaxAreaCarLayer_[numAntennaMaxAreaCar_] = + (char*) lefMalloc(len); + strcpy(antennaMaxAreaCarLayer_[numAntennaMaxAreaCar_], + layer); + } else + antennaMaxAreaCarLayer_[numAntennaMaxAreaCar_] = NULL; + numAntennaMaxAreaCar_ += 1; +} + +void +lefiPinAntennaModel::addAntennaMaxSideAreaCar(double val, + const char *layer) +{ + int len; + if (numAntennaMaxSideAreaCar_ == antennaMaxSideAreaCarAllocated_) { + int i; + int max; + int lim = numAntennaMaxSideAreaCar_; + double *nd; + char **nl; + + if (antennaMaxSideAreaCarAllocated_ == 0) + max = antennaMaxSideAreaCarAllocated_ = 2; + else + max = antennaMaxSideAreaCarAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaMaxSideAreaCarLayer_[i]; + nd[i] = antennaMaxSideAreaCar_[i]; + } + lefFree((char*) (antennaMaxSideAreaCarLayer_)); + lefFree((char*) (antennaMaxSideAreaCar_)); + antennaMaxSideAreaCarLayer_ = nl; + antennaMaxSideAreaCar_ = nd; + } + antennaMaxSideAreaCar_[numAntennaMaxSideAreaCar_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaMaxSideAreaCarLayer_[numAntennaMaxSideAreaCar_] = + (char*) lefMalloc(len); + strcpy(antennaMaxSideAreaCarLayer_[numAntennaMaxSideAreaCar_], + layer); + } else + antennaMaxSideAreaCarLayer_[numAntennaMaxSideAreaCar_] = NULL; + numAntennaMaxSideAreaCar_ += 1; +} + +void +lefiPinAntennaModel::addAntennaMaxCutCar(double val, + const char *layer) +{ + int len; + if (numAntennaMaxCutCar_ == antennaMaxCutCarAllocated_) { + int i; + int max; + int lim = numAntennaMaxCutCar_; + double *nd; + char **nl; + + if (antennaMaxCutCarAllocated_ == 0) + max = antennaMaxCutCarAllocated_ = 2; + else + max = antennaMaxCutCarAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaMaxCutCarLayer_[i]; + nd[i] = antennaMaxCutCar_[i]; + } + lefFree((char*) (antennaMaxCutCarLayer_)); + lefFree((char*) (antennaMaxCutCar_)); + antennaMaxCutCarLayer_ = nl; + antennaMaxCutCar_ = nd; + } + antennaMaxCutCar_[numAntennaMaxCutCar_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaMaxCutCarLayer_[numAntennaMaxCutCar_] = + (char*) lefMalloc(len); + strcpy(antennaMaxCutCarLayer_[numAntennaMaxCutCar_], + layer); + } else + antennaMaxCutCarLayer_[numAntennaMaxCutCar_] = NULL; + numAntennaMaxCutCar_ += 1; +} + +void +lefiPinAntennaModel::setAntennaReturnFlag(int flag) +{ + hasReturn_ = flag; + return; +} + +int +lefiPinAntennaModel::hasAntennaGateArea() const +{ + return numAntennaGateArea_ ? 1 : 0; +} + +int +lefiPinAntennaModel::hasAntennaMaxAreaCar() const +{ + return numAntennaMaxAreaCar_ ? 1 : 0; +} + +int +lefiPinAntennaModel::hasAntennaMaxSideAreaCar() const +{ + return numAntennaMaxSideAreaCar_ ? 1 : 0; +} + +int +lefiPinAntennaModel::hasAntennaMaxCutCar() const +{ + return numAntennaMaxCutCar_ ? 1 : 0; +} + +// 5.5 +char * +lefiPinAntennaModel::antennaOxide() const +{ + return oxide_; +} + +const char * +lefiPinAntennaModel::antennaGateAreaLayer(int i) const +{ + return antennaGateAreaLayer_[i]; +} + +const char * +lefiPinAntennaModel::antennaMaxAreaCarLayer(int i) const +{ + return antennaMaxAreaCarLayer_[i]; +} + +const char * +lefiPinAntennaModel::antennaMaxSideAreaCarLayer(int i) const +{ + return antennaMaxSideAreaCarLayer_[i]; +} + +const char * +lefiPinAntennaModel::antennaMaxCutCarLayer(int i) const +{ + return antennaMaxCutCarLayer_[i]; +} + +int +lefiPinAntennaModel::numAntennaGateArea() const +{ + return numAntennaGateArea_; +} + +int +lefiPinAntennaModel::numAntennaMaxAreaCar() const +{ + return numAntennaMaxAreaCar_; +} + +int +lefiPinAntennaModel::numAntennaMaxSideAreaCar() const +{ + return numAntennaMaxSideAreaCar_; +} + +int +lefiPinAntennaModel::numAntennaMaxCutCar() const +{ + return numAntennaMaxCutCar_; +} + +double +lefiPinAntennaModel::antennaGateArea(int i) const +{ + return antennaGateArea_[i]; +} + +double +lefiPinAntennaModel::antennaMaxAreaCar(int i) const +{ + return antennaMaxAreaCar_[i]; +} + +double +lefiPinAntennaModel::antennaMaxSideAreaCar(int i) const +{ + return antennaMaxSideAreaCar_[i]; +} + +double +lefiPinAntennaModel::antennaMaxCutCar(int i) const +{ + return antennaMaxCutCar_[i]; +} + +int +lefiPinAntennaModel::hasReturn() const +{ + return hasReturn_; +} + +// ***************************************************************************** +// lefiPin +// ***************************************************************************** + +lefiPin::lefiPin() +: nameSize_(0), + name_(NULL), + hasLEQ_(0), + hasDirection_(0), + hasUse_(0), + hasShape_(0), + hasMustjoin_(0), + hasOutMargin_(0), + hasOutResistance_(0), + hasInMargin_(0), + hasPower_(0), + hasLeakage_(0), + hasMaxload_(0), + hasMaxdelay_(0), + hasCapacitance_(0), + hasResistance_(0), + hasPulldownres_(0), + hasTieoffr_(0), + hasVHI_(0), + hasVLO_(0), + hasRiseVoltage_(0), + hasFallVoltage_(0), + hasRiseThresh_(0), + hasFallThresh_(0), + hasRiseSatcur_(0), + hasFallSatcur_(0), + hasCurrentSource_(0), + hasTables_(0), + hasAntennasize_(0), + hasRiseSlewLimit_(0), + hasFallSlewLimit_(0), + numForeigns_(0), + foreignAllocated_(0), + hasForeignOrient_(NULL), + hasForeignPoint_(NULL), + foreignOrient_(NULL), + foreignX_(NULL), + foreignY_(NULL), + foreign_(NULL), + LEQSize_(0), + LEQ_(NULL), + mustjoinSize_(0), + mustjoin_(NULL), + outMarginH_(0.0), + outMarginL_(0.0), + outResistanceH_(0.0), + outResistanceL_(0.0), + inMarginH_(0.0), + inMarginL_(0.0), + power_(0.0), + leakage_(0.0), + maxload_(0.0), + maxdelay_(0.0), + capacitance_(0.0), + resistance_(0.0), + pulldownres_(0.0), + tieoffr_(0.0), + VHI_(0.0), + VLO_(0.0), + riseVoltage_(0.0), + fallVoltage_(0.0), + riseThresh_(0.0), + fallThresh_(0.0), + riseSatcur_(0.0), + fallSatcur_(0.0), + lowTableSize_(0), + lowTable_(NULL), + highTableSize_(0), + highTable_(NULL), + riseSlewLimit_(0.0), + fallSlewLimit_(0.0), + numAntennaModel_(0), + antennaModelAllocated_(0), + curAntennaModelIndex_(0), + antennaModel_(NULL), + numAntennaSize_(0), + antennaSizeAllocated_(0), + antennaSize_(NULL), + antennaSizeLayer_(NULL), + numAntennaMetalArea_(0), + antennaMetalAreaAllocated_(0), + antennaMetalArea_(NULL), + antennaMetalAreaLayer_(NULL), + numAntennaMetalLength_(0), + antennaMetalLengthAllocated_(0), + antennaMetalLength_(NULL), + antennaMetalLengthLayer_(NULL), + numAntennaPartialMetalArea_(0), + antennaPartialMetalAreaAllocated_(0), + antennaPartialMetalArea_(NULL), + antennaPartialMetalAreaLayer_(NULL), + numAntennaPartialMetalSideArea_(0), + antennaPartialMetalSideAreaAllocated_(0), + antennaPartialMetalSideArea_(NULL), + antennaPartialMetalSideAreaLayer_(NULL), + numAntennaPartialCutArea_(0), + antennaPartialCutAreaAllocated_(0), + antennaPartialCutArea_(NULL), + antennaPartialCutAreaLayer_(NULL), + numAntennaDiffArea_(0), + antennaDiffAreaAllocated_(0), + antennaDiffArea_(NULL), + antennaDiffAreaLayer_(NULL), + taperRule_(NULL), + netEpxr_(NULL), + ssPinName_(NULL), + gsPinName_(NULL), + numProperties_(0), + propertiesAllocated_(0), + propNames_(NULL), + propValues_(NULL), + propNums_(NULL), + propTypes_(NULL), + numPorts_(0), + portsAllocated_(0), + ports_(NULL) +{ + Init(); +} + +void +lefiPin::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); + portsAllocated_ = 2; + ports_ = (lefiGeometries**) lefMalloc(sizeof(lefiGeometries*) * 2); + numPorts_ = 0; + numProperties_ = 0; + propertiesAllocated_ = 0; + propNames_ = 0; + propValues_ = 0; + propTypes_ = 0; + foreign_ = 0; + LEQ_ = 0; + mustjoin_ = 0; + lowTable_ = 0; + highTable_ = 0; + taperRule_ = 0; + antennaModel_ = 0; + numAntennaModel_ = 0; + netEpxr_ = 0; + ssPinName_ = 0; + gsPinName_ = 0; + + bump(&(LEQ_), 16, &(LEQSize_)); + bump(&(mustjoin_), 16, &(mustjoinSize_)); + bump(&(lowTable_), 16, &(lowTableSize_)); + bump(&(highTable_), 16, &(highTableSize_)); + + numAntennaSize_ = 0; + antennaSizeAllocated_ = 1; + antennaSize_ = (double*) lefMalloc(sizeof(double)); + antennaSizeLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaMetalArea_ = 0; + antennaMetalAreaAllocated_ = 1; + antennaMetalArea_ = (double*) lefMalloc(sizeof(double)); + antennaMetalAreaLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaMetalLength_ = 0; + antennaMetalLengthAllocated_ = 1; + antennaMetalLength_ = (double*) lefMalloc(sizeof(double)); + antennaMetalLengthLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaPartialMetalArea_ = 0; + antennaPartialMetalAreaAllocated_ = 1; + antennaPartialMetalArea_ = (double*) lefMalloc(sizeof(double)); + antennaPartialMetalAreaLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaPartialMetalSideArea_ = 0; + antennaPartialMetalSideAreaAllocated_ = 1; + antennaPartialMetalSideArea_ = (double*) lefMalloc(sizeof(double)); + antennaPartialMetalSideAreaLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaPartialCutArea_ = 0; + antennaPartialCutAreaAllocated_ = 1; + antennaPartialCutArea_ = (double*) lefMalloc(sizeof(double)); + antennaPartialCutAreaLayer_ = (char**) lefMalloc(sizeof(char*)); + + numAntennaDiffArea_ = 0; + antennaDiffAreaAllocated_ = 1; + antennaDiffArea_ = (double*) lefMalloc(sizeof(double)); + antennaDiffAreaLayer_ = (char**) lefMalloc(sizeof(char*)); +} + +lefiPin::~lefiPin() +{ + Destroy(); +} + +void +lefiPin::Destroy() +{ + + clear(); + lefFree(name_); + lefFree((char*) (ports_)); + lefFree(LEQ_); + lefFree(mustjoin_); + lefFree(lowTable_); + lefFree(highTable_); + if (propNames_) + lefFree((char*) (propNames_)); + propNames_ = 0; + if (propValues_) + lefFree((char*) (propValues_)); + propValues_ = 0; + if (propNums_) + lefFree((char*) (propNums_)); + propNums_ = 0; + if (propTypes_) + lefFree((char*) (propTypes_)); + propTypes_ = 0; + lefFree((char*) (antennaSize_)); + lefFree((char*) (antennaSizeLayer_)); + lefFree((char*) (antennaMetalArea_)); + lefFree((char*) (antennaMetalAreaLayer_)); + lefFree((char*) (antennaMetalLength_)); + lefFree((char*) (antennaMetalLengthLayer_)); + lefFree((char*) (antennaPartialMetalArea_)); + lefFree((char*) (antennaPartialMetalAreaLayer_)); + lefFree((char*) (antennaPartialMetalSideArea_)); + lefFree((char*) (antennaPartialMetalSideAreaLayer_)); + lefFree((char*) (antennaPartialCutArea_)); + lefFree((char*) (antennaPartialCutAreaLayer_)); + lefFree((char*) (antennaDiffArea_)); + lefFree((char*) (antennaDiffAreaLayer_)); + if (foreignAllocated_) { + lefFree((char*) (hasForeignOrient_)); + lefFree((char*) (hasForeignPoint_)); + lefFree((char*) (foreignOrient_)); + lefFree((char*) (foreignX_)); + lefFree((char*) (foreignY_)); + lefFree((char*) (foreign_)); + foreignAllocated_ = 0; + } +} + +void +lefiPin::clear() +{ + int i; + lefiGeometries *g; + lefiPinAntennaModel *aModel; + + for (i = 0; i < numPorts_; i++) { + g = ports_[i]; + g->Destroy(); + lefFree((char*) g); + } + numPorts_ = 0; + portsAllocated_ = 0; + + hasLEQ_ = 0; + hasDirection_ = 0; + hasUse_ = 0; + hasShape_ = 0; + hasMustjoin_ = 0; + hasOutMargin_ = 0; + hasOutResistance_ = 0; + hasInMargin_ = 0; + hasPower_ = 0; + hasLeakage_ = 0; + hasMaxload_ = 0; + hasMaxdelay_ = 0; + hasCapacitance_ = 0; + hasResistance_ = 0; + hasPulldownres_ = 0; + hasTieoffr_ = 0; + hasVHI_ = 0; + hasVLO_ = 0; + hasRiseVoltage_ = 0; + hasFallVoltage_ = 0; + hasRiseThresh_ = 0; + hasFallThresh_ = 0; + hasRiseSatcur_ = 0; + hasFallSatcur_ = 0; + hasCurrentSource_ = 0; + hasRiseSlewLimit_ = 0; + hasFallSlewLimit_ = 0; + hasTables_ = 0; + strcpy(use_, "SIGNAL"); + + for (i = 0; i < numForeigns_; i++) { + hasForeignOrient_[i] = 0; + hasForeignPoint_[i] = 0; + foreignOrient_[i] = -1; + lefFree((char*) (foreign_[i])); + } + numForeigns_ = 0; + + for (i = 0; i < numAntennaSize_; i++) { + if (antennaSizeLayer_[i]) + lefFree(antennaSizeLayer_[i]); + } + numAntennaSize_ = 0; + + for (i = 0; i < numAntennaMetalLength_; i++) { + if (antennaMetalLengthLayer_[i]) + lefFree(antennaMetalLengthLayer_[i]); + } + numAntennaMetalLength_ = 0; + + for (i = 0; i < numAntennaMetalArea_; i++) { + if (antennaMetalAreaLayer_[i]) + lefFree(antennaMetalAreaLayer_[i]); + } + numAntennaMetalArea_ = 0; + + for (i = 0; i < numAntennaPartialMetalArea_; i++) { + if (antennaPartialMetalAreaLayer_[i]) + lefFree(antennaPartialMetalAreaLayer_[i]); + } + numAntennaPartialMetalArea_ = 0; + + for (i = 0; i < numAntennaPartialMetalSideArea_; i++) { + if (antennaPartialMetalSideAreaLayer_[i]) + lefFree(antennaPartialMetalSideAreaLayer_[i]); + } + numAntennaPartialMetalSideArea_ = 0; + + for (i = 0; i < numAntennaPartialCutArea_; i++) { + if (antennaPartialCutAreaLayer_[i]) + lefFree(antennaPartialCutAreaLayer_[i]); + } + numAntennaPartialCutArea_ = 0; + + for (i = 0; i < numAntennaDiffArea_; i++) { + if (antennaDiffAreaLayer_[i]) + lefFree(antennaDiffAreaLayer_[i]); + } + numAntennaDiffArea_ = 0; + + if (numAntennaModel_ > 0) { + for (i = 0; i < 4; i++) { // 5.5 + aModel = antennaModel_[i]; + aModel->Destroy(); + } + } + for (i = 0; i < antennaModelAllocated_; i++) { // 5.5 + lefFree((char*) antennaModel_[i]); + } + if (antennaModel_) // 5.5 + lefFree((char*) antennaModel_); + antennaModel_ = 0; // 5.5 + numAntennaModel_ = 0; // 5.5 + curAntennaModelIndex_ = 0; // 5.5 + antennaModelAllocated_ = 0; // 5.5 + + for (i = 0; i < numProperties_; i++) { + lefFree(propNames_[i]); + lefFree(propValues_[i]); + } + numProperties_ = 0; + propertiesAllocated_ = 0; + if (taperRule_) { + lefFree(taperRule_); + taperRule_ = 0; + } + if (netEpxr_) { + lefFree(netEpxr_); + netEpxr_ = 0; + } + if (ssPinName_) { + lefFree(ssPinName_); + ssPinName_ = 0; + } + if (gsPinName_) { + lefFree(gsPinName_); + gsPinName_ = 0; + } +} + +void +lefiPin::bump(char **array, + int len, + int *size) +{ + if (*array) + lefFree(*array); + if (len > 0) + *array = (char*) lefMalloc(len); + else + *array = 0; + *size = len; +} + + +void +lefiPin::setName(const char *name) +{ + int len = strlen(name) + 1; + clear(); + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); +} + +void +lefiPin::addPort(lefiGeometries *g) +{ + if (numPorts_ == portsAllocated_) { + int i; + lefiGeometries **ng; + if (portsAllocated_ == 0) + portsAllocated_ = 2; + else + portsAllocated_ *= 2; + ng = (lefiGeometries**) lefMalloc(sizeof(lefiGeometries*) * portsAllocated_); + for (i = 0; i < numPorts_; i++) + ng[i] = ports_[i]; + lefFree((char*) (ports_)); + ports_ = ng; + } + ports_[numPorts_++] = g; +} + +void +lefiPin::addForeign(const char *name, + int hasPnt, + double x, + double y, + int orient) +{ + int i; + int *hfo; + int *hfp; + int *fo; + double *fx; + double *fy; + char **f; + + if (foreignAllocated_ == numForeigns_) { + if (foreignAllocated_ == 0) + foreignAllocated_ = 16; // since it involves char*, it will + // costly in the number is too small + else + foreignAllocated_ *= 2; + hfo = (int*) lefMalloc(sizeof(int) * foreignAllocated_); + hfp = (int*) lefMalloc(sizeof(int) * foreignAllocated_); + fo = (int*) lefMalloc(sizeof(int) * foreignAllocated_); + fx = (double*) lefMalloc(sizeof(double) * foreignAllocated_); + fy = (double*) lefMalloc(sizeof(double) * foreignAllocated_); + f = (char**) lefMalloc(sizeof(char*) * foreignAllocated_); + if (numForeigns_ != 0) { + for (i = 0; i < numForeigns_; i++) { + hfo[i] = hasForeignOrient_[i]; + hfp[i] = hasForeignPoint_[i]; + fo[i] = foreignOrient_[i]; + fx[i] = foreignX_[i]; + fy[i] = foreignY_[i]; + f[i] = foreign_[i]; + } + lefFree((char*) (hasForeignOrient_)); + lefFree((char*) (hasForeignPoint_)); + lefFree((char*) (foreignOrient_)); + lefFree((char*) (foreignX_)); + lefFree((char*) (foreignY_)); + lefFree((char*) (foreign_)); + } + hasForeignOrient_ = hfo; + hasForeignPoint_ = hfp; + foreignOrient_ = fo; + foreignX_ = fx; + foreignY_ = fy; + foreign_ = f; + } + + + // orient=-1 means no orient was specified. + if (orient != -1) + hasForeignOrient_[numForeigns_] = 1; + else + hasForeignOrient_[numForeigns_] = -1; + + hasForeignPoint_[numForeigns_] = hasPnt; + foreignOrient_[numForeigns_] = orient; + foreignX_[numForeigns_] = x; + foreignY_[numForeigns_] = y; + foreign_[numForeigns_] = (char*) lefMalloc(strlen(name) + 1); + strcpy(foreign_[numForeigns_], CASE(name)); + numForeigns_ += 1; +} + +void +lefiPin::setLEQ(const char *name) +{ + int len = strlen(name) + 1; + if (len > LEQSize_) + bump(&(LEQ_), len, &(LEQSize_)); + strcpy(LEQ_, CASE(name)); + hasLEQ_ = 1; +} + +void +lefiPin::setDirection(const char *name) +{ + strcpy(direction_, CASE(name)); + hasDirection_ = 1; +} + +void +lefiPin::setUse(const char *name) +{ + strcpy(use_, CASE(name)); + hasUse_ = 1; +} + +void +lefiPin::setShape(const char *name) +{ + strcpy(shape_, CASE(name)); + hasShape_ = 1; +} + +void +lefiPin::setMustjoin(const char *name) +{ + int len = strlen(name) + 1; + if (len > mustjoinSize_) + bump(&(mustjoin_), len, &(mustjoinSize_)); + strcpy(mustjoin_, CASE(name)); + hasMustjoin_ = 1; +} + +void +lefiPin::setOutMargin(double high, + double low) +{ + outMarginH_ = high; + outMarginL_ = low; + hasOutMargin_ = 1; +} + +void +lefiPin::setOutResistance(double high, + double low) +{ + outResistanceH_ = high; + outResistanceL_ = low; + hasOutResistance_ = 1; +} + +void +lefiPin::setInMargin(double high, + double low) +{ + inMarginH_ = high; + inMarginL_ = low; + hasInMargin_ = 1; +} + +void +lefiPin::setPower(double power) +{ + power_ = power; + hasPower_ = 1; +} + +void +lefiPin::setLeakage(double current) +{ + leakage_ = current; + hasLeakage_ = 1; +} + +void +lefiPin::setMaxload(double capacitance) +{ + maxload_ = capacitance; + hasMaxload_ = 1; +} + +void +lefiPin::setMaxdelay(double dtime) +{ + maxdelay_ = dtime; + hasMaxdelay_ = 1; +} + +void +lefiPin::setCapacitance(double capacitance) +{ + capacitance_ = capacitance; + hasCapacitance_ = 1; +} + +void +lefiPin::setResistance(double resistance) +{ + resistance_ = resistance; + hasResistance_ = 1; +} + +void +lefiPin::setPulldownres(double resistance) +{ + pulldownres_ = resistance; + hasPulldownres_ = 1; +} + +void +lefiPin::setTieoffr(double resistance) +{ + tieoffr_ = resistance; + hasTieoffr_ = 1; +} + +void +lefiPin::setVHI(double voltage) +{ + VHI_ = voltage; + hasVHI_ = 1; +} + +void +lefiPin::setVLO(double voltage) +{ + VLO_ = voltage; + hasVLO_ = 1; +} + +void +lefiPin::setRiseVoltage(double voltage) +{ + riseVoltage_ = voltage; + hasRiseVoltage_ = 1; +} + +void +lefiPin::setFallVoltage(double voltage) +{ + fallVoltage_ = voltage; + hasFallVoltage_ = 1; +} + +void +lefiPin::setFallSlewLimit(double num) +{ + fallSlewLimit_ = num; + hasFallSlewLimit_ = 1; +} + +void +lefiPin::setRiseSlewLimit(double num) +{ + riseSlewLimit_ = num; + hasRiseSlewLimit_ = 1; +} + +void +lefiPin::setRiseThresh(double capacitance) +{ + riseThresh_ = capacitance; + hasRiseThresh_ = 1; +} + +void +lefiPin::setTaperRule(const char *name) +{ + int len = strlen(name) + 1; + taperRule_ = (char*) lefMalloc(len); + strcpy(taperRule_, name); +} + +void +lefiPin::setNetExpr(const char *name) +{ + netEpxr_ = strdup(name); +} + +void +lefiPin::setSupplySensitivity(const char *pinName) +{ + ssPinName_ = strdup(pinName); +} + +void +lefiPin::setGroundSensitivity(const char *pinName) +{ + gsPinName_ = strdup(pinName); +} + +void +lefiPin::setFallThresh(double capacitance) +{ + fallThresh_ = capacitance; + hasFallThresh_ = 1; +} + +void +lefiPin::setRiseSatcur(double current) +{ + riseSatcur_ = current; + hasRiseSatcur_ = 1; +} + +void +lefiPin::setFallSatcur(double current) +{ + fallSatcur_ = current; + hasFallSatcur_ = 1; +} + +void +lefiPin::setCurrentSource(const char *name) +{ + strcpy(currentSource_, CASE(name)); + hasCurrentSource_ = 1; +} + +void +lefiPin::setTables(const char *highName, + const char *lowName) +{ + int len = strlen(highName) + 1; + if (len > highTableSize_) + bump(&(highTable_), len, &(highTableSize_)); + strcpy(highTable_, CASE(highName)); + len = strlen(lowName) + 1; + if (len > lowTableSize_) + bump(&(lowTable_), len, &(lowTableSize_)); + strcpy(lowTable_, CASE(lowName)); + hasTables_ = 1; +} + +void +lefiPin::setProperty(const char *name, + const char *value, + const char type) +{ + int len; + if (numProperties_ == propertiesAllocated_) + bumpProps(); + len = strlen(name) + 1; + propNames_[numProperties_] = (char*) lefMalloc(len); + strcpy(propNames_[numProperties_], CASE(name)); + len = strlen(value) + 1; + propValues_[numProperties_] = (char*) lefMalloc(len); + strcpy(propValues_[numProperties_], CASE(value)); + propNums_[numProperties_] = 0; + propTypes_[numProperties_] = type; + numProperties_ += 1; +} + +void +lefiPin::setNumProperty(const char *name, + double d, + const char *value, + const char type) +{ + int len; + + if (numProperties_ == propertiesAllocated_) + bumpProps(); + len = strlen(name) + 1; + propNames_[numProperties_] = (char*) lefMalloc(len); + strcpy(propNames_[numProperties_], CASE(name)); + len = strlen(value) + 1; + propValues_[numProperties_] = (char*) lefMalloc(len); + strcpy(propValues_[numProperties_], CASE(value)); + propNums_[numProperties_] = d; + propTypes_[numProperties_] = type; + numProperties_ += 1; +} + +void +lefiPin::bumpProps() +{ + int lim = propertiesAllocated_; + int news; + char **newpn; + char **newpv; + double *newd; + char *newt; + + news = lim ? lim + lim : 2; + + newpn = (char**) lefMalloc(sizeof(char*) * news); + newpv = (char**) lefMalloc(sizeof(char*) * news); + newd = (double*) lefMalloc(sizeof(double) * news); + newt = (char*) lefMalloc(sizeof(char) * news); + + lim = propertiesAllocated_ = news; + + if (lim > 2) { + int i; + for (i = 0; i < numProperties_; i++) { + newpn[i] = propNames_[i]; + newpv[i] = propValues_[i]; + newd[i] = propNums_[i]; + newt[i] = propTypes_[i]; + } + } + if (propNames_) + lefFree((char*) (propNames_)); + if (propValues_) + lefFree((char*) (propValues_)); + if (propNums_) + lefFree((char*) (propNums_)); + if (propTypes_) + lefFree((char*) (propTypes_)); + propNames_ = newpn; + propValues_ = newpv; + propNums_ = newd; + propTypes_ = newt; +} + + +int +lefiPin::hasForeign() const +{ + return (numForeigns_) ? 1 : 0; +} + +int +lefiPin::hasForeignOrient(int index) const +{ + return (hasForeignOrient_[index] == -1) ? 0 : 1; +} + +int +lefiPin::hasForeignPoint(int index) const +{ + return hasForeignPoint_[index]; +} + +int +lefiPin::hasLEQ() const +{ + return hasLEQ_; +} + +int +lefiPin::hasDirection() const +{ + return hasDirection_; +} + +int +lefiPin::hasUse() const +{ + return hasUse_; +} + +int +lefiPin::hasShape() const +{ + return hasShape_; +} + +int +lefiPin::hasMustjoin() const +{ + return hasMustjoin_; +} + +int +lefiPin::hasOutMargin() const +{ + return hasOutMargin_; +} + +int +lefiPin::hasOutResistance() const +{ + return hasOutResistance_; +} + +int +lefiPin::hasInMargin() const +{ + return hasInMargin_; +} + +int +lefiPin::hasPower() const +{ + return hasPower_; +} + +int +lefiPin::hasLeakage() const +{ + return hasLeakage_; +} + +int +lefiPin::hasMaxload() const +{ + return hasMaxload_; +} + +int +lefiPin::hasMaxdelay() const +{ + return hasMaxdelay_; +} + +int +lefiPin::hasCapacitance() const +{ + return hasCapacitance_; +} + +int +lefiPin::hasResistance() const +{ + return hasResistance_; +} + +int +lefiPin::hasPulldownres() const +{ + return hasPulldownres_; +} + +int +lefiPin::hasTieoffr() const +{ + return hasTieoffr_; +} + +int +lefiPin::hasVHI() const +{ + return hasVHI_; +} + +int +lefiPin::hasVLO() const +{ + return hasVLO_; +} + +int +lefiPin::hasFallSlewLimit() const +{ + return hasFallSlewLimit_; +} + +int +lefiPin::hasRiseSlewLimit() const +{ + return hasRiseSlewLimit_; +} + +int +lefiPin::hasRiseVoltage() const +{ + return hasRiseVoltage_; +} + +int +lefiPin::hasFallVoltage() const +{ + return hasFallVoltage_; +} + +int +lefiPin::hasRiseThresh() const +{ + return hasRiseThresh_; +} + +int +lefiPin::hasFallThresh() const +{ + return hasFallThresh_; +} + +int +lefiPin::hasRiseSatcur() const +{ + return hasRiseSatcur_; +} + +int +lefiPin::hasFallSatcur() const +{ + return hasFallSatcur_; +} + +int +lefiPin::hasCurrentSource() const +{ + return hasCurrentSource_; +} + +int +lefiPin::hasTables() const +{ + return hasTables_; +} + +int +lefiPin::hasAntennaSize() const +{ + return numAntennaSize_ ? 1 : 0; +} + +int +lefiPin::hasAntennaMetalLength() const +{ + return numAntennaMetalLength_ ? 1 : 0; +} + +int +lefiPin::hasAntennaMetalArea() const +{ + return numAntennaMetalArea_ ? 1 : 0; +} + +int +lefiPin::hasAntennaPartialMetalArea() const +{ + return numAntennaPartialMetalArea_ ? 1 : 0; +} + +int +lefiPin::hasAntennaPartialMetalSideArea() const +{ + return numAntennaPartialMetalSideArea_ ? 1 : 0; +} + +int +lefiPin::hasAntennaPartialCutArea() const +{ + return numAntennaPartialCutArea_ ? 1 : 0; +} + +int +lefiPin::hasAntennaDiffArea() const +{ + return numAntennaDiffArea_ ? 1 : 0; +} + +int +lefiPin::hasAntennaModel() const +{ + return antennaModel_ ? 1 : 0; +} + +int +lefiPin::hasTaperRule() const +{ + return taperRule_ ? 1 : 0; +} + +int +lefiPin::hasNetExpr() const +{ + return netEpxr_ ? 1 : 0; +} + +int +lefiPin::hasSupplySensitivity() const +{ + return ssPinName_ ? 1 : 0; +} + +int +lefiPin::hasGroundSensitivity() const +{ + return gsPinName_ ? 1 : 0; +} + +const char * +lefiPin::name() const +{ + return name_; +} + +const char * +lefiPin::taperRule() const +{ + return taperRule_; +} + +const char * +lefiPin::netExpr() const +{ + return netEpxr_; +} + +const char * +lefiPin::supplySensitivity() const +{ + return ssPinName_; +} + +const char * +lefiPin::groundSensitivity() const +{ + return gsPinName_; +} + +int +lefiPin::numPorts() const +{ + return numPorts_; +} + +lefiGeometries * +lefiPin::port(int index) const +{ + char msg[160]; + if (index < 0 || index > numPorts_) { + sprintf(msg, "ERROR (LEFPARS-1350): The index number %d given for the macro PIN is invalid.\nValid index is from 0 to %d", index, numPorts_); + lefiError(0, 1350, msg); + return 0; + } + return ports_[index]; +} + +int +lefiPin::numForeigns() const +{ + return numForeigns_; +} + +const char * +lefiPin::foreignName(int index) const +{ + return foreign_[index]; +} + +int +lefiPin::foreignOrient(int index) const +{ + return foreignOrient_[index]; +} + +const char * +lefiPin::foreignOrientStr(int index) const +{ + return (lefiOrientStr(foreignOrient_[index])); +} + +double +lefiPin::foreignX(int index) const +{ + return foreignX_[index]; +} + +double +lefiPin::foreignY(int index) const +{ + return foreignY_[index]; +} + +const char * +lefiPin::LEQ() const +{ + return LEQ_; +} + +const char * +lefiPin::direction() const +{ + return direction_; +} + +const char * +lefiPin::use() const +{ + return use_; +} + +const char * +lefiPin::shape() const +{ + return shape_; +} + +const char * +lefiPin::mustjoin() const +{ + return mustjoin_; +} + +double +lefiPin::outMarginHigh() const +{ + return outMarginH_; +} + +double +lefiPin::outMarginLow() const +{ + return outMarginL_; +} + +double +lefiPin::outResistanceHigh() const +{ + return outResistanceH_; +} + +double +lefiPin::outResistanceLow() const +{ + return outResistanceL_; +} + +double +lefiPin::inMarginHigh() const +{ + return inMarginH_; +} + +double +lefiPin::inMarginLow() const +{ + return inMarginL_; +} + +double +lefiPin::power() const +{ + return power_; +} + +double +lefiPin::leakage() const +{ + return leakage_; +} + +double +lefiPin::maxload() const +{ + return maxload_; +} + +double +lefiPin::maxdelay() const +{ + return maxdelay_; +} + +double +lefiPin::capacitance() const +{ + return capacitance_; +} + +double +lefiPin::resistance() const +{ + return resistance_; +} + +double +lefiPin::pulldownres() const +{ + return pulldownres_; +} + +double +lefiPin::tieoffr() const +{ + return tieoffr_; +} + +double +lefiPin::VHI() const +{ + return VHI_; +} + +double +lefiPin::VLO() const +{ + return VLO_; +} + +double +lefiPin::fallSlewLimit() const +{ + return fallSlewLimit_; +} + +double +lefiPin::riseSlewLimit() const +{ + return riseSlewLimit_; +} + +double +lefiPin::riseVoltage() const +{ + return riseVoltage_; +} + +double +lefiPin::fallVoltage() const +{ + return fallVoltage_; +} + +double +lefiPin::riseThresh() const +{ + return riseThresh_; +} + +double +lefiPin::fallThresh() const +{ + return fallThresh_; +} + +double +lefiPin::riseSatcur() const +{ + return riseSatcur_; +} + +double +lefiPin::fallSatcur() const +{ + return fallSatcur_; +} + +const char * +lefiPin::currentSource() const +{ + return currentSource_; +} + +const char * +lefiPin::tableHighName() const +{ + return highTable_; +} + +const char * +lefiPin::tableLowName() const +{ + return lowTable_; +} + +const char * +lefiPin::antennaSizeLayer(int i) const +{ + return antennaSizeLayer_[i]; +} + +const char * +lefiPin::antennaMetalAreaLayer(int i) const +{ + return antennaMetalAreaLayer_[i]; +} + +const char * +lefiPin::antennaMetalLengthLayer(int i) const +{ + return antennaMetalLengthLayer_[i]; +} + +const char * +lefiPin::antennaPartialMetalAreaLayer(int i) const +{ + return antennaPartialMetalAreaLayer_[i]; +} + +const char * +lefiPin::antennaPartialMetalSideAreaLayer(int i) const +{ + return antennaPartialMetalSideAreaLayer_[i]; +} + +const char * +lefiPin::antennaPartialCutAreaLayer(int i) const +{ + return antennaPartialCutAreaLayer_[i]; +} + +const char * +lefiPin::antennaDiffAreaLayer(int i) const +{ + return antennaDiffAreaLayer_[i]; +} + +int +lefiPin::numAntennaSize() const +{ + return numAntennaSize_; +} + +int +lefiPin::numAntennaMetalArea() const +{ + return numAntennaMetalArea_; +} + +int +lefiPin::numAntennaMetalLength() const +{ + return numAntennaMetalLength_; +} + +int +lefiPin::numAntennaPartialMetalArea() const +{ + return numAntennaPartialMetalArea_; +} + +int +lefiPin::numAntennaPartialMetalSideArea() const +{ + return numAntennaPartialMetalSideArea_; +} + +int +lefiPin::numAntennaPartialCutArea() const +{ + return numAntennaPartialCutArea_; +} + +int +lefiPin::numAntennaDiffArea() const +{ + return numAntennaDiffArea_; +} + +double +lefiPin::antennaSize(int i) const +{ + return antennaSize_[i]; +} + +double +lefiPin::antennaMetalArea(int i) const +{ + return antennaMetalArea_[i]; +} + +double +lefiPin::antennaMetalLength(int i) const +{ + return antennaMetalLength_[i]; +} + +double +lefiPin::antennaPartialMetalArea(int i) const +{ + return antennaPartialMetalArea_[i]; +} + +double +lefiPin::antennaPartialMetalSideArea(int i) const +{ + return antennaPartialMetalSideArea_[i]; +} + +double +lefiPin::antennaPartialCutArea(int i) const +{ + return antennaPartialCutArea_[i]; +} + +double +lefiPin::antennaDiffArea(int i) const +{ + return antennaDiffArea_[i]; +} + +void +lefiPin::addAntennaMetalLength(double val, + const char *layer) +{ + int len; + if (numAntennaMetalLength_ == antennaMetalLengthAllocated_) { + int i; + int max; + int lim = numAntennaMetalLength_; + double *nd; + char **nl; + + if (antennaMetalLengthAllocated_ == 0) + max = antennaMetalLengthAllocated_ = 2; + else + max = antennaMetalLengthAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaMetalLengthLayer_[i]; + nd[i] = antennaMetalLength_[i]; + } + lefFree((char*) (antennaMetalLengthLayer_)); + lefFree((char*) (antennaMetalLength_)); + antennaMetalLengthLayer_ = nl; + antennaMetalLength_ = nd; + } + antennaMetalLength_[numAntennaMetalLength_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaMetalLengthLayer_[numAntennaMetalLength_] = + (char*) lefMalloc(len); + strcpy(antennaMetalLengthLayer_[numAntennaMetalLength_], + layer); + } else + antennaMetalLengthLayer_[numAntennaMetalLength_] = NULL; + numAntennaMetalLength_ += 1; +} + +// 5.5 +void +lefiPin::addAntennaModel(int oxide) +{ + // For version 5.5 only OXIDE1, OXIDE2, OXIDE3, & OXIDE4 + // are defined within a macro pin + lefiPinAntennaModel *amo; + int i; + + if (numAntennaModel_ == 0) { // does not have antennaModel + antennaModel_ = (lefiPinAntennaModel**) + lefMalloc(sizeof(lefiPinAntennaModel*) * 4); + antennaModelAllocated_ = 4; + for (i = 0; i < 4; i++) { + antennaModel_[i] = (lefiPinAntennaModel*) + lefMalloc(sizeof(lefiPinAntennaModel)); + antennaModel_[i]->setAntennaModel(0); + // just initialize it first + } + antennaModelAllocated_ = 4; + amo = antennaModel_[0]; + curAntennaModelIndex_ = 0; + } + + // First can go any oxide, so fill pref oxides models. + for (int idx = 0; idx < oxide - 1; idx++) { + amo = antennaModel_[idx]; + if (!amo->antennaOxide()) { + amo->Init(); + amo->setAntennaModel(idx + 1); + } + } + + amo = antennaModel_[oxide - 1]; + curAntennaModelIndex_ = oxide - 1; + // Oxide has not defined yet + if (amo->antennaOxide()) { + amo->clear(); + } + + if (oxide > numAntennaModel_) { + numAntennaModel_ = oxide; + } + + amo->Init(); + amo->setAntennaModel(oxide); + return; +} + +// 5.5 +int +lefiPin::numAntennaModel() const +{ + return numAntennaModel_; +} + +// 5.5 +lefiPinAntennaModel * +lefiPin::antennaModel(int index) const +{ + int j = index; + lefiPinAntennaModel *amo; + + if (index == 0) { // reset all the return flags to 0, beginning of the loop + int i; + for (i = 0; i < 4; i++) + antennaModel_[i]->setAntennaReturnFlag(0); + } + while (j < 4) { + amo = antennaModel_[j]; + if (!(amo->antennaOxide()) && + (amo->hasReturn() == 0)) + j++; + else + break; + if (j == 4) { // something very wrong, normally this can't happen + lefiError(0, 1351, "ERROR (LEFPARS-1351): There is an unexpected lef parser bug which cause it unable to retrieve ANTENNAMODEL data with the given index."); + return 0; + } + } + // If it arrived here, it is saved, mark the antennaModel has returned + antennaModel_[j]->setAntennaReturnFlag(1); + return antennaModel_[j]; +} + +void +lefiPin::addAntennaSize(double val, + const char *layer) +{ + int len; + if (numAntennaSize_ == antennaSizeAllocated_) { + int i; + int max; + int lim = numAntennaSize_; + double *nd; + char **nl; + + if (antennaSizeAllocated_ == 0) + max = antennaSizeAllocated_ = 2; + else + max = antennaSizeAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaSizeLayer_[i]; + nd[i] = antennaSize_[i]; + } + lefFree((char*) (antennaSizeLayer_)); + lefFree((char*) (antennaSize_)); + antennaSizeLayer_ = nl; + antennaSize_ = nd; + } + antennaSize_[numAntennaSize_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaSizeLayer_[numAntennaSize_] = + (char*) lefMalloc(len); + strcpy(antennaSizeLayer_[numAntennaSize_], + layer); + } else + antennaSizeLayer_[numAntennaSize_] = NULL; + numAntennaSize_ += 1; +} + +void +lefiPin::addAntennaMetalArea(double val, + const char *layer) +{ + int len; + if (numAntennaMetalArea_ == antennaMetalAreaAllocated_) { + int i; + int max; + int lim = numAntennaMetalArea_; + double *nd; + char **nl; + + if (antennaMetalAreaAllocated_ == 0) + max = antennaMetalAreaAllocated_ = 2; + else + max = antennaMetalAreaAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaMetalAreaLayer_[i]; + nd[i] = antennaMetalArea_[i]; + } + lefFree((char*) (antennaMetalAreaLayer_)); + lefFree((char*) (antennaMetalArea_)); + antennaMetalAreaLayer_ = nl; + antennaMetalArea_ = nd; + } + antennaMetalArea_[numAntennaMetalArea_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaMetalAreaLayer_[numAntennaMetalArea_] = + (char*) lefMalloc(len); + strcpy(antennaMetalAreaLayer_[numAntennaMetalArea_], + layer); + } else + antennaMetalAreaLayer_[numAntennaMetalArea_] = NULL; + numAntennaMetalArea_ += 1; +} + +void +lefiPin::addAntennaPartialMetalArea(double val, + const char *layer) +{ + int len; + if (numAntennaPartialMetalArea_ == antennaPartialMetalAreaAllocated_) { + int i; + int max; + int lim = numAntennaPartialMetalArea_; + double *nd; + char **nl; + + if (antennaPartialMetalAreaAllocated_ == 0) + max = antennaPartialMetalAreaAllocated_ = 2; + else + max = antennaPartialMetalAreaAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaPartialMetalAreaLayer_[i]; + nd[i] = antennaPartialMetalArea_[i]; + } + lefFree((char*) (antennaPartialMetalAreaLayer_)); + lefFree((char*) (antennaPartialMetalArea_)); + antennaPartialMetalAreaLayer_ = nl; + antennaPartialMetalArea_ = nd; + } + antennaPartialMetalArea_[numAntennaPartialMetalArea_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaPartialMetalAreaLayer_[numAntennaPartialMetalArea_] = + (char*) lefMalloc(len); + strcpy(antennaPartialMetalAreaLayer_[numAntennaPartialMetalArea_], + layer); + } else + antennaPartialMetalAreaLayer_[numAntennaPartialMetalArea_] = NULL; + numAntennaPartialMetalArea_ += 1; +} + +void +lefiPin::addAntennaPartialMetalSideArea(double val, + const char *layer) +{ + int len; + if (numAntennaPartialMetalSideArea_ == antennaPartialMetalSideAreaAllocated_) { + int i; + int max; + int lim = numAntennaPartialMetalSideArea_; + double *nd; + char **nl; + + if (antennaPartialMetalSideAreaAllocated_ == 0) + max = antennaPartialMetalSideAreaAllocated_ = 2; + else + max = antennaPartialMetalSideAreaAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaPartialMetalSideAreaLayer_[i]; + nd[i] = antennaPartialMetalSideArea_[i]; + } + lefFree((char*) (antennaPartialMetalSideAreaLayer_)); + lefFree((char*) (antennaPartialMetalSideArea_)); + antennaPartialMetalSideAreaLayer_ = nl; + antennaPartialMetalSideArea_ = nd; + } + antennaPartialMetalSideArea_[numAntennaPartialMetalSideArea_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaPartialMetalSideAreaLayer_[numAntennaPartialMetalSideArea_] = + (char*) lefMalloc(len); + strcpy(antennaPartialMetalSideAreaLayer_[numAntennaPartialMetalSideArea_], + layer); + } else + antennaPartialMetalSideAreaLayer_[numAntennaPartialMetalSideArea_] = NULL; + numAntennaPartialMetalSideArea_ += 1; +} + +void +lefiPin::addAntennaPartialCutArea(double val, + const char *layer) +{ + int len; + if (numAntennaPartialCutArea_ == antennaPartialCutAreaAllocated_) { + int i; + int max; + int lim = numAntennaPartialCutArea_; + double *nd; + char **nl; + + if (antennaPartialCutAreaAllocated_ == 0) + max = antennaPartialCutAreaAllocated_ = 2; + else + max = antennaPartialCutAreaAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaPartialCutAreaLayer_[i]; + nd[i] = antennaPartialCutArea_[i]; + } + lefFree((char*) (antennaPartialCutAreaLayer_)); + lefFree((char*) (antennaPartialCutArea_)); + antennaPartialCutAreaLayer_ = nl; + antennaPartialCutArea_ = nd; + } + antennaPartialCutArea_[numAntennaPartialCutArea_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaPartialCutAreaLayer_[numAntennaPartialCutArea_] = + (char*) lefMalloc(len); + strcpy(antennaPartialCutAreaLayer_[numAntennaPartialCutArea_], + layer); + } else + antennaPartialCutAreaLayer_[numAntennaPartialCutArea_] = NULL; + numAntennaPartialCutArea_ += 1; +} + +void +lefiPin::addAntennaDiffArea(double val, + const char *layer) +{ + int len; + if (numAntennaDiffArea_ == antennaDiffAreaAllocated_) { + int i; + int max; + int lim = numAntennaDiffArea_; + double *nd; + char **nl; + + if (antennaDiffAreaAllocated_ == 0) + max = antennaDiffAreaAllocated_ = 2; + else + max = antennaDiffAreaAllocated_ *= 2; + nd = (double*) lefMalloc(sizeof(double) * max); + nl = (char**) lefMalloc(sizeof(double) * max); + for (i = 0; i < lim; i++) { + nl[i] = antennaDiffAreaLayer_[i]; + nd[i] = antennaDiffArea_[i]; + } + lefFree((char*) (antennaDiffAreaLayer_)); + lefFree((char*) (antennaDiffArea_)); + antennaDiffAreaLayer_ = nl; + antennaDiffArea_ = nd; + } + antennaDiffArea_[numAntennaDiffArea_] = val; + if (layer) { // layer can be null, since it is optional + len = strlen(layer) + 1; + antennaDiffAreaLayer_[numAntennaDiffArea_] = + (char*) lefMalloc(len); + strcpy(antennaDiffAreaLayer_[numAntennaDiffArea_], + layer); + } else + antennaDiffAreaLayer_[numAntennaDiffArea_] = NULL; + numAntennaDiffArea_ += 1; +} + +void +lefiPin::addAntennaGateArea(double val, + const char *layer) +{ + if (numAntennaModel_ == 0) // haven't created any antennaModel yet + addAntennaModel(1); + antennaModel_[curAntennaModelIndex_]->addAntennaGateArea(val, layer); +} + +void +lefiPin::addAntennaMaxAreaCar(double val, + const char *layer) +{ + if (numAntennaModel_ == 0) // haven't created any antennaModel yet + addAntennaModel(1); + antennaModel_[curAntennaModelIndex_]->addAntennaMaxAreaCar(val, + layer); +} + +void +lefiPin::addAntennaMaxSideAreaCar(double val, + const char *layer) +{ + if (numAntennaModel_ == 0) // haven't created any antennaModel yet + addAntennaModel(1); + antennaModel_[curAntennaModelIndex_]->addAntennaMaxSideAreaCar(val, + layer); +} + +void +lefiPin::addAntennaMaxCutCar(double val, + const char *layer) +{ + if (numAntennaModel_ == 0) // haven't created any antennaModel yet + addAntennaModel(1); + antennaModel_[curAntennaModelIndex_]->addAntennaMaxCutCar(val, + layer); +} + +int +lefiPin::numProperties() const +{ + return numProperties_; +} + +const char * +lefiPin::propName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propNames_[index]; +} + +const char * +lefiPin::propValue(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propValues_[index]; +} + +double +lefiPin::propNum(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propNums_[index]; +} + +const char +lefiPin::propType(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propTypes_[index]; +} + +int +lefiPin::propIsNumber(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propNums_[index] ? 1 : 0; +} + +int +lefiPin::propIsString(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propNums_[index] ? 0 : 1; +} + +void +lefiPin::print(FILE *f) const +{ + int i; + lefiGeometries *g; + + fprintf(f, " Pin %s\n", name()); + + for (i = 0; i < numPorts(); i++) { + fprintf(f, " Port %d ", i); + g = port(i); + g->print(f); + } + +} + +// ***************************************************************************** +// lefiMacro +// ***************************************************************************** + +lefiMacro::lefiMacro() +: nameSize_(0), + name_(NULL), + generatorSize_(0), + generator_(NULL), + hasClass_(0), + hasGenerator_(0), + hasGenerate_(0), + hasPower_(0), + hasOrigin_(0), + hasSource_(0), + hasEEQ_(0), + hasLEQ_(0), + hasSymmetry_(0), + hasSiteName_(0), + hasSize_(0), + hasClockType_(0), + isBuffer_(0), + isInverter_(0), + EEQ_(NULL), + EEQSize_(0), + LEQ_(NULL), + LEQSize_(0), + gen1_(NULL), + gen1Size_(0), + gen2_(NULL), + gen2Size_(0), + power_(0.0), + originX_(0.0), + originY_(0.0), + sizeX_(0.0), + sizeY_(0.0), + numSites_(0), + sitesAllocated_(0), + pattern_(NULL), + numForeigns_(0), + foreignAllocated_(0), + hasForeignOrigin_(NULL), + hasForeignPoint_(NULL), + foreignOrient_(NULL), + foreignX_(NULL), + foreignY_(NULL), + foreign_(NULL), + siteNameSize_(0), + siteName_(NULL), + clockType_(NULL), + clockTypeSize_(0), + numProperties_(0), + propertiesAllocated_(0), + propNames_(NULL), + propValues_(NULL), + propNums_(NULL), + propTypes_(NULL), + isFixedMask_(0) +{ + Init(); +} + +void +lefiMacro::Init() +{ + name_ = 0; + generator_ = 0; + EEQ_ = 0; + LEQ_ = 0; + gen1_ = 0; + gen2_ = 0; + foreign_ = 0; + siteName_ = 0; + clockType_ = 0; + propNames_ = 0; + propValues_ = 0; + propTypes_ = 0; + + bump(&(name_), 16, &(nameSize_)); + bump(&(generator_), 16, &(generatorSize_)); + bump(&(EEQ_), 16, &(EEQSize_)); + bump(&(LEQ_), 16, &(LEQSize_)); + bump(&(gen1_), 16, &(gen1Size_)); + bump(&(gen2_), 16, &(gen2Size_)); + bump(&(siteName_), 16, &(siteNameSize_)); + bump(&(clockType_), 16, &(clockTypeSize_)); + + propertiesAllocated_ = 2; + numProperties_ = 0; + propNames_ = (char**) lefMalloc(sizeof(char*) * 2); + propValues_ = (char**) lefMalloc(sizeof(char*) * 2); + propNums_ = (double*) lefMalloc(sizeof(double) * 2); + propTypes_ = (char*) lefMalloc(sizeof(char) * 2); + + numSites_ = 0; + sitesAllocated_ = 0; + pattern_ = 0; + numForeigns_ = 0; + foreignAllocated_ = 0; + isFixedMask_ = 0; + + clear(); +} + +void +lefiMacro::Destroy() +{ + clear(); + lefFree(name_); + lefFree(generator_); + lefFree(EEQ_); + lefFree(LEQ_); + lefFree(gen1_); + lefFree(gen2_); + lefFree(siteName_); + lefFree(clockType_); + lefFree((char*) (propNames_)); + lefFree((char*) (propValues_)); + lefFree((char*) (propNums_)); + lefFree((char*) (propTypes_)); + if (foreignAllocated_) { + lefFree((char*) (hasForeignOrigin_)); + lefFree((char*) (hasForeignPoint_)); + lefFree((char*) (foreignOrient_)); + lefFree((char*) (foreignX_)); + lefFree((char*) (foreignY_)); + lefFree((char*) (foreign_)); + foreignAllocated_ = 0; + } +} + +lefiMacro::~lefiMacro() +{ + Destroy(); +} + +void +lefiMacro::clear() +{ + int i; + + hasClass_ = 0; + hasGenerator_ = 0; + hasGenerate_ = 0; + hasPower_ = 0; + hasOrigin_ = 0; + hasSource_ = 0; + hasEEQ_ = 0; + hasLEQ_ = 0; + hasSymmetry_ = 0; + hasSiteName_ = 0; + hasClockType_ = 0; + hasSize_ = 0; + isInverter_ = 0; + isBuffer_ = 0; + + for (i = 0; i < numForeigns_; i++) { + hasForeignOrigin_[i] = 0; + hasForeignPoint_[i] = 0; + foreignOrient_[i] = -1; + lefFree((char*) (foreign_[i])); + } + numForeigns_ = 0; + + if (pattern_) { + for (i = 0; i < numSites_; i++) { + pattern_[i]->Destroy(); + lefFree((char*) (pattern_[i])); + } + numSites_ = 0; + sitesAllocated_ = 0; + lefFree((char*) (pattern_)); + pattern_ = 0; + } + + for (i = 0; i < numProperties_; i++) { + lefFree(propNames_[i]); + lefFree(propValues_[i]); + } + + numProperties_ = 0; + isFixedMask_ = 0; +} + +void +lefiMacro::bump(char **array, + int len, + int *size) +{ + if (*array) + lefFree(*array); + if (len) + *array = (char*) lefMalloc(len); + else + *array = 0; + *size = len; +} + +void +lefiMacro::setName(const char *name) +{ + int len = strlen(name) + 1; + if (len > nameSize_) + bump(&(name_), len, &(nameSize_)); + strcpy(name_, CASE(name)); +} + +void +lefiMacro::setGenerate(const char *name, + const char *n2) +{ + int len = strlen(name) + 1; + if (len > gen1Size_) + bump(&(gen1_), len, &(gen1Size_)); + strcpy(gen1_, CASE(name)); + len = strlen(n2) + 1; + if (len > gen2Size_) + bump(&(gen2_), len, &(gen2Size_)); + strcpy(gen2_, n2); +} + +void +lefiMacro::setGenerator(const char *name) +{ + int len = strlen(name) + 1; + if (len > generatorSize_) + bump(&(generator_), len, &(generatorSize_)); + strcpy(generator_, CASE(name)); + hasGenerator_ = 1; +} + +void +lefiMacro::setInverter() +{ + isInverter_ = 1; +} + +void +lefiMacro::setBuffer() +{ + isBuffer_ = 1; +} + +void +lefiMacro::setSource(const char *name) +{ + strcpy(source_, CASE(name)); + hasSource_ = 1; +} + +void +lefiMacro::setClass(const char *name) +{ + strcpy(macroClass_, CASE(name)); + hasClass_ = 1; +} + +void +lefiMacro::setOrigin(double x, + double y) +{ + originX_ = x; + originY_ = y; + hasOrigin_ = 1; +} + +void +lefiMacro::setPower(double p) +{ + power_ = p; + hasPower_ = 1; +} + +void +lefiMacro::setEEQ(const char *name) +{ + int len = strlen(name) + 1; + if (len > EEQSize_) + bump(&(EEQ_), len, &(EEQSize_)); + strcpy(EEQ_, CASE(name)); + hasEEQ_ = 1; +} + +void +lefiMacro::setLEQ(const char *name) +{ + int len = strlen(name) + 1; + if (len > LEQSize_) + bump(&(LEQ_), len, &(LEQSize_)); + strcpy(LEQ_, CASE(name)); + hasLEQ_ = 1; +} + +void +lefiMacro::setProperty(const char *name, + const char *value, + const char type) +{ + int len; + if (numProperties_ == propertiesAllocated_) + bumpProps(); + len = strlen(name) + 1; + propNames_[numProperties_] = (char*) lefMalloc(len); + strcpy(propNames_[numProperties_], CASE(name)); + len = strlen(value) + 1; + propValues_[numProperties_] = (char*) lefMalloc(len); + strcpy(propValues_[numProperties_], CASE(value)); + propNums_[numProperties_] = 0.0; + propTypes_[numProperties_] = type; + numProperties_ += 1; +} + +void +lefiMacro::setNumProperty(const char *name, + double d, + const char *value, + const char type) +{ + int len; + + if (numProperties_ == propertiesAllocated_) + bumpProps(); + len = strlen(name) + 1; + propNames_[numProperties_] = (char*) lefMalloc(len); + strcpy(propNames_[numProperties_], CASE(name)); + len = strlen(value) + 1; + propValues_[numProperties_] = (char*) lefMalloc(len); + strcpy(propValues_[numProperties_], CASE(value)); + propNums_[numProperties_] = d; + propTypes_[numProperties_] = type; + numProperties_ += 1; +} + + +void +lefiMacro::bumpProps() +{ + int lim; + int news; + char **newpn; + char **newpv; + double *newd; + char *newt; + int i; + + if (propertiesAllocated_ <= 0) + lim = 2; // starts with 4 + else + lim = propertiesAllocated_; + news = lim + lim; + newpn = (char**) lefMalloc(sizeof(char*) * news); + newpv = (char**) lefMalloc(sizeof(char*) * news); + newd = (double*) lefMalloc(sizeof(double) * news); + newt = (char*) lefMalloc(sizeof(char) * news); + + propertiesAllocated_ = news; + + for (i = 0; i < lim; i++) { + newpn[i] = propNames_[i]; + newpv[i] = propValues_[i]; + newd[i] = propNums_[i]; + newt[i] = propTypes_[i]; + } + lefFree((char*) (propNames_)); + lefFree((char*) (propValues_)); + lefFree((char*) (propNums_)); + lefFree((char*) (propTypes_)); + propNames_ = newpn; + propValues_ = newpv; + propNums_ = newd; + propTypes_ = newt; +} + +void +lefiMacro::setFixedMask(int isFixedMask) +{ + isFixedMask_ = isFixedMask; +} + +int +lefiMacro::isFixedMask() const +{ + return isFixedMask_; +} + +void +lefiMacro::addForeign(const char *name, + int hasPnt, + double x, + double y, + int orient) +{ + int i; + int *hfo; + int *hfp; + int *fo; + double *fx; + double *fy; + char **f; + + if (foreignAllocated_ == numForeigns_) { + if (foreignAllocated_ == 0) + foreignAllocated_ = 16; // since it involves char*, it will + // costly in the number is too small + else + foreignAllocated_ *= 2; + hfo = (int*) lefMalloc(sizeof(int) * foreignAllocated_); + hfp = (int*) lefMalloc(sizeof(int) * foreignAllocated_); + fo = (int*) lefMalloc(sizeof(int) * foreignAllocated_); + fx = (double*) lefMalloc(sizeof(double) * foreignAllocated_); + fy = (double*) lefMalloc(sizeof(double) * foreignAllocated_); + f = (char**) lefMalloc(sizeof(char*) * foreignAllocated_); + if (numForeigns_ != 0) { + for (i = 0; i < numForeigns_; i++) { + hfo[i] = hasForeignOrigin_[i]; + hfp[i] = hasForeignPoint_[i]; + fo[i] = foreignOrient_[i]; + fx[i] = foreignX_[i]; + fy[i] = foreignY_[i]; + f[i] = foreign_[i]; + } + lefFree((char*) (hasForeignOrigin_)); + lefFree((char*) (hasForeignPoint_)); + lefFree((char*) (foreignOrient_)); + lefFree((char*) (foreignX_)); + lefFree((char*) (foreignY_)); + lefFree((char*) (foreign_)); + } + hasForeignOrigin_ = hfo; + hasForeignPoint_ = hfp; + foreignOrient_ = fo; + foreignX_ = fx; + foreignY_ = fy; + foreign_ = f; + } + + // orient=-1 means no orient was specified. + hasForeignOrigin_[numForeigns_] = orient; + hasForeignPoint_[numForeigns_] = hasPnt; + foreignOrient_[numForeigns_] = orient; + foreignX_[numForeigns_] = x; + foreignY_[numForeigns_] = y; + foreign_[numForeigns_] = (char*) lefMalloc(strlen(name) + 1); + strcpy(foreign_[numForeigns_], CASE(name)); + numForeigns_ += 1; + +} + + +void +lefiMacro::setXSymmetry() +{ + hasSymmetry_ |= 1; +} + +void +lefiMacro::setYSymmetry() +{ + hasSymmetry_ |= 2; +} + +void +lefiMacro::set90Symmetry() +{ + hasSymmetry_ |= 4; +} + +void +lefiMacro::setSiteName(const char *name) +{ + int len = strlen(name) + 1; + if (len > siteNameSize_) + bump(&(siteName_), len, &(siteNameSize_)); + strcpy(siteName_, CASE(name)); + hasSiteName_ = 1; +} + +void +lefiMacro::setClockType(const char *name) +{ + int len = strlen(name) + 1; + if (len > clockTypeSize_) + bump(&(clockType_), len, &(clockTypeSize_)); + strcpy(clockType_, CASE(name)); + hasClockType_ = 1; +} + +void +lefiMacro::setSitePattern(lefiSitePattern *p) +{ + if (numSites_ == sitesAllocated_) { + lefiSitePattern **np; + int i, lim; + if (sitesAllocated_ == 0) { + lim = sitesAllocated_ = 4; + np = (lefiSitePattern**) lefMalloc(sizeof(lefiSitePattern*) * lim); + } else { + lim = sitesAllocated_ * 2; + sitesAllocated_ = lim; + np = (lefiSitePattern**) lefMalloc(sizeof(lefiSitePattern*) * lim); + lim /= 2; + for (i = 0; i < lim; i++) + np[i] = pattern_[i]; + lefFree((char*) (pattern_)); + } + pattern_ = np; + } + pattern_[numSites_] = p; + numSites_ += 1; +} + +void +lefiMacro::setSize(double x, + double y) +{ + hasSize_ = 1; + sizeX_ = x; + sizeY_ = y; +} + + +int +lefiMacro::hasClass() const +{ + return hasClass_; +} + +int +lefiMacro::hasSiteName() const +{ + return hasSiteName_; +} + +int +lefiMacro::hasGenerator() const +{ + return hasGenerator_; +} + +int +lefiMacro::hasGenerate() const +{ + return hasGenerate_; +} + +int +lefiMacro::hasPower() const +{ + return hasPower_; +} + +int +lefiMacro::hasOrigin() const +{ + return hasOrigin_; +} + +int +lefiMacro::hasSource() const +{ + return hasSource_; +} + +int +lefiMacro::hasEEQ() const +{ + return hasEEQ_; +} + +int +lefiMacro::hasLEQ() const +{ + return hasLEQ_; +} + +int +lefiMacro::hasXSymmetry() const +{ + return (hasSymmetry_ & 1) ? 1 : 0; +} + +int +lefiMacro::hasYSymmetry() const +{ + return (hasSymmetry_ & 2) ? 1 : 0; +} + +int +lefiMacro::has90Symmetry() const +{ + return (hasSymmetry_ & 4) ? 1 : 0; +} + +int +lefiMacro::hasSitePattern() const +{ + return (pattern_) ? 1 : 0; +} + +int +lefiMacro::hasSize() const +{ + return hasSize_; +} + +int +lefiMacro::hasForeign() const +{ + return (numForeigns_) ? 1 : 0; +} + +int +lefiMacro::hasForeignOrigin(int index) const +{ + return hasForeignOrigin_[index]; +} + +int +lefiMacro::hasForeignOrient(int index) const +{ + return (foreignOrient_[index] == -1) ? 0 : 1; +} + +int +lefiMacro::hasForeignPoint(int index) const +{ + return hasForeignPoint_[index]; +} + +int +lefiMacro::hasClockType() const +{ + return hasClockType_; +} + +int +lefiMacro::numSitePattern() const +{ + return numSites_; +} + +int +lefiMacro::numProperties() const +{ + return numProperties_; +} + +const char * +lefiMacro::propName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propNames_[index]; +} + +const char * +lefiMacro::propValue(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propValues_[index]; +} + +double +lefiMacro::propNum(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propNums_[index]; +} + +const char +lefiMacro::propType(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propTypes_[index]; +} + +int +lefiMacro::propIsNumber(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propNums_[index] ? 1 : 0; +} + +int +lefiMacro::propIsString(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProperties_) { + sprintf(msg, "ERROR (LEFPARS-1352): The index number %d given for the macro property is invalid.\nValid index is from 0 to %d", index, numProperties_); + lefiError(0, 1352, msg); + return 0; + } + return propNums_[index] ? 0 : 1; +} + +const char * +lefiMacro::name() const +{ + return name_; +} + +const char * +lefiMacro::macroClass() const +{ + return macroClass_; +} + +const char * +lefiMacro::generator() const +{ + return generator_; +} + +const char * +lefiMacro::EEQ() const +{ + return EEQ_; +} + +const char * +lefiMacro::LEQ() const +{ + return LEQ_; +} + +const char * +lefiMacro::source() const +{ + return source_; +} + +double +lefiMacro::originX() const +{ + return originX_; +} + +double +lefiMacro::originY() const +{ + return originY_; +} + +double +lefiMacro::power() const +{ + return power_; +} + +void +lefiMacro::generate(char **name1, + char **name2) const +{ + if (name1) + *name1 = gen1_; + if (name2) + *name2 = gen2_; +} + +lefiSitePattern * +lefiMacro::sitePattern(int index) const +{ + return pattern_[index]; +} + +const char * +lefiMacro::siteName() const +{ + return siteName_; +} + +double +lefiMacro::sizeX() const +{ + return sizeX_; +} + +double +lefiMacro::sizeY() const +{ + return sizeY_; +} + +int +lefiMacro::numForeigns() const +{ + return numForeigns_; +} + +int +lefiMacro::foreignOrient(int index) const +{ + return foreignOrient_[index]; +} + +const char * +lefiMacro::foreignOrientStr(int index) const +{ + return (lefiOrientStr(foreignOrient_[index])); +} + +double +lefiMacro::foreignX(int index) const +{ + return foreignX_[index]; +} + +double +lefiMacro::foreignY(int index) const +{ + return foreignY_[index]; +} + +const char * +lefiMacro::foreignName(int index) const +{ + return foreign_[index]; +} + +const char * +lefiMacro::clockType() const +{ + return clockType_; +} + +int +lefiMacro::isBuffer() const +{ + return isBuffer_; +} + +int +lefiMacro::isInverter() const +{ + return isInverter_; +} + +void +lefiMacro::print(FILE *f) const +{ + char *c1; + char *c2; + lefiSitePattern *sp; + int i; + + fprintf(f, "MACRO %s\n", name()); + + if (hasClass()) + fprintf(f, " Class %s\n", macroClass()); + + if (hasGenerator()) + fprintf(f, " Generator %s\n", generator()); + + if (hasGenerator()) { + generate(&c1, &c2); + fprintf(f, " Generate %s %s\n", c1, c2); + } + + if (hasPower()) + fprintf(f, " Power %g\n", power()); + + if (hasOrigin()) + fprintf(f, " Origin %g,%g\n", originX(), + originY()); + + if (hasEEQ()) + fprintf(f, " EEQ %s\n", EEQ()); + + if (hasLEQ()) + fprintf(f, " LEQ %s\n", LEQ()); + + if (hasSource()) + fprintf(f, " Source %s\n", source()); + + if (hasXSymmetry()) + fprintf(f, " Symmetry X\n"); + + if (hasYSymmetry()) + fprintf(f, " Symmetry Y\n"); + + if (has90Symmetry()) + fprintf(f, " Symmetry R90\n"); + + if (hasSiteName()) + fprintf(f, " Site name %s\n", siteName()); + + if (hasSitePattern()) { + for (i = 0; i < numSitePattern(); i++) { + sp = sitePattern(i); + fprintf(f, " Site pattern "); + sp->print(f); + } + } + + if (hasSize()) + fprintf(f, " Size %g,%g\n", sizeX(), + sizeY()); + + if (hasForeign()) { + for (i = 0; i < numForeigns(); i++) { + fprintf(f, " Foreign %s", foreignName(i)); + if (hasForeignOrigin(i)) + fprintf(f, " %g,%g", foreignX(i), + foreignY(i)); + if (hasForeignOrient(i)) + fprintf(f, " orient %s", foreignOrientStr(i)); + fprintf(f, "\n"); + } + } + + if (hasClockType()) + fprintf(f, " Clock type %s\n", clockType()); + + fprintf(f, "END MACRO %s\n", name()); +} + +// ***************************************************************************** +// lefiTiming +// ***************************************************************************** + +lefiTiming::lefiTiming() +: numFrom_(0), + from_(NULL), + fromAllocated_(0), + numTo_(0), + to_(NULL), + toAllocated_(0), + hasTransition_(0), + hasDelay_(0), + hasRiseSlew_(0), + hasRiseSlew2_(0), + hasFallSlew_(0), + hasFallSlew2_(0), + hasRiseIntrinsic_(0), + hasFallIntrinsic_(0), + hasRiseRS_(0), + hasRiseCS_(0), + hasFallRS_(0), + hasFallCS_(0), + hasUnateness_(0), + hasFallAtt1_(0), + hasRiseAtt1_(0), + hasFallTo_(0), + hasRiseTo_(0), + hasStableTiming_(0), + hasSDFonePinTrigger_(0), + hasSDFtwoPinTrigger_(0), + hasSDFcondStart_(0), + hasSDFcondEnd_(0), + hasSDFcond_(0), + nowRise_(0), + numOfAxisNumbers_(0), + axisNumbers_(NULL), + axisNumbersAllocated_(0), + numOfTableEntries_(0), + tableEntriesAllocated_(0), + table_(NULL), // three numbers per entry + delayRiseOrFall_(NULL), + delayUnateness_(NULL), + delayTableOne_(0.0), + delayTableTwo_(0.0), + delayTableThree_(0.0), + transitionRiseOrFall_(NULL), + transitionUnateness_(NULL), + transitionTableOne_(0.0), + transitionTableTwo_(0.0), + transitionTableThree_(0.0), + riseIntrinsicOne_(0.0), + riseIntrinsicTwo_(0.0), + riseIntrinsicThree_(0.0), + riseIntrinsicFour_(0.0), + fallIntrinsicOne_(0.0), + fallIntrinsicTwo_(0.0), + fallIntrinsicThree_(0.0), + fallIntrinsicFour_(0.0), + riseSlewOne_(0.0), + riseSlewTwo_(0.0), + riseSlewThree_(0.0), + riseSlewFour_(0.0), + riseSlewFive_(0.0), + riseSlewSix_(0.0), + riseSlewSeven_(0.0), + fallSlewOne_(0.0), + fallSlewTwo_(0.0), + fallSlewThree_(0.0), + fallSlewFour_(0.0), + fallSlewFive_(0.0), + fallSlewSix_(0.0), + fallSlewSeven_(0.0), + riseRSOne_(0.0), + riseRSTwo_(0.0), + riseCSOne_(0.0), + riseCSTwo_(0.0), + fallRSOne_(0.0), + fallRSTwo_(0.0), + fallCSOne_(0.0), + fallCSTwo_(0.0), + unateness_(NULL), + riseAtt1One_(0.0), + riseAtt1Two_(0.0), + fallAtt1One_(0.0), + fallAtt1Two_(0.0), + fallToOne_(0.0), + fallToTwo_(0.0), + riseToOne_(0.0), + riseToTwo_(0.0), + stableSetup_(0.0), + stableHold_(0.0), + stableRiseFall_(NULL), + SDFtriggerType_(NULL), + SDFfromTrigger_(NULL), + SDFtoTrigger_(NULL), + SDFtriggerTableOne_(0.0), + SDFtriggerTableTwo_(0.0), + SDFtriggerTableThree_(0.0), + SDFcondStart_(NULL), + SDFcondEnd_(NULL), + SDFcond_(NULL) +{ + Init(); +} + +void +lefiTiming::Init() +{ + numFrom_ = 0; + from_ = (char**) lefMalloc(sizeof(char*)); + fromAllocated_ = 1; + numTo_ = 0; + to_ = (char**) lefMalloc(sizeof(char*)); + toAllocated_ = 1; + + numOfAxisNumbers_ = 0; + axisNumbers_ = (double*) lefMalloc(sizeof(double)); + axisNumbersAllocated_ = 1; + + numOfTableEntries_ = 0; + tableEntriesAllocated_ = 1; + table_ = (double*) lefMalloc(sizeof(double) * 3); // three numbers per entry + + clear(); +} + +void +lefiTiming::Destroy() +{ + clear(); + lefFree((char*) (from_)); + lefFree((char*) (to_)); + lefFree((char*) (axisNumbers_)); + lefFree((char*) (table_)); +} + +lefiTiming::~lefiTiming() +{ + Destroy(); +} + +void +lefiTiming::addRiseFall(const char *risefall, + double one, + double two) +{ + if (*risefall == 'r' || *risefall == 'R') { + hasRiseIntrinsic_ = 1; + nowRise_ = 1; + riseIntrinsicOne_ = one; + riseIntrinsicTwo_ = two; + } else { + nowRise_ = 0; + hasFallIntrinsic_ = 1; + fallIntrinsicOne_ = one; + fallIntrinsicTwo_ = two; + } +} + +void +lefiTiming::addRiseFallVariable(double one, + double two) +{ + if (nowRise_ == 1) { + riseIntrinsicThree_ = one; + riseIntrinsicFour_ = two; + } else { + fallIntrinsicThree_ = one; + fallIntrinsicFour_ = two; + } +} + +void +lefiTiming::setRiseRS(double one, + double two) +{ + hasRiseRS_ = 1; + riseRSOne_ = one; + riseRSTwo_ = two; +} + +void +lefiTiming::setFallRS(double one, + double two) +{ + hasFallRS_ = 1; + fallRSOne_ = one; + fallRSTwo_ = two; +} + +void +lefiTiming::setRiseCS(double one, + double two) +{ + hasRiseCS_ = 1; + riseCSOne_ = one; + riseCSTwo_ = two; +} + +void +lefiTiming::setFallCS(double one, + double two) +{ + hasFallCS_ = 1; + fallCSOne_ = one; + fallCSTwo_ = two; +} + +void +lefiTiming::setRiseAtt1(double one, + double two) +{ + hasRiseAtt1_ = 1; + riseAtt1One_ = one; + riseAtt1Two_ = two; +} + +void +lefiTiming::setFallAtt1(double one, + double two) +{ + hasFallAtt1_ = 1; + fallAtt1One_ = one; + fallAtt1Two_ = two; +} + +void +lefiTiming::setRiseTo(double one, + double two) +{ + hasRiseTo_ = 1; + riseToOne_ = one; + riseToTwo_ = two; +} + +void +lefiTiming::setFallTo(double one, + double two) +{ + hasFallTo_ = 1; + fallToOne_ = one; + fallToTwo_ = two; +} + +void +lefiTiming::addUnateness(const char *typ) +{ + hasUnateness_ = 1; + unateness_ = (char*) typ; +} + +void +lefiTiming::setStable(double one, + double two, + const char *typ) +{ + hasStableTiming_ = 1; + stableSetup_ = one; + stableHold_ = two; + stableRiseFall_ = (char*) typ; +} + +void +lefiTiming::addTableEntry(double one, + double two, + double three) +{ + int i; + double *n; + if (numOfTableEntries_ >= tableEntriesAllocated_) { + int lim; + + if (tableEntriesAllocated_ == 0) + lim = tableEntriesAllocated_ = 2; + else + lim = tableEntriesAllocated_ *= 2; + n = (double*) lefMalloc(sizeof(double) * 3 * lim); + lim = numOfTableEntries_ * 3; + for (i = 0; i < lim; i++) { + n[i] = table_[i]; + } + lefFree((char*) (table_)); + table_ = n; + } + i = numOfTableEntries_ * 3; + table_[i++] = one; + table_[i++] = two; + table_[i] = three; + numOfTableEntries_ += 1; +} + +void +lefiTiming::addTableAxisNumber(double one) +{ + if (numOfAxisNumbers_ == axisNumbersAllocated_) { + int i; + int lim; + double *n; + + if (axisNumbersAllocated_ == 0) + lim = axisNumbersAllocated_ = 2; + else + lim = axisNumbersAllocated_ *= 2; + n = (double*) lefMalloc(sizeof(double) * lim); + lim = numOfAxisNumbers_; + for (i = 0; i < lim; i++) + n[i] = axisNumbers_[i]; + if (axisNumbersAllocated_ > 2) + lefFree((char*) (axisNumbers_)); + axisNumbers_ = n; + } + axisNumbers_[(numOfAxisNumbers_)++] = one; +} + +void +lefiTiming::addRiseFallSlew(double one, + double two, + double three, + double four) +{ + if (nowRise_) { + hasRiseSlew_ = 1; + riseSlewOne_ = one; + riseSlewTwo_ = two; + riseSlewThree_ = three; + riseSlewFour_ = four; + } else { + hasFallSlew_ = 1; + fallSlewOne_ = one; + fallSlewTwo_ = two; + fallSlewThree_ = three; + fallSlewFour_ = four; + } +} + +void +lefiTiming::addRiseFallSlew2(double one, + double two, + double three) +{ + if (nowRise_) { + hasRiseSlew2_ = 1; + riseSlewFive_ = one; + riseSlewSix_ = two; + riseSlewSeven_ = three; + } else { + hasFallSlew2_ = 1; + fallSlewFive_ = one; + fallSlewSix_ = two; + fallSlewSeven_ = three; + } +} + +void +lefiTiming::addFromPin(const char *name) +{ + if (numFrom_ == fromAllocated_) { + int lim; + int i; + char **n; + + if (fromAllocated_ == 0) + lim = fromAllocated_ = 2; + else + lim = fromAllocated_ *= 2; + n = (char**) lefMalloc(sizeof(char*) * lim); + lim = numFrom_; + for (i = 0; i < lim; i++) + n[i] = from_[i]; + lefFree((char*) (from_)); + from_ = n; + } + from_[(numFrom_)++] = (char*) name; +} + +void +lefiTiming::addToPin(const char *name) +{ + if (numTo_ == toAllocated_) { + int lim; + int i; + char **n; + + if (toAllocated_ == 0) + lim = toAllocated_ = 2; + else + lim = toAllocated_ *= 2; + n = (char**) lefMalloc(sizeof(char*) * lim); + lim = numTo_; + for (i = 0; i < lim; i++) + n[i] = to_[i]; + lefFree((char*) (to_)); + to_ = n; + } + to_[(numTo_)++] = (char*) name; +} + +void +lefiTiming::addDelay(const char *risefall, + const char *unateness, + double one, + double two, + double three) +{ + hasDelay_ = 1; + delayRiseOrFall_ = (char*) risefall; + delayUnateness_ = (char*) unateness; + delayTableOne_ = one; + delayTableTwo_ = two; + delayTableThree_ = three; +} + +void +lefiTiming::addTransition(const char *risefall, + const char *unateness, + double one, + double two, + double three) +{ + hasTransition_ = 1; + transitionRiseOrFall_ = (char*) risefall; + transitionUnateness_ = (char*) unateness; + transitionTableOne_ = one; + transitionTableTwo_ = two; + transitionTableThree_ = three; +} + +void +lefiTiming::addSDF1Pin(const char *trigType, + double one, + double two, + double three) +{ + hasSDFonePinTrigger_ = 1; + SDFtriggerType_ = (char*) trigType; + SDFtriggerTableOne_ = one; + SDFtriggerTableTwo_ = two; + SDFtriggerTableThree_ = three; +} + +void +lefiTiming::addSDF2Pins(const char *trigType, + const char *fromTrig, + const char *toTrig, + double one, + double two, + double three) +{ + hasSDFtwoPinTrigger_ = 1; + SDFtriggerType_ = (char*) trigType; + SDFfromTrigger_ = (char*) fromTrig; + SDFtoTrigger_ = (char*) toTrig; + SDFtriggerTableOne_ = one; + SDFtriggerTableTwo_ = two; + SDFtriggerTableThree_ = three; +} + +void +lefiTiming::setSDFcondStart(const char *condStart) +{ + SDFcondStart_ = (char*) condStart; +} + +void +lefiTiming::setSDFcondEnd(const char *condEnd) +{ + SDFcondEnd_ = (char*) condEnd; +} + +void +lefiTiming::setSDFcond(const char *cond) +{ + SDFcond_ = (char*) cond; +} + +int +lefiTiming::hasData() +{ + return ((numFrom_) ? 1 : 0); +} + +void +lefiTiming::clear() +{ + numFrom_ = 0; + numTo_ = 0; + numOfAxisNumbers_ = 0; + numOfTableEntries_ = 0; + + nowRise_ = 0; + hasTransition_ = 0; + hasDelay_ = 0; + hasFallSlew_ = 0; + hasFallSlew2_ = 0; + hasRiseSlew_ = 0; + hasRiseSlew2_ = 0; + hasRiseIntrinsic_ = 0; + hasFallIntrinsic_ = 0; + hasRiseSlew_ = 0; + hasFallSlew_ = 0; + hasRiseSlew2_ = 0; + hasFallSlew2_ = 0; + hasRiseRS_ = 0; + hasRiseCS_ = 0; + hasFallRS_ = 0; + hasFallCS_ = 0; + hasUnateness_ = 0; + hasFallAtt1_ = 0; + hasRiseAtt1_ = 0; + hasFallTo_ = 0; + hasRiseTo_ = 0; + hasStableTiming_ = 0; + hasSDFonePinTrigger_ = 0; + hasSDFtwoPinTrigger_ = 0; + hasSDFcondStart_ = 0; + hasSDFcondEnd_ = 0; + hasSDFcond_ = 0; +} + +int +lefiTiming::numFromPins() +{ + return numFrom_; +} + +const char * +lefiTiming::fromPin(int index) +{ + return from_[index]; +} + +int +lefiTiming::numToPins() +{ + return numTo_; +} + +const char * +lefiTiming::toPin(int index) +{ + return to_[index]; +} + +int +lefiTiming::hasTransition() +{ + return hasTransition_; +} + +int +lefiTiming::hasDelay() +{ + return hasDelay_; +} + +int +lefiTiming::hasRiseSlew() +{ + return hasRiseSlew_; +} + +int +lefiTiming::hasRiseSlew2() +{ + return hasRiseSlew2_; +} + +int +lefiTiming::hasFallSlew() +{ + return hasFallSlew_; +} + +int +lefiTiming::hasFallSlew2() +{ + return hasFallSlew2_; +} + +int +lefiTiming::hasRiseIntrinsic() +{ + return hasRiseIntrinsic_; +} + +int +lefiTiming::hasFallIntrinsic() +{ + return hasFallIntrinsic_; +} + +int +lefiTiming::hasSDFonePinTrigger() +{ + return hasSDFonePinTrigger_; +} + +int +lefiTiming::hasSDFtwoPinTrigger() +{ + return hasSDFtwoPinTrigger_; +} + +int +lefiTiming::hasSDFcondStart() +{ + return hasSDFcondStart_; +} + +int +lefiTiming::hasSDFcondEnd() +{ + return hasSDFcondEnd_; +} + +int +lefiTiming::hasSDFcond() +{ + return hasSDFcond_; +} + +int +lefiTiming::numOfAxisNumbers() +{ + return numOfAxisNumbers_; +} + +double * +lefiTiming::axisNumbers() +{ + return axisNumbers_; +} + +int +lefiTiming::numOfTableEntries() +{ + return numOfTableEntries_; +} + +void +lefiTiming::tableEntry(int num, + double *one, + double *two, + double *three) +{ + num *= 3; + *one = table_[num]; + num++; + *two = table_[num]; + num++; + *three = table_[num]; +} + +const char * +lefiTiming::delayRiseOrFall() +{ + return delayRiseOrFall_; +} + +const char * +lefiTiming::delayUnateness() +{ + return delayUnateness_; +} + +double +lefiTiming::delayTableOne() +{ + return delayTableOne_; +} + +double +lefiTiming::delayTableTwo() +{ + return delayTableTwo_; +} + +double +lefiTiming::delayTableThree() +{ + return delayTableThree_; +} + +const char * +lefiTiming::transitionRiseOrFall() +{ + return transitionRiseOrFall_; +} + +const char * +lefiTiming::transitionUnateness() +{ + return transitionUnateness_; +} + +double +lefiTiming::transitionTableOne() +{ + return transitionTableOne_; +} + +double +lefiTiming::transitionTableTwo() +{ + return transitionTableTwo_; +} + +double +lefiTiming::transitionTableThree() +{ + return transitionTableThree_; +} + +double +lefiTiming::riseIntrinsicOne() +{ + return riseIntrinsicOne_; +} + +double +lefiTiming::riseIntrinsicTwo() +{ + return riseIntrinsicTwo_; +} + +double +lefiTiming::riseIntrinsicThree() +{ + return riseIntrinsicThree_; +} + +double +lefiTiming::riseIntrinsicFour() +{ + return riseIntrinsicFour_; +} + +double +lefiTiming::fallIntrinsicOne() +{ + return fallIntrinsicOne_; +} + +double +lefiTiming::fallIntrinsicTwo() +{ + return fallIntrinsicTwo_; +} + +double +lefiTiming::fallIntrinsicThree() +{ + return fallIntrinsicThree_; +} + +double +lefiTiming::fallIntrinsicFour() +{ + return fallIntrinsicFour_; +} + +double +lefiTiming::riseSlewOne() +{ + return riseSlewOne_; +} + +double +lefiTiming::riseSlewTwo() +{ + return riseSlewTwo_; +} + +double +lefiTiming::riseSlewThree() +{ + return riseSlewThree_; +} + +double +lefiTiming::riseSlewFour() +{ + return riseSlewFour_; +} + +double +lefiTiming::riseSlewFive() +{ + return riseSlewFive_; +} + +double +lefiTiming::riseSlewSix() +{ + return riseSlewSix_; +} + +double +lefiTiming::riseSlewSeven() +{ + return riseSlewSeven_; +} + +double +lefiTiming::fallSlewOne() +{ + return fallSlewOne_; +} + +double +lefiTiming::fallSlewTwo() +{ + return fallSlewTwo_; +} + +double +lefiTiming::fallSlewThree() +{ + return fallSlewThree_; +} + +double +lefiTiming::fallSlewFour() +{ + return fallSlewFour_; +} + +double +lefiTiming::fallSlewFive() +{ + return fallSlewFive_; +} + +double +lefiTiming::fallSlewSix() +{ + return fallSlewSix_; +} + +double +lefiTiming::fallSlewSeven() +{ + return fallSlewSeven_; +} + +int +lefiTiming::hasRiseRS() +{ + return hasRiseRS_; +} + +double +lefiTiming::riseRSOne() +{ + return riseRSOne_; +} + +double +lefiTiming::riseRSTwo() +{ + return riseRSTwo_; +} + +int +lefiTiming::hasRiseCS() +{ + return hasRiseCS_; +} + +double +lefiTiming::riseCSOne() +{ + return riseCSOne_; +} + +double +lefiTiming::riseCSTwo() +{ + return riseCSTwo_; +} + +int +lefiTiming::hasFallRS() +{ + return hasFallRS_; +} + +double +lefiTiming::fallRSOne() +{ + return fallRSOne_; +} + +double +lefiTiming::fallRSTwo() +{ + return fallRSTwo_; +} + +int +lefiTiming::hasFallCS() +{ + return hasFallCS_; +} + +double +lefiTiming::fallCSOne() +{ + return fallCSOne_; +} + +double +lefiTiming::fallCSTwo() +{ + return fallCSTwo_; +} + +int +lefiTiming::hasUnateness() +{ + return hasUnateness_; +} + +const char * +lefiTiming::unateness() +{ + return unateness_; +} + +int +lefiTiming::hasFallAtt1() +{ + return hasFallAtt1_; +} + +double +lefiTiming::fallAtt1One() +{ + return fallAtt1One_; +} + +double +lefiTiming::fallAtt1Two() +{ + return fallAtt1Two_; +} + +int +lefiTiming::hasRiseAtt1() +{ + return hasRiseAtt1_; +} + +double +lefiTiming::riseAtt1One() +{ + return riseAtt1One_; +} + +double +lefiTiming::riseAtt1Two() +{ + return riseAtt1Two_; +} + +int +lefiTiming::hasFallTo() +{ + return hasFallTo_; +} + +double +lefiTiming::fallToOne() +{ + return fallToOne_; +} + +double +lefiTiming::fallToTwo() +{ + return fallToTwo_; +} + +int +lefiTiming::hasRiseTo() +{ + return hasRiseTo_; +} + +double +lefiTiming::riseToOne() +{ + return riseToOne_; +} + +double +lefiTiming::riseToTwo() +{ + return riseToTwo_; +} + +int +lefiTiming::hasStableTiming() +{ + return hasStableTiming_; +} + +double +lefiTiming::stableSetup() +{ + return stableSetup_; +} + +double +lefiTiming::stableHold() +{ + return stableHold_; +} + +const char * +lefiTiming::stableRiseFall() +{ + return stableRiseFall_; +} + +const char * +lefiTiming::SDFonePinTriggerType() +{ + return SDFtriggerType_; +} + +const char * +lefiTiming::SDFtwoPinTriggerType() +{ + return SDFtriggerType_; +} + +const char * +lefiTiming::SDFfromTrigger() +{ + return SDFfromTrigger_; +} + +const char * +lefiTiming::SDFtoTrigger() +{ + return SDFtoTrigger_; +} + +double +lefiTiming::SDFtriggerOne() +{ + return SDFtriggerTableOne_; +} + +double +lefiTiming::SDFtriggerTwo() +{ + return SDFtriggerTableTwo_; +} + +double +lefiTiming::SDFtriggerThree() +{ + return SDFtriggerTableThree_; +} + +const char * +lefiTiming::SDFcondStart() +{ + return SDFcondStart_; +} + +const char * +lefiTiming::SDFcondEnd() +{ + return SDFcondEnd_; +} + +const char * +lefiTiming::SDFcond() +{ + return SDFcond_; +} + +lefiMacroSite::lefiMacroSite(const char *name, + const lefiSitePattern *pattern) +: siteName_(name), + sitePattern_(pattern) +{ +} + +const char * +lefiMacroSite::siteName() const +{ + return siteName_; +} + +const lefiSitePattern * +lefiMacroSite::sitePattern() const +{ + return sitePattern_; +} + +lefiMacroForeign::lefiMacroForeign(const char *name, + int hasPts, + double x, + double y, + int hasOrient, + int orient) +: cellName_(name), + cellHasPts_(hasPts), + px_(x), + py_(y), + cellHasOrient_(hasOrient), + cellOrient_(orient) +{ +} + +const char * +lefiMacroForeign::cellName() const +{ + return cellName_; +} + +int +lefiMacroForeign::cellHasPts() const +{ + return cellHasPts_; +} + +double +lefiMacroForeign::px() const +{ + return px_; +} + +double +lefiMacroForeign::py() const +{ + return py_; +} + +int +lefiMacroForeign::cellHasOrient() const +{ + return cellHasOrient_; +} + +int +lefiMacroForeign::cellOrient() const +{ + return cellOrient_; +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiMacro.hpp b/lefdef/src/lef/lef/lefiMacro.hpp new file mode 100644 index 00000000..bcfcdceb --- /dev/null +++ b/lefdef/src/lef/lef/lefiMacro.hpp @@ -0,0 +1,939 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiMacro_h +#define lefiMacro_h + +#include +#include "lefiKRDefs.hpp" +#include "lefiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class lefiObstruction { +public: + lefiObstruction(); + void Init(); + + void Destroy(); + ~lefiObstruction(); + + void clear(); + void setGeometries(lefiGeometries* g); + + lefiGeometries* geometries() const; + + void print(FILE* f) const; + +protected: + + lefiGeometries* geometries_; +}; + +// 5.5 +class lefiPinAntennaModel { +public: + lefiPinAntennaModel(); + ~lefiPinAntennaModel(); + + void Init(); + void clear(); + void Destroy(); + + void setAntennaModel(int oxide); + void addAntennaGateArea(double value, const char* layer); + void addAntennaMaxAreaCar(double value, const char* layer); + void addAntennaMaxSideAreaCar(double value, const char* layer); + void addAntennaMaxCutCar(double value, const char* layer); + void setAntennaReturnFlag(int flag); + + int hasAntennaGateArea() const; + int hasAntennaMaxAreaCar() const; + int hasAntennaMaxSideAreaCar() const; + int hasAntennaMaxCutCar() const; + + char* antennaOxide() const; + + int numAntennaGateArea() const; + double antennaGateArea(int index) const; + const char* antennaGateAreaLayer(int index) const; + + int numAntennaMaxAreaCar() const; + double antennaMaxAreaCar(int index) const; + const char* antennaMaxAreaCarLayer(int index) const; + + int numAntennaMaxSideAreaCar() const; + double antennaMaxSideAreaCar(int index) const; + const char* antennaMaxSideAreaCarLayer(int index) const; + + int numAntennaMaxCutCar() const; + double antennaMaxCutCar(int index) const; + const char* antennaMaxCutCarLayer(int index) const; + + int hasReturn() const; + +protected: + char* oxide_; + int hasReturn_; + + int numAntennaGateArea_; + int antennaGateAreaAllocated_; + double* antennaGateArea_; + char** antennaGateAreaLayer_; + + int numAntennaMaxAreaCar_; + int antennaMaxAreaCarAllocated_; + double* antennaMaxAreaCar_; + char** antennaMaxAreaCarLayer_; + + int numAntennaMaxSideAreaCar_; + int antennaMaxSideAreaCarAllocated_; + double* antennaMaxSideAreaCar_; + char** antennaMaxSideAreaCarLayer_; + + int numAntennaMaxCutCar_; + int antennaMaxCutCarAllocated_; + double* antennaMaxCutCar_; + char** antennaMaxCutCarLayer_; +}; + +class lefiPin { +public: + lefiPin(); + void Init(); + + void Destroy(); + ~lefiPin(); + + void clear(); + void bump(char** array, int len, int* size); + void setName(const char* name); + void addPort(lefiGeometries* g); + void addForeign(const char* name, int hasPnt, double x, double y, int orient); + void setLEQ(const char* name); + void setDirection(const char* name); + void setUse(const char* name); + void setShape(const char* name); + void setMustjoin(const char* name); + void setOutMargin(double high, double low); + void setOutResistance(double high, double low); + void setInMargin(double high, double low); + void setPower(double power); + void setLeakage(double current); + void setMaxload(double capacitance); + void setMaxdelay(double delayTime); + void setCapacitance(double capacitance); + void setResistance(double resistance); + void setPulldownres(double resistance); + void setTieoffr(double resistance); + void setVHI(double voltage); + void setVLO(double voltage); + void setRiseVoltage(double voltage); + void setFallVoltage(double voltage); + void setRiseThresh(double capacitance); + void setFallThresh(double capacitance); + void setRiseSatcur(double current); + void setFallSatcur(double current); + void setCurrentSource(const char* name); + void setTables(const char* highName, const char* lowName); + void setProperty(const char* name, const char* value, const char type); + void setNumProperty(const char* name, double d, const char* value, + const char type); + void addAntennaModel(int oxide); // 5.5 + void addAntennaSize(double value, const char* layer); + void addAntennaMetalArea(double value, const char* layer); + void addAntennaMetalLength(double value, const char* layer); + void addAntennaPartialMetalArea(double value, const char* layer); + void addAntennaPartialMetalSideArea(double value, const char* layer); + void addAntennaGateArea(double value, const char* layer); + void addAntennaDiffArea(double value, const char* layer); + void addAntennaMaxAreaCar(double value, const char* layer); + void addAntennaMaxSideAreaCar(double value, const char* layer); + void addAntennaPartialCutArea(double value, const char* layer); + void addAntennaMaxCutCar(double value, const char* layer); + void setRiseSlewLimit(double value); + void setFallSlewLimit(double value); + void setTaperRule(const char* name); + void setNetExpr(const char* name); // 5.6 + void setSupplySensitivity(const char* pinName); // 5.6 + void setGroundSensitivity(const char* pinName); // 5.6 + void bumpProps(); + + int hasForeign() const; + int hasForeignOrient(int index = 0) const; + int hasForeignPoint(int index = 0) const; + int hasLEQ() const; + int hasDirection() const; + int hasUse() const; + int hasShape() const; + int hasMustjoin() const; + int hasOutMargin() const; + int hasOutResistance() const; + int hasInMargin() const; + int hasPower() const; + int hasLeakage() const; + int hasMaxload() const; + int hasMaxdelay() const; + int hasCapacitance() const; + int hasResistance() const; + int hasPulldownres() const; + int hasTieoffr() const; + int hasVHI() const; + int hasVLO() const; + int hasRiseVoltage() const; + int hasFallVoltage() const; + int hasRiseThresh() const; + int hasFallThresh() const; + int hasRiseSatcur() const; + int hasFallSatcur() const; + int hasCurrentSource() const; + int hasTables() const; + int hasAntennaSize() const; + int hasAntennaMetalArea() const; + int hasAntennaMetalLength() const; + int hasAntennaPartialMetalArea() const; + int hasAntennaPartialMetalSideArea() const; + int hasAntennaPartialCutArea() const; + int hasAntennaDiffArea() const; + int hasAntennaModel() const; // 5.5 + int hasTaperRule() const; + int hasRiseSlewLimit() const; + int hasFallSlewLimit() const; + int hasNetExpr() const; // 5.6 + int hasSupplySensitivity() const; // 5.6 + int hasGroundSensitivity() const; // 5.6 + + const char* name() const; + + int numPorts() const; + lefiGeometries* port(int index) const; + + int numForeigns() const; + const char* foreignName(int index = 0) const; + const char* taperRule() const; + int foreignOrient(int index = 0) const; + const char* foreignOrientStr(int index = 0) const; + double foreignX(int index = 0) const; + double foreignY(int index = 0) const; + const char* LEQ() const; + const char* direction() const; + const char* use() const; + const char* shape() const; + const char* mustjoin() const; + double outMarginHigh() const; + double outMarginLow() const; + double outResistanceHigh() const; + double outResistanceLow() const; + double inMarginHigh() const; + double inMarginLow() const; + double power() const; + double leakage() const; + double maxload() const; + double maxdelay() const; + double capacitance() const; + double resistance() const; + double pulldownres() const; + double tieoffr() const; + double VHI() const; + double VLO() const; + double riseVoltage() const; + double fallVoltage() const; + double riseThresh() const; + double fallThresh() const; + double riseSatcur() const; + double fallSatcur() const; + double riseSlewLimit() const; + double fallSlewLimit() const; + const char* currentSource() const; + const char* tableHighName() const; + const char* tableLowName() const; + + int numAntennaSize() const; + double antennaSize(int index) const; + const char* antennaSizeLayer(int index) const; + + int numAntennaMetalArea() const; + double antennaMetalArea(int index) const; + const char* antennaMetalAreaLayer(int index) const; + + int numAntennaMetalLength() const; + double antennaMetalLength(int index) const; + const char* antennaMetalLengthLayer(int index) const; + + int numAntennaPartialMetalArea() const; + double antennaPartialMetalArea(int index) const; + const char* antennaPartialMetalAreaLayer(int index) const; + + int numAntennaPartialMetalSideArea() const; + double antennaPartialMetalSideArea(int index) const; + const char* antennaPartialMetalSideAreaLayer(int index) const; + + int numAntennaPartialCutArea() const; + double antennaPartialCutArea(int index) const; + const char* antennaPartialCutAreaLayer(int index) const; + + int numAntennaDiffArea() const; + double antennaDiffArea(int index) const; + const char* antennaDiffAreaLayer(int index) const; + + // 5.6 + const char* netExpr() const; + const char* supplySensitivity() const; + const char* groundSensitivity() const; + + // 5.5 + int numAntennaModel() const; + lefiPinAntennaModel* antennaModel(int index) const; + + int numProperties() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNum(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + void print(FILE* f) const ; + +protected: + int nameSize_; + char* name_; + + char hasLEQ_; + char hasDirection_; + char hasUse_; + char hasShape_; + char hasMustjoin_; + char hasOutMargin_; + char hasOutResistance_; + char hasInMargin_; + char hasPower_; + char hasLeakage_; + char hasMaxload_; + char hasMaxdelay_; + char hasCapacitance_; + char hasResistance_; + char hasPulldownres_; + char hasTieoffr_; + char hasVHI_; + char hasVLO_; + char hasRiseVoltage_; + char hasFallVoltage_; + char hasRiseThresh_; + char hasFallThresh_; + char hasRiseSatcur_; + char hasFallSatcur_; + char hasCurrentSource_; + char hasTables_; + char hasAntennasize_; + char hasRiseSlewLimit_; + char hasFallSlewLimit_; + + int numForeigns_; + int foreignAllocated_; + int* hasForeignOrient_; + int* hasForeignPoint_; + int* foreignOrient_; + double* foreignX_; + double* foreignY_; + char** foreign_; + + int LEQSize_; + char* LEQ_; + int mustjoinSize_; + char* mustjoin_; + double outMarginH_; + double outMarginL_; + double outResistanceH_; + double outResistanceL_; + double inMarginH_; + double inMarginL_; + double power_; + double leakage_; + double maxload_; + double maxdelay_; + double capacitance_; + double resistance_; + double pulldownres_; + double tieoffr_; + double VHI_; + double VLO_; + double riseVoltage_; + double fallVoltage_; + double riseThresh_; + double fallThresh_; + double riseSatcur_; + double fallSatcur_; + int lowTableSize_; + char* lowTable_; + int highTableSize_; + char* highTable_; + double riseSlewLimit_; + double fallSlewLimit_; + + // 5.5 AntennaModel + int numAntennaModel_; + int antennaModelAllocated_; + int curAntennaModelIndex_; // save the current index of the antenna + lefiPinAntennaModel** antennaModel_; + + int numAntennaSize_; + int antennaSizeAllocated_; + double* antennaSize_; + char** antennaSizeLayer_; + + int numAntennaMetalArea_; + int antennaMetalAreaAllocated_; + double* antennaMetalArea_; + char** antennaMetalAreaLayer_; + + int numAntennaMetalLength_; + int antennaMetalLengthAllocated_; + double* antennaMetalLength_; + char** antennaMetalLengthLayer_; + + int numAntennaPartialMetalArea_; + int antennaPartialMetalAreaAllocated_; + double* antennaPartialMetalArea_; + char** antennaPartialMetalAreaLayer_; + + int numAntennaPartialMetalSideArea_; + int antennaPartialMetalSideAreaAllocated_; + double* antennaPartialMetalSideArea_; + char** antennaPartialMetalSideAreaLayer_; + + int numAntennaPartialCutArea_; + int antennaPartialCutAreaAllocated_; + double* antennaPartialCutArea_; + char** antennaPartialCutAreaLayer_; + + int numAntennaDiffArea_; + int antennaDiffAreaAllocated_; + double* antennaDiffArea_; + char** antennaDiffAreaLayer_; + + char* taperRule_; + + char* netEpxr_; + char* ssPinName_; + char* gsPinName_; + + char direction_[32]; + char use_[12]; + char shape_[12]; + char currentSource_[12]; + + int numProperties_; + int propertiesAllocated_; + char** propNames_; + char** propValues_; + double* propNums_; + char* propTypes_; + + int numPorts_; + int portsAllocated_; + lefiGeometries** ports_; +}; + +// 5.6 +class lefiDensity { +public: + lefiDensity(); + void Init(); + + void Destroy(); + ~lefiDensity(); + + void clear(); + void addLayer(const char* name); + void addRect(double x1, double y1, double x2, double y2, double value); + + int numLayer() const; + char* layerName(int index) const; + int numRects(int index) const; + lefiGeomRect getRect(int index, int rectIndex) const; + double densityValue(int index, int rectIndex) const; + + void print(FILE* f) const; + +protected: + int numLayers_; + int layersAllocated_; + char** layerName_; + int* numRects_; + int* rectsAllocated_; + struct lefiGeomRect** rects_; + double** densityValue_; +}; + +class lefiMacro { +public: + lefiMacro(); + void Init(); + + void Destroy(); + ~lefiMacro(); + + void clear(); + void bump(char** array, int len, int* size); + void setName(const char* name); + void setGenerator(const char* name); + void setGenerate(const char* name1, const char* name2); + void setPower(double d); + void setOrigin(double x, double y); + void setClass(const char* name); + void setSource(const char* name); + void setEEQ(const char* name); + void setLEQ(const char* name); + void setClockType(const char* name); + void setProperty(const char* name, const char* value, const char type); + void setNumProperty(const char* name, double d, const char* value, + const char type); + void bumpProps(); + + // orient=-1 means no orient was specified. + void addForeign(const char* name, int hasPnt, + double x, double y, int orient); + + void setXSymmetry(); + void setYSymmetry(); + void set90Symmetry(); + void setSiteName(const char* name); + void setSitePattern(lefiSitePattern* p); + void setSize(double x, double y); + void setBuffer(); + void setInverter(); + void setFixedMask(int isFixedMask = 0); + + int hasClass() const; + int hasGenerator() const; + int hasGenerate() const; + int hasPower() const; + int hasOrigin() const; + int hasEEQ() const; + int hasLEQ() const; + int hasSource() const; + int hasXSymmetry() const; + int hasYSymmetry() const; + int has90Symmetry() const; + int hasSiteName() const; + int hasSitePattern() const; + int hasSize() const; + int hasForeign() const; + int hasForeignOrigin(int index = 0) const; + int hasForeignOrient(int index = 0) const; + int hasForeignPoint(int index = 0) const; + int hasClockType() const; + int isBuffer() const; + int isInverter() const; + int isFixedMask() const; + + int numSitePattern() const; + int numProperties() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNum(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + const char* name() const; + const char* macroClass() const; + const char* generator() const; + const char* EEQ() const; + const char* LEQ() const; + const char* source() const; + const char* clockType() const; + double originX() const; + double originY() const; + double power() const; + void generate(char** name1, char** name2) const; + lefiSitePattern* sitePattern(int index) const; + const char* siteName() const; + double sizeX() const; + double sizeY() const; + int numForeigns() const; + int foreignOrient(int index = 0) const; + const char* foreignOrientStr(int index = 0) const; + double foreignX(int index = 0) const; + double foreignY(int index = 0) const; + const char* foreignName(int index = 0) const; + + // Debug print + void print(FILE* f) const; + +protected: + int nameSize_; + char* name_; + char macroClass_[32]; + char source_[12]; + + int generatorSize_; + char* generator_; + + char hasClass_; + char hasGenerator_; + char hasGenerate_; + char hasPower_; + char hasOrigin_; + char hasSource_; + char hasEEQ_; + char hasLEQ_; + char hasSymmetry_; // X=1 Y=2 R90=4 (can be combined) + char hasSiteName_; + char hasSize_; + char hasClockType_; + char isBuffer_; + char isInverter_; + + char* EEQ_; + int EEQSize_; + char* LEQ_; + int LEQSize_; + char* gen1_; + int gen1Size_; + char* gen2_; + int gen2Size_; + double power_; + double originX_; + double originY_; + double sizeX_; + double sizeY_; + + int numSites_; + int sitesAllocated_; + lefiSitePattern** pattern_; + + int numForeigns_; + int foreignAllocated_; + int* hasForeignOrigin_; + int* hasForeignPoint_; + int* foreignOrient_; + double* foreignX_; + double* foreignY_; + char** foreign_; + + int siteNameSize_; + char* siteName_; + + char* clockType_; + int clockTypeSize_; + + int numProperties_; + int propertiesAllocated_; + char** propNames_; + char** propValues_; + double* propNums_; + char* propTypes_; + + int isFixedMask_; +}; + +class lefiTiming { +public: + lefiTiming(); + void Init(); + + void Destroy(); + ~lefiTiming(); + + void addRiseFall(const char* risefall, double one, double two); + void addRiseFallVariable(double one, double two); + void addRiseFallSlew(double one, double two, double three, double four); + void addRiseFallSlew2(double one, double two, double three); + void setRiseRS(double one, double two); + void setFallRS(double one, double two); + void setRiseCS(double one, double two); + void setFallCS(double one, double two); + void setRiseAtt1(double one, double two); + void setFallAtt1(double one, double two); + void setRiseTo(double one, double two); + void setFallTo(double one, double two); + void addUnateness(const char* typ); + void setStable(double one, double two, const char* typ); + void addTableEntry(double one, double two, double three); + void addTableAxisNumber(double one); + void addFromPin(const char* name); + void addToPin(const char* name); + void addDelay(const char* risefall, const char* unateness, double one, + double two, double three); + void addTransition(const char* risefall, const char* unateness, double one, + double two, double three); + // addSDF2Pins & addSDF1Pin are for 5.1 + void addSDF2Pins(const char* trigType, const char* fromTrig, + const char* toTrig, double one, double two, double three); + void addSDF1Pin(const char* trigType, double one, double two, double three); + void setSDFcondStart(const char* condStart); + void setSDFcondEnd(const char* condEnd); + void setSDFcond(const char* cond); + int hasData(); + void clear(); + + int numFromPins(); + const char* fromPin(int index); + int numToPins(); + const char* toPin(int index); + int hasTransition(); + int hasDelay(); + int hasRiseSlew(); + int hasRiseSlew2(); + int hasFallSlew(); + int hasFallSlew2(); + int hasRiseIntrinsic(); + int hasFallIntrinsic(); + int numOfAxisNumbers(); + double* axisNumbers(); + int numOfTableEntries(); + void tableEntry(int num, double* one, double* two, double* three); + const char* delayRiseOrFall(); + const char* delayUnateness(); + double delayTableOne(); + double delayTableTwo(); + double delayTableThree(); + const char* transitionRiseOrFall(); + const char* transitionUnateness(); + double transitionTableOne(); + double transitionTableTwo(); + double transitionTableThree(); + double fallIntrinsicOne(); + double fallIntrinsicTwo(); + double fallIntrinsicThree(); + double fallIntrinsicFour(); + double riseIntrinsicOne(); + double riseIntrinsicTwo(); + double riseIntrinsicThree(); + double riseIntrinsicFour(); + double fallSlewOne(); + double fallSlewTwo(); + double fallSlewThree(); + double fallSlewFour(); + double fallSlewFive(); + double fallSlewSix(); + double fallSlewSeven(); + double riseSlewOne(); + double riseSlewTwo(); + double riseSlewThree(); + double riseSlewFour(); + double riseSlewFive(); + double riseSlewSix(); + double riseSlewSeven(); + int hasRiseRS(); + double riseRSOne(); + double riseRSTwo(); + int hasRiseCS(); + double riseCSOne(); + double riseCSTwo(); + int hasFallRS(); + double fallRSOne(); + double fallRSTwo(); + int hasFallCS(); + double fallCSOne(); + double fallCSTwo(); + int hasUnateness(); + const char* unateness(); + int hasRiseAtt1(); + double riseAtt1One(); + double riseAtt1Two(); + int hasFallAtt1(); + double fallAtt1One(); + double fallAtt1Two(); + int hasFallTo(); + double fallToOne(); + double fallToTwo(); + int hasRiseTo(); + double riseToOne(); + double riseToTwo(); + int hasStableTiming(); + double stableSetup(); + double stableHold(); + const char* stableRiseFall(); + // The following are for 5.1 + int hasSDFonePinTrigger(); + int hasSDFtwoPinTrigger(); + int hasSDFcondStart(); + int hasSDFcondEnd(); + int hasSDFcond(); + const char* SDFonePinTriggerType(); + const char* SDFtwoPinTriggerType(); + const char* SDFfromTrigger(); + const char* SDFtoTrigger(); + double SDFtriggerOne(); + double SDFtriggerTwo(); + double SDFtriggerThree(); + const char* SDFcondStart(); + const char* SDFcondEnd(); + const char* SDFcond(); + +protected: + int numFrom_; + char** from_; + int fromAllocated_; + int numTo_; + char** to_; + int toAllocated_; + + int hasTransition_; + int hasDelay_; + int hasRiseSlew_; + int hasRiseSlew2_; + int hasFallSlew_; + int hasFallSlew2_; + int hasRiseIntrinsic_; + int hasFallIntrinsic_; + int hasRiseRS_; + int hasRiseCS_; + int hasFallRS_; + int hasFallCS_; + int hasUnateness_; + int hasFallAtt1_; + int hasRiseAtt1_; + int hasFallTo_; + int hasRiseTo_; + int hasStableTiming_; + int hasSDFonePinTrigger_; + int hasSDFtwoPinTrigger_; + int hasSDFcondStart_; + int hasSDFcondEnd_; + int hasSDFcond_; + int nowRise_; + + int numOfAxisNumbers_; + double* axisNumbers_; + int axisNumbersAllocated_; + + int numOfTableEntries_; + int tableEntriesAllocated_; + double* table_; // three numbers per entry + + char* delayRiseOrFall_; + char* delayUnateness_; + double delayTableOne_; + double delayTableTwo_; + double delayTableThree_; + char* transitionRiseOrFall_; + char* transitionUnateness_; + double transitionTableOne_; + double transitionTableTwo_; + double transitionTableThree_; + double riseIntrinsicOne_; + double riseIntrinsicTwo_; + double riseIntrinsicThree_; + double riseIntrinsicFour_; + double fallIntrinsicOne_; + double fallIntrinsicTwo_; + double fallIntrinsicThree_; + double fallIntrinsicFour_; + double riseSlewOne_; + double riseSlewTwo_; + double riseSlewThree_; + double riseSlewFour_; + double riseSlewFive_; + double riseSlewSix_; + double riseSlewSeven_; + double fallSlewOne_; + double fallSlewTwo_; + double fallSlewThree_; + double fallSlewFour_; + double fallSlewFive_; + double fallSlewSix_; + double fallSlewSeven_; + double riseRSOne_; + double riseRSTwo_; + double riseCSOne_; + double riseCSTwo_; + double fallRSOne_; + double fallRSTwo_; + double fallCSOne_; + double fallCSTwo_; + char* unateness_; + double riseAtt1One_; + double riseAtt1Two_; + double fallAtt1One_; + double fallAtt1Two_; + double fallToOne_; + double fallToTwo_; + double riseToOne_; + double riseToTwo_; + double stableSetup_; + double stableHold_; + char* stableRiseFall_; + char* SDFtriggerType_; + char* SDFfromTrigger_; + char* SDFtoTrigger_; + double SDFtriggerTableOne_; + double SDFtriggerTableTwo_; + double SDFtriggerTableThree_; + char* SDFcondStart_; + char* SDFcondEnd_; + char* SDFcond_; +}; + +// 5.8 +class lefiMacroSite { +public: + lefiMacroSite(const char *name, const lefiSitePattern* pattern); + + const char *siteName() const; + const lefiSitePattern *sitePattern() const; + +protected: + const char *siteName_; + const lefiSitePattern *sitePattern_; +}; + +class lefiMacroForeign { +public: + lefiMacroForeign(const char *name, + int hasPts, + double x, + double y, + int hasOrient, + int orient); + + const char *cellName() const; + int cellHasPts() const; + double px() const; + double py() const; + int cellHasOrient() const; + int cellOrient() const; + +protected: + const char *cellName_; + int cellHasPts_; + double px_; + double py_; + int cellHasOrient_; + int cellOrient_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiMisc.cpp b/lefdef/src/lef/lef/lefiMisc.cpp new file mode 100644 index 00000000..bb914ef5 --- /dev/null +++ b/lefdef/src/lef/lef/lefiMisc.cpp @@ -0,0 +1,1867 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include "lefiMisc.hpp" +#include +#include +#include "lex.h" +#include "lefiDebug.hpp" +#include "lefiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ***************************************************************************** +// lefiGeometries +// ***************************************************************************** + +lefiGeometries::lefiGeometries() +{ + Init(); +} + +void +lefiGeometries::Init() +{ + itemsAllocated_ = 2; + numItems_ = 0; + itemType_ = (lefiGeomEnum*) lefMalloc(sizeof(lefiGeomEnum) * 2); + items_ = (void**) lefMalloc(sizeof(void*) * 2); + numPoints_ = 0; + pointsAllocated_ = 0; + x_ = 0; + y_ = 0; + xStart_ = -1; + yStart_ = -1; + xStep_ = -1; + yStep_ = -1; +} + +void +lefiGeometries::Destroy() +{ + clear(); + lefFree((char*) (items_)); + lefFree((char*) (itemType_)); + if (x_) { + lefFree((double*) (x_)); + lefFree((double*) (y_)); + } + pointsAllocated_ = 0; +} + +lefiGeometries::~lefiGeometries() +{ + Destroy(); +} + +void +lefiGeometries::clear() +{ + for (int i = 0; i < numItems_; i++) { + if (itemType_[i] == lefiGeomViaE) { + lefFree(((lefiGeomVia*) (items_[i]))->name); + } + if (itemType_[i] == lefiGeomViaIterE) { + lefFree(((lefiGeomViaIter*) (items_[i]))->name); + } + if (itemType_[i] == lefiGeomPathE) { + ((lefiGeomPath*) (items_[i]))->numPoints = 0; + lefFree((double*) ((lefiGeomPath*) items_[i])->x); + lefFree((double*) ((lefiGeomPath*) items_[i])->y); + } + if (itemType_[i] == lefiGeomPathIterE) { + ((lefiGeomPathIter*) (items_[i]))->numPoints = 0; + lefFree((double*) ((lefiGeomPathIter*) items_[i])->x); + lefFree((double*) ((lefiGeomPathIter*) items_[i])->y); + } + if (itemType_[i] == lefiGeomPolygonE) { + ((lefiGeomPolygon*) (items_[i]))->numPoints = 0; + lefFree((double*) ((lefiGeomPolygon*) items_[i])->x); + lefFree((double*) ((lefiGeomPolygon*) items_[i])->y); + } + if (itemType_[i] == lefiGeomPolygonIterE) { + ((lefiGeomPolygonIter*) (items_[i]))->numPoints = 0; + lefFree((double*) ((lefiGeomPolygonIter*) items_[i])->x); + lefFree((double*) ((lefiGeomPolygonIter*) items_[i])->y); + } + lefFree((char*) (items_[i])); + } + numItems_ = 0; +} + +void +lefiGeometries::clearPolyItems() +{ + lefFree((char*) (items_)); + lefFree((char*) (itemType_)); + if (x_) { + lefFree((double*) (x_)); + lefFree((double*) (y_)); + } + numPoints_ = 0; + pointsAllocated_ = 0; + numItems_ = 0; +} + +void +lefiGeometries::add(void *v, + lefiGeomEnum e) +{ + if (numItems_ == itemsAllocated_) { + int i; + void **newi; + lefiGeomEnum *newe; + if (itemsAllocated_ == 0) // 9/12/2002 - for C version + itemsAllocated_ = 2; + else + itemsAllocated_ *= 2; + newe = (lefiGeomEnum*) lefMalloc(sizeof(lefiGeomEnum) * itemsAllocated_); + newi = (void**) lefMalloc(sizeof(void*) * itemsAllocated_); + for (i = 0; i < numItems_; i++) { + newe[i] = itemType_[i]; + newi[i] = items_[i]; + } + lefFree((char*) (items_)); + lefFree((char*) (itemType_)); + items_ = newi; + itemType_ = newe; + } + items_[numItems_] = v; + itemType_[numItems_] = e; + numItems_ += 1; +} + +void +lefiGeometries::addLayer(const char *name) +{ + char *c = (char*) lefMalloc(strlen(name) + 1); + strcpy(c, CASE(name)); + add((void*) c, lefiGeomLayerE); +} + +// 5.7 +void +lefiGeometries::addLayerExceptPgNet() +{ + int *d = (int*) lefMalloc(sizeof(int)); + *d = 1; + add((void*) d, lefiGeomLayerExceptPgNetE); +} + +void +lefiGeometries::addLayerMinSpacing(double spacing) +{ + double *d = (double*) lefMalloc(sizeof(double)); + *d = spacing; + add((void*) d, lefiGeomLayerMinSpacingE); +} + +void +lefiGeometries::addLayerRuleWidth(double width) +{ + double *d = (double*) lefMalloc(sizeof(double)); + *d = width; + add((void*) d, lefiGeomLayerRuleWidthE); +} + +void +lefiGeometries::addClass(const char *name) +{ + char *c = (char*) lefMalloc(strlen(name) + 1); + strcpy(c, CASE(name)); + add((void*) c, lefiGeomClassE); +} + +void +lefiGeometries::addWidth(double w) +{ + double *d = (double*) lefMalloc(sizeof(double)); + *d = w; + add((void*) d, lefiGeomWidthE); +} + +void +lefiGeometries::addPath(int colorMask) +{ + int i; + int lim; + lefiGeomPath *p = (lefiGeomPath*) lefMalloc(sizeof(lefiGeomPath)); + + lim = p->numPoints = numPoints_; + + if (lim > 0) { + p->x = (double*) lefMalloc(sizeof(double) * lim); + p->y = (double*) lefMalloc(sizeof(double) * lim); + for (i = 0; i < lim; i++) { + p->x[i] = x_[i]; + p->y[i] = y_[i]; + } + } else { + p->x = 0; + p->y = 0; + } + + p->colorMask = colorMask; + + add((void*) p, lefiGeomPathE); +} + +void +lefiGeometries::addPathIter(int colorMask) +{ + int i; + int lim; + lefiGeomPathIter *p = (lefiGeomPathIter*) lefMalloc(sizeof(lefiGeomPathIter)); + + lim = p->numPoints = numPoints_; + + if (lim > 0) { + p->x = (double*) lefMalloc(sizeof(double) * lim); + p->y = (double*) lefMalloc(sizeof(double) * lim); + for (i = 0; i < lim; i++) { + p->x[i] = x_[i]; + p->y[i] = y_[i]; + } + } else { + p->x = 0; + p->y = 0; + } + + p->colorMask = colorMask; + p->xStart = xStart_; + p->yStart = yStart_; + p->xStep = xStep_; + p->yStep = yStep_; + + add((void*) p, lefiGeomPathIterE); +} + +// pcr 481783 & 560504 +void +lefiGeometries::addRect(int colorMask, + double xl, + double yl, + double xh, + double yh) +{ + lefiGeomRect *p = (lefiGeomRect*) lefMalloc(sizeof(lefiGeomRect)); + p->xl = xl; + p->yl = yl; + p->xh = xh; + p->yh = yh; + p->colorMask = colorMask; + + add((void*) p, lefiGeomRectE); +} + +void +lefiGeometries::addRectIter(int colorMask, + double xl, + double yl, + double xh, + double yh) +{ + lefiGeomRectIter *p = (lefiGeomRectIter*) lefMalloc(sizeof(lefiGeomRectIter)); + + p->xl = xl; + p->yl = yl; + p->xh = xh; + p->yh = yh; + p->xStart = xStart_; + p->yStart = yStart_; + p->xStep = xStep_; + p->yStep = yStep_; + p->colorMask = colorMask; + + add((void*) p, lefiGeomRectIterE); +} + +void +lefiGeometries::addPolygon(int colorMask) +{ + int i; + int lim; + lefiGeomPolygon *p = (lefiGeomPolygon*) lefMalloc(sizeof(lefiGeomPolygon)); + + lim = p->numPoints = numPoints_; + + if (lim > 0) { + p->x = (double*) lefMalloc(sizeof(double) * lim); + p->y = (double*) lefMalloc(sizeof(double) * lim); + for (i = 0; i < lim; i++) { + p->x[i] = x_[i]; + p->y[i] = y_[i]; + } + } else { + p->x = 0; + p->y = 0; + } + + + p->colorMask = colorMask; + + add((void*) p, lefiGeomPolygonE); +} + +void +lefiGeometries::addPolygonIter(int colorMask) +{ + int i; + int lim; + lefiGeomPolygonIter *p = (lefiGeomPolygonIter*) lefMalloc(sizeof(lefiGeomPolygonIter)); + + lim = p->numPoints = numPoints_; + + if (lim > 0) { + p->x = (double*) lefMalloc(sizeof(double) * lim); + p->y = (double*) lefMalloc(sizeof(double) * lim); + for (i = 0; i < lim; i++) { + p->x[i] = x_[i]; + p->y[i] = y_[i]; + } + } else { + p->x = 0; + p->y = 0; + } + + p->xStart = xStart_; + p->yStart = yStart_; + p->xStep = xStep_; + p->yStep = yStep_; + + p->colorMask = colorMask; + + add((void*) p, lefiGeomPolygonIterE); +} + +void +lefiGeometries::addVia(int viaMask, + double x, + double y, + const char *name) +{ + lefiGeomVia *p = (lefiGeomVia*) lefMalloc(sizeof(lefiGeomVia)); + char *c = (char*) lefMalloc(strlen(name) + 1); + + strcpy(c, CASE(name)); + p->x = x; + p->y = y; + p->name = c; + p->bottomMaskNum = viaMask % 10; + p->cutMaskNum = viaMask / 10 % 10; + p->topMaskNum = viaMask / 100; + + add((void*) p, lefiGeomViaE); +} + +void +lefiGeometries::addViaIter(int viaMask, + double x, + double y, + const char *name) +{ + lefiGeomViaIter *p = (lefiGeomViaIter*) lefMalloc(sizeof(lefiGeomViaIter)); + char *c = (char*) lefMalloc(strlen(name) + 1); + + strcpy(c, CASE(name)); + p->bottomMaskNum = viaMask % 10; + p->cutMaskNum = viaMask / 10 % 10; + p->topMaskNum = viaMask / 100; + p->x = x; + p->y = y; + p->name = c; + p->xStart = xStart_; + p->yStart = yStart_; + p->xStep = xStep_; + p->yStep = yStep_; + + add((void*) p, lefiGeomViaIterE); +} + +void +lefiGeometries::addStepPattern(double xStart, + double yStart, + double xStep, + double yStep) +{ + xStart_ = xStart; + yStart_ = yStart; + xStep_ = xStep; + yStep_ = yStep; +} + +void +lefiGeometries::startList(double x, + double y) +{ + if (!x_) { + numPoints_ = 0; + pointsAllocated_ = 16; + x_ = (double*) lefMalloc(sizeof(double) * 16); + y_ = (double*) lefMalloc(sizeof(double) * 16); + } else { // reset the numPoits to 0 + numPoints_ = 0; + } + addToList(x, y); +} + +void +lefiGeometries::addToList(double x, + double y) +{ + if (numPoints_ == pointsAllocated_) { + int i; + double *nx; + double *ny; + if (pointsAllocated_ == 0) + pointsAllocated_ = 2; + else + pointsAllocated_ *= 2; + nx = (double*) lefMalloc(sizeof(double) * pointsAllocated_); + ny = (double*) lefMalloc(sizeof(double) * pointsAllocated_); + for (i = 0; i < numPoints_; i++) { + nx[i] = x_[i]; + ny[i] = y_[i]; + } + lefFree((char*) (x_)); + lefFree((char*) (y_)); + x_ = nx; + y_ = ny; + } + x_[numPoints_] = x; + y_[numPoints_] = y; + numPoints_ += 1; +} + +int +lefiGeometries::numItems() const +{ + return numItems_; +} + +lefiGeomEnum +lefiGeometries::itemType(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1360): The index number %d given for the geometry item is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1360, msg); + return lefiGeomUnknown; + } + return itemType_[index]; +} + +lefiGeomRect * +lefiGeometries::getRect(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1361): The index number %d given for the geometry RECTANGLE is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1361, msg); + return 0; + } + return (lefiGeomRect*) (items_[index]); +} + +lefiGeomRectIter * +lefiGeometries::getRectIter(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1362): The index number %d given for the geometry RECTANGLE ITERATE is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1362, msg); + return 0; + } + return (lefiGeomRectIter*) (items_[index]); +} + +lefiGeomPath * +lefiGeometries::getPath(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1363): The index number %d given for the geometry PATH is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1363, msg); + return 0; + } + return (lefiGeomPath*) (items_[index]); +} + +lefiGeomPathIter * +lefiGeometries::getPathIter(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1364): The index number %d given for the geometry PATH ITERATE is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1364, msg); + return 0; + } + return (lefiGeomPathIter*) (items_[index]); +} + +char * +lefiGeometries::getLayer(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1365): The index number %d given for the geometry LAYER is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1365, msg); + return 0; + } + return (char*) (items_[index]); +} + +// 5.7 +int +lefiGeometries::hasLayerExceptPgNet(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1366): The index number %d given for the geometry LAYER EXCEPT PG NET is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1366, msg); + return 0; + } + return *((int*) (items_[index])); +} + +double +lefiGeometries::getLayerMinSpacing(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1367): The index number %d given for the geometry LAYER MINSPACING is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1367, msg); + return 0; + } + return *((double*) (items_[index])); +} + +double +lefiGeometries::getLayerRuleWidth(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1368): The index number %d given for the geometry LAYER RULE WIDTH is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1368, msg); + return 0; + } + return *((double*) (items_[index])); +} + +double +lefiGeometries::getWidth(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1369): The index number %d given for the geometry WIDTH is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1369, msg); + return 0; + } + return *((double*) (items_[index])); +} + +lefiGeomPolygon * +lefiGeometries::getPolygon(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1370): The index number %d given for the geometry POLYGON is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1370, msg); + return 0; + } + return (lefiGeomPolygon*) (items_[index]); +} + +lefiGeomPolygonIter * +lefiGeometries::getPolygonIter(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1371): The index number %d given for the geometry POLYGON ITERATE is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1371, msg); + return 0; + } + return (lefiGeomPolygonIter*) (items_[index]); +} + +char * +lefiGeometries::getClass(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1372): The index number %d given for the geometry CLASS is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1372, msg); + return 0; + } + return (char*) (items_[index]); +} + +lefiGeomVia * +lefiGeometries::getVia(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1373): The index number %d given for the geometry VIA is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1373, msg); + return 0; + } + return (lefiGeomVia*) (items_[index]); +} + +lefiGeomViaIter * +lefiGeometries::getViaIter(int index) const +{ + char msg[160]; + if (index < 0 || index >= numItems_) { + sprintf(msg, "ERROR (LEFPARS-1374): The index number %d given for the geometry VIA ITERATE is invalid.\nValid index is from 0 to %d", index, numItems_); + lefiError(0, 1374, msg); + return 0; + } + return (lefiGeomViaIter*) (items_[index]); +} + +void +lefiGeometries::print(FILE *f) const +{ + int i; + int l; + lefiGeomRect *rect; + lefiGeomRectIter *rectiter; + lefiGeomPath *path; + lefiGeomPathIter *pathiter; + lefiGeomPolygon *polygon; + lefiGeomPolygonIter *polygoniter; + + for (i = 0; i < numItems_; i++) { + switch (itemType(i)) { + + case lefiGeomLayerE: + fprintf(f, "Layer %s\n", getLayer(i)); + break; + + case lefiGeomLayerExceptPgNetE: + if (getLayerMinSpacing(i)) + fprintf(f, "EXCEPTPGNET \n"); + break; + + case lefiGeomLayerMinSpacingE: + fprintf(f, "Spacing %g\n", + getLayerMinSpacing(i)); + break; + + case lefiGeomLayerRuleWidthE: + fprintf(f, "DesignRuleWidth %g\n", + getLayerRuleWidth(i)); + break; + + case lefiGeomWidthE: + fprintf(f, "Width %g\n", getWidth(i)); + break; + + case lefiGeomPathE: + path = getPath(i); + fprintf(f, "Path"); + + if (path->colorMask) { + fprintf(f, " MASK %d", path->colorMask); + } + for (l = 0; l < path->numPoints; l++) + fprintf(f, " %g,%g", path->x[l], path->y[l]); + fprintf(f, "\n"); + break; + + case lefiGeomPathIterE: + pathiter = getPathIter(i); + + if (pathiter->colorMask) { + fprintf(f, "MASK %d", pathiter->colorMask); + } + + fprintf(f, "Path iter start %g,%g step %g,%g\n", + pathiter->xStart, pathiter->yStart, + pathiter->xStep, pathiter->yStep); + + for (l = 0; l < pathiter->numPoints; l++) { + fprintf(f, " %g,%g", pathiter->x[l], pathiter->y[l]); + } + + fprintf(f, "\n"); + break; + + case lefiGeomRectE: + rect = getRect(i); + + if (rect->colorMask) { + fprintf(f, "Rect MASK %d, %g,%g %g,%g\n", rect->colorMask, + rect->xl, rect->yl, + rect->xh, rect->yh); + } else { + fprintf(f, "Rect %g,%g %g,%g\n", rect->xl, rect->yl, + rect->xh, rect->yh); + } + break; + + case lefiGeomRectIterE: + rectiter = getRectIter(i); + + if (rectiter->colorMask) { + fprintf(f, "Rect MASK %d iter start %g,%g step %g,%g\n", + rectiter->colorMask, + rectiter->xStart, rectiter->yStart, + rectiter->xStep, rectiter->yStep); + } else { + fprintf(f, "Rect iter start %g,%g step %g,%g\n", + rectiter->xStart, rectiter->yStart, + rectiter->xStep, rectiter->yStep); + } + + fprintf(f, " %g,%g %g,%g\n", rectiter->xl, rectiter->yl, + rectiter->xh, rectiter->yh); + break; + + case lefiGeomPolygonE: + polygon = getPolygon(i); + fprintf(f, "Polygon"); + + if (polygon->colorMask) { + fprintf(f, " MASK %d", polygon->colorMask); + } + + for (l = 0; l < polygon->numPoints; l++) { + fprintf(f, " %g,%g", polygon->x[l], polygon->y[l]); + } + + fprintf(f, "\n"); + break; + + case lefiGeomPolygonIterE: + polygoniter = getPolygonIter(i); + + if (polygoniter->colorMask) { + fprintf(f, "Polygon MASK %d iter start %g,%g step %g,%g\n", + polygoniter->colorMask, + polygoniter->xStart, polygoniter->yStart, + polygoniter->xStep, polygoniter->yStep); + } else { + fprintf(f, "Polygon iter start %g,%g step %g,%g\n", + polygoniter->xStart, polygoniter->yStart, + polygoniter->xStep, polygoniter->yStep); + } + + for (l = 0; l < polygoniter->numPoints; l++) { + fprintf(f, " %g,%g", polygoniter->x[l], polygoniter->y[l]); + } + + fprintf(f, "\n"); + break; + + case lefiGeomViaE: + fprintf(f, "Via \n"); + break; + + case lefiGeomViaIterE: + fprintf(f, "Via iter \n"); + break; + + case lefiGeomClassE: + fprintf(f, "Classtype %s\n", (char*) items_[i]); + break; + + default: + lefiError(0, 1375, "ERROR (LEFPARS-1375): unknown geometry type"); + fprintf(f, "Unknown geometry type %d\n", + (int) (itemType(i))); + break; + } + } +} + +// ***************************************************************************** +// lefiSpacing +// ***************************************************************************** + +lefiSpacing::lefiSpacing() +{ + Init(); +} + +void +lefiSpacing::Init() +{ + name1_ = (char*) lefMalloc(16); + name2_ = (char*) lefMalloc(16); + name1Size_ = 16; + name2Size_ = 16; + distance_ = 0; + hasStack_ = 0; +} + +void +lefiSpacing::Destroy() +{ + if (name1_) + lefFree(name1_); + if (name2_) + lefFree(name2_); +} + +lefiSpacing::~lefiSpacing() +{ + Destroy(); +} + +lefiSpacing * +lefiSpacing::clone() +{ + lefiSpacing *sp = (lefiSpacing*) lefMalloc(sizeof(lefiSpacing)); + sp->name1Size_ = strlen(name1_) + 1; + sp->name1_ = (char*) lefMalloc(sp->name1Size_); + strcpy(sp->name1_, name1_); + sp->name2Size_ = strlen(name2_) + 1; + sp->name2_ = (char*) lefMalloc(sp->name2Size_); + strcpy(sp->name2_, name2_); + sp->distance_ = distance_; + sp->hasStack_ = hasStack_; + return sp; +} + +void +lefiSpacing::set(const char *name1, + const char *name2, + double d, + int hasStack) +{ + int len = strlen(name1) + 1; + if (len > name1Size_) { + lefFree(name1_); + name1_ = (char*) lefMalloc(len); + name1Size_ = len; + } + len = strlen(name2) + 1; + if (len > name2Size_) { + lefFree(name2_); + name2_ = (char*) lefMalloc(len); + name2Size_ = len; + } + strcpy(name1_, CASE(name1)); + strcpy(name2_, CASE(name2)); + distance_ = d; + hasStack_ = hasStack; +} + +const char * +lefiSpacing::name1() const +{ + return name1_; +} + +const char * +lefiSpacing::name2() const +{ + return name2_; +} + +double +lefiSpacing::distance() const +{ + return distance_; +} + +int +lefiSpacing::hasStack() const +{ + return hasStack_; +} +void +lefiSpacing::print(FILE *f) const +{ + fprintf(f, "SPACING %s %s %g", name1(), + name2(), distance()); + + if (hasStack()) + fprintf(f, " STACK"); + + fprintf(f, "\n"); +} + +// ***************************************************************************** +// lefiIRDrop +// ***************************************************************************** + +lefiIRDrop::lefiIRDrop() +{ + Init(); +} + +void +lefiIRDrop::Init() +{ + nameSize_ = 16; + value1Size_ = 16; + value2Size_ = 16; + name_ = (char*) lefMalloc(16); + numValues_ = 0; + valuesAllocated_ = 2; + value1_ = (double*) lefMalloc(sizeof(double) * 2); + value2_ = (double*) lefMalloc(sizeof(double) * 2); +} + +void +lefiIRDrop::Destroy() +{ + lefFree(name_); + clear(); + lefFree((char*) (value1_)); + lefFree((char*) (value2_)); +} + +lefiIRDrop::~lefiIRDrop() +{ + Destroy(); +} + +void +lefiIRDrop::clear() +{ + numValues_ = 0; +} + +void +lefiIRDrop::setTableName(const char *name) +{ + int len = strlen(name) + 1; + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); + clear(); + /* + *(value1_) = '\0'; + *(value2_) = '\0'; + */ +} + +void +lefiIRDrop::setValues(double value1, + double value2) +{ + if (numValues_ == valuesAllocated_) { + int i; + double *v1; + double *v2; + if (valuesAllocated_ == 0) { + valuesAllocated_ = 2; + v1 = (double*) lefMalloc(sizeof(double) * valuesAllocated_); + v2 = (double*) lefMalloc(sizeof(double) * valuesAllocated_); + } else { + valuesAllocated_ *= 2; + v1 = (double*) lefMalloc(sizeof(double) * valuesAllocated_); + v2 = (double*) lefMalloc(sizeof(double) * valuesAllocated_); + for (i = 0; i < numValues_; i++) { + v1[i] = value1_[i]; + v2[i] = value2_[i]; + } + lefFree((char*) (value1_)); + lefFree((char*) (value2_)); + } + value1_ = v1; + value2_ = v2; + } + value1_[numValues_] = value1; + value2_[numValues_] = value2; + numValues_ += 1; +} + +const char * +lefiIRDrop::name() const +{ + return name_; +} + +int +lefiIRDrop::numValues() const +{ + return numValues_; +} + +double +lefiIRDrop::value1(int index) const +{ + char msg[160]; + if (index < 0 || index >= numValues_) { + sprintf(msg, "ERROR (LEFPARS-1376): The index number %d given for the IRDROP is invalid.\nValid index is from 0 to %d", index, numValues_); + lefiError(0, 1376, msg); + return 0; + } + return value1_[index]; +} + +double +lefiIRDrop::value2(int index) const +{ + char msg[160]; + if (index < 0 || index >= numValues_) { + sprintf(msg, "ERROR (LEFPARS-1376): The index number %d given for the IRDROP is invalid.\nValid index is from 0 to %d", index, numValues_); + lefiError(0, 1376, msg); + return 0; + } + return value2_[index]; +} + +void +lefiIRDrop::print(FILE *f) const +{ + int i; + fprintf(f, "IRDROP %s ", name()); + for (i = 0; i < numValues(); i++) { + fprintf(f, "%g %g ", value1(i), + value2(i)); + } + fprintf(f, "\n"); + fprintf(f, "END IRDrop\n"); +} + +// ***************************************************************************** +// lefitMinFeature +// ***************************************************************************** +lefiMinFeature::lefiMinFeature() +{ + Init(); +} + +void +lefiMinFeature::Init() +{ + // nothing to do +} + +void +lefiMinFeature::Destroy() +{ + // nothing to do +} + +lefiMinFeature::~lefiMinFeature() +{ + Destroy(); +} + +void +lefiMinFeature::set(double one, + double two) +{ + one_ = one; + two_ = two; +} + +double +lefiMinFeature::one() const +{ + return one_; +} + +double +lefiMinFeature::two() const +{ + return two_; +} + +void +lefiMinFeature::print(FILE *f) const +{ + fprintf(f, "MINfEATURE %g %g\n", one(), + two()); +} + +// ***************************************************************************** +// lefiSite +// ***************************************************************************** + +lefiSite::lefiSite() +{ + Init(); +} + +void +lefiSite::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); + numRowPattern_ = 0; + rowPatternAllocated_ = 0; + siteNames_ = 0; + siteOrients_ = 0; +} + +void +lefiSite::Destroy() +{ + int i; + + lefFree(name_); + if (numRowPattern_) { + for (i = 0; i < numRowPattern_; i++) + lefFree(siteNames_[i]); + lefFree(siteNames_); + lefFree(siteOrients_); + numRowPattern_ = 0; + } +} + +lefiSite::~lefiSite() +{ + Destroy(); +} + +void +lefiSite::setName(const char *name) +{ + int i; + int len = strlen(name) + 1; + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); + hasClass_ = 0; + *(siteClass_) = 0; + hasSize_ = 0; + symmetry_ = 0; + if (numRowPattern_) { + for (i = 0; i < numRowPattern_; i++) + lefFree(siteNames_[i]); + numRowPattern_ = 0; + } +} + +void +lefiSite::setClass(const char *cls) +{ + strcpy(siteClass_, cls); + hasClass_ = 1; +} + +void +lefiSite::setSize(double x, + double y) +{ + hasSize_ = 1; + sizeX_ = x; + sizeY_ = y; +} + +void +lefiSite::setXSymmetry() +{ + symmetry_ |= 1; +} + +void +lefiSite::setYSymmetry() +{ + symmetry_ |= 2; +} + +void +lefiSite::set90Symmetry() +{ + symmetry_ |= 4; +} + +void +lefiSite::addRowPattern(const char *name, + int orient) +{ + if (numRowPattern_ == rowPatternAllocated_) { + int i; + char **sn; + int *so; + + rowPatternAllocated_ = (rowPatternAllocated_ == 0) ? 2 : + rowPatternAllocated_ * 2; + sn = (char**) lefMalloc(sizeof(char*) * rowPatternAllocated_); + so = (int*) lefMalloc(sizeof(int) * rowPatternAllocated_); + for (i = 0; i < numRowPattern_; i++) { + sn[i] = siteNames_[i]; + so[i] = siteOrients_[i]; + } + if (siteNames_) { + lefFree((char*) (siteNames_)); + lefFree((char*) (siteOrients_)); + } + siteNames_ = sn; + siteOrients_ = so; + } + siteNames_[numRowPattern_] = strdup(name); + siteOrients_[numRowPattern_] = orient; + numRowPattern_ += 1; +} + +const char * +lefiSite::name() const +{ + return name_; +} + +int +lefiSite::hasClass() const +{ + return hasClass_; +} + +const char * +lefiSite::siteClass() const +{ + return siteClass_; +} + +double +lefiSite::sizeX() const +{ + return sizeX_; +} + +double +lefiSite::sizeY() const +{ + return sizeY_; +} + +int +lefiSite::hasSize() const +{ + return hasSize_; +} + +int +lefiSite::hasXSymmetry() const +{ + return (symmetry_ & 1) ? 1 : 0; +} + +int +lefiSite::hasYSymmetry() const +{ + return (symmetry_ & 2) ? 1 : 0; +} + +int +lefiSite::has90Symmetry() const +{ + return (symmetry_ & 4) ? 1 : 0; +} + +int +lefiSite::hasRowPattern() const +{ + return (numRowPattern_) ? 1 : 0; +} + +int +lefiSite::numSites() const +{ + return (numRowPattern_); +} + +char * +lefiSite::siteName(int index) const +{ + return (siteNames_[index]); +} + +int +lefiSite::siteOrient(int index) const +{ + return (siteOrients_[index]); +} + +char * +lefiSite::siteOrientStr(int index) const +{ + return (lefiOrientStr(siteOrients_[index])); +} + +void +lefiSite::print(FILE *f) const +{ + fprintf(f, "SITE %s", name()); + + if (hasClass()) + fprintf(f, " CLASS %s", siteClass()); + + if (hasSize()) + fprintf(f, " SIZE %g %g", sizeX(), + sizeY()); + + if (hasXSymmetry()) + fprintf(f, " SYMMETRY X"); + + if (hasYSymmetry()) + fprintf(f, " SYMMETRY Y"); + + if (has90Symmetry()) + fprintf(f, " SYMMETRY R90"); + + fprintf(f, "\n"); +} + +// ***************************************************************************** +// lefiSitePattern +// ***************************************************************************** + +lefiSitePattern::lefiSitePattern() +{ + Init(); +} + +void +lefiSitePattern::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); +} + +void +lefiSitePattern::Destroy() +{ + lefFree(name_); +} + +lefiSitePattern::~lefiSitePattern() +{ + Destroy(); +} + +void +lefiSitePattern::set(const char *name, + double x, + double y, + int orient, + double xStart, + double yStart, + double xStep, + double yStep) +{ + int len = strlen(name) + 1; + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); + + x_ = x; + y_ = y; + xStep_ = xStep; + yStep_ = yStep; + xStart_ = xStart; + yStart_ = yStart; + orient_ = orient; +} + +const char * +lefiSitePattern::name() const +{ + return name_; +} + +int +lefiSitePattern::orient() const +{ + return orient_; +} + +const char * +lefiSitePattern::orientStr() const +{ + return (lefiOrientStr(orient_)); +} + +double +lefiSitePattern::x() const +{ + return x_; +} + +double +lefiSitePattern::y() const +{ + return y_; +} + +int +lefiSitePattern::hasStepPattern() const +{ + if (xStart_ == -1 && yStart_ == -1 && + xStep_ == -1 && yStep_ == -1) + return 0; + return 1; +} + +double +lefiSitePattern::xStart() const +{ + return xStart_; +} + +double +lefiSitePattern::yStart() const +{ + return yStart_; +} + +double +lefiSitePattern::xStep() const +{ + return xStep_; +} + +double +lefiSitePattern::yStep() const +{ + return yStep_; +} + +void +lefiSitePattern::print(FILE *f) const +{ + fprintf(f, " SITE Pattern %s %g,%g %s\n", + name(), + x(), + y(), + orientStr()); + fprintf(f, " %g,%g step %g,%g\n", + xStart(), + yStart(), + xStep(), + yStep()); +} + +// ***************************************************************************** +// lefiTrackPattern +// ***************************************************************************** + +lefiTrackPattern::lefiTrackPattern() +{ + Init(); +} + +void +lefiTrackPattern::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); + start_ = 0; + numTracks_ = 0; + space_ = 0; + numLayers_ = 0; + layerAllocated_ = 2; + layerNames_ = (char**) lefMalloc(sizeof(char*) * 2); + clear(); +} + +void +lefiTrackPattern::Destroy() +{ + if (name_) + lefFree(name_); + clear(); + name_ = 0; + start_ = 0; + numTracks_ = 0; + space_ = 0; + lefFree((char*) (layerNames_)); +} + +void +lefiTrackPattern::clear() +{ + int i; + for (i = 0; i < numLayers_; i++) { + lefFree(layerNames_[i]); + } +} + +lefiTrackPattern::~lefiTrackPattern() +{ + Destroy(); +} + +void +lefiTrackPattern::set(const char *name, + double start, + int numTracks, + double space) +{ + int len = strlen(name) + 1; + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); + + start_ = start; + numTracks_ = numTracks; + space_ = space; +} + +void +lefiTrackPattern::addLayer(const char *name) +{ + int len; + if (numLayers_ == layerAllocated_) { + int i; + char **nn; + + if (layerAllocated_ == 0) + layerAllocated_ = 2; + else + layerAllocated_ *= 2; + nn = (char**) lefMalloc(sizeof(char*) * layerAllocated_); + for (i = 0; i < numLayers_; i++) + nn[i] = layerNames_[i]; + lefFree((char*) (layerNames_)); + layerNames_ = nn; + } + len = strlen(name) + 1; + layerNames_[numLayers_] = (char*) lefMalloc(len); + strcpy(layerNames_[numLayers_], CASE(name)); + numLayers_ += 1; +} + +const char * +lefiTrackPattern::name() const +{ + return name_; +} + +double +lefiTrackPattern::start() const +{ + return start_; +} + +int +lefiTrackPattern::numTracks() const +{ + return numTracks_; +} + +double +lefiTrackPattern::space() const +{ + return space_; +} + +int +lefiTrackPattern::numLayers() const +{ + return numLayers_; +} + +const char * +lefiTrackPattern::layerName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1377): The index number %d given for the TRACK PATTERN is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1377, msg); + return 0; + } + return layerNames_[index]; +} + +void +lefiTrackPattern::print(FILE *f) const +{ + int i; + fprintf(f, " TRACK Pattern %s %g DO %d STEP %g\n", + name(), + start(), + numTracks(), + space()); + if (numLayers() > 0) { + fprintf(f, " LAYER "); + for (i = 0; i < numLayers(); i++) + fprintf(f, "%s ", layerName(i)); + fprintf(f, "\n"); + } +} + +// ***************************************************************************** +// lefiGcellPattern +// ***************************************************************************** + +lefiGcellPattern::lefiGcellPattern() +{ + Init(); +} + +void +lefiGcellPattern::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); + start_ = 0; + numCRs_ = 0; + space_ = 0; +} + +void +lefiGcellPattern::Destroy() +{ + if (name_) + lefFree(name_); + name_ = 0; + start_ = 0; + numCRs_ = 0; + space_ = 0; +} + +lefiGcellPattern::~lefiGcellPattern() +{ + Destroy(); +} + +void +lefiGcellPattern::set(const char *name, + double start, + int numCRs, + double space) +{ + int len = strlen(name) + 1; + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); + + start_ = start; + numCRs_ = numCRs; + space_ = space; +} + +const char * +lefiGcellPattern::name() const +{ + return name_; +} + +double +lefiGcellPattern::start() const +{ + return start_; +} + +int +lefiGcellPattern::numCRs() const +{ + return numCRs_; +} + +double +lefiGcellPattern::space() const +{ + return space_; +} + +void +lefiGcellPattern::print(FILE *f) const +{ + fprintf(f, " TRACK Pattern %s %g DO %d STEP %g\n", + name(), + start(), + numCRs(), + space()); +} + +// ***************************************************************************** +// lefiUseMinSpacing +// ***************************************************************************** + +lefiUseMinSpacing::lefiUseMinSpacing() +{ + Init(); +} + +void +lefiUseMinSpacing::Init() +{ + name_ = 0; + value_ = 0; +} + +void +lefiUseMinSpacing::Destroy() +{ + if (name_) + lefFree(name_); +} + +lefiUseMinSpacing::~lefiUseMinSpacing() +{ + Destroy(); +} + +void +lefiUseMinSpacing::set(const char *name, + int value) +{ + + Destroy(); // lefFree previous name, if there is any + name_ = (char*) lefMalloc(strlen(name) + 1); + strcpy(name_, CASE(name)); + value_ = value; +} + +const char * +lefiUseMinSpacing::name() const +{ + return name_; +} + +int +lefiUseMinSpacing::value() const +{ + return value_; +} + +void +lefiUseMinSpacing::print(FILE *f) const +{ + fprintf(f, "USEMINSPACING %s %d\n", + name(), + value()); +} + +// ***************************************************************************** +// lefiMaxStackVia +// ***************************************************************************** + +lefiMaxStackVia::lefiMaxStackVia() +{ + bottomLayer_ = 0; + topLayer_ = 0; + Init(); +} + +void +lefiMaxStackVia::Init() +{ + value_ = 0; + hasRange_ = 0; + if (bottomLayer_) // This is for C version, since C will + lefFree(bottomLayer_); // call this function before calling + if (topLayer_) // setMaxStackViaRange when more than 1 lef + lefFree(topLayer_); // files are parse. C++ skips this function + bottomLayer_ = 0; + topLayer_ = 0; +} + +void +lefiMaxStackVia::Destroy() +{ + if (bottomLayer_) + lefFree(bottomLayer_); + if (topLayer_) + lefFree(topLayer_); + bottomLayer_ = 0; + topLayer_ = 0; + hasRange_ = 0; + value_ = 0; +} + +lefiMaxStackVia::~lefiMaxStackVia() +{ + Destroy(); +} + +void +lefiMaxStackVia::setMaxStackVia(int value) +{ + value_ = value; +} + +void +lefiMaxStackVia::setMaxStackViaRange(const char *bottomLayer, + const char *topLayer) +{ + hasRange_ = 1; + if (bottomLayer_) // May be lefrReset is called and + lefFree(bottomLayer_); // bottomLayer_ and/or topLayer_ have + if (topLayer_) // value malloc on them + lefFree(topLayer_); + bottomLayer_ = (char*) lefMalloc(strlen(bottomLayer) + 1); + strcpy(bottomLayer_, CASE(bottomLayer)); + topLayer_ = (char*) lefMalloc(strlen(topLayer) + 1); + strcpy(topLayer_, CASE(topLayer)); + //bottomLayer_ = strdup(bottomLayer); + //topLayer_ = strdup(topLayer); +} + +int +lefiMaxStackVia::maxStackVia() const +{ + return value_; +} + +int +lefiMaxStackVia::hasMaxStackViaRange() const +{ + return hasRange_ ? 1 : 0; +} + +const char * +lefiMaxStackVia::maxStackViaBottomLayer() const +{ + return bottomLayer_; +} + +const char * +lefiMaxStackVia::maxStackViaTopLayer() const +{ + return topLayer_; +} + +void +lefiMaxStackVia::print(FILE *f) const +{ + fprintf(f, "MAXVIASTACK %d", maxStackVia()); + if (hasMaxStackViaRange()) + fprintf(f, " RANGE %s %s", maxStackViaBottomLayer(), + maxStackViaTopLayer()); + fprintf(f, "\n"); +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiMisc.hpp b/lefdef/src/lef/lef/lefiMisc.hpp new file mode 100644 index 00000000..add1d698 --- /dev/null +++ b/lefdef/src/lef/lef/lefiMisc.hpp @@ -0,0 +1,493 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiMisc_h +#define lefiMisc_h + +#include +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// The different types of items in a geometry list. + +struct lefiGeomRect { + double xl; + double yl; + double xh; + double yh; + int colorMask; +}; + +struct lefiGeomRectIter { + double xl; + double yl; + double xh; + double yh; + double xStart; + double yStart; + double xStep; + double yStep; + int colorMask; +}; + +struct lefiGeomPath { + int numPoints; + double* x; + double* y; + int colorMask; +}; + +struct lefiGeomPathIter { + int numPoints; + double* x; + double* y; + double xStart; + double yStart; + double xStep; + double yStep; + int colorMask; +}; + +struct lefiGeomPolygon { + int numPoints; + double* x; + double* y; + int colorMask; +}; + +struct lefiGeomPolygonIter { + int numPoints; + double* x; + double* y; + double xStart; + double yStart; + double xStep; + double yStep; + int colorMask; +}; + +enum lefiGeomEnum { + lefiGeomUnknown = 0, + lefiGeomLayerE, + lefiGeomLayerExceptPgNetE, + lefiGeomLayerMinSpacingE, + lefiGeomLayerRuleWidthE, + lefiGeomWidthE, + lefiGeomPathE, + lefiGeomPathIterE, + lefiGeomRectE, + lefiGeomRectIterE, + lefiGeomPolygonE, + lefiGeomPolygonIterE, + lefiGeomViaE, + lefiGeomViaIterE, + lefiGeomClassE, + lefiGeomEnd +}; + +struct lefiGeomVia { + char* name; + double x; + double y; + int topMaskNum; + int cutMaskNum; + int bottomMaskNum; +}; + +struct lefiGeomViaIter { + char* name; + double x; + double y; + double xStart; + double yStart; + double xStep; + double yStep; + int topMaskNum; + int cutMaskNum; + int bottomMaskNum; +}; + +class lefiGeometries { +public: + lefiGeometries(); + void Init(); + + void Destroy(); + ~lefiGeometries(); + + void clear(); + void clearPolyItems(); + void add(void* v, lefiGeomEnum e); + void addLayer(const char* name); + void addLayerExceptPgNet(); // 5.7 + void addLayerMinSpacing(double spacing); + void addLayerRuleWidth(double width); + void addClass(const char* name); + void addWidth(double w); + void addPath(int colorMask); + void addPathIter(int colorMask); +/* pcr 481783 & 560504 +*/ + void addRect(int colorMask, double xl, double yl, double xh, double yh); + void addRectIter(int colorMask, double xl, double yl, double xh, double yh); + void addPolygon(int colorMask = 0); + void addPolygonIter(int colorMask); + void addVia(int viaMasks, + double x, double y, const char* name); + void addViaIter(int viaMasks, + double x, double y, const char* name); + void addStepPattern(double xStart, double yStart, + double xStep, double yStep); + void startList(double x, double y); + void addToList(double x, double y); + + int numItems() const; + lefiGeomEnum itemType(int index) const; + lefiGeomRect* getRect(int index) const; + lefiGeomRectIter* getRectIter(int index) const; + lefiGeomPath* getPath(int index) const; + lefiGeomPathIter* getPathIter(int index) const; + int hasLayerExceptPgNet(int index) const ; // 5.7 + char* getLayer(int index) const; + double getLayerMinSpacing(int index) const; + double getLayerRuleWidth(int index) const; + double getWidth(int index) const; + lefiGeomPolygon* getPolygon(int index) const; + lefiGeomPolygonIter* getPolygonIter(int index) const; + char* getClass(int index) const; + lefiGeomVia* getVia(int index) const; + lefiGeomViaIter* getViaIter(int index) const; + + void print(FILE* f) const; + +protected: + + int numItems_; + int itemsAllocated_; + lefiGeomEnum* itemType_; + void** items_; + + int numPoints_; + int pointsAllocated_; + double* x_; + double* y_; + + double xStart_; + double yStart_; + double xStep_; + double yStep_; +}; + +class lefiSpacing { +public: + lefiSpacing(); + void Init(); + + void Destroy(); + ~lefiSpacing(); + + lefiSpacing* clone(); + + void set(const char* name1, const char* name2, double num, int hasStack); + + int hasStack() const; + + const char* name1() const; + const char* name2() const; + double distance() const; + + // Debug print + void print(FILE* f) const; + +protected: + int name1Size_; + int name2Size_; + char* name1_; + char* name2_; + double distance_; + int hasStack_; +}; + +class lefiIRDrop { +public: + lefiIRDrop(); + void Init(); + + void Destroy(); + ~lefiIRDrop(); + + void clear(); + void setTableName(const char* name); + void setValues(double name1, double name2); + + const char* name() const; + double value1(int index) const; + double value2(int index) const; + + int numValues() const; + + // Debug print + void print(FILE* f) const; + +protected: + int nameSize_; + int value1Size_; + int value2Size_; + int numValues_; + int valuesAllocated_; + char* name_; + double* value1_; + double* value2_; +}; + +class lefiMinFeature { +public: + lefiMinFeature(); + void Init(); + + void Destroy(); + ~lefiMinFeature(); + + void set(double one, double two); + + double one() const; + double two() const; + + // Debug print + void print(FILE* f) const; + +protected: + double one_; + double two_; +}; + +class lefiSite { +public: + lefiSite(); + void Init(); + + void Destroy(); + ~lefiSite(); + + void setName(const char* name); + void setClass(const char* cls); + void setSize(double x, double y); + void setXSymmetry(); + void setYSymmetry(); + void set90Symmetry(); + void addRowPattern(const char* name, int orient); + + const char* name() const; + int hasClass() const; + const char* siteClass() const; + double sizeX() const; + double sizeY() const; + int hasSize() const; + int hasXSymmetry() const; + int hasYSymmetry() const; + int has90Symmetry() const; + int hasRowPattern() const; // 5.6 + int numSites() const; // 5.6 + char* siteName(int index) const; // 5.6 + int siteOrient(int index) const; // 5.6 + char* siteOrientStr(int index) const; // 5.6 + + // Debug print + void print(FILE* f) const; + +protected: + int nameSize_; + char* name_; + int hasClass_; + char siteClass_[8]; + double sizeX_; + double sizeY_; + int hasSize_; + int symmetry_; // bit 0-x bit 1-y bit 2-90 + + int numRowPattern_; // 5.6 ROWPATTERN + int rowPatternAllocated_; + char** siteNames_; + int* siteOrients_; +}; + +class lefiSitePattern { +public: + lefiSitePattern(); + void Init(); + + void Destroy(); + ~lefiSitePattern(); + + void set(const char* name, double x, double y, int orient, + double xStart, double yStart, double xStep, double yStep); + + const char* name() const; + int orient() const; + const char* orientStr() const; + double x() const; + double y() const; + int hasStepPattern() const; // 5.6 + double xStart() const; + double yStart() const; + double xStep() const; + double yStep() const; + + // Debug print + void print(FILE* f) const; + +protected: + int nameSize_; + char* name_; + int orient_; + double x_; + double y_; + double xStart_; + double yStart_; + double xStep_; + double yStep_; +}; + +class lefiTrackPattern { +public: + lefiTrackPattern(); + void Init(); + + void Destroy(); + ~lefiTrackPattern(); + + void clear(); + void set(const char* name, double start, int numTracks, double space); + void addLayer(const char* name); + + const char* name() const; + double start() const; + int numTracks() const; + double space() const; + + int numLayers() const; + const char* layerName(int index) const; + + // Debug print + void print(FILE* f) const; + +protected: + int nameSize_; + char* name_; + double start_; + int numTracks_; + double space_; + + int numLayers_; + int layerAllocated_; + char** layerNames_; +}; + +class lefiGcellPattern { +public: + lefiGcellPattern(); + void Init(); + + void Destroy(); + ~lefiGcellPattern(); + + void set(const char* name, double start, int numCRs, double space); + + const char* name() const; + double start() const; + int numCRs() const; + double space() const; + + // Debug print + void print(FILE* f) const; + +protected: + int nameSize_; + char* name_; + double start_; + int numCRs_; + double space_; +}; + +class lefiUseMinSpacing { +public: + lefiUseMinSpacing(); + void Init(); + + void Destroy(); + ~lefiUseMinSpacing(); + + void set(const char* name, int value); + + const char* name() const; + int value() const; + + // Debug print + void print(FILE* f) const; + +protected: + char* name_; + int value_; +}; + +// 5.5 for Maximum Stacked-via rule +class lefiMaxStackVia { +public: + lefiMaxStackVia(); + void Init(); + + void Destroy(); + ~lefiMaxStackVia(); + + void clear(); + void setMaxStackVia(int value); + void setMaxStackViaRange(const char* bottomLayer, const char* topLayer); + + int maxStackVia() const; + int hasMaxStackViaRange() const; + const char* maxStackViaBottomLayer() const; + const char* maxStackViaTopLayer() const; + + // Debug print + void print(FILE* f) const; + +protected: + int value_; + int hasRange_; + char* bottomLayer_; + char* topLayer_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif + diff --git a/lefdef/src/lef/lef/lefiNonDefault.cpp b/lefdef/src/lef/lef/lefiNonDefault.cpp new file mode 100644 index 00000000..895fad0d --- /dev/null +++ b/lefdef/src/lef/lef/lefiNonDefault.cpp @@ -0,0 +1,1120 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "lefiNonDefault.hpp" +#include "lefiDebug.hpp" +#include "lefrCallBacks.hpp" + +#include "lefrData.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// 6/16/2000 - Wanda da Rosa +// Make these variables in globals. Can't use those defined +// in the class because it generates warning when it casts. +// Can't assign for example lefrViaCbkFnType to oldViaCbk_ +// in the class because it requires to include lefrReader.hpp +// in lefiNonDefault.hpp. But in lefrReader.hpp, it requires +// include lefiNonDefault.hpp, this creates a loop and is +// problematic... + +// ***************************************************************************** +// lefiNonDefault +// ***************************************************************************** + +lefiNonDefault::lefiNonDefault() +: nameSize_(0), + name_(NULL), + numLayers_(0), + layersAllocated_(0), + layerName_(NULL), + width_(NULL), + spacing_(NULL), + wireExtension_(NULL), + hasWidth_(NULL), + hasSpacing_(NULL), + hasWireExtension_(NULL), + resistance_(NULL), + capacitance_(NULL), + edgeCap_(NULL), + hasResistance_(NULL), + hasCapacitance_(NULL), + hasEdgeCap_(NULL), + diagWidth_(NULL), + hasDiagWidth_(NULL), + numVias_(0), + allocatedVias_(0), + viaRules_(NULL), + numSpacing_(0), + allocatedSpacing_(0), + spacingRules_(NULL), + hardSpacing_(0), + numUseVias_(0), + allocatedUseVias_(0), + useViaName_(NULL), + numUseViaRules_(0), + allocatedUseViaRules_(0), + useViaRuleName_(NULL), + numMinCuts_(0), + allocatedMinCuts_(0), + cutLayerName_(NULL), + numCuts_(NULL), + numProps_(0), + propsAllocated_(0), + names_(NULL), + values_(NULL), + dvalues_(NULL), + types_(NULL) +{ + Init(); +} + +void +lefiNonDefault::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); + + layersAllocated_ = 2; + numLayers_ = 0; + layerName_ = (char**) lefMalloc(sizeof(char*) * 2); + width_ = (double*) lefMalloc(sizeof(double) * 2); + diagWidth_ = (double*) lefMalloc(sizeof(double) * 2); + spacing_ = (double*) lefMalloc(sizeof(double) * 2); + wireExtension_ = (double*) lefMalloc(sizeof(double) * 2); + resistance_ = (double*) lefMalloc(sizeof(double) * 2); + capacitance_ = (double*) lefMalloc(sizeof(double) * 2); + edgeCap_ = (double*) lefMalloc(sizeof(double) * 2); + hasWidth_ = (char*) lefMalloc(sizeof(char) * 2); + hasDiagWidth_ = (char*) lefMalloc(sizeof(char) * 2); + hasSpacing_ = (char*) lefMalloc(sizeof(char) * 2); + hasWireExtension_ = (char*) lefMalloc(sizeof(char) * 2); + hasResistance_ = (char*) lefMalloc(sizeof(char) * 2); + hasCapacitance_ = (char*) lefMalloc(sizeof(char) * 2); + hasEdgeCap_ = (char*) lefMalloc(sizeof(char) * 2); + + allocatedVias_ = 2; + numVias_ = 0; + viaRules_ = (lefiVia**) lefMalloc(sizeof(lefiVia*) * 2); + + allocatedSpacing_ = 2; + numSpacing_ = 0; + spacingRules_ = (lefiSpacing**) lefMalloc(sizeof(lefiSpacing*) * 2); + + numProps_ = 0; + propsAllocated_ = 1; + names_ = (char**) lefMalloc(sizeof(char*)); + values_ = (char**) lefMalloc(sizeof(char*)); + dvalues_ = (double*) lefMalloc(sizeof(double)); + types_ = (char*) lefMalloc(sizeof(char)); + + hardSpacing_ = 0; + numUseVias_ = 0; // Won't be allocated until they are used + allocatedUseVias_ = 0; + numUseViaRules_ = 0; + allocatedUseViaRules_ = 0; + numMinCuts_ = 0; + allocatedMinCuts_ = 0; +} + +void +lefiNonDefault::Destroy() +{ + clear(); + + lefFree(name_); + + lefFree((char*) (layerName_)); + lefFree((char*) (width_)); + lefFree((char*) (diagWidth_)); + lefFree((char*) (spacing_)); + lefFree((char*) (wireExtension_)); + lefFree((char*) (resistance_)); + lefFree((char*) (capacitance_)); + lefFree((char*) (edgeCap_)); + lefFree(hasWidth_); + lefFree(hasDiagWidth_); + lefFree(hasSpacing_); + lefFree(hasWireExtension_); + lefFree(hasResistance_); + lefFree(hasCapacitance_); + lefFree(hasEdgeCap_); + + lefFree((char*) (viaRules_)); + + lefFree((char*) (spacingRules_)); + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + if (allocatedUseVias_) + lefFree((char*) (useViaName_)); + if (allocatedUseViaRules_) + lefFree((char*) (useViaRuleName_)); + if (allocatedMinCuts_) { + lefFree((char*) (cutLayerName_)); + lefFree((char*) (numCuts_)); + } + allocatedUseVias_ = 0; + allocatedUseViaRules_ = 0; + allocatedMinCuts_ = 0; +} + +lefiNonDefault::~lefiNonDefault() +{ + Destroy(); +} + +void +lefiNonDefault::clear() +{ + int i; + lefiSpacing *sr; + lefiVia *vr; + + for (i = 0; i < numProps_; i++) { + lefFree(names_[i]); + lefFree(values_[i]); + dvalues_[i] = 0; + } + numProps_ = 0; + for (i = 0; i < numLayers_; i++) { + lefFree(layerName_[i]); + layerName_[i] = 0; + } + numLayers_ = 0; + for (i = 0; i < numVias_; i++) { + vr = viaRules_[i]; + vr->Destroy(); + lefFree((char*) (viaRules_[i])); + viaRules_[i] = 0; + } + numVias_ = 0; + for (i = 0; i < numSpacing_; i++) { + sr = spacingRules_[i]; + sr->Destroy(); + lefFree((char*) (spacingRules_[i])); + spacingRules_[i] = 0; + } + numSpacing_ = 0; + + hardSpacing_ = 0; + for (i = 0; i < numUseVias_; i++) { + lefFree((char*) (useViaName_[i])); + } + numUseVias_ = 0; + for (i = 0; i < numUseViaRules_; i++) { + lefFree((char*) (useViaRuleName_[i])); + } + numUseViaRules_ = 0; + for (i = 0; i < numMinCuts_; i++) { + lefFree((char*) (cutLayerName_[i])); + } + numMinCuts_ = 0; +} + +void +lefiNonDefault::addViaRule(lefiVia *v) +{ + if (numVias_ == allocatedVias_) { + int i; + lefiVia **nv; + + if (allocatedVias_ == 0) + allocatedVias_ = 2; + else + allocatedVias_ *= 2; + nv = (lefiVia**) lefMalloc(sizeof(lefiVia*) * allocatedVias_); + for (i = 0; i < numVias_; i++) { + nv[i] = viaRules_[i]; + } + lefFree((char*) (viaRules_)); + viaRules_ = nv; + } + viaRules_[numVias_++] = v->clone(); +} + +void +lefiNonDefault::addSpacingRule(lefiSpacing *s) +{ + if (numSpacing_ == allocatedSpacing_) { + int i; + lefiSpacing **ns; + + if (allocatedSpacing_ == 0) + allocatedSpacing_ = 2; + else + allocatedSpacing_ *= 2; + ns = (lefiSpacing**) lefMalloc(sizeof(lefiSpacing*) * + allocatedSpacing_); + for (i = 0; i < numSpacing_; i++) { + ns[i] = spacingRules_[i]; + } + lefFree((char*) (spacingRules_)); + spacingRules_ = ns; + } + spacingRules_[numSpacing_++] = s->clone(); +} + +void +lefiNonDefault::setName(const char *name) +{ + int len = strlen(name) + 1; + clear(); + + // Use our callback functions because a via and spacing + // rule is really part of the non default section. + // oldViaCbk_ = (void*)lefrViaCbk; + // oldSpacingCbk_ = (void*)lefrSpacingCbk; + // oldSpacingBeginCbk_ = (void*)lefrSpacingBeginCbk; + // oldSpacingEndCbk_ = (void*)lefrSpacingEndCbk; + //oldUserData_ = lefrGetUserData(); + //oldViaCbk = lefCallbacks->ViaCbk; + //oldSpacingCbk = lefCallbacks->SpacingCbk; + //oldSpacingBeginCbk = lefCallbacks->SpacingBeginCbk; + //oldSpacingEndCbk = lefCallbacks->SpacingEndCbk; + //lefCallbacks->ViaCbk = lefiNonDefaultViaCbk; + //lefCallbacks->SpacingCbk = lefiNonDefaultSpacingCbk; + //lefCallbacks->SpacingBeginCbk = 0; + // lefCallbacks->SpacingEndCbk = 0; + // pcr 909010, instead of saving the pointer in userData, + // save it in the global lefData->nd. + // lefrSetUserData((lefiUserData)this); + + lefData->nd = this; + + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); +} + +void +lefiNonDefault::addLayer(const char *name) +{ + int len = strlen(name) + 1; + if (numLayers_ == layersAllocated_) { + int i; + char **newl; + double *neww; + double *newd; + double *news; + double *newe; + double *newc; + double *newr; + double *newec; + char *newhw; + char *newhd; + char *newhs; + char *newhe; + char *newhc; + char *newhr; + char *newhec; + + if (layersAllocated_ == 0) + layersAllocated_ = 2; + else + layersAllocated_ *= 2; + newl = (char**) lefMalloc(sizeof(char*) * + layersAllocated_); + newe = (double*) lefMalloc(sizeof(double) * + layersAllocated_); + neww = (double*) lefMalloc(sizeof(double) * + layersAllocated_); + newd = (double*) lefMalloc(sizeof(double) * + layersAllocated_); + news = (double*) lefMalloc(sizeof(double) * + layersAllocated_); + newc = (double*) lefMalloc(sizeof(double) * + layersAllocated_); + newr = (double*) lefMalloc(sizeof(double) * + layersAllocated_); + newec = (double*) lefMalloc(sizeof(double) * + layersAllocated_); + newhe = (char*) lefMalloc(sizeof(char) * + layersAllocated_); + newhw = (char*) lefMalloc(sizeof(char) * + layersAllocated_); + newhd = (char*) lefMalloc(sizeof(char) * + layersAllocated_); + newhs = (char*) lefMalloc(sizeof(char) * + layersAllocated_); + newhc = (char*) lefMalloc(sizeof(char) * + layersAllocated_); + newhr = (char*) lefMalloc(sizeof(char) * + layersAllocated_); + newhec = (char*) lefMalloc(sizeof(char) * + layersAllocated_); + for (i = 0; i < numLayers_; i++) { + newl[i] = layerName_[i]; + neww[i] = width_[i]; + newd[i] = diagWidth_[i]; + news[i] = spacing_[i]; + newe[i] = wireExtension_[i]; + newc[i] = capacitance_[i]; + newr[i] = resistance_[i]; + newec[i] = edgeCap_[i]; + newhe[i] = hasWireExtension_[i]; + newhw[i] = hasWidth_[i]; + newhd[i] = hasDiagWidth_[i]; + newhs[i] = hasSpacing_[i]; + newhc[i] = hasCapacitance_[i]; + newhr[i] = hasResistance_[i]; + newhec[i] = hasEdgeCap_[i]; + } + lefFree((char*) (layerName_)); + lefFree((char*) (width_)); + lefFree((char*) (diagWidth_)); + lefFree((char*) (spacing_)); + lefFree((char*) (wireExtension_)); + lefFree((char*) (capacitance_)); + lefFree((char*) (resistance_)); + lefFree((char*) (edgeCap_)); + lefFree((char*) (hasWireExtension_)); + lefFree((char*) (hasWidth_)); + lefFree((char*) (hasDiagWidth_)); + lefFree((char*) (hasSpacing_)); + lefFree((char*) (hasCapacitance_)); + lefFree((char*) (hasResistance_)); + lefFree((char*) (hasEdgeCap_)); + layerName_ = newl; + width_ = neww; + diagWidth_ = newd; + spacing_ = news; + wireExtension_ = newe; + capacitance_ = newc; + resistance_ = newr; + edgeCap_ = newec; + hasWidth_ = newhw; + hasDiagWidth_ = newhd; + hasSpacing_ = newhs; + hasWireExtension_ = newhe; + hasCapacitance_ = newhc; + hasResistance_ = newhr; + hasEdgeCap_ = newhec; + } + layerName_[numLayers_] = (char*) lefMalloc(len); + strcpy(layerName_[numLayers_], CASE(name)); + width_[numLayers_] = 0.0; + diagWidth_[numLayers_] = 0.0; + spacing_[numLayers_] = 0.0; + wireExtension_[numLayers_] = 0.0; + capacitance_[numLayers_] = 0.0; + resistance_[numLayers_] = 0.0; + edgeCap_[numLayers_] = 0.0; + hasWidth_[numLayers_] = '\0'; + hasDiagWidth_[numLayers_] = '\0'; + hasSpacing_[numLayers_] = '\0'; + hasWireExtension_[numLayers_] = '\0'; + hasCapacitance_[numLayers_] = '\0'; + hasResistance_[numLayers_] = '\0'; + hasEdgeCap_[numLayers_] = '\0'; + numLayers_ += 1; +} + +void +lefiNonDefault::addWidth(double num) +{ + width_[numLayers_ - 1] = num; + hasWidth_[numLayers_ - 1] = 1; +} + +void +lefiNonDefault::addDiagWidth(double num) +{ + diagWidth_[numLayers_ - 1] = num; + hasDiagWidth_[numLayers_ - 1] = 1; +} + +void +lefiNonDefault::addSpacing(double num) +{ + spacing_[numLayers_ - 1] = num; + hasSpacing_[numLayers_ - 1] = 1; +} + +void +lefiNonDefault::addWireExtension(double num) +{ + wireExtension_[numLayers_ - 1] = num; + hasWireExtension_[numLayers_ - 1] = 1; +} + +void +lefiNonDefault::addCapacitance(double num) +{ + capacitance_[numLayers_ - 1] = num; + hasCapacitance_[numLayers_ - 1] = 1; +} + +void +lefiNonDefault::addResistance(double num) +{ + resistance_[numLayers_ - 1] = num; + hasResistance_[numLayers_ - 1] = 1; +} + +void +lefiNonDefault::addEdgeCap(double num) +{ + edgeCap_[numLayers_ - 1] = num; + hasEdgeCap_[numLayers_ - 1] = 1; +} + +void +lefiNonDefault::setHardspacing() +{ + hardSpacing_ = 1; +} + +void +lefiNonDefault::addUseVia(const char *name) +{ + if (numUseVias_ == allocatedUseVias_) { + int i; + char **vn; + + if (allocatedUseVias_ == 0) + allocatedUseVias_ = 2; + else + allocatedUseVias_ *= 2; + vn = (char**) lefMalloc(sizeof(char*) * allocatedUseVias_); + for (i = 0; i < numUseVias_; i++) { + vn[i] = useViaName_[i]; + } + if (numUseVias_) + lefFree((char*) (useViaName_)); + useViaName_ = vn; + } + useViaName_[numUseVias_] = (char*) lefMalloc(strlen(name) + 1); + strcpy(useViaName_[numUseVias_], CASE(name)); + numUseVias_ += 1; +} + +void +lefiNonDefault::addUseViaRule(const char *name) +{ + if (numUseViaRules_ == allocatedUseViaRules_) { + int i; + char **vn; + + if (allocatedUseViaRules_ == 0) + allocatedUseViaRules_ = 2; + else + allocatedUseViaRules_ *= 2; + vn = (char**) lefMalloc(sizeof(char*) * allocatedUseViaRules_); + for (i = 0; i < numUseViaRules_; i++) { + vn[i] = useViaRuleName_[i]; + } + if (numUseViaRules_) + lefFree((char*) (useViaRuleName_)); + useViaRuleName_ = vn; + } + useViaRuleName_[numUseViaRules_] = (char*) lefMalloc(strlen(name) + 1); + strcpy(useViaRuleName_[numUseViaRules_], CASE(name)); + numUseViaRules_ += 1; +} + +void +lefiNonDefault::addMinCuts(const char *name, + int numCuts) +{ + if (numMinCuts_ == allocatedMinCuts_) { + int i; + char **cn; + int *nc; + + if (allocatedMinCuts_ == 0) + allocatedMinCuts_ = 2; + else + allocatedMinCuts_ *= 2; + cn = (char**) lefMalloc(sizeof(char*) * allocatedMinCuts_); + nc = (int*) lefMalloc(sizeof(int) * allocatedMinCuts_); + for (i = 0; i < numMinCuts_; i++) { + cn[i] = cutLayerName_[i]; + nc[i] = numCuts_[i]; + } + if (numMinCuts_) { + lefFree((char*) (cutLayerName_)); + lefFree((char*) (numCuts_)); + } + cutLayerName_ = cn; + numCuts_ = nc; + } + cutLayerName_[numMinCuts_] = (char*) lefMalloc(strlen(name) + 1); + strcpy(cutLayerName_[numMinCuts_], CASE(name)); + numCuts_[numMinCuts_] = numCuts; + numMinCuts_ += 1; +} + +void +lefiNonDefault::end() +{ + // Return the callbacks to their normal state. + // lefrSetViaCbk((lefrViaCbkFnType)oldViaCbk_); + // lefrSetSpacingCbk((lefrSpacingCbkFnType)oldSpacingCbk_); + // lefrSetSpacingBeginCbk((lefrVoidCbkFnType)oldSpacingBeginCbk_); + // lefrSetSpacingEndCbk((lefrVoidCbkFnType)oldSpacingEndCbk_); + //lefrSetViaCbk(oldViaCbk); + //lefrSetSpacingCbk(oldSpacingCbk); + //lefrSetSpacingBeginCbk(oldSpacingBeginCbk); + //lefrSetSpacingEndCbk(oldSpacingEndCbk); + // pcr 909010 - global var lefData->nd is used to pass nondefault rule data + // lefrSetUserData(oldUserData_); + lefData->nd = 0; +} + +int +lefiNonDefault::numLayers() const +{ + return numLayers_; +} + +const char * +lefiNonDefault::layerName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0; + } + return layerName_[index]; +} + +int +lefiNonDefault::hasLayerWidth(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0; + } + return hasWidth_[index]; +} + +double +lefiNonDefault::layerWidth(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0.0; + } + return width_[index]; +} + +int +lefiNonDefault::hasLayerDiagWidth(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0; + } + return hasDiagWidth_[index]; +} + +double +lefiNonDefault::layerDiagWidth(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0.0; + } + return diagWidth_[index]; +} + +int +lefiNonDefault::hasLayerWireExtension(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0; + } + return hasWireExtension_[index]; +} + +int +lefiNonDefault::hasLayerSpacing(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0; + } + return hasSpacing_[index]; +} + +double +lefiNonDefault::layerWireExtension(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0.0; + } + return wireExtension_[index]; +} + +double +lefiNonDefault::layerSpacing(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0.0; + } + return spacing_[index]; +} + +int +lefiNonDefault::hasLayerResistance(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0; + } + return hasResistance_[index]; +} + +double +lefiNonDefault::layerResistance(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0.0; + } + return resistance_[index]; +} + +int +lefiNonDefault::hasLayerCapacitance(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0; + } + return hasCapacitance_[index]; +} + +double +lefiNonDefault::layerCapacitance(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0.0; + } + return capacitance_[index]; +} + +int +lefiNonDefault::hasLayerEdgeCap(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0; + } + return hasEdgeCap_[index]; +} + +double +lefiNonDefault::layerEdgeCap(int index) const +{ + char msg[160]; + if (index < 0 || index >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1402): The index number %d given for the NONDEFAULT LAYER is invalid.\nValid index is from 0 to %d", index, numLayers_); + lefiError(0, 1402, msg); + return 0.0; + } + return edgeCap_[index]; +} + +int +lefiNonDefault::numVias() const +{ + return numVias_; +} + +lefiVia * +lefiNonDefault::viaRule(int index) const +{ + char msg[160]; + if (index < 0 || index >= numVias_) { + sprintf(msg, "ERROR (LEFPARS-1403): The index number %d given for the NONDEFAULT VIA is invalid.\nValid index is from 0 to %d", index, numVias_); + lefiError(0, 1403, msg); + return 0; + } + return viaRules_[index]; +} + +int +lefiNonDefault::numSpacingRules() const +{ + return numSpacing_; +} + +lefiSpacing * +lefiNonDefault::spacingRule(int index) const +{ + char msg[160]; + if (index < 0 || index >= numSpacing_) { + sprintf(msg, "ERROR (LEFPARS-1404): The index number %d given for the NONDEFAULT SPACING is invalid.\nValid index is from 0 to %d", index, numSpacing_); + lefiError(0, 1404, msg); + return 0; + } + return spacingRules_[index]; +} + +const char * +lefiNonDefault::name() const +{ + return name_; +} + +int +lefiNonDefault::hasHardspacing() const +{ + return hardSpacing_; +} + +int +lefiNonDefault::numUseVia() const +{ + return numUseVias_; +} + +const char * +lefiNonDefault::viaName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numUseVias_) { + sprintf(msg, "ERROR (LEFPARS-1405): The index number %d given for the NONDEFAULT USE VIA is invalid.\nValid index is from 0 to %d", index, numUseVias_); + lefiError(0, 1405, msg); + return 0; + } + return useViaName_[index]; +} + +int +lefiNonDefault::numUseViaRule() const +{ + return numUseViaRules_; +} + +const char * +lefiNonDefault::viaRuleName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numUseViaRules_) { + sprintf(msg, "ERROR (LEFPARS-1406): The index number %d given for the NONDEFAULT USE VIARULE is invalid.\nValid index is from 0 to %d", index, numUseViaRules_); + lefiError(0, 1406, msg); + return 0; + } + return useViaRuleName_[index]; +} + +int +lefiNonDefault::numMinCuts() const +{ + return numMinCuts_; +} + +const char * +lefiNonDefault::cutLayerName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numMinCuts_) { + sprintf(msg, "ERROR (LEFPARS-1407): The index number %d given for the NONDEFAULT CUT is invalid.\nValid index is from 0 to %d", index, numMinCuts_); + lefiError(0, 1407, msg); + return 0; + } + return cutLayerName_[index]; +} + +int +lefiNonDefault::numCuts(int index) const +{ + char msg[160]; + if (index < 0 || index >= numMinCuts_) { + sprintf(msg, "ERROR (LEFPARS-1407): The index number %d given for the NONDEFAULT CUT is invalid.\nValid index is from 0 to %d", index, numMinCuts_); + lefiError(0, 1407, msg); + return 0; + } + return numCuts_[index]; +} + +void +lefiNonDefault::print(FILE *f) +{ + int i; + lefiSpacing *s; + lefiVia *v; + + fprintf(f, "Nondefault rule %s\n", + name()); + fprintf(f, "%d layers %d vias %d spacing rules\n", + numLayers(), + numVias(), + numSpacingRules()); + + for (i = 0; i < numLayers(); i++) { + fprintf(f, " Layer %s\n", layerName(i)); + if (hasLayerWidth(i)) + fprintf(f, " WIDTH %g\n", layerWidth(i)); + if (hasLayerDiagWidth(i)) + fprintf(f, " DIAGWIDTH %g\n", layerDiagWidth(i)); + if (hasLayerSpacing(i)) + fprintf(f, " SPACING %g\n", layerSpacing(i)); + if (hasLayerWireExtension(i)) + fprintf(f, " WIREEXTENSION %g", + layerWireExtension(i)); + if (hasLayerResistance(i)) + fprintf(f, " RESISTANCE RPERSQ %g\n", + layerResistance(i)); + if (hasLayerCapacitance(i)) + fprintf(f, " CAPACITANCE CPERSQDIST %g\n", + layerCapacitance(i)); + if (hasLayerEdgeCap(i)) + fprintf(f, " EDGECAPACITANCE %g\n", + layerEdgeCap(i)); + } + + for (i = 0; i < numVias(); i++) { + v = viaRule(i); + v->print(f); + } + + for (i = 0; i < numSpacingRules(); i++) { + s = spacingRule(i); + s->print(f); + } +} + +int +lefiNonDefault::numProps() const +{ + return numProps_; +} + +void +lefiNonDefault::addProp(const char *name, + const char *value, + const char type) +{ + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + int max; + int lim = numProps_; + char **nn; + char **nv; + double *nD; + char *nt; + + if (propsAllocated_ == 0) + max = propsAllocated_ = 2; + else + max = propsAllocated_ *= 2; + nn = (char**) lefMalloc(sizeof(char*) * max); + nv = (char**) lefMalloc(sizeof(char*) * max); + nD = (double*) lefMalloc(sizeof(double) * max); + nt = (char*) lefMalloc(sizeof(char) * max); + for (i = 0; i < lim; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nD[i] = dvalues_[i]; + nt[i] = types_[i]; + } + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + names_ = nn; + values_ = nv; + dvalues_ = nD; + types_ = nt; + } + names_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(names_[numProps_], name); + len = strlen(value) + 1; + values_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(values_[numProps_], value); + dvalues_[numProps_] = 0; + types_[numProps_] = type; + numProps_ += 1; +} + +void +lefiNonDefault::addNumProp(const char *name, + const double d, + const char *value, + const char type) +{ + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + int max; + int lim = numProps_; + char **nn; + char **nv; + double *nD; + char *nt; + + if (propsAllocated_ == 0) + max = propsAllocated_ = 2; + else + max = propsAllocated_ *= 2; + nn = (char**) lefMalloc(sizeof(char*) * max); + nv = (char**) lefMalloc(sizeof(char*) * max); + nD = (double*) lefMalloc(sizeof(double) * max); + nt = (char*) lefMalloc(sizeof(char) * max); + for (i = 0; i < lim; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nD[i] = dvalues_[i]; + nt[i] = types_[i]; + } + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + names_ = nn; + values_ = nv; + dvalues_ = nD; + types_ = nt; + } + names_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(names_[numProps_], name); + len = strlen(value) + 1; + values_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(values_[numProps_], value); + dvalues_[numProps_] = d; + types_[numProps_] = type; + numProps_ += 1; +} + +const char * +lefiNonDefault::propName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1408): The index number %d given for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + lefiError(0, 1408, msg); + return 0; + } + return names_[index]; +} + +const char * +lefiNonDefault::propValue(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1408): The index number %d given for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + lefiError(0, 1408, msg); + return 0; + } + return values_[index]; +} + +double +lefiNonDefault::propNumber(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1408): The index number %d given for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + lefiError(0, 1408, msg); + return 0; + } + return dvalues_[index]; +} + +const char +lefiNonDefault::propType(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1408): The index number %d given for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + lefiError(0, 1408, msg); + return 0; + } + return types_[index]; +} + +int +lefiNonDefault::propIsNumber(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1408): The index number %d given for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + lefiError(0, 1408, msg); + return 0; + } + return dvalues_[index] ? 1 : 0; +} + +int +lefiNonDefault::propIsString(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1408): The index number %d given for the NONDEFAULT PROPERTY is invalid.\nValid index is from 0 to %d", index, numProps_); + lefiError(0, 1408, msg); + return 0; + } + return dvalues_[index] ? 0 : 1; +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiNonDefault.hpp b/lefdef/src/lef/lef/lefiNonDefault.hpp new file mode 100644 index 00000000..7745af7d --- /dev/null +++ b/lefdef/src/lef/lef/lefiNonDefault.hpp @@ -0,0 +1,178 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiNonDefault_h +#define lefiNonDefault_h + +#include +#include "lefiKRDefs.hpp" +#include "lefiVia.hpp" +#include "lefiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class lefiNonDefault { +public: + lefiNonDefault(); + void Init(); + + void Destroy(); + ~lefiNonDefault(); + + void setName(const char* name); + void addLayer(const char* name); + void addWidth(double num); + void addWireExtension(double num); + void addSpacing(double num); + void addSpacingRule(lefiSpacing* s); + void addResistance(double num); + void addCapacitance(double num); + void addEdgeCap(double num); + void addViaRule(lefiVia* v); + void addDiagWidth(double num); // 5.6 + void end(); + void clear(); + void addProp(const char* name, const char* value, const char type); + void addNumProp(const char* name, const double d, + const char* value, const char type); + void setHardspacing(); // 5.6 + void addUseVia(const char* name); // 5.6 + void addUseViaRule(const char* name); // 5.6 + void addMinCuts(const char* name, int numCuts); // 5.6 + + const char* name() const; + int hasHardspacing() const; // 5.6 + + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + // A non default rule can have one or more layers. + // The layer information is kept in an array. + int numLayers() const ; + const char* layerName(int index) const ; + int hasLayerWidth(int index) const; + double layerWidth(int index) const ; + int hasLayerSpacing(int index) const ; + double layerSpacing(int index) const ; + int hasLayerWireExtension(int index) const ; + double layerWireExtension(int index) const ; + int hasLayerResistance(int index) const; // obsolete in 5.6 + double layerResistance(int index) const; // obsolete in 5.6 + int hasLayerCapacitance(int index) const; // obsolete in 5.6 + double layerCapacitance(int index) const; // obsolete in 5.6 + int hasLayerEdgeCap(int index) const; // obsolete in 5.6 + double layerEdgeCap(int index) const; // obsolete in 5.6 + int hasLayerDiagWidth(int index) const; // 5.6 + double layerDiagWidth(int index) const; // 5.6 + + // A non default rule can have one or more vias. + // These routines return the via info. + int numVias() const ; + lefiVia* viaRule(int index) const ; + + // A non default rule can have one or more spacing rules. + // These routines return the that info. + int numSpacingRules() const ; + lefiSpacing* spacingRule(int index) const ; + + int numUseVia() const; // 5.6 + const char* viaName(int index) const; // 5.6 + int numUseViaRule() const; // 5.6 + const char* viaRuleName(int index) const; // 5.6 + int numMinCuts() const; // 5.6 + const char* cutLayerName(int index) const; // 5.6 + int numCuts(int index) const; // 5.6 + + // Debug print + void print(FILE* f); + +protected: + int nameSize_; + char* name_; + + // Layer information + int numLayers_; + int layersAllocated_; + char** layerName_; + double* width_; + double* spacing_; + double* wireExtension_; + char* hasWidth_; + char* hasSpacing_; + char* hasWireExtension_; + + // 5.4 + double* resistance_; + double* capacitance_; + double* edgeCap_; + char* hasResistance_; + char* hasCapacitance_; + char* hasEdgeCap_; + + double* diagWidth_; // 5.6 + char* hasDiagWidth_; // 5.6 + + int numVias_; + int allocatedVias_; + lefiVia** viaRules_; + + int numSpacing_; + int allocatedSpacing_; + lefiSpacing** spacingRules_; + + int hardSpacing_; // 5.6 + int numUseVias_; // 5.6 + int allocatedUseVias_; // 5.6 + char** useViaName_; // 5.6 + int numUseViaRules_; // 5.6 + int allocatedUseViaRules_; // 5.6 + char** useViaRuleName_; // 5.6 + int numMinCuts_; // 5.6 + int allocatedMinCuts_; // 5.6 + char** cutLayerName_; // 5.6 + int* numCuts_; // 5.6 + + int numProps_; + int propsAllocated_; + char** names_; + char** values_; + double* dvalues_; + char* types_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiProp.cpp b/lefdef/src/lef/lef/lefiProp.cpp new file mode 100644 index 00000000..c2cc117b --- /dev/null +++ b/lefdef/src/lef/lef/lefiProp.cpp @@ -0,0 +1,259 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "lefiProp.hpp" +#include "lefiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +lefiProp::lefiProp() +: propType_(NULL), + propName_(NULL), + nameSize_(0), + hasRange_(0), + hasNumber_(0), + hasNameMapString_(0), + dataType_(0), + stringData_(NULL), + stringLength_(0), + left_(0.0), + right_(0.0), + d_(0.0) +{ + Init(); +} + +void +lefiProp::Init() +{ + stringLength_ = 16; + stringData_ = (char*) lefMalloc(16); + nameSize_ = 16; + propName_ = (char*) lefMalloc(16); + clear(); +} + +void +lefiProp::Destroy() +{ + lefFree(stringData_); + lefFree(propName_); +} + +lefiProp::~lefiProp() +{ + Destroy(); +} + +void +lefiProp::setPropType(const char *typ, + const char *string) +{ + int len; + propType_ = (char*) typ; + if ((len = strlen(string) + 1) > nameSize_) + bumpName(len); + strcpy(propName_, CASE(string)); +} + +void +lefiProp::setRange(double left, + double right) +{ + hasRange_ = 1; + left_ = left; + right_ = right; +} + +void +lefiProp::setNumber(double d) +{ + hasNumber_ = 1; + d_ = d; +} + +void +lefiProp::setPropInteger() +{ + dataType_ = 'I'; +} + +void +lefiProp::setPropReal() +{ + dataType_ = 'R'; +} + +void +lefiProp::setPropString() +{ + dataType_ = 'S'; +} + +void +lefiProp::setPropQString(const char *string) +{ + int len; + dataType_ = 'Q'; + if ((len = strlen(string) + 1) > stringLength_) + bumpSize(len); + strcpy(stringData_, CASE(string)); +} + +void +lefiProp::setPropNameMapString(const char *string) +{ + int len; + dataType_ = 'N'; + hasNameMapString_ = 1; + if ((len = strlen(string) + 1) > stringLength_) + bumpSize(len); + strcpy(stringData_, CASE(string)); +} + +const char * +lefiProp::string() const +{ + return stringData_; +} + +const char * +lefiProp::propType() const +{ + return propType_; +} + +int +lefiProp::hasNumber() const +{ + return (int) (hasNumber_); +} + +int +lefiProp::hasRange() const +{ + return (int) (hasRange_); +} + +double +lefiProp::number() const +{ + return d_; +} + +double +lefiProp::left() const +{ + return left_; +} + +double +lefiProp::right() const +{ + return right_; +} + +void +lefiProp::bumpSize(int size) +{ + lefFree(stringData_); + stringData_ = (char*) lefMalloc(size); + stringLength_ = size; + *(stringData_) = '\0'; +} + +void +lefiProp::bumpName(int size) +{ + lefFree(propName_); + propName_ = (char*) lefMalloc(size); + nameSize_ = size; + *(propName_) = '\0'; +} + +void +lefiProp::clear() +{ + if (stringData_) + *(stringData_) = '\0'; + if (stringData_) + *(propName_) = '\0'; + propType_ = 0; + hasRange_ = 0; + hasNumber_ = 0; + hasNameMapString_ = 0; + dataType_ = 'B'; // bogus + d_ = left_ = right_ = 0.0; +} + +int +lefiProp::hasString() const +{ + return *(stringData_) ? 1 : 0; +} + +int +lefiProp::hasNameMapString() const +{ + return (hasNameMapString_) ? 1 : 0; +} + +const char * +lefiProp::propName() const +{ + return (propName_); +} + +char +lefiProp::dataType() const +{ + return (dataType_); +} + +void +lefiProp::print(FILE *f) const +{ + fprintf(f, "Prop type '%s'\n", propType()); + if (hasString()) { + fprintf(f, " string '%s'\n", string()); + } + if (hasNumber()) { + fprintf(f, " number %5.2f\n", number()); + } + if (hasRange()) { + fprintf(f, " range %5.2f - %5.2f\n", + left(), right()); + } +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiProp.hpp b/lefdef/src/lef/lef/lefiProp.hpp new file mode 100644 index 00000000..ef6338a9 --- /dev/null +++ b/lefdef/src/lef/lef/lefiProp.hpp @@ -0,0 +1,96 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiProp_h +#define lefiProp_h + +#include "lefiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Struct holds the data for one property. +class lefiProp { +public: + lefiProp(); + void Init(); + + void Destroy(); + ~lefiProp(); + + void setPropType(const char* typ, const char* string); + void setRange(double left, double right); + void setNumber(double num); + void setPropInteger(); + void setPropReal(); + void setPropString(); + void setPropQString(const char* string); + void setPropNameMapString(const char* string); + void clear(); + + const char* string() const; + const char* propType() const; + const char* propName() const; + char dataType() const; + // either I:integer R:real S:string Q:quotedstring + // N:property name is not defined in the property definition section + int hasNumber() const; + int hasRange() const; + int hasString() const; + int hasNameMapString() const; + double number() const; + double left() const; + double right() const; + + void bumpSize(int size); + void bumpName(int size); + + void print(FILE* f) const; + +protected: + char* propType_; // "design" "net" "macro" ... + char* propName_; // name. + int nameSize_; // allocated size of name. + char hasRange_; // either 0:NO or 1:YES. + char hasNumber_; // either 0:NO or 1:YES. + char hasNameMapString_; + char dataType_; // either I:integer R:real S:string Q:quotedstring. + // N:property name is not defined. + char* stringData_; // if it is a string the data is here. + int stringLength_; // allocated size of stringData. + double left_; + double right_; // if it has a range the numbers are here. + double d_; // if it is a real or int the number is here. +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiPropType.cpp b/lefdef/src/lef/lef/lefiPropType.cpp new file mode 100644 index 00000000..06c99a1d --- /dev/null +++ b/lefdef/src/lef/lef/lefiPropType.cpp @@ -0,0 +1,142 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "lefiPropType.hpp" +#include "lefiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +lefiPropType::lefiPropType() +: numProperties_(0), + propertiesAllocated_(0), + propNames_(NULL), + propTypes_(NULL) +{ + Init(); +} + +void +lefiPropType::Init() +{ + numProperties_ = 0; + propertiesAllocated_ = 0; + propNames_ = 0; + propTypes_ = 0; +} + +void +lefiPropType::Clear() +{ + int i; + + for (i = 0; i < numProperties_; i++) { + free(propNames_[i]); + } + numProperties_ = 0; + propertiesAllocated_ = 0; +} + +void +lefiPropType::Destroy() +{ + Clear(); + if (propNames_) + free(propNames_); + if (propTypes_) + free(propTypes_); +} + +lefiPropType::~lefiPropType() +{ + Destroy(); +} + +void +lefiPropType::setPropType(const char *name, + const char type) +{ + int len; + + if (numProperties_ == propertiesAllocated_) + bumpProps(); + len = strlen(name) + 1; + propNames_[numProperties_] = (char*) malloc(len); + strcpy(propNames_[numProperties_], CASE(name)); + propTypes_[numProperties_] = type; + numProperties_ += 1; +} + +void +lefiPropType::bumpProps() +{ + int lim = propertiesAllocated_; + int news; + char **newpn; + char *newt; + + news = lim ? lim + lim : 2; + + newpn = (char**) malloc(sizeof(char*) * news); + newt = (char*) malloc(sizeof(char) * news); + + lim = propertiesAllocated_ = news; + + if (lim > 2) { + int i; + for (i = 0; i < numProperties_; i++) { + newpn[i] = propNames_[i]; + newt[i] = propTypes_[i]; + } + free((char*) (propNames_)); + free((char*) (propTypes_)); + } + propNames_ = newpn; + propTypes_ = newt; +} + +const char +lefiPropType::propType(char *name) const +{ + int i; + + // Name is NULL, error + if (!name) + return ('N'); + + for (i = 0; i < numProperties_; i++) { + if (strcmp(name, propNames_[i]) == 0) + return (propTypes_[i]); // found the prop name + } + return ('N'); // Can't found the name +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiPropType.hpp b/lefdef/src/lef/lef/lefiPropType.hpp new file mode 100644 index 00000000..88249a6d --- /dev/null +++ b/lefdef/src/lef/lef/lefiPropType.hpp @@ -0,0 +1,65 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiPropType_h +#define lefiPropType_h + +#include "lefiKRDefs.hpp" +#include + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Struct holds the data type for one property, if the property is +// either REAL or INTEGER. +class lefiPropType { +public: + lefiPropType(); + void Init(); + + void Destroy(); + ~lefiPropType(); + + void setPropType(const char* name, const char type); + void Clear(); + + const char propType(char* name) const; + void bumpProps(); + +protected: + int numProperties_; + int propertiesAllocated_; + char** propNames_; // name. + char* propTypes_; // 'R' == "REAL", 'I' == "INTEGER" +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiTBExt.cpp b/lefdef/src/lef/lef/lefiTBExt.cpp new file mode 100644 index 00000000..e6500be9 --- /dev/null +++ b/lefdef/src/lef/lef/lefiTBExt.cpp @@ -0,0 +1,158 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include + +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +static char tagName[200] = "CDNDESYS"; +static char tagNum[24] = "CDNCHKSM"; + +time_t +lefiCalcTime() +{ + // Calculate the number for the given date + // The date is 5/1/99 + + /* Used to calculate the UTC for a time bomb date in libcai.a + ** see caiInitWork() function + */ + struct tm ts; + + ts.tm_sec = 0; + ts.tm_min = 0; + ts.tm_hour = 0; + ts.tm_mday = 1; + ts.tm_mon = 5; + ts.tm_year = 1999 - 1900; + ts.tm_wday = 0; + ts.tm_yday = 0; + ts.tm_isdst = 0; + + /* + printf("May 1, 1999 in UTC is %d\n", mktime(&ts)); + ts.tm_mday = 2; + printf("May 2, 1999 in UTC is %d\n", mktime(&ts)); + + printf("Right now is %d\n", time(0)); + */ + return (mktime(&ts)); +} + +// ***************************************************************************** +// lefiTimeBomb +// ***************************************************************************** + +// Check the current date against the date given +int +lefiValidTime() +{ + /* Take the timebomb out for now + time_t bombTime = lefiCalcTime(); + time_t bombTime = 928224000; + time_t curTime; + + curTime = time((time_t *)NULL); + if (curTime == -1 || curTime > bombTime) + { + ()printf("The demonstration version of this code is no longer\n" + "available. Please contact your Lef/Def Parser\n" + "software provider for up to date code.\n"); + return(0); + } + */ + return (1); +} + +// ***************************************************************************** +// Check if the company is authorized to use the reader +// ***************************************************************************** + +int +lefiValidUser() +{ + int j = 0, i; + + for (i = 0; i < (int) strlen(tagName); i++) { + j += (int) tagName[i]; + } + + if (atoi(tagNum) == j) + return (1); + return (0); +} + +// ***************************************************************************** +// Return user name from tagName +// ***************************************************************************** + +char * +lefiUser() +{ + char *tmpUser = tagName; + tmpUser = tmpUser + 8; + if (strncmp(tmpUser, " ", 5) == 0) + return ((char*) "Cadence Design Systems"); + return (tmpUser); +} + +// Convert the orient from integer to string +// +// ***************************************************************************** +char * +lefiOrientStr(int orient) +{ + switch (orient) { + case 0: + return ((char*) "N"); + case 1: + return ((char*) "W"); + case 2: + return ((char*) "S"); + case 3: + return ((char*) "E"); + case 4: + return ((char*) "FN"); + case 5: + return ((char*) "FW"); + case 6: + return ((char*) "FS"); + case 7: + return ((char*) "FE"); + }; + return ((char*) ""); +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiUnits.cpp b/lefdef/src/lef/lef/lefiUnits.cpp new file mode 100644 index 00000000..6af2e5c9 --- /dev/null +++ b/lefdef/src/lef/lef/lefiUnits.cpp @@ -0,0 +1,283 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "lefiUnits.hpp" +#include "lefiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ***************************************************************************** +// lefiUnits +// ***************************************************************************** + +lefiUnits::lefiUnits() +: hasDatabase_(0), + hasCapacitance_(0), + hasResistance_(0), + hasTime_(0), + hasPower_(0), + hasCurrent_(0), + hasVoltage_(0), + hasFrequency_(0), + databaseName_(NULL), + databaseNumber_(0.0), + capacitance_(0.0), + resistance_(0.0), + power_(0.0), + time_(0.0), + current_(0.0), + voltage_(0.0), + frequency_(0.0) +{ + Init(); +} + +void +lefiUnits::Init() +{ + clear(); +} + +void +lefiUnits::Destroy() +{ + clear(); +} + +lefiUnits::~lefiUnits() +{ + Destroy(); +} + +void +lefiUnits::setDatabase(const char *name, + double num) +{ + int len = strlen(name) + 1; + databaseName_ = (char*) lefMalloc(len); + strcpy(databaseName_, CASE(name)); + databaseNumber_ = num; + hasDatabase_ = 1; +} + +void +lefiUnits::clear() +{ + if (databaseName_) + lefFree(databaseName_); + hasTime_ = 0; + hasCapacitance_ = 0; + hasResistance_ = 0; + hasPower_ = 0; + hasCurrent_ = 0; + hasVoltage_ = 0; + hasDatabase_ = 0; + hasFrequency_ = 0; + databaseName_ = 0; +} + +void +lefiUnits::setTime(double num) +{ + hasTime_ = 1; + time_ = num; +} + +void +lefiUnits::setCapacitance(double num) +{ + hasCapacitance_ = 1; + capacitance_ = num; +} + +void +lefiUnits::setResistance(double num) +{ + hasResistance_ = 1; + resistance_ = num; +} + +void +lefiUnits::setPower(double num) +{ + hasPower_ = 1; + power_ = num; +} + +void +lefiUnits::setCurrent(double num) +{ + hasCurrent_ = 1; + current_ = num; +} + +void +lefiUnits::setVoltage(double num) +{ + hasVoltage_ = 1; + voltage_ = num; +} + +void +lefiUnits::setFrequency(double num) +{ + hasFrequency_ = 1; + frequency_ = num; +} + +int +lefiUnits::hasDatabase() const +{ + return hasDatabase_; +} + +int +lefiUnits::hasCapacitance() const +{ + return hasCapacitance_; +} + +int +lefiUnits::hasResistance() const +{ + return hasResistance_; +} + +int +lefiUnits::hasPower() const +{ + return hasPower_; +} + +int +lefiUnits::hasCurrent() const +{ + return hasCurrent_; +} + +int +lefiUnits::hasVoltage() const +{ + return hasVoltage_; +} + +int +lefiUnits::hasFrequency() const +{ + return hasFrequency_; +} + +int +lefiUnits::hasTime() const +{ + return hasTime_; +} + +const char * +lefiUnits::databaseName() const +{ + return databaseName_; +} + +double +lefiUnits::databaseNumber() const +{ + return databaseNumber_; +} + +double +lefiUnits::capacitance() const +{ + return capacitance_; +} + +double +lefiUnits::resistance() const +{ + return resistance_; +} + +double +lefiUnits::power() const +{ + return power_; +} + +double +lefiUnits::current() const +{ + return current_; +} + +double +lefiUnits::time() const +{ + return time_; +} + +double +lefiUnits::voltage() const +{ + return voltage_; +} + +double +lefiUnits::frequency() const +{ + return frequency_; +} + +void +lefiUnits::print(FILE *f) const +{ + fprintf(f, "Units:\n"); + if (hasTime()) + fprintf(f, " %g nanoseconds\n", time()); + if (hasCapacitance()) + fprintf(f, " %g picofarads\n", capacitance()); + if (hasResistance()) + fprintf(f, " %g ohms\n", resistance()); + if (hasPower()) + fprintf(f, " %g milliwatts\n", power()); + if (hasCurrent()) + fprintf(f, " %g milliamps\n", current()); + if (hasVoltage()) + fprintf(f, " %g volts\n", voltage()); + if (hasFrequency()) + fprintf(f, " %g frequency\n", frequency()); + if (hasDatabase()) + fprintf(f, " %s %g\n", databaseName(), + databaseNumber()); +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiUnits.hpp b/lefdef/src/lef/lef/lefiUnits.hpp new file mode 100644 index 00000000..12b67e6d --- /dev/null +++ b/lefdef/src/lef/lef/lefiUnits.hpp @@ -0,0 +1,102 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiUnits_h +#define lefiUnits_h + +#include +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class lefiUnits { +public: + lefiUnits(); + void Init(); + + void Destroy(); + ~lefiUnits(); + + void setDatabase(const char* name, double num); + void clear(); + void setTime(double num); + void setCapacitance(double num); + void setResistance(double num); + void setPower(double num); + void setCurrent(double num); + void setVoltage(double num); + void setFrequency(double num); + + int hasDatabase() const; + int hasCapacitance()const; + int hasResistance() const; + int hasTime() const; + int hasPower() const; + int hasCurrent() const; + int hasVoltage() const; + int hasFrequency() const; + + const char* databaseName() const; + double databaseNumber() const; + double capacitance() const; + double resistance() const; + double time() const; + double power() const; + double current() const; + double voltage() const; + double frequency() const; + + // Debug print + void print(FILE* f) const ; + +protected: + int hasDatabase_; + int hasCapacitance_; + int hasResistance_; + int hasTime_; + int hasPower_; + int hasCurrent_; + int hasVoltage_; + int hasFrequency_; + char* databaseName_; + double databaseNumber_; + double capacitance_; + double resistance_; + double power_; + double time_; + double current_; + double voltage_; + double frequency_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiUser.hpp b/lefdef/src/lef/lef/lefiUser.hpp new file mode 100644 index 00000000..4d73944d --- /dev/null +++ b/lefdef/src/lef/lef/lefiUser.hpp @@ -0,0 +1,63 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +// User header file for the LEF Interface. This includes +// all of the header files which are relevant to both the +// reader and the writer. +// +// lefrReader.h and lefwWriter.h include this file, so that +// an application only needs to include either lefrReader.h(pp) +// or lefwWriter.h(pp). +// + +#ifndef LEFI_USER_H +#define LEFI_USER_H + +#include "lefiDebug.hpp" +#include "lefiUnits.hpp" +#include "lefiLayer.hpp" +#include "lefiVia.hpp" +#include "lefiViaRule.hpp" +#include "lefiMisc.hpp" +#include "lefiNonDefault.hpp" +#include "lefiMacro.hpp" +#include "lefiArray.hpp" +#include "lefiCrossTalk.hpp" +#include "lefiProp.hpp" +#include "lefiPropType.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// NEW CALLBACK add the reference here + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiUtil.hpp b/lefdef/src/lef/lef/lefiUtil.hpp new file mode 100644 index 00000000..6d94f82d --- /dev/null +++ b/lefdef/src/lef/lef/lefiUtil.hpp @@ -0,0 +1,61 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiUtil_h +#define lefiUtil_h + +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Structure to return Macro data to FE +struct lefiPoints { + double x; + double y; +}; + +typedef struct lefiPoints lefiNum; + +//int lefiValidTime(); +extern int lefiValidUser(); + +extern char* lefiUser(); + +extern char* lefiOrientStr(int orient); + +extern double convert_name2num(const char *versionName); + +extern bool validateMaskNumber(int num); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif + diff --git a/lefdef/src/lef/lef/lefiVia.cpp b/lefdef/src/lef/lef/lefiVia.cpp new file mode 100644 index 00000000..29046f5a --- /dev/null +++ b/lefdef/src/lef/lef/lefiVia.cpp @@ -0,0 +1,1460 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include "lex.h" +#include "lefiVia.hpp" +#include "lefiDebug.hpp" +#include "lefiUtil.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ***************************************************************************** +// lefiViaLayer +// ***************************************************************************** + +lefiViaLayer::lefiViaLayer() +: name_(NULL), + rectColorMask_(NULL), + polyColorMask_(NULL), + numRects_(0), + rectsAllocated_(0), + xl_(NULL), + yl_(NULL), + xh_(NULL), + yh_(NULL), + numPolys_(0), + polysAllocated_(0), + polygons_(NULL) +{ + Init(); +} + +void +lefiViaLayer::Init() +{ + name_ = 0; + rectsAllocated_ = 2; + numRects_ = 0; + rectColorMask_ = (int*) lefMalloc(sizeof(int) * 2); + polyColorMask_ = (int*) lefMalloc(sizeof(int) * 2); + xl_ = (double*) lefMalloc(sizeof(double) * 2); + yl_ = (double*) lefMalloc(sizeof(double) * 2); + xh_ = (double*) lefMalloc(sizeof(double) * 2); + yh_ = (double*) lefMalloc(sizeof(double) * 2); + polysAllocated_ = 2; + numPolys_ = 0; + polygons_ = ((lefiGeomPolygon**) + lefMalloc(sizeof(lefiGeomPolygon*) * 2)); +} + +void +lefiViaLayer::Destroy() +{ + if (xl_) { + lefFree((char*) (xl_)); + lefFree((char*) (yl_)); + lefFree((char*) (xh_)); + lefFree((char*) (yh_)); + } + if (polygons_) { + lefiGeomPolygon *geom; + for (int i = 0; i < numPolys_; i++) { + geom = polygons_[i]; + lefFree((char*) (geom->x)); + lefFree((char*) (geom->y)); + lefFree((char*) (polygons_[i])); + } + lefFree((char*) (polygons_)); + + polygons_ = 0; + numPolys_ = 0; + } + + lefFree(name_); + lefFree((char*) (rectColorMask_)); + lefFree((char*) (polyColorMask_)); +} + +lefiViaLayer::~lefiViaLayer() +{ + Destroy(); +} + +void +lefiViaLayer::setName(const char *name) +{ + int len = strlen(name) + 1; + name_ = (char*) lefMalloc(len); + strcpy(name_, CASE(name)); +} + +void +lefiViaLayer::addRect(int colorMask, + double xl, + double yl, + double xh, + double yh) +{ + if (numRects_ == rectsAllocated_) { + int i; + double *newxl; + double *newyl; + double *newxh; + double *newyh; + int *rectMask; + + rectsAllocated_ = (rectsAllocated_ == 0) ? + 2 : rectsAllocated_ * 2; + newxl = (double*) lefMalloc(sizeof(double) * rectsAllocated_); + newyl = (double*) lefMalloc(sizeof(double) * rectsAllocated_); + newxh = (double*) lefMalloc(sizeof(double) * rectsAllocated_); + newyh = (double*) lefMalloc(sizeof(double) * rectsAllocated_); + rectMask = (int*) lefMalloc(sizeof(int) * rectsAllocated_); + + for (i = 0; i < numRects_; i++) { + newxl[i] = xl_[i]; + newyl[i] = yl_[i]; + newxh[i] = xh_[i]; + newyh[i] = yh_[i]; + rectMask[i] = rectColorMask_[i]; + } + + if (xl_) { + lefFree((char*) (xl_)); + lefFree((char*) (yl_)); + lefFree((char*) (xh_)); + lefFree((char*) (yh_)); + lefFree((char*) (rectColorMask_)); + } + + xl_ = newxl; + yl_ = newyl; + xh_ = newxh; + yh_ = newyh; + rectColorMask_ = rectMask; + } + + xl_[numRects_] = xl; + yl_[numRects_] = yl; + xh_[numRects_] = xh; + yh_[numRects_] = yh; + rectColorMask_[numRects_] = colorMask; + + numRects_ += 1; +} + +void +lefiViaLayer::addPoly(int colorMask, + lefiGeometries *geom) +{ + if (numPolys_ == polysAllocated_) { + int i; + lefiGeomPolygon **poly; + int *polyMask; + + polysAllocated_ = (polysAllocated_ == 0) ? + 2 : polysAllocated_ * 2; + poly = (lefiGeomPolygon**) lefMalloc(sizeof(lefiGeomPolygon*) * + polysAllocated_); + polyMask = (int*) lefMalloc(sizeof(int) * polysAllocated_); + + for (i = 0; i < numPolys_; i++) { + poly[i] = polygons_[i]; + polyMask[i] = polyColorMask_[i]; + } + + if (polygons_) { + lefFree((char*) (polygons_)); + lefFree((char*) (polyColorMask_)); + } + + polygons_ = poly; + polyColorMask_ = polyMask; + } + + polygons_[numPolys_] = geom->getPolygon(0); + polyColorMask_[numPolys_] = colorMask; + + numPolys_ += 1; +} + +int +lefiViaLayer::numRects() +{ + return numRects_; +} + +int +lefiViaLayer::numPolygons() +{ + return numPolys_; +} + +lefiViaLayer * +lefiViaLayer::clone() +{ + lefiViaLayer *vl = (lefiViaLayer*) lefMalloc(sizeof(lefiViaLayer)); + int i, j; + if (numRects_ > 0) { + vl->xl_ = (double*) lefMalloc(sizeof(double) * numRects_); + vl->yl_ = (double*) lefMalloc(sizeof(double) * numRects_); + vl->xh_ = (double*) lefMalloc(sizeof(double) * numRects_); + vl->yh_ = (double*) lefMalloc(sizeof(double) * numRects_); + vl->rectColorMask_ = (int*) lefMalloc(sizeof(int) * numRects_); + vl->numRects_ = numRects_; + vl->rectsAllocated_ = rectsAllocated_; + + for (i = 0; i < numRects_; i++) { + vl->xl_[i] = xl_[i]; + vl->yl_[i] = yl_[i]; + vl->xh_[i] = xh_[i]; + vl->yh_[i] = yh_[i]; + vl->rectColorMask_[i] = rectColorMask_[i]; + } + } else { + vl->xl_ = 0; + vl->yl_ = 0; + vl->xh_ = 0; + vl->yh_ = 0; + vl->rectColorMask_ = 0; + vl->numRects_ = numRects_; + vl->rectsAllocated_ = rectsAllocated_; + } + + vl->numPolys_ = numPolys_; + vl->polysAllocated_ = polysAllocated_; + vl->polygons_ = (lefiGeomPolygon**) + lefMalloc(sizeof(lefiGeomPolygon*) * polysAllocated_); + + if (numPolys_ > 0) { + vl->polyColorMask_ = (int*) lefMalloc(sizeof(int) * numPolys_); + } else { + vl->polyColorMask_ = 0; + } + + for (i = 0; i < numPolys_; i++) { + vl->polygons_[i] = (lefiGeomPolygon*) lefMalloc(sizeof(lefiGeomPolygon)); + vl->polygons_[i]->numPoints = polygons_[i]->numPoints; + vl->polygons_[i]->x = (double*) lefMalloc(sizeof(double) * + polygons_[i]->numPoints); + vl->polygons_[i]->y = (double*) lefMalloc(sizeof(double) * + polygons_[i]->numPoints); + vl->polygons_[i]->colorMask = polygons_[i]->colorMask; + vl->polyColorMask_[i] = polyColorMask_[i]; + + for (j = 0; j < polygons_[i]->numPoints; j++) { + vl->polygons_[i]->x[j] = polygons_[i]->x[j]; + vl->polygons_[i]->y[j] = polygons_[i]->y[j]; + } + /* + vl->polygons_[i] = polygons_[i]; + */ + } + vl->name_ = (char*) lefMalloc(strlen(name_) + 1); + strcpy(vl->name_, name_); + return vl; +} + +char * +lefiViaLayer::name() +{ + return name_; +} + +int +lefiViaLayer::rectColorMask(int index) +{ + char msg[160]; + + if (index < 0 || index >= numRects_) { + sprintf(msg, "ERROR (LEFPARS-1420): The index number %d given for the VIA LAYER RECTANGLE is invalid.\nValid index is from 0 to %d", index, numRects_); + lefiError(0, 1420, msg); + return 0; + } + + return rectColorMask_[index]; +} + +int +lefiViaLayer::polyColorMask(int index) +{ + char msg[160]; + + if (index < 0 || index >= numPolys_) { + sprintf(msg, "ERROR (LEFPARS-1420): The index number %d given for the VIA LAYER POLYGON is invalid.\nValid index is from 0 to %d", index, numPolys_); + lefiError(0, 1420, msg); + return 0; + } + + return polyColorMask_[index]; +} + +double +lefiViaLayer::xl(int index) +{ + char msg[160]; + if (index < 0 || index >= numRects_) { + sprintf(msg, "ERROR (LEFPARS-1420): The index number %d given for the VIA LAYER RECTANGLE is invalid.\nValid index is from 0 to %d", index, numRects_); + lefiError(0, 1420, msg); + return 0; + } + return xl_[index]; +} + +double +lefiViaLayer::yl(int index) +{ + char msg[160]; + if (index < 0 || index >= numRects_) { + sprintf(msg, "ERROR (LEFPARS-1420): The index number %d given for the VIA LAYER RECTANGLE is invalid.\nValid index is from 0 to %d", index, numRects_); + lefiError(0, 1420, msg); + return 0; + } + return yl_[index]; +} + +double +lefiViaLayer::xh(int index) +{ + char msg[160]; + if (index < 0 || index >= numRects_) { + sprintf(msg, "ERROR (LEFPARS-1420): The index number %d given for the VIA LAYER RECTANGLE is invalid.\nValid index is from 0 to %d", index, numRects_); + lefiError(0, 1420, msg); + return 0; + } + return xh_[index]; +} + +double +lefiViaLayer::yh(int index) +{ + char msg[160]; + if (index < 0 || index >= numRects_) { + sprintf(msg, "ERROR (LEFPARS-1420): The index number %d given for the VIA LAYER RECTANGLE is invalid.\nValid index is from 0 to %d", index, numRects_); + lefiError(0, 1420, msg); + return 0; + } + return yh_[index]; +} + +lefiGeomPolygon * +lefiViaLayer::getPolygon(int index) const +{ + return polygons_[index]; +} + +// ***************************************************************************** +// lefiVia +// ***************************************************************************** + +lefiVia::lefiVia() +: name_(NULL), + nameSize_(0), + hasDefault_(0), + hasGenerated_(0), + hasResistance_(0), + hasForeignPnt_(0), + hasTopOfStack_(0), + numProps_(0), + propsAllocated_(0), + propName_(NULL), + propValue_(NULL), + propDValue_(NULL), + propType_(NULL), + numLayers_(0), + layersAllocated_(0), + layers_(NULL), + resistance_(0.0), + foreign_(NULL), + foreignX_(0.0), + foreignY_(0.0), + foreignOrient_(0), + viaRuleName_(NULL), + xSize_(0.0), + ySize_(0.0), + botLayer_(NULL), + cutLayer_(NULL), + topLayer_(NULL), + xSpacing_(0.0), + ySpacing_(0.0), + xBotEnc_(0.0), + yBotEnc_(0.0), + xTopEnc_(0.0), + yTopEnc_(0.0), + numRows_(0), + numCols_(0), + xOffset_(0.0), + yOffset_(0.0), + xBotOs_(0.0), + yBotOs_(0.0), + xTopOs_(0.0), + yTopOs_(0.0), + cutPattern_(NULL) +{ + Init(); +} + +void +lefiVia::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); + foreign_ = 0; + numProps_ = 0; + propsAllocated_ = 0; + layersAllocated_ = 3; + layers_ = (lefiViaLayer**) lefMalloc(sizeof(lefiViaLayer*) * 3); + numLayers_ = 0; + clear(); + viaRuleName_ = 0; +} + +void +lefiVia::Destroy() +{ + clear(); + lefFree(name_); + if (layers_) + lefFree((char*) (layers_)); + layers_ = 0; + if (propName_) + lefFree((char*) (propName_)); + if (propValue_) + lefFree((char*) (propValue_)); + if (propDValue_) + lefFree((char*) (propDValue_)); + if (propType_) + lefFree((char*) (propType_)); + if (viaRuleName_) + lefFree((char*) (viaRuleName_)); + if (botLayer_) + lefFree((char*) (botLayer_)); + if (cutLayer_) + lefFree((char*) (cutLayer_)); + if (topLayer_) + lefFree((char*) (topLayer_)); + if (cutPattern_) + lefFree((char*) (cutPattern_)); + propName_ = 0; + propValue_ = 0; + propDValue_ = 0; + propType_ = 0; + viaRuleName_ = 0; + botLayer_ = 0; + cutLayer_ = 0; + topLayer_ = 0; + cutPattern_ = 0; +} + +lefiVia::~lefiVia() +{ + Destroy(); +} + +lefiVia * +lefiVia::clone() +{ + int i; + lefiViaLayer *l; + lefiVia *v = (lefiVia*) lefMalloc(sizeof(lefiVia)); + v->nameSize_ = strlen(name_) + 1; + v->name_ = (char*) lefMalloc(v->nameSize_); + strcpy(v->name_, name_); + v->foreign_ = 0; + if (hasForeign()) { + v->setForeign(foreign_, hasForeignPnt(), + foreignX_, foreignY_, foreignOrient_); + } + v->hasDefault_ = hasDefault_; + v->hasGenerated_ = hasGenerated_; + v->hasResistance_ = hasResistance_; + v->hasForeignPnt_ = hasForeignPnt_; + v->hasTopOfStack_ = hasTopOfStack_; + v->numProps_ = numProps_; + v->propsAllocated_ = numProps_; + if (numProps_ > 0) { + v->propName_ = (char**) lefMalloc(sizeof(char*) * numProps_); + v->propValue_ = (char**) lefMalloc(sizeof(char*) * numProps_); + v->propDValue_ = (double*) lefMalloc(sizeof(double) * numProps_); + v->propType_ = (char*) lefMalloc(sizeof(char) * numProps_); + for (i = 0; i < numProps_; i++) { + v->propName_[i] = (char*) lefMalloc(strlen(propName_[i]) + 1); + strcpy(v->propName_[i], propName_[i]); + // Modified 8/27/99 - Wanda da Rosa for pcr 274891 + // propValue_[i] can be null, if propValue was a number + if (propValue_[i]) { + v->propValue_[i] = (char*) lefMalloc(strlen(propValue_[i]) + 1); + strcpy(v->propValue_[i], propValue_[i]); + } else + v->propValue_[i] = 0; + v->propDValue_[i] = propDValue_[i]; + v->propType_[i] = propType_[i]; + } + } else { + v->propName_ = 0; + v->propValue_ = 0; + v->propDValue_ = 0; + v->propType_ = 0; + } + v->layersAllocated_ = layersAllocated_; + v->numLayers_ = numLayers_; + if (numLayers_ > 0) + v->layers_ = + (lefiViaLayer**) lefMalloc(sizeof(lefiViaLayer*) * numLayers_); + else // still malloc the memory because lefiVia::Init does + v->layers_ = + (lefiViaLayer**) lefMalloc(sizeof(lefiViaLayer*) * 2); + for (i = 0; i < numLayers_; i++) { + l = layers_[i]; + v->layers_[i] = l->clone(); + } + v->resistance_ = resistance_; + if (foreignOrient_ == 0) + v->foreignOrient_ = -1; + else + v->foreignOrient_ = foreignOrient_; + + v->viaRuleName_ = 0; + v->botLayer_ = 0; + v->cutLayer_ = 0; + v->topLayer_ = 0; + v->cutPattern_ = 0; + if (viaRuleName_) + v->viaRuleName_ = strdup(viaRuleName_); + v->xSize_ = xSize_; + v->ySize_ = ySize_; + if (botLayer_) + v->botLayer_ = strdup(botLayer_); + if (cutLayer_) + v->cutLayer_ = strdup(cutLayer_); + if (topLayer_) + v->topLayer_ = strdup(topLayer_); + v->xSpacing_ = xSpacing_; + v->ySpacing_ = ySpacing_; + v->xBotEnc_ = xBotEnc_; + v->yBotEnc_ = yBotEnc_; + v->xTopEnc_ = xTopEnc_; + v->yTopEnc_ = yTopEnc_; + v->numRows_ = numRows_; + v->numCols_ = numCols_; + v->xOffset_ = xOffset_; + v->yOffset_ = yOffset_; + v->xBotOs_ = xBotOs_; + v->yBotOs_ = yBotOs_; + v->xTopOs_ = xTopOs_; + v->yTopOs_ = yTopOs_; + if (cutPattern_) + v->cutPattern_ = strdup(cutPattern_); + + return v; +} + +void +lefiVia::clear() +{ + int i; + + if (name_) + *(name_) = '\0'; + if (foreign_) + lefFree(foreign_); + foreign_ = 0; + hasDefault_ = 0; + hasGenerated_ = 0; + hasResistance_ = 0; + hasForeignPnt_ = 0; + hasTopOfStack_ = 0; + foreignOrient_ = -1; + + for (i = 0; i < numProps_; i++) { + lefFree(propName_[i]); + propName_[i] = 0; + if (propValue_[i]) + lefFree(propValue_[i]); + propValue_[i] = 0; + propType_[i] = ' '; + } + numProps_ = 0; + + for (i = 0; i < numLayers_; i++) { + layers_[i]->Destroy(); + lefFree((char*) (layers_[i])); + layers_[i] = 0; + } + numLayers_ = 0; + + if (viaRuleName_) + lefFree(viaRuleName_); + viaRuleName_ = 0; + xSize_ = 0; + ySize_ = 0; + if (botLayer_) + lefFree(botLayer_); + if (cutLayer_) + lefFree(cutLayer_); + if (topLayer_) + lefFree(topLayer_); + botLayer_ = 0; + cutLayer_ = 0; + topLayer_ = 0; + xSpacing_ = 0; + ySpacing_ = 0; + xBotEnc_ = 0; + yBotEnc_ = 0; + xTopEnc_ = 0; + yTopEnc_ = 0; + numRows_ = 0; + numCols_ = 0; + xOffset_ = 0; + yOffset_ = 0; + xBotOs_ = 0; + yBotOs_ = 0; + xTopOs_ = 0; + yTopOs_ = 0; + if (cutPattern_) + lefFree(cutPattern_); + cutPattern_ = 0; +} + +void +lefiVia::setName(const char *name, + int viaType) +{ + int len; + // setName calls clear to init + // default=0 no default specified + // default=1 default specified in lef file + clear(); + switch (viaType) { + case 1: + hasDefault_ = 1; + break; + case 2: + hasGenerated_ = 1; + break; + } + + len = strlen(name) + 1; + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); + +} + +void +lefiVia::setResistance(double num) +{ + hasResistance_ = 1; + resistance_ = num; +} + +void +lefiVia::bumpProps() +{ + int i; + double *d; + char **n; + char **v; + char *t; + + if (propsAllocated_ == 0) + propsAllocated_ = 2; + else + propsAllocated_ *= 2; + + d = (double*) lefMalloc(sizeof(double) * propsAllocated_); + n = (char**) lefMalloc(sizeof(char*) * propsAllocated_); + v = (char**) lefMalloc(sizeof(char*) * propsAllocated_); + t = (char*) lefMalloc(sizeof(char) * propsAllocated_); + + for (i = 0; i < numProps_; i++) { + d[i] = propDValue_[i]; + n[i] = propName_[i]; + v[i] = propValue_[i]; + t[i] = propType_[i]; + } + + if (numProps_ > 0) { + lefFree((char*) (propDValue_)); + lefFree((char*) (propName_)); + lefFree((char*) (propValue_)); + lefFree((char*) (propType_)); + } + + propDValue_ = d; + propName_ = n; + propValue_ = v; + propType_ = t; +} + +void +lefiVia::addProp(const char *name, + const char *value, + const char type) +{ + int len = strlen(name) + 1; + + if (numProps_ == propsAllocated_) + bumpProps(); + + propName_[numProps_] = (char*) lefMalloc(len); + strcpy(propName_[numProps_], CASE(name)); + + len = strlen(value) + 1; + propValue_[numProps_] = (char*) lefMalloc(len); + strcpy(propValue_[numProps_], CASE(value)); + + propDValue_[numProps_] = 0.0; + + propType_[numProps_] = type; + + numProps_ += 1; +} + +void +lefiVia::addNumProp(const char *name, + double d, + const char *value, + const char type) +{ + int len = strlen(name) + 1; + + if (numProps_ == propsAllocated_) + bumpProps(); + + propName_[numProps_] = (char*) lefMalloc(len); + strcpy(propName_[numProps_], CASE(name)); + + len = strlen(value) + 1; + propValue_[numProps_] = (char*) lefMalloc(len); + strcpy(propValue_[numProps_], CASE(value)); + + propDValue_[numProps_] = d; + + propType_[numProps_] = type; + + numProps_ += 1; +} + +void +lefiVia::setForeign(const char *name, + int hasPnt, + double x, + double y, + int orient) +{ + // orient=-1 means no orient was specified. + int len = strlen(name) + 1; + + hasForeignPnt_ = hasPnt; + foreignOrient_ = orient; + foreignX_ = x; + foreignY_ = y; + + foreign_ = (char*) lefMalloc(len); + strcpy(foreign_, CASE(name)); +} + +void +lefiVia::setTopOfStack() +{ + hasTopOfStack_ = 1; +} + +void +lefiVia::addLayer(const char *name) +{ + lefiViaLayer *newl; + if (numLayers_ == layersAllocated_) { + int i; + lefiViaLayer **l; + if (layersAllocated_ == 0) + layersAllocated_ = 2; + else + layersAllocated_ *= 2; + l = (lefiViaLayer**) lefMalloc(sizeof(lefiViaLayer*) * layersAllocated_); + for (i = 0; i < numLayers_; i++) { + l[i] = layers_[i]; + } + lefFree((char*) (layers_)); + layers_ = l; + } + newl = (lefiViaLayer*) lefMalloc(sizeof(lefiViaLayer)); + newl->Init(); + layers_[numLayers_] = newl; + newl->setName(name); + numLayers_ += 1; +} + +void +lefiVia::addRectToLayer(int mask, + double xl, + double yl, + double xh, + double yh) +{ + layers_[numLayers_ - 1]->addRect(mask, xl, yl, xh, yh); +} + +void +lefiVia::addPolyToLayer(int mask, + lefiGeometries *geom) +{ + layers_[numLayers_ - 1]->addPoly(mask, geom); +} + +void +lefiVia::setViaRule(const char *viaRuleName, + double xSize, + double ySize, + const char *botLayer, + const char *cutLayer, + const char *topLayer, + double xCut, + double yCut, + double xBotEnc, + double yBotEnc, + double xTopEnc, + double yTopEnc) +{ + viaRuleName_ = strdup(viaRuleName); + xSize_ = xSize; + ySize_ = ySize; + botLayer_ = strdup(botLayer); + cutLayer_ = strdup(cutLayer); + topLayer_ = strdup(topLayer); + xSpacing_ = xCut; + ySpacing_ = yCut; + xBotEnc_ = xBotEnc; + yBotEnc_ = yBotEnc; + xTopEnc_ = xTopEnc; + yTopEnc_ = yTopEnc; +} + +void +lefiVia::setRowCol(int numRows, + int numCols) +{ + numRows_ = numRows; + numCols_ = numCols; +} + +void +lefiVia::setOrigin(double xOffset, + double yOffset) +{ + xOffset_ = xOffset; + yOffset_ = yOffset; +} + +void +lefiVia::setOffset(double xBot, + double yBot, + double xTop, + double yTop) +{ + xBotOs_ = xBot; + yBotOs_ = yBot; + xTopOs_ = xTop; + yTopOs_ = yTop; +} + +void +lefiVia::setPattern(const char *cutPattern) +{ + cutPattern_ = strdup(cutPattern); +} + +int +lefiVia::hasDefault() const +{ + return hasDefault_; +} + +int +lefiVia::hasGenerated() const +{ + return hasGenerated_; +} + +int +lefiVia::hasForeign() const +{ + return foreign_ ? 1 : 0; +} + +int +lefiVia::hasForeignPnt() const +{ + return hasForeignPnt_; +} + +int +lefiVia::hasForeignOrient() const +{ + return foreignOrient_ == -1 ? 0 : 1; +} + +int +lefiVia::hasProperties() const +{ + return numProps_ ? 1 : 0; +} + +int +lefiVia::hasResistance() const +{ + return hasResistance_; +} + +int +lefiVia::hasTopOfStack() const +{ + return hasTopOfStack_; +} + +// 5.6 +int +lefiVia::hasViaRule() const +{ + return viaRuleName_ ? 1 : 0; +} + +// 5.6 +int +lefiVia::hasRowCol() const +{ + if (numRows_ != 0 || numCols_ != 0) + return 1; + return 0; +} + +// 5.6 +int +lefiVia::hasOrigin() const +{ + if (xOffset_ != 0 || yOffset_ != 0) + return 1; + return 0; +} + +// 5.6 +int +lefiVia::hasOffset() const +{ + if (xBotOs_ != 0 || yBotOs_ != 0 || + xTopOs_ != 0 || yTopOs_ != 0) + return 1; + return 0; +} + +// 5.6 +int +lefiVia::hasCutPattern() const +{ + return cutPattern_ ? 1 : 0; +} + +int +lefiVia::numLayers() const +{ + return numLayers_; +} + +char * +lefiVia::layerName(int layerNum) const +{ + lefiViaLayer *vl; + char msg[160]; + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + vl = layers_[layerNum]; + return vl->name(); +} + +int +lefiVia::numRects(int layerNum) const +{ + lefiViaLayer *vl; + char msg[160]; + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + vl = layers_[layerNum]; + return vl->numRects(); +} + +double +lefiVia::xl(int layerNum, + int rectNum) const +{ + lefiViaLayer *vl; + char msg[160]; + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + vl = layers_[layerNum]; + return vl->xl(rectNum); +} + +double +lefiVia::yl(int layerNum, + int rectNum) const +{ + lefiViaLayer *vl; + char msg[160]; + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + vl = layers_[layerNum]; + return vl->yl(rectNum); +} + +double +lefiVia::xh(int layerNum, + int rectNum) const +{ + lefiViaLayer *vl; + char msg[160]; + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + vl = layers_[layerNum]; + return vl->xh(rectNum); +} + +double +lefiVia::yh(int layerNum, + int rectNum) const +{ + lefiViaLayer *vl; + char msg[160]; + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + vl = layers_[layerNum]; + return vl->yh(rectNum); +} + +int +lefiVia::rectColorMask(int layerNum, + int rectNum) const +{ + lefiViaLayer *vl; + char msg[160]; + + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + + vl = layers_[layerNum]; + + return vl->rectColorMask(rectNum); +} + +int +lefiVia::polyColorMask(int layerNum, + int polyNum) const +{ + lefiViaLayer *vl; + char msg[160]; + + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + + vl = layers_[layerNum]; + + return vl->polyColorMask(polyNum); +} + +int +lefiVia::numPolygons(int layerNum) const +{ + lefiViaLayer *vl; + char msg[160]; + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return 0; + } + vl = layers_[layerNum]; + return vl->numPolygons(); +} + +lefiGeomPolygon +lefiVia::getPolygon(int layerNum, + int polyNum) const +{ + lefiViaLayer *vl; + char msg[160]; + lefiGeomPolygon tempPoly; + + tempPoly.numPoints = 0; + tempPoly.x = 0; + tempPoly.y = 0; + tempPoly.colorMask = 0; + + if (layerNum < 0 || layerNum >= numLayers_) { + sprintf(msg, "ERROR (LEFPARS-1421): The layer number %d given for the VIA LAYER is invalid.\nValid number is from 0 to %d", layerNum, numLayers_); + lefiError(0, 1421, msg); + return tempPoly; + } + + vl = layers_[layerNum]; + + return *(vl->getPolygon(polyNum)); +} + +char * +lefiVia::name() const +{ + return name_; +} + +double +lefiVia::resistance() const +{ + return resistance_; +} + +// Given an index from 0 to numProperties()-1 return +// information about that property. +int +lefiVia::numProperties() const +{ + return numProps_; +} + +char * +lefiVia::propName(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1422): The layer number %d given for the VIA PROPERTY is invalid.\nValid number is from 0 to %d", index, numLayers_); + lefiError(0, 1422, msg); + return 0; + } + return propName_[index]; +} + +char * +lefiVia::propValue(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1422): The layer number %d given for the VIA PROPERTY is invalid.\nValid number is from 0 to %d", index, numLayers_); + lefiError(0, 1422, msg); + return 0; + } + return propValue_[index]; +} + +double +lefiVia::propNumber(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1422): The layer number %d given for the VIA PROPERTY is invalid.\nValid number is from 0 to %d", index, numLayers_); + lefiError(0, 1422, msg); + return 0; + } + return propDValue_[index]; +} + +char +lefiVia::propType(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1422): The layer number %d given for the VIA PROPERTY is invalid.\nValid number is from 0 to %d", index, numLayers_); + lefiError(0, 1422, msg); + return 0; + } + return propType_[index]; +} + +int +lefiVia::propIsNumber(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1422): The layer number %d given for the VIA PROPERTY is invalid.\nValid number is from 0 to %d", index, numLayers_); + lefiError(0, 1422, msg); + return 0; + } + return propDValue_[index] ? 1 : 0; +} + +int +lefiVia::propIsString(int index) const +{ + char msg[160]; + if (index < 0 || index >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1422): The layer number %d given for the VIA PROPERTY is invalid.\nValid number is from 0 to %d", index, numLayers_); + lefiError(0, 1422, msg); + return 0; + } + return propDValue_[index] ? 0 : 1; +} + +char * +lefiVia::foreign() const +{ + return foreign_; +} + +double +lefiVia::foreignX() const +{ + return foreignX_; +} + +double +lefiVia::foreignY() const +{ + return foreignY_; +} + +int +lefiVia::foreignOrient() const +{ + return foreignOrient_; +} + +char * +lefiVia::foreignOrientStr() const +{ + return (lefiOrientStr(foreignOrient_)); +} + +// 5.6 +const char * +lefiVia::viaRuleName() const +{ + return viaRuleName_; +} + +double +lefiVia::xCutSize() const +{ + return xSize_; +} + +double +lefiVia::yCutSize() const +{ + return ySize_; +} + +const char * +lefiVia::botMetalLayer() const +{ + return botLayer_; +} + +const char * +lefiVia::cutLayer() const +{ + return cutLayer_; +} + +const char * +lefiVia::topMetalLayer() const +{ + return topLayer_; +} + +double +lefiVia::xCutSpacing() const +{ + return xSpacing_; +} + +double +lefiVia::yCutSpacing() const +{ + return ySpacing_; +} + +double +lefiVia::xBotEnc() const +{ + return xBotEnc_; +} + +double +lefiVia::yBotEnc() const +{ + return yBotEnc_; +} + +double +lefiVia::xTopEnc() const +{ + return xTopEnc_; +} + +double +lefiVia::yTopEnc() const +{ + return yTopEnc_; +} + +int +lefiVia::numCutRows() const +{ + return numRows_; +} + +int +lefiVia::numCutCols() const +{ + return numCols_; +} + +double +lefiVia::xOffset() const +{ + return xOffset_; +} + +double +lefiVia::yOffset() const +{ + return yOffset_; +} + +double +lefiVia::xBotOffset() const +{ + return xBotOs_; +} + +double +lefiVia::yBotOffset() const +{ + return yBotOs_; +} + +double +lefiVia::xTopOffset() const +{ + return xTopOs_; +} + +double +lefiVia::yTopOffset() const +{ + return yTopOs_; +} + +const char * +lefiVia::cutPattern() const +{ + return cutPattern_; +} + +// Debug print +void +lefiVia::print(FILE *f) const +{ + int i; + int h; + + fprintf(f, "Via %s:\n", name()); + + if (hasDefault()) + fprintf(f, " DEFAULT\n"); + + if (hasForeign()) { + fprintf(f, " foreign %s", foreign()); + if (hasForeignPnt()) { + fprintf(f, " %g,%g", foreignX(), + foreignY()); + } + if (hasForeignOrient()) { + fprintf(f, " orient %s", foreignOrientStr()); + } + fprintf(f, "\n"); + } + + if (hasResistance()) + fprintf(f, " RESISTANCE %g\n", resistance()); + + if (hasProperties()) { + for (i = 0; i < numProperties(); i++) + if (propIsString(i)) + fprintf(f, " PROP %s %s\n", propName(i), + propValue(i)); + else + fprintf(f, " PROP %s %g\n", propName(i), + propNumber(i)); + } + + for (i = 0; i < numLayers(); i++) { + fprintf(f, " LAYER %s\n", layerName(i)); + for (h = 0; h < numRects(i); h++) { + if (rectColorMask(i, h) != 0) { + fprintf(f, " RECT MASK %d %g,%g %g,%g\n", + rectColorMask(i, h), + xl(i, h), yl(i, h), + xh(i, h), yh(i, h)); + } else { + fprintf(f, " RECT %g,%g %g,%g\n", + xl(i, h), yl(i, h), + xh(i, h), yh(i, h)); + } + } + } +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiVia.hpp b/lefdef/src/lef/lef/lefiVia.hpp new file mode 100644 index 00000000..d4390b20 --- /dev/null +++ b/lefdef/src/lef/lef/lefiVia.hpp @@ -0,0 +1,259 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiVia_h +#define lefiVia_h + +#include +#include "lefiKRDefs.hpp" +#include "lefiMisc.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class lefiViaLayer { +public: + lefiViaLayer(); + void Init(); + + void Destroy(); + ~lefiViaLayer(); + + void setName(const char* name); + void addRect(int mask, + double xl, double yl, + double xh, double yh); + void addPoly(int mask, + lefiGeometries* geom); + + lefiViaLayer* clone(); + + int numRects(); + char* name(); + double xl(int index); + double yl(int index); + double xh(int index); + double yh(int index); + int rectColorMask(int index); + int polyColorMask(int index); + + int numPolygons(); // 5.6 + lefiGeomPolygon* getPolygon(int index) const; // 5.6 + +protected: + char* name_; + int* rectColorMask_; + int* polyColorMask_; + int numRects_; + int rectsAllocated_; + double* xl_; + double* yl_; + double* xh_; + double* yh_; + + int numPolys_; + int polysAllocated_; + lefiGeomPolygon** polygons_; + +}; + +class lefiVia { +public: + lefiVia(); + void Init(); + + void Destroy(); + ~lefiVia(); + + void clear(); + + // setName calls clear to init + // deflt=0 no default specified + // deflt=1 default specified in lef file + void setName(const char* name, int viaType); + + void setResistance(double num); + void addProp(const char* name, const char* value, const char type); + void addNumProp(const char* name, double d, const char* value, + const char type); + + // orient=-1 means no orient was specified. + void setForeign(const char* name, int hasPnt, + double x, double y, int orient); + void setTopOfStack(); + + void addLayer(const char* name); + void addRectToLayer(int mask, + double xl, double yl, + double xh, double yh); + void addPolyToLayer(int mask, + lefiGeometries* geom); + void bumpProps(); + + void setViaRule(const char* viaRuleName, double xSize, double ySize, + const char* botLayer, const char* cutLayer, + const char* topLayer, double xCut, double yCut, + double xBotEnc, double yBotEnc, double xTopEnc, + double yTopEnc); // 5.6 + void setRowCol(int numRows, int numCols); // 5.6 + void setOrigin(double xOffset, double yOffset); // 5.6 + void setOffset(double xBot, double yBot, double xTop, double yTop); // 5.6 + void setPattern(const char* cutPattern); // 5.6 + + // make a new one + lefiVia* clone(); + + int hasDefault() const ; + int hasGenerated() const ; // 5.6, this no longer in 5.6, should be removed + int hasForeign() const ; + int hasForeignPnt() const ; + int hasForeignOrient() const ; + int hasProperties() const ; + int hasResistance() const ; + int hasTopOfStack() const ; + + int numLayers() const; + char* layerName(int layerNum) const; + int numRects(int layerNum) const; + double xl(int layerNum, int rectNum) const; + double yl(int layerNum, int rectNum) const; + double xh(int layerNum, int rectNum) const; + double yh(int layerNum, int rectNum) const; + int rectColorMask(int layerNum, int rectNum) const; + int polyColorMask(int layerNum, int polyNum) const; + int numPolygons(int layerNum) const; // 5.6 + lefiGeomPolygon getPolygon(int layerNum, int polyNum) const; // 5.6 + + char* name() const ; + double resistance() const ; + + // Given an index from 0 to numProperties()-1 return + // information about that property. + int numProperties() const ; + char* propName(int index) const; + char* propValue(int index) const; + double propNumber(int index) const; + char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + char* foreign() const; + double foreignX() const; + double foreignY() const; + int foreignOrient() const; + char* foreignOrientStr() const; + + // 5.6 VIARULE inside a VIA + int hasViaRule() const; + const char* viaRuleName() const; + double xCutSize() const; + double yCutSize() const; + const char* botMetalLayer() const; + const char* cutLayer() const; + const char* topMetalLayer() const; + double xCutSpacing() const; + double yCutSpacing() const; + double xBotEnc() const; + double yBotEnc() const; + double xTopEnc() const; + double yTopEnc() const; + int hasRowCol() const; + int numCutRows() const; + int numCutCols() const; + int hasOrigin() const; + double xOffset() const; + double yOffset() const; + int hasOffset() const; + double xBotOffset() const; + double yBotOffset() const; + double xTopOffset() const; + double yTopOffset() const; + int hasCutPattern() const; + const char* cutPattern() const; + + // Debug print + void print(FILE* f) const; + +protected: + char* name_; + int nameSize_; + + int hasDefault_; + int hasGenerated_; + int hasResistance_; + int hasForeignPnt_; + int hasTopOfStack_; + + int numProps_; + int propsAllocated_; + char** propName_; + // The prop value is stored in the propValue_ or the propDValue_. + // If it is a string it is in propValue_. If it is a number, + // then propValue_ is NULL and it is stored in propDValue_; + char** propValue_; + double* propDValue_; + char* propType_; + + int numLayers_; + int layersAllocated_; + lefiViaLayer** layers_; + + double resistance_; + + char* foreign_; + double foreignX_; + double foreignY_; + int foreignOrient_; + + char* viaRuleName_; // 5.6 + double xSize_; // 5.6 + double ySize_; // 5.6 + char* botLayer_; // 5.6 + char* cutLayer_; // 5.6 + char* topLayer_; // 5.6 + double xSpacing_; // 5.6 + double ySpacing_; // 5.6 + double xBotEnc_; // 5.6 + double yBotEnc_; // 5.6 + double xTopEnc_; // 5.6 + double yTopEnc_; // 5.6 + int numRows_; // 5.6 + int numCols_; // 5.6 + double xOffset_; // 5.6 + double yOffset_; // 5.6 + double xBotOs_; // 5.6 + double yBotOs_; // 5.6 + double xTopOs_; // 5.6 + double yTopOs_; // 5.6 + char* cutPattern_; // 5.6 +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefiViaRule.cpp b/lefdef/src/lef/lef/lefiViaRule.cpp new file mode 100644 index 00000000..6cb549b0 --- /dev/null +++ b/lefdef/src/lef/lef/lefiViaRule.cpp @@ -0,0 +1,846 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include "lex.h" +#include "lefiViaRule.hpp" +#include "lefiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// ***************************************************************************** +// lefiViaRuleLayer +// ***************************************************************************** + +lefiViaRuleLayer::lefiViaRuleLayer() +: name_(NULL), + direction_(0), + overhang1_(0.0), + overhang2_(0.0), + hasWidth_(0), + hasResistance_(0), + hasOverhang_(0), + hasMetalOverhang_(0), + hasSpacing_(0), + hasRect_(0), + widthMin_(0.0), + widthMax_(0.0), + overhang_(0.0), + metalOverhang_(0.0), + resistance_(0.0), + spacingStepX_(0.0), + spacingStepY_(0.0), + xl_(0.0), + yl_(0.0), + xh_(0.0), + yh_(0.0) +{ + Init(); +} + +void +lefiViaRuleLayer::Init() +{ + name_ = 0; + overhang1_ = -1; + overhang2_ = -1; +} + +void +lefiViaRuleLayer::clearLayerOverhang() +{ + overhang1_ = -1; + overhang2_ = -1; +} + +void +lefiViaRuleLayer::setName(const char *name) +{ + int len = strlen(name) + 1; + if (name_) + lefFree(name_); + name_ = (char*) lefMalloc(len); + strcpy(name_, CASE(name)); + direction_ = '\0'; + // overhang1_ = -1; already reset in clearLayerOverhang + // overhang2_ = -1; + hasWidth_ = 0; + hasResistance_ = 0; + hasOverhang_ = 0; + hasMetalOverhang_ = 0; + hasSpacing_ = 0; + hasRect_ = 0; +} + +void +lefiViaRuleLayer::Destroy() +{ + if (name_) + lefFree(name_); +} + +lefiViaRuleLayer::~lefiViaRuleLayer() +{ + // Destroy will be called explicitly + // so do nothing here. +} + +void +lefiViaRuleLayer::setHorizontal() +{ + direction_ = 'H'; +} + +void +lefiViaRuleLayer::setVertical() +{ + direction_ = 'V'; +} + +// 5.5 +void +lefiViaRuleLayer::setEnclosure(double overhang1, + double overhang2) +{ + overhang1_ = overhang1; + overhang2_ = overhang2; +} + +void +lefiViaRuleLayer::setWidth(double minW, + double maxW) +{ + hasWidth_ = 1; + widthMin_ = minW; + widthMax_ = maxW; +} + +void +lefiViaRuleLayer::setOverhang(double d) +{ + hasOverhang_ = 1; + overhang_ = d; +} + +// 5.6 +void +lefiViaRuleLayer::setOverhangToEnclosure(double d) +{ + if ((overhang1_ != -1) && (overhang2_ != -1)) + return; // both overhang1_ & overhang2_ are set + if (overhang1_ == -1) + overhang1_ = d; // set value to overhang1_ + else + overhang2_ = d; // overhang1_ already set, set to overhang2_ + return; +} + +// 5.5 +void +lefiViaRuleLayer::setMetalOverhang(double d) +{ + hasMetalOverhang_ = 1; + metalOverhang_ = d; +} + +void +lefiViaRuleLayer::setResistance(double d) +{ + hasResistance_ = 1; + resistance_ = d; +} + +void +lefiViaRuleLayer::setSpacing(double x, + double y) +{ + hasSpacing_ = 1; + spacingStepX_ = x; + spacingStepY_ = y; +} + +void +lefiViaRuleLayer::setRect(double xl, + double yl, + double xh, + double yh) +{ + hasRect_ = 1; + xl_ = xl; + yl_ = yl; + xh_ = xh; + yh_ = yh; +} + +int +lefiViaRuleLayer::hasRect() const +{ + return hasRect_; +} + +int +lefiViaRuleLayer::hasDirection() const +{ + return direction_ ? 1 : 0; +} + +// 5.5 +int +lefiViaRuleLayer::hasEnclosure() const +{ + return overhang1_ == -1 ? 0 : 1; +} + +int +lefiViaRuleLayer::hasWidth() const +{ + return hasWidth_; +} + +int +lefiViaRuleLayer::hasResistance() const +{ + return hasResistance_; +} + +int +lefiViaRuleLayer::hasOverhang() const +{ + return hasOverhang_; +} + +int +lefiViaRuleLayer::hasMetalOverhang() const +{ + return hasMetalOverhang_; +} + +int +lefiViaRuleLayer::hasSpacing() const +{ + return hasSpacing_; +} + +char * +lefiViaRuleLayer::name() const +{ + return name_; +} + +int +lefiViaRuleLayer::isHorizontal() const +{ + return direction_ == 'H' ? 1 : 0; +} + +int +lefiViaRuleLayer::isVertical() const +{ + return direction_ == 'V' ? 1 : 0; +} + +// 5.5 +double +lefiViaRuleLayer::enclosureOverhang1() const +{ + return overhang1_; +} + +// 5.5 +double +lefiViaRuleLayer::enclosureOverhang2() const +{ + return overhang2_; +} + +double +lefiViaRuleLayer::widthMin() const +{ + return widthMin_; +} + +double +lefiViaRuleLayer::widthMax() const +{ + return widthMax_; +} + +double +lefiViaRuleLayer::overhang() const +{ + return overhang_; +} + +double +lefiViaRuleLayer::metalOverhang() const +{ + return metalOverhang_; +} + +double +lefiViaRuleLayer::resistance() const +{ + return resistance_; +} + +double +lefiViaRuleLayer::spacingStepX() const +{ + return spacingStepX_; +} + +double +lefiViaRuleLayer::spacingStepY() const +{ + return spacingStepY_; +} + +double +lefiViaRuleLayer::xl() const +{ + return xl_; +} + +double +lefiViaRuleLayer::yl() const +{ + return yl_; +} + +double +lefiViaRuleLayer::xh() const +{ + return xh_; +} + +double +lefiViaRuleLayer::yh() const +{ + return yh_; +} + +void +lefiViaRuleLayer::print(FILE *f) const +{ + fprintf(f, " Layer %s", name_); + + if (isHorizontal()) + fprintf(f, " HORIZONTAL"); + if (isVertical()) + fprintf(f, " VERTICAL"); + fprintf(f, "\n"); + + if (hasWidth()) + fprintf(f, " WIDTH %g %g\n", widthMin(), + widthMax()); + + if (hasResistance()) + fprintf(f, " RESISTANCE %g\n", resistance()); + + if (hasOverhang()) + fprintf(f, " OVERHANG %g\n", overhang()); + + if (hasMetalOverhang()) + fprintf(f, " METALOVERHANG %g\n", + metalOverhang()); + + if (hasSpacing()) + fprintf(f, " SPACING %g %g\n", + spacingStepX(), + spacingStepY()); + + if (hasRect()) + fprintf(f, " RECT %g,%g %g,%g\n", + xl(), yl(), + xh(), yh()); +} + +// ***************************************************************************** +// lefiViaRule +// ***************************************************************************** + +lefiViaRule::lefiViaRule() +: name_(NULL), + nameSize_(0), + hasGenerate_(0), + hasDefault_(0), + numLayers_(0), + numVias_(0), + viasAllocated_(0), + vias_(NULL), + numProps_(0), + propsAllocated_(0), + names_(NULL), + values_(NULL), + dvalues_(NULL), + types_(NULL) +{ + Init(); +} + +void +lefiViaRule::Init() +{ + nameSize_ = 16; + name_ = (char*) lefMalloc(16); + viasAllocated_ = 2; + vias_ = (char**) lefMalloc(sizeof(char*) * 2); + layers_[0].Init(); + layers_[1].Init(); + layers_[2].Init(); + numLayers_ = 0; + numVias_ = 0; + numProps_ = 0; + propsAllocated_ = 1; + names_ = (char**) lefMalloc(sizeof(char*)); + values_ = (char**) lefMalloc(sizeof(char*)); + dvalues_ = (double*) lefMalloc(sizeof(double)); + types_ = (char*) lefMalloc(sizeof(char)); +} + +void +lefiViaRule::clear() +{ + int i; + hasGenerate_ = 0; + hasDefault_ = 0; + for (i = 0; i < numProps_; i++) { + lefFree(names_[i]); + lefFree(values_[i]); + dvalues_[i] = 0; + } + numProps_ = 0; + numLayers_ = 0; + for (i = 0; i < numVias_; i++) { + lefFree(vias_[i]); + } + numVias_ = 0; +} + +void +lefiViaRule::clearLayerOverhang() +{ + layers_[0].clearLayerOverhang(); + layers_[1].clearLayerOverhang(); +} + +void +lefiViaRule::setName(const char *name) +{ + int len = strlen(name) + 1; + if (len > nameSize_) { + lefFree(name_); + name_ = (char*) lefMalloc(len); + nameSize_ = len; + } + strcpy(name_, CASE(name)); + clear(); +} + +void +lefiViaRule::Destroy() +{ + clear(); + lefFree(name_); + lefFree((char*) (vias_)); + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + layers_[0].Destroy(); + layers_[1].Destroy(); + layers_[2].Destroy(); +} + +lefiViaRule::~lefiViaRule() +{ + Destroy(); +} + +void +lefiViaRule::setGenerate() +{ + hasGenerate_ = 1; +} + +void +lefiViaRule::setDefault() +{ + hasDefault_ = 1; +} + +void +lefiViaRule::addViaName(const char *name) +{ + // Add one of possibly many via names + int len = strlen(name) + 1; + if (numVias_ == viasAllocated_) { + int i; + char **nn; + if (viasAllocated_ == 0) + viasAllocated_ = 2; + else + viasAllocated_ *= 2; + nn = (char**) lefMalloc(sizeof(char*) * viasAllocated_); + for (i = 0; i < numVias_; i++) + nn[i] = vias_[i]; + lefFree((char*) (vias_)); + vias_ = nn; + } + vias_[numVias_] = (char*) lefMalloc(len); + strcpy(vias_[numVias_], CASE(name)); + numVias_ += 1; +} + +void +lefiViaRule::setRect(double xl, + double yl, + double xh, + double yh) +{ + layers_[numLayers_ - 1].setRect(xl, yl, xh, yh); +} + +void +lefiViaRule::setSpacing(double x, + double y) +{ + layers_[numLayers_ - 1].setSpacing(x, y); +} + +void +lefiViaRule::setWidth(double x, + double y) +{ + layers_[numLayers_ - 1].setWidth(x, y); +} + +void +lefiViaRule::setResistance(double d) +{ + layers_[numLayers_ - 1].setResistance(d); +} + +void +lefiViaRule::setOverhang(double d) +{ + layers_[numLayers_ - 1].setOverhang(d); +} + +// 5.6, try to set value to layers_[0] & layers_[1] +void +lefiViaRule::setOverhangToEnclosure(double d) +{ + layers_[0].setOverhangToEnclosure(d); + layers_[1].setOverhangToEnclosure(d); +} + +void +lefiViaRule::setMetalOverhang(double d) +{ + layers_[numLayers_ - 1].setMetalOverhang(d); +} + +void +lefiViaRule::setVertical() +{ + layers_[numLayers_ - 1].setVertical(); +} + +void +lefiViaRule::setHorizontal() +{ + layers_[numLayers_ - 1].setHorizontal(); +} + +void +lefiViaRule::setEnclosure(double overhang1, + double overhang2) +{ + layers_[numLayers_ - 1].setEnclosure(overhang1, + overhang2); +} + +void +lefiViaRule::setLayer(const char *name) +{ + if (numLayers_ == 3) { + lefiError(0, 1430, "ERROR (LEFPARS-1430): too many via rule layers"); + return; + } + // This routine sets and creates the active layer. + layers_[numLayers_].setName(name); + numLayers_ += 1; +} + +int +lefiViaRule::hasGenerate() const +{ + return hasGenerate_; +} + +int +lefiViaRule::hasDefault() const +{ + return hasDefault_; +} + +int +lefiViaRule::numLayers() const +{ + // There are 2 or 3 layers in a rule. + // numLayers() tells how many. + // If a third layer exists then it is the cut layer. + return numLayers_; +} + +lefiViaRuleLayer * +lefiViaRule::layer(int index) const +{ + if (index < 0 || index > 2) + return 0; + return (lefiViaRuleLayer*) &(layers_[index]); +} + +char * +lefiViaRule::name() const +{ + return name_; +} + +void +lefiViaRule::print(FILE *f) const +{ + int i; + fprintf(f, "VIA RULE %s", name()); + if (hasGenerate()) + fprintf(f, " GENERATE"); + fprintf(f, "\n"); + + for (i = 0; i < numLayers(); i++) { + layers_[i].print(f); + } + + for (i = 0; i < numVias(); i++) { + fprintf(f, " Via %s\n", viaName(i)); + } +} + +int +lefiViaRule::numVias() const +{ + return numVias_; +} + +char * +lefiViaRule::viaName(int index) const +{ + if (index < 0 || index >= numVias_) + return 0; + return vias_[index]; +} + +int +lefiViaRule::numProps() const +{ + return numProps_; +} + +void +lefiViaRule::addProp(const char *name, + const char *value, + const char type) +{ + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + int max; + int lim; + char **nn; + char **nv; + double *nd; + char *nt; + + if (propsAllocated_ == 0) + propsAllocated_ = 1; // initialize propsAllocated_ + max = propsAllocated_ *= 2; + lim = numProps_; + nn = (char**) lefMalloc(sizeof(char*) * max); + nv = (char**) lefMalloc(sizeof(char*) * max); + nd = (double*) lefMalloc(sizeof(double) * max); + nt = (char*) lefMalloc(sizeof(char) * max); + for (i = 0; i < lim; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nd[i] = dvalues_[i]; + nt[i] = types_[i]; + } + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + names_ = nn; + values_ = nv; + dvalues_ = nd; + types_ = nt; + } + names_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(names_[numProps_], name); + len = strlen(value) + 1; + values_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(values_[numProps_], value); + dvalues_[numProps_] = 0; + types_[numProps_] = type; + numProps_ += 1; +} + +void +lefiViaRule::addNumProp(const char *name, + const double d, + const char *value, + const char type) +{ + int len = strlen(name) + 1; + if (numProps_ == propsAllocated_) { + int i; + int max; + int lim; + char **nn; + char **nv; + double *nd; + char *nt; + + if (propsAllocated_ == 0) + propsAllocated_ = 1; // initialize propsAllocated_ + max = propsAllocated_ *= 2; + lim = numProps_; + nn = (char**) lefMalloc(sizeof(char*) * max); + nv = (char**) lefMalloc(sizeof(char*) * max); + nd = (double*) lefMalloc(sizeof(double) * max); + nt = (char*) lefMalloc(sizeof(char) * max); + for (i = 0; i < lim; i++) { + nn[i] = names_[i]; + nv[i] = values_[i]; + nd[i] = dvalues_[i]; + nt[i] = types_[i]; + } + lefFree((char*) (names_)); + lefFree((char*) (values_)); + lefFree((char*) (dvalues_)); + lefFree((char*) (types_)); + names_ = nn; + values_ = nv; + dvalues_ = nd; + types_ = nt; + } + names_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(names_[numProps_], name); + len = strlen(value) + 1; + values_[numProps_] = (char*) lefMalloc(sizeof(char) * len); + strcpy(values_[numProps_], value); + dvalues_[numProps_] = d; + types_[numProps_] = type; + numProps_ += 1; +} + +const char * +lefiViaRule::propName(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1431): The index number %d given for the VIARULE PROPERTY is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1431, msg); + return 0; + } + return names_[i]; +} + +const char * +lefiViaRule::propValue(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1431): The index number %d given for the VIARULE PROPERTY is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1431, msg); + return 0; + } + return values_[i]; +} + +double +lefiViaRule::propNumber(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1431): The index number %d given for the VIARULE PROPERTY is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1431, msg); + return 0; + } + return dvalues_[i]; +} + +const char +lefiViaRule::propType(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1431): The index number %d given for the VIARULE PROPERTY is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1431, msg); + return 0; + } + return types_[i]; +} + +int +lefiViaRule::propIsNumber(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1431): The index number %d given for the VIARULE PROPERTY is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1431, msg); + return 0; + } + return dvalues_[i] ? 1 : 0; +} + +int +lefiViaRule::propIsString(int i) const +{ + char msg[160]; + if (i < 0 || i >= numProps_) { + sprintf(msg, "ERROR (LEFPARS-1431): The index number %d given for the VIARULE PROPERTY is invalid.\nValid index is from 0 to %d", i, numProps_); + lefiError(0, 1431, msg); + return 0; + } + return dvalues_[i] ? 0 : 1; +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefiViaRule.hpp b/lefdef/src/lef/lef/lefiViaRule.hpp new file mode 100644 index 00000000..3a17c8d5 --- /dev/null +++ b/lefdef/src/lef/lef/lefiViaRule.hpp @@ -0,0 +1,197 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefiViaRule_h +#define lefiViaRule_h + +#include +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class lefiViaRuleLayer { +public: + lefiViaRuleLayer(); + void Init(); + + void Destroy(); + ~lefiViaRuleLayer(); + void clearLayerOverhang(); + + void setName(const char* name); + void setHorizontal(); + void setVertical(); + void setEnclosure(double overhang1, double overhang2); // 5.5 + void setWidth(double minW, double maxW); + void setOverhang(double d); + void setOverhangToEnclosure(double d); // 5.6 + void setMetalOverhang(double d); + void setResistance(double d); + void setSpacing(double x, double y); + void setRect(double xl, double yl, double xh, double yh); + + int hasDirection() const ; + int hasEnclosure() const ; // 5.5 + int hasWidth() const ; + int hasResistance() const ; + int hasOverhang() const ; + int hasMetalOverhang() const ; + int hasSpacing() const ; + int hasRect() const ; + + char* name() const ; + int isHorizontal() const ; + int isVertical() const ; + double enclosureOverhang1() const; // 5.5 + double enclosureOverhang2() const; // 5.5 + double widthMin() const ; + double widthMax() const ; + double overhang() const ; + double metalOverhang() const ; + double resistance() const ; + double spacingStepX() const ; + double spacingStepY() const ; + double xl() const ; + double yl() const ; + double xh() const ; + double yh() const ; + + // Debug print + void print(FILE* f) const; + +protected: + char* name_; + char direction_; + double overhang1_; // 5.5 + double overhang2_; // 5.5 + int hasWidth_; + int hasResistance_; + int hasOverhang_; + int hasMetalOverhang_; + int hasSpacing_; + int hasRect_; + double widthMin_; + double widthMax_; + double overhang_; + double metalOverhang_; + double resistance_; + double spacingStepX_; + double spacingStepY_; + double xl_, yl_, xh_, yh_; +}; + +class lefiViaRule { +public: + lefiViaRule(); + void Init(); + + void clear(); + void clearLayerOverhang(); + + void Destroy(); + ~lefiViaRule(); + + void setGenerate(); + void setDefault(); + + // This should clear out all the old stuff. + void setName(const char* name); + + // Add one of possibly many via names + void addViaName(const char* name); + + // These routines set a part of the active layer. + void setRect(double xl, double yl, double xh, double yh); + void setSpacing(double x, double y); + void setWidth(double x, double y); + void setResistance(double d); + void setOverhang(double d); + void setOverhangToEnclosure(double d); // 5.6 + void setMetalOverhang(double d); + void setVertical(); + void setHorizontal(); + void setEnclosure(double overhang1, double overhang2); + void addProp(const char* name, const char* value, const char type); + void addNumProp(const char* name, const double d, + const char* value, const char type); + + // This routine sets and creates the active layer. + void setLayer(const char* name); + + int hasGenerate() const ; + int hasDefault() const ; + char* name() const ; + + // There are 2 or 3 layers in a rule. + // numLayers() tells how many. + // If a third layer exists then it is the cut layer. + int numLayers() const ; + lefiViaRuleLayer* layer(int index) const; + + int numVias() const ; + char* viaName(int index) const ; + + int numProps() const; + const char* propName(int index) const; + const char* propValue(int index) const; + double propNumber(int index) const; + const char propType(int index) const; + int propIsNumber(int index) const; + int propIsString(int index) const; + + // Debug print + void print(FILE* f) const; + +protected: + char* name_; + int nameSize_; + + int hasGenerate_; + int hasDefault_; + + int numLayers_; + lefiViaRuleLayer layers_[3]; + + int numVias_; + int viasAllocated_; + char** vias_; + + int numProps_; + int propsAllocated_; + char** names_; + char** values_; + double* dvalues_; + char* types_; +}; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefrCallBacks.hpp b/lefdef/src/lef/lef/lefrCallBacks.hpp new file mode 100644 index 00000000..bea8ed41 --- /dev/null +++ b/lefdef/src/lef/lef/lefrCallBacks.hpp @@ -0,0 +1,112 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefrCallbacks_h +#define lefrCallbacks_h + +#include "lefiKRDefs.hpp" +#include "lefrReader.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +class lefrCallbacks { +public: + lefrCallbacks(); + static void reset(); + + // List of call back routines + // These are filled in by the user. See the + // "set" routines at the end of the file + lefrDoubleCbkFnType AntennaInoutCbk; + lefrDoubleCbkFnType AntennaInputCbk; + lefrDoubleCbkFnType AntennaOutputCbk; + lefrStringCbkFnType ArrayBeginCbk; + lefrArrayCbkFnType ArrayCbk; + lefrStringCbkFnType ArrayEndCbk; + lefrStringCbkFnType BusBitCharsCbk; + lefrIntegerCbkFnType CaseSensitiveCbk; + lefrStringCbkFnType ClearanceMeasureCbk; + lefrCorrectionTableCbkFnType CorrectionTableCbk; + lefrDensityCbkFnType DensityCbk; + lefrDoubleCbkFnType DielectricCbk; + lefrStringCbkFnType DividerCharCbk; + lefrDoubleCbkFnType EdgeRateScaleFactorCbk; + lefrDoubleCbkFnType EdgeRateThreshold1Cbk; + lefrDoubleCbkFnType EdgeRateThreshold2Cbk; + lefrStringCbkFnType ExtensionCbk; + lefrIntegerCbkFnType FixedMaskCbk; + lefrVoidCbkFnType IRDropBeginCbk; + lefrIRDropCbkFnType IRDropCbk; + lefrVoidCbkFnType IRDropEndCbk; + lefrDoubleCbkFnType InoutAntennaCbk; + lefrDoubleCbkFnType InputAntennaCbk; + lefrLayerCbkFnType LayerCbk; + lefrVoidCbkFnType LibraryEndCbk; + lefrStringCbkFnType MacroBeginCbk; + lefrMacroCbkFnType MacroCbk; + lefrStringCbkFnType MacroClassTypeCbk; + lefrStringCbkFnType MacroEndCbk; + lefrIntegerCbkFnType MacroFixedMaskCbk; + lefrMacroNumCbkFnType MacroOriginCbk; + lefrMacroSiteCbkFnType MacroSiteCbk; + lefrMacroForeignCbkFnType MacroForeignCbk; + lefrMacroNumCbkFnType MacroSizeCbk; + lefrDoubleCbkFnType ManufacturingCbk; + lefrMaxStackViaCbkFnType MaxStackViaCbk; + lefrMinFeatureCbkFnType MinFeatureCbk; + lefrStringCbkFnType NoWireExtensionCbk; + lefrNoiseMarginCbkFnType NoiseMarginCbk; + lefrNoiseTableCbkFnType NoiseTableCbk; + lefrNonDefaultCbkFnType NonDefaultCbk; + lefrObstructionCbkFnType ObstructionCbk; + lefrDoubleCbkFnType OutputAntennaCbk; + lefrPinCbkFnType PinCbk; + lefrVoidCbkFnType PropBeginCbk; + lefrPropCbkFnType PropCbk; + lefrVoidCbkFnType PropEndCbk; + lefrSiteCbkFnType SiteCbk; + lefrVoidCbkFnType SpacingBeginCbk; + lefrSpacingCbkFnType SpacingCbk; + lefrVoidCbkFnType SpacingEndCbk; + lefrTimingCbkFnType TimingCbk; + lefrUnitsCbkFnType UnitsCbk; + lefrUseMinSpacingCbkFnType UseMinSpacingCbk; + lefrDoubleCbkFnType VersionCbk; + lefrStringCbkFnType VersionStrCbk; + lefrViaCbkFnType ViaCbk; + lefrViaRuleCbkFnType ViaRuleCbk; +}; + +extern lefrCallbacks *lefCallbacks; + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefrCallbacks.cpp b/lefdef/src/lef/lef/lefrCallbacks.cpp new file mode 100644 index 00000000..272582c0 --- /dev/null +++ b/lefdef/src/lef/lef/lefrCallbacks.cpp @@ -0,0 +1,109 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #11 $ +// $Date: 2013/04/23 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include "lefrCallBacks.hpp" +#include "string.h" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +lefrCallbacks::lefrCallbacks() +: AntennaInoutCbk(0), + AntennaInputCbk(0), + AntennaOutputCbk(0), + ArrayBeginCbk(0), + ArrayCbk(0), + ArrayEndCbk(0), + BusBitCharsCbk(0), + CaseSensitiveCbk(0), + ClearanceMeasureCbk(0), + CorrectionTableCbk(0), + DensityCbk(0), + DielectricCbk(0), + DividerCharCbk(0), + EdgeRateScaleFactorCbk(0), + EdgeRateThreshold1Cbk(0), + EdgeRateThreshold2Cbk(0), + ExtensionCbk(0), + FixedMaskCbk(0), + IRDropBeginCbk(0), + IRDropCbk(0), + IRDropEndCbk(0), + InoutAntennaCbk(0), + InputAntennaCbk(0), + LayerCbk(0), + LibraryEndCbk(0), + MacroBeginCbk(0), + MacroCbk(0), + MacroClassTypeCbk(0), + MacroEndCbk(0), + MacroFixedMaskCbk(0), + MacroOriginCbk(0), + MacroSiteCbk(0), + MacroForeignCbk(0), + MacroSizeCbk(0), + ManufacturingCbk(0), + MaxStackViaCbk(0), + MinFeatureCbk(0), + NoWireExtensionCbk(0), + NoiseMarginCbk(0), + NoiseTableCbk(0), + NonDefaultCbk(0), + ObstructionCbk(0), + OutputAntennaCbk(0), + PinCbk(0), + PropBeginCbk(0), + PropCbk(0), + PropEndCbk(0), + SiteCbk(0), + SpacingBeginCbk(0), + SpacingCbk(0), + SpacingEndCbk(0), + TimingCbk(0), + UnitsCbk(0), + UseMinSpacingCbk(0), + VersionCbk(0), + VersionStrCbk(0), + ViaCbk(0), + ViaRuleCbk(0) +{ +} + +lefrCallbacks *lefCallbacks = NULL; + +void +lefrCallbacks::reset() +{ + if (lefCallbacks) { + delete lefCallbacks; + } + + lefCallbacks = new lefrCallbacks(); +} + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/lef/lef/lefrData.cpp b/lefdef/src/lef/lef/lefrData.cpp new file mode 100644 index 00000000..cf6e51c0 --- /dev/null +++ b/lefdef/src/lef/lef/lefrData.cpp @@ -0,0 +1,361 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #11 $ +// $Date: 2013/04/23 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** +#include +#include +#include +#include + +#include "lefrData.hpp" +#include "lefrSettings.hpp" + +using namespace std; + +BEGIN_LEFDEF_PARSER_NAMESPACE + +extern void *lefMalloc(size_t lef_size); + +lefrData *lefData = NULL; + +lefrData::lefrData() +: antennaInoutWarnings(0), + antennaInputWarnings(0), + antennaOutputWarnings(0), + antennaType(lefiAntennaAR), + arrayCutsVal(0), + arrayCutsWar(0), + arrayName(NULL), + arrayWarnings(0), + caseSensitiveWarnings(0), + correctionTableWarnings(0), + dielectricWarnings(0), + doneLib(1), + edgeRateScaleFactorWarnings(0), + edgeRateThreshold1Warnings(0), + edgeRateThreshold2Warnings(0), + encrypted(0), + first(1), + first_buffer(0), + ge56almostDone(0), + ge56done(0), + hasBusBit(0), + hasDirection(0), + hasDivChar(0), + hasFixedMask(0), + hasGeoLayer(0), + hasInfluence(0), + hasLayerMincut(0), + hasManufactur(0), + hasMask(0), + hasMinfeature(0), + hasNameCase(0), + hasOpenedLogFile(0), + hasPRP(0), + hasParallel(0), + hasPitch(0), + hasSamenet(0), + hasSite(0), + hasSiteClass(0), + hasSiteSize(0), + hasSpCenter(0), + hasSpLayer(0), + hasSpParallel(0), + hasSpSamenet(0), + hasTwoWidths(0), + hasType(0), + hasVer(0), + hasViaRule_layer(0), + hasWidth(0), + hasFatalError(0), + iRDropWarnings(0), + ignoreVersion(0), + inDefine(0), + inoutAntennaWarnings(0), + inputAntennaWarnings(0), + input_level(-1), + isGenerate(0), + last(NULL), + layerCut(0), + layerCutSpacing(0), + layerDir(0), + layerMastOver(0), + layerName(NULL), + layerRout(0), + layerWarnings(0), + lefDefIf(FALSE), + lefDumbMode(0), + lefErrMsgPrinted(0), + lefFixedMask(0), + lefInfoMsgPrinted(0), + lefInvalidChar(0), + namesCaseSensitive(TRUE), + lefNdRule(0), + lefNewIsKeyword(0), + lefNlToken(FALSE), + lefNoNum(0), + lefPropDefType('\0'), + lefRetVal(0), + lefWRetVal(0), + lefWarnMsgPrinted(0), + lef_errors(0), + lef_nlines(1), + lef_ntokens(0), + lef_save_x(0.0), + lef_save_y(0.0), + lef_warnings(0), + lefch(NULL), + leflVal(0.0), + lefrAntennaPWLPtr(0), + lefrArray(), + lefrCorrectionTable(), + lefrDensity(), + lefrDoGcell(0), + lefrDoGeometries(0), + lefrDoSite(0), + lefrDoTrack(0), + lefrFile(0), + lefrFileName(0), + lefrGcellPatternPtr(0), + lefrGeometriesPtr(0), + lefrHasLayer(0), + lefrHasMaxVS(0), + lefrHasSpacing(0), + lefrHasSpacingTbl(0), + lefrIRDrop(), + lefrLayer(), + lefrLog(0), + lefrMacro(), + lefrMaxStackVia(), + lefrMinFeature(), + lefrNoiseMargin(), + lefrNoiseTable(), + lefrNonDefault(), + lefrObstruction(), + lefrPin(), + lefrProp(), + lefrSite(), + lefrSitePatternPtr(0), + lefrSpacing(), + lefrTiming(), + lefrTrackPatternPtr(0), + lefrUnits(), + lefrUseMinSpacing(), + lefrVal(0.0), + lefrVia(), + lefrViaRule(), + macroName(NULL), + macroNum(), + macroWarnings(0), + maxStackViaWarnings(0), + + minFeatureWarnings(0), + msgCnt(1), + nd(0), + ndLayer(0), + ndLayerSpace(0), + ndLayerWidth(0), + ndName(0), + ndRule(0), + needGeometry(0), + next(NULL), + noWireExtensionWarnings(0), + noiseMarginWarnings(0), + noiseTableWarnings(0), + nonDefaultRuleName(NULL), + nonDefaultWarnings(0), + numVia(0), + obsDef(0), + origDef(0), + outMsg(NULL), + outputAntennaWarnings(0), + pinDef(0), + pinName(NULL), + pinWarnings(0), + prtNewLine(0), + prtSemiColon(0), + ringPlace(0), + shiftBuf(0), + shiftBufLength(0), + siteDef(0), + siteName(NULL), + siteWarnings(0), + sizeDef(0), + spParallelLength(0), + spaceMissing(0), + spacingWarnings(0), + symDef(0), + timingWarnings(0), + unitsWarnings(0), + use5_3(0), + use5_4(0), + useLenThr(0), + useMinSpacingWarnings(0), + versionNum(CURRENT_VERSION), + viaLayer(0), + viaName(NULL), + viaRuleHasDir(0), + viaRuleHasEnc(0), + viaRuleLayer(0), + viaRuleName(NULL), + viaRuleWarnings(0), + viaWarnings(0), + current_token((char*) malloc(TOKEN_SIZE)), + pv_token((char*) malloc(TOKEN_SIZE)), + uc_token((char*) malloc(TOKEN_SIZE)), + tokenSize(TOKEN_SIZE) +{ + Hist_text.push_back('\0'); + + // Initialization of arrays. + memset(ring, 0, RING_SIZE * sizeof(char*)); + memset(ringSizes, 0, RING_SIZE * sizeof(int)); + memset(lefDebug, 0, 100 * sizeof(char)); + memset(current_buffer, 0, IN_BUF_SIZE * sizeof(char)); + memset(current_stack, 0, 20 * sizeof(char*)); + memset(lefrErrMsg, 0, 1024 * sizeof(char)); + memset(msgLimit, 0, 2 * MAX_LEF_MSGS * sizeof(int)); + memset(temp_name, 0, 258 * sizeof(char)); + + + current_token[0] = '\0'; + + //lef_lex_init() + struct stat statbuf; + + //initRingBuffer(); + int i; + ringPlace = 0; + for (i = 0; i < RING_SIZE; i++) { + ring[i] = (char*) lefMalloc(TOKEN_SIZE); + ringSizes[i] = TOKEN_SIZE; + } + + if (first) { + first = 0; + } + + lef_nlines = 1; + last = current_buffer - 1; + next = current_buffer; + encrypted = 0; + first_buffer = 1; + // 12/08/1999 -- Wanda da Rosa + // open the lefrLog to write + /* 3/23/2000 -- Wanda da Rosa. Due to lots of complain, don't open + the file until there is really warning messages only. + if ((lefrLog = fopen("lefRWarning.log", "w")) == 0) { + printf( + "WARNING: Unable to open the file lefRWarning.log for writing from the directory %s.\n", + getcwd(NULL, 64)); + printf("Warning messages will not be printed.\n"); + } + */ + + // 4/11/2003 - Remove file lefrRWarning.log from directory if it exist + // pcr 569729 + if (stat("lefRWarning.log", &statbuf) != -1) { + // file exist, remove it + if (!lefSettings->LogFileAppend) + remove("lefRWarning.log"); + } + + // initialize the value + leflVal = strtod("-2147483648", &lefch); + lefrVal = strtod("2147483647", &lefch); +} + + +lefrData::~lefrData() +{ + //lef_lex_un_init() + /* Close the file */ + if (lefrLog) { + fclose(lefrLog); + lefrLog = 0; + } + + //destroyRingBuffer(); + for (int i = 0; i < RING_SIZE; i++) { + free(ring[i]); + } + + free(current_token); + free(uc_token); + free(pv_token); + + if (lefrAntennaPWLPtr) { + lefrAntennaPWLPtr->Destroy(); + free(lefrAntennaPWLPtr); + } +} + +void +lefrData::reset() +{ + if (lefData) { + delete lefData; + } + + lefData = new lefrData(); +} + +void +lefrData::initRead() +{ + hasVer = 1; + hasBusBit = 0; + hasDirection = 0; + hasDivChar = 0; + hasFixedMask = 0; + hasGeoLayer = 0; + hasInfluence = 0; + hasLayerMincut = 0; + hasManufactur = 0; + hasMask = 0; + hasMinfeature = 0; + hasNameCase = 0; + hasOpenedLogFile = 0; + hasPRP = 0; + hasParallel = 0; + hasPitch = 0; + hasSamenet = 0; + hasSite = 0; + hasSiteClass = 0; + hasSiteSize = 0; + hasSpCenter = 0; + hasSpLayer = 0; + hasSpParallel = 0; + hasSpSamenet = 0; + hasTwoWidths = 0; + hasType = 0; + hasViaRule_layer = 0; + hasWidth = 0; +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefrData.hpp b/lefdef/src/lef/lef/lefrData.hpp new file mode 100644 index 00000000..0c88d765 --- /dev/null +++ b/lefdef/src/lef/lef/lefrData.hpp @@ -0,0 +1,307 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2014, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #11 $ +// $Date: 2013/04/23 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefrData_h +#define lefrData_h + +#include +#include +#include +#include + +#include "lefiDefs.hpp" +#include "lefiUser.hpp" +#include "lefiLayer.hpp" +#include "lefiArray.hpp" +#include "lefiUtil.hpp" +#include "lefiMacro.hpp" +#include "lefiPropType.hpp" +#include "lefiCrossTalk.hpp" +#include "lefiProp.hpp" +#include "lefiNonDefault.hpp" +#include "lefiVia.hpp" +#include "lefiViaRule.hpp" +#include "lefiUnits.hpp" +#include "lefrReader.hpp" + +#define CURRENT_VERSION 5.8 +#define RING_SIZE 10 +#define IN_BUF_SIZE 16384 +#define TOKEN_SIZE 4096 + +BEGIN_LEFDEF_PARSER_NAMESPACE + +struct lefCompareStrings +{ + bool operator()(const std::string &lhs, const std::string &rhs) const { + return std::strcmp(lhs.c_str(), rhs.c_str()) < 0; + } +}; + +typedef std::map lefAliasMap; + +typedef std::map lefStringMap; + +typedef std::map lefIntMap; + +typedef std::map lefDoubleMap; + + +class lefrData { +public: + lefrData(); + ~lefrData(); + + static void reset(); + void initRead(); + void doubleBuffer(); + + FILE* lefrFile; + FILE* lefrLog; + + char lefPropDefType; + + char* arrayName; + char* last; + char* layerName; + char* lefch; + char* lefrFileName; + char* macroName; + char* ndName; + char* next; + char* nonDefaultRuleName; + char* outMsg; + char* pinName; + char* shiftBuf; + char* siteName; + char* viaName; + char* viaRuleName; + + double layerCutSpacing; + double lef_save_x; + double lef_save_y; // for interpreting (*) notation of LEF/DEF + double leflVal; + double lefrVal; + double versionNum; + + int antennaInoutWarnings; + int antennaInputWarnings; + int antennaOutputWarnings; + int arrayCutsVal; + int arrayCutsWar; + int arrayWarnings; + int caseSensitiveWarnings; + int correctionTableWarnings; + int dielectricWarnings; + int doneLib; // keep track if the library is done parsing + int edgeRateScaleFactorWarnings; + int edgeRateThreshold1Warnings; + int edgeRateThreshold2Warnings; + int encrypted; + int first; + int first_buffer; + int ge56almostDone; // have reached the EXTENSION SECTION + int ge56done; // a 5.6 and it has END LIBRARY statement + int hasBusBit; + int hasDirection; + int hasDivChar; + int hasFixedMask; + int hasGeoLayer; + int hasInfluence; + int hasLayerMincut; + int hasManufactur; + int hasMask; + int hasMinfeature; + int hasNameCase; + int hasOpenedLogFile; + int hasPRP; + int hasParallel; + int hasPitch; + int hasSamenet; + int hasSite; + int hasSiteClass; + int hasSiteSize; + int hasSpCenter; + int hasSpLayer; + int hasSpParallel; + int hasSpSamenet; + int hasTwoWidths; + int hasType; + int hasVer; + int hasViaRule_layer; + int hasWidth; + int hasFatalError; // don't report errors after the file end. + int iRDropWarnings; + int ignoreVersion; // ignore checking version number + int inDefine; + int inoutAntennaWarnings; + int inputAntennaWarnings; + int input_level; + int isGenerate; + int layerCut; + int layerDir; + int layerMastOver; + int layerRout; + int layerWarnings; + int lefDefIf; + int lefDumbMode; + int lefErrMsgPrinted; + int lefFixedMask; //All the LEF MACRO PIN MASK assignments can be + int lefInfoMsgPrinted; + int lefInvalidChar; + int lefNdRule; + int lefNewIsKeyword; + int lefNlToken; + int lefNoNum; + int lefRetVal; + int lefWRetVal; + int lefWarnMsgPrinted; + int lef_errors; + int lef_nlines; + int lef_ntokens; + int lef_warnings; + int lefrDoGcell; + int lefrDoGeometries; + int lefrDoSite; + int lefrDoTrack; + int lefrHasLayer; // 5.5 this & lefrHasMaxVS is to keep track that + int lefrHasMaxVS; // MAXVIASTACK has to be after all layers + int lefrHasSpacing; // keep track of spacing in a layer + int lefrHasSpacingTbl; // keep track of spacing table in a layer + + int macroWarnings; + int maxStackViaWarnings; + int minFeatureWarnings; + int msgCnt; + int namesCaseSensitive; // always true in 5.6 + int ndLayer; + int ndLayerSpace; + int ndLayerWidth; + int ndRule; + int needGeometry; + int noWireExtensionWarnings; + int noiseMarginWarnings; + int noiseTableWarnings; + int nonDefaultWarnings; + int numVia; + int obsDef; + int origDef; + int outputAntennaWarnings; + int pinDef; + int pinWarnings; + int prtNewLine; // sometimes need to print a new line + int prtSemiColon; // sometimes ; is not printed yet + int ringPlace; + int shiftBufLength; + int siteDef; + int siteWarnings; + int sizeDef; + int spParallelLength; + int spaceMissing; + int spacingWarnings; + int symDef; + int timingWarnings; + int unitsWarnings; + int use5_3; + int use5_4; + int useLenThr; + int useMinSpacingWarnings; + int viaLayer; + int viaRuleHasDir; + int viaRuleHasEnc; + int viaRuleLayer; + int viaRuleWarnings; + int viaWarnings; + + lefiAntennaEnum antennaType; + lefiAntennaPWL* lefrAntennaPWLPtr; + lefiArray lefrArray; + lefiCorrectionTable lefrCorrectionTable; + lefiDensity lefrDensity; + lefiGcellPattern* lefrGcellPatternPtr; + lefiGeometries* lefrGeometriesPtr; + lefiIRDrop lefrIRDrop; + lefiLayer lefrLayer; + lefiMacro lefrMacro; + lefiMaxStackVia lefrMaxStackVia; // 5.5 + lefiMinFeature lefrMinFeature; + lefiNoiseMargin lefrNoiseMargin; + lefiNoiseTable lefrNoiseTable; + lefiNonDefault lefrNonDefault; + lefiNonDefault* nd; // PCR 909010 - For VIA in the nondefaultrule + lefiNum macroNum; + lefiObstruction lefrObstruction; + lefiPin lefrPin; + lefiProp lefrProp; + lefiSite lefrSite; + lefiSitePattern* lefrSitePatternPtr; + lefiSpacing lefrSpacing; + lefiTiming lefrTiming; + lefiTrackPattern* lefrTrackPatternPtr; + lefiUnits lefrUnits; + lefiUseMinSpacing lefrUseMinSpacing; + lefiVia lefrVia; + lefiViaRule lefrViaRule; + + lefStringMap alias_set; + lefDoubleMap define_set; + lefIntMap defineb_set; + lefStringMap defines_set; + int tokenSize; + + //ARRAYS + // Ring buffer storage + char *ring[RING_SIZE]; + int ringSizes[RING_SIZE]; + char lefDebug[100]; + + char *current_token; + char *pv_token; + char *uc_token; + + char current_buffer[IN_BUF_SIZE]; + const char *current_stack[20]; // the stack itself + + char lefrErrMsg[1024]; + char temp_name[258]; + + std::vector Hist_text; + + // to hold the msg limit, 0 - num of limit + // 1 - num of message printed, 4701 = 4700 + 1, message starts on 1 + // 2 - warning printed + int msgLimit[2][MAX_LEF_MSGS]; +}; + +extern lefrData *lefData; + +END_LEFDEF_PARSER_NAMESPACE + +#endif + diff --git a/lefdef/src/lef/lef/lefrReader.cpp b/lefdef/src/lef/lef/lefrReader.cpp new file mode 100644 index 00000000..ccc9499e --- /dev/null +++ b/lefdef/src/lef/lef/lefrReader.cpp @@ -0,0 +1,1910 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** +#include "lefrReader.hpp" +#include "lex.h" +#include +#include + +#include "lefiDebug.hpp" +#include "lefrData.hpp" +#include "lefrSettings.hpp" +#include "lefrCallBacks.hpp" + +#define NOCBK 100 +#define NOLEFMSG 4701 // 4701 = 4700 + 1, message starts on 1 + +# define LEF_INIT lef_init(__FUNCTION__) + +BEGIN_LEFDEF_PARSER_NAMESPACE + +static const char *init_call_func = NULL; + +extern double convert_name2num(const char *versionName); +extern bool validateMaskNumber(int num); + +void +lef_init(const char *func) +{ + if (lefSettings == NULL) { + lefrSettings::reset(); + init_call_func = func; + } + + if (lefCallbacks == NULL) { + lefrCallbacks::reset(); + init_call_func = func; + } +} + + +void +lefiNerr(int i) +{ + sprintf(lefData->lefrErrMsg, "ERROR number %d\n", i); + lefiError(1, 0, lefData->lefrErrMsg); + exit(2); +} + +void +lefiNwarn(int i) +{ + sprintf(lefData->lefrErrMsg, "WARNING number %d\n", i); + lefiError(1, 0, lefData->lefrErrMsg); + exit(2); +} + +double +convert_name2num(const char *versionName) +{ + char majorNm[80]; + char minorNm[80]; + char *subMinorNm = NULL; + + char *versionNm = strdup(versionName); + + double major = 0, minor = 0, subMinor = 0; + double version, versionNumber; + char finalVersion[80]; + + sscanf(versionNm, "%[^.].%s", majorNm, minorNm); + char *p1 = strchr(minorNm, '.'); + if (p1) { + subMinorNm = p1 + 1; + *p1 = '\0'; + } + major = atof(majorNm); + minor = atof(minorNm); + if (subMinorNm) + subMinor = atof(subMinorNm); + + version = major; + + if (minor > 0) + version = major + minor / 10; + + if (subMinor > 0) + version = version + subMinor / 1000; + + lefFree(versionNm); + + sprintf(finalVersion, "%.4f", version); + + versionNumber = atof(finalVersion); + + return versionNumber; +} + +bool +validateMaskNumber(int num) +{ + int digit = 0; + int index = 0; + + if (num < 0) { + return false; + } + + while (num > 0) { + digit = num % 10; + + if (digit > 3) { + return false; + } + + index++; + num = num / 10; + } + + if (index > 3) { + return false; + } + + return true; +} + +// *****************************************************************************s +// Global variables +// ***************************************************************************** + +// 5.6 END LIBRARY is optional. +// Function to initialize global variables. +// This make sure the global variables are initialized + +// User control warning to be printed by the parser +void +lefrDisableParserMsgs(int nMsg, + int *msgs) +{ + LEF_INIT; + if (nMsg <= 0) + return; + + for (int i = 0; i < nMsg; i++) { + lefSettings->disableMsg(msgs[i]); + } +} + +void +lefrEnableParserMsgs(int nMsg, + int *msgs) +{ + LEF_INIT; + for (int i = 0; i < nMsg; i++) { + lefSettings->enableMsg(msgs[i]); + } +} + +void +lefrEnableAllMsgs() +{ + LEF_INIT; + lefSettings->enableAllMsgs(); + lefSettings->dAllMsgs = 0; +} + +void +lefrSetTotalMsgLimit(int totNumMsgs) +{ + LEF_INIT; + lefSettings->TotalMsgLimit = totNumMsgs; +} + +void +lefrSetLimitPerMsg(int msgId, + int numMsg) +{ + LEF_INIT; + + if ((msgId > 0) && (msgId < NOLEFMSG)) { + lefSettings->MsgLimit[msgId] = numMsg; + } +} + +// ***************************************************************************** +// Since the lef parser only keep one list of disable message ids, and does +// not have a list of enable message ids, if the API lefrDisableAllMsgs is +// called to disable all message ids, user has to call API lefrEnableAllMsgs +// to enable all message ids lefData->first, before calling lefrDisableParserMsgs & +// lefrEnableParserMsgs. +// Users cannot call lefrDisableAllMsgs and call lefrEnableParserMsgs to +// enable a small list of message ids since lefrDisableAllMsgs does not have +// a list of all message ids, hence there isn't a list for lefrEnableParserMsgs +// to work on to enable the message ids. +// ***************************************************************************** +void +lefrDisableAllMsgs() +{ + LEF_INIT; + lefSettings->enableAllMsgs(); + lefSettings->dAllMsgs = 1; +} + +// Parser control by the user. +// Reader initialization +int +lefrInit() +{ + return lefrInitSession(0); +} + +int +lefrInitSession(int startSession) +{ + if (startSession) { + if (init_call_func != NULL) { + fprintf(stderr, "ERROR: Attempt to call configuration function '%s' in LEF parser before lefrInit() call in session-based mode.\n", init_call_func); + return 1; + } + + lefrCallbacks::reset(); + lefrSettings::reset(); + } else { + if (lefCallbacks == NULL) { + lefrCallbacks::reset(); + } + + if (lefSettings == NULL) { + lefrSettings::reset(); + } + } + + return 0; +} + +int +lefrReset() +{ + // obsoleted. + return 0; +} + + +int +lefrClear() +{ + delete lefData; + lefData = NULL; + + delete lefCallbacks; + lefCallbacks = NULL; + + delete lefSettings; + lefSettings = NULL; + + return 0; +} + + +const char * +lefrFName() +{ + return lefData->lefrFileName; +} + +int +lefrReleaseNResetMemory() +{ + return 0; +} + +int +lefrRead(FILE *f, + const char *fName, + lefiUserData uData) +{ + LEF_INIT; + int status; + + lefrData::reset(); + + lefData->versionNum = (lefSettings->VersionNum == 0.0) ? + CURRENT_VERSION : + lefData->versionNum = lefSettings->VersionNum; + + if (lefSettings->CaseSensitiveSet) { + lefData->namesCaseSensitive = lefSettings->CaseSensitive; + } else if (lefData->versionNum > 5.5) { + lefData->namesCaseSensitive = true; + } + + lefData->lefrFileName = (char*) fName; + lefData->lefrFile = f; + lefSettings->UserData = uData; + + status = lefyyparse(); + + return status; +} + +void +lefrSetUnusedCallbacks(lefrVoidCbkFnType func) +{ + // Set all of the callbacks that have not been set yet to + // the given function. + LEF_INIT; + + if (lefCallbacks->ArrayBeginCbk == 0) + lefCallbacks->ArrayBeginCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->ArrayCbk == 0) + lefCallbacks->ArrayCbk = (lefrArrayCbkFnType) func; + if (lefCallbacks->ArrayEndCbk == 0) + lefCallbacks->ArrayEndCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->DividerCharCbk == 0) + lefCallbacks->DividerCharCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->BusBitCharsCbk == 0) + lefCallbacks->BusBitCharsCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->CaseSensitiveCbk == 0) + lefCallbacks->CaseSensitiveCbk = (lefrIntegerCbkFnType) func; + if (lefCallbacks->NoWireExtensionCbk == 0) + lefCallbacks->NoWireExtensionCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->CorrectionTableCbk == 0) + lefCallbacks->CorrectionTableCbk = (lefrCorrectionTableCbkFnType) func; + if (lefCallbacks->DielectricCbk == 0) + lefCallbacks->DielectricCbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->EdgeRateScaleFactorCbk == 0) + lefCallbacks->EdgeRateScaleFactorCbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->EdgeRateThreshold1Cbk == 0) + lefCallbacks->EdgeRateThreshold1Cbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->EdgeRateThreshold2Cbk == 0) + lefCallbacks->EdgeRateThreshold2Cbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->IRDropBeginCbk == 0) + lefCallbacks->IRDropBeginCbk = (lefrVoidCbkFnType) func; + if (lefCallbacks->IRDropCbk == 0) + lefCallbacks->IRDropCbk = (lefrIRDropCbkFnType) func; + if (lefCallbacks->IRDropEndCbk == 0) + lefCallbacks->IRDropEndCbk = (lefrVoidCbkFnType) func; + if (lefCallbacks->LayerCbk == 0) + lefCallbacks->LayerCbk = (lefrLayerCbkFnType) func; + if (lefCallbacks->LibraryEndCbk == 0) + lefCallbacks->LibraryEndCbk = (lefrVoidCbkFnType) func; + if (lefCallbacks->MacroBeginCbk == 0) + lefCallbacks->MacroBeginCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->MacroCbk == 0) + lefCallbacks->MacroCbk = (lefrMacroCbkFnType) func; + if (lefCallbacks->MacroClassTypeCbk == 0) + lefCallbacks->MacroClassTypeCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->MacroOriginCbk == 0) + lefCallbacks->MacroOriginCbk = (lefrMacroNumCbkFnType) func; + if (lefCallbacks->MacroSiteCbk == 0) + lefCallbacks->MacroSiteCbk = (lefrMacroSiteCbkFnType) func; + if (lefCallbacks->MacroForeignCbk == 0) + lefCallbacks->MacroForeignCbk = (lefrMacroForeignCbkFnType) func; + if (lefCallbacks->MacroSizeCbk == 0) + lefCallbacks->MacroSizeCbk = (lefrMacroNumCbkFnType) func; + if (lefCallbacks->MacroFixedMaskCbk == 0) + lefCallbacks->MacroFixedMaskCbk = (lefrIntegerCbkFnType) func; + if (lefCallbacks->TimingCbk == 0) + lefCallbacks->TimingCbk = (lefrTimingCbkFnType) func; + if (lefCallbacks->MinFeatureCbk == 0) + lefCallbacks->MinFeatureCbk = (lefrMinFeatureCbkFnType) func; + if (lefCallbacks->NoiseMarginCbk == 0) + lefCallbacks->NoiseMarginCbk = (lefrNoiseMarginCbkFnType) func; + if (lefCallbacks->NoiseTableCbk == 0) + lefCallbacks->NoiseTableCbk = (lefrNoiseTableCbkFnType) func; + if (lefCallbacks->NonDefaultCbk == 0) + lefCallbacks->NonDefaultCbk = (lefrNonDefaultCbkFnType) func; + if (lefCallbacks->ObstructionCbk == 0) + lefCallbacks->ObstructionCbk = (lefrObstructionCbkFnType) func; + if (lefCallbacks->PinCbk == 0) + lefCallbacks->PinCbk = (lefrPinCbkFnType) func; + if (lefCallbacks->PropBeginCbk == 0) + lefCallbacks->PropBeginCbk = (lefrVoidCbkFnType) func; + if (lefCallbacks->PropCbk == 0) + lefCallbacks->PropCbk = (lefrPropCbkFnType) func; + if (lefCallbacks->PropEndCbk == 0) + lefCallbacks->PropEndCbk = (lefrVoidCbkFnType) func; + if (lefCallbacks->SiteCbk == 0) + lefCallbacks->SiteCbk = (lefrSiteCbkFnType) func; + if (lefCallbacks->SpacingBeginCbk == 0) + lefCallbacks->SpacingBeginCbk = (lefrVoidCbkFnType) func; + if (lefCallbacks->SpacingCbk == 0) + lefCallbacks->SpacingCbk = (lefrSpacingCbkFnType) func; + if (lefCallbacks->SpacingEndCbk == 0) + lefCallbacks->SpacingEndCbk = (lefrVoidCbkFnType) func; + if (lefCallbacks->UnitsCbk == 0) + lefCallbacks->UnitsCbk = (lefrUnitsCbkFnType) func; + if ((lefCallbacks->VersionCbk == 0) && (lefCallbacks->VersionStrCbk == 0)) { + // both version callbacks weren't set, if either one is set, it is ok + lefCallbacks->VersionCbk = (lefrDoubleCbkFnType) func; + lefCallbacks->VersionStrCbk = (lefrStringCbkFnType) func; + } + if (lefCallbacks->ViaCbk == 0) + lefCallbacks->ViaCbk = (lefrViaCbkFnType) func; + if (lefCallbacks->ViaRuleCbk == 0) + lefCallbacks->ViaRuleCbk = (lefrViaRuleCbkFnType) func; + if (lefCallbacks->InputAntennaCbk == 0) + lefCallbacks->InputAntennaCbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->OutputAntennaCbk == 0) + lefCallbacks->OutputAntennaCbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->InoutAntennaCbk == 0) + lefCallbacks->InoutAntennaCbk = (lefrDoubleCbkFnType) func; + + // NEW CALLBACK - Add a line here for each new callback routine + if (lefCallbacks->AntennaInputCbk == 0) + lefCallbacks->AntennaInputCbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->AntennaInoutCbk == 0) + lefCallbacks->AntennaInoutCbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->AntennaOutputCbk == 0) + lefCallbacks->AntennaOutputCbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->ManufacturingCbk == 0) + lefCallbacks->ManufacturingCbk = (lefrDoubleCbkFnType) func; + if (lefCallbacks->UseMinSpacingCbk == 0) + lefCallbacks->UseMinSpacingCbk = (lefrUseMinSpacingCbkFnType) func; + if (lefCallbacks->ClearanceMeasureCbk == 0) + lefCallbacks->ClearanceMeasureCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->MacroClassTypeCbk == 0) + lefCallbacks->MacroClassTypeCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->MacroOriginCbk == 0) + lefCallbacks->MacroOriginCbk = (lefrMacroNumCbkFnType) func; + if (lefCallbacks->MacroSiteCbk == 0) + lefCallbacks->MacroSiteCbk = (lefrMacroSiteCbkFnType) func; + if (lefCallbacks->MacroForeignCbk == 0) + lefCallbacks->MacroForeignCbk = (lefrMacroForeignCbkFnType) func; + if (lefCallbacks->MacroSizeCbk == 0) + lefCallbacks->MacroSizeCbk = (lefrMacroNumCbkFnType) func; + if (lefCallbacks->MacroFixedMaskCbk == 0) + lefCallbacks->MacroFixedMaskCbk = (lefrIntegerCbkFnType) func; + if (lefCallbacks->MacroEndCbk == 0) + lefCallbacks->MacroEndCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->MaxStackViaCbk == 0) + lefCallbacks->MaxStackViaCbk = (lefrMaxStackViaCbkFnType) func; + if (lefCallbacks->ExtensionCbk == 0) + lefCallbacks->ExtensionCbk = (lefrStringCbkFnType) func; + if (lefCallbacks->DensityCbk == 0) + lefCallbacks->DensityCbk = (lefrDensityCbkFnType) func; + if (lefCallbacks->FixedMaskCbk == 0) + lefCallbacks->FixedMaskCbk = (lefrIntegerCbkFnType) func; +} + +// These count up the number of times an unset callback is called... +static int lefrUnusedCount[NOCBK]; + +int +lefrCountFunc(lefrCallbackType_e e, + void *v, + lefiUserData d) +{ + LEF_INIT; + int i = (int) e; + if (lefiDebug(23)) + printf("count %d 0x%p 0x%p\n", (int) e, v, d); + if (i >= 0 && i < NOCBK) { + lefrUnusedCount[i] += 1; + return 0; + } + return 1; +} + +void +lefrSetRegisterUnusedCallbacks() +{ + LEF_INIT; + int i; + lefSettings->RegisterUnused = 1; + lefrSetUnusedCallbacks(lefrCountFunc); + for (i = 0; i < NOCBK; i++) + lefrUnusedCount[i] = 0; +} + +void +lefrPrintUnusedCallbacks(FILE *f) +{ + LEF_INIT; + int i; + int firstCB = 1; + int trueCB = 1; + + if (lefSettings->RegisterUnused == 0) { + fprintf(f, + "ERROR (LEFPARS-101): lefrSetRegisterUnusedCallbacks was not called to setup this data.\n"); + return; + } + + for (i = 0; i < NOCBK; i++) { + if (lefrUnusedCount[i]) { + // Do not need to print yet if i is: + // lefrMacroClassTypeCbkType + // lefrMacroOriginCbkType + // lefrMacroSizeCbkType + // lefrMacroEndCbkType + // it will be taken care later + if (firstCB && + (lefrCallbackType_e) i != lefrMacroClassTypeCbkType && + (lefrCallbackType_e) i != lefrMacroOriginCbkType && + (lefrCallbackType_e) i != lefrMacroSiteCbkType && + (lefrCallbackType_e) i != lefrMacroForeignCbkType && + (lefrCallbackType_e) i != lefrMacroSizeCbkType && + (lefrCallbackType_e) i != lefrMacroFixedMaskCbkType && + (lefrCallbackType_e) i != lefrMacroEndCbkType) { + fprintf(f, + "WARNING (LEFPARS-201): LEF items that were present but ignored because of no callback:\n"); + firstCB = 0; + } + switch ((lefrCallbackType_e) i) { + case lefrArrayBeginCbkType: + fprintf(f, "ArrayBegin"); + break; + case lefrArrayCbkType: + fprintf(f, "Array"); + break; + case lefrArrayEndCbkType: + fprintf(f, "ArrayEnd"); + break; + case lefrDividerCharCbkType: + fprintf(f, "DividerChar"); + break; + case lefrBusBitCharsCbkType: + fprintf(f, "BusBitChars"); + break; + case lefrNoWireExtensionCbkType: + fprintf(f, "NoWireExtensionAtPins"); + break; + case lefrCaseSensitiveCbkType: + fprintf(f, "CaseSensitive"); + break; + case lefrCorrectionTableCbkType: + fprintf(f, "CorrectionTable"); + break; + case lefrDielectricCbkType: + fprintf(f, "Dielectric"); + break; + case lefrEdgeRateScaleFactorCbkType: + fprintf(f, "EdgeRateScaleFactor"); + break; + case lefrEdgeRateThreshold1CbkType: + fprintf(f, "EdgeRateThreshold1"); + break; + case lefrEdgeRateThreshold2CbkType: + fprintf(f, "EdgeRateThreshold2"); + break; + case lefrIRDropBeginCbkType: + fprintf(f, "IRDropBegin"); + break; + case lefrIRDropCbkType: + fprintf(f, "IRDrop"); + break; + case lefrIRDropEndCbkType: + fprintf(f, "IRDropEnd"); + break; + case lefrLayerCbkType: + fprintf(f, "Layer"); + break; + case lefrLibraryEndCbkType: + fprintf(f, "LibraryEnd"); + break; + case lefrMacroBeginCbkType: + fprintf(f, "MacroBegin"); + break; + case lefrMacroCbkType: + fprintf(f, "Macro"); + break; + case lefrMinFeatureCbkType: + fprintf(f, "MinFeature"); + break; + case lefrNoiseMarginCbkType: + fprintf(f, "NoiseMargin"); + break; + case lefrNoiseTableCbkType: + fprintf(f, "NoiseTable"); + break; + case lefrNonDefaultCbkType: + fprintf(f, "NonDefault"); + break; + case lefrObstructionCbkType: + fprintf(f, "Obstruction"); + break; + case lefrPinCbkType: + fprintf(f, "Pin"); + break; + case lefrPropBeginCbkType: + fprintf(f, "PropBegin"); + break; + case lefrPropCbkType: + fprintf(f, "Prop"); + break; + case lefrPropEndCbkType: + fprintf(f, "PropEnd"); + break; + case lefrSiteCbkType: + fprintf(f, "Site"); + break; + case lefrSpacingBeginCbkType: + fprintf(f, "SpacingBegin"); + break; + case lefrSpacingCbkType: + fprintf(f, "Spacing"); + break; + case lefrSpacingEndCbkType: + fprintf(f, "SpacingEnd"); + break; + case lefrUnitsCbkType: + fprintf(f, "Units"); + break; + case lefrVersionCbkType: + fprintf(f, "Version"); + break; + case lefrVersionStrCbkType: + fprintf(f, "Version"); + break; + case lefrViaCbkType: + fprintf(f, "Via"); + break; + case lefrViaRuleCbkType: + fprintf(f, "ViaRule"); + break; + case lefrInputAntennaCbkType: + fprintf(f, "InputAntenna"); + break; + case lefrOutputAntennaCbkType: + fprintf(f, "OutputAntenna"); + break; + case lefrInoutAntennaCbkType: + fprintf(f, "InoutAntenna"); + break; + case lefrAntennaInputCbkType: + fprintf(f, "AntennaInput"); + break; + case lefrAntennaInoutCbkType: + fprintf(f, "AntennaInout"); + break; + case lefrAntennaOutputCbkType: + fprintf(f, "AntennaOutput"); + break; + case lefrManufacturingCbkType: + fprintf(f, "Manufacturing"); + break; + case lefrUseMinSpacingCbkType: + fprintf(f, "UseMinSpacing"); + break; + case lefrClearanceMeasureCbkType: + fprintf(f, "ClearanceMeasure"); + break; + case lefrTimingCbkType: + fprintf(f, "Timing"); + break; + case lefrMaxStackViaCbkType: + fprintf(f, "MaxStackVia"); + break; + case lefrExtensionCbkType: + fprintf(f, "Extension"); + break; + // 07/13/2001 - Wanda da Rosa + // Don't need to print MacroClassType if it is not set, + // since this is an extra CB for Ambit only. + // Other users should not have to deal with it. + // case lefrMacroClassTypeCbkType: fprintf(f, "MacroClassType"); break; + case lefrMacroClassTypeCbkType: + case lefrMacroOriginCbkType: + case lefrMacroSiteCbkType: + case lefrMacroForeignCbkType: + case lefrMacroSizeCbkType: + case lefrMacroFixedMaskCbkType: + case lefrMacroEndCbkType: + trueCB = 0; + break; + // NEW CALLBACK add the print here + case lefrDensityCbkType: + fprintf(f, "Density"); + break; + case lefrFixedMaskCbkType: + fprintf(f, "FixedMask"); + break; + default: + fprintf(f, "BOGUS ENTRY"); + break; + } + if (trueCB) + fprintf(f, " %d\n", lefrUnusedCount[i]); + else + trueCB = 1; + } + } +} + +void +lefrUnsetCallbacks() +{ + lefrCallbacks::reset(); +} + +// Unset callbacks functions +void +lefrUnsetAntennaInoutCbk() +{ + LEF_INIT; + lefCallbacks->AntennaInoutCbk = 0; +} + +void +lefrUnsetAntennaInputCbk() +{ + LEF_INIT; + lefCallbacks->AntennaInputCbk = 0; +} + +void +lefrUnsetAntennaOutputCbk() +{ + LEF_INIT; + lefCallbacks->AntennaOutputCbk = 0; +} + +void +lefrUnsetArrayBeginCbk() +{ + LEF_INIT; + lefCallbacks->ArrayBeginCbk = 0; +} + +void +lefrUnsetArrayCbk() +{ + LEF_INIT; + lefCallbacks->ArrayCbk = 0; +} + +void +lefrUnsetArrayEndCbk() +{ + LEF_INIT; + lefCallbacks->ArrayEndCbk = 0; +} + +void +lefrUnsetBusBitCharsCbk() +{ + LEF_INIT; + lefCallbacks->BusBitCharsCbk = 0; +} + +void +lefrUnsetCaseSensitiveCbk() +{ + LEF_INIT; + lefCallbacks->CaseSensitiveCbk = 0; +} + +void +lefrUnsetClearanceMeasureCbk() +{ + LEF_INIT; + lefCallbacks->ClearanceMeasureCbk = 0; +} + +void +lefrUnsetCorrectionTableCbk() +{ + LEF_INIT; + lefCallbacks->CorrectionTableCbk = 0; +} + +void +lefrUnsetDensityCbk() +{ + LEF_INIT; + lefCallbacks->DensityCbk = 0; +} + +void +lefrUnsetDielectricCbk() +{ + LEF_INIT; + lefCallbacks->DielectricCbk = 0; +} + +void +lefrUnsetDividerCharCbk() +{ + LEF_INIT; + lefCallbacks->DividerCharCbk = 0; +} + +void +lefrUnsetEdgeRateScaleFactorCbk() +{ + LEF_INIT; + lefCallbacks->EdgeRateScaleFactorCbk = 0; +} + +void +lefrUnsetEdgeRateThreshold1Cbk() +{ + LEF_INIT; + lefCallbacks->EdgeRateThreshold1Cbk = 0; +} + +void +lefrUnsetEdgeRateThreshold2Cbk() +{ + LEF_INIT; + lefCallbacks->EdgeRateThreshold2Cbk = 0; +} + +void +lefrUnsetExtensionCbk() +{ + LEF_INIT; + lefCallbacks->ExtensionCbk = 0; +} + +void +lefrUnsetFixedMaskCbk() +{ + LEF_INIT; + lefCallbacks->FixedMaskCbk = 0; +} +void +lefrUnsetIRDropBeginCbk() +{ + LEF_INIT; + lefCallbacks->IRDropBeginCbk = 0; +} + +void +lefrUnsetIRDropCbk() +{ + LEF_INIT; + lefCallbacks->IRDropCbk = 0; +} + +void +lefrUnsetIRDropEndCbk() +{ + LEF_INIT; + lefCallbacks->IRDropEndCbk = 0; +} + +void +lefrUnsetInoutAntennaCbk() +{ + LEF_INIT; + lefCallbacks->InoutAntennaCbk = 0; +} + +void +lefrUnsetInputAntennaCbk() +{ + LEF_INIT; + lefCallbacks->InputAntennaCbk = 0; +} + +void +lefrUnsetLayerCbk() +{ + LEF_INIT; + lefCallbacks->LayerCbk = 0; +} + +void +lefrUnsetLibraryEndCbk() +{ + LEF_INIT; + lefCallbacks->LibraryEndCbk = 0; +} + +void +lefrUnsetMacroBeginCbk() +{ + LEF_INIT; + lefCallbacks->MacroBeginCbk = 0; +} + +void +lefrUnsetMacroCbk() +{ + LEF_INIT; + lefCallbacks->MacroCbk = 0; +} + +void +lefrUnsetMacroClassTypeCbk() +{ + LEF_INIT; + lefCallbacks->MacroClassTypeCbk = 0; +} + +void +lefrUnsetMacroEndCbk() +{ + LEF_INIT; + lefCallbacks->MacroEndCbk = 0; +} + +void +lefrUnsetMacroFixedMaskCbk() +{ + LEF_INIT; + lefCallbacks->MacroFixedMaskCbk = 0; +} + +void +lefrUnsetMacroOriginCbk() +{ + LEF_INIT; + lefCallbacks->MacroOriginCbk = 0; +} + +void +lefrUnsetMacroSiteCbk() +{ + LEF_INIT; + lefCallbacks->MacroSiteCbk = 0; +} + +void +lefrUnsetMacroForeignCbk() +{ + LEF_INIT; + lefCallbacks->MacroForeignCbk = 0; +} + +void +lefrUnsetMacroSizeCbk() +{ + LEF_INIT; + lefCallbacks->MacroSizeCbk = 0; +} + +void +lefrUnsetManufacturingCbk() +{ + LEF_INIT; + lefCallbacks->ManufacturingCbk = 0; +} + +void +lefrUnsetMaxStackViaCbk() +{ + LEF_INIT; + lefCallbacks->MaxStackViaCbk = 0; +} + +void +lefrUnsetMinFeatureCbk() +{ + LEF_INIT; + lefCallbacks->MinFeatureCbk = 0; +} + +void +lefrUnsetNoWireExtensionCbk() +{ + LEF_INIT; + lefCallbacks->NoWireExtensionCbk = 0; +} + +void +lefrUnsetNoiseMarginCbk() +{ + LEF_INIT; + lefCallbacks->NoiseMarginCbk = 0; +} + +void +lefrUnsetNoiseTableCbk() +{ + LEF_INIT; + lefCallbacks->NoiseTableCbk = 0; +} + +void +lefrUnsetNonDefaultCbk() +{ + LEF_INIT; + lefCallbacks->NonDefaultCbk = 0; +} + +void +lefrUnsetObstructionCbk() +{ + LEF_INIT; + lefCallbacks->ObstructionCbk = 0; +} + +void +lefrUnsetOutputAntennaCbk() +{ + LEF_INIT; + lefCallbacks->OutputAntennaCbk = 0; +} + +void +lefrUnsetPinCbk() +{ + LEF_INIT; + lefCallbacks->PinCbk = 0; +} + +void +lefrUnsetPropBeginCbk() +{ + LEF_INIT; + lefCallbacks->PropBeginCbk = 0; +} + +void +lefrUnsetPropCbk() +{ + LEF_INIT; + lefCallbacks->PropCbk = 0; +} + +void +lefrUnsetPropEndCbk() +{ + LEF_INIT; + lefCallbacks->PropEndCbk = 0; +} + +void +lefrUnsetSiteCbk() +{ + LEF_INIT; + lefCallbacks->SiteCbk = 0; +} + +void +lefrUnsetSpacingBeginCbk() +{ + LEF_INIT; + lefCallbacks->SpacingBeginCbk = 0; +} + +void +lefrUnsetSpacingCbk() +{ + LEF_INIT; + lefCallbacks->SpacingCbk = 0; +} + +void +lefrUnsetSpacingEndCbk() +{ + LEF_INIT; + lefCallbacks->SpacingEndCbk = 0; +} + +void +lefrUnsetTimingCbk() +{ + LEF_INIT; + lefCallbacks->TimingCbk = 0; +} + +void +lefrUnsetUnitsCbk() +{ + LEF_INIT; + lefCallbacks->UnitsCbk = 0; +} + +void +lefrUnsetUseMinSpacingCbk() +{ + LEF_INIT; + lefCallbacks->UseMinSpacingCbk = 0; +} + +void +lefrUnsetVersionCbk() +{ + LEF_INIT; + lefCallbacks->VersionCbk = 0; +} + +void +lefrUnsetVersionStrCbk() +{ + LEF_INIT; + lefCallbacks->VersionStrCbk = 0; +} + +void +lefrUnsetViaCbk() +{ + LEF_INIT; + lefCallbacks->ViaCbk = 0; +} + +void +lefrUnsetViaRuleCbk() +{ + LEF_INIT; + lefCallbacks->ViaRuleCbk = 0; +} + +// Setting of user data. +void +lefrSetUserData(lefiUserData d) +{ + LEF_INIT; + lefSettings->UserData = d; +} + +lefiUserData +lefrGetUserData() +{ + LEF_INIT; + return lefSettings->UserData; +} + +// Callbacks set functions. + +void +lefrSetAntennaInoutCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->AntennaInoutCbk = f; +} + +void +lefrSetAntennaInputCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->AntennaInputCbk = f; +} + +void +lefrSetAntennaOutputCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->AntennaOutputCbk = f; +} + +void +lefrSetArrayBeginCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ArrayBeginCbk = f; +} + +void +lefrSetArrayCbk(lefrArrayCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ArrayCbk = f; +} + +void +lefrSetArrayEndCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ArrayEndCbk = f; +} + +void +lefrSetBusBitCharsCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->BusBitCharsCbk = f; +} + +void +lefrSetCaseSensitiveCbk(lefrIntegerCbkFnType f) +{ + LEF_INIT; + lefCallbacks->CaseSensitiveCbk = f; +} + +void +lefrSetClearanceMeasureCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ClearanceMeasureCbk = f; +} + +void +lefrSetCorrectionTableCbk(lefrCorrectionTableCbkFnType f) +{ + LEF_INIT; + lefCallbacks->CorrectionTableCbk = f; +} + +void +lefrSetDensityCbk(lefrDensityCbkFnType f) +{ + LEF_INIT; + lefCallbacks->DensityCbk = f; +} + +void +lefrSetDielectricCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->DielectricCbk = f; +} + +void +lefrSetDividerCharCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->DividerCharCbk = f; +} + +void +lefrSetEdgeRateScaleFactorCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->EdgeRateScaleFactorCbk = f; +} + +void +lefrSetEdgeRateThreshold1Cbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->EdgeRateThreshold1Cbk = f; +} + +void +lefrSetEdgeRateThreshold2Cbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->EdgeRateThreshold2Cbk = f; +} + +void +lefrSetExtensionCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ExtensionCbk = f; +} + +void +lefrSetFixedMaskCbk(lefrIntegerCbkFnType f) +{ + LEF_INIT; + lefCallbacks->FixedMaskCbk = f; +} + +void +lefrSetIRDropBeginCbk(lefrVoidCbkFnType f) +{ + LEF_INIT; + lefCallbacks->IRDropBeginCbk = f; +} + +void +lefrSetIRDropCbk(lefrIRDropCbkFnType f) +{ + LEF_INIT; + lefCallbacks->IRDropCbk = f; +} + +void +lefrSetIRDropEndCbk(lefrVoidCbkFnType f) +{ + LEF_INIT; + lefCallbacks->IRDropEndCbk = f; +} + +void +lefrSetInoutAntennaCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->InoutAntennaCbk = f; +} + +void +lefrSetInputAntennaCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->InputAntennaCbk = f; +} + +void +lefrSetLayerCbk(lefrLayerCbkFnType f) +{ + LEF_INIT; + lefCallbacks->LayerCbk = f; +} + +void +lefrSetLibraryEndCbk(lefrVoidCbkFnType f) +{ + LEF_INIT; + lefCallbacks->LibraryEndCbk = f; +} + +void +lefrSetMacroBeginCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroBeginCbk = f; +} + +void +lefrSetMacroCbk(lefrMacroCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroCbk = f; +} + +void +lefrSetMacroClassTypeCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroClassTypeCbk = f; +} + +void +lefrSetMacroEndCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroEndCbk = f; +} + +void +lefrSetMacroFixedMaskCbk(lefrIntegerCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroFixedMaskCbk = f; +} + +void +lefrSetMacroOriginCbk(lefrMacroNumCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroOriginCbk = f; +} + +void +lefrSetMacroSiteCbk(lefrMacroSiteCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroSiteCbk = f; +} + +void +lefrSetMacroForeignCbk(lefrMacroForeignCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroForeignCbk = f; +} + +void +lefrSetMacroSizeCbk(lefrMacroNumCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MacroSizeCbk = f; +} + +void +lefrSetManufacturingCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ManufacturingCbk = f; +} + +void +lefrSetMaxStackViaCbk(lefrMaxStackViaCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MaxStackViaCbk = f; +} + +void +lefrSetMinFeatureCbk(lefrMinFeatureCbkFnType f) +{ + LEF_INIT; + lefCallbacks->MinFeatureCbk = f; +} + +void +lefrSetNoWireExtensionCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->NoWireExtensionCbk = f; +} + +void +lefrSetNoiseMarginCbk(lefrNoiseMarginCbkFnType f) +{ + LEF_INIT; + lefCallbacks->NoiseMarginCbk = f; +} + +void +lefrSetNoiseTableCbk(lefrNoiseTableCbkFnType f) +{ + LEF_INIT; + lefCallbacks->NoiseTableCbk = f; +} + +void +lefrSetNonDefaultCbk(lefrNonDefaultCbkFnType f) +{ + LEF_INIT; + lefCallbacks->NonDefaultCbk = f; +} + +void +lefrSetObstructionCbk(lefrObstructionCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ObstructionCbk = f; +} + +void +lefrSetOutputAntennaCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->OutputAntennaCbk = f; +} + +void +lefrSetPinCbk(lefrPinCbkFnType f) +{ + LEF_INIT; + lefCallbacks->PinCbk = f; +} + +void +lefrSetPropBeginCbk(lefrVoidCbkFnType f) +{ + LEF_INIT; + lefCallbacks->PropBeginCbk = f; +} + +void +lefrSetPropCbk(lefrPropCbkFnType f) +{ + LEF_INIT; + lefCallbacks->PropCbk = f; +} + +void +lefrSetPropEndCbk(lefrVoidCbkFnType f) +{ + LEF_INIT; + lefCallbacks->PropEndCbk = f; +} + +void +lefrSetSiteCbk(lefrSiteCbkFnType f) +{ + LEF_INIT; + lefCallbacks->SiteCbk = f; +} + +void +lefrSetSpacingBeginCbk(lefrVoidCbkFnType f) +{ + LEF_INIT; + lefCallbacks->SpacingBeginCbk = f; +} + +void +lefrSetSpacingCbk(lefrSpacingCbkFnType f) +{ + LEF_INIT; + lefCallbacks->SpacingCbk = f; +} + +void +lefrSetSpacingEndCbk(lefrVoidCbkFnType f) +{ + LEF_INIT; + lefCallbacks->SpacingEndCbk = f; +} + +void +lefrSetTimingCbk(lefrTimingCbkFnType f) +{ + LEF_INIT; + lefCallbacks->TimingCbk = f; +} + +void +lefrSetUnitsCbk(lefrUnitsCbkFnType f) +{ + LEF_INIT; + lefCallbacks->UnitsCbk = f; +} + +void +lefrSetUseMinSpacingCbk(lefrUseMinSpacingCbkFnType f) +{ + LEF_INIT; + lefCallbacks->UseMinSpacingCbk = f; +} + +void +lefrSetVersionCbk(lefrDoubleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->VersionCbk = f; +} + +void +lefrSetVersionStrCbk(lefrStringCbkFnType f) +{ + LEF_INIT; + lefCallbacks->VersionStrCbk = f; +} + +void +lefrSetViaCbk(lefrViaCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ViaCbk = f; +} + +void +lefrSetViaRuleCbk(lefrViaRuleCbkFnType f) +{ + LEF_INIT; + lefCallbacks->ViaRuleCbk = f; +} + +int +lefrLineNumber() +{ + // Compatibility feature: in old versions the translators, + // the function can be called before lefData initialization. + return lefData ? lefData->lef_nlines : 0; +} + +void +lefrSetLogFunction(LEFI_LOG_FUNCTION f) +{ + LEF_INIT; + lefSettings->ErrorLogFunction = f; +} + +void +lefrSetWarningLogFunction(LEFI_WARNING_LOG_FUNCTION f) +{ + LEF_INIT; + lefSettings->WarningLogFunction = f; +} + +void +lefrSetMallocFunction(LEFI_MALLOC_FUNCTION f) +{ + LEF_INIT; + lefSettings->MallocFunction = f; +} + +void +lefrSetReallocFunction(LEFI_REALLOC_FUNCTION f) +{ + LEF_INIT; + lefSettings->ReallocFunction = f; +} + +void +lefrSetFreeFunction(LEFI_FREE_FUNCTION f) +{ + LEF_INIT; + lefSettings->FreeFunction = f; +} + +void +lefrSetLineNumberFunction(LEFI_LINE_NUMBER_FUNCTION f) +{ + LEF_INIT; + lefSettings->LineNumberFunction = f; +} + +void +lefrSetDeltaNumberLines(int numLines) +{ + LEF_INIT; + lefSettings->DeltaNumberLines = numLines; +} + +// from the lexer + +void +lefrSetShiftCase() +{ + LEF_INIT; + lefSettings->ShiftCase = 1; +} + +void +lefrSetCommentChar(char c) +{ + LEF_INIT; + lefSettings->CommentChar = c; +} + +void +lefrSetCaseSensitivity(int caseSense) +{ + LEF_INIT; + lefSettings->CaseSensitive = caseSense; + lefSettings->CaseSensitiveSet = TRUE; + if (lefData) { + lefData->namesCaseSensitive = caseSense; + } +} + +void +lefrSetRelaxMode() +{ + LEF_INIT; + lefSettings->RelaxMode = TRUE; +} + +void +lefrUnsetRelaxMode() +{ + LEF_INIT; + lefSettings->RelaxMode = FALSE; +} + +void +lefrSetVersionValue(const char *version) +{ + LEF_INIT; + lefSettings->VersionNum = convert_name2num(version); +} + +void +lefrSetOpenLogFileAppend() +{ + LEF_INIT; + lefSettings->LogFileAppend = TRUE; +} + +void +lefrUnsetOpenLogFileAppend() +{ + LEF_INIT; + lefSettings->LogFileAppend = FALSE; +} + +void +lefrSetReadFunction(LEFI_READ_FUNCTION f) +{ + LEF_INIT; + lefSettings->ReadFunction = f; +} + +void +lefrUnsetReadFunction() +{ + LEF_INIT; + lefSettings->ReadFunction = 0; +} + +// Set the maximum number of warnings +// +// ***************************************************************************** + +void +lefrSetAntennaInoutWarnings(int warn) +{ + LEF_INIT; + lefSettings->AntennaInoutWarnings = warn; +} + +void +lefrSetAntennaInputWarnings(int warn) +{ + LEF_INIT; + lefSettings->AntennaInputWarnings = warn; +} + +void +lefrSetAntennaOutputWarnings(int warn) +{ + LEF_INIT; + lefSettings->AntennaOutputWarnings = warn; +} + +void +lefrSetArrayWarnings(int warn) +{ + LEF_INIT; + lefSettings->ArrayWarnings = warn; +} + +void +lefrSetCaseSensitiveWarnings(int warn) +{ + LEF_INIT; + lefSettings->CaseSensitiveWarnings = warn; +} + +void +lefrSetCorrectionTableWarnings(int warn) +{ + LEF_INIT; + lefSettings->CorrectionTableWarnings = warn; +} + +void +lefrSetDielectricWarnings(int warn) +{ + LEF_INIT; + lefSettings->DielectricWarnings = warn; +} + +void +lefrSetEdgeRateThreshold1Warnings(int warn) +{ + LEF_INIT; + lefSettings->EdgeRateThreshold1Warnings = warn; +} + +void +lefrSetEdgeRateThreshold2Warnings(int warn) +{ + LEF_INIT; + lefSettings->EdgeRateThreshold2Warnings = warn; +} + +void +lefrSetEdgeRateScaleFactorWarnings(int warn) +{ + LEF_INIT; + lefSettings->EdgeRateScaleFactorWarnings = warn; +} + +void +lefrSetInoutAntennaWarnings(int warn) +{ + LEF_INIT; + lefSettings->InoutAntennaWarnings = warn; +} + +void +lefrSetInputAntennaWarnings(int warn) +{ + LEF_INIT; + lefSettings->InputAntennaWarnings = warn; +} + +void +lefrSetIRDropWarnings(int warn) +{ + LEF_INIT; + lefSettings->IRDropWarnings = warn; +} + +void +lefrSetLayerWarnings(int warn) +{ + LEF_INIT; + lefSettings->LayerWarnings = warn; +} + +void +lefrSetMacroWarnings(int warn) +{ + LEF_INIT; + lefSettings->MacroWarnings = warn; +} + +void +lefrSetMaxStackViaWarnings(int warn) +{ + LEF_INIT; + lefSettings->MaxStackViaWarnings = warn; +} + +void +lefrSetMinFeatureWarnings(int warn) +{ + LEF_INIT; + lefSettings->MinFeatureWarnings = warn; +} + +void +lefrSetNoiseMarginWarnings(int warn) +{ + LEF_INIT; + lefSettings->NoiseMarginWarnings = warn; +} + +void +lefrSetNoiseTableWarnings(int warn) +{ + LEF_INIT; + lefSettings->NoiseTableWarnings = warn; +} + +void +lefrSetNonDefaultWarnings(int warn) +{ + LEF_INIT; + lefSettings->NonDefaultWarnings = warn; +} + +void +lefrSetNoWireExtensionWarnings(int warn) +{ + LEF_INIT; + lefSettings->NoWireExtensionWarnings = warn; +} + +void +lefrSetOutputAntennaWarnings(int warn) +{ + LEF_INIT; + lefSettings->OutputAntennaWarnings = warn; +} + +void +lefrSetPinWarnings(int warn) +{ + LEF_INIT; + lefSettings->PinWarnings = warn; +} + +void +lefrSetSiteWarnings(int warn) +{ + LEF_INIT; + lefSettings->SiteWarnings = warn; +} + +void +lefrSetSpacingWarnings(int warn) +{ + LEF_INIT; + lefSettings->SpacingWarnings = warn; +} + +void +lefrSetTimingWarnings(int warn) +{ + LEF_INIT; + lefSettings->TimingWarnings = warn; +} + +void +lefrSetUnitsWarnings(int warn) +{ + LEF_INIT; + lefSettings->UnitsWarnings = warn; +} + +void +lefrSetUseMinSpacingWarnings(int warn) +{ + LEF_INIT; + lefSettings->UseMinSpacingWarnings = warn; +} + +void +lefrSetViaRuleWarnings(int warn) +{ + LEF_INIT; + lefSettings->ViaRuleWarnings = warn; +} + +void +lefrSetViaWarnings(int warn) +{ + LEF_INIT; + lefSettings->ViaWarnings = warn; +} + +void +lefrDisablePropStrProcess() +{ + LEF_INIT; + lefSettings->DisPropStrProcess = 1; +} + +void +lefrRegisterLef58Type(const char *lef58Type, + const char *layerType) +{ + LEF_INIT; + const char *typeLayers[] = {layerType, ""}; + + lefSettings->addLef58Type(lef58Type, typeLayers); +} + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefrReader.hpp b/lefdef/src/lef/lef/lefrReader.hpp new file mode 100644 index 00000000..69872c04 --- /dev/null +++ b/lefdef/src/lef/lef/lefrReader.hpp @@ -0,0 +1,586 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef LEFRREADER_H +#define LEFRREADER_H + +#include +#include + +#include "lefiKRDefs.hpp" +#include "lefiDefs.hpp" +#include "lefiUser.hpp" +#include "lefiUtil.hpp" + +#define MAX_LEF_MSGS 4701 + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// The reader initialization. Must be called before lefrRead(). +extern int lefrInit (); +extern int lefrInitSession (int startSession = 1); + +// obsolted +extern int lefrReset (); + +// Clears parser configuration and return it in inial state. +extern int lefrClear (); + +// obsoleted +extern int lefrReleaseNResetMemory (); + +// Change the comment character in LEF. The normal character is +// '#'. You can change it to anything you want, but be careful. +extern void lefrSetCommentChar (char c); + +// Allow the parser to upshift all names if the LEF +// file is case insensitive. The default is no shift, so the user +// must do case insensitive matching. +extern void lefrSetShiftCase (); + +// Allow the user to change the casesensitivity anytime during +// parsing. +// caseSen = 0, will turn off the casesensitivity +// caseSen != 0, will turn on the casesensitivity + +extern void lefrSetCaseSensitivity (int caseSense); + +// The reader request the file name they are parsing + +extern const char * lefrFName (); + + +// The main reader function. +// The file should already be opened. This requirement allows +// the reader to be used with stdin or a pipe. The file name +// is only used for error messages. The includeSearchPath is +// a colon-delimited list of directories in which to find +// include files. + +extern int lefrRead (FILE *file, const char *fileName, lefiUserData userData); + +// Set all of the callbacks that have not yet been set to a function +// that will add up how many times a given lef data type was ignored +// (ie no callback was done). The statistics can later be printed out. +extern void lefrSetRegisterUnusedCallbacks (); +extern void lefrPrintUnusedCallbacks (FILE* f); + +// Set/get the client-provided user data. lefi doesn't look at +// this data at all, it simply passes the opaque lefiUserData pointer +// back to the application with each callback. The client can +// change the data at any time, and it will take effect on the +// next callback. The lefi reader and writer maintain separate +// user data pointers. +extern void lefrSetUserData (lefiUserData); +extern lefiUserData lefrGetUserData (); + +// An enum describing all of the types of reader callbacks. +typedef enum { + lefrUnspecifiedCbkType = 0, + lefrVersionCbkType, + lefrVersionStrCbkType, + lefrDividerCharCbkType, + lefrBusBitCharsCbkType, + lefrUnitsCbkType, + lefrCaseSensitiveCbkType, + lefrNoWireExtensionCbkType, + lefrPropBeginCbkType, + lefrPropCbkType, + lefrPropEndCbkType, + lefrLayerCbkType, + lefrViaCbkType, + lefrViaRuleCbkType, + lefrSpacingCbkType, + lefrIRDropCbkType, + lefrDielectricCbkType, + lefrMinFeatureCbkType, + lefrNonDefaultCbkType, + lefrSiteCbkType, + lefrMacroBeginCbkType, + lefrPinCbkType, + lefrMacroCbkType, + lefrObstructionCbkType, + lefrArrayCbkType, + + // NEW CALLBACKS - each callback has its own type. For each callback + // that you add, you must add an item to this enum. + + lefrSpacingBeginCbkType, + lefrSpacingEndCbkType, + lefrArrayBeginCbkType, + lefrArrayEndCbkType, + lefrIRDropBeginCbkType, + lefrIRDropEndCbkType, + lefrNoiseMarginCbkType, + lefrEdgeRateThreshold1CbkType, + lefrEdgeRateThreshold2CbkType, + lefrEdgeRateScaleFactorCbkType, + lefrNoiseTableCbkType, + lefrCorrectionTableCbkType, + lefrInputAntennaCbkType, + lefrOutputAntennaCbkType, + lefrInoutAntennaCbkType, + lefrAntennaInputCbkType, + lefrAntennaInoutCbkType, + lefrAntennaOutputCbkType, + lefrManufacturingCbkType, + lefrUseMinSpacingCbkType, + lefrClearanceMeasureCbkType, + lefrTimingCbkType, + lefrMacroClassTypeCbkType, + lefrMacroOriginCbkType, + lefrMacroSizeCbkType, + lefrMacroFixedMaskCbkType, + lefrMacroEndCbkType, + lefrMaxStackViaCbkType, + lefrExtensionCbkType, + lefrDensityCbkType, + lefrFixedMaskCbkType, + lefrMacroSiteCbkType, + lefrMacroForeignCbkType, + + lefrLibraryEndCbkType +} lefrCallbackType_e; + +// Declarations of function signatures for each type of callback. +// These declarations are type-safe when compiling with ANSI C +// or C++; you will only be able to register a function pointer +// with the correct signature for a given type of callback. +// +// Each callback function is expected to return 0 if successful. +// A non-zero return code will cause the reader to abort. +// +// The lefrDesignStart and lefrDesignEnd callback is only called once. +// Other callbacks may be called multiple times, each time with a different +// set of data. +// +// For each callback, the Def API will make the callback to the +// function supplied by the client, which should either make a copy +// of the Def object, or store the data in the client's own data structures. +// The Def API will delete or reuse each object after making the callback, +// so the client should not keep a pointer to it. +// +// All callbacks pass the user data pointer provided in lefrRead() +// or lefrSetUserData() back to the client; this can be used by the +// client to obtain access to the rest of the client's data structures. +// +// The user data pointer is obtained using lefrGetUserData() immediately +// prior to making each callback, so the client is free to change the +// user data on the fly if necessary. +// +// Callbacks with the same signature are passed a callback type +// parameter, which allows an application to write a single callback +// function, register that function for multiple callbacks, then +// switch based on the callback type to handle the appropriate type of +// data. + + +// A declaration of the signature of all callbacks that return nothing. +typedef int (*lefrVoidCbkFnType) (lefrCallbackType_e, + void* num, + lefiUserData); + +// A declaration of the signature of all callbacks that return a string. +typedef int (*lefrStringCbkFnType) (lefrCallbackType_e, + const char *string, + lefiUserData); + +// A declaration of the signature of all callbacks that return a integer. +typedef int (*lefrIntegerCbkFnType) (lefrCallbackType_e, + int number, + lefiUserData); + +// A declaration of the signature of all callbacks that return a double. +typedef int (*lefrDoubleCbkFnType) (lefrCallbackType_e, + double number, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiUnits. +typedef int (*lefrUnitsCbkFnType) (lefrCallbackType_e, + lefiUnits* units, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiLayer. +typedef int (*lefrLayerCbkFnType) (lefrCallbackType_e, + lefiLayer* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiVia. +typedef int (*lefrViaCbkFnType) (lefrCallbackType_e, + lefiVia* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiViaRule. +typedef int (*lefrViaRuleCbkFnType) (lefrCallbackType_e, + lefiViaRule* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiSpacing. +typedef int (*lefrSpacingCbkFnType) (lefrCallbackType_e, + lefiSpacing* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiIRDrop. +typedef int (*lefrIRDropCbkFnType) (lefrCallbackType_e, + lefiIRDrop* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiMinFeature. +typedef int (*lefrMinFeatureCbkFnType) (lefrCallbackType_e, + lefiMinFeature* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiNonDefault. +typedef int (*lefrNonDefaultCbkFnType) (lefrCallbackType_e, + lefiNonDefault* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiSite. +typedef int (*lefrSiteCbkFnType) (lefrCallbackType_e, + lefiSite* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiMacro. +typedef int (*lefrMacroCbkFnType) (lefrCallbackType_e, + lefiMacro* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiPin. +typedef int (*lefrPinCbkFnType) (lefrCallbackType_e, + lefiPin* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiObstruction. +typedef int (*lefrObstructionCbkFnType) (lefrCallbackType_e, + lefiObstruction* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiArray. +typedef int (*lefrArrayCbkFnType) (lefrCallbackType_e, + lefiArray* l, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiProp. +typedef int (*lefrPropCbkFnType) (lefrCallbackType_e, + lefiProp* p, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiNoiseMargin. +typedef int (*lefrNoiseMarginCbkFnType) (lefrCallbackType_e, + struct lefiNoiseMargin* p, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiNoiseTable. +typedef int (*lefrNoiseTableCbkFnType) (lefrCallbackType_e, + lefiNoiseTable* p, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiCorrectionTable. +typedef int (*lefrCorrectionTableCbkFnType) (lefrCallbackType_e, + lefiCorrectionTable* p, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiTiming. +typedef int (*lefrTimingCbkFnType) (lefrCallbackType_e, + lefiTiming* p, + lefiUserData); + +// A declaration of the signature of all callbacks that return a lefiUseMinSpacing. +typedef int (*lefrUseMinSpacingCbkFnType) (lefrCallbackType_e, + lefiUseMinSpacing* l, + lefiUserData); + + // NEW CALLBACK - If your callback returns a pointer to a new class then + // you must add a type function here. + +// A declaration of the signature of all callbacks that return a lefiMaxStackVia. +typedef int (*lefrMaxStackViaCbkFnType) (lefrCallbackType_e, + lefiMaxStackVia* l, + lefiUserData); + +typedef int (*lefrMacroNumCbkFnType) (lefrCallbackType_e, + lefiNum l, + lefiUserData); + +typedef int (*lefrMacroSiteCbkFnType) (lefrCallbackType_e, + const lefiMacroSite *site, + lefiUserData); + +typedef int (*lefrMacroForeignCbkFnType) (lefrCallbackType_e, + const lefiMacroForeign *foreign, + lefiUserData); + +// 5.6 +// A declaration of the signature of all callbacks that return a lefiDensity. +typedef int (*lefrDensityCbkFnType) (lefrCallbackType_e, + lefiDensity* l, + lefiUserData); + +// Functions to call to register a callback function. +extern void lefrSetUnitsCbk(lefrUnitsCbkFnType); +extern void lefrSetVersionCbk(lefrDoubleCbkFnType); +extern void lefrSetVersionStrCbk(lefrStringCbkFnType); +extern void lefrSetDividerCharCbk(lefrStringCbkFnType); +extern void lefrSetBusBitCharsCbk(lefrStringCbkFnType); +extern void lefrSetNoWireExtensionCbk(lefrStringCbkFnType); +extern void lefrSetCaseSensitiveCbk(lefrIntegerCbkFnType); +extern void lefrSetPropBeginCbk(lefrVoidCbkFnType); +extern void lefrSetPropCbk(lefrPropCbkFnType); +extern void lefrSetPropEndCbk(lefrVoidCbkFnType); +extern void lefrSetLayerCbk(lefrLayerCbkFnType); +extern void lefrSetViaCbk(lefrViaCbkFnType); +extern void lefrSetViaRuleCbk(lefrViaRuleCbkFnType); +extern void lefrSetSpacingCbk(lefrSpacingCbkFnType); +extern void lefrSetIRDropCbk(lefrIRDropCbkFnType); +extern void lefrSetDielectricCbk(lefrDoubleCbkFnType); +extern void lefrSetMinFeatureCbk(lefrMinFeatureCbkFnType); +extern void lefrSetNonDefaultCbk(lefrNonDefaultCbkFnType); +extern void lefrSetSiteCbk(lefrSiteCbkFnType); +extern void lefrSetMacroBeginCbk(lefrStringCbkFnType); +extern void lefrSetPinCbk(lefrPinCbkFnType); +extern void lefrSetObstructionCbk(lefrObstructionCbkFnType); +extern void lefrSetArrayCbk(lefrArrayCbkFnType); +extern void lefrSetMacroCbk(lefrMacroCbkFnType); +extern void lefrSetLibraryEndCbk(lefrVoidCbkFnType); + +// NEW CALLBACK - each callback must have a function to allow the user +// to set it. Add the function here. + +extern void lefrSetTimingCbk(lefrTimingCbkFnType); +extern void lefrSetSpacingBeginCbk(lefrVoidCbkFnType); +extern void lefrSetSpacingEndCbk(lefrVoidCbkFnType); +extern void lefrSetArrayBeginCbk(lefrStringCbkFnType); +extern void lefrSetArrayEndCbk(lefrStringCbkFnType); +extern void lefrSetIRDropBeginCbk(lefrVoidCbkFnType); +extern void lefrSetIRDropEndCbk(lefrVoidCbkFnType); +extern void lefrSetNoiseMarginCbk(lefrNoiseMarginCbkFnType); +extern void lefrSetEdgeRateThreshold1Cbk(lefrDoubleCbkFnType); +extern void lefrSetEdgeRateThreshold2Cbk(lefrDoubleCbkFnType); +extern void lefrSetEdgeRateScaleFactorCbk(lefrDoubleCbkFnType); +extern void lefrSetNoiseTableCbk(lefrNoiseTableCbkFnType); +extern void lefrSetCorrectionTableCbk(lefrCorrectionTableCbkFnType); +extern void lefrSetInputAntennaCbk(lefrDoubleCbkFnType); +extern void lefrSetOutputAntennaCbk(lefrDoubleCbkFnType); +extern void lefrSetInoutAntennaCbk(lefrDoubleCbkFnType); +extern void lefrSetAntennaInputCbk(lefrDoubleCbkFnType); +extern void lefrSetAntennaInoutCbk(lefrDoubleCbkFnType); +extern void lefrSetAntennaOutputCbk(lefrDoubleCbkFnType); +extern void lefrSetClearanceMeasureCbk(lefrStringCbkFnType); +extern void lefrSetManufacturingCbk(lefrDoubleCbkFnType); +extern void lefrSetUseMinSpacingCbk(lefrUseMinSpacingCbkFnType); +extern void lefrSetMacroClassTypeCbk(lefrStringCbkFnType); +extern void lefrSetMacroOriginCbk(lefrMacroNumCbkFnType); +extern void lefrSetMacroSiteCbk(lefrMacroSiteCbkFnType); +extern void lefrSetMacroForeignCbk(lefrMacroForeignCbkFnType); +extern void lefrSetMacroSizeCbk(lefrMacroNumCbkFnType); +extern void lefrSetMacroFixedMaskCbk(lefrIntegerCbkFnType); +extern void lefrSetMacroEndCbk(lefrStringCbkFnType); +extern void lefrSetMaxStackViaCbk(lefrMaxStackViaCbkFnType); +extern void lefrSetExtensionCbk(lefrStringCbkFnType); +extern void lefrSetDensityCbk(lefrDensityCbkFnType); +extern void lefrSetFixedMaskCbk(lefrIntegerCbkFnType); + +// Set all of the callbacks that have not yet been set to the following +// function. This is especially useful if you want to check to see +// if you forgot anything. +extern void lefrSetUnusedCallbacks (lefrVoidCbkFnType func); + +// Reset all the callback functions to nil +extern void lefrUnsetCallbacks(); + +// Functions to call to unregister a callback function. +extern void lefrUnsetAntennaInputCbk(); +extern void lefrUnsetAntennaInoutCbk(); +extern void lefrUnsetAntennaOutputCbk(); +extern void lefrUnsetArrayBeginCbk(); +extern void lefrUnsetArrayCbk(); +extern void lefrUnsetArrayEndCbk(); +extern void lefrUnsetBusBitCharsCbk(); +extern void lefrUnsetCaseSensitiveCbk(); +extern void lefrUnsetClearanceMeasureCbk(); +extern void lefrUnsetCorrectionTableCbk(); +extern void lefrUnsetDensityCbk(); +extern void lefrUnsetDielectricCbk(); +extern void lefrUnsetDividerCharCbk(); +extern void lefrUnsetEdgeRateScaleFactorCbk(); +extern void lefrUnsetEdgeRateThreshold1Cbk(); +extern void lefrUnsetEdgeRateThreshold2Cbk(); +extern void lefrUnsetExtensionCbk(); +extern void lefrUnsetInoutAntennaCbk(); +extern void lefrUnsetInputAntennaCbk(); +extern void lefrUnsetIRDropBeginCbk(); +extern void lefrUnsetIRDropCbk(); +extern void lefrUnsetIRDropEndCbk(); +extern void lefrUnsetLayerCbk(); +extern void lefrUnsetLibraryEndCbk(); +extern void lefrUnsetMacroBeginCbk(); +extern void lefrUnsetMacroCbk(); +extern void lefrUnsetMacroClassTypeCbk(); +extern void lefrUnsetMacroEndCbk(); +extern void lefrUnsetMacroOriginCbk(); +extern void lefrUnsetMacroSiteCbk(); +extern void lefrUnsetMacroForeignCbk(); +extern void lefrUnsetMacroSizeCbk(); +extern void lefrUnsetManufacturingCbk(); +extern void lefrUnsetMaxStackViaCbk(); +extern void lefrUnsetMinFeatureCbk(); +extern void lefrUnsetNoiseMarginCbk(); +extern void lefrUnsetNoiseTableCbk(); +extern void lefrUnsetNonDefaultCbk(); +extern void lefrUnsetNoWireExtensionCbk(); +extern void lefrUnsetObstructionCbk(); +extern void lefrUnsetOutputAntennaCbk(); +extern void lefrUnsetPinCbk(); +extern void lefrUnsetPropBeginCbk(); +extern void lefrUnsetPropCbk(); +extern void lefrUnsetPropEndCbk(); +extern void lefrUnsetSiteCbk(); +extern void lefrUnsetSpacingBeginCbk(); +extern void lefrUnsetSpacingCbk(); +extern void lefrUnsetSpacingEndCbk(); +extern void lefrUnsetTimingCbk(); +extern void lefrUnsetUseMinSpacingCbk(); +extern void lefrUnsetUnitsCbk(); +extern void lefrUnsetVersionCbk(); +extern void lefrUnsetVersionStrCbk(); +extern void lefrUnsetViaCbk(); +extern void lefrUnsetViaRuleCbk(); + +// Return the current line number in the parser. +extern int lefrLineNumber (); + +// Routine to set the message logging routine for errors +typedef void (*LEFI_LOG_FUNCTION) (const char*); +extern void lefrSetLogFunction(LEFI_LOG_FUNCTION); + +// Routine to set the message logging routine for warnings +typedef void (*LEFI_WARNING_LOG_FUNCTION) (const char*); +extern void lefrSetWarningLogFunction(LEFI_WARNING_LOG_FUNCTION); + +// Routine to set the user defined malloc routine +typedef void* (*LEFI_MALLOC_FUNCTION) (int); +extern void lefrSetMallocFunction(LEFI_MALLOC_FUNCTION); + +// Routine to set the user defined realloc routine +typedef void* (*LEFI_REALLOC_FUNCTION) (void *, int); +extern void lefrSetReallocFunction(LEFI_REALLOC_FUNCTION); + +// Routine to set the user defined free routine +typedef void (*LEFI_FREE_FUNCTION) (void *); +extern void lefrSetFreeFunction(LEFI_FREE_FUNCTION); + +// Routine to set the line number callback routine +typedef void (*LEFI_LINE_NUMBER_FUNCTION) (int); +extern void lefrSetLineNumberFunction( LEFI_LINE_NUMBER_FUNCTION); + +// Set the number of lines before calling the line function callback routine +// Default is 10000 +extern void lefrSetDeltaNumberLines (int); + +// PCR 551229 - Set the parser to be more relax +// This api is specific for PKS. +// When in relax mode, the parser will not require width, pitch, & direction +// in routing layers. Also vias in nondefault rules +extern void lefrSetRelaxMode (); +extern void lefrUnsetRelaxMode (); + +// PCR 565274 - LEF/DEF API should have the API call to overwrite default +// version +extern void lefrSetVersionValue(const char* version); + +// Routine to set the read function +typedef size_t (*LEFI_READ_FUNCTION) (FILE*, char*, size_t); +extern void lefrSetReadFunction(LEFI_READ_FUNCTION); +extern void lefrUnsetReadFunction(); + +// Routine to set the lefrWarning.log to open as append instead for write +// New in 5.7 +extern void lefrSetOpenLogFileAppend(); +extern void lefrUnsetOpenLogFileAppend(); + +// Routine to disable string property value process, default it will process +// the value string +extern void lefrDisablePropStrProcess(); + +// Routine to set the max number of warnings for a perticular section + +extern void lefrSetAntennaInoutWarnings(int warn); +extern void lefrSetAntennaInputWarnings(int warn); +extern void lefrSetAntennaOutputWarnings(int warn); +extern void lefrSetArrayWarnings(int warn); +extern void lefrSetCaseSensitiveWarnings(int warn); +extern void lefrSetCorrectionTableWarnings(int warn); +extern void lefrSetDielectricWarnings(int warn); +extern void lefrSetEdgeRateThreshold1Warnings(int warn); +extern void lefrSetEdgeRateThreshold2Warnings(int warn); +extern void lefrSetEdgeRateScaleFactorWarnings(int warn); +extern void lefrSetInoutAntennaWarnings(int warn); +extern void lefrSetInputAntennaWarnings(int warn); +extern void lefrSetIRDropWarnings(int warn); +extern void lefrSetLayerWarnings(int warn); +extern void lefrSetMacroWarnings(int warn); +extern void lefrSetMaxStackViaWarnings(int warn); +extern void lefrSetMinFeatureWarnings(int warn); +extern void lefrSetNoiseMarginWarnings(int warn); +extern void lefrSetNoiseTableWarnings(int warn); +extern void lefrSetNonDefaultWarnings(int warn); +extern void lefrSetNoWireExtensionWarnings(int warn); +extern void lefrSetOutputAntennaWarnings(int warn); +extern void lefrSetPinWarnings(int warn); +extern void lefrSetSiteWarnings(int warn); +extern void lefrSetSpacingWarnings(int warn); +extern void lefrSetTimingWarnings(int warn); +extern void lefrSetUnitsWarnings(int warn); +extern void lefrSetUseMinSpacingWarnings(int warn); +extern void lefrSetViaRuleWarnings(int warn); +extern void lefrSetViaWarnings(int warn); + +// Handling output messages +extern void lefrDisableParserMsgs(int nMsg, int* msgs); +extern void lefrEnableParserMsgs(int nMsg, int* msgs); +extern void lefrEnableAllMsgs(); +extern void lefrDisableAllMsgs(); +extern void lefrSetTotalMsgLimit(int totNumMsgs); +extern void lefrSetLimitPerMsg(int msgId, int numMsg); + +// Register lef58Type-layerType pair. +extern void lefrRegisterLef58Type(const char *lef58Type, + const char *layerType); + +// Return codes for the user callbacks. +// The user should return one of these values. +#define PARSE_OK 0 // continue parsing +#define STOP_PARSE 1 // stop parsing with no error message +#define PARSE_ERROR 2 // stop parsing, print an error message + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefrSettings.cpp b/lefdef/src/lef/lef/lefrSettings.cpp new file mode 100644 index 00000000..9fa31bb0 --- /dev/null +++ b/lefdef/src/lef/lef/lefrSettings.cpp @@ -0,0 +1,652 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #11 $ +// $Date: 2013/04/23 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include + + +#include "lefrSettings.hpp" +#include "lef.tab.h" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +lefrSettings *lefSettings = NULL; + +lefrSettings::lefrSettings() +: DisPropStrProcess(0), + CaseSensitive(FALSE), + CaseSensitiveSet(FALSE), + CommentChar('#'), + DeltaNumberLines(10000), + AntennaInoutWarnings(999), + AntennaInputWarnings(999), + AntennaOutputWarnings(999), + ArrayWarnings(999), + CaseSensitiveWarnings(999), + CorrectionTableWarnings(999), + DielectricWarnings(999), + EdgeRateScaleFactorWarnings(999), + EdgeRateThreshold1Warnings(999), + EdgeRateThreshold2Warnings(999), + ErrorLogFunction(0), + FreeFunction(0), + IRDropWarnings(999), + InoutAntennaWarnings(999), + InputAntennaWarnings(999), + LayerWarnings(999), + LineNumberFunction(0), + MacroWarnings(999), + MallocFunction(0), + MaxStackViaWarnings(999), + MinFeatureWarnings(999), + NoWireExtensionWarnings(999), + NoiseMarginWarnings(999), + NoiseTableWarnings(999), + NonDefaultWarnings(999), + OutputAntennaWarnings(999), + PinWarnings(999), + ReadFunction(0), + ReadEncrypted(0), + ReallocFunction(0), + RegisterUnused(0), + RelaxMode(FALSE), + ShiftCase(0), + SiteWarnings(999), + SpacingWarnings(999), + TimingWarnings(999), + UnitsWarnings(999), + UseMinSpacingWarnings(999), + UserData(NULL), + VersionNum(0.0), + ViaRuleWarnings(999), + ViaWarnings(999), + LogFileAppend(0), + SetLogFunction(0), + TotalMsgLimit(0), + WarningLogFunction(0), + dAllMsgs(0) +{ + memset(MsgLimit, 0, MAX_LEF_MSGS * sizeof(int)); + init_symbol_table(); + + // Define LEF58_TYPE values and dependences here: + + // Popular layer groups. + const char *polyroutingLayers[] = {"ROUTING", ""}; + const char *mimcapLayers[] = {"ROUTING", "CUT", ""}; + const char *tsvLayers[] = {"CUT", ""}; + const char *mastersliceOnly[] = {"MASTERSLICE", ""}; + const char *wellLayers[] = {"MASTERSLICE", "OVERLAP", ""}; + + // Register LEF58 types and allowed layer types pairs. + addLef58Type("POLYROUTING", polyroutingLayers); + addLef58Type("MIMCAP", mimcapLayers); + addLef58Type("TSV", tsvLayers); + addLef58Type("PASSIVATION", tsvLayers); + addLef58Type("TRIMPOLY", mastersliceOnly); + addLef58Type("NWELL", wellLayers); + addLef58Type("PWELL", wellLayers); + addLef58Type("BELOWDIEEDGE", wellLayers); + addLef58Type("ABOVEDIEEDGE", wellLayers); + addLef58Type("DIFFUSION", wellLayers); + addLef58Type("TRIMMETAL", wellLayers); + addLef58Type("MEOL", mastersliceOnly); +} + + +void +lefrSettings::reset() +{ + if (lefSettings) { + delete lefSettings; + } + + lefSettings = new lefrSettings(); +} + + +void +lefrSettings::init_symbol_table() +{ + Keyword_set["&DEFINE"] = K_DEFINE; + Keyword_set["&DEFINEB"] = K_DEFINEB; + Keyword_set["&DEFINES"] = K_DEFINES; + Keyword_set["&MESSAGE"] = K_MESSAGE; + Keyword_set["&CREATEFILE"] = K_CREATEFILE; + Keyword_set["&OPENFILE"] = K_OPENFILE; + Keyword_set["&CLOSEFILE"] = K_CLOSEFILE; + Keyword_set["&WARNING"] = K_WARNING; + Keyword_set["&ERROR"] = K_ERROR; + Keyword_set["&FATALERROR"] = K_FATALERROR; + Keyword_set["namescasesensitive"] = K_NAMESCASESENSITIVE; + Keyword_set["off"] = K_OFF; + Keyword_set["on"] = K_ON; + Keyword_set["ABOVE"] = K_ABOVE; + Keyword_set["ABUT"] = K_ABUT; + Keyword_set["ABUTMENT"] = K_ABUTMENT; + Keyword_set["ACCURRENTDENSITY"] = K_ACCURRENTDENSITY; + Keyword_set["ACTIVE"] = K_ACTIVE; + Keyword_set["ADJACENTCUTS"] = K_ADJACENTCUTS; + Keyword_set["ANALOG"] = K_ANALOG; + Keyword_set["AND"] = K_AND; + Keyword_set["ANTENNAAREAFACTOR"] = K_ANTENNAAREAFACTOR; + Keyword_set["ANTENNAAREADIFFREDUCEPWL"] = K_ANTENNAAREADIFFREDUCEPWL; + Keyword_set["ANTENNAAREAMINUSDIFF"] = K_ANTENNAAREAMINUSDIFF; + Keyword_set["ANTENNAAREARATIO"] = K_ANTENNAAREARATIO; + Keyword_set["ANTENNACELL"] = K_ANTENNACELL; + Keyword_set["ANTENNACUMAREARATIO"] = K_ANTENNACUMAREARATIO; + Keyword_set["ANTENNACUMDIFFAREARATIO"] = K_ANTENNACUMDIFFAREARATIO; + Keyword_set["ANTENNACUMDIFFSIDEAREARATIO"] = K_ANTENNACUMDIFFSIDEAREARATIO; + Keyword_set["ANTENNACUMROUTINGPLUSCUT"] = K_ANTENNACUMROUTINGPLUSCUT; + Keyword_set["ANTENNACUMSIDEAREARATIO"] = K_ANTENNACUMSIDEAREARATIO; + Keyword_set["ANTENNADIFFAREA"] = K_ANTENNADIFFAREA; + Keyword_set["ANTENNADIFFAREARATIO"] = K_ANTENNADIFFAREARATIO; + Keyword_set["ANTENNADIFFSIDEAREARATIO"] = K_ANTENNADIFFSIDEAREARATIO; + Keyword_set["ANTENNAGATEAREA"] = K_ANTENNAGATEAREA; + Keyword_set["ANTENNAGATEPLUSDIFF"] = K_ANTENNAGATEPLUSDIFF; + Keyword_set["ANTENNAINOUTDIFFAREA"] = K_ANTENNAINOUTDIFFAREA; + Keyword_set["ANTENNAINPUTGATEAREA"] = K_ANTENNAINPUTGATEAREA; + Keyword_set["ANTENNALENGTHFACTOR"] = K_ANTENNALENGTHFACTOR; + Keyword_set["ANTENNAMAXAREACAR"] = K_ANTENNAMAXAREACAR; + Keyword_set["ANTENNAMAXCUTCAR"] = K_ANTENNAMAXCUTCAR; + Keyword_set["ANTENNAMAXSIDEAREACAR"] = K_ANTENNAMAXSIDEAREACAR; + Keyword_set["ANTENNAMETALAREA"] = K_ANTENNAMETALAREA; + Keyword_set["ANTENNAMETALLENGTH"] = K_ANTENNAMETALLENGTH; + Keyword_set["ANTENNAMODEL"] = K_ANTENNAMODEL; + Keyword_set["ANTENNAOUTPUTDIFFAREA"] = K_ANTENNAOUTPUTDIFFAREA; + Keyword_set["ANTENNAPARTIALCUTAREA"] = K_ANTENNAPARTIALCUTAREA; + Keyword_set["ANTENNAPARTIALMETALAREA"] = K_ANTENNAPARTIALMETALAREA; + Keyword_set["ANTENNAPARTIALMETALSIDEAREA"] = K_ANTENNAPARTIALMETALSIDEAREA; + Keyword_set["ANTENNASIDEAREARATIO"] = K_ANTENNASIDEAREARATIO; + Keyword_set["ANTENNASIZE"] = K_ANTENNASIZE; + Keyword_set["ANTENNASIDEAREAFACTOR"] = K_ANTENNASIDEAREAFACTOR; + Keyword_set["ANYEDGE"] = K_ANYEDGE; + Keyword_set["AREA"] = K_AREA; + Keyword_set["AREAIO"] = K_AREAIO; + Keyword_set["ARRAY"] = K_ARRAY; + Keyword_set["ARRAYCUTS"] = K_ARRAYCUTS; + Keyword_set["ARRAYSPACING"] = K_ARRAYSPACING; + Keyword_set["AVERAGE"] = K_AVERAGE; + Keyword_set["BELOW"] = K_BELOW; + Keyword_set["BEGINEXT"] = K_BEGINEXT; + Keyword_set["BLACKBOX"] = K_BLACKBOX; + Keyword_set["BLOCK"] = K_BLOCK; + Keyword_set["BOTTOMLEFT"] = K_BOTTOMLEFT; + Keyword_set["BOTTOMRIGHT"] = K_BOTTOMRIGHT; + Keyword_set["BUMP"] = K_BUMP; + Keyword_set["BUSBITCHARS"] = K_BUSBITCHARS; + Keyword_set["BUFFER"] = K_BUFFER; + Keyword_set["BY"] = K_BY; + Keyword_set["CANNOTOCCUPY"] = K_CANNOTOCCUPY; + Keyword_set["CANPLACE"] = K_CANPLACE; + Keyword_set["CAPACITANCE"] = K_CAPACITANCE; + Keyword_set["CAPMULTIPLIER"] = K_CAPMULTIPLIER; + Keyword_set["CENTERTOCENTER"] = K_CENTERTOCENTER; + Keyword_set["CLASS"] = K_CLASS; + Keyword_set["CLEARANCEMEASURE"] = K_CLEARANCEMEASURE; + Keyword_set["CLOCK"] = K_CLOCK; + Keyword_set["CLOCKTYPE"] = K_CLOCKTYPE; + Keyword_set["COLUMNMAJOR"] = K_COLUMNMAJOR; + Keyword_set["CURRENTDEN"] = K_CURRENTDEN; + Keyword_set["COMPONENTPIN"] = K_COMPONENTPIN; + Keyword_set["CORE"] = K_CORE; + Keyword_set["CORNER"] = K_CORNER; + Keyword_set["CORRECTIONFACTOR"] = K_CORRECTIONFACTOR; + Keyword_set["CORRECTIONTABLE"] = K_CORRECTIONTABLE; + Keyword_set["COVER"] = K_COVER; + Keyword_set["CPERSQDIST"] = K_CPERSQDIST; + Keyword_set["CURRENT"] = K_CURRENT; + Keyword_set["CURRENTSOURCE"] = K_CURRENTSOURCE; + Keyword_set["CUT"] = K_CUT; + Keyword_set["CUTAREA"] = K_CUTAREA; + Keyword_set["CUTSIZE"] = K_CUTSIZE; + Keyword_set["CUTSPACING"] = K_CUTSPACING; + Keyword_set["DATA"] = K_DATA; + Keyword_set["DATABASE"] = K_DATABASE; + Keyword_set["DCCURRENTDENSITY"] = K_DCCURRENTDENSITY; + Keyword_set["DEFAULT"] = K_DEFAULT; + Keyword_set["DEFAULTCAP"] = K_DEFAULTCAP; + Keyword_set["DELAY"] = K_DELAY; + Keyword_set["DENSITY"] = K_DENSITY; + Keyword_set["DENSITYCHECKSTEP"] = K_DENSITYCHECKSTEP; + Keyword_set["DENSITYCHECKWINDOW"] = K_DENSITYCHECKWINDOW; + Keyword_set["DESIGNRULEWIDTH"] = K_DESIGNRULEWIDTH; + Keyword_set["DIAG45"] = K_DIAG45; + Keyword_set["DIAG135"] = K_DIAG135; + Keyword_set["DIAGMINEDGELENGTH"] = K_DIAGMINEDGELENGTH; + Keyword_set["DIAGSPACING"] = K_DIAGSPACING; + Keyword_set["DIAGPITCH"] = K_DIAGPITCH; + Keyword_set["DIAGWIDTH"] = K_DIAGWIDTH; + Keyword_set["DIELECTRIC"] = K_DIELECTRIC; + Keyword_set["DIFFUSEONLY"] = K_DIFFUSEONLY; + Keyword_set["DIRECTION"] = K_DIRECTION; + Keyword_set["DIVIDERCHAR"] = K_DIVIDERCHAR; + Keyword_set["DO"] = K_DO; + Keyword_set["E"] = K_E; + Keyword_set["EDGECAPACITANCE"] = K_EDGECAPACITANCE; + Keyword_set["EDGERATE"] = K_EDGERATE; + Keyword_set["EDGERATESCALEFACTOR"] = K_EDGERATESCALEFACTOR; + Keyword_set["EDGERATETHRESHOLD1"] = K_EDGERATETHRESHOLD1; + Keyword_set["EDGERATETHRESHOLD2"] = K_EDGERATETHRESHOLD2; + Keyword_set["EEQ"] = K_EEQ; + Keyword_set["ELSE"] = K_ELSE; + Keyword_set["ENCLOSURE"] = K_ENCLOSURE; + Keyword_set["END"] = K_END; + Keyword_set["ENDEXT"] = K_ENDEXT; + Keyword_set["ENDCAP"] = K_ENDCAP; + Keyword_set["ENDOFLINE"] = K_ENDOFLINE; + Keyword_set["ENDOFNOTCHWIDTH"] = K_ENDOFNOTCHWIDTH; + Keyword_set["EUCLIDEAN"] = K_EUCLIDEAN; + Keyword_set["EXCEPTEXTRACUT"] = K_EXCEPTEXTRACUT; + Keyword_set["EXCEPTSAMEPGNET"] = K_EXCEPTSAMEPGNET; + Keyword_set["EXCEPTPGNET"] = K_EXCEPTPGNET; + Keyword_set["EXTENSION"] = K_EXTENSION; + Keyword_set["FALL"] = K_FALL; + Keyword_set["FALLCS"] = K_FALLCS; + Keyword_set["FALLRS"] = K_FALLRS; + Keyword_set["FALLSATCUR"] = K_FALLSATCUR; + Keyword_set["FALLSATT1"] = K_FALLSATT1; + Keyword_set["FALLSLEWLIMIT"] = K_FALLSLEWLIMIT; + Keyword_set["FALLT0"] = K_FALLT0; + Keyword_set["FALLTHRESH"] = K_FALLTHRESH; + Keyword_set["FALLVOLTAGETHRESHOLD"] = K_FALLVOLTAGETHRESHOLD; + Keyword_set["FALSE"] = K_FALSE; + Keyword_set["FE"] = K_FE; + Keyword_set["FEEDTHRU"] = K_FEEDTHRU; + Keyword_set["FILLACTIVESPACING"] = K_FILLACTIVESPACING; + Keyword_set["FIXED"] = K_FIXED; + Keyword_set["FIXEDMASK"] = K_FIXEDMASK; + Keyword_set["FLIP"] = K_FLIP; + Keyword_set["FLOORPLAN"] = K_FLOORPLAN; + Keyword_set["FN"] = K_FN; + Keyword_set["FOREIGN"] = K_FOREIGN; + Keyword_set["FREQUENCY"] = K_FREQUENCY; + Keyword_set["FROMABOVE"] = K_FROMABOVE; + Keyword_set["FROMBELOW"] = K_FROMBELOW; + Keyword_set["FROMPIN"] = K_FROMPIN; + Keyword_set["FUNCTION"] = K_FUNCTION; + Keyword_set["FS"] = K_FS; + Keyword_set["FW"] = K_FW; + Keyword_set["GCELLGRID"] = K_GCELLGRID; + Keyword_set["GENERATE"] = K_GENERATE; + Keyword_set["GENERATED"] = K_GENERATED; + Keyword_set["GENERATOR"] = K_GENERATOR; + Keyword_set["GROUND"] = K_GROUND; + Keyword_set["GROUNDSENSITIVITY"] = K_GROUNDSENSITIVITY; + Keyword_set["HARDSPACING"] = K_HARDSPACING; + Keyword_set["HEIGHT"] = K_HEIGHT; + Keyword_set["HISTORY"] = K_HISTORY; + Keyword_set["HOLD"] = K_HOLD; + Keyword_set["HORIZONTAL"] = K_HORIZONTAL; + Keyword_set["IF"] = K_IF; + Keyword_set["IMPLANT"] = K_IMPLANT; + Keyword_set["INFLUENCE"] = K_INFLUENCE; + Keyword_set["INOUT"] = K_INOUT; + Keyword_set["INOUTPINANTENNASIZE"] = K_INOUTPINANTENNASIZE; + Keyword_set["INPUT"] = K_INPUT; + Keyword_set["INPUTPINANTENNASIZE"] = K_INPUTPINANTENNASIZE; + Keyword_set["INPUTNOISEMARGIN"] = K_INPUTNOISEMARGIN; + Keyword_set["INSIDECORNER"] = K_INSIDECORNER; + Keyword_set["INTEGER"] = K_INTEGER; + Keyword_set["INTRINSIC"] = K_INTRINSIC; + Keyword_set["INVERT"] = K_INVERT; + Keyword_set["INVERTER"] = K_INVERTER; + Keyword_set["IRDROP"] = K_IRDROP; + Keyword_set["ITERATE"] = K_ITERATE; + Keyword_set["IV_TABLES"] = K_IV_TABLES; + Keyword_set["LAYER"] = K_LAYER; + Keyword_set["LAYERS"] = K_LAYERS; + Keyword_set["LEAKAGE"] = K_LEAKAGE; + Keyword_set["LENGTH"] = K_LENGTH; + Keyword_set["LENGTHSUM"] = K_LENGTHSUM; + Keyword_set["LENGTHTHRESHOLD"] = K_LENGTHTHRESHOLD; + Keyword_set["LEQ"] = K_LEQ; + Keyword_set["LIBRARY"] = K_LIBRARY; + Keyword_set["LONGARRAY"] = K_LONGARRAY; + Keyword_set["MACRO"] = K_MACRO; + Keyword_set["MANUFACTURINGGRID"] = K_MANUFACTURINGGRID; + Keyword_set["MASTERSLICE"] = K_MASTERSLICE; + Keyword_set["MASK"] = K_MASK; + Keyword_set["MATCH"] = K_MATCH; + Keyword_set["MAXADJACENTSLOTSPACING"] = K_MAXADJACENTSLOTSPACING; + Keyword_set["MAXCOAXIALSLOTSPACING"] = K_MAXCOAXIALSLOTSPACING; + Keyword_set["MAXDELAY"] = K_MAXDELAY; + Keyword_set["MAXEDGES"] = K_MAXEDGES; + Keyword_set["MAXEDGESLOTSPACING"] = K_MAXEDGESLOTSPACING; + Keyword_set["MAXLOAD"] = K_MAXLOAD; + Keyword_set["MAXIMUMDENSITY"] = K_MAXIMUMDENSITY; + Keyword_set["MAXVIASTACK"] = K_MAXVIASTACK; + Keyword_set["MAXWIDTH"] = K_MAXWIDTH; + Keyword_set["MAXXY"] = K_MAXXY; + Keyword_set["MEGAHERTZ"] = K_MEGAHERTZ; + Keyword_set["METALOVERHANG"] = K_METALOVERHANG; + Keyword_set["MICRONS"] = K_MICRONS; + Keyword_set["MILLIAMPS"] = K_MILLIAMPS; + Keyword_set["MILLIWATTS"] = K_MILLIWATTS; + Keyword_set["MINCUTS"] = K_MINCUTS; + Keyword_set["MINENCLOSEDAREA"] = K_MINENCLOSEDAREA; + Keyword_set["MINFEATURE"] = K_MINFEATURE; + Keyword_set["MINIMUMCUT"] = K_MINIMUMCUT; + Keyword_set["MINIMUMDENSITY"] = K_MINIMUMDENSITY; + Keyword_set["MINPINS"] = K_MINPINS; + Keyword_set["MINSIZE"] = K_MINSIZE; + Keyword_set["MINSTEP"] = K_MINSTEP; + Keyword_set["MINWIDTH"] = K_MINWIDTH; + Keyword_set["MPWH"] = K_MPWH; + Keyword_set["MPWL"] = K_MPWL; + Keyword_set["MUSTJOIN"] = K_MUSTJOIN; + Keyword_set["MX"] = K_MX; + Keyword_set["MY"] = K_MY; + Keyword_set["MXR90"] = K_MXR90; + Keyword_set["MYR90"] = K_MYR90; + Keyword_set["N"] = K_N; + Keyword_set["NAMEMAPSTRING"] = K_NAMEMAPSTRING; + Keyword_set["NAMESCASESENSITIVE"] = K_NAMESCASESENSITIVE; + Keyword_set["NANOSECONDS"] = K_NANOSECONDS; + Keyword_set["NEGEDGE"] = K_NEGEDGE; + Keyword_set["NETEXPR"] = K_NETEXPR; + Keyword_set["NETS"] = K_NETS; + Keyword_set["NEW"] = K_NEW; + Keyword_set["NONDEFAULTRULE"] = K_NONDEFAULTRULE; + Keyword_set["NONE"] = K_NONE; + Keyword_set["NONINVERT"] = K_NONINVERT; + Keyword_set["NONUNATE"] = K_NONUNATE; + Keyword_set["NOISETABLE"] = K_NOISETABLE; + Keyword_set["NOTCHLENGTH"] = K_NOTCHLENGTH; + Keyword_set["NOTCHSPACING"] = K_NOTCHSPACING; + Keyword_set["NOWIREEXTENSIONATPIN"] = K_NOWIREEXTENSIONATPIN; + Keyword_set["OBS"] = K_OBS; + Keyword_set["OFF"] = K_OFF; + Keyword_set["OFFSET"] = K_OFFSET; + Keyword_set["OHMS"] = K_OHMS; + Keyword_set["ON"] = K_ON; + Keyword_set["OR"] = K_OR; + Keyword_set["ORIENT"] = K_ORIENT; + Keyword_set["ORIENTATION"] = K_ORIENTATION; + Keyword_set["ORIGIN"] = K_ORIGIN; + Keyword_set["ORTHOGONAL"] = K_ORTHOGONAL; + Keyword_set["OUTPUT"] = K_OUTPUT; + Keyword_set["OUTPUTPINANTENNASIZE"] = K_OUTPUTPINANTENNASIZE; + Keyword_set["OUTPUTNOISEMARGIN"] = K_OUTPUTNOISEMARGIN; + Keyword_set["OUTPUTRESISTANCE"] = K_OUTPUTRESISTANCE; + Keyword_set["OUTSIDECORNER"] = K_OUTSIDECORNER; + Keyword_set["OVERHANG"] = K_OVERHANG; + Keyword_set["OVERLAP"] = K_OVERLAP; + Keyword_set["OVERLAPS"] = K_OVERLAPS; + Keyword_set["OXIDE1"] = K_OXIDE1; + Keyword_set["OXIDE2"] = K_OXIDE2; + Keyword_set["OXIDE3"] = K_OXIDE3; + Keyword_set["OXIDE4"] = K_OXIDE4; + Keyword_set["PAD"] = K_PAD; + Keyword_set["PARALLELEDGE"] = K_PARALLELEDGE; + Keyword_set["PARALLELOVERLAP"] = K_PARALLELOVERLAP; + Keyword_set["PARALLELRUNLENGTH"] = K_PARALLELRUNLENGTH; + Keyword_set["PATH"] = K_PATH; + Keyword_set["PATTERN"] = K_PATTERN; + Keyword_set["PEAK"] = K_PEAK; + Keyword_set["PERIOD"] = K_PERIOD; + Keyword_set["PGONLY"] = K_PGONLY; + Keyword_set["PICOFARADS"] = K_PICOFARADS; + Keyword_set["PIN"] = K_PIN; + Keyword_set["PITCH"] = K_PITCH; + Keyword_set["PLACED"] = K_PLACED; + Keyword_set["POLYGON"] = K_POLYGON; + Keyword_set["PORT"] = K_PORT; + Keyword_set["POSEDGE"] = K_POSEDGE; + Keyword_set["POST"] = K_POST; + Keyword_set["POWER"] = K_POWER; + Keyword_set["PRE"] = K_PRE; + Keyword_set["PREFERENCLOSURE"] = K_PREFERENCLOSURE; + Keyword_set["PRL"] = K_PRL; + Keyword_set["PROPERTY"] = K_PROPERTY; + Keyword_set["PROPERTYDEFINITIONS"] = K_PROPDEF; + Keyword_set["PROTRUSIONWIDTH"] = K_PROTRUSIONWIDTH; + Keyword_set["PULLDOWNRES"] = K_PULLDOWNRES; + Keyword_set["PWL"] = K_PWL; + Keyword_set["R0"] = K_R0; + Keyword_set["R90"] = K_R90; + Keyword_set["R180"] = K_R180; + Keyword_set["R270"] = K_R270; + Keyword_set["RANGE"] = K_RANGE; + Keyword_set["REAL"] = K_REAL; + Keyword_set["RECOVERY"] = K_RECOVERY; + Keyword_set["RECT"] = K_RECT; + Keyword_set["RESISTANCE"] = K_RESISTANCE; + Keyword_set["RESISTIVE"] = K_RESISTIVE; + Keyword_set["RING"] = K_RING; + Keyword_set["RISE"] = K_RISE; + Keyword_set["RISECS"] = K_RISECS; + Keyword_set["RISERS"] = K_RISERS; + Keyword_set["RISESATCUR"] = K_RISESATCUR; + Keyword_set["RISESATT1"] = K_RISESATT1; + Keyword_set["RISESLEWLIMIT"] = K_RISESLEWLIMIT; + Keyword_set["RISET0"] = K_RISET0; + Keyword_set["RISETHRESH"] = K_RISETHRESH; + Keyword_set["RISEVOLTAGETHRESHOLD"] = K_RISEVOLTAGETHRESHOLD; + Keyword_set["RMS"] = K_RMS; + Keyword_set["ROUTING"] = K_ROUTING; + Keyword_set["ROWABUTSPACING"] = K_ROWABUTSPACING; + Keyword_set["ROWCOL"] = K_ROWCOL; + Keyword_set["ROWMAJOR"] = K_ROWMAJOR; + Keyword_set["ROWMINSPACING"] = K_ROWMINSPACING; + Keyword_set["ROWPATTERN"] = K_ROWPATTERN; + Keyword_set["RPERSQ"] = K_RPERSQ; + Keyword_set["S"] = K_S; + Keyword_set["SAMENET"] = K_SAMENET; + Keyword_set["SCANUSE"] = K_SCANUSE; + Keyword_set["SDFCOND"] = K_SDFCOND; + Keyword_set["SDFCONDEND"] = K_SDFCONDEND; + Keyword_set["SDFCONDSTART"] = K_SDFCONDSTART; + Keyword_set["SETUP"] = K_SETUP; + Keyword_set["SHAPE"] = K_SHAPE; + Keyword_set["SHRINKAGE"] = K_SHRINKAGE; + Keyword_set["SIGNAL"] = K_SIGNAL; + Keyword_set["SITE"] = K_SITE; + Keyword_set["SIZE"] = K_SIZE; + Keyword_set["SKEW"] = K_SKEW; + Keyword_set["SLOTLENGTH"] = K_SLOTLENGTH; + Keyword_set["SLOTWIDTH"] = K_SLOTWIDTH; + Keyword_set["SLOTWIRELENGTH"] = K_SLOTWIRELENGTH; + Keyword_set["SLOTWIREWIDTH"] = K_SLOTWIREWIDTH; + Keyword_set["SPLITWIREWIDTH"] = K_SPLITWIREWIDTH; + Keyword_set["SOFT"] = K_SOFT; + Keyword_set["SOURCE"] = K_SOURCE; + Keyword_set["SPACER"] = K_SPACER; + Keyword_set["SPACING"] = K_SPACING; + Keyword_set["SPACINGTABLE"] = K_SPACINGTABLE; + Keyword_set["SPECIALNETS"] = K_SPECIALNETS; + Keyword_set["STABLE"] = K_STABLE; + Keyword_set["STACK"] = K_STACK; + Keyword_set["START"] = K_START; + Keyword_set["STEP"] = K_STEP; + Keyword_set["STOP"] = K_STOP; + Keyword_set["STRING"] = K_STRING; + Keyword_set["STRUCTURE"] = K_STRUCTURE; + Keyword_set["SUPPLYSENSITIVITY"] = K_SUPPLYSENSITIVITY; + Keyword_set["SYMMETRY"] = K_SYMMETRY; + Keyword_set["TABLE"] = K_TABLE; + Keyword_set["TABLEAXIS"] = K_TABLEAXIS; + Keyword_set["TABLEDIMENSION"] = K_TABLEDIMENSION; + Keyword_set["TABLEENTRIES"] = K_TABLEENTRIES; + Keyword_set["TAPERRULE"] = K_TAPERRULE; + Keyword_set["THEN"] = K_THEN; + Keyword_set["THICKNESS"] = K_THICKNESS; + Keyword_set["TIEHIGH"] = K_TIEHIGH; + Keyword_set["TIELOW"] = K_TIELOW; + Keyword_set["TIEOFFR"] = K_TIEOFFR; + Keyword_set["TIME"] = K_TIME; + Keyword_set["TIMING"] = K_TIMING; + Keyword_set["TO"] = K_TO; + Keyword_set["TOPIN"] = K_TOPIN; + Keyword_set["TOPLEFT"] = K_TOPLEFT; + Keyword_set["TOPOFSTACKONLY"] = K_TOPOFSTACKONLY; + Keyword_set["TOPRIGHT"] = K_TOPRIGHT; + Keyword_set["TRACKS"] = K_TRACKS; + Keyword_set["TRANSITIONTIME"] = K_TRANSITIONTIME; + Keyword_set["TRISTATE"] = K_TRISTATE; + Keyword_set["TRUE"] = K_TRUE; + Keyword_set["TWOEDGES"] = K_TWOEDGES; + Keyword_set["TWOWIDTHS"] = K_TWOWIDTHS; + Keyword_set["TYPE"] = K_TYPE; + Keyword_set["UNATENESS"] = K_UNATENESS; + Keyword_set["UNITS"] = K_UNITS; + Keyword_set["UNIVERSALNOISEMARGIN"] = K_UNIVERSALNOISEMARGIN; + Keyword_set["USE"] = K_USE; + Keyword_set["USELENGTHTHRESHOLD"] = K_USELENGTHTHRESHOLD; + Keyword_set["USEMINSPACING"] = K_USEMINSPACING; + Keyword_set["USER"] = K_USER; + Keyword_set["USEVIA"] = K_USEVIA; + Keyword_set["USEVIARULE"] = K_USEVIARULE; + Keyword_set["VARIABLE"] = K_VARIABLE; + Keyword_set["VERSION"] = K_VERSION; + Keyword_set["VERTICAL"] = K_VERTICAL; + Keyword_set["VHI"] = K_VHI; + Keyword_set["VIA"] = K_VIA; + Keyword_set["VIARULE"] = K_VIARULE; + Keyword_set["VICTIMLENGTH"] = K_VICTIMLENGTH; + Keyword_set["VICTIMNOISE"] = K_VICTIMNOISE; + Keyword_set["VIRTUAL"] = K_VIRTUAL; + Keyword_set["VLO"] = K_VLO; + Keyword_set["VOLTAGE"] = K_VOLTAGE; + Keyword_set["VOLTS"] = K_VOLTS; + Keyword_set["W"] = K_W; + Keyword_set["WELLTAP"] = K_WELLTAP; + Keyword_set["WIDTH"] = K_WIDTH; + Keyword_set["WITHIN"] = K_WITHIN; + Keyword_set["WIRECAP"] = K_WIRECAP; + Keyword_set["WIREEXTENSION"] = K_WIREEXTENSION; + Keyword_set["X"] = K_X; + Keyword_set["Y"] = K_Y; +} + + +void +lefrSettings::disableMsg(int msgId) +{ + msgsDisableMap[msgId] = 0; +} + + +void +lefrSettings::enableMsg(int msgId) +{ + std::map::iterator search = msgsDisableMap.find(msgId); + + if (search != msgsDisableMap.end()) { + msgsDisableMap.erase(search); + } +} + + +void +lefrSettings::enableAllMsgs() +{ + msgsDisableMap.clear(); +} + + +// Check if the message was disabled and returns statuses: +// 0 - enabled, 1 - disabled, need warning print, 2 - disabled no warning. +int +lefrSettings::suppresMsg(int msgId) +{ + std::map::iterator search = msgsDisableMap.find(msgId); + + if (search != msgsDisableMap.end()) { + int status = msgsDisableMap[msgId]; + if (!status) { + msgsDisableMap[msgId] = 1; + return 1; + } else { + return 2; + } + } + + return 0; +} + + +// This function will get token from input string. Also sets +// startIdx on first character after the token. +std::string +lefrSettings::getToken(const std::string &input, int &startIdx) +{ + std::string divChars = " \n\t\r;"; + int tokenStart = input.find_first_not_of(divChars, + startIdx); + int tokenEnd = input.find_first_of(divChars, + tokenStart); + + startIdx = tokenEnd; + return input.substr(tokenStart, tokenEnd - tokenStart); +} + + +// This function adds new lef58Type-layerType pairs. layerType +// is reference to string array last element of which should be +// "". The pairs will be created for each element of the array. +// Duplicated pairs will be ignored. +void +lefrSettings::addLef58Type(const char *lef58Type, + const char **layerType) +{ + for (;**layerType; layerType++) { + std::string typesPair(lef58Type); + + typesPair = typesPair + " " + *layerType; + + Lef58TypePairs.insert(typesPair); + } +} + + +std::string +lefrSettings::getLayerLef58Types(const char *type) const +{ + std::string result; + StringSet::const_iterator pairsIter = Lef58TypePairs.begin(); + + for (; pairsIter != Lef58TypePairs.end(); ++pairsIter) { + const std::string pair(*pairsIter); + int sepIdx = pair.find(' '); + + if (pair.substr(sepIdx + 1) != type) { + continue; + } + + if (!result.empty()) { + result += ", "; + } + + result += pair.substr(0, sepIdx); + } + + return result; +} + +END_LEFDEF_PARSER_NAMESPACE diff --git a/lefdef/src/lef/lef/lefrSettings.hpp b/lefdef/src/lef/lef/lefrSettings.hpp new file mode 100644 index 00000000..7a80b8a0 --- /dev/null +++ b/lefdef/src/lef/lef/lefrSettings.hpp @@ -0,0 +1,154 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: arakhman $ +// $Revision: #11 $ +// $Date: 2013/04/23 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef lefrSettings_h +#define lefrSettings_h + +#include +#include +#include +#include + +#include "lefrReader.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +struct lefCompareCStrings +{ + bool operator()(const char* lhs, const char* rhs) const { + return std::strcmp(lhs, rhs) < 0; + } +}; + +typedef std::map lefKeywordMap; +typedef std::map MsgsDisableMap; + +typedef std::set StringSet; + +class lefrProps { +public: + lefiPropType lefrCompProp; + lefiPropType lefrLayerProp; + lefiPropType lefrLibProp; + lefiPropType lefrMacroProp; + lefiPropType lefrNondefProp; + lefiPropType lefrPinProp; + lefiPropType lefrViaProp; + lefiPropType lefrViaRuleProp; +}; + +class lefrSettings { +public: + lefrSettings(); + + void init_symbol_table(); + static void reset(); + void addLef58Type(const char *lef58Type, + const char **layerType); + + std::string getLayerLef58Types(const char *type) const; + + void disableMsg(int msgId); + void enableMsg(int msgId); + void enableAllMsgs(); + int suppresMsg(int msgId); + + static std::string getToken(const std::string &input, + int &startIdx); + + lefKeywordMap Keyword_set; + + char CommentChar; + double VersionNum; + int DisPropStrProcess; + int CaseSensitive; + int CaseSensitiveSet; + int DeltaNumberLines; + int AntennaInoutWarnings; + int AntennaInputWarnings; + int AntennaOutputWarnings; + int ArrayWarnings; + int CaseSensitiveWarnings; + int CorrectionTableWarnings; + int DielectricWarnings; + int EdgeRateScaleFactorWarnings; + int EdgeRateThreshold1Warnings; + int EdgeRateThreshold2Warnings; + int IRDropWarnings; + int InoutAntennaWarnings; + int InputAntennaWarnings; + LEFI_LINE_NUMBER_FUNCTION LineNumberFunction; + int LayerWarnings; + int MacroWarnings; + int MaxStackViaWarnings; + int MinFeatureWarnings; + int NoWireExtensionWarnings; + int NoiseMarginWarnings; + int NoiseTableWarnings; + int NonDefaultWarnings; + int OutputAntennaWarnings; + int PinWarnings; + LEFI_READ_FUNCTION ReadFunction; + int ReadEncrypted; + int RegisterUnused; + int RelaxMode; + int ShiftCase; + int SiteWarnings; + int SpacingWarnings; + int TimingWarnings; + int UnitsWarnings; + int UseMinSpacingWarnings; + int ViaRuleWarnings; + int ViaWarnings; + int LogFileAppend; + int TotalMsgLimit; + lefiUserData UserData; + + StringSet Lef58TypePairs; + + LEFI_MALLOC_FUNCTION MallocFunction; + LEFI_REALLOC_FUNCTION ReallocFunction; + LEFI_FREE_FUNCTION FreeFunction; + LEFI_LOG_FUNCTION ErrorLogFunction; + LEFI_LOG_FUNCTION SetLogFunction; + LEFI_WARNING_LOG_FUNCTION WarningLogFunction; + + int MsgLimit[MAX_LEF_MSGS]; + + MsgsDisableMap msgsDisableMap; + int dAllMsgs; + + lefrProps lefProps; +}; + +extern lefrSettings* lefSettings; + +END_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefwWriter.cpp b/lefdef/src/lef/lef/lefwWriter.cpp new file mode 100644 index 00000000..f24a376d --- /dev/null +++ b/lefdef/src/lef/lef/lefwWriter.cpp @@ -0,0 +1,9839 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// ***************************************************************************** +// ***************************************************************************** + + +// This file contains code for implementing the lefwriter 5.3 +// It has all the functions user can call in their callbacks or +// just their writer to write out the correct lef syntax. +// +// Author: Wanda da Rosa +// Date: Summer, 1998 +// +// Revisions: + +#include +#include +#include +#include "lefwWriter.hpp" +#include "crypt.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// States of the writer. +#define LEFW_UNINIT 0 +#define LEFW_INIT 1 +#define LEFW_ARRAY_START 2 +#define LEFW_BEGINEXT_START 3 +#define LEFW_CORRECTTABLE_START 4 +#define LEFW_IRDROP_START 5 +#define LEFW_LAYER_START 6 +#define LEFW_LAYERROUTING_START 7 +#define LEFW_LAYERROUTING_SP_START 8 +#define LEFW_MACRO_START 9 +#define LEFW_NOISETABLE_START 10 +#define LEFW_NONDEFAULTRULE_START 11 +#define LEFW_PROPERTYDEF_START 12 +#define LEFW_SPACING_START 13 +#define LEFW_UNITS_START 14 +#define LEFW_VIA_START 15 +#define LEFW_VIARULE_START 16 +#define LEFW_VIARULEGEN_START 17 + +#define LEFW_ANTENNASIZE 18 +#define LEFW_ARRAY 19 +#define LEFW_BEGINEXT 20 +#define LEFW_BUSBITCHARS 21 +#define LEFW_CASESENSITIVE 22 +#define LEFW_CORRECTTABLE 23 +#define LEFW_DIELECTRIC 24 +#define LEFW_DIVIDERCHAR 25 +#define LEFW_EDGERATE 26 +#define LEFW_IRDROP 27 +#define LEFW_LAYER 28 +#define LEFW_LAYERACCURRENT 29 +#define LEFW_LAYERDCCURRENT 30 +#define LEFW_LAYERROUTING 31 +#define LEFW_LAYERROUTINGWIDTH 32 +#define LEFW_MACRO 33 +#define LEFW_MACRO_CAPACITANCE 34 +#define LEFW_MACRO_INPUTNOISEMARGIN 35 +#define LEFW_MACRO_FALLCURRENTSOURCE 36 +#define LEFW_MACRO_FALLSATCUR 37 +#define LEFW_MACRO_FALLTHRESH 38 +#define LEFW_MACRO_FALLVOLTAGETHRESHOLD 39 +#define LEFW_MACRO_IV_TABLES 40 +#define LEFW_MACRO_LEAKAGE 41 +#define LEFW_MACRO_LEQ 42 +#define LEFW_MACRO_OUTPUTNOISEMARGIN 43 +#define LEFW_MACRO_OUTPUTRESISTANCE 44 +#define LEFW_MACRO_PINFOREIGN 45 +#define LEFW_MACRO_PINLEQ 46 +#define LEFW_MACRO_POWER 47 +#define LEFW_MACRO_PULLDOWNRES 48 +#define LEFW_MACRO_RESISTANCE 49 +#define LEFW_MACRO_RISESATCUR 50 +#define LEFW_MACRO_RISETHRESH 51 +#define LEFW_MACRO_RISEVOLTAGETHRESHOLD 52 +#define LEFW_MACRO_SOURCE 53 +#define LEFW_MACRO_TIEOFFR 54 +#define LEFW_MACRO_TIMING 55 +#define LEFW_MACRO_VHI 56 +#define LEFW_MACRO_VLO 57 +#define LEFW_MINFEATURE 58 +#define LEFW_NONDEFAULTRULE 59 +#define LEFW_NONDEFAULTRULELAYER 60 +#define LEFW_NOISEMARGIN 61 +#define LEFW_NOISETABLE 62 +#define LEFW_NOWIREEXTATPIN 63 +#define LEFW_PROPERTYDEF 64 +#define LEFW_SCALEFACTOR 65 +#define LEFW_SITE 66 +#define LEFW_SPACING 67 +#define LEFW_THRESHOLD1 68 +#define LEFW_THRESHOLD2 69 +#define LEFW_UNITS 70 +#define LEFW_VERSION 71 +#define LEFW_VIA 72 +#define LEFW_VIAFOREIGN 73 +#define LEFW_VIARULE 74 +#define LEFW_VIARULEGENERATE 75 +#define LEFW_VIARULEGEN 76 +#define LEFW_VIATOPOFSTACKONLY 77 +#define LEFW_VIAVIARULE 78 + +#define LEFW_END 79 +#define LEFW_ARRAY_END 80 +#define LEFW_BEGINEXT_END 81 +#define LEFW_CORRECTTABLE_END 82 +#define LEFW_IRDROP_END 83 +#define LEFW_LAYER_END 84 +#define LEFW_LAYERROUTING_END 85 +#define LEFW_LAYERROUTING_SPACINGTABLE_END 86 +#define LEFW_MACRO_END 87 +#define LEFW_NOISETABLE_END 88 +#define LEFW_NONDEFAULTRULE_END 89 +#define LEFW_PROPERTYDEF_END 90 +#define LEFW_SITE_END 91 +#define LEFW_SPACING_END 92 +#define LEFW_VIA_END 93 +#define LEFW_VIARULE_END 94 +#define LEFW_VIARULEGEN_END 95 +#define LEFW_UNITS_END 96 + +// 5.4 +// ANTENNA for LAYER +#define LEFW_ANTENNAINPUTGATEAREA 97 +#define LEFW_ANTENNAINOUTDIFFAREA 98 +#define LEFW_ANTENNAOUTPUTDIFFAREA 99 +#define LEFW_ANTENNAMODEL 100 +#define LEFW_ANTENNAAREARATIO 101 +#define LEFW_ANTENNADIFFAREARATIO 102 +#define LEFW_ANTENNADIFFAREARATIOPWL 103 +#define LEFW_ANTENNACUMAREARATIO 104 +#define LEFW_ANTENNACUMDIFFAREARATIO 105 +#define LEFW_ANTENNACUMDIFFAREARATIOPWL 106 +#define LEFW_ANTENNAAREAFACTOR 107 +#define LEFW_ANTENNASIDEAREARATIO 108 +#define LEFW_ANTENNADIFFSIDEAREARATIO 109 +#define LEFW_ANTENNADIFFSIDEAREARATIOPWL 110 +#define LEFW_ANTENNACUMSIDEAREARATIO 111 +#define LEFW_ANTENNACUMDIFFSIDEAREARATIO 112 +#define LEFW_ANTENNACUMDIFFSIDEAREARATIOPWL 113 +#define LEFW_ANTENNASIDEAREAFACTOR 114 +// ANTENNA for MACRO PIN +#define LEFW_ANTENNAPARTIALMETALAREA 115 +#define LEFW_ANTENNAPARTIALMETALSIDEAREA 116 +#define LEFW_ANTENNAGATEAREA 117 +#define LEFW_ANTENNADIFFAREA 118 +#define LEFW_ANTENNAMAXAREACAR 119 +#define LEFW_ANTENNAMAXSIDEAREACAR 120 +#define LEFW_ANTENNAPARTIALCUTAREA 121 +#define LEFW_ANTENNAMAXCUTCAR 122 +#define LEFW_CLEARANCEMEASURE 123 +#define LEFW_DENSITYCHECKWINDOW 124 +#define LEFW_DENSITYCHECKSTEP 125 +#define LEFW_DESIGNRULEWIDTH 126 +#define LEFW_FILLACTIVESPACING 127 +#define LEFW_MANUFACTURINGGRID 128 +#define LEFW_MAXADJACENTSLOTSPACING 129 +#define LEFW_MAXCOAXIALSLOTSPACING 130 +#define LEFW_MAXEDGESLOTSPACING 131 +#define LEFW_MAXIMUMDENSITY 132 +#define LEFW_MINIMUMDENSITY 133 +#define LEFW_ROWABUTSPACING 134 +#define LEFW_ROWMINSPACING 135 +#define LEFW_SLOTWIREWIDTH 136 +#define LEFW_SLOTWIRELENGTH 137 +#define LEFW_SLOTWIDTH 138 +#define LEFW_SLOTLENGTH 139 +#define LEFW_SPLITWIREWIDTH 140 +#define LEFW_USEMINSPACING 141 +#define LEFW_FIXEDMASK 142 + +#define LEFW_DONE 999 + +#define MAXSYN 143 + +// ***************************************************************************** +// Global Variables +// ***************************************************************************** +typedef void (*LEFI_LOG_FUNCTION)(const char*); +typedef void (*LEFI_WARNING_LOG_FUNCTION)(const char*); + +LEFI_LOG_FUNCTION lefwErrorLogFunction; +LEFI_WARNING_LOG_FUNCTION lefwWarningLogFunction; + +FILE *lefwFile = 0; // File to write to. +int lefwSynArray[MAXSYN]; // array of syntax +int lefwLines = 0; // number of lines written +int lefwState = LEFW_UNINIT; // Current state of writer +int lefwDidInit = 0; // required section +int lefwDidLayer = 0; // required section +int lefwDidVia = 0; // required section +int lefwDidViaRule = 0; // required section +int lefwDidViaSite = 0; // required section +int lefwDidViaMacro = 0; // required section +int lefwCounter = 0; // number of nets, components in section +int lefwLineItemCounter = 0; // number of items on current line +int lefwHasArrayReq = 0; // array required data +int lefwIsArrayFloorp = 0; // array floorplan flag +int lefwIsArrayDef = 0; // array default cap flag +int lefwIsCorrectTable = 0; // correctiontable flag +int lefwIsCut = 0; // cut layer +int lefwIsEdgerate = 0; // edgerate within noisetable +int lefwIsFloorp = 0; // floorplan within array +int lefwIsImplant = 0; // implant layer +int lefwIsMacroDensity = 0; // macro density flag +int lefwIsMacroObs = 0; // macro obs flag +int lefwIsMacroObsLayer = 0; // macro obs layer within macro obs +int lefwIsMacroPin = 0; // macro pin flag +int lefwIsMacroPinPortLayer = 0; // macro pin port layer within macro pin port +int lefwIsMacroPinPort = 0; // macro pin port within macro pin +int lefwIsMacroTiming = 0; // macro timing flag +int lefwIsMacroTimingModel = 0; // macro timing model flag +int lefwIsMaxviastack = 0; // maximum stacked-via +int lefwIsNoiseTable = 0; // noisetable flag +int lefwIsNonDefaultRule = 0; // nondefaultrule flag +int lefwIsOutResist = 0; // outputResistance within edgerate +int lefwIsRouting = 0; // routing +int lefwIsRoutingMinCut = 0; // routing Minimumcut +int lefwIsRoutingMinCutDist = 0; // routing Minimumcut distance +int lefwIsRoutingMinCutLen = 0; // routing Minimumcut length within +int lefwIsRoutingReqData = 0; // layer routing required data are provided +int lefwNumViaRuleLayers = 0; // number of via rule in a via rule +int lefwOldState = 0; // the previous state +int lefwTableLen = 0; // width or cutarea for the tableEntries +int lefwHasInit = 0; // for lefwInit has called +int lefwHasInitCbk = 0; // for lefwInitCbk has called +static int lefwWriteEncrypt = 0; // for writing out encrypted file, default is 0 +static int prtSemiColon = 0; // sometimes ; is not printed yet +static int prtNewLine = 0; // sometimes need to print a new line +static int lefwHasLayerRoutingRange = 0; // mark if layer routing has range +static int lefwHasLayerRoutingSpacing = 0; // layer routing is lengththreshold +static int lefwHasLayerRoutingEol = 0; // mark if layer routing is endofline +static int lefwIsLayerCutSpacing = 0; // mark if layer cut spacing +static int lefwAMaxAreaCar = 0; // only allow to define once per pin +static int lefwAMaxSideAreaCar = 0; // only allow to define once per pin +static int lefwAMaxCutCar = 0; // only allow to define once per pin +static int lefwSpacingVal = 0; // either this or lefwWidthVal +static int lefwWidthVal = 0; // is allowed +static double versionNum = 5.7; // default to 5.7 +static int lefwAntenna54 = 0; // to keep track 5.4 antenna is used +static int lefwAntenna53 = 0; // to keep track 5.3 antenna is used +static int lefwObsoleteNum = -1; // keep track the obsolote syntax for error +static int lefw54Num = -1; // keep track the 5.4 syntax for error +static int lefwViaHasVal = 0; // keep track only ViaRule or Resistance in a via + +char lefwStateStr[MAXSYN] [80] = { + "UNITS", // 0 + "INIT", // 1 + "ARRAY", // 2 + "BEGINEXT", // 3 + "CORRECTTABLE", // 4 + "IRDROP", // 5 + "LAYER", // 6 + "LAYERROUTING", // 7 + "LAYERROUTINGSPACINGTABLE", // 8 + "MACRO", // 9 + "NOISETABLE", // 10 + "NONDEFAULTRULE", // 11 + "PROPERTYDEFINITION", // 12 + "SPACING", // 13 + "UNITS", // 14 + "VIA", // 15 + "VIARULE", // 16 + "VIARULEGEN", // 17 + "ANTENNASIZE", // 18 + "ARRAY", // 19 + "BEGINEXT", // 20 + "BUSBITCHARS", // 21 + "CASESENSITIVE", // 22 + "CORRECTABLE", // 23 + "DIELECTRIC", // 24 + "DIVIDERCHAR", // 25 + "EDGERATE", // 26 + "IRDROP", // 27 + "LAYER", // 28 + "LAYERACCURRENT", // 29 + "LAYERDCCURRENT", // 30 + "LAYERROUTING", // 31 + "LAYERROUTINGWIDTH", // 32 + "MACRO", // 33 + "MACRO_CAPACITANCE", // 34 + "MACRO_INPUTNOISEMARGIN",// 35 + "MACRO_FALLCURRENTSOURCE", // 36 + "MACRO_FALLSATCUR", // 37 + "MACRO_FALLTHRESH", // 38 + "MACRO_FALLVOLTAGETHRESHOLD",// 39 + "MACRO_IV_TABLES", // 40 + "MACRO_LEAKAGE", // 41 + "MACRO_LEQ", // 42 + "MACRO_OUTPUTNOISEMARGIN", // 43 + "MACRO_OUTPUTRESISTANCE", // 44 + "MACRO_PINFOREIGN", // 45 + "MACRO_PINLEQ", // 46 + "MACRO_POWER", // 47 + "MACRO_PULLDOWNRES", // 48 + "MACRO_RESISTANCE", // 49 + "MACRO_RISESATCUR", // 50 + "MACRO_RISETHRESH", // 51 + "MACRO_RISEVOLTAGETHRESHOLD",// 52 + "MACRO_SOURCE", // 53 + "MACRO_TIEOFFR", // 54 + "MACRO_TIMING", // 55 + "MACRO_VHI", // 56 + "MACRO_VLO", // 57 + "MINFEATURE", // 58 + "NONDEFAULTRULE", // 59 + "NONDEFAULTRULELAYERRESIST_CAPACITANCE_EDGECAP", // 60 + "NOISEMARGIN", // 61 + "NOISETABLE", // 62 + "NOWIREEXTSIONATPIN", // 63 + "PROPERTYDEFINITION", // 64 + "EDGERATESCALEFACTOR", // 65 + "SITE", // 66 + "SPACING", // 67 + "EDGERATETHRESHOLD1", // 68 + "EDGERATETHRESHOLD2", // 69 + "UNTIS", // 70 + "VERSION", // 71 + "VIA", // 72 + "VIAFOREIGN", // 73 + "VIARULE", // 74 + "VIARULEDIRECTION_OVERHANG_METALOVERHANG", // 75 + "VIARULEGEN", // 76 + "VIATOPOFSTACKONLY", // 77 + "VIAVIARULE", // 78 + "END", // 79 + "ARRAY", // 80 + "BEGINEXT", // 81 + "CORRECTABLE", // 82 + "IRDROP", // 83 + "LAYER", // 84 + "LAYERROUTING", // 85 + "LAYERROUTINGSPACINGTABLE", // 86 + "MACRO", // 87 + "NOISETABLE", // 88 + "NONDEFAULTRULE", // 89 + "PROERTYDEFINITION", // 90 + "SITE", // 91 + "SPACING", // 92 + "VIA", // 93 + "VIARULE", // 94 + "VIARULEGEN", // 95 + "UNITS", // 96 + "ANTENNAINPUTGATEAREA", // 97 + "ANTENNAINOUTDIFFAREA", // 98 + "ANTENNAOUTPUTDIFFAREA", // 99 + "ANTENNAMODEL", // 100 + "ANTENNAAREARATIO", // 101 + "ANTENNADIFFAREARATIO", // 102 + "ANTENNADIFFAREARATIO PWL", // 103 + "ANTENNACUMAREARATIO", // 104 + "ANTENNACUMDIFFAREARATIO", // 105 + "ANTENNACUMDIFFAREARATIO PWL", // 106 + "ANTENNAAREAFACTOR", // 107 + "ANTENNASIDEAREARATIO", // 108 + "ANTENNADIFFSIDEAREARATIO", // 109 + "ANTENNADIFFSIDEAREARATIO PWL", // 110 + "ANTENNACUMSIDEAREARATIO", // 111 + "ANTENNACUMDIFFSIDEAREARATIO", // 112 + "ANTENNACUMDIFFSIDEAREARATIO PWL", // 113 + "ANTENNASIDEAREAFACTOR", // 114 + "ANTENNAPARTIALMETALAREA", // 115 + "ANTENNAPARTIALMETALSIDEAREA", // 116 + "ANTENNAGATEAREA", // 117 + "ANTENNADIFFAREA", // 118 + "ANTENNAMAXAREACAR", // 119 + "ANTENNAMAXSIDEAREACAR", // 120 + "ANTENNAPARTIALCUTAREA", // 121 + "ANTENNAMAXCUTCAR", // 122 + "CLEARANCEMEASURE", // 123 + "DENSITYCHECKWINDOW", // 124 + "DENSITYCHECKSTEP", // 125 + "DESIGNRULEWIDTH", // 126 + "FILLACTIVESPACING", // 127 + "MANUFACTURINGGRID", // 128 + "MAXADJACENTSLOTSPACING", // 129 + "MAXCOAXIALSLOTSPACING", // 130 + "MAXEDGESLOTSPACING", // 131 + "MAXIMUMDENSITY", // 132 + "MINIMUMDENSITY", // 133 + "ROWABUTSPACING", // 134 + "ROWMINSPACING", // 135 + "SLOTWIREWIDTH", // 136 + "SLOTWIRELENGTH", // 137 + "SLOTWIDTH", // 138 + "SLOTLENGTH", // 139 + "SPLITWIREWIDTH", // 140 + "USEMINSPACING PIN" // 141 +}; + +// internal function +char * +lefwAddr(const char *x) +{ + return (char*) x; +} + +// internal function +char * +lefwOrient(int num) +{ + switch (num) { + case 0: + return lefwAddr("N"); + case 1: + return lefwAddr("W"); + case 2: + return lefwAddr("S"); + case 3: + return lefwAddr("E"); + case 4: + return lefwAddr("FN"); + case 5: + return lefwAddr("FW"); + case 6: + return lefwAddr("FS"); + case 7: + return lefwAddr("FE"); + }; + return lefwAddr("BOGUS"); +} + +// internal function +bool +lefwValidateMaskNumber(int num) +{ + int digit = 0; + int index = 0; + + if (num < 0) { + return false; + } + + while (num > 0) { + digit = num % 10; + + if (digit > 3) { + return false; + } + + index++; + num = num / 10; + } + + if (index > 3) { + return false; + } + + return true; +} + +// this function is required to be called first to initialize the array +// Either this function or lefwInitCbk can be called, cannot be both +int +lefwInit(FILE *f) +{ + int i; + + // Check if the user is valid + /* don't need anymore + if (!lefiValidUser()) + exit(77); + */ + + // if (lefwFile) return LEFW_BAD_ORDER; + lefwFile = f; + + if (lefwHasInitCbk == 1) { // lefwInitCbk has already called, issue an error + fprintf(lefwFile, + "ERROR (LEFWRIT-4000): lefwInitCbk has already called, cannot call lefwInit again.\n"); + fprintf(lefwFile, "Writer Exit.\n"); + exit(LEFW_BAD_ORDER); + } + lefwState = LEFW_UNINIT; // Current state of writer + lefwDidInit = 0; // required section + + for (i = 0; i < MAXSYN; i++) + lefwSynArray[i] = 0; + + lefwDidInit = 1; + lefwState = LEFW_INIT; + lefwHasInit = 1; + return LEFW_OK; +} + +// this function is required to be called first to initialize the array +// Either this function or lefwInit can be called, cannot be both +int +lefwInitCbk(FILE *f) +{ + int i; + + // if (lefwFile) return LEFW_BAD_ORDER; + lefwFile = f; + + if (lefwHasInit == 1) { // lefwInit has already called, issue an error + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) + "ERROR (LEFWRIT-4001): lefwInit has already called, cannot call lefwInitCbk again.\n"); + encPrint(lefwFile, (char*) "Writer Exit.\n"); + } else { + fprintf(lefwFile, + "ERROR (LEFWRIT-4002): lefwInit has already called, cannot call lefwInitCbk again.\n"); + fprintf(lefwFile, "Writer Exit.\n"); + } + exit(LEFW_BAD_ORDER); + } + lefwState = LEFW_UNINIT; // Current state of writer + lefwDidInit = 0; // required section + + for (i = 0; i < MAXSYN; i++) + lefwSynArray[i] = 0; + + lefwDidInit = 1; + lefwState = LEFW_INIT; + lefwHasInitCbk = 1; + return LEFW_OK; +} + +// This function sets the global variable lefwEncrypt to 1, which will +// write out an output encrypted file, make sure to call lefwCloseEncrypt +// before closing the output file +int +lefwEncrypt() +{ + if (!lefwFile || (lefwFile == stdout)) { + // No output filename is given + fprintf(stderr, "ERROR (LEFWRITE-4006): Need an output file if writing in encrypted format.\n"); + return LEFW_BAD_ORDER; + } + + // Set the flag in crypt.cpp + encWritingEncrypted(); + + lefwWriteEncrypt = 1; + return LEFW_OK; +} + +// This function needs to be called if lefwEncrypt is called +// It will clear the encrypted buffer +int +lefwCloseEncrypt() +{ + + if (lefwWriteEncrypt) + encClearBuf(lefwFile); + return LEFW_OK; +} + +int +lefwNewLine() +{ + if (!lefwFile) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n"); + else + fprintf(lefwFile, "\n"); + return LEFW_OK; +} + +int +lefwVersion(int vers1, + int vers2) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_VERSION]) + return LEFW_ALREADY_DEFINED; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "VERSION %d.%d ;\n", vers1, vers2); + else + fprintf(lefwFile, "VERSION %d.%d ;\n", vers1, vers2); + if (vers2 >= 10) + versionNum = vers1 + (vers2 / 100.0); + else + versionNum = vers1 + (vers2 / 10.0); + lefwSynArray[LEFW_VERSION] = 1; + lefwLines++; + return LEFW_OK; +} + + +int +lefwCaseSensitive(const char *caseSensitive) +{ + lefwObsoleteNum = LEFW_CASESENSITIVE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + if (lefwSynArray[LEFW_CASESENSITIVE]) + return LEFW_ALREADY_DEFINED; + if (strcmp(caseSensitive, "ON") && strcmp(caseSensitive, "OFF")) + return LEFW_BAD_DATA; // has to be either ON or OFF + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "NAMESCASESENSITIVE %s ;\n", caseSensitive); + else + fprintf(lefwFile, "NAMESCASESENSITIVE %s ;\n", caseSensitive); + lefwSynArray[LEFW_CASESENSITIVE] = 1; + lefwLines++; + return LEFW_OK; +} + + +int +lefwNoWireExtensionAtPin(const char *noWireExt) +{ + lefwObsoleteNum = LEFW_NOWIREEXTATPIN; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + if (lefwSynArray[LEFW_NOWIREEXTATPIN]) + return LEFW_ALREADY_DEFINED; + if (strcmp(noWireExt, "ON") && strcmp(noWireExt, "OFF")) + return LEFW_BAD_DATA; // has to be either ON or OFF + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "NOWIREEXTENSIONATPIN %s ;\n", noWireExt); + else + fprintf(lefwFile, "NOWIREEXTENSIONATPIN %s ;\n", noWireExt); + lefwSynArray[LEFW_NOWIREEXTATPIN] = 1; + lefwLines++; + return LEFW_OK; +} + + +int +lefwMinfeature(double minFeatureX, + double minFeatureY) +{ + lefwObsoleteNum = LEFW_MINFEATURE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwSynArray[LEFW_MINFEATURE]) + return LEFW_ALREADY_DEFINED; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "MINFEATURE %.11g %.11g ;\n", + minFeatureX, minFeatureY); + else + fprintf(lefwFile, "MINFEATURE %.11g %.11g ;\n", minFeatureX, minFeatureY); + lefwSynArray[LEFW_MINFEATURE] = 1; + lefwLines++; + return LEFW_OK; +} + +int +lefwDielectric(double dielectric) +{ + lefwObsoleteNum = LEFW_DIELECTRIC; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwSynArray[LEFW_DIELECTRIC]) + return LEFW_ALREADY_DEFINED; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "DIELECTRIC %.11g ;\n", dielectric); + else + fprintf(lefwFile, "DIELECTRIC %.11g ;\n", dielectric); + lefwSynArray[LEFW_DIELECTRIC] = 1; + lefwLines++; + return LEFW_OK; +} + +int +lefwBusBitChars(const char *busBitChars) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_BUSBITCHARS]) + return LEFW_ALREADY_DEFINED; + if (busBitChars && busBitChars != 0 && *busBitChars != 0) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "BUSBITCHARS \"%s\" ;\n", busBitChars); + else + fprintf(lefwFile, "BUSBITCHARS \"%s\" ;\n", busBitChars); + } + lefwLines++; + lefwSynArray[LEFW_BUSBITCHARS] = 1; + return LEFW_OK; +} + +int +lefwDividerChar(const char *dividerChar) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_DIVIDERCHAR]) + return LEFW_ALREADY_DEFINED; + if (dividerChar && dividerChar != 0 && *dividerChar != 0) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "DIVIDERCHAR \"%s\" ;\n", dividerChar); + else + fprintf(lefwFile, "DIVIDERCHAR \"%s\" ;\n", dividerChar); + } + lefwLines++; + lefwSynArray[LEFW_DIVIDERCHAR] = 1; + return LEFW_OK; +} + +int +lefwManufacturingGrid(double grid) +{ + lefw54Num = LEFW_MANUFACTURINGGRID; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_MANUFACTURINGGRID]) + return LEFW_ALREADY_DEFINED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "MANUFACTURINGGRID %.11g ;\n", grid); + else + fprintf(lefwFile, "MANUFACTURINGGRID %.11g ;\n", grid); + lefwLines++; + lefwSynArray[LEFW_MANUFACTURINGGRID] = 1; + return LEFW_OK; +} + +int +lefwFixedMask() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + + if (versionNum < 5.8) + return LEFW_WRONG_VERSION; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "FIXEDMASK ;\n"); + else + fprintf(lefwFile, "FIXEDMASK ;\n"); + + lefwLines++; + lefwSynArray[LEFW_FIXEDMASK] = 1; + return LEFW_OK; +} + +int +lefwUseMinSpacing(const char *type, + const char *onOff) +{ + lefwObsoleteNum = LEFW_USEMINSPACING; + lefw54Num = LEFW_USEMINSPACING; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + // Can define more than once + // if (lefwSynArray[LEFW_USEMINSPACING]) return LEFW_ALREADY_DEFINED; + if (!type || (strcmp(type, "OBS") && strcmp(type, "PIN"))) + return LEFW_BAD_DATA; // has to be OBS or PIN + if ((strcmp(type, "PIN") == 0) && (versionNum >= 5.6)) + return LEFW_OBSOLETE; + if (!onOff || (strcmp(onOff, "ON") && strcmp(onOff, "OFF"))) + return LEFW_BAD_DATA; // has to be ON or OFF + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "USEMINSPACING %s %s ;\n", type, onOff); + else + fprintf(lefwFile, "USEMINSPACING %s %s ;\n", type, onOff); + lefwLines++; + // lefwSynArray[LEFW_USEMINSPACING] = 1; + return LEFW_OK; +} + +int +lefwClearanceMeasure(const char *type) +{ + lefw54Num = LEFW_CLEARANCEMEASURE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_CLEARANCEMEASURE]) + return LEFW_ALREADY_DEFINED; + if (!type || (strcmp(type, "MAXXY") && strcmp(type, "EUCLIDEAN"))) + return LEFW_BAD_DATA; // has to be MAXXY or EUCLIDEAN + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "CLEARANCEMEASURE %s ;\n", type); + else + fprintf(lefwFile, "CLEARANCEMEASURE %s ;\n", type); + lefwLines++; + lefwSynArray[LEFW_CLEARANCEMEASURE] = 1; + return LEFW_OK; +} + +int +lefwStartUnits() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwSynArray[LEFW_UNITS_START]) + return LEFW_ALREADY_DEFINED; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "UNITS\n"); + else + fprintf(lefwFile, "UNITS\n"); + lefwLines++; + lefwSynArray[LEFW_UNITS_START] = 1; + lefwState = LEFW_UNITS_START; + return LEFW_OK; +} + +int +lefwUnits(double time, // optional + double capacitance, // optional + double resistance, // optional + double power, // optional + double current, // optional + double voltage, // optional + double database // optional + ) +{ + + int databaseVal; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_UNITS_START && + lefwState != LEFW_UNITS) + return LEFW_BAD_ORDER; + + if (time) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " TIME NANOSECONDS %.11g ;\n", time); + else + fprintf(lefwFile, " TIME NANOSECONDS %.11g ;\n", time); + } + if (capacitance) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " CAPACITANCE PICOFARADS %.11g ;\n", + capacitance); + else + fprintf(lefwFile, " CAPACITANCE PICOFARADS %.11g ;\n", capacitance); + } + if (resistance) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RESISTANCE OHMS %.11g ;\n", resistance); + else + fprintf(lefwFile, " RESISTANCE OHMS %.11g ;\n", resistance); + } + if (power) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " POWER MILLIWATTS %.11g ;\n", power); + else + fprintf(lefwFile, " POWER MILLIWATTS %.11g ;\n", power); + } + if (current) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " CURRENT MILLIAMPS %.11g ;\n", current); + else + fprintf(lefwFile, " CURRENT MILLIAMPS %.11g ;\n", current); + } + if (voltage) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " VOLTAGE VOLTS %.11g ;\n", voltage); + else + fprintf(lefwFile, " VOLTAGE VOLTS %.11g ;\n", voltage); + } + if (database) { + databaseVal = (int) database; + switch (databaseVal) { + case 100: + case 200: + case 1000: + case 2000: + case 10000: + case 20000: + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DATABASE MICRONS %d ;\n", + database); + else + fprintf(lefwFile, " DATABASE MICRONS %d ;\n", databaseVal); + break; + default: + return LEFW_BAD_DATA; + } + } + + lefwState = LEFW_UNITS; + return LEFW_OK; +} + +int +lefwUnitsFrequency(double frequency) +{ // required since only by itself + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_UNITS_START && + lefwState != LEFW_UNITS) + return LEFW_BAD_ORDER; + if (!frequency) + return LEFW_BAD_DATA; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FREQUENCY MEGAHERTZ %.11g ;\n", frequency); + else + fprintf(lefwFile, " FREQUENCY MEGAHERTZ %.11g ;\n", frequency); + + lefwState = LEFW_UNITS; + return LEFW_OK; +} + +int +lefwEndUnits() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_UNITS_START && + lefwState != LEFW_UNITS) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END UNITS\n\n"); + else + fprintf(lefwFile, "END UNITS\n\n"); + lefwLines++; + lefwState = LEFW_UNITS_END; + return LEFW_OK; +} + +int +lefwStartLayer(const char *layerName, + const char *type) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_LAYER_START || + lefwState == LEFW_LAYER) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; // Layer after maximum stacked-via + if (strcmp(type, "CUT") == 0) + lefwIsCut = 1; + else if (strcmp(type, "IMPLANT") == 0) // IMPLANT is 5.5 syntax + lefwIsImplant = 1; + else if (strcmp(type, "MASTERSLICE") && strcmp(type, "OVERLAP") && + strcmp(type, "IMPLANT")) // IMPLANT is 5.5 syntax + return LEFW_BAD_DATA; // type is CUT, MASTERSLICE or OVERLAP only + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "LAYER %s\n", layerName); + encPrint(lefwFile, (char*) " TYPE %s ;\n", type); + } else { + fprintf(lefwFile, "LAYER %s\n", layerName); + fprintf(lefwFile, " TYPE %s ;\n", type); + } + lefwIsRouting = 0; + lefwLines = lefwLines + 2; + lefwState = LEFW_LAYER_START; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacing(double spacing) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (lefwIsLayerCutSpacing) + return LEFW_BAD_ORDER; + if ((!lefwIsCut) && (!lefwIsImplant)) + return LEFW_BAD_DATA; + // only cut & implant call this func + if (spacing) { + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " SPACING %.11g", spacing); + } else { + fprintf(lefwFile, " SPACING %.11g", spacing); + } + } else + return LEFW_BAD_ORDER; + + lefwLines++; + lefwState = LEFW_LAYER; + lefwIsLayerCutSpacing = 1; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacingCenterToCenter() +{ + if (!lefwIsLayerCutSpacing) + return LEFW_BAD_ORDER; // has to be after + // lefwLayerCutSpacing is called + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n CENTERTOCENTER"); + else + fprintf(lefwFile, "\n CENTERTOCENTER"); + lefwLines++; + + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacingSameNet() +{ + if (!lefwIsLayerCutSpacing) + return LEFW_BAD_ORDER; // has to be after + // lefwLayerCutSpacing is called + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n SAMENET"); + else + fprintf(lefwFile, "\n SAMENET"); + lefwLines++; + + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacingLayer(const char *name2, + int stack) +{ // optional + if (!lefwIsLayerCutSpacing) + return LEFW_BAD_ORDER; // has to be after + // lefwLayerCutSpacing is called + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "\n LAYER %s", name2); + if (stack) + encPrint(lefwFile, (char*) " STACK"); + } else { + fprintf(lefwFile, "\n LAYER %s", name2); + if (stack) + fprintf(lefwFile, " STACK"); + } + + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacingAdjacent(int viaCuts, // either 2, 3 or 4, optional + double distance, + int except) +{ // optional + if (!lefwIsLayerCutSpacing) + return LEFW_BAD_ORDER; // has to be after + // lefwLayerCutSpacing is called + if (lefwWriteEncrypt) { + if (viaCuts < 2 && viaCuts > 4) + return LEFW_BAD_DATA; + encPrint(lefwFile, (char*) "\n ADJACENTCUTS %d WITHIN %.11g", + viaCuts, distance); + if (except) + encPrint(lefwFile, (char*) " EXCEPTSAMEPGNET"); + + } else { + if (viaCuts < 2 && viaCuts > 4) + return LEFW_BAD_DATA; + fprintf(lefwFile, "\n ADJACENTCUTS %d WITHIN %.11g", viaCuts, + distance); + if (except) + fprintf(lefwFile, " EXCEPTSAMEPGNET"); + } + + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacingParallel() +{ + if (!lefwIsLayerCutSpacing) + return LEFW_BAD_ORDER; // has to be after + // lefwLayerCutSpacing is called + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "\n PARALLELOVERLAP"); + } else { + fprintf(lefwFile, "\n PARALLELOVERLAP"); + } + + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacingArea(double cutArea) +{ + if (!lefwIsLayerCutSpacing) + return LEFW_BAD_ORDER; // has to be after + // lefwLayerCutSpacing is called + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "\n AREA %.11g", cutArea); + } else { + fprintf(lefwFile, "\n AREA %.11g", cutArea); + } + + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacingEnd() +{ + if (!lefwIsLayerCutSpacing) + return LEFW_BAD_ORDER; // has to be after + // lefwLayerCutSpacing is called + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ;\n"); + } else { + fprintf(lefwFile, " ;\n"); + } + + lefwIsLayerCutSpacing = 0; + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +int +lefwLayerMask(int colorMask) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER && + lefwState != LEFW_LAYERROUTING_START) + return LEFW_BAD_ORDER; + + if (versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(colorMask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MASK %d ;\n", colorMask); + else + fprintf(lefwFile, " MASK %d ;\n", colorMask); + + lefwLines++; + + lefwState = (lefwState == LEFW_LAYERROUTING_START) ? LEFW_LAYERROUTING : LEFW_LAYER; + + return LEFW_OK; +} + +int +lefwLayerWidth(double minWidth) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if ((!lefwIsImplant) && (!lefwIsCut)) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " WIDTH %.11g ;\n", minWidth); + else + fprintf(lefwFile, " WIDTH %.11g ;\n", minWidth); + + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerCutSpacingTableOrtho(int numSpacing, + double *cutWithins, + double *orthoSpacings) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsCut) + return LEFW_BAD_DATA; // only cut calls this func + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; // Layer after maximum stacked-via + if (numSpacing) { + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " SPACINGTABLE ORTHOGONAL"); + lefwLines++; + for (i = 0; i < numSpacing; i++) { + encPrint(lefwFile, (char*) "\n WITHING %.11g SPACING %.11g ", + *cutWithins++, *orthoSpacings++); + lefwLines++; + } + encPrint(lefwFile, (char*) " ;\n"); + } else { + fprintf(lefwFile, " SPACINGTABLE ORTHOGONAL"); + lefwLines++; + for (i = 0; i < numSpacing; i++) { + fprintf(lefwFile, "\n WITHIN %.11g SPACING %.11g", + *cutWithins++, *orthoSpacings++); + lefwLines++; + } + fprintf(lefwFile, " ;\n"); + } + } + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerArraySpacing(int longArray, + double viaWidth, + double cutSpacing, + int numArrayCut, + int *arrayCuts, + double *arraySpacings) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsCut) + return LEFW_BAD_DATA; // only cut calls this func + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; // Layer after maximum stacked-via + if (cutSpacing) { + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ARRAYSPACING "); + if (longArray) + encPrint(lefwFile, (char*) "LONGARRAY "); + if (viaWidth) + encPrint(lefwFile, (char*) "WIDTH %.11g ", viaWidth); + encPrint(lefwFile, (char*) "CUTSPACING %.11g ", cutSpacing); + for (i = 0; i < numArrayCut; i++) { + encPrint(lefwFile, (char*) "ARRAYCUTS %d SPACING %.11g ", + *arrayCuts++, *arraySpacings++); + } + encPrint(lefwFile, (char*) " ;\n"); + } else { + fprintf(lefwFile, " ARRAYSPACING "); + if (longArray) + fprintf(lefwFile, "LONGARRAY "); + if (viaWidth) + fprintf(lefwFile, "WIDTH %.11g ", viaWidth); + fprintf(lefwFile, "CUTSPACING %.11g ", cutSpacing); + for (i = 0; i < numArrayCut; i++) { + fprintf(lefwFile, "ARRAYCUTS %d SPACING %.11g ", + *arrayCuts++, *arraySpacings++); + } + fprintf(lefwFile, " ;\n"); + } + lefwLines++; + } + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +int +lefwLayerEnclosure(const char *location, + double overhang1, + double overhang2, + double width) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsCut) + return LEFW_BAD_DATA; // only cut calls this func + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; // Layer after maximum stacked-via + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ENCLOSURE "); + if (location && (*location != 0)) { + if (strcmp(location, "ABOVE") && strcmp(location, "BELOW")) { + encPrint(lefwFile, (char*) + "ENCLOSURE in Layer(Cut) can only be ABOVE, BELOW.\n"); + return LEFW_BAD_DATA; + } + encPrint(lefwFile, (char*) "%s ", location); + } + encPrint(lefwFile, (char*) "%.11g %.11g ", overhang1, overhang2); + if (width) + encPrint(lefwFile, (char*) "WIDTH %.11g ", width); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ENCLOSURE "); + if (location && (*location != 0)) { + if (strcmp(location, "ABOVE") && strcmp(location, "BELOW")) { + fprintf(lefwFile, + "ENCLOSURE in Layer(Cut) can only be ABOVE, BELOW.\n"); + return LEFW_BAD_DATA; + } + fprintf(lefwFile, "%s ", location); + } + fprintf(lefwFile, "%.11g %.11g ", overhang1, overhang2); + if (width) + fprintf(lefwFile, "WIDTH %.11g ", width); + fprintf(lefwFile, ";\n"); + } + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerEnclosureWidth(const char *location, + double overhang1, + double overhang2, + double width, // optional + double cutWithin) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsCut) + return LEFW_BAD_DATA; // only cut calls this func + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; // Layer after maximum stacked-via + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ENCLOSURE "); + if (location && (*location != 0)) { + if (strcmp(location, "ABOVE") && strcmp(location, "BELOW")) { + encPrint(lefwFile, (char*) + "ENCLOSURE in Layer(Cut) can only be ABOVE, BELOW.\n"); + return LEFW_BAD_DATA; + } + encPrint(lefwFile, (char*) "%s ", location); + } + encPrint(lefwFile, (char*) "%.11g %.11g ", overhang1, overhang2); + if (width) { + encPrint(lefwFile, (char*) "WIDTH %.11g ", width); + if (cutWithin) + encPrint(lefwFile, (char*) "EXCEPTEXTRACUT %.11g ", cutWithin); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ENCLOSURE "); + if (location && (*location != 0)) { + if (strcmp(location, "ABOVE") && strcmp(location, "BELOW")) { + fprintf(lefwFile, + "ENCLOSURE in Layer(Cut) can only be ABOVE, BELOW.\n"); + return LEFW_BAD_DATA; + } + fprintf(lefwFile, "%s ", location); + } + fprintf(lefwFile, "%.11g %.11g ", overhang1, overhang2); + if (width) { + fprintf(lefwFile, "WIDTH %.11g ", width); + if (cutWithin) + fprintf(lefwFile, "EXCEPTEXTRACUT %.11g ", cutWithin); + } + fprintf(lefwFile, ";\n"); + } + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerEnclosureLength(const char *location, + double overhang1, + double overhang2, + double minLength) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsCut) + return LEFW_BAD_DATA; // only cut calls this func + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; // Layer after maximum stacked-via + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ENCLOSURE "); + if (location && (*location != 0)) { + if (strcmp(location, "ABOVE") && strcmp(location, "BELOW")) { + encPrint(lefwFile, (char*) + "ENCLOSURE in Layer(Cut) can only be ABOVE, BELOW.\n"); + return LEFW_BAD_DATA; + } + encPrint(lefwFile, (char*) "%s ", location); + } + encPrint(lefwFile, (char*) "%.11g %.11g ", overhang1, overhang2); + if (minLength) + encPrint(lefwFile, (char*) "LENGTH %.11g ", minLength); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ENCLOSURE "); + if (location && (*location != 0)) { + if (strcmp(location, "ABOVE") && strcmp(location, "BELOW")) { + fprintf(lefwFile, + "ENCLOSURE in Layer(Cut) can only be ABOVE, BELOW.\n"); + return LEFW_BAD_DATA; + } + fprintf(lefwFile, "%s ", location); + } + fprintf(lefwFile, "%.11g %.11g ", overhang1, overhang2); + if (minLength) + fprintf(lefwFile, "LENGTH %.11g ", minLength); + fprintf(lefwFile, ";\n"); + } + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +int +lefwLayerPreferEnclosure(const char *location, + double overhang1, + double overhang2, + double width) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsCut) + return LEFW_BAD_DATA; // only cut calls this func + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; // Layer after maximum stacked-via + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " PREFERENCLOSURE "); + if (location && (*location != 0)) { + if (strcmp(location, "ABOVE") && strcmp(location, "BELOW")) { + encPrint(lefwFile, (char*) + "PREFERENCLOSURE in Layer(Cut) can only be ABOVE, BELOW.\n"); + return LEFW_BAD_DATA; + } + encPrint(lefwFile, (char*) "%s ", location); + } + encPrint(lefwFile, (char*) "%.11g %.11g ", overhang1, overhang2); + if (width) + encPrint(lefwFile, (char*) "WIDTH %.11g ", width); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " PREFERENCLOSURE "); + if (location && (*location != 0)) { + if (strcmp(location, "ABOVE") && strcmp(location, "BELOW")) { + fprintf(lefwFile, + "PREFERENCLOSURE in Layer(Cut) can only be ABOVE, BELOW.\n"); + return LEFW_BAD_DATA; + } + fprintf(lefwFile, "%s ", location); + } + fprintf(lefwFile, "%.11g %.11g ", overhang1, overhang2); + if (width) + fprintf(lefwFile, "WIDTH %.11g ", width); + fprintf(lefwFile, ";\n"); + } + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +int +lefwLayerResistancePerCut(double resistance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsCut) + return LEFW_BAD_DATA; // only cut calls this func + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; // Layer after maximum stacked-via + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RESISTANCEPERCUT %.11g ;\n", resistance); + else + fprintf(lefwFile, " RESISTANCEPERCUT %.11g ;\n", resistance); + lefwLines++; + lefwState = LEFW_LAYER; + return LEFW_OK; +} + +int +lefwEndLayer(const char *layerName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYER_START && + lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", layerName); + else + fprintf(lefwFile, "END %s\n\n", layerName); + + lefwLines++; + lefwState = LEFW_LAYER_END; + lefwIsCut = 0; + lefwIsImplant = 0; + return LEFW_OK; +} + +int +lefwStartLayerRouting(const char *layerName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_LAYERROUTING_START || + lefwState == LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "LAYER %s\n", layerName); + encPrint(lefwFile, (char*) " TYPE ROUTING ;\n"); + } else { + fprintf(lefwFile, "LAYER %s\n", layerName); + fprintf(lefwFile, " TYPE ROUTING ;\n"); + } + lefwIsRouting = 1; + lefwIsRoutingReqData = 0; + lefwLines = lefwLines + 2; + lefwState = LEFW_LAYERROUTING_START; + lefwSynArray[LEFW_LAYERROUTING_START] = 1; + + return LEFW_OK; +} + +int +lefwLayerRouting(const char *direction, + double width) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + // this routine should call only once per layer routing + if (lefwSynArray[LEFW_LAYERROUTING]) + return LEFW_ALREADY_DEFINED; + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) { + if (!direction || direction == 0 || *direction == 0) { + encPrint(lefwFile, (char*) "DIRECTION is required in Layer(Routing).\n"); + return LEFW_BAD_DATA; + } + if (strcmp(direction, "HORIZONTAL") && strcmp(direction, "VERTICAL") && + strcmp(direction, "DIAG45") && strcmp(direction, "DIAG135")) { + encPrint(lefwFile, (char*) + "DIRECTION in Layer(Routing) can only be HORIZONTAL, VERTICAL, DIAG45, DIAG135.\n"); + return LEFW_BAD_DATA; // direction is either HORIZONTAL, VERTICAL, DIAG45, DIAG135 only + } + encPrint(lefwFile, (char*) " DIRECTION %s ;\n", direction); + encPrint(lefwFile, (char*) " WIDTH %.11g ;\n", width); + } else { + if (!direction || direction == 0 || *direction == 0) { + fprintf(lefwFile, "DIRECTION is required in Layer(Routing).\n"); + return LEFW_BAD_DATA; + } + if (strcmp(direction, "HORIZONTAL") && strcmp(direction, "VERTICAL") && + strcmp(direction, "DIAG45") && strcmp(direction, "DIAG135")) { + fprintf(lefwFile, + "DIRECTION in Layer(Routing) can only be HORIZONTAL, VERTICAL, DIAG45, DIAG135.\n"); + return LEFW_BAD_DATA; // direction is either HORIZONTAL, VERTICAL, DIAG45, DIAG135 only + } + fprintf(lefwFile, " DIRECTION %s ;\n", direction); + fprintf(lefwFile, " WIDTH %.11g ;\n", width); + } + + lefwLines += 2; + lefwIsRoutingReqData = 1; + lefwSynArray[LEFW_LAYERROUTING] = 1; + lefwIsRoutingMinCut = 0; + return LEFW_OK; +} + +int +lefwLayerRoutingPitch(double pitch) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + // this routine should call only once per layer routing + // it is required for SE only, other is optional + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " PITCH %.11g ;\n", pitch); + else + fprintf(lefwFile, " PITCH %.11g ;\n", pitch); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingPitchXYDistance(double xDistance, + double yDistance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + // this routine should call only once per layer routing + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " PITCH %.11g %.11g ;\n", + xDistance, yDistance); + else + fprintf(lefwFile, " PITCH %.11g %.11g ;\n", xDistance, yDistance); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingOffset(double offset) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " OFFSET %.11g ;\n", offset); + else + fprintf(lefwFile, " OFFSET %.11g ;\n", offset); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingOffsetXYDistance(double xDistance, + double yDistance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " OFFSET %.11g %.11g ;\n", + xDistance, yDistance); + else + fprintf(lefwFile, " OFFSET %.11g %.11g ;\n", xDistance, yDistance); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingDiagPitch(double distance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DIAGPITCH %.11g ;\n", distance); + else + fprintf(lefwFile, " DIAGPITCH %.11g ;\n", distance); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingDiagPitchXYDistance(double xDistance, + double yDistance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DIAGPITCH %.11g %.11g ;\n", + xDistance, yDistance); + else + fprintf(lefwFile, " DIAGPITCH %.11g %.11g ;\n", xDistance, yDistance); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingDiagWidth(double diagWidth) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + // this routine should call only once per layer routing + // it is required for SE only, other is optional + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DIAGWIDTH %.11g ;\n", diagWidth); + else + fprintf(lefwFile, " DIAGWIDTH %.11g ;\n", diagWidth); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingDiagSpacing(double diagSpacing) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + // this routine should call only once per layer routing + // it is required for SE only, other is optional + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DIAGSPACING %.11g ;\n", diagSpacing); + else + fprintf(lefwFile, " DIAGSPACING %.11g ;\n", diagSpacing); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingDiagMinEdgeLength(double diagLength) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + // this routine should call only once per layer routing + // it is required for SE only, other is optional + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DIAGMINEDGELENGTH %.11g ;\n", diagLength); + else + fprintf(lefwFile, " DIAGMINEDGELENGTH %.11g ;\n", diagLength); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingArea(double area) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " AREA %.11g ;\n", area); + else + fprintf(lefwFile, " AREA %.11g ;\n", area); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingMinsize(int numRect, + double *minWidth, + double *minLength) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " MINSIZE "); + for (i = 0; i < numRect; i++) + encPrint(lefwFile, (char*) "%.11g %.11g ", minWidth[i], minLength[i]); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " MINSIZE "); + for (i = 0; i < numRect; i++) + fprintf(lefwFile, "%.11g %.11g ", minWidth[i], minLength[i]); + fprintf(lefwFile, ";\n"); + } + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingMinimumcut(double numCuts, + double minWidth) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINIMUMCUT %.11g WIDTH %.11g ", numCuts, + minWidth); + else + fprintf(lefwFile, " MINIMUMCUT %.11g WIDTH %.11g ", numCuts, minWidth); + lefwLines++; + prtSemiColon = 1; + lefwIsRoutingMinCut = 1; + lefwIsRoutingMinCutDist = 0; + lefwIsRoutingMinCutLen = 0; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerRoutingMinimumcutWithin(double numCuts, + double minWidth, + double cutDistance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINIMUMCUT %.11g WIDTH %.11g WITHIN %.11g ", + numCuts, minWidth, cutDistance); + else + fprintf(lefwFile, " MINIMUMCUT %.11g WIDTH %.11g WITHIN %.11g ", + numCuts, minWidth, cutDistance); + lefwLines++; + prtSemiColon = 1; + lefwIsRoutingMinCut = 1; + lefwIsRoutingMinCutDist = 0; + lefwIsRoutingMinCutLen = 0; + return LEFW_OK; +} + +int +lefwLayerRoutingMinimumcutConnections(const char *direction) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwIsRoutingMinCut || lefwIsRoutingMinCutDist) + return LEFW_BAD_ORDER; + // lefwLayerRoutingMinimumcut has not being called or + // lefwLayerRoutingMinimumcutConnections has already called + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n %s ", direction); + else + fprintf(lefwFile, "\n %s ", direction); + lefwLines++; + prtSemiColon = 1; + lefwIsRoutingMinCutDist = 1; + if (lefwIsRoutingMinCutLen) // both distance & length within has defined + lefwIsRoutingMinCut = 0; + return LEFW_OK; +} + +int +lefwLayerRoutingMinimumcutLengthWithin(double length, + double distance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwIsRoutingMinCut || lefwIsRoutingMinCutLen) + return LEFW_BAD_ORDER; + // lefwLayerRoutingMinimumcut has not being called or + // lefwLayerRoutingMinimumcutLengthWithin has already called + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n LENGTH %.11g WITHIN %.11g ", + length, distance); + else + fprintf(lefwFile, "\n LEGNTH %.11g WITHIN %.11g ", length, distance); + lefwLines++; + prtSemiColon = 1; + lefwIsRoutingMinCutLen = 1; + if (lefwIsRoutingMinCutDist) // both distance & length within has defined + lefwIsRoutingMinCut = 0; + return LEFW_OK; +} + +int +lefwLayerRoutingSpacing(double spacing) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " SPACING %.11g ", spacing); + else + fprintf(lefwFile, " SPACING %.11g ", spacing); + lefwLines++; + lefwHasLayerRoutingRange = 0; // initialization + lefwHasLayerRoutingSpacing = 1; // initialization + lefwHasLayerRoutingEol = 0; // initialization + prtNewLine = 1; + prtSemiColon = 1; + return LEFW_OK; +} + +int +lefwLayerRoutingSpacingRange(double leftRange, + double rightRange) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (!lefwHasLayerRoutingSpacing) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "RANGE %.11g %.11g ", leftRange, rightRange); + else + fprintf(lefwFile, "RANGE %.11g %.11g ", leftRange, rightRange); + lefwHasLayerRoutingRange = 1; // initialization + lefwLines++; + prtNewLine = 1; + prtSemiColon = 1; + return LEFW_OK; +} + +int +lefwLayerRoutingSpacingRangeUseLengthThreshold() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (!lefwHasLayerRoutingRange) { + // This routine can be called only if range are non zero + fprintf(lefwFile, + "ERROR (LEFWRIT-4003): lefwLayerRoutingSpacingUseLengthThreshold cannot be called if\n"); + fprintf(lefwFile, + " lefwLayerRoutingSpacingRange has not been called.\n"); + return LEFW_BAD_DATA; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n USELENGTHTHRESHOLD "); + else + fprintf(lefwFile, "\n USELENGTHTHRESHOLD "); + prtSemiColon = 1; + prtNewLine = 1; + lefwHasLayerRoutingRange = 0; // reset to 0 + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingSpacingRangeInfluence(double infValue, + double subMinWidth, + double subMaxWidth) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (!lefwHasLayerRoutingRange) { + // This routine can be called only if range are non zero + fprintf(lefwFile, + "ERROR (LEFWRIT-4004): lefwLayerRoutingSpacingInfluence cannot be called if\n"); + fprintf(lefwFile, + " lefRange and rightRange in lefwLayerRoutingSpacing are both zero.\n"); + return LEFW_BAD_DATA; + } + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "\n INFLUENCE %.11g ", infValue); + if (subMinWidth || subMaxWidth) + encPrint(lefwFile, (char*) "RANGE %.11g %.11g ", + subMinWidth, subMaxWidth); + } else { + fprintf(lefwFile, "\n INFLUENCE %.11g ", infValue); + if (subMinWidth || subMaxWidth) + fprintf(lefwFile, (char*) "RANGE %.11g %.11g ", + subMinWidth, subMaxWidth); + } + prtNewLine = 1; + prtSemiColon = 1; + lefwHasLayerRoutingRange = 0; // reset to 0 + return LEFW_OK; +} + +int +lefwLayerRoutingSpacingRangeRange(double minWidth, + double maxWidth) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (!lefwHasLayerRoutingRange) { + // This routine can be called only if range are non zero + fprintf(lefwFile, + "ERROR (LEFWRIT-4005): lefwLayerRoutingSpacingInfluence cannot be called if\n"); + fprintf(lefwFile, + " lefRange and rightRange in lefwLayerRoutingSpacing are both zero.\n"); + return LEFW_BAD_DATA; + } + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "RANGE %.11g %.11g ", minWidth, maxWidth); + } else { + fprintf(lefwFile, (char*) "RANGE %.11g %.11g ", minWidth, maxWidth); + } + prtNewLine = 1; + prtSemiColon = 1; + lefwHasLayerRoutingRange = 0; // reset to 0 + return LEFW_OK; +} + +int +lefwLayerRoutingSpacingLengthThreshold(double lengthValue, + double minWidth, + double maxWidth) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (!lefwHasLayerRoutingSpacing) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " LENGTHTHRESHOLD %.11g ", lengthValue); + if (minWidth || maxWidth) { + encPrint(lefwFile, (char*) "RANGE %.11g %.11g ", minWidth, maxWidth); + } + } else { + fprintf(lefwFile, " LENGTHTHRESHOLD %.11g ", lengthValue); + if (minWidth || maxWidth) { + fprintf(lefwFile, "RANGE %.11g %.11g ", minWidth, maxWidth); + } + } + prtSemiColon = 1; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerRoutingSpacingSameNet(int PGOnly) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (!lefwHasLayerRoutingSpacing) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + if (PGOnly) + encPrint(lefwFile, (char*) " SAMENET PGONLY "); + else + encPrint(lefwFile, (char*) " SAMENET "); + } else { + if (PGOnly) + fprintf(lefwFile, " SAMENET PGONLY "); + else + fprintf(lefwFile, " SAMENET "); + } + prtSemiColon = 1; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerRoutingSpacingEndOfLine(double eolWidth, + double eolWithin) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (lefwHasLayerRoutingEol) + return LEFW_BAD_DATA;// already defined in Spacing + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ENDOFLINE %.11g WITHIN %.11g ", eolWidth, + eolWithin); + else + fprintf(lefwFile, " ENDOFLINE %.11g WITHIN %.11g ", eolWidth, + eolWithin); + lefwLines++; + lefwHasLayerRoutingEol = 1; + prtSemiColon = 1; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerRoutingSpacingEOLParallel(double parSpace, + double parWithin, + int twoEdges) +{ + if (!lefwHasLayerRoutingEol) + return LEFW_BAD_DATA;// EndOfLine in not defined + if (lefwWriteEncrypt) { + if (twoEdges) + encPrint(lefwFile, (char*) "PARALLELEDGE %.11g WITHIN %.11g TWOEDGES ;\n", + parSpace, parWithin); + else + encPrint(lefwFile, (char*) "PARALLELEDGE %.11g WITHIN %.11g ;\n", + parSpace, parWithin); + } else { + if (twoEdges) + fprintf(lefwFile, "PARALLELEDGE %.11g WITHIN %.11g TWOEDGES ;\n", + parSpace, parWithin); + else + fprintf(lefwFile, "PARALLELEDGE %.11g WITHIN %.11g ;\n", + parSpace, parWithin); + } + lefwLines++; + lefwHasLayerRoutingEol = 0; + prtSemiColon = 0; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerRoutingSpacingNotchLength(double minNLength) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " NOTCHLENGTH %.11g ;\n", minNLength); + else + fprintf(lefwFile, " NOTCHLENGTH %.11g ;\n", minNLength); + lefwLines++; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerRoutingSpacingEndOfNotchWidth(double eonWidth, + double minNSpacing, + double minNLength) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ENDOFNOTCHWIDTH %.11g NOTCHSPACING %.11g NOTCHLENGTH %.11g ;\n", + eonWidth, minNSpacing, minNLength); + else + fprintf(lefwFile, " ENDOFNOTCHWIDTH %.11g NOTCHSPACING %.11g NOTCHLENGTH %.11g ;\n", + eonWidth, minNSpacing, minNLength); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingWireExtension(double wireExtension) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " WIREEXTENSION %.11g ;\n", wireExtension); + else + fprintf(lefwFile, " WIREEXTENSION %.11g ;\n", wireExtension); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingResistance(const char *resistance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (!resistance || resistance == 0 || *resistance == 0) + return LEFW_BAD_DATA; + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RESISTANCE RPERSQ %s ;\n", resistance); + else + fprintf(lefwFile, " RESISTANCE RPERSQ %s ;\n", resistance); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingCapacitance(const char *capacitance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (!capacitance || capacitance == 0 || *capacitance == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " CAPACITANCE CPERSQDIST %s ;\n", capacitance); + else + fprintf(lefwFile, " CAPACITANCE CPERSQDIST %s ;\n", capacitance); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingHeight(double height) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " HEIGHT %.11g ;\n", height); + else + fprintf(lefwFile, " HEIGHT %.11g ;\n", height); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingThickness(double thickness) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " THICKNESS %.11g ;\n", thickness); + else + fprintf(lefwFile, " THICKNESS %.11g ;\n", thickness); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingShrinkage(double shrinkage) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " SHRINKAGE %.11g ;\n", shrinkage); + else + fprintf(lefwFile, " SHRINKAGE %.11g ;\n", shrinkage); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingCapMultiplier(double capMultiplier) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " CAPMULTIPLIER %.11g ;\n", capMultiplier); + else + fprintf(lefwFile, " CAPMULTIPLIER %.11g ;\n", capMultiplier); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingEdgeCap(double edgeCap) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " EDGECAPACITANCE %.11g ;\n", edgeCap); + else + fprintf(lefwFile, " EDGECAPACITANCE %.11g ;\n", edgeCap); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingAntennaArea(double antennaArea) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNAAREAFACTOR %.11g ;\n", antennaArea); + else + fprintf(lefwFile, " ANTENNAAREAFACTOR %.11g ;\n", antennaArea); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingAntennaLength(double antennaLength) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNALENGTHFACTOR %.11g ;\n", + antennaLength); + else + fprintf(lefwFile, " ANTENNALENGTHFACTOR %.11g ;\n", antennaLength); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingMaxwidth(double width) +{ + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MAXWIDTH %.11g ;\n", width); + else + fprintf(lefwFile, " MAXWIDTH %.11g ;\n", width); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingMinwidth(double width) +{ + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINWIDTH %.11g ;\n", width); + else + fprintf(lefwFile, " MINWIDTH %.11g ;\n", width); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingMinenclosedarea(int numMinenclosed, + double *area, + double *width) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) { + for (i = 0; i < numMinenclosed; i++) { + encPrint(lefwFile, (char*) " MINENCLOSEDAREA %.11g ", area[i]); + if (width[i] != 0) + encPrint(lefwFile, (char*) "WIDTH %.11g ", width[i]); + encPrint(lefwFile, (char*) ";\n"); + } + } else { + for (i = 0; i < numMinenclosed; i++) { + fprintf(lefwFile, " MINENCLOSEDAREA %.11g ", area[i]); + if (width[i] != 0) + fprintf(lefwFile, "WIDTH %.11g ", width[i]); + fprintf(lefwFile, ";\n"); + } + } + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingMinstep(double distance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINSTEP %.11g ;\n", distance); + else + fprintf(lefwFile, " MINSTEP %.11g ;\n", distance); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingMinstepWithOptions(double distance, + const char *rule, + double maxLength) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINSTEP %.11g ", distance); + else + fprintf(lefwFile, " MINSTEP %.11g ", distance); + if (rule && ((strcmp(rule, "INSIDECORNER") == 0) || + (strcmp(rule, "OUTSIDECORNER") == 0) || (strcmp(rule, "STEP") == 0))) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "%s ", rule); + else + fprintf(lefwFile, "%s ", rule); + } + if (maxLength) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "LENGTHSUM %.11g ", maxLength); + else + fprintf(lefwFile, "LENGTHSUM %.11g ", maxLength); + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + lefwLines++; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerRoutingMinstepMaxEdges(double distance, + double maxEdges) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINSTEP %.11g MAXEDGES %.11g ;\n", distance, + maxEdges); + else + fprintf(lefwFile, " MINSTEP %.11g MAXEDGES %.11g ;\n", distance, + maxEdges); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingProtrusion(double width1, + double length, + double width2) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRouting) + return LEFW_BAD_DATA; // only routing calls this func + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " PROTRUSIONWIDTH %.11g LENGTH %.11g WIDTH %.11g ;\n", + width1, length, width2); + else + fprintf(lefwFile, " PROTRUSIONWIDTH %.11g LENGTH %.11g WIDTH %.11g ;\n", + width1, length, width2); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingStartSpacingtableParallel(int numLength, + double *length) +{ + int i; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRoutingReqData) { + return LEFW_BAD_ORDER; + } + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " SPACINGTABLE\n"); + encPrint(lefwFile, (char*) " PARALLELRUNLENGTH"); + for (i = 0; i < numLength; i++) + encPrint(lefwFile, (char*) " %.11g", length[i]); + } else { + fprintf(lefwFile, " SPACINGTABLE\n"); + fprintf(lefwFile, " PARALLELRUNLENGTH"); + for (i = 0; i < numLength; i++) + fprintf(lefwFile, " %.11g", length[i]); + } + lefwState = LEFW_LAYERROUTING_SP_START; + lefwLines += 2; + return LEFW_OK; +} + +int +lefwLayerRoutingSpacingtableParallelWidth(double width, + int numSpacing, + double *spacing) +{ + int i; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_SP_START && + lefwState != LEFW_LAYERROUTINGWIDTH) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "\n WIDTH %.11g", width); + for (i = 0; i < numSpacing; i++) + encPrint(lefwFile, (char*) " %.11g", spacing[i]); + } else { + fprintf(lefwFile, "\n WIDTH %.11g", width); + for (i = 0; i < numSpacing; i++) + fprintf(lefwFile, " %.11g", spacing[i]); + } + lefwState = LEFW_LAYERROUTINGWIDTH; + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingStartSpacingtableInfluence() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRoutingReqData) { + return LEFW_BAD_ORDER; + } + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " SPACINGTABLE\n"); + encPrint(lefwFile, (char*) " INFLUENCE"); + } else { + fprintf(lefwFile, " SPACINGTABLE\n"); + fprintf(lefwFile, " INFLUENCE"); + } + lefwState = LEFW_LAYERROUTINGWIDTH; + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingSpacingInfluenceWidth(double width, + double distance, + double spacing) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTINGWIDTH) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, + (char*) "\n WIDTH %.11g WITHIN %.11%.11gSPACING %.11g", + width, distance, spacing); + else + fprintf(lefwFile, "\n WIDTH %.11g WITHIN %.11g SPACING %.11g", width, + distance, spacing); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingStartSpacingtableTwoWidths() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRoutingReqData) { + return LEFW_BAD_ORDER; + } + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " SPACINGTABLE\n"); + encPrint(lefwFile, (char*) " TWOWIDTHS"); + } else { + fprintf(lefwFile, " SPACINGTABLE\n"); + fprintf(lefwFile, " TWOWIDTHS"); + } + lefwState = LEFW_LAYERROUTINGWIDTH; + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutingSpacingtableTwoWidthsWidth(double width, + double runLength, + int numSpacing, + double *spacing) +{ + int i; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_SP_START && + lefwState != LEFW_LAYERROUTINGWIDTH) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "\n WIDTH %.11g", width); + if (runLength) + encPrint(lefwFile, (char*) " PRL %.11g", runLength); + for (i = 0; i < numSpacing; i++) + encPrint(lefwFile, (char*) " %.11g", spacing[i]); + } else { + fprintf(lefwFile, "\n WIDTH %.11g", width); + if (runLength) + fprintf(lefwFile, " PRL %.11g", runLength); + for (i = 0; i < numSpacing; i++) + fprintf(lefwFile, " %.11g", spacing[i]); + } + lefwState = LEFW_LAYERROUTINGWIDTH; + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerRoutineEndSpacingtable() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTINGWIDTH) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ;\n"); + else + fprintf(lefwFile, " ;\n"); + + lefwLines++; + lefwState = LEFW_LAYERROUTING; + return LEFW_OK; +} + +int +lefwEndLayerRouting(const char *layerName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && + lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + if (!lefwIsRoutingReqData) { + return LEFW_BAD_ORDER; + } + if (prtSemiColon) { + // the previous statement hasn't written the ; yet + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\n"); + else + fprintf(lefwFile, ";\n"); + prtSemiColon = 0; + } + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", layerName); + else + fprintf(lefwFile, "END %s\n\n", layerName); + + lefwLines++; + lefwSynArray[LEFW_LAYERROUTING] = 0; + lefwState = LEFW_LAYERROUTING_END; + lefwIsRouting = 0; + return LEFW_OK; +} + +int +lefwLayerACCurrentDensity(const char *type, + double value) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (strcmp(type, "PEAK") && strcmp(type, "AVERAGE") && strcmp(type, "RMS")) + return LEFW_BAD_DATA; // type is PEAK, AVERAGE & RMS only + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ACCURRENTDENSITY %s", type); + lefwLines++; + lefwTableLen = 5; + if (value) + encPrint(lefwFile, (char*) " %.11g ;\n", value); + // that's it for accurrentdensity + else { + encPrint(lefwFile, (char*) "\n"); + // expect to have frequency & tableentries + lefwOldState = lefwState; // save the previous state + lefwState = LEFW_LAYERACCURRENT; + } + } else { + fprintf(lefwFile, " ACCURRENTDENSITY %s", type); + lefwLines++; + lefwTableLen = 5; + if (value) + fprintf(lefwFile, " %.11g ;\n", value); // that's it for accurrentdensity + else { + fprintf(lefwFile, "\n"); // expect to have frequency & tableentries + lefwOldState = lefwState; // save the previous state + lefwState = LEFW_LAYERACCURRENT; + } + } + return LEFW_OK; +} + +int +lefwLayerACFrequency(int numFrequency, + double *frequency) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERACCURRENT) + return LEFW_BAD_ORDER; + + if (numFrequency <= 0) + return LEFW_BAD_DATA; // frequency are required + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " FREQUENCY "); + for (i = 0; i < numFrequency; i++) { + encPrint(lefwFile, (char*) "%.11g ", *frequency++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " FREQUENCY "); + for (i = 0; i < numFrequency; i++) { + fprintf(lefwFile, "%.11g ", *frequency++); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerACWidth(int numWidths, + double *widths) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERACCURRENT) + return LEFW_BAD_ORDER; + + if (numWidths <= 0) + return LEFW_OK; // width is optional + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " WIDTH "); + for (i = 0; i < numWidths; i++) { + encPrint(lefwFile, (char*) "%.11g ", *widths++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " WIDTH "); + for (i = 0; i < numWidths; i++) { + fprintf(lefwFile, "%.11g ", *widths++); + } + fprintf(lefwFile, ";\n"); + } + + lefwTableLen = numWidths; + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerACCutarea(int numCutareas, + double *cutareas) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERACCURRENT) + return LEFW_BAD_ORDER; + + if (numCutareas <= 0) + return LEFW_OK; // cutarea is optional + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " CUTAREA "); + for (i = 0; i < numCutareas; i++) { + encPrint(lefwFile, (char*) "%.11g ", *cutareas++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " CUTAREA "); + for (i = 0; i < numCutareas; i++) { + fprintf(lefwFile, "%.11g ", *cutareas++); + } + fprintf(lefwFile, ";\n"); + } + + lefwTableLen = numCutareas; + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerACTableEntries(int numEntries, + double *entries) +{ + int i; + int j = 0; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERACCURRENT) + return LEFW_BAD_ORDER; + + if (numEntries <= 0) + return LEFW_BAD_DATA; // tableEntries are required + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " TABLEENTRIES\n "); + for (i = 0; i < numEntries; i++) { + if (++j > lefwTableLen) { + encPrint(lefwFile, (char*) "\n "); + j = 1; + } + encPrint(lefwFile, (char*) "%.11g ", *entries++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " TABLEENTRIES\n "); + for (i = 0; i < numEntries; i++) { + if (++j > lefwTableLen) { + fprintf(lefwFile, "\n "); + j = 1; + } + fprintf(lefwFile, "%.11g ", *entries++); + } + fprintf(lefwFile, ";\n"); + } + + lefwState = lefwOldState; // restore the previous state + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerDCCurrentDensity(const char *type, + double value) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (strcmp(type, "AVERAGE")) + return LEFW_BAD_DATA; // type is AVERAGE + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " DCCURRENTDENSITY %s", type); + lefwLines++; + lefwTableLen = 5; + if (value) + encPrint(lefwFile, (char*) " %.11g ;\n", value); + // that's it for accurrentdensity + else { + encPrint(lefwFile, (char*) "\n"); + // expect to have frequency & tableentries + lefwOldState = lefwState; // save the previous state + lefwState = LEFW_LAYERDCCURRENT; + } + } else { + fprintf(lefwFile, " DCCURRENTDENSITY %s", type); + lefwLines++; + lefwTableLen = 5; + if (value) + fprintf(lefwFile, " %.11g ;\n", value); // that's it for accurrentdensity + else { + fprintf(lefwFile, "\n"); // expect to have frequency & tableentries + lefwOldState = lefwState; // save the previous state + lefwState = LEFW_LAYERDCCURRENT; + } + } + return LEFW_OK; +} + +int +lefwLayerDCWidth(int numWidths, + double *widths) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERDCCURRENT) + return LEFW_BAD_ORDER; + + // width is allowed in Layer routing only + if (lefwOldState != LEFW_LAYER_START && lefwOldState != LEFW_LAYER && + lefwOldState != LEFW_LAYERROUTING_START && + lefwOldState != LEFW_LAYERROUTING) + return LEFW_BAD_DATA; + + if (numWidths <= 0) + return LEFW_BAD_DATA; // width is required + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " WIDTH "); + for (i = 0; i < numWidths; i++) { + encPrint(lefwFile, (char*) "%.11g ", *widths++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " WIDTH "); + for (i = 0; i < numWidths; i++) { + fprintf(lefwFile, "%.11g ", *widths++); + } + fprintf(lefwFile, ";\n"); + } + + lefwTableLen = numWidths; + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerDCCutarea(int numCutareas, + double *cutareas) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERDCCURRENT) + return LEFW_BAD_ORDER; + + // cutarea is allowed in Layer non-routing only + if (lefwOldState != LEFW_LAYER_START && lefwOldState != LEFW_LAYER && + lefwOldState != LEFW_LAYERROUTING_START && + lefwOldState != LEFW_LAYERROUTING) + return LEFW_BAD_DATA; + + if (numCutareas <= 0) + return LEFW_BAD_DATA; // cutarea is required + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " CUTAREA "); + for (i = 0; i < numCutareas; i++) { + encPrint(lefwFile, (char*) "%.11g ", *cutareas++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " CUTAREA "); + for (i = 0; i < numCutareas; i++) { + fprintf(lefwFile, "%.11g ", *cutareas++); + } + fprintf(lefwFile, ";\n"); + } + + lefwTableLen = numCutareas; + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerDCTableEntries(int numEntries, + double *entries) +{ + int i; + int j = 0; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERDCCURRENT) + return LEFW_BAD_ORDER; + + if (numEntries <= 0) + return LEFW_BAD_DATA; // tableEntries are required + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " TABLEENTRIES\n "); + for (i = 0; i < numEntries; i++) { + if (++j > lefwTableLen) { + encPrint(lefwFile, (char*) "\n "); + j = 1; + } + encPrint(lefwFile, (char*) "%.11g ", *entries++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " TABLEENTRIES\n "); + for (i = 0; i < numEntries; i++) { + if (++j > lefwTableLen) { + fprintf(lefwFile, "\n "); + j = 1; + } + fprintf(lefwFile, "%.11g ", *entries++); + } + fprintf(lefwFile, ";\n"); + } + + lefwState = lefwOldState; // restore the previous state + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaModel(const char *oxide) +{ + lefw54Num = LEFW_ANTENNAMODEL; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNAMODEL %s ;\n", oxide); + else + fprintf(lefwFile, " ANTENNAMODEL %s ;\n", oxide); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaAreaRatio(double value) +{ + lefw54Num = LEFW_ANTENNAAREARATIO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNAAREARATIO %.11g ;\n", value); + else + fprintf(lefwFile, " ANTENNAAREARATIO %.11g ;\n", value); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaDiffAreaRatio(double value) +{ + lefw54Num = LEFW_ANTENNADIFFAREARATIO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNADIFFAREARATIO %.11g ;\n", value); + else + fprintf(lefwFile, " ANTENNADIFFAREARATIO %.11g ;\n", value); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaDiffAreaRatioPwl(int numPwls, + double *diffusions, + double *ratios) +{ + int i; + + lefw54Num = LEFW_ANTENNADIFFAREARATIOPWL; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNADIFFAREARATIO PWL ( "); + for (i = 0; i < numPwls; i++) + encPrint(lefwFile, (char*) "( %.11g %.11g ) ", *diffusions++, *ratios++); + encPrint(lefwFile, (char*) ") ;\n"); + } else { + fprintf(lefwFile, " ANTENNADIFFAREARATIO PWL ( "); + for (i = 0; i < numPwls; i++) + fprintf(lefwFile, "( %.11g %.11g ) ", *diffusions++, *ratios++); + fprintf(lefwFile, ") ;\n"); + } + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaCumAreaRatio(double value) +{ + lefw54Num = LEFW_ANTENNACUMAREARATIO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNACUMAREARATIO %.11g ;\n", value); + else + fprintf(lefwFile, " ANTENNACUMAREARATIO %.11g ;\n", value); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaCumDiffAreaRatio(double value) +{ + lefw54Num = LEFW_ANTENNACUMDIFFAREARATIO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNACUMDIFFAREARATIO %.11g ;\n", value); + else + fprintf(lefwFile, " ANTENNACUMDIFFAREARATIO %.11g ;\n", value); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaCumDiffAreaRatioPwl(int numPwls, + double *diffusions, + double *ratios) +{ + int i; + + lefw54Num = LEFW_ANTENNACUMDIFFAREARATIOPWL; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNACUMDIFFAREARATIO PWL ( "); + for (i = 0; i < numPwls; i++) + encPrint(lefwFile, (char*) "( %.11g %.11g ) ", *diffusions++, *ratios++); + encPrint(lefwFile, (char*) ") ;\n"); + } else { + fprintf(lefwFile, " ANTENNACUMDIFFAREARATIO PWL ( "); + for (i = 0; i < numPwls; i++) + fprintf(lefwFile, "( %.11g %.11g ) ", *diffusions++, *ratios++); + fprintf(lefwFile, ") ;\n"); + } + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaAreaFactor(double value, + const char *diffUseOnly) +{ + lefw54Num = LEFW_ANTENNAAREAFACTOR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + if ((versionNum < 5.4) && + (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0)) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAAREAFACTOR %.11g ", value); + if (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0) + encPrint(lefwFile, (char*) " DIFFUSEONLY "); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAAREAFACTOR %.11g ", value); + if (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0) + fprintf(lefwFile, "DIFFUSEONLY "); + fprintf(lefwFile, ";\n"); + } + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaSideAreaRatio(double value) +{ + lefw54Num = LEFW_ANTENNASIDEAREARATIO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + // only routing calls this func + if (!lefwIsRouting) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNASIDEAREARATIO %.11g ;\n", value); + else + fprintf(lefwFile, " ANTENNASIDEAREARATIO %.11g ;\n", value); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaDiffSideAreaRatio(double value) +{ + lefw54Num = LEFW_ANTENNADIFFSIDEAREARATIO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + // only routing calls this func + if (!lefwIsRouting) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNADIFFSIDEAREARATIO %.11g ;\n", value); + else + fprintf(lefwFile, " ANTENNADIFFSIDEAREARATIO %.11g ;\n", value); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaDiffSideAreaRatioPwl(int numPwls, + double *diffusions, + double *ratios) +{ + int i; + + lefw54Num = LEFW_ANTENNADIFFSIDEAREARATIOPWL; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNADIFFSIDEAREARATIO PWL ( "); + for (i = 0; i < numPwls; i++) + encPrint(lefwFile, (char*) "( %.11g %.11g ) ", *diffusions++, *ratios++); + encPrint(lefwFile, (char*) ") ;\n"); + } else { + fprintf(lefwFile, " ANTENNADIFFSIDEAREARATIO PWL ( "); + for (i = 0; i < numPwls; i++) + fprintf(lefwFile, "( %.11g %.11g ) ", *diffusions++, *ratios++); + fprintf(lefwFile, ") ;\n"); + } + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaCumSideAreaRatio(double value) +{ + lefw54Num = LEFW_ANTENNACUMSIDEAREARATIO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + // only routing calls this func + if (!lefwIsRouting) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNACUMSIDEAREARATIO %.11g ;\n", value); + else + fprintf(lefwFile, " ANTENNACUMSIDEAREARATIO %.11g ;\n", value); + lefwLines++; + return LEFW_OK; +} + +// 11/25/2002 - bug fix: submitted by Craig Files (cfiles@ftc.agilent.com) +// Renamed from lefwLayerAntennaCumSideDiffAreaRatio to match +// the header +int +lefwLayerAntennaCumDiffSideAreaRatio(double value) +{ + lefw54Num = LEFW_ANTENNACUMDIFFSIDEAREARATIO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + // only routing calls this func + if (!lefwIsRouting) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNACUMDIFFSIDEAREARATIO %.11g ;\n", value); + else + fprintf(lefwFile, " ANTENNACUMDIFFSIDEAREARATIO %.11g ;\n", value); + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaCumDiffSideAreaRatioPwl(int numPwls, + double *diffusions, + double *ratios) +{ + int i; + + lefw54Num = LEFW_ANTENNACUMDIFFSIDEAREARATIOPWL; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + // only routing or cut calls this func + if (!lefwIsRouting) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNACUMDIFFSIDEAREARATIO PWL ( "); + for (i = 0; i < numPwls; i++) + encPrint(lefwFile, (char*) "( %.11g %.11g ) ", *diffusions++, *ratios++); + encPrint(lefwFile, (char*) ") ;\n"); + } else { + fprintf(lefwFile, " ANTENNACUMDIFFSIDEAREARATIO PWL ( "); + for (i = 0; i < numPwls; i++) + fprintf(lefwFile, "( %.11g %.11g ) ", *diffusions++, *ratios++); + fprintf(lefwFile, ") ;\n"); + } + lefwLines++; + return LEFW_OK; +} + +int +lefwLayerAntennaSideAreaFactor(double value, + const char *diffUseOnly) +{ + lefw54Num = LEFW_ANTENNASIDEAREAFACTOR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING) + return LEFW_BAD_ORDER; + // only routing calls this func + if (!lefwIsRouting) + return LEFW_BAD_DATA; + if ((versionNum < 5.4) && + (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0)) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNASIDEAREAFACTOR %.11g ", value); + if (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0) + encPrint(lefwFile, (char*) " DIFFUSEONLY "); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNASIDEAREAFACTOR %.11g ", value); + if (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0) + fprintf(lefwFile, "DIFFUSEONLY "); + fprintf(lefwFile, ";\n"); + } + lefwLines++; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerAntennaCumRoutingPlusCut() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING && + lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + /* WANDA + if ((versionNum < 5.4) && + (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0)) + return LEFW_WRONG_VERSION; + */ + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNACUMROUTINGPLUSCUT ;\n"); + else { + fprintf(lefwFile, " ANTENNACUMROUTINGPLUSCUT ;\n"); + } + lefwLines++; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerAntennaGatePlusDiff(double plusDiffFactor) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING && + lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + /* WANDA + if ((versionNum < 5.4) && + (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0)) + return LEFW_WRONG_VERSION; + */ + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNAGATEPLUSDIFF %.11g ;\n", + plusDiffFactor); + else { + fprintf(lefwFile, " ANTENNAGATEPLUSDIFF %.11g ;\n", plusDiffFactor); + } + lefwLines++; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerAntennaAreaMinusDiff(double minusDiffFactor) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING && + lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + /* WANDA + if ((versionNum < 5.4) && + (diffUseOnly && strcmp(diffUseOnly, "DIFFUSEONLY") == 0)) + return LEFW_WRONG_VERSION; + */ + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ANTENNAAREAMINUSDIFF %.11g ;\n", + minusDiffFactor); + else { + fprintf(lefwFile, " ANTENNAAREAMINUSDIFF %.11g ;\n", minusDiffFactor); + } + lefwLines++; + return LEFW_OK; +} + +// 5.7 +int +lefwLayerAntennaAreaDiffReducePwl(int numPwls, + double *diffAreas, + double *metalDiffFactors) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_LAYERROUTING_START && lefwState != LEFW_LAYERROUTING + && lefwState != LEFW_LAYER_START && lefwState != LEFW_LAYER) + return LEFW_BAD_ORDER; + if (!lefwIsRouting && !lefwIsCut) + return LEFW_BAD_DATA; + /* WANDA + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + */ + if (numPwls < 2) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAAREADIFFREDUCEPWL ( "); + for (i = 0; i < numPwls; i++) + encPrint(lefwFile, (char*) "( %.11g %.11g ) ", *diffAreas++, + *metalDiffFactors++); + encPrint(lefwFile, (char*) ") ;\n"); + } else { + fprintf(lefwFile, " ANTENNAAREADIFFREDUCEPWL ( "); + for (i = 0; i < numPwls; i++) + fprintf(lefwFile, "( %.11g %.11g ) ", *diffAreas++, + *metalDiffFactors++); + fprintf(lefwFile, ") ;\n"); + } + lefwLines++; + return LEFW_OK; +} + +int +lefwMinimumDensity(double minDensity) +{ + lefw54Num = LEFW_MINIMUMDENSITY; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINIMUMDENSITY %.11g ;\n", minDensity); + else + fprintf(lefwFile, " MINIMUMDENSITY %.11g ;\n", minDensity); + lefwLines++; + return LEFW_OK; +} + +int +lefwMaximumDensity(double maxDensity) +{ + lefw54Num = LEFW_MAXIMUMDENSITY; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MAXIMUMDENSITY %.11g ;\n", maxDensity); + else + fprintf(lefwFile, " MAXIMUMDENSITY %.11g ;\n", maxDensity); + lefwLines++; + return LEFW_OK; +} + +int +lefwDensityCheckWindow(double checkWindowLength, + double checkWindowWidth) +{ + lefw54Num = LEFW_DENSITYCHECKWINDOW; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DENSITYCHECKWINDOW %.11g %.11g ;\n", + checkWindowLength, checkWindowWidth); + else + fprintf(lefwFile, " DENSITYCHECKWINDOW %.11g %.11g ;\n", + checkWindowLength, checkWindowWidth); + lefwLines++; + return LEFW_OK; +} + +int +lefwDensityCheckStep(double checkStepValue) +{ + lefw54Num = LEFW_DENSITYCHECKSTEP; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DENSITYCHECKSTEP %.11g ;\n", + checkStepValue); + else + fprintf(lefwFile, " DENSITYCHECKSTEP %.11g ;\n", checkStepValue); + lefwLines++; + return LEFW_OK; +} + +int +lefwFillActiveSpacing(double fillToActiveSpacing) +{ + lefw54Num = LEFW_FILLACTIVESPACING; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FILLACTIVESPACING %.11g ;\n", + fillToActiveSpacing); + else + fprintf(lefwFile, " FILLACTIVESPACING %.11g ;\n", fillToActiveSpacing); + lefwLines++; + return LEFW_OK; +} + +int +lefwMaxviastack(int value, + const char *bottomLayer, + const char *topLayer) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwIsMaxviastack) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "MAXVIASTACK %d ", value); + if (bottomLayer) + encPrint(lefwFile, (char*) "RANGE %s %s ;\n", bottomLayer, topLayer); + else + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, "MAXVIASTACK %d ", value); + if (bottomLayer) + fprintf(lefwFile, "RANGE %s %s ;\n", bottomLayer, topLayer); + else + fprintf(lefwFile, ";\n"); + } + lefwLines++; + return LEFW_OK; +} + +int +lefwStartPropDef() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwSynArray[LEFW_PROPERTYDEF_START]) + return LEFW_ALREADY_DEFINED; + lefwSynArray[LEFW_ANTENNASIZE] = 1; + if (lefwState == LEFW_PROPERTYDEF_START || + lefwState == LEFW_PROPERTYDEF) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "PROPERTYDEFINITIONS\n"); + else + fprintf(lefwFile, "PROPERTYDEFINITIONS\n"); + + lefwLines++; + lefwState = LEFW_PROPERTYDEF_START; + lefwSynArray[LEFW_PROPERTYDEF_START] = 1; + return LEFW_OK; +} + +int +lefwIntPropDef(const char *objType, + const char *propName, + double leftRange, + double rightRange, // optional + int propValue // optional + ) +{ + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_PROPERTYDEF_START && + lefwState != LEFW_PROPERTYDEF) + return LEFW_BAD_ORDER; + /* + if ((! objType && ! *objType) || (! propName && ! *propName)) + */ + if (((objType == 0) || (*objType == 0)) || ((propName == 0) || (*propName == 0))) + return LEFW_BAD_DATA; + + if (strcmp(objType, "LIBRARY") && strcmp(objType, "VIA") && + strcmp(objType, "MACRO") && strcmp(objType, "PIN") && + strcmp(objType, "LAYER") && strcmp(objType, "NONDEFAULTRULE") && + strcmp(objType, "VIARULE")) + return LEFW_BAD_DATA; + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " %s %s INTEGER ", objType, propName); + if (leftRange || rightRange) + encPrint(lefwFile, (char*) "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + encPrint(lefwFile, (char*) "%d ", propValue); + + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " %s %s INTEGER ", objType, propName); + if (leftRange || rightRange) + fprintf(lefwFile, "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + fprintf(lefwFile, "%d ", propValue); + + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_PROPERTYDEF; + return LEFW_OK; +} + + +int +lefwRealPropDef(const char *objType, + const char *propName, + double leftRange, + double rightRange, // optional + double propValue // optional + ) +{ + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_PROPERTYDEF_START && + lefwState != LEFW_PROPERTYDEF) + return LEFW_BAD_ORDER; + if (((objType == 0) || (*objType == 0)) || ((propName == 0) || (*propName == 0))) // require + return LEFW_BAD_DATA; + + if (strcmp(objType, "LIBRARY") && strcmp(objType, "VIA") && + strcmp(objType, "MACRO") && strcmp(objType, "PIN") && + strcmp(objType, "LAYER") && strcmp(objType, "NONDEFAULTRULE") && + strcmp(objType, "VIARULE")) + return LEFW_BAD_DATA; + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " %s %s REAL ", objType, propName); + if (leftRange || rightRange) + encPrint(lefwFile, (char*) "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + encPrint(lefwFile, (char*) "%.11g ", propValue); + + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " %s %s REAL ", objType, propName); + if (leftRange || rightRange) + fprintf(lefwFile, "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + fprintf(lefwFile, "%.11g ", propValue); + + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_PROPERTYDEF; + return LEFW_OK; +} + + +int +lefwStringPropDef(const char *objType, + const char *propName, + double leftRange, + double rightRange, // optional + const char *propValue // optional + ) +{ + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_PROPERTYDEF_START && + lefwState != LEFW_PROPERTYDEF) + return LEFW_BAD_ORDER; + if (((objType == 0) || (*objType == 0)) || ((propName == 0) || (*propName == 0))) + return LEFW_BAD_DATA; + + if (strcmp(objType, "LIBRARY") && strcmp(objType, "VIA") && + strcmp(objType, "MACRO") && strcmp(objType, "PIN") && + strcmp(objType, "LAYER") && strcmp(objType, "NONDEFAULTRULE") && + strcmp(objType, "VIARULE")) + return LEFW_BAD_DATA; + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " %s %s STRING ", objType, propName); + if (leftRange || rightRange) + encPrint(lefwFile, (char*) "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + encPrint(lefwFile, (char*) "\"%s\" ", propValue); // string, set quotes + + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " %s %s STRING ", objType, propName); + if (leftRange || rightRange) + fprintf(lefwFile, "RANGE %.11g %.11g ", leftRange, rightRange); + + if (propValue) + fprintf(lefwFile, "\"%s\" ", propValue); // string, set quotes + + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_PROPERTYDEF; + return LEFW_OK; +} + + +int +lefwEndPropDef() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_PROPERTYDEF_START && + lefwState != LEFW_PROPERTYDEF) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END PROPERTYDEFINITIONS\n\n"); + else + fprintf(lefwFile, "END PROPERTYDEFINITIONS\n\n"); + lefwLines++; + lefwState = LEFW_PROPERTYDEF_END; + return LEFW_OK; +} + + +int +lefwEnd() +{ + if (!lefwFile) + return 1; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END LIBRARY\n"); + else + fprintf(lefwFile, "END LIBRARY\n"); + lefwLines++; + // lefwFile = 0; + lefwState = LEFW_DONE; + return LEFW_OK; +} + +int +lefwStartVia(const char *viaName, + const char *isDefault) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_VIA_START || + lefwState == LEFW_VIA) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END && + (!lefwIsNonDefaultRule)) // via defined in nondefaultrule + return LEFW_BAD_ORDER; // not of the ENDs + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "VIA %s ", viaName); + if (isDefault && strcmp(isDefault, "DEFAULT") == 0) + encPrint(lefwFile, (char*) "DEFAULT"); + encPrint(lefwFile, (char*) "\n"); + } else { + fprintf(lefwFile, "VIA %s ", viaName); + if (isDefault && strcmp(isDefault, "DEFAULT") == 0) + fprintf(lefwFile, "DEFAULT"); + fprintf(lefwFile, "\n"); + } + lefwLines++; + + lefwSynArray[LEFW_VIA_START] = 1; + lefwState = LEFW_VIA_START; + lefwDidLayer = 0; // hasn't set the layer yet + lefwViaHasVal = 0; + return LEFW_OK; +} + +int +lefwViaTopofstackonly() +{ + lefwObsoleteNum = LEFW_VIATOPOFSTACKONLY; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && + lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " TOPOFSTACKONLY\n"); + else + fprintf(lefwFile, " TOPOFSTACKONLY\n"); + lefwLines++; + return LEFW_OK; +} + +int +lefwViaForeign(const char *foreignName, + double xl, // optional + double yl, // optional + int orient) +{ // optional + lefwObsoleteNum = LEFW_VIAFOREIGN; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && + lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " FOREIGN %s ", foreignName); + if (xl || yl) { + encPrint(lefwFile, (char*) "%.11g %.11g ", xl, yl); + if (orient >= 0 && orient <= 7) + encPrint(lefwFile, (char*) "%s ", lefwOrient(orient)); + } else if (orient > 0 && orient <= 7) { // assume user has 0 0 for pt + encPrint(lefwFile, (char*) "%.11g %.11g ", xl, yl); + encPrint(lefwFile, (char*) "%s ", lefwOrient(orient)); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " FOREIGN %s ", foreignName); + if (xl || yl) { + fprintf(lefwFile, "%.11g %.11g ", xl, yl); + if (orient >= 0 && orient <= 7) + fprintf(lefwFile, "%s ", lefwOrient(orient)); + } else if (orient > 0 && orient <= 7) { // assume user has 0 0 for pt + fprintf(lefwFile, "%.11g %.11g ", xl, yl); + fprintf(lefwFile, "%s ", lefwOrient(orient)); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_VIA; + return LEFW_OK; +} + +int +lefwViaForeignStr(const char *foreignName, + double xl, // optional + double yl, // optional + const char *orient) +{ // optional + lefwObsoleteNum = LEFW_VIAFOREIGN; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && + lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " FOREIGN %s ", foreignName); + if (xl || yl) { + encPrint(lefwFile, (char*) "%.11g %.11g ", xl, yl); + if (orient && *orient != '\0') + encPrint(lefwFile, (char*) "%s ", orient); + } else if (orient && *orient != '\0') { // assume user has 0 0 for pt + encPrint(lefwFile, (char*) "%.11g %.11g ", xl, yl); + encPrint(lefwFile, (char*) "%s ", orient); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " FOREIGN %s ", foreignName); + if (xl || yl) { + fprintf(lefwFile, "%.11g %.11g ", xl, yl); + if (orient && *orient != '\0') + fprintf(lefwFile, "%s ", orient); + } else if (orient && *orient != '\0') { // assume user has 0 0 for pt + fprintf(lefwFile, "%.11g %.11g ", xl, yl); + fprintf(lefwFile, "%s ", orient); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_VIA; + return LEFW_OK; +} + +int +lefwViaResistance(double resistance) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + + if (lefwViaHasVal) + return LEFW_ALREADY_DEFINED; // either Resistance or + // ViaRule has defined + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RESISTANCE %.11g ;\n", resistance); + else + fprintf(lefwFile, " RESISTANCE %.11g ;\n", resistance); + + lefwLines++; + lefwState = LEFW_VIA; + lefwViaHasVal = 1; + return LEFW_OK; +} + +int +lefwViaLayer(const char *layerName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " LAYER %s ;\n", layerName); + else + fprintf(lefwFile, " LAYER %s ;\n", layerName); + + lefwLines++; + lefwState = LEFW_VIA; + lefwDidLayer = 1; + return LEFW_OK; +} + +int +lefwViaLayerRect(double x1l, + double y1l, + double x2l, + double y2l, + int mask) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + if (!lefwDidLayer) + return LEFW_BAD_ORDER; + + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (mask) { + encPrint(lefwFile, + (char*) " RECT MASK %d %.11g %.11g %.11g %.11g ;\n", mask, x1l, y1l, x2l, y2l); + } else { + encPrint(lefwFile, + (char*) " RECT %.11g %.11g %.11g %.11g ;\n", x1l, y1l, x2l, y2l); + } + } else { + if (mask) { + fprintf(lefwFile, " RECT MASK %d %.11g %.11g %.11g %.11g ;\n", mask, x1l, y1l, x2l, y2l); + } else { + fprintf(lefwFile, " RECT %.11g %.11g %.11g %.11g ;\n", x1l, y1l, x2l, y2l); + } + } + + lefwLines++; + lefwState = LEFW_VIA; + return LEFW_OK; +} + +int +lefwViaLayerPolygon(int num_polys, + double *xl, + double *yl, + int mask) +{ + int i; + int polyCount; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + if (!lefwDidLayer) + return LEFW_BAD_ORDER; + if (num_polys < 4) + return LEFW_BAD_DATA; + + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (mask) { + encPrint(lefwFile, (char*) " POLYGON MASK %d ", mask); + } else { + encPrint(lefwFile, (char*) " POLYGON "); + } + polyCount = 0; + for (i = 0; i < num_polys; i++) { + if (i == 0) + encPrint(lefwFile, (char*) "%.11g %.11g ", *xl++, *yl++); + else { + if ((i % 5) == 0) { + encPrint(lefwFile, (char*) "\n %.11g %.11g", + *xl++, *yl++); + lefwLines++; + } else + encPrint(lefwFile, (char*) "%.11g %.11g ", *xl++, *yl++); + } + } + encPrint(lefwFile, (char*) " ;\n"); + } else { + if (mask) { + fprintf(lefwFile, " POLYGON MASK %d ", mask); + } else { + fprintf(lefwFile, " POLYGON "); + } + polyCount = 0; + for (i = 0; i < num_polys; i++) { + if (i == 0) + fprintf(lefwFile, "%.11g %.11g", *xl++, *yl++); + else { + if ((i % 5) == 0) { + fprintf(lefwFile, "\n %.11g %.11g", *xl++, *yl++); + lefwLines++; + } else + fprintf(lefwFile, "%.11g %.11g ", *xl++, *yl++); + } + } + fprintf(lefwFile, " ;\n"); + } + lefwLines++; + lefwState = LEFW_VIA; + return LEFW_OK; +} + +int +lefwViaViarule(const char *viaRuleName, + double xCutSize, + double yCutSize, + const char *botMetalLayer, + const char *cutLayer, + const char *topMetalLayer, + double xCutSpacing, + double yCutSpacing, + double xBotEnc, + double yBotEnc, + double xTopEnc, + double yTopEnc) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + + if (lefwViaHasVal) + return LEFW_ALREADY_DEFINED; // either Resistance or + // ViaRule has defined + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " VIARULE %s ;\n", viaRuleName); + encPrint(lefwFile, (char*) " CUTSIZE %.11g %.11g ;\n", + xCutSize, yCutSize); + encPrint(lefwFile, (char*) " LAYERS %s %s %s ;\n", botMetalLayer, + cutLayer, topMetalLayer); + encPrint(lefwFile, (char*) " CUTSPACING %.11g %.11g ;\n", + xCutSpacing, yCutSpacing); + encPrint(lefwFile, (char*) " ENCLOSURE %.11g %.11g %.11g %.11g ;\n", + xBotEnc, yBotEnc, xTopEnc, yTopEnc); + } else { + fprintf(lefwFile, " VIARULE %s ;\n", viaRuleName); + fprintf(lefwFile, " CUTSIZE %.11g %.11g ;\n", xCutSize, yCutSize); + fprintf(lefwFile, " LAYERS %s %s %s ;\n", botMetalLayer, + cutLayer, topMetalLayer); + fprintf(lefwFile, " CUTSPACING %.11g %.11g ;\n", + xCutSpacing, yCutSpacing); + fprintf(lefwFile, " ENCLOSURE %.11g %.11g %.11g %.11g ;\n", + xBotEnc, yBotEnc, xTopEnc, yTopEnc); + } + lefwLines++; + lefwState = LEFW_VIAVIARULE; + lefwViaHasVal = 1; + return LEFW_OK; +} + +int +lefwViaViaruleRowCol(int numCutRows, + int numCutCols) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIAVIARULE) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ROWCOL %d %d ;\n", numCutRows, numCutCols); + else + fprintf(lefwFile, " ROWCOL %d %d ;\n", numCutRows, numCutCols); + + lefwLines++; + return LEFW_OK; +} + +int +lefwViaViaruleOrigin(double xOffset, + double yOffset) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIAVIARULE) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ORIGIN %.11g %.11g ;\n", xOffset, yOffset); + else + fprintf(lefwFile, " ORIGIN %.11g %.11g ;\n", xOffset, yOffset); + + lefwLines++; + return LEFW_OK; +} + +int +lefwViaViaruleOffset(double xBotOffset, + double yBotOffset, + double xTopOffset, + double yTopOffset) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIAVIARULE) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " OFFSET %.11g %.11g %.11g %.11g ;\n", + xBotOffset, yBotOffset, xTopOffset, yTopOffset); + else + fprintf(lefwFile, " OFFSET %.11g %.11g %.11g %.11g ;\n", + xBotOffset, yBotOffset, xTopOffset, yTopOffset); + lefwLines++; + return LEFW_OK; +} + +int +lefwViaViarulePattern(const char *cutPattern) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIAVIARULE) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " PATTERN %s ;\n", cutPattern); + else + fprintf(lefwFile, " PATTERN %s ;\n", cutPattern); + lefwLines++; + return LEFW_OK; +} + +int +lefwStringProperty(const char *propName, + const char *propValue) +{ + if ((lefwState != LEFW_VIA) && (lefwState != LEFW_LAYER) && + (lefwState != LEFW_VIARULE) && (lefwState != LEFW_MACRO_START) && + (lefwState != LEFW_MACRO) && (lefwState != LEFW_VIA_START) && + (lefwState != LEFW_VIARULE_START) && (lefwState != LEFW_LAYER_START) && + (lefwState != LEFW_BEGINEXT) && (lefwState != LEFW_VIAVIARULE) && + (lefwState != LEFW_LAYERROUTING_START) && + (lefwState != LEFW_LAYERROUTING)) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, + (char*) " PROPERTY %s \"%s\" ;\n", propName, propValue); + else + fprintf(lefwFile, " PROPERTY %s \"%s\" ;\n", propName, propValue); + lefwLines++; + return LEFW_OK; +} + +int +lefwRealProperty(const char *propName, + double propValue) +{ + if ((lefwState != LEFW_VIA) && (lefwState != LEFW_LAYER) && + (lefwState != LEFW_VIARULE) && (lefwState != LEFW_MACRO_START) && + (lefwState != LEFW_MACRO) && (lefwState != LEFW_VIA_START) && + (lefwState != LEFW_VIARULE_START) && (lefwState != LEFW_LAYER_START) && + (lefwState != LEFW_BEGINEXT) && (lefwState != LEFW_VIAVIARULE)) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " PROPERTY %s %.11g ;\n", propName, propValue); + else + fprintf(lefwFile, " PROPERTY %s %.11g ;\n", propName, propValue); + lefwLines++; + return LEFW_OK; +} + +int +lefwIntProperty(const char *propName, + int propValue) +{ + if ((lefwState != LEFW_VIA) && (lefwState != LEFW_LAYER) && + (lefwState != LEFW_VIARULE) && (lefwState != LEFW_MACRO_START) && + (lefwState != LEFW_MACRO) && (lefwState != LEFW_VIA_START) && + (lefwState != LEFW_VIARULE_START) && (lefwState != LEFW_LAYER_START) && + (lefwState != LEFW_BEGINEXT) && (lefwState != LEFW_VIAVIARULE)) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " PROPERTY %s %d ;\n", propName, propValue); + else + fprintf(lefwFile, " PROPERTY %s %d ;\n", propName, propValue); + lefwLines++; + return LEFW_OK; +} + +int +lefwEndVia(const char *viaName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && lefwState != LEFW_VIA && + lefwState != LEFW_VIAVIARULE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", viaName); + else + fprintf(lefwFile, "END %s\n\n", viaName); + + lefwLines++; + lefwState = LEFW_VIA_END; + lefwDidLayer = 0; + return LEFW_OK; +} + +// internal function +int +lefwViaRulePrtLayer(const char *layerName, + const char *direction, + double minWidth, + double maxWidth, + double overhang, + double metalOverhang) +{ + lefwObsoleteNum = LEFW_VIARULEGENERATE; + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " LAYER %s ;\n", layerName); + else + fprintf(lefwFile, " LAYER %s ;\n", layerName); + if (direction && strcmp(direction, "HORIZONTAL") && + strcmp(direction, "VERTICAL")) + return LEFW_BAD_DATA; + if (versionNum >= 5.6 && (direction || overhang || metalOverhang)) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) { + if (direction) { + encPrint(lefwFile, (char*) " DIRECTION %s ;\n", direction); + lefwLines = lefwLines + 2; + } else + lefwLines++; + if (minWidth || maxWidth) { + encPrint(lefwFile, (char*) " WIDTH %.11g TO %.11g ;\n", + minWidth, maxWidth); + lefwLines++; + } + if (overhang) { + encPrint(lefwFile, (char*) " OVERHANG %.11g ;\n", overhang); + lefwLines++; + } + if (metalOverhang) { + encPrint(lefwFile, (char*) " METALOVERHANG %.11g ;\n", + metalOverhang); + lefwLines++; + } + } else { + if (direction) { + fprintf(lefwFile, " DIRECTION %s ;\n", direction); + lefwLines = lefwLines + 2; + } else + lefwLines++; + if (minWidth || maxWidth) { + fprintf(lefwFile, " WIDTH %.11g TO %.11g ;\n", + minWidth, maxWidth); + lefwLines++; + } + if (overhang) { + fprintf(lefwFile, " OVERHANG %.11g ;\n", overhang); + lefwLines++; + } + if (metalOverhang) { + fprintf(lefwFile, " METALOVERHANG %.11g ;\n", metalOverhang); + lefwLines++; + } + } + return LEFW_OK; +} + +int +lefwStartViaRule(const char *viaRuleName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_VIARULE_START || + lefwState == LEFW_VIARULE) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + + if (!viaRuleName || viaRuleName == 0 || *viaRuleName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "VIARULE %s\n", viaRuleName); + else + fprintf(lefwFile, "VIARULE %s\n", viaRuleName); + lefwLines++; + + lefwSynArray[LEFW_VIARULE_START] = 1; + lefwState = LEFW_VIARULE_START; + lefwDidLayer = 0; // hasn't set the layer yet + lefwNumViaRuleLayers = 0; + return LEFW_OK; +} + +int +lefwViaRuleLayer(const char *layerName, + const char *direction, + double minWidth, + double maxWidth, // optional + double overhang, + double metalOverhang) +{ // optional + int status; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_VIARULE_START && + lefwState != LEFW_VIARULE) + return LEFW_BAD_ORDER; + if (lefwNumViaRuleLayers >= 2) + return LEFW_BAD_ORDER; + if ((status = lefwViaRulePrtLayer(layerName, direction, minWidth, maxWidth, + overhang, metalOverhang)) != LEFW_OK) + return status; + lefwNumViaRuleLayers++; + lefwState = LEFW_VIARULE; + return LEFW_OK; +} + +int +lefwViaRuleVia(const char *viaName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_VIARULE) + return LEFW_BAD_ORDER; + if (lefwNumViaRuleLayers != 2) // this routine has to be after two layers + return LEFW_BAD_ORDER; // be written + if (!viaName || !*viaName) // viaName is required + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " VIA %s ;\n", viaName); + else + fprintf(lefwFile, " VIA %s ;\n", viaName); + lefwLines++; + return LEFW_OK; +} + +int +lefwEndViaRule(const char *viaRuleName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIARULE_START && + lefwState != LEFW_VIARULE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", viaRuleName); + else + fprintf(lefwFile, "END %s\n\n", viaRuleName); + + lefwLines++; + lefwState = LEFW_VIARULE_END; + lefwDidLayer = 0; + lefwNumViaRuleLayers = 0; + return LEFW_OK; +} + +int +lefwStartViaRuleGen(const char *viaRuleName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_VIARULEGEN_START || + lefwState == LEFW_VIARULEGEN) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + + if (!viaRuleName || viaRuleName == 0 || *viaRuleName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "VIARULE %s GENERATE", viaRuleName); + else + fprintf(lefwFile, "VIARULE %s GENERATE", viaRuleName); + lefwLines++; + + lefwSynArray[LEFW_VIARULEGEN_START] = 1; + lefwState = LEFW_VIARULEGEN_START; + lefwDidLayer = 0; // hasn't set the layer yet + lefwNumViaRuleLayers = 0; + return LEFW_OK; +} + +int +lefwViaRuleGenDefault() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_VIARULEGEN_START && + lefwState != LEFW_VIARULEGEN) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DEFAULT"); + else + fprintf(lefwFile, " DEFAULT"); + return LEFW_OK; +} + +int +lefwViaRuleGenLayer(const char *layerName, + const char *direction, + double minWidth, + double maxWidth, // optional + double overhang, + double metalOverhang) +{ // optional + int status; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_VIARULEGEN_START && + lefwState != LEFW_VIARULEGEN) + return LEFW_BAD_ORDER; + if (lefwNumViaRuleLayers >= 2) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) // add a new line since, lefwViaRuleGen + encPrint(lefwFile, (char*) "\n"); // & lefwViaRuleGenDefault do not + else + fprintf(lefwFile, "\n"); + if ((status = lefwViaRulePrtLayer(layerName, direction, minWidth, maxWidth, + overhang, metalOverhang)) != LEFW_OK) + return status; + lefwNumViaRuleLayers++; + lefwState = LEFW_VIARULEGEN; + return LEFW_OK; +} + +int +lefwViaRuleGenLayerEnclosure(const char *layerName, + double overhang1, + double overhang2, + double minWidth, + double maxWidth) +{ // optional + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_VIARULEGEN_START && + lefwState != LEFW_VIARULEGEN) + return LEFW_BAD_ORDER; + if (lefwNumViaRuleLayers >= 2) + return LEFW_BAD_ORDER; + + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n LAYER %s ;\n", layerName); + else + fprintf(lefwFile, "\n LAYER %s ;\n", layerName); + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ENCLOSURE %.11g %.11g ;\n", overhang1, + overhang2); + lefwLines = lefwLines + 2; + if (minWidth || maxWidth) { + encPrint(lefwFile, (char*) " WIDTH %.11g TO %.11g ;\n", minWidth, + maxWidth); + lefwLines++; + } + } else { + fprintf(lefwFile, " ENCLOSURE %.11g %.11g ;\n", overhang1, overhang2); + lefwLines = lefwLines + 2; + if (minWidth || maxWidth) { + fprintf(lefwFile, " WIDTH %.11g TO %.11g ;\n", minWidth, maxWidth); + lefwLines++; + } + } + + lefwNumViaRuleLayers++; + lefwState = LEFW_VIARULEGEN; + return LEFW_OK; +} + +int +lefwViaRuleGenLayer3(const char *layerName, + double xl, + double yl, + double xh, + double yh, + double xSpacing, + double ySpacing, + double resistance) +{ // optional + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_VIARULEGEN) + return LEFW_BAD_ORDER; + if (lefwNumViaRuleLayers != 2) // this routine has to be after two layers + return LEFW_BAD_ORDER; // be written + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " LAYER %s ;\n", layerName); + encPrint(lefwFile, + (char*) " RECT %.11g %.11g %.11g %.11g ;\n", xl, yl, xh, yh); + encPrint(lefwFile, + (char*) " SPACING %.11g BY %.11g ;\n", xSpacing, ySpacing); + if (resistance) { + encPrint(lefwFile, (char*) " RESISTANCE %.11g ;\n", resistance); + lefwLines++; + } + } else { + fprintf(lefwFile, " LAYER %s ;\n", layerName); + fprintf(lefwFile, " RECT %.11g %.11g %.11g %.11g ;\n", + xl, yl, xh, yh); + fprintf(lefwFile, " SPACING %.11g BY %.11g ;\n", xSpacing, ySpacing); + if (resistance) { + fprintf(lefwFile, " RESISTANCE %.11g ;\n", resistance); + lefwLines++; + } + } + lefwLines += 3; + return LEFW_OK; +} + +int +lefwEndViaRuleGen(const char *viaRuleName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIARULEGEN_START && + lefwState != LEFW_VIARULEGEN) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", viaRuleName); + else + fprintf(lefwFile, "END %s\n\n", viaRuleName); + + lefwLines++; + lefwState = LEFW_VIARULEGEN_END; + lefwDidLayer = 0; + lefwNumViaRuleLayers = 0; + return LEFW_OK; +} + +int +lefwStartNonDefaultRule(const char *ruleName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_NONDEFAULTRULE_START || + lefwState == LEFW_NONDEFAULTRULE) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + + if (!ruleName || ruleName == 0 || *ruleName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "NONDEFAULTRULE %s\n", ruleName); + else + fprintf(lefwFile, "NONDEFAULTRULE %s\n", ruleName); + lefwLines++; + + lefwSynArray[LEFW_NONDEFAULTRULE_START] = 1; + lefwState = LEFW_NONDEFAULTRULE_START; + lefwDidLayer = 0; // hasn't set the layer yet + lefwIsNonDefaultRule = 1; + return LEFW_OK; +} + +int +lefwNonDefaultRuleHardspacing() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_NONDEFAULTRULE_START && + lefwState != LEFW_NONDEFAULTRULE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " HARDSPACING ;\n"); + else + fprintf(lefwFile, " HARDSPACING ;\n"); + return LEFW_OK; +} + +int +lefwNonDefaultRuleStartVia(const char *viaName, + const char *isDefault) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_VIA_START || lefwState == LEFW_VIA || + (lefwState != LEFW_NONDEFAULTRULE_START && + lefwState != LEFW_NONDEFAULTRULE)) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " VIA %s ", viaName); + if (isDefault && strcmp(isDefault, "DEFAULT") == 0) + encPrint(lefwFile, (char*) "DEFAULT"); + encPrint(lefwFile, (char*) "\n"); + } else { + fprintf(lefwFile, " VIA %s ", viaName); + if (isDefault && strcmp(isDefault, "DEFAULT") == 0) + fprintf(lefwFile, "DEFAULT"); + fprintf(lefwFile, "\n"); + } + lefwLines++; + lefwViaHasVal = 0; + + lefwSynArray[LEFW_VIA_START] = 1; + lefwState = LEFW_VIA_START; + lefwDidLayer = 0; // hasn't set the layer yet + return LEFW_OK; +} + +int +lefwNonDefaultRuleEndVia(const char *viaName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_VIA_START && + lefwState != LEFW_VIA) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " END %s\n\n", viaName); + else + fprintf(lefwFile, " END %s\n\n", viaName); + + lefwLines++; + lefwState = LEFW_NONDEFAULTRULE; + lefwDidLayer = 0; + return LEFW_OK; +} + +int +lefwNonDefaultRuleUseVia(const char *viaName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_NONDEFAULTRULE_START && + lefwState != LEFW_NONDEFAULTRULE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " USEVIA %s ;\n", viaName); + else + fprintf(lefwFile, " USEVIA %s ;\n", viaName); + return LEFW_OK; +} + +int +lefwNonDefaultRuleUseViaRule(const char *viaRuleName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_NONDEFAULTRULE_START && + lefwState != LEFW_NONDEFAULTRULE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " USEVIARULE %s ;\n", viaRuleName); + else + fprintf(lefwFile, " USEVIARULE %s ;\n", viaRuleName); + return LEFW_OK; +} + +int +lefwNonDefaultRuleMinCuts(const char *layerName, + int numCuts) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_NONDEFAULTRULE_START && + lefwState != LEFW_NONDEFAULTRULE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINCUTS %s %d ;\n", layerName, numCuts); + else + fprintf(lefwFile, " MINCUTS %s %d ;\n", layerName, numCuts); + return LEFW_OK; +} + +int +lefwNonDefaultRuleLayer(const char *routingLayerName, + double width, + double minSpacing, + double wireExtension, + double resist, + double capacitance, + double edgeCap) +{ + lefwObsoleteNum = LEFW_NONDEFAULTRULELAYER; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_NONDEFAULTRULE_START && + lefwState != LEFW_NONDEFAULTRULE) + return LEFW_BAD_ORDER; + if (!routingLayerName || routingLayerName == 0 || *routingLayerName == 0) + return LEFW_BAD_DATA; + if (versionNum >= 5.6 && (resist || capacitance || edgeCap)) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " LAYER %s\n", routingLayerName); + encPrint(lefwFile, (char*) " WIDTH %.11g ;\n", width); + encPrint(lefwFile, (char*) " SPACING %.11g ;\n", minSpacing); + if (wireExtension) { + encPrint(lefwFile, + (char*) " WIREEXTENSION %.11g ;\n", wireExtension); + lefwLines++; + } + if (resist) { + encPrint(lefwFile, (char*) " RESISTANCE RPERSQ %.11g ;\n", resist); + lefwLines++; + } + if (capacitance) { + encPrint(lefwFile, (char*) " CAPACITANCE CPERSQDIST %.11g ;\n", + capacitance); + lefwLines++; + } + if (edgeCap) { + encPrint(lefwFile, (char*) " EDGECAPACITANCE %.11g ;\n", edgeCap); + lefwLines++; + } + encPrint(lefwFile, (char*) " END %s\n\n", routingLayerName); + } else { + fprintf(lefwFile, " LAYER %s\n", routingLayerName); + fprintf(lefwFile, " WIDTH %.11g ;\n", width); + fprintf(lefwFile, " SPACING %.11g ;\n", minSpacing); + if (wireExtension) { + fprintf(lefwFile, " WIREEXTENSION %.11g ;\n", wireExtension); + lefwLines++; + } + if (resist) { + fprintf(lefwFile, " RESISTANCE RPERSQ %.11g ;\n", resist); + lefwLines++; + } + if (capacitance) { + fprintf(lefwFile, + " CAPACITANCE CPERSQDIST %.11g ;\n", capacitance); + lefwLines++; + } + if (edgeCap) { + fprintf(lefwFile, " EDGECAPACITANCE %.11g ;\n", edgeCap); + lefwLines++; + } + fprintf(lefwFile, " END %s\n\n", routingLayerName); + } + + lefwLines = lefwLines + 4; + lefwSynArray[LEFW_NONDEFAULTRULE] = 1; + lefwState = LEFW_NONDEFAULTRULE; + return LEFW_OK; +} + +int +lefwEndNonDefaultRule(const char *ruleName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_NONDEFAULTRULE_START && + lefwState != LEFW_NONDEFAULTRULE && + lefwState != LEFW_VIA_END && lefwState != LEFW_SPACING_END) + return LEFW_BAD_ORDER; + // can be right after a via or spacing defined in nondefaultrule + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", ruleName); + else + fprintf(lefwFile, "END %s\n\n", ruleName); + + lefwLines++; + lefwState = LEFW_NONDEFAULTRULE_END; + lefwDidLayer = 0; + lefwIsNonDefaultRule = 0; + return LEFW_OK; +} + +int +lefwStartSpacing() +{ + lefwObsoleteNum = LEFW_SPACING; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_SPACING_START || + lefwState == LEFW_SPACING) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END && + (!lefwIsNonDefaultRule)) // spacing defined in nondefaultrule + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "SPACING\n"); + else + fprintf(lefwFile, "SPACING\n"); + + lefwLines++; + lefwState = LEFW_SPACING_START; + return LEFW_OK; +} + +int +lefwSpacing(const char *layerName1, + const char *layerName2, + double minSpace, + const char *stack) +{ // optioanl + lefwObsoleteNum = LEFW_SPACING; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_SPACING_START && + lefwState != LEFW_SPACING) + return LEFW_BAD_ORDER; + if (!layerName1 || layerName1 == 0 || *layerName1 == 0) + return LEFW_BAD_DATA; + if (!layerName2 || layerName2 == 0 || *layerName2 == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " SAMENET %s %s %.11g ", + layerName1, layerName2, minSpace); + if (stack && strcmp(stack, "STACK") == 0) + encPrint(lefwFile, (char*) "STACK "); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " SAMENET %s %s %.11g ", layerName1, layerName2, + minSpace); + if (stack && strcmp(stack, "STACK") == 0) + fprintf(lefwFile, "STACK "); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_SPACING; + return LEFW_OK; +} + +int +lefwEndSpacing() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_SPACING_START && + lefwState != LEFW_SPACING) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END SPACING\n\n"); + else + fprintf(lefwFile, "END SPACING\n\n"); + + lefwLines++; + lefwState = LEFW_SPACING_END; + return LEFW_OK; +} + +int +lefwUniversalNoiseMargin(double high, + double low) +{ + lefwObsoleteNum = LEFW_NOISEMARGIN; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_NOISEMARGIN]) + return LEFW_ALREADY_DEFINED; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, + (char*) "UNIVERSALNOISEMARGIN %.11g %.11g ;\n", high, low); + else + fprintf(lefwFile, "UNIVERSALNOISEMARGIN %.11g %.11g ;\n", high, low); + lefwSynArray[LEFW_NOISEMARGIN] = 1; + return LEFW_OK; +} + +int +lefwEdgeRateThreshold1(double num) +{ + lefwObsoleteNum = LEFW_THRESHOLD1; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_THRESHOLD1]) + return LEFW_ALREADY_DEFINED; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "EDGERATETHRESHOLD1 %.11g ;\n", num); + else + fprintf(lefwFile, "EDGERATETHRESHOLD1 %.11g ;\n", num); + lefwSynArray[LEFW_THRESHOLD1] = 1; + return LEFW_OK; +} + +int +lefwEdgeRateThreshold2(double num) +{ + lefwObsoleteNum = LEFW_THRESHOLD2; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_THRESHOLD2]) + return LEFW_ALREADY_DEFINED; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "EDGERATETHRESHOLD2 %.11g ;\n", num); + else + fprintf(lefwFile, "EDGERATETHRESHOLD2 %.11g ;\n", num); + lefwSynArray[LEFW_THRESHOLD2] = 1; + return LEFW_OK; +} + +int +lefwEdgeRateScaleFactor(double num) +{ + lefwObsoleteNum = LEFW_SCALEFACTOR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_SCALEFACTOR]) + return LEFW_ALREADY_DEFINED; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "EDGERATESCALEFACTOR %.11g ;\n", num); + else + fprintf(lefwFile, "EDGERATESCALEFACTOR %.11g ;\n", num); + lefwSynArray[LEFW_SCALEFACTOR] = 1; + return LEFW_OK; +} + + +int +lefwStartNoiseTable(int num) +{ + lefwObsoleteNum = LEFW_NOISETABLE_START; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_NOISETABLE_START || + lefwState == LEFW_NOISETABLE) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_NOISETABLE_START]) + return LEFW_ALREADY_DEFINED; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "NOISETABLE %d ;\n", num); + else + fprintf(lefwFile, "NOISETABLE %d ;\n", num); + + lefwLines++; + lefwState = LEFW_NOISETABLE_START; + lefwIsNoiseTable = 1; + lefwIsEdgerate = 0; + lefwSynArray[LEFW_NOISETABLE_START] = 1; + return LEFW_OK; +} + +// for both noisetable and correctiontable +// Obsolete in 5.4 +int +lefwEdgeRate(double num) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsNoiseTable && !lefwIsCorrectTable) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " EDGERATE %.11g ;\n", num); + else + fprintf(lefwFile, " EDGERATE %.11g ;\n", num); + + lefwLines++; + if (lefwState == LEFW_NOISETABLE_START) + lefwState = LEFW_NOISETABLE; + else if (lefwState == LEFW_CORRECTTABLE_START) + lefwState = LEFW_CORRECTTABLE; + lefwIsEdgerate = 1; + lefwIsOutResist = 0; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwOutputResistance(int numResists, + double *resistance) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsEdgerate) + return LEFW_BAD_ORDER; + if (lefwIsOutResist) + return LEFW_BAD_ORDER; + + if (numResists <= 0) + return LEFW_OK; + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " OUTPUTRESISTANCE "); + for (i = 0; i < numResists; i++) { + encPrint(lefwFile, (char*) "%.11g ", *resistance++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " OUTPUTRESISTANCE "); + for (i = 0; i < numResists; i++) { + fprintf(lefwFile, "%.11g ", *resistance++); + } + fprintf(lefwFile, ";\n"); + } + + lefwIsOutResist = 1; + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwVictims(int length, + int numNoises, + double *noises) +{ + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsOutResist) + return LEFW_BAD_ORDER; + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " VICTIMLENGTH %d ;\n", length); + if (numNoises <= 0) + return LEFW_BAD_DATA; // noises are required + for (i = 0; i < numNoises; i++) { + if (lefwIsNoiseTable) + encPrint(lefwFile, (char*) " VICTIMNOISE "); + else + encPrint(lefwFile, (char*) " CORRECTIONFACTOR "); + encPrint(lefwFile, (char*) "%.11g ", *noises++); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " VICTIMLENGTH %d ;\n", length); + if (numNoises <= 0) + return LEFW_BAD_DATA; // noises are required + for (i = 0; i < numNoises; i++) { + if (lefwIsNoiseTable) + fprintf(lefwFile, " VICTIMNOISE "); + else + fprintf(lefwFile, " CORRECTIONFACTOR "); + fprintf(lefwFile, "%.11g ", *noises++); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwEndNoiseTable() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_NOISETABLE_START && + lefwState != LEFW_NOISETABLE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END NOISETABLE\n\n"); + else + fprintf(lefwFile, "END NOISETABLE\n\n"); + lefwLines++; + + lefwState = LEFW_NOISETABLE_END; + lefwIsNoiseTable = 0; + lefwIsOutResist = 0; + return LEFW_OK; +} + +int +lefwStartCorrectTable(int num) +{ + lefwObsoleteNum = LEFW_CORRECTTABLE_START; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_CORRECTTABLE_START || + lefwState == LEFW_CORRECTTABLE) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwSynArray[LEFW_CORRECTTABLE_START]) + return LEFW_ALREADY_DEFINED; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "CORRECTIONTABLE %d ;\n", num); + else + fprintf(lefwFile, "CORRECTIONTABLE %d ;\n", num); + + lefwLines++; + lefwState = LEFW_CORRECTTABLE_START; + lefwIsCorrectTable = 1; + lefwIsEdgerate = 0; + lefwSynArray[LEFW_CORRECTTABLE_START] = 1; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwEndCorrectTable() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_CORRECTTABLE_START && + lefwState != LEFW_CORRECTTABLE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END CORRECTIONTABLE\n\n"); + else + fprintf(lefwFile, "END CORRECTIONTABLE\n\n"); + lefwLines++; + + lefwState = LEFW_CORRECTTABLE_END; + lefwIsNoiseTable = 0; + return LEFW_OK; +} + +int +lefwMinFeature(double x, + double y) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_MINFEATURE]) + return LEFW_ALREADY_DEFINED; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "MINFEATURE %.11g %.11g ;\n", x, y); + else + fprintf(lefwFile, "MINFEATURE %.11g %.11g ;\n", x, y); + lefwSynArray[LEFW_MINFEATURE] = 1; + return LEFW_OK; +} + +// ********************* +// int lefwDielectric (float dielectric) { +// if (! lefwFile) return LEFW_UNINITIALIZED; +// if (! lefwDidInit) return LEFW_BAD_ORDER; +// if (lefwState != LEFW_INIT && lefwState < LEFW_END) +// return LEFW_BAD_ORDER; +// if (lefwSynArray[LEFW_DIELECTRIC]) return LEFW_ALREADY_DEFINED; +// fprintf(lefwFile, "DIELECTRIC %.11g ;\n", dielectric); +// lefwSynArray[LEFW_DIELECTRIC] = 1; +// return LEFW_OK; +// } +// ******************** + +int +lefwStartIrdrop() +{ + lefwObsoleteNum = LEFW_IRDROP_START; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_IRDROP_START || + lefwState == LEFW_IRDROP) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_IRDROP_START]) + return LEFW_ALREADY_DEFINED; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "IRDROP\n"); + else + fprintf(lefwFile, "IRDROP\n"); + + lefwLines++; + lefwState = LEFW_IRDROP_START; + lefwSynArray[LEFW_IRDROP_START] = 1; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwIrdropTable(const char *tableName, + const char *currentsNvolts) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_IRDROP_START && + lefwState != LEFW_IRDROP) + return LEFW_BAD_ORDER; + if (!tableName || tableName == 0 || *tableName == 0) + return LEFW_BAD_DATA; + if (!currentsNvolts || currentsNvolts == 0 || *currentsNvolts == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " TABLE %s %s ;\n", tableName, currentsNvolts); + else + fprintf(lefwFile, " TABLE %s %s ;\n", tableName, currentsNvolts); + lefwLines++; + + lefwState = LEFW_IRDROP; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwEndIrdrop() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_IRDROP_START && + lefwState != LEFW_IRDROP) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END IRDROP\n\n"); + else + fprintf(lefwFile, "END IRDROP\n\n"); + lefwLines++; + + lefwState = LEFW_IRDROP_END; + return LEFW_OK; +} + +int +lefwSite(const char *siteName, + const char *classType, + const char *symmetry, + double width, + double height) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_SITE) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (!siteName || siteName == 0 || *siteName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) "SITE %s\n", siteName); + if (classType && strcmp(classType, "PAD") && strcmp(classType, "CORE")) + return LEFW_BAD_DATA; + encPrint(lefwFile, (char*) " CLASS %s ;\n", classType); + if (symmetry) + encPrint(lefwFile, (char*) " SYMMETRY %s ;\n", symmetry); + encPrint(lefwFile, (char*) " SIZE %.11g BY %.11g ;\n", width, height); + // encPrint(lefwFile, (char*)"END %s\n\n", siteName); + } else { + fprintf(lefwFile, "SITE %s\n", siteName); + if (classType && strcmp(classType, "PAD") && strcmp(classType, "CORE")) + return LEFW_BAD_DATA; + fprintf(lefwFile, " CLASS %s ;\n", classType); + if (symmetry) + fprintf(lefwFile, " SYMMETRY %s ;\n", symmetry); + fprintf(lefwFile, " SIZE %.11g BY %.11g ;\n", width, height); + // a separate function call, lefwEndSite + // fprintf(lefwFile, "END %s\n\n", siteName); + } + + lefwLines = lefwLines + 4; + lefwSynArray[LEFW_SITE] = 1; + lefwState = LEFW_SITE; + return LEFW_OK; +} + +int +lefwSiteRowPattern(const char *siteName, + int orient) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_SITE) + return LEFW_BAD_ORDER; + if (!siteName || siteName == 0 || *siteName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ROWPATTERN %s %s ;\n", siteName, + lefwOrient(orient)); + else + fprintf(lefwFile, " ROWPATTERN %s %s ;\n", siteName, lefwOrient(orient)); + lefwLines++; + lefwState = LEFW_SITE; + return LEFW_OK; +} + +int +lefwSiteRowPatternStr(const char *siteName, + const char *orient) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_SITE) + return LEFW_BAD_ORDER; + if (!siteName || siteName == 0 || *siteName == 0) + return LEFW_BAD_DATA; + if (!orient || orient == 0 || *orient == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ROWPATTERN %s %s ;\n", siteName, orient); + else + fprintf(lefwFile, " ROWPATTERN %s %s ;\n", siteName, orient); + lefwLines++; + lefwState = LEFW_SITE; + return LEFW_OK; +} + +int +lefwEndSite(const char *siteName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_SITE) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", siteName); + else + fprintf(lefwFile, "END %s\n\n", siteName); + + lefwLines++; + lefwState = LEFW_SITE_END; + return LEFW_OK; +} + +int +lefwStartArray(const char *arrayName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_ARRAY_START || + lefwState == LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (!arrayName || arrayName == 0 || *arrayName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "ARRAY %s\n", arrayName); + else + fprintf(lefwFile, "ARRAY %s\n", arrayName); + + lefwLines++; + lefwState = LEFW_ARRAY_START; + lefwSynArray[LEFW_ARRAY_START] = 1; + lefwHasArrayReq = 0; + lefwIsArrayFloorp = 0; + return LEFW_OK; +} + +int +lefwArraySite(const char *name, + double origX, + double origY, + int orient, + double numX, + double numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) + " SITE %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, lefwOrient(orient), numX, numY, spaceX, spaceY); + else + fprintf(lefwFile, + " SITE %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, lefwOrient(orient), numX, numY, spaceX, spaceY); + + lefwLines++; + lefwHasArrayReq = 1; + + lefwState = LEFW_ARRAY; + return LEFW_OK; +} + +int +lefwArraySiteStr(const char *name, + double origX, + double origY, + const char *orient, + double numX, + double numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) + " SITE %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, orient, numX, numY, spaceX, spaceY); + else + fprintf(lefwFile, + " SITE %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, orient, numX, numY, spaceX, spaceY); + + lefwLines++; + lefwHasArrayReq = 1; + + lefwState = LEFW_ARRAY; + return LEFW_OK; +} + +int +lefwArrayCanplace(const char *name, + double origX, + double origY, + int orient, + double numX, + double numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) + " CANPLACE %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, lefwOrient(orient), numX, numY, spaceX, spaceY); + else + fprintf(lefwFile, + " CANPLACE %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, lefwOrient(orient), numX, numY, spaceX, spaceY); + + lefwLines++; + lefwHasArrayReq = 1; + + lefwState = LEFW_ARRAY; + return LEFW_OK; +} + +int +lefwArrayCanplaceStr(const char *name, + double origX, + double origY, + const char *orient, + double numX, + double numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) + " CANPLACE %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, orient, numX, numY, spaceX, spaceY); + else + fprintf(lefwFile, " CANPLACE %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, orient, numX, numY, spaceX, spaceY); + + lefwLines++; + lefwHasArrayReq = 1; + + lefwState = LEFW_ARRAY; + return LEFW_OK; +} + +int +lefwArrayCannotoccupy(const char *name, + double origX, + double origY, + int orient, + double numX, + double numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) + " CANNOTOCCUPY %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, lefwOrient(orient), numX, numY, spaceX, spaceY); + else + fprintf(lefwFile, + " CANNOTOCCUPY %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, lefwOrient(orient), numX, numY, spaceX, spaceY); + + lefwLines++; + lefwHasArrayReq = 1; + + lefwState = LEFW_ARRAY; + return LEFW_OK; +} + +int +lefwArrayCannotoccupyStr(const char *name, + double origX, + double origY, + const char *orient, + double numX, + double numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) + " CANNOTOCCUPY %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, orient, numX, numY, spaceX, spaceY); + else + fprintf(lefwFile, + " CANNOTOCCUPY %s %.11g %.11g %s DO %.11g BY %.11g STEP %.11g %.11g ;\n", + name, origX, origY, orient, numX, numY, spaceX, spaceY); + + lefwLines++; + lefwHasArrayReq = 1; + + lefwState = LEFW_ARRAY; + return LEFW_OK; +} + +int +lefwArrayTracks(const char *xy, + double start, + int numTracks, + double space, + const char *layers) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!xy || xy == 0 || *xy == 0) + return LEFW_BAD_DATA; + if (strcmp(xy, "X") && strcmp(xy, "Y")) + return LEFW_BAD_DATA; + if (!layers || layers == 0 || *layers == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, + (char*) " TRACKS %s %.11g DO %d STEP %.11g LAYER %s ;\n", + xy, start, numTracks, space, layers); + else + fprintf(lefwFile, " TRACKS %s %.11g DO %d STEP %.11g LAYER %s ;\n", + xy, start, numTracks, space, layers); + + lefwLines++; + lefwHasArrayReq = 1; + + lefwState = LEFW_ARRAY; + return LEFW_OK; +} + +int +lefwStartArrayFloorplan(const char *name) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (lefwIsArrayFloorp) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FLOORPLAN %s\n", name); + else + fprintf(lefwFile, " FLOORPLAN %s\n", name); + + lefwLines++; + lefwHasArrayReq = 1; + lefwIsArrayFloorp = 1; + return LEFW_OK; +} + +int +lefwArrayFloorplan(const char *site, + const char *name, + double origX, + double origY, + int orient, + int numX, + int numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwIsArrayFloorp) + return LEFW_BAD_ORDER; + if (site && strcmp(site, "CANPLACE") && strcmp(site, "CANNOTOCCUPY")) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) + " %s %s %.11g %.11g %s DO %d BY %d STEP %.11g %.11g ;\n", + site, name, origX, origY, lefwOrient(orient), numX, numY, + spaceX, spaceY); + else + fprintf(lefwFile, + " %s %s %.11g %.11g %s DO %d BY %d STEP %.11g %.11g ;\n", + site, name, origX, origY, lefwOrient(orient), numX, numY, + spaceX, spaceY); + lefwLines++; + return LEFW_OK; +} + +int +lefwArrayFloorplanStr(const char *site, + const char *name, + double origX, + double origY, + const char *orient, + int numX, + int numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwIsArrayFloorp) + return LEFW_BAD_ORDER; + if (site && strcmp(site, "CANPLACE") && strcmp(site, "CANNOTOCCUPY")) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) + " %s %s %.11g %.11g %s DO %d BY %d STEP %.11g %.11g ;\n", + site, name, origX, origY, orient, numX, numY, spaceX, spaceY); + else + fprintf(lefwFile, + " %s %s %.11g %.11g %s DO %d BY %d STEP %.11g %.11g ;\n", + site, name, origX, origY, orient, numX, numY, spaceX, spaceY); + lefwLines++; + return LEFW_OK; +} + +int +lefwEndArrayFloorplan(const char *name) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwIsArrayFloorp) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " END %s\n\n", name); + else + fprintf(lefwFile, " END %s\n\n", name); + + lefwLines++; + lefwIsArrayFloorp = 0; + return LEFW_OK; +} + +int +lefwArrayGcellgrid(const char *xy, + double startXY, + int colRows, + double spaceXY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!xy || xy == 0 || *xy == 0) + return LEFW_BAD_DATA; + if (strcmp(xy, "X") && strcmp(xy, "Y")) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " GCELLGRID %s %.11g DO %d STEP %.11g ;\n", + xy, startXY, colRows, spaceXY); + else + fprintf(lefwFile, " GCELLGRID %s %.11g DO %d STEP %.11g ;\n", + xy, startXY, colRows, spaceXY); + + lefwLines++; + lefwHasArrayReq = 1; + + lefwState = LEFW_ARRAY; + return LEFW_OK; +} + +int +lefwStartArrayDefaultCap(int size) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (lefwIsArrayDef) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DEFAULTCAP %d\n", size); + else + fprintf(lefwFile, " DEFAULTCAP %d\n", size); + + lefwLines++; + lefwIsArrayDef = 1; + return LEFW_OK; +} + +int +lefwArrayDefaultCap(double numPins, + double cap) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwIsArrayDef) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MINPINS %.11g WIRECAP %.11g ;\n", + numPins, cap); + else + fprintf(lefwFile, " MINPINS %.11g WIRECAP %.11g ;\n", numPins, cap); + lefwLines++; + return LEFW_OK; +} + +int +lefwEndArrayDefaultCap() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwIsArrayDef) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " END DEFAULTCAP\n\n"); + else + fprintf(lefwFile, " END DEFAULTCAP\n\n"); + + lefwLines++; + lefwIsArrayDef = 0; + return LEFW_OK; +} + +int +lefwEndArray(const char *arrayName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_ARRAY_START && + lefwState != LEFW_ARRAY) + return LEFW_BAD_ORDER; + if (!arrayName || arrayName == 0 || *arrayName == 0) + return LEFW_BAD_DATA; + if (lefwIsFloorp || lefwIsArrayDef) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", arrayName); + else + fprintf(lefwFile, "END %s\n\n", arrayName); + + lefwLines++; + lefwState = LEFW_ARRAY_END; + return LEFW_OK; +} + +int +lefwStartMacro(const char *macroName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState == LEFW_MACRO_START || + lefwState == LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!macroName || macroName == 0 || *macroName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "MACRO %s\n", macroName); + else + fprintf(lefwFile, "MACRO %s\n", macroName); + + lefwLines++; + lefwState = LEFW_MACRO_START; + lefwIsMacroDensity = 0; + lefwIsMacroPin = 0; + lefwIsMacroObs = 0; + lefwIsMacroTiming = 0; + return LEFW_OK; +} + +int +lefwMacroClass(const char *value1, + const char *value2) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!value1 || value1 == 0 || *value1 == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + if (strcmp(value1, "RING") == 0) + encPrint(lefwFile, (char*) " CLASS %s ;\n", value1); + else if (strcmp(value1, "BLOCK") == 0) { + if (value2) { + if (strcmp(value2, "BLACKBOX") && strcmp(value2, "SOFT")) + return LEFW_BAD_DATA; + encPrint(lefwFile, (char*) " CLASS %s %s ;\n", value1, value2); + } else + encPrint(lefwFile, (char*) " CLASS %s ;\n", value1); + } else if (strcmp(value1, "COVER") == 0) { + if (value2) { + if (strcmp(value2, "BUMP")) + return LEFW_BAD_DATA; + encPrint(lefwFile, (char*) " CLASS %s %s ;\n", value1, value2); + } else + encPrint(lefwFile, (char*) " CLASS %s ;\n", value1); + } else if (strcmp(value1, "PAD") == 0) { + if (value2) { + if (strcmp(value2, "INPUT") && strcmp(value2, "OUTPUT") && + strcmp(value2, "INOUT") && strcmp(value2, "POWER") && + strcmp(value2, "SPACER") && strcmp(value2, "AREAIO")) + return LEFW_BAD_DATA; + encPrint(lefwFile, (char*) " CLASS %s %s ;\n", value1, value2); + } else + encPrint(lefwFile, (char*) " CLASS %s ;\n", value1); + } else if (strcmp(value1, "CORE") == 0) { + if (value2) { + if (strcmp(value2, "FEEDTHRU") && strcmp(value2, "TIEHIGH") && + strcmp(value2, "TIELOW") && strcmp(value2, "SPACER") && + strcmp(value2, "ANTENNACELL") && strcmp(value2, "WELLTAP")) + return LEFW_BAD_DATA; + encPrint(lefwFile, (char*) " CLASS %s %s ;\n", value1, value2); + } else + encPrint(lefwFile, (char*) " CLASS %s ;\n", value1); + } else if (strcmp(value1, "ENDCAP") == 0) { + if (value2) { + if (strcmp(value2, "PRE") && strcmp(value2, "POST") && + strcmp(value2, "TOPLEFT") && strcmp(value2, "TOPRIGHT") && + strcmp(value2, "BOTTOMLEFT") && strcmp(value2, "BOTTOMRIGHT")) + return LEFW_BAD_DATA; + encPrint(lefwFile, (char*) " CLASS %s %s ;\n", value1, value2); + } else + return LEFW_BAD_DATA; // require 2nd value + } else + return LEFW_BAD_DATA; + } else { + if (strcmp(value1, "RING") == 0) + fprintf(lefwFile, " CLASS %s ;\n", value1); + else if (strcmp(value1, "BLOCK") == 0) { + if (value2) { + if (strcmp(value2, "BLACKBOX") && strcmp(value2, "SOFT")) + return LEFW_BAD_DATA; + fprintf(lefwFile, " CLASS %s %s ;\n", value1, value2); + } else + fprintf(lefwFile, " CLASS %s ;\n", value1); + } else if (strcmp(value1, "COVER") == 0) { + if (value2) { + if (strcmp(value2, "BUMP")) + return LEFW_BAD_DATA; + fprintf(lefwFile, " CLASS %s %s ;\n", value1, value2); + } else + fprintf(lefwFile, " CLASS %s ;\n", value1); + } else if (strcmp(value1, "PAD") == 0) { + if (value2) { + if (strcmp(value2, "INPUT") && strcmp(value2, "OUTPUT") && + strcmp(value2, "INOUT") && strcmp(value2, "POWER") && + strcmp(value2, "SPACER") && strcmp(value2, "AREAIO")) + return LEFW_BAD_DATA; + fprintf(lefwFile, " CLASS %s %s ;\n", value1, value2); + } else + fprintf(lefwFile, " CLASS %s ;\n", value1); + } else if (strcmp(value1, "CORE") == 0) { + if (value2) { + if (strcmp(value2, "FEEDTHRU") && strcmp(value2, "TIEHIGH") && + strcmp(value2, "TIELOW") && strcmp(value2, "SPACER") && + strcmp(value2, "ANTENNACELL") && strcmp(value2, "WELLTAP")) + return LEFW_BAD_DATA; + fprintf(lefwFile, " CLASS %s %s ;\n", value1, value2); + } else + fprintf(lefwFile, " CLASS %s ;\n", value1); + } else if (strcmp(value1, "ENDCAP") == 0) { + if (value2) { + if (strcmp(value2, "PRE") && strcmp(value2, "POST") && + strcmp(value2, "TOPLEFT") && strcmp(value2, "TOPRIGHT") && + strcmp(value2, "BOTTOMLEFT") && strcmp(value2, "BOTTOMRIGHT")) + return LEFW_BAD_DATA; + fprintf(lefwFile, " CLASS %s %s ;\n", value1, value2); + } else + return LEFW_BAD_DATA; // require 2nd value + } else + return LEFW_BAD_DATA; + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroFixedMask() +{ + if (!lefwFile) { + return LEFW_UNINITIALIZED; + } + + if (!lefwDidInit) { + return LEFW_BAD_ORDER; + } + + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) { + return LEFW_BAD_ORDER; + } + + if (versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " FIXEDMASK ;\n"); + } else { + fprintf(lefwFile, " FIXEDMASK ;\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroSource(const char *value1) +{ + lefwObsoleteNum = LEFW_MACRO_SOURCE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + if (!value1 || value1 == 0 || *value1 == 0) + return LEFW_BAD_DATA; + if (strcmp(value1, "USER") == 0 || strcmp(value1, "GENERATE") == 0 || + strcmp(value1, "BLOCK") == 0) + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " SOURCE %s ;\n", value1); + else + fprintf(lefwFile, " SOURCE %s ;\n", value1); + else + return LEFW_BAD_DATA; + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroForeign(const char *name, + double xl, + double yl, + int orient) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " FOREIGN %s ", name); + if (xl || yl) { + encPrint(lefwFile, (char*) "%.11g %.11g ", xl, yl); + if (orient >= 0 && orient <= 7) + encPrint(lefwFile, (char*) "%s ", lefwOrient(orient)); + } else if (orient > 0 && orient <= 7) { // assume user has 0, 0 pt + encPrint(lefwFile, (char*) "%.11g %.11g ", xl, yl); + encPrint(lefwFile, (char*) "%s ", lefwOrient(orient)); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " FOREIGN %s ", name); + if (xl || yl) { + fprintf(lefwFile, "%.11g %.11g ", xl, yl); + if (orient >= 0 && orient <= 7) + fprintf(lefwFile, "%s ", lefwOrient(orient)); + } else if (orient > 0 && orient <= 7) { // assume user has 0, 0 pt + fprintf(lefwFile, "%.11g %.11g ", xl, yl); + fprintf(lefwFile, "%s ", lefwOrient(orient)); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroForeignStr(const char *name, + double xl, + double yl, + const char *orient) +{//optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " FOREIGN %s ", name); + if (xl || yl) { + encPrint(lefwFile, (char*) "%.11g %.11g ", xl, yl); + if (orient && *orient != '\0') + encPrint(lefwFile, (char*) "%s ", orient); + } else if (orient && *orient != '\0') { // assume user has 0, 0 pt + encPrint(lefwFile, (char*) "%.11g %.11g ", xl, yl); + encPrint(lefwFile, (char*) "%s ", orient); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " FOREIGN %s ", name); + if (xl || yl) { + fprintf(lefwFile, "%.11g %.11g ", xl, yl); + if (orient && *orient != '\0') + fprintf(lefwFile, "%s ", orient); + } else if (orient && *orient != '\0') { // assume user has 0, 0 pt + fprintf(lefwFile, "%.11g %.11g ", xl, yl); + fprintf(lefwFile, "%s ", orient); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroOrigin(double xl, + double yl) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " ORIGIN %.11g %.11g ;\n", xl, yl); + else + fprintf(lefwFile, " ORIGIN %.11g %.11g ;\n", xl, yl); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroEEQ(const char *macroName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!macroName || macroName == 0 || *macroName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " EEQ %s ;\n", macroName); + else + fprintf(lefwFile, " EEQ %s ;\n", macroName); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroLEQ(const char *macroName) +{ + lefwObsoleteNum = LEFW_MACRO_LEQ; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + if (!macroName || macroName == 0 || *macroName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " LEQ %s ;\n", macroName); + else + fprintf(lefwFile, " LEQ %s ;\n", macroName); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroSize(double width, + double height) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " SIZE %.11g BY %.11g ;\n", width, height); + else + fprintf(lefwFile, " SIZE %.11g BY %.11g ;\n", width, height); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroSymmetry(const char *symmetry) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!symmetry || symmetry == 0 || *symmetry == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " SYMMETRY %s ;\n", symmetry); + else + fprintf(lefwFile, " SYMMETRY %s ;\n", symmetry); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroSite(const char *siteName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!siteName || siteName == 0 || *siteName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " SITE %s ;\n", siteName); + else + fprintf(lefwFile, " SITE %s ;\n", siteName); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroSitePattern(const char *name, + double origX, + double origY, + int orient, + int numX, + int numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " SITE %s ", name); + if (origX || origY || (orient != 1)) { + encPrint(lefwFile, (char*) "%.11g %.11g %s ", origX, origY, + lefwOrient(orient)); + if (numX || numY || spaceX || spaceY) + encPrint(lefwFile, (char*) "DO %d BY %d STEP %.11g %.11g ", + numX, numY, spaceX, spaceY); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " SITE %s ", name); + if (origX || origY || (orient != 1)) { + fprintf(lefwFile, "%.11g %.11g %s ", origX, origY, lefwOrient(orient)); + if (numX || numY || spaceX || spaceY) + fprintf(lefwFile, "DO %d BY %d STEP %.11g %.11g ", + numX, numY, spaceX, spaceY); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroSitePatternStr(const char *name, + double origX, + double origY, + const char *orient, + int numX, + int numY, + double spaceX, + double spaceY) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " SITE %s ", name); + if (origX || origY || orient) { + encPrint(lefwFile, (char*) "%.11g %.11g %s ", origX, origY, orient); + if (numX || numY || spaceX || spaceY) + encPrint(lefwFile, (char*) "DO %d BY %d STEP %.11g %.11g ", + numX, numY, spaceX, spaceY); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " SITE %s ", name); + if (origX || origY || orient) { + fprintf(lefwFile, "%.11g %.11g %s ", origX, origY, orient); + if (numX || numY || spaceX || spaceY) + fprintf(lefwFile, "DO %d BY %d STEP %.11g %.11g ", + numX, numY, spaceX, spaceY); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPower(double power) +{ + lefwObsoleteNum = LEFW_MACRO_POWER; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " POWER %.11g ;\n", power); + else + fprintf(lefwFile, " POWER %.11g ;\n", power); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwEndMacro(const char *macroName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (!macroName || macroName == 0 || *macroName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "END %s\n\n", macroName); + else + fprintf(lefwFile, "END %s\n\n", macroName); + + lefwLines++; + lefwState = LEFW_MACRO_END; + return LEFW_OK; +} + +int +lefwStartMacroDensity(const char *layerName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (lefwIsMacroDensity) + return LEFW_BAD_ORDER; + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DENSITY %s\n", layerName); + else + fprintf(lefwFile, " DENSITY %s\n", layerName); + + lefwState = LEFW_MACRO; + lefwIsMacroDensity = 1; + lefwLines++; + return LEFW_OK; +} + +int +lefwMacroDensityLayerRect(double x1, + double y1, + double x2, + double y2, + double densityValue) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroDensity) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, + (char*) " RECT %.11g %.11g %.11g %.11g %.11g ;\n", x1, y1, x2, y2, + densityValue); + else + fprintf(lefwFile, + " RECT %.11g %.11g %.11g %.11g %.11g ;\n", x1, y1, x2, y2, + densityValue); + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwEndMacroDensity() +{ + if (!lefwIsMacroDensity) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " END\n\n"); + else + fprintf(lefwFile, " END\n\n"); + + lefwLines++; + lefwIsMacroDensity = 0; + return LEFW_OK; +} + +int +lefwStartMacroPin(const char *pinName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!pinName || pinName == 0 || *pinName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " PIN %s\n", pinName); + else + fprintf(lefwFile, " PIN %s\n", pinName); + + lefwIsMacroPin = 1; + lefwIsMacroPinPort = 0; // port within macropin + lefwLines++; + lefwAMaxAreaCar = 0; // reset + lefwAMaxSideAreaCar = 0; // reset + lefwAMaxCutCar = 0; // reset + return LEFW_OK; +} + + +int +lefwMacroPinTaperRule(const char *ruleName) +{ // opitonal + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!ruleName || ruleName == 0 || *ruleName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " TAPERRULE %s ;\n", ruleName); + else + fprintf(lefwFile, " TAPERRULE %s ;\n", ruleName); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinForeign(const char *name, + double xl, + double yl, + int orient) +{ // optional + lefwObsoleteNum = LEFW_MACRO_PINFOREIGN; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " FOREIGN %s ", name); + if (xl || yl) { + encPrint(lefwFile, (char*) "STRUCTURE %.11g %.11g ", xl, yl); + if (orient >= 0 && orient <= 7) + encPrint(lefwFile, (char*) "%s ", lefwOrient(orient)); + } else if (orient > 0 && orient <= 7) { // assume user has 0 0 for pt + encPrint(lefwFile, (char*) "STRUCTURE %.11g %.11g ", xl, yl); + encPrint(lefwFile, (char*) "%s ", lefwOrient(orient)); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " FOREIGN %s ", name); + if (xl || yl) { + fprintf(lefwFile, "STRUCTURE %.11g %.11g ", xl, yl); + if (orient >= 0 && orient <= 7) + fprintf(lefwFile, "%s ", lefwOrient(orient)); + } else if (orient > 0 && orient <= 7) { // assume user has 0 0 for pt + fprintf(lefwFile, "STRUCTURE %.11g %.11g ", xl, yl); + fprintf(lefwFile, "%s ", lefwOrient(orient)); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinForeignStr(const char *name, + double xl, + double yl, // optional + const char *orient) +{ // optional + lefwObsoleteNum = LEFW_MACRO_PINFOREIGN; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " FOREIGN %s ", name); + if (xl || yl) { + encPrint(lefwFile, (char*) "STRUCTURE %.11g %.11g ", xl, yl); + if (orient && *orient != '\0') + encPrint(lefwFile, (char*) "%s ", orient); + } else if (orient && *orient != '\0') { // assume user has 0 0 for pt + encPrint(lefwFile, (char*) "STRUCTURE %.11g %.11g ", xl, yl); + encPrint(lefwFile, (char*) "%s ", orient); + } + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " FOREIGN %s ", name); + if (xl || yl) { + fprintf(lefwFile, "STRUCTURE %.11g %.11g ", xl, yl); + if (orient && *orient != '\0') + fprintf(lefwFile, "%s ", orient); + } else if (orient && *orient != '\0') { // assume user has 0 0 for pt + fprintf(lefwFile, "STRUCTURE %.11g %.11g ", xl, yl); + fprintf(lefwFile, "%s ", orient); + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinLEQ(const char *pinName) +{ + lefwObsoleteNum = LEFW_MACRO_PINLEQ; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.6) + return LEFW_OBSOLETE; + if (!pinName || pinName == 0 || *pinName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " LEQ %s ;\n", pinName); + else + fprintf(lefwFile, " LEQ %s ;\n", pinName); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinDirection(const char *direction) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!direction || direction == 0 || *direction == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " DIRECTION %s ;\n", direction); + else + fprintf(lefwFile, " DIRECTION %s ;\n", direction); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinUse(const char *use) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!use || use == 0 || *use == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " USE %s ;\n", use); + else + fprintf(lefwFile, " USE %s ;\n", use); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinShape(const char *name) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) { + if (!name || name == 0 || *name == 0) + encPrint(lefwFile, (char*) " SHAPE ;\n"); + else + encPrint(lefwFile, (char*) " SHAPE %s ;\n", name); + } else { + if (!name || name == 0 || *name == 0) + fprintf(lefwFile, " SHAPE ;\n"); + else + fprintf(lefwFile, " SHAPE %s ;\n", name); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinMustjoin(const char *name) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " MUSTJOIN %s ;\n", name); + else + fprintf(lefwFile, " MUSTJOIN %s ;\n", name); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinNetExpr(const char *name) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " NETEXPR \"%s\" ;\n", name); + else + fprintf(lefwFile, " NETEXPR \"%s\" ;\n", name); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinSupplySensitivity(const char *pinName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!pinName || pinName == 0 || *pinName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " SUPPLYSENSITIVITY %s ;\n", pinName); + else + fprintf(lefwFile, " SUPPLYSENSITIVITY %s ;\n", pinName); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinGroundSensitivity(const char *pinName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!pinName || pinName == 0 || *pinName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " GROUNDSENSITIVITY %s ;\n", pinName); + else + fprintf(lefwFile, " GROUNDSENSITIVITY %s ;\n", pinName); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinOutputnoisemargin(int high, + int low) +{ + lefwObsoleteNum = LEFW_MACRO_OUTPUTNOISEMARGIN; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " OUTPUTNOISEMARGIN %d %d ;\n", high, low); + else + fprintf(lefwFile, " OUTPUTNOISEMARGIN %d %d ;\n", high, low); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinOutputresistance(int high, + int low) +{ + lefwObsoleteNum = LEFW_MACRO_OUTPUTRESISTANCE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " OUTPUTRESISTANCE %d %d ;\n", high, low); + else + fprintf(lefwFile, " OUTPUTRESISTANCE %d %d ;\n", high, low); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinInputnoisemargin(int high, + int low) +{ + lefwObsoleteNum = LEFW_MACRO_INPUTNOISEMARGIN; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " INPUTNOISEMARGIN %d %d ;\n", high, low); + else + fprintf(lefwFile, " INPUTNOISEMARGIN %d %d ;\n", high, low); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinPower(double power) +{ + lefwObsoleteNum = LEFW_MACRO_POWER; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " POWER %.11g ;\n", power); + else + fprintf(lefwFile, " POWER %.11g ;\n", power); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinLeakage(double leakage) +{ + lefwObsoleteNum = LEFW_MACRO_LEAKAGE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " LEAKAGE %.11g ;\n", leakage); + else + fprintf(lefwFile, " LEAKAGE %.11g ;\n", leakage); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinCapacitance(double capacitance) +{ + lefwObsoleteNum = LEFW_MACRO_CAPACITANCE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " CAPACITANCE %.11g ;\n", capacitance); + else + fprintf(lefwFile, " CAPACITANCE %.11g ;\n", capacitance); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinResistance(double resistance) +{ + lefwObsoleteNum = LEFW_MACRO_RESISTANCE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RESISTANCE %.11g ;\n", resistance); + else + fprintf(lefwFile, " RESISTANCE %.11g ;\n", resistance); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinPulldownres(double resistance) +{ + lefwObsoleteNum = LEFW_MACRO_PULLDOWNRES; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " PULLDOWNRES %.11g ;\n", resistance); + else + fprintf(lefwFile, " PULLDOWNRES %.11g ;\n", resistance); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinTieoffr(double resistance) +{ + lefwObsoleteNum = LEFW_MACRO_TIEOFFR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " TIEOFFR %.11g ;\n", resistance); + else + fprintf(lefwFile, " TIEOFFR %.11g ;\n", resistance); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinVHI(double voltage) +{ + lefwObsoleteNum = LEFW_MACRO_VHI; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " VHI %.11g ;\n", voltage); + else + fprintf(lefwFile, " VHI %.11g ;\n", voltage); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinVLO(double voltage) +{ + lefwObsoleteNum = LEFW_MACRO_VLO; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " VLO %.11g ;\n", voltage); + else + fprintf(lefwFile, " VLO %.11g ;\n", voltage); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinRisevoltagethreshold(double voltage) +{ + lefwObsoleteNum = LEFW_MACRO_RISEVOLTAGETHRESHOLD; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RISEVOLTAGETHRESHOLD %.11g ;\n", voltage); + else + fprintf(lefwFile, " RISEVOLTAGETHRESHOLD %.11g ;\n", voltage); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinFallvoltagethreshold(double voltage) +{ + lefwObsoleteNum = LEFW_MACRO_FALLVOLTAGETHRESHOLD; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FALLVOLTAGETHRESHOLD %.11g ;\n", voltage); + else + fprintf(lefwFile, " FALLVOLTAGETHRESHOLD %.11g ;\n", voltage); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinRisethresh(double capacitance) +{ + lefwObsoleteNum = LEFW_MACRO_RISETHRESH; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RISETHRESH %.11g ;\n", capacitance); + else + fprintf(lefwFile, " RISETHRESH %.11g ;\n", capacitance); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinFallthresh(double capacitance) +{ + lefwObsoleteNum = LEFW_MACRO_FALLTHRESH; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FALLTHRESH %.11g ;\n", capacitance); + else + fprintf(lefwFile, " FALLTHRESH %.11g ;\n", capacitance); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinRisesatcur(double current) +{ + lefwObsoleteNum = LEFW_MACRO_RISESATCUR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RISESATCUR %.11g ;\n", current); + else + fprintf(lefwFile, " RISESATCUR %.11g ;\n", current); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + +int +lefwMacroPinFallsatcur(double current) +{ + lefwObsoleteNum = LEFW_MACRO_FALLSATCUR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FALLSATCUR %.11g ;\n", current); + else + fprintf(lefwFile, " FALLSATCUR %.11g ;\n", current); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinCurrentsource(const char *name) +{ + lefwObsoleteNum = LEFW_MACRO_FALLCURRENTSOURCE; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (strcmp(name, "ACTIVE") && strcmp(name, "RESISTIVE")) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " CURRENTSOURCE %s ;\n", name); + else + fprintf(lefwFile, " CURRENTSOURCE %s ;\n", name); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinIV_Tables(const char *lowName, + const char *highName) +{ + lefwObsoleteNum = LEFW_MACRO_IV_TABLES; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (!lowName || lowName == 0 || *lowName == 0) + return LEFW_BAD_DATA; + if (!highName || highName == 0 || *highName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " IV_TABLES %s %s ;\n", lowName, highName); + else + fprintf(lefwFile, " IV_TABLES %s %s ;\n", lowName, highName); + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinAntennasize(double value, + const char *layerName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (lefwAntenna54) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNASIZE %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNASIZE %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna53 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaMetalArea(double value, + const char *layerName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAMETALAREA %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAMETALAREA %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaMetalLength(double value, + const char *layerName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (lefwAntenna54) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAMETALLENGTH %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAMETALLENGTH %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna53 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaPartialMetalArea(double value, + const char *layerName) +{ + lefw54Num = LEFW_ANTENNAPARTIALMETALAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAPARTIALMETALAREA %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAPARTIALMETALAREA %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaPartialMetalSideArea(double value, + const char *layerName) +{ + lefw54Num = LEFW_ANTENNAPARTIALMETALSIDEAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, + (char*) " ANTENNAPARTIALMETALSIDEAREA %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAPARTIALMETALSIDEAREA %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaPartialCutArea(double value, + const char *layerName) +{ + lefw54Num = LEFW_ANTENNAPARTIALCUTAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAPARTIALCUTAREA %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAPARTIALCUTAREA %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaDiffArea(double value, + const char *layerName) +{ + lefw54Num = LEFW_ANTENNADIFFAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNADIFFAREA %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNADIFFAREA %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaModel(const char *oxide) +{ + lefw54Num = LEFW_ANTENNAGATEAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAMODEL %s ;\n", oxide); + } else { + fprintf(lefwFile, " ANTENNAMODEL %s ;\n", oxide); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaGateArea(double value, + const char *layerName) +{ + lefw54Num = LEFW_ANTENNAGATEAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAGATEAREA %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAGATEAREA %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaMaxAreaCar(double value, + const char *layerName) +{ + lefw54Num = LEFW_ANTENNAMAXAREACAR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (lefwAMaxAreaCar) + return LEFW_BAD_DATA; // ANTENNAMAXAREACAR has defined + // more than once + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAMAXAREACAR %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAMAXAREACAR %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaMaxSideAreaCar(double value, + const char *layerName) +{ + lefw54Num = LEFW_ANTENNAMAXSIDEAREACAR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (lefwAMaxSideAreaCar) + return LEFW_BAD_DATA; // ANTENNAMAXSIDEAREACAR has + // defined more than once + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAMAXSIDEAREACAR %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAMAXSIDEAREACAR %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwMacroPinAntennaMaxCutCar(double value, + const char *layerName) +{ + lefw54Num = LEFW_ANTENNAMAXCUTCAR; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (lefwAMaxCutCar) + return LEFW_BAD_DATA; // ANTENNAMAXCUTCAR has + // defined more than once + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwAntenna53) + return LEFW_MIX_VERSION_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " ANTENNAMAXCUTCAR %.11g ", value); + if (layerName) + encPrint(lefwFile, (char*) "LAYER %s ", layerName); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " ANTENNAMAXCUTCAR %.11g ", value); + if (layerName) + fprintf(lefwFile, "LAYER %s ", layerName); + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwState = LEFW_MACRO; + lefwAntenna54 = 1; + return LEFW_OK; +} + + +int +lefwEndMacroPin(const char *pinName) +{ + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (!pinName || pinName == 0 || *pinName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " END %s\n\n", pinName); + else + fprintf(lefwFile, " END %s\n\n", pinName); + + lefwLines++; + lefwIsMacroPin = 0; + return LEFW_OK; +} + + +int +lefwStartMacroPinPort(const char *classType) +{ // optional + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPin) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) { + if (classType) { + if (strcmp(classType, "NONE") && strcmp(classType, "CORE")) + return LEFW_BAD_DATA; + encPrint(lefwFile, (char*) " PORT CLASS %s ;\n", classType); + } else + encPrint(lefwFile, (char*) " PORT \n"); + } else { + if (classType) { + if (strcmp(classType, "NONE") && strcmp(classType, "CORE") && + strcmp(classType, "BUMP")) + return LEFW_BAD_DATA; + fprintf(lefwFile, " PORT CLASS %s ;\n", classType); + } else + fprintf(lefwFile, " PORT \n"); + } + + lefwLines++; + lefwIsMacroPinPort = 1; + lefwIsMacroPinPortLayer = 0; + lefwSpacingVal = 0; + lefwWidthVal = 0; + return LEFW_OK; +} + + +int +lefwMacroPinPortLayer(const char *layerName, + double spacing) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPinPort) + return LEFW_BAD_ORDER; + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwWidthVal) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " LAYER %s ", layerName); + if (spacing) + encPrint(lefwFile, (char*) "SPACING %.11g ", spacing); + encPrint(lefwFile, (char*) ";\n "); + } else { + fprintf(lefwFile, " LAYER %s ", layerName); + if (spacing) + fprintf(lefwFile, "SPACING %.11g ", spacing); + fprintf(lefwFile, ";\n "); + } + lefwLines++; + lefwIsMacroPinPortLayer = 1; + lefwSpacingVal = 1; + return LEFW_OK; +} + + +int +lefwMacroPinPortDesignRuleWidth(const char *layerName, + double width) +{ + lefw54Num = LEFW_DESIGNRULEWIDTH; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPinPort) + return LEFW_BAD_ORDER; + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwSpacingVal) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " LAYER %s ", layerName); + if (width) + encPrint(lefwFile, (char*) "DESIGNRULEWIDTH %.11g ", width); + encPrint(lefwFile, (char*) ";\n "); + } else { + fprintf(lefwFile, " LAYER %s ", layerName); + if (width) + fprintf(lefwFile, "DESIGNRULEWIDTH %.11g ", width); + fprintf(lefwFile, ";\n "); + } + lefwLines++; + lefwIsMacroPinPortLayer = 1; + lefwWidthVal = 1; + return LEFW_OK; +} + + +int +lefwMacroPinPortLayerWidth(double width) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPinPortLayer) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " WIDTH %.11g ;\n", width); + else + fprintf(lefwFile, " WIDTH %.11g ;\n", width); + lefwLines++; + lefwIsMacroPinPortLayer = 1; + return LEFW_OK; +} + + +int +lefwMacroPinPortLayerPath(int num_paths, + double *xl, + double *yl, + int numX, + int numY, // optional + double spaceX, + double spaceY, // optional + int mask) +{ // optional + int i, numItem; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPinPortLayer) + return LEFW_BAD_ORDER; + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (numX || numY || spaceX || spaceY) { + if (mask) { + encPrint(lefwFile, (char*) " PATH MASK %d ITERATE ", mask); + } else { + encPrint(lefwFile, (char*) " PATH ITERATE "); + } + for (i = 0; i < num_paths; i++) { + if (i == 0) + encPrint(lefwFile, (char*) "%.11g %.11g\n", xl[i], yl[i]); + else + encPrint(lefwFile, + (char*) " %.11g %.11g\n", xl[i], yl[i]); + lefwLines++; + } + encPrint(lefwFile, (char*) + " DO %d BY %d STEP %.11g %.11g ", numX, numY, spaceX, spaceY); + } else { + if (mask) { + encPrint(lefwFile, (char*) " PATH MASK %d ", mask); + } else { + encPrint(lefwFile, (char*) " PATH "); + } + numItem = 0; + for (i = 0; i < num_paths; i++) { + if (numItem > 5) { + encPrint(lefwFile, (char*) "\n"); + encPrint(lefwFile, + (char*) " %.11g %.11g ", xl[i], yl[i]); + numItem = 0; + lefwLines++; + } else + encPrint(lefwFile, (char*) "%.11g %.11g ", xl[i], yl[i]); + numItem++; + } + } + encPrint(lefwFile, (char*) ";\n"); + } else { + if (numX || numY || spaceX || spaceY) { + if (mask) { + fprintf(lefwFile, " PATH MASK %d ITERATE ", mask); + } else { + fprintf(lefwFile, " PATH ITERATE "); + } + for (i = 0; i < num_paths; i++) { + if (i == 0) + fprintf(lefwFile, "%.11g %.11g\n", xl[i], yl[i]); + else + fprintf(lefwFile, " %.11g %.11g\n", xl[i], yl[i]); + lefwLines++; + } + fprintf(lefwFile, + " DO %d BY %d STEP %.11g %.11g ", numX, numY, spaceX, spaceY); + } else { + if (mask) { + fprintf(lefwFile, " PATH MASK %d ", mask); + } else { + fprintf(lefwFile, " PATH "); + } + numItem = 0; + for (i = 0; i < num_paths; i++) { + if (numItem > 5) { + fprintf(lefwFile, "\n"); + fprintf(lefwFile, " %.11g %.11g ", xl[i], yl[i]); + numItem = 0; + lefwLines++; + } else + fprintf(lefwFile, "%.11g %.11g ", xl[i], yl[i]); + numItem++; + } + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + return LEFW_OK; +} + + +int +lefwMacroPinPortLayerRect(double xl1, + double yl1, + double xl2, + double yl2, + int numX, + int numY, // optional + double spaceX, + double spaceY, // optional + int mask) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPinPortLayer) + return LEFW_BAD_ORDER; + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (numX || numY || spaceX || spaceY) { + if (mask) { + encPrint(lefwFile, + (char*) " RECT MASK %d ITERATE %.11g %.11g %.11g %.11g ", + mask, xl1, yl1, xl2, yl2); + } else { + encPrint(lefwFile, + (char*) " RECT ITERATE %.11g %.11g %.11g %.11g ", + xl1, yl1, xl2, yl2); + } + encPrint(lefwFile, + (char*) "DO %d BY %d STEP %.11g %.11g ", numX, numY, spaceX, + spaceY); + } else { + if (mask) { + encPrint(lefwFile, (char*) + " RECT MASK %d %.11g %.11g %.11g %.11g ", mask, xl1, yl1, xl2, yl2); + } else { + encPrint(lefwFile, (char*) + " RECT %.11g %.11g %.11g %.11g ", xl1, yl1, xl2, yl2); + } + } + encPrint(lefwFile, (char*) ";\n"); + } else { + if (numX || numY || spaceX || spaceY) { + if (mask) { + fprintf(lefwFile, " RECT MASK %d ITERATE %.11g %.11g %.11g %.11g ", + mask, xl1, yl1, xl2, yl2); + } else { + fprintf(lefwFile, " RECT ITERATE %.11g %.11g %.11g %.11g ", + xl1, yl1, xl2, yl2); + } + fprintf(lefwFile, "DO %d BY %d STEP %.11g %.11g ", numX, numY, spaceX, + spaceY); + } else { + if (mask) { + fprintf(lefwFile, + " RECT MASK %d %.11g %.11g %.11g %.11g ", mask, xl1, yl1, xl2, yl2); + } else { + fprintf(lefwFile, + " RECT %.11g %.11g %.11g %.11g ", xl1, yl1, xl2, yl2); + } + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + return LEFW_OK; +} + + +int +lefwMacroPinPortLayerPolygon(int num_polys, + double *xl, + double *yl, + int numX, + int numY, // optional + double spaceX, + double spaceY, // optional + int mask) +{ // optional + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPinPortLayer) + return LEFW_BAD_ORDER; + if (num_polys < 4) + return LEFW_BAD_DATA; // at least 4 points + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (numX || numY || spaceX || spaceY) { + if (mask) { + encPrint(lefwFile, (char*) " POLYGON MASK %d ITERATE ", mask); + } else { + encPrint(lefwFile, (char*) " POLYGON ITERATE "); + } + for (i = 0; i < num_polys; i++) { + if (i == 0) + encPrint(lefwFile, (char*) "%.11g %.11g\n", *xl++, *yl++); + else + encPrint(lefwFile, + (char*) " %.11g %.11g\n", *xl++, *yl++); + lefwLines++; + } + encPrint(lefwFile, (char*) + " DO %d BY %d STEP %.11g %.11g ;\n", + numX, numY, spaceX, spaceY); + } else { + if (mask) { + encPrint(lefwFile, (char*) " POLYGON MASK %d ", mask); + } else { + encPrint(lefwFile, (char*) " POLYGON "); + } + for (i = 0; i < num_polys; i++) { + if (i == 0) + encPrint(lefwFile, (char*) "%.11g %.11g", *xl++, *yl++); + else + encPrint(lefwFile, + (char*) "\n %.11g %.11g", *xl++, *yl++); + lefwLines++; + } + encPrint(lefwFile, (char*) " ;\n"); + } + } else { + if (numX || numY || spaceX || spaceY) { + if (mask) { + fprintf(lefwFile, " POLYGON MASK %d ITERATE ", mask); + } else { + fprintf(lefwFile, " POLYGON ITERATE "); + } + for (i = 0; i < num_polys; i++) { + if (i == 0) + fprintf(lefwFile, "%.11g %.11g\n", *xl++, *yl++); + else + fprintf(lefwFile, " %.11g %.11g\n", *xl++, *yl++); + lefwLines++; + } + fprintf(lefwFile, + " DO %d BY %d STEP %.11g %.11g ;\n", + numX, numY, spaceX, spaceY); + } else { + if (mask) { + fprintf(lefwFile, " POLYGON MASK %d ", mask); + } else { + fprintf(lefwFile, " POLYGON "); + } + for (i = 0; i < num_polys; i++) { + if (i == 0) + fprintf(lefwFile, "%.11g %.11g", *xl++, *yl++); + else + fprintf(lefwFile, "\n %.11g %.11g", *xl++, *yl++); + lefwLines++; + } + fprintf(lefwFile, " ;\n"); + } + } + + lefwLines++; + return LEFW_OK; +} + + +int +lefwMacroPinPortVia(double xl, + double yl, + const char *viaName, + int numX, + int numY, // optional + double spaceX, + double spaceY, // optional + int mask) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroPinPort) + return LEFW_BAD_ORDER; + if (!viaName || viaName == 0 || *viaName == 0) + return LEFW_BAD_DATA; + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (numX || numY || spaceX || spaceY) { + if (mask) { + encPrint(lefwFile, + (char*) " VIA ITERATE MASK %d %.11g %.11g %s ", mask, xl, yl, + viaName); + } else { + encPrint(lefwFile, + (char*) " VIA ITERATE %.11g %.11g %s ", xl, yl, + viaName); + } + encPrint(lefwFile, + (char*) "DO %d BY %d STEP %.11g %.11g ", numX, numY, spaceX, + spaceY); + } else + encPrint(lefwFile, (char*) " VIA %.11g %.11g %s ", xl, yl, viaName); + encPrint(lefwFile, (char*) ";\n"); + } else { + if (numX || numY || spaceX || spaceY) { + if (mask) { + fprintf(lefwFile, + " VIA ITERATE MASK %d %.11g %.11g %s ", mask, xl, yl, viaName); + } else { + fprintf(lefwFile, + " VIA ITERATE %.11g %.11g %s ", xl, yl, viaName); + } + fprintf(lefwFile, "DO %d BY %d STEP %.11g %.11g ", numX, numY, spaceX, + spaceY); + } else { + if (mask) { + fprintf(lefwFile, " VIA MASK %d %.11g %.11g %s ", mask, xl, yl, viaName); + } else { + fprintf(lefwFile, " VIA %.11g %.11g %s ", xl, yl, viaName); + } + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + return LEFW_OK; +} + + +int +lefwEndMacroPinPort() +{ + if (!lefwIsMacroPinPort) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " END\n"); + else + fprintf(lefwFile, " END\n"); + + lefwLines++; + lefwIsMacroPinPort = 0; + return LEFW_OK; +} + + +int +lefwStartMacroObs() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (lefwIsMacroObs) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " OBS\n"); + else + fprintf(lefwFile, " OBS\n"); + + lefwIsMacroObs = 1; + lefwSpacingVal = 0; + lefwWidthVal = 0; + lefwLines++; + return LEFW_OK; +} + + +int +lefwMacroObsLayer(const char *layerName, + double spacing) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroObs) + return LEFW_BAD_ORDER; + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwWidthVal) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " LAYER %s ", layerName); + if (spacing) + encPrint(lefwFile, (char*) "SPACING %.11g ", spacing); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " LAYER %s ", layerName); + if (spacing) + fprintf(lefwFile, "SPACING %.11g ", spacing); + fprintf(lefwFile, ";\n"); + } + lefwLines++; + lefwIsMacroObsLayer = 1; + lefwSpacingVal = 1; + return LEFW_OK; +} + + +int +lefwMacroObsDesignRuleWidth(const char *layerName, + double width) +{ + lefw54Num = LEFW_DESIGNRULEWIDTH; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroObs) + return LEFW_BAD_ORDER; + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwSpacingVal) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " LAYER %s ", layerName); + if (width) + encPrint(lefwFile, (char*) "DESIGNRULEWIDTH %.11g ", width); + encPrint(lefwFile, (char*) ";\n"); + } else { + fprintf(lefwFile, " LAYER %s ", layerName); + if (width) + fprintf(lefwFile, "DESIGNRULEWIDTH %.11g ", width); + fprintf(lefwFile, ";\n"); + } + lefwLines++; + lefwIsMacroObsLayer = 1; + lefwWidthVal = 1; + return LEFW_OK; +} + + +int +lefwMacroExceptPGNet(const char *layerName) +{ + lefw54Num = LEFW_DESIGNRULEWIDTH; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroObs) + return LEFW_BAD_ORDER; + if (!layerName || layerName == 0 || *layerName == 0) + return LEFW_BAD_DATA; + if (lefwSpacingVal) + return LEFW_BAD_DATA; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " LAYER %s EXCEPTPGNET ;\n", layerName); + else + fprintf(lefwFile, " LAYER %s EXCEPTPGNET ;\n", layerName); + lefwLines++; + lefwIsMacroObsLayer = 1; + lefwWidthVal = 1; + return LEFW_OK; +} + + +int +lefwMacroObsLayerWidth(double width) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroObsLayer) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " WIDTH %.11g ;\n", width); + else + fprintf(lefwFile, " WIDTH %.11g ;\n", width); + lefwLines++; + lefwIsMacroObsLayer = 1; + return LEFW_OK; +} + + +int +lefwMacroObsLayerPath(int num_paths, + double *xl, + double *yl, + int numX, + int numY, // optional + double spaceX, + double spaceY, // optional + int mask) +{ // optional + int i, numItem; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroObsLayer) + return LEFW_BAD_ORDER; + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (numX || numY || spaceX || spaceY) { + if (mask) { + encPrint(lefwFile, (char*) " PATH MASK %d ITERATE ", mask); + } else { + encPrint(lefwFile, (char*) " PATH ITERATE "); + } + for (i = 0; i < num_paths; i++) { + if (i == 0) + encPrint(lefwFile, (char*) "%.11g %.11g\n", *xl++, *yl++); + else + encPrint(lefwFile, + (char*) " %.11g %.11g\n", *xl++, *yl++); + lefwLines++; + } + encPrint(lefwFile, (char*) " DO %d BY %d STEP %.11g %.11g ", + numX, numY, spaceX, spaceY); + } else { + if (mask) { + encPrint(lefwFile, (char*) " PATH MASK %d ", mask); + } else { + encPrint(lefwFile, (char*) " PATH "); + } + numItem = 0; + for (i = 0; i < num_paths; i++) { + if (numItem > 5) { + encPrint(lefwFile, (char*) "\n"); + encPrint(lefwFile, (char*) " %.11g %.11g ", xl[i], yl[i]); + numItem = 0; + lefwLines++; + } else + encPrint(lefwFile, (char*) "%.11g %.11g ", xl[i], yl[i]); + numItem++; + } + } + encPrint(lefwFile, (char*) ";\n"); + } else { + if (numX || numY || spaceX || spaceY) { + if (mask) { + fprintf(lefwFile, " PATH MASK %d ITERATE ", mask); + } else { + fprintf(lefwFile, " PATH ITERATE "); + } + for (i = 0; i < num_paths; i++) { + if (i == 0) + fprintf(lefwFile, "%.11g %.11g\n", *xl++, *yl++); + else + fprintf(lefwFile, " %.11g %.11g\n", *xl++, *yl++); + lefwLines++; + } + fprintf(lefwFile, " DO %d BY %d STEP %.11g %.11g ", + numX, numY, spaceX, spaceY); + } else { + if (mask) { + fprintf(lefwFile, " PATH MASK %d ", mask); + } else { + fprintf(lefwFile, " PATH "); + } + numItem = 0; + for (i = 0; i < num_paths; i++) { + if (numItem > 5) { + fprintf(lefwFile, "\n"); + fprintf(lefwFile, " %.11g %.11g ", xl[i], yl[i]); + numItem = 0; + lefwLines++; + } else + fprintf(lefwFile, "%.11g %.11g ", xl[i], yl[i]); + numItem++; + } + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + return LEFW_OK; +} + + +int +lefwMacroObsLayerRect(double xl1, + double yl1, + double xl2, + double yl2, + int numX, + int numY, // optional + double spaceX, + double spaceY, // optional + int mask) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroObsLayer) + return LEFW_BAD_ORDER; + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (numX || numY || spaceX || spaceY) { + if (mask) { + encPrint(lefwFile, + (char*) " RECT MASK %d ITERATE %.11g %.11g %.11g %.11g ", + mask, xl1, yl1, xl2, yl2); + } else { + encPrint(lefwFile, + (char*) " RECT ITERATE %.11g %.11g %.11g %.11g ", + xl1, yl1, xl2, yl2); + } + encPrint(lefwFile, (char*) "DO %d BY %d STEP %.11g %.11g ", + numX, numY, spaceX, spaceY); + } else { + if (mask) { + encPrint(lefwFile, (char*) " RECT MASK %d %.11g %.11g %.11g %.11g ", + mask, xl1, yl1, xl2, yl2); + } else { + encPrint(lefwFile, (char*) " RECT %.11g %.11g %.11g %.11g ", + xl1, yl1, xl2, yl2); + } + } + encPrint(lefwFile, (char*) ";\n"); + } else { + if (numX || numY || spaceX || spaceY) { + if (mask) { + fprintf(lefwFile, " RECT MASK %d ITERATE %.11g %.11g %.11g %.11g ", + mask, xl1, yl1, xl2, yl2); + } else { + fprintf(lefwFile, " RECT ITERATE %.11g %.11g %.11g %.11g ", + xl1, yl1, xl2, yl2); + } + fprintf(lefwFile, "DO %d BY %d STEP %.11g %.11g ", numX, numY, spaceX, + spaceY); + } else { + if (mask) { + fprintf(lefwFile, " RECT MASK %d %.11g %.11g %.11g %.11g ", + mask, xl1, yl1, xl2, yl2); + } else { + fprintf(lefwFile, " RECT %.11g %.11g %.11g %.11g ", + xl1, yl1, xl2, yl2); + } + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + return LEFW_OK; +} + + +int +lefwMacroObsLayerPolygon(int num_polys, + double *xl, + double *yl, + int numX, + int numY, // optional + double spaceX, + double spaceY, // optional + int mask) +{ // optional + int i; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroObsLayer) + return LEFW_BAD_ORDER; + if (num_polys < 4) + return LEFW_BAD_DATA; // at least 4 points + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (numX || numY || spaceX || spaceY) { + if (mask) { + encPrint(lefwFile, (char*) " POLYGON MASK %d ITERATE ", mask); + } else { + encPrint(lefwFile, (char*) " POLYGON ITERATE "); + } + for (i = 0; i < num_polys; i++) { + if (i == 0) + encPrint(lefwFile, (char*) "%.11g %.11g\n", *xl++, *yl++); + else + encPrint(lefwFile, (char*) " %.11g %.11g\n", + *xl++, *yl++); + lefwLines++; + } + encPrint(lefwFile, (char*) " DO %d BY %d STEP %.11g %.11g ;", + numX, numY, spaceX, spaceY); + } else { + if (mask) { + encPrint(lefwFile, (char*) " POLYGON MASK %d ", mask); + } else { + encPrint(lefwFile, (char*) " POLYGON "); + } + for (i = 0; i < num_polys; i++) { + if (i == 0) + encPrint(lefwFile, (char*) "%.11g %.11g", *xl++, *yl++); + else + encPrint(lefwFile, + (char*) "\n %.11g %.11g", *xl++, *yl++); + lefwLines++; + } + encPrint(lefwFile, (char*) " ;\n"); + } + } else { + if (numX || numY || spaceX || spaceY) { + if (mask) { + fprintf(lefwFile, " POLYGON MASK %d ITERATE ", mask); + } else { + fprintf(lefwFile, " POLYGON ITERATE "); + } + for (i = 0; i < num_polys; i++) { + if (i == 0) + fprintf(lefwFile, "%.11g %.11g\n", *xl++, *yl++); + else + fprintf(lefwFile, " %.11g %.11g\n", *xl++, *yl++); + lefwLines++; + } + fprintf(lefwFile, " DO %d BY %d STEP %.11g %.11g ;", + numX, numY, spaceX, spaceY); + } else { + if (mask) { + fprintf(lefwFile, " POLYGON MASK %d ", mask); + } else { + fprintf(lefwFile, " POLYGON "); + } + for (i = 0; i < num_polys; i++) { + if (i == 0) + fprintf(lefwFile, "%.11g %.11g", *xl++, *yl++); + else + fprintf(lefwFile, "\n %.11g %.11g", *xl++, *yl++); + lefwLines++; + } + fprintf(lefwFile, " ;\n"); + } + } + + lefwLines++; + return LEFW_OK; +} + + +int +lefwMacroObsVia(double xl, + double yl, + const char *viaName, + int numX, + int numY, // optional + double spaceX, + double spaceY, // optional + int mask) +{ // optional + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroObs) + return LEFW_BAD_ORDER; + if (!viaName || viaName == 0 || *viaName == 0) + return LEFW_BAD_DATA; + if (mask && versionNum < 5.8) { + return LEFW_WRONG_VERSION; + } + + if (!lefwValidateMaskNumber(mask)) { + return LEFW_BAD_DATA; + } + + if (lefwWriteEncrypt) { + if (numX || numY || spaceX || spaceY) { + if (mask) { + encPrint(lefwFile, (char*) " VIA ITERATE MASK %d %.11g %.11g %s ", + mask, xl, yl, viaName); + } else { + encPrint(lefwFile, (char*) " VIA ITERATE %.11g %.11g %s ", + xl, yl, viaName); + } + encPrint(lefwFile, (char*) "DO %d BY %d STEP %.11g %.11g ", + numX, numY, spaceX, + spaceY); + } else { + if (mask) { + encPrint(lefwFile, (char*) " VIA MASK %d %.11g %.11g %s ", mask, xl, yl, viaName); + } else { + encPrint(lefwFile, (char*) " VIA %.11g %.11g %s ", xl, yl, viaName); + } + } + encPrint(lefwFile, (char*) ";\n"); + } else { + if (numX || numY || spaceX || spaceY) { + if (mask) { + fprintf(lefwFile, " VIA ITERATE MASK %d %.11g %.11g %s ", mask, xl, yl, viaName); + } else { + fprintf(lefwFile, " VIA ITERATE %.11g %.11g %s ", xl, yl, viaName); + } + fprintf(lefwFile, "DO %d BY %d STEP %.11g %.11g ", numX, numY, spaceX, + spaceY); + } else { + if (mask) { + fprintf(lefwFile, " VIA MASK %d %.11g %.11g %s ", mask, xl, yl, viaName); + } else { + fprintf(lefwFile, " VIA %.11g %.11g %s ", xl, yl, viaName); + } + } + fprintf(lefwFile, ";\n"); + } + + lefwLines++; + lefwIsMacroObsLayer = 0; + return LEFW_OK; +} + + +int +lefwEndMacroObs() +{ + if (!lefwIsMacroObs) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " END\n"); + else + fprintf(lefwFile, " END\n"); + + lefwLines++; + lefwIsMacroObs = 0; + return LEFW_OK; +} + + +int +lefwStartMacroTiming() +{ + lefwObsoleteNum = LEFW_MACRO_TIMING; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_MACRO_START && + lefwState != LEFW_MACRO) + return LEFW_BAD_ORDER; + if (lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (versionNum >= 5.4) + return LEFW_OBSOLETE; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " TIMING\n"); + else + fprintf(lefwFile, " TIMING\n"); + + lefwIsMacroTiming = 1; + lefwIsMacroTimingModel = 0; + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingPin(const char *fromPin, + const char *toPin) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (fromPin) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FROMPIN %s ;\n", fromPin); + else + fprintf(lefwFile, " FROMPIN %s ;\n", fromPin); + lefwLines++; + } + if (toPin) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " TOPIN %s ;\n", toPin); + else + fprintf(lefwFile, " TOPIN %s ;\n", toPin); + lefwLines++; + } + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingIntrinsic(const char *riseFall, + double min, + double max, + double slewT1, + double slewT1Min, // optional + double slewT1Max, + double slewT2, // optional + double slewT2Min, + double slewT2Max, // optional + double slewT3, // optional + double varMin, + double varMax) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (strcmp(riseFall, "RISE") && strcmp(riseFall, "FALL")) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) { + encPrint(lefwFile, (char*) " %s INTRINSIC %.11g %.11g ", + riseFall, min, max); + if (slewT1 || slewT1Min || slewT1Max || slewT2) { + encPrint(lefwFile, (char*) "%.11g %.11g %.11g %.11g ", + slewT1, slewT1Min, slewT1Max, slewT2); + if (slewT2Min || slewT2Max || slewT3) + encPrint(lefwFile, (char*) "%.11g %.11g %.11g \n", + slewT2Min, slewT2Max, slewT3); + } else if (slewT2Min || slewT2Max || slewT3) + return LEFW_BAD_DATA; // slewT2Min... has to be inside of slewT1... + encPrint(lefwFile, (char*) " VARIABLE %.11g %.11g ;\n", + varMin, varMax); + } else { + fprintf(lefwFile, " %s INTRINSIC %.11g %.11g ", riseFall, min, max); + if (slewT1 || slewT1Min || slewT1Max || slewT2) { + fprintf(lefwFile, "%.11g %.11g %.11g %.11g ", + slewT1, slewT1Min, slewT1Max, slewT2); + if (slewT2Min || slewT2Max || slewT3) + fprintf(lefwFile, "%.11g %.11g %.11g \n", + slewT2Min, slewT2Max, slewT3); + } else if (slewT2Min || slewT2Max || slewT3) + return LEFW_BAD_DATA; // slewT2Min... has to be inside of slewT1... + fprintf(lefwFile, " VARIABLE %.11g %.11g ;\n", varMin, varMax); + } + lefwLines++; + return LEFW_OK; +} + + +// Obsolete in 5.4 +int +lefwMacroTimingRisers(double min, + double max) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RISERS %.11g %.11g ;\n", min, max); + else + fprintf(lefwFile, " RISERS %.11g %.11g ;\n", min, max); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingFallrs(double min, + double max) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FALLRS %.11g %.11g ;\n", min, max); + else + fprintf(lefwFile, " FALLRS %.11g %.11g ;\n", min, max); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingRisecs(double min, + double max) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RISECS %.11g %.11g ;\n", min, max); + else + fprintf(lefwFile, " RISECS %.11g %.11g ;\n", min, max); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingFallcs(double min, + double max) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FALLCS %.11g %.11g ;\n", min, max); + else + fprintf(lefwFile, " FALLCS %.11g %.11g ;\n", min, max); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingRisesatt1(double min, + double max) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RISESATT1 %.11g %.11g ;\n", min, max); + else + fprintf(lefwFile, " RISESATT1 %.11g %.11g ;\n", min, max); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingFallsatt1(double min, + double max) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FALLSATT1 %.11g %.11g ;\n", min, max); + else + fprintf(lefwFile, " FALLSATT1 %.11g %.11g ;\n", min, max); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingRiset0(double min, + double max) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " RISET0 %.11g %.11g ;\n", min, max); + else + fprintf(lefwFile, " RISET0 %.11g %.11g ;\n", min, max); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingFallt0(double min, + double max) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " FALLT0 %.11g %.11g ;\n", min, max); + else + fprintf(lefwFile, " FALLT0 %.11g %.11g ;\n", min, max); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwMacroTimingUnateness(const char *unateness) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (strcmp(unateness, "INVERT") && strcmp(unateness, "NONINVERT") && + strcmp(unateness, "NONUNATE")) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " UNATENESS %s ; \n", unateness); + else + fprintf(lefwFile, " UNATENESS %s ; \n", unateness); + lefwLines++; + return LEFW_OK; +} + +// Obsolete in 5.4 +int +lefwEndMacroTiming() +{ + if (!lefwIsMacroTiming) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " END TIMING\n\n"); + else + fprintf(lefwFile, " END TIMING\n\n"); + + lefwLines++; + lefwIsMacroTiming = 0; + return LEFW_OK; +} + + +int +lefwAntenna(const char *type, + double value) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (!type || type == 0 || *type == 0) + return LEFW_BAD_DATA; + if (strcmp(type, "INPUTPINANTENNASIZE") && + strcmp(type, "OUTPUTPINANTENNASIZE") && + strcmp(type, "INOUTPINANTENNASIZE")) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "%s %.11g ;\n", type, value); + else + fprintf(lefwFile, "%s %.11g ;\n", type, value); + + lefwLines++; + lefwSynArray[LEFW_ANTENNASIZE] = 1; + return LEFW_OK; +} + + +int +lefwAntennaInputGateArea(double inputGateArea) +{ + lefw54Num = LEFW_ANTENNAINPUTGATEAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_ANTENNAINPUTGATEAREA]) + return LEFW_ALREADY_DEFINED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "ANTENNAINPUTGATEAREA %.11g ;\n", + inputGateArea); + else + fprintf(lefwFile, "ANTENNAINPUTGATEAREA %.11g ;\n", inputGateArea); + lefwLines++; + lefwSynArray[LEFW_ANTENNAINPUTGATEAREA] = 1; + return LEFW_OK; +} + +int +lefwAntennaInOutDiffArea(double inOutDiffArea) +{ + lefw54Num = LEFW_ANTENNAINOUTDIFFAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_ANTENNAINOUTDIFFAREA]) + return LEFW_ALREADY_DEFINED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "ANTENNAINOUTDIFFAREA %.11g ;\n", + inOutDiffArea); + else + fprintf(lefwFile, "ANTENNAINOUTDIFFAREA %.11g ;\n", inOutDiffArea); + lefwLines++; + lefwSynArray[LEFW_ANTENNAINOUTDIFFAREA] = 1; + return LEFW_OK; +} + +int +lefwAntennaOutputDiffArea(double outputDiffArea) +{ + lefw54Num = LEFW_ANTENNAOUTPUTDIFFAREA; + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_INIT && lefwState < LEFW_END) + return LEFW_BAD_ORDER; // not of the ENDs + if (lefwSynArray[LEFW_ANTENNAOUTPUTDIFFAREA]) + return LEFW_ALREADY_DEFINED; + if (versionNum < 5.4) + return LEFW_WRONG_VERSION; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "ANTENNAOUTPUTDIFFAREA %.11g ;\n", + outputDiffArea); + else + fprintf(lefwFile, "ANTENNAOUTPUTDIFFAREA %.11g ;\n", outputDiffArea); + lefwLines++; + lefwSynArray[LEFW_ANTENNAOUTPUTDIFFAREA] = 1; + return LEFW_OK; +} + +int +lefwStartBeginext(const char *name) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState == LEFW_BEGINEXT_START || + lefwState == LEFW_BEGINEXT) + return LEFW_BAD_ORDER; + if (!name || name == 0 || *name == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "BEGINEXT \"%s\"", name); + // \n will be added later + else + fprintf(lefwFile, "BEGINEXT \"%s\"", name); + + lefwState = LEFW_BEGINEXT_START; + lefwLines++; + return LEFW_OK; +} + + +int +lefwBeginextCreator(const char *creatorName) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_BEGINEXT_START && + lefwState != LEFW_BEGINEXT) + return LEFW_BAD_ORDER; + if (!creatorName || creatorName == 0 || *creatorName == 0) + return LEFW_BAD_DATA; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n CREATOR \"%s\"", creatorName); + else + fprintf(lefwFile, "\n CREATOR \"%s\"", creatorName); + + lefwState = LEFW_BEGINEXT; + lefwLines++; + return LEFW_OK; +} + + +int +lefwBeginextDate() +{ + time_t todayTime; + char *rettime; + + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_BEGINEXT_START && + lefwState != LEFW_BEGINEXT) + return LEFW_BAD_ORDER; + + todayTime = time(NULL); // time in UTC + rettime = ctime(&todayTime); // convert to string + rettime[strlen(rettime) - 1] = '\0'; // replace \n with \0 + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n DATE \"%s\"", rettime); + else + fprintf(lefwFile, "\n DATE \"%s\"", rettime); + + lefwState = LEFW_BEGINEXT; + lefwLines++; + return LEFW_OK; +} + + +int +lefwBeginextRevision(int vers1, + int vers2) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_BEGINEXT_START && + lefwState != LEFW_BEGINEXT) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n REVISION %d.%d", vers1, vers2); + else + fprintf(lefwFile, "\n REVISION %d.%d", vers1, vers2); + + lefwState = LEFW_BEGINEXT; + lefwLines++; + return LEFW_OK; +} + + +int +lefwBeginextSyntax(const char *title, + const char *string) +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_BEGINEXT_START && + lefwState != LEFW_BEGINEXT) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "\n - %s %s", title, string); + else + fprintf(lefwFile, "\n - %s %s", title, string); + + lefwState = LEFW_BEGINEXT; + lefwLines++; + return LEFW_OK; +} + + +int +lefwEndBeginext() +{ + if (!lefwFile) + return LEFW_UNINITIALIZED; + if (!lefwDidInit) + return LEFW_BAD_ORDER; + if (lefwState != LEFW_BEGINEXT_START && + lefwState != LEFW_BEGINEXT) + return LEFW_BAD_ORDER; + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) ";\nENDEXT\n\n"); + else + fprintf(lefwFile, ";\nENDEXT\n\n"); + + lefwState = LEFW_BEGINEXT_END; + lefwLines++; + return LEFW_OK; +} + + +int +lefwCurrentLineNumber() +{ + return lefwLines; +} + +void +lefwPrintError(int status) +{ + switch (status) { + case LEFW_OK: + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "No Error.\n"); + else + fprintf(lefwFile, "No Error.\n"); + break; + case LEFW_UNINITIALIZED: + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "Need to call lefwInit first.\n"); + else + fprintf(lefwFile, "Need to call lefwInit first.\n"); + break; + case LEFW_BAD_ORDER: + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "Incorrect order of data.\n"); + else + fprintf(lefwFile, "Incorrect order of data.\n"); + break; + case LEFW_BAD_DATA: + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "Invalid data.\n"); + else + fprintf(lefwFile, "Invalid data.\n"); + break; + case LEFW_ALREADY_DEFINED: + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "Section is allowed to define only once.\n"); + else + fprintf(lefwFile, "Section is allowed to define only once.\n"); + break; + case LEFW_WRONG_VERSION: + if (lefwWriteEncrypt) + encPrint(lefwFile, + (char*) "Version number is set before 5.4, API: %s is for 5.4.\n", + lefwStateStr[lefw54Num]); + else + fprintf(lefwFile, "Version number is set before 5.4, but 5.4, API: %s is for 5.4.\n", lefwStateStr[lefw54Num]); + break; + case LEFW_MIX_VERSION_DATA: + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "You have made both 5.4 & pre 5.4 Antenna API called, which is invalid.\n"); + + else + fprintf(lefwFile, "You have made both 5.4 & pre 5.4 Antenna API called, which is invalid.\n"); + break; + case LEFW_OBSOLETE: + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "%s is no longer valid in %g.\n", + lefwStateStr[lefwObsoleteNum], versionNum); + + else + fprintf(lefwFile, "%s is no longer valid in %g.\n", + lefwStateStr[lefwObsoleteNum], versionNum); + } + return; +} + +void +lefwAddComment(const char *comment) +{ + if (comment) { + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) "# %s\n", comment); + else + fprintf(lefwFile, "# %s\n", comment); + } + return; +} + +void +lefwAddIndent() +{ + if (lefwWriteEncrypt) + encPrint(lefwFile, (char*) " "); + else + fprintf(lefwFile, " "); + return; +} + +// *************************** +// Questions: +// - Is only one row rule allowed +// - Is only one tracks rule allowed +// - In the die area is a zero area allowed? overlaps? +// - What type of checking is needed for the rows and tracks do loop? +// - Can you have a default prop with a number AND a range? +// - What is the pin properties section mentioned in the 5.1 spec? +// ***************************** + +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefwWriter.hpp b/lefdef/src/lef/lef/lefwWriter.hpp new file mode 100644 index 00000000..0e378025 --- /dev/null +++ b/lefdef/src/lef/lef/lefwWriter.hpp @@ -0,0 +1,2374 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef LEFW_WRITERCALLS_H +#define LEFW_WRITERCALLS_H + +#include + +#include "lefiKRDefs.hpp" +#include "lefiDefs.hpp" +#include "lefiUser.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +// Return codes for writing functions: +#define LEFW_OK 0 +#define LEFW_UNINITIALIZED 1 +#define LEFW_BAD_ORDER 2 +#define LEFW_BAD_DATA 3 +#define LEFW_ALREADY_DEFINED 4 +#define LEFW_WRONG_VERSION 5 +#define LEFW_MIX_VERSION_DATA 6 +#define LEFW_OBSOLETE 7 + +// orient +// 0 = N +// 1 = W +// 2 = S +// 3 = E +// 4 = FN +// 5 = FW +// 6 = FS +// 7 = FE + +// The LEF writer initialization. Must be called first. +// Either this routine or lefwInitCbk should be call only, +// Can't call both routines. +// This routine must be called only once. +// Returns 0 if successful. +extern int lefwInit(FILE* f); + +// The LEF writer initialization. Must be called first. +// Either this routine or lefwInit should be call only, +// Can't call both routines. +// This routine must be called only once. +// Returns 0 if successful. +extern int lefwInitCbk(FILE* f); + +// This routine will set the writer to write out an encrypted +// lef file. +// This routine must be called only once and has to be called after +// lefwInit or lefwInitCbk +// Need to call lefwCloseEncrypt to do some cleaning if this routine +// has called +extern int lefwEncrypt(); + +// This routine needs to be called if lefwEncrypt has called. +// It should be called before the fclose. +// It does some house cleaning. +extern int lefwCloseEncrypt(); + +// This routine will write a blank line + +extern int lefwNewLine(); + +// This routine is called after lefwInit. +// This routine can be called only once. +// Returns 0 if successful. +extern int lefwVersion (int vers1, int vers2); + +// This routine is called after lefwInit. +// This routine can be called only once. +// Returns 0 if successful. +// The caseSensitive can be ON or OFF. +extern int lefwCaseSensitive (const char* caseSensitive); + +// This routine is called after lefwInit. +// This routine can be called only once. +// Returns 0 if successful. +// The noWireExtensionAtPin can be ON or OFF. +extern int lefwNoWireExtensionAtPin (const char* noWireExt); + +// This routine is called after lefwInit. +// This routine can be called only once. +// Returns 0 if successful. +// already have one +extern int lefwMinfeature (double minFeatureX, double minFeatureY); + +// This routine is called after lefwInit. +// This routine can be called only once. +// Returns 0 if successful. +extern int lefwDielectric (double dielectric); + +// This routine is called after lefwInit. +// This routine can be called only once. +// Returns 0 if successful. +extern int lefwBusBitChars (const char* busBitChars); + +// This routine is called after lefwInit. +// This routine can be called only once. +// Returns 0 if successful. +extern int lefwDividerChar (const char* dividerChar); + +// This routine is called after lefwInit. +// This routine can be called only once. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwManufacturingGrid (double grid); + +// This routine is called after lefwInit. +// This routine can be called only once. +// This is a 5.8 syntax. +// Returns 0 if successful. +extern int lefwFixedMask(); + +// This routine is called after lefwInit. +// This routine can be called multiple times. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwUseMinSpacing (const char* type, const char* onOff); + +// This routine is called after lefwInit. +// This routine can be called only once. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwClearanceMeasure (const char* type); + +// This routine is called after lefwInit. +// This routine can be called only once. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwAntennaInputGateArea (double inputGateArea); + +// This routine is called after lefwInit. +// This routine can be called only once. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwAntennaInOutDiffArea (double inOutDiffArea); + +// This routine is called after lefwInit. +// This routine can be called only once. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwAntennaOutputDiffArea (double outputDiffArea); + +// This routine is called after lefwInit. +// This routine can be called only once. +// Returns 0 if successful. +// This section of routines is optional. +// The routine starts the units section. All of the units must follow. +extern int lefwStartUnits(); + +// This routine is called once for each unit. The call must +// be preceeded by a call to lefwStartUnits and must be +// terminated by a call to lefwEndUnits. +// Returns 0 if successful. +extern int lefwUnits(double time, // optional(0) - TIME NANOSECONDS + double capacitance, // optional(0) - CAPACITANCE PICOFARADS + double resistance, // optional(0) - RESISTANCE OHMS + double power, // optional(0) - POWER MILLIWATTS + double current, // optional(0) - CURRENT MILLIAMPS + double voltage, // optional(0) - VOLTAGE VOLTS + double database); // optional(0) - DATABASE MICRONS + +// This routine is called once for each unit. It is separated from +// lefwUnits due to backwards compatible for pre 5.3. +// Returns 0 if successful. +extern int lefwUnitsFrequency(double frequency); + +// This routine must be called after the lefwUnits call (if any). +// The routine can be called only once. +// Returns 0 if successful. +extern int lefwEndUnits(); + +// This routine is called after lefwInit. +// Either this routine or lefwStartLayerRouting must be called. +// Multiple sections of lefwStartLayer can be called. +// This routine can be called only once per section. +// Returns 0 if successful. +// The routine starts the layer section. All of the layers must follow. +// The type can be either CUT for Cut Layer, MASTERSLICE or OVERLAP for +// Masterslice or Overlay Layer. +extern int lefwStartLayer(const char* layerName, + const char* type); // CUT | MASTERSLICE | OVERLAP + +// This routine must be called after lefwStartLayer. +// This section of routines is optional. +// Returns 0 if successful. +// This is a 5.8 syntax. +extern int lefwLayerMask(int maskColor); + +// This routine must be called after lefwStartLayer. +// This section of routines is optional. +// Returns 0 if successful. +// This is a 5.5 syntax. +// This routine is called if the layer type is IMPLANT when +// lefwStartLayer is called. +extern int lefwLayerWidth(double minWidth); + +// The following APIs are for lefwrite 5.7 Layer, Spacing with type CUT +// Due to adding new constructs, it is impossible to use the previous +// APIs. +// The following APIs are obsoleted in 5.7: +// lefwLayer +// lefwLayerStack +// lefwLayerSpacingAdjacent +// lefwLayerSpacingCenterToCenter + +// This routine must be called after lefwStartLayer. +// This routine starts the Layer Type Cut Spacing +// Returns 0 if successful. +// The routing lefwLayerCutSpacingEnd has to call at the end of each spacing. +// This is a 5.7 syntax. +extern int lefwLayerCutSpacing(double spacing) ; + +// This routine must be called after lefwLayerSpacing +// This routine is optional. +// Returns 0 if successful. +// This is a 5.7 syntax. +extern int lefwLayerCutSpacingCenterToCenter(); + +// This routine must be called after lefwLayerSpacing +// This routine is optional. +// Returns 0 if successful. +// This is a 5.7 syntax. +extern int lefwLayerCutSpacingSameNet(); + +// This routine must be called after lefwLayerSpacing +// This routine is optional. +// Either this routine, lefwLayerCutSpacingAdjacent, +// lefwLayerCutSpacingParallel or lefwLayerCutSpacingArea is called per Spacing. +// Returns 0 if successful. +// This is a 5.7 syntax. +extern int lefwLayerCutSpacingLayer(const char* name2, + int stack); // optional(0) + +// This routine must be called after lefwLayerSpacing +// This routine is optional. +// Either this routine, lefwLayerCutSpacingLayer, +// lefwLayerCutSpacingParallel or lefwLayerCutSpacingArea is called per Spacing. +// Returns 0 if successful. +// This is a 5.7 syntax. +extern int lefwLayerCutSpacingAdjacent(int viaCuts, // either 2, 3, or 4, opt + double distance, + int stack); // optional(0) + +// This routine must be called after lefwLayerSpacing +// This routine is optional. +// Either this routine, lefwLayerCutSpacingLayer, +// lefwLayerCutSpacingAdjacent or lefwLayerCutSpacingArea is called per Spacing. +// Returns 0 if successful. +// This is a 5.7 syntax. +extern int lefwLayerCutSpacingParallel(); + +// This routine must be called after lefwLayerSpacing +// This routine is optional. +// Either this routine, lefwLayerCutSpacingLayer, * lefwLayerCutSpacingAdjacent +// or lefwLayerCutSpacingParallel is called per Spacing. +// Returns 0 if successful. +// This is a 5.7 syntax. +extern int lefwLayerCutSpacingArea(double cutArea); + +// This routine must be called after lefwLayerSpacing +// This routine marks the end of a Layer Type CUT Spacing +// Returns 0 if successful. +// This is a 5.7 syntax. +extern int lefwLayerCutSpacingEnd(); + +// This routine must be called after lefwStartLayer. +// This routine can be called only once. +// This section of routines is optional. +// This is a 5.7 syntax +// Returns 0 if successful. +// This routine is called if the layer type is CUT when +// lefwStartLayer is called. +extern int lefwLayerCutSpacingTableOrtho(int numSpacing, + double* cutWithins, + double* orthoSpacings); + +// This routine must be called after lefwStartLayer. +// This routine can be called only once. +// This section of routines is optional. +// This is a 5.7 syntax +// Returns 0 if successful. +// This routine is called if the layer type is CUT when +// lefwStartLayer is called. +extern int lefwLayerArraySpacing(int longArray, // optional (0) + double viaWidth, // optional (0) + double cutSpacing, + int numArrayCut, + int* arrayCuts, double* arraySpacings); + +// This routine must be called after lefwStartLayer. +// This routine can be called multiple times. +// This section of routines is optional. +// This is a 5.6 syntax. +// Returns 0 if successful. +// This routine is called if the layer type is CUT when +// lefwStartLayer is called. +extern int lefwLayerEnclosure(const char* location, //ABOVE|BELOW, optional "" + double overhang1, + double overhang2, + double width); // optional (0) + +// This routine must be called after lefwStartLayer. +// This routine can be called multiple times. +// This routine is similar as lefwLayerEnclosure, but allow user to add +// EXCEPTEXTRACUT option +// This section of routines is optional. +// This is a 5.7 syntax. +// Returns 0 if successful. +// This routine is called if the layer type is CUT when +// lefwStartLayer is called. +extern int lefwLayerEnclosureWidth( + const char* location, //ABOVE|BELOW, optional "" + double overhang1, + double overhang2, + double width, // optional (0) + double cutWithin); // optional (0) + +// This routine must be called after lefwStartLayer. +// This routine can be called multiple times. +// This routine is to write out minLength inside ENCLOSURE instead of WIDTH +// as in the routine lefwLayerEnclosure & lefwLayerEnclosureWidth. +// This section of routines is optional. +// This is a 5.7 syntax. +// Returns 0 if successful. +// This routine is called if the layer type is CUT when +// lefwStartLayer is called. +extern int lefwLayerEnclosureLength( + const char* location, //ABOVE|BELOW, optional "" + double overhang1, + double overhang2, + double minLength); // optional (0) + +// This routine must be called after lefwStartLayer. +// This routine can be called multiple times. +// This section of routines is optional. +// This is a 5.6 syntax. +// Returns 0 if successful. +// This routine is called if the layer type is CUT when +// lefwStartLayer is called. +extern int lefwLayerPreferEnclosure( + const char* location, //ABOVE|BELOW, optional "" + double overhang1, + double overhang2, + double width); // optional (0) + +// This routine must be called after lefwStartLayer. +// This routine can be called only once per Layer. +// This section of routines is optional. +// This is a 5.6 syntax. +// Returns 0 if successful. +// This routine is called if the layer type is CUT when +// lefwStartLayer is called. +extern int lefwLayerResistancePerCut(double resistance); + +// This routine must be called after the lefwStartLayer call (if any). +// The routine can be called only once per section. +// Returns 0 if successful. +extern int lefwEndLayer(const char* layerName); + +// This routine is called after lefwInit. +// Either this routine or lefwStartLayer must be called. +// Multiple section of lefwStartLayer can be called. +// The routine can be called only once per section. +// Returns 0 if successful. +// The routine starts the layer routing section. +// All of the layers must follow. +extern int lefwStartLayerRouting(const char* layerName); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is required for LayerRouting. +// Returns 0 if successful. +extern int lefwLayerRouting(const char* direction, // HORIZONTAL | VERTICAL | + // DIAG45 | DIAG135 + double width); + +// This routine must be called only once after lefwStartLayerRouting. +// Either this routine or lefwLayerRoutingPitchXYDistance can be called +// but not both +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingPitch(double pitch); + +// This routine must be called only once after lefwStartLayerRouting. +// Either this routine or lefwLayerRoutingPitch can be called but not both +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingPitchXYDistance(double xDistance, double yDistance); + +// This routine must be called only once after lefwStartLayerRouting. +// Either this routine or lefwLayerRoutingDiagPitchXYDistance can be called +// but not both +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingDiagPitch(double distance); + +// This routine must be called only once after lefwStartLayerRouting. +// Either this routine or lefwLayerRoutingDiagPitch can be called +// but not both +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingDiagPitchXYDistance(double diag45Distance, + double diag135Distance); + +// This routine must be called only once after lefwStartLayerRouting. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingDiagWidth(double diagWidth); + +// This routine must be called only once after lefwStartLayerRouting. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingDiagSpacing(double diagSpacing); + +// This routine must be called only once after lefwStartLayerRouting. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingDiagMinEdgeLength(double diagLength); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Either this routine or lefwLayerRoutingOffsetXYDistance can be called +// but not both +// Returns 0 if successful. +extern int lefwLayerRoutingOffset(double offset); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Either this routine or lefwLayerRoutingOffset can be called but not both +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingOffsetXYDistance(double xDistance, double yDistance); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingArea(double area); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingMinsize(int numRect, double* minWidth, + double* minLength); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingMinimumcut(double numCuts, double minWidth); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is similar as lefwLayerRoutingMinimumcut, but allow user +// to specify value for WITHIN +// This is a 5.7 syntax. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingMinimumcutWithin(double numCuts, double minWidth, + double cutDistance); + +// This routine must be called only once after lefwLayerRoutingMinimumcut. +// This routine is optional. +// Direction can be either FROMABOVE or FROMBELOW +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingMinimumcutConnections(const char* direction); + +// This routine must be called only once after lefwLayerRoutingMinimumcut. +// This routine is optional. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingMinimumcutLengthWithin(double length, + double distance); + +// This routine must be called multiple time after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingSpacing(double spacing); + +// Either this routine, lefwLayerRoutingSpacingLengthThreshold or +// lefwLayerRoutingSpacingSameNet can be +// called only once after lefwLayerRoutingSpacing. +// This routine is optional. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingRange(double minWidth, double maxWidth); + +// Either this routine or lefwLayerRoutingSpacingRangeInfluence or +// lefwLayerRoutingSpacingRangeRange can +// be called once after llefwLayerRoutingSpacingRange. +// This routine is valid only if either or both leftRange and rightRange +// in lefwLayerRoutingSpacing are non zero +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingRangeUseLengthThreshold(); + +// Either this routine or lefwLayerRoutingSpacingRangeUseLengthThreshold or +// lefwLayerRoutingSpacingRangeRange can be called once after +// lefwLayerRoutingSpacingRange. +// subMinWidth & subMaxWidth are optional. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingRangeInfluence(double infValue, + double subMinWidth, double subMaxWidth); + +// Either this routine or lefwLayerRoutingSpacingRangeUseLengthThreshold or +// lefwLayerRoutingSpacingRangeInfluence can be called once after +// lefwLayerRoutingSpacingRange. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingRangeRange(double minWidth, double maxWidth); + +// Either this routine, lefwLayerRoutingSpacingRange or +// lefwLayerRoutingSpacingSameNet can be +// be called once after lefwLayerRoutingSpacing. +// minWidth & maxWidth are optional. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingLengthThreshold(double lengthValue, + double minWidth, double maxWidth); + +// Either this routine, lefwLayerRoutingSpacingRange or +// lefwLayerRoutingSpacingRange can be +// be called once after lefwLayerRoutingSpacing. +// This is a 5.7 routine. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingSameNet(int PGOnly) ; // optional (0) + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// This is a 5.7 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingEndOfLine(double eolWidth, double eolWithin); + +// This routine must be called only once after lefwLayerRoutingSpacingEndOfLine +// This routine is optional +// This is a 5.7 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingEOLParallel(double parSpace, double parWithin, + int twoEdges); // optional(0) + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// This is a 5.7 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingNotchLength(double minNLength); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// This is a 5.7 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingEndOfNotchWidth(double eonWidth, + double minNSpacing, double minNLength); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingWireExtension(double wireExtension); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingResistance(const char* resistance); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingCapacitance(const char* capacitance); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingHeight(double height); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingThickness(double thickness); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingShrinkage(double shrinkage); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingCapMultiplier(double capMultiplier); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingEdgeCap(double edgeCap); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingAntennaArea(double antennaArea); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional +// Returns 0 if successful. +extern int lefwLayerRoutingAntennaLength(double antennaLength); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional and can be called once. +// This is a 5.5 syntax. +// width is the maximum width. +// Returns 0 if successful. +extern int lefwLayerRoutingMaxwidth(double width); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional and can be called once. +// This is a 5.5 syntax. +// width is the maximum width. +// Returns 0 if successful. +extern int lefwLayerRoutingMinwidth(double width); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional. +// This is a 5.5 syntax. +// Area is the minimum area size limit for metal that encloses an empty area. +// Width is optional, it says the rule only applies when a donut is careted +// from a wire of width <= width. The parameter width is required for the +// routine lefwLayerRoutineMinenclosedarea. If width is optional, a "0" +// value is assigned for that index slot of the array. +// Returns 0 if successful. +extern int lefwLayerRoutingMinenclosedarea(int numMinenclosed, double* area, + double* width); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional and can be called once. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingMinstep(double distance); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional and can be called once. +// This routine is equivalent to lefwLayerRoutingMinstep, except it also +// takes the options for type & Lengthsum. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingMinstepWithOptions(double distance, + const char* rule, // INSIDECORNER|OUTSIDECORNER|STEP + double maxLength); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional and can be called once. +// This routine is equivalent to lefwLayerRoutingMinstep, except it also +// takes the option for MaxEdges. +// This is a 5.7 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingMinstepMaxEdges(double distance, + double maxEdges); + +// This routine must be called only once after lefwStartLayerRouting. +// This routine is optional and can be called once. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingProtrusion(double width1, double length, + double width2); + +// This routine must be called only after lefwStartLayerRouting. +// This routine is optional and can be called multiple times. +// This is a 5.5 syntax. +// numLength has the size of the array length. +// length is an array of length values. +// Returns 0 if successful. +extern int lefwLayerRoutingStartSpacingtableParallel(int numLength, + double* length); + +// This routine must be called only after +// lefwLayerRoutingStartSpacingtableParallel. +// This routine is required after lefwLayerRoutingStartSpacingtableParallel. +// This routine can be called multiple times. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingtableParallelWidth(double width, + int numSpacing, double* spacing); + +// This routine must be called only after lefwStartLayerRouting. +// This routine is optional and can be called multiple times. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingStartSpacingtableInfluence(); + +// This routine must be called only after +// lefwLayerRoutingStartSpacingtableInfluence. +// This routine is required after lefwLayerRoutingStartSpacingtableInfluence. +// This routine can be called multiple times. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingInfluenceWidth(double width, double distance, + double spacing); + +// This routine must be called only after lefwStartLayerRouting. +// This routine is optional and can be called multiple times. +// This is a 5.7 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingStartSpacingtableTwoWidths(); + +// This routine must be called only after +// lefwLayerRoutingStartSpacingtableInfluence. +// This routine is required after lefwLayerRoutingStartSpacingtableTwoWidths. +// This routine can be called multiple times. +// This is a 5.7 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutingSpacingtableTwoWidthsWidth(double width, + double runLength, // PRL, optional (0) + int numSpacing, + double* spacing); + +// This routine can be called after lefwLayerRoutingStartSpacingtableParallel +// or lefwLayerRoutingStartSpacingtableInfluence. +// It can only be called once. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerRoutineEndSpacingtable(); + +// This routine must be called after the lefwStartLayer call (if any). +// The routine can be called only once per section. +// Returns 0 if successful. +extern int lefwEndLayerRouting(const char* layerName); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called multiple times. +// if the value for the variable value is not 0, one of the following +// routines have to be called: lefwLayerACFrequency, +// lefwLayerACWidth, lefwLayerACCutarea, or +// lefwLayerACTableEntries +// Returns 0 if successful. +extern int lefwLayerACCurrentDensity(const char* type, double value); + +// This routine must be called after lefwLayerACCurrentDensity. +// This routine is required and can be called only once after each +// lefwLayerACCurrentDensity. +// Returns 0 if successful. +extern int lefwLayerACFrequency(int numFrequency, double* frequency); + +// This routine must be called after lefwLayerACCurrentDensity. +// This routine is optional and can be called only once after each +// lefwLayerACCurrentDensity. +// This routine can only be called in Layer Routing +// Returns 0 if successful. +extern int lefwLayerACWidth(int numWidths, double* widths); + +// This routine must be called after lefwLayerACCurrentDensity. +// This routine is optional and can be called only once after each +// lefwLayerACCurrentDensity. +// This routine can only be called in Layer +// Returns 0 if successful. +extern int lefwLayerACCutarea(int numCutareas, double* cutareas); + +// This routine must be called after lefwLayerACCurrentDensity. +// This routine is required and can be called only once after each +// lefwLayerACCurrentDensity. +// Returns 0 if successful. +extern int lefwLayerACTableEntries(int numEntries, double* entries); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called multiple times. +// if the value for the variable value is not 0, one of the following +// routines have to be called: lefwLayerDCWidth, lefwLayerDCCutarea, or +// lefwLayerDCTableEntries +// Returns 0 if successful. +extern int lefwLayerDCCurrentDensity(const char* type, double value); + +// This routine must be called after lefwLayerDCCurrentDensity. +// This routine is optional and can be called only once after each +// lefwLayerDCCurrentDensity. +// This routine can only be called in Layer Routing +// Returns 0 if successful. +extern int lefwLayerDCWidth(int numWidths, double* widths); + +// This routine must be called after lefwLayerDCCurrentDensity. +// This routine is optional and can be called only once after each +// lefwLayerDCCurrentDensity. +// This routine can only be called in Layer +// Returns 0 if successful. +extern int lefwLayerDCCutarea(int numCutareas, double* cutareas); + +// This routine must be called after lefwLayerDCCurrentDensity. +// This routine is required and can be called only once after each +// lefwLayerDCCurrentDensity. +// Returns 0 if successful. +extern int lefwLayerDCTableEntries(int numEntries, double* entries); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional. The oxide value, can be either OXIDE1, OXIDE2, +// OXIDE3, or OXIDE4. Each can only be called once within a layer. +// This routine is valid only if the layer type is either ROUTING or CUT. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwLayerAntennaModel(const char* oxide); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaAreaRatio(double value); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// Either this routine or lefwLayerAntennaDiffAreaRatioPwl can be called, but +// not both +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaDiffAreaRatio(double value); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// Either this routine or lefwLayerAntennaDiffAreaRatio can be called, but +// not both +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaDiffAreaRatioPwl(int numPwls, + double* diffusions, double* ratios); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaCumAreaRatio(double value); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// Either this routine or lefwLayerAntennaCumDiffAreaRatioPwl can be called, +// but not both +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaCumDiffAreaRatio(double value); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// Either this routine or lefwLayerAntennaCumDiffAreaRatio can be called, but +// not both +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaCumDiffAreaRatioPwl(int numPwls, + double* diffusions, double* ratios); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// The option DIFFUSEONLY is a 5.4 syntax. +// If DIFFUSEONLY, lefwLayerRoutingAntennaLength is not allowed. +// This function is similar to lefwLayerRoutingAntennaArea +// diffUseOnly has to be DIFFUSEONLY. +// Returns 0 if successful. +extern int lefwLayerAntennaAreaFactor(double value, + const char* diffUseOnly); // optional(NULL) + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING. +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaSideAreaRatio(double value); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING. +// Either this routine or lefwLayerAntennaDiffSideAreaRatioPwl can be +// called, but not both +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaDiffSideAreaRatio(double value); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// Either this routine or lefwLayerAntennaDiffSideAreaRatio can be called, +// but not both +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaDiffSideAreaRatioPwl(int numPwls, + double* diffusions, double* ratios); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING. +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaCumSideAreaRatio(double value); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING. +// Either this routine or lefwLayerAntennaCumDiffSideAreaRatioPwl can be +// called, but not both +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaCumDiffSideAreaRatio(double value); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// Either this routine or lefwLayerAntennaCumDiffSideAreaRatio can be called, +// but not both +// This is a 5.4 syntax. +// Either this routine or lefwLayerRoutingAntennaLength is allowed, not both. +// Returns 0 if successful. +extern int lefwLayerAntennaCumDiffSideAreaRatioPwl(int numPwls, + double* diffusions, double* ratios); + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING. +// The option DIFFUSEONLY is a 5.4 syntax. +// diffUseOnly has to be DIFFUSEONLY. +// Returns 0 if successful. +extern int lefwLayerAntennaSideAreaFactor(double value, + const char* diffUseOnly); // optional(NULL) + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// This is a 5.7 routine. +// Returns 0 if successful. +extern int lefwLayerAntennaCumRoutingPlusCut() ; + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// This is a 5.7 routine. +// Returns 0 if successful. +extern int lefwLayerAntennaGatePlusDiff(double plusDiffFactor) ; + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// This is a 5.7 routine. +// Returns 0 if successful. +extern int lefwLayerAntennaAreaMinusDiff(double minusDiffFactor) ; + +// This routine must be called after lefwStartLayerRouting or lefwStartLayer. +// This routine is optional and can be called only once within a layer +// after each lefwLayerAntennaModel function. +// This routine is valid only if the layer type is either ROUTING or CUT. +// This is a 5.7 routine. +// Returns 0 if successful. +extern int lefwLayerAntennaAreaDiffReducePwl(int numPwls, + double* diffAreas, double* metalDiffFactors); + +// This routine must be called only once after lefwStartLayer. +// The option MINIMUMDENSITY is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwMinimumDensity(double minDensity); + +// This routine must be called only once after lefwStartLayer. +// The option MAXIMUMDENSITY is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwMaximumDensity(double maxDensity); + +// This routine must be called only once after lefwStartLayer. +// The option DENSITYCHECKWINDOW is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwDensityCheckWindow(double checkWindowLength, + double checkWindowWidth); + +// This routine must be called only once after lefwStartLayer. +// The option DENSITYCHECKSTEP is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwDensityCheckStep(double checkStepValue); + +// This routine must be called only once after lefwStartLayer. +// The option FILLACTIVESPACING is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwFillActiveSpacing(double fillToActiveSpacing); + +// This routine must be called only once after all the layers. +// This routine is optional. +// This is a 5.5 syntax. +// Returns 0 if succesful. +extern int lefwMaxviastack(int value, + const char* bottomLayer, // optional (NULL) + const char* topLayer); // optional (NULL) + +// This routine is called after lefwInit. +// This section of routines is optional. +// The routine can be called only once. +// Returns 0 if successful. +// The routine starts propertydefinitions section. +extern int lefwStartPropDef(); + +// This routine must be called after lefwStartPropDef. +// This routine can be called multiple times. +// It adds integer property definition to the statement. +// Returns 0 if successful. +// The objType can be LIBRARY or VIA or MACRO or PIN. +extern int lefwIntPropDef( + const char* objType, // LIBRARY | LAYER | VIA | VIARULE | + // NONDEFAULTRULE | MACRO | PIN + const char* propName, + double leftRange, // optional(0) - RANGE + double rightRange, // optional(0) + int propValue); // optional(NULL) + +// This routine must be called after lefwStartPropDef. +// This routine can be called multiple times. +// It adds real property definition to the statement. +// Returns 0 if successful. +// The objType can be LIBRARY or VIA or MACRO or PIN. +extern int lefwRealPropDef( + const char* objType, // LIBRARY | LAYER | VIA | VIARULE | + // NONDEFAULTRULE | MACRO | PIN + const char* propName, + double leftRange, // optional(0) - RANGE + double rightRange, // optional(0) + double propValue); // optional(NULL) + +// This routine must be called after lefwStartPropDef. +// This routine can be called multiple times. +// It adds string property definition to the statement. +// Returns 0 if successful. +// The objType can be LIBRARY or VIA or MACRO or PIN. +extern int lefwStringPropDef( + const char* objType, // LIBRARY | LAYER | VIA | VIARULE | + // NONDEFAULTRULE | MACRO | PIN + const char* propName, + double leftRange, // optional(0) - RANGE + double rightRange, // optional(0) + const char* propValue); // optional(NULL) + +// This routine must be called after the lefwStartPropDef call (if any). +// The routine can be called only once. +// Returns 0 if successful. +extern int lefwEndPropDef(); + +// This routine is called after lefwInit. +// This routine must be called only once. +// Returns 0 if successful. +// The routine starts the via section. All of the vias must follow. +extern int lefwStartVia(const char* viaName, + const char* isDefault); // optional(NULL) - DEFAULT + +// This routine is optional, it call only be called after lefwStartVia. +// It can only be called once. +// Returns 0 if successful. +extern int lefwViaTopofstackonly(); // TOPOFSTACKONLY + +// This routine is optional, it call only be called after lefwStartVia. +// It can only be called once. +// Returns 0 if successful. +extern int lefwViaForeign(const char* foreignName, + double xl, // optional(0) - pt(x) + double yl, // optional(0) - pt(y) + int orient); // optional(-1) + +// This routine is optional, it call only be called after lefwStartVia. +// It can only be called once. +// Returns 0 if successful. +// This routine is the same as lefwViaForeign, except orient is a char* +extern int lefwViaForeignStr(const char* foreignName, + double xl, // optional(0) - pt(x) + double yl, // optional(0) - pt(y) + const char* orient); // optional("") + +// This routine is optional, it call only be called after lefwStartVia. +// Either this routine or lefwViaViarule can be called within a via. +// It can only be called once in a via. +// Returns 0 if successful. +extern int lefwViaResistance(double resistance); // RESISTANCE + +// This routine must be called after lefwStartVia. +// It can be called multiple times. +// Returns 0 if successful. +extern int lefwViaLayer(const char* layerName); // LAYER + +// This routine can call only after lefwViaLayer. +// Either this routine or lefwViaLayerPolygon can be called within a layer +// It can be called multiple times. +// Returns 0 if successful. +// mask is 5.8 syntax +extern int lefwViaLayerRect(double x1l, // RECT pt1(x) + double y1l, // RECT pt1(y) + double x2l, // RECT pt2(x) + double y2l, // RECT pt2(y) + int mask = 0); + +// This routine can call only after lefwViaLayer. +// Either this routine or lefwViaLayerRect can be called within a layer +// It can be called multiple times. +// This is a 5.6 syntax. +// Returns 0 if successful. +// mask is 5.8 syntax +extern int lefwViaLayerPolygon(int num_polys, double* xl, double* yl, + int mask = 0); + +// This routine can call only after lefwStartVia. +// Either this routine or lefwViaResistance can be called within a via. +// It can only be called once in a via. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwViaViarule(const char* viaRuleName, + double xCutSize, double yCutSize, + const char* botMetalLayer, const char* cutLayer, + const char* topMetalLayer, + double xCutSpacing, double yCutSpacing, + double xBotEnc, double yBotEnc, + double xTopEnc, double yTopEnc); + +// This routine can call only after lefwViaViarule. +// It can only be called once. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwViaViaruleRowCol(int numCutRows, int numCutCols); + +// This routine can call only after lefwViaViarule. +// It can only be called once. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwViaViaruleOrigin(double xOffset, double yOffset); + +// This routine can call only after lefwViaViarule. +// It can only be called once. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwViaViaruleOffset(double xBotOffset, double yBotOffset, + double xTopOffset, double yTopOffset); + +// This routine can call only after lefwViaViarule. +// It can only be called once. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwViaViarulePattern(const char* cutPattern); + +// This routine is called after lefwVia. +// This routine is optional, it adds string property to the statement. +// It can be called multiple times. +// Returns 0 if successful. +extern int lefwStringProperty(const char* propName, const char* propValue); + +// This routine is called after lefwVia. +// This routine is optional, it adds real property to the statement. +// It can be called multiple times. +// Returns 0 if successful. +extern int lefwRealProperty(const char* propName, double propValue); + +// This routine is called after lefwVia. +// This routine is optional, it adds int property to the statement. +// It can be called multiple times. +// Returns 0 if successful. +extern int lefwIntProperty(const char* propName, int propValue); + +// This routine must be called after the lefwStartVia call (if any). +// The routine can be called only once. +// Returns 0 if successful. +extern int lefwEndVia(const char* viaName); + +// This routine is called after lefwInit. +// This routine must be called as a set with lefwViaRuleLayer, lefwViaRuleVia +// and lefwEndViaRule +// multiple times. +// Returns 0 if successful. +// The routine starts the via rule section. The via rule data and its property +// must follow +extern int lefwStartViaRule(const char* viaRuleName); + +// This routine is called after lefwStartViaRule. +// This routine has to be called 2 times exact. +// Returns 0 if successful. +// The direction1 or direction2 can be HORIZONTAL or VERTICAL. +extern int lefwViaRuleLayer( + const char* layerName, + const char* direction, // HORIZONTAL | VERTICAL + double minWidth, // optional(0) - WIDTH + double maxWidth, // optional(0) - WIDTH + double overhang, // optional(0) - OVERHANG + double metalOverhang); // optional(0) - METALOVERHANG + +// This routine is called after lefwViaRuleLayer is called twice. +// This routine is required in a viarule and can be called more than once. +// Returns 0 if successful. +// The direction1 or direction2 can be HORIZONTAL or VERTICAL. +extern int lefwViaRuleVia( + const char* viaName); + +// This routine must be called after the lefwStartViaRule call (if any). +// The routine can be called only once per lefwStartViaRule. +// Returns 0 if successful. +extern int lefwEndViaRule(const char* viaRuleName); + +// This routine is called after lefwInit. +// This routine must be called as a set with lefwViaRuleGenLayer, +// lefwViaRuleGenLayer3, and lefwEndViaRuleGen multiple times. +// Returns 0 if successful. +// The routine starts the via rule section. The via rule data and its property +// must follow +extern int lefwStartViaRuleGen(const char* viaRuleName); + +// This routine is called after lefwSartViaRuleGen. +// This routine is optional +// Returns 0 if successful +extern int lefwViaRuleGenDefault(); + +// This routine is called after lefwStartViaRuleGen. +// This routine has to be called 2 times exact. +// Returns 0 if successful. +// Either this routine or lefwViaRuleGenLayerEnclosure, not both. +// The direction1 or direction2 can be HORIZONTAL or VERTICAL. +extern int lefwViaRuleGenLayer( + const char* layerName, + const char* direction, // HORIZONTAL | VERTICAL + double minWidth, // optional(0) - WIDTH + double maxWidth, // optional(0) - WIDTH + double overhang, // optional(0) - OVERHANG + double metalOverhang); // optional(0) - METALOVERHANG + +// This routine is called after lefwStartViaRuleGen. +// This routine has to be called 2 times exact. +// This is 5.5 syntax +// Returns 0 if successful. +// Either this routine or lefwViaRuleGenLayer, not both. +extern int lefwViaRuleGenLayerEnclosure( + const char* layerName, + double overhang1, + double overhang2, + double minWidth, // optional(0) - WIDTH + double maxWidth); // optional(0) - WIDTH + +// This routine is called after lefwViaRuleLayerGen is called twice. +// This routine is optional in a viarule generate and can be called once. +// Returns 0 if successful. +// The direction1 or direction2 can be HORIZONTAL or VERTICAL. +extern int lefwViaRuleGenLayer3( + const char* layerName, + double xl, double yl, // RECT pt1(x), pt1(y) + double xh, double yh, // RECT pt2(x), pt2(y) + double xSpacing, double ySpacing, // SPACING x and y + double resistance); // optional(0) - RESISTANCE + +// This routine must be called after the lefwStartViaRuleGen call (if any). +// The routine can be called only once per lefwStartViaRuleGen. +// Returns 0 if successful. +extern int lefwEndViaRuleGen(const char* viaRuleName); + + +// This routine is called after lefwInit. +// This routine must be called only once. +// Returns 0 if successful. +// The routine starts the nonDefaultRule section. The nonDefaultRule layers +// must follow +extern int lefwStartNonDefaultRule(const char* ruleName); + +// This routine is called after lefwInit. +// This routine must be called after lefwStartNonDefaultRule +// This routine can be called multiple times. +// Returns 0 if successful. +extern int lefwNonDefaultRuleLayer(const char* routingLayerName, + double width, // WIDTH + double minSpacing, // MINSPACING + double wireExtension, // optinal(0) - WIREEXTENSION + double resistance, // optinal(0) - RESISTANCE RPERQ + double capacitance, // optinal(0) - CAPACITANCE CPERSQDIST + double edgeCap); // optinal(0) - EDGECAPACITANCE + +// This routine is called after lefwInit. +// This routine must be called after lefwStartNonDefaultRule +// This routine is optional and it can be called only once. +// Returns 0 if successful. +extern int lefwNonDefaultRuleHardspacing(); + +// This routine is called after lefwStartNonDefaultRule. +// This routine must be called only once for each via section. +// Returns 0 if successful. +// The routine starts the nondefaultrule via section. +// Call the following via functions for the rest of NONDEFAULTRULE VIA: +// lefwViaTopofstackonly +// lefwViaForeign +// lefwViaForeignStr +// lefwViaResistance +// lefwViaLayer +// lefwViaLayerRect +// lefwNonDefaultRuleEndVia +extern int lefwNonDefaultRuleStartVia(const char* viaName, + const char* isDefault); // optional(NULL) - DEFAULT + +// This routine must be called after the lefwNonDefaultRuleStartVia call. +// The routine can be called only once per via section. +// Returns 0 if successful. +extern int lefwNonDefaultRuleEndVia(const char* viaName); + +// This routine is called after lefwStartNonDefaultRule. +// This routine can be called multiple times. +// Returns 0 if successful. +extern int lefwNonDefaultRuleUseVia(const char* viaName); + +// This routine is called after lefwStartNonDefaultRule. +// This routine can be called multiple times. +// Returns 0 if successful. +extern int lefwNonDefaultRuleUseViaRule(const char* viaRuleName); + +// This routine is called after lefwStartNonDefaultRule. +// This routine can be called multiple times. +// Returns 0 if successful. +extern int lefwNonDefaultRuleMinCuts(const char* layerName, int numCuts); + +// This routine must be called after the lefwStartNonDefaultRule call (if any). +// The routine can be called only once. +// Returns 0 if successful. +extern int lefwEndNonDefaultRule(const char* ruleName); + +// This routine is called after lefwInit. +// This section of routines is optional. +// This routine can be called only once. +// Returns 0 if successful. +// It starts the spacing section. +extern int lefwStartSpacing(); + +// This routine must be called after lefwStartSpacing. +// It can be called multiple times. +// Returns 0 if successful. +// The stack has to be STACK. +extern int lefwSpacing(const char* layerName1, + const char* layerName2, + double minSpace, + const char* stack); // optional(NULL) + +// This routine must be called after the lefwStartSpacing call (if any). +// The routine can be called only once. +// Returns 0 if successful. +extern int lefwEndSpacing(); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwUniversalNoiseMargin (double high, double low); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwEdgeRateThreshold1 (double num); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwEdgeRateThreshold2 (double num); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwEdgeRateScaleFactor (double num); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +// This routine starts the noisetable section. +// This api is obsolete in 5.4. +extern int lefwStartNoiseTable(int num); + +// This routine is called after lefwStartNoiseTable or lefwStartCorrectTable. +// This routine is optional and it can be called multiple times +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwEdgeRate(double num) ; + +// This routine is called after lefwEdgeRate. +// This routine is optional and it can be called only once inside lefwEdgeRate. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwOutputResistance(int numResists, double* resistance); + +// This routine is called after lefwOutputResistance. +// This routine is optional and it can be called multiple times inside +// lefwOutputResistance +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwVictims(int length, int numNoises, double* noises); + +// This routine must be called after the lefwStartNoiseTable call (if any). +// The routine can be called only once per section. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwEndNoiseTable(); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +// This routine starts the correctTable section. +// This api is obsolete in 5.4. +extern int lefwStartCorrectTable(int num); + +// This routine must be called after the lefwStartCorrectTable call (if any). +// The routine can be called only once per section. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwEndCorrectTable(); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +extern int lefwMinFeature (double x, double y); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +// extern int lefwDielectric (float dielectric); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +// This routine starts the irdrop section. +// This api is obsolete in 5.4. +extern int lefwStartIrdrop(); + +// This routine is must be called after lefwStartIrdrop. +// It can be called multiple times. +// Returns 0 if successful. +// The currentsNvolts is a list of current and volts. +// This api is obsolete in 5.4. +extern int lefwIrdropTable(const char* tableName, const char* currentsNvolts); + +// This routine must be called after the lefwStartIrdrop call (if any). +// The routine can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwEndIrdrop(); + +// This routine is must be called after lefwInit. +// It can be called multiple times. +// Returns 0 if successful. +// The classType can be PAD or CORE. +// The symmetry can be a list of X or Y or R90. +extern int lefwSite(const char* siteName, const char* classType, + const char* symmetry, double width, double height); + +// This routine is must be called after lefwSite. +// It can be called multiple times. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwSiteRowPattern(const char* siteName, int orient); + +// This routine is must be called after lefwSite. +// It can be called multiple times. +// This is a 5.6 syntax. +// Returns 0 if successful. +// This routine is the same as lefwSiteRowPattern, except orient is a char* +extern int lefwSiteRowPatternStr(const char* siteName, const char *orient); + +// This routine must be called after the lefwSite call (if any). +// The routine can be called only once after lefwSite. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwEndSite(const char* siteName); + +// This routine is called after lefwInit. +// This routine is optional and it can be called multiple times. +// Returns 0 if successful. +// This routine starts the array section. +extern int lefwStartArray(const char* arrayName); + +// This routine is called after lefwStartArray. +// Either this routine, lefwArrayCanplace, lefwArrayCannotoccupy, +// lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. +// It can be call multiple times. +// Returns 0 if successful. +extern int lefwArraySite(const char* name, double origX, double origY, + int orient, double numX, double numY, double spaceX, + double spaceY); + +// This routine is called after lefwStartArray. +// Either this routine, lefwArrayCanplace, lefwArrayCannotoccupy, +// lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. +// It can be call multiple times. +// Returns 0 if successful. +// This routine is the same as lefwArraySite, except orient is a char* +extern int lefwArraySiteStr(const char* name, double origX, double origY, + const char *orient, double numX, double numY, double spaceX, + double spaceY); + +// This routine is called after lefwStartArray. +// Either this routine, lefwArraySite, lefwArrayCannotoccupy, +// lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. +// It can be call multiple times. +// Returns 0 if successful. +extern int lefwArrayCanplace(const char* name, double origX, double origY, + int orient, double numX, double numY, double spaceX, + double spaceY); + +// This routine is called after lefwStartArray. +// Either this routine, lefwArraySite, lefwArrayCannotoccupy, +// lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. +// It can be call multiple times. +// Returns 0 if successful. +// This routine is the same as lefwArrayCanplace, except orient is a char* +extern int lefwArrayCanplaceStr(const char* name, double origX, double origY, + const char *orient, double numX, double numY, double spaceX, + double spaceY); + +// This routine is called after lefwStartArray. +// Either this routine, lefwArraySite, lefwArrayCanplace, +// lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. +// It can be call multiple times. +// Returns 0 if successful. +extern int lefwArrayCannotoccupy(const char* name, double origX, double origY, + int orient, double numX, double numY, double spaceX, + double spaceY); + +// This routine is called after lefwStartArray. +// Either this routine, lefwArraySite, lefwArrayCanplace, +// lefwArrayTracks, or lefwStartArrayFloorplan must be called at least once. +// It can be call multiple times. +// Returns 0 if successful. +// This routine is the same as lefwArrayTracks, except orient is a char* +extern int lefwArrayCannotoccupyStr(const char* name, double origX, + double origY, const char *orient, double numX, double numY, + double spaceX, double spaceY); + +// This routine is called after lefwStartArray. +// Either this routine, lefwArraySite, lefwArrayCanplace, lefwArrayCannotoccupy, +// or lefwStartArrayFloorplan must be called at least once. +// It can be call multiple times. +// Returns 0 if successful. +extern int lefwArrayTracks(const char* xy, double start, int numTracks, + double space, const char* layers); + +// This routine is called after lefwStartArray. +// Either this routine, lefwArraySite, lefwArrayCanplace, lefwArrayCannotoccupy, +// or lefwArrayTracks must be called at least once. +// It can be call multiple times. +// Returns 0 if successful. +// The routine starts the array floorplan section +extern int lefwStartArrayFloorplan(const char* name); + +// This routine must be called after lefwStartArrayFloorplan. +// It can be called multiple times. +// Returns 0 if successful. +// The site can be CANPLACE or CANNOTOCCUPY +extern int lefwArrayFloorplan(const char* site, const char* name, + double origX, double origY, int orient, + int numX, int numY, double spaceX, double spaceY); + +// This routine must be called after lefwStartArrayFloorplan. +// It can be called multiple times. +// Returns 0 if successful. +// The site can be CANPLACE or CANNOTOCCUPY +// This routine is the same as lefwArrayFloorplan, except orient is a char* +extern int lefwArrayFloorplanStr(const char* site, const char* name, + double origX, double origY, const char *orient, + int numX, int numY, double spaceX, double spaceY); + +// This routine must be called after the lefwStartArrayFloorplan call (if any). +// The routine can be called only once per section. +// Returns 0 if successful. +extern int lefwEndArrayFloorplan(const char* name); + +// This routine is called after lefwStartArray. +// This routine is optional. +// It can be called multiple times. +// Returns 0 if successful. +// The xy can be X or Y. +extern int lefwArrayGcellgrid(const char* xy, double startXY, int colRows, + double spaceXY); + +// This routine is called after lefwStartArray. +// This section of routines is optional and can be call only once. +// Returns 0 if successful. +// The routine starts the array defaultcap section +extern int lefwStartArrayDefaultCap(int size); + +// This routine must be called after lefwStartArrayDefaultCap. +// It can be called multiple times. +// Returns 0 if successful. +extern int lefwArrayDefaultCap(double numPins, double cap); + +// This routine must be called after the lefwStartArrayDefaultCap call (if any). +// The routine can be called only once. +// Returns 0 if successful. +extern int lefwEndArrayDefaultCap(); + +// This routine must be called after the lefwStartArray call (if any). +// The routine can be called only once per section. +// Returns 0 if successful. +extern int lefwEndArray(const char* arrayName); + +// This routine is must be called after lefwInit. +// This routine can be called multiple times. +// Returns 0 if successful. +// This routine starts the macro section. +extern int lefwStartMacro(const char* macroName); + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called only once per macro section. +// Returns 0 if successful. +// The value1 can be COVER, RING, BLOCK, PAD, CORE, or ENCAP. +// The value2 can be BUMP if value1 is COVER, +// or BLACKBOX, or SOFT if value1 is BLOCK, +// or INPUT, OUTPUT, INOUT, POWER, or SPACER if value1 is PAD, +// or FEEDTHRU, TIEHIGH, TIELOW, SPACER, ANTENNACELL, or WELLTAP +// if value1 is CORE, +// or PRE, POST, TOPLEFT, TOPRIGHT, BOOTOMLEFT, or BOTTOMRIGHT if value1 is +// ENCAP. +extern int lefwMacroClass(const char* value1, + const char* value2); // optional(NULL) + +// This routine is must be called after lefwInit. +// This routine can be called multiple times. +// Returns 0 if successful. +// This is a 5.8 syntax. +extern int lefwMacroFixedMask(); + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called only once per macro section. +// Returns 0 if successful. +// The value1 can be USER, GENERATE, or BLOCK. +extern int lefwMacroSource(const char* value1); + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called multiple times per macro section. +// Returns 0 if successful. +extern int lefwMacroForeign(const char* name, + double xl, // optional(0) - pt(x) + double yl, // optional(0) - pt(y) + int orient); // optional(-1) - 0 to 7 + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called multiple times per macro section. +// Returns 0 if successful. +// This routine is the same as lefwMacroForeign, except orient is a char* +extern int lefwMacroForeignStr(const char* name, + double xl, // optional(0) - pt(x) + double yl, // optional(0) - pt(y) + const char *orient); // optional("") + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called only once per macro section. +// Returns 0 if successful. +extern int lefwMacroOrigin(double xl, // pt(x) + double yl); // pt(y) + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called only once per macro section. +// Returns 0 if successful. +extern int lefwMacroEEQ(const char* macroName); + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called only once per macro section. +// Returns 0 if successful. +extern int lefwMacroLEQ(const char* macroName); + +// This routine is called after lefwStartMacro. +// This routine must be called only once per macro section. +// Returns 0 if successful. +extern int lefwMacroSize(double width, double height); + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called only once per macro section. +// Returns 0 if successful. +// The symmetry can be a list of X, Y, or R90 +extern int lefwMacroSymmetry(const char* symmetry); + +// This routine is called after lefwStartMacro. +// This routine must be called only once per macro section. +// Returns 0 if successful. +extern int lefwMacroSite(const char* siteName); + +// This routine is called after lefwStartMacro. +// This routine must be called at least once per macro section. +// Returns 0 if successful. +extern int lefwMacroSitePattern(const char* name, + double origX, double origY, // optional(0) + int orient, // optional(-1) + int numX, int numY, // optional(0) + double spaceX, double spaceY); // optional(0) + +// This routine is called after lefwStartMacro. +// This routine must be called at least once per macro section. +// Returns 0 if successful. +// This routine is the same as lefwMacroSitePattern, except orient is a char* +extern int lefwMacroSitePatternStr(const char* name, + double origX, double origY, // optional(0) + const char *orient, // optional (-1) + int numX, int numY, // optional(0) + double spaceX, double spaceY); // optional(0) + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called only once per macro section. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPower(double power); + +// This routine must be called after the lefwStartMacro call (if any). +// The routine can be called only once per macro section. +// Returns 0 if successful. +extern int lefwEndMacro(const char* macroName); + +// This routine is called after lefwStartMacro. +// This routine is optional and can be called only once per macro section. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwStartMacroDensity(const char* layerName); + +// This routine is called after lefwStartMacroDensity. +// This routine can be called multiple times. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwMacroDensityLayerRect(double x1, double y1, + double x2, double y2, + double densityValue); + +// This routine must be called after the lefwStartMacroPin call (if any). +// The routine can be called only once per macro section. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwEndMacroDensity(); + +// This routine must be called after the lefwStartMacro call (if any). +// The routine can be called multiple time. +// Returns 0 if successful. +// It starts the macro pin section within macro. +extern int lefwStartMacroPin(const char* pinName); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +extern int lefwMacroPinTaperRule(const char* ruleName); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +extern int lefwMacroPinForeign(const char* name, + double xl, // optional(0) + double yl, // optional(0) + int orient); // optional(-1) - 0 to 7 + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// Ths routine is the same as lefwMacroPinForeign, except orient is a char* +extern int lefwMacroPinForeignStr(const char* name, + double xl, // optional(0) + double yl, // optional(0) + const char* orient); // optional("") + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +extern int lefwMacroPinLEQ(const char* pinName); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// The direction can be INPUT, OUTPUT, OUTPUT TRISTATE, INOUT, or FEEDTHRU. +extern int lefwMacroPinDirection(const char* direction); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// The use can be SIGNAL, ANALOG, POWER, GROUND, or CLOCK. +extern int lefwMacroPinUse(const char* use); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// The namce can be ABUTMENT, RING, or FEEDTHRU. +extern int lefwMacroPinShape(const char* name); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +extern int lefwMacroPinMustjoin(const char* name); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwMacroPinNetExpr(const char* name); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwMacroPinSupplySensitivity(const char* pinName); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// This is a 5.6 syntax. +// Returns 0 if successful. +extern int lefwMacroPinGroundSensitivity(const char* pinName); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinOutputnoisemargin(int high, int low); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinOutputresistance(int high, int low); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinInputnoisemargin(int high, int low); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinPower(double power); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinLeakage(double leakage); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinCapacitance(double capacitance); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinResistance(double resistance); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinPulldownres(double resistance); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinTieoffr(double resistance); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinVHI(double voltage); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinVLO(double voltage); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinRisevoltagethreshold(double voltage); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinFallvoltagethreshold(double voltage); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinRisethresh(double capacitance); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinFallthresh(double capacitance); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinRisesatcur(double current); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinFallsatcur(double current); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// The name can be ACTIVE or RESISTIVE. +// This api is obsolete in 5.4. +extern int lefwMacroPinCurrentsource(const char* name); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroPinIV_Tables(const char* lowName, const char* highName); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called multiple times. +// Either this routine or 5.4 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennasize(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called multiple times. +// Either this routine or 5.4 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaMetalArea(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called multiple times. +// Either this routine or 5.4 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaMetalLength(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called multiple times. +// This is a 5.4 syntax. +// Either this routine or 5.3 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaPartialMetalArea(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called multiple times. +// This is a 5.4 syntax. +// Either this routine or 5.3 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaPartialMetalSideArea(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called multiple times. +// This is a 5.4 syntax. +// Either this routine or 5.3 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaPartialCutArea(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called multiple times. +// This is a 5.4 syntax. +// Either this routine or 5.3 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaDiffArea(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// The oxide value, can be either OXIDE1, OXIDE2, OXIDE3, or OXIDE4. +// This routine is optional. Each oxide value can be called only once +// after the lefwStartMacroPin. +// This is a 5.5 syntax. +// Returns 0 if successful. +extern int lefwMacroPinAntennaModel(const char* oxide); + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called multiple times. +// This is a 5.4 syntax. +// Either this routine or 5.3 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaGateArea(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// This is a 5.4 syntax. +// Either this routine or 5.3 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaMaxAreaCar(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// This is a 5.4 syntax. +// Either this routine or 5.3 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaMaxSideAreaCar(double value, + const char* layerName); // optional(NULL) + +// This routine is called after lefwStartMacroPin. +// This routine is optional and can be called only once. +// This is a 5.4 syntax. +// Either this routine or 5.3 Antenna syntax, cannot be both +// Returns 0 if successful. +extern int lefwMacroPinAntennaMaxCutCar(double value, + const char* layerName); // optional(NULL) + +// This routine must be called after the lefwStartMacroPin call (if any). +// The routine can be called only once per macro section. +// Returns 0 if successful. +extern int lefwEndMacroPin(const char* pinName); + +// This routine must be called after the lefwStartMacroPin call (if any). +// The routine can be called multiple time. +// Returns 0 if successful. +// It starts the macro pin port section within macro pin. +// The classType can be NONE or CORE. +extern int lefwStartMacroPinPort(const char* classType); // optional(NULL) + +// This routine is called after lefwStartMacroPinPort. +// Either this routine or lefwMacroPinPortDesignRuleWidth must be called, +// but can't be both. +// Spacing is optional for minimum spacing. +// Returns 0 if successful. +extern int lefwMacroPinPortLayer(const char* layerName, + double spacing); // optional(0) + +// This routine is called after lefwStartMacroPinPort. +// Either this routine or lefwMacroPinPortLayer must be called, but can't +// be both. +// width is optional for DesignRuleWidth +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwMacroPinPortDesignRuleWidth(const char* layerName, + double width); // optional(0) + +// This routine is called after lefwMacroPinPortLayer. +// Returns 0 if successful. +extern int lefwMacroPinPortLayerWidth(double width); + +// This routine is called after lefwStartMacroPinPortLayer. +// Either this routine, lefwStartMacroPinPortLayerRect, or +// lefwStartMacroPinPortLayerPolygon must be called. +// Returns 0 if successful. +extern int lefwMacroPinPortLayerPath(int num_paths, double* xl, double* yl, + int numX, // optional(0) + int numY, // optional(0) + double spaceX, // optional(0) + double spaceY, // optional(0) + int mask = 0); // optional(0) + +// This routine is called after lefwStartMacroPinPortLayer. +// Either this routine, lefwStartMacroPinPortLayerPath, or +// lefwStartMacroPinPortLayerPolygon must be called. +// Returns 0 if successful. +extern int lefwMacroPinPortLayerRect(double xl1, double yl1, + double xl2, double yl2, + int numX, // optional(0) + int numY, // optional(0) + double spaceX, // optional(0) + double spaceY, // optional(0) + int mask = 0); // optional(0) + +// This routine is called after lefwStartMacroPinPortLayer. +// Either this routine, lefwStartMacroPinPortLayerPath, or +// lefwStartMacroPinPortLayerRect must be called. +// Returns 0 if successful. +extern int lefwMacroPinPortLayerPolygon(int num_polys, + double* xl, double* yl, + int numX, // optional(0) + int numY, // optional(0) + double spaceX, // optional(0) + double spaceY, // optional(0) + int mask = 0); // optional(0) + +// This routine is called after lefwStartMacroPinPort. +// Either this routine or lefwStartMacroPinPortLayer must be called. +// Returns 0 if successful. +extern int lefwMacroPinPortVia(double xl, double yl, const char* viaName, + int numX, // optional(0) + int numY, // optional(0) + double spaceX, // optional(0) + double spaceY, // optional(0) + int mask = 0); // optional(0) + +// This routine must be called after the lefwStartMacroPinPort call (if any). +// The routine can be called only once per macro section. +// Returns 0 if successful. +extern int lefwEndMacroPinPort(); + +// This routine is called after the lefwStartMacro call (if any). +// The routine is optional and can be called multiple times. +// Returns 0 if successful. +// It starts the macro obs section within macro. +extern int lefwStartMacroObs(); + +// This routine is called after lefwStartMacroObs. +// Either this routine, lefwMacroObsDesignRuleWidth, lefwMacroObsVia or +// lefwMacroExceptPGNet must be called. +// Spacing is optional for minimum spacing. +// Returns 0 if successful. +extern int lefwMacroObsLayer(const char* layerName, + double spacing); // optional(0) + +// This routine is called after lefwStartMacroObs. +// Either this routine, lefwMacroObsLayer, lefwMacroObsVia or +// lefwMacroExceptPGNet must be called. +// Spacing is optional for minimum spacing. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwMacroObsDesignRuleWidth(const char* layerName, + double width); // optional(0) + +// This routine is called after lefwStartMacroObs. +// Either this routine, lefwMacroObsLayer, lefwMacroObsVia or +// lefwMacroObsDesignRuleWidth must be called. +// Spacing is optional for minimum spacing. +// This is a 5.4 syntax. +// Returns 0 if successful. +extern int lefwMacroExceptPGNet(const char* layerName); + +// This routine is called after lefwStartMacroObs. +// Returns 0 if successful. +extern int lefwMacroObsLayerWidth(double width); + +// This routine is called after lefwStartMacroObsLayer. +// Either this routine, lefwMacroObsLayerRect, or +// lefwStartMacroObsLayerPolygon must be called. +// Returns 0 if successful. +extern int lefwMacroObsLayerPath(int num_paths, double* xl, double* yl, + int numX, // optional(0) + int numY, // optional(0) + double spaceX, // optional(0) + double spaceY, // optional(0) + int mask = 0); // optional(0) + +// This routine is called after lefwStartMacroObsLayer. +// Either this routine, lefwMacroObsLayerPath, or +// lefwStartMacroObsLayerPolygon must be called. +// Returns 0 if successful. +extern int lefwMacroObsLayerRect(double xl1, double yl1, + double xl2, double yl2, + int numX, // optional(0) + int numY, // optional(0) + double spaceX, // optional(0) + double spaceY, // optional(0) + int mask = 0); // optional(0) + +// This routine is called after lefwStartMacroObsLayer. +// Either this routine, lefwMacroObsLayerPath, or +// lefwStartMacroObsLayerPath must be called. +// Returns 0 if successful. +extern int lefwMacroObsLayerPolygon(int num_polys, double* xl, double* yl, + int numX, // optional(0) + int numY, // optional(0) + double spaceX, // optional(0) + double spaceY, // optional(0) + int mask = 0); // optional(0) + +// This routine is called after lefwStartMacroObs. +// Either this routine or lefwMacroObsLayer|lefwMacroObsDesignRuleWidth +// must be called. +// Returns 0 if successful. +extern int lefwMacroObsVia(double xl, double yl, const char* viaName, + int numX, // optional(0) + int numY, // optional(0) + double spaceX, // optional(0) + double spaceY, // optional(0) + int mask = 0); // optional(0) + +// This routine must be called after the lefwStartMacroObs call (if any). +// The routine can be called only once per macro section. +// Returns 0 if successful. +extern int lefwEndMacroObs(); + +// This routine is called after the lefwStartMacro call (if any). +// The routine is optional and can be called only once. +// Returns 0 if successful. +// It starts the macro timing section within macro. +// This api is obsolete in 5.4. +extern int lefwStartMacroTiming(); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This routine is for {FROMPIN pinName...; [TOPIN pinName...;] | FROMPIN +// pinName...;} +// This routince can be called multiple times. +// The num_frPinNames contains the number of object in the array fromPins. +// This api is obsolete in 5.4. +extern int lefwMacroTimingPin(const char* fromPin, const char* toPin); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// The riseFall can be RISE or FALL. +// This api is obsolete in 5.4. +extern int lefwMacroTimingIntrinsic(const char* riseFall, double min, + double max, + double slewT1, // optional(0) + double slewT1Min, // optional(0) + double slewT1Max, // optional(0) + double slewT2, // optional(0) + double slewT2Min, // optional(0) + double slewT2Max, // optional(0) + double slewT3, // optional(0) + double varMin, double varMax); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroTimingRisers(double min, double max); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroTimingFallrs(double min, double max); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroTimingRisecs(double min, double max); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroTimingFallcs(double min, double max); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroTimingRisesatt1(double min, double max); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroTimingFallsatt1(double min, double max); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroTimingRiset0(double min, double max); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwMacroTimingFallt0(double min, double max); + +// This routine must be called after the lefwStartMacroTiming. +// It can be called multiple times. +// Returns 0 if successful. +// The unateness can be INVERT, NONINVERT or NONUNATE. +// This api is obsolete in 5.4. +extern int lefwMacroTimingUnateness(const char* unateness); + +// This routine must be called after the lefwStartMacroTiming call (if any). +// The routine can be called only once. +// Returns 0 if successful. +// This api is obsolete in 5.4. +extern int lefwEndMacroTiming(); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +extern int lefwAntenna(const char* type, // INPUTPINANTENNASIZE | + // OUTPUTPINANTENNASIZE | + // INOUTPINANTENNASIZE + double value); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +extern int lefwStartBeginext(const char* name); + +// This routine is called after lefwBeginext. +// This routine is optional, it can be called only once. +// Returns 0 if successful. +extern int lefwBeginextCreator (const char* creatorName); + +// This routine is called after lefwBeginext. +// This routine is optional, it can be called only once. +// It gets the current system time and date. +// Returns 0 if successful. +extern int lefwBeginextDate (); + +// This routine is called after lefwBeginext. +// This routine is optional, it can be called only once. +// Returns 0 if successful. +extern int lefwBeginextRevision (int vers1, int vers2); // vers1.vers2 + +// This routine is called after lefwBeginext. +// This routine is optional, it can be called many times. +// It allows user to customize their own syntax. +// Returns 0 if successful. +extern int lefwBeginextSyntax (const char* title, const char* string); + +// This routine is called after lefwInit. +// This routine is optional and it can be called only once. +// Returns 0 if successful. +extern int lefwEndBeginext(); + +// General routines that can be called anytime after the Init is called. +extern int lefwCurrentLineNumber(); + +// This routine must call last, it ends the Lef library. +// It must be called only once. +// Returns 0 if successful. +extern int lefwEnd(); + +// This routine will print the error message. +extern void lefwPrintError(int status); + +// This routine will allow user to write their own comemnt. It will +// automactically add a # infront of the line. +extern void lefwAddComment(const char* comment); + +// This routine will indent 3 blank spaces +extern void lefwAddIndent(); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lefwWriterCalls.cpp b/lefdef/src/lef/lef/lefwWriterCalls.cpp new file mode 100644 index 00000000..ed633e9a --- /dev/null +++ b/lefdef/src/lef/lef/lefwWriterCalls.cpp @@ -0,0 +1,664 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// ***************************************************************************** +// ***************************************************************************** + +// This file contains code for implementing the lefwriter 5.3 +// It has functions to set the user callback functions. If functions +// are set, the lefwriter will call the user callback functions when +// it comes to the section. If the section is required, but user +// does not set any callback functions, a warning will be printed +// both on stderr and on the output file if there is one. +// The lef writer does not provide any default callback functions for +// the required sections. +// +// Author: Wanda da Rosa +// Date: 05/06/99 +// +// Revisions: + +#include "lefwWriterCalls.hpp" +#include +#include +#include "lefiDebug.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +#define MAXCBS 30 + +#define lefwVersionCbk 0 +#define lefwCaseSensitiveCbk 1 +#define lefwNoWireExtensionCbk 2 +#define lefwBusBitCharsCbk 3 +#define lefwDividerCharCbk 4 +#define lefwManufacturingGridCbk 5 +#define lefwUseMinSpacingCbk 6 +#define lefwClearanceMeasureCbk 7 +#define lefwUnitsCbk 8 +#define lefwAntennaInputGateAreaCbk 9 +#define lefwAntennaInOutDiffAreaCbk 10 +#define lefwAntennaOutputDiffAreaCbk 11 +#define lefwPropDefCbk 12 +#define lefwLayerCbk 13 +#define lefwViaCbk 14 +#define lefwViaRuleCbk 15 +#define lefwNonDefaultCbk 16 +#define lefwCrossTalkCbk 17 +#define lefwNoiseTableCbk 18 +#define lefwCorrectionTableCbk 19 +#define lefwSpacingCbk 20 +#define lefwMinFeatureCbk 21 +#define lefwDielectricCbk 22 +#define lefwIRDropCbk 23 +#define lefwSiteCbk 24 +#define lefwArrayCbk 25 +#define lefwMacroCbk 26 +#define lefwAntennaCbk 27 +#define lefwExtCbk 28 +#define lefwEndLibCbk 29 + +// NEW CALLBACK - then place it here. + +int lefWRetVal; +extern int lefwHasInit; +extern int lefwHasInitCbk; + +#define WRITER_CALLBACK(func, type) \ + if (func) { \ + if ((lefWRetVal = (*func)(type, lefwUserData)) == 0) { \ + } else { \ + lefiError(1, 0, "User callback routine returned bad status"); \ + return lefWRetVal; \ + } \ + } + +// ***************************************************************************** +// Global variables +// ***************************************************************************** + +lefiUserData lefwUserData = 0; +static char *lefwFileName = 0; +static int lefwRegisterUnused = 0; + +extern FILE *lefwFile; + +// ***************************************************************************** +// List of call back routines +// These are filled in by the user. See the +// "set" routines at the end of the file +// ***************************************************************************** +// The callback routines +lefwVoidCbkFnType lefwCallbacksSeq[MAXCBS] = { + 0, // lefwVersionCbk + 0, // lefwCaseSensitiveCbk + 0, // lefwNoWireExtensionCbk + 0, // lefwBusBitCharsCbk + 0, // lefwDividerCharCbk + 0, // lefwManufacturingGridCbk + 0, // lefwUseMinSpacingCbk + 0, // lefwClearanceMeasureCbk + 0, // lefwUnitsCbk + 0, // lefwAntennaInputGateAreaCbk + 0, // lefwAntennaInOutDiffAreaCbk + 0, // lefwAntennaOutputDiffAreaCbk + 0, // lefwPropDefCbk + 0, // lefwLayerCbk + 0, // lefwViaCbk + 0, // lefwViaRuleCbk + 0, // lefwNonDefaultCbk + 0, // lefwCrossTalkCbk + 0, // lefwNoiseTableCbk + 0, // lefwCorrectionTableCbk + 0, // lefwSpacingCbk + 0, // lefwMinFeatureCbk + 0, // lefwDielectricCbk + 0, // lefwIRDropCbk + 0, // lefwSiteCbk + 0, // lefwArrayCbk + 0, // lefwMacroCbk + 0, // lefwAntennaCbk + 0, // lefwExtCbk + 0, // lefwEndLibCbk + // Add NEW CALLBACK here +}; + +// the optional and required callbacks +int lefwCallbacksReq[MAXCBS] = { + 0, // Version + 0, // CaseSensitive + 0, // NoWireExtension + 0, // BusBitChars + 0, // Divider + 0, // ManufacturingGrid + 0, // UseMinSpacing + 0, // ClearanceMeasure + 0, // Units + 0, // AntennaInputGateArea + 0, // AntennaInOutDiffArea + 0, // AntennaOutputDiffArea + 0, // PropDefinition + 0, // Layer + 0, // Via + 0, // ViaRule + 0, // NonDefault + 0, // CrossTalk + 0, // NoiseTable + 0, // CorrectionTable + 0, // Spacing + 0, // MinFeature + 0, // Dielectric + 0, // IRDrop + 0, // Site + 0, // Array + 0, // Macro + 0, // Antenna + 0, // Extension + 0, // End Library + // Add NEW CALLBACK here +}; + +// The section names +char lefwSectionNames[MAXCBS] [80] = { + "Version", + "CaseSensitive", + "NoWireExtension", + "BusBitChars", + "DividerChar", + "ManufacturingGrid", + "UseMinSpacing", + "ClearanceMeasure", + "Units", + "AntennaInputGateArea", + "AntennaInOutDiffArea", + "AntennaOutputDiffArea", + "PropertyDefinition", + "Layer", + "Via", + "ViaRule", + "NonDefault", + "CrossTalk", + "NoiseTable", + "CorrectionTable", + "Spacing", + "MinFeature", + "Dielectric", + "IRDrop", + "Site", + "Array", + "Macro", + "Antenna", + "Ext", + "End Library", + // Add NEW CALLBACK here +}; + +// the call back types from the lefwCallbackType_e +lefwCallbackType_e lefwCallbacksType[MAXCBS] = { + lefwVersionCbkType, + lefwCaseSensitiveCbkType, + lefwNoWireExtensionCbkType, + lefwBusBitCharsCbkType, + lefwDividerCharCbkType, + lefwManufacturingGridCbkType, + lefwUseMinSpacingCbkType, + lefwClearanceMeasureCbkType, + lefwUnitsCbkType, + lefwAntennaInputGateAreaCbkType, + lefwAntennaInOutDiffAreaCbkType, + lefwAntennaOutputDiffAreaCbkType, + lefwPropDefCbkType, + lefwLayerCbkType, + lefwViaCbkType, + lefwViaRuleCbkType, + lefwNonDefaultCbkType, + lefwCrossTalkCbkType, + lefwNoiseTableCbkType, + lefwCorrectionTableCbkType, + lefwSpacingCbkType, + lefwMinFeatureCbkType, + lefwDielectricCbkType, + lefwIRDropCbkType, + lefwSiteCbkType, + lefwArrayCbkType, + lefwMacroCbkType, + lefwAntennaCbkType, + lefwExtCbkType, + lefwEndLibCbkType, + // Add NEW TYPES here +}; + +// ***************************************************************************** +// Routines for the callbacks +// ***************************************************************************** +const char * +lefwFName() +{ + return lefwFileName; +} + + +int +lefwWrite(FILE *f, + const char *fName, + lefiUserData uData) +{ + int i; + + if (lefwHasInitCbk == 0 && lefwHasInit == 0) { + fprintf(stderr, "ERROR (LEFWRIT-4100): lefwWrite called before lefwInitCbk\n"); + return -1; + } + + lefwFileName = (char*) fName; + lefwFile = f; + lefwUserData = uData; + + // Loop through the list of callbacks and call the user define + // callback routines if any are set + + for (i = 0; i < MAXCBS; i++) { + if (lefwCallbacksSeq[i] != 0) { // user has set a callback function + WRITER_CALLBACK(lefwCallbacksSeq[i], lefwCallbacksType[i]); + } else if (lefwCallbacksReq[i]) { // it is required but user hasn't set up + fprintf(f, + "# WARNING (LEFWRIT-4500): Callback for %s is required, but is not defined\n\n", + lefwSectionNames[i]); + fprintf(stderr, + "WARNING (LEFWRIT-4500): Callback for %s is required, but is not defined\n\n", + lefwSectionNames[i]); + } + } + return 0; +} + +void +lefwSetUnusedCallbacks(lefwVoidCbkFnType func) +{ + // Set all of the callbacks that have not been set yet to + // the given function. + int i; + + for (i = 0; i < MAXCBS; i++) { + if (lefwCallbacksSeq[i] == 0) + lefwCallbacksSeq[i] = (lefwVoidCbkFnType) func; + } +} + +// These count up the number of times an unset callback is called... +static int lefwUnusedCount[100]; + +int +lefwCountFunc(lefwCallbackType_e e, + lefiUserData d) +{ + int i = (int) e; + if (lefiDebug(23)) + printf("count %d 0x%p\n", (int) e, d); + if (i >= 0 && i < 100) { + lefwUnusedCount[i] += 1; + return 0; + } + return 1; +} + +void +lefwSetRegisterUnusedCallbacks() +{ + int i; + lefwRegisterUnused = 1; + lefwSetUnusedCallbacks(lefwCountFunc); + for (i = 0; i < 100; i++) + lefwUnusedCount[i] = 0; +} + +void +lefwPrintUnusedCallbacks(FILE *f) +{ + int i; + int first = 1; + + if (lefwRegisterUnused == 0) { + fprintf(f, + "ERROR (LEFWRIT-4101): lefwSetRegisterUnusedCallbacks was not called to setup this data.\n"); + return; + } + + for (i = 0; i < 100; i++) { + if (lefwUnusedCount[i]) { + if (first) + fprintf(f, + "INFO (LEFWRIT-4700): LEF items that were present but ignored because of no callback were set.\n"); + first = 0; + switch ((lefwCallbackType_e) i) { + case lefwVersionCbkType: + fprintf(f, "Version"); + break; + case lefwCaseSensitiveCbkType: + fprintf(f, "CaseSensitive"); + break; + case lefwNoWireExtensionCbkType: + fprintf(f, "NoWireExtensionAtPins"); + break; + case lefwBusBitCharsCbkType: + fprintf(f, "BusBitChars"); + break; + case lefwDividerCharCbkType: + fprintf(f, "DividerChar"); + break; + case lefwManufacturingGridCbkType: + fprintf(f, "ManufacturingGrid"); + break; + case lefwUseMinSpacingCbkType: + fprintf(f, "UseMinSpacing"); + break; + case lefwClearanceMeasureCbkType: + fprintf(f, "ClearanceMeasure"); + break; + case lefwUnitsCbkType: + fprintf(f, "Units"); + break; + case lefwAntennaInputGateAreaCbkType: + fprintf(f, "AntennaInputGateArea"); + break; + case lefwAntennaInOutDiffAreaCbkType: + fprintf(f, "AntennaInOutDiffArea"); + break; + case lefwAntennaOutputDiffAreaCbkType: + fprintf(f, "AntennaOutputDiffArea"); + break; + case lefwPropDefCbkType: + fprintf(f, "PropertyDefintion"); + break; + case lefwLayerCbkType: + fprintf(f, "Layer"); + break; + case lefwViaCbkType: + fprintf(f, "Via"); + break; + case lefwViaRuleCbkType: + fprintf(f, "ViaRule"); + break; + case lefwNonDefaultCbkType: + fprintf(f, "NonDefault"); + break; + case lefwCrossTalkCbkType: + fprintf(f, "CrossTalk"); + break; + case lefwNoiseTableCbkType: + fprintf(f, "NoiseTable"); + break; + case lefwCorrectionTableCbkType: + fprintf(f, "CorrectionTable"); + break; + case lefwSpacingCbkType: + fprintf(f, "Spacing"); + break; + case lefwMinFeatureCbkType: + fprintf(f, "MinFeature"); + break; + case lefwDielectricCbkType: + fprintf(f, "Dielectric"); + break; + case lefwIRDropCbkType: + fprintf(f, "IRDrop"); + break; + case lefwSiteCbkType: + fprintf(f, "Site"); + break; + case lefwArrayCbkType: + fprintf(f, "Array"); + break; + case lefwMacroCbkType: + fprintf(f, "Macro"); + break; + case lefwAntennaCbkType: + fprintf(f, "OutputAntenna"); + break; + case lefwExtCbkType: + fprintf(f, "Extension"); + break; + case lefwEndLibCbkType: + fprintf(f, "End Library"); + break; + // NEW CALLBACK add the print here + default: + fprintf(f, "BOGUS ENTRY"); + break; + } + fprintf(f, " %d\n", lefwUnusedCount[i]); + } + } +} + +void +lefwSetUserData(lefiUserData d) +{ + lefwUserData = d; +} + +lefiUserData +lefwGetUserData() +{ + return lefwUserData; +} + +void +lefwSetUnitsCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwUnitsCbk] = f; +} + +void +lefwSetDividerCharCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwDividerCharCbk] = f; +} + +void +lefwSetManufacturingGridCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwManufacturingGridCbk] = f; +} + +void +lefwSetUseMinSpacingCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwUseMinSpacingCbk] = f; +} + +void +lefwSetClearanceMeasureCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwClearanceMeasureCbk] = f; +} + +void +lefwSetNoWireExtensionCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwNoWireExtensionCbk] = f; +} + +void +lefwSetBusBitCharsCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwBusBitCharsCbk] = f; +} + +void +lefwSetCaseSensitiveCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwCaseSensitiveCbk] = f; +} + +void +lefwSetVersionCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwVersionCbk] = f; +} + +void +lefwSetLayerCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwLayerCbk] = f; +} + +void +lefwSetViaCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwViaCbk] = f; +} + +void +lefwSetViaRuleCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwViaRuleCbk] = f; +} + +void +lefwSetSpacingCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwSpacingCbk] = f; +} + +void +lefwSetIRDropCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwIRDropCbk] = f; +} + +void +lefwSetDielectricCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwDielectricCbk] = f; +} + +void +lefwSetMinFeatureCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwMinFeatureCbk] = f; +} + +void +lefwSetNonDefaultCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwNonDefaultCbk] = f; +} + +void +lefwSetSiteCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwSiteCbk] = f; +} + +void +lefwSetMacroCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwMacroCbk] = f; +} + +void +lefwSetArrayCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwArrayCbk] = f; +} + +void +lefwSetPropDefCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwPropDefCbk] = f; +} + +void +lefwSetCrossTalkCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwCrossTalkCbk] = f; +} + +void +lefwSetNoiseTableCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwNoiseTableCbk] = f; +} + + +void +lefwSetCorrectionTableCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwCorrectionTableCbk] = f; +} + + +void +lefwSetAntennaCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwAntennaCbk] = f; +} + +void +lefwSetExtCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwExtCbk] = f; +} + +void +lefwSetEndLibCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwEndLibCbk] = f; +} + +/* NEW CALLBACK - Each callback routine must have a routine that allows + * the user to set it. The set routines go here. */ + +void +lefwSetAntennaInputGateAreaCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwAntennaInputGateAreaCbk] = f; +} + +void +lefwSetAntennaInOutDiffAreaCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwAntennaInOutDiffAreaCbk] = f; +} + +void +lefwSetAntennaOutputDiffAreaCbk(lefwVoidCbkFnType f) +{ + lefwCallbacksSeq[lefwAntennaOutputDiffAreaCbk] = f; +} + +extern LEFI_LOG_FUNCTION lefwErrorLogFunction; + +void +lefwSetLogFunction(LEFI_LOG_FUNCTION f) +{ + lefwErrorLogFunction = f; +} +extern LEFI_WARNING_LOG_FUNCTION lefwWarningLogFunction; + +void +lefwSetWarningLogFunction(LEFI_WARNING_LOG_FUNCTION f) +{ + lefwWarningLogFunction = f; +} +END_LEFDEF_PARSER_NAMESPACE + diff --git a/lefdef/src/lef/lef/lefwWriterCalls.hpp b/lefdef/src/lef/lef/lefwWriterCalls.hpp new file mode 100644 index 00000000..2b323725 --- /dev/null +++ b/lefdef/src/lef/lef/lefwWriterCalls.hpp @@ -0,0 +1,210 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2013, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef LEFI_WRITER_H +#define LEFI_WRITER_H + +#include +#include + +#include "lefiKRDefs.hpp" +#include "lefiDefs.hpp" +#include "lefiUser.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +/* + * The main writer function. + * The file should already be opened. This requirement allows + * the writer to be used with stdin or a pipe. The file name + * is only used for error messages. The includeSearchPath is + * a colon-delimited list of directories in which to find + * include files. + */ +extern int lefwWrite ( FILE *file, + const char *fileName, + lefiUserData userData ); + +/* + * Set all of the callbacks that have not yet been set to a function + * that will add up how many times a given lef data type was ignored + * (ie no callback was done). The statistics can later be printed out. + */ +extern void lefwSetRegisterUnusedCallbacks ( void ); +extern void lefwPrintUnusedCallbacks ( FILE* f ); + +/* + * Set/get the client-provided user data. lefi doesn't look at + * this data at all, it simply passes the opaque lefiUserData pointer + * back to the application with each callback. The client can + * change the data at any time, and it will take effect on the + * next callback. The lefi writer and writer maintain separate + * user data pointers. + */ +extern void lefwSetUserData ( lefiUserData ); +extern lefiUserData lefwGetUserData ( void ); + +/* + * An enum describing all of the types of writer callbacks. + */ +typedef enum { + lefwUnspecifiedCbkType = 0, + lefwVersionCbkType, + lefwCaseSensitiveCbkType, + lefwNoWireExtensionCbkType, + lefwBusBitCharsCbkType, + lefwDividerCharCbkType, + lefwManufacturingGridCbkType, + lefwUseMinSpacingCbkType, + lefwClearanceMeasureCbkType, + lefwUnitsCbkType, + lefwAntennaInputGateAreaCbkType, + lefwAntennaInOutDiffAreaCbkType, + lefwAntennaOutputDiffAreaCbkType, + lefwPropDefCbkType, + lefwLayerCbkType, + lefwViaCbkType, + lefwViaRuleCbkType, + lefwNonDefaultCbkType, + lefwCrossTalkCbkType, + lefwNoiseTableCbkType, + lefwCorrectionTableCbkType, + lefwSpacingCbkType, + lefwMinFeatureCbkType, + lefwDielectricCbkType, + lefwIRDropCbkType, + lefwSiteCbkType, + lefwArrayCbkType, + lefwMacroCbkType, + lefwAntennaCbkType, + lefwExtCbkType, + lefwEndLibCbkType + + /* NEW CALLBACKS - each callback has its own type. For each callback + * that you add, you must add an item to this enum. */ + +} lefwCallbackType_e; + + +/* Declarations of function signatures for each type of callback. + * These declarations are type-safe when compiling with ANSI C + * or C++; you will only be able to register a function pointer + * with the correct signature for a given type of callback. + * + * Each callback function is expected to return 0 if successful. + * A non-zero return code will cause the writer to abort. + * + * The lefwDesignStart and lefwDesignEnd callback is only called once. + * Other callbacks may be called multiple times, each time with a different + * set of data. + * + * For each callback, the Lef API will make the callback to the + * function supplied by the client, which should either make a copy + * of the Lef object, or store the data in the client's own data structures. + * The Lef API will delete or reuse each object after making the callback, + * so the client should not keep a pointer to it. + * + * All callbacks pass the user data pointer provided in lefwRead() + * or lefwSetUserData() back to the client; this can be used by the + * client to obtain access to the rest of the client's data structures. + * + * The user data pointer is obtained using lefwGetUserData() immediately + * prior to making each callback, so the client is free to change the + * user data on the fly if necessary. + * + * Callbacks with the same signature are passed a callback type + * parameter, which allows an application to write a single callback + * function, register that function for multiple callbacks, then + * switch based on the callback type to handle the appropriate type of + * data. + */ + + +// A declaration of the signature of all callbacks that return nothing. +typedef int (*lefwVoidCbkFnType) ( lefwCallbackType_e, lefiUserData ); + + /* NEW CALLBACK - If your callback returns a pointer to a new class then + * you must add a type function here. */ + +/* Functions to call to register a callback function. + */ +extern void lefwSetVersionCbk(lefwVoidCbkFnType); +extern void lefwSetCaseSensitiveCbk(lefwVoidCbkFnType); +extern void lefwSetNoWireExtensionCbk(lefwVoidCbkFnType); +extern void lefwSetBusBitCharsCbk(lefwVoidCbkFnType); +extern void lefwSetDividerCharCbk(lefwVoidCbkFnType); +extern void lefwSetManufacturingGridCbk(lefwVoidCbkFnType); +extern void lefwSetUseMinSpacingCbk(lefwVoidCbkFnType); +extern void lefwSetClearanceMeasureCbk(lefwVoidCbkFnType); +extern void lefwSetUnitsCbk(lefwVoidCbkFnType); +extern void lefwAntennaInputGateAreaCbk(lefwVoidCbkFnType); +extern void lefwAntennaInOutDiffAreaCbk(lefwVoidCbkFnType); +extern void lefwAntennaOutputDiffAreaCbk(lefwVoidCbkFnType); +extern void lefwSetPropDefCbk(lefwVoidCbkFnType); +extern void lefwSetLayerCbk(lefwVoidCbkFnType); +extern void lefwSetViaCbk(lefwVoidCbkFnType); +extern void lefwSetViaRuleCbk(lefwVoidCbkFnType); +extern void lefwSetNonDefaultCbk(lefwVoidCbkFnType); +extern void lefwSetCrossTalkCbk(lefwVoidCbkFnType); +extern void lefwSetNoiseTableCbk(lefwVoidCbkFnType); +extern void lefwSetCorrectionTableCbk(lefwVoidCbkFnType); +extern void lefwSetSpacingCbk(lefwVoidCbkFnType); +extern void lefwSetMinFeatureCbk(lefwVoidCbkFnType); +extern void lefwSetDielectricCbk(lefwVoidCbkFnType); +extern void lefwSetIRDropCbk(lefwVoidCbkFnType); +extern void lefwSetSiteCbk(lefwVoidCbkFnType); +extern void lefwSetArrayCbk(lefwVoidCbkFnType); +extern void lefwSetMacroCbk(lefwVoidCbkFnType); +extern void lefwSetAntennaCbk(lefwVoidCbkFnType); +extern void lefwSetExtCbk(lefwVoidCbkFnType); +extern void lefwSetEndLibCbk(lefwVoidCbkFnType); + +/* NEW CALLBACK - each callback must have a function to allow the user + * to set it. Add the function here. */ + +/* + * Set all of the callbacks that have not yet been set to the following + * function. This is especially useful if you want to check to see + * if you forgot anything. + */ +extern void lefwSetUnusedCallbacks (lefwVoidCbkFnType func); + +// Routine to set the message logging routine for errors +typedef void (*LEFI_LOG_FUNCTION)(const char*); +extern void lefwSetLogFunction( LEFI_LOG_FUNCTION ); + +// Routine to set the message logging routine for warnings +typedef void (*LEFI_WARNING_LOG_FUNCTION)(const char*); +extern void lefwSetWarningLogFunction( LEFI_WARNING_LOG_FUNCTION ); + +END_LEFDEF_PARSER_NAMESPACE + +USE_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lef/lex.h b/lefdef/src/lef/lef/lex.h new file mode 100644 index 00000000..4f953199 --- /dev/null +++ b/lefdef/src/lef/lef/lex.h @@ -0,0 +1,69 @@ +/******************************************************************************* + ******************************************************************************* + * Copyright 2012 - 2014, Cadence Design Systems + * + * This file is part of the Cadence LEF/DEF Open Source + * Distribution, Product Version 5.8. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. + * + * For updates, support, or to become part of the LEF/DEF Community, + * check www.openeda.org for details. + ******************************************************************************* + * + * $Author: dell $ + * $Revision: #1 $ + * $Date: 2017/06/06 $ + * $State: $ + ******************************************************************************/ + +#ifndef leh_h +#define leh_h + +#include "lefiKRDefs.hpp" + +BEGIN_LEFDEF_PARSER_NAMESPACE + +void lefAddStringDefine(const char *token, + const char *string); + +void lefAddBooleanDefine(const char *token, + int val); + +void lefAddNumDefine(const char *token, + double val); + +void yyerror(const char *s); +void lefError(int msgNum, + const char *s); +void lefWarning(int msgNum, + const char *s); +void lefInfo(int msgNum, + const char *s); +void *lefMalloc(size_t lef_size); +void *lefRealloc(void *name, + size_t lef_size); +void lefFree(void *name); +void lefSetNonDefault(const char *name); +void lefUnsetNonDefault(); + +extern int yylex(); +extern void lex_init(); +extern int lefyyparse(); +extern void lex_un_init(); + +int fake_ftell(); + +END_LEFDEF_PARSER_NAMESPACE + +#endif diff --git a/lefdef/src/lef/lefdiff/CMakeLists.txt b/lefdef/src/lef/lefdiff/CMakeLists.txt new file mode 100644 index 00000000..fd3bcbf4 --- /dev/null +++ b/lefdef/src/lef/lefdiff/CMakeLists.txt @@ -0,0 +1,13 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + include_directories ( ${LEFDEF_SOURCE_DIR}/src/lef/lef + ) + + set ( cpps diffLefRW.cpp + differLef.cpp + ) + + add_executable ( lefdiff ${cpps} ) + target_link_libraries ( lefdiff lef ) + + install ( TARGETS lefdiff DESTINATION bin ) diff --git a/lefdef/src/lef/lefdiff/Makefile b/lefdef/src/lef/lefdiff/Makefile new file mode 100644 index 00000000..5dddf8d0 --- /dev/null +++ b/lefdef/src/lef/lefdiff/Makefile @@ -0,0 +1,16 @@ +FAKE_ALL: all + +BINTARGET = lefdiff + +HEADERS = \ + diffLefRW.hpp + +PUBLIC_HDRS = + +LDLIBS = ../lib/liblef.a + +BINSRCS = \ + diffLefRW.cpp \ + differLef.cpp + +include ../template.mk diff --git a/lefdef/src/lef/lefdiff/diffLefRW.cpp b/lefdef/src/lef/lefdiff/diffLefRW.cpp new file mode 100644 index 00000000..bda1515f --- /dev/null +++ b/lefdef/src/lef/lefdiff/diffLefRW.cpp @@ -0,0 +1,2101 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2015, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +// This program is the diffLef core program. It has all the callback +// routines and write it out to a temporary file + +#include +#include +#ifndef WIN32 +# include +#endif /* not WIN32 */ +#include "lefrReader.hpp" +#include "lefwWriter.hpp" +#include "lefiDebug.hpp" + +char defaultName[128]; +char defaultOut[128]; +FILE* fout; +int printing = 0; // Printing the output. +void* userData; + +// TX_DIR:TRANSLATION ON + +void dataError() { + fprintf(fout, "ERROR: returned user data is not correct!\n"); +} + + +void checkType(lefrCallbackType_e c) { + if (c >= 0 && c <= lefrLibraryEndCbkType) { + // OK + } else { + fprintf(fout, "ERROR: callback type is out of bounds!\n"); + } +} + +// 05/24/2001 - Wanda da Rosa. PCR 373170 +// This function is added due to the rounding between machines are +// different. For a 5, solaries will round down while hppa will roundup. +// This function will make sure it round up for all the machine +double chkNum(double num) { + long tempNum; + if ((num > 1000004) || (num < -1000004)) { + tempNum = (long)num; + if ((tempNum%5) == 0) + return num + 3; + } + return num; +} + +// Print Via +void lefVia(lefiVia* via, char* inName) { + int i, j; + + fprintf(fout, "%s %s", inName, via->name()); + if (via->hasDefault()) + fprintf(fout, " DEFAULT"); + if (via->hasGenerated()) + fprintf(fout, " GENERATED"); + if (via->hasTopOfStack()) + fprintf(fout, " TOPOFSTACKONLY"); + if (via->hasForeign()) { + fprintf(fout, " FOREIGN %s", via->foreign()); + if (via->hasForeignPnt()) { + fprintf(fout, " ( %g %g )", chkNum(via->foreignX()), + chkNum(via->foreignY())); + if (via->hasForeignOrient()) + fprintf(fout, " %s", lefiOrientStr(via->foreignOrient())); + } + } + fprintf(fout, "\n"); + if (via->hasProperties()) { + for (i = 0; i < via->numProperties(); i++) { + fprintf(fout, "%s %s PROP", inName, via->name()); + fprintf(fout, " %s", via->propName(i)); + if (via->propIsNumber(i)) + fprintf(fout, " %g", chkNum(via->propNumber(i))); + if (via->propIsString(i)) + fprintf(fout, " %s", via->propValue(i)); + fprintf(fout, "\n"); + } + } + if (via->hasViaRule()) { + fprintf(fout, "%s %s %g %g %s %s %s %g %g %g %g %g %g", via->name(), + via->viaRuleName(), via->xCutSize(), via->yCutSize(), + via->botMetalLayer(), via->cutLayer(), via->topMetalLayer(), + via->xCutSpacing(), via->yCutSpacing(), via->xBotEnc(), + via->yBotEnc(), via->xTopEnc(), via->yTopEnc()); + if (via->hasRowCol()) + fprintf(fout, " %d %d", via->numCutRows(), via->numCutCols()); + if (via->hasOrigin()) + fprintf(fout, " %g %g", via->xOffset(), via->yOffset()); + if (via->hasOffset()) + fprintf(fout, " %g %g %g %g", via->xBotOffset(), via->yBotOffset(), + via->xTopOffset(), via->yTopOffset()); + if (via->hasCutPattern()) + fprintf(fout, " %s", via->cutPattern()); + fprintf(fout, "\n"); + } + if (via->hasResistance()) + fprintf(fout, "%s %s RESISTANCE %g\n",inName, via->name(), + chkNum(via->resistance())); + if (via->numLayers() > 0) { + for (i = 0; i < via->numLayers(); i++) { + fprintf(fout, "%s %s LAYER %s\n", inName, via->name(), + via->layerName(i)); + for (j = 0; j < via->numRects(i); j++) { + if (via->rectColorMask(i, j)) { + fprintf(fout, "%s %s RECT MASK % d ( %g %g ) ( %g %g )\n", + inName, via->name(), via->rectColorMask(i, j), + chkNum(via->xl(i, j)), chkNum(via->yl(i, j)), + chkNum(via->xh(i, j)), chkNum(via->yh(i, j))); + } else { + fprintf(fout, "%s %s RECT ( %g %g ) ( %g %g )\n", inName, + via->name(), + chkNum(via->xl(i, j)), chkNum(via->yl(i, j)), + chkNum(via->xh(i, j)), chkNum(via->yh(i, j))); + } + } + for (j = 0; j < via->numPolygons(i); j++) { + struct lefiGeomPolygon poly; + poly = via->getPolygon(i, j); + if (via->polyColorMask(i, j)) { + fprintf(fout, "%s %s POLYGON MASK %d", inName, via->name(), + via->polyColorMask(i, j)); + } else { + fprintf(fout, "%s %s POLYGON", inName, via->name()); + } + for (int k = 0; k < poly.numPoints; k++) + fprintf(fout, " %g %g", poly.x[k], poly.y[k]); + fprintf(fout, "\n"); + } + } + } + return; +} + +// Print Spacing +void lefSpacing(lefiSpacing* spacing, char *inName) { + fprintf(fout, "%s SAMENET %s %s %g ", inName, spacing->name1(), + spacing->name2(), chkNum(spacing->distance())); + if (spacing->hasStack()) + fprintf(fout, " STACK"); + fprintf(fout,"\n"); + return; +} + +// Print Via Rule Layer +void lefViaRuleLayer(lefiViaRuleLayer* vLayer, char* viaName) { + fprintf(fout, "VIARULE %s LAYER %s", viaName, vLayer->name()); + if (vLayer->hasDirection()) { + if (vLayer->isHorizontal()) + fprintf(fout, " DIRECTION HORIZONTAL"); + if (vLayer->isVertical()) + fprintf(fout, " DIRECTION VERTICAL"); + } + if (vLayer->hasEnclosure()) + fprintf(fout, " ENCLOSURE %g %g\n", chkNum(vLayer->enclosureOverhang1()), + chkNum(vLayer->enclosureOverhang2())); + if (vLayer->hasWidth()) + fprintf(fout, " WIDTH %g TO %g", chkNum(vLayer->widthMin()), + chkNum(vLayer->widthMax())); + if (vLayer->hasResistance()) + fprintf(fout, " RESISTANCE %g", chkNum(vLayer->resistance())); + if (vLayer->hasOverhang()) + fprintf(fout, " OVERHANG %g", chkNum(vLayer->overhang())); + if (vLayer->hasMetalOverhang()) + fprintf(fout, " METALOVERHANG %g", chkNum(vLayer->metalOverhang())); + if (vLayer->hasSpacing()) + fprintf(fout, " SPACING %g BY %g", chkNum(vLayer->spacingStepX()), + chkNum(vLayer->spacingStepY())); + if (vLayer->hasRect()) + fprintf(fout, " RECT ( %g %g ) ( %g %g )", chkNum(vLayer->xl()), + chkNum(vLayer->yl()), chkNum(vLayer->xh()), chkNum(vLayer->yh())); + fprintf(fout, "\n"); + return; +} + +// Print Geometry +void prtGeometry(lefiGeometries* geometry, char* inName) { + int numItems = geometry->numItems(); + int i, j; + lefiGeomPath* path; + lefiGeomPathIter* pathIter; + lefiGeomRect* rect; + lefiGeomRectIter* rectIter; + lefiGeomPolygon* polygon; + lefiGeomPolygonIter* polygonIter; + lefiGeomVia* via; + lefiGeomViaIter* viaIter; + + for (i = 0; i < numItems; i++) { + switch (geometry->itemType(i)) { + case lefiGeomClassE: + fprintf(fout, "%s CLASS %s\n", inName, geometry->getClass(i)); + break; + case lefiGeomLayerE: + fprintf(fout, "%s LAYER %s\n", inName, geometry->getLayer(i)); + break; + case lefiGeomLayerMinSpacingE: + fprintf(fout, "%s SPACING %g\n", inName, + chkNum(geometry->getLayerMinSpacing(i))); + break; + case lefiGeomLayerExceptPgNetE: + fprintf(fout, "%s EXCEPTPGNET\n", inName); + break; + case lefiGeomLayerRuleWidthE: + fprintf(fout, "%s DESIGNRULEWIDTH %g\n", inName, + chkNum(geometry->getLayerRuleWidth(i))); + break; + case lefiGeomWidthE: + fprintf(fout, "%s WIDTH %g\n", inName, + chkNum(geometry->getWidth(i))); + break; + case lefiGeomPathE: + path = geometry->getPath(i); + if (path->colorMask != 0) { + fprintf(fout, "%s PATH MASK %d ", inName, path->colorMask); + } else { + fprintf(fout, "%s PATH ", inName); + } + + for (j = 0; j < path->numPoints; j++) { + if (j+1 == path->numPoints) // last one on the list + fprintf(fout, " ( %g %g )\n", chkNum(path->x[j]), + chkNum(path->y[j])); + else + fprintf(fout, " ( %g %g )", chkNum(path->x[j]), + chkNum(path->y[j])); + } + break; + case lefiGeomPathIterE: + pathIter = geometry->getPathIter(i); + if (pathIter->colorMask != 0) { + fprintf(fout, "%s PATH MASK %d ITERATED ", inName, + pathIter->colorMask); + } else { + fprintf(fout, "%s PATH ITERATED ", inName); + } + for (j = 0; j < pathIter->numPoints; j++) + fprintf(fout, " ( %g %g )", chkNum(pathIter->x[j]), + chkNum(pathIter->y[j])); + fprintf(fout, " DO %g BY %g STEP %g %g\n", + chkNum(pathIter->xStart), chkNum(pathIter->yStart), + chkNum(pathIter->xStep), chkNum(pathIter->yStep)); + break; + case lefiGeomRectE: + rect = geometry->getRect(i); + if (rect->colorMask != 0) { + fprintf(fout, "%s RECT MASK %d ( %g %g ) ( %g %g )\n", + inName, rect->colorMask, + chkNum(rect->xl), chkNum(rect->yl), + chkNum(rect->xh), chkNum(rect->yh)); + } else { + fprintf(fout, "%s RECT ( %g %g ) ( %g %g )\n", inName, + chkNum(rect->xl), chkNum(rect->yl), + chkNum(rect->xh), chkNum(rect->yh)); + } + break; + case lefiGeomRectIterE: + rectIter = geometry->getRectIter(i); + if (rectIter->colorMask != 0) { + fprintf(fout, "%s RECT MASK %d ITERATE ( %g %g ) ( %g %g )", + inName, rectIter->colorMask, + chkNum(rectIter->xl), chkNum(rectIter->yl), + chkNum(rectIter->xh), chkNum(rectIter->yh)); + } else { + fprintf(fout, "%s RECT ITERATE ( %g %g ) ( %g %g )", inName, + chkNum(rectIter->xl), chkNum(rectIter->yl), + chkNum(rectIter->xh), chkNum(rectIter->yh)); + } + fprintf(fout, " DO %g BY %g STEP %g %g ;\n", + chkNum(rectIter->xStart), chkNum(rectIter->yStart), + chkNum(rectIter->xStep), chkNum(rectIter->yStep)); + break; + case lefiGeomPolygonE: + polygon = geometry->getPolygon(i); + if (polygon->colorMask != 0) { + fprintf(fout, "%s POLYGON MASK %d ", inName, polygon->colorMask); + } else { + fprintf(fout, "%s POLYGON ", inName); + } + for (j = 0; j < polygon->numPoints; j++) { + if (j+1 == polygon->numPoints) // last one on the list + fprintf(fout, " ( %g %g )\n", chkNum(polygon->x[j]), + chkNum(polygon->y[j])); + else + fprintf(fout, " ( %g %g )", chkNum(polygon->x[j]), + chkNum(polygon->y[j])); + } + break; + case lefiGeomPolygonIterE: + polygonIter = geometry->getPolygonIter(i); + if (polygonIter->colorMask != 0) { + fprintf(fout, "%s POLYGON MASK %d ITERATE", inName, + polygonIter->colorMask); + } else { + fprintf(fout, "%s POLYGON ITERATE", inName); + } + for (j = 0; j < polygonIter->numPoints; j++) + fprintf(fout, " ( %g %g )", chkNum(polygonIter->x[j]), + chkNum(polygonIter->y[j])); + fprintf(fout, " DO %g BY %g STEP %g %g\n", + chkNum(polygonIter->xStart), chkNum(polygonIter->yStart), + chkNum(polygonIter->xStep), chkNum(polygonIter->yStep)); + break; + case lefiGeomViaE: + via = geometry->getVia(i); + if (via->topMaskNum != 0 || via->bottomMaskNum != 0 || via->cutMaskNum !=0) { + fprintf(fout, "%s VIA MASK %d%d%d ( %g %g ) %s\n", inName, + via->topMaskNum, via->cutMaskNum, via->bottomMaskNum, + chkNum(via->x), + chkNum(via->y), via->name); + } else { + fprintf(fout, "%s VIA ( %g %g ) %s\n", inName, chkNum(via->x), + chkNum(via->y), via->name); + } + break; + case lefiGeomViaIterE: + viaIter = geometry->getViaIter(i); + if (viaIter->topMaskNum != 0 || viaIter->cutMaskNum != 0 || viaIter->bottomMaskNum != 0) { + fprintf(fout, "%s VIA ITERATE MASK %d%d%d ( %g %g ) %s", inName, + viaIter->topMaskNum, viaIter->cutMaskNum, + viaIter->bottomMaskNum, + chkNum(viaIter->x), chkNum(viaIter->y), viaIter->name); + } else { + fprintf(fout, "%s VIA ITERATE ( %g %g ) %s", inName, + chkNum(viaIter->x), chkNum(viaIter->y), viaIter->name); + } + fprintf(fout, " DO %g BY %g STEP %g %g\n", + chkNum(viaIter->xStart), chkNum(viaIter->yStart), + chkNum(viaIter->xStep), chkNum(viaIter->yStep)); + break; + default: + fprintf(fout, "BOGUS geometries type.\n"); + break; + } + } +} + +// Antenna +int antennaCB(lefrCallbackType_e c, double value, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + + switch (c) { + case lefrAntennaInputCbkType: + fprintf(fout, "ANTINPUTGATEAREA %g\n", chkNum(value)); + break; + case lefrAntennaInoutCbkType: + fprintf(fout, "ANTINOUTDIFFAREA %g\n", chkNum(value)); + break; + case lefrAntennaOutputCbkType: + fprintf(fout, "ANTOUTPUTDIFFAREA %g\n", chkNum(value)); + break; + case lefrInputAntennaCbkType: + fprintf(fout, "INPUTPINANTENNASIZE %g\n", chkNum(value)); + break; + case lefrOutputAntennaCbkType: + fprintf(fout, "OUTPUTPINANTENNASIZE %g\n", chkNum(value)); + break; + case lefrInoutAntennaCbkType: + fprintf(fout, "INOUTPINANTENNASIZE %g\n", chkNum(value)); + break; + default: + break; + } + return 0; +} + +// Array +int arrayCB(lefrCallbackType_e c, lefiArray* a, lefiUserData ud) { + int i, j, defCaps; + lefiSitePattern* pattern; + lefiTrackPattern* track; + lefiGcellPattern* gcell; + + checkType(c); + if (ud != userData) dataError(); + + if (a->numSitePattern() > 0) { + for (i = 0; i < a->numSitePattern(); i++) { + pattern = a->sitePattern(i); + fprintf(fout, "ARRAY %s SITE %s %g %g %s DO %g BY %g STEP %g %g\n", + a->name(), pattern->name(), chkNum(pattern->x()), + chkNum(pattern->y()), lefiOrientStr(pattern->orient()), + chkNum(pattern->xStart()), chkNum(pattern->yStart()), + chkNum(pattern->xStep()), chkNum(pattern->yStep())); + } + } + if (a->numCanPlace() > 0) { + for (i = 0; i < a->numCanPlace(); i++) { + pattern = a->canPlace(i); + fprintf(fout, "ARRAY %s CANPLACE %s %g %g %s DO %g BY %g STEP %g %g\n", + a->name(), pattern->name(), chkNum(pattern->x()), + chkNum(pattern->y()), lefiOrientStr(pattern->orient()), + chkNum(pattern->xStart()), chkNum(pattern->yStart()), + chkNum(pattern->xStep()), chkNum(pattern->yStep())); + } + } + if (a->numCannotOccupy() > 0) { + for (i = 0; i < a->numCannotOccupy(); i++) { + pattern = a->cannotOccupy(i); + fprintf(fout, "ARRAY %s CANNOTOCCUPY %s %g %g %s DO %g BY %g STEP %g %g\n", + a->name(), pattern->name(), chkNum(pattern->x()), + chkNum(pattern->y()), lefiOrientStr(pattern->orient()), + chkNum(pattern->xStart()), chkNum(pattern->yStart()), + chkNum(pattern->xStep()), chkNum(pattern->yStep())); + } + } + + if (a->numTrack() > 0) { + for (i = 0; i < a->numTrack(); i++) { + track = a->track(i); + // 11/22/99 - Wanda da Rosa, PCR 283781. Merge the track with + // layer names. This way, if user split the layer into different + // line, the diff program won't generate extra lines. + if (track->numLayers() == 0) { + fprintf(fout, "ARRAY %s TRACKS %s, %g DO %d STEP %g\n", a->name(), + track->name(), chkNum(track->start()), track->numTracks(), + chkNum(track->space())); + } else { + fprintf(fout, "ARRAY %s TRACKS %s, %g DO %d STEP %g ", a->name(), + track->name(), chkNum(track->start()), track->numTracks(), + chkNum(track->space())); + for (j = 0; j < track->numLayers(); j++) + fprintf(fout, "%s ", track->layerName(j)); + fprintf(fout, ";\n"); + } + } + } + + if (a->numGcell() > 0) { + for (i = 0; i < a->numGcell(); i++) { + gcell = a->gcell(i); + fprintf(fout, "ARRAY %s GCELLGRID %s, %g DO %d STEP %g\n", a->name(), + gcell->name(), chkNum(gcell->start()), gcell->numCRs(), + chkNum(gcell->space())); + } + } + + if (a->numFloorPlans() > 0) { + for (i = 0; i < a->numFloorPlans(); i++) { + for (j = 0; j < a->numSites(i); j++) { + pattern = a->site(i, j); + fprintf(fout, + "ARRAY %s FLOORPLAN %s %s %s %g %g %s DO %d BY %d STEP %g %g\n", + a->name(), a->floorPlanName(i), a->siteType(i, j), + pattern->name(), chkNum(pattern->x()), chkNum(pattern->y()), + lefiOrientStr(pattern->orient()), pattern->xStart(), + pattern->yStart(), chkNum(pattern->xStep()), + chkNum(pattern->yStep())); + } + } + } + + defCaps = a->numDefaultCaps(); + if (defCaps > 0) { + for (i = 0; i < defCaps; i++) + fprintf(fout, "ARRAY %s DEFAULTCAP %d MINPINS %g WIRECAP %g\n", + a->name(), defCaps, chkNum(a->defaultCapMinPins(i)), + chkNum(a->defaultCap(i))); + } + return 0; +} + +// Busbitchar +int busBitCharsCB(lefrCallbackType_e c, const char* busBit, lefiUserData ud) +{ + checkType(c); + if (ud != userData) dataError(); + // use the lef writer to write out the data + fprintf(fout, "BUSBITCHARS %s\n", busBit); + return 0; +} + +// CaseSensitive +int caseSensCB(lefrCallbackType_e c, int caseSense, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + + if (caseSense == TRUE) + fprintf(fout, "NAMESCASESENSITIVE ON\n"); + else + fprintf(fout, "NAMESCASESENSITIVE OFF\n"); + return 0; +} + +// FixedMask +int fixedMaskCB(lefrCallbackType_e c, int fixedMask, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + + if (fixedMask == 1) + fprintf(fout, "FIXEDMASK ;\n"); + return 0; +} + +// Crearance +int clearanceCB(lefrCallbackType_e c, const char* name, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + + fprintf(fout, "CLEARANCEMEASURE %s\n", name); + return 0; +} + +// Crosstalk correcttable +int correctTableCB(lefrCallbackType_e c, lefiCorrectionTable* table, + lefiUserData ud) { + int i, j, k, l; + lefiCorrectionEdge *edge; + lefiCorrectionResistance *resist; + lefiCorrectionVictim *victim; + + checkType(c); + if (ud != userData) dataError(); + + fprintf(fout, "CROSSTALK CORRECTIONTABLE %d\n", table->num()); + for (i = 0; i < table->numEdges(); i++) { + edge = table->edge(i); + // resistances + if (edge->numResistances()) { + for (j = 0; j < edge->numResistances(); j++) { + resist = edge->resistance(j); + fprintf(fout, "CROSSTALK CORRECTIONTABLE %d RESISTANCE %g\n", + table->num(), chkNum(resist->num(j))); + // victims + for (k = 0; k < resist->numVictims(); k++) { + victim = resist->victim(k); + if (victim->length() > 0) + fprintf(fout, + "CROSSTALK CORRECTIONTABLE %d RESISTANCE %g VICTIMLEN %g\n", + table->num(), chkNum(resist->num(j)), + chkNum(victim->length())); + for (l = 0; l < victim->numCorrections(); l++) + fprintf(fout, + "CROSSTALK CORRECTIONTABLE %d RESISTANCE %g VICTIM GTH %g CORRECTIONFACTOR %g\n", + table->num(), chkNum(resist->num(j)), + chkNum(victim->length()), chkNum(victim->correction(l))); + } + } + } + } + return 0; +} + +// Dielectric +int dielectricCB(lefrCallbackType_e c, double dielectric, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + + fprintf(fout, "DIELECTRIC %g\n", chkNum(dielectric)); + return 0; +} + +// Divider +int dividerCB(lefrCallbackType_e c, const char* divideChar, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "DIVIDER %s\n", divideChar); + return 0; +} + +// Crosstalk edgeRate +int edgeRateCB(lefrCallbackType_e c, double rate, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "CROSSTALK EDGERATESCALEFACTOR %g\n", chkNum(rate)); + return 0; +} + +// Callback routine for edgeratethreshold1 +int edgeRate1CB(lefrCallbackType_e c, double rate, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "CROSSTALK EDGERATETHRESHOLD1 %g\n", chkNum(rate)); + return 0; +} + +// Callback routine for edgeratethreshold2 +int edgeRate2CB(lefrCallbackType_e c, double rate, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "CROSSTALK EDGERATETHRESHOLD2 %g\n", chkNum(rate)); + return 0; +} + +// InputAntenna +int inputAntCB(lefrCallbackType_e c, double antenna, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "INPUTINANTENNASIZE %g\n", chkNum(antenna)); + return 0; +} + +// OutputAntenna +int outputAntCB(lefrCallbackType_e c, double antenna, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "OUTPUTINANTENNASIZE %g\n", chkNum(antenna)); + return 0; +} + + +// InOutAntenna +int inoutAntCB(lefrCallbackType_e c, double antenna, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "INOUTPUTINANTENNASIZE %g\n", chkNum(antenna)); + return 0; +} + +// Irdrop +int irdropCB(lefrCallbackType_e c, lefiIRDrop* irdrop, lefiUserData ud) { + int i; + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "IRDROP TABLE %s ", irdrop->name()); + for (i = 0; i < irdrop->numValues(); i++) + fprintf(fout, "%g %g ", chkNum(irdrop->value1(i)), + chkNum(irdrop->value2(i))); + fprintf(fout, "\n"); + return 0; +} + +// Layer +int layerCB(lefrCallbackType_e c, lefiLayer* layer, lefiUserData ud) { + int i, j, k; + double *widths, *current; + lefiLayerDensity* density; + char pType; + int numPoints, propNum; + lefiAntennaPWL* pwl; + int needHeading; + int numMinCut, numMinenclosed; + lefiSpacingTable* spTable; + lefiInfluence* influence; + lefiParallel* parallel; + lefiTwoWidths* twoWidths; + lefiAntennaModel* aModel; + lefiOrthogonal* ortho; + + checkType(c); + if (ud != userData) dataError(); + if (layer->hasType()) + fprintf(fout, "LAYER %s TYPE %s\n", layer->name(), layer->type()); + if (layer->hasMask()) + fprintf(fout, "LAYER %s MASK %d\n", layer->name(), layer->mask()); + if (layer->hasPitch()) + fprintf(fout, "LAYER %s PITCH %g\n", layer->name(), chkNum(layer->pitch())); + else if (layer->hasXYPitch()) + fprintf(fout, "LAYER %s PITCH %g %g\n", layer->name(), + chkNum(layer->pitchX()), chkNum(layer->pitchY())); + if (layer->hasOffset()) + fprintf(fout, "LAYER %s OFFSET %g\n", layer->name(), + chkNum(layer->offset())); + else if (layer->hasXYOffset()) + fprintf(fout, "LAYER %s OFFSET %g %g\n", layer->name(), + chkNum(layer->offsetX()), chkNum(layer->offsetY())); + if (layer->hasDiagPitch()) + fprintf(fout, "LAYER %s DIAGPITCH %g\n", layer->name(), + chkNum(layer->diagPitch())); + else if (layer->hasXYDiagPitch()) + fprintf(fout, "LAYER %s DIAGPITCH %g %g\n", layer->name(), + chkNum(layer->diagPitchX()), chkNum(layer->diagPitchY())); + if (layer->hasDiagWidth()) + fprintf(fout, "LAYER %s DIAGWIDTH %g\n", layer->name(), + chkNum(layer->diagWidth())); + if (layer->hasDiagSpacing()) + fprintf(fout, "LAYER %s DIAGSPACING %g\n", layer->name(), + chkNum(layer->diagSpacing())); + if (layer->hasDiagMinEdgeLength()) + fprintf(fout, "LAYER %s DIAGMINEDGELENGTH %g\n", layer->name(), + chkNum(layer->diagMinEdgeLength())); + if (layer->hasWidth()) + fprintf(fout, "LAYER %s WIDTH %g\n", layer->name(), + chkNum(layer->width())); + if (layer->hasArea()) + fprintf(fout, "LAYER %s AREA %g\n", layer->name(), + chkNum(layer->area())); + if (layer->numMinSize()) { + fprintf(fout, "LAYER %s MINSIZE", layer->name()); + for (i = 0; i < layer->numMinSize(); i++) + fprintf(fout, " %g %g", layer->minSizeWidth(i), + layer->minSizeLength(i)); + fprintf(fout, "\n"); + } + if (layer->hasSlotWireWidth()) + fprintf(fout, "LAYER %s SLOTWIREWIDTH %g\n", layer->name(), + chkNum(layer->slotWireWidth())); + if (layer->hasSlotWireLength()) + fprintf(fout, "LAYER %s SLOTWIRELENGTH %g\n", layer->name(), + chkNum(layer->slotWireLength())); + if (layer->hasSlotWidth()) + fprintf(fout, "LAYER %s SLOTWIDTH %g\n", layer->name(), + chkNum(layer->slotWidth())); + if (layer->hasSlotLength()) + fprintf(fout, "LAYER %s SLOTLENGTH %g\n", layer->name(), + chkNum(layer->slotLength())); + if (layer->hasMaxAdjacentSlotSpacing()) + fprintf(fout, "LAYER %s MAXADJACENTSLOTSPACING %g\n", layer->name(), + chkNum(layer->maxAdjacentSlotSpacing())); + if (layer->hasMaxCoaxialSlotSpacing()) + fprintf(fout, "LAYER %s MAXCOAXIALSLOTSPACING %g\n", layer->name(), + chkNum(layer->maxCoaxialSlotSpacing())); + if (layer->hasMaxEdgeSlotSpacing()) + fprintf(fout, "LAYER %s MAXEDGESLOTSPACING %g\n", layer->name(), + chkNum(layer->maxEdgeSlotSpacing())); + if (layer->hasArraySpacing()) { + fprintf(fout, "LAYER %s ARRAYSPACING", layer->name()); + if (layer->hasLongArray()) + fprintf(fout, " LONGARRAY"); + if (layer->hasViaWidth()) + fprintf(fout, " WIDTH %g", chkNum(layer->viaWidth())); + fprintf(fout, " CUTSPACING %g", chkNum(layer->cutSpacing())); + fprintf(fout, "\n"); + for (i = 1; i < layer->numArrayCuts(); i++) { + fprintf(fout, "LAYER %s ARRAYCUTS %i SPACING %g\n", layer->name(), + layer->arrayCuts(i), + layer->arraySpacing(i)); + } + } + if (layer->hasSplitWireWidth()) + fprintf(fout, "LAYER %s SPLITWIREWIDTH %g\n", layer->name(), + chkNum(layer->splitWireWidth())); + if (layer->hasMinimumDensity()) + fprintf(fout, "LAYER %s MINIMUMDENSITY %g\n", layer->name(), + chkNum(layer->minimumDensity())); + if (layer->hasMaximumDensity()) + fprintf(fout, "LAYER %s MAXIMUMDENSITY %g\n", layer->name(), + chkNum(layer->maximumDensity())); + if (layer->hasDensityCheckWindow()) + fprintf(fout, "LAYER %s DENSITYCHECKWINDOW %g %g\n", layer->name(), + chkNum(layer->densityCheckWindowLength()), + chkNum(layer->densityCheckWindowWidth())); + if (layer->hasDensityCheckStep()) + fprintf(fout, "LAYER %s DENSITYCHECKSTEP %g\n", layer->name(), + chkNum(layer->densityCheckStep())); + if (layer->hasFillActiveSpacing()) + fprintf(fout, "LAYER %s FILLACTIVESPACING %g\n", layer->name(), + chkNum(layer->fillActiveSpacing())); + numMinCut = layer->numMinimumcut(); // 5.4.1 + if (numMinCut > 0) { + for (i = 0; i < numMinCut; i++) { + fprintf(fout, "LAYER %s MINIMUMCUT %d WIDTH %g", layer->name(), + layer->minimumcut(i), + layer->minimumcutWidth(i)); + if (layer->hasMinimumcutWithin(i)) + fprintf(fout, " WITHIN %g", layer->minimumcutWithin(i)); + if (layer->hasMinimumcutConnection(i)) + fprintf(fout, " %s", layer->minimumcutConnection(i)); + if (layer->hasMinimumcutNumCuts(i)) + fprintf(fout, " LENGTH %g WITHIN %g", + layer->minimumcutLength(i), + layer->minimumcutDistance(i)); + fprintf(fout, "\n"); + } + } + if (layer->hasMaxwidth()) // 5.4.1 + fprintf(fout, "LAYER %s MAXWIDTH %g\n", layer->name(), layer->maxwidth()); + if (layer->hasMinwidth()) // 5.5 + fprintf(fout, "LAYER %s MINWIDTH %g\n", layer->name(), layer->minwidth()); + numMinenclosed = layer->numMinenclosedarea(); + if (numMinenclosed > 0) { + for (i = 0; i < numMinenclosed; i++) { // 5.5, made it multiples + fprintf(fout, "LAYER %s MINENCLOSEDAREA %g", layer->name(), + layer->minenclosedarea(i)); + if (layer->hasMinenclosedareaWidth(i)) + fprintf(fout, " MINENCLOSEDAREAWIDTH %g", + layer->minenclosedareaWidth(i)); + fprintf(fout,"\n"); + } + } + if (layer->hasMinstep()) { // 5.4.1 & 5.6 + for (i = 0; i < layer->numMinstep(); i++) { + fprintf(fout, "LAYER %s MINSTEP %g", layer->name(), + layer->minstep(i)); + if (layer->hasMinstepType(i)) + fprintf(fout, " %s", layer->minstepType(i)); + if (layer->hasMinstepLengthsum(i)) + fprintf(fout, " LENGTHSUM %g", layer->minstepLengthsum(i)); + if (layer->hasMinstepMaxedges(i)) + fprintf(fout, " MAXEDGES %d", layer->minstepMaxedges(i)); + fprintf(fout, "\n"); + } + } + if (layer->hasProtrusion()) // 5.4.1 + fprintf(fout, "LAYER %s PROTRUSIONWIDTH %g LENGTH %g WIDTH %g\n", + layer->name(), layer->protrusionWidth1(), + layer->protrusionLength(), layer->protrusionWidth2()); + if (layer->hasSpacingNumber()) { + for (i = 0; i < layer->numSpacing(); i++) { + fprintf(fout, "LAYER %s SPACING %g", layer->name(), + chkNum(layer->spacing(i))); + if (layer->spacingName(i)) + fprintf(fout, " LAYER %s", layer->spacingName(i)); + if (layer->hasSpacingLayerStack(i)) + fprintf(fout, " STACK"); + fprintf(fout,"\n"); + if (layer->hasSpacingAdjacent(i)) + fprintf(fout, "LAYER %s ADJACENTCUTS %d WITHIN %g\n", layer->name(), + layer->spacingAdjacentCuts(i), + chkNum(layer->spacingAdjacentWithin(i))); + if (layer->hasSpacingAdjacentExcept(i)) + fprintf(fout, "LAYER %s EXCEPTSAMEPGNET\n", layer->name()); + if (layer->hasSpacingCenterToCenter(i)) + fprintf(fout, "LAYER %s CENTERTOCENTER\n", layer->name()); + if (layer->hasSpacingSamenet(i)) { + fprintf(fout, "LAYER %s SAMENET", layer->name()); + if (layer->hasSpacingSamenetPGonly(i)) + fprintf(fout, " PGONLY\n"); + else + fprintf(fout, "\n"); + } + if (layer->hasSpacingArea(i)) + fprintf(fout, "LAYER %s AREA %g\n", layer->name(), + chkNum(layer->spacingArea(i))); + if (layer->hasSpacingRange(i)) { + fprintf(fout, "LAYER %s RANGE %g %g", layer->name(), + chkNum(layer->spacingRangeMin(i)), + chkNum(layer->spacingRangeMax(i))); + if (layer->hasSpacingRangeUseLengthThreshold(i)) + fprintf(fout, "USELENGTHTHRESHOLD "); + else if (layer->hasSpacingRangeInfluence(i)) { + fprintf(fout, "INFLUENCE %g ", + layer->spacingRangeInfluence(i)); + if (layer->hasSpacingRangeInfluenceRange(i)) + fprintf(fout, "RANGE %g %g ", + layer->spacingRangeInfluenceMin(i), + layer->spacingRangeInfluenceMax(i)); + } else if (layer->hasSpacingRangeRange(i)) + fprintf(fout, "RANGE %g %g ", + layer->spacingRangeRangeMin(i), + layer->spacingRangeRangeMax(i)); + fprintf(fout,"\n"); + } + else if (layer->hasSpacingLengthThreshold(i)) { + fprintf(fout, "LAYER %s LENGTHTHRESHOLD %g\n", layer->name(), + chkNum(layer->spacingLengthThreshold(i))); + if (layer->hasSpacingLengthThresholdRange(i)) + fprintf(fout, "RANGE %g %g", + layer->spacingLengthThresholdRangeMin(i), + layer->spacingLengthThresholdRangeMax(i)); + fprintf(fout,"\n"); + } + else if (layer->hasSpacingNotchLength(i)) { + fprintf(fout, "LAYER %s NOTCHLENGTH %g\n", layer->name(), + chkNum(layer->spacingNotchLength(i))); + } + else if (layer->hasSpacingEndOfNotchWidth(i)) { + fprintf(fout, "LAYER %s ENDOFNOTCHWIDTH %g NOTCHSPACING %g, NOTCHLENGTH %g\n", + layer->name(), + chkNum(layer->spacingEndOfNotchWidth(i)), + chkNum(layer->spacingEndOfNotchSpacing(i)), + chkNum(layer->spacingEndOfNotchLength(i))); + } + if (layer->hasSpacingParallelOverlap(i)) + fprintf(fout, "LAYER %s PARALLELOVERLAP\n", layer->name()); + if (layer->hasSpacingEndOfLine(i)) { + fprintf(fout, "LAYER %s ENDOFLINE %g WITHIN %g ", layer->name(), + chkNum(layer->spacingEolWidth(i)), + chkNum(layer->spacingEolWithin(i))); + if (layer->hasSpacingParellelEdge(i)) { + fprintf(fout, "PARALLELEDGE %g WITHIN %g ", + chkNum(layer->spacingParSpace(i)), + chkNum(layer->spacingParWithin(i))); + if (layer->hasSpacingTwoEdges(i)) { + fprintf(fout, "TWOEDGES "); + } + } + fprintf(fout,"\n"); + } + } + } + if (layer->hasSpacingTableOrtho()) { + fprintf(fout, "LAYER %s SPACINGTABLE ORTHOGONAL\n", layer->name()); + ortho = layer->orthogonal(); + for (i = 0; i < ortho->numOrthogonal(); i++) { + fprintf(fout, "LAYER %s SPACINGTABLE ORTHOGONAL WITHIN %g SPACING %g\n", + layer->name(), ortho->cutWithin(i), + ortho->orthoSpacing(i)); + } + fprintf(fout, ";\n"); + } + if (layer->numEnclosure() > 0) { + fprintf(fout, "LAYER %s ENCLOSURE", layer->name()); + for (i = 0; i < layer->numEnclosure(); i++) { + if (layer->hasEnclosureRule(i)) + fprintf(fout, " %s", layer->enclosureRule(i)); + fprintf(fout, " %g %g", layer->enclosureOverhang1(i), + layer->enclosureOverhang2(i)); + if (layer->hasEnclosureWidth(i)) + fprintf(fout, " WIDTH %g", layer->enclosureMinWidth(i)); + if (layer->hasEnclosureExceptExtraCut(i)) + fprintf(fout, " EXCEPTEXTRACUT %g", + layer->enclosureExceptExtraCut(i)); + if (layer->hasEnclosureMinLength(i)) + fprintf(fout, " LENGTH %g", layer->enclosureMinLength(i)); + fprintf(fout, "\n"); + } + } + if (layer->numPreferEnclosure() > 0) { + fprintf(fout, "LAYER %s PREFERENCLOSURE", layer->name()); + for (i = 0; i < layer->numPreferEnclosure(); i++) { + if (layer->hasPreferEnclosureRule(i)) + fprintf(fout, "%s ", layer->preferEnclosureRule(i)); + fprintf(fout, "%g %g ", layer->preferEnclosureOverhang1(i), + layer->preferEnclosureOverhang2(i)); + if (layer->hasPreferEnclosureWidth(i)) + fprintf(fout, "WIDTH %g ",layer->preferEnclosureMinWidth(i)); + fprintf(fout, "\n"); + } + } + if (layer->hasResistancePerCut()) + fprintf(fout, "LAYER %s RESISTANCE %g\n", layer->name(), + chkNum(layer->resistancePerCut())); + if (layer->hasCurrentDensityPoint()) + fprintf(fout, "LAYER %s CURRENTDEN %g\n", layer->name(), + chkNum(layer->currentDensityPoint())); + if (layer->hasCurrentDensityArray()) { + layer->currentDensityArray(&numPoints, &widths, ¤t); + for (i = 0; i < numPoints; i++) + fprintf(fout, "LAYER %s CURRENTDEN ( %g %g )\n", layer->name(), + chkNum(widths[i]), chkNum(current[i])); + } + if (layer->hasDirection()) + fprintf(fout, "LAYER %s DIRECTION %s\n", layer->name(), + layer->direction()); + if (layer->hasResistance()) + fprintf(fout, "LAYER %s RESISTANCE RPERSQ %g\n", layer->name(), + chkNum(layer->resistance())); + if (layer->hasCapacitance()) + fprintf(fout, "LAYER %s CAPACITANCE CPERSQDIST %g\n", layer->name(), + chkNum(layer->capacitance())); + if (layer->hasHeight()) + fprintf(fout, "LAYER %s HEIGHT %g\n", layer->name(), chkNum(layer->height())); + if (layer->hasThickness()) + fprintf(fout, "LAYER %s THICKNESS %g\n", layer->name(), + chkNum(layer->thickness())); + if (layer->hasWireExtension()) + fprintf(fout, "LAYER %s WIREEXTENSION %g\n", layer->name(), + chkNum(layer->wireExtension())); + if (layer->hasShrinkage()) + fprintf(fout, "LAYER %s SHRINKAGE %g\n", layer->name(), + chkNum(layer->shrinkage())); + if (layer->hasCapMultiplier()) + fprintf(fout, "LAYER %s CAPMULTIPLIER %g\n", layer->name(), + chkNum(layer->capMultiplier())); + if (layer->hasEdgeCap()) + fprintf(fout, "LAYER %s EDGECAPACITANCE %g\n", layer->name(), + chkNum(layer->edgeCap())); + if (layer->hasAntennaArea()) + fprintf(fout, "LAYER %s ANTAREAFACTOR %g\n", layer->name(), + chkNum(layer->antennaArea())); + if (layer->hasAntennaLength()) + fprintf(fout, "LAYER %s ANTLENGTHFACTOR %g\n", layer->name(), + chkNum(layer->antennaLength())); + for (j = 0; j < layer->numAntennaModel(); j++) { // 5.5 + aModel = layer->antennaModel(j); + + if (aModel->hasAntennaAreaRatio()) + fprintf(fout, "LAYER %s %s ANTAREARATIO %g\n", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaAreaRatio())); + if (aModel->hasAntennaDiffAreaRatio()) + fprintf(fout, "LAYER %s %s ANTDIFFAREARATIO %g\n", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaDiffAreaRatio())); + else if (aModel->hasAntennaDiffAreaRatioPWL()) { + pwl = aModel->antennaDiffAreaRatioPWL(); + fprintf(fout, "LAYER %s %s ANTDIFFAREARATIO PWL", layer->name(), + aModel->antennaOxide()); + for (i = 0; i < pwl->numPWL(); i++) + fprintf(fout, " %g %g", chkNum(pwl->PWLdiffusion(i)), + chkNum(pwl->PWLratio(i))); + fprintf(fout, "\n"); + } + if (aModel->hasAntennaCumAreaRatio()) + fprintf(fout, "LAYER %s %s ANTCUMAREARATIO %g\n", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaCumAreaRatio())); + if (aModel->hasAntennaCumDiffAreaRatio()) + fprintf(fout, "LAYER %s %s ANTCUMDIFFAREARATIO %g\n", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaCumDiffAreaRatio())); + else if (aModel->hasAntennaCumDiffAreaRatioPWL()) { + pwl = aModel->antennaCumDiffAreaRatioPWL(); + fprintf(fout, "LAYER %s %s ANTCUMDIFFAREARATIO PWL", layer->name(), + aModel->antennaOxide()); + for (i = 0; i < pwl->numPWL(); i++) + fprintf(fout, " %g %g", chkNum(pwl->PWLdiffusion(i)), + chkNum(pwl->PWLratio(i))); + fprintf(fout, "\n"); + } + if (aModel->hasAntennaAreaFactor()) { + fprintf(fout, "LAYER %s %s ANTAREAFACTOR %g", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaAreaFactor())); + if (aModel->hasAntennaAreaFactorDUO()) + fprintf(fout, " DIFFUSEONLY"); + fprintf(fout, "\n"); + } + if (aModel->hasAntennaSideAreaRatio()) + fprintf(fout, "LAYER %s %s ANTSIDEAREARATIO %g\n", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaSideAreaRatio())); + if (aModel->hasAntennaDiffSideAreaRatio()) + fprintf(fout, "LAYER %s %s ANTDIFFSIDEAREARATIO %g\n", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaDiffSideAreaRatio())); + else if (aModel->hasAntennaDiffSideAreaRatioPWL()) { + pwl = aModel->antennaDiffSideAreaRatioPWL(); + fprintf(fout, "LAYER %s %s ANTDIFFSIDEAREARATIO PWL", layer->name(), + aModel->antennaOxide()); + for (i = 0; i < pwl->numPWL(); i++) + fprintf(fout, " %g %g", chkNum(pwl->PWLdiffusion(i)), + chkNum(pwl->PWLratio(i))); + fprintf(fout, "\n"); + } + if (aModel->hasAntennaCumSideAreaRatio()) + fprintf(fout, "LAYER %s %s ANTCUMSIDEAREARATIO %g\n", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaCumSideAreaRatio())); + if (aModel->hasAntennaCumDiffSideAreaRatio()) + fprintf(fout, "LAYER %s %s ANTCUMDIFFSIDEAREARATIO %g\n", layer->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaCumDiffSideAreaRatio())); + else if (aModel->hasAntennaCumDiffSideAreaRatioPWL()) { + pwl = aModel->antennaCumDiffSideAreaRatioPWL(); + fprintf(fout, "LAYER %s %s ANTCUMDIFFSIDEAREARATIO PWL", layer->name(), + aModel->antennaOxide()); + for (i = 0; i < pwl->numPWL(); i++) + fprintf(fout, "%g %g ", chkNum(pwl->PWLdiffusion(i)), + chkNum(pwl->PWLratio(i))); + fprintf(fout, "\n"); + } + if (aModel->hasAntennaSideAreaFactor()) { + fprintf(fout, " ANTSIDEAREAFACTOR %g ", + chkNum(aModel->antennaSideAreaFactor())); + if (aModel->hasAntennaSideAreaFactorDUO()) + fprintf(fout, " DIFFUSEONLY "); + fprintf(fout, "\n"); + } + } + + if (layer->numAccurrentDensity()) { + for (i = 0; i < layer->numAccurrentDensity(); i++) { + density = layer->accurrent(i); + fprintf(fout, "LAYER %s ACCURRENTDENSITY %s", layer->name(), + density->type()); + needHeading = 0; + if (density->hasOneEntry()) + fprintf(fout, " %g\n", chkNum(density->oneEntry())); + else { + if (density->numFrequency()) { +/* + if (needHeading) { + fprintf(fout, "LAYER %s ACCURRENTDENSITY %s", layer->name(), + density->type()); + } +*/ + fprintf(fout, " FREQUENCY"); + for (j = 0; j < density->numFrequency(); j++) + fprintf(fout, " %g", chkNum(density->frequency(j))); + fprintf(fout, "\n"); + needHeading = 1; + } + if (density->numWidths()) { + if (needHeading) { + fprintf(fout, "LAYER %s ACCURRENTDENSITY %s", layer->name(), + density->type()); + } + fprintf(fout, " WIDTH"); + for (j = 0; j < density->numWidths(); j++) + fprintf(fout, " %g", chkNum(density->width(j))); + fprintf(fout, "\n"); + needHeading = 1; + } + if (density->numTableEntries()) { + if (needHeading) { + fprintf(fout, "LAYER %s ACCURRENTDENSITY %s", layer->name(), + density->type()); + k = 0; + } + else k = 5; + fprintf(fout, " TABLEENTRIES"); + for (j = 0; j < density->numTableEntries(); j++) { + if (k > 4) { + fprintf(fout, + "\nLAYER %s ACCURRENTDENSITY %s TABLEENTRIES %g", + layer->name(), density->type(), + chkNum(density->tableEntry(j))); + k = 1; + } else { + fprintf(fout, " %g", chkNum(density->tableEntry(j))); + k++; + } + } + fprintf(fout, "\n"); + needHeading = 1; + } + } + } + } + if (layer->numDccurrentDensity()) { + for (i = 0; i < layer->numDccurrentDensity(); i++) { + density = layer->dccurrent(i); + fprintf(fout, "LAYER %s DCCURRENTDENSITY %s", layer->name(), + density->type()); + needHeading = 0; + if (density->hasOneEntry()) + fprintf(fout, " %g\n", chkNum(density->oneEntry())); + else { + if (density->numCutareas()) { +/* + if (needHeading) { + fprintf(fout, "LAYER %s DCCURRENTDENSITY %s", layer->name(), + density->type()); + } +*/ + fprintf(fout, " CUTAREA"); + for (j = 0; j < density->numCutareas(); j++) + fprintf(fout, " %g", chkNum(density->cutArea(j))); + fprintf(fout, "\n"); + needHeading = 1; + } + if (density->numWidths()) { + if (needHeading) { + fprintf(fout, "LAYER %s DCCURRENTDENSITY %s", layer->name(), + density->type()); + } + fprintf(fout, " WIDTH"); + for (j = 0; j < density->numWidths(); j++) + fprintf(fout, " %g", chkNum(density->width(j))); + fprintf(fout, "\n"); + needHeading = 1; + } + if (density->numTableEntries()) { + if (needHeading) { + fprintf(fout, "LAYER %s DCCURRENTDENSITY %s", layer->name(), + density->type()); + } + fprintf(fout, " TABLEENTRIES"); + for (j = 0; j < density->numTableEntries(); j++) + fprintf(fout, " %g", chkNum(density->tableEntry(j))); + fprintf(fout, "\n"); + needHeading = 1; + } + } + } + } + + for (i = 0; i < layer->numSpacingTable(); i++) { + spTable = layer->spacingTable(i); + if (spTable->isInfluence()) { + influence = spTable->influence(); + for (j = 0; j < influence->numInfluenceEntry(); j++) { + fprintf(fout, "LAYER %s SPACINGTABLE INFLUENCE WIDTH %g WITHIN %g SPACING %g\n", + layer->name(), influence->width(j), influence->distance(j), + influence->spacing(j)); + } + } else if (spTable->isParallel()) { + parallel = spTable->parallel(); + fprintf(fout, "LAYER %s SPACINGTABLE PARALLELRUNLENGTH", layer->name()); + for (j = 0; j < parallel->numLength(); j++) { + fprintf(fout, " %g", parallel->length(j)); + } + fprintf(fout, "\n"); + for (j = 0; j < parallel->numWidth(); j++) { + fprintf(fout, "LAYER %s SPACINGTABLE PARALLELRUNLENGTH WIDTH %g", + layer->name(), parallel->width(j)); + for (k = 0; k < parallel->numLength(); k++) { + fprintf(fout, " %g", parallel->widthSpacing(j, k)); + } + } + fprintf(fout, "\n"); + } else { + twoWidths = spTable->twoWidths(); + for (j = 0; j < twoWidths->numWidth(); j++) { + fprintf(fout, "LAYER %s TWOWIDTHS", layer->name()); + fprintf(fout, " WIDTH %g", twoWidths->width(j)); + if (twoWidths->hasWidthPRL(j)) + fprintf(fout, " PRL %g", twoWidths->widthPRL(j)); + for (k = 0; k < twoWidths->numWidthSpacing(j); k++) + fprintf(fout, " %g",twoWidths->widthSpacing(j, k)); + fprintf(fout, "\n"); + } + } + } + propNum = layer->numProps(); + if (propNum > 0) { + for (i = 0; i < propNum; i++) { + fprintf(fout, "LAYER %s PROP ", layer->name()); + // value can either be a string or number + fprintf(fout, "%s %s ", layer->propName(i), + layer->propValue(i)); + pType = layer->propType(i); + switch (pType) { + case 'R': fprintf(fout, "REAL"); + break; + case 'I': fprintf(fout, "INTEGER"); + break; + case 'S': fprintf(fout, "STRING"); + break; + case 'Q': fprintf(fout, "QUOTESTRING"); + break; + case 'N': fprintf(fout, "NUMBER"); + break; + } + fprintf(fout, "\n"); + } + } + + return 0; +} + +// Macro +int macroCB(lefrCallbackType_e c, lefiMacro* macro, lefiUserData ud) { + lefiSitePattern* pattern; + int propNum, i, hasPrtSym = 0; + + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "MACRO %s", macro->name()); + if (macro->hasClass()) + fprintf(fout, " CLASS %s", macro->macroClass()); + if (macro->isFixedMask()) + fprintf(fout, " FIXEDMASK "); + if (macro->hasEEQ()) + fprintf(fout, " EEQ %s", macro->EEQ()); + if (macro->hasLEQ()) + fprintf(fout, " LEQ %s", macro->LEQ()); + if (macro->hasSource()) + fprintf(fout, " SOURCE %s", macro->source()); + if (macro->hasXSymmetry()) { + fprintf(fout, " SYMMETRY X "); + hasPrtSym = 1; + } + if (macro->hasYSymmetry()) { // print X Y & R90 in one line + if (!hasPrtSym) { + fprintf(fout, " SYMMETRY Y "); + hasPrtSym = 1; + } + else + fprintf(fout, "Y "); + } + if (macro->has90Symmetry()) { + if (!hasPrtSym) { + fprintf(fout, " SYMMETRY R90 "); + hasPrtSym = 1; + } + else + fprintf(fout, "R90 "); + } + fprintf (fout, "\n"); + if (macro->hasSiteName()) + fprintf(fout, "MACRO %s SITE %s\n", macro->name(), macro->siteName()); + if (macro->hasSitePattern()) { + for (i = 0; i < macro->numSitePattern(); i++ ) { + pattern = macro->sitePattern(i); + if (pattern->hasStepPattern()) + fprintf(fout, "MACRO %s SITE %s %g %g %d DO %g BY %g STEP %g %g\n", + macro->name(), pattern->name(), chkNum(pattern->x()), + chkNum(pattern->y()), pattern->orient(), + chkNum(pattern->xStart()), chkNum(pattern->yStart()), + chkNum(pattern->xStep()), chkNum(pattern->yStep())); + else + fprintf(fout, "MACRO %s SITE %s %g %g %d\n", + macro->name(), pattern->name(), chkNum(pattern->x()), + chkNum(pattern->y()), pattern->orient()); + } + } + if (macro->hasSize()) + fprintf(fout, "MACRO %s SIZE %g BY %g\n", macro->name(), + chkNum(macro->sizeX()), chkNum(macro->sizeY())); + if (macro->hasForeign()) { + for (i = 0; i < macro->numForeigns(); i++) { + fprintf(fout, "MACRO %s FOREIGN %s", macro->name(), + macro->foreignName(i)); + if (macro->hasForeignPoint(i)) { + fprintf(fout, " ( %g %g )", chkNum(macro->foreignX(i)), + chkNum(macro->foreignY(i))); + if (macro->hasForeignOrient(i)) + fprintf(fout, " %s", lefiOrientStr(macro->foreignOrient(i))); + } + fprintf(fout, "\n"); + } + } + if (macro->hasOrigin()) + fprintf(fout, "MACRO %s ORIGIN ( %g %g )\n", macro->name(), + chkNum(macro->originX()), chkNum(macro->originY())); + if (macro->hasPower()) + fprintf(fout, "MACRO %s POWER %g\n", macro->name(), chkNum(macro->power())); + propNum = macro->numProperties(); + if (propNum > 0) { + for (i = 0; i < propNum; i++) { + fprintf(fout, "MACRO %s PROP", macro->name()); + // value can either be a string or number + if (macro->propValue(i)) { + fprintf(fout, " %s %s\n", macro->propName(i), macro->propValue(i)); + } + else + fprintf(fout, " %s %g\n", macro->propName(i), + chkNum(macro->propNum(i))); + } + } + return 0; +} + +// Manufacturinggrid +int manufacturingCB(lefrCallbackType_e c, double num, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "MANUFACTURINGGRID %g\n", chkNum(num)); + return 0; +} + +// Maxviastack +int maxStackViaCB(lefrCallbackType_e c, lefiMaxStackVia* maxStack, + lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "MAXVIASTACK %d", maxStack->maxStackVia()); + if (maxStack->hasMaxStackViaRange()) + fprintf(fout, " RANGE %s %s", + maxStack->maxStackViaBottomLayer(), + maxStack->maxStackViaTopLayer()); + fprintf(fout, "\n"); + return 0; +} + +// Minfeature +int minFeatureCB(lefrCallbackType_e c, lefiMinFeature* min, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "MINFEATURE %g %g\n", chkNum(min->one()), chkNum(min->two())); + return 0; +} + +// Universalnoisemargin +int noiseMarginCB(lefrCallbackType_e c, lefiNoiseMargin* margin, + lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "UNIVERSALNOISEMARGIN %g %g\n", chkNum(margin->high), + chkNum(margin->low)); + return 0; +} + +// NoiseTable +int noiseTableCB(lefrCallbackType_e c, lefiNoiseTable* table, lefiUserData ud) { + int i, j, k, l; + lefiNoiseEdge *edge; + lefiNoiseResistance *resist; + lefiNoiseVictim *victim; + + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "CROSSTALK NOISETABLE %d\n", table->num()); + if (table->numEdges() > 0) { + for (i = 0; i < table->numEdges(); i++) { + edge = table->edge(i); + // resistances + if (edge->numResistances()) { + for (j = 0; j < edge->numResistances(); j++) { + resist = edge->resistance(j); + fprintf(fout, "NOISETABLE %d RESISTANCE %g\n", + table->num(), chkNum(resist->num(j))); + // victims + for (k = 0; k < resist->numVictims(); k++) { + victim = resist->victim(k); + if (victim->length() > 0) + fprintf(fout, "CROSSTALK NOISETABLE %d RESISTANCE %g VICTIMLENGTH % g\n", + table->num(), chkNum(resist->num(j)), + chkNum(victim->length())); + for (l = 0; l < victim->numNoises(); l++) + fprintf(fout, "CROSSTALK NOISETABLE %d RESISTANCE %g VICTIMLENGT %g NOISEFACTOR %g\n", + table->num(), chkNum(resist->num(j)), + chkNum(victim->length()), chkNum(victim->noise(l))); + } + } + } + } + } + return 0; +} + +// Nondefault +int nonDefaultCB(lefrCallbackType_e c, lefiNonDefault* def, lefiUserData ud) { + int i; + lefiVia* via; + lefiSpacing* spacing; + char defName[1024]; + + checkType(c); + if (ud != userData) dataError(); + if (def->hasHardspacing()) + fprintf(fout, "NONDEFAULTRULE HARDSPACING\n"); + for (i = 0; i < def->numLayers(); i++) { + fprintf(fout, "NONDEFAULTRULE %s LAYER %s", def->name(), + def->layerName(i)); + if (def->hasLayerWidth(i)) + fprintf(fout, " WIDTH %g", chkNum(def->layerWidth(i))); + if (def->hasLayerDiagWidth(i)) + fprintf(fout, " DIAGWIDTH %g", chkNum(def->layerDiagWidth(i))); + if (def->hasLayerSpacing(i)) + fprintf(fout, " SPACING %g", chkNum(def->layerSpacing(i))); + if (def->hasLayerWireExtension(i)) + fprintf(fout, " WIREEXTENSION %g", chkNum(def->layerWireExtension(i))); + if (def->hasLayerResistance(i)) + fprintf(fout, " RESISTANCE RPERSQ %g", chkNum(def->layerResistance(i))); + if (def->hasLayerCapacitance(i)) + fprintf(fout, " CAPACITANCE CPERSQDIST %g", + chkNum(def->layerCapacitance(i))); + if (def->hasLayerEdgeCap(i)) + fprintf(fout, " EDGECAPACITANCE %g", chkNum(def->layerEdgeCap(i))); + fprintf(fout, "\n"); + } + + sprintf(defName, "NONDEFAULTRULE %s VIA", def->name()); + // handle via in nondefaultrule + for (i = 0; i < def->numVias(); i++) { + via = def->viaRule(i); + lefVia(via, defName); + } + + sprintf(defName, "NONDEFAULTRULE %s SPACING", def->name()); + // handle spacing in nondefaultrule + for (i = 0; i < def->numSpacingRules(); i++) { + spacing = def->spacingRule(i); + lefSpacing(spacing, defName); + } + + if (def->numUseVia() > 0) { + fprintf(fout, "NONDEFAULTRULE %s USEVIA", def->name()); + // handle spacing in nondefaultrule + for (i = 0; i < def->numUseVia(); i++) + fprintf(fout, " %s", def->viaName(i)); + fprintf(fout, "\n"); + } + + if (def->numUseViaRule() > 0) { + fprintf(fout, "NONDEFAULTRULE %s USEVIARULE", def->name()); + // handle spacing in nondefaultrule + for (i = 0; i < def->numUseViaRule(); i++) + fprintf(fout, " %s", def->viaRuleName(i)); + fprintf(fout, "\n"); + } + + if (def->numMinCuts() > 0) { + fprintf(fout, "NONDEFAULTRULE %s MINCUTS", def->name()); + // handle spacing in nondefaultrule + for (i = 0; i < def->numMinCuts(); i++) + fprintf(fout, " %s %d", def->cutLayerName(i), def->numCuts(i)); + fprintf(fout, "\n"); + } + + return 0; +} + +// Nowireextension +int noWireExtCB(lefrCallbackType_e c, const char* wireExt, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "NOWIREEXTENSION %s\n", wireExt); + return 0; +} + +// Obstruction +int obstructionCB(lefrCallbackType_e c, lefiObstruction* obs, + lefiUserData ud) { + lefiGeometries* geometry; + + checkType(c); + if (ud != userData) dataError(); + geometry = obs->geometries(); + prtGeometry(geometry, (char*)"OBS"); + return 0; +} + +// Pin +int pinCB(lefrCallbackType_e c, lefiPin* pin, lefiUserData ud) { + int numPorts, i, j; + lefiGeometries* geometry; + lefiPinAntennaModel* aModel; + + checkType(c); + if (ud != userData) dataError(); + if (pin->hasForeign()) { + if (pin->hasForeignOrient()) + fprintf(fout, "PIN %s FOREIGN %s STRUCTURE %g %g %s\n", pin->name(), + pin->foreignName(), chkNum(pin->foreignX()), + chkNum(pin->foreignY()), lefiOrientStr(pin->foreignOrient())); + else if (pin->hasForeignPoint()) + fprintf(fout, "PIN %s FOREIGN %s STRUCTURE %g %g", pin->name(), + pin->foreignName(), chkNum(pin->foreignX()), + chkNum(pin->foreignY())); + else + fprintf(fout, "PIN %s FOREIGN %s\n", pin->name(), pin->foreignName()); + } + if (pin->hasLEQ()) + fprintf(fout, "PIN %s LEQ %s\n", pin->name(), pin->LEQ()); + if (pin->hasDirection()) + fprintf(fout, "PIN %s DIRECTION %s\n", pin->name(), pin->direction()); + if (pin->hasUse()) + fprintf(fout, "PIN %s USE %s\n", pin->name(), pin->use()); + if (pin->hasShape()) + fprintf(fout, "PIN %s SHAPE %s\n", pin->name(), pin->shape()); + if (pin->hasMustjoin()) + fprintf(fout, "PIN %s MUSTJOIN %s\n", pin->name(), pin->mustjoin()); + if (pin->hasOutMargin()) + fprintf(fout, "PIN %s OUTPUTNOISEMARGIN %g %g\n", pin->name(), + chkNum(pin->outMarginHigh()), chkNum(pin->outMarginLow())); + if (pin->hasOutResistance()) + fprintf(fout, "PIN %s OUTPUTRESISTANCE %g %g\n", pin->name(), + chkNum(pin->outResistanceHigh()), chkNum(pin->outResistanceLow())); + if (pin->hasInMargin()) + fprintf(fout, "PIN %s INPUTNOISEMARGIN %g %g\n", pin->name(), + chkNum(pin->inMarginHigh()), chkNum(pin->inMarginLow())); + if (pin->hasPower()) + fprintf(fout, "PIN %s POWER %g\n", pin->name(), chkNum(pin->power())); + if (pin->hasLeakage()) + fprintf(fout, "PIN %s LEAKAGE %g\n", pin->name(), chkNum(pin->leakage())); + if (pin->hasMaxload()) + fprintf(fout, "PIN %s MAXLOAD %g\n", pin->name(), chkNum(pin->maxload())); + if (pin->hasCapacitance()) + fprintf(fout, "PIN %s CAPACITANCE %g\n", pin->name(), + chkNum(pin->capacitance())); + if (pin->hasResistance()) + fprintf(fout, "PIN %s RESISTANCE %g\n", pin->name(), + chkNum(pin->resistance())); + if (pin->hasPulldownres()) + fprintf(fout, "PIN %s PULLDOWNRES %g\n", pin->name(), + chkNum(pin->pulldownres())); + if (pin->hasTieoffr()) + fprintf(fout, "PIN %s TIEOFFR %g\n", pin->name(), chkNum(pin->tieoffr())); + if (pin->hasVHI()) + fprintf(fout, "PIN %s VHI %g\n", pin->name(), chkNum(pin->VHI())); + if (pin->hasVLO()) + fprintf(fout, "PIN %s VLO %g\n", pin->name(), chkNum(pin->VLO())); + if (pin->hasRiseVoltage()) + fprintf(fout, "PIN %s RISEVOLTAGETHRESHOLD %g\n", pin->name(), + chkNum(pin->riseVoltage())); + if (pin->hasFallVoltage()) + fprintf(fout, "PIN %s FALLVOLTAGETHRESHOLD %g\n", pin->name(), + chkNum(pin->fallVoltage())); + if (pin->hasRiseThresh()) + fprintf(fout, "PIN %s RISETHRESH %g\n", pin->name(), + chkNum(pin->riseThresh())); + if (pin->hasFallThresh()) + fprintf(fout, "PIN %s FALLTHRESH %g\n", pin->name(), + chkNum(pin->fallThresh())); + if (pin->hasRiseSatcur()) + fprintf(fout, "PIN %s RISESATCUR %g\n", pin->name(), + chkNum(pin->riseSatcur())); + if (pin->hasFallSatcur()) + fprintf(fout, "PIN %s FALLSATCUR %g\n", pin->name(), + chkNum(pin->fallSatcur())); + if (pin->hasRiseSlewLimit()) + fprintf(fout, "PIN %s RISESLEWLIMIT %g\n", pin->name(), + chkNum(pin->riseSlewLimit())); + if (pin->hasFallSlewLimit()) + fprintf(fout, "PIN %s FALLSLEWLIMIT %g\n", pin->name(), + chkNum(pin->fallSlewLimit())); + if (pin->hasCurrentSource()) + fprintf(fout, "PIN %s CURRENTSOURCE %s\n", pin->name(), + pin->currentSource()); + if (pin->hasTables()) + fprintf(fout, "PIN %s IV_TABLES %s %s\n", pin->name(), + pin->tableHighName(), pin->tableLowName()); + if (pin->hasTaperRule()) + fprintf(fout, "PIN %s TAPERRULE %s\n", pin->name(), pin->taperRule()); + if (pin->hasNetExpr()) + fprintf(fout, "PIN %s NETEXPR %s\n",pin->name(), pin->netExpr()); + if (pin->hasSupplySensitivity()) + fprintf(fout, "PIN %s SUPPLYSENSITIVITY %s\n", pin->name(), + pin->supplySensitivity()); + if (pin->hasGroundSensitivity()) + fprintf(fout, "PIN %s GROUNDSENSITIVITY %s\n", pin->name(), + pin->groundSensitivity()); + if (pin->hasAntennaSize()) { + for (i = 0; i < pin->numAntennaSize(); i++) { + fprintf(fout, "PIN %s ANTSIZE %g", pin->name(), + chkNum(pin->antennaSize(i))); + if (pin->antennaSizeLayer(i)) + fprintf(fout, " LAYER %s\n", pin->antennaSizeLayer(i)); + else + fprintf(fout, "\n"); + } + } + if (pin->hasAntennaMetalArea()) { + for (i = 0; i < pin->numAntennaMetalArea(); i++) { + fprintf(fout, "PIN %s ANTMETALAREA %g", pin->name(), + chkNum(pin->antennaMetalArea(i))); + if (pin->antennaMetalAreaLayer(i)) + fprintf(fout, " LAYER %s\n", pin->antennaMetalAreaLayer(i)); + else + fprintf(fout, "\n"); + } + } + if (pin->hasAntennaMetalLength()) { + for (i = 0; i < pin->numAntennaMetalLength(); i++) { + fprintf(fout, "PIN %s ANTMETALLENGTH %g", pin->name(), + chkNum(pin->antennaMetalLength(i))); + if (pin->antennaMetalLengthLayer(i)) + fprintf(fout, " LAYER %s\n", pin->antennaMetalLengthLayer(i)); + else + fprintf(fout, "\n"); + } + } + if (pin->hasAntennaPartialMetalArea()) { + for (i = 0; i < pin->numAntennaPartialMetalArea(); i++) { + fprintf(fout, "PIN %s ANTPARTIALMETALAREA %g", pin->name(), + chkNum(pin->antennaPartialMetalArea(i))); + if (pin->antennaPartialMetalAreaLayer(i)) + fprintf(fout, " LAYER %s", + pin->antennaPartialMetalAreaLayer(i)); + fprintf(fout, "\n"); + } + } + if (pin->hasAntennaPartialMetalSideArea()) { + for (i = 0; i < pin->numAntennaPartialMetalSideArea(); i++) { + fprintf(fout, "PIN %s ANTPARTIALMETALSIDEAREA %g", pin->name(), + chkNum(pin->antennaPartialMetalSideArea(i))); + if (pin->antennaPartialMetalSideAreaLayer(i)) + fprintf(fout, " LAYER %s ", + pin->antennaPartialMetalSideAreaLayer(i)); + fprintf(fout, "\n"); + } + } + if (pin->hasAntennaPartialCutArea()) { + for (i = 0; i < pin->numAntennaPartialCutArea(); i++) { + fprintf(fout, "PIN %s ANTPARTIALCUTAREA %g", pin->name(), + chkNum(pin->antennaPartialCutArea(i))); + if (pin->antennaPartialCutAreaLayer(i)) + fprintf(fout, " LAYER %s ", + pin->antennaPartialCutAreaLayer(i)); + fprintf(fout, "\n"); + } + } + if (pin->hasAntennaDiffArea()) { + for (i = 0; i < pin->numAntennaDiffArea(); i++) { + fprintf(fout, "PIN %s ANTDIFFAREA %g", pin->name(), + chkNum(pin->antennaDiffArea(i))); + if (pin->antennaDiffAreaLayer(i)) + fprintf(fout, " LAYER %s ", pin->antennaDiffAreaLayer(i)); + fprintf(fout, "\n"); + } + } + + for (j = 0; j < pin->numAntennaModel(); j++) { + aModel = pin->antennaModel(j); + + if (aModel->hasAntennaGateArea()) { + for (i = 0; i < aModel->numAntennaGateArea(); i++) + { + fprintf(fout, "PIN %s %s ANTGATEAREA %g", pin->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaGateArea(i))); + if (aModel->antennaGateAreaLayer(i)) + fprintf(fout, " LAYER %s ", + aModel->antennaGateAreaLayer(i)); + fprintf(fout, "\n"); + } + } + if (aModel->hasAntennaMaxAreaCar()) { + for (i = 0; i < aModel->numAntennaMaxAreaCar(); + i++) { + fprintf(fout, "PIN %s %s ANTMAXAREACAR %g", pin->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaMaxAreaCar(i))); + if (aModel->antennaMaxAreaCarLayer(i)) + fprintf(fout, " LAYER %s ", + aModel->antennaMaxAreaCarLayer(i)); + fprintf(fout, "\n"); + } + } + if (aModel->hasAntennaMaxSideAreaCar()) { + for (i = 0; i < aModel->numAntennaMaxSideAreaCar(); + i++) { + fprintf(fout, "PIN %s %s ANTMAXAREACAR %g", pin->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaMaxSideAreaCar(i))); + if (aModel->antennaMaxSideAreaCarLayer(i)) + fprintf(fout, " LAYER %s ", + aModel->antennaMaxSideAreaCarLayer(i)); + fprintf(fout, "\n"); + } + } + if (aModel->hasAntennaMaxCutCar()) { + for (i = 0; i < aModel->numAntennaMaxCutCar(); i++) + { + fprintf(fout, "PIN %s %s ANTMAXCUTCAR %g", pin->name(), + aModel->antennaOxide(), + chkNum(aModel->antennaMaxCutCar(i))); + if (aModel->antennaMaxCutCarLayer(i)) + fprintf(fout, " LAYER %s ", + aModel->antennaMaxCutCarLayer(i)); + fprintf(fout, "\n"); + } + } + } + + if (pin->numProperties() > 0) { + for (i = 0; i < pin->numProperties(); i++) { + fprintf(fout, "PIN %s PROP ", pin->name()); + // value can either be a string or number + if (pin->propValue(i)) { + fprintf(fout, "%s %s\n", pin->propName(i), pin->propValue(i)); + } + else + fprintf(fout, "%s %g\n", pin->propName(i), chkNum(pin->propNum(i))); + } + } + + numPorts = pin->numPorts(); + + char pinName[1024]; + + for (i = 0; i < numPorts; i++) { + sprintf(pinName, "PIN %s PORT", pin->name()); + geometry = pin->port(i); + prtGeometry(geometry, pinName); + } + return 0; +} + +int densityCB(lefrCallbackType_e c, lefiDensity* density, + lefiUserData ud) { + struct lefiGeomRect rect; + + checkType(c); + if (ud != userData) dataError(); + for (int i = 0; i < density->numLayer(); i++) { + for (int j = 0; j < density->numRects(i); j++) { + rect = density->getRect(i,j); + fprintf(fout, "DENSITY LAYER %s RECT %g %g %g %g %g\n", + density->layerName(i), rect.xl, rect.yl, rect.xh, rect.yh, + density->densityValue(i,j)); + } + } + return 0; +} + +// Property definition +int propDefCB(lefrCallbackType_e c, lefiProp* prop, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "PROPDEF %s %s", + prop->propType(), prop->propName()); + if (prop->hasRange()) + fprintf(fout, " RANGE %g %g", chkNum(prop->left()), chkNum(prop->right())); + if (prop->hasNumber()) + fprintf(fout, " NUMBER %g", chkNum(prop->number())); + switch (prop->dataType()) { + case 'I': + fprintf(fout, " TYPE I"); + break; + case 'R': + fprintf(fout, " TYPE R"); + break; + case 'S': + fprintf(fout, " TYPE S"); + break; + case 'Q': + fprintf(fout, " TYPE Q"); + break; + case 'N': + fprintf(fout, " TYPE N"); + break; + } + fprintf(fout, "\n"); + return 0; +} + +// Site +int siteCB(lefrCallbackType_e c, lefiSite* site, lefiUserData ud) { + int hasPrtSym = 0; + int i; + + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "SITE %s", site->name()); + if (site->hasClass()) + fprintf(fout, " CLASS %s", site->siteClass()); + if (site->hasXSymmetry()) { + fprintf(fout, " SYMMETRY X "); + hasPrtSym = 1; + } + if (site->hasYSymmetry()) { + if (hasPrtSym) + fprintf(fout, "Y "); + else { + fprintf(fout, " SYMMETRY Y "); + hasPrtSym = 1; + } + } + if (site->has90Symmetry()) { + if (hasPrtSym) + fprintf(fout, "R90 "); + else { + fprintf(fout, " SYMMETRY R90 "); + hasPrtSym = 1; + } + } + if (site->hasSize()) + fprintf(fout, " SIZE %g BY %g", chkNum(site->sizeX()), + chkNum(site->sizeY())); + fprintf(fout, "\n"); + if (site->hasRowPattern()) { // 5.6, a line for ea rowpattern for sorting + for (i = 0; i < site->numSites(); i++) + fprintf(fout, "SITE %s ROWPATTERN %s %s\n", site->name(), + site->siteName(i), site->siteOrientStr(i)); + } + + return 0; +} + +// Spacing +int spacingCB(lefrCallbackType_e c, lefiSpacing* spacing, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + lefSpacing(spacing, (char*)"SPACING"); + return 0; +} + +// Timing +int timingCB(lefrCallbackType_e c, lefiTiming* timing, lefiUserData ud) { + int i; + checkType(c); + if (ud != userData) dataError(); + for (i = 0; i < timing->numFromPins(); i++) + fprintf(fout, "TIMING FROMPIN %s\n", timing->fromPin(i)); + for (i = 0; i < timing->numToPins(); i++) + fprintf(fout, "TIMING TOPIN %s\n", timing->toPin(i)); + fprintf(fout, "TIMING RISE SLEW1 %g %g %g %g\n", + chkNum(timing->riseSlewOne()), chkNum(timing->riseSlewTwo()), + chkNum(timing->riseSlewThree()), chkNum(timing->riseSlewFour())); + if (timing->hasRiseSlew2()) + fprintf(fout, "TIMING RISE SLEW2 %g %g %g\n", + chkNum(timing->riseSlewFive()), chkNum(timing->riseSlewSix()), + chkNum(timing->riseSlewSeven())); + if (timing->hasFallSlew()) + fprintf(fout, "TIMING FALL SLEW1 %g %g %g %g\n", + chkNum(timing->fallSlewOne()), chkNum(timing->fallSlewTwo()), + chkNum(timing->fallSlewThree()), chkNum(timing->fallSlewFour())); + if (timing->hasFallSlew2()) + fprintf(fout, "TIMING FALL SLEW2 %g %g %g\n", + chkNum(timing->fallSlewFive()), chkNum(timing->fallSlewSix()), + chkNum(timing->riseSlewSeven())); + if (timing->hasRiseIntrinsic()) { + fprintf(fout, "TIMING RISE INTRINSIC %g %g\n", + chkNum(timing->riseIntrinsicOne()), + chkNum(timing->riseIntrinsicTwo())); + fprintf(fout, "TIMING RISE VARIABLE %g %g\n", + chkNum(timing->riseIntrinsicThree()), + chkNum(timing->riseIntrinsicFour())); + } + if (timing->hasFallIntrinsic()) { + fprintf(fout, "TIMING FALL INTRINSIC %g %g\n", + chkNum(timing->fallIntrinsicOne()), + chkNum(timing->fallIntrinsicTwo())); + fprintf(fout, "TIMING RISE VARIABLE %g %g\n", + chkNum(timing->fallIntrinsicThree()), + chkNum(timing->fallIntrinsicFour())); + } + if (timing->hasRiseRS()) + fprintf(fout, "TIMING RISERS %g %g\n", + chkNum(timing->riseRSOne()), chkNum(timing->riseRSTwo())); + if (timing->hasRiseCS()) + fprintf(fout, "TIMING RISECS %g %g\n", + chkNum(timing->riseCSOne()), chkNum(timing->riseCSTwo())); + if (timing->hasFallRS()) + fprintf(fout, "TIMING FALLRS %g %g\n", + chkNum(timing->fallRSOne()), chkNum(timing->fallRSTwo())); + if (timing->hasFallCS()) + fprintf(fout, "TIMING FALLCS %g %g\n", + chkNum(timing->fallCSOne()), chkNum(timing->fallCSTwo())); + if (timing->hasUnateness()) + fprintf(fout, "TIMING UNATENESS %s\n", timing->unateness()); + if (timing->hasRiseAtt1()) + fprintf(fout, "TIMING RISESATT1 %g %g\n", chkNum(timing->riseAtt1One()), + chkNum(timing->riseAtt1Two())); + if (timing->hasFallAtt1()) + fprintf(fout, "TIMING FALLSATT1 %g %g\n", chkNum(timing->fallAtt1One()), + chkNum(timing->fallAtt1Two())); + if (timing->hasRiseTo()) + fprintf(fout, "TIMING RISET0 %g %g\n", chkNum(timing->riseToOne()), + chkNum(timing->riseToTwo())); + if (timing->hasFallTo()) + fprintf(fout, "TIMING FALLT0 %g %g\n", chkNum(timing->fallToOne()), + chkNum(timing->fallToTwo())); + return 0; +} + +// Units +int unitsCB(lefrCallbackType_e c, lefiUnits* unit, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + if (unit->hasDatabase()) + fprintf(fout, "UNITS DATABASE %s %g\n", unit->databaseName(), + chkNum(unit->databaseNumber())); + if (unit->hasCapacitance()) + fprintf(fout, "UNITS CAPACITANCE PICOFARADS %g\n", + chkNum(unit->capacitance())); + if (unit->hasResistance()) + fprintf(fout, "UNITS RESISTANCE OHMS %g\n", chkNum(unit->resistance())); + if (unit->hasPower()) + fprintf(fout, "UNITS POWER MILLIWATTS %g\n", chkNum(unit->power())); + if (unit->hasCurrent()) + fprintf(fout, "UNITS CURRENT MILLIAMPS %g\n", chkNum(unit->current())); + if (unit->hasVoltage()) + fprintf(fout, "UNITS VOLTAGE VOLTS %g\n", chkNum(unit->voltage())); + if (unit->hasFrequency()) + fprintf(fout, "UNITS FREQUENCY MEGAHERTZ %g\n", chkNum(unit->frequency())); + return 0; +} + +// UseMinSpacing +int useMinSpacingCB(lefrCallbackType_e c, lefiUseMinSpacing* spacing, + lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "USEMINSPACING %s ", spacing->name()); + if (spacing->value()) + fprintf(fout, "USEMINSPACING ON\n"); + else + fprintf(fout, "USEMINSPACING OFF\n"); + return 0; +} + +// Version +int versionCB(lefrCallbackType_e c, double num, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "VERSION %g\n", num); + return 0; +} + +// Via +int viaCB(lefrCallbackType_e c, lefiVia* via, lefiUserData ud) { + checkType(c); + if (ud != userData) dataError(); + lefVia(via, (char*)"VIA"); + return 0; +} + +// Viarule +int viaRuleCB(lefrCallbackType_e c, lefiViaRule* viaRule, lefiUserData ud) { + int numLayers, numVias, i; + lefiViaRuleLayer* vLayer; + + checkType(c); + if (ud != userData) dataError(); + fprintf(fout, "VIARULE %s", viaRule->name()); + if (viaRule->hasGenerate()) + fprintf(fout, " GENERATE"); + if (viaRule->hasDefault()) + fprintf(fout, " DEFAULT"); + fprintf(fout, "\n"); + + numLayers = viaRule->numLayers(); + // if numLayers == 2, it is VIARULE without GENERATE and has via name + // if numLayers == 3, it is VIARULE with GENERATE, and the 3rd layer is cut + for (i = 0; i < numLayers; i++) { + vLayer = viaRule->layer(i); + lefViaRuleLayer(vLayer, viaRule->name()); + } + + if (numLayers == 2) { // should have vianames + numVias = viaRule->numVias(); + if (numVias == 0) + fprintf(fout, "Should have via names in VIARULE.\n"); + else { + for (i = 0; i < numVias; i++) + fprintf(fout, "VIARULE %s VIA %s ;\n", viaRule->name(), + viaRule->viaName(i)); + } + } + if (viaRule->numProps() > 0) { + for (i = 0; i < viaRule->numProps(); i++) { + fprintf(fout, "VIARULE %s PROP %s ", viaRule->name(), + viaRule->propName(i)); + if (viaRule->propValue(i)) + fprintf(fout, "%s ", viaRule->propValue(i)); + switch (viaRule->propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + fprintf(fout, "\n"); + } + } + } + return 0; +} + +//======== + +int diffLefReadFile(char* inFile, char* outFile) { + FILE* f; + int res; + + userData = (void*)0x01020304; + lefrInit(); + + // Fix of CCR 758312 + lefrSetRelaxMode(); + + lefrSetAntennaInputCbk(antennaCB); + lefrSetAntennaInoutCbk(antennaCB); + lefrSetAntennaOutputCbk(antennaCB); + lefrSetArrayCbk(arrayCB); + lefrSetBusBitCharsCbk(busBitCharsCB); + lefrSetCaseSensitiveCbk(caseSensCB); + lefrSetFixedMaskCbk(fixedMaskCB); + lefrSetClearanceMeasureCbk(clearanceCB); + lefrSetCorrectionTableCbk(correctTableCB); + lefrSetDensityCbk(densityCB); + lefrSetDielectricCbk(dielectricCB); + lefrSetDividerCharCbk(dividerCB); + lefrSetEdgeRateScaleFactorCbk(edgeRateCB); + lefrSetEdgeRateThreshold1Cbk(edgeRate1CB); + lefrSetEdgeRateThreshold2Cbk(edgeRate2CB); + lefrSetInputAntennaCbk(inputAntCB); + lefrSetOutputAntennaCbk(outputAntCB); + lefrSetInoutAntennaCbk(inoutAntCB); + lefrSetIRDropCbk(irdropCB); + lefrSetLayerCbk(layerCB); + lefrSetMacroCbk(macroCB); + lefrSetManufacturingCbk(manufacturingCB); + lefrSetMaxStackViaCbk(maxStackViaCB); + lefrSetMinFeatureCbk(minFeatureCB); + lefrSetNoiseMarginCbk(noiseMarginCB); + lefrSetNoiseTableCbk(noiseTableCB); + lefrSetNonDefaultCbk(nonDefaultCB); + lefrSetNoWireExtensionCbk(noWireExtCB); + lefrSetObstructionCbk(obstructionCB); + lefrSetPinCbk(pinCB); + lefrSetPropCbk(propDefCB); + lefrSetSiteCbk(siteCB); + lefrSetSpacingCbk(spacingCB); + lefrSetTimingCbk(timingCB); + lefrSetUnitsCbk(unitsCB); + lefrSetUseMinSpacingCbk(useMinSpacingCB); + lefrSetUserData((void*)3); + lefrSetVersionCbk(versionCB); + lefrSetViaCbk(viaCB); + lefrSetViaRuleCbk(viaRuleCB); + + if ((f = fopen(inFile,"r")) == 0) { + fprintf(stderr,"Couldn't open input file '%s'\n", inFile); + return(2); + } + + if ((fout = fopen(outFile,"w")) == 0) { + fprintf(stderr,"Couldn't open output file '%s'\n", outFile); + fclose(f); + return(2); + } + + res = lefrRead(f, inFile, userData); + + fclose(f); + fclose(fout); + + return 0; +} diff --git a/lefdef/src/lef/lefdiff/diffLefRW.hpp b/lefdef/src/lef/lefdiff/diffLefRW.hpp new file mode 100644 index 00000000..c6ab0c8d --- /dev/null +++ b/lefdef/src/lef/lefdiff/diffLefRW.hpp @@ -0,0 +1,38 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef DIFFDEFRW_H +#define DIFFDEFRW_H + +#include +#include + +int diffLefReadFile(char* inFile, char* outFile); + +#endif diff --git a/lefdef/src/lef/lefdiff/differLef.cpp b/lefdef/src/lef/lefdiff/differLef.cpp new file mode 100644 index 00000000..35ed2ad1 --- /dev/null +++ b/lefdef/src/lef/lefdiff/differLef.cpp @@ -0,0 +1,98 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2016, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +// This program will diff two lef files or two def files and list the +// different between the two files. This problem is not intend to +// diff a real design. If user runs this program will a big design, +// they may experience long execution time and may even ran out of +// memory. +// +// This program is to give user a feel of whether they are using the +// parser correctly. After they read the lef/def file in, and +// write them back out in lef/def format. +// +// This program support lef/def 5.6. + +#include +#include +#include +#ifdef ibmrs +# include +#endif +#ifndef WIN32 +# include +extern char VersionIdent[]; +#else +char* VersionIdent = "N/A"; +#endif /* not WIN32 */ +#include "lefrReader.hpp" +#include "diffLefRW.hpp" + +char * exeName; // use to save the executable name + +// This program requires 2 inputs, fileName1 and fileName2 +void diffUsage() { + printf("Usage: lefdefdiff -lef|-def fileName1 fileName2 [-o outputFileName]\n"); +} + +int main(int argc, char** argv) { + char *fileName1, *fileName2; // For the filenames to compare + char *lefOut1, *lefOut2; // For the tmp output files + +#ifdef WIN32 + // Enable two-digit exponent format + _set_output_format(_TWO_DIGIT_EXPONENT); +#endif + + exeName = argv[0]; + + if (argc != 5) { // If pass in from lefdefdiff, argc is + diffUsage(); // always 5 + return(1); + } + + fileName1 = argv[1]; + fileName2 = argv[2]; + + // These are temporary files to hold the lef data as they are read in, + // later these files will be sorted for comparison. + lefOut1 = argv[3]; + lefOut2 = argv[4]; + + // just read in the 1st file to memory + printf("Reading file: %s\n", fileName1); + if (diffLefReadFile(fileName1, lefOut1) != 0) + return(1); + // read and compare with the 1st file in memory + printf("Reading file: %s\n", fileName2); + if (diffLefReadFile(fileName2, lefOut2) != 0) + return(1); + + return (0); +} diff --git a/lefdef/src/lef/lefrw/CMakeLists.txt b/lefdef/src/lef/lefrw/CMakeLists.txt new file mode 100644 index 00000000..05478eb3 --- /dev/null +++ b/lefdef/src/lef/lefrw/CMakeLists.txt @@ -0,0 +1,12 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + include_directories ( ${LEFDEF_SOURCE_DIR}/src/lef/lef + ) + + set ( cpps lefrw.cpp + ) + + add_executable ( lefrw ${cpps} ) + target_link_libraries ( lefrw lef ) + + install ( TARGETS lefrw DESTINATION bin ) diff --git a/lefdef/src/lef/lefrw/Makefile b/lefdef/src/lef/lefrw/Makefile new file mode 100644 index 00000000..e475237e --- /dev/null +++ b/lefdef/src/lef/lefrw/Makefile @@ -0,0 +1,10 @@ +FAKE_ALL: all + +LIBTARGET = +BINTARGET = lefrw + +LDLIBS = ../lib/liblef.a + +BINSRCS = lefrw.cpp + +include ../template.mk diff --git a/lefdef/src/lef/lefrw/lefrw.cpp b/lefdef/src/lef/lefrw/lefrw.cpp new file mode 100644 index 00000000..1fb46187 --- /dev/null +++ b/lefdef/src/lef/lefrw/lefrw.cpp @@ -0,0 +1,2656 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2014 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifdef WIN32 +#pragma warning (disable : 4786) +#endif + +#include +#include +#include +#include + +#ifndef WIN32 +# include +#else +# include +#endif /* not WIN32 */ +#include "lefrReader.hpp" +#include "lefwWriter.hpp" +#include "lefiDebug.hpp" +#include "lefiEncryptInt.hpp" +#include "lefiUtil.hpp" + +char defaultName[128]; +char defaultOut[128]; +FILE* fout; +int printing = 0; // Printing the output. +int parse65nm = 0; +int parseLef58Type = 0; +int isSessionles = 0; + +// TX_DIR:TRANSLATION ON + +void dataError() { + fprintf(fout, "ERROR: returned user data is not correct!\n"); +} + + +void checkType(lefrCallbackType_e c) { + if (c >= 0 && c <= lefrLibraryEndCbkType) { + // OK + } else { + fprintf(fout, "ERROR: callback type is out of bounds!\n"); + } +} + + +char* orientStr(int orient) { + switch (orient) { + case 0: return ((char*)"N"); + case 1: return ((char*)"W"); + case 2: return ((char*)"S"); + case 3: return ((char*)"E"); + case 4: return ((char*)"FN"); + case 5: return ((char*)"FW"); + case 6: return ((char*)"FS"); + case 7: return ((char*)"FE"); + }; + return ((char*)"BOGUS"); +} + +void lefVia(lefiVia *via) { + int i, j; + + lefrSetCaseSensitivity(1); + fprintf(fout, "VIA %s ", via->lefiVia::name()); + if (via->lefiVia::hasDefault()) + fprintf(fout, "DEFAULT"); + else if (via->lefiVia::hasGenerated()) + fprintf(fout, "GENERATED"); + fprintf(fout, "\n"); + if (via->lefiVia::hasTopOfStack()) + fprintf(fout, " TOPOFSTACKONLY\n"); + if (via->lefiVia::hasForeign()) { + fprintf(fout, " FOREIGN %s ", via->lefiVia::foreign()); + if (via->lefiVia::hasForeignPnt()) { + fprintf(fout, "( %g %g ) ", via->lefiVia::foreignX(), + via->lefiVia::foreignY()); + if (via->lefiVia::hasForeignOrient()) + fprintf(fout, "%s ", orientStr(via->lefiVia::foreignOrient())); + } + fprintf(fout, ";\n"); + } + if (via->lefiVia::hasProperties()) { + fprintf(fout, " PROPERTY "); + for (i = 0; i < via->lefiVia::numProperties(); i++) { + fprintf(fout, "%s ", via->lefiVia::propName(i)); + if (via->lefiVia::propIsNumber(i)) + fprintf(fout, "%g ", via->lefiVia::propNumber(i)); + if (via->lefiVia::propIsString(i)) + fprintf(fout, "%s ", via->lefiVia::propValue(i)); + /* + if (i+1 == via->lefiVia::numProperties()) // end of properties + fprintf(fout, ";\n"); + else // just add new line + fprintf(fout, "\n"); + */ + switch (via->lefiVia::propType(i)) { + case 'R': + fprintf(fout, "REAL "); + break; + case 'I': + fprintf(fout, "INTEGER "); + break; + case 'S': + fprintf(fout, "STRING "); + break; + case 'Q': + fprintf(fout, "QUOTESTRING "); + break; + case 'N': + fprintf(fout, "NUMBER "); + break; + } + } + fprintf(fout, ";\n"); + } + if (via->lefiVia::hasResistance()) + fprintf(fout, " RESISTANCE %g ;\n", via->lefiVia::resistance()); + if (via->lefiVia::numLayers() > 0) { + for (i = 0; i < via->lefiVia::numLayers(); i++) { + fprintf(fout, " LAYER %s\n", via->lefiVia::layerName(i)); + for (j = 0; j < via->lefiVia::numRects(i); j++) + if (via->lefiVia::rectColorMask(i, j)) { + fprintf(fout, " RECT MASK %d ( %f %f ) ( %f %f ) ;\n", + via->lefiVia::rectColorMask(i, j), + via->lefiVia::xl(i, j), via->lefiVia::yl(i, j), + via->lefiVia::xh(i, j), via->lefiVia::yh(i, j)); + } else { + fprintf(fout, " RECT ( %f %f ) ( %f %f ) ;\n", + via->lefiVia::xl(i, j), via->lefiVia::yl(i, j), + via->lefiVia::xh(i, j), via->lefiVia::yh(i, j)); + } + for (j = 0; j < via->lefiVia::numPolygons(i); j++) { + struct lefiGeomPolygon poly; + poly = via->lefiVia::getPolygon(i, j); + if (via->lefiVia::polyColorMask(i, j)) { + fprintf(fout, " POLYGON MASK %d", via->lefiVia::polyColorMask(i, j)); + } else { + fprintf(fout, " POLYGON "); + } + for (int k = 0; k < poly.numPoints; k++) + fprintf(fout, " %g %g ", poly.x[k], poly.y[k]); + fprintf(fout, ";\n"); + } + } + } + if (via->lefiVia::hasViaRule()) { + fprintf(fout, " VIARULE %s ;\n", via->lefiVia::viaRuleName()); + fprintf(fout, " CUTSIZE %g %g ;\n", via->lefiVia::xCutSize(), + via->lefiVia::yCutSize()); + fprintf(fout, " LAYERS %s %s %s ;\n", via->lefiVia::botMetalLayer(), + via->lefiVia::cutLayer(), via->lefiVia::topMetalLayer()); + fprintf(fout, " CUTSPACING %g %g ;\n", via->lefiVia::xCutSpacing(), + via->lefiVia::yCutSpacing()); + fprintf(fout, " ENCLOSURE %g %g %g %g ;\n", via->lefiVia::xBotEnc(), + via->lefiVia::yBotEnc(), via->lefiVia::xTopEnc(), + via->lefiVia::yTopEnc()); + if (via->lefiVia::hasRowCol()) + fprintf(fout, " ROWCOL %d %d ;\n", via->lefiVia::numCutRows(), + via->lefiVia::numCutCols()); + if (via->lefiVia::hasOrigin()) + fprintf(fout, " ORIGIN %g %g ;\n", via->lefiVia::xOffset(), + via->lefiVia::yOffset()); + if (via->lefiVia::hasOffset()) + fprintf(fout, " OFFSET %g %g %g %g ;\n", via->lefiVia::xBotOffset(), + via->lefiVia::yBotOffset(), via->lefiVia::xTopOffset(), + via->lefiVia::yTopOffset()); + if (via->lefiVia::hasCutPattern()) + fprintf(fout, " PATTERN %s ;\n", via->lefiVia::cutPattern()); + } + fprintf(fout, "END %s\n", via->lefiVia::name()); + + return; +} + +void lefSpacing(lefiSpacing* spacing) { + fprintf(fout, " SAMENET %s %s %g ", spacing->lefiSpacing::name1(), + spacing->lefiSpacing::name2(), spacing->lefiSpacing::distance()); + if (spacing->lefiSpacing::hasStack()) + fprintf(fout, "STACK "); + fprintf(fout,";\n"); + return; +} + +void lefViaRuleLayer(lefiViaRuleLayer* vLayer) { + fprintf(fout, " LAYER %s ;\n", vLayer->lefiViaRuleLayer::name()); + if (vLayer->lefiViaRuleLayer::hasDirection()) { + if (vLayer->lefiViaRuleLayer::isHorizontal()) + fprintf(fout, " DIRECTION HORIZONTAL ;\n"); + if (vLayer->lefiViaRuleLayer::isVertical()) + fprintf(fout, " DIRECTION VERTICAL ;\n"); + } + if (vLayer->lefiViaRuleLayer::hasEnclosure()) { + fprintf(fout, " ENCLOSURE %g %g ;\n", + vLayer->lefiViaRuleLayer::enclosureOverhang1(), + vLayer->lefiViaRuleLayer::enclosureOverhang2()); + } + if (vLayer->lefiViaRuleLayer::hasWidth()) + fprintf(fout, " WIDTH %g TO %g ;\n", + vLayer->lefiViaRuleLayer::widthMin(), + vLayer->lefiViaRuleLayer::widthMax()); + if (vLayer->lefiViaRuleLayer::hasResistance()) + fprintf(fout, " RESISTANCE %g ;\n", + vLayer->lefiViaRuleLayer::resistance()); + if (vLayer->lefiViaRuleLayer::hasOverhang()) + fprintf(fout, " OVERHANG %g ;\n", + vLayer->lefiViaRuleLayer::overhang()); + if (vLayer->lefiViaRuleLayer::hasMetalOverhang()) + fprintf(fout, " METALOVERHANG %g ;\n", + vLayer->lefiViaRuleLayer::metalOverhang()); + if (vLayer->lefiViaRuleLayer::hasSpacing()) + fprintf(fout, " SPACING %g BY %g ;\n", + vLayer->lefiViaRuleLayer::spacingStepX(), + vLayer->lefiViaRuleLayer::spacingStepY()); + if (vLayer->lefiViaRuleLayer::hasRect()) + fprintf(fout, " RECT ( %f %f ) ( %f %f ) ;\n", + vLayer->lefiViaRuleLayer::xl(), vLayer->lefiViaRuleLayer::yl(), + vLayer->lefiViaRuleLayer::xh(), vLayer->lefiViaRuleLayer::yh()); + return; +} + +void prtGeometry(lefiGeometries *geometry) { + int numItems = geometry->lefiGeometries::numItems(); + int i, j; + lefiGeomPath *path; + lefiGeomPathIter *pathIter; + lefiGeomRect *rect; + lefiGeomRectIter *rectIter; + lefiGeomPolygon *polygon; + lefiGeomPolygonIter *polygonIter; + lefiGeomVia *via; + lefiGeomViaIter *viaIter; + + for (i = 0; i < numItems; i++) { + switch (geometry->lefiGeometries::itemType(i)) { + case lefiGeomClassE: + fprintf(fout, "CLASS %s ", + geometry->lefiGeometries::getClass(i)); + break; + case lefiGeomLayerE: + fprintf(fout, " LAYER %s ;\n", + geometry->lefiGeometries::getLayer(i)); + break; + case lefiGeomLayerExceptPgNetE: + fprintf(fout, " EXCEPTPGNET ;\n"); + break; + case lefiGeomLayerMinSpacingE: + fprintf(fout, " SPACING %g ;\n", + geometry->lefiGeometries::getLayerMinSpacing(i)); + break; + case lefiGeomLayerRuleWidthE: + fprintf(fout, " DESIGNRULEWIDTH %g ;\n", + geometry->lefiGeometries::getLayerRuleWidth(i)); + break; + case lefiGeomWidthE: + fprintf(fout, " WIDTH %g ;\n", + geometry->lefiGeometries::getWidth(i)); + break; + case lefiGeomPathE: + path = geometry->lefiGeometries::getPath(i); + if (path->colorMask != 0) { + fprintf(fout, " PATH MASK %d ", path->colorMask); + } else { + fprintf(fout, " PATH "); + } + for (j = 0; j < path->numPoints; j++) { + if (j + 1 == path->numPoints) // last one on the list + fprintf(fout, " ( %g %g ) ;\n", path->x[j], path->y[j]); + else + fprintf(fout, " ( %g %g )\n", path->x[j], path->y[j]); + } + break; + case lefiGeomPathIterE: + pathIter = geometry->lefiGeometries::getPathIter(i); + if (pathIter->colorMask != 0) { + fprintf(fout, " PATH MASK %d ITERATED ", pathIter->colorMask); + } else { + fprintf(fout, " PATH ITERATED "); + } + for (j = 0; j < pathIter->numPoints; j++) + fprintf(fout, " ( %g %g )\n", pathIter->x[j], + pathIter->y[j]); + fprintf(fout, " DO %g BY %g STEP %g %g ;\n", pathIter->xStart, + pathIter->yStart, pathIter->xStep, pathIter->yStep); + break; + case lefiGeomRectE: + rect = geometry->lefiGeometries::getRect(i); + if (rect->colorMask != 0) { + fprintf(fout, " RECT MASK %d ( %f %f ) ( %f %f ) ;\n", + rect->colorMask, rect->xl, + rect->yl, rect->xh, rect->yh); + } else { + fprintf(fout, " RECT ( %f %f ) ( %f %f ) ;\n", rect->xl, + rect->yl, rect->xh, rect->yh); + } + break; + case lefiGeomRectIterE: + rectIter = geometry->lefiGeometries::getRectIter(i); + if (rectIter->colorMask != 0) { + fprintf(fout, " RECT MASK %d ITERATE ( %f %f ) ( %f %f )\n", + rectIter->colorMask, + rectIter->xl, rectIter->yl, rectIter->xh, rectIter->yh); + } else { + fprintf(fout, " RECT ITERATE ( %f %f ) ( %f %f )\n", + rectIter->xl, rectIter->yl, rectIter->xh, rectIter->yh); + } + fprintf(fout, " DO %g BY %g STEP %g %g ;\n", + rectIter->xStart, rectIter->yStart, rectIter->xStep, + rectIter->yStep); + break; + case lefiGeomPolygonE: + polygon = geometry->lefiGeometries::getPolygon(i); + if (polygon->colorMask != 0) { + fprintf(fout, " POLYGON MASK %d ", polygon->colorMask); + } else { + fprintf(fout, " POLYGON "); + } + for (j = 0; j < polygon->numPoints; j++) { + if (j + 1 == polygon->numPoints) // last one on the list + fprintf(fout, " ( %g %g ) ;\n", polygon->x[j], + polygon->y[j]); + else + fprintf(fout, " ( %g %g )\n", polygon->x[j], + polygon->y[j]); + } + break; + case lefiGeomPolygonIterE: + polygonIter = geometry->lefiGeometries::getPolygonIter(i); + if (polygonIter->colorMask != 0) { + fprintf(fout, " POLYGON MASK %d ITERATE ", polygonIter->colorMask); + } else { + fprintf(fout, " POLYGON ITERATE"); + } + for (j = 0; j < polygonIter->numPoints; j++) + fprintf(fout, " ( %g %g )\n", polygonIter->x[j], + polygonIter->y[j]); + fprintf(fout, " DO %g BY %g STEP %g %g ;\n", + polygonIter->xStart, polygonIter->yStart, + polygonIter->xStep, polygonIter->yStep); + break; + case lefiGeomViaE: + via = geometry->lefiGeometries::getVia(i); + if (via->topMaskNum != 0 || via->bottomMaskNum != 0 || via->cutMaskNum !=0) { + fprintf(fout, " VIA MASK %d%d%d ( %g %g ) %s ;\n", + via->topMaskNum, via->cutMaskNum, via->bottomMaskNum, + via->x, via->y, + via->name); + + } else { + fprintf(fout, " VIA ( %g %g ) %s ;\n", via->x, via->y, + via->name); + } + break; + case lefiGeomViaIterE: + viaIter = geometry->lefiGeometries::getViaIter(i); + if (viaIter->topMaskNum != 0 || viaIter->cutMaskNum != 0 || viaIter->bottomMaskNum != 0) { + fprintf(fout, " VIA ITERATE MASK %d%d%d ( %g %g ) %s\n", + viaIter->topMaskNum, viaIter->cutMaskNum, viaIter->bottomMaskNum, + viaIter->x, + viaIter->y, viaIter->name); + } else { + fprintf(fout, " VIA ITERATE ( %g %g ) %s\n", viaIter->x, + viaIter->y, viaIter->name); + } + fprintf(fout, " DO %g BY %g STEP %g %g ;\n", + viaIter->xStart, viaIter->yStart, + viaIter->xStep, viaIter->yStep); + break; + default: + fprintf(fout, "BOGUS geometries type.\n"); + break; + } + } +} + +int antennaCB(lefrCallbackType_e c, double value, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + switch (c) { + case lefrAntennaInputCbkType: + fprintf(fout, "ANTENNAINPUTGATEAREA %g ;\n", value); + break; + case lefrAntennaInoutCbkType: + fprintf(fout, "ANTENNAINOUTDIFFAREA %g ;\n", value); + break; + case lefrAntennaOutputCbkType: + fprintf(fout, "ANTENNAOUTPUTDIFFAREA %g ;\n", value); + break; + case lefrInputAntennaCbkType: + fprintf(fout, "INPUTPINANTENNASIZE %g ;\n", value); + break; + case lefrOutputAntennaCbkType: + fprintf(fout, "OUTPUTPINANTENNASIZE %g ;\n", value); + break; + case lefrInoutAntennaCbkType: + fprintf(fout, "INOUTPINANTENNASIZE %g ;\n", value); + break; + default: + fprintf(fout, "BOGUS antenna type.\n"); + break; + } + return 0; +} + +int arrayBeginCB(lefrCallbackType_e c, const char* name, lefiUserData) { + int status; + + checkType(c); + // if ((long)ud != userData) dataError(); + // use the lef writer to write the data out + status = lefwStartArray(name); + if (status != LEFW_OK) + return status; + return 0; +} + +int arrayCB(lefrCallbackType_e c, lefiArray* a, lefiUserData) { + int status, i, j, defCaps; + lefiSitePattern* pattern; + lefiTrackPattern* track; + lefiGcellPattern* gcell; + + checkType(c); + // if ((long)ud != userData) dataError(); + + if (a->lefiArray::numSitePattern() > 0) { + for (i = 0; i < a->lefiArray::numSitePattern(); i++) { + pattern = a->lefiArray::sitePattern(i); + status = lefwArraySite(pattern->lefiSitePattern::name(), + pattern->lefiSitePattern::x(), + pattern->lefiSitePattern::y(), + pattern->lefiSitePattern::orient(), + pattern->lefiSitePattern::xStart(), + pattern->lefiSitePattern::yStart(), + pattern->lefiSitePattern::xStep(), + pattern->lefiSitePattern::yStep()); + if (status != LEFW_OK) + dataError(); + } + } + if (a->lefiArray::numCanPlace() > 0) { + for (i = 0; i < a->lefiArray::numCanPlace(); i++) { + pattern = a->lefiArray::canPlace(i); + status = lefwArrayCanplace(pattern->lefiSitePattern::name(), + pattern->lefiSitePattern::x(), + pattern->lefiSitePattern::y(), + pattern->lefiSitePattern::orient(), + pattern->lefiSitePattern::xStart(), + pattern->lefiSitePattern::yStart(), + pattern->lefiSitePattern::xStep(), + pattern->lefiSitePattern::yStep()); + if (status != LEFW_OK) + dataError(); + } + } + if (a->lefiArray::numCannotOccupy() > 0) { + for (i = 0; i < a->lefiArray::numCannotOccupy(); i++) { + pattern = a->lefiArray::cannotOccupy(i); + status = lefwArrayCannotoccupy(pattern->lefiSitePattern::name(), + pattern->lefiSitePattern::x(), + pattern->lefiSitePattern::y(), + pattern->lefiSitePattern::orient(), + pattern->lefiSitePattern::xStart(), + pattern->lefiSitePattern::yStart(), + pattern->lefiSitePattern::xStep(), + pattern->lefiSitePattern::yStep()); + if (status != LEFW_OK) + dataError(); + } + } + + if (a->lefiArray::numTrack() > 0) { + for (i = 0; i < a->lefiArray::numTrack(); i++) { + track = a->lefiArray::track(i); + fprintf(fout, " TRACKS %s, %g DO %d STEP %g\n", + track->lefiTrackPattern::name(), + track->lefiTrackPattern::start(), + track->lefiTrackPattern::numTracks(), + track->lefiTrackPattern::space()); + if (track->lefiTrackPattern::numLayers() > 0) { + fprintf(fout, " LAYER "); + for (j = 0; j < track->lefiTrackPattern::numLayers(); j++) + fprintf(fout, "%s ", track->lefiTrackPattern::layerName(j)); + fprintf(fout, ";\n"); + } + } + } + + if (a->lefiArray::numGcell() > 0) { + for (i = 0; i < a->lefiArray::numGcell(); i++) { + gcell = a->lefiArray::gcell(i); + fprintf(fout, " GCELLGRID %s, %g DO %d STEP %g\n", + gcell->lefiGcellPattern::name(), + gcell->lefiGcellPattern::start(), + gcell->lefiGcellPattern::numCRs(), + gcell->lefiGcellPattern::space()); + } + } + + if (a->lefiArray::numFloorPlans() > 0) { + for (i = 0; i < a->lefiArray::numFloorPlans(); i++) { + status = lefwStartArrayFloorplan(a->lefiArray::floorPlanName(i)); + if (status != LEFW_OK) + dataError(); + for (j = 0; j < a->lefiArray::numSites(i); j++) { + pattern = a->lefiArray::site(i, j); + status = lefwArrayFloorplan(a->lefiArray::siteType(i, j), + pattern->lefiSitePattern::name(), + pattern->lefiSitePattern::x(), + pattern->lefiSitePattern::y(), + pattern->lefiSitePattern::orient(), + (int)pattern->lefiSitePattern::xStart(), + (int)pattern->lefiSitePattern::yStart(), + pattern->lefiSitePattern::xStep(), + pattern->lefiSitePattern::yStep()); + if (status != LEFW_OK) + dataError(); + } + status = lefwEndArrayFloorplan(a->lefiArray::floorPlanName(i)); + if (status != LEFW_OK) + dataError(); + } + } + + defCaps = a->lefiArray::numDefaultCaps(); + if (defCaps > 0) { + status = lefwStartArrayDefaultCap(defCaps); + if (status != LEFW_OK) + dataError(); + for (i = 0; i < defCaps; i++) { + status = lefwArrayDefaultCap(a->lefiArray::defaultCapMinPins(i), + a->lefiArray::defaultCap(i)); + if (status != LEFW_OK) + dataError(); + } + status = lefwEndArrayDefaultCap(); + if (status != LEFW_OK) + dataError(); + } + return 0; +} + +int arrayEndCB(lefrCallbackType_e c, const char* name, lefiUserData) { + int status; + + checkType(c); + // if ((long)ud != userData) dataError(); + // use the lef writer to write the data out + status = lefwEndArray(name); + if (status != LEFW_OK) + return status; + return 0; +} + +int busBitCharsCB(lefrCallbackType_e c, const char* busBit, lefiUserData) +{ + int status; + + checkType(c); + // if ((long)ud != userData) dataError(); + // use the lef writer to write out the data + status = lefwBusBitChars(busBit); + if (status != LEFW_OK) + dataError(); + return 0; +} + +int caseSensCB(lefrCallbackType_e c, int caseSense, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + if (caseSense == TRUE) + fprintf(fout, "NAMESCASESENSITIVE ON ;\n"); + else + fprintf(fout, "NAMESCASESENSITIVE OFF ;\n"); + return 0; +} + +int fixedMaskCB(lefrCallbackType_e c, int fixedMask, lefiUserData) { + checkType(c); + + if (fixedMask == 1) + fprintf(fout, "FIXEDMASK ;\n"); + return 0; +} + +int clearanceCB(lefrCallbackType_e c, const char* name, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + fprintf(fout, "CLEARANCEMEASURE %s ;\n", name); + return 0; +} + +int dividerCB(lefrCallbackType_e c, const char* name, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + fprintf(fout, "DIVIDER %s ;\n", name); + return 0; +} + +int noWireExtCB(lefrCallbackType_e c, const char* name, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + fprintf(fout, "NOWIREEXTENSION %s ;\n", name); + return 0; +} + +int noiseMarCB(lefrCallbackType_e c, lefiNoiseMargin *, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + return 0; +} + +int edge1CB(lefrCallbackType_e c, double name, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + fprintf(fout, "EDGERATETHRESHOLD1 %g ;\n", name); + return 0; +} + +int edge2CB(lefrCallbackType_e c, double name, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + fprintf(fout, "EDGERATETHRESHOLD2 %g ;\n", name); + return 0; +} + +int edgeScaleCB(lefrCallbackType_e c, double name, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + fprintf(fout, "EDGERATESCALEFACTORE %g ;\n", name); + return 0; +} + +int noiseTableCB(lefrCallbackType_e c, lefiNoiseTable *, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + return 0; +} + +int correctionCB(lefrCallbackType_e c, lefiCorrectionTable *, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + return 0; +} + +int dielectricCB(lefrCallbackType_e c, double dielectric, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + + fprintf(fout, "DIELECTRIC %g ;\n", dielectric); + return 0; +} + +int irdropBeginCB(lefrCallbackType_e c, void*, lefiUserData){ + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "IRDROP\n"); + return 0; +} + +int irdropCB(lefrCallbackType_e c, lefiIRDrop* irdrop, lefiUserData) { + int i; + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, " TABLE %s ", irdrop->lefiIRDrop::name()); + for (i = 0; i < irdrop->lefiIRDrop::numValues(); i++) + fprintf(fout, "%g %g ", irdrop->lefiIRDrop::value1(i), + irdrop->lefiIRDrop::value2(i)); + fprintf(fout, ";\n"); + return 0; +} + +int irdropEndCB(lefrCallbackType_e c, void*, lefiUserData){ + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "END IRDROP\n"); + return 0; +} + +int layerCB(lefrCallbackType_e c, lefiLayer* layer, lefiUserData) { + int i, j, k; + int numPoints, propNum; + double *widths, *current; + lefiLayerDensity* density; + lefiAntennaPWL* pwl; + lefiSpacingTable* spTable; + lefiInfluence* influence; + lefiParallel* parallel; + lefiTwoWidths* twoWidths; + char pType; + int numMinCut, numMinenclosed; + lefiAntennaModel* aModel; + lefiOrthogonal* ortho; + + checkType(c); + // if ((long)ud != userData) dataError(); + + lefrSetCaseSensitivity(0); + + // Call parse65nmRules for 5.7 syntax in 5.6 + if (parse65nm) + layer->lefiLayer::parse65nmRules(); + + // Call parseLef58Type for 5.8 syntax in 5.7 + if (parseLef58Type) + layer->lefiLayer::parseLEF58Layer(); + + fprintf(fout, "LAYER %s\n", layer->lefiLayer::name()); + if (layer->lefiLayer::hasType()) + fprintf(fout, " TYPE %s ;\n", layer->lefiLayer::type()); + if (layer->lefiLayer::hasLayerType()) + fprintf(fout, " LAYER TYPE %s ;\n", layer->lefiLayer::layerType()); + if (layer->lefiLayer::hasMask()) + fprintf(fout, " MASK %d ;\n", layer->lefiLayer::mask()); + if (layer->lefiLayer::hasPitch()) + fprintf(fout, " PITCH %g ;\n", layer->lefiLayer::pitch()); + else if (layer->lefiLayer::hasXYPitch()) + fprintf(fout, " PITCH %g %g ;\n", layer->lefiLayer::pitchX(), + layer->lefiLayer::pitchY()); + if (layer->lefiLayer::hasOffset()) + fprintf(fout, " OFFSET %g ;\n", layer->lefiLayer::offset()); + else if (layer->lefiLayer::hasXYOffset()) + fprintf(fout, " OFFSET %g %g ;\n", layer->lefiLayer::offsetX(), + layer->lefiLayer::offsetY()); + if (layer->lefiLayer::hasDiagPitch()) + fprintf(fout, " DIAGPITCH %g ;\n", layer->lefiLayer::diagPitch()); + else if (layer->lefiLayer::hasXYDiagPitch()) + fprintf(fout, " DIAGPITCH %g %g ;\n", layer->lefiLayer::diagPitchX(), + layer->lefiLayer::diagPitchY()); + if (layer->lefiLayer::hasDiagWidth()) + fprintf(fout, " DIAGWIDTH %g ;\n", layer->lefiLayer::diagWidth()); + if (layer->lefiLayer::hasDiagSpacing()) + fprintf(fout, " DIAGSPACING %g ;\n", layer->lefiLayer::diagSpacing()); + if (layer->lefiLayer::hasWidth()) + fprintf(fout, " WIDTH %g ;\n", layer->lefiLayer::width()); + if (layer->lefiLayer::hasArea()) + fprintf(fout, " AREA %g ;\n", layer->lefiLayer::area()); + if (layer->lefiLayer::hasSlotWireWidth()) + fprintf(fout, " SLOTWIREWIDTH %g ;\n", layer->lefiLayer::slotWireWidth()); + if (layer->lefiLayer::hasSlotWireLength()) + fprintf(fout, " SLOTWIRELENGTH %g ;\n", + layer->lefiLayer::slotWireLength()); + if (layer->lefiLayer::hasSlotWidth()) + fprintf(fout, " SLOTWIDTH %g ;\n", layer->lefiLayer::slotWidth()); + if (layer->lefiLayer::hasSlotLength()) + fprintf(fout, " SLOTLENGTH %g ;\n", layer->lefiLayer::slotLength()); + if (layer->lefiLayer::hasMaxAdjacentSlotSpacing()) + fprintf(fout, " MAXADJACENTSLOTSPACING %g ;\n", + layer->lefiLayer::maxAdjacentSlotSpacing()); + if (layer->lefiLayer::hasMaxCoaxialSlotSpacing()) + fprintf(fout, " MAXCOAXIALSLOTSPACING %g ;\n", + layer->lefiLayer::maxCoaxialSlotSpacing()); + if (layer->lefiLayer::hasMaxEdgeSlotSpacing()) + fprintf(fout, " MAXEDGESLOTSPACING %g ;\n", + layer->lefiLayer::maxEdgeSlotSpacing()); + if (layer->lefiLayer::hasMaxFloatingArea()) // 5.7 + fprintf(fout, " MAXFLOATINGAREA %g ;\n", + layer->lefiLayer::maxFloatingArea()); + if (layer->lefiLayer::hasArraySpacing()) { // 5.7 + fprintf(fout, " ARRAYSPACING "); + if (layer->lefiLayer::hasLongArray()) + fprintf(fout, "LONGARRAY "); + if (layer->lefiLayer::hasViaWidth()) + fprintf(fout, "WIDTH %g ", layer->lefiLayer::viaWidth()); + fprintf(fout, "CUTSPACING %g", layer->lefiLayer::cutSpacing()); + for (i = 0; i < layer->lefiLayer::numArrayCuts(); i++) + fprintf(fout, "\n\tARRAYCUTS %d SPACING %g", + layer->lefiLayer::arrayCuts(i), + layer->lefiLayer::arraySpacing(i)); + fprintf(fout, " ;\n"); + } + if (layer->lefiLayer::hasSplitWireWidth()) + fprintf(fout, " SPLITWIREWIDTH %g ;\n", + layer->lefiLayer::splitWireWidth()); + if (layer->lefiLayer::hasMinimumDensity()) + fprintf(fout, " MINIMUMDENSITY %g ;\n", + layer->lefiLayer::minimumDensity()); + if (layer->lefiLayer::hasMaximumDensity()) + fprintf(fout, " MAXIMUMDENSITY %g ;\n", + layer->lefiLayer::maximumDensity()); + if (layer->lefiLayer::hasDensityCheckWindow()) + fprintf(fout, " DENSITYCHECKWINDOW %g %g ;\n", + layer->lefiLayer::densityCheckWindowLength(), + layer->lefiLayer::densityCheckWindowWidth()); + if (layer->lefiLayer::hasDensityCheckStep()) + fprintf(fout, " DENSITYCHECKSTEP %g ;\n", + layer->lefiLayer::densityCheckStep()); + if (layer->lefiLayer::hasFillActiveSpacing()) + fprintf(fout, " FILLACTIVESPACING %g ;\n", + layer->lefiLayer::fillActiveSpacing()); + // 5.4.1 + numMinCut = layer->lefiLayer::numMinimumcut(); + if (numMinCut > 0) { + for (i = 0; i < numMinCut; i++) { + fprintf(fout, " MINIMUMCUT %d WIDTH %g ", + layer->lefiLayer::minimumcut(i), + layer->lefiLayer::minimumcutWidth(i)); + if (layer->lefiLayer::hasMinimumcutWithin(i)) + fprintf(fout, "WITHIN %g ", layer->lefiLayer::minimumcutWithin(i)); + if (layer->lefiLayer::hasMinimumcutConnection(i)) + fprintf(fout, "%s ", layer->lefiLayer::minimumcutConnection(i)); + if (layer->lefiLayer::hasMinimumcutNumCuts(i)) + fprintf(fout, "LENGTH %g WITHIN %g ", + layer->lefiLayer::minimumcutLength(i), + layer->lefiLayer::minimumcutDistance(i)); + fprintf(fout, ";\n"); + } + } + // 5.4.1 + if (layer->lefiLayer::hasMaxwidth()) { + fprintf(fout, " MAXWIDTH %g ;\n", layer->lefiLayer::maxwidth()); + } + // 5.5 + if (layer->lefiLayer::hasMinwidth()) { + fprintf(fout, " MINWIDTH %g ;\n", layer->lefiLayer::minwidth()); + } + // 5.5 + numMinenclosed = layer->lefiLayer::numMinenclosedarea(); + if (numMinenclosed > 0) { + for (i = 0; i < numMinenclosed; i++) { + fprintf(fout, " MINENCLOSEDAREA %g ", + layer->lefiLayer::minenclosedarea(i)); + if (layer->lefiLayer::hasMinenclosedareaWidth(i)) + fprintf(fout, "MINENCLOSEDAREAWIDTH %g ", + layer->lefiLayer::minenclosedareaWidth(i)); + fprintf (fout, ";\n"); + } + } + // 5.4.1 & 5.6 + if (layer->lefiLayer::hasMinstep()) { + for (i = 0; i < layer->lefiLayer::numMinstep(); i++) { + fprintf(fout, " MINSTEP %g ", layer->lefiLayer::minstep(i)); + if (layer->lefiLayer::hasMinstepType(i)) + fprintf(fout, "%s ", layer->lefiLayer::minstepType(i)); + if (layer->lefiLayer::hasMinstepLengthsum(i)) + fprintf(fout, "LENGTHSUM %g ", + layer->lefiLayer::minstepLengthsum(i)); + if (layer->lefiLayer::hasMinstepMaxedges(i)) + fprintf(fout, "MAXEDGES %d ", layer->lefiLayer::minstepMaxedges(i)); + if (layer->lefiLayer::hasMinstepMinAdjLength(i)) + fprintf(fout, "MINADJLENGTH %g ", layer->lefiLayer::minstepMinAdjLength(i)); + if (layer->lefiLayer::hasMinstepMinBetLength(i)) + fprintf(fout, "MINBETLENGTH %g ", layer->lefiLayer::minstepMinBetLength(i)); + if (layer->lefiLayer::hasMinstepXSameCorners(i)) + fprintf(fout, "XSAMECORNERS"); + fprintf(fout, ";\n"); + } + } + // 5.4.1 + if (layer->lefiLayer::hasProtrusion()) { + fprintf(fout, " PROTRUSIONWIDTH %g LENGTH %g WIDTH %g ;\n", + layer->lefiLayer::protrusionWidth1(), + layer->lefiLayer::protrusionLength(), + layer->lefiLayer::protrusionWidth2()); + } + if (layer->lefiLayer::hasSpacingNumber()) { + for (i = 0; i < layer->lefiLayer::numSpacing(); i++) { + fprintf(fout, " SPACING %g ", layer->lefiLayer::spacing(i)); + if (layer->lefiLayer::hasSpacingName(i)) + fprintf(fout, "LAYER %s ", layer->lefiLayer::spacingName(i)); + if (layer->lefiLayer::hasSpacingLayerStack(i)) + fprintf(fout, "STACK "); // 5.7 + if (layer->lefiLayer::hasSpacingAdjacent(i)) + fprintf(fout, "ADJACENTCUTS %d WITHIN %g ", + layer->lefiLayer::spacingAdjacentCuts(i), + layer->lefiLayer::spacingAdjacentWithin(i)); + if (layer->lefiLayer::hasSpacingAdjacentExcept(i)) // 5.7 + fprintf(fout, "EXCEPTSAMEPGNET "); + if (layer->lefiLayer::hasSpacingCenterToCenter(i)) + fprintf(fout, "CENTERTOCENTER "); + if (layer->lefiLayer::hasSpacingSamenet(i)) // 5.7 + fprintf(fout, "SAMENET "); + if (layer->lefiLayer::hasSpacingSamenetPGonly(i)) // 5.7 + fprintf(fout, "PGONLY "); + if (layer->lefiLayer::hasSpacingArea(i)) // 5.7 + fprintf(fout, "AREA %g ", layer->lefiLayer::spacingArea(i)); + if (layer->lefiLayer::hasSpacingRange(i)) { + fprintf(fout, "RANGE %g %g ", layer->lefiLayer::spacingRangeMin(i), + layer->lefiLayer::spacingRangeMax(i)); + if (layer->lefiLayer::hasSpacingRangeUseLengthThreshold(i)) + fprintf(fout, "USELENGTHTHRESHOLD "); + else if (layer->lefiLayer::hasSpacingRangeInfluence(i)) { + fprintf(fout, "INFLUENCE %g ", + layer->lefiLayer::spacingRangeInfluence(i)); + if (layer->lefiLayer::hasSpacingRangeInfluenceRange(i)) + fprintf(fout, "RANGE %g %g ", + layer->lefiLayer::spacingRangeInfluenceMin(i), + layer->lefiLayer::spacingRangeInfluenceMax(i)); + } else if (layer->lefiLayer::hasSpacingRangeRange(i)) + fprintf(fout, "RANGE %g %g ", + layer->lefiLayer::spacingRangeRangeMin(i), + layer->lefiLayer::spacingRangeRangeMax(i)); + } else if (layer->lefiLayer::hasSpacingLengthThreshold(i)) { + fprintf(fout, "LENGTHTHRESHOLD %g ", + layer->lefiLayer::spacingLengthThreshold(i)); + if (layer->lefiLayer::hasSpacingLengthThresholdRange(i)) + fprintf(fout, "RANGE %g %g", + layer->lefiLayer::spacingLengthThresholdRangeMin(i), + layer->lefiLayer::spacingLengthThresholdRangeMax(i)); + } else if (layer->lefiLayer::hasSpacingNotchLength(i)) {// 5.7 + fprintf(fout, "NOTCHLENGTH %g", + layer->lefiLayer::spacingNotchLength(i)); + } else if (layer->lefiLayer::hasSpacingEndOfNotchWidth(i)) // 5.7 + fprintf(fout, "ENDOFNOTCHWIDTH %g NOTCHSPACING %g, NOTCHLENGTH %g", + layer->lefiLayer::spacingEndOfNotchWidth(i), + layer->lefiLayer::spacingEndOfNotchSpacing(i), + layer->lefiLayer::spacingEndOfNotchLength(i)); + + if (layer->lefiLayer::hasSpacingParallelOverlap(i)) // 5.7 + fprintf(fout, "PARALLELOVERLAP "); + if (layer->lefiLayer::hasSpacingEndOfLine(i)) { // 5.7 + fprintf(fout, "ENDOFLINE %g WITHIN %g ", + layer->lefiLayer::spacingEolWidth(i), + layer->lefiLayer::spacingEolWithin(i)); + if (layer->lefiLayer::hasSpacingParellelEdge(i)) { + fprintf(fout, "PARALLELEDGE %g WITHIN %g ", + layer->lefiLayer::spacingParSpace(i), + layer->lefiLayer::spacingParWithin(i)); + if (layer->lefiLayer::hasSpacingTwoEdges(i)) { + fprintf(fout, "TWOEDGES "); + } + } + } + fprintf(fout, ";\n"); + } + } + if (layer->lefiLayer::hasSpacingTableOrtho()) { // 5.7 + fprintf(fout, "SPACINGTABLE ORTHOGONAL"); + ortho = layer->lefiLayer::orthogonal(); + for (i = 0; i < ortho->lefiOrthogonal::numOrthogonal(); i++) { + fprintf(fout, "\n WITHIN %g SPACING %g", + ortho->lefiOrthogonal::cutWithin(i), + ortho->lefiOrthogonal::orthoSpacing(i)); + } + fprintf(fout, ";\n"); + } + for (i = 0; i < layer->lefiLayer::numEnclosure(); i++) { + fprintf(fout, "ENCLOSURE "); + if (layer->lefiLayer::hasEnclosureRule(i)) + fprintf(fout, "%s ", layer->lefiLayer::enclosureRule(i)); + fprintf(fout, "%g %g ", layer->lefiLayer::enclosureOverhang1(i), + layer->lefiLayer::enclosureOverhang2(i)); + if (layer->lefiLayer::hasEnclosureWidth(i)) + fprintf(fout, "WIDTH %g ", layer->lefiLayer::enclosureMinWidth(i)); + if (layer->lefiLayer::hasEnclosureExceptExtraCut(i)) + fprintf(fout, "EXCEPTEXTRACUT %g ", + layer->lefiLayer::enclosureExceptExtraCut(i)); + if (layer->lefiLayer::hasEnclosureMinLength(i)) + fprintf(fout, "LENGTH %g ", layer->lefiLayer::enclosureMinLength(i)); + fprintf(fout, ";\n"); + } + for (i = 0; i < layer->lefiLayer::numPreferEnclosure(); i++) { + fprintf(fout, "PREFERENCLOSURE "); + if (layer->lefiLayer::hasPreferEnclosureRule(i)) + fprintf(fout, "%s ", layer->lefiLayer::preferEnclosureRule(i)); + fprintf(fout, "%g %g ", layer->lefiLayer::preferEnclosureOverhang1(i), + layer->lefiLayer::preferEnclosureOverhang2(i)); + if (layer->lefiLayer::hasPreferEnclosureWidth(i)) + fprintf(fout, "WIDTH %g ",layer->lefiLayer::preferEnclosureMinWidth(i)); + fprintf(fout, ";\n"); + } + if (layer->lefiLayer::hasResistancePerCut()) + fprintf(fout, " RESISTANCE %g ;\n", + layer->lefiLayer::resistancePerCut()); + if (layer->lefiLayer::hasCurrentDensityPoint()) + fprintf(fout, " CURRENTDEN %g ;\n", + layer->lefiLayer::currentDensityPoint()); + if (layer->lefiLayer::hasCurrentDensityArray()) { + layer->lefiLayer::currentDensityArray(&numPoints, &widths, ¤t); + for (i = 0; i < numPoints; i++) + fprintf(fout, " CURRENTDEN ( %g %g ) ;\n", widths[i], current[i]); + } + if (layer->lefiLayer::hasDirection()) + fprintf(fout, " DIRECTION %s ;\n", layer->lefiLayer::direction()); + if (layer->lefiLayer::hasResistance()) + fprintf(fout, " RESISTANCE RPERSQ %g ;\n", + layer->lefiLayer::resistance()); + if (layer->lefiLayer::hasCapacitance()) + fprintf(fout, " CAPACITANCE CPERSQDIST %g ;\n", + layer->lefiLayer::capacitance()); + if (layer->lefiLayer::hasEdgeCap()) + fprintf(fout, " EDGECAPACITANCE %g ;\n", layer->lefiLayer::edgeCap()); + if (layer->lefiLayer::hasHeight()) + fprintf(fout, " TYPE %g ;\n", layer->lefiLayer::height()); + if (layer->lefiLayer::hasThickness()) + fprintf(fout, " THICKNESS %g ;\n", layer->lefiLayer::thickness()); + if (layer->lefiLayer::hasWireExtension()) + fprintf(fout, " WIREEXTENSION %g ;\n", layer->lefiLayer::wireExtension()); + if (layer->lefiLayer::hasShrinkage()) + fprintf(fout, " SHRINKAGE %g ;\n", layer->lefiLayer::shrinkage()); + if (layer->lefiLayer::hasCapMultiplier()) + fprintf(fout, " CAPMULTIPLIER %g ;\n", layer->lefiLayer::capMultiplier()); + if (layer->lefiLayer::hasAntennaArea()) + fprintf(fout, " ANTENNAAREAFACTOR %g ;\n", + layer->lefiLayer::antennaArea()); + if (layer->lefiLayer::hasAntennaLength()) + fprintf(fout, " ANTENNALENGTHFACTOR %g ;\n", + layer->lefiLayer::antennaLength()); + + // 5.5 AntennaModel + for (i = 0; i < layer->lefiLayer::numAntennaModel(); i++) { + aModel = layer->lefiLayer::antennaModel(i); + + fprintf(fout, " ANTENNAMODEL %s ;\n", + aModel->lefiAntennaModel::antennaOxide()); + + if (aModel->lefiAntennaModel::hasAntennaAreaRatio()) + fprintf(fout, " ANTENNAAREARATIO %g ;\n", + aModel->lefiAntennaModel::antennaAreaRatio()); + if (aModel->lefiAntennaModel::hasAntennaDiffAreaRatio()) + fprintf(fout, " ANTENNADIFFAREARATIO %g ;\n", + aModel->lefiAntennaModel::antennaDiffAreaRatio()); + else if (aModel->lefiAntennaModel::hasAntennaDiffAreaRatioPWL()) { + pwl = aModel->lefiAntennaModel::antennaDiffAreaRatioPWL(); + fprintf(fout, " ANTENNADIFFAREARATIO PWL ( "); + for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) + fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), + pwl->lefiAntennaPWL::PWLratio(j)); + fprintf(fout, ") ;\n"); + } + if (aModel->lefiAntennaModel::hasAntennaCumAreaRatio()) + fprintf(fout, " ANTENNACUMAREARATIO %g ;\n", + aModel->lefiAntennaModel::antennaCumAreaRatio()); + if (aModel->lefiAntennaModel::hasAntennaCumDiffAreaRatio()) + fprintf(fout, " ANTENNACUMDIFFAREARATIO %g\n", + aModel->lefiAntennaModel::antennaCumDiffAreaRatio()); + if (aModel->lefiAntennaModel::hasAntennaCumDiffAreaRatioPWL()) { + pwl = aModel->lefiAntennaModel::antennaCumDiffAreaRatioPWL(); + fprintf(fout, " ANTENNACUMDIFFAREARATIO PWL ( "); + for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) + fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), + pwl->lefiAntennaPWL::PWLratio(j)); + fprintf(fout, ") ;\n"); + } + if (aModel->lefiAntennaModel::hasAntennaAreaFactor()) { + fprintf(fout, " ANTENNAAREAFACTOR %g ", + aModel->lefiAntennaModel::antennaAreaFactor()); + if (aModel->lefiAntennaModel::hasAntennaAreaFactorDUO()) + fprintf(fout, " DIFFUSEONLY "); + fprintf(fout, ";\n"); + } + if (aModel->lefiAntennaModel::hasAntennaSideAreaRatio()) + fprintf(fout, " ANTENNASIDEAREARATIO %g ;\n", + aModel->lefiAntennaModel::antennaSideAreaRatio()); + if (aModel->lefiAntennaModel::hasAntennaDiffSideAreaRatio()) + fprintf(fout, " ANTENNADIFFSIDEAREARATIO %g\n", + aModel->lefiAntennaModel::antennaDiffSideAreaRatio()); + else if (aModel->lefiAntennaModel::hasAntennaDiffSideAreaRatioPWL()) { + pwl = aModel->lefiAntennaModel::antennaDiffSideAreaRatioPWL(); + fprintf(fout, " ANTENNADIFFSIDEAREARATIO PWL ( "); + for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) + fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), + pwl->lefiAntennaPWL::PWLratio(j)); + fprintf(fout, ") ;\n"); + } + if (aModel->lefiAntennaModel::hasAntennaCumSideAreaRatio()) + fprintf(fout, " ANTENNACUMSIDEAREARATIO %g ;\n", + aModel->lefiAntennaModel::antennaCumSideAreaRatio()); + if (aModel->lefiAntennaModel::hasAntennaCumDiffSideAreaRatio()) + fprintf(fout, " ANTENNACUMDIFFSIDEAREARATIO %g\n", + aModel->lefiAntennaModel::antennaCumDiffSideAreaRatio()); + else if (aModel->lefiAntennaModel::hasAntennaCumDiffSideAreaRatioPWL()) { + pwl = aModel->lefiAntennaModel::antennaCumDiffSideAreaRatioPWL(); + fprintf(fout, " ANTENNACUMDIFFSIDEAREARATIO PWL ( "); + for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) + fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), + pwl->lefiAntennaPWL::PWLratio(j)); + fprintf(fout, ") ;\n"); + } + if (aModel->lefiAntennaModel::hasAntennaSideAreaFactor()) { + fprintf(fout, " ANTENNASIDEAREAFACTOR %g ", + aModel->lefiAntennaModel::antennaSideAreaFactor()); + if (aModel->lefiAntennaModel::hasAntennaSideAreaFactorDUO()) + fprintf(fout, " DIFFUSEONLY "); + fprintf(fout, ";\n"); + } + if (aModel->lefiAntennaModel::hasAntennaCumRoutingPlusCut()) + fprintf(fout, " ANTENNACUMROUTINGPLUSCUT ;\n"); + if (aModel->lefiAntennaModel::hasAntennaGatePlusDiff()) + fprintf(fout, " ANTENNAGATEPLUSDIFF %g ;\n", + aModel->lefiAntennaModel::antennaGatePlusDiff()); + if (aModel->lefiAntennaModel::hasAntennaAreaMinusDiff()) + fprintf(fout, " ANTENNAAREAMINUSDIFF %g ;\n", + aModel->lefiAntennaModel::antennaAreaMinusDiff()); + if (aModel->lefiAntennaModel::hasAntennaAreaDiffReducePWL()) { + pwl = aModel->lefiAntennaModel::antennaAreaDiffReducePWL(); + fprintf(fout, " ANTENNAAREADIFFREDUCEPWL ( "); + for (j = 0; j < pwl->lefiAntennaPWL::numPWL(); j++) + fprintf(fout, "( %g %g ) ", pwl->lefiAntennaPWL::PWLdiffusion(j), + pwl->lefiAntennaPWL::PWLratio(j)); + fprintf(fout, ") ;\n"); + } + } + + if (layer->lefiLayer::numAccurrentDensity()) { + for (i = 0; i < layer->lefiLayer::numAccurrentDensity(); i++) { + density = layer->lefiLayer::accurrent(i); + fprintf(fout, " ACCURRENTDENSITY %s", density->type()); + if (density->hasOneEntry()) + fprintf(fout, " %g ;\n", density->oneEntry()); + else { + fprintf(fout, "\n"); + if (density->numFrequency()) { + fprintf(fout, " FREQUENCY"); + for (j = 0; j < density->numFrequency(); j++) + fprintf(fout, " %g", density->frequency(j)); + fprintf(fout, " ;\n"); + } + if (density->numCutareas()) { + fprintf(fout, " CUTAREA"); + for (j = 0; j < density->numCutareas(); j++) + fprintf(fout, " %g", density->cutArea(j)); + fprintf(fout, " ;\n"); + } + if (density->numWidths()) { + fprintf(fout, " WIDTH"); + for (j = 0; j < density->numWidths(); j++) + fprintf(fout, " %g", density->width(j)); + fprintf(fout, " ;\n"); + } + if (density->numTableEntries()) { + k = 5; + fprintf(fout, " TABLEENTRIES"); + for (j = 0; j < density->numTableEntries(); j++) + if (k > 4) { + fprintf(fout, "\n %g", density->tableEntry(j)); + k = 1; + } else { + fprintf(fout, " %g", density->tableEntry(j)); + k++; + } + fprintf(fout, " ;\n"); + } + } + } + } + if (layer->lefiLayer::numDccurrentDensity()) { + for (i = 0; i < layer->lefiLayer::numDccurrentDensity(); i++) { + density = layer->lefiLayer::dccurrent(i); + fprintf(fout, " DCCURRENTDENSITY %s", density->type()); + if (density->hasOneEntry()) + fprintf(fout, " %g ;\n", density->oneEntry()); + else { + fprintf(fout, "\n"); + if (density->numCutareas()) { + fprintf(fout, " CUTAREA"); + for (j = 0; j < density->numCutareas(); j++) + fprintf(fout, " %g", density->cutArea(j)); + fprintf(fout, " ;\n"); + } + if (density->numWidths()) { + fprintf(fout, " WIDTH"); + for (j = 0; j < density->numWidths(); j++) + fprintf(fout, " %g", density->width(j)); + fprintf(fout, " ;\n"); + } + if (density->numTableEntries()) { + fprintf(fout, " TABLEENTRIES"); + for (j = 0; j < density->numTableEntries(); j++) + fprintf(fout, " %g", density->tableEntry(j)); + fprintf(fout, " ;\n"); + } + } + } + } + + for (i = 0; i < layer->lefiLayer::numSpacingTable(); i++) { + spTable = layer->lefiLayer::spacingTable(i); + fprintf(fout, " SPACINGTABLE\n"); + if (spTable->lefiSpacingTable::isInfluence()) { + influence = spTable->lefiSpacingTable::influence(); + fprintf(fout, " INFLUENCE"); + for (j = 0; j < influence->lefiInfluence::numInfluenceEntry(); j++) { + fprintf(fout, "\n WIDTH %g WITHIN %g SPACING %g", + influence->lefiInfluence::width(j), + influence->lefiInfluence::distance(j), + influence->lefiInfluence::spacing(j)); + } + fprintf(fout, " ;\n"); + } else if (spTable->lefiSpacingTable::isParallel()){ + parallel = spTable->lefiSpacingTable::parallel(); + fprintf(fout, " PARALLELRUNLENGTH"); + for (j = 0; j < parallel->lefiParallel::numLength(); j++) { + fprintf(fout, " %g", parallel->lefiParallel::length(j)); + } + for (j = 0; j < parallel->lefiParallel::numWidth(); j++) { + fprintf(fout, "\n WIDTH %g", + parallel->lefiParallel::width(j)); + for (k = 0; k < parallel->lefiParallel::numLength(); k++) { + fprintf(fout, " %g", parallel->lefiParallel::widthSpacing(j, k)); + } + } + fprintf(fout, " ;\n"); + } else { // 5.7 TWOWIDTHS + twoWidths = spTable->lefiSpacingTable::twoWidths(); + fprintf(fout, " TWOWIDTHS"); + for (j = 0; j < twoWidths->lefiTwoWidths::numWidth(); j++) { + fprintf(fout, "\n WIDTH %g ", + twoWidths->lefiTwoWidths::width(j)); + if (twoWidths->lefiTwoWidths::hasWidthPRL(j)) + fprintf(fout, "PRL %g ", twoWidths->lefiTwoWidths::widthPRL(j)); + for (k = 0; k < twoWidths->lefiTwoWidths::numWidthSpacing(j); k++) + fprintf(fout, "%g ",twoWidths->lefiTwoWidths::widthSpacing(j, k)); + } + fprintf(fout, " ;\n"); + } + } + + propNum = layer->lefiLayer::numProps(); + if (propNum > 0) { + fprintf(fout, " PROPERTY "); + for (i = 0; i < propNum; i++) { + // value can either be a string or number + fprintf(fout, "%s ", layer->lefiLayer::propName(i)); + if (layer->lefiLayer::propIsNumber(i)) + fprintf(fout, "%g ", layer->lefiLayer::propNumber(i)); + if (layer->lefiLayer::propIsString(i)) + fprintf(fout, "%s ", layer->lefiLayer::propValue(i)); + pType = layer->lefiLayer::propType(i); + switch (pType) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + fprintf(fout, ";\n"); + } + if (layer->lefiLayer::hasDiagMinEdgeLength()) + fprintf(fout, " DIAGMINEDGELENGTH %g ;\n", + layer->lefiLayer::diagMinEdgeLength()); + if (layer->lefiLayer::numMinSize()) { + fprintf(fout, " MINSIZE "); + for (i = 0; i < layer->lefiLayer::numMinSize(); i++) { + fprintf(fout, "%g %g ", layer->lefiLayer::minSizeWidth(i), + layer->lefiLayer::minSizeLength(i)); + } + fprintf(fout, ";\n"); + } + + fprintf(fout, "END %s\n", layer->lefiLayer::name()); + + // Set it to case sensitive from here on + lefrSetCaseSensitivity(1); + + return 0; +} + +int macroBeginCB(lefrCallbackType_e c, const char* macroName, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "MACRO %s\n", macroName); + return 0; +} + +int macroFixedMaskCB(lefrCallbackType_e c, int, + lefiUserData) { + checkType(c); + + return 0; +} + +int macroClassTypeCB(lefrCallbackType_e c, const char* macroClassType, + lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "MACRO CLASS %s\n", macroClassType); + return 0; +} + +int macroOriginCB(lefrCallbackType_e c, lefiNum, + lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + // fprintf(fout, " ORIGIN ( %g %g ) ;\n", macroNum.x, macroNum.y); + return 0; +} + +int macroSizeCB(lefrCallbackType_e c, lefiNum, + lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + // fprintf(fout, " SIZE %g BY %g ;\n", macroNum.x, macroNum.y); + return 0; +} + +int macroCB(lefrCallbackType_e c, lefiMacro* macro, lefiUserData) { + lefiSitePattern* pattern; + int propNum, i, hasPrtSym = 0; + + checkType(c); + // if ((long)ud != userData) dataError(); + if (macro->lefiMacro::hasClass()) + fprintf(fout, " CLASS %s ;\n", macro->lefiMacro::macroClass()); + if (macro->lefiMacro::isFixedMask()) + fprintf(fout, " FIXEDMASK ;\n"); + if (macro->lefiMacro::hasEEQ()) + fprintf(fout, " EEQ %s ;\n", macro->lefiMacro::EEQ()); + if (macro->lefiMacro::hasLEQ()) + fprintf(fout, " LEQ %s ;\n", macro->lefiMacro::LEQ()); + if (macro->lefiMacro::hasSource()) + fprintf(fout, " SOURCE %s ;\n", macro->lefiMacro::source()); + if (macro->lefiMacro::hasXSymmetry()) { + fprintf(fout, " SYMMETRY X "); + hasPrtSym = 1; + } + if (macro->lefiMacro::hasYSymmetry()) { // print X Y & R90 in one line + if (!hasPrtSym) { + fprintf(fout, " SYMMETRY Y "); + hasPrtSym = 1; + } + else + fprintf(fout, "Y "); + } + if (macro->lefiMacro::has90Symmetry()) { + if (!hasPrtSym) { + fprintf(fout, " SYMMETRY R90 "); + hasPrtSym = 1; + } + else + fprintf(fout, "R90 "); + } + if (hasPrtSym) { + fprintf (fout, ";\n"); + hasPrtSym = 0; + } + if (macro->lefiMacro::hasSiteName()) + fprintf(fout, " SITE %s ;\n", macro->lefiMacro::siteName()); + if (macro->lefiMacro::hasSitePattern()) { + for (i = 0; i < macro->lefiMacro::numSitePattern(); i++ ) { + pattern = macro->lefiMacro::sitePattern(i); + if (pattern->lefiSitePattern::hasStepPattern()) { + fprintf(fout, " SITE %s %g %g %s DO %g BY %g STEP %g %g ;\n", + pattern->lefiSitePattern::name(), pattern->lefiSitePattern::x(), + pattern->lefiSitePattern::y(), + orientStr(pattern->lefiSitePattern::orient()), + pattern->lefiSitePattern::xStart(), + pattern->lefiSitePattern::yStart(), + pattern->lefiSitePattern::xStep(), + pattern->lefiSitePattern::yStep()); + } else { + fprintf(fout, " SITE %s %g %g %s ;\n", + pattern->lefiSitePattern::name(), pattern->lefiSitePattern::x(), + pattern->lefiSitePattern::y(), + orientStr(pattern->lefiSitePattern::orient())); + } + } + } + if (macro->lefiMacro::hasSize()) + fprintf(fout, " SIZE %g BY %g ;\n", macro->lefiMacro::sizeX(), + macro->lefiMacro::sizeY()); + + if (macro->lefiMacro::hasForeign()) { + for (i = 0; i < macro->lefiMacro::numForeigns(); i++) { + fprintf(fout, " FOREIGN %s ", macro->lefiMacro::foreignName(i)); + if (macro->lefiMacro::hasForeignPoint(i)) { + fprintf(fout, "( %g %g ) ", macro->lefiMacro::foreignX(i), + macro->lefiMacro::foreignY(i)); + if (macro->lefiMacro::hasForeignOrient(i)) + fprintf(fout, "%s ", macro->lefiMacro::foreignOrientStr(i)); + } + fprintf(fout, ";\n"); + } + } + if (macro->lefiMacro::hasOrigin()) + fprintf(fout, " ORIGIN ( %g %g ) ;\n", macro->lefiMacro::originX(), + macro->lefiMacro::originY()); + if (macro->lefiMacro::hasPower()) + fprintf(fout, " POWER %g ;\n", macro->lefiMacro::power()); + propNum = macro->lefiMacro::numProperties(); + if (propNum > 0) { + fprintf(fout, " PROPERTY "); + for (i = 0; i < propNum; i++) { + // value can either be a string or number + if (macro->lefiMacro::propValue(i)) { + fprintf(fout, "%s %s ", macro->lefiMacro::propName(i), + macro->lefiMacro::propValue(i)); + } + else + fprintf(fout, "%s %g ", macro->lefiMacro::propName(i), + macro->lefiMacro::propNum(i)); + + switch (macro->lefiMacro::propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + fprintf(fout, ";\n"); + } + //fprintf(fout, "END %s\n", macro->lefiMacro::name()); + return 0; +} + +int macroEndCB(lefrCallbackType_e c, const char* macroName, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "END %s\n", macroName); + return 0; +} + +int manufacturingCB(lefrCallbackType_e c, double num, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "MANUFACTURINGGRID %g ;\n", num); + return 0; +} + +int maxStackViaCB(lefrCallbackType_e c, lefiMaxStackVia* maxStack, + lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "MAXVIASTACK %d ", maxStack->lefiMaxStackVia::maxStackVia()); + if (maxStack->lefiMaxStackVia::hasMaxStackViaRange()) + fprintf(fout, "RANGE %s %s ", + maxStack->lefiMaxStackVia::maxStackViaBottomLayer(), + maxStack->lefiMaxStackVia::maxStackViaTopLayer()); + fprintf(fout, ";\n"); + return 0; +} + +int minFeatureCB(lefrCallbackType_e c, lefiMinFeature* min, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "MINFEATURE %g %g ;\n", min->lefiMinFeature::one(), + min->lefiMinFeature::two()); + return 0; +} + +int nonDefaultCB(lefrCallbackType_e c, lefiNonDefault* def, lefiUserData) { + int i; + lefiVia* via; + lefiSpacing* spacing; + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "NONDEFAULTRULE %s\n", def->lefiNonDefault::name()); + if (def->lefiNonDefault::hasHardspacing()) + fprintf(fout, " HARDSPACING ;\n"); + for (i = 0; i < def->lefiNonDefault::numLayers(); i++) { + fprintf(fout, " LAYER %s\n", def->lefiNonDefault::layerName(i)); + if (def->lefiNonDefault::hasLayerWidth(i)) + fprintf(fout, " WIDTH %g ;\n", def->lefiNonDefault::layerWidth(i)); + if (def->lefiNonDefault::hasLayerSpacing(i)) + fprintf(fout, " SPACING %g ;\n", + def->lefiNonDefault::layerSpacing(i)); + if (def->lefiNonDefault::hasLayerDiagWidth(i)) + fprintf(fout, " DIAGWIDTH %g ;\n", + def->lefiNonDefault::layerDiagWidth(i)); + if (def->lefiNonDefault::hasLayerWireExtension(i)) + fprintf(fout, " WIREEXTENSION %g ;\n", + def->lefiNonDefault::layerWireExtension(i)); + if (def->lefiNonDefault::hasLayerResistance(i)) + fprintf(fout, " RESISTANCE RPERSQ %g ;\n", + def->lefiNonDefault::layerResistance(i)); + if (def->lefiNonDefault::hasLayerCapacitance(i)) + fprintf(fout, " CAPACITANCE CPERSQDIST %g ;\n", + def->lefiNonDefault::layerCapacitance(i)); + if (def->lefiNonDefault::hasLayerEdgeCap(i)) + fprintf(fout, " EDGECAPACITANCE %g ;\n", + def->lefiNonDefault::layerEdgeCap(i)); + fprintf(fout, " END %s\n", def->lefiNonDefault::layerName(i)); + } + + // handle via in nondefaultrule + for (i = 0; i < def->lefiNonDefault::numVias(); i++) { + via = def->lefiNonDefault::viaRule(i); + lefVia(via); + } + + // handle spacing in nondefaultrule + for (i = 0; i < def->lefiNonDefault::numSpacingRules(); i++) { + spacing = def->lefiNonDefault::spacingRule(i); + lefSpacing(spacing); + } + + // handle usevia + for (i = 0; i < def->lefiNonDefault::numUseVia(); i++) + fprintf(fout, " USEVIA %s ;\n", def->lefiNonDefault::viaName(i)); + + // handle useviarule + for (i = 0; i < def->lefiNonDefault::numUseViaRule(); i++) + fprintf(fout, " USEVIARULE %s ;\n", + def->lefiNonDefault::viaRuleName(i)); + + // handle mincuts + for (i = 0; i < def->lefiNonDefault::numMinCuts(); i++) { + fprintf(fout, " MINCUTS %s %d ;\n", def->lefiNonDefault::cutLayerName(i), + def->lefiNonDefault::numCuts(i)); + } + + // handle property in nondefaultrule + if (def->lefiNonDefault::numProps() > 0) { + fprintf(fout, " PROPERTY "); + for (i = 0; i < def->lefiNonDefault::numProps(); i++) { + fprintf(fout, "%s ", def->lefiNonDefault::propName(i)); + if (def->lefiNonDefault::propIsNumber(i)) + fprintf(fout, "%g ", def->lefiNonDefault::propNumber(i)); + if (def->lefiNonDefault::propIsString(i)) + fprintf(fout, "%s ", def->lefiNonDefault::propValue(i)); + switch(def->lefiNonDefault::propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + fprintf(fout, ";\n"); + } + fprintf(fout, "END %s ;\n", def->lefiNonDefault::name()); + + return 0; +} + +int obstructionCB(lefrCallbackType_e c, lefiObstruction* obs, + lefiUserData) { + lefiGeometries* geometry; + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, " OBS\n"); + geometry = obs->lefiObstruction::geometries(); + prtGeometry(geometry); + fprintf(fout, " END\n"); + return 0; +} + +int pinCB(lefrCallbackType_e c, lefiPin* pin, lefiUserData) { + int numPorts, i, j; + lefiGeometries* geometry; + lefiPinAntennaModel* aModel; + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, " PIN %s\n", pin->lefiPin::name()); + if (pin->lefiPin::hasForeign()) { + for (i = 0; i < pin->lefiPin::numForeigns(); i++) { + if (pin->lefiPin::hasForeignOrient(i)) + fprintf(fout, " FOREIGN %s STRUCTURE ( %g %g ) %s ;\n", + pin->lefiPin::foreignName(i), pin->lefiPin::foreignX(i), + pin->lefiPin::foreignY(i), + pin->lefiPin::foreignOrientStr(i)); + else if (pin->lefiPin::hasForeignPoint(i)) + fprintf(fout, " FOREIGN %s STRUCTURE ( %g %g ) ;\n", + pin->lefiPin::foreignName(i), pin->lefiPin::foreignX(i), + pin->lefiPin::foreignY(i)); + else + fprintf(fout, " FOREIGN %s ;\n", pin->lefiPin::foreignName(i)); + } + } + if (pin->lefiPin::hasLEQ()) + fprintf(fout, " LEQ %s ;\n", pin->lefiPin::LEQ()); + if (pin->lefiPin::hasDirection()) + fprintf(fout, " DIRECTION %s ;\n", pin->lefiPin::direction()); + if (pin->lefiPin::hasUse()) + fprintf(fout, " USE %s ;\n", pin->lefiPin::use()); + if (pin->lefiPin::hasShape()) + fprintf(fout, " SHAPE %s ;\n", pin->lefiPin::shape()); + if (pin->lefiPin::hasMustjoin()) + fprintf(fout, " MUSTJOIN %s ;\n", pin->lefiPin::mustjoin()); + if (pin->lefiPin::hasOutMargin()) + fprintf(fout, " OUTPUTNOISEMARGIN %g %g ;\n", + pin->lefiPin::outMarginHigh(), pin->lefiPin::outMarginLow()); + if (pin->lefiPin::hasOutResistance()) + fprintf(fout, " OUTPUTRESISTANCE %g %g ;\n", + pin->lefiPin::outResistanceHigh(), + pin->lefiPin::outResistanceLow()); + if (pin->lefiPin::hasInMargin()) + fprintf(fout, " INPUTNOISEMARGIN %g %g ;\n", + pin->lefiPin::inMarginHigh(), pin->lefiPin::inMarginLow()); + if (pin->lefiPin::hasPower()) + fprintf(fout, " POWER %g ;\n", pin->lefiPin::power()); + if (pin->lefiPin::hasLeakage()) + fprintf(fout, " LEAKAGE %g ;\n", pin->lefiPin::leakage()); + if (pin->lefiPin::hasMaxload()) + fprintf(fout, " MAXLOAD %g ;\n", pin->lefiPin::maxload()); + if (pin->lefiPin::hasCapacitance()) + fprintf(fout, " CAPACITANCE %g ;\n", pin->lefiPin::capacitance()); + if (pin->lefiPin::hasResistance()) + fprintf(fout, " RESISTANCE %g ;\n", pin->lefiPin::resistance()); + if (pin->lefiPin::hasPulldownres()) + fprintf(fout, " PULLDOWNRES %g ;\n", pin->lefiPin::pulldownres()); + if (pin->lefiPin::hasTieoffr()) + fprintf(fout, " TIEOFFR %g ;\n", pin->lefiPin::tieoffr()); + if (pin->lefiPin::hasVHI()) + fprintf(fout, " VHI %g ;\n", pin->lefiPin::VHI()); + if (pin->lefiPin::hasVLO()) + fprintf(fout, " VLO %g ;\n", pin->lefiPin::VLO()); + if (pin->lefiPin::hasRiseVoltage()) + fprintf(fout, " RISEVOLTAGETHRESHOLD %g ;\n", + pin->lefiPin::riseVoltage()); + if (pin->lefiPin::hasFallVoltage()) + fprintf(fout, " FALLVOLTAGETHRESHOLD %g ;\n", + pin->lefiPin::fallVoltage()); + if (pin->lefiPin::hasRiseThresh()) + fprintf(fout, " RISETHRESH %g ;\n", pin->lefiPin::riseThresh()); + if (pin->lefiPin::hasFallThresh()) + fprintf(fout, " FALLTHRESH %g ;\n", pin->lefiPin::fallThresh()); + if (pin->lefiPin::hasRiseSatcur()) + fprintf(fout, " RISESATCUR %g ;\n", pin->lefiPin::riseSatcur()); + if (pin->lefiPin::hasFallSatcur()) + fprintf(fout, " FALLSATCUR %g ;\n", pin->lefiPin::fallSatcur()); + if (pin->lefiPin::hasRiseSlewLimit()) + fprintf(fout, " RISESLEWLIMIT %g ;\n", pin->lefiPin::riseSlewLimit()); + if (pin->lefiPin::hasFallSlewLimit()) + fprintf(fout, " FALLSLEWLIMIT %g ;\n", pin->lefiPin::fallSlewLimit()); + if (pin->lefiPin::hasCurrentSource()) + fprintf(fout, " CURRENTSOURCE %s ;\n", pin->lefiPin::currentSource()); + if (pin->lefiPin::hasTables()) + fprintf(fout, " IV_TABLES %s %s ;\n", pin->lefiPin::tableHighName(), + pin->lefiPin::tableLowName()); + if (pin->lefiPin::hasTaperRule()) + fprintf(fout, " TAPERRULE %s ;\n", pin->lefiPin::taperRule()); + if (pin->lefiPin::hasNetExpr()) + fprintf(fout, " NETEXPR \"%s\" ;\n", pin->lefiPin::netExpr()); + if (pin->lefiPin::hasSupplySensitivity()) + fprintf(fout, " SUPPLYSENSITIVITY %s ;\n", + pin->lefiPin::supplySensitivity()); + if (pin->lefiPin::hasGroundSensitivity()) + fprintf(fout, " GROUNDSENSITIVITY %s ;\n", + pin->lefiPin::groundSensitivity()); + if (pin->lefiPin::hasAntennaSize()) { + for (i = 0; i < pin->lefiPin::numAntennaSize(); i++) { + fprintf(fout, " ANTENNASIZE %g ", pin->lefiPin::antennaSize(i)); + if (pin->lefiPin::antennaSizeLayer(i)) + fprintf(fout, "LAYER %s ", pin->lefiPin::antennaSizeLayer(i)); + fprintf(fout, ";\n"); + } + } + if (pin->lefiPin::hasAntennaMetalArea()) { + for (i = 0; i < pin->lefiPin::numAntennaMetalArea(); i++) { + fprintf(fout, " ANTENNAMETALAREA %g ", + pin->lefiPin::antennaMetalArea(i)); + if (pin->lefiPin::antennaMetalAreaLayer(i)) + fprintf(fout, "LAYER %s ", pin->lefiPin::antennaMetalAreaLayer(i)); + fprintf(fout, ";\n"); + } + } + if (pin->lefiPin::hasAntennaMetalLength()) { + for (i = 0; i < pin->lefiPin::numAntennaMetalLength(); i++) { + fprintf(fout, " ANTENNAMETALLENGTH %g ", + pin->lefiPin::antennaMetalLength(i)); + if (pin->lefiPin::antennaMetalLengthLayer(i)) + fprintf(fout, "LAYER %s ", pin->lefiPin::antennaMetalLengthLayer(i)); + fprintf(fout, ";\n"); + } + } + + if (pin->lefiPin::hasAntennaPartialMetalArea()) { + for (i = 0; i < pin->lefiPin::numAntennaPartialMetalArea(); i++) { + fprintf(fout, " ANTENNAPARTIALMETALAREA %g ", + pin->lefiPin::antennaPartialMetalArea(i)); + if (pin->lefiPin::antennaPartialMetalAreaLayer(i)) + fprintf(fout, "LAYER %s ", + pin->lefiPin::antennaPartialMetalAreaLayer(i)); + fprintf(fout, ";\n"); + } + } + + if (pin->lefiPin::hasAntennaPartialMetalSideArea()) { + for (i = 0; i < pin->lefiPin::numAntennaPartialMetalSideArea(); i++) { + fprintf(fout, " ANTENNAPARTIALMETALSIDEAREA %g ", + pin->lefiPin::antennaPartialMetalSideArea(i)); + if (pin->lefiPin::antennaPartialMetalSideAreaLayer(i)) + fprintf(fout, "LAYER %s ", + pin->lefiPin::antennaPartialMetalSideAreaLayer(i)); + fprintf(fout, ";\n"); + } + } + + if (pin->lefiPin::hasAntennaPartialCutArea()) { + for (i = 0; i < pin->lefiPin::numAntennaPartialCutArea(); i++) { + fprintf(fout, " ANTENNAPARTIALCUTAREA %g ", + pin->lefiPin::antennaPartialCutArea(i)); + if (pin->lefiPin::antennaPartialCutAreaLayer(i)) + fprintf(fout, "LAYER %s ", + pin->lefiPin::antennaPartialCutAreaLayer(i)); + fprintf(fout, ";\n"); + } + } + + if (pin->lefiPin::hasAntennaDiffArea()) { + for (i = 0; i < pin->lefiPin::numAntennaDiffArea(); i++) { + fprintf(fout, " ANTENNADIFFAREA %g ", + pin->lefiPin::antennaDiffArea(i)); + if (pin->lefiPin::antennaDiffAreaLayer(i)) + fprintf(fout, "LAYER %s ", pin->lefiPin::antennaDiffAreaLayer(i)); + fprintf(fout, ";\n"); + } + } + + for (j = 0; j < pin->lefiPin::numAntennaModel(); j++) { + aModel = pin->lefiPin::antennaModel(j); + + fprintf(fout, " ANTENNAMODEL %s ;\n", + aModel->lefiPinAntennaModel::antennaOxide()); + + if (aModel->lefiPinAntennaModel::hasAntennaGateArea()) { + for (i = 0; i < aModel->lefiPinAntennaModel::numAntennaGateArea(); i++) + { + fprintf(fout, " ANTENNAGATEAREA %g ", + aModel->lefiPinAntennaModel::antennaGateArea(i)); + if (aModel->lefiPinAntennaModel::antennaGateAreaLayer(i)) + fprintf(fout, "LAYER %s ", + aModel->lefiPinAntennaModel::antennaGateAreaLayer(i)); + fprintf(fout, ";\n"); + } + } + + if (aModel->lefiPinAntennaModel::hasAntennaMaxAreaCar()) { + for (i = 0; i < aModel->lefiPinAntennaModel::numAntennaMaxAreaCar(); + i++) { + fprintf(fout, " ANTENNAMAXAREACAR %g ", + aModel->lefiPinAntennaModel::antennaMaxAreaCar(i)); + if (aModel->lefiPinAntennaModel::antennaMaxAreaCarLayer(i)) + fprintf(fout, "LAYER %s ", + aModel->lefiPinAntennaModel::antennaMaxAreaCarLayer(i)); + fprintf(fout, ";\n"); + } + } + + if (aModel->lefiPinAntennaModel::hasAntennaMaxSideAreaCar()) { + for (i = 0; i < aModel->lefiPinAntennaModel::numAntennaMaxSideAreaCar(); + i++) { + fprintf(fout, " ANTENNAMAXSIDEAREACAR %g ", + aModel->lefiPinAntennaModel::antennaMaxSideAreaCar(i)); + if (aModel->lefiPinAntennaModel::antennaMaxSideAreaCarLayer(i)) + fprintf(fout, "LAYER %s ", + aModel->lefiPinAntennaModel::antennaMaxSideAreaCarLayer(i)); + fprintf(fout, ";\n"); + } + } + + if (aModel->lefiPinAntennaModel::hasAntennaMaxCutCar()) { + for (i = 0; i < aModel->lefiPinAntennaModel::numAntennaMaxCutCar(); i++) + { + fprintf(fout, " ANTENNAMAXCUTCAR %g ", + aModel->lefiPinAntennaModel::antennaMaxCutCar(i)); + if (aModel->lefiPinAntennaModel::antennaMaxCutCarLayer(i)) + fprintf(fout, "LAYER %s ", + aModel->lefiPinAntennaModel::antennaMaxCutCarLayer(i)); + fprintf(fout, ";\n"); + } + } + } + + if (pin->lefiPin::numProperties() > 0) { + fprintf(fout, " PROPERTY "); + for (i = 0; i < pin->lefiPin::numProperties(); i++) { + // value can either be a string or number + if (pin->lefiPin::propValue(i)) { + fprintf(fout, "%s %s ", pin->lefiPin::propName(i), + pin->lefiPin::propValue(i)); + } + else + fprintf(fout, "%s %g ", pin->lefiPin::propName(i), + pin->lefiPin::propNum(i)); + switch (pin->lefiPin::propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + fprintf(fout, ";\n"); + } + + numPorts = pin->lefiPin::numPorts(); + for (i = 0; i < numPorts; i++) { + fprintf(fout," PORT\n"); + geometry = pin->lefiPin::port(i); + prtGeometry(geometry); + fprintf(fout, " END\n"); + } + fprintf(fout, " END %s\n", pin->lefiPin::name()); + return 0; +} + +int densityCB(lefrCallbackType_e c, lefiDensity* density, + lefiUserData) { + + struct lefiGeomRect rect; + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, " DENSITY\n"); + for (int i = 0; i < density->lefiDensity::numLayer(); i++) { + fprintf(fout, " LAYER %s ;\n", density->lefiDensity::layerName(i)); + for (int j = 0; j < density->lefiDensity::numRects(i); j++) { + rect = density->lefiDensity::getRect(i,j); + fprintf(fout, " RECT %g %g %g %g ", rect.xl, rect.yl, rect.xh, + rect.yh); + fprintf(fout, "%g ;\n", density->lefiDensity::densityValue(i,j)); + } + } + fprintf(fout, " END\n"); + return 0; +} + +int propDefBeginCB(lefrCallbackType_e c, void*, lefiUserData) { + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "PROPERTYDEFINITIONS\n"); + return 0; +} + +int propDefCB(lefrCallbackType_e c, lefiProp* prop, lefiUserData) { + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, " %s %s", prop->lefiProp::propType(), + prop->lefiProp::propName()); + switch(prop->lefiProp::dataType()) { + case 'I': + fprintf(fout, " INTEGER"); + break; + case 'R': + fprintf(fout, " REAL"); + break; + case 'S': + fprintf(fout, " STRING"); + break; + } + if (prop->lefiProp::hasNumber()) + fprintf(fout, " %g", prop->lefiProp::number()); + if (prop->lefiProp::hasRange()) + fprintf(fout, " RANGE %g %g", prop->lefiProp::left(), + prop->lefiProp::right()); + if (prop->lefiProp::hasString()) + fprintf(fout, " %s", prop->lefiProp::string()); + fprintf(fout, "\n"); + return 0; +} + +int propDefEndCB(lefrCallbackType_e c, void*, lefiUserData) { + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "END PROPERTYDEFINITIONS\n"); + return 0; +} + +int siteCB(lefrCallbackType_e c, lefiSite* site, lefiUserData) { + int hasPrtSym = 0; + int i; + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "SITE %s\n", site->lefiSite::name()); + if (site->lefiSite::hasClass()) + fprintf(fout, " CLASS %s ;\n", site->lefiSite::siteClass()); + if (site->lefiSite::hasXSymmetry()) { + fprintf(fout, " SYMMETRY X "); + hasPrtSym = 1; + } + if (site->lefiSite::hasYSymmetry()) { + if (hasPrtSym) + fprintf(fout, "Y "); + else { + fprintf(fout, " SYMMETRY Y "); + hasPrtSym = 1; + } + } + if (site->lefiSite::has90Symmetry()) { + if (hasPrtSym) + fprintf(fout, "R90 "); + else { + fprintf(fout, " SYMMETRY R90 "); + hasPrtSym = 1; + } + } + if (hasPrtSym) + fprintf(fout, ";\n"); + if (site->lefiSite::hasSize()) + fprintf(fout, " SIZE %g BY %g ;\n", site->lefiSite::sizeX(), + site->lefiSite::sizeY()); + + if (site->hasRowPattern()) { + fprintf(fout, " ROWPATTERN "); + for (i = 0; i < site->lefiSite::numSites(); i++) + fprintf(fout, " %s %s ", site->lefiSite::siteName(i), + site->lefiSite::siteOrientStr(i)); + fprintf(fout, ";\n"); + } + + fprintf(fout, "END %s\n", site->lefiSite::name()); + return 0; +} + +int spacingBeginCB(lefrCallbackType_e c, void*, lefiUserData){ + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "SPACING\n"); + return 0; +} + +int spacingCB(lefrCallbackType_e c, lefiSpacing* spacing, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + lefSpacing(spacing); + return 0; +} + +int spacingEndCB(lefrCallbackType_e c, void*, lefiUserData){ + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "END SPACING\n"); + return 0; +} + +int timingCB(lefrCallbackType_e c, lefiTiming* timing, lefiUserData) { + int i; + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "TIMING\n"); + for (i = 0; i < timing->numFromPins(); i++) + fprintf(fout, " FROMPIN %s ;\n", timing->fromPin(i)); + for (i = 0; i < timing->numToPins(); i++) + fprintf(fout, " TOPIN %s ;\n", timing->toPin(i)); + fprintf(fout, " RISE SLEW1 %g %g %g %g ;\n", timing->riseSlewOne(), + timing->riseSlewTwo(), timing->riseSlewThree(), + timing->riseSlewFour()); + if (timing->hasRiseSlew2()) + fprintf(fout, " RISE SLEW2 %g %g %g ;\n", timing->riseSlewFive(), + timing->riseSlewSix(), timing->riseSlewSeven()); + if (timing->hasFallSlew()) + fprintf(fout, " FALL SLEW1 %g %g %g %g ;\n", timing->fallSlewOne(), + timing->fallSlewTwo(), timing->fallSlewThree(), + timing->fallSlewFour()); + if (timing->hasFallSlew2()) + fprintf(fout, " FALL SLEW2 %g %g %g ;\n", timing->fallSlewFive(), + timing->fallSlewSix(), timing->riseSlewSeven()); + if (timing->hasRiseIntrinsic()) { + fprintf(fout, "TIMING RISE INTRINSIC %g %g ;\n", + timing->riseIntrinsicOne(), timing->riseIntrinsicTwo()); + fprintf(fout, "TIMING RISE VARIABLE %g %g ;\n", + timing->riseIntrinsicThree(), timing->riseIntrinsicFour()); + } + if (timing->hasFallIntrinsic()) { + fprintf(fout, "TIMING FALL INTRINSIC %g %g ;\n", + timing->fallIntrinsicOne(), timing->fallIntrinsicTwo()); + fprintf(fout, "TIMING RISE VARIABLE %g %g ;\n", + timing->fallIntrinsicThree(), timing->fallIntrinsicFour()); + } + if (timing->hasRiseRS()) + fprintf(fout, "TIMING RISERS %g %g ;\n", + timing->riseRSOne(), timing->riseRSTwo()); + if (timing->hasRiseCS()) + fprintf(fout, "TIMING RISECS %g %g ;\n", + timing->riseCSOne(), timing->riseCSTwo()); + if (timing->hasFallRS()) + fprintf(fout, "TIMING FALLRS %g %g ;\n", + timing->fallRSOne(), timing->fallRSTwo()); + if (timing->hasFallCS()) + fprintf(fout, "TIMING FALLCS %g %g ;\n", + timing->fallCSOne(), timing->fallCSTwo()); + if (timing->hasUnateness()) + fprintf(fout, "TIMING UNATENESS %s ;\n", timing->unateness()); + if (timing->hasRiseAtt1()) + fprintf(fout, "TIMING RISESATT1 %g %g ;\n", timing->riseAtt1One(), + timing->riseAtt1Two()); + if (timing->hasFallAtt1()) + fprintf(fout, "TIMING FALLSATT1 %g %g ;\n", timing->fallAtt1One(), + timing->fallAtt1Two()); + if (timing->hasRiseTo()) + fprintf(fout, "TIMING RISET0 %g %g ;\n", timing->riseToOne(), + timing->riseToTwo()); + if (timing->hasFallTo()) + fprintf(fout, "TIMING FALLT0 %g %g ;\n", timing->fallToOne(), + timing->fallToTwo()); + if (timing->hasSDFonePinTrigger()) + fprintf(fout, " %s TABLEDIMENSION %g %g %g ;\n", + timing->SDFonePinTriggerType(), timing->SDFtriggerOne(), + timing->SDFtriggerTwo(), timing->SDFtriggerThree()); + if (timing->hasSDFtwoPinTrigger()) + fprintf(fout, " %s %s %s TABLEDIMENSION %g %g %g ;\n", + timing->SDFtwoPinTriggerType(), timing->SDFfromTrigger(), + timing->SDFtoTrigger(), timing->SDFtriggerOne(), + timing->SDFtriggerTwo(), timing->SDFtriggerThree()); + fprintf(fout, "END TIMING\n"); + return 0; +} + +int unitsCB(lefrCallbackType_e c, lefiUnits* unit, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "UNITS\n"); + if (unit->lefiUnits::hasDatabase()) + fprintf(fout, " DATABASE %s %g ;\n", unit->lefiUnits::databaseName(), + unit->lefiUnits::databaseNumber()); + if (unit->lefiUnits::hasCapacitance()) + fprintf(fout, " CAPACITANCE PICOFARADS %g ;\n", + unit->lefiUnits::capacitance()); + if (unit->lefiUnits::hasResistance()) + fprintf(fout, " RESISTANCE OHMS %g ;\n", unit->lefiUnits::resistance()); + if (unit->lefiUnits::hasPower()) + fprintf(fout, " POWER MILLIWATTS %g ;\n", unit->lefiUnits::power()); + if (unit->lefiUnits::hasCurrent()) + fprintf(fout, " CURRENT MILLIAMPS %g ;\n", unit->lefiUnits::current()); + if (unit->lefiUnits::hasVoltage()) + fprintf(fout, " VOLTAGE VOLTS %g ;\n", unit->lefiUnits::voltage()); + if (unit->lefiUnits::hasFrequency()) + fprintf(fout, " FREQUENCY MEGAHERTZ %g ;\n", + unit->lefiUnits::frequency()); + fprintf(fout, "END UNITS\n"); + return 0; +} + +int useMinSpacingCB(lefrCallbackType_e c, lefiUseMinSpacing* spacing, + lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "USEMINSPACING %s ", spacing->lefiUseMinSpacing::name()); + if (spacing->lefiUseMinSpacing::value()) + fprintf(fout, "ON ;\n"); + else + fprintf(fout, "OFF ;\n"); + return 0; +} + +int versionCB(lefrCallbackType_e c, double num, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "VERSION %g ;\n", num); + return 0; +} + +int versionStrCB(lefrCallbackType_e c, const char* versionName, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "VERSION %s ;\n", versionName); + return 0; +} + +int viaCB(lefrCallbackType_e c, lefiVia* via, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + lefVia(via); + return 0; +} + +int viaRuleCB(lefrCallbackType_e c, lefiViaRule* viaRule, lefiUserData) { + int numLayers, numVias, i; + lefiViaRuleLayer* vLayer; + + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "VIARULE %s", viaRule->lefiViaRule::name()); + if (viaRule->lefiViaRule::hasGenerate()) + fprintf(fout, " GENERATE"); + if (viaRule->lefiViaRule::hasDefault()) + fprintf(fout, " DEFAULT"); + fprintf(fout, "\n"); + + numLayers = viaRule->lefiViaRule::numLayers(); + // if numLayers == 2, it is VIARULE without GENERATE and has via name + // if numLayers == 3, it is VIARULE with GENERATE, and the 3rd layer is cut + for (i = 0; i < numLayers; i++) { + vLayer = viaRule->lefiViaRule::layer(i); + lefViaRuleLayer(vLayer); + } + + if (numLayers == 2 && !(viaRule->lefiViaRule::hasGenerate())) { + // should have vianames + numVias = viaRule->lefiViaRule::numVias(); + if (numVias == 0) + fprintf(fout, "Should have via names in VIARULE.\n"); + else { + for (i = 0; i < numVias; i++) + fprintf(fout, " VIA %s ;\n", viaRule->lefiViaRule::viaName(i)); + } + } + if (viaRule->lefiViaRule::numProps() > 0) { + fprintf(fout, " PROPERTY "); + for (i = 0; i < viaRule->lefiViaRule::numProps(); i++) { + fprintf(fout, "%s ", viaRule->lefiViaRule::propName(i)); + if (viaRule->lefiViaRule::propValue(i)) + fprintf(fout, "%s ", viaRule->lefiViaRule::propValue(i)); + switch (viaRule->lefiViaRule::propType(i)) { + case 'R': fprintf(fout, "REAL "); + break; + case 'I': fprintf(fout, "INTEGER "); + break; + case 'S': fprintf(fout, "STRING "); + break; + case 'Q': fprintf(fout, "QUOTESTRING "); + break; + case 'N': fprintf(fout, "NUMBER "); + break; + } + } + fprintf(fout, ";\n"); + } + fprintf(fout, "END %s\n", viaRule->lefiViaRule::name()); + return 0; +} + +int extensionCB(lefrCallbackType_e c, const char* extsn, lefiUserData) { + checkType(c); + // lefrSetCaseSensitivity(0); + // if ((long)ud != userData) dataError(); + fprintf(fout, "BEGINEXT %s ;\n", extsn); + // lefrSetCaseSensitivity(1); + return 0; +} + +int doneCB(lefrCallbackType_e c, void*, lefiUserData) { + checkType(c); + // if ((long)ud != userData) dataError(); + fprintf(fout, "END LIBRARY\n"); + return 0; +} + +void errorCB(const char* msg) { + printf ("%s : %s\n", lefrGetUserData(), msg); +} + +void warningCB(const char* msg) { + printf ("%s : %s\n", lefrGetUserData(), msg); +} + +void* mallocCB(int size) { + return malloc(size); +} + +void* reallocCB(void* name, int size) { + return realloc(name, size); +} + +void freeCB(void* name) { + free(name); + return; +} + +void lineNumberCB(int lineNo) { + fprintf(fout, "Parsed %d number of lines!!\n", lineNo); + return; +} + +void printWarning(const char *str) +{ + fprintf(stderr, "%s\n", str); +} + + + +int +main(int argc, char** argv) { + char* inFile[100]; + char* outFile; + FILE* f; + int res; + int noCalls = 0; +// long start_mem; + int num; + int status; + int retStr = 0; + int numInFile = 0; + int fileCt = 0; + int relax = 0; + const char* version = "N/A"; + int setVer = 0; + char* userData; + int msgCb = 0; + int test1 = 0; + int test2 = 0; + int ccr749853 = 0; + int ccr1688946 = 0; + int ccr1709089 = 0; + int verbose = 0; + +// start_mem = (long)sbrk(0); + + userData = strdup ("(lefrw-5100)"); + strcpy(defaultName,"lef.in"); + strcpy(defaultOut,"list"); + inFile[0] = defaultName; + outFile = defaultOut; + fout = stdout; +// userData = 0x01020304; + +#ifdef WIN32 + // Enable two-digit exponent format + _set_output_format(_TWO_DIGIT_EXPONENT); +#endif + + argc--; + argv++; + while (argc--) { + + if (strcmp(*argv, "-d") == 0) { + argv++; + argc--; + sscanf(*argv, "%d", &num); + lefiSetDebug(num, 1); + }else if (strcmp(*argv, "-nc") == 0) { + noCalls = 1; + + } else if (strcmp(*argv, "-p") == 0) { + printing = 1; + + } else if (strcmp(*argv, "-m") == 0) { // use the user error/warning CB + msgCb = 1; + + } else if (strcmp(*argv, "-o") == 0) { + argv++; + argc--; + outFile = *argv; + if ((fout = fopen(outFile, "w")) == 0) { + fprintf(stderr, "ERROR: could not open output file\n"); + return 2; + } + + } else if (strcmp(*argv, "-verStr") == 0) { + /* New to set the version callback routine to return a string */ + /* instead of double. */ + retStr = 1; + + } else if (strcmp(*argv, "-relax") == 0) { + relax = 1; + + } else if (strcmp(*argv, "-65nm") == 0) { + parse65nm = 1; + + } else if (strcmp(*argv, "-lef58") == 0) { + parseLef58Type = 1; + + } else if (strcmp(*argv, "-ver") == 0) { + argv++; + argc--; + setVer = 1; + version = *argv; + } else if (strcmp(*argv, "-test1") == 0) { + test1 = 1; + } else if (strcmp(*argv, "-test2") == 0) { + test2 = 1; + } else if (strcmp(*argv, "-sessionless") == 0) { + isSessionles = 1; + } else if (strcmp(*argv, "-ccr749853") == 0) { + ccr749853 = 1; + } else if (strcmp(*argv, "-ccr1688946") == 0) { + ccr1688946 = 1; + } else if (strcmp(*argv, "-ccr1709089") == 0) { + ccr1709089 = 1; + } else if (argv[0][0] != '-') { + if (numInFile >= 100) { + fprintf(stderr, "ERROR: too many input files, max = 3.\n"); + return 2; + } + inFile[numInFile++] = *argv; + + } else { + fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv); + return 2; + } + + argv++; + } + + // sets the parser to be case sensitive... + // default was supposed to be the case but false... + // lefrSetCaseSensitivity(true); + if (isSessionles) { + lefrSetOpenLogFileAppend(); + } + + lefrInitSession(isSessionles ? 0 : 1); + + if (noCalls == 0) { + lefrSetWarningLogFunction(printWarning); + lefrSetAntennaInputCbk(antennaCB); + lefrSetAntennaInoutCbk(antennaCB); + lefrSetAntennaOutputCbk(antennaCB); + lefrSetArrayBeginCbk(arrayBeginCB); + lefrSetArrayCbk(arrayCB); + lefrSetArrayEndCbk(arrayEndCB); + lefrSetBusBitCharsCbk(busBitCharsCB); + lefrSetCaseSensitiveCbk(caseSensCB); + lefrSetFixedMaskCbk(fixedMaskCB); + lefrSetClearanceMeasureCbk(clearanceCB); + lefrSetDensityCbk(densityCB); + lefrSetDividerCharCbk(dividerCB); + lefrSetNoWireExtensionCbk(noWireExtCB); + lefrSetNoiseMarginCbk(noiseMarCB); + lefrSetEdgeRateThreshold1Cbk(edge1CB); + lefrSetEdgeRateThreshold2Cbk(edge2CB); + lefrSetEdgeRateScaleFactorCbk(edgeScaleCB); + lefrSetExtensionCbk(extensionCB); + lefrSetNoiseTableCbk(noiseTableCB); + lefrSetCorrectionTableCbk(correctionCB); + lefrSetDielectricCbk(dielectricCB); + lefrSetIRDropBeginCbk(irdropBeginCB); + lefrSetIRDropCbk(irdropCB); + lefrSetIRDropEndCbk(irdropEndCB); + lefrSetLayerCbk(layerCB); + lefrSetLibraryEndCbk(doneCB); + lefrSetMacroBeginCbk(macroBeginCB); + lefrSetMacroCbk(macroCB); + lefrSetMacroClassTypeCbk(macroClassTypeCB); + lefrSetMacroOriginCbk(macroOriginCB); + lefrSetMacroSizeCbk(macroSizeCB); + lefrSetMacroFixedMaskCbk(macroFixedMaskCB); + lefrSetMacroEndCbk(macroEndCB); + lefrSetManufacturingCbk(manufacturingCB); + lefrSetMaxStackViaCbk(maxStackViaCB); + lefrSetMinFeatureCbk(minFeatureCB); + lefrSetNonDefaultCbk(nonDefaultCB); + lefrSetObstructionCbk(obstructionCB); + lefrSetPinCbk(pinCB); + lefrSetPropBeginCbk(propDefBeginCB); + lefrSetPropCbk(propDefCB); + lefrSetPropEndCbk(propDefEndCB); + lefrSetSiteCbk(siteCB); + lefrSetSpacingBeginCbk(spacingBeginCB); + lefrSetSpacingCbk(spacingCB); + lefrSetSpacingEndCbk(spacingEndCB); + lefrSetTimingCbk(timingCB); + lefrSetUnitsCbk(unitsCB); + lefrSetUseMinSpacingCbk(useMinSpacingCB); + lefrSetUserData((void*)3); + if (!retStr) + lefrSetVersionCbk(versionCB); + else + lefrSetVersionStrCbk(versionStrCB); + lefrSetViaCbk(viaCB); + lefrSetViaRuleCbk(viaRuleCB); + lefrSetInputAntennaCbk(antennaCB); + lefrSetOutputAntennaCbk(antennaCB); + lefrSetInoutAntennaCbk(antennaCB); + + if (msgCb) { + lefrSetLogFunction(errorCB); + lefrSetWarningLogFunction(warningCB); + } + + lefrSetMallocFunction(mallocCB); + lefrSetReallocFunction(reallocCB); + lefrSetFreeFunction(freeCB); + + lefrSetLineNumberFunction(lineNumberCB); + lefrSetDeltaNumberLines(50); + + lefrSetRegisterUnusedCallbacks(); + + if (relax) + lefrSetRelaxMode(); + + if (setVer) + (void)lefrSetVersionValue(version); + + lefrSetAntennaInoutWarnings(30); + lefrSetAntennaInputWarnings(30); + lefrSetAntennaOutputWarnings(30); + lefrSetArrayWarnings(30); + lefrSetCaseSensitiveWarnings(30); + lefrSetCorrectionTableWarnings(30); + lefrSetDielectricWarnings(30); + lefrSetEdgeRateThreshold1Warnings(30); + lefrSetEdgeRateThreshold2Warnings(30); + lefrSetEdgeRateScaleFactorWarnings(30); + lefrSetInoutAntennaWarnings(30); + lefrSetInputAntennaWarnings(30); + lefrSetIRDropWarnings(30); + lefrSetLayerWarnings(30); + lefrSetMacroWarnings(30); + lefrSetMaxStackViaWarnings(30); + lefrSetMinFeatureWarnings(30); + lefrSetNoiseMarginWarnings(30); + lefrSetNoiseTableWarnings(30); + lefrSetNonDefaultWarnings(30); + lefrSetNoWireExtensionWarnings(30); + lefrSetOutputAntennaWarnings(30); + lefrSetPinWarnings(30); + lefrSetSiteWarnings(30); + lefrSetSpacingWarnings(30); + lefrSetTimingWarnings(30); + lefrSetUnitsWarnings(30); + lefrSetUseMinSpacingWarnings(30); + lefrSetViaRuleWarnings(30); + lefrSetViaWarnings(30); + } + + (void) lefrSetShiftCase(); // will shift name to uppercase if caseinsensitive + // is set to off or not set + if (!isSessionles) { + lefrSetOpenLogFileAppend(); + } + + if (ccr749853) { + lefrSetTotalMsgLimit (5); + lefrSetLimitPerMsg (1618, 2); + } + + if (ccr1688946) { + lefrRegisterLef58Type("XYZ", "CUT"); + lefrRegisterLef58Type("XYZ", "CUT"); + } + + if (test1) { // for special tests + for (fileCt = 0; fileCt < numInFile; fileCt++) { + lefrReset(); + + if ((f = fopen(inFile[fileCt],"r")) == 0) { + fprintf(stderr,"Couldn't open input file '%s'\n", inFile[fileCt]); + return(2); + } + + (void)lefrEnableReadEncrypted(); + + status = lefwInit(fout); // initialize the lef writer, + // need to be called 1st + if (status != LEFW_OK) + return 1; + + res = lefrRead(f, inFile[fileCt], (void*)userData); + + if (res) + fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]); + + (void)lefrPrintUnusedCallbacks(fout); + (void)lefrReleaseNResetMemory(); + //(void)lefrUnsetCallbacks(); + (void)lefrUnsetLayerCbk(); + (void)lefrUnsetNonDefaultCbk(); + (void)lefrUnsetViaCbk(); + + } + } + else if (test2) { // for special tests + // this test is design to test the 3 APIs, lefrDisableParserMsgs, + // lefrEnableParserMsgs & lefrEnableAllMsgs + // It uses the file ccr566209.lef. This file will parser 3 times + // 1st it will have lefrDisableParserMsgs set to both 2007 & 2008 + // 2nd will enable 2007 by calling lefrEnableParserMsgs + // 3rd enable all msgs by call lefrEnableAllMsgs + + int nMsgs = 3; + int dMsgs[3]; + if (numInFile != 1) { + fprintf(stderr,"Test 2 mode needs only 1 file\n"); + return 2; + } + + for (int idx=0; idx<5; idx++) { + if (idx == 0) { // msgs 2005 & 2011 + fprintf(stderr,"\nPass 0: Disabling 2007, 2008, 2009\n"); + dMsgs[0] = 2007; + dMsgs[1] = 2008; + dMsgs[2] = 2009; + lefrDisableParserMsgs (3, (int*)dMsgs); + } else if (idx == 1) { // msgs 2007 & 2005, 2011 did not print because + fprintf(stderr,"\nPass 1: Enable 2007\n"); + dMsgs[0] = 2007; // lefrUnsetLayerCbk() was called + lefrEnableParserMsgs (1, (int*)dMsgs); + } else if (idx == 2) { // nothing were printed + fprintf(stderr,"\nPass 2: Disable all\n"); + lefrDisableAllMsgs(); + } else if (idx == 3) { // nothing were printed, lefrDisableParserMsgs + fprintf(stderr,"\nPass 3: Enable All\n"); + lefrEnableAllMsgs(); + } else if (idx == 4) { // msgs 2005 was printed + fprintf(stderr,"\nPass 4: Set limit on 2007 up 2\n"); + lefrSetLimitPerMsg (2007, 2); + } + + if ((f = fopen(inFile[fileCt],"r")) == 0) { + fprintf(stderr,"Couldn't open input file '%s'\n", inFile[fileCt]); + return(2); + } + + (void)lefrEnableReadEncrypted(); + + status = lefwInit(fout); // initialize the lef writer, + // need to be called 1st + if (status != LEFW_OK) + return 1; + + res = lefrRead(f, inFile[fileCt], (void*)userData); + + if (res) + fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]); + + (void)lefrPrintUnusedCallbacks(fout); + (void)lefrReleaseNResetMemory(); + //(void)lefrUnsetCallbacks(); + (void)lefrUnsetLayerCbk(); + (void)lefrUnsetNonDefaultCbk(); + (void)lefrUnsetViaCbk(); + + } + } else { + for (fileCt = 0; fileCt < numInFile; fileCt++) { + lefrReset(); + + if ((f = fopen(inFile[fileCt],"r")) == 0) { + fprintf(stderr,"Couldn't open input file '%s'\n", inFile[fileCt]); + return(2); + } + + (void)lefrEnableReadEncrypted(); + + status = lefwInit(fout); // initialize the lef writer, + // need to be called 1st + if (status != LEFW_OK) + return 1; + + if (ccr1709089) { + // CCR 1709089 test. + // Non-initialized lefData case. + lefrSetLimitPerMsg(10000, 10000); + } + + res = lefrRead(f, inFile[fileCt], (void*)userData); + + if (ccr1709089) { + // CCR 1709089 test. + // Initialized lefData case. + lefrSetLimitPerMsg(10000, 10000); + } + + if (res) + fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]); + + (void)lefrPrintUnusedCallbacks(fout); + (void)lefrReleaseNResetMemory(); + + } + (void)lefrUnsetCallbacks(); + } + // Unset all the callbacks + void lefrUnsetAntennaInputCbk(); + void lefrUnsetAntennaInoutCbk(); + void lefrUnsetAntennaOutputCbk(); + void lefrUnsetArrayBeginCbk(); + void lefrUnsetArrayCbk(); + void lefrUnsetArrayEndCbk(); + void lefrUnsetBusBitCharsCbk(); + void lefrUnsetCaseSensitiveCbk(); + void lefrUnsetFixedMaskCbk(); + void lefrUnsetClearanceMeasureCbk(); + void lefrUnsetCorrectionTableCbk(); + void lefrUnsetDensityCbk(); + void lefrUnsetDielectricCbk(); + void lefrUnsetDividerCharCbk(); + void lefrUnsetEdgeRateScaleFactorCbk(); + void lefrUnsetEdgeRateThreshold1Cbk(); + void lefrUnsetEdgeRateThreshold2Cbk(); + void lefrUnsetExtensionCbk(); + void lefrUnsetInoutAntennaCbk(); + void lefrUnsetInputAntennaCbk(); + void lefrUnsetIRDropBeginCbk(); + void lefrUnsetIRDropCbk(); + void lefrUnsetIRDropEndCbk(); + void lefrUnsetLayerCbk(); + void lefrUnsetLibraryEndCbk(); + void lefrUnsetMacroBeginCbk(); + void lefrUnsetMacroCbk(); + void lefrUnsetMacroClassTypeCbk(); + void lefrUnsetMacroEndCbk(); + void lefrUnsetMacroOriginCbk(); + void lefrUnsetMacroSizeCbk(); + void lefrUnsetManufacturingCbk(); + void lefrUnsetMaxStackViaCbk(); + void lefrUnsetMinFeatureCbk(); + void lefrUnsetNoiseMarginCbk(); + void lefrUnsetNoiseTableCbk(); + void lefrUnsetNonDefaultCbk(); + void lefrUnsetNoWireExtensionCbk(); + void lefrUnsetObstructionCbk(); + void lefrUnsetOutputAntennaCbk(); + void lefrUnsetPinCbk(); + void lefrUnsetPropBeginCbk(); + void lefrUnsetPropCbk(); + void lefrUnsetPropEndCbk(); + void lefrUnsetSiteCbk(); + void lefrUnsetSpacingBeginCbk(); + void lefrUnsetSpacingCbk(); + void lefrUnsetSpacingEndCbk(); + void lefrUnsetTimingCbk(); + void lefrUnsetUseMinSpacingCbk(); + void lefrUnsetUnitsCbk(); + void lefrUnsetVersionCbk(); + void lefrUnsetVersionStrCbk(); + void lefrUnsetViaCbk(); + void lefrUnsetViaRuleCbk(); + + fclose(fout); + + // Release allocated singleton data. + lefrClear(); + + return 0; +} diff --git a/lefdef/src/lef/lefwrite/CMakeLists.txt b/lefdef/src/lef/lefwrite/CMakeLists.txt new file mode 100644 index 00000000..d4cece04 --- /dev/null +++ b/lefdef/src/lef/lefwrite/CMakeLists.txt @@ -0,0 +1,12 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + include_directories ( ${LEFDEF_SOURCE_DIR}/src/lef/lef + ) + + set ( cpps lefwrite.cpp + ) + + add_executable ( lefwrite ${cpps} ) + target_link_libraries ( lefwrite lef ) + + install ( TARGETS lefwrite DESTINATION bin ) diff --git a/lefdef/src/lef/lefwrite/Makefile b/lefdef/src/lef/lefwrite/Makefile new file mode 100644 index 00000000..1ac0a763 --- /dev/null +++ b/lefdef/src/lef/lefwrite/Makefile @@ -0,0 +1,21 @@ +# This make file is for lefwrite.cpp only. lefwrite.cpp is an example +# which calls directly to the defwWrite calls. It does not use the callback +# mechanism. The user is responsible for the correct sequence of the output. +# +# There is another example (lefwriteCbs.cpp) in this directory. This example +# uses the callback mechanism. The user does not have to worry about the +# correct sequence of the lef output file. +# To compile lefwriteCbs.cpp, you need to create another Makefile which +# is identical to this one, but change the line: +# BINSRCS = lefwriteCbs.o + +FAKE_ALL: all + +LIBTARGET = +BINTARGET = lefwrite + +LDLIBS = ../lib/liblef.a + +BINSRCS = lefwrite.cpp + +include ../template.mk diff --git a/lefdef/src/lef/lefwrite/lefwrite.cpp b/lefdef/src/lef/lefwrite/lefwrite.cpp new file mode 100644 index 00000000..6e4e353b --- /dev/null +++ b/lefdef/src/lef/lefwrite/lefwrite.cpp @@ -0,0 +1,2116 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012 - 2017, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#ifndef WIN32 +# include +#endif /* not WIN32 */ +#include "lefwWriter.hpp" + +char defaultOut[128]; + +// Global variables +FILE* fout; + +#define CHECK_STATUS(status) \ + if (status) { \ + lefwPrintError(status); \ + return(status); \ + } + +int main(int argc, char** argv) { + char* outfile; + int status; // return code, if none 0 means error + int lineNum = 0; + + // assign the default + strcpy(defaultOut, "lef.in"); + outfile = defaultOut; + fout = stdout; + + double *xpath; + double *ypath; + double *xl; + double *yl; + double *wthn, *spng; + int *aspc; + int encrypt = 0; + +#ifdef WIN32 + // Enable two-digit exponent format + _set_output_format(_TWO_DIGIT_EXPONENT); +#endif + + argc--; + argv++; + while (argc--) { + if (strcmp(*argv, "-o") == 0) { // output filename + argv++; + argc--; + outfile = *argv; + if ((fout = fopen(outfile, "w")) == 0) { + fprintf(stderr, "ERROR: could not open output file\n"); + return 2; + } + } else if (strncmp(*argv, "-h", 2) == 0) { // compare with -h[elp] + fprintf(stderr, "Usage: lefwrite [-o ] [-e] [-help]\n"); + return 1; + } else if (strncmp(*argv, "-e", 2) == 0) { // compare with -e[ncrypt] + encrypt = 1; + } else { + fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv); + return 2; + } + argv++; + } + + // initalize + status = lefwInit(fout); + CHECK_STATUS(status); + + // set to write an encrypted file + if (encrypt) { + status = lefwEncrypt(); + CHECK_STATUS(status); + } + + status = lefwVersion(5, 8); + CHECK_STATUS(status); +// status = lefwCaseSensitive("ON"); 5.6 +// CHECK_STATUS(status); +// status = lefwNoWireExtensionAtPin("ON"); 5.6 +// CHECK_STATUS(status); + status = lefwBusBitChars("<>"); + CHECK_STATUS(status); + status = lefwDividerChar(":"); + CHECK_STATUS(status); + status = lefwManufacturingGrid(3.5); + CHECK_STATUS(status); + status = lefwFixedMask(); + CHECK_STATUS(status); + status = lefwUseMinSpacing("OBS", "OFF"); + CHECK_STATUS(status); +// status = lefwUseMinSpacing("PIN", "ON"); 5.6 +// CHECK_STATUS(status); + status = lefwClearanceMeasure("EUCLIDEAN"); + CHECK_STATUS(status); + // status = lefwClearanceMeasure("MAXXY"); 5.6 + // CHECK_STATUS(status); + status = lefwNewLine(); + CHECK_STATUS(status); + + // 5.4 ANTENNA + status = lefwAntennaInputGateArea(45); + CHECK_STATUS(status); + status = lefwAntennaInOutDiffArea(65); + CHECK_STATUS(status); + status = lefwAntennaOutputDiffArea(55); + CHECK_STATUS(status); + status = lefwNewLine(); + CHECK_STATUS(status); + + // UNITS + status = lefwStartUnits(); + CHECK_STATUS(status); + status = lefwUnits(100, 10, 10000, 10000, 10000, 1000, 20000); + CHECK_STATUS(status); + status = lefwUnitsFrequency(10); + CHECK_STATUS(status); + status = lefwEndUnits(); + CHECK_STATUS(status); + + // PROPERTYDEFINITIONS + status = lefwStartPropDef(); + CHECK_STATUS(status); + status = lefwStringPropDef("LIBRARY", "NAME", 0, 0, "Cadence96"); + CHECK_STATUS(status); + status = lefwIntPropDef("LIBRARY", "intNum", 0, 0, 20); + CHECK_STATUS(status); + status = lefwRealPropDef("LIBRARY", "realNum", 0, 0, 21.22); + CHECK_STATUS(status); + status = lefwStringPropDef("PIN", "TYPE", 0, 0, 0); + CHECK_STATUS(status); + status = lefwIntPropDef("PIN", "intProp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwRealPropDef("PIN", "realProp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwStringPropDef("MACRO", "stringProp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwIntPropDef("MACRO", "integerProp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwRealPropDef("MACRO", "WEIGHT", 1.0, 100.0, 0); + CHECK_STATUS(status); + status = lefwStringPropDef("VIA", "stringProperty", 0, 0, 0); + CHECK_STATUS(status); + status = lefwRealPropDef("VIA", "realProp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwIntPropDef("VIA", "COUNT", 1, 100, 0); + CHECK_STATUS(status); + status = lefwStringPropDef("LAYER", "lsp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwIntPropDef("LAYER", "lip", 0, 0, 0); + CHECK_STATUS(status); + status = lefwRealPropDef("LAYER", "lrp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwStringPropDef("VIARULE", "vrsp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwRealPropDef("VIARULE", "vrip", 0, 0, 0); + CHECK_STATUS(status); + status = lefwIntPropDef("VIARULE", "vrrp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwStringPropDef("NONDEFAULTRULE", "ndrsp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwIntPropDef("NONDEFAULTRULE", "ndrip", 0, 0, 0); + CHECK_STATUS(status); + status = lefwRealPropDef("NONDEFAULTRULE", "ndrrp", 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndPropDef(); + CHECK_STATUS(status); + + // LAYERS + double *current; + double *diffs; + double *ratios; + double *area; + double *width; + + current = (double*)malloc(sizeof(double)*15); + diffs = (double*)malloc(sizeof(double)*15); + ratios = (double*)malloc(sizeof(double)*15); + + status = lefwStartLayer("POLYS", "MASTERSLICE"); + CHECK_STATUS(status); + status = lefwStringProperty("lsp", "top"); + CHECK_STATUS(status); + status = lefwIntProperty("lip", 1); + CHECK_STATUS(status); + status = lefwRealProperty("lrp", 2.3); + CHECK_STATUS(status); + status = lefwEndLayer("POLYS"); + CHECK_STATUS(status); + + status = lefwStartLayer("CUT01", "CUT"); + CHECK_STATUS(status); + status = lefwLayerDCCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 2.0; + current[1] = 5.0; + current[2] = 10.0; + status = lefwLayerDCCutarea(3, current); + CHECK_STATUS(status); + current[0] = 0.6E-6; + current[1] = 0.5E-6; + current[2] = 0.4E-6; + status = lefwLayerDCTableEntries(3, current); + CHECK_STATUS(status); + status = lefwEndLayer("CUT01"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("RX"); + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 1); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingDiagPitch(1.5); + CHECK_STATUS(status); + status = lefwLayerRoutingDiagWidth(1.0); + CHECK_STATUS(status); + status = lefwLayerRoutingDiagSpacing(0.05); + CHECK_STATUS(status); + status = lefwLayerRoutingDiagMinEdgeLength(0.07); + CHECK_STATUS(status); + status = lefwLayerRoutingArea(34.1); + CHECK_STATUS(status); + xl = (double*)malloc(sizeof(double)*2); + yl = (double*)malloc(sizeof(double)*2); + xl[0] = 0.14; + yl[0] = 0.30; + xl[1] = 0.08; + yl[1] = 0.33; + status = lefwLayerRoutingMinsize(2, xl, yl); + CHECK_STATUS(status); + free((char*)xl); + free((char*)yl); + status = lefwLayerRoutingWireExtension(0.75); + CHECK_STATUS(status); + status = lefwLayerRoutingOffset(0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.6); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingRange(0.1, 9); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.103"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000156"); + CHECK_STATUS(status); + status = lefwLayerRoutingHeight(9); + CHECK_STATUS(status); + status = lefwLayerRoutingThickness(1); + CHECK_STATUS(status); + status = lefwLayerRoutingShrinkage(0.1); + CHECK_STATUS(status); + status = lefwLayerRoutingEdgeCap(0.00005); + CHECK_STATUS(status); + status = lefwLayerRoutingCapMultiplier(1); + CHECK_STATUS(status); + status = lefwLayerRoutingMinwidth(0.15); + CHECK_STATUS(status); + status = lefwLayerRoutingAntennaArea(1); + CHECK_STATUS(status); + status = lefwLayerAntennaCumAreaRatio(6.7); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaCumRoutingPlusCut(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaAreaMinusDiff(100.0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaGatePlusDiff(2.0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaCumDiffAreaRatio(1000); // 5.7 + CHECK_STATUS(status); + xl = (double*)malloc(sizeof(double)*5); + yl = (double*)malloc(sizeof(double)*5); + xl[0] = 0.0; + yl[0] = 1.0; + xl[1] = 0.09999; + yl[1] = 1.0; + xl[2] = 0.1; + yl[2] = 0.2; + xl[3] = 1.0; + yl[3] = 0.1; + xl[4] = 100; + yl[4] = 0.1; + status = lefwLayerAntennaAreaDiffReducePwl(5, xl, yl); // 5.7 + CHECK_STATUS(status); + free((char*)xl); + free((char*)yl); + status = lefwLayerAntennaCumDiffAreaRatio(1000); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingAntennaLength(1); + CHECK_STATUS(status); + status = lefwLayerDCCurrentDensity("AVERAGE", 10.0); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("PEAK", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 100E6; + current[2] = 400E6; + status = lefwLayerACFrequency(3, current); + CHECK_STATUS(status); + current[0] = 2.0E-6; + current[1] = 1.9E-6; + current[2] = 1.8E-6; + current[3] = 1.7E-6; + current[4] = 1.5E-6; + current[5] = 1.4E-6; + current[6] = 1.3E-6; + current[7] = 1.2E-6; + current[8] = 1.1E-6; + current[9] = 1.0E-6; + current[10] = 0.9E-6; + current[11] = 0.8E-6; + current[12] = 0.7E-6; + current[13] = 0.6E-6; + current[14] = 0.4E-6; + status = lefwLayerACTableEntries(15, current); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 100E6; + current[2] = 400E6; + status = lefwLayerACFrequency(3, current); + CHECK_STATUS(status); + current[0] = 0.6E-6; + current[1] = 0.5E-6; + current[2] = 0.4E-6; + status = lefwLayerACTableEntries(3, current); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("RMS", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 400E6; + current[2] = 800E6; + status = lefwLayerACFrequency(3, current); + CHECK_STATUS(status); + current[0] = 0.4; + current[1] = 0.8; + current[2] = 10.0; + current[3] = 50.0; + current[4] = 100.0; + status = lefwLayerACWidth(5, current); + CHECK_STATUS(status); + current[0] = 2.0E-6; + current[1] = 1.9E-6; + current[2] = 1.8E-6; + current[3] = 1.7E-6; + current[4] = 1.5E-6; + current[5] = 1.4E-6; + current[6] = 1.3E-6; + current[7] = 1.2E-6; + current[8] = 1.1E-6; + current[9] = 1.0E-6; + current[10] = 0.9E-6; + current[11] = 0.8E-6; + current[12] = 0.7E-6; + current[13] = 0.6E-6; + current[14] = 0.4E-6; + status = lefwLayerACTableEntries(15, current); + CHECK_STATUS(status); + status = lefwEndLayerRouting("RX"); + CHECK_STATUS(status); + + status = lefwStartLayer("CUT12", "CUT"); + CHECK_STATUS(status); + status = lefwLayerCutSpacing(0.7); + CHECK_STATUS(status); + status = lefwLayerCutSpacingLayer("RX", 0); + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); + CHECK_STATUS(status); + status = lefwLayerResistancePerCut(8.0); + CHECK_STATUS(status); + status = lefwLayerCutSpacing(0.22); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingAdjacent(3, 0.25, 0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacing(1.5); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingParallel(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacing(1.2); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingAdjacent(2, 1.5, 0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaModel("OXIDE1"); + CHECK_STATUS(status); + status = lefwLayerAntennaAreaRatio(5.6); + CHECK_STATUS(status); + status = lefwLayerAntennaDiffAreaRatio(6.5); + CHECK_STATUS(status); + status = lefwLayerAntennaAreaFactor(5.4, 0); + CHECK_STATUS(status); + status = lefwLayerAntennaCumDiffAreaRatio(4.5); + CHECK_STATUS(status); + diffs[0] = 5.4; + ratios[0] = 5.4; + diffs[1] = 6.5; + ratios[1] = 6.5; + diffs[2] = 7.5; + ratios[2] = 7.5; + status = lefwLayerAntennaCumDiffAreaRatioPwl(3, diffs, ratios); + CHECK_STATUS(status); + status = lefwLayerAntennaCumAreaRatio(6.7); + CHECK_STATUS(status); + status = lefwLayerAntennaModel("OXIDE2"); + CHECK_STATUS(status); + status = lefwLayerAntennaCumAreaRatio(300); + CHECK_STATUS(status); + status = lefwLayerAntennaCumRoutingPlusCut(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaAreaMinusDiff(100.0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaGatePlusDiff(2.0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaDiffAreaRatio(1000); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaCumDiffAreaRatio(5000); // 5.7 + CHECK_STATUS(status); + xl = (double*)malloc(sizeof(double)*5); + yl = (double*)malloc(sizeof(double)*5); + xl[0] = 0.0; + yl[0] = 1.0; + xl[1] = 0.09999; + yl[1] = 1.0; + xl[2] = 0.1; + yl[2] = 0.2; + xl[3] = 1.0; + yl[3] = 0.1; + xl[4] = 100; + yl[4] = 0.1; + status = lefwLayerAntennaAreaDiffReducePwl(5, xl, yl); // 5.7 + CHECK_STATUS(status); + free((char*)xl); + free((char*)yl); + diffs[0] = 1; + ratios[0] = 4; + diffs[1] = 2; + ratios[1] = 5; + status = lefwLayerAntennaCumDiffAreaRatioPwl(2, diffs, ratios); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("PEAK", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 100E6; + status = lefwLayerACFrequency(2, current); + CHECK_STATUS(status); + current[0] = 0.5E-6; + current[1] = 0.4E-6; + status = lefwLayerACTableEntries(2, current); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 100E6; + status = lefwLayerACFrequency(2, current); + CHECK_STATUS(status); + current[0] = 0.6E-6; + current[1] = 0.5E-6; + status = lefwLayerACTableEntries(2, current); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("RMS", 0); + CHECK_STATUS(status); + current[0] = 100E6; + current[1] = 800E6; + status = lefwLayerACFrequency(2, current); + CHECK_STATUS(status); + current[0] = 0.5E-6; + current[1] = 0.4E-6; + status = lefwLayerACTableEntries(2, current); + CHECK_STATUS(status); + status = lefwEndLayer("CUT12"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("PC"); + CHECK_STATUS(status); + status = lefwLayerRouting("DIAG45", 1); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(0.4); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.6); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(1.2); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingEndOfLine(1.3, 0.6); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(1.3); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingEndOfLine(1.4, 0.7); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingEOLParallel(1.1, 0.5, 1); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(1.4); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingEndOfLine(1.5, 0.8); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingEOLParallel(1.2, 0.6, 0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingOffsetXYDistance(0.9, 0.7); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("PWL ( ( 1 0.103 ) )"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("PWL ( ( 1 0.000156 ) ( 10 0.001 ) )"); + CHECK_STATUS(status); + status = lefwLayerAntennaAreaRatio(5.4); + CHECK_STATUS(status); + status = lefwLayerAntennaDiffAreaRatio(6.5); + CHECK_STATUS(status); + diffs[0] = 4.0; + ratios[0] = 4.1; + diffs[1] = 4.2; + ratios[1] = 4.3; + status = lefwLayerAntennaDiffAreaRatioPwl(2, diffs, ratios); + CHECK_STATUS(status); + status = lefwLayerAntennaCumAreaRatio(7.5); + CHECK_STATUS(status); + diffs[0] = 5.0; + ratios[0] = 5.1; + diffs[1] = 6.0; + ratios[1] = 6.1; + status = lefwLayerAntennaCumDiffAreaRatioPwl(2, diffs, ratios); + CHECK_STATUS(status); + status = lefwLayerAntennaAreaFactor(4.5, 0); + CHECK_STATUS(status); + status = lefwLayerAntennaSideAreaRatio(6.5); + CHECK_STATUS(status); + status = lefwLayerAntennaCumDiffSideAreaRatio(4.6); + CHECK_STATUS(status); + diffs[0] = 8.0; + ratios[0] = 8.1; + diffs[1] = 8.2; + ratios[1] = 8.3; + diffs[2] = 8.4; + ratios[2] = 8.5; + diffs[3] = 8.6; + ratios[3] = 8.7; + status = lefwLayerAntennaCumDiffSideAreaRatioPwl(4, diffs, ratios); + CHECK_STATUS(status); + status = lefwLayerAntennaCumSideAreaRatio(7.4); + CHECK_STATUS(status); + diffs[0] = 7.0; + ratios[0] = 7.1; + diffs[1] = 7.2; + ratios[1] = 7.3; + status = lefwLayerAntennaDiffSideAreaRatioPwl(2, diffs, ratios); + CHECK_STATUS(status); + status = lefwLayerAntennaSideAreaFactor(9.0, "DIFFUSEONLY"); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("PEAK", 10.0); + CHECK_STATUS(status); + status = lefwLayerDCCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 20.0; + current[1] = 50.0; + current[2] = 100.0; + status = lefwLayerDCWidth(3, current); + CHECK_STATUS(status); + current[0] = 1.0E-6; + current[1] = 0.7E-6; + current[2] = 0.5E-6; + status = lefwLayerDCTableEntries(3, current); + CHECK_STATUS(status); + status = lefwEndLayerRouting("PC"); + CHECK_STATUS(status); + status = lefwStartLayer("CA", "CUT"); + CHECK_STATUS(status); + status = lefwLayerCutSpacing(0.15); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingCenterToCenter(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerEnclosure("BELOW", 0.3, 0.01, 0); + CHECK_STATUS(status); + status = lefwLayerEnclosure("ABOVE", 0.5, 0.01, 0); + CHECK_STATUS(status); + status = lefwLayerPreferEnclosure("BELOW", 0.06, 0.01, 0); + CHECK_STATUS(status); + status = lefwLayerPreferEnclosure("ABOVE", 0.08, 0.02, 0); + CHECK_STATUS(status); + status = lefwLayerEnclosure("", 0.02, 0.02, 1.0); + CHECK_STATUS(status); + status = lefwLayerEnclosure(NULL, 0.05, 0.05, 2.0); + CHECK_STATUS(status); + status = lefwLayerEnclosure("BELOW", 0.07, 0.07, 1.0); + CHECK_STATUS(status); + status = lefwLayerEnclosure("ABOVE", 0.09, 0.09, 1.0); + CHECK_STATUS(status); + status = lefwLayerResistancePerCut(10.0); + CHECK_STATUS(status); + status = lefwLayerDCCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 2.0; + current[1] = 5.0; + current[2] = 10.0; + status = lefwLayerDCWidth(3, current); + CHECK_STATUS(status); + current[0] = 0.6E-6; + current[1] = 0.5E-6; + current[2] = 0.4E-6; + status = lefwLayerDCTableEntries(3, current); + CHECK_STATUS(status); + status = lefwEndLayer("CA"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("M1"); + CHECK_STATUS(status); + status = lefwLayerRouting("DIAG135", 1); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.6); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingRange(1.1, 100.1); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingRangeUseLengthThreshold(); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.61); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingRange(1.1, 100.1); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingRangeInfluence(2.01, 2.0, 1000.0); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.62); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingRange(1.1, 100.1); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingRangeRange(4.1, 6.5); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.63); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingLengthThreshold(1.34, 4.5, 6.5); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(7); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.103"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000156"); + CHECK_STATUS(status); + current[0] = 0.00; + current[1] = 0.50; + current[2] = 3.00; + current[3] = 5.00; + status = lefwLayerRoutingStartSpacingtableParallel(4, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.15; + current[2] = 0.15; + current[3] = 0.15; + status = lefwLayerRoutingSpacingtableParallelWidth(0.00, 4, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.20; + current[2] = 0.20; + current[3] = 0.20; + status = lefwLayerRoutingSpacingtableParallelWidth(0.25, 4, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.50; + current[2] = 0.50; + current[3] = 0.50; + status = lefwLayerRoutingSpacingtableParallelWidth(1.50, 4, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.50; + current[2] = 1.00; + current[3] = 1.00; + status = lefwLayerRoutingSpacingtableParallelWidth(3.00, 4, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.50; + current[2] = 1.00; + current[3] = 2.00; + status = lefwLayerRoutingSpacingtableParallelWidth(5.00, 4, current); + CHECK_STATUS(status); + status = lefwLayerRoutineEndSpacingtable(); + CHECK_STATUS(status); + status = lefwLayerRoutingStartSpacingtableInfluence(); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingInfluenceWidth(1.5, 0.5, 0.5); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingInfluenceWidth(3.0, 1.0, 1.0); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingInfluenceWidth(5.0, 2.0, 2.0); + CHECK_STATUS(status); + status = lefwLayerRoutineEndSpacingtable(); + CHECK_STATUS(status); + status = lefwLayerRoutingStartSpacingtableInfluence(); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingInfluenceWidth(1.5, 0.5, 0.5); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingInfluenceWidth(5.0, 2.0, 2.0); + CHECK_STATUS(status); + status = lefwLayerRoutineEndSpacingtable(); + CHECK_STATUS(status); + current[0] = 0.00; + current[1] = 0.50; + current[2] = 5.00; + status = lefwLayerRoutingStartSpacingtableParallel(3, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.15; + current[2] = 0.15; + status = lefwLayerRoutingSpacingtableParallelWidth(0.00, 3, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.20; + current[2] = 0.20; + status = lefwLayerRoutingSpacingtableParallelWidth(0.25, 3, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.50; + current[2] = 1.00; + status = lefwLayerRoutingSpacingtableParallelWidth(3.00, 3, current); + CHECK_STATUS(status); + current[0] = 0.15; + current[1] = 0.50; + current[2] = 2.00; + status = lefwLayerRoutingSpacingtableParallelWidth(5.00, 3, current); + CHECK_STATUS(status); + status = lefwLayerRoutineEndSpacingtable(); + CHECK_STATUS(status); + free((char*)current); + free((char*)diffs); + free((char*)ratios); + status = lefwLayerAntennaGatePlusDiff(2.0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaDiffAreaRatio(1000); // 5.7 + CHECK_STATUS(status); + status = lefwLayerAntennaCumDiffAreaRatio(5000); // 5.7 + CHECK_STATUS(status); + status = lefwEndLayerRouting("M1"); + CHECK_STATUS(status); + + status = lefwStartLayer("V1", "CUT"); + CHECK_STATUS(status); + status = lefwLayerCutSpacing(0.6); + CHECK_STATUS(status); + status = lefwLayerCutSpacingLayer("CA", 0); + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); + CHECK_STATUS(status); + status = lefwEndLayer("V1"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("M2"); + CHECK_STATUS(status); + status = lefwLayerRouting("VERTICAL", 0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(8); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingLengthThreshold(100.9, 0, 0); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.5); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingLengthThreshold(0.9, 0, 0.1); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.6); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingLengthThreshold(1.9, 0, 0); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(1.0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingSameNet(1); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(1.1); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingSameNet(0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.0608"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000184"); + CHECK_STATUS(status); + status = lefwEndLayerRouting("M2"); + CHECK_STATUS(status); + + status = lefwStartLayer("V2", "CUT"); + CHECK_STATUS(status); + status = lefwEndLayer("V2"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("M3"); + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingPitchXYDistance(1.8, 1.5); + CHECK_STATUS(status); + status = lefwLayerRoutingDiagPitchXYDistance(1.5, 1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(8); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.0608"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000184"); + CHECK_STATUS(status); + status = lefwEndLayerRouting("M3"); + CHECK_STATUS(status); + + area = (double*)malloc(sizeof(double)*3); + width = (double*)malloc(sizeof(double)*3); + + status = lefwStartLayerRouting("M4"); + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingMinimumcut(2, 0.50); + CHECK_STATUS(status); + status = lefwLayerRoutingMinimumcut(2, 0.70); + CHECK_STATUS(status); + status = lefwLayerRoutingMinimumcutConnections("FROMBELOW"); + CHECK_STATUS(status); + status = lefwLayerRoutingMinimumcut(4, 1.0); + CHECK_STATUS(status); + status = lefwLayerRoutingMinimumcutConnections("FROMABOVE"); + CHECK_STATUS(status); + status = lefwLayerRoutingMinimumcut(2, 1.1); + CHECK_STATUS(status); + status = lefwLayerRoutingMinimumcutLengthWithin(20.0, 5.0); + CHECK_STATUS(status); + area[0] = 0.40; + width[0] = 0; + area[1] = 0.40; + width[1] = 0.15; + area[2] = 0.80; + width[2] = 0.50; + status = lefwLayerRoutingMinenclosedarea(3, area, width); + CHECK_STATUS(status); + status = lefwLayerRoutingMaxwidth(10.0); + CHECK_STATUS(status); + status = lefwLayerRoutingProtrusion(0.30, 0.60, 1.20); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstep(0.20); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstep(0.05); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstepWithOptions(0.05, NULL, 0.08); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstepWithOptions(0.05, NULL, 0.16); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstepWithOptions(0.05, "INSDECORNER", 0); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstepWithOptions(0.05, "INSIDECORNER", 0.15); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstepWithOptions(0.05, "STEP", 0); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstepWithOptions(0.05, "STEP", 0.08); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstepWithOptions(0.04, "STEP", 0); + CHECK_STATUS(status); + status = lefwLayerRoutingMinstepMaxEdges(1.0, 2); // 5.7 + CHECK_STATUS(status); + status = lefwEndLayerRouting("M4"); + CHECK_STATUS(status); + free((char*)area); + free((char*)width); + + status = lefwStartLayer("implant1", "IMPLANT"); + CHECK_STATUS(status); + status = lefwLayerWidth(0.50); + CHECK_STATUS(status); + status = lefwLayerCutSpacing(0.50); + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); + CHECK_STATUS(status); + status = lefwEndLayer("implant1"); + CHECK_STATUS(status); + + status = lefwStartLayer("implant2", "IMPLANT"); + CHECK_STATUS(status); + status = lefwLayerWidth(0.50); + CHECK_STATUS(status); + status = lefwLayerCutSpacing(0.50); + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); + CHECK_STATUS(status); + status = lefwEndLayer("implant2"); + CHECK_STATUS(status); + + status = lefwStartLayer("V3", "CUT"); + CHECK_STATUS(status); + status = lefwLayerMask(2); + CHECK_STATUS(status); + status = lefwLayerWidth(0.60); + CHECK_STATUS(status); + status = lefwEndLayer("V3"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("MT"); + CHECK_STATUS(status); + status = lefwLayerRouting("VERTICAL", 0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.0608"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000184"); + CHECK_STATUS(status); + status = lefwEndLayerRouting("MT"); + CHECK_STATUS(status); + + status = lefwStartLayer("OVERLAP", "OVERLAP"); + CHECK_STATUS(status); + status = lefwEndLayer("OVERLAP"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("MET2"); + CHECK_STATUS(status); + status = lefwLayerRouting("VERTICAL", 0.9); + CHECK_STATUS(status); + status = lefwLayerMask(2); + CHECK_STATUS(status); + status = lefwMinimumDensity(20.2); + CHECK_STATUS(status); + status = lefwMaximumDensity(80.0); + CHECK_STATUS(status); + status = lefwDensityCheckWindow(200.0, 200.0); + CHECK_STATUS(status); + status = lefwDensityCheckStep(100.0); + CHECK_STATUS(status); + status = lefwFillActiveSpacing(3.0); + CHECK_STATUS(status); + status = lefwEndLayerRouting("MET2"); + CHECK_STATUS(status); + + status = lefwStartLayer("via34", "CUT"); // 5.7 + CHECK_STATUS(status); + status = lefwLayerWidth(0.25); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacing(0.1); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingCenterToCenter(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerEnclosure(0, .05, .01, 0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerEnclosureLength(0, .05, 0, 0.7); // 5.7 + CHECK_STATUS(status); + status = lefwLayerEnclosure("BELOW", .07, .07, 1.0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerEnclosure("ABOVE", .09, .09, 1.0); // 5.7 + CHECK_STATUS(status); + status = lefwLayerEnclosureWidth(0, .03, .03, 1.0, 0.2); // 5.7 + CHECK_STATUS(status); + status = lefwEndLayer("via34"); // 5.7 + CHECK_STATUS(status); + + status = lefwStartLayer("cut23", "CUT"); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacing(0.20); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingSameNet(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingLayer("cut12", 1); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + + status = lefwLayerCutSpacing(0.30); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingCenterToCenter(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingSameNet(); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingArea(0.02); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + + status = lefwLayerCutSpacing(0.40); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingArea(0.5); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + + status = lefwLayerCutSpacing(0.10); // 5.7 + CHECK_STATUS(status); + status = lefwLayerCutSpacingEnd(); // 5.7 + CHECK_STATUS(status); + + wthn = (double*)malloc(sizeof(double)*3); // 5.7 + spng = (double*)malloc(sizeof(double)*3); + aspc = (int*)malloc(sizeof(int)*3); + wthn[0] = 0.15; + spng[0] = 0.11; + wthn[1] = 0.13; + spng[1] = 0.13; + wthn[2] = 0.11; + spng[2] = 0.15; + status = lefwLayerCutSpacingTableOrtho(3, wthn, spng); + CHECK_STATUS(status); + + aspc[0] = 3; + spng[0] = 1; + status = lefwLayerArraySpacing(0, 2.0, 0.2, 1, aspc, spng); + CHECK_STATUS(status); + aspc[0] = 3; + spng[0] = 1; + aspc[1] = 4; + spng[1] = 1.5; + aspc[2] = 5; + spng[2] = 2.0; + status = lefwLayerArraySpacing(1, 2.0, 0.2, 3, aspc, spng); + CHECK_STATUS(status); + free((char*)wthn); + free((char*)spng); + free((char*)aspc); + status = lefwEndLayer("cut23"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("cut24"); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 1); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.2); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.10); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.12); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingNotchLength(0.15); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.14); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingEndOfNotchWidth(0.15, 0.16, 0.08); // 5.7 + CHECK_STATUS(status); + status = lefwEndLayerRouting("cut24"); // 5.7 + CHECK_STATUS(status); + + status = lefwStartLayerRouting("cut25"); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.2); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 1); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(7); // 5.7 + CHECK_STATUS(status); + status = lefwLayerRoutingStartSpacingtableTwoWidths(); // 5.7 + CHECK_STATUS(status); + wthn = (double*)malloc(sizeof(double)*4); // 5.7 + wthn[0] = 0.15; + wthn[1] = 0.20; + wthn[2] = 0.50; + wthn[3] = 1.00; + status = lefwLayerRoutingSpacingtableTwoWidthsWidth(0.0, 0, 4, wthn); // 5.7 + CHECK_STATUS(status); + wthn[0] = 0.20; + wthn[1] = 0.25; + wthn[2] = 0.50; + wthn[3] = 1.00; + status = lefwLayerRoutingSpacingtableTwoWidthsWidth(0.25, 0.1, 4, wthn);// 5.7 + CHECK_STATUS(status); + wthn[0] = 0.50; + wthn[1] = 0.50; + wthn[2] = 0.60; + wthn[3] = 1.00; + status = lefwLayerRoutingSpacingtableTwoWidthsWidth(1.5, 1.5, 4, wthn);// 5.7 + CHECK_STATUS(status); + wthn[0] = 1.00; + wthn[1] = 1.00; + wthn[2] = 1.00; + wthn[3] = 1.20; + status = lefwLayerRoutingSpacingtableTwoWidthsWidth(3.0, 3.0, 4, wthn);// 5.7 + CHECK_STATUS(status); + free(wthn); + status = lefwLayerRoutineEndSpacingtable(); + CHECK_STATUS(status); + status = lefwEndLayerRouting("cut25"); // 5.7 + CHECK_STATUS(status); + + // MAXVIASTACK + status = lefwMaxviastack(4, "m1", "m7"); + CHECK_STATUS(status); + + // VIA + status = lefwStartVia("RX_PC", "DEFAULT"); + CHECK_STATUS(status); + status = lefwViaResistance(2); + CHECK_STATUS(status); + status = lefwViaLayer("RX"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.7, -0.7, 0.7, 0.7, 3); + CHECK_STATUS(status); + status = lefwViaLayer("CUT12"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.25, -0.25, 0.25, 0.25); + CHECK_STATUS(status); + status = lefwViaLayer("PC"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.6, -0.6, 0.6, 0.6, 2); + CHECK_STATUS(status); + status = lefwStringProperty("stringProperty", "DEFAULT"); + CHECK_STATUS(status); + status = lefwRealProperty("realProperty", 32.33); + CHECK_STATUS(status); + status = lefwIntProperty("COUNT", 34); + CHECK_STATUS(status); + status = lefwEndVia("PC"); + CHECK_STATUS(status); + + status = lefwStartVia("M2_M3_PWR", NULL); + CHECK_STATUS(status); + status = lefwViaResistance(0.4); + CHECK_STATUS(status); + status = lefwViaLayer("M2"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.35, -1.35, 1.35, 1.35); + CHECK_STATUS(status); + status = lefwViaLayer("V2"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.35, -1.35, -0.45, 1.35); + CHECK_STATUS(status); + status = lefwViaLayerRect(0.45, -1.35, 1.35, -0.45); + CHECK_STATUS(status); + status = lefwViaLayerRect(0.45, 0.45, 1.35, 1.35); + CHECK_STATUS(status); + status = lefwViaLayer("M3"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.35, -1.35, 1.35, 1.35); + CHECK_STATUS(status); + status = lefwEndVia("M2_M3_PWR"); + CHECK_STATUS(status); + + xl = (double*)malloc(sizeof(double)*6); + yl = (double*)malloc(sizeof(double)*6); + status = lefwStartVia("IN1X", 0); + CHECK_STATUS(status); +// status = lefwViaTopofstackonly(); 5.6 +// CHECK_STATUS(status); +// status = lefwViaForeign("IN1X", 0, 0, -1); 5.6 +// CHECK_STATUS(status); + status = lefwViaLayer("metal2"); + CHECK_STATUS(status); + xl[0] = -2.1; + yl[0] = -1.0; + xl[1] = -0.2; + yl[1] = 1.0; + xl[2] = 2.1; + yl[2] = 1.0; + xl[3] = 0.2; + yl[3] = -1.0; + xl[4] = 0.2; + yl[4] = -1.0; + xl[5] = 0.2; + yl[5] = -1.0; + status = lefwViaLayerPolygon(6, xl, yl, 2); + CHECK_STATUS(status); + xl[0] = -1.1; + yl[0] = -2.0; + xl[1] = -0.1; + yl[1] = 2.0; + xl[2] = 1.1; + yl[2] = 2.0; + xl[3] = 0.1; + yl[3] = -2.0; + status = lefwViaLayerPolygon(4, xl, yl, 1); + CHECK_STATUS(status); + xl[0] = -3.1; + yl[0] = -2.0; + xl[1] = -0.3; + yl[1] = 2.0; + xl[2] = 3.1; + yl[2] = 2.0; + xl[3] = 0.3; + yl[3] = -2.0; + status = lefwViaLayerPolygon(4, xl, yl); + CHECK_STATUS(status); + xl[0] = -4.1; + yl[0] = -2.0; + xl[1] = -0.4; + yl[1] = 2.0; + xl[2] = 4.1; + yl[2] = 2.0; + xl[3] = 0.4; + yl[3] = -2.0; + status = lefwViaLayerPolygon(4, xl, yl); + CHECK_STATUS(status); + status = lefwViaLayer("cut23"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.4, -0.4, 0.4, 0.4); + CHECK_STATUS(status); + xl[0] = -2.1; + yl[0] = -1.0; + xl[1] = -0.2; + yl[1] = 1.0; + xl[2] = 2.1; + yl[2] = 1.0; + xl[3] = 0.2; + yl[3] = -1.0; + status = lefwViaLayerPolygon(4, xl, yl); + CHECK_STATUS(status); + status = lefwEndVia("IN1X"); + CHECK_STATUS(status); + + status = lefwStartVia("myBlockVia", NULL); + CHECK_STATUS(status); + status = lefwViaViarule("DEFAULT", 0.1, 0.1, "metal1", "via12", "metal2", + 0.1, 0.1, 0.05, 0.01, 0.01, 0.05); + CHECK_STATUS(status); + status = lefwViaViaruleRowCol(1, 2); + CHECK_STATUS(status); + status = lefwViaViaruleOrigin(1.5, 2.5); + CHECK_STATUS(status); + status = lefwViaViaruleOffset(1.5, 2.5, 3.5, 4.5); + CHECK_STATUS(status); + status = lefwViaViarulePattern("2_1RF1RF1R71R0_3_R1FFFF"); + CHECK_STATUS(status); + status = lefwEndVia("myBlockVia"); + CHECK_STATUS(status); + + status = lefwStartVia("myVia23", NULL); + CHECK_STATUS(status); + status = lefwViaLayer("metal2"); + CHECK_STATUS(status); + status = lefwViaLayerPolygon(6, xl, yl); + CHECK_STATUS(status); + status = lefwViaLayer("cut23"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.4, -0.4, 0.4, 0.4); + CHECK_STATUS(status); + status = lefwViaLayer("metal3"); + CHECK_STATUS(status); + status = lefwViaLayerPolygon(5, xl, yl); + CHECK_STATUS(status); + status = lefwEndVia("myVia23"); + CHECK_STATUS(status); + + free((char*)xl); + free((char*)yl); + + // VIARULE + status = lefwStartViaRule("VIALIST12"); + CHECK_STATUS(status); + lefwAddComment("Break up the old lefwViaRule into 2 routines"); + lefwAddComment("lefwViaRuleLayer and lefwViaRuleVia"); +// status = lefwViaRuleLayer("M1", "VERTICAL", 9.0, 9.6, 4.5, 0); 5.6 +// CHECK_STATUS(status); +// status = lefwViaRuleLayer("M2", "HORIZONTAL", 3.0, 3.0, 0, 0); 5.6 +// CHECK_STATUS(status); + status = lefwViaRuleLayer("M1", NULL, 9.0, 9.6, 0, 0); + CHECK_STATUS(status); + status = lefwViaRuleLayer("M2", NULL, 3.0, 3.0, 0, 0); + CHECK_STATUS(status); + status = lefwViaRuleVia("VIACENTER12"); + CHECK_STATUS(status); + status = lefwStringProperty("vrsp", "new"); + CHECK_STATUS(status); + status = lefwIntProperty("vrip", 1); + CHECK_STATUS(status); + status = lefwRealProperty("vrrp", 4.5); + CHECK_STATUS(status); + status = lefwEndViaRule("VIALIST12"); + CHECK_STATUS(status); + + // VIARULE with GENERATE + lefwAddComment("Break up the old lefwViaRuleGenearte into 4 routines"); + lefwAddComment("lefwStartViaRuleGen, lefwViaRuleGenLayer,"); + lefwAddComment("lefwViaRuleGenLayer3, and lefwEndViaRuleGen"); + status = lefwStartViaRuleGen("VIAGEN12"); + CHECK_STATUS(status); +// status = lefwViaRuleGenLayer("M1", "VERTICAL", 0.1, 19, 1.4, 0); 5.6 +// CHECK_STATUS(status); +// status = lefwViaRuleGenLayer("M2", "HORIZONTAL", 0, 0, 1.4, 0); 5.6 +// CHECK_STATUS(status); + status = lefwViaRuleGenLayer("M1", NULL, 0.1, 19, 0, 0); + CHECK_STATUS(status); + status = lefwViaRuleGenLayer("M2", NULL, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwViaRuleGenLayer3("V1", -0.8, -0.8, 0.8, 0.8, 5.6, 6.0, 0.2); + CHECK_STATUS(status); + status = lefwEndViaRuleGen("VIAGEN12"); + CHECK_STATUS(status); + + // VIARULE with GENERATE & ENCLOSURE & DEFAULT + status = lefwStartViaRuleGen("via12"); + CHECK_STATUS(status); + status = lefwViaRuleGenDefault(); + CHECK_STATUS(status); + status = lefwViaRuleGenLayerEnclosure("m1", 0.05, 0.005, 1.0, 100.0); + CHECK_STATUS(status); + status = lefwViaRuleGenLayerEnclosure("m2", 0.05, 0.005, 1.0, 100.0); + CHECK_STATUS(status); + status = lefwViaRuleGenLayer3("cut12", -0.07, -0.07, 0.07, 0.07, 0.16, 0.16, 0); + CHECK_STATUS(status); + status = lefwEndViaRuleGen("via12"); + CHECK_STATUS(status); + + // NONDEFAULTRULE + status = lefwStartNonDefaultRule("RULE1"); + CHECK_STATUS(status); + status = lefwNonDefaultRuleHardspacing(); + CHECK_STATUS(status); +// status = lefwNonDefaultRuleLayer("RX", 10.0, 2.2, 6, 6.5, 6.5, 6.5); 5.6 +// CHECK_STATUS(status); +// status = lefwNonDefaultRuleLayer("PC", 10.0, 2.2, 0, 0, 6.5, 0); 5.6 +// CHECK_STATUS(status); +// status = lefwNonDefaultRuleLayer("M1", 10.0, 2.2, 0, 6.5, 0, 0); 5.6 +// CHECK_STATUS(status); + status = lefwNonDefaultRuleLayer("RX", 10.0, 2.2, 6, 0, 0, 0); + CHECK_STATUS(status); + status = lefwNonDefaultRuleLayer("PC", 10.0, 2.2, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwNonDefaultRuleLayer("M1", 10.0, 2.2, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwStartVia("nd1VARX0", NULL); + CHECK_STATUS(status); + status = lefwViaResistance(0.2); + CHECK_STATUS(status); +// status = lefwViaForeignStr("IN1X", 0, 0, "N"); 5.6 +// CHECK_STATUS(status); + status = lefwViaLayer("RX"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-3, -3, 3, 3); + CHECK_STATUS(status); + status = lefwViaLayer("CUT12"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.0, -1.0, 1.0, 1.0); + CHECK_STATUS(status); + status = lefwViaLayer("PC"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-3, -3, 3, 3); + CHECK_STATUS(status); + status = lefwEndVia("nd1VARX0"); + CHECK_STATUS(status); + status = lefwStartSpacing(); + CHECK_STATUS(status); + status = lefwSpacing("CUT01", "RX", 0.1, "STACK"); + CHECK_STATUS(status); + status = lefwEndSpacing(); + CHECK_STATUS(status); + status = lefwEndNonDefaultRule("RULE1"); + CHECK_STATUS(status); + status = lefwStartNonDefaultRule("wide1_5x"); + CHECK_STATUS(status); + status = lefwNonDefaultRuleLayer("fw", 4.8, 4.8, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwNonDefaultRuleStartVia("nd1VIARX0", "DEFAULT"); + CHECK_STATUS(status); +// status = lefwViaTopofstackonly(); 5.6 +// CHECK_STATUS(status); +// status = lefwViaForeign("IN1X", 0, 0, -1); 5.6 +// CHECK_STATUS(status); + status = lefwViaResistance(0.2); + CHECK_STATUS(status); + status = lefwViaLayer("RX"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-3, -3, 3, 3); + CHECK_STATUS(status); + status = lefwViaLayer("CUT12"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.0, -1.0, 1.0, 1.0); + CHECK_STATUS(status); + status = lefwViaLayer("PC"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-3, -3, 3, 3); + CHECK_STATUS(status); + status = lefwNonDefaultRuleEndVia("nd1VIARX0"); + CHECK_STATUS(status); + status = lefwNonDefaultRuleUseVia("via12_fixed_analog_via"); + CHECK_STATUS(status); + status = lefwNonDefaultRuleMinCuts("cut12", 2); + CHECK_STATUS(status); + status = lefwNonDefaultRuleUseVia("via23_fixed_analog_via"); + CHECK_STATUS(status); + status = lefwNonDefaultRuleMinCuts("cut23", 2); + CHECK_STATUS(status); + status = lefwNonDefaultRuleUseViaRule("viaRule23_fixed_analog_via"); + CHECK_STATUS(status); + status = lefwEndNonDefaultRule("wide1_5x"); + CHECK_STATUS(status); + + // UNIVERSALNOISEMARGIN + /* obsolete in 5.4 + status = lefwUniversalNoiseMargin(0.1, 20); + CHECK_STATUS(status); + status = lefwEdgeRateThreshold1(0.1); + CHECK_STATUS(status); + status = lefwEdgeRateThreshold2(0.9); + CHECK_STATUS(status); + status = lefwEdgeRateScaleFactor(1.0); + CHECK_STATUS(status); + */ + + // NOISETABLE + /* obsolete in 5.4 + double *holder; + holder = (double*)malloc(sizeof(double)*1); + status = lefwStartNoiseTable(1); + CHECK_STATUS(status); + status = lefwEdgeRate(20); + CHECK_STATUS(status); + holder[0] = 3; + status = lefwOutputResistance(1, holder); + CHECK_STATUS(status); + holder[0] = 10; + status = lefwVictims(25, 1, holder); + CHECK_STATUS(status); + status = lefwEndNoiseTable(); + CHECK_STATUS(status); + */ + + // CORRECTIONTABLE + /* obsolete in 5.4 + status = lefwStartCorrectTable(1); + CHECK_STATUS(status); + status = lefwEdgeRate(20); + CHECK_STATUS(status); + holder[0] = 3; + status = lefwOutputResistance(1, holder); // Share the same functions with + CHECK_STATUS(status); // noisetable + holder[0] = 10.5; + status = lefwVictims(25, 1, holder); + CHECK_STATUS(status); + status = lefwEndCorrectTable(); + CHECK_STATUS(status); + free((char*)holder); + */ + + // SPACING + status = lefwStartSpacing(); + CHECK_STATUS(status); + status = lefwSpacing("CUT01", "CA", 1.5, NULL); + CHECK_STATUS(status); + status = lefwSpacing("CA", "V1", 1.5, "STACK"); + CHECK_STATUS(status); + status = lefwSpacing("M1", "M1", 3.5, "STACK"); + CHECK_STATUS(status); + status = lefwSpacing("V1", "V2", 1.5, "STACK"); + CHECK_STATUS(status); + status = lefwSpacing("M2", "M2", 3.5, "STACK"); + CHECK_STATUS(status); + status = lefwSpacing("V2", "V3", 1.5, "STACK"); + CHECK_STATUS(status); + status = lefwEndSpacing(); + CHECK_STATUS(status); + + // MINFEATURE & DIELECTRIC + status = lefwMinFeature(0.1, 0.1); + CHECK_STATUS(status); + /* obsolete in 5.4 + status = lefwDielectric(0.000345); + CHECK_STATUS(status); + */ + status = lefwNewLine(); + CHECK_STATUS(status); + + // IRDROP + /* obsolete in 5.4 + status = lefwStartIrdrop(); + CHECK_STATUS(status); + status = lefwIrdropTable("DRESHI", "0.0001 -0.7 0.001 -0.8 0.01 -0.9 0.1 -1.0"); + CHECK_STATUS(status); + status = lefwIrdropTable("DRESLO", "0.0001 -1.7 0.001 -1.6 0.01 -1.5 0.1 -1.3"); + CHECK_STATUS(status); + status = lefwIrdropTable("DNORESHI", "0.0001 -0.6 0.001 -0.7 0.01 -0.9 0.1 -1.1"); + CHECK_STATUS(status); + status = lefwIrdropTable("DNORESLO", "0.0001 -1.5 0.001 -1.5 0.01 -1.4 0.1 -1.4"); + CHECK_STATUS(status); + status = lefwEndIrdrop(); + CHECK_STATUS(status); + */ + + // SITE + status = lefwSite("CORE1", "CORE", "X", 67.2, 6); + CHECK_STATUS(status); + status = lefwSiteRowPattern("Fsite", 0); + CHECK_STATUS(status); + status = lefwSiteRowPatternStr("Lsite", "N"); + CHECK_STATUS(status); + status = lefwSiteRowPatternStr("Lsite", "FS"); + CHECK_STATUS(status); + lefwEndSite("CORE1"); + CHECK_STATUS(status); + status = lefwSite("CORE", "CORE", "Y", 3.6, 28.8); + CHECK_STATUS(status); + lefwEndSite("CORE"); + CHECK_STATUS(status); + status = lefwSite("MRCORE", "CORE", "Y", 3.6, 28.8); + CHECK_STATUS(status); + lefwEndSite("MRCORE"); + CHECK_STATUS(status); + status = lefwSite("IOWIRED", "PAD", NULL, 57.6, 432); + CHECK_STATUS(status); + lefwEndSite("IOWIRED"); + CHECK_STATUS(status); + + // ARRAY + status = lefwStartArray("M7E4XXX"); + CHECK_STATUS(status); + status = lefwArraySite("CORE", -5021.450, -4998.000, 0, 14346, 595, 0.700, + 16.800); + CHECK_STATUS(status); + status = lefwArraySiteStr("CORE", -5021.450, -4998.600, "FS", 14346, 595, + 0.700, 16.800); + CHECK_STATUS(status); + status = lefwArraySite("IO", 6148.800, 5800.000, 3, 1, 1, 0.000, 0.000); + CHECK_STATUS(status); + status = lefwArraySiteStr("IO", 6148.800, 5240.000, "E", 1, 1, 0.000, 0.000); + CHECK_STATUS(status); + status = lefwArraySite("COVER", -7315.0, -7315.000, 1, 1, 1, 0.000, 0.000); + CHECK_STATUS(status); + status = lefwArraySiteStr("COVER", 7315.0, 7315.000, "FN", 1, 1, 0.000, 0.000); + CHECK_STATUS(status); + status = lefwArrayCanplace("COVER", -7315.000, -7315.000, 0, 1, 1, 0.000, + 0.000); + CHECK_STATUS(status); + status = lefwArrayCanplaceStr("COVER", -7250.000, -7250.000, "N", 5, 1, + 40.000, 0.000); + CHECK_STATUS(status); + status = lefwArrayCannotoccupy("CORE", -5021.450, -4989.600, 6, 100, 595, + 0.700, 16.800); + CHECK_STATUS(status); + status = lefwArrayCannotoccupyStr("CORE", -5021.450, -4989.600, "N", 100, 595, + 0.700, 16.800); + CHECK_STATUS(status); + status = lefwArrayTracks("X", -6148.800, 17569, 0.700, "RX"); + CHECK_STATUS(status); + status = lefwArrayTracks("Y", -6148.800, 20497, 0.600, "RX"); + CHECK_STATUS(status); + status = lefwStartArrayFloorplan("100%"); + CHECK_STATUS(status); + status = lefwArrayFloorplan("CANPLACE", "COVER", -7315.000, -7315.000, 1, 1, + 1, 0.000, 0.000); + CHECK_STATUS(status); + status = lefwArrayFloorplanStr("CANPLACE", "COVER", -7250.000, -7250.000, + "N", 5, 1, 40.000, 0.000); + CHECK_STATUS(status); + status = lefwArrayFloorplan("CANPLACE", "CORE", -5021.000, -4998.000, 1, + 14346, 595, 0.700, 16.800); + CHECK_STATUS(status); + status = lefwArrayFloorplanStr("CANPLACE", "CORE", -5021.000, -4998.000, "FS", + 100, 595, 0.700, 16.800); + CHECK_STATUS(status); + status = lefwArrayFloorplan("CANNOTOCCUPY", "CORE", -5021.000, -4998.000, 7, + 14346, 595, 0.700, 16.800); + CHECK_STATUS(status); + status = lefwArrayFloorplanStr("CANNOTOCCUPY", "CORE", -5021.000, -4998.000, + "E", 100, 595, 0.700, 16.800); + CHECK_STATUS(status); + status = lefwEndArrayFloorplan("100%"); + CHECK_STATUS(status); + status = lefwArrayGcellgrid("X", -6157.200, 1467, 8.400); + CHECK_STATUS(status); + status = lefwArrayGcellgrid("Y", -6157.200, 1467, 8.400); + CHECK_STATUS(status); + status = lefwEndArray("M7E4XXX"); + CHECK_STATUS(status); + + // MACRO + status = lefwStartMacro("CHK3A"); + CHECK_STATUS(status); + status = lefwMacroClass("RING", NULL); + CHECK_STATUS(status); + status = lefwMacroFixedMask(); + CHECK_STATUS(status); +// status = lefwMacroSource("USER"); 5.6 +// CHECK_STATUS(status); + status = lefwMacroOrigin(0.9, 0.9); + CHECK_STATUS(status); + status = lefwMacroSize(10.8, 28.8); + CHECK_STATUS(status); + status = lefwMacroSymmetry("X Y R90"); + CHECK_STATUS(status); + status = lefwMacroSite("CORE"); + CHECK_STATUS(status); + status = lefwStartMacroPin("GND"); + CHECK_STATUS(status); + status = lefwMacroPinDirection("INOUT"); + CHECK_STATUS(status); + status = lefwMacroPinMustjoin("PA3"); + CHECK_STATUS(status); + status = lefwMacroPinTaperRule("RULE1"); + CHECK_STATUS(status); + status = lefwMacroPinUse("GROUND"); + CHECK_STATUS(status); + status = lefwMacroPinShape("ABUTMENT"); + CHECK_STATUS(status); +// status = lefwMacroPinLEQ("A"); 5.6 +// CHECK_STATUS(status); + status = lefwMacroPinSupplySensitivity("vddpin1"); + CHECK_STATUS(status); + status = lefwMacroPinNetExpr("power1 VDD1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMetalArea(3, "M1"); + CHECK_STATUS(status); + // MACRO - PIN + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); +// status = lefwMacroPinForeign("GROUND", 4, 7, 6); 5.6 +// CHECK_STATUS(status); +// status = lefwMacroPinForeignStr("VSS", 4, 7, "W"); 5.6 +// CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M1", 0.05); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(-0.9, 3, 9.9, 6, 0, 0, 0, 0, 3); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwStringProperty("TYPE", "special"); + CHECK_STATUS(status); + status = lefwIntProperty("intProp", 23); + CHECK_STATUS(status); + status = lefwRealProperty("realProp", 24.25); + CHECK_STATUS(status); +/* WMD - Comment them out due to mix 5.3 & 5.4 syntax + status = lefwMacroPinAntennasize(1, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennasize(2, "M2"); +*/ + status = lefwMacroPinAntennaModel("OXIDE1"); + CHECK_STATUS(status); + status = lefwEndMacroPin("GND"); + CHECK_STATUS(status); + status = lefwStartMacroPin("VDD"); + CHECK_STATUS(status); + status = lefwMacroPinDirection("INOUT"); + CHECK_STATUS(status); + status = lefwMacroPinUse("POWER"); + CHECK_STATUS(status); + status = lefwMacroPinShape("ABUTMENT"); + CHECK_STATUS(status); + status = lefwMacroPinNetExpr("power2 VDD2"); + CHECK_STATUS(status); + // MACRO - PIN - PORT + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M1", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(-0.9, 21, 9.9, 24, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortVia(100, 300, "nd1VIA12", 1, 2, 1, 2, 123); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwStartMacroPinPort("BUMP"); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M2", 0.06); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + xl = (double*)malloc(sizeof(double)*5); + yl = (double*)malloc(sizeof(double)*5); + xl[0] = 30.8; + yl[0] = 30.5; + xl[1] = 42; + yl[1] = 53.5; + xl[2] = 60.8; + yl[2] = 25.5; + xl[3] = 47; + yl[3] = 15.5; + xl[4] = 20.8; + yl[4] = 0.5; + status = lefwStartMacroPinPort("CORE"); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("P1", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerPolygon(5, xl, yl, 5, 6, 454.6, 345.6, 2); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerPolygon(5, xl, yl, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + free((char*)xl); + free((char*)yl); +/* WMD - Comment them out due to mix 5.3 & 5.4 syntax + status = lefwMacroPinAntennaMetalArea(3, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMetalArea(4, "M2"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMetalLength(5, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMetalLength(6, "M2"); + CHECK_STATUS(status); +*/ + status = lefwEndMacroPin("VDD"); + CHECK_STATUS(status); + status = lefwStartMacroPin("PA3"); + CHECK_STATUS(status); + status = lefwMacroPinDirection("INPUT"); + CHECK_STATUS(status); + status = lefwMacroPinNetExpr("gnd1 GND"); + CHECK_STATUS(status); + // 5.4 + status = lefwMacroPinAntennaPartialMetalArea(4, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaPartialMetalArea(5, "M2"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaPartialMetalSideArea(5, "M2"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaGateArea(1, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaGateArea(2, 0); + CHECK_STATUS(status); + status = lefwMacroPinAntennaGateArea(3, "M3"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaDiffArea(1, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMaxAreaCar(1, "L1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMaxSideAreaCar(1, 0); + CHECK_STATUS(status); + status = lefwMacroPinAntennaPartialCutArea(1, 0); + CHECK_STATUS(status); + status = lefwMacroPinAntennaPartialCutArea(2, "M2"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaPartialCutArea(3, 0); + CHECK_STATUS(status); + status = lefwMacroPinAntennaPartialCutArea(4, "M4"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMaxCutCar(1, 0); + CHECK_STATUS(status); + status = lefwStartMacroPinPort("CORE"); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M1", 0.02); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(1.35, -0.45, 2.25, 0.45, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(-0.45, -0.45, 0.45, 0.45, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("PC", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(-0.45, 12.15, 0.45, 13.05, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortDesignRuleWidth("PC", 2); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(8.55, 8.55, 9.45, 9.45, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(6.75, 6.75, 7.65, 7.65, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(6.75, 8.75, 7.65, 9.65, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(6.75, 10.35, 7.65, 11.25, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwEndMacroPin("PA3"); + CHECK_STATUS(status); + // MACRO - OBS + status = lefwStartMacroObs(); + CHECK_STATUS(status); + status = lefwMacroObsLayer("M1", 5.6); + CHECK_STATUS(status); + status = lefwMacroObsLayerWidth(5.4); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(6.6, -0.6, 9.6, 0.6, 0, 0, 0, 0, 2); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(4.8, 12.9, 9.6, 13.2, 0, 0, 0, 0, 3); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(3, 13.8, 7.8, 16.8, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(3, -0.6, 6, 0.6, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroObs(); + CHECK_STATUS(status); + status = lefwStringProperty("stringProp", "first"); + CHECK_STATUS(status); + status = lefwIntProperty("integerProp", 1); + CHECK_STATUS(status); + status = lefwRealProperty("WEIGHT", 30.31); + CHECK_STATUS(status); + status = lefwEndMacro("CHK3A"); + CHECK_STATUS(status); + + // 2nd MACRO + status = lefwStartMacro("INV"); + CHECK_STATUS(status); + status = lefwMacroEEQ("CHK1"); + CHECK_STATUS(status); +// status = lefwMacroLEQ("CHK2"); 5.6 +// CHECK_STATUS(status); + status = lefwMacroClass("CORE", "SPACER"); + CHECK_STATUS(status); + status = lefwMacroForeign("INVS", 0, 0, -1); + CHECK_STATUS(status); + /* obsolete in 5.4 + status = lefwMacroPower(1.0); + CHECK_STATUS(status); + */ + status = lefwMacroSize(67.2, 24); + CHECK_STATUS(status); + status = lefwMacroSymmetry("X Y R90"); + CHECK_STATUS(status); + status = lefwMacroSite("CORE1"); + CHECK_STATUS(status); + status = lefwStartMacroDensity("metal1"); + CHECK_STATUS(status); + status = lefwMacroDensityLayerRect(0, 0, 100, 100, 45.5); + CHECK_STATUS(status); + status = lefwMacroDensityLayerRect(100, 0, 200, 100, 42.2); + CHECK_STATUS(status); + status = lefwEndMacroDensity(); + CHECK_STATUS(status); + status = lefwStartMacroDensity("metal2"); + CHECK_STATUS(status); + status = lefwMacroDensityLayerRect(200, 1, 300, 200, 43.3); + CHECK_STATUS(status); + status = lefwEndMacroDensity(); + CHECK_STATUS(status); + status = lefwStartMacroPin("Z"); + CHECK_STATUS(status); + status = lefwMacroPinDirection("OUTPUT"); + CHECK_STATUS(status); + status = lefwMacroPinUse("SIGNAL"); + CHECK_STATUS(status); + status = lefwMacroPinShape("ABUTMENT"); + CHECK_STATUS(status); + /* obsolete in 5.4 + status = lefwMacroPinRisethresh(22); + CHECK_STATUS(status); + status = lefwMacroPinFallthresh(100); + CHECK_STATUS(status); + status = lefwMacroPinRisesatcur(4); + CHECK_STATUS(status); + status = lefwMacroPinFallsatcur(.5); + CHECK_STATUS(status); + status = lefwMacroPinVLO(0); + CHECK_STATUS(status); + status = lefwMacroPinVHI(5); + CHECK_STATUS(status); + status = lefwMacroPinCapacitance(0.08); + CHECK_STATUS(status); + status = lefwMacroPinPower(0.1); + CHECK_STATUS(status); + */ + status = lefwMacroPinAntennaModel("OXIDE1"); + CHECK_STATUS(status); + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M2", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerWidth(5.6); + CHECK_STATUS(status); + xpath = (double*)malloc(sizeof(double)*7); + ypath = (double*)malloc(sizeof(double)*7); + xpath[0] = 30.8; + ypath[0] = 9; + xpath[1] = 42; + ypath[1] = 9; + xpath[2] = 30.8; + ypath[2] = 9; + xpath[3] = 42; + ypath[3] = 9; + xpath[4] = 30.8; + ypath[4] = 9; + xpath[5] = 42; + ypath[5] = 9; + xpath[6] = 30.8; + ypath[6] = 9; + status = lefwMacroPinPortLayerPath(7, xpath, ypath, 0, 0, 0, 0, 2); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwEndMacroPin("Z"); + free((char*)xpath); + free((char*)ypath); + // MACRO - TIMING + /* obsolete in 5.4 + status = lefwStartMacroTiming(); + CHECK_STATUS(status); + status = lefwMacroTimingPin("A", "Z"); + CHECK_STATUS(status); + status = lefwMacroTimingIntrinsic("RISE", .39, .41, 1.2, .25, .29, 1.8, + .67, .87, 2.2, 0.12, 0.13); + CHECK_STATUS(status); + status = lefwMacroTimingIntrinsic("FALL", .25, .29, 1.3, .26, .31, 1.7, + .6, .8, 2.1, 0.11, 0.14); + CHECK_STATUS(status); + status = lefwMacroTimingRisers(83.178, 90.109); + CHECK_STATUS(status); + status = lefwMacroTimingFallrs(76.246, 97.041); + CHECK_STATUS(status); + status = lefwMacroTimingRisecs(0.751, 0.751); + CHECK_STATUS(status); + status = lefwMacroTimingFallcs(0.751, 0.751); + CHECK_STATUS(status); + status = lefwMacroTimingRiset0(0.65453, 0.65453); + CHECK_STATUS(status); + status = lefwMacroTimingFallt0(0.38, 0.38); + CHECK_STATUS(status); + status = lefwMacroTimingRisesatt1(0, 0); + CHECK_STATUS(status); + status = lefwMacroTimingFallsatt1(0.15, 0.15); + CHECK_STATUS(status); + status = lefwMacroTimingUnateness("INVERT"); + CHECK_STATUS(status); + status = lefwEndMacroTiming(); + CHECK_STATUS(status); + */ + // MACRO - OBS + status = lefwStartMacroObs(); + CHECK_STATUS(status); + status = lefwMacroObsDesignRuleWidth("M1", 2); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(24.1, 1.5, 43.5, 208.5, 0, 0, 0, 0); + CHECK_STATUS(status); + xpath = (double*)malloc(sizeof(double)*2); + ypath = (double*)malloc(sizeof(double)*2); + xpath[0] = 8.4; + ypath[0] = 3; + xpath[1] = 8.4; + ypath[1] = 124; + status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0, 2); + CHECK_STATUS(status); + xpath[0] = 58.8; + ypath[0] = 3; + xpath[1] = 58.8; + ypath[1] = 123; + status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0, 3); + CHECK_STATUS(status); + xpath[0] = 64.4; + ypath[0] = 3; + xpath[1] = 64.4; + ypath[1] = 123; + status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0); + CHECK_STATUS(status); + free((char*)xpath); + free((char*)ypath); + xl = (double*)malloc(sizeof(double)*5); + yl = (double*)malloc(sizeof(double)*5); + xl[0] = 6.4; + xl[1] = 3.4; + xl[2] = 5.4; + xl[3] = 8.4; + xl[4] = 9.4; + yl[0] = 9.2; + yl[1] = 0.2; + yl[2] = 7.2; + yl[3] = 8.2; + yl[4] = 1.2; + status = lefwMacroObsLayerPolygon(5, xl, yl, 0, 0, 0, 0, 3); + CHECK_STATUS(status); + free((char*)xl); + free((char*)yl); + status = lefwEndMacroObs(); + CHECK_STATUS(status); + status = lefwEndMacro("INV"); + CHECK_STATUS(status); + + // 3rd MACRO + status = lefwStartMacro("DFF3"); + CHECK_STATUS(status); + status = lefwMacroClass("CORE", "ANTENNACELL"); + CHECK_STATUS(status); + status = lefwMacroForeignStr("DFF3S", 0, 0, "N"); + CHECK_STATUS(status); + /* obsolete in 5.4 + status = lefwMacroPower(4.0); + CHECK_STATUS(status); + */ + status = lefwMacroSize(67.2, 210); + CHECK_STATUS(status); + status = lefwMacroSymmetry("X Y R90"); + CHECK_STATUS(status); + status = lefwMacroSitePattern("CORE", 34, 54, 7, 30, 3, 1, 1); + CHECK_STATUS(status); + status = lefwMacroSitePatternStr("CORE1", 21, 68, "S", 30, 3, 2, 2); + CHECK_STATUS(status); + status = lefwEndMacro("DFF3"); + CHECK_STATUS(status); + + status = lefwStartMacro("DFF4"); + CHECK_STATUS(status); + status = lefwMacroClass("COVER", "BUMP"); + CHECK_STATUS(status); + status = lefwMacroForeignStr("DFF3S", 0, 0, ""); + CHECK_STATUS(status); + status = lefwEndMacro("DFF4"); + CHECK_STATUS(status); + + status = lefwStartMacro("DFF5"); + CHECK_STATUS(status); + status = lefwMacroClass("COVER", NULL); + CHECK_STATUS(status); + status = lefwMacroForeignStr("DFF3S", 0, 0, ""); + CHECK_STATUS(status); + status = lefwEndMacro("DFF5"); + CHECK_STATUS(status); + + status = lefwStartMacro("DFF6"); + CHECK_STATUS(status); + status = lefwMacroClass("BLOCK", "BLACKBOX"); + CHECK_STATUS(status); + status = lefwMacroForeignStr("DFF3S", 0, 0, ""); + CHECK_STATUS(status); + status = lefwEndMacro("DFF6"); + CHECK_STATUS(status); + + status = lefwStartMacro("DFF7"); + CHECK_STATUS(status); + status = lefwMacroClass("PAD", "AREAIO"); + CHECK_STATUS(status); + status = lefwMacroForeignStr("DFF3S", 0, 0, ""); + CHECK_STATUS(status); + status = lefwEndMacro("DFF7"); + CHECK_STATUS(status); + + status = lefwStartMacro("DFF8"); + CHECK_STATUS(status); + status = lefwMacroClass("BLOCK", "SOFT"); + CHECK_STATUS(status); + status = lefwEndMacro("DFF8"); + CHECK_STATUS(status); + + status = lefwStartMacro("DFF9"); + CHECK_STATUS(status); + status = lefwMacroClass("CORE", "WELLTAP"); + CHECK_STATUS(status); + status = lefwEndMacro("DFF9"); + CHECK_STATUS(status); + + status = lefwStartMacro("myTest"); + CHECK_STATUS(status); + status = lefwMacroClass("CORE", NULL); + CHECK_STATUS(status); + status = lefwMacroSize(10.0, 14.0); + CHECK_STATUS(status); + status = lefwMacroSymmetry("X"); + CHECK_STATUS(status); + status = lefwMacroSitePatternStr("Fsite", 0, 0, "N", 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroSitePatternStr("Fsite", 0, 7.0, "FS", 30, 3, 2, 2); + CHECK_STATUS(status); + status = lefwMacroSitePatternStr("Fsite", 4.0, 0, "N", 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacro("myTest"); + CHECK_STATUS(status); + + // ANTENNA, this will generate error for 5.4 since I already have ANTENNA + // somewhere + status = lefwAntenna("INPUTPINANTENNASIZE", 1); + CHECK_STATUS(status); + status = lefwAntenna("OUTPUTPINANTENNASIZE", -1); + CHECK_STATUS(status); + status = lefwAntenna("INOUTPINANTENNASIZE", -1); + CHECK_STATUS(status); + status = lefwNewLine(); + CHECK_STATUS(status); + + // BEGINEXT + status = lefwStartBeginext("SIGNATURE"); + CHECK_STATUS(status); + lefwAddIndent(); + status = lefwBeginextCreator("CADENCE"); + CHECK_STATUS(status); + // since the date is different each run, + // comment it out, so the quick test will not fail + // status = lefwBeginextDate(); + // CHECK_STATUS(status); + status = lefwEndBeginext(); + CHECK_STATUS(status); + + status = lefwEnd(); + CHECK_STATUS(status); + + lineNum = lefwCurrentLineNumber(); + if (lineNum == 0) + fprintf(stderr, "ERROR: Nothing has been written!!!\n"); + + fclose(fout); + + return 0; +} + + diff --git a/lefdef/src/lef/lefwrite/lefwriteCbs.cpp b/lefdef/src/lef/lefwrite/lefwriteCbs.cpp new file mode 100644 index 00000000..75c5cc5c --- /dev/null +++ b/lefdef/src/lef/lefwrite/lefwriteCbs.cpp @@ -0,0 +1,997 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author$ +// $Revision$ +// $Date$ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#ifndef WIN32 +# include +#endif /* not WIN32 */ +#include "lefwWriter.hpp" +#include "lefwWriterCalls.hpp" + +// Global variables +char defaultOut[128]; +FILE* fout; +int userData; + +#define CHECK_STATUS(status) \ + if (status) { \ + lefwPrintError(status); \ + return(status); \ + } + +void dataError() { + fprintf(fout, "ERROR: returned user data is not correct!\n"); +} + +void checkType(lefwCallbackType_e c) { + if (c >= 0 && c <= lefwEndLibCbkType) { + // OK + } else { + fprintf(fout, "ERROR: callback type is out of bounds!\n"); + } +} + +int versionCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + if ((int)ud != userData) dataError(); + status = lefwVersion(5, 6); + CHECK_STATUS(status); + return 0; +} + +int busBitCharsCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + if ((int)ud != userData) dataError(); + status = lefwBusBitChars("<>"); + CHECK_STATUS(status); + return 0; +} + +int dividerCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + if ((int)ud != userData) dataError(); + status = lefwDividerChar(":"); + CHECK_STATUS(status); + status = lefwNewLine(); + CHECK_STATUS(status); + return 0; +} + +// UNITS +int unitsCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + if ((int)ud != userData) dataError(); + status = lefwStartUnits(); + CHECK_STATUS(status); + status = lefwUnits(100, 10, 10000, 10000, 10000, 1000, 0); + CHECK_STATUS(status); + status = lefwEndUnits(); + CHECK_STATUS(status); + return 0; +} + +// PROPERTYDEFINITIONS +int propDefCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + if ((int)ud != userData) dataError(); + status = lefwStartPropDef(); + CHECK_STATUS(status); + status = lefwStringPropDef("LIBRARY", "NAME", 0, 0, "Cadence96"); + CHECK_STATUS(status); + status = lefwIntPropDef("LIBRARY", "intNum", 0, 0, 20); + CHECK_STATUS(status); + status = lefwRealPropDef("LIBRARY", "realNum", 0, 0, 21.22); + CHECK_STATUS(status); + status = lefwStringPropDef("PIN", "TYPE", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwIntPropDef("PIN", "intProp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwRealPropDef("PIN", "realProp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwStringPropDef("MACRO", "stringProp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwIntPropDef("MACRO", "integerProp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwRealPropDef("MACRO", "WEIGHT", 1.0, 100.0, NULL); + CHECK_STATUS(status); + status = lefwStringPropDef("VIA", "stringProperty", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwRealPropDef("VIA", "realProp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwIntPropDef("VIA", "COUNT", 1, 100, NULL); + CHECK_STATUS(status); + status = lefwStringPropDef("LAYER", "lsp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwIntPropDef("LAYER", "lip", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwRealPropDef("LAYER", "lrp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwStringPropDef("VIARULE", "vrsp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwRealPropDef("VIARULE", "vrip", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwIntPropDef("VIARULE", "vrrp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwStringPropDef("NONDEFAULTRULE", "ndrsp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwIntPropDef("NONDEFAULTRULE", "ndrip", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwRealPropDef("NONDEFAULTRULE", "ndrrp", 0, 0, NULL); + CHECK_STATUS(status); + status = lefwEndPropDef(); + return 0; +} + +// LAYERS +int layerCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + double *current; + + checkType(c); + if ((int)ud != userData) dataError(); + current = (double*)malloc(sizeof(double)*15); + + status = lefwStartLayer("POLYS", "MASTERSLICE"); + CHECK_STATUS(status); + status = lefwStringProperty("lsp", "top"); + CHECK_STATUS(status); + status = lefwIntProperty("lip", 1); + CHECK_STATUS(status); + status = lefwRealProperty("lrp", 2.3); + CHECK_STATUS(status); + status = lefwEndLayer("POLYS"); + CHECK_STATUS(status); + + status = lefwStartLayer("CUT01", "CUT"); + CHECK_STATUS(status); + status = lefwEndLayer("CUT01"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("RX"); + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 1); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(0.75); + CHECK_STATUS(status); + status = lefwLayerRoutingOffset(0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.6); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacingRange(0.1, 9); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.103"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000156"); + CHECK_STATUS(status); + status = lefwLayerRoutingHeight(9); + CHECK_STATUS(status); + status = lefwLayerRoutingThickness(1); + CHECK_STATUS(status); + status = lefwLayerRoutingShrinkage(0.1); + CHECK_STATUS(status); + status = lefwLayerRoutingEdgeCap(0.00005); + CHECK_STATUS(status); + status = lefwLayerRoutingAntennaArea(1); + CHECK_STATUS(status); + status = lefwLayerRoutingAntennaLength(1); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("PEAK", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 100E6; + current[2] = 400E6; + status = lefwLayerACFrequency(3, current); + CHECK_STATUS(status); + current[0] = 0.4; + current[1] = 0.8; + current[2] = 10.0; + current[3] = 50.0; + current[4] = 100.0; + status = lefwLayerACWidth(5, current); + CHECK_STATUS(status); + current[0] = 2.0E-6; + current[1] = 1.9E-6; + current[2] = 1.8E-6; + current[3] = 1.7E-6; + current[4] = 1.5E-6; + current[5] = 1.4E-6; + current[6] = 1.3E-6; + current[7] = 1.2E-6; + current[8] = 1.1E-6; + current[9] = 1.0E-6; + current[10] = 0.9E-6; + current[11] = 0.8E-6; + current[12] = 0.7E-6; + current[13] = 0.6E-6; + current[14] = 0.4E-6; + status = lefwLayerACTableEntries(15, current); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 100E6; + current[2] = 400E6; + status = lefwLayerACFrequency(3, current); + CHECK_STATUS(status); + current[0] = 0.6E-6; + current[1] = 0.5E-6; + current[2] = 0.4E-6; + status = lefwLayerACTableEntries(3, current); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("RMS", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 400E6; + current[2] = 800E6; + status = lefwLayerACFrequency(3, current); + CHECK_STATUS(status); + current[0] = 0.4; + current[1] = 0.8; + current[2] = 10.0; + current[3] = 50.0; + current[4] = 100.0; + status = lefwLayerACWidth(5, current); + CHECK_STATUS(status); + current[0] = 2.0E-6; + current[1] = 1.9E-6; + current[2] = 1.8E-6; + current[3] = 1.7E-6; + current[4] = 1.5E-6; + current[5] = 1.4E-6; + current[6] = 1.3E-6; + current[7] = 1.2E-6; + current[8] = 1.1E-6; + current[9] = 1.0E-6; + current[10] = 0.9E-6; + current[11] = 0.8E-6; + current[12] = 0.7E-6; + current[13] = 0.6E-6; + current[14] = 0.4E-6; + status = lefwLayerACTableEntries(15, current); + CHECK_STATUS(status); + status = lefwEndLayerRouting("RX"); + CHECK_STATUS(status); + + status = lefwStartLayer("CUT12", "CUT"); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("PEAK", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 100E6; + status = lefwLayerACFrequency(2, current); + CHECK_STATUS(status); + current[0] = 0.5E-6; + current[1] = 0.4E-6; + status = lefwLayerACTableEntries(2, current); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 1E6; + current[1] = 100E6; + status = lefwLayerACFrequency(2, current); + CHECK_STATUS(status); + current[0] = 0.6E-6; + current[1] = 0.5E-6; + status = lefwLayerACTableEntries(2, current); + CHECK_STATUS(status); + status = lefwLayerACCurrentDensity("RMS", 0); + CHECK_STATUS(status); + current[0] = 100E6; + current[1] = 800E6; + status = lefwLayerACFrequency(2, current); + CHECK_STATUS(status); + current[0] = 0.5E-6; + current[1] = 0.4E-6; + status = lefwLayerACTableEntries(2, current); + CHECK_STATUS(status); + status = lefwEndLayer("CUT12"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("PC"); + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 1); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(0.4); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.6); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("PWL ( ( 1 0.103 ) )"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("PWL ( ( 1 0.000156 ) ( 10 0.001 ) )"); + CHECK_STATUS(status); + status = lefwLayerDCCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 20.0; + current[1] = 50.0; + current[2] = 100.0; + status = lefwLayerDCWidth(3, current); + CHECK_STATUS(status); + current[0] = 1.0E-6; + current[1] = 0.7E-6; + current[2] = 0.5E-6; + status = lefwLayerDCTableEntries(3, current); + CHECK_STATUS(status); + status = lefwEndLayerRouting("PC"); + CHECK_STATUS(status); + + status = lefwStartLayer("CA", "CUT"); + CHECK_STATUS(status); + status = lefwLayerDCCurrentDensity("AVERAGE", 0); + CHECK_STATUS(status); + current[0] = 2.0; + current[1] = 5.0; + current[2] = 10.0; + status = lefwLayerDCWidth(3, current); + CHECK_STATUS(status); + current[0] = 0.6E-6; + current[1] = 0.5E-6; + current[2] = 0.4E-6; + status = lefwLayerDCTableEntries(3, current); + CHECK_STATUS(status); + status = lefwEndLayer("CA"); + CHECK_STATUS(status); + free((char*)current); + + status = lefwStartLayerRouting("M1"); + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 1); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.6); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(7); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.103"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000156"); + CHECK_STATUS(status); + status = lefwEndLayerRouting("M1"); + CHECK_STATUS(status); + + status = lefwStartLayer("V1", "CUT"); + CHECK_STATUS(status); + status = lefwLayer(0.6, "CA"); + CHECK_STATUS(status); + status = lefwEndLayer("V1"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("M2"); + CHECK_STATUS(status); + status = lefwLayerRouting("VERTICAL", 0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(8); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.0608"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000184"); + CHECK_STATUS(status); + status = lefwEndLayerRouting("M2"); + CHECK_STATUS(status); + + status = lefwStartLayer("V2", "CUT"); + CHECK_STATUS(status); + status = lefwEndLayer("V2"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("M3"); + CHECK_STATUS(status); + status = lefwLayerRouting("HORIZONTAL", 0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingWireExtension(8); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.0608"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000184"); + CHECK_STATUS(status); + status = lefwEndLayerRouting("M3"); + CHECK_STATUS(status); + + status = lefwStartLayer("V3", "CUT"); + CHECK_STATUS(status); + status = lefwEndLayer("V3"); + CHECK_STATUS(status); + + status = lefwStartLayerRouting("MT"); + CHECK_STATUS(status); + status = lefwLayerRouting("VERTICAL", 0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingPitch(1.8); + CHECK_STATUS(status); + status = lefwLayerRoutingSpacing(0.9); + CHECK_STATUS(status); + status = lefwLayerRoutingResistance("0.0608"); + CHECK_STATUS(status); + status = lefwLayerRoutingCapacitance("0.000184"); + CHECK_STATUS(status); + status = lefwEndLayerRouting("MT"); + CHECK_STATUS(status); + + status = lefwStartLayer("OVERLAP", "OVERLAP"); + CHECK_STATUS(status); + status = lefwEndLayer("OVERLAP"); + CHECK_STATUS(status); + return 0; +} + +// VIA +int viaCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + status = lefwStartVia("RX_PC", "DEFAULT"); + CHECK_STATUS(status); + status = lefwViaResistance(2); + CHECK_STATUS(status); + status = lefwViaLayer("RX"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.7, -0.7, 0.7, 0.7); + CHECK_STATUS(status); + status = lefwViaLayer("CUT12"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.25, -0.25, 0.25, 0.25); + CHECK_STATUS(status); + status = lefwViaLayer("PC"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.6, -0.6, 0.6, 0.6); + CHECK_STATUS(status); + status = lefwStringProperty("stringProperty", "DEFAULT"); + CHECK_STATUS(status); + status = lefwRealProperty("realProperty", 32.33); + CHECK_STATUS(status); + status = lefwIntProperty("COUNT", 34); + CHECK_STATUS(status); + status = lefwEndVia("RX_PC"); + CHECK_STATUS(status); + + status = lefwStartVia("M2_M3_PWR", NULL); + CHECK_STATUS(status); + status = lefwViaResistance(0.4); + CHECK_STATUS(status); + status = lefwViaLayer("M2"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.35, -1.35, 1.35, 1.35); + CHECK_STATUS(status); + status = lefwViaLayer("V2"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.35, -1.35, -0.45, 1.35); + CHECK_STATUS(status); + status = lefwViaLayerRect(0.45, -1.35, 1.35, -0.45); + CHECK_STATUS(status); + status = lefwViaLayerRect(0.45, 0.45, 1.35, 1.35); + CHECK_STATUS(status); + status = lefwViaLayer("M3"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.35, -1.35, 1.35, 1.35); + CHECK_STATUS(status); + status = lefwEndVia("M2_M3_PWR"); + CHECK_STATUS(status); + + status = lefwStartVia("IN1X", NULL); + CHECK_STATUS(status); + status = lefwViaLayer("CUT01"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-0.45, -0.45, 0.45, 0.45); + CHECK_STATUS(status); + status = lefwIntProperty("COUNT", 1); + CHECK_STATUS(status); + status = lefwEndVia("IN1X"); + CHECK_STATUS(status); + return 0; +} + +// VIARULE +int viaRuleCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + status = lefwStartViaRule("VIALIST12"); + CHECK_STATUS(status); + lefwAddComment("Break up the old lefwViaRule into 2 routines"); + lefwAddComment("lefwViaRuleLayer and lefwViaRuleVia"); + status = lefwViaRuleLayer("M1", NULL, 9.0, 9.6, 0, 0); + CHECK_STATUS(status); + status = lefwViaRuleLayer("M2", NULL, 3.0, 3.0, 0, 0); + CHECK_STATUS(status); + status = lefwViaRuleVia("VIACENTER12"); + CHECK_STATUS(status); + status = lefwStringProperty("vrsp", "new"); + CHECK_STATUS(status); + status = lefwIntProperty("vrip", 1); + CHECK_STATUS(status); + status = lefwRealProperty("vrrp", 4.5); + CHECK_STATUS(status); + status = lefwEndViaRule("VIALIST12"); + CHECK_STATUS(status); + + // VIARULE with GENERATE + lefwAddComment("Break up the old lefwViaRuleGenearte into 4 routines"); + lefwAddComment("lefwStartViaRuleGen, lefwViaRuleGenLayer,"); + lefwAddComment("lefwViaRuleGenLayer3, and lefwEndViaRuleGen"); + status = lefwStartViaRuleGen("VIAGEN12"); + CHECK_STATUS(status); + status = lefwViaRuleGenLayer("M1", NULL, 0.1, 19, 0, 0); + CHECK_STATUS(status); + status = lefwViaRuleGenLayer("M2", NULL, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwViaRuleGenLayer3("V1", -0.8, -0.8, 0.8, 0.8, 5.6, 6.0, 0.2); + CHECK_STATUS(status); + status = lefwEndViaRuleGen("VIAGEN12"); + CHECK_STATUS(status); + return 0; +} + + // NONDEFAULTRULE +int nonDefaultCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + status = lefwStartNonDefaultRule("RULE1"); + CHECK_STATUS(status); + status = lefwNonDefaultRuleLayer("RX", 10.0, 2.2, 6, 0, 0, 0); + CHECK_STATUS(status); + status = lefwNonDefaultRuleLayer("PC", 10.0, 2.2, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwNonDefaultRuleLayer("M1", 10.0, 2.2, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwStartVia("nd1VARX0", NULL); + CHECK_STATUS(status); + status = lefwViaResistance(0.2); + CHECK_STATUS(status); + status = lefwViaLayer("RX"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-3, -3, 3, 3); + CHECK_STATUS(status); + status = lefwViaLayer("CUT12"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-1.0, -1.0, 1.0, 1.0); + CHECK_STATUS(status); + status = lefwViaLayer("PC"); + CHECK_STATUS(status); + status = lefwViaLayerRect(-3, -3, 3, 3); + CHECK_STATUS(status); + status = lefwEndVia("nd1VARX0"); + CHECK_STATUS(status); + status = lefwEndNonDefaultRule("RULE1"); + CHECK_STATUS(status); + return 0; +} + +// MINFEATURE & DIELECTRIC +int minFeatureCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + status = lefwMinFeature(0.1, 0.1); + CHECK_STATUS(status); + return 0; +} + +// SITE +int siteCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + status = lefwSite("CORE1", "CORE", "X", 67.2, 6); + CHECK_STATUS(status); + status = lefwSiteRowPattern("Fsite", 0); + CHECK_STATUS(status); + status = lefwSiteRowPatternStr("Lsite", "N"); + CHECK_STATUS(status); + status = lefwSiteRowPatternStr("Lsite", "FS"); + CHECK_STATUS(status); + lefwEndSite("CORE1"); + CHECK_STATUS(status); + status = lefwSite("CORE", "CORE", "Y", 3.6, 28.8); + CHECK_STATUS(status); + lefwEndSite("CORE"); + CHECK_STATUS(status); + status = lefwSite("MRCORE", "CORE", "Y", 3.6, 28.8); + CHECK_STATUS(status); + lefwEndSite("MRCORE"); + CHECK_STATUS(status); + status = lefwSite("IOWIRED", "PAD", NULL, 57.6, 432); + CHECK_STATUS(status); + lefwEndSite("IOWIRED"); + CHECK_STATUS(status); + return 0; +} + +// MACRO +int macroCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + double *xpath; + double *ypath; + + checkType(c); + status = lefwStartMacro("CHK3A"); + CHECK_STATUS(status); + status = lefwMacroClass("RING", NULL); + CHECK_STATUS(status); + status = lefwMacroOrigin(0.9, 0.9); + CHECK_STATUS(status); + status = lefwMacroSize(10.8, 28.8); + CHECK_STATUS(status); + status = lefwMacroSymmetry("X Y R90"); + CHECK_STATUS(status); + status = lefwMacroSite("CORE"); + CHECK_STATUS(status); + status = lefwStartMacroPin("GND"); + CHECK_STATUS(status); + status = lefwMacroPinDirection("INOUT"); + CHECK_STATUS(status); + status = lefwMacroPinTaperRule("RULE1"); + CHECK_STATUS(status); + status = lefwMacroPinUse("GROUND"); + CHECK_STATUS(status); + status = lefwMacroPinShape("ABUTMENT"); + CHECK_STATUS(status); + // MACRO - PIN + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M1", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(-0.9, 3, 9.9, 6, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwStringProperty("TYPE", "special"); + CHECK_STATUS(status); + status = lefwIntProperty("intProp", 23); + CHECK_STATUS(status); + status = lefwRealProperty("realProp", 24.25); + CHECK_STATUS(status); + status = lefwMacroPinAntennasize(1, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennasize(2, "M2"); + CHECK_STATUS(status); + status = lefwEndMacroPin("GND"); + CHECK_STATUS(status); + status = lefwStartMacroPin("VDD"); + CHECK_STATUS(status); + status = lefwMacroPinDirection("INOUT"); + CHECK_STATUS(status); + status = lefwMacroPinUse("POWER"); + CHECK_STATUS(status); + status = lefwMacroPinShape("ABUTMENT"); + CHECK_STATUS(status); + // MACRO - PIN - PORT + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M1", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(-0.9, 21, 9.9, 24, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMetalArea(3, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMetalArea(4, "M2"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMetalLength(5, "M1"); + CHECK_STATUS(status); + status = lefwMacroPinAntennaMetalLength(6, "M2"); + CHECK_STATUS(status); + status = lefwEndMacroPin("VDD"); + CHECK_STATUS(status); + status = lefwStartMacroPin("PA3"); + CHECK_STATUS(status); + status = lefwMacroPinDirection("INPUT"); + CHECK_STATUS(status); + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M1", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(1.35, -0.45, 2.25, 0.45, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(-0.45, -0.45, 0.45, 0.45, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("PC", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(-0.45, 12.15, 0.45, 13.05, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("PC", 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(8.55, 8.55, 9.45, 9.45, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(6.75, 6.75, 7.65, 7.65, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(6.75, 8.75, 7.65, 9.65, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroPinPortLayerRect(6.75, 10.35, 7.65, 11.25, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwEndMacroPin("PA3"); + CHECK_STATUS(status); + // MACRO - OBS + status = lefwStartMacroObs(); + CHECK_STATUS(status); + status = lefwMacroObsLayer("M1", 0); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(6.6, -0.6, 9.6, 0.6, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(4.8, 12.9, 9.6, 13.2, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(3, 13.8, 7.8, 16.8, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(3, -0.6, 6, 0.6, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroObs(); + CHECK_STATUS(status); + status = lefwStringProperty("stringProp", "first"); + CHECK_STATUS(status); + status = lefwIntProperty("integerProp", 1); + CHECK_STATUS(status); + status = lefwRealProperty("WEIGHT", 30.31); + CHECK_STATUS(status); + status = lefwEndMacro("CHK3A"); + CHECK_STATUS(status); + + // 2nd MACRO + status = lefwStartMacro("INV"); + CHECK_STATUS(status); + status = lefwMacroClass("CORE", NULL); + CHECK_STATUS(status); + status = lefwMacroForeign("INVS", 0, 0, -1); + CHECK_STATUS(status); + status = lefwMacroSize(67.2, 24); + CHECK_STATUS(status); + status = lefwMacroSymmetry("X Y R90"); + CHECK_STATUS(status); + status = lefwMacroSite("CORE1"); + CHECK_STATUS(status); + status = lefwStartMacroPin("Z"); + CHECK_STATUS(status); + status = lefwMacroPinDirection("OUTPUT"); + CHECK_STATUS(status); + status = lefwMacroPinUse("SIGNAL"); + CHECK_STATUS(status); + status = lefwMacroPinShape("ABUTMENT"); + CHECK_STATUS(status); + status = lefwStartMacroPinPort(NULL); + CHECK_STATUS(status); + status = lefwMacroPinPortLayer("M2", 5.6); + CHECK_STATUS(status); + xpath = (double*)malloc(sizeof(double)*7); + ypath = (double*)malloc(sizeof(double)*7); + xpath[0] = 30.8; + ypath[0] = 9; + xpath[1] = 42; + ypath[1] = 9; + xpath[2] = 30.8; + ypath[2] = 9; + xpath[3] = 42; + ypath[3] = 9; + xpath[4] = 30.8; + ypath[4] = 9; + xpath[5] = 42; + ypath[5] = 9; + xpath[6] = 30.8; + ypath[6] = 9; + status = lefwMacroPinPortLayerPath(7, xpath, ypath, 0, 0, 0, 0); + CHECK_STATUS(status); + status = lefwEndMacroPinPort(); + CHECK_STATUS(status); + status = lefwEndMacroPin("Z"); + free((char*)xpath); + free((char*)ypath); + // MACRO - OBS + status = lefwStartMacroObs(); + CHECK_STATUS(status); + status = lefwMacroObsLayer("M1", 0); + CHECK_STATUS(status); + status = lefwMacroObsLayerRect(24.1, 1.5, 43.5, 208.5, 0, 0, 0, 0); + CHECK_STATUS(status); + xpath = (double*)malloc(sizeof(double)*2); + ypath = (double*)malloc(sizeof(double)*2); + xpath[0] = 8.4; + ypath[0] = 3; + xpath[1] = 8.4; + ypath[1] = 124; + status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0); + CHECK_STATUS(status); + xpath[0] = 58.8; + ypath[0] = 3; + xpath[1] = 58.8; + ypath[1] = 123; + status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0); + CHECK_STATUS(status); + xpath[0] = 64.4; + ypath[0] = 3; + xpath[1] = 64.4; + ypath[1] = 123; + status = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0); + CHECK_STATUS(status); + free((char*)xpath); + free((char*)ypath); + status = lefwEndMacroObs(); + CHECK_STATUS(status); + status = lefwEndMacro("INV"); + CHECK_STATUS(status); + return 0; +} + +// ANTENNA +int antennaCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + status = lefwAntenna("INPUTPINANTENNASIZE", 1); + CHECK_STATUS(status); + status = lefwAntenna("OUTPUTPINANTENNASIZE", -1); + CHECK_STATUS(status); + status = lefwAntenna("INOUTPINANTENNASIZE", -1); + CHECK_STATUS(status); + status = lefwNewLine(); + CHECK_STATUS(status); + return 0; +} + +// BEGINEXT +int extCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + status = lefwStartBeginext("SIGNATURE"); + CHECK_STATUS(status); + status = lefwBeginextCreator("CADENCE"); + CHECK_STATUS(status); + status = lefwBeginextDate(); + CHECK_STATUS(status); + status = lefwEndBeginext(); + CHECK_STATUS(status); + return 0; +} + +int endLibCB(lefwCallbackType_e c, lefiUserData ud) { + int status; + + checkType(c); + status = lefwEnd(); + CHECK_STATUS(status); + return 0; +} + +main(int argc, char** argv) { + char* outfile; + int status; // return code, if none 0 means error + int res; + + // assign the default + strcpy(defaultOut, "lef.in"); + outfile = defaultOut; + fout = stdout; + userData = 0x01020304; + + double* axis; + double* num1; + double* num2; + double* num3; + + int encrypt = 0; // if user wants encrypted output + + argc--; + argv++; + while (argc--) { + if (strcmp(*argv, "-o") == 0) { // output filename + argv++; + argc--; + outfile = *argv; + if ((fout = fopen(outfile, "w")) == 0) { + fprintf(stderr, "ERROR: could not open output file\n"); + return 2; + } + } else if (strncmp(*argv, "-h", 2) == 0) { // compare with -h[elp] + fprintf(stderr, "Usage: lefwrite [-o ] [-help] [-e]\n"); + return 1; + } else if (strcmp(*argv, "-e") == 0) { // user wants to write out encrpyted + encrypt = 1; + } else { + fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv); + return 2; + } + argv++; + } + + // initalize + // status = lefwInit(fout); + // CHECK_STATUS(status); + status = lefwInitCbk(fout); + CHECK_STATUS(status); + + if (encrypt) { + // user wants encrypted output, make sure to call lefwCloseEncrypt() + // before calling fclose(); + status = lefwEncrypt(); + CHECK_STATUS(status); + } + + // set the callback functions + lefwSetAntennaCbk(antennaCB); + lefwSetBusBitCharsCbk(busBitCharsCB); + lefwSetDividerCharCbk(dividerCB); + lefwSetEndLibCbk(endLibCB); + lefwSetExtCbk(extCB); + lefwSetLayerCbk(layerCB); + lefwSetMacroCbk(macroCB); + lefwSetMinFeatureCbk(minFeatureCB); + lefwSetNonDefaultCbk(nonDefaultCB); + lefwSetPropDefCbk(propDefCB); + lefwSetSiteCbk(siteCB); + lefwSetUnitsCbk(unitsCB); + lefwSetUserData((void*)3); + lefwSetVersionCbk(versionCB); + lefwSetViaCbk(viaCB); + lefwSetViaRuleCbk(viaRuleCB); + + res = lefwWrite(fout, outfile, (void*)userData); + + if (encrypt) { + // output has been written in encrypted, need to close the encrypted + // buffer + status = lefwCloseEncrypt(); + CHECK_STATUS(status); + } + + fclose(fout); + return 0; +} diff --git a/lefdef/src/lef/lefzlib/CMakeLists.txt b/lefdef/src/lef/lefzlib/CMakeLists.txt new file mode 100644 index 00000000..7d9cc991 --- /dev/null +++ b/lefdef/src/lef/lefzlib/CMakeLists.txt @@ -0,0 +1,17 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + + include_directories ( ${LEFDEF_SOURCE_DIR}/src/lef/lef + ${LEFDEF_SOURCE_DIR}/src/lef/lefzlib + ) + + set ( includes lefzlib.hpp + ) + + set ( cpps lefzlib.cpp + ) + + add_library ( lefzlib ${cpps} ) + set_target_properties ( lefzlib PROPERTIES VERSION 5.8 SOVERSION 5 ) + + install ( TARGETS lefzlib DESTINATION lib${LIB_SUFFIX} ) + install ( FILES ${includes} DESTINATION include/lef ) diff --git a/lefdef/src/lef/lefzlib/Makefile b/lefdef/src/lef/lefzlib/Makefile new file mode 100644 index 00000000..36e523fe --- /dev/null +++ b/lefdef/src/lef/lefzlib/Makefile @@ -0,0 +1,13 @@ +LEF_TABNAME = lefzlib + +FAKE_ALL: all + +DIRNAME = lefzlib + +LIBTARGET = liblefzlib.a + +PUBLIC_HDRS = lefzlib.hpp + +LIBSRCS = lefzlib.cpp + +include ../template.mk diff --git a/lefdef/src/lef/lefzlib/lefzlib.cpp b/lefdef/src/lef/lefzlib/lefzlib.cpp new file mode 100644 index 00000000..fc9498bc --- /dev/null +++ b/lefdef/src/lef/lefzlib/lefzlib.cpp @@ -0,0 +1,73 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#include +#include +#include +#include +#include +#include +#include "zlib.h" +#include "lefzlib.hpp" +#include "lefrReader.hpp" + +/* + * Private functions: + */ +size_t lefGZip_read(FILE* file, char* buf, size_t len) { + return (gzread((gzFile)file, buf, len)); +} + +/* + * Public functions: + */ +lefGZFile +lefGZipOpen(const char *gzipPath, const char* mode) { + + if (!gzipPath) + return NULL; + + lefGZFile fptr = gzopen(gzipPath, mode); + if (fptr) { + /* successfully open the gzip file */ + /* set the read function to read from a compressed file */ + lefrSetReadFunction(lefGZip_read); + return (lefGZFile)fptr; + } else + return NULL; +} + +int lefGZipClose(lefGZFile filePtr) { + lefrUnsetReadFunction(); + return (gzclose((gzFile)filePtr)); +} + +int lefrReadGZip(lefGZFile file, const char* gzipFile, lefiUserData uData) { + return lefrRead((FILE*)file, gzipFile, uData); +} diff --git a/lefdef/src/lef/lefzlib/lefzlib.hpp b/lefdef/src/lef/lefzlib/lefzlib.hpp new file mode 100644 index 00000000..ff710545 --- /dev/null +++ b/lefdef/src/lef/lefzlib/lefzlib.hpp @@ -0,0 +1,55 @@ +// ***************************************************************************** +// ***************************************************************************** +// Copyright 2012, Cadence Design Systems +// +// This file is part of the Cadence LEF/DEF Open Source +// Distribution, Product Version 5.8. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. +// +// For updates, support, or to become part of the LEF/DEF Community, +// check www.openeda.org for details. +// +// $Author: dell $ +// $Revision: #1 $ +// $Date: 2017/06/06 $ +// $State: $ +// ***************************************************************************** +// ***************************************************************************** + +#ifndef LEFZLIB_H + +typedef void* lefGZFile; + +/* + * Name: lefGZipOpen + * Description: Open a gzip file + * Returns: A file pointer + */ +extern lefGZFile lefGZipOpen(const char* gzipFile, const char* mode); + +/* + * Name: lefGZipClose + * Description: Close a gzip file + * Returns: 0 if no errors + */ +extern int lefGZipClose(lefGZFile filePtr); + +/* + * Name: lefrReadGZip + * Description: Parse a lef gzip file + * Returns: 0 if no errors + */ +extern int lefrReadGZip(lefGZFile file, const char* gzipFile, void* uData); + +#endif diff --git a/lefdef/src/lef/template.mk b/lefdef/src/lef/template.mk new file mode 100644 index 00000000..8411dab2 --- /dev/null +++ b/lefdef/src/lef/template.mk @@ -0,0 +1,94 @@ +SHELL=/bin/sh + +OS_TYPE := $(shell uname -s) +ifeq ($(OS_TYPE),AIX) + ARCH=ibmrs + CXX=/usr/bin/xlC_r -+ -Dibmrs + CC=/usr/bin/cc_r -Dibmrs +endif +ifeq ($(OS_TYPE),HP-UX) + ARCH=hppa + CXX=/opt/aCC/bin/aCC + CXXFLAGS=+DAportable -AA + BIN_LINK_FLAGS=-lPW +endif + +ifeq ($(OS_TYPE),SunOS) + ARCH=sun4v + CXX=CC + CXXFLAGS=-g +endif + +ifeq ($(OS_TYPE),Linux) + ARCH=lnx86 + CXX=g++ + CC=gcc +endif + +.SUFFIXES: $(SUFFIXES) .cpp + + +TMP1 = $(LIBSRCS:.cpp=.o) +TMP2 = $(TMP1:.cc=.o) +LIBOBJS = $(TMP2:.c=.o) + +TMP3 = $(BINSRCS:.cpp=.o) +TMP4 = $(TMP3:.cc=.o) +BINOBJS = $(TMP4:.c=.o) + +all: $(LIBTARGET) $(BINTARGET) + +ifdef BINTARGET +INSTALLED_BIN = ../bin/$(BINTARGET) +endif + + +$(INSTALLED_BIN): $(BINTARGET) + @mkdir -p ../bin + @echo $< =\> $@ + @rm -f $(INSTALLED_BIN) + @cp $(BINTARGET) $(INSTALLED_BIN) + +installbin: $(INSTALLED_BIN) + +ifdef LIBTARGET +INSTALLED_LIB = ../lib/$(LIBTARGET) +endif + + +$(INSTALLED_LIB): $(LIBTARGET) + @mkdir -p ../lib + @echo $< =\> $@ + @rm -f $(INSTALLED_LIB) + @cp $(LIBTARGET) $(INSTALLED_LIB) + +installlib: $(INSTALLED_LIB) + +install release: all installhdrs installlib installbin + +INSTALLED_HDRS = $(PUBLIC_HDRS:%=../include/%) +$(INSTALLED_HDRS): ../include/%: % + @mkdir -p ../include + @echo $< =\> $@ + @rm -f $@ + @cp -p $< $@ + +installhdrs: $(INSTALLED_HDRS) + +.cpp.o: + $(COMPILE.cc) -I../include $< + +.c.o: + $(COMPILE.c) -I../include $< + +$(LIBTARGET): $(LIBOBJS) + rm -f $(LIBTARGET) + $(AR) $(ARFLAGS) $(LIBTARGET) $^ + +$(BINTARGET): $(BINOBJS) $(LIBTARGET) $(LDLIBS) + rm -f $(BINTARGET) + $(LINK.cc) -o $(BINTARGET) $(BINOBJS) $(LIBTARGET) $(LDLIBS) $(BIN_LINK_FLAGS) + +clean doclean: + rm -f $(LIBTARGET) $(LIBOBJS) $(BINTARGET) $(BINOBJS) $(INSTALLED_LIB) \ + $(INSTALLED_BIN) $(INSTALLED_HDRS) lef.tab.c* lef.tab.h diff --git a/lefdef/src/lefdefReadme.txt b/lefdef/src/lefdefReadme.txt new file mode 100644 index 00000000..b303301d --- /dev/null +++ b/lefdef/src/lefdefReadme.txt @@ -0,0 +1,80 @@ +This directory contains the the 5.8 version of Library Exchange Format (LEF) and Design +Exchange Format (DEF). LEF and DEF are distributed free of charge. See the +License.txt file in the LEF and DEF modules for conditions attached to the use of this +software, and the copying or distribution of it. + +The Make programs for some systems may not be able to process the Makefile for the +LEF/DEF utilities. If your system's native Make program returns errors when building +LEF/DEF, use GNU Make, or change the Makefiles so that they work on your system. + +Mixing 5.4, 5.5, 5.6 and 5.7 Syntax with 5.8 Syntax + +Use caution when mixing versions 5.4, 5.5, 5.6, and 5.7 syntax in LEF and DEF files. If you +include obsolete 5.4, 5.5, 5.6 and 5.7 constructs in a 5.8 file, the reader generates a warning. + +Documentation + +Documentation for the LEF and DEF application programming interfaces can be found in +the lef/doc and def/doc subdirectories, but it has not yet been updated with the +changes required for the new 5.8 syntax. Please contact Cadence for the version of +the LEF/DEF 5.8 syntax. + +Bug Reporting + +Please report issues with this version of the LEF/DEF 5.8 parser directly to Cadence. +Email mguiney@cadence.com + +Platforms Supported + +The LEF/DEF utilities have been tested on Linux RH 5.5. They should also work on Solaris 5.10. + +Installation + +The following information explains how to compile the LEF and DEF packages. + +Installing LEF + +To install LEF, do the following: + +1. Change directories (cd) to the lef subdirectory containing the package's source code. +2. To compile and build the package, type the following command: +gmake + +3. To set DEBUG with OPTIMIZE_FLAG, type the following command: +gmake release + +4. To install headers before compiling lefrw lefdiff lefwrite, type the following +command: +gmake installhdrs + +5. Optionally, to run the tests that come with the package, type the following command: +./gmake test + +NOTE: To remove the program binaries and object files from the source code directory, +type the following command: + +gmake clean + + +Installing DEF + +To install DEF, do the following: + +1. Change directories (cd) to the def subdirectory containing the package's source code. +2. To compile and build the package, type the following command: +gmake + +3. To set DEBUG with OPTIMIZE_FLAG, type the following command: +gmake release + +4. To install headers before compiling defrw defdiff defwrite, type the following command: +gmake installhdrs + +5. Optionally, to run the tests that come with the package, type the following command: +./gmake test + +NOTE: To remove the program binaries and object files from the source code directory, +type the following command: + +gmake clean +

fXty1gLu_qY|LjEu#{k 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�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%0AhaiMA7Q^@ruaP2|5$-!ta3da|Yng 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 vhOTF;HV#^h_9vkh{rw*<0V`p8I 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 Jzx@7p{}0Ly0?+^e literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/lefdefrefIX.html b/lefdef/doc/lefdefref/lefdefrefIX.html new file mode 100644 index 00000000..bdd1ea8b --- /dev/null +++ b/lefdef/doc/lefdefref/lefdefrefIX.html @@ -0,0 +1,561 @@ + + + + + LEF/DEF 5.8 Language Reference -- Index + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Previous + + +Open PDF to print book + + + Next + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +

8*?Pw$X5HdfvpbI26Z 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
C4yrv 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
v+ThsRL&@4ZqoH7YlnexG4 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 z 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.20.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.20.png new file mode 100644 index 0000000000000000000000000000000000000000..33dd45aee8fdf42aab671ecb3d6e924579a7a070 GIT binary patch literal 10056 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 M$kGsd%l*m!0r_yph5!Hn literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.22.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.22.png new file mode 100644 index 0000000000000000000000000000000000000000..90c1cf97a64c43c9e014fd5ac5039b7eccbfa524 GIT binary patch literal 12490 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.23.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.23.png new file mode 100644 index 0000000000000000000000000000000000000000..eadd21c7e8aae45ec904e1f5001bd0a6847275be GIT binary patch literal 14443 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.24.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.24.png new file mode 100644 index 0000000000000000000000000000000000000000..e0113db6202b83fef73aba4e3b6a36800841e037 GIT binary patch literal 15778 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 MS9?|^Yl8g008zOHCjbBd literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.25.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.25.png new file mode 100644 index 0000000000000000000000000000000000000000..c13d77fbc00cd12f6d7355e0d2ab04d58f8d526c GIT binary patch literal 5391 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.26.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.26.png new file mode 100644 index 0000000000000000000000000000000000000000..211afce1ddc51ad4f9b153a6aa27a9d8682c2db3 GIT binary patch literal 10945 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 F{{#7f!7=~< literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.29.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.29.png new file mode 100644 index 0000000000000000000000000000000000000000..68b3a52aca7c5f0ce59d99230b1c4bacb0ab5ac0 GIT binary patch literal 24980 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.30.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.30.png new file mode 100644 index 0000000000000000000000000000000000000000..8c43812340caf6e42fbe2fe12ea4ee4a7e412b8e GIT binary patch literal 5615 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.33.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.33.png new file mode 100644 index 0000000000000000000000000000000000000000..2729048e65428d54373a49840b8383f39f7aaddc GIT binary patch literal 40201 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%0AA9=wL2Hoq_AifahxM$$)DB<3M8yWb8Si_x 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 Aw*UYD literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.34.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.34.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ad3c5c31cf9355ebe36d898d9b5012b4807ea5 GIT binary patch literal 7769 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 M%rBlRG;@3KAL0eW(f|Me literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.36.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.36.png new file mode 100644 index 0000000000000000000000000000000000000000..73988b9c467029147a0b58b2db2ef4bade97a368 GIT binary patch literal 7818 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 EKVvaiMF0Q* literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.37.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.37.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ca106d91a3264495e6ff5124fc4f31f8893616 GIT binary patch literal 18965 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 OA)2bXDwX%1hW`&`SH3L( literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.39.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.39.png new file mode 100644 index 0000000000000000000000000000000000000000..8573f10b034e15b1207c356b8b82f7bd16af7fab GIT binary patch literal 27104 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.40.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.40.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bda7aee41c0318ff65aac74b8dbbaf7b237b6a GIT binary patch literal 8944 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 WcLq;v8occRA&k$QEcngo`u_mz!YKU! literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.41.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.41.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d659aaf4b4e570c1ae3b3c50a2a92f7c438557 GIT binary patch literal 33814 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 R9yJOIbrqd!mCAR+{}*j?)H478 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.43.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.43.png new file mode 100644 index 0000000000000000000000000000000000000000..54aa32f36ad5db4708c879d8ffdc7014d0122ba3 GIT binary patch literal 16551 zcmb`vbySq!+dhhZ6j4GzN<>f?x}}jY7+^?;?(PohQc4&~hHf3Y8>B%>Ko}`$kroC- zy5a2c^ZmZRb>6eiU+1_MYv$Q|p56Q2*L~gBHvE;64B;K>J2*HvgfLkt6&#%F**G}Y zDDbX>lsVGdX5iztldQHY4$fU;?BBHl$$V>&`0zDU>$R$*#cK~^7jqn$R|=10tQ=im zyPCRKJH37+%q1W+X;U7AgYyUnCiPs+Gkq&Vw`8`*tJl)atk1awU#Rs)qB%@VX@MH{ zD9!d+;N$x@Wy!4IN8!36&S%JE%$V}c>Gywp2ub~{>1G4@cVB%79bb6~=Xb;Bc>5Vn z{Gd-og@lYpg`2ax0;AVl!>C(ZihuS8I!fX=u;RjPiM~2=YVUkFuA7k+-Q;hy8++%uulpKH5e9k-rN*OZfhOd6c~8OmpPj;@&i8Q#-xoUOo}Alzc^Y zIr_&x_sA$&~8n^Ho7ygK`VDjI0)l5lDs;k%bT zT2!H_c?$*4-kbQ7oAOYFUCANUcAk&&n`>tl+hL+O2J);&4mL$|c3!s4XKfTxuMcq* z+jmuGUX&=iq>3%4R{~L*aHa znT$#URTh!P`0%Fh_H^Wfx3v==jD0M_v~HiZmSenCodfNOEVeOm8LyD$UOZGR2or4z z!lRR#1as}Qv^4(G>Gjv2d2-H5H3p9S6i2PT4>{A&rY#BYhf!tnQiK}U&*T;e3JHm$ zv(NbD!E@7GULhZPj|G=ki(;V4>e`D@{>)c2z32Y$H25K2p`7cxFp*f~x6+?ZCTbQ&%HCmioALe*HBITdPhl zM&YpgZs42G`5H%ZJOnS*$C2$*Y_Xh8;oFXfB<`*pnf4JbY25wUdDbSZ%WQA=6LlBw zJxH-*Yj6zCvwlwe=QNJ=cEydaZ%{1!&O$Uqs* zt2k6Wg5~1aIfZ=TE;app)KSQ^+z%{wLf~W}5K8%Xav$fnDZ52JCD`$B(GG^lA*GJ0 zL!SBw5_Y~fZ)i>&S<)krL(Oj=on4?dQcK61!@4!YP4enXAPfyFDxacL>E6i){OK!P)mj;K_vcLgidTdLun z8d8C8&@fz$V81cXAZN!j{R!<@V1#rS4?)m$hKu}mBUj2bo3VlhP4xs6O6a|iJO5RO zE+KEVHIzBrI(0))<(l3^?wJY03$Kr3u33xmTHbJx?BTE)8Hf8O1pHpQWUUYpn`&9L zP97@LrJdwE<~&qp^1b|uKOTJP5vjb#-6KdF!y2B`K7vkGw2A1>akXVt=1tJ9`Zbm8 zMJG$p;~INWD8``u(1H(1*y(e-bK%uytJ%`9o4)U@!tD1C$;1BWjk@5d$Ix>!zDW3T z$m23UkK~}Ng{};0LglkKcMvZSh4E%tyovU|t1cSs@j3iV!#cwtdlXU9+5T;gsZ2-y zsIx-NkgK%DEQGx<&2*h&4|jdaP|tgx`~tV^BgjqdU*V?Sqx^+l)G@vLUp&QDIm7H{ zPy~er_-!dI40SPM8EaPvM^BqCPnVK28<`r*X6goSK8i~ZB<&|OM5Y^4LB#IkI7_9G za~vt1T#!K*S2RA}uTFvVS@FB**Ec67s^#mktEd!57^EO0!_>weyBQF6I_cLJ=%ULT zZpFx!S$`dTG}!dYut-+EK{BDajZxd;rafGx;iNyRp`eTXP72u=TFnkh9;6(m!8$8| zi`hS@)K9DNCxXiPvJ4uau4-Km(8SH89P97u22{B6w?3!vo!G205YbqelhN0C*g(oj1 zM$^nhn-46u-Sj>5lbF7DwfjD)>ra;O;r#JhKMD6D&w5p<-26fBtVoNV>@l*SD(A^( zbdmXAw8osPalp zJ}sjK{cx1h98#PfE~>z({)e)`?9gD-EK)iJ{EKC-~Z zMx%@Sx)qz780{!=x>)$9cbf2HH5Zd^S!A#;zN`f@_;y5+s@HOYW!wm9_v-E3J4wi7 z-n8bSqzRQB!%m*A1AG{=YP@!qfqP;E^iT6$kS=URULivRQ>CFX_E_K5@>!+d2iYp~ zct6-lz596wX^fbGIO4~=UE&D?)E@4&mvDwKPk7Ingm{ss!n*T?9ax#SxmhIMK848G zd#%FX7w~mD7v7^yAA~+9kAEt((yHI5s7&9JjA8-F^(3=)s)%Kp_x3O2(k`9Js^+(g zi&C44`sWR72pi7FcJqEG>3aW;mAUG#QeZ`v*A@sNMGk};hTsGy$IGjpn(FHM6K?uz zyUBSlLq_NNr@YfUo(fBBE?)B8tkOy%xmV~U389U1w!m(C9+Tlm;-)r4%BFNBQs zjk`J-HiHoyelY1OQH9u<^<|7=W0|VvqXhg)--a^TyUi}E(wT!$m+E|aHqLsvoc^+3 z7mD2+5-MX93H*jR<95O1SpnWF~{|RdYm^0 zAI5D6D`E_I|9tsJzJ0IR;=&ssEV8$APWTHxRe^bUfp2KG`#QxuTFG#5o>dziO30?b)4-jOVE3%w_X4obNN9&wE_BnXA}#_wL-0A*-UXr1c5`I}+UK5`|=mwGa` zklzq?OUi<-+y%8V!rJ$lUK`bzSaz*4uiIIyln1p@q&A&ko)CgAg+!E#=s{Wahlgt* zk)Gn3FlsO3hJs?fQ+7O#3&&(Xe&w^tF^Uhr(zn%L&Wf0Y+mX8s{!^JZ{B}`Qyfs6; z-kt+WBLqj`5Ol2t3mgWK^=4Qpi-A{{lajCe}5M9gTytjq66^TX) zhVx(RbvWmbtba$$iKZ=|U9PTL6pv5O&gQ@=x6vbQr5eR^4tuI|zn&|Oy2SKUae&8q zol>>7#u$1(c>z_H^kNr%6l#U=#(Y`R5c3fB)-vN5M#0wZj(xJ<67>BLw)zzzUC zRG8*~L;cgrF`F7kDC|uthtJa=j4yi~$DZzn&CME#xb4et5J!&}XV*$~H7aaRzUP>_Q zo9rWeS!K!yOr)oN zc4r$xZFHD2$g{E`A*% zL%R!QiXb`$*`ChvESy52$odbVY)FM8fVD-h-fueev8$@U2OM{wB2e$6$j$;-5o}uI zAqqA7;}33Zi03?7keB1sd<-SemLsj$SFKc>Sf@OhJ7)_>&6=T7@8XFZw#vbXa+*?l zy|Ijmu{&>OO`YBIn?LePP3OK{Vy#m@6See7yG;S4b|ICiuRbe+-ua8*tD_=s((Vdg^J;);!fFbrZ#^dteN2Aqz{e(xO+#n?r~%zu zQzY9`ZA>+i{G-l(!tG%%tCu+$v`=G953x~QhSB>n+y5#z5U$1=62F$J+VcFpxd_3_ z;m+Zz5*7p-Q#`q_E-$shb>f-d>`gZ#R~1J$-J2qL)z$ND?E7>g0%Lvfy@&>?6xMz_ zS>E^08Vbvv`nf?B`nzt?FwC06`INxR! zIc3GWuARsVS67Fv;F_UNTo!Of4^r$&Qj^SoPVFJ>?YF4d0)sW*h33H(x+`r zgDh*6Ugva_M}^!?2Jtv~$ta<`jV4VyVwU7Q>+`w0fgk#5I@Pvj)L^gfQUzT;L2h+z z+V0Vpc*2Y3w^jMr2C9B_b|WTk_OU;Gx{^HmTG>1@mizUgL@tt?;mnZ@-uhGKfi0Oh z^6c12c-ftwF&S?@K1hK{Q=+&|NtuDly&C@0SXO_Lj85Q#NpM5|a@laaxy#*EI@aY4 zdofzoIA$1WDU0RA*t^b;!1+l~k&v2-%;Pt#}9Gltx*!Q|MrVl%y5U?Fa&$XW9QNgARP=HtdPO220i31Ry)LEhWEE+f)q zKX59eYDP;^%9Z+KDAn?F76y>JG)gCI3gA%8;Uq}->*-iOoDpC zmxKvAd)g#!zEQPUU-M)7d0q5A&mO=$bt0H%rMrB8NvhJ^cUbU)Guf!)o$Lj^yeZi5 z3D_7bbo9gM@-eypo^9CnKWgHWenRqZw(9r@o#<;T`A?yrzy1S$Pj4&W^KV%>T6FUN zelsgFR&yv>(_-B3$chu$skXuW^QNS>1XTgd>$-j}5%&!IHO*7dVXmEdcjW{s>;v-O}y zc!7_6+9ojJ|M-D49H%;D?o~wFam2%?yEg?D`J$I@4q!W2BB9$e;*;rdd4BRh$RSLq z?+=~0_t=pi$2c}uyDl_0X6cywYL~nEXuIvof5Hu&@wA@Ned8v`rBGI!KfAdkJcJIo zbln-s6!*E@SH2qKS0q>g?RY~vJoYr)6Bv;<&=(peLdOn@!&$m-cF{odT zSBH+>PeY9->j)oUXGTZMT zu&sNe{U#T?l)m5B!lHAdjFf>P5&Eov%abzwCZdO;`-6`D;GhOsI6UO8vm)<=J^%cC zy4~!$yA1pHjUA&yT9B({X|#^5(=Bgx^P(?~d1~;XOaDs;J3AT?mt|YSGo6;;zlGon za9*&NH;}ojCAa*oJ|!g6{OIy*JK{A=`;EzXg25PcAF{ zRp!{$llW3yK45dQk~!1Uq^HaOe2MO=H{iTCGIs0(BnITSd#kz~UWPMgR@nRWbY1@5 zzI0$s#P(~lj$`cT^6C5u5n;LFsKP2Bg(ALEf{co)pX^V;r%}e+e@8GS)o^NF7O zf4a%T(d&z~a;doM>em!L%i}h**w5Oz<^iVv4WI00@rA<8@^q16fA*;waiW%QSexiYNYVj zGW>7)ny_TF?eY{;6HD~Yea!2BmMM0~pV@5WT`_K;b{2uea^S2T>8m0=wk-T= z7t>R)4|#grf9o}H;b99P*A|g)GwmhnnXI*)NaXyRMl?nvDtY=V`&WvCyIj7J32=%Fc4IqGcY}Q`7CRhoaQ{1v8c0Y; zTdmId>7RwpyAsDn3^3g1-;C@Unh(C~QgZ42yh>aq0WWAd7U`UF5@P%R#(qE){bN+x z$ME!mcXcjDGmEhw5yz8V!2l2ex;fV1d_G?F4lsXHomDC(!W$L>rOdd^J(jfKDvs4rD^sZ4WNBUlZ+-T7*?<|eaE zY97bH>z3NF$q$Wn8a*Nr0XMtUR#Q=0oW&Jgq-63Ramg7egA|Ktc)-%KrH3JlicDIL z{0t}D<^g&QGa4(H|*$E5bzx0Z*;$mlxFY; zZR<}J=J-H%b|I0=BKNsAheggI&$D93vjlT06~fm8xG#ENN;W1)9t(_=H6cA>k01nx%{BJ$x=0>4Y1Mr{9!b z&F&J9d(gj)`?9M~VQ9S%V$W_-qhe0WH5ESRE6te`651(hTo-})62Bd!7-l? zJY|?&T);^IZjEQ3BS6y-sN$Tv(6wO5Y<1aMZuT>4^z~i zU}(;RgLsphb=%!_tc>N3zEhmCKw4me)~VX9=7N+Z)2an0Sx2&#k=Lp;*LZrmqT7zS zDH#M_4Mfkl*t^pwZ>dGAjN%k>DTR{@5d@{?qj2c&ar(Iz1?eD$tsrt*^kM?34KU>~ z8yMT7oBL3ZnojN$vxN6&VUzd@4xF)SYKu#(9kS&7b1y1W@?dk6BTj71$)k2|gMK%q zRDshFYyWLs8-5jP{2mV3dzF(uYwJ9gjJHjai$s)~%n{o|VxE6>aqxswsjC;p4O(u3 z6mONidyMz{)Sqsj?aD}J!+&FN*i`Bsa3$k$j?2KwLO)^} zBYB~4nqDkAeJL@oPTSdq6Kecg^r5=CwUczUO=H=SxAeriCGuD7UKc4ipw{ ztdyi-eA!oDB!VU5JD=aySeC>wR#-HRIru_0NYtSC=e}eQRV_m#FYp{0fT4mKBI5t> zTMU|`8Veq%#Uog9K54KSXcqFYy3l53+>naRx5K9B>mgO;Jqn-a~UuWw9zkBsveDl*d6 z$R7-6@G=YQ^A z{kaQmD=L!978?Gx(WumUDs7-?V{EQ1NYIJ(uDuMkurUwj=rmh~0T-&!MXhgGKblFR z0OL&t9qWpCSxNRES3d1jG>afcIQh4GQ|1~x!0K=8Xb)YTpO9<9Huh;RfOEj6IXjz0 zZo?MM2Ftm@ATYAXKd2V|odqv&cE}v&HmDdocUs6suHj(hj0o)UisW5*o#+2wEkLhx z!JXl%oi4HdDh?PjS&H~ZVP6dNh2x!VV%JXem3jU5wMTeWEybunc9;j-;M$XfRdx%h z;QHIx0F*cl5sYt~@dkZz3wNh;`XfB6Id)1gh6}{`yw=|vt-3m?vhylX_C#1(bYxeO zFwm=p|E+TQEdNvy!k8+0$tqP^;?@{N*voM>%6FaiFT+zjXx`z5VHaZ49M{PuPY=fc zy(*lGR)7NaoN+DNpq#R|l4Brq?W7fbizeQLD%8wpQP|=8vg+H!oEIBU6su>pp7dCG z*Gcb~^JRkQx#DQ!T$wSInq|?l8d;?1twl|O%r)n|mkEzGH<25u{nyn=)zv{&Ucv7L z5z>ic+8>QF*M@aj2cERpF529jXeeO09D$coREt#R2@p|+>fD|`TCWAss47DN6m81ff+H3xp&i7MZo+?Dr>XxRoj=Un0p z=g`L~b&^Q76=1C~N< zRRajc!`d(5q5kUX2@vKhC+)9j)cFvJ=Cw2SJzDl_uC2lV^BKAG_*^~s%mbNE z7x63mF1&B)mhN_Q|xIIlP|O7(*kn3*15UQ*w~^Xh5)bKheC~ zxw+#089pT!$D@B!>(W~CRfVkT?|+>HP*=;RZX#I%?>f*%4{U@PYcv^QH{r>W~O zdh-!D_iwg3>yleymb6CsVaPwM04cxO>N$-8PWK1bZT(Orm7V<9H(QQZka0Cog|++v#uSt049I|GpA3Ub~Og^oVOG-U{ld zGB51(Xx+=0acuKD`aKs}>E2|oO>uSm=^l2VsY)TRM9!B)##D#i;-ma-`i6BJ0#ntN z=w7-2g^9Dnt+QX*F~}xDz*HDMJ^8T6dzx6w!O&tZJK|Z?wqdJ&bbn zHSLX_FGxx|dHB@*e33yHnqGv860=BGn996h(LW=iOqymF+Y4 z`zGQPOxS`RC-V4kbD=G#Hn@&h54UDyM#&>9TYQdOn0>LW=jHHL*!D6gOUb`Ga`=1h z0dzPJn#!K9lz}SQnyg$JD^wkzxK%=)Xm0P|@PA@p`Df3GYjijpfqR4(C~_OspEwHtW>`d+Fr?7nm{(@XR{+2cZal z$K!hU<5nX62%w=_yC2F+MR0o2iei~_NQ!LX7&sTd)A?TMUFxko>+hG;btt3Mybxny z9~V{|8O9Cwb^Ze4=mMt-2}p#A7%iZo;vJb@ZqC%B`3HxsYIt}lz5>Zb%EOpmY#;7o zi5~VJfNq{RP~(|a@P6x}o{KVytn4tV!11!M)PZaA*{bL0Ov&9uXw4@7s4Cf8L+=fm zy#~^Oqt3gMHTFKmj!4x&2uvo1);#i|xHnnWa1d^vQe|VAe5ayBgN-&tRN9H2E%A*E zrTlT5+L+6ZnX-7%hCECPDjfhyIhNHhK7c>slQ#wmS+3Jkh3?s%5+D zQv$BD2E-BTuRfK@_lf^${|6%;hJF!MZk;+naifG>t(>6q*U?$wI=%B3MuX8yHLPCh zp9wc|C|q4Y$RZW!z;NT`fZGS}tFoIBZ27#odW^2Kzr@p54Oxr%ro3z?k46MWNi*~$ zmtlfB-UPysQj)yJVSVLi7p=)8nKU6E15Qw(fVdaiEkJyZlYN~Podb3kYEt_?lMMs= zKQV9lU&7S-9)>Kl620r}P?YsiV`QSp#Wcoa^g-y)+mFI{-P%@H=at?wmttIj^5(qj-^j);N3e(AEG?O~cV&p8 z19i39V9o)Pjo0l_esbsnJlv7@N~kve*`W6c1FJmu^oyN*J$Y^mK@yG|A$^ze>KRt+ zuAOlN&G-UT1S$`K8br!`#3)bif%g5b9NXn+bBk$KPPWkvsCJIi2EADvd*wdL6MFxn zmmWd}3DKWmO}0)QJK#`}C>RXnxDYf%4Lwu`gb9#n(eROLpU#?B#TR}NTs&6-TB~$# zf`+{iXw32@u;unMtA0sp$IBXf>7-4+@=4S9dBvivuu7jKU2577vZ18*WPPumdK3n{ z>wHW{x3=0+zydS~F4Z=%gk>h{@?G+UVT~SGaHn{27ppJKd*9H1t5&;9R9ume^U=qI z5N-pUZ+Op%!y@vU70D*NUHg<6RPiOAPTg-Rq}_fkI_Dr1ZAy(NNIw$!EllG-!W^}M zPClD#TsWC^s>O_Z&{?cjA_$P9SWt{QQt zo3?+U8pVnuMF!OlXcUefXc|MH!hT!B$;=!&|R~uG_8dHTncKc{IGjxaozI|=i-qR*Qn`JI6ZkI3SGZC}v zM=2}_M`Id+m<_M#G)V6aD)LvOQb<`58{y4|y|Lyg{uu?nJe*IHIDsX!d98mWRzA88 z0$5QDDfcQrQUcWS^-Z4joWlf9B-X{~n^x1g{=wk}VKYtdNAmBa1f3u10Oa3zMg~K& zQ)!cc{p=|N--(tdzQKQISve(dYRkQQ`O86x9D;nuZ+=fqXOc-j*ACJLRCY;kuheuO zn0&QMogKC|Hj`K3vfqEGrBOJUfUIJ0Ga+XYI$kxjG~HZ3Kt1T=oRk zvwm02EM;vJ%l;Yt;P5__An2sKI_@<*>DQ!q4`QH`Zzupv5zPNOGVeB_A6W^w^V->Z?V1Rr$fSd_%&Sea!Jzv>f&ha zqG8CkyydXxf#X+!@DS&<3=i6;?j<``0f*ID0BUXs3?(!$)gCjE+?}iqU2Px_DTI&K@|h zQppjY%5R?B$G*S^xKJ#$emF-Q^hnD`em;KhIq?k;{WPHe`@3g*-Q51p{#XWFi{d|& z|9_d~|MIS>KFckCKI5OCb^$V4Dcwpo^I%~m$*|RPhh85IgIW%yivT)(yjat*X{#>$ zEw_GSjmP$n{4D>|x3_4m^hiNF*yR=FuNEV?5m%o_EKe?v+OC4=&fi=;y-VJ*+s}S= zj=pLJugE8HsrxR2TCiI0iqZn>^}DoUU&;Z4JpG>M3O&Hx=DX6L!1g%HYc<6i)_l5A zyxn^CyUPd(5kH(XeMj^#Rq!$@im)u#t00W`aOmkaPftVc6N4Zo62K9qo4ks1Td~^qXvYiz_g8pT`jz$`%!DF>6NU#0fy`A zXB4`s_zN=#5haxSu2lBYrWumn72p5X#k1XV^h4LN1&Zr-^JITidFs4=t+?v`rLzBS z+|dso$1;HA5-sd>p#8@T9`#;(TyR+F^bZL%ik?>IzQe4cy~9Tm_r&&%cR5q z3YGltsmB%DH3+zHa~=>2-I}B_jcfsg{<&x|{q!W!3_jQ<$wGu$r=UOt?ay@k)`v6Y z{s-*-8S29wLATazeYCs->!iP2s5yeIxaID%cnbsSbm`D^H)1^g8FZJ*^y;+yD)pl9 z@VgtxpyCkMB5B>v<-P!edVDc|b+M_;pJ&)C3)TWH|Ib*DKR-L->URM|&lK}=xw^cl zmT7fs*c*C!;-&!w@qnKoxK(*m^c~aM_Q2AB;pLOO-_)!^I@;kSa zh;KZ1NEdtaSL!aNG=Eh5rGXx~+*4>xeL>ypTs~o2Kl4}h1#SrlN3*Y%g(}Gfmn3uH zs1Ad;P9K<(%ab+B7|TInmu0;9BU-lWd+l}hfNFkP#lZ)tiCr-?zv4{YebeW}!qG1m zn0rL12wb-Jgvp_RqQeVxsGq^|vE1SIZjinxRV1YGQJmvU9mfEiOe8wndfG{tBgUQr z<}%E0&qGyEq_gdegJ|Cr$I%7w$)z-K&8yBH2pz9fs2W9hhv@m@5ULXgEC}Cu?s}VI z1{e%zenX9gsiO+Aq&k2^Kj;yQP-C_1^>+G>qkWu`2UGWrM)}V!{HvWC%WP9uHDb+* z@XWPo32+NfkhqM_H1Af=g@lAoTyQy+0S)5;ctQ0TptLvd`{xZQh?*D`lZJjgE{DL( z(iKL5oE9iUJ{W>qB1pEO+qa%Sx-4e7qv*URtd9MMgh*WHGRAf?4gx?koJ?`_HK46C zUTZ`9&aiv3mbE=y zi~08P<^1`okfpLMKD^a68qc1;i>gycA{jCEN?Bc9=Utt>uKM^RJTWvN6stHejSi_y zhKXEnpB9q%P9^tR15rNItbuttb37IzGz5WpE@!TV7*DRhhQR0_GpBBOBj2awiv(=Y zX(c9j_dC=4o^7X!SQ18{*zVtWlqB*y{pB|bUS{RY^zS318f*hA8{@_2+coE>6Kxie z*du7V)^>$$QNeZ{*gmzF6<$0(#uwXHm)j3LX5lOE&-9zz=fH_I+S9hb!7s1RhU)T( zkWPuL6pjYcA~9~fz;G@L1s;E>^9W1a*9XNs-}D~B|raD;88hJ zD9OnQSeHnvP98Fb6m$FQICWLkM`*FVuT@asioASBG@ckd9S_b$0k&bzZwl>fe~y=8 zBrlJbs=J)Fz%Wjful-JsTWo*(Pur1Cn~?f)@v97rLU~mXOZv6Tgca;JmetQ}f#yJO zJST>dc!xn5eI&5m1i;9zzM>8d{f7jOV`J^W9)Z*S4plr>T)ynJHR zO+WH+^inuUSu}*vGqcy>VVEXKRVHM)@X_I86>(fZ+ww-Pd9`j+`nlt^OWEk0#xW~D z>5;fRHgyh2))N#Ij0UtzZMk2m!3*6atl7+$yjbt)={dkm47}8Un{wS1`_n$1&QbAi zSd~K;;r0eMX;w9oSDG#?ZvMXM*D8)Xs^Uue6XIyhYtc~SSCE>0rPyzi8R!viIMUlW zH4m&In%*&ng{g%du-1uAE#td*2zEcKswXsWb@4nW2DfNZE$U~;JOBJZnrmyT|HJb( zhl&?qcE-o-$c?xmTI1XA?$Tv?kiw8=6X;Y#%4^^Tq#}4I;k(!qodGxzYZ(zYApkun zs0Z{H-?CqO!N@*PWt|ExFGv;?*&LD-xj;z(OdFnNMJzU!9UH;#Rm#F_dZ)IJB7$=~ z#5BhbARmR-S>+<;nO&7UfY>19G2L~zbyQ7{k?va%Jg$SlDm$s!-R{UEgL@)azi^O? zGs2LV#sD{Zt|Mloq=!;#CWOqgOs6XY7a_&Q?SbQ>U63p3@jLyv z{8Q{fy4Ew&y`MlU;@G@{JK#&kuc^@+NB5OH_0pc_Gq9TuK0=PLRT4|8(EXcpBaGKR z2&!{lU||%+!Bnv;z%KVqwfv~31`&?QZL(d2IPKJ(Lhr1Jr*B!1L#)MycHf@SV_zyo zHav2E<_jXTx9EJGdb)u6;24|>^L)}OK_`Aur$+%-faD4|oU(L91jK^#^?YdiTxn^z z6-0!=fpe{QXh`5=_cA@+^{<21aj5f)aw&!EiUtiY#tr?Bn&vZjk(mMa&u_|aEZEC(oW_AxP& z&cXTDw~q}(F)C|Xb|OI2(N)d}(`oOcDAllabDsq`_}e4lT7Y@~?-~ve$7c&&ww%Hu zr-PAc)OiQpc?V#zwt?yZ3pU8479X$4U%d-Bey1#cpf+5NH8orH^Q{3_mxxMW;cQubI##QI z&SW5oTT_Hzd?1!V=2yI}APkC?+W=V6ol5`2{bY9~Oj(S+g`6DkGE4)F0t4O$X|dMY`7}trja%v;}l1$uy7%O2QN^g7~DNO zv`CPuex>#o3b}HRZ49sWtMYQ!-s9}Y&(+ecXT0(JJ@Ve0kV+TBsf&q#i=^Z2Le>1g z@)GOgrnmO8#5b^f9DGT;*O>s^K=YcuWj_NB;pR>Tz-&%n4$dyTcMFP&iZ*KQ4k4`s zxzFddU#CT2Z##aF#=VxDfy?1%L)NP9c`&XCp!ZyO2T*8S0RIMy#7BFs0I=P|G!$8_ z4P~sMvm^s9&%54(b5J4bSUF3gA)bR~G^Ru2!WLBmB?m1AI(PO-(AM^Y(#6#WgAmfW$9A zu4NJaF&IlK%PltnF9*P7y`^%^Bm|FQ^#leG9gV+h(2ZqH4GmM972`Yv)W*d{qNQ(N z>jRfWE75%B@G~jr$2y0Hy*pyu2zu>AH~sw0Z#IE>*5JD6!+|O>bi|U@gxiGMa2AfM z`HIDM3{c=4ZcYJ-PAdS%u8O}tzN1aGJ;z^~tTfdX^2A+ zyz|{%q0B^O!Mii+}(dA!A#M)GX(&Tp^151Pl6_=UKe^@~b%VMtlrKwL~=FSvDSS~9;q zdI9v@MH`-CnJhdwwb~-{K0vrPS@#eM|L)Oprwk(+&6gnW)jw^13)}-8q4ywz3M}6a zd=vUv70x}ZW>AHHOLbikL9Zk8GxNN~fE(keeDC&b@w3Dg5SW?r;n4)jtjTFvq**Fc zDWURNNl{T_*#w3${+aDei-99{Rq-m0I;VTL1bc@kzIs_dTL zBMm)?53bJXZyAmAD2^UocuNn}Z7Joeno{XsH+)^rtCrh5_RIGx@|ToX(Ju`w)DC>~ z6Lb2USPCA$>jmMyaas9{rWf#QXDxI%gev1BS-{oZUmsP>owljTUj9LBTy4$6%1msyHZ!rYJIWS&Q>eUu;t=fi z{6+`D&JPlCMMeBu+@ZGvpTPlJ1(>UFKkY==izj=D=HoMJIB#ypmn?AW)|7U%`kk#l z3{X|NzhW-V9McR4j>D|W^{iDASA;z#w)e4&l7HOo-!AkGM7CzuE=#P+HOu+nMpdWn zX%c}J)XS<_o{_jDl@io3 zm*z~Oge1iDDOfenaZiBo5S?|gX({lXO!Gb1ZO4w6tB%w$hZjflZD1dC&)r<@I%+*? zkpX5eR)%)UCDxT+k=={V_S=>_#-3Jl+qV9s?;ch$K>a0POpImRLgNNY6*Cpt< z)zDGo5eOxo`o@MQs_NF`aD-IxiWj^9959)FgUbpa1gr#CXB?WgfMZcOCx%lX3tCa) zMg~Pf1TN<^?Y)3vjByLf)EIAdE%`4y0)&P^+yCl1asSF8|3~Ke|M_v{Q}Z@BL8!3* iFTnpn9{(-&@~$WSvuDA<2amyTa9~g+sj?SFf&Ukug8k+I literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.44.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.44.png new file mode 100644 index 0000000000000000000000000000000000000000..698cac594e44728d964a53162f0e811bd3c39247 GIT binary patch literal 864 zcmeAS@N?(olHy`uVBq!ia0y~yU|I}hTXHY~$=>-}je!(rfk$L90|S2|2s5s*U!DmR zlr3?MC<)F_D=AMbN@Z{l@KJEj$S*D_PA+)Gav$B>FSZ|@rV zy^auJOW2>t5v!CXa>xC`1#9aB)(y;M2blISYh{VtTEpP@ONXJ0ig^T>C^4)?Pa@dXP*tz zd0n>q^2;sv-`AVIwEv%Up3B|c{qaW&Pa&Yo=7-+hTVGe_Hz}p`3^T**Ak&xAXMeM{ zwl3viX1KB@>(cq>pH)2X-MjZnf{kHCg)Y4Z&|m$C4ZMa!;xUqm+F%}Bl+78KP-rd z)7xLT{$s)3m;V?9`tMdVbog9ic1W2d$Ds7t78n)JW&&B0kpl!2Ih$6!zn7nzTe|yh z>fS%>x2vX}m4^DczrX)w$*wigYr~#a)`gqpuK?N?cKG|3)Va$tkLJ~1fB#+jEhKc7 z)t^c;kTAI=&ye)lO%5s2*OvOli?~Mmt4+2!|9aQow{LSJ@87?F{e~oi$D}9MlQ#ai z?t1+A@y8#3NH5F0_4RA%wA9)2m>Bk*kJ|lxuHW*PmJAJQYo>kyr4kUcLYbdIDf;ys qIffteKlwn@6x@#(J_9GazpU0559%d+KAHi{9SokXelF{r5}E+bjf&;~ literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.45.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.45.png new file mode 100644 index 0000000000000000000000000000000000000000..1aff5ae877174a63ff273bddaf9291c7561d2c88 GIT binary patch literal 4121 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 Wa=lb`d<4+0bVmAj^iVnvp8p5>v=);9 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.48.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.48.png new file mode 100644 index 0000000000000000000000000000000000000000..8815cbf37bd318bbc688ddff3cfb45e2861b14c8 GIT binary patch literal 14586 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.50.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.50.png new file mode 100644 index 0000000000000000000000000000000000000000..9de8ce065e2a2cee44213eccb623e623dfce369b GIT binary patch literal 19544 zcmdVCc|6o>|35w*T21McBx^-QgzQ;ENY=s7Sd%TXuZ=Zzq6pcKJv(E|$j*$DtP>+c zVlW9!jGeKY`Cilg`Q4xOd*Ao(^ZV;}9*<7*n8uj*^}b%O*K@n(m7%`Y$rGF>AP~q& z?Yno3Aduhk!JmuAegn@ak8Wv$zm9v}MfgAb2U_&Mfy((eV)M;^ZM4<9Vz5A69a&k-ln zks(^3vHSs%^!urzzTW(CqPLDwX8c5wno!?9yTK9{V({nB%phOKA4(+rcL}G;AH(_B zIP1CLz4X04v zw5)}%wj68{yG|W~R7N(EmbI?Sy-j5L&+TE+MT`97cFqA>)eK|K-YR z&hpf5zTu;-MB)|KKb6$Hb0gL*hM%Qxcd3M~eEW;6Lf?U@ds_tztsR1JD%9xGJGnf9 zsbw}iRr`^we4G)hUo1RMW`@?9hirV-GJBHf*&r8tv`%PmcLYnL?JXNzOBaHH+j3~a*u1#S;C>6Y zA&~m$h_uk^`y3I~#Kq0M*5$qRofZ+?bi@pD(p5$wUWzYb%2!@m&qpFnggu&H^IXJ~ zy~IsDANj28?!y-#KegI*v6iCwf@l#PWv&RX4c#1v(KZaFD@8y%L7;5d1xxaf$;cC& z`S9~chgT+f$FXK~c}w+l<_GY@kF?u$m*ryJhz^J!NZyFtX}Q;ji@(6U`{7TFkwEe5AOjm`rLTsYLsAEmFTaa=N-_0|Sf#is^NpUDu*@7ctoV~IP zb+7V|I^v>Bt^AjYpmy;O;<^cU4z#m)A)0x%MK)CM6vo(^GE!uNd z9uEcZTj)!JI^;=_WH?uz{&t}k>3(w641Yi5mf7+T8--JMId z4s_n$AZ>TbcIvNJVRq-+glq!m3iAX*SEFsXmHs5W`r8H{ict2k8u6R3(^`F8)w($b z{^!3S2%S#4d~ z|3zX5#e%f^$w^t#MWFNB?-8N<(|jsVR=%z0(DzIJ%IyED2J!6e7a?F*JGpEQ=FPf< z=~L~I5wzrynV%r%upPxRi_avYB~s8h)Um)hN*`El7n zOO3GSU~^9=vqHw?KzryA3-uZbf4r`U9eT2!*kivC?i-ya7k?KNwcM<+ff98MCl+T; z=H-P##=RAbk3w!c*#|-(zM4h<;NdP&Fm^h;YK{rgpB0gYL7_Sx+Jf3nuNhrnGcxCh zNbLD2)i>vxUNqt>@*4$%N1eEVauUkY)p{4me}*KTJFUg$ZZwS8pNT|d0*Y@ zLG$-RvHpea4Sp54R&YSA7-^%_etE=tABKpQLQuOAuJ! zQH;tnzI(|5(d!mG;um+nSVh$VA<7;tp#6nHt+qP^IXRa$7oGQ~ez6xf_}z`Rp}w)x z_K3PsS65;-p4@ecEMW5Y;vS!eJiYno&$)HQoIXd@)2{VI*in5RL1?>x_E65yoCX}8 zO-^=boN$LXpMbR062u9Swj3ItUzyBma6}9~d@F(zhlY?;{O@#KWBOE97X^7558f?0 z?^ydldAvxF2#l=<=eHJ$ZQ=C%_(cB>j7yTegXacsoFof_y25jILUnIJIWV)I%4X{tV;0q%3N^{ukt~@R-9%` zm-y=m_khds(5;oJc2MBF0moD!PZ_(kSGel6IgMbTaxkbPb~1-X9kCI^dAB@)wm0~Y z```2|O*EUqhfCsHw!cR+74LV-Vs84Uhf#;kv~KW0-g|)=R?rzL4dp-f%r0`}aqKj= z!XG5hzg7Gph&c4ukd^)4^{2l95QUoG-SztvmRr^v@geR*i2EsiQ$M905VW6KDuJ7$ zPFgX4s6K{#0&= zk3s05ie7@i)-s7t4zoDSKn*Gfa|TEC_o-E32M1fE9Nnwa9qW@p%OTrSk$*4g4=iH# z2pQ`gWVVgV18R@G#OCcL4Hz_Sp+8F@UsFOHy81~H|ItfvUI{{w>JsLL_8Ez4%;!PufZzW-={vvWlC z9cekBIm-dDzO(i{j{q5Qf@1gGyLdFW|ne>rK-XXqzQ3GYL!^H7H3&;n=XzN$dgdv+m^*7!LO zeME{Ecd@hl{6(enM)(d;HV-)D*l=p81hldgCoL? z=*5jw4@AbcO$0$2PIhnP3xi2|Vm;Aa89L%;RyO>w8Z4Mh26#vF3h*4H?IdAm>EKn% zUw-480e-5dnN>X(1k?5H85dUaU!dVXg2MmvfMx7j|K_aM&GHFghAxNE$YBu%^q-&e z0eFr6TQyEeF#s(6ufg6vuKk|j`uLdo*%36yt~t%kjMYysfE{(zH~aza2AT9kf_GVy)oM27$DH1FH@R{BM`ygC)h8Y-D&~c516a z+zLK~!w&kF_xmIHLZ2)MLcVdn{&TKMgaNVh1?BxO$^{i6qk`lh;{r>Q|AasM*WXlQ z%$-BS()X}6BEnJM8EoRg;K(xpz4_E z2AUos<$8p_IALx`st+xqptG*Hj6MW`B=I{1j`$IzDvF!(1bflYXKi(hv);(^wy3;@ zH0EifHH=MGJYV?b^pjR=Etu~p-!3Mn$oU{cO3#hxZ&j~U?dsL#l_20uud-aXlIzM7 z{5KAey>|WZ(~N)_-Q_)u1A=NCoL&?={k6^wVe0g-?dDu@bG7i$UC{LEce*^HP^<`p>;?&q1qb-(S= z9BW`cmKCPn8iUq?X_H==)W92Ooe-vRGB^o8LY|dch?nKa$!E8VOl+6^6_OR)h^DxP zQCIFRXOaB$W@eG-fm?-nqBSWvhY)Mb^0I$(C+8#jxED8d*1uUAnva>BFH@5-wBszq zaBbWdO(ibYRR@agpM#7a>B4Vh^mU3uZ|RMwj2Nt5KiZwT7<`c+7t4=LZV^n=Tr1rF zQnwg5b$x31Z0_lCX)7o>pq^MkX*!d!kIMeRsyF&l^~Y>e4eN)Ku(Y0HKdvKP}rQXGuB9VABG)cM?EaX_B=Z_MSNa{@UI}B3^$<}z&3wIC3sz8RmV|Q*Z2WnP4J?w{wbc}> z)68qHHwOsg0@{u>X=Ehz+U}s7O}Fd;YjWY|lq6%1nJcni2~x?OmNA<)Ywr-8kt5_Q zGlx{w5h>JVtC7|*!cr);qg2-U6S`akH|Hy#(KpZ97@hYrPcYU_dNo&w%RaF7&YEg% z;<6>vTB~B97!ECXg1V6l^G+|)PUwz0*=~qw911iXl*-aC)_|3dQ2Iw1>vAT|n$zrkPYk9 zE8Ie?04Q{>f`Qp{F>%xPT@u%v_#vr(#8sW3$;C1oKAtUXg zac)m>m8VDFQm9Qz`Qc)7hn{xoUnX$H)u=hS>1MA5W?#!H6G;U~_9!M84(fG={lHbG zMnuP@9+@qcibJ8UCcfJEdD-pbjI>IlnHZ^?Spzm?@gpEAuY2oY)YUQFF}-N*dz(vb zLf1)&t-$8po#4qO<)3OWw$f{-)}B6)$rv6<9zW(>V2>2Gt-fz5=a6O2l-P6U0C@?A zwy*Jb+(nBJq}*IrFCMG(WU{F=vq!LLuXu4M&K(-}{?TSZf-n%>J;0|SucruIryv~j zhBc~y2D`FCB0Ya;NdIq?q<=~z|Nr`e@UsrQp0$H(in0taD2vI#lZ%{xAe9wSQ)hEn z5VuC|o5SHFaL$#P?v1urV=5^Qhy(mJAxS+#;29L^x*lOSC%Qwe@|t4}0>)+_QDuQ! zS2X3(Kas}Upb<=}D&Azw0JE?N+xu)CpzSYj#ZEuT4q%}a!Qn8WNJsFdrQPfMRrK8| z9C{%~1lm65>yrM%SDsO;8;WAuXLc~x)SD|Uuv^*WMoQDXL6?_lS+W~3!nWMB426=X z0P2c@BnZG@dRNaf=;^B{lwj1T>s8s~fPX4nCrC}pxu=@KlNC+h434RMS`U`V=#eUN z7G-C_uY;C%7slrDY|a-Y>SaP4S~lxF*Hr07tfcH>=)06E0D?D@<_)bxQ&Suq5LZbSDYcfOTYIgx9CdCU z^~4Ex@*alLl=Wi4U!h&R;EQO^tc}n+rB+>p69agyg`8$iap?Id5kOT(oH#e>UeEIE zL9O{oAvY{ZA@(fuU+(op_xjlByO$PMX7<2H+!i4;RF;JbQosv5WVmWu&@{?pxns{R z9vkB-^HI$cM7vp}NP%I{BtLS^^NxMs1K;KeQP2&e1gb1jW}DnkGvj6@aAa3~sfaX_T#elg5}gwoP46xeriVbqH8}p8 zN;htltzW#pW4V;pT-j`0b!8QFB*CZxwXo6;6aulXVrjE%dA2>b7*a{;4f)Yo5d>rF zU|=19RCN4ZA0HLj>T&utKZ=teXxQ@8pEY&D$ZIfB1ByB(#T338^FZr8X ze_*RV!GzaGYLb5?#6~Hwgkt$7Ptb%(^M;M~QyJxu1<2FsZU8@h8s~NeqVf#g8hX)5 zx(f_VaV>ZC`N?QhH`(@B{3c;+CSpl9J_h)J`xj^Iw6j zDJs))rtx=xU}p-4dvOP4Ut?w2)t+(r+>37cATNURR?Y#ps>=)7-o0*_O**eJB^PV* zy!=mWK@XgwnQyv5hoWgj3Xtx+)R{dMrFzsd4n}xSWFp zC$S8m7YO2vXz=6kS*riJoiXj~6l6~pQzO}xp%tz@x(HS8@)BsTMWoE`(H>R!ng=aCp^O+_|SScc)i6w4O8bb$PJ?<>HEVUdpP`rP44Q+62}Ef2sKU zqey$=rgtN>-SGPA0n7KjQ0^`?b@sCM0cz47?>E8q_2yIMuFzn}c;>JRb$=bt6|q`s zaIo75C#xe0KR@dC;wEjS;${O|-Rm>B45mldy&IEyD+{jd41(R(N@+Ui+bvkD$iB%H zmm^${XI&)sQN`eCVC?WF6wHg@Op?dMp`0r*8G zB*K) z9*4NM#cV2VX@zZQkq(vus#etT>u8bY%_p8^<3L_vrLVAJ_h-deGbh&-109*)hI3UA z!lqbk8oX@^d>=+#OCs;2V)q^V1t9e&|Er5J8lzl{^(XCqsaIZ4!@rgXcm4TA4mq!E za=`Lr$WkL&^Q2Hz9t?LB@^hv|^59@^O9{{A$4=Ut+!9Tm<5PSh?ot%Cw^%Rs3CJa3 z>lvirsTb!vS*AbdYsF5FHwSohfBbi;2r%!reODpeo|9>z5^1lk{<;zM-H1SH^l=(` zbEI>fA%$^v7B>z%erwsUYF0`hIq34E34fZ ztgPaH4Dz&kJWBUJ87T}^)*wOPOq_E%P+}UEpLKa<7R~(*%(vI~=(;)o**pP?&+pUm zkY^XaE^jqY^rOq|;HB$e;;$REPQ-v24#wsA+r^%$M<9U%Dxd`e1I0H=G$+pDMXj3x z4n6Db%n{*$z$~XaAd~J|j({nSNa1l{dH40S#%eLhJ6w52qPRpJnBA(%^tcK(iE&IXYH~xc&%kwj5 zt_-!NSS5l36w|yS*4kJ%pinoPTBeGXluFYw@QRee_pN+>-!^^X0rV&$ zE`9;a+4UR5{Id!n=k8u}(?u|c<$wlub$N_O;Y7Y*6ax!uAK;9SL4o8>!_RrK=LwG0 zb1Mi!1`ho*2lF4n%B-zpvT?jhs5q)}#Du$S@ONM$GF;4|H@r%LzEe^vd!zUz5>~~9 z1E`c(pv8h62&u#&opyt^mf&#dc@fN7auqaZJ4SX=5Gb|}pzYg(sTlB+Haop$G|;_} zL*m(CG~|fiQT^awdsZPUpeTTw{Pj}sGvJiC@hO~WuUkyyT&LX;eG2*J&)D5Ho_~Ag zzp}gkugxYa0K4_yN_v&i;+C41m8nC<`4Lj~8|jMp<;m8)aUXol`A&QoZJlrb+fjzp z+Q3fEngiFojGQc~*`D0O$SM-BdrQrHz*sFwQwIJAu;N}%G2yKL@^0i-UOj1<7_v*q zp)Cbq73M`4#37&v=(l#PcyqRnl~;fFRrfi&R@;Pf7)A|$n(o#1Yqa99-D2!M4$FOm zydD3 zH@$5n)&-=maAE?O@GqwuP$;{jK%M*jKbxq@0$Ltq zSpZ;4{>^;-?~MR=>5Cl;>G`JS`Mn-E*?x$aTj=mTOZ#q0Q4`62#`r*U}BEVveKDXxiCjK zd@aQ8ySlnwubS2JLW00ey_!{#a@6%<5lvI8kUpt<_eIzfdu9x|;>DrP%FiSyoc;k@SviFYkA4{VF zCUb?H{&+%IsK-rj8`A4p5 zpJ5K)m4vDjq=Gchn;67aI`~J}n!uBb=3HvgB4x@zeFG32=7=z5)9{ua_){Y+T~?2< zt~jXJe;)kSo;ijADlICi@z zQ}=4ZAba!+U1RL&av!UD!4rN~_fs5TY}8M`B)e48^I1byk$HlE1k#OPu{b$#XeJ2M zxhcdF8lY%51waz7EI8J@$}6D}X;L1Fm|X8ih^GXt=#~s{Z7{Z&qkm}KifgC@EgP&a zBE`tqHS^GCA?<{)?Z~k0JuE$l+E*1y6{a?3o1jn$3S{8pZ8;$BNeJVNM5(UCI>t43 zdCjOhIn-m?8!Cm}6u`Lg=dGmtK#JCHQMaMc5WN&+lQF!w}iz!wh^m6K|Sc6w|xgHrkVl_6BOG zc`Jn)sGNiIdrE2Y7BZx}0kt%}7yjYg_oMwEZuD+k^M+3ve{Mvoo_=po{?mjFY#b7u zwnbl8p|976QtIW4cNR&sMc_4SiT)7qf$GkjHwvm6!d>Anaz;&l^|g|X%9D#_wW>U) z5l`OnZ%!7^1MWicb^ar&ZJ1X?Yet`B7xy0B@QIdC>hE}EnfQt!qUaIcPgX9{f!8H} zjYgs$kj~o#dkv)uiQrB=yWON{gf#zJH$fOwTe?y*H>;li$5b%MMuZ)$50s;4-(2*L z%4Ed6w=YNa`b{v@+WMuOEX9D-tCeaFfzCzOX0YIvaztDwI3XMnUx3_`abaj7_X=?J zLI5Y?)^dMHUs|Ruy&#Zun{Oo7QA%4?+;rd=+Ix!-q_nq|)r1T-9W9bCI0iWIqA6#m zjjeye$S~zN$aN@ihw%94P6;w$oVkCuwr zxFS6Ypgu)iJNsFjmidf!U1HE!LeH8aYx_INxqF)llw@&e87d+2``Y+!Z~Qh!EI^@h zQ&H^`*~dBm`h|LO@ASZeK})7T(K)5_ z(BMl0^Ac@4C1klc`1izDyX(D{Bgr541^jja2^zWWfY|)Q_mRJLf*dHSv|Q^?iT+UF zR{h`6nv`xDI@smJaTe)EI-XLAk$3Lvq7g%ZC=~JsH1Tp7ydc+qxfr> z1&5VOU*?CDriCvT8clE2K@pgq&VUq45(jYYoTSYHEiSO=iG4VDqLZc zV$k-=)I@WDK`uE)D~`A44exZ{cMu8TsPcrg`Q2L94Fe;(dasn$Yle{s{w_QDB;V;} z{NvT{(PF347A9MR@*}(u0L8dKhk_OX*w_I`{i&qiWEySgNH*FnBi2~{00bs(0TAq| z1BlT76*Bybi7;fG=Q;>s1TXpI02YwqaFS1p+$T#4-kJztjCq)PR9;EgGqecyV9`Tm zYuqP4;&Uh=PTJE4O#sP1d!pX#xDcMH)p%FI6H7>Hq~l`M=V<|Hd5E0+@A#- z(dCH1EAK6|y;@h~+v}ZPtS4OsfTDQ4e?#uPoek1*{uvbFe$IU6&_9mX@e}y;xVu`o zjzBnwV5)=g216YyCIH0Rb*f7o3Sg;RY#B=49lE|V4myC85`G%Z1bJT&1~7;me!b7J zhP3?r;-7fXYk6e_@arIUPN`Go(>69oO?G&3-c>xqaI z=^T9AIVj}k9Y7L0xjb(#7ZHDo?Dd5lOtnB!XKDQPEDYJIn-; z2go}bEi&8KKxuM7BrH%ESt|QlbDo<7i4PeCVl9fUxw7an}RMQ0WHM3AH>P>_B%d@>mZJ$|H)MBAXCp*K&ln&r zyp*2RNXXjRKQevb)dwQDzz?It(IDBny-`WAo*wTqO__aI?aAHcXNCC0$cU|ks2qDH zpe;b`aWNw#Iiv}^a*YSMi>b8;+ds+36bA_)FlUo*q~d_C9CbbFvi2Dq8U_AyX|?8x zh$kbtyRLuR33lhuWYah>18t$hOC$%hmvo(MGPPM~eqJ2E&M>YkQ7+#^uTfAUI;1Tw z`Yba0`kjh)EXd~P% z{>xsN&$xIDJh0_Jr1Z$nn>gzf|XjJ5%a*No64u zmpcehN+yy^*f`_@L+Cet@xC2UH`IHOq?vH%B5<1zG6a7&pq(^YR}GUlMaDFSi&sOi z2M3Ndx7aL#me6NFq2}g*7@Ai%K03>X(<}i%K&W0A|?*X`wYwTPz89 z*NwxuqE{_P7SnW^rP{>-Xm&sVGF3BL;0)d!4hJTHXr2AJ(pRZChi3Mla{3{vgHp-! zR#+5jrrrTzEm!@fv71%Q!ekGj3uALmKNY5#FPeQy&k#QRMApup50mnRBlX6;3Qs=| z;3TDvp|fT%xEG1wmOv^;1l^Wrk6>1}zl0nx&o?dkH&>7zSLE!Lp@2DZ#ZL&BiU2is zYNM1KED{7%Pj@GGc{i5Zu-}0VVX_2mbrb=?TQb_zn$-RwdS&EViqE6d%!_x1B~$&K z89s*S7R27IyY|_toHQf2080>XDOJFu!2KmOm4BtpN+=@_$%P zEP;%ilzR=riFh&?8|y8BtpYeSTBMjT=PFZ{^C9YQ{&(`qDZNos1M@Z2bA!mq_@gP# z=_wAQ$~SnU#)HeP`dsiJJWUPEDk^nOkMZ6m4P&lue3ewqa zzB-!Hbl#fB+5W(@hQse`0kt`ngd#yF7>!6BnRY`ici*ME*T|A$lP~zRJ z3~k>D#t;`HJ{2aqe7l<4n;h;&jGcCs;Yuq)p;&SxO0M*+2X`NMBGTq_+g6z8tcOX3>sg#r|$A$bGNWk$D5sQGrK3kKAbohj!NK?aX_3x-VK|*K?Lp+N5tA0 zE&lB$iVFtvwoA}2kfEe3mtO+Dq&Re1uFlOOJLy;C)Vpy5m{j$^U+Y9@Te|?(HYm~J z)GP0tB%9G!5GyJ@7itu;5S;wea3=L0E3gEi?LGDn6)}l`qf?aAbPN9SAzPk0*I-?B zKDxtRBHnS++q4g@o9)S!<9hPq99HrH38?9b^#W|vlq|L@Ren7c=|HZXcsl;u@%DGc z&dDu}*ZQs&+!r#o#x4kfHaujbE)M0#`%o>AVY-9bVK3nGl=+%n>+GR!Cux@a&CRS& zkMCBz_p!PVVN3KsNN~7If{xrz+DA=n=J_1jt6#`1ITg=h*yt{E%H}S00hD<(vNQt^ z@r;>CSI0(PZPUI`rq6oYW3W%39CmW<;@$TdYmf&2p_-15(A@k(*CTZBjkWts ztyQ}?aFnx@r5JAb`d64@sW`Mxlsba;&~=LZi@d~n{vOXUrL){#IouKfa~-1`??luc zM?_WQ^4FT6He6I=Vakes6HPuOq~zXQTp|6>)W0;K?SfGc?_OIRDJeFSn=2zoioNS(`X;xu9MUmNEUgb^uQoLJ7K@OupOLER1Gm&haZ+fHD zER-Ur&!zzi`eLY3YmIiX72&~&0--~~fJ zKnJ$=Cfth$QOkR4h4O5a)On*1U}Cmwi_R3@zEEVEe3m&p=>bCkaAB@t9QOcxeyy0& zgyNR|EB7$WuCuK0&0YJMZOuzAU%-TDwEPmC4B?bCuP{Yr_Bk5UZK%jb%Q~{(UHmga zs$PEG3*SS+M77H>79zqiWbO;4*4Iu1>*l)E4;gA}_C9=-goDSQD6+nbcae3uHXi7l z)vPxiiL#$FFk1|dNhSy)Yew&~S9O(sng1oW`D{HB>j0!B&*Y5@J;17-r>0~%(QlDo zCqgfw&Ay!f+&l9;e<)fGeQ{BI-e)-u>x38@dsF##t3onjA6fE;4o`BH0&3T04%tLY zRM#rp9gs7L1i^Ufo{L+ge_i&3#f{qi6~l0N6}xuN zPsW38-)QMxZ*hxl)+Z$W;;}JFlua0j-tRiq%C!@M>0qhcex<;`iZ)Nk#~Rzzqhsob zZcar>eu9T^Ns*$*iMY9R_hU+H&139Z%=Q> z6R8K(r|LI19-FKU1pb~@#Vp9lInqC) zpE|JKh-tarA9$tII(_`y&vE-Kol6-Fv|?_4Gu%dGtcdmsh*4~XAfI00(#I^kni`Nd z^HJF#vPg#5Q9v>PyEU*q^+uNzX2LrLgHKplop`CP1(4k*^e4XwokDq}|3J{7W zZ*L}=t5r7m#;Ais?jjU~%$<-!6t3?^I^hJVB@2I$ha8)`o3BXq)KT7eEsN^3G$Ys` zOI%4?v#Z46?2El_ol<&wgbl?ir=gLKho7HlW(d3**Ip07PPW`dsTy@SzaC2?H`>Rp zrgzoXYqa**AMEw}xg%1bUSCF^-sZf`?P4*o<149s#<|97`A$f;i$|*ejb?!C0Ay1` zRb4>#DrD({6b9!7gCelj5$=!Kh8x)=%5wr)^Q?!?am%CaQxi2uDk<`@{91VnZmYrV2P|PHm-c32dLTBP+{j%lamO!YH#^_E*1V@=fQcXa>;cGn*uBl} zIko88`EH{5rYb$xYUKX9w?824Sr#qDu;2PS^jZvT;BY%Zubly(Oxga=F;@FVuEa{# zyMc(oJNlv?Ahmb(mfN7^+s_z-bb2=g4d!sZ{tb*Jbp$WuZItq;D%guq)p}!|>-)f# zpSMp{tHzLAV>>wY@(|E>(=rj$CAY;Aojtp24+SiyQO;A18%^)}VUwBdEe3#4B92 zQ8b!Ybjc-b2ZBSEfP1BhPNg&rvRjG1pVdh#51kUqDZDIt6o~f{M|P6ie|iW9OR$gRzwK`qcz^(Aq^^wceaS;{^hJBy}U+?U( zsw)jVI^|OJ=ZGCIW{gt#xITU-#i3N~Iu4EXc{%KoETC=omqO}?tq^d8B87UrG#wqr z@`cKcSc`pC;LpemSBvPtome|ObHlN2BUhhaG#pimwQIca0Fh!+UWRfR=lzLP2>5mV zfPU~L#7>vE1x~?6yYnN5+AFdCzK=5M0_xN`n*;XT@6mH7YLsWq4J$xeguK2}QU&`~ zWVPJ>RCCI^@j88YbTgFRu+yptOU&0%(xA8oc|e2o#rle7E@TArv$D;mC5{&*9-k)+ zi8;q~888o5o7-?pr?Fj*YnaJ>OKAeaMj74;6Tq$YL-Yd7(JBm6re+jY#|M@DAxh}3 znm_4FwD=-7zKOwfqr9r#yOyM0jN_#caODnjLuX2l)+-(ImB~xdv|mfGrMoPPEq65jH$#k`*>?qI#>fm(dCEVFd>b$VYS1R-$b8)Zt&KgYqdbus{IeUS@+swLHTB%! zh38%k6}R&jL-y*a$L9erbFFPP)94wqR(6jbLwsn%wV9~yba4t>k7DT*B5$`+}VRxZEP7(6dmSYe%2@c%e==hbF|8J>z z|Fdb6Qhieg-go&jQ?r0Pr*xpkow{*X-t)UoMH#_M-qyySj$G?zO}=QAsjS_T>Rro3 z<|Kzo9{tw$>1Ttmac2L`!zah@6q#kEK`$xYwe)8PB!0uj-%oaN_{L&(O@iAg8D*vM9JQRINb*qnStLleAAMST+wUU`3eeP^jB zYvG3agEx;CJPeu=O~O#8gkr`F3s6M;3pewuUe1@pBJLaVNTITM0FB+4sAvi@fnS*8 zGV&82{fVlnc^^{oTzmLvfiJYQ>Cqzhb<70CK0ia7T5LWXqko0Sf(}zWfttT)Ol=x# zG?Z|xi^5hLO0>@VzyGVmFPPHgPEU9K^j^|+IJum&wAH7#N!{Y!CinE}ll1fM(Sa(p zXxPjih@>AH3hI=Gsy{1_J15M~Kg5!xudSd{vZX9csi=0~QYc8zAG0DJP`}7V23LL2 z4f-^&o7y~~ubH&GAW0oa=acKA@w7b|-*LA?vbv!=1AmS`o9B>fYI+V&l~_D81F7;j zpVokpi|kjSQZM>cRq5XH;7&(ZV(f-kC#R08<>$}#8>7K25iUxXyw4 zhAWkl1aR=}!YO3f1Lj@L;w6{wO@T$JAy)Tfc()>}V%g_LF(KB5#`lg>@r#2q@8ad) z*jdan2=EaXXEKL*r!7-70wYqD3mv5D`gKXS%Aeq$fdKq!_uSft7YQ{Le_T4;3%fz+ zKE}70TRY53dC{F7FP-L)W-duh+bpLCrmILf@JFb#TxpHRmDYq=bjKDvOgXzs^Qv0* zmPuWnWxjT897NpXESp}K{oZ>-$>f=D_~lDIuWFsfnbTg(oV#%G?e7&$oRuB{$)Ds| z6KB0k<^M2qTHmF8X`C7p#)ie7UxJ`DhRor@Qv+Aasvjz3Ijf$7h zBkyR{p_}yGENhRdz8wrECoL{so<21sYe^3`6!UMjF3X%iUjI2BR=_MR=I2%QOvTsq zuSKsu{_*ZxzF3kL%!K4XJnBS#!n$Yr%%t6~M9rS;4#f=KVrd*R)Y5QrrV3kX2YC-x z<-8tyF;ZnWgJ1Lys?{Y~pFU?mW+k!|elWZiBApallJiae{QLm96TMLt*27M{q$FRw z;QJ^y!ZlixM?;fse0d8uiw=#{9uAs+++h9obrn$R!G?A~7{T3AFFFnH7J;4$A5erq zSb7-W3otj#P5g}dScLlXKwWl`k9-7CeSM){h{9DlW#r?!08u?Hg|6KtW$S&pzkY9z zW86lXz-pNpvbb-|ceDhSzA%`@f5fUJG?b!py5Or|R7B>9Q;RC|-{BD}@m6YCF=C2k zw}VFZGXd&x76YnIP}_i%9w3D>J=8<;eO+UR>vDX7hs}sLX7xEPdT}{?k%-q-)7(0-AcuoZ6lsj*G_kqOE<|w+$jVHgv4+%ox@yHLN zQQ(lng_|{Dy;CgGo)$wRf9_hcX(R~DN1m^=9r1J6HW~H1ftwdmO{v86vsScie)rWZ z(^Tc58IruXiFE|28#oC)Lg%*+kusJ+VLx-GbG-#5fz*?x3*y50dYbgB6icf`JI^-x zhHovOOV{`LrN1$tlxtj@FjL2=w88Be&N7veWyWGC;=yTHkPyx?d~Y_Ad(gFYz&Jvl z8veLYwIn#KL~vYmBxvd)_0o=6h%<*KI7+bx3#dG0WzLH_!4~?;Y8m!H9Y6QZ1gL{TQ$|0<1&&gq@eSN)PM8H(A+SylHYFs z^@ZGafvC#>D3UspvbZX(KD_WzG>IK!_HOAGEvD5wCGtcSgg|AkrbOO5i1x9~q7Cd6 zhx!iXSPq31_TN|(;$ku4TQa@ZuyWfl=m#y4m0dx0AooCvGie)xHLn;t*5N{udtc!d zWa*Oy4h7@Tz%t3twpFZz_Fw`25}wr&!gHEedGbi-YuEm@H_Xc4(lYXFEfzD1Tor|%} zD9;Un-m6|y^NJB zrB_S_Cc}PxRfJ2}o5IJkI%CGg*a{BZ((7OF#Nsq$;Cbls-@oAFZ|5{%|9-w5KoFYa zksyq@lc&TnM|vAN@?K?F)e(NPc55qS>6L>1&$lRcE>_Dc!&=->i_Q}Yz2(Hpcf9T* zG!`e{+8Bcj`OP!MJt)iCn>?)lWxnIf?t_`@>Ndz0&*P;&Z$GUbAzQ~v z>h7IBNJSJccYf!y(*$Q&6vQz@tbqCWY7&>u*581t&s`3XNV|(wPtD4oHzBM2-D;g{ z%Mk=;6K0#tGuw_gEv8MDHZFK@sb|Or)-|m?nKC#tm>eUoyO)-bq0|-o@Xp}z{ow>~ zD$3=xIS#%1n8-LSe>vm>5H>HQ+HSYZY<_K9IyMcC*IQDZ%A0byz`1XL;ST6P_s4Y} z&#a^@z9bL4obH?s&wb5g)wqKZo0#X}oWb}MtjG%$d?uv$HeWp}rFj*8Xhg-*<z z4goKR5WVopL>a^x0-eGnKGyDvNeApyZ0uD89!gvzhB)7_$j=VY9LDCII{DFkNPcUH zyS-WTam?XLLpX8Y^Lv1UI7iznFRiyHe_;`2jr6zY$Enn0wg!#OGGdNe$n%O_+Ak|G%i^#09 zf1piuA`kMUr$U8;M{oUByqvyeXZKZnJ^^>7&$ZrSj@8IWpL}sEQuBnzCv(ll6v^h9 z8gPi_H(D&xgO_Z3S5qskmmy1%(yr(6IWb< zbhr9>;FVfLBCLau_^=Rfbz!IU0GrXLDf%I>*TeYGNKcyT5z8g+Z&V|s+2&D1;o_iZ zrkO!z+bvE?RBafC->sv=>xLl(rJLXaIyvbd6NUms%nFCKcptwWo18PU>$JH}sNZ|* zZgN_z<-};cM2G_Fk}yi?^d7Bkj%H}}&gpbG%{#F3H#1}ZPSV#GfnR#s?ruib*V^0o z3I7~enaWz_<8&#%8C`Y~8umz&dUK)*q)oz#NGg?cz3(<+gdCVknKsoxo<>wvzDw-Q zJBMeRwH<{Lts5}0fb2?fvC^Q8kH<4pABXCzcyjnjSDM&mdhB47xO$gtX_f5%2)Z1>LfJ6m z0vmyry*r-kXJmtK*E(s2P0*t4wYNtGRK|pZ;W?olvUGuCvSi}TPd>r{CuIYOPT=?q z;9=0Q2D2fXmzGyb>f{a>fhd_{&)zB@v|TY5O+8HoTaLJ9S+}FkPzM;S+<=MyuCv^^kWt)4=U}>j0+$(o%Y`3om;cu2_fTCvVJzI>7%kI;^)zvN9v8?aBnS7zfDOwG(S=OD32 z_}*SWY~EqlpYWzXdZANlZK&m1!lv?r;59w=LfQ|t1HBv;^6=;(O?u1I8c$)(280N^ zH_O)7@L+Jl5ZJFmz=#9w^W=1RjZ6-H_GZ`Df-Y1U)!^{>^&Dk?$aI257C14QIGqT( zFdS}_VdlmfUQ?9aH}O!H_lUp z^}gkqez<1?)bi{Bv-`Nyo>qR!>)*u0sxu3BB~WkLuF?tAYyb5AM>Fb%Gzv-sYOrC` ziI1O_8M&IhY1V=pXsD^eSBHFkxx2h1Y5q(aJ!xcji4*c*Qps(P+=8f&izrk!nC}%kfA6ICrc=3HZtEkD{5 zcy-xPz4F_M7boSHZtIz%sAc<h9)W8C(x0Aue(-5qw6b zoHE>i;pjFs%esSgFdPSa`xJfLWP;%QWacSDPpy_?+9xA)>}cw?pYbHJnBpq`N)*!_ z)iK(sD5Q~*5h^sd(l8aN(?ogEGahyj#XiR_H&uCZ)Fga}PAYurmP-pZ`AO!ZMFhu= zWxkzCX?;zzlSZI52!)xEVW))&x49igLa;V>n^DrM*;|$d9Y{^K8?~C(SvNV<+PRGioU*hZ&eRm}r z4#=uu0laJJSeJAzt>;{C;PJ#XcHoD$`F$&H6>j8&uW3AA#>u@G;4UqpvGc`rrt%V? zA#LW=OsDU}g3+9@rC4f|_sTu=$3BcKkB=Y0&aF#5p+U=NQpL`w@ebd{;spdeYyN^ry zEI07N!O;%-WKURqf5^_)-No(RF$W&OcEMS^gEe0db}j*~TG`E|A(*?P2FaF`ZNg>I z>;!jm+GKG46pxR&tlHzhKlPWp`p6Dg0C7j(rR+=OXJB!-4)q7d_&8;K*z`pDvJ<}J z4U9Pn-G@BQ-L`Kci=aQBof&qcs|S|HdQv@kZn8fF$D6$L;>s@E0JGV3toiM147bj` z3@eP}{a`t*d$SN{CTyiiCMQ~4CDaNN8iDq_Gmuv00-n^G!3mmGKL8wBGu4l)0)S6z z|NUf6q>h8-gyk}xf}@gVGH)!Ddd!_*m-FXFA|enQ0btM(;n0eopT(O9ApkJ<#pZuG z>i-W^_}_+#!Z98(QU{yqJ_)Zfn^!+S7+T5Nr5_-cDA7bAaK|lS_ ztsBFK=?!4%!4clMay9th5tld{A;9MRT;zf*Z(&x%E@I{-Z9(+Xvpu!yzr8jgS>K?E z;U?}cKho!hhld48h~BfAxGdMog+3$1^w-agBoh{o;V&EM)>yib5BjgQD+d) zmH(O+{;B}NYOjxe86Ngue3k34Fi2HID@$?3ft%T;HuE3(|9AGmctnl9E_E(blt7zW z%4Up1o(*BFuUSzpGl&0;qW&tEKd~965Z6Vs4%-OCM#DGJfo`ipTvp+M#ouj3|0fq> z(C9SmucIG~4@SxcnEn0zzok+j=7QUkhuA`21sp;w9@PC&9U%A#r_*Xg^j_}sl3h)~ zs!kb&xC;s%)h%BM0II&<9-G8}xpq^xX*9fUTlXD-rLCh*`Q7M#Jei*tijW+*o zdWs!pmN`hb$vl;!pWM?z8HYQ}{EZ|;dK^$WDrytcjce|B?r0jK+vM6;UVBR5=dpy2 z>XN4|!8vf&6WgaH_}$3$xO^&xGXX>OAIVD5X~IdBfQH5na3d1EIN?+%HNYxS!1Z5b zJEG_DQ~RghQ=zU<4RBo(&!W-lwl3+oEGJGyAr6@WE4l#HD8xmQD!DlzeFV6sR}|^r z#j{~l=)L?M$n{V4QEaZiA*#Ic9@k$1|N7kL84fFfSb^AwFtZ~*iqC;DX#p5cHlkoh zN^AzH_VUX@99euK0ogTA-|Y=Me7Y_pu3vPQ^ifsuWJfkyOepY(G<>FeXGG# z1;viy8*w1OE|HN4#qO3B72*~VRHgkM6DOesWEW-@K2_-|!bN73xN!p9<#mW`W_=+3STs9_75f?vig%x4GHX)o5n zjEL=lj2uFvoAs&-ah_T;b$rnrNT9DTwU57+ek^iemx~G*5+w!&%4m_j-!hl z2;=Q`2sxKUu3xC+N6SAq#!V7Z5pyDktU}!x(K10Fo!mXNBv$FbnGSiKiA>g?cs)fQ zPpYgL#%0mTyFFI)@eYxM>sb=1vPFviT~94qKn5sX9>H{%-h4ME_UDJEz*&13bPQzb zm3&HyP5k`aoVxQy$qL{q+-_5?h01n@S>{RpE8?pntP4{|{`!(*`V)brqHYZcxdRcA z78`Ao;puj7)cU+{is`axw`dfnw=PXg57v=262SU+!U$@9Um&K>4h0P!Ndze$&a&cT z!sf^eSn%wBy=wi|rw;ywX`X9*P zyoE(mirwoqQacm9Am{T3+vmg+k+trOu3v6d46DXf3(b++bMo>Q1X~u0 zOMC~902fX5t?9H|;QuRl8VzJThSk7&vwhqzaI?gq$)DHHsueY53X6ucF|s6aMtO~$RtN_&0@#ECDH|xdw;CMYZx5))BcprUOrg^ zpcasVJQ;g*s|X@tnAGdgmjagRf0&;Ha7FKFnzXjI{*#D=LZOLAogxW_Y_`RtQ%tWr zaFQRKQv)jz&pcOCjuq>PASgDhDL6jAO5_-!E$o*g@1;e5rPAhNi6}42?!_ zBz|sgzN_>0>@3jjzQ*l#0PkqV&kpI>tU{OcG;C%<+;_yic`Ojqp$tDbUs%l$@EMLHW$I$-NeVHV9}ABzj)SqPdre>8iIHD9H`*FheFhI;_ZVb;_t~l+%d(^gx47Q8uA7H3$wE1W)i}u|EvT5)5GN)3*d8;@+ zOayWbp`I+(ThaGjG z26OLMCZUl1RES5TkwW>004@!a{-ispGJr>Urci|zDvgw9yVa!ccg{rvRXf1~{HG|% zkNLyDNSY&=Z}NAfGqCEmW_{5a8haS=g7f*9NEx0~L#|mkG`+da*c`cDqg&~!RYGrp z7}S*xB)B#`{`Oab2a)}xQkVEhDreTVxt{elN;9!5xh(Gkoa=!_P{!r~paPo6tx z!ZH!N?&s#qDZ**cc`f^;OLv3@QE^JUqnVOF65@{2rr z?NV9*gY~4Zh?SjX{>#ClUGYas(zf0#DY<;(#!f1zCbmmZcr)`_>ezXq`yn}Nz@OQ0 zRCtM3Fvaxs&vjgd;jm!=HZ08QXAq#RQ?PHmLTaK{NT{Segy&qYcKZ-s>kc~nAMgCV zPqUHe`F4qi{9l)5`SO9kfSdHNJt-Gmo)qR_^3pXE|3v zfZ>kNjtGsler0!{SF_2;(nfrCK-(WO>EGR68{vYRjy%iQL@ZN)8Xha-|7vNjPN)3N(p>-N1h36)x@m5WrY7|{Kh2>!E`h8ETRDnw7%$#f(VPr5-e zIy+NZ5-+IAtvJ&=5Ux#JNAz5~G~_tddc_i!to*|loTSmphu7_Lf`|3$oMnC1Q1t%O^=Q`I@9(BOC+O5SebG?bR9LmUIk6Z}A`gx+OQufdo|hW zifCXaO|5vCtPH5B`*A;CIL}Z8HW%L*hq(bjn-z#+Xmmhp@=^eP8q@~8FY%#x{2$h4 za+oU<{^r#dX%Or*WMpI{Oo2{ZZ9>+U6Cv%L2m$+uZ6?R0|J}MR_812v7v|?I_)+^7 zEtbv=LS%Q0rluxhel+P*4r*ROspPtgONU>6~*ttI_%0QkwnDs?`iezqUf+q~K7(WWgi^V7oY znvJ%jVvmKHf+U*`m_#k+TjPMLLWd*d!&IiEewrCH|E&oz^7LIehCgLd88g;w6vVIV z34dQ;msB@9#&{kSPA>N1EHgx=6pHqWyJJ3u&#!aEENpopjt5)E$sp#nnSX*@)iGjF z6h^&UYwF+nu-B;7Q*xtwhdpEF#2#_R5a8-}VBY}j+9ve=YlHUp6#}~f@-0I@ocG;p SPE~ZJ0i><{_v9lNZ~X%%h)~-A literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.52.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.52.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f7709906cd50ce44c79500c4bdaa594644ecac GIT binary patch literal 16076 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 X*TApXRWE(uDwAoc-@l7dwGID2^n1Y- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.53.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.53.png new file mode 100644 index 0000000000000000000000000000000000000000..87d8819b07e6e5fc26f69c93e34c4ddf43b9c742 GIT binary patch literal 8892 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.54.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.54.png new file mode 100644 index 0000000000000000000000000000000000000000..e90e84e5b52dc083424e3665c4066eef1cc0448f GIT binary patch literal 3411 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 NY%I>1SD3j*{u}DGb@2cI literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.55.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.55.png new file mode 100644 index 0000000000000000000000000000000000000000..1571aefae8c7d69ce5a0cfab7951cd6b9f01aa45 GIT binary patch literal 11243 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 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.58.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.58.png new file mode 100644 index 0000000000000000000000000000000000000000..de4c69c15c8daa43a686edd6c309954b6ac6106f GIT binary patch literal 9574 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 b-2-!8!7I9*_maS2BM7c-bPIRGA^N`n`RO*6 literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.59.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.59.png new file mode 100644 index 0000000000000000000000000000000000000000..904f68ace5b22c395232298186abb1c7947ae657 GIT binary patch literal 36970 zcmc$_cR1DY|2N)HAsLxvuaLcuSyomu$~b1KW3OZ8SVfUN(vf3DIYJ0oM~9FOPBIQo zIz|~8CuDE#*Xi^9{;vCv-|u_GM0`~4cv=VQI%&2H&mpuJ3c;>3vyh6cJ8 zCr+Gt4ZcmNPl3NA)RKF_4;nuMXuydR49=AAlW(t;xPw1(2kO}b-u86~3~}~{ozOSC z$*1q;8xR<9-{0LYkPjlIsQlfdD(1uqz7vMJT6Z4i{=u4d9T-_1J894t`N6MXFFAi! zL+k5tck(B{J*{d`1D8Fo2$xEszPj*KT+i@&1N-wAwa=-fXj8_r=>;0$>8}JIw&|T) zG1B|<@Y-uZ`J8XquR))mK3|zS4Et84xl3G##1tH@e{@P@IPAV%s#;n$WN4YE>N=v3 zEbxR;yDM+)vGMuq)cjA<0U)I!Z!j7p0{ zU1~?QLV4i$`)|pYi&6wl0~Pelhk_1Ya&=|DLW?{}lPxQ|innOZfMp*jnaEQ|$H=Kq zA#rBN;%SJfS=uzDB0<3Vl%fXzlcZmm%E}+L61CoTN1hz9N0VY)@bmnsk5T!I+F#y# z+YvYP%;yod1+sC@kb=JIpVGCYWxb|i(S%w5c*>D_ zlQAL4&<%`1kxi8(6DuT)3rF6>xTE-}|HAvjs)MpD%G^<#2yUG05jiy9!lQxY-9S<> z32W%n=#!_r4<0JzNZ{A? z=wJCBQ&nc9H0?lSO?+Hd7CRzhW<+Lcm-*mLs(FX)yY-FgKc5mbURH+iUcJsp739$I zwM8^x6QL0ZmnLss4w1~l^Pg#QtST?lzDx{?m~42VJ0_FFNBydPHAt?Y&n|A9 zNUn3{Slw#8{#!l^IVF=&^j_jT0wYS>w|=+nRu|mwmML|UX<6Bt`ik`N znzXcJSKB))afu(qpgie;A0V(`(iX&F` z-u{g)mPQ148}Xk*o!f_ngo!8W%JV95jQ%2-uuHN0x9V1Jvh!26+05@Y{|HM!c=bRotfOm#q=^3yI^{v*&g@58n!!VPR0TdrDlmhU6a3gptY}RX;XX{}vPp^>@crR^=1qXO^jCC=x7z zQLlO%iO;-|P-NqGBMH7w$V!cU04#xIsx>2Dwzf~OW@E@|r@*j}!tP=8p)1&j(WmhP>zr@qcOXnx% zph3d8vDp`O#qc5oELN42`y{1$8M==7!b+oL;mj?Yrw;QeU#) zi5uknz8>71M|BH4bNg^9SlrI6d3^cR7(MpP_|z+bD+%y+FVh@O{=VFCpSk@OGDdDl zUAW>Tq2^t$3qj#R$~u3qORc%lFU*+m{)Xy!oAZOlPX)FH^EQV!@HH7i3zFpxtd>NBHV#opq?U68r9bDaym2o<5%t=WN4rW>3M^oKD=< zs`NHwp6&BpmpA9M^BJ5url`gd*p?w0RfiBCCC;0rwG!oJMmML1JL(U+2XJH|!zsve zO7_cj?Wj*lR5*4iwE+{e^ zT^bd|hd4a5gf9|ZbDuxTpO8MWB6oDnD=iyL@os}ts*YYN-Bp65QEGU z$QXk$%(DxU>9xXsWQ-%1T$`^t#Dl|suO*dMXr|@yr8IBSIQw6VjTG~WcMALkao zW|)0tSLLOY!~Yx^k7}{L>p%$UwWDsjpCQDAm(%W|QITlBV0HKXpO_cr5_t7KPwsO z%EKuma~34*1+2-oLicR7r7WFJpL)uDXzOLIKSpNuP$Ud0;Myd5MN%in)O1=eF^%(- z+UFpL#5`&KnHesZbXQWnJF0w`*66&in3q)A^*=*1lVxRJu&RNZMPv*FUy^w>L4dA< z2}T#jtm1qzws0=A!u_$-iClf{BS?yfYQ|@|vww{K4)t$fuSoi{fBs}m|IQqpsn;cc z(w7V~?Ppr!f_&fN3Hvf7ZeA%`>_ysA?^{>rAh+d@t*d|C50Xwg<>OvT5={u7)K7am z>@mCF!n0C%o^JH+EhnV#%wxKgX@CRE%A)zGJ7iL(MHB3aPY<9-lT;V1V-*>b-#53u z%Y{3?Sv0rabYT66PG%vFRO+cFq1&bRsMV5VVy&2OX6!2}g;`WPKjYf*`nBUOeNBIN zu`cG-x~hn!)T8;-$e-sTe`ZDPW;unmPiy z9d*3Td-RL9WedD;k5HhAYjEJg&2fNQH`>*HS^%#x%6>K}?VI-p$Wd1+Rla$@g{$PV zc`(NMUERC$`qxxj)O40la6O@kzMF9J4?I`wp}4vq-61P{q`<3X2J%g#^vfznSmX(S zh5k1fTfWx3!` zpR<$d&_bcHM@x46bHg37w1)5PrK&#G2{ z=>9t!LU2Rh;J!mX691(TfOS-6@cH;_#q^_-u_oHRlIS^J;8HGO9~Wl}NqNc(Rs0!u z=OS5oaiVTron87TCd6+Qv=g6B8rkLO+P{vzbrkq0T_bE5?HZS3ei))$eAG1^R30XU zJ3D!ww05ZjBgh_$I{Ic)MMT2%%r`#IYCcA;N$l-$A5O6A~5Po_SU%_C9nCS+{_nyzEllD=_#gC7;er|l8g^rqoYw#rj9sUz(%|jvz(rklX^ifcx6IufX-z5!=V8~ zj-M~aUP@SryKDVpSy|^je)3X=W`e*DttV_a=t9b5C0Srj!Nge}lIefoycxZbsEpYU z5FY!k8DY)>sKxR_Y3i>&t9DAcw>rD!g=WG(>Cbr7VHPBJ_2pPbBLs9*E%OB4sd1qI zyjSnjyPDbPSQXOjz@q1O7=KOA{0WE4c<-iFS7=hVkr*+EY5B7Z9gQO~$6r9QZ#H*V zJ(iQO@iR0<@QJ<1dt`Lb;kvrQ8DRzR##D4LD6%vwFZlGsAC+ZSQ|{A{BXiqha6Si& zA;p%K0Gp&=(#sH9)72KA`3TW(paAmm&|R~h_z&t?iMf91k)JxA3o0CzzLTm(J!!49 z5?^S!$A__zuytU(^3JFfNh2;*pP&<~XD*RtY#-dfU8fX_@?!f3 zuX}nIA#E@8bMEnqcbaskrQxF+UX_*gx&*YutP$y~-psA59LxzBMsFjU>@k(iA?J0t z;`-(Syt2sz4uS%EV&}c;_uib)c-*Sa?9B`zyc~7x-+T_CP8ek5zHQ0Ed!vD%2Q3tg zjq00wcypH)?$A)_xw~S}BlfA^x!UHH|BUK4ZywvzeYr6aGb$;kt5$*>)KX$t^8vYY z^M}+vo*d6aySL+Y9f)o_q6v&U^zc%+n!U~&cUwzK&)xD_Cz_E8w7d4%?~u8iq}gOJ^X}vJM3~dj zT2||{TFbOZ)SAe(jY0+oTdv~Fgy|i~^rNb%Lo)bll)rx{PmE^$7~|hmD$+jgHnP|q z)xXLiQuSbRi%sQgz%5HlJ#()HI{;Jiv^BzqU7)}BHIF)vjFgL8oL^@~v*C!3rXl?g zGQ4_-yzRqp<78?8ZRy-?;f*Z}7v^()^W>r6Is=@*%lIsl5EceS zuKmo2e~Ek*_@K@@L+p|xja$vMeaQIpzN)!T`zx)-#nKTAPRE;0QHR8+!{-GDGsT^| z$MMrUjVXayUt&yeIuK)>-?$_C-$ms9YoGIgk*wP*sIs2(L~Pbb3P*lg9Ndn0*v(-i zh5}5ntPFEy0|~1jk`+v>%URjpeQ|Q=<~{!d0oRv?H$3=4e;e-;{Gg#!JbsZQo#%76 zygGAL%ibb<`cJrK3Az*!9zGaa7iy1e#&!6~yRM2QoxVkKhF2i8U z5jNHRmivv!C8Hu9SM7(CN^6(~!7NvCbc+9zB1p@>O8vj#XAA zx&750jqlOzht6EMdpAqy2V5(rcxs4uJHzhpBVJ3!9wF@#8#!CmKVOpi}dBT z!4+I+vSw)P6Rwj82aedjT`F#V<=(dXZINos=WiNZ3!f@4dLC&p4h3BxZxo5r@4dpW zb8Smy8UI1^?ztI>d0hf~RN|7>BTDm)GhFhhi&n|EpdAtT9@FoA4^9l%B+9F3XAoQr zx|lx0559tC?td;f= zheh`~6WM(~u6_wLIUcd|#qKXRyAE#%x~k@9l$Ev1WD35Uj(;u`x;-A!w`anJTlMy~ zW%l>Zy-q0TSj=Dy`c1Q3*rGz&8i!NTM^n&L8v8L`0|(;!+p7^#Q_nTyJosluR30na zYdA9V&-54)HqJ%;J=aXEm56B&hr}ZgZPfg(Q&$crn6*;`@ioI9n^nhqRTZCL7h_Vy z1D=fWir8QQIi`X^kAC|eU5RWx+9R7SI&)ZAD#DCG*M4nAU|y3D#jnjpF3(Lw9Y-8& z=S&{_mOdPm#)1tzwUEu|U&Zwi;l$EObH9|EDRaR{j#x_G<0DCNQ|*MlIYAw&-^Ez; zyLGd|_gByH;pFjQ@8rRSh8dbrdaid1n>LlHLMivDTqY8!lD(fcMuh+V+aLGn{d6Hp z|C7=jlk(MKtMXw%LFH%1n%ankve3WYlUv@ctDLQHu~KS&(=RZIwV&L+qT1o-cV-MT z-ngTBT>v^zc3d0Cj&pw2|G|V{gPetYyL}_7stkO+R*c|?tsVXIO5Px9uOzDH?^a&| zzhYJ99;Hf2NA2R7TkC1~8}QC39(ijV{FOcv4bN@wRqIp(4rh+`QtzrS8uNE~+JD?j zW@^RZ&@pm=je4bL2&LPo>14vhQYFgIzh!&)*V3rFcE#b?fN;l2?L{%D?);mv2E#TF z-Nt$J1`6jmDJ5|~zSSlFYB zN|icVy|3U)%;x5u^Zb43zprOngy!oEixt0LzA*cMBlf23CfO|6L09Y6gXZzQ7GI9D z8}pDj7y4aUW1f3hM{=Kl-aITDP2)YT(CgEn<8Xoh#VDqFV6nooz=1x(A~a2G7?Q5u z7sCfxc6`?sn7v~*_#9V`!57NuNT-x&No&^tdI?36F@!|OR0P+(2GZe9>hVJ|?0A*; zcvZ|4&Pcp1sZX3RV-TA0fgELWxAee_JW%MPyhUAsZFZ=m5 zqf%^e7Yu4;IqaZE9C%ISjFlaK-^9ArV(D8F@qid)LfBCE#X3$RPK=@5GcBf**B%6h zprrgIiYh&EaIn+8i-#zv`skqVSp6Qa)777UUQmVxIjyL1zgYGzf5pPAz|Gft}EykXO5!6)yHxJp<%{#4J^mq)e@fIBjajXd2D%u zOUB(%)G5zxkgQZ~XX={2DN^1(`@YwTYzV+B|IJ#2{5tf$D0-Ca}FGm}s?(OrQ z|F*XY3SrHOd5vVYSm!F#O7B>ZgL*oG!!*d0nkrA2&(pko&`pxcgcN7J**nF?o(AaWA!W^3SDEvAXn}m2)py99vNohv$SOp=z z6?ryi->+gS+4;S$(vFyNHX-Ep&B37eUidfJe{-p=k&rFA5bps+zMc73vy%@!>eeET z8x4GR*s>e%Yr~@a7csG$*%ltPqkdSb_qNncLL!s9*V?b&oa4Kl7jtpC>r=MewUnjc z^YUK^7pdB`MuKG`9wt4WI3u|xw5n(`vlOiMGAG%_EX6Nndv(m-w2sRm>_eAeNMBHA zP2%*!y^PJm<_IVb(3$~ zK5Oc{2mjEtpBaq-z?`Mir$Mdgvw{iJWdO}IvbTzBfR5e#OUA^>^2J;z#0>~m+p!5a zCjiC?3YBC;zVhFQ?NFyN6kNjP?_I23~nCIOa2p-Q9J4t=yb^g74|&7B_x{fWxk5`{H?49 z4J3Y_e2bnShj4*sLCRP8sZR+#vfzs1DqR})iIWeCb*9pK)b~oguQU6Vl#Tf12|?^d z?vnzk3tC%5c zGqFMON8Y5+e6$$W z1JebtiOM<0ceN4(k#{;Qdg-uB;qAQEV-RN!w0pv%`9O&!ET_0afdczVtwfX`U$dr;(+z*n!Rg|5?;O!n zelp>znyk9$hq^I06xwGHvQ~Vm+L`>mA@liZ*d(WW8Zb>>1iVK(Raohn&xC5i=$9ZV zZ-b%T*R*>a-@EYWF(C;!=KB-U$DO&6qO$qt)#hK-y{&Xi(W%NracI&zozAE!D_dQO zQ83x`Ye4*I7K#1ORdy(76!ioT=U>*mEQ0^$%+a&FGp&OcR6jsqmn&TuU{cw9(P}<_ zl7IW4t^`l%`G4Ov9xxJ{+}3Nx!6oL-d`YFY1!51|;+wKE1ruDBz)eEt-RAFzhkL_e zkNY3oi*Vz|sc?KroN0CkT?fLc> z^aJ9g5f1+L4c?^nkC2qtqW%u-m1k-sp0lP*Ao@Y$4XUx1@+R>#IK1~(GrUMu;UtxX z)2mY9|FQVkUQz zCm{{K#eI=mwXVGdY0YyF0uXCs{jOVcFA2>4jJX76xzF9dH)fg&`~EQ47VM!B;e z_sm9_wYx0gdMFwYGQbiZ-R@5x=ydB9(HUI#VlGr%Zn`7nd@+Y$#LE zH;aHG|8kc*u?#A7hE}9!)_c1`gZ~OeK#NxIODuXzMl_Hrh@Pw4 zDQ+7;_;{HOosm`ee zp1ZyEOH0A!1x(t}5nFSGSC8q+#`g?fLqi|>f0Z3lvYl>CRQwR+K)h#aZ8_}UH0GtGV?LcB1eIW` zBwvn|&8!in^}3YCDPWi}>``Z1@oKYV{fB2&o+4YBMNj?Gg2rM<iL@$U7Z4Ba$D$%Gj`*&*}! z^EjOAPm74*pv4T@{jAn|+lqS962(Y;yWpEXoq5RKy3-keD~Xy;Rz`2XZQXBfeLf8+ z#(Kf=0gH(fg`EQ)EYc?uKMi44JOqqqbGdmX-;#iX-!w7py5E@nwl2s)nk}){Mdx_Y zx-0W-olVEe)&0Vkh5G0C^STPtgA4fT7d{KL%c#34PEn(+k2a}0-qt;#gX`r7eCe+F zx*burOL`hcX_8DnI)r~VAC&0d%`7vzsY?9sEWn#T?tzBX{BzSv3Rq{3oZc@oNyg{3 zd5klJWH6aJFMv^a47PeHWhLAki$#lU>$2#ztaQx#*V!JEGR@n;duRSMy6T$`1SQZXTjA?JX-PahqC@W0ek!$M&apU!Fi-6L0#Q=ZfC zKgp%?K=_}uDz`+T_g?r$knNmyd#vXVUNUOmqF2-i^>7SZszajKry!MOi}AB6=PtIV z&r>iC_0Yyl>F!gfou}50p|JU?DXmc2_X{}`VfGJ#ZUD9JUJXE)9Ojy1O;G?|JU% zPDi^_{B#A%R_Uqv_^z)=yp&BlUj$siDUMhsy#ckAkA%(GjmHe(Ker=Swy*rY54Fk= z`kVVw$k2hvUNABj8hL>SZ9+&YqQ2#^s)nyQ-xDA_tlhQ#q~uRm=cAT?WQTV*oi{yi zpE3l#pp@tm)DQ3QSe=@ezVv}>fL*T*#XmFJuAw$d-I2zFs4wh5uV!7uj}fgP%u_| zQg#kR{H*_jn6sST%mpdATwpR-Deh)y{#?P)M#&3{6+mJ?bK-04CD`Cxpncr9(Vy;Y zOR;Wk;YHm`{%^hS8%J#~Pd|XVK&`}q>a1secMjG-%0@3hZfytBO=#h3V#AT_dg*Af z3I!=@MU5r_FVYdI^$^shYg^T+V#Qnejp7OSn(X&lCT%bB1v%U|1EA_&&-LX;I^LWB zMwM<=${Pt8WW13uJ}fpS+!^V9PaHYCEQ%k5a}k4@PnNcMDK($HJ?aV;Op_{jbD-LX z3}+_>(salq2;7=&1_~h7@iuPql1_bc?dZGhCuQCw%u!_-5b8!;;Ye5|8FW!VkD!l^ z7co(_qq^oo$K&O{Us#wB`Z?C8Kr0~Y@!m#=;pON$vcGIFBeqQ_9?Lh!--Fue@)xPJ zR%(#W9F^oAefdmG%NIvt5E9mCZCaWM3@;#xvH>1&(vu;=gI>{zSVzXpA+Guhyj|$N zKnQHiP&`O9j?Q*UJl}I#%26^TiL30-6sGd)5QvxDnl~XlsSkEwe;#?zUGom`+flFg zUO)l4SDj{h5^BD#o|?FB4Q`r}q5*2sur3rCZAs31h(}&0-w{3k zyw2O@?^^x$)ZQ3oxK32(sg^&u^EMcw^u3e3&@)<$xN6bJ++|Nm8qwmL1R%|(+_&wv zm!zb6{MVDjZAtaAXMB4X2nyZ~Aa+qB;TH1e5C>1HI~?|ak%Fu8-jOjaD*+ux9)-&G z0K3a#wq9V_vi3TG1>NdR`cklw*zQuBKB+V3gy|GEl#3kknKzxG`I!q^9Cec`#gl)M z78Xm1)%?#7mzi^8eDmPIKjK_Yp)MYiV|-FvpO`?6J;JWN3a48cGb}!lg`mHIS@CXVSmd z?O1&}_XGwt%&X@RRR;NaIA@;8A*IrZG4xcRnl8lIvzm+Wg z)Fu&7`K*E%fN_{zdyiuc2nr^IO@uco*wQk84){bMf8w9GvJXWrpm-MT3tDuxMGQeb z2lK3#j}{yHXwf5+B$_~R9Rm^15aHrKr|;I;{?c(?DWOr(81F|u;WEmf(_-Wbksb?T zS~E!D>GgSg?ssUuQ2dcos7LXgZSFfpztrvm)0;MT>Q|9aj5G-iEYGAOgUTHA!hXvb zsYj)6z1QVF$Jym2VZ#g%6To=xt!LbBi$H*>y5L0`u_h)KrR|0=QejsYs=K7+A3mui zxDJD)!wjcJv4scLkzKFahO&J;>WqL;G}7+XQb|V6g>wTS*~DX~UhyJoP2u0tOg6V< zy;CJIE_m6*_a0SE#|lVGb&P7+38pzfkvq>}P+-W{j^16pmNE^brh-$>95>8asM<0= zDY>H%`Ehr*^fl!}ss625`DYp*DO~!dtX}}|5Xk>baWaNAm~AWKeI-D<|NF)=%>W7y zrcyk(6iEHs5u(6Lk2R9U`&Zk1hJSRd3JN$$L6Tsbd7BaIrXl~}n2;g5FSS}CwK(ih zReOLO1_t>VI)tkvs7%|5Ax-iTC3OQ^>CP+?MdF2(_T!LTUH_sg{0%2ltSX7*$`pnU zznOP}Y=2?b96t?WBbmezu$Ed%Wd)twDXfqen8K=plekjuD%~wMKG> z9GxW455IvP3m~-Xi@00X)S+~s^&0ICI~@+!s*XKeoqB4q*sDC5`|@bzXnBPTr&6G9 zRN5DHw0>LR5WFtH%7o%WxMR?!88hP{lN#mfaISS3nSaqgdubeZe*ty)iJPV%7}9q& z)xt<1F=@RPY&q8#4~jT`>Hug6bYX;&6C$u3Juo`TZQS1$5{pFf{#ZxxVsP2>U1nJ|5@Dw1=d@(T z7icL1DYk4zINc%h4Fzi9oK*Bp5xNfj$iZ=Okb1JE((ZbyQjG?yq1xtOZjvdMzp^X$ z`?@;xp(!D-+D5b(5ReKhkQGzP3C$Oo-t{&@oj$2?z? zp))TU`~HLF(^R-QOJhT`6JPlm7*vXqTT+s`s=}*h{>FW;%Nuo@Kf+(L01#@t5i3p> zv)$QL1_bsdxRD7j#qpxRq~}5akT`RIZLvS9XKsUhT38}syfbWDVfAnQkNdcC#A==a z=+`iV|M(S0=Lk9IKe7r?C0O)A^TmtT)Z=)o)%)OjS@QTAO1>z0WuNg?12w50zVb}| z77p%3@<9QlmkI06o@JKL>E*&TUF=Oqmwr4o&j65~K*mq}rje#bRf#QiXnw8*!4=A; z$Fu=BtvL$}02R=!p~x370PDO-{ZFCD(Rv3;&o<290HVT;3?WO)?kp`vs!B4wcN};r z)ngdcz?~F~LNm{1Is{K{6Um#?#9w5)Gx^(iBfCY{d0}0MG+MnCS=%JlGuZU^K z1oA(aSTY1?*n;h-g2~qx4n#@(MP>xP=B}&=@r8xW$Z16E^cCNim%5S(lE3WyHT`iK zed}dqpyv5Ey@^?NP4On}UA$w?qCmRyj!j#tS41Oy^Wa8DdH=GVr3 zi0U#CwqB?!$mKRLE}ZA+C}|T)E!d3Qvyia>WrIShn3me9-x4+} zwMZ*}fhWa7XjyAp;#2J@Z0t>Nfq|tZVEQ3Jz!4|Q7Z17A{_>%}TgT|Hm6B>pl5=B- zKEdWE<0o%I*p9H5r8|9oQ?3)#9o~~hrJINg#t)03pG-~$xQRaey3*Vc=S|9=YpN{o zST+2_#}86%%p-zhYW}bueiL2LA4k^34B%P6*7c8Nj9@&Z7FJ* z3u~DJJY^0z`Uh5v0`RBmu*_p2H&i>g^yYWG5VExxA_+;dELSa{i&;SN|=!EVjip3R#iBRZTqiJh2=hCHWKq00SsWwZxWR z6k*}U(cX)ya6NkIyOym%M)#ilR;B;p&|Ru@vUb?m7#;*zLO@IasNMWC`M+|H>Z`pu zOE{#?BiZgQLh}Dm>Qd~{9(HmcOVLeW(3kx{sMd&5YQz! zZZ#pU3Hu+oYsHVdIZzkB_PuLu`Lt23BGb~6zgl;;ZFhgU_KkbOD>a?=jk68Hs=&xn zZe1d^n22p^Os;GE)frRhr3n3UR5F0NrG|Yk>8rUJl6u-{Zyc~DOUvQC=hKi_=TC-{ z2yARefe({As?w@F-A`>w?pe}biXa1U%cPeQMeIoz>dxb)1h~mFJPKGc26ObS=3TkA zpE<)jN&pE^na@OX1|L66Z7|g=e*L3$FUV!*^v?f*kPdF)*lKX(Gqm_>O|j z2W7gL<}Sd7eKG|VBl73=(#xz^F5RpFsj&@Pfnh7lr}07fL&bx>95jtXJ}i4>|Kc24 z0*|S5AabLWJE~g7$QU2-8}xFSnR};Ba3u;n;%T3mcan5REeET0$e?i_LB{~P4|sDV zEM*!Py;LFYhpZl)Kez`L8S(V09OB1~*4CJ!7~#P@81#Jxpv8dveKrL=C?spS`jT|| zpIV9MoiSx)?=RjZ1+(bo^j@J9beK!QT$3|L<3oa@Er8qVb}0iJknFR=FXuw5&M30| zwF^MJycY^o9Jb|Q_Omk5rUVvw-_4(NtgG^jZa$(vOUW2Z%NMZG=D;fb_aJz>$gk>+ zLRT;&D#AJ~q!R=_&#M(-C}#rB`zN7sPi)YgSaA}yb}F||#I00L;d2qCT;eA$4m*my zfB|OOUuA~TDI~ALf$)OJS`Ip_klx&HVc6Ytt(GYFap1BP9qR(^d zb!dLvVUVc58`SVLHt}g-hs-OrYUKhULylNDSBEZGb~1FYMYTTwPi9tzQ$coYoNsUc z87$YE1oFJ}?Vwm{L>_`<+|Hv<(OO)%^<8_7a4I_JX%JVDKNA+wa_Z%VQ%v~}((Jq6 zOwx`YcmBp*Q`b1O27DnP$MbHRdv1K&6P^yrf&XEVd_HUvyiyv5*wPeo&B4-QGmlO2p#rg1xahO=VdP37x*HgUYSDy_A&qwEO4A znQ%(cIey`^`yxKRfDbkGU*Z+E`+rkQB_mfro1%NICME*hxE9WDxEGKES(Ej$Z{d!H zNy6G))Wj*lDhbf#T{zDE2fAoi!fr9F?-(0vQI2PD66HXu9|)Ezl*~1w_Hwo-6f2_K zOSuyDzPN+S$?K`dJE<2>$EV@^?DY}Hhufx7H2l_`L3uTTeT?~V0g+$xw}YRIY1jiB z9lZV$1&M-c2I|xQ!NXK_e`kU~@S=vjl>;xgsi9v!w9_3g{nX)nfdhDi~)L6xE;oSGx8=3)V0s4$z zjgk8sD!h_?r5>B}IGT>X0+#R}Jc>iU1+V7$zgd@ym@AlWsq(hnF)4s$!=RRyFleyV zW80VLOH^(5{r$K~B=CYhfY_JMrF>iJ2BrXB?vPayUsHBupkaN7_FWl?lsCseUtF<1B-I^Nz?>Td4mde zbcSV;?4q3WIfy|QIzV8c@~3#k_JvZiD!xX@kglV@^_PrT{B&c(v$+vbo3NLft^C&Q zXE?vfB$Y^SELVH)TV1UeO(-h^t@nof<6f87nLm6Q%xLz4@HJ_vWDH0p&KFr+?F(o! zKPu0pjXseamo31O;mq+5$?%;B$XA#Hvx%#=tTZo%j`AX=J9Vq4i7{d?2xQ_OctO-Q^1hcfM^%xWQ^qS zGqwfIIv8}#iJ%~CD#opA{s0AlZp%t@rJB%U*QSsmM)8&LVA*%8D}$&t>bJ}q>sAhi zC5uKN%O|uR!CN3Wm=)-5w>F>0$Xa<#P<5jJ^=N&v9YQU%yzfuN4JP21VfEhJ-`J{D z?*lRlX`mt-w?RtZUQSmbvnpy*=a&B3ur{O}7S24&y%>p=ezmcv-WTSpd%tjTgT9uu z1kyoXmEHsxh;v0zJqPp-pZ|&GbAMbezcrUG%cfv zU?GM{Z_!8ZI73GO{z9F79Zwgq^QK=>WAOv!6jX(y)nf$xlE_ek537it0ljFk+Jl>Y z7o7CgrWRha_D>2gyk7fg&Jv%2ob1P?f#7m63$321Llsd@^u(^5=i#zuCJg%4?@p-@ z*<=ix^3|N*rqWB8T=Bgy+;2dJ?otz&$3#+nGN%3f$UdU0`GtH94#ek82l;p7bUo@M95ogm7X6O%;ayaj zyPtt3UhAulO`VK&-f5Y%V8F8LpViv^Ij9CTZo@MidR|tUulc3(=J1Jhs%}Q3b@H#G zkL&s~fY4~R%-0U5`|ELnBN+pYAcCRmw9+$}8g$aOOT9(-kt4>@il7kd+%*)XJA{5+ z_*!%^??H&K`voq<(csGJ>f>{niI`l;>aYOLJxM<1Y~Dami-~Y7k*30tSU$ioxPgr} z6dNp!MX=W_ju=|M{QW6XZDT@1(^VsGRqO8CNS;wYgO8*oTXvW*&6(uD)GgcT@WTz38Lo0xd3^Ma?gX|K4*x}%DotxhP8 z+br})svQbzEGK`@IaaxROXJUey%Y*vy7HbrsI_oTWBJBLaOkB?9&q>(9CUnKw5|0w z?2Vl1ps#)z)-JH>Z^h*_RJP{B6wmB*?O`3}`QlW!G{(t*Qv;1Xom`dtKxo7*x4N-vVKxG<09hyE^VO;)e?iiH~(OBkiij zv{*e!N*|hG(0cDISbRzekK;8ax@)mY`ud;FF ze=tW_rP2t7~nN(S`o#l2zfI~9r0#?>K?42K)E6M57b%Njo6C$)>I(k+5 z5vDTzRVBIb{wyINz`^=U7C1~%QriX2r8@YV53Y4CVJg+{Q+TugiZY0y)q7W2iNBl* zVGc~42uj}C29q}zy2psl3Nq`|{>Q#)=#L7|zS{4Q(FJ?)10>)iyqy8y?wWPp=lg_u#<69f&rSJi7*qtTd8|T>UkBbmvH~9%2Z=NBRTJXlWtC zB2|*ZJ?yaDBNpb^0 zP!O;gcue18()Zreud-yQV#HZVp#CAp)Mj(wee3b9$gWeyKYY4)7+nM_>^>Wm?3-b; z4Q9(VN&AHfFQ_Um16{%hw~Pw>7+=3Veni--$l2Ex3g5@;v$FBqh6FYEZ@&8+8~XM+ zIl{%@r(@e2o{ht=!Q_LdIZOVWbJQ<1w8Cmf=Hmyx znRbxOM2iIrmrRH9XyRy^v=fT_xaLMI`@C1%jL-kI`8jrBov2_ExAn&NjD%{jJMH?d zHLp_g8c>U|mc;k>G$R<(L0*Q(RinQPJ1&bK+A|CufRF@QV@TimpN{Y4biTO-%5#YNt@Zluh!bp$KJs?oB3Xu zVlO2|Sgbe=`(58d8o#^i^enKLr3hE18RaL)Al3Jl=cAb7>2I|gqRF7prH=)=2UR%= z2Il!)818teFkk4hc;Stt2Cex=%xa;XMGzMB;|;5Kfvw?uFE`AdtW+w?ik)G)X3j65 z^sPRqBdwwA?QkQtzp!v{MCHO}X+tzZ#inkV!F(m*Q~eTBUekW1B49T>9b~_?z7oSqJyf|I;p<7eMnuM_xc5tWL>o62t`ce_+-LdOeYDSe z{dX21sN!G~$9q{E^~?J13Pf5%D+F5A49|q$bu(B{8g0scvtU9P^J#c%ziORu_WCm? znt=S&FNmz2(T9^ljlSi1v2y7=C!As{XcrI57tg=s-gx?Yf>QviT#l8SvlVioy3aw= z$V2sbCqGjZhx1r3%OpN$UTF3pS@jtpl$mOArTsJY+?_Wu0 zDC>4c!KKwpjM%lek#o_@Uc(Xk`fc2A z=Lf{7ZL9W&#|ui2`;!AF=-l?urmz&As@M}4o;JA24v|qQ=z>AiUjLzi$s}v!jLBrV7RF@cf~CwX z>%8V2Pe?}VB0=cVxmb*@@AJGIL$=U+fib)nU*Bv^5ufJop55}vSJlY|o!D|1gkhz! z#=o2BL@oWk#*%^%`p+%(mucQeCgI{V zpQS(hQGxB_Z;KTO&4OhM8GQ)44Dg1|q;Mznn0Py%!X+vNU4o`}^GR zu0e^%3rOcr`tx`7%)id9gQGs5+|CVhF~36g4I4#4N29CFP%>R_*!%=Vlv1< zcc_z3eA~#cj4k83>W%Fsj>Wqv(*`1!%8<+0afR`(A|p+XJv3^p57IXM`qp`TM_U?l z3CCN3m3Tw!^TAtWexz;x4`tKIQ} z+|y~t$0L42VGf9Kv#jr=2Xl8b(72zX{K(Z4h-Xgm9kRkgO}mV$4$=Gd7dKoiDB3^Q zWvwsAKkkYC_kBX{u?im4k}-mh%N>ZlHFPM)H%k|8NvHZLOjkdTLv?dezp1c(x|qn2 ztiaLL?;7i2aqR1>yW|*4#hE&jCq(lk(7}2t;5C!TEvT(?y$OLUK1B1P66c5IrDU~< z-f;CR4UWY-8bhVv)P`K&dSKnvYGM7BuU|$tw~$NBvJ zmsH)vti-UeynL^>ip^Z(jnDeOUqw_+F>ZMlN8E#^^3>sl!sfjxL-FBQj6=5-P1{2fS^IHjm=#}62tzs<60eiNg*X`Lx z;kz%e*yI;4J-2?O)Ss%a$jxQ4Ruv{@K85F*>vYv6hDmWl|2}Gz#OIAr2;*2hN^!~5v-a0DE|6lu6EI>LG zq@)C-5y=6hOS-#7kd`5aQc^l3L&t*;~%;}ZsyL<{f_H;z4cc#{Ah;~0`RJTo+tVcka*^*sRB5R|`9k>&$6GGT)O6I?JJbk5}=ezOlfglE31z z)|+;Hn+!YxE>sKQ2`1J;87sa6qnFEtyAa~kKlSoPsnyE56k%(=m3_^DSW<*c&*<^R4=7)^l=R|T~|iB~!-^__Ctf-jO%qHL*yG2VXyiwMW^2G$7(c5(1lNcrSEYXMgx6d|A`EIV*7$5T! z95jv2j;v@8azeTe_T)v%Dyq6|15I@fTf=>>4o(Xy+Fo>+t*jd?u`o||TKr_5@>^`B zWSn0v4){i#e8=^(!8}|vrgFxm`&t))on+MzWRTVHmk8MtefXBwl6JcAHGcWR-#$e2 zqrLG9Z;B+9-x_NgCmNi1&G2?^60=k*(BV2KgT8S z(N4AT1p@Zi)1nQ2A|I5;*seLC^RQCyB*EZ-bGgzyu26==d(85JMBeb8Ia+#usPAA- zf(#OqqYXqPcbF5iKBm{fToFQDI_S?XX)+I}5?LEG_lKSh5uRAn!RX8L$USe<*~3(> zem6B)E#~}k8)CGm_O+S2ZM@H_leNs{F_U_YQ-4qWeOik=RdhJt^GKG@ku>!P?pebl zOk6JR%#)iO1QjzmSNA?9gA;MVrN=gX@7%)nEhZNl-Ex&QKPlcl`n zDHv^}P_dLpg|45d5_O;AN(c93(a#pUD#oB%F4YRLr`63y&@z5poPhk>!B18t-Uvmr z{!V0bt}SeJ3H=2ch3k~K_Awe)i*3iNB)@g03eayrPtsm&mZuhC0)l#Zp1pWZ<7yNW z4$FUwOvlvOpqfX?J|4&@6QYT3{JB*w<)a$5l{r8^W=1@YMrh)<8W2wk6VP@{N5M#xLGHF%Jki6c`QB3SU)_1>PO4L z796F1yG6xsj*j4l&j{E9n%EG?U|Fd#*Bwxq66UH9TWfwLQnc3NUo3U|GrrsrYN>Z4 zAY<%F7=xngqiyHr*_~lOc#47spZgL6uag!9NF*Cgy=0BO{Z^G+BJ}4S9?v(5UO)mi zzZu5|$hio_y1ZBTHBO9^DVskc%caq15cHu)*b`_yfDV*lcX{rPeZOh^@uVQo+ohN1 z986t$HFqvbbuHe;n1JTYkbb5$ZWHfW%;nPcB-RJ^>}U*RkWFj{fJpcy zNR?|2@S@}MS(Nu6*^9C?ufJ3&RZb+KKmIhy?u6UuZ=R2!wux@^Xl6TEy`^&f1%r1z zR7LR*??We=%IUgGN*$YLvLO387hGQ+l33hi<1#zYJ92M45E@Oc+Y}gcHg-T?C%b08 z4yTh)`!&*RF*1`il@ZCJAEEot(VCAom(zqZu1bKanAOp{k2k;-(+i95Xeu`-8y^xM zDhqKRuI572wex-2yf=-*d`fZEe=co@vU@j~o-66=M{gC5jhu4hyERy&TD^@jYc^zm zwnK5gsa%&%cen$^G6D22ouhhstfT8#7)Bt4e7My**-k$woeQd!m6mRb#o5R;>VrEj zrLe?`>a%FT<{>ER`2Mjtr_thBRMgWWFB{m0pdFWm_GYH~D^FXjsH}-|p#iQsJ1KV_ z*BF0Zoc<}) z=(W2HjB=9Tsh3?H9GE>gPwYoBBK)97k`k-I0&2sbwNvW)!WNA)Od4+cHR(8^p!{ev zo}Y466NuBE6F4k~&+cC7SC<0lW{x+tz6%3C+UM!2tWc6{dc4yf@@Bbg9R@zmZc{#4 z^R<UFk&AB; zCbc|r(H$jI&xUSIf!}8II8CtX==hn@dhwfpSW}=kwk;BViiW$6YK9Tp6)0ekeiP}&IVG0~ubafBem%3g`15^hzZ7VmhW@_wU-xO#?Tdg`ZF2LKoyz-B?TG`5 zwEN7h&lrB76%}ZK28xf=Y;0ezNBVEj&iWKi}XS^VM3Ieb%-GUy7X$DDj{haXCG0ywDFZSm*NeX7a^-f_4$-@X&;{&g49w zrtG%VL8%5@XS3wXx(CDq{|jQI5!df0nna-zrLv4wBKZ+bTFS zH4gPUkKdDPUVpm{TcItboq?DC9*0kQa6MGx)e|23ts_?2b2H+bPc8?YUg=^l^Gk9W z`Z8n=5OpGGCm#Z3FLUHSwgZog(tvD=gV7y;9K`aQBmhxr98nQkZ78d$Uh9Vm%;I#RA$nl!K`N1Ab+zj|}eZhPW;%XKV>@b5c z(R2+zas}m(V1=)~2Sdy;x`nn(@l(AK?D|ibB+GF9z8>I_-i!@S08o=8~H}Xt|k_jSy0dLSm7fW;tU`haHnp>?gGF93r z^~d|QWdE+n++y!MI(YyXk*rNkBn;Gg%m~;QI;sNXtt`FW+iTHh_ z6m`FzTx-a+Y<^xrUUr))QtIXLFkDji+UH={BihKZsi+1gM4jzqKxks`R+Fvk3Rfdz zev|Gr#Uqr#LVCrq?&^0%`wWk%7lanKZ61?9gPHqaZwHhOam>b4GfXE<vL<&Q>(lDS} z3a`9vBZ?IOLa{Epg!*;{)0OX*Pkr%YI-6(IyLxlkx%$L< zo|_7~tFkg{oS$?sw)*AWqw6PCGrbTe8@Exhi(BTZb$tJfLS7rZ*c6{vytQ5Q%|e|T zHs}+(_m8_3MdkL?ZRfJ9dpv;p$8FL@`JROx2)Hu6K+EMiT z%>&tU0AUdUYROUN4iZ3p>dvZ;rdLW@X1V3eAA0a?ylf137PY?u$1Z$QZ$XS~^HN`r zb&eATfQ+CU$ET-PTj;%{VTJIb3h!Y9IIVr6ap4|0rme_O+zNW^Yg11T^rDP6s6cNj z5ubV^?`1tvz#I@RJ`{~xO7une*m*gua7}kY%^J-qfOd1sd1@E+IWj#a@#MDKK0vuTpEw(j+K`{5dR zIc`48OpOirLn6}*g`aN8-XILy8f7rD?>TJE*w?gs=xkzEZ}Vj3Yme5Trf?+camIxF zcE7*M16koZp~~_0CZg7I%gv!}U6>01#}r1(jZb$T}!wKn6#J^?Pt9Z(5I&$`tNz`7bBFxUZ%& zm7+9?-d&{|i~uJxdi#@@Ob-RH&)j&GxC9`WgKH{}nppgdDkgv<=UL6MKY(YJ#gSCs zEeAvotOR}SKk#M$6K?kZ%P$!qI;~O%I#LI{oE0B9Udm);RRkWCU7|HEJsmhe5yWz! z0EvZ>0qaMyD5FOFl1SQ}*CaA=ugfr?0`hNs-2aC={OHB|XUl_gn1DIVZhX+$8~?v% zTP%*JN}JRJN;_T9wj1l}e+i6J+2>Q)nHnrIxar^NT^krKkGkVuI&O*(!55PJ7KeBM zjY^AR?JcP0Jor8iy!QW6$d&%Gvxor{g)*DpFr4Ht0F=l{QDkI0U(C|cr#<$9E@F`c zjset3PTBv&&cuP@vJ40TLr|y_oH$j;pGvfMWFWv zFV6-?rRL*8xaDyhRk1`;toi9bB830vUj|WmmV1zQxSOV~6cpSKO(>gJ!NN~K#v_yg z469syJlq49id5k-B7x@sa*ACAfJhH0EQ4Q+q1|bLIc3V}ec^7v9F_*g!>Rq3n}P>f zeyg}BG61yD??LHm;of5)Z3X5KLA3&1lItoZ(JxNequv+(*gvbbPJl1_4*1A~lH|U8 zjVtW;Iu4kVxB#t@puLi7b3}#|oL=D{j|Y&_dU}Rk_0Fe@{|JE<8qL*Qjr6nDfM-)s zZE&B5n+R(acx##mG^>1SI>)^K-15WV8wS(9by$jyrx|91?B9N&@iGweCj(kV`3vBF zn&_m&#(lKCj~!tJx)kyT#WT)`RlM?ySN(FhjNeoKd5o4>{$G^KnSMn{1dnCLUmj;) zre_^tF*#Ve50E#u?#Axhse|2#*&lmOK0ent>(F?raaN)cuz_U^l_>#4&RkII z&un6>-y8TQUXU`J&8OV-X9`W|{xc?v0D!0C4%WE+#=(G{m)WPk!PPxI#-jXGqXBwa z7!UJ5G>s)7nB$hJxiAm@+Dbo_zc{xxn`kJvFvW^XxByZI>TJcvL~wUNKKI%dg7smRL#i2{ONhiWbWElmM#!d!L`q+l@- zf9;ZbdS+i zY82=Ksg!H7ELcch{I%}Pvb-@z^{$ZRcZ^S@oF{$DI+7m zH>&A$yC-Y+tq7>;_z40x6Y5l&WXr4B{3_UE)T!WpD1_7)CL>Ay&I&OBiV{gIhfq+J zKb;W-)!D2yBnHsKuD{-Fid$N5$2l8wzFcqvTE4)n$NMTJ0I6}~K`4X(Y`^-1wmba% zCioa!ob)&C#hWj-oDp~AU)vvur)Zy^x0aS3zyJgic-gCPh#$?>Ig?z+^inb|-x(Sq z7q~SdxLu1@DY=hp3k^JT>P@5{tw8 zE_d2+#=C2HzIM-%c~KxIPdd z2Asn^JO!P!qXdTVg^)+`xamaP5{&z|`u2b`vO-vmxp@;Pg{_eRbHd*t8=F`6@GRTr zCZIFTs;@})@F8NUneI^-`ZIv0+{gNCBZV)|)}$_HP=VeCzRB7;UM%N}z(&5ra0y80 zJ8WI`bAjR#Outb?%Cka> z^13uuknfvyw;MQI8;WPuG1RI!DjePJ;F3~>GXoBIRu4Ij$DAMY4rq=A?Y+%Tw)36X zambB48IBK3wwp3zZB%-6d4akNMEU$_yF5qnR)6BvdudMiZaL=!s1yq4yFN$`zFYz% z*YZv4cyp}z$JQvk({}>uKCCW<8_W)9A`tp`xZ(yLBd~0yX8Gd-pSNpvpzONfw&Rwx z28vIq%?Coif+f)Mp69xW&@Q8L#4Ouf>JhQowKOMp8JB1Oh-2MW0`}nY0EL36tSWZJ z|49vQ6_jqM~mi(w7 zAN=&3-oP9p2@C~*A5wosria;Az73_4HO+Uk3qt1dDQIIrvz9$>P$71noJ{ z!lrW4`}S>fk4ESiH5Mq>(7_V!zU6#m{V&TOb(UEvON7@sSDl{wKzcDK4hW|tV1WZ0 zK~(P2uF@loo*Ex5Ro+{^DcTY33zW~E0XwH%q!Gm`yIfU1{cSJn-n;mjyGvAtU(-;# zGOqrxcR>Xdi=)vC4DlNA!ztX9`bWHdY>dl=Ex844utg8HB$nZNj(*odpT}G!w{)-% zZZu}z0v@j4z$6KWogQY}QJa66aT)9?5|*5_DX&oN8_fxYWEq^P^OC38-`=|f68;j6 zQ90%^KVHoK4yC!^GA{r?IYxS_~2vGBBKL$Bh7A#iT^Zkd*)Dl>PI!ABXu{G zf-$s3vf???V!5(G{e9sVY9THT8C>50^WDEUtc=SIupa!^H}13Bag{XozY%rg#EaMD z5`~#YqD)wR1K8q+aA9@uo(DE>p^W~~5Na|RCve*zKQ$#yov56HYkZr4yR)6`d^6ZV zdV0{_ic5;I2jt|6iSkW)qFWLwS=zwY&PTwnIq4*{AIXGvP3rsiPxN5qVvd?^<+>mK^gGI}g10$}^< zh&oWwRL+f9iCtH$myR($0(%Gwu7>7vc}O_J>#aZDS!?ixEz8fOJw%CHDca!J4h^o!^w@kXU|W9c?qE23A9uP=J|Vcyc{?7hHri7t zTHrhds;k%qKaYKS+pBvCG$M`_z|Ee={ypN%oj;fTAuy~1m}egdb?FDm&t~VuomQ|* zqI%mgmcGew@h9RG?@=bNMeEtgL|bc_N9*ZM^C|1a74yc z!KR@BZ=d#q6D%EfAFgq2O+jAGrC;d{VQ-d2#7kw5N9#X!o07uACe-0?2E%ncqGj=GjdoW99 zF1+k1rq*^m?l@3Gh2NLK61nEfeESI0g)dtI=~OW%I?^OPMXyET_>;bxY%~p2|1^K? zO>19|2(y~xe3EK6nQZUGbw3mmqiAw6cX3!x9JnMh2goSG;4deRWNpX%j6i%~0dd{g zzOhmyb&f=1Uqq0w#L5=FAF_Hq`;e#KVnxB4)J2JXDm&@nSYPOmYJ%wfNsS4bhkUp= zA5O&S<4?TW&I8+KTma0|7UY2n1$1po3W`@g;(fTt_{(U-rO;J?^(f8Edv%RJcwFWsZ^iX&`7f(4n7 zyIvdvFLCqS`A#`DacRfpC;+1r0xoB*vF146#IFGce;gl!j7ai!d>#5Pz!7^w$}1Xr zY%iACq&WKa$``Bwha?%XDAM}kcMXg31v2}>VX+@@Vt6l(x}}&V*E5d}5w6%6K%?z) z+!4g{{&(n|kw1#&L3*T>YUfRNW%v^rxS8j@|MQFQe{f_YsgixwP376#H$;hvyMckG zZ?7p8Sn0X?rt1Rg?yGR5u>1f|A=jO?01Y+!o1$k~b>NKN&RlW&{C40|pdjX3YQAATY0N?Ad{LP5UH`R+qJsJtx|8Q92 zDklLKKUZHCXZRm6RzN|kXpc4qG`vBDFkh;;rF;kciOQp9_NXGI>N(Vsh`tI~nXofV ze50sj-WQrpq}Uys@`p}vU>8`rb<71M{1j7KO55$5%K|m4ch0b*{v=6iUX%~AQRv5l zwpWE9z~+ovY^<3Cz$w) z_CW^$c@gh?+dW=AZD5wfcT*3_s&fvQ^QK+%fk?VPZYT%C1#FY>X?_V3-YpKh`*(jh zM2e({4^vT?)3tlV-R_oKF=hz+n9^1X9r*rYX^&%6UP|#AqUHtt{$|_!2ft}B`^|1R=!5yCTu&|;GDyt zPNG1P75wyk%U-H%^8`x*JzqWs7@xt}eL(9v2cEZ7H1&;YIXj}D46>=F# zjP7&3e-g50d8&MkzJHeiv(!!;IrUB>m566Jd3@_{t8|Go3-hG ze=YyF%i8~6H%%`|1<9T~gEys%={u8x)l*=#C@$U5$7{vK=3;(GoqFv~c{|TCoPel5 z#OmApsHXBg|4{K-X$fX$#B6Q)U@aSI;aIuiuS1S?R;HAN@lgLOY5hpmXz|DcK5W0p zv2Cuo{M59*q!esD@-Voq!TYT-(u70sd6?c8^9-VQ8DPSq3cM ze@kb4vb;rT6M{{JLq#*y-Dv@rw8gq@4uju_*iMi%kBB~jRCB2=B{D8RA%mQKWc?-@ zz7Q11CVV5#v?!zl#p9bmrAUS2T;9%TQ66OEQB2Rx_gK9P9UdzGkZ)OW6X}uH>eSQ| zrH^M)Ai3UTj1GQs?a>%WJV~zakvp%tiLBp%iO{kDV6<#OUfE2sfi@dkRP4zwc!gy| zyH%s9OiWJi14mPyG%xw@K?OIh4Q<+HdOk_sMShmbT2s?KO=yZy;Fhv`!do$vKH}57 z;4xOQDK>_%q>wM)%zbd1neKZ+6FO!+)@<*EFs(`Z5w-lVl7S_f1rArUuRYHZxCgs! zZtE!kS61eaEC==-uBXUCw6z$5$8(_0u7_(HguI%4nvs(M$>oII?r6+LfcQnhCnD~+ zrP%b^VvxL4;*H~?{Ggxm+R)}Wv= z?PAuZ^bQS>{nE_70WWRV=_Fm;lBd!nAKMcAV9s?Ee_ZNmkXxao3v(r?&-^qT+5O`5 z$R?gBrfzr7;{%1TPs%TV#h)MH z(m=Eh|FY(*>{BGIV|@Gz;~&H5m$zzMB?D9sf8t< zKA)d|ZvWL;iG~aGFjRhGUW%Wcfa)g_+m#v|MRI8T^uyl4?)3=Zkg|iDe~SU<5w#OzwRys+;Jn-1g|pxc++ucz6Dc7k zZW+q53e3tYYO&<`6G&I$I)0+04vNQ=3mwq{rQ}e<#zEthFU;wxGeUpvcGHy8cRnY? zoyU9nC;`4|-Pz|sy|==$k9?9?u#n65W!?o-YUSQbwiR$%Km=z|?yVl9$&pBCQgRyH zkIMb(%Qp4##yeq2zE-0$1W@893=IX~J__sp(JIlC_Oe%~%$o8}BFG=)2HF_Kl|2S0BgOtZ!^Q6h@CET5mYt zg%gZl^?v}Ms9@UG)AlJDD|+qaaR`=M-$M@`W0seJ$}05{7vofrKf%lO*3@h&bmwe+kPGRfupHYz&QjL zN0*V5ehxg|y+X5M;f{Mf8*ul4;tSJy81Kf0SybhmH6MKUFxBR`&eYY^0LA8ih)@&@ zjoc83f~vGv1!ZN9##hV|J3y@?Z2ajIBStgkHM_)LIKF7py(}GZ=o~}vgroUpQ>*GC zB=VCiT_axT1XVoCIApc?MJRY zzJc$PHO`3WaCzk^0HwNm%bF17K@mXE*`?Pu5z4$a#ztg*=srqE_h3`zM^Gr7~CLwXRdk4b0wf zzIx4f%PC35+w3k9cs!j}foXyA0+ce8$(|Bv8Zry8DF@d|o6zJ6%QC`Rw{YmBW(0YJ zh*-tr-mdv-Q8>KcC;|>{fO04v(Rqj<@lq3-jk~VZUZBrjAeZj-&*Q@QSeO2E3Y)w% z4m5sO5|ts=Ch@3wb?qLg#o6@NI6}&Jn3?6Z=HLENYCpy`Knpo~M1;JLp;sVlGak!H zdk9?T5vgM)cO!&*YhcYH84WY3!^z3oBLx-)Oz(Q{%3tM&49XHxzaPz0{ZL4MgLN@E~~*5GYq zUaV8~c0b)ld{5-(fx|Wa5-LqU)Cc8DQF*5lsYBblda&Z^SPk*YAeD+AT@dp<&WRN+ z>Rt*s)#{zz_jlE`{3@EnKBro9=0a|p5oT74Be1XhP$5kc*`h7C&~C#%IwXn0Sb_a@ zMLxOjIpL3zzPWt=&`Pu8yj4A#KC-aB2HDoJ7n5DFK6|lV(1mQCEvftxO)3%d#ctB? zd}@|VwD|*Vn^aC7>Z`B-r`ckM=y}KB$LwHv@9m-vKOMak)G03~JxF=i8M3)?86U0b zc;ecM0SjdJlPvBY430trHeT2KQ}Aj)nW4*W?r%Lh{?)p`-oh)$s|hnK-9kWWqbb$7 zZ<+t!>(c-H)W27)(@l&|09$2zQ5*1`jJl&RS0s%pd`LuV8yiChSH#Xu%?O89Pd8z|Rr84*`qx{W@-QK-*4i`DbtZILadso@q zSn6rqh@GA>gjO(aS9o5oY4t8zQpda7EIM!$Ei2NgE0we-0a&EA{PE14ju>PB?IgwOTvxPDqCh**!5CCuCb~ZYp}t+;_rUd{uKIuuZXr z8ZNRZ0!qL`jwIJfuJu-_s#W|NivJz{5wz*duUF2Pw%d!$;#jeWeZaMWguOAma=Ws4 zlW&mZTF_F{Z!n|C=Vx6&%clBgR+o1p;moqrA|@Sf>2YoRH4~dzEfawyW+e&IElSsi z_-AJkT8HK!< z2;P0pdP1WU^VbpVpQlO%pFJjt7#nz>HKyriZljQ^${8z7+~6=*SmbmUC_?iiudK(T z^Z7)^S-XonNeVYNvtmkO__yTEP)!5xcF;snsKY@UR8=ZBc9%)$j;@^g;67ijM5a3Y zwf?q>p5uPV?0}e>4w9NMJuD}>r&_{d7zMhtgY&nz;iN4`iC-t ze%$MFQ1NTb4PFq-Et%H&$!YDV@dKq4a>L6$%t}SLe}ovi`n@3+9YhGl?W&Qz8hwyo zm|UIdEup!mgwLGXYGC$nrz5aEOt^8koTHy}a}T31?dyaPxDkiV(G_ z)L;nAwuIRDfwSXUkSdzil$7EDX|kd99;X z)M=~JZ*tp`U+%P`VbB{VuNh)$)~Yyu(hr#$Bpc}R`9DyUJEmE-y*KfA68T~KXAwq~ z0ZBp-uHxH7=Ax%DrnY||y)-=t9ZZUNqhSAS;0oL#r%v zS)icbG_Gfu{2m}=;hWW0&z@gn%5#7Q$8!keXnIAPa%{LbR1l~8!WZKCu^jR(;C~5j zN&|SB7RB>5>myfio9(ycvOoAm@+$A@3eCE0tY77`cWcMvU9&s^NZJVemB9OV85pLT z%gZn~4QOUIA5sZTb+~_6Yt*tWHrOLqn_sdg91t>WuEB2~;+e~F`Qv0SS!Hn#oCBD+ za!6!>)3TYt_s<(Yy2YCi9u8kzF6P-pG0@Q7OU@G`zYL4A|A5wU9oDpk z80%5qiQVq5a&S>9{X14u>eawn({Q`uLqpnbz|yD3(cDh?MQbZ{hO4tDK5MzHUdxV8 zfCPZqj#s%c$y#7S02K;*W69D5OS`f;uz{tq({LW_Y6=3}VhVeYtMZxwVqh$64jH>o zxq@IMM`q@1&eHkHqQ;3sKPudl*(mBn%QBPE4~t|)Y?mk%8O#q%?+%w;4KWnAW6O~2 zY8%DSuMTUtSei6ws|bBVZptJ{18j(J-B^jk9NmFOqK;QnU~j!y2?+OK;D?RxYYk7e zvxz`PPo?P!q>^hHoe3zbvOZPKM{>O(=ql3pEh#UKoI}2DMOYXF`_pwZOk%F5Nis3I zyk(~HXv=DFI+GrK;@Fkte=dJQ$j*$C(5ait6R#n@8h5Fx{+?>WW;;1EkWcQ`c(wP$ zn+u(XUwb&3|GtBt71=!hh)FgRHuZh5>RtTp-bO7A7~4ETuo7y5Y0U!5rWpBYflGrd zU-C2WBrk1yRq7{!2VR1tvCknl&do-he<_MJ(d-%7OtC5hXRIe18?UOK-kg2C4zE0z zZ!*5&DK_JO7q<~i;$mLwOwm?On%7)^S-=z@nz`J4EJ*57*?28F0sv|zbU+*VnJzgd zF5%Xz?Szq$g@O2ISqZAgf~oWtcE2_ctgFDBmdV3Cr<|VOU(?3oolMz;!Dz&#Q4ds( zrc94WHuNAXL3~&+wrV#P5{+u?_WM8k(vtlf*ao#sIcO69EoNsUMtJYsZn#>@qOEl0 z3URx#oV4z6K+W$A5VG2UK53`*?z^;UDx*6kS*%|@vvQxDn>Cf^;|FL^an#b3u0(Y+ z=w!3ugVBOJAGCkGWicYSVj!il#TxGOPPg6>tQ>$D>(>X-;%0aE5vMOHj{l-!fBZYu zym<4(Dr=+j2hRsa$ZCO*LaLwHrKI*NBt-u8Ni%&#nIB)LS!TadiG%^SM#Uh`&qu$D zo|Y`*(y*()9T6O#p_GzaKE9Uy4!$cwPaGFI|7Su;J|JIDtnVq;xy}>KT6@*qNZ))M zsl9T*PdEPT+4r912N-%6vWHN1PX}7No$*V#jqM+t92Lo zd<~CZ*!DX0xr?6TER0APlE5n!#*DmT6LIPBtXL-gy5FK96qB*8s^R_VxsOxIW|NdW z-HdDQ1=r2zO@k9Te3RiB%I(Bul0%$x!O6tO&S9I<1@cMTl$J`*d=p7eNI0UKpP4Dm zMCR=nYu|E#G1e@Q))?$7q(V!YFy^lhWYV(&OfJLg)dP6q{5nv1W(qzWw6(Lcuay*u zgSjMMEQDYE_I=!>M+pE>INZP8Y_bcOeV zk-OU4G3%74QWr~7;bV_O1B$kP=($ii7TGi0t%}_kLtHr+(D85HP$SM#@Eb2^ySs?Y z$!)Gb3=@R1RWnT*g?XbkH#9NqH-?SQ4TUu&3d;tD>dxfYNe*VyJ}c$ML$)ekdl8E+ z?;r6$twn?3*gUCrCF0k*eeSH@u`xU~lFP5m4l~vg(!S{x6!E0(O;04E>sn~LXpP*T zj`QN^T)XoU^Q+;u^stgF0Y``oERS`*DcRGNUDlU2aW4NMfkPns$rB*Bxmzlw-P&o8 z^$wg+AN)~klPm7VJYs2YR`*7lA8Lkk*cs*aM~ljJ+qS4;EVz-f*JO9Tb((_FSO^P= z!0(^y1I&g_b*NKgeb(r$T58@II(rrt+vU4cD(w!4XNC^mwgq<~Acc}mvkutrl3)#eFmcA8@m<{7VFzsthW zcM<0_?SFGcR)82jrbN9m4b3E_xK3C-F`{a~ULW~+WBg2W@VQ{8`it1nnu-uazF}Xr z+@eB6vBs%_;7hg}OyN{xVd~e%$zE4&dm{@NJUhOvNB^T z(H>gDRkGV-z-{&@aHDe?aV56PPlOhIb?!|%>Py|VKXy%{6k)ieKEE48)pT@Uao|t% z-R*N-iW=u!o4NaTQj#RG=#}Yof!Anyt`Km#?{EtJ0bKhsX+6i4#Ay! zgE&ADm^2*jg(lWY*=C)igYmT{9(##yBnJ2a5Rbz>o7)9W@n0;w!+yfokv$kuX6<}B zXPqGc?aBor&^OZ)Wyg$egJ4WkinH}$EKM%^w3E=0U>F!GB=M#yx}L^PaCdWBkz(DK z{%l;2A0 zFVmCgQo9y+B>I>AsfD(i?0iX%VoWfVgN1?p@`K4#Y}>Ld*KgtE#ozPY z2!A@07?A*fWBW-p1Qm@HKSpON9@Z!)0Ra*~TF+93{SgAXIa|-ez|*oH1*r3epK#ME zS$n1ZC8{Z2sXBW-eYp%QAkgc{3S>|?gV31n*#d*_3@8eqA;e~Qxs}c3(R5>E(`OIB z!AgAX0+aXvZcllt$VJnkYSPm1F;~JEG{EZ¿n!QtQH4#%xXNHnP(O}r^G;)5M& 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 Lb-8jG%i#Y5Ww-X- literal 0 HcmV?d00001 diff --git a/lefdef/doc/lefdefref/images/LEFSyntax.04.1.60.png b/lefdef/doc/lefdefref/images/LEFSyntax.04.1.60.png new file mode 100644 index 0000000000000000000000000000000000000000..06e355736545d128b714720c383e3d93d14ea491 GIT binary patch literal 27343 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

> endobj 1789 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1790 0 obj <>stream +hÞÌUÛŽÛ6}×WL  ›Kê.,úÐx×Åév‘éC´ŠE9*tYPÔ&iÑê_vHúº±‹.Ú…‹š™3sÎpÆæ°v.¾Ëa=8‘1K H"ðHáTΫ̹XràU÷€á<‰iš@ì3Ê<ÈZ‡aÊ´e+gNc>dŸœ÷äõõBšÀâbñò%ÜI—'4!ýZm[wk¸é”U±î}ö–òm)úasNyBveSF:9¼hŸû(J!¡èJøYºsÓˆÔ˜®?íC#“÷:s Eq # žŸ¦)Ð a,°2#ÆÑÖú©ù±=º;¾q¢ü]sRÓ’Ð$ÛNh¶<Ü°õCËöÇÂõ’/à1îÎC<ÆîÜã ÷¨G|—ã÷Æh!A¬;u'{k+Ç•7¢1yç°v9Ôîù’¾Ó6r™îœçE±næ’l¸èËÒ\þp5T‰Á&…ÝóÉë¹çß ûo²þÃÌøMtûÙæv£Ë{ÿJÍïšÆÞÔëjÀ]î€ïSN]/¦>%Ý.Àf„cÏŒp„[¼_ðÐn]JÓÈγ>`p„{áûg¸(„Y}]N‘i‹¦éW‹W9©;Cý«È]øm?Š¡Ö¥ecM5"Bv`A9±á—&:›êÜ+‡üîf¿h¬OµM´µÊJ±«km]Ñ +´Ïà46Ir¢Á3Bûó Ae‰c2gëWŠ[õ Ø·çRhUwâvl?¹½-h¿íÏsy5FtªÊIÕj“»B¢„oJ´CgòA_™\ËyÞ¡}23ï:ñ?¤¯ynœÄÚ¢îP‚a…\¯f°úXÈéT¿<êæmm +k/š§xû˺ï9c÷—'P¤Ž8r.o^_gudÖ-47;œ2wý§g€otí)ó  +5§Ë¨·JþEº#í\@…¾…:ç•¢)>åÜ5åQà_Iß$,Ô;!ÏCGüݹ*Tq +ÛëŇ=ôpt”†b”FcРd9>@N&9i„Y©Oó/2w'Û1{:¾ˆYaàל”¢*ÆFÝêMž žš…˜<Я?áÐOšzP3VOd,õ â<±{dxPârûËú§Ëþ52 +endstream endobj 1791 0 obj <> endobj 1792 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1793 0 obj <>stream +hÞÌVÛnã6}×W ´’ˆ&©«ä¡ë$‹ÛîÂÚ‡ªŠD9ju1(*Þ¢ØÚ¿ìrbÇu·éu€H™Û9g8c†ÁÒš¾½a°ì­ÐƒˆÆàÇ!x¤°JëMbM¯0HJ‹q øƒGdCäQB9$E± +¡>Ú’Ür ¥Ôƒdmýb¿»º†€Ä0ŸÎOOáƒtXLb»[ʬiªv ßµJÈ2Ë…ókò=By#'^€Ë H.Ç’¡.Ž/<ÜÖ^ˆ¬²¶€Ÿ¥ã²ˆ„v…%áêcÖ¬jÑ›ºW‰r…(/$A„{³Ù ˆSêBvãDù„ûOœØà'ªìÍÌtdèôã‡Fh²,Øõ‚‘ì™ãù$°ÿN™ãø9.g1ã„ÛžÃð÷Æh~¤õAv£­rNH"û'ÇxÄh—}å¸È×îZÝg£–êÆqFºsšK¼á¢ÏJsùìèTM$‚±(<>÷þ|îydØ—©ú?3à…$Öí§›xœ\æðŸ`~[×ãË¢ZÞ©W¡¸žG˜}ïðˆx¶(ÈÃüoF8âf„C\âí~ãÒÍÈ,çY¿`pa»ß×…Ðèuíà¾Õ. e6Ôêý Î·Shé—&¸Äh ÆÈ^ÝN”G(ãì!,“ËÃ\÷ptߣûôtt''ƺ¾«j´ +Hmﺩ®P•šFj÷JæÍ*µOtÍ3˜¸Å˜yqt·À`Ú¯aî÷Hl=ùû§ž¾Ï³¶Ü~ULδýëvhRçPF-ÊêF¨Kq;,SÃ΀¥:ž6oËí“Îu/PåžDt•m>9RcÛͳºîñÄØùsÍ<pu,ÞJV­Ò—Âßÿ^³‹Ó©Î0AÝ À§!e'§h]g²Õxó7/ÑjúåüöµMè&_p°ôŽKhFëPˆ!–Úz 1¬ìV¢M1=&)®‘á>GN|Š—Þ.ÑÒœR©UâÅ+1ñ +‹,ïß@Þ um§@××[†p+D,"MÛÉΔÛR¨A¶ÀÏä7Ë=€ôÈýÓ¿Ÿ…{!o”Üé=:^l?Àô~kPôB™¡ÑÅ^´xÅ渷Yþ;ȱwU+täFK†_mh•z¦ðs2=p j{…ÿ¸@W~ÞšM'°ÿ1Ñ/YŸ@6(ú•[$E}> endobj 1795 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1796 0 obj <>stream +hÞÌUÛnÛF}×WL &#s½Ë»b¸@$ËŠ¦ d"y°ò@“+™-µ–”j£Èõ/;»¼ÈqXÉ-Z ²`’göÌÎ9;C1X ÎßÞ0X•߀†à†>8$,ãhp~Í€A´0(þá………8”P¢õ€bB]Ä¢d`J©Ñoƒ[ã§é5x$„Éùd8„Òd! b%ãõ:+˜‰ŠËeœpósô#nåÔ[ÙÄñ<°a¾ÑUÒWÉñÆö÷¹çÛF@ÜR·–éÛ$ðÛ8ê'¶ûUíQî8:ˆò;sFÚ’`Ð ['TµÌkªu¼ºÚw±é¸Ä3Á¦Ì´<¼ LËf!³‰m8&Ãÿ î+!n œú ‹K·I¦O㣩#¼Æe™™ÖkB­åRåœmû²NÕ6µ¨ÃRµüa*ª*$€:)t×gu}á²ÿ&ëÿx™>Ç'¡²Ÿ6е.sëøWö|“çõÍ<[ÝW%ÎBÉq‡0cgÚq ž’všlÝÂ>Nñ~À½zêFdä×ý¬np±sá¸û§8(„6"ðó+0x^rÈ–°0ÊJ&ëÍÂxËvgpbí¸Ý#™³ù•,6íÄècÊdÚAÿ`TAÛ' +endstream endobj 1797 0 obj <> endobj 1798 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1799 0 obj <>stream +hÞÌVÝnÛ6½×Spwb 3¤þ]Õv2dHº VÓ‹yŒM{ZeJ ¤´ÁÐê[î#)YJ›H¹Ø€Å@Dò|<)†ÎÙ/k†•ù(¦ +’ù)áìEêœ]0ÄPºw˜‡(üàÁ’˜Ìû”P¥G‡‚BÀÒ­3#”R¥ŸßÝ«ó ’-Ï–oߢ…YB·8(~G$H( l¢&w3 é/x2 ÕÑ |3 ÙŸj37™#˜ ’®:X¶Áú¡ öšc? ¡ûˆ<Êð,„aŒgK˜G<×Ç þ÷8‹ƒXêFÛ5ÛáˆÄî63ÂâªÊð âu ©ël²¥ºpžźr:–¤Eï•ŽåÖTHŒ¬Qtz~÷úÒó•Ëþ«ÿãefüˆ$ºü´Ý€“rY`7à_ñù.Ïíà6;üYWÐ +•€ð}ÂÜìÅÄwÅŽtúo%{FÂ4qßß¡mº9™GVÏz‹£Œ}Sh H„¶Iè¿G®Ø«µ¨/oWª(—÷Ÿ6n¦v +px[lðϽ&C]ˆÕKÔs¹³lÀÁ€NÒ7?ò®ø£P†“ëàë³{ÅÕcçð]!…á I×|«Š…8d²#{dÔa’aL†g×缪ÒÇRèå'î ].Ÿ4Òex䀷ï®e§pÝ(8”—[öœàY×|ûé.ãàX‡ìçfòBpð"Nî‘QæûB®Äž7yÝ1eŒ2»¯jGjVÈ.ÞbroZ%”Sû‡wÙ §Ô².JïÒ¹éZ©4À÷Ó„n×K£5íirß×pWN¥SÚZ—| RhsX‡Øâlë®4ÊœÔUËtlÕ#£Ì4;vÎjjmLøú ³º2„F&ÛõC%@º]VmÏ4OÀ)¾Zñšo@|E¶ƒ‰7ìÿHÑÁï1uÑÆýIAMjµÁß-‹ÀE¹µ{'࣠°¢{ÐÞìë3±h]啘¶.»ý~è‘ÑììIë§ÚÞ6¹èn^G9—²lêwðé(%ïãíëxß7õ€ÙîÙ«˜—²˜v ·œO(óØàšìÞ±An0úû¥+qXú«âpÑHsá ¥Šgk>$}äJ‚ð WK¾¥¶ð¶%Åé_§°Ÿ½œ¯yžÛ.”öh×Po >/þ`v'3§ +endstream endobj 1800 0 obj <> endobj 1801 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1802 0 obj <>stream +hÞÌVËnÛFÝó+fI6Ðx†o"«D"…•c-¢.Æä•<-54†¤kRÿ²wHJŠÙ&‹¨˜Ô™{Î}ÄÉκøyÅÉ®²BD,&~ ÖÖú˜Z N8I·w Ã>xÑ$&‘Ç(sIº·ªPæ#–fÖ„2Æ<’þi}µ/ç ИL/¦ïÞ‘+íð˜Æv¹Ób¿—jG>©ôVdàü–þ‚®¼Î•K½ NytÖI†F_Üð¤} "M„ÊÉZ;ÑЖ(Iæb_@ÕêÎS+ðL.¤AH¨ë%IB¨3æwi†.ÂÃ9æO]ÿÙ9–ÇTÇk1ýcq’¶$ ÁC?>TÂD˃>Z/è¢] +Çói`?—qgàkäL\s—º¶çpüßã±IÄL¥®tÙay“ÕÄ idß8í t¸®¤3ÁxíR™B·é2S9× #S:KÜÇbšebùË1THD:Qr|~÷õ¥ç@³ÿFõlÖ6À ilÊÏúG—û]þŸŠ¢{¹–»»ºÂ]¨wÀó(·7¢ž 9=,@?‘ێpˆ[|Zð Ûº„&a7ÏæÃEüÓ‚3\ L„õI˜¿Â mØêÔ¸ŠEQf‹Feµ,VØôãÆyÍÀÔcö£ÂBôtänGà×£Œ»ü,ùR*øÜìoA „;•â bE-:J¸ÚØ;pÓŸ,Ó—ôwóv¦;YáõóE5äO1ÿ[‘ýߧñw‰–[‡ÙÄT¬ç¥8±á6)ÎÐtYæð£6?/^A}ú õýPÊ|ãô^Puí¼Eƒ¾Z@½’ΩðzWJ|ReS¯…i¨Â[‹á±AÍ8òï_äŸkCOûµ© a1§µxZÝ~**Xªd-`„Ÿi©5´cžŠÛ^dÎ$ÈÔ23 „‡æù®E é†êá²ÈùPçÈîXò*,L²ºÔCÙíØô½ÑývZþíz¦ËûCl¿E¸O GLËRdºeÿ¸ªñ˜†68$¥T u£aÄ„|.eK¡wRpÕ²Ìs¥f°MQ"­¥†ùcm–­½Œ†ÎPw¦aøŠ^Ég.Ì8¼b½Âߜߘ#þªøê^dhÚ3~3œTîO„!ÃùEɺzaØð×Àß ØU& +endstream endobj 1803 0 obj <> endobj 1804 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1805 0 obj <>stream +hÞÌVmOãFþž_1Eª°²¬íø%ºò¡ áD¯´rÇ|ªL¼†mu´»†r§þ þËά ´ýÐJ R¼™ç™gfÖp38xwÀ$¤<ƒQ–@ÄA‹A5øn688 €Y5Bàø‡ KÙ8ƒ4⌇0[ 8Fa|„¶Ù|0dœóf÷ƒ+ï‡é1Ä,ƒÉÁdoδd,óš],RÝÀ‰²BWÅ\øŸfß#TÔA…,Šc,Hb˜u! +Ž‹0yŠ}.ŠRh(T —Ú)K<‰!aú[±XÖ¸¸ÓÙ Yš`z ‹`a42ÎG]¢.w·‰é³p´¶‰êCä61ûGmÆN‘1àæ([ Adƒ¸'ÅÙÓÂF,ö ä?Œq™úÃ0È‚…^äøÝÛÇ”Ç(%¡ÎtÓÙÊvnÁOXê}ôÝŽèìÚHˆ|½F‘Î.[NÂ…a’’rÄ%ë¹P­ˆË>%")tAáñ¹ñsÛóºý7QÿÇn®QÂ2’Ÿ÷xìÜ`Ôà_Áü¶®»Å¹¼¹µGÁ(bwç‡)‹> endobj 1807 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1808 0 obj <>stream +hÞÌTÛnÛF}çW Ü’6WË;ÕRGNܦ©³õC´¸”XP¤°¤¬E?¨Ù™]Q›úе“Ü™=sæì™uaaŒÞݹ°hȇ˜'$ø¤0 +ãûÔ]»àBZ®øp“˜ˆ}θéÊàˆÂx€kéÜpç܇tk|6?L¯!d \®ÎÏáVZn³YÈlµ*ëÜÔE6Ö—ô,åëRó×¹Qé[ 8¾xÑû“Èr!!«s¸—–ãÆ,2K„„é×lµ®D«p§©cl.baÌóÇã1° á<ÐmF‹£>Žý3/8‰£<¤Ž¯‚Øþ^œ±’d  ’^ bë†;¶~¨Ùþ”Y~ÀBó <îZNˆ¯±åxnâzÌ3}ËÅÿž^çÔH“R·²ÑkùfÞ±ØüÕR¡×e[Zò5›š„VírRÎ󢘤#.ÉŽ qùË¢­D$ +ûç³Ïמÿ0í¿Aý§©ð#–ü|w{ëº>€¥æ›ªÒ/ŸÊŲkqZ3àûÌ5-/f¾)rÖÀα§,á¿ðDxBvŽbïØÏ8 ;Ň黗jÖôXGz¬wƒjÈ1GzDè…`CÎü€i’(׀ߔõ¼ÚX‘™ ø¶íòª|`Ëï†IÅ·‰eÓç¥öË°ÄkæY¼¨sñîo>úÞQ•-kŒà~Ú¼©K„?Ý,ê¼,0F6ÔM§!À ×?«D±Õ*±åz}Öwã3Ž º™/3 9¦‹"ÛTÝÏ›î³ë%_&ÀÑÞU f*TÀ̤J¥¼?àðGÊ@¿S±WË•êo{‹‡ÑM¥lä®R‹ë3kòrƒ¤ ÝFÖ³}Épüúó¸KWóÄB°Ê0¹DúÈäb~¤¶m~?ùÁ) sl@ ‹²“cz„¦XhfŠž‘J9YüÉÅéT7µ@ﯨ™¬nAPëƒPUY‹›\Ÿ ˜D nÚ¶\ÔÐ-äÚ/ƒôÑõsL^?ÍÌ|o« åF¦$9C9yP›¨28l9É!?×K„Ï›>øœ'F0 ì¯ë¬[N e=²v…Ž!ª×"O¯F¶Ý²¾»]׋aŠäÌuœand ŸŸŸØ.Kebô>íwœ½w¦-éR±¸ dZ9_­g¦Mh¨¼Có‹ªÃ%žðnfðHQÆ56Ëêl%úëúo‡ÏG« +endstream endobj 1809 0 obj <> endobj 1810 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1811 0 obj <>stream +hÞÌVínâFýÏS\!­ÖNðàñ7Éf%$K78ÛqT` ®ŒÆ&´]íõ-{ÇÃdž5•¨TðpæøÜ{î½c 0«5oÇfEͳÁ7pl¯Åµë°Ö¼¡@!ŒkÔßx¡OZø¶IL ÂEÍDb:ˆ…“šALÓ´!\×µ»Þ ¸$€N³s~_„NhùL°Å"ÉfÐÏJ.b6áúSø†²U(‹Ø® %Ôs!ì*IOŠãÂòöÚ#Φ\˦ð³Ð êOKPz¿±Å2åE¥Û kžE|íyÄõ€Xv«Õâ¦é(£•÷jíËy±‰Õ‘»ÚD÷»Ú´ªŠ´7`[™,u7ÉÚ®Jöžé¶C\íw°Lª..}Ý°h@-bi¶NñÓR8•>_ê‹È6]MJÐ=âk_õj‡+\‰n`¾ZžÉ:WnMY8Ëò|Y9™K°ÉEöJæò§.o•‰ø Daw=øúÚõ´ÿFõL«`{$å77 ØM.uTN³¦j1Jfó²À£Pp<¶M¨ö¬[>±5>%Ûùߌ°oU#ìá!ÞŸoWºiyjžåÉž"Îþ|›x,Ј¹1Q½tLÌžÏÏ/÷ÓçJËÝ¿‘&†¡HáÙ˽|UÆIÊá +ΤÖqRC¤EZŒd$Æù’g‘†;››P_×#=Òáê +ÌH—÷|;*„¯x)’¬Œ#­(ñù!¯÷F£áè&ù*B–—#ŒQdzK *£DQV¯´/_“¼\‰ ¬ã„ïèw‰ò´àÊ^QŠl²XFÚà ,E nÌë °^h61ÓÅ’ 뤜KÔ˜?òtùt4ð¡c¨? ^°¿€”ÇkMx4rø€°tš±ÿø„Ð\jFÂÒúq[ÓôòU{ßÞ˜UqÕ‡~šòK¥ËËžBšdòe™äÙ¼W¼GTv¤¡ææ²Û·d›\øëÜMÅ·ƒ¬hgÚ&&µèv¨±ö‰¬GR²4ùƒü¢d%rV«,pÙjzÒì|êuøù—qØƲ¬\¬C¹¯Ÿý9ž·!Mú'½^×IÙ™3QÈÊjõë'î&Ï 6X*+á‹ÓèÞ³l…°½U?f·"™FšMÜ“¨?ü>ÉÆK6Qê˜÷ðzŒÓVÞÜœÆ@'åL°lÂï9¬X ŽQz»~·×œ&È€¯ïðäàÓó_©{ùÄö ì í7 ~ÿãeëgËÂå-+y[piÎiº´ÓVúÝ$Ž•¾wRý!þHø‡î.þÂþ%À°ÓÅÓ +endstream endobj 1812 0 obj <> endobj 1813 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1814 0 obj <>stream +hÞÌVmoÚ0þž_qâS²‚±ÄI4í…´ËÖ‚ЪÓaHvIXן´¹s /šÔjDDØÜ9÷Üóœ/ƒ¥Ñ>3X憰Á£>8¾›B&…qí3 â…Á8PüâÀ|>x6%”C¼1(F!ÔA[<3Z„RjC|o|1/Â3p‰Ýv÷䆙Å|â›·Ë,ÙlV颴Ù"™Iëkü ¡l ʼníºÐb„ âž)Tpœpqˆ=’É\f¤s¸Î¬óˆ0WÂ_Éæn-ó2n® 9A\„ÛAq|JMSpâ‰ùî<ñ£ûû·ñ•Ëê‰ú/+ ` â+ùiU€ýÖeŽ.ÀQ0;뵞ŒVËïEŽ½KìÛ&Ìüiqئœ“]T[ØãåØŇwu×$z?« .q N±-­H@÷cص„ùùÛ8îÄ“ñÔÌ‹¤ØæSëýaºŠ|¯\®¼¸|›ÃXËÅ}_Þ_¬R95w7Äï^Ö& TaÛm˜àò~_;.’¬˜¤«"ŸšhxµêyÌ*£´‰5Á± 8§4ï Mì=üú,“?¶ÍéìA¥q”Èa:¯xýs†¸|4†£ø¦žEX«hÐC¹ð9x×SüÓãl\dxþ”aÑ,1lã":uF7&4úË°ö&Ðòjtñ˜Ig2cí<ù4©E¹ £¯Ò¢¿Ý4šh®ðùq +Š§åºU4ž€fèCT•ÊŽ5W§H]j£¾‚o†a ¸#[‹¸ØJ›÷BØ +0«ìò© U¥u)zÙéŽ +5×>´ïÈ֧쵕K™©aõ…¾{Øë0:ÿk}ÑWR§ÊWQç‘Æš­ÌŠ‡ºW¸õí¨ç•­»ƒI_éËð*°7ãáËÇ^õœ +endstream endobj 1815 0 obj <> endobj 1816 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1817 0 obj <>stream +hÞÌVínÛ6ý¯§¸ð/1iR”Œa?¼DÙ²¹m+Šz4‹vÈV@ÉͲ7ê[ö’”ãØÃÚ*À`À¤ï¥Î¹ç~Pæ°p?O8,jGø±‚X€Ï@Igîü”:ƒ+Ò¹Ã=`øÁ…ÇÆùŒ2ҥŲméÌéSƘéƒóÁ'WÒ.¯^Á"<¦±[-T¶\«\¯©æÙL’?Ò_‘Ê·TõÃúœrBzi!…Ç'¶Ø·2Ë¥‚l•ÃïŠôyD…[ $$gËûRÖ7IáÑH áøíY»¯u‘NÔª¬-_Ï ‚Fî;b<ÒÚU]>ÆëV+g£–éÄyžˆtæt,q‹®•Žå3Ñê@"° ð´ü<µþÇc/ƒú?>f +à ëô³¶OË[€N8Gei7·ÅâcSã(ÔGÀ÷)w?/¢¾+sºéÿ¶…#Ï´°À!ÞÎwh‡nH‡Âö³Þàa!H°o†cBX+ê&kˆp×5ü¥œ?L…3={‰f9Ÿº½ñè}rÛ;‡^YßãÂÐ~N˜ ÷Sòö_C¤K{ñKrç~ûs’ŽÒ»ÉÔÕ<ëzs<=;JŽ7‰aÖ´hßa. ó.ùÔ·âÕS¶ŒhÞÓªZF´ï +ý.º#É}w=º½'šò“Âüj}FèùKIÜc4ym%vÅxXÅ=Bu²…ºÎì›·o.“«ÑÝ8µìh‡Þ*Wõ¦•^Jï!1²¢9WE×ÄÏJûœí(YuÍœ¬ò]É_‡‰w…O÷øæ² `ŒçõèMŽÞ&yµþ ”Îfk¥äªÙãÛqçÅ|^Ÿrª¬)ª“ÞLÉì”ï¡È›ûÑobÓé–[5˜›©«*åÙ”,³²¬Ð1CùÅ?²šo|SrÆÃ)A×ñ«SK@g}nf²}n/r-VG1L«ü Æ¡À磖©fœ=JeÛýæíøýD÷ÚëÑ$Å +Ž¯uñ“^·¯†í€K4«æÛݾzMußër%¢Ûy²¯Þé°":šMøf,ñorW#Ù¥wƒvS”Í#øßá‹S˜  +endstream endobj 1818 0 obj <> endobj 1819 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1820 0 obj <>stream +hÞÌUÛNÛ@}÷WŒòdS²ìÅ^ÛB<¤‰ÛÒBA‰ªUn²I-9²ý£þegí\Àj(¥Dª"Å›¹œ3gvÆa01öÞL +C +p©¶'APÈ•16^‡ÆÞ ±Á8Püàƒy.ñ=p%”C85(¢j£-mB)Þ—æQðâAw¯ûêœæóˆgÎ&y<&Ù³Råãx¨¬«ð=R‰šŠá8Ðf„IÂ^ )58¸\c÷Uñe=Ïú€ÁÒE{½à×…Ð…è¾ º–4?|„ðl™E—ó"²ö—s(E&ì‚×^ Ÿp©ß Ê8/â;•G&Ú[ݳ²Ö.èCë#Žî`ï)œáÎo©*–^·;Ïs4«¬ì©¬HÊ»Èlu΃~çmÐBû.ÐÎÓ؆+ØKz…ŒœÐM~¦ýÎf?×~Få”1šsG¦Ø­`ãE$P"ƒ¶|T%Î#!¼±›!¤„ñ×TgY™'ªx¨ÏÔd +²ÑbØZ:»¶¿ëÕÓºæټĿ8dëÚÆ4÷+|4kŠw'ýÃÏ'ÃÎî{Öüä4)‡ß"“oè½$^38Ûb¸HFeÅ@·Å0¸Ž‡Õ¥ãoMÆq’£‰:RÙDË¡h'ÔÝ[§~µØäy#u›ÂFAdŽfó¯©Ú‰¬iœ¦³!Æ'?ôºÏÆK_díðFúÝ¿¥ß¦—º5õ{ˆÙ è{>A›ylå£^3oíbùïúK€Ì®ÕI +endstream endobj 1821 0 obj <> endobj 1822 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1823 0 obj <>stream +hÞÌV]oÛ6}ׯ¸È™Æ4II”„¢™ã~l 8Úú0 gS2QY +ô±8ýGû—½”œ¸ 0¤¢b6`ÉäÕ9÷œ{¯$…7s- h=åCÄcb>‡Æx¹÷SêÍ_ æžÀñ‹G,‰!ò9ãÒÇ…ñ×Òµ7cœsÒ[ïwò~ùBÃb¾xñ®*b“ºhông«ÞUir½6ôôg¤òG*Éü0„™`B…^ŒÊã‰TGì•ÑÓ€®6ð±¡31E,BÂr¯w7¥iÜeê)É"…ò 0é'I,ˆ9F¡ƒöaå3|³‰î¸ØDõÞ$ƒ# àfßá’á!Y?“½ÔÔXHî@rAg!žFt&E,$“ħå¸:A䌺jêqmÓ¯; ŠEä7:ì˜q½i-a¾¤®œÏƒZREÎ9—K|ÈÅÕÊåòu—ºD"Aááøèï¿¿3lÔÿqØP_±ØÙÏxè\ŒxÎó²OV¶Øv-ŽBkp|Ÿ ò7•ó‰Ù°ûþ?´p$‡V8ÄÇùÇ¡KX¢Æ~v'¬" ŽóÍq,P?ˆ€¶ÓU¤oá”&¿}¯ïL³ªûÎV¸\\ÚªµŸMFäìË3¸+3úòØ¡¡³åbZ¼].ðŠ_þ¼NÏÓ_¯3âûö><=¢òÆŒÊð»Þêæ4£ûòÉ»Ç!O$ýÑ6f¹ï ¦^Wá, +3Šß`|_¾O0}ÈóÖtŽ"ytá³À_ßè5Þa¾š¥«Â8q‰³žR>YØÜCª5r ÷O&*ËB;aG*_ë¡:™ÂÅ·Æ oF&itkן*Ó¶“´À¶±Õ'}¨ÿ ËMa° ëÀÃ)8ÿ²/;{SZÓLäÞ +oí¦ÛF9ðìçø&UUú¼1úYEŒ¸¸¬ýΡ¯tgëŒà“gСÜéø™Ïñ=$š‚{”Z\•}»èqdÆùÿÜN4°o/lž£·›q¸Ó½œžûîŒS> endobj 1825 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1826 0 obj <>stream +hÞÔU[oÓH~÷¯8âi¦4“¹ylkÅC6M¥HUê]j„¼É$µä8`;ۆĿäŒí$]³¡¨ ÄR<9ç;—ï\&–Þðù•€eåA‡‡Òz ï÷Øž /ÊO1Ú)ºÅ:ã ‡x#÷½Ž_LÆ{õî*Å^a—0̦ڵ¥C-Jk•à3»IKlê]þ dÛ‡<À`¼Y9ŽÈ4­³uB„ë3çmîíç± þ3öt½©3{Ùf‘^ØbYß`àžõÿˆ17e鿨ÏlQeõ6!O.'£WONÁñK(åäÑf{·×¼¥‰9¦ݨGH‡Ð_ Ž0:/í'¶Å ɨÓƺyTÕú<8Ó_åÁYøU¢_Ü(ðû€£}«Sã8&Dÿêït7 ßV…7Ù܉q)üï[ÉødðÀȲhÁÿ«Ï <ÏN +endstream endobj 1827 0 obj <> endobj 1828 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1829 0 obj <>stream +hÞÌ–ÛNÛ@†ïý#®ìB–=ïZU/Ò`è$”¸pAPå&NˆBk;¥¤vÁqÃõ*v7φyÙl§EÔb†èp‚!!ù•]~Ÿæe7I͉ÑXž&Já"Žc ÒR*}¡uíµË'\Þs¢:µ«_j׊ĀNio…pÉ2µHV(ŸìQ ITxœ²¨¥pk¢g–qÂC1|çK;3Ò8¡Ž‹+oÎDš˜ð$ª=¹·å$ja¾áÕÌé\WKpœkã”s¹ØE.î®\.¿#÷¨KÄ€ +Ëuíã¦õ/±—‰úŠ±ú„&ÖÉO°ì\&ý<Ë™íéÔoº“ñEUâ(”9Ž€„…?#nˆó!¹íÿE ^·°Æ!^Í·òC“Xû~v„µÁ r5ßÇ ¡‹"`0/ŠH‡ù¬:ãçð±IK¿]5¡r•ï­³Â³fɦoÖéÕ€(ÈD{D4 Æ#¼±a HìÚ€0êJâ&†yÆ61Ü3Mê1áÝÄHÏ<Я¬² +™y‰îi>º>Ìnò¢ÝI³oS÷h2«ŠI^öC¦vêx íýè^·¤ƒÖÏ_{i;ýÒë‡.ê¼\£6ÕYf¹—ÏÊIuÓ·Ú'I·}l¡}è“N»S|},Ù,Ní§t3Qß‚|@l¨h¿È8s>`1b)ܳÔñÈ={¤i’øvÂÝzÐñ²Ð=êmÕð´“þµ ä£M`_IÈG:À6VÁðŸÜ& þ6Q €\ŒË±A‡ÓÉЙ/ú¡z¢øsöG€Š™œU +endstream endobj 1830 0 obj <> endobj 1831 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1832 0 obj <>stream +hÞÌVÛnÚ@}÷WŒxZ7aÙ‹w½VÕJHo©„Ài+…¨rÁP*p"Û4Í'õ/;ë5ÐÕJ«$¼ÌŸ™sfÃaîu^8Ì OK™Àh òÔ›y/c¯sÊC<ó¸†o¼pÒÈ@(eâ•Ç…²cñÄkSƘ„øÆ» gýSPÔ@¯Ó;:‚AîsC ¹šçÉjµÈæð&+Ó|–LRÿ2~‹©¤K%¨T +Úœr­ >q”Ú’ãBè÷0M¦iI6…¹ßæ!Õd”Ðÿ‘¬®—iQñöcOŠÓTi BFQ40ŒN¦4Ô›}ÔOEpgí±îÈjåo͉*K"ÀÍÀlœ°ÕrUW+•«ö}âË€*r ‚q¿­púmÁ Tésü.n¬ ´N ò+›®'%øš†äƒ_í¤.ž ¿õ’«Ì]ÉeÖ9!th­³µ˜ºÛ,[ËOßÞj Á‘Âöº÷õO×ÂÃúêHMµŸÕ Ø]¸¡¨Ž°Æ)Þ ¸rSÑH»ólÖ!’»g8(„Õ"`²Îs_“4+/Ø%¼AY¿­Ÿï¡²ÊOö±Üb9¶ØøÙ>D8ˆi€H  ƒ¨ˆr ¢D6@B ã ¼9k€ðÊgÖèçÓdÓä—£›0ÃÜó¯(“1ë·—éìæ,¹Món/N¾,í­ý¬Ìi1&\W|H†ñ±‡¤÷ºßÃè»Ï£¸ŸÆIJ®‹=Ô~ª~6­² ¯Ö.ñ13&­á§Öß‘ãù•”á˜Ôçw?˨Lò²Ê3&oõÎc.ZÇ`­ßHî Á¿ ª²ôÖåè:Á𤄭{³îsך¬cÇÀ”{4&Ç?}‹Â†“l’ª\cb衪·ö ·Áæ…õªÓÁçpxˆ¬Ýé7ü£”¡2‰¡BaÜuèY7‚'ÕŠ? T=yÖA’'ËeºÜ ~Š¬tŸá¿ïþÜ* +endstream endobj 1833 0 obj <> endobj 1834 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1835 0 obj <>stream +hÞÌVÛnÚ@}÷WŒò´naÙ‹½k«ê%$M›¨Ü‹¢Ê†RùÒ4ŸÔ¿ì¬M¸5¨IG‰]ffçÌ™›ÃÌ꜎8ÌrKIÐÌÇS d±5µÞV焇`jq ¿¸pOSß-e‚¥ÅÐ eÊ‚‰Õ¦Œ1 ÁuIÎû'àRzÞË—0ÈlîQ¤³,\.çÉ Î’"Φá$¶¯‚w%k(A¥ëB›S®\Žk—Ê8ÇPßÃ8Œâ Â$‚Ï™Ýæš*2G—Ðÿ.¯q^ùí–T+¤§¨«€ +éû>PÇcÌ©‰VÜ+%Ò§ÂÙQbvŒ¬”È~¿Êˆ¨t¼»D˜`¹» +Vºu°¡-ê’[ŒÛm·Ún îqA‘6Ç_QË}ÃÃÑ&Qƒ,­eQ9)ÀVT“Ov¥‰ky–Ïí6ÆKÒÄä¹bËLâ„PÚdÎÄâ­b1webùe›£& µSX¯{­4kÆëlV]€TÔ3ég« XW.wê xÌîbQo†óÙ·"ÇVÈcl))'?l¡©$qDïêUÂZT%¬°‰7ýíÖMçS_Õõl6h¬4:q6ýÍ°-[‘€ÞÛ~ÏVäý×QÐ >ŽÆ$/¢ÌÇö«Mº†üqen´h^æðñôæ<¼³^YŒ®COpŒ .‡õ«]§ƒ®+ÇÁ‹‡À¯¬þŽÚ¾ãJŠ1-Àˆ[”Õa4‡ÚO¢1y®]±I‚âð"âŘ}ørvÜçG{‡Ÿ¢›Åá0,æ阸T5p<ŸN·Ppd7Åã$œifˆ8­ªž¥W.÷è8åÿÆ(BOh•_²+Dàw´úGmz@½>Ì“zàð½êõaa´úàá{ÕLÑàfâ1‘­ +6oUþÓ¼¡ëÙ©4ÝÈNSŠ£æyHÖT-Ó²ÀÉ6X”9Ž:3ÝP±5àl†ÝÅ<)sS*øaø^jªd{º6…}±a\C Z=86£¼Qì½á¼Ù³åüÏÙåšœ3¶õGcã›Êo’¾0 +endstream endobj 1836 0 obj <> endobj 1837 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1838 0 obj <>stream +hÞÔUmoÛ6þ®_qÈ'1µi’) C?¸ŽÒ×£µ¢bPmÚ K­$7ñþÑþ厔l/j½vA +l0`É|îž»{îŽæ°v&ϯ9¬Gy°üPÇ ÖÎÊy–8“K’•Ã0üàƒ‡B•îãd,ñ5 cÁC.¨p=Âí·=g¦?0J]ÕUw¶Ü.Z Šî[bÝ×MNƘ¯[•Fh[.3Ê ¡#É%ìs1Í2¹üIŒ«I$€ŽÏÁÏSÏ4û9¬ÿa3ÛOÑÐÈÏúF—û]%æ´(º—y¾þØ6¸ Æð<ÊÝ/DÔsõ’î á@ØV¸ÅÇ—ÝÖE4RÝ<›4V’øÇg¸Xë‹€»žåBê.«í‡BŸ§d“EµHÝ&ÿ]­öXJÎeJ~9¨4ª\XžÝy’ó>†Fïá)à…tÚ!>€Ð‹½ðFˆ†žü´§8xò¡×C/ïáî ÑËß{±¯¼ü^M›µmÄ +½º}“ít=Å»¶,ñ8›Ö:»ÈW«¹ÆkE_Ý©+ñ|„ÑFH‹òâŒM&x¡g½ˆghöú÷ëdšüvÍÁ0ÛfÐU­5Z¥øY|Ìjìå]ñ]“ÝÐd‰é¡IsÃlé÷°:ksĪô¿íÈ &N8ZPþÍfÛ‘ÌH7Gš +U³%ˆ‘ ÙŒ,{5TãÇ4ûvìÙl[×fúËöB—MÞîR÷ì*ž¾>™ê”æ> Úâ@Û««S8ïo`q"ßËZ6Ǻ\ì¬2† i¤É0KFe<þçDõ‡&'2M²¦}:.Û:×Íýdø¹=œ¾çÓçñ™Ý9ö(êü_z¨¾ßCù¨=Ä¿¾¿§r¬ +endstream endobj 1839 0 obj <> endobj 1840 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1841 0 obj <>stream +hÞÌVÛnÚ@}÷WŒòd7aÙ‹½¶Uõ‚“¦% +§i¢Ê……X“Ú¦I>©ÙÙ5…Š6E% Hx™™=çÌìŒmc«~Òc0.,)À§¸A!WÖÈz[õc â‘Å8Püâ…> ð%”C<µ(¢ê¢-X5B)ßYWv;:Ь7¡“;, =çÉtšfc8ÍJ•’r®ã÷H%**N„çA&=ˆ[¤Ôà¸àrÝUÉPådC¸Ìó‰´S„„è>™ÞNTap£Ø’œøÓ“Ä“@¸ÃˆPêV‰šÜÓ'Ü}äÄêèaœ˜ýª6¡©Hètƒe!´Xæ-Ä +¯{–8Â%žýœ2§æáÒwjœŒn ‡™_cg:××…êä³Ê6œJp$ñíŽñ¨Êž©SC½ö,Óu6ÙR]8Î¥¯+§µ -ú¬´–ŽÞª…øPÂêºñwÛõ‰aûA}Áaæ„$.?]Àªs™[À?álL&Õ¢›ŽoÊG¡P8Bfw¸O„­†dÙÿ‹ö¹ia‰C¼žo¯º„²êg½À`é#ˆ»žoŠc‰ÐEÐ|5iøÒ‹ñE¯oeR΋¾óz݇žN¾eµÃ缉ݵ“•7šÍyž£YeeKeEZ>ôíƒîYïàhßAG¿z +å"j°‚¼¢×ÈÆ(䶦#‚_"¶¨=ÎÕ7mVÙ…ò#ƒ„0 +vÓI‰Õ~/”w3d‹Ò8ù:Ñ;£¬ÌSU<»[]7™¢lhÈðÄôñƒ¿+öˆ »qKôÊ$/ Gͳy‰ dë4¶uÙn™TÍš¢uÚ8q=ìB¶ÓÑþ “–ƒ›¾ÍH°ôË4WÑ}©Çi–õmì™}°ôn“9Jä^ññi†;Á|Ð>õ:>øÐêï‹›ü|ÔN3¥… ]àÉ$üLüšV¼ ü]¿ÿ|ùGçíN’'“‰šôm´ãK¡VàU“ù<õw_Pý=}ð?ëÏ͘çó>ë>ªüô¹•b`6PúFƒöpÙËW›Ÿ æµ; +endstream endobj 1842 0 obj <> endobj 1843 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1844 0 obj <>stream +hÞÌUÛnÚ@}÷WŒòd7°Ù‹÷bU} „ô–JÜæ!Ž* µ8²MÓ|Rÿ²³¶šD U ¼ì™™3svfÍ`êœ}2˜Ž ©ß(òÄ™8ïCç삃pâ0?ø`F“À€”PáÜ¡…P÷‘Ó&”Rásí^ö.@ݳîé)ôsbÜlšÇóyº˜Â§E™ä“x”x7ág¤5'BJh3”„ð¼©lp\pµ‰=Hâq’C¼ÃUîµ™&ÊM1$ô~ÇóÛYRTq{¡#ý‹SD* \AÄ7”úu™Š­V8ÖO¸ÿGy¬:¢±üµ8A%Iúf¥„Í–É&[!ël¿Æžð‰tïSæµ%.µ×æÌ0N¸+> endobj 1846 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1847 0 obj <>stream +hÞÌVín›HýÏSŒø[{<0€VûÃÁ¸Û6ÝX6ITÕUEí±‹ä@4à¦y¤¾eïÌøcíU¢¦«Åàs/÷̹-ÞË EËÆE$FA,'HIgáœåNoHEù¡ øÁ…ÆNbq‚ CùC +&`ùÌébBGùóÞ;φ(Ä1J{é‹h¤|ãØ«—ª¸¹)«%zUµR-Š™ô?䯊[*†y¢.ÅT„(ØB‡&ö±Ç²˜K…ŠjŽ®•ß¥^ !Qöµ¸¹]ÉÆÄÍrG0 'p(f…Ë=,fm­¦^‚Ipä^ ‡—“ìâŸówîQÈ_ ¤éZ)€eÕdÕ”íýÔsûWÙ¸ÿ2sï òSl³]X[CF¶Åþ¯ƒ©SøˆÓ”{< èºœkøóÔãB<‹ŠIÖª 8zÄ…Y—ðØå!yñi¥ŸÌªV•²9Ôó<Ý—UsC6®×·ð‚…òÒ'vÌ/ÇvˆÍü³LÚBµ†gêî¦}·ƒÜô2wÿá`ø…–N×íä¶xfÔLCx m=Löèõà=Ó °¦R¤äµ½N=[­S³B-5Õ^ê©´fÕlU7VÚå,;¿¸†‚Ìõ pBvÛø¾þÙÅUføÂÓð”\H=³–øH%à˜Íü;hwb mlhÙ)³ëî(ÌpØöžÆßÑ +endstream endobj 1848 0 obj <> endobj 1849 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1850 0 obj <>stream +hÞÜVÛNÛ@}÷WŒòd²ìÅ^ÛªúCiC‰U®³I,%²R>©ÙÙu.)ªDª*${™YŸ3çìŒcëä|À`RZR€Op ‚B¡¬±u['g Äc‹q ø‡7ø$ À”PñÜ¢ˆB¨‹±8µš„R* ~´îìnt  }Ò>:‚^á°€öbR$óy–Oà"¯T1NRåÜÇ_JÔTœσ&#LzwjH©ÁqÁ廯’‘* ÉGp[8Mæig ѯdþ0S¥ÁbËsC'‰'p†!7 Ô­eJN|¹Î£~ÂÝgy´G»#LåoÌ %!`Ò ÖNèj™·ªVxuµ—‰#\âÙOÀ)sš.}§ÉYÀ8á¶p˜¹š¸«…¸¾vªW,êØh™VàHâÛ7ŽÉ¨:^”™ÓÄzíE®6r©vŽsékët-Áª}Xº–ߎ~TâC +›û‹wÝ߸í0¨ÿð6sB’@ÛOW°i]æÖ°ÎÖlV/úÙdZ•8 ¥Â‚0û§Ã}"l5"ëXµ°ÏM Kœâí€{õÔ…$”u?ën–>‚¸Û§8(„®D@Y%•#íe Ÿ`¦ÆÝäIQžÎ¥jh»îvß^}Åø1pB‡ÎÇm¯zÚ ŽlŽÚ¸çë÷AÜŠ¯C[s,ËõöøÃ[‰§Q÷ê¶aX}¼bÜ,Ø–{¶?ÊÖéÕMTS†kÊpÏ”xÊY©ÃIžªž*ÚËjh3ºOŠN»½, + «¼ê¨¼Ìª'-î&ê·Î£†9Á¿cK7°wô±vå™Î{»ó\çµì·È¹ÍF:<ÚâØ€ Â^P"£¦|U%Þ+[x½Å}¹e‡8ù1ÓOFyUdª|®{è€(2£pž¡øvYÍóKøA•UÝÈ^,+ü +@ªKÖ8À¡oð1¬):­s&<O¶ÇiÜ0ô²*Åc$8úà!ISØqÄï'ùDi ]Â8¥„šîºT]•O0\Mãi¡Êéb6Ú‡v‘ýg6^äãÙRépŠÔøfeæw Àx_øÉðG€VCä +endstream endobj 1851 0 obj <> endobj 1852 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1853 0 obj <>stream +hÞÌUÛnÓ@}÷WŒúdC³Ý‹wm ñPÒ”[‘ªÄЇ¦BK²q,9Ne;´ý$þ’ÙµÛˆŠ‚@‘âÍìÉ™9ggÖ 2ïèõˆAV{J@Dcc‚Be¼™÷*õŽN0Hgã@ñƒG$‰!”Pé£ÈBhˆ±tâõ¥T@zã]úgƒS$†þQÿùs8¯“Ø_f•^,ò2ƒ·ecª™ž˜à*}‡©D›Š!%ôaJBzÒR*KŽ ®ÖÜC£§¦]Nᢠ+z,"ÊÏ‘·zq]˜ÚñROq)”§ˆT@¸H’HS¶Bv·‰ò ØDw,@¸MTÿàMâI7ÃøÞ[,“]±B¶Å~Љôï€Sô$.£ ÇYÌ8ᾘûvqiu„‘5ê¼Z¶±éjÒ@ Hä +ÜŽiãU=¬×_–Ög§–Zã8W‘uÎÖwµØ³²µ| ì_m!´¤ðð|ôsÓó‰°ý°þÇ0wB‘ØÚO»xè\¶°“œÇEÑ.†y6oj…ÚàA˜ÿ5ྙ’ûþïZ8â®…ñz¾e;t ITÛÏv`!I¸žoŠcBh'êF7òW5¼„ÂÌnÎô©†ËU“—ÎF×z‚3>ö)Q|¼X7§´Žœ8Žþ›AÁï?Òãôãhì[ÒU}OŸýF¦¡.33öñÖ8†qJ {D´ót]Îã6-Þ {Ìè¬{Lpfʬ™§óÊÔs /‹©µS„‡€wW§ã»Ï‘WfpÛ˜²Î—åØö¡$GH9Áó:ÀÖ â`OjúÚÚ¹N…W€íG©þH×dUUˆ2esI¯0£%Ü`-@np ¿` ¶õO£«¦k¢F)̹Æp¥‹Â8‡.²ïH?“[ôoðmñSÀÓ槓îtc¸¸È§ÍÜN-¥8BÎkË_4‚Ó-FpºÅNwi—ÿȹ͹͹C#ì;p¿Fà;ÿ»ÎC +endstream endobj 1854 0 obj <> endobj 1855 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1856 0 obj <>stream +hÞìVmOÛ0þž_q“Ñ¿ÄN¢iX)“*šMYë†JiŠœÆOÚ¿Ü9 +ØhHS%Û½{z/ïÎe{Ûï† òÊS"C+Œö¦ÞÛÔÛÞcÀ zŒÅn,ŽHC$(¡Ò¹GÑ +¡!ÊÒ±×%”Ré…wìô÷@’zÛ½­-˜€Å$ö¹ÉæóY™Ã~Yk3ÍÆ:8I? +á\q"¤„.#LIHwIeã«•íCM´¬œÀ‘ º,"ÊŸ¡IèÏæg…®»ýÔ“a‚É)".’$Æ”†.MÅI¤®ô˜?áá-=ÒcÙÓ¿&'i(I•a|Å„–É6Z!]´Ÿ²@„Dú—À) ºQÐå,fœp_¬Y¹²‰„‘ej`N6YŽk‰ü/A£ÑNnªYÐÅxýEi‰nÒ¥–9ÎUd©³±Äm,ö²l,?ûSHÎ(\ïk_7í„=ÕÖ\€P$¶ôÓö®K—…îÅçNQ¸Ãá,?­+ì…JcA˜ðˆ_OÈU´%ñ¦„vñªÁ¥ëº„$ÊÕ³= XEh$\58ŶÀDh›Œ—ÆÊ×e}ÌNà P"éëU J›÷î:’[$Cc™¾Zˆ{UÕXV¨,ôôâ »Ôæp±¬g%ŠóáY6ÆRgß +=ÈLVÅÅÑlRŸŽ|Ö:v¬t3 +n™ï½ï÷Póñë0ÝI?G¾õ·¬ÖP7¢¤.a&7Ö¹ xüQ‰DįƒÐýrr3Ž‘ÿNòa™ú¦›}+žK]ŽŸÊ¥ó¶_¶^U[b±Ú;ö¶›åy]cqwl5Ëóº–Ö+o—ÿ…ô é…ÜæÝ!¼y„>lËß±ë3Èì0µ³¶À~l¦ës¾1›ü^À_=!´yBÄŸ?!øg䧢C$ +endstream endobj 1857 0 obj <> endobj 1858 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1859 0 obj <>stream +hÞÌUÛNÛ@}÷WŒò´²Ù‹½v„ú†@/ ¡ÄÀFÕ6Ù„HN‚ÖN)ŸÔ¿ì¬ +¥4H ofÇçÌ™›9Œ¼ÆQÃ(÷”„ˆÅÄ +$k¼¡÷1ñ‡8$C `ø‡G´C$e’‰Ç…²mIß«SƘ„äÖ»$ÇCi íF{wN­Ïc“ÙÈêÉd<ÁçiaìP÷•|A*YQ *ÃêœrBrPA*Ž¡VØ]£Æ‚žàÂúuQEÆ Ÿzr“™¼Äí$ž4R(OÑP²Ùl bÆ‚Jh©½¼DùTk—˜ç ËKT¿ÌM³ÌHð2ˆïá‚åá"XVÁžh_4$w ÷ë!#¿.xÌDú¼üoçQ¹DÚYeÌûøŠFäÜ/oLe·ùدc¼d6uy.Õ2—8!Tä2çb‰±¸Z¹X~ùîUH(,Ÿ?Ÿz¾ÐímPß±[Y©hìÒÏXv.ªl…³•eÕ¡;]9ŽBnp¤¤œüðED%1zßÿ‹ŽDÙ +‡x5ßa5tMÚTU?»:«A‚Õ|3 Â" ?·ÖWÄL‹Kv€Qî¯Z0tº6=yå)Xå™ìl:ˆ?:ä….Ðažãef†·ÇúÎØîl^Œ§hõnt÷I¡¿gæT[eÍÙÅxP\§ÑÂ={ŽÍiR ¾ý©ÓÆ›¯ßzI+9ë¥ÄñÍó ¯§?vXè Ÿ×É1«ÛÓ)í}ê[ÕnIçóA˜Îtð0Ž”¼Šdh‹ß&ýkmwRß%çqÈýãáðïhVãÙ‹”µðc;uÊô‘.Ìi6Ï!%X|—‰Û-~J"ØR:W¤Ž¬eSÂq1¦>^ì¯H·ÎÙžO6hC†vV +Þ'öÉ}ç ›g”’Ú ¯ý[»àÎÄùÅżؙ›,½BÛ¢äI Úk缶µöYR{€°¶uÿ#ƒíy­æ~©†Qµ½[Ã^ªµ[¨†½ è•ÃûT©1âs´¿]»h.QÙKbɃŸòß ~Zú +endstream endobj 1860 0 obj <> endobj 1861 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1862 0 obj <>stream +hÞÌVÛnÚ@}÷WŒü´nʲ{½VÕ‡”6-©"p’‡RU,` Ld›\>©ÙYÛ@[)jÚÆ´€ð2³œ3gfÇcs§ûvÄa^8JBÈ4øZdg漉î)ñÌá¾ñÂuH# ¡d” ˆWCÊ|´Å§Ccâ;çôO! zÝÞÑ\ä×T“õ\oÊ4Có|LÜ«þ0>ëÜ—Àh´Å‰_<…­Ùõ ’‹´œ,Æ„SÝúuš›þ}i²"]gcÒ +Çè&™à­sLZÊPƒ?0Ù¼\Ä‹Ü 4¯—SÌCN, ~ZVXÙNå-+S‡®ÙA*ƩŇê…h^Ý.¥°-ÚQ²2M‰ì–û`´V-ÿ‡jÙaÔâ8IqK61xcÆ=Å´‹ö6ŽQ/±¿ãÂI‰ví»ÏÂÖϦ[B4—U Ýsñ›à8Í$e87™f£2ÉËŠgLÐî^ œbnï2v›‡§ÆŽK´·'cho!›mºäŸÊÀgo ÑÛ/ +endstream endobj 1863 0 obj <> endobj 1864 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1865 0 obj <>stream +hÞÌVÛnÛ8}×W~"Ó˜áE¢$,ú8ÎöâÔ­mzQ±ÐÊ´CÀ– +InÚþQÿ²CÊŽ#[t «X°èòœ9‡Ê-¼“?§-jOI²ù‘B’¡J{sï,ñN.8â(™{\ xð(¤q„BÉ((Yy P(ó!–ä^Ÿ2Æ$Jn½÷x4¼@Ðàdðä ºªh„ËE•­V¦X çE£«y–kò!yT²¥TêsÊU€’óRYpµÃžèl¦+”3t]‘>©Â Ñðs¶ú¸ÔµÃ&ž4T OÑ@!*dLjúc~+ÔiwIO…ÿ îØ Ò%Aý7±s$Fô£­¶XlŠ•A[ìeF¤Oü ÆI?€aHú‚G\P%áîÛÅc«Ã­QWUÙÆfë¼ADÑ¿&.£ÛxUÒ‡zqYXŸZfB…Ö9[K´©Åî•­å±Km!!jAÑÝsïç¿=rZ7¨ÿãin¤¢‘µŸm6àîär¿Ý€ƒpž.—í`b7M ­Pkh))ÇŸˆ©ÄzF·çs„CᎰ‚&ÞõwÐ6]LcÕžg;€É*×ß Ú„°T7YC^×è)Zêùí(û¢«I¹nLáEŠ{ÏÆ“çïƯ’ÓQï1§ìNi`­9w`ƒgÃ$_þ=MN“¿¦)¶èë:%íôäèg(¯L“ß¼y{n`^‘ësè …Pí!„ïÜdûœ¶´åŒºà¼6•~ntQ›²Hq'ÓY×sŠÝžÎêÝõà%¢XÔ³Æu@5Ȭ–{\ІüÞA؆ÅlKáƙֻ”ÿšARÆßvCVé æIŠgåúŸ¥>JÉ*[.ËÖBÆ|Õå|›KÉ‘¼õ ¯nÍÌ|ó8dêA¹ª¶PûÚ§MV5­z;Çúµ4ùï•CžKS˜Õz•¯› K°ßÅvÏ4(‹Bç)!\ÔàêÅd|y6¯{]4â}‰¾½Y·,Ê;=¿v.OXy¼[–‘.Í͵qÍmàE àn;†?¿fëæÂyÏ> `fÔgÒÛ[Äæ!ýèR¾·þu|`‡ 6e +endstream endobj 1866 0 obj <> endobj 1867 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1868 0 obj <>stream +hÞÌVÛNÛ@}÷WŒü´¦d³{m«ê ¦¥MJLy ¨²’Mb)8Èv +|Rÿ²³ë¤Šª¨,Å›Ùñ93gg<æ0sÚŸ†f•£$„,?R ”Ú™:S§}ÄC:u¸†ÞxÒ8‚P2ʤWCÊ|´¥c§EcÒç‚t“#hvçÝ;8-=ш,gevu•38.j]N³±ö.Ó/H%*Ae@‹S®HHeÀq!Ôö@g]BVLà¼ôZ<¤Šä Émvu½Ð•ÅMR'ðcLNÑ@2Žc ~Ęߤ© Õfó§ÂßÚGyŒ:Ònbú÷âÄV’pÓ6J˜hy°ŽVM´½Ì“> ÈƽV€ËÐk qA‘Ç_¿±3“ˆ¥NËec›¬Æ5xŠ†ä›gwtc/«Üka¼dY¡mºÌ('„ +t&–h‹9,ËOÏÊBÌzßBÏGÞ^çsÒA‡¯ß‡éAz6C°ªy=ÅšÝ6Ø„ãKp Øúu¹ªòe1"ŒJ¶Ê ]á»{'”(eUëk÷sìà<¯ç'×5jWÚ Ý>ôϺ]£"‹ÞŒš«W§vûÃäs2è'­Æ›Äp¼ ­®Õâõ+À¦É©û& +l˜mõ¡ù5ùý×É߉Éd¦‘–Sf+M Ž+h·ñã$|>oRL6ÔhFöÙˆ¸=ßý§¤¦¥Öè5Âk<Ïʽ‘gçÇSN[#'¤ ‡ézÒ=xXgemC¶gáæøQš5wMOôN»ýÔ˜ƒÛœÏ8óf:Ù^ðÔ;«zxm¦ùت¿Cp> endobj 1870 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1871 0 obj <>stream +hÞÌVÛn›@}ç+FôMòGÕq³‹Ç7¼…e2¿ée³~|›äÇNÇq³’ÙÛÛõ«gŠB1GDFeœ— âvZËpû5Ø'§ƒ~÷³6ðc1?¡ÞÄøP´Ò»Hgåe%J‘ñeYý7Ú”£«á)>@'m’c&Î^¸ÿXjÞr©ÇÂ9:×mWWÒ}›4F\ü£=ìi†¯7eÕ?öi+þ +~„ĸ7Ô'Q·õ $Ü_·îDi9År0¢Ú`Ç‘Ø[+Ñã£;Å#Ù4A³ð?•¤ÊF¼ ©(6¹ÜÓ·âʳ÷ÚÃ(ˆðïÖΤŸaƒõ»3îÛå=ûöÓÕ÷¦ó ñFæeyá{ø§µ¹âÇ +endstream endobj 1872 0 obj <> endobj 1873 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1874 0 obj <>stream +hÞÌVÛn›@}ç+F~‚6^ïPÕ‡6­£F1MêªBöÆAµq8i>©Ù™ÇJÔVUëXÅ»ž]Ι™3 `î ÞŒÌkG+y~¤Aq¨ŒsåfÎàX€€ìÊ8þpQÈâBÅ—-Ž(Œûh˦NŸqÎdwÎ'w”CÀ"HÉË—pVy"b‘»šWùrY”s8)S]åSã}ÎÞ!•j©$SA}Á„ ;j!5ãDê-ö¹Ég¦‚¼œÁeåõEÈ´[ $¤ßòåÍÂÔ7ÍœÀ18Í Lª8Žùç~¦–,Ô›uŒŸIÿÑ:¦‡²£ì"†ÿœØ¦$\ô£M&È[tÞª õö4÷”Ï÷$^?Àièõ¥ˆ„dÒUžÀ»ßÚ%⇔©³jÕÚfëižf¡{áÙÓÚ«ºðú读*)Ñ6\N™“R‡”:ò%ê|¡Ã"_¾{ô(9B +ã“¿¿ÿpÛó þÇÛì(Í"J?ïà¡t…ßÀN8‡‹E;9/æ×MZ¨ j@)&Ü[O†L¹fÆ6èJ8”¶„5ªx+ð U]ÌbÝÖ3Mp³F](+pŽ²À@xÔMÞxÚ]×ðæênÜäU3ÊïMuŽæÕºA‰OÜÞišÉÞÄ{µ-΀2rd1’·i‚›ßgÃìãxâèºÞlÏ^ü”©%± h&’‹ô<;I†£Þp?yüïHN‹²X®—G¦¬=j+÷Wr&wƒ{Ša7Ý 6"brm¦hþzY”³ÕùŽ`´?Õ¸17Wð]Er\,ÃiSÜš1šoò©-(µ#ô´œmêÍ?+Ö?ƒÇ’F—PQ]IÿZí½Û"W>Öi/ù˜XE“®·×`€í<ܵb.‹YsmÀ::êíõ'þ)Ñ–;Y7ã›Íí!r&ñï;1ôÑ‘­Úq‚BÀ…WûáÆ’#Â}Å–ÓÅŠ̺2˜ò`< ›À&IÏï‹{dÊ9ÞÆ~@Ôœ…ÛT> endobj 1876 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1877 0 obj <>stream +hÞÜVÛNÛ@}÷WŒò´ Íf/öÚâ†ÐÒÒ +Ó>`T¹É&DÊÙN)ý£þeg½NBªT•j"e73»gfΙq"`èµÞt O+y~¤AqÈ7ð^'^ëH€€dà ߸ˆ(dq¡âŒKH&GÆ}´%=¯É8ç +’ï‚œtŽ `´[íÝ]8Í©ˆXDfÃ<›LFÓ!OK“²ž¡—É; ¥\(ÉT@S0¡H¤¶à¸‘z…}f²¾É!›öásN›"dšŒ:ß³ÉõØn'ñ´d¡Æò4 40©â8æGœû®Ðªöʉå3é¯9‘{@UN¬~ÉM\1:ýhA„MVu²*pÉ~ȨòY@nArA›nCÚ”"’I¢¨ÀOßÙ•­Ã-Q§ùÌÙúó^ T³|¢•Ç8{^Œhó%³©å¹ª–[â¤Ô¡eÎæÕ¹X­l.?©½j ÁÂrýíëŸÖ{Ûê >V  4‹,ý¼`Ù¹Âw> endobj 1879 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1880 0 obj <>stream +hÞÌVÛnÚ@}÷WŒòd§°ìÅ^Ûªú@ iÒÒ$·‘¢Ês‘ˆAÆ”æ“ú—Y› DNs)mŠ%ÛÌÌÎ9gfgAÀØj¼ë /-­Àç¸Å!K¬‘õ6²‡D#KHàxáC> ðg\Bteq̸‹¶h`Õç\A´¶.ìNû<@«Ñzõ +Î2G,°çã,¾ºš¦c8Nó$ŃĹŒÞ#”* $SžuÁ„ö :(RjJŽ/Rosw“x˜d§C8Ïœºð™¶§˜Ú?â«Å,Yš¼íÈòÜÅiæi`R…aÌ 8w ™Z2_oü¨ŸI÷–ËCÕQƉòoŠš’„€N7ØT‚Ø +¯d«¼‚íÇØQ.óìk\8u_}§.E $“¶rÞÝÂî’קJeóÂ6\ rp4óíÏŽñ$…=[N:òµç)ÚÈåT9)µO¥#.AÉ…šE\~:´”ˆøP$…›ç¯÷=öw²þÇa¦J³€ÊÏËÜl]á Ø fs6+^ºÓñ$_â,,œ¥˜°¿;ÒgÊN†l3åö¥Ù§x;à^1u! u±ŸéƒµIÜí€s ÂK°\¤cGÛòÞgÂ{½Ý‰>(Âò8Ç°Õ£fÉh݉¯“¬µÊ{‹Í<¢øÛ,9Íòɼo«¬)|’Ö @ß)²Fû&Yë¨ÝB½¨}êõmʾZn¢[1ŽêJìu>I‰"'Šê~¥ #n¡URofY|ÝCó"&ò}›×@2¼q&kØ[Ô îsø—QU´7”îg»Y%ÈåV®2.T_¹ÎôÑ«\g\(òÕwª£þ¸:£,I0ª×`gû}‡>TwWA;}{o@ö\ª½çm@qßîïåq–.šç«Üio€X.a™ošòí§ÑÀÃݯܼ«Xe§ºÍ„tÚ=þrz5;{5Äã7$žÔ­°Ï¦ù`‚»„ÉRüØ%vïf‚™àøÀ–/ƒ}2ÇÒw’tœcÐNGø¶ ÿ@·û2ºqÊOGFüùÍC’OÚ錚îÍ‘Û‘ÍÁ‚\Ð\5ó;(ÂÝ¿'=Þ#ŽüñK€Z÷; +endstream endobj 1881 0 obj <> endobj 1882 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1883 0 obj <>stream +hÞÌV]sÓ:}÷¯Øé“TE–ìÌû +tCjæŽI”Ä3IÌØþÿ’•ì´”Û–Bs;¤ÛÙ³>»{´+UÀ<è= ˜WQñÂØ€âPÚ`ü“½G$³@Hàø‡7G¬C¤8ã’UÀ‘…ñmÉ$è2ι‚ä,8%‡£G Y ÃÞðÁ8*©ˆYLŠy™­VùzëÚ–³lbé»ä)†RM(É”ÖÐL ÉÆÒ8r|æ‚ûØfS[B¶žÂII»"b†äH £OÙêÃÒVžw”F²È`y†iLª~¿,Œ9›B}íÄò™ /¨ŽsPÄêϵé{Eú€`o…pÉ +Ý&«t“ìóŒªiò$´«ñ1¢])b!™$Š +¼†]»:ÂÈ uTmº™Ô@ ‹ÈkêÛØË*§]Ì—k§³¯–;á¤4‘SÎå·¹¸µr¹|¥îU—H )œßøyÝý–nÿëìæ@;ùy»ç+Âfvs°\6Çù|QW8 +•ÅPŠ ò‘ʈ)b§lÛÿm GÒ·°Á!¾˜oÝ ]ŸõMÓÏîM„$áÅ|s ,„·EÀðÉhH yöï8$¯Æ)©ê¬ÞT)ý뢵+þ¡ww(ºo*ø–vvv˜}¶åq±©ó5šçGy=Y¤[  ý ßz=lóÈÓ'û·I¢õúIì”ì=yy|ðöå‹dp¸×áR¸§Ø'yiGŸj»®òb’ÈWO±ÇuVÖãÙ÷â:{¿´Éš‹“|Z/ª”4 ñ»±Ïê… ‚‘S2-6ȾŸÒU¶\|‘ü‹-f[,¥ûaï絷̧ü’s&ôUqOEƒJ~%*T_*‡ +lù_Ró’^E4/*/gJð°ì~ÃŽ+ÑEòõÞQÞ­×”¹Aÿ1"HÝqkæE@)Zv¤‚¾Q}c+˜ûS÷EÜdÜ%Ds‡r²Sþ“í%®Eåh«ƒÜ¥Ê„¿ìJ‡Yi-z¥Ûùº}®v´ž~Ÿ®ßþî¾ã"ë6š1”;l&›Zê½ósîλ=µ¨"êíQ‹ÏÑ}ðæõÁß>ÛþðM€­]í$ +endstream endobj 1884 0 obj <> endobj 1885 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1886 0 obj <>stream +hÞÌVmÒ@þÞ_1áS«Ç²oÝmcü€§§p(œ‰Ò@A"p—¶÷ÂOò_:Û- MðRŒ!Ù]ž>3Ïìδ Nãí€Á"s”MA!Mœ¹ó&r Ds‡q øÉš„hA å­Š,„JÄ¢©S'”RуóÙí´/À'´­—/¡—z, {³Hãõz¹YÀå&OÒy> endobj 1888 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1889 0 obj <>stream +hÞÌUÛNÛ@}÷WŒxò^öb¯mU<ÐZ(TQâB%Œ›8i$'®l§þQÿ²³¶“@„£R©Bò.s93sάÂad}èq冒à2lOdÅÆÐxGg8Cƒ `ø‡÷\ê{àJF™€`b0D¡ÌF[Ð7,Ê“<·æeû êAë¨upŒpzf:Ê¢Éd<Áù´ˆ³aÔÉ]p¥dUJPé8`qÊ•Ái©48^„ZawãhgMp“‹»T™c„„öc4ù‘Äy‰Û %¨«p…<Æ' %åæO"\*Íx@û_¯°+ÊVøˆWïÛ©O}Uí³¾`°rÄ^½o†ÏaõQA”9Ëá’xøp=Ž.£yœuã>š‹ÐdÔvõ6J<Ê/ÚÁÒæ¼[-«£:-1[Û- útß N‚/½ÐÔEfù"<ØMåê[•G»¾¬½­\hî]¡]îíu9DMÜþÐ^]vR°=`M=„¸Gû•¼ïÜt_9 ê')ã‚/|LàX«šƒtö-‰÷C2‰’$ícæøzât¸ð…d_5-Â|Kœ†Y{E”Õ´çhÿÌ¿îá~ìz&º¯"JÄvñ˜Ü2ŒºC`KPþÌ7âã”­çñ…Q±ž·ð½&j× ÕDs–¬]/Ô’z´›Óì iNsšÓ”Ö¤Q'MÐ<¥ÓÐT‡ˆ~ˆ0oÖŠoÐJlÔŠ7i%šµâÍZ‰MZñF­ÄìÙÛ±‡?EòKuì +endstream endobj 1890 0 obj <> endobj 1891 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1892 0 obj <>stream +hÞÌUÛNÛ@}÷WŒüd·ñ²7¯mU}€ZÚ!bh%‚*+qÒ¨NRÙOê_vÖëÜ(F”R•$Z¯gvÏÌœ=³a0¶öÞõŒ K h2T (ä©5²bkxd1¿ø`a@¢A åO-Š(„J´ÅË#”Rñuét;Gà“Ú{íׯá4wYHBg>Γét2Ãñ¬LóQ2HÝ«ø†&'Â÷Ác„)âC©48N¸Ú`Ÿ¥É0Í!™ ásîz, Ê™ $tn“é,-*ÜNlù2Ââñ.¢("CJ¥)Sq¨•ë'\îø‘ÍŽ¨œXþšœ¨¢$tÊpńΖùu¶Â7Ù~J\!‰ï,Sæz>N×ã,dœpG¸ Giì¡.Dš©Ó|nlÃÅ W‘À¹p+Ojìy1q=Ì×™Ï4ÑU¹T3ǹ +4u:—°ÎE–Î姫·êD0 °~Þymz>rÙ¿A}Á˪Š„š~ZÀZºLšx–˜ûYf&g“ñ·²À^(Rì!s®]á¤C²j€Z¯$¬°‹7 î›®‹H¤Œžõ«Aä¦Á)¶Bë"à6»¤®r®à-xõÍF}¾.ù°Z´ÜZÄ 5‹âW+¶òQ"v|Ëïžm¼v­Ãnvñæ]¢vÝK4åX”I‰¾EÎ,Ý\L’n²LóÓy†æåx>ë;²…è-„é»;{Ûï;m\ôñk/ÞÏ{}Gƒ-Š;«¶i”¿×óHöäØ“OdO¾ öš"ô{ í%ö³Ÿ¥·ì;šô˜Ñ h'ò¯5ÀÐ{P¼I¬Y¼Yì! ðF °ÿ®ÎlˆAPÇ'š/(ª¯3ŠWd}…Ý…ï•I^šS]ÁA6|Çw»'çÝîÌÎMødÙá/_dißA»}Ø9Ú?ïƶÖ3šÁž¦e’14Ûד„q{˪_¶"@õROv?h^£â@ýjÔš‰1®2Æ¿•_ ÷[ +endstream endobj 1893 0 obj <> endobj 1894 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1895 0 obj <>stream +hÞÌVÛnÚ@}÷WŒx²Xöb¯mU} ”´´¤Œ“>”*²`!VŒ]Ù¦ ŸÔ¿ì¬/¡7¤4r¤²—Ùáœ9sYÃ`c ßÌl +C +p©¶'APÈ•±6NCcxÆ€A¸6Šo¼1Ï%¾® „r·EBm´…Kc@(¥Â;ã³9›œC<Ç''p‘[Ì#ž™mòh»Ó LÓRåëh©¬/á;¤5'Âq`À“„¯kH©ÁqÁå;PÑJå¥+ø”[æiÆ “ûhû5QE…; ɉ+Qž$ŽÂ…ïû@lR»Zi¯6Q>áö/›˜í ªMTÿ¿Êˆ¸i{m"t°Ìi‚Nìyd ›8æ8eÖÀÁ¥k 8ó'Üë]Û}­Ãvu¢.ò¬¶­vË,I\óʪvTmÏ‹Ø`¼f–êÌ·SO|Y÷³^ ³tÄ>Ì7ű@!´ã·“±%Í÷×óp^ÎfQFå®XX/}èhñ¯+w½‹î»^A¢ÖwWq„Ÿ|—¨ÍÙÝ8K&ëo¡i¼Ž£DsoâщƒøÄy†õºPå¡/h»sº 4G%žr¨¨Ç¯YpV}\†ö€^‹ë€á«× í$]!-m÷§hO²å-~ÿGllA(ãìX/ÌË(/´ïqÉE¯.g³cýôä4΢½Ê&UF ×j “ +UÐY¢5l2¬ìÃ}Ò‡}ÒU´Á/µ½Ä$u{ 406ò€»õµ¾ Ø]Ëhk ž±N§5øi ®Ð^5êÓ¦¡mäu®º/𽼉ò ë>9Öôúî“c¸Ã!解àr6yÔ‘ÜŽa°ÓÙS(òj:šMç!ãO;M4(zV«q¶Ýª«wš«èv_õáXÞ(È’U[:äÕê NË ð•íÊ8UEï¨-‚–“¨ªª¿…]hÿËÑõ— +ýà@èsÖœD}|4R¼èIÀÁÆ%íj~§ä”BS +MIŸB‰Ïþ CþL +endstream endobj 1896 0 obj <> endobj 1897 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1898 0 obj <>stream +hÞÌV[oâF~÷¯8⡲»0ÌŒí±­ª,qÒ´^v&}(UeÁ@¬‚‰|IšŸ´ÿrϱÍ%«Ò-©ª ™É7ãï\¿±¬ŒþÍDÀª0” ÷ÁñØrm,÷±Ñ¿ ^BÇ?œ„ï±ÀÏæŒKˆ7GÆÄâ¹Ñcœsâ'ã73 +¯Áe> ûÃwïàSn Ÿùæv•'›Mš­à6+u¾LæÚú=þMÙ)Él×…ž`B¹_5”ŠÈq!Õ{¬“…Î!Éðknõ„Ç”™"%„%›‡µ.jÞ06\'Ààs0iAÌñ9wš0•džÚícüL:/ö1=”»ÞÄð÷É ê”€›Ž¿Ëy+ÜÖ[Ûm¼ýX¶Ã\ó$VÏÅ¥gõ¤ð…dÒ´-£Ûàœq<ÊÔ§|Û`‹j^‚¥˜gÞYõŽnð¼H­úkn3Jt.§ÌI©N¦ã×Wáõ`ŠpŸTäYø˜&—ïÂ+â_&ÕõF•³ùz[T9^{ uõã.™Ó$¨àÔöÿ yq'ðÓuäñ{¸ö?ͺ‚/\ªåмÁæU)d# +îí§—£PûñÈâþ¥1]|KÅÕ ŤÝÏ>6 +endstream endobj 1899 0 obj <> endobj 1900 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1901 0 obj <>stream +hÞÔVmoÚ0þž_qâS²ë—ÄI4í tíJ+¡«4¦*"†!­’0ÚŸ´¹³ÍËÖµÒ¤…i˜ÇÎóÜïÎa0sNÞÌJG +i~$AP(”3uÞ¥ÎÉ)éÔa(~ðƢĄ‚Ê!]:YõK'N‹PJ¤ç“ÛëžB@"HN’ׯ¡_x,"‘{7+²år¾šÁùªRÅ4›(ïsú¥„•âD´a2€´c)¥&Ç—îÊrU@¶ÊácáµXH¤;GJè>dËû…* o7u$'¡D÷$ $.â8âG”úÖQã»™D÷ ÷šÄèèÂL¢÷ûØÄ&"1à¤í¡eÁÖXXc/3Oø$pS浆^‹³ˆqÂ]á1¼gÚ?ÔêwËד +]“F/{T…öè¦Ñ†í¯‰8` 7A6ÚïÒš¥ûÉ/Òô/I_²cK›ºžg(¶B> endobj 1903 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1904 0 obj <>stream +hÞÔVÛnÚ@}÷WŒx²[Xöb¯mU} IÓ@„ÀÐH¥B,Ԙȗ\>©ÙYÖ„¶j¥T…^ØËÙñœ9³3 VVûbÄ`UXR€Op ‚B®¬¥õ&¶Úç ÄK‹q ø |à J(‡xcQôB¨‹X<·Z„R* ¾·>ؽî9x$€¨½| ƒÜa ìí*O6›4[ÁeVª|™Ì•ó1~‡TÂPq"<ZŒ0éA|f\Jí\|U²P9$ÙÞçN‹ùDÚ)º„îC²¹]«bç·[ž¢8I< „‹0 ¸¥®‘)9ñå~õî~³éÑÙ»M”ÿ”œp—’pÓ ö™ÐÑ2¯ŽVx&Ú~â—xö#pÊœ–‡Kßiq0N¸-†WÏà\ q}©A¾5Ø¢š—àHâÛg·£ ž©ÓÂxím¦½“Kuæ8—¾NŽ%¨cч¥cùìèGu >§ðtÿîëÏîÏ4;×ØlwB’@§ŸÖðTºÌ5pÎÎzmÃtõ©,° +…= aöÃ}"lµ û¨KØç»–ØŇ÷L×…$”¦žõ¥NÜCƒSl Bk½íFŽ´¯f£¸GS»(“²*¦Î«CzZüÙÎ\ï¢yUÀkX«åý$M0æá ṚڔðýÃñ‹çPÔV?ðÜKU>µCÄoGõ:Ts„Ë©ÝMÐý>vÜúéqÌø©Bg„6Á\ÍqB­b€xô¿dÿz›©eR­K]4ÕZu³²¢ŒlÁ&—á E¼q®q¡ ×]š0>[¦ˆ«Å,É’õv5CôDÄý4‹ª²@æyUb½5q¨Øüô"¹ø["¹ø"‡¸2B‡âkeô~%ÑcéÅB݇¡¹Êšü>](6ó4 ü nA(þDÔƒ»Ý†š:ÑåõųFû¨Lòrt›ÌS=ÚWSû(2ÕžŽcÄcÊð Q§¡g˜×„ëqáÞ±¹:ºë‘hÂöD t]m¸ú¬æêk.qR®ÉžkÂWþ¿ø"ÀŸÊ +endstream endobj 1905 0 obj <> endobj 1906 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1907 0 obj <>stream +hÞÌVÛnÓ@}÷WŒò€lh6{ñîÚB<„Ô@ÒVŽ)E!«qC¤6­l—ÒOâ/™Y;)WQÀ Tiw:;=gÎÌκ–ÞàÉ\À²òŒË##ŠCYx§ÞãÌŒÈN=!ãn"²,ŽÀ*θ„ìÜãˆÂxˆ¾ìÄë3ι‚ìÚ{íO“1hÁh0zðÊ@D,ò/–e~~¾Z/a²®‹ò4?)‚7Ù3¤R •dJkè &Œ†l·4Ž†4·Øi‘/Šòõ^–A_XfüBBò!?¿<+*‡›dž‘Ì”g˜6À¤ŠãXq6Bvwˆò™ ¿8ÄêP€r‡¨~[›ØU$< £M!(Y¡Ûd•n’å +™öo@rô5š6èK ɤ¯«nüŠt„– +uP^4¾ÅÕI aÖ? ÜIÑøËjô1_ÿbMuvj9NJc©r”KÔæB½¢\>ô§”ˆ…¶ûW¿þh¿cØßAýÃ\”a•Ÿ· ØÞ\6 è„sxvÖéjù®®pªG@)&ü÷´LùÅ‚mî{…­tWØàßηn†.f±iî3l,‚„·óÍq,PoE@Uçu`ü« +ÁYqz=¿ÌOp¨ýÞL¢¿·hઘFsž GÏÉ}<¼½§šŠ³ëàFO“ž?‹‘Ù‹ù±OøWÕ&<»ÿÒà é¡ÂU|Ÿ´Eù=®d½ØÒ¡ÿ×0Q®b\H±Ñ;À ã'{ããÓîÁî$™&£,%÷è»Eú:¥Ùj=.¦,\Jœ‰À¥¹{ÅõtµFàßú™Î9 Ê’;)šãûÝí§‰hJ6íG¸˨Ïht¢‘Øҋ냼&wQ®‘z\¡©øßa˜×%’L[’ÞÞM<øLãyï—omEðEðY{z¨Eì¹ÎnûýÊ=fß9_âW¯»Ô;Í|–"$Qô¾ÍÝ ê.wGÕmö“ý——ý.¥}0¤mïÅtºÚ¢›Ê*ÙMúŽ ‰þøAbxš_ÝíE©ó²–e~ãÞÈÞÌ&áÑÑQ7Ut¸­<ô·íïk. 5G3DwGô¾)øe +UØÜikz­-l¾ÓŸš ËÝ +endstream endobj 1908 0 obj <> endobj 1909 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1910 0 obj <>stream +hÞÌVÛnÛF}çW, i½÷%QôAe¤ÄMb“&ˆ‹‚iÕ¨,¤ÜÄŸ”¿ÌÌ./¢‘*¡ qy¸š9gnZN–ÁÉ‹9'Ë*0’X")‹à:ø- N¦œp’]\pã±¥IL¬d” ’Ý ¬P¦ËÁˆ2Æ$É>Ãד)Ñ4&éIúì¹(#Ó8Ü,Ëüööf½$§ëmQ^ç‹"ú3û\IïJP©5qÊ&ÙsoÒ qXÓÙžùUQ’|}Eþ(£·Ô„7`’L>ç·w«¢rv'Y Uâ Õ†P!“$!TÅŒ)/ÓjMóôS¡zï!<é^‚ü68‰ IBॊ›H [®k¶R{¶oòH*ªÃ"F–6 sAE(#ŸÚã +…(‹‘º(7»º_lId¨ ßEîMáñ²º‰FÀ7ܬ1ÐN.ÃÈ a,†¹Ä5LrùáW‘ˆ%Þ(iï¿wÿÁmDZúos †Æ~V' -]®|âs¼ZùÅìfù÷¶‚^¨ +è))ÿ„¥2,®hÓu [áJØ@w ®}×%41¾žq›#ªkpmBX-Â]‘©½‹ A`ì2ú¥«Ix¾œ¤°çÕ_ólœ½_†Õ6ßÞWÍöì©Û… 캯ȯdU\—eþ0‡Ÿ#\^†ƒô|6 ÉH3Á©Òlˆ|F*Ibj’Át¯‘Ž’Ê ‰Nôp×Ã÷%x˜Q‹fxOLýÝÿ©Ø~zü W1:~ðIfø Á±ûgXD€Ö«Ãòhcù˜ŠÀ¨9‡GŒ²'ƒì(éù»É Ój%×”¹À¸vÙèâÒ„ê˜qiØ4d,à²á2˜žÕ‘ÁüD,$Ç Nš¯ïV9À‹b‡R ¬ Ö=¡wä„ÜTÏ^UDòómÙã/4’÷¤ÝSÖ3@aƒv:ö¡—ê§ð +YoÞ,÷w +Á„(Nü2> ®¡öœ=îê €š”]-Mbj9XQõHÝ‘ƒ¼®àBAY™/þ©Ðd8x"ºYÆ- +2É°q?˜½Çó‡¾gÁà‰EÏæ žçÛ¼Ü:÷S€W›M =¶›'7u¦Ñ…³žŽÏ.^S¬lcÀ{“èÛÃz¿*igÖ:xWM]ò;‚z¿=í0´{Ú»à]¿¸9ƒ©už°ÿ™¤&©=%ùÁ иÉÑž êS®¡üÏÏ¡I?ªÙcYxdÁÃkÍø«ͼaØ +endstream endobj 1911 0 obj <> endobj 1912 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1913 0 obj <>stream +hÞÌVíŽÚFý笠Bªd70̇=¶õñzÉ6ˇŒIY•ª²ÀK\XMÓíõ-{g ëµJ#9RŒ„Çg†sï9÷^€ÁÎŽ v•%ø47 (¨Üz´Þ¤Öð–ƒôÑb(¾ðÆŸ„ø‚Ê!Ý[YuK7Ö€PJ¤­Ÿíûø<@4Œ^½‚¹rX@û¸SÙ~_vpw¨sõ˜mrç—ôG %šPœσ#LzÞ4”R“ã‚Ë–;ɳm® ;lá'å ˜O¤] %Ädû§2¯ oœZ’_¢U—ãé÷æ”ñÔ©‚ Ì?Ž”ÊžoËãQ=!\f‡µÝ‹FÓé,EÑrþÐëë¤zÑ,‰q9ð(gº4¸a4O~ÿŸA>¯¹Â•­@ª^ <“u¤kQ«+iZW®¥5™´Ò¾L^=Ív)ÂÀnÕŇíE ¨±)Fý®×}ãM^–;„U±Eö•vI2Ï'üÜÌ•~âvY´«¨_=êÅL 6AÜÝÕjõ…6â0 +Bg—iA“¢dö¯ÓzÄ¢ÎT=É6긶ÍÀ½}'FÝÔÒ°FeVU ur7£©Óåý}wü3UìŠÂk›’P÷|Øù¢ø3_ÛL& úÀñ—¼Còçý>×°Ò°‚HBÚë2ù“ï!n¾i:!n»eŽp¡g<½é0éyq¸)Âù¦.Žšÿn:[¦ÝF˜œ*„ëߎFÀ|$º¥O3ýÕŸ«äTê$Ëû˜uaYå¦ã{ãd¶ìÚÿŇ á'úèÍ2ÄÓÖ~ügò·àï + +endstream endobj 1914 0 obj <> endobj 1915 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1916 0 obj <>stream +hÞÌVkoÚ0ýž_qŧd+ÆÄITí…lëV‚ÐmÓK#¥9i»þ¤ýË]ÇЪ“6í‘Jˆ˜csνǾ¾0Ø8½7s›Ê‘BI´r.œ“Ôé½fÀ ½pŠ/|°($q¡ „rH¯Š,„úˆ¥+§K(¥Ò[ç³{–¼†€D0è ^¾„©öXD"w»ÑÙÕU^nà´¬•¾ÈVÊû’¾C)a¥8A]F˜ ZJiÈqÀå÷Lek¥!+×ðA{]éæH É·ìjW¨ªáMR'ðcLN’@á"Žc ~D©oÓ”œ„ò0ùî?šG{Œ;¢™Äôï͉KbÀI?:8a¢eÁ>ZØhG™'|¸wÀ)óºC¯ËYÄ8á®ð~—&?4NMõÖbëëU ž$¡{î53ÊâºÊ½.ÆënKct“.5Îq.Cc‰%ÚÇb6ËÄòÝ3?5„`IáþùÓ×_=ÿpÙÓ°>ãeÍI"c?ÝoÀýÑe¾Ý€V4ûEa³|sYWX •Â‚0÷Æã!®Z“CìpÈ›#,±Š +<°U“XÚól¸X†Hâ?8ŲÀDè> ¼Mžtߧýt1_ºUÕ×ÕÒ;~8‡I~Ø,7³¸üº‚WP¨‹ÛQ¶ÒÛi^ίw¹*«¼ÎoòúnévnÖkƒç%ëÓ¢»_õ+¹±2pòm§Qd·½UšÁùpزJ¿4°*Ël¤ê¬èk•-]qCüß´z=áªþ`6.LOÇ¿ d^gº¶Ñ4.N·º^ºãÅÙY«y"-ÂõYv§ŒŸ#Ö9l Á“‰ÌÔ +óèRú‰xl†eïßKácøÿ’r}ˆaka+™Íký¯÷BX7>ý4MнNµS«<+þù˜ü¬…M¶B„Q(·jqÑŠ¶áb/°ÉEï£áØy’òÚ®UŠ“§Ã¤¥"~¼íHþf<촴﫹ñîi÷êæ¦Z°Lò­á?Oi» +‹JY_¦“ɬ]îùefºBöþÉ"%ã&xxÊÀMà-]Êæs2KŸëÝüw +øÏᇩ +endstream endobj 1917 0 obj <> endobj 1918 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1919 0 obj <>stream +hÞÌUÝrÒ@¾ÏSœá*©°ÝŸì&§-P­e Å‹Òq"š™@œ$Xð|KÏ&”âXœL²9ß9ßùOLÓW}ÓÌPê‚í*ÒИ¾qzÉ€?1Š?¼1×!ž Ž „rðgEBm”ù#£A(¥üãÖ¼n_‚$.4O›/^@7µ˜K\3™¦Álͧp5ÏÃtŒBë΃®DéŠ!%4aJ‚ß*)•&ÇW[î^ŒÃ‚ù>¤Vƒ9D™RB{Ì>ÇaVð¶}Cqâ(LO©€páyÛ¥Ô.-r/@LŸpû'«£Dbö›ÚxEE<@Ðv«Bè`™\+dl'°„M¤¹N™Õxt¬g.ã„›Âbx•9slGª›&¥l¼å`)☫@ÂRžf‘ÕÀxÍd®ë\dKuá8WŽ®œŽÅ]Ç¢{¥cùfiSˆ%)lî;¿º?Qí8¬ÏX­h€PÄÕå§ël&—Ùeâó<ŽËC/šÞç®Bâ +A˜ùÅâf8&Õü¯GØáÅ+\âí~Ëré<â©ržõ••ƒ$öv¿)®&B×I@–¹¥ÌEg‡“‡N0J“n4ï&)Šóë`¦½p”Í%^8«£\ÓãÙ®­þ(¥Cëåvz¥.Y«pÒ|Ýn"þöcß?÷oúCS{]d•ºò”PQ04EWB_jó1 üêœñZ†S^wXÿÎw{>®Ü£#À„¸Ÿi^R£¸H©k7ní ö5tt‘ðU¯žWy–1œéyšãdñ)O†Ö,ˆãd„úÑWDÂdRaCëDþÍ|ßRTºÃ¬ð3èîPÿˆÉ];¶Æl¾kU!R<¶âkLíñVa\>¶•7gתBØ+»bÜã­ÂvS{â¼6ß÷ÚG×.Óóz4Ý$^M“ùДu¬TñJ[ÅuÀ'U[Úoº´¶$ê±y¥Ò絫“4 Q ­ÍÑ}â®-ãߪ¬â? +;?hµjGyÕê©:š×ÏV¤û‰ÈH7²võ®{ãoÂÇoöw—â\ +endstream endobj 1920 0 obj <> endobj 1921 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1922 0 obj <>stream +hÞÌVÛnÓ@}÷WŒúdC¼Ù»m!Jš–KS¢ÆÀEh•l‚¥Ô©l‡¶ŸÄ_2ëu@ªTUu…"Å›³“9çÌÎÈË` Of Vu $4™j*,ƒ7y0Xš,…DPB9ä—Å,„JÄòyJ©€ü:øžŽA‘FÃÑË—0­"–’4ܬ*syY”+xW6¶Zš¹¾åï‘Jx*N„R3´‚üȧÔ.9.¸Þç>·fa+0å¾TQÌ¢ÃSÂøÆ\^­mÝæç’šÓDi \dYD¦”JoSs’èÝ>ú'\þµåqÕí&Ú¿+NÖ–$Ü”é®N-SZ¡¼Ú‰‰„$*¼NY+\&QÌYÊ8ᡈ~+§ÎˆL\¥¦ÕÆc‹í¼H“$üµ;ÖãU]D1ê 7¥+tk—ºÊq®W:§%í´¸ÃrZ~Eî¯NH>)Ü=ÿùyßóaýdýÃÚš¤®ü´;€»ÖeÒÀ“p®×~q^¬~45ÎBmq„ ,üñ„ˆÐ.ÈnºNxÛ§x?àÊO]F2íûÙ-0X'˜DîœâX Ú™€ÑÛñ(Òá‡ï³ü0ÿ4»ëÆ4Ûú"zµïCå̵án÷5¼†µ]^O̼ÚL‹òÌ:x|sU]„«rÁàäìè`—%ñ®.j8…Q$¢¡ü¿ú°t°-K35US˜õÄ6f}XYƒðE(p0a“òHJå(ùsPΊ…EØ1÷M{bëy˜¯¨³Ú7íD8?¢G?GÅrùL¥›˜Ç42•';E¼·æG2×€{BÄû;°®ïGÛ¦«å³²ñ–­ÿ±¾#ÏjOvöd½‚d»¾|[³]x*„‹rº©|ýŒ>žŸÖ&F¸95·Ö½ßp‚ÑÞ›{#9·stÂð +=€˜Ä%®ð–©±[Ó^BÚ.hÏ:bOS÷Z–{ Dá)…ŒËÅN ÂþPwÁ[ÐoÌðYù +endstream endobj 1923 0 obj <> endobj 1924 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1925 0 obj <>stream +hÞÌV[oÚ0~ϯ8êS²ãKâ8šö@)Ý Véú0¦)…@‘¸LIXן´¹c;@‹4©ÚH;ç³ùÎwn6 fNóíÁ¬p¤€ˆ*”A!Ïœ©s–8Í  ’©Ã8Püàƒ©ˆÄ +"A å,Š,„ˆ%cÇ'”RÉóÅív. $ +ÚÍöé)ôs)¢Üõ,O—ËùjïWe–OÓqæ}M> )aMq"Â|F˜ !9·”R“ã„Ë=÷ K'Yéj׹糈HwŽ”Ðù™.¿/²ÂðvGrItO’Pá"Žc ¢4°ŽßÍ"ºOxðh££7³ˆÞïb›ˆÄ€‹ÚB‹ea%V„Vl/õD@B÷8ežâ4ò|Îã„»Âc8†µA¤ÕÏ×›lÆ%x’DîgϬdÏ‹¹ç£^w½Òq6ÞR8Îe¤#§µ¨J‹Î•ÖòËÓ?ÕB"°¤°{¼þéùÄmõ°þÇÛL„$J‡ŸV ØU. lŽb³µXØÉ`>»- l…"Â0÷‡Ç#"ÜlB¶õ_•pÄM Klâ}‡¶ébK[Ïz‚›e„$Á¾¿)¶:B+' ý®Óö¤ûñÛ0i%WÑ[”i¹)FÞë}†Úùs³]¯âöMo`‘Mï†eš—½tœ¯ûÏWýu^ŽÜOWÝî–!yõ;Õ®CzËlh.»é}–Ü“~û¤´6 ƒlŒNø”aJÄ ÃYõ.Õ/ˆ6<êm˜ïQÄtV“­„m,ñ'ðïÌÏ›§ó¬˜ÏVƒÍ"»žOÊ[“1Ä1i¼æ¤)brpD'±I™éAÒjV‚]Fq´JðRÛ/¢D=V¿œF âb'…áMg´ úítlb]Þ-qòwÚlBwµÚƒKðáòlø´.¾Dø¦8’;–ñ¦ÀL!lNØÃf ‰¬…¿:BÔB¿­5Ù<Ã¥®uÄ¥>Àec[`¦Æ®Í~@”¾> endobj 1927 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1928 0 obj <>stream +hÞÔVÛnÚ@}÷WŒx²›°ìÅ^Ûªú@Á¹4ICÁMz¡ª,X¨%.ÑÚiJÿ¨ÙÙµ5R¥D2R+,v=;ž3sæb3˜;ÓƒyáH!À$ +Z93çuêtN0Hgã@ñ‡ ‹BG +J(‡téP´B¨²tâ´ ¥T@úà|v/“H½NïèÚc‰Üõ\gËe¾šÃùªTz–M”÷%}ƒP¢‚âD´a2€´_™”Æ8n¸ÜÛªlª4d«)Üj¯ÍB"ÝMBò#[Þ-Taí&©ø1'I pÇ1?¢Ô¯Â”œ„r{ŽñîÿqŽôv„=ÄðwäÄ–’ðжLoYP{+‚ÊÛ«Ì> Ü pʼv€ÛÐks1N¸+<†ÿ²’Sˆ¦z]ɦ÷“ÿVØ …‚0÷»ÇC"\5%Û¨K8䶄%vñ¾Áƒªëb˪žÍ•eˆFü}ƒSl „ÖA@ï,éyÒ½ø:J»éûÑØ-ʬ¼/ÆÞË}&ø¾U7§¨~_À+X¨ÙèÔ8°ÄïŠu¹»­b'kCk†ò\ekk2}ñàZë1 †H(F°§Ï\é5‚iQ£ Ø„t›œŸž¥€ãR4’¬¦WÙD¯ÑºyúìBtŸIæFŠUPç¦ÓŽê8G¯º½áõó—é²öå­ó·7Í$ÊÚL’w»ðXƒv{‹¬(*‡{×ÃÄ”ÙhÐí%Ã1NÖZåsÃçØÒ2Bj¯6ke”ÿTc|iH7$ü¸ß éÍr©ŒX› +þaÓV“®—èz å& ¥w_}«U‘Û‘‚d‹&+¨oM›î¾Ì6JÕ¤»Uz¥(·ë1øø–=0ªÅÁËô.¥[\ü¢htÌ 4Š+:ž)~èLqKŽãš3{ï "þÎæ­h&˧gR…Ÿ¿÷T +endstream endobj 1929 0 obj <> endobj 1930 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1931 0 obj <>stream +hÞÌVmoÚHþî_1â“7 ËîÚ^Û:Ý´ML{ººªXÀ’±#Û\šþ£þËÎz!iÓÔŠ®T:Øe^žgfvfmk«÷jÆa]YҟॲVÖYdõ^rà­,.€áø4 Àwe¢­Å…2eÑÂêRƘÑ­õÞ^‚Gô/^À´$< ]¬Ëd»Mó5œçµ*WÉB‘Ѥr • ŽçA—S.=ˆ†RjpÜù€}¥’¥*!É—ð®$]îSi§ £OÉö&SUƒ;Š,)¨/1=I= T8auÆ\“h“{£Äô©p¿Sbu´Ó(1ûûÚ„MEB@¥ +¡ƒåÞ>XÇ3ÁNâ¸Ô³ï@0Nºn}Ò<à‚ +Û!¥‘s‡ëëBMËÂÈ–»E DRß~K2ò²JI㵋\׹ɖé !}]9K°EŸ•Žå Ñ®: (ܯþþl}¦ÙïAý›5àHèò³ýÜw.wÍ…³Ÿefs•®7u…£P)Ç¡Üþ—Ÿ:¶ZÒCÿï[ØM Kâ‡ùöÌÐ…4”¦Ÿõ¥ îÃ|3 L„í“€ªNj"í]B¦V·“dQÓ4¦%ŠÕ¢N‹<¶;—óh::1ùã¡==]“aƒ2x= ù_gQ?šÏb[ÃytÒÊ5¯Š‘evþê¢?îŽøqXfuRÖ† +Åi>-Ê:¶/æãñQ“@X×ãäN•˜ÁDtNý6†wé²ÞĶGå¢øtÓPl!¶—Åî:S'1Ù&YV,b5UúY«ƒ.&'þ#„»_F8Äðž}@|ˆOuø´+×:W<íÈ[E;§hquÚ8G·ÓmqõÚ8½GÙÎ)t}N÷MÝ|þió9Ey¹ÁŽ¿ÿÆÅGèþQ¾<„€b3¼G«ïqdÿÑ÷ |ë²*•¹Wc{±IJlð&áGÀ?ZÝ=aÕëÁ­úƒ«KèÂåÙìywÖ%Š¯«#¥l¯«!¾âU¸Î¯v™Ú_% ÇKèDaû“ÃGæW½¤ÅÔ +endstream endobj 1932 0 obj <> endobj 1933 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1934 0 obj <>stream +hÞÌUÛNÛ@}÷WÌ£Ȳ7¯mU<ÐzÛ>`T™ds‘œÙIIúGýËÎú’ˆ$4¨„be7sffÏœq8 œÃW…£%ø,h rãô÷‘sxÊCÔw¸†\xàÓ0_2ÊDc‡aÊÚ¢®Ó¢Œ1 ѽsížuNÁ£´Ûûûp‘ÐÀÍy2&ø4™š¼Ÿt ¹‰>ãQ²:JPéyÐâ”k¢“*¥¶Éq#ô*÷¥Iz&‡dÒƒ9iqŸjw„)¡3OÆw©)ʼÈñTˆÅiêi B†aTŒ©ªL-¨¯ë§B=ÀQ«Ž,A,)NXJ‚*h”°l¹W³•^Åö•®éÑfêöEÙ§x5à^5u! uÕÏvƒÎÚÇ$j5à Ç auÐþØií~ùyGß®b·˜&ÓY“w«>ôlñ'¥»EÑ}VÀ¤¦žtóìëmq–,ÐlòKÓÆ®P”€’h·Á»°úA+°æ”hï)\j¯ù]Iaˆ b·—ÍnS³“q’¦Y7v)F¿MÖo°˜ì‰µ ‹gh8\³LPµ5…Êí‘üŸ‘%ÊÅCt—øÉtˆâ”‡ l6´Û[>/’¼*ÈÃw×3ë}<´.X¾Å‚µzö?ú¶ +îçÆ WŒŸî0ÉqÊvz-¶xÍS8²ã½e¶p°lfË[ŸÎ—…ÏÓk†N¥økÚ#ÄkHnB¢†¼MHÖP° © +×ïyE#¤bjh°M¨¡áoB+PCƒ¯A;*Kƒl»øjž§ØPiõf~õnJw·ÒÒÿêþ +0x›) +endstream endobj 1935 0 obj <> endobj 1936 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1937 0 obj <>stream +hÞÜUíŽÒ@ýߧ¸é¯ŽÂ0í´ñ[Š®KhwÕˆ1 +’ðaÚ®ëúF¾¥wÚ.(ºº›ÀÆ:=s{î¹_Ss£õ,â0Ï %ÁeØžÉ K™q­.ñÌàþðÆ=—ú¸’Q& ^ Y(³‹'F“2Æ$ÄWÆ[«vÁ¡­àñcf„{Ô³6ó,Y­ë9œ®‹4›%“”¼‹_ +Y¹T:49åʸSQ*MŽ ¡vÜ£4™¦$ë)¼ÊH“»TY ¤„ðK²ú´Ló’7Œ %¨«0¶ÌSÄæÞ ¡E’2 ¼VÑjDól +ýv0:û­Ò} Q‘dE­q³ÓíÊ{ʸ%º’4X&y^1g£Ðl€ÙÄá`ÐÂ^OÇóÕÝdébŽð:*²qJ„Yyi_ƒz‹_Ó1pÊr©h€àì€Ü׫Uªáìãx o`䳃j/Òa‚p–õx[i7À±o€‹O˜5َױ\W…ÒÞ¹©sXºVv‰.\-@h”0<Þ"㇩ë ~ÿ~ß»;Œ”möäøu¶.‘®“óþðAGÊ> endobj 1939 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1940 0 obj <>stream +hÞÌVmo›0þί8å¬ë°AÓ>¤„l]Ó& +t­´LJÜ,R^& ë²´¹3d­6©ÚB7°ylž»{ÎgÃ`f¼ŽÌrK +PÔ×— (dÚºµNë¤Ç€Ark1/l˜¯Hàƒ”PÉÒ¢ÈB¨‹X2±Ú„R* ¹·ÞÛý¨ñ!< Ž`˜9Ì'¾½žeér9_ÍàlUèì6hçCòM‰Ê'Âó Í“$ÝŠRrìp¹çétª3HWS¸Îœ6SDÚs¤„èkºü¼ÐyÉ%–çœ$žÂE@\ŸR· +Sr¢ävã'Ü}0ŽòuD9ˆáïÄ JIÀA×ß*a¼e^í­ð*o/RG¸Ä³7À)sÚv•ÓæÌgœp[8 Ÿ²Â]ˆ«ŒRÃl]aÓ»IŽ$Ê~ç”#ºÂ³|î´Ñ_{½2B—áR£çRéŒ/~í‹I–ñå»c>5Ž(¨Ha×>zý]ûÄiÍ°þÇÓÊI|#?­°[ºÌ­p›Å¢êŒæ³OEŽµk¬!³¿8\aë)Ù@½„/—°Ä*Þ¸WU]@Y­gÓÁÉR!‰»/pŠeÐ:È‹´p¤}—Ã+XèÛû¸H³â"dë±x«ÛëÉÖØy¹_•ž‘¢[~¾‰Bœtþ1N:ÉU<¶ Û]¾ž¼ø¥‰’=\¤y^™8íÂóÖ1`§žŸnÐâ8þÂRoéù áU\dã2"£9ZÞÆÖ#š?3­¦µn­.â?ëö4^TWŠY­Õ}BjTévº&1QÔ9F¦›Õ|Nüç*—xÐK’Éo^¦ a™ÂÁ(2*]Gý~Ò6$TаPËM¢óây¤º¼ê÷Wâñü›Û qüÃ<æz@òÍr© œm07­Cº]èaŠp¿ õîÔË,w'ÄÍÕºÜíUæFO,ZŸXxPÿ`HÞ +endstream endobj 1941 0 obj <> endobj 1942 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1943 0 obj <>stream +hÞÌV]sÚF}ׯ¸æIj`ÙÕÇJ¤“Œe—6‘$7–NG¨Rfµû¡?¨ÿ²w%aB:vBgê/-g¯Ï=çî½ –Fÿ&f°¬ î€Op)ŒÌ¸LŒþ5If0(~ãƒ>à;”P’A‘…P±dnô¥Ôdgüf¾¯Á#Œú£/`"-À,—2Ýlòb ãB ™¥saýžüˆ©œ&•Mσ#Œ{\5”\“ãÂæî©HBBZ,à­´zÌ'ÜÌ‘Âûtó~-ªš7L nŸ£=N<Ävƒ7 ÔmŒÖÞëM´Ol÷“M¬ŽpêMtÿX›A]‘à¦ì ¡Å2¯ëxØ7©å¸Ä3À¦Ìêy¸ô­žÍfÛt,†yƒ{Ú‡ëëBMdÙ`‹í\ʼnoþlÕ;¢Áe•[=Ôk–…®sí–êÂÙ6÷uå´– Õ¢ÏJkùÛÒÿª…øÐÂãóèå—žO ûoXÿÇaõ8œºü´=€ÇÎensgÉ9\¯›Å4_®T…£P Ç!Ìü`Ù>qL± ûþo[Ø·ëæ8ćùöš¡oúY/0˜ûHâæ›âX Úš€ÑáÈâæOÄÉ0¹‹gf¥Rµ­fÖ÷‡>ô´ù«:\ïbø¶‚W°ÙîM:—eŒÓ:IV8µE¬äÌì\Wvº@»ˆƒOh:×1®œ.º6í.Øû<ÉwOQÓF=[„K§Z t¢ZTó£¥Ñ³H‹E­“nHD¥:ÏcÆR;„⡶¥î÷aˆáQFÑ° j•W°Ë±a–áBÈT R–2üõˆ«íTy10†t-ñZ}€•.ÉÆçä¡b¦ +£ÊØ­„ÿæsˆw}Q¤hs!>¹K&ã¨åŽÇ¿†údÙYjzÈu{‡xr"™vÜ;w¶ÚÙíiggJ‰Ýë¼3ó›[äÃÛqþ’›¯KŒ®°‘³r«ŽÊ,…Úâ®,€~®žêw!ó/+ùS¿³ý#À0¤# +endstream endobj 1944 0 obj <> endobj 1945 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 1946 0 obj <>stream +hÞÌSË®Ó@ ÝÏWx9£«¸ãyg —^éêÁ±ˆÚi¨ÔJÊë“øK<™¶$$ ¡HÇžÛƒX<}E0L"Xˆ:K¬†1‹x܉ÅA·d@óÃ¥ˆm‚h5jÝ^hFAíØ×­DƒZk ÝgñV¾XÞÇ·‹Û›¸%Lò8Œý~¿= ðìpÊã¦_eõ®{ΩlMeÐz !Ý“ + +8&üÀ~Èý:ÐÖðfT E rË°üÒï?ìò4ã.;á]ËÅôÐضm]ÒÚÕ2ƒÁ.q®û)Îòuìäò¯â´³$-pÐ¥‹…-ù3[ë+Û—½²½ü +F“j<›Q5†4Ò*âw¨þP +q±(u?«oýqu0Ê×jŽäꧭj˜¯<ŠÐs¹º(gLˆEºÂ%¹”f.ßTùµ‰PAázþòù»ó¯ýÔÿøÚÜ0ùõ¹×Ñ%WðWr>Úíªñ°ÞŸ&Þ…)óX‹$?)ÑʼÆËœG8šy„oñ<Ãß{nÍ® +endstream endobj 1947 0 obj <> endobj 1948 0 obj <> endobj 1949 0 obj <>stream +hÞ¬XiT׶*Dl¤Ë¤[«Àƒ8@p`RAA‰ ¢qDEE!AcAF@‰ FcŒpP1ú"΢­Ѷ#†¤'Þ>ínsßiÈMî}ëf½?ou¯ª®ê}v}gŸoïoŸb6í Ã8Ž Ž;Ò=$~az|ZB\Œõf¢eHÒÕÞ }qÉ›ì7CØ®‹ª:ÂÇ°ÓñPW§2µ¢Ã–LJÎJI˜;/Íù½87gOïA}­Ç!­GëÑÇÃyÄì¤ØxçȬԴøÄTçÐEqI)ÉI)1iñ³û;;X¸Ð¹ÕCªsJ|j|J:½û'ç„Tçç´”˜Ùñ‰1) œ“æ8‡%,JJËJŽw1Ú9fÑìI)Î tlê’ØÔ„Ù 1) ñ©W(úQ( +Ûv +ûN +I¡èþ®b¸V‘ P$) +E®B±K¡Ø«PDÑh(l¼¢¿bŠbƒâ’â)ãÀôb¼™H¦˜9ÓîvÅí.+5ÊÕÊ£6þ6ßÚ\±±°Ý؉l%gÇâ¹õÜï|o~(ŸÌÍWÚr¶ƒmWÚþÐ~`û»wíÛ%ÙÙ=èеØ)Vv8dïo_fÿ¤cpÇëUUùª +U“C7/‡|‡KÔvªîôÆ1Á±Äñ'µR=J£Ö«-B¨0]øF8Ý9ªóc‹§Š~ñgÕ5º›:¡ª†Ä‰ö +l ä„2èŽÿy¥²$XÍ\ZÔU¯¢ÏBY!ôÏ*.aÍøÉŸKÓøúm;ªk5O{ð*|ƒáéo†g07š”ð©y±ˆ +ìŽÝ1Hƒão ã+ô~äüÀs¨ÀG+ÎüöJƒ€&åo'‚úWCwÒÀøÑàØ<¤î'ô¼€*ôÑàŠh÷ÁHÇ9—¥ÃB›tJØGDL „D\¨ƒ…ô6Òƒ¾'ö>ñ¼…yôJùÈ©Š›¶|JLŽ4/-x°ºþ²3Ç W Gஈ¹žk—×:"[èl{¸¼²ÞÊO7¯Î`>‚«J8e^"†r¸æíjö:§Ê¬#ÕuLyœlR’¡ð«ˆAÓ]\]§·@hyþü„ IMNà:à œ1 +ºÄ0f„à*©ÊÒIN hh¾¢Ds¤8ŠKB~Úrä>· oKN¯Êk uê]Ï|°¿I¨…wÈd±²`t‚wµ/¿Š0qÑðYrÿ‰¬ðK¿¨Ð¡«ÐÕ–,i°¨¹u»Ë~ø­Jwè×çª@­.nu¨’„ÚôKÃ,™N¾ÒAzzãÃ#]ÓÒ$4 O! jÅ¢âµEZáÅÅWËÑÎ7,Ê»|üóµÕ²·Á·Ì÷^¬mÖþcËÎjaôPß4õÔèír>/üZQxöècÍûÞî8.…ž’«\·ñ8j_=*Æ+4y´,<ÍþxíÚl™ÎôdÿC£’”B€¨ïI¦òx×21À¼'‘Å|¼é4ìz¨©7C¼iÀ‚É3Î, +n’¥£>‡=ºïÄÎ3ÚG7£\½&zø‡ÿ3Š=KÀnÎ-$€¡÷ ¶ÿ ¹°Yéi‰­¸TAuLE#œiT’â­ØvèaQº¢)¸Ö6Žj^ +&²œlï‡?CôŸö¡>¼˜& /G$Έ¤IÈ ¸=AšyþΧµà{`«2îõ=$ ¦½[Üû\#¼¤<ŒºÓÛ K‹ª¤篞¸úŒZ¬Ñ‹c#_?¾ãjÓËoÆÍ;ujBëàrúH£·v½^ÃVøD¼Zóí¹]r~.‹c–DûºkÓȘc·VÉ^Üèch>°ªîÜn ÌC +ï5¾7Yì,£sã@p’ŠêĈ!% m:wåþóÃÁ~(¿Ÿ>]nÍA¸Ð¢~ôŠÖ¤?óP˜EŠlþLÉÖìn3êòŸ\ðxèØ–.¼Êxˆ:æ )P’#D#Z +I‡¢MÛU*%a¼)6wV’Å/ÞÂx¶…Ã"s,‹í8Üñ6–mæîB<û­An²ù\ ÞdU©y °¾7¨ï˜àž)ÌD#`v!ˆ(LJxMHê/ãH®å}.qô¯‡&êÂÁ{ß´m²@êÊK®Ô<Õ€ or&‹ B$5«û9ÃÕ/:ÚUÆ8Nµ7Ó@ê ̱f¥y0Y#‚ýRwàqœãQýp1î.0ä$ÂÎCr?ýæ#“¦ÅQãÁ †Â¯§›¯ÓP½[Ví¥Å¤²©7çfe½â`y ̆A‡ I4šÌ±}¬Ü*K7Çf0w„9VìÓ +#3ÌÝ3˜’FH5)Kàc1ˆ)Gð3A»ãà/‘²>–Ý|pÊDÏؽé4o¥”ÕžúëE`©¼­C j/’ápŽ²¨áð9>gá¹õ1´ÊÌö i{4‰±6tÏ%Y<£k"«›”æ|'s,J<β¼bs9Œ!¯X”ßÆ6®,·ñš&Ÿƒ–gìoôDš)YCr=Ò5ž®=H„Ö(FßDÔTµ*A©$µ,òVµùa,µ,0æØ~ÖUjeÞÁf²š’Oqh?t …Ç£8Pf m¢'ðh¢7‡JÍN0ÀR± Ë|0à€û˜ +ePvRa€Ôšgç ¿òž4SjX“e +÷Ó¥E}" ”q"çméx\¶lý ø®Œú?c“n~ß nE#'Þðžx÷6;qîçqÚÿh@’t´ìq‹2¡cE7=«¯ýØFͿ㔄ã@Õ_úêÛ“5o7˜¥ÑÚ +Ç`uƒÚh‚˜Þo¦é;ªEøÄšÞ¶…£"’ )ž)C‡­\bɪ-k­§wršc¿Š-±^ŸØ}î`‹ú¢Ýa´“ð¡ufXŪÿ •.ó‚d\B³*³„©¼î ÁX®µ\§a`¥ Em•]ëü¬A¥ÓK¶~;w¥œwjPwãw§¯–Lš)áïF¸Í×TÖܹ»}êH ð;½]öDúΛ;u¦ôMvâ…~Ú~3“2å\ò;Þ¼ê_ü©’ý7Ï©ÔL¢fµw¼i@ ‚Ž·>Ê°kº‡„wiì–êIO=CÉ}¡Qy¶ˆ¨Õ£ M>?=¸€´à‚~è€.¨•jvÑP ê]è¼hǨ^ N5tžQ°¦-­ëéîûS±-5Ûòò¯„•†X"D#lÉçæì81¿æe|߸ˆÄtëôLÖéý«çm|¤œûŒ.àÿɹ|Übä†ñ/¾þ+‹­¯ hð"êü›ÔµF¡œn2.ˆú³WîKû¹ü«Ö.׆N Ÿg…ró‘5„|[eé¥W÷pôCÈ|dl•×Hb'îZŽïÙw2ò#OÍÑeI/R¨°ÞÍܳ4FóÁ„”0ìôɵë¥Á\XÁº¡‰Ó‚ÝÏWAq+þ2»©¢zmgG—$yTsµvÓnPFÍ_+Ñ,^¡'Ž:†îfáKk +W/t +¼…Où°mSmúz]ÁwÒÍ…|Ö¼¼Ã2ü·Õ×Ø õ #äR:™d©)õÂÃtõ满rÂÌ= š½,ö<:þ2§öÁñïªË%ºó2¬Ì3‘aÌF’©„µ&«Øv%ÃØ^DZJYÚ-HJYwÎÚüÙÀõt°Ë ;±JxCܨֶXÜØFúR/ÎÅ2€jk/2€uã\[÷¦¿Ý9p§žÛ’ Ž¦ÃÌf’ª„a»Áð…UÙ±#†aGkUË‘ø½Ú΂’£ì›N8…«œ_7%Ýœ˜¡ÞLRè®oÅ+S¼½9˜dÙO=ŬZ6]›šµ~ÝrYHöã…òœâ/sŠ´Àn*„y òu¸Õ`ÛÇê/OG:꘽dŒ’Ì"“ÅÛ·@8Æã ‹#;ŠŒÑáëËž?e·‚ÊnµUz pñï¤WAŸ–¿QeX¡ûCÖášh© +$Uœõm¯Ëv½Š>Sm}e%”íú»WfÂjðqù›·ip©Õÿ›lå›lêÿ÷ìÀ7ÙœêDæe8x´çM—™¥z| Æݤ_I¸Lb!B$"=Ó–e6á@LÄ$ g˜-c5¡Möhkm [‘ТGÓ¾H‹ À¨ Œ‘ 3QÔst[ù{‡£Ý\{ecåþ{CtEO }-!×8ȵícþDå§C¦äDÊVX®ÁÃk÷­¨žêIØÿ+"26HŒülúì0­Gä½Ç¿œ¾ÕtùÄܨBù:÷b©ÿîZìêí†ïb—G½ ë“»—žm“U™Û̱Ûpþè³…ƒ›¡Óº·í‹x©ldV—Ø·×Û;ªÎæÑâÿ0A‰S +endstream endobj 1950 0 obj <> endobj 1951 0 obj <> endobj 1952 0 obj <> endobj 1953 0 obj <>stream +hÞ|W XÕûže™D\h§EÛÕï—/(`(DESœTÀ¯ xA“RR@ñ–Wð&‰¢šSKhP)¨€vÑH µ´oêÛççÿ XÙÿù=¿g÷ÙÙ™sÎwÎ÷ž÷{Ï;ÊÚŠÒh4Ý'Θ2c¨oìÚ¸%‘qÎAË—¬Z©6y*&ÒÝz“•ÒÓÎ13ÿ°ùãšÏÕ<ßÆçR}ÌyÞñ›Û‹¢2þÓ æÚÃ;¯œë©ÕSVÍŒ…¾±+7Ä-‰^¼¦÷àECz»ºuw"¿îÃ;~]{{¿Ù{Ö†Õk"W¬î³(6nel\øšÈ·]z{/_Þ»cèêÞq‘«#ãÖ‘‡ÿ‰”†|¨n¥·¦^£¨¾ õ:E9[S#­¨1ZjEù¼F%IRV”–êEùR™T»f&Qó§ÕT«óZA»P[¨}`½Ü:ÓºŒÖÒþô>º…qg,¬7û.{Íf˜MœÍ›']ÞìRf;ÐvƒmE×á]“»žéÚn7Ýn½Ý½nú­ëv[ç¡Ûl?Ä>ƾÄþ‘ƒ§Ã~‡:‡ç:ZC¢`ŒvÎà‰ôæ)$Òºm’r3^ÊZ¸ó‡•a ƒ¡®‡ÃÁ­ž¶ìÇI¢2TÂI¬Ú+GÖß—á¤9TâßpäZ•~ÐWtÆÓ ÷>€-ôÙÓ…Ÿ^3>݈]üÏYÄO”Ùï~ʹPv/zXðš°è¥<–àZ— ÃA ÖÈzÅÁ¼Ö̵­ì7œ>gÎ-5qo™Ã‚&Îœë$ˆ'Y®µ¹6Ü}Üä QA³rNÌâE:öú¥øoLÏ~®ëÆy_ù¸Çå'O—~mlSáìÿæŠeóx²Ô’ÂIšFâe­’³ .Šï83-ôL(pB^„3’˃VÖÂJX«pt†…cÔ…}*ƒ·¤ ÇÌZÐ)¿°‚=™@K/š~¾0n°_ˆSðÌC¹³…áô²z)¡Öt¥üà…áÌÙs…ØQwš½bÓú<„A±ÄêJ`·i’þ‰9Ì GÈ÷+צlT m#¾2dDàë§U­åÓYî×)æøÌ6¢îÉ̇ŸT€Î<§vÊ!>ƒåÚªŽ]¬ºfÄ ìn˜¸}jù ã­ªOnÞ¬šï;qZˆßû<÷«h}»:Ôc¼ï<_?ŸÒÛMÕe·‚ô༤τHŒTîcDÄÇ‚¿Ž1fìAsOŠ%Íb0ZÙKcœœc‰¢CDˆ”ú1PIúâ» 0pžÎbÔˆ±ˆ’ºËPlÞ`æžBwÉ0R„oÐU_ÿæ^‡²båóœ’K_o½Y½y,`dG »›ºlFÐ?‡3˜c ±Ð‡åžÀÐ4Ô …¶ÛÇ +º ²’*%ÄŸ‰×—T(ÂY®’;­$*Uîëuéñ ©)™iü™9QMh‹ƒG`º=Ä~0£®ñÌ…+BL1=oúò7LØÏ º| ËÖßn‡¢õár6ÍÚ|6íÃSÆ‚¬ÜÌB•0JÙtThÁA2xˆpŽIÕІÀ,Ô6a?›ÔF1_B×p ÄU8 ~š€¦—!é#ƒ§ô]YX÷'gQ¶*zÃe&üiK‚øƒ%j¤Èp*)𓂯Ñx…¤îé-Á\Ñ=4Z ôŸhš¿¢i?s„¾öïÞ¤ë²}ÿŠÏÜÀC‚sÐT(ŽrøYî>ÔÃ6ƒNØŸ’0Ó„nÓ¡Ðàÿ{Ý#»ºÊ È\{®n>ytïß›Ðá%Èî~KMnþW¼Q&±yRÖ>T®’I'[¢p²¨8Q¢`Ò?=†È —Í!½ð´øÄ5@T63û`=yE/’þó¢{“ ?’b>¨ì54HèÁ #¶ #´Ðè!6X¢¼DØ(õW¢v2àd±¡sÈE±¡wZ¢ú« ^Œ.ñê|5Žþ'en}G : 7‰`Åp—,‹ÓY2ß4Žï2ÜzK”›ïKh¥D"_‚2Ë º +)ïKš Jÿ +­b†B8‡èÃq :£ó}àq‚3o™ïÜp€¾Ð÷ +ÁŒC.˜\úbß`òSyã%ØF°p—¡°R îdQ–¨Ñ"‘ |ÆÏBÈ>è]py9¼‚Þžèåú’·,Çéouìk…7$MAi•«dX‰„AâCfzç(âIû’‹Å“ÜM%!~Q›Ï3·I„z¬H3!¶i®Qúc°E¢ ˆäº’k¸H¢V10chîGœ‰Ûé™ä¹Ô—7Xn¸Œî«ÞÏdp&l§¹ÂÓú E"kÈã4äaÝDîÿª¸ã Êò§ j•ZµDE±žA'ÌF'ȦëÕqÕ LA™”Ì_ˆÁ8¦‚L_gtøJ™f›Ò¦ÅW¬•¶2K›z¸FK0EVÒV•2— ,ë†cÉ¿¡‡ßÔõ«ƒùœùôÑKUG¾4}]µÖWXÂf…»îŽ0y!;¯¯À•º5Îni©ûä“K<—à}$Wvn»+ ŽxãÍ ¦!…—óŽ|.Ç«7§\:'{ ?§RÔ]wK¢ôÀÈð¬‚K8¤TÚ²iK>)ðž,WÚœÁ¿yǶA6`Ò†úqQs"„t8ÅàÐ$ZÙnq6¸xyâÞü¨½ù֓ߪ'ôáU»ð»œ¯¿VíÅ\ƒ²D™fˆMÝ’œbJMÛž±U8>oÑÞ·Lh‡¶cpöÛ‘À54ž•¿âÎÑ3Ü&Ë l­Áêví²1ÙÂå4wió¹ôÜ´c6'2Nì8Îÿ“Ë{j.î$—KðLÅOTê ¸.ý,"°hœ õC^'‚À•¢ÍcÔ€ííºËÏó —à=%7¥‘Ÿ„"M:ÌÀ? Ϫë{Òì;xûØ!ƒ¼î´väã&AYsíŠB™µÊɆe“|Wšú¹”ÿ¾UPF1Ûs¶ï;b¼>…¨‘Ú£®3/ÝH°ÿ¡ñTáMÞ2B ?î¯+djûv®K‡ýh–ÀINŒ×CœLŒGž¢3@ )™¹±«àÑù²”-E<×p\¦¹Ö¬ É»W’ÃeEÈÁ)(l&¥éÎêÐUV†›R´¬Ð$ µ–D»+aÏé ×t}ù¤"Ú F w|è +¶·*Ε ã˜þSן4o÷Q~S(pµõ³ †|ÿ­`±‡†êkj­öréç7ÌÅ÷F{‡0«€oQ“D0‰®l+mVInÍ\®¸ZRiúöÈ|W»©¥5ö°_­¾…¶“§,ŸÍÃa–g‡ø ›~ƒì:FpP¼ÈÉ8”¤ç/*.NVt,h­ÁnÚudª¬Ñeí/÷ã6dë(ì¾sWÿžH¿Wva³l×üöAúÒøŽÉžS»^¬^ýdb–¢„qŠrž„Ã¥¢L´ +Z1ª‹ÌÕ’ÈSKÙ«ˆ)œDÏ!LÍ`¼Ms +Œ}_•‡çV]_p±3Ÿ“„ˆ–¼¿“é`Z–ø"m²_Õ2ŒV¿¯öäš”b 6®ôÑÔf/ _½’/~çí‚SDԪ뮩„ˆI-6ûˆ*ùú„ÓìGy…§òMŸ]î"à¢p”={ülÑ)SùA1XÀ" ¥iìß“VÝ,®!OÅí.6wî˜zŠg³ÿcÓ&LY<ï-BŶ³°5UðrÌŸ( BÛª—KÙŽ|l€^¼eŒ#t­¯|ö¬~:vEÍ„)}úLø4<ÙGégb)Õ5ýÜ!>m»U¾Z6’‰?–Ðfe0!çëÂoÿ¥=$ý¿åçÍžº­‰H5)ïâŠÿ"@/MÐ) mD¼ \Ó„kÂË‚ dà,tVàƨ/!w%Ö¢Fçš^žkS5áE/%Î6X†£e\MMís ¢b'á\ˆP‘e¡[ùñ"Sþ‰Ä5YBÙNÚœq|ÉÓÁžWÁTZ³N,¥Æë,^f†Ò¢83—ÇíU¶€Ù°%ok~ž1'3'ëÏå/Ì¢ãÒSRÈA¿)++Y8°`Õ.Ñä‹ÖKG¢^O®|_àNÝK¯|oºqªÓú ÏQ ›ùyÄt,ÉŽÍXk\›¾nË:ž;UšJŸÌÈÞ·Û”µ#==SXe.J®4}ö§Û@‹t¶¦Àå;eÚsÓøImÞçµ÷ÖøìèÀ’zp•É_®ÊWƒ¦‰â Ìbû4F_[ÿaþ|J)½°_hòB“gdÞ¯,`ÉÛ)ØÍ’þ)y‰$V3W…¬ÓN¯‹¿\¯,ºx’çÖtˆ²{ŠwI ngňù3Lã¢/|!@1«KþÚ%ýžËÑÐi9àP²áCTÔ_éAש.ã>ƒ£±Nep´Ó÷ÔG·]² ëëÎHšTòÞóøhap²¡†¹q?¢k°&ˆÉô!nw(Þ£Ó™‘PN3#±œü +÷è»jc1ÓI},ÀéJd$”\÷ « Ägø¡/í+Âi +ý ?ôÅþt zïÍ øª>c £‰e+â~íÑìéÏÕ{b¨ ƒ•’&ü NµFù¤@ªTïSÍàD¬ÄÑPIKú‘¬ ÿôFî"T'Û¹2 XI IÚö"C”2Lâ(,d¡~¡O[zb©rY݆ÃÊÕÃèr<doc`Ëî–lKÊ6–ÏõÝÐý¹]ÙV½ú *G, +endstream endobj 1954 0 obj <> endobj 1955 0 obj <> endobj 1956 0 obj <>stream +hÞŒY \MÙ÷¿·Û9'É-÷8á^sŽ×xæ‘·ÐèáUˆ +åxTTÈ«DŒ†BCEÃx”"ƒD$têÌ\Ê”g¨yÌxŒ¡ñš1ë˜u?ÿ}Šóÿý?ÿÿÿSç±÷Ù{íµÖ^ßµ¿«´k+V«µ÷6n”—OW‹£f‡F©]í“Vin­´²s\€ÉomÞž¡>Ñh’° 8ÛƒgÓÜVÆ—•V;n’Ç‚…Ë¢f‡ÏŠnÝiFçÖÎ t"÷=ëïέÝf. mí·lQtè¼E­GÍŸ± jႨàèЙÝ[»ÍÛº~ê¢ÖQ¡‹B£–Î:h´­NC·Ô´m¥Êkfi51Í4¢®ÆJ£Óô×LÓÔighµ¢­Xͱʴ*±ºgõJç ë¢[¤Û¡{híiý…uÕ‹ + *èît½•Î§+é7ÌæˆÑf²Í·6…7ÊlTbkg;Ù6Ñöjãfg4>lçgw¤ÉÂ&'›¼Ñ;ëãõì;ØO´¶O¶Ï¶—ío:x:lêÐtYÓK†æ†U† +V˺±{Ù‹Í4û²Y×…KâªcÍÍ™æîÍ“›×µèÔ·EV‹‚–ú–N-'¶ŒÓëcA§,Œ1@4ër™-‡§J9ןÞmq $š½ß¸Ù‡—>|8ýHNDzDDÄ’Y¼ja…&]®¹¬å<·WPEôNXA•9þý®_ ZH†wš3qéÝ»Úúûmr¿û{­P Üvˆ¢Àš¬z­èÍЂbË^IèíI‰ô +Œ¤ZôŽV"Zz’;ˆÏIwÑY•òGý;{½¿Òû£~DkZ›¾yOÔ›¶¶àqA1¹tÊFhÂÝyÎuÈH¿Aƒ®øÕT_9w›Ç5ŽrÁ)Y>3= `*¹¦œ’ùßíÿo ÂŒâ,½qÌ¡ô±r¸Ã%X|ÊpÁ¼ÅÌ.Uö@‡ ½ÜwypLˆ ‹ ¸PóOÎ-:i<“·çØÉœÏeór¨Ó§îõ7y>bÚþÇ' ìi÷Hÿ1ƒ/úÔ^>}èôQž]š?–‚Ö‘Q´÷ØÎÂ'[VÓìiœˆ­¸ÈÅ3ø›Æ…Kg.I§ +özå|ŒfCœ {æFö©„þ]ݧ·VäÃÞRb|kÅî1»¢Þˆúìz¡_Dû€.ÀÑŽEàðèø†¥:C wáçè +z#èÇC×Ñ?óô¨+Bt4¢c :ø ™¡ü£}§m§)ÐÀA×.¨Ïø BÇüÃ]@]ó>ÿ;NHgjŠÎØÑL‚(VÖB–¬ƒ,e‡>81&â8ÆÁ$'£Gk5G©†mýdžÁr³öµÂë^C.7AáÍ ‰v-,ƒ¶:…)àrÃ3gÍ +_ztQNÎÑÌ\bW#bWSx­SF½mÄá¥yæ.Ko=É6JJ®¤}c†l³î ”pØ4“¬î +®™0‰Ìh þ8G¢?6åÍŽ·Ãp`ÝŽÃ{:¯D/l†ÍV‚×#^¿^R®“E¾%Ý&îžMc óî`èWEYvàpQé*ápF•&ËpÀ(±/¯9²O”vÐVì†Ù4û¶Ãjêhö‘ï.ï[ƒFyΚ4ƒ&3?þœ–_ô(¼Çøè ð9<æá5a§ѲAq0/6³O€RvpÙ¹æôBûò†9Èg˜o€“ `Ø'w+‚áÓÇÇ/mßT!F¤\9sËôæ—r°®™|Ñs¯À¾<{ »ð’ñIÿân#'΋˜¬ôTRXI[#CŒ¬SÖ×]ñLc²Å…ò…CNÈ‹#uú„±0‹–J²°´ªØw2¸IZÐËaÖ ‹™±Ô¡ÒÎS¦_®ŒÜÉÓßi¼ï®ô Âò`*¢JŠ­0•œÝ™Ÿ'äM3és5æ­\:‡ 8!1ªØ\¦±:32ë”âæ!4úa#l‚»Æïlj0îáÝhüÂãQ»AS‚g.éä¢4ÐÊ…6eOn'ÞÅseé¥WMµ§Ý<‡Š^.=ýžÖ +úô%Ê9I{G‚IwGÕ×$ý% Š–sT1 ¾ŠL}Ϩ¹f‹ë$Ã+söûš­S–+Á\]¯‹;÷òî2êÔ˜²Å|"þöZ6É}ÁÛ+ßgÏ^ƒÞ<©ÂkŸÄ°ue§Ê.IÐ7ç†m}öšñFÙ™ë×˦z ãïùϾ­o^ tùÌc²‡§{áÍÚ«E7©0Muöu d™uÏb¹û4øA#h»J"Uðô0w¼áüÛÅ 'Ïd Iô:ߘn¢×¸À/°· îÁ¿¹±1ãD/Óé•×« +.Õ<øÞÉEPÁNnþ'‚ð[ëÿDìø0é¿4 ¦þ <©¸kó”(²qÊ\Î2#rí=ca`Yt5/C+Y{[­»­ØqÊh™±ŒFŸ†7½â£½Læ_V\9…Á!ríªL ¹(°äT‚ã’!B1TyŒaF`1FrA›Õóä÷"„I~4†+Û(ŒáS'YÂ(B¥v4”’±ø 4§RhUâ DÉÍe8a^ff‡æ×[„[4è¯^¹ußï”ë.l©r.-ïôã‰W±5'Ä´ìD`“ŒÑã|¦y +Ø“Æ4kXmö÷CÐujQƒ¶úe²²VŠÉ‰1ä+ÂQ¶”ÍVV(e{iIbLìÚ„ä¤u|Τ°Þ&´ÅN½0û=Ãv0®²&'¿D˜‚ +ŸvII?±²ebà +èµ0’²ÄŠ,a½É1þ§’£¦Ð Ø’Âbú 7 D7ä£ +ÿ–¦ý M÷½#ì“°å?G“¡[ÉöýC>Mü.ä6¸îP±â(eC¬çDpÂæLL€¬¯ û…@ÁÈ?*_ì#Зú|Úà™Ë{†­œJºýÓåãMä¸ûÛå£öñ½òô¬‹ )’˜Ô×ÊM2¿Vâ\E–\‰þÙ¸ á] «–0X¬F³Alx§?lÄY÷ŒœÚ"Œ°„áQq"Ç„Fˆ£ÆÅbIûNÓAeTÚ.q²€wýØiøƒ¢|;´ýy¿ôÔdz Χæ–ßšwÙ¾úžä ®W²~!ƒ 0E§Ä+Û¸óN!;Œ[0…‚”Æ4lÄH½¡7SUñhÞY´K›Ü2Û…"˜êB‡<œuK¼4ôPËÒ:Ë ‘“Ž¨ƒÙâ+Kا¢²ŠþÖE¾@‘ÂSÄöƒ•µ2<$GÈN²41ß…FG¼‡ŽpB±ÚFÜ´\j¯„m¢ÁÉbC¥‘‡bCm²„µW?¸Òú秪r ?ËP#¦¥ +ª”p¥V„Yf%2d½íïÓìRKX?¾’ÐJ 'È< E–}qø2IùJÒæ+í‹uŠŽpЭ't@t鉰v{ŒÀ\CèÆ[¦:[Bc[h[B‚€Ev“`=ñÅ@ŽÊ4(e ë+’à +»ÀgÀ3àÿ5´>T0š¢›€D>qž.½3·gÀçnhБÖ#/%œ9,-Y¢äI†zíØe··26jE¤iÑ¢ÍÛ +ìüm‘ ¶†›–¾.a•°‘Ù¶yÇŽm;m¾JMýj³ z×küOkvZ¶)ÇÆÐxιó#£3f¶ØwòàÎBSö¾ø¸}›¿_ÜaÓ‘ƒ_g,”fÜÿiï ÂNõCê©.qýÕˆé3þ _N;6°›Ù€Ô‡^œ3š÷,´Ibn§^7ÿbÌZ ~Êc™xOÍ*.ô›MCEÆÀV¶Pq¼/ÇÇdÅ~:m†²wšîqšwïjâ4f6#Žwzq›#R#æ£ÖF®â¥5»/.;yóŽm¦M»ã×mçÇŸ0½ê,X‡v_wÛ,°™MýÒ﫪Oß.¸üÅÜÝü7‘)³’æ%·`7kVWPlj\bƶ“[slدâfügÄE­[µ<Δ°l[ò!-4hk Ûút$:ƒ¾D¡2áöÚ^ÆÈøÞ8€'*|:"ïÑJá}˜7¨­é§Q2Œªk6@É' ±¬¤?Ç…kv€îê"|'¡A‰;½ý +7RïñN¸a9ÁÊ4XLŠ‰Ù®dfWÃÃÉW*N+ñƒ­î SIèkЊ‡[•jÿ+F¿âˆ/ÖÂ|œ¯üŽóa>[NØå1–%œ/¾¤q´%žJ qŒO½R».Ð0Å’IÝ¡Õ¹-\“´ëÀbÁG§œ'Óò$ôŸÑcfi•A”yX‘Öh"âWõóqú&‘PEƒùLlE>W½Ç½!¢HÒ7 "y.d«O©e4 ©Š}ˆ¾¸ò%ýR[úAôê­Úö¥Ñ6Pl5Áã|ê E5[ñ8yRzÕ’ö‡Ì’ ¢,¢N©PS‘(VÑè„©è©T•:ï* ^(“ÔðÁã0˜Ñ SW>ˆx"A¤{¢N/‘S0Ág–T€2BDì…U ¼PfQgHA¢‘Þê ö’ýëáþ­ž Ýþ5Üè†ÃVÑèÈ 9¸ñ/ïÓ;ðÆ[oê¯yê ‘­\çþ¥G½no磛H¤6-Ò®WêtØÔZ©+²ÔÑ ]´Z÷D­~¯§UnjÝS_szIÀH†ï‹¡Tfc•Ùp…ˈÿ ]Á´v݆¤5BæäÛ¦˜ÐmûcGül{[]sT¾ DåRãN%¤ˆõ~Rì—ÀêfEDÿT¡`#Åž^•›˜¾.Ãf_Ò¾™ü߶|©Ú2ØrºÞ¨þ•J—$2߇xlBCç.$/³…hóÉnÞ¬ì9@Ѳÿ/cê#-E|o6Ù¯«2ôU›µbk•@ʃ£O˜<+|!âó™‡BL!a‘ó– +lmÉux×]„@ÉಙÃûÌ2}·wnw÷üá {™£™G4Ý)ŽðPÒæ¯Å@§n[½_õÛ}¼Û°c*™Jeþ—Mê5kòŠåL°µeÅðo¶r ŒƒŽh{DÕÇP¶#?¶àÞÒßW•¾yS5£v¨W›6C/–'û(ýBJU§_ê“OÝ5^-ËÉÂ'%ì~I´ÿñÊà›r1ÿ¯ô31„'A]W…$IÕ*_à¼ÿ!}´@CJ¨#)Á•ck‡þ3'|œ„$ôÃnªýhµú¿/1U:[ûqBàÙ:5'¼ðR1—ao[^^Œv$r9Q±“0BTÏ2Ðälæ1SÖ¾Ñ)BÑ&Êœ’9Í4hä´!ƒ¶4ħRô¥“´6ÆððD„ +E™Ùýì6e5˜¹Õû×dí7¦%§¥ìâÙ¬é)TTbBá1+SRâ…o¦EnMh=§7ê¡K|éW{ðQbé—c£–ú ês¨z?™pªÙ© ’.0.N\²z Ï,\KHJýz‹)ecbb²i>_jºöÙu C*ud²Àf9¥ôÙzÝx¦bÿ¹ŠGÑîëSàSIo8Ë„g¥„cËÑ4L¼†)L›šðŸ*ª¾ÍúO(¤¦· ŒŸnºÿµ³á ¿aÈÓ°ïJ†ßeÈ Œ?]uÙ=\GüÔáŠøë•Òc§ðìÒQõIY­Äûä n`Äÿ©ãLƒÃóà£? Ï%ÃÖzFTÝÀˆ`W—™ž”Vd$?úç"ÕðoõäôL»ÌÁׄR±éÿ7ãý×vPË)mÈç^4›ÞÀºp¬ ͆ÆG#¯Açßlø³l©ÙÐÐ/Û­œßÝ¿—oR×Ó°z˽TKÂz†O÷XÖü]#ÙVn¬Ô5û/Aî± +endstream endobj 1957 0 obj <> endobj 1958 0 obj <> endobj 1959 0 obj <>stream +hÞtUXTUaÞC¥!æõÐ|o0‘\Tþ‰ˆŠF*R(_F3€ ñÏ(ÿÐJ""E"`‚–®­RTúIFåš%™$ËÒè0-ÊF±&ì¹ãrï »}ûíî÷Þwï}çžwÎùýι粌£òì£+£ãbžŒõ}"-Ó˜–Ÿž¢ó_£ÏLß\fß #–LuÜîì@<œÝ0 în¹¬”šØ{Rãé•xob]áÌ{dýv~×)5ãÀ²µÇ–æäÒ_Ø”¯}<ÅG;74d¾Ÿ} žCích 6*5GŸ¦/ÎËOËÊÓÆd§ärs ºü´Ô9ZmTf¦vÂBžÖ–—f0Ré¿CÕ¦çiuÚ|ƒ.5-KgxQ›³Q»*=;'¿87MµB«ËN È1hÓé¿yú¼ôÔt!=-oÎCeXú0N ãÌ2.,£f ÃÌT0³ÆŸa˜ † f™Å ³„a–qÌjG&^Á¬c˜$†™Mid3‡yš10;˜Ìçìt6‚­`¿dvpuðrXäípÎ)Š=Š«Š›Ž›O+§*ÊfΛ{ž+åê¹Q~.ÿ2ßíääTètÌéÖ$ßI/«T¶Õ$ÞðS·ßYwNˆšÚ ™v.}÷šÄÒ³|ÿÁÃ{ÝzŒW-l2Bf 5] +¨EÌZY˜Ù™TŒtX©ÐûÌßÇØ;Š·vîÙ’õº2ißXu½<&lTLlBüõñ˜çNUi´î*d_‚œµˆ1îߥ¼Ì©´MFRÖ î…,¼5¤´Æ‹Ë¹äŸ-An‡S4„Øʆx•¶ÂDNõ©üfæ!¡¦‘D±­j/< j~yY|À3Ù‹Ÿ—ç<£nù¯‰Ø‰³œHɦæª6}þc{WË´Ñ/Lí v‡©>}¨’„ÞH ÏÇb™† +çÇÔw„¦ßž'ûD~¡ÈLúÍìÇ# +ë²[ç­¾Àãj ¦¡ýq3ƒyžüäÖÂÛ-²?‡áÈf­Òàò5àðÔèàve4ÕGeÕ +¤ÍÄöíˆ¢ß Z8(é„T˜)Èà \#ãÇÜpˆ1L3b Æ„>Žjã8Uu…JÍkfÍà +b3‹¶h(%ÓͶéK™mãzr”S%ÒüõýK VBŸ£f¥:3ͶWÇõÃœªÉhÕ²ƒt;ΪgOÈ´f«s!ÛC…Q÷…Dg¶1”€ +H,HlÏQ)HHb9‡Hz•Èë‡Ho%GX[¯X«ÞŸSŸ±FÈ.Jš(b„?º` úƒ e$bˆN8D…Òˆ„B6aS(æa|yÐMßCHªjŠç Tš(¸9B!Y]DXÏýå«ìÀÙq/Γñ.ÄŒžå8…›ñQ{&P]¨h€Ó&ØeR[†áÞðïF„QX EØÎ œj—ÇåV![—,Ô.ëÀÎúÝ-¯‚Û´²ý[úNÂ虣Ÿ}0æ~8¹'KxÃnÔêâ;¹³ý¿G…çââe2Øs3FH!Ûhå`³ó£#D‰ õãzå/t²ê•ÈRvš+ÀèÀ…m¸;SA^$7ÅJŽVùMåmž¢JZÝmýJja>éWzÒéþ—;ýšÁÁjî6ͺ~ÂVviGWñ[ûzzH¶t­è$>]ê÷Ÿì‡W-B«p#ŒØ²·îâˆÆÔ’µ6Ñ°ÃX.£W±RhÅYÅÛ¼’Ýç~ûãíö³'›%!3¥ª6åÏšÆý{«ëåK|ù+%å;4Å%5‡døŒwô«Õ¡’„®etãJQhOÉn>ÿÍ•ýí•€­;ôFÝ>'oé!3úØwi¹l†q°4q§k0*‚ÖÂô@xƒÿ9˜dª‘pá[Ö%Çið¡PüõÖ{w€½ö.zŸLõ¤Ir‚nÑÑ›ÑÞ êÍàÖIk c°öA6ÿdƒ4›3àñFL<^Gñ 䟛ç?ï$ÈR°-N´@}%·ñð™ŒN ,ÿ”zuï…@Óå——e´#¶#D…×·pHÝkNB(œ{>½ô½tb«,ݹ§D³A»É®~eÀ”¿,½zÔÇo¬¸E7–Y„.¡—Ä“Éâ‘m áš™~‰È/=»±«XºmP +?tÛªsêiÃ*|xû7­»¤ܪªzt† Lþ¡˜ïÒZ=* ½A‡”+ä¾ù‘{GoÍQPÔ®ÍØ#©J{ˆk{ƒ&üM{õì œµlÉwø¿ê`Ò@Í;ÕUÇ¥+™|ñ¦ŠVnÙXOìE¢/Tkrš3¡ˆlu#AØJS™áƒŠ§“™% ²9óèzkcïõÓÇ/ž”*Ë•BQ$o¿©á²&²uÖ• +¸K|hs³ù(9ð#Ê ÎÓ@›© Púp³&ÖÞtí˯­‘jQŠ0£o½ÑšU¨ÞG ”Ö׆íÍ\&‹”Þ$ØšiO×íܶA“WüZu‰,ä†óÂɲº7Ëök@YS ›Lòeˆü"/B¤ÓlNUtЪ?ˆõ0»žƒÃûàáêñIûy©iiñÔ{Γz&[¦À±úŠÿ`.Bnœ +endstream endobj 1960 0 obj <> endobj 1961 0 obj <>stream +hÞTP±ŠÃ0 Ýý{tp(]B ô(d¸»Ò´·»¶’34²Qœ!_;M{tÐ=éñž$÷õgM6€<²Ó h-ÆÁ¬®ØY‚¼cuXºu¯<È(n¦!`_Së ,…<Åáx‚Õa»Î>@þ°A¶ÔÁêœ_~#ÑŒÞß°G +AUÁVÈý—òߪGIöÏ'PÌ}¾;ƒƒWYQ‡PfEõ$ó>{*®­þS,›Åf—U"î.lR¥S^ôȳÍ÷Î’¹%|½Ä;Ÿ¼R‰»ŒÌhf +endstream endobj 1962 0 obj <> endobj 1963 0 obj <>stream +hÞbd`ab`ddñv ðô ÐŽJ,HsÉÌKOJ,)‰«üaü!ÎòC–G¬ë·ò¯ÌŸ'XeÒ"x¿Ïàÿ>WàûBÁ)ß +1032²¬Ù‘hnìœ_PY”™žQ¢ ‘¬©`hiaª"ÍÁ¤˜´TpLÉOJU®,.IÍ-VðÌKÎ/*È/J,IMÑSPpÌÉQ›P¬P”ZœZTõ qV¹Kæ0…Ìb…D |z&ÐŒ¢Ô…’¢Ä”ÔÜÄ¢l…ü4 ‰@Á¼Ä’Ìü¼Ä…Ê‚Ô´ÄäTg¨5@a=_#c;“BØ#ìrßWñÑÏÞîÍ?~lf\÷Óùg–ØO¿î=Øùjgþô˜ñû÷ 6€Üžn= +endstream endobj 1964 0 obj <> endobj 1965 0 obj [/Indexed/DeviceRGB 255 521 0 R] endobj 1966 0 obj <> endobj 1967 0 obj <> endobj 1968 0 obj <> endobj 1969 0 obj <> endobj 1970 0 obj <> endobj 1971 0 obj <> endobj 1972 0 obj <> endobj 1973 0 obj <> endobj 1974 0 obj <> endobj 1975 0 obj <> endobj 1976 0 obj <> endobj 1977 0 obj <> endobj 1978 0 obj <> endobj 1979 0 obj <> endobj 1980 0 obj <> endobj 1981 0 obj <> endobj 1982 0 obj <> endobj 1983 0 obj <> endobj 1984 0 obj <> endobj 1985 0 obj <> endobj 1986 0 obj <> endobj 1987 0 obj <> endobj 1988 0 obj <> endobj 1989 0 obj <> endobj 1990 0 obj <> endobj 1991 0 obj <> endobj 1992 0 obj <> endobj 1993 0 obj <> endobj 1994 0 obj <> endobj 1995 0 obj <> endobj 1996 0 obj <> endobj 1997 0 obj <> endobj 1998 0 obj <> endobj 1999 0 obj <> endobj 2000 0 obj <> endobj 2001 0 obj <> endobj 2002 0 obj <> endobj 2003 0 obj <> endobj 2004 0 obj <> endobj 2005 0 obj <> endobj 2006 0 obj <> endobj 2007 0 obj <> endobj 2008 0 obj <> endobj 2009 0 obj <> endobj 2010 0 obj <> endobj 2011 0 obj <> endobj 2012 0 obj <> endobj 2013 0 obj <> endobj 2014 0 obj <> endobj 2015 0 obj <> endobj 2016 0 obj <> endobj 2017 0 obj <> endobj 2018 0 obj <> endobj 2019 0 obj <> endobj 2020 0 obj <> endobj 2021 0 obj <> endobj 2022 0 obj <> endobj 2023 0 obj <> endobj 2024 0 obj <> endobj 2025 0 obj <> endobj 2026 0 obj <> endobj 2027 0 obj <> endobj 2028 0 obj <> endobj 2029 0 obj <> endobj 2030 0 obj <> endobj 2031 0 obj <> endobj 2032 0 obj <> endobj 2033 0 obj <> endobj 2034 0 obj <> endobj 2035 0 obj <> endobj 2036 0 obj <> endobj 2037 0 obj <> endobj 2038 0 obj <> endobj 2039 0 obj <> endobj 2040 0 obj <> endobj 2041 0 obj <> endobj 2042 0 obj <> endobj 2043 0 obj <> endobj 2044 0 obj <> endobj 2045 0 obj <> endobj 2046 0 obj <> endobj 2047 0 obj <> endobj 2048 0 obj <> endobj 2049 0 obj <> endobj 2050 0 obj <> endobj 2051 0 obj <> endobj 2052 0 obj <> endobj 2053 0 obj <> endobj 2054 0 obj <> endobj 2055 0 obj <> endobj 2056 0 obj <> endobj 2057 0 obj <> endobj 2058 0 obj <> endobj 2059 0 obj <> endobj 2060 0 obj <> endobj 2061 0 obj <> endobj 2062 0 obj <> endobj 2063 0 obj <> endobj 2064 0 obj <> endobj 2065 0 obj <> endobj 2066 0 obj <> endobj 2067 0 obj <> endobj 2068 0 obj <> endobj 2069 0 obj <> endobj 2070 0 obj <> endobj 2071 0 obj <> endobj 2072 0 obj <> endobj 2073 0 obj <> endobj 2074 0 obj <> endobj 2075 0 obj <> endobj 2076 0 obj <> endobj 2077 0 obj <> endobj 2078 0 obj <> endobj 2079 0 obj <> endobj 2080 0 obj <> endobj 2081 0 obj <> endobj 2082 0 obj <> endobj 2083 0 obj <> endobj 2084 0 obj <> endobj 2085 0 obj <> endobj 2086 0 obj <> endobj 2087 0 obj <> endobj 2088 0 obj <> endobj 2089 0 obj <> endobj 2090 0 obj <> endobj 2091 0 obj <> endobj 2092 0 obj <> endobj 2093 0 obj <> endobj 2094 0 obj <> endobj 2095 0 obj <> endobj 2096 0 obj <> endobj 2097 0 obj <> endobj 2098 0 obj <> endobj 2099 0 obj <> endobj 2100 0 obj <> endobj 2101 0 obj <> endobj 2102 0 obj <> endobj 2103 0 obj <> endobj 2104 0 obj <> endobj 2105 0 obj <> endobj 2106 0 obj <> endobj 2107 0 obj <> endobj 2108 0 obj <> endobj 2109 0 obj <> endobj 2110 0 obj <> endobj 2111 0 obj <> endobj 2112 0 obj <> endobj 2113 0 obj <> endobj 2114 0 obj <> endobj 2115 0 obj <> endobj 2116 0 obj <> endobj 2117 0 obj <> endobj 2118 0 obj <> endobj 2119 0 obj <> endobj 2120 0 obj <> endobj 2121 0 obj <> endobj 2122 0 obj <> endobj 2123 0 obj <> endobj 2124 0 obj <> endobj 2125 0 obj <> endobj 2126 0 obj <> endobj 2127 0 obj <> endobj 2128 0 obj <> endobj 2129 0 obj <> endobj 2130 0 obj <> endobj 2131 0 obj <> endobj 2132 0 obj <> endobj 2133 0 obj <> endobj 2134 0 obj <> endobj 2135 0 obj <> endobj 2136 0 obj <> endobj 2137 0 obj <> endobj 2138 0 obj <> endobj 2139 0 obj <> endobj 2140 0 obj <> endobj 2141 0 obj <> endobj 2142 0 obj <> endobj 2143 0 obj <> endobj 2144 0 obj <> endobj 2145 0 obj <> endobj 2146 0 obj <> endobj 2147 0 obj <> endobj 2148 0 obj <> endobj 2149 0 obj <> endobj 2150 0 obj <> endobj 2151 0 obj <> endobj 2152 0 obj <> endobj 2153 0 obj <> endobj 2154 0 obj <> endobj 2155 0 obj <> endobj 2156 0 obj <> endobj 2157 0 obj <> endobj 2158 0 obj <> endobj 2159 0 obj <> endobj 2160 0 obj <> endobj 2161 0 obj <> endobj 2162 0 obj <> endobj 2163 0 obj <> endobj 2164 0 obj <> endobj 2165 0 obj <> endobj 2166 0 obj <> endobj 2167 0 obj <> endobj 2168 0 obj <> endobj 2169 0 obj <> endobj 2170 0 obj <> endobj 2171 0 obj <> endobj 2172 0 obj <> endobj 2173 0 obj <> endobj 2174 0 obj <> endobj 2175 0 obj <> endobj 2176 0 obj <> endobj 2177 0 obj <> endobj 2178 0 obj <> endobj 2179 0 obj <> endobj 2180 0 obj <> endobj 2181 0 obj <> endobj 2182 0 obj <> endobj 2183 0 obj <> endobj 2184 0 obj <> endobj 2185 0 obj <> endobj 2186 0 obj <> endobj 2187 0 obj <> endobj 2188 0 obj <> endobj 2189 0 obj <> endobj 2190 0 obj <> endobj 2191 0 obj <> endobj 2192 0 obj <> endobj 2193 0 obj <> endobj 2194 0 obj <> endobj 2195 0 obj <> endobj 2196 0 obj <> endobj 2197 0 obj <> endobj 2198 0 obj <> endobj 2199 0 obj <> endobj 2200 0 obj <> endobj 2201 0 obj <> endobj 2202 0 obj <> endobj 2203 0 obj <> endobj 2204 0 obj <> endobj 2205 0 obj <> endobj 2206 0 obj <> endobj 2207 0 obj <> endobj 2208 0 obj <> endobj 2209 0 obj <> endobj 2210 0 obj <> endobj 2211 0 obj <> endobj 2212 0 obj <> endobj 2213 0 obj <> endobj 2214 0 obj <> endobj 2215 0 obj <> endobj 2216 0 obj <> endobj 2217 0 obj <> endobj 2218 0 obj <> endobj 2219 0 obj <> endobj 2220 0 obj <> endobj 2221 0 obj <> endobj 2222 0 obj <> endobj 2223 0 obj <> endobj 2224 0 obj <> endobj 2225 0 obj <> endobj 2226 0 obj <> endobj 2227 0 obj <> endobj 2228 0 obj <> endobj 2229 0 obj <> endobj 2230 0 obj <> endobj 2231 0 obj <> endobj 2232 0 obj <> endobj 2233 0 obj <> endobj 2234 0 obj <> endobj 2235 0 obj <> endobj 2236 0 obj <> endobj 2237 0 obj <> endobj 2238 0 obj <> endobj 2239 0 obj <> endobj 2240 0 obj <> endobj 2241 0 obj <> endobj 2242 0 obj <> endobj 2243 0 obj <> endobj 2244 0 obj <> endobj 2245 0 obj <> endobj 2246 0 obj <> endobj 2247 0 obj <> endobj 2248 0 obj <> endobj 2249 0 obj <> endobj 2250 0 obj <> endobj 2251 0 obj <> endobj 2252 0 obj <> endobj 2253 0 obj <> endobj 2254 0 obj <> endobj 2255 0 obj <> endobj 2256 0 obj <> endobj 2257 0 obj <> endobj 2258 0 obj <> endobj 2259 0 obj <> endobj 2260 0 obj <> endobj 2261 0 obj <> endobj 2262 0 obj <> endobj 2263 0 obj <> endobj 2264 0 obj <> endobj 2265 0 obj <> endobj 2266 0 obj <> endobj 2267 0 obj <> endobj 2268 0 obj <> endobj 2269 0 obj <> endobj 2270 0 obj <> endobj 2271 0 obj <> endobj 2272 0 obj <> endobj 2273 0 obj <> endobj 2274 0 obj <> endobj 2275 0 obj <> endobj 2276 0 obj <> endobj 2277 0 obj <> endobj 2278 0 obj <> endobj 2279 0 obj <> endobj 2280 0 obj <> endobj 2281 0 obj <> endobj 2282 0 obj <> endobj 2283 0 obj <> endobj 2284 0 obj <> endobj 2285 0 obj <> endobj 2286 0 obj <> endobj 2287 0 obj <> endobj 2288 0 obj <> endobj 2289 0 obj <> endobj 2290 0 obj <> endobj 2291 0 obj <> endobj 2292 0 obj <> endobj 2293 0 obj <> endobj 2294 0 obj <> endobj 2295 0 obj <> endobj 2296 0 obj <> endobj 2297 0 obj <> endobj 2298 0 obj <> endobj 2299 0 obj <> endobj 2300 0 obj <> endobj 2301 0 obj <> endobj 2302 0 obj <> endobj 2303 0 obj <> endobj 2304 0 obj <> endobj 2305 0 obj <> endobj 2306 0 obj <> endobj 2307 0 obj <> endobj 2308 0 obj <> endobj 2309 0 obj <> endobj 2310 0 obj <> endobj 2311 0 obj <> endobj 2312 0 obj <> endobj 2313 0 obj <> endobj 2314 0 obj <> endobj 2315 0 obj <> endobj 2316 0 obj <> endobj 2317 0 obj <> endobj 2318 0 obj <> endobj 2319 0 obj <> endobj 2320 0 obj <> endobj 2321 0 obj <> endobj 2322 0 obj <> endobj 2323 0 obj <> endobj 2324 0 obj <> endobj 2325 0 obj <> endobj 2326 0 obj <> endobj 2327 0 obj <> endobj 2328 0 obj <> endobj 2329 0 obj <> endobj 2330 0 obj <> endobj 2331 0 obj <> endobj 2332 0 obj <> endobj 2333 0 obj <> endobj 2334 0 obj <> endobj 2335 0 obj <> endobj 2336 0 obj <> endobj 2337 0 obj <> endobj 2338 0 obj <> endobj 2339 0 obj <> endobj 2340 0 obj <> endobj 2341 0 obj <> endobj 2342 0 obj <> endobj 2343 0 obj <> endobj 2344 0 obj <> endobj 2345 0 obj <> endobj 2346 0 obj <> endobj 2347 0 obj <> endobj 2348 0 obj <> endobj 2349 0 obj <> endobj 2350 0 obj <> endobj 2351 0 obj <> endobj 2352 0 obj <> endobj 2353 0 obj <> endobj 2354 0 obj <> endobj 2355 0 obj <> endobj 2356 0 obj <> endobj 2357 0 obj <> endobj 2358 0 obj <> endobj 2359 0 obj <> endobj 2360 0 obj <> endobj 2361 0 obj <> endobj 2362 0 obj <> endobj 2363 0 obj <> endobj 2364 0 obj <> endobj 2365 0 obj <> endobj 2366 0 obj <> endobj 2367 0 obj <> endobj 2368 0 obj <> endobj 2369 0 obj <> endobj 2370 0 obj <> endobj 2371 0 obj <> endobj 2372 0 obj <> endobj 2373 0 obj <> endobj 2374 0 obj <> endobj 2375 0 obj <> endobj 2376 0 obj <> endobj 2377 0 obj <> endobj 2378 0 obj <> endobj 2379 0 obj <> endobj 2380 0 obj <> endobj 2381 0 obj <> endobj 2382 0 obj <> endobj 2383 0 obj <> endobj 2384 0 obj <> endobj 2385 0 obj <> endobj 2386 0 obj <> endobj 2387 0 obj <> endobj 2388 0 obj <> endobj 2389 0 obj <> endobj 2390 0 obj <> endobj 2391 0 obj <> endobj 2392 0 obj <> endobj 2393 0 obj <> endobj 2394 0 obj <> endobj 2395 0 obj <> endobj 2396 0 obj <> endobj 2397 0 obj <> endobj 2398 0 obj <> endobj 2399 0 obj <> endobj 2400 0 obj <> endobj 2401 0 obj <> endobj 2402 0 obj <> endobj 2403 0 obj <> endobj 2404 0 obj <> endobj 2405 0 obj <> endobj 2406 0 obj <> endobj 2407 0 obj <> endobj 2408 0 obj <> endobj 2409 0 obj <> endobj 2410 0 obj <> endobj 2411 0 obj <> endobj 2412 0 obj <> endobj 2413 0 obj <> endobj 2414 0 obj <> endobj 2415 0 obj <> endobj 2416 0 obj <> endobj 2417 0 obj <> endobj 2418 0 obj <> endobj 2419 0 obj <> endobj 2420 0 obj <> endobj 2421 0 obj <> endobj 2422 0 obj <> endobj 2423 0 obj <> endobj 2424 0 obj <> endobj 2425 0 obj <> endobj 2426 0 obj <> endobj 2427 0 obj <> endobj 2428 0 obj <> endobj 2429 0 obj <> endobj 2430 0 obj <> endobj 2431 0 obj <> endobj 2432 0 obj <> endobj 2433 0 obj <> endobj 2434 0 obj <> endobj 2435 0 obj <> endobj 2436 0 obj <> endobj 2437 0 obj <> endobj 2438 0 obj <> endobj 2439 0 obj <> endobj 2440 0 obj <> endobj 2441 0 obj <> endobj 2442 0 obj <> endobj 2443 0 obj <> endobj 2444 0 obj <> endobj 2445 0 obj <> endobj 2446 0 obj <> endobj 2447 0 obj <> endobj 2448 0 obj <> endobj 2449 0 obj <> endobj 2450 0 obj <> endobj 2451 0 obj <> endobj 2452 0 obj <> endobj 2453 0 obj <> endobj 2454 0 obj <> endobj 2455 0 obj <> endobj 2456 0 obj <> endobj 2457 0 obj <> endobj 2458 0 obj <> endobj 2459 0 obj <> endobj 2460 0 obj <> endobj 2461 0 obj <> endobj 2462 0 obj <> endobj 2463 0 obj <> endobj 2464 0 obj <> endobj 2465 0 obj <> endobj 2466 0 obj <> endobj 2467 0 obj <> endobj 2468 0 obj <> endobj 2469 0 obj <> endobj 2470 0 obj <> endobj 2471 0 obj <> endobj 2472 0 obj <> endobj 2473 0 obj <> endobj 2474 0 obj <> endobj 2475 0 obj <> endobj 2476 0 obj <> endobj 2477 0 obj <> endobj 2478 0 obj <> endobj 2479 0 obj <> endobj 2480 0 obj <> endobj 2481 0 obj <> endobj 2482 0 obj <> endobj 2483 0 obj <> endobj 2484 0 obj <> endobj 2485 0 obj <> endobj 2486 0 obj <> endobj 2487 0 obj <> endobj 2488 0 obj <> endobj 2489 0 obj <> endobj 2490 0 obj <> endobj 2491 0 obj <> endobj 2492 0 obj <> endobj 2493 0 obj <> endobj 2494 0 obj <> endobj 2495 0 obj <> endobj 2496 0 obj <> endobj 2497 0 obj <> endobj 2498 0 obj <> endobj 2499 0 obj <> endobj 2500 0 obj <> endobj 2501 0 obj <> endobj 2502 0 obj <> endobj 2503 0 obj <> endobj 2504 0 obj <> endobj 2505 0 obj <> endobj 2506 0 obj <> endobj 2507 0 obj <> endobj 2508 0 obj <> endobj 2509 0 obj <> endobj 2510 0 obj <> endobj 2511 0 obj <> endobj 2512 0 obj <> endobj 2513 0 obj <> endobj 2514 0 obj <> endobj 2515 0 obj <> endobj 2516 0 obj <> endobj 2517 0 obj <> endobj 2518 0 obj <> endobj 2519 0 obj <> endobj 2520 0 obj <> endobj 2521 0 obj <> endobj 2522 0 obj <> endobj 2523 0 obj <> endobj 2524 0 obj <> endobj 2525 0 obj <> endobj 2526 0 obj <> endobj 2527 0 obj <> endobj 2528 0 obj <> endobj 2529 0 obj <> endobj 2530 0 obj <> endobj 2531 0 obj <> endobj 2532 0 obj <> endobj 2533 0 obj <> endobj 2534 0 obj <> endobj 2535 0 obj <> endobj 2536 0 obj <> endobj 2537 0 obj <> endobj 2538 0 obj <> endobj 2539 0 obj <> endobj 2540 0 obj <> endobj 2541 0 obj <> endobj 2542 0 obj <> endobj 2543 0 obj <> endobj 2544 0 obj <> endobj 2545 0 obj <> endobj 2546 0 obj <> endobj 2547 0 obj <> endobj 2548 0 obj <> endobj 2549 0 obj <> endobj 2550 0 obj <> endobj 2551 0 obj <> endobj 2552 0 obj <> endobj 2553 0 obj <> endobj 2554 0 obj <> endobj 2555 0 obj <> endobj 2556 0 obj <> endobj 2557 0 obj <> endobj 2558 0 obj <> endobj 2559 0 obj <> endobj 2560 0 obj <> endobj 2561 0 obj <> endobj 2562 0 obj <> endobj 2563 0 obj <> endobj 2564 0 obj <> endobj 2565 0 obj <> endobj 2566 0 obj <> endobj 2567 0 obj <> endobj 2568 0 obj <> endobj 2569 0 obj <> endobj 2570 0 obj <> endobj 2571 0 obj <> endobj 2572 0 obj <> endobj 2573 0 obj <> endobj 2574 0 obj <> endobj 2575 0 obj <> endobj 2576 0 obj <> endobj 2577 0 obj <> endobj 2578 0 obj <> endobj 2579 0 obj <> endobj 2580 0 obj <> endobj 2581 0 obj <> endobj 2582 0 obj <> endobj 2583 0 obj <> endobj 2584 0 obj <> endobj 2585 0 obj <> endobj 2586 0 obj <> endobj 2587 0 obj <> endobj 2588 0 obj <> endobj 2589 0 obj <> endobj 2590 0 obj <> endobj 2591 0 obj <> endobj 2592 0 obj <> endobj 2593 0 obj <> endobj 2594 0 obj <> endobj 2595 0 obj <> endobj 2596 0 obj <> endobj 2597 0 obj <> endobj 2598 0 obj <> endobj 2599 0 obj <> endobj 2600 0 obj <> endobj 2601 0 obj <> endobj 2602 0 obj <> endobj 2603 0 obj <> endobj 2604 0 obj <> endobj 2605 0 obj <> endobj 2606 0 obj <> endobj 2607 0 obj <> endobj 2608 0 obj <> endobj 2609 0 obj <> endobj 2610 0 obj <> endobj 2611 0 obj <> endobj 2612 0 obj <> endobj 2613 0 obj <> endobj 2614 0 obj <> endobj 2615 0 obj <> endobj 2616 0 obj <> endobj 2617 0 obj <> endobj 2618 0 obj <> endobj 2619 0 obj <> endobj 2620 0 obj <> endobj 2621 0 obj <> endobj 2622 0 obj <> endobj 2623 0 obj <> endobj 2624 0 obj <> endobj 2625 0 obj <> endobj 2626 0 obj <> endobj 2627 0 obj <> endobj 2628 0 obj <> endobj 2629 0 obj <> endobj 2630 0 obj <> endobj 2631 0 obj <> endobj 2632 0 obj <> endobj 2633 0 obj <> endobj 2634 0 obj <> endobj 2635 0 obj <> endobj 2636 0 obj <> endobj 2637 0 obj <> endobj 2638 0 obj <> endobj 2639 0 obj <> endobj 2640 0 obj <> endobj 2641 0 obj <> endobj 2642 0 obj <> endobj 2643 0 obj <> endobj 2644 0 obj <> endobj 2645 0 obj <> endobj 2646 0 obj <> endobj 2647 0 obj <> endobj 2648 0 obj <> endobj 2649 0 obj <> endobj 2650 0 obj <> endobj 2651 0 obj <> endobj 2652 0 obj <> endobj 2653 0 obj <> endobj 2654 0 obj <> endobj 2655 0 obj <> endobj 2656 0 obj <> endobj 2657 0 obj <> endobj 2658 0 obj <> endobj 2659 0 obj <> endobj 2660 0 obj <> endobj 2661 0 obj <> endobj 2662 0 obj <> endobj 2663 0 obj <> endobj 2664 0 obj <> endobj 2665 0 obj <> endobj 2666 0 obj <> endobj 2667 0 obj <> endobj 2668 0 obj <> endobj 2669 0 obj <> endobj 2670 0 obj <> endobj 2671 0 obj <> endobj 2672 0 obj <> endobj 2673 0 obj <> endobj 2674 0 obj <> endobj 2675 0 obj <> endobj 2676 0 obj <> endobj 2677 0 obj <> endobj 2678 0 obj <> endobj 2679 0 obj <> endobj 2680 0 obj <> endobj 2681 0 obj <> endobj 2682 0 obj <> endobj 2683 0 obj <> endobj 2684 0 obj <> endobj 2685 0 obj <> endobj 2686 0 obj <> endobj 2687 0 obj <> endobj 2688 0 obj <> endobj 2689 0 obj <> endobj 2690 0 obj <> endobj 2691 0 obj <> endobj 2692 0 obj <> endobj 2693 0 obj <> endobj 2694 0 obj <> endobj 2695 0 obj <> endobj 2696 0 obj <> endobj 2697 0 obj <> endobj 2698 0 obj <> endobj 2699 0 obj <> endobj 2700 0 obj <> endobj 2701 0 obj <> endobj 2702 0 obj <> endobj 2703 0 obj <> endobj 2704 0 obj <> endobj 2705 0 obj <> endobj 2706 0 obj <> endobj 2707 0 obj <> endobj 2708 0 obj <> endobj 2709 0 obj <> endobj 2710 0 obj <> endobj 2711 0 obj <> endobj 2712 0 obj <> endobj 2713 0 obj <> endobj 2714 0 obj <> endobj 2715 0 obj <> endobj 2716 0 obj <> endobj 2717 0 obj <> endobj 2718 0 obj <> endobj 2719 0 obj <> endobj 2720 0 obj <> endobj 2721 0 obj <> endobj 2722 0 obj <> endobj 2723 0 obj <> endobj 2724 0 obj <> endobj 2725 0 obj <> endobj 2726 0 obj <> endobj 2727 0 obj <> endobj 2728 0 obj <> endobj 2729 0 obj <> endobj 2730 0 obj <> endobj 2731 0 obj <> endobj 2732 0 obj <> endobj 2733 0 obj <> endobj 2734 0 obj <> endobj 2735 0 obj <> endobj 2736 0 obj <> endobj 2737 0 obj <> endobj 2738 0 obj <> endobj 2739 0 obj <> endobj 2740 0 obj <> endobj 2741 0 obj <> endobj 2742 0 obj <> endobj 2743 0 obj <> endobj 2744 0 obj <> endobj 2745 0 obj <> endobj 2746 0 obj <> endobj 2747 0 obj <> endobj 2748 0 obj <> endobj 2749 0 obj <> endobj 2750 0 obj <> endobj 2751 0 obj <> endobj 2752 0 obj <> endobj 2753 0 obj <> endobj 2754 0 obj <> endobj 2755 0 obj <> endobj 2756 0 obj <> endobj 2757 0 obj <> endobj 2758 0 obj <> endobj 2759 0 obj <> endobj 2760 0 obj <> endobj 2761 0 obj <> endobj 2762 0 obj <> endobj 2763 0 obj <> endobj 2764 0 obj <> endobj 2765 0 obj <> endobj 2766 0 obj <> endobj 2767 0 obj <> endobj 2768 0 obj <> endobj 2769 0 obj <> endobj 2770 0 obj <> endobj 2771 0 obj <> endobj 2772 0 obj <> endobj 2773 0 obj <> endobj 2774 0 obj <> endobj 2775 0 obj <> endobj 2776 0 obj <> endobj 2777 0 obj <> endobj 2778 0 obj <> endobj 2779 0 obj <> endobj 2780 0 obj <> endobj 2781 0 obj <> endobj 2782 0 obj <> endobj 2783 0 obj <> endobj 2784 0 obj <> endobj 2785 0 obj <> endobj 2786 0 obj <> endobj 2787 0 obj <> endobj 2788 0 obj <> endobj 2789 0 obj <> endobj 2790 0 obj <> endobj 2791 0 obj <> endobj 2792 0 obj <> endobj 2793 0 obj <> endobj 2794 0 obj <> endobj 2795 0 obj <> endobj 2796 0 obj <> endobj 2797 0 obj <> endobj 2798 0 obj <> endobj 2799 0 obj <> endobj 2800 0 obj <> endobj 2801 0 obj <> endobj 2802 0 obj <> endobj 2803 0 obj <> endobj 2804 0 obj <> endobj 2805 0 obj <> endobj 2806 0 obj <> endobj 2807 0 obj <> endobj 2808 0 obj <> endobj 2809 0 obj <> endobj 2810 0 obj <> endobj 2811 0 obj <> endobj 2812 0 obj <> endobj 2813 0 obj <> endobj 2814 0 obj <> endobj 2815 0 obj <> endobj 2816 0 obj <> endobj 2817 0 obj <> endobj 2818 0 obj <> endobj 2819 0 obj <> endobj 2820 0 obj <> endobj 2821 0 obj <> endobj 2822 0 obj <> endobj 2823 0 obj <> endobj 2824 0 obj <> endobj 2825 0 obj <> endobj 2826 0 obj <> endobj 2827 0 obj <> endobj 2828 0 obj <> endobj 2829 0 obj <> endobj 2830 0 obj <> endobj 2831 0 obj <> endobj 2832 0 obj <> endobj 2833 0 obj <> endobj 2834 0 obj <> endobj 2835 0 obj <> endobj 2836 0 obj <> endobj 2837 0 obj <> endobj 2838 0 obj <> endobj 2839 0 obj <> endobj 2840 0 obj <> endobj 2841 0 obj <> endobj 2842 0 obj <> endobj 2843 0 obj <> endobj 2844 0 obj <> endobj 2845 0 obj <> endobj 2846 0 obj <> endobj 2847 0 obj <> endobj 2848 0 obj <> endobj 2849 0 obj <> endobj 2850 0 obj <> endobj 2851 0 obj <> endobj 2852 0 obj <> endobj 2853 0 obj <> endobj 2854 0 obj <> endobj 2855 0 obj <> endobj 2856 0 obj <> endobj 2857 0 obj <> endobj 2858 0 obj <> endobj 2859 0 obj <> endobj 2860 0 obj <> endobj 2861 0 obj <> endobj 2862 0 obj <> endobj 2863 0 obj <> endobj 2864 0 obj <> endobj 2865 0 obj <> endobj 2866 0 obj <> endobj 2867 0 obj <> endobj 2868 0 obj <> endobj 2869 0 obj <> endobj 2870 0 obj <> endobj 2871 0 obj <> endobj 2872 0 obj <> endobj 2873 0 obj <> endobj 2874 0 obj <> endobj 2875 0 obj <> endobj 2876 0 obj <> endobj 2877 0 obj <> endobj 2878 0 obj <> endobj 2879 0 obj <> endobj 2880 0 obj <> endobj 2881 0 obj <> endobj 2882 0 obj <> endobj 2883 0 obj <> endobj 2884 0 obj <> endobj 2885 0 obj <> endobj 2886 0 obj <> endobj 2887 0 obj <> endobj 2888 0 obj <> endobj 2889 0 obj <> endobj 2890 0 obj <> endobj 2891 0 obj <> endobj 2892 0 obj <> endobj 2893 0 obj <> endobj 2894 0 obj <> endobj 2895 0 obj <> endobj 2896 0 obj <> endobj 2897 0 obj <> endobj 2898 0 obj <> endobj 2899 0 obj <> endobj 2900 0 obj <> endobj 2901 0 obj <> endobj 2902 0 obj <> endobj 2903 0 obj <> endobj 2904 0 obj <> endobj 2905 0 obj <> endobj 2906 0 obj <> endobj 2907 0 obj <> endobj 2908 0 obj <> endobj 2909 0 obj <> endobj 2910 0 obj <> endobj 2911 0 obj <> endobj 2912 0 obj <> endobj 2913 0 obj <> endobj 2914 0 obj <> endobj 2915 0 obj <> endobj 2916 0 obj <> endobj 2917 0 obj <> endobj 2918 0 obj <> endobj 2919 0 obj <> endobj 2920 0 obj <> endobj 2921 0 obj <> endobj 2922 0 obj <> endobj 2923 0 obj <> endobj 2924 0 obj <> endobj 2925 0 obj <> endobj 2926 0 obj <> endobj 2927 0 obj <> endobj 2928 0 obj <> endobj 2929 0 obj <> endobj 2930 0 obj <> endobj 2931 0 obj <> endobj 2932 0 obj <> endobj 2933 0 obj <> endobj 2934 0 obj <> endobj 2935 0 obj <> endobj 2936 0 obj <> endobj 2937 0 obj <> endobj 2938 0 obj <> endobj 2939 0 obj <> endobj 2940 0 obj <> endobj 2941 0 obj <> endobj 2942 0 obj <> endobj 2943 0 obj <> endobj 2944 0 obj <> endobj 2945 0 obj <> endobj 2946 0 obj <> endobj 2947 0 obj <> endobj 2948 0 obj <> endobj 2949 0 obj <> endobj 2950 0 obj <> endobj 2951 0 obj <> endobj 2952 0 obj <> endobj 2953 0 obj <> endobj 2954 0 obj <> endobj 2955 0 obj <> endobj 2956 0 obj <> endobj 2957 0 obj <> endobj 2958 0 obj <> endobj 2959 0 obj <> endobj 2960 0 obj <> endobj 2961 0 obj <> endobj 2962 0 obj <> endobj 2963 0 obj <> endobj 2964 0 obj <> endobj 2965 0 obj <> endobj 2966 0 obj <> endobj 2967 0 obj <> endobj 2968 0 obj <> endobj 2969 0 obj <> endobj 2970 0 obj <> endobj 2971 0 obj <> endobj 2972 0 obj <> endobj 2973 0 obj <> endobj 2974 0 obj <> endobj 2975 0 obj <> endobj 2976 0 obj <> endobj 2977 0 obj <> endobj 2978 0 obj <> endobj 2979 0 obj <> endobj 2980 0 obj <> endobj 2981 0 obj <> endobj 2982 0 obj <> endobj 2983 0 obj <> endobj 2984 0 obj <> endobj 2985 0 obj <> endobj 2986 0 obj <> endobj 2987 0 obj <> endobj 2988 0 obj <> endobj 2989 0 obj <> endobj 2990 0 obj <> endobj 2991 0 obj <> endobj 2992 0 obj <> endobj 2993 0 obj <> endobj 2994 0 obj <> endobj 2995 0 obj <> endobj 2996 0 obj <> endobj 2997 0 obj <> endobj 2998 0 obj <> endobj 2999 0 obj <> endobj 3000 0 obj <> endobj 3001 0 obj <> endobj 3002 0 obj <> endobj 3003 0 obj <> endobj 3004 0 obj <> endobj 3005 0 obj <> endobj 3006 0 obj <> endobj 3007 0 obj <> endobj 3008 0 obj <> endobj 3009 0 obj <> endobj 3010 0 obj <> endobj 3011 0 obj <> endobj 3012 0 obj <> endobj 3013 0 obj <> endobj 3014 0 obj <> endobj 3015 0 obj <> endobj 3016 0 obj <> endobj 3017 0 obj <> endobj 3018 0 obj <> endobj 3019 0 obj <> endobj 3020 0 obj <> endobj 3021 0 obj <> endobj 3022 0 obj <> endobj 3023 0 obj <> endobj 3024 0 obj <> endobj 3025 0 obj <> endobj 3026 0 obj <> endobj 3027 0 obj <> endobj 3028 0 obj <> endobj 3029 0 obj <> endobj 3030 0 obj <> endobj 3031 0 obj <> endobj 3032 0 obj <> endobj 3033 0 obj <> endobj 3034 0 obj <> endobj 3035 0 obj <> endobj 3036 0 obj <> endobj 3037 0 obj <> endobj 3038 0 obj <> endobj 3039 0 obj <> endobj 3040 0 obj <> endobj 3041 0 obj <> endobj 3042 0 obj <> endobj 3043 0 obj <> endobj 3044 0 obj <> endobj 3045 0 obj <> endobj 3046 0 obj <> endobj 3047 0 obj <> endobj 3048 0 obj <> endobj 3049 0 obj <> endobj 3050 0 obj <> endobj 3051 0 obj <> endobj 3052 0 obj <> endobj 3053 0 obj <> endobj 3054 0 obj <> endobj 3055 0 obj <> endobj 3056 0 obj <> endobj 3057 0 obj <> endobj 3058 0 obj <> endobj 3059 0 obj <> endobj 3060 0 obj <> endobj 3061 0 obj <> endobj 3062 0 obj <> endobj 3063 0 obj <> endobj 3064 0 obj <> endobj 3065 0 obj <> endobj 3066 0 obj <> endobj 3067 0 obj <> endobj 3068 0 obj <> endobj 3069 0 obj <> endobj 3070 0 obj <> endobj 3071 0 obj <> endobj 3072 0 obj <> endobj 3073 0 obj <> endobj 3074 0 obj <> endobj 3075 0 obj <> endobj 3076 0 obj <> endobj 3077 0 obj <> endobj 3078 0 obj <> endobj 3079 0 obj <> endobj 3080 0 obj <> endobj 3081 0 obj <> endobj 3082 0 obj <> endobj 3083 0 obj <> endobj 3084 0 obj <> endobj 3085 0 obj <> endobj 3086 0 obj <> endobj 3087 0 obj <> endobj 3088 0 obj <> endobj 3089 0 obj <> endobj 3090 0 obj <> endobj 3091 0 obj <> endobj 3092 0 obj <> endobj 3093 0 obj <> endobj 3094 0 obj <> endobj 3095 0 obj <> endobj 3096 0 obj <> endobj 3097 0 obj <> endobj 3098 0 obj <> endobj 3099 0 obj <> endobj 3100 0 obj <> endobj 3101 0 obj <> endobj 3102 0 obj <> endobj 3103 0 obj <> endobj 3104 0 obj <> endobj 3105 0 obj <> endobj 3106 0 obj <> endobj 3107 0 obj <> endobj 3108 0 obj <> endobj 3109 0 obj <> endobj 3110 0 obj <> endobj 3111 0 obj <> endobj 3112 0 obj <> endobj 3113 0 obj <> endobj 3114 0 obj <> endobj 3115 0 obj <> endobj 3116 0 obj <> endobj 3117 0 obj <> endobj 3118 0 obj <> endobj 3119 0 obj <> endobj 3120 0 obj <> endobj 3121 0 obj <> endobj 3122 0 obj <> endobj 3123 0 obj <> endobj 3124 0 obj <> endobj 3125 0 obj <> endobj 3126 0 obj <> endobj 3127 0 obj <> endobj 3128 0 obj <> endobj 3129 0 obj <> endobj 3130 0 obj <> endobj 3131 0 obj <> endobj 3132 0 obj <> endobj 3133 0 obj <> endobj 3134 0 obj <> endobj 3135 0 obj <> endobj 3136 0 obj <> endobj 3137 0 obj <> endobj 3138 0 obj <> endobj 3139 0 obj <> endobj 3140 0 obj <> endobj 3141 0 obj <> endobj 3142 0 obj <> endobj 3143 0 obj <> endobj 3144 0 obj <> endobj 3145 0 obj <> endobj 3146 0 obj <> endobj 3147 0 obj <> endobj 3148 0 obj <> endobj 3149 0 obj <> endobj 3150 0 obj <> endobj 3151 0 obj <> endobj 3152 0 obj <> endobj 3153 0 obj <> endobj 3154 0 obj <> endobj 3155 0 obj <> endobj 3156 0 obj <> endobj 3157 0 obj <> endobj 3158 0 obj <> endobj 3159 0 obj <> endobj 3160 0 obj <> endobj 3161 0 obj <> endobj 3162 0 obj <> endobj 3163 0 obj <> endobj 3164 0 obj <> endobj 3165 0 obj <> endobj 3166 0 obj <> endobj 3167 0 obj <> endobj 3168 0 obj <> endobj 3169 0 obj <> endobj 3170 0 obj <> endobj 3171 0 obj <> endobj 3172 0 obj <> endobj 3173 0 obj <> endobj 3174 0 obj <> endobj 3175 0 obj <> endobj 3176 0 obj <> endobj 3177 0 obj <> endobj 3178 0 obj <> endobj 3179 0 obj <> endobj 3180 0 obj <> endobj 3181 0 obj <> endobj 3182 0 obj <> endobj 3183 0 obj <> endobj 3184 0 obj <> endobj 3185 0 obj <> endobj 3186 0 obj <> endobj 3187 0 obj <> endobj 3188 0 obj <> endobj 3189 0 obj <> endobj 3190 0 obj <> endobj 3191 0 obj <> endobj 3192 0 obj <> endobj 3193 0 obj <> endobj 3194 0 obj <> endobj 3195 0 obj <> endobj 3196 0 obj <> endobj 3197 0 obj <> endobj 3198 0 obj <> endobj 3199 0 obj <> endobj 3200 0 obj <> endobj 3201 0 obj <> endobj 3202 0 obj <> endobj 3203 0 obj <> endobj 3204 0 obj <> endobj 3205 0 obj <> endobj 3206 0 obj <> endobj 3207 0 obj <> endobj 3208 0 obj <> endobj 3209 0 obj <> endobj 3210 0 obj <> endobj 3211 0 obj <> endobj 3212 0 obj <> endobj 3213 0 obj <> endobj 3214 0 obj <> endobj 3215 0 obj <> endobj 3216 0 obj <> endobj 3217 0 obj <> endobj 3218 0 obj <> endobj 3219 0 obj <> endobj 3220 0 obj <> endobj 3221 0 obj <> endobj 3222 0 obj <> endobj 3223 0 obj <> endobj 3224 0 obj <> endobj 3225 0 obj <> endobj 3226 0 obj <> endobj 3227 0 obj <> endobj 3228 0 obj <> endobj 3229 0 obj <> endobj 3230 0 obj <> endobj 3231 0 obj <> endobj 3232 0 obj <> endobj 3233 0 obj <> endobj 3234 0 obj <> endobj 3235 0 obj <> endobj 3236 0 obj <> endobj 3237 0 obj <> endobj 3238 0 obj <> endobj 3239 0 obj <> endobj 3240 0 obj <> endobj 3241 0 obj <> endobj 3242 0 obj <> endobj 3243 0 obj <> endobj 3244 0 obj <> endobj 3245 0 obj <> endobj 3246 0 obj <> endobj 3247 0 obj <> endobj 3248 0 obj <> endobj 3249 0 obj <> endobj 3250 0 obj <> endobj 3251 0 obj <> endobj 3252 0 obj <> endobj 3253 0 obj <> endobj 3254 0 obj <> endobj 3255 0 obj <> endobj 3256 0 obj <> endobj 3257 0 obj <> endobj 3258 0 obj <> endobj 3259 0 obj <> endobj 3260 0 obj <> endobj 3261 0 obj <> endobj 3262 0 obj <> endobj 3263 0 obj <> endobj 3264 0 obj <> endobj 3265 0 obj <> endobj 3266 0 obj <> endobj 3267 0 obj <> endobj 3268 0 obj <> endobj 3269 0 obj <> endobj 3270 0 obj <> endobj 3271 0 obj <> endobj 3272 0 obj <> endobj 3273 0 obj <> endobj 3274 0 obj <> endobj 3275 0 obj <> endobj 3276 0 obj <> endobj 3277 0 obj <> endobj 3278 0 obj <> endobj 3279 0 obj <> endobj 3280 0 obj <> endobj 3281 0 obj <> endobj 3282 0 obj <> endobj 3283 0 obj <> endobj 3284 0 obj <> endobj 3285 0 obj <> endobj 3286 0 obj <> endobj 3287 0 obj <> endobj 3288 0 obj <> endobj 3289 0 obj <> endobj 3290 0 obj <> endobj 3291 0 obj <> endobj 3292 0 obj <> endobj 3293 0 obj <> endobj 3294 0 obj <> endobj 3295 0 obj <> endobj 3296 0 obj <> endobj 3297 0 obj <> endobj 3298 0 obj <> endobj 3299 0 obj <> endobj 3300 0 obj <> endobj 3301 0 obj <> endobj 3302 0 obj <> endobj 3303 0 obj <> endobj 3304 0 obj <> endobj 3305 0 obj <> endobj 3306 0 obj <> endobj 3307 0 obj <> endobj 3308 0 obj <> endobj 3309 0 obj <> endobj 3310 0 obj <> endobj 3311 0 obj <> endobj 3312 0 obj <> endobj 3313 0 obj <> endobj 3314 0 obj <> endobj 3315 0 obj <> endobj 3316 0 obj <> endobj 3317 0 obj <> endobj 3318 0 obj <> endobj 3319 0 obj <> endobj 3320 0 obj <> endobj 3321 0 obj <> endobj 3322 0 obj <> endobj 3323 0 obj <> endobj 3324 0 obj <> endobj 3325 0 obj <> endobj 3326 0 obj <> endobj 3327 0 obj <> endobj 3328 0 obj <> endobj 3329 0 obj <> endobj 3330 0 obj <> endobj 3331 0 obj <> endobj 3332 0 obj <> endobj 3333 0 obj <> endobj 3334 0 obj <> endobj 3335 0 obj <> endobj 3336 0 obj <> endobj 3337 0 obj <> endobj 3338 0 obj <> endobj 3339 0 obj <> endobj 3340 0 obj <> endobj 3341 0 obj <> endobj 3342 0 obj <> endobj 3343 0 obj <> endobj 3344 0 obj <> endobj 3345 0 obj <> endobj 3346 0 obj <> endobj 3347 0 obj <> endobj 3348 0 obj <> endobj 3349 0 obj <> endobj 3350 0 obj <> endobj 3351 0 obj <> endobj 3352 0 obj <> endobj 3353 0 obj <> endobj 3354 0 obj <> endobj 3355 0 obj <> endobj 3356 0 obj <> endobj 3357 0 obj <> endobj 3358 0 obj <> endobj 3359 0 obj <> endobj 3360 0 obj <> endobj 3361 0 obj <> endobj 3362 0 obj <> endobj 3363 0 obj <> endobj 3364 0 obj <> endobj 3365 0 obj <> endobj 3366 0 obj <> endobj 3367 0 obj <> endobj 3368 0 obj <> endobj 3369 0 obj <> endobj 3370 0 obj <> endobj 3371 0 obj <> endobj 3372 0 obj <> endobj 3373 0 obj <> endobj 3374 0 obj <> endobj 3375 0 obj <> endobj 3376 0 obj <> endobj 3377 0 obj <> endobj 3378 0 obj <> endobj 3379 0 obj <> endobj 3380 0 obj <> endobj 3381 0 obj <> endobj 3382 0 obj <> endobj 3383 0 obj <> endobj 3384 0 obj <> endobj 3385 0 obj <> endobj 3386 0 obj <> endobj 3387 0 obj <> endobj 3388 0 obj <> endobj 3389 0 obj <> endobj 3390 0 obj <> endobj 3391 0 obj <> endobj 3392 0 obj <> endobj 3393 0 obj <> endobj 3394 0 obj <> endobj 3395 0 obj <> endobj 3396 0 obj <> endobj 3397 0 obj <> endobj 3398 0 obj <> endobj 3399 0 obj <> endobj 3400 0 obj <> endobj 3401 0 obj <> endobj 3402 0 obj <> endobj 3403 0 obj <> endobj 3404 0 obj <> endobj 3405 0 obj <> endobj 3406 0 obj <> endobj 3407 0 obj <> endobj 3408 0 obj <> endobj 3409 0 obj <> endobj 3410 0 obj <> endobj 3411 0 obj <> endobj 3412 0 obj <> endobj 3413 0 obj <> endobj 3414 0 obj <> endobj 3415 0 obj <> endobj 3416 0 obj <> endobj 3417 0 obj <> endobj 3418 0 obj <> endobj 3419 0 obj <> endobj 3420 0 obj <> endobj 3421 0 obj <> endobj 3422 0 obj <> endobj 3423 0 obj <> endobj 3424 0 obj <> endobj 3425 0 obj <> endobj 3426 0 obj <> endobj 3427 0 obj <> endobj 3428 0 obj <> endobj 3429 0 obj <> endobj 3430 0 obj <> endobj 3431 0 obj <> endobj 3432 0 obj <> endobj 3433 0 obj <> endobj 3434 0 obj <> endobj 3435 0 obj <> endobj 3436 0 obj <> endobj 3437 0 obj <> endobj 3438 0 obj <> endobj 3439 0 obj <> endobj 3440 0 obj <> endobj 3441 0 obj <> endobj 3442 0 obj <> endobj 3443 0 obj <> endobj 3444 0 obj <> endobj 3445 0 obj <> endobj 3446 0 obj <> endobj 3447 0 obj <> endobj 3448 0 obj <> endobj 3449 0 obj <> endobj 3450 0 obj <> endobj 3451 0 obj <> endobj 3452 0 obj <> endobj 3453 0 obj <> endobj 3454 0 obj <> endobj 3455 0 obj <> endobj 3456 0 obj <> endobj 3457 0 obj <> endobj 3458 0 obj <> endobj 3459 0 obj <> endobj 3460 0 obj <> endobj 3461 0 obj <> endobj 3462 0 obj <> endobj 3463 0 obj <> endobj 3464 0 obj <> endobj 3465 0 obj <> endobj 3466 0 obj <> endobj 3467 0 obj <> endobj 3468 0 obj <> endobj 3469 0 obj <> endobj 3470 0 obj <> endobj 3471 0 obj <> endobj 3472 0 obj <> endobj 3473 0 obj <> endobj 3474 0 obj <> endobj 3475 0 obj <> endobj 3476 0 obj <> endobj 3477 0 obj <> endobj 3478 0 obj <> endobj 3479 0 obj <> endobj 3480 0 obj <> endobj 3481 0 obj <> endobj 3482 0 obj <> endobj 3483 0 obj <> endobj 3484 0 obj <> endobj 3485 0 obj <> endobj 3486 0 obj <> endobj 3487 0 obj <> endobj 3488 0 obj <> endobj 3489 0 obj <> endobj 3490 0 obj <> endobj 3491 0 obj <> endobj 3492 0 obj <> endobj 3493 0 obj <> endobj 3494 0 obj <> endobj 3495 0 obj <> endobj 3496 0 obj <> endobj 3497 0 obj <> endobj 3498 0 obj <> endobj 3499 0 obj <> endobj 3500 0 obj <> endobj 3501 0 obj <> endobj 3502 0 obj <> endobj 3503 0 obj <> endobj 3504 0 obj <> endobj 3505 0 obj <> endobj 3506 0 obj <> endobj 3507 0 obj <> endobj 3508 0 obj <> endobj 3509 0 obj <> endobj 3510 0 obj <> endobj 3511 0 obj <> endobj 3512 0 obj <> endobj 3513 0 obj <> endobj 3514 0 obj <> endobj 3515 0 obj <> endobj 3516 0 obj <> endobj 3517 0 obj <> endobj 3518 0 obj <> endobj 3519 0 obj <> endobj 3520 0 obj <> endobj 3521 0 obj <> endobj 3522 0 obj <> endobj 3523 0 obj <> endobj 3524 0 obj <> endobj 3525 0 obj <> endobj 3526 0 obj <> endobj 3527 0 obj <> endobj 3528 0 obj <> endobj 3529 0 obj <> endobj 3530 0 obj <> endobj 3531 0 obj <> endobj 3532 0 obj <> endobj 3533 0 obj <> endobj 3534 0 obj <> endobj 3535 0 obj <> endobj 3536 0 obj <> endobj 3537 0 obj <> endobj 3538 0 obj <> endobj 3539 0 obj <> endobj 3540 0 obj <> endobj 3541 0 obj <> endobj 3542 0 obj <> endobj 3543 0 obj <> endobj 3544 0 obj <> endobj 3545 0 obj <> endobj 3546 0 obj <> endobj 3547 0 obj <> endobj 3548 0 obj <> endobj 3549 0 obj <> endobj 3550 0 obj <> endobj 3551 0 obj <> endobj 3552 0 obj <> endobj 3553 0 obj <> endobj 3554 0 obj <> endobj 3555 0 obj <> endobj 3556 0 obj <> endobj 3557 0 obj <> endobj 3558 0 obj <> endobj 3559 0 obj <> endobj 3560 0 obj <> endobj 3561 0 obj <> endobj 3562 0 obj <> endobj 3563 0 obj <> endobj 3564 0 obj <> endobj 3565 0 obj <> endobj 3566 0 obj <> endobj 3567 0 obj <> endobj 3568 0 obj <> endobj 3569 0 obj <> endobj 3570 0 obj <> endobj 3571 0 obj <> endobj 3572 0 obj <> endobj 3573 0 obj <> endobj 3574 0 obj <> endobj 3575 0 obj <> endobj 3576 0 obj <> endobj 3577 0 obj <> endobj 3578 0 obj <> endobj 3579 0 obj <> endobj 3580 0 obj <> endobj 3581 0 obj <> endobj 3582 0 obj <> endobj 3583 0 obj <> endobj 3584 0 obj <> endobj 3585 0 obj <> endobj 3586 0 obj <> endobj 3587 0 obj <> endobj 3588 0 obj <> endobj 3589 0 obj <> endobj 3590 0 obj <> endobj 3591 0 obj <> endobj 3592 0 obj <> endobj 3593 0 obj <> endobj 3594 0 obj <> endobj 3595 0 obj <> endobj 3596 0 obj <> endobj 3597 0 obj <> endobj 3598 0 obj <> endobj 3599 0 obj <> endobj 3600 0 obj <> endobj 3601 0 obj <> endobj 3602 0 obj <> endobj 3603 0 obj <> endobj 3604 0 obj <> endobj 3605 0 obj <> endobj 3606 0 obj <> endobj 3607 0 obj <> endobj 3608 0 obj <> endobj 3609 0 obj <> endobj 3610 0 obj <> endobj 3611 0 obj <> endobj 3612 0 obj <> endobj 3613 0 obj <> endobj 3614 0 obj <> endobj 3615 0 obj <> endobj 3616 0 obj <> endobj 3617 0 obj <> endobj 3618 0 obj <> endobj 3619 0 obj <> endobj 3620 0 obj <> endobj 3621 0 obj <> endobj 3622 0 obj <> endobj 3623 0 obj <> endobj 3624 0 obj <> endobj 3625 0 obj <> endobj 3626 0 obj <> endobj 3627 0 obj <> endobj 3628 0 obj <> endobj 3629 0 obj <> endobj 3630 0 obj <> endobj 3631 0 obj <> endobj 3632 0 obj <> endobj 3633 0 obj <> endobj 3634 0 obj <> endobj 3635 0 obj <> endobj 3636 0 obj <> endobj 3637 0 obj <> endobj 3638 0 obj <> endobj 3639 0 obj <> endobj 3640 0 obj <> endobj 3641 0 obj <> endobj 3642 0 obj <> endobj 3643 0 obj <> endobj 3644 0 obj <> endobj 3645 0 obj <> endobj 3646 0 obj <> endobj 3647 0 obj <> endobj 3648 0 obj <> endobj 3649 0 obj <> endobj 3650 0 obj <> endobj 3651 0 obj <> endobj 3652 0 obj <> endobj 3653 0 obj <> endobj 3654 0 obj <> endobj 3655 0 obj <> endobj 3656 0 obj <> endobj 3657 0 obj <> endobj 3658 0 obj <> endobj 3659 0 obj <> endobj 3660 0 obj <> endobj 3661 0 obj <> endobj 3662 0 obj <> endobj 3663 0 obj <> endobj 3664 0 obj <> endobj 3665 0 obj <> endobj 3666 0 obj <> endobj 3667 0 obj <> endobj 3668 0 obj <> endobj 3669 0 obj <> endobj 3670 0 obj <> endobj 3671 0 obj <> endobj 3672 0 obj <> endobj 3673 0 obj <> endobj 3674 0 obj <> endobj 3675 0 obj <> endobj 3676 0 obj <> endobj 3677 0 obj <> endobj 3678 0 obj <> endobj 3679 0 obj <> endobj 3680 0 obj <> endobj 3681 0 obj <> endobj 3682 0 obj <> endobj 3683 0 obj <> endobj 3684 0 obj <> endobj 3685 0 obj <> endobj 3686 0 obj <> endobj 3687 0 obj <> endobj 3688 0 obj <> endobj 3689 0 obj <> endobj 3690 0 obj <> endobj 3691 0 obj <> endobj 3692 0 obj <> endobj 3693 0 obj <> endobj 3694 0 obj <> endobj 3695 0 obj <> endobj 3696 0 obj <> endobj 3697 0 obj <> endobj 3698 0 obj <> endobj 3699 0 obj <> endobj 3700 0 obj <> endobj 3701 0 obj <> endobj 3702 0 obj <> endobj 3703 0 obj <> endobj 3704 0 obj <> endobj 3705 0 obj <> endobj 3706 0 obj <> endobj 3707 0 obj <> endobj 3708 0 obj <> endobj 3709 0 obj <> endobj 3710 0 obj <> endobj 3711 0 obj <> endobj 3712 0 obj <> endobj 3713 0 obj <> endobj 3714 0 obj <> endobj 3715 0 obj <> endobj 3716 0 obj <> endobj 3717 0 obj <> endobj 3718 0 obj <> endobj 3719 0 obj <> endobj 3720 0 obj <> endobj 3721 0 obj <> endobj 3722 0 obj <> endobj 3723 0 obj <> endobj 3724 0 obj <> endobj 3725 0 obj <> endobj 3726 0 obj <> endobj 3727 0 obj <> endobj 3728 0 obj <> endobj 3729 0 obj <> endobj 3730 0 obj <> endobj 3731 0 obj <> endobj 3732 0 obj <> endobj 3733 0 obj <> endobj 3734 0 obj <> endobj 3735 0 obj <> endobj 3736 0 obj <> endobj 3737 0 obj <> endobj 3738 0 obj <> endobj 3739 0 obj <> endobj 3740 0 obj <> endobj 3741 0 obj <> endobj 3742 0 obj <> endobj 3743 0 obj <> endobj 3744 0 obj <> endobj 3745 0 obj <> endobj 3746 0 obj <> endobj 3747 0 obj <> endobj 3748 0 obj <> endobj 3749 0 obj <> endobj 3750 0 obj <> endobj 3751 0 obj <> endobj 3752 0 obj <> endobj 3753 0 obj <> endobj 3754 0 obj <> endobj 3755 0 obj <> endobj 3756 0 obj <> endobj 3757 0 obj <> endobj 3758 0 obj <> endobj 3759 0 obj <> endobj 3760 0 obj <> endobj 3761 0 obj <> endobj 3762 0 obj <> endobj 3763 0 obj <> endobj 3764 0 obj <> endobj 3765 0 obj <> endobj 3766 0 obj <> endobj 3767 0 obj <> endobj 3768 0 obj <> endobj 3769 0 obj <> endobj 3770 0 obj <> endobj 3771 0 obj <> endobj 3772 0 obj <> endobj 3773 0 obj <> endobj 3774 0 obj <> endobj 3775 0 obj <> endobj 3776 0 obj <> endobj 3777 0 obj <> endobj 3778 0 obj <> endobj 3779 0 obj <> endobj 3780 0 obj <> endobj 3781 0 obj <> endobj 3782 0 obj <> endobj 3783 0 obj <> endobj 3784 0 obj <> endobj 3785 0 obj <> endobj 3786 0 obj <> endobj 3787 0 obj <> endobj 3788 0 obj <> endobj 3789 0 obj <> endobj 3790 0 obj <> endobj 3791 0 obj <> endobj 3792 0 obj <> endobj 3793 0 obj <> endobj 3794 0 obj <> endobj 3795 0 obj <> endobj 3796 0 obj <> endobj 3797 0 obj <> endobj 3798 0 obj <> endobj 3799 0 obj <> endobj 3800 0 obj <> endobj 3801 0 obj <> endobj 3802 0 obj <> endobj 3803 0 obj <> endobj 3804 0 obj <> endobj 3805 0 obj <> endobj 3806 0 obj <> endobj 3807 0 obj <> endobj 3808 0 obj <> endobj 3809 0 obj <> endobj 3810 0 obj <> endobj 3811 0 obj <> endobj 3812 0 obj <> endobj 3813 0 obj <> endobj 3814 0 obj <> endobj 3815 0 obj <> endobj 3816 0 obj <> endobj 3817 0 obj <> endobj 3818 0 obj <> endobj 3819 0 obj <> endobj 3820 0 obj <> endobj 3821 0 obj <> endobj 3822 0 obj <> endobj 3823 0 obj <> endobj 3824 0 obj <> endobj 3825 0 obj <> endobj 3826 0 obj <> endobj 3827 0 obj <> endobj 3828 0 obj <> endobj 3829 0 obj <> endobj 3830 0 obj <> endobj 3831 0 obj <> endobj 3832 0 obj <> endobj 3833 0 obj <> endobj 3834 0 obj <> endobj 3835 0 obj <> endobj 3836 0 obj <> endobj 3837 0 obj <> endobj 3838 0 obj <> endobj 3839 0 obj <> endobj 3840 0 obj <> endobj 3841 0 obj <> endobj 3842 0 obj <> endobj 3843 0 obj <> endobj 3844 0 obj <> endobj 3845 0 obj <> endobj 3846 0 obj <> endobj 3847 0 obj <> endobj 3848 0 obj <> endobj 3849 0 obj <> endobj 3850 0 obj <> endobj 3851 0 obj <> endobj 3852 0 obj <> endobj 3853 0 obj <> endobj 3854 0 obj <> endobj 3855 0 obj <> endobj 3856 0 obj <> endobj 3857 0 obj <> endobj 3858 0 obj <> endobj 3859 0 obj <> endobj 3860 0 obj <> endobj 3861 0 obj <> endobj 3862 0 obj <> endobj 3863 0 obj <> endobj 3864 0 obj <> endobj 3865 0 obj <> endobj 3866 0 obj <> endobj 3867 0 obj <> endobj 3868 0 obj <> endobj 3869 0 obj <> endobj 3870 0 obj <> endobj 3871 0 obj <> endobj 3872 0 obj <> endobj 3873 0 obj <> endobj 3874 0 obj <> endobj 3875 0 obj <> endobj 3876 0 obj <> endobj 3877 0 obj <> endobj 3878 0 obj <> endobj 3879 0 obj <> endobj 3880 0 obj <> endobj 3881 0 obj <> endobj 3882 0 obj <> endobj 3883 0 obj <> endobj 3884 0 obj <> endobj 3885 0 obj <> endobj 3886 0 obj <> endobj 3887 0 obj <> endobj 3888 0 obj <> endobj 3889 0 obj <> endobj 3890 0 obj <> endobj 3891 0 obj <> endobj 3892 0 obj <> endobj 3893 0 obj <> endobj 3894 0 obj <> endobj 3895 0 obj <> endobj 3896 0 obj <> endobj 3897 0 obj <> endobj 3898 0 obj <> endobj 3899 0 obj <> endobj 3900 0 obj <> endobj 3901 0 obj <> endobj 3902 0 obj <> endobj 3903 0 obj <> endobj 3904 0 obj <> endobj 3905 0 obj <> endobj 3906 0 obj <> endobj 3907 0 obj <> endobj 3908 0 obj <> endobj 3909 0 obj <> endobj 3910 0 obj <> endobj 3911 0 obj <> endobj 3912 0 obj <> endobj 3913 0 obj <> endobj 3914 0 obj <> endobj 3915 0 obj <> endobj 3916 0 obj <> endobj 3917 0 obj <> endobj 3918 0 obj <> endobj 3919 0 obj <> endobj 3920 0 obj <> endobj 3921 0 obj <> endobj 3922 0 obj <> endobj 3923 0 obj <> endobj 3924 0 obj <> endobj 3925 0 obj <> endobj 3926 0 obj <> endobj 3927 0 obj <> endobj 3928 0 obj <> endobj 3929 0 obj <> endobj 3930 0 obj <> endobj 3931 0 obj <> endobj 3932 0 obj <> endobj 3933 0 obj <> endobj 3934 0 obj <> endobj 3935 0 obj <> endobj 3936 0 obj <> endobj 3937 0 obj <> endobj 3938 0 obj <> endobj 3939 0 obj <> endobj 3940 0 obj <> endobj 3941 0 obj <> endobj 3942 0 obj <> endobj 3943 0 obj <> endobj 3944 0 obj <> endobj 3945 0 obj <> endobj 3946 0 obj <> endobj 3947 0 obj <> endobj 3948 0 obj <> endobj 3949 0 obj <> endobj 3950 0 obj <> endobj 3951 0 obj <> endobj 3952 0 obj <> endobj 3953 0 obj <> endobj 3954 0 obj <> endobj 3955 0 obj <> endobj 3956 0 obj <> endobj 3957 0 obj <> endobj 3958 0 obj <> endobj 3959 0 obj <> endobj 3960 0 obj <> endobj 3961 0 obj <> endobj 3962 0 obj <> endobj 3963 0 obj <> endobj 3964 0 obj <> endobj 3965 0 obj <> endobj 3966 0 obj <> endobj 3967 0 obj <> endobj 3968 0 obj <> endobj 3969 0 obj <> endobj 3970 0 obj <> endobj 3971 0 obj <> endobj 3972 0 obj <> endobj 3973 0 obj <> endobj 3974 0 obj <> endobj 3975 0 obj <> endobj 3976 0 obj <> endobj 3977 0 obj <> endobj 3978 0 obj <> endobj 3979 0 obj <> endobj 3980 0 obj <> endobj 3981 0 obj <> endobj 3982 0 obj <> endobj 3983 0 obj <> endobj 3984 0 obj <> endobj 3985 0 obj <> endobj 3986 0 obj <> endobj 3987 0 obj <> endobj 3988 0 obj <> endobj 3989 0 obj <> endobj 3990 0 obj <> endobj 3991 0 obj <> endobj 3992 0 obj <> endobj 3993 0 obj <> endobj 3994 0 obj <> endobj 3995 0 obj <> endobj 3996 0 obj <> endobj 3997 0 obj <> endobj 3998 0 obj <> endobj 3999 0 obj <> endobj 4000 0 obj <> endobj 4001 0 obj <> endobj 4002 0 obj <> endobj 4003 0 obj <> endobj 4004 0 obj <> endobj 4005 0 obj <> endobj 4006 0 obj <> endobj 4007 0 obj <> endobj 4008 0 obj <> endobj 4009 0 obj <> endobj 4010 0 obj <> endobj 4011 0 obj <> endobj 4012 0 obj <> endobj 4013 0 obj <> endobj 4014 0 obj <> endobj 4015 0 obj <> endobj 4016 0 obj <> endobj 4017 0 obj <> endobj 4018 0 obj <> endobj 4019 0 obj <> endobj 4020 0 obj <> endobj 4021 0 obj <> endobj 4022 0 obj <> endobj 4023 0 obj <> endobj 4024 0 obj <> endobj 4025 0 obj <> endobj 4026 0 obj <> endobj 4027 0 obj <> endobj 4028 0 obj <> endobj 4029 0 obj <> endobj 4030 0 obj <> endobj 4031 0 obj <> endobj 4032 0 obj <> endobj 4033 0 obj <> endobj 4034 0 obj <> endobj 4035 0 obj <> endobj 4036 0 obj <> endobj 4037 0 obj <> endobj 4038 0 obj <> endobj 4039 0 obj <> endobj 4040 0 obj <> endobj 4041 0 obj <> endobj 4042 0 obj <> endobj 4043 0 obj <> endobj 4044 0 obj <> endobj 4045 0 obj <> endobj 4046 0 obj <> endobj 4047 0 obj <> endobj 4048 0 obj <> endobj 4049 0 obj <> endobj 4050 0 obj <> endobj 4051 0 obj <> endobj 4052 0 obj <> endobj 4053 0 obj <> endobj 4054 0 obj <> endobj 4055 0 obj <> endobj 4056 0 obj <> endobj 4057 0 obj <> endobj 4058 0 obj <> endobj 4059 0 obj <> endobj 4060 0 obj <> endobj 4061 0 obj <> endobj 4062 0 obj <> endobj 4063 0 obj <> endobj 4064 0 obj <> endobj 4065 0 obj <> endobj 4066 0 obj <> endobj 4067 0 obj <> endobj 4068 0 obj <> endobj 4069 0 obj <> endobj 4070 0 obj <> endobj 4071 0 obj <> endobj 4072 0 obj <> endobj 4073 0 obj <> endobj 4074 0 obj <> endobj 4075 0 obj <> endobj 4076 0 obj <> endobj 4077 0 obj <> endobj 4078 0 obj <> endobj 4079 0 obj <> endobj 4080 0 obj <> endobj 4081 0 obj <> endobj 4082 0 obj <> endobj 4083 0 obj <> endobj 4084 0 obj <> endobj 4085 0 obj <> endobj 4086 0 obj <> endobj 4087 0 obj <> endobj 4088 0 obj <> endobj 4089 0 obj <> endobj 4090 0 obj <> endobj 4091 0 obj <> endobj 4092 0 obj <> endobj 4093 0 obj <> endobj 4094 0 obj <> endobj 4095 0 obj <> endobj 4096 0 obj <> endobj 4097 0 obj <> endobj 4098 0 obj <> endobj 4099 0 obj <> endobj 4100 0 obj <> endobj 4101 0 obj <> endobj 4102 0 obj <> endobj 4103 0 obj <> endobj 4104 0 obj <> endobj 4105 0 obj <> endobj 4106 0 obj <> endobj 4107 0 obj <> endobj 4108 0 obj <> endobj 4109 0 obj <> endobj 4110 0 obj <> endobj 4111 0 obj <> endobj 4112 0 obj <> endobj 4113 0 obj <> endobj 4114 0 obj <> endobj 4115 0 obj <> endobj 4116 0 obj <> endobj 4117 0 obj <> endobj 4118 0 obj <> endobj 4119 0 obj <> endobj 4120 0 obj <> endobj 4121 0 obj <> endobj 4122 0 obj <> endobj 4123 0 obj <> endobj 4124 0 obj <> endobj 4125 0 obj <> endobj 4126 0 obj <> endobj 4127 0 obj <> endobj 4128 0 obj <> endobj 4129 0 obj <> endobj 4130 0 obj <> endobj 4131 0 obj <> endobj 4132 0 obj <> endobj 4133 0 obj <> endobj 4134 0 obj <> endobj 4135 0 obj <> endobj 4136 0 obj <> endobj 4137 0 obj <> endobj 4138 0 obj <> endobj 4139 0 obj <> endobj 4140 0 obj <> endobj 4141 0 obj <> endobj 4142 0 obj <> endobj 4143 0 obj <> endobj 4144 0 obj <> endobj 4145 0 obj <> endobj 4146 0 obj <> endobj 4147 0 obj <> endobj 4148 0 obj <> endobj 4149 0 obj <> endobj 4150 0 obj <> endobj 4151 0 obj <> endobj 4152 0 obj <> endobj 4153 0 obj <> endobj 4154 0 obj <> endobj 4155 0 obj <> endobj 4156 0 obj <> endobj 4157 0 obj <> endobj 4158 0 obj <> endobj 4159 0 obj <> endobj 4160 0 obj <> endobj 4161 0 obj <> endobj 4162 0 obj <> endobj 4163 0 obj <> endobj 4164 0 obj <> endobj 4165 0 obj <> endobj 4166 0 obj <> endobj 4167 0 obj <> endobj 4168 0 obj <> endobj 4169 0 obj <> endobj 4170 0 obj <> endobj 4171 0 obj <> endobj 4172 0 obj <> endobj 4173 0 obj <> endobj 4174 0 obj <> endobj 4175 0 obj <> endobj 4176 0 obj <> endobj 4177 0 obj <> endobj 4178 0 obj <> endobj 4179 0 obj <> endobj 4180 0 obj <> endobj 4181 0 obj <> endobj 4182 0 obj <> endobj 4183 0 obj <> endobj 4184 0 obj <> endobj 4185 0 obj <> endobj 4186 0 obj <> endobj 4187 0 obj <> endobj 4188 0 obj <> endobj 4189 0 obj <> endobj 4190 0 obj <> endobj 4191 0 obj <> endobj 4192 0 obj <> endobj 4193 0 obj <> endobj 4194 0 obj <> endobj 4195 0 obj <> endobj 4196 0 obj <> endobj 4197 0 obj <> endobj 4198 0 obj <> endobj 4199 0 obj <> endobj 4200 0 obj <> endobj 4201 0 obj <> endobj 4202 0 obj <> endobj 4203 0 obj <> endobj 4204 0 obj <> endobj 4205 0 obj <> endobj 4206 0 obj <> endobj 4207 0 obj <> endobj 4208 0 obj <> endobj 4209 0 obj <> endobj 4210 0 obj <> endobj 4211 0 obj <> endobj 4212 0 obj <> endobj 4213 0 obj <> endobj 4214 0 obj <> endobj 4215 0 obj <> endobj 4216 0 obj <> endobj 4217 0 obj <> endobj 4218 0 obj <> endobj 4219 0 obj <> endobj 4220 0 obj <> endobj 4221 0 obj <> endobj 4222 0 obj <> endobj 4223 0 obj <> endobj 4224 0 obj <> endobj 4225 0 obj <> endobj 4226 0 obj <> endobj 4227 0 obj <> endobj 4228 0 obj <> endobj 4229 0 obj <> endobj 4230 0 obj <> endobj 4231 0 obj <> endobj 4232 0 obj <> endobj 4233 0 obj <> endobj 4234 0 obj <> endobj 4235 0 obj <> endobj 4236 0 obj <> endobj 4237 0 obj <> endobj 4238 0 obj <> endobj 4239 0 obj <> endobj 4240 0 obj <> endobj 4241 0 obj <> endobj 4242 0 obj <> endobj 4243 0 obj <> endobj 4244 0 obj <> endobj 4245 0 obj <> endobj 4246 0 obj <> endobj 4247 0 obj <> endobj 4248 0 obj <> endobj 4249 0 obj <> endobj 4250 0 obj <> endobj 4251 0 obj <> endobj 4252 0 obj <> endobj 4253 0 obj <> endobj 4254 0 obj <> endobj 4255 0 obj <> endobj 4256 0 obj <> endobj 4257 0 obj <> endobj 4258 0 obj <> endobj 4259 0 obj <> endobj 4260 0 obj <> endobj 4261 0 obj <> endobj 4262 0 obj <> endobj 4263 0 obj <> endobj 4264 0 obj <> endobj 4265 0 obj <> endobj 4266 0 obj <> endobj 4267 0 obj <> endobj 4268 0 obj <> endobj 4269 0 obj <> endobj 4270 0 obj <> endobj 4271 0 obj <> endobj 4272 0 obj <> endobj 4273 0 obj <> endobj 4274 0 obj <> endobj 4275 0 obj <> endobj 4276 0 obj <> endobj 4277 0 obj <> endobj 4278 0 obj <> endobj 4279 0 obj <> endobj 4280 0 obj <> endobj 4281 0 obj <> endobj 4282 0 obj <> endobj 4283 0 obj <> endobj 4284 0 obj <> endobj 4285 0 obj <> endobj 4286 0 obj <> endobj 4287 0 obj <> endobj 4288 0 obj <> endobj 4289 0 obj <> endobj 4290 0 obj <> endobj 4291 0 obj <> endobj 4292 0 obj <> endobj 4293 0 obj <> endobj 4294 0 obj <> endobj 4295 0 obj <> endobj 4296 0 obj <> endobj 4297 0 obj <> endobj 4298 0 obj <> endobj 4299 0 obj <> endobj 4300 0 obj <> endobj 4301 0 obj <> endobj 4302 0 obj <> endobj 4303 0 obj <> endobj 4304 0 obj <> endobj 4305 0 obj <> endobj 4306 0 obj <> endobj 4307 0 obj <> endobj 4308 0 obj <> endobj 4309 0 obj <> endobj 4310 0 obj <> endobj 4311 0 obj <> endobj 4312 0 obj <> endobj 4313 0 obj <> endobj 4314 0 obj <> endobj 4315 0 obj <> endobj 4316 0 obj <> endobj 4317 0 obj <> endobj 4318 0 obj <> endobj 4319 0 obj <> endobj 4320 0 obj <> endobj 4321 0 obj <> endobj 4322 0 obj <> endobj 4323 0 obj <> endobj 4324 0 obj <> endobj 4325 0 obj <> endobj 4326 0 obj <> endobj 4327 0 obj <> endobj 4328 0 obj <> endobj 4329 0 obj <> endobj 4330 0 obj <> endobj 4331 0 obj <> endobj 4332 0 obj <> endobj 4333 0 obj <> endobj 4334 0 obj <> endobj 4335 0 obj <> endobj 4336 0 obj <> endobj 4337 0 obj <> endobj 4338 0 obj <> endobj 4339 0 obj <> endobj 4340 0 obj <> endobj 4341 0 obj <> endobj 4342 0 obj <> endobj 4343 0 obj <> endobj 4344 0 obj <> endobj 4345 0 obj <> endobj 4346 0 obj <> endobj 4347 0 obj <> endobj 4348 0 obj <> endobj 4349 0 obj <> endobj 4350 0 obj <> endobj 4351 0 obj <> endobj 4352 0 obj <> endobj 4353 0 obj <> endobj 4354 0 obj <> endobj 4355 0 obj <> endobj 4356 0 obj <> endobj 4357 0 obj <> endobj 4358 0 obj <> endobj 4359 0 obj <> endobj 4360 0 obj <> endobj 4361 0 obj <> endobj 4362 0 obj <> endobj 4363 0 obj <> endobj 4364 0 obj <> endobj 4365 0 obj <> endobj 4366 0 obj <> endobj 4367 0 obj <> endobj 4368 0 obj <> endobj 4369 0 obj <> endobj 4370 0 obj <> endobj 4371 0 obj <> endobj 4372 0 obj <> endobj 4373 0 obj <> endobj 4374 0 obj <> endobj 4375 0 obj <> endobj 4376 0 obj <> endobj 4377 0 obj <> endobj 4378 0 obj <> endobj 4379 0 obj <> endobj 4380 0 obj <> endobj 4381 0 obj <> endobj 4382 0 obj <> endobj 4383 0 obj <> endobj 4384 0 obj <> endobj 4385 0 obj <> endobj 4386 0 obj <> endobj 4387 0 obj <> endobj 4388 0 obj <> endobj 4389 0 obj <> endobj 4390 0 obj <> endobj 4391 0 obj <> endobj 4392 0 obj <> endobj 4393 0 obj <> endobj 4394 0 obj <> endobj 4395 0 obj <> endobj 4396 0 obj <> endobj 4397 0 obj <> endobj 4398 0 obj <> endobj 4399 0 obj <> endobj 4400 0 obj <> endobj 4401 0 obj <> endobj 4402 0 obj <> endobj 4403 0 obj <> endobj 4404 0 obj <> endobj 4405 0 obj <> endobj 4406 0 obj <> endobj 4407 0 obj <> endobj 4408 0 obj <> endobj 4409 0 obj <> endobj 4410 0 obj <> endobj 4411 0 obj <> endobj 4412 0 obj <> endobj 4413 0 obj <> endobj 4414 0 obj <> endobj 4415 0 obj <> endobj 4416 0 obj <> endobj 4417 0 obj <> endobj 4418 0 obj <> endobj 4419 0 obj <> endobj 4420 0 obj <> endobj 4421 0 obj <> endobj 4422 0 obj <> endobj 4423 0 obj <> endobj 4424 0 obj <> endobj 4425 0 obj <> endobj 4426 0 obj <> endobj 4427 0 obj <> endobj 4428 0 obj <> endobj 4429 0 obj <> endobj 4430 0 obj <> endobj 4431 0 obj <> endobj 4432 0 obj <> endobj 4433 0 obj <> endobj 4434 0 obj <> endobj 4435 0 obj <> endobj 4436 0 obj <> endobj 4437 0 obj <> endobj 4438 0 obj <> endobj 4439 0 obj <> endobj 4440 0 obj <> endobj 4441 0 obj <> endobj 4442 0 obj <> endobj 4443 0 obj <> endobj 4444 0 obj <> endobj 4445 0 obj <> endobj 4446 0 obj <> endobj 4447 0 obj <> endobj 4448 0 obj <> endobj 4449 0 obj <> endobj 4450 0 obj <> endobj 4451 0 obj <> endobj 4452 0 obj <> endobj 4453 0 obj <> endobj 4454 0 obj <> endobj 4455 0 obj <> endobj 4456 0 obj <> endobj 4457 0 obj <> endobj 4458 0 obj <> endobj 4459 0 obj <> endobj 4460 0 obj <> endobj 4461 0 obj <> endobj 4462 0 obj <> endobj 4463 0 obj <> endobj 4464 0 obj <> endobj 4465 0 obj <> endobj 4466 0 obj <> endobj 4467 0 obj <> endobj 4468 0 obj <> endobj 4469 0 obj <> endobj 4470 0 obj <> endobj 4471 0 obj <> endobj 4472 0 obj <> endobj 4473 0 obj <> endobj 4474 0 obj <> endobj 4475 0 obj <> endobj 4476 0 obj <> endobj 4477 0 obj <> endobj 4478 0 obj <> endobj 4479 0 obj <> endobj 4480 0 obj <> endobj 4481 0 obj <> endobj 4482 0 obj <> endobj 4483 0 obj <> endobj 4484 0 obj <> endobj 4485 0 obj <> endobj 4486 0 obj <> endobj 4487 0 obj <> endobj 4488 0 obj <> endobj 4489 0 obj <> endobj 4490 0 obj <> endobj 4491 0 obj <> endobj 4492 0 obj <> endobj 4493 0 obj <> endobj 4494 0 obj <> endobj 4495 0 obj <> endobj 4496 0 obj <> endobj 4497 0 obj <> endobj 4498 0 obj <> endobj 4499 0 obj <> endobj 4500 0 obj <> endobj 4501 0 obj <> endobj 4502 0 obj <> endobj 4503 0 obj <> endobj 4504 0 obj <> endobj 4505 0 obj <> endobj 4506 0 obj <> endobj 4507 0 obj <> endobj 4508 0 obj <> endobj 4509 0 obj <> endobj 4510 0 obj <> endobj 4511 0 obj <> endobj 4512 0 obj <> endobj 4513 0 obj <> endobj 4514 0 obj <> endobj 4515 0 obj <> endobj 4516 0 obj <> endobj 4517 0 obj <> endobj 4518 0 obj <> endobj 4519 0 obj <> endobj 4520 0 obj <> endobj 4521 0 obj <> endobj 4522 0 obj <> endobj 4523 0 obj <> endobj 4524 0 obj <> endobj 4525 0 obj <> endobj 4526 0 obj <> endobj 4527 0 obj <> endobj 4528 0 obj <> endobj 4529 0 obj <> endobj 4530 0 obj <> endobj 4531 0 obj <> endobj 4532 0 obj <> endobj 4533 0 obj <> endobj 4534 0 obj <> endobj 4535 0 obj <> endobj 4536 0 obj <> endobj 4537 0 obj <> endobj 4538 0 obj <> endobj 4539 0 obj <> endobj 4540 0 obj <> endobj 4541 0 obj <> endobj 4542 0 obj <> endobj 4543 0 obj <> endobj 4544 0 obj <> endobj 4545 0 obj <> endobj 4546 0 obj <> endobj 4547 0 obj <> endobj 4548 0 obj <> endobj 4549 0 obj <> endobj 4550 0 obj <> endobj 4551 0 obj <> endobj 4552 0 obj <> endobj 4553 0 obj <> endobj 4554 0 obj <> endobj 4555 0 obj <> endobj 4556 0 obj <> endobj 4557 0 obj <> endobj 4558 0 obj <> endobj 4559 0 obj <> endobj 4560 0 obj <> endobj 4561 0 obj <> endobj 4562 0 obj <> endobj 4563 0 obj <> endobj 4564 0 obj <> endobj 4565 0 obj <> endobj 4566 0 obj <> endobj 4567 0 obj <> endobj 4568 0 obj <> endobj 4569 0 obj <> endobj 4570 0 obj <> endobj 4571 0 obj <> endobj 4572 0 obj <> endobj 4573 0 obj <> endobj 4574 0 obj <> endobj 4575 0 obj <> endobj 4576 0 obj <> endobj 4577 0 obj <> endobj 4578 0 obj <> endobj 4579 0 obj <> endobj 4580 0 obj <> endobj 4581 0 obj <> endobj 4582 0 obj <> endobj 4583 0 obj <> endobj 4584 0 obj <> endobj 4585 0 obj <> endobj 4586 0 obj <> endobj 4587 0 obj <> endobj 4588 0 obj <> endobj 4589 0 obj <> endobj 4590 0 obj <> endobj 4591 0 obj <> endobj 4592 0 obj <> endobj 4593 0 obj <> endobj 4594 0 obj <> endobj 4595 0 obj <> endobj 4596 0 obj <> endobj 4597 0 obj <> endobj 4598 0 obj <> endobj 4599 0 obj <> endobj 4600 0 obj <> endobj 4601 0 obj <> endobj 4602 0 obj <> endobj 4603 0 obj <> endobj 4604 0 obj <> endobj 4605 0 obj <> endobj 4606 0 obj <> endobj 4607 0 obj <> endobj 4608 0 obj <> endobj 4609 0 obj <> endobj 4610 0 obj <> endobj 4611 0 obj <> endobj 4612 0 obj <> endobj 4613 0 obj <> endobj 4614 0 obj <> endobj 4615 0 obj <> endobj 4616 0 obj <> endobj 4617 0 obj <> endobj 4618 0 obj <> endobj 4619 0 obj <> endobj 4620 0 obj <> endobj 4621 0 obj <> endobj 4622 0 obj <> endobj 4623 0 obj <> endobj 4624 0 obj <> endobj 4625 0 obj <> endobj 4626 0 obj <> endobj 4627 0 obj <> endobj 4628 0 obj <> endobj 4629 0 obj <> endobj 4630 0 obj <> endobj 4631 0 obj <> endobj 4632 0 obj <> endobj 4633 0 obj <> endobj 4634 0 obj <> endobj 4635 0 obj <> endobj 4636 0 obj <> endobj 4637 0 obj <> endobj 4638 0 obj <> endobj 4639 0 obj <> endobj 4640 0 obj <> endobj 4641 0 obj <> endobj 4642 0 obj <> endobj 4643 0 obj <> endobj 4644 0 obj <> endobj 4645 0 obj <> endobj 4646 0 obj <> endobj 4647 0 obj <> endobj 4648 0 obj <> endobj 4649 0 obj <> endobj 4650 0 obj <> endobj 4651 0 obj <> endobj 4652 0 obj <> endobj 4653 0 obj <> endobj 4654 0 obj <> endobj 4655 0 obj <> endobj 4656 0 obj <> endobj 4657 0 obj <> endobj 4658 0 obj <> endobj 4659 0 obj <> endobj 4660 0 obj <> endobj 4661 0 obj <> endobj 4662 0 obj <> endobj 4663 0 obj <> endobj 4664 0 obj <> endobj 4665 0 obj <> endobj 4666 0 obj <> endobj 4667 0 obj <> endobj 4668 0 obj <> endobj 4669 0 obj <> endobj 4670 0 obj <> endobj 4671 0 obj <> endobj 4672 0 obj <> endobj 4673 0 obj <> endobj 4674 0 obj <> endobj 4675 0 obj <> endobj 4676 0 obj <> endobj 4677 0 obj <> endobj 4678 0 obj <> endobj 4679 0 obj <> endobj 4680 0 obj <> endobj 4681 0 obj <> endobj 4682 0 obj <> endobj 4683 0 obj <> endobj 4684 0 obj <> endobj 4685 0 obj <> endobj 4686 0 obj <> endobj 4687 0 obj <> endobj 4688 0 obj <> endobj 4689 0 obj <> endobj 4690 0 obj <> endobj 4691 0 obj <> endobj 4692 0 obj <> endobj 4693 0 obj <> endobj 4694 0 obj <> endobj 4695 0 obj <> endobj 4696 0 obj <> endobj 4697 0 obj <> endobj 4698 0 obj <> endobj 4699 0 obj <> endobj 4700 0 obj <> endobj 4701 0 obj <> endobj 4702 0 obj <> endobj 4703 0 obj <> endobj 4704 0 obj <> endobj 4705 0 obj <> endobj 4706 0 obj <> endobj 4707 0 obj <> endobj 4708 0 obj <> endobj 4709 0 obj <> endobj 4710 0 obj <> endobj 4711 0 obj <> endobj 4712 0 obj <> endobj 4713 0 obj <> endobj 4714 0 obj <> endobj 4715 0 obj <> endobj 4716 0 obj <> endobj 4717 0 obj <> endobj 4718 0 obj <> endobj 4719 0 obj <> endobj 4720 0 obj <> endobj 4721 0 obj <> endobj 4722 0 obj <> endobj 4723 0 obj <> endobj 4724 0 obj <> endobj 4725 0 obj <> endobj 4726 0 obj <> endobj 4727 0 obj <> endobj 4728 0 obj <> endobj 4729 0 obj <> endobj 4730 0 obj <> endobj 4731 0 obj <> endobj 4732 0 obj <> endobj 4733 0 obj <> endobj 4734 0 obj <> endobj 4735 0 obj <> endobj 4736 0 obj <> endobj 4737 0 obj <> endobj 4738 0 obj <> endobj 4739 0 obj <> endobj 4740 0 obj <> endobj 4741 0 obj <> endobj 4742 0 obj <> endobj 4743 0 obj <> endobj 4744 0 obj <> endobj 4745 0 obj <> endobj 4746 0 obj <> endobj 4747 0 obj <> endobj 4748 0 obj <> endobj 4749 0 obj <> endobj 4750 0 obj <> endobj 4751 0 obj <> endobj 4752 0 obj <> endobj 4753 0 obj <> endobj 4754 0 obj <> endobj 4755 0 obj <> endobj 4756 0 obj <> endobj 4757 0 obj <> endobj 4758 0 obj <> endobj 4759 0 obj <> endobj 4760 0 obj <> endobj 4761 0 obj <> endobj 4762 0 obj <> endobj 4763 0 obj <> endobj 4764 0 obj <> endobj 4765 0 obj <> endobj 4766 0 obj <> endobj 4767 0 obj <> endobj 4768 0 obj <> endobj 4769 0 obj <> endobj 4770 0 obj <> endobj 4771 0 obj <> endobj 4772 0 obj <> endobj 4773 0 obj <> endobj 4774 0 obj <> endobj 4775 0 obj <> endobj 4776 0 obj <> endobj 4777 0 obj <> endobj 4778 0 obj <> endobj 4779 0 obj <> endobj 4780 0 obj <> endobj 4781 0 obj <> endobj 4782 0 obj <> endobj 4783 0 obj <> endobj 4784 0 obj <> endobj 4785 0 obj <> endobj 4786 0 obj <> endobj 4787 0 obj <> endobj 4788 0 obj <> endobj 4789 0 obj <> endobj 4790 0 obj <> endobj 4791 0 obj <> endobj 4792 0 obj <> endobj 4793 0 obj <> endobj 4794 0 obj <> endobj 4795 0 obj <> endobj 4796 0 obj <> endobj 4797 0 obj <> endobj 4798 0 obj <> endobj 4799 0 obj <> endobj 4800 0 obj <> endobj 4801 0 obj <> endobj 4802 0 obj <> endobj 4803 0 obj <> endobj 4804 0 obj <> endobj 4805 0 obj <> endobj 4806 0 obj <> endobj 4807 0 obj <> endobj 4808 0 obj <> endobj 4809 0 obj <> endobj 4810 0 obj <> endobj 4811 0 obj <> endobj 4812 0 obj <> endobj 4813 0 obj <> endobj 4814 0 obj <> endobj 4815 0 obj <> endobj 4816 0 obj <> endobj 4817 0 obj <> endobj 4818 0 obj <> endobj 4819 0 obj <> endobj 4820 0 obj <> endobj 4821 0 obj <> endobj 4822 0 obj <> endobj 4823 0 obj <> endobj 4824 0 obj <> endobj 4825 0 obj <> endobj 4826 0 obj <> endobj 4827 0 obj <> endobj 4828 0 obj <> endobj 4829 0 obj <> endobj 4830 0 obj <> endobj 4831 0 obj <> endobj 4832 0 obj <> endobj 4833 0 obj <> endobj 4834 0 obj <> endobj 4835 0 obj <> endobj 4836 0 obj <> endobj 4837 0 obj <> endobj 4838 0 obj <> endobj 4839 0 obj <> endobj 4840 0 obj <> endobj 4841 0 obj <> endobj 4842 0 obj <> endobj 4843 0 obj <> endobj 4844 0 obj <> endobj 4845 0 obj <> endobj 4846 0 obj <> endobj 4847 0 obj <> endobj 4848 0 obj <> endobj 4849 0 obj <> endobj 4850 0 obj <> endobj 4851 0 obj <> endobj 4852 0 obj <> endobj 4853 0 obj <> endobj 4854 0 obj <> endobj 4855 0 obj <> endobj 4856 0 obj <> endobj 4857 0 obj <> endobj 4858 0 obj <> endobj 4859 0 obj <> endobj 4860 0 obj <> endobj 4861 0 obj <> endobj 4862 0 obj <> endobj 4863 0 obj <> endobj 4864 0 obj <> endobj 4865 0 obj <> endobj 4866 0 obj <> endobj 4867 0 obj <> endobj 4868 0 obj <> endobj 4869 0 obj <> endobj 4870 0 obj <> endobj 4871 0 obj <> endobj 4872 0 obj <> endobj 4873 0 obj <> endobj 4874 0 obj <> endobj 4875 0 obj <> endobj 4876 0 obj <> endobj 4877 0 obj <>stream + + + + + Acrobat Distiller 10.1.16 (Windows) + + + FrameMaker 8.0 + 2017-04-12T16:25:02Z + 2017-04-12T16:25:02Z + + + application/pdf + + + LEF 5.8 C/C++ Programming Interface + + + + + Cadence Design Systems, Inc. + + + + + uuid:bb1ea66e-8c37-4cda-bae4-483259d49073 + uuid:1fed022b-da26-42a7-b651-22976db29262 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 4878 0 obj <> endobj xref +0 4879 +0000000000 65535 f +0000119704 00000 n +0000119845 00000 n +0000119956 00000 n +0000123982 00000 n +0000124046 00000 n +0000124479 00000 n +0000124690 00000 n +0000124973 00000 n +0000125319 00000 n +0000125424 00000 n +0000125530 00000 n +0000125635 00000 n +0000125740 00000 n +0000125843 00000 n +0000125949 00000 n +0000126054 00000 n +0000126160 00000 n +0000126266 00000 n +0000126372 00000 n +0000126478 00000 n +0000126581 00000 n +0000126685 00000 n +0000126791 00000 n +0000126897 00000 n +0000127003 00000 n +0000127108 00000 n +0000127213 00000 n +0000127319 00000 n +0000127425 00000 n +0000127530 00000 n +0000127636 00000 n +0000127739 00000 n +0000127845 00000 n +0000127951 00000 n +0000128057 00000 n +0000128163 00000 n +0000128269 00000 n +0000128369 00000 n +0000130585 00000 n +0000130961 00000 n +0000131067 00000 n +0000131168 00000 n +0000131273 00000 n +0000131379 00000 n +0000131485 00000 n +0000131588 00000 n +0000131691 00000 n +0000131797 00000 n +0000131903 00000 n +0000132009 00000 n +0000132115 00000 n +0000132221 00000 n +0000132326 00000 n +0000132432 00000 n +0000132538 00000 n +0000132644 00000 n +0000132750 00000 n +0000132856 00000 n +0000132962 00000 n +0000133067 00000 n +0000133173 00000 n +0000133278 00000 n +0000133384 00000 n +0000133490 00000 n +0000133596 00000 n +0000133702 00000 n +0000133808 00000 n +0000133914 00000 n +0000134019 00000 n +0000134125 00000 n +0000134231 00000 n +0000134337 00000 n +0000134437 00000 n +0000136616 00000 n +0000137025 00000 n +0000137126 00000 n +0000137232 00000 n +0000137338 00000 n +0000137443 00000 n +0000137549 00000 n +0000137655 00000 n +0000137761 00000 n +0000137867 00000 n +0000137973 00000 n +0000138079 00000 n +0000138185 00000 n +0000138291 00000 n +0000138397 00000 n +0000138502 00000 n +0000138608 00000 n +0000138714 00000 n +0000138820 00000 n +0000138923 00000 n +0000139029 00000 n +0000139135 00000 n +0000139241 00000 n +0000139347 00000 n +0000139453 00000 n +0000139558 00000 n +0000139664 00000 n +0000139771 00000 n +0000139878 00000 n +0000139984 00000 n +0000140091 00000 n +0000140198 00000 n +0000140305 00000 n +0000140412 00000 n +0000140519 00000 n +0000140625 00000 n +0000140731 00000 n +0000140832 00000 n +0000143300 00000 n +0000143743 00000 n +0000143850 00000 n +0000143957 00000 n +0000144064 00000 n +0000144171 00000 n +0000144278 00000 n +0000144385 00000 n +0000144492 00000 n +0000144599 00000 n +0000144705 00000 n +0000144812 00000 n +0000144919 00000 n +0000145026 00000 n +0000145133 00000 n +0000145240 00000 n +0000145346 00000 n +0000145453 00000 n +0000145560 00000 n +0000145667 00000 n +0000145773 00000 n +0000145880 00000 n +0000145987 00000 n +0000146094 00000 n +0000146201 00000 n +0000146305 00000 n +0000146412 00000 n +0000146519 00000 n +0000146626 00000 n +0000146733 00000 n +0000146840 00000 n +0000146947 00000 n +0000147053 00000 n +0000147159 00000 n +0000147266 00000 n +0000147373 00000 n +0000147480 00000 n +0000147585 00000 n +0000147686 00000 n +0000150257 00000 n +0000150676 00000 n +0000150782 00000 n +0000150888 00000 n +0000150995 00000 n +0000151099 00000 n +0000151206 00000 n +0000151313 00000 n +0000151420 00000 n +0000151524 00000 n +0000151631 00000 n +0000151733 00000 n +0000151840 00000 n +0000151946 00000 n +0000152053 00000 n +0000152160 00000 n +0000152266 00000 n +0000152373 00000 n +0000152480 00000 n +0000152586 00000 n +0000152693 00000 n +0000152800 00000 n +0000152907 00000 n +0000153014 00000 n +0000153121 00000 n +0000153228 00000 n +0000153334 00000 n +0000153441 00000 n +0000153548 00000 n +0000153655 00000 n +0000153762 00000 n +0000153869 00000 n +0000153976 00000 n +0000154082 00000 n +0000154187 00000 n +0000154288 00000 n +0000156711 00000 n +0000157154 00000 n +0000157261 00000 n +0000157368 00000 n +0000157475 00000 n +0000157581 00000 n +0000157687 00000 n +0000157793 00000 n +0000157900 00000 n +0000158004 00000 n +0000158111 00000 n +0000158218 00000 n +0000158325 00000 n +0000158432 00000 n +0000158539 00000 n +0000158646 00000 n +0000158750 00000 n +0000158857 00000 n +0000158964 00000 n +0000159068 00000 n +0000159175 00000 n +0000159282 00000 n +0000159389 00000 n +0000159496 00000 n +0000159603 00000 n +0000159710 00000 n +0000159817 00000 n +0000159924 00000 n +0000160030 00000 n +0000160137 00000 n +0000160244 00000 n +0000160351 00000 n +0000160457 00000 n +0000160564 00000 n +0000160671 00000 n +0000160777 00000 n +0000160883 00000 n +0000160988 00000 n +0000161089 00000 n +0000163667 00000 n +0000164110 00000 n +0000164217 00000 n +0000164324 00000 n +0000164431 00000 n +0000164538 00000 n +0000164645 00000 n +0000164751 00000 n +0000164857 00000 n +0000164964 00000 n +0000165071 00000 n +0000165175 00000 n +0000165282 00000 n +0000165389 00000 n +0000165496 00000 n +0000165603 00000 n +0000165710 00000 n +0000165817 00000 n +0000165924 00000 n +0000166031 00000 n +0000166135 00000 n +0000166242 00000 n +0000166346 00000 n +0000166453 00000 n +0000166560 00000 n +0000166667 00000 n +0000166774 00000 n +0000166878 00000 n +0000166985 00000 n +0000167089 00000 n +0000167196 00000 n +0000167303 00000 n +0000167410 00000 n +0000167517 00000 n +0000167624 00000 n +0000167731 00000 n +0000167837 00000 n +0000167942 00000 n +0000168043 00000 n +0000170531 00000 n +0000170974 00000 n +0000171081 00000 n +0000171187 00000 n +0000171291 00000 n +0000171397 00000 n +0000171504 00000 n +0000171611 00000 n +0000171718 00000 n +0000171825 00000 n +0000171932 00000 n +0000172039 00000 n +0000172146 00000 n +0000172253 00000 n +0000172360 00000 n +0000172466 00000 n +0000172573 00000 n +0000172679 00000 n +0000172786 00000 n +0000172893 00000 n +0000173000 00000 n +0000173107 00000 n +0000173214 00000 n +0000173321 00000 n +0000173428 00000 n +0000173535 00000 n +0000173642 00000 n +0000173749 00000 n +0000173856 00000 n +0000173963 00000 n +0000174070 00000 n +0000174177 00000 n +0000174284 00000 n +0000174391 00000 n +0000174498 00000 n +0000174604 00000 n +0000174710 00000 n +0000174815 00000 n +0000174916 00000 n +0000177273 00000 n +0000177716 00000 n +0000177823 00000 n +0000177930 00000 n +0000178037 00000 n +0000178144 00000 n +0000178251 00000 n +0000178358 00000 n +0000178465 00000 n +0000178572 00000 n +0000178679 00000 n +0000178786 00000 n +0000178892 00000 n +0000178999 00000 n +0000179106 00000 n +0000179213 00000 n +0000179320 00000 n +0000179427 00000 n +0000179533 00000 n +0000179640 00000 n +0000179747 00000 n +0000179854 00000 n +0000179961 00000 n +0000180068 00000 n +0000180175 00000 n +0000180280 00000 n +0000180387 00000 n +0000180494 00000 n +0000180600 00000 n +0000180707 00000 n +0000180814 00000 n +0000180921 00000 n +0000181028 00000 n +0000181134 00000 n +0000181241 00000 n +0000181348 00000 n +0000181455 00000 n +0000181560 00000 n +0000181661 00000 n +0000184176 00000 n +0000184619 00000 n +0000184726 00000 n +0000184833 00000 n +0000184940 00000 n +0000185047 00000 n +0000185154 00000 n +0000185261 00000 n +0000185368 00000 n +0000185475 00000 n +0000185582 00000 n +0000185688 00000 n +0000185795 00000 n +0000185902 00000 n +0000186009 00000 n +0000186116 00000 n +0000186223 00000 n +0000186327 00000 n +0000186433 00000 n +0000186539 00000 n +0000186646 00000 n +0000186750 00000 n +0000186857 00000 n +0000186963 00000 n +0000187070 00000 n +0000187177 00000 n +0000187284 00000 n +0000187391 00000 n +0000187498 00000 n +0000187605 00000 n +0000187712 00000 n +0000187819 00000 n +0000187926 00000 n +0000188033 00000 n +0000188139 00000 n +0000188246 00000 n +0000188352 00000 n +0000188457 00000 n +0000188558 00000 n +0000190983 00000 n +0000191426 00000 n +0000191532 00000 n +0000191639 00000 n +0000191745 00000 n +0000191852 00000 n +0000191959 00000 n +0000192066 00000 n +0000192173 00000 n +0000192279 00000 n +0000192385 00000 n +0000192492 00000 n +0000192599 00000 n +0000192706 00000 n +0000192813 00000 n +0000192919 00000 n +0000193026 00000 n +0000193133 00000 n +0000193239 00000 n +0000193346 00000 n +0000193453 00000 n +0000193557 00000 n +0000193664 00000 n +0000193771 00000 n +0000193877 00000 n +0000193984 00000 n +0000194090 00000 n +0000194196 00000 n +0000194303 00000 n +0000194410 00000 n +0000194516 00000 n +0000194623 00000 n +0000194730 00000 n +0000194837 00000 n +0000194944 00000 n +0000195051 00000 n +0000195158 00000 n +0000195263 00000 n +0000195364 00000 n +0000197910 00000 n +0000198353 00000 n +0000198460 00000 n +0000198566 00000 n +0000198673 00000 n +0000198780 00000 n +0000198887 00000 n +0000198994 00000 n +0000199101 00000 n +0000199207 00000 n +0000199311 00000 n +0000199417 00000 n +0000199524 00000 n +0000199631 00000 n +0000199738 00000 n +0000199843 00000 n +0000199950 00000 n +0000200057 00000 n +0000200164 00000 n +0000200271 00000 n +0000200378 00000 n +0000200485 00000 n +0000200591 00000 n +0000200698 00000 n +0000200805 00000 n +0000200911 00000 n +0000201017 00000 n +0000201124 00000 n +0000201228 00000 n +0000201335 00000 n +0000201442 00000 n +0000201548 00000 n +0000201655 00000 n +0000201762 00000 n +0000201869 00000 n +0000201975 00000 n +0000202082 00000 n +0000202187 00000 n +0000202288 00000 n +0000204831 00000 n +0000205210 00000 n +0000205317 00000 n +0000205423 00000 n +0000205529 00000 n +0000205636 00000 n +0000205742 00000 n +0000205849 00000 n +0000205956 00000 n +0000206063 00000 n +0000206170 00000 n +0000206277 00000 n +0000206383 00000 n +0000206490 00000 n +0000206597 00000 n +0000206704 00000 n +0000206810 00000 n +0000206915 00000 n +0000207023 00000 n +0000207131 00000 n +0000207238 00000 n +0000207346 00000 n +0000207451 00000 n +0000207559 00000 n +0000207666 00000 n +0000207774 00000 n +0000207879 00000 n +0000207985 00000 n +0000208092 00000 n +0000208200 00000 n +0000208301 00000 n +0000210366 00000 n +0000210513 00000 n +0000210614 00000 n +0000211065 00000 n +0000211260 00000 n +0000211408 00000 n +0000211556 00000 n +0000211705 00000 n +0000211852 00000 n +0000211998 00000 n +0000212135 00000 n +0000214287 00000 n +0000214434 00000 n +0000214571 00000 n +0000215765 00000 n +0000215960 00000 n +0000216067 00000 n +0000216173 00000 n +0000216280 00000 n +0000216386 00000 n +0000216493 00000 n +0000216618 00000 n +0000218760 00000 n +0000218907 00000 n +0000219032 00000 n +0000221780 00000 n +0000221951 00000 n +0000222081 00000 n +0000222234 00000 n +0000222497 00000 n +0000225051 00000 n +0000225143 00000 n +0000225498 00000 n +0000225849 00000 n +0000226209 00000 n +0000226550 00000 n +0000226908 00000 n +0000227258 00000 n +0000227608 00000 n +0000227953 00000 n +0000228100 00000 n +0000228213 00000 n +0000229011 00000 n +0000229278 00000 n +0000229382 00000 n +0000229489 00000 n +0000229596 00000 n +0000229703 00000 n +0000229810 00000 n +0000229917 00000 n +0000230021 00000 n +0000230128 00000 n +0000230235 00000 n +0000230342 00000 n +0000230449 00000 n +0000230556 00000 n +0000230660 00000 n +0000230767 00000 n +0000230892 00000 n +0000232740 00000 n +0000232903 00000 n +0000233143 00000 n +0000233256 00000 n +0000235039 00000 n +0000235186 00000 n +0000235311 00000 n +0000236997 00000 n +0000237160 00000 n +0000237377 00000 n +0000237502 00000 n +0000239856 00000 n +0000240003 00000 n +0000240128 00000 n +0000241618 00000 n +0000241765 00000 n +0000241890 00000 n +0000243396 00000 n +0000243543 00000 n +0000243668 00000 n +0000244893 00000 n +0000245040 00000 n +0000245141 00000 n +0000245638 00000 n +0000245833 00000 n +0000246070 00000 n +0000246306 00000 n +0000246413 00000 n +0000246519 00000 n +0000246625 00000 n +0000246762 00000 n +0000248673 00000 n +0000248868 00000 n +0000248978 00000 n +0000249085 00000 n +0000249195 00000 n +0000249305 00000 n +0000249414 00000 n +0000249551 00000 n +0000252229 00000 n +0000252496 00000 n +0000252604 00000 n +0000252715 00000 n +0000252826 00000 n +0000252934 00000 n +0000253045 00000 n +0000253156 00000 n +0000253264 00000 n +0000253375 00000 n +0000253486 00000 n +0000253594 00000 n +0000253705 00000 n +0000253813 00000 n +0000253924 00000 n +0000254035 00000 n +0000254148 00000 n +0000255901 00000 n +0000256168 00000 n +0000256278 00000 n +0000256388 00000 n +0000256498 00000 n +0000256607 00000 n +0000256717 00000 n +0000256826 00000 n +0000256936 00000 n +0000257045 00000 n +0000257155 00000 n +0000257264 00000 n +0000257374 00000 n +0000257483 00000 n +0000257591 00000 n +0000257700 00000 n +0000257813 00000 n +0000259485 00000 n +0000259680 00000 n +0000259789 00000 n +0000259899 00000 n +0000260009 00000 n +0000260118 00000 n +0000260228 00000 n +0000260341 00000 n +0000262031 00000 n +0000262330 00000 n +0000262436 00000 n +0000262542 00000 n +0000262649 00000 n +0000262756 00000 n +0000262863 00000 n +0000262970 00000 n +0000263077 00000 n +0000263184 00000 n +0000263291 00000 n +0000263398 00000 n +0000263504 00000 n +0000263610 00000 n +0000263717 00000 n +0000263824 00000 n +0000263930 00000 n +0000264037 00000 n +0000264144 00000 n +0000264251 00000 n +0000264376 00000 n +0000266066 00000 n +0000266277 00000 n +0000266424 00000 n +0000266569 00000 n +0000266782 00000 n +0000266991 00000 n +0000267098 00000 n +0000267205 00000 n +0000267312 00000 n +0000267461 00000 n +0000269583 00000 n +0000269746 00000 n +0000269895 00000 n +0000270032 00000 n +0000271973 00000 n +0000272168 00000 n +0000272323 00000 n +0000272478 00000 n +0000272644 00000 n +0000272808 00000 n +0000272957 00000 n +0000273094 00000 n +0000275264 00000 n +0000275443 00000 n +0000275588 00000 n +0000275803 00000 n +0000276017 00000 n +0000276154 00000 n +0000277860 00000 n +0000278047 00000 n +0000278192 00000 n +0000278407 00000 n +0000278621 00000 n +0000278838 00000 n +0000278975 00000 n +0000280996 00000 n +0000281159 00000 n +0000281304 00000 n +0000281441 00000 n +0000283338 00000 n +0000283509 00000 n +0000283654 00000 n +0000283868 00000 n +0000284005 00000 n +0000285915 00000 n +0000286094 00000 n +0000286248 00000 n +0000286467 00000 n +0000286683 00000 n +0000286820 00000 n +0000288647 00000 n +0000288826 00000 n +0000288983 00000 n +0000289148 00000 n +0000289367 00000 n +0000289504 00000 n +0000291522 00000 n +0000291709 00000 n +0000291865 00000 n +0000292020 00000 n +0000292233 00000 n +0000292445 00000 n +0000292582 00000 n +0000294385 00000 n +0000294580 00000 n +0000294724 00000 n +0000294938 00000 n +0000295151 00000 n +0000295365 00000 n +0000295578 00000 n +0000295715 00000 n +0000297550 00000 n +0000297729 00000 n +0000297877 00000 n +0000298094 00000 n +0000298307 00000 n +0000298444 00000 n +0000300289 00000 n +0000300436 00000 n +0000300573 00000 n +0000302430 00000 n +0000302617 00000 n +0000302769 00000 n +0000302914 00000 n +0000303125 00000 n +0000303335 00000 n +0000303472 00000 n +0000305412 00000 n +0000305583 00000 n +0000305726 00000 n +0000305944 00000 n +0000306081 00000 n +0000307879 00000 n +0000308074 00000 n +0000308221 00000 n +0000308436 00000 n +0000308650 00000 n +0000308867 00000 n +0000309083 00000 n +0000309220 00000 n +0000311215 00000 n +0000311378 00000 n +0000311526 00000 n +0000311663 00000 n +0000313448 00000 n +0000313595 00000 n +0000313708 00000 n +0000314882 00000 n +0000315093 00000 n +0000315201 00000 n +0000315308 00000 n +0000315415 00000 n +0000315521 00000 n +0000315628 00000 n +0000315735 00000 n +0000315839 00000 n +0000315964 00000 n +0000318210 00000 n +0000318357 00000 n +0000318470 00000 n +0000320411 00000 n +0000320558 00000 n +0000320671 00000 n +0000321817 00000 n +0000322316 00000 n +0000322423 00000 n +0000322533 00000 n +0000322643 00000 n +0000322753 00000 n +0000322862 00000 n +0000322972 00000 n +0000323082 00000 n +0000323192 00000 n +0000323301 00000 n +0000323411 00000 n +0000323518 00000 n +0000323628 00000 n +0000323738 00000 n +0000323848 00000 n +0000323957 00000 n +0000324067 00000 n +0000324174 00000 n +0000324284 00000 n +0000324391 00000 n +0000324501 00000 n +0000324611 00000 n +0000324721 00000 n +0000324827 00000 n +0000324937 00000 n +0000325044 00000 n +0000325153 00000 n +0000325260 00000 n +0000325370 00000 n +0000325477 00000 n +0000325587 00000 n +0000325694 00000 n +0000325804 00000 n +0000325911 00000 n +0000326020 00000 n +0000326130 00000 n +0000326234 00000 n +0000326344 00000 n +0000326451 00000 n +0000326560 00000 n +0000326663 00000 n +0000326773 00000 n +0000326882 00000 n +0000326992 00000 n +0000327093 00000 n +0000329293 00000 n +0000329568 00000 n +0000329720 00000 n +0000329873 00000 n +0000330025 00000 n +0000330132 00000 n +0000330239 00000 n +0000330345 00000 n +0000330449 00000 n +0000330556 00000 n +0000330663 00000 n +0000330770 00000 n +0000330879 00000 n +0000330988 00000 n +0000331095 00000 n +0000331202 00000 n +0000331309 00000 n +0000331446 00000 n +0000333247 00000 n +0000333434 00000 n +0000333643 00000 n +0000333795 00000 n +0000333948 00000 n +0000334100 00000 n +0000334225 00000 n +0000335697 00000 n +0000335892 00000 n +0000336043 00000 n +0000336209 00000 n +0000336374 00000 n +0000336527 00000 n +0000336683 00000 n +0000336808 00000 n +0000338721 00000 n +0000338868 00000 n +0000338981 00000 n +0000340168 00000 n +0000340315 00000 n +0000340428 00000 n +0000341583 00000 n +0000341754 00000 n +0000341963 00000 n +0000342172 00000 n +0000342285 00000 n +0000343480 00000 n +0000343643 00000 n +0000343852 00000 n +0000343965 00000 n +0000345069 00000 n +0000345256 00000 n +0000345408 00000 n +0000345515 00000 n +0000345668 00000 n +0000345820 00000 n +0000345945 00000 n +0000347529 00000 n +0000347732 00000 n +0000347885 00000 n +0000348038 00000 n +0000348242 00000 n +0000348445 00000 n +0000348597 00000 n +0000348702 00000 n +0000348827 00000 n +0000350336 00000 n +0000350547 00000 n +0000350691 00000 n +0000350844 00000 n +0000350951 00000 n +0000351058 00000 n +0000351165 00000 n +0000351272 00000 n +0000351378 00000 n +0000351515 00000 n +0000353232 00000 n +0000353395 00000 n +0000353539 00000 n +0000353664 00000 n +0000354959 00000 n +0000355122 00000 n +0000355348 00000 n +0000355461 00000 n +0000356803 00000 n +0000356950 00000 n +0000357063 00000 n +0000358487 00000 n +0000358634 00000 n +0000358747 00000 n +0000360225 00000 n +0000360372 00000 n +0000360485 00000 n +0000361663 00000 n +0000361850 00000 n +0000362012 00000 n +0000362173 00000 n +0000362380 00000 n +0000362487 00000 n +0000362624 00000 n +0000364370 00000 n +0000364517 00000 n +0000364630 00000 n +0000365831 00000 n +0000366010 00000 n +0000366117 00000 n +0000366221 00000 n +0000366328 00000 n +0000366453 00000 n +0000367757 00000 n +0000367920 00000 n +0000368076 00000 n +0000368201 00000 n +0000369537 00000 n +0000369708 00000 n +0000369915 00000 n +0000370138 00000 n +0000370251 00000 n +0000371446 00000 n +0000371609 00000 n +0000371821 00000 n +0000371934 00000 n +0000373110 00000 n +0000373305 00000 n +0000373461 00000 n +0000373665 00000 n +0000373872 00000 n +0000374074 00000 n +0000374228 00000 n +0000374353 00000 n +0000375986 00000 n +0000376181 00000 n +0000376391 00000 n +0000376600 00000 n +0000376813 00000 n +0000377018 00000 n +0000377227 00000 n +0000377340 00000 n +0000378559 00000 n +0000378706 00000 n +0000378831 00000 n +0000380286 00000 n +0000380433 00000 n +0000380558 00000 n +0000382082 00000 n +0000382229 00000 n +0000382354 00000 n +0000383882 00000 n +0000384029 00000 n +0000384154 00000 n +0000385785 00000 n +0000385932 00000 n +0000386057 00000 n +0000387614 00000 n +0000387761 00000 n +0000387874 00000 n +0000388988 00000 n +0000389167 00000 n +0000389322 00000 n +0000389431 00000 n +0000389537 00000 n +0000389674 00000 n +0000391125 00000 n +0000391296 00000 n +0000391450 00000 n +0000391556 00000 n +0000391693 00000 n +0000393253 00000 n +0000393424 00000 n +0000393621 00000 n +0000393823 00000 n +0000393936 00000 n +0000395675 00000 n +0000395862 00000 n +0000396018 00000 n +0000396173 00000 n +0000396280 00000 n +0000396387 00000 n +0000396524 00000 n +0000398236 00000 n +0000398410 00000 n +0000398566 00000 n +0000398722 00000 n +0000398848 00000 n +0000400510 00000 n +0000400660 00000 n +0000400774 00000 n +0000402186 00000 n +0000402353 00000 n +0000402461 00000 n +0000402587 00000 n +0000404206 00000 n +0000404400 00000 n +0000404544 00000 n +0000404689 00000 n +0000404797 00000 n +0000404905 00000 n +0000405043 00000 n +0000406502 00000 n +0000406652 00000 n +0000406766 00000 n +0000408123 00000 n +0000408299 00000 n +0000408445 00000 n +0000408553 00000 n +0000408691 00000 n +0000410171 00000 n +0000410321 00000 n +0000410435 00000 n +0000411910 00000 n +0000412122 00000 n +0000412275 00000 n +0000412418 00000 n +0000412526 00000 n +0000412631 00000 n +0000412739 00000 n +0000412966 00000 n +0000413104 00000 n +0000414737 00000 n +0000414887 00000 n +0000415001 00000 n +0000416046 00000 n +0000416213 00000 n +0000416356 00000 n +0000416494 00000 n +0000418073 00000 n +0000418223 00000 n +0000418337 00000 n +0000419636 00000 n +0000419839 00000 n +0000420047 00000 n +0000420200 00000 n +0000420341 00000 n +0000420449 00000 n +0000420557 00000 n +0000420695 00000 n +0000422355 00000 n +0000422531 00000 n +0000422684 00000 n +0000422825 00000 n +0000422951 00000 n +0000424592 00000 n +0000424742 00000 n +0000424856 00000 n +0000426167 00000 n +0000426317 00000 n +0000426419 00000 n +0000426900 00000 n +0000427050 00000 n +0000427152 00000 n +0000428796 00000 n +0000428946 00000 n +0000429072 00000 n +0000430878 00000 n +0000431028 00000 n +0000431142 00000 n +0000432274 00000 n +0000432424 00000 n +0000432526 00000 n +0000433019 00000 n +0000433339 00000 n +0000433446 00000 n +0000433553 00000 n +0000433661 00000 n +0000433769 00000 n +0000433877 00000 n +0000433985 00000 n +0000434092 00000 n +0000434200 00000 n +0000434308 00000 n +0000434414 00000 n +0000434522 00000 n +0000434627 00000 n +0000434734 00000 n +0000434842 00000 n +0000434950 00000 n +0000435058 00000 n +0000435164 00000 n +0000435272 00000 n +0000435386 00000 n +0000437715 00000 n +0000437945 00000 n +0000438052 00000 n +0000438158 00000 n +0000438266 00000 n +0000438373 00000 n +0000438480 00000 n +0000438588 00000 n +0000438695 00000 n +0000438803 00000 n +0000438929 00000 n +0000440818 00000 n +0000440968 00000 n +0000441094 00000 n +0000442347 00000 n +0000442497 00000 n +0000442635 00000 n +0000444547 00000 n +0000444697 00000 n +0000444811 00000 n +0000446266 00000 n +0000446433 00000 n +0000446590 00000 n +0000446728 00000 n +0000448696 00000 n +0000448863 00000 n +0000449020 00000 n +0000449158 00000 n +0000450703 00000 n +0000450870 00000 n +0000451027 00000 n +0000451165 00000 n +0000453196 00000 n +0000453363 00000 n +0000453513 00000 n +0000453651 00000 n +0000455796 00000 n +0000455963 00000 n +0000456075 00000 n +0000456201 00000 n +0000457860 00000 n +0000458010 00000 n +0000458136 00000 n +0000459560 00000 n +0000459763 00000 n +0000459915 00000 n +0000460082 00000 n +0000460248 00000 n +0000460405 00000 n +0000460516 00000 n +0000460654 00000 n +0000462942 00000 n +0000463109 00000 n +0000463221 00000 n +0000463347 00000 n +0000465474 00000 n +0000465624 00000 n +0000465762 00000 n +0000467634 00000 n +0000467784 00000 n +0000467910 00000 n +0000469545 00000 n +0000469695 00000 n +0000469821 00000 n +0000471543 00000 n +0000471693 00000 n +0000471819 00000 n +0000473464 00000 n +0000473614 00000 n +0000473740 00000 n +0000475340 00000 n +0000475490 00000 n +0000475616 00000 n +0000477168 00000 n +0000477318 00000 n +0000477456 00000 n +0000479355 00000 n +0000479505 00000 n +0000479631 00000 n +0000481752 00000 n +0000481902 00000 n +0000482028 00000 n +0000483875 00000 n +0000484025 00000 n +0000484151 00000 n +0000485708 00000 n +0000485858 00000 n +0000485984 00000 n +0000487877 00000 n +0000488027 00000 n +0000488153 00000 n +0000490060 00000 n +0000490210 00000 n +0000490336 00000 n +0000492012 00000 n +0000492162 00000 n +0000492300 00000 n +0000494432 00000 n +0000494582 00000 n +0000494720 00000 n +0000497228 00000 n +0000497378 00000 n +0000497516 00000 n +0000499810 00000 n +0000499960 00000 n +0000500086 00000 n +0000501925 00000 n +0000502101 00000 n +0000502255 00000 n +0000502408 00000 n +0000502534 00000 n +0000503975 00000 n +0000504160 00000 n +0000504271 00000 n +0000504380 00000 n +0000504488 00000 n +0000504614 00000 n +0000506617 00000 n +0000506767 00000 n +0000506893 00000 n +0000508298 00000 n +0000508448 00000 n +0000508586 00000 n +0000510339 00000 n +0000510489 00000 n +0000510615 00000 n +0000512188 00000 n +0000512338 00000 n +0000512464 00000 n +0000514210 00000 n +0000514360 00000 n +0000514486 00000 n +0000516234 00000 n +0000516384 00000 n +0000516510 00000 n +0000518143 00000 n +0000518293 00000 n +0000518419 00000 n +0000519981 00000 n +0000520131 00000 n +0000520257 00000 n +0000521807 00000 n +0000521957 00000 n +0000522083 00000 n +0000523731 00000 n +0000523881 00000 n +0000524007 00000 n +0000525574 00000 n +0000525724 00000 n +0000525850 00000 n +0000527470 00000 n +0000527620 00000 n +0000527758 00000 n +0000529694 00000 n +0000529844 00000 n +0000529970 00000 n +0000531577 00000 n +0000531727 00000 n +0000531853 00000 n +0000533573 00000 n +0000533723 00000 n +0000533861 00000 n +0000535466 00000 n +0000535616 00000 n +0000535742 00000 n +0000537512 00000 n +0000537662 00000 n +0000537788 00000 n +0000539492 00000 n +0000539642 00000 n +0000539768 00000 n +0000541307 00000 n +0000541457 00000 n +0000541583 00000 n +0000543104 00000 n +0000543254 00000 n +0000543380 00000 n +0000544778 00000 n +0000544928 00000 n +0000545054 00000 n +0000546750 00000 n +0000546900 00000 n +0000547038 00000 n +0000548917 00000 n +0000549067 00000 n +0000549193 00000 n +0000551115 00000 n +0000551265 00000 n +0000551391 00000 n +0000552947 00000 n +0000553097 00000 n +0000553235 00000 n +0000555203 00000 n +0000555353 00000 n +0000555479 00000 n +0000557223 00000 n +0000557373 00000 n +0000557499 00000 n +0000559129 00000 n +0000559279 00000 n +0000559405 00000 n +0000560810 00000 n +0000560960 00000 n +0000561086 00000 n +0000562840 00000 n +0000562990 00000 n +0000563116 00000 n +0000565012 00000 n +0000565162 00000 n +0000565288 00000 n +0000566703 00000 n +0000566853 00000 n +0000566979 00000 n +0000568968 00000 n +0000569118 00000 n +0000569244 00000 n +0000571109 00000 n +0000571259 00000 n +0000571385 00000 n +0000573255 00000 n +0000573405 00000 n +0000573531 00000 n +0000575285 00000 n +0000575435 00000 n +0000575561 00000 n +0000577284 00000 n +0000577434 00000 n +0000577560 00000 n +0000579133 00000 n +0000579283 00000 n +0000579409 00000 n +0000580996 00000 n +0000581146 00000 n +0000581272 00000 n +0000582731 00000 n +0000582881 00000 n +0000583007 00000 n +0000584334 00000 n +0000584484 00000 n +0000584610 00000 n +0000586020 00000 n +0000586170 00000 n +0000586296 00000 n +0000587578 00000 n +0000587728 00000 n +0000587854 00000 n +0000589391 00000 n +0000589603 00000 n +0000589745 00000 n +0000589857 00000 n +0000589969 00000 n +0000590078 00000 n +0000590186 00000 n +0000590298 00000 n +0000590436 00000 n +0000592743 00000 n +0000592893 00000 n +0000593031 00000 n +0000594697 00000 n +0000594847 00000 n +0000594985 00000 n +0000596724 00000 n +0000596891 00000 n +0000597118 00000 n +0000597256 00000 n +0000599060 00000 n +0000599210 00000 n +0000599348 00000 n +0000601090 00000 n +0000601257 00000 n +0000601484 00000 n +0000601622 00000 n +0000603501 00000 n +0000603651 00000 n +0000603789 00000 n +0000605680 00000 n +0000605830 00000 n +0000605968 00000 n +0000607545 00000 n +0000607695 00000 n +0000607833 00000 n +0000609399 00000 n +0000609566 00000 n +0000609729 00000 n +0000609855 00000 n +0000611732 00000 n +0000611908 00000 n +0000612017 00000 n +0000612125 00000 n +0000612251 00000 n +0000613990 00000 n +0000614140 00000 n +0000614266 00000 n +0000616073 00000 n +0000616223 00000 n +0000616361 00000 n +0000618404 00000 n +0000618554 00000 n +0000618680 00000 n +0000620757 00000 n +0000620907 00000 n +0000621033 00000 n +0000622457 00000 n +0000622607 00000 n +0000622733 00000 n +0000624539 00000 n +0000624724 00000 n +0000624880 00000 n +0000624992 00000 n +0000625104 00000 n +0000625242 00000 n +0000627213 00000 n +0000627363 00000 n +0000627489 00000 n +0000628939 00000 n +0000629089 00000 n +0000629215 00000 n +0000630631 00000 n +0000630781 00000 n +0000630907 00000 n +0000632561 00000 n +0000632711 00000 n +0000632849 00000 n +0000634667 00000 n +0000634817 00000 n +0000634943 00000 n +0000636530 00000 n +0000636680 00000 n +0000636818 00000 n +0000638353 00000 n +0000638503 00000 n +0000638641 00000 n +0000640316 00000 n +0000640466 00000 n +0000640592 00000 n +0000641981 00000 n +0000642148 00000 n +0000642305 00000 n +0000642443 00000 n +0000644389 00000 n +0000644556 00000 n +0000644668 00000 n +0000644806 00000 n +0000646439 00000 n +0000646589 00000 n +0000646715 00000 n +0000648471 00000 n +0000648621 00000 n +0000648759 00000 n +0000650682 00000 n +0000650832 00000 n +0000650958 00000 n +0000652917 00000 n +0000653067 00000 n +0000653193 00000 n +0000654779 00000 n +0000654929 00000 n +0000655055 00000 n +0000656645 00000 n +0000656821 00000 n +0000656976 00000 n +0000657133 00000 n +0000657271 00000 n +0000659380 00000 n +0000659574 00000 n +0000659729 00000 n +0000659839 00000 n +0000659950 00000 n +0000660061 00000 n +0000660199 00000 n +0000662566 00000 n +0000662716 00000 n +0000662842 00000 n +0000664517 00000 n +0000664667 00000 n +0000664793 00000 n +0000666670 00000 n +0000666873 00000 n +0000666983 00000 n +0000667091 00000 n +0000667199 00000 n +0000667304 00000 n +0000667412 00000 n +0000667550 00000 n +0000669287 00000 n +0000669437 00000 n +0000669563 00000 n +0000671146 00000 n +0000671296 00000 n +0000671422 00000 n +0000673296 00000 n +0000673463 00000 n +0000673575 00000 n +0000673701 00000 n +0000675182 00000 n +0000675332 00000 n +0000675458 00000 n +0000677033 00000 n +0000677227 00000 n +0000677384 00000 n +0000677540 00000 n +0000677649 00000 n +0000677757 00000 n +0000677883 00000 n +0000679605 00000 n +0000679755 00000 n +0000679893 00000 n +0000681543 00000 n +0000681693 00000 n +0000681831 00000 n +0000683565 00000 n +0000683715 00000 n +0000683853 00000 n +0000685747 00000 n +0000685923 00000 n +0000686032 00000 n +0000686140 00000 n +0000686278 00000 n +0000687894 00000 n +0000688061 00000 n +0000688201 00000 n +0000688339 00000 n +0000690075 00000 n +0000690225 00000 n +0000690363 00000 n +0000691830 00000 n +0000691997 00000 n +0000692224 00000 n +0000692362 00000 n +0000694018 00000 n +0000694194 00000 n +0000694335 00000 n +0000694447 00000 n +0000694585 00000 n +0000696537 00000 n +0000696687 00000 n +0000696813 00000 n +0000698288 00000 n +0000698438 00000 n +0000698564 00000 n +0000700348 00000 n +0000700498 00000 n +0000700636 00000 n +0000702290 00000 n +0000702457 00000 n +0000702604 00000 n +0000702742 00000 n +0000704981 00000 n +0000705166 00000 n +0000705310 00000 n +0000705421 00000 n +0000705532 00000 n +0000705670 00000 n +0000707896 00000 n +0000708072 00000 n +0000708180 00000 n +0000708287 00000 n +0000708425 00000 n +0000710071 00000 n +0000710238 00000 n +0000710343 00000 n +0000710481 00000 n +0000712324 00000 n +0000712474 00000 n +0000712600 00000 n +0000714344 00000 n +0000714538 00000 n +0000714645 00000 n +0000714753 00000 n +0000714861 00000 n +0000714969 00000 n +0000715107 00000 n +0000717185 00000 n +0000717335 00000 n +0000717461 00000 n +0000719486 00000 n +0000719636 00000 n +0000719762 00000 n +0000721542 00000 n +0000721709 00000 n +0000721856 00000 n +0000721982 00000 n +0000723514 00000 n +0000723699 00000 n +0000723811 00000 n +0000723920 00000 n +0000724028 00000 n +0000724154 00000 n +0000726000 00000 n +0000726150 00000 n +0000726288 00000 n +0000728131 00000 n +0000728281 00000 n +0000728407 00000 n +0000730145 00000 n +0000730312 00000 n +0000730468 00000 n +0000730606 00000 n +0000732344 00000 n +0000732494 00000 n +0000732632 00000 n +0000734802 00000 n +0000734952 00000 n +0000735078 00000 n +0000736918 00000 n +0000737068 00000 n +0000737194 00000 n +0000739372 00000 n +0000739522 00000 n +0000739636 00000 n +0000740354 00000 n +0000740504 00000 n +0000740606 00000 n +0000741089 00000 n +0000741274 00000 n +0000741380 00000 n +0000741489 00000 n +0000741598 00000 n +0000741736 00000 n +0000743446 00000 n +0000743596 00000 n +0000743722 00000 n +0000745137 00000 n +0000745287 00000 n +0000745401 00000 n +0000745964 00000 n +0000746114 00000 n +0000746216 00000 n +0000746706 00000 n +0000746856 00000 n +0000746982 00000 n +0000748889 00000 n +0000749039 00000 n +0000749177 00000 n +0000751093 00000 n +0000751243 00000 n +0000751357 00000 n +0000752312 00000 n +0000752462 00000 n +0000752564 00000 n +0000753054 00000 n +0000753230 00000 n +0000753338 00000 n +0000753447 00000 n +0000753573 00000 n +0000754753 00000 n +0000754903 00000 n +0000755017 00000 n +0000756131 00000 n +0000756281 00000 n +0000756395 00000 n +0000757511 00000 n +0000757661 00000 n +0000757775 00000 n +0000759004 00000 n +0000759154 00000 n +0000759268 00000 n +0000760395 00000 n +0000760545 00000 n +0000760659 00000 n +0000761749 00000 n +0000761899 00000 n +0000762013 00000 n +0000763144 00000 n +0000763294 00000 n +0000763408 00000 n +0000764552 00000 n +0000764702 00000 n +0000764816 00000 n +0000765847 00000 n +0000765997 00000 n +0000766111 00000 n +0000767036 00000 n +0000767186 00000 n +0000767300 00000 n +0000768397 00000 n +0000768547 00000 n +0000768661 00000 n +0000769687 00000 n +0000769837 00000 n +0000769951 00000 n +0000770919 00000 n +0000771069 00000 n +0000771183 00000 n +0000772080 00000 n +0000772230 00000 n +0000772344 00000 n +0000773506 00000 n +0000773656 00000 n +0000773770 00000 n +0000774809 00000 n +0000774959 00000 n +0000775073 00000 n +0000776259 00000 n +0000776409 00000 n +0000776523 00000 n +0000777634 00000 n +0000777784 00000 n +0000777898 00000 n +0000779180 00000 n +0000779330 00000 n +0000779444 00000 n +0000780617 00000 n +0000780767 00000 n +0000780881 00000 n +0000782078 00000 n +0000782228 00000 n +0000782342 00000 n +0000783586 00000 n +0000783736 00000 n +0000783850 00000 n +0000784893 00000 n +0000785043 00000 n +0000785157 00000 n +0000786259 00000 n +0000786409 00000 n +0000786523 00000 n +0000787603 00000 n +0000787753 00000 n +0000787867 00000 n +0000788936 00000 n +0000789086 00000 n +0000789200 00000 n +0000790408 00000 n +0000790558 00000 n +0000790672 00000 n +0000791782 00000 n +0000791932 00000 n +0000792046 00000 n +0000793121 00000 n +0000793271 00000 n +0000793385 00000 n +0000794403 00000 n +0000794553 00000 n +0000794667 00000 n +0000795773 00000 n +0000795923 00000 n +0000796037 00000 n +0000797074 00000 n +0000797224 00000 n +0000797338 00000 n +0000798483 00000 n +0000798633 00000 n +0000798747 00000 n +0000799846 00000 n +0000799996 00000 n +0000800110 00000 n +0000801238 00000 n +0000801388 00000 n +0000801502 00000 n +0000802643 00000 n +0000802793 00000 n +0000802907 00000 n +0000804079 00000 n +0000804229 00000 n +0000804343 00000 n +0000805284 00000 n +0000805434 00000 n +0000805548 00000 n +0000806639 00000 n +0000806789 00000 n +0000806903 00000 n +0000807912 00000 n +0000808062 00000 n +0000808176 00000 n +0000809244 00000 n +0000809394 00000 n +0000809508 00000 n +0000810606 00000 n +0000810756 00000 n +0000810870 00000 n +0000811875 00000 n +0000812025 00000 n +0000812139 00000 n +0000813159 00000 n +0000813309 00000 n +0000813423 00000 n +0000814535 00000 n +0000814685 00000 n +0000814799 00000 n +0000815936 00000 n +0000816086 00000 n +0000816200 00000 n +0000817368 00000 n +0000817518 00000 n +0000817632 00000 n +0000818762 00000 n +0000818912 00000 n +0000819026 00000 n +0000820052 00000 n +0000820202 00000 n +0000820316 00000 n +0000821253 00000 n +0000821403 00000 n +0000821517 00000 n +0000822517 00000 n +0000822667 00000 n +0000822781 00000 n +0000823857 00000 n +0000824007 00000 n +0000824121 00000 n +0000825159 00000 n +0000825309 00000 n +0000825423 00000 n +0000826400 00000 n +0000826550 00000 n +0000826664 00000 n +0000827778 00000 n +0000827928 00000 n +0000828042 00000 n +0000829107 00000 n +0000829257 00000 n +0000829371 00000 n +0000830440 00000 n +0000830590 00000 n +0000830704 00000 n +0000831600 00000 n +0000831750 00000 n +0000831864 00000 n +0000832815 00000 n +0000832965 00000 n +0000833079 00000 n +0000833972 00000 n +0000834122 00000 n +0000834236 00000 n +0000835153 00000 n +0000835303 00000 n +0000835417 00000 n +0000836325 00000 n +0000836475 00000 n +0000836589 00000 n +0000837396 00000 n +0000837546 00000 n +0000837660 00000 n +0000838517 00000 n +0000838667 00000 n +0000838781 00000 n +0000839639 00000 n +0000839789 00000 n +0000839903 00000 n +0000840809 00000 n +0000840959 00000 n +0000841073 00000 n +0000841958 00000 n +0000842108 00000 n +0000842222 00000 n +0000843061 00000 n +0000843211 00000 n +0000843325 00000 n +0000844288 00000 n +0000844438 00000 n +0000844552 00000 n +0000845451 00000 n +0000845601 00000 n +0000845715 00000 n +0000846541 00000 n +0000846691 00000 n +0000846805 00000 n +0000847591 00000 n +0000847741 00000 n +0000847855 00000 n +0000848737 00000 n +0000848887 00000 n +0000849001 00000 n +0000849812 00000 n +0000849962 00000 n +0000850076 00000 n +0000850989 00000 n +0000851139 00000 n +0000851253 00000 n +0000852147 00000 n +0000852297 00000 n +0000852411 00000 n +0000853218 00000 n +0000853368 00000 n +0000853482 00000 n +0000854395 00000 n +0000854545 00000 n +0000854659 00000 n +0000855473 00000 n +0000855623 00000 n +0000855737 00000 n +0000856653 00000 n +0000856803 00000 n +0000856917 00000 n +0000857823 00000 n +0000857973 00000 n +0000858087 00000 n +0000858942 00000 n +0000859092 00000 n +0000859206 00000 n +0000860033 00000 n +0000860183 00000 n +0000860297 00000 n +0000861130 00000 n +0000861280 00000 n +0000861394 00000 n +0000862341 00000 n +0000862491 00000 n +0000862605 00000 n +0000863634 00000 n +0000863784 00000 n +0000863898 00000 n +0000864761 00000 n +0000864911 00000 n +0000865025 00000 n +0000865888 00000 n +0000866038 00000 n +0000866152 00000 n +0000867061 00000 n +0000867211 00000 n +0000867325 00000 n +0000868362 00000 n +0000868512 00000 n +0000868626 00000 n +0000869592 00000 n +0000869742 00000 n +0000869856 00000 n +0000870761 00000 n +0000870911 00000 n +0000871025 00000 n +0000871912 00000 n +0000872062 00000 n +0000872176 00000 n +0000873011 00000 n +0000873161 00000 n +0000873275 00000 n +0000874146 00000 n +0000874296 00000 n +0000874410 00000 n +0000875287 00000 n +0000875437 00000 n +0000875551 00000 n +0000876466 00000 n +0000876616 00000 n +0000876730 00000 n +0000877570 00000 n +0000877720 00000 n +0000877834 00000 n +0000878664 00000 n +0000878814 00000 n +0000878928 00000 n +0000879731 00000 n +0000879881 00000 n +0000879995 00000 n +0000881002 00000 n +0000881152 00000 n +0000881254 00000 n +0000881744 00000 n +0000882357 00000 n +0000882914 00000 n +0000887779 00000 n +0000887936 00000 n +0000888390 00000 n +0000888759 00000 n +0000892799 00000 n +0000893373 00000 n +0000894021 00000 n +0000899730 00000 n +0000900206 00000 n +0000900562 00000 n +0000903160 00000 n +0000903332 00000 n +0000903620 00000 n +0000903818 00000 n +0000904185 00000 n +0000904241 00000 n +0000904292 00000 n +0000904726 00000 n +0000905979 00000 n +0000907323 00000 n +0000908667 00000 n +0000910011 00000 n +0000911355 00000 n +0000912699 00000 n +0000914043 00000 n +0000915387 00000 n +0000916731 00000 n +0000918075 00000 n +0000919419 00000 n +0000920763 00000 n +0000922186 00000 n +0000923596 00000 n +0000925006 00000 n +0000926416 00000 n +0000927826 00000 n +0000929236 00000 n +0000930646 00000 n +0000932085 00000 n +0000933561 00000 n +0000935037 00000 n +0000936513 00000 n +0000937989 00000 n +0000939465 00000 n +0000940941 00000 n +0000942417 00000 n +0000943893 00000 n +0000945369 00000 n +0000946845 00000 n +0000948321 00000 n +0000950330 00000 n +0000953584 00000 n +0000956403 00000 n +0000959649 00000 n +0000962999 00000 n +0000966480 00000 n +0000969769 00000 n +0000971646 00000 n +0000972654 00000 n +0000973660 00000 n +0000974667 00000 n +0000975675 00000 n +0000976617 00000 n +0000976739 00000 n +0000976793 00000 n +0000976847 00000 n +0000976901 00000 n +0000976955 00000 n +0000977009 00000 n +0000977062 00000 n +0000977115 00000 n +0000977168 00000 n +0000977220 00000 n +0000977273 00000 n +0000977326 00000 n +0000977379 00000 n +0000977432 00000 n +0000977485 00000 n +0000977538 00000 n +0000977591 00000 n +0000977644 00000 n +0000977697 00000 n +0000977750 00000 n +0000977802 00000 n +0000977855 00000 n +0000977908 00000 n +0000977961 00000 n +0000978014 00000 n +0000978067 00000 n +0000978120 00000 n +0000978173 00000 n +0000978226 00000 n +0000978279 00000 n +0000978332 00000 n +0000978385 00000 n +0000978438 00000 n +0000978491 00000 n +0000978544 00000 n +0000978597 00000 n +0000978650 00000 n +0000978703 00000 n +0000978756 00000 n +0000978809 00000 n +0000978862 00000 n +0000978915 00000 n +0000978968 00000 n +0000979021 00000 n +0000979074 00000 n +0000979127 00000 n +0000979180 00000 n +0000979233 00000 n +0000979286 00000 n +0000979339 00000 n +0000979392 00000 n +0000979445 00000 n +0000979498 00000 n +0000979551 00000 n +0000979604 00000 n +0000979657 00000 n +0000979710 00000 n +0000979763 00000 n +0000979816 00000 n +0000979869 00000 n +0000979922 00000 n +0000979975 00000 n +0000980028 00000 n +0000980081 00000 n +0000980134 00000 n +0000980187 00000 n +0000980240 00000 n +0000980293 00000 n +0000980347 00000 n +0000980401 00000 n +0000980455 00000 n +0000980508 00000 n +0000980562 00000 n +0000980616 00000 n +0000980670 00000 n +0000980724 00000 n +0000980778 00000 n +0000980832 00000 n +0000980886 00000 n +0000980940 00000 n +0000980994 00000 n +0000981048 00000 n +0000981101 00000 n +0000981155 00000 n +0000981209 00000 n +0000981263 00000 n +0000981317 00000 n +0000981371 00000 n +0000981425 00000 n +0000981479 00000 n +0000981533 00000 n +0000981587 00000 n +0000981641 00000 n +0000981694 00000 n +0000981748 00000 n +0000981802 00000 n +0000981856 00000 n +0000981910 00000 n +0000981964 00000 n +0000982018 00000 n +0000982072 00000 n +0000982126 00000 n +0000982180 00000 n +0000982234 00000 n +0000982287 00000 n +0000982341 00000 n +0000982395 00000 n +0000982449 00000 n +0000982503 00000 n +0000982557 00000 n +0000982611 00000 n +0000982665 00000 n +0000982719 00000 n +0000982773 00000 n +0000982827 00000 n +0000982880 00000 n +0000982934 00000 n +0000982988 00000 n +0000983042 00000 n +0000983096 00000 n +0000983150 00000 n +0000983204 00000 n +0000983258 00000 n +0000983312 00000 n +0000983366 00000 n +0000983420 00000 n +0000983473 00000 n +0000983527 00000 n +0000983581 00000 n +0000983635 00000 n +0000983689 00000 n +0000983743 00000 n +0000983797 00000 n +0000983851 00000 n +0000983905 00000 n +0000983959 00000 n +0000984013 00000 n +0000984067 00000 n +0000984121 00000 n +0000984175 00000 n +0000984229 00000 n +0000984283 00000 n +0000984337 00000 n +0000984390 00000 n +0000984444 00000 n +0000984498 00000 n +0000984552 00000 n +0000984606 00000 n +0000984660 00000 n +0000984714 00000 n +0000984768 00000 n +0000984822 00000 n +0000984876 00000 n +0000984930 00000 n +0000984983 00000 n +0000985037 00000 n +0000985091 00000 n +0000985145 00000 n +0000985199 00000 n +0000985253 00000 n +0000985307 00000 n +0000985361 00000 n +0000985415 00000 n +0000985469 00000 n +0000985523 00000 n +0000985576 00000 n +0000985630 00000 n +0000985684 00000 n +0000985738 00000 n +0000985792 00000 n +0000985846 00000 n +0000985900 00000 n +0000985954 00000 n +0000986008 00000 n +0000986062 00000 n +0000986116 00000 n +0000986169 00000 n +0000986223 00000 n +0000986277 00000 n +0000986331 00000 n +0000986385 00000 n +0000986439 00000 n +0000986493 00000 n +0000986547 00000 n +0000986601 00000 n +0000986655 00000 n +0000986709 00000 n +0000986760 00000 n +0000986813 00000 n +0000986867 00000 n +0000986921 00000 n +0000986975 00000 n +0000987029 00000 n +0000987083 00000 n +0000987137 00000 n +0000987191 00000 n +0000987245 00000 n +0000987299 00000 n +0000987353 00000 n +0000987407 00000 n +0000987461 00000 n +0000987515 00000 n +0000987569 00000 n +0000987623 00000 n +0000987674 00000 n +0000987727 00000 n +0000987781 00000 n +0000987835 00000 n +0000987889 00000 n +0000987943 00000 n +0000987997 00000 n +0000988051 00000 n +0000988105 00000 n +0000988159 00000 n +0000988213 00000 n +0000988267 00000 n +0000988320 00000 n +0000988374 00000 n +0000988428 00000 n +0000988482 00000 n +0000988536 00000 n +0000988590 00000 n +0000988644 00000 n +0000988698 00000 n +0000988752 00000 n +0000988806 00000 n +0000988860 00000 n +0000988913 00000 n +0000988967 00000 n +0000989021 00000 n +0000989075 00000 n +0000989129 00000 n +0000989183 00000 n +0000989237 00000 n +0000989291 00000 n +0000989345 00000 n +0000989399 00000 n +0000989453 00000 n +0000989506 00000 n +0000989560 00000 n +0000989614 00000 n +0000989668 00000 n +0000989722 00000 n +0000989776 00000 n +0000989830 00000 n +0000989884 00000 n +0000989938 00000 n +0000989992 00000 n +0000990046 00000 n +0000990099 00000 n +0000990153 00000 n +0000990207 00000 n +0000990261 00000 n +0000990315 00000 n +0000990369 00000 n +0000990423 00000 n +0000990477 00000 n +0000990531 00000 n +0000990585 00000 n +0000990639 00000 n +0000990692 00000 n +0000990746 00000 n +0000990800 00000 n +0000990854 00000 n +0000990908 00000 n +0000990962 00000 n +0000991015 00000 n +0000991069 00000 n +0000991123 00000 n +0000991177 00000 n +0000991231 00000 n +0000991285 00000 n +0000991339 00000 n +0000991393 00000 n +0000991447 00000 n +0000991501 00000 n +0000991555 00000 n +0000991608 00000 n +0000991662 00000 n +0000991716 00000 n +0000991770 00000 n +0000991824 00000 n +0000991878 00000 n +0000991932 00000 n +0000991986 00000 n +0000992040 00000 n +0000992094 00000 n +0000992148 00000 n +0000992201 00000 n +0000992255 00000 n +0000992309 00000 n +0000992363 00000 n +0000992417 00000 n +0000992471 00000 n +0000992525 00000 n +0000992579 00000 n +0000992633 00000 n +0000992687 00000 n +0000992741 00000 n +0000992794 00000 n +0000992848 00000 n +0000992902 00000 n +0000992956 00000 n +0000993010 00000 n +0000993064 00000 n +0000993118 00000 n +0000993172 00000 n +0000993226 00000 n +0000993280 00000 n +0000993334 00000 n +0000993387 00000 n +0000993441 00000 n +0000993495 00000 n +0000993549 00000 n +0000993603 00000 n +0000993657 00000 n +0000993711 00000 n +0000993765 00000 n +0000993819 00000 n +0000993873 00000 n +0000993927 00000 n +0000993980 00000 n +0000994034 00000 n +0000994088 00000 n +0000994142 00000 n +0000994196 00000 n +0000994247 00000 n +0000994298 00000 n +0000994349 00000 n +0000994400 00000 n +0000994451 00000 n +0000994502 00000 n +0000994553 00000 n +0000994604 00000 n +0000994655 00000 n +0000994705 00000 n +0000994756 00000 n +0000994807 00000 n +0000994858 00000 n +0000994909 00000 n +0000994960 00000 n +0000995011 00000 n +0000995062 00000 n +0000995113 00000 n +0000995164 00000 n +0000995215 00000 n +0000995266 00000 n +0000995317 00000 n +0000995368 00000 n +0000995422 00000 n +0000995475 00000 n +0000995529 00000 n +0000995583 00000 n +0000995637 00000 n +0000995691 00000 n +0000995745 00000 n +0000995799 00000 n +0000995853 00000 n +0000995907 00000 n +0000995961 00000 n +0000996015 00000 n +0000996068 00000 n +0000996122 00000 n +0000996176 00000 n +0000996230 00000 n +0000996284 00000 n +0000996338 00000 n +0000996392 00000 n +0000996446 00000 n +0000996500 00000 n +0000996554 00000 n +0000996608 00000 n +0000996661 00000 n +0000996715 00000 n +0000996769 00000 n +0000996823 00000 n +0000996877 00000 n +0000996931 00000 n +0000996985 00000 n +0000997039 00000 n +0000997093 00000 n +0000997147 00000 n +0000997201 00000 n +0000997254 00000 n +0000997308 00000 n +0000997362 00000 n +0000997416 00000 n +0000997470 00000 n +0000997524 00000 n +0000997578 00000 n +0000997630 00000 n +0000997682 00000 n +0000997734 00000 n +0000997786 00000 n +0000997838 00000 n +0000997890 00000 n +0000997941 00000 n +0000997992 00000 n +0000998043 00000 n +0000998094 00000 n +0000998146 00000 n +0000998198 00000 n +0000998250 00000 n +0000998301 00000 n +0000998353 00000 n +0000998405 00000 n +0000998457 00000 n +0000998509 00000 n +0000998561 00000 n +0000998613 00000 n +0000998665 00000 n +0000998717 00000 n +0000998769 00000 n +0000998821 00000 n +0000998873 00000 n +0000998925 00000 n +0000998976 00000 n +0000999027 00000 n +0000999078 00000 n +0000999129 00000 n +0000999180 00000 n +0000999231 00000 n +0000999282 00000 n +0000999332 00000 n +0000999383 00000 n +0000999434 00000 n +0000999485 00000 n +0000999536 00000 n +0000999587 00000 n +0000999638 00000 n +0000999689 00000 n +0000999740 00000 n +0000999791 00000 n +0000999842 00000 n +0000999893 00000 n +0000999943 00000 n +0000999994 00000 n +0001000045 00000 n +0001000096 00000 n +0001000147 00000 n +0001000198 00000 n +0001000249 00000 n +0001000300 00000 n +0001000351 00000 n +0001000402 00000 n +0001000453 00000 n +0001000504 00000 n +0001000555 00000 n +0001000606 00000 n +0001000657 00000 n +0001000708 00000 n +0001000759 00000 n +0001000810 00000 n +0001000861 00000 n +0001000913 00000 n +0001000965 00000 n +0001001017 00000 n +0001001069 00000 n +0001001121 00000 n +0001001172 00000 n +0001001224 00000 n +0001001276 00000 n +0001001327 00000 n +0001001379 00000 n +0001001431 00000 n +0001001482 00000 n +0001001534 00000 n +0001001585 00000 n +0001001637 00000 n +0001001689 00000 n +0001001741 00000 n +0001001792 00000 n +0001001843 00000 n +0001001894 00000 n +0001001945 00000 n +0001001996 00000 n +0001002047 00000 n +0001002098 00000 n +0001002149 00000 n +0001002200 00000 n +0001002251 00000 n +0001002303 00000 n +0001002355 00000 n +0001002407 00000 n +0001002459 00000 n +0001002510 00000 n +0001002561 00000 n +0001002613 00000 n +0001002665 00000 n +0001002716 00000 n +0001002767 00000 n +0001002819 00000 n +0001002870 00000 n +0001002921 00000 n +0001002972 00000 n +0001003023 00000 n +0001003074 00000 n +0001003126 00000 n +0001003177 00000 n +0001003228 00000 n +0001003279 00000 n +0001003331 00000 n +0001003383 00000 n +0001003434 00000 n +0001003486 00000 n +0001003538 00000 n +0001003590 00000 n +0001003642 00000 n +0001003694 00000 n +0001003745 00000 n +0001003796 00000 n +0001003847 00000 n +0001003898 00000 n +0001003949 00000 n +0001004000 00000 n +0001004052 00000 n +0001004104 00000 n +0001004156 00000 n +0001004206 00000 n +0001004256 00000 n +0001004306 00000 n +0001004356 00000 n +0001004406 00000 n +0001004457 00000 n +0001004509 00000 n +0001004561 00000 n +0001004612 00000 n +0001004664 00000 n +0001004716 00000 n +0001004767 00000 n +0001004818 00000 n +0001004869 00000 n +0001004921 00000 n +0001004973 00000 n +0001005024 00000 n +0001005076 00000 n +0001005127 00000 n +0001005178 00000 n +0001005229 00000 n +0001005280 00000 n +0001005331 00000 n +0001005382 00000 n +0001005433 00000 n +0001005484 00000 n +0001005535 00000 n +0001005586 00000 n +0001005637 00000 n +0001005688 00000 n +0001005739 00000 n +0001005790 00000 n +0001005841 00000 n +0001005892 00000 n +0001005943 00000 n +0001005994 00000 n +0001006045 00000 n +0001006096 00000 n +0001006147 00000 n +0001006198 00000 n +0001006249 00000 n +0001006301 00000 n +0001006353 00000 n +0001006404 00000 n +0001006455 00000 n +0001006507 00000 n +0001006558 00000 n +0001006609 00000 n +0001006660 00000 n +0001006711 00000 n +0001006762 00000 n +0001006813 00000 n +0001006864 00000 n +0001006915 00000 n +0001006966 00000 n +0001007018 00000 n +0001007069 00000 n +0001007120 00000 n +0001007172 00000 n +0001007224 00000 n +0001007275 00000 n +0001007327 00000 n +0001007379 00000 n +0001007431 00000 n +0001007482 00000 n +0001007532 00000 n +0001007582 00000 n +0001007633 00000 n +0001007683 00000 n +0001007732 00000 n +0001007782 00000 n +0001007833 00000 n +0001007883 00000 n +0001007933 00000 n +0001007983 00000 n +0001008034 00000 n +0001008084 00000 n +0001008134 00000 n +0001008184 00000 n +0001008234 00000 n +0001008285 00000 n +0001008334 00000 n +0001008384 00000 n +0001008434 00000 n +0001008485 00000 n +0001008535 00000 n +0001008585 00000 n +0001008635 00000 n +0001008685 00000 n +0001008736 00000 n +0001008787 00000 n +0001008838 00000 n +0001008888 00000 n +0001008938 00000 n +0001008989 00000 n +0001009040 00000 n +0001009090 00000 n +0001009141 00000 n +0001009191 00000 n +0001009242 00000 n +0001009292 00000 n +0001009342 00000 n +0001009393 00000 n +0001009443 00000 n +0001009493 00000 n +0001009543 00000 n +0001009593 00000 n +0001009643 00000 n +0001009693 00000 n +0001009743 00000 n +0001009794 00000 n +0001009845 00000 n +0001009895 00000 n +0001009945 00000 n +0001009995 00000 n +0001010045 00000 n +0001010095 00000 n +0001010145 00000 n +0001010195 00000 n +0001010245 00000 n +0001010294 00000 n +0001010344 00000 n +0001010394 00000 n +0001010444 00000 n +0001010494 00000 n +0001010544 00000 n +0001010594 00000 n +0001010645 00000 n +0001010695 00000 n +0001010745 00000 n +0001010795 00000 n +0001010845 00000 n +0001010895 00000 n +0001010945 00000 n +0001010994 00000 n +0001011044 00000 n +0001011094 00000 n +0001011144 00000 n +0001011194 00000 n +0001011244 00000 n +0001011294 00000 n +0001011344 00000 n +0001011394 00000 n +0001011444 00000 n +0001011494 00000 n +0001011543 00000 n +0001011593 00000 n +0001011643 00000 n +0001011693 00000 n +0001011743 00000 n +0001011794 00000 n +0001011845 00000 n +0001011896 00000 n +0001011947 00000 n +0001011997 00000 n +0001012047 00000 n +0001012097 00000 n +0001012147 00000 n +0001012197 00000 n +0001012247 00000 n +0001012297 00000 n +0001012347 00000 n +0001012397 00000 n +0001012448 00000 n +0001012499 00000 n +0001012549 00000 n +0001012600 00000 n +0001012650 00000 n +0001012701 00000 n +0001012751 00000 n +0001012802 00000 n +0001012852 00000 n +0001012903 00000 n +0001012954 00000 n +0001013004 00000 n +0001013055 00000 n +0001013105 00000 n +0001013156 00000 n +0001013207 00000 n +0001013259 00000 n +0001013310 00000 n +0001013361 00000 n +0001013412 00000 n +0001013463 00000 n +0001013515 00000 n +0001013565 00000 n +0001013616 00000 n +0001013667 00000 n +0001013718 00000 n +0001013769 00000 n +0001013819 00000 n +0001013869 00000 n +0001013918 00000 n +0001013967 00000 n +0001014017 00000 n +0001014067 00000 n +0001014118 00000 n +0001014168 00000 n +0001014218 00000 n +0001014267 00000 n +0001014316 00000 n +0001014366 00000 n +0001014416 00000 n +0001014465 00000 n +0001014515 00000 n +0001014565 00000 n +0001014615 00000 n +0001014666 00000 n +0001014716 00000 n +0001014766 00000 n +0001014816 00000 n +0001014866 00000 n +0001014916 00000 n +0001014965 00000 n +0001015015 00000 n +0001015065 00000 n +0001015115 00000 n +0001015164 00000 n +0001015214 00000 n +0001015264 00000 n +0001015314 00000 n +0001015364 00000 n +0001015414 00000 n +0001015464 00000 n +0001015514 00000 n +0001015564 00000 n +0001015613 00000 n +0001015663 00000 n +0001015713 00000 n +0001015763 00000 n +0001015814 00000 n +0001015865 00000 n +0001015915 00000 n +0001015965 00000 n +0001016015 00000 n +0001016065 00000 n +0001016115 00000 n +0001016165 00000 n +0001016215 00000 n +0001016265 00000 n +0001016315 00000 n +0001016365 00000 n +0001016415 00000 n +0001016465 00000 n +0001016515 00000 n +0001016565 00000 n +0001016616 00000 n +0001016666 00000 n +0001016716 00000 n +0001016766 00000 n +0001016816 00000 n +0001016866 00000 n +0001016916 00000 n +0001016967 00000 n +0001017016 00000 n +0001017066 00000 n +0001017117 00000 n +0001017168 00000 n +0001017219 00000 n +0001017270 00000 n +0001017321 00000 n +0001017372 00000 n +0001017423 00000 n +0001017474 00000 n +0001017525 00000 n +0001017576 00000 n +0001017627 00000 n +0001017678 00000 n +0001017729 00000 n +0001017780 00000 n +0001017831 00000 n +0001017882 00000 n +0001017933 00000 n +0001017984 00000 n +0001018035 00000 n +0001018086 00000 n +0001018137 00000 n +0001018188 00000 n +0001018239 00000 n +0001018290 00000 n +0001018341 00000 n +0001018392 00000 n +0001018443 00000 n +0001018494 00000 n +0001018545 00000 n +0001018596 00000 n +0001018647 00000 n +0001018698 00000 n +0001018749 00000 n +0001018800 00000 n +0001018854 00000 n +0001018908 00000 n +0001018962 00000 n +0001019015 00000 n +0001019068 00000 n +0001019121 00000 n +0001019174 00000 n +0001019227 00000 n +0001019281 00000 n +0001019335 00000 n +0001019389 00000 n +0001019439 00000 n +0001019490 00000 n +0001019540 00000 n +0001019591 00000 n +0001019641 00000 n +0001019692 00000 n +0001019742 00000 n +0001019792 00000 n +0001019843 00000 n +0001019893 00000 n +0001019944 00000 n +0001019996 00000 n +0001020046 00000 n +0001020096 00000 n +0001020147 00000 n +0001020198 00000 n +0001020249 00000 n +0001020299 00000 n +0001020350 00000 n +0001020401 00000 n +0001020452 00000 n +0001020503 00000 n +0001020554 00000 n +0001020605 00000 n +0001020656 00000 n +0001020707 00000 n +0001020758 00000 n +0001020809 00000 n +0001020860 00000 n +0001020911 00000 n +0001020962 00000 n +0001021013 00000 n +0001021064 00000 n +0001021115 00000 n +0001021166 00000 n +0001021217 00000 n +0001021268 00000 n +0001021319 00000 n +0001021370 00000 n +0001021421 00000 n +0001021472 00000 n +0001021523 00000 n +0001021574 00000 n +0001021625 00000 n +0001021676 00000 n +0001021727 00000 n +0001021778 00000 n +0001021829 00000 n +0001021880 00000 n +0001021931 00000 n +0001021982 00000 n +0001022033 00000 n +0001022084 00000 n +0001022135 00000 n +0001022186 00000 n +0001022237 00000 n +0001022288 00000 n +0001022339 00000 n +0001022390 00000 n +0001022441 00000 n +0001022493 00000 n +0001022544 00000 n +0001022596 00000 n +0001022648 00000 n +0001022699 00000 n +0001022750 00000 n +0001022801 00000 n +0001022852 00000 n +0001022903 00000 n +0001022954 00000 n +0001023005 00000 n +0001023056 00000 n +0001023107 00000 n +0001023158 00000 n +0001023209 00000 n +0001023261 00000 n +0001023313 00000 n +0001023365 00000 n +0001023417 00000 n +0001023469 00000 n +0001023520 00000 n +0001023571 00000 n +0001023622 00000 n +0001023673 00000 n +0001023724 00000 n +0001023775 00000 n +0001023826 00000 n +0001023877 00000 n +0001023928 00000 n +0001023979 00000 n +0001024029 00000 n +0001024079 00000 n +0001024129 00000 n +0001024181 00000 n +0001024233 00000 n +0001024284 00000 n +0001024335 00000 n +0001024386 00000 n +0001024437 00000 n +0001024488 00000 n +0001024539 00000 n +0001024590 00000 n +0001024641 00000 n +0001024692 00000 n +0001024743 00000 n +0001024794 00000 n +0001024845 00000 n +0001024896 00000 n +0001024947 00000 n +0001024998 00000 n +0001025049 00000 n +0001025100 00000 n +0001025151 00000 n +0001025202 00000 n +0001025253 00000 n +0001025304 00000 n +0001025355 00000 n +0001025406 00000 n +0001025457 00000 n +0001025508 00000 n +0001025559 00000 n +0001025610 00000 n +0001025661 00000 n +0001025712 00000 n +0001025763 00000 n +0001025815 00000 n +0001025866 00000 n +0001025917 00000 n +0001025968 00000 n +0001026019 00000 n +0001026070 00000 n +0001026121 00000 n +0001026172 00000 n +0001026223 00000 n +0001026274 00000 n +0001026325 00000 n +0001026376 00000 n +0001026427 00000 n +0001026478 00000 n +0001026529 00000 n +0001026580 00000 n +0001026631 00000 n +0001026682 00000 n +0001026733 00000 n +0001026784 00000 n +0001026835 00000 n +0001026886 00000 n +0001026937 00000 n +0001026989 00000 n +0001027041 00000 n +0001027093 00000 n +0001027145 00000 n +0001027197 00000 n +0001027249 00000 n +0001027301 00000 n +0001027353 00000 n +0001027405 00000 n +0001027457 00000 n +0001027509 00000 n +0001027561 00000 n +0001027613 00000 n +0001027665 00000 n +0001027717 00000 n +0001027769 00000 n +0001027821 00000 n +0001027873 00000 n +0001027925 00000 n +0001027977 00000 n +0001028029 00000 n +0001028081 00000 n +0001028133 00000 n +0001028185 00000 n +0001028237 00000 n +0001028289 00000 n +0001028341 00000 n +0001028393 00000 n +0001028445 00000 n +0001028497 00000 n +0001028548 00000 n +0001028600 00000 n +0001028652 00000 n +0001028704 00000 n +0001028756 00000 n +0001028808 00000 n +0001028859 00000 n +0001028910 00000 n +0001028961 00000 n +0001029012 00000 n +0001029063 00000 n +0001029114 00000 n +0001029165 00000 n +0001029216 00000 n +0001029267 00000 n +0001029319 00000 n +0001029370 00000 n +0001029421 00000 n +0001029472 00000 n +0001029523 00000 n +0001029574 00000 n +0001029625 00000 n +0001029676 00000 n +0001029727 00000 n +0001029778 00000 n +0001029829 00000 n +0001029880 00000 n +0001029931 00000 n +0001029982 00000 n +0001030033 00000 n +0001030084 00000 n +0001030135 00000 n +0001030186 00000 n +0001030237 00000 n +0001030288 00000 n +0001030339 00000 n +0001030390 00000 n +0001030441 00000 n +0001030492 00000 n +0001030543 00000 n +0001030594 00000 n +0001030645 00000 n +0001030696 00000 n +0001030747 00000 n +0001030798 00000 n +0001030849 00000 n +0001030900 00000 n +0001030951 00000 n +0001031002 00000 n +0001031053 00000 n +0001031104 00000 n +0001031155 00000 n +0001031206 00000 n +0001031257 00000 n +0001031308 00000 n +0001031359 00000 n +0001031410 00000 n +0001031462 00000 n +0001031513 00000 n +0001031564 00000 n +0001031616 00000 n +0001031668 00000 n +0001031719 00000 n +0001031770 00000 n +0001031821 00000 n +0001031872 00000 n +0001031924 00000 n +0001031976 00000 n +0001032028 00000 n +0001032080 00000 n +0001032132 00000 n +0001032184 00000 n +0001032236 00000 n +0001032288 00000 n +0001032340 00000 n +0001032392 00000 n +0001032444 00000 n +0001032496 00000 n +0001032548 00000 n +0001032600 00000 n +0001032652 00000 n +0001032704 00000 n +0001032756 00000 n +0001032808 00000 n +0001032860 00000 n +0001032912 00000 n +0001032964 00000 n +0001033016 00000 n +0001033068 00000 n +0001033120 00000 n +0001033172 00000 n +0001033224 00000 n +0001033276 00000 n +0001033328 00000 n +0001033380 00000 n +0001033432 00000 n +0001033483 00000 n +0001033534 00000 n +0001033585 00000 n +0001033636 00000 n +0001033687 00000 n +0001033738 00000 n +0001033789 00000 n +0001033840 00000 n +0001033891 00000 n +0001033942 00000 n +0001033993 00000 n +0001034044 00000 n +0001034095 00000 n +0001034146 00000 n +0001034197 00000 n +0001034249 00000 n +0001034301 00000 n +0001034353 00000 n +0001034405 00000 n +0001034457 00000 n +0001034509 00000 n +0001034561 00000 n +0001034613 00000 n +0001034665 00000 n +0001034717 00000 n +0001034768 00000 n +0001034820 00000 n +0001034871 00000 n +0001034922 00000 n +0001034974 00000 n +0001035026 00000 n +0001035078 00000 n +0001035130 00000 n +0001035182 00000 n +0001035233 00000 n +0001035285 00000 n +0001035336 00000 n +0001035387 00000 n +0001035438 00000 n +0001035489 00000 n +0001035540 00000 n +0001035591 00000 n +0001035642 00000 n +0001035693 00000 n +0001035744 00000 n +0001035795 00000 n +0001035846 00000 n +0001035897 00000 n +0001035948 00000 n +0001035999 00000 n +0001036050 00000 n +0001036101 00000 n +0001036152 00000 n +0001036203 00000 n +0001036254 00000 n +0001036305 00000 n +0001036356 00000 n +0001036407 00000 n +0001036458 00000 n +0001036509 00000 n +0001036560 00000 n +0001036611 00000 n +0001036662 00000 n +0001036713 00000 n +0001036764 00000 n +0001036814 00000 n +0001036865 00000 n +0001036915 00000 n +0001036966 00000 n +0001037016 00000 n +0001037066 00000 n +0001037116 00000 n +0001037168 00000 n +0001037219 00000 n +0001037270 00000 n +0001037321 00000 n +0001037371 00000 n +0001037421 00000 n +0001037471 00000 n +0001037521 00000 n +0001037571 00000 n +0001037621 00000 n +0001037671 00000 n +0001037721 00000 n +0001037771 00000 n +0001037821 00000 n +0001037872 00000 n +0001037922 00000 n +0001037973 00000 n +0001038023 00000 n +0001038074 00000 n +0001038125 00000 n +0001038176 00000 n +0001038227 00000 n +0001038278 00000 n +0001038329 00000 n +0001038380 00000 n +0001038430 00000 n +0001038480 00000 n +0001038530 00000 n +0001038581 00000 n +0001038632 00000 n +0001038683 00000 n +0001038734 00000 n +0001038785 00000 n +0001038836 00000 n +0001038887 00000 n +0001038938 00000 n +0001038989 00000 n +0001039040 00000 n +0001039091 00000 n +0001039142 00000 n +0001039193 00000 n +0001039244 00000 n +0001039295 00000 n +0001039346 00000 n +0001039397 00000 n +0001039448 00000 n +0001039499 00000 n +0001039550 00000 n +0001039601 00000 n +0001039652 00000 n +0001039703 00000 n +0001039754 00000 n +0001039805 00000 n +0001039856 00000 n +0001039907 00000 n +0001039958 00000 n +0001040009 00000 n +0001040061 00000 n +0001040112 00000 n +0001040164 00000 n +0001040214 00000 n +0001040265 00000 n +0001040315 00000 n +0001040366 00000 n +0001040418 00000 n +0001040470 00000 n +0001040521 00000 n +0001040571 00000 n +0001040621 00000 n +0001040672 00000 n +0001040723 00000 n +0001040774 00000 n +0001040825 00000 n +0001040876 00000 n +0001040926 00000 n +0001040977 00000 n +0001041027 00000 n +0001041077 00000 n +0001041127 00000 n +0001041177 00000 n +0001041227 00000 n +0001041278 00000 n +0001041328 00000 n +0001041379 00000 n +0001041429 00000 n +0001041480 00000 n +0001041530 00000 n +0001041581 00000 n +0001041632 00000 n +0001041683 00000 n +0001041734 00000 n +0001041786 00000 n +0001041837 00000 n +0001041888 00000 n +0001041938 00000 n +0001041989 00000 n +0001042039 00000 n +0001042090 00000 n +0001042141 00000 n +0001042192 00000 n +0001042241 00000 n +0001042290 00000 n +0001042339 00000 n +0001042389 00000 n +0001042439 00000 n +0001042489 00000 n +0001042540 00000 n +0001042590 00000 n +0001042640 00000 n +0001042690 00000 n +0001042740 00000 n +0001042792 00000 n +0001042843 00000 n +0001042894 00000 n +0001042945 00000 n +0001042996 00000 n +0001043047 00000 n +0001043098 00000 n +0001043149 00000 n +0001043200 00000 n +0001043251 00000 n +0001043303 00000 n +0001043355 00000 n +0001043406 00000 n +0001043457 00000 n +0001043509 00000 n +0001043561 00000 n +0001043613 00000 n +0001043665 00000 n +0001043717 00000 n +0001043768 00000 n +0001043819 00000 n +0001043870 00000 n +0001043921 00000 n +0001043972 00000 n +0001044023 00000 n +0001044074 00000 n +0001044124 00000 n +0001044174 00000 n +0001044225 00000 n +0001044276 00000 n +0001044327 00000 n +0001044378 00000 n +0001044429 00000 n +0001044480 00000 n +0001044531 00000 n +0001044582 00000 n +0001044632 00000 n +0001044683 00000 n +0001044734 00000 n +0001044785 00000 n +0001044836 00000 n +0001044888 00000 n +0001044939 00000 n +0001044990 00000 n +0001045041 00000 n +0001045092 00000 n +0001045143 00000 n +0001045193 00000 n +0001045243 00000 n +0001045293 00000 n +0001045344 00000 n +0001045395 00000 n +0001045446 00000 n +0001045496 00000 n +0001045547 00000 n +0001045598 00000 n +0001045648 00000 n +0001045699 00000 n +0001045749 00000 n +0001045799 00000 n +0001045849 00000 n +0001045899 00000 n +0001045950 00000 n +0001046001 00000 n +0001046052 00000 n +0001046102 00000 n +0001046153 00000 n +0001046204 00000 n +0001046255 00000 n +0001046306 00000 n +0001046357 00000 n +0001046408 00000 n +0001046458 00000 n +0001046508 00000 n +0001046558 00000 n +0001046609 00000 n +0001046659 00000 n +0001046709 00000 n +0001046759 00000 n +0001046809 00000 n +0001046859 00000 n +0001046909 00000 n +0001046959 00000 n +0001047010 00000 n +0001047060 00000 n +0001047110 00000 n +0001047160 00000 n +0001047210 00000 n +0001047260 00000 n +0001047310 00000 n +0001047360 00000 n +0001047410 00000 n +0001047460 00000 n +0001047510 00000 n +0001047560 00000 n +0001047610 00000 n +0001047660 00000 n +0001047710 00000 n +0001047760 00000 n +0001047810 00000 n +0001047860 00000 n +0001047910 00000 n +0001047960 00000 n +0001048010 00000 n +0001048060 00000 n +0001048111 00000 n +0001048161 00000 n +0001048211 00000 n +0001048262 00000 n +0001048313 00000 n +0001048364 00000 n +0001048415 00000 n +0001048466 00000 n +0001048517 00000 n +0001048568 00000 n +0001048619 00000 n +0001048670 00000 n +0001048721 00000 n +0001048772 00000 n +0001048822 00000 n +0001048872 00000 n +0001048922 00000 n +0001048973 00000 n +0001049023 00000 n +0001049073 00000 n +0001049124 00000 n +0001049175 00000 n +0001049225 00000 n +0001049275 00000 n +0001049326 00000 n +0001049376 00000 n +0001049427 00000 n +0001049478 00000 n +0001049529 00000 n +0001049580 00000 n +0001049631 00000 n +0001049682 00000 n +0001049733 00000 n +0001049784 00000 n +0001049835 00000 n +0001049886 00000 n +0001049936 00000 n +0001049986 00000 n +0001050037 00000 n +0001050088 00000 n +0001050139 00000 n +0001050190 00000 n +0001050241 00000 n +0001050291 00000 n +0001050342 00000 n +0001050393 00000 n +0001050443 00000 n +0001050493 00000 n +0001050543 00000 n +0001050594 00000 n +0001050644 00000 n +0001050694 00000 n +0001050744 00000 n +0001050795 00000 n +0001050846 00000 n +0001050897 00000 n +0001050947 00000 n +0001050997 00000 n +0001051048 00000 n +0001051098 00000 n +0001051147 00000 n +0001051196 00000 n +0001051245 00000 n +0001051296 00000 n +0001051347 00000 n +0001051397 00000 n +0001051447 00000 n +0001051497 00000 n +0001051548 00000 n +0001051598 00000 n +0001051648 00000 n +0001051699 00000 n +0001051749 00000 n +0001051799 00000 n +0001051849 00000 n +0001051900 00000 n +0001051951 00000 n +0001052002 00000 n +0001052052 00000 n +0001052102 00000 n +0001052152 00000 n +0001052202 00000 n +0001052252 00000 n +0001052302 00000 n +0001052352 00000 n +0001052402 00000 n +0001052452 00000 n +0001052502 00000 n +0001052552 00000 n +0001052602 00000 n +0001052652 00000 n +0001052702 00000 n +0001052752 00000 n +0001052802 00000 n +0001052852 00000 n +0001052902 00000 n +0001052952 00000 n +0001053003 00000 n +0001053052 00000 n +0001053101 00000 n +0001053150 00000 n +0001053201 00000 n +0001053251 00000 n +0001053301 00000 n +0001053351 00000 n +0001053401 00000 n +0001053451 00000 n +0001053501 00000 n +0001053551 00000 n +0001053601 00000 n +0001053651 00000 n +0001053701 00000 n +0001053751 00000 n +0001053801 00000 n +0001053851 00000 n +0001053901 00000 n +0001053951 00000 n +0001054001 00000 n +0001054052 00000 n +0001054102 00000 n +0001054151 00000 n +0001054200 00000 n +0001054249 00000 n +0001054299 00000 n +0001054349 00000 n +0001054399 00000 n +0001054449 00000 n +0001054500 00000 n +0001054550 00000 n +0001054600 00000 n +0001054650 00000 n +0001054700 00000 n +0001054750 00000 n +0001054800 00000 n +0001054850 00000 n +0001054900 00000 n +0001054950 00000 n +0001055000 00000 n +0001055050 00000 n +0001055100 00000 n +0001055150 00000 n +0001055200 00000 n +0001055250 00000 n +0001055300 00000 n +0001055350 00000 n +0001055400 00000 n +0001055450 00000 n +0001055500 00000 n +0001055550 00000 n +0001055600 00000 n +0001055650 00000 n +0001055700 00000 n +0001055750 00000 n +0001055801 00000 n +0001055852 00000 n +0001055903 00000 n +0001055954 00000 n +0001056005 00000 n +0001056056 00000 n +0001056107 00000 n +0001056158 00000 n +0001056208 00000 n +0001056258 00000 n +0001056308 00000 n +0001056358 00000 n +0001056408 00000 n +0001056458 00000 n +0001056508 00000 n +0001056558 00000 n +0001056608 00000 n +0001056658 00000 n +0001056708 00000 n +0001056758 00000 n +0001056808 00000 n +0001056858 00000 n +0001056908 00000 n +0001056958 00000 n +0001057008 00000 n +0001057058 00000 n +0001057108 00000 n +0001057158 00000 n +0001057208 00000 n +0001057258 00000 n +0001057308 00000 n +0001057358 00000 n +0001057408 00000 n +0001057458 00000 n +0001057508 00000 n +0001057558 00000 n +0001057608 00000 n +0001057658 00000 n +0001057708 00000 n +0001057758 00000 n +0001057808 00000 n +0001057858 00000 n +0001057908 00000 n +0001057958 00000 n +0001058008 00000 n +0001058059 00000 n +0001058110 00000 n +0001058160 00000 n +0001058210 00000 n +0001058260 00000 n +0001058310 00000 n +0001058360 00000 n +0001058410 00000 n +0001058461 00000 n +0001058511 00000 n +0001058562 00000 n +0001058613 00000 n +0001058664 00000 n +0001058713 00000 n +0001058762 00000 n +0001058812 00000 n +0001058863 00000 n +0001058913 00000 n +0001058964 00000 n +0001059014 00000 n +0001059064 00000 n +0001059114 00000 n +0001059164 00000 n +0001059215 00000 n +0001059266 00000 n +0001059316 00000 n +0001059366 00000 n +0001059416 00000 n +0001059466 00000 n +0001059516 00000 n +0001059566 00000 n +0001059616 00000 n +0001059666 00000 n +0001059716 00000 n +0001059766 00000 n +0001059816 00000 n +0001059866 00000 n +0001059916 00000 n +0001059966 00000 n +0001060016 00000 n +0001060066 00000 n +0001060116 00000 n +0001060166 00000 n +0001060216 00000 n +0001060266 00000 n +0001060316 00000 n +0001060366 00000 n +0001060416 00000 n +0001060466 00000 n +0001060516 00000 n +0001060566 00000 n +0001060616 00000 n +0001060666 00000 n +0001060716 00000 n +0001060766 00000 n +0001060816 00000 n +0001060866 00000 n +0001060916 00000 n +0001060966 00000 n +0001061016 00000 n +0001061066 00000 n +0001061116 00000 n +0001061166 00000 n +0001061216 00000 n +0001061266 00000 n +0001061316 00000 n +0001061366 00000 n +0001061416 00000 n +0001061466 00000 n +0001061516 00000 n +0001061566 00000 n +0001061616 00000 n +0001061666 00000 n +0001061716 00000 n +0001061766 00000 n +0001061816 00000 n +0001061866 00000 n +0001061916 00000 n +0001061966 00000 n +0001062016 00000 n +0001062066 00000 n +0001062116 00000 n +0001062166 00000 n +0001062216 00000 n +0001062266 00000 n +0001062316 00000 n +0001062366 00000 n +0001062416 00000 n +0001062466 00000 n +0001062516 00000 n +0001062566 00000 n +0001062616 00000 n +0001062666 00000 n +0001062716 00000 n +0001062766 00000 n +0001062816 00000 n +0001062866 00000 n +0001062916 00000 n +0001062966 00000 n +0001063016 00000 n +0001063066 00000 n +0001063116 00000 n +0001063166 00000 n +0001063216 00000 n +0001063266 00000 n +0001063316 00000 n +0001063366 00000 n +0001063416 00000 n +0001063466 00000 n +0001063516 00000 n +0001063566 00000 n +0001063616 00000 n +0001063666 00000 n +0001063716 00000 n +0001063766 00000 n +0001063816 00000 n +0001063866 00000 n +0001063916 00000 n +0001063966 00000 n +0001064016 00000 n +0001064066 00000 n +0001064116 00000 n +0001064166 00000 n +0001064216 00000 n +0001064266 00000 n +0001064316 00000 n +0001064366 00000 n +0001064416 00000 n +0001064466 00000 n +0001064516 00000 n +0001064566 00000 n +0001064616 00000 n +0001064666 00000 n +0001064716 00000 n +0001064766 00000 n +0001064816 00000 n +0001064866 00000 n +0001064916 00000 n +0001064966 00000 n +0001065016 00000 n +0001065066 00000 n +0001065116 00000 n +0001065166 00000 n +0001065216 00000 n +0001065266 00000 n +0001065316 00000 n +0001065366 00000 n +0001065416 00000 n +0001065466 00000 n +0001065516 00000 n +0001065566 00000 n +0001065616 00000 n +0001065666 00000 n +0001065716 00000 n +0001065766 00000 n +0001065816 00000 n +0001065866 00000 n +0001065916 00000 n +0001065966 00000 n +0001066016 00000 n +0001066066 00000 n +0001066116 00000 n +0001066166 00000 n +0001066216 00000 n +0001066266 00000 n +0001066316 00000 n +0001066366 00000 n +0001066416 00000 n +0001066466 00000 n +0001066516 00000 n +0001066566 00000 n +0001066616 00000 n +0001066666 00000 n +0001066716 00000 n +0001066766 00000 n +0001066816 00000 n +0001066866 00000 n +0001066916 00000 n +0001066966 00000 n +0001067016 00000 n +0001067066 00000 n +0001067116 00000 n +0001067166 00000 n +0001067216 00000 n +0001067266 00000 n +0001067316 00000 n +0001067366 00000 n +0001067416 00000 n +0001067466 00000 n +0001067516 00000 n +0001067566 00000 n +0001067616 00000 n +0001067666 00000 n +0001067716 00000 n +0001067766 00000 n +0001067816 00000 n +0001067866 00000 n +0001067916 00000 n +0001067966 00000 n +0001068016 00000 n +0001068066 00000 n +0001068116 00000 n +0001068166 00000 n +0001068216 00000 n +0001068266 00000 n +0001068316 00000 n +0001068366 00000 n +0001068416 00000 n +0001068466 00000 n +0001068516 00000 n +0001068566 00000 n +0001068616 00000 n +0001068666 00000 n +0001068716 00000 n +0001068766 00000 n +0001068816 00000 n +0001068866 00000 n +0001068916 00000 n +0001068966 00000 n +0001069016 00000 n +0001069066 00000 n +0001069116 00000 n +0001069166 00000 n +0001069216 00000 n +0001069266 00000 n +0001069316 00000 n +0001069366 00000 n +0001069416 00000 n +0001069466 00000 n +0001069516 00000 n +0001069566 00000 n +0001069616 00000 n +0001069666 00000 n +0001069716 00000 n +0001069766 00000 n +0001069816 00000 n +0001069866 00000 n +0001069916 00000 n +0001069966 00000 n +0001070016 00000 n +0001070066 00000 n +0001070116 00000 n +0001070166 00000 n +0001070216 00000 n +0001070266 00000 n +0001070316 00000 n +0001070366 00000 n +0001070416 00000 n +0001070466 00000 n +0001070516 00000 n +0001070566 00000 n +0001070616 00000 n +0001070666 00000 n +0001070716 00000 n +0001070766 00000 n +0001070816 00000 n +0001070866 00000 n +0001070916 00000 n +0001070966 00000 n +0001071016 00000 n +0001071066 00000 n +0001071116 00000 n +0001071166 00000 n +0001071216 00000 n +0001071266 00000 n +0001071316 00000 n +0001071366 00000 n +0001071416 00000 n +0001071466 00000 n +0001071516 00000 n +0001071566 00000 n +0001071616 00000 n +0001071666 00000 n +0001071716 00000 n +0001071766 00000 n +0001071816 00000 n +0001071866 00000 n +0001071916 00000 n +0001071966 00000 n +0001072016 00000 n +0001072066 00000 n +0001072116 00000 n +0001072166 00000 n +0001072215 00000 n +0001072264 00000 n +0001072313 00000 n +0001072362 00000 n +0001072411 00000 n +0001072460 00000 n +0001072509 00000 n +0001072559 00000 n +0001072609 00000 n +0001072659 00000 n +0001072709 00000 n +0001072759 00000 n +0001072809 00000 n +0001072859 00000 n +0001072909 00000 n +0001072959 00000 n +0001073009 00000 n +0001073059 00000 n +0001073109 00000 n +0001073159 00000 n +0001073209 00000 n +0001073259 00000 n +0001073309 00000 n +0001073359 00000 n +0001073409 00000 n +0001073459 00000 n +0001073509 00000 n +0001073559 00000 n +0001073609 00000 n +0001073659 00000 n +0001073709 00000 n +0001073759 00000 n +0001073809 00000 n +0001073859 00000 n +0001073909 00000 n +0001073959 00000 n +0001074009 00000 n +0001074059 00000 n +0001074109 00000 n +0001074159 00000 n +0001074209 00000 n +0001074259 00000 n +0001074309 00000 n +0001074359 00000 n +0001074409 00000 n +0001074459 00000 n +0001074509 00000 n +0001074559 00000 n +0001074609 00000 n +0001074659 00000 n +0001074709 00000 n +0001074759 00000 n +0001074809 00000 n +0001074859 00000 n +0001074909 00000 n +0001074959 00000 n +0001075009 00000 n +0001075059 00000 n +0001075109 00000 n +0001075159 00000 n +0001075209 00000 n +0001075259 00000 n +0001075309 00000 n +0001075359 00000 n +0001075407 00000 n +0001075455 00000 n +0001075503 00000 n +0001075551 00000 n +0001075600 00000 n +0001075649 00000 n +0001075698 00000 n +0001075747 00000 n +0001075796 00000 n +0001075845 00000 n +0001075894 00000 n +0001075943 00000 n +0001075992 00000 n +0001076041 00000 n +0001076090 00000 n +0001076139 00000 n +0001076188 00000 n +0001076237 00000 n +0001076286 00000 n +0001076335 00000 n +0001076384 00000 n +0001076433 00000 n +0001076482 00000 n +0001076531 00000 n +0001076580 00000 n +0001076629 00000 n +0001076678 00000 n +0001076727 00000 n +0001076776 00000 n +0001076825 00000 n +0001076874 00000 n +0001076923 00000 n +0001076972 00000 n +0001077021 00000 n +0001077070 00000 n +0001077119 00000 n +0001077168 00000 n +0001077217 00000 n +0001077266 00000 n +0001077315 00000 n +0001077364 00000 n +0001077413 00000 n +0001077462 00000 n +0001077511 00000 n +0001077560 00000 n +0001077609 00000 n +0001077658 00000 n +0001077707 00000 n +0001077756 00000 n +0001077805 00000 n +0001077854 00000 n +0001077903 00000 n +0001077952 00000 n +0001078001 00000 n +0001078050 00000 n +0001078099 00000 n +0001078148 00000 n +0001078197 00000 n +0001078246 00000 n +0001078295 00000 n +0001078344 00000 n +0001078393 00000 n +0001078442 00000 n +0001078491 00000 n +0001078542 00000 n +0001078593 00000 n +0001078644 00000 n +0001078695 00000 n +0001078746 00000 n +0001078797 00000 n +0001078848 00000 n +0001078899 00000 n +0001078950 00000 n +0001079001 00000 n +0001079052 00000 n +0001079103 00000 n +0001079154 00000 n +0001079205 00000 n +0001079256 00000 n +0001079307 00000 n +0001079358 00000 n +0001079409 00000 n +0001079460 00000 n +0001079511 00000 n +0001079562 00000 n +0001079613 00000 n +0001079664 00000 n +0001079715 00000 n +0001079766 00000 n +0001079816 00000 n +0001079866 00000 n +0001079916 00000 n +0001079967 00000 n +0001080018 00000 n +0001080068 00000 n +0001080118 00000 n +0001080168 00000 n +0001080219 00000 n +0001080270 00000 n +0001080321 00000 n +0001080373 00000 n +0001080423 00000 n +0001080473 00000 n +0001080523 00000 n +0001080571 00000 n +0001080619 00000 n +0001080667 00000 n +0001080715 00000 n +0001080763 00000 n +0001080811 00000 n +0001080859 00000 n +0001080907 00000 n +0001080955 00000 n +0001081003 00000 n +0001081051 00000 n +0001081099 00000 n +0001081147 00000 n +0001081195 00000 n +0001081243 00000 n +0001081291 00000 n +0001081339 00000 n +0001081387 00000 n +0001081435 00000 n +0001081483 00000 n +0001081531 00000 n +0001081579 00000 n +0001081627 00000 n +0001081675 00000 n +0001081726 00000 n +0001081777 00000 n +0001081828 00000 n +0001081879 00000 n +0001081930 00000 n +0001081981 00000 n +0001082032 00000 n +0001082083 00000 n +0001082134 00000 n +0001082185 00000 n +0001082236 00000 n +0001082287 00000 n +0001082338 00000 n +0001082389 00000 n +0001082440 00000 n +0001082491 00000 n +0001082542 00000 n +0001082593 00000 n +0001082644 00000 n +0001082695 00000 n +0001082746 00000 n +0001082797 00000 n +0001082848 00000 n +0001082899 00000 n +0001082950 00000 n +0001083001 00000 n +0001083052 00000 n +0001083103 00000 n +0001083154 00000 n +0001083205 00000 n +0001083256 00000 n +0001083307 00000 n +0001083358 00000 n +0001083409 00000 n +0001083460 00000 n +0001083511 00000 n +0001083562 00000 n +0001083613 00000 n +0001083664 00000 n +0001083715 00000 n +0001083766 00000 n +0001083817 00000 n +0001083868 00000 n +0001083919 00000 n +0001083970 00000 n +0001084021 00000 n +0001084072 00000 n +0001084123 00000 n +0001084174 00000 n +0001084225 00000 n +0001084276 00000 n +0001084327 00000 n +0001084378 00000 n +0001084429 00000 n +0001084480 00000 n +0001084531 00000 n +0001084582 00000 n +0001084633 00000 n +0001084684 00000 n +0001084735 00000 n +0001084786 00000 n +0001084837 00000 n +0001084888 00000 n +0001084939 00000 n +0001084990 00000 n +0001085041 00000 n +0001085092 00000 n +0001085143 00000 n +0001085194 00000 n +0001085245 00000 n +0001085296 00000 n +0001085347 00000 n +0001085398 00000 n +0001085449 00000 n +0001085500 00000 n +0001085551 00000 n +0001085602 00000 n +0001085653 00000 n +0001085704 00000 n +0001085755 00000 n +0001085806 00000 n +0001085857 00000 n +0001085908 00000 n +0001085959 00000 n +0001086010 00000 n +0001086061 00000 n +0001086112 00000 n +0001086163 00000 n +0001086214 00000 n +0001086265 00000 n +0001086316 00000 n +0001086367 00000 n +0001086418 00000 n +0001086469 00000 n +0001086520 00000 n +0001086571 00000 n +0001086622 00000 n +0001086673 00000 n +0001086724 00000 n +0001086775 00000 n +0001086826 00000 n +0001086877 00000 n +0001086928 00000 n +0001086979 00000 n +0001087030 00000 n +0001087081 00000 n +0001087132 00000 n +0001087183 00000 n +0001087234 00000 n +0001087285 00000 n +0001087336 00000 n +0001087387 00000 n +0001087438 00000 n +0001087489 00000 n +0001087540 00000 n +0001087591 00000 n +0001087642 00000 n +0001087693 00000 n +0001087744 00000 n +0001087795 00000 n +0001087846 00000 n +0001087897 00000 n +0001087948 00000 n +0001087999 00000 n +0001088050 00000 n +0001088101 00000 n +0001088152 00000 n +0001088203 00000 n +0001088254 00000 n +0001088305 00000 n +0001088356 00000 n +0001088407 00000 n +0001088458 00000 n +0001088509 00000 n +0001088560 00000 n +0001088611 00000 n +0001088662 00000 n +0001088713 00000 n +0001088764 00000 n +0001088815 00000 n +0001088866 00000 n +0001088917 00000 n +0001088968 00000 n +0001089019 00000 n +0001089070 00000 n +0001089121 00000 n +0001089172 00000 n +0001089223 00000 n +0001089274 00000 n +0001089325 00000 n +0001089376 00000 n +0001089427 00000 n +0001089478 00000 n +0001089529 00000 n +0001089580 00000 n +0001089631 00000 n +0001089682 00000 n +0001089733 00000 n +0001089784 00000 n +0001089835 00000 n +0001089886 00000 n +0001089937 00000 n +0001089988 00000 n +0001090039 00000 n +0001090090 00000 n +0001090141 00000 n +0001090192 00000 n +0001090243 00000 n +0001090294 00000 n +0001090345 00000 n +0001090396 00000 n +0001090447 00000 n +0001090498 00000 n +0001090549 00000 n +0001090600 00000 n +0001090651 00000 n +0001090702 00000 n +0001090753 00000 n +0001090804 00000 n +0001090855 00000 n +0001090906 00000 n +0001090957 00000 n +0001091008 00000 n +0001091059 00000 n +0001091110 00000 n +0001091161 00000 n +0001091212 00000 n +0001091263 00000 n +0001091314 00000 n +0001091365 00000 n +0001091416 00000 n +0001091467 00000 n +0001091518 00000 n +0001091569 00000 n +0001091620 00000 n +0001091671 00000 n +0001091722 00000 n +0001091773 00000 n +0001091824 00000 n +0001091875 00000 n +0001091926 00000 n +0001091977 00000 n +0001092028 00000 n +0001092079 00000 n +0001092130 00000 n +0001092181 00000 n +0001092232 00000 n +0001092283 00000 n +0001092334 00000 n +0001092385 00000 n +0001092436 00000 n +0001092487 00000 n +0001092538 00000 n +0001092589 00000 n +0001092640 00000 n +0001092691 00000 n +0001092742 00000 n +0001092793 00000 n +0001092844 00000 n +0001092895 00000 n +0001092946 00000 n +0001092997 00000 n +0001093048 00000 n +0001093099 00000 n +0001093150 00000 n +0001093201 00000 n +0001093252 00000 n +0001093303 00000 n +0001093354 00000 n +0001093405 00000 n +0001093456 00000 n +0001093507 00000 n +0001093558 00000 n +0001093609 00000 n +0001093660 00000 n +0001093711 00000 n +0001093762 00000 n +0001093813 00000 n +0001093864 00000 n +0001093915 00000 n +0001093966 00000 n +0001094017 00000 n +0001094068 00000 n +0001094119 00000 n +0001094170 00000 n +0001094221 00000 n +0001094272 00000 n +0001094323 00000 n +0001094374 00000 n +0001094425 00000 n +0001094476 00000 n +0001094527 00000 n +0001094578 00000 n +0001094629 00000 n +0001094680 00000 n +0001094731 00000 n +0001094781 00000 n +0001094831 00000 n +0001094881 00000 n +0001094931 00000 n +0001094982 00000 n +0001095033 00000 n +0001095083 00000 n +0001095133 00000 n +0001095183 00000 n +0001095233 00000 n +0001095283 00000 n +0001095333 00000 n +0001095383 00000 n +0001095433 00000 n +0001095483 00000 n +0001095533 00000 n +0001095583 00000 n +0001095633 00000 n +0001095683 00000 n +0001095734 00000 n +0001095785 00000 n +0001095835 00000 n +0001095886 00000 n +0001095937 00000 n +0001095988 00000 n +0001096039 00000 n +0001096090 00000 n +0001096141 00000 n +0001096192 00000 n +0001096243 00000 n +0001096294 00000 n +0001096345 00000 n +0001096396 00000 n +0001096447 00000 n +0001096498 00000 n +0001096549 00000 n +0001096600 00000 n +0001096651 00000 n +0001096702 00000 n +0001096753 00000 n +0001096804 00000 n +0001096855 00000 n +0001096906 00000 n +0001096957 00000 n +0001097008 00000 n +0001097059 00000 n +0001097110 00000 n +0001097161 00000 n +0001097212 00000 n +0001097263 00000 n +0001097314 00000 n +0001097365 00000 n +0001097416 00000 n +0001097467 00000 n +0001097518 00000 n +0001097569 00000 n +0001097620 00000 n +0001097671 00000 n +0001097722 00000 n +0001097773 00000 n +0001097824 00000 n +0001097875 00000 n +0001097926 00000 n +0001097977 00000 n +0001098028 00000 n +0001098079 00000 n +0001098130 00000 n +0001098181 00000 n +0001098232 00000 n +0001098283 00000 n +0001098334 00000 n +0001098385 00000 n +0001098436 00000 n +0001098487 00000 n +0001098538 00000 n +0001098589 00000 n +0001098640 00000 n +0001098691 00000 n +0001098742 00000 n +0001098793 00000 n +0001098844 00000 n +0001098895 00000 n +0001098945 00000 n +0001098996 00000 n +0001099047 00000 n +0001099098 00000 n +0001099148 00000 n +0001099198 00000 n +0001099249 00000 n +0001099300 00000 n +0001099351 00000 n +0001099401 00000 n +0001099451 00000 n +0001099502 00000 n +0001099552 00000 n +0001099603 00000 n +0001099654 00000 n +0001099705 00000 n +0001099755 00000 n +0001099805 00000 n +0001099855 00000 n +0001099905 00000 n +0001099955 00000 n +0001100005 00000 n +0001100055 00000 n +0001100105 00000 n +0001100155 00000 n +0001100205 00000 n +0001100255 00000 n +0001100305 00000 n +0001100355 00000 n +0001100405 00000 n +0001100455 00000 n +0001100505 00000 n +0001100555 00000 n +0001100605 00000 n +0001100655 00000 n +0001100706 00000 n +0001100757 00000 n +0001100807 00000 n +0001100857 00000 n +0001100907 00000 n +0001100957 00000 n +0001101007 00000 n +0001101057 00000 n +0001101107 00000 n +0001101157 00000 n +0001101207 00000 n +0001101257 00000 n +0001101307 00000 n +0001101357 00000 n +0001101408 00000 n +0001101458 00000 n +0001101508 00000 n +0001101558 00000 n +0001101608 00000 n +0001101658 00000 n +0001101708 00000 n +0001101758 00000 n +0001101808 00000 n +0001101859 00000 n +0001101909 00000 n +0001101959 00000 n +0001102009 00000 n +0001102059 00000 n +0001102109 00000 n +0001102159 00000 n +0001102209 00000 n +0001102259 00000 n +0001102309 00000 n +0001102359 00000 n +0001102409 00000 n +0001102459 00000 n +0001102509 00000 n +0001102559 00000 n +0001102609 00000 n +0001102659 00000 n +0001102709 00000 n +0001102759 00000 n +0001102809 00000 n +0001102859 00000 n +0001102909 00000 n +0001102959 00000 n +0001103009 00000 n +0001103059 00000 n +0001103109 00000 n +0001103159 00000 n +0001103209 00000 n +0001103259 00000 n +0001103309 00000 n +0001103359 00000 n +0001103409 00000 n +0001103459 00000 n +0001103509 00000 n +0001103559 00000 n +0001103609 00000 n +0001103659 00000 n +0001103709 00000 n +0001103759 00000 n +0001103809 00000 n +0001103859 00000 n +0001103909 00000 n +0001103959 00000 n +0001104009 00000 n +0001104059 00000 n +0001104109 00000 n +0001104159 00000 n +0001104210 00000 n +0001104261 00000 n +0001104312 00000 n +0001104363 00000 n +0001104414 00000 n +0001104464 00000 n +0001104514 00000 n +0001104564 00000 n +0001104614 00000 n +0001104664 00000 n +0001104714 00000 n +0001104764 00000 n +0001104814 00000 n +0001104864 00000 n +0001104914 00000 n +0001104964 00000 n +0001105014 00000 n +0001105064 00000 n +0001105114 00000 n +0001105164 00000 n +0001105214 00000 n +0001105264 00000 n +0001105314 00000 n +0001105364 00000 n +0001105414 00000 n +0001105464 00000 n +0001105514 00000 n +0001105564 00000 n +0001105614 00000 n +0001105664 00000 n +0001105715 00000 n +0001105765 00000 n +0001105816 00000 n +0001105866 00000 n +0001105916 00000 n +0001105966 00000 n +0001106016 00000 n +0001106066 00000 n +0001106116 00000 n +0001106166 00000 n +0001106216 00000 n +0001106266 00000 n +0001106316 00000 n +0001106366 00000 n +0001106416 00000 n +0001106466 00000 n +0001106517 00000 n +0001106568 00000 n +0001106619 00000 n +0001106669 00000 n +0001106719 00000 n +0001106769 00000 n +0001106819 00000 n +0001106869 00000 n +0001106919 00000 n +0001106969 00000 n +0001107019 00000 n +0001107069 00000 n +0001107119 00000 n +0001107170 00000 n +0001107221 00000 n +0001107272 00000 n +0001107323 00000 n +0001107373 00000 n +0001107423 00000 n +0001107473 00000 n +0001107523 00000 n +0001107573 00000 n +0001107623 00000 n +0001107673 00000 n +0001107723 00000 n +0001107773 00000 n +0001107823 00000 n +0001107873 00000 n +0001107923 00000 n +0001107973 00000 n +0001108023 00000 n +0001108073 00000 n +0001108123 00000 n +0001108173 00000 n +0001108223 00000 n +0001108273 00000 n +0001108323 00000 n +0001108373 00000 n +0001108423 00000 n +0001108473 00000 n +0001108523 00000 n +0001108573 00000 n +0001108623 00000 n +0001108673 00000 n +0001108723 00000 n +0001108773 00000 n +0001108823 00000 n +0001108873 00000 n +0001108923 00000 n +0001108973 00000 n +0001109023 00000 n +0001109073 00000 n +0001109123 00000 n +0001109173 00000 n +0001109223 00000 n +0001109273 00000 n +0001109323 00000 n +0001109373 00000 n +0001109423 00000 n +0001109473 00000 n +0001109523 00000 n +0001109573 00000 n +0001109623 00000 n +0001109673 00000 n +0001109723 00000 n +0001109773 00000 n +0001109823 00000 n +0001109873 00000 n +0001109923 00000 n +0001109973 00000 n +0001110023 00000 n +0001110073 00000 n +0001110123 00000 n +0001110173 00000 n +0001110223 00000 n +0001110273 00000 n +0001110323 00000 n +0001110373 00000 n +0001110423 00000 n +0001110473 00000 n +0001110523 00000 n +0001110573 00000 n +0001110623 00000 n +0001110673 00000 n +0001110723 00000 n +0001110773 00000 n +0001110823 00000 n +0001110873 00000 n +0001110923 00000 n +0001110973 00000 n +0001111023 00000 n +0001111073 00000 n +0001111123 00000 n +0001111173 00000 n +0001111223 00000 n +0001111273 00000 n +0001111323 00000 n +0001111373 00000 n +0001111423 00000 n +0001111473 00000 n +0001111523 00000 n +0001111573 00000 n +0001111623 00000 n +0001111673 00000 n +0001111723 00000 n +0001111773 00000 n +0001111823 00000 n +0001111873 00000 n +0001111923 00000 n +0001111973 00000 n +0001112023 00000 n +0001112073 00000 n +0001112123 00000 n +0001112173 00000 n +0001112223 00000 n +0001112273 00000 n +0001112323 00000 n +0001112373 00000 n +0001112423 00000 n +0001112473 00000 n +0001112523 00000 n +0001112573 00000 n +0001112623 00000 n +0001112673 00000 n +0001112723 00000 n +0001112773 00000 n +0001112823 00000 n +0001112873 00000 n +0001112923 00000 n +0001112973 00000 n +0001113023 00000 n +0001113073 00000 n +0001113123 00000 n +0001113173 00000 n +0001113223 00000 n +0001113273 00000 n +0001113323 00000 n +0001113373 00000 n +0001113423 00000 n +0001113473 00000 n +0001113523 00000 n +0001113573 00000 n +0001113623 00000 n +0001113673 00000 n +0001113723 00000 n +0001113773 00000 n +0001113823 00000 n +0001113873 00000 n +0001113923 00000 n +0001113973 00000 n +0001114023 00000 n +0001114073 00000 n +0001114122 00000 n +0001114172 00000 n +0001114222 00000 n +0001114272 00000 n +0001114322 00000 n +0001114372 00000 n +0001114422 00000 n +0001114472 00000 n +0001114522 00000 n +0001114572 00000 n +0001114622 00000 n +0001114672 00000 n +0001114722 00000 n +0001114772 00000 n +0001114822 00000 n +0001114872 00000 n +0001114922 00000 n +0001114972 00000 n +0001115022 00000 n +0001115072 00000 n +0001115122 00000 n +0001115172 00000 n +0001115222 00000 n +0001115272 00000 n +0001115322 00000 n +0001115372 00000 n +0001115422 00000 n +0001115472 00000 n +0001115522 00000 n +0001115572 00000 n +0001115622 00000 n +0001115672 00000 n +0001115722 00000 n +0001115772 00000 n +0001115822 00000 n +0001115872 00000 n +0001115922 00000 n +0001115972 00000 n +0001116022 00000 n +0001116072 00000 n +0001116122 00000 n +0001116172 00000 n +0001116222 00000 n +0001116272 00000 n +0001116322 00000 n +0001116372 00000 n +0001116422 00000 n +0001116472 00000 n +0001116522 00000 n +0001116572 00000 n +0001116622 00000 n +0001116672 00000 n +0001116722 00000 n +0001116772 00000 n +0001116822 00000 n +0001116872 00000 n +0001116922 00000 n +0001116972 00000 n +0001117022 00000 n +0001117072 00000 n +0001117122 00000 n +0001117172 00000 n +0001117222 00000 n +0001117276 00000 n +0001117330 00000 n +0001117384 00000 n +0001117438 00000 n +0001117489 00000 n +0001117542 00000 n +0001117595 00000 n +0001117648 00000 n +0001117701 00000 n +0001117754 00000 n +0001117808 00000 n +0001117862 00000 n +0001117913 00000 n +0001117964 00000 n +0001118015 00000 n +0001118066 00000 n +0001118117 00000 n +0001118168 00000 n +0001118219 00000 n +0001118270 00000 n +0001118321 00000 n +0001118372 00000 n +0001118423 00000 n +0001118474 00000 n +0001118525 00000 n +0001118573 00000 n +0001118623 00000 n +0001118673 00000 n +0001118723 00000 n +0001118773 00000 n +0001118823 00000 n +0001118873 00000 n +0001118923 00000 n +0001118973 00000 n +0001119023 00000 n +0001119073 00000 n +0001119123 00000 n +0001119173 00000 n +0001119223 00000 n +0001119273 00000 n +0001119323 00000 n +0001119373 00000 n +0001119423 00000 n +0001119473 00000 n +0001119523 00000 n +0001119573 00000 n +0001119623 00000 n +0001119673 00000 n +0001119723 00000 n +0001119773 00000 n +0001119823 00000 n +0001119873 00000 n +0001119923 00000 n +0001119973 00000 n +0001120023 00000 n +0001120073 00000 n +0001120123 00000 n +0001120173 00000 n +0001120223 00000 n +0001120273 00000 n +0001120323 00000 n +0001120373 00000 n +0001120423 00000 n +0001120473 00000 n +0001120513 00000 n +0001120540 00000 n +0001120626 00000 n +0001120782 00000 n +0001120922 00000 n +0001121067 00000 n +0001121212 00000 n +0001121357 00000 n +0001121502 00000 n +0001121647 00000 n +0001121792 00000 n +0001121937 00000 n +0001122082 00000 n +0001122235 00000 n +0001122391 00000 n +0001122546 00000 n +0001122701 00000 n +0001122856 00000 n +0001123011 00000 n +0001123166 00000 n +0001123321 00000 n +0001123476 00000 n +0001123631 00000 n +0001123786 00000 n +0001123941 00000 n +0001124097 00000 n +0001124252 00000 n +0001124407 00000 n +0001124562 00000 n +0001124717 00000 n +0001124872 00000 n +0001125027 00000 n +0001125182 00000 n +0001125337 00000 n +0001125492 00000 n +0001125647 00000 n +0001125775 00000 n +0001125930 00000 n +0001126085 00000 n +0001126240 00000 n +0001126395 00000 n +0001126550 00000 n +0001126705 00000 n +0001126823 00000 n +0001130507 00000 n +trailer +<<553EE954308755478AC48267F899A01D>]>> +startxref +116 +%%EOF diff --git a/lefdef/doc/lefapi/lefapiTOC.html b/lefdef/doc/lefapi/lefapiTOC.html new file mode 100644 index 00000000..fdb12d34 --- /dev/null +++ b/lefdef/doc/lefapi/lefapiTOC.html @@ -0,0 +1,609 @@ + + + + + Table of Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+View Library + +Table of Contents + + + + Previous + + Next + + +Open PDF to print book + + + + +Email Comments + +Help Using Documentation + +Shut Down Cadence Documentation Server +
+ +